From 5f42894ac2746f721971975ab56f44b0bd1cd608 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Thu, 10 Dec 2020 19:21:04 -0800 Subject: [PATCH 01/94] Added FrodoKEM --- Makefile | 2 +- README.md | 2 +- go.mod | 1 + go.sum | 3 + xs/xs.go | 18 ++--- xsnet/consts.go | 4 + xsnet/net.go | 210 +++++++++++++++++++++++++++++++++++++++++++++--- 7 files changed, 216 insertions(+), 24 deletions(-) diff --git a/Makefile b/Makefile index 0dd4328..3e28c7a 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION := 0.8.25 +VERSION := 0.8.26 .PHONY: lint vis clean common client server passwd subpkgs install uninstall reinstall ## Tag version of binaries with build info wrt. diff --git a/README.md b/README.md index 9ab7ffa..9a57e48 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ Currently supported exchanges are: [Omar Elejandro Herrera Reyna's HerraduraKEx project](http://github.com/Caume/HerraduraKEx); * The KYBER IND-CCA-2 secure key encapsulation mechanism, [pq-crystals Kyber](https://pq-crystals.org/kyber/) :: [Yawning/kyber golang implementation](https://git.schwanenlied.me/yawning/kyber) * The NEWHOPE algorithm [newhopecrypto.org](https://www.newhopecrypto.org/) :: [Yawning/go-newhope golang implementation](https://git.schwanenlied.me/yawning/newhope) - +* The FrodoKEM algorithm [frodokem.org](https://frodokem.org/) :: Go version by [Eduardo E. S. Riccardi](https://github.com/kuking/go-frodokem) Currently supported session algorithms: diff --git a/go.mod b/go.mod index a141e77..ad14ca0 100644 --- a/go.mod +++ b/go.mod @@ -13,6 +13,7 @@ require ( github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f github.com/klauspost/reedsolomon v1.9.9 // indirect github.com/kr/pty v1.1.8 + github.com/kuking/go-frodokem v1.0.1 github.com/mattn/go-isatty v0.0.12 github.com/mmcloughlin/avo v0.0.0-20200523190732-4439b6b2c061 // indirect github.com/pkg/errors v0.9.1 // indirect diff --git a/go.sum b/go.sum index 32eeff6..c74f16f 100644 --- a/go.sum +++ b/go.sum @@ -33,6 +33,8 @@ github.com/klauspost/reedsolomon v1.9.9 h1:qCL7LZlv17xMixl55nq2/Oa1Y86nfO8EqDfv2 github.com/klauspost/reedsolomon v1.9.9/go.mod h1:O7yFFHiQwDR6b2t63KPUpccPtNdp5ADgh1gg4fd12wo= github.com/kr/pty v1.1.8 h1:AkaSdXYQOWeaO3neb8EM634ahkXXe3jYbVh/F9lq+GI= github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= +github.com/kuking/go-frodokem v1.0.1 h1:13bks3u4CPpvUtOLttT+A37j9myV4kLnS7Z3qDiTm4o= +github.com/kuking/go-frodokem v1.0.1/go.mod h1:TzD0W9QnVOcwigeSySEuNZfJaGxWRtFRb7hXe/w/waI= github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mmcloughlin/avo v0.0.0-20200523190732-4439b6b2c061 h1:UCU8+cLbbvyxi0sQ9fSeoEhZgvrrD9HKMtX6Gmc1vk8= @@ -50,6 +52,7 @@ github.com/tjfoc/gmsm v1.3.0 h1:i7c6Za/IlgBvnGxYpfD7L3TGuaS+v6oGcgq+J9/ecEA= github.com/tjfoc/gmsm v1.3.0/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w= github.com/tjfoc/gmsm v1.3.1 h1:+k3IAlF81c31/TllJmIfuCYnjl8ziMdTWGWJcP9J1uo= github.com/tjfoc/gmsm v1.3.1/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w= +github.com/ulikunitz/xz v0.5.7/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/xtaci/kcp-go v1.0.1 h1:SEZn2Iick6ualQpV8yY9cXdDTgbfBHPIwJl7UvxfxLQ= github.com/xtaci/kcp-go v5.4.20+incompatible h1:TN1uey3Raw0sTz0Fg8GkfM0uH3YwzhnZWQ1bABv5xAg= github.com/xtaci/kcp-go v5.4.20+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE= diff --git a/xs/xs.go b/xs/xs.go index 17d53b7..2eedb39 100755 --- a/xs/xs.go +++ b/xs/xs.go @@ -64,22 +64,22 @@ const bob = string("\r\n\r\n" + "@@@@@@@^^~~~~~~~~~~~~~~~~~~~~^@@@@@@@@@\r\n" + "@@@@@@^ ~^ @ @@ @ @ @ I ~^@@@@@@\r\n" + "@@@@@ ~ ~~ ~I @@@@@\r\n" + - "@@@@' ' _,w@< @@@@\r\n" + + "@@@@' ' _,w@< @@@@ .\r\n" + "@@@@ @@@@@@@@w___,w@@@@@@@@ @ @@@\r\n" + - "@@@@ @@@@@@@@@@@@@@@@@@@@@@ I @@@\r\n" + + "@@@@ @@@@@@@@@@@@@@@@@@@@@@ I @@@ Bob\r\n" + "@@@@ @@@@@@@@@@@@@@@@@@@@*@[ i @@@\r\n" + - "@@@@ @@@@@@@@@@@@@@@@@@@@[][ | ]@@@\r\n" + + "@@@@ @@@@@@@@@@@@@@@@@@@@[][ | ]@@@ bOb\r\n" + "@@@@ ~_,,_ ~@@@@@@@~ ____~ @ @@@\r\n" + - "@@@@ _~ , , `@@@~ _ _`@ ]L J@@@\r\n" + + "@@@@ _~ , , `@@@~ _ _`@ ]L J@@@ o\r\n" + "@@@@ , @@w@ww+ @@@ww``,,@w@ ][ @@@@\r\n" + - "@@@@, @@@@www@@@ @@@@@@@ww@@@@@[ @@@@\r\n" + + "@@@@, @@@@www@@@ @@@@@@@ww@@@@@[ @@@@ BOB\r\n" + "@@@@@_|| @@@@@@P' @@P@@@@@@@@@@@[|c@@@@\r\n" + - "@@@@@@w| '@@P~ P]@@@-~, ~Y@@^'],@@@@@@\r\n" + + "@@@@@@w| '@@P~ P]@@@-~, ~Y@@^'],@@@@@@ . o\r\n" + "@@@@@@@[ _ _J@@Tk ]]@@@@@@\r\n" + "@@@@@@@@,@ @@, c,,,,,,,y ,w@@[ ,@@@@@@@\r\n" + - "@@@@@@@@@ i @w ====--_@@@@@ @@@@@@@@\r\n" + + "@@@@@@@@@ i @w ====--_@@@@@ @@@@@@@@ o .\r\n" + "@@@@@@@@@@`,P~ _ ~^^^^Y@@@@@ @@@@@@@@@\r\n" + - "@@@@^^=^@@^ ^' ,ww,w@@@@@ _@@@@@@@@@@\r\n" + + "@@@@^^=^@@^ ^' ,ww,w@@@@@ _@@@@@@@@@@ B o B\r\n" + "@@@_xJ~ ~ , @@@@@@@P~_@@@@@@@@@@@@\r\n" + "@@ @, ,@@@,_____ _,J@@@@@@@@@@@@@\r\n" + "@@L `' ,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r\n" + @@ -712,7 +712,7 @@ func main() { flag.BoolVar(&dbg, "d", false, "debug logging") flag.StringVar(&cipherAlg, "c", "C_AES_256", "session `cipher` [C_AES_256 | C_TWOFISH_128 | C_BLOWFISH_64 | C_CRYPTMT1 | C_CHACHA20_12]") flag.StringVar(&hmacAlg, "m", "H_SHA256", "session `HMAC` [H_SHA256 | H_SHA512]") - flag.StringVar(&kexAlg, "k", "KEX_HERRADURA512", "KEx `alg` [KEX_HERRADURA{256/512/1024/2048} | KEX_KYBER{512/768/1024} | KEX_NEWHOPE | KEX_NEWHOPE_SIMPLE]") + flag.StringVar(&kexAlg, "k", "KEX_HERRADURA512", "KEx `alg` [KEX_HERRADURA{256/512/1024/2048} | KEX_KYBER{512/768/1024} | KEX_NEWHOPE | KEX_NEWHOPE_SIMPLE | KEX_FRODOKEM_{1344|976}{AES|SHAKE}]") flag.StringVar(&kcpMode, "K", "unused", "KCP `alg`, one of [KCP_NONE | KCP_AES | KCP_BLOWFISH | KCP_CAST5 | KCP_SM4 | KCP_SALSA20 | KCP_SIMPLEXOR | KCP_TEA | KCP_3DES | KCP_TWOFISH | KCP_XTEA] to use KCP (github.com/xtaci/kcp-go) reliable UDP instead of TCP") flag.UintVar(&port, "p", 2000, "``port") //flag.StringVar(&authCookie, "a", "", "auth cookie") diff --git a/xsnet/consts.go b/xsnet/consts.go index 57144b4..c632198 100644 --- a/xsnet/consts.go +++ b/xsnet/consts.go @@ -29,6 +29,10 @@ const ( KEX_NEWHOPE_SIMPLE // 'NewHopeLP-Simple' - https://eprint.iacr.org/2016/1157 KEX_resvd14 KEX_resvd15 + KEX_FRODOKEM_1344AES + KEX_FRODOKEM_1344SHAKE + KEX_FRODOKEM_976AES + KEX_FRODOKEM_976SHAKE KEX_invalid = 255 ) diff --git a/xsnet/net.go b/xsnet/net.go index c559a72..afd79df 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -44,6 +44,7 @@ import ( "blitter.com/go/kyber" "blitter.com/go/newhope" "blitter.com/go/xs/logger" + frodo "github.com/kuking/go-frodokem" ) /*---------------------------------------------------------------------*/ @@ -126,6 +127,14 @@ func (k *KEXAlg) String() string { return "KEX_NEWHOPE" case KEX_NEWHOPE_SIMPLE: return "KEX_NEWHOPE_SIMPLE" + case KEX_FRODOKEM_1344AES: + return "KEX_FRODOKEM_1344AES" + case KEX_FRODOKEM_1344SHAKE: + return "KEX_FRODOKEM_1344SHAKE" + case KEX_FRODOKEM_976AES: + return "KEX_FRODOKEM_976AES" + case KEX_FRODOKEM_976SHAKE: + return "KEX_FRODOKEM_976SHAKE" default: return "KEX_ERR_UNK" } @@ -276,6 +285,14 @@ func _new(kexAlg KEXAlg, conn *net.Conn) (hc *Conn, e error) { case KEX_NEWHOPE: fallthrough case KEX_NEWHOPE_SIMPLE: + fallthrough + case KEX_FRODOKEM_1344AES: + fallthrough + case KEX_FRODOKEM_1344SHAKE: + fallthrough + case KEX_FRODOKEM_976AES: + fallthrough + case KEX_FRODOKEM_976SHAKE: log.Printf("[KEx alg %d accepted]\n", kexAlg) default: // UNREACHABLE: _getkexalgnum() guarantees a valid KEX value @@ -375,11 +392,86 @@ func getkexalgnum(extensions ...string) (k KEXAlg) { case "KEX_NEWHOPE_SIMPLE": k = KEX_NEWHOPE_SIMPLE break //out of for + case "KEX_FRODOKEM_1344AES": + k = KEX_FRODOKEM_1344AES + break //out of for + case "KEX_FRODOKEM_1344SHAKE": + k = KEX_FRODOKEM_1344SHAKE + break //out of for + case "KEX_FRODOKEM_976AES": + k = KEX_FRODOKEM_976AES + break //out of for + case "KEX_FRODOKEM_976SHAKE": + k = KEX_FRODOKEM_976SHAKE + break //out of for } } return } +func FrodoKEMDialSetup(c io.ReadWriter, hc *Conn) (err error) { + // Send xsnet.Conn parameters to remote side + + // Alice, step 1: Generate a key pair. + var kem frodo.FrodoKEM + + switch hc.kex { + case KEX_FRODOKEM_1344AES: + kem = frodo.Frodo1344AES() + case KEX_FRODOKEM_1344SHAKE: + kem = frodo.Frodo1344SHAKE() + case KEX_FRODOKEM_976AES: + kem = frodo.Frodo976AES() + default: + kem = frodo.Frodo976SHAKE() + } + pubA, secA := kem.Keygen() // pA + //log.Printf("[pubKeyAlice: %v]\n", pubA) + + // Alice, step 2: Send the public key (na,ea) to Bob + fmt.Fprintf(c, "0x%x\n", pubA) + + // (... and cipher, connection opts) + fmt.Fprintf(c, "0x%x:0x%x\n", hc.cipheropts, hc.opts) + + // [Bob does the same and sends use a public key (nb, eb) + pubB_bigint := big.NewInt(0) + _, err = fmt.Fscanf(c, "0x%x\n", pubB_bigint) + pubB := pubB_bigint.Bytes() + //log.Printf("[Got pubKeyBob[]:%v]\n", pubB) + + // (... and cipher, connection opts) + _, err = fmt.Fscanf(c, "0x%x:0x%x\n", + &hc.cipheropts, &hc.opts) + if err != nil { + return err + } + + // Alice, step 3: Create ctAtoB, shareA + ctAtoB, shareA, err := kem.Encapsulate(pubB) + if err != nil { + return err + } + + // Alice, step 4: Send ctAtoB to Bob + fmt.Fprintf(c, "0x%x\n", ctAtoB) + + // Alice, step 5: Receive ctBtoA from Bob + ctBtoA_bigint := big.NewInt(0) + _, err = fmt.Fscanf(c, "0x%x\n", ctBtoA_bigint) + ctBtoA := ctBtoA_bigint.Bytes() + log.Printf("[Got ctBob[]:%v]\n", ctBtoA) + + // Alice, step 6: compute Bob's share + shareB, err := kem.Dencapsulate(secA, ctBtoA) + sessionKey := append(shareA, shareB...) + //log.Printf("[Derived sharedSecret:0x%x]\n", sessionKey) + + hc.r, hc.rm, err = hc.getStream(sessionKey) + hc.w, hc.wm, err = hc.getStream(sessionKey) + return +} + // randReader wraps rand.Read() in a struct that implements io.Reader // for use by the Kyber and NEWHOPE/NEWHOPE_SIMPLE KEM methods. type randReader struct { @@ -413,7 +505,7 @@ func NewHopeDialSetup(c io.ReadWriter, hc *Conn) (err error) { for i := range pubKeyBob.Send { pubKeyBob.Send[i] = publicKeyBob.Bytes()[i] } - log.Printf("[Got server pubKey[]:%v]\n", pubKeyBob) + //log.Printf("[Got server pubKey[]:%v]\n", pubKeyBob) // Read cipheropts, session opts _, err = fmt.Fscanf(c, "0x%x:0x%x\n", @@ -429,7 +521,7 @@ func NewHopeDialSetup(c io.ReadWriter, hc *Conn) (err error) { if err != nil { panic(err) } - log.Printf("[Derived sharedSecret:0x%x]\n", aliceSharedSecret) + //log.Printf("[Derived sharedSecret:0x%x]\n", aliceSharedSecret) hc.r, hc.rm, err = hc.getStream(aliceSharedSecret) hc.w, hc.wm, err = hc.getStream(aliceSharedSecret) return @@ -457,7 +549,7 @@ func NewHopeSimpleDialSetup(c io.ReadWriter, hc *Conn) (err error) { for i := range pubKeyBob.Send { pubKeyBob.Send[i] = publicKeyBob.Bytes()[i] } - log.Printf("[Got server pubKey[]:%v]\n", pubKeyBob) + //log.Printf("[Got server pubKey[]:%v]\n", pubKeyBob) // Read cipheropts, session opts _, err = fmt.Fscanf(c, "0x%x:0x%x\n", @@ -473,7 +565,7 @@ func NewHopeSimpleDialSetup(c io.ReadWriter, hc *Conn) (err error) { if err != nil { panic(err) } - log.Printf("[Derived sharedSecret:0x%x]\n", aliceSharedSecret) + //log.Printf("[Derived sharedSecret:0x%x]\n", aliceSharedSecret) hc.r, hc.rm, err = hc.getStream(aliceSharedSecret) hc.w, hc.wm, err = hc.getStream(aliceSharedSecret) return @@ -512,7 +604,7 @@ func KyberDialSetup(c io.ReadWriter /*net.Conn*/, hc *Conn) (err error) { //if err != nil { // return err //} - log.Printf("[Got server pubKeyB[]:%v]\n", pubKeyB) + //log.Printf("[Got server pubKeyB[]:%v]\n", pubKeyB) // Read cipheropts, session opts _, err = fmt.Fscanf(c, "0x%x:0x%x\n", @@ -524,7 +616,7 @@ func KyberDialSetup(c io.ReadWriter /*net.Conn*/, hc *Conn) (err error) { // Alice, step 3: Decrypt the KEM cipher text. aliceSharedSecret := alicePrivateKey.KEMDecrypt(pubKeyB) - log.Printf("[Derived sharedSecret:0x%x]\n", aliceSharedSecret) + //log.Printf("[Derived sharedSecret:0x%x]\n", aliceSharedSecret) hc.r, hc.rm, err = hc.getStream(aliceSharedSecret) hc.w, hc.wm, err = hc.getStream(aliceSharedSecret) return @@ -573,13 +665,74 @@ func HKExDialSetup(c io.ReadWriter /*net.Conn*/, hc *Conn) (err error) { return } +func FrodoKEMAcceptSetup(c *net.Conn, hc *Conn) (err error) { + // Bob, step 1: Generate a key pair. + var kem frodo.FrodoKEM + + switch hc.kex { + case KEX_FRODOKEM_1344AES: + kem = frodo.Frodo1344AES() + case KEX_FRODOKEM_1344SHAKE: + kem = frodo.Frodo1344SHAKE() + case KEX_FRODOKEM_976AES: + kem = frodo.Frodo976AES() + default: + kem = frodo.Frodo976SHAKE() + } + pubB, secB := kem.Keygen() + //log.Printf("[pubKeyBob: %v]\n", pubB) + + // Bob, step 2: Send the public key (nb,eb) to Alice + fmt.Fprintf(*c, "0x%x\n", pubB) + + // (... and cipher, connection opts) + fmt.Fprintf(*c, "0x%x:0x%x\n", hc.cipheropts, hc.opts) + + // [Alice does the same and sends use a public key (na, ea) + pubA_bigint := big.NewInt(0) + _, err = fmt.Fscanf(*c, "0x%x\n", pubA_bigint) + pubA := pubA_bigint.Bytes() + //log.Printf("[Got pubKeyAlice[]:%v]\n", pubA) + + // (... and cipher, connection opts) + _, err = fmt.Fscanf(*c, "0x%x:0x%x\n", + &hc.cipheropts, &hc.opts) + if err != nil { + return err + } + + // Bob, step 3: Create ctBtoA, shareB + ctBtoA, shareB, err := kem.Encapsulate(pubA) + if err != nil { + return err + } + + // Bob, step 4: Send ctBtoA to Alice + fmt.Fprintf(*c, "0x%x\n", ctBtoA) + + // Bob, step 5: Receive ctAtoB from Alice + ctAtoB_bigint := big.NewInt(0) + _, err = fmt.Fscanf(*c, "0x%x\n", ctAtoB_bigint) + ctAtoB := ctAtoB_bigint.Bytes() + log.Printf("[Got ctAlice[]:%v]\n", ctAtoB) + + // Alice, step 6: compute Bob's share + shareA, err := kem.Dencapsulate(secB, ctAtoB) + sessionKey := append(shareA, shareB...) + //log.Printf("[Derived sharedSecret:0x%x]\n", sessionKey) + + hc.r, hc.rm, err = hc.getStream(sessionKey) + hc.w, hc.wm, err = hc.getStream(sessionKey) + return +} + func NewHopeAcceptSetup(c *net.Conn, hc *Conn) (err error) { r := new(randReader) rand.Seed(time.Now().UnixNano()) // Bob, step 1: Deserialize Alice's public key from the binary encoding. alicePublicKey := big.NewInt(0) _, err = fmt.Fscanln(*c, alicePublicKey) - log.Printf("[Got client pubKey:0x%x\n]", alicePublicKey) + //log.Printf("[Got client pubKey:0x%x\n]", alicePublicKey) if err != nil { return err } @@ -606,7 +759,7 @@ func NewHopeAcceptSetup(c *net.Conn, hc *Conn) (err error) { fmt.Fprintf(*c, "0x%x\n0x%x:0x%x\n", pubKeyBob.Send, hc.cipheropts, hc.opts) - log.Printf("[Derived sharedSecret:0x%x]\n", bobSharedSecret) + //log.Printf("[Derived sharedSecret:0x%x]\n", bobSharedSecret) hc.r, hc.rm, err = hc.getStream(bobSharedSecret) hc.w, hc.wm, err = hc.getStream(bobSharedSecret) return @@ -618,7 +771,7 @@ func NewHopeSimpleAcceptSetup(c *net.Conn, hc *Conn) (err error) { // Bob, step 1: Deserialize Alice's public key from the binary encoding. alicePublicKey := big.NewInt(0) _, err = fmt.Fscanln(*c, alicePublicKey) - log.Printf("[Got client pubKey:0x%x\n]", alicePublicKey) + //log.Printf("[Got client pubKey:0x%x\n]", alicePublicKey) if err != nil { return err } @@ -645,7 +798,7 @@ func NewHopeSimpleAcceptSetup(c *net.Conn, hc *Conn) (err error) { fmt.Fprintf(*c, "0x%x\n0x%x:0x%x\n", pubKeyBob.Send, hc.cipheropts, hc.opts) - log.Printf("[Derived sharedSecret:0x%x]\n", bobSharedSecret) + //log.Printf("[Derived sharedSecret:0x%x]\n", bobSharedSecret) hc.r, hc.rm, err = hc.getStream(bobSharedSecret) hc.w, hc.wm, err = hc.getStream(bobSharedSecret) return @@ -655,7 +808,7 @@ func KyberAcceptSetup(c *net.Conn, hc *Conn) (err error) { // Bob, step 1: Deserialize Alice's public key from the binary encoding. alicePublicKey := big.NewInt(0) _, err = fmt.Fscanln(*c, alicePublicKey) - log.Printf("[Got client pubKey:0x%x\n]", alicePublicKey) + //log.Printf("[Got client pubKey:0x%x\n]", alicePublicKey) if err != nil { return err } @@ -694,7 +847,7 @@ func KyberAcceptSetup(c *net.Conn, hc *Conn) (err error) { fmt.Fprintf(*c, "0x%x\n0x%x:0x%x\n", cipherText, hc.cipheropts, hc.opts) - log.Printf("[Derived sharedSecret:0x%x]\n", bobSharedSecret) + //log.Printf("[Derived sharedSecret:0x%x]\n", bobSharedSecret) hc.r, hc.rm, err = hc.getStream(bobSharedSecret) hc.w, hc.wm, err = hc.getStream(bobSharedSecret) return @@ -817,6 +970,17 @@ func Dial(protocol string, ipport string, extensions ...string) (hc Conn, err er if NewHopeSimpleDialSetup(c, &hc) != nil { return Conn{}, nil } + case KEX_FRODOKEM_1344AES: + fallthrough + case KEX_FRODOKEM_1344SHAKE: + fallthrough + case KEX_FRODOKEM_976AES: + fallthrough + case KEX_FRODOKEM_976SHAKE: + log.Printf("[Setting up for KEX_FRODOKEM %d]\n", hc.kex) + if FrodoKEMDialSetup(c, &hc) != nil { + return Conn{}, nil + } default: return Conn{}, err } @@ -1000,6 +1164,26 @@ func (hl *HKExListener) Accept() (hc Conn, err error) { if NewHopeSimpleAcceptSetup(&c, &hc) != nil { return Conn{}, err } + case KEX_FRODOKEM_1344AES: + log.Printf("[Setting up for KEX_FRODOKEM_1344AES %d]\n", hc.kex) + if FrodoKEMAcceptSetup(&c, &hc) != nil { + return Conn{}, err + } + case KEX_FRODOKEM_1344SHAKE: + log.Printf("[Setting up for KEX_FRODOKEM_1344SHAKE %d]\n", hc.kex) + if FrodoKEMAcceptSetup(&c, &hc) != nil { + return Conn{}, err + } + case KEX_FRODOKEM_976AES: + log.Printf("[Setting up for KEX_FRODOKEM_976AES %d]\n", hc.kex) + if FrodoKEMAcceptSetup(&c, &hc) != nil { + return Conn{}, err + } + case KEX_FRODOKEM_976SHAKE: + log.Printf("[Setting up for KEX_FRODOKEM_976SHAKE %d]\n", hc.kex) + if FrodoKEMAcceptSetup(&c, &hc) != nil { + return Conn{}, err + } default: return Conn{}, err } @@ -1235,7 +1419,7 @@ func (hc Conn) Read(b []byte) (n int, err error) { } hTmp := hc.rm.Sum(nil)[0:HMAC_CHK_SZ] - log.Printf("<%04x) HMAC:(i)%s (c)%02x\r\n", decryptN, hex.EncodeToString([]byte(hmacIn[0:])), hTmp) + //log.Printf("<%04x) HMAC:(i)%s (c)%02x\r\n", decryptN, hex.EncodeToString([]byte(hmacIn[0:])), hTmp) if *hc.closeStat == CSETruncCSO { logger.LogDebug(fmt.Sprintln("[cannot verify HMAC]")) From 640e59be4f2eec40227a4f6eab00f921510ec637 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Tue, 15 Dec 2020 21:15:15 -0800 Subject: [PATCH 02/94] Comment re: AtE vs. EtA --- xsnet/net.go | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/xsnet/net.go b/xsnet/net.go index afd79df..6cc6c90 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -427,13 +427,13 @@ func FrodoKEMDialSetup(c io.ReadWriter, hc *Conn) (err error) { } pubA, secA := kem.Keygen() // pA //log.Printf("[pubKeyAlice: %v]\n", pubA) - + // Alice, step 2: Send the public key (na,ea) to Bob fmt.Fprintf(c, "0x%x\n", pubA) - + // (... and cipher, connection opts) fmt.Fprintf(c, "0x%x:0x%x\n", hc.cipheropts, hc.opts) - + // [Bob does the same and sends use a public key (nb, eb) pubB_bigint := big.NewInt(0) _, err = fmt.Fscanf(c, "0x%x\n", pubB_bigint) @@ -446,27 +446,27 @@ func FrodoKEMDialSetup(c io.ReadWriter, hc *Conn) (err error) { if err != nil { return err } - + // Alice, step 3: Create ctAtoB, shareA ctAtoB, shareA, err := kem.Encapsulate(pubB) if err != nil { return err } - + // Alice, step 4: Send ctAtoB to Bob fmt.Fprintf(c, "0x%x\n", ctAtoB) - + // Alice, step 5: Receive ctBtoA from Bob ctBtoA_bigint := big.NewInt(0) _, err = fmt.Fscanf(c, "0x%x\n", ctBtoA_bigint) ctBtoA := ctBtoA_bigint.Bytes() log.Printf("[Got ctBob[]:%v]\n", ctBtoA) - + // Alice, step 6: compute Bob's share shareB, err := kem.Dencapsulate(secA, ctBtoA) sessionKey := append(shareA, shareB...) //log.Printf("[Derived sharedSecret:0x%x]\n", sessionKey) - + hc.r, hc.rm, err = hc.getStream(sessionKey) hc.w, hc.wm, err = hc.getStream(sessionKey) return @@ -681,13 +681,13 @@ func FrodoKEMAcceptSetup(c *net.Conn, hc *Conn) (err error) { } pubB, secB := kem.Keygen() //log.Printf("[pubKeyBob: %v]\n", pubB) - + // Bob, step 2: Send the public key (nb,eb) to Alice fmt.Fprintf(*c, "0x%x\n", pubB) - + // (... and cipher, connection opts) fmt.Fprintf(*c, "0x%x:0x%x\n", hc.cipheropts, hc.opts) - + // [Alice does the same and sends use a public key (na, ea) pubA_bigint := big.NewInt(0) _, err = fmt.Fscanf(*c, "0x%x\n", pubA_bigint) @@ -700,27 +700,27 @@ func FrodoKEMAcceptSetup(c *net.Conn, hc *Conn) (err error) { if err != nil { return err } - + // Bob, step 3: Create ctBtoA, shareB ctBtoA, shareB, err := kem.Encapsulate(pubA) if err != nil { return err } - + // Bob, step 4: Send ctBtoA to Alice fmt.Fprintf(*c, "0x%x\n", ctBtoA) - + // Bob, step 5: Receive ctAtoB from Alice ctAtoB_bigint := big.NewInt(0) _, err = fmt.Fscanf(*c, "0x%x\n", ctAtoB_bigint) ctAtoB := ctAtoB_bigint.Bytes() log.Printf("[Got ctAlice[]:%v]\n", ctAtoB) - + // Alice, step 6: compute Bob's share shareA, err := kem.Dencapsulate(secB, ctAtoB) sessionKey := append(shareA, shareB...) //log.Printf("[Derived sharedSecret:0x%x]\n", sessionKey) - + hc.r, hc.rm, err = hc.getStream(sessionKey) hc.w, hc.wm, err = hc.getStream(sessionKey) return @@ -1501,6 +1501,19 @@ func (hc *Conn) WritePacket(b []byte, ctrlStatOp byte) (n int, err error) { log.Printf(" :>ptext:\r\n%s\r\n", hex.Dump(b[0:payloadLen])) } + // NOTE the code currently uses Authenticate-then-Encrypt, which in block modes + // is insecure; however + // 1) we are using exclusively XOR-stream modes with random padding, + // 2) are padding randomly either before or after the real payload, and + // 3) the padding side indicator value itself is part of the ciphertext + // ... thus are not subject to oracle attacks of the type used on SSL + // (see https://link.springer.com/content/pdf/10.1007%2F3-540-44647-8_19.pdf) + // + // Nevertheless, to address any future concerns this code may switch to + // Encrypt-then-Auth and offer the current scheme as a legacy mode + // (or just issue a breaking release since this is very pre-1.0.) + // -rlm 2020-12-15 + // Calculate hmac on payload hc.wm.Write(b[0:payloadLen]) hmacOut = hc.wm.Sum(nil)[0:HMAC_CHK_SZ] From 3193ede825a2cc90890a31f59081713639fc3a4e Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Tue, 15 Dec 2020 22:09:18 -0800 Subject: [PATCH 03/94] **BREAKING** Switch to EtA per Krawczyk2001 Signed-off-by: Russ Magee --- Makefile | 2 +- xsnet/net.go | 49 ++++++++++++++++++++++--------------------------- 2 files changed, 23 insertions(+), 28 deletions(-) diff --git a/Makefile b/Makefile index 3e28c7a..ff37254 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION := 0.8.26 +VERSION := 0.9.0pre .PHONY: lint vis clean common client server passwd subpkgs install uninstall reinstall ## Tag version of binaries with build info wrt. diff --git a/xsnet/net.go b/xsnet/net.go index 6cc6c90..3260cab 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -1288,6 +1288,16 @@ func (hc Conn) Read(b []byte) (n int, err error) { log.Printf(" <:ctext:\r\n%s\r\n", hex.Dump(payloadBytes[:n])) } + hc.rm.Write(payloadBytes) // Calc hmac on received data + hTmp := hc.rm.Sum(nil)[0:HMAC_CHK_SZ] + //log.Printf("<%04x) HMAC:(i)%s (c)%02x\r\n", decryptN, hex.EncodeToString([]byte(hmacIn[0:])), hTmp) + + // Log alert if hmac didn't match, corrupted channel + if !bytes.Equal(hTmp, []byte(hmacIn[0:])) /*|| hmacIn[0] > 0xf8*/ { + logger.LogDebug(fmt.Sprintln("** ALERT - detected HMAC mismatch, possible channel tampering **")) + _, _ = (*hc.c).Write([]byte{CSOHmacInvalid}) + } + db := bytes.NewBuffer(payloadBytes[:n]) //copying payloadBytes to db // The StreamReader acts like a pipe, decrypting // whatever is available and forwarding the result @@ -1303,7 +1313,6 @@ func (hc Conn) Read(b []byte) (n int, err error) { log.Println("xsnet.Read():", err) //panic(err) } else { - hc.rm.Write(payloadBytes) // Calc hmac on received data // Padding: Read padSide, padLen, (padding | d) or (d | padding) padSide := payloadBytes[0] padLen := payloadBytes[1] @@ -1417,19 +1426,6 @@ func (hc Conn) Read(b []byte) (n int, err error) { } else { logger.LogDebug(fmt.Sprintf("[Unknown CSOType:%d]", ctrlStatOp)) } - - hTmp := hc.rm.Sum(nil)[0:HMAC_CHK_SZ] - //log.Printf("<%04x) HMAC:(i)%s (c)%02x\r\n", decryptN, hex.EncodeToString([]byte(hmacIn[0:])), hTmp) - - if *hc.closeStat == CSETruncCSO { - logger.LogDebug(fmt.Sprintln("[cannot verify HMAC]")) - } else { - // Log alert if hmac didn't match, corrupted channel - if !bytes.Equal(hTmp, []byte(hmacIn[0:])) /*|| hmacIn[0] > 0xf8*/ { - logger.LogDebug(fmt.Sprintln("** ALERT - detected HMAC mismatch, possible channel tampering **")) - _, _ = (*hc.c).Write([]byte{CSOHmacInvalid}) - } - } } } @@ -1501,25 +1497,19 @@ func (hc *Conn) WritePacket(b []byte, ctrlStatOp byte) (n int, err error) { log.Printf(" :>ptext:\r\n%s\r\n", hex.Dump(b[0:payloadLen])) } - // NOTE the code currently uses Authenticate-then-Encrypt, which in block modes - // is insecure; however - // 1) we are using exclusively XOR-stream modes with random padding, + // NOTE releases prior to v0.9 used Authenticate-then-Encrypt, + // which in block modes is insecure; however + // 1) we use exclusively XOR-stream modes with random padding, // 2) are padding randomly either before or after the real payload, and // 3) the padding side indicator value itself is part of the ciphertext // ... thus are not subject to oracle attacks of the type used on SSL - // (see https://link.springer.com/content/pdf/10.1007%2F3-540-44647-8_19.pdf) + // (described in (Krawczyk 2001/2014, + // https://link.springer.com/content/pdf/10.1007%2F3-540-44647-8_19.pdf) // - // Nevertheless, to address any future concerns this code may switch to - // Encrypt-then-Auth and offer the current scheme as a legacy mode - // (or just issue a breaking release since this is very pre-1.0.) + // Nevertheless, to address any future concerns v0.9 onwards switches to + // Encrypt-then-Auth and breaks interop with earlier versions. // -rlm 2020-12-15 - // Calculate hmac on payload - hc.wm.Write(b[0:payloadLen]) - hmacOut = hc.wm.Sum(nil)[0:HMAC_CHK_SZ] - - //log.Printf(" (%08x> HMAC(o):%s\r\n", payloadLen, hex.EncodeToString(hmacOut)) - var wb bytes.Buffer // The StreamWriter acts like a pipe, forwarding whatever is // written to it through the cipher, encrypting as it goes @@ -1532,6 +1522,11 @@ func (hc *Conn) WritePacket(b []byte, ctrlStatOp byte) (n int, err error) { log.Printf(" ->ctext:\r\n%s\r\n", hex.Dump(wb.Bytes())) } + // Calculate hmac on cipher payload + hc.wm.Write(wb.Bytes()) + hmacOut = hc.wm.Sum(nil)[0:HMAC_CHK_SZ] //finalize + //log.Printf(" (%08x> HMAC(o):%s\r\n", payloadLen, hex.EncodeToString(hmacOut)) + err = binary.Write(*hc.c, binary.BigEndian, &ctrlStatOp) if err == nil { // Write hmac LSB, payloadLen followed by payload From c23edc6874fc8999fb4d31455a08ef2ab7191306 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sun, 10 Jan 2021 22:04:52 -0800 Subject: [PATCH 04/94] Fixed FrodoKEM neg bug (sending cipheropts,opts order) Also tweaked pad size random to use full range; removed some junk logging --- Makefile | 6 +++- go.mod | 3 +- go.sum | 30 ++++++---------- xsd/xsd.go | 8 ++--- xsnet/chan.go | 2 +- xsnet/consts.go | 2 +- xsnet/net.go | 91 +++++++++++++++++++++++++------------------------ 7 files changed, 71 insertions(+), 71 deletions(-) diff --git a/Makefile b/Makefile index ff37254..6e3447f 100644 --- a/Makefile +++ b/Makefile @@ -42,7 +42,7 @@ endif INSTPREFIX = /usr/local -all: common client server +all: common client server #seccheck clean: @echo "Make: $(MAKE)" @@ -78,6 +78,10 @@ else $(MAKE) BUILDOPTS=$(BUILDOPTS) -C xsd endif +#seccheck: +# grep -r "logPlainText.*true" . +# if [ $$? -eq 0 ]; then echo "WARNING plaintext debug is enabled"; exit 1; fi + vis: @which go-callvis >/dev/null 2>&1; \ stat=$$?; if [ $$stat -ne "0" ]; then \ diff --git a/go.mod b/go.mod index ad14ca0..4cfe086 100644 --- a/go.mod +++ b/go.mod @@ -10,9 +10,9 @@ require ( blitter.com/go/mtwist v1.0.1 // indirect blitter.com/go/newhope v0.0.0-20200130200750-192fc08a8aae github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da + github.com/creack/pty v1.1.11 github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f github.com/klauspost/reedsolomon v1.9.9 // indirect - github.com/kr/pty v1.1.8 github.com/kuking/go-frodokem v1.0.1 github.com/mattn/go-isatty v0.0.12 github.com/mmcloughlin/avo v0.0.0-20200523190732-4439b6b2c061 // indirect @@ -21,6 +21,7 @@ require ( github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b // indirect github.com/tjfoc/gmsm v1.3.1 // indirect github.com/xtaci/kcp-go v5.4.20+incompatible + github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37 // indirect golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 golang.org/x/sys v0.0.0-20200523222454-059865788121 gopkg.in/hlandau/easymetric.v1 v1.0.0 // indirect diff --git a/go.sum b/go.sum index c74f16f..b0bb452 100644 --- a/go.sum +++ b/go.sum @@ -2,10 +2,6 @@ blitter.com/go/chacha20 v0.0.0-20200130200441-214e4085f54c h1:LcnFFg6MCIJHf26P7e blitter.com/go/chacha20 v0.0.0-20200130200441-214e4085f54c/go.mod h1:EMJtRcf22WCtHGiXCw+NB/Sb/PYcXtUgUql6LDEwyXo= blitter.com/go/cryptmt v1.0.2 h1:ZcLhQk7onUssXyQwG3GdXDXctCVnNL+b7aFuvwOdKXc= blitter.com/go/cryptmt v1.0.2/go.mod h1:tdME2J3O4agaDAYIYNQzzuB28yVGnPSMmV3a/ucSU84= -blitter.com/go/goutmp v1.0.3 h1:4VPU9COXG36W5454pcV65FieVaaw64mdhvjuTVOuWTM= -blitter.com/go/goutmp v1.0.3/go.mod h1:gtlbjC8xGzMk/Cf0BpnVltSa3awOqJ+B5WAxVptTMxk= -blitter.com/go/goutmp v1.0.4 h1:19Y4xgvdEbGESS0vuyWlPyZgjYNYxHkDfmbObKU5J6A= -blitter.com/go/goutmp v1.0.4/go.mod h1:gtlbjC8xGzMk/Cf0BpnVltSa3awOqJ+B5WAxVptTMxk= blitter.com/go/goutmp v1.0.5 h1:isP6bxSs1O06Oy7wB8u4y5SgLr22txfjg/gjG4qn0Og= blitter.com/go/goutmp v1.0.5/go.mod h1:gtlbjC8xGzMk/Cf0BpnVltSa3awOqJ+B5WAxVptTMxk= blitter.com/go/herradurakex v1.0.0 h1:6XaxY+JLT1HUWPF0gYJnjX3pVjrw4YhYZEzZ1U0wkyc= @@ -18,21 +14,16 @@ blitter.com/go/newhope v0.0.0-20200130200750-192fc08a8aae h1:YBBaCcdYRrI1btsmcMT blitter.com/go/newhope v0.0.0-20200130200750-192fc08a8aae/go.mod h1:ywoxfDBqInPsqtnxYsmS4SYMJ5D/kNcrFgpvI+Xcun0= github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY= github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA= -github.com/creack/pty v1.1.7 h1:6pwm8kMQKCmgUg0ZHTm5+/YvRK0s3THD/28+T6/kk4A= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= +github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f h1:UWGE8Vi+1Agt0lrvnd7UsmvwqWKRzb9byK9iQmsbY0Y= github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f/go.mod h1:u+9Snq0w+ZdYKi8BBoaxnEwWu0fY4Kvu9ByFpM51t1s= -github.com/klauspost/cpuid v1.2.3 h1:CCtW0xUnWGVINKvE/WWOYKdsPV6mawAtvQuSl8guwQs= -github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.2.4 h1:EBfaK0SWSwk+fgk6efYFWdzl8MwRWoOO1gkmiaTXPW4= github.com/klauspost/cpuid v1.2.4/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/reedsolomon v1.9.4 h1:FB9jDBGqUNyhUg4Gszz384ulFqVSc61Pdap+HRPgnSo= -github.com/klauspost/reedsolomon v1.9.4/go.mod h1:CwCi+NUr9pqSVktrkN+Ondf06rkhYZ/pcNv7fu+8Un4= github.com/klauspost/reedsolomon v1.9.9 h1:qCL7LZlv17xMixl55nq2/Oa1Y86nfO8EqDfv2GHND54= github.com/klauspost/reedsolomon v1.9.9/go.mod h1:O7yFFHiQwDR6b2t63KPUpccPtNdp5ADgh1gg4fd12wo= -github.com/kr/pty v1.1.8 h1:AkaSdXYQOWeaO3neb8EM634ahkXXe3jYbVh/F9lq+GI= -github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kuking/go-frodokem v1.0.1 h1:13bks3u4CPpvUtOLttT+A37j9myV4kLnS7Z3qDiTm4o= github.com/kuking/go-frodokem v1.0.1/go.mod h1:TzD0W9QnVOcwigeSySEuNZfJaGxWRtFRb7hXe/w/waI= github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= @@ -41,21 +32,23 @@ github.com/mmcloughlin/avo v0.0.0-20200523190732-4439b6b2c061 h1:UCU8+cLbbvyxi0s github.com/mmcloughlin/avo v0.0.0-20200523190732-4439b6b2c061/go.mod h1:wqKykBG2QzQDJEzvRkcS8x6MiSJkF52hXZsXcjaB3ls= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 h1:89CEmDvlq/F7SJEOqkIdNDGJXrQIhuIx9D2DBXjavSU= github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161/go.mod h1:wM7WEvslTq+iOEAMDLSzhVuOt5BRZ05WirO+b09GHQU= github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b h1:fj5tQ8acgNUr6O8LEplsxDhUIe2573iLkJc+PqnzZTI= github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b/go.mod h1:5XA7W9S6mni3h5uvOC75dA3m9CCCaS83lltmc0ukdi4= -github.com/tjfoc/gmsm v1.3.0 h1:i7c6Za/IlgBvnGxYpfD7L3TGuaS+v6oGcgq+J9/ecEA= -github.com/tjfoc/gmsm v1.3.0/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w= github.com/tjfoc/gmsm v1.3.1 h1:+k3IAlF81c31/TllJmIfuCYnjl8ziMdTWGWJcP9J1uo= github.com/tjfoc/gmsm v1.3.1/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w= +github.com/ulikunitz/xz v0.5.7 h1:YvTNdFzX6+W5m9msiYg/zpkSURPPtOlzbqYjrFn7Yt4= github.com/ulikunitz/xz v0.5.7/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/xtaci/kcp-go v1.0.1 h1:SEZn2Iick6ualQpV8yY9cXdDTgbfBHPIwJl7UvxfxLQ= github.com/xtaci/kcp-go v5.4.20+incompatible h1:TN1uey3Raw0sTz0Fg8GkfM0uH3YwzhnZWQ1bABv5xAg= github.com/xtaci/kcp-go v5.4.20+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE= +github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37 h1:EWU6Pktpas0n8lLQwDsRyZfmkPeRbdgPtW609es+/9E= +github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37/go.mod h1:HpMP7DB2CyokmAh4lp0EQnnWhmycP/TvwBGzvuie+H0= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= golang.org/x/arch v0.0.0-20190909030613-46d78d1859ac/go.mod h1:flIaEI6LNU6xOCD5PaJvn9wGP0agmIOqjrtsKGRguv4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -63,10 +56,9 @@ golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200423211502-4bdfaf469ed5 h1:Q7tZBpemrlsc2I7IyODzhtallWRSm4Q0d09pL6XbQtU= -golang.org/x/crypto v0.0.0-20200423211502-4bdfaf469ed5/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 h1:cg5LA/zNPRzIXIWSCxQW10Rvpy94aQh3LT/ShoCpkHw= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -79,8 +71,6 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190902133755-9109b7679e13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f h1:gWF768j/LaZugp8dyS4UwsslYCYz9XgFxvlgsn0n9H8= -golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121 h1:rITEj+UZHYC927n8GT97eC3zrpzXdb/voyeOuVKS46o= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -91,6 +81,7 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/hlandau/easymetric.v1 v1.0.0 h1:ZbfbH7W3giuVDjWUoFhDOjjv20hiPr5HZ2yMV5f9IeE= gopkg.in/hlandau/easymetric.v1 v1.0.0/go.mod h1:yh75hypuFzAxmvECh3ZKGCvFnIfapYJh2wv7ASaX2RE= @@ -98,5 +89,6 @@ gopkg.in/hlandau/measurable.v1 v1.0.1 h1:wH5UZKCRUnRr1iD+xIZfwhtxhmr+bprRJttqA1R gopkg.in/hlandau/measurable.v1 v1.0.1/go.mod h1:6N+SYJGMTmetsx7wskULP+juuO+++tsHJkAgzvzsbuM= gopkg.in/hlandau/passlib.v1 v1.0.10 h1:q5xh9ZHp907XTjVw8/EqG03//fnlITnIYQmv4Gn7TpE= gopkg.in/hlandau/passlib.v1 v1.0.10/go.mod h1:wxGAv2CtQHlzWY8NJp+p045yl4WHyX7v2T6XbOcmqjM= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/xsd/xsd.go b/xsd/xsd.go index d32fb7c..34bb39a 100755 --- a/xsd/xsd.go +++ b/xsd/xsd.go @@ -33,7 +33,7 @@ import ( xs "blitter.com/go/xs" "blitter.com/go/xs/logger" "blitter.com/go/xs/xsnet" - "github.com/kr/pty" + "github.com/creack/pty" ) var ( @@ -82,7 +82,7 @@ func runClientToServerCopyAs(who, ttype string, conn *xsnet.Conn, fpath string, os.Clearenv() os.Setenv("HOME", u.HomeDir) // nolint: gosec,errcheck os.Setenv("TERM", ttype) // nolint: gosec,errcheck - os.Setenv("HKEXSH", "1") // nolint: gosec,errcheck + os.Setenv("XS_SESSION", "1") // nolint: gosec,errcheck var c *exec.Cmd cmdName := xs.GetTool("tar") @@ -187,7 +187,7 @@ func runServerToClientCopyAs(who, ttype string, conn *xsnet.Conn, srcPath string os.Clearenv() _ = os.Setenv("HOME", u.HomeDir) // nolint: gosec _ = os.Setenv("TERM", ttype) // nolint: gosec - _ = os.Setenv("HKEXSH", "1") // nolint: gosec + _ = os.Setenv("XS_SESSION", "1") // nolint: gosec var c *exec.Cmd cmdName := xs.GetTool("tar") @@ -278,7 +278,7 @@ func runShellAs(who, hname, ttype, cmd string, interactive bool, conn *xsnet.Con os.Clearenv() _ = os.Setenv("HOME", u.HomeDir) // nolint: gosec _ = os.Setenv("TERM", ttype) // nolint: gosec - _ = os.Setenv("HKEXSH", "1") // nolint: gosec + _ = os.Setenv("XS_SESSION", "1") // nolint: gosec var c *exec.Cmd if interactive { diff --git a/xsnet/chan.go b/xsnet/chan.go index e499f48..d6b2924 100644 --- a/xsnet/chan.go +++ b/xsnet/chan.go @@ -110,7 +110,7 @@ func (hc *Conn) getStream(keymat []byte) (rc cipher.Stream, mc hash.Hash, err er key = keymat[0:chacha.KeySize] ivlen = chacha.INonceSize iv = keymat[chacha.KeySize : chacha.KeySize+ivlen] - rc, err = chacha.NewCipher(iv, key, 20) + rc, err = chacha.NewCipher(iv, key, chacha.INonceSize) if err != nil { log.Printf("[ChaCha20 config error]\n") fmt.Printf("[ChaCha20 config error]\n") diff --git a/xsnet/consts.go b/xsnet/consts.go index c632198..ff372ed 100644 --- a/xsnet/consts.go +++ b/xsnet/consts.go @@ -98,7 +98,7 @@ const ( type CSOType uint32 //TODO: this should be small (max unfragmented packet size?) -const MAX_PAYLOAD_LEN = 4*1024*1024*1024 - 1 +const MAX_PAYLOAD_LEN = 2*1024*1024*1024 - 1 // Session symmetric crypto algs const ( diff --git a/xsnet/net.go b/xsnet/net.go index 3260cab..052c895 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -49,7 +49,7 @@ import ( /*---------------------------------------------------------------------*/ const PAD_SZ = 32 // max size of padding applied to each packet -const HMAC_CHK_SZ = 4 // leading bytes of HMAC to xmit for verification +const HMAC_CHK_SZ = 8 // leading bytes of HMAC to xmit for verification type ( WinSize struct { @@ -426,21 +426,25 @@ func FrodoKEMDialSetup(c io.ReadWriter, hc *Conn) (err error) { kem = frodo.Frodo976SHAKE() } pubA, secA := kem.Keygen() // pA - //log.Printf("[pubKeyAlice: %v]\n", pubA) // Alice, step 2: Send the public key (na,ea) to Bob - fmt.Fprintf(c, "0x%x\n", pubA) + n, err := fmt.Fprintf(c, "0x%x\n", pubA) + if err != nil { + panic(err) + } + if n < len(pubA) { + panic(errors.New("incomplete Fprintf() of pubA")) + } - // (... and cipher, connection opts) + // (... and send cipher, connection opts) fmt.Fprintf(c, "0x%x:0x%x\n", hc.cipheropts, hc.opts) // [Bob does the same and sends use a public key (nb, eb) pubB_bigint := big.NewInt(0) _, err = fmt.Fscanf(c, "0x%x\n", pubB_bigint) pubB := pubB_bigint.Bytes() - //log.Printf("[Got pubKeyBob[]:%v]\n", pubB) - // (... and cipher, connection opts) + // (... and sends us cipher, connection opts) _, err = fmt.Fscanf(c, "0x%x:0x%x\n", &hc.cipheropts, &hc.opts) if err != nil { @@ -460,12 +464,10 @@ func FrodoKEMDialSetup(c io.ReadWriter, hc *Conn) (err error) { ctBtoA_bigint := big.NewInt(0) _, err = fmt.Fscanf(c, "0x%x\n", ctBtoA_bigint) ctBtoA := ctBtoA_bigint.Bytes() - log.Printf("[Got ctBob[]:%v]\n", ctBtoA) // Alice, step 6: compute Bob's share shareB, err := kem.Dencapsulate(secA, ctBtoA) sessionKey := append(shareA, shareB...) - //log.Printf("[Derived sharedSecret:0x%x]\n", sessionKey) hc.r, hc.rm, err = hc.getStream(sessionKey) hc.w, hc.wm, err = hc.getStream(sessionKey) @@ -521,7 +523,7 @@ func NewHopeDialSetup(c io.ReadWriter, hc *Conn) (err error) { if err != nil { panic(err) } - //log.Printf("[Derived sharedSecret:0x%x]\n", aliceSharedSecret) + hc.r, hc.rm, err = hc.getStream(aliceSharedSecret) hc.w, hc.wm, err = hc.getStream(aliceSharedSecret) return @@ -565,7 +567,7 @@ func NewHopeSimpleDialSetup(c io.ReadWriter, hc *Conn) (err error) { if err != nil { panic(err) } - //log.Printf("[Derived sharedSecret:0x%x]\n", aliceSharedSecret) + hc.r, hc.rm, err = hc.getStream(aliceSharedSecret) hc.w, hc.wm, err = hc.getStream(aliceSharedSecret) return @@ -616,7 +618,6 @@ func KyberDialSetup(c io.ReadWriter /*net.Conn*/, hc *Conn) (err error) { // Alice, step 3: Decrypt the KEM cipher text. aliceSharedSecret := alicePrivateKey.KEMDecrypt(pubKeyB) - //log.Printf("[Derived sharedSecret:0x%x]\n", aliceSharedSecret) hc.r, hc.rm, err = hc.getStream(aliceSharedSecret) hc.w, hc.wm, err = hc.getStream(aliceSharedSecret) return @@ -680,27 +681,32 @@ func FrodoKEMAcceptSetup(c *net.Conn, hc *Conn) (err error) { kem = frodo.Frodo976SHAKE() } pubB, secB := kem.Keygen() - //log.Printf("[pubKeyBob: %v]\n", pubB) - // Bob, step 2: Send the public key (nb,eb) to Alice - fmt.Fprintf(*c, "0x%x\n", pubB) - - // (... and cipher, connection opts) - fmt.Fprintf(*c, "0x%x:0x%x\n", hc.cipheropts, hc.opts) - - // [Alice does the same and sends use a public key (na, ea) + + // [Alice sends use a public key (na, ea) pubA_bigint := big.NewInt(0) _, err = fmt.Fscanf(*c, "0x%x\n", pubA_bigint) pubA := pubA_bigint.Bytes() - //log.Printf("[Got pubKeyAlice[]:%v]\n", pubA) - // (... and cipher, connection opts) + // (... and sends us cipher, connection opts) _, err = fmt.Fscanf(*c, "0x%x:0x%x\n", &hc.cipheropts, &hc.opts) if err != nil { return err } + // Bob, step 2: Send the public key (nb,eb) to Alice + n, err := fmt.Fprintf(*c, "0x%x\n", pubB) + if err != nil { + panic(err) + } + if n < len(pubB) { + panic(errors.New("incomplete Fprintf() of pubB")) + } + + // (... and send cipher, connection opts) + fmt.Fprintf(*c, "0x%x:0x%x\n", hc.cipheropts, hc.opts) + // Bob, step 3: Create ctBtoA, shareB ctBtoA, shareB, err := kem.Encapsulate(pubA) if err != nil { @@ -714,12 +720,10 @@ func FrodoKEMAcceptSetup(c *net.Conn, hc *Conn) (err error) { ctAtoB_bigint := big.NewInt(0) _, err = fmt.Fscanf(*c, "0x%x\n", ctAtoB_bigint) ctAtoB := ctAtoB_bigint.Bytes() - log.Printf("[Got ctAlice[]:%v]\n", ctAtoB) // Alice, step 6: compute Bob's share shareA, err := kem.Dencapsulate(secB, ctAtoB) sessionKey := append(shareA, shareB...) - //log.Printf("[Derived sharedSecret:0x%x]\n", sessionKey) hc.r, hc.rm, err = hc.getStream(sessionKey) hc.w, hc.wm, err = hc.getStream(sessionKey) @@ -759,7 +763,6 @@ func NewHopeAcceptSetup(c *net.Conn, hc *Conn) (err error) { fmt.Fprintf(*c, "0x%x\n0x%x:0x%x\n", pubKeyBob.Send, hc.cipheropts, hc.opts) - //log.Printf("[Derived sharedSecret:0x%x]\n", bobSharedSecret) hc.r, hc.rm, err = hc.getStream(bobSharedSecret) hc.w, hc.wm, err = hc.getStream(bobSharedSecret) return @@ -798,7 +801,6 @@ func NewHopeSimpleAcceptSetup(c *net.Conn, hc *Conn) (err error) { fmt.Fprintf(*c, "0x%x\n0x%x:0x%x\n", pubKeyBob.Send, hc.cipheropts, hc.opts) - //log.Printf("[Derived sharedSecret:0x%x]\n", bobSharedSecret) hc.r, hc.rm, err = hc.getStream(bobSharedSecret) hc.w, hc.wm, err = hc.getStream(bobSharedSecret) return @@ -847,7 +849,6 @@ func KyberAcceptSetup(c *net.Conn, hc *Conn) (err error) { fmt.Fprintf(*c, "0x%x\n0x%x:0x%x\n", cipherText, hc.cipheropts, hc.opts) - //log.Printf("[Derived sharedSecret:0x%x]\n", bobSharedSecret) hc.r, hc.rm, err = hc.getStream(bobSharedSecret) hc.w, hc.wm, err = hc.getStream(bobSharedSecret) return @@ -1287,6 +1288,7 @@ func (hc Conn) Read(b []byte) (n int, err error) { if hc.logCipherText { log.Printf(" <:ctext:\r\n%s\r\n", hex.Dump(payloadBytes[:n])) } + //fmt.Printf(" <:ctext:\r\n%s\r\n", hex.Dump(payloadBytes[:n])) hc.rm.Write(payloadBytes) // Calc hmac on received data hTmp := hc.rm.Sum(nil)[0:HMAC_CHK_SZ] @@ -1306,8 +1308,9 @@ func (hc Conn) Read(b []byte) (n int, err error) { // The caller isn't necessarily reading the full payload so we need // to decrypt to an intermediate buffer, draining it on demand of caller decryptN, err := rs.Read(payloadBytes) + if hc.logPlainText { - log.Printf(" <-ptext:\r\n%s\r\n", hex.Dump(payloadBytes[:n])) + log.Printf(" <:ptext:\r\n%s\r\n", hex.Dump(payloadBytes[:n])) } if err != nil { log.Println("xsnet.Read():", err) @@ -1324,9 +1327,6 @@ func (hc Conn) Read(b []byte) (n int, err error) { payloadBytes = payloadBytes[0 : len(payloadBytes)-int(padLen)] } - //fmt.Printf("padSide:%d padLen:%d payloadBytes:%s\n", - // padSide, padLen, hex.Dump(payloadBytes)) - // Throw away pkt if it's chaff (ie., caller to Read() won't see this data) if ctrlStatOp == CSOChaff { log.Printf("[Chaff pkt, discarded (len %d)]\n", decryptN) @@ -1435,6 +1435,7 @@ func (hc Conn) Read(b []byte) (n int, err error) { } log.Printf("Read() got %d bytes\n", retN) + copy(b, hc.dBuf.Next(retN)) return retN, nil } @@ -1443,9 +1444,7 @@ func (hc Conn) Read(b []byte) (n int, err error) { // // See go doc io.Writer func (hc Conn) Write(b []byte) (n int, err error) { - //fmt.Printf("WRITE(%d)\n", len(b)) n, err = hc.WritePacket(b, CSONone) - //fmt.Printf("WROTE(%d)\n", n) return n, err } @@ -1460,27 +1459,23 @@ func (hc *Conn) WritePacket(b []byte, ctrlStatOp byte) (n int, err error) { } //Padding prior to encryption - padSz := (rand.Intn(PAD_SZ) / 2) + (PAD_SZ / 2) + padSz := rand.Intn(PAD_SZ-1) + 1 /*(rand.Intn(PAD_SZ) / 2) + (PAD_SZ / 2)*/ padLen := padSz - ((len(b) + padSz) % padSz) if padLen == padSz { // No padding required padLen = 0 } + padBytes := make([]byte, padLen) rand.Read(padBytes) // For a little more confusion let's support padding either before // or after the payload. padSide := rand.Intn(2) - //fmt.Printf("--\n") - //fmt.Printf("PRE_PADDING:%s\r\n", hex.Dump(b)) - //fmt.Printf("padSide:%d padLen:%d\r\n", padSide, padLen) if padSide == 0 { b = append([]byte{byte(padSide)}, append([]byte{byte(padLen)}, append(padBytes, b...)...)...) } else { b = append([]byte{byte(padSide)}, append([]byte{byte(padLen)}, append(b, padBytes...)...)...) } - //fmt.Printf("POST_PADDING:%s\r\n", hex.Dump(b)) - //fmt.Printf("--\r\n") // N.B. Originally this Lock() surrounded only the // calls to binary.Write(hc.c ..) however there appears @@ -1492,9 +1487,8 @@ func (hc *Conn) WritePacket(b []byte, ctrlStatOp byte) (n int, err error) { // could be tightened. hc.Lock() payloadLen = uint32(len(b)) - //!fmt.Printf(" --== payloadLen:%d\n", payloadLen) if hc.logPlainText { - log.Printf(" :>ptext:\r\n%s\r\n", hex.Dump(b[0:payloadLen])) + log.Printf(" >:ptext:\r\n%s\r\n", hex.Dump(b[0:payloadLen])) } // NOTE releases prior to v0.9 used Authenticate-then-Encrypt, @@ -1514,14 +1508,19 @@ func (hc *Conn) WritePacket(b []byte, ctrlStatOp byte) (n int, err error) { // The StreamWriter acts like a pipe, forwarding whatever is // written to it through the cipher, encrypting as it goes ws := &cipher.StreamWriter{S: hc.w, W: &wb} - _, err = ws.Write(b[0:payloadLen]) + wN, err := ws.Write(b[0:payloadLen]) if err != nil { panic(err) } - if hc.logCipherText { - log.Printf(" ->ctext:\r\n%s\r\n", hex.Dump(wb.Bytes())) + if wN < int(payloadLen) { + panic("truncated Write to cipher *****") } + if hc.logCipherText { + log.Printf(" >:ctext:\r\n%s\r\n", hex.Dump(wb.Bytes())) + } + //fmt.Printf(" >:ctext:\r\n%s\r\n", hex.Dump(wb.Bytes())) + // Calculate hmac on cipher payload hc.wm.Write(wb.Bytes()) hmacOut = hc.wm.Sum(nil)[0:HMAC_CHK_SZ] //finalize @@ -1552,7 +1551,11 @@ func (hc *Conn) WritePacket(b []byte, ctrlStatOp byte) (n int, err error) { // We must 'lie' to caller indicating the length of THEIR // data written (ie., not including the padding and padding headers) - return n - 2 - int(padLen), err + retN := n - 2 - int(padLen) + if retN <= 0 { + retN = 0 + } + return retN, err } func (hc *Conn) EnableChaff() { From 4e8e064c747e3f2bd05eaac3ab1bd5617570decb Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sun, 10 Jan 2021 22:07:00 -0800 Subject: [PATCH 05/94] Bump version to v0.9.0 --- Makefile | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 6e3447f..2f318d4 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION := 0.9.0pre +VERSION := 0.9.0 .PHONY: lint vis clean common client server passwd subpkgs install uninstall reinstall ## Tag version of binaries with build info wrt. @@ -42,7 +42,7 @@ endif INSTPREFIX = /usr/local -all: common client server #seccheck +all: common client server clean: @echo "Make: $(MAKE)" @@ -78,10 +78,6 @@ else $(MAKE) BUILDOPTS=$(BUILDOPTS) -C xsd endif -#seccheck: -# grep -r "logPlainText.*true" . -# if [ $$? -eq 0 ]; then echo "WARNING plaintext debug is enabled"; exit 1; fi - vis: @which go-callvis >/dev/null 2>&1; \ stat=$$?; if [ $$stat -ne "0" ]; then \ From f2929120b6b798dc0f0f2f332980d53d2be36c46 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Tue, 12 Jan 2021 23:45:58 -0800 Subject: [PATCH 06/94] use crypto/rand in key spots (for KEM seeds) rather than math/rand Signed-off-by: Russ Magee --- Makefile | 2 +- xsnet/net.go | 42 ++++++++++-------------------------------- 2 files changed, 11 insertions(+), 33 deletions(-) diff --git a/Makefile b/Makefile index 2f318d4..5018eba 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION := 0.9.0 +VERSION := 0.9.1 .PHONY: lint vis clean common client server passwd subpkgs install uninstall reinstall ## Tag version of binaries with build info wrt. diff --git a/xsnet/net.go b/xsnet/net.go index 052c895..387c35d 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -39,6 +39,7 @@ import ( "strings" "sync" "time" + crand "crypto/rand" hkex "blitter.com/go/herradurakex" "blitter.com/go/kyber" @@ -474,24 +475,11 @@ func FrodoKEMDialSetup(c io.ReadWriter, hc *Conn) (err error) { return } -// randReader wraps rand.Read() in a struct that implements io.Reader -// for use by the Kyber and NEWHOPE/NEWHOPE_SIMPLE KEM methods. -type randReader struct { -} - -func (r randReader) Read(b []byte) (n int, e error) { - n, e = rand.Read(b) - return -} - func NewHopeDialSetup(c io.ReadWriter, hc *Conn) (err error) { // Send xsnet.Conn parameters to remote side // Alice, step 1: Generate a key pair. - r := new(randReader) - rand.Seed(time.Now().UnixNano()) - - privKeyAlice, pubKeyAlice, err := newhope.GenerateKeyPairAlice(r) + privKeyAlice, pubKeyAlice, err := newhope.GenerateKeyPairAlice(crand.Reader) if err != nil { panic(err) } @@ -533,9 +521,7 @@ func NewHopeSimpleDialSetup(c io.ReadWriter, hc *Conn) (err error) { // Send xsnet.Conn parameters to remote side // Alice, step 1: Generate a key pair. - r := new(randReader) - rand.Seed(time.Now().UnixNano()) - privKeyAlice, pubKeyAlice, err := newhope.GenerateKeyPairSimpleAlice(r) + privKeyAlice, pubKeyAlice, err := newhope.GenerateKeyPairSimpleAlice(crand.Reader) if err != nil { panic(err) } @@ -577,19 +563,17 @@ func KyberDialSetup(c io.ReadWriter /*net.Conn*/, hc *Conn) (err error) { // Send xsnet.Conn parameters to remote side // Alice, step 1: Generate a key pair. - r := new(randReader) - rand.Seed(time.Now().UnixNano()) var alicePublicKey *kyber.PublicKey var alicePrivateKey *kyber.PrivateKey switch hc.kex { case KEX_KYBER512: - alicePublicKey, alicePrivateKey, err = kyber.Kyber512.GenerateKeyPair(r) + alicePublicKey, alicePrivateKey, err = kyber.Kyber512.GenerateKeyPair(crand.Reader) case KEX_KYBER768: - alicePublicKey, alicePrivateKey, err = kyber.Kyber768.GenerateKeyPair(r) + alicePublicKey, alicePrivateKey, err = kyber.Kyber768.GenerateKeyPair(crand.Reader) case KEX_KYBER1024: - alicePublicKey, alicePrivateKey, err = kyber.Kyber1024.GenerateKeyPair(r) + alicePublicKey, alicePrivateKey, err = kyber.Kyber1024.GenerateKeyPair(crand.Reader) default: - alicePublicKey, alicePrivateKey, err = kyber.Kyber768.GenerateKeyPair(r) + alicePublicKey, alicePrivateKey, err = kyber.Kyber768.GenerateKeyPair(crand.Reader) } if err != nil { @@ -731,8 +715,6 @@ func FrodoKEMAcceptSetup(c *net.Conn, hc *Conn) (err error) { } func NewHopeAcceptSetup(c *net.Conn, hc *Conn) (err error) { - r := new(randReader) - rand.Seed(time.Now().UnixNano()) // Bob, step 1: Deserialize Alice's public key from the binary encoding. alicePublicKey := big.NewInt(0) _, err = fmt.Fscanln(*c, alicePublicKey) @@ -754,7 +736,7 @@ func NewHopeAcceptSetup(c *net.Conn, hc *Conn) (err error) { } // Bob, step 2: Generate the KEM cipher text and shared secret. - pubKeyBob, bobSharedSecret, err := newhope.KeyExchangeBob(r, &pubKeyAlice) + pubKeyBob, bobSharedSecret, err := newhope.KeyExchangeBob(crand.Reader, &pubKeyAlice) if err != nil { panic(err) } @@ -769,8 +751,6 @@ func NewHopeAcceptSetup(c *net.Conn, hc *Conn) (err error) { } func NewHopeSimpleAcceptSetup(c *net.Conn, hc *Conn) (err error) { - r := new(randReader) - rand.Seed(time.Now().UnixNano()) // Bob, step 1: Deserialize Alice's public key from the binary encoding. alicePublicKey := big.NewInt(0) _, err = fmt.Fscanln(*c, alicePublicKey) @@ -792,7 +772,7 @@ func NewHopeSimpleAcceptSetup(c *net.Conn, hc *Conn) (err error) { } // Bob, step 2: Generate the KEM cipher text and shared secret. - pubKeyBob, bobSharedSecret, err := newhope.KeyExchangeSimpleBob(r, &pubKeyAlice) + pubKeyBob, bobSharedSecret, err := newhope.KeyExchangeSimpleBob(crand.Reader, &pubKeyAlice) if err != nil { panic(err) } @@ -838,9 +818,7 @@ func KyberAcceptSetup(c *net.Conn, hc *Conn) (err error) { } // Bob, step 2: Generate the KEM cipher text and shared secret. - r := new(randReader) - rand.Seed(time.Now().UnixNano()) - cipherText, bobSharedSecret, err := peerPublicKey.KEMEncrypt(r) + cipherText, bobSharedSecret, err := peerPublicKey.KEMEncrypt(crand.Reader) if err != nil { panic(err) } From 287f9d1035032444e7ba030a5db3b5e42c1b1c92 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Tue, 12 Jan 2021 23:45:58 -0800 Subject: [PATCH 07/94] use crypto/rand in key spots (for KEM seeds) rather than math/rand --- LICENSE.mit => LICENSE | 0 Makefile | 2 +- xsnet/net.go | 42 ++++++++++-------------------------------- 3 files changed, 11 insertions(+), 33 deletions(-) rename LICENSE.mit => LICENSE (100%) diff --git a/LICENSE.mit b/LICENSE similarity index 100% rename from LICENSE.mit rename to LICENSE diff --git a/Makefile b/Makefile index 2f318d4..5018eba 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION := 0.9.0 +VERSION := 0.9.1 .PHONY: lint vis clean common client server passwd subpkgs install uninstall reinstall ## Tag version of binaries with build info wrt. diff --git a/xsnet/net.go b/xsnet/net.go index 052c895..387c35d 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -39,6 +39,7 @@ import ( "strings" "sync" "time" + crand "crypto/rand" hkex "blitter.com/go/herradurakex" "blitter.com/go/kyber" @@ -474,24 +475,11 @@ func FrodoKEMDialSetup(c io.ReadWriter, hc *Conn) (err error) { return } -// randReader wraps rand.Read() in a struct that implements io.Reader -// for use by the Kyber and NEWHOPE/NEWHOPE_SIMPLE KEM methods. -type randReader struct { -} - -func (r randReader) Read(b []byte) (n int, e error) { - n, e = rand.Read(b) - return -} - func NewHopeDialSetup(c io.ReadWriter, hc *Conn) (err error) { // Send xsnet.Conn parameters to remote side // Alice, step 1: Generate a key pair. - r := new(randReader) - rand.Seed(time.Now().UnixNano()) - - privKeyAlice, pubKeyAlice, err := newhope.GenerateKeyPairAlice(r) + privKeyAlice, pubKeyAlice, err := newhope.GenerateKeyPairAlice(crand.Reader) if err != nil { panic(err) } @@ -533,9 +521,7 @@ func NewHopeSimpleDialSetup(c io.ReadWriter, hc *Conn) (err error) { // Send xsnet.Conn parameters to remote side // Alice, step 1: Generate a key pair. - r := new(randReader) - rand.Seed(time.Now().UnixNano()) - privKeyAlice, pubKeyAlice, err := newhope.GenerateKeyPairSimpleAlice(r) + privKeyAlice, pubKeyAlice, err := newhope.GenerateKeyPairSimpleAlice(crand.Reader) if err != nil { panic(err) } @@ -577,19 +563,17 @@ func KyberDialSetup(c io.ReadWriter /*net.Conn*/, hc *Conn) (err error) { // Send xsnet.Conn parameters to remote side // Alice, step 1: Generate a key pair. - r := new(randReader) - rand.Seed(time.Now().UnixNano()) var alicePublicKey *kyber.PublicKey var alicePrivateKey *kyber.PrivateKey switch hc.kex { case KEX_KYBER512: - alicePublicKey, alicePrivateKey, err = kyber.Kyber512.GenerateKeyPair(r) + alicePublicKey, alicePrivateKey, err = kyber.Kyber512.GenerateKeyPair(crand.Reader) case KEX_KYBER768: - alicePublicKey, alicePrivateKey, err = kyber.Kyber768.GenerateKeyPair(r) + alicePublicKey, alicePrivateKey, err = kyber.Kyber768.GenerateKeyPair(crand.Reader) case KEX_KYBER1024: - alicePublicKey, alicePrivateKey, err = kyber.Kyber1024.GenerateKeyPair(r) + alicePublicKey, alicePrivateKey, err = kyber.Kyber1024.GenerateKeyPair(crand.Reader) default: - alicePublicKey, alicePrivateKey, err = kyber.Kyber768.GenerateKeyPair(r) + alicePublicKey, alicePrivateKey, err = kyber.Kyber768.GenerateKeyPair(crand.Reader) } if err != nil { @@ -731,8 +715,6 @@ func FrodoKEMAcceptSetup(c *net.Conn, hc *Conn) (err error) { } func NewHopeAcceptSetup(c *net.Conn, hc *Conn) (err error) { - r := new(randReader) - rand.Seed(time.Now().UnixNano()) // Bob, step 1: Deserialize Alice's public key from the binary encoding. alicePublicKey := big.NewInt(0) _, err = fmt.Fscanln(*c, alicePublicKey) @@ -754,7 +736,7 @@ func NewHopeAcceptSetup(c *net.Conn, hc *Conn) (err error) { } // Bob, step 2: Generate the KEM cipher text and shared secret. - pubKeyBob, bobSharedSecret, err := newhope.KeyExchangeBob(r, &pubKeyAlice) + pubKeyBob, bobSharedSecret, err := newhope.KeyExchangeBob(crand.Reader, &pubKeyAlice) if err != nil { panic(err) } @@ -769,8 +751,6 @@ func NewHopeAcceptSetup(c *net.Conn, hc *Conn) (err error) { } func NewHopeSimpleAcceptSetup(c *net.Conn, hc *Conn) (err error) { - r := new(randReader) - rand.Seed(time.Now().UnixNano()) // Bob, step 1: Deserialize Alice's public key from the binary encoding. alicePublicKey := big.NewInt(0) _, err = fmt.Fscanln(*c, alicePublicKey) @@ -792,7 +772,7 @@ func NewHopeSimpleAcceptSetup(c *net.Conn, hc *Conn) (err error) { } // Bob, step 2: Generate the KEM cipher text and shared secret. - pubKeyBob, bobSharedSecret, err := newhope.KeyExchangeSimpleBob(r, &pubKeyAlice) + pubKeyBob, bobSharedSecret, err := newhope.KeyExchangeSimpleBob(crand.Reader, &pubKeyAlice) if err != nil { panic(err) } @@ -838,9 +818,7 @@ func KyberAcceptSetup(c *net.Conn, hc *Conn) (err error) { } // Bob, step 2: Generate the KEM cipher text and shared secret. - r := new(randReader) - rand.Seed(time.Now().UnixNano()) - cipherText, bobSharedSecret, err := peerPublicKey.KEMEncrypt(r) + cipherText, bobSharedSecret, err := peerPublicKey.KEMEncrypt(crand.Reader) if err != nil { panic(err) } From 242d39192c0b6f2ba62beb957fe4ba9a2b075507 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Wed, 13 Jan 2021 00:59:27 -0800 Subject: [PATCH 08/94] Bump version to v0.9.2 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 5018eba..d94d448 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION := 0.9.1 +VERSION := 0.9.2 .PHONY: lint vis clean common client server passwd subpkgs install uninstall reinstall ## Tag version of binaries with build info wrt. From bcc07a8fac1cb50c4abdc9465987f7a05bd0d577 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Fri, 15 Jan 2021 00:31:36 -0800 Subject: [PATCH 09/94] Removed static cptest/ dir, now managed by CI tests --- xc_testfiles.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100755 xc_testfiles.sh diff --git a/xc_testfiles.sh b/xc_testfiles.sh new file mode 100755 index 0000000..e549b13 --- /dev/null +++ b/xc_testfiles.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +## setup.sh - create some files for xc copy testing +dir=cptest + +mkdir -p ${dir}/subdir +dd bs=1024 count=16 if=/dev/urandom of=${dir}/file16KB +dd bs=1024 count=16 if=/dev/urandom of=${dir}/file1KB +dd bs=1024 count=16 if=/dev/urandom of=${dir}/file32KB +dd bs=1024 count=16 if=/dev/urandom of=${dir}/file6B +dd bs=1048576 count=32 if=/dev/urandom of=${dir}/subdir/file32MB +dd bs=1048576 count=64 if=/dev/urandom of=${dir}/subdir/file64MB + From c511af6c13eebc60e31f3847d63813699b062a22 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Fri, 15 Jan 2021 00:31:36 -0800 Subject: [PATCH 10/94] Removed static cptest/ dir, now managed by CI tests --- bacillus/ci_pushbuild.sh | 7 ++++--- xc_testfiles.sh | 13 +++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) create mode 100755 xc_testfiles.sh diff --git a/bacillus/ci_pushbuild.sh b/bacillus/ci_pushbuild.sh index a1e7164..e5f29a9 100755 --- a/bacillus/ci_pushbuild.sh +++ b/bacillus/ci_pushbuild.sh @@ -54,9 +54,10 @@ else fi ############ -stage "Test(S->C)" +stage "Test(xc S->C)" ############ echo "Testing secure copy from server -> client ..." +./xc_testfiles.sh tmpdir=$$ mkdir -p /tmp/$tmpdir cd /tmp/$tmpdir @@ -76,7 +77,7 @@ else fi ############ -stage "Test(C->S)" +stage "Test(xc C->S)" ############ echo "TODO ..." @@ -99,7 +100,7 @@ tar -cz --exclude=.git --exclude=cptest -f ${BACILLUS_ARTFDIR}/xs.tgz . ############ stage "Cleanup" ############ -# nop +rm -rf cptest echo echo "--Done--" diff --git a/xc_testfiles.sh b/xc_testfiles.sh new file mode 100755 index 0000000..e549b13 --- /dev/null +++ b/xc_testfiles.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +## setup.sh - create some files for xc copy testing +dir=cptest + +mkdir -p ${dir}/subdir +dd bs=1024 count=16 if=/dev/urandom of=${dir}/file16KB +dd bs=1024 count=16 if=/dev/urandom of=${dir}/file1KB +dd bs=1024 count=16 if=/dev/urandom of=${dir}/file32KB +dd bs=1024 count=16 if=/dev/urandom of=${dir}/file6B +dd bs=1048576 count=32 if=/dev/urandom of=${dir}/subdir/file32MB +dd bs=1048576 count=64 if=/dev/urandom of=${dir}/subdir/file64MB + From 435e2b6380a4aa8c906e65bc6c4a08084750e780 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Fri, 15 Jan 2021 01:23:01 -0800 Subject: [PATCH 11/94] Updated cptest.sha1sum --- bacillus/ci_pushbuild.sh | 2 ++ cptest.sha1sum | 12 ++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/bacillus/ci_pushbuild.sh b/bacillus/ci_pushbuild.sh index e5f29a9..6a29fab 100755 --- a/bacillus/ci_pushbuild.sh +++ b/bacillus/ci_pushbuild.sh @@ -58,6 +58,8 @@ stage "Test(xc S->C)" ############ echo "Testing secure copy from server -> client ..." ./xc_testfiles.sh +sha1sum $(find cptest -type f | sort) >sc.sha1sum + tmpdir=$$ mkdir -p /tmp/$tmpdir cd /tmp/$tmpdir diff --git a/cptest.sha1sum b/cptest.sha1sum index 0440760..1183e23 100644 --- a/cptest.sha1sum +++ b/cptest.sha1sum @@ -1,6 +1,6 @@ -306637b5c621892078ebadd9454a78820a000598 cptest/file16KB -1a118dfff291352eb4aec02c34f4f957669460fc cptest/file1KB -f474d5da45890b7cb5b0ae84c8ade5abcb3b4474 cptest/file32KB -03939175ceac92b9c6464d037a0243e22563c423 cptest/file6B -da67c7698b25d94c0cc20284ba9d4008cdee201b cptest/subdir/file32MB -9da9888265371375b48c224b94a0b3132b7ddc41 cptest/subdir/file64MB +6010a446cdcf8c1203c2d08998cc69a8c88f77d5 cptest/file16KB +f086ea96f3718efd78e6791178f967585acb3701 cptest/file1KB +6061e16c3d3840712d0b8e5268c49b5c2f8137ac cptest/file32KB +490af32035bbe737480f06439a02d91a171ac407 cptest/file6B +e4a8a4ad9678b7265a28c5f0cb5b078e1049ea23 cptest/subdir/file32MB +82b50550c7d0e0d6ac18d9d0796b6814c3e038bf cptest/subdir/file64MB From c1ab12dc1bcde2f5f2782503801b88394f334773 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Fri, 15 Jan 2021 01:23:01 -0800 Subject: [PATCH 12/94] Updated cptest.sha1sum --- bacillus/ci_pushbuild.sh | 1 + cptest.sha1sum | 12 ++++++------ xc_testfiles.sh | 1 + 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/bacillus/ci_pushbuild.sh b/bacillus/ci_pushbuild.sh index e5f29a9..4eba743 100755 --- a/bacillus/ci_pushbuild.sh +++ b/bacillus/ci_pushbuild.sh @@ -58,6 +58,7 @@ stage "Test(xc S->C)" ############ echo "Testing secure copy from server -> client ..." ./xc_testfiles.sh + tmpdir=$$ mkdir -p /tmp/$tmpdir cd /tmp/$tmpdir diff --git a/cptest.sha1sum b/cptest.sha1sum index 0440760..1183e23 100644 --- a/cptest.sha1sum +++ b/cptest.sha1sum @@ -1,6 +1,6 @@ -306637b5c621892078ebadd9454a78820a000598 cptest/file16KB -1a118dfff291352eb4aec02c34f4f957669460fc cptest/file1KB -f474d5da45890b7cb5b0ae84c8ade5abcb3b4474 cptest/file32KB -03939175ceac92b9c6464d037a0243e22563c423 cptest/file6B -da67c7698b25d94c0cc20284ba9d4008cdee201b cptest/subdir/file32MB -9da9888265371375b48c224b94a0b3132b7ddc41 cptest/subdir/file64MB +6010a446cdcf8c1203c2d08998cc69a8c88f77d5 cptest/file16KB +f086ea96f3718efd78e6791178f967585acb3701 cptest/file1KB +6061e16c3d3840712d0b8e5268c49b5c2f8137ac cptest/file32KB +490af32035bbe737480f06439a02d91a171ac407 cptest/file6B +e4a8a4ad9678b7265a28c5f0cb5b078e1049ea23 cptest/subdir/file32MB +82b50550c7d0e0d6ac18d9d0796b6814c3e038bf cptest/subdir/file64MB diff --git a/xc_testfiles.sh b/xc_testfiles.sh index e549b13..9fe5375 100755 --- a/xc_testfiles.sh +++ b/xc_testfiles.sh @@ -11,3 +11,4 @@ dd bs=1024 count=16 if=/dev/urandom of=${dir}/file6B dd bs=1048576 count=32 if=/dev/urandom of=${dir}/subdir/file32MB dd bs=1048576 count=64 if=/dev/urandom of=${dir}/subdir/file64MB +sha1sum $(find ${dir} -type f | sort) >${dir}.sha1sum From 83cd38c65118a0d03d2c66896a9572eb427cf7d7 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sun, 31 Jan 2021 20:18:48 -0800 Subject: [PATCH 13/94] Fixes for file ownership creating ~/.xs_id Added username field to authToken to allow token-based login to other users Signed-off-by: Russ Magee --- Makefile | 2 +- auth.go | 21 +- auth_test.go | 4 +- xs/xs-vis-fixedup.png | Bin 1155846 -> 1274582 bytes xs/xs-vis.gv | 567 +++++++++++++++++++++------------------- xs/xs.go | 24 +- xsd/xsd-vis-fixedup.png | Bin 800476 -> 1142898 bytes xsd/xsd-vis.gv | 529 ++++++++++++++++++++++++------------- xsd/xsd.go | 42 +-- 9 files changed, 696 insertions(+), 493 deletions(-) diff --git a/Makefile b/Makefile index d94d448..5754bd5 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION := 0.9.2 +VERSION := 0.9.3-pre .PHONY: lint vis clean common client server passwd subpkgs install uninstall reinstall ## Tag version of binaries with build info wrt. diff --git a/auth.go b/auth.go index 4bb3bf4..5f4f2ed 100755 --- a/auth.go +++ b/auth.go @@ -182,19 +182,27 @@ func AuthUserByToken(ctx *AuthCtx, username string, connhostname string, auth st r.Comma = ':' r.Comment = '#' - r.FieldsPerRecord = 2 // connhost:authtoken + r.FieldsPerRecord = 3 // connhost:username:authtoken for { record, err := r.Read() if err == io.EOF { return false } + if len(record) < 3 || + len(record[0]) < 1 || + len(record[1]) < 1 || + len(record[2]) < 1 { + return false + } record[0] = strings.TrimSpace(record[0]) record[1] = strings.TrimSpace(record[1]) + record[2] = strings.TrimSpace(record[2]) //fmt.Println("auth:", auth, "record:", - // strings.Join([]string{record[0], record[1]}, ":")) + // strings.Join([]string{record[0], record[1], record[2]}, ":")) if (connhostname == record[0]) && - (auth == strings.Join([]string{record[0], record[1]}, ":")) { + username == record[1] && + (auth == strings.Join([]string{record[0], record[1], record[2]}, ":")) { valid = true break } @@ -207,21 +215,20 @@ func AuthUserByToken(ctx *AuthCtx, username string, connhostname string, auth st } func GetTool(tool string) (ret string) { - ret = "/bin/"+tool + ret = "/bin/" + tool _, err := os.Stat(ret) if err == nil { return ret } - ret = "/usr/bin/"+tool + ret = "/usr/bin/" + tool _, err = os.Stat(ret) if err == nil { return ret } - ret = "/usr/local/bin/"+tool + ret = "/usr/local/bin/" + tool _, err = os.Stat(ret) if err == nil { return ret } return "" } - diff --git a/auth_test.go b/auth_test.go index cfcec60..bb63ab1 100644 --- a/auth_test.go +++ b/auth_test.go @@ -19,7 +19,7 @@ var ( joebloggs:$6$F.0IXOrb0w0VJHG1$3O4PYyng7F3hlh42mbroEdQZvslybY5etPPiLMQJ1xosjABY.Q4xqAfyIfe03Du61ZjGQIt3nL0j12P9k1fsK/:18310:0:99999:7::: disableduser:!:18310::::::` - dummyAuthTokenFile = "hostA:abcdefg\nhostB:wxyz\n" + dummyAuthTokenFile = "hostA:johndoe:abcdefg\nhostB:imposter:wxyz\n" dummyXsPasswdFile = `#username:salt:authCookie bobdobbs:$2a$12$9vqGkFqikspe/2dTARqu1O:$2a$12$9vqGkFqikspe/2dTARqu1OuDKCQ/RYWsnaFjmi.HtmECRkxcZ.kBK @@ -155,7 +155,7 @@ func TestAuthUserByTokenSucceedsWithMatchedUserAndToken(t *testing.T) { ctx := newMockAuthCtx(_mock_ioutil_ReadFile, _mock_user_Lookup) userlookup_arg_u = "johndoe" readfile_arg_f = "/.xs_id" - stat := AuthUserByToken(ctx, userlookup_arg_u, "hostA", "hostA:abcdefg") + stat := AuthUserByToken(ctx, userlookup_arg_u, "hostA", "hostA:johndoe:abcdefg") if !stat { t.Fatal("failed with valid user and token") } diff --git a/xs/xs-vis-fixedup.png b/xs/xs-vis-fixedup.png index 4101969c6cac5616aa58eba137f24a54105836d0..3307bdd693f39022d9adf22b24887855c5b61c4d 100644 GIT binary patch literal 1274582 zcmdqJWn9zmA1};L6i`G=5D*Y4X{8$z9Nm)!>F$on4+JG;l(ck%bc3jfw8R)45(5S! z$LO7F_&?`=pC{+R{W?$Xd%D4QgYR`+pLl=XpU@Ag%5oG}Xs-|v5m7*1y-+72BJ~8{ zR*;c^cWTYFjlma^Hwtnui136zpIh={iHPnKL0&x7^h#Zy_VkKH;D2sQG(kjuS8^!q zYsc`2UVoZ*1w0;v(X}aGzZ9QA{Nm-y>-zOhpX2E^pzeKdbVvJL04x9J5oh+{r!n+@UV*QoV&4q@dr9_BaMORU zu3sSY{O5mN-oJPq^WQr?A-g|y>3@Cp_WF~0^8a;3#PrsQ`oCAth~|0!dlgLNszw*E zx6Q75jGFjU^51(9@jiqaxaW#{G&jDo55I>gJ9RD1Q$9Yb4*&0}ME7dkd)SolUM?|{ zRonvq&%6F#Jx2YUAOD7d);;oKXm zArxAr*9#{Q-37M!waNSK5<5OEmnNucQ4VK~sr~mN{hg~P^tEMvLpKf6s{K~8-uOEb zwm>9$!{V<#`wJiGePZF@5qjzGxSn-Tx#Wfqinhj;!LVmdj_63FA$$O(p=%SCz++HA z=h&#lP^V`Ua8}Wpav1M{87muiO}M?{y0{f8WIl8;sn4Ru3ZcxSTZ_niPFk}P?XBDJ zrf{^xFw?nQnN!_h)w-~8DG$^AN=0K$5^re+t z3_uj>wY_pT@W$30t@kjR3m#E7)4HKr8V`T+CgUghj=Ux`rKFB>tB&)|x2AfLyXPw5 zJF?_sMxT4?|j((IF&0Go8Tj# zO>PM_9q>bjcFbSufn9spE*4M|w>zX4OL!!(usXbk<^-HCB0Bl0;oPgp!glU(a!R-A z2bw;v$h{CvC(>|GZ~I2!a3DWF|58*(XQD=a|MZ1{*x0Ct%*@PR1{}=H;#fF@SQ}os z6Fx-P2t`R4HY%pF;9Z8!Z+(&YuTS28_@^g92J`xCyt0#|?Qj5fsm@#2e(LkKX~yu0 zx9gd}5A31e%c5fa!z=F?M3Q>n&Cn5k|E=r0zrJw&b|(X4m7LVuF* z8h(CaJciXzG6GIoryS~zX2c(ju@Vz@<)r&R6=)4LbT4I7^fPiti;R4eS+@QO&FDg7 z*QP1kMhu=asv{kc#kM%KIe*gL?)qkYQqqle`1v+Oc|zRLqj#)_Gvyfl^)>SS4W_W? z2R?uKddUQxpp<;JZ8q(X{Fo)EVz&IhLGAxlQ2e{>{~6o=Kf0jtHIILYa;Vc`@&cBA zRO|dsQ7>P}q7%Kj{x$e(co+3rY#KtYVc5H<*VW&;mboGgeb$nwg9sn9UYX}ry>L&= zPt~BQ7WwucBx%#_RA%4(btF&SRdNp+g52KTKMFQZya4duk6)t+$3RB- zI8HRU>B(iaiZ@~gE|6^F#6VZG<9%3=!MUH@e=)XU5`e5pk>bK_8{Z9V7MQby@a_K{2=byb* z{U!>2N|b)tn40MGB8^}{bXj9jB+F`6cv1SWFYI`OFW>zyY~PQ2)DLV|nRK4_?Sf{p zwhp35OB#h!QW^L?)ex?Hc<=m%Pac}20w+o31tHNX_0~qiF>Y4Ey^}t=&<9&vInJxD zsQ6sSW&|=IecT9-)rdxOv9c-=E@(wCIiEg-xQMP5SP%F6EJRW+Vtt4=z-}@gFr&HH zJ2@aeyM2`Ak2JONl}}Z?${c5piECQ1qty!-{7z5o1=MEK=4#dU{@-)mPkLf$D%$3j@#TCmlb9)nB}j za$j|65_X*N(6=`%hsLtQvJ!ZFIXR00jIWyg`4Jr^Ndk1}#NP{qYKBHSYNJPyTtY%p zPQ9yc*3*qjx^)h*tw%Nq%Y7+jpFTZ=oH=IJI?l@3js8PE+W{;kg&h&i&B?hGb$YPi zsN3QbB?3Gkp3$GbDw`1 z`fc0i=H>MmKU&!xm>r2>hOK=K)S{K}sApLnkP)#N%84f4=#0*wCG&7>sYx6fzExxL zoi8k!j|Y;>za(HkUTFXqH2ulqe=yG#XiG}5mK{V2T?MxipKmBGcgWsZT406jF7t3~ zJ>?M+G9afe`^chIsQ#2kPnavJ?k^WheSV8ALjBzpb5_Xr(6$o)<7+na-|igE1(mZv z>?ehhL6q07R?8r^uU3uU_Bt8SSQx26Yso8~XjNJGf95xrhrstSQlEiT*?v0=<)~a} zcbKg0tAXL=bMwlOpP%}(KnO|}bET3O-@Z#mMD(@mkt_9+82icnXqK+|FU78?Yk`iH z(kENS@m$pT;D&`B8*7347F9aLB>H?1pOfv(E0mrEhArVERVblk!PQ%be$qS!jk+~9 zS{j;~!4H_3FCatSjbC8=#FDn9KifJji1P7 zA6Nel=uU_vm+Y4r-gl$8>(ufy(pL^H=(@}o=#2F{htNC(WOM(==%6BdG$bd z_h^AydC}9LsLDy(9^(Sepv)rK=m4JIKT*4B&IS~8qnG`hj*lKWng@El^&YnOhC zq$(#W=B))jz7Cd2;MU=ROtj%Y4h;(^qjCXQ5R$Bim1~G%tLerJL6=2ho2hyS<0R8^ zWbq~Pgw+XKQmct-n!x?(#_3GUbZ;#>VLLT9w;XZzM*Zm~qtgrp`m_&cr>8wK?CkkA zXD7Mxic>{WzWWMqM*k86RJKye*=Xi-NFWLT(&$VJX_T#J(E`ok(k!g*Az;WiZ*rcY z%6og)HP$GJh~{2{gisl>I#fX`w8m7bBcRaLh29%h8Frhr7rEFkgFm5z=ddbhqmf2< z;EkoakQCuQM2QaLN{Zu*S~LSP729}(MKi^A;RDf~jIiNmZ@EPA##Ofe5QTnrF)`(7 zkIC;lUXo!^QE`J-n(FFdnC9IN&nBteB^TV{c<89fB6z5(Y8~;bz%tt1FR>&+&MvgJyK%c)VnemNn^jTGQAZiX#B&jWWA63Ye~-BYR^ zXWO5Z%M6~wL$Id zgHqNByauId5}sTtd#c&8X@YiRRe{1UX;45853hn?{@^mDr`7t{JpbLR z6OHaox;1OLV`H+MT16F&ZVd*7g{v;2>$D;c!7QtlJ;_CeQg~8;;L!y(h|#bphtEhO zn2M1!hpr_Cn+Y2ZhO;QCF%Gni_T3W4eq{3(5v zx;#Z{%uhY1oMW}i&(!QE^f|lQI(wsKTFdDO8S=qU7(kojeI7wiOn&29kuccA;Sli%IGQ=}0O=+!j7)+*8zmD~JFmmWF{ zND4?l`i@QaJt~I8`UJXyP{DYY>sOoPZefIFDsOC8j$><5$>m$Jt8fKc4#}xZfahz7 zrdKLb?rl`OC-O@@oum`g<^($R`4J&qI1C%w8kA#1j#wK}drE!1v^r?wSr{-aDs^@+ z-OkIp73L!C2h$1Ws#IzQ_D)wUGccuR7&CJE6x7m8!a2^qj z+8Caefk^rHF}MDh6cATYjkeR;*T7tQcU4$Y6VbDoWTC2m|8i==Cr>I&|9_t=otLOYW!9&CpWx4$p!kz2J@AwRsRu&=G{LynKH9L zcqnvP+9}d3Y%bAO_-**N21llpl%zulHCS|=)$Vdzjpe{U8{<_*gq7swllcXz7Tp@- zVq!SLJ4)WacS`DGdnqSZ2tp>Ok+k6*&N$#M@rch)c?dX4u;yd)e~8|agSz3{2fIEk zN9gi2K$SJ-h*jVG(YBv%G!PT(7g&=3OnOU{gCqA9@@}Loa4BW%nn4Z;g$?QqgMYH* zG&WGcaBc%mXJbvcx66HcS%#{PNe*q}G#|_Md0~H8_L$}h*9aFBQ+vpYvq;58*_!QJvJ<_d*wc5(6@vOs9T@*OWYr*7mGkcBF;;Ym|YqBVy3m%2_>Q&!`w| z7oDH6Y!Hgl6I0{1Eq|qNf`d5#?#0k7{me=3B6et=9@PdTQn{Z;1+vXT8Vz zfRhK5&Q@!D(8CWlDoIqE?8?Yb9Yt%G>F39DAy@lEWa7>l22y`mIZeC=`3ZtuaFKufUW={#cTq$|)132sO*T5DbudTi!-I}4KHdSB> z?I1qeAB+_eCe zekd#~{=OWLLhwi}1eCsIf1=6f6pJG^rF*P4zZRfGj%}>1DRV$-?mx1v7*#Em*U>6g z*CuvoR)<&noX#Hk?7#6p{LVO0k2Q*<+08TbGRbQ6Y|~|yll}~h`;M&?V0b4l>dEy# zYnRV_F4V|Jhw}ye4kQjG?&K@dewsF6RH97Jt9_gh+3zLm@JMuB7%$??XL}#AFsq^Quz2za1(ZabcD{>1KKb4 z#T5%#^kx_7)mi+uxkyBm8G4(z{;g;luRj*SO()jcDG7p@GGb_d11}HPHPThdX29fgO$uIiG4He;Zf>0rEHB?4xH?)75fGej z*(7Wg9m=@8hG}v{xDK4E#Kg?E^WGvN3MMlBLQbT5QdwDvov__30=#H#5*NUuTdfYX z>0{+YS$cR#!Fsk|o6azbYrg71ev6Ji^QnmE$Uuf*+SOhn0VL*iX)+IQ(2^pgAgGGed--gNUPeN;hGnFT_exuQ zDGSu5ZIbu?_)paQdETN)iM^Q`O9QUM}OCnBb2u0zzb5A5w;l*WXn-Y4fdK zY=XKuXD3fIxYkY7ZDym=Q|^}|>DG4$tVFh+JT;$+`*og0U*pQzamHY})G?yKLCF7X z|Ca9V?#1cx^4M?mChfcxFCO2$+L+~T>W}SrI>mP0CVT?;^Gv|8DWc5(UAp(OmRMSu zapGmd*1ldsXGgbcAMg8DyP_NnCh8Nk`vMGb(=%FZ8Y|bF4Z#};e#c=zIZ){g6%{EV zTAauHmjgf&ABrMlbiwq3fZzPMGCyDMIGVLOHGo5{Sfhr^0n;M9^n|-5_?Kb zJoiVwCGi!@K07o{bl3jW$0j9El3@YcD|wU6Ovt9!#ZX z9|3i(;c9Dv+ZI(Tt0w+6Hv8zc(QW=`)5EGwvaCuO2lWBRe=Z>kbs*?bd-Wy{k+mdC zL-P-Ri|YL`A~Oe1qNVo#Wm#Ri5hUoaNMHG>?`hfEdQ*}8EuIsLk|NEBVMZ7?6ja*c z)6;LPR}%E|9O#GrXH;5=cBzjw05%(69e?{z$F=D+qbkD1tYf+Fn)i9=Y_KY~_Evt= zEpB^(I$!bHjQUTAgaTJePyR!}t(*oXYJ1=6Y1+b1s zZ$JNNuK~)NC^1GL3^#+FsL7mxZoY>|70WTuFh_S5ACr0vr>>f6mdcMCCwdrOuF}E& ziLFDURMIto-TLEC?*V?^0x0P9^}n4FQNB{WI*8}YAtCwrDeWG5gk8VB4)6Z}X!c5? zN(K~ID4|A1E9RpAMF9XCE7?5n^>4tcLautNFLbKJ_t^|WH?JaXvqMu86>i1fhSu0; zna@T;(~{%kKGkc15(*UXB1#XP^Mj^B`T6+~O*pCU{{BI!I)nUB5*(Qa1f>}nypz1$ zPX@SB%ia)6Us4t5Di99&FF2$Lp|}P1sClhPX|`2FT}q6qu$mi z>~NxhG?aKkLzC3bd)`HQyZaN=Ijo2C+7O>T{{1N}^l)tH;>%)%wYAmIqi!@7T1YSX_9ZoXrEeG^Cp6BxV%=htyP2pRZ*}7E=dmyl+TaD?FiLMh9vs?9?219LQ zM{R3)^PI@)Sy*~>WYljFjSO`+vwG>%Jw2tQ9i0lqd9eBV?#(lu6(X6B519zAz7pKZfw!M&G+%*+4CP0P&8OV###qxZ+IIT*Zk7x|yF z0Fznohny?rI@5>TL4I_!UbP9TbbGzuE!pq)IgX`CY2mWE;W^cN-1cLY8b$-UC50Jh zC8Q+o$OB6fPO7C!PcQ6V+1up>Jurm;r*Fo)AR!V)v`8Q+qJ%*a|xzi8?*hd7j~?fY80B`5Ma*X6sfZj`fu%Ph?Mb zG3pt$Q$y)xXe&<7Tq&M;juoHE#rrO}dP~kcN$DwvDJqH26wgwXYGJjBwMyT?#4?K= z8Oqq`HxU^hCJ~LDc(d|BjqS)|o3R2`|fjN@X%9~dTD{yb2HE@rfIhrFq^lQ}! zpk!Hn$L^5mwl{FzeR)fsG=PrrGql&MeI+0#QzYV8uimD7AhQ9{_x*;p=u2jYH0DA> zT~%|9Uep^fDjj63A?1IEJNjo5hr(I!v~ur`GpIZ)0#+9z)k}yX93V4#y$K9hUih2A z{a~*a!@f_C_27bYKZ}){GU!4g2B~N9Wu2Q1YBI`nxgr^iMG+Nd?i_gKIMt?_{G+UwKOI=zdP?vrv<@hzg1Hk;7fBSH6|rqyRUo zd0mY+uEfCB?4|HyMD_>vfNt7lZg2W!r+Z4~&nA{4>oy}tvXV?$AyS)O%7xZRcpVi( zSltw^l4N>Hjc!?a#L`hJkF{8M^{9P-biyBx=Eu^WG_RWoD+R0u`0tOJ+Gy4#V`$D2 z*qU+Eg{^7u9PPvr#7hLH)j;~GZoN~7HTFCo_l&OQO62yf$Psk%cgTcSrtTMZ$N`Ks*isC>K$e5xk7STxY*Iw(%6kK1|6t5>_rfRJppz zRp!GZ)SOqmW;m`Bs!;`sqfa{$Kd9Ak=GWD^p(kJ$ zA@{Q_w>K)m5dtkW2(-^UFjG7b8&&rC>fPjo(99MNo5X`nif@%!I*iU zwf2n!LQ)-!bcjfRRa- zMI~$XfIJzdJcj=uSfHUbG$_LkBzJ%09^H#Z{^6xv?_DVso&!nd+^_06Vl;;dSFneR z-SRxY+XR?jid(FzM{~(JSbDTSYc>=UAUEWKU{WI%E+|A#a(F6_ZkI28nmECAC!ofB z>3yS1A|AZU$E>?~UsiFBn$mtsJGuRaCW3AJ-u%1Tim?s;mVstJ1j>~b+pGlalWM%;;^nEM~y{J?D*g2B$0wf`u>gT4PseCpVkABE4UiJ&QF|lOC z-=KcTpYQLOJ@|Q?QKpzKG~yh30l}x&6&iAf3PIb_>CGsss7e!BLKk-r1viQtlJ^l) zc)Qq61`92>#cjqXrdi+2`RNUqX6*K1_qplyw)A?uJ5_2k>@|a*o7DbW-fks$P~JyB z22mIo+AW9WZNd!7416g$I#ExtB%2^?mH(iUT>H(P(%F}uW8-}SN{n6&7?CqI<=>pF3fSB^1j4V%VTE9jIS@+#-vDk@e)tX0Z&-1AIppQGdm z-9SnOxC=-BqS=t`mT$VUs7GEiL!uu;oqoepTSKcg zkEM$i-r~ctuE$%UxzZWXGDX;N)t!&J-?Gg=;w>S?%tLLP?^(j7_#bigzmcJRoos(C zsrM|SYGcru|I=vcC}KH8uGYvNz@$ZVHUg!&J@CCeL0x`(+mDZ}m!~K3 z^^2qmL{8$(433$_{B#r~hb)I?stpqqn)#=QBHxZ0z^-i&Mc8hSwzBV#cLSWf%Ah3V zgR3&qBU722;vKy3BIsCa<%D;OW65-1k zgU;)f1EA2R`6mH(`7A{#Bze}>%^71QH=aN{oBD=-N%)%nPZSN z@G63_r;k503$tO+e(_a?%JiwF>8rA_i&z_If{wr_!zjIPEMiaa+cY8d&i5|fv;5;B zC0HL?q|I3zSADfbHX*lg=F!=y?p4E3ts}$J}$YB@#TeJZG8MPbBLm6e1`P6V0 zYbq{wNr-h8Y4PTRB-sbQYvisoJVBsE4dnO{WEC|!!H|A$Fk*IZi4s--Xp(ZnW_f@< z3#4&>V&AgC1{8j!UCncTZS*Ecuxpf+2sTs>5#T2+jRR^SZ!BBPH{3uFi*C1V@ukXI6H1Q`5nrT0)Qqaox&woZdeZr~5Sq|o4YCJdp0W`fF zRFq}V?tMr0?>yEg_#oYYgyyw*SRd7q$E7A`5{xKN#GQMu@!Xt2nOPpr+gfi@F%8f& z&M&y>tJrdX|L^$?+xS|?&}Lp7WRfnD&AWv`%VtcI9^>V zu*%A`BF)waOml9mth85E#7}q~X+)RV2vS3K6_1eAB~hZzD#KLpep8$T6yxs_8NKO;G1~F4W8`rKQb2J!cJ`d^dBNogF9#uwNhbd zy5Mgq?Qkk3EEXwa-44fg+{Co0ZlQg-T#b`=7U-Nl$(EIJ8?ptn5YR|E&(Y-#lt&>4@WK~|mOlVfUF=qj z7Z5^U9DeS_bB-J|@>s&lA2l zC2ho>(dEIZKHCJsSH8aN%Hf{^qoCet+)+@}h z+#5xv10-cU%D|!L6}SG_-29sBFSD8+Dqx5R45j`?OyvZ#*%jAcb~Qb;46#jd6+pP} zT~9Coc>>m^kHx_}msOu$vodUBEIV0?>ta*R&G|Hylle0+miDhcsJ@YbJb&)$fuAAk z#_Mu_G?mrn(X6}Eu)4RtSY_vrVz-)~MYE^U9f(HFTw7r-x2~pN2SxJZEkavUW|gmG zgLp9rD9_O~I0Ex5L zHx2<^67Ob*e3zlvrQTODT+A=Uk~mzx!DV+xQK{|P>%{cM4o6LYw?z^5_cfjo1OiRvA9Tu-z^!S4Yrtx)03m9QpCz%^^YR z=Z_MHbl=ch3q}(9L5zM|VP$P+yiz+;O*XIdi^}YV7wwuQQ~zb|vR)H95X;RoF9HJ& zw4z@;3ANz45?Ay5o}_e{R3$ZK*)W;ZKE+r8W}W^$Gnf^f=q9C`RR8+IkpMt@@ho$S zfzx=pud+Y1Vrp!vxjkTHw$3j|p6M!hIlM)`k3%qUWRKGZduA;f zp4yGghILb7Njr_HXHtRF%HAL|X-tE&SXvYRlH5@u&stucRc8DgVXYB2nO< z{C6V)QKMVgnN97+aR_I(XxX4H?r^CGv##O2!uUj{(rYjo3%Q&K*;rV#Ni59K1kdn2 ziu`Pof+!fCpWbN1=)YGZohGJ2NrA}>r$c~J^V0=T5gWUUul%7R?H&E?J9!3S#Dn)9 zkbKvHpLp|z%7)=-u}Ardj+{qX;zrz(_&$B65^O^~Th?9B zoBx>TA0m0)XaT+cso#kBbZ#I5mmycnfn{kA3znXE45ia)pnVuH%nS3z0c_z)qg!`% zn1S4*WBP9JD7>it*28v?$Wa^8we}v)Dk)q0{w{vu{oV0zre@I}+U{HQ`kbeZi@mSn zB|6(+oR%y>3tQ#ocvIVK--GRP{;K=7uj_vUHiQ|}Eafxp& zNHR>~SHgZbRSsx>obJDGLN6Yd(-kYDhMSZ_FNiPQ2i>=BnDym%Jc3kg$b&cD1z1QG^ z80>XIhLEJ}=+;BPni|?|#6BE!P_}r`Xq-9vfaO_gIqLg@w7;}e=?cv4D?5;PlUCSR4^G5s=0BeDGi<#wX z3x=-LX~D-CIKrjA$&eGguWNA@iL`>V_QptXA(*l|IAakEWL&!!rmMEAY#usWun@*f zjsx60TpRru@Ff<}ldPV~d43FuQ{%up(*kLF4eK;8>x$m`<2#~NaRFP54OIe*9u{}V zmdH~g(=%8lbuDZ^$=vpM(RGt5z3H}BT*>@k(=mT+lxY1msC)&CtRxGUmS+Sc=hfHW;>)HW z`dR@HsT-mI7m$LC7lxh$noQgPRYnepjrT4?QNNPXQ+;_MV%88Blo{3f595zKm2r0S zkL40YJYFn?RGrO@F2CO&NC$~uDwZ$w9xK|~uaJABAx)ygage8zR?ZM~J7# zII>!~Zezhq^Yo%^OQ&hl)UdiVny#Hiv!0D!KyCUMPsFQSERFKJV`Dk$1Qhyv1-&Z; z7JK(#hYuFMwz*gw;}Sf~^G;FJe7(Y<+)=Oav&?cB>PI`5erU_Z+1;q9ludy1@N190 ze?9)-jam5n7UNd0f9Af;IgMctQI194yO`vIdCDT4n&yz{ae*=OGyy^o2POEJ$&JBS zm6>d=GAq#BB(&Y09tDxl%(o$}CO3_&P=A0_rApMb=!zUrO!8KPS~tv#Nt&8t!2~8@ zuAWnyJHM0RSf=F+Q>R;V=IFn*_DHK-op)?0O$4xRS}~90pGrr%pd$)qgG(u;y8QpDBva^dyNB+k4vh#GcvF|+Q24wT) z&u%K6ZpJg&9|w$~oe#MyH8BfT<5}`ORP&UfeI}L*9YjyIt$u&5o$*Fpn)X3I_gQQx z4CA6N)hlm%FlK(I35L5jf)I)ReHPT!h-u^k&FJUn-ORZA)caP~d0*?u?OPu+8rcAi zJTymAy@WQua+jDb3{H@`eZzV%7#a>Z^Aj-F^0uN#WJ6oABwlOX@h!N+x!95nuIwwx-oC9S?{l zF$XyvoCxx2rSIoheNSzPp@nSnj35@*$sDcr_Q&-}({UWS(a%~iIi_{MOAwwufNOP> z-aix3D2|Q&2>TG4G0{=VcuYkcv|uG@Bfb5Ba%)uuc0FERYa{nEQ?O{e{JVRu+mDjG z-YW|J()aUd%@QusR}SGSjX}X<4wI@6FJ(N>9n|_3uj@)*lOTSz-)Ft_R9;nrv0x+_ z{aY`M@S1F=CH`kvrSPLAue5?Vzmjm?iA>ISjouE+SMT!UqWhHLkpsM+NJ~aXv+9~2 zk4bi$I=a8XdS=!&71oHx-$$;09$kCp=*r0x^{yZ7@f9hKJ>l-rf zU=UgGsBpZid&8xREccB`J4(&kEgs3)(($3S|9NT0hncmn#<;Ay#)2Br-;+`+_Pj|v z+`*zt4$a%TZz?Ws`p)KibRVLe$e}`cC(Fr>CM(p zD9hip_IC{e)_G3vqMKJXX5`H`2E%lNriph1aOQVhb%v^9a~^2qSh7I|ls|q@j7?8s z5tDc-O!a^+BhaP6g|W0fOH*)i>h3*h?it~$=;piY3=tlbK26j?(~=1M z%n>TAzEaw4-qMk&@955f*wSYADb|?yNY14E9@mOv8(O_uH@$yJ`si@;F%8*nu1d>p z1RVsMBA0;*(Zll%dWC^0`|WU}slYCl6r14d&&Vo%Ct>M6Ugu+`BX>TSXLLQl$vlvf zc;|TdE*0NCX{}$i6p;#9avR+~-Ne&v`XKe{v7;)Lo|{i+4lo0ib`Y+NqvN`rJg$M* zkGO%mv=m#gHmpXgE6$OFO5tuKiS$lP%HcuhY^ZY4=XcltRIBz5aJbqSF@5RlZR=w- zH8W-EUQ%Cbl_S=Bo<^NL9X@LJ9XXO+Eh#)6|GT!o_+pLw3@5|VpB>b{lZt|0_5EsH zeB)(9yL6&6%NSyNqT9SLlQfY&PooU#i)`%=&Fl}7wJi9fcG-D(kfwAcVswGwsYdU> zW9kgnTNM2R`RV4oR1a=xEJO2|hkF^kpIV2elku%vsA|0DP$mpvo&Uc8*_y<9X)EYB zB^r_@&j8m5(xC65?Rm}do9;|MGIlBPTb|W5Lff@ry6Ix_W~Uss_hJId-v**4d1!V=QCaQ?4Yq--rBwAH77$e=_5ni z@*#?R_8Bh0lRHeTk^S2x>XL;+6s(WlbE*#|gXi&Jyt~|2=ND+MpzA$5tKSjn*i2Rh zQT}{Si#PG`^cLUN2IEQCaR83HS(%NL*dv+}-gX6?599r5$qxor?vXD?1C0n2xzE6Az&` zP6v-h4-MUGGOuTek4)%B^piyNFOaJ&|EV&&WwLy;$}Ed%`3+O$hexYhx5uqMu8jR- zuD#D_-#ob1w`)>P7nIG=(ib^6Uu<_Idek~yfg3mNLgC(no`OX1C*jnKK#21ULQZ zRp%Ah{>C^4o2?^ThtXPg%8#}jhgUl^Q`OYgP83Tlxry^^`fn;V@1{8}%bYEAp7gYx zNHkGib?w2Qu`!-b;k-JriCa-t zEZ32EhPt(Ft*P5cwt#N2mz!nCGvVCeIssE4_TBc4yM@0+yOOpqY1R3J-->Oz5!-ax zakJqQZ#^hmT+Xig2UzLMpOQZ@WK2bcqiZ>%YZn{O7B{+cAB>M(O|p72{`HpHvaO{l z(@=~xeE50JgYMJ~YACU-8%ge!`hGp@XvdP>HwC*UE{Bgt5T?1)QxZ*}r;MkSyVDzodUUvHvQlju1GgmAWPw7D476!5%IGq0v527gpu zUg5j|K>4rDixF%-Q}dU={#4L9eyQ%0)XoJ=y1V{f4C5c8mfQ&i37!>fjo(%ftcRzr zIno#7{m~J2EGKz(pxt^leSC1_xtZNGJwV|&_Cv31=7o``YfYl>P@nA0sok%!Q>Wpb zUVBN?x5MQ-o@i)DiOl*jZwBBfyjsdQ%hk!4s6y2%zUteBjP!~oS$%Z#g72;0PO^GC z(tC0BmtfM??T!=uC2880%dtR+*$k#>i6QX>pLi^GIx?Yucf)W`7)c{0omtdv4rF&T z&;%Z6ax?G-c!js$fVZnH-<o7GJ}IP2=#iILv3jp*CVx5jd#u?T0kdx!z1J{il9CWMTK(%6&^*dluQ9U8 z5tHQKJfKYrh;WzAt$N$TS8o1{`;A9ae8$OQ%9PtM-QgT5{zIB?w9{b9nFy+MVJHnN%f3eyj@j+0b%HM;Z%^c3(&#n>nk$R)W~au>QK5#tc~j%Q2K z^0}o$&xRKrejxm>Q8|*6G`U>Bujo0u#9a}CXFg{An#RC(;~tZcl;Q(XMSfA;%i}`g z#1=+e7AoZFtaMhBdltPIHbo5EWyg2d^AnS4_k=}!Qs{gYX1Qj|^x1BabJ9gT_(xq} zA)Z3EVmnB2BVe61C9;~0E>E0MHqq#?Vae_jB@7j097>ti6>#O6I@z|afjfd#-=)jj z@36;nYl&~RJ$7=xVyQI4xNk?G#$b0}E@=XNZ^Y za7P-nqoi>+e0(N~TV4PT^o;uf{LTB9h5DTQdq1Ss8&I>a`jiK~w~dB9`;H$soB%Ck zRrnp=Y(2xm{%{!`-j0?&;szv20n>sLxf-Ro4bVT?5kH4qsiy7M8SDr_D2#b2^P$RC zbK8&Eafl2m^;PakL(v}^0~-rTC{nMr2LE2!oAJ?TH(lPAJwJ!~dD@wSpFI`hW)6wh z|Ez0pF23qh{Ft1PlzdGkCOJuU!n9xUW7Nf8xmod(#e(8j-5DaHNFt(qQt7$k*Cv6O zb=Y2BevadX0bYeo$%7p!Az_JUBwObs}5$4Qe;VduONjDbD8cexbIt zC8%;k7(;oJ6$Qy@;c0+>0Pa5CA0K;if>dz=R!n45lPuD*iuF4hW;7eGWX*SzBDjXA zz^i&Ls(6=%A1eZFZ*VX?*N0UmT|Tc{Dfl&*iHC@muXT8WZmGrYawPaCATcmJZlJ>d z*dbsyrPFJxUCw)doL&+;6_D=ZAY*hE?fZ|FjZ;;1{<~a-|3TALfJM1=T@?XQl#(v# z?rsGE8A`fAx~03NyGz=U5&>z4M!LJZ8>AclGv4oio*5CjUT4m`&)RFPz0NzDTe}t} z+i^JVGlXR+@^^Amo;l5b)nn$7gW%*<2%&Y47|-}&neBPt%9mMZ=W6?DV_e&-^|Yya zH)th4rfB-nbBFCKjl!P3v9Z42m}>)aG0&rzQf!Kb@mbxzCh!G1=@MBpY|K(JoG2y6 zuV>Pe4o~MQGsb*PeZ%II(l&;%q9hq2j~1IQENWpQiehVNkzm_08`M52an}>h=Arq^ zRg29-Yly(;B#yVNXC3p(F?1&`_8m7du06EF#gb%Y{8hOBQ*nkkanT8zTwFFvth>K4WmGFHj~-vG6j#aqS6x6;h-w zpKjzr1f=*~t|F9;esNXPAHR4ZK-EUVkQKDdVZ6Sc8+RcA!l372Q;*XuOX`OF|N z*BW)@gc;{;nFK82|!= zRD=iA84Sal;^5tqQXk2T+{rZq>~HI0ry`5Br5q)|jhQM2^*U!nfc?lJo$-PveXlaT z-30~(EBs9}r(33sLdv?)(FAYjzTEKd;e5UO3?7<<4VQvWzll_doTb;Z+O3+iCv!?w zoO?87kT?mr9sx0650fcWrcU}0+rRNl66?Kz)SqF>WwS4DY5!~)g$#$Hw;Ddq6N`m- ztmBSaaQ)P&`{FRD(;xJ*XzI7!OC~18ai##?iq{Sr?8DjY99*0ba@O)}9eZ|8RTP`? z8BJ6t-M$6Yy+~;@O$R<|`4X-X9(rF9B^fptX%&^*5xBD7JzihCXv^DF{A zjaMDzl_Rx)i982D`pg%LU&a?B+h@O2HLg!Sx|f&w$<0qcCnkHBqWQc zqXvw`EX$QF%X2uUhf?>qHWo{(Y7<`4bMpl8+ZeZs!IXdY*~&`hrH1#%M9B>5;ZkCu z#7TFiNQ-w|he?>eEgpq(O%II`e6&2r6 zFpqAs|C!ROIuRpHLz^s}5RQ19O8MwY<_pX<#mF{7lv|vcm?BG7p^Fl?@{KSA%JI?C z>7%7{c1>MkXYbB?n?fz#_=#!TiN=nt2vxul&pR^J>cOU=B1Vace2Q~Rl*xB1XgGU7 zgH2HCsOWk$sPC_Xuk-1sn%1GOp%`*jswp@4%`GRf~#_V&FP| z1(m`_C}dQZTChK=PPlg{{$go&zH7JX@2m){S2LYgwJ5chxy~0nAAK}wBN7(u%M?PM zZhBy?b0Pf%&UFw8^1kQ&`i4mMm&0MKQnhfErmUqU#ogWf>4nSa%7tNiUU7A*UlwH-CYd0Xq=Ogxd66zLrtF}{M zX}l6nDB_tOs#1PIp`Ky>O~)E_Zds|%f)2kt988TlZ$&EIiU9NnSx6| zWtufd(UKKV{u;9n-LjIff>OBEy~U)0Py|9g&(l970wYLIyBX~4g} zBEmCTY*9ETCKA%u8{BoW14iL5^HF|oYt6wh?1lp6A6VyCfpF#a_K%Jo0Ry%@(e*r< z>vF!{d&_eB113GF*XY@}?u15hUS3d133qMnj4Ke^dVkA4*(MDSqjYrS;SpziG9Z7; zOGJekit$PkB^XK>Z?0I#2}@VZi2d-L_Vx2eQ&u?2^w?ZnTvPk1K>NK4z7v12`mO!y zYZ{@Mwe@${boAn(I5akyjjU}YA#yMVH6jKzDvp1K-%T~uFAX(P* z&ls5Vdgm{{rTRpgdWH9oii5T(?3Qvl_GY;3@k%@-gfNRlQEq8+>=U3cXD-XzLdgTt zpZ_Q>MpZS6&FF@&s`eQty7l_$D{=t2z1pcOW5CxrNMx35gPPj<+Qz?y35&z^@6H`rDU1#_YpOWw9v0JTs;FfGB}Kf6Wl*7Yi9G8QDsB z^(qrbW+CaSvlhD|AHSkzJ)xQo*MRNhYOa2rN$n`9MjP=hw?Jp3SMXGYsjr_Og^Y|0 z2N$-HJ^Kg2%r~(gVh3?QfCFQWnljWBRaN|qI9R%+X#kJT&PZlv)6{D#gL9=l{<@~C z2t(kUJN+dkHb#E#ke{jBhRB28Y2QW zK)J@hl5hBKZ4clCNO@*rr;gK%^dT+OJJ_XfZ-T@ zN_qb&;Ii$V!79T0PUH~zSBlKo3WZ#F884^qggAdLh(^~SYKh@G6-y89WQ!3siFn`f z&QuHFACvhRZ)YTF|4^x;pSvtSfIF!M*!fSijPCM>9L9MZ#fD2 zn&K*c`2K?t9x+b)Zr|=EJeM>@a8G;DFfJasbE&D9^xTbV=oZS1a@5@_bKv?R)#2{j zp*8s5rZo|ID4_wybG`v&?nSq|x*QBz;kMu30O%4R(}F38GT^BRpq=WYI>2@^ukh%rn=+vDGrKAL1D|s&35o;=K}*~sE(lSx!aXwDI)l> z)rs|uY$ne7UC_Yly)gQU)%VHCa`!Vu)lywe_$q^|QcsV05H<>7CN|xS7U|6qnG5w9 z&(%H-%`$KtQ}fUOSkTt%4vR189xA|W?hAhWi`DmtX*OVeB+Y1GfjlM@DFLS^J~%Y; zC9Mt3tJqMaN5-FXt8%c4n&KxSZQ5pr0*lKC!)ve;CA8MZ!`rjLMNJ`5 zow|GkC_Y3yw=T5hpj~q@3f7o$ZJhS&awaj%MsN085jkSldw{eNI@TD zUdEzEDRVbG0tRm`;;*{UYhzpkdmhyVp1L$Sv)peGXmNm5RCV%aWyX!o4>Baw+uU}aoPEyE-7I=hNHUvGY0*9}Zfx&Xg@VWn*xc1=YJpzpir z>Pcx9gyDMHf6#6%wyxV0(--rN)}7820e_+8LF>XybVH%bu=NMtX+WQ%xNmwzSR6Dk zTQC&;FbtG}L*$PmVh8$diq7NUTW4KY_N;hVA$oc?YZ5@mWS$&2{Nz(-(Mp}tX+y_2lx`jfn8QCv2%?;}5}~ zZYsyVb$iX}lfK5Z4F)@4wxr1wl?Yi_Go2^FP5T!mEXmT}O{f#jcR@dodWk-DLy6FI z#hfep3V6p2=2BF9#g|$ zwA}7ompVf=w$(R)u%d5F9u&8ffzj?^_ch@IB zruR`#2ZolCeD3r4i6L>FS$6XyU<1Odm;B9gNkOeAbxZZ3cSH`&eOmQNsbRltR?Y;y zbuD~t34DHBa|;P*6lTWn%(fQ;-3BW3N!1lPwJ_HQ&tu!%;{o8Yo-pKCkIqaQp1BxY zxMV5ptG0K8_pwVfu)wzMSV`Mb8WWPF6ZWwd%fPl)g`p zB=s+6+4eh3CCLwRXz|ZbW1pddjqt-$-rOQGrJ-1TceX&!j!kGmwXczzv5_0tPX&dA z#|pQ`pw*q6xTTq?!(jGag)uasrncwk{=P7o?sT@*~`uJTbPUEoskvk@N&a@iF5YbHMrrykkCs7=e8TdJ2OekJL-WI zhU<2NXu?|NvfM=0y?TmATFlr|fgNya1~%%}l=qjLtc@Wt5y9%=w%IQY<|yYKR8s^V zzqrmmomELoKL1}KQ`qAuDv$5Q;<_I1^285*|GiaBx~%79UX@GydjD-7$g;c$6zG;N{XnR?nb3!?$i##b;T&ctiAyfxbkIA7oiM?3C^fV>12h>*g z%sa_C9|m_9bW)`YxYU0%IF>!j6L@4Pg7yHkIOeEW8x0y(mg1ke%hOm0VhNmXTDL1M2Kk&Bt2Y#<>?Ve3`_F5w zQxt&G4R6Rr^N=RB#;q^3_i}fR>-tL~8k}W%zT^-gd}Db$O$j_q)0^koVCkJoTBc#o z{pXe1DR|Fhm_?|QvpQ6?=qItu>Ar!t5##BK#(|*4cUpG{?4IG&JzfE|Wh=eVA_wfK zb8ORj!*fmAWorf#8;1MwPLf^4vbXH4+S~N#!~)G-92c>us7mxWAI%-7ZgmnZc4{Yb zc{Q(b$9GfVH6DO&iizSP?v&7rD(H$l_;6X_>ON6+Q8VsQ7v`0PtFO(H|*6}Qz`c3{QTa& zQ&Vq^^Pt`HA@hr3cVXe%4Ld+&3QZBz;jX7E+PSAl2c#0ub?+^``s2^S%JJLZ%2NWx z{%-y^zuK^Ki_=&YWBbBf9qkW0=|H0HCEBCzcPpd*ZTV3#DMXaQTEnzxr26$AQqeMTehX`zT@OU7|4g3sKrsVdHNo^hEa4-{Co%LyLylE7NY5&f?js?n7kFf)AT(%#roP4QyWcO zumIrgXkI5S)#N_>^ep+W@a=wdScni_DOkv%k$V*Ub{|pf^*FI= zCRVab3UMW8?fIEKUz~T4{EQSbz15bsi%aZn%SS>Xo|CZs#K3_t8zTSm2_$=YPg{18 z>#!Bnq2#W)aDKTqHE||68-Ou)GvQ_-87qsJ(>~YSyL!+{su~fr40&WN^@4MAu(Z68 zCDfo+-h3z)$`-(eo=WrBp7W&0R+bJ%c0uRAB=T#JXTKeL0HZ{Gd!ChjAzYh72|+Ky z!5O|v0O*Cb2bxMS=BzL_48>K1^M7Xo?Yagkv{SjnEA}jTOKiLL>F1UtiqAR zR%^N};N;)gXq}xnx&LAB1sozHBbL}@Aqe3Y4ve%=dB6+oV!FB-uOM>>V9@rF8Cu9?V7b?^Fc$8!Zn7sU z4S)?CM&cy{0fGvDf#^V3a5V>RmN=ASX-{2h^t#B_CCk6UkjlNNXr|Xo!y)w7NXsWk zVY93pDH&iK_U<8~%m}m?F zp0=pPvO~2+q~?voKl2SZE`#oZ(i2%#WLJ7UTVOm`pvS68mnDTx%*SoY|ND^c)%|&0 z!gDvEg`=vCd1sPV_tZlxybw*~!>xXUA_XwA!WCz$md=hPK(f+pQ;!RPFYUfbKyEhP z08Ua$fQkXMbn3DNvTn`J`Qz#D96R7v{$g!DvvTK9_2B`u97iv$PeNy}#~92B0P2NC zF{u0oyJ$tpANXEOmn8T{w{ z!RAeBTt@g^JGo+}69ib@xjn;kSOoipGu-WNfuy9RkQgvyASGA`Sb7O0T{{z~e(nGa za(pr>H%H7HSdJ^LNTMHtzDa zhRZ}v7LUhQHjl67i;hCsR-P$*l{zS%XrEWXh$ij9`(kB#-q&XP%JpWTb;YvixCfV| zxaEsSxBHy*gc=-OKwD+=SVR0HR+ln!hlhZ+@UBq(BfaNr(yEox50AuVwLi}Pwa2Jn zFc4j1NS?mvwJAF}U>UMI(yKVP5%JN?cq2fZP`DhfSDP_w(^NDgjgkK$=VQS+W&m%Y zeIaf4(w~WLNrXA5O3EXoI$W)P`r%BPrFqR9G_MxTML!9fAIAzISY*jzn1qCHxZOgw zrXDTl=zy07oL*nU!N)caSEssXx_h!hQ@8U4PS^CM+Ue$CcP!`3KRp-fJ_WT$?3(mP zn*gYcnnS@E7Iy|PEmW^(8rP-I6^&}EWET+>_6le_jltXkMJ^L{Blf_=u*w5rOEw8wiV|Kv;#`sUy054`P28UKHpiBJGQKv zCw)j3ys7rMV7Dr|S1ZnyT-6nZ#_P3;Wb&TZ&z33b04XDPv?W9)xs(SRm>-HQ*$EL8 z+O@4@>KuoC)hwzAlYH|ZJ=~T8R)-??iG$$XgK*bWHL^Mg7z{aW&lWX&9~}w4Z;A%7 zgQmKfUiADF2?~}L13M4cBOU-ATbGZnlu;i6iZHAoB68@g@5}IbAvHIp7n7Lu4S#uZ z*VJPJikpy#{ZeJjonmII{s!I|wV|@@{;97XWn9kC@wB3Pd%F($yDTgl@+FTP@BJ_3gEpXdTARy&?rQ(LY)`f1>}}u zqQ2uLtB2PA{6j56wCWC$Tz8q=5_qXI{g2khdcBvtz`&oDG;j~GFAR||ZJrqOZ^+H+ zs48upsC??-z~UaRybu!4!Y0JIXmW+}#3KuYhTfT$uWrvbhwqGTY!G9rNco!7?UW`V4AClbevG9l1W>V+{aMQi+qEZ@&N^RZPwqdMhG|@Gapb4OWrtBGXxQo;SnHA$^9C6jX{Vio<&gf z)8VSjq1zWn*XO{omp?>uFKxuOS#;yoOwO#_Gy*h^IFp)-LxP04j@gxPBgxH*kQtqX$aBG@0|1zZoEIy@GH0Db6vs*7v0Eyl7i^>gUClq%cIjw z>AT|>g?io?=Xq4)y65=qpDvd49Pojw^!OulGEhAR=YLQ7h-L=HGCO(yHv0e3@)6!2H5@z^D_@)fHsFaXV6O_XE=?1 zzf^7h(wsf^krInw-&%>})J?d}-`k9=maT$(@AmdFmbw^F&Dk82Djw6O3110Rax)w{ z#cdE1hJ=7p8)~r*cx7eW>2t>cb0h*SwZZ{AGt=pJ-QtSs|08`pk4uURCFz|9FhTda zJVjrofcO%o@qPeA)8RPU?ZI>kUP zAp(3y?LzUAfxF_i7Hw6>{oeAkjy7|0S3o|{#vg*fLjwF}bJ54#)zY44z{cIYrS8;o zy&N7D(nxKmOZ(JDu3+gj(zxAUY2(h(uAQ_k6#XxdbF*GEZ8y0IR7jq2D;KBDZvrT^ zai&*jA8)6=QqK`#A9p_6iXVTbee4Aq2S{iJk=)R&+v5W&O`xhR)7m3#Tgj4~1*L&E z{>sq}0%I{bt7BF$!^aT(%jh3H*IttKP{h7jQ&=-{Jq_9=pxsr;EdTX9OKPy3`T$YT zybjze-LcX{ym{b67GAL&5H^vT>{@mVJTg!;_;}RV1o_&`k6$3nZM>ZPbmC%Yv(vI? zEpA$=dPUn-m=O9j;gO4{@7ATSVx)jwiaiXBhCATmtt_oWB^fa4oD!$P^u5>lfuLW; z4?aW{3PoehUAzWwMQxJcx}+X)v0N750kK2U%|<@fYo2OA`~zcfS;Bx-9k+*ZKmNN!Zi(`R^Jj0u>|5s7L{kv6`^9FPMuc^CFe(L*?3(nmbG$({wUhb3 zMI|Q#i%Mp{&5QQX8~MoUeo6;(4`gjD6QsqZkZ`Nzgb9|Y;X(sAHkLqWY#io!ZzHA% zG69AK?0PV_R}p@0_hY?63V1}oKqD&ZAYM>Py@359xVTe{WRMepDJK-_M6h5(IHr} ze{_y;8P?bZk8^8);44b&XR>M)008tvq8YGfIy3mV?!*!9QgYeXh84A_HQWJav zxh)E;RBEi3aUhBeLNhVo>LqJxh35=_M{wDIw9c+E-ag5xlQ0M&BS{KTyFdeKMC+de zTKw>}_irgI!hpHAEh-q#?HX6`!e72@-y57@&h%yxP{4=u|B-+Z1zF6e}EbMx3u;>ii1#p zN`o~Rwb(z|W=xju42{~S;jhi=@=PHl7I;gR_AO5$aC$Nfnwu3B{yDn@MyfT62^?Mv z7OfC9WoB#?BG;f;nge67_8_gv>CQoIDg+Elpix4%DV`!{7CX`v6e@sRJsbZH$O-~h z2>5aE@UU--M)dGO`_?gZ82^W-qiFi{7{3sRK7Dh$Q+ZuZ2b|@>*iN4gLp^U?ere)j z!qVLRFS~Ztr3L4T@|FM>bHgf?yD;V+A{58#?s(u9ntOPBkV^7U{Q<s}+>EZ%*f+Cc!59n23+Xrv_bJ_L5ar4^fy3^R7F z-~$Kl+gxz!fwzE5fVK7(Z`Tu#SQr%q)tn$^MKv&EXgGR4e&oXYo4j4PvfiGSiW0o% z0G$jU0nHoP!w}6Hw=uQ)q@?vD&57H?>qH5)!Z$*j`wud}dczugNIKeYS|9eg(c-L< zpxV;$!3Me|R+cgULnK6}u==3!HscYcKNJwnh$TPMX`hFEK_768U`rOT;g3zHPk{HW zFj=eoNB5uhw(IFi#XR~-{2PP@vg(t=ZEi5YCK%U^;_dCD`U55rV42{*S*?Hvrr@#Z z<(^qlZYgj*Vq}3JBEHz193#+k@__x(1`X-K0!{qN-5ra*3P-m1F(CC<*PuQUOW@yC zNd!-ri4_ljn@FRd-0pK$rjNAGSP0Q9F4oRxOJT@TGA(b)tID7YyW#@|@|9zpC%*(U zaej>yRvvt}?uQ~k8`U@Ax$jRGpKNr(S~h?RE~p=$ z)gJlwvHm?c%mA4A)LKrD=NxdTpF5ZX8xL5}&OT^Nge5IIhaD4Bk@Jf$xwyu4Ytcb^ zC^yp6ECEazjm#pzcHYLP>g#X&(nj){&`CKbBq-VwHqs>yQ4*Oc&yNmE^9&l>C(GQJKw+nqk%tn|HV>@aonED%# zC!)upHBox~!VO&0b%RVJvjoM@QKHOHZMCj=5JXzv#1W+S=^2gzTkWmvOM(V`aOQ~d z!^GIPl5r(yCR*w^g(9x#6c-MA=Oi^yHy)gS! zPipVI)j+{^t1v}2dEqowk|LQn#qB9Wl@w_u=Cy9qxU~_sC7X7bIRr8hS!bFO+>Ei$a;}-svO#mE@ttqRy zJSt!oRsL*({IF|>Pvq%D9Q-NZF^Mm8LwLZ5oK`QepVcgKXvBJlbwIUylxA&2PWFw$ zBL#o%9ZdOKi4#84KO7#%BWk24Nkv~#wsk6Q8LtZBvUxDga~A3uS`}F>e7JZww#YS7 zesAH<>_ck>sOr4^+g)3i(!@t) z&vl8;lX|HPu!2+gen)Q4N0)6j+R*El_D9yZAT%1M**cZBFH9-z8~<~ULpVZ!38x|* z*x|OaTeAX0pO@N#=Kgw!IAd}YRu%yz8{Y>{iGS*e^_xXM96`W z4ynrpUy4p7B=9>pF)=Px+^zs30&ZaIZ_MUr{P;2L$t^{fMUf??*f*%qXS{*1D(Fzi zn;;GP?<4!}f@ALDr@etPiYN&V_@J?ZOq!KvkfLz@)4bf3vYWgp#1iA4HKnq6XBmEI z6(&)UvIQp+7MI0K%?6D^`^-}JiJeF@i%5`oQ`RKbY(U8v4x2C&w`7HKsSn}xnY}b| z1XFf?^KhnnMHa0{fyy*dW`8gX14yB~%0H82Xt}3gGS=IzZWop)Ee<5p72lGi*eo~) zw*&$t&StND=sq z!6y?aIWgd$fM7=1@ZEcff5wxeBPlpmlda4?lXhe4{PWxD zN>g45m>U{KSIWK49|Na<-rN4mblAQ(&mbb8zy{fQ0S$AG(uoO!e{38K;=lOx8$+l{ z^6}$~j<9{AfNxvAiM#m8bM_8oHFIiskFp&2ylh-W&ZK#yc2&sQo*>l)gY1m_;rOAk z`y`a;x;4Y<=Ad)R?E=?q@zjK$XECHIr(&j8n-iRC@KT$HEUMIC5>NL6CNz)}?A?{= z(F6g42ku+}=R9e;R7Dx8xN4?V5>Zksu^q++hIq}HG|%=t!ZsTpq(G};T)+{$+f-_D z#A?jlRJ%Lm`3J;hzu`cfNDKx&U$3fK_G&IR+6mJ{}nc9yR_)W*UDA$gB_CsI=$)O*+W;?MiOhRMkURmq`s<`ld+miMipwP5F^4vo)Qyi7 zz(?^QR|e=k>*Ze^RN-60^F<$l1uDX=`ZemWlX`T7-*gcHH!sq<)^Ka>#G5^T6YTRq zL2@-R3l0xB>fTN|>e^%d8x0BW7IN|f=lSULr|Gm4Dd2gS{HO3~8e78!N)X8%%DN(o z(tico`kaNnL6Ino3pzPN{il{kr_8D%vN* z+DE^1j~?UNq=!YJv7Yah;(71*0J#8&NVfU@uDON}Hc-VQ4dTy^zT)rcCN&-%Za1C# zKRp+00jZnr(T97o>W9ChaBo8>`Ho4#RIDl)W(LN9ngb0%Ne-oCY)%1UO%E8zB)|QI zF1#ZrUM##n#P$g;E(7NK>k~lfft`1BmNoeNGX(%@kS|fHBhge}n=&)dsRMy}YZXJ6OjXrhp8t5bt z`4G*W_&7NdUHb4uwSJodm{5wAPO2V-qR$j!QREqx_oqBTAi*1?Rq3#g!K(&g1TZIM zgdLj@F+sRW7B)&iRpQfwsHdxfZyE?JqN0MBM|_lw7z~w`Nw$AM6>K2wj3SV20+VjG z8%=pvaaBi05$Fka?NQ-7K-Pd_*_hL63@dT~ltVNG>jyZ$)JLjQ9V$cF40de6)A)-; zIS@gqSPQ#Y+R+64jF}$Hy;Pg_Ni~i(qV3m?vh0>7Yd9|dMjw?<$s8u~0K@8CRWj{; z$bea{`93yhal;c|kd6Z`0xOtM>t1d*{o23DYF_*Net$b}oK=z=L(C>N_542zSpdFp z(`TbBanceR7nv+79(3QHgK=Mlr0yq+|M`y;bp;9_`0(@F`W*07f3}ZTsHR@f2cWBf z87nyOfFWESKGpVa#So#7Xj+OJ=gC{sa?pf2W?e`c)E2@T3X!!8qx+s?(`bWqH9ip) z@SL!T6#mQ&Z9NPwcm>y}sCyATK$47ls~O$Ux;?0)uuNx+cm>F?Mkx1QB0jG)J}l39 zt+}O@ojX)6=@*d5`UGX#!)ErVx;~jwi=>>f!G|_rMDaOQx6{gr8;J;awb8?C%&VPD zkAW6l9mk&n+WYxrtbzk-&5^QH%r4L0DTLyE!(wZr%=#;|rsuMy`uYBuM?c1sR)bJd zj^Nv(hd0FFy2MM667&zX*RUD2lol?Oefcw}`>EZ_0Y$op%W=t%8X4MSqgfl_%;kT%2%ZR##_&BjRGqEC7OIG+I5cfoH$jKDp#l^bdO{9 zu!!Dj6I+iFPrbdncN*Kfk1MH0dJ+-a_9~+*8#aj{;7DHEjGk-woDAtV_{rV`Ie2LH zTnuZ1OoTO^t~{wlMoAb z)4JzP53dRD9bX1x2FFzVHDRPM?Q!rH$y2<+ND@r=wU#qQ5p?`_e)43w2u%UzL71C1 zS-zj4HiWblN+_7nwru!;C|1((`c1Ckf3z?DZCKq()6B&J)>H8msWeZ&5rsCC4f~m2 z2e)xMOuYs3O-QAkVrB;1;G%U18u05&@f`zKDko&2#Mw$ExJ(6iMAa>(`bXZa#16q?oA#)Bc$;SgIjiy(nm7#Ca_{ zKS5Cxwyo1UYEgqYlqe~3G9Td<$vPWj zVQfR!F6z*~Euu)1^i1t$>R-BDd^}xeNGNgl|0A#WhRuh>e?wc^Yy>@*B2)2?QV`qr zgqnGgVAuUcmchP~8Ys9nkl=4)_pBW`YC{{^Rk`AKmRwV?U1up9S5+!=c!4dzQ?b6E ztbTD}%G!}4MUW~vQcy-2)g_jXrp#acFJHv_`1@~$#^mDKn6OAv)`Or;Id`>CUOx8> z=O50Va^p$Hpu&S8`;yuRuRC-vP|I4WrCmzUSH2&+Uz^z!{M~OW=9keLf44Ut=*X%1 zxUs>gBj8;Cl}Wtfuau$7cX(LkMvV2B=JmSiOjVUU2{-49-a5@fGm$q=kJSi`C@J|v zmr{%{Pc{uhWLwZP0?4TGeZ*4!psg%ARZl3ut|;ia>*X!my-#z7Dc1&R4u8;ucHvRs zih#%h%JnZi`@x3z^sM>!>m6vkx6|RC?vsuN_SA7ghq!HPGRpibbX1&dX`Qyy&so0pe zcZx$$Ji9v)o!cr(xV$2N`F~3$2Vb(uOc(EPHsSbyTQ`U#MyG;}3-SapL&4lFhSSZ& z6ZB+(RF0B6kv@ui>Dc$r>=aM=_osfmD4Qf{QPp{Gc?A&R)zZQC``mL1+CLH9=~9pu zzJL@CR!w%+ucNtdsP1`mSu(88cz1fY3QDsZO7_&*Y8o2T8y83(Rk|Ytr5K^Ib+<)l z`jb&lPsS3a$@r3KFC!l^bzRPx%BcGM>{fDGxy;DUukg zx3`5%9y<7Vy^zSrKUPuHblqRt$thOhCl~CFyBJ81NT=!16e><$P%qqnP5&Sw3*ct8 zt7o!s>h!T!$!GErN%rewNvW_jiI7bBEP7@&jWFMYY+q%5US ziW(@fMyI>|^tB9;C3{0Dx-9v3^$b>9DDo@w`0P-j!4Q!?F>HzqF`{94ur2y)s3ug2 z{~KUzYOxw_GJQR*0A|Fp1P3Q@Kbt(n(R6=3b5P9J4(ZSfQx#EufBhkE@!>I7om%v%72*A9E@hwRxt;gJCf&X#OBq0`^xU@>cUFNP3P!OINb?dMIi{H66G`k+H7pkFfty77#}g~cK= zD&{w*C>F9I1n<4sm&1mI*Ts%jc42mW)&Mt#7e0nU^YH4bLe7IAGrK)o`v;HS77t_K z;rN5C@xe3C=E2(NNz1U*Q^}63<4$hSyIvymC|2JK{iyMg$SO+P+Oq@g`TcE*2791b zI_GCK+{^`%x%mv&>$y|ss@1d8yQQ1mCt^!mf!}9*-za-~H%6Z!DO)sQ#c8B_^MCz8 zcYBHmQELjEkr%UX;WHX+dhAs|WO$3GTN-?PCOv)E;a_lji&uNetw^Ky2G`>PA&sYa zwXyE=QnTNn&+&zQHMdf=7sdK4w<18@5;>Zjq^F7QvJ{d`G8$`UkNQj6tz$YGP z&Jb~OP8V34ytv*xve!9igFgE}~OEkRYXihA*LW&C2)U^Y^Xr zWV-ufY)GTK|5)fIo9n{aQ*q6NC|3w@<-fmX>|i$_@L2TvV(rruKT>rV=Q56!vQhym zKPo=^*E4&QO!0xfiod_-)zJ=eJkv_2>Q3%>hLN_Sqdt?!_oUe2k<0fR{+LiDEN!e! zP}6mb_PTiIvrYX1A*nS=+<+!STq3yc9r#cz=plst|XW zFnuqoB6*|}g94yZNff8!@?8pMIjaV{F}v^OJHgMm#E~kz7Sez}t`smpp(Usu)+qDm z)Q`ppm|9{{@KzMrI`RxcWQD4+cv!7IMbui-%}TH5p%qTulIawm1yGyBbKaX$X4rB2 zE!#mlvF<(sU>T@(=hw2Zs~#H~pLnaLg&=fpQah`)Rn9fEZ^p;{ ze3Xdcct_0e8EQBc?H`#>u0(!0Y)^yIP{LTDD9^4@d`7-C+1J(5>YSiGPkw;E{x}*& z>YJZ>`XO@4{4;dz0P>4{n*1k@?*Od$k-hL{g5G1>3ktY2fi@F$yq`upTkZElXm)%5 zfSjB!BY|!8Lx0xWx$Jar5tZd;KXUJf8(i1TjCDts8)i}Vz^803Gk7?C1ihyyt!z)T zE>9=`P&gCQF1HTW{B7Axx>J3-;{xgQhkWTuLbIB8b1SN%&TAF-oQx|cla~va zavMsXnmWA96y{mlJ%1G{OVySh<+g?@+P95osDu*nEBl<#HTY)+Qm0ND%4T<>}Y>y27brmcaryoe?jI(6P?B6Sd4rQ*zb^+cbf!6!! z^cN~g!z$)09JS*=gjpvuaVl2xwZSi#FR{@?ZfU?RE|Sw-76j>z|8;vwP!vZtpzXDv zCm(L?nYy5(W9B##9SLdnUMO5nhbw=+j%ohOJCd&}Gcy+c-B9k?QG>P|;rR|Z_z(0e zaBlb=dM{R;ogTy2K2tCu=29kN1NDz$kU@lWJl5Qb#~J^AC6DR|Xzmqdm}ynd>Z&fa zJZ!7pNud6d<0xT}Qyo_HtWYv;ap$&`n;H$6G5$JX(ui_pi~~RZkPmc^n?P-Cyx+@9t7G>vfLfW_CxaWyso#J`mE)Pmi~zk^bB`GF^oJ?BRK7 zK30%(do_s0;eN^*IC>^B0s}WYFvz|v%cxVF!+tPnzdHc}-SDVO99|mYXl96dV`ih8y6aSW3L9=sZjAbcZhpJl$*bqyEg;teD=t+XF zl{~3CemjcBI}BYu*r+Xqk7jkwOM@Lp44}ZPcftTrCh)hjp=HniMk>4l(8$Zbt$xJK z%kHW?0jqFfer z21>op9=&|oZ&pR%ZFgjKP_NHcrf}zT=w3S8PbjT+(yU~os4^O$S-kPpl6k3{=8&59 zgKo5!Y*-!W;7HH$dl|jsfUWQ~dhgTLpPGay^83Kf{clF&ghaQO8nyefZPBT%U6Lem zawKF=!Ih4>X5X7IAmVDTOgd;+ReCR}#O2zs^+e1wkXsrlX?YarN;WD~@@Bk3N5^3_ zaCiLley+;N#FYY;P6aJd4==ubr(E8&pRNrg9}Ay_u^NU*QBhJO_J(ZZ87Mvrm5yi2 z6A741FFnGxlA$-I>VhVH22{Mmt}Nv)*mn|kct3s(XwlN{|Izit`Ol_CQ6Inela;;@!_H~y^rq-|By@XmhNW}2^Kh4HGrgD39K!y=}!0Fe#s z>pMH>2$gC@OD0<|dxSTMj_n&Hv0X3V+5v^ZwD;}a0KHUNX~Oc)XMp*yb?oi5Yuou& z1;J1Mel@D@@={}?)j%2ZT#v<<%FuvVFm(Th3k@S)Tv9VhR*qW?v}6oiY#GhN7=!e? zsm2QnqdV?~du9OQ0gU!d7=NjNC$3grvP_V~{!FN-**jb~LrD+MfhtbX1g4a_ExCEW zxf-IP%J*8qnU_&h3L8VbtIUu@Rz8A+XANr`Ud@G%T3eGFSUF=i{(1~;c|)Bho=wYgy z*HaJAB&Ey?N5?%Sm`Oduo*(9!ohyS%+zm))Oo?asUnv~PZaJZ4n|d0JD<&X6eJ7Tn zr+vQl&VGfF)k7iR$*K;YkNM{xp#C-QpajWNuPMjekB9wk(VTaiSf}GCPdHQK82rgaR)2K)NE`joqCn zeXv!3P01MxC|I}P(u|Uf%nq@7-{qK6mH%$40w90clcp?R$^!=a$N^bX{Nl1Lr-&rz z{hblaS3=6uuUCcoNA(KFHwz|F5km2q!ItC{OmaKU&^UlFzg=>Oq7wJ}J=XgvSfxup zI6V6EIQlekB2={&~B zFx4i`&c3j0hN{DM5(vPNM6DKc=UFb{19F)o&o8k<1D}ND@B{aKgEntc(VwX}-4Y(} z?5bz=mAJ{3+sUaOdMpX62IVhVV zOS~4bHulg$kt zp!Q$R{|%5zQc%^nQe84^rs9tBtLx!Gtj4tMZCjLol)CjRy1F|t@U zM7@;&xs*_8>S_&7%dH;&F#AUam;Z>jHb@6(5#0xEigwT3ENH`K$(w{NwP+72b8ED; z;GX%4>i#j*4H>4enV$iS{9UI>CNe8+iuO4*U>8lnaJ$lGB|NM2%ad^e-as zbm-YUM0SUt%8j)`M^nOBINw-AD6X96a{-axZq$*knkip@?XD)pF{`3G^6E?|;+-*P zlGoc@@*tAlHAmpFq;Hb*nF*HrJ# zGKO9v|E}_ATXZ5ZnJIb>YCJv8yvOUJ#g=QGhacOm1~Vspjek^#b>}aJ`(C-6Fn$fi z-h0pjec|zhQ^)DzQ2UZ;5>n5-_poFT!eO^A$x~sX;|J!4=Zxz3Hr-MzUjU+D_HcUY z(jn?+yTY8l9x0JVN=KKX^Kix)6?53qf>JHeK)Xa6)d`bo@9`W zBEKK;l+{H0I}1}Pnq3l>O(zS0F#rQh7m0x{;H~KY2TK5O*-@&5JcE3hokg~WA&?8HK%Xq#~Kxn%P?3lq=qXzfETG_foN9=`T1bhOG z1P&K0D}FnA^}!uaUb~a|6MKg%>lrx(yS32Qkx@}CDLl##cSJBLoaJrGgM`Q`!mpXi zC}0U-G!f%b$p>vlY3;k7k%H;v`03hBvlQCcuZb>YDw zrUZfjGwsIE^lgy>`f1;i*@b9M+j;+lvI7y0%549OL_ULnNN3*b9-yLwwf7w6gOXqJ z0b?ieVjF2vz~MQ)2b;gmlu$6x8(_nqVK|Ntt|!tixoTci$yIu?e0aFppHFNUke6Jl z_lv=0Q1@cHB5406CO z@C6|KvgwXHRwEuWRUmC99P$C?*BKzP=(_x;H~{Ht@uQTJhCnKqgwR;~Dvpr}mGFw% zO|@3Je-gKdwLM1O^#?$TqBF9!V*IAD{yb?#5+WPb0YJhYs1tzVET{u1T~8z z=vH1wN71BIFj?*_01qWC{yVK;G*E2VAM&S&%ajxA=cFz!hiR5dV{YO1Mz?*W29o=K z_7juRvAqsU^TmQrc`|Jpqo)dlWg=UVg8u#B_wGkD(g|v1x?j%#i>PrJsmTf>(9OrK ztuY-CCiNB`@PJ)}4P0-QnKhR1lw;E3X@>BpCbqw&Vgv5=0X!!VdL>GulvzgH&OMino(kX^UofENk`HZe0X_sosD~ zFPZ86th&%jo!(Gr4^9jL2nG)zSX1Ocy(-Jyyn=fXnvyii&!`}hIGEl|i8zU|KkJcvh?<0xKPKe^-zr!Ci9WMRBiBAc&3iXX5^}k|TU?t={;g|7W6__~5ga8BGyr6Nj2p ziQ&}V>(YZGC$zX2AD0e$hHPVuIBrp-uicU2`6kEr1U(5hJpMv1X$z0eA?@i8v82eB z6hQ9-^c8Fz0$|bHe|rpI5e#0i5)jsyAU!SdKoZjO0?6#?r>{cAZdM!NbqY>SuT@Rt zGRw=On;#D2LsHePy~i%Bfa|52)|A*9U9vH*pjx5d$!k1BnBe&@sB`Uy<@B6`uQ{ir z+W&eKDCM@ZyL$&K$JE1i+iP1R&z`Yv1}#Ogo@jy>0my9Bs@9DcVzrQZ?#OHH#AoB+ zG_v<+ZMSrE?azuW@3sRmw5C0*VEl?Bemtx`|4d^^fdEbRy(tz<^CM^jL^ps_Jd4d2 z9ShrEkioB|6!*M~h6j=EA^SfxO;|}OAwd%lpq+4aBjRyt4+_g2QVrtG8B5YQVxSBq z1?Oi+`!r$mNwU5v=1lhmH~SgdQ~QRKVpk_~^-OC+dpM6j z@8s3(sVU!7syQ_{&f7uaw}ZMv-zSq$3BMkioM3^xIo+dmhp=DDK2 z$g8BGRk}6l-_c)i%|xZqpY*BzfPdP_r_9Z>HR20+KH(OQ55GYQ8GIn=(bONFa(tJ}7#Z`teI_ygZ`(hVtQT7uNU ze7cb-|AK;4kjMa=a$Z2|oVXF{1lq&4cSuvUF6IM}`ag(2Z6CZwNE~_oBLkIng#<(V zz2vj+d8YRwZALh$*R6o&3{lZv&XP|Tbv8XMu6!vmh_0FX3eLVY6PFPWcWvxlc!I~D zfMj`q#p@j96@lbS$H|oI-mV0+6F{MJEzhIApR&5-`-i_7dnS7-FimGPd&Wo_9w+1#}Yf-(_mmbKRKFVK4A>(kbX zME7ouf0h&FElYTJd&O`QQp=i?PMG>aGg4ykW=MAJpv`_WvP>aLl0B-0|6(VWtv*v$ z?L&F({fQMxnbVP;O3C6t46T7e&oHK`Yb`+2E{&ME|Rwm8}NEaC?C zDFjRB3KJNLf+`Pu8M*gb*>rmU%L1Uyz9+}`6u^Ic|L0cM{yXXQ&EDuPs;!MLw`J3! z|F>#vy=rWjM+~#4`h04_wR19%S@i(g44!lxR6gh4W30GIs4Si|B~+JEpicn*v};agJjM87ZAR&O=K7sEG~fN z0=ZKmVm$v-y?Wu=IiSroSi>#Eng# zRQ3A%d^!I@qG$qAFn#S1i3uF}tP`PH>b_f7t#hJ-JgAP@`G=pLEj`wilREOxf|R{s z+)O77q%HoZ_v5Oy#som9LH^S+L0xbRz=vx@-nBU^rc(En$YW?uHt+UndRdfz|v33|>lKC`km* z-PiIhop2SakGyHC=Xs{a^N*x^57%~0&d26RmhO>&7{rEA-eywD2tHp9vNK8fd(u7* z@-TVWd`Hj=OUs7G=V11{x`x9WRub=bR=!Coguyon#N7-ad$tEv*2BFda(}g%aE!@W zd~<4-f3`esb<&DJzkT44J<(?dGv)L%qO!f76dMoI31e2|W}kDLaW^Cq0p8(eKsj?} zr3)IjA=bXl*xbU0e?l$HRyQjFhU+hUU~E`wWLq^b!)TRm5Cu(}_aYXcL4lr<+)w=8 zEx8#`0Bm=Us`t#-w|~)qRGz$1>!4{X&`%mj#eil>T&>2fUYrBoiiS(<526;b@=tcg znSewq4^}KsqyQW&&1b&g2D5^|*pjh|v)tdiN#ZwubbP#EJGj{Rd!QwEusFd^IO|)V z55u6Vw)rraCyL4o55o>DKe&x<2-+lR)nuhx^?`8x$>J^sWb&p@r;?{1#!^A0q&904 zUbS8K2JR_Phg|N30k={FgzEBP%|=?KQGUpqpf|y#)5{Z@iTF}~tf-{)=7!+Q*GEt!ly>>@9V|m_Mt$N;~I6o=^9O$XkVT}jNu#ksQq8uHZPoOka7wj_`b)U9uUJjqxeDts~f4v`5q+zWCN+L5fujzEsf0XoM){w zNA)Tp;G}62mXt*T8g^L-fcVGUK*B=|Dn-)`5cft)%9l!QQ;Zs290MKe(ULcj%PYHYG#hT(+ZK7_3;M(?T05Wep8@zK0eM~&ivaSG0Y#^8Ek65) zy)gknS=_aXmn``P#60b)KLe#mX;`&`*o0BgU~a>!d4uQk80H+E=iKUWOStw1n)swA zi5;7=Z#$xZF5$EM)A33dOeJxUH1?4r%}^r}z4KFKoUJ`@diiuuEj%uYU7buL6R(hoYdYJC1& zl*I!(51h$Bd-zJ1qrQov1x?<0_W04m;KXW{fNth?D%q5`+~9lC-s%v+qfGrU$FEu zVNU&mYRAO$#Ft^xFdqTruf=8Zj$FuCwJ*()mbZx)Am3dM}<&4KVVl#{&h>s4;azJ^|lk^=C_|+6xjbwsFn!;Ghc` z8ub&5yLdsd^W`!M90n>6;72`am6i}N0-i4G&gB$L=u9nH=q}fwiV!@&@JqG3^IGiY zGaagYhD$zkdLIg=AJ<_f+t!_{g@dd5Ny^Ac*Ag`acLdy{m5y$n%H4y!YlAi=8AQhU zXNgQrZm!%41q>;Fj7r(TZ~1yz*v7A)WX}av(`KeDSTfw&dyPgI+Y*8h-J>MWirdxTsO^^@Hxb=6fWd;f$&Z3hF*GJhOMW(I(i2U&mdke}-_Agv86s`$nD& zwh$>{kOqX2%z!byIY1v9W-EQOWw}r|Gxg5=#DbOen8v9(8Yrv3_)61~v~+Z7L91YsQY8Hz}C5l%UT3H86rrmzeE->y^z9*Mvz{p#;eASGx3AYn3FMIl?Bv#b=Nf8ecV6Bnr z62N~l{fX|y>E_=ib(xgdL5HtzGkDT^XWbq1mrAx5!LlhvK?tboqw+yo$sFy+^9ur4WK-v+1)F=4defk5{M2|0;w+Pg)* zLa`cNq82W(`QyKuN=QSkhP@rQ>9naetJF45e7_bSV0jiLPhA0g$U8(AJ8<4xMAT@b zw+3960AkFIYizLms>a3#P_a5T%JyXlE?BiB~N`jPw`ip-%-9Y-faZAVKshwp{q_M<_+T+-wN(mf=^*NN9~HiQ7AUH6Y?FmPa)@dEIpR6&-HK;rr4CIW z#19s?(||um(-)Wz^x4-9)sgsnjS4h|RK_D732qYn%T+Vi`TP)0;`Ks6aUaHbBbdtu3&l zJHk_XkI#-sdEHV9f1~MpjlXyn4J3J3j0v11kXC6LYNGVi1^#g)`y~Ubv9^?R-@9Cc z%Wo&yCg@z|tp0HV-Njrad4?Br>smM5Ku(Sgb5s&D-eB2CbNT|keqMO9ASPRPz>#>* z>ILE*;-P(d3w0LeGoO3*X`zotk8ieymfMH9&IV*i48j6+7tb3omF6#88_gHLyllZU z3E@6m`gbEr{wvUq--EIY3)QfES>!fsitR;7I}`xp9RVV7QQb>7IhL?pGII_w*kOzeWE4_v zUc_ulKo4nwVFJFMNl?gy5?)Puv;auv^e=)MPXjv=0nF#zIT_MTi{`q<6u44LR}T}T#aAmmPK$;aJuki=H5@cH3x>OSLKe#& zwJX+7tRMosV;z$l3M5w{k6)oxKJ1)xl9B=Blw#V+F!KsN5z7f7qYnBF$TFhFAxgZ` z&7VNbZ0^C4?|bHG3gGF0%S%h}(gNHD4sIwlflRrRdl<-_m|s3SE%rbH#UFlG)Eg}y zIehL%c2mk^Ib?}xmGiUDRIrK_0OcX0Q6GS*(M-E4-X+s2o?;DVbb}yX30%_qe`TeF z|H(>LEw^=UvvqEi6B@wd{wQT_$iErM2K0Fu!%bWl4>aL>UEnXmcKB=zvKix&#EJ=X zIe^*6T)vT-)~~*>m57pHXWI{W^r9uV{jFchv^|s9cfR2IyZ@y(p&+dVb`)q-9zUBW z)vWnTTb~3@#p#NeZ0(*!?e;gXn)9(A{P)M{&Q3F~57#XdxZXyt$Sq5Y>Q7pX;u%%A z1OL@ZDzLwQf?ApNB0P4~{3(?fo^+fO2{EoPQI9e6&2Ap<#3 zpt5eFv*l#a191o_3apoPCb%9CjWO;QFTgsKUCC!g1AXO7MKP5yli-7Vph=3@Km_8x z`+?x3pbetb8umNTg%JkWa{*ZeWFNhNSZm<7#IWA(!VyYBw_rqW4#mfh@BAviRiEDP zrQ6OiW782y*~CtYFKRSBsZ<{XL#4zU1{*3Y*id!-3(u3!m^>=&&_Jc_dYL!{+=v>r z?2A@*f=s z*@_MdgK|UQQ#>Y7b{QAb{;DumCPk50(Bn~B)9Ent38JHHf*o$q;E>p^2`@{Ba(A^e#B99*c zN@O6(#bbGc0~CWU?MH^dHSAK5i>tVw3=Fxsi3W#_a_#>_lX261H@jjon#c~mKFxeC z+qflgo_Sh#Vej+^%VPjMM|Y{dGHjdzgQlp{IJZ=_WntV&B1uSh0VC?^wRrYRV(m7%74C-QiLS7 z<4rw~fP*yu#*D2bJ}mF+ztejpZ7L41*g7zsmv`(yG6gYEt`qQ%laPvcNojH*|6&7Qg+gXjPLT*(9K*n+5yTd1|FX9(N%+?Nn zV5boad8Q&FxNv|WKZgDT4L%^9X?eP5(@!KB&<-cghaL4x@y=+DEgTRaQKdqJB7-!+ zreLjKYKc%wU4HRfhq0TGhI7(?jD&9m7)G*pgLj4QhUoMpUpoG{#Y=v_V&`%>#Y=J7 z6cv1QXRH>y=hF7rrOG9z-7E-obJ=U>c=qi2Y(#{Mo=5^VdQdM=&l14v1GuCw+oQxA zw3;HP!ufFXLS5$S-KzIegv;jV{EeOu@#Eq73rcRAZtYyl@SUtQ1FDH}$9?tmi99wGTdAKj>~o@v zYbRPen{VNX!{fmx%BOXR-thgqArG`%?$93^0eyW0$9&lRTnt8l>wrYUaA9{7H>1RB z-mfw=52v4DXMuniWwSqnHE&Cq=S;hgocT;4oj^isr!2CsDA%oQ0&8^i6RI{daGgQi zG=bp@#l|o-g9}Yw&i<3pKvH=Ni&%tT)5n6b8iH*znm&LYfRaQ8mSnE=&j_o7k%jUQ zCJlHnkcr@UED*iG@md%xLR+Hc<_%;~eF)3knjeZ}*3LBTlp(x6R-i~@Nl$ssr57Nl z$gAIs9?$nr3%y(0;uxZBh@ zHGC1yji4q|-xU(X$Y&*hxItC3J6G$yxk9TIU4;M!XFCSPEe2`%r zX}ltqeo2&rv!kzy)#!_^ z`_MSQsBv!BXK3uFWZr(maZ;j4znO=!Odns^DhuV;mZKHvJX^smCbPaaXJ3Sxy#4fY z^lFBu7DLDiZxm-y_TjLEyX=8ul9}L#)tIyX7Go!)z1JAJ+jG7mK7&J$J+mOOzHayb z$y*z~Qr-0RvfgOgY(C+-Mcu=F)wZfQsq^|yh^rrQE^97JEIu;H)eC$IWzsKIfu2LF zG)ndnjU6?CAyamn35(&=_CtGjcmA8}wfNF<)}vkm*t}e?<;)*Q?8=mzSrvAXyC#e& zVvQ=cB_KMk&mbjh6MRh%OEZXR(Q#GR-Zg(1?pqhW=Nh>4IWx&Wn zaH!%M{}d+!QN*rv={BY5Jrta4D8q-V9KtN}q&SQe2}rRO;C+<*;}NO$WsWXIGvHB6 zL+kmEyGg}TPx#L>X4Aa9Yw7%g0@_0P?`BI5UgMc_=O1r76AA&^eV(;dNuw;3P0bzoY-hBW6k?b`pKHIYU#mfFmAIxYMqxUr~<^NLwv&@ zKYwoD9Q>vE?op5v@+WEf<(XF5LgtZSE79;-r=QlgJ$}>U1LXdGpm_x5OLve^Z&(T` zx!5vKex*)h|IAAL{DFLC#3OFcn*m>jccD#t&{HZ@#x1v$)RG zn?l-S!>D|}u;A63{$k3^yfzQiND+hBV24tgyh{vGo8tk`?mfx;wD}3<$gNlwa!9NE zTAsZ<=>rDDj_3yhr&8(NH#+%4F{2~V_owU_n~d#jj=nQi&}j`0EEDBYE28IaO_^m3 z2og@7PyL1{Os~yTd{$wHE73gpWa!^~Am7Ab*Jm>7cC@~qQ=Ps%*5uFjM;CIUO|t=q zntyVq>QF?J+=M}`7COW7OUNt_mB34|?e(g1UgCF^sI@C7=nP&;Y_UB&aBSbMI7@iy zS`@AJGwYb#o_~{)6KMI#b9H<%M~}zGuDxUGSzqU8ys7<2!*^+%F~M7=*Us0`-9NbI^9L~Mc-M66OJ9d(66X&8qT~@#dv2=C1T~i$e=RdP{k2hzs43;a)&@Pc;Oq; zlyF@uQ|5G`$eV-)(bj-aqKZ-fqUV=_&cypg?LW>b&Cug&y=VW>zO_t<<})cIUG)ju zSZrxl@}zYT>p(-ntV=;nO?{Qi6eIh{ogh8O#@Hd{gU;9|#rLggCA8DkVYhA3KeZZO z67ojtaW(sDOuxS&qVV13YQXGTO??;FR|qvMgnYLM*9vi4M_b*R|L(Noe>;=#cA0b+i50Ku`c2`4ytKp~3!R2r*ZkQNA%O}n@E-?i?gTq2xj*cvWg&3$ z@|GI)OK92+vI^dr3t%!err%lB`yyC2qtMgKVHv0_#Z4qCfHk0N8R zvhDwK6@--zFUe!`FVT5!fJB_aMP-2FFQ_Rtxmhih;>l%GakPB~pMHS)8MaOGt33m9 zV>u$DaWHsXNUQKwVM&QC+;aGLW|Gr7f$y|PRAjbjs(}CC&ntc*N^kMz) z-sp4D?2FKM!H8tS_m8}DNi;kSvG+eJ{kBTH7l(mOlnZ_*{oLk~T!=1aD#nf#+ec|Ni*z8*YRSG`>5> zr^-zGXT#8kpn$-s<$aRDp?FK(Gx%}5ihY5U25^dN!r)WYWk}}iCm_@i|$9DZ< zC%v&RaBp6hR#vX8h3k;f^n~Z9dqhtRd$twBQ#ZJoH`aq`ouLf`S${*PmmGL&(`5h7Ua%^45YMW*f2)XaMnN7_gN!Q^ypq+r+FGBYyqFgj9xW9)7Y?S zX0YHDW2yr07j%@o1JmoVN@^6LmI&COb_-ad`{3CPBm7+_q+Bc5nz=X) zO?eqa?QxiTjhgh=N=EzYCsv+dRpQ?*oKtAuuaJfV)C%nxb0dT91aK?LR^{CFNnk%- z+4|?FN=%=4>Sr4+Z0YJ!|3CTLPS8-O=_+378X5S@NM?;Gx~60{{zy-24ojNP z4$(NlBUXe|k8t9jujhHl-vXHmzdj(nJ|=*6DzjXXo=7f0yLV(%8q$jR6*){fK3xjZ zYO@<$@y`Aac)7rAf1$b-wWmtP8E4^bJnyh2!r^FTM4R=tO>@_eRgkVqoH&Oi|Ca^G zU+;00?P6+J6=yMAiN2;(XzlutZ{Ok3YdWIrdX8}Fhp^+Fj;LeU{5XCN@`k1m)|J70Gy%$$zv!RhO_xm-+0;PO=+h3UZ*h}HW@ z+v@b6L-Oq$+@t%$z2B^UulRQ}Wj2;2Nxk+6WqPZ=Bk375IwEDciysELVMr~K6P4AL zoFAYp50VbhF)b*`0gqGXy|%!7lgJ*srN@d_RyLJ^9MH<){x);1_&pA;&k!?4Y*FJ_ z*$?icI$l1SVaZ(GCElPh&e2?}Zbo-BcqXk6%K z_ejO9i2ILI0)KIgShja3)YKBX@p2!9kdbAga0CO3qUrAz)x{<3h*)r#RKPkVB_=Lz zczm$a^n_B*JI>LC5eu|3UNv_`mw2=?PHFa3;wZGV7hUn^vEtULH6Oq|Iy(sn?aL#) zFK}3WxQn;$CYsW-U~K>MukjeHD~bpyLT=FnrPgA@MzcZ2c;;c-9fhb!R=trJ^vzsy z=#eZH(xuf~$ROsQPdJ#Yw-^|kOO$i%K^{k27O~&X!W5IE)hfBNX~xlh>Ue#1KQjdqehMb+dTr6~De8+xG9z*RRv)Oe*PrHgN}M zK?!=~pedVu!hbx_MHRF}kAL0(Xh}n)@RD@EkLhhvWOXwP9VC8BU+c~<=>QWF7|(DN zzf~qKujLyWjeNJ*5M5PgE6(6DQAq7cJ`QAFUss3G-D4$r5=qeiEA@sL?O6u)hy zed%P7OGB;kR%~osq5S^D$>lilbt0Pscl_WlIZI|q9x_S`I^?hZ;hd^v?u+Ntux)MzKCO!=i0NJ2 zF)05SxWQn-RLL`e!z5X%+q?T24AAaF;j0l9lv_^zY(LiJAOu9oL?(LsH-D8r%eF3B z_1u`DhUS`BTc1%{UlR&c2sO`mlT{<@*AOCf~)mM9=d~dpC$`sI!8YY{;}~%WOYQ#R?GZu%}^sL4U2FH-VaJG@ZXimbF-Qs0=>{L-@$t^)c4;?j3aJeR#az)fPpC`H5fObauM-=59i)Hpov zHe(oUHQX0A+VWz0`y#%D8;nK}7*5_tn!-X0SOY52AE{P!T}J>LT*=m%-tQ87p4>me zc?RjJpR7dD*+)PSC;p#St|4J^ADz!)KUz^E@hWmc1YD+)R{I0hunn57?C@1cVv4`_ ziaviep8b1=Ok6f{h$8Qz%Nm|Qh}7%C4S#B8le_G*+U2zH0auCe<;b&Ao00OpPM}j4 z=&m1FB{*a<*2yf=DtEmz>cf?m?z=f|FZojMi0S{z==kO~)xF7s8cr~c355Vl&fE~r zCh|jv=r!i{-uG;u+t)e;*8R1*_DTHNupIM<86tKWx@Q%e?T3TGQZWZt?Pq70O=()qa6ckWOH=LCw%9O7cqp3 z;s69mk9&5QZg-H|z65no=6&A}$ZpffJOEs~bS(y3%r z1k`xn?W_50rG)E|sTh+S+v{kFY3C);r%HLz_B%*~0zNTePTJc~4HEzCYE%h%AZn1L zwO_wU&vraf;#CPhA$s>+>UD`p_qb}=Mk`)OVyNFhw?F7wXuc&xaO1m&%#ZN$EU*9UQqOH0ZG8pF{~kB#cUWlC95E4S994}Jgn^20oN zRBYHuH5>l*6_3c(}Ea}se8>d=ka zznf`{wld|g@{s-OPLmYy$*JXMPyL5FD7l}+M?B+ERu2%$C~AsY6-lP$EsYGqtbc+G zYxmBr+1IFP3>r-IJ^!cII~KtJf-Ds#sPecT{RP*kDFLyesW2r@`2I!7^{6bwoegj$ zN@#HY7tbl&Hfl|=`;=Vc#;6OEu(S_gJ%o`EH~TWa9@bm+(a}3vEwV2pUL(ZqkCEU! zU1L)%yJHSw% zZPnH1xE=DYUqj?#rGNPQ)02`u>F5+gBOwuUcc<_{pw3X~H+cWA#uCyx4W{%O=4=k= zVK6r;?9h19NB8!mO5X}uY=;2!4Q_<)?D9%gaGw`M zT*d*h(~N*tuspO6)2*~rX@!U{C`N2}h0B?h^U_v4UI~1j?;Gl?sOCL-q}T5LnU#pc z+jvftEiwaEG_BZ2S5^~CbsQnXcZ0wE> zUrbEQSNFGW8D(XOQBk%@N$RHN=54y$S-*ba5fBg%68@c@nOWW5_R7yENK3OUCsTzf zolm(&1|U*T&n(xzgVx={ipfC=&b}T(S}v@!_By%l}mhNbz`8(`Mcb;dnYPPo?q#9>udgHE^{qDI+N#+w+z-P+<^Q_NA9Ly(lkOH%k^ceIiOkfYyY*+N?EW-`7r zID-|$ibcJ?wy~h~Z^Z4r$G>T76z$`e=$JUx`@!Jz&HkYlP7 zGhyvjJG|7+*61FZUg0od4r>IMBx=E-*%f1DuAlz?AsD^(t=QX0Hf7*x@0nYQ2`qqN zUbHNQh)5AO)o3>?1-3*z&BV%dpQ93rm8|-gcy7POY#zuB;=hk;EN%dlWOI&UIJWCh z^W(J=K;By(1wBQejKnuVRmCiI`+k7+zl_iMzUnjfs+A#NVf^H=tL+-JJb!*%c6|jP z_8Dq==wpN#WHsQ4UA~n?4vhuoO?`9T>NOMK@PJBDdK@Z&ik)~7mjd3IM{*Z+2n^#+ z*L-^AdH*i?FkNK>!%>_rpssufe4D4Bj10JROwAdymWM{OBAO=nuW)hB8aq83h$SW8`zaOJ{E={j2p@6OX0v zy8$iiwpteDSyOvS`V3C{Bs=l81N+p`L+Un(x_1f6!BP>2CIF@Sht004ZLQA)s=b}I zf`f7GrtXZJvjf23^oF~4KUBw^v`5Ed0-4UnE*{Y0U-s;<2LbsZnnuNv%zPp)j{(~DcL~b1#oxt zdDk*V%KPaWdSG$B-@~LT81~(!H5nd;){Yc0_JDoZ#ixe?_EL*e%d-m2jq$035Uo#y zOLB`qH4`k29I7(rH}H#gKUjN)k{DL$qp}kK-k2*X;Bvy^IbauQJl5y!;*ie`XRotp+q(ytY^P(M0j(q=;7)?s?9=dAlg$(R4Lh7 zBO7%)jR6GlO_EG+t)#GbBkiGGP^M=KT2(5SSJ0?ua zlcyc}TELiZ{pbpGf(*JnxUVJ(K&3)+Za)J&X=glo5$w-%!QxCQS?$KO`BWX-^=Jti z{$nCUyLb#1m&`AO{@@qV&<&S;Hv?L*75=I8_S(~C3wTbC_+vtzL5)@mQlQeHG+o-5 z?{i2?{P$t3!hKqH6ElmlKxwpuoHr~~&DuIPxnn-i;$YaV3`%$NbenFkUsp3npG+VF zvTM8wuagO*2yxp60Di!x-NN#AhB1z9+Z=o(mywUmN5W##KwpI#{P+k_9&*)}KkOYG zKRSH%ymIU}BQPtX6{udYJrB`1mc#e&8~U)5uv$12_af+(MW*SJt8_Rt06-8Acxntj zJH*9699=WY*De5IpT9*$78W1w_8g&Lor3zbr}In8?{1+qZ7TAUDaXiP#iQ1JeIvI~ zdw)L9A?vb#=TTu0`y=;_RD5v@Io*#&D+Z(SQ$(0fbf^ejo`Sxj248Xw|85;&TcgNi`>R z>TU`-xK+wP&+JDRHCFucGr(+DF;cu_Ofi5gB`txSwe*#tKa&9}(KqJw(MJEZ-;g6H z35Y~)cpg4fD;QYJ%~x*dK24!fA{sq&&^Jaqe5Iv-z-FKjUpQfQk78<3GRlS#IW%ZU zrBB?G_yvWY?O>kk2Y7QW0soAZ3Owfjc+_DLkKNcC8L!6n=qj6Y|gAmrs{9wi2_hU#*z431*A$Yzbw{-WXF8T`vpHgSL zJ3cSzTWtNbCjuUa`MB5Qc6*YKkP>^}0Va5};UL1zzqJHMT(Q>L3a!r*7I>FICBK_s0S&%>9K z*_#v=!;{#e%Yp&xSO=FRdkZY-j#RH;3kIxzBO$k*X87lPUN^*c6BgQEU_^{-);+ld*0X zV|g$Ec#!*Yqk=-K?rHT1ATpV?b@%r$VczY4 z-q&Hm%*=Ims%UgKRg(F(7ib&~=-|4#nitfPD{n=aVO?csr6|VeFz0k#P*&>&C=I{~ zMLw!gbQXPmP~lU&SqPY4?Ju2=rB@oW1iyjN@b+ZY4fZ{iLm*o#9B?KIY%dcT^3)VAqwqX?o5kyit z6r=^E8)=YkC8a^S823k(mhRX{ersR%`~3KR>0yC;X03JB%$QyO zHdtK_FK8zK#Qa;!)hb!1WVEXDa$)Y5>%2HPZ4Pgj63NaFUf&zxiYeWbnSKm1!buLu z9z-53j$3CPh9FnXbGwzoV%6^LYc3G5`_4paHxAn^WhSXVEA_nZhG>dq|`CHy%_=?_dCG(o&uYL8G(P)vmMV= zhNYAo|3PH#LwEnp)nBg!mLzcmmmUgasMsCdRpNsytbd$jlQ2f^rUUqmq1Ltl=Lo=o zS?{x$B5zEP=ai9V4}*^w2)7dF+#f3sF}^b112-4@x&6&1>eU70looi@nu=sqAht;v z-3JL38q>(oD={fqq`K-}TDnpG;1EFH)mUmTX2Fl#?qijMz zMQY&kBG(aeB-5N?lKv^}G3>2Uq6`H`t}V^TPd8XVCQu2G67xN%-ES8I;-GCx17_Dyrd# z0fB(~$!aD!$}U!DS?j_ons#KeOqK$VgOH^ugl;r+r?qpUx?asvooUlY4YnLtjS92(d{XG5T{{b7)pgOiJuN zSgeg_I>7ls;r_#8UQ#h`Xjvp;vKvreMmJ_AJC!0Qe3e=n<)57?&SM# zb4_~#@*3+bQ;8c8$=YF=Pkd`pRP>EYI2J~cc|ra!^TE_}0l>0Y{d#|D|1B)zyz`g3 z5lQiWrpOcZBs9~-1BGtj1xppe=p~lz$}j$&*Nsjz=!ZKrhTYC^p6HStmDS7d>$KBJ zoeL8lr~c9#jy@5%AnBBM%4eTAQG(h5qxmLR->A@9;w8hqG-WYauhFpSkw zcZ8TK(|Jf^yMia%Fe;1Ri_2>VSpIpTMMSilzHK=;Nmi+>^^gmdA8@nQM4y)4y4zJ zBz$mrBSGJVyn})3fU68{M<_Hs5M99{jkOz^sS3Oww|n!E2LmXI>U0QXfjn6k9@dFQ z4&M}eYUw(sJ3=9ZohNJcI`Aoj6wsx3={Fos4pEB*Zo9`uyB?Ig0VNJL$v~g$OKNJv z^O5(u`i)IGXj#6rfRC^|J7BEl-cg_Ps?e;8Nd)v5PeNPh8OoM3Pej{U*q8@s=qEH@+WA%gM}* zgm#GBxcNnCxf$=kLxl3M$Y;vQs<|!Z*;74GQd%Lgy*1$-nO8<9ghKnK=j?)AKyIBD)HgZy{Bzuy9qa!yGy1KrgELbFML;P;1%h?GocmJhT+GmvCH-_BvE{vl zMO$!IF?XF(JW|7M*p(j;Q6G1?%WQU8s@&SIC3j%SkR zbXRo8{}R^xAON)=w7h#2I($T#us5g~Dlm}?$^xQ?dw623xoRbKKKa>6of)<-rI@EI z;-q`RLd}daW8>%%m^$CBeuL5jGB_j3W7MUGT-e$X`NQ^s*w^p7{z&LH?eAEBVs}*m zqzK}|YK2y0&7NtU;fJ09d&)N)YYeh;B3HAvAdlVgZ@543JspHSdJy~!mezg%Q8XB0FnPIqX%(n3z&rZzNwvj;yL7Tnq*f6ca`m4^|Y zAlv*|=fuawy0V`t3u`#YZt3eL#bB3dX5XpaLo?-H>^G>r>HYOSU_)m?WFzicaRD=J=Z2tjH` z&)GlIljmygg_E`gDqeSX?aqR9`kD7|i4L=B>n3On|2M6l;Q{DMuUS+*eUJdud=A9U z9>Cs@y_!ee#Iuv;!V=|-y{}oZd=Kb%lo`USRtSFct@NJ}_$q+X5dRwOdpF+;>)GdT z9U=`m)&}~HqLSS)K)3>5^gn8)12gsw8?gnw05Id3ILbMRl`e0%76}+`GrtYKSfMXT z(Vytj0$oZ2HW%e&?~i`qug@KFo@Mh*KSl+=TJSbzA_JmQ^ny_Mb0xUKFM3V_Mq*{z1Z6Ha=A!XmGwbJi@ZMf<9S;p_}a4s4qcx_7DT3$1!V{RkN^SR8u7} zRYX@0wfrA(((Kiv^;F@&toVDnFEDqayQ-v|8jn^w?zxa~Bh`mud(GnAK7KHn%u)3k zVu~>e*G5+dEWKMoAVXxNFBG=>OXfc__czn4JgeYjXVOPTEDL`K2TIQ=!+6X03m!evE}ZJZn7>M z^X!_!&~(->FmT1akLt=5VASNaQ(k{cyf!E#*2nQcJ8R8$q0KmSAG?Xu^t`SXJ-P{> zOPpD@N=o!g_>i4AMuA)gTb{mHG@bjPd0`HO*z@>J_Nj0qvlGUNmzbv!r&i-#FwA8k zyWoIYifwl3g=HbD{^;rGlbL)QUp;qib#ZO)mFlQ+m%+vPjWCGx6dItQlkwrfASau? zu(Lz7Ku%}=DbC^rAZHL7qHKpx9eu~Ov?bNYZswIfP)Sa1UoY4Nw((|nF#^(eF#Z<^ zxbqZeuieD&n@p-sb-g+lK%3Q5xGF4?u3q4U^cBzs$~K^TF_}{nmm5#z+>JBI;`cG$ zCety5r985lCLp_*zgZ!`5u1kN2y(Mx>cy3ssJAzDLc;6cqj2xmY`Rm@VgK+jZnA=y zU9oUe)77iaLuzE3p;{@N$bBk+_3$Cjxdd1#jf{dd$q?FlZaU!!Nv?q@=S0SPr|T2> zLzNuQ_M3|A!lZ?4#~)rN0w4u*;Ct`O%!6gUw+>Omkg!qMjMP4Tk&!*~&hzvQx_dF2h;O~5iOU{0VR zb`H4A|1gtHqu4ni;8%9*gd`tk6qUH{(*l`?(!TWz5)ktJLuG-sBtf&jH=vIJl&o9q zm?z*SDXPNpHdP7emh5}ivx8K7PU_3UBM|b&gX;O{q^^O(Lq4&AfltH;1$)|8@H%G? zu#`t^)c912mLP4ltiDPAr!wVeAk`R}IY>}nL5fIRaUb?oS5UZVdwqzJ*n3x%$E zfML{oJnMw-9)x5t6EPZ_VqtOe6}IW1-zoEZvi)1wh17^3EKXxleR^oOD%$tnNyX7F zZ^%RbGTv(L;=di$i7(o&7iy+<4@}{gQUszGSit2WQKgnLE!zf*V@jS@mUR;r2k4=6 zl{qm4qJ~h#WfG=3zWnC}bvjm#@}Th z=s*V1BCivK?5L9ujA`e++Gv`TWc7Zar7p6+xkXa+hHM6<*cEC;FLSQ|yV(o8y!~+E zNV8tMG|%zWye!RYSw11^?Z&; z7ooxzgKS#(P&Em;tOD;@s3g~ku1ALkD5T~lTj%dYB~@Dfz1Vw>Hmm!7E=>kg`+|*; z^w_<&;?%lPfVC2oRcNsQ;xhKp+XM~oMynDo5VPyNbbE9LJ29eW+6YP8oHuR|Ow5=R zmQSLO7vF5{)A55w1+vMv-tA1t64FmLzMuX*07OE3lThR|ARireLxkcN2$rwmY)6c8 zTQZ1Ad~MdLRRh#o0^Vobbd z@??D-*^rfT&^rSi6RdGrwnm?uFrTmdX~E{Wm-4*Db9*2^tNZU3<80TK&$dQG?fEUR zBpw2CjEg+6H8h)hIom%Vqko7GZAqC=p~wViG)zmRkbZ)&jji6HG`98$>g>V@`Rd?Z zl=5RvHC&Q((`9F=L7U~VfOz}OD?GCTYHl6g_LlWSS_UBo;Hose- z7a%hP0_CaQKTys;aUqr?vNdcMqWgCt0H3vV?~#ubi~&xw$fU$HiTk^85ZqSITRu zR!S4F6HAzbvP*SHUMh^d^7sHh`^tE*Ze@9^CX4`v1xHE~pcgz24p+6kc>Y-2fJ(3Nc!Uh;+@K34!iZhsXL$*qu=br5({t5C;+3gp<~X zSU!7H!h)_(AqDwnZ}h=`F^EZCMp91Dpx+GSSK@MAb?=N0Eefkld=E*e4uC0c_jaU_ zr+ojZg7q1pvT6~X!$yWrS&NvZCFwY8T^L3Twfk!IRD9%!8AK862Ko-^=?mX1jJocf zsxlFAAXDG45CJ@j#x%|0M0{Enh4jC8pJ}YqH+C7bIqY4=yGcHvHa=<-^r;6>=u%%C ze6UnYd!Q0sp1SdagQUj+bZXI6%0N%G?&?&F^03~AyFIYJ>aWr0r?1H& zy#PXg8<5Pj1xKijvT>mX?8PWBy)tu;Fz=i2a(qew#S&BA#LPUG;Z7_%=oeT!S8$eL zKa^DBPe6VRhR(p7tr;)lj8JUTc8KYMYKF^F69y)K=mT#>2;d_D$tR65$mBkPq(j|O z$59?S8El>pGpDz}J}9|PbybEb50GRy?a*Wi``_3ZRt?*qeS0CS zIO}u5^{LR~JyT(Q+(elPlO>Gt4B<7w0hLyL4Sl;?v0Z;GD^2<@E$)}Q6U%ve$wuk- zq}eXzm=$GlaVPIT@CwoX^NXU<)YlYHrKVjHEKIIILt?k;`MQ;@WWgcw$Vmv{OoY^t zlGBwkFkc38&Aa>h08Et~|K3&4d7$EW_6)@LOxr@x0I)zPhHW3>+4^RhI@Tnsp787ju_&fTFP-f6)z$&MHwjv56|LE-SZs2JGkhYRvXUFj!H938_y(q)F0v$8s{A{4YW%2t6|o>aJR!PM2&v)zM8N=JW_2jz*%{p%#$$sGS4piZ%EbkhW=@FPH>!5EH+fT6IJB z&A_JtI7j0m;CbKKojAO9S5-%>Z&yaic2MWFw7V(e3UMxQVbM9ApyXI48v~S(L`QzG z*&*5US>;8r-p=P${qeu#nY62SAz%jB4`Roy{jb7-DF67$P5mE&^^x@yQ%4ZjEEPSb zGC>6>3zK_@QJDqDsr| zTO16^2Ya#oW1wP2siP7f30QHrqpH8OP!_ej4vK@anniug04;2Bbynu+Cn=;0IO(|R z6jUepB-++Q@fX%Bh0ZjF#K%7wD6ESNbgh3ko*#urLGgbV zoKnFQkk)OoPeL*DFiH4Sec}$0Z|N_UKctF`%xw)i*fmE$v1>&eJ8_GiPDP#%@iF9% zr*l!Ycc28e0Y33wFvZK}I(`5iL*A%HtQS{!qE4IUd0F75a#l zT}?NmWsG%Eh4F&qtm?8wckh8!+UcGKpEfBdyfjeAr#Zd9y4aNKL=;>U~}KCpLgJxHJEu)=o&01i6eSp0%g+L_xj~@Qr7R~ z?AS`nr|{V{m9VC^_;zxD?B(yN7Mel)v_P$OK>GuDe4hG^$$byx%#KQ3?GIEMe#_J> z3ytkgy*T;n8k}Gs2F-#7%uHk$%eXho>U!<<+p)%OI#-=A-$g2T=+JL4o%(#M|J8sn z;$aJ(pR_`ZOrS5Fwzj37jx$Q-Oliz9>6}znjDbFMmu8)=`a0rVq)!AVBA#E#J4y)U zH25ZpXco1Pb!BxFj!X>ydZ4H);%M?{Nz-RYmm^fT0FWO98W{$rfz{Uk9Mv=|aA{_L zOOG_BiTQ6qOXc-f2-fQcKx^%T3d2?@)-i5!I+H^k|HeGfdyq|W|FX1kdSL_0FD1_< zW^?+f;$X}#fySi-Kj@NMS4m*f8tkZC1nC6(Cl)~z@r*}mm~-84q<1*(bH4HC ztA{c{Kw+s(y%3zU^VsyXdM!u_$Fp$oiXK7iT0*n;j5fk- za!Fg-+vicDhJwj*j3%7bD|$r%rwIMwaEQIb<)*k?%|kexkl}vD24~kI7g}EHAET2B zdj$CF`*c?3?}{!hNGyhj1*fuMluPC~^$P#U$oTr3(sh6KP&Pi&@YA$zxekXjy=~pq zBUzhzjrIRdo~=CsjRGBH63C)Ax9ep?%W>SRk2kOL1IA(!rJGrn1*g3FbLw+H$mBO{ z6R^jhe}!yQH@k}psGlG(TNFGMGqH^FRJ*4PXcUK?3}h|lg5~iK*!2-5Jui%2W0hBT zeDC9Taq(RFFJwdh6C}rd#f0}#%h({mdbDZyWtc%8Sj~7R<9~-Ol9`-hSsFgSiz5cb z0S@z?l>i3-a()r&C(qk&l7$-NG;Kj<8!6DthC-`ujh>;)7Dme*=kJ0W{h<_p_L>7J*&hk{9 zrn#K7DlCl|5ue=yCkZm+qHAAdA$mjSx#>xEw)ZH~>wrF;P)DKnC=tK5sND6~00LrU zZl1itLf!<=*=-)J51->Fhm#6!qarhmTLrs#kVObxc}90rrt3D%6ID%>&Y@%d;_DID zKZi}E;`-0xzr7}0A|5-Zt1fzVbsI4&pa`Tu+1rSnAl{jSt8#d9QY5G8g{&n%V?06R z$=e@lpUla~_v}U%ck)`g^APfGsr=TrF?QVE%d#d0CTb5n{onJd4&Sn#^F`SSr`L86E9@IMM zj?6!P*gc?>1D>!KPW;|-?Z)dqI&oGbj7 z$r&Zf9LH_1VL;!4)`rxn^>5#7G0nKFZjE1*{z43qow2XDfP*da=+m-*DR$pNGR0ix zZ)NrWKqJ)3Egr4P7;`r)I&1|(kJuCW!^i9Tx#%sO)$hpF&{vk8_ZiE@5L3SM0;;g- z!F^9I=yP)U`NrI~X>csOp**_(Fz}v&fAuVkm8&anmvhnw^Y#P8D z9XyqUlX-z-++-29ZjICTWH)w@ZY_T2O}!4e+?$;t8DdZ16h7dtKZXgT!i!7{{4^HOH$r*RJ$hm9wPTX zLj|k3)@a-Dk0qz~>N1yPzHkM7AHplqKs5O7UR)T;opEKf#FJM(PmoLEQ*AB5b59b` z?d%%4v%DOyto2&Vv-awNFS)EN#|;)oS|q`jD8- zQphAH((&yGs>_dmbi$4Mx1#Z~ak%02^~dLmIKOJI{{^&tmVeeWn?+D=_3t0iIhL8- z-YYIR-Q(-VkLF40Rj*_3@Kem-sT51Bfu)f|rG}KYCmmmM3avURr*q%$-`vWoW*3gj z;{6kx#wxP7OU*=r%wM}0WWuFGw+`>kErj6IUCbhgFi~kTE*q%s`cYx>J+9`L=J>qw zW)shOC;JLTS}jPlxe>X7B-s}I^Z z(gnYns?52S$%VOV{0e2D%KlIFzXX0c5$qezmMDE$6C9t7hhHU$EG1xqW%hi{xzmc= z9zD2?-IRH#OmmS8Kd4@_SbAAc91~Sg-b_I?x*|D7Y%U$H0qCA3-VF#5?|&8P+I-u1 z%;hhZD$x&2)X9x*bC$l0Tn-F%*gQ{O{~SwdN*jL^&t!LWUy2ypUw;_iNIli|_Pwmy zYHGsUvG58|`^%$JtFJu{;RG8i)jvn$-#5X3ltgOx8QJCIyNyk zvbmnFN-%29&lC9hYj*m2%NK2DXVu(Qcc*wt;0~XXlFKq$X@l?m`U>P;n|}OZ3ARgR z@B-`xwBukxjNGKb5KTO`tCueycn_@Gju)>t$(+*2KUxS?r@uU_&@GfYGS3z+Pe@JG zZT%aR{e0o-m>$LOj05#qzx;#L(tsbkb5vH{&ZhZ~8;DNt%e31{vn4<6Gv2+3KI)r` zxmx0`LJh^X-@BmVBZ#b7SZHs>>LfV;nxsd@3cWu z*7gR~;S^_pVtvDSOc1etqxkF?g2=Ojze*~6EnX0nq+UT5j@#xbY-jU%6W(uIm!`o@ z62nEOaD6hnzhsXtFAk(Gz9Tx(5lL?M^ z(-EB*2}gIVykRn<^H(9aJzag{u7+-hH{fUK(Ko~Qa;0Te<8BOo*mk5baESIm%cch=cWf0^@>fA&f@)b zxdVvCKlEgAG=19Q!*vpBCT1TSR3S`v4>ecm}X=0djZ zDO_#)jOb6v>g`?cnm}^Tk-_z&cO{Qq+XK?&C{yJ&I$!x+vR+iv$7?Nau7nnSW{Pd6 zO}g}wwM09QG(9+c@5E)pE8djwa?HCV*;(I;j-xZ^$!A4_Arm}hzN4MCgv?m#iN@XU z(mVJ3sO~mX(ZtmH2jo3|klM=d7i;N966IXB_Kd>Ow6=%I<)XKKH2l{;=$+GCQJWrj zQ=kM^8VR*&oWydTu;u;_^5g?wqioLjcw zIs1^vFK+M=o@#(wm@*g#1g8$_s|5(vC4`7DJFUrz5AU`PaVPzXcC^O|?O=GO5pIi( zO6PwQe*YK_JkkqT$gO=cP9J~!v73M%#mEjll+I~!wCZ--(mWmuOW{8ZmFiot&Tirn zY(9&hcWq~tHx43IJl6OXd=G757YSrYEyePnr?z&PCMZwk)8Kl=jI5Ry?XL13~u2Kd?84_b15l487r`eLy zYap_o&V8Ye)!p-wc1KGnHGX_Rf`xs1^LioARut*$D}3G9F?5wa|-Th^RU)@o|) z*66Gg*tr`*TZdyh6MEzuTr8cRpX=2I{(62$RJtb=TQsLne8dMIs43qI=iib<8PFWEe=lCpDYVoz!uKo42LCkoS?=E*QEdgg+;hfXShjxTbGXI-B4 z+nDkj%P#%>e;vwj>%p_N5=TS_rxiUq#%{+GX5yT8MA4nw)MHqMw{uu%c$^=3B!8-@ z%T!DGBeN1h4#j|xP)@EV*1nL;bLTpJ1g)(kGOITf3Iv_pmmr6`aN)G3gW+NwPjdR` zasPY!ddhd=qQjg~M%(kvLkP-@`Ubz&e2Se*Z%_Ipu(MMncg9>L;2`3b&J1zIp4Nw_ zb)P2vbR1l)pSU7iBE7EOKOahj^FqJ7+&)MpI?WZb+;^z9&^Ov7Q4=`1K=az4p}<5% zx!JJuqvqJ5u+cEI3ok4CjfF+ilMzXWuAk9l0x2yUzP`<$bUR*O4oi8}?3?MiUC^pX zeklwr4Gg^Pt*HGLi4L$)KVKmfqtWlY^0bk~x>TpcH?N^F*e)o0D|FVPjO>`Nn3ACN(xY5M7Q~A`p)JHS~Eg zR)8SEdAI-jmNo3gm_qlYJ&>f#w=b>S&G{bTJ&dk94H2^NrW8bI7*|A+c_T!QCT(Jh z-0KD+3#hYMjn0Mt4k@|ee*PG6?TwZ`UL7PkPeCHGalcYkUqyO0CE578E`eI#E7-r5 zEz|!;}>bz+4bC<<`i+uKAU%>zyO4M+3V}#W-&BV$LhY8KBIa|l< zp!`9-H#fOFXRn(_PnvuNO!PR43Gs=czTc*l&1vHc54qwxUvn=cau5XheEdZia8+2V z8(342z@kpR@d=eL(NZaYW6i3N^Qt!MJv`3$JI}*uM%QeYE}p5_8PPH}O2|JzC1BVA zU)k~^sqDc$GezY->ZI7eG0cpLm*Q<9$-h@ATi!gIC;4QRlnP%Z%XhcD9uM{NPQS)i zWQ+ehqGOr_2eXnQ6*AjJ8C#%Dtfs*gX*2ILZEq{QFL^b=pU7_|vc_JZE@6gO%{hU# zX7xi7T05>#93cE99Cp<4kK*Ab9!|ZLS6{B=8Az z^t&XkcL3m`9R(@_$&m9|a|}JPq1w)*`_5DCZy=k}Wcw#vZ;sz;*l?K(i_C3_>uBcf z2i@xdA(`oFsYvm4O8MCe1W~!6e9Sb6rwoxP zLIF8)j~_d;rQkeYtq-cGz{LE3appd$V$iGSh8oO~oXBe=L~>dTb)sH6c>?D6tB8}?8zjxb|&gIdv@No zcc>t=;M00$Uc0VQiSYVy%m1deCfb?JeLh`oE$1K^#LqK%Sze3;vfTK-i71mX7ik|E zikCE<);M0;> zv3}$YU8OzGRKx3$G4Y9LN`}e9C$%a1;mt$IX(gX=ICdQ38vY7X2(jX#H|1jNhf;Rz zJ4cnQW@X)uOz0?nq6i#yW3&K8QrAz-pd*FwbH=y@u}{mPG|j{M8oC$DKeNc(uOHzS z`G9jat~aO1Bb>4@1kFCSW{d0XL0Q*KnLlh9-m?`xGQm1@*#zm%U^Oqppo?w9qnbhm zK7}nqRm(d|4_Vv#CsvY{Hin(b7Tl#fg@T=Vd!o@H6OKha;+GinfOpqc3)m9tXfRi z_TjL8Y%`qZktS%*^9~XB>-{^vTr%B$lR2Eu{F?^XtE;AIP1)*2-;~oh2A^1`D-_h^ zPdoh;*Joa?W=uykTD6nfH&7-E6^>?f*N(M*3L=J_e){Plgs)SPoZ+X+8U7(9%wHJhe(RL6Xe{G4#YbqRKskDyazk#zQpT>SVk}cty0vi=)7I989mr z@h^^WplIL22`qzHLcF+AY}thPYB52xds+NOw!UF$ad*h{JSh_?zO=3p6wTu#4(Fer z(a1eMPC@)RTvWmQ6)YsZhZ>%&IGLlUTI?uTa=5cGT7P?F?`~K#HS>mR$gJO`u%lIr z6x=R|%>!>8Qg`5RSmBSI_zF?hmepau`?@H~C2&lXNvJ1t`n~a*9l~#a4^|ZI_g+2h zf9c89a8A!a-QO5mB}_s>*_ zs#e}T^i;2c*DdBO16fCdi17L)>)4dm9rN$T*FD^j9|>H0&7Eka>$qm4sqErKY66>! z&4?Q}W0d zqXN|;9zbb~>%MN}LZR3X7$(i^bkrhshZP^|s?Alt2BXLR^~ic2b|w?CFXI zG(orsCE@2xwMY>=t$^nmhi;=K#)a(4vv+z^5fwQZMB(f?&XYSS=guj~DET8!=_5`g zyO|>?1)}Y5UW^p-d0x-aYWe18=AIS#k8NI?4XZznPP(MH`jpjs&q5KySzD8m1{Z^Q zW$aaVL9{e;zXq)=!3n%?6FtF0RaPMa-`MYN)Px9X6{b5XmZbX^*k|{XCFSMEd>9qC zzAY{*KtG4Qx4mF2cgh zSPZ#XX2l2UppM zQUX)(S9d&g&BBdQ3_>ql+UF-Hm47P#(lS3a!PGt*(3`>t&r}la(3hA6QDmTAULXqX z%N(tT`Y1u%H}dSgd5Vg<)7u`&6o`*@qLSITY;1R;is8)^{_ewQX&NFYJ|_=yPvO^! z3;UVjwWbVQFIV(;^4G^oPsdhy+?X+ZDY?0d^yQsS=QlP^Fr+-SxqN?qed1c*nnUX9 zI2vkpYH+FADt`M5Kga*j5Y9e}$2-e>R;hfOjv?;pANIyJUU$$^m0*8yOne30UvFvC zJUJ9U#H7C+OZ*}`d)+*JYt6J9%Uf}DT@V_$+kN7J?}_^Dbnc_ zaG07S`}x&Zu7c{WuNX`$0yZj_x;f~?V^dyaZTI)n2UVnX1JmSZ^w; z1H)3TdKu?-n>sw&;|)F0UHhY>M?QbO7R~ylMursjOHlC1XFIxfg;sx^RoWjNJTex) z*F>$d7p9nfDaYdBPl5if=`?l2PoTkTLs_z4U%GYexA4s7n0is^<}U_;nWWQyJ!a@9 zh^d1odt;a{(Zx4P8(K z`z+u;4fI)jj*BuV=b!RKjqiEZEvgb%EL*_mlWs@iHu}PE9Vj)3@1A+~BNogrbJlw; zYDTSJNt^JT1uT)_D^8mr=5g_(*r>F^^{{XIBrEGVd$5iYdxG6V0vhct!#zspkdlIW z^D^cnYEnX5+(Nj%$j_6WzaoD6spZ7ksZP=@BlJ`U^7lrpq)J6iH>p?WaRmZUY^U4D zq|Bo2Ru~_fG4Ga#rCfd(Fg}f7wOiY+EiP5X9Sut^+Y-2Ck3lIpl)@_E;QI07)F0ev zzQEw$3`Ce7d8LY~Zf>j+L5P@&efDLp3UmI+f7inG9?4ksdL0dl!Wqn)97aVt;pH>C z0|{Px|G2m=iV2}iE4(h2(-gO^nwv$NYczM#({n-Xglp&;KL6Wk8GWU7a%E-pzls%( zh6mFC+S12SG!~(586}YFH;s*=HR6=XSD1<|$SBx)1uk2ryjT~0W*YWW?V-}oRgBOR z9~ml;W@&;Qw%GHl%W<7JsLG ztQ)YvL$g7rzZ{c=SRf;?-)E=3D|p2B^!^P~_a(6DMWPj23Q`T7^2)1jFO z4`uxuf2l{uEx~*>)RoSkHItD#~db=ws zOceufgyub_lw#M|cHvM{soQ0eWcKVgE_3*~;d0Vgfg82<96X3w8q1T1^%`P8PCBPb zB5RUb{#3c)vF*I{Q+;T-OJKFLcNV8NCGYr}3pV=q9=M>Q|4|LUcFD(X5E?mB_9)mN z038J7xDDM_1iLq{;4davUf+el^6Eu_S*S!W2u6F)9%)Jk6Bj|?VVg1m)x}N!_hVn# zIUXiwq_5#ap4CDi_Pxdo=sEXb3qV)AD^pLlI{ye9gg1}k6ZqeXtO;YHB7G@#N5$Pt z+HB->-N z>38wn+KHRVmV$am*)V+NVd0~NJj=H#Wc>n+S0;re8~oXq^pSn_Lk|6c*d z?Rw>3)CcOM%*+U7SyFpf997PqZCtgqb)_6z?wB0JKiD6hBCR?Y-amD(P2gw#ue^HY zXk5{FfD-kK*qcrXA5Lj1)6d)`eNqmx!wr zMnjis!qK3aTWj{0pPbIVV+A&uEUR~cR^|5bibGKzY2B}|X{eHlq;cQJs|t9sv_{T2 z$$;Va#${s+^{vA0W-iH;Wzwp-b(q<2^TpMM zfsmT=n}9li{#4z5@VvkCK82s^3(QY!OpZa!cQ0f1GZHS_H>P{*e~!f=huTv^9%c5= zOE`&sj!M%KjtiO3o^|4%wCZ`FMUU80*>>=i`ntu|73|{hxjzS^IKysZuESXaizU3# zR}k9t!t&|>*vkFEE379kwU-uTQ?oz{)g5?hIvJZ-?0o$EAB6}5#>8>6^Uu*wp>XT| zkHTk^&Yn}LJ~PeDxXd)tH|q7G(pRH2W||_pu%re2l=+gT>bA`EuVd7&FXkVd#LO?P zzm%&IMoe?0b}`he-n`bNaQ7isEc%zU=)a4zhCt{$rqtO!*Y|4tT*S3)GP_Kt8rt~s!(KPHat_Y>h;OM)q*^zI|1Rf%`}_NTpEsU+ui~4b*QP!xwNlG@L@-{ zoi{vQ?Qk_`>1m?o3fxEd1iLo3is(n@ZSG{yItu>}yP?7IfG&lU4TqTYngl(5n&;5n z6>WSoxM|MVbi11{BgJR;!Geznr1O=FF! ze}3UbdXH_V&~Ar+m4#w3+{JmbgMA$*ZYZ)p=urS>bs^(j_$gue^|Zup2Qug7RR=fdW`wuvo#dPMnz4(s~ty||xF`mgS> zhk+5~V_1=|rY16rD_bVVD5?wYk5#yE{LHJ~s32@odD)bHULr8?{EaJXs+8K7xrwOS z+VZ%#@q?jpVfK~0px1}XebX+NNf_S2-pz9z5lnxx_ZB|$|2s-dedTSyOViWgg6-~++l=`ADZu#I4F83>wMW*Q^D*6Rx4#+DM$Cbql9o;t@gYMMS`rGf z_+0SQ_z5MhBs)&t|a~MaTKlpJRd5}YY6EJMYg-5feGbK-6 zwxv-W5&RcL7{^ZX;JqX4`*I9XwBJ&n8zA5Csp_BW@n%9@%8=2Q{a&ta6FXNvncZ(-Ny!YqzDDfd%ig z8ad`#2Q5Vhgjw`70n#E0OM-v&P2Y+;kbzBNfCsH^3zvp>2=H*{r0$(Qg&hB!~Xo#-}{}kf&OEV=t0a>cBaFU*StY zMA>I|6lhw%{*W|qtrnNeIJC1&Zgxk5GDjj5_oupYk@)l5B=m8`)pCsN%yA3l_!TAn zk6`V|kla&D%j@h&8&6mAn8*G4Vl5!w9-YF^aqpv#w}T$`8HT@z?bf?NcJ@k^)o1Ws zZB1Y9!{|2LI7Wu2dP;(*j<{eEK+MPCGr*DX6r#KA@m2nbkTqnjPY$-|IkT3iY3}mx zit_FQGoWNse>}!+v<0foU|4W#`hv(6;c4Z2z{b|#5dz!ttCM%50ejcX0n1bMKpwZi zFHY7lvXAyqe~G3XR_>PVO4HsrGz;H}|DuyjP83bloh(i31v?9BnWo~cBQ01;R zn`JFu=hW4sXm*=tGLI|r%cJoqi)gJja3L|1NY#7@Ig8lFOBC?ML!amJdlSPfcrc0A z3~oIV4?C>!cSqVt<|r?be3Bc^kh)98PRWEu=omzQx4EtNO50v+xkJ_-m6%kI#&-&hM&}>)%}kc{&x9XecmDvT{=N-P3-8&L7yv=T<-Ti4 zM&U~0EMEvq(?dea-)L7j+_4ke3oqx3l{KOh=haj#WQwE=S*rVtH}9cnR%&!~jRZnC zM)HXiBqOv6BDXHs$hNHqXk8wV^_VWM{q@>npkl^C;G|hkG5>m6x?#b?>f3c^AfsHu{A&eb^d%kC1N~sfv-tz4SlgS(` z((RG*iP1RS5qU=HFA|l<{P`=~1@V{c8`mZ_pf@0|V8vl`Zqh;mG*-qT587E{xD zE0Td-)I881-cU5xH!vR0eDL6?&QqOaaeqW3ZSsM;y?N5g@J2aVmVH(2yI!FDiAqnn z)w^!(r(PpL8rZu@1X?DW*QxQbPWkXg@xcZUI$u?Q^B7Y0g}vH1GT*Gl4TrOW&N0}EEb zqqD~!(|m&}kScr7cs9U+a0@vZ=Rw!k)4OZnwqIfL7N>7W?~EbD>FJ<<)lK)YDcupC z;)HOg+NOt}%BZIKTc4CS&X0W~wcdpw5`tc!e++gxw1K{?GRW z2kEZj!=Tp%*a0crIfvut%w#rRb_8)P{!9S&o(@*LCMtX65tBT+=l_7*24*a;Y|IBr zOOOLQ$$ce#HtCr(9}$LGDVjpO{nn$SAg<8W*lxQRtM`!r5Vvt{SDOM7-1tmkyxn2r zr^iIxscmB6XT9%Q(ri}~9>&7&&i2URNh=WD!>p9@A&A@g5RnWI2_3`X}G?cX?(QL1B^; zdkJ!SaUARWPm$-k_YMo;-SetQf+EVhu0>?`2OkqYKNXdOfC8Q`HUN(efk9^#* zLnENGFGG81eBQE`3}HwL#O~G-;uP=kGNCHGiTSH65Pi`dZBgs_EF=0Iw!q_o$K-w2 z0&9S&{KLNkPwmc$&P}F=1#}x!5~HXJdc!XvHTRaFH9odHT#ePDn}m8`Al7+~6WBdt zNakg(%8~QT-n`^jmF9UO<&T^<^TOp}Ig7I6!HulLU-w|?SCQw&>f`~1qv+oBV7%J6 zJ`=9`l*+)>iLOHhJM-BL zwJgT;V$Qb7@=`Jw-set$$!bNp9Q3LrM)T4Xr9pCjMsRo#7WFvVSw5Zu?!WlZTJ%W$ z@M|N<;BzTh|HWY)UA_FCem-FkAyo`(aG932h=R=9Y=o&8TIjzcTo6CqKvUg%pHxYu zPhNFI>3H3l%P8>+2;_iD00aVX#9=|UiK>05zHe?AAK1Lm`v(H7=?6|B%K@?pWEVl+EL6C_Rf7ze~VdL~8dI!3oCjRTIRta+Q9LQya<*fbtj8){85OJ(_ zp69eNals(twkCbiR2xMkPj7HWU$iRlJx+3>@)Gge73yHw;W)74Whbl&TO#KY0(Wjq z;9B964{thxj=}~Ck#*>p*?qcckeY5?MhAZ7Yn{KOt}GCu`jqxA_KerFC?UBgl|$>q z-`ur^Ai6Zz3Yyk0K(e|#TlDSbD&qr@1>odAHf%0}WOg^0;NW)uf-if5eYH;qqB+_> z{th0_^p-FIWdB?77ZG4Xb_VEV>7N?5WS}+6Xq->`7O6%_4#ZWU)IGpHr0~gN%rA~= zsJ0d26#l9!i<^oJW@~(eBdgD6Q!@(SKo4kks*`(qjxuH%Co|h5h)tYr0vaMc*F&~+t_9fxY!Kg z<#V9$g8?q!o;xT=P^)h+e)_5y9Ylcj**>ty%2+~hbQRBqFZ%`AnMVIK8lnh86G>GU zCeZeRzK(eh1p^WXl;WcQ5?l>DA76?uKq5fEVs)Rkzu%dXrd5k@o74y^fP_GcK2l%L zcw#W$zl_c&0$$R;a);|nv(Bt^ABcf<9a(1-Fz0CX9&}&_4L7WkZ>|^+PLB_bod{UD z@|(|=-7J__?+;hG9PeAZ9L4!Qxq{S@MM`WPOt7$Q55hVfQE5Gl&Ow;va{X)&{{~B|?p`>f z0@w;z?HDY`e*S=yPv#O>8QAX2Y@X;ClqA3LhVG3N^1M^G)T0F48ypeL&5{?c?aisvlCopV^ z)8eSbpnnFS57>4TVa_2p-fZ~6av1>hDNn5uMtMDU)d0R|1(0bK4H8?(Ej27#j(=#8 zO+HF-I0<#}fE2gr((F?w0Pq{0)BUJRNA~y418Z=;uy?K0z&(m0Ie+5@vhizYRUPtX zhaAdB=7+sOVOUj*YH7>^T!Dbm`gXM|#bl{Q4dgZ!f>#D#Dka`Jb>&+|05z_nQpCtI zSVb?m;wJ%n;ldOUZB|$4J;EPf2=k{WNo*v!P-^3x8{ zGobtH@9wmgIEH7Ks$n`$^HF_;Y&ps+!5}_Atrz=$tHN|_)=Qo5T%LfPK=Eyj5L@&E zipl~pgSxuJhmX0!qXlqhUT*K($$^!E^JG_`xYq1M*&Nqrtt0!S&Bnhf6y1xx7bN9x z4{w72u9NX}vxij_(q3&-gf%{5c(fX^>}ZODhBcfcM$GF>8G6|V zq!{FKN;rvthyUL+W%T1wV&-=R3m;YKvS!J0>}|d)%Nmtn-U!fdDSVIGlh36(ps4;f~wDiKW zTHXN>__eq*_-wH9j~9f7vf{||J5J@=L|bF~p#30Y|GK)a?5(3cQSE`QW=4-?>=Y;D z`|irmiZW_;xinDQEo~8m{gTIhr&QD3B>p^Gjv23)EXHJ2xY$Rz-j_v?l!={5YKcluEIU z(v;4Oc4!yuKCf=0lodL<`^f#M6PySWv$9?k~-IG@ATlt(PaJ-6f zlLn{&1$tF6mvgP@8Jv?!sMlP_4`2^vG$8^Wdu3f-X%Mi%cHmHS@RTbWx4D{s^;cRQ8vGs_PV+816snMJm8CDMk%T1|!NePVj8)&i^K0<<%^J1fkpc@WcL$^f< zXXy)QTfPnbvbksjW}ZLObT-JcEnF^LUQG(0uk`;{K`PI(veuMry#eJZpz*+C#9*>x z7y$FFe9_-pV!v4CH31G{+JW>8&Q!k^YV&}U?Ua%>!JDZ>5X_yZTO>61bM~Zrfmf=(uHUfVEn8KYQkq`hkDFN$} zG2@#sDPezu@kk>|Yt)z_0*N8HkWUI(f~YnF+MBNIiZagi_d? zg$i!t1U48CEy}T@zrzZA0r=`A4hyQzNr8dFO`KH@cdFJxNUeM)#(gX>wNWTf*)E07 z0*@A6<=!;12NX285X=7V2)v$ zN7I}UPV4N5|LK}%5}Wzl?W5rroboRl9cshnRTx!EI@n^Do8?JzPE9s^fG!0?3;lsG zzH`n83H~xF`EY^WeRJRl-Y-n`ksQcmnW!*Q#7&^*f-WVVX@?&qH~dBOwO7kDHmJRToxB-1iYJ$RJVtv|uOKLHM4;ql zi!~V5iVOYA8xPR=jF}YEmLsr#lsKL@4^SXxdA@0E&0bx?3rQ6xbs~O><8CponNOqz z=Qe0aH_)33C!Iz$v}Hga-rpczm36Kd!YK(&OC-0{cL3ml))fcgk; z55P_54tKGH9+yImP1L?uzL%KH(63Ef#cu!%`B-2%b$LiI>`=+#ww{NR5)hv3Nxj}# zWw+JOlW=!6i4((gfzR^e43%+6D=m10W5s&~>t!Y2B8=v7W?dhH_j%oKWBCHdn+}^b z-=(GI+!{CP+=3=7D+47;fx^d5-33N~FdK9Q9(7@tHp)tNS3eh_2Z41(8{p-kXm+7w zFRE#7b+G=i-3izo%W^^lsXjfL2f_I%#0|h|JXbKbM+GX|UcL9NK@;n%rmVVOvB1Em zGsI1V8oOrU7JSuvC=OIN5L{&Ptc)*_rAu_6#*5xP*H2gH1cGzLFVRyx48)x2r!u}nivC-8mi*4y>XB{wHwKE8&hYQEbi~CD7z%dlKF< z!1n|>w{I>ZIR#)+i{8E4TQly4FF!$9uja6MI%flK2LJ>CzoDl{sRadWZ{spd|16)$n;A^-;Z)(m zy`HK2^lBd>z6t$_4q48yQkh^s+UL+r;PAW=^K{QV7&$t~nSD}i)clVg7!|+~Z)SsY zj%Ec6FaI@{Sx42qm=$QVzLLo&nrARcUEL+=oaz1{#A`rm1;}A| z+n|9UqOuO!2#vsz6;U>2{~PsjtN_(ZVh!yjh#&pyT!1s&!Be$)t?F7>Qs*1`9G+yv zL&@EDut2*SXkVg;rF*z+`3crA45({zPnnH7uT94H!7c)`kP>R^^?yUp&_TRetCRvv z>+&aqXA2@!IyO9u4_!(|Vs|aKK!1ga9L}|Fh#O%vEfHsK&V9e2)d6jrpw}4N!_5iv zR#&q-L36P>JpnjB0#Zs+uwne6fIK?&=#K{TP4SY2Rd1}oPIg~7M!c7{cYJHQ=>9A& z?i-U$`3Iu2mrqb|nYPY7U7CD_h7R-xc}P5Z-=AjNhqc%J956q86m(VPvsDxd!Mo^8 zg;W0sLe(w-Wi`(g%vCX!=#u%lB*(O(B%#YlScM*E-V?dKe8St2vLQ{@L;ws0X5L!w z#JM@~Lto4j(Pr}>(_cWxYG+hDBzKJ5&#{1STwlq#xdBI(fK>=%KvvD1LN@Cw=s!&> z=&;PC6)hV5uMPmSOUESOqKfjjk7x@SfahS%ex5S}rQ zyxPJ*W1V|KFX{vB5Yangxccl9oW@zk@uWfpM}JbBp4GmpAsk>=;z)`?24yH!Cf;pLKF@pI{Vm<)aWduR4(7l(a;ul{dC4{|a1ohzjiwp$j#Gj>LtFfsph+OM*|Qf90dqZl@($ zMo~2hc&i=~mj9MThHb76i_^FZzy|9g{MK$C+!qf0q-6Yqw*Szy%qdJO+u;Zngp+=x z@vmk+9d7@Pos{yEfqVQg=g?=t-nq`CXhGh7_#J+5)sR;G3-eR5-z;1=)yudnuO*Tz zVv5(a%9(RJ9k#!DM)a)tP_1Jm#fWsINZZtMEGt)XHy$6&Ta^LJhqAB>}9?PnAQS+IZN`59Sc7OQNsHrJPuL_qNe>Pxy&k z^`14<SkbY;8hM>oW{<1E z@3D?tBuF@Z*czw&q%>xg2D@whvc7H1cKSDU=b7ifpCPmR%ig=hIR&jPeKgl8oO&je zMA-jD?kW(u5m_eVGl;yj8wcc&V+r^vFZ+_iXoVCi4=iW$E|?FOi`;SN866Wf)a?(+ zDV1o-4jx=2-ir~S-~GFoJjks0j^3?2NDh9VXClAuh~h{QJ-%C8r#F~2U5Z-8awMAn zrElN2BaNjS{+xq_B`^oU=itYN3TJzvwJMC9fh(d|wFr14! z@;TaNnFhQH7WE;$dug2W!d(B;hTrQx$5+hbvBQd*K{W@Y+8bY@3@rL`Jqxs>bAy))d~A7^MGOy^u*KO zUB#hfyRY_E|HAzUq3#R6jO8+ShxUWBH_C&wy4ZSJ*Kc#!W*s$yNZ|z2%^l>1SFNvW zyDc=avr_Hw+k%Ms?U=m=5q=;Qd8FUHK)~7ovoLvN6tf`}k6Od4gM-C-IoepV*zN@P z1*NEy&(CdoQjSwxd)_SE9BB^dTrlk}Kz-5$#|3@)Kk#0iNi|+M@pLc|$$JwJmC|E{T1>n+*CIVnS--M@+4jhvLR#tnVTYVfBQ*v;o!LHIyN`5(XD* zWVi6PrY^2~w-w}#l80%5lAR9hZe6=qxubDc^x0Fx_PCzoqxqgYQe)iDzvgI-Zq}R( zHbl!8!eqMRAF1>YvY<&6(c(O>yA7;V!c`G6*k;p4GnH^n>|tM`}woXXZ*dW%zK z#vTi&UQ)|ahMVj-5j>ax2CC4AE175BBKL$1ObQ=ERoRHAM9r_Ql7iSrzm&WR?+n!- z5xOd7USnwdG4z|TMd>sw7d&yB-(amPC*1akLZ>u$OR6}&TjzByOn6n~;!7)kN+puz zn|y`fk7W=bhE43xZ29I#2PYf+j|y~1v*WKwy; zn5i^kn8cCuA84k0m%#uOR=Qi@KXo@EJ7)11h0Op(i5=LAcfsmN4QZVj*zlYWkuoP; zZ?nH)3#Z~u(>rC*zpM+7=3HibR^DKZj>+s!xW3pxadUvCNbJn9uIc%0F&?H+drS}^ zAwk69J27K67gngN^D)xvRn+HDqm}7R3bngKb8Xp(q$-{I&>G{#p3Oz8&AB|1^$O}D zYC%^EYd7fbFGnr6)o2%9V&a;679*K~OJ@mCD}k{fk7Or!G@xD|XR zh=bo?6QQLHe(jdZo1Je0o;WRnc8=2~bc|>?D{S|mVh zz{Vhy+9`kkTTauvrZD8^;)8#wwOZ-psxkNo`JHn6Kmu0lE=%tynrB_QcGM-mjLVL} zz0YeM*m(BCt!?3{hw&~WMk(PHS#h$A^AdtKA4-00o|&fQ`%Wrc>`OT{o#MX0;hWk$ z#!Osoct0*(g`LQiA{MXdc$k*;oP7vot58GN&AkpO?5s);)NFGZT`Ok-S;63#2_hKp!7k^NdZhdMrV>KAodY!iM1^ckcouGC}zbxeebpCmP zr0oMTb%&v`%`q4B_A9W|hMbdJF-DnR zZh98qgpbPQ%lBP(jmN`NMI$uz?u*(8QWQBvIsQjQ7{~ssTn`=qB8?YhTqY1~SuQ!T2xI%Y%B;wY zk3+}yZ<0oe77beMC)2fTd1yw#gYUS$=dBxj`v1HDWi{0#zUVwZT+xdRZ_S;L=LHzZ z^atA4U=V-ZsBwzH>cD|8szwmwjpk~xMBIdmHWmJ`!DCy0(OsI&2|noib#p- z%?{-1n@r{ZpcRM-KO+D$%N%!O_l8!sX<=%IrAn#6_3aCsg~d&-lnJy8&zon7$c3U= zpRSm=i}*-*g@%n8S(cMLv0_=rH&1Va8VY_`7R?K-cZ3I!)Ond!)%$kfZXOmRELU&t zl@CoXh{oq8GT0MTwoS!_6c29G_z{V zShOYL12W@Tk(Dt{fni;JgIzHDs8%T|1VW(%1}OSq`ecPu>0gN9jw1Wb$r>+TZ4_7P zo16bLHSL^OkTBM4xU4BHAkN8pt_gX5QTejAkG{H2n{V~E-TS9W7%})nI}s9NH#X&p zGzfm8=_BG8>BGO!0s)Q}%;G?sen|8_{F-d`XR$1-w#AWc?>bG+9=V5VJo7bcU^grfJb;lRog9OH^S#?G)9>Q_zO#d~DW{fah zjC2NcCpUL&7G?qPf?Wi$U0MV>eMrrfUhPcs)kR5GU*lsLe|rSmy37Uigs^VW!v{%C zU=)Oj*3RK#>*v$KahGoSLysTnW%o48f`~{8+D7I?-F2Q)&)<-mV$0q2?-=|jp^;d7 z&C5W2%;hShV@DR`wNN3|)g!SKTt&Rn*L$GvDfw0(=Pt4Hus)_YzE6xi@@hr%G?`B< zHU&D~x<~U@G)w7Z?7ml>&2x*_|9>E%7-0DTkj~E`k{hLtbdfaABob`QV4G97$E?7} zPPu^my7&5fV>Kzk~&+3QR_00*#=T>Z%?}x_-xjhphM`UYDM+^KH zk#s1_>GK)u4Spy$Wu`9sUqq4QhK3&#rSk%*ee|2X6bk-z&nNkGi-3wbuo zD2M9+a#5;4oUm0v=foFzV+h5>1UL6AesSg4$n@}8uukO@maNyY16}}bc(J26N^p`% zP9q@rXO8&)LPHXNOXw#>62_vin{z0KYX-0fDuhEp_lmy4ckz26ok+F{CcisjtGv!< zg9!u>J|iRyAJ9~Be*@@hz^EZNK{Kh)u+AFPjDbx}!Zib+bSaV|kM%*pRlzh1{L!j6ZYKB|!W! zmMmPxz`z5Ii}hB=h?BkNpV}dBk9K%N&uLM?N>3AiYch#@E9<51CrbI_nLTaZlQ|yV zv$I(Tu9V;JJC9CQd-0eNn*JZ_4v!PrH>Dno-CC7a?~zt<$k7q^MqR+c6wA}4x;@*4 z>bOm*I7fsIYK!!&u}Z+8k@A}tv6Vdy79QK5HRxVTCfh!x7_7&u*_qmV&T4W$)j2p9 z)N6D?^|1GjZ~`rb9b4O9fX9N$#(C6m|KIAdi@d2DFQYT;{P+S~2yXeA;Pmg(h^*KcSK2Y-uFi4!kDWxCg18~i2lED$AL zk|mW~4@&Dy70teCA3Pl_y5*{&-BPo5qxpH(aKrDpw(YdMSAOQc&wF=?vQ(~VL&DIx zy;Hip?X*&^dE`)6|42N~km4jg2y^@juqJ2zKIi_s6!uX@xq$Ns35AzC3T9`299}+S zBl~j>s+SPKEY$a;oFQII7%De5DjLt9HfLlK79RP}%`?b2zA|N45MBkqEABA+S2k{- ziXS_-F95qy)QlYwI$r!#M1EJ@PxVZ8St`CAnw-Q%ADXmG*aZ}Z8RZvLI8<`zSr%mF z{kp~(%;*uM-x-n^Ba4Iwvv86y4U#Z!%GVVGUQ))QL|9}xqlo;=2TsFEwW&9Ji;8u( zni}W_|5lx_qawt#nt3zJsP(&WDIPrExyb?-0@Hy30If3SVq~}c9&un5d&3^tNa(y2^H z=qmoD^Q(zVo8e1+LmcGc!Bb_Doh(+W`YMHM4%&K+@E78o`4vtp`>ck;cksrI-OB5Y z%h@~nSI#3k6|jKvp1&rc->m z6G0mT$cL`yV_j=fY#r5UqE3PlXyAu2On>M4jY-PUW^gj--x8T^s~qkfAv<;f_}x`N zrq1kV!?A2$FaD)qIz(-N6)g~4UuNB!pg6RNis3zkbK!KDs{xTF0>5HD$lX;FdLYqy zRJXZTmE~=^B`S%1GkIgC&AC(j0cHCIrH@#~h%YuScmRh5N~Ch}$oKst>SFh4j$^>9 zQ)xpaXa33z%DLRy5yi4D^!>yr6AhCd4Pg;Uw$EqMb+6k6u-q_CXu zHAr=MDbNg&ory=?fR-K}_IWN{RC;f`ek5mLj`Qd~`cLBl;s1rDH z+nz_jLIN?fiz7TmT(g~67)zY+SV7k1+0z-OBxzpT&VXb1y#{@V!XORB`Sp0v_i8m-y$941 zuF~l(+rol|{PxTwp5p^wS4`uq>DF=e^wF9sXFickli_+gU9W@5ZM?<9WPdfcWr&6y z^|n33JHCH6UHf+5t^TBgm?15~6_;(64{S{MdByCimvhB&J!^b90b?46n}AwWnPF1l z{&lHhWTP(MBA>!`(`}u~?W8XIcnW!h-c(k3q@5}K@s1$m5B!LZNa!HY*>c>wdXW9A zHXu8yfGyr4E7ye%9Fz!&A+enA5(Kg5B#@CN; zQCY1z?54%Kgq=h<1C5H@oVUh!PE_T>pj>fUWrY)g=K+-2joSaTEnL7&>&yzov(35 zD6V^;(i2M?QuKKzB1Woa7uvTy zuE+i3^$!P=4haQMP^3dw{qhEuVz^c#rP?7V|Lun`csm4H<%ULWspEnljAGDIb5)kg5XkEHclV>GxVB zlNFiYnIf+8>8tx(V!bUJ=eptw5C{s|XVmXU17|lhKK75RYwp(XKSfi1X@-OnOx1-E z%uegug&7V1h9&`IA3pm18Y_cJaCN(jHZsn!$cS0~qN%bh$11Xf1FjbKrSU)F}=MZf0_ zM#&J)#Kb%HBCX~F)x%7b5vGUwUVxiud;VpVC~{ML3X6ZZz_F^fW0rs16drTcQon%X(9D!)U|l)5CI$JTQUfZ(${jxKHYpYpf*s+Jn< z3+S*lA8C?SPK*4(4L*&xyNmk0P1Y2o61{yq3l#2CNDpYHLw3$}Oyh5cl`4bde)2S| zH<_a?IdL@@Mz&%PbsA!*F`+{(Ue0W(lrx)V4knQz^6Q!A?`%iUs+1>I2JyM@T8-Tx zw)lsVIUl3K<%hT=>L|k&MO*dR61FdTR)5-N0D%LBUn#%6sB{B79pC$tEW4~K5*G=C zW=tf}&3;k^k}z7zsHFe|P`!R{4Q1ML<+Yljy-?7t4y)x`9Cr8??Mz_?CY(=4ck7g= z1mquQYI`$neNe$?k#9^o( zMGYA~d8+NXHeEHMRQuC0T(@oR760M*qVn7p*VgyZ>D%RKnd+Nq3Swg!g7$+dlJTxP*b_#s};Mdy_l%xF$cvd7C|+ z8*RO$Ki>(SMCPSU5oe9i-Azbkokz8q{A|Xw!Z~bu9;tO(Qy|OZ%oh}bf zWSfDduCA@;I06*hj|@dX-VEce2J|I)QSmO@ya>V_tF=*F(8P`ELycwIy9W{6aqLiA zKECE{?102tKwwDC78!XNH9!IThfFV)1G-|(K%JNZC{xbjoA>bYRt)wS3<#!3=3R1F zCEiIaIJ8T)&Sl%ayO9!xA)M#6Pc=3FuM*lTVx2x)IhU#5xTYZa7#ZO@!s6kw%m_Hg zPE57c*RtIJQ^7aJ)Nt7?Zq1Pbhx4MXC=VK+SR9N`;o8P>0NziAjpAE^Q1244y zBU`Wh-~oT*=EQ@pdv1DIRC~E9ME61l)&Xjqpvinv`{r1FX@}Z6?R-xoJRv{allZyq zXs+-t>*yq9>#1P=lr0%rc+f5jh$r?Dm3F|J^bl(6(YZxiy>I75pjbM=pRv|1Lf#q#r`@f&6JGvrai0Mi?F- z#Q}kKNo9YT-#Vi1tCiakp(qHXvcSGH8I$joQ~9JQra+dVc&8)XkrGUEy|TFHdPqWe zwI^oxj-J|ZXZq*Cy>!o5nQdJP9OC>DAqV0A!mFTQ!k_g)e(+@c-dO3Zoz9?7!>vsp zyCb#lg5w~=r9W>CbcA4rD!w!u?)W{TRjWrGS(^O=+OE1sSGaSEPsWX!xQzr( zE)%;a?kX}%APSCU9h@i?+9Fvg9L4yaOSfAU)n~Z-gdAS1$uA<-8f(mz{*Jgj6YGT4Fup{H7>~g?`MmvILKq^5M^Asx!IuFjN;V8jGT^U$_~X+RrApw313f&&PnM8QPi-v z=|So^o(^!_o9VM-$?U7{fNZt!xTXT6OkfY6?Z1hzzLb9f%0>Es^2AKj5tLX7puh)W zmt?XBF^J|Ax8=KGSFUXl+(B_smg3l@HVK`p*;jQH`H*8t3nI(4R68o_6nkbV$Hz+; zk&FuM`{<4^U^9df*ReyWU(xOSF*ku9vl+j4AHVRtGpA;VM-DE)_SO2Vkd6-yWbxP~!RDa{llxRtYw@P& z0cX36@iXS{Q%T-XvE(U`KHhwUK7roZ!1|`u{GIakMuR7RzRI2}_MWOw^a$)A;|$fiQa%80#Qzg(+_A;rnJ*i06KvRV?;wIV0K+F z>(e(0lJ;WPcs&UcS#_ntMUJOPKf`C&|4nGfi_2mXeG=olx28vZtB&80!{VXC&qb++ zaIC-aE4W_}Cs`{XRb}~nFA+<;XZH^Bbnt`l zY9p$J%ZAwo@6k2pqPRq|D?dcQEvP4yB$93Wi~?U@qBqBG)gLgYnY0~>f94tkt#$8S z^}jU?Nr19o4>WnF4?UP(e|q!cuc`sMJUPVWk?;?^W}<1 z%7avo^>tx+1e!n;1Hd$Qy2MXpwh3PPWKsG2!NkUcY%c~7eCjpsb_d_Ks#g*&?Rm!a zRe*YeJT@b^pOp8P*I6RYcNvmUD)QmQ<<~z!Tzop3@tqqj7AVfRqZvx@gHy%vgfy}T z099~oyaB;6b@vrPoC=dLRycy}^W2AbVRXdd$zgx*+4g1y=NAr5xr_1qD~LdJ49E|B zqjkpw&0Ce42RsZ}X2s$5RcBo@zSS+Gui4+3Mqg@!9ny;V>uAK&ri639rt4DdZ2b*H(8* z_5RX)hDErt>5;_Gn47EL_O-@XPYdo`(R{347ZP5@x`!Jj;7P|Orfoi-tYu+B5b&b1 zF7<<(47!)>H&ZArN}n&>@@Ln-J^uBK0!LbH_>k<@7=c-^(uPK%+KR2s{{s55&Xt)V?UqfovFhfj#wbM`uVYs&} zEC`xUTft=<_3}jEE2$=QdP9qP<0FIB0h4m+zzxBB@!{tgNKi+thg4Pg+-PqfWBwJ; zw5VtXwHiGW%taEyNe*M+j@`P$Gx?=dZx|bDo9UBpb9drmQp7LV%5O~<+VMPji=`@a z%m;(t;v-iMBQ?4GGXU~4tqV!-{JQqK`=Ce2QcZ3@wXOL?+ixy$T`vkKemOQV{bNB7wAtoswO&nr!7x^R29kPnT4x`UC*>bphZKA6IMOWs($`zA@cN?)S? zv31wc77x%WY$S6GQFRSN`*x*<>#seonmjSFum`_-LIS7uc;Vdk|FV4m$o80VRMyvm zy0AG%=ej>LXGpCZ+7mg)hPw;dy>lG^qg_#^{nTxe97iVsKSdSd&`pMDM5hQyDN_#{ z4L;~3omY8j!UgCgSDY`SIz{Zk^*kKzg5w?GTWp{7B?!bWOeZmU%qls_s1aKf?du53 zb6 zyojt9I{%y=;1^d!Q>6}M?CTb9w-Y2hcBzS%lMMn?8qtRNroaQQb=)&$E>^-2H%fd& zt27k=M|aE%<|3m(vB2+5IzVEOHIq7-hV+Klr~^0y@*d%238{Zlh}nS z!?>N-OiqImm^iirI-dy-V; zuu^I01bC#{Xh2HDRX&kSZbSf{AYtXtXkn#(-nzhVVp_x{C_e5nLwo5ezcN7t3>D;& zJwv$q!(uu5GK{2-JJTksEJL5O2-WDZ5SGKMwdFK=orcxx6SJWLL+bS}K)mtgPB_xj z@8(@M17bK}Z{PndLi9!lUY9poXBfawQf%063Fud1klx5ILkQroBUqY5AO(<{9XG~t zdJ_E&ZJ42W?6=?98{Dz4r4M*B`^WT5fBl)RyfG2s z+i=v7$%kx%dulHDyY;DTcA$@fIGFoD+53;o@bLg6n?!sna+65)QwF0$V|N!j6Lh>f za3^<5D(V_DR~3-3AJ0pnTv@yX(!tk2W$bKFZTKH`*%sp5e=Uz(^m?&!gX1TP!Nv;t)l1JC^2ljr z_oz4dymPCL9rV^@%74S$8Y$MDxZox78vs%RvE}vq#L&sqUZ76hJkJ77HmS+_&+C5Z zg5+d+cfzmZ_`R4LmJ;|=KO%Y`{{LlpYvIc!IbiYvyse&O4W&F6_WuO7H7Vc@d;2nC zcD+qS_p`VxbGAr(Iq{s>Z3g*A+3}_0bd<5oKnYP`_*g-rh9_f6vR(m8Tm-#5PDnY=51Gsuo;ghv?(M?%6#wvRTQjfi7 zw2cBSYgRWOj$BM=W+e?S-st*5Wo)MM^PwA<7lmKN4(>)1?6w_0jQ@aJnEnU+je$u< zG=U%wF?8^3JH@{eDpd6=8t55re3cD1PtG9|wkx4UM2>{o8+mGL6aUW(@TIb_I`s^1 z6Px+_h~l90?>hIJ)U zofzOmcPlmmFjF{cnC4B1nAcp!sJAYlIwWZVgD8Uddwm%a5nxX7q1sFj?>};`Zh2zo zq+wDtB`t1=v_CEe7n3S1aOMXJ(>ne6*?)q%Iz3eK@}lc4b=8YyXGb1xQy`WqZ#yNy z4XL$6z~QBoNCMI;~# zcm-fagTyxp&Lu}>L3QX~68`UdhT-Vyu4^RQ-$%MM?Wi>$p>zOQGNTdjkna9HUtUYK zCrH+94D>lhMw0Ehp5LYL3kN)I5ZFoS0;|~qDFPo|Dd`P)pl=T%HV&MQTazEZuM#ju zMhN)TOfHHk{AvFG<;v$0fS2+D=89CyP!o6cxM|bgA- zs2G1%FkcgQa=2*NbK;3EaYzVo;C|7f*zo4#_pAC|Jl6@`@I(Z$`^NLV$15%~XQ(eb zOJYjgmSJ%+m`Zw5;fPrwsM$Q5&E(7Qw5V8XXQa=x@5HSDV2*&>2i3B`< zS&iNxiI%G#9D5W_i5QDxKS?@r0Z&;X&5kM~a2nV_uM76TFpy8c(Q$}$c`^?VHlxk^ z4v8LLk;p73l&s$)*!E~+_O}gU$~l>#jNk+!v6g z2iAcMam&3%meWw_7k=23II;8ENXMR)>s0Ra|D1J*-Xy?#i}B5}uzA(?7gG4;bc$*+ zzYuvO#;pJ7zxTR@g6}XSR(yUzu;D`U-cBeH-|e3bZY(ruf<->p7qYL|nIHb36^hXdSyU2IffR#WTBaZ32 zAiEw?OUb_x_3`K~OPbTTkIw3|5Rb~1D7!8|+5#sQ+}%K<`hW&BRFY9@1D4wbc~Cej z@44M#npJvsgW`p-TDcwzNuL246K z36jtv^&r4?=je2@zVA1`TNiXLEO=>nx?AyvpxGSVzy`!|Fx#&O8zm+34-YW^58jCc zS3`IZ)bVMbAhL8^TMPuDl3+v&JU2|QR9gkf3DlJDp&Pzk&!2_U`tcp|hvoGS0ASDa z*EP%s*!Zl8>z;szmgo$XP`9&cDw>9Y&jJ1kgTq(y-wGMw{uHCddu9*@A3!H5f&j4Y zGmR7duINivH=&)80SY1r7G_WcJxQ+LGJMJ46vNdNlh!-X12_oYwNYCN!;%Gpsz%K# z;0e#wl9Ujp%8=v&wTBEq4QIBk5j4;4h$=}@+zJ^8_CJZ0s~!Ama1+>9y*16732z@ULvF3wm zYCX~3RPjueKjs&XbQvkcYd4U@DalGK*}8AYC+Iod8#UUWNl4 zG=U!y#Ee(r0dXGgLYhSk-~Gz{6NT;JT?}X(JCGS@w?>AlLYmeipPQsd+pKaa-5)av zG#+DZF1EP*RY%>RZ;k{!N!gY!WiQViWT}bW`aXaE>D*Z~)e~8vZk3}1s9>YQ6k`h2 zd$p2>4m=IO8XU?Bf?!U@d)}(w_wj${)Cpq0gbquTvVTF@?~fY56Zk~zSp0VD{bl#xN>3turB*5WoDvKGlKcpFC#7Koa?( zC!s2)QVr|U^_wObTxD2TvtJw!khp<@VKym+pgUA89znag6Rbv1gRkrB98Apj{;QiFs%nRU%8cnfOk~U z++`IVSP+T6hft11E?5E5jZ2)ot)3=qXhlWL6P+V1qr2&Tv`gGm) z1b468#Ljz6T6io~ZRkNox#gZ0?1!j#*LO33SsaN8YR~NB8LWGPsQ+jXM)7~i*y7K* zNy|c?O!_+>7l)ENS2m(~L0~q29abJy}9W2$O8`o zlpgRDz;hE%1XT;l$&YznW%*it2hF={bge;yG5vy|)QoJsG@ZDC4N#~3aze;JTLx9% zq9UkK>wJ#!0MTkU5&Nx}?`QtuS2@(FStZ}@wMz=?&@uos5QzB0Dig7Og%1N{P2WfJ z#>YwtJWJ-Mm8$P9JEG0?Ptu^TO_^u0Je+!}U|TuSPj#Vl6>y4Lmk0*B>|srn2fg_w zEV}2(YhW@=04Bq`_3}Q&vkMjGYDpLFkd}RqQ`x? z<{|sn_Px}72W416y%13vQc53ymU!T5RHLNZyOGp&g1_Gx;fA}U%J`xa5n|c`_V#MzEqcL@pVEmkV(M4cDh?9ls$IDr+FTpo9k$^ zdH+x1h)N+vmGwDhK}tr@P-KhC!TlqnoRC~l#;y!x(5_jf&~b}bAAu_eD=~zf0t1Zi zRLbXrsh<&1^58*~Pc1g8b2|>)+YWZC<;m6!4PdOLmO$&7of^-xBUc}b00Pif`sB|2 zm|Fnf=cb*lp1`3Vd6+V`H{wZhNzvfz@ly(Sd?6cHW^_|J)OOWZ7VHM;wnZB5cpM89zTW0r3*Gy-i2{7F9B-G!PDS6toA9Wt5b~~~L z&p0!j=rMWf2gL?)Y_AFRobvz$FdDdZ-R2gPSq$)YX`T2@PyCaoeTeUAth=2eY*pv1 z)pC-4uSCG!$iH@olv zMEmt#SuT>*I`U|0n}HBHR=}-e=!w^>s48t@M+&>_I4SecoE995X4{Yg7O2r3Z%-0T z=lw1+6(C^i1cVvb&%h70z2+ay?T!G(J+@cZB@wWRVX6Og^a!TqYu-Xa?jLQx~b?D`Le0`8+o94apeq)*f`4 zte|Hvd@9A)CD99r*9(ZVm|>Yko-rGEIW7v?kU-WByG%IN9Js*rO;c`gs@5V|)wuV# zMXL$RN~!&FrEByoFv%flzyZs}{|vG0XtH|@XuUSsxUq{rC5gNx@kGChlYue`ti~_> zMKYN>G7!R#F76;1qG*vl0}cG^e+xXzL5G|-bIY|>d@t70h#b`}c^|(MF5l@Q_WE&Y2_412J9%JemQNaA@ zr+WxJk+r}I9_NDz3ZT^dn=8AxwAj!40NB?98D4R+mp?=@LnSCpJM{gB!J+r_j9`xP z_xzT1hc3(LY;+GOwmV4NGJ}i!b=K`b=OnS8MFm5e#(D~!GQ2AZtDwH@8~-lMOq8|# zaC!NPnCGfN5ov-8x zk%~y1t|fN+J{+$V_RoLH?Y$d?`q}4KA6OJWXvKXwGO`8o(H)jzPYg|rAUALaQ^D9% z`CjCmi`p@n04FFFn+x=lNR$>EyI;XL6uNgSNERNqU2tK-G-qlW2}E)Wjt;E4JolPl zl)|eiGjZrrbhZ%L>1kmW*J@gtZ%v6CsC6kRmXpZqLn$oq2BljB7n)UNW~gIbnyj3ZFiHe*1w>vHvM1{Vn`uoWWaoB%vaX z-*N+=Fz|Qj#$B$@)3{k*S1me8lYRGVwr;?;OHwbbniw-MZJkvYi_gc=Fe3o$$}|sd zS=HpYf$2>rwMC$k!}STquKS-IM86JX%8z)WUKD;_?d0AtK0*laW0@1%;WvsIzJb8r zPJrsoP3H4X^!~6)wgJaX?_y<2Css8H`o`sJ_RMGp+4yq3vTa~NylsDDX(VFW*KShGW}(7>tt=!E-3ek~z1Lb=;N+33w@*q{sNDHxn716QeiT3E~@UR4f zt#JC2fUR)Y_8yQ*i@IAH$jqj_T4ZwC`)4=qgMiR(yfwINe0mu~Oh>7Cf(*I|59vlG z48IHz&bm;d;7h>2(K6h}^ri-+;JZFt&d1bN1MJQP@{eA%uB7I>hvoS-mdU2O3%iF9 z_Xhi!Sx7Sb7%L^ z&jyFRiJ?yYv9y_IeKFstfBlk^M&uri5{2jPh5q}p9^bWNg`mqFN}7u1{G*Wh&EE%= zmzCRq1N@A-$@EoiUzS z3&&lceX{GZv+|@lc6}MBe^rl2XIEv0jJryN{T6^}H8fMP-mlE9Xcw_~LI1UChsFu#D@0vXy@|1tx zQp%7pI={Zr;UAvI2oOIEOAQs?{q%5nAw0}^7h#*P$5LunJ-VnANK55X`-z|C`R4oW z$~KJTa&SAJZaja-a(47Izk@JPzh8BKd!!*Du*V)1r+F|@mpWvTYqJ->?sksNm&4wb z;=v*zRovA%sFy{G=C>v(rvkUo1!+$1HgwNiOA&QPOPzHY=rSCbef0;^b_rX>kwMH= z;0ZoPKHpDHH6)w@f9aXnoq(gx2K=LNoAK8J=8Td7F_p*w2Tx@SF#8)j{r^Ic#`EjWjBP(^r{9lMJc)*h&otvY4AbE zW@oy$Gr{o) z{#hhDtdIV=0+tHJ!-3B9A53<>nvk2T2W0#2{^OgDSMrR8I~V&mt7@y8TD-JdcZAZr zI8UG-9~RSya~(-5j17t=`VZ*&#l z(ii!6&^Sma_#t5X*nkas{ZbgwISnkWSL(>08yH-b>PMmZ#)nrez7yc^CQ3Qfq$;n! zG5Nm9Ywwb-9{M)7N+=wLeq=sM<7$Zz@+_)*SJTEP%xtk-&Nmz@ybQ5Z^EI%5uF5^P&4jaa$ha@SBPZn;@QA#%$2IHiP_u_DuE1$Qc(+#cx=j(qi-b4w*Tl|s zp3sTX^;!{9r_`b6G{mwku-jstuU}xzx2xHizMe3k_4rn# zxFkS9e~Tw#wn*_5Y?NrV5iOg1W#uzw2z}R2gsb3AZO6rAo9KbD$ZrsMj-a--`8 z8uvS*u^oiyhB#fHU)oiiBz_oGUN2jI9F`Xi15xrn^q?2wB*xcg&#Jt7;|N(jFQ>@7&ADX8&}4zdQ|quJ?6G@OvaUyt?#Q%gGd%)r4}->SKnUY+Zlo)A+ey}g|-i;B_l8UF=H zaOb>WN$0*e!~wfhy?*;(CnvW8T*dHXksb}x7LG5~Tvb}sg?p~d4tJ-@?!jI@@THs% z2B8NHubXmhe@xE{lH+iqDaW+5fRY!;0&f?CKJu>PTA!(Ml2kMYLdL$UOI3`<8D`Qg zg;w?Z6$Wq=Y}n1@_5L35}y|{$FMt z6Y5g&Ww6Orxt1Zh(xJID?<})3XXSBXgW~6xtgAO3vx;h%Kc~>q;47#!#0`P*#;Ugo z>Sp-88d@+E=HQfF-1_su=>zt^)?N8E%`IK-Y64}FB@SmbQ z2EJVRNa$hui3L!pb)K0O3$hw|T(e{NmDw|_M|ZKSla}uzB}Y3#NvYf^T6ZesyF&;@ zWx-G70CuO>0`nCSMGOmn=Uw?7)OqO-)3Va*QVuMag!;ztPEL?*`x?cVH_xB+)>u@& z{`nwCi2D@Z4HKOkb+$qp*4>VZ#1+oX4r8u1WaZEO9TbP;bPfM%eJtCf8(}hs|B)4f zD2|O{ObrYE`BfG@=7~j^ETPVLIG!`4Ft}4nrLkdgxZeyB5AijUs{$H_9|g}tD&#p& z-b#h{_H^Ykh!LiBOyFtbRuwUr*+R4O| z7XmKG;Sdas=F@hK@IgArGk+FRebt9M7tpXcT~oIvF^tOCBu2 zCd}bW&R?pC9J42ixSDCPx{`kv!=1W(uI8sdfEW2z8@%6v+6{XMZ)pr4IPvp#riRD- za654;>gnRmy5|LcbR6GCr86?6-TVuEZ+Y}07vDgYhc$-q519(qXHla{wHKwmS~8lL z8_5Fgh6h|ZL$)<)uG9DTldM>eee(_5s=!%QC>@a0#T6<&=-N2DB z6hh;Aa*qibd?K|uRp`<=;Y{;LibUG;8=D&sRh#;ln-O@(POxyGULR6q=ZJ58-uHiA zfbFZAGq#b1&Fk53rkUOIVG9t~o|~-V!&(<7nB_w{n85YFN6x)}J7M#K@hsB9j+_g9 zkf)uNR}Z-g3UV|x7pyOixv%xo_-pacDFR<|Shh5mWGP_HH{uuVX*Rh<*4L8QTko04 z?;X+s4}8#TLfwvO^Cs*)snOW2j6y3nkl@SI=xT3zK&X;i4E+Erev0J=vep~@1e7O*z zU4wv`Mn~gK+vqa2A{y6)9Z7B)l2=)Ef`8*%*29^O;wwV^J3Pk>iIk5M>xu~Jc75`E z-^4ItMK^z3MLw)7A*7d1o5ZGpOrtPd`{TfJu`>a%c2fx5f&_uWB;?jB%IhBI*f?7Y z5Ajpl0I9q{r5w||euMCaUSOSfx0V*fFt+Jyd68UX+le9Fnv3#_*kt4RibO6)&z}_R zwpssYt_jm!4I8C`j4HfkTxW4Kb1ZHX&~5WV4dL5#03xT{W+yU|sf<~C;C)FNMaG+Rc5!zz|z1yTuX-(&UU49YU^m%ZHvC=u_Ld(MkE)7_oxSDek4Z$mmJAC~ce zQJyn`m-e}{>I*2!Hmn+nsEGtsI`ZxWZQt$a`HSe>cU%{&ZIraFLOHmXPNQfqqKM?~(#V>=Xc@y8IPp@%l_G|710lrCfHsp2hocs}9pp z>&mSTN8@|^C4h6tUGWw7>?<0WlP|Ch=geBLZMQRcQCLF-44nLFKS@HO0xtb@R6X7Q35Yk)u+l^*wWY zAjN;W)E{aWL-VhpKqr#H1`)T)=EX?0V6NV6mYO38UXigGZEj|MRCU*D7irPI@{^mO z>`w{2NdGJTLNSNr%}+a}rB}i~Etq^55kX?|Go&MCHGAF^N55<9`Fl6MWcuO|X5Z?Ae8yXDE3j zs^a;=v{!tEAf3oP_TMR0K$(4RookEEQZ=!>N5r3XMy?U$II>VoO1qZ@lK8?kg6r|~MDIuw;q7A67SJ-#J(=H%}#v$D;9!NV%OgpvCw_$cY zZBzyjj?qQU9r1Z~mGMPYL6AKOWRzQKietr(6<&c=_=Jfa$jv@3Z@)+6UqXRzsT{Gr zON^)vYH67N>)A_7RkJ5L?>VI#*B4Wh1ZrQ&ngvH+lF3jwT*CIe$UJ@sd*I?!}y<+;WG%`jc=zA^X&eEIFHM{8MDn)Msdu!{|Z z*d8muav3bW{B`N7L=k+a<3K4SCuxiWC%P%k>;8=B z2F{^{qM6GDs{n3R2cDM4Er)`d68#~9Ba{SY^DNT;90c#e&{l{3QW=gxR*G=c=X&b3 z%m7pn!NeawVmf%cQ5m;S_VDKk$#gKP>ge0SA(=^UxnSs11z~igjGT@)g$I5j*5XkN zSE`^+;xI(TqHRK<|GJ-u)MBwyoNO!-$xNwY&V>mA#vcJZT20-iIWs9_=rpV%wzn4} z#0_U={;{lBEP@jm!pk~p!a)b}ltaRWjJwe~JC=EFl`-6xU>wjqfvyN%GF1W~RRr-Q zJ0%)vKfM6ZE97SzdUj@Jo>n)Ny->7eJCKP57z<{3b<^AOVHvKsAe8i< z%U{0|2LHm;22G*1WLEuGlvbWc{D4*o%&vHQt@wh&`89|JJ2ETZ-yq=zO~rsTZgp|K z!;=e`rr&lC0Wpu~?|&>cNs2?<6ymhyKCY7G7ALy(*~ge)|4a!dG}wL1z-1ttAN-*= zS92ItOyY|Hjqtu#>PuemK4V7m^^ff>WRBVN#n+TFzw^I-I5}hBTgM0ZaR1>JmX@OZ z7kf6*Tjz8EnT^dSroBr?cr?xW!7CM{CKjKXn)s0 zQfCDphr~yhJ!33Y4o!S*dzBz3=JIvL@k@d@1sKGScsUc@7%jv8L21*6uPVmoErC&i&>IAy(pATIV znj)@>7+tf!n_m_;gttZheH%hXX68*Axk==0`89^rnZh1tCH)g;9Dw7qxP4%6WHyzB zRNpes;^L=!@_4H4?uOA)y;l3o>P@W}nCyz;Avk*dN_4FV0i|X5{Q_-Kbgq|I)qU$_oyR+wgswe=bCSsNSxpv6~mOE zL8exJULZmwd=`yZy$646PID0iZJn z%$68h5G^OB{r6X+EJIxkRIk)Nhlnq~ZbJ|!v48K@_6^{QoGK?c*rlevO`|7&5|YHS zt$7J!h|haUXHtq(>91q@HvAqb(S*0N)Yc8P&Jm@@uU|JiCxRcnc6hKA16qym^AezB zP%m9GnHViN{MFmNrX3&>2vb|~i$7hC?MSonbb}!QniSh^R70q%r{P_)W3&UroQ$^i zdsaINQv3YmVDp&zYpDXNqP*NPH8G)zur5PB^8<<)5!xcgRtV=PrPdL2_<>Up7ar z_4K}B(e)ibW>RVQC@m4Sk)bB&r5Ea>ar?imkA^3<%!O6rd>0IbP!c~GZ@yq=Xe6?C zgXD=109Q%O%t0kvTqfOMMinibmI+dQK@;Hr03nmN#vGX7^tzxHk+m#QcJGoH-<8|` zEnvVHA((o9K4dhF%D=sto7n?^9f~jCgpo5E(13&_h>7m2BmRfeRm( z4(e4n9>RRnLj-L1G8X495Z^sEX#mK1{~#w}rn}Bo zwSD94%CAvCFBE?wsC1=g6j$)<}U_W@G)zuc`c459vP1Z?hdrIkMvK z>8Nq@?Y3j@{*42{dxD{q%$S+!PnL2Vi=L)(tncg_An%fx96uI?^mDjNf;@lkqX*Zh zy;F}|TDd2|bu;@s{DCETvJLQ=qJ*g3)3%4$r*1;JruiFFQx+L@#&{BxI{o0Yycu(F zjyM{53swHJT7@R`*FQjTf#(e^Wn;e!L4v1`s`IgW!HkzQ0{TI^{%o*}<|as((a-Y> zc?$BBCQj7IXzO3ge5WY?Wt>|{fgbkWfrp@|3fyAyHIMFhQ8T*UAph*H)ZGyAMNEEV z042#A8>N+7*zQ#<{NQlUYlMfR;$>dUXm5ahLhL)kw!WG(b={&$(^Ubw3E)8|v$lwU zjt3J`L455XuSg^vFxwhK!u%t#f9aD>qTG;Jc-iF&%g>a?n1MHk-Q5D;KiitFmctLK z|2>p@5;X4O&222UIg3Q&xFQMq(j+*xY9O{Do&|v1=i`HZ)`N${UzKVt-K#snI^wiN z26bZ6hlVXr@2a);@;KXi|Cs4N2+)7RiS3)%OT#L06bl>+;%?Sx2(_Ggl(g``akx9` z)pX=gK}Bm5m-tCc&hOJx`poA=j2~>FJhi@)OYPd>W>9zy@ZbY(tOZ?ClM?uR@h<` ziSPiXi5O6HI9Q8PR=d*rtxTi@zrnOpWVTRvwHwE5xn}p)spdevXoPqKtO#I5$sYFS zG;K5K-O6=Mr2w;o|c@V{QyMW7;4_?hIweOfBKz7qKR zwTcyPMMhxt>^H=V?8?bQxpfEzkfvakcMpH)h~s-?Sa%H7y>k}l^~gBsc|qEF^Z~fu zLz!t}>pt-Rrgx=lSoDmrv`iPAP3)K8->4TPr(hY4ulao1P+e)f)6#~a8RPIqgQ`#p5KcgcT z?d=7r9r5onzV!VJN8;MH$C#A)J{vdOrE^v4VMZ9sCewJAnSJcnjgQ2(R{HYesZxZdG4$nQ>!cDe#NVT(DVqAamvfENq2qNk-V zL8d3gue0JUoihi#1rvm8)|rRK8YKDnF+JuN%ZG)+guCMN{`x~ggh@bleTH7QgDpQrUGe1aeyj*l_e0-F&^LKcL?!li@ZN+RvpVsA*2>kF! zM@^~QKR^B^eNnfc;{0rVJ^o~)K<9d?FP)k;e6b2tIXh;ik4$b`GgO=hCj%3yvLDiWhv%vrv0Xa`Zl_W!rGSa!# zJx`D2IOZ-KG@J5YE7Tb$FfYihE+%0?+1xfYgZ(Q7lq`}TK*=JbZETYd#KR3wj{ojQ ziWLS2Fa#h6W_Kl_kgK!>wWg>!Mq3K&nRdai2RsDkpJ~=eAe5;-p>-Tl3BD7h1GPg> zwjuF2kh0=nsithVxic%>9gaG8(My=*;EFdtccG&X<4xYu1KN9>vlLW~)m4K(?%Q@y z38ce-%V4M-%3DM8n$}P_oDy;2Dl=5%T~xL1ky!$~g4gv)CHfJu^+~yI_{Hb)r#pC{ zRMEO!YvkH7qrDmeKr7hNW3ceZBe-nv<=>8wm&J8XOk3&fZ!8(YQG)4M*y08zR3AO= zI`13Z8A_U-V4gH?SeA+wy84J}D)bkH4_husP`|-Vo zDlR{#*Las1EiE1~X&tC1opP{T_{YC$)IJDPuH;Z=28|Pd)WZ($$BZDB*XUjKdu-n( zEXa-)aP&MLWdgd?aQA{C?cG-4MZ#SE;w1q_GJmGYQi;=T!Os*2ZpC7EBml3xEa<_A z_I@d}b&bCyx3LEi3q~3No17evC?d@KKMMii4*(S?#;w0Xb*(35U@k(~1#&Ih9pEs; zwHBbcJ4lw2)BY96$KXqUrS;gm-vvghn#a0X=#NK*2@^u&eFwqT>dQc6KZkX@87=z5}OHi_z z_N@seCmD1U&)Yo{Tpog{NEAhB!_a05E_hT=z!^G|?9Um^KfOj?azHuDF$%HL_hfTl z#mC=&GkZv=(_>!sSu9?OyA34&> zGv^=`g+;MNCG*nbi|IJ7i?0=An=flEri}Kg#!8Jyp$q6RWm-B1lG@+>xg~N=_v*Y6 zFq#+wBCxDDiy^R(ZdgdCE&#+#G2tRr=J@As!>H0_8=#c{ZYFGR$=gSdGyxP+Ed&1B zC4SS_ce7ypGk_EvnBcUJuMoEg0ux8=^ZBo#m*{>1YQVKj;`V+pipljk@TbS_Q1X zwfN_z*bwXy3LtBVq>ZbiQKs0DgTjJmD0C)2bBxcn!RpZHjtrqkD^BD0%B)wz0W7f^ zz5MtP@4D(!R^YnFJtx87B;Yj=UH^Dae9`Hvp0cDg>1BgDI`WF?yfTV>HHe%-OH|BZ zi9gWAZ4ov5@1Vg!R^7<13paS3hcV{s_YnzQHifjGj^Q339wnP~YEq}t>tiLo{1 zP%$%8YK1r??W-XuG3>UV_3%#FiQfc?Vq(u6F@O z3B=lFQwGrXgppZv5+YWKfc8goo=@J7G9yHq+-BE=sy#YVj4W7Eyp?+3mI9G2?8{%sK?X%2Xo)bloRFK+_Y?XcVge~E>hEYjt@!I>+I8fXOC@32N$3-Xl{t_;{e5LQT z{|+x(Sq7YX4717JF~kqa^t=0^9FX)5t}ehnsf;s>cGx_9UZQ+FCa!IVqWu7s2 zqk4As*s4|=0{*PSAAvlz?slVk+cLHsJPTwOkNz$KbIn_6gnrHsmP z_3fKcy61!=`x~ESO*pfnKP3a*vkT52-z?Xt5zt}g=C)?je z#pn$Sm#z&5SrQ!#wdl^`jZU)gvg3o&90w~U3_h@^ST5&C%(Hp>UqJ;TS@f_2+ny)oP%&$Na0<@S3?ewRC z{j&hJA%4J>HamP+Ab7R8aF=*}wNG_-o*X)FH!O9o>YB*N?j5dO7d_px49HD!iV&IQ zDa*8#Q7rz=(Jg_^lPv)fj+PLPH0`k5TqlozgK@_yzc>|l?P5~LBs!%Qp*TdZd(3X@#D z)P-ma?Cw9IfxP*ST^Hr_r+&;zuTzf_Admp0E)ybo5A9DxvdaLC4R8(9 z8H5ALwadLDD;t`kL<*Pm@3TD}C9$n->3l$T!$xoE_dFGHhf#wZIQuwc+WU9*+}! zt(jBvxWEC)Y@@c0kf?@TOH0ei_(nuJozdU6#NFp;%6w~}kZ`l5r1;~?7SGtqzZGHZ z1NUlpg|Prs_sneqrewZosfiFMyxzTvw|qIKdsD*FeCFT=6bz3m8vdlufW9I$PH+dN zhnD-hFF-HkGBuiD#rSS;cBZnnQm7BmZ6>ho(d-e@nZGqaFL8-J1&5L>nvvVg;z&0g z!UB^TDRflkfef{-Ej{tAOqk?+`9hemg$N-~uEoj1wuF>$C4wLQX=pGE^l1n^#IE*T zR<0)}i$yfzf{SUfv}P4|vGw(ll}+slh znV_9sPLl>aAx}4oQ0>~hyt{p?Zghj7o*~qyGX@~94nRX)GqqPn4xYEj<@7FIURk~E z^>J3ep4_hakohk7Q3L%v7aTEabX>P962cA6jPy%43UgKMP9E;-3nMC?F5z`r&KUU@ zSK0nM0jC8G;Pt!;druq3cjk$B4keVt&aXkCd#KmeNelz7DDM$0_-fI|}a1h9L)YqFLrqxegmLEAy zjOZvGE^oTcfqRit8~8@BO)oP_=>L9J_9~_!657yy8HAbme_nuYoVvp_&;$Jnlclt{ zgoSGHZ=|q~4e?i|ZAu}10NOokMEB0i91l$QL;waM){`}1<*a2^hlaO$S_mL$jj3m4 zZAX!~lW3kFzy0}9S%j--A`yc1)9Zncb>LlF4i`+J1#kn zavHQa_DeY29@^!Fvpy%E>FL-^Er@y7&|vG?zt6xqL*n{^!Gg&lr;~JPfdg5$aBK)G zVptOI=pYATpUX4^<#9KFf_r@6d;p zK8^HM-*}bfP44SEO8^Lf{ZFT3VMV?ttEhc&9E*eK#;a?_yoq(w(s00povJkcQ9g+e^`1@3o@q9Dlr$Q`j+uK23NquC$1&GukrJMqwiLz*$yn%o~90@eO z!OU!fC3YzDJ3CJViZ~1CpFu*~jEFh}^QSNkslY)56vI)KgU-*2KQl}j2nN~UQUVIX zBuPDnKuhoHvu!c{n{L>i%%=ZrB=#sraq8K9nsjiYGkrlqSzhMYtNYoH?~uApnV_6$ zwlNP_G!yz6iSXW^g}KN{)6&0lQ$f_=0}x#nxcsuraFQco7O!^zpJglqUQ9wNIIg65 zngq~=3CZCpYL1Ql#mI!4TUaHTpd+hfiGSKaR0j_nXbhiDl4>N>TznO^g+yh!LbZAfU9jZx=8@m4VgxneMq$+F7%9fI%F|cv9er zIEUM&gMqGM-49a&@|^Rnw?Vi2w<`|aR$K^hQ;f?tq*mcoIIsQ)clvtMN&3H&r850$ z^>|+=s_&hg5M4Vr05S=b9rp&!yG+A7M`3CH3kFL>yi3yi(L9GF`)maL87#-DP{F94~|fixI8~T zF~AC96Y^;hRC2`VMlweVya%C=U}Cj+O4 z$xO|`RS>vpqjc^r4b9q?Akf|34Ks~-R9(%A9ys!#mTk}~0L|dG&kd*0AK$5a5R7!Pzkbb!RZSl}(tpx#RPl7&W{ij*iG2 znjWuf=y}|;gt!a7k^0`OhTbLEUurcTcf}7RMGgI--uZv)bF9&p=9K<5YlF#tpucTP!X+BC;PoBo^p2>t1RR-EX|jXR+VK zRlS<718FVg{K^s(;J0(?V!lOFk{fXh)Yq5fA@<~cp*(>jm3FNToV?bCm!nteSj{Q0NAF$}I9JPE?Z&gx~!>jI@9{1i0kj4lqR`ySx6} z?9mY+b^6*?3`y74-+TkXTV$dIkNgeMW8B-P#)L`al(zW>flol}zjB(N55B&+F=MQn zKq?@ePJgK8D$`$pYfqa82m&pEJM?y8PhvWKUfGXQuR`6}j7kV4&90}cFHed0fpuc5 z$kEhh%A)3^zn^0z`$?PTIfN zoc23C_{PrLO$I8rf&-1f%hQ4Kv-+k*K{qe(N5d@E>jgd=Ya zh0IX~MdlJbk8)vxj>4hJgN8c}i>15mh%LT^h7iskAs-yF0NdFYw~&CPvbouEen*13 zbl$*>0xw{oV7xjE2L%dy2YUC7!9ONWH*YbZEa#oO{d@o2PhbS#8LvJKfVg>USfH6_W4)7K&(R;ZWG5rFKu8FR6^sVzMOhs<(VE@pLgY1@|)02s>T`6qsV zKqF0bVzfl4f;}|5i<}M)XUlpCk{M_LL5XcOIYBRW3*B5jNI4(j0F5}ex%NuW|fZgILfIkPn%6WdbwNPVfg;e7D@>L$ag~pU0h0L zKn5A?S8H=$gkBrJ`f@NCQG*gF{K;zf93;JxSt+n|iWK}DzwCoNoL~ST^47bp8A`Xu z(dcjS3AT3~Ay*zkp+Sy&3>jv8XHs zvP!^uH0Lm4YlDWV>F?S0k`-Z11XTw63ve%O`sf%>R|Iz5%K#+#K2jWXT_{OR=>x%p zz}kjtk=9H~PyliX;{dOL>E^-=o1v0}1fdu*Ksmjsrw6iZgQj(n4ZcYRSw?Y5V$zyP_TTa8lcDAh- zj?*S1=2z~mz+~iK!qaz; zgENr8>OVMlc{+)#QM>(TWzUcDU#M6Gai5=Z<8l|fG=UWQZ0nf6V_WI8W@>F?XrB9(XSS+(8KvIQJ*n1Uo&znayCkk z335W}>Rp*^Z#4Fu_AJ=>ZOPG!-F&W{zc*>nm-}EUm{>Jh=;z!5m;%ASJGT_uNojYJ%x1{(sMlBT7Zn3u!uVNvJlgj`7 zios9l?(~i>p`kvJ$DFn-vK0o`^|UdN_jm&C&ur;lN$@hf6O(>jl^S z0^e0DH1z_5`Wvqr!>>kbtot*<^NqoG?(Tz^M?VuP?LJD(mWLAg3V%8uuziI-X9;xY z{OM~1z*2aq&f-)}#-EO(Vf_k{HG-I164}y41C@E*G)|><)vOrRu$;HJa9kn<5=HBj=hxJ(SKy`s zMuXRbur250$_9d?+aJPHKH6R>{|+P)1L;&q_7Jng84s{palB;^>dE1@zxTB>@`A1> zi7+jcQHi)hR$f7qc#Z_e?o#2gZ(H_P4)KOsM-0CWb^#Ke=S*@0XSVLtt$Qg^&1m6A z*+NGJveuw-jewYn3i8Fw5z$DT^Qg#Gg^OoZ3G;^LC*KM8gQS`*%(IbkqH=qq_gV{> z-$;CG*Z)7BzA~<=<@*~20YRlhQo5u;8WfNYk#6bkZfR)&>28SwBHhwm(s1amLw7xc z_xFEZczxl=D|`0LTHji;OX{F*^E0)z5=dv8_UFB0b?2~z>1fS>EC_sHhASzipfd!RmxZ)(INh6N|ehC7I zPirl!A_JJ9N!yqn(lzpojyG&R0>NGHGg zu?zI!7v`_PSClugpRjmHU4QMCqQt}sa^i9_)25&rVoqDb~yInxR)zs`t(Xjfr0p< zzZ&+|5LU+^As@LhSnz-rC)|}BG4puju@k0_&e>~TU2Z--JU{+&JMH>-hKHc~8^Z$x zQ@FFtwTznmXR54pMir5l=g3H z(B}jHGPzM;=Bn~0w$92a4@6NKC&)}!eoOFP5deD|2rN;(xc6=4kp5{fpZaoqvm{T@ zMF2EJ;Bd#!T0#d(=&KW+XZ?j4*gp@Bg@N-1(qOC z#J5{bHp~dRuICCSy$=sT?|koR;vDPbo(LGvdP^Hr>dXifCRlS{d*sW()L{^7@dd(= zveInk(U=8lP5zJ{lL@quX!ICf-IbK4F86a zr|4i{e(wGrkv=foDT6<9U<&mskK)+&PW2&_P}gDVZ1X!d*RM#gmZa3Ujtwi1-g!;x zn1;vKZ2J_;rCI#7q6M*F(a4hsv%WEbf9X@g#^{9) zeF@i)wiiW0!QzAn8V-`+Jxd8LJ7Gq%ABh7J-~;F1Y)-{cy(V;=n;l32x(2cfE=cx9 zC6Ir~ZO072FseEG3xQOeP4mYZRECLFvJy?@Vo8`9fIZg6N z$+Lm_J7Qqh;OO+h^}X{H-ASt9HHvi_uVkmaIuZcJ6Yzo4(Dz$=ALkxovKWUyg8cZ;-FSNbML`fV%Z(Kh%Ag)?T$5uJo$QvKA5?w#zKL` zrK+j|S?nBCO-K2YEXy;H9ut&O%mDn?H*r#GO=KyRxwNx<1Gm2|NDG)#{Ze*)Yoz3L zIj+7)6U8h{w^pZ;GYLApvbJV&bke*g(PVRZI^1-`xeE@gqdgaY2kBQ8h~1~ve-nG$ zf{(M@k3(rS`47F?4UmLBQcp zFJS3!y)7reFh(dyd2E;@i~^Yj_5an~;A;?bKeIopUyg8@VqWWh zU_|Z?TP(7RIHSTh4+UXjFry7TqmW1Yn;QG0DLHG!5b#aGl!_nsi4t5UU|Q9lH5AdB z$r05YcokW_qdGkN7{Ej;2aSX{A&{R#CpDTnJP{PC2#=ai2~9!ud!&FfdQH^5-h{m2 z_KM${BtwR`eYlf9*~&p`CLJ|DE787r*qe88RhpRmv%ENvdm+=8d$AxXkrlWQUGy!q z$>76VEy5j>gC_7_90hEIXSvTMXr5EOM|r+25W6sExN$>){y~a*5Mlb@{(RzI^2r(dPEQJ=bNYc86GTc!5Qx4a6wdf4`tV3r||CU-&2CTGVe zvqNRAwiC`Tme;n!oz&4*qL-rNMoW{@fr|NUn!9AIy{IaR3$V#(rE*7<6S+1n)6cpo zD%yqn^_ye&h`=~sEIb_L%M`fbvZnI0=9GlKJ#Nk5!KK3&GizbdUtF3lq{~M)8^0YM z?39X}^CS2!?!&WuNjCE5caIf6X+?_VEZ=bQU3w2jhDC1E?T#%bgcjA4l#%`859{*a zDw3q@K4Bv5%9gF79zi(^5zf#r`{#3mLY2?G*cq_BXNBAnt9EG|U&z=J@P6FoF)$yz!3VAZcAcG#h4_go&}OapqlexYMKa@Mt6YN%Qhn27b<`t9fj_A`l3Nc zt9Hd~e19C<=u?tYYTw@KkGxLBxYz)(oURdJ-#8EC1uSbZ7>OUm2D`p%1D^P|ZCvq? zZ2poXTMbzC5E&%R2fcs+5A5#4kVIN2BCqI&+P4th2NM(hsg91siv`WD!(|Lgs=T8m z|6v6cm0p)c2-&-L$$YRxv_B08-V;f=RaI3hyJd?V!^5%if>)%Zo`Z2I&f*cF`e!@CEUc_6%fY%!yJf0Jop=mMLO#5!-BEDwRWA;t577kGhQ5>eLftmc zDpQqbsF1x{``E*u_fP)XPU`LOI;Rc2xHxNGjS%&-IF+$KzmwW>lD;`}SAk(jN&ZbA zD~Qw2w#}>NmM*Rv8Xc2dJZG%xOiG;bF!vh5YH5~th>Q7VqIyAVoMj^+_n>9Qk*ot@ z_wuCVyC5}r$WoH(D;hE7kRjsCJ-N&s6>+@?tE#N5F1H#U9cpqP&Mzp|4sJy4^tl^Q zBdN2PeAYcZ*VoVldriPmFg&(O^)F~$`xF$YH)Co#;}DebzqtbViF1xhm1blQBe+EE zT^72%xuf5&rsQj*QiEkwb$4rrdZz1Q>i=qWz11GwuS>As8Gf)c??w@0yno8TctJoy zJ5kq5bbD-9WFLE!Zp)B$k`VgtcNTsGqH5+dFr zJA+LM7qnJrFCG@5iJdaNqj?eizAN(5sXtua_E9D0cxH}GK%OT0yJm$;xjIzM7E>8Z zZA4zJ5AWwog_Cf_TeBFkNfv~g*w93zpGAsLqjT?)?fHp?2&6sBLTfzg^5N5MxjScv zI!!%=d-}AIm7U#aXI#@a(r`Oz4K^%fvz2C@QS~dayCy`qCGD?FlmDVX0z*Y$zQ?5Jf;|CYr8^22LnHND$yTAv3rKB(ICjeq~?~ED@(08X%Bb9O-?j& zL?O-1B#exZRPJaoD=Pta_xjwtyEKGkK`$te!^U8WyH0j>U0vRs186dma&k!T<>eDb zK0OQ>P*ZmyJiD?zTvBk}=XGtpc;^Dcj-JN3PFoyrkko$AHJAQ6J$dwmo1gN;5%N;hut;UD5-9% z(sJnV8lO8>^$3#X8u7d#~GZRuArQ>EYC6* zQ@crD8kkjk+y(Xfd*;y4z14B-Tt&t2V&Gr-)21BE~8lY-(8M*48_eDC+`nn51jocv3Hf z?*3Bu_x3>kP@9T_$6#i2P^)KcX&DgMS;y6G#P%8`kkifWqbUbLXjoigGC__?@e>vf zjz7>_sMJT3&6BbkdWPZ#0rA4O2bP4hv$H`m8+NT1pENY&z@ew6-c&hmsN>N-^+FZa zWv%>_iA>;&@O&cB%+hDwy-TQ~NcFkSRAN%D&0YLq;4nqp*{~Irq9)#{?7EU6l{2Nw zK2&n?`lTs{hJffgrhtDqvCt>gTo59K2^EVjf9D!{gPIhS=uRgrFjei(3 zznvK`Qi<_-z%M)EGN7&5J-d;;YHBFzx$wBSiG0_wQtod1R?)VEA_XSkV7v z0n&t)u;2Oin5c%u%e5IT%Wzs7P1>2Gj1>;b=aApv%T7ow9hgJet?U?6y~=IRu_k`B zJ>yhPxKHaDs&N)Jc(xxnK9~~g);2@n~Fyu_F4kgwejF!s7lYz?^ou2m8u~${v zM|r@l!Egw9FsF;vQR^;sIry@<%f))WoiW0`qrRRw*JHucyg~ef?&cRN$$a-{I(76L z7ql$$U3|FwSLr`B2+WF9^i5~Z+H*tyL~o_2M`!$s{`xwMiRZj0^r3x{2BrI(q!(uW zh)1-Zpyf1fH_TtMNeU)MO4>`aX#Ji%nnh1(+O3y_T>IYP<0v1pKa&HRkeyxkoo zIPQPM`+d4chmtL*#n{>CziV48EOlOZua)DqWEa-qfQ|rD=MLN?se4jbX`-z|K#;=Y z$q!$s)HXuW^-r^EivunkQgl$CelD*&eqv7p$%`M92b}{8ip2u%bDAl1JmtaPtSQYM z&hJ7IUs|)WSEW02Eh;ylIeNf4JG`#Aov3(Zyo?m1n1yc?VXbFG*BfS(pXqXNeOP~L zilM638?=+OPWpXW`W{}X zrIoCck|Alq$~Xr7Z_L6TZYcvJR?HA=2XUK{#Xt*zMFhsvkdShW$Jc*h;cR+-98d634%L=BA+YCiBT z@5n1zsEyi)SIKU_W8q?lx&KqBkX7H>1v{aemC&|L_v!3<%}T|beJK0wT17m*ZF3RK~vt*D~;k``}rj{|}(raKa>K+TMj8C8NllyAEClpnjDmjv#O z+pJxUKT&4{7Ds^|X0=RLbo}`z0OV|3NkvdY4RgM8Cbnw3wl*rbgss`8m$yV@fmZ(>3H=f`V5IA~778bJl`U(PS zF#7jz-)K&6KroUMNmQ70M^6tNAtA%wo~8S(0D8c}UrvrrI(^I;kI5xYYci}1?e=QC z&BLj=8dm4+iyp_bhNgV!0h!O<5BN?EMT;a0701X_Zu7yFoD+JcdSRtmbZ1mE=q$p; zR{+`fLeH?yjII)=xieg}a;$0WCM;^ZwEU~&hc%8-?hMYym-)|j?C*JP{lZhp8=>_~ z=CuT#b@uFVsAUuP3m|C--m5A#keWr4i=s* zqB%;mDHlNsBX^+K=Am*5UhYv)K*#`+qlnx7Vt(+*+HNux68Wz5*Etd3*>`G?5;95k&8>XZ01IS@Xs{j3KIte14={J3iGYKcUj^r~nMjlE7(ZhZ@lIa?;IU9R8I z!lhS0c+_-UX`R|&7tg;ijnAnQ@4mv7?7TIHm7|8t<6;YMIS6YME=L5L*_xT^F)z~bBhmG z{y9m2&O?Sy*_3MXF8#NMNmC@OXX z5zuoXu^?TeV{gXiAmQqA)ulqeQv(H6nwFv15C-*lGBP^4+Taem0IPee1&`lw>QUX| zE^s5{^$i2f`!D2`ATkJIphpLF~a(a@@k%zSRe-K)<@udFFH zVyY}~06a}Sxl*3^+Y`chup+RG3!vu>g=bbmx*A7DhRq-=wH`KBuw`3mG+_i6s}salcH< zo|xTn#;HT{?sn-*n{OVS0f$jsrCG*H^3|BmVvv$}nf&A)WW|7w=kN*>P~k2iaM8YY z4~n10gcK-(6FkI>am5a?g#*%AkSs(>Oc^WfUyi6_|w?md9?N?j%V(_Q1`^BD!o3x z61KK`=KYX(`9Gl7FIP?7w{MNIdfpznbaYaE*47To%X`hry3BvM1d&O0ggJ9gPTD&k z+$VLDcqHx5T|7Z2A?ZM6eoH3Q@{?V`<9uCCext{bZ4z?h_i%rK1YYvX!ot^Zwe`Gg zHVaB5ZfmdB?8EM_tC9UCb9w7)MTg&b9GE{fadL#KIFI~tinVw&MTjb?c8{&#(li6% zOd~IdX>#Edv2iOG5=Q(pun;?&9Vw)`@k(cHPj?D(MPh*az5b|$RuL^5`Lbb_)!^m= z6kZGt7s-q+hEw845Y%9VNa|S^KNsI9ecN@x%7IUG5qNJ^=3N=uvGz8V*s}H}-|YX+ zr2kj&O)>I_xK4aC&AJqKIL(&QV&^9)k(QkuU9VA1gdkmbq;rxERy@}2o2H!iK+}s@ zJIh$&1YcBD+Q+4`rm;FveW80gnmKKvIx#D{5>*ycy>6kEV}kCqNw}4y_R3MM4JR8? zm%fv_<}gQZLY&hCc~%(7lZmhRWz&!#I*S61@TW-0TTRe{@Qxx;Vjr)F# zYLsm*FSpHB>84(sT`cM@T+NQ3LhqJ6*u=%fgONxZmsQAG8c*a8x zFV{2FDLA;jr(!I}Sr5N&n)p~Nm9&0&9d&Yll%Y1;zX6O~ZyR^~EP#Z?;dDm^Mle_V zscb+bN5NwLV^>=*9za6Bogv^4ij*O_mbc76#B2RCUZlH%d)@UHX`{kS{Hdf_9sl`? zs^|4iw(qNL-5M^zB)r8341iC?%LKnQdtYe${EvDg{0hhVt-NHUu z>MtAq8W3$)L&8W6mHnrN2UpJmbzgwuq%r)YXQm~7Bbn{CV15eXhWA%VyU$l1Z6 zyGOVn2x8d)(u>ZHG;CcZfmLcf3yZbb#hc$>Jn>^un_xKU;k)EhZ}7>_Kg0&LCp9O3 zl|TTVaFKS@ULCzuSUi%l+(e#VUHxhxi9Lzc;NF`BOb?iDTKM>s=?r27^oK;)V0TSM zu65e%$-th1x*;>3W`lmQzPgpvcQj!yO#_w`bkH@@St!7lNX$}-XmDSOY(Ii^Dg2E< zQCxbEmbxr>?T)G1JTNk+`(f%&KzN$a-_M#M50xG_RK{5c_yk)ggEvv^_w{+6=PePg zbu%Yh0`m-_wOUnG)%N79Ay*eo{!$Y|ITu3|@5CI_F&>4%EPrqyFeBoqGDp9d8ZE9* z|Bki$Ik6AQic6FAM~sOpnvmM7XOI+rcFb&Qbt)_6CeQ#L_pu1wh5;?)zPyV%ZTij9?UH%p`3+cvQ}a9?Y35bfc7qv>Fx zOVrloQrU8b+}buOPDzFU3GuQIELLw~i%Pw-=moHFqK*z@{d=cP71 zvTEJ<_zM!Z+#Kb-c*X{`svRsXEuzb_sX+kzp2IOP^gGP*To^{a(Ndwr1ZqpP#}b!t zsmDsHh|a2YcKPo_iU*HZ281-JK{Dg!0-ITiJ@V6{Jymy#(bljn5fL}CqIfYG>{7UK zI){b?D6wD)#bV3*`_`AW5vk%kLGnig9yztuEi#uL4Tr7LVYN2fNc=~~Q`2fm>^>SV zu7kwji8Wg2>B^SxRE5@}(O*NRSMqe_ZtEx1XtC9%XADYzi7)oJX0|_uIT7@}J}R=K zYU&7I%W>lx@(PhyT@Ks+K=b>{14HIUN4eU>`f-Qcki3y15CPQIh!DErpKzlC)km*p zLtA2~xeA+Tp)a67HOqj-mQ=|ij17FH%4Wj?=l+HFr5o)q9mgB`deztXXA?b3n z`OJlM65Y_=%~S)j6OtUT=w1hl{g+0?08bp)3lwCFuM9K~}>& z%Ghdm9#X^2U#CZWh`f#7v8n0(l_?oCEkDDN#AjBs7o|R!V+L*)W~$_jn!=5+vvg=> zy@zet^KS2ctrPYQff9t&`uzKptttmV+?2r7i0*S_VX1-Hm$03|Rcq+yD^6KG$$CDZwN^ZK8{%v@nBKdM%UVnM3 z{gkU3EmXiKuoXzDdAtvl$}^zsNM^Hfg@7ur#26vr!z+Q1wVKp9e*HD>OnnzJSt6*-CMgeR~v&ID%i_{#~L!0sW<#8SuRRe5G5SkPYU1V z-MmSR+-AmqV2_rX3*EtGAfibN#M4Yh*PFcj=tRGu;fz$zt2$}Y%GeP3Yw3Qfu+-{{ zt0A29f?8i|oUUT3H>Q)v4Ud6lN(ycNU{>}U(#(@u8S3_Nl@EKeHFtB%{~F05bKP&j zC)!;E#i6Xfe(l@q$|_r6#m&$hrntK#Sb#?LgLc!1y2p=)l${%4>b6FA#Yxm)R6mV`SaBFzDH$K1bXA z=u4#pLK;A>pyhW07qZnM;mbM?f{1kIqpEc$mt$SP;YO zxNP+QK0w5Wd-k$-C7m4YUJ%NAw{3V!!lb~~D|Z5Z6c(I;Cf<&eLw!@E$QJhtM$1Cx zVH4;8(hav%R)a=L@=tpDOn#w+<6Esh``?9hihg4LO7zb{umKZxXcWsqeEy;VhG<#F zx|U9}u<2jsW1uUHBII3<&CInw=ZL04ugu5nbBV>=^gsbTl-F1}S1S-IeEcoeW!Oi{ z+e0gQ)Z=04!>5~G5N(Lq*g|Ag#cm5u^FQeQ@R)H0XHvRymOY=Jk))~!N0V{(EyLJ~ znMG+gnPZ6xtKormM0&`xbF!Q&0w1xy>!|W$zDpTyrD&Yn1qi$BUo8{bM-qRekIhoB_+&AjTDPN6Jn{89^$4>N;bGbi zp(Bz4POa?MN~!qb`pA)@sEqc2v^;bGzGmn>bpwCd@G90=-9up%k3BgSaZsC$))yy5r)peg+@)%7wSSU7dct5QXv1Rxiumg+tkq^mphrNM z#pM(?L@R4<=r%R3fF_gw^;EgM^)lUvDeoKul1>FOVTOdl8KYJe0Yg~tOhb?&VD-%$ zNDeflo-~WTK;&gr{$>sjdh!P_H2a{3pQs*7Sd*SP6UNNlHQg1$D&4X<{E*T<8pn*) ze0UXBx{1zfVo|U6c1 zoCr-UY0Xh~uQnV&%K9*`geFqvHb6z9SW%g{<+}giH)JY2qG#q_ZQ#c2#JRyG(rTF% zLNcq$&tvwpALzVJrqn#dzpTF&yPmZ9*A(XTpWk(l&n7P&#quT3|GHjFwhdR;E->=v-9@3Q3myNDEh`?XQeXQ--XX43kf&_+^h&Fb)G(9L9e8d3a=!>RxD#%bqgAXwfKuVh0stC|V zG;}{smSzCSyrQX|wx~yj(qf7poTb<9AUmg1&|nV0;K_0mM?4OT`4Ju<;g?fGjHemE z<#|*PdUz+31|Xn=i_J%-mp_Y#wQ>i9Q<+ZcuaRVdE&MHvBukuQ#~BE}w0y6{)vw7O zx3hBmn~6~XR>G@X5SkTXZL(D~)$WxDwXNg2^iO4o z*ZrT$=qd`JcxVt7u`1L)8Oax4S1}8*1w=%s=UecJz3#$F+1&;{iFF4Y_SUqVY;(0#Fp~v_ zaPfiJvsoXj<-R;4e)1g{x|xz8==x2?wXzQT zIl*f@SuNwS#X8w?fw&KWm=0YpNanGe zgbZF856v)@n|)krYjN>KWX*@t?(9*p^+_(Gr_2f2;9m2ol1KO1Mm3dco(u_8C5tTb zM_4T(gNV-F5$}9l)r|>eyig#pRmK*keaowyNwWi6KhBqCSHDREJEo64@^f^YgzUW} z$mg8Oyp3)MUcwiQ&a8{lU&knN3bX%Ei>@q90YE6Nw0!2CA%EW~0$AKpPL|d_KB5CV z)bgW{jxH{#N>$u|3XUImF%3S91>h!VkhTDI(r=Tg)nM=C-EZcM|0=yALiqdPj+n;F zmk0xDj=kksQ$mu;*5E6PP5y;tR!vKbi?6Z_fXqW_M6>z{A!27tEds(%yW<^O8$X*Os~&h znx%TnJ<1RsUVx*I2$;tu1qq z{hkn+$=mX%3Brq*bYwQg>4OVc#!J%(;PS{9i+=07IB() zLG4X4y8f%1OW;O3|M!Yjn7{z)Un@Oc`vBr$m9uEow03-udRIic`* zHJxvH7H@!!vlGXoF=%CDMQzZH1_C-2C->hDe(=p4T}LQw=6_ix7%3=6nO`Nw5!qR2 zp&cF;C=jSX#P{eH=pjyPs7fyk!H8P)Ax4|$Nm;BRTAEYV$S(+yru3v58UUZ7sKCZ-|iE+SC#(TrU^)3J0SpK2gkBUUZ)u!|20BhDPgzp z9~Us_k?pVK^|6M!1IX6kq@W1ICh#gRWg2C7c^<|;tM(r0F0|RqHmTKKUbqrl6($o- z-;Ca2lP-21ek5HMwAX3LP~57k4kDoc9jOqX{@!SV6`aBmEmdD&1r|0T0a3QC)CaT9 z16f5!q(i4yxQug3Ia7w`+ws~Hsn`nz?e9V0#?QZ0aD)%|PmKivKm;x*KGgS>GCCqv zgqUn^$UHznNw)#AnWIY_jwl8R-cepX_~m73kI(jk4cuRI1+hbh^HlFR1wk+O+zg0nsY64USg^VtG$5_#}!z-@io0PKDGfsTx{g<@}+O^MW-<_U0 z*1?k1N*k!-_Zl%LZ3O;YTiFruc!$dJp_Q9$lEFDT8eY0`V{Wag&=tr1Ulu_4YZPi} zWcBon#)_d$L|_stbyv{VP7e#~yIk44?B=YbNfjJUrc3*2AbC{yKjlDEA^cY4ktSe zDkwjT5F75X%oM>1_yDP<^)H!k`QEgN2f%9i`D>{TM&=b?z{}4miFSN*y z!y`X#FC#AHni~3#>}$ScTl+-7>+**}d|rTLT&e?<%i8zcCGA#Au70!NCW~{=XZOy^ebKgnkS(UmD68;l;$H zi%Zoz3(3#^D*yck7}$EzPhOA`NPN#A{A~8%gmXfOA?@JB$oMiMQLT@e$N55)^t;b3 zvLcDctKhHcG{gTAYxu4ptAq^X1idfTUcG(o$&E@HgcjvzA$#^sF<1>CRMpXuzkANv zcj`*ehiVrx+DzpD0s~ZqH?J=;NGsD%rrb0g~x1y?}M7!T$VE zedjcDud$^IWXiZYNu~4!3P3BOXR~GgzgrDl6FiGy7T{Zp>c8J&2e}1cKz#Pp=gRB# z;ES!ZuXz(afD>SCZdH=EG!ox3$D|2_%4FZEL_$#yk$<~RM#Aaz7aHMXW>JI6S^U_B6w_hx#*3iXwzQGtYqw};5{&w1NTzt~W!xbq4Ik=O0F zbPw&8PJIij)>Jc!M0P6#I7UXR)PVsSPJyWKJ>gJk20FUpY*BSdZ7+(mmxGmsN*o;T zatez5qqCm4yYnUz5b7IP`KCdL_z0!7(r|#*xpc7a7ctS|gGOO_{9;yfuAT_5Y3Y@D z9Mx^@8dK1K&Yz!icv%*2NYeii+x}>PXP?R{Q)wU6q@;fZ{`kgFvv#Sfrzf5>VCuXs zFyBR1hr_nE!d<6fiMd-GP>LYKb|eu&fbV4^<3GyE0-7SyR5Z@zyZdwCaJC;J35tm? z{?r|&Ni8d^|It^{a?#5u9rhRp(-u*Dt94tBN+SDbAQ%wBu8v8g%yyj8H|EL=M%%%( zlC#p1$0YRZSO9c`I_^U4faA@2cmFlyjTS2hfz;>o=yI=T&w}4kL`&F3CU;#Hcnf22 zeBKjaeB@0DWI!UGe(3eDe5aISVwp9O+B2t{b32al%JUk1HRCSNVfR^5sbJ{WWo+WP z(am0M0}C3^3!V^zYgiaUKNZh@-_dGpvYgZv(gP-M)y2q3q+~AJQxoQmrA=w%)U#hd z7xs|`&#Lw=*BC!nKlnb>(pA>J%4^(e!}$$(LwMcQtJJ4{-zBcg`pz;=&zzpWJbc5k zbo}tZJhodu@jIz4-L1@1bQWfHd$qi4NHX1-E1urU$$zc;?bE+P(fkj-h=j5(hBU5nYU!5(r^7I_9o)j?>;Nt1z4%c#*xRRf3|_e3osJ60O0)D)Zkq-|5OTb3FDdfx8~2$k)* zh;6iC)=f_xCB!2mcTq@xy6NCdz2vE3=Yhel2Xoe_Y2wXaBv;X>wVK6hZTm<~wT>3- zv?W45jLjwF``b$=Z?~N%PrKv|pxNE5EEw7)k3ZkCJ=t$<|Mv#U&*Mvd6NnV!)4y&e z64q-KQ<^aYGBWp7PdidMpCq@i2so1YdT%{PqEqI)#5%6XegYbwU12PJ(~#{_;B12Stcvgu1P^E>R? zH;&?pPIP^-M?X@hAN2?h1(tckOqXrHo$?W30S;+8rj>tE>Ub{AaChHhF!+s0~n+Zm-A_xF>^*9aS>1PdIReK8o1Xt4mr$*cRw zKxsH2I?X;S8vR~==K*rZyLNIboe$Uy zDCL&$LCZpSf*?kzw~YD5`yL@H7=$!>7fw+BN234^jIL=3o$GPi+6uX={kLJH*02Sm zS6dnbH6}up#N~J0fD4&JX@+(qgDgC<{@@*9M2<~EC@WdeE0akYYO-uv4Y))2r(P@kaj9$Kr41|LAd2;*L zrDD&QFy@?;A!74#I=7^ka?K*UpQJxu0A)L3ibB^6>|LvuoRkme7~W&B&Yr$3aSKN( zp?kD*uUj}E6_D#MpOCkXp#s(io)0#27EMKTT39o``e*p)KkMHtqRflf(3 zPd@p!bv-71znZ^-!HMY=n~sBk3@`HE$J>^VDZo0G)KwD!ol>MYjK-z^FBXV#yzgH6 zOIi&Ql3+vW;c*o8pTy_UjA$taNuR!e7z|D~KeaeO2BKzVx2e>lV3Ia(O< z=x$~%j>sFk7iBsInNRz9N(})F{Xw(Ji&?*Y1O)5BRy#0fL65=R>8#m&R|mtM5DO_%v5=H-tB0}mE3&oP%dLV&Kka^TqsVG z*hBeutWSj=nLns+aQK=!&`V8D(8R%l0;5F!xzM}ri%TsHSoQouJw;;2BBR}YUR^)Mx)o5_`f`rXjK1;YT& z4ai}U0s0H9q}D%eh{LR0OFSEh3Wem4CrFjG;IJ1Y6_T=Q8prp8-O_^Oy1dr-S6W<& zQn*~Qk%@d|#G^nE=m@_eQ+{QPl|@W^_5Yy1{eb>VUykrJ+eb zMs}OOIeoW~b}82gad`Oh0Ua(PXyaPrh0GwZa{s-bA#jHld`VUj{!+GlMUe(U;gB@h zQZf=~IhU7AmhizAPEQnVP1#F9nuXY85|#lBP7nqyJWH)0);uE+i$`gsfr1vF@VRWj z01U(ZvVW;RzA_vwVdUi<*{|(k!48~bg?y6Cw~W3(oT%iS%CVvE?&6C1s*a|=iWdQ8 z#4nV&)j+>im9}~Y9Bew-1(BnWd2o1g0N0H0dEu>i&??A{D_w3=`sTE7c14EG<@Ws~ zOxLuqtc}%?D2Mb0@#dG^$_4OzR4L=6KI-Ywb#_XDbbet;Nq$jLP+y-p0bxpEY3V+Z zrn2(b)$G6kLQ=`9d)xRpzK94sh#HMOBpR5RMMgy6l$J)~ zVW1+9F07KZ`wJ74hCRhk)O1mSCG)wCe$x3`ukAEsk^~Zw zrZm=k1c{^oyv9l&cgPebIPDa>(~=V)Ds)+d=M`4$nJMgS*KPk z8))aTFPgM7zCWXYl27(KIZqUasL+vY0;2pM00d{W(EgX7t%?b1Dy$&Xhxf>dgngkPy0fdmg!0a<%of%WHdnv9YLN==X_x zO+vm(6$rzJDEfGdo9#RS{ptt=fYS|ZIwZW0BFVryC4^PK!`a?er=%%}{qaN2*qEuV zE^uuF_p=uG##mF6?r_;BwbhlCZxs~+>FK2i2(DPzYyK@QcwJp$ckb4}sF@_ud$g{F z8uP?^wSh064RcLvS!l+&z;Gx>C2H-J)%6t{GeNT=NK_xw(tPqYB#jRczL$>y(K?sN z-uVYYAa#M39pREQwim{1OdYykz`~F|mFaM1%f;tyQ!p!G{Y+%vNWYeZ%NR$VL zt{T3VUUc`$PX}Z{Uol*uL-dvMI~5eaFYMFk4s(}p5QDs?ZAe|d_zANZ#N22~vnE@i z7z`KDJ4Tc(;Ia-@t^c4t5J|#~0t%%0v0U~C|2luXcg>@&9YfudTm%M$1wb{bMFHX= zoxG5!-CvSN;L^h%sxdKHXJb9GC*ILq2h^u`@4hE{`mO!IqAZ|PP|^}@5Q}KeVx5$e z>)9tNx3}#Oaz!?_XOJ0SboUy{4|3lrqA#RnTy|9;^PwWi%KrH^Xx2QJ;HAAZ!_%jJ z$SBCTQL@3_a7$ejrIg)K0_Vyp00D`ZpwZAi-Ex)zpBOJmd>6 z&h2`L9E?U29Um{LnX==zn)ms6q_Yb5tU6f@%l>8eU+lWT=OBQomiU^2C(V}k#>q;X zV!wd&vJhgCTUZy^x5GRj?0qVXih)a`uyYmoZgJyz>wNi5T0q{L?32F<-T6+2Z4)^;=25~c3{k_ zvo)@t=hupKqj+Q|C%JK^2q z(kGKzkdB_eu5e_ZR!Z?R#tox&T&KxuwF#S{&KSS{dN*H zH8uG?A-?b2AjI=z3?PiRH6Oo=9y(j+UtOaM zDB5ZF4bTZw4s3?v9tNctU8SMIJ>i(Y_L7pr6lY3;>gsNWM(anrWhqZaCML+`w4>h`LO zZ9!dNPznS#Mz|`nODP*pT-Dv5f|$9$f*i`5(`%YuzS{Khml+uR2jx25o>V{Sm<-#C z5je>8n{Sd`D#H;M{~f)XMvQUU_f4N8ZAgmiZ|3oNB{cP%Lm(%s$N z-MMskzT@}zKGy~R?ZWOoXU?4Si8H^^#NH!3!OYTyu07QYoI0aXqfbNPWJZ&1>V*4?WOfJi!Bb93|du6^CUNj_1& zXrIgmQjL}HpxSG?{Jj^3655zdwogCmBKzIdMWi-n#h<17UL6K(U>RiS78M(gwi^c# zF`?<|Mrx##Rg}c+0X(yDUlov&z^AD*?Me*FboFvhoM$VgW3#iJlLd9xK*49WSRc5m zv%%5Tut4aCa!CsHqX!!DXE)V4Mqj=(?UG@jpuOY(KMX5yBDvgIj%ank))G53BC)mR z75RS)FUl^=-^!rje$Vt>G8mW7?HQAyl-^)skCIZ{J)iR>p~l+v3#&V4DXEJ^=MUk} zzU?(!=F5z0{1jK^ls6ubl^-yvs8E^E+*f8XJtRaS@d|5jkdhj_x(|ODu&!t21-Df% zq&Rd+hBs)AlEE96;Enb+gdRuivA;IEUrGAamlLNu}6r&U8I- z7NjsUpr*dgVTHM_3FcALfan?X7!q6;TPT2G*WEb~`9#89|B_8^`lv^AG5M0T@Tchx z=jVR~p(CmPdSOV9+-hV{#N~46-upL< z1@*4gOd_%Gvb3F0+ZBway@*f}qzHL97a!EU1o zSJ7T?R zy{D&p8wTG3Ju-T(Jhc=7U;id8zUX(!PRe3BmfG{IbVVU`Uj-e57=>|@5g!%WS%k3o z_e0UTzB5N7pU%edY9UU6XoPh-W@`1N?zwMC=I5JYoGGh7ljPmWV|=p`fN|ap5Tapn zFbyJAfO4i-n@zRqfSjDXV3~!@kc+cCNAmVvh0#bcCxmr_^a*w3_R8T}NK+`6r*qYd z4>YQS+kvTjJT~F3B6JuoOdde?Ugmo1))@rj_eC4no+`p$sI6#eZ&&J4{7|2p!HAgn zmxX+%wGo5T;R!X%VOLT*ez$ng$Bl>A%qG|vxf;1^Or^y_$;nDbHQs@2#xmLnM$9G$ zDGR~U2`!ntp_i9p`;;+&_xwlR;Wu- z;EL~yOdMxl6&QN!y#HQC5iKH;Ah0nUx01IaXZ9X3@oBtvx_*k@w@<+YX zP#ml9K0uXFJ$@VjGgmS6T-Xhm7Y-I(e^}KUOaz?mPX^JM@5l^H$@#vGp_RiVonP|kgZ^oKH7jmD`X4mH{;Ww#wJag}Ey6T)BNy%r@?s=ayRdi@6B zIMuL6%)hNndt2g#g#L?hBId~SrPrDKk&D&iWRllFtE|&Tv=(8oYyDMNBaXG9k3+(_7+oFH>@%AxRLNbQZe4jl!#--&AHlfr zIv>@E1GoJdAvwj?Cu@?f9>2h^23kQ4?ud7sje&9%SzzU8Pc=F~4y#}cjk=u@ds!#S zKP?18AS?+hSl-~5dgfPde7m-mDk4auy~J6V?+5Nsa87T9d)`%AU<)g-mhZ5|(P1~( z6HZF#>*+9W5jxKDpwT5EA^1k9bY+V|wr<+&b z!)5t{nEt}<11pL5K%I24+uYkhwU_!Utf<5%@r=f!x6GCrno}z;E#Jh(7szb5 ziqD@%g2hl@wa=fwKQiWuE4~MCs!Q?rh&mqwg`8-o^&X}XHrB4u311NZSjxGA8q2sc^%*u zveV>dfuDL_UEf0p^H`~D)Yd!hx3=+D@_t=!axW1dedDKHs2^{bM;gHCC5!x%=GPeXZHD5f;)U2RjM~Ut}+k_M}~|2 zxq;rFG)DzfVGo*vE#qk}Q8O;#`DXju3}88`M+V}!YPF66v1_29Z{7B*8`b0GJCFx141~>lsr*jS>MTac{ zi2I}mjeCFA!I5RJo%w%g$g^*sUWd<5q$Z9#B7DzJX%x#-pcV~5PPOrU>s^>CzaHiY zXIwN7IPk@EvL=?ANFZhURO=floW8l3Yc6kcELGwVlEsTmezN+&xKM%by77kXvM^)h zw(pC>XTFUY@N})Gq%pv@2iY+k*PU1ZRW%VYe$1#}HZhM4CzIJ5hk}wkB*Xbz#(abD z$$}}_((8|0RCxaK=n_@E(@s;JbxwR{t|q$MtF#b=m-O>Jm?GD1*ZlRSQ@Zo5*zey* z7mqKQe$OhBj-=x;n$P7jyx8AduAz}PJwmf|{eqv{=y)aa#_NQVhbNN0Nv%1QuTUUY zKDCH`ZQ+6N%Eio*+KIQ$VVT^lb_W& zlU`!a+Y@FT#oN9%YrALS`ZbfO($zfvvdCwl#@2-?H#}9T<~rJhM*vd-;iPm7f$jUg zS~za}8$!FN{;S*S397o79|%70D#wYqJ>~lNn#*Jy2<`$Nm+O99RPJ#Muq|0W(Hev! z8c)@q)wOCqCmvF2D=8y+kB{qa{E7Sjv;f8Du|p+Q7321z(-_2glze89v+?$tdbbehS`&<1jmjk9{vPgkE)-{DdW*8=piwCEGfibpf{{*QXW!LgV zMmETY4zBP^rCP@|45iv^7vhL)aw}-ZGisJy0dIk`lMU7|W989~upC01ByTd6#=^p^wp{#ky?r`<&K#eJQW-W@BMY zn=(ChrG*0jN|f2o;5yhB?RO(1*4=v0AjfP%Io>Ui=jbBpz8Ae^C5-UA5NSR_@87>2rAg}F)BP?$o+*h6in9XaI$}%;{x4#;RgXXkE+h^b{==R34uAKLb^!P7z@T*ll$I`YG$DCi9VgOm*z{Ya({Z?$z@O zZ=H#LY7lX3=f=&f4rj|hi(W_nYF zTqu+qDFs)}PIYzeOt{dW9Oqah*4RZ7)Oe8RK~B%xpVXq|3Sx20+}&vKnb>U$HSh}9 z{m&O$Unyv#=(|p3y@d}pAfxL}MaEq0moH_V^CNk~EUOlYo&6)Ia$HmVT^&A&UtyF} zwfVAFCBf6TlQfW~_`M7xuzVRUIo|rCG{8!0yLwyF9rQhy=WJKD=rXN)48yO!I`kHP z@dn2RV|ZC9li@dF_Nqc2Vdv!Pi zvR8tke}fxFHg&K>eavrbH=5A;y)zHpm_lAbjd>9e229NwYfXO--wM+ z68Nz9eE+M;p{r+^YJQ?rlaN(odlYrM8{&Ev(O9Voiynexo zzZ6_=PHY(cYO7Ob1q|MCTr}}RXuG;ciH3X@0(mZByXKnw{9DSL{WrVObH;HA$%5@O z>Vk>$QmqB2|Bh9)GV<4ps(z|k_~Ab=#lMF~i_dx{WC;0&zs32c;PMRD`fY~L0)J*0 zqL$f)UuGSB$V2dvIom4<9O8VMXY~;22-FS5Wd4?NT8&f^r@C^D4UuKjLe19mXQ}Tqpp0ry&aTU>JiOYz5nx%EsP=u=PZen2{(npkkkRiLZhH}mL(3SW^OkL z#~pR!z7MujVGfON&Uk%_g0)cMqCXh-R_3Ny(8(7CR`F`(QRXzMM_(4gPIX5;Rrxt% z@>i~s^G}*{sQx#Qqu0F~=DA9u0=Y4*h?eQ zy2bs-XjXWY{be5A9)9Jwe;OBmj_`uwT^!fX=KkELg%z`_OV>R8Nz^*qJE#4Gj~+*V zMZX8ZJ<%64ot9e0jYid`R_Yb-$`3v2LWxO*U+YYs)yNkps85lA>9<(Z6}ul?Z-RvA zhB6`cmaK(W9sxu`d}`E2ML*Z@)Mo3V94P7Z+Xi*dwwYpZnJmB^5+b!|l8yuHQ)UC# zKU31>*Q0J+3*{y#=6Nc^Gmi2E6BmLFJy#b@9TR`&k_YUSdkmeHo)YccwX3 z?F}`Iak1B(Fmd)T1|~PIpz2io$)OT9U7*^QK+Ytrqjj_u1D{jJD=}Cji7C2I0QtDUJw} zt)X}I3z;(hU5ZCmWX(g7rm1iDuHhe3>Zb^KjJNYvw>>ORA@AejN_964*EjUWwojEs z^;cQT|BDsuW4WKcrE)q9(9S`1Ct(cO@ny+nuKL!U*Kk=*^h<(!{CAvmEUTQ#DB-iQ zdc2J&Rh)zY4X0z4YDIfey@24lhWNW zoV1Beei98n88BvtqFC6^1|~&34cN28!tLp1ijdLE3QK^g963Q`nE^VnPSzEcgcthp zRL1{PZa;#YGpKIn87dsQT8elLE{Nhd9JLPA-jbqn5o$z#i2BaYPoUfRO1F6(#_r^} z&6zkAVJc+VNvAY;CPvJ#acVsN>hs+tkgR#dYOi%Jydq#vuIDBP9g5a={>b}) zlvLwn(gPH~9XfdP_f!|TZH`umfKh0ff}La~)>C2^#0{;|r=34~nE0Mpm>D6gAAZy* zv7o1Uba6M`GxBr3s}$|4W8pM*Z$#-FW_7E{;p_ zbLqIv`Uc{Af>0^Y@^(ePH2sU?90sHA;fUD- zUQ#qt?|>-9-L!Bk+Jmt0p86j36uDKiJom0c%P@abs|z6ryQrF(Po+#hsMd3^IM($u z!(%B$$cISiDG4*V@qZ>02pLeH^kdoli=WKYZcz$0QgDu9F`GA2c>;$cQ26~KF+IxJ%$SVmMadf%jc=};-Y@KXIrVS9!yx#EQo5+;1vcs27|Y! zu?)AT=&-vP#b=Y$j~h>(fBV!_X}Ki*_&}U0n|r0BM!fkQFKst$5gBw*9Wx_754vzB z_lK8fXBog-E;FT#QiP&QBVxv#_tthJMHZ;E3kVq;&f0q?Vv7^t)$UNr5tSDd zF`r6L`WW+~Uq&3LeH$8%Tld?gXRSevo2iqtTz8TBjPEITzFGae(lr%MW7={HDRn>1m z)a@rAF&^I&ffB#i{1CVC-kK|STe)B9in56o7yVcAo{aGd;qB0A(?-g&TnlW#JxS-_ zqyXWrWMAo9X=U}=lfSpl*e(PF&?Ys2sBu5t9l1?7oZ;Qa)UkNB_U=v2ZrFd#b_GzV za7F>>tE8e$t}D_~vjvoFKAWuGgQ0cScmVkF4tWB4X5=Xq^9m^A#bQsvd)Uk}!H;^z z_$u@Q&^E{^2V#r}i3KB*=)oCH&=W&y(hWy2dzDs``sQcr0&Wc*(z7i^K_PXNT>O#- z{V|rPFF`O}Av`wnn+Al!sYW^H)JA4q@0YkYBO87+BYN~lqzc(%%Z~~n;<;a837*24 zWb~AnukoU0t~29o%1$KgH}td9W%7C=4bx<(PT?C=KYE#D@}h>&ML)JQw`1@Kkm|kY zd>^j@RIZ-jPyqP{1l9(n)qpuDh+BtS-wDW>z8WYH>d{*X&XA`Dpf)pNc0Y#yLTr0? zdsNA3?D4tRNdA@e>x+xk-*3OY(P+eHvtV*OdL~beJ;q1WTpoJ6%bCF@UL+MfQ@JCt zhK?H%V>O@m^|avSp2^(h;wnEU=9)Ft{4JF}Qha_mh7k82pK+sYG44G)cJ5%V z0;Owcak)P;K@B}{T}sfb1vEY{&P{$xKQ}~x+M9F_?V^Vz#(xu(Z)FU|rOgs5c8y|%YvdUW^^tOOvbWTbi)=Iu?@=(ugP0^F1S|{^G zTA8zOOkKl*QIUbdC3-NuB7kPKUy2(K>rgUAC6mnVP@KAAPg9S-w!0$ADN%)is7}1% z$e68M-V|FA)T4#ws^7m4zcr(l&psHQab!Ip>7~Q*RDp?D2s74fi*=7-hG$cTCxm-( z^WZwEJaw8eUN^{0?;jAR8seuK`WGUZ+^9b_EW&qpxAD^qwSd4pw14=$fAT9=QYJ89 z?S|qV!utnRsrm6mLKKX%;DNBMo-o|^8$(lUfn##~Id)m-yKSDT zY|8d0J4~8v%&gkW>#*-}UwkS|**;>r0x6@Te`#sy_J}SPF0S&ct&!5<_JjG2gsatr z3WBR8Gk~vNkLtKME_T6ScxyX)5|PlK?^*tko|`Dpjm(1_HzAGZ91bR2gueff z*Ga*|St;+VhQNl9R2X&*?3&9Vy@;q~bOMPhMFp&zT6=$~oZ+g)Dv6v%e+6`%Lat_J<@=IrM4c6C1Qbaw$2 z>BV1iUq{?EE%Ed%SYasW-Qtd46?DizrKCqL9FatDYRSl!`-gi{K$ZvBXS4FX%Cwe| zwr@BL+u*_iw8a3m`D3XU(CGgh`l1uCRA0U@h!~jp^beCghK8en_b>`z0y=|Gz2*b5 zP>sv=QxxSHJEO60Q>nw%at`yZE~vcH{-L^K=z+*a!(KjwMEiOX;+lg)aj`8uZGm{^ zoF{XZG`PHKb-pzqL-)2iEZw&bB&>|*$o@`&yZ_m>dU<}FLj*7*#A|YH0Slqx{ll^R zn1~2vxl(3#5$WuO*TTERxjAz!fgWJxikT!o07*KG3O%C@me|rzXv`7TL ziP!&u7GTl+JlzG(g8Ku4w!skuM#1T7_Vcm;D6zc)GAA4RLn`nkDX3LUE^eRNX1~l- zk-)FP?NPgNWA+Pxx)Y<>6E<2)FE zP65bRbWGp@lHLffz;RJp+y?q)Qrm<(jE+s#%*7sBWd7@7s}Z#qlC+DS-w>Q$KEHXP zf4l7Cz7M^caywfdyD$F1dS8qj+Ur(+$X5M*=$zVk{+jlkJ9`AL>kBOdgTh@afTxPs z$gU<|Hyg{Wu3{(`FB>8>K0^ED*yc1@2vsMYOuCL%x6|JrZ)3#d&;G8+RIZ_?YB0L_ z1R>@gYINYA>=G46uya`>IA3{exW9HxxS_kT61mm#>xhp7erd6v(b8?>|- zxkQuLPhTbxyPvv*`-=vv2z?)xc?y*prq1#k<2o{%ZcvgQq*$sGZXK{Ke=sSVv`vP$ z#`h@I+^$R=FUS`Ci~=vKF20b+V02Y+xxfd_Y2%S?qX{4kjl-)%8y$k9{B|>hy}}6I zdVFMR3Jng=2!WI<`GXHPDY%j0whSo&ehwC=sjYsYU z+4;CKcy7q?lF+loMt7Y`YQrMxu)t%y*uZ8P>`0uum`?b9&P{o+ z@$p_RO><_#3usyXhkDru< zTKe$jpcPj!X{psQ@}^?wpuB||dth=h5ig4g!)jlV^+mt?C$Tx}jv51VQ8J9#dM2+5 zQ+I>;YUuzL#W!ATb2Sr@qW;KPI%SRT^HLgX?zxxTA8EibbG9=cM{)i)#`ybVVtwyk zCVurBEFZPP=COg_Rdvi8dB^u(7{Q+wO&|I4*hQPKROK62tykZm7I$Iop0*b8o^Rif zKlH)NlDvw4NY}um|FDmje0|e(^S;=h!INu6%kX(~4NXE>P zv@c(jU3GVRT5JN-$ zF7ScvugVYkOzUPd)g8s{L^1NscO(*b`9~&+Y%Y;3jF;+?Uqi(Pr@3wd0i%`fA9T$* znCk)a?2_PeaMCj}`f6dJ;SWzpz>9>DQ}QsubEi0~3I`&7);)=${N09cANc~8XQ3+?S4xvd0>3UM*nX`!b`QnY6TVpa61 z-QpdY26-RX#AgWy3>){?XdhS)$CYRhWn;R2=fl6h?kn2PNe+IsKnB6TSU@if|r?YY38?DGPzhl=t zn@2r)@UZnbSEm4sAYW9gEHbPgQ&oZ|rr5qFCk@QjjBT@PeL^d|W)ri}XlyPgX*fPB zXq}!}(l#*eh>jGww(Y4BTzYLd&lZSqwObW^_po5LQ(-aW%(O`|G^hjLN%^t9xr9Kq ztKJ+Mxs4wdAJ-i*)OkEvr|V>S!=2XJc4g7(>~h;8`tE>RKHqv)!`52fblB^V?T+r> zMKV~S!U78XWG!>CKO{2AE>pe?a)}<9j-c7z!Vk9=>YdOLh(op%vR3X~ub!&=4*mhe z^&R&i;-1-OcB?(cC6}h~ys5UC`&~PP##>|j$j$sz-9FCGN!LWmGd15~mo$TD*U`GK zUY}KPrZj%QI1xTtkP!Mnrh%UMBi@h`156xZb@)@!N>#cvk1l5LxZHU+F0E^*BAXoO9CEf zOm(#&0pWf*Z_@|vK#AaYIX|8L6(oSGlr7j;UiwAz2zs4@v>jFAlEXf!_67D}P^%P7 z4YM%{Pz`;g*g{78iATcJz2s`VA|DQjb_z=ze*YFM!E4;^Pm3(w-t%e%> z=P>TMouwu^Iu6$;lP$XqXWSUhDRDC}5wCl$B!!8Rfn*XkfsYoR6xlbwp?Y<9pWJV2+ER=j} z4R9vG#6_`&m8Gv#H*y<2Of}VRFQQd0x(2f${!=5H+?25m(t8!U%ush+?D#XNHXMrm z$+pbD$vS>|8MFNbG3CaC{jd?xKm2mt;H++9dhXk6Uu<^)Uu_=r8Y38QjuN61JJ$(cEmqks(YYQdS3TFoJ z_!KLv)8(>E8dON-q{(DJ_<+d<{n=Aza$rT0#azQ>+Ev{t?=QO0g75LKg)Gc8X%pu9 zA1lpp81YEWnbIi)$x^+$2x%7-S=p0yoO=O|%g522D1;oQ2#%5)=aBo-XOv5Suc}N! zHTy#1z!a#JoAWRH0*A|bmXd3nKYN)&h75~ZCTBg;6X4iU>1GQV6i(vUsP2oMGkt8i z#9Mu<(Q~=WE8T-Ea;O+NuT8F3r|PdVbxohIyEiqwy+HUSZBW?W*_$YUzo}&rlfrH? zlf!wU_B>GWVEOcNsdI?S9m(89huW5xxYf^L_Q`O%fB-XIT$vdnlC)Z?0P6nIQd9>E zECF|{QHU0@$JJJ-j)comnlfqod__6v^M1)i4*&Pzkx@zq*WF0a_k)^!`sd5`mZB$Y z5ITAVn@erw%{bF8l&xc#7HgWJzZvtWbU$6lNtnK5T~nIQuw{~FyIuVg7uzRDpSsrrT>WrAlmKuB{y?49^C6ReNfk5nCq4&~Ra1Hc*ES}Ke?1a%c zi0j{qYZ@I;Oq<(b&R0PL$JF`}%tm8RRu9U4hMETZ!r>&a_8KAF<# z;c2htELw3_+F6hV#*NPO{3Y;x@6^pZO=-T-;T(du{5(2D_6o(aQZ)44k& z)zHL7VR@dx0r?JcsIfZpKNV^=w&V6P2Zz&9e%~I)O;G8HE#Vb7S_Nu zz^frNp6RJJr*OAJqtBnd(j39zMKCQnMP;j5(@yuRriRKGS2|XHQbDUC;5o78OSc=- z&Ys19rI;YY*)CUO`7U%-Q`<9rsFG^D?8KBOy03%5Zm-yQ!SR+x{O{jE#GCb9SK;c% zdFuhc8+oCORM^}ExRco|yD@HFo(p{iCXj8FhYDEydzqRviQGv}`(p~p_(__;VvRV~ zHQufUs5zh`_51?X{!a@KmA@{i?o0Zw#oF-c-q{j`^p0^kFs+e-Z>S~LelT;D0Jl2I zQ#7(v6H=fSTT#p%wKoedA)DtGf!Mqv>iDFYp+Jqyb%noZ{sJI)Ip_6{;=%Pj1^0Qm zTzmLns+mN+lr{$ckd57nRsY_CF^@AMfNh1OsVT>)$x+y(PM25R(&!FInO2^3Due(6 z$6q?(8@qzJ$1xMc56qT}@{Wr$0_k6~^i=s(P|z0!cX_t22shGQZfc?9A$LkG z>0}51Yv0xQ9}rmvL!>XAhYrP@E0y5E(%%uAds^bV;{=)UUhh`kwbjx-V&PG)U)EH7 zaW8$f+g1(2xI85FbJ6z7(vl|<`K|Itb%hVBh$aa4|FLm4^Qd+8Z=!^ z(35+-St3Ci^-xVh1CLmsOM#Zu@sX}p`aVYdwZ?+m-0zA!Tk>@@mb`aOY&L7P51?KN zPmJ#gaW&kYt2ma^)q~2`R_01fvD#N?C~9VPH75_?PM2+!Hfy?`v4Yl} zrpph>fAB96wx&zpK}Sbm!&>LUKm%puR+JcOUmB9W*eBe|hiw4%~$j zXG5ZW`4lV~RXWhD4#&~JqUFp({6L$RHiA`uoI8G!6j3DSSG~MOp!@|3zB6FVY~l2c zFZtwqy24w0mqegeed}b+7mzRiPlaYSk6FdJUy`RJXQ=-Nz-?uEKskM8DW+}SbC$9f zNOOI8`*TfdVT*Bn!Emso(t(Wh{JIAzGtGsZv7%u!;tKJgp{h&SxGoD$h{Dj`bw@H1H43#`RwBYt%KMqZKNV-(+ z3b0wXdxHRk3C~Y&A*P*I;R`7o58CKzfBx9PBTF_P6;*-~PV}85W8P&UWMpRIm?i@O zV3H*d0Il0KxWqGK?jJT(z5_HLdq;{hi#uemQqy*>%c&3D12>H6+#^e%RJr_!jh zU_}-HGl3*EDrST8$7YTsgQvQs=df#ZGmmy!;qSHVp!3C0MdI8UJ|S=NjW{LbiE#Z~ z3T~uf?57%@215)!01Q%AypJkL413ey@&c~bstkNUZ6 zL6=DN)V>!?VEd-{ACK450&r>`Fwnx ziGi|XI3FiXyJ3$l3~Dg{C@)9uSvSGZUNLKhAiv}P~3>VsuKl3uLQQP@i@^53k)Tk;2QE}-|)a~<#59D!ffp-{?PdT!BF0` z$d!dv{rJpI$i%4iT=lJd?w<1AwI`I#aCa$NtgqW(d#6e1+I(bUr#G-Wj;!**^~EnV z+NTog5l+`d&PojyV#;0@veVU0qfVn{m98vAIFCEydw=U5L;uYjN#%aS<6!?aU4cYe zqWy}G$04${NJp+cG6{uk@B`DA&dxj)63XHA%eev#J29A70=!!+xT`?}r$7fuG`L!7 zwE*?195??w@llorTW#U!HFiQnu=!j49EsJI8Xkgs3wDiQ=TXP`6PtwT0Wp7o0Dgo7 zSvEHstNWvHif=#!wi~aQ_nQ_y-Qgo2OThgtgX|m}kp!x>5uu$1oAQOq34vW`;Sp~D z<*z7BsC%B6n~_bX3*YmoXds;$OcczNeHSDqA-=wot4q$?1dC=d7W2>f`PV}iAb%uq zDQw0(yK;~^MEwI>W@@lDFu+%SDHPoV9sh)=O$dyhbKnN1Tqb3HzISeN$?9hc<0K>L}PX<~G9my>Q!Dd>U23VcVqj5KurKZ>nw3I-Qz?P>o>|>ncJY zt8c_vu@#&2=_Cp;oF^lGg_$a*eVUX;OEoMI2&)jdtW!RJD((fMFoum5PP`#E)_+rl zTS;}`g=l~c8p-)7eE^*>60N}rGHf%9eSm&?*yPxAF(Hk{<#zZES`2U&t*ABVhnLLr zRUt_zrcgpBu*mm@EtS|6TSuC-M?6#3fEYqAyItmf-=AD#&FQ1m;qv&2wPO|T_XQHo z*gA|3AR>>;^F`r0;~I%YPqQ=;12kstbUE9kH~BeOYYpHjAjMKvHX7gYNG>I3*czjU z@t&DC5)6B49J=}yl%ZZ)JS%hRke#Qw*0O*#o#w7JYu}X^(Upn3PLn)z=Gv7;onuJRcze)!ceBbQvC3*B5lRuU&N`(~z3@ z2?)%LCreSl&FSgVQ>(Gz2Qww#awXn11vDmb=6|0Q6BXC(TP)j~JvD{pUzW1qu}9q8 z`!s~TbpOY59C5w{@OQUZPgAbe$@Jg?pdLPzj+Id9;F$jVpe$7N%wlI1q=0MEkt>0& z{5E3dX1~P2PB4D-%9c&;0C^r|>)hHuG7A(t0Pk#TItBMQN+=p^Hl@)KuaBb>FVAU{ z0gDvPScN7tkONhr7p`5boC88@Wos!69G`6s8rl4jpf*OX9WU0_wa}>X(=4bZ*Jx{k z@EF`TMoaeLlt32kuxvOgrRd7{nZkH=DY3{xoEy19xV^!g>PM|(Lt?GN)m~N7B}yvR ztoELT5JaDd_^9TQq=cE08xeqpZ*!Os;O6GeqcjFEN-LjzB>%I|g5%50g(^o%`u+QN z&9CjCG)F1T%u>3U(AvV$)Y`tfTN>NnGcy`VBSAt>)|&cV_Ud3kW!KiF$zX~pl&w(J zJDCuFq*D0<(qm#G?jPEXyN(%PSUGC-iI{NiLjnFl zCQ{fuFcTt!$o0kkj!QH%6pA=Eqf~6&LB<<@!=&k2hn6ePUj;c=zBu3Vu-5g3P|%Th z+p9ikw*=72pV{e*PV)kS(~9I%P`$hRB-UkoGWnhbvm$?MNonaH``u2JyFg?QNWL14 zuGyNP*>Jclm|#UfJ+-lzEAl8ktMJ!9S_B)&^fkkK7OoPm(dpNF%2J>MlXdS*^ogie zzD?td^zH~TRYEd4;JX}O?rB5lafQlI^1^na?`f+~Vy0cU)})0Q?7E*(S98f!8R)C~ zp3Zg;4Cn%Vlya>L8l&=c{RU0=4hhrnnEm_zLb5kftqvk7clITY-5Mir(wqkR=SN0P z9})+n`y1D(d0~SncSIogFi+HANNzN3O-|^J%%&{eXh2Yre!$HB1&>wZWv@dQepktS zz1+pWCR*?6@2Y8^bvo~<uaj{>!vK-ulGOcT><5qc^%F34EArR`c#O0}~N6W~#S5iAgFV9*PV+Z%xoEff$E zpm);WQ_tp{I;eA{d(2&#uhbgqJGi>MQ&`4sw|}VVo@!lzFk3a%I00VY>b;cpk%_q_ zZ$$NbGD{$9!PEC#m0K4y;N~lxtD~W#g7wY{fxZ!UA&ZZp*E$?DllvqbdIBX7tft-o zTS-q|wdQ|XVjDd^w`+Zia8u0&sHaqth}FtY17m=KV^WebLvm0x@~jliLPP2njW0X5 z`j09yo`@{q$~q?ZbDr$E^A>>hUfeP5LJpSdMnN z_7dt%KY97FZJ7QQgE4Wc+7n? zaaic=z9wV%Hij#I)4}<0ZSe;5U)~49-|Ow4_zMP@cfc<zJb02=v1tpo7Dw< zKLK~S)ZSAs!n@Z)FVrOxrw4+Xh6?UYksWWx7$x_By<_9(4)pe>{P!}beL^~HBxj!~ zV}f)p4Qc&QIi$3jdg?3oxPK#N1+;?^k{dpOdH5C=XkO~H8hl?<&Ga*~ZBOT^W-E5{ zcYgqO)Ntojve-alWUD_1gRnxfn4r5 z0k_+8X*ORQ*fi}vi#qblwa|T$FRZMqc}2V~BfzorA^X=RnUDGhddhV9U0~z+=HZo5 zEOKw%5P!yB(7*NoGdw&%0-{HsU2Pl{>ZI+8NnBwY)l_NeMi2;}hTBVM!T-bzAGlLQ4|cvvsc;J` zTu2j0fGWk_`xif)e7^P<@IjqP(xz}xJapm$b?u<{-k$3g=!uSUvhNR)LFWuSF0I*; zBhn{)L%`1n#@~lH^gRI;N)xb&o(?6tDLG$_ou#K}isq&>rjNXF(x!KJ9|^f@RkSk;izpGH}t;rCGd|t)CO+RExF|Tw%QJLg99isX)#Js+eAn z?-XlumXwG`9c-p3jkw3MLx<~H1BHl&+l+dgs*k)Kn@v)~`rURGOMwQX(^Z-#pY=1D zr=r4PZDGf#GI=aOvxZNJ71l9;%) zUAgY*q^45Y`TGQilwo`J4Ou}w0#aV}-i#uOqe<0$`~QD87`^}h9{I=47&P$6Ly%jt z{0PhatLU(1+$reRpT$^2GgQ*mXGn?*A_EzF_0*J`uk>`PJpf*`G;8!+u_F&(ytOvK z0ra>a^%(sK-eYFB_(qE5jkejw*Hh`Kv}{WyirpBFU>_v-#nDs-D}gHeQzj8~&cPXx zgj`kYf`!8NOc>z0HKGRar)=&30Ao?Xa0w8*yD%TgO& zE?mT5g5?>@lrZ%{KNL`?Oe_>I42zPjU2y3b$&=G%y+3;niYy-~rS3oIO{8=T(G`Kb z24{by=xIYrM=}NE@VUP`Le#_USg!bTO>xf1?VL*7Mf&sz#53$4>CJil90^B zVw5|5D}lp1eNSs4BrFUJo0ohs;eW>suP7yuQA0=VMK?Uu3bh_WRpTyC=@cF-<7Vyu z?sAg-1BBjaq$xTEuI)-B|Q8CNH2L3)nz-972Gu>tx{rb;XwA)+|Fym-XMt z^6vKsDfg(D_=cdPH^H{mkb3bpyHc*~5Qm)3$;E!n#f(P2s{k^?EtaD|#nGt8{I_0h zR%%WoOFy|UNLXNe!}FQB#@CYu)9MK`fi{M~l4EL@*h)}&72X${JxOKbf62@Cg}HrX z1eekfhnu_J%Fd=`X6Cse4jTbs($Von$4slo8W-DGx$0pop6TOp%9#5doc=tqDBvjU zL*ac{>_pz<_`j4|pBh7-BJ|_OCmgzGBihZ1d+L0ss=KkL&Q6Del3NQkJrW#KeX{eW zvUx1^m)DG}kM>VZO(iNV?olu?*Kppa9%b1Uj(FU{AE?hcFL*0z9CT1k^fg-Amgrbi z|FszH+k{sRMEC7i<=v`4SG}rKK!rZI|1CF+&sLpgi28l}+#7tGQYG3P4WEF4n_nse zuoS*0f1rob74fmaqS1d*gz{yozWc~doI3hs2CnOeJ0D0-IVA8`_DhZ->eD-#EzWX9 zDRC8w1PCGg2&Tn*z2`bxNpnM_ndXk^ zmh?v!{ur*ap}bLJD|?_RlH1)f`MAU2ca&Pb#4j>q17;)4x7gYY*{pUSaHU9*iJXI`KzRZ&Mwa zxA@x_Bmx%t{%J=P@mNhd_ls3OJcMoi|fXQ>!?xBJ3p%0Ng;12io4Ib)_&*7rr zHsaMG{UrwIX4Nxhmj;XKCX-eHkLlA>Mz@=7whURBC;V@oEqq~Q)a#4EE;ky9Mg68- z?rQk*_VEgj3m+AD#b)KGf4;(P3gfFJ2F~<2T2+M~xe?j_B%QV(v0;|#;sUuC0B`A! zIWMAjfp$vFAGxJcRuTaKaUj2~gJMaV++mGhN=r-Ux4HKYP>ad%7{Uv|fS{J9CnY45 zN4v~_+m9PQVXK}Ac>0v_xr5n3B!8wTy+agfuoKl-@mx{43K#m^#AJ3t%E}P)CS61v zuUr-GPmq=#$_Y&+_UHT0f35Vva^n|J*B-Ed{riDTLC z{EM4MfN{<8EpVpW`wmUmv;S8Lh&!IT(LkU718LK_As>QD)Q4_ zAD!T_u`B&@F+&3Ltss?0LxP~BCEu7NEG}-5f(I4_(~~tAt@CGK=pf6Q!$&NEQEd0Ysl)<1$^Rc;Zy8mE)_o77hzLjs(j2&mba#WIfRuC#2#4G`2H7=dKw@yjo`2AI z|I$Llt7X;!?3$mLm>3PUsM7ibP@`m=4`#a6uU!Vy#%hV2y>Iy`ylV-ls8)xuB%j%( zI5;`I61egpVA6PN(4&~mq}hK3aLiZlbuERIdl<$FHEtOaU8oHV3_9gSy*iWlM?BbO)`X50Q5;7*o!dL}bQ zCirs|pLHnwX62a#f4z{fj@xpU4cr zoxfQ}=X54AK9IHexaWab;ose1N02Ezqx2=hjF^L<^mDJ%?sFCO2s@5^TsVj_*@I1Z zn3ptZ$|yNQ_u2CXpX`;0YE0j5r* zDe#$strnv3cku@AI*_w86^B3flGePK-el6EW{HR|GOd6da_rubUe%m%n=0Bhh~1Y4 zlx*V>UVZH*-VvR}I4gx?b90>waXOw&2b@eyOxI*33UqNVx#Ei&u#Q?gJlP;5j!d5dXiZV)XL(gy0!*f*wTXL0aOgu{f6d9`L| zG|w&s`x?X1S=iB)mMM@NO4a^nH2hHR+lhcLG|Iog*a}5K_|a#(nmA%=cWM@ z$P?Wj=LQpY^)%G2z&ijYZ~8W z*$7V?H~%wtPEAS?_g1$rOtxv+jm6Ull_gz9f|~{W89#RNrFm}Q7=xm>bTYAhos%8@ zy)peJ`mFaPv!u{%LovnmLaMmoAm+i5QMzX;<+)z2OI~aw)|6FM8JO%*(y-Pi=G-^M z_;+s%V;vS|4x4J8?5la2EOh&bO#hJ1TB+MSFzJn9wX-dS>>qWy{So=+C(w5syEJ>J z1?x6p0A~dhcak0Fs2$Ppr=@gY4^HB<@pnHNlRTH`w}(dYg0re}yOuiK-F0%>-NDzQ zG@|Dw1`Ev?avr2eWfUSmdRl)BCF+r^Kl39JWSXa4;a|0nXmKN!yWY0?28`mzN#JW2 zNsWs7muUq|4o=qSLzgI7wCj>9igZyLXG$M)w}w7CI-Xt6F>A$DV)`ke!qTR1f7Vs5Kt<_-OLDJhCa&{oBm! zlT@9(rMc1eUbp3%pf7>+^0*iC;!=)i|CcY$Z#|Zlo5!JK(*rx>yu%XdoruoNU zbyoIkr@>znWyBQUlqAJ3hi_>iF3*z!i<{X|(0m>bk873w9~VF&f+WQ2jfy(4nhr8_ zCUM6@XI6jZdCv%R@aL1E+P@faw|}(I@oGv}qjw*Kz>IocWzSzyIAY343JOtnN455n zXO`vr?&&OsI@5_gqwLI$SUY%Tp%nXF>?@$NAgQ_mRmmxr{k8p%;@#eTI-bLv9J_Y1 zW??ilZZ@>=nMvL}*Fb2_~#_p-FF5J|yqe2@+m_{-m|I+AGu+ zkLaZWu$F0X>r4v>ff?T?&|a>>sp+B_Vj61$^LT|8cT+=f#DcRM8_6cT?_LxfHU|En z7m-cb>dv1np%P*7A3FN5aC;=96h=_NyZr3lZBtq8Qw#3mDq3gh5uJd5K>dVLo{ENs z7JNBpSM&Nzf-E`d8Uky)4AQ(Gm)EG|f^Y0ZzqVWy+DkqAWY5I--Gy9JZiSW9^;(p| zwwKvwmphQf7Y7=imBkO1c5pSg_{bQpy=2HYcRR0gavjw8+iT+^<7U)v8o)=xT~m2H z&8z)P%a*X$+C4OL%u-0`)5UQw?{pbd7>~v^%=yQPP>up!8CYlh+R4-?O!Z0v2=^$4 z$J>tBfe@Cn#Q&1UQfzcV`f{0%?4#-1tP$QFuT7REGNG{Z2^#4DqSX&}&*BDdXj^gw zSfl0SSv%-WS)9FJJS0TW(6W8LSJpn50j=>Fke@hW&)D+~6PKS^9@16jq8tku|);?{ZeH(b*eS_0+TFNz|Y6F;g70}#x_m3b(&SPGvr>T`Q-(aJEqj zt_)>=e?K#e+)&Sw3w{k&gIfsh>@Wm}$UTcE8NgT9k<@T~oxU7?yED17x*G=MkI&AW zkUn|LGYj2~VZ>zWRzNBt!Id>7cGslY_uX+$+hIit*IIM=Krxh^P92)GEV#j?vo@7nm zHl9B>u4Cj=o`w$_`wEK6sq>v}wRUz&QpB)CrR5Gjrn; zrIgC3gEgZvQ+~psla7_j(GEC+x;?KZ35-TmRP9F+3+F-V@J?F>c~y+yoN*#am{egW z*B0}Tzd1$4kXk9CKEO@>d6TU4-Zdg)f9s!>&`C+^crEoLIgr9BgqKmYP}gw4%dfAS zPBfoU4rE?k3E<+Lm$9;BpQu}MF*Em1P4nZt6!KGb5q)E-@j5ccH(l_@TAowiuy z^4Qb4qgI#aO;I>=DeRH+TBXV!enCer5-vVE) zHJ_F(*5$zf-%1FMy--%t?XPLs)4%Q3>D-e)G}pl)A?ZwZ(S=n_vPjCy>wdw7hP`Wb zJm(!(jCLp;j2-rX3XAv#Tj~8av)Ok?BX6a&C4g8l8y;Rg1yobn{rUQVyywAYhfr`` zy<=U5)_SlpQawHk-9DZ&2cxzM(Xx}&$+FAs^*;Bb3dJH_8gN0+D7$H-4nj+5z>-1O z^?r2?570vl$%__{L!CDamev}qv*%4(5P~O=rHv#paXX6=Rk0~J z_bLX9Aw2$SH4)fT_p)z|1uB)rrhDlAedMLQSJ)j~X@W|8bogU;w!DwE zm?hK^ZfZuw{*{s{Wnwao z%6R$PWn*B0NNYwpq2A=fU!6oarRj_|Q0m|}gFt8P;-(suK>%|&YK+{-JqU_6cwz0OT&je@ZIY=!S)36 z9(J}}PmLlLzF@V{;axci5OWxip?%372L&oI&4k*Er3*5YW>sV|7m;v>`w~67iP#OL z_+;55)vz;*n?Q4PPCD7CzP@Ww;-fh{Zq-=(r67}|hNbEkhuj$hGSuhaQ56WuXg*)g zgW}>kv*w2%jsf6(tUJbNgzn02kqbwJN@p2}wZ0bXpwg_mqI{Jz*f~?b*}VU5odUgfbYogaN7Vx`vSf{NmoSIG0yr$igRNLpAD@`bHSmSjyG{lXZFvBVAxda zuPzMM&*KfL28M=0GwEm`Hru*TzZa@vkTxOq8cB5aTg-2y}w_^&Dl;m}CqWXDfN zron0j=}kq%(Yk{^CWUjz?B(`rQ+J{RU^A8DIeyCR5($=-Ye>`Ke9&cPR}#b{%{FBWX2#?`1~vZzM} zEZ8UdH)-cI8AJexOrHX0yaY}weG8ZCOKP-D8ELUNdkroJOaRkt^+@_x4!m)!tg=0t zRp+~zy`FNFUvKxZ?id?(=qzUSJ$q3}H0fPA%kyK>p4U$?S`>$pC>sHU?7%ZZ1dNHj{lyp^{8KH)Y>N z@8^Ih^ixvrF#V20b|j!g&d&WO@#rsD-&u#ZwCdkdgCXI6m2pF#R@9W-mt>$6wh?as zI_x6zxdAp=wzQ7R2p=u22LW@!-{0aD8kMFr1O%H0_a#9Ni5;E9ojzBHQE3M3A7Wpl zO>pqzQICYzqnh*Z)4F=RR-|Ac5kactX=kknw7NCo zmY0{M|BU@(+>Z_$8v6X;^+C8H{kK5lHX_n+JSbHn%!DrQgozEGe9Y`Ae4q4fEd{GK##_8%Z0(W-_(SY@CyG9WE6D_Oon4cuK=c;dU>TFW)s6*ONt9?|EwRb#P2I z&vRK>JCehGJ_?^tjh?0D6qgZBXWZuK9H9zvPEk-vY-MfDufL{UcLStktKDzuerss+M z)^$)&B&PL%GatVO)XMB<-S$wyYalVCoK>7rTbS_exBW3j?_WVR30-~Scz$uRewNIt zqT5Qh)oy+cE3IeY;mUEmtP!nmS}0+!IyF9vQvM8`FzyLEfO(6prA>kgLTn)AP+o9B zNzd;w%D9^uaJep!N$#zi>$!!wXI`FN_9^ARf{XNqG*pAbqgT_QLdxc$ko6iE0o!T{ zf|%FIt_BK#AnF`hxm$I4_~l};(e^6qGMD~V)+{4qf!k)$;1p>^YM=;uRk&(3miA!C~({nm0Ag7>qH4I z=W{@cK!15rmY2^PEY`JV0jnPzHC^%gZ?!0|9;|bkJNm zSe7Gjv+F^mDY(pIb@^rUE-NqJ*Vk!q)n|Es>dFt>J^60LoSW=+6^d1OjjERNmdVW) zGrMUon?USG8yzDfC0LK^%E6nEi43o-s&YE(^*ZSC!6P9E3@Z^ucPq=(b_ded{*t&P zcP#+{RaM+%!buWZ?&u9I7e68*3 zN-J2rJpPql#x4NUCLNocKpGmJkZ^z^_sfNh6%^zZD30c;DVG$B>8JsTHDYPM#}L2A zGBS)eH#BUtY|j=MOS&c|yw`mA#GcuO+B-R|Y$TSffv+cN_4WQ!Q}1zc0l&@Ox3W?; zlS$XN|lqKyk7XM%v$pjB#@f zkIhM|Izd!->aFo=Xq6bEUES)~?S5l}+J)229%(e&kIi~+N`?-NolJJ`6MLCM78kQI z2;jRw`?YeJTg#krn786UKo>+-WEnweCFfOK=eLt~<9dJRv#&%Zos;;Gb-bXU@>~)= ztbYr0r7^7{SrKu6##r-3q@a*^Dr^(RA(N5}`7?<LE$e@=$cz8 zWSH4>9hD?Ez(SWuycNS%87m@(L0fX4yAH;lWyU^r<@;OZ>_*KM2E=1h5cuifm-GU&+0ia&gCJCSMSi(|7^00cP2g}Vbey^h=XJmwu6)%~aSCpQW<(Hi;fkZ+|YHDRAo~L49Y>f4#IEB1hqML}6 z6l!D?5)jQD<9(;0Is5r==|}SXpFUg5^XtY>FP34QO(OMD$4ntAM-PR=B?iBpFcQ^j2MF16M2``Mb6mIFN5ru%!J!T2PeGib0&(i?e?a2C zX(7|^tYUPG8Z_b15|EO#_C1A?ZUR393GMK>J8RMf5Y@+*($rXAIj@3&RQRtNM9$m! zQ$x$k#{k3{)KtfGJRs)Q zdDpRfI4f#udTX`J9sQu|>kDX+jM+-5^P}D%h{=HX0~C!@HcM&wP?Q{;v~Z}IjZF>^ z`N(JB#>5Qa;^G>fnVD8DFE0Liem#x_jfH)AgGC49erxTSpuDLf@p+*>N6Aax4qN6CY>U}*-@+;JFf(S6+e+`O- zn(uxoi^j~Zc8;5x(*Hc7S)x_2{kb19S$@5GZ@_uTpnC-)ZM^Jbp3>?S4&-xaoJ+n~ zTSOeS&4|_>rsP~AcI7ivu$rB;^*jj{KAid-W&$u5Pdk>=8S-GYOyLh!n=hO)S5=w8 z!H9;05u0+&tZGE7zYiH%y{sP*0xCVFhZ&33iX&=!p6x^2T>G5eBT@5Qsn)Ao7=(N)UI<3H8ZkXKO9)!iNXmoj~>Y-i!5S+Dp3jETurVc6R% zEUO?T4TMk*;GaKIG!>Yk7bFW%KAL-5@=&h+>_gURVdbyH1KIY}wRoD!wo-Um3u9e@ z#piEg>6uk!#d;QD7&_mMGXnkwT@$CG@L~ycFTX?#za!G*$1S}%c-zlgRZX>XH9LJg zAqr2dAd)eew1&|~3G{ucOTd&b+(3L6_dM+p9+6iMj+<3u+5o`gTV zmQd^v23u(*mBX$Ua9(@CpWZ#xQWgVq7RoDJAU}^1U^tayQUo#Cay2-`ZqPXKzP|lL)_DwC)|G9IS%XnICK`7wSRqLxW zWr4Q6pt4T3wiPporU^eKW{ivi4uwawi41CCLeO%A3Q$3lH36|76?(e5Sc}Day&Z_f zzk9j=e50+kKRJu7xE$0wI!kUXC~1-OR3Zq>b8EbZs~0xjTGOETeHdhTIKO9h3wCih z;!-;)ltudBc>-W?N7^B;?_+jVGf6YcK5J^E?S%FLHuJkmhDTb%YSRa42hN0Qf z^rx~DV|ckDlDSRxNC0e~QB)RlQ>!;H#r@ym=}wcrl>_)#!tA580eKj|p?(;Ykpue+ zsA*uCz#C^Dc3Dh}H|bXJxd}>4d~AyG5wWxMa6m48(R)Sa@w>dE48UU?>;9XlT!*Y$ zMgAA^yexC*& zpK`GWLFJ6TriJGk)2Hv*<+~a8_GcCp$_-GBt7>NATr)vu?+~?y&EdfQ{A1s zXvw_465$a^2NgB(P-6?(e4~GU(s$qai&xK2ifbmiwW^yOF;VPV*si}0K5M>W2PSQo zVqt0d8Gynz_nY|Ewdc5xJ;~xZh2u6;y`x4(aINdtZEh}lokuF9FSjQl4`48phGY6` z=YOFB-!1wTaU&>R$Mo{h4B^o!>3`v(FOc53GXKsl4&7}wRW6e7Y6tQXOP&Orm49Az{=;Y zUb4GRLp?Mx$7KmegU8Yy*8QZtyE`VF0}qo9V{ zZ{+l!CY-DFc}N|o8B^=;6OTQ3MU5y1Vc-H!`LeUBBYO4>AG0*)3{C-`KqoyXeZ=i^ z=&%>K(|b%WR2rY#um~AyEGF8`=ey`{0Wgy@(;Urn^N1j1kZgbT%I#>G7A@$dbZIlP>7g7CV)-vN$;s+y9zDu*x?=gd=u7~)p1 zt1Pn1RVs#xNDr?C`)a#W%vO^tA!n~+0&;ytIwzINnwpaVAJOHC$%B0o6LYf=^(n51 zy9?ryJpC#mQUZaDmY~h8Yv*c^WisiCcY9GS>^TqK#FLGG{Mx=R6<8v z{+%*sNC@*om8(4YMXeyKy7)!NhEGF&qPCW)wb|}flURD|-050sVp-XvdIkvCs>jB| z)%xcH1qLTxaOk~_GL)*2S+1;_tE2Vvk#Ni)%0MVj?Mz|?^jg<=Fdn@7S^1=atV5dg zi~`X;i~o!Ov?CRO-lrOQWbS~>yS$N(zP1WjnJPajnnra#>;$wXOV7~{&M;&YkDXr% zFznGvoDpj)j_}MRlG?@#l#-SOGpB+jhP+#(weLuECG$p%RWzIxu``2-DnSz>R5la5k}E(0PY9lkhZVt_q$I z9G^j0H%vN^x5m;MoTv`pE>g#7IKX2{)|qO6Vq^^clVjt8_~|1;eONs8wi47V$)kF`uB;>fYxLK3eT= z{+Xp6OP7zdUk^3x9$`1#OcP5TFuat0i1WUDHXrPPAx%a>!K^k=q25^aRLHOQK`t*V z|FMx^&*ZUPqwUSrJekro6hBvWh5=MPGY6-RSG~IjSjpbWT#LZjciJhTL^V=tq= znD{l9dEgbamqg6QJx`DQT;0f-Ls0ilRF-Tm{&r|nIHsCFEa~>+eryA;F`*v}9S9tC z`G|c64t=Q9Ohcom1?As65KBS>iCX6E6}cR2RuR*`N}X*c)S2lMEs)&xnyLFqbzSdW zVqq%gby@aEuS0kTm!sNqV9g?xY|J6JtY>68It_!BY9k1tn6FalNN4Bh1SmhBcX#}U zGye(hV`i%^eS$(3GB4A2<&NBYM z!_!5;jXVfaTN?)}<#qOT;w0lmO#44|C)&Da9nK#&SDZ|l+pQ~Z4nN0|+bmw{HYOnf zVu5)%%NNBC1j?w`LMA%g zxtH@mq|sI+`D-NnrCz}L2b;(D{qVRSC&G7o9P@_uXF&h#L!ardv+5( z=*>R(!^Epa2LvlQXUW=-|0Mm7dq~ZXtnWV^3KQz=xnE4q1*hZ@tLwTmrV33t1hK&2 z%}-cA$+nk}P9G09Ox4#zO^rh(GPX%F#!df71xqdt{rXd&mIS{bB}wFui;=U};z1oP zm*P*7F}8lu-(Mu`gC)rLDcLIQzPw|6ngCT>X3q-9rdO+N0Q1UF2@N?HbUKrZQd3dZ z)szue#Wcd_e)%#s5|X)1W~IE(Ng2%E3oK9M zj$YHX2Bo2;=y*jB5}f@0HdSfHJE_~?S^4e-IG+J6Py$o-S4Eq0LqM}eF*((LF+$se zOgq}+8Mp`_=T$GP=gdXUtX0_LaZsb3oGKAn{~RV&aUEPlXGXfu98&AAJG424XJmOx z7CS_ZJhOit8&PSBj%{gt0M)~soh`2tkGJ&LCMgu6Wk0!-&wLq#v-zdIUMm8tv%+GN z=e$ciGAZs2pwj}gL?w6sR{DdE=IPT6q4cD<|GCJu+~>h%$Ir9*oCeb(8&vrNhRmzz zqH$1s^fOv93z6?9X=IrWJ{+?l>JN@5J zcCX1Da^N}9^a6_T^kksN3LWmnT5ehEvL>^YGIr8sz?Vee-HiEr4_*eT6;RskI|L^- zrs@6Nyvt=AFz!8xh3+i1F+JpL6ITU#2hFvnE2{>4j%+WA)PfQdQ8|tKp#Y>p3yTXa zNW3-;_%8|e<@>tYNxZgqX+3ljgj@5QgDt(8>#)*+#@QOA!eazR`s?gy!gw-TyW`*M zLl4^%r><7Ub5BM}Z4=qHT(3taKFQyh_`u9Yk~p114h&5;S2yPFlapdX2ewE_GZc2x z_W7Fn%0L%pdvI}xlk2tZ!tb|TW5el`^wg1Yw`O2t-3yl`ww;-)$nLG}{AWp915vGT z-zTB8uZJ-72JPbFNicU3Oc?#dzGfuj1KC8`#1)s3y7P0a@)Ma4AA6Tu(`B(T4a05O zzW>bEsy_H=xO?y(Nku?F7X8R@=B3Z8cgR1`F^QB#B?)P@k58WJs_8t$>U*lc^DjmU zS&-9;nn^0Pn36yexIxx_*goqar04BQ!PBhYq+4>a#6m_h@FsoBi&k4w8$&!$8?F8d zNZuvy{K=LFm1_3_tHGNSq;i*HNnlKC`87|4Y6P9A`9XhENp^2O?s`i=f7&BQKR!{&Q;~fZ_uka?b%B~_=P7YTS>?{95y3-x3bMYf3XC5Q{wkN1wYBs7 zbfm|NUUtg22=P*S6uM<t6>J+t#dwK&1*Cj^ z(X7aMRaIPHowDx{ap?f_1}B+Wezlf70cPj>o~QmfEk%<>JEa*~#MFrv%H9i+&iXzG zCvQ~$#MQLxx=_Xe?x2j9GI`!EZ%;I??dxjG!kr@(=$vKCotd;1(laG-qojK8?TJLb zMDKcYKLaudoRycyMP|NS<0@$x1@d0vl%UZI(6t5%bsg!*`j?Dht=5AUpv~MT)$K6A zEv#FRQRH__W#>D8s+4MnPkWfwRQG7I^e)!W+NzM6_bOn3H0qHz>8`28@{&slhxfs~ z{=uGbTHQQQJ~o_{Q3ovc&LqhRK$85yURYEVa$5OrZ=o*QtBk!9b||i+Gd|9W=qV_P z^{)G0sL8Ty%K4pP^2Th3T-F$I)Aw6YPL*0^JqxG#SoJ6Nex?8`ej=O}7>v{D?`k?^ zBriM+P$O1yPyDv96e)d!kM2n@_hDp`mE$r2hAPrR0WwT}z?Am=gm`{sOm+R+T-$@x zeLkxCKHRM8Sp7?}f@N z=lK-1&3C0xJG`sgYbW-VCAq4od&^(-^n%SIuVAIMeiIEeYThc zq!tKk#ax|WO;%PN@L#vsA}qJ||J9Lvl3QCl&{aHXGjlFoWZ46P*Ee6K7oUaY%6z!l zp-?fVO^pGHA?Mj_c8o~w*=k5!lLe^JNoPq;)PHyN0JeX{IfBi*9Fzkx`wq~&*4Ojk zi{9J}cVR=zQu->E{$^IPUGCAI#tFN-gaqHUlSqxZwKbqcTwh+nAeOU{AGAG8#MC7v zrBt?_#IQUwxjX%wElc8)EgH)Au!ZxI^IN89C~w#yo&q zKH||bUuXzah=Az*-nr-Wu0fHht&W>M_$Lr@|M6_3RCCQJ7 zF=4XVds+tyodBgQLCf6~w5Qz?eOh*$+(ubrF|kTIN*}D;_#swSNOaKxbWze=`}?ND z&NMz%fHQJ$Mf0iro0E3LrSmFFLW1^}f#$ki0)L18<7uXNK@v+|2?ZKo3_*iHSU*?)b zrR@P2*~u^UZ=9}vjLb=zZ?9~No-n#v3#h6ZZn8UY&&zPHsVir_yA9T^0Ou7PzJkHH zo>9bzl6Ihs>Aehxy5Z|I7Cza|{St)7fZm9Y2ZfwA242hp|59C!^e2Q6%C$FiAVbe! zV~cz3%ohhaHa6CwvD2RGp~4*O6)w`V9y`_4(3GiT{x2j9pkh55mAczV1;N;0W2_}P zfw?L=3KB?lT;^9 z$bQo@nnEs|QcK-@Fqw-;ev8rCc8QPHov%z!X<_@sTd;dZNu!KrU$9&Kq`3FqQ8PHt zfp;NhFWgsI4Ddz*JdyBezmTF+VfVWFHFqOYn(vPe$V%$Em!!ReqJCVW|6nj^;Jl zb!;C*PajYcs?=>;Hjyg1$80ZZu;C3$Jf~rczL;to)m0D0pkl#7JLTuAUlX`ur}7>i zf@XQB(}bjQH_b%ndkb%!RH?hWX?$fdH-8osQ!xoe04sR@{JEsyr~k!dy3%8GiOHd; zm8kjKj|b$l_o!gx;A30zUj@c6sm%Lh7LYrG_Dg+tJcV9KH5+o|QXR;hD#r>?Aq906 zyjXa@`Rcbv_2mxg<+MY!FGln=Z7PZ4wLcqLf6YMLr|9hm^Z!vU@sv=se#9dooy3e; ztN#{>@t{5gX)&dsH?T}5PlZjG>C3kMqsGg*eb18lhf?Soe6VKXWHHQVWddKO z7BL~i&MSEBtUr6{2Q-yG+%1G?e1Z>|22cSje$EJ}aKAuhej0}O%I*RO{9k2NG=O)` zr<5@MO|PqdtbLd#tef-Nh!;Hz%zyq^KprvYufBH?GSMAx!A7dA;fiQ+p?a$>GIz-D zBQ#R8ToCSa_vbmfG>g!kE7Te zonX#+?EgE^KcI#yMFgcWF_SF%@t#?H^uDp-d)ohYvh~TPd4N#j(LFK>6QB@pG%?Q21}MiXX@h(Nm2Oq`R#*GD7>|1L@as} z^XgR)dEHiQ-sz<)tngUz*LnCDM!a?bQ78!tm=0nI7L06V4&swTFR5e#tYIqThxE{G zp0e4Kb>i#c;c-|`#b$ZGc!0A3r#E`Ne|A&1aq6z~`wzVWB^WJBSJ0_2Uk_sv7@k=^3E{^uO zxyKfa7N1~sD@#j1GDi6Totm9n*rWGJ2!2*p*IrQc|K&SB(#tS@yk3XhgGq_2J)_wP zg?Cat`1ZJcIDjf(P=tl&ro>H?H1mOh> zBqLgz2?;Y#Q{2ulCOj+9kVqLh$s1QW4s`0syqYR#+i0Ikq$`w~syz!b_A6!GrVDGn zpr3_e9bfdO9=FXbUK|D$#F0juAVIg;(XymVV7pP-2iud@bKfpR*{UG{s@Q>R2Zje1 z=%BC_?w*W1)msps{PR53ySZu>0;ap-Y7QmRGdfNi7T>0i5ua)q*dCwQ|LqZKU#8k7 z>*o^_H$s7EF$>h!Ys^eT%?^L~H6h0|+ zFy>jYl?p!L=$Jx4sMy!=uapZ5%@?lM%fbt&HWZ?cXYO~`_9DH#z1vJ>WRvkj!tSqc zE4}N&M@_wd=UWwOIa>*6=OlY$iqeXrO3A{rj} zT@WDuNWeNqI69LX=w8ZdI1_p-HU+fyQnZgPSefo7Q{By#rFx`##*Q4D%LZe*tqt_n z9Zm#+<*`KjL!HmiG0yd8d08K9LFl+WhfE-;w~JS#AHvJD9_Ufr)%tl))TRs`|1;fB z7<9a->li`up7aV-P($FAfWionpf%1%3e*7N;0Nfno4uU4pkFt=dU;juNzxMrSOOV? zaey_OY^NN18fPk^YNbfCE_u$5C@TS+byj94RYS|$Z)uF=Vv_1UZye;KD({SXuwdm| z)2RV-73!xzGDRdX@S6WuWolvH^BFD@%OoA!qodB@-heI)mexLd!+Ww*%;&?rY@Iy= zAYgztg7Ks z(sr$!wC~KKZ&2JOHdy7Zn{?fgJ^>6^;~vaG1l83?FbAh^xbNH1*^CFHmA>Cc2Gcym zqAp!uHj=jh5%k0Lr4<-aXc{Da$IeIHCB8RP6{6GNqM)b~7*c^@{U|cdwXKWE_T7uauhw6!cf-1d=H`5hiiF!DbB=3N5l-j5m}t?-{r?qWKlHO6MldilxV%{J2p5J| zYk{K#1=wCSS$Q< zC_U@;*Q5|BH*byo^*fuRlMRjMr)RF0hrIR(xn2c^!O+b|D}5uQs_?n*j2g{s-*yjg zdCeqGG+oCt3VrVF9^VQ}2sY~e+pO-a`vCI8G=SrLiMcXo`sCRFdC0wVq&|jGi!pFu zr)`_UCQQu3CLiWtyLk&I%lnZ~;4SGU27$?X?^{+TD{I1=t_2%6^+eO`{}hE(k-<$DY)*cbj8p+p*hpKHooI@dyA`NjXeH`$<(MIG`7sKlc*+95kUS?E%pt zrh3EuIrBc9NTq|u3Pg01WW>iiag1Woa7T_6t2e3`I^iE#m`PwY(q!?v~R?BYk8y-pOdeC+FQD%lXJo@k!yoH54Lm zrwm)ji(dod|H1k8-`lP(ued2w3#xNK{MB)4(+40ww4Xl{dm<=S6gueW+{zlOk8G_AVmYtesmQg2$->3xLcE|D!; zcQ@TuMENlShoV<~cT!0~;|r|wA29-*Ki^alVa^&#aNb9W*>ik$CG{zZ+Wsdf)%AL-jj*u=}su-2Vgnu%|EOGpg?B&5yC6 z%RK3`?ED_hFzOpI6?gxfWX^JDAixxwzqb|{(a;@}Jop|Eao8(MbEI^5nBWYm?y?%* zyw{>0kMFYzK+HXuYy_knAotu3W-+!9oH1ov%{hzIJd_ZCNZj0YIb3)&oC-8o7l$7O z9Z(%=5KrofgpKpEc8qoYf_C8-&X*=9Qn-E(PI{&5>G*5#`;{%<3DI4JO^(1mDO2Cm zn)uI^`=W7eBcv%=nT-j46=Jon!(6~<`4V*gxU?MT@B8mJUTk3s)$jb|w7=D{qxY;m zz-G}E3P~){`qB`jQv<7qTATOT=n3`qBU;*GMJ+e48t%J7F-ulH(^`!^Tx~dbM<+r- zz=NiZaK29;Ya7bH7NOp`;R4(kwlbI9b5HS&M_@|Mqfr9HEC2va$^Y2ljsd+8z?*<; zIy$th4ldj>JKwz^nmrd)99tOq6E2s!;?icdMS@)%u(`Y_nzlCdkwEAKul^~`cdd7C z+}!9F3&EOjomu#^=f)dnjAc#{nTvsaOhs{C+p2xdrwm#NB!OTn=;Wd!ck$|{+Jk#* z10{t&xn0iYEpu_g4Y`F(fS&y$F!I~|BrESLbWVq$X2OS3>ffi@*KYN=zIy|3EB1Nn zw6&w8Ks7~E;+hZRE)=3sj8FC)VW-+1ShH4EeepEr9B{~oCO(NW4L)x)){&d(uK94e z>;xt=st(b#m{BKgk*P4QD+J1}mt$MX?sAgj5{QmxHwVw-r%*1A1NOmS9sEx8aHINO z+jFF@!CI@QPljS+9KmCY=$Ek*LPl$uzgF`1>JLA?-|il|R7G%~KmilTtcFS8nCiMqbwv zK(r@IPKm%8U?d{;G(2HJZpIT0&ES{z-d8JDxXL4!*GroIavH6v1t!o;SNnSwu%Yx> zd*s@-IoD-e&)^3!2Hy7kY@2xKh_y~&`M zfPK_JUy`?0m_K!*6Q%a1=UuC|O@=NSe!JZLP>Yt||JcFEby$2FCzEt-MgG-mv3sHB z3fDruJSdzH2rZh4b^hJ_0+zp!li~)xgw4o(2o_M=xwHu2`E0NoJnA(g4z@?qp1Hf0K_xbL z{)EW=l?#N8)t7c!duti(FR0>NtZ07{tPL&nO+$UIv9 zrV924du#9oewjIV+TU;@k6UVXJ3~D{Ouu$hX7Ds{S(H#_uV-Cp1y^bN`iiXZ7WFe8 z+ZXG1#!y=Q*ZO7j`1I7E-0gx6>L zsZe5A>r?@+lb8g2e`i0dnr6o1b#N$hj=}mO1+-*g%=$!Nbfe@|%Nvw07OU!8BBvd= z4zG)aO&9N*3}Ev9U~BDu8+Oay@6jc*vBMjh*b>X<^!W2{kHtoAB@FTdshq{Mr4>deFYQfx9`xBccP!n~nbqE_!pCXtWk z(#)Qd2vU4mpfUj+ny=ue)S(bTJk?j#K9PSjZ|WVCL3p-T_()7}}8dGCAA?!2rtuuv~`|7ftnd>xTHz9Zcr zp``TK=Wwn&Npo~-J_B;s{IT)K(<8rsom*!WqsZdfOOihqsVrcA`c^ zOsuZ;{NIoEU`^5e>}e>0;ps>6V%scDy08!`Qn>kiNgwK5y6vX*MDlK~1IJGYZ6S7|<6D0!{u$_{?U!2_tX;iF%Rs>OJbH?(im)A!> z1Kq2?d{58OA1y6)%TJ%3z~1P$pElJonkoziFf$snA)53HXG#O)1jT~-7t0P`ChH}9 z1j=f?8(}8bJ7HU+MbxRDRiWM)=-13H*0aAlXsL$G4~3VS5Fd!ZWARN1WsrW1yeH~T z{-t=I^#5b(D}bVWzwc30q?K-@rKKAbBqWyZl4j}dP-$t9ZfWU~T)MlvJ9p`&`M>!2 z{$~C&I}D;SuD63L&yI6TfKr2n9 zN2*h~a;^)UjKq7W!v58w=f{;O*xK|G-R{{9iR`a#rdy}yEi7rGQ7!lzdCVq#KSiEh z**v5SrfAJhTb~@Vr7qR`kBSI0+B5a86fHiI|DDG3;&~iue?%JKiB8a0fRg;X`DEz@ zaVM`g&1kbH3d)P^Gd7_|?-%=}GV^r!!c|J&d#ab}$+veIU5Pw)dvA;$RCflEXD*`# z(#e*Q>qJ^^l;Sd!c-^mhpj1wr9H^awWyJh#HKai6%nc(ejw?JKqV_Xox(36Gm=(o) z{W23fUs+rn)QG5ZV|HF)Ic<-QH zjn+0bR8E)ow3+z7A6GKsftk0_g`3b`z1*Qt)#(m&^~@p0=mdk%Zsq##a$Dw1tiy)j zurrK?Y{<$oCIu_9B9~MtDfLczzY+CaTp##&+zG==7^|hU%urv#v-lv0Cn^?8GROy} zGG9Yp^W!-eaV;sZG3mH1rwupx_Rdkx9e6@MS0?yCq@l=h7XobmWKv8o%*T2GqoEjL zU`mfY5&mE&fw8YsE%EtWPOWr7PE?5>gc0Z+xOM~$gIKQx27L4#`AvPgGr$deWw6_1 zB1#(7^}q!-`T~a6wGbnhRP|hdSO&u?F*2zT>sv(0LH4xywbvYNL!dd_+cTDgf;!xs70iV7|0a!2C|28QUJ)(<=lR8r`}(?7&}XH(BKNuc zjnICg#wn+-U(4P!YghRRd;#+c%-WrtTJO(XNPw+WvS5uAD;>L*75J%O-1Lj%3p zkp}JCZW3OX^eN&?b^~KpFF}jdHKkeknSr5@8)wL~;5w(GPBt+oE8UFv@OwUweM(^K z9OyBf0=J<|QamlT?IJtn1kCd~NmTFyD{$cj=Q`DzCEu|My$xr;9ANKf-^uG#jEegi zZnh`yNvkUy9xkbCEYYttlD`r`DME$3(*TFnrr>zT{3uq@A&S2@UTxW;?usJt{%uH; z1XzYcH3HQSniKDoDGMpbZ6)mN7iu}(t`P@G#T^FT@bS&bW;|e2;d{x#LX>w!)^ww1 zODL6+!s3@aIlz6GBoMdn6k@jy^bD1QC%_D)jAC@LW=$%xk>n`vYzkiZ{_(Pat;3!Y zby|bqNIzGLYX-@%vF4M z=lol2Z8IgAy~dOTqDWwq)NFsV(v#+%8~W4nBO|CRP1SIQ4F@_8Dc?hF5_@F`Rq*kh z@0m(EOX%w#rr~W3onL0bO>gmP`+QlF(G%5tRPRBRPKY`)+WhD_J4M{t+o%7=lP-7G zE#z~1=5m*|zk3}XErIg5H1we)xXxe2ri*qgOVv)%5Wn>^7%+0T2kh*3vTa6ltvh~q zLUmnZD{jR`Cg^jXDHZx7W(71lR8^kw;`$`991)FWrt{p2p$-ICa%y2@gk@UZdRk9X zV|@ux8sJJpDVopCGs#l2RIudK&`MOh5=Or!YZlrUzqCzM|1}%Xe%jZZ&Q(XK?T#r5 zbeq$y5qRAWz2bB?48SVasX8aZ$Zvy+1aO`%vYWZ#4wNb?#RKX5hCQ|sT#FJbHf`gR zn=W7P)i9VZ{tSyU@~g3hrVV}OEJtI7-Dzuk{aqyk!VE@<7}!Q8{A0(>+4IiS1v!aB z6D@fi)8o`eCoS}>6-aoAE8r_1q~i8awcB};?bWbqBN# zcX8!YW`26fa}~-)cpr6Be&Zgc%%ywdYJl4w}G9+`7BB9&6l+2xQV-%Kd3k2eXq8B z`x=K<1Jgg^jVEtFqm~x4VXv~X_5@lqfJ@l6hj9U zFmqmVxj^N$r<0cr+VBji#HrkVCt$5;qO{ury0}ln4P*FP^+zbD}C=kgP>T7ZU zjqU8DQ_fV%o;gsoQ~8u77AtMT5D6p_FG}a!nA-NbRE(gR~JmK1J`1x-Ba{l z%L?9vQYp+jswH~lDm`y?RH-1p^Xla zGX$3C+h~8~DyRj~upwXZ4ZS%d*7+gu^+>B{mCsdovEkSGf}&GKEpfnB0rCPkc9AR30<^zst%FHT~Krv1)0T(2{Kra64-dTW|&PK2%YPG=50RuXZUu zPXpkiF#56iawvzTnPQa>QqHMoAAfE*)pu_?k&~%zhqKdXA9y(E&2kJZ_~+QK0{)`; zWHIYAt+Z=%B%Dm#EHw%3cS&nLegZqgZ?>1c_4P895(x4i>3|?q;+f!rer?f}vFqe< zNrs%Q*}F)!1(+T`D~bapk=SIcD3xcIEEM^*qj$ z0WYYoYGlN{`BFAO`3WF*36S3B^O{*{$aIV5-I=2kd}rT&YrLFe2D2plB)EQx^ykx! z5X6aIEHUISdFAYbAuZF$e#@7$(hywZxySlqqBKJ?U(sMkySr2tlAcq5{o>r`tl8d} zZkbYO8!J4}*GgfrPkkhY&^IoAqnX`Y@MC|?2P~Grar+w&zn#T6T;K4s7FNoF6@jgI zQ;+Gbtu1z+JIfa?yZz-n(y$38L9LPu-)OB1;%LDWXW?{66gS0DkpT5SwBT=+49cex z6#Q9bMim^^GuJ znSLmc(LLe;08?JAU2c$6r@rA4-)kP7C7uaFt_}Oz&cl@RjuF==w4F4udz-t!fgRyP zg$w2F@C8E%WNm=s%F%(C#pbqjmPL2wRhpgkXrXlJ_4_$3d}slr@nA}Up(YT00fQ=5 znsB!0eEAQlHWH$p0862$rA#iClZS4|2J#npQse7r;+tv)eMB13!LPrBPK0S^f54;Bh_p&# z_qg0bvwK0J%}qE!Bn)6piLPy7BPHb+cca7C9!(FlHJ=H$dw#|i2~4OL8}*&{N#$T^ z)!L{pQ6T>d$b!l&`pv@`zEFe52O|=Gryu9%! zWpCe*WcFB0a=M(M13z-#US}808~lXUHb1(b(+UjX;Car(zt$-e5Kqr!t|C^3n%AQA zhhD_*IFw=t-2Kr|wE-vCW9!G5wKMO1KRx;V3paKXj0 z$0!r<)&9!JjTpkSs>II#D@Ajh&4Eiues6DoTmSlU>0J0iQpK^D$T35BHRYaZ#;T?ZLXFsA6)zRy@V{;t8Ie}cd%o| z_qf)nN*9AWTH@EdfwG{(Pw3go!@O^D@2+-Sv&_{B23aG*$78Wy*FHGF`;}Q;O?P={ z6TOHFME-Ph%6jdtQx23{_g_=C>iLS%&O7|mHn}aCQuQ8yZ`Z1)v%v$^$vWGnbk*tY zQTl?+(5lNTA=09mgF5Fsc`pHiWjMFM9(S$0RdyF~=s;Kv6MzHg=x?ZXcMd-?V2i|< z^o@)dE!IV!X9%L>!^VBn{r635z+G1(&1*%jE1muQ$*mtd$RqwoA{e0kam2-17Xm5V zN1N>dGF`*&jRF(ZpR9p51G!)e^wHXN(SrZ$Z%(V8ci*(KDTFD)0kv42-5%}RF&;j5 zC_6sO(&}m(Hi@9ykGU%RjrDa|*m4@M$_?LqPD#+8{hsIS-s1Z$^E&>yxu-J)+4|8$tT6F|jG~GcLG~JS**s z{zD=@A7Rl|ZYJwyUJwVyG*P0jrhlk!w3rTR$t1GJDm_jFI7{>wR-GY>sV8>M##;?b zoR$jt@7ExEWeS1k;F07Nc!j}&0r0(x>;~Zg2C4Gc&_igbw$vHk-KU9`D%5O2JTbUU zziOTXLPL9%obmV{4Ic>uO?=D9@c|ZqUx?;UecjOXaNyqB=UYsHGdbRO78vnPf<0Dp z3MAqr4L22&BT~&229cvB`($KVv&C)wx)F7jYp`1@_*p|8TLyD49m~ER z5Nc%Ak6@*NdODG_cLmqOZ)si3A_!WKc4hADs1M&tz`t%sxCeyh%a`96t0Wo4kEC}; z)G+qz$}q%M2(P=C1j1W4QC?Faq{djY9UsdULR z($d%l@f!mjB8Q|afUD~ZPgKVd)fsqxpBzWdiTJ(-5caxGt#ht^cEb}!z<~Bw%ljD5 z->EuTue=UeERRH9;4B(QN(;RUmVn`yLMJSL;2 z&aD6*Af8X-TU$)CWn!LhljlsJ0DXy)X@n0BU(L85ar@cy^>^5BL-h%`OxRw&wD1zN{9wEPdYN!3 zUqeuLp387TKdaiBEO`71a09p2eo<-Ml`(l@4@^T8io)I0Gc)MS9<n^?iNk@AKCXS;fkam**KKA?`V!ph4vVyKnRY01x0{Wbm5YXQF`|e-zIwrvCTVja6 zmWSbM!^dN5!8}w^g!BO8VX_ASRb!wQHtU`MxnzqU5vRq zl&xKUQfy`i(=K7iC_?h-D!VN}5uqn;HlWZ7|Je!@HO!Z*wu8u<+ls!(+!1jVLKVmg z)s{Rr)DD&>D!?Jg#rh4wt=lEwv5RHD7fOW&TiIl|*c^@$!>J>lFnPm^{qWzPGyZWN zQ5ry)e|L9=C;Z@sJT?{ptCE!qBb;UQZ-Xq1mzsPHz(&UG2dsTY>_S3GoH9ioG2g7$^B8n98{stc6$ z{`4tvec~id#HfrkwaMp<0&5a+)UMBT_FX$`?A1X`kK{taOF^db4c@~>!u2kR8o1uPU&{p?jSpCH z?rUTHxO!??7}!j=7g#yYjuK=@GOjF6hER{RUW}KDUlXHAVD5GAQY=Z6z!o65H;L9X z5yT!DuA17(Cs1NHe0%#O4rnOtlPawrJd!bvWNo}1 z)F^)iMD1eNAXRf4XCOieG52^|+re!AF<}xRJ;LaG1qmxogm{)**k9R3=eL$TBGgKn zA&!MJ9b*U1CYO*QP?I>2DI%T$brE9xW^zkcUsQ>dAnXd@5}&j$h!`gqwWlmk3KF8P+Tdf1WYT$Y+(64Go#w&;bcEpqw#uU z!pAOPTgX!Q{@mzQ)5QZK>_M>NmNgI4J$h~E;8Y1we;GOz-QuICsnU$G3i&?5QR+B= z<>;F%658y;1vtpRSj~<`OuB1#>|ALYP8|~?953MRNWM8cIbg;1J@crje@hp^Ze*^n zXR$g^p7$_F#236i=b~_ zu0=QA!5MNKUh+e>zi%(NBl&$6-LJ7jz>#*$aiCJ+BSc8#tBX$4aPC{$9LVqc5>DmT zio^17%?0LRQJJgxBUTmY!*pkd;{i#Jjs*rFiHkeCP_wZ`gDdm@j=f_mVr zHYh@!bJz*nj?y<;n_G&GZT!B4v9-O=@31o^4$Bq{D!UF29@1B8ocI7heh07X#$9LmnUyv5S5AhP zzt#|%cwAq`nlVe}PptUH91qR|#B`dqX`p15T8kU`YZpH3U2Mq6<EV|f2v-FfT#goW zWJ8{D0+*$`X(EQOg*ToVuU?Ie{Xylu9k6Pe$7pRROp-Qg$V(J?Ol0*EihJ@k7*Rc;Ezf|5FI@Mf=#w{&vrY&dwBku`Bvpy+56j zGKL@O(p{>@i$p9*XIiQw--!R}&3F;(L_*1@vY9Hg4Oa03lf1mqi`+FdqDPGI1?S)J zULNzMjjr|@r5LiSX2uO+lv9Tge(xXLLbs#ts|wFkYV%BL^G%z&c|5w7u2L@|Q2NMg=_c)R#C!O?m=YQ;qt#FuFwa`%(-s%J0>y7qw+eG%i zh|h42gG4gHR7ev=sPeK0jwEY;*n6MAZSZ&uR0SRn6xbqq`dg=rx2) zvo?3+7O_o{#vc;^^}nYmJnWYro1WBhmX=(xc1x%sWU9*f@40Hei)mDqjY|js6Pm;+ z+lnIqb-Vn|`nzHrplLI3SeufNE(JiGEn4f1j>|QYQIx{Pf<+CZ5$LD11Zz779#*06 z3v{jujRR7C-7C)E9ypG1o|5mXCvGyFiQf~7Rzu9~zIrVr8D=`YAD)=Fv>?P1*JtMf zr=*9rE$4ip#`>Whh$CQnpmD{Ko|X=BF@2>zoIzEm`r0Ajw|N*~8rc%4yHkU?jiX(p z8o5r>N~)uSIwLLPnR$h#y6jCr$XHS7`0l(+gwN5ARm<7{nN1m0<|fh`Refdtm2S^s ze{xuHaX-4=KVrE?AD5OU23szBLhIR_-0Pu{5+}FtiGn?2?WHUs9A#{yZ8_4m^cCT@ zuDJ+Aq=<>%U7$@>@wX zmOd{IC)5a^p$`?#+~#*%OGRw#HSO8%@&JD-sGJDCa-@GI)Du4!q)|u5eaY@09phmiaIfDqtpe%UNE+I4O~(wgX8d>&wbqO^(yUK63=heZ4mu>WYl zJ`+_F7Dw9^(Pv!wyXKFQJDeg~`ugkj2ti6ByV>NMK(3;JJA0~G2w;|aeT~}?zc@=! z^IgFEzb0b3Dp1(<_eWbTYr#lP$!Dm02T9%@Y*~cgu2TJd~NiBF2)jrmx`Ym!P z-1oe$ER_u%SpE$5;F-uLd<7FmsUJtvj`X0`L-Wq8v4TAB14YmSekMHZpJMgv9B10c z(tx(r~|0ytG%tztRkDoLj$tBZ$o-xhY2S?7>MKX z!sR*REgBgiCnYVNYdND{=TWnN6M!P>tgvI|coLa=CHJWH zvfchOdYirE`lFR!_A*R_qt9=CGax(_B9E!x0$lEw%UMR{fDO$63u4a7&(8TOo5CHX zvOt3!Ql0JjF9{$+ebATfy7K!(fd+iYSbc`T8nA+Pb9FvPyWZ&8`Y@ChXp?4KvJ!HV zy%RXWOK>ftbzA*)OPd?uX;p09J1pg!S)Wu$pF01@bELOBl6eAC$oHYr@wQl7Kav5t zoUpekg}l(E7jP%fft5h2P!Z@)>~l-i;~-9qXTs1JsoX0bi+-8dybrcZ+`<|U949RpW;On8oHEuLR`h3s)5HA$gu0OGYf`W7>5q$5=x0p{C^1{zd!v zAiI(Bq-$(r1ew&91i(?$LB}6`OxbzF9$Q-u4iuy>5F904_c7BYI^(;j_4$;+Gv13% z;F-i&ffm!TVm4q=x8tTUHHG)1@ zhvn+YBCHAfbOAzrzJPCEFtz)HITj>`R!?1zo-guOpx^+7-FfdbLnE7nWdA!>S656dL$brYjYVIq zI=tyFSKkbw>c~XKv0bP6-$vWh+<=2@_QbM4o?2lruYGm<3|CckXTIKte9S}o_{8D9 z!E?M&i~rLCY=%b+X|TCU1k7-%m@M~91>51t`S|@3IO&R*v7AOpk_AcpStFO)ts%-$ zIvFYXkHv$xhi(H&1ui$tZHI<4%#=G$`k-Z&?*W95K9D#56!!EWeMM!UPi6Q(U5QQ~ zfMJRY35vBl8exOhKO+RD!GWJCY3TPm5lbvLaHaOc+eb7vyQQmN2K4CyO;Hm$a&|)& zA+O`dV7?mcfN_#YHP(2(JW&1`FH)eLaUXGk0|(>Ld?YbY_bz{y##eJ@nb*YkM%xk< z6r^u({)^_S+AA)yL=Y{K#!!)_n#Nqm=k|tI7Ci_Bb7D2ikV7hUiqdZ^OeE4 z`b~ZbjRwq%>6~gTHDBCXe?EV@g$ik#Q>3jEOjLi5!vp$6Xo4S@fld?9oFa~l5pX@@ zi0zY+Zym1ED?G^45eNch1G2lrO`A_@3{Sy&cBjN)V-h^snR=b#!7BUSmFXkEyHD0` z!9s1vbPF-r^7aRvF7uExY^Av>xRIHK&G5ST8Q>KzPCnbag<>)3)YenWt+(9l=HaoS zc;17WJMNEhBv4^GAmOzizwCMKL!!HASFqRLEZ3qaQ1@*5G9p#PC2^zC^$AKMJ|Z>%qYkw(=&I2dpP;QNm8-{8$0e zZx_@bUw?$D_o%rEiK%XT&+^TzE@s^?2LIf=HpsSfa;D;8jD@s327>Z)P1HL)su>$486-v@#@Vu@Bo`8+9MMzDf2r|AH& zAgujO#&Ya?a&*jI8s7L$nIJ((iZZKfw#({KUowI|O91v22ZHiH9qIV1Gd>bWYcW$d^lM0YU z1(W=>>CSQJ^Cz11*JF&I^@K1u}gC*(W#!QYGH8d7}{q-sYsGV~2O*Hwotl7!0 z5CTGC?8QIK6D|5O7VV^z@?;wegpWpxsUv%rr*`AYF}%k;uYk;q4zeLTC%mB5+}qQE zya|*jDIC3jRb$l=w$)N@v$s>6cuRpoMdh{slH(vB-3{r5nt933g2CJJzmBUL8Nk}t z1M%Wp3yLIgVWOtinqp4|z&RCKoCW-*`I<}+jRGT>d^7(Ak#-J=vYE5(6b=QzN|J0T z2&hH>5y-Jv1MIP2__CR>1II-E3*}d6yWb)ARTZ9^Za15`G;i+V(nM(KdKLn-`QPHH zKa;p;)*LnY@jc$|0Ajx=`d{WM$l^Q2OLuh*u1APHxav zGd4O)YyU1r+Y=hz%IT(xBc|YBxc>bfh$KL)iIy^<8O~j5`u2p3<6Uw~Q=G1GE^A== zF??(76o*ZIZ0wAW;^#-$3l$e=or`0T#R~qCK*n3&?#89Bei`O6KlwrJ0b+viHVMCO zk#K4(DUxsiFb#b0!b$p%MttW+qml*>Qe-LC%AXYKK`Minx%%$ z#N7wbzJk)xIsnoVNh@-X9DTb7s2zp)xeXT5V+YeA{;Vx`iyWL%|LWY6$uX zy#HT5j@YN_@SzK2ywdRe^^o~6@jl1>9mNnLpibEuX^E_O81W+!_W3^K8&G*&rjVnA z9RA$$1kmX1ja486PxM`!+8sRLcoonR&sD&27U1cdFflXWKQr?0>}`Jr^l9fX!XITb z6D=~eobg=VY!&vDYwL>t>r%e|jckkyvJ5^wvYyAmK@tEO-4f$@O`}mcQAGaf*doHLfk6_wL&f z^*0m~MXX=2C;fsoYs)w|SUffCapOt6e-q$yosSOJtkNEA_C_z9-&r66m6qHetWe*Pl^l4HfYvdKHDd8jn*Z~sRCD73fejXdT za*GZ!Jx{pIzJFMI?wG>Ur#>t8zlsk9_pjYgrwf`7Z>-7kU75G;k^M5}0GS#g| z9Ii%%U7%OkHCo;)C+zhkX=*ZM_%|G98!u<)a3AiP9+!iduFt9TG9YjI5D$O8A%iG; zx~wZt;665}st0QQD*|LSfK^@^)6qFNU9e+3o|BTHCu1#UV+u2iMlI!!k5m|$g#-t8 z_q8QccrU0+GbNOEe}ENT47yp`XM^RwU^;@4Yw}alq-H;3H|eo)B` zLViPuz3rt}(guLU0PU-|lJWaebcW@>ebXFKlLu=Wyq<)J7r)R1pf-dR0NT4eCv8K%; z=<5L#+iJ=CIRa2X93q;`QjB5^f9?$?*bOZ+LqDkx`mQuy$?N!lV#cDgHF(VkXq(qv zbd)OCfXrPDD2+hY#AEb16f9i*tUM3JZ@pas;_Xit4N%qS!K)%E6BOB!G?~;1oXwb6 zlF&Grw3wY!$6iofNVw#lfNLykh6IB;PCOMuN7@+@&G=jT`FXStkKlhw2Jf#J!gi(Rj|z0Y2HcQ>m})lvxNSiW6Ly*|Kf zer$H|6#k#U#D??F^Bg6xVoLPF4#?r)&>lw``)=Mf>r>e?Ublo|jcShz7y{bCBMFN8 zRul6P&@6IHxa-bbrkK3+VRxl~@E34syJmcy`V&rB&nT$)`|%;9IwcyAtu-!I0E%WQ zuU1_LK)t*uc!?Cx$-<121Ad_LRgN&{hX3U6RT zw2<@Z0y^2KC)!0e#+GX3ivN#q%9?zdZNQ zO)^P}Wyxrt&ekjR_JaLvv3o7qvfYc*4aZa}quZXuXwrf=KGyjHBP19Bg*2t%{KTBX zmy2Xrtfct^ht{vceX;f~JSbWG?Kek#BFKbWD@MhPO-$A|Rs7;h7T7I^&8n>?Fy!TJ z5%#AYXqijgLb&R6B0@swVa;#~Dt+=G6|I|4XhKlf>hvP!^=*Qx6VaV?+)B#vR~!8Z z!-1KMDu*rGUdBB?>Hn&&J#iAbqGdDq-rhWOzxxMh3}-U@ZCCvLT$!IYo>Q*Ylf7py zM&PwuUJ}G{Rs^aF!%TaBM^Z=I- zF=nTK(vSD9gdP=%FeFz24~G;9l&c&15s>(*JKY&;aLRc$b)CM%c6Tl}fF(#zK#Z_u ze@XZU=u$H?BN7uAA?eAyA&UbFOT)Gr!TPl`=pJ^9V=a6D_WYEV5iSbW%d(vFc_oQF5u+o*?`>Y_}AC=gSF9-bS&pp z=lw*dXxRADwC%qvM#yZdSy9f|(%9`;peX`k8Qhd$P(CYL&!Ebe%ohB%XUi|9F7iGJ z=>v+ApJ^kw#+n^LWEs$+|59F-X!@bLaAXA#;-!pH!kDdO(nEndmyLgtpEl40pce{R;p>wmn|6ZFMKQaQsNkAkjU_a}b`k5K8q+y+EDX@Y*%F zEPnWI+oBm#Sg83wjob*DoDT+n2~nDwAFT*J0swLVX;@kVg4`!Egg=Y2=N>{@s>1wo z&paSxfNV@5@t4XDE-V&Ur@(qy!_SI(-r%Xfv-5jm*|IT9bqlBrClHr`vPG4nZol%} z+G0J8`k1806Q@wBE_xo>Sh=t&zK`yUCSLJ`P^u@dDca#W8`C2B_I?E0C^~`i6fzZ( zalA_uk}2Z`5PGG5F)vCgv*`CJ{n_*q`)OlRPkYBI3pU7GUl!q`Vzr0hYndcmqF2 zR(?A!1X|6y0L$^zs}I1i=nse1%*aBd;y&L|a_!gPu8(8w)SqWAG1W1q0ilq+9Ww@L zLYVov8)BDQD^!V;>jyC}2@{w=| z*(|NGBsCnl)6KeojvrK$Tv@%i&`Z1;HA%Z~jHKP#*Nk8ym7kegU~_fyEx1TG#c)vr z)G7X@M=3a@GSYqT1W$?Zf7{q?c`!YlR|lc^>M$#yR{qw5|4%1Bpo}Mq`1^F;&27VD zAzTrc(*WOG|7sZkNCtrKq>-5P)dUl3LO2kcXFa6s(^Y<-__sL(;&e2REcKi&PM_;Zg4=CcMsf7v%8 z+s*eOXOX}*;|3L&Jvf9auV0sL?#3E->t;=*=qCu^y%Y8lp;sRnvxb5I#sS5Gc2;>W zm;z`g7Vx~u8Y=*g7SNZWk#{+!HDW99^k&jg5p!GgfAeR znLa<5DcM>mv}Lop=}CMz@Z-t4Iec)&4N0KXtTLrSq3R&}_VjD`=cfT@HZ38XpOsin z4^Ima2ZLT|l@Q7Kuq6M`IoIO)lZpoL@%_8h-!H%h4r+c3Jg8}Z5W*SC-iH+R_kAv# zz@ybB{{}<>pxuW+Rpr^INTpn4Sk@6P%kNPbimBwhc>^D?sU)J-%hjDQ- zRhMo@>)+84--~>);SfMNr{TfA4{EmSi3as-b$A8~R|oYCF^BYEg@9yCAk0$-7h#0+ zX&KWn)6?Ru^WE7O+6UwMjPmIO_~{ib86r0Hgp+YwE3SmI5?X8dczQ0z349v|(U=DDp0h`jjI^L5oktd}+2E z(wV*_mrcRJ$XTX>g*+tbJv@x*Y5%p2(JB3c4h8$9c}d~vc34e(i?Alb5lH_PGYs_i zbbt$8GW*$ZJtibX9zb|l$dA-tj9@vxDlEQqOP~zO#%X9L8`zls5Ty{KNHDT-DN{<< zp=G=weU|wovxUIlBuM8{(3Kq@oQDCo!a4~u4HY@+gN&MrW$Hq^!^vsEZKG4rkl(7kl@z((JrUA?^bC!7{9hata(`D*i zFw!K#A+~e!(cSvI{uKet++@xJ;T+rNphY5Qdamd@eLzszF+T)rhWI=(8=e_jyr|`I zyW7~kEJ?9ixDi;Wwb>pl+(=AL9$TwtVY*w_o_9SAOVjOIW_tc&$~HK>gp_ z7+IYP=o>%l@LQ%3~_)U98+E5G`;KIA8LapH?bv8ULp5{gkh` z0@rddQU)XwVS`N3y_@fUZTE)BMbU>Tz8{L}$4wNd!>5sh(W>L-#Y^QV;pC}37N5zF zt9sbd73qKjRq{SE#8Ro_(dyvR;z{MKcZ^krkzTNm0Cr7r_JOqs*WU9lN^_~>1fVuu zgb*^>R2^QI_bB;V%kRSmz%0 zcJyJ?CSxQf#V`5D{bPM=EuD-53{kNpeh(QBtkMH9xh@=rtQ&KuU06NNM7V@(V=n|B zB?=E{B{SMP=aD&(X4uQp?AAUEJ8M%!FSh8|0`ez7_*WoueD46wJ4Rm^+VI7?TF-Il z5nYRI1j?%JHr+4)45v~r0{WvoXRG-uMuQ!Yk%_g~4vUbRV|!z@^&?4lHzwS$QGDP{ zL~3y7`01Lf#fwSw&HT6)HqU9!Vd%~D8;$fcJsReL(c;d0URazI0vNw&Cu zlORd!ohktp4?Fz@e|xOBs=_6dI!QJ{txSwIPN_=I+oHx?Chc$9T=o4Mq?x9!C<)aG z`M*B8wtxt;3xA;YNsp<;!~C#nDeJ`!=o_Yp;gud6%StoBA@beR^FJiM*YMgMK97}z zueDa3Nzq^>^PE!wvzx%d+{x~HYJqFcxjR{|)G4jEG%oORaY0g}e<(oOXNKr_Xwokq zwYArP6UkiXVkbnTsu$o(KKoS9ZY|rTfB0I`K8O-Zv`j6TQL5m;!$T7RgxBiyW9xwR z_mMzBg~Il}6*}k5SLK2iuAih@cz_CjzsU}0NLSS+j)RU-RV*CNP@Q$!!N|Zy0~hl@hJr)`C@S6^ z3}5_yV@igfS&{Ho#LGHh5|Lz|^IpUgPP*chCSrFN$N5DvhFdNL zs+-CDtCC*%nc`>rGG&q-J=c7Z9zN*#;trpE`Uc5PVckdZHnFZYGV#nXmIl}PJaDX2 z4*2voTkD9+`V$KCm5(r)VEGE{_V&J6Ig5G)4nOn3PUpV=wjPu`G(GrdM8x1)Qf991 zL7-ZT6cs{N;fPRml}9WuIVvE457ce1@p3SqyZkSpDa^iZFx+yCvG?#`*%O}-RHZcdq8XyhUq%j6f#=E zQ&r2N+%Gong}*H)99Qqv>4NrA|H9`W#jM?(6^Gg}K&~CUo%QlJ>ffqIjwTR`@u2uWYamHQQO`>U{;cxbM}4$=1F!}PZbvA&Iya{CT= z({09#=EXIgn;;p8_rzH5W~Oma1iVI3HYzkuE1NjDV9UBQAunv)M_xwlxVAUQdx7Sq zqO?gW`?Aqzb)Z(?NX3x7tmTH=15*48a7MHLy2wIz^tbefRmzg6XH|fUHsTR*5L_6K zhR}IQr^!+4(5rd0?P_Yzd4oi=I)On8b@DI?;3Ixm3q@+?uA+JMck|~z6fFG|ED=vG zo{mYoy5+|bbiq}=a#0c{bx-Y?MEppk$9IVIJws-lVfCHiDPfh7NUNe^jVSr(;X(Ph zwBJAnBUP9>1DfhWog0rjff8qqEcS}DfWaLpDNCN5>=9fLH6o)|Y@|uj1;l1K4O<_K z&42bmfP+-sjE=bK@?6#e%G#4F8@_ z`@ev-H)x1y!`xaWrt`(7^U1{KHPe7!R60RN>5|7^tctodN`2EIXD2JzH(|@mds;Y2qa`+0l)m{jW9u%Te+XY^k*m@s@i~{U$WHJ&$V!MAlE`QNzhvz zQut!8#;ei;yU|g`ZTq|BvkxyU2vd?ztDX{5?2dp{ z60Xu{CKPca9TOq&n0dxaK)ACUIALmVA7jb828FZb%938aqv(9Q<>IVxe9;m@;3@cN zjNL;9h@Z!_T}vIUYT98EW>*#Wx+C08L#nr9fn8ZDU=Pw6ji!{<7cl0e1Ju9SDuryc zrswWU^Qm&W*6~PJcB+7hl^_)KyL*WAxCX~oCjy8WyCG*tVKq}Y%73>UO&`_*#BRR1 z@>*#;k^&d?xqgXW2#CD5eus6ty(=M>d;S)FYo4c8#J3UV$ajD4sBw0I-{kyAdi9bh z(Z0JrCk%GGhA-UscfqOiFQ*TGNxglXB>;(L2P{3#m3iC2py@xA()I3naGl)ajYq zQCxiAvy|Z2{?e7>wphdwPCi1%-QPJ35f{8WybUA6T@Zq+<(?WW52ESa!KFDZa3^T< zoH91*2A%XgZMh=ixk2e1Zm=pI+mV-FyV2ZXEP)yGLI=H%H_WE@CmAmYFppq18uOfg zTP|u5^-LDzvfjO;CJL&ro+-_o{eMJ#byO7G7cC|wAt4RYCEcwcoze}0v~)9sN;gP1 zNK1)G4&9Bkzz~9T*AN5DyL`X**85{zOT{Iedt#q`_PvLI_rd2W!jBTUtCcO4nPFTt zF>=&a6BalV6S`d&s>Y-87k&yWC^#FK)G@CL6-Jf_$JT5e<5$5}yRi4F5zx@jEp-F| zQpBx3=2bLS8Wydy-cT=5-62=GRKJ*6*BQbO@1s=vWY=1Zen2OsjSjRKUbR}a-wf8= zDeBr<>i9omGOmxh9F{hY97nQxP7hftS9e>mlXAl4z!uB*bD@VPy=}&HR?Cz{A4XT^ zh?Z9prLDe=KZC_wTNkS_r3S1r4@(>qu&@q#Z!QX4-6U-i3przGsE7vlUv}rIIRA0x z6{s=aC-v|>rKf)SD3YToYFGq0BbK5JTy=bCemsjPu^U*j7t1RjAzz`O2142!6+@Y zqvPg|>hAvYMyMD!uyE1x{hFcxeokZ9<@VC17S%Hi1%^uai&ykebmeR(wLV*^Z$G99 z&ga1dk&7X=xb;ktpp3n`L)%532jViDKT_`wc4N4K(OjJ`Q?I z5f4_XU@PhF@D4W`khpG1tlmEf)};^u4IEkPaA23Ria4Jat}3O;*$QVopLY;QS^a2p z09kkN*KV_iV7o0K8zba$CXk&@#ORS?kq7=U%0YK_#)^b0#&k9x$B8fid}9atA<#Nz;2-kQ0c5~N_JSL z_%$czb(Iy(*~5e-RqT zGp3!getQzQ4Bcvi7cdRox;@M#FJze%`@xd;nl}u5{0`dA=W80l2V$SY&y}QwYz$~W zHGv#UR_}v#q)2pq zDjnSpieM9r4b=#Sg%;hp<~%t!zO=i%^ZR)M)8fr`?mxjlzP$eA0lQ?r-peGuh)ep+ z%h}l9TOV5MaJzzSrapN1ojsZ z9|8bDI9HGJ%A_S+y^wnQ67y-4n4y9~#O0=|>dDaUm(`CtuyCU*i@j?qDWjVF9JAO)7LOH@LQu>f-}TBp zjEWB`RH1Dro;!DU5_~{C4nU&X_bI8%??Jd$S+ywnbkdeb^zR29C1c#X140J63^JU(y4fSe!kSHfAi7J=V|^VbVIPduI`7$ z>C>6J3m);soKV?qsk5+m-Nl6oydLBsxRbb6kfTg{dxFh_!Vix876|z7B{Rlu;?Com z4X1IV09w)2qY+R1dz_q!&FbMw0*d1=eY@)EYtgwj9DQGz@(>62`Y zYz{K6mqFxoW5jgt&l1ip2A8I-N0r6JNpYIX6>U&VI(Nw?w&KW#!-&m}HIgI$UXH7s z!2A945j7A(Pi0z$hiWDbfm`UOsC>&E->{-Lg4%q$buMzowN_eoTc{gzXo9ww1^u6~ zL`$4s>8anZ)!{0aclL~%8!o&o@!Pg`J!8q`*V+h_{Oj&+Z$3czWewplu;+*-YZr0c zgf!jQ*FG>@t7SVweji#6Su~VcjjDMX#kO?BweNwMuX1zysXDOqr9{eR@=f466&pRh zJFlu3g2gK9R78{I%KX;u5`oHTbr3$B2BAS=Pl>#N`Q7~BiL5gA$96Sh%X+OQM;sqM z5X8vvJSpz2oEM!!PM&>_eGR|5k^Wn)chnnSX?9qKj@_DmU!%swb7dzms9Nk1&VHLk z#kR?oL_0QEJ8rPC<2A2h-PQLqFp0^pd?+hLAJgQr=f3VHyzr@##M{5){g#rmwUl`n zxj;&M5%DkT@y9{ExqLlderPJ7e`{Kc+4Vl3F7ySrONX@WS28s$vE3Dbt z%T7`B-`aqHetAZY>yc5A;51pZE(Vt(IaYe^mZ8pI$A%Z&q5-JG~V0@aP>AIyV2;Ox`a8%r;Sif9cHD@Cy1l zKqCCqw^me`*Hq?Zp!0drFd{$iYjRUWrKE!tpF;}%R?|B?)2O#(q=EdrA-|vFLnG^& ze(OGrdd{SkPVFx(8Ai*@sn+)h2R3*RL&PkIWJrfk^@-}d|*skq_29QEeAM? z87lj&(Sb=D@AG4o%$BkaPo||de>x0IlV1cNzg|d5KI57Ulh@q8wk(;vfB*WLemeGz zWf|KWs^r&;cl(!5L*RdA4fS5DxhYhc&!_KL*QRsz#vc2OhTKZT&5zxr%|FVlH>h>R z61QEhgpb@hL4}zXPlRlW4JRGR-D<6DUo9$bOshU4hLqUam3f~~;edJ+fKQgvj>*y1 zV`G&Wsm@$M6kBj~B-hzRn8%!^6Fl0~9 z$Z&!#qWszCH)JP5`TY6KB9g;hSd1kpBDekJv!{=a-*gavmBl0e&~E*Vnwy1GLPD>F z9-Pk?0C^Op2;uX1d+ruu^9%wy`+d_(4{td^7vj-jvRmvW@lZyTDn(WQxX$E)f^o*0op& z@4623?P2H|MXTQ#&5XD^ec$3qI)PU(v1EA7SWhCi`~N+h^M&gv-^YJO3WMlWa{xkYC{c!w1LWONFyyfM3(bqAqbZ)lQ8D+7%mzj*qc)wuTI zUA9L?a1e>r1sQ7GMNb==V%CgZ?}(|bqvP5-QOXhQYabdvsrTLhk9ZPMkm*bK`8m3E*XprA5Y}-St|WOhphz5>k00YRWOiO;c)D&YtDYR32FR4&*t@NJ z?P?tWNhwbH@A!mN$OXjr^aAth zAbi>NhOG+6>re*G*^78}g0s62%bgU2z}vP0VgCL-KKgDYQS{ip=tGW3C?(Fwba2!O zH^`GeQSGhW#x8Td+i+<@IR{VJ#U+Qw zKVY?_EZ1dLV7PTV>A~2QonNgF{l$_Wrll*Jz|FC?!_B1qPcsdG3@-`6KW9rO-K(YN z)%y3oqQB2rC#0qBF-YK)o;r5E(KDaeUt#-siB_i-yH~YhMJRVHYj0rQCqv(GiRHrJ-y|! z27{w>gKib^o2p&YUgn8*@bcm_}opfaE_A7For;TN&5dpgzh z66NMhg2-VihvE6*&$THTo{R1zZyKoscER?Zj zU4zf(VBF>mpw!^L$yct|)xON!yiZMM|YVn)+DTx5CJM7aR|#H@^&!N2#j(WV@xiri)pblGZTIiSxo)?_eq zVfpKY<$td~eYEvAuo8 zEANxTo6{@C0b+spBohZy*rj}+hyQ=(T)C&Bn&LJFZ$aDm+feJZ>$HD*StQ5^D36J0 z(W5Bkoj#H}YrOatD<=sOtGKA~Mgux^Na0#c#^9_;Ti156Nl$T^01sks!TYdBggD-5 zFY3m+uGVRUV(j=XqP9d+y!mW`*3f(XiBwiHE(*vqS9jHl=u|uj%sMx>VMaQI$9=>S zPhCeh9wGt=vzJq!O&ZhQP*9_dQ66#mfE-uO{2>3;ai?%K!UP-YDQfFOx z2DAeQH64-K-bJaCvX7Am2H(8gzW-o~>EuoKbp zByYhT7C`VaY1x9#>AnkfuDzmZYp|M*4PVmvfaIOe=ldh4l;w<>4j=&-UN%K@;+ zNO^{_%(m+XN1`-!p3|iVow8$Z3*q^;eWYJE zjUQ9uSQv=YI>WsKv+iot^{V(dd&OnD7wzq-zP?E-3 zIDLHUnV9%9U{u_H7Sj$I7UGni#j~rG`K@314IcIWbM`Z?0rW?~+UTJ`)eA*Fz)Oac zuM8N}56Q3Nm{8~{Zd5JNvAaI^e^d0p9CZTrVST9$HW+%?HZoA0If^=@ga6!nPc#eQ zFv(~4TMCLInkj3XG6r3t2F!L3A3}8&87Mr(Kab}FNQ+O9FtICB1Z=pku90x{H#EsG z;MTeD{4u@s=6K%GXt}O$oRvk8uZ}TxJIa_PG!pCA+Jr^snNr&Li z(?#=SqhfnwkGObBVRKqAd#3qdV1$O!V#>-Ct`fKR&Y5n@jJ}91v+pUl(WZ@ojQ1&& z+Mmu53pF0lc}BXT`y=OzaJEU#3wzO3+s!+<&T?Q>$juk9tzyH$jO z+eS`EbNeDK~srZEGVI9H7allnqa!Estat(43h-9kk17#V}Cj!aOkGV#0Ak zk`}$wI9kaAg?1c&1Bdv~SqRK6#zPr%XP&-io}Vsjz{KVI``DuyfeUIy#D3X$y4iJe zA2<0GS!Y_np^JFi#m5&R2l-Az!e4o;aNPC(OQs+rI(y=Ro)W~Gb&cN9Wa!y{cz3nD z20}5Z3GM@($yKq%l19{w%QED_C%s#;g&Z*zs0gWP8Q~c^=LfYxh01_Mopm$>;h!pl z1^X(591=i_p_1Avxr^+%-QL<-nJcEU7)XfyVfxob6#g%gSV}VB{OZ1K`r8fow(3`? zc6!(|CsYAd{aw==uR#jJjO@Xc2-%XyB&Jx@8peuJ0MD}d0(4N(baQg5`)lj*LG$Um zC9gFpO5`T@J@Z`Ic1CdL*0bF$gQZOUT>_9Oj?GBISfne7R_zOvjp4LjOb*fht??G9 z5IUFUf3|J6F_YS9Fkxqy_+y+*lM=6yclBdRk3z(5asm+EPg_N;x(E z@);L1@v2M$=bBPfILTwig8Y+7Z1)`irKUL3qMG6J<}k0dLRbKj=e_|DJ)UsM_CLp0 zNfQXR<1p_3vc~vL{py)bwt>gL<0?;`nzPA6=U=}baN11h-ofiL?oWw8J?wc`*uwgU z{jX)ELkoj2XtIydxlciwIycw7p><=2!W9Z1w5RfdT^x=ry*5($T-`NhGi96*z zG>}8A8^QpPOJ_N;`QD!o>Sm!rv^dRkDJ2Z~zN}a-uE5+>0=FVvJuUFnfge`8-N55I zTK<>saa2W*F@{o*DPyhkomM9H9oD~HujSJ+Tb!P{T7Af!yrzQt8dj?CBjbkpkc-_X z9Q^9)#+U%TnJzVxz!F&F{K1t@6*s+gu*0p`R^z; zBZj*U#MRvFDM-#mlXDxj=6YuZPY9|Iaq>jVp(lM`j>c_Q(}?i!Qu?iMmPbScjCySX zZc%$vFF)fDNRsmc#oEg8Z?%Sm{wN`-tQe3R#{&sGQRNk-=nqtguEQSB+he85sO&6R zl`%`M7xzdomG^N`*n5y;X+7>aH*VZ5sVW$m`NTDc7&Ow!cw{#xE|YT?>VNuusiv;1 z<(;8^oAdgDHh{er?P>nO%dLv5!!t-X?d|`&^gRahXypM8udhiG`6h8El%j9@GdQ)BcScU;YQT;Lq*X&3+ zGj$YtD6VLf6)doP6BmGlkU%arPB&0Z?mzkJSDZF`XqHwn)UJ{k<{J2NF|nfml3EH0 zE#ZWT@wH{2Y7O8&Y#|6B{ukn$(gbD%FLuI3Dxj7{AzgPEqk{@2|+!STvFA zgtBJ>zvExEV)|~bK92sNQ36FH|6~GBpjdb&;zHyS_s2Hk!SCRnafh0fGR!+~6ZhxW zVco{8p6P=w9cvx9lh6h`=25VE4v$=-clR8~Ce{wzp7Yx(w0Ub;Rndbc7$f-S7%`~W z01b0mev)+dyW=k>^j2#7JLkXVv#zE!z^8K)1M*4p&Ahsb$XaHgurX+41Pz7t?R6C| z-ZPID7Nc(Qkd@)n!q>JiMrQ$vc2j4Kc2SY+Uco!}C z{?pt{lgxqSVAb}O*4E|+IiuP_*4VSWN=8}1Pd~3@7PKtRYoy0pw-r^#sNY=qzJiNYFqiQ+-3!N#+FW>;r ztORSblif}1H4!deu#nYhd(R>^qiulSg)^YSv818RFFd2s%>haGuGM{=>mA_uGCCVq z!gVh1rmgg@Vj)apOQWz|2kCv!OXv$gQsQyD;9&)ega~7SnEkKsz{_YP0BI+B<~5|| z$#Q#+;|>2T!E@p?7yu&Dlt5C`^gGoU@v3KTi#FlfklJo^A!3vuvW@H8Sf;SZJV=6_ zQ$xrl$Aj9&3;;!6T26fNUxNpnVgqnXjL&l&jVNTxm~~yZ*u;PFVwA|lk;c2bpGBPYRmdfwpd!<3a z1CJzDw|;MbGzUZVlA#6eSC~)zXwWAxI^xf|>Yew#K>Cy-(R{Zi4AQk~iVH@e7)ID3myNAx@HbJWW<>qzT+d0%sD*ukUBE zQpJ-l6Y@1e+XZur3m^GWudbvuwWigzEQ*@um0WAELi3a0a1VX`dBE9N*FLzsy81S2 zhmM0oFD(2e3=N-FhE9%JhrAYuv|1sn7rZ+AR5QUwpMFf)>=|BjQhG9CSS(jeiBYH| z?&NH4hR{XlyC8PN*Vc-%6-EbBek8A(5}SUU9=H5g?)^5JvM)tdqJP4mvQxkU??I^% zYodsVp&%*Q4*`BtN9%UWYE#GZzM0>j7AIc2DUj9>A^ojQKH+xhZj}t&|EyX>0Jxg{ zuT(bO4--Ip39`xL(#HqwI*yOq!N8HwzlA`hV!iQk58PqknJF`9`AC))=pe8xUV@wU z%gDQVM-?sTEFN*1(rY=*Hs_=TodnL)J%4ireqYesGraFjyY0RGXTl-T=XU`cUDsJ` zzr_)w-X8#XkDMP&VgRo*t{H#fN?lJwl?#m{lh{9_!faeS0`!=3?|o0m3tF}UdGj=0 zn?1E+n(pToRjiw!W$RoVAN_*Rd4^bht2;PVSxsUg1Tf15$)<567NU zz^s(q_(&2D)W{w^nLv6L_Sum0=W$oMfo1UYa^96ZI2xwV0zTbA;ZGxsCZ21M?AMl`! ziD0@s?%?>?pZ%b2N@sj-TqQSU)j`9XoeN)Ot9J37iM)ZUSg*Kc2XFFze*TEc9~4$k zyPx2JtF=pi^YTJSb;i)sj{}C6BO=|ZA{5axza2A&)>o@Mmw*nyI~tYBJ7TD+DR0^9 z-cwC~@z31-(H0_8{L2ooxJ~WM!xqd&YFdUBB4Xig5=`(llFzX0w#8e$KXSD;nW|h4 zp#nZ4RJiZ~iJ8Xu))#=c4(b~gwq3qyo*Opqg5k@nxj<&V8VIzOCbp@$f^Mua4sfFH zn(t_Pvo5TvD5he3FrKWbio}+yv(`-`W$d`QPQUbQeUTauCO$r&P##g&>)42uFdbK} zr^;Byr^b#~FZ|mau)dlPr`XZF2ltf!#r6g_pq0Tq5@n_A(01r!8S}%fT9^8k#?N&{ z!q1Gg5A-8y-sH983e4};?zq&0UgkML#)OqP(6dDsLIwmc>ikdH$F3b`GdsjF22el^ z{gJq5d17%p=CJJ~+z9_3sf$=7H4fONRWbYxC9DOvc{9-B16$cmuIaLyXvsrtI9O@BQu`SP!jY^a~D^U zfbiab?pl64{`7gGIN{LfIWY|lI!5FckH@?a(aH82j(Rg~WOukmjA^nYxmdvuuw~Rt z@GHQrV7A~~D|8=^^SXiRg);laj{tTjuH{EtZqGhV17#Y;c!Ap>q6R%mP7)t?>)Z$E zrqIZQNP@o|YWML$X7bfoxC)hb1ui1WrvW$FxXj3lIqUyPoThr2q)o+2WY*A`Izymx z?bgDC(?$U~3ucPcK1W{GmCWB-O-0V1ER+t7eJiEGiG|_=wE^gtiT&oWg6Luy1^tJ| zT?5rY#>QPmW7S7IFfeY32JZ6J`#eD`B3CvL;7u3pR+wYd!g}{65s&ACsDZU6%4B5l zcM7{OQUM$kpxpx0DS@M|zY>w>12=RVHI4q6Sc%ncyO!9ShiKu^7Tt;49}#Xs&gP6O z`N<1G|8=LbkGyC3(a7D`QMNi)tCJ6UbgcH+ljm(C5FZE1$DgbLimDb=glI12{IT8X zb$j!F;VI`C8t2)y#0iXNdM}?^*G`!-FLqrnFHT!Ufe{EeEjc|W>6|AkGczyz1CE9E z<{PsLsVdCAi0(6kb3g%*wVWPOILG! zMU#5{5nY7~PWa6Nw4Q!cG^2&p*!08#2QGY<`b{m)d-U*fb&j!Qcu~=9CskakINKYW z3Wg+t`yvR}RP?(UK;>~sGsv&9~Q=9AXl8`_h$~0hf&}=-;CMP^6b_fexztY zQIfxXl*#eWpY?+`x#+)|4#GN0wAnwXrK9xpZ{q@RJMRSRrSI^txcPUF@;nfd-E*7X zi^~(MD;JSt3_#hG9B|E-KZ#&h0Qu!||7XS!XpcM8fhcZCn^Y0La@+vj{1+pBF07Pa zWU55TVPEy1O|aEvGqOfF7L}xDY`Lp^qMo0!Q|=`C^O;WwYLW&3P8;#+ph+b2@Z6)v^|`i0N28(aG5;&GM+nEVjT5%`PwEQ&uA z6>d#16tAP-Q+r!6=ckh^#aCBjM!DiB!Rnu>)ns$UKLM2^3)SJW)qm-rgAS0QDX?>L&l691kBUyN6v{6shIn-K7B~G-AYc^K z`kRU? z3o1&py*|%CUwhZ_NJXU)kkJIoya& zMMM;0XL?gUP2BF!*rt75t(vB`vX=6r>Dm`Nq~)5^`Xy!c>gIK()$>2*466ATP;ck& z{97OIJVL{m!lSf($u0U=Lk{=dU+SQc$ImIAD@cA6jQ=Y`Ap3XF=ichiaMWQGk7JrJ zeo=Fw{90gJWc3s~P$73GG}bxb*ZK!|iecjgK#%0A;gTP=Sf~Im1iS^1rTA@VB;AUE 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

FkBRA&1Uv+y%ZL;g*-VA08_RcWWFS8fFD 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 +6F#Z5cJ3#Yf#%KCk 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 z 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 OAk=kl7v8$}$NvEhAAivR literal 1155846 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 z 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

wNg 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%0DU{ACCt$>^ibesk1bE<1fKUhi*IuQW{P1+E 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

Z0l3LvA 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 z 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\U0FGn;S#jQ$`d3|BiZ@dG~IbT2_# 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

PYdYaQ&YilXvX!o4W%d*N6Xl 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
vqK#nUs?e^B#`r2Z`7ZQ21MPthzv#w3;mMO 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

ZCAeiqfbgAH268bgI){tf$XX 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

    ;#bs2VTq>z=X}0{b?}+Yv3`U#Dq;;=E`Rvu> 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 v=WjLg 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≺amr17$4RQ@v-#YATR?Dm) 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 YY;r-JW?EqW_$SQD0(7b3!p*z?0*wDEG5`Po diff --git a/xs/xs-vis.gv b/xs/xs-vis.gv index d75b9be..02e3c8d 100755 --- a/xs/xs-vis.gv +++ b/xs/xs-vis.gv @@ -14,153 +14,160 @@ digraph gocallvis { edge [minlen="2"] subgraph "cluster_focus" { - bgcolor="#e6ecfa"; -label="main"; + label="main"; labelloc="t"; labeljust="c"; fontsize="18"; +bgcolor="#e6ecfa"; - "blitter.com/go/xs/xs.reqTunnel" [ fillcolor="lightblue" label="reqTunnel" penwidth="0.5" ] - "blitter.com/go/xs/xs.launchTuns" [ label="launchTuns" penwidth="0.5" fillcolor="lightblue" ] - "blitter.com/go/xs/xs.main$3" [ fillcolor="lightblue" label="main$3" style="dotted,filled" ] - "blitter.com/go/xs/xs.doCopyMode" [ fillcolor="lightblue" label="doCopyMode" penwidth="0.5" ] - "blitter.com/go/xs/xs.copyBuffer" [ fillcolor="lightblue" label="copyBuffer" penwidth="0.5" ] - "blitter.com/go/xs/xs.copyBuffer$1" [ label="copyBuffer$1" style="dotted,filled" fillcolor="lightblue" ] - "blitter.com/go/xs/xs.copyBuffer$2" [ label="copyBuffer$2" style="dotted,filled" fillcolor="lightblue" ] - "blitter.com/go/xs/xs.copyBuffer$3" [ fillcolor="lightblue" label="copyBuffer$3" style="dotted,filled" ] - "blitter.com/go/xs/xs.Copy" [ label="Copy" penwidth="1.5" fillcolor="lightblue" ] - "blitter.com/go/xs/xs.doShellMode$1" [ fillcolor="lightblue" label="shellRemoteToStdin" style="dotted,filled" ] - "blitter.com/go/xs/xs.doShellMode$1$1" [ fillcolor="lightblue" label="doShellMode$1$1" style="dotted,filled" ] - "blitter.com/go/xs/xs.exitWithStatus" [ fillcolor="lightblue" label="exitWithStatus" penwidth="0.5" ] - "blitter.com/go/xs/xs.doShellMode" [ label="doShellMode" penwidth="0.5" fillcolor="lightblue" ] - "blitter.com/go/xs/xs.handleTermResizes$1" [ fillcolor="lightblue" label="handleTermResizes$1" style="dotted,filled" ] - "blitter.com/go/xs/xs.GetSize" [ fillcolor="lightblue" label="GetSize" penwidth="1.5" ] - "blitter.com/go/xs/xs.handleTermResizes" [ label="handleTermResizes" penwidth="0.5" fillcolor="lightblue" ] - "blitter.com/go/xs/xs.doShellMode$2$1" [ fillcolor="lightblue" label="doShellMode$2$1" style="dotted,filled" ] - "blitter.com/go/xs/xs.doShellMode$2" [ fillcolor="lightblue" label="shellStdinToRemote" style="dotted,filled" ] - "blitter.com/go/xs/xs.sendSessionParams" [ fillcolor="lightblue" label="sendSessionParams" penwidth="0.5" ] - "blitter.com/go/xs/xs.main" [ label="main" penwidth="0.5" fillcolor="lightblue" ] - "blitter.com/go/xs/xs.parseNonSwitchArgs" [ fillcolor="lightblue" label="parseNonSwitchArgs" penwidth="0.5" ] - "blitter.com/go/xs/xs.main$1" [ fillcolor="lightblue" label="deferRestore" style="dotted,filled" ] - "blitter.com/go/xs/xs.main$2" [ fillcolor="lightblue" label="deferCloseChaff" style="dotted,filled" ] - "blitter.com/go/xs/xs.rejectUserMsg" [ fillcolor="lightblue" label="rejectUserMsg" penwidth="0.5" ] - "blitter.com/go/xs/xs.usageShell" [ fillcolor="lightblue" label="usageShell" penwidth="0.5" ] - "blitter.com/go/xs/xs.usageCp" [ label="usageCp" penwidth="0.5" fillcolor="lightblue" ] + "blitter.com/go/xs/xs.restoreTermState" [ fillcolor="lightblue" label="restoreTermState" penwidth="0.5" tooltip="blitter.com/go/xs/xs.restoreTermState | defined in xs.go:1095\nat xs.go:1096: calling [blitter.com/go/xs.Restore]" ] + "blitter.com/go/xs/xs.main$2" [ fillcolor="lightblue" label="deferCloseChaff" style="dotted,filled" tooltip="blitter.com/go/xs/xs.main$2 | defined in xs.go:974\nat xs.go:977: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:975: calling [blitter.com/go/xs/xs.restoreTermState]" ] + "blitter.com/go/xs/xs.exitWithStatus" [ fillcolor="lightblue" label="exitWithStatus" penwidth="0.5" tooltip="blitter.com/go/xs/xs.exitWithStatus | defined in xs.go:1100" ] + "blitter.com/go/xs/xs.handleTermResizes$1" [ label="handleTermResizes$1" style="dotted,filled" tooltip="blitter.com/go/xs/xs.handleTermResizes$1 | defined in termsize_unix.go:21\nat termsize_unix.go:27: calling [blitter.com/go/xs/xs.GetSize]\nat termsize_unix.go:33: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]" fillcolor="lightblue" ] + "blitter.com/go/xs/xs.GetSize" [ tooltip="blitter.com/go/xs/xs.GetSize | defined in xs.go:221" fillcolor="lightblue" label="GetSize" penwidth="1.5" ] + "blitter.com/go/xs/xs.sendSessionParams" [ fillcolor="lightblue" label="sendSessionParams" penwidth="0.5" tooltip="blitter.com/go/xs/xs.sendSessionParams | defined in xs.go:649\nat xs.go:651: calling [(blitter.com/go/xs.Session).Who]\nat xs.go:659: calling [(blitter.com/go/xs.Session).Who]\nat xs.go:651: calling [(blitter.com/go/xs.Session).AuthCookie]\nat xs.go:675: calling [(blitter.com/go/xs.Session).AuthCookie]\nat xs.go:651: calling [(blitter.com/go/xs.Session).ConnHost]\nat xs.go:663: calling [(blitter.com/go/xs.Session).ConnHost]\nat xs.go:651: calling [(blitter.com/go/xs.Session).Op]\nat xs.go:655: calling [(blitter.com/go/xs.Session).Op]\nat xs.go:675: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:671: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:667: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:663: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:659: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:655: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:651: calling [(blitter.com/go/xs.Session).Cmd]\nat xs.go:671: calling [(blitter.com/go/xs.Session).Cmd]\nat xs.go:651: calling [(blitter.com/go/xs.Session).TermType]\nat xs.go:667: calling [(blitter.com/go/xs.Session).TermType]" ] + "blitter.com/go/xs/xs.main$3" [ label="main$3" style="dotted,filled" tooltip="blitter.com/go/xs/xs.main$3 | defined in xs.go:1043\nat xs.go:1046: calling [math/rand.Intn]\nat xs.go:1050: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]" fillcolor="lightblue" ] + "blitter.com/go/xs/xs.handleTermResizes" [ fillcolor="lightblue" label="handleTermResizes" penwidth="0.5" tooltip="blitter.com/go/xs/xs.handleTermResizes | defined in termsize_unix.go:16\nat termsize_unix.go:21: calling [blitter.com/go/xs/xs.handleTermResizes$1]" ] + "blitter.com/go/xs/xs.main" [ penwidth="0.5" tooltip="blitter.com/go/xs/xs.main | defined in xs.go:680\nat xs.go:769: calling [blitter.com/go/xs/xs.main$1]\nat xs.go:782: calling [blitter.com/go/xs/xs.localUserName]\nat xs.go:1024: calling [blitter.com/go/xs/xs.rejectUserMsg]\nat xs.go:843: calling [blitter.com/go/xs/logger.New]\nat xs.go:938: calling [blitter.com/go/xs/xsnet.Dial]\nat xs.go:1003: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:1021: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:1025: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:1064: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:1005: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:1067: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:1069: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:1079: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:1053: calling [blitter.com/go/xs/xs.main$3]\nat xs.go:831: calling [blitter.com/go/xs/xs.usageShell]\nat xs.go:956: calling [blitter.com/go/xs.MakeRaw]\nat xs.go:1017: calling [(blitter.com/go/xs/xsnet.Conn).Read]\nat xs.go:1059: calling [blitter.com/go/xs/xs.launchTuns]\nat xs.go:1063: calling [blitter.com/go/xs/xs.doCopyMode]\nat xs.go:950: calling [(*blitter.com/go/xs/xsnet.Conn).Close]\nat xs.go:775: calling [blitter.com/go/xs/xs.parseNonSwitchArgs]\nat xs.go:962: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:1032: calling [(*blitter.com/go/xs/xsnet.Conn).EnableChaff]\nat xs.go:1002: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:1068: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:1074: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:831: calling [blitter.com/go/xs/xs.usageCp]\nat xs.go:955: calling [github.com/mattn/go-isatty.IsTerminal]\nat xs.go:1000: calling [blitter.com/go/xs/xs.sendSessionParams]\nat xs.go:751: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:832: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:941: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:1005: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:1079: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:844: calling [blitter.com/go/xs/xsnet.Init]\nat xs.go:1028: calling [(*blitter.com/go/xs/xsnet.Conn).SetupChaff]\nat xs.go:983: calling [blitter.com/go/xs.ReadPassword]\nat xs.go:999: calling [blitter.com/go/xs.NewSession]\nat xs.go:1033: calling [(*blitter.com/go/xs/xsnet.Conn).DisableChaff]\nat xs.go:1034: calling [(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff]\nat xs.go:1060: calling [blitter.com/go/xs/xs.doShellMode]" fillcolor="lightblue" label="main" ] + "blitter.com/go/xs/xs.parseNonSwitchArgs" [ tooltip="blitter.com/go/xs/xs.parseNonSwitchArgs | defined in xs.go:599" fillcolor="lightblue" label="parseNonSwitchArgs" penwidth="0.5" ] + "blitter.com/go/xs/xs.main$1" [ fillcolor="lightblue" label="deferRestore" style="dotted,filled" tooltip="blitter.com/go/xs/xs.main$1 | defined in xs.go:769" ] + "blitter.com/go/xs/xs.localUserName" [ fillcolor="lightblue" label="localUserName" penwidth="0.5" tooltip="blitter.com/go/xs/xs.localUserName | defined in xs.go:1084" ] + "blitter.com/go/xs/xs.rejectUserMsg" [ fillcolor="lightblue" label="rejectUserMsg" penwidth="0.5" tooltip="blitter.com/go/xs/xs.rejectUserMsg | defined in xs.go:576\nat xs.go:577: calling [blitter.com/go/xs/spinsult.GetSentence]" ] + "blitter.com/go/xs/xs.reqTunnel" [ penwidth="0.5" tooltip="blitter.com/go/xs/xs.reqTunnel | defined in xs.go:584\nat xs.go:594: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]\nat xs.go:593: calling [blitter.com/go/xs/logger.LogDebug]" fillcolor="lightblue" label="reqTunnel" ] + "blitter.com/go/xs/xs.launchTuns" [ penwidth="0.5" tooltip="blitter.com/go/xs/xs.launchTuns | defined in xs.go:634\nat xs.go:645: calling [blitter.com/go/xs/xs.reqTunnel]" fillcolor="lightblue" label="launchTuns" ] + "blitter.com/go/xs/xs.doShellMode$1" [ tooltip="blitter.com/go/xs/xs.doShellMode$1 | defined in xs.go:490\nat xs.go:507: calling [(crypto/tls.alert).Error]\nat xs.go:503: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:518: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:509: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:519: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:507: calling [(compress/flate.InternalError).Error]\nat xs.go:507: calling [(crypto/aes.KeySizeError).Error]\nat xs.go:507: calling [(context.deadlineExceededError).Error]\nat xs.go:507: calling [(crypto/x509.UnhandledCriticalExtension).Error]\nat xs.go:514: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:519: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:507: calling [(crypto/x509.CertificateInvalidError).Error]\nat xs.go:507: calling [(crypto/tls.RecordHeaderError).Error]\nat xs.go:507: calling [(crypto/x509.HostnameError).Error]\nat xs.go:507: calling [(*github.com/pkg/errors.fundamental).Error]\nat xs.go:491: calling [blitter.com/go/xs/xs.doShellMode$1$1]\nat xs.go:507: calling [(*crypto/tls.permamentError).Error]\nat xs.go:507: calling [(crypto/x509.SystemRootsError).Error]\nat xs.go:507: calling [(compress/flate.CorruptInputError).Error]\nat xs.go:513: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:513: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:507: calling [(crypto/x509.UnknownAuthorityError).Error]" fillcolor="lightblue" label="shellRemoteToStdin" style="dotted,filled" ] + "blitter.com/go/xs/xs.doShellMode$1$1" [ fillcolor="lightblue" label="doShellMode$1$1" style="dotted,filled" tooltip="blitter.com/go/xs/xs.doShellMode$1$1 | defined in xs.go:491" ] + "blitter.com/go/xs/xs.doShellMode" [ fillcolor="lightblue" label="doShellMode" penwidth="0.5" tooltip="blitter.com/go/xs/xs.doShellMode | defined in xs.go:483\nat xs.go:527: calling [blitter.com/go/xs/xs.handleTermResizes]\nat xs.go:551: calling [blitter.com/go/xs/xs.doShellMode$2]\nat xs.go:522: calling [blitter.com/go/xs/xs.doShellMode$1]" ] + "blitter.com/go/xs/xs.copyBuffer" [ tooltip="blitter.com/go/xs/xs.copyBuffer | defined in xs.go:128\nat xs.go:186: calling [blitter.com/go/xs/xs.copyBuffer$2]\nat xs.go:186: calling [blitter.com/go/xs/xs.copyBuffer$3]\nat xs.go:193: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:186: calling [blitter.com/go/xs/xs.copyBuffer$1]" fillcolor="lightblue" label="copyBuffer" penwidth="0.5" ] + "blitter.com/go/xs/xs.copyBuffer$1" [ style="dotted,filled" tooltip="blitter.com/go/xs/xs.copyBuffer$1 | defined in xs.go:144" fillcolor="lightblue" label="copyBuffer$1" ] + "blitter.com/go/xs/xs.copyBuffer$2" [ tooltip="blitter.com/go/xs/xs.copyBuffer$2 | defined in xs.go:145" fillcolor="lightblue" label="copyBuffer$2" style="dotted,filled" ] + "blitter.com/go/xs/xs.copyBuffer$3" [ fillcolor="lightblue" label="copyBuffer$3" style="dotted,filled" tooltip="blitter.com/go/xs/xs.copyBuffer$3 | defined in xs.go:146" ] + "blitter.com/go/xs/xs.Copy" [ fillcolor="lightblue" label="Copy" penwidth="1.5" tooltip="blitter.com/go/xs/xs.Copy | defined in xs.go:115\nat xs.go:116: calling [blitter.com/go/xs/xs.copyBuffer]" ] + "blitter.com/go/xs/xs.doShellMode$2$1" [ tooltip="blitter.com/go/xs/xs.doShellMode$2$1 | defined in xs.go:536\nat xs.go:539: calling [blitter.com/go/xs/xs.Copy]" fillcolor="lightblue" label="doShellMode$2$1" style="dotted,filled" ] + "blitter.com/go/xs/xs.doShellMode$2" [ fillcolor="lightblue" label="shellStdinToRemote" style="dotted,filled" tooltip="blitter.com/go/xs/xs.doShellMode$2 | defined in xs.go:534\nat xs.go:546: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:548: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:541: calling [blitter.com/go/xs/xs.doShellMode$2$1]" ] + "blitter.com/go/xs/xs.doCopyMode" [ penwidth="0.5" tooltip="blitter.com/go/xs/xs.doCopyMode | defined in xs.go:354\nat xs.go:417: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]\nat xs.go:356: calling [(blitter.com/go/xs.Session).Cmd]\nat xs.go:441: calling [(blitter.com/go/xs.Session).Cmd]\nat xs.go:430: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xs.go:424: calling [(blitter.com/go/xs/xsnet.Conn).Read]\nat xs.go:364: calling [blitter.com/go/xs/xs.buildCmdLocalToRemote]\nat xs.go:435: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:438: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:473: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:475: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:444: calling [blitter.com/go/xs/xs.buildCmdRemoteToLocal]" fillcolor="lightblue" label="doCopyMode" ] + "blitter.com/go/xs/xs.buildCmdLocalToRemote" [ fillcolor="lightblue" label="buildCmdLocalToRemote" penwidth="0.5" tooltip="blitter.com/go/xs/xs.buildCmdLocalToRemote | defined in xs.go:270\nat xs.go:335: calling [blitter.com/go/xs/xs.getTreeSizeSubCmd]\nat xs.go:283: calling [blitter.com/go/xs.GetTool]\nat xs.go:311: calling [blitter.com/go/xs.GetTool]\nat xs.go:312: calling [blitter.com/go/xs.GetTool]" ] + "blitter.com/go/xs/xs.getTreeSizeSubCmd" [ fillcolor="lightblue" label="getTreeSizeSubCmd" penwidth="0.5" tooltip="blitter.com/go/xs/xs.getTreeSizeSubCmd | defined in xs.go:342" ] + "blitter.com/go/xs/xs.buildCmdRemoteToLocal" [ fillcolor="lightblue" label="buildCmdRemoteToLocal" penwidth="0.5" tooltip="blitter.com/go/xs/xs.buildCmdRemoteToLocal | defined in xs.go:244\nat xs.go:256: calling [blitter.com/go/xs.GetTool]\nat xs.go:263: calling [blitter.com/go/xs.GetTool]" ] + "blitter.com/go/xs/xs.usageShell" [ label="usageShell" penwidth="0.5" tooltip="blitter.com/go/xs/xs.usageShell | defined in xs.go:559" fillcolor="lightblue" ] + "blitter.com/go/xs/xs.usageCp" [ fillcolor="lightblue" label="usageCp" penwidth="0.5" tooltip="blitter.com/go/xs/xs.usageCp | defined in xs.go:565" ] subgraph "cluster_blitter.com/go/xs" { - penwidth="0.8"; + tooltip="package: blitter.com/go/xs"; +penwidth="0.8"; style="filled"; -rank="sink"; -tooltip="package: blitter.com/go/xs"; -fontsize="16"; fillcolor="lightyellow"; -fontname="bold"; -label="[xs]"; +label="xs"; URL="/?f=blitter.com/go/xs"; +fontsize="16"; +fontname="Tahoma bold"; +rank="sink"; - "blitter.com/go/xs.Restore" [ fillcolor="moccasin" label="Restore" penwidth="1.5" ] - "blitter.com/go/xs.MakeRaw" [ penwidth="1.5" fillcolor="moccasin" label="MakeRaw" ] - "blitter.com/go/xs.ReadPassword" [ fillcolor="moccasin" label="ReadPassword" penwidth="1.5" ] - "blitter.com/go/xs.NewSession" [ fillcolor="moccasin" label="NewSession" penwidth="1.5" ] + "blitter.com/go/xs.Restore" [ fillcolor="moccasin" label="Restore" penwidth="1.5" tooltip="blitter.com/go/xs.Restore | defined in termmode_linux.go:70" ] + "blitter.com/go/xs.MakeRaw" [ tooltip="blitter.com/go/xs.MakeRaw | defined in termmode_linux.go:33" fillcolor="moccasin" label="MakeRaw" penwidth="1.5" ] + "blitter.com/go/xs.ReadPassword" [ fillcolor="moccasin" label="ReadPassword" penwidth="1.5" tooltip="blitter.com/go/xs.ReadPassword | defined in termmode_linux.go:81" ] + "blitter.com/go/xs.NewSession" [ tooltip="blitter.com/go/xs.NewSession | defined in session.go:130" fillcolor="moccasin" label="NewSession" penwidth="1.5" ] + "blitter.com/go/xs.GetTool" [ fillcolor="moccasin" label="GetTool" penwidth="1.5" tooltip="blitter.com/go/xs.GetTool | defined in auth.go:211" ] subgraph "cluster_*blitter.com/go/xs.Session" { - fontsize="15"; -fontcolor="#222222"; -labelloc="b"; + labelloc="b"; style="rounded,filled"; fillcolor="wheat2"; label="(*Session)"; tooltip="type: *blitter.com/go/xs.Session"; penwidth="0.5"; +fontsize="15"; +fontcolor="#222222"; - "(*blitter.com/go/xs.Session).SetStatus" [ fillcolor="moccasin" label="SetStatus" penwidth="1.5" ] + "(*blitter.com/go/xs.Session).SetStatus" [ fillcolor="moccasin" label="SetStatus" penwidth="1.5" tooltip="(*blitter.com/go/xs.Session).SetStatus | defined in session.go:125" ] } subgraph "cluster_blitter.com/go/xs.Session" { - style="rounded,filled"; + fontcolor="#222222"; +labelloc="b"; +style="rounded,filled"; fillcolor="wheat2"; label="(Session)"; tooltip="type: blitter.com/go/xs.Session"; penwidth="0.5"; fontsize="15"; -fontcolor="#222222"; -labelloc="b"; - "(blitter.com/go/xs.Session).Cmd" [ fillcolor="moccasin" label="Cmd" penwidth="1.5" ] - "(blitter.com/go/xs.Session).Status" [ penwidth="1.5" fillcolor="moccasin" label="Status" ] - "(blitter.com/go/xs.Session).Op" [ fillcolor="moccasin" label="Op" penwidth="1.5" ] - "(blitter.com/go/xs.Session).Who" [ fillcolor="moccasin" label="Who" penwidth="1.5" ] - "(blitter.com/go/xs.Session).ConnHost" [ fillcolor="moccasin" label="ConnHost" penwidth="1.5" ] - "(blitter.com/go/xs.Session).TermType" [ fillcolor="moccasin" label="TermType" penwidth="1.5" ] - "(blitter.com/go/xs.Session).AuthCookie" [ label="AuthCookie" penwidth="1.5" fillcolor="moccasin" ] + "(blitter.com/go/xs.Session).Op" [ fillcolor="moccasin" label="Op" penwidth="1.5" tooltip="(blitter.com/go/xs.Session).Op | defined in session.go:36" ] + "(blitter.com/go/xs.Session).Who" [ fillcolor="moccasin" label="Who" penwidth="1.5" tooltip="(blitter.com/go/xs.Session).Who | defined in session.go:46" ] + "(blitter.com/go/xs.Session).ConnHost" [ fillcolor="moccasin" label="ConnHost" penwidth="1.5" tooltip="(blitter.com/go/xs.Session).ConnHost | defined in session.go:56" ] + "(blitter.com/go/xs.Session).TermType" [ label="TermType" penwidth="1.5" tooltip="(blitter.com/go/xs.Session).TermType | defined in session.go:67" fillcolor="moccasin" ] + "(blitter.com/go/xs.Session).Cmd" [ fillcolor="moccasin" label="Cmd" penwidth="1.5" tooltip="(blitter.com/go/xs.Session).Cmd | defined in session.go:79" ] + "(blitter.com/go/xs.Session).AuthCookie" [ penwidth="1.5" tooltip="(blitter.com/go/xs.Session).AuthCookie | defined in session.go:92" fillcolor="moccasin" label="AuthCookie" ] + "(blitter.com/go/xs.Session).Status" [ fillcolor="moccasin" label="Status" penwidth="1.5" tooltip="(blitter.com/go/xs.Session).Status | defined in session.go:120" ] } } subgraph "cluster_blitter.com/go/xs/logger" { - fontsize="16"; + fillcolor="lightyellow"; URL="/?f=blitter.com/go/xs/logger"; penwidth="0.8"; style="filled"; -fillcolor="lightyellow"; -fontname="bold"; +fontname="Tahoma bold"; rank="sink"; -label="[logger]"; +label="logger"; tooltip="package: blitter.com/go/xs/logger"; +fontsize="16"; - "blitter.com/go/xs/logger.LogDebug" [ fillcolor="moccasin" label="LogDebug" penwidth="1.5" ] - "blitter.com/go/xs/logger.New" [ fillcolor="moccasin" label="New" penwidth="1.5" ] + "blitter.com/go/xs/logger.New" [ fillcolor="moccasin" label="New" penwidth="1.5" tooltip="blitter.com/go/xs/logger.New | defined in logger_linux.go:71" ] + "blitter.com/go/xs/logger.LogDebug" [ penwidth="1.5" tooltip="blitter.com/go/xs/logger.LogDebug | defined in logger_linux.go:103" fillcolor="moccasin" label="LogDebug" ] } subgraph "cluster_blitter.com/go/xs/spinsult" { - fillcolor="lightyellow"; -fontname="bold"; -label="[spinsult]"; + style="filled"; +rank="sink"; URL="/?f=blitter.com/go/xs/spinsult"; tooltip="package: blitter.com/go/xs/spinsult"; penwidth="0.8"; fontsize="16"; -style="filled"; -rank="sink"; +fillcolor="lightyellow"; +fontname="Tahoma bold"; +label="spinsult"; - "blitter.com/go/xs/spinsult.GetSentence" [ fillcolor="moccasin" label="GetSentence" penwidth="1.5" ] + "blitter.com/go/xs/spinsult.GetSentence" [ fillcolor="moccasin" label="GetSentence" penwidth="1.5" tooltip="blitter.com/go/xs/spinsult.GetSentence | defined in spinsult.go:43" ] } subgraph "cluster_blitter.com/go/xs/xsnet" { - penwidth="0.8"; -fillcolor="lightyellow"; -fontname="bold"; -rank="sink"; -URL="/?f=blitter.com/go/xs/xsnet"; -fontsize="16"; + fillcolor="lightyellow"; +fontname="Tahoma bold"; +penwidth="0.8"; style="filled"; -label="[xsnet]"; +label="xsnet"; +URL="/?f=blitter.com/go/xs/xsnet"; tooltip="package: blitter.com/go/xs/xsnet"; +fontsize="16"; +rank="sink"; - "blitter.com/go/xs/xsnet.Init" [ fillcolor="moccasin" label="Init" penwidth="1.5" ] - "blitter.com/go/xs/xsnet.Dial" [ label="Dial" penwidth="1.5" fillcolor="moccasin" ] + "blitter.com/go/xs/xsnet.Init" [ fillcolor="moccasin" label="Init" penwidth="1.5" tooltip="blitter.com/go/xs/xsnet.Init | defined in net.go:192" ] + "blitter.com/go/xs/xsnet.Dial" [ fillcolor="moccasin" label="Dial" penwidth="1.5" tooltip="blitter.com/go/xs/xsnet.Dial | defined in net.go:890" ] subgraph "cluster_*blitter.com/go/xs/xsnet.Conn" { - fontcolor="#222222"; -labelloc="b"; + labelloc="b"; style="rounded,filled"; fillcolor="wheat2"; label="(*Conn)"; tooltip="type: *blitter.com/go/xs/xsnet.Conn"; penwidth="0.5"; fontsize="15"; +fontcolor="#222222"; - "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ penwidth="1.5" fillcolor="moccasin" label="WritePacket" ] - "(*blitter.com/go/xs/xsnet.Conn).SetStatus" [ fillcolor="moccasin" label="SetStatus" penwidth="1.5" ] - "(*blitter.com/go/xs/xsnet.Conn).Close" [ penwidth="1.5" fillcolor="moccasin" label="Close" ] - "(*blitter.com/go/xs/xsnet.Conn).SetupChaff" [ penwidth="1.5" fillcolor="moccasin" label="SetupChaff" ] - "(*blitter.com/go/xs/xsnet.Conn).EnableChaff" [ fillcolor="moccasin" label="EnableChaff" penwidth="1.5" ] - "(*blitter.com/go/xs/xsnet.Conn).DisableChaff" [ fillcolor="moccasin" label="DisableChaff" penwidth="1.5" ] - "(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff" [ fillcolor="moccasin" label="ShutdownChaff" penwidth="1.5" ] + "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ fillcolor="moccasin" label="WritePacket" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).WritePacket | defined in net.go:1430" ] + "(*blitter.com/go/xs/xsnet.Conn).Close" [ label="Close" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).Close | defined in net.go:970" fillcolor="moccasin" ] + "(*blitter.com/go/xs/xsnet.Conn).SetupChaff" [ penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).SetupChaff | defined in net.go:1556" fillcolor="moccasin" label="SetupChaff" ] + "(*blitter.com/go/xs/xsnet.Conn).EnableChaff" [ label="EnableChaff" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).EnableChaff | defined in net.go:1539" fillcolor="moccasin" ] + "(*blitter.com/go/xs/xsnet.Conn).DisableChaff" [ label="DisableChaff" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).DisableChaff | defined in net.go:1546" fillcolor="moccasin" ] + "(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff" [ fillcolor="moccasin" label="ShutdownChaff" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff | defined in net.go:1551" ] + "(*blitter.com/go/xs/xsnet.Conn).GetStatus" [ fillcolor="moccasin" label="GetStatus" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).GetStatus | defined in net.go:208" ] + "(*blitter.com/go/xs/xsnet.Conn).SetStatus" [ fillcolor="moccasin" label="SetStatus" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).SetStatus | defined in net.go:212" ] } @@ -174,24 +181,23 @@ penwidth="0.5"; fontsize="15"; fontcolor="#222222"; - "(blitter.com/go/xs/xsnet.Conn).Read" [ label="Read" penwidth="1.5" fillcolor="moccasin" ] - "(blitter.com/go/xs/xsnet.Conn).GetStatus" [ fillcolor="moccasin" label="GetStatus" penwidth="1.5" ] - "(blitter.com/go/xs/xsnet.Conn).Write" [ label="Write" penwidth="1.5" fillcolor="moccasin" ] + "(blitter.com/go/xs/xsnet.Conn).Write" [ tooltip="(blitter.com/go/xs/xsnet.Conn).Write | defined in net.go:1424" fillcolor="moccasin" label="Write" penwidth="1.5" ] + "(blitter.com/go/xs/xsnet.Conn).Read" [ fillcolor="moccasin" label="Read" penwidth="1.5" tooltip="(blitter.com/go/xs/xsnet.Conn).Read | defined in net.go:1185" ] } } subgraph "cluster_compress/flate" { - fontsize="16"; -fillcolor="#E0FFE1"; -label="[compress/flate]"; -URL="/?f=compress/flate"; + URL="/?f=compress/flate"; penwidth="0.8"; -style="filled"; -fontname="bold"; +label="compress/flate"; +fillcolor="#E0FFE1"; +fontname="Tahoma bold"; rank="sink"; tooltip="package: compress/flate"; +fontsize="16"; +style="filled"; subgraph "cluster_compress/flate.CorruptInputError" { @@ -204,21 +210,21 @@ style="rounded,filled"; fillcolor="#c2e3c2"; label="(CorruptInputError)"; - "(compress/flate.CorruptInputError).Error" [ penwidth="1.5" fillcolor="#adedad" label="Error" ] + "(compress/flate.CorruptInputError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" tooltip="(compress/flate.CorruptInputError).Error | defined in inflate.go:35" ] } subgraph "cluster_compress/flate.InternalError" { - fontsize="15"; + tooltip="type: compress/flate.InternalError"; +penwidth="0.5"; +fontsize="15"; fontcolor="#222222"; labelloc="b"; style="rounded,filled"; fillcolor="#c2e3c2"; label="(InternalError)"; -tooltip="type: compress/flate.InternalError"; -penwidth="0.5"; - "(compress/flate.InternalError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" ] + "(compress/flate.InternalError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" tooltip="(compress/flate.InternalError).Error | defined in inflate.go:42" ] } @@ -227,124 +233,138 @@ penwidth="0.5"; subgraph "cluster_context" { fontsize="16"; style="filled"; +fontname="Tahoma bold"; penwidth="0.8"; -fontname="bold"; rank="sink"; -label="[context]"; +label="context"; URL="/?f=context"; tooltip="package: context"; fillcolor="#E0FFE1"; subgraph "cluster_context.deadlineExceededError" { - fontsize="15"; + tooltip="type: context.deadlineExceededError"; +penwidth="0.5"; +fontsize="15"; fontcolor="#222222"; labelloc="b"; style="rounded,filled"; fillcolor="#c2e3c2"; label="(deadlineExceededError)"; -tooltip="type: context.deadlineExceededError"; -penwidth="0.5"; - "(context.deadlineExceededError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" ] + "(context.deadlineExceededError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" tooltip="(context.deadlineExceededError).Error | defined in context.go:165" ] } } subgraph "cluster_crypto/aes" { - style="filled"; -fillcolor="#E0FFE1"; -rank="sink"; -label="[crypto/aes]"; -penwidth="0.8"; -fontsize="16"; -fontname="bold"; -URL="/?f=crypto/aes"; + label="crypto/aes"; tooltip="package: crypto/aes"; +penwidth="0.8"; +style="filled"; +fillcolor="#E0FFE1"; +fontname="Tahoma bold"; +rank="sink"; +fontsize="16"; +URL="/?f=crypto/aes"; subgraph "cluster_crypto/aes.KeySizeError" { - fontcolor="#222222"; -labelloc="b"; -style="rounded,filled"; + style="rounded,filled"; fillcolor="#c2e3c2"; label="(KeySizeError)"; tooltip="type: crypto/aes.KeySizeError"; penwidth="0.5"; fontsize="15"; +fontcolor="#222222"; +labelloc="b"; - "(crypto/aes.KeySizeError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" ] + "(crypto/aes.KeySizeError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" tooltip="(crypto/aes.KeySizeError).Error | defined in cipher.go:24" ] } } subgraph "cluster_crypto/tls" { - tooltip="package: crypto/tls"; -fontsize="16"; + penwidth="0.8"; style="filled"; -fontname="bold"; +fontname="Tahoma bold"; rank="sink"; -label="[crypto/tls]"; URL="/?f=crypto/tls"; -penwidth="0.8"; +tooltip="package: crypto/tls"; +fontsize="16"; fillcolor="#E0FFE1"; +label="crypto/tls"; - subgraph "cluster_crypto/tls.RecordHeaderError" { - fontcolor="#222222"; -labelloc="b"; -style="rounded,filled"; -fillcolor="#c2e3c2"; -label="(RecordHeaderError)"; -tooltip="type: crypto/tls.RecordHeaderError"; + subgraph "cluster_*crypto/tls.permamentError" { + tooltip="type: *crypto/tls.permamentError"; penwidth="0.5"; -fontsize="15"; - - "(crypto/tls.RecordHeaderError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" ] - - } - - subgraph "cluster_crypto/tls.alert" { - penwidth="0.5"; fontsize="15"; fontcolor="#222222"; labelloc="b"; style="rounded,filled"; fillcolor="#c2e3c2"; +label="(*permamentError)"; + + "(*crypto/tls.permamentError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" tooltip="(*crypto/tls.permamentError).Error | defined in conn.go:175" ] + + } + + subgraph "cluster_crypto/tls.RecordHeaderError" { + label="(RecordHeaderError)"; +tooltip="type: crypto/tls.RecordHeaderError"; +penwidth="0.5"; +fontsize="15"; +fontcolor="#222222"; +labelloc="b"; +style="rounded,filled"; +fillcolor="#c2e3c2"; + + "(crypto/tls.RecordHeaderError).Error" [ tooltip="(crypto/tls.RecordHeaderError).Error | defined in conn.go:566" fillcolor="#adedad" label="Error" penwidth="1.5" ] + + } + + subgraph "cluster_crypto/tls.alert" { + style="rounded,filled"; +fillcolor="#c2e3c2"; label="(alert)"; tooltip="type: crypto/tls.alert"; +penwidth="0.5"; +fontsize="15"; +fontcolor="#222222"; +labelloc="b"; - "(crypto/tls.alert).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" ] + "(crypto/tls.alert).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" tooltip="(crypto/tls.alert).Error | defined in alert.go:97" ] } } subgraph "cluster_crypto/x509" { - penwidth="0.8"; -tooltip="package: crypto/x509"; -fontsize="16"; -style="filled"; -fillcolor="#E0FFE1"; -fontname="bold"; -rank="sink"; -label="[crypto/x509]"; + style="filled"; URL="/?f=crypto/x509"; +tooltip="package: crypto/x509"; +penwidth="0.8"; +fontsize="16"; +fillcolor="#E0FFE1"; +fontname="Tahoma bold"; +rank="sink"; +label="crypto/x509"; subgraph "cluster_crypto/x509.CertificateInvalidError" { - penwidth="0.5"; + tooltip="type: crypto/x509.CertificateInvalidError"; +penwidth="0.5"; fontsize="15"; fontcolor="#222222"; labelloc="b"; style="rounded,filled"; fillcolor="#c2e3c2"; label="(CertificateInvalidError)"; -tooltip="type: crypto/x509.CertificateInvalidError"; - "(crypto/x509.CertificateInvalidError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" ] + "(crypto/x509.CertificateInvalidError).Error" [ label="Error" penwidth="1.5" tooltip="(crypto/x509.CertificateInvalidError).Error | defined in verify.go:78" fillcolor="#adedad" ] } @@ -358,192 +378,201 @@ penwidth="0.5"; fontsize="15"; fontcolor="#222222"; - "(crypto/x509.HostnameError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" ] + "(crypto/x509.HostnameError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" tooltip="(crypto/x509.HostnameError).Error | defined in verify.go:109" ] } subgraph "cluster_crypto/x509.SystemRootsError" { - fontsize="15"; -fontcolor="#222222"; -labelloc="b"; -style="rounded,filled"; -fillcolor="#c2e3c2"; + fillcolor="#c2e3c2"; label="(SystemRootsError)"; tooltip="type: crypto/x509.SystemRootsError"; penwidth="0.5"; +fontsize="15"; +fontcolor="#222222"; +labelloc="b"; +style="rounded,filled"; - "(crypto/x509.SystemRootsError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" ] + "(crypto/x509.SystemRootsError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" tooltip="(crypto/x509.SystemRootsError).Error | defined in verify.go:182" ] } subgraph "cluster_crypto/x509.UnhandledCriticalExtension" { - style="rounded,filled"; -fillcolor="#c2e3c2"; -label="(UnhandledCriticalExtension)"; + label="(UnhandledCriticalExtension)"; tooltip="type: crypto/x509.UnhandledCriticalExtension"; penwidth="0.5"; fontsize="15"; fontcolor="#222222"; labelloc="b"; +style="rounded,filled"; +fillcolor="#c2e3c2"; - "(crypto/x509.UnhandledCriticalExtension).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" ] + "(crypto/x509.UnhandledCriticalExtension).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" tooltip="(crypto/x509.UnhandledCriticalExtension).Error | defined in x509.go:931" ] } subgraph "cluster_crypto/x509.UnknownAuthorityError" { - style="rounded,filled"; -fillcolor="#c2e3c2"; + fillcolor="#c2e3c2"; label="(UnknownAuthorityError)"; tooltip="type: crypto/x509.UnknownAuthorityError"; penwidth="0.5"; fontsize="15"; fontcolor="#222222"; labelloc="b"; +style="rounded,filled"; - "(crypto/x509.UnknownAuthorityError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" ] + "(crypto/x509.UnknownAuthorityError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" tooltip="(crypto/x509.UnknownAuthorityError).Error | defined in verify.go:161" ] } } subgraph "cluster_github.com/mattn/go-isatty" { - fontname="bold"; -penwidth="0.8"; -fillcolor="lightyellow"; -rank="sink"; -label="[isatty]"; -URL="/?f=github.com/mattn/go-isatty"; -tooltip="package: github.com/mattn/go-isatty"; -fontsize="16"; + penwidth="0.8"; style="filled"; +fillcolor="lightyellow"; +fontname="Tahoma bold"; +rank="sink"; +label="isatty"; +URL="/?f=github.com/mattn/go-isatty"; +fontsize="16"; +tooltip="package: github.com/mattn/go-isatty"; - "github.com/mattn/go-isatty.IsTerminal" [ label="IsTerminal" penwidth="1.5" fillcolor="moccasin" ] + "github.com/mattn/go-isatty.IsTerminal" [ fillcolor="moccasin" label="IsTerminal" penwidth="1.5" tooltip="github.com/mattn/go-isatty.IsTerminal | defined in isatty_tcgets.go:9" ] } subgraph "cluster_github.com/pkg/errors" { - style="filled"; -fillcolor="lightyellow"; -URL="/?f=github.com/pkg/errors"; -rank="sink"; -label="[errors]"; -tooltip="package: github.com/pkg/errors"; -penwidth="0.8"; + penwidth="0.8"; fontsize="16"; -fontname="bold"; +fillcolor="lightyellow"; +rank="sink"; +label="errors"; +style="filled"; +fontname="Tahoma bold"; +URL="/?f=github.com/pkg/errors"; +tooltip="package: github.com/pkg/errors"; subgraph "cluster_*github.com/pkg/errors.fundamental" { - label="(*fundamental)"; -tooltip="type: *github.com/pkg/errors.fundamental"; -penwidth="0.5"; -fontsize="15"; + fontsize="15"; fontcolor="#222222"; labelloc="b"; style="rounded,filled"; fillcolor="wheat2"; +label="(*fundamental)"; +tooltip="type: *github.com/pkg/errors.fundamental"; +penwidth="0.5"; - "(*github.com/pkg/errors.fundamental).Error" [ penwidth="1.5" fillcolor="moccasin" label="Error" ] + "(*github.com/pkg/errors.fundamental).Error" [ tooltip="(*github.com/pkg/errors.fundamental).Error | defined in errors.go:125" fillcolor="moccasin" label="Error" penwidth="1.5" ] } } subgraph "cluster_math/rand" { - penwidth="0.8"; -fillcolor="#E0FFE1"; -rank="sink"; + fontname="Tahoma bold"; URL="/?f=math/rand"; -fontsize="16"; +penwidth="0.8"; style="filled"; -fontname="bold"; -label="[math/rand]"; +fillcolor="#E0FFE1"; tooltip="package: math/rand"; +fontsize="16"; +rank="sink"; +label="math/rand"; - "math/rand.Intn" [ fillcolor="#adedad" label="Intn" penwidth="1.5" ] + "math/rand.Intn" [ fillcolor="#adedad" label="Intn" penwidth="1.5" tooltip="math/rand.Intn | defined in rand.go:337" ] } } - "blitter.com/go/xs/xs.reqTunnel" -> "blitter.com/go/xs/logger.LogDebug" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.reqTunnel" -> "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.launchTuns" -> "blitter.com/go/xs/xs.reqTunnel" [ ] - "blitter.com/go/xs/xs.main$3" -> "math/rand.Intn" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.main$3" -> "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.doCopyMode" -> "(blitter.com/go/xs.Session).Cmd" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.doCopyMode" -> "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.doCopyMode" -> "(blitter.com/go/xs/xsnet.Conn).Read" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.doCopyMode" -> "(*blitter.com/go/xs/xsnet.Conn).SetStatus" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.doCopyMode" -> "(blitter.com/go/xs/xsnet.Conn).GetStatus" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.copyBuffer" -> "(blitter.com/go/xs/xsnet.Conn).Write" [ color="saddlebrown" style="dashed" ] - "blitter.com/go/xs/xs.copyBuffer" -> "blitter.com/go/xs/xs.copyBuffer$1" [ style="dashed" ] - "blitter.com/go/xs/xs.copyBuffer" -> "blitter.com/go/xs/xs.copyBuffer$2" [ style="dashed" ] - "blitter.com/go/xs/xs.copyBuffer" -> "blitter.com/go/xs/xs.copyBuffer$3" [ style="dashed" ] - "blitter.com/go/xs/xs.Copy" -> "blitter.com/go/xs/xs.copyBuffer" [ ] - "blitter.com/go/xs/xs.doShellMode$1" -> "blitter.com/go/xs/xs.doShellMode$1$1" [ arrowhead="normalnoneodiamond" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "blitter.com/go/xs.Restore" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(blitter.com/go/xs/xsnet.Conn).GetStatus" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(*blitter.com/go/xs.Session).SetStatus" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(blitter.com/go/xs.Session).Status" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "blitter.com/go/xs/xs.exitWithStatus" [ ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/x509.CertificateInvalidError).Error" [ style="dashed" color="saddlebrown" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/aes.KeySizeError).Error" [ style="dashed" color="saddlebrown" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/x509.HostnameError).Error" [ color="saddlebrown" style="dashed" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/x509.UnhandledCriticalExtension).Error" [ style="dashed" color="saddlebrown" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(context.deadlineExceededError).Error" [ style="dashed" color="saddlebrown" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(compress/flate.CorruptInputError).Error" [ style="dashed" color="saddlebrown" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/tls.RecordHeaderError).Error" [ style="dashed" color="saddlebrown" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/x509.UnknownAuthorityError).Error" [ style="dashed" color="saddlebrown" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/x509.SystemRootsError).Error" [ style="dashed" color="saddlebrown" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(compress/flate.InternalError).Error" [ style="dashed" color="saddlebrown" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/tls.alert).Error" [ style="dashed" color="saddlebrown" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(*github.com/pkg/errors.fundamental).Error" [ style="dashed" color="saddlebrown" ] - "blitter.com/go/xs/xs.doShellMode" -> "blitter.com/go/xs/xs.doShellMode$1" [ arrowhead="normalnoneodot" ] - "blitter.com/go/xs/xs.handleTermResizes$1" -> "blitter.com/go/xs/xs.GetSize" [ ] - "blitter.com/go/xs/xs.handleTermResizes$1" -> "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.handleTermResizes" -> "blitter.com/go/xs/xs.handleTermResizes$1" [ arrowhead="normalnoneodot" ] - "blitter.com/go/xs/xs.doShellMode" -> "blitter.com/go/xs/xs.handleTermResizes" [ ] - "blitter.com/go/xs/xs.doShellMode$2$1" -> "blitter.com/go/xs/xs.Copy" [ ] - "blitter.com/go/xs/xs.doShellMode$2" -> "blitter.com/go/xs/xs.doShellMode$2$1" [ ] - "blitter.com/go/xs/xs.doShellMode$2" -> "blitter.com/go/xs.Restore" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.doShellMode$2" -> "blitter.com/go/xs/xs.exitWithStatus" [ ] - "blitter.com/go/xs/xs.doShellMode" -> "blitter.com/go/xs/xs.doShellMode$2" [ arrowhead="normalnoneodot" ] - "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).Op" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).Who" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).ConnHost" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).TermType" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).Cmd" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).AuthCookie" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs/xsnet.Conn).Write" [ style="dashed" color="saddlebrown" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.parseNonSwitchArgs" [ ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.main$1" [ arrowhead="normalnoneodot" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.exitWithStatus" [ ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/logger.New" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xsnet.Init" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xsnet.Dial" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs/xsnet.Conn).Close" [ arrowhead="normalnoneodiamond" color="saddlebrown" ] - "blitter.com/go/xs/xs.main" -> "github.com/mattn/go-isatty.IsTerminal" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs.MakeRaw" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.main$2" -> "blitter.com/go/xs.Restore" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.main$2" [ arrowhead="normalnoneodiamond" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs.ReadPassword" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs.NewSession" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.sendSessionParams" [ ] - "blitter.com/go/xs/xs.main" -> "(blitter.com/go/xs/xsnet.Conn).Read" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs.Session).SetStatus" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.rejectUserMsg" -> "blitter.com/go/xs/spinsult.GetSentence" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.rejectUserMsg" [ ] - "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs/xsnet.Conn).SetupChaff" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs/xsnet.Conn).EnableChaff" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs/xsnet.Conn).DisableChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ] - "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.main$3" [ arrowhead="normalnoneodot" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.launchTuns" [ ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.doShellMode" [ ] - "blitter.com/go/xs/xs.main" -> "(blitter.com/go/xs.Session).Status" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.doCopyMode" [ ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs.Restore" [ color="saddlebrown" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.usageShell" [ style="dashed" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.usageCp" [ style="dashed" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.main$1" [ arrowhead="normalnoneodot" tooltip="at xs.go:769: calling [blitter.com/go/xs/xs.main$1]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.localUserName" [ tooltip="at xs.go:782: calling [blitter.com/go/xs/xs.localUserName]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.rejectUserMsg" [ tooltip="at xs.go:1024: calling [blitter.com/go/xs/xs.rejectUserMsg]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/tls.alert).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(crypto/tls.alert).Error]" ] + "blitter.com/go/xs/xs.doShellMode" -> "blitter.com/go/xs/xs.handleTermResizes" [ tooltip="at xs.go:527: calling [blitter.com/go/xs/xs.handleTermResizes]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/logger.New" [ color="saddlebrown" tooltip="at xs.go:843: calling [blitter.com/go/xs/logger.New]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "blitter.com/go/xs/xs.restoreTermState" [ tooltip="at xs.go:503: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:518: calling [blitter.com/go/xs/xs.restoreTermState]" ] + "blitter.com/go/xs/xs.buildCmdLocalToRemote" -> "blitter.com/go/xs/xs.getTreeSizeSubCmd" [ tooltip="at xs.go:335: calling [blitter.com/go/xs/xs.getTreeSizeSubCmd]" ] + "blitter.com/go/xs/xs.handleTermResizes" -> "blitter.com/go/xs/xs.handleTermResizes$1" [ tooltip="at termsize_unix.go:21: calling [blitter.com/go/xs/xs.handleTermResizes$1]" arrowhead="normalnoneodot" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "blitter.com/go/xs/xs.exitWithStatus" [ tooltip="at xs.go:509: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:519: calling [blitter.com/go/xs/xs.exitWithStatus]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(compress/flate.InternalError).Error" [ tooltip="at xs.go:507: calling [(compress/flate.InternalError).Error]" style="dashed" color="saddlebrown" ] + "blitter.com/go/xs/xs.buildCmdRemoteToLocal" -> "blitter.com/go/xs.GetTool" [ color="saddlebrown" tooltip="at xs.go:256: calling [blitter.com/go/xs.GetTool]\nat xs.go:263: calling [blitter.com/go/xs.GetTool]" ] + "blitter.com/go/xs/xs.doCopyMode" -> "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ color="saddlebrown" tooltip="at xs.go:417: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]" ] + "blitter.com/go/xs/xs.buildCmdLocalToRemote" -> "blitter.com/go/xs.GetTool" [ color="saddlebrown" tooltip="at xs.go:283: calling [blitter.com/go/xs.GetTool]\nat xs.go:311: calling [blitter.com/go/xs.GetTool]\nat xs.go:312: calling [blitter.com/go/xs.GetTool]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xsnet.Dial" [ color="saddlebrown" tooltip="at xs.go:938: calling [blitter.com/go/xs/xsnet.Dial]" ] + "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs.Session).SetStatus" [ color="saddlebrown" tooltip="at xs.go:1003: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:1021: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:1025: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:1064: calling [(*blitter.com/go/xs.Session).SetStatus]" ] + "blitter.com/go/xs/xs.main" -> "(blitter.com/go/xs.Session).Status" [ color="saddlebrown" tooltip="at xs.go:1005: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:1067: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:1069: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:1079: calling [(blitter.com/go/xs.Session).Status]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.main$3" [ arrowhead="normalnoneodot" tooltip="at xs.go:1053: calling [blitter.com/go/xs/xs.main$3]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/aes.KeySizeError).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(crypto/aes.KeySizeError).Error]" ] + "blitter.com/go/xs/xs.doCopyMode" -> "(blitter.com/go/xs.Session).Cmd" [ color="saddlebrown" tooltip="at xs.go:356: calling [(blitter.com/go/xs.Session).Cmd]\nat xs.go:441: calling [(blitter.com/go/xs.Session).Cmd]" ] + "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).Who" [ color="saddlebrown" tooltip="at xs.go:651: calling [(blitter.com/go/xs.Session).Who]\nat xs.go:659: calling [(blitter.com/go/xs.Session).Who]" ] + "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).AuthCookie" [ color="saddlebrown" tooltip="at xs.go:651: calling [(blitter.com/go/xs.Session).AuthCookie]\nat xs.go:675: calling [(blitter.com/go/xs.Session).AuthCookie]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(context.deadlineExceededError).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(context.deadlineExceededError).Error]" ] + "blitter.com/go/xs/xs.doShellMode" -> "blitter.com/go/xs/xs.doShellMode$2" [ arrowhead="normalnoneodot" tooltip="at xs.go:551: calling [blitter.com/go/xs/xs.doShellMode$2]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.usageShell" [ style="dashed" tooltip="at xs.go:831: calling [blitter.com/go/xs/xs.usageShell]" ] + "blitter.com/go/xs/xs.main$3" -> "math/rand.Intn" [ tooltip="at xs.go:1046: calling [math/rand.Intn]" color="saddlebrown" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs.MakeRaw" [ color="saddlebrown" tooltip="at xs.go:956: calling [blitter.com/go/xs.MakeRaw]" ] + "blitter.com/go/xs/xs.main" -> "(blitter.com/go/xs/xsnet.Conn).Read" [ color="saddlebrown" tooltip="at xs.go:1017: calling [(blitter.com/go/xs/xsnet.Conn).Read]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/x509.UnhandledCriticalExtension).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(crypto/x509.UnhandledCriticalExtension).Error]" ] + "blitter.com/go/xs/xs.doShellMode$2" -> "blitter.com/go/xs/xs.restoreTermState" [ tooltip="at xs.go:546: calling [blitter.com/go/xs/xs.restoreTermState]" ] + "blitter.com/go/xs/xs.doCopyMode" -> "(*blitter.com/go/xs/xsnet.Conn).SetStatus" [ color="saddlebrown" tooltip="at xs.go:430: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]" ] + "blitter.com/go/xs/xs.reqTunnel" -> "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ color="saddlebrown" tooltip="at xs.go:594: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.launchTuns" [ tooltip="at xs.go:1059: calling [blitter.com/go/xs/xs.launchTuns]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(blitter.com/go/xs.Session).Status" [ tooltip="at xs.go:514: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:519: calling [(blitter.com/go/xs.Session).Status]" color="saddlebrown" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/x509.CertificateInvalidError).Error" [ tooltip="at xs.go:507: calling [(crypto/x509.CertificateInvalidError).Error]" style="dashed" color="saddlebrown" ] + "blitter.com/go/xs/xs.doShellMode" -> "blitter.com/go/xs/xs.doShellMode$1" [ arrowhead="normalnoneodot" tooltip="at xs.go:522: calling [blitter.com/go/xs/xs.doShellMode$1]" ] + "blitter.com/go/xs/xs.copyBuffer" -> "blitter.com/go/xs/xs.copyBuffer$2" [ tooltip="at xs.go:186: calling [blitter.com/go/xs/xs.copyBuffer$2]" style="dashed" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.doCopyMode" [ tooltip="at xs.go:1063: calling [blitter.com/go/xs/xs.doCopyMode]" ] + "blitter.com/go/xs/xs.copyBuffer" -> "blitter.com/go/xs/xs.copyBuffer$3" [ style="dashed" tooltip="at xs.go:186: calling [blitter.com/go/xs/xs.copyBuffer$3]" ] + "blitter.com/go/xs/xs.doCopyMode" -> "(blitter.com/go/xs/xsnet.Conn).Read" [ tooltip="at xs.go:424: calling [(blitter.com/go/xs/xsnet.Conn).Read]" color="saddlebrown" ] + "blitter.com/go/xs/xs.handleTermResizes$1" -> "blitter.com/go/xs/xs.GetSize" [ tooltip="at termsize_unix.go:27: calling [blitter.com/go/xs/xs.GetSize]" ] + "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).ConnHost" [ color="saddlebrown" tooltip="at xs.go:651: calling [(blitter.com/go/xs.Session).ConnHost]\nat xs.go:663: calling [(blitter.com/go/xs.Session).ConnHost]" ] + "blitter.com/go/xs/xs.main$3" -> "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ tooltip="at xs.go:1050: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]" color="saddlebrown" ] + "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs/xsnet.Conn).Close" [ arrowhead="normalnoneodiamond" color="saddlebrown" tooltip="at xs.go:950: calling [(*blitter.com/go/xs/xsnet.Conn).Close]" ] + "blitter.com/go/xs/xs.rejectUserMsg" -> "blitter.com/go/xs/spinsult.GetSentence" [ color="saddlebrown" tooltip="at xs.go:577: calling [blitter.com/go/xs/spinsult.GetSentence]" ] + "blitter.com/go/xs/xs.copyBuffer" -> "(blitter.com/go/xs/xsnet.Conn).Write" [ style="dashed" color="saddlebrown" tooltip="at xs.go:193: calling [(blitter.com/go/xs/xsnet.Conn).Write]" ] + "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).Op" [ tooltip="at xs.go:651: calling [(blitter.com/go/xs.Session).Op]\nat xs.go:655: calling [(blitter.com/go/xs.Session).Op]" color="saddlebrown" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.parseNonSwitchArgs" [ tooltip="at xs.go:775: calling [blitter.com/go/xs/xs.parseNonSwitchArgs]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.restoreTermState" [ tooltip="at xs.go:962: calling [blitter.com/go/xs/xs.restoreTermState]" arrowhead="normalnoneodiamond" ] + "blitter.com/go/xs/xs.doCopyMode" -> "blitter.com/go/xs/xs.buildCmdLocalToRemote" [ tooltip="at xs.go:364: calling [blitter.com/go/xs/xs.buildCmdLocalToRemote]" ] + "blitter.com/go/xs/xs.main$2" -> "blitter.com/go/xs/xs.exitWithStatus" [ tooltip="at xs.go:977: calling [blitter.com/go/xs/xs.exitWithStatus]" ] + "blitter.com/go/xs/xs.handleTermResizes$1" -> "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ color="saddlebrown" tooltip="at termsize_unix.go:33: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]" ] + "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs/xsnet.Conn).Write" [ style="dashed" color="saddlebrown" tooltip="at xs.go:675: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:671: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:667: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:663: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:659: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:655: calling [(blitter.com/go/xs/xsnet.Conn).Write]" ] + "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs/xsnet.Conn).EnableChaff" [ color="saddlebrown" tooltip="at xs.go:1032: calling [(*blitter.com/go/xs/xsnet.Conn).EnableChaff]" ] + "blitter.com/go/xs/xs.doShellMode$2" -> "blitter.com/go/xs/xs.exitWithStatus" [ tooltip="at xs.go:548: calling [blitter.com/go/xs/xs.exitWithStatus]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.restoreTermState" [ tooltip="at xs.go:1002: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:1068: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:1074: calling [blitter.com/go/xs/xs.restoreTermState]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/tls.RecordHeaderError).Error" [ tooltip="at xs.go:507: calling [(crypto/tls.RecordHeaderError).Error]" style="dashed" color="saddlebrown" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/x509.HostnameError).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(crypto/x509.HostnameError).Error]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.usageCp" [ style="dashed" tooltip="at xs.go:831: calling [blitter.com/go/xs/xs.usageCp]" ] + "blitter.com/go/xs/xs.main" -> "github.com/mattn/go-isatty.IsTerminal" [ color="saddlebrown" tooltip="at xs.go:955: calling [github.com/mattn/go-isatty.IsTerminal]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(*github.com/pkg/errors.fundamental).Error" [ color="saddlebrown" tooltip="at xs.go:507: calling [(*github.com/pkg/errors.fundamental).Error]" style="dashed" ] + "blitter.com/go/xs/xs.Copy" -> "blitter.com/go/xs/xs.copyBuffer" [ tooltip="at xs.go:116: calling [blitter.com/go/xs/xs.copyBuffer]" ] + "blitter.com/go/xs/xs.doShellMode$2$1" -> "blitter.com/go/xs/xs.Copy" [ tooltip="at xs.go:539: calling [blitter.com/go/xs/xs.Copy]" ] + "blitter.com/go/xs/xs.doShellMode$2" -> "blitter.com/go/xs/xs.doShellMode$2$1" [ tooltip="at xs.go:541: calling [blitter.com/go/xs/xs.doShellMode$2$1]" ] + "blitter.com/go/xs/xs.restoreTermState" -> "blitter.com/go/xs.Restore" [ color="saddlebrown" tooltip="at xs.go:1096: calling [blitter.com/go/xs.Restore]" ] + "blitter.com/go/xs/xs.main$2" -> "blitter.com/go/xs/xs.restoreTermState" [ tooltip="at xs.go:975: calling [blitter.com/go/xs/xs.restoreTermState]" ] + "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).Cmd" [ color="saddlebrown" tooltip="at xs.go:651: calling [(blitter.com/go/xs.Session).Cmd]\nat xs.go:671: calling [(blitter.com/go/xs.Session).Cmd]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.sendSessionParams" [ tooltip="at xs.go:1000: calling [blitter.com/go/xs/xs.sendSessionParams]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "blitter.com/go/xs/xs.doShellMode$1$1" [ arrowhead="normalnoneodiamond" tooltip="at xs.go:491: calling [blitter.com/go/xs/xs.doShellMode$1$1]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(*crypto/tls.permamentError).Error" [ tooltip="at xs.go:507: calling [(*crypto/tls.permamentError).Error]" style="dashed" color="saddlebrown" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/x509.SystemRootsError).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(crypto/x509.SystemRootsError).Error]" ] + "blitter.com/go/xs/xs.doCopyMode" -> "(*blitter.com/go/xs/xsnet.Conn).GetStatus" [ color="saddlebrown" tooltip="at xs.go:435: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:438: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:473: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:475: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.exitWithStatus" [ tooltip="at xs.go:751: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:832: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:941: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:1005: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:1079: calling [blitter.com/go/xs/xs.exitWithStatus]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xsnet.Init" [ color="saddlebrown" tooltip="at xs.go:844: calling [blitter.com/go/xs/xsnet.Init]" ] + "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs/xsnet.Conn).SetupChaff" [ color="saddlebrown" tooltip="at xs.go:1028: calling [(*blitter.com/go/xs/xsnet.Conn).SetupChaff]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(compress/flate.CorruptInputError).Error" [ color="saddlebrown" tooltip="at xs.go:507: calling [(compress/flate.CorruptInputError).Error]" style="dashed" ] + "blitter.com/go/xs/xs.launchTuns" -> "blitter.com/go/xs/xs.reqTunnel" [ tooltip="at xs.go:645: calling [blitter.com/go/xs/xs.reqTunnel]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(*blitter.com/go/xs/xsnet.Conn).GetStatus" [ color="saddlebrown" tooltip="at xs.go:513: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]" ] + "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).TermType" [ color="saddlebrown" tooltip="at xs.go:651: calling [(blitter.com/go/xs.Session).TermType]\nat xs.go:667: calling [(blitter.com/go/xs.Session).TermType]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs.ReadPassword" [ color="saddlebrown" tooltip="at xs.go:983: calling [blitter.com/go/xs.ReadPassword]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs.NewSession" [ color="saddlebrown" tooltip="at xs.go:999: calling [blitter.com/go/xs.NewSession]" ] + "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs/xsnet.Conn).DisableChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" tooltip="at xs.go:1033: calling [(*blitter.com/go/xs/xsnet.Conn).DisableChaff]" ] + "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff" [ color="saddlebrown" tooltip="at xs.go:1034: calling [(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff]" arrowhead="normalnoneodiamond" ] + "blitter.com/go/xs/xs.reqTunnel" -> "blitter.com/go/xs/logger.LogDebug" [ color="saddlebrown" tooltip="at xs.go:593: calling [blitter.com/go/xs/logger.LogDebug]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(*blitter.com/go/xs.Session).SetStatus" [ color="saddlebrown" tooltip="at xs.go:513: calling [(*blitter.com/go/xs.Session).SetStatus]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/x509.UnknownAuthorityError).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(crypto/x509.UnknownAuthorityError).Error]" ] + "blitter.com/go/xs/xs.copyBuffer" -> "blitter.com/go/xs/xs.copyBuffer$1" [ style="dashed" tooltip="at xs.go:186: calling [blitter.com/go/xs/xs.copyBuffer$1]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.doShellMode" [ tooltip="at xs.go:1060: calling [blitter.com/go/xs/xs.doShellMode]" ] + "blitter.com/go/xs/xs.doCopyMode" -> "blitter.com/go/xs/xs.buildCmdRemoteToLocal" [ tooltip="at xs.go:444: calling [blitter.com/go/xs/xs.buildCmdRemoteToLocal]" ] } diff --git a/xs/xs.go b/xs/xs.go index 2eedb39..2247f77 100755 --- a/xs/xs.go +++ b/xs/xs.go @@ -855,21 +855,27 @@ func main() { u, _ := user.Current() // nolint: gosec ab, aerr := ioutil.ReadFile(fmt.Sprintf("%s/.xs_id", u.HomeDir)) if aerr == nil { - idx := strings.Index(string(ab), remoteHost) - if idx >= 0 { - ab = ab[idx:] - entries := strings.SplitN(string(ab), "\n", -1) - authCookie = strings.TrimSpace(entries[0]) - // Security scrub - ab = nil - runtime.GC() - } else { + for _, line := range strings.Split(string(ab), "\n") { + line = line + "\n" + idx := strings.Index(string(line), remoteHost+":"+uname) + if idx >= 0 { + line = line[idx:] + entries := strings.SplitN(string(line), "\n", -1) + authCookie = strings.TrimSpace(entries[0]) + // Security scrub + line = "" + break + } + } + if authCookie == "" { _, _ = fmt.Fprintln(os.Stderr, "[no authtoken, use -g to request one from server]") } + } else { log.Printf("[cannot read %s/.xs_id]\n", u.HomeDir) } } + runtime.GC() //=== Enforce some sane min/max vals on chaff flags if chaffFreqMin < 2 { diff --git a/xsd/xsd-vis-fixedup.png b/xsd/xsd-vis-fixedup.png index 2a4b3207dc9a8368a2aef831ef535b1c35984fbe..ffa007def0909024694e51a45635edaa43861cdf 100644 GIT binary patch literal 1142898 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 z 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�qg{@J`GZ~6gD#meSwNSDcV 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

    BKw}h)9+-SoKEp^J@mQ8|Pyiba3z9 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

    6!Hcm}ed6?|KC$k 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 !{_!+cSD1DT^`xvOeoU*W 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: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

    r~t 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%0D0@yV)mqaKi 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∋4uV(A?tvXoq|+Otf}i( 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�opp`H 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[|GFs6{UN({duws~Dci~hk(2Bh{ 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 literal 800476 zcmdpdRa9GD6ej&Ew6s)#;hiW5B0;_iXsZK2R2p}1@CkWeH9Pl2MrJ!o+W z?#^8L%e>5*wPqgXVJ>9dlS{(gXWQB5`}X~&sw_uLL`g(IKtL@2=CwKj!SzrAf}007 zZva=qQVc18(+y)qxz_|2mp|#XxlsfJPYC2+ztH@UygK3jLBnjec}v{NtuH~j-4aJd z@j3k~(F_5)2oL%6JN0+>x6I56Li=knO|`;AH;F#qr1vV~8|$l08azFJ!@2!gl_Icw zsvF|OB)Ta2%-z|Ew8EpynS|KQSJ)xpYGlwGWk~m#x|1m%kgvY;9MD9 z8H4aREAZ~)t00Qze?CGWPjWfTgYikxrOR%S5z}JS>oUzet>=zb2A|3(X=D!UR7CBr zw%oR9J{R){?OGetLr{timMhtSoyJ~`uHIVRtAXdJ^x0`A7fjNq4{+de%)^WaVcOgi zo)`UkMk`}>tCK@K=lsJ~-P{^mRrysGhwt`m;|k5&)K>aXaQmvoTXrl5XB%UG0dmM) zi_HQ~&r=pyQ;S@}>tt^4uv?eg>7Rw9)*#W_#=^@L32|0ShemER-{Uf@qUeS;{79^u zy1Q51klh;+YQi;Ai++nn@L>cd$9|Mw&8`&F+rz}`N*u#q}(g0j=sbl5+o&z$}o)q#;V0&c&KoD zc+Ljj<%}?_RenTEm+>Y_jZ~B$(vPM58qA?-|7QmdG(+NQ_K4yDxl!8?3*xowXIHprGl2- zmE}%Gc?vr70kN^G8Wu|{E>P{{etLb^;2TCKHK}V9Y^B}mj!{OIpF*i-mQddEnUWGL=H|^aSeaK{^A9duxrN2To|J=oL^D~H) zQf!4?UOha5ZY8R^D`MWybLo0oOknd3Yc%7f2~{6Ey`ToploEbN>UR5wO!BXgQjqYH z5&g2~?miJuYT%B-|n3U`fdY#mJz4&W0g!w;zf|w^*x& zpX-6vV;HYXBus~1<`QbHe$%ii(#}H8)$*(g)>_xE~%dEBU}f+5|-7E$g5za z)g$Lv6Dhm$fN%YLFLSAOf;VE;zl4uX$1V3H3&QBv$P#QLtozE*f#X}jzF;B6$El7X z^h&ZGAvrdBFU%@tFQ*>#*LgPN3J^akiw_*pl{O4$RH`qSk@n2dEP`&h- zKL_I<_xUp{_@Bf7Pp-=6I1>In&7WL2T!I*W*O!lle4T}WF|5L*?A&EKdm6e`l<|*V zL_S|Ty|UKPHL!}K3lb;l`5i{N7pf2((m*q7^tV-ja0}q23|r}ixm1`C5E~j8yscn3 z#p^VZ|9uyNC*KFK;QTbFd?_K{7NoRI7~P4_w+-8h$J^ zMEv*ty@uMPSa$M`o>lg~Mw(G{Y`nYtUyP| z9g7*KQ3UD2g~`v-|@U!qs{@R<%_)nZtj}+2pZnxzK9ican@WqG9V5 zR#v|gUuLgFXc*scjhm3mYWW5Fq0y3jPf8$W!XZ5hjgCP>h0r9#86xtHTEP3!5 zDRIGvQdm#lwU1l+w8cMvZ^c0-e%5VjQ<~UdZ{^{3ECjQTYHD6-wN7w#5c-a%BarD3uQV;8UArT$NYwcPfiMroR^{WLAi1Gf6S zTe1_oP34l!l$`QaYs*ff->cQB$ow+VMs

    x|fT`I(K3*dz&vTN?y}u=ahqmi}-O# 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

    @h-Lrk3$Rnp8 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�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%0DBR2?;n#pk$dlu^=>0BvG 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 "(*blitter.com/go/xs/xsnet.Conn).Close" [ arrowhead="normalnoneodiamond" color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetOp" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetWho" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetConnHost" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetTermType" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetCmd" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetAuthCookie" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).Op" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).Who" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).ConnHost" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).Cmd" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).AuthCookie" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs.AuthUserByToken" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).ClearAuthCookie" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs.AuthUserByPasswd" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs/xsnet.Conn).Write" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/logger.LogNotice" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs/xsnet.Conn).RemoteAddr" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/goutmp.GetHost" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/xsd.GenAuthToken" [ ] - "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).TermType" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.runShellAs" -> "github.com/kr/pty.Start" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.runShellAs$1" [ arrowhead="normalnoneodiamond" ] - "blitter.com/go/xs/xsd.ptsName" -> "blitter.com/go/xs/xsd.ioctl" [ ] - "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.ptsName" [ ] - "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/goutmp.Put_utmp" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.runShellAs$2" -> "blitter.com/go/goutmp.Unput_utmp" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.runShellAs$2" [ arrowhead="normalnoneodiamond" ] - "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/goutmp.Put_lastlog_entry" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.runShellAs$3" -> "github.com/kr/pty.Setsize" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.runShellAs$3" [ arrowhead="normalnoneodot" ] - "blitter.com/go/xs/xsd.runShellAs$4" -> "(context.deadlineExceededError).Error" [ color="saddlebrown" style="dashed" ] - "blitter.com/go/xs/xsd.runShellAs$4" -> "(*github.com/pkg/errors.fundamental).Error" [ style="dashed" color="saddlebrown" ] - "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.runShellAs$4" [ arrowhead="normalnoneodot" ] - "blitter.com/go/xs/xsd.runShellAs" -> "(*blitter.com/go/xs/xsnet.Conn).EnableChaff" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.runShellAs$5" -> "(*blitter.com/go/xs/xsnet.Conn).DisableChaff" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.runShellAs$5" -> "(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.runShellAs$5" [ arrowhead="normalnoneodiamond" ] - "blitter.com/go/xs/xsd.runShellAs$6" -> "(context.deadlineExceededError).Error" [ style="dashed" color="saddlebrown" ] - "blitter.com/go/xs/xsd.runShellAs$6" -> "(*github.com/pkg/errors.fundamental).Error" [ style="dashed" color="saddlebrown" ] - "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.runShellAs$6" [ arrowhead="normalnoneodot" ] - "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/logger.LogDebug" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.runShellAs" -> "(*blitter.com/go/xs/xsnet.Conn).SetStatus" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/xsd.runShellAs" [ ] - "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/logger.LogErr" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs/xsnet.Conn).SetStatus" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.runClientToServerCopyAs" -> "(*blitter.com/go/xs/xsnet.Conn).EnableChaff" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.runClientToServerCopyAs" -> "(*blitter.com/go/xs/xsnet.Conn).DisableChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ] - "blitter.com/go/xs/xsd.runClientToServerCopyAs" -> "(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/xsd.runClientToServerCopyAs" [ ] - "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.runServerToClientCopyAs" -> "(*blitter.com/go/xs/xsnet.Conn).EnableChaff" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.runServerToClientCopyAs" -> "(*blitter.com/go/xs/xsnet.Conn).DisableChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ] - "blitter.com/go/xs/xsd.runServerToClientCopyAs" -> "(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff" [ color="saddlebrown" arrowhead="normalnoneodiamond" ] - "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/xsd.runServerToClientCopyAs" [ ] - "blitter.com/go/xs/xsd.main" -> "blitter.com/go/xs/logger.New" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main" -> "blitter.com/go/xs/xsnet.Init" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$1" -> "blitter.com/go/xs/logger.LogNotice" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main" -> "blitter.com/go/xs/xsd.main$1" [ arrowhead="normalnoneodot" ] - "blitter.com/go/xs/xsd.main" -> "blitter.com/go/xs/xsnet.Listen" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main" -> "(blitter.com/go/xs/xsnet.HKExListener).Close" [ arrowhead="normalnoneodiamond" color="saddlebrown" ] - "blitter.com/go/xs/xsd.main" -> "(*blitter.com/go/xs/xsnet.HKExListener).Accept" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main" -> "(*blitter.com/go/xs/xsnet.Conn).SetupChaff" [ color="saddlebrown" ] - "blitter.com/go/xs/xsd.main" -> "blitter.com/go/xs/xsd.main$2" [ arrowhead="normalnoneodot" ] + "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/xsd.runServerToClientCopyAs" [ tooltip="at xsd.go:828: calling [blitter.com/go/xs/xsd.runServerToClientCopyAs]" ] + "blitter.com/go/xs/xsd.main$2$1" -> "(*blitter.com/go/xs/xsnet.Conn).Close" [ color="saddlebrown" tooltip="at xsd.go:653: calling [(*blitter.com/go/xs/xsnet.Conn).Close]" ] + "blitter.com/go/xs/xsd.runShellAs$2" -> "blitter.com/go/goutmp.Unput_utmp" [ color="saddlebrown" tooltip="at xsd.go:336: calling [blitter.com/go/goutmp.Unput_utmp]" ] + "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetTermType" [ color="saddlebrown" tooltip="at xsd.go:701: calling [(*blitter.com/go/xs.Session).SetTermType]" ] + "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).Who" [ color="saddlebrown" tooltip="at xsd.go:720: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:724: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:729: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:731: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:743: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:754: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:755: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:757: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:762: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:764: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:771: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:772: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:777: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:779: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:786: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:788: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:793: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:795: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:803: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:804: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:809: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:811: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:827: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:828: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:830: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:833: calling [(blitter.com/go/xs.Session).Who]" ] + "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs.VerifyPass" [ color="saddlebrown" tooltip="at xsd.go:729: calling [blitter.com/go/xs.VerifyPass]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.runShellAs$6" [ arrowhead="normalnoneodot" tooltip="at xsd.go:381: calling [blitter.com/go/xs/xsd.runShellAs$6]" ] + "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).ClearAuthCookie" [ color="saddlebrown" tooltip="at xsd.go:737: calling [(*blitter.com/go/xs.Session).ClearAuthCookie]" ] + "blitter.com/go/xs/xsd.main" -> "(*blitter.com/go/xs/xsnet.Conn).CAlg" [ color="saddlebrown" tooltip="at xsd.go:627: calling [(*blitter.com/go/xs/xsnet.Conn).CAlg]\nat xsd.go:628: calling [(*blitter.com/go/xs/xsnet.Conn).CAlg]" ] + "blitter.com/go/xs/xsd.runClientToServerCopyAs" -> "(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" tooltip="at xsd.go:122: calling [(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.runShellAs$2" [ arrowhead="normalnoneodiamond" tooltip="at xsd.go:336: calling [blitter.com/go/xs/xsd.runShellAs$2]" ] + "blitter.com/go/xs/xsd.main" -> "(*blitter.com/go/xs/xsnet.Conn).SetupChaff" [ color="saddlebrown" tooltip="at xsd.go:641: calling [(*blitter.com/go/xs/xsnet.Conn).SetupChaff]" ] + "blitter.com/go/xs/xsd.main" -> "blitter.com/go/xs/xsnet.Listen" [ color="saddlebrown" tooltip="at xsd.go:610: calling [blitter.com/go/xs/xsnet.Listen]" ] + "blitter.com/go/xs/xsd.main" -> "(*blitter.com/go/xs/xsnet.Conn).KEX" [ tooltip="at xsd.go:623: calling [(*blitter.com/go/xs/xsnet.Conn).KEX]\nat xsd.go:624: calling [(*blitter.com/go/xs/xsnet.Conn).KEX]" color="saddlebrown" ] + "blitter.com/go/xs/xsd.runShellAs$6" -> "(context.deadlineExceededError).Error" [ style="dashed" color="saddlebrown" tooltip="at xsd.go:385: calling [(context.deadlineExceededError).Error]" ] + "blitter.com/go/xs/xsd.runServerToClientCopyAs" -> "(*blitter.com/go/xs/xsnet.Conn).EnableChaff" [ color="saddlebrown" tooltip="at xsd.go:220: calling [(*blitter.com/go/xs/xsnet.Conn).EnableChaff]" ] + "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/logger.LogNotice" [ color="saddlebrown" tooltip="at xsd.go:743: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:754: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:771: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:779: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:786: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:795: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:803: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:811: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:827: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:833: calling [blitter.com/go/xs/logger.LogNotice]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "github.com/creack/pty.Start" [ color="saddlebrown" tooltip="at xsd.go:318: calling [github.com/creack/pty.Start]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/goutmp.Put_lastlog_entry" [ color="saddlebrown" tooltip="at xsd.go:337: calling [blitter.com/go/goutmp.Put_lastlog_entry]" ] + "blitter.com/go/xs/xsd.runShellAs$5" -> "(*blitter.com/go/xs/xsnet.Conn).DisableChaff" [ tooltip="at xsd.go:369: calling [(*blitter.com/go/xs/xsnet.Conn).DisableChaff]" color="saddlebrown" ] + "blitter.com/go/xs/xsd.main" -> "(blitter.com/go/xs/xsnet.HKExListener).Close" [ arrowhead="normalnoneodiamond" color="saddlebrown" tooltip="at xsd.go:614: calling [(blitter.com/go/xs/xsnet.HKExListener).Close]" ] + "blitter.com/go/xs/xsd.main" -> "(*blitter.com/go/xs/xsnet.HKExListener).Accept" [ color="saddlebrown" tooltip="at xsd.go:620: calling [(*blitter.com/go/xs/xsnet.HKExListener).Accept]" ] + "blitter.com/go/xs/xsd.main$1" -> "blitter.com/go/xs/logger.LogNotice" [ color="saddlebrown" tooltip="at xsd.go:591: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:595: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:599: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:601: calling [blitter.com/go/xs/logger.LogNotice]" ] + "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetAuthCookie" [ color="saddlebrown" tooltip="at xsd.go:717: calling [(*blitter.com/go/xs.Session).SetAuthCookie]" ] + "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).TermType" [ color="saddlebrown" tooltip="at xsd.go:757: calling [(blitter.com/go/xs.Session).TermType]\nat xsd.go:772: calling [(blitter.com/go/xs.Session).TermType]\nat xsd.go:788: calling [(blitter.com/go/xs.Session).TermType]\nat xsd.go:804: calling [(blitter.com/go/xs.Session).TermType]\nat xsd.go:828: calling [(blitter.com/go/xs.Session).TermType]" ] + "blitter.com/go/xs/xsd.runShellAs$3" -> "github.com/creack/pty.Setsize" [ color="saddlebrown" tooltip="at xsd.go:348: calling [github.com/creack/pty.Setsize]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/logger.LogDebug" [ color="saddlebrown" tooltip="at xsd.go:409: calling [blitter.com/go/xs/logger.LogDebug]" ] + "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs/xsnet.Conn).SetStatus" [ color="saddlebrown" tooltip="at xsd.go:765: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:780: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:796: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:815: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:841: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]" ] + "blitter.com/go/xs/xsd.main" -> "(blitter.com/go/xs/xsd.allowedCipherAlgs).allowed" [ tooltip="at xsd.go:627: calling [(blitter.com/go/xs/xsd.allowedCipherAlgs).allowed]" ] + "blitter.com/go/xs/xsd.runShellAs$6" -> "(compress/flate.CorruptInputError).Error" [ style="dashed" color="saddlebrown" tooltip="at xsd.go:385: calling [(compress/flate.CorruptInputError).Error]" ] + "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetConnHost" [ color="saddlebrown" tooltip="at xsd.go:693: calling [(*blitter.com/go/xs.Session).SetConnHost]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs.GetTool" [ color="saddlebrown" tooltip="at xsd.go:308: calling [blitter.com/go/xs.GetTool]\nat xsd.go:297: calling [blitter.com/go/xs.GetTool]\nat xsd.go:303: calling [blitter.com/go/xs.GetTool]" ] + "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/xsd.runClientToServerCopyAs" [ tooltip="at xsd.go:804: calling [blitter.com/go/xs/xsd.runClientToServerCopyAs]" ] + "blitter.com/go/xs/xsd.main" -> "(blitter.com/go/xs/xsd.allowedKEXAlgs).allowed" [ tooltip="at xsd.go:623: calling [(blitter.com/go/xs/xsd.allowedKEXAlgs).allowed]" ] + "blitter.com/go/xs/xsd.main" -> "(blitter.com/go/xs/xsd.allowedHMACAlgs).allowed" [ tooltip="at xsd.go:631: calling [(blitter.com/go/xs/xsd.allowedHMACAlgs).allowed]" ] + "blitter.com/go/xs/xsd.runClientToServerCopyAs" -> "(*blitter.com/go/xs/xsnet.Conn).EnableChaff" [ color="saddlebrown" tooltip="at xsd.go:119: calling [(*blitter.com/go/xs/xsnet.Conn).EnableChaff]" ] + "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs/xsnet.Conn).RemoteAddr" [ tooltip="at xsd.go:752: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]\nat xsd.go:769: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]\nat xsd.go:784: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]\nat xsd.go:801: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]\nat xsd.go:825: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]" color="saddlebrown" ] + "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/logger.LogErr" [ color="saddlebrown" tooltip="at xsd.go:762: calling [blitter.com/go/xs/logger.LogErr]\nat xsd.go:777: calling [blitter.com/go/xs/logger.LogErr]\nat xsd.go:809: calling [blitter.com/go/xs/logger.LogErr]\nat xsd.go:846: calling [blitter.com/go/xs/logger.LogErr]\nat xsd.go:830: calling [blitter.com/go/xs/logger.LogErr]" ] + "(blitter.com/go/xs/xsd.allowedCipherAlgs).allowed" -> "(*blitter.com/go/xs/xsnet.CSCipherAlg).String" [ color="saddlebrown" tooltip="at xsd.go:466: calling [(*blitter.com/go/xs/xsnet.CSCipherAlg).String]" ] + "(blitter.com/go/xs/xsd.allowedHMACAlgs).allowed" -> "(*blitter.com/go/xs/xsnet.CSHmacAlg).String" [ color="saddlebrown" tooltip="at xsd.go:484: calling [(*blitter.com/go/xs/xsnet.CSHmacAlg).String]" ] + "blitter.com/go/xs/xsd.main" -> "(*blitter.com/go/xs/xsnet.Conn).Close" [ color="saddlebrown" tooltip="at xsd.go:626: calling [(*blitter.com/go/xs/xsnet.Conn).Close]\nat xsd.go:630: calling [(*blitter.com/go/xs/xsnet.Conn).Close]\nat xsd.go:634: calling [(*blitter.com/go/xs/xsnet.Conn).Close]" ] + "blitter.com/go/xs/xsd.runClientToServerCopyAs" -> "blitter.com/go/xs.GetTool" [ color="saddlebrown" tooltip="at xsd.go:88: calling [blitter.com/go/xs.GetTool]" ] + "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetCmd" [ color="saddlebrown" tooltip="at xsd.go:709: calling [(*blitter.com/go/xs.Session).SetCmd]" ] + "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).ConnHost" [ color="saddlebrown" tooltip="at xsd.go:720: calling [(blitter.com/go/xs.Session).ConnHost]\nat xsd.go:724: calling [(blitter.com/go/xs.Session).ConnHost]\nat xsd.go:755: calling [(blitter.com/go/xs.Session).ConnHost]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.ptsName" [ tooltip="at xsd.go:331: calling [blitter.com/go/xs/xsd.ptsName]" ] + "blitter.com/go/xs/xsd.runShellAs$5" -> "(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff" [ color="saddlebrown" tooltip="at xsd.go:370: calling [(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff]" ] + "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ color="saddlebrown" tooltip="at xsd.go:821: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/goutmp.Put_utmp" [ tooltip="at xsd.go:335: calling [blitter.com/go/goutmp.Put_utmp]" color="saddlebrown" ] + "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.runShellAs$5" [ arrowhead="normalnoneodiamond" tooltip="at xsd.go:368: calling [blitter.com/go/xs/xsd.runShellAs$5]" ] + "blitter.com/go/xs/xsd.runServerToClientCopyAs" -> "(*blitter.com/go/xs/xsnet.Conn).DisableChaff" [ tooltip="at xsd.go:223: calling [(*blitter.com/go/xs/xsnet.Conn).DisableChaff]" arrowhead="normalnoneodiamond" color="saddlebrown" ] + "blitter.com/go/xs/xsd.runServerToClientCopyAs" -> "(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff" [ color="saddlebrown" tooltip="at xsd.go:224: calling [(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff]" arrowhead="normalnoneodiamond" ] + "blitter.com/go/xs/xsd.runShellAs$4" -> "(*github.com/pkg/errors.fundamental).Error" [ tooltip="at xsd.go:358: calling [(*github.com/pkg/errors.fundamental).Error]" style="dashed" color="saddlebrown" ] + "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetWho" [ tooltip="at xsd.go:685: calling [(*blitter.com/go/xs.Session).SetWho]" color="saddlebrown" ] + "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/goutmp.GetHost" [ color="saddlebrown" tooltip="at xsd.go:753: calling [blitter.com/go/goutmp.GetHost]\nat xsd.go:770: calling [blitter.com/go/goutmp.GetHost]\nat xsd.go:785: calling [blitter.com/go/goutmp.GetHost]\nat xsd.go:802: calling [blitter.com/go/goutmp.GetHost]\nat xsd.go:826: calling [blitter.com/go/goutmp.GetHost]" ] + "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/xsd.GenAuthToken" [ tooltip="at xsd.go:755: calling [blitter.com/go/xs/xsd.GenAuthToken]" ] + "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/xsd.runShellAs" [ tooltip="at xsd.go:757: calling [blitter.com/go/xs/xsd.runShellAs]\nat xsd.go:772: calling [blitter.com/go/xs/xsd.runShellAs]\nat xsd.go:788: calling [blitter.com/go/xs/xsd.runShellAs]" ] + "blitter.com/go/xs/xsd.main" -> "blitter.com/go/xs/logger.LogNotice" [ color="saddlebrown" tooltip="at xsd.go:571: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:576: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:581: calling [blitter.com/go/xs/logger.LogNotice]" ] + "blitter.com/go/xs/xsd.main" -> "blitter.com/go/xs/xsd.main$1" [ arrowhead="normalnoneodot" tooltip="at xsd.go:586: calling [blitter.com/go/xs/xsd.main$1]" ] + "blitter.com/go/xs/xsd.main" -> "(*blitter.com/go/xs/xsnet.Conn).SetStatus" [ color="saddlebrown" tooltip="at xsd.go:625: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:629: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:633: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]" ] + "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs/xsnet.Conn).Close" [ color="saddlebrown" tooltip="at xsd.go:647: calling [(*blitter.com/go/xs/xsnet.Conn).Close]" arrowhead="normalnoneodiamond" ] + "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetOp" [ color="saddlebrown" tooltip="at xsd.go:677: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:760: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:775: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:791: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:807: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:840: calling [(*blitter.com/go/xs.Session).SetOp]" ] + "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).AuthCookie" [ tooltip="at xsd.go:724: calling [(blitter.com/go/xs.Session).AuthCookie]\nat xsd.go:729: calling [(blitter.com/go/xs.Session).AuthCookie]\nat xsd.go:731: calling [(blitter.com/go/xs.Session).AuthCookie]" color="saddlebrown" ] + "blitter.com/go/xs/xsd.main" -> "blitter.com/go/xs/logger.New" [ tooltip="at xsd.go:559: calling [blitter.com/go/xs/logger.New]" color="saddlebrown" ] + "blitter.com/go/xs/xsd.runClientToServerCopyAs" -> "(*blitter.com/go/xs/xsnet.Conn).DisableChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" tooltip="at xsd.go:121: calling [(*blitter.com/go/xs/xsnet.Conn).DisableChaff]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "(*blitter.com/go/xs/xsnet.Conn).EnableChaff" [ color="saddlebrown" tooltip="at xsd.go:365: calling [(*blitter.com/go/xs/xsnet.Conn).EnableChaff]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "(*blitter.com/go/xs/xsnet.Conn).SetStatus" [ color="saddlebrown" tooltip="at xsd.go:407: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]" ] + "blitter.com/go/xs/xsd.main$2$1" -> "(blitter.com/go/xs/xsnet.Conn).Write" [ color="saddlebrown" tooltip="at xsd.go:652: calling [(blitter.com/go/xs/xsnet.Conn).Write]" ] + "blitter.com/go/xs/xsd.runShellAs$6" -> "(compress/flate.InternalError).Error" [ tooltip="at xsd.go:385: calling [(compress/flate.InternalError).Error]" style="dashed" color="saddlebrown" ] + "blitter.com/go/xs/xsd.runShellAs$4" -> "(context.deadlineExceededError).Error" [ style="dashed" color="saddlebrown" tooltip="at xsd.go:358: calling [(context.deadlineExceededError).Error]" ] + "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs.NewAuthCtx" [ tooltip="at xsd.go:724: calling [blitter.com/go/xs.NewAuthCtx]\nat xsd.go:729: calling [blitter.com/go/xs.NewAuthCtx]\nat xsd.go:731: calling [blitter.com/go/xs.NewAuthCtx]" color="saddlebrown" ] + "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs.AuthUserByPasswd" [ color="saddlebrown" tooltip="at xsd.go:731: calling [blitter.com/go/xs.AuthUserByPasswd]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.runShellAs$3" [ arrowhead="normalnoneodot" tooltip="at xsd.go:345: calling [blitter.com/go/xs/xsd.runShellAs$3]" ] + "blitter.com/go/xs/xsd.main" -> "(*blitter.com/go/xs/xsnet.Conn).HAlg" [ color="saddlebrown" tooltip="at xsd.go:631: calling [(*blitter.com/go/xs/xsnet.Conn).HAlg]\nat xsd.go:632: calling [(*blitter.com/go/xs/xsnet.Conn).HAlg]" ] + "blitter.com/go/xs/xsd.runShellAs$6" -> "(*github.com/pkg/errors.fundamental).Error" [ style="dashed" color="saddlebrown" tooltip="at xsd.go:385: calling [(*github.com/pkg/errors.fundamental).Error]" ] + "(blitter.com/go/xs/xsd.allowedKEXAlgs).allowed" -> "(*blitter.com/go/xs/xsnet.KEXAlg).String" [ tooltip="at xsd.go:448: calling [(*blitter.com/go/xs/xsnet.KEXAlg).String]" color="saddlebrown" ] + "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs/xsnet.Conn).Write" [ color="saddlebrown" tooltip="at xsd.go:741: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xsd.go:744: calling [(blitter.com/go/xs/xsnet.Conn).Write]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.runShellAs$1" [ arrowhead="normalnoneodiamond" tooltip="at xsd.go:325: calling [blitter.com/go/xs/xsd.runShellAs$1]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.runShellAs$4" [ arrowhead="normalnoneodot" tooltip="at xsd.go:355: calling [blitter.com/go/xs/xsd.runShellAs$4]" ] + "blitter.com/go/xs/xsd.main$2$1" -> "blitter.com/go/xs/logger.LogNotice" [ color="saddlebrown" tooltip="at xsd.go:651: calling [blitter.com/go/xs/logger.LogNotice]" ] + "blitter.com/go/xs/xsd.runServerToClientCopyAs" -> "blitter.com/go/xs.GetTool" [ color="saddlebrown" tooltip="at xsd.go:193: calling [blitter.com/go/xs.GetTool]" ] + "blitter.com/go/xs/xsd.runShellAs$4" -> "(compress/flate.CorruptInputError).Error" [ style="dashed" color="saddlebrown" tooltip="at xsd.go:358: calling [(compress/flate.CorruptInputError).Error]" ] + "blitter.com/go/xs/xsd.runShellAs$4" -> "(compress/flate.InternalError).Error" [ style="dashed" color="saddlebrown" tooltip="at xsd.go:358: calling [(compress/flate.InternalError).Error]" ] + "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).Op" [ color="saddlebrown" tooltip="at xsd.go:720: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:750: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:767: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:782: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:798: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:822: calling [(blitter.com/go/xs.Session).Op]" ] + "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).Cmd" [ color="saddlebrown" tooltip="at xsd.go:720: calling [(blitter.com/go/xs.Session).Cmd]\nat xsd.go:772: calling [(blitter.com/go/xs.Session).Cmd]\nat xsd.go:788: calling [(blitter.com/go/xs.Session).Cmd]\nat xsd.go:804: calling [(blitter.com/go/xs.Session).Cmd]\nat xsd.go:828: calling [(blitter.com/go/xs.Session).Cmd]" ] + "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs.AuthUserByToken" [ tooltip="at xsd.go:724: calling [blitter.com/go/xs.AuthUserByToken]" color="saddlebrown" ] + "blitter.com/go/xs/xsd.ptsName" -> "blitter.com/go/xs/xsd.ioctl" [ tooltip="at xsd.go:59: calling [blitter.com/go/xs/xsd.ioctl]" ] + "blitter.com/go/xs/xsd.main" -> "blitter.com/go/xs/xsnet.Init" [ color="saddlebrown" tooltip="at xsd.go:560: calling [blitter.com/go/xs/xsnet.Init]" ] + "blitter.com/go/xs/xsd.main" -> "blitter.com/go/xs/xsd.main$2" [ arrowhead="normalnoneodot" tooltip="at xsd.go:646: calling [blitter.com/go/xs/xsd.main$2]" ] } diff --git a/xsd/xsd.go b/xsd/xsd.go index 34bb39a..1abf813 100755 --- a/xsd/xsd.go +++ b/xsd/xsd.go @@ -82,7 +82,7 @@ func runClientToServerCopyAs(who, ttype string, conn *xsnet.Conn, fpath string, os.Clearenv() os.Setenv("HOME", u.HomeDir) // nolint: gosec,errcheck os.Setenv("TERM", ttype) // nolint: gosec,errcheck - os.Setenv("XS_SESSION", "1") // nolint: gosec,errcheck + os.Setenv("XS_SESSION", "1") // nolint: gosec,errcheck var c *exec.Cmd cmdName := xs.GetTool("tar") @@ -187,7 +187,7 @@ func runServerToClientCopyAs(who, ttype string, conn *xsnet.Conn, srcPath string os.Clearenv() _ = os.Setenv("HOME", u.HomeDir) // nolint: gosec _ = os.Setenv("TERM", ttype) // nolint: gosec - _ = os.Setenv("XS_SESSION", "1") // nolint: gosec + _ = os.Setenv("XS_SESSION", "1") // nolint: gosec var c *exec.Cmd cmdName := xs.GetTool("tar") @@ -278,13 +278,17 @@ func runShellAs(who, hname, ttype, cmd string, interactive bool, conn *xsnet.Con os.Clearenv() _ = os.Setenv("HOME", u.HomeDir) // nolint: gosec _ = os.Setenv("TERM", ttype) // nolint: gosec - _ = os.Setenv("XS_SESSION", "1") // nolint: gosec + _ = os.Setenv("XS_SESSION", "1") // nolint: gosec var c *exec.Cmd + if interactive { if useSysLogin { - // Use the server's login binary (post-auth - // which is still done via our own bcrypt file) + // Use the server's login binary (post-auth, which + // is still done via our own bcrypt file) + // + // Note login will drop privs to the intended user for us + // // Things UNIX login does, like print the 'motd', // and use the shell specified by /etc/passwd, will be done // automagically, at the cost of another external tool @@ -292,23 +296,23 @@ func runShellAs(who, hname, ttype, cmd string, interactive bool, conn *xsnet.Con // c = exec.Command(xs.GetTool("login"), "-f", "-p", who) // nolint: gosec } else { + // Using our separate login via local passwd file + // + // Note we must drop privs ourselves for the user shell + // c = exec.Command(xs.GetTool("bash"), "-i", "-l") // nolint: gosec + c.SysProcAttr = &syscall.SysProcAttr{} + c.SysProcAttr.Credential = &syscall.Credential{Uid: uid, Gid: gid} } } else { c = exec.Command(xs.GetTool("bash"), "-c", cmd) // nolint: gosec + c.SysProcAttr = &syscall.SysProcAttr{} + c.SysProcAttr.Credential = &syscall.Credential{Uid: uid, Gid: gid} } //If os.Clearenv() isn't called by server above these will be seen in the //client's session env. //c.Env = []string{"HOME=" + u.HomeDir, "SUDO_GID=", "SUDO_UID=", "SUDO_USER=", "SUDO_COMMAND=", "MAIL=", "LOGNAME="+who} c.Dir = u.HomeDir - c.SysProcAttr = &syscall.SysProcAttr{} - if useSysLogin { - // If using server's login binary, drop to user creds - // is taken care of by it. - c.SysProcAttr.Credential = &syscall.Credential{} - } else { - c.SysProcAttr.Credential = &syscall.Credential{Uid: uid, Gid: gid} - } // Start the command with a pty. ptmx, err := pty.Start(c) // returns immediately with ptmx file @@ -418,15 +422,15 @@ func runShellAs(who, hname, ttype, cmd string, interactive bool, conn *xsnet.Con // GenAuthToken generates a pseudorandom auth token for a specific // user from a specific host to allow non-interactive logins. func GenAuthToken(who string, connhost string) string { - //tokenA, e := os.Hostname() + //hname, e := os.Hostname() //if e != nil { - // tokenA = "badhost" + // hname = "#badhost#" //} - tokenA := connhost + hname := connhost - tokenB := make([]byte, 64) - _, _ = rand.Read(tokenB) // nolint: gosec - return fmt.Sprintf("%s:%s", tokenA, hex.EncodeToString(tokenB)) + token := make([]byte, 64) + _, _ = rand.Read(token) // nolint: gosec + return fmt.Sprintf("%s:%s:%s", hname, who, hex.EncodeToString(token)) } var ( From 9ba07719cdaf304d91f3a5cb1fd49c336c141fc3 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sun, 31 Jan 2021 22:53:01 -0800 Subject: [PATCH 14/94] Fixed bacillus CI script --- bacillus/ci_pushbuild.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bacillus/ci_pushbuild.sh b/bacillus/ci_pushbuild.sh index 4eba743..3b59c8c 100755 --- a/bacillus/ci_pushbuild.sh +++ b/bacillus/ci_pushbuild.sh @@ -42,7 +42,7 @@ if [ -f ~/.xs_id ]; then mv ~/.xs_id ~/.xs_id.bak fi echo "Setting dummy authtoken in ~/.xs_id ..." -echo "localhost:asdfasdfasdf" >~/.xs_id +echo "localhost:${USER}:asdfasdfasdf" >~/.xs_id echo "Performing remote command on @localhost via authtoken login ..." tokentest=$(timeout 10 xs -x "echo -n FOO" @localhost) if [ "${tokentest}" != "FOO" ]; then From e4b69eab2dcd98ed86adfb5c0f6fd56606a83685 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Fri, 19 Feb 2021 01:15:28 -0800 Subject: [PATCH 15/94] Cleaned up README.md --- LICENSE | 2 +- README.md | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/LICENSE b/LICENSE index 83c90e7..13144f3 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2017 - 2019 Russell Magee (xs/xsd/xsnet/xspasswd) +Copyright (c) 2017 - 2021 Russell Magee (xs/xsd/xsnet/xspasswd) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 9a57e48..c3f925b 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,14 @@ # XS -- -XS (**X**perimental **S**hell) is a golang implementation of a simple remote shell client and -server, similar in role to ssh, offering encrypted interactive and non-interactive sessions (remote commands), -remote file copying and tunnels with optional traffic obfuscation ('chaffing'). +XS (**X**perimental **S**hell) is a simple alternative to ssh (<5% total SLOCC) written from scratch in Go. +A testbed for candidate PQC (Post-Quantum Cryptography) KEMs (Key-Encapsulation Mechanisms) and symmetric +session encryption algorithms. + +xs also features integrated traffic chaffing to obscure interactive session and file copy activity. +Supports encrypted interactive and non-interactive sessions (remote commands), remote file copying and tunnels. + +Runs on Linux, FreeBSD, Windows (client only, MSYS) and Android (within Termux). https://gogs.blitter.com/RLabs/xs It is stable to the point that I use it for day-to-day remote access in place of, and in preference to, ssh. From b016e3cd778fd557c6831a7494e1176a041aafd2 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Tue, 16 Mar 2021 19:32:18 -0700 Subject: [PATCH 16/94] Added notes on how to avoid/detect client->server copy issues (cf. issue #31) Signed-off-by: Russ Magee --- README.md | 10 ++++++++++ xsd/xsd.go | 12 ++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index c3f925b..b0dd5b7 100644 --- a/README.md +++ b/README.md @@ -200,6 +200,16 @@ NOTE: Renaming while copying (eg., 'cp /foo/bar/fileA ./fileB') is NOT supported If the 'pv' pipeview utility is available (http://www.ivarch.com/programs/pv.shtml) file transfer progress and bandwidth control will be available (suppress the former with the -q option, set the latter with -L <bytes_per_second>). +Special care should be taken when doing client->server copies: since the tarpipe (should) always succeed at least sending data to the remote side, a destination with no write permission will not return a nonzero status and the client closes its end after sending all data, giving the server no opportunity to send an error code to the client. +It is recommended to test beforehand if the server-side destination is writable (and optionally if the destination already exists, if one does not want to clobber an existing path) by: + +``` +$ xs -x "test -w /dest/path" me@myserver ## If clobbering /dest/path is OK, or +$ xs -x "test -w /dest/path -o ! -e /dest/path" me@myserver ## To prevent clobbering +``` + +Perhaps in future a more complex handshake will be devised to allow the client to half-close the tarpipe, allowing the server to complete its side of the operation and send back its success or failure code, but the current connection protocol does not allow this. If this is a deal-breaking feature, please contact the maintainer. + ### Tunnels Simple tunnels (client -> server, no reverse tunnels for now) are supported. diff --git a/xsd/xsd.go b/xsd/xsd.go index 1abf813..1e9b15e 100755 --- a/xsd/xsd.go +++ b/xsd/xsd.go @@ -800,15 +800,15 @@ func main() { log.Printf("[Client->Server copy]\n") addr := hc.RemoteAddr() hname := goutmp.GetHost(addr.String()) - logger.LogNotice(fmt.Sprintf("[Running copy for [%s@%s]]\n", rec.Who(), hname)) // nolint: gosec,errcheck + logger.LogNotice(fmt.Sprintf("[c->s copy for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck cmdStatus, runErr := runClientToServerCopyAs(string(rec.Who()), string(rec.TermType()), hc, string(rec.Cmd()), chaffEnabled) // Returned hopefully via an EOF or exit/logout; // Clear current op so user can enter next, or EOF rec.SetOp([]byte{0}) if runErr != nil { - logger.LogErr(fmt.Sprintf("[Error running cp for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck + logger.LogErr(fmt.Sprintf("[c->s copy error for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck } else { - logger.LogNotice(fmt.Sprintf("[Command completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)) // nolint: gosec,errcheck + logger.LogNotice(fmt.Sprintf("[c->s copy completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)) // nolint: gosec,errcheck } // TODO: Test this with huge files.. see Bug #22 - do we need to // sync w/sender (client) that we've gotten all data? @@ -824,13 +824,13 @@ func main() { log.Printf("[Server->Client copy]\n") addr := hc.RemoteAddr() hname := goutmp.GetHost(addr.String()) - logger.LogNotice(fmt.Sprintf("[Running copy for [%s@%s]]\n", rec.Who(), hname)) // nolint: gosec,errcheck + logger.LogNotice(fmt.Sprintf("[s->c copy for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck cmdStatus, runErr := runServerToClientCopyAs(string(rec.Who()), string(rec.TermType()), hc, string(rec.Cmd()), chaffEnabled) if runErr != nil { - logger.LogErr(fmt.Sprintf("[Error spawning cp for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck + logger.LogErr(fmt.Sprintf("[s->c copy error for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck } else { // Returned hopefully via an EOF or exit/logout; - logger.LogNotice(fmt.Sprintf("[Command completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)) // nolint: gosec,errcheck + logger.LogNotice(fmt.Sprintf("[s->c copy completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)) // nolint: gosec,errcheck } // HACK: Bug #22: (xc) Need to wait for rcvr to get final data // TODO: Await specific msg from client to inform they have gotten all data from the tarpipe From 690426879751393506f3e040d9ed40531d7d331a Mon Sep 17 00:00:00 2001 From: Russtopia Date: Sun, 15 Aug 2021 02:49:20 -0700 Subject: [PATCH 17/94] Added blurb on crypto primitive negotiation --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index b0dd5b7..e5dd824 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,14 @@ Currently supported session algorithms: * HMAC-SHA256 * HMAC-SHA512 +### Wait. You offer a lot of cryptographic primitives there. According to some, 'Cipher-agility' is considered bad in 2021. What gives? + +An interesting question. See [this write-up for a discussion](https://paragonie.com/blog/2019/10/against-agility-in-cryptography-protocols). + +xs implements the philosophy that it is the server admin's prerogitive to allow or deny connection using any particular combination of cryptographic primitives. The protocol makes no allowance for any sort of 'downgrades' or algo substitution during negotiation. The 'negotiation', if you can even call it that, is precisely: (client proposes a KEX, session cipher alg and hash) -- (server accepts or refuses and drops connection). If the server admin wishes, xsd (server) can accept any supported configuration, or a subset, or exactly one. + +Furthermore, the code allows no accidental or implied 'sliding' between one configuration and another -- there is no 'fallback' mode or two-way negotiation of what primitives to use (which would open the possibility of downgrade attacks). HOWEVER, the current code does default to the server (xsd) allowing 'all' combinations unless command-line switches give a restriction list. Perhaps I will invert that, and require a list of allowed configurations instead. This is trivial to implement with the current architecture. + ### Conn Calls to xsnet.Dial() and xsnet.Listen()/Accept() are generally the same as calls to the equivalents within the _net_ package; however upon connection a key exchange automatically occurs whereby client and server independently derive the same keying material, and all following traffic is secured by a symmetric encryption algorithm. From aae7b14e7c0da66b831379a56d400b20a998be15 Mon Sep 17 00:00:00 2001 From: Russtopia Date: Sun, 15 Aug 2021 12:57:46 -0700 Subject: [PATCH 18/94] Update 'README.md' --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e5dd824..df9a700 100644 --- a/README.md +++ b/README.md @@ -51,9 +51,11 @@ Currently supported session algorithms: An interesting question. See [this write-up for a discussion](https://paragonie.com/blog/2019/10/against-agility-in-cryptography-protocols). -xs implements the philosophy that it is the server admin's prerogitive to allow or deny connection using any particular combination of cryptographic primitives. The protocol makes no allowance for any sort of 'downgrades' or algo substitution during negotiation. The 'negotiation', if you can even call it that, is precisely: (client proposes a KEX, session cipher alg and hash) -- (server accepts or refuses and drops connection). If the server admin wishes, xsd (server) can accept any supported configuration, or a subset, or exactly one. +xs operates via the philosophy that it is the server admin's prerogitive to configure local policy wrt. allowed cryptographic primitives. The protocol makes no allowance for any sort of 'downgrades' or algo substitution during negotiation. The 'negotiation', if you can even call it that, is precisely: (client proposes a KEX, session cipher alg and hash) -- (server accepts or refuses and drops connection). If the server admin wishes, xsd (server) can accept any supported configuration, or a subset, or exactly one. -Furthermore, the code allows no accidental or implied 'sliding' between one configuration and another -- there is no 'fallback' mode or two-way negotiation of what primitives to use (which would open the possibility of downgrade attacks). HOWEVER, the current code does default to the server (xsd) allowing 'all' combinations unless command-line switches give a restriction list. Perhaps I will invert that, and require a list of allowed configurations instead. This is trivial to implement with the current architecture. +The connection negotiation allows no accidental or implied 'sliding' between one configuration and another -- there is no 'fallback' mode or two-way negotiation of what primitives to use (which would open the possibility of downgrade attacks). Unlike `ssh`, the server does not offer to clients a list of supported algos; the client can only offer a single configuration to the server, which it simply accepts or rejects without comment to the client. + +Currently, absent a specific whitelist of algs to allow, the server allows 'all' combinations as listed above to be proposed by clients (but again, only one may be proposed during a connect attempt). If the admin wishes to restrict the accepted algorithms, they may use the `-aK`, `-aC` and `-aH` options when launching the server to define a restricting whitelist. Perhaps in future releases the default will be to accept *no* algs and such a whitelist shall be required. ### Conn From 0e453f15d02a222d331aa20a9cf392acb507e083 Mon Sep 17 00:00:00 2001 From: Russtopia Date: Sun, 15 Aug 2021 13:12:29 -0700 Subject: [PATCH 19/94] Update blurb on 'cryptographic agility' and server alg whitelisting --- README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index df9a700..3da43ef 100644 --- a/README.md +++ b/README.md @@ -47,15 +47,17 @@ Currently supported session algorithms: * HMAC-SHA256 * HMAC-SHA512 -### Wait. You offer a lot of cryptographic primitives there. According to some, 'Cipher-agility' is considered bad in 2021. What gives? +*** +**A Note on 'cryptographic agility'** + +It has been suggested recently to me that offering multiple cryptographic primitives is considered bad in 2021. An interesting question. See [this write-up for a discussion](https://paragonie.com/blog/2019/10/against-agility-in-cryptography-protocols). -xs operates via the philosophy that it is the server admin's prerogitive to configure local policy wrt. allowed cryptographic primitives. The protocol makes no allowance for any sort of 'downgrades' or algo substitution during negotiation. The 'negotiation', if you can even call it that, is precisely: (client proposes a KEX, session cipher alg and hash) -- (server accepts or refuses and drops connection). If the server admin wishes, xsd (server) can accept any supported configuration, or a subset, or exactly one. +xs operates via the philosophy that **it is the server admin's prerogitive to configure local policy wrt. allowed cryptographic primitives**. The connection protocol makes no allowance for any sort of 'downgrades' or algo substitution during negotiation; there is no 'fallback' mode or two-way negotiation of what primitives to use, which would open the possibility of downgrade attacks. Unlike `ssh`, the server does not offer to clients a list of supported algorithms; the client can only offer a single configuration to the server, which it simply accepts or rejects without comment to the client. -The connection negotiation allows no accidental or implied 'sliding' between one configuration and another -- there is no 'fallback' mode or two-way negotiation of what primitives to use (which would open the possibility of downgrade attacks). Unlike `ssh`, the server does not offer to clients a list of supported algos; the client can only offer a single configuration to the server, which it simply accepts or rejects without comment to the client. - -Currently, absent a specific whitelist of algs to allow, the server allows 'all' combinations as listed above to be proposed by clients (but again, only one may be proposed during a connect attempt). If the admin wishes to restrict the accepted algorithms, they may use the `-aK`, `-aC` and `-aH` options when launching the server to define a restricting whitelist. Perhaps in future releases the default will be to accept *no* algs and such a whitelist shall be required. +In all releases to date, absent a specific whitelist of algs to allow, the server allows 'all' combinations of the above cryptographic primitives to be proposed by clients (but again, **only one** combination is proposed by the client in a single connect attempt). If the admin wishes to restrict the accepted algorithms now or at any future time, they may use the `-aK`, `-aC` and `-aH` options when launching the server to define a whitelist which excludes certain primitives. In future releases the default may be changed to accept *no* algs and such a whitelist shall be required. This will have no effect on the connection protocol itself. +*** ### Conn From 6e06c81941468a0746b545ed4e613e029f0fdbe2 Mon Sep 17 00:00:00 2001 From: Russtopia Date: Wed, 3 Nov 2021 19:54:20 -0700 Subject: [PATCH 20/94] Updated links to Yawning-authored algs (kyber, newhope) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3da43ef..2c1b524 100644 --- a/README.md +++ b/README.md @@ -30,8 +30,8 @@ Currently supported exchanges are: * The HerraduraKEx key exchange algorithm first released at [Omar Elejandro Herrera Reyna's HerraduraKEx project](http://github.com/Caume/HerraduraKEx); -* The KYBER IND-CCA-2 secure key encapsulation mechanism, [pq-crystals Kyber](https://pq-crystals.org/kyber/) :: [Yawning/kyber golang implementation](https://git.schwanenlied.me/yawning/kyber) -* The NEWHOPE algorithm [newhopecrypto.org](https://www.newhopecrypto.org/) :: [Yawning/go-newhope golang implementation](https://git.schwanenlied.me/yawning/newhope) +* The KYBER IND-CCA-2 secure key encapsulation mechanism, [pq-crystals Kyber](https://pq-crystals.org/kyber/) :: [Yawning/kyber golang implementation](https://gitlab.com/yawning/kyber) +* The NEWHOPE algorithm [newhopecrypto.org](https://www.newhopecrypto.org/) :: [Yawning/newhope golang implementation](https://gitlab.com/yawning/newhope) * The FrodoKEM algorithm [frodokem.org](https://frodokem.org/) :: Go version by [Eduardo E. S. Riccardi](https://github.com/kuking/go-frodokem) Currently supported session algorithms: From db8697aa355264c0c10ccc8d315943794378efe5 Mon Sep 17 00:00:00 2001 From: Russtopia Date: Wed, 3 Nov 2021 19:58:40 -0700 Subject: [PATCH 21/94] Updated links to Yawning-authored algs (kyber, newhope) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2c1b524..716a713 100644 --- a/README.md +++ b/README.md @@ -95,8 +95,8 @@ As of this time (Oct 2018) Kyber is one of the candidate algorithms submitted to * [github.com/kr/pty](http://github.com/kr/pty) //unix pty control (server pty connections) * [github.com/jameskeane/bcrypt](http://github.com/jameskeane/bcrypt) //password storage/auth * [blitter.com/go/goutmp](https://gogs.blitter.com/RLabs/goutmp) // wtmp/lastlog C bindings for user accounting -* [https://git.schwanenlied.me/yawning/kyber](https://git.schwanenlied.me/yawning/kyber) // golang Kyber KEM -* [https://git.schwanenlied.me/yawning/newhope](https://git.schwanenlied.me/yawning/newhope) // golang NEWHOPE,NEWHOPE-SIMPLE KEX +* [https://gitlab.com/yawning/kyber](https://gogs.blitter.com/RLabs/kyber) // golang Kyber KEM +* [https://gitlab.com/yawning/kyber](https://gogs.blitter.com/RLabs/newhope) // golang NEWHOPE,NEWHOPE-SIMPLE KEX * [blitter.com/go/mtwist](https://gogs.blitter.com/RLabs/mtwist) // 64-bit Mersenne Twister PRNG * [blitter.com/go/cryptmt](https://gogs.blitter.com/RLabs/cryptmt) // CryptMTv1 stream cipher From 7002f87477647f07c8db0b7dbe0c0b4349c31d4a Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Fri, 12 Nov 2021 20:39:44 -0800 Subject: [PATCH 22/94] added hopscotch cipher --- go.mod | 1 + go.sum | 2 ++ xs/xs.go | 2 +- xsnet/chan.go | 4 ++++ xsnet/consts.go | 1 + xsnet/net.go | 8 +++++++- 6 files changed, 16 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 4cfe086..3872ef3 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( blitter.com/go/cryptmt v1.0.2 blitter.com/go/goutmp v1.0.5 blitter.com/go/herradurakex v1.0.0 + blitter.com/go/hopscotch v0.0.0-20211113042251-b8a306eea4dc blitter.com/go/kyber v0.0.0-20200130200857-6f2021cb88d9 blitter.com/go/mtwist v1.0.1 // indirect blitter.com/go/newhope v0.0.0-20200130200750-192fc08a8aae diff --git a/go.sum b/go.sum index b0bb452..f8fc436 100644 --- a/go.sum +++ b/go.sum @@ -6,6 +6,8 @@ blitter.com/go/goutmp v1.0.5 h1:isP6bxSs1O06Oy7wB8u4y5SgLr22txfjg/gjG4qn0Og= blitter.com/go/goutmp v1.0.5/go.mod h1:gtlbjC8xGzMk/Cf0BpnVltSa3awOqJ+B5WAxVptTMxk= blitter.com/go/herradurakex v1.0.0 h1:6XaxY+JLT1HUWPF0gYJnjX3pVjrw4YhYZEzZ1U0wkyc= blitter.com/go/herradurakex v1.0.0/go.mod h1:m3+vYZX+2dDjdo+n/HDnXEYJX9pwmNeQLgAfJM8mtxw= +blitter.com/go/hopscotch v0.0.0-20211113042251-b8a306eea4dc h1:IS+jxdKSdlqp6TWG3yMoBde/cctBEMwMDg588JHxgTE= +blitter.com/go/hopscotch v0.0.0-20211113042251-b8a306eea4dc/go.mod h1:9Da1oy0t9aUw3wviba+2mP1inbLGbDuCKAO3mmGQha4= blitter.com/go/kyber v0.0.0-20200130200857-6f2021cb88d9 h1:D45AnrNphtvczBXRp5JQicZRTgaK/Is5bgPDDvRKhTc= blitter.com/go/kyber v0.0.0-20200130200857-6f2021cb88d9/go.mod h1:SK6QfGG72lIfKW1Td0wH7f0wwN5nSIhV3K+wvzGNjrw= blitter.com/go/mtwist v1.0.1 h1:PxmoWexfMpLmc8neHP/PcRc3s17ct7iz4d5W/qJVt04= diff --git a/xs/xs.go b/xs/xs.go index 2247f77..5a1ab51 100755 --- a/xs/xs.go +++ b/xs/xs.go @@ -710,7 +710,7 @@ func main() { flag.BoolVar(&vopt, "v", false, "show version") flag.BoolVar(&dbg, "d", false, "debug logging") - flag.StringVar(&cipherAlg, "c", "C_AES_256", "session `cipher` [C_AES_256 | C_TWOFISH_128 | C_BLOWFISH_64 | C_CRYPTMT1 | C_CHACHA20_12]") + flag.StringVar(&cipherAlg, "c", "C_AES_256", "session `cipher` [C_AES_256 | C_TWOFISH_128 | C_BLOWFISH_64 | C_CRYPTMT1 | C_CHACHA20_12 | C_HOPSCOTCH]") flag.StringVar(&hmacAlg, "m", "H_SHA256", "session `HMAC` [H_SHA256 | H_SHA512]") flag.StringVar(&kexAlg, "k", "KEX_HERRADURA512", "KEx `alg` [KEX_HERRADURA{256/512/1024/2048} | KEX_KYBER{512/768/1024} | KEX_NEWHOPE | KEX_NEWHOPE_SIMPLE | KEX_FRODOKEM_{1344|976}{AES|SHAKE}]") flag.StringVar(&kcpMode, "K", "unused", "KCP `alg`, one of [KCP_NONE | KCP_AES | KCP_BLOWFISH | KCP_CAST5 | KCP_SM4 | KCP_SALSA20 | KCP_SIMPLEXOR | KCP_TEA | KCP_3DES | KCP_TWOFISH | KCP_XTEA] to use KCP (github.com/xtaci/kcp-go) reliable UDP instead of TCP") diff --git a/xsnet/chan.go b/xsnet/chan.go index d6b2924..819083d 100644 --- a/xsnet/chan.go +++ b/xsnet/chan.go @@ -21,6 +21,7 @@ import ( "log" "blitter.com/go/cryptmt" + "blitter.com/go/hopscotch" "github.com/aead/chacha20/chacha" "golang.org/x/crypto/blowfish" "golang.org/x/crypto/twofish" @@ -105,6 +106,9 @@ func (hc *Conn) getStream(keymat []byte) (rc cipher.Stream, mc hash.Hash, err er case CAlgCryptMT1: rc = cryptmt.New(nil, nil, keymat) log.Printf("[cipher CRYPTMT1 (%d)]\n", copts) + case CAlgHopscotch: + rc = hopscotch.New(nil, nil, 4, keymat) + log.Printf("[cipher HOPSCOTCH (%d)]\n", copts) case CAlgChaCha20_12: keymat = expandKeyMat(keymat, chacha.KeySize) key = keymat[0:chacha.KeySize] diff --git a/xsnet/consts.go b/xsnet/consts.go index ff372ed..30833a2 100644 --- a/xsnet/consts.go +++ b/xsnet/consts.go @@ -107,6 +107,7 @@ const ( CAlgBlowfish64 // golang.org/x/crypto/blowfish CAlgCryptMT1 //cryptmt using mtwist64 CAlgChaCha20_12 + CAlgHopscotch CAlgNoneDisallowed ) diff --git a/xsnet/net.go b/xsnet/net.go index 387c35d..45191b7 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -155,6 +155,8 @@ func (c *CSCipherAlg) String() string { return "C_BLOWFISH_64" case CAlgCryptMT1: return "C_CRYPTMT1" + case CAlgHopscotch: + return "C_HOPSCOTCH" case CAlgChaCha20_12: return "C_CHACHA20_12" default: @@ -320,7 +322,7 @@ func _new(kexAlg KEXAlg, conn *net.Conn) (hc *Conn, e error) { // // Session (symmetric) crypto // -// C_AES_256 C_TWOFISH_128 C_BLOWFISH_128 C_CRYPTMT1 C_CHACHA20_12 +// C_AES_256 C_TWOFISH_128 C_BLOWFISH_128 C_CRYPTMT1 C_CHACHA20_12 C_HOPSCOTCH // // Session HMACs // @@ -344,6 +346,10 @@ func (hc *Conn) applyConnExtensions(extensions ...string) { log.Println("[extension arg = C_CRYPTMT1]") hc.cipheropts &= (0xFFFFFF00) hc.cipheropts |= CAlgCryptMT1 + case "C_HOPSCOTCH": + log.Println("[extension arg = C_HOPSCOTCH]") + hc.cipheropts &= (0xFFFFFF00) + hc.cipheropts |= CAlgHopscotch case "C_CHACHA20_12": log.Println("[extension arg = C_CHACHA20_12]") hc.cipheropts &= (0xFFFFFF00) From 129dce4b0863e0e8db7f47743d67fbd557856a14 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Fri, 12 Nov 2021 20:39:44 -0800 Subject: [PATCH 23/94] added hopscotch cipher --- go.mod | 1 + go.sum | 2 ++ xs/xs.go | 2 +- xsnet/chan.go | 4 ++++ xsnet/consts.go | 1 + xsnet/net.go | 8 +++++++- 6 files changed, 16 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 4cfe086..3872ef3 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( blitter.com/go/cryptmt v1.0.2 blitter.com/go/goutmp v1.0.5 blitter.com/go/herradurakex v1.0.0 + blitter.com/go/hopscotch v0.0.0-20211113042251-b8a306eea4dc blitter.com/go/kyber v0.0.0-20200130200857-6f2021cb88d9 blitter.com/go/mtwist v1.0.1 // indirect blitter.com/go/newhope v0.0.0-20200130200750-192fc08a8aae diff --git a/go.sum b/go.sum index b0bb452..f8fc436 100644 --- a/go.sum +++ b/go.sum @@ -6,6 +6,8 @@ blitter.com/go/goutmp v1.0.5 h1:isP6bxSs1O06Oy7wB8u4y5SgLr22txfjg/gjG4qn0Og= blitter.com/go/goutmp v1.0.5/go.mod h1:gtlbjC8xGzMk/Cf0BpnVltSa3awOqJ+B5WAxVptTMxk= blitter.com/go/herradurakex v1.0.0 h1:6XaxY+JLT1HUWPF0gYJnjX3pVjrw4YhYZEzZ1U0wkyc= blitter.com/go/herradurakex v1.0.0/go.mod h1:m3+vYZX+2dDjdo+n/HDnXEYJX9pwmNeQLgAfJM8mtxw= +blitter.com/go/hopscotch v0.0.0-20211113042251-b8a306eea4dc h1:IS+jxdKSdlqp6TWG3yMoBde/cctBEMwMDg588JHxgTE= +blitter.com/go/hopscotch v0.0.0-20211113042251-b8a306eea4dc/go.mod h1:9Da1oy0t9aUw3wviba+2mP1inbLGbDuCKAO3mmGQha4= blitter.com/go/kyber v0.0.0-20200130200857-6f2021cb88d9 h1:D45AnrNphtvczBXRp5JQicZRTgaK/Is5bgPDDvRKhTc= blitter.com/go/kyber v0.0.0-20200130200857-6f2021cb88d9/go.mod h1:SK6QfGG72lIfKW1Td0wH7f0wwN5nSIhV3K+wvzGNjrw= blitter.com/go/mtwist v1.0.1 h1:PxmoWexfMpLmc8neHP/PcRc3s17ct7iz4d5W/qJVt04= diff --git a/xs/xs.go b/xs/xs.go index 2247f77..5a1ab51 100755 --- a/xs/xs.go +++ b/xs/xs.go @@ -710,7 +710,7 @@ func main() { flag.BoolVar(&vopt, "v", false, "show version") flag.BoolVar(&dbg, "d", false, "debug logging") - flag.StringVar(&cipherAlg, "c", "C_AES_256", "session `cipher` [C_AES_256 | C_TWOFISH_128 | C_BLOWFISH_64 | C_CRYPTMT1 | C_CHACHA20_12]") + flag.StringVar(&cipherAlg, "c", "C_AES_256", "session `cipher` [C_AES_256 | C_TWOFISH_128 | C_BLOWFISH_64 | C_CRYPTMT1 | C_CHACHA20_12 | C_HOPSCOTCH]") flag.StringVar(&hmacAlg, "m", "H_SHA256", "session `HMAC` [H_SHA256 | H_SHA512]") flag.StringVar(&kexAlg, "k", "KEX_HERRADURA512", "KEx `alg` [KEX_HERRADURA{256/512/1024/2048} | KEX_KYBER{512/768/1024} | KEX_NEWHOPE | KEX_NEWHOPE_SIMPLE | KEX_FRODOKEM_{1344|976}{AES|SHAKE}]") flag.StringVar(&kcpMode, "K", "unused", "KCP `alg`, one of [KCP_NONE | KCP_AES | KCP_BLOWFISH | KCP_CAST5 | KCP_SM4 | KCP_SALSA20 | KCP_SIMPLEXOR | KCP_TEA | KCP_3DES | KCP_TWOFISH | KCP_XTEA] to use KCP (github.com/xtaci/kcp-go) reliable UDP instead of TCP") diff --git a/xsnet/chan.go b/xsnet/chan.go index d6b2924..819083d 100644 --- a/xsnet/chan.go +++ b/xsnet/chan.go @@ -21,6 +21,7 @@ import ( "log" "blitter.com/go/cryptmt" + "blitter.com/go/hopscotch" "github.com/aead/chacha20/chacha" "golang.org/x/crypto/blowfish" "golang.org/x/crypto/twofish" @@ -105,6 +106,9 @@ func (hc *Conn) getStream(keymat []byte) (rc cipher.Stream, mc hash.Hash, err er case CAlgCryptMT1: rc = cryptmt.New(nil, nil, keymat) log.Printf("[cipher CRYPTMT1 (%d)]\n", copts) + case CAlgHopscotch: + rc = hopscotch.New(nil, nil, 4, keymat) + log.Printf("[cipher HOPSCOTCH (%d)]\n", copts) case CAlgChaCha20_12: keymat = expandKeyMat(keymat, chacha.KeySize) key = keymat[0:chacha.KeySize] diff --git a/xsnet/consts.go b/xsnet/consts.go index ff372ed..30833a2 100644 --- a/xsnet/consts.go +++ b/xsnet/consts.go @@ -107,6 +107,7 @@ const ( CAlgBlowfish64 // golang.org/x/crypto/blowfish CAlgCryptMT1 //cryptmt using mtwist64 CAlgChaCha20_12 + CAlgHopscotch CAlgNoneDisallowed ) diff --git a/xsnet/net.go b/xsnet/net.go index 387c35d..45191b7 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -155,6 +155,8 @@ func (c *CSCipherAlg) String() string { return "C_BLOWFISH_64" case CAlgCryptMT1: return "C_CRYPTMT1" + case CAlgHopscotch: + return "C_HOPSCOTCH" case CAlgChaCha20_12: return "C_CHACHA20_12" default: @@ -320,7 +322,7 @@ func _new(kexAlg KEXAlg, conn *net.Conn) (hc *Conn, e error) { // // Session (symmetric) crypto // -// C_AES_256 C_TWOFISH_128 C_BLOWFISH_128 C_CRYPTMT1 C_CHACHA20_12 +// C_AES_256 C_TWOFISH_128 C_BLOWFISH_128 C_CRYPTMT1 C_CHACHA20_12 C_HOPSCOTCH // // Session HMACs // @@ -344,6 +346,10 @@ func (hc *Conn) applyConnExtensions(extensions ...string) { log.Println("[extension arg = C_CRYPTMT1]") hc.cipheropts &= (0xFFFFFF00) hc.cipheropts |= CAlgCryptMT1 + case "C_HOPSCOTCH": + log.Println("[extension arg = C_HOPSCOTCH]") + hc.cipheropts &= (0xFFFFFF00) + hc.cipheropts |= CAlgHopscotch case "C_CHACHA20_12": log.Println("[extension arg = C_CHACHA20_12]") hc.cipheropts &= (0xFFFFFF00) From cfc9ab8590d098ed8b3ea0a59e0581a1367267bc Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sun, 14 Nov 2021 21:17:56 -0800 Subject: [PATCH 24/94] Fixed error in processing of allowed HMAC algs. xsd: allowed algs default to none if unspecified. --- xsd/xsd.go | 466 +++++++++++++++++++++++++++------------------------ xsnet/net.go | 19 +-- 2 files changed, 254 insertions(+), 231 deletions(-) diff --git a/xsd/xsd.go b/xsd/xsd.go index 1e9b15e..5b931c3 100755 --- a/xsd/xsd.go +++ b/xsd/xsd.go @@ -439,9 +439,9 @@ var ( aHMACAlgs allowedHMACAlgs ) -type allowedKEXAlgs []string // TODO -type allowedCipherAlgs []string // TODO -type allowedHMACAlgs []string // TODO +type allowedKEXAlgs []string +type allowedCipherAlgs []string +type allowedHMACAlgs []string func (a allowedKEXAlgs) allowed(k xsnet.KEXAlg) bool { for i := 0; i < len(a); i++ { @@ -527,9 +527,33 @@ func main() { flag.BoolVar(&useSystemPasswd, "s", true, "use system shadow passwds") flag.BoolVar(&dbg, "d", false, "debug logging") - flag.Var(&aKEXAlgs, "aK", `List of allowed KEX algs (eg. 'KEXAlgA KEXAlgB ... KEXAlgN') (default allow all)`) - flag.Var(&aCipherAlgs, "aC", `List of allowed ciphers (eg. 'CipherAlgA CipherAlgB ... CipherAlgN') (default allow all)`) - flag.Var(&aHMACAlgs, "aH", `List of allowed HMACs (eg. 'HMACAlgA HMACAlgB ... HMACAlgN') (default allow all)`) + flag.Var(&aKEXAlgs, "aK", `Allowed KEX algs (eg. '-aK KEXAlgA -aK KEXAlgB ...') (default: none) + KEX_all + KEX_HERRADURA256 + KEX_HERRADURA512 + KEX_HERRADURA1024 + KEX_HERRADURA2048 + KEX_KYBER512 + KEX_KYBER768 + KEX_KYBER1024 + KEX_NEWHOPE + KEX_NEWHOPE_SIMPLE + KEX_FRODOKEM_1344AES + KEX_FRODOKEM_1344SHAKE + KEX_FRODOKEM_976AES + KEX_FRODOKEM_976SHAKE`) + flag.Var(&aCipherAlgs, "aC", `Allowed ciphers (eg. '-aC CAlgA -aC CAlgB ...') (default: none) + C_all + C_AES_256 + C_TWOFISH_128 + C_BLOWFISH_64 + C_CRYPTMT1 + C_HOPSCOTCH + C_CHACHA20_12`) + flag.Var(&aHMACAlgs, "aH", `Allowed HMACs (eg. '-aH HMACAlgA -aH HMACAlgB ...') (default: none) + H_all + H_SHA256 + H_SHA512`) flag.Parse() @@ -566,17 +590,17 @@ func main() { // Set up allowed algs, if specified (default allow all) if len(aKEXAlgs) == 0 { - aKEXAlgs = []string{"KEX_all"} + aKEXAlgs = []string{"none"} } logger.LogNotice(fmt.Sprintf("Allowed KEXAlgs: %v\n", aKEXAlgs)) // nolint: gosec,errcheck if len(aCipherAlgs) == 0 { - aCipherAlgs = []string{"C_all"} + aCipherAlgs = []string{"none"} } logger.LogNotice(fmt.Sprintf("Allowed CipherAlgs: %v\n", aCipherAlgs)) // nolint: gosec,errcheck if len(aHMACAlgs) == 0 { - aHMACAlgs = []string{"H_all"} + aHMACAlgs = []string{"none"} } logger.LogNotice(fmt.Sprintf("Allowed HMACAlgs: %v\n", aHMACAlgs)) // nolint: gosec,errcheck @@ -620,233 +644,235 @@ func main() { conn, err := l.Accept() if err != nil { log.Printf("Accept() got error(%v), hanging up.\n", err) - } else if !aKEXAlgs.allowed(conn.KEX()) { - log.Printf("Accept() rejected for banned KEX alg %d, hanging up.\n", conn.KEX()) - conn.SetStatus(xsnet.CSEKEXAlgDenied) - conn.Close() - } else if !aCipherAlgs.allowed(conn.CAlg()) { - log.Printf("Accept() rejected for banned Cipher alg %d, hanging up.\n", conn.CAlg()) - conn.SetStatus(xsnet.CSECipherAlgDenied) - conn.Close() - } else if !aHMACAlgs.allowed(conn.HAlg()) { - log.Printf("Accept() rejected for banned HMAC alg %d, hanging up.\n", conn.HAlg()) - conn.SetStatus(xsnet.CSEHMACAlgDenied) - conn.Close() } else { - log.Println("Accepted client") + if !aKEXAlgs.allowed(conn.KEX()) { + log.Printf("Accept() rejected for banned KEX alg %d, hanging up.\n", conn.KEX()) + conn.SetStatus(xsnet.CSEKEXAlgDenied) + conn.Close() + } else if !aCipherAlgs.allowed(conn.CAlg()) { + log.Printf("Accept() rejected for banned Cipher alg %d, hanging up.\n", conn.CAlg()) + conn.SetStatus(xsnet.CSECipherAlgDenied) + conn.Close() + } else if !aHMACAlgs.allowed(conn.HAlg()) { + log.Printf("Accept() rejected for banned HMAC alg %d, hanging up.\n", conn.HAlg()) + conn.SetStatus(xsnet.CSEHMACAlgDenied) + conn.Close() + } else { + log.Println("Accepted client") - // Set up chaffing to client - // Will only start when runShellAs() is called - // after stdin/stdout are hooked up - conn.SetupChaff(chaffFreqMin, chaffFreqMax, chaffBytesMax) // configure server->client chaffing + // Set up chaffing to client + // Will only start when runShellAs() is called + // after stdin/stdout are hooked up + conn.SetupChaff(chaffFreqMin, chaffFreqMax, chaffBytesMax) // configure server->client chaffing - // Handle the connection in a new goroutine. - // The loop then returns to accepting, so that - // multiple connections may be served concurrently. - go func(hc *xsnet.Conn) (e error) { - defer hc.Close() // nolint: errcheck + // Handle the connection in a new goroutine. + // The loop then returns to accepting, so that + // multiple connections may be served concurrently. + go func(hc *xsnet.Conn) (e error) { + defer hc.Close() // nolint: errcheck - // Start login timeout here and disconnect if user/pass phase stalls - loginTimeout := time.AfterFunc(30*time.Second, func() { - logger.LogNotice(fmt.Sprintln("Login timed out")) // nolint: errcheck,gosec - hc.Write([]byte{0}) // nolint: gosec,errcheck - hc.Close() - }) + // Start login timeout here and disconnect if user/pass phase stalls + loginTimeout := time.AfterFunc(30*time.Second, func() { + logger.LogNotice(fmt.Sprintln("Login timed out")) // nolint: errcheck,gosec + hc.Write([]byte{0}) // nolint: gosec,errcheck + hc.Close() + }) - //We use io.ReadFull() here to guarantee we consume - //just the data we want for the xs.Session, and no more. - //Otherwise data will be sitting in the channel that isn't - //passed down to the command handlers. - var rec xs.Session - var len1, len2, len3, len4, len5, len6 uint32 + //We use io.ReadFull() here to guarantee we consume + //just the data we want for the xs.Session, and no more. + //Otherwise data will be sitting in the channel that isn't + //passed down to the command handlers. + var rec xs.Session + var len1, len2, len3, len4, len5, len6 uint32 - n, err := fmt.Fscanf(hc, "%d %d %d %d %d %d\n", &len1, &len2, &len3, &len4, &len5, &len6) - log.Printf("xs.Session read:%d %d %d %d %d %d\n", len1, len2, len3, len4, len5, len6) + n, err := fmt.Fscanf(hc, "%d %d %d %d %d %d\n", &len1, &len2, &len3, &len4, &len5, &len6) + log.Printf("xs.Session read:%d %d %d %d %d %d\n", len1, len2, len3, len4, len5, len6) - if err != nil || n < 6 { - log.Println("[Bad xs.Session fmt]") - return err - } - - tmp := make([]byte, len1) - _, err = io.ReadFull(hc, tmp) - if err != nil { - log.Println("[Bad xs.Session.Op]") - return err - } - rec.SetOp(tmp) - - tmp = make([]byte, len2) - _, err = io.ReadFull(hc, tmp) - if err != nil { - log.Println("[Bad xs.Session.Who]") - return err - } - rec.SetWho(tmp) - - tmp = make([]byte, len3) - _, err = io.ReadFull(hc, tmp) - if err != nil { - log.Println("[Bad xs.Session.ConnHost]") - return err - } - rec.SetConnHost(tmp) - - tmp = make([]byte, len4) - _, err = io.ReadFull(hc, tmp) - if err != nil { - log.Println("[Bad xs.Session.TermType]") - return err - } - rec.SetTermType(tmp) - - tmp = make([]byte, len5) - _, err = io.ReadFull(hc, tmp) - if err != nil { - log.Println("[Bad xs.Session.Cmd]") - return err - } - rec.SetCmd(tmp) - - tmp = make([]byte, len6) - _, err = io.ReadFull(hc, tmp) - if err != nil { - log.Println("[Bad xs.Session.AuthCookie]") - return err - } - rec.SetAuthCookie(tmp) - - log.Printf("[xs.Session: op:%c who:%s connhost:%s cmd:%s auth:****]\n", - rec.Op()[0], string(rec.Who()), string(rec.ConnHost()), string(rec.Cmd())) - - var valid bool - var allowedCmds string // Currently unused - if xs.AuthUserByToken(xs.NewAuthCtx(), string(rec.Who()), string(rec.ConnHost()), string(rec.AuthCookie(true))) { - valid = true - } else { - if useSystemPasswd { - //var passErr error - valid, _ /*passErr*/ = xs.VerifyPass(xs.NewAuthCtx(), string(rec.Who()), string(rec.AuthCookie(true))) - } else { - valid, allowedCmds = xs.AuthUserByPasswd(xs.NewAuthCtx(), string(rec.Who()), string(rec.AuthCookie(true)), "/etc/xs.passwd") + if err != nil || n < 6 { + log.Println("[Bad xs.Session fmt]") + return err } - } - _ = loginTimeout.Stop() - // Security scrub - rec.ClearAuthCookie() - - // Tell client if auth was valid - if valid { - hc.Write([]byte{1}) // nolint: gosec,errcheck - } else { - logger.LogNotice(fmt.Sprintln("Invalid user", string(rec.Who()))) // nolint: errcheck,gosec - hc.Write([]byte{0}) // nolint: gosec,errcheck - return - } - - log.Printf("[allowedCmds:%s]\n", allowedCmds) - - if rec.Op()[0] == 'A' { - // Generate automated login token - addr := hc.RemoteAddr() - hname := goutmp.GetHost(addr.String()) - logger.LogNotice(fmt.Sprintf("[Generating autologin token for [%s@%s]]\n", rec.Who(), hname)) // nolint: gosec,errcheck - token := GenAuthToken(string(rec.Who()), string(rec.ConnHost())) - tokenCmd := fmt.Sprintf("echo \"%s\" | tee -a ~/.xs_id", token) - cmdStatus, runErr := runShellAs(string(rec.Who()), hname, string(rec.TermType()), tokenCmd, false, hc, chaffEnabled) - // Returned hopefully via an EOF or exit/logout; - // Clear current op so user can enter next, or EOF - rec.SetOp([]byte{0}) - if runErr != nil { - logger.LogErr(fmt.Sprintf("[Error generating autologin token for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck - } else { - log.Printf("[Autologin token generation completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus) - hc.SetStatus(xsnet.CSOType(cmdStatus)) + tmp := make([]byte, len1) + _, err = io.ReadFull(hc, tmp) + if err != nil { + log.Println("[Bad xs.Session.Op]") + return err } - } else if rec.Op()[0] == 'c' { - // Non-interactive command - addr := hc.RemoteAddr() - hname := goutmp.GetHost(addr.String()) - logger.LogNotice(fmt.Sprintf("[Running command for [%s@%s]]\n", rec.Who(), hname)) // nolint: gosec,errcheck - cmdStatus, runErr := runShellAs(string(rec.Who()), hname, string(rec.TermType()), string(rec.Cmd()), false, hc, chaffEnabled) - // Returned hopefully via an EOF or exit/logout; - // Clear current op so user can enter next, or EOF - rec.SetOp([]byte{0}) - if runErr != nil { - logger.LogErr(fmt.Sprintf("[Error spawning cmd for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck - } else { - logger.LogNotice(fmt.Sprintf("[Command completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)) // nolint: gosec,errcheck - hc.SetStatus(xsnet.CSOType(cmdStatus)) - } - } else if rec.Op()[0] == 's' { - // Interactive session - addr := hc.RemoteAddr() - hname := goutmp.GetHost(addr.String()) - logger.LogNotice(fmt.Sprintf("[Running shell for [%s@%s]]\n", rec.Who(), hname)) // nolint: gosec,errcheck + rec.SetOp(tmp) - cmdStatus, runErr := runShellAs(string(rec.Who()), hname, string(rec.TermType()), string(rec.Cmd()), true, hc, chaffEnabled) - // Returned hopefully via an EOF or exit/logout; - // Clear current op so user can enter next, or EOF - rec.SetOp([]byte{0}) - if runErr != nil { - Log.Err(fmt.Sprintf("[Error spawning shell for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck - } else { - logger.LogNotice(fmt.Sprintf("[Shell completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)) // nolint: gosec,errcheck - hc.SetStatus(xsnet.CSOType(cmdStatus)) + tmp = make([]byte, len2) + _, err = io.ReadFull(hc, tmp) + if err != nil { + log.Println("[Bad xs.Session.Who]") + return err } - } else if rec.Op()[0] == 'D' { - // File copy (destination) operation - client copy to server - log.Printf("[Client->Server copy]\n") - addr := hc.RemoteAddr() - hname := goutmp.GetHost(addr.String()) - logger.LogNotice(fmt.Sprintf("[c->s copy for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck - cmdStatus, runErr := runClientToServerCopyAs(string(rec.Who()), string(rec.TermType()), hc, string(rec.Cmd()), chaffEnabled) - // Returned hopefully via an EOF or exit/logout; - // Clear current op so user can enter next, or EOF - rec.SetOp([]byte{0}) - if runErr != nil { - logger.LogErr(fmt.Sprintf("[c->s copy error for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck - } else { - logger.LogNotice(fmt.Sprintf("[c->s copy completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)) // nolint: gosec,errcheck - } - // TODO: Test this with huge files.. see Bug #22 - do we need to - // sync w/sender (client) that we've gotten all data? - hc.SetStatus(xsnet.CSOType(cmdStatus)) + rec.SetWho(tmp) - // Send CSOExitStatus *before* client closes channel - s := make([]byte, 4) - binary.BigEndian.PutUint32(s, cmdStatus) - log.Printf("** cp writing closeStat %d at Close()\n", cmdStatus) - hc.WritePacket(s, xsnet.CSOExitStatus) // nolint: gosec,errcheck - } else if rec.Op()[0] == 'S' { - // File copy (src) operation - server copy to client - log.Printf("[Server->Client copy]\n") - addr := hc.RemoteAddr() - hname := goutmp.GetHost(addr.String()) - logger.LogNotice(fmt.Sprintf("[s->c copy for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck - cmdStatus, runErr := runServerToClientCopyAs(string(rec.Who()), string(rec.TermType()), hc, string(rec.Cmd()), chaffEnabled) - if runErr != nil { - logger.LogErr(fmt.Sprintf("[s->c copy error for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck + tmp = make([]byte, len3) + _, err = io.ReadFull(hc, tmp) + if err != nil { + log.Println("[Bad xs.Session.ConnHost]") + return err + } + rec.SetConnHost(tmp) + + tmp = make([]byte, len4) + _, err = io.ReadFull(hc, tmp) + if err != nil { + log.Println("[Bad xs.Session.TermType]") + return err + } + rec.SetTermType(tmp) + + tmp = make([]byte, len5) + _, err = io.ReadFull(hc, tmp) + if err != nil { + log.Println("[Bad xs.Session.Cmd]") + return err + } + rec.SetCmd(tmp) + + tmp = make([]byte, len6) + _, err = io.ReadFull(hc, tmp) + if err != nil { + log.Println("[Bad xs.Session.AuthCookie]") + return err + } + rec.SetAuthCookie(tmp) + + log.Printf("[xs.Session: op:%c who:%s connhost:%s cmd:%s auth:****]\n", + rec.Op()[0], string(rec.Who()), string(rec.ConnHost()), string(rec.Cmd())) + + var valid bool + var allowedCmds string // Currently unused + if xs.AuthUserByToken(xs.NewAuthCtx(), string(rec.Who()), string(rec.ConnHost()), string(rec.AuthCookie(true))) { + valid = true } else { + if useSystemPasswd { + //var passErr error + valid, _ /*passErr*/ = xs.VerifyPass(xs.NewAuthCtx(), string(rec.Who()), string(rec.AuthCookie(true))) + } else { + valid, allowedCmds = xs.AuthUserByPasswd(xs.NewAuthCtx(), string(rec.Who()), string(rec.AuthCookie(true)), "/etc/xs.passwd") + } + } + + _ = loginTimeout.Stop() + // Security scrub + rec.ClearAuthCookie() + + // Tell client if auth was valid + if valid { + hc.Write([]byte{1}) // nolint: gosec,errcheck + } else { + logger.LogNotice(fmt.Sprintln("Invalid user", string(rec.Who()))) // nolint: errcheck,gosec + hc.Write([]byte{0}) // nolint: gosec,errcheck + return + } + + log.Printf("[allowedCmds:%s]\n", allowedCmds) + + if rec.Op()[0] == 'A' { + // Generate automated login token + addr := hc.RemoteAddr() + hname := goutmp.GetHost(addr.String()) + logger.LogNotice(fmt.Sprintf("[Generating autologin token for [%s@%s]]\n", rec.Who(), hname)) // nolint: gosec,errcheck + token := GenAuthToken(string(rec.Who()), string(rec.ConnHost())) + tokenCmd := fmt.Sprintf("echo \"%s\" | tee -a ~/.xs_id", token) + cmdStatus, runErr := runShellAs(string(rec.Who()), hname, string(rec.TermType()), tokenCmd, false, hc, chaffEnabled) // Returned hopefully via an EOF or exit/logout; - logger.LogNotice(fmt.Sprintf("[s->c copy completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)) // nolint: gosec,errcheck - } - // HACK: Bug #22: (xc) Need to wait for rcvr to get final data - // TODO: Await specific msg from client to inform they have gotten all data from the tarpipe - time.Sleep(time.Duration(900 * time.Millisecond)) // Let rcvr set this on setup? + // Clear current op so user can enter next, or EOF + rec.SetOp([]byte{0}) + if runErr != nil { + logger.LogErr(fmt.Sprintf("[Error generating autologin token for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck + } else { + log.Printf("[Autologin token generation completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus) + hc.SetStatus(xsnet.CSOType(cmdStatus)) + } + } else if rec.Op()[0] == 'c' { + // Non-interactive command + addr := hc.RemoteAddr() + hname := goutmp.GetHost(addr.String()) + logger.LogNotice(fmt.Sprintf("[Running command for [%s@%s]]\n", rec.Who(), hname)) // nolint: gosec,errcheck + cmdStatus, runErr := runShellAs(string(rec.Who()), hname, string(rec.TermType()), string(rec.Cmd()), false, hc, chaffEnabled) + // Returned hopefully via an EOF or exit/logout; + // Clear current op so user can enter next, or EOF + rec.SetOp([]byte{0}) + if runErr != nil { + logger.LogErr(fmt.Sprintf("[Error spawning cmd for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck + } else { + logger.LogNotice(fmt.Sprintf("[Command completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)) // nolint: gosec,errcheck + hc.SetStatus(xsnet.CSOType(cmdStatus)) + } + } else if rec.Op()[0] == 's' { + // Interactive session + addr := hc.RemoteAddr() + hname := goutmp.GetHost(addr.String()) + logger.LogNotice(fmt.Sprintf("[Running shell for [%s@%s]]\n", rec.Who(), hname)) // nolint: gosec,errcheck - // Clear current op so user can enter next, or EOF - rec.SetOp([]byte{0}) - hc.SetStatus(xsnet.CSOType(cmdStatus)) - //fmt.Println("Waiting for EOF from other end.") - //_, _ = hc.Read(nil /*ackByte*/) - //fmt.Println("Got remote end ack.") - } else { - logger.LogErr(fmt.Sprintln("[Bad xs.Session]")) // nolint: gosec,errcheck - } - return - }(&conn) // nolint: errcheck + cmdStatus, runErr := runShellAs(string(rec.Who()), hname, string(rec.TermType()), string(rec.Cmd()), true, hc, chaffEnabled) + // Returned hopefully via an EOF or exit/logout; + // Clear current op so user can enter next, or EOF + rec.SetOp([]byte{0}) + if runErr != nil { + Log.Err(fmt.Sprintf("[Error spawning shell for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck + } else { + logger.LogNotice(fmt.Sprintf("[Shell completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)) // nolint: gosec,errcheck + hc.SetStatus(xsnet.CSOType(cmdStatus)) + } + } else if rec.Op()[0] == 'D' { + // File copy (destination) operation - client copy to server + log.Printf("[Client->Server copy]\n") + addr := hc.RemoteAddr() + hname := goutmp.GetHost(addr.String()) + logger.LogNotice(fmt.Sprintf("[c->s copy for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck + cmdStatus, runErr := runClientToServerCopyAs(string(rec.Who()), string(rec.TermType()), hc, string(rec.Cmd()), chaffEnabled) + // Returned hopefully via an EOF or exit/logout; + // Clear current op so user can enter next, or EOF + rec.SetOp([]byte{0}) + if runErr != nil { + logger.LogErr(fmt.Sprintf("[c->s copy error for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck + } else { + logger.LogNotice(fmt.Sprintf("[c->s copy completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)) // nolint: gosec,errcheck + } + // TODO: Test this with huge files.. see Bug #22 - do we need to + // sync w/sender (client) that we've gotten all data? + hc.SetStatus(xsnet.CSOType(cmdStatus)) + + // Send CSOExitStatus *before* client closes channel + s := make([]byte, 4) + binary.BigEndian.PutUint32(s, cmdStatus) + log.Printf("** cp writing closeStat %d at Close()\n", cmdStatus) + hc.WritePacket(s, xsnet.CSOExitStatus) // nolint: gosec,errcheck + } else if rec.Op()[0] == 'S' { + // File copy (src) operation - server copy to client + log.Printf("[Server->Client copy]\n") + addr := hc.RemoteAddr() + hname := goutmp.GetHost(addr.String()) + logger.LogNotice(fmt.Sprintf("[s->c copy for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck + cmdStatus, runErr := runServerToClientCopyAs(string(rec.Who()), string(rec.TermType()), hc, string(rec.Cmd()), chaffEnabled) + if runErr != nil { + logger.LogErr(fmt.Sprintf("[s->c copy error for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck + } else { + // Returned hopefully via an EOF or exit/logout; + logger.LogNotice(fmt.Sprintf("[s->c copy completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)) // nolint: gosec,errcheck + } + // HACK: Bug #22: (xc) Need to wait for rcvr to get final data + // TODO: Await specific msg from client to inform they have gotten all data from the tarpipe + time.Sleep(time.Duration(900 * time.Millisecond)) // Let rcvr set this on setup? + + // Clear current op so user can enter next, or EOF + rec.SetOp([]byte{0}) + hc.SetStatus(xsnet.CSOType(cmdStatus)) + //fmt.Println("Waiting for EOF from other end.") + //_, _ = hc.Read(nil /*ackByte*/) + //fmt.Println("Got remote end ack.") + } else { + logger.LogErr(fmt.Sprintln("[Bad xs.Session]")) // nolint: gosec,errcheck + } + return + }(&conn) // nolint: errcheck + } // algs valid and not blacklisted } // Accept() success } //endfor //logger.LogNotice(fmt.Sprintln("[Exiting]")) // nolint: gosec,errcheck diff --git a/xsnet/net.go b/xsnet/net.go index 45191b7..bfb002f 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -25,6 +25,7 @@ package xsnet import ( "bytes" "crypto/cipher" + crand "crypto/rand" "encoding/binary" "encoding/hex" "errors" @@ -39,7 +40,6 @@ import ( "strings" "sync" "time" - crand "crypto/rand" hkex "blitter.com/go/herradurakex" "blitter.com/go/kyber" @@ -169,11 +169,11 @@ func (hc *Conn) HAlg() CSHmacAlg { } func (h *CSHmacAlg) String() string { - switch (*h >> 8) & 0x0FF { + switch *h & 0x0FF { case HmacSHA256: return "H_SHA256" case HmacSHA512: - return "C_SHA512" + return "H_SHA512" default: return "H_ERR_UNK" } @@ -296,7 +296,7 @@ func _new(kexAlg KEXAlg, conn *net.Conn) (hc *Conn, e error) { case KEX_FRODOKEM_976AES: fallthrough case KEX_FRODOKEM_976SHAKE: - log.Printf("[KEx alg %d accepted]\n", kexAlg) + //log.Printf("[KEx alg %d is valid]\n", kexAlg) default: // UNREACHABLE: _getkexalgnum() guarantees a valid KEX value hc.kex = KEX_HERRADURA512 @@ -517,7 +517,7 @@ func NewHopeDialSetup(c io.ReadWriter, hc *Conn) (err error) { if err != nil { panic(err) } - + hc.r, hc.rm, err = hc.getStream(aliceSharedSecret) hc.w, hc.wm, err = hc.getStream(aliceSharedSecret) return @@ -559,7 +559,7 @@ func NewHopeSimpleDialSetup(c io.ReadWriter, hc *Conn) (err error) { if err != nil { panic(err) } - + hc.r, hc.rm, err = hc.getStream(aliceSharedSecret) hc.w, hc.wm, err = hc.getStream(aliceSharedSecret) return @@ -672,7 +672,6 @@ func FrodoKEMAcceptSetup(c *net.Conn, hc *Conn) (err error) { } pubB, secB := kem.Keygen() - // [Alice sends use a public key (na, ea) pubA_bigint := big.NewInt(0) _, err = fmt.Fscanf(*c, "0x%x\n", pubA_bigint) @@ -696,7 +695,7 @@ func FrodoKEMAcceptSetup(c *net.Conn, hc *Conn) (err error) { // (... and send cipher, connection opts) fmt.Fprintf(*c, "0x%x:0x%x\n", hc.cipheropts, hc.opts) - + // Bob, step 3: Create ctBtoA, shareB ctBtoA, shareB, err := kem.Encapsulate(pubA) if err != nil { @@ -1173,10 +1172,8 @@ func (hl *HKExListener) Accept() (hc Conn, err error) { return Conn{}, err } - // Finally, ensure alg proposed by client is allowed by server config - //if hc.kex.String() { log.Println("[hc.Accept successful]") - return + return hc, err } /*---------------------------------------------------------------------*/ From 12b7e525bff176d99125f0aaa754ff2debbb8af0 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Mon, 15 Nov 2021 17:57:01 -0800 Subject: [PATCH 25/94] Help improvements --- xs/xs.go | 30 +++++++++++++++++++++++++++--- xsd/xsd.go | 6 +++--- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/xs/xs.go b/xs/xs.go index 5a1ab51..b63c795 100755 --- a/xs/xs.go +++ b/xs/xs.go @@ -710,9 +710,33 @@ func main() { flag.BoolVar(&vopt, "v", false, "show version") flag.BoolVar(&dbg, "d", false, "debug logging") - flag.StringVar(&cipherAlg, "c", "C_AES_256", "session `cipher` [C_AES_256 | C_TWOFISH_128 | C_BLOWFISH_64 | C_CRYPTMT1 | C_CHACHA20_12 | C_HOPSCOTCH]") - flag.StringVar(&hmacAlg, "m", "H_SHA256", "session `HMAC` [H_SHA256 | H_SHA512]") - flag.StringVar(&kexAlg, "k", "KEX_HERRADURA512", "KEx `alg` [KEX_HERRADURA{256/512/1024/2048} | KEX_KYBER{512/768/1024} | KEX_NEWHOPE | KEX_NEWHOPE_SIMPLE | KEX_FRODOKEM_{1344|976}{AES|SHAKE}]") + flag.StringVar(&cipherAlg, "c", "C_AES_256", "session `cipher`"+` + C_all + C_AES_256 + C_TWOFISH_128 + C_BLOWFISH_64 + C_CRYPTMT1 + C_HOPSCOTCH + C_CHACHA20_12`) + flag.StringVar(&hmacAlg, "m", "H_SHA256", "session `HMAC`"+` + H_all + H_SHA256 + H_SHA512`) + flag.StringVar(&kexAlg, "k", "KEX_HERRADURA512", "KEx `alg`"+` + KEX_all + KEX_HERRADURA256 + KEX_HERRADURA512 + KEX_HERRADURA1024 + KEX_HERRADURA2048 + KEX_KYBER512 + KEX_KYBER768 + KEX_KYBER1024 + KEX_NEWHOPE + KEX_NEWHOPE_SIMPLE + KEX_FRODOKEM_1344AES + KEX_FRODOKEM_1344SHAKE + KEX_FRODOKEM_976AES + KEX_FRODOKEM_976SHAKE`) flag.StringVar(&kcpMode, "K", "unused", "KCP `alg`, one of [KCP_NONE | KCP_AES | KCP_BLOWFISH | KCP_CAST5 | KCP_SM4 | KCP_SALSA20 | KCP_SIMPLEXOR | KCP_TEA | KCP_3DES | KCP_TWOFISH | KCP_XTEA] to use KCP (github.com/xtaci/kcp-go) reliable UDP instead of TCP") flag.UintVar(&port, "p", 2000, "``port") //flag.StringVar(&authCookie, "a", "", "auth cookie") diff --git a/xsd/xsd.go b/xsd/xsd.go index 5b931c3..98e83eb 100755 --- a/xsd/xsd.go +++ b/xsd/xsd.go @@ -527,7 +527,7 @@ func main() { flag.BoolVar(&useSystemPasswd, "s", true, "use system shadow passwds") flag.BoolVar(&dbg, "d", false, "debug logging") - flag.Var(&aKEXAlgs, "aK", `Allowed KEX algs (eg. '-aK KEXAlgA -aK KEXAlgB ...') (default: none) + flag.Var(&aKEXAlgs, "aK", "Allowed KEX `alg`s (eg. '-aK KEXAlgA -aK KEXAlgB ...')" + ` KEX_all KEX_HERRADURA256 KEX_HERRADURA512 @@ -542,7 +542,7 @@ func main() { KEX_FRODOKEM_1344SHAKE KEX_FRODOKEM_976AES KEX_FRODOKEM_976SHAKE`) - flag.Var(&aCipherAlgs, "aC", `Allowed ciphers (eg. '-aC CAlgA -aC CAlgB ...') (default: none) + flag.Var(&aCipherAlgs, "aC", "Allowed `cipher`s (eg. '-aC CAlgA -aC CAlgB ...')" + ` C_all C_AES_256 C_TWOFISH_128 @@ -550,7 +550,7 @@ func main() { C_CRYPTMT1 C_HOPSCOTCH C_CHACHA20_12`) - flag.Var(&aHMACAlgs, "aH", `Allowed HMACs (eg. '-aH HMACAlgA -aH HMACAlgB ...') (default: none) + flag.Var(&aHMACAlgs, "aH", "Allowed `HMAC`s (eg. '-aH HMACAlgA -aH HMACAlgB ...')" + ` H_all H_SHA256 H_SHA512`) From d837bd2583865ebb506206e30e1414893f54a7ad Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Mon, 15 Nov 2021 17:57:01 -0800 Subject: [PATCH 26/94] xsd.initrc fix; help improvements --- xs/xs.go | 30 +++++++++++++++++++++++++++--- xsd.initrc | 4 ++-- xsd/xsd.go | 6 +++--- 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/xs/xs.go b/xs/xs.go index 5a1ab51..b63c795 100755 --- a/xs/xs.go +++ b/xs/xs.go @@ -710,9 +710,33 @@ func main() { flag.BoolVar(&vopt, "v", false, "show version") flag.BoolVar(&dbg, "d", false, "debug logging") - flag.StringVar(&cipherAlg, "c", "C_AES_256", "session `cipher` [C_AES_256 | C_TWOFISH_128 | C_BLOWFISH_64 | C_CRYPTMT1 | C_CHACHA20_12 | C_HOPSCOTCH]") - flag.StringVar(&hmacAlg, "m", "H_SHA256", "session `HMAC` [H_SHA256 | H_SHA512]") - flag.StringVar(&kexAlg, "k", "KEX_HERRADURA512", "KEx `alg` [KEX_HERRADURA{256/512/1024/2048} | KEX_KYBER{512/768/1024} | KEX_NEWHOPE | KEX_NEWHOPE_SIMPLE | KEX_FRODOKEM_{1344|976}{AES|SHAKE}]") + flag.StringVar(&cipherAlg, "c", "C_AES_256", "session `cipher`"+` + C_all + C_AES_256 + C_TWOFISH_128 + C_BLOWFISH_64 + C_CRYPTMT1 + C_HOPSCOTCH + C_CHACHA20_12`) + flag.StringVar(&hmacAlg, "m", "H_SHA256", "session `HMAC`"+` + H_all + H_SHA256 + H_SHA512`) + flag.StringVar(&kexAlg, "k", "KEX_HERRADURA512", "KEx `alg`"+` + KEX_all + KEX_HERRADURA256 + KEX_HERRADURA512 + KEX_HERRADURA1024 + KEX_HERRADURA2048 + KEX_KYBER512 + KEX_KYBER768 + KEX_KYBER1024 + KEX_NEWHOPE + KEX_NEWHOPE_SIMPLE + KEX_FRODOKEM_1344AES + KEX_FRODOKEM_1344SHAKE + KEX_FRODOKEM_976AES + KEX_FRODOKEM_976SHAKE`) flag.StringVar(&kcpMode, "K", "unused", "KCP `alg`, one of [KCP_NONE | KCP_AES | KCP_BLOWFISH | KCP_CAST5 | KCP_SM4 | KCP_SALSA20 | KCP_SIMPLEXOR | KCP_TEA | KCP_3DES | KCP_TWOFISH | KCP_XTEA] to use KCP (github.com/xtaci/kcp-go) reliable UDP instead of TCP") flag.UintVar(&port, "p", 2000, "``port") //flag.StringVar(&authCookie, "a", "", "auth cookie") diff --git a/xsd.initrc b/xsd.initrc index 955dbfd..b291ec6 100755 --- a/xsd.initrc +++ b/xsd.initrc @@ -6,7 +6,7 @@ XSD_USER=root XSD_HOME=/var/run INST_PREFIX=/usr/local COMMAND=$INST_PREFIX/sbin/xsd -ARGS="-L" +ARGS="-L -aK K_all -aC C_all -aH H_all" depend() { need net @@ -28,7 +28,7 @@ start() { -d ${XSD_HOME} \ --make-pidfile --pidfile ${XSD_PIDFILE} \ --start --quiet --background \ - --exec "${COMMAND}" -- "${ARGS}" + --exec "${COMMAND}" -- ${ARGS} eend $? } diff --git a/xsd/xsd.go b/xsd/xsd.go index 5b931c3..98e83eb 100755 --- a/xsd/xsd.go +++ b/xsd/xsd.go @@ -527,7 +527,7 @@ func main() { flag.BoolVar(&useSystemPasswd, "s", true, "use system shadow passwds") flag.BoolVar(&dbg, "d", false, "debug logging") - flag.Var(&aKEXAlgs, "aK", `Allowed KEX algs (eg. '-aK KEXAlgA -aK KEXAlgB ...') (default: none) + flag.Var(&aKEXAlgs, "aK", "Allowed KEX `alg`s (eg. '-aK KEXAlgA -aK KEXAlgB ...')" + ` KEX_all KEX_HERRADURA256 KEX_HERRADURA512 @@ -542,7 +542,7 @@ func main() { KEX_FRODOKEM_1344SHAKE KEX_FRODOKEM_976AES KEX_FRODOKEM_976SHAKE`) - flag.Var(&aCipherAlgs, "aC", `Allowed ciphers (eg. '-aC CAlgA -aC CAlgB ...') (default: none) + flag.Var(&aCipherAlgs, "aC", "Allowed `cipher`s (eg. '-aC CAlgA -aC CAlgB ...')" + ` C_all C_AES_256 C_TWOFISH_128 @@ -550,7 +550,7 @@ func main() { C_CRYPTMT1 C_HOPSCOTCH C_CHACHA20_12`) - flag.Var(&aHMACAlgs, "aH", `Allowed HMACs (eg. '-aH HMACAlgA -aH HMACAlgB ...') (default: none) + flag.Var(&aHMACAlgs, "aH", "Allowed `HMAC`s (eg. '-aH HMACAlgA -aH HMACAlgB ...')" + ` H_all H_SHA256 H_SHA512`) From ca4335df9e00be5b2a273016febd5b02b7fee450 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Mon, 15 Nov 2021 19:25:30 -0800 Subject: [PATCH 27/94] Fixed typo in example xsd.initrc --- xsd.initrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xsd.initrc b/xsd.initrc index b291ec6..dc916a2 100755 --- a/xsd.initrc +++ b/xsd.initrc @@ -6,7 +6,7 @@ XSD_USER=root XSD_HOME=/var/run INST_PREFIX=/usr/local COMMAND=$INST_PREFIX/sbin/xsd -ARGS="-L -aK K_all -aC C_all -aH H_all" +ARGS="-L -aK KEX_all -aC C_all -aH H_all" depend() { need net From 20113653f740767722089f59779c5954c2f4193b Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Mon, 15 Nov 2021 20:35:20 -0800 Subject: [PATCH 28/94] xsd.initrc require admin to set defaults --- xsd.initrc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/xsd.initrc b/xsd.initrc index dc916a2..ee71029 100755 --- a/xsd.initrc +++ b/xsd.initrc @@ -6,7 +6,9 @@ XSD_USER=root XSD_HOME=/var/run INST_PREFIX=/usr/local COMMAND=$INST_PREFIX/sbin/xsd -ARGS="-L -aK KEX_all -aC C_all -aH H_all" +#ARGS="-L -aK KEX_all -aC C_all -aH H_all" +echo "SET ARGS in this script to define allow KEX, cipher and hmac algs" +exit 1 depend() { need net From 9c844938a9f434d4d726c2394f6267adbd55fd7d Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Mon, 15 Nov 2021 20:46:49 -0800 Subject: [PATCH 29/94] Version bump -> v0.9.3 --- Makefile | 2 +- xs/xs.go | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 5754bd5..fc2efd0 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION := 0.9.3-pre +VERSION := 0.9.3 .PHONY: lint vis clean common client server passwd subpkgs install uninstall reinstall ## Tag version of binaries with build info wrt. diff --git a/xs/xs.go b/xs/xs.go index b63c795..1c8314d 100755 --- a/xs/xs.go +++ b/xs/xs.go @@ -711,7 +711,6 @@ func main() { flag.BoolVar(&vopt, "v", false, "show version") flag.BoolVar(&dbg, "d", false, "debug logging") flag.StringVar(&cipherAlg, "c", "C_AES_256", "session `cipher`"+` - C_all C_AES_256 C_TWOFISH_128 C_BLOWFISH_64 @@ -719,11 +718,9 @@ func main() { C_HOPSCOTCH C_CHACHA20_12`) flag.StringVar(&hmacAlg, "m", "H_SHA256", "session `HMAC`"+` - H_all H_SHA256 H_SHA512`) flag.StringVar(&kexAlg, "k", "KEX_HERRADURA512", "KEx `alg`"+` - KEX_all KEX_HERRADURA256 KEX_HERRADURA512 KEX_HERRADURA1024 From 02e379e50d0338bec5ed383f83e403d6759048f5 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Mon, 15 Nov 2021 20:57:29 -0800 Subject: [PATCH 30/94] Updated README.md for v0.9.3 wrt. default accepted algs --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 716a713..e62a3c5 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,9 @@ An interesting question. See [this write-up for a discussion](https://paragonie. xs operates via the philosophy that **it is the server admin's prerogitive to configure local policy wrt. allowed cryptographic primitives**. The connection protocol makes no allowance for any sort of 'downgrades' or algo substitution during negotiation; there is no 'fallback' mode or two-way negotiation of what primitives to use, which would open the possibility of downgrade attacks. Unlike `ssh`, the server does not offer to clients a list of supported algorithms; the client can only offer a single configuration to the server, which it simply accepts or rejects without comment to the client. -In all releases to date, absent a specific whitelist of algs to allow, the server allows 'all' combinations of the above cryptographic primitives to be proposed by clients (but again, **only one** combination is proposed by the client in a single connect attempt). If the admin wishes to restrict the accepted algorithms now or at any future time, they may use the `-aK`, `-aC` and `-aH` options when launching the server to define a whitelist which excludes certain primitives. In future releases the default may be changed to accept *no* algs and such a whitelist shall be required. This will have no effect on the connection protocol itself. +In all releases prior to v0.9.3, absent a specific whitelist of algs to allow, the server allows 'all' combinations of the above cryptographic primitives to be proposed by clients (but again, **only one** combination is proposed by the client in a single connect attempt). If the admin wishes to restrict the accepted algorithms now or at any future time, they may use the `-aK`, `-aC` and `-aH` options when launching the server to define a whitelist which excludes certain primitives. + +As of release v0.9.3, the default when supplying no explicit KEX, cipher or HMAC algorithms to `xsd` results in *no* algs being accepted; so the admin must decide on a specific whitelist of algorithms. *** From 4168b5038bc87475fa9534e40463de7a084074ad Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Mon, 22 Nov 2021 18:38:46 -0800 Subject: [PATCH 31/94] Fixed IV feed into initial HMAC during chan setup --- Makefile | 2 +- xsnet/chan.go | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index fc2efd0..3ab910d 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION := 0.9.3 +VERSION := 0.9.4 .PHONY: lint vis clean common client server passwd subpkgs install uninstall reinstall ## Tag version of binaries with build info wrt. diff --git a/xsnet/chan.go b/xsnet/chan.go index 819083d..6e5a0f3 100644 --- a/xsnet/chan.go +++ b/xsnet/chan.go @@ -105,9 +105,11 @@ func (hc *Conn) getStream(keymat []byte) (rc cipher.Stream, mc hash.Hash, err er log.Printf("[cipher BLOWFISH_64 (%d)]\n", copts) case CAlgCryptMT1: rc = cryptmt.New(nil, nil, keymat) + //NOTE: this alg is not based on block cipher, no IV log.Printf("[cipher CRYPTMT1 (%d)]\n", copts) case CAlgHopscotch: rc = hopscotch.New(nil, nil, 4, keymat) + //NOTE: this alg is not based on block cipher, no IV log.Printf("[cipher HOPSCOTCH (%d)]\n", copts) case CAlgChaCha20_12: keymat = expandKeyMat(keymat, chacha.KeySize) @@ -152,7 +154,7 @@ func (hc *Conn) getStream(keymat []byte) (rc cipher.Stream, mc hash.Hash, err er //os.Exit(1) } - if err != nil { + if err == nil && ivlen > 0 { // Feed the IV into the hmac: all traffic in the connection must // feed its data into the hmac afterwards, so both ends can xor // that with the stream to detect corruption. From 3f6ee1e005db7215037652fd25c1c4a09e8449ea Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sat, 9 Apr 2022 11:49:21 -0700 Subject: [PATCH 32/94] go mod tidy updates --- go.mod | 29 +++++++------ go.sum | 131 +++++++++++++++++++++++++++++++++++++++------------------ 2 files changed, 107 insertions(+), 53 deletions(-) diff --git a/go.mod b/go.mod index 3872ef3..da9c727 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module blitter.com/go/xs -go 1.12 +go 1.17 require ( blitter.com/go/cryptmt v1.0.2 @@ -8,24 +8,29 @@ require ( blitter.com/go/herradurakex v1.0.0 blitter.com/go/hopscotch v0.0.0-20211113042251-b8a306eea4dc blitter.com/go/kyber v0.0.0-20200130200857-6f2021cb88d9 - blitter.com/go/mtwist v1.0.1 // indirect blitter.com/go/newhope v0.0.0-20200130200750-192fc08a8aae github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da - github.com/creack/pty v1.1.11 + github.com/creack/pty v1.1.18 github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f - github.com/klauspost/reedsolomon v1.9.9 // indirect - github.com/kuking/go-frodokem v1.0.1 - github.com/mattn/go-isatty v0.0.12 - github.com/mmcloughlin/avo v0.0.0-20200523190732-4439b6b2c061 // indirect + github.com/kuking/go-frodokem v1.0.2 + github.com/mattn/go-isatty v0.0.14 + github.com/xtaci/kcp-go v5.4.20+incompatible + golang.org/x/crypto v0.0.0-20220408190544-5352b0902921 + golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f + gopkg.in/hlandau/passlib.v1 v1.0.11 +) + +require ( + blitter.com/go/chacha20 v0.0.0-20200130200441-214e4085f54c // indirect + blitter.com/go/mtwist v1.0.1 // indirect + github.com/klauspost/cpuid/v2 v2.0.6 // indirect + github.com/klauspost/reedsolomon v1.9.16 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 // indirect github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b // indirect - github.com/tjfoc/gmsm v1.3.1 // indirect - github.com/xtaci/kcp-go v5.4.20+incompatible + github.com/tjfoc/gmsm v1.4.1 // indirect github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37 // indirect - golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 - golang.org/x/sys v0.0.0-20200523222454-059865788121 + golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 // indirect gopkg.in/hlandau/easymetric.v1 v1.0.0 // indirect gopkg.in/hlandau/measurable.v1 v1.0.1 // indirect - gopkg.in/hlandau/passlib.v1 v1.0.10 ) diff --git a/go.sum b/go.sum index f8fc436..9504714 100644 --- a/go.sum +++ b/go.sum @@ -14,28 +14,50 @@ blitter.com/go/mtwist v1.0.1 h1:PxmoWexfMpLmc8neHP/PcRc3s17ct7iz4d5W/qJVt04= blitter.com/go/mtwist v1.0.1/go.mod h1:aU82Nx8+b1v8oZRNqImfEDzDTPim81rY0ACKAIclV18= blitter.com/go/newhope v0.0.0-20200130200750-192fc08a8aae h1:YBBaCcdYRrI1btsmcMTv1VMPmaSXXz0RwKOTgMJYSRU= blitter.com/go/newhope v0.0.0-20200130200750-192fc08a8aae/go.mod h1:ywoxfDBqInPsqtnxYsmS4SYMJ5D/kNcrFgpvI+Xcun0= +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY= github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA= -github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= +github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f h1:UWGE8Vi+1Agt0lrvnd7UsmvwqWKRzb9byK9iQmsbY0Y= github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f/go.mod h1:u+9Snq0w+ZdYKi8BBoaxnEwWu0fY4Kvu9ByFpM51t1s= -github.com/klauspost/cpuid v1.2.4 h1:EBfaK0SWSwk+fgk6efYFWdzl8MwRWoOO1gkmiaTXPW4= -github.com/klauspost/cpuid v1.2.4/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/reedsolomon v1.9.9 h1:qCL7LZlv17xMixl55nq2/Oa1Y86nfO8EqDfv2GHND54= -github.com/klauspost/reedsolomon v1.9.9/go.mod h1:O7yFFHiQwDR6b2t63KPUpccPtNdp5ADgh1gg4fd12wo= -github.com/kuking/go-frodokem v1.0.1 h1:13bks3u4CPpvUtOLttT+A37j9myV4kLnS7Z3qDiTm4o= -github.com/kuking/go-frodokem v1.0.1/go.mod h1:TzD0W9QnVOcwigeSySEuNZfJaGxWRtFRb7hXe/w/waI= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mmcloughlin/avo v0.0.0-20200523190732-4439b6b2c061 h1:UCU8+cLbbvyxi0sQ9fSeoEhZgvrrD9HKMtX6Gmc1vk8= -github.com/mmcloughlin/avo v0.0.0-20200523190732-4439b6b2c061/go.mod h1:wqKykBG2QzQDJEzvRkcS8x6MiSJkF52hXZsXcjaB3ls= +github.com/klauspost/cpuid/v2 v2.0.6 h1:dQ5ueTiftKxp0gyjKSx5+8BtPWkyQbd95m8Gys/RarI= +github.com/klauspost/cpuid/v2 v2.0.6/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/reedsolomon v1.9.16 h1:mR0AwphBwqFv/I3B9AHtNKvzuowI1vrj8/3UX4XRmHA= +github.com/klauspost/reedsolomon v1.9.16/go.mod h1:eqPAcE7xar5CIzcdfwydOEdcmchAKAP/qs14y4GCBOk= +github.com/kuking/go-frodokem v1.0.2 h1:sxdguENCyr6WnLbJ/cjz0AYCW75H1b+E6zXY2ldZnUU= +github.com/kuking/go-frodokem v1.0.2/go.mod h1:83ZX1kHOd72ouCsvbffCqJIj7Ih83MQTAjH2QbqzLZk= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 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/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -43,54 +65,81 @@ github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 h1:89CEmDvlq/F7S github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161/go.mod h1:wM7WEvslTq+iOEAMDLSzhVuOt5BRZ05WirO+b09GHQU= github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b h1:fj5tQ8acgNUr6O8LEplsxDhUIe2573iLkJc+PqnzZTI= github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b/go.mod h1:5XA7W9S6mni3h5uvOC75dA3m9CCCaS83lltmc0ukdi4= -github.com/tjfoc/gmsm v1.3.1 h1:+k3IAlF81c31/TllJmIfuCYnjl8ziMdTWGWJcP9J1uo= -github.com/tjfoc/gmsm v1.3.1/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w= -github.com/ulikunitz/xz v0.5.7 h1:YvTNdFzX6+W5m9msiYg/zpkSURPPtOlzbqYjrFn7Yt4= -github.com/ulikunitz/xz v0.5.7/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho= +github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE= +github.com/ulikunitz/xz v0.5.8 h1:ERv8V6GKqVi23rgu5cj9pVfVzJbOqAY2Ntl88O6c2nQ= +github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/xtaci/kcp-go v5.4.20+incompatible h1:TN1uey3Raw0sTz0Fg8GkfM0uH3YwzhnZWQ1bABv5xAg= github.com/xtaci/kcp-go v5.4.20+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE= github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37 h1:EWU6Pktpas0n8lLQwDsRyZfmkPeRbdgPtW609es+/9E= github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37/go.mod h1:HpMP7DB2CyokmAh4lp0EQnnWhmycP/TvwBGzvuie+H0= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -golang.org/x/arch v0.0.0-20190909030613-46d78d1859ac/go.mod h1:flIaEI6LNU6xOCD5PaJvn9wGP0agmIOqjrtsKGRguv4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 h1:cg5LA/zNPRzIXIWSCxQW10Rvpy94aQh3LT/ShoCpkHw= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20220408190544-5352b0902921 h1:iU7T1X1J6yxDr0rda54sWGkHgOp5XJrqm79gcNlC2VM= +golang.org/x/crypto v0.0.0-20220408190544-5352b0902921/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 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-20200226121028-0de0cce0169b h1:0mm1VjtFUOIlE1SbDlwjYaDxZVDP2S5ou6y0gSgXHu8= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 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-20190902133755-9109b7679e13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121 h1:rITEj+UZHYC927n8GT97eC3zrpzXdb/voyeOuVKS46o= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f h1:8w7RhxzTVgUzw/AH/9mUV5q0vMgy40SQRursCcfmkCw= +golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200425043458-8463f397d07c h1:iHhCR0b26amDCiiO+kBguKZom9aMF+NrFxh9zeKR/XU= -golang.org/x/tools v0.0.0-20200425043458-8463f397d07c/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -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-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/hlandau/easymetric.v1 v1.0.0 h1:ZbfbH7W3giuVDjWUoFhDOjjv20hiPr5HZ2yMV5f9IeE= gopkg.in/hlandau/easymetric.v1 v1.0.0/go.mod h1:yh75hypuFzAxmvECh3ZKGCvFnIfapYJh2wv7ASaX2RE= gopkg.in/hlandau/measurable.v1 v1.0.1 h1:wH5UZKCRUnRr1iD+xIZfwhtxhmr+bprRJttqA1Rklf4= gopkg.in/hlandau/measurable.v1 v1.0.1/go.mod h1:6N+SYJGMTmetsx7wskULP+juuO+++tsHJkAgzvzsbuM= -gopkg.in/hlandau/passlib.v1 v1.0.10 h1:q5xh9ZHp907XTjVw8/EqG03//fnlITnIYQmv4Gn7TpE= -gopkg.in/hlandau/passlib.v1 v1.0.10/go.mod h1:wxGAv2CtQHlzWY8NJp+p045yl4WHyX7v2T6XbOcmqjM= +gopkg.in/hlandau/passlib.v1 v1.0.11 h1:vKeHwGRdWBD9mm4bJ56GAAdBXpFUYvg/BYYkmphjnmA= +gopkg.in/hlandau/passlib.v1 v1.0.11/go.mod h1:wxGAv2CtQHlzWY8NJp+p045yl4WHyX7v2T6XbOcmqjM= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= From 81e3728c98a188a9a830b531f2a2fa069b94ff82 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sat, 9 Apr 2022 11:50:24 -0700 Subject: [PATCH 33/94] build CI script --- bacillus/ci_pushbuild.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bacillus/ci_pushbuild.sh b/bacillus/ci_pushbuild.sh index 3b59c8c..2d082ca 100755 --- a/bacillus/ci_pushbuild.sh +++ b/bacillus/ci_pushbuild.sh @@ -27,6 +27,8 @@ ls ############ stage "Build" ############ +go clean -modcache +go clean -cache make all ############ From 8e8fff415c96915568b9249d6d9f73bd477728a6 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sat, 9 Apr 2022 11:50:24 -0700 Subject: [PATCH 34/94] Updated build CI script to clean go mod cache prior to build --- bacillus/ci_pushbuild.sh | 5 +++++ go.mod | 11 +++++------ go.sum | 24 +++++++----------------- 3 files changed, 17 insertions(+), 23 deletions(-) diff --git a/bacillus/ci_pushbuild.sh b/bacillus/ci_pushbuild.sh index 3b59c8c..54bc527 100755 --- a/bacillus/ci_pushbuild.sh +++ b/bacillus/ci_pushbuild.sh @@ -27,6 +27,11 @@ ls ############ stage "Build" ############ +echo "Cleaning go mod cache ..." +go clean -modcache +echo "Cleaning go cache ..." +go clean -cache +echo "Invoking 'make all' ..." make all ############ diff --git a/go.mod b/go.mod index da9c727..dbe40cd 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.17 require ( blitter.com/go/cryptmt v1.0.2 - blitter.com/go/goutmp v1.0.5 + blitter.com/go/goutmp v1.0.6 blitter.com/go/herradurakex v1.0.0 blitter.com/go/hopscotch v0.0.0-20211113042251-b8a306eea4dc blitter.com/go/kyber v0.0.0-20200130200857-6f2021cb88d9 @@ -14,9 +14,9 @@ require ( github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f github.com/kuking/go-frodokem v1.0.2 github.com/mattn/go-isatty v0.0.14 - github.com/xtaci/kcp-go v5.4.20+incompatible - golang.org/x/crypto v0.0.0-20220408190544-5352b0902921 - golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f + github.com/xtaci/kcp-go v4.3.4+incompatible + golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee + golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c gopkg.in/hlandau/passlib.v1 v1.0.11 ) @@ -29,8 +29,7 @@ require ( github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 // indirect github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b // indirect github.com/tjfoc/gmsm v1.4.1 // indirect - github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37 // indirect - golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 // indirect + golang.org/x/net v0.0.0-20201010224723-4f7140c49acb // indirect gopkg.in/hlandau/easymetric.v1 v1.0.0 // indirect gopkg.in/hlandau/measurable.v1 v1.0.1 // indirect ) diff --git a/go.sum b/go.sum index 9504714..ed26d66 100644 --- a/go.sum +++ b/go.sum @@ -2,8 +2,8 @@ blitter.com/go/chacha20 v0.0.0-20200130200441-214e4085f54c h1:LcnFFg6MCIJHf26P7e blitter.com/go/chacha20 v0.0.0-20200130200441-214e4085f54c/go.mod h1:EMJtRcf22WCtHGiXCw+NB/Sb/PYcXtUgUql6LDEwyXo= blitter.com/go/cryptmt v1.0.2 h1:ZcLhQk7onUssXyQwG3GdXDXctCVnNL+b7aFuvwOdKXc= blitter.com/go/cryptmt v1.0.2/go.mod h1:tdME2J3O4agaDAYIYNQzzuB28yVGnPSMmV3a/ucSU84= -blitter.com/go/goutmp v1.0.5 h1:isP6bxSs1O06Oy7wB8u4y5SgLr22txfjg/gjG4qn0Og= -blitter.com/go/goutmp v1.0.5/go.mod h1:gtlbjC8xGzMk/Cf0BpnVltSa3awOqJ+B5WAxVptTMxk= +blitter.com/go/goutmp v1.0.6 h1:jRKRw2WalVBza4T50etAfbvT2xp9G5uykIHTvyB5r0k= +blitter.com/go/goutmp v1.0.6/go.mod h1:DnK/uLBu1/1yLFiuVlmwvWErzAWVp+pDv7t6ZaQRLNc= blitter.com/go/herradurakex v1.0.0 h1:6XaxY+JLT1HUWPF0gYJnjX3pVjrw4YhYZEzZ1U0wkyc= blitter.com/go/herradurakex v1.0.0/go.mod h1:m3+vYZX+2dDjdo+n/HDnXEYJX9pwmNeQLgAfJM8mtxw= blitter.com/go/hopscotch v0.0.0-20211113042251-b8a306eea4dc h1:IS+jxdKSdlqp6TWG3yMoBde/cctBEMwMDg588JHxgTE= @@ -69,18 +69,15 @@ github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho= github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE= github.com/ulikunitz/xz v0.5.8 h1:ERv8V6GKqVi23rgu5cj9pVfVzJbOqAY2Ntl88O6c2nQ= github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/xtaci/kcp-go v5.4.20+incompatible h1:TN1uey3Raw0sTz0Fg8GkfM0uH3YwzhnZWQ1bABv5xAg= -github.com/xtaci/kcp-go v5.4.20+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE= -github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37 h1:EWU6Pktpas0n8lLQwDsRyZfmkPeRbdgPtW609es+/9E= -github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37/go.mod h1:HpMP7DB2CyokmAh4lp0EQnnWhmycP/TvwBGzvuie+H0= +github.com/xtaci/kcp-go v4.3.4+incompatible h1:T56s9GLhx+KZUn5T8aO2Didfa4uTYvjeVIRLt6uYdhE= +github.com/xtaci/kcp-go v4.3.4+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee h1:4yd7jl+vXjalO5ztz6Vc1VADv+S/80LGJmyl1ROJ2AI= golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20220408190544-5352b0902921 h1:iU7T1X1J6yxDr0rda54sWGkHgOp5XJrqm79gcNlC2VM= -golang.org/x/crypto v0.0.0-20220408190544-5352b0902921/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -90,9 +87,8 @@ golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20201010224723-4f7140c49acb h1:mUVeFHoDKis5nxCAzoAi7E8Ghb86EXh/RK6wtvJIqRY= golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -102,16 +98,10 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190902133755-9109b7679e13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f h1:8w7RhxzTVgUzw/AH/9mUV5q0vMgy40SQRursCcfmkCw= -golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= From ccebf6f4b3cb77820492b572babd0118caa23ffb Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sat, 9 Apr 2022 19:47:31 -0700 Subject: [PATCH 35/94] CI script - go mod creation from scratch w/o GOPROXY to test all dependency fetches --- bacillus/ci_pushbuild.sh | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/bacillus/ci_pushbuild.sh b/bacillus/ci_pushbuild.sh index 54bc527..4f98960 100755 --- a/bacillus/ci_pushbuild.sh +++ b/bacillus/ci_pushbuild.sh @@ -4,9 +4,10 @@ export GOPATH="${HOME}/go" export PATH=/usr/local/bin:/usr/bin:/usr/lib/ccache/bin:/bin:$GOPATH/bin -export GO111MODULE=on -# GOCACHE will be phased out in v1.12. [github.com/golang/go/issues/26809] -export GOCACHE="${HOME}/.cache/go-build" +export GO111MODULE=off +export GOPROXY="direct" +#!# GOCACHE will be phased out in v1.12. [github.com/golang/go/issues/26809] +#!export GOCACHE="${HOME}/.cache/go-build" echo "workdir: ${BACILLUS_WORKDIR}" mkdir -p "${BACILLUS_ARTFDIR}" @@ -27,6 +28,12 @@ ls ############ stage "Build" ############ +echo "Recreating go.mod from scratch ..." +mv go.mod go.mod.git +mv go.sum go.sum.git +go mod init +go mod tidy + echo "Cleaning go mod cache ..." go clean -modcache echo "Cleaning go cache ..." From 4f9a0649406a895ffe68848d700ec0c71ab38d6c Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sat, 9 Apr 2022 19:48:31 -0700 Subject: [PATCH 36/94] CI script - unset GOMODULE --- bacillus/ci_pushbuild.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bacillus/ci_pushbuild.sh b/bacillus/ci_pushbuild.sh index 4f98960..b42fe5f 100755 --- a/bacillus/ci_pushbuild.sh +++ b/bacillus/ci_pushbuild.sh @@ -4,7 +4,7 @@ export GOPATH="${HOME}/go" export PATH=/usr/local/bin:/usr/bin:/usr/lib/ccache/bin:/bin:$GOPATH/bin -export GO111MODULE=off +unset GO111MODULE export GOPROXY="direct" #!# GOCACHE will be phased out in v1.12. [github.com/golang/go/issues/26809] #!export GOCACHE="${HOME}/.cache/go-build" From a4af720280733694ec9ef3c77e82cc40b7fe5803 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sat, 9 Apr 2022 20:05:42 -0700 Subject: [PATCH 37/94] Put lint before build in CI script --- bacillus/ci_pushbuild.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bacillus/ci_pushbuild.sh b/bacillus/ci_pushbuild.sh index b42fe5f..6ae1a9a 100755 --- a/bacillus/ci_pushbuild.sh +++ b/bacillus/ci_pushbuild.sh @@ -41,6 +41,11 @@ go clean -cache echo "Invoking 'make all' ..." make all +############ +stage "Lint" +############ +make lint + ############ stage "UnitTests" ############ @@ -99,11 +104,6 @@ if [ -f ~/.xs_id.bak ]; then mv ~/.xs_id.bak ~/.xs_id fi -############ -stage "Lint" -############ -make lint - ############ stage "Artifacts" ############ From 0765c8bea646629b399262a41e578fe733b5fcda Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sun, 1 May 2022 23:19:50 -0700 Subject: [PATCH 38/94] Handle missing go.mod, go.sum --- bacillus/ci_pushbuild.sh | 4 ++-- go.mod | 9 +++++---- go.sum | 20 +++++++++++++++----- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/bacillus/ci_pushbuild.sh b/bacillus/ci_pushbuild.sh index 6ae1a9a..f69ee21 100755 --- a/bacillus/ci_pushbuild.sh +++ b/bacillus/ci_pushbuild.sh @@ -29,8 +29,8 @@ ls stage "Build" ############ echo "Recreating go.mod from scratch ..." -mv go.mod go.mod.git -mv go.sum go.sum.git +mv go.mod go.mod.git || true +mv go.sum go.sum.git || true go mod init go mod tidy diff --git a/go.mod b/go.mod index dbe40cd..f711150 100644 --- a/go.mod +++ b/go.mod @@ -14,9 +14,9 @@ require ( github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f github.com/kuking/go-frodokem v1.0.2 github.com/mattn/go-isatty v0.0.14 - github.com/xtaci/kcp-go v4.3.4+incompatible - golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee - golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c + github.com/xtaci/kcp-go v5.4.20+incompatible + golang.org/x/crypto v0.0.0-20220408190544-5352b0902921 + golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f gopkg.in/hlandau/passlib.v1 v1.0.11 ) @@ -29,7 +29,8 @@ require ( github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 // indirect github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b // indirect github.com/tjfoc/gmsm v1.4.1 // indirect - golang.org/x/net v0.0.0-20201010224723-4f7140c49acb // indirect + github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37 // indirect + golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 // indirect gopkg.in/hlandau/easymetric.v1 v1.0.0 // indirect gopkg.in/hlandau/measurable.v1 v1.0.1 // indirect ) diff --git a/go.sum b/go.sum index ed26d66..4217963 100644 --- a/go.sum +++ b/go.sum @@ -69,15 +69,18 @@ github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho= github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE= github.com/ulikunitz/xz v0.5.8 h1:ERv8V6GKqVi23rgu5cj9pVfVzJbOqAY2Ntl88O6c2nQ= github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/xtaci/kcp-go v4.3.4+incompatible h1:T56s9GLhx+KZUn5T8aO2Didfa4uTYvjeVIRLt6uYdhE= -github.com/xtaci/kcp-go v4.3.4+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE= +github.com/xtaci/kcp-go v5.4.20+incompatible h1:TN1uey3Raw0sTz0Fg8GkfM0uH3YwzhnZWQ1bABv5xAg= +github.com/xtaci/kcp-go v5.4.20+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE= +github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37 h1:EWU6Pktpas0n8lLQwDsRyZfmkPeRbdgPtW609es+/9E= +github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37/go.mod h1:HpMP7DB2CyokmAh4lp0EQnnWhmycP/TvwBGzvuie+H0= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee h1:4yd7jl+vXjalO5ztz6Vc1VADv+S/80LGJmyl1ROJ2AI= golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20220408190544-5352b0902921 h1:iU7T1X1J6yxDr0rda54sWGkHgOp5XJrqm79gcNlC2VM= +golang.org/x/crypto v0.0.0-20220408190544-5352b0902921/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -87,8 +90,9 @@ golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20201010224723-4f7140c49acb h1:mUVeFHoDKis5nxCAzoAi7E8Ghb86EXh/RK6wtvJIqRY= golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -98,10 +102,16 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190902133755-9109b7679e13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f h1:8w7RhxzTVgUzw/AH/9mUV5q0vMgy40SQRursCcfmkCw= +golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= From ee19787b5e1720c421d8fc5a9873484602bae5d6 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Thu, 16 Jun 2022 22:45:25 -0700 Subject: [PATCH 39/94] Added support for building garbled binaries (https://github.com/burrowers/garble.git) --- Makefile | 10 +++++++++- logger/Makefile | 8 +++++++- spinsult/Makefile | 7 +++++++ xs/Makefile | 8 +++++++- xsd/Makefile | 8 +++++++- xsnet/Makefile | 8 +++++++- xspasswd/Makefile | 8 +++++++- 7 files changed, 51 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 3ab910d..3b178e4 100644 --- a/Makefile +++ b/Makefile @@ -10,6 +10,14 @@ else MTAG="-m" endif +# If available, one may build 'garbled' binaries +# See https://github.com/burrowers/garble.git +ifeq ($(GARBLE),y) +GO=garble -literals -tiny -debugdir=garbled +else +GO=go +endif + ifneq ($(VENDOR),) GOBUILDOPTS :=-v -mod vendor VTAG = "-v" @@ -63,7 +71,7 @@ tools: common: - go build . + $(GO) build . go install . diff --git a/logger/Makefile b/logger/Makefile index 0287ffe..cc83cbb 100644 --- a/logger/Makefile +++ b/logger/Makefile @@ -2,8 +2,14 @@ EXE = $(notdir $(shell pwd)) +ifeq ($(GARBLE),y) +GO=garble -literals -tiny -debugdir=garbled +else +GO = go +endif + all: - go build . + $(GO) build . clean: $(RM) $(EXE) $(EXE).exe diff --git a/spinsult/Makefile b/spinsult/Makefile index f645a41..555e232 100644 --- a/spinsult/Makefile +++ b/spinsult/Makefile @@ -1,11 +1,18 @@ .PHONY: info clean lib +ifeq ($(GARBLE),y) +GO = garble -literals -tiny -debugdir=garbled +else +GO = go +endif + all: lib clean: go clean . lib: info + $(GO) build . go install . ifneq ($(MSYSTEM),) diff --git a/xs/Makefile b/xs/Makefile index c3f582b..27d6356 100644 --- a/xs/Makefile +++ b/xs/Makefile @@ -1,11 +1,17 @@ .PHONY: clean all vis lint +ifeq ($(GARBLE),y) +GO = garble -literals -tiny -debugdir=garbled +else +GO = go +endif + EXTPKGS = bytes,errors,flag,fmt,internal,io,log,net,os,path,runtime,time,strings,sync,syscall,binary,encoding EXE = $(notdir $(shell pwd)) all: echo "BUILDOPTS:" $(BUILDOPTS) - go build $(BUILDOPTS) . + $(GO) build $(BUILDOPTS) . clean: $(RM) $(EXE) $(EXE).exe diff --git a/xsd/Makefile b/xsd/Makefile index deef212..6a0ab14 100644 --- a/xsd/Makefile +++ b/xsd/Makefile @@ -1,10 +1,16 @@ .PHONY: clean all vis lint +ifeq ($(GARBLE),y) +GO = garble -literals -tiny -debugdir=garbled +else +GO = go +endif + EXTPKGS = binary,bytes,crypto,encoding,errors,flag,fmt,internal,io,log,net,os,path,runtime,time,strings,sync,syscall EXE = $(notdir $(shell pwd)) all: - go build $(BUILDOPTS) . + $(GO) build $(BUILDOPTS) . clean: $(RM) $(EXE) $(EXE).exe diff --git a/xsnet/Makefile b/xsnet/Makefile index f645a41..150ba25 100644 --- a/xsnet/Makefile +++ b/xsnet/Makefile @@ -1,12 +1,18 @@ .PHONY: info clean lib +ifeq ($(GARBLE),y) +GO = garble -tiny -literals -debugdir=garbled +else +GO = go +endif + all: lib clean: go clean . lib: info - go install . + $(GO) install . ifneq ($(MSYSTEM),) info: diff --git a/xspasswd/Makefile b/xspasswd/Makefile index 1f8e2c6..8e2b657 100644 --- a/xspasswd/Makefile +++ b/xspasswd/Makefile @@ -1,10 +1,16 @@ .PHONY: clean all vis lint +ifeq ($(GARBLE),y) +GO = garble -tiny -literals -debugdir=garbled +else +GO = go +endif + EXTPKGS = bytes,errors,flag,fmt,internal,io,log,net,os,path,runtime,time,strings,sync,syscall,binary,encoding EXE = $(notdir $(shell pwd)) all: - go build $(BUILDOPTS) . + $(GO) build $(BUILDOPTS) . clean: $(RM) $(EXE) $(EXE).exe From 73eadf7534fa3e8e7640eff9e15923afe4d895b0 Mon Sep 17 00:00:00 2001 From: Russtopia Date: Sat, 2 Jul 2022 12:00:12 -0700 Subject: [PATCH 40/94] Update 'README.md' --- README.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index e62a3c5..ccadb25 100644 --- a/README.md +++ b/README.md @@ -105,17 +105,15 @@ As of this time (Oct 2018) Kyber is one of the candidate algorithms submitted to ### Get source code ``` -$ go get -u blitter.com/go/xs -$ cd $GOPATH/src/blitter.com/go/xs -$ go build ./... # install all dependent go pkgs +$ git clone https://gogs.blitter.com/RLabs/xs ``` ### To build ``` -$ cd $GOPATH/src/blitter.com/go/xs -$ make clean all +$ cd xs +$ make clean && make ``` ### To install, uninstall, re-install @@ -146,6 +144,7 @@ The make system assumes installation in /usr/local/sbin (xsd, xspasswd) and /usr ``` $ sudo rc-config [start | restart | stop] xsd +# .. or sudo /etc/init.d/xsd [start | restart stop] ``` ### To set accounts & passwords: @@ -214,7 +213,7 @@ NOTE: Renaming while copying (eg., 'cp /foo/bar/fileA ./fileB') is NOT supported If the 'pv' pipeview utility is available (http://www.ivarch.com/programs/pv.shtml) file transfer progress and bandwidth control will be available (suppress the former with the -q option, set the latter with -L <bytes_per_second>). -Special care should be taken when doing client->server copies: since the tarpipe (should) always succeed at least sending data to the remote side, a destination with no write permission will not return a nonzero status and the client closes its end after sending all data, giving the server no opportunity to send an error code to the client. +Special care should be taken when doing client → server copies: since the tarpipe (should) always succeed at least sending data to the remote side, a destination with no write permission will not return a nonzero status and the client closes its end after sending all data, giving the server no opportunity to send an error code to the client. It is recommended to test beforehand if the server-side destination is writable (and optionally if the destination already exists, if one does not want to clobber an existing path) by: ``` @@ -226,7 +225,7 @@ Perhaps in future a more complex handshake will be devised to allow the client t ### Tunnels -Simple tunnels (client -> server, no reverse tunnels for now) are supported. +Simple tunnels (client → server, no reverse tunnels for now) are supported. Syntax: xs -T=<tunspec>{,<tunspec>...} .. where <tunspec> is <localport:remoteport> From 41769660cce27ded09971e010d6dff14502aeee0 Mon Sep 17 00:00:00 2001 From: Russtopia Date: Sat, 2 Jul 2022 12:01:15 -0700 Subject: [PATCH 41/94] =?UTF-8?q?Bump=20version=20=E2=86=92=200.9.5.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 3b178e4..319723c 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION := 0.9.4 +VERSION := 0.9.5.1 .PHONY: lint vis clean common client server passwd subpkgs install uninstall reinstall ## Tag version of binaries with build info wrt. From 42ad33065bc61671fbc326d5e3cb7cb7f3f52c73 Mon Sep 17 00:00:00 2001 From: Russtopia Date: Sat, 2 Jul 2022 12:44:37 -0700 Subject: [PATCH 42/94] Update 'README.md' --- README.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ccadb25..feb8ca3 100644 --- a/README.md +++ b/README.md @@ -102,6 +102,19 @@ As of this time (Oct 2018) Kyber is one of the candidate algorithms submitted to * [blitter.com/go/mtwist](https://gogs.blitter.com/RLabs/mtwist) // 64-bit Mersenne Twister PRNG * [blitter.com/go/cryptmt](https://gogs.blitter.com/RLabs/cryptmt) // CryptMTv1 stream cipher + +### Installing + +As of Go 1.8, one can directly use `go install` to get the client `xs` and server `xsd` binaries; however it is not recommended, as `xsd` requires root and for general use should be in one of the system directories, akin to other daemons. If one insists, the following will work to place them in $HOME/go/bin: + +``` +$ go install blitter.com/go/xs@latest +$ go install blitter.com/go/xsd@latest +``` + +(NOTE the `-v` option for binaries obtained in this manner will be blank; another reason to build them yourself locally using the steps below.) + + ### Get source code ``` @@ -116,7 +129,7 @@ $ cd xs $ make clean && make ``` -### To install, uninstall, re-install +### To install, uninstall, re-install (xsd server) ``` $ sudo make [install | uninstall | reinstall] @@ -147,7 +160,7 @@ $ sudo rc-config [start | restart | stop] xsd # .. or sudo /etc/init.d/xsd [start | restart stop] ``` -### To set accounts & passwords: +### To set accounts & passwords (DEPRECATED: `-s` is now true by default) ``` $ sudo touch /etc/xs.passwd From f24d4d8fdb400c8de059d5237842b0fa5b6e56d1 Mon Sep 17 00:00:00 2001 From: Russtopia Date: Sat, 2 Jul 2022 12:51:18 -0700 Subject: [PATCH 43/94] Update 'README.md' --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index feb8ca3..ef6d2cc 100644 --- a/README.md +++ b/README.md @@ -108,11 +108,11 @@ As of this time (Oct 2018) Kyber is one of the candidate algorithms submitted to As of Go 1.8, one can directly use `go install` to get the client `xs` and server `xsd` binaries; however it is not recommended, as `xsd` requires root and for general use should be in one of the system directories, akin to other daemons. If one insists, the following will work to place them in $HOME/go/bin: ``` -$ go install blitter.com/go/xs@latest -$ go install blitter.com/go/xsd@latest +$ go install blitter.com/go/xs/xs@latest +$ go install blitter.com/go/xs/xsd@latest ``` -(NOTE the `-v` option for binaries obtained in this manner will be blank; another reason to build them yourself locally using the steps below.) +(NOTE the `-v` (version) option for binaries obtained in this manner will be blank; another reason to build them yourself locally using the steps below.) ### Get source code From 7a4560762db367c60be7a88e4d30dc35bafef991 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Fri, 12 Aug 2022 21:30:05 -0700 Subject: [PATCH 44/94] Added vendor/ dir to remove dependencies on gopkg.in (down Aug 12 2022) --- vendor/blitter.com/go/chacha20/LICENSE | 661 + vendor/blitter.com/go/chacha20/README.md | 13 + vendor/blitter.com/go/chacha20/chacha20.go | 290 + .../go/chacha20/internal/api/api.go | 59 + .../go/chacha20/internal/hardware/impl.go | 27 + .../chacha20/internal/hardware/impl_amd64.go | 88 + .../chacha20/internal/hardware/impl_amd64.s | 1682 + .../go/chacha20/internal/ref/impl.go | 374 + vendor/blitter.com/go/cryptmt/README.md | 6 + vendor/blitter.com/go/cryptmt/cryptmt.go | 78 + vendor/blitter.com/go/goutmp/LICENSE.mit | 21 + vendor/blitter.com/go/goutmp/README.md | 17 + vendor/blitter.com/go/goutmp/goutmp_bsd.go | 136 + vendor/blitter.com/go/goutmp/goutmp_linux.go | 132 + .../blitter.com/go/herradurakex/LICENSE.gpl | 674 + .../blitter.com/go/herradurakex/LICENSE.mit | 22 + vendor/blitter.com/go/herradurakex/Makefile | 17 + vendor/blitter.com/go/herradurakex/README.md | 1 + .../go/herradurakex/herradurakex.go | 182 + vendor/blitter.com/go/hopscotch/README.md | 29 + vendor/blitter.com/go/hopscotch/hopscotch.go | 166 + vendor/blitter.com/go/kyber/.gitignore | 2 + vendor/blitter.com/go/kyber/LICENSE | 122 + vendor/blitter.com/go/kyber/README.md | 24 + vendor/blitter.com/go/kyber/cbd.go | 100 + vendor/blitter.com/go/kyber/doc.go | 27 + vendor/blitter.com/go/kyber/hwaccel.go | 46 + vendor/blitter.com/go/kyber/hwaccel_amd64.go | 256 + vendor/blitter.com/go/kyber/hwaccel_amd64.s | 2749 + vendor/blitter.com/go/kyber/hwaccel_ref.go | 14 + vendor/blitter.com/go/kyber/indcpa.go | 279 + vendor/blitter.com/go/kyber/kem.go | 187 + vendor/blitter.com/go/kyber/kex.go | 249 + vendor/blitter.com/go/kyber/ntt.go | 65 + vendor/blitter.com/go/kyber/params.go | 116 + vendor/blitter.com/go/kyber/poly.go | 146 + vendor/blitter.com/go/kyber/polyvec.go | 115 + vendor/blitter.com/go/kyber/precomp.go | 87 + vendor/blitter.com/go/kyber/reduce.go | 43 + vendor/blitter.com/go/mtwist/mtwist.go | 125 + vendor/blitter.com/go/newhope/LICENSE | 122 + vendor/blitter.com/go/newhope/batcher.go | 929 + .../go/newhope/error_correction.go | 135 + vendor/blitter.com/go/newhope/newhope.go | 220 + .../blitter.com/go/newhope/newhope_simple.go | 166 + vendor/blitter.com/go/newhope/ntt.go | 131 + vendor/blitter.com/go/newhope/params.go | 17 + vendor/blitter.com/go/newhope/poly.go | 212 + vendor/blitter.com/go/newhope/poly_simple.go | 99 + vendor/blitter.com/go/newhope/precomp.go | 287 + vendor/blitter.com/go/newhope/reduce.go | 32 + vendor/github.com/aead/chacha20/LICENSE | 21 + .../github.com/aead/chacha20/chacha/chacha.go | 197 + .../aead/chacha20/chacha/chachaAVX2_amd64.s | 406 + .../aead/chacha20/chacha/chacha_386.go | 60 + .../aead/chacha20/chacha/chacha_386.s | 163 + .../aead/chacha20/chacha/chacha_amd64.go | 76 + .../aead/chacha20/chacha/chacha_amd64.s | 1072 + .../aead/chacha20/chacha/chacha_generic.go | 319 + .../aead/chacha20/chacha/chacha_ref.go | 33 + .../github.com/aead/chacha20/chacha/const.s | 53 + .../github.com/aead/chacha20/chacha/macro.s | 163 + vendor/github.com/creack/pty/.gitignore | 4 + .../github.com/creack/pty/Dockerfile.golang | 17 + vendor/github.com/creack/pty/Dockerfile.riscv | 23 + vendor/github.com/creack/pty/LICENSE | 23 + vendor/github.com/creack/pty/README.md | 107 + .../github.com/creack/pty/asm_solaris_amd64.s | 18 + vendor/github.com/creack/pty/doc.go | 16 + vendor/github.com/creack/pty/ioctl.go | 19 + vendor/github.com/creack/pty/ioctl_bsd.go | 40 + vendor/github.com/creack/pty/ioctl_solaris.go | 48 + .../creack/pty/ioctl_unsupported.go | 13 + vendor/github.com/creack/pty/mktypes.bash | 19 + vendor/github.com/creack/pty/pty_darwin.go | 68 + vendor/github.com/creack/pty/pty_dragonfly.go | 83 + vendor/github.com/creack/pty/pty_freebsd.go | 81 + vendor/github.com/creack/pty/pty_linux.go | 54 + vendor/github.com/creack/pty/pty_netbsd.go | 69 + vendor/github.com/creack/pty/pty_openbsd.go | 36 + vendor/github.com/creack/pty/pty_solaris.go | 152 + .../github.com/creack/pty/pty_unsupported.go | 12 + vendor/github.com/creack/pty/run.go | 57 + vendor/github.com/creack/pty/start.go | 25 + vendor/github.com/creack/pty/start_windows.go | 19 + .../creack/pty/test_crosscompile.sh | 64 + vendor/github.com/creack/pty/winsize.go | 27 + vendor/github.com/creack/pty/winsize_unix.go | 35 + .../creack/pty/winsize_unsupported.go | 23 + vendor/github.com/creack/pty/ztypes_386.go | 12 + vendor/github.com/creack/pty/ztypes_amd64.go | 12 + vendor/github.com/creack/pty/ztypes_arm.go | 12 + vendor/github.com/creack/pty/ztypes_arm64.go | 12 + .../creack/pty/ztypes_dragonfly_amd64.go | 17 + .../creack/pty/ztypes_freebsd_386.go | 16 + .../creack/pty/ztypes_freebsd_amd64.go | 17 + .../creack/pty/ztypes_freebsd_arm.go | 16 + .../creack/pty/ztypes_freebsd_arm64.go | 16 + .../creack/pty/ztypes_freebsd_ppc64.go | 14 + .../github.com/creack/pty/ztypes_loong64.go | 12 + vendor/github.com/creack/pty/ztypes_mipsx.go | 13 + .../creack/pty/ztypes_netbsd_32bit_int.go | 17 + .../creack/pty/ztypes_openbsd_32bit_int.go | 14 + vendor/github.com/creack/pty/ztypes_ppc64.go | 12 + .../github.com/creack/pty/ztypes_ppc64le.go | 12 + vendor/github.com/creack/pty/ztypes_riscvx.go | 12 + vendor/github.com/creack/pty/ztypes_s390x.go | 12 + .../github.com/jameskeane/bcrypt/.gitignore | 5 + vendor/github.com/jameskeane/bcrypt/LICENSE | 29 + vendor/github.com/jameskeane/bcrypt/README | 46 + vendor/github.com/jameskeane/bcrypt/bcrypt.go | 190 + vendor/github.com/jameskeane/bcrypt/cipher.go | 415 + .../github.com/klauspost/cpuid/v2/.gitignore | 24 + .../klauspost/cpuid/v2/.goreleaser.yml | 74 + .../github.com/klauspost/cpuid/v2/.travis.yml | 67 + .../klauspost/cpuid/v2/CONTRIBUTING.txt | 35 + vendor/github.com/klauspost/cpuid/v2/LICENSE | 22 + .../github.com/klauspost/cpuid/v2/README.md | 137 + vendor/github.com/klauspost/cpuid/v2/cpuid.go | 1023 + .../github.com/klauspost/cpuid/v2/cpuid_386.s | 47 + .../klauspost/cpuid/v2/cpuid_amd64.s | 72 + .../klauspost/cpuid/v2/cpuid_arm64.s | 26 + .../klauspost/cpuid/v2/detect_arm64.go | 246 + .../klauspost/cpuid/v2/detect_ref.go | 14 + .../klauspost/cpuid/v2/detect_x86.go | 35 + .../klauspost/cpuid/v2/featureid_string.go | 173 + .../klauspost/cpuid/v2/os_darwin_arm64.go | 19 + .../klauspost/cpuid/v2/os_linux_arm64.go | 130 + .../klauspost/cpuid/v2/os_other_arm64.go | 17 + .../klauspost/cpuid/v2/os_safe_linux_arm64.go | 7 + .../cpuid/v2/os_unsafe_linux_arm64.go | 10 + .../klauspost/cpuid/v2/test-architectures.sh | 15 + .../klauspost/reedsolomon/.gitignore | 26 + .../klauspost/reedsolomon/.travis.yml | 65 + .../github.com/klauspost/reedsolomon/LICENSE | 23 + .../klauspost/reedsolomon/README.md | 449 + .../klauspost/reedsolomon/appveyor.yml | 20 + .../klauspost/reedsolomon/galois.go | 931 + .../reedsolomon/galoisAvx512_amd64.go | 339 + .../reedsolomon/galoisAvx512_amd64.s | 402 + .../klauspost/reedsolomon/galois_amd64.go | 140 + .../klauspost/reedsolomon/galois_amd64.s | 370 + .../klauspost/reedsolomon/galois_arm64.go | 66 + .../klauspost/reedsolomon/galois_arm64.s | 127 + .../klauspost/reedsolomon/galois_gen_amd64.go | 1176 + .../klauspost/reedsolomon/galois_gen_amd64.s | 70110 ++++++++++++++++ .../klauspost/reedsolomon/galois_gen_none.go | 18 + .../reedsolomon/galois_gen_switch_amd64.go | 694 + .../klauspost/reedsolomon/galois_noasm.go | 58 + .../klauspost/reedsolomon/galois_notamd64.go | 14 + .../klauspost/reedsolomon/galois_ppc64le.go | 74 + .../klauspost/reedsolomon/galois_ppc64le.s | 126 + .../klauspost/reedsolomon/inversion_tree.go | 164 + .../klauspost/reedsolomon/matrix.go | 282 + .../klauspost/reedsolomon/options.go | 186 + .../klauspost/reedsolomon/reedsolomon.go | 1263 + .../klauspost/reedsolomon/streaming.go | 603 + .../github.com/kuking/go-frodokem/.gitignore | 11 + vendor/github.com/kuking/go-frodokem/LICENSE | 21 + vendor/github.com/kuking/go-frodokem/Makefile | 22 + .../github.com/kuking/go-frodokem/README.md | 45 + vendor/github.com/kuking/go-frodokem/impl.go | 535 + vendor/github.com/kuking/go-frodokem/types.go | 202 + vendor/github.com/mattn/go-isatty/LICENSE | 9 + vendor/github.com/mattn/go-isatty/README.md | 50 + vendor/github.com/mattn/go-isatty/doc.go | 2 + vendor/github.com/mattn/go-isatty/go.test.sh | 12 + .../github.com/mattn/go-isatty/isatty_bsd.go | 19 + .../mattn/go-isatty/isatty_others.go | 16 + .../mattn/go-isatty/isatty_plan9.go | 23 + .../mattn/go-isatty/isatty_solaris.go | 21 + .../mattn/go-isatty/isatty_tcgets.go | 19 + .../mattn/go-isatty/isatty_windows.go | 125 + vendor/github.com/pkg/errors/.gitignore | 24 + vendor/github.com/pkg/errors/.travis.yml | 10 + vendor/github.com/pkg/errors/LICENSE | 23 + vendor/github.com/pkg/errors/Makefile | 44 + vendor/github.com/pkg/errors/README.md | 59 + vendor/github.com/pkg/errors/appveyor.yml | 32 + vendor/github.com/pkg/errors/errors.go | 288 + vendor/github.com/pkg/errors/go113.go | 38 + vendor/github.com/pkg/errors/stack.go | 177 + .../github.com/templexxx/cpufeat/.gitignore | 15 + vendor/github.com/templexxx/cpufeat/LICENSE | 27 + vendor/github.com/templexxx/cpufeat/README.md | 1 + vendor/github.com/templexxx/cpufeat/cpu.go | 33 + .../github.com/templexxx/cpufeat/cpu_arm.go | 7 + .../github.com/templexxx/cpufeat/cpu_arm64.go | 7 + .../github.com/templexxx/cpufeat/cpu_mips.go | 7 + .../templexxx/cpufeat/cpu_mips64.go | 7 + .../templexxx/cpufeat/cpu_mips64le.go | 7 + .../templexxx/cpufeat/cpu_mipsle.go | 7 + .../github.com/templexxx/cpufeat/cpu_ppc64.go | 7 + .../templexxx/cpufeat/cpu_ppc64le.go | 7 + .../github.com/templexxx/cpufeat/cpu_s390x.go | 7 + .../github.com/templexxx/cpufeat/cpu_x86.go | 70 + vendor/github.com/templexxx/cpufeat/cpu_x86.s | 32 + .../github.com/templexxx/xor/.gitattributes | 1 + vendor/github.com/templexxx/xor/.gitignore | 18 + vendor/github.com/templexxx/xor/LICENSE | 21 + vendor/github.com/templexxx/xor/README.md | 50 + vendor/github.com/templexxx/xor/avx2_amd64.s | 438 + vendor/github.com/templexxx/xor/nosimd.go | 116 + vendor/github.com/templexxx/xor/sse2_amd64.s | 574 + vendor/github.com/templexxx/xor/xor.go | 49 + vendor/github.com/templexxx/xor/xor_amd64.go | 120 + vendor/github.com/templexxx/xor/xor_other.go | 19 + vendor/github.com/tjfoc/gmsm/LICENSE | 201 + vendor/github.com/tjfoc/gmsm/sm4/sm4.go | 491 + vendor/github.com/tjfoc/gmsm/sm4/sm4_gcm.go | 333 + vendor/github.com/tjfoc/gmsm/sm4/utils.go | 86 + vendor/github.com/xtaci/kcp-go/.gitignore | 24 + vendor/github.com/xtaci/kcp-go/.travis.yml | 17 + vendor/github.com/xtaci/kcp-go/LICENSE | 22 + vendor/github.com/xtaci/kcp-go/README.md | 229 + vendor/github.com/xtaci/kcp-go/batchconn.go | 12 + vendor/github.com/xtaci/kcp-go/crypt.go | 785 + vendor/github.com/xtaci/kcp-go/donate.png | Bin 0 -> 4420 bytes vendor/github.com/xtaci/kcp-go/entropy.go | 52 + vendor/github.com/xtaci/kcp-go/fec.go | 337 + vendor/github.com/xtaci/kcp-go/flame.png | Bin 0 -> 57142 bytes vendor/github.com/xtaci/kcp-go/frame.png | Bin 0 -> 36006 bytes vendor/github.com/xtaci/kcp-go/kcp-go.png | Bin 0 -> 9153 bytes vendor/github.com/xtaci/kcp-go/kcp.go | 1070 + vendor/github.com/xtaci/kcp-go/readloop.go | 48 + .../xtaci/kcp-go/readloop_generic.go | 11 + .../github.com/xtaci/kcp-go/readloop_linux.go | 120 + vendor/github.com/xtaci/kcp-go/sess.go | 1054 + vendor/github.com/xtaci/kcp-go/snmp.go | 164 + vendor/github.com/xtaci/kcp-go/tx.go | 24 + vendor/github.com/xtaci/kcp-go/tx_generic.go | 11 + vendor/github.com/xtaci/kcp-go/tx_linux.go | 51 + .../github.com/xtaci/kcp-go/wechat_donate.jpg | Bin 0 -> 35307 bytes vendor/golang.org/x/crypto/AUTHORS | 3 + vendor/golang.org/x/crypto/CONTRIBUTORS | 3 + vendor/golang.org/x/crypto/LICENSE | 27 + vendor/golang.org/x/crypto/PATENTS | 22 + vendor/golang.org/x/crypto/argon2/argon2.go | 285 + vendor/golang.org/x/crypto/argon2/blake2b.go | 53 + .../x/crypto/argon2/blamka_amd64.go | 61 + .../golang.org/x/crypto/argon2/blamka_amd64.s | 244 + .../x/crypto/argon2/blamka_generic.go | 163 + .../golang.org/x/crypto/argon2/blamka_ref.go | 16 + vendor/golang.org/x/crypto/bcrypt/base64.go | 35 + vendor/golang.org/x/crypto/bcrypt/bcrypt.go | 295 + vendor/golang.org/x/crypto/blake2b/blake2b.go | 291 + .../x/crypto/blake2b/blake2bAVX2_amd64.go | 38 + .../x/crypto/blake2b/blake2bAVX2_amd64.s | 745 + .../x/crypto/blake2b/blake2b_amd64.go | 25 + .../x/crypto/blake2b/blake2b_amd64.s | 279 + .../x/crypto/blake2b/blake2b_generic.go | 182 + .../x/crypto/blake2b/blake2b_ref.go | 12 + vendor/golang.org/x/crypto/blake2b/blake2x.go | 177 + .../golang.org/x/crypto/blake2b/register.go | 33 + vendor/golang.org/x/crypto/blowfish/block.go | 159 + vendor/golang.org/x/crypto/blowfish/cipher.go | 99 + vendor/golang.org/x/crypto/blowfish/const.go | 199 + vendor/golang.org/x/crypto/cast5/cast5.go | 533 + .../x/crypto/internal/subtle/aliasing.go | 33 + .../crypto/internal/subtle/aliasing_purego.go | 36 + vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go | 77 + .../x/crypto/salsa20/salsa/hsalsa20.go | 144 + .../x/crypto/salsa20/salsa/salsa208.go | 199 + .../x/crypto/salsa20/salsa/salsa20_amd64.go | 24 + .../x/crypto/salsa20/salsa/salsa20_amd64.s | 881 + .../x/crypto/salsa20/salsa/salsa20_noasm.go | 15 + .../x/crypto/salsa20/salsa/salsa20_ref.go | 231 + vendor/golang.org/x/crypto/salsa20/salsa20.go | 58 + vendor/golang.org/x/crypto/scrypt/scrypt.go | 212 + vendor/golang.org/x/crypto/sha3/doc.go | 66 + vendor/golang.org/x/crypto/sha3/hashes.go | 97 + .../x/crypto/sha3/hashes_generic.go | 28 + vendor/golang.org/x/crypto/sha3/keccakf.go | 413 + .../golang.org/x/crypto/sha3/keccakf_amd64.go | 14 + .../golang.org/x/crypto/sha3/keccakf_amd64.s | 391 + vendor/golang.org/x/crypto/sha3/register.go | 19 + vendor/golang.org/x/crypto/sha3/sha3.go | 193 + vendor/golang.org/x/crypto/sha3/sha3_s390x.go | 285 + vendor/golang.org/x/crypto/sha3/sha3_s390x.s | 34 + vendor/golang.org/x/crypto/sha3/shake.go | 173 + .../golang.org/x/crypto/sha3/shake_generic.go | 20 + vendor/golang.org/x/crypto/sha3/xor.go | 24 + .../golang.org/x/crypto/sha3/xor_generic.go | 28 + .../golang.org/x/crypto/sha3/xor_unaligned.go | 68 + vendor/golang.org/x/crypto/tea/cipher.go | 116 + vendor/golang.org/x/crypto/twofish/twofish.go | 348 + vendor/golang.org/x/crypto/xtea/block.go | 66 + vendor/golang.org/x/crypto/xtea/cipher.go | 90 + vendor/golang.org/x/net/AUTHORS | 3 + vendor/golang.org/x/net/CONTRIBUTORS | 3 + vendor/golang.org/x/net/LICENSE | 27 + vendor/golang.org/x/net/PATENTS | 22 + vendor/golang.org/x/net/bpf/asm.go | 41 + vendor/golang.org/x/net/bpf/constants.go | 222 + vendor/golang.org/x/net/bpf/doc.go | 82 + vendor/golang.org/x/net/bpf/instructions.go | 726 + vendor/golang.org/x/net/bpf/setter.go | 10 + vendor/golang.org/x/net/bpf/vm.go | 150 + .../golang.org/x/net/bpf/vm_instructions.go | 182 + .../golang.org/x/net/internal/iana/const.go | 223 + .../x/net/internal/socket/cmsghdr.go | 12 + .../x/net/internal/socket/cmsghdr_bsd.go | 14 + .../internal/socket/cmsghdr_linux_32bit.go | 15 + .../internal/socket/cmsghdr_linux_64bit.go | 15 + .../internal/socket/cmsghdr_solaris_64bit.go | 14 + .../x/net/internal/socket/cmsghdr_stub.go | 28 + .../x/net/internal/socket/cmsghdr_unix.go | 22 + .../net/internal/socket/cmsghdr_zos_s390x.go | 25 + .../net/internal/socket/complete_dontwait.go | 26 + .../internal/socket/complete_nodontwait.go | 22 + .../golang.org/x/net/internal/socket/empty.s | 8 + .../x/net/internal/socket/error_unix.go | 32 + .../x/net/internal/socket/error_windows.go | 26 + .../x/net/internal/socket/iovec_32bit.go | 20 + .../x/net/internal/socket/iovec_64bit.go | 20 + .../internal/socket/iovec_solaris_64bit.go | 19 + .../x/net/internal/socket/iovec_stub.go | 12 + .../x/net/internal/socket/mmsghdr_stub.go | 22 + .../x/net/internal/socket/mmsghdr_unix.go | 114 + .../x/net/internal/socket/msghdr_bsd.go | 40 + .../x/net/internal/socket/msghdr_bsdvar.go | 17 + .../x/net/internal/socket/msghdr_linux.go | 39 + .../net/internal/socket/msghdr_linux_32bit.go | 25 + .../net/internal/socket/msghdr_linux_64bit.go | 25 + .../x/net/internal/socket/msghdr_openbsd.go | 14 + .../internal/socket/msghdr_solaris_64bit.go | 36 + .../x/net/internal/socket/msghdr_stub.go | 15 + .../x/net/internal/socket/msghdr_zos_s390x.go | 36 + .../x/net/internal/socket/norace.go | 13 + .../golang.org/x/net/internal/socket/race.go | 38 + .../x/net/internal/socket/rawconn.go | 91 + .../x/net/internal/socket/rawconn_mmsg.go | 71 + .../x/net/internal/socket/rawconn_msg.go | 74 + .../x/net/internal/socket/rawconn_nommsg.go | 16 + .../x/net/internal/socket/rawconn_nomsg.go | 16 + .../x/net/internal/socket/socket.go | 280 + .../golang.org/x/net/internal/socket/sys.go | 23 + .../x/net/internal/socket/sys_bsd.go | 16 + .../x/net/internal/socket/sys_const_unix.go | 21 + .../x/net/internal/socket/sys_linkname.go | 43 + .../x/net/internal/socket/sys_linux.go | 23 + .../x/net/internal/socket/sys_linux_386.go | 53 + .../x/net/internal/socket/sys_linux_386.s | 11 + .../x/net/internal/socket/sys_linux_amd64.go | 10 + .../x/net/internal/socket/sys_linux_arm.go | 10 + .../x/net/internal/socket/sys_linux_arm64.go | 10 + .../x/net/internal/socket/sys_linux_mips.go | 10 + .../x/net/internal/socket/sys_linux_mips64.go | 10 + .../net/internal/socket/sys_linux_mips64le.go | 10 + .../x/net/internal/socket/sys_linux_mipsle.go | 10 + .../x/net/internal/socket/sys_linux_ppc.go | 10 + .../x/net/internal/socket/sys_linux_ppc64.go | 10 + .../net/internal/socket/sys_linux_ppc64le.go | 10 + .../net/internal/socket/sys_linux_riscv64.go | 13 + .../x/net/internal/socket/sys_linux_s390x.go | 53 + .../x/net/internal/socket/sys_linux_s390x.s | 11 + .../x/net/internal/socket/sys_netbsd.go | 25 + .../x/net/internal/socket/sys_posix.go | 185 + .../x/net/internal/socket/sys_solaris.go | 59 + .../x/net/internal/socket/sys_solaris_amd64.s | 11 + .../x/net/internal/socket/sys_stub.go | 53 + .../x/net/internal/socket/sys_unix.go | 34 + .../x/net/internal/socket/sys_windows.go | 54 + .../x/net/internal/socket/sys_zos_s390x.go | 38 + .../x/net/internal/socket/sys_zos_s390x.s | 11 + .../x/net/internal/socket/zsys_aix_ppc64.go | 40 + .../x/net/internal/socket/zsys_darwin_386.go | 30 + .../net/internal/socket/zsys_darwin_amd64.go | 32 + .../x/net/internal/socket/zsys_darwin_arm.go | 30 + .../net/internal/socket/zsys_darwin_arm64.go | 32 + .../internal/socket/zsys_dragonfly_amd64.go | 32 + .../x/net/internal/socket/zsys_freebsd_386.go | 30 + .../net/internal/socket/zsys_freebsd_amd64.go | 32 + .../x/net/internal/socket/zsys_freebsd_arm.go | 30 + .../net/internal/socket/zsys_freebsd_arm64.go | 32 + .../x/net/internal/socket/zsys_linux_386.go | 35 + .../x/net/internal/socket/zsys_linux_amd64.go | 38 + .../x/net/internal/socket/zsys_linux_arm.go | 35 + .../x/net/internal/socket/zsys_linux_arm64.go | 38 + .../x/net/internal/socket/zsys_linux_mips.go | 35 + .../net/internal/socket/zsys_linux_mips64.go | 38 + .../internal/socket/zsys_linux_mips64le.go | 38 + .../net/internal/socket/zsys_linux_mipsle.go | 35 + .../x/net/internal/socket/zsys_linux_ppc.go | 35 + .../x/net/internal/socket/zsys_linux_ppc64.go | 38 + .../net/internal/socket/zsys_linux_ppc64le.go | 38 + .../net/internal/socket/zsys_linux_riscv64.go | 40 + .../x/net/internal/socket/zsys_linux_s390x.go | 38 + .../x/net/internal/socket/zsys_netbsd_386.go | 35 + .../net/internal/socket/zsys_netbsd_amd64.go | 38 + .../x/net/internal/socket/zsys_netbsd_arm.go | 35 + .../net/internal/socket/zsys_netbsd_arm64.go | 38 + .../x/net/internal/socket/zsys_openbsd_386.go | 30 + .../net/internal/socket/zsys_openbsd_amd64.go | 32 + .../x/net/internal/socket/zsys_openbsd_arm.go | 30 + .../net/internal/socket/zsys_openbsd_arm64.go | 32 + .../internal/socket/zsys_openbsd_mips64.go | 30 + .../net/internal/socket/zsys_solaris_amd64.go | 32 + .../x/net/internal/socket/zsys_zos_s390x.go | 28 + vendor/golang.org/x/net/ipv4/batch.go | 194 + vendor/golang.org/x/net/ipv4/control.go | 144 + vendor/golang.org/x/net/ipv4/control_bsd.go | 44 + .../golang.org/x/net/ipv4/control_pktinfo.go | 42 + vendor/golang.org/x/net/ipv4/control_stub.go | 14 + vendor/golang.org/x/net/ipv4/control_unix.go | 76 + .../golang.org/x/net/ipv4/control_windows.go | 12 + vendor/golang.org/x/net/ipv4/control_zos.go | 88 + vendor/golang.org/x/net/ipv4/dgramopt.go | 264 + vendor/golang.org/x/net/ipv4/doc.go | 244 + vendor/golang.org/x/net/ipv4/endpoint.go | 186 + vendor/golang.org/x/net/ipv4/genericopt.go | 55 + vendor/golang.org/x/net/ipv4/header.go | 172 + vendor/golang.org/x/net/ipv4/helper.go | 77 + vendor/golang.org/x/net/ipv4/iana.go | 38 + vendor/golang.org/x/net/ipv4/icmp.go | 57 + vendor/golang.org/x/net/ipv4/icmp_linux.go | 25 + vendor/golang.org/x/net/ipv4/icmp_stub.go | 26 + vendor/golang.org/x/net/ipv4/packet.go | 117 + vendor/golang.org/x/net/ipv4/payload.go | 23 + vendor/golang.org/x/net/ipv4/payload_cmsg.go | 85 + .../golang.org/x/net/ipv4/payload_nocmsg.go | 40 + vendor/golang.org/x/net/ipv4/sockopt.go | 44 + vendor/golang.org/x/net/ipv4/sockopt_posix.go | 72 + vendor/golang.org/x/net/ipv4/sockopt_stub.go | 43 + vendor/golang.org/x/net/ipv4/sys_aix.go | 44 + vendor/golang.org/x/net/ipv4/sys_asmreq.go | 123 + .../golang.org/x/net/ipv4/sys_asmreq_stub.go | 26 + vendor/golang.org/x/net/ipv4/sys_asmreqn.go | 45 + .../golang.org/x/net/ipv4/sys_asmreqn_stub.go | 22 + vendor/golang.org/x/net/ipv4/sys_bpf.go | 25 + vendor/golang.org/x/net/ipv4/sys_bpf_stub.go | 17 + vendor/golang.org/x/net/ipv4/sys_bsd.go | 42 + vendor/golang.org/x/net/ipv4/sys_darwin.go | 69 + vendor/golang.org/x/net/ipv4/sys_dragonfly.go | 39 + vendor/golang.org/x/net/ipv4/sys_freebsd.go | 80 + vendor/golang.org/x/net/ipv4/sys_linux.go | 61 + vendor/golang.org/x/net/ipv4/sys_solaris.go | 61 + vendor/golang.org/x/net/ipv4/sys_ssmreq.go | 53 + .../golang.org/x/net/ipv4/sys_ssmreq_stub.go | 22 + vendor/golang.org/x/net/ipv4/sys_stub.go | 14 + vendor/golang.org/x/net/ipv4/sys_windows.go | 44 + vendor/golang.org/x/net/ipv4/sys_zos.go | 57 + .../golang.org/x/net/ipv4/zsys_aix_ppc64.go | 17 + vendor/golang.org/x/net/ipv4/zsys_darwin.go | 59 + .../golang.org/x/net/ipv4/zsys_dragonfly.go | 13 + .../golang.org/x/net/ipv4/zsys_freebsd_386.go | 52 + .../x/net/ipv4/zsys_freebsd_amd64.go | 54 + .../golang.org/x/net/ipv4/zsys_freebsd_arm.go | 54 + .../x/net/ipv4/zsys_freebsd_arm64.go | 52 + .../golang.org/x/net/ipv4/zsys_linux_386.go | 72 + .../golang.org/x/net/ipv4/zsys_linux_amd64.go | 74 + .../golang.org/x/net/ipv4/zsys_linux_arm.go | 72 + .../golang.org/x/net/ipv4/zsys_linux_arm64.go | 74 + .../golang.org/x/net/ipv4/zsys_linux_mips.go | 72 + .../x/net/ipv4/zsys_linux_mips64.go | 74 + .../x/net/ipv4/zsys_linux_mips64le.go | 74 + .../x/net/ipv4/zsys_linux_mipsle.go | 72 + .../golang.org/x/net/ipv4/zsys_linux_ppc.go | 72 + .../golang.org/x/net/ipv4/zsys_linux_ppc64.go | 74 + .../x/net/ipv4/zsys_linux_ppc64le.go | 74 + .../x/net/ipv4/zsys_linux_riscv64.go | 77 + .../golang.org/x/net/ipv4/zsys_linux_s390x.go | 74 + vendor/golang.org/x/net/ipv4/zsys_netbsd.go | 13 + vendor/golang.org/x/net/ipv4/zsys_openbsd.go | 13 + vendor/golang.org/x/net/ipv4/zsys_solaris.go | 57 + .../golang.org/x/net/ipv4/zsys_zos_s390x.go | 56 + vendor/golang.org/x/net/ipv6/batch.go | 116 + vendor/golang.org/x/net/ipv6/control.go | 187 + .../x/net/ipv6/control_rfc2292_unix.go | 51 + .../x/net/ipv6/control_rfc3542_unix.go | 97 + vendor/golang.org/x/net/ipv6/control_stub.go | 14 + vendor/golang.org/x/net/ipv6/control_unix.go | 56 + .../golang.org/x/net/ipv6/control_windows.go | 12 + vendor/golang.org/x/net/ipv6/dgramopt.go | 301 + vendor/golang.org/x/net/ipv6/doc.go | 243 + vendor/golang.org/x/net/ipv6/endpoint.go | 127 + vendor/golang.org/x/net/ipv6/genericopt.go | 56 + vendor/golang.org/x/net/ipv6/header.go | 55 + vendor/golang.org/x/net/ipv6/helper.go | 58 + vendor/golang.org/x/net/ipv6/iana.go | 86 + vendor/golang.org/x/net/ipv6/icmp.go | 60 + vendor/golang.org/x/net/ipv6/icmp_bsd.go | 30 + vendor/golang.org/x/net/ipv6/icmp_linux.go | 27 + vendor/golang.org/x/net/ipv6/icmp_solaris.go | 27 + vendor/golang.org/x/net/ipv6/icmp_stub.go | 24 + vendor/golang.org/x/net/ipv6/icmp_windows.go | 22 + vendor/golang.org/x/net/ipv6/icmp_zos.go | 29 + vendor/golang.org/x/net/ipv6/payload.go | 23 + vendor/golang.org/x/net/ipv6/payload_cmsg.go | 71 + .../golang.org/x/net/ipv6/payload_nocmsg.go | 39 + vendor/golang.org/x/net/ipv6/sockopt.go | 43 + vendor/golang.org/x/net/ipv6/sockopt_posix.go | 90 + vendor/golang.org/x/net/ipv6/sockopt_stub.go | 47 + vendor/golang.org/x/net/ipv6/sys_aix.go | 80 + vendor/golang.org/x/net/ipv6/sys_asmreq.go | 25 + .../golang.org/x/net/ipv6/sys_asmreq_stub.go | 18 + vendor/golang.org/x/net/ipv6/sys_bpf.go | 25 + vendor/golang.org/x/net/ipv6/sys_bpf_stub.go | 17 + vendor/golang.org/x/net/ipv6/sys_bsd.go | 60 + vendor/golang.org/x/net/ipv6/sys_darwin.go | 80 + vendor/golang.org/x/net/ipv6/sys_freebsd.go | 94 + vendor/golang.org/x/net/ipv6/sys_linux.go | 76 + vendor/golang.org/x/net/ipv6/sys_solaris.go | 76 + vendor/golang.org/x/net/ipv6/sys_ssmreq.go | 55 + .../golang.org/x/net/ipv6/sys_ssmreq_stub.go | 22 + vendor/golang.org/x/net/ipv6/sys_stub.go | 14 + vendor/golang.org/x/net/ipv6/sys_windows.go | 68 + vendor/golang.org/x/net/ipv6/sys_zos.go | 72 + .../golang.org/x/net/ipv6/zsys_aix_ppc64.go | 69 + vendor/golang.org/x/net/ipv6/zsys_darwin.go | 64 + .../golang.org/x/net/ipv6/zsys_dragonfly.go | 42 + .../golang.org/x/net/ipv6/zsys_freebsd_386.go | 64 + .../x/net/ipv6/zsys_freebsd_amd64.go | 66 + .../golang.org/x/net/ipv6/zsys_freebsd_arm.go | 66 + .../x/net/ipv6/zsys_freebsd_arm64.go | 64 + .../golang.org/x/net/ipv6/zsys_linux_386.go | 72 + .../golang.org/x/net/ipv6/zsys_linux_amd64.go | 74 + .../golang.org/x/net/ipv6/zsys_linux_arm.go | 72 + .../golang.org/x/net/ipv6/zsys_linux_arm64.go | 74 + .../golang.org/x/net/ipv6/zsys_linux_mips.go | 72 + .../x/net/ipv6/zsys_linux_mips64.go | 74 + .../x/net/ipv6/zsys_linux_mips64le.go | 74 + .../x/net/ipv6/zsys_linux_mipsle.go | 72 + .../golang.org/x/net/ipv6/zsys_linux_ppc.go | 72 + .../golang.org/x/net/ipv6/zsys_linux_ppc64.go | 74 + .../x/net/ipv6/zsys_linux_ppc64le.go | 74 + .../x/net/ipv6/zsys_linux_riscv64.go | 77 + .../golang.org/x/net/ipv6/zsys_linux_s390x.go | 74 + vendor/golang.org/x/net/ipv6/zsys_netbsd.go | 42 + vendor/golang.org/x/net/ipv6/zsys_openbsd.go | 42 + vendor/golang.org/x/net/ipv6/zsys_solaris.go | 63 + .../golang.org/x/net/ipv6/zsys_zos_s390x.go | 62 + vendor/golang.org/x/sys/AUTHORS | 3 + vendor/golang.org/x/sys/CONTRIBUTORS | 3 + vendor/golang.org/x/sys/LICENSE | 27 + vendor/golang.org/x/sys/PATENTS | 22 + vendor/golang.org/x/sys/cpu/asm_aix_ppc64.s | 18 + vendor/golang.org/x/sys/cpu/byteorder.go | 65 + vendor/golang.org/x/sys/cpu/cpu.go | 287 + vendor/golang.org/x/sys/cpu/cpu_aix.go | 34 + vendor/golang.org/x/sys/cpu/cpu_arm.go | 73 + vendor/golang.org/x/sys/cpu/cpu_arm64.go | 172 + vendor/golang.org/x/sys/cpu/cpu_arm64.s | 32 + vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go | 12 + vendor/golang.org/x/sys/cpu/cpu_gc_s390x.go | 22 + vendor/golang.org/x/sys/cpu/cpu_gc_x86.go | 17 + .../golang.org/x/sys/cpu/cpu_gccgo_arm64.go | 12 + .../golang.org/x/sys/cpu/cpu_gccgo_s390x.go | 23 + vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c | 43 + vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go | 33 + vendor/golang.org/x/sys/cpu/cpu_linux.go | 16 + vendor/golang.org/x/sys/cpu/cpu_linux_arm.go | 39 + .../golang.org/x/sys/cpu/cpu_linux_arm64.go | 71 + .../golang.org/x/sys/cpu/cpu_linux_mips64x.go | 24 + .../golang.org/x/sys/cpu/cpu_linux_noinit.go | 10 + .../golang.org/x/sys/cpu/cpu_linux_ppc64x.go | 32 + .../golang.org/x/sys/cpu/cpu_linux_s390x.go | 40 + vendor/golang.org/x/sys/cpu/cpu_mips64x.go | 16 + vendor/golang.org/x/sys/cpu/cpu_mipsx.go | 12 + .../golang.org/x/sys/cpu/cpu_netbsd_arm64.go | 173 + vendor/golang.org/x/sys/cpu/cpu_other_arm.go | 10 + .../golang.org/x/sys/cpu/cpu_other_arm64.go | 10 + .../golang.org/x/sys/cpu/cpu_other_mips64x.go | 13 + vendor/golang.org/x/sys/cpu/cpu_ppc64x.go | 17 + vendor/golang.org/x/sys/cpu/cpu_riscv64.go | 12 + vendor/golang.org/x/sys/cpu/cpu_s390x.go | 172 + vendor/golang.org/x/sys/cpu/cpu_s390x.s | 58 + vendor/golang.org/x/sys/cpu/cpu_wasm.go | 18 + vendor/golang.org/x/sys/cpu/cpu_x86.go | 145 + vendor/golang.org/x/sys/cpu/cpu_x86.s | 28 + vendor/golang.org/x/sys/cpu/cpu_zos.go | 10 + vendor/golang.org/x/sys/cpu/cpu_zos_s390x.go | 25 + vendor/golang.org/x/sys/cpu/hwcap_linux.go | 56 + .../golang.org/x/sys/cpu/syscall_aix_gccgo.go | 27 + .../x/sys/cpu/syscall_aix_ppc64_gc.go | 36 + .../sys/internal/unsafeheader/unsafeheader.go | 30 + vendor/golang.org/x/sys/unix/.gitignore | 2 + vendor/golang.org/x/sys/unix/README.md | 184 + .../golang.org/x/sys/unix/affinity_linux.go | 86 + vendor/golang.org/x/sys/unix/aliases.go | 15 + vendor/golang.org/x/sys/unix/asm_aix_ppc64.s | 18 + vendor/golang.org/x/sys/unix/asm_bsd_386.s | 29 + vendor/golang.org/x/sys/unix/asm_bsd_amd64.s | 29 + vendor/golang.org/x/sys/unix/asm_bsd_arm.s | 29 + vendor/golang.org/x/sys/unix/asm_bsd_arm64.s | 29 + vendor/golang.org/x/sys/unix/asm_linux_386.s | 66 + .../golang.org/x/sys/unix/asm_linux_amd64.s | 58 + vendor/golang.org/x/sys/unix/asm_linux_arm.s | 57 + .../golang.org/x/sys/unix/asm_linux_arm64.s | 53 + .../golang.org/x/sys/unix/asm_linux_mips64x.s | 57 + .../golang.org/x/sys/unix/asm_linux_mipsx.s | 55 + .../golang.org/x/sys/unix/asm_linux_ppc64x.s | 45 + .../golang.org/x/sys/unix/asm_linux_riscv64.s | 49 + .../golang.org/x/sys/unix/asm_linux_s390x.s | 57 + .../x/sys/unix/asm_openbsd_mips64.s | 30 + .../golang.org/x/sys/unix/asm_solaris_amd64.s | 18 + vendor/golang.org/x/sys/unix/asm_zos_s390x.s | 426 + .../golang.org/x/sys/unix/bluetooth_linux.go | 36 + vendor/golang.org/x/sys/unix/cap_freebsd.go | 196 + vendor/golang.org/x/sys/unix/constants.go | 14 + vendor/golang.org/x/sys/unix/dev_aix_ppc.go | 27 + vendor/golang.org/x/sys/unix/dev_aix_ppc64.go | 29 + vendor/golang.org/x/sys/unix/dev_darwin.go | 24 + vendor/golang.org/x/sys/unix/dev_dragonfly.go | 30 + vendor/golang.org/x/sys/unix/dev_freebsd.go | 30 + vendor/golang.org/x/sys/unix/dev_linux.go | 42 + vendor/golang.org/x/sys/unix/dev_netbsd.go | 29 + vendor/golang.org/x/sys/unix/dev_openbsd.go | 29 + vendor/golang.org/x/sys/unix/dev_zos.go | 29 + vendor/golang.org/x/sys/unix/dirent.go | 103 + vendor/golang.org/x/sys/unix/endian_big.go | 10 + vendor/golang.org/x/sys/unix/endian_little.go | 10 + vendor/golang.org/x/sys/unix/env_unix.go | 32 + vendor/golang.org/x/sys/unix/epoll_zos.go | 221 + .../x/sys/unix/errors_freebsd_386.go | 233 + .../x/sys/unix/errors_freebsd_amd64.go | 233 + .../x/sys/unix/errors_freebsd_arm.go | 226 + .../x/sys/unix/errors_freebsd_arm64.go | 17 + vendor/golang.org/x/sys/unix/fcntl.go | 37 + vendor/golang.org/x/sys/unix/fcntl_darwin.go | 24 + .../x/sys/unix/fcntl_linux_32bit.go | 14 + vendor/golang.org/x/sys/unix/fdset.go | 30 + vendor/golang.org/x/sys/unix/fstatfs_zos.go | 164 + vendor/golang.org/x/sys/unix/gccgo.go | 60 + vendor/golang.org/x/sys/unix/gccgo_c.c | 45 + .../x/sys/unix/gccgo_linux_amd64.go | 21 + vendor/golang.org/x/sys/unix/ifreq_linux.go | 149 + vendor/golang.org/x/sys/unix/ioctl.go | 75 + vendor/golang.org/x/sys/unix/ioctl_linux.go | 219 + vendor/golang.org/x/sys/unix/ioctl_zos.go | 74 + vendor/golang.org/x/sys/unix/mkall.sh | 231 + vendor/golang.org/x/sys/unix/mkerrors.sh | 772 + vendor/golang.org/x/sys/unix/pagesize_unix.go | 16 + .../golang.org/x/sys/unix/pledge_openbsd.go | 163 + vendor/golang.org/x/sys/unix/ptrace_darwin.go | 12 + vendor/golang.org/x/sys/unix/ptrace_ios.go | 12 + vendor/golang.org/x/sys/unix/race.go | 31 + vendor/golang.org/x/sys/unix/race0.go | 26 + .../x/sys/unix/readdirent_getdents.go | 13 + .../x/sys/unix/readdirent_getdirentries.go | 20 + .../x/sys/unix/sockcmsg_dragonfly.go | 16 + .../golang.org/x/sys/unix/sockcmsg_linux.go | 85 + vendor/golang.org/x/sys/unix/sockcmsg_unix.go | 93 + .../x/sys/unix/sockcmsg_unix_other.go | 47 + vendor/golang.org/x/sys/unix/str.go | 27 + vendor/golang.org/x/sys/unix/syscall.go | 95 + vendor/golang.org/x/sys/unix/syscall_aix.go | 545 + .../golang.org/x/sys/unix/syscall_aix_ppc.go | 54 + .../x/sys/unix/syscall_aix_ppc64.go | 85 + vendor/golang.org/x/sys/unix/syscall_bsd.go | 625 + .../x/sys/unix/syscall_darwin.1_12.go | 32 + .../x/sys/unix/syscall_darwin.1_13.go | 108 + .../golang.org/x/sys/unix/syscall_darwin.go | 733 + .../x/sys/unix/syscall_darwin_amd64.go | 51 + .../x/sys/unix/syscall_darwin_arm64.go | 51 + .../x/sys/unix/syscall_darwin_libSystem.go | 27 + .../x/sys/unix/syscall_dragonfly.go | 542 + .../x/sys/unix/syscall_dragonfly_amd64.go | 57 + .../golang.org/x/sys/unix/syscall_freebsd.go | 869 + .../x/sys/unix/syscall_freebsd_386.go | 67 + .../x/sys/unix/syscall_freebsd_amd64.go | 67 + .../x/sys/unix/syscall_freebsd_arm.go | 63 + .../x/sys/unix/syscall_freebsd_arm64.go | 63 + .../golang.org/x/sys/unix/syscall_illumos.go | 186 + vendor/golang.org/x/sys/unix/syscall_linux.go | 2453 + .../x/sys/unix/syscall_linux_386.go | 346 + .../x/sys/unix/syscall_linux_alarm.go | 14 + .../x/sys/unix/syscall_linux_amd64.go | 151 + .../x/sys/unix/syscall_linux_amd64_gc.go | 13 + .../x/sys/unix/syscall_linux_arm.go | 248 + .../x/sys/unix/syscall_linux_arm64.go | 199 + .../golang.org/x/sys/unix/syscall_linux_gc.go | 15 + .../x/sys/unix/syscall_linux_gc_386.go | 17 + .../x/sys/unix/syscall_linux_gc_arm.go | 14 + .../x/sys/unix/syscall_linux_gccgo_386.go | 31 + .../x/sys/unix/syscall_linux_gccgo_arm.go | 21 + .../x/sys/unix/syscall_linux_mips64x.go | 195 + .../x/sys/unix/syscall_linux_mipsx.go | 207 + .../x/sys/unix/syscall_linux_ppc.go | 236 + .../x/sys/unix/syscall_linux_ppc64x.go | 122 + .../x/sys/unix/syscall_linux_riscv64.go | 183 + .../x/sys/unix/syscall_linux_s390x.go | 302 + .../x/sys/unix/syscall_linux_sparc64.go | 118 + .../golang.org/x/sys/unix/syscall_netbsd.go | 609 + .../x/sys/unix/syscall_netbsd_386.go | 38 + .../x/sys/unix/syscall_netbsd_amd64.go | 38 + .../x/sys/unix/syscall_netbsd_arm.go | 38 + .../x/sys/unix/syscall_netbsd_arm64.go | 38 + .../golang.org/x/sys/unix/syscall_openbsd.go | 387 + .../x/sys/unix/syscall_openbsd_386.go | 42 + .../x/sys/unix/syscall_openbsd_amd64.go | 42 + .../x/sys/unix/syscall_openbsd_arm.go | 42 + .../x/sys/unix/syscall_openbsd_arm64.go | 42 + .../x/sys/unix/syscall_openbsd_mips64.go | 35 + .../golang.org/x/sys/unix/syscall_solaris.go | 1004 + .../x/sys/unix/syscall_solaris_amd64.go | 28 + vendor/golang.org/x/sys/unix/syscall_unix.go | 486 + .../golang.org/x/sys/unix/syscall_unix_gc.go | 18 + .../x/sys/unix/syscall_unix_gc_ppc64x.go | 25 + .../x/sys/unix/syscall_zos_s390x.go | 1823 + vendor/golang.org/x/sys/unix/sysvshm_linux.go | 21 + vendor/golang.org/x/sys/unix/sysvshm_unix.go | 61 + .../x/sys/unix/sysvshm_unix_other.go | 14 + vendor/golang.org/x/sys/unix/timestruct.go | 77 + .../golang.org/x/sys/unix/unveil_openbsd.go | 42 + vendor/golang.org/x/sys/unix/xattr_bsd.go | 241 + .../golang.org/x/sys/unix/zerrors_aix_ppc.go | 1385 + .../x/sys/unix/zerrors_aix_ppc64.go | 1386 + .../x/sys/unix/zerrors_darwin_amd64.go | 1892 + .../x/sys/unix/zerrors_darwin_arm64.go | 1892 + .../x/sys/unix/zerrors_dragonfly_amd64.go | 1738 + .../x/sys/unix/zerrors_freebsd_386.go | 1948 + .../x/sys/unix/zerrors_freebsd_amd64.go | 1947 + .../x/sys/unix/zerrors_freebsd_arm.go | 1846 + .../x/sys/unix/zerrors_freebsd_arm64.go | 1948 + vendor/golang.org/x/sys/unix/zerrors_linux.go | 3083 + .../x/sys/unix/zerrors_linux_386.go | 826 + .../x/sys/unix/zerrors_linux_amd64.go | 826 + .../x/sys/unix/zerrors_linux_arm.go | 832 + .../x/sys/unix/zerrors_linux_arm64.go | 823 + .../x/sys/unix/zerrors_linux_mips.go | 833 + .../x/sys/unix/zerrors_linux_mips64.go | 833 + .../x/sys/unix/zerrors_linux_mips64le.go | 833 + .../x/sys/unix/zerrors_linux_mipsle.go | 833 + .../x/sys/unix/zerrors_linux_ppc.go | 885 + .../x/sys/unix/zerrors_linux_ppc64.go | 889 + .../x/sys/unix/zerrors_linux_ppc64le.go | 889 + .../x/sys/unix/zerrors_linux_riscv64.go | 813 + .../x/sys/unix/zerrors_linux_s390x.go | 888 + .../x/sys/unix/zerrors_linux_sparc64.go | 883 + .../x/sys/unix/zerrors_netbsd_386.go | 1780 + .../x/sys/unix/zerrors_netbsd_amd64.go | 1770 + .../x/sys/unix/zerrors_netbsd_arm.go | 1759 + .../x/sys/unix/zerrors_netbsd_arm64.go | 1770 + .../x/sys/unix/zerrors_openbsd_386.go | 1668 + .../x/sys/unix/zerrors_openbsd_amd64.go | 1775 + .../x/sys/unix/zerrors_openbsd_arm.go | 1670 + .../x/sys/unix/zerrors_openbsd_arm64.go | 1798 + .../x/sys/unix/zerrors_openbsd_mips64.go | 1863 + .../x/sys/unix/zerrors_solaris_amd64.go | 1557 + .../x/sys/unix/zerrors_zos_s390x.go | 860 + .../x/sys/unix/zptrace_armnn_linux.go | 42 + .../x/sys/unix/zptrace_linux_arm64.go | 17 + .../x/sys/unix/zptrace_mipsnn_linux.go | 51 + .../x/sys/unix/zptrace_mipsnnle_linux.go | 51 + .../x/sys/unix/zptrace_x86_linux.go | 81 + .../golang.org/x/sys/unix/zsyscall_aix_ppc.go | 1485 + .../x/sys/unix/zsyscall_aix_ppc64.go | 1443 + .../x/sys/unix/zsyscall_aix_ppc64_gc.go | 1192 + .../x/sys/unix/zsyscall_aix_ppc64_gccgo.go | 1070 + .../x/sys/unix/zsyscall_darwin_amd64.1_13.go | 40 + .../x/sys/unix/zsyscall_darwin_amd64.1_13.s | 25 + .../x/sys/unix/zsyscall_darwin_amd64.go | 2495 + .../x/sys/unix/zsyscall_darwin_amd64.s | 883 + .../x/sys/unix/zsyscall_darwin_arm64.1_13.go | 40 + .../x/sys/unix/zsyscall_darwin_arm64.1_13.s | 25 + .../x/sys/unix/zsyscall_darwin_arm64.go | 2495 + .../x/sys/unix/zsyscall_darwin_arm64.s | 883 + .../x/sys/unix/zsyscall_dragonfly_amd64.go | 1679 + .../x/sys/unix/zsyscall_freebsd_386.go | 2016 + .../x/sys/unix/zsyscall_freebsd_amd64.go | 2016 + .../x/sys/unix/zsyscall_freebsd_arm.go | 2016 + .../x/sys/unix/zsyscall_freebsd_arm64.go | 2016 + .../x/sys/unix/zsyscall_illumos_amd64.go | 128 + .../golang.org/x/sys/unix/zsyscall_linux.go | 2110 + .../x/sys/unix/zsyscall_linux_386.go | 537 + .../x/sys/unix/zsyscall_linux_amd64.go | 704 + .../x/sys/unix/zsyscall_linux_arm.go | 652 + .../x/sys/unix/zsyscall_linux_arm64.go | 603 + .../x/sys/unix/zsyscall_linux_mips.go | 704 + .../x/sys/unix/zsyscall_linux_mips64.go | 698 + .../x/sys/unix/zsyscall_linux_mips64le.go | 687 + .../x/sys/unix/zsyscall_linux_mipsle.go | 704 + .../x/sys/unix/zsyscall_linux_ppc.go | 709 + .../x/sys/unix/zsyscall_linux_ppc64.go | 755 + .../x/sys/unix/zsyscall_linux_ppc64le.go | 755 + .../x/sys/unix/zsyscall_linux_riscv64.go | 572 + .../x/sys/unix/zsyscall_linux_s390x.go | 546 + .../x/sys/unix/zsyscall_linux_sparc64.go | 699 + .../x/sys/unix/zsyscall_netbsd_386.go | 1850 + .../x/sys/unix/zsyscall_netbsd_amd64.go | 1850 + .../x/sys/unix/zsyscall_netbsd_arm.go | 1850 + .../x/sys/unix/zsyscall_netbsd_arm64.go | 1850 + .../x/sys/unix/zsyscall_openbsd_386.go | 1693 + .../x/sys/unix/zsyscall_openbsd_amd64.go | 1693 + .../x/sys/unix/zsyscall_openbsd_arm.go | 1693 + .../x/sys/unix/zsyscall_openbsd_arm64.go | 1693 + .../x/sys/unix/zsyscall_openbsd_mips64.go | 1693 + .../x/sys/unix/zsyscall_solaris_amd64.go | 2053 + .../x/sys/unix/zsyscall_zos_s390x.go | 1255 + .../x/sys/unix/zsysctl_openbsd_386.go | 274 + .../x/sys/unix/zsysctl_openbsd_amd64.go | 272 + .../x/sys/unix/zsysctl_openbsd_arm.go | 274 + .../x/sys/unix/zsysctl_openbsd_arm64.go | 276 + .../x/sys/unix/zsysctl_openbsd_mips64.go | 280 + .../x/sys/unix/zsysnum_darwin_amd64.go | 440 + .../x/sys/unix/zsysnum_darwin_arm64.go | 438 + .../x/sys/unix/zsysnum_dragonfly_amd64.go | 317 + .../x/sys/unix/zsysnum_freebsd_386.go | 397 + .../x/sys/unix/zsysnum_freebsd_amd64.go | 397 + .../x/sys/unix/zsysnum_freebsd_arm.go | 397 + .../x/sys/unix/zsysnum_freebsd_arm64.go | 397 + .../x/sys/unix/zsysnum_linux_386.go | 450 + .../x/sys/unix/zsysnum_linux_amd64.go | 372 + .../x/sys/unix/zsysnum_linux_arm.go | 414 + .../x/sys/unix/zsysnum_linux_arm64.go | 317 + .../x/sys/unix/zsysnum_linux_mips.go | 434 + .../x/sys/unix/zsysnum_linux_mips64.go | 364 + .../x/sys/unix/zsysnum_linux_mips64le.go | 364 + .../x/sys/unix/zsysnum_linux_mipsle.go | 434 + .../x/sys/unix/zsysnum_linux_ppc.go | 441 + .../x/sys/unix/zsysnum_linux_ppc64.go | 413 + .../x/sys/unix/zsysnum_linux_ppc64le.go | 413 + .../x/sys/unix/zsysnum_linux_riscv64.go | 315 + .../x/sys/unix/zsysnum_linux_s390x.go | 378 + .../x/sys/unix/zsysnum_linux_sparc64.go | 392 + .../x/sys/unix/zsysnum_netbsd_386.go | 275 + .../x/sys/unix/zsysnum_netbsd_amd64.go | 275 + .../x/sys/unix/zsysnum_netbsd_arm.go | 275 + .../x/sys/unix/zsysnum_netbsd_arm64.go | 275 + .../x/sys/unix/zsysnum_openbsd_386.go | 219 + .../x/sys/unix/zsysnum_openbsd_amd64.go | 219 + .../x/sys/unix/zsysnum_openbsd_arm.go | 219 + .../x/sys/unix/zsysnum_openbsd_arm64.go | 218 + .../x/sys/unix/zsysnum_openbsd_mips64.go | 221 + .../x/sys/unix/zsysnum_zos_s390x.go | 2670 + .../golang.org/x/sys/unix/ztypes_aix_ppc.go | 354 + .../golang.org/x/sys/unix/ztypes_aix_ppc64.go | 358 + .../x/sys/unix/ztypes_darwin_amd64.go | 768 + .../x/sys/unix/ztypes_darwin_arm64.go | 768 + .../x/sys/unix/ztypes_dragonfly_amd64.go | 474 + .../x/sys/unix/ztypes_freebsd_386.go | 723 + .../x/sys/unix/ztypes_freebsd_amd64.go | 726 + .../x/sys/unix/ztypes_freebsd_arm.go | 707 + .../x/sys/unix/ztypes_freebsd_arm64.go | 704 + .../x/sys/unix/ztypes_illumos_amd64.go | 42 + vendor/golang.org/x/sys/unix/ztypes_linux.go | 5581 ++ .../golang.org/x/sys/unix/ztypes_linux_386.go | 683 + .../x/sys/unix/ztypes_linux_amd64.go | 699 + .../golang.org/x/sys/unix/ztypes_linux_arm.go | 678 + .../x/sys/unix/ztypes_linux_arm64.go | 678 + .../x/sys/unix/ztypes_linux_mips.go | 683 + .../x/sys/unix/ztypes_linux_mips64.go | 681 + .../x/sys/unix/ztypes_linux_mips64le.go | 681 + .../x/sys/unix/ztypes_linux_mipsle.go | 683 + .../golang.org/x/sys/unix/ztypes_linux_ppc.go | 691 + .../x/sys/unix/ztypes_linux_ppc64.go | 687 + .../x/sys/unix/ztypes_linux_ppc64le.go | 687 + .../x/sys/unix/ztypes_linux_riscv64.go | 706 + .../x/sys/unix/ztypes_linux_s390x.go | 701 + .../x/sys/unix/ztypes_linux_sparc64.go | 682 + .../x/sys/unix/ztypes_netbsd_386.go | 502 + .../x/sys/unix/ztypes_netbsd_amd64.go | 510 + .../x/sys/unix/ztypes_netbsd_arm.go | 507 + .../x/sys/unix/ztypes_netbsd_arm64.go | 510 + .../x/sys/unix/ztypes_openbsd_386.go | 574 + .../x/sys/unix/ztypes_openbsd_amd64.go | 574 + .../x/sys/unix/ztypes_openbsd_arm.go | 575 + .../x/sys/unix/ztypes_openbsd_arm64.go | 568 + .../x/sys/unix/ztypes_openbsd_mips64.go | 568 + .../x/sys/unix/ztypes_solaris_amd64.go | 482 + .../golang.org/x/sys/unix/ztypes_zos_s390x.go | 406 + vendor/golang.org/x/sys/windows/aliases.go | 13 + .../golang.org/x/sys/windows/dll_windows.go | 416 + vendor/golang.org/x/sys/windows/empty.s | 9 + .../golang.org/x/sys/windows/env_windows.go | 54 + vendor/golang.org/x/sys/windows/eventlog.go | 21 + .../golang.org/x/sys/windows/exec_windows.go | 178 + .../x/sys/windows/memory_windows.go | 48 + vendor/golang.org/x/sys/windows/mkerrors.bash | 70 + .../x/sys/windows/mkknownfolderids.bash | 27 + vendor/golang.org/x/sys/windows/mksyscall.go | 10 + vendor/golang.org/x/sys/windows/race.go | 31 + vendor/golang.org/x/sys/windows/race0.go | 26 + .../x/sys/windows/security_windows.go | 1444 + vendor/golang.org/x/sys/windows/service.go | 247 + .../x/sys/windows/setupapi_windows.go | 1425 + vendor/golang.org/x/sys/windows/str.go | 23 + vendor/golang.org/x/sys/windows/syscall.go | 113 + .../x/sys/windows/syscall_windows.go | 1701 + .../golang.org/x/sys/windows/types_windows.go | 3176 + .../x/sys/windows/types_windows_386.go | 35 + .../x/sys/windows/types_windows_amd64.go | 34 + .../x/sys/windows/types_windows_arm.go | 35 + .../x/sys/windows/types_windows_arm64.go | 34 + .../x/sys/windows/zerrors_windows.go | 9468 +++ .../x/sys/windows/zknownfolderids_windows.go | 149 + .../x/sys/windows/zsyscall_windows.go | 4196 + .../hlandau/easymetric.v1/cexp/cexp.go | 97 + .../gopkg.in/hlandau/measurable.v1/README.md | 82 + .../hlandau/measurable.v1/measurable.go | 189 + vendor/gopkg.in/hlandau/passlib.v1/COPYING | 39 + .../hlandau/passlib.v1/abstract/compare.go | 11 + .../hlandau/passlib.v1/abstract/errors.go | 15 + .../hlandau/passlib.v1/abstract/scheme.go | 34 + vendor/gopkg.in/hlandau/passlib.v1/default.go | 141 + .../hlandau/passlib.v1/hash/argon2/argon2.go | 115 + .../passlib.v1/hash/argon2/raw/argon2.go | 186 + .../hlandau/passlib.v1/hash/bcrypt/bcrypt.go | 72 + .../hash/bcryptsha256/bcryptsha256.go | 96 + .../hlandau/passlib.v1/hash/pbkdf2/pbkdf2.go | 94 + .../passlib.v1/hash/pbkdf2/raw/base64.go | 20 + .../passlib.v1/hash/pbkdf2/raw/parse.go | 62 + .../passlib.v1/hash/pbkdf2/raw/pbkdf2.go | 15 + .../hlandau/passlib.v1/hash/pbkdf2/test.py | 30 + .../passlib.v1/hash/scrypt/raw/scrypt.go | 95 + .../hlandau/passlib.v1/hash/scrypt/scrypt.go | 113 + .../passlib.v1/hash/sha2crypt/raw/base64.go | 34 + .../passlib.v1/hash/sha2crypt/raw/parse.go | 82 + .../hash/sha2crypt/raw/sha2crypt.go | 187 + .../passlib.v1/hash/sha2crypt/sha2crypt.go | 147 + vendor/gopkg.in/hlandau/passlib.v1/passlib.go | 174 + vendor/modules.txt | 114 + 913 files changed, 317350 insertions(+) create mode 100644 vendor/blitter.com/go/chacha20/LICENSE create mode 100644 vendor/blitter.com/go/chacha20/README.md create mode 100644 vendor/blitter.com/go/chacha20/chacha20.go create mode 100644 vendor/blitter.com/go/chacha20/internal/api/api.go create mode 100644 vendor/blitter.com/go/chacha20/internal/hardware/impl.go create mode 100644 vendor/blitter.com/go/chacha20/internal/hardware/impl_amd64.go create mode 100644 vendor/blitter.com/go/chacha20/internal/hardware/impl_amd64.s create mode 100644 vendor/blitter.com/go/chacha20/internal/ref/impl.go create mode 100644 vendor/blitter.com/go/cryptmt/README.md create mode 100644 vendor/blitter.com/go/cryptmt/cryptmt.go create mode 100644 vendor/blitter.com/go/goutmp/LICENSE.mit create mode 100644 vendor/blitter.com/go/goutmp/README.md create mode 100644 vendor/blitter.com/go/goutmp/goutmp_bsd.go create mode 100644 vendor/blitter.com/go/goutmp/goutmp_linux.go create mode 100644 vendor/blitter.com/go/herradurakex/LICENSE.gpl create mode 100644 vendor/blitter.com/go/herradurakex/LICENSE.mit create mode 100644 vendor/blitter.com/go/herradurakex/Makefile create mode 100644 vendor/blitter.com/go/herradurakex/README.md create mode 100644 vendor/blitter.com/go/herradurakex/herradurakex.go create mode 100644 vendor/blitter.com/go/hopscotch/README.md create mode 100644 vendor/blitter.com/go/hopscotch/hopscotch.go create mode 100644 vendor/blitter.com/go/kyber/.gitignore create mode 100644 vendor/blitter.com/go/kyber/LICENSE create mode 100644 vendor/blitter.com/go/kyber/README.md create mode 100644 vendor/blitter.com/go/kyber/cbd.go create mode 100644 vendor/blitter.com/go/kyber/doc.go create mode 100644 vendor/blitter.com/go/kyber/hwaccel.go create mode 100644 vendor/blitter.com/go/kyber/hwaccel_amd64.go create mode 100644 vendor/blitter.com/go/kyber/hwaccel_amd64.s create mode 100644 vendor/blitter.com/go/kyber/hwaccel_ref.go create mode 100644 vendor/blitter.com/go/kyber/indcpa.go create mode 100644 vendor/blitter.com/go/kyber/kem.go create mode 100644 vendor/blitter.com/go/kyber/kex.go create mode 100644 vendor/blitter.com/go/kyber/ntt.go create mode 100644 vendor/blitter.com/go/kyber/params.go create mode 100644 vendor/blitter.com/go/kyber/poly.go create mode 100644 vendor/blitter.com/go/kyber/polyvec.go create mode 100644 vendor/blitter.com/go/kyber/precomp.go create mode 100644 vendor/blitter.com/go/kyber/reduce.go create mode 100644 vendor/blitter.com/go/mtwist/mtwist.go create mode 100644 vendor/blitter.com/go/newhope/LICENSE create mode 100644 vendor/blitter.com/go/newhope/batcher.go create mode 100644 vendor/blitter.com/go/newhope/error_correction.go create mode 100644 vendor/blitter.com/go/newhope/newhope.go create mode 100644 vendor/blitter.com/go/newhope/newhope_simple.go create mode 100644 vendor/blitter.com/go/newhope/ntt.go create mode 100644 vendor/blitter.com/go/newhope/params.go create mode 100644 vendor/blitter.com/go/newhope/poly.go create mode 100644 vendor/blitter.com/go/newhope/poly_simple.go create mode 100644 vendor/blitter.com/go/newhope/precomp.go create mode 100644 vendor/blitter.com/go/newhope/reduce.go create mode 100644 vendor/github.com/aead/chacha20/LICENSE create mode 100644 vendor/github.com/aead/chacha20/chacha/chacha.go create mode 100644 vendor/github.com/aead/chacha20/chacha/chachaAVX2_amd64.s create mode 100644 vendor/github.com/aead/chacha20/chacha/chacha_386.go create mode 100644 vendor/github.com/aead/chacha20/chacha/chacha_386.s create mode 100644 vendor/github.com/aead/chacha20/chacha/chacha_amd64.go create mode 100644 vendor/github.com/aead/chacha20/chacha/chacha_amd64.s create mode 100644 vendor/github.com/aead/chacha20/chacha/chacha_generic.go create mode 100644 vendor/github.com/aead/chacha20/chacha/chacha_ref.go create mode 100644 vendor/github.com/aead/chacha20/chacha/const.s create mode 100644 vendor/github.com/aead/chacha20/chacha/macro.s create mode 100644 vendor/github.com/creack/pty/.gitignore create mode 100644 vendor/github.com/creack/pty/Dockerfile.golang create mode 100644 vendor/github.com/creack/pty/Dockerfile.riscv create mode 100644 vendor/github.com/creack/pty/LICENSE create mode 100644 vendor/github.com/creack/pty/README.md create mode 100644 vendor/github.com/creack/pty/asm_solaris_amd64.s create mode 100644 vendor/github.com/creack/pty/doc.go create mode 100644 vendor/github.com/creack/pty/ioctl.go create mode 100644 vendor/github.com/creack/pty/ioctl_bsd.go create mode 100644 vendor/github.com/creack/pty/ioctl_solaris.go create mode 100644 vendor/github.com/creack/pty/ioctl_unsupported.go create mode 100644 vendor/github.com/creack/pty/mktypes.bash create mode 100644 vendor/github.com/creack/pty/pty_darwin.go create mode 100644 vendor/github.com/creack/pty/pty_dragonfly.go create mode 100644 vendor/github.com/creack/pty/pty_freebsd.go create mode 100644 vendor/github.com/creack/pty/pty_linux.go create mode 100644 vendor/github.com/creack/pty/pty_netbsd.go create mode 100644 vendor/github.com/creack/pty/pty_openbsd.go create mode 100644 vendor/github.com/creack/pty/pty_solaris.go create mode 100644 vendor/github.com/creack/pty/pty_unsupported.go create mode 100644 vendor/github.com/creack/pty/run.go create mode 100644 vendor/github.com/creack/pty/start.go create mode 100644 vendor/github.com/creack/pty/start_windows.go create mode 100644 vendor/github.com/creack/pty/test_crosscompile.sh create mode 100644 vendor/github.com/creack/pty/winsize.go create mode 100644 vendor/github.com/creack/pty/winsize_unix.go create mode 100644 vendor/github.com/creack/pty/winsize_unsupported.go create mode 100644 vendor/github.com/creack/pty/ztypes_386.go create mode 100644 vendor/github.com/creack/pty/ztypes_amd64.go create mode 100644 vendor/github.com/creack/pty/ztypes_arm.go create mode 100644 vendor/github.com/creack/pty/ztypes_arm64.go create mode 100644 vendor/github.com/creack/pty/ztypes_dragonfly_amd64.go create mode 100644 vendor/github.com/creack/pty/ztypes_freebsd_386.go create mode 100644 vendor/github.com/creack/pty/ztypes_freebsd_amd64.go create mode 100644 vendor/github.com/creack/pty/ztypes_freebsd_arm.go create mode 100644 vendor/github.com/creack/pty/ztypes_freebsd_arm64.go create mode 100644 vendor/github.com/creack/pty/ztypes_freebsd_ppc64.go create mode 100644 vendor/github.com/creack/pty/ztypes_loong64.go create mode 100644 vendor/github.com/creack/pty/ztypes_mipsx.go create mode 100644 vendor/github.com/creack/pty/ztypes_netbsd_32bit_int.go create mode 100644 vendor/github.com/creack/pty/ztypes_openbsd_32bit_int.go create mode 100644 vendor/github.com/creack/pty/ztypes_ppc64.go create mode 100644 vendor/github.com/creack/pty/ztypes_ppc64le.go create mode 100644 vendor/github.com/creack/pty/ztypes_riscvx.go create mode 100644 vendor/github.com/creack/pty/ztypes_s390x.go create mode 100644 vendor/github.com/jameskeane/bcrypt/.gitignore create mode 100644 vendor/github.com/jameskeane/bcrypt/LICENSE create mode 100644 vendor/github.com/jameskeane/bcrypt/README create mode 100644 vendor/github.com/jameskeane/bcrypt/bcrypt.go create mode 100644 vendor/github.com/jameskeane/bcrypt/cipher.go create mode 100644 vendor/github.com/klauspost/cpuid/v2/.gitignore create mode 100644 vendor/github.com/klauspost/cpuid/v2/.goreleaser.yml create mode 100644 vendor/github.com/klauspost/cpuid/v2/.travis.yml create mode 100644 vendor/github.com/klauspost/cpuid/v2/CONTRIBUTING.txt create mode 100644 vendor/github.com/klauspost/cpuid/v2/LICENSE create mode 100644 vendor/github.com/klauspost/cpuid/v2/README.md create mode 100644 vendor/github.com/klauspost/cpuid/v2/cpuid.go create mode 100644 vendor/github.com/klauspost/cpuid/v2/cpuid_386.s create mode 100644 vendor/github.com/klauspost/cpuid/v2/cpuid_amd64.s create mode 100644 vendor/github.com/klauspost/cpuid/v2/cpuid_arm64.s create mode 100644 vendor/github.com/klauspost/cpuid/v2/detect_arm64.go create mode 100644 vendor/github.com/klauspost/cpuid/v2/detect_ref.go create mode 100644 vendor/github.com/klauspost/cpuid/v2/detect_x86.go create mode 100644 vendor/github.com/klauspost/cpuid/v2/featureid_string.go create mode 100644 vendor/github.com/klauspost/cpuid/v2/os_darwin_arm64.go create mode 100644 vendor/github.com/klauspost/cpuid/v2/os_linux_arm64.go create mode 100644 vendor/github.com/klauspost/cpuid/v2/os_other_arm64.go create mode 100644 vendor/github.com/klauspost/cpuid/v2/os_safe_linux_arm64.go create mode 100644 vendor/github.com/klauspost/cpuid/v2/os_unsafe_linux_arm64.go create mode 100644 vendor/github.com/klauspost/cpuid/v2/test-architectures.sh create mode 100644 vendor/github.com/klauspost/reedsolomon/.gitignore create mode 100644 vendor/github.com/klauspost/reedsolomon/.travis.yml create mode 100644 vendor/github.com/klauspost/reedsolomon/LICENSE create mode 100644 vendor/github.com/klauspost/reedsolomon/README.md create mode 100644 vendor/github.com/klauspost/reedsolomon/appveyor.yml create mode 100644 vendor/github.com/klauspost/reedsolomon/galois.go create mode 100644 vendor/github.com/klauspost/reedsolomon/galoisAvx512_amd64.go create mode 100644 vendor/github.com/klauspost/reedsolomon/galoisAvx512_amd64.s create mode 100644 vendor/github.com/klauspost/reedsolomon/galois_amd64.go create mode 100644 vendor/github.com/klauspost/reedsolomon/galois_amd64.s create mode 100644 vendor/github.com/klauspost/reedsolomon/galois_arm64.go create mode 100644 vendor/github.com/klauspost/reedsolomon/galois_arm64.s create mode 100644 vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.go create mode 100644 vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.s create mode 100644 vendor/github.com/klauspost/reedsolomon/galois_gen_none.go create mode 100644 vendor/github.com/klauspost/reedsolomon/galois_gen_switch_amd64.go create mode 100644 vendor/github.com/klauspost/reedsolomon/galois_noasm.go create mode 100644 vendor/github.com/klauspost/reedsolomon/galois_notamd64.go create mode 100644 vendor/github.com/klauspost/reedsolomon/galois_ppc64le.go create mode 100644 vendor/github.com/klauspost/reedsolomon/galois_ppc64le.s create mode 100644 vendor/github.com/klauspost/reedsolomon/inversion_tree.go create mode 100644 vendor/github.com/klauspost/reedsolomon/matrix.go create mode 100644 vendor/github.com/klauspost/reedsolomon/options.go create mode 100644 vendor/github.com/klauspost/reedsolomon/reedsolomon.go create mode 100644 vendor/github.com/klauspost/reedsolomon/streaming.go create mode 100644 vendor/github.com/kuking/go-frodokem/.gitignore create mode 100644 vendor/github.com/kuking/go-frodokem/LICENSE create mode 100644 vendor/github.com/kuking/go-frodokem/Makefile create mode 100644 vendor/github.com/kuking/go-frodokem/README.md create mode 100644 vendor/github.com/kuking/go-frodokem/impl.go create mode 100644 vendor/github.com/kuking/go-frodokem/types.go create mode 100644 vendor/github.com/mattn/go-isatty/LICENSE create mode 100644 vendor/github.com/mattn/go-isatty/README.md create mode 100644 vendor/github.com/mattn/go-isatty/doc.go create mode 100644 vendor/github.com/mattn/go-isatty/go.test.sh create mode 100644 vendor/github.com/mattn/go-isatty/isatty_bsd.go create mode 100644 vendor/github.com/mattn/go-isatty/isatty_others.go create mode 100644 vendor/github.com/mattn/go-isatty/isatty_plan9.go create mode 100644 vendor/github.com/mattn/go-isatty/isatty_solaris.go create mode 100644 vendor/github.com/mattn/go-isatty/isatty_tcgets.go create mode 100644 vendor/github.com/mattn/go-isatty/isatty_windows.go create mode 100644 vendor/github.com/pkg/errors/.gitignore create mode 100644 vendor/github.com/pkg/errors/.travis.yml create mode 100644 vendor/github.com/pkg/errors/LICENSE create mode 100644 vendor/github.com/pkg/errors/Makefile create mode 100644 vendor/github.com/pkg/errors/README.md create mode 100644 vendor/github.com/pkg/errors/appveyor.yml create mode 100644 vendor/github.com/pkg/errors/errors.go create mode 100644 vendor/github.com/pkg/errors/go113.go create mode 100644 vendor/github.com/pkg/errors/stack.go create mode 100644 vendor/github.com/templexxx/cpufeat/.gitignore create mode 100644 vendor/github.com/templexxx/cpufeat/LICENSE create mode 100644 vendor/github.com/templexxx/cpufeat/README.md create mode 100644 vendor/github.com/templexxx/cpufeat/cpu.go create mode 100644 vendor/github.com/templexxx/cpufeat/cpu_arm.go create mode 100644 vendor/github.com/templexxx/cpufeat/cpu_arm64.go create mode 100644 vendor/github.com/templexxx/cpufeat/cpu_mips.go create mode 100644 vendor/github.com/templexxx/cpufeat/cpu_mips64.go create mode 100644 vendor/github.com/templexxx/cpufeat/cpu_mips64le.go create mode 100644 vendor/github.com/templexxx/cpufeat/cpu_mipsle.go create mode 100644 vendor/github.com/templexxx/cpufeat/cpu_ppc64.go create mode 100644 vendor/github.com/templexxx/cpufeat/cpu_ppc64le.go create mode 100644 vendor/github.com/templexxx/cpufeat/cpu_s390x.go create mode 100644 vendor/github.com/templexxx/cpufeat/cpu_x86.go create mode 100644 vendor/github.com/templexxx/cpufeat/cpu_x86.s create mode 100644 vendor/github.com/templexxx/xor/.gitattributes create mode 100644 vendor/github.com/templexxx/xor/.gitignore create mode 100644 vendor/github.com/templexxx/xor/LICENSE create mode 100644 vendor/github.com/templexxx/xor/README.md create mode 100644 vendor/github.com/templexxx/xor/avx2_amd64.s create mode 100644 vendor/github.com/templexxx/xor/nosimd.go create mode 100644 vendor/github.com/templexxx/xor/sse2_amd64.s create mode 100644 vendor/github.com/templexxx/xor/xor.go create mode 100644 vendor/github.com/templexxx/xor/xor_amd64.go create mode 100644 vendor/github.com/templexxx/xor/xor_other.go create mode 100644 vendor/github.com/tjfoc/gmsm/LICENSE create mode 100644 vendor/github.com/tjfoc/gmsm/sm4/sm4.go create mode 100644 vendor/github.com/tjfoc/gmsm/sm4/sm4_gcm.go create mode 100644 vendor/github.com/tjfoc/gmsm/sm4/utils.go create mode 100644 vendor/github.com/xtaci/kcp-go/.gitignore create mode 100644 vendor/github.com/xtaci/kcp-go/.travis.yml create mode 100644 vendor/github.com/xtaci/kcp-go/LICENSE create mode 100644 vendor/github.com/xtaci/kcp-go/README.md create mode 100644 vendor/github.com/xtaci/kcp-go/batchconn.go create mode 100644 vendor/github.com/xtaci/kcp-go/crypt.go create mode 100644 vendor/github.com/xtaci/kcp-go/donate.png create mode 100644 vendor/github.com/xtaci/kcp-go/entropy.go create mode 100644 vendor/github.com/xtaci/kcp-go/fec.go create mode 100644 vendor/github.com/xtaci/kcp-go/flame.png create mode 100644 vendor/github.com/xtaci/kcp-go/frame.png create mode 100644 vendor/github.com/xtaci/kcp-go/kcp-go.png create mode 100644 vendor/github.com/xtaci/kcp-go/kcp.go create mode 100644 vendor/github.com/xtaci/kcp-go/readloop.go create mode 100644 vendor/github.com/xtaci/kcp-go/readloop_generic.go create mode 100644 vendor/github.com/xtaci/kcp-go/readloop_linux.go create mode 100644 vendor/github.com/xtaci/kcp-go/sess.go create mode 100644 vendor/github.com/xtaci/kcp-go/snmp.go create mode 100644 vendor/github.com/xtaci/kcp-go/tx.go create mode 100644 vendor/github.com/xtaci/kcp-go/tx_generic.go create mode 100644 vendor/github.com/xtaci/kcp-go/tx_linux.go create mode 100644 vendor/github.com/xtaci/kcp-go/wechat_donate.jpg create mode 100644 vendor/golang.org/x/crypto/AUTHORS create mode 100644 vendor/golang.org/x/crypto/CONTRIBUTORS create mode 100644 vendor/golang.org/x/crypto/LICENSE create mode 100644 vendor/golang.org/x/crypto/PATENTS create mode 100644 vendor/golang.org/x/crypto/argon2/argon2.go create mode 100644 vendor/golang.org/x/crypto/argon2/blake2b.go create mode 100644 vendor/golang.org/x/crypto/argon2/blamka_amd64.go create mode 100644 vendor/golang.org/x/crypto/argon2/blamka_amd64.s create mode 100644 vendor/golang.org/x/crypto/argon2/blamka_generic.go create mode 100644 vendor/golang.org/x/crypto/argon2/blamka_ref.go create mode 100644 vendor/golang.org/x/crypto/bcrypt/base64.go create mode 100644 vendor/golang.org/x/crypto/bcrypt/bcrypt.go create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2b.go create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.go create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.s create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2b_amd64.go create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2b_amd64.s create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2b_generic.go create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2b_ref.go create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2x.go create mode 100644 vendor/golang.org/x/crypto/blake2b/register.go create mode 100644 vendor/golang.org/x/crypto/blowfish/block.go create mode 100644 vendor/golang.org/x/crypto/blowfish/cipher.go create mode 100644 vendor/golang.org/x/crypto/blowfish/const.go create mode 100644 vendor/golang.org/x/crypto/cast5/cast5.go create mode 100644 vendor/golang.org/x/crypto/internal/subtle/aliasing.go create mode 100644 vendor/golang.org/x/crypto/internal/subtle/aliasing_purego.go create mode 100644 vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/hsalsa20.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa208.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.s create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa20_noasm.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa20_ref.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa20.go create mode 100644 vendor/golang.org/x/crypto/scrypt/scrypt.go create mode 100644 vendor/golang.org/x/crypto/sha3/doc.go create mode 100644 vendor/golang.org/x/crypto/sha3/hashes.go create mode 100644 vendor/golang.org/x/crypto/sha3/hashes_generic.go create mode 100644 vendor/golang.org/x/crypto/sha3/keccakf.go create mode 100644 vendor/golang.org/x/crypto/sha3/keccakf_amd64.go create mode 100644 vendor/golang.org/x/crypto/sha3/keccakf_amd64.s create mode 100644 vendor/golang.org/x/crypto/sha3/register.go create mode 100644 vendor/golang.org/x/crypto/sha3/sha3.go create mode 100644 vendor/golang.org/x/crypto/sha3/sha3_s390x.go create mode 100644 vendor/golang.org/x/crypto/sha3/sha3_s390x.s create mode 100644 vendor/golang.org/x/crypto/sha3/shake.go create mode 100644 vendor/golang.org/x/crypto/sha3/shake_generic.go create mode 100644 vendor/golang.org/x/crypto/sha3/xor.go create mode 100644 vendor/golang.org/x/crypto/sha3/xor_generic.go create mode 100644 vendor/golang.org/x/crypto/sha3/xor_unaligned.go create mode 100644 vendor/golang.org/x/crypto/tea/cipher.go create mode 100644 vendor/golang.org/x/crypto/twofish/twofish.go create mode 100644 vendor/golang.org/x/crypto/xtea/block.go create mode 100644 vendor/golang.org/x/crypto/xtea/cipher.go create mode 100644 vendor/golang.org/x/net/AUTHORS create mode 100644 vendor/golang.org/x/net/CONTRIBUTORS create mode 100644 vendor/golang.org/x/net/LICENSE create mode 100644 vendor/golang.org/x/net/PATENTS create mode 100644 vendor/golang.org/x/net/bpf/asm.go create mode 100644 vendor/golang.org/x/net/bpf/constants.go create mode 100644 vendor/golang.org/x/net/bpf/doc.go create mode 100644 vendor/golang.org/x/net/bpf/instructions.go create mode 100644 vendor/golang.org/x/net/bpf/setter.go create mode 100644 vendor/golang.org/x/net/bpf/vm.go create mode 100644 vendor/golang.org/x/net/bpf/vm_instructions.go create mode 100644 vendor/golang.org/x/net/internal/iana/const.go create mode 100644 vendor/golang.org/x/net/internal/socket/cmsghdr.go create mode 100644 vendor/golang.org/x/net/internal/socket/cmsghdr_bsd.go create mode 100644 vendor/golang.org/x/net/internal/socket/cmsghdr_linux_32bit.go create mode 100644 vendor/golang.org/x/net/internal/socket/cmsghdr_linux_64bit.go create mode 100644 vendor/golang.org/x/net/internal/socket/cmsghdr_solaris_64bit.go create mode 100644 vendor/golang.org/x/net/internal/socket/cmsghdr_stub.go create mode 100644 vendor/golang.org/x/net/internal/socket/cmsghdr_unix.go create mode 100644 vendor/golang.org/x/net/internal/socket/cmsghdr_zos_s390x.go create mode 100644 vendor/golang.org/x/net/internal/socket/complete_dontwait.go create mode 100644 vendor/golang.org/x/net/internal/socket/complete_nodontwait.go create mode 100644 vendor/golang.org/x/net/internal/socket/empty.s create mode 100644 vendor/golang.org/x/net/internal/socket/error_unix.go create mode 100644 vendor/golang.org/x/net/internal/socket/error_windows.go create mode 100644 vendor/golang.org/x/net/internal/socket/iovec_32bit.go create mode 100644 vendor/golang.org/x/net/internal/socket/iovec_64bit.go create mode 100644 vendor/golang.org/x/net/internal/socket/iovec_solaris_64bit.go create mode 100644 vendor/golang.org/x/net/internal/socket/iovec_stub.go create mode 100644 vendor/golang.org/x/net/internal/socket/mmsghdr_stub.go create mode 100644 vendor/golang.org/x/net/internal/socket/mmsghdr_unix.go create mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_bsd.go create mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_bsdvar.go create mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_linux.go create mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_linux_32bit.go create mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_linux_64bit.go create mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_openbsd.go create mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_solaris_64bit.go create mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_stub.go create mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_zos_s390x.go create mode 100644 vendor/golang.org/x/net/internal/socket/norace.go create mode 100644 vendor/golang.org/x/net/internal/socket/race.go create mode 100644 vendor/golang.org/x/net/internal/socket/rawconn.go create mode 100644 vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go create mode 100644 vendor/golang.org/x/net/internal/socket/rawconn_msg.go create mode 100644 vendor/golang.org/x/net/internal/socket/rawconn_nommsg.go create mode 100644 vendor/golang.org/x/net/internal/socket/rawconn_nomsg.go create mode 100644 vendor/golang.org/x/net/internal/socket/socket.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_bsd.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_const_unix.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linkname.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_386.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_386.s create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_amd64.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_arm.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_arm64.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_mips.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_mips64.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_mips64le.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_mipsle.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_ppc.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_ppc64.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_ppc64le.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_riscv64.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_s390x.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_s390x.s create mode 100644 vendor/golang.org/x/net/internal/socket/sys_netbsd.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_posix.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_solaris.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_solaris_amd64.s create mode 100644 vendor/golang.org/x/net/internal/socket/sys_stub.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_unix.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_windows.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_zos_s390x.go create mode 100644 vendor/golang.org/x/net/internal/socket/sys_zos_s390x.s create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_aix_ppc64.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_darwin_386.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_darwin_amd64.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_darwin_arm.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_darwin_arm64.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_dragonfly_amd64.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_freebsd_386.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_freebsd_amd64.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm64.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_386.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_ppc.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_riscv64.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm64.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_openbsd_386.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_openbsd_amd64.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm64.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_openbsd_mips64.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_solaris_amd64.go create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_zos_s390x.go create mode 100644 vendor/golang.org/x/net/ipv4/batch.go create mode 100644 vendor/golang.org/x/net/ipv4/control.go create mode 100644 vendor/golang.org/x/net/ipv4/control_bsd.go create mode 100644 vendor/golang.org/x/net/ipv4/control_pktinfo.go create mode 100644 vendor/golang.org/x/net/ipv4/control_stub.go create mode 100644 vendor/golang.org/x/net/ipv4/control_unix.go create mode 100644 vendor/golang.org/x/net/ipv4/control_windows.go create mode 100644 vendor/golang.org/x/net/ipv4/control_zos.go create mode 100644 vendor/golang.org/x/net/ipv4/dgramopt.go create mode 100644 vendor/golang.org/x/net/ipv4/doc.go create mode 100644 vendor/golang.org/x/net/ipv4/endpoint.go create mode 100644 vendor/golang.org/x/net/ipv4/genericopt.go create mode 100644 vendor/golang.org/x/net/ipv4/header.go create mode 100644 vendor/golang.org/x/net/ipv4/helper.go create mode 100644 vendor/golang.org/x/net/ipv4/iana.go create mode 100644 vendor/golang.org/x/net/ipv4/icmp.go create mode 100644 vendor/golang.org/x/net/ipv4/icmp_linux.go create mode 100644 vendor/golang.org/x/net/ipv4/icmp_stub.go create mode 100644 vendor/golang.org/x/net/ipv4/packet.go create mode 100644 vendor/golang.org/x/net/ipv4/payload.go create mode 100644 vendor/golang.org/x/net/ipv4/payload_cmsg.go create mode 100644 vendor/golang.org/x/net/ipv4/payload_nocmsg.go create mode 100644 vendor/golang.org/x/net/ipv4/sockopt.go create mode 100644 vendor/golang.org/x/net/ipv4/sockopt_posix.go create mode 100644 vendor/golang.org/x/net/ipv4/sockopt_stub.go create mode 100644 vendor/golang.org/x/net/ipv4/sys_aix.go create mode 100644 vendor/golang.org/x/net/ipv4/sys_asmreq.go create mode 100644 vendor/golang.org/x/net/ipv4/sys_asmreq_stub.go create mode 100644 vendor/golang.org/x/net/ipv4/sys_asmreqn.go create mode 100644 vendor/golang.org/x/net/ipv4/sys_asmreqn_stub.go create mode 100644 vendor/golang.org/x/net/ipv4/sys_bpf.go create mode 100644 vendor/golang.org/x/net/ipv4/sys_bpf_stub.go create mode 100644 vendor/golang.org/x/net/ipv4/sys_bsd.go create mode 100644 vendor/golang.org/x/net/ipv4/sys_darwin.go create mode 100644 vendor/golang.org/x/net/ipv4/sys_dragonfly.go create mode 100644 vendor/golang.org/x/net/ipv4/sys_freebsd.go create mode 100644 vendor/golang.org/x/net/ipv4/sys_linux.go create mode 100644 vendor/golang.org/x/net/ipv4/sys_solaris.go create mode 100644 vendor/golang.org/x/net/ipv4/sys_ssmreq.go create mode 100644 vendor/golang.org/x/net/ipv4/sys_ssmreq_stub.go create mode 100644 vendor/golang.org/x/net/ipv4/sys_stub.go create mode 100644 vendor/golang.org/x/net/ipv4/sys_windows.go create mode 100644 vendor/golang.org/x/net/ipv4/sys_zos.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_aix_ppc64.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_darwin.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_dragonfly.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_freebsd_386.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_freebsd_amd64.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_freebsd_arm.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_freebsd_arm64.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_386.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_arm.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_mips.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_riscv64.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_netbsd.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_openbsd.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_solaris.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_zos_s390x.go create mode 100644 vendor/golang.org/x/net/ipv6/batch.go create mode 100644 vendor/golang.org/x/net/ipv6/control.go create mode 100644 vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go create mode 100644 vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go create mode 100644 vendor/golang.org/x/net/ipv6/control_stub.go create mode 100644 vendor/golang.org/x/net/ipv6/control_unix.go create mode 100644 vendor/golang.org/x/net/ipv6/control_windows.go create mode 100644 vendor/golang.org/x/net/ipv6/dgramopt.go create mode 100644 vendor/golang.org/x/net/ipv6/doc.go create mode 100644 vendor/golang.org/x/net/ipv6/endpoint.go create mode 100644 vendor/golang.org/x/net/ipv6/genericopt.go create mode 100644 vendor/golang.org/x/net/ipv6/header.go create mode 100644 vendor/golang.org/x/net/ipv6/helper.go create mode 100644 vendor/golang.org/x/net/ipv6/iana.go create mode 100644 vendor/golang.org/x/net/ipv6/icmp.go create mode 100644 vendor/golang.org/x/net/ipv6/icmp_bsd.go create mode 100644 vendor/golang.org/x/net/ipv6/icmp_linux.go create mode 100644 vendor/golang.org/x/net/ipv6/icmp_solaris.go create mode 100644 vendor/golang.org/x/net/ipv6/icmp_stub.go create mode 100644 vendor/golang.org/x/net/ipv6/icmp_windows.go create mode 100644 vendor/golang.org/x/net/ipv6/icmp_zos.go create mode 100644 vendor/golang.org/x/net/ipv6/payload.go create mode 100644 vendor/golang.org/x/net/ipv6/payload_cmsg.go create mode 100644 vendor/golang.org/x/net/ipv6/payload_nocmsg.go create mode 100644 vendor/golang.org/x/net/ipv6/sockopt.go create mode 100644 vendor/golang.org/x/net/ipv6/sockopt_posix.go create mode 100644 vendor/golang.org/x/net/ipv6/sockopt_stub.go create mode 100644 vendor/golang.org/x/net/ipv6/sys_aix.go create mode 100644 vendor/golang.org/x/net/ipv6/sys_asmreq.go create mode 100644 vendor/golang.org/x/net/ipv6/sys_asmreq_stub.go create mode 100644 vendor/golang.org/x/net/ipv6/sys_bpf.go create mode 100644 vendor/golang.org/x/net/ipv6/sys_bpf_stub.go create mode 100644 vendor/golang.org/x/net/ipv6/sys_bsd.go create mode 100644 vendor/golang.org/x/net/ipv6/sys_darwin.go create mode 100644 vendor/golang.org/x/net/ipv6/sys_freebsd.go create mode 100644 vendor/golang.org/x/net/ipv6/sys_linux.go create mode 100644 vendor/golang.org/x/net/ipv6/sys_solaris.go create mode 100644 vendor/golang.org/x/net/ipv6/sys_ssmreq.go create mode 100644 vendor/golang.org/x/net/ipv6/sys_ssmreq_stub.go create mode 100644 vendor/golang.org/x/net/ipv6/sys_stub.go create mode 100644 vendor/golang.org/x/net/ipv6/sys_windows.go create mode 100644 vendor/golang.org/x/net/ipv6/sys_zos.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_aix_ppc64.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_darwin.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_dragonfly.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_freebsd_386.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_freebsd_amd64.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_freebsd_arm.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_freebsd_arm64.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_386.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_arm.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_mips.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_riscv64.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_netbsd.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_openbsd.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_solaris.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_zos_s390x.go create mode 100644 vendor/golang.org/x/sys/AUTHORS create mode 100644 vendor/golang.org/x/sys/CONTRIBUTORS create mode 100644 vendor/golang.org/x/sys/LICENSE create mode 100644 vendor/golang.org/x/sys/PATENTS create mode 100644 vendor/golang.org/x/sys/cpu/asm_aix_ppc64.s create mode 100644 vendor/golang.org/x/sys/cpu/byteorder.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_aix.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_arm.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_arm64.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_arm64.s create mode 100644 vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_gc_s390x.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_gc_x86.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_gccgo_s390x.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c create mode 100644 vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_linux.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_linux_arm.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_linux_mips64x.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_linux_s390x.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_mips64x.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_mipsx.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_netbsd_arm64.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_other_arm.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_other_arm64.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_other_mips64x.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_ppc64x.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_riscv64.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_s390x.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_s390x.s create mode 100644 vendor/golang.org/x/sys/cpu/cpu_wasm.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_x86.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_x86.s create mode 100644 vendor/golang.org/x/sys/cpu/cpu_zos.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_zos_s390x.go create mode 100644 vendor/golang.org/x/sys/cpu/hwcap_linux.go create mode 100644 vendor/golang.org/x/sys/cpu/syscall_aix_gccgo.go create mode 100644 vendor/golang.org/x/sys/cpu/syscall_aix_ppc64_gc.go create mode 100644 vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go create mode 100644 vendor/golang.org/x/sys/unix/.gitignore create mode 100644 vendor/golang.org/x/sys/unix/README.md create mode 100644 vendor/golang.org/x/sys/unix/affinity_linux.go create mode 100644 vendor/golang.org/x/sys/unix/aliases.go create mode 100644 vendor/golang.org/x/sys/unix/asm_aix_ppc64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_bsd_386.s create mode 100644 vendor/golang.org/x/sys/unix/asm_bsd_amd64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_bsd_arm.s create mode 100644 vendor/golang.org/x/sys/unix/asm_bsd_arm64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_386.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_amd64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_arm.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_arm64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_mips64x.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_mipsx.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_riscv64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_s390x.s create mode 100644 vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_solaris_amd64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_zos_s390x.s create mode 100644 vendor/golang.org/x/sys/unix/bluetooth_linux.go create mode 100644 vendor/golang.org/x/sys/unix/cap_freebsd.go create mode 100644 vendor/golang.org/x/sys/unix/constants.go create mode 100644 vendor/golang.org/x/sys/unix/dev_aix_ppc.go create mode 100644 vendor/golang.org/x/sys/unix/dev_aix_ppc64.go create mode 100644 vendor/golang.org/x/sys/unix/dev_darwin.go create mode 100644 vendor/golang.org/x/sys/unix/dev_dragonfly.go create mode 100644 vendor/golang.org/x/sys/unix/dev_freebsd.go create mode 100644 vendor/golang.org/x/sys/unix/dev_linux.go create mode 100644 vendor/golang.org/x/sys/unix/dev_netbsd.go create mode 100644 vendor/golang.org/x/sys/unix/dev_openbsd.go create mode 100644 vendor/golang.org/x/sys/unix/dev_zos.go create mode 100644 vendor/golang.org/x/sys/unix/dirent.go create mode 100644 vendor/golang.org/x/sys/unix/endian_big.go create mode 100644 vendor/golang.org/x/sys/unix/endian_little.go create mode 100644 vendor/golang.org/x/sys/unix/env_unix.go create mode 100644 vendor/golang.org/x/sys/unix/epoll_zos.go create mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/fcntl.go create mode 100644 vendor/golang.org/x/sys/unix/fcntl_darwin.go create mode 100644 vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go create mode 100644 vendor/golang.org/x/sys/unix/fdset.go create mode 100644 vendor/golang.org/x/sys/unix/fstatfs_zos.go create mode 100644 vendor/golang.org/x/sys/unix/gccgo.go create mode 100644 vendor/golang.org/x/sys/unix/gccgo_c.c create mode 100644 vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/ifreq_linux.go create mode 100644 vendor/golang.org/x/sys/unix/ioctl.go create mode 100644 vendor/golang.org/x/sys/unix/ioctl_linux.go create mode 100644 vendor/golang.org/x/sys/unix/ioctl_zos.go create mode 100644 vendor/golang.org/x/sys/unix/mkall.sh create mode 100644 vendor/golang.org/x/sys/unix/mkerrors.sh create mode 100644 vendor/golang.org/x/sys/unix/pagesize_unix.go create mode 100644 vendor/golang.org/x/sys/unix/pledge_openbsd.go create mode 100644 vendor/golang.org/x/sys/unix/ptrace_darwin.go create mode 100644 vendor/golang.org/x/sys/unix/ptrace_ios.go create mode 100644 vendor/golang.org/x/sys/unix/race.go create mode 100644 vendor/golang.org/x/sys/unix/race0.go create mode 100644 vendor/golang.org/x/sys/unix/readdirent_getdents.go create mode 100644 vendor/golang.org/x/sys/unix/readdirent_getdirentries.go create mode 100644 vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go create mode 100644 vendor/golang.org/x/sys/unix/sockcmsg_linux.go create mode 100644 vendor/golang.org/x/sys/unix/sockcmsg_unix.go create mode 100644 vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go create mode 100644 vendor/golang.org/x/sys/unix/str.go create mode 100644 vendor/golang.org/x/sys/unix/syscall.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_aix.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_aix_ppc.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_bsd.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin.1_12.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_dragonfly.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_illumos.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_386.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_alarm.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_arm.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gc.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_ppc.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_s390x.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_solaris.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_unix.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_unix_gc.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_zos_s390x.go create mode 100644 vendor/golang.org/x/sys/unix/sysvshm_linux.go create mode 100644 vendor/golang.org/x/sys/unix/sysvshm_unix.go create mode 100644 vendor/golang.org/x/sys/unix/sysvshm_unix_other.go create mode 100644 vendor/golang.org/x/sys/unix/timestruct.go create mode 100644 vendor/golang.org/x/sys/unix/unveil_openbsd.go create mode 100644 vendor/golang.org/x/sys/unix/xattr_bsd.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_386.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mips.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go create mode 100644 vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go create mode 100644 vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go create mode 100644 vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go create mode 100644 vendor/golang.org/x/sys/unix/zptrace_x86_linux.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go create mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_illumos_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_386.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_arm.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mips.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go create mode 100644 vendor/golang.org/x/sys/windows/aliases.go create mode 100644 vendor/golang.org/x/sys/windows/dll_windows.go create mode 100644 vendor/golang.org/x/sys/windows/empty.s create mode 100644 vendor/golang.org/x/sys/windows/env_windows.go create mode 100644 vendor/golang.org/x/sys/windows/eventlog.go create mode 100644 vendor/golang.org/x/sys/windows/exec_windows.go create mode 100644 vendor/golang.org/x/sys/windows/memory_windows.go create mode 100644 vendor/golang.org/x/sys/windows/mkerrors.bash create mode 100644 vendor/golang.org/x/sys/windows/mkknownfolderids.bash create mode 100644 vendor/golang.org/x/sys/windows/mksyscall.go create mode 100644 vendor/golang.org/x/sys/windows/race.go create mode 100644 vendor/golang.org/x/sys/windows/race0.go create mode 100644 vendor/golang.org/x/sys/windows/security_windows.go create mode 100644 vendor/golang.org/x/sys/windows/service.go create mode 100644 vendor/golang.org/x/sys/windows/setupapi_windows.go create mode 100644 vendor/golang.org/x/sys/windows/str.go create mode 100644 vendor/golang.org/x/sys/windows/syscall.go create mode 100644 vendor/golang.org/x/sys/windows/syscall_windows.go create mode 100644 vendor/golang.org/x/sys/windows/types_windows.go create mode 100644 vendor/golang.org/x/sys/windows/types_windows_386.go create mode 100644 vendor/golang.org/x/sys/windows/types_windows_amd64.go create mode 100644 vendor/golang.org/x/sys/windows/types_windows_arm.go create mode 100644 vendor/golang.org/x/sys/windows/types_windows_arm64.go create mode 100644 vendor/golang.org/x/sys/windows/zerrors_windows.go create mode 100644 vendor/golang.org/x/sys/windows/zknownfolderids_windows.go create mode 100644 vendor/golang.org/x/sys/windows/zsyscall_windows.go create mode 100644 vendor/gopkg.in/hlandau/easymetric.v1/cexp/cexp.go create mode 100644 vendor/gopkg.in/hlandau/measurable.v1/README.md create mode 100644 vendor/gopkg.in/hlandau/measurable.v1/measurable.go create mode 100644 vendor/gopkg.in/hlandau/passlib.v1/COPYING create mode 100644 vendor/gopkg.in/hlandau/passlib.v1/abstract/compare.go create mode 100644 vendor/gopkg.in/hlandau/passlib.v1/abstract/errors.go create mode 100644 vendor/gopkg.in/hlandau/passlib.v1/abstract/scheme.go create mode 100644 vendor/gopkg.in/hlandau/passlib.v1/default.go create mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/argon2/argon2.go create mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/argon2/raw/argon2.go create mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/bcrypt/bcrypt.go create mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/bcryptsha256/bcryptsha256.go create mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/pbkdf2.go create mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/base64.go create mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/parse.go create mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/pbkdf2.go create mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/test.py create mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/scrypt/raw/scrypt.go create mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/scrypt/scrypt.go create mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/base64.go create mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/parse.go create mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/sha2crypt.go create mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/sha2crypt.go create mode 100644 vendor/gopkg.in/hlandau/passlib.v1/passlib.go create mode 100644 vendor/modules.txt diff --git a/vendor/blitter.com/go/chacha20/LICENSE b/vendor/blitter.com/go/chacha20/LICENSE new file mode 100644 index 0000000..dba13ed --- /dev/null +++ b/vendor/blitter.com/go/chacha20/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/vendor/blitter.com/go/chacha20/README.md b/vendor/blitter.com/go/chacha20/README.md new file mode 100644 index 0000000..104f4ac --- /dev/null +++ b/vendor/blitter.com/go/chacha20/README.md @@ -0,0 +1,13 @@ +### chacha20 - ChaCha20 +#### Yawning Angel (yawning at schwanenlied dot me) + +Yet another Go ChaCha20 implementation. Everything else I found was slow, +didn't support all the variants I need to use, or relied on cgo to go fast. + +Features: + + * 20 round, 256 bit key only. Everything else is pointless and stupid. + * IETF 96 bit nonce variant. + * XChaCha 24 byte nonce variant. + * SSSE3 and AVX2 support on amd64 targets. + * Incremental encrypt/decrypt support, unlike golang.org/x/crypto/salsa20. diff --git a/vendor/blitter.com/go/chacha20/chacha20.go b/vendor/blitter.com/go/chacha20/chacha20.go new file mode 100644 index 0000000..fa90fb1 --- /dev/null +++ b/vendor/blitter.com/go/chacha20/chacha20.go @@ -0,0 +1,290 @@ +// Copryright (C) 2019 Yawning Angel +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Package chacha20 implements the ChaCha20 stream cipher. +package chacha20 // import "blitter.com/go/chacha20" + +import ( + "crypto/cipher" + "encoding/binary" + "errors" + "math" + + "blitter.com/go/chacha20/internal/api" + "blitter.com/go/chacha20/internal/hardware" + "blitter.com/go/chacha20/internal/ref" +) + +const ( + // KeySize is the ChaCha20 key size in bytes. + KeySize = 32 + + // NonceSize is the ChaCha20 nonce size in bytes. + NonceSize = 8 + + // INonceSize is the IETF ChaCha20 nonce size in bytes. + INonceSize = 12 + + // XNonceSize is the XChaCha20 nonce size in bytes. + XNonceSize = 24 + + // HNonceSize is the HChaCha20 nonce size in bytes. + HNonceSize = 16 +) + +var ( + // ErrInvalidKey is the error returned when the key is invalid. + ErrInvalidKey = errors.New("chacha20: key length must be KeySize bytes") + + // ErrInvalidNonce is the error returned when the nonce is invalid. + ErrInvalidNonce = errors.New("chacha20: nonce length must be NonceSize/INonceSize/XNonceSize bytes") + + // ErrInvalidCounter is the error returned when the counter is invalid. + ErrInvalidCounter = errors.New("chacha20: block counter is invalid (out of range)") + + supportedImpls []api.Implementation + activeImpl api.Implementation + + _ cipher.Stream = (*Cipher)(nil) +) + +// Cipher is an instance of ChaCha20/XChaCha20 using a particular key and nonce. +type Cipher struct { + state [api.StateSize]uint32 + buf [api.BlockSize]byte + + off int + ietf bool +} + +// Reset zeros the key data so that it will no longer appear in the process's +// memory. +func (c *Cipher) Reset() { + for i := range c.state { + c.state[i] = 0 + } + for i := range c.buf { + c.buf[i] = 0 + } +} + +// Seek sets the block counter to a given offset. +func (c *Cipher) Seek(blockCounter uint64) error { + if c.ietf { + if blockCounter > math.MaxUint32 { + return ErrInvalidCounter + } + c.state[12] = uint32(blockCounter) + } else { + c.state[12] = uint32(blockCounter) + c.state[13] = uint32(blockCounter >> 32) + } + c.off = api.BlockSize + return nil +} + +// ReKey reinitializes the ChaCha20/XChaCha20 instance with the provided key +// and nonce. +func (c *Cipher) ReKey(key, nonce []byte) error { + c.Reset() + return c.doReKey(key, nonce) +} + +func (c *Cipher) doReKey(key, nonce []byte) error { + if len(key) != KeySize { + return ErrInvalidKey + } + + var subKey []byte + switch len(nonce) { + case NonceSize, INonceSize: + case XNonceSize: + subKey = c.buf[:KeySize] + activeImpl.HChaCha(key, nonce, subKey) + key = subKey + nonce = nonce[16:24] + default: + return ErrInvalidNonce + } + + _ = key[31] // Force bounds check elimination. + + c.state[0] = api.Sigma0 + c.state[1] = api.Sigma1 + c.state[2] = api.Sigma2 + c.state[3] = api.Sigma3 + c.state[4] = binary.LittleEndian.Uint32(key[0:4]) + c.state[5] = binary.LittleEndian.Uint32(key[4:8]) + c.state[6] = binary.LittleEndian.Uint32(key[8:12]) + c.state[7] = binary.LittleEndian.Uint32(key[12:16]) + c.state[8] = binary.LittleEndian.Uint32(key[16:20]) + c.state[9] = binary.LittleEndian.Uint32(key[20:24]) + c.state[10] = binary.LittleEndian.Uint32(key[24:28]) + c.state[11] = binary.LittleEndian.Uint32(key[28:32]) + c.state[12] = 0 + if len(nonce) == INonceSize { + _ = nonce[11] // Force bounds check elimination. + c.state[13] = binary.LittleEndian.Uint32(nonce[0:4]) + c.state[14] = binary.LittleEndian.Uint32(nonce[4:8]) + c.state[15] = binary.LittleEndian.Uint32(nonce[8:12]) + c.ietf = true + } else { + _ = nonce[7] // Force bounds check elimination. + c.state[13] = 0 + c.state[14] = binary.LittleEndian.Uint32(nonce[0:4]) + c.state[15] = binary.LittleEndian.Uint32(nonce[4:8]) + c.ietf = false + } + c.off = api.BlockSize + + if subKey != nil { + for i := range subKey { + subKey[i] = 0 + } + } + + return nil +} + +// New returns a new ChaCha20/XChaCha20 instance. +func New(key, nonce []byte) (*Cipher, error) { + var c Cipher + if err := c.doReKey(key, nonce); err != nil { + return nil, err + } + + return &c, nil +} + +// HChaCha is the HChaCha20 hash function used to make XChaCha. +func HChaCha(key, nonce []byte, dst *[32]byte) { + activeImpl.HChaCha(key, nonce, dst[:]) +} + +// XORKeyStream sets dst to the result of XORing src with the key stream. Dst +// and src may be the same slice but otherwise should not overlap. +func (c *Cipher) XORKeyStream(dst, src []byte) { + if len(dst) < len(src) { + src = src[:len(dst)] + } + + for remaining := len(src); remaining > 0; { + // Process multiple blocks at once. + if c.off == api.BlockSize { + nrBlocks := remaining / api.BlockSize + directBytes := nrBlocks * api.BlockSize + if nrBlocks > 0 { + c.doBlocks(dst, src, nrBlocks) + remaining -= directBytes + if remaining == 0 { + return + } + dst = dst[directBytes:] + src = src[directBytes:] + } + + // If there's a partial block, generate 1 block of keystream into + // the internal buffer. + c.doBlocks(c.buf[:], nil, 1) + c.off = 0 + } + + // Process partial blocks from the buffered keystream. + toXor := api.BlockSize - c.off + if remaining < toXor { + toXor = remaining + } + if toXor > 0 { + // The inliner doesn't want to inline this function, but my + // attempts to force BCE don't seem to work with manual + // inlining. + // + // Taking the extra function call overhead here appears to be + // worth it. + c.xorBufBytes(dst, src, toXor) + + dst = dst[toXor:] + src = src[toXor:] + + remaining -= toXor + } + } +} + +func (c *Cipher) xorBufBytes(dst, src []byte, n int) { + // Force bounds check elimination. + buf := c.buf[c.off:] + _ = buf[n-1] + _ = dst[n-1] + _ = src[n-1] + + for i := 0; i < n; i++ { + dst[i] = buf[i] ^ src[i] + } + c.off += n +} + +// KeyStream sets dst to the raw keystream. +func (c *Cipher) KeyStream(dst []byte) { + for remaining := len(dst); remaining > 0; { + // Process multiple blocks at once. + if c.off == api.BlockSize { + nrBlocks := remaining / api.BlockSize + directBytes := nrBlocks * api.BlockSize + if nrBlocks > 0 { + c.doBlocks(dst, nil, nrBlocks) + remaining -= directBytes + if remaining == 0 { + return + } + dst = dst[directBytes:] + } + + // If there's a partial block, generate 1 block of keystream into + // the internal buffer. + c.doBlocks(c.buf[:], nil, 1) + c.off = 0 + } + + // Process partial blocks from the buffered keystream. + toCopy := api.BlockSize - c.off + if remaining < toCopy { + toCopy = remaining + } + if toCopy > 0 { + copy(dst[:toCopy], c.buf[c.off:c.off+toCopy]) + dst = dst[toCopy:] + remaining -= toCopy + c.off += toCopy + } + } +} + +func (c *Cipher) doBlocks(dst, src []byte, nrBlocks int) { + if c.ietf { + ctr := uint64(c.state[12]) + if ctr+uint64(nrBlocks) > math.MaxUint32 { + panic("chacha20: will exceed key stream per nonce limit") + } + } + + activeImpl.Blocks(&c.state, dst, src, nrBlocks) +} + +func init() { + supportedImpls = hardware.Register(supportedImpls) + supportedImpls = ref.Register(supportedImpls) + activeImpl = supportedImpls[0] +} diff --git a/vendor/blitter.com/go/chacha20/internal/api/api.go b/vendor/blitter.com/go/chacha20/internal/api/api.go new file mode 100644 index 0000000..e347812 --- /dev/null +++ b/vendor/blitter.com/go/chacha20/internal/api/api.go @@ -0,0 +1,59 @@ +// Copryright (C) 2019 Yawning Angel +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Package api provides the ChaCha20 implementation abstract interface. +package api + +const ( + // BlockSize is the size of a ChaCha20 block in bytes. + BlockSize = 64 + + // StateSize is the size of the ChaCha20 state as 32 bit unsigned words. + StateSize = 16 + + // HashSize is the size of the HChaCha output in bytes. + HashSize = 32 + + // HNonceSize is the HChaCha20 nonce size in bytes. + HNonceSize = 16 + + // Sigma0 is the first word of the ChaCha constant. + Sigma0 = uint32(0x61707865) + + // Sigma1 is the second word of the ChaCha constant. + Sigma1 = uint32(0x3320646e) + + // Sigma2 is the third word of the ChaCha constant. + Sigma2 = uint32(0x79622d32) + + // Sigma3 is the fourth word of the ChaCha constant. + Sigma3 = uint32(0x6b206574) +) + +// Implementation is a ChaCha20 implementation +type Implementation interface { + // Name returns the name of the implementation. + Name() string + + // Blocks calculates the ChaCha20 blocks. If src is not nil, dst will + // be set to the XOR of src with the key stream, otherwise dst will be + // set to the key stream. + Blocks(x *[StateSize]uint32, dst, src []byte, nrBlocks int) + + // HChaCha calculates the HChaCha20 hash. + // + // Note: `dst` is guaranteed to be HashSize bytes. + HChaCha(key, nonce []byte, dst []byte) +} diff --git a/vendor/blitter.com/go/chacha20/internal/hardware/impl.go b/vendor/blitter.com/go/chacha20/internal/hardware/impl.go new file mode 100644 index 0000000..0c63e3a --- /dev/null +++ b/vendor/blitter.com/go/chacha20/internal/hardware/impl.go @@ -0,0 +1,27 @@ +// Copryright (C) 2019 Yawning Angel +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Package hardware provides the hardware accelerated ChaCha20 implementations. +package hardware + +import "blitter.com/go/chacha20/internal/api" + +var hardwareImpls []api.Implementation + +// Register appends the implementation(s) to the provided slice, and returns the +// new slice. +func Register(impls []api.Implementation) []api.Implementation { + return append(impls, hardwareImpls...) +} diff --git a/vendor/blitter.com/go/chacha20/internal/hardware/impl_amd64.go b/vendor/blitter.com/go/chacha20/internal/hardware/impl_amd64.go new file mode 100644 index 0000000..31cbf8b --- /dev/null +++ b/vendor/blitter.com/go/chacha20/internal/hardware/impl_amd64.go @@ -0,0 +1,88 @@ +// Copryright (C) 2019 Yawning Angel +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// +build amd64,!noasm + +package hardware + +import ( + "golang.org/x/sys/cpu" + + "blitter.com/go/chacha20/internal/api" +) + +//go:noescape +func blocksAVX2(s *[api.StateSize]uint32, in, out []byte) + +//go:noescape +func hChaChaAVX2(key, nonce []byte, dst *byte) + +//go:noescape +func blocksSSSE3(s *[api.StateSize]uint32, in, out []byte) + +//go:noescape +func hChaChaSSSE3(key, nonce []byte, dst *byte) + +type implAmd64 struct { + name string + + blocksFn func(*[api.StateSize]uint32, []byte, []byte, int) + hChaChaFn func([]byte, []byte, *byte) +} + +func (impl *implAmd64) Name() string { + return impl.name +} + +func (impl *implAmd64) Blocks(x *[api.StateSize]uint32, dst, src []byte, nrBlocks int) { + impl.blocksFn(x, dst, src, nrBlocks) +} + +func (impl *implAmd64) HChaCha(key, nonce []byte, dst []byte) { + impl.hChaChaFn(key, nonce, &dst[0]) +} + +func blockWrapper(fn func(*[api.StateSize]uint32, []byte, []byte)) func(*[api.StateSize]uint32, []byte, []byte, int) { + return func(x *[api.StateSize]uint32, dst, src []byte, nrBlocks int) { + sz := nrBlocks * api.BlockSize + if src != nil { + fn(x, src[:sz], dst[:sz]) + } else { + // Sub-optimal, but the compiler special cases this to an assembly + // optimized runtime.memclrNoHeapPointers, so it's not terrible. + for i := range dst[:sz] { + dst[i] = 0 + } + fn(x, dst[:sz], dst[:sz]) + } + } +} + +func init() { + if cpu.X86.HasAVX2 { + hardwareImpls = append(hardwareImpls, &implAmd64{ + name: "amd64_avx2", + blocksFn: blockWrapper(blocksAVX2), + hChaChaFn: hChaChaAVX2, + }) + } + if cpu.X86.HasSSE3 { + hardwareImpls = append(hardwareImpls, &implAmd64{ + name: "amd64_ssse3", + blocksFn: blockWrapper(blocksSSSE3), + hChaChaFn: hChaChaSSSE3, + }) + } +} diff --git a/vendor/blitter.com/go/chacha20/internal/hardware/impl_amd64.s b/vendor/blitter.com/go/chacha20/internal/hardware/impl_amd64.s new file mode 100644 index 0000000..fb93eef --- /dev/null +++ b/vendor/blitter.com/go/chacha20/internal/hardware/impl_amd64.s @@ -0,0 +1,1682 @@ +// Copryright (C) 2019 Yawning Angel +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// +build !noasm + +#include "textflag.h" + +DATA ·chacha_constants<>+0x00(SB)/4, $0x61707865 +DATA ·chacha_constants<>+0x04(SB)/4, $0x3320646E +DATA ·chacha_constants<>+0x08(SB)/4, $0x79622D32 +DATA ·chacha_constants<>+0x0c(SB)/4, $0x6B206574 +DATA ·chacha_constants<>+0x10(SB)/8, $0x0504070601000302 +DATA ·chacha_constants<>+0x18(SB)/8, $0x0D0C0F0E09080B0A +DATA ·chacha_constants<>+0x20(SB)/8, $0x0605040702010003 +DATA ·chacha_constants<>+0x28(SB)/8, $0x0E0D0C0F0A09080B +GLOBL ·chacha_constants<>(SB), (NOPTR+RODATA), $48 + +// func blocksAVX2(s *[api.StateSize]uint32, in, out []byte) +TEXT ·blocksAVX2(SB), NOSPLIT, $576-56 + // This is Andrew Moon's AVX2 ChaCha implementation taken from + // supercop-20171218, with some minor changes, primarily calling + // convention and assembly dialect related. + + // Align the stack on a 64 byte boundary. + MOVQ SP, BP + ADDQ $64, BP + ANDQ $-64, BP + + // Go calling convention -> SYSV AMD64 (and a fixup). + MOVQ s+0(FP), DI // &s -> DI + ADDQ $16, DI // Skip the ChaCha constants in the chachaState. + MOVQ in+8(FP), SI // &in[0] -> SI + MOVQ out+32(FP), DX // &out[0] -> DX + MOVQ in_len+16(FP), CX // len(in) -> CX + + // Begin the main body of `chacha_blocks_avx2`. + // + // Mostly a direct translation except: + // * The number of rounds is always 20. + // * %rbp is used instead of %rsp. + LEAQ ·chacha_constants<>(SB), AX + VMOVDQU 0(AX), X8 + VMOVDQU 16(AX), X6 + VMOVDQU 32(AX), X7 + VMOVDQU 0(DI), X9 + VMOVDQU 16(DI), X10 + VMOVDQU 32(DI), X11 + + // MOVQ 48(DI), AX + MOVQ $1, R9 + VMOVDQA X8, 0(BP) + VMOVDQA X9, 16(BP) + VMOVDQA X10, 32(BP) + VMOVDQA X11, 48(BP) + + // MOVQ AX, 64(BP) + VMOVDQA X6, 448(BP) + VMOVDQA X6, 464(BP) + VMOVDQA X7, 480(BP) + VMOVDQA X7, 496(BP) + CMPQ CX, $512 + JAE chacha_blocks_avx2_atleast512 + CMPQ CX, $256 + JAE chacha_blocks_avx2_atleast256 + JMP chacha_blocks_avx2_below256 + +chacha_blocks_avx2_atleast512: + MOVQ 48(BP), AX + LEAQ 1(AX), R8 + LEAQ 2(AX), R9 + LEAQ 3(AX), R10 + LEAQ 4(AX), BX + LEAQ 5(AX), R11 + LEAQ 6(AX), R12 + LEAQ 7(AX), R13 + LEAQ 8(AX), R14 + MOVL AX, 128(BP) + MOVL R8, 4+128(BP) + MOVL R9, 8+128(BP) + MOVL R10, 12+128(BP) + MOVL BX, 16+128(BP) + MOVL R11, 20+128(BP) + MOVL R12, 24+128(BP) + MOVL R13, 28+128(BP) + SHRQ $32, AX + SHRQ $32, R8 + SHRQ $32, R9 + SHRQ $32, R10 + SHRQ $32, BX + SHRQ $32, R11 + SHRQ $32, R12 + SHRQ $32, R13 + MOVL AX, 160(BP) + MOVL R8, 4+160(BP) + MOVL R9, 8+160(BP) + MOVL R10, 12+160(BP) + MOVL BX, 16+160(BP) + MOVL R11, 20+160(BP) + MOVL R12, 24+160(BP) + MOVL R13, 28+160(BP) + MOVQ R14, 48(BP) + + // MOVQ 64(BP), AX + MOVQ $20, AX + VPBROADCASTD 0(BP), Y0 + VPBROADCASTD 4+0(BP), Y1 + VPBROADCASTD 8+0(BP), Y2 + VPBROADCASTD 12+0(BP), Y3 + VPBROADCASTD 16(BP), Y4 + VPBROADCASTD 4+16(BP), Y5 + VPBROADCASTD 8+16(BP), Y6 + VPBROADCASTD 12+16(BP), Y7 + VPBROADCASTD 32(BP), Y8 + VPBROADCASTD 4+32(BP), Y9 + VPBROADCASTD 8+32(BP), Y10 + VPBROADCASTD 12+32(BP), Y11 + VPBROADCASTD 8+48(BP), Y14 + VPBROADCASTD 12+48(BP), Y15 + VMOVDQA 128(BP), Y12 + VMOVDQA 160(BP), Y13 + +chacha_blocks_avx2_mainloop1: + VPADDD Y0, Y4, Y0 + VPADDD Y1, Y5, Y1 + VPXOR Y12, Y0, Y12 + VPXOR Y13, Y1, Y13 + VPADDD Y2, Y6, Y2 + VPADDD Y3, Y7, Y3 + VPXOR Y14, Y2, Y14 + VPXOR Y15, Y3, Y15 + VPSHUFB 448(BP), Y12, Y12 + VPSHUFB 448(BP), Y13, Y13 + VPADDD Y8, Y12, Y8 + VPADDD Y9, Y13, Y9 + VPSHUFB 448(BP), Y14, Y14 + VPSHUFB 448(BP), Y15, Y15 + VPADDD Y10, Y14, Y10 + VPADDD Y11, Y15, Y11 + VMOVDQA Y12, 96(BP) + VPXOR Y4, Y8, Y4 + VPXOR Y5, Y9, Y5 + VPSLLD $ 12, Y4, Y12 + VPSRLD $20, Y4, Y4 + VPXOR Y4, Y12, Y4 + VPSLLD $ 12, Y5, Y12 + VPSRLD $20, Y5, Y5 + VPXOR Y5, Y12, Y5 + VPXOR Y6, Y10, Y6 + VPXOR Y7, Y11, Y7 + VPSLLD $ 12, Y6, Y12 + VPSRLD $20, Y6, Y6 + VPXOR Y6, Y12, Y6 + VPSLLD $ 12, Y7, Y12 + VPSRLD $20, Y7, Y7 + VPXOR Y7, Y12, Y7 + VPADDD Y0, Y4, Y0 + VPADDD Y1, Y5, Y1 + VPXOR 96(BP), Y0, Y12 + VPXOR Y13, Y1, Y13 + VPADDD Y2, Y6, Y2 + VPADDD Y3, Y7, Y3 + VPXOR Y14, Y2, Y14 + VPXOR Y15, Y3, Y15 + VPSHUFB 480(BP), Y12, Y12 + VPSHUFB 480(BP), Y13, Y13 + VPADDD Y8, Y12, Y8 + VPADDD Y9, Y13, Y9 + VPSHUFB 480(BP), Y14, Y14 + VPSHUFB 480(BP), Y15, Y15 + VPADDD Y10, Y14, Y10 + VPADDD Y11, Y15, Y11 + VMOVDQA Y12, 96(BP) + VPXOR Y4, Y8, Y4 + VPXOR Y5, Y9, Y5 + VPSLLD $ 7, Y4, Y12 + VPSRLD $25, Y4, Y4 + VPXOR Y4, Y12, Y4 + VPSLLD $ 7, Y5, Y12 + VPSRLD $25, Y5, Y5 + VPXOR Y5, Y12, Y5 + VPXOR Y6, Y10, Y6 + VPXOR Y7, Y11, Y7 + VPSLLD $ 7, Y6, Y12 + VPSRLD $25, Y6, Y6 + VPXOR Y6, Y12, Y6 + VPSLLD $ 7, Y7, Y12 + VPSRLD $25, Y7, Y7 + VPXOR Y7, Y12, Y7 + VPADDD Y0, Y5, Y0 + VPADDD Y1, Y6, Y1 + VPXOR Y15, Y0, Y15 + VPXOR 96(BP), Y1, Y12 + VPADDD Y2, Y7, Y2 + VPADDD Y3, Y4, Y3 + VPXOR Y13, Y2, Y13 + VPXOR Y14, Y3, Y14 + VPSHUFB 448(BP), Y15, Y15 + VPSHUFB 448(BP), Y12, Y12 + VPADDD Y10, Y15, Y10 + VPADDD Y11, Y12, Y11 + VPSHUFB 448(BP), Y13, Y13 + VPSHUFB 448(BP), Y14, Y14 + VPADDD Y8, Y13, Y8 + VPADDD Y9, Y14, Y9 + VMOVDQA Y15, 96(BP) + VPXOR Y5, Y10, Y5 + VPXOR Y6, Y11, Y6 + VPSLLD $ 12, Y5, Y15 + VPSRLD $20, Y5, Y5 + VPXOR Y5, Y15, Y5 + VPSLLD $ 12, Y6, Y15 + VPSRLD $20, Y6, Y6 + VPXOR Y6, Y15, Y6 + VPXOR Y7, Y8, Y7 + VPXOR Y4, Y9, Y4 + VPSLLD $ 12, Y7, Y15 + VPSRLD $20, Y7, Y7 + VPXOR Y7, Y15, Y7 + VPSLLD $ 12, Y4, Y15 + VPSRLD $20, Y4, Y4 + VPXOR Y4, Y15, Y4 + VPADDD Y0, Y5, Y0 + VPADDD Y1, Y6, Y1 + VPXOR 96(BP), Y0, Y15 + VPXOR Y12, Y1, Y12 + VPADDD Y2, Y7, Y2 + VPADDD Y3, Y4, Y3 + VPXOR Y13, Y2, Y13 + VPXOR Y14, Y3, Y14 + VPSHUFB 480(BP), Y15, Y15 + VPSHUFB 480(BP), Y12, Y12 + VPADDD Y10, Y15, Y10 + VPADDD Y11, Y12, Y11 + VPSHUFB 480(BP), Y13, Y13 + VPSHUFB 480(BP), Y14, Y14 + VPADDD Y8, Y13, Y8 + VPADDD Y9, Y14, Y9 + VMOVDQA Y15, 96(BP) + VPXOR Y5, Y10, Y5 + VPXOR Y6, Y11, Y6 + VPSLLD $ 7, Y5, Y15 + VPSRLD $25, Y5, Y5 + VPXOR Y5, Y15, Y5 + VPSLLD $ 7, Y6, Y15 + VPSRLD $25, Y6, Y6 + VPXOR Y6, Y15, Y6 + VPXOR Y7, Y8, Y7 + VPXOR Y4, Y9, Y4 + VPSLLD $ 7, Y7, Y15 + VPSRLD $25, Y7, Y7 + VPXOR Y7, Y15, Y7 + VPSLLD $ 7, Y4, Y15 + VPSRLD $25, Y4, Y4 + VPXOR Y4, Y15, Y4 + VMOVDQA 96(BP), Y15 + SUBQ $2, AX + JNZ chacha_blocks_avx2_mainloop1 + VMOVDQA Y8, 192(BP) + VMOVDQA Y9, 224(BP) + VMOVDQA Y10, 256(BP) + VMOVDQA Y11, 288(BP) + VMOVDQA Y12, 320(BP) + VMOVDQA Y13, 352(BP) + VMOVDQA Y14, 384(BP) + VMOVDQA Y15, 416(BP) + VPBROADCASTD 0(BP), Y8 + VPBROADCASTD 4+0(BP), Y9 + VPBROADCASTD 8+0(BP), Y10 + VPBROADCASTD 12+0(BP), Y11 + VPBROADCASTD 16(BP), Y12 + VPBROADCASTD 4+16(BP), Y13 + VPBROADCASTD 8+16(BP), Y14 + VPBROADCASTD 12+16(BP), Y15 + VPADDD Y8, Y0, Y0 + VPADDD Y9, Y1, Y1 + VPADDD Y10, Y2, Y2 + VPADDD Y11, Y3, Y3 + VPADDD Y12, Y4, Y4 + VPADDD Y13, Y5, Y5 + VPADDD Y14, Y6, Y6 + VPADDD Y15, Y7, Y7 + VPUNPCKLDQ Y1, Y0, Y8 + VPUNPCKLDQ Y3, Y2, Y9 + VPUNPCKHDQ Y1, Y0, Y12 + VPUNPCKHDQ Y3, Y2, Y13 + VPUNPCKLDQ Y5, Y4, Y10 + VPUNPCKLDQ Y7, Y6, Y11 + VPUNPCKHDQ Y5, Y4, Y14 + VPUNPCKHDQ Y7, Y6, Y15 + VPUNPCKLQDQ Y9, Y8, Y0 + VPUNPCKLQDQ Y11, Y10, Y1 + VPUNPCKHQDQ Y9, Y8, Y2 + VPUNPCKHQDQ Y11, Y10, Y3 + VPUNPCKLQDQ Y13, Y12, Y4 + VPUNPCKLQDQ Y15, Y14, Y5 + VPUNPCKHQDQ Y13, Y12, Y6 + VPUNPCKHQDQ Y15, Y14, Y7 + VPERM2I128 $0x20, Y1, Y0, Y8 + VPERM2I128 $0x20, Y3, Y2, Y9 + VPERM2I128 $0x31, Y1, Y0, Y12 + VPERM2I128 $0x31, Y3, Y2, Y13 + VPERM2I128 $0x20, Y5, Y4, Y10 + VPERM2I128 $0x20, Y7, Y6, Y11 + VPERM2I128 $0x31, Y5, Y4, Y14 + VPERM2I128 $0x31, Y7, Y6, Y15 + ANDQ SI, SI + JZ chacha_blocks_avx2_noinput1 + VPXOR 0(SI), Y8, Y8 + VPXOR 64(SI), Y9, Y9 + VPXOR 128(SI), Y10, Y10 + VPXOR 192(SI), Y11, Y11 + VPXOR 256(SI), Y12, Y12 + VPXOR 320(SI), Y13, Y13 + VPXOR 384(SI), Y14, Y14 + VPXOR 448(SI), Y15, Y15 + VMOVDQU Y8, 0(DX) + VMOVDQU Y9, 64(DX) + VMOVDQU Y10, 128(DX) + VMOVDQU Y11, 192(DX) + VMOVDQU Y12, 256(DX) + VMOVDQU Y13, 320(DX) + VMOVDQU Y14, 384(DX) + VMOVDQU Y15, 448(DX) + VMOVDQA 192(BP), Y0 + VMOVDQA 224(BP), Y1 + VMOVDQA 256(BP), Y2 + VMOVDQA 288(BP), Y3 + VMOVDQA 320(BP), Y4 + VMOVDQA 352(BP), Y5 + VMOVDQA 384(BP), Y6 + VMOVDQA 416(BP), Y7 + VPBROADCASTD 32(BP), Y8 + VPBROADCASTD 4+32(BP), Y9 + VPBROADCASTD 8+32(BP), Y10 + VPBROADCASTD 12+32(BP), Y11 + VMOVDQA 128(BP), Y12 + VMOVDQA 160(BP), Y13 + VPBROADCASTD 8+48(BP), Y14 + VPBROADCASTD 12+48(BP), Y15 + VPADDD Y8, Y0, Y0 + VPADDD Y9, Y1, Y1 + VPADDD Y10, Y2, Y2 + VPADDD Y11, Y3, Y3 + VPADDD Y12, Y4, Y4 + VPADDD Y13, Y5, Y5 + VPADDD Y14, Y6, Y6 + VPADDD Y15, Y7, Y7 + VPUNPCKLDQ Y1, Y0, Y8 + VPUNPCKLDQ Y3, Y2, Y9 + VPUNPCKHDQ Y1, Y0, Y12 + VPUNPCKHDQ Y3, Y2, Y13 + VPUNPCKLDQ Y5, Y4, Y10 + VPUNPCKLDQ Y7, Y6, Y11 + VPUNPCKHDQ Y5, Y4, Y14 + VPUNPCKHDQ Y7, Y6, Y15 + VPUNPCKLQDQ Y9, Y8, Y0 + VPUNPCKLQDQ Y11, Y10, Y1 + VPUNPCKHQDQ Y9, Y8, Y2 + VPUNPCKHQDQ Y11, Y10, Y3 + VPUNPCKLQDQ Y13, Y12, Y4 + VPUNPCKLQDQ Y15, Y14, Y5 + VPUNPCKHQDQ Y13, Y12, Y6 + VPUNPCKHQDQ Y15, Y14, Y7 + VPERM2I128 $0x20, Y1, Y0, Y8 + VPERM2I128 $0x20, Y3, Y2, Y9 + VPERM2I128 $0x31, Y1, Y0, Y12 + VPERM2I128 $0x31, Y3, Y2, Y13 + VPERM2I128 $0x20, Y5, Y4, Y10 + VPERM2I128 $0x20, Y7, Y6, Y11 + VPERM2I128 $0x31, Y5, Y4, Y14 + VPERM2I128 $0x31, Y7, Y6, Y15 + VPXOR 32(SI), Y8, Y8 + VPXOR 96(SI), Y9, Y9 + VPXOR 160(SI), Y10, Y10 + VPXOR 224(SI), Y11, Y11 + VPXOR 288(SI), Y12, Y12 + VPXOR 352(SI), Y13, Y13 + VPXOR 416(SI), Y14, Y14 + VPXOR 480(SI), Y15, Y15 + VMOVDQU Y8, 32(DX) + VMOVDQU Y9, 96(DX) + VMOVDQU Y10, 160(DX) + VMOVDQU Y11, 224(DX) + VMOVDQU Y12, 288(DX) + VMOVDQU Y13, 352(DX) + VMOVDQU Y14, 416(DX) + VMOVDQU Y15, 480(DX) + ADDQ $512, SI + JMP chacha_blocks_avx2_mainloop1_cont + +chacha_blocks_avx2_noinput1: + VMOVDQU Y8, 0(DX) + VMOVDQU Y9, 64(DX) + VMOVDQU Y10, 128(DX) + VMOVDQU Y11, 192(DX) + VMOVDQU Y12, 256(DX) + VMOVDQU Y13, 320(DX) + VMOVDQU Y14, 384(DX) + VMOVDQU Y15, 448(DX) + VMOVDQA 192(BP), Y0 + VMOVDQA 224(BP), Y1 + VMOVDQA 256(BP), Y2 + VMOVDQA 288(BP), Y3 + VMOVDQA 320(BP), Y4 + VMOVDQA 352(BP), Y5 + VMOVDQA 384(BP), Y6 + VMOVDQA 416(BP), Y7 + VPBROADCASTD 32(BP), Y8 + VPBROADCASTD 4+32(BP), Y9 + VPBROADCASTD 8+32(BP), Y10 + VPBROADCASTD 12+32(BP), Y11 + VMOVDQA 128(BP), Y12 + VMOVDQA 160(BP), Y13 + VPBROADCASTD 8+48(BP), Y14 + VPBROADCASTD 12+48(BP), Y15 + VPADDD Y8, Y0, Y0 + VPADDD Y9, Y1, Y1 + VPADDD Y10, Y2, Y2 + VPADDD Y11, Y3, Y3 + VPADDD Y12, Y4, Y4 + VPADDD Y13, Y5, Y5 + VPADDD Y14, Y6, Y6 + VPADDD Y15, Y7, Y7 + VPUNPCKLDQ Y1, Y0, Y8 + VPUNPCKLDQ Y3, Y2, Y9 + VPUNPCKHDQ Y1, Y0, Y12 + VPUNPCKHDQ Y3, Y2, Y13 + VPUNPCKLDQ Y5, Y4, Y10 + VPUNPCKLDQ Y7, Y6, Y11 + VPUNPCKHDQ Y5, Y4, Y14 + VPUNPCKHDQ Y7, Y6, Y15 + VPUNPCKLQDQ Y9, Y8, Y0 + VPUNPCKLQDQ Y11, Y10, Y1 + VPUNPCKHQDQ Y9, Y8, Y2 + VPUNPCKHQDQ Y11, Y10, Y3 + VPUNPCKLQDQ Y13, Y12, Y4 + VPUNPCKLQDQ Y15, Y14, Y5 + VPUNPCKHQDQ Y13, Y12, Y6 + VPUNPCKHQDQ Y15, Y14, Y7 + VPERM2I128 $0x20, Y1, Y0, Y8 + VPERM2I128 $0x20, Y3, Y2, Y9 + VPERM2I128 $0x31, Y1, Y0, Y12 + VPERM2I128 $0x31, Y3, Y2, Y13 + VPERM2I128 $0x20, Y5, Y4, Y10 + VPERM2I128 $0x20, Y7, Y6, Y11 + VPERM2I128 $0x31, Y5, Y4, Y14 + VPERM2I128 $0x31, Y7, Y6, Y15 + VMOVDQU Y8, 32(DX) + VMOVDQU Y9, 96(DX) + VMOVDQU Y10, 160(DX) + VMOVDQU Y11, 224(DX) + VMOVDQU Y12, 288(DX) + VMOVDQU Y13, 352(DX) + VMOVDQU Y14, 416(DX) + VMOVDQU Y15, 480(DX) + +chacha_blocks_avx2_mainloop1_cont: + ADDQ $512, DX + SUBQ $512, CX + CMPQ CX, $512 + JAE chacha_blocks_avx2_atleast512 + CMPQ CX, $256 + JB chacha_blocks_avx2_below256_fixup + +chacha_blocks_avx2_atleast256: + MOVQ 48(BP), AX + LEAQ 1(AX), R8 + LEAQ 2(AX), R9 + LEAQ 3(AX), R10 + LEAQ 4(AX), BX + MOVL AX, 128(BP) + MOVL R8, 4+128(BP) + MOVL R9, 8+128(BP) + MOVL R10, 12+128(BP) + SHRQ $32, AX + SHRQ $32, R8 + SHRQ $32, R9 + SHRQ $32, R10 + MOVL AX, 160(BP) + MOVL R8, 4+160(BP) + MOVL R9, 8+160(BP) + MOVL R10, 12+160(BP) + MOVQ BX, 48(BP) + + // MOVQ 64(BP), AX + MOVQ $20, AX + VPBROADCASTD 0(BP), X0 + VPBROADCASTD 4+0(BP), X1 + VPBROADCASTD 8+0(BP), X2 + VPBROADCASTD 12+0(BP), X3 + VPBROADCASTD 16(BP), X4 + VPBROADCASTD 4+16(BP), X5 + VPBROADCASTD 8+16(BP), X6 + VPBROADCASTD 12+16(BP), X7 + VPBROADCASTD 32(BP), X8 + VPBROADCASTD 4+32(BP), X9 + VPBROADCASTD 8+32(BP), X10 + VPBROADCASTD 12+32(BP), X11 + VMOVDQA 128(BP), X12 + VMOVDQA 160(BP), X13 + VPBROADCASTD 8+48(BP), X14 + VPBROADCASTD 12+48(BP), X15 + +chacha_blocks_avx2_mainloop2: + VPADDD X0, X4, X0 + VPADDD X1, X5, X1 + VPXOR X12, X0, X12 + VPXOR X13, X1, X13 + VPADDD X2, X6, X2 + VPADDD X3, X7, X3 + VPXOR X14, X2, X14 + VPXOR X15, X3, X15 + VPSHUFB 448(BP), X12, X12 + VPSHUFB 448(BP), X13, X13 + VPADDD X8, X12, X8 + VPADDD X9, X13, X9 + VPSHUFB 448(BP), X14, X14 + VPSHUFB 448(BP), X15, X15 + VPADDD X10, X14, X10 + VPADDD X11, X15, X11 + VMOVDQA X12, 96(BP) + VPXOR X4, X8, X4 + VPXOR X5, X9, X5 + VPSLLD $ 12, X4, X12 + VPSRLD $20, X4, X4 + VPXOR X4, X12, X4 + VPSLLD $ 12, X5, X12 + VPSRLD $20, X5, X5 + VPXOR X5, X12, X5 + VPXOR X6, X10, X6 + VPXOR X7, X11, X7 + VPSLLD $ 12, X6, X12 + VPSRLD $20, X6, X6 + VPXOR X6, X12, X6 + VPSLLD $ 12, X7, X12 + VPSRLD $20, X7, X7 + VPXOR X7, X12, X7 + VPADDD X0, X4, X0 + VPADDD X1, X5, X1 + VPXOR 96(BP), X0, X12 + VPXOR X13, X1, X13 + VPADDD X2, X6, X2 + VPADDD X3, X7, X3 + VPXOR X14, X2, X14 + VPXOR X15, X3, X15 + VPSHUFB 480(BP), X12, X12 + VPSHUFB 480(BP), X13, X13 + VPADDD X8, X12, X8 + VPADDD X9, X13, X9 + VPSHUFB 480(BP), X14, X14 + VPSHUFB 480(BP), X15, X15 + VPADDD X10, X14, X10 + VPADDD X11, X15, X11 + VMOVDQA X12, 96(BP) + VPXOR X4, X8, X4 + VPXOR X5, X9, X5 + VPSLLD $ 7, X4, X12 + VPSRLD $25, X4, X4 + VPXOR X4, X12, X4 + VPSLLD $ 7, X5, X12 + VPSRLD $25, X5, X5 + VPXOR X5, X12, X5 + VPXOR X6, X10, X6 + VPXOR X7, X11, X7 + VPSLLD $ 7, X6, X12 + VPSRLD $25, X6, X6 + VPXOR X6, X12, X6 + VPSLLD $ 7, X7, X12 + VPSRLD $25, X7, X7 + VPXOR X7, X12, X7 + VPADDD X0, X5, X0 + VPADDD X1, X6, X1 + VPXOR X15, X0, X15 + VPXOR 96(BP), X1, X12 + VPADDD X2, X7, X2 + VPADDD X3, X4, X3 + VPXOR X13, X2, X13 + VPXOR X14, X3, X14 + VPSHUFB 448(BP), X15, X15 + VPSHUFB 448(BP), X12, X12 + VPADDD X10, X15, X10 + VPADDD X11, X12, X11 + VPSHUFB 448(BP), X13, X13 + VPSHUFB 448(BP), X14, X14 + VPADDD X8, X13, X8 + VPADDD X9, X14, X9 + VMOVDQA X15, 96(BP) + VPXOR X5, X10, X5 + VPXOR X6, X11, X6 + VPSLLD $ 12, X5, X15 + VPSRLD $20, X5, X5 + VPXOR X5, X15, X5 + VPSLLD $ 12, X6, X15 + VPSRLD $20, X6, X6 + VPXOR X6, X15, X6 + VPXOR X7, X8, X7 + VPXOR X4, X9, X4 + VPSLLD $ 12, X7, X15 + VPSRLD $20, X7, X7 + VPXOR X7, X15, X7 + VPSLLD $ 12, X4, X15 + VPSRLD $20, X4, X4 + VPXOR X4, X15, X4 + VPADDD X0, X5, X0 + VPADDD X1, X6, X1 + VPXOR 96(BP), X0, X15 + VPXOR X12, X1, X12 + VPADDD X2, X7, X2 + VPADDD X3, X4, X3 + VPXOR X13, X2, X13 + VPXOR X14, X3, X14 + VPSHUFB 480(BP), X15, X15 + VPSHUFB 480(BP), X12, X12 + VPADDD X10, X15, X10 + VPADDD X11, X12, X11 + VPSHUFB 480(BP), X13, X13 + VPSHUFB 480(BP), X14, X14 + VPADDD X8, X13, X8 + VPADDD X9, X14, X9 + VMOVDQA X15, 96(BP) + VPXOR X5, X10, X5 + VPXOR X6, X11, X6 + VPSLLD $ 7, X5, X15 + VPSRLD $25, X5, X5 + VPXOR X5, X15, X5 + VPSLLD $ 7, X6, X15 + VPSRLD $25, X6, X6 + VPXOR X6, X15, X6 + VPXOR X7, X8, X7 + VPXOR X4, X9, X4 + VPSLLD $ 7, X7, X15 + VPSRLD $25, X7, X7 + VPXOR X7, X15, X7 + VPSLLD $ 7, X4, X15 + VPSRLD $25, X4, X4 + VPXOR X4, X15, X4 + VMOVDQA 96(BP), X15 + SUBQ $2, AX + JNZ chacha_blocks_avx2_mainloop2 + VMOVDQA X8, 192(BP) + VMOVDQA X9, 208(BP) + VMOVDQA X10, 224(BP) + VMOVDQA X11, 240(BP) + VMOVDQA X12, 256(BP) + VMOVDQA X13, 272(BP) + VMOVDQA X14, 288(BP) + VMOVDQA X15, 304(BP) + VPBROADCASTD 0(BP), X8 + VPBROADCASTD 4+0(BP), X9 + VPBROADCASTD 8+0(BP), X10 + VPBROADCASTD 12+0(BP), X11 + VPBROADCASTD 16(BP), X12 + VPBROADCASTD 4+16(BP), X13 + VPBROADCASTD 8+16(BP), X14 + VPBROADCASTD 12+16(BP), X15 + VPADDD X8, X0, X0 + VPADDD X9, X1, X1 + VPADDD X10, X2, X2 + VPADDD X11, X3, X3 + VPADDD X12, X4, X4 + VPADDD X13, X5, X5 + VPADDD X14, X6, X6 + VPADDD X15, X7, X7 + VPUNPCKLDQ X1, X0, X8 + VPUNPCKLDQ X3, X2, X9 + VPUNPCKHDQ X1, X0, X12 + VPUNPCKHDQ X3, X2, X13 + VPUNPCKLDQ X5, X4, X10 + VPUNPCKLDQ X7, X6, X11 + VPUNPCKHDQ X5, X4, X14 + VPUNPCKHDQ X7, X6, X15 + VPUNPCKLQDQ X9, X8, X0 + VPUNPCKLQDQ X11, X10, X1 + VPUNPCKHQDQ X9, X8, X2 + VPUNPCKHQDQ X11, X10, X3 + VPUNPCKLQDQ X13, X12, X4 + VPUNPCKLQDQ X15, X14, X5 + VPUNPCKHQDQ X13, X12, X6 + VPUNPCKHQDQ X15, X14, X7 + ANDQ SI, SI + JZ chacha_blocks_avx2_noinput2 + VPXOR 0(SI), X0, X0 + VPXOR 16(SI), X1, X1 + VPXOR 64(SI), X2, X2 + VPXOR 80(SI), X3, X3 + VPXOR 128(SI), X4, X4 + VPXOR 144(SI), X5, X5 + VPXOR 192(SI), X6, X6 + VPXOR 208(SI), X7, X7 + VMOVDQU X0, 0(DX) + VMOVDQU X1, 16(DX) + VMOVDQU X2, 64(DX) + VMOVDQU X3, 80(DX) + VMOVDQU X4, 128(DX) + VMOVDQU X5, 144(DX) + VMOVDQU X6, 192(DX) + VMOVDQU X7, 208(DX) + VMOVDQA 192(BP), X0 + VMOVDQA 208(BP), X1 + VMOVDQA 224(BP), X2 + VMOVDQA 240(BP), X3 + VMOVDQA 256(BP), X4 + VMOVDQA 272(BP), X5 + VMOVDQA 288(BP), X6 + VMOVDQA 304(BP), X7 + VPBROADCASTD 32(BP), X8 + VPBROADCASTD 4+32(BP), X9 + VPBROADCASTD 8+32(BP), X10 + VPBROADCASTD 12+32(BP), X11 + VMOVDQA 128(BP), X12 + VMOVDQA 160(BP), X13 + VPBROADCASTD 8+48(BP), X14 + VPBROADCASTD 12+48(BP), X15 + VPADDD X8, X0, X0 + VPADDD X9, X1, X1 + VPADDD X10, X2, X2 + VPADDD X11, X3, X3 + VPADDD X12, X4, X4 + VPADDD X13, X5, X5 + VPADDD X14, X6, X6 + VPADDD X15, X7, X7 + VPUNPCKLDQ X1, X0, X8 + VPUNPCKLDQ X3, X2, X9 + VPUNPCKHDQ X1, X0, X12 + VPUNPCKHDQ X3, X2, X13 + VPUNPCKLDQ X5, X4, X10 + VPUNPCKLDQ X7, X6, X11 + VPUNPCKHDQ X5, X4, X14 + VPUNPCKHDQ X7, X6, X15 + VPUNPCKLQDQ X9, X8, X0 + VPUNPCKLQDQ X11, X10, X1 + VPUNPCKHQDQ X9, X8, X2 + VPUNPCKHQDQ X11, X10, X3 + VPUNPCKLQDQ X13, X12, X4 + VPUNPCKLQDQ X15, X14, X5 + VPUNPCKHQDQ X13, X12, X6 + VPUNPCKHQDQ X15, X14, X7 + VPXOR 32(SI), X0, X0 + VPXOR 48(SI), X1, X1 + VPXOR 96(SI), X2, X2 + VPXOR 112(SI), X3, X3 + VPXOR 160(SI), X4, X4 + VPXOR 176(SI), X5, X5 + VPXOR 224(SI), X6, X6 + VPXOR 240(SI), X7, X7 + VMOVDQU X0, 32(DX) + VMOVDQU X1, 48(DX) + VMOVDQU X2, 96(DX) + VMOVDQU X3, 112(DX) + VMOVDQU X4, 160(DX) + VMOVDQU X5, 176(DX) + VMOVDQU X6, 224(DX) + VMOVDQU X7, 240(DX) + ADDQ $256, SI + JMP chacha_blocks_avx2_mainloop2_cont + +chacha_blocks_avx2_noinput2: + VMOVDQU X0, 0(DX) + VMOVDQU X1, 16(DX) + VMOVDQU X2, 64(DX) + VMOVDQU X3, 80(DX) + VMOVDQU X4, 128(DX) + VMOVDQU X5, 144(DX) + VMOVDQU X6, 192(DX) + VMOVDQU X7, 208(DX) + VMOVDQA 192(BP), X0 + VMOVDQA 208(BP), X1 + VMOVDQA 224(BP), X2 + VMOVDQA 240(BP), X3 + VMOVDQA 256(BP), X4 + VMOVDQA 272(BP), X5 + VMOVDQA 288(BP), X6 + VMOVDQA 304(BP), X7 + VPBROADCASTD 32(BP), X8 + VPBROADCASTD 4+32(BP), X9 + VPBROADCASTD 8+32(BP), X10 + VPBROADCASTD 12+32(BP), X11 + VMOVDQA 128(BP), X12 + VMOVDQA 160(BP), X13 + VPBROADCASTD 8+48(BP), X14 + VPBROADCASTD 12+48(BP), X15 + VPADDD X8, X0, X0 + VPADDD X9, X1, X1 + VPADDD X10, X2, X2 + VPADDD X11, X3, X3 + VPADDD X12, X4, X4 + VPADDD X13, X5, X5 + VPADDD X14, X6, X6 + VPADDD X15, X7, X7 + VPUNPCKLDQ X1, X0, X8 + VPUNPCKLDQ X3, X2, X9 + VPUNPCKHDQ X1, X0, X12 + VPUNPCKHDQ X3, X2, X13 + VPUNPCKLDQ X5, X4, X10 + VPUNPCKLDQ X7, X6, X11 + VPUNPCKHDQ X5, X4, X14 + VPUNPCKHDQ X7, X6, X15 + VPUNPCKLQDQ X9, X8, X0 + VPUNPCKLQDQ X11, X10, X1 + VPUNPCKHQDQ X9, X8, X2 + VPUNPCKHQDQ X11, X10, X3 + VPUNPCKLQDQ X13, X12, X4 + VPUNPCKLQDQ X15, X14, X5 + VPUNPCKHQDQ X13, X12, X6 + VPUNPCKHQDQ X15, X14, X7 + VMOVDQU X0, 32(DX) + VMOVDQU X1, 48(DX) + VMOVDQU X2, 96(DX) + VMOVDQU X3, 112(DX) + VMOVDQU X4, 160(DX) + VMOVDQU X5, 176(DX) + VMOVDQU X6, 224(DX) + VMOVDQU X7, 240(DX) + +chacha_blocks_avx2_mainloop2_cont: + ADDQ $256, DX + SUBQ $256, CX + CMPQ CX, $256 + JAE chacha_blocks_avx2_atleast256 + +chacha_blocks_avx2_below256_fixup: + VMOVDQA 448(BP), X6 + VMOVDQA 480(BP), X7 + VMOVDQA 0(BP), X8 + VMOVDQA 16(BP), X9 + VMOVDQA 32(BP), X10 + VMOVDQA 48(BP), X11 + MOVQ $1, R9 + +chacha_blocks_avx2_below256: + VMOVQ R9, X5 + ANDQ CX, CX + JZ chacha_blocks_avx2_done + CMPQ CX, $64 + JAE chacha_blocks_avx2_above63 + MOVQ DX, R9 + ANDQ SI, SI + JZ chacha_blocks_avx2_noinput3 + MOVQ CX, R10 + MOVQ BP, DX + ADDQ R10, SI + ADDQ R10, DX + NEGQ R10 + +chacha_blocks_avx2_copyinput: + MOVB (SI)(R10*1), AX + MOVB AX, (DX)(R10*1) + INCQ R10 + JNZ chacha_blocks_avx2_copyinput + MOVQ BP, SI + +chacha_blocks_avx2_noinput3: + MOVQ BP, DX + +chacha_blocks_avx2_above63: + VMOVDQA X8, X0 + VMOVDQA X9, X1 + VMOVDQA X10, X2 + VMOVDQA X11, X3 + + // MOVQ 64(BP), AX + MOVQ $20, AX + +chacha_blocks_avx2_mainloop3: + VPADDD X0, X1, X0 + VPXOR X3, X0, X3 + VPSHUFB X6, X3, X3 + VPADDD X2, X3, X2 + VPXOR X1, X2, X1 + VPSLLD $12, X1, X4 + VPSRLD $20, X1, X1 + VPXOR X1, X4, X1 + VPADDD X0, X1, X0 + VPXOR X3, X0, X3 + VPSHUFB X7, X3, X3 + VPSHUFD $0x93, X0, X0 + VPADDD X2, X3, X2 + VPSHUFD $0x4e, X3, X3 + VPXOR X1, X2, X1 + VPSHUFD $0x39, X2, X2 + VPSLLD $7, X1, X4 + VPSRLD $25, X1, X1 + VPXOR X1, X4, X1 + VPADDD X0, X1, X0 + VPXOR X3, X0, X3 + VPSHUFB X6, X3, X3 + VPADDD X2, X3, X2 + VPXOR X1, X2, X1 + VPSLLD $12, X1, X4 + VPSRLD $20, X1, X1 + VPXOR X1, X4, X1 + VPADDD X0, X1, X0 + VPXOR X3, X0, X3 + VPSHUFB X7, X3, X3 + VPSHUFD $0x39, X0, X0 + VPADDD X2, X3, X2 + VPSHUFD $0x4e, X3, X3 + VPXOR X1, X2, X1 + VPSHUFD $0x93, X2, X2 + VPSLLD $7, X1, X4 + VPSRLD $25, X1, X1 + VPXOR X1, X4, X1 + SUBQ $2, AX + JNZ chacha_blocks_avx2_mainloop3 + VPADDD X0, X8, X0 + VPADDD X1, X9, X1 + VPADDD X2, X10, X2 + VPADDD X3, X11, X3 + ANDQ SI, SI + JZ chacha_blocks_avx2_noinput4 + VPXOR 0(SI), X0, X0 + VPXOR 16(SI), X1, X1 + VPXOR 32(SI), X2, X2 + VPXOR 48(SI), X3, X3 + ADDQ $64, SI + +chacha_blocks_avx2_noinput4: + VMOVDQU X0, 0(DX) + VMOVDQU X1, 16(DX) + VMOVDQU X2, 32(DX) + VMOVDQU X3, 48(DX) + VPADDQ X11, X5, X11 + CMPQ CX, $64 + JBE chacha_blocks_avx2_mainloop3_finishup + ADDQ $64, DX + SUBQ $64, CX + JMP chacha_blocks_avx2_below256 + +chacha_blocks_avx2_mainloop3_finishup: + CMPQ CX, $64 + JE chacha_blocks_avx2_done + ADDQ CX, R9 + ADDQ CX, DX + NEGQ CX + +chacha_blocks_avx2_copyoutput: + MOVB (DX)(CX*1), AX + MOVB AX, (R9)(CX*1) + INCQ CX + JNZ chacha_blocks_avx2_copyoutput + +chacha_blocks_avx2_done: + VMOVDQU X11, 32(DI) + + VZEROUPPER + RET + +// func hChaChaAVX2(key, nonce []byte, dst *byte) +TEXT ·hChaChaAVX2(SB), NOSPLIT|NOFRAME, $0-56 + MOVQ key+0(FP), DI + MOVQ nonce+24(FP), SI + MOVQ dst+48(FP), DX + + MOVL $20, CX + + LEAQ ·chacha_constants<>(SB), AX + VMOVDQA 0(AX), X0 + VMOVDQA 16(AX), X6 + VMOVDQA 32(AX), X5 + + VMOVDQU 0(DI), X1 + VMOVDQU 16(DI), X2 + VMOVDQU 0(SI), X3 + +hhacha_mainloop_avx2: + VPADDD X0, X1, X0 + VPXOR X3, X0, X3 + VPSHUFB X6, X3, X3 + VPADDD X2, X3, X2 + VPXOR X1, X2, X1 + VPSLLD $12, X1, X4 + VPSRLD $20, X1, X1 + VPXOR X1, X4, X1 + VPADDD X0, X1, X0 + VPXOR X3, X0, X3 + VPSHUFB X5, X3, X3 + VPADDD X2, X3, X2 + VPXOR X1, X2, X1 + VPSLLD $7, X1, X4 + VPSRLD $25, X1, X1 + VPSHUFD $0x93, X0, X0 + VPXOR X1, X4, X1 + VPSHUFD $0x4e, X3, X3 + VPADDD X0, X1, X0 + VPXOR X3, X0, X3 + VPSHUFB X6, X3, X3 + VPSHUFD $0x39, X2, X2 + VPADDD X2, X3, X2 + VPXOR X1, X2, X1 + VPSLLD $12, X1, X4 + VPSRLD $20, X1, X1 + VPXOR X1, X4, X1 + VPADDD X0, X1, X0 + VPXOR X3, X0, X3 + VPSHUFB X5, X3, X3 + VPADDD X2, X3, X2 + VPXOR X1, X2, X1 + VPSHUFD $0x39, X0, X0 + VPSLLD $7, X1, X4 + VPSHUFD $0x4e, X3, X3 + VPSRLD $25, X1, X1 + VPSHUFD $0x93, X2, X2 + VPXOR X1, X4, X1 + SUBL $2, CX + JNE hhacha_mainloop_avx2 + + VMOVDQU X0, (DX) + VMOVDQU X3, 16(DX) + + VZEROUPPER + RET + +// func blocksSSSE3(s *[api.StateSize]uint32, in, out []byte) +TEXT ·blocksSSSE3(SB), NOSPLIT, $576-56 + // This is Andrew Moon's SSSE3 ChaCha implementation taken from + // supercop-20190110, with some minor changes, primarily calling + // convention and assembly dialect related. + + // Align the stack on a 64 byte boundary. + MOVQ SP, BP + ADDQ $64, BP + ANDQ $-64, BP + + // Go calling convention -> SYSV AMD64 (and a fixup). + MOVQ s+0(FP), DI // &s -> DI + ADDQ $16, DI // Skip the ChaCha constants in the chachaState. + MOVQ in+8(FP), SI // &in[0] -> SI + MOVQ out+32(FP), DX // &out[0] -> DX + MOVQ in_len+16(FP), CX // len(in) -> CX + + // Begin the main body of `chacha_blocks_ssse3`. + // + // Mostly a direct translation except: + // * The number of rounds is always 20. + // * %rbp is used instead of BP. + LEAQ ·chacha_constants<>(SB), AX + MOVO 0(AX), X8 + MOVO 16(AX), X6 + MOVO 32(AX), X7 + MOVOU 0(DI), X9 + MOVOU 16(DI), X10 + MOVOU 32(DI), X11 + + // MOVQ 48(DI), AX + MOVQ $1, R9 + MOVO X8, 0(BP) + MOVO X9, 16(BP) + MOVO X10, 32(BP) + MOVO X11, 48(BP) + + MOVO X6, 80(BP) + MOVO X7, 96(BP) + // MOVQ AX, 64(BP) + CMPQ CX, $256 + JB chacha_blocks_ssse3_below256 + PSHUFD $0x00, X8, X0 + PSHUFD $0x55, X8, X1 + PSHUFD $0xaa, X8, X2 + PSHUFD $0xff, X8, X3 + MOVO X0, 128(BP) + MOVO X1, 144(BP) + MOVO X2, 160(BP) + MOVO X3, 176(BP) + PSHUFD $0x00, X9, X0 + PSHUFD $0x55, X9, X1 + PSHUFD $0xaa, X9, X2 + PSHUFD $0xff, X9, X3 + MOVO X0, 192(BP) + MOVO X1, 208(BP) + MOVO X2, 224(BP) + MOVO X3, 240(BP) + PSHUFD $0x00, X10, X0 + PSHUFD $0x55, X10, X1 + PSHUFD $0xaa, X10, X2 + PSHUFD $0xff, X10, X3 + MOVO X0, 256(BP) + MOVO X1, 272(BP) + MOVO X2, 288(BP) + MOVO X3, 304(BP) + PSHUFD $0xaa, X11, X0 + PSHUFD $0xff, X11, X1 + MOVO X0, 352(BP) + MOVO X1, 368(BP) + JMP chacha_blocks_ssse3_atleast256 + +// .p2align 6,,63 +// # align to 4 mod 64 +// nop;nop;nop;nop; +chacha_blocks_ssse3_atleast256: + MOVQ 48(BP), AX + LEAQ 1(AX), R8 + LEAQ 2(AX), R9 + LEAQ 3(AX), R10 + LEAQ 4(AX), BX + MOVL AX, 320(BP) + MOVL R8, 4+320(BP) + MOVL R9, 8+320(BP) + MOVL R10, 12+320(BP) + SHRQ $32, AX + SHRQ $32, R8 + SHRQ $32, R9 + SHRQ $32, R10 + MOVL AX, 336(BP) + MOVL R8, 4+336(BP) + MOVL R9, 8+336(BP) + MOVL R10, 12+336(BP) + MOVQ BX, 48(BP) + + // MOVQ 64(BP), AX + MOVQ $20, AX + MOVO 128(BP), X0 + MOVO 144(BP), X1 + MOVO 160(BP), X2 + MOVO 176(BP), X3 + MOVO 192(BP), X4 + MOVO 208(BP), X5 + MOVO 224(BP), X6 + MOVO 240(BP), X7 + MOVO 256(BP), X8 + MOVO 272(BP), X9 + MOVO 288(BP), X10 + MOVO 304(BP), X11 + MOVO 320(BP), X12 + MOVO 336(BP), X13 + MOVO 352(BP), X14 + MOVO 368(BP), X15 + +chacha_blocks_ssse3_mainloop1: + PADDD X4, X0 + PADDD X5, X1 + PXOR X0, X12 + PXOR X1, X13 + PADDD X6, X2 + PADDD X7, X3 + PXOR X2, X14 + PXOR X3, X15 + PSHUFB 80(BP), X12 + PSHUFB 80(BP), X13 + PADDD X12, X8 + PADDD X13, X9 + PSHUFB 80(BP), X14 + PSHUFB 80(BP), X15 + PADDD X14, X10 + PADDD X15, X11 + MOVO X12, 112(BP) + PXOR X8, X4 + PXOR X9, X5 + MOVO X4, X12 + PSLLL $ 12, X4 + PSRLL $20, X12 + PXOR X12, X4 + MOVO X5, X12 + PSLLL $ 12, X5 + PSRLL $20, X12 + PXOR X12, X5 + PXOR X10, X6 + PXOR X11, X7 + MOVO X6, X12 + PSLLL $ 12, X6 + PSRLL $20, X12 + PXOR X12, X6 + MOVO X7, X12 + PSLLL $ 12, X7 + PSRLL $20, X12 + PXOR X12, X7 + MOVO 112(BP), X12 + PADDD X4, X0 + PADDD X5, X1 + PXOR X0, X12 + PXOR X1, X13 + PADDD X6, X2 + PADDD X7, X3 + PXOR X2, X14 + PXOR X3, X15 + PSHUFB 96(BP), X12 + PSHUFB 96(BP), X13 + PADDD X12, X8 + PADDD X13, X9 + PSHUFB 96(BP), X14 + PSHUFB 96(BP), X15 + PADDD X14, X10 + PADDD X15, X11 + MOVO X12, 112(BP) + PXOR X8, X4 + PXOR X9, X5 + MOVO X4, X12 + PSLLL $ 7, X4 + PSRLL $25, X12 + PXOR X12, X4 + MOVO X5, X12 + PSLLL $ 7, X5 + PSRLL $25, X12 + PXOR X12, X5 + PXOR X10, X6 + PXOR X11, X7 + MOVO X6, X12 + PSLLL $ 7, X6 + PSRLL $25, X12 + PXOR X12, X6 + MOVO X7, X12 + PSLLL $ 7, X7 + PSRLL $25, X12 + PXOR X12, X7 + MOVO 112(BP), X12 + PADDD X5, X0 + PADDD X6, X1 + PXOR X0, X15 + PXOR X1, X12 + PADDD X7, X2 + PADDD X4, X3 + PXOR X2, X13 + PXOR X3, X14 + PSHUFB 80(BP), X15 + PSHUFB 80(BP), X12 + PADDD X15, X10 + PADDD X12, X11 + PSHUFB 80(BP), X13 + PSHUFB 80(BP), X14 + PADDD X13, X8 + PADDD X14, X9 + MOVO X15, 112(BP) + PXOR X10, X5 + PXOR X11, X6 + MOVO X5, X15 + PSLLL $ 12, X5 + PSRLL $20, X15 + PXOR X15, X5 + MOVO X6, X15 + PSLLL $ 12, X6 + PSRLL $20, X15 + PXOR X15, X6 + PXOR X8, X7 + PXOR X9, X4 + MOVO X7, X15 + PSLLL $ 12, X7 + PSRLL $20, X15 + PXOR X15, X7 + MOVO X4, X15 + PSLLL $ 12, X4 + PSRLL $20, X15 + PXOR X15, X4 + MOVO 112(BP), X15 + PADDD X5, X0 + PADDD X6, X1 + PXOR X0, X15 + PXOR X1, X12 + PADDD X7, X2 + PADDD X4, X3 + PXOR X2, X13 + PXOR X3, X14 + PSHUFB 96(BP), X15 + PSHUFB 96(BP), X12 + PADDD X15, X10 + PADDD X12, X11 + PSHUFB 96(BP), X13 + PSHUFB 96(BP), X14 + PADDD X13, X8 + PADDD X14, X9 + MOVO X15, 112(BP) + PXOR X10, X5 + PXOR X11, X6 + MOVO X5, X15 + PSLLL $ 7, X5 + PSRLL $25, X15 + PXOR X15, X5 + MOVO X6, X15 + PSLLL $ 7, X6 + PSRLL $25, X15 + PXOR X15, X6 + PXOR X8, X7 + PXOR X9, X4 + MOVO X7, X15 + PSLLL $ 7, X7 + PSRLL $25, X15 + PXOR X15, X7 + MOVO X4, X15 + PSLLL $ 7, X4 + PSRLL $25, X15 + PXOR X15, X4 + SUBQ $2, AX + MOVO 112(BP), X15 + JNZ chacha_blocks_ssse3_mainloop1 + PADDD 128(BP), X0 + PADDD 144(BP), X1 + PADDD 160(BP), X2 + PADDD 176(BP), X3 + PADDD 192(BP), X4 + PADDD 208(BP), X5 + PADDD 224(BP), X6 + PADDD 240(BP), X7 + PADDD 256(BP), X8 + PADDD 272(BP), X9 + PADDD 288(BP), X10 + PADDD 304(BP), X11 + PADDD 320(BP), X12 + PADDD 336(BP), X13 + PADDD 352(BP), X14 + PADDD 368(BP), X15 + MOVO X8, 384(BP) + MOVO X9, 400(BP) + MOVO X10, 416(BP) + MOVO X11, 432(BP) + MOVO X12, 448(BP) + MOVO X13, 464(BP) + MOVO X14, 480(BP) + MOVO X15, 496(BP) + MOVO X0, X8 + MOVO X2, X9 + MOVO X4, X10 + MOVO X6, X11 + PUNPCKHLQ X1, X0 + PUNPCKHLQ X3, X2 + PUNPCKHLQ X5, X4 + PUNPCKHLQ X7, X6 + PUNPCKLLQ X1, X8 + PUNPCKLLQ X3, X9 + PUNPCKLLQ X5, X10 + PUNPCKLLQ X7, X11 + MOVO X0, X1 + MOVO X4, X3 + MOVO X8, X5 + MOVO X10, X7 + PUNPCKHQDQ X2, X0 + PUNPCKHQDQ X6, X4 + PUNPCKHQDQ X9, X8 + PUNPCKHQDQ X11, X10 + PUNPCKLQDQ X2, X1 + PUNPCKLQDQ X6, X3 + PUNPCKLQDQ X9, X5 + PUNPCKLQDQ X11, X7 + ANDQ SI, SI + JZ chacha_blocks_ssse3_noinput1 + MOVOU 0(SI), X2 + MOVOU 16(SI), X6 + MOVOU 64(SI), X9 + MOVOU 80(SI), X11 + MOVOU 128(SI), X12 + MOVOU 144(SI), X13 + MOVOU 192(SI), X14 + MOVOU 208(SI), X15 + PXOR X2, X5 + PXOR X6, X7 + PXOR X9, X8 + PXOR X11, X10 + PXOR X12, X1 + PXOR X13, X3 + PXOR X14, X0 + PXOR X15, X4 + MOVOU X5, 0(DX) + MOVOU X7, 16(DX) + MOVOU X8, 64(DX) + MOVOU X10, 80(DX) + MOVOU X1, 128(DX) + MOVOU X3, 144(DX) + MOVOU X0, 192(DX) + MOVOU X4, 208(DX) + MOVO 384(BP), X0 + MOVO 400(BP), X1 + MOVO 416(BP), X2 + MOVO 432(BP), X3 + MOVO 448(BP), X4 + MOVO 464(BP), X5 + MOVO 480(BP), X6 + MOVO 496(BP), X7 + MOVO X0, X8 + MOVO X2, X9 + MOVO X4, X10 + MOVO X6, X11 + PUNPCKLLQ X1, X8 + PUNPCKLLQ X3, X9 + PUNPCKHLQ X1, X0 + PUNPCKHLQ X3, X2 + PUNPCKLLQ X5, X10 + PUNPCKLLQ X7, X11 + PUNPCKHLQ X5, X4 + PUNPCKHLQ X7, X6 + MOVO X8, X1 + MOVO X0, X3 + MOVO X10, X5 + MOVO X4, X7 + PUNPCKLQDQ X9, X1 + PUNPCKLQDQ X11, X5 + PUNPCKHQDQ X9, X8 + PUNPCKHQDQ X11, X10 + PUNPCKLQDQ X2, X3 + PUNPCKLQDQ X6, X7 + PUNPCKHQDQ X2, X0 + PUNPCKHQDQ X6, X4 + MOVOU 32(SI), X2 + MOVOU 48(SI), X6 + MOVOU 96(SI), X9 + MOVOU 112(SI), X11 + MOVOU 160(SI), X12 + MOVOU 176(SI), X13 + MOVOU 224(SI), X14 + MOVOU 240(SI), X15 + PXOR X2, X1 + PXOR X6, X5 + PXOR X9, X8 + PXOR X11, X10 + PXOR X12, X3 + PXOR X13, X7 + PXOR X14, X0 + PXOR X15, X4 + MOVOU X1, 32(DX) + MOVOU X5, 48(DX) + MOVOU X8, 96(DX) + MOVOU X10, 112(DX) + MOVOU X3, 160(DX) + MOVOU X7, 176(DX) + MOVOU X0, 224(DX) + MOVOU X4, 240(DX) + ADDQ $256, SI + JMP chacha_blocks_ssse3_mainloop_cont + +chacha_blocks_ssse3_noinput1: + MOVOU X5, 0(DX) + MOVOU X7, 16(DX) + MOVOU X8, 64(DX) + MOVOU X10, 80(DX) + MOVOU X1, 128(DX) + MOVOU X3, 144(DX) + MOVOU X0, 192(DX) + MOVOU X4, 208(DX) + MOVO 384(BP), X0 + MOVO 400(BP), X1 + MOVO 416(BP), X2 + MOVO 432(BP), X3 + MOVO 448(BP), X4 + MOVO 464(BP), X5 + MOVO 480(BP), X6 + MOVO 496(BP), X7 + MOVO X0, X8 + MOVO X2, X9 + MOVO X4, X10 + MOVO X6, X11 + PUNPCKLLQ X1, X8 + PUNPCKLLQ X3, X9 + PUNPCKHLQ X1, X0 + PUNPCKHLQ X3, X2 + PUNPCKLLQ X5, X10 + PUNPCKLLQ X7, X11 + PUNPCKHLQ X5, X4 + PUNPCKHLQ X7, X6 + MOVO X8, X1 + MOVO X0, X3 + MOVO X10, X5 + MOVO X4, X7 + PUNPCKLQDQ X9, X1 + PUNPCKLQDQ X11, X5 + PUNPCKHQDQ X9, X8 + PUNPCKHQDQ X11, X10 + PUNPCKLQDQ X2, X3 + PUNPCKLQDQ X6, X7 + PUNPCKHQDQ X2, X0 + PUNPCKHQDQ X6, X4 + MOVOU X1, 32(DX) + MOVOU X5, 48(DX) + MOVOU X8, 96(DX) + MOVOU X10, 112(DX) + MOVOU X3, 160(DX) + MOVOU X7, 176(DX) + MOVOU X0, 224(DX) + MOVOU X4, 240(DX) + +chacha_blocks_ssse3_mainloop_cont: + ADDQ $256, DX + SUBQ $256, CX + CMPQ CX, $256 + JAE chacha_blocks_ssse3_atleast256 + MOVO 80(BP), X6 + MOVO 96(BP), X7 + MOVO 0(BP), X8 + MOVO 16(BP), X9 + MOVO 32(BP), X10 + MOVO 48(BP), X11 + MOVQ $1, R9 + +chacha_blocks_ssse3_below256: + MOVQ R9, X5 + ANDQ CX, CX + JZ chacha_blocks_ssse3_done + CMPQ CX, $64 + JAE chacha_blocks_ssse3_above63 + MOVQ DX, R9 + ANDQ SI, SI + JZ chacha_blocks_ssse3_noinput2 + MOVQ CX, R10 + MOVQ BP, DX + ADDQ R10, SI + ADDQ R10, DX + NEGQ R10 + +chacha_blocks_ssse3_copyinput: + MOVB (SI)(R10*1), AX + MOVB AX, (DX)(R10*1) + INCQ R10 + JNZ chacha_blocks_ssse3_copyinput + MOVQ BP, SI + +chacha_blocks_ssse3_noinput2: + MOVQ BP, DX + +chacha_blocks_ssse3_above63: + MOVO X8, X0 + MOVO X9, X1 + MOVO X10, X2 + MOVO X11, X3 + + // MOVQ 64(BP), AX + MOVQ $20, AX + +chacha_blocks_ssse3_mainloop2: + PADDD X1, X0 + PXOR X0, X3 + PSHUFB X6, X3 + PADDD X3, X2 + PXOR X2, X1 + MOVO X1, X4 + PSLLL $12, X4 + PSRLL $20, X1 + PXOR X4, X1 + PADDD X1, X0 + PXOR X0, X3 + PSHUFB X7, X3 + PSHUFD $0x93, X0, X0 + PADDD X3, X2 + PSHUFD $0x4e, X3, X3 + PXOR X2, X1 + PSHUFD $0x39, X2, X2 + MOVO X1, X4 + PSLLL $7, X4 + PSRLL $25, X1 + PXOR X4, X1 + PADDD X1, X0 + PXOR X0, X3 + PSHUFB X6, X3 + PADDD X3, X2 + PXOR X2, X1 + MOVO X1, X4 + PSLLL $12, X4 + PSRLL $20, X1 + PXOR X4, X1 + PADDD X1, X0 + PXOR X0, X3 + PSHUFB X7, X3 + PSHUFD $0x39, X0, X0 + PADDD X3, X2 + PSHUFD $0x4e, X3, X3 + PXOR X2, X1 + PSHUFD $0x93, X2, X2 + MOVO X1, X4 + PSLLL $7, X4 + PSRLL $25, X1 + PXOR X4, X1 + SUBQ $2, AX + JNZ chacha_blocks_ssse3_mainloop2 + PADDD X8, X0 + PADDD X9, X1 + PADDD X10, X2 + PADDD X11, X3 + ANDQ SI, SI + JZ chacha_blocks_ssse3_noinput3 + MOVOU 0(SI), X12 + MOVOU 16(SI), X13 + MOVOU 32(SI), X14 + MOVOU 48(SI), X15 + PXOR X12, X0 + PXOR X13, X1 + PXOR X14, X2 + PXOR X15, X3 + ADDQ $64, SI + +chacha_blocks_ssse3_noinput3: + MOVOU X0, 0(DX) + MOVOU X1, 16(DX) + MOVOU X2, 32(DX) + MOVOU X3, 48(DX) + PADDQ X5, X11 + CMPQ CX, $64 + JBE chacha_blocks_ssse3_mainloop2_finishup + ADDQ $64, DX + SUBQ $64, CX + JMP chacha_blocks_ssse3_below256 + +chacha_blocks_ssse3_mainloop2_finishup: + CMPQ CX, $64 + JE chacha_blocks_ssse3_done + ADDQ CX, R9 + ADDQ CX, DX + NEGQ CX + +chacha_blocks_ssse3_copyoutput: + MOVB (DX)(CX*1), AX + MOVB AX, (R9)(CX*1) + INCQ CX + JNZ chacha_blocks_ssse3_copyoutput + +chacha_blocks_ssse3_done: + MOVOU X11, 32(DI) + + RET + +// func hChaChaSSSE3(key, nonce []byte, dst *byte) +TEXT ·hChaChaSSSE3(SB), NOSPLIT|NOFRAME, $0-56 + MOVQ key+0(FP), DI + MOVQ nonce+24(FP), SI + MOVQ dst+48(FP), DX + + MOVL $20, CX + + LEAQ ·chacha_constants<>(SB), AX + MOVO 0(AX), X0 + MOVO 16(AX), X5 + MOVO 32(AX), X6 + + MOVOU 0(DI), X1 + MOVOU 16(DI), X2 + MOVOU 0(SI), X3 + +hchacha_ssse3_mainloop: + PADDD X1, X0 + PXOR X0, X3 + PSHUFB X5, X3 + PADDD X3, X2 + PXOR X2, X1 + MOVO X1, X4 + PSLLL $12, X1 + PSRLL $20, X4 + PXOR X4, X1 + PADDD X1, X0 + PXOR X0, X3 + PSHUFB X6, X3 + PSHUFD $0X93, X0, X0 + PADDD X3, X2 + PSHUFD $0X4E, X3, X3 + PXOR X2, X1 + PSHUFD $0X39, X2, X2 + MOVO X1, X4 + PSLLL $7, X1 + PSRLL $25, X4 + PXOR X4, X1 + SUBQ $2, CX + PADDD X1, X0 + PXOR X0, X3 + PSHUFB X5, X3 + PADDD X3, X2 + PXOR X2, X1 + MOVO X1, X4 + PSLLL $12, X1 + PSRLL $20, X4 + PXOR X4, X1 + PADDD X1, X0 + PXOR X0, X3 + PSHUFB X6, X3 + PSHUFD $0X39, X0, X0 + PADDD X3, X2 + PSHUFD $0X4E, X3, X3 + PXOR X2, X1 + PSHUFD $0X93, X2, X2 + MOVO X1, X4 + PSLLL $7, X1 + PSRLL $25, X4 + PXOR X4, X1 + JA hchacha_ssse3_mainloop + + MOVOU X0, 0(DX) + MOVOU X3, 16(DX) + + RET diff --git a/vendor/blitter.com/go/chacha20/internal/ref/impl.go b/vendor/blitter.com/go/chacha20/internal/ref/impl.go new file mode 100644 index 0000000..d3a8ca6 --- /dev/null +++ b/vendor/blitter.com/go/chacha20/internal/ref/impl.go @@ -0,0 +1,374 @@ +// Copryright (C) 2019 Yawning Angel +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Package ref provides the portable ChaCha20 implementation. +package ref + +import ( + "encoding/binary" + "math/bits" + + "blitter.com/go/chacha20/internal/api" +) + +const rounds = 20 + +// Impl is the reference implementation (exposed for testing). +var Impl = &implRef{} + +type implRef struct{} + +func (impl *implRef) Name() string { + return "ref" +} + +func (impl *implRef) Blocks(x *[api.StateSize]uint32, dst, src []byte, nrBlocks int) { + for n := 0; n < nrBlocks; n++ { + x0, x1, x2, x3 := api.Sigma0, api.Sigma1, api.Sigma2, api.Sigma3 + x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 := x[4], x[5], x[6], x[7], x[8], x[9], x[10], x[11], x[12], x[13], x[14], x[15] + + for i := rounds; i > 0; i -= 2 { + // quarterround(x, 0, 4, 8, 12) + x0 += x4 + x12 ^= x0 + x12 = bits.RotateLeft32(x12, 16) + x8 += x12 + x4 ^= x8 + x4 = bits.RotateLeft32(x4, 12) + x0 += x4 + x12 ^= x0 + x12 = bits.RotateLeft32(x12, 8) + x8 += x12 + x4 ^= x8 + x4 = bits.RotateLeft32(x4, 7) + + // quarterround(x, 1, 5, 9, 13) + x1 += x5 + x13 ^= x1 + x13 = bits.RotateLeft32(x13, 16) + x9 += x13 + x5 ^= x9 + x5 = bits.RotateLeft32(x5, 12) + x1 += x5 + x13 ^= x1 + x13 = bits.RotateLeft32(x13, 8) + x9 += x13 + x5 ^= x9 + x5 = bits.RotateLeft32(x5, 7) + + // quarterround(x, 2, 6, 10, 14) + x2 += x6 + x14 ^= x2 + x14 = bits.RotateLeft32(x14, 16) + x10 += x14 + x6 ^= x10 + x6 = bits.RotateLeft32(x6, 12) + x2 += x6 + x14 ^= x2 + x14 = bits.RotateLeft32(x14, 8) + x10 += x14 + x6 ^= x10 + x6 = bits.RotateLeft32(x6, 7) + + // quarterround(x, 3, 7, 11, 15) + x3 += x7 + x15 ^= x3 + x15 = bits.RotateLeft32(x15, 16) + x11 += x15 + x7 ^= x11 + x7 = bits.RotateLeft32(x7, 12) + x3 += x7 + x15 ^= x3 + x15 = bits.RotateLeft32(x15, 8) + x11 += x15 + x7 ^= x11 + x7 = bits.RotateLeft32(x7, 7) + + // quarterround(x, 0, 5, 10, 15) + x0 += x5 + x15 ^= x0 + x15 = bits.RotateLeft32(x15, 16) + x10 += x15 + x5 ^= x10 + x5 = bits.RotateLeft32(x5, 12) + x0 += x5 + x15 ^= x0 + x15 = bits.RotateLeft32(x15, 8) + x10 += x15 + x5 ^= x10 + x5 = bits.RotateLeft32(x5, 7) + + // quarterround(x, 1, 6, 11, 12) + x1 += x6 + x12 ^= x1 + x12 = bits.RotateLeft32(x12, 16) + x11 += x12 + x6 ^= x11 + x6 = bits.RotateLeft32(x6, 12) + x1 += x6 + x12 ^= x1 + x12 = bits.RotateLeft32(x12, 8) + x11 += x12 + x6 ^= x11 + x6 = bits.RotateLeft32(x6, 7) + + // quarterround(x, 2, 7, 8, 13) + x2 += x7 + x13 ^= x2 + x13 = bits.RotateLeft32(x13, 16) + x8 += x13 + x7 ^= x8 + x7 = bits.RotateLeft32(x7, 12) + x2 += x7 + x13 ^= x2 + x13 = bits.RotateLeft32(x13, 8) + x8 += x13 + x7 ^= x8 + x7 = bits.RotateLeft32(x7, 7) + + // quarterround(x, 3, 4, 9, 14) + x3 += x4 + x14 ^= x3 + x14 = bits.RotateLeft32(x14, 16) + x9 += x14 + x4 ^= x9 + x4 = bits.RotateLeft32(x4, 12) + x3 += x4 + x14 ^= x3 + x14 = bits.RotateLeft32(x14, 8) + x9 += x14 + x4 ^= x9 + x4 = bits.RotateLeft32(x4, 7) + } + + x0 += api.Sigma0 + x1 += api.Sigma1 + x2 += api.Sigma2 + x3 += api.Sigma3 + x4 += x[4] + x5 += x[5] + x6 += x[6] + x7 += x[7] + x8 += x[8] + x9 += x[9] + x10 += x[10] + x11 += x[11] + x12 += x[12] + x13 += x[13] + x14 += x[14] + x15 += x[15] + + _ = dst[api.BlockSize-1] // Force bounds check elimination. + + if src != nil { + _ = src[api.BlockSize-1] // Force bounds check elimination. + binary.LittleEndian.PutUint32(dst[0:4], binary.LittleEndian.Uint32(src[0:4])^x0) + binary.LittleEndian.PutUint32(dst[4:8], binary.LittleEndian.Uint32(src[4:8])^x1) + binary.LittleEndian.PutUint32(dst[8:12], binary.LittleEndian.Uint32(src[8:12])^x2) + binary.LittleEndian.PutUint32(dst[12:16], binary.LittleEndian.Uint32(src[12:16])^x3) + binary.LittleEndian.PutUint32(dst[16:20], binary.LittleEndian.Uint32(src[16:20])^x4) + binary.LittleEndian.PutUint32(dst[20:24], binary.LittleEndian.Uint32(src[20:24])^x5) + binary.LittleEndian.PutUint32(dst[24:28], binary.LittleEndian.Uint32(src[24:28])^x6) + binary.LittleEndian.PutUint32(dst[28:32], binary.LittleEndian.Uint32(src[28:32])^x7) + binary.LittleEndian.PutUint32(dst[32:36], binary.LittleEndian.Uint32(src[32:36])^x8) + binary.LittleEndian.PutUint32(dst[36:40], binary.LittleEndian.Uint32(src[36:40])^x9) + binary.LittleEndian.PutUint32(dst[40:44], binary.LittleEndian.Uint32(src[40:44])^x10) + binary.LittleEndian.PutUint32(dst[44:48], binary.LittleEndian.Uint32(src[44:48])^x11) + binary.LittleEndian.PutUint32(dst[48:52], binary.LittleEndian.Uint32(src[48:52])^x12) + binary.LittleEndian.PutUint32(dst[52:56], binary.LittleEndian.Uint32(src[52:56])^x13) + binary.LittleEndian.PutUint32(dst[56:60], binary.LittleEndian.Uint32(src[56:60])^x14) + binary.LittleEndian.PutUint32(dst[60:64], binary.LittleEndian.Uint32(src[60:64])^x15) + src = src[api.BlockSize:] + } else { + binary.LittleEndian.PutUint32(dst[0:4], x0) + binary.LittleEndian.PutUint32(dst[4:8], x1) + binary.LittleEndian.PutUint32(dst[8:12], x2) + binary.LittleEndian.PutUint32(dst[12:16], x3) + binary.LittleEndian.PutUint32(dst[16:20], x4) + binary.LittleEndian.PutUint32(dst[20:24], x5) + binary.LittleEndian.PutUint32(dst[24:28], x6) + binary.LittleEndian.PutUint32(dst[28:32], x7) + binary.LittleEndian.PutUint32(dst[32:36], x8) + binary.LittleEndian.PutUint32(dst[36:40], x9) + binary.LittleEndian.PutUint32(dst[40:44], x10) + binary.LittleEndian.PutUint32(dst[44:48], x11) + binary.LittleEndian.PutUint32(dst[48:52], x12) + binary.LittleEndian.PutUint32(dst[52:56], x13) + binary.LittleEndian.PutUint32(dst[56:60], x14) + binary.LittleEndian.PutUint32(dst[60:64], x15) + } + dst = dst[api.BlockSize:] + + // Stoping at 2^70 bytes per nonce is the user's responsibility. + ctr := uint64(x[13])<<32 | uint64(x[12]) + ctr++ + x[12] = uint32(ctr) + x[13] = uint32(ctr >> 32) + } +} + +func (impl *implRef) HChaCha(key, nonce []byte, dst []byte) { + // Force bounds check elimination. + _ = key[31] + _ = nonce[api.HNonceSize-1] + + x0, x1, x2, x3 := api.Sigma0, api.Sigma1, api.Sigma2, api.Sigma3 + 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]) + + // Yes, this could be carved out into a function for code reuse (TM) + // however the go inliner won't inline it. + for i := rounds; i > 0; i -= 2 { + // quarterround(x, 0, 4, 8, 12) + x0 += x4 + x12 ^= x0 + x12 = bits.RotateLeft32(x12, 16) + x8 += x12 + x4 ^= x8 + x4 = bits.RotateLeft32(x4, 12) + x0 += x4 + x12 ^= x0 + x12 = bits.RotateLeft32(x12, 8) + x8 += x12 + x4 ^= x8 + x4 = bits.RotateLeft32(x4, 7) + + // quarterround(x, 1, 5, 9, 13) + x1 += x5 + x13 ^= x1 + x13 = bits.RotateLeft32(x13, 16) + x9 += x13 + x5 ^= x9 + x5 = bits.RotateLeft32(x5, 12) + x1 += x5 + x13 ^= x1 + x13 = bits.RotateLeft32(x13, 8) + x9 += x13 + x5 ^= x9 + x5 = bits.RotateLeft32(x5, 7) + + // quarterround(x, 2, 6, 10, 14) + x2 += x6 + x14 ^= x2 + x14 = bits.RotateLeft32(x14, 16) + x10 += x14 + x6 ^= x10 + x6 = bits.RotateLeft32(x6, 12) + x2 += x6 + x14 ^= x2 + x14 = bits.RotateLeft32(x14, 8) + x10 += x14 + x6 ^= x10 + x6 = bits.RotateLeft32(x6, 7) + + // quarterround(x, 3, 7, 11, 15) + x3 += x7 + x15 ^= x3 + x15 = bits.RotateLeft32(x15, 16) + x11 += x15 + x7 ^= x11 + x7 = bits.RotateLeft32(x7, 12) + x3 += x7 + x15 ^= x3 + x15 = bits.RotateLeft32(x15, 8) + x11 += x15 + x7 ^= x11 + x7 = bits.RotateLeft32(x7, 7) + + // quarterround(x, 0, 5, 10, 15) + x0 += x5 + x15 ^= x0 + x15 = bits.RotateLeft32(x15, 16) + x10 += x15 + x5 ^= x10 + x5 = bits.RotateLeft32(x5, 12) + x0 += x5 + x15 ^= x0 + x15 = bits.RotateLeft32(x15, 8) + x10 += x15 + x5 ^= x10 + x5 = bits.RotateLeft32(x5, 7) + + // quarterround(x, 1, 6, 11, 12) + x1 += x6 + x12 ^= x1 + x12 = bits.RotateLeft32(x12, 16) + x11 += x12 + x6 ^= x11 + x6 = bits.RotateLeft32(x6, 12) + x1 += x6 + x12 ^= x1 + x12 = bits.RotateLeft32(x12, 8) + x11 += x12 + x6 ^= x11 + x6 = bits.RotateLeft32(x6, 7) + + // quarterround(x, 2, 7, 8, 13) + x2 += x7 + x13 ^= x2 + x13 = bits.RotateLeft32(x13, 16) + x8 += x13 + x7 ^= x8 + x7 = bits.RotateLeft32(x7, 12) + x2 += x7 + x13 ^= x2 + x13 = bits.RotateLeft32(x13, 8) + x8 += x13 + x7 ^= x8 + x7 = bits.RotateLeft32(x7, 7) + + // quarterround(x, 3, 4, 9, 14) + x3 += x4 + x14 ^= x3 + x14 = bits.RotateLeft32(x14, 16) + x9 += x14 + x4 ^= x9 + x4 = bits.RotateLeft32(x4, 12) + x3 += x4 + x14 ^= x3 + x14 = bits.RotateLeft32(x14, 8) + x9 += x14 + x4 ^= x9 + x4 = bits.RotateLeft32(x4, 7) + } + + // HChaCha returns x0...x3 | x12...x15, which corresponds to the + // indexes of the ChaCha constant and the indexes of the IV. + _ = dst[api.HashSize-1] // Force bounds check elimination. + binary.LittleEndian.PutUint32(dst[0:4], x0) + binary.LittleEndian.PutUint32(dst[4:8], x1) + binary.LittleEndian.PutUint32(dst[8:12], x2) + binary.LittleEndian.PutUint32(dst[12:16], x3) + binary.LittleEndian.PutUint32(dst[16:20], x12) + binary.LittleEndian.PutUint32(dst[20:24], x13) + binary.LittleEndian.PutUint32(dst[24:28], x14) + binary.LittleEndian.PutUint32(dst[28:32], x15) +} + +// Register appends the implementation to the provided slice, and returns the +// new slice. +func Register(impls []api.Implementation) []api.Implementation { + return append(impls, Impl) +} diff --git a/vendor/blitter.com/go/cryptmt/README.md b/vendor/blitter.com/go/cryptmt/README.md new file mode 100644 index 0000000..2f1e323 --- /dev/null +++ b/vendor/blitter.com/go/cryptmt/README.md @@ -0,0 +1,6 @@ +[![GoDoc](https://godoc.org/blitter.com/go/cryptmt?status.svg)](https://godoc.org/blitter.com/go/cryptmt) + +Implementation of cryptMTv1 stream cipher (but with mtwist64 as base accum) +https://eprint.iacr.org/2005/165.pdf + +Uses Mersenne Twister 64 golang implementation supplied by [cuixin](https://gist.github.com/cuixin): [gist](https://gist.github.com/cuixin/1b8b6bd7bfbde8fe76e8) diff --git a/vendor/blitter.com/go/cryptmt/cryptmt.go b/vendor/blitter.com/go/cryptmt/cryptmt.go new file mode 100644 index 0000000..3a627ed --- /dev/null +++ b/vendor/blitter.com/go/cryptmt/cryptmt.go @@ -0,0 +1,78 @@ +// Package CryptMT - implementation of cryptMTv1 stream cipher +// (but with mtwist64 as base accum) +// https://eprint.iacr.org/2005/165.pdf +package cryptmt + +// TODO rlm: according to go docs, stream ciphers do not implement the +// cipher.Block interface at all (thus do not support Encrypt() or +// Decrypt() .. cipher.StreamReader/StreamWriter() only call +// XORKeyStream() anyhow and for my own purposes this is all that is +// required. + +import ( + "errors" + "io" + + mtwist "blitter.com/go/mtwist" +) + +type Cipher struct { + r io.Reader + w io.Writer + accum uint64 + m *mtwist.MT19937_64 +} + +func (c *Cipher) yield() (r byte) { + c.accum = c.accum * (c.m.Int63() | 1) + r = byte(c.accum>>56) & 0xFF + return +} + +// New creates and returns a Cipher. The key argument should be the +// CryptMT key, 64 bytes. +func New(r io.Reader, w io.Writer, key []byte) (c *Cipher) { + c = &Cipher{m: mtwist.New(), r: r, w: w} + c.m.SeedFullState(key) + c.accum = 1 + // from paper, discard first 64 bytes of output + for idx := 0; idx < 64; idx++ { + _ = c.yield() + } + return c +} + +func (c *Cipher) Read(p []byte) (n int, err error) { + n, err = c.r.Read(p) + if err == nil { + for idx := 0; idx < n; idx++ { + p[idx] = p[idx] ^ c.yield() + } + } + return n, err +} + +func (c *Cipher) Write(p []byte) (n int, err error) { + n, err = c.w.Write(p) + return n, err +} + +// 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 should 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, Stream +// maintains state and does not reset at each XORKeyStream call. +func (c *Cipher) XORKeyStream(dst, src []byte) { + if len(dst) < len(src) { + panic(errors.New("len(dst) < len(src)")) + } + + for i, b := range src { + dst[i] = b ^ c.yield() + } +} diff --git a/vendor/blitter.com/go/goutmp/LICENSE.mit b/vendor/blitter.com/go/goutmp/LICENSE.mit new file mode 100644 index 0000000..8d5754c --- /dev/null +++ b/vendor/blitter.com/go/goutmp/LICENSE.mit @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 - 2018 Russell Magee + +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/blitter.com/go/goutmp/README.md b/vendor/blitter.com/go/goutmp/README.md new file mode 100644 index 0000000..cb956fc --- /dev/null +++ b/vendor/blitter.com/go/goutmp/README.md @@ -0,0 +1,17 @@ +goutmp - Minimal bindings to C stdlib pututmpx(), getutmpx() (/var/log/wtmp) and /var/log/lastlog + +Any Go program which allows user shell access should update the standard UNIX files which track user sessions: /var/log/wtmp (for the 'w' and 'who' commands), and /var/log/lastlog (the 'last' and 'lastlog' commands). + +``` +go doc +package goutmp // import "blitter.com/go/goutmp" + +Golang bindings for basic login/utmp accounting + +type UtmpEntry struct{ ... } + +func Put_lastlog_entry(app, usr, ptsname, host string) +func Unput_utmp(entry UtmpEntry) +func Put_utmp(user, ptsname, host string) UtmpEntry +``` + diff --git a/vendor/blitter.com/go/goutmp/goutmp_bsd.go b/vendor/blitter.com/go/goutmp/goutmp_bsd.go new file mode 100644 index 0000000..4aada2d --- /dev/null +++ b/vendor/blitter.com/go/goutmp/goutmp_bsd.go @@ -0,0 +1,136 @@ +// +build freebsd + +// Golang bindings for basic login/utmp accounting +package goutmp + +//#include +//#include +//#include +//#include +//#include +//#include +//#include +//#include +// +//#include +// +//typedef char char_t; +// +//void pututmpx(struct utmpx* entry, char* uname, char* ptsname, char* host) { +// entry->ut_type = USER_PROCESS; +// entry->ut_pid = getpid(); +// strcpy(entry->ut_line, ptsname + strlen("/dev/")); +// +// strcpy(entry->ut_id, ptsname + strlen("/dev/pts/")); +// +// //entry->ut_time = time(NULL); +// strcpy(entry->ut_user, uname); +// strcpy(entry->ut_host, host); +// //entry->ut_addr = 0; +// setutxent(); +// pututxline(entry); +//} +// +//void unpututmpx(struct utmpx* entry) { +// entry->ut_type = DEAD_PROCESS; +// entry->ut_line[0] = '\0'; +// //entry->ut_time = 0; +// entry->ut_user[0] = '\0'; +// setutxent(); +// pututxline(entry); +// +// endutxent(); +//} +// +//#if 0 +//int putlastlogentry(int64_t t, int uid, char* line, char* host) { +// int retval = 0; +// FILE *f; +// struct lastlog l; +// +// strncpy(l.ll_line, line, UT_LINESIZE); +// l.ll_line[UT_LINESIZE-1] = '\0'; +// strncpy(l.ll_host, host, UT_HOSTSIZE); +// l.ll_host[UT_HOSTSIZE-1] = '\0'; +// +// l.ll_time = (time_t)t; +// //printf("l: ll_line '%s', ll_host '%s', ll_time %d\n", l.ll_line, l.ll_host, l.ll_time); +// +// /* Write lastlog entry at fixed offset (uid * sizeof(struct lastlog) */ +// if( NULL != (f = fopen("/var/log/lastlog", "rw+")) ) { +// if( !fseek(f, (uid * sizeof(struct lastlog)), SEEK_SET) ) { +// int fd = fileno(f); +// if( write(fd, &l, sizeof(l)) == sizeof(l) ) { +// retval = 1; +// //int32_t stat = system("echo ---- lastlog ----; lastlog"); +// } +// } +// fclose(f); +// } +// return retval; +//} +//#else +//int putlastlogentry(int64_t t, int uid, char* line, char* host) { +// return 0; +//} +//#endif +import "C" + +import ( + "fmt" + "net" + "os/user" + "strings" + "time" +) + +// UtmpEntry wraps the C struct utmp +type UtmpEntry struct { + entry C.struct_utmpx +} + +// return remote client hostname or IP if host lookup fails +// addr is expected to be of the format given by net.Addr.String() +// eg., "127.0.0.1:80" or "[::1]:80" +func GetHost(addr string) (h string) { + if !strings.Contains(addr, "[") { + h = strings.Split(addr, ":")[0] + } else { + h = strings.Split(strings.Split(addr, "[")[1], "]")[0] + } + hList, e := net.LookupAddr(h) + //fmt.Printf("lookupAddr:%v\n", hList) + if e == nil { + h = hList[0] + } + return +} + +// Put a username and the originating host/IP to utmp +func Put_utmp(user, ptsName, host string) UtmpEntry { + var entry UtmpEntry + + //log.Println("Put_utmp:host ", host, " user ", user) + C.pututmpx(&entry.entry, C.CString(user), C.CString(ptsName), C.CString(host)) + return entry +} + +// Remove a username/host entry from utmp +func Unput_utmp(entry UtmpEntry) { + C.unpututmpx(&entry.entry) +} + +// Put the login app, username and originating host/IP to lastlog +func Put_lastlog_entry(app, usr, ptsname, host string) { + u, e := user.Lookup(usr) + if e != nil { + return + } + var uid uint32 + fmt.Sscanf(u.Uid, "%d", &uid) + + t := time.Now().Unix() + _ = C.putlastlogentry(C.int64_t(t), C.int(uid), C.CString(app), C.CString(host)) + //stat := C.putlastlogentry(C.int64_t(t), C.int(uid), C.CString(app), C.CString(host)) + //fmt.Println("stat was:",stat) +} diff --git a/vendor/blitter.com/go/goutmp/goutmp_linux.go b/vendor/blitter.com/go/goutmp/goutmp_linux.go new file mode 100644 index 0000000..10513b2 --- /dev/null +++ b/vendor/blitter.com/go/goutmp/goutmp_linux.go @@ -0,0 +1,132 @@ +// +build linux + +// Golang bindings for basic login/utmp accounting +package goutmp + +//#include +//#include +//#include +//#include +//#include +//#include +//#include +//#include +// +//#include +//#include +// +//typedef char char_t; +// +// +//void pututmp(struct utmp* entry, char* uname, char* ptsname, char* host) { +// entry->ut_type = USER_PROCESS; +// entry->ut_pid = getpid(); +// strcpy(entry->ut_line, ptsname + strlen("/dev/")); +// +// strcpy(entry->ut_id, ptsname + strlen("/dev/pts/")); +// +// entry->ut_time = time(NULL); +// strcpy(entry->ut_user, uname); +// strcpy(entry->ut_host, host); +// entry->ut_addr = 0; +// setutent(); +// pututline(entry); +//} +// +//void unpututmp(struct utmp* entry) { +// entry->ut_type = DEAD_PROCESS; +// memset(entry->ut_line, 0, UT_LINESIZE); +// entry->ut_time = 0; +// memset(entry->ut_user, 0, UT_NAMESIZE); +// setutent(); +// pututline(entry); +// +// endutent(); +//} +// +//int putlastlogentry(int64_t t, int uid, char* line, char* host) { +// int retval = 0; +// FILE *f; +// struct lastlog l; +// +// strncpy(l.ll_line, line, UT_LINESIZE); +// l.ll_line[UT_LINESIZE-1] = '\0'; +// strncpy(l.ll_host, host, UT_HOSTSIZE); +// l.ll_host[UT_HOSTSIZE-1] = '\0'; +// +// l.ll_time = (time_t)t; +// //printf("l: ll_line '%s', ll_host '%s', ll_time %d\n", l.ll_line, l.ll_host, l.ll_time); +// +// /* Write lastlog entry at fixed offset (uid * sizeof(struct lastlog) */ +// if( NULL != (f = fopen("/var/log/lastlog", "rw+")) ) { +// if( !fseek(f, (uid * sizeof(struct lastlog)), SEEK_SET) ) { +// int fd = fileno(f); +// if( write(fd, &l, sizeof(l)) == sizeof(l) ) { +// retval = 1; +// //int32_t stat = system("echo ---- lastlog ----; lastlog"); +// } +// } +// fclose(f); +// } +// return retval; +//} +import "C" + +import ( + "fmt" + "net" + "os/user" + "strings" + "time" +) + +// UtmpEntry wraps the C struct utmp +type UtmpEntry struct { + entry C.struct_utmp +} + +// return remote client hostname or IP if host lookup fails +// addr is expected to be of the format given by net.Addr.String() +// eg., "127.0.0.1:80" or "[::1]:80" +func GetHost(addr string) (h string) { + if !strings.Contains(addr, "[") { + h = strings.Split(addr, ":")[0] + } else { + h = strings.Split(strings.Split(addr, "[")[1], "]")[0] + } + hList, e := net.LookupAddr(h) + //fmt.Printf("lookupAddr:%v\n", hList) + if e == nil { + h = hList[0] + } + return +} + +// Put a username and the originating host/IP to utmp +func Put_utmp(user, ptsName, host string) UtmpEntry { + var entry UtmpEntry + + //log.Println("Put_utmp:host ", host, " user ", user) + C.pututmp(&entry.entry, C.CString(user), C.CString(ptsName), C.CString(host)) + return entry +} + +// Remove a username/host entry from utmp +func Unput_utmp(entry UtmpEntry) { + C.unpututmp(&entry.entry) +} + +// Put the login app, username and originating host/IP to lastlog +func Put_lastlog_entry(app, usr, ptsname, host string) { + u, e := user.Lookup(usr) + if e != nil { + return + } + var uid uint32 + fmt.Sscanf(u.Uid, "%d", &uid) + + t := time.Now().Unix() + _ = C.putlastlogentry(C.int64_t(t), C.int(uid), C.CString(app), C.CString(host)) + //stat := C.putlastlogentry(C.int64_t(t), C.int(uid), C.CString(app), C.CString(host)) + //fmt.Println("stat was:",stat) +} diff --git a/vendor/blitter.com/go/herradurakex/LICENSE.gpl b/vendor/blitter.com/go/herradurakex/LICENSE.gpl new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/vendor/blitter.com/go/herradurakex/LICENSE.gpl @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/vendor/blitter.com/go/herradurakex/LICENSE.mit b/vendor/blitter.com/go/herradurakex/LICENSE.mit new file mode 100644 index 0000000..4acc92f --- /dev/null +++ b/vendor/blitter.com/go/herradurakex/LICENSE.mit @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2017 - 2018 Omar Alejandro Herrera Reyna (core HerraduraKEx) +Copyright (c) 2017 - 2018 Russell Magee (hkexsh/hkexshd/hkexpasswd) + +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/blitter.com/go/herradurakex/Makefile b/vendor/blitter.com/go/herradurakex/Makefile new file mode 100644 index 0000000..e59fbc7 --- /dev/null +++ b/vendor/blitter.com/go/herradurakex/Makefile @@ -0,0 +1,17 @@ +.PHONY: info clean all lib + +all: lib + +clean: + go clean . + +lib: info + go install . + +ifneq ($(MSYSTEM),) +info: + @echo "building for Windows (MSYS)" +else +info: + @echo "building for Linux" +endif diff --git a/vendor/blitter.com/go/herradurakex/README.md b/vendor/blitter.com/go/herradurakex/README.md new file mode 100644 index 0000000..82b7368 --- /dev/null +++ b/vendor/blitter.com/go/herradurakex/README.md @@ -0,0 +1 @@ +HerraduraKEx - an experimental Key Encapsulation Mechanism diff --git a/vendor/blitter.com/go/herradurakex/herradurakex.go b/vendor/blitter.com/go/herradurakex/herradurakex.go new file mode 100644 index 0000000..9621e94 --- /dev/null +++ b/vendor/blitter.com/go/herradurakex/herradurakex.go @@ -0,0 +1,182 @@ +// Package hkex - an experimental key exchange algorithm +// by Omar Alejandro Herrera Reyna. +// +// (https://github.com/Caume/HerraduraKEx) +// +// The core HerraduraKEx algorithm is dual-licensed +// by the author (Omar Alejandro Herrera Reyna) +// under GPL3 and MIT licenses. +// See LICENSE.gpl and LICENSE.mit in this distribution +// +// Go implementation Copyright (c) 2017-2018 Russell Magee +// (rmagee_at_gmail_com) +// Licensed under the terms of the MIT license +// See LICENSE.mit in this distribution +package hkex + +/* Herradura - a Key exchange scheme in the style of Diffie-Hellman Key Exchange. + Copyright (C) 2017 Omar Alejandro Herrera Reyna + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + golang implementation by Russ Magee (rmagee_at_gmail.com) */ + +/* This is the core KEx algorithm. For client/server net support code, +See the hkexnet package (currently a sub-package of hkexsh) for a +golang/pkg/net compatible Conn interface using this to negotiate keys and +secure a network channel. */ + +import ( + "fmt" + "math/big" + "math/rand" + "time" +) + +// HerraduraKEx holds the session state for a key exchange. +type HerraduraKEx struct { + intSz, pubSz int + randctx *rand.Rand + a *big.Int + b *big.Int + d, peerD *big.Int + fa *big.Int +} + +// New returns a HerraduraKEx struct. +// +// i - internal (private) random nonce +// p - public (exchanged) random nonce (typically 1/4 bitsize of i) +// +// If i or p are passed as zero, they will default to 256 and 64, +// respectively. +func New(i int, p int) (h *HerraduraKEx) { + h = new(HerraduraKEx) + + if i == 0 { + i = 256 + } + if p == 0 { + p = 64 + } + + h.intSz = i + h.pubSz = p + + h.seed() + h.a = h.rand() + h.b = h.rand() + + h.d = h.fscxRevolve(h.a, h.b, h.pubSz) + return h +} + +func (h *HerraduraKEx) seed() { + r := rand.New(rand.NewSource(time.Now().UnixNano())) + h.randctx = r +} + +func (h *HerraduraKEx) rand() (v *big.Int) { + v = big.NewInt(0) + v.Rand(h.randctx, h.getMax()) + return v +} + +// getMax returns the max value for an n-bit big.Int +func (h *HerraduraKEx) getMax() (n *big.Int) { + n = big.NewInt(0) + var max big.Int + + for i := 0; i < h.intSz; i++ { + max.SetBit(n, i, 1) + } + n = &max + return n +} + +func (h *HerraduraKEx) bitX(x *big.Int, pos int) (ret int64) { + if pos < 0 { + pos = h.intSz - pos + } + + if pos == 0 { + ret = int64(x.Bit(1) ^ x.Bit(0) ^ x.Bit(h.intSz-1)) + } else if pos == h.intSz-1 { + ret = int64(x.Bit(0) ^ x.Bit(pos) ^ x.Bit(pos-1)) + } else { + ret = int64(x.Bit((pos+1)%h.intSz) ^ x.Bit(pos) ^ x.Bit(pos-1)) + } + return ret +} + +func (h *HerraduraKEx) bit(up, down *big.Int, posU, posD int) (ret *big.Int) { + return big.NewInt(h.bitX(up, posU) ^ h.bitX(down, posD)) +} + +func (h *HerraduraKEx) fscx(up, down *big.Int) (result *big.Int) { + result = big.NewInt(0) + + for count := 0; count < h.intSz; count++ { + result.Lsh(result, 1) + result.Add(result, h.bit(up, down, count, count)) + } + return result +} + +// This is the iteration function using the result of the previous iteration +// as the first parameter and the second parameter of the first iteration. +func (h *HerraduraKEx) fscxRevolve(x, y *big.Int, passes int) (result *big.Int) { + result = x + for count := 0; count < passes; count++ { + result = h.fscx(result, y) + } + return result +} + +// D returns the D (FSCX Revolved) value, input to generate FA +// (the value for peer KEx) +func (h HerraduraKEx) D() *big.Int { + return h.d +} + +// PeerD returns the peer D value +func (h HerraduraKEx) PeerD() *big.Int { + return h.peerD +} + +// SetPeerD stores the received peer's D value (contents, not ptr) +func (h *HerraduraKEx) SetPeerD(pd *big.Int) { + h.peerD = new(big.Int).Set(pd) +} + +// ComputeFA computes the FA value, which must be sent to peer for KEx. +func (h *HerraduraKEx) ComputeFA() { + h.fa = h.fscxRevolve(h.peerD, h.b, h.intSz-h.pubSz) + h.fa.Xor(h.fa, h.a) +} + +// FA returns the computed FA value +func (h HerraduraKEx) FA() *big.Int { + return h.fa +} + +// Output HerraduraKEx type value as a string. Implements Stringer interface. +func (h *HerraduraKEx) String() string { + return fmt.Sprintf("s:%d p:%d\na:%s\nb:%s\nd:->%s\n<-peerD:%s\nfa:%s", + h.intSz, h.pubSz, + h.a.Text(16), h.b.Text(16), + h.d.Text(16), + h.peerD.Text(16), + h.fa.Text(16)) +} diff --git a/vendor/blitter.com/go/hopscotch/README.md b/vendor/blitter.com/go/hopscotch/README.md new file mode 100644 index 0000000..735c42e --- /dev/null +++ b/vendor/blitter.com/go/hopscotch/README.md @@ -0,0 +1,29 @@ +# hopscotch + +Experimental cipher using multiple hash algs for keystream. + +The cipher uses multiple trusted hash algorithms, each updated on a schedule (the security factor, 1 to 10) based initially on the secret key, then on random data from a PRNG (currently MTWIST-64, also seeded from the secret key). The XOR value used to encrypt plaintext is picked from bytes of the hash outputs (being appended together into a single pool P), the hash output byte chosen used then as a modulus value to 'hop' to the next XOR value within P (hence the name 'hopscotch'). + +The security of the algorithm is premised on the following axioms: + +1. all hash algorithms used are sufficiently unpredictable in their output based on given input (most importantly the initial key as input to the PRNG and its seeded output); +2. the PRNG is sufficiently random so as to guarantee subsequent input to all hash algorithms used as potential keystream pool bytes for XOR operations is not predictable; +3. the keystream (being the hash outputs at a given time for all hash algorithms used) is re-keyed often enough to prevent excessive re-use of bytes ('excessive' being defined by the strength parameter, restricted from 1 to 10 inclusive by empirical analysis) + +Current implementation uses 2 hash algorithms, SHA512 and BLAKE2B, both giving outputs of fixed-length = 64 bytes. Empirically, using security factors ranging from 1 to 10 (count of input bytes encrypted before re-keying by feeding 32 bytes of PRNG data to derive new hash output XOR pool P) it is unlikely that 64 picks from the pool would re-use the same bytes often enough to compromise security. Tests with the ['circle' analysis tool](https://github.com/circulosmeos/circle) and the 'Tux.ppm' image test indicate ciphertext does not resemble plaintext in any obvious manner. (TODO: diehard tests or others?) + +The use purely of a PRNG plus two or more already-proven hash algorithms as keystream pool material offers a simply-verified security-primitive basis for confidence, plus easy extendability by adding more hash algorithms to the keystream pool P, without complexity of a full re-analysis. So long as each individual hash algorithm is considered safe, hopping between and within the output bytes of each to derive keystream XOR material should also be safe so long as hash output bytes are not re-used extensively. + + +Throughput +-- +On a modest test AMD (Linux amd_x64) encryption rates of approx. 140Mbits/s are achieved (-m 4). As this is a pure Go implementation and little effort has been put into optimization it is reasonable to expect higher rates could be achieved in the future. + +``` +$ time ./cmd -k "SuperSecret#@11ElevenTy" blank700MBenc.bin + +real 0m40.096s +user 0m38.318s +sys 0m2.133s + +``` \ No newline at end of file diff --git a/vendor/blitter.com/go/hopscotch/hopscotch.go b/vendor/blitter.com/go/hopscotch/hopscotch.go new file mode 100644 index 0000000..aea1aea --- /dev/null +++ b/vendor/blitter.com/go/hopscotch/hopscotch.go @@ -0,0 +1,166 @@ +// Package hopscotch - a crypto doodle that uses multiple hash +// algorithm outputs as dynamic sbox/pbox material +// +// Properties visualized using https://github.com/circulosmeos/circle +package hopscotch + +// TODOs: +// -define s-box rotation/shuffle schema +// -devise p-box schema +// ... + +import ( + "errors" + "fmt" + "hash" + "io" + "time" + + mtwist "blitter.com/go/mtwist" // Used to derive hash fodder after seeding w/key + + // hash algos must be manually imported thusly: + // (Would be nice if the golang pkg docs were more clear + // on this...) + "crypto/sha512" + _ "crypto/sha512" + + b2b "golang.org/x/crypto/blake2b" +) + +const ( + maxResched = 10 // above 20 starts to show outlines in 'tuxtest' ... so 10 max +) + +type Cipher struct { + resched int // lower (1) == stronger encryption; weakest (10) == weakest + rounds int + prng *mtwist.MT19937_64 // used to gen initial hash fodder from key + h []hash.Hash + hs []byte + r io.Reader + w io.Writer + idx int + ctr int + rekeyCtr int // must be min of len( c.h[] ) + bTmp byte + k []byte +} + +func New(r io.Reader, w io.Writer, resched int, key []byte) (c *Cipher) { + if resched < 1 || resched > maxResched { + resched = 4 + } + + c = &Cipher{} + c.resched = resched + c.rounds = 1 + c.prng = mtwist.New() + c.r = r + c.w = w + + if len(key) == 0 { + c.k = []byte(fmt.Sprintf("%s", time.Now())) + } else { + c.k = key + } + c.prng.SeedFullState(c.k) + + // Discard first 64 bytes of MT output + for idx := 0; idx < 64; idx++ { + _ = c.prng.Int63() + } + + // Init all the hash algs we're going to 'hop' around with initial keystream + c.h = make([]hash.Hash, 2) + c.h[0] = sha512.New() + c.h[1], _ = b2b.New512(c.k) + c.keyUpdate(c.k) + + c.rekeyCtr = len(c.hs) * c.resched // lower multiplier == greater security, lower speed + //fmt.Fprintf(os.Stderr, "rekeyCtr = %v\n", c.rekeyCtr) + return c +} + +func (c *Cipher) Read(p []byte) (n int, err error) { + n, err = c.r.Read(p) + if err == nil { + for idx := 0; idx < n; idx++ { + p[idx] = c.yield(p[idx]) + } + } + return n, err +} + +func (c *Cipher) Write(p []byte) (n int, err error) { + n, err = c.w.Write(p) + return n, err +} + +// Mutate the session key (intended to be called as encryption proceeds) +func (c *Cipher) keyUpdate(data []byte) { + //fmt.Fprintln(os.Stderr, "--rekey--") + { + c.h[0].Write(data) + sliceTmp := sha512.Sum512(data) + c.hs = sliceTmp[:] + } + { + c.h[1].Write(data) + sliceTmp := b2b.Sum512(data) + c.hs = append(c.hs, sliceTmp[:]...) + } +} + +func (c *Cipher) yield(ib byte) (ob byte) { + c.idx = (c.ctr + c.idx + int(c.bTmp)) % len(c.hs) + c.bTmp = c.hs[c.idx] + c.ctr = c.ctr + 1 + //fmt.Fprintf(os.Stderr, "[c.hidx:%v c.idx:%v]\n", c.hidx, c.idx) + + // NOTE: using a non-prime modulus degrades CV % from ~ 0.055 to ~ 0.07 + switch c.ctr % 3 { + case 0: + ob = c.bTmp ^ ib ^ byte(c.ctr) ^ byte(c.idx) ^ + c.hs[len(c.hs)-19] ^ c.hs[len(c.hs)-2] ^ c.hs[len(c.hs)-3] ^ c.hs[len(c.hs)-5] ^ + c.hs[len(c.hs)-7] ^ c.hs[len(c.hs)-11] ^ c.hs[len(c.hs)-13] ^ c.hs[len(c.hs)-17] + + case 1: + ob = c.bTmp ^ ib ^ byte(c.ctr) ^ byte(c.idx) ^ + c.hs[len(c.hs)-5] ^ c.hs[len(c.hs)-7] ^ c.hs[len(c.hs)-11] ^ c.hs[len(c.hs)-13] ^ + c.hs[len(c.hs)-17] ^ c.hs[len(c.hs)-19] ^ c.hs[len(c.hs)-23] ^ c.hs[len(c.hs)-29] + + case 2: + ob = c.bTmp ^ ib ^ byte(c.ctr) ^ byte(c.idx) ^ + c.hs[len(c.hs)-13] ^ c.hs[len(c.hs)-17] ^ c.hs[len(c.hs)-23] ^ c.hs[len(c.hs)-27] ^ + c.hs[len(c.hs)-29] ^ c.hs[len(c.hs)-31] ^ c.hs[len(c.hs)-2] ^ c.hs[len(c.hs)-3] + } + + if c.ctr%c.rekeyCtr == 0 { + bufTmp := make([]byte, 32) + _, _ = c.prng.Read(bufTmp) + c.keyUpdate(bufTmp) + } + + return +} + +// 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 should 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, Stream +// maintains state and does not reset at each XORKeyStream call. +func (c *Cipher) XORKeyStream(dst, src []byte) { + //fmt.Printf("len dst:%d len src:%d\n", len(dst), len(src)) + if len(dst) < len(src) { + panic(errors.New("len(dst) < len(src)")) + } + + for idx, v := range src { + dst[idx] = c.yield(v) + } +} diff --git a/vendor/blitter.com/go/kyber/.gitignore b/vendor/blitter.com/go/kyber/.gitignore new file mode 100644 index 0000000..d38c149 --- /dev/null +++ b/vendor/blitter.com/go/kyber/.gitignore @@ -0,0 +1,2 @@ +*.swp +*~ diff --git a/vendor/blitter.com/go/kyber/LICENSE b/vendor/blitter.com/go/kyber/LICENSE new file mode 100644 index 0000000..6ca207e --- /dev/null +++ b/vendor/blitter.com/go/kyber/LICENSE @@ -0,0 +1,122 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. + diff --git a/vendor/blitter.com/go/kyber/README.md b/vendor/blitter.com/go/kyber/README.md new file mode 100644 index 0000000..634901c --- /dev/null +++ b/vendor/blitter.com/go/kyber/README.md @@ -0,0 +1,24 @@ +### Kyber - IND-CCA2-secure Key Encapsulation Mechanism +#### Yawning Angel (yawning at schwanenlied dot me) + +[![GoDoc](https://godoc.org/git.schwanenlied.me/yawning/kyber.git?status.svg)](https://godoc.org/git.schwanenlied.me/yawning/kyber.git) + +This package implements the Kyber IND-CCA2-secure key encapsulation +mechanism (KEM), based on the hardness of solving the learning-with-errors +(LWE) problem over module lattices as submitted to the NIST Post-Quantum +Cryptography project. + +This implementation is a port of the Public Domain reference implementation +by Joppe Bos, Léo Ducas, Eike Kiltz , Tancrède Lepoint, Vadim Lyubashevsky, +John Schanck, Peter Schwabe, Gregor Seiler, and Damien Stehlé. + +Additionally implementations of Kyber.AKE and Kyber.UAKE as presented in +the Kyber paper are included for users that seek an authenticated key +exchange. + +Note that the algorithm is not finalized yet, and may change in a backward +incompatible manner in the future. The designers currently recommend +combining Kyber with an established pre-quantum algorithm like ECDH, and +using the Kyber-768 parameter set. + +For more information, see the [project home page](https://pq-crystals.org/kyber/index.shtml). diff --git a/vendor/blitter.com/go/kyber/cbd.go b/vendor/blitter.com/go/kyber/cbd.go new file mode 100644 index 0000000..31ca4fd --- /dev/null +++ b/vendor/blitter.com/go/kyber/cbd.go @@ -0,0 +1,100 @@ +// cbd.go - Centered binomial distribution. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to the software, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +package kyber + +// Load bytes into a 64-bit integer in little-endian order. +func loadLittleEndian(x []byte, bytes int) uint64 { + var r uint64 + for i, v := range x[:bytes] { + r |= uint64(v) << (8 * uint(i)) + } + return r +} + +// Given an array of uniformly random bytes, compute polynomial with +// coefficients distributed according to a centered binomial distribution +// with parameter eta. +func (p *poly) cbd(buf []byte, eta int) { + hardwareAccelImpl.cbdFn(p, buf, eta) +} + +func cbdRef(p *poly, buf []byte, eta int) { + switch eta { + case 3: + var a, b [4]uint32 + for i := 0; i < kyberN/4; i++ { + t := loadLittleEndian(buf[3*i:], 3) + var d uint32 + for j := 0; j < 3; j++ { + d += uint32((t >> uint(j)) & 0x249249) + } + + a[0] = d & 0x7 + b[0] = (d >> 3) & 0x7 + a[1] = (d >> 6) & 0x7 + b[1] = (d >> 9) & 0x7 + a[2] = (d >> 12) & 0x7 + b[2] = (d >> 15) & 0x7 + a[3] = (d >> 18) & 0x7 + b[3] = (d >> 21) + + p.coeffs[4*i+0] = uint16(a[0] + kyberQ - b[0]) + p.coeffs[4*i+1] = uint16(a[1] + kyberQ - b[1]) + p.coeffs[4*i+2] = uint16(a[2] + kyberQ - b[2]) + p.coeffs[4*i+3] = uint16(a[3] + kyberQ - b[3]) + } + case 4: + var a, b [4]uint32 + for i := 0; i < kyberN/4; i++ { + t := loadLittleEndian(buf[4*i:], 4) + var d uint32 + for j := 0; j < 4; j++ { + d += uint32((t >> uint(j)) & 0x11111111) + } + + a[0] = d & 0xf + b[0] = (d >> 4) & 0xf + a[1] = (d >> 8) & 0xf + b[1] = (d >> 12) & 0xf + a[2] = (d >> 16) & 0xf + b[2] = (d >> 20) & 0xf + a[3] = (d >> 24) & 0xf + b[3] = (d >> 28) + + p.coeffs[4*i+0] = uint16(a[0] + kyberQ - b[0]) + p.coeffs[4*i+1] = uint16(a[1] + kyberQ - b[1]) + p.coeffs[4*i+2] = uint16(a[2] + kyberQ - b[2]) + p.coeffs[4*i+3] = uint16(a[3] + kyberQ - b[3]) + } + case 5: + var a, b [4]uint64 + for i := 0; i < kyberN/4; i++ { + t := loadLittleEndian(buf[5*i:], 5) + var d uint64 + for j := 0; j < 5; j++ { + d += (t >> uint(j)) & 0x0842108421 + } + + a[0] = d & 0x1f + b[0] = (d >> 5) & 0x1f + a[1] = (d >> 10) & 0x1f + b[1] = (d >> 15) & 0x1f + a[2] = (d >> 20) & 0x1f + b[2] = (d >> 25) & 0x1f + a[3] = (d >> 30) & 0x1f + b[3] = (d >> 35) + + p.coeffs[4*i+0] = uint16(a[0] + kyberQ - b[0]) + p.coeffs[4*i+1] = uint16(a[1] + kyberQ - b[1]) + p.coeffs[4*i+2] = uint16(a[2] + kyberQ - b[2]) + p.coeffs[4*i+3] = uint16(a[3] + kyberQ - b[3]) + } + default: + panic("kyber: eta must be in {3,4,5}") + } +} diff --git a/vendor/blitter.com/go/kyber/doc.go b/vendor/blitter.com/go/kyber/doc.go new file mode 100644 index 0000000..8789ad4 --- /dev/null +++ b/vendor/blitter.com/go/kyber/doc.go @@ -0,0 +1,27 @@ +// doc.go - Kyber godoc extras. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to the software, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +// Package kyber implements the Kyber IND-CCA2-secure key encapsulation +// mechanism (KEM), based on the hardness of solving the learning-with-errors +// (LWE) problem over module lattices as submitted to the NIST Post-Quantum +// Cryptography project. +// +// This implementation is a port of the Public Domain reference implementation +// by Joppe Bos, Léo Ducas, Eike Kiltz , Tancrède Lepoint, Vadim Lyubashevsky, +// John Schanck, Peter Schwabe, Gregor Seiler, and Damien Stehlé. +// +// Additionally implementations of Kyber.AKE and Kyber.UAKE as presented in +// the Kyber paper are included for users that seek an authenticated key +// exchange. +// +// Note that the algorithm is not finalized yet, and may change in a backward +// incompatible manner in the future. The designers currently recommend +// combining Kyber with an established pre-quantum algorithm like ECDH, and +// using the Kyber-768 parameter set. +// +// For more information, see https://pq-crystals.org/kyber/index.shtml. +package kyber diff --git a/vendor/blitter.com/go/kyber/hwaccel.go b/vendor/blitter.com/go/kyber/hwaccel.go new file mode 100644 index 0000000..80ec831 --- /dev/null +++ b/vendor/blitter.com/go/kyber/hwaccel.go @@ -0,0 +1,46 @@ +// hwaccel.go - Hardware acceleration hooks. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to the software, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +package kyber + +var ( + isHardwareAccelerated = false + hardwareAccelImpl = implReference + + implReference = &hwaccelImpl{ + name: "Reference", + nttFn: nttRef, + invnttFn: invnttRef, + pointwiseAccFn: pointwiseAccRef, + cbdFn: cbdRef, + } +) + +type hwaccelImpl struct { + name string + nttFn func(*[kyberN]uint16) + invnttFn func(*[kyberN]uint16) + pointwiseAccFn func(*poly, *polyVec, *polyVec) + cbdFn func(*poly, []byte, int) +} + +func forceDisableHardwareAcceleration() { + // This is for the benefit of testing, so that it's possible to test + // all versions that are supported by the host. + isHardwareAccelerated = false + hardwareAccelImpl = implReference +} + +// IsHardwareAccelerated returns true iff the Kyber implementation will use +// hardware acceleration (eg: AVX2). +func IsHardwareAccelerated() bool { + return isHardwareAccelerated +} + +func init() { + initHardwareAcceleration() +} diff --git a/vendor/blitter.com/go/kyber/hwaccel_amd64.go b/vendor/blitter.com/go/kyber/hwaccel_amd64.go new file mode 100644 index 0000000..6413187 --- /dev/null +++ b/vendor/blitter.com/go/kyber/hwaccel_amd64.go @@ -0,0 +1,256 @@ +// hwaccel_amd64.go - AMD64 optimized routines. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to the software, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +// +build amd64,!gccgo,!noasm,go1.10 + +package kyber + +var zetasExp = [752]uint16{ + 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, + 3777, 3777, 3777, 3777, 4499, 4499, 4499, 4499, 4499, 4499, 4499, 4499, + 4499, 4499, 4499, 4499, 4499, 4499, 4499, 4499, 3625, 3625, 3625, 3625, + 3625, 3625, 3625, 3625, 3625, 3625, 3625, 3625, 3625, 3625, 3625, 3625, + 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, + 3985, 3985, 3985, 3985, 6581, 6581, 6581, 6581, 6581, 6581, 6581, 6581, + 6581, 6581, 6581, 6581, 6581, 6581, 6581, 6581, 2456, 2456, 2456, 2456, + 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456, + 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, + 2194, 2194, 2194, 2194, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 5431, 5431, 5431, 5431, 5431, 5431, + 5431, 5431, 5431, 5431, 5431, 5431, 5431, 5431, 5431, 5431, 834, 834, + 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, + 5186, 5186, 5186, 5186, 5186, 5186, 5186, 5186, 5186, 5186, 5186, 5186, + 5186, 5186, 5186, 5186, 5362, 5362, 5362, 5362, 5362, 5362, 5362, 5362, + 5362, 5362, 5362, 5362, 5362, 5362, 5362, 5362, 2876, 2876, 2876, 2876, + 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, + 5980, 5980, 5980, 5980, 5980, 5980, 5980, 5980, 5980, 5980, 5980, 5980, + 5980, 5980, 5980, 5980, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, + 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 2816, 2816, 2816, 2816, + 2816, 2816, 2816, 2816, 5593, 5593, 5593, 5593, 5593, 5593, 5593, 5593, + 5444, 5444, 5444, 5444, 5444, 5444, 5444, 5444, 1986, 1986, 1986, 1986, + 1986, 1986, 1986, 1986, 6082, 6082, 6082, 6082, 6082, 6082, 6082, 6082, + 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 3706, 3706, 3706, 3706, + 3706, 3706, 3706, 3706, 5675, 5675, 5675, 5675, 5675, 5675, 5675, 5675, + 6156, 6156, 6156, 6156, 6156, 6156, 6156, 6156, 5124, 5124, 5124, 5124, + 5124, 5124, 5124, 5124, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 4851, 4851, 4851, 4851, + 4851, 4851, 4851, 4851, 3364, 3364, 3364, 3364, 3364, 3364, 3364, 3364, + 617, 617, 617, 617, 617, 617, 617, 617, 1921, 1921, 1921, 1921, 1921, + 1921, 1921, 1921, 3992, 3992, 3992, 3992, 5943, 5943, 5943, 5943, 3266, + 3266, 3266, 3266, 4081, 4081, 4081, 4081, 810, 810, 810, 810, 1887, + 1887, 1887, 1887, 7043, 7043, 7043, 7043, 7674, 7674, 7674, 7674, 7243, + 7243, 7243, 7243, 7002, 7002, 7002, 7002, 6376, 6376, 6376, 6376, 5921, + 5921, 5921, 5921, 396, 396, 396, 396, 4507, 4507, 4507, 4507, 4126, + 4126, 4126, 4126, 5800, 5800, 5800, 5800, 3772, 3772, 3772, 3772, 5146, + 5146, 5146, 5146, 5241, 5241, 5241, 5241, 5126, 5126, 5126, 5126, 1535, + 1535, 1535, 1535, 7132, 7132, 7132, 7132, 3153, 3153, 3153, 3153, 2310, + 2310, 2310, 2310, 6282, 6282, 6282, 6282, 1321, 1321, 1321, 1321, 514, + 514, 514, 514, 4725, 4725, 4725, 4725, 7578, 7578, 7578, 7578, 2804, + 2804, 2804, 2804, 5638, 5638, 5638, 5638, 6250, 6250, 6250, 6250, 6627, + 6627, 1698, 1698, 4225, 4225, 1166, 1166, 2426, 2426, 3831, 3831, 915, + 915, 7679, 7679, 4264, 4264, 7487, 7487, 2919, 2919, 2789, 2789, 3405, + 3405, 2385, 2385, 5568, 5568, 4949, 4949, 2175, 2175, 373, 373, 3692, + 3692, 6951, 6951, 5925, 5925, 3135, 3135, 5290, 5290, 660, 660, 6184, + 6184, 2572, 2572, 4536, 4536, 1350, 1350, 5457, 5457, 4093, 4093, 6000, + 6000, 2883, 2883, 6291, 6291, 1598, 1598, 3750, 3750, 2762, 2762, 2835, + 2835, 2764, 2764, 5448, 5448, 3816, 3816, 6148, 6148, 1464, 1464, 6954, + 6954, 1521, 1521, 1386, 1386, 4253, 4253, 6760, 6760, 4938, 4938, 5521, + 5521, 2649, 2649, 6822, 6822, 2579, 2579, 1532, 1532, 1919, 1919, 7195, + 7195, 404, 404, 6625, 6625, 783, 783, 1799, 1799, 5016, 5016, 3480, + 3480, 2133, 2133, 4371, 4371, 6513, 6513, 7664, 3744, 2422, 2001, 1278, + 929, 6333, 5451, 7502, 6439, 5622, 6611, 2161, 1649, 2072, 3177, 5610, + 1121, 7245, 236, 715, 670, 7023, 6205, 5303, 2767, 3542, 7455, 1203, + 1181, 7530, 3887, 1712, 7459, 2786, 7230, 4134, 1779, 6530, 7247, 3568, + 3988, 3581, 6095, 1509, 2918, 2339, 6274, 3434, 4131, 2340, 2891, 2998, + 4367, 3461, 4962, 5434, 5092, 1144, 1072, 1295, 4866, 3911, 3450, 3781, + 5423, 796, 3163, 4473, 7092, 2963, 7557, 3214, 3334, 4315, 3936, 3723, + 1931, 7252, 7279, 4273, 83, 6155, 826, 6343, 2345, 5378, 2515, 7039, + 5844, 4716, 6890, 370, 293, 3312, 2083, 5992, 6904, 2070, 2262, 6788, + 2386, 7493, 6162, 4807, 6277, 1012, 2130, 1441, 2532, 4346, 6597, 4338, + 2937, 509, 6278, 2812, 3763, 592, 2005, 3657, 2460, 4004, 3752, 692, + 1669, 2167, 4394, +} + +var zetasInvExp = [752]uint16{ + 3287, 5514, 6012, 6989, 3929, 3677, 5221, 4024, 5676, 7089, 3918, 4869, + 1403, 7172, 4744, 3343, 1084, 3335, 5149, 6240, 5551, 6669, 1404, 2874, + 1519, 188, 5295, 893, 5419, 5611, 777, 1689, 5598, 4369, 7388, 7311, + 791, 2965, 1837, 642, 5166, 2303, 5336, 1338, 6855, 1526, 7598, 3408, + 402, 429, 5750, 3958, 3745, 3366, 4347, 4467, 124, 4718, 589, 3208, + 4518, 6885, 2258, 3900, 4231, 3770, 2815, 6386, 6609, 6537, 2589, 2247, + 2719, 4220, 3314, 4683, 4790, 5341, 3550, 4247, 1407, 5342, 4763, 6172, + 1586, 4100, 3693, 4113, 434, 1151, 5902, 3547, 451, 4895, 222, 5969, + 3794, 151, 6500, 6478, 226, 4139, 4914, 2378, 1476, 658, 7011, 6966, + 7445, 436, 6560, 2071, 4504, 5609, 6032, 5520, 1070, 2059, 1242, 179, + 2230, 1348, 6752, 6403, 5680, 5259, 3937, 17, 1168, 1168, 3310, 3310, + 5548, 5548, 4201, 4201, 2665, 2665, 5882, 5882, 6898, 6898, 1056, 1056, + 7277, 7277, 486, 486, 5762, 5762, 6149, 6149, 5102, 5102, 859, 859, + 5032, 5032, 2160, 2160, 2743, 2743, 921, 921, 3428, 3428, 6295, 6295, + 6160, 6160, 727, 727, 6217, 6217, 1533, 1533, 3865, 3865, 2233, 2233, + 4917, 4917, 4846, 4846, 4919, 4919, 3931, 3931, 6083, 6083, 1390, 1390, + 4798, 4798, 1681, 1681, 3588, 3588, 2224, 2224, 6331, 6331, 3145, 3145, + 5109, 5109, 1497, 1497, 7021, 7021, 2391, 2391, 4546, 4546, 1756, 1756, + 730, 730, 3989, 3989, 7308, 7308, 5506, 5506, 2732, 2732, 2113, 2113, + 5296, 5296, 4276, 4276, 4892, 4892, 4762, 4762, 194, 194, 3417, 3417, 2, + 2, 6766, 6766, 3850, 3850, 5255, 5255, 6515, 6515, 3456, 3456, 5983, + 5983, 1054, 1054, 1431, 1431, 1431, 1431, 2043, 2043, 2043, 2043, 4877, + 4877, 4877, 4877, 103, 103, 103, 103, 2956, 2956, 2956, 2956, 7167, + 7167, 7167, 7167, 6360, 6360, 6360, 6360, 1399, 1399, 1399, 1399, 5371, + 5371, 5371, 5371, 4528, 4528, 4528, 4528, 549, 549, 549, 549, 6146, + 6146, 6146, 6146, 2555, 2555, 2555, 2555, 2440, 2440, 2440, 2440, 2535, + 2535, 2535, 2535, 3909, 3909, 3909, 3909, 1881, 1881, 1881, 1881, 3555, + 3555, 3555, 3555, 3174, 3174, 3174, 3174, 7285, 7285, 7285, 7285, 1760, + 1760, 1760, 1760, 1305, 1305, 1305, 1305, 679, 679, 679, 679, 438, 438, + 438, 438, 7, 7, 7, 7, 638, 638, 638, 638, 5794, 5794, 5794, 5794, 6871, + 6871, 6871, 6871, 3600, 3600, 3600, 3600, 4415, 4415, 4415, 4415, 1738, + 1738, 1738, 1738, 3689, 3689, 3689, 3689, 5760, 5760, 5760, 5760, 5760, + 5760, 5760, 5760, 7064, 7064, 7064, 7064, 7064, 7064, 7064, 7064, 4317, + 4317, 4317, 4317, 4317, 4317, 4317, 4317, 2830, 2830, 2830, 2830, 2830, + 2830, 2830, 2830, 6198, 6198, 6198, 6198, 6198, 6198, 6198, 6198, 6385, + 6385, 6385, 6385, 6385, 6385, 6385, 6385, 2557, 2557, 2557, 2557, 2557, + 2557, 2557, 2557, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 2006, + 2006, 2006, 2006, 2006, 2006, 2006, 2006, 3975, 3975, 3975, 3975, 3975, + 3975, 3975, 3975, 5688, 5688, 5688, 5688, 5688, 5688, 5688, 5688, 1599, + 1599, 1599, 1599, 1599, 1599, 1599, 1599, 5695, 5695, 5695, 5695, 5695, + 5695, 5695, 5695, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2088, + 2088, 2088, 2088, 2088, 2088, 2088, 2088, 4865, 4865, 4865, 4865, 4865, + 4865, 4865, 4865, 6267, 6267, 6267, 6267, 6267, 6267, 6267, 6267, 6267, + 6267, 6267, 6267, 6267, 6267, 6267, 6267, 1701, 1701, 1701, 1701, 1701, + 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 4805, + 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, + 4805, 4805, 4805, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, + 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2495, 2495, 2495, 2495, 2495, + 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 6847, + 6847, 6847, 6847, 6847, 6847, 6847, 6847, 6847, 6847, 6847, 6847, 6847, + 6847, 6847, 6847, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, + 2250, 2250, 2250, 2250, 2250, 2250, 2250, 7560, 7560, 7560, 7560, 7560, + 7560, 7560, 7560, 7560, 7560, 7560, 7560, 7560, 7560, 7560, 7560, 5487, + 5487, 5487, 5487, 5487, 5487, 5487, 5487, 5487, 5487, 5487, 5487, 5487, + 5487, 5487, 5487, 5225, 5225, 5225, 5225, 5225, 5225, 5225, 5225, 5225, + 5225, 5225, 5225, 5225, 5225, 5225, 5225, 1100, 1100, 1100, 1100, 1100, + 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 3696, + 3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696, + 3696, 3696, 3696, 4056, 4056, 4056, 4056, 4056, 4056, 4056, 4056, 4056, + 4056, 4056, 4056, 4056, 4056, 4056, 4056, 3182, 3182, 3182, 3182, 3182, + 3182, 3182, 3182, 3182, 3182, 3182, 3182, 3182, 3182, 3182, 3182, 5776, + 5776, 5776, 5776, 5776, 5776, 5776, 5776, 5776, 5776, 5776, 5776, 5776, + 5776, 5776, 5776, +} + +//go:noescape +func cpuidAmd64(cpuidParams *uint32) + +//go:noescape +func xgetbv0Amd64(xcrVec *uint32) + +//go:noescape +func nttAVX2(inout, zetas *uint16) + +//go:noescape +func invnttAVX2(inout, omegas *uint16) + +//go:noescape +func pointwiseAccK2AVX2(dst *uint16, a, b **uint16) + +//go:noescape +func pointwiseAccK3AVX2(dst *uint16, a, b **uint16) + +//go:noescape +func pointwiseAccK4AVX2(dst *uint16, a, b **uint16) + +//go:noescape +func cbdEta4AVX2(dst *uint16, buf *byte) + +func supportsAVX2() bool { + // https://software.intel.com/en-us/articles/how-to-detect-new-instruction-support-in-the-4th-generation-intel-core-processor-family + const ( + osXsaveBit = 1 << 27 + avx2Bit = 1 << 5 + ) + + // Check to see if CPUID actually supports the leaf that indicates AVX2. + // CPUID.(EAX=0H, ECX=0H) >= 7 + regs := [4]uint32{0x00} + cpuidAmd64(®s[0]) + if regs[0] < 7 { + return false + } + + // Check to see if the OS knows how to save/restore XMM/YMM state. + // CPUID.(EAX=01H, ECX=0H):ECX.OSXSAVE[bit 27]==1 + regs = [4]uint32{0x01} + cpuidAmd64(®s[0]) + if regs[2]&osXsaveBit == 0 { + return false + } + xcrRegs := [2]uint32{} + xgetbv0Amd64(&xcrRegs[0]) + if xcrRegs[0]&6 != 6 { + return false + } + + // Check for AVX2 support. + // CPUID.(EAX=07H, ECX=0H):EBX.AVX2[bit 5]==1 + regs = [4]uint32{0x07} + cpuidAmd64(®s[0]) + return regs[1]&avx2Bit != 0 +} + +var implAVX2 = &hwaccelImpl{ + name: "AVX2", + nttFn: nttYMM, + invnttFn: invnttYMM, + pointwiseAccFn: pointwiseAccYMM, + cbdFn: cbdYMM, +} + +func nttYMM(p *[kyberN]uint16) { + nttAVX2(&p[0], &zetasExp[0]) +} + +func invnttYMM(a *[kyberN]uint16) { + invnttAVX2(&a[0], &zetasInvExp[0]) +} + +func pointwiseAccYMM(p *poly, a, b *polyVec) { + // Unlike the C code, a polyVec won't have the polys in contigious + // memory. So each assembly function takes vectors of pointers to + // each polyvec's polys. + // + // Kind of ugly, but it's the price to pay for flexibility... + + var aVec, bVec [4]*uint16 // k is in {2,3,4}. + for i := range a.vec { + aVec[i] = &a.vec[i].coeffs[0] + bVec[i] = &b.vec[i].coeffs[0] + } + + switch len(a.vec) { + case 2: + pointwiseAccK2AVX2(&p.coeffs[0], &aVec[0], &bVec[0]) + case 3: + pointwiseAccK3AVX2(&p.coeffs[0], &aVec[0], &bVec[0]) + case 4: + pointwiseAccK4AVX2(&p.coeffs[0], &aVec[0], &bVec[0]) + } +} + +func cbdYMM(p *poly, buf []byte, eta int) { + switch eta { + case 4: + cbdEta4AVX2(&p.coeffs[0], &buf[0]) + default: + cbdRef(p, buf, eta) + } +} + +func initHardwareAcceleration() { + if supportsAVX2() { + isHardwareAccelerated = true + hardwareAccelImpl = implAVX2 + } +} diff --git a/vendor/blitter.com/go/kyber/hwaccel_amd64.s b/vendor/blitter.com/go/kyber/hwaccel_amd64.s new file mode 100644 index 0000000..a98dc72 --- /dev/null +++ b/vendor/blitter.com/go/kyber/hwaccel_amd64.s @@ -0,0 +1,2749 @@ +// +build !noasm,go1.10 +// hwaccel_amd64.s - AMD64 optimized routines. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to the software, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +#include "textflag.h" + +// func cpuidAmd64(cpuidParams *uint32) +TEXT ·cpuidAmd64(SB), NOSPLIT, $0-8 + MOVQ cpuidParams+0(FP), R15 + MOVL 0(R15), AX + MOVL 8(R15), CX + CPUID + MOVL AX, 0(R15) + MOVL BX, 4(R15) + MOVL CX, 8(R15) + MOVL DX, 12(R15) + RET + +// func xgetbv0Amd64(xcrVec *uint32) +TEXT ·xgetbv0Amd64(SB), NOSPLIT, $0-8 + MOVQ xcrVec+0(FP), BX + XORL CX, CX + XGETBV + MOVL AX, 0(BX) + MOVL DX, 4(BX) + RET + +// Routines taken from the `avx2` implementation, converted to Go's assembly +// dialect. I do this in lieu of cutting myself to see if I still can feel +// pain. +// +// The conversion is mostly direct except: +// * Instead of aligned loads, unaligned loads are used, as there is no +// meaningful difference on modern Intel systems, and it's not immediately +// obvious to me how Go will align global data. +// * The polyvec_pointwise_acc family of routines take vectors of pointers +// due to the different internal memory layout of a polyvec. +// * The constants are renamed slightly. + +// Note: +// * These must be kept in sync with the values in params.go. +// Currently assumes Q = 7681, Q_INV = 57857. +// * Caution, Little endian so things will look different from avx2/consts.c. +DATA ·vpshufb_idx<>+0x00(SB)/8, $0x0504070601000302 +DATA ·vpshufb_idx<>+0x08(SB)/8, $0x0d0c0f0e09080b0a +DATA ·vpshufb_idx<>+0x10(SB)/8, $0x0504070601000302 +DATA ·vpshufb_idx<>+0x18(SB)/8, $0x0d0c0f0e09080b0a +GLOBL ·vpshufb_idx<>(SB), (NOPTR+RODATA), $32 + +DATA ·low_mask<>+0x00(SB)/8, $0x1fff1fff1fff1fff +DATA ·low_mask<>+0x08(SB)/8, $0x1fff1fff1fff1fff +DATA ·low_mask<>+0x10(SB)/8, $0x1fff1fff1fff1fff +DATA ·low_mask<>+0x18(SB)/8, $0x1fff1fff1fff1fff +GLOBL ·low_mask<>(SB), (NOPTR+RODATA), $32 + +DATA ·lowdword<>+0x00(SB)/8, $0x0000ffff0000ffff +DATA ·lowdword<>+0x08(SB)/8, $0x0000ffff0000ffff +DATA ·lowdword<>+0x10(SB)/8, $0x0000ffff0000ffff +DATA ·lowdword<>+0x18(SB)/8, $0x0000ffff0000ffff +GLOBL ·lowdword<>(SB), (NOPTR+RODATA), $32 + +DATA ·q_x16<>+0x00(SB)/8, $0x1e011e011e011e01 +DATA ·q_x16<>+0x08(SB)/8, $0x1e011e011e011e01 +DATA ·q_x16<>+0x10(SB)/8, $0x1e011e011e011e01 +DATA ·q_x16<>+0x18(SB)/8, $0x1e011e011e011e01 +GLOBL ·q_x16<>(SB), (NOPTR+RODATA), $32 + +DATA ·q2_x16<>+0x00(SB)/8, $0x3c023c023c023c02 +DATA ·q2_x16<>+0x08(SB)/8, $0x3c023c023c023c02 +DATA ·q2_x16<>+0x10(SB)/8, $0x3c023c023c023c02 +DATA ·q2_x16<>+0x18(SB)/8, $0x3c023c023c023c02 +GLOBL ·q2_x16<>(SB), (NOPTR+RODATA), $32 + +DATA ·qinv_x16<>+0x00(SB)/8, $0xe201e201e201e201 +DATA ·qinv_x16<>+0x08(SB)/8, $0xe201e201e201e201 +DATA ·qinv_x16<>+0x10(SB)/8, $0xe201e201e201e201 +DATA ·qinv_x16<>+0x18(SB)/8, $0xe201e201e201e201 +GLOBL ·qinv_x16<>(SB), (NOPTR+RODATA), $32 + +DATA ·f_x16<>+0x00(SB)/8, $0x0100010001000100 +DATA ·f_x16<>+0x08(SB)/8, $0x0100010001000100 +DATA ·f_x16<>+0x10(SB)/8, $0x0100010001000100 +DATA ·f_x16<>+0x18(SB)/8, $0x0100010001000100 +GLOBL ·f_x16<>(SB), (NOPTR+RODATA), $32 + +DATA ·v_x16<>+0x00(SB)/8, $0x4442444244424442 +DATA ·v_x16<>+0x08(SB)/8, $0x4442444244424442 +DATA ·v_x16<>+0x10(SB)/8, $0x4442444244424442 +DATA ·v_x16<>+0x18(SB)/8, $0x4442444244424442 +GLOBL ·v_x16<>(SB), (NOPTR+RODATA), $32 + +DATA ·montsq_x16<>+0x00(SB)/8, $0x15c115c115c115c1 +DATA ·montsq_x16<>+0x08(SB)/8, $0x15c115c115c115c1 +DATA ·montsq_x16<>+0x10(SB)/8, $0x15c115c115c115c1 +DATA ·montsq_x16<>+0x18(SB)/8, $0x15c115c115c115c1 +GLOBL ·montsq_x16<>(SB), (NOPTR+RODATA), $32 + +DATA ·mask11<>+0x00(SB)/8, $0x1111111111111111 +DATA ·mask11<>+0x08(SB)/8, $0x1111111111111111 +DATA ·mask11<>+0x10(SB)/8, $0x1111111111111111 +DATA ·mask11<>+0x18(SB)/8, $0x1111111111111111 +GLOBL ·mask11<>(SB), (NOPTR+RODATA), $32 + +DATA ·mask0f<>+0x00(SB)/8, $0x0f0f0f0f0f0f0f0f +DATA ·mask0f<>+0x08(SB)/8, $0x0f0f0f0f0f0f0f0f +DATA ·mask0f<>+0x10(SB)/8, $0x0f0f0f0f0f0f0f0f +DATA ·mask0f<>+0x18(SB)/8, $0x0f0f0f0f0f0f0f0f +GLOBL ·mask0f<>(SB), (NOPTR+RODATA), $32 + +// func nttAVX2(inout, zetas *uint16) +TEXT ·nttAVX2(SB), NOSPLIT, $0-16 + MOVQ inout+0(FP), DI + MOVQ zetas+8(FP), SI + + VMOVDQU ·qinv_x16<>(SB), Y0 + VMOVDQU ·q_x16<>(SB), Y1 + VMOVDQU ·low_mask<>(SB), Y2 + + // zetas + VMOVDQU (SI), Y3 + + // first round + // load + VMOVDQU (DI), Y4 + VMOVDQU 32(DI), Y5 + VMOVDQU 64(DI), Y6 + VMOVDQU 96(DI), Y7 + VMOVDQU 256(DI), Y8 + VMOVDQU 288(DI), Y9 + VMOVDQU 320(DI), Y10 + VMOVDQU 352(DI), Y11 + + // level 0 + // mul + VPMULLW Y3, Y8, Y12 + VPMULHW Y3, Y8, Y8 + VPMULLW Y3, Y9, Y13 + VPMULHW Y3, Y9, Y9 + VPMULLW Y3, Y10, Y14 + VPMULHW Y3, Y10, Y10 + VPMULLW Y3, Y11, Y15 + VPMULHW Y3, Y11, Y11 + + // reduce + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULLW Y0, Y15, Y15 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPMULHW Y1, Y15, Y15 + VPSUBW Y12, Y8, Y12 + VPSUBW Y13, Y9, Y13 + VPSUBW Y14, Y10, Y14 + VPSUBW Y15, Y11, Y15 + + // update + VPSUBW Y12, Y4, Y8 + VPSUBW Y13, Y5, Y9 + VPSUBW Y14, Y6, Y10 + VPSUBW Y15, Y7, Y11 + VPADDW Y12, Y4, Y4 + VPADDW Y13, Y5, Y5 + VPADDW Y14, Y6, Y6 + VPADDW Y15, Y7, Y7 + + // store + VMOVDQU Y4, (DI) + VMOVDQU Y5, 32(DI) + VMOVDQU Y6, 64(DI) + VMOVDQU Y7, 96(DI) + VMOVDQU Y8, 256(DI) + VMOVDQU Y9, 288(DI) + VMOVDQU Y10, 320(DI) + VMOVDQU Y11, 352(DI) + + ADDQ $128, DI + + // second round + // load + VMOVDQU (DI), Y4 + VMOVDQU 32(DI), Y5 + VMOVDQU 64(DI), Y6 + VMOVDQU 96(DI), Y7 + VMOVDQU 256(DI), Y8 + VMOVDQU 288(DI), Y9 + VMOVDQU 320(DI), Y10 + VMOVDQU 352(DI), Y11 + + // level 0 + // mul + VPMULLW Y3, Y8, Y12 + VPMULHW Y3, Y8, Y8 + VPMULLW Y3, Y9, Y13 + VPMULHW Y3, Y9, Y9 + VPMULLW Y3, Y10, Y14 + VPMULHW Y3, Y10, Y10 + VPMULLW Y3, Y11, Y15 + VPMULHW Y3, Y11, Y11 + + // reduce + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULLW Y0, Y15, Y15 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPMULHW Y1, Y15, Y15 + VPSUBW Y12, Y8, Y12 + VPSUBW Y13, Y9, Y13 + VPSUBW Y14, Y10, Y14 + VPSUBW Y15, Y11, Y15 + + // update + VPSUBW Y12, Y4, Y8 + VPSUBW Y13, Y5, Y9 + VPSUBW Y14, Y6, Y10 + VPSUBW Y15, Y7, Y11 + VPADDW Y12, Y4, Y4 + VPADDW Y13, Y5, Y5 + VPADDW Y14, Y6, Y6 + VPADDW Y15, Y7, Y7 + + // store + VMOVDQU Y4, (DI) + VMOVDQU Y5, 32(DI) + VMOVDQU Y6, 64(DI) + VMOVDQU Y7, 96(DI) + VMOVDQU Y8, 256(DI) + VMOVDQU Y9, 288(DI) + VMOVDQU Y10, 320(DI) + VMOVDQU Y11, 352(DI) + + SUBQ $128, DI + + // first round + // zetas + VMOVDQU 32(SI), Y3 + + // load + VMOVDQU (DI), Y4 + VMOVDQU 32(DI), Y5 + VMOVDQU 64(DI), Y6 + VMOVDQU 96(DI), Y7 + VMOVDQU 128(DI), Y8 + VMOVDQU 160(DI), Y9 + VMOVDQU 192(DI), Y10 + VMOVDQU 224(DI), Y11 + + // level 1 + // mul + VPMULLW Y3, Y8, Y12 + VPMULHW Y3, Y8, Y8 + VPMULLW Y3, Y9, Y13 + VPMULHW Y3, Y9, Y9 + VPMULLW Y3, Y10, Y14 + VPMULHW Y3, Y10, Y10 + VPMULLW Y3, Y11, Y15 + VPMULHW Y3, Y11, Y11 + + // reduce + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULLW Y0, Y15, Y15 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPMULHW Y1, Y15, Y15 + VPSUBW Y12, Y8, Y12 + VPSUBW Y13, Y9, Y13 + VPSUBW Y14, Y10, Y14 + VPSUBW Y15, Y11, Y15 + + // update + VPSUBW Y12, Y4, Y8 + VPSUBW Y13, Y5, Y9 + VPSUBW Y14, Y6, Y10 + VPSUBW Y15, Y7, Y11 + VPADDW Y12, Y4, Y4 + VPADDW Y13, Y5, Y5 + VPADDW Y14, Y6, Y6 + VPADDW Y15, Y7, Y7 + + // level 2 + // zetas + VMOVDQU 96(SI), Y15 + VMOVDQU 128(SI), Y3 + + // mul + VPMULLW Y15, Y6, Y12 + VPMULHW Y15, Y6, Y6 + VPMULLW Y15, Y7, Y13 + VPMULHW Y15, Y7, Y7 + VPMULLW Y3, Y10, Y14 + VPMULHW Y3, Y10, Y10 + VPMULLW Y3, Y11, Y15 + VPMULHW Y3, Y11, Y11 + + // reduce + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULLW Y0, Y15, Y15 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPMULHW Y1, Y15, Y15 + VPSUBW Y12, Y6, Y12 + VPSUBW Y13, Y7, Y13 + VPSUBW Y14, Y10, Y14 + VPSUBW Y15, Y11, Y15 + + // update + VPSUBW Y12, Y4, Y6 + VPSUBW Y13, Y5, Y7 + VPSUBW Y14, Y8, Y10 + VPSUBW Y15, Y9, Y11 + VPADDW Y12, Y4, Y4 + VPADDW Y13, Y5, Y5 + VPADDW Y14, Y8, Y8 + VPADDW Y15, Y9, Y9 + + // level 3 + // zetas + VMOVDQU 224(SI), Y13 + VMOVDQU 256(SI), Y14 + VMOVDQU 288(SI), Y15 + VMOVDQU 320(SI), Y3 + + // mul + VPMULLW Y13, Y5, Y12 + VPMULHW Y13, Y5, Y5 + VPMULLW Y14, Y7, Y13 + VPMULHW Y14, Y7, Y7 + VPMULLW Y15, Y9, Y14 + VPMULHW Y15, Y9, Y9 + VPMULLW Y3, Y11, Y15 + VPMULHW Y3, Y11, Y11 + + // reduce + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULLW Y0, Y15, Y15 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPMULHW Y1, Y15, Y15 + VPSUBW Y12, Y5, Y12 + VPSUBW Y13, Y7, Y13 + VPSUBW Y14, Y9, Y14 + VPSUBW Y15, Y11, Y15 + + // reduce 2 + VPSRAW $13, Y4, Y5 + VPSRAW $13, Y6, Y7 + VPSRAW $13, Y8, Y9 + VPSRAW $13, Y10, Y11 + VPAND Y2, Y4, Y4 + VPAND Y2, Y6, Y6 + VPAND Y2, Y8, Y8 + VPAND Y2, Y10, Y10 + VPSUBW Y5, Y4, Y4 + VPSUBW Y7, Y6, Y6 + VPSUBW Y9, Y8, Y8 + VPSUBW Y11, Y10, Y10 + VPSLLW $9, Y5, Y5 + VPSLLW $9, Y7, Y7 + VPSLLW $9, Y9, Y9 + VPSLLW $9, Y11, Y11 + VPADDW Y5, Y4, Y4 + VPADDW Y7, Y6, Y6 + VPADDW Y9, Y8, Y8 + VPADDW Y11, Y10, Y10 + + // update + VPSUBW Y12, Y4, Y5 + VPSUBW Y13, Y6, Y7 + VPSUBW Y14, Y8, Y9 + VPSUBW Y15, Y10, Y11 + VPADDW Y12, Y4, Y4 + VPADDW Y13, Y6, Y6 + VPADDW Y14, Y8, Y8 + VPADDW Y15, Y10, Y10 + + // level 4 + // zetas + VMOVDQU 480(SI), Y12 + VMOVDQU 512(SI), Y13 + VMOVDQU 544(SI), Y14 + VMOVDQU 576(SI), Y15 + + // shuffle + VPERM2I128 $0x02, Y4, Y5, Y3 + VPERM2I128 $0x13, Y4, Y5, Y4 + VPERM2I128 $0x02, Y6, Y7, Y5 + VPERM2I128 $0x13, Y6, Y7, Y6 + VPERM2I128 $0x02, Y8, Y9, Y7 + VPERM2I128 $0x13, Y8, Y9, Y8 + VPERM2I128 $0x02, Y10, Y11, Y9 + VPERM2I128 $0x13, Y10, Y11, Y10 + + // mul + VPMULLW Y12, Y4, Y11 + VPMULHW Y12, Y4, Y4 + VPMULLW Y13, Y6, Y12 + VPMULHW Y13, Y6, Y6 + VPMULLW Y14, Y8, Y13 + VPMULHW Y14, Y8, Y8 + VPMULLW Y15, Y10, Y14 + VPMULHW Y15, Y10, Y10 + + // reduce + VPMULLW Y0, Y11, Y11 + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULHW Y1, Y11, Y11 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPSUBW Y11, Y4, Y11 + VPSUBW Y12, Y6, Y12 + VPSUBW Y13, Y8, Y13 + VPSUBW Y14, Y10, Y14 + + // update + VPSUBW Y11, Y3, Y4 + VPSUBW Y12, Y5, Y6 + VPSUBW Y13, Y7, Y8 + VPSUBW Y14, Y9, Y10 + VPADDW Y11, Y3, Y3 + VPADDW Y12, Y5, Y5 + VPADDW Y13, Y7, Y7 + VPADDW Y14, Y9, Y9 + + // level 5 + // zetas + VMOVDQU 736(SI), Y12 + VMOVDQU 768(SI), Y13 + VMOVDQU 800(SI), Y14 + VMOVDQU 832(SI), Y15 + + // shuffle + VSHUFPD $0x00, Y4, Y3, Y11 + VSHUFPD $0x0F, Y4, Y3, Y3 + VSHUFPD $0x00, Y6, Y5, Y4 + VSHUFPD $0x0F, Y6, Y5, Y5 + VSHUFPD $0x00, Y8, Y7, Y6 + VSHUFPD $0x0F, Y8, Y7, Y7 + VSHUFPD $0x00, Y10, Y9, Y8 + VSHUFPD $0x0F, Y10, Y9, Y9 + + // mul + VPMULLW Y12, Y3, Y10 + VPMULHW Y12, Y3, Y3 + VPMULLW Y13, Y5, Y12 + VPMULHW Y13, Y5, Y5 + VPMULLW Y14, Y7, Y13 + VPMULHW Y14, Y7, Y7 + VPMULLW Y15, Y9, Y14 + VPMULHW Y15, Y9, Y9 + + // reduce + VPMULLW Y0, Y10, Y10 + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULHW Y1, Y10, Y10 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPSUBW Y10, Y3, Y10 + VPSUBW Y12, Y5, Y12 + VPSUBW Y13, Y7, Y13 + VPSUBW Y14, Y9, Y14 + + // update + VPSUBW Y10, Y11, Y3 + VPSUBW Y12, Y4, Y5 + VPSUBW Y13, Y6, Y7 + VPSUBW Y14, Y8, Y9 + VPADDW Y10, Y11, Y10 + VPADDW Y12, Y4, Y4 + VPADDW Y13, Y6, Y6 + VPADDW Y14, Y8, Y8 + + // level 6 + // shuffle + VPSHUFD $0xB1, Y10, Y12 + VPSHUFD $0xB1, Y3, Y13 + VPSHUFD $0xB1, Y4, Y14 + VPSHUFD $0xB1, Y5, Y15 + VPBLENDD $0x55, Y10, Y13, Y10 + VPBLENDD $0xAA, Y3, Y12, Y3 + VPBLENDD $0x55, Y4, Y15, Y4 + VPBLENDD $0xAA, Y5, Y14, Y5 + VPSHUFD $0xB1, Y6, Y12 + VPSHUFD $0xB1, Y7, Y13 + VPSHUFD $0xB1, Y8, Y14 + VPSHUFD $0xB1, Y9, Y15 + VPBLENDD $0x55, Y6, Y13, Y6 + VPBLENDD $0xAA, Y7, Y12, Y7 + VPBLENDD $0x55, Y8, Y15, Y8 + VPBLENDD $0xAA, Y9, Y14, Y9 + + // zetas + VMOVDQU 992(SI), Y12 + VMOVDQU 1024(SI), Y13 + VMOVDQU 1056(SI), Y14 + VMOVDQU 1088(SI), Y15 + + // mul + VPMULLW Y12, Y3, Y11 + VPMULHW Y12, Y3, Y3 + VPMULLW Y13, Y5, Y12 + VPMULHW Y13, Y5, Y5 + VPMULLW Y14, Y7, Y13 + VPMULHW Y14, Y7, Y7 + VPMULLW Y15, Y9, Y14 + VPMULHW Y15, Y9, Y9 + + // reduce + VPMULLW Y0, Y11, Y11 + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULHW Y1, Y11, Y11 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPSUBW Y11, Y3, Y11 + VPSUBW Y12, Y5, Y12 + VPSUBW Y13, Y7, Y13 + VPSUBW Y14, Y9, Y14 + + // reduce 2 + VPSRAW $13, Y10, Y3 + VPSRAW $13, Y4, Y5 + VPSRAW $13, Y6, Y7 + VPSRAW $13, Y8, Y9 + VPAND Y2, Y10, Y10 + VPAND Y2, Y4, Y4 + VPAND Y2, Y6, Y6 + VPAND Y2, Y8, Y8 + VPSUBW Y3, Y10, Y10 + VPSUBW Y5, Y4, Y4 + VPSUBW Y7, Y6, Y6 + VPSUBW Y9, Y8, Y8 + VPSLLW $9, Y3, Y3 + VPSLLW $9, Y5, Y5 + VPSLLW $9, Y7, Y7 + VPSLLW $9, Y9, Y9 + VPADDW Y3, Y10, Y10 + VPADDW Y5, Y4, Y4 + VPADDW Y7, Y6, Y6 + VPADDW Y9, Y8, Y8 + + // update + VPSUBW Y11, Y10, Y3 + VPSUBW Y12, Y4, Y5 + VPSUBW Y13, Y6, Y7 + VPSUBW Y14, Y8, Y9 + VPADDW Y11, Y10, Y10 + VPADDW Y12, Y4, Y4 + VPADDW Y13, Y6, Y6 + VPADDW Y14, Y8, Y8 + + // level 7 + // shuffle + VMOVDQU ·vpshufb_idx<>(SB), Y15 + VPSHUFB Y15, Y10, Y11 + VPSHUFB Y15, Y3, Y12 + VPSHUFB Y15, Y4, Y13 + VPSHUFB Y15, Y5, Y14 + VPBLENDW $0x55, Y10, Y12, Y10 + VPBLENDW $0xAA, Y3, Y11, Y3 + VPBLENDW $0x55, Y4, Y14, Y4 + VPBLENDW $0xAA, Y5, Y13, Y5 + VPSHUFB Y15, Y6, Y11 + VPSHUFB Y15, Y7, Y12 + VPSHUFB Y15, Y8, Y13 + VPSHUFB Y15, Y9, Y14 + VPBLENDW $0x55, Y6, Y12, Y6 + VPBLENDW $0xAA, Y7, Y11, Y7 + VPBLENDW $0x55, Y8, Y14, Y8 + VPBLENDW $0xAA, Y9, Y13, Y9 + + // zetas + VMOVDQU 1248(SI), Y12 + VMOVDQU 1280(SI), Y13 + VMOVDQU 1312(SI), Y14 + VMOVDQU 1344(SI), Y15 + + // mul + VPMULLW Y12, Y3, Y11 + VPMULHW Y12, Y3, Y3 + VPMULLW Y13, Y5, Y12 + VPMULHW Y13, Y5, Y5 + VPMULLW Y14, Y7, Y13 + VPMULHW Y14, Y7, Y7 + VPMULLW Y15, Y9, Y14 + VPMULHW Y15, Y9, Y9 + + // reduce + VPMULLW Y0, Y11, Y11 + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULHW Y1, Y11, Y11 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPSUBW Y11, Y3, Y11 + VPSUBW Y12, Y5, Y12 + VPSUBW Y13, Y7, Y13 + VPSUBW Y14, Y9, Y14 + + // reduce 3 + VMOVDQU ·q2_x16<>(SB), Y15 + VPSRAW $15, Y10, Y3 + VPSRAW $15, Y4, Y5 + VPSRAW $15, Y6, Y7 + VPSRAW $15, Y8, Y9 + VPAND Y15, Y3, Y3 + VPAND Y15, Y5, Y5 + VPAND Y15, Y7, Y7 + VPAND Y15, Y9, Y9 + VPADDW Y1, Y10, Y10 + VPADDW Y1, Y4, Y4 + VPADDW Y1, Y6, Y6 + VPADDW Y1, Y8, Y8 + VPADDW Y3, Y10, Y10 + VPADDW Y5, Y4, Y4 + VPADDW Y7, Y6, Y6 + VPADDW Y9, Y8, Y8 + + // update + VPSUBW Y11, Y10, Y3 + VPSUBW Y12, Y4, Y5 + VPSUBW Y13, Y6, Y7 + VPSUBW Y14, Y8, Y9 + VPADDW Y11, Y10, Y10 + VPADDW Y12, Y4, Y4 + VPADDW Y13, Y6, Y6 + VPADDW Y14, Y8, Y8 + + // reorder + VPUNPCKLWD Y3, Y10, Y12 + VPUNPCKHWD Y3, Y10, Y13 + VPUNPCKLWD Y5, Y4, Y14 + VPUNPCKHWD Y5, Y4, Y15 + VPUNPCKLWD Y7, Y6, Y3 + VPUNPCKHWD Y7, Y6, Y4 + VPUNPCKLWD Y9, Y8, Y5 + VPUNPCKHWD Y9, Y8, Y6 + VPERM2I128 $0x20, Y13, Y12, Y11 + VPERM2I128 $0x31, Y13, Y12, Y12 + VPERM2I128 $0x20, Y15, Y14, Y13 + VPERM2I128 $0x31, Y15, Y14, Y14 + VPERM2I128 $0x20, Y4, Y3, Y15 + VPERM2I128 $0x31, Y4, Y3, Y3 + VPERM2I128 $0x20, Y6, Y5, Y4 + VPERM2I128 $0x31, Y6, Y5, Y5 + + // store + VMOVDQU Y11, (DI) + VMOVDQU Y12, 32(DI) + VMOVDQU Y13, 64(DI) + VMOVDQU Y14, 96(DI) + VMOVDQU Y15, 128(DI) + VMOVDQU Y3, 160(DI) + VMOVDQU Y4, 192(DI) + VMOVDQU Y5, 224(DI) + + ADDQ $256, DI + + // second round + // zetas + VMOVDQU 64(SI), Y3 + + // load + VMOVDQU (DI), Y4 + VMOVDQU 32(DI), Y5 + VMOVDQU 64(DI), Y6 + VMOVDQU 96(DI), Y7 + VMOVDQU 128(DI), Y8 + VMOVDQU 160(DI), Y9 + VMOVDQU 192(DI), Y10 + VMOVDQU 224(DI), Y11 + + // level 1 + // mul + VPMULLW Y3, Y8, Y12 + VPMULHW Y3, Y8, Y8 + VPMULLW Y3, Y9, Y13 + VPMULHW Y3, Y9, Y9 + VPMULLW Y3, Y10, Y14 + VPMULHW Y3, Y10, Y10 + VPMULLW Y3, Y11, Y15 + VPMULHW Y3, Y11, Y11 + + // reduce + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULLW Y0, Y15, Y15 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPMULHW Y1, Y15, Y15 + VPSUBW Y12, Y8, Y12 + VPSUBW Y13, Y9, Y13 + VPSUBW Y14, Y10, Y14 + VPSUBW Y15, Y11, Y15 + + // update + VPSUBW Y12, Y4, Y8 + VPSUBW Y13, Y5, Y9 + VPSUBW Y14, Y6, Y10 + VPSUBW Y15, Y7, Y11 + VPADDW Y12, Y4, Y4 + VPADDW Y13, Y5, Y5 + VPADDW Y14, Y6, Y6 + VPADDW Y15, Y7, Y7 + + // level 2 + // zetas + VMOVDQU 160(SI), Y15 + VMOVDQU 192(SI), Y3 + + // mul + VPMULLW Y15, Y6, Y12 + VPMULHW Y15, Y6, Y6 + VPMULLW Y15, Y7, Y13 + VPMULHW Y15, Y7, Y7 + VPMULLW Y3, Y10, Y14 + VPMULHW Y3, Y10, Y10 + VPMULLW Y3, Y11, Y15 + VPMULHW Y3, Y11, Y11 + + // reduce + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULLW Y0, Y15, Y15 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPMULHW Y1, Y15, Y15 + VPSUBW Y12, Y6, Y12 + VPSUBW Y13, Y7, Y13 + VPSUBW Y14, Y10, Y14 + VPSUBW Y15, Y11, Y15 + + // update + VPSUBW Y12, Y4, Y6 + VPSUBW Y13, Y5, Y7 + VPSUBW Y14, Y8, Y10 + VPSUBW Y15, Y9, Y11 + VPADDW Y12, Y4, Y4 + VPADDW Y13, Y5, Y5 + VPADDW Y14, Y8, Y8 + VPADDW Y15, Y9, Y9 + + // level 3 + // zetas + VMOVDQU 352(SI), Y13 + VMOVDQU 384(SI), Y14 + VMOVDQU 416(SI), Y15 + VMOVDQU 448(SI), Y3 + + // mul + VPMULLW Y13, Y5, Y12 + VPMULHW Y13, Y5, Y5 + VPMULLW Y14, Y7, Y13 + VPMULHW Y14, Y7, Y7 + VPMULLW Y15, Y9, Y14 + VPMULHW Y15, Y9, Y9 + VPMULLW Y3, Y11, Y15 + VPMULHW Y3, Y11, Y11 + + // reduce + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULLW Y0, Y15, Y15 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPMULHW Y1, Y15, Y15 + VPSUBW Y12, Y5, Y12 + VPSUBW Y13, Y7, Y13 + VPSUBW Y14, Y9, Y14 + VPSUBW Y15, Y11, Y15 + + // reduce 2 + VPSRAW $13, Y4, Y5 + VPSRAW $13, Y6, Y7 + VPSRAW $13, Y8, Y9 + VPSRAW $13, Y10, Y11 + VPAND Y2, Y4, Y4 + VPAND Y2, Y6, Y6 + VPAND Y2, Y8, Y8 + VPAND Y2, Y10, Y10 + VPSUBW Y5, Y4, Y4 + VPSUBW Y7, Y6, Y6 + VPSUBW Y9, Y8, Y8 + VPSUBW Y11, Y10, Y10 + VPSLLW $9, Y5, Y5 + VPSLLW $9, Y7, Y7 + VPSLLW $9, Y9, Y9 + VPSLLW $9, Y11, Y11 + VPADDW Y5, Y4, Y4 + VPADDW Y7, Y6, Y6 + VPADDW Y9, Y8, Y8 + VPADDW Y11, Y10, Y10 + + // update + VPSUBW Y12, Y4, Y5 + VPSUBW Y13, Y6, Y7 + VPSUBW Y14, Y8, Y9 + VPSUBW Y15, Y10, Y11 + VPADDW Y12, Y4, Y4 + VPADDW Y13, Y6, Y6 + VPADDW Y14, Y8, Y8 + VPADDW Y15, Y10, Y10 + + // level 4 + // zetas + VMOVDQU 608(SI), Y12 + VMOVDQU 640(SI), Y13 + VMOVDQU 672(SI), Y14 + VMOVDQU 704(SI), Y15 + + // shuffle + VPERM2I128 $0x02, Y4, Y5, Y3 + VPERM2I128 $0x13, Y4, Y5, Y4 + VPERM2I128 $0x02, Y6, Y7, Y5 + VPERM2I128 $0x13, Y6, Y7, Y6 + VPERM2I128 $0x02, Y8, Y9, Y7 + VPERM2I128 $0x13, Y8, Y9, Y8 + VPERM2I128 $0x02, Y10, Y11, Y9 + VPERM2I128 $0x13, Y10, Y11, Y10 + + // mul + VPMULLW Y12, Y4, Y11 + VPMULHW Y12, Y4, Y4 + VPMULLW Y13, Y6, Y12 + VPMULHW Y13, Y6, Y6 + VPMULLW Y14, Y8, Y13 + VPMULHW Y14, Y8, Y8 + VPMULLW Y15, Y10, Y14 + VPMULHW Y15, Y10, Y10 + + // reduce + VPMULLW Y0, Y11, Y11 + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULHW Y1, Y11, Y11 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPSUBW Y11, Y4, Y11 + VPSUBW Y12, Y6, Y12 + VPSUBW Y13, Y8, Y13 + VPSUBW Y14, Y10, Y14 + + // update + VPSUBW Y11, Y3, Y4 + VPSUBW Y12, Y5, Y6 + VPSUBW Y13, Y7, Y8 + VPSUBW Y14, Y9, Y10 + VPADDW Y11, Y3, Y3 + VPADDW Y12, Y5, Y5 + VPADDW Y13, Y7, Y7 + VPADDW Y14, Y9, Y9 + + // level 5 + // zetas + VMOVDQU 864(SI), Y12 + VMOVDQU 896(SI), Y13 + VMOVDQU 928(SI), Y14 + VMOVDQU 960(SI), Y15 + + // shuffle + VSHUFPD $0x00, Y4, Y3, Y11 + VSHUFPD $0x0F, Y4, Y3, Y3 + VSHUFPD $0x00, Y6, Y5, Y4 + VSHUFPD $0x0F, Y6, Y5, Y5 + VSHUFPD $0x00, Y8, Y7, Y6 + VSHUFPD $0x0F, Y8, Y7, Y7 + VSHUFPD $0x00, Y10, Y9, Y8 + VSHUFPD $0x0F, Y10, Y9, Y9 + + // mul + VPMULLW Y12, Y3, Y10 + VPMULHW Y12, Y3, Y3 + VPMULLW Y13, Y5, Y12 + VPMULHW Y13, Y5, Y5 + VPMULLW Y14, Y7, Y13 + VPMULHW Y14, Y7, Y7 + VPMULLW Y15, Y9, Y14 + VPMULHW Y15, Y9, Y9 + + // reduce + VPMULLW Y0, Y10, Y10 + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULHW Y1, Y10, Y10 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPSUBW Y10, Y3, Y10 + VPSUBW Y12, Y5, Y12 + VPSUBW Y13, Y7, Y13 + VPSUBW Y14, Y9, Y14 + + // update + VPSUBW Y10, Y11, Y3 + VPSUBW Y12, Y4, Y5 + VPSUBW Y13, Y6, Y7 + VPSUBW Y14, Y8, Y9 + VPADDW Y10, Y11, Y10 + VPADDW Y12, Y4, Y4 + VPADDW Y13, Y6, Y6 + VPADDW Y14, Y8, Y8 + + // level 6 + // shuffle + VPSHUFD $0xB1, Y10, Y12 + VPSHUFD $0xB1, Y3, Y13 + VPSHUFD $0xB1, Y4, Y14 + VPSHUFD $0xB1, Y5, Y15 + VPBLENDD $0x55, Y10, Y13, Y10 + VPBLENDD $0xAA, Y3, Y12, Y3 + VPBLENDD $0x55, Y4, Y15, Y4 + VPBLENDD $0xAA, Y5, Y14, Y5 + VPSHUFD $0xB1, Y6, Y12 + VPSHUFD $0xB1, Y7, Y13 + VPSHUFD $0xB1, Y8, Y14 + VPSHUFD $0xB1, Y9, Y15 + VPBLENDD $0x55, Y6, Y13, Y6 + VPBLENDD $0xAA, Y7, Y12, Y7 + VPBLENDD $0x55, Y8, Y15, Y8 + VPBLENDD $0xAA, Y9, Y14, Y9 + + // zetas + VMOVDQU 1120(SI), Y12 + VMOVDQU 1152(SI), Y13 + VMOVDQU 1184(SI), Y14 + VMOVDQU 1216(SI), Y15 + + // mul + VPMULLW Y12, Y3, Y11 + VPMULHW Y12, Y3, Y3 + VPMULLW Y13, Y5, Y12 + VPMULHW Y13, Y5, Y5 + VPMULLW Y14, Y7, Y13 + VPMULHW Y14, Y7, Y7 + VPMULLW Y15, Y9, Y14 + VPMULHW Y15, Y9, Y9 + + // reduce + VPMULLW Y0, Y11, Y11 + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULHW Y1, Y11, Y11 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPSUBW Y11, Y3, Y11 + VPSUBW Y12, Y5, Y12 + VPSUBW Y13, Y7, Y13 + VPSUBW Y14, Y9, Y14 + + // reduce 2 + VPSRAW $13, Y10, Y3 + VPSRAW $13, Y4, Y5 + VPSRAW $13, Y6, Y7 + VPSRAW $13, Y8, Y9 + VPAND Y2, Y10, Y10 + VPAND Y2, Y4, Y4 + VPAND Y2, Y6, Y6 + VPAND Y2, Y8, Y8 + VPSUBW Y3, Y10, Y10 + VPSUBW Y5, Y4, Y4 + VPSUBW Y7, Y6, Y6 + VPSUBW Y9, Y8, Y8 + VPSLLW $9, Y3, Y3 + VPSLLW $9, Y5, Y5 + VPSLLW $9, Y7, Y7 + VPSLLW $9, Y9, Y9 + VPADDW Y3, Y10, Y10 + VPADDW Y5, Y4, Y4 + VPADDW Y7, Y6, Y6 + VPADDW Y9, Y8, Y8 + + // update + VPSUBW Y11, Y10, Y3 + VPSUBW Y12, Y4, Y5 + VPSUBW Y13, Y6, Y7 + VPSUBW Y14, Y8, Y9 + VPADDW Y11, Y10, Y10 + VPADDW Y12, Y4, Y4 + VPADDW Y13, Y6, Y6 + VPADDW Y14, Y8, Y8 + + // level 7 + // shuffle + VMOVDQU ·vpshufb_idx<>(SB), Y15 + VPSHUFB Y15, Y10, Y11 + VPSHUFB Y15, Y3, Y12 + VPSHUFB Y15, Y4, Y13 + VPSHUFB Y15, Y5, Y14 + VPBLENDW $0x55, Y10, Y12, Y10 + VPBLENDW $0xAA, Y3, Y11, Y3 + VPBLENDW $0x55, Y4, Y14, Y4 + VPBLENDW $0xAA, Y5, Y13, Y5 + VPSHUFB Y15, Y6, Y11 + VPSHUFB Y15, Y7, Y12 + VPSHUFB Y15, Y8, Y13 + VPSHUFB Y15, Y9, Y14 + VPBLENDW $0x55, Y6, Y12, Y6 + VPBLENDW $0xAA, Y7, Y11, Y7 + VPBLENDW $0x55, Y8, Y14, Y8 + VPBLENDW $0xAA, Y9, Y13, Y9 + + // zetas + VMOVDQU 1376(SI), Y12 + VMOVDQU 1408(SI), Y13 + VMOVDQU 1440(SI), Y14 + VMOVDQU 1472(SI), Y15 + + // mul + VPMULLW Y12, Y3, Y11 + VPMULHW Y12, Y3, Y3 + VPMULLW Y13, Y5, Y12 + VPMULHW Y13, Y5, Y5 + VPMULLW Y14, Y7, Y13 + VPMULHW Y14, Y7, Y7 + VPMULLW Y15, Y9, Y14 + VPMULHW Y15, Y9, Y9 + + // reduce + VPMULLW Y0, Y11, Y11 + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULHW Y1, Y11, Y11 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPSUBW Y11, Y3, Y11 + VPSUBW Y12, Y5, Y12 + VPSUBW Y13, Y7, Y13 + VPSUBW Y14, Y9, Y14 + + // reduce 3 + VMOVDQU ·q2_x16<>(SB), Y15 + VPSRAW $15, Y10, Y3 + VPSRAW $15, Y4, Y5 + VPSRAW $15, Y6, Y7 + VPSRAW $15, Y8, Y9 + VPAND Y15, Y3, Y3 + VPAND Y15, Y5, Y5 + VPAND Y15, Y7, Y7 + VPAND Y15, Y9, Y9 + VPADDW Y1, Y10, Y10 + VPADDW Y1, Y4, Y4 + VPADDW Y1, Y6, Y6 + VPADDW Y1, Y8, Y8 + VPADDW Y3, Y10, Y10 + VPADDW Y5, Y4, Y4 + VPADDW Y7, Y6, Y6 + VPADDW Y9, Y8, Y8 + + // update + VPSUBW Y11, Y10, Y3 + VPSUBW Y12, Y4, Y5 + VPSUBW Y13, Y6, Y7 + VPSUBW Y14, Y8, Y9 + VPADDW Y11, Y10, Y10 + VPADDW Y12, Y4, Y4 + VPADDW Y13, Y6, Y6 + VPADDW Y14, Y8, Y8 + + // reorder + VPUNPCKLWD Y3, Y10, Y12 + VPUNPCKHWD Y3, Y10, Y13 + VPUNPCKLWD Y5, Y4, Y14 + VPUNPCKHWD Y5, Y4, Y15 + VPUNPCKLWD Y7, Y6, Y3 + VPUNPCKHWD Y7, Y6, Y4 + VPUNPCKLWD Y9, Y8, Y5 + VPUNPCKHWD Y9, Y8, Y6 + VPERM2I128 $0x20, Y13, Y12, Y11 + VPERM2I128 $0x31, Y13, Y12, Y12 + VPERM2I128 $0x20, Y15, Y14, Y13 + VPERM2I128 $0x31, Y15, Y14, Y14 + VPERM2I128 $0x20, Y4, Y3, Y15 + VPERM2I128 $0x31, Y4, Y3, Y3 + VPERM2I128 $0x20, Y6, Y5, Y4 + VPERM2I128 $0x31, Y6, Y5, Y5 + + // store + VMOVDQU Y11, (DI) + VMOVDQU Y12, 32(DI) + VMOVDQU Y13, 64(DI) + VMOVDQU Y14, 96(DI) + VMOVDQU Y15, 128(DI) + VMOVDQU Y3, 160(DI) + VMOVDQU Y4, 192(DI) + VMOVDQU Y5, 224(DI) + + VZEROUPPER + RET + +// Go 1.10's VPERMQ support expects the imm8 to be a `int8`, instead of a +// `uint8`. While this is fixed in master, use the signed representation +// for now till it's reasonable to expect versions with the fix to be widely +// available. +// +// See: https://github.com/golang/go/issues/24378 +#define invntt_VPERMQ_IDX $-40 // $0xd8 + +// func invnttAVX2(inout, omegas *uint16) +TEXT ·invnttAVX2(SB), NOSPLIT, $0-16 + MOVQ inout+0(FP), DI + MOVQ omegas+8(FP), SI + + VMOVDQU ·qinv_x16<>(SB), Y0 + VMOVDQU ·q_x16<>(SB), Y1 + VMOVDQU ·v_x16<>(SB), Y2 + + MOVQ SI, R8 + + // first round + // load + VMOVDQU (DI), Y4 + VMOVDQU 32(DI), Y5 + VMOVDQU 64(DI), Y6 + VMOVDQU 96(DI), Y7 + VMOVDQU 128(DI), Y8 + VMOVDQU 160(DI), Y9 + VMOVDQU 192(DI), Y10 + VMOVDQU 224(DI), Y11 + + // reorder + VMOVDQU ·lowdword<>(SB), Y3 + VPAND Y3, Y4, Y12 + VPAND Y3, Y5, Y13 + VPAND Y3, Y6, Y14 + VPAND Y3, Y7, Y15 + VPSRLD $16, Y4, Y4 + VPSRLD $16, Y5, Y5 + VPSRLD $16, Y6, Y6 + VPSRLD $16, Y7, Y7 + VPACKUSDW Y5, Y4, Y5 + VPACKUSDW Y13, Y12, Y4 + VPACKUSDW Y7, Y6, Y7 + VPACKUSDW Y15, Y14, Y6 + VPERMQ invntt_VPERMQ_IDX, Y4, Y4 + VPERMQ invntt_VPERMQ_IDX, Y5, Y5 + VPERMQ invntt_VPERMQ_IDX, Y6, Y6 + VPERMQ invntt_VPERMQ_IDX, Y7, Y7 + VPAND Y3, Y8, Y12 + VPAND Y3, Y9, Y13 + VPAND Y3, Y10, Y14 + VPAND Y3, Y11, Y15 + VPSRLD $16, Y8, Y8 + VPSRLD $16, Y9, Y9 + VPSRLD $16, Y10, Y10 + VPSRLD $16, Y11, Y11 + VPACKUSDW Y9, Y8, Y9 + VPACKUSDW Y13, Y12, Y8 + VPACKUSDW Y11, Y10, Y11 + VPACKUSDW Y15, Y14, Y10 + VPERMQ invntt_VPERMQ_IDX, Y8, Y8 + VPERMQ invntt_VPERMQ_IDX, Y9, Y9 + VPERMQ invntt_VPERMQ_IDX, Y10, Y10 + VPERMQ invntt_VPERMQ_IDX, Y11, Y11 + + // level 0 + // update + VPSUBW Y5, Y4, Y12 + VPSUBW Y7, Y6, Y13 + VPSUBW Y9, Y8, Y14 + VPSUBW Y11, Y10, Y15 + VPADDW Y4, Y5, Y4 + VPADDW Y6, Y7, Y6 + VPADDW Y8, Y9, Y8 + VPADDW Y10, Y11, Y10 + + // zetas + VMOVDQU (R8), Y7 + VMOVDQU 32(R8), Y9 + VMOVDQU 64(R8), Y11 + VMOVDQU 96(R8), Y3 + + // mul + VPMULLW Y7, Y12, Y5 + VPMULHW Y7, Y12, Y12 + VPMULLW Y9, Y13, Y7 + VPMULHW Y9, Y13, Y13 + VPMULLW Y11, Y14, Y9 + VPMULHW Y11, Y14, Y14 + VPMULLW Y3, Y15, Y11 + VPMULHW Y3, Y15, Y15 + + // reduce + VPMULLW Y0, Y5, Y5 + VPMULLW Y0, Y7, Y7 + VPMULLW Y0, Y9, Y9 + VPMULLW Y0, Y11, Y11 + VPMULHW Y1, Y5, Y5 + VPMULHW Y1, Y7, Y7 + VPMULHW Y1, Y9, Y9 + VPMULHW Y1, Y11, Y11 + VPSUBW Y5, Y12, Y5 + VPSUBW Y7, Y13, Y7 + VPSUBW Y9, Y14, Y9 + VPSUBW Y11, Y15, Y11 + + // level 1 + // shuffle + VMOVDQU ·vpshufb_idx<>(SB), Y3 + VPSHUFB Y3, Y4, Y12 + VPSHUFB Y3, Y5, Y13 + VPSHUFB Y3, Y6, Y14 + VPSHUFB Y3, Y7, Y15 + VPBLENDW $0x55, Y4, Y13, Y4 + VPBLENDW $0xAA, Y5, Y12, Y5 + VPBLENDW $0x55, Y6, Y15, Y6 + VPBLENDW $0xAA, Y7, Y14, Y7 + VPSHUFB Y3, Y8, Y12 + VPSHUFB Y3, Y9, Y13 + VPSHUFB Y3, Y10, Y14 + VPSHUFB Y3, Y11, Y15 + VPBLENDW $0x55, Y8, Y13, Y8 + VPBLENDW $0xAA, Y9, Y12, Y9 + VPBLENDW $0x55, Y10, Y15, Y10 + VPBLENDW $0xAA, Y11, Y14, Y11 + + // update + VPSUBW Y5, Y4, Y12 + VPSUBW Y7, Y6, Y13 + VPSUBW Y9, Y8, Y14 + VPSUBW Y11, Y10, Y15 + VPADDW Y4, Y5, Y4 + VPADDW Y6, Y7, Y6 + VPADDW Y8, Y9, Y8 + VPADDW Y10, Y11, Y10 + + // zetas + VMOVDQU 256(R8), Y7 + VMOVDQU 288(R8), Y9 + VMOVDQU 320(R8), Y11 + VMOVDQU 352(R8), Y3 + + // mul + VPMULLW Y7, Y12, Y5 + VPMULHW Y7, Y12, Y12 + VPMULLW Y9, Y13, Y7 + VPMULHW Y9, Y13, Y13 + VPMULLW Y11, Y14, Y9 + VPMULHW Y11, Y14, Y14 + VPMULLW Y3, Y15, Y11 + VPMULHW Y3, Y15, Y15 + + // reduce + VPMULLW Y0, Y5, Y5 + VPMULLW Y0, Y7, Y7 + VPMULLW Y0, Y9, Y9 + VPMULLW Y0, Y11, Y11 + VPMULHW Y1, Y5, Y5 + VPMULHW Y1, Y7, Y7 + VPMULHW Y1, Y9, Y9 + VPMULHW Y1, Y11, Y11 + VPSUBW Y5, Y12, Y5 + VPSUBW Y7, Y13, Y7 + VPSUBW Y9, Y14, Y9 + VPSUBW Y11, Y15, Y11 + + // reduce 2 + VPMULHW Y2, Y4, Y12 + VPMULHW Y2, Y6, Y13 + VPMULHW Y2, Y8, Y14 + VPMULHW Y2, Y10, Y15 + VPSRAW $11, Y12, Y12 + VPSRAW $11, Y13, Y13 + VPSRAW $11, Y14, Y14 + VPSRAW $11, Y15, Y15 + VPMULLW Y1, Y12, Y12 + VPMULLW Y1, Y13, Y13 + VPMULLW Y1, Y14, Y14 + VPMULLW Y1, Y15, Y15 + VPSUBW Y12, Y4, Y4 + VPSUBW Y13, Y6, Y6 + VPSUBW Y14, Y8, Y8 + VPSUBW Y15, Y10, Y10 + + // level 2 + // shuffle + VPSHUFD $0xB1, Y4, Y12 + VPSHUFD $0xB1, Y5, Y13 + VPSHUFD $0xB1, Y6, Y14 + VPSHUFD $0xB1, Y7, Y15 + VPBLENDD $0x55, Y4, Y13, Y4 + VPBLENDD $0xAA, Y5, Y12, Y5 + VPBLENDD $0x55, Y6, Y15, Y6 + VPBLENDD $0xAA, Y7, Y14, Y7 + VPSHUFD $0xB1, Y8, Y12 + VPSHUFD $0xB1, Y9, Y13 + VPSHUFD $0xB1, Y10, Y14 + VPSHUFD $0xB1, Y11, Y15 + VPBLENDD $0x55, Y8, Y13, Y8 + VPBLENDD $0xAA, Y9, Y12, Y9 + VPBLENDD $0x55, Y10, Y15, Y10 + VPBLENDD $0xAA, Y11, Y14, Y11 + + // update + VPSUBW Y5, Y4, Y12 + VPSUBW Y7, Y6, Y13 + VPSUBW Y9, Y8, Y14 + VPSUBW Y11, Y10, Y15 + VPADDW Y4, Y5, Y4 + VPADDW Y6, Y7, Y6 + VPADDW Y8, Y9, Y8 + VPADDW Y10, Y11, Y10 + + // zetas + VMOVDQU 512(R8), Y7 + VMOVDQU 544(R8), Y9 + VMOVDQU 576(R8), Y11 + VMOVDQU 608(R8), Y3 + + // mul + VPMULLW Y7, Y12, Y5 + VPMULHW Y7, Y12, Y12 + VPMULLW Y9, Y13, Y7 + VPMULHW Y9, Y13, Y13 + VPMULLW Y11, Y14, Y9 + VPMULHW Y11, Y14, Y14 + VPMULLW Y3, Y15, Y11 + VPMULHW Y3, Y15, Y15 + + // reduce + VPMULLW Y0, Y5, Y5 + VPMULLW Y0, Y7, Y7 + VPMULLW Y0, Y9, Y9 + VPMULLW Y0, Y11, Y11 + VPMULHW Y1, Y5, Y5 + VPMULHW Y1, Y7, Y7 + VPMULHW Y1, Y9, Y9 + VPMULHW Y1, Y11, Y11 + VPSUBW Y5, Y12, Y5 + VPSUBW Y7, Y13, Y7 + VPSUBW Y9, Y14, Y9 + VPSUBW Y11, Y15, Y11 + + // level 3 + // shuffle + VSHUFPD $0x00, Y5, Y4, Y3 + VSHUFPD $0x0F, Y5, Y4, Y4 + VSHUFPD $0x00, Y7, Y6, Y5 + VSHUFPD $0x0F, Y7, Y6, Y6 + VSHUFPD $0x00, Y9, Y8, Y7 + VSHUFPD $0x0F, Y9, Y8, Y8 + VSHUFPD $0x00, Y11, Y10, Y9 + VSHUFPD $0x0F, Y11, Y10, Y10 + + // update + VPSUBW Y4, Y3, Y12 + VPSUBW Y6, Y5, Y13 + VPSUBW Y8, Y7, Y14 + VPSUBW Y10, Y9, Y15 + VPADDW Y3, Y4, Y3 + VPADDW Y5, Y6, Y5 + VPADDW Y7, Y8, Y7 + VPADDW Y9, Y10, Y9 + + // zetas + VMOVDQU 768(R8), Y6 + VMOVDQU 800(R8), Y8 + VMOVDQU 832(R8), Y10 + VMOVDQU 864(R8), Y11 + + // mul + VPMULLW Y6, Y12, Y4 + VPMULHW Y6, Y12, Y12 + VPMULLW Y8, Y13, Y6 + VPMULHW Y8, Y13, Y13 + VPMULLW Y10, Y14, Y8 + VPMULHW Y10, Y14, Y14 + VPMULLW Y11, Y15, Y10 + VPMULHW Y11, Y15, Y15 + + // reduce + VPMULLW Y0, Y4, Y4 + VPMULLW Y0, Y6, Y6 + VPMULLW Y0, Y8, Y8 + VPMULLW Y0, Y10, Y10 + VPMULHW Y1, Y4, Y4 + VPMULHW Y1, Y6, Y6 + VPMULHW Y1, Y8, Y8 + VPMULHW Y1, Y10, Y10 + VPSUBW Y4, Y12, Y4 + VPSUBW Y6, Y13, Y6 + VPSUBW Y8, Y14, Y8 + VPSUBW Y10, Y15, Y10 + + // reduce 2 + VPMULHW Y2, Y3, Y12 + VPMULHW Y2, Y5, Y13 + VPMULHW Y2, Y7, Y14 + VPMULHW Y2, Y9, Y15 + VPSRAW $11, Y12, Y12 + VPSRAW $11, Y13, Y13 + VPSRAW $11, Y14, Y14 + VPSRAW $11, Y15, Y15 + VPMULLW Y1, Y12, Y12 + VPMULLW Y1, Y13, Y13 + VPMULLW Y1, Y14, Y14 + VPMULLW Y1, Y15, Y15 + VPSUBW Y12, Y3, Y3 + VPSUBW Y13, Y5, Y5 + VPSUBW Y14, Y7, Y7 + VPSUBW Y15, Y9, Y9 + + // level 4 + // shuffle + VPERM2I128 $0x02, Y3, Y4, Y11 + VPERM2I128 $0x13, Y3, Y4, Y3 + VPERM2I128 $0x02, Y5, Y6, Y4 + VPERM2I128 $0x13, Y5, Y6, Y5 + VPERM2I128 $0x02, Y7, Y8, Y6 + VPERM2I128 $0x13, Y7, Y8, Y7 + VPERM2I128 $0x02, Y9, Y10, Y8 + VPERM2I128 $0x13, Y9, Y10, Y9 + + // update + VMOVDQA Y11, Y12 + VMOVDQA Y4, Y13 + VMOVDQA Y6, Y14 + VMOVDQA Y8, Y15 + VPADDW Y11, Y3, Y10 + VPADDW Y4, Y5, Y4 + VPADDW Y6, Y7, Y6 + VPADDW Y8, Y9, Y8 + VPSUBW Y3, Y12, Y3 + VPSUBW Y5, Y13, Y5 + VPSUBW Y7, Y14, Y7 + VPSUBW Y9, Y15, Y9 + + // zetas + VMOVDQU 1024(R8), Y12 + VMOVDQU 1056(R8), Y13 + VMOVDQU 1088(R8), Y14 + VMOVDQU 1120(R8), Y15 + + // mul + VPMULLW Y12, Y3, Y11 + VPMULHW Y12, Y3, Y3 + VPMULLW Y13, Y5, Y12 + VPMULHW Y13, Y5, Y5 + VPMULLW Y14, Y7, Y13 + VPMULHW Y14, Y7, Y7 + VPMULLW Y15, Y9, Y14 + VPMULHW Y15, Y9, Y9 + + // reduce + VPMULLW Y0, Y11, Y11 + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULHW Y1, Y11, Y11 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPSUBW Y11, Y3, Y3 + VPSUBW Y12, Y5, Y5 + VPSUBW Y13, Y7, Y7 + VPSUBW Y14, Y9, Y9 + + // level 5 + // update + VMOVDQA Y10, Y12 + VMOVDQA Y3, Y13 + VMOVDQA Y6, Y14 + VMOVDQA Y7, Y15 + VPADDW Y10, Y4, Y10 + VPADDW Y3, Y5, Y3 + VPADDW Y6, Y8, Y6 + VPADDW Y7, Y9, Y7 + VPSUBW Y4, Y12, Y4 + VPSUBW Y5, Y13, Y5 + VPSUBW Y8, Y14, Y8 + VPSUBW Y9, Y15, Y9 + + // zetas + VMOVDQU 1280(SI), Y14 + VMOVDQU 1312(SI), Y15 + + // mul + VPMULLW Y14, Y4, Y11 + VPMULLW Y14, Y5, Y12 + VPMULLW Y15, Y8, Y13 + VPMULHW Y14, Y4, Y4 + VPMULHW Y14, Y5, Y5 + VPMULHW Y15, Y8, Y8 + VPMULLW Y15, Y9, Y14 + VPMULHW Y15, Y9, Y9 + + // reduce + VPMULLW Y0, Y11, Y11 + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULHW Y1, Y11, Y11 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPSUBW Y11, Y4, Y4 + VPSUBW Y12, Y5, Y5 + VPSUBW Y13, Y8, Y8 + VPSUBW Y14, Y9, Y9 + + // reduce 2 + VPMULHW Y2, Y10, Y12 + VPMULHW Y2, Y6, Y13 + VPSRAW $11, Y12, Y12 + VPSRAW $11, Y13, Y13 + VPMULLW Y1, Y12, Y12 + VPMULLW Y1, Y13, Y13 + VPSUBW Y12, Y10, Y10 + VPSUBW Y13, Y6, Y6 + + // level 6 + // update + VMOVDQA Y10, Y12 + VMOVDQA Y3, Y13 + VMOVDQA Y4, Y14 + VMOVDQA Y5, Y15 + VPADDW Y10, Y6, Y10 + VPADDW Y3, Y7, Y3 + VPADDW Y4, Y8, Y4 + VPADDW Y5, Y9, Y5 + VPSUBW Y6, Y12, Y6 + VPSUBW Y7, Y13, Y7 + VPSUBW Y8, Y14, Y8 + VPSUBW Y9, Y15, Y9 + + // zetas + VMOVDQU 1408(SI), Y15 + + // mul + VPMULLW Y15, Y6, Y11 + VPMULLW Y15, Y7, Y12 + VPMULLW Y15, Y8, Y13 + VPMULLW Y15, Y9, Y14 + VPMULHW Y15, Y6, Y6 + VPMULHW Y15, Y7, Y7 + VPMULHW Y15, Y8, Y8 + VPMULHW Y15, Y9, Y9 + + // reduce + VPMULLW Y0, Y11, Y11 + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULHW Y1, Y11, Y11 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPSUBW Y11, Y6, Y6 + VPSUBW Y12, Y7, Y7 + VPSUBW Y13, Y8, Y8 + VPSUBW Y14, Y9, Y9 + + // reduce 2 + VPMULHW Y2, Y3, Y12 + VPSRAW $11, Y12, Y12 + VPMULLW Y1, Y12, Y12 + VPSUBW Y12, Y3, Y3 + + // store + VMOVDQU Y10, (DI) + VMOVDQU Y3, 32(DI) + VMOVDQU Y4, 64(DI) + VMOVDQU Y5, 96(DI) + VMOVDQU Y6, 128(DI) + VMOVDQU Y7, 160(DI) + VMOVDQU Y8, 192(DI) + VMOVDQU Y9, 224(DI) + + ADDQ $256, DI + ADDQ $128, R8 + + // second round + // load + VMOVDQU (DI), Y4 + VMOVDQU 32(DI), Y5 + VMOVDQU 64(DI), Y6 + VMOVDQU 96(DI), Y7 + VMOVDQU 128(DI), Y8 + VMOVDQU 160(DI), Y9 + VMOVDQU 192(DI), Y10 + VMOVDQU 224(DI), Y11 + + // reorder + VMOVDQU ·lowdword<>(SB), Y3 + VPAND Y3, Y4, Y12 + VPAND Y3, Y5, Y13 + VPAND Y3, Y6, Y14 + VPAND Y3, Y7, Y15 + VPSRLD $16, Y4, Y4 + VPSRLD $16, Y5, Y5 + VPSRLD $16, Y6, Y6 + VPSRLD $16, Y7, Y7 + VPACKUSDW Y5, Y4, Y5 + VPACKUSDW Y13, Y12, Y4 + VPACKUSDW Y7, Y6, Y7 + VPACKUSDW Y15, Y14, Y6 + VPERMQ invntt_VPERMQ_IDX, Y4, Y4 + VPERMQ invntt_VPERMQ_IDX, Y5, Y5 + VPERMQ invntt_VPERMQ_IDX, Y6, Y6 + VPERMQ invntt_VPERMQ_IDX, Y7, Y7 + VPAND Y3, Y8, Y12 + VPAND Y3, Y9, Y13 + VPAND Y3, Y10, Y14 + VPAND Y3, Y11, Y15 + VPSRLD $16, Y8, Y8 + VPSRLD $16, Y9, Y9 + VPSRLD $16, Y10, Y10 + VPSRLD $16, Y11, Y11 + VPACKUSDW Y9, Y8, Y9 + VPACKUSDW Y13, Y12, Y8 + VPACKUSDW Y11, Y10, Y11 + VPACKUSDW Y15, Y14, Y10 + VPERMQ invntt_VPERMQ_IDX, Y8, Y8 + VPERMQ invntt_VPERMQ_IDX, Y9, Y9 + VPERMQ invntt_VPERMQ_IDX, Y10, Y10 + VPERMQ invntt_VPERMQ_IDX, Y11, Y11 + + // level 0 + // update + VMOVDQA Y4, Y12 + VMOVDQA Y6, Y13 + VMOVDQA Y8, Y14 + VMOVDQA Y10, Y15 + VPADDW Y4, Y5, Y4 + VPADDW Y6, Y7, Y6 + VPADDW Y8, Y9, Y8 + VPADDW Y10, Y11, Y10 + VPSUBW Y5, Y12, Y5 + VPSUBW Y7, Y13, Y7 + VPSUBW Y9, Y14, Y9 + VPSUBW Y11, Y15, Y11 + + // zetas + VMOVDQU (R8), Y13 + VMOVDQU 32(R8), Y14 + VMOVDQU 64(R8), Y15 + VMOVDQU 96(R8), Y3 + + // mul + VPMULLW Y13, Y5, Y12 + VPMULHW Y13, Y5, Y5 + VPMULLW Y14, Y7, Y13 + VPMULHW Y14, Y7, Y7 + VPMULLW Y15, Y9, Y14 + VPMULHW Y15, Y9, Y9 + VPMULLW Y3, Y11, Y15 + VPMULHW Y3, Y11, Y11 + + // reduce + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULLW Y0, Y15, Y15 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPMULHW Y1, Y15, Y15 + VPSUBW Y12, Y5, Y5 + VPSUBW Y13, Y7, Y7 + VPSUBW Y14, Y9, Y9 + VPSUBW Y15, Y11, Y11 + + // level 1 + // shuffle + VMOVDQU ·vpshufb_idx<>(SB), Y3 + VPSHUFB Y3, Y4, Y12 + VPSHUFB Y3, Y5, Y13 + VPSHUFB Y3, Y6, Y14 + VPSHUFB Y3, Y7, Y15 + VPBLENDW $0x55, Y4, Y13, Y4 + VPBLENDW $0xAA, Y5, Y12, Y5 + VPBLENDW $0x55, Y6, Y15, Y6 + VPBLENDW $0xAA, Y7, Y14, Y7 + VPSHUFB Y3, Y8, Y12 + VPSHUFB Y3, Y9, Y13 + VPSHUFB Y3, Y10, Y14 + VPSHUFB Y3, Y11, Y15 + VPBLENDW $0x55, Y8, Y13, Y8 + VPBLENDW $0xAA, Y9, Y12, Y9 + VPBLENDW $0x55, Y10, Y15, Y10 + VPBLENDW $0xAA, Y11, Y14, Y11 + + // update + VMOVDQA Y4, Y12 + VMOVDQA Y6, Y13 + VMOVDQA Y8, Y14 + VMOVDQA Y10, Y15 + VPADDW Y4, Y5, Y4 + VPADDW Y6, Y7, Y6 + VPADDW Y8, Y9, Y8 + VPADDW Y10, Y11, Y10 + VPSUBW Y5, Y12, Y5 + VPSUBW Y7, Y13, Y7 + VPSUBW Y9, Y14, Y9 + VPSUBW Y11, Y15, Y11 + + // zetas + VMOVDQU 256(R8), Y13 + VMOVDQU 288(R8), Y14 + VMOVDQU 320(R8), Y15 + VMOVDQU 352(R8), Y3 + + // mul + VPMULLW Y13, Y5, Y12 + VPMULHW Y13, Y5, Y5 + VPMULLW Y14, Y7, Y13 + VPMULHW Y14, Y7, Y7 + VPMULLW Y15, Y9, Y14 + VPMULHW Y15, Y9, Y9 + VPMULLW Y3, Y11, Y15 + VPMULHW Y3, Y11, Y11 + + // reduce + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULLW Y0, Y15, Y15 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPMULHW Y1, Y15, Y15 + VPSUBW Y12, Y5, Y5 + VPSUBW Y13, Y7, Y7 + VPSUBW Y14, Y9, Y9 + VPSUBW Y15, Y11, Y11 + + // reduce 2 + VPMULHW Y2, Y4, Y12 + VPMULHW Y2, Y6, Y13 + VPMULHW Y2, Y8, Y14 + VPMULHW Y2, Y10, Y15 + VPSRAW $11, Y12, Y12 + VPSRAW $11, Y13, Y13 + VPSRAW $11, Y14, Y14 + VPSRAW $11, Y15, Y15 + VPMULLW Y1, Y12, Y12 + VPMULLW Y1, Y13, Y13 + VPMULLW Y1, Y14, Y14 + VPMULLW Y1, Y15, Y15 + VPSUBW Y12, Y4, Y4 + VPSUBW Y13, Y6, Y6 + VPSUBW Y14, Y8, Y8 + VPSUBW Y15, Y10, Y10 + + // level 2 + // shuffle + VPSHUFD $0xB1, Y4, Y12 + VPSHUFD $0xB1, Y5, Y13 + VPSHUFD $0xB1, Y6, Y14 + VPSHUFD $0xB1, Y7, Y15 + VPBLENDD $0x55, Y4, Y13, Y4 + VPBLENDD $0xAA, Y5, Y12, Y5 + VPBLENDD $0x55, Y6, Y15, Y6 + VPBLENDD $0xAA, Y7, Y14, Y7 + VPSHUFD $0xB1, Y8, Y12 + VPSHUFD $0xB1, Y9, Y13 + VPSHUFD $0xB1, Y10, Y14 + VPSHUFD $0xB1, Y11, Y15 + VPBLENDD $0x55, Y8, Y13, Y8 + VPBLENDD $0xAA, Y9, Y12, Y9 + VPBLENDD $0x55, Y10, Y15, Y10 + VPBLENDD $0xAA, Y11, Y14, Y11 + + // update + VMOVDQA Y4, Y12 + VMOVDQA Y6, Y13 + VMOVDQA Y8, Y14 + VMOVDQA Y10, Y15 + VPADDW Y4, Y5, Y4 + VPADDW Y6, Y7, Y6 + VPADDW Y8, Y9, Y8 + VPADDW Y10, Y11, Y10 + VPSUBW Y5, Y12, Y5 + VPSUBW Y7, Y13, Y7 + VPSUBW Y9, Y14, Y9 + VPSUBW Y11, Y15, Y11 + + // zetas + VMOVDQU 512(R8), Y13 + VMOVDQU 544(R8), Y14 + VMOVDQU 576(R8), Y15 + VMOVDQU 608(R8), Y3 + + // mul + VPMULLW Y13, Y5, Y12 + VPMULHW Y13, Y5, Y5 + VPMULLW Y14, Y7, Y13 + VPMULHW Y14, Y7, Y7 + VPMULLW Y15, Y9, Y14 + VPMULHW Y15, Y9, Y9 + VPMULLW Y3, Y11, Y15 + VPMULHW Y3, Y11, Y11 + + // reduce + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULLW Y0, Y15, Y15 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPMULHW Y1, Y15, Y15 + VPSUBW Y12, Y5, Y5 + VPSUBW Y13, Y7, Y7 + VPSUBW Y14, Y9, Y9 + VPSUBW Y15, Y11, Y11 + + // level 3 + // shuffle + VSHUFPD $0x00, Y5, Y4, Y3 + VSHUFPD $0x0F, Y5, Y4, Y4 + VSHUFPD $0x00, Y7, Y6, Y5 + VSHUFPD $0x0F, Y7, Y6, Y6 + VSHUFPD $0x00, Y9, Y8, Y7 + VSHUFPD $0x0F, Y9, Y8, Y8 + VSHUFPD $0x00, Y11, Y10, Y9 + VSHUFPD $0x0F, Y11, Y10, Y10 + + // update + VMOVDQA Y3, Y12 + VMOVDQA Y5, Y13 + VMOVDQA Y7, Y14 + VMOVDQA Y9, Y15 + VPADDW Y3, Y4, Y3 + VPADDW Y5, Y6, Y5 + VPADDW Y7, Y8, Y7 + VPADDW Y9, Y10, Y9 + VPSUBW Y4, Y12, Y4 + VPSUBW Y6, Y13, Y6 + VPSUBW Y8, Y14, Y8 + VPSUBW Y10, Y15, Y10 + + // zetas + VMOVDQU 768(R8), Y12 + VMOVDQU 800(R8), Y13 + VMOVDQU 832(R8), Y14 + VMOVDQU 864(R8), Y15 + + // mul + VPMULLW Y12, Y4, Y11 + VPMULHW Y12, Y4, Y4 + VPMULLW Y13, Y6, Y12 + VPMULHW Y13, Y6, Y6 + VPMULLW Y14, Y8, Y13 + VPMULHW Y14, Y8, Y8 + VPMULLW Y15, Y10, Y14 + VPMULHW Y15, Y10, Y10 + + // reduce + VPMULLW Y0, Y11, Y11 + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULHW Y1, Y11, Y11 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPSUBW Y11, Y4, Y4 + VPSUBW Y12, Y6, Y6 + VPSUBW Y13, Y8, Y8 + VPSUBW Y14, Y10, Y10 + + // reduce 2 + VPMULHW Y2, Y3, Y12 + VPMULHW Y2, Y5, Y13 + VPMULHW Y2, Y7, Y14 + VPMULHW Y2, Y9, Y15 + VPSRAW $11, Y12, Y12 + VPSRAW $11, Y13, Y13 + VPSRAW $11, Y14, Y14 + VPSRAW $11, Y15, Y15 + VPMULLW Y1, Y12, Y12 + VPMULLW Y1, Y13, Y13 + VPMULLW Y1, Y14, Y14 + VPMULLW Y1, Y15, Y15 + VPSUBW Y12, Y3, Y3 + VPSUBW Y13, Y5, Y5 + VPSUBW Y14, Y7, Y7 + VPSUBW Y15, Y9, Y9 + + // level 4 + // shuffle + VPERM2I128 $0x02, Y3, Y4, Y11 + VPERM2I128 $0x13, Y3, Y4, Y3 + VPERM2I128 $0x02, Y5, Y6, Y4 + VPERM2I128 $0x13, Y5, Y6, Y5 + VPERM2I128 $0x02, Y7, Y8, Y6 + VPERM2I128 $0x13, Y7, Y8, Y7 + VPERM2I128 $0x02, Y9, Y10, Y8 + VPERM2I128 $0x13, Y9, Y10, Y9 + + // update + VMOVDQA Y11, Y12 + VMOVDQA Y4, Y13 + VMOVDQA Y6, Y14 + VMOVDQA Y8, Y15 + VPADDW Y11, Y3, Y10 + VPADDW Y4, Y5, Y4 + VPADDW Y6, Y7, Y6 + VPADDW Y8, Y9, Y8 + VPSUBW Y3, Y12, Y3 + VPSUBW Y5, Y13, Y5 + VPSUBW Y7, Y14, Y7 + VPSUBW Y9, Y15, Y9 + + // zetas + VMOVDQU 1024(R8), Y12 + VMOVDQU 1056(R8), Y13 + VMOVDQU 1088(R8), Y14 + VMOVDQU 1120(R8), Y15 + + // mul + VPMULLW Y12, Y3, Y11 + VPMULHW Y12, Y3, Y3 + VPMULLW Y13, Y5, Y12 + VPMULHW Y13, Y5, Y5 + VPMULLW Y14, Y7, Y13 + VPMULHW Y14, Y7, Y7 + VPMULLW Y15, Y9, Y14 + VPMULHW Y15, Y9, Y9 + + // reduce + VPMULLW Y0, Y11, Y11 + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULHW Y1, Y11, Y11 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPSUBW Y11, Y3, Y3 + VPSUBW Y12, Y5, Y5 + VPSUBW Y13, Y7, Y7 + VPSUBW Y14, Y9, Y9 + + // level 5 + // update + VMOVDQA Y10, Y12 + VMOVDQA Y3, Y13 + VMOVDQA Y6, Y14 + VMOVDQA Y7, Y15 + VPADDW Y10, Y4, Y10 + VPADDW Y3, Y5, Y3 + VPADDW Y6, Y8, Y6 + VPADDW Y7, Y9, Y7 + VPSUBW Y4, Y12, Y4 + VPSUBW Y5, Y13, Y5 + VPSUBW Y8, Y14, Y8 + VPSUBW Y9, Y15, Y9 + + // zetas + VMOVDQU 1344(SI), Y14 + VMOVDQU 1376(SI), Y15 + + // mul + VPMULLW Y14, Y4, Y11 + VPMULLW Y14, Y5, Y12 + VPMULLW Y15, Y8, Y13 + VPMULHW Y14, Y4, Y4 + VPMULHW Y14, Y5, Y5 + VPMULHW Y15, Y8, Y8 + VPMULLW Y15, Y9, Y14 + VPMULHW Y15, Y9, Y9 + + // reduce + VPMULLW Y0, Y11, Y11 + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULHW Y1, Y11, Y11 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPSUBW Y11, Y4, Y4 + VPSUBW Y12, Y5, Y5 + VPSUBW Y13, Y8, Y8 + VPSUBW Y14, Y9, Y9 + + // reduce 2 + VPMULHW Y2, Y10, Y12 + VPMULHW Y2, Y6, Y13 + VPSRAW $11, Y12, Y12 + VPSRAW $11, Y13, Y13 + VPMULLW Y1, Y12, Y12 + VPMULLW Y1, Y13, Y13 + VPSUBW Y12, Y10, Y10 + VPSUBW Y13, Y6, Y6 + + // level 6 + // update + VMOVDQA Y10, Y12 + VMOVDQA Y3, Y13 + VMOVDQA Y4, Y14 + VMOVDQA Y5, Y15 + VPADDW Y10, Y6, Y10 + VPADDW Y3, Y7, Y3 + VPADDW Y4, Y8, Y4 + VPADDW Y5, Y9, Y5 + VPSUBW Y6, Y12, Y6 + VPSUBW Y7, Y13, Y7 + VPSUBW Y8, Y14, Y8 + VPSUBW Y9, Y15, Y9 + + // zetas + VMOVDQU 1440(SI), Y15 + + // mul + VPMULLW Y15, Y6, Y11 + VPMULLW Y15, Y7, Y12 + VPMULLW Y15, Y8, Y13 + VPMULLW Y15, Y9, Y14 + VPMULHW Y15, Y6, Y6 + VPMULHW Y15, Y7, Y7 + VPMULHW Y15, Y8, Y8 + VPMULHW Y15, Y9, Y9 + + // reduce + VPMULLW Y0, Y11, Y11 + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULHW Y1, Y11, Y11 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPSUBW Y11, Y6, Y6 + VPSUBW Y12, Y7, Y7 + VPSUBW Y13, Y8, Y8 + VPSUBW Y14, Y9, Y9 + + // reduce 2 + VPMULHW Y2, Y3, Y12 + VPSRAW $11, Y12, Y12 + VPMULLW Y1, Y12, Y12 + VPSUBW Y12, Y3, Y3 + + // store + VMOVDQU Y10, (DI) + VMOVDQU Y3, 32(DI) + VMOVDQU Y4, 64(DI) + VMOVDQU Y5, 96(DI) + VMOVDQU Y6, 128(DI) + VMOVDQU Y7, 160(DI) + VMOVDQU Y8, 192(DI) + VMOVDQU Y9, 224(DI) + + SUBQ $256, DI + + // f + VMOVDQU ·f_x16<>(SB), Y2 + + // first round + // load + VMOVDQU (DI), Y4 + VMOVDQU 32(DI), Y5 + VMOVDQU 64(DI), Y6 + VMOVDQU 96(DI), Y7 + VMOVDQU 256(DI), Y8 + VMOVDQU 288(DI), Y9 + VMOVDQU 320(DI), Y10 + VMOVDQU 352(DI), Y11 + + // level 7 + // update + VMOVDQA Y4, Y12 + VMOVDQA Y5, Y13 + VMOVDQA Y6, Y14 + VMOVDQA Y7, Y15 + VPADDW Y4, Y8, Y4 + VPADDW Y5, Y9, Y5 + VPADDW Y6, Y10, Y6 + VPADDW Y7, Y11, Y7 + VPSUBW Y8, Y12, Y8 + VPSUBW Y9, Y13, Y9 + VPSUBW Y10, Y14, Y10 + VPSUBW Y11, Y15, Y11 + + // zeta + VMOVDQU 1472(SI), Y3 + + // mul + VPMULLW Y3, Y8, Y12 + VPMULLW Y3, Y9, Y13 + VPMULLW Y3, Y10, Y14 + VPMULLW Y3, Y11, Y15 + VPMULHW Y3, Y8, Y8 + VPMULHW Y3, Y9, Y9 + VPMULHW Y3, Y10, Y10 + VPMULHW Y3, Y11, Y11 + + // reduce + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULLW Y0, Y15, Y15 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPMULHW Y1, Y15, Y15 + VPSUBW Y12, Y8, Y8 + VPSUBW Y13, Y9, Y9 + VPSUBW Y14, Y10, Y10 + VPSUBW Y15, Y11, Y11 + VPADDW Y1, Y8, Y8 + VPADDW Y1, Y9, Y9 + VPADDW Y1, Y10, Y10 + VPADDW Y1, Y11, Y11 + + // mul + VPMULLW Y2, Y4, Y12 + VPMULLW Y2, Y5, Y13 + VPMULLW Y2, Y6, Y14 + VPMULLW Y2, Y7, Y15 + VPMULHW Y2, Y4, Y4 + VPMULHW Y2, Y5, Y5 + VPMULHW Y2, Y6, Y6 + VPMULHW Y2, Y7, Y7 + + // reduce + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULLW Y0, Y15, Y15 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPMULHW Y1, Y15, Y15 + VPSUBW Y12, Y4, Y4 + VPSUBW Y13, Y5, Y5 + VPSUBW Y14, Y6, Y6 + VPSUBW Y15, Y7, Y7 + VPADDW Y1, Y4, Y4 + VPADDW Y1, Y5, Y5 + VPADDW Y1, Y6, Y6 + VPADDW Y1, Y7, Y7 + + // store + VMOVDQU Y4, (DI) + VMOVDQU Y5, 32(DI) + VMOVDQU Y6, 64(DI) + VMOVDQU Y7, 96(DI) + VMOVDQU Y8, 256(DI) + VMOVDQU Y9, 288(DI) + VMOVDQU Y10, 320(DI) + VMOVDQU Y11, 352(DI) + + ADDQ $128, DI + + // second round + // load + VMOVDQU (DI), Y4 + VMOVDQU 32(DI), Y5 + VMOVDQU 64(DI), Y6 + VMOVDQU 96(DI), Y7 + VMOVDQU 256(DI), Y8 + VMOVDQU 288(DI), Y9 + VMOVDQU 320(DI), Y10 + VMOVDQU 352(DI), Y11 + + // zeta + VMOVDQU 1472(SI), Y3 + + // level 7 + // update + VMOVDQA Y4, Y12 + VMOVDQA Y5, Y13 + VMOVDQA Y6, Y14 + VMOVDQA Y7, Y15 + VPADDW Y4, Y8, Y4 + VPADDW Y5, Y9, Y5 + VPADDW Y6, Y10, Y6 + VPADDW Y7, Y11, Y7 + VPSUBW Y8, Y12, Y8 + VPSUBW Y9, Y13, Y9 + VPSUBW Y10, Y14, Y10 + VPSUBW Y11, Y15, Y11 + + // mul + VPMULLW Y3, Y8, Y12 + VPMULLW Y3, Y9, Y13 + VPMULLW Y3, Y10, Y14 + VPMULLW Y3, Y11, Y15 + VPMULHW Y3, Y8, Y8 + VPMULHW Y3, Y9, Y9 + VPMULHW Y3, Y10, Y10 + VPMULHW Y3, Y11, Y11 + + // reduce + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULLW Y0, Y15, Y15 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPMULHW Y1, Y15, Y15 + VPSUBW Y12, Y8, Y8 + VPSUBW Y13, Y9, Y9 + VPSUBW Y14, Y10, Y10 + VPSUBW Y15, Y11, Y11 + VPADDW Y1, Y8, Y8 + VPADDW Y1, Y9, Y9 + VPADDW Y1, Y10, Y10 + VPADDW Y1, Y11, Y11 + + // mul + VPMULLW Y2, Y4, Y12 + VPMULLW Y2, Y5, Y13 + VPMULLW Y2, Y6, Y14 + VPMULLW Y2, Y7, Y15 + VPMULHW Y2, Y4, Y4 + VPMULHW Y2, Y5, Y5 + VPMULHW Y2, Y6, Y6 + VPMULHW Y2, Y7, Y7 + + // reduce + VPMULLW Y0, Y12, Y12 + VPMULLW Y0, Y13, Y13 + VPMULLW Y0, Y14, Y14 + VPMULLW Y0, Y15, Y15 + VPMULHW Y1, Y12, Y12 + VPMULHW Y1, Y13, Y13 + VPMULHW Y1, Y14, Y14 + VPMULHW Y1, Y15, Y15 + VPSUBW Y12, Y4, Y4 + VPSUBW Y13, Y5, Y5 + VPSUBW Y14, Y6, Y6 + VPSUBW Y15, Y7, Y7 + VPADDW Y1, Y4, Y4 + VPADDW Y1, Y5, Y5 + VPADDW Y1, Y6, Y6 + VPADDW Y1, Y7, Y7 + + // store + VMOVDQU Y4, (DI) + VMOVDQU Y5, 32(DI) + VMOVDQU Y6, 64(DI) + VMOVDQU Y7, 96(DI) + VMOVDQU Y8, 256(DI) + VMOVDQU Y9, 288(DI) + VMOVDQU Y10, 320(DI) + VMOVDQU Y11, 352(DI) + + VZEROUPPER + RET + +// func pointwiseAccK2AVX2(dst *uint16, a, b **uint16) +TEXT ·pointwiseAccK2AVX2(SB), NOSPLIT, $0-24 + MOVQ dst+0(FP), DI + MOVQ a+8(FP), SI + MOVQ b+16(FP), DX + + VMOVDQU ·qinv_x16<>(SB), Y0 + VMOVDQU ·q_x16<>(SB), Y1 + VMOVDQU ·montsq_x16<>(SB), Y2 + + XORQ AX, AX + XORQ BX, BX + + MOVQ 8(SI), R8 // a[1] + MOVQ (SI), SI // a[0] + MOVQ 8(DX), R11 // b[1] + MOVQ (DX), DX // b[0] + +looptop2: + // load a + VMOVDQU (SI)(BX*1), Y4 + VMOVDQU 32(SI)(BX*1), Y5 + VMOVDQU 64(SI)(BX*1), Y6 + VMOVDQU (R8)(BX*1), Y7 + VMOVDQU 32(R8)(BX*1), Y8 + VMOVDQU 64(R8)(BX*1), Y9 + + // mul montsq + VPMULLW Y2, Y4, Y3 + VPMULHW Y2, Y4, Y10 + VPMULLW Y2, Y5, Y4 + VPMULHW Y2, Y5, Y11 + VPMULLW Y2, Y6, Y5 + VPMULHW Y2, Y6, Y12 + VPMULLW Y2, Y7, Y6 + VPMULHW Y2, Y7, Y13 + VPMULLW Y2, Y8, Y7 + VPMULHW Y2, Y8, Y14 + VPMULLW Y2, Y9, Y8 + VPMULHW Y2, Y9, Y15 + + // reduce + VPMULLW Y0, Y3, Y3 + VPMULLW Y0, Y4, Y4 + VPMULLW Y0, Y5, Y5 + VPMULLW Y0, Y6, Y6 + VPMULLW Y0, Y7, Y7 + VPMULLW Y0, Y8, Y8 + VPMULHW Y1, Y3, Y3 + VPMULHW Y1, Y4, Y4 + VPMULHW Y1, Y5, Y5 + VPMULHW Y1, Y6, Y6 + VPMULHW Y1, Y7, Y7 + VPMULHW Y1, Y8, Y8 + VPSUBW Y3, Y10, Y3 + VPSUBW Y4, Y11, Y4 + VPSUBW Y5, Y12, Y5 + VPSUBW Y6, Y13, Y6 + VPSUBW Y7, Y14, Y7 + VPSUBW Y8, Y15, Y8 + + // load b + VMOVDQU (DX)(BX*1), Y9 + VMOVDQU 32(DX)(BX*1), Y10 + VMOVDQU 64(DX)(BX*1), Y11 + VMOVDQU (R11)(BX*1), Y12 + VMOVDQU 32(R11)(BX*1), Y13 + VMOVDQU 64(R11)(BX*1), Y14 + + // mul + VPMULLW Y3, Y9, Y15 + VPMULHW Y3, Y9, Y9 + VPMULLW Y4, Y10, Y3 + VPMULHW Y4, Y10, Y10 + VPMULLW Y5, Y11, Y4 + VPMULHW Y5, Y11, Y11 + VPMULLW Y6, Y12, Y5 + VPMULHW Y6, Y12, Y12 + VPMULLW Y7, Y13, Y6 + VPMULHW Y7, Y13, Y13 + VPMULLW Y8, Y14, Y7 + VPMULHW Y8, Y14, Y14 + + // reduce + VPMULLW Y0, Y15, Y15 + VPMULLW Y0, Y3, Y3 + VPMULLW Y0, Y4, Y4 + VPMULLW Y0, Y5, Y5 + VPMULLW Y0, Y6, Y6 + VPMULLW Y0, Y7, Y7 + VPMULHW Y1, Y15, Y15 + VPMULHW Y1, Y3, Y3 + VPMULHW Y1, Y4, Y4 + VPMULHW Y1, Y5, Y5 + VPMULHW Y1, Y6, Y6 + VPMULHW Y1, Y7, Y7 + VPSUBW Y15, Y9, Y15 + VPSUBW Y3, Y10, Y3 + VPSUBW Y4, Y11, Y4 + VPSUBW Y5, Y12, Y5 + VPSUBW Y6, Y13, Y6 + VPSUBW Y7, Y14, Y7 + + // add + VPADDW Y15, Y5, Y5 + VPADDW Y3, Y6, Y6 + VPADDW Y4, Y7, Y7 + + // reduce 2 + VMOVDQU ·v_x16<>(SB), Y3 + VPMULHW Y3, Y5, Y8 + VPMULHW Y3, Y6, Y9 + VPMULHW Y3, Y7, Y10 + VPSRAW $11, Y8, Y8 + VPSRAW $11, Y9, Y9 + VPSRAW $11, Y10, Y10 + VPMULLW Y1, Y8, Y8 + VPMULLW Y1, Y9, Y9 + VPMULLW Y1, Y10, Y10 + VPSUBW Y8, Y5, Y5 + VPSUBW Y9, Y6, Y6 + VPSUBW Y10, Y7, Y7 + + // store + VMOVDQU Y5, (DI)(BX*1) + VMOVDQU Y6, 32(DI)(BX*1) + VMOVDQU Y7, 64(DI)(BX*1) + + ADDQ $1, AX + ADDQ $96, BX + CMPQ AX, $5 + JB looptop2 + + // load + VMOVDQU (SI)(BX*1), Y4 + VMOVDQU (R8)(BX*1), Y7 + VMOVDQU (DX)(BX*1), Y9 + VMOVDQU (R11)(BX*1), Y12 + + // mul montsq + VPMULLW Y2, Y4, Y3 + VPMULHW Y2, Y4, Y10 + VPMULLW Y2, Y7, Y6 + VPMULHW Y2, Y7, Y13 + + // reduce + VPMULLW Y0, Y3, Y3 + VPMULLW Y0, Y6, Y6 + VPMULHW Y1, Y3, Y3 + VPMULHW Y1, Y6, Y6 + VPSUBW Y3, Y10, Y3 + VPSUBW Y6, Y13, Y6 + + // mul + VPMULLW Y3, Y9, Y15 + VPMULHW Y3, Y9, Y9 + VPMULLW Y6, Y12, Y5 + VPMULHW Y6, Y12, Y12 + + // reduce + VPMULLW Y0, Y15, Y15 + VPMULLW Y0, Y5, Y5 + VPMULHW Y1, Y15, Y15 + VPMULHW Y1, Y5, Y5 + VPSUBW Y15, Y9, Y15 + VPSUBW Y5, Y12, Y5 + + // add + VPADDW Y15, Y5, Y5 + + // reduce 2 + VMOVDQU ·v_x16<>(SB), Y3 + VPMULHW Y3, Y5, Y8 + VPSRAW $11, Y8, Y8 + VPMULLW Y1, Y8, Y8 + VPSUBW Y8, Y5, Y5 + + // store + VMOVDQU Y5, (DI)(BX*1) + + VZEROUPPER + RET + +// func pointwiseAccK2AVX2(dst *uint16, a, b **uint16) +TEXT ·pointwiseAccK3AVX2(SB), NOSPLIT, $0-24 + MOVQ dst+0(FP), DI + MOVQ a+8(FP), SI + MOVQ b+16(FP), DX + + VMOVDQU ·qinv_x16<>(SB), Y0 + VMOVDQU ·q_x16<>(SB), Y1 + VMOVDQU ·montsq_x16<>(SB), Y2 + + XORQ AX, AX + XORQ BX, BX + + MOVQ (16)(SI), R9 // a[2] + MOVQ 8(SI), R8 // a[1] + MOVQ (SI), SI // a[0] + MOVQ 16(DX), R12 // b[2] + MOVQ 8(DX), R11 // b[1] + MOVQ (DX), DX // b[0] + +looptop3: + // load a + VMOVDQU (SI)(BX*1), Y4 + VMOVDQU 32(SI)(BX*1), Y5 + VMOVDQU (R8)(BX*1), Y6 + VMOVDQU 32(R8)(BX*1), Y7 + VMOVDQU (R9)(BX*1), Y8 + VMOVDQU 32(R9)(BX*1), Y9 + + // mul montsq + VPMULLW Y2, Y4, Y3 + VPMULHW Y2, Y4, Y10 + VPMULLW Y2, Y5, Y4 + VPMULHW Y2, Y5, Y11 + VPMULLW Y2, Y6, Y5 + VPMULHW Y2, Y6, Y12 + VPMULLW Y2, Y7, Y6 + VPMULHW Y2, Y7, Y13 + VPMULLW Y2, Y8, Y7 + VPMULHW Y2, Y8, Y14 + VPMULLW Y2, Y9, Y8 + VPMULHW Y2, Y9, Y15 + + // reduce + VPMULLW Y0, Y3, Y3 + VPMULLW Y0, Y4, Y4 + VPMULLW Y0, Y5, Y5 + VPMULLW Y0, Y6, Y6 + VPMULLW Y0, Y7, Y7 + VPMULLW Y0, Y8, Y8 + VPMULHW Y1, Y3, Y3 + VPMULHW Y1, Y4, Y4 + VPMULHW Y1, Y5, Y5 + VPMULHW Y1, Y6, Y6 + VPMULHW Y1, Y7, Y7 + VPMULHW Y1, Y8, Y8 + VPSUBW Y3, Y10, Y3 + VPSUBW Y4, Y11, Y4 + VPSUBW Y5, Y12, Y5 + VPSUBW Y6, Y13, Y6 + VPSUBW Y7, Y14, Y7 + VPSUBW Y8, Y15, Y8 + + // load b + VMOVDQU (DX)(BX*1), Y9 + VMOVDQU 32(DX)(BX*1), Y10 + VMOVDQU (R11)(BX*1), Y11 + VMOVDQU 32(R11)(BX*1), Y12 + VMOVDQU (R12)(BX*1), Y13 + VMOVDQU 32(R12)(BX*1), Y14 + + // mul + VPMULLW Y3, Y9, Y15 + VPMULHW Y3, Y9, Y9 + VPMULLW Y4, Y10, Y3 + VPMULHW Y4, Y10, Y10 + VPMULLW Y5, Y11, Y4 + VPMULHW Y5, Y11, Y11 + VPMULLW Y6, Y12, Y5 + VPMULHW Y6, Y12, Y12 + VPMULLW Y7, Y13, Y6 + VPMULHW Y7, Y13, Y13 + VPMULLW Y8, Y14, Y7 + VPMULHW Y8, Y14, Y14 + + // reduce + VPMULLW Y0, Y15, Y15 + VPMULLW Y0, Y3, Y3 + VPMULLW Y0, Y4, Y4 + VPMULLW Y0, Y5, Y5 + VPMULLW Y0, Y6, Y6 + VPMULLW Y0, Y7, Y7 + VPMULHW Y1, Y15, Y15 + VPMULHW Y1, Y3, Y3 + VPMULHW Y1, Y4, Y4 + VPMULHW Y1, Y5, Y5 + VPMULHW Y1, Y6, Y6 + VPMULHW Y1, Y7, Y7 + VPSUBW Y15, Y9, Y15 + VPSUBW Y3, Y10, Y3 + VPSUBW Y4, Y11, Y4 + VPSUBW Y5, Y12, Y5 + VPSUBW Y6, Y13, Y6 + VPSUBW Y7, Y14, Y7 + + // add + VPADDW Y15, Y4, Y4 + VPADDW Y3, Y5, Y5 + VPADDW Y4, Y6, Y6 + VPADDW Y5, Y7, Y7 + + // reduce 2 + VMOVDQU ·v_x16<>(SB), Y3 + VPMULHW Y3, Y6, Y8 + VPMULHW Y3, Y7, Y9 + VPSRAW $11, Y8, Y8 + VPSRAW $11, Y9, Y9 + VPMULLW Y1, Y8, Y8 + VPMULLW Y1, Y9, Y9 + VPSUBW Y8, Y6, Y6 + VPSUBW Y9, Y7, Y7 + + // store + VMOVDQU Y6, (DI)(BX*1) + VMOVDQU Y7, 32(DI)(BX*1) + + ADDQ $1, AX + ADDQ $64, BX + CMPQ AX, $8 + JB looptop3 + + VZEROUPPER + RET + +// func pointwiseAccK2AVX2(dst *uint16, a, b **uint16) +TEXT ·pointwiseAccK4AVX2(SB), NOSPLIT, $0-24 + MOVQ dst+0(FP), DI + MOVQ a+8(FP), SI + MOVQ b+16(FP), DX + + VMOVDQU ·qinv_x16<>(SB), Y0 + VMOVDQU ·q_x16<>(SB), Y1 + VMOVDQU ·montsq_x16<>(SB), Y2 + VMOVDQU ·v_x16<>(SB), Y3 + + XORQ AX, AX + XORQ BX, BX + + MOVQ 24(SI), R10 // a[3] + MOVQ 16(SI), R9 // a[2] + MOVQ 8(SI), R8 // a[1] + MOVQ (SI), SI // a[0] + MOVQ 24(DX), R13 // b[3] + MOVQ 16(DX), R12 // b[2] + MOVQ 8(DX), R11 // b[1] + MOVQ (DX), DX // b[0] + +looptop4: + // load a + VMOVDQU (SI)(BX*1), Y6 + VMOVDQU (R8)(BX*1), Y7 + VMOVDQU (R9)(BX*1), Y8 + VMOVDQU (R10)(BX*1), Y9 + + // mul montsq + VPMULLW Y2, Y6, Y5 + VPMULHW Y2, Y6, Y10 + VPMULLW Y2, Y7, Y6 + VPMULHW Y2, Y7, Y11 + VPMULLW Y2, Y8, Y7 + VPMULHW Y2, Y8, Y12 + VPMULLW Y2, Y9, Y8 + VPMULHW Y2, Y9, Y13 + + // reduce + VPMULLW Y0, Y5, Y5 + VPMULLW Y0, Y6, Y6 + VPMULLW Y0, Y7, Y7 + VPMULLW Y0, Y8, Y8 + VPMULHW Y1, Y5, Y5 + VPMULHW Y1, Y6, Y6 + VPMULHW Y1, Y7, Y7 + VPMULHW Y1, Y8, Y8 + VPSUBW Y5, Y10, Y5 + VPSUBW Y6, Y11, Y6 + VPSUBW Y7, Y12, Y7 + VPSUBW Y8, Y13, Y8 + + // load b + VMOVDQU (DX)(BX*1), Y9 + VMOVDQU (R11)(BX*1), Y10 + VMOVDQU (R12)(BX*1), Y11 + VMOVDQU (R13)(BX*1), Y12 + + // mul + VPMULLW Y5, Y9, Y4 + VPMULHW Y5, Y9, Y9 + VPMULLW Y6, Y10, Y5 + VPMULHW Y6, Y10, Y10 + VPMULLW Y7, Y11, Y6 + VPMULHW Y7, Y11, Y11 + VPMULLW Y8, Y12, Y7 + VPMULHW Y8, Y12, Y12 + + // reduce + VPMULLW Y0, Y4, Y4 + VPMULLW Y0, Y5, Y5 + VPMULLW Y0, Y6, Y6 + VPMULLW Y0, Y7, Y7 + VPMULHW Y1, Y4, Y4 + VPMULHW Y1, Y5, Y5 + VPMULHW Y1, Y6, Y6 + VPMULHW Y1, Y7, Y7 + VPSUBW Y4, Y9, Y4 + VPSUBW Y5, Y10, Y5 + VPSUBW Y6, Y11, Y6 + VPSUBW Y7, Y12, Y7 + + // add + VPADDW Y4, Y5, Y5 + VPADDW Y5, Y6, Y6 + VPADDW Y6, Y7, Y7 + + // reduce 2 + VPMULHW Y3, Y7, Y8 + VPSRAW $11, Y8, Y8 + VPMULLW Y1, Y8, Y8 + VPSUBW Y8, Y7, Y8 + + // store + VMOVDQU Y8, (DI)(BX*1) + + ADDQ $1, AX + ADDQ $32, BX + CMPQ AX, $16 + JB looptop4 + + VZEROUPPER + RET + +// func cbdEta4AVX2(dst *uint16, b *byte) +TEXT ·cbdEta4AVX2(SB), NOSPLIT, $0-16 + MOVQ dst+0(FP), DI + MOVQ b+8(FP), SI + + VMOVDQU ·mask11<>(SB), Y0 + VMOVDQU ·mask0f<>(SB), Y1 + VMOVDQU ·q_x16<>(SB), Y2 + + MOVQ $256, DX + +looptop: + VMOVUPD 0(SI), Y3 + VPAND Y3, Y0, Y4 + VPSRLW $1, Y3, Y3 + VPAND Y3, Y0, Y5 + VPADDB Y5, Y4, Y4 + VPSRLW $1, Y3, Y3 + VPAND Y3, Y0, Y5 + VPADDB Y5, Y4, Y4 + VPSRLW $1, Y3, Y3 + VPAND Y3, Y0, Y3 + VPADDB Y3, Y4, Y3 + VPSRLW $4, Y3, Y4 + VPAND Y3, Y1, Y3 + VPAND Y4, Y1, Y4 + VPSUBB Y4, Y3, Y3 + VPMOVSXBW X3, Y4 + VPADDW Y2, Y4, Y4 + VMOVUPD Y4, 0(DI) + VPERM2F128 $0x21, Y3, Y3, Y3 + VPMOVSXBW X3, Y4 + VPADDW Y2, Y4, Y4 + VMOVUPD Y4, 32(DI) + + ADDQ $64, DI + ADDQ $32, SI + SUBQ $32, DX + JA looptop + + VZEROUPPER + RET diff --git a/vendor/blitter.com/go/kyber/hwaccel_ref.go b/vendor/blitter.com/go/kyber/hwaccel_ref.go new file mode 100644 index 0000000..4b58010 --- /dev/null +++ b/vendor/blitter.com/go/kyber/hwaccel_ref.go @@ -0,0 +1,14 @@ +// hwaccel_ref.go - Unaccelerated stubs. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to the software, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +// +build !amd64 gccgo noasm !go1.10 + +package kyber + +func initHardwareAcceleration() { + forceDisableHardwareAcceleration() +} diff --git a/vendor/blitter.com/go/kyber/indcpa.go b/vendor/blitter.com/go/kyber/indcpa.go new file mode 100644 index 0000000..5c4186f --- /dev/null +++ b/vendor/blitter.com/go/kyber/indcpa.go @@ -0,0 +1,279 @@ +// indcpa.go - Kyber IND-CPA encryption. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to the software, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +package kyber + +import ( + "io" + + "golang.org/x/crypto/sha3" +) + +// Serialize the public key as concatenation of the compressed and serialized +// vector of polynomials pk and the public seed used to generate the matrix A. +func packPublicKey(r []byte, pk *polyVec, seed []byte) { + pk.compress(r) + copy(r[pk.compressedSize():], seed[:SymSize]) +} + +// De-serialize and decompress public key from a byte array; approximate +// inverse of packPublicKey. +func unpackPublicKey(pk *polyVec, seed, packedPk []byte) { + pk.decompress(packedPk) + + off := pk.compressedSize() + copy(seed, packedPk[off:off+SymSize]) +} + +// Serialize the ciphertext as concatenation of the compressed and serialized +// vector of polynomials b and the compressed and serialized polynomial v. +func packCiphertext(r []byte, b *polyVec, v *poly) { + b.compress(r) + v.compress(r[b.compressedSize():]) +} + +// De-serialize and decompress ciphertext from a byte array; approximate +// inverse of packCiphertext. +func unpackCiphertext(b *polyVec, v *poly, c []byte) { + b.decompress(c) + v.decompress(c[b.compressedSize():]) +} + +// Serialize the secret key. +func packSecretKey(r []byte, sk *polyVec) { + sk.toBytes(r) +} + +// De-serialize the secret key; inverse of packSecretKey. +func unpackSecretKey(sk *polyVec, packedSk []byte) { + sk.fromBytes(packedSk) +} + +// Deterministically generate matrix A (or the transpose of A) from a seed. +// Entries of the matrix are polynomials that look uniformly random. Performs +// rejection sampling on output of SHAKE-128. +func genMatrix(a []polyVec, seed []byte, transposed bool) { + const ( + shake128Rate = 168 // xof.BlockSize() is not a constant. + maxBlocks = 4 + ) + var buf [shake128Rate * maxBlocks]byte + + var extSeed [SymSize + 2]byte + copy(extSeed[:SymSize], seed) + + xof := sha3.NewShake128() + + for i, v := range a { + for j, p := range v.vec { + if transposed { + extSeed[SymSize] = byte(i) + extSeed[SymSize+1] = byte(j) + } else { + extSeed[SymSize] = byte(j) + extSeed[SymSize+1] = byte(i) + } + + xof.Write(extSeed[:]) + xof.Read(buf[:]) + + for ctr, pos, maxPos := 0, 0, len(buf); ctr < kyberN; { + val := (uint16(buf[pos]) | (uint16(buf[pos+1]) << 8)) & 0x1fff + if val < kyberQ { + p.coeffs[ctr] = val + ctr++ + } + if pos += 2; pos == maxPos { + // On the unlikely chance 4 blocks is insufficient, + // incrementally squeeze out 1 block at a time. + xof.Read(buf[:shake128Rate]) + pos, maxPos = 0, shake128Rate + } + } + + xof.Reset() + } + } +} + +type indcpaPublicKey struct { + packed []byte + h [32]byte +} + +func (pk *indcpaPublicKey) toBytes() []byte { + return pk.packed +} + +func (pk *indcpaPublicKey) fromBytes(p *ParameterSet, b []byte) error { + if len(b) != p.indcpaPublicKeySize { + return ErrInvalidKeySize + } + + pk.packed = make([]byte, len(b)) + copy(pk.packed, b) + pk.h = sha3.Sum256(b) + + return nil +} + +type indcpaSecretKey struct { + packed []byte +} + +func (sk *indcpaSecretKey) fromBytes(p *ParameterSet, b []byte) error { + if len(b) != p.indcpaSecretKeySize { + return ErrInvalidKeySize + } + + sk.packed = make([]byte, len(b)) + copy(sk.packed, b) + + return nil +} + +// Generates public and private key for the CPA-secure public-key encryption +// scheme underlying Kyber. +func (p *ParameterSet) indcpaKeyPair(rng io.Reader) (*indcpaPublicKey, *indcpaSecretKey, error) { + buf := make([]byte, SymSize+SymSize) + if _, err := io.ReadFull(rng, buf[:SymSize]); err != nil { + return nil, nil, err + } + + sk := &indcpaSecretKey{ + packed: make([]byte, p.indcpaSecretKeySize), + } + pk := &indcpaPublicKey{ + packed: make([]byte, p.indcpaPublicKeySize), + } + + h := sha3.New512() + h.Write(buf[:SymSize]) + buf = buf[:0] // Reuse the backing store. + buf = h.Sum(buf) + publicSeed, noiseSeed := buf[:SymSize], buf[SymSize:] + + a := p.allocMatrix() + genMatrix(a, publicSeed, false) + + var nonce byte + skpv := p.allocPolyVec() + for _, pv := range skpv.vec { + pv.getNoise(noiseSeed, nonce, p.eta) + nonce++ + } + + skpv.ntt() + + e := p.allocPolyVec() + for _, pv := range e.vec { + pv.getNoise(noiseSeed, nonce, p.eta) + nonce++ + } + + // matrix-vector multiplication + pkpv := p.allocPolyVec() + for i, pv := range pkpv.vec { + pv.pointwiseAcc(&skpv, &a[i]) + } + + pkpv.invntt() + pkpv.add(&pkpv, &e) + + packSecretKey(sk.packed, &skpv) + packPublicKey(pk.packed, &pkpv, publicSeed) + pk.h = sha3.Sum256(pk.packed) + + return pk, sk, nil +} + +// Encryption function of the CPA-secure public-key encryption scheme +// underlying Kyber. +func (p *ParameterSet) indcpaEncrypt(c, m []byte, pk *indcpaPublicKey, coins []byte) { + var k, v, epp poly + var seed [SymSize]byte + + pkpv := p.allocPolyVec() + unpackPublicKey(&pkpv, seed[:], pk.packed) + + k.fromMsg(m) + + pkpv.ntt() + + at := p.allocMatrix() + genMatrix(at, seed[:], true) + + var nonce byte + sp := p.allocPolyVec() + for _, pv := range sp.vec { + pv.getNoise(coins, nonce, p.eta) + nonce++ + } + + sp.ntt() + + ep := p.allocPolyVec() + for _, pv := range ep.vec { + pv.getNoise(coins, nonce, p.eta) + nonce++ + } + + // matrix-vector multiplication + bp := p.allocPolyVec() + for i, pv := range bp.vec { + pv.pointwiseAcc(&sp, &at[i]) + } + + bp.invntt() + bp.add(&bp, &ep) + + v.pointwiseAcc(&pkpv, &sp) + v.invntt() + + epp.getNoise(coins, nonce, p.eta) // Don't need to increment nonce. + + v.add(&v, &epp) + v.add(&v, &k) + + packCiphertext(c, &bp, &v) +} + +// Decryption function of the CPA-secure public-key encryption scheme +// underlying Kyber. +func (p *ParameterSet) indcpaDecrypt(m, c []byte, sk *indcpaSecretKey) { + var v, mp poly + + skpv, bp := p.allocPolyVec(), p.allocPolyVec() + unpackCiphertext(&bp, &v, c) + unpackSecretKey(&skpv, sk.packed) + + bp.ntt() + + mp.pointwiseAcc(&skpv, &bp) + mp.invntt() + + mp.sub(&mp, &v) + + mp.toMsg(m) +} + +func (p *ParameterSet) allocMatrix() []polyVec { + m := make([]polyVec, 0, p.k) + for i := 0; i < p.k; i++ { + m = append(m, p.allocPolyVec()) + } + return m +} + +func (p *ParameterSet) allocPolyVec() polyVec { + vec := make([]*poly, 0, p.k) + for i := 0; i < p.k; i++ { + vec = append(vec, new(poly)) + } + + return polyVec{vec} +} diff --git a/vendor/blitter.com/go/kyber/kem.go b/vendor/blitter.com/go/kyber/kem.go new file mode 100644 index 0000000..363040c --- /dev/null +++ b/vendor/blitter.com/go/kyber/kem.go @@ -0,0 +1,187 @@ +// kem.go - Kyber key encapsulation mechanism. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to the software, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +package kyber + +import ( + "bytes" + "crypto/subtle" + "errors" + "io" + + "golang.org/x/crypto/sha3" +) + +var ( + // ErrInvalidKeySize is the error returned when a byte serailized key is + // an invalid size. + ErrInvalidKeySize = errors.New("kyber: invalid key size") + + // ErrInvalidCipherTextSize is the error thrown via a panic when a byte + // serialized ciphertext is an invalid size. + ErrInvalidCipherTextSize = errors.New("kyber: invalid ciphertext size") + + // ErrInvalidPrivateKey is the error returned when a byte serialized + // private key is malformed. + ErrInvalidPrivateKey = errors.New("kyber: invalid private key") +) + +// PrivateKey is a Kyber private key. +type PrivateKey struct { + PublicKey + sk *indcpaSecretKey + z []byte +} + +// Bytes returns the byte serialization of a PrivateKey. +func (sk *PrivateKey) Bytes() []byte { + p := sk.PublicKey.p + + b := make([]byte, 0, p.secretKeySize) + b = append(b, sk.sk.packed...) + b = append(b, sk.PublicKey.pk.packed...) + b = append(b, sk.PublicKey.pk.h[:]...) + b = append(b, sk.z...) + + return b +} + +// PrivateKeyFromBytes deserializes a byte serialized PrivateKey. +func (p *ParameterSet) PrivateKeyFromBytes(b []byte) (*PrivateKey, error) { + if len(b) != p.secretKeySize { + return nil, ErrInvalidKeySize + } + + sk := new(PrivateKey) + sk.sk = new(indcpaSecretKey) + sk.z = make([]byte, SymSize) + sk.PublicKey.pk = new(indcpaPublicKey) + sk.PublicKey.p = p + + // De-serialize the public key first. + off := p.indcpaSecretKeySize + if err := sk.PublicKey.pk.fromBytes(p, b[off:off+p.publicKeySize]); err != nil { + return nil, err + } + off += p.publicKeySize + if !bytes.Equal(sk.PublicKey.pk.h[:], b[off:off+SymSize]) { + return nil, ErrInvalidPrivateKey + } + off += SymSize + copy(sk.z, b[off:]) + + // Then go back to de-serialize the private key. + if err := sk.sk.fromBytes(p, b[:p.indcpaSecretKeySize]); err != nil { + return nil, err + } + + return sk, nil +} + +// PublicKey is a Kyber public key. +type PublicKey struct { + pk *indcpaPublicKey + p *ParameterSet +} + +// Bytes returns the byte serialization of a PublicKey. +func (pk *PublicKey) Bytes() []byte { + return pk.pk.toBytes() +} + +// PublicKeyFromBytes deserializes a byte serialized PublicKey. +func (p *ParameterSet) PublicKeyFromBytes(b []byte) (*PublicKey, error) { + pk := &PublicKey{ + pk: new(indcpaPublicKey), + p: p, + } + + if err := pk.pk.fromBytes(p, b); err != nil { + return nil, err + } + + return pk, nil +} + +// GenerateKeyPair generates a private and public key parameterized with the +// given ParameterSet. +func (p *ParameterSet) GenerateKeyPair(rng io.Reader) (*PublicKey, *PrivateKey, error) { + kp := new(PrivateKey) + + var err error + if kp.PublicKey.pk, kp.sk, err = p.indcpaKeyPair(rng); err != nil { + return nil, nil, err + } + + kp.PublicKey.p = p + kp.z = make([]byte, SymSize) + if _, err := io.ReadFull(rng, kp.z); err != nil { + return nil, nil, err + } + + return &kp.PublicKey, kp, nil +} + +// KEMEncrypt generates cipher text and shared secret via the CCA-secure Kyber +// key encapsulation mechanism. +func (pk *PublicKey) KEMEncrypt(rng io.Reader) (cipherText []byte, sharedSecret []byte, err error) { + var buf [SymSize]byte + if _, err = io.ReadFull(rng, buf[:]); err != nil { + return nil, nil, err + } + buf = sha3.Sum256(buf[:]) // Don't release system RNG output + + hKr := sha3.New512() + hKr.Write(buf[:]) + hKr.Write(pk.pk.h[:]) // Multitarget countermeasures for coins + contributory KEM + kr := hKr.Sum(nil) + + cipherText = make([]byte, pk.p.cipherTextSize) + pk.p.indcpaEncrypt(cipherText, buf[:], pk.pk, kr[SymSize:]) // coins are in kr[SymSize:] + + hc := sha3.Sum256(cipherText) + copy(kr[SymSize:], hc[:]) // overwrite coins in kr with H(c) + hSs := sha3.New256() + hSs.Write(kr) + sharedSecret = hSs.Sum(nil) // hash concatenation of pre-k and H(c) to k + + return +} + +// KEMDecrypt generates shared secret for given cipher text via the CCA-secure +// Kyber key encapsulation mechanism. +// +// On failures, sharedSecret will contain a randomized value. Providing a +// cipher text that is obviously malformed (too large/small) will result in a +// panic. +func (sk *PrivateKey) KEMDecrypt(cipherText []byte) (sharedSecret []byte) { + var buf [2 * SymSize]byte + + p := sk.PublicKey.p + if len(cipherText) != p.CipherTextSize() { + panic(ErrInvalidCipherTextSize) + } + p.indcpaDecrypt(buf[:SymSize], cipherText, sk.sk) + + copy(buf[SymSize:], sk.PublicKey.pk.h[:]) // Multitarget countermeasure for coins + contributory KEM + kr := sha3.Sum512(buf[:]) + + cmp := make([]byte, p.cipherTextSize) + p.indcpaEncrypt(cmp, buf[:SymSize], sk.PublicKey.pk, kr[SymSize:]) // coins are in kr[SymSize:] + + hc := sha3.Sum256(cipherText) + copy(kr[SymSize:], hc[:]) // overwrite coins in kr with H(c) + + fail := subtle.ConstantTimeSelect(subtle.ConstantTimeCompare(cipherText, cmp), 0, 1) + subtle.ConstantTimeCopy(fail, kr[SymSize:], sk.z) // Overwrite pre-k with z on re-encryption failure + + h := sha3.New256() + h.Write(kr[:]) + sharedSecret = h.Sum(nil) + + return +} diff --git a/vendor/blitter.com/go/kyber/kex.go b/vendor/blitter.com/go/kyber/kex.go new file mode 100644 index 0000000..f6b56c1 --- /dev/null +++ b/vendor/blitter.com/go/kyber/kex.go @@ -0,0 +1,249 @@ +// kex.go - Kyber key exchange. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to the software, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +package kyber + +import ( + "errors" + "io" + + "golang.org/x/crypto/sha3" +) + +var ( + // ErrInvalidMessageSize is the error thrown via a panic when a initator + // or responder message is an invalid size. + ErrInvalidMessageSize = errors.New("kyber: invalid message size") + + // ErrParameterSetMismatch is the error thrown via a panic when there + // is a mismatch between parameter sets. + ErrParameterSetMismatch = errors.New("kyber: parameter set mismatch") +) + +// UAKEInitiatorMessageSize returns the size of the initiator UAKE message +// in bytes. +func (p *ParameterSet) UAKEInitiatorMessageSize() int { + return p.PublicKeySize() + p.CipherTextSize() +} + +// UAKEResponderMessageSize returns the size of the responder UAKE message +// in bytes. +func (p *ParameterSet) UAKEResponderMessageSize() int { + return p.CipherTextSize() +} + +// UAKEInitiatorState is a initiator UAKE instance. Each instance MUST only +// be used for one key exchange and never reused. +type UAKEInitiatorState struct { + // Message is the UAKE message to send to the responder. + Message []byte + + eSk *PrivateKey + tk []byte +} + +// Shared generates a shared secret for the given UAKE instance and responder +// message. +// +// On failures, sharedSecret will contain a randomized value. Providing a +// cipher text that is obviously malformed (too large/small) will result in a +// panic. +func (s *UAKEInitiatorState) Shared(recv []byte) (sharedSecret []byte) { + xof := sha3.NewShake256() + var tk []byte + + tk = s.eSk.KEMDecrypt(recv) + xof.Write(tk) + xof.Write(s.tk) + sharedSecret = make([]byte, SymSize) + xof.Read(sharedSecret) + + return +} + +// NewUAKEInitiatorState creates a new initiator UAKE instance. +func (pk *PublicKey) NewUAKEInitiatorState(rng io.Reader) (*UAKEInitiatorState, error) { + s := new(UAKEInitiatorState) + s.Message = make([]byte, 0, pk.p.UAKEInitiatorMessageSize()) + + var err error + _, s.eSk, err = pk.p.GenerateKeyPair(rng) + if err != nil { + return nil, err + } + s.Message = append(s.Message, s.eSk.PublicKey.Bytes()...) + + var ct []byte + ct, s.tk, err = pk.KEMEncrypt(rng) + if err != nil { + return nil, err + } + + s.Message = append(s.Message, ct...) + + return s, nil +} + +// UAKEResponderShared generates a responder message and shared secret given +// a initiator UAKE message. +// +// On failures, sharedSecret will contain a randomized value. Providing a +// cipher text that is obviously malformed (too large/small) will result in a +// panic. +func (sk *PrivateKey) UAKEResponderShared(rng io.Reader, recv []byte) (message, sharedSecret []byte) { + p := sk.PublicKey.p + pkLen := p.PublicKeySize() + + // Deserialize the peer's ephemeral public key. + if len(recv) != p.UAKEInitiatorMessageSize() { + panic(ErrInvalidMessageSize) + } + rawPk, ct := recv[:pkLen], recv[pkLen:] + pk, err := p.PublicKeyFromBytes(rawPk) + if err != nil { + panic(err) + } + + xof := sha3.NewShake256() + var tk []byte + + message, tk, err = pk.KEMEncrypt(rng) + if err != nil { + panic(err) + } + xof.Write(tk) + + tk = sk.KEMDecrypt(ct) + xof.Write(tk) + sharedSecret = make([]byte, SymSize) + xof.Read(sharedSecret) + + return +} + +// AKEInitiatorMessageSize returns the size of the initiator AKE message +// in bytes. +func (p *ParameterSet) AKEInitiatorMessageSize() int { + return p.PublicKeySize() + p.CipherTextSize() +} + +// AKEResponderMessageSize returns the size of the responder AKE message +// in bytes. +func (p *ParameterSet) AKEResponderMessageSize() int { + return 2 * p.CipherTextSize() +} + +// AKEInitiatorState is a initiator AKE instance. Each instance MUST only be +// used for one key exchange and never reused. +type AKEInitiatorState struct { + // Message is the AKE message to send to the responder. + Message []byte + + eSk *PrivateKey + tk []byte +} + +// Shared generates a shared secret for the given AKE instance, responder +// message, and long term initiator private key. +// +// On failures sharedSecret will contain a randomized value. Providing a +// malformed responder message, or a private key that uses a different +// ParamterSet than the AKEInitiatorState will result in a panic. +func (s *AKEInitiatorState) Shared(recv []byte, initiatorPrivateKey *PrivateKey) (sharedSecret []byte) { + p := s.eSk.PublicKey.p + + if initiatorPrivateKey.PublicKey.p != p { + panic(ErrParameterSetMismatch) + } + if len(recv) != p.AKEResponderMessageSize() { + panic(ErrInvalidMessageSize) + } + ctLen := p.CipherTextSize() + + xof := sha3.NewShake256() + var tk []byte + + tk = s.eSk.KEMDecrypt(recv[:ctLen]) + xof.Write(tk) + + tk = initiatorPrivateKey.KEMDecrypt(recv[ctLen:]) + xof.Write(tk) + + xof.Write(s.tk) + sharedSecret = make([]byte, SymSize) + xof.Read(sharedSecret) + + return +} + +// NewAKEInitiatorState creates a new initiator AKE instance. +func (pk *PublicKey) NewAKEInitiatorState(rng io.Reader) (*AKEInitiatorState, error) { + s := new(AKEInitiatorState) + + // This is identical to the UAKE case, so just reuse the code. + us, err := pk.NewUAKEInitiatorState(rng) + if err != nil { + return nil, err + } + + s.Message = us.Message + s.eSk = us.eSk + s.tk = us.tk + + return s, nil +} + +// AKEResponderShared generates a responder message and shared secret given +// a initiator AKE message and long term initiator public key. +// +// On failures sharedSecret will contain a randomized value. Providing a +// malformed responder message, or a private key that uses a different +// ParamterSet than the AKEInitiatorState will result in a panic. +func (sk *PrivateKey) AKEResponderShared(rng io.Reader, recv []byte, peerPublicKey *PublicKey) (message, sharedSecret []byte) { + p := sk.PublicKey.p + pkLen := p.PublicKeySize() + + if peerPublicKey.p != p { + panic(ErrParameterSetMismatch) + } + + // Deserialize the peer's ephemeral public key. + if len(recv) != p.AKEInitiatorMessageSize() { + panic(ErrInvalidMessageSize) + } + rawPk, ct := recv[:pkLen], recv[pkLen:] + pk, err := p.PublicKeyFromBytes(rawPk) + if err != nil { + panic(err) + } + + message = make([]byte, 0, p.AKEResponderMessageSize()) + + xof := sha3.NewShake256() + var tk, tmp []byte + + tmp, tk, err = pk.KEMEncrypt(rng) + if err != nil { + panic(err) + } + xof.Write(tk) + message = append(message, tmp...) + + tmp, tk, err = peerPublicKey.KEMEncrypt(rng) + if err != nil { + panic(err) + } + xof.Write(tk) + message = append(message, tmp...) + + tk = sk.KEMDecrypt(ct) + xof.Write(tk) + sharedSecret = make([]byte, SymSize) + xof.Read(sharedSecret) + + return +} diff --git a/vendor/blitter.com/go/kyber/ntt.go b/vendor/blitter.com/go/kyber/ntt.go new file mode 100644 index 0000000..5fb9580 --- /dev/null +++ b/vendor/blitter.com/go/kyber/ntt.go @@ -0,0 +1,65 @@ +// ntt.go - Number-Theoretic Transform. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to the software, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +package kyber + +// Computes negacyclic number-theoretic transform (NTT) of a polynomial (vector +// of 256 coefficients) in place; inputs assumed to be in normal order, output +// in bitreversed order. +func nttRef(p *[kyberN]uint16) { + var j int + k := 1 + for level := 7; level >= 0; level-- { + distance := 1 << uint(level) + for start := 0; start < kyberN; start = j + distance { + zeta := zetas[k] + k++ + for j = start; j < start+distance; j++ { + t := montgomeryReduce(uint32(zeta) * uint32(p[j+distance])) + p[j+distance] = barrettReduce(p[j] + 4*kyberQ - t) + + if level&1 == 1 { // odd level + p[j] = p[j] + t // Omit reduction (be lazy) + } else { + p[j] = barrettReduce(p[j] + t) + } + } + } + } +} + +// Computes inverse of negacyclic number-theoretic transform (NTT) of a +// polynomial (vector of 256 coefficients) in place; inputs assumed to be in +// bitreversed order, output in normal order. +func invnttRef(a *[kyberN]uint16) { + for level := 0; level < 8; level++ { + distance := 1 << uint(level) + for start := 0; start < distance; start++ { + var jTwiddle int + for j := start; j < kyberN-1; j += 2 * distance { + w := uint32(omegasInvBitrevMontgomery[jTwiddle]) + jTwiddle++ + + temp := a[j] + + if level&1 == 1 { // odd level + a[j] = barrettReduce(temp + a[j+distance]) + } else { + a[j] = temp + a[j+distance] // Omit reduction (be lazy) + } + + t := w * (uint32(temp) + 4*kyberQ - uint32(a[j+distance])) + + a[j+distance] = montgomeryReduce(t) + } + } + } + + for i, v := range psisInvMontgomery { + a[i] = montgomeryReduce(uint32(a[i]) * uint32(v)) + } +} diff --git a/vendor/blitter.com/go/kyber/params.go b/vendor/blitter.com/go/kyber/params.go new file mode 100644 index 0000000..32bcabd --- /dev/null +++ b/vendor/blitter.com/go/kyber/params.go @@ -0,0 +1,116 @@ +// params.go - Kyber parameterization. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to the software, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +package kyber + +const ( + // SymSize is the size of the shared key (and certain internal parameters + // such as hashes and seeds) in bytes. + SymSize = 32 + + kyberN = 256 + kyberQ = 7681 + + polySize = 416 + polyCompressedSize = 96 + + compressedCoeffSize = 352 +) + +var ( + // Kyber512 is the Kyber-512 parameter set, which aims to provide security + // equivalent to AES-128. + // + // This parameter set has a 1632 byte private key, 736 byte public key, + // and a 800 byte cipher text. + Kyber512 = newParameterSet("Kyber-512", 2) + + // Kyber768 is the Kyber-768 parameter set, which aims to provide security + // equivalent to AES-192. + // + // This parameter set has a 2400 byte private key, 1088 byte public key, + // and a 1152 byte cipher text. + Kyber768 = newParameterSet("Kyber-768", 3) + + // Kyber1024 is the Kyber-1024 parameter set, which aims to provide + // security equivalent to AES-256. + // + // This parameter set has a 3168 byte private key, 1440 byte public key, + // and a 1504 byte cipher text. + Kyber1024 = newParameterSet("Kyber-1024", 4) +) + +// ParameterSet is a Kyber parameter set. +type ParameterSet struct { + name string + + k int + eta int + + polyVecSize int + polyVecCompressedSize int + + indcpaMsgSize int + indcpaPublicKeySize int + indcpaSecretKeySize int + indcpaSize int + + publicKeySize int + secretKeySize int + cipherTextSize int +} + +// Name returns the name of a given ParameterSet. +func (p *ParameterSet) Name() string { + return p.name +} + +// PublicKeySize returns the size of a public key in bytes. +func (p *ParameterSet) PublicKeySize() int { + return p.publicKeySize +} + +// PrivateKeySize returns the size of a private key in bytes. +func (p *ParameterSet) PrivateKeySize() int { + return p.secretKeySize +} + +// CipherTextSize returns the size of a cipher text in bytes. +func (p *ParameterSet) CipherTextSize() int { + return p.cipherTextSize +} + +func newParameterSet(name string, k int) *ParameterSet { + var p ParameterSet + + p.name = name + p.k = k + switch k { + case 2: + p.eta = 5 + case 3: + p.eta = 4 + case 4: + p.eta = 3 + default: + panic("kyber: k must be in {2,3,4}") + } + + p.polyVecSize = k * polySize + p.polyVecCompressedSize = k * compressedCoeffSize + + p.indcpaMsgSize = SymSize + p.indcpaPublicKeySize = p.polyVecCompressedSize + SymSize + p.indcpaSecretKeySize = p.polyVecSize + p.indcpaSize = p.polyVecCompressedSize + polyCompressedSize + + p.publicKeySize = p.indcpaPublicKeySize + p.secretKeySize = p.indcpaSecretKeySize + p.indcpaPublicKeySize + 2*SymSize // 32 bytes of additional space to save H(pk) + p.cipherTextSize = p.indcpaSize + + return &p +} diff --git a/vendor/blitter.com/go/kyber/poly.go b/vendor/blitter.com/go/kyber/poly.go new file mode 100644 index 0000000..85f27b1 --- /dev/null +++ b/vendor/blitter.com/go/kyber/poly.go @@ -0,0 +1,146 @@ +// poly.go - Kyber polynomial. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to the software, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +package kyber + +import "golang.org/x/crypto/sha3" + +// Elements of R_q = Z_q[X]/(X^n + 1). Represents polynomial coeffs[0] + +// X*coeffs[1] + X^2*xoeffs[2] + ... + X^{n-1}*coeffs[n-1]. +type poly struct { + coeffs [kyberN]uint16 +} + +// Compression and subsequent serialization of a polynomial. +func (p *poly) compress(r []byte) { + var t [8]uint32 + + for i, k := 0, 0; i < kyberN; i, k = i+8, k+3 { + for j := 0; j < 8; j++ { + t[j] = uint32((((freeze(p.coeffs[i+j]) << 3) + kyberQ/2) / kyberQ) & 7) + } + + r[k] = byte(t[0] | (t[1] << 3) | (t[2] << 6)) + r[k+1] = byte((t[2] >> 2) | (t[3] << 1) | (t[4] << 4) | (t[5] << 7)) + r[k+2] = byte((t[5] >> 1) | (t[6] << 2) | (t[7] << 5)) + } +} + +// De-serialization and subsequent decompression of a polynomial; approximate +// inverse of poly.compress(). +func (p *poly) decompress(a []byte) { + for i, off := 0, 0; i < kyberN; i, off = i+8, off+3 { + p.coeffs[i+0] = ((uint16(a[off]&7) * kyberQ) + 4) >> 3 + p.coeffs[i+1] = (((uint16(a[off]>>3) & 7) * kyberQ) + 4) >> 3 + p.coeffs[i+2] = (((uint16(a[off]>>6) | (uint16(a[off+1]<<2) & 4)) * kyberQ) + 4) >> 3 + p.coeffs[i+3] = (((uint16(a[off+1]>>1) & 7) * kyberQ) + 4) >> 3 + p.coeffs[i+4] = (((uint16(a[off+1]>>4) & 7) * kyberQ) + 4) >> 3 + p.coeffs[i+5] = (((uint16(a[off+1]>>7) | (uint16(a[off+2]<<1) & 6)) * kyberQ) + 4) >> 3 + p.coeffs[i+6] = (((uint16(a[off+2]>>2) & 7) * kyberQ) + 4) >> 3 + p.coeffs[i+7] = (((uint16(a[off+2] >> 5)) * kyberQ) + 4) >> 3 + } +} + +// Serialization of a polynomial. +func (p *poly) toBytes(r []byte) { + var t [8]uint16 + + for i := 0; i < kyberN/8; i++ { + for j := 0; j < 8; j++ { + t[j] = freeze(p.coeffs[8*i+j]) + } + + r[13*i+0] = byte(t[0] & 0xff) + r[13*i+1] = byte((t[0] >> 8) | ((t[1] & 0x07) << 5)) + r[13*i+2] = byte((t[1] >> 3) & 0xff) + r[13*i+3] = byte((t[1] >> 11) | ((t[2] & 0x3f) << 2)) + r[13*i+4] = byte((t[2] >> 6) | ((t[3] & 0x01) << 7)) + r[13*i+5] = byte((t[3] >> 1) & 0xff) + r[13*i+6] = byte((t[3] >> 9) | ((t[4] & 0x0f) << 4)) + r[13*i+7] = byte((t[4] >> 4) & 0xff) + r[13*i+8] = byte((t[4] >> 12) | ((t[5] & 0x7f) << 1)) + r[13*i+9] = byte((t[5] >> 7) | ((t[6] & 0x03) << 6)) + r[13*i+10] = byte((t[6] >> 2) & 0xff) + r[13*i+11] = byte((t[6] >> 10) | ((t[7] & 0x1f) << 3)) + r[13*i+12] = byte(t[7] >> 5) + } +} + +// De-serialization of a polynomial; inverse of poly.toBytes(). +func (p *poly) fromBytes(a []byte) { + for i := 0; i < kyberN/8; i++ { + p.coeffs[8*i+0] = uint16(a[13*i+0]) | ((uint16(a[13*i+1]) & 0x1f) << 8) + p.coeffs[8*i+1] = (uint16(a[13*i+1]) >> 5) | (uint16(a[13*i+2]) << 3) | ((uint16(a[13*i+3]) & 0x03) << 11) + p.coeffs[8*i+2] = (uint16(a[13*i+3]) >> 2) | ((uint16(a[13*i+4]) & 0x7f) << 6) + p.coeffs[8*i+3] = (uint16(a[13*i+4]) >> 7) | (uint16(a[13*i+5]) << 1) | ((uint16(a[13*i+6]) & 0x0f) << 9) + p.coeffs[8*i+4] = (uint16(a[13*i+6]) >> 4) | (uint16(a[13*i+7]) << 4) | ((uint16(a[13*i+8]) & 0x01) << 12) + p.coeffs[8*i+5] = (uint16(a[13*i+8]) >> 1) | ((uint16(a[13*i+9]) & 0x3f) << 7) + p.coeffs[8*i+6] = (uint16(a[13*i+9]) >> 6) | (uint16(a[13*i+10]) << 2) | ((uint16(a[13*i+11]) & 0x07) << 10) + p.coeffs[8*i+7] = (uint16(a[13*i+11]) >> 3) | (uint16(a[13*i+12]) << 5) + } +} + +// Convert 32-byte message to polynomial. +func (p *poly) fromMsg(msg []byte) { + for i, v := range msg[:SymSize] { + for j := 0; j < 8; j++ { + mask := -((uint16(v) >> uint(j)) & 1) + p.coeffs[8*i+j] = mask & ((kyberQ + 1) / 2) + } + } +} + +// Convert polynomial to 32-byte message. +func (p *poly) toMsg(msg []byte) { + for i := 0; i < SymSize; i++ { + msg[i] = 0 + for j := 0; j < 8; j++ { + t := (((freeze(p.coeffs[8*i+j]) << 1) + kyberQ/2) / kyberQ) & 1 + msg[i] |= byte(t << uint(j)) + } + } +} + +// Sample a polynomial deterministically from a seed and a nonce, with output +// polynomial close to centered binomial distribution with parameter eta. +func (p *poly) getNoise(seed []byte, nonce byte, eta int) { + extSeed := make([]byte, 0, SymSize+1) + extSeed = append(extSeed, seed...) + extSeed = append(extSeed, nonce) + + buf := make([]byte, eta*kyberN/4) + sha3.ShakeSum256(buf, extSeed) + + p.cbd(buf, eta) +} + +// Computes negacyclic number-theoretic transform (NTT) of a polynomial in +// place; inputs assumed to be in normal order, output in bitreversed order. +func (p *poly) ntt() { + hardwareAccelImpl.nttFn(&p.coeffs) +} + +// Computes inverse of negacyclic number-theoretic transform (NTT) of a +// polynomial in place; inputs assumed to be in bitreversed order, output in +// normal order. +func (p *poly) invntt() { + hardwareAccelImpl.invnttFn(&p.coeffs) +} + +// Add two polynomials. +func (p *poly) add(a, b *poly) { + for i := range p.coeffs { + p.coeffs[i] = barrettReduce(a.coeffs[i] + b.coeffs[i]) + } +} + +// Subtract two polynomials. +func (p *poly) sub(a, b *poly) { + for i := range p.coeffs { + p.coeffs[i] = barrettReduce(a.coeffs[i] + 3*kyberQ - b.coeffs[i]) + } +} diff --git a/vendor/blitter.com/go/kyber/polyvec.go b/vendor/blitter.com/go/kyber/polyvec.go new file mode 100644 index 0000000..f4c4b4a --- /dev/null +++ b/vendor/blitter.com/go/kyber/polyvec.go @@ -0,0 +1,115 @@ +// polyvec.go - Vector of Kyber polynomials. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to the software, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +package kyber + +type polyVec struct { + vec []*poly +} + +// Compress and serialize vector of polynomials. +func (v *polyVec) compress(r []byte) { + var off int + for _, vec := range v.vec { + for j := 0; j < kyberN/8; j++ { + var t [8]uint16 + for k := 0; k < 8; k++ { + t[k] = uint16((((uint32(freeze(vec.coeffs[8*j+k])) << 11) + kyberQ/2) / kyberQ) & 0x7ff) + } + + r[off+11*j+0] = byte(t[0] & 0xff) + r[off+11*j+1] = byte((t[0] >> 8) | ((t[1] & 0x1f) << 3)) + r[off+11*j+2] = byte((t[1] >> 5) | ((t[2] & 0x03) << 6)) + r[off+11*j+3] = byte((t[2] >> 2) & 0xff) + r[off+11*j+4] = byte((t[2] >> 10) | ((t[3] & 0x7f) << 1)) + r[off+11*j+5] = byte((t[3] >> 7) | ((t[4] & 0x0f) << 4)) + r[off+11*j+6] = byte((t[4] >> 4) | ((t[5] & 0x01) << 7)) + r[off+11*j+7] = byte((t[5] >> 1) & 0xff) + r[off+11*j+8] = byte((t[5] >> 9) | ((t[6] & 0x3f) << 2)) + r[off+11*j+9] = byte((t[6] >> 6) | ((t[7] & 0x07) << 5)) + r[off+11*j+10] = byte((t[7] >> 3)) + } + off += compressedCoeffSize + } +} + +// De-serialize and decompress vector of polynomials; approximate inverse of +// polyVec.compress(). +func (v *polyVec) decompress(a []byte) { + var off int + for _, vec := range v.vec { + for j := 0; j < kyberN/8; j++ { + vec.coeffs[8*j+0] = uint16((((uint32(a[off+11*j+0]) | ((uint32(a[off+11*j+1]) & 0x07) << 8)) * kyberQ) + 1024) >> 11) + vec.coeffs[8*j+1] = uint16(((((uint32(a[off+11*j+1]) >> 3) | ((uint32(a[off+11*j+2]) & 0x3f) << 5)) * kyberQ) + 1024) >> 11) + vec.coeffs[8*j+2] = uint16(((((uint32(a[off+11*j+2]) >> 6) | ((uint32(a[off+11*j+3]) & 0xff) << 2) | ((uint32(a[off+11*j+4]) & 0x01) << 10)) * kyberQ) + 1024) >> 11) + vec.coeffs[8*j+3] = uint16(((((uint32(a[off+11*j+4]) >> 1) | ((uint32(a[off+11*j+5]) & 0x0f) << 7)) * kyberQ) + 1024) >> 11) + vec.coeffs[8*j+4] = uint16(((((uint32(a[off+11*j+5]) >> 4) | ((uint32(a[off+11*j+6]) & 0x7f) << 4)) * kyberQ) + 1024) >> 11) + vec.coeffs[8*j+5] = uint16(((((uint32(a[off+11*j+6]) >> 7) | ((uint32(a[off+11*j+7]) & 0xff) << 1) | ((uint32(a[off+11*j+8]) & 0x03) << 9)) * kyberQ) + 1024) >> 11) + vec.coeffs[8*j+6] = uint16(((((uint32(a[off+11*j+8]) >> 2) | ((uint32(a[off+11*j+9]) & 0x1f) << 6)) * kyberQ) + 1024) >> 11) + vec.coeffs[8*j+7] = uint16(((((uint32(a[off+11*j+9]) >> 5) | ((uint32(a[off+11*j+10]) & 0xff) << 3)) * kyberQ) + 1024) >> 11) + } + off += compressedCoeffSize + } +} + +// Serialize vector of polynomials. +func (v *polyVec) toBytes(r []byte) { + for i, p := range v.vec { + p.toBytes(r[i*polySize:]) + } +} + +// De-serialize vector of polynomials; inverse of polyVec.toBytes(). +func (v *polyVec) fromBytes(a []byte) { + for i, p := range v.vec { + p.fromBytes(a[i*polySize:]) + } +} + +// Apply forward NTT to all elements of a vector of polynomials. +func (v *polyVec) ntt() { + for _, p := range v.vec { + p.ntt() + } +} + +// Apply inverse NTT to all elements of a vector of polynomials. +func (v *polyVec) invntt() { + for _, p := range v.vec { + p.invntt() + } +} + +// Pointwise multiply elements of a and b and accumulate into p. +func (p *poly) pointwiseAcc(a, b *polyVec) { + hardwareAccelImpl.pointwiseAccFn(p, a, b) +} + +// Add vectors of polynomials. +func (v *polyVec) add(a, b *polyVec) { + for i, p := range v.vec { + p.add(a.vec[i], b.vec[i]) + } +} + +// Get compressed and serialized size in bytes. +func (v *polyVec) compressedSize() int { + return len(v.vec) * compressedCoeffSize +} + +func pointwiseAccRef(p *poly, a, b *polyVec) { + for j := 0; j < kyberN; j++ { + t := montgomeryReduce(4613 * uint32(b.vec[0].coeffs[j])) // 4613 = 2^{2*18} % q + p.coeffs[j] = montgomeryReduce(uint32(a.vec[0].coeffs[j]) * uint32(t)) + for i := 1; i < len(a.vec); i++ { // len(a.vec) == kyberK + t = montgomeryReduce(4613 * uint32(b.vec[i].coeffs[j])) + p.coeffs[j] += montgomeryReduce(uint32(a.vec[i].coeffs[j]) * uint32(t)) + } + + p.coeffs[j] = barrettReduce(p.coeffs[j]) + } +} diff --git a/vendor/blitter.com/go/kyber/precomp.go b/vendor/blitter.com/go/kyber/precomp.go new file mode 100644 index 0000000..a18cd8f --- /dev/null +++ b/vendor/blitter.com/go/kyber/precomp.go @@ -0,0 +1,87 @@ +// precomp.go - Precomputed NTT constants. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to the software, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +package kyber + +// Precomputed constants for the forward NTT and inverse NTT. +// Computed using Pari/GP as follows: +// +// brv=[0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240, \ +// 8,136,72,200,40,168,104,232,24,152,88,216,56,184,120,248, \ +// 4,132,68,196,36,164,100,228,20,148,84,212,52,180,116,244, \ +// 12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252, \ +// 2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242, \ +// 10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250, \ +// 6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246, \ +// 14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254, \ +// 1,129,65,193,33,161,97,225,17,145,81,209,49,177,113,241, \ +// 9,137,73,201,41,169,105,233,25,153,89,217,57,185,121,249, \ +// 5,133,69,197,37,165,101,229,21,149,85,213,53,181,117,245, \ +// 13,141,77,205,45,173,109,237,29,157,93,221,61,189,125,253, \ +// 3,131,67,195,35,163,99,227,19,147,83,211,51,179,115,243, \ +// 11,139,75,203,43,171,107,235,27,155,91,219,59,187,123,251, \ +// 7,135,71,199,39,167,103,231,23,151,87,215,55,183,119,247, \ +// 15,143,79,207,47,175,111,239,31,159,95,223,63,191,127,255]; +// +// q = 7681; +// n = 256; +// mont = Mod(2^18,q); +// +// g=0; for(i=2,q-1,if(znorder(Mod(i,q)) == 2*n, g=Mod(i,q); break)) +// +// zetas = lift(vector(n, i, g^(brv[i])*mont)) +// omegas_inv_bitrev_montgomery = lift(vector(n/2, i, (g^2)^(-brv[2*(i-1)+1])*mont)) +// psis_inv_montgomery = lift(vector(n, i, g^(-(i-1))/n*mont)) + +var zetas = [kyberN]uint16{ + 990, 7427, 2634, 6819, 578, 3281, 2143, 1095, 484, 6362, 3336, 5382, 6086, 3823, 877, 5656, + 3583, 7010, 6414, 263, 1285, 291, 7143, 7338, 1581, 5134, 5184, 5932, 4042, 5775, 2468, 3, + 606, 729, 5383, 962, 3240, 7548, 5129, 7653, 5929, 4965, 2461, 641, 1584, 2666, 1142, 157, + 7407, 5222, 5602, 5142, 6140, 5485, 4931, 1559, 2085, 5284, 2056, 3538, 7269, 3535, 7190, 1957, + 3465, 6792, 1538, 4664, 2023, 7643, 3660, 7673, 1694, 6905, 3995, 3475, 5939, 1859, 6910, 4434, + 1019, 1492, 7087, 4761, 657, 4859, 5798, 2640, 1693, 2607, 2782, 5400, 6466, 1010, 957, 3851, + 2121, 6392, 7319, 3367, 3659, 3375, 6430, 7583, 1549, 5856, 4773, 6084, 5544, 1650, 3997, 4390, + 6722, 2915, 4245, 2635, 6128, 7676, 5737, 1616, 3457, 3132, 7196, 4702, 6239, 851, 2122, 3009, + 7613, 7295, 2007, 323, 5112, 3716, 2289, 6442, 6965, 2713, 7126, 3401, 963, 6596, 607, 5027, + 7078, 4484, 5937, 944, 2860, 2680, 5049, 1777, 5850, 3387, 6487, 6777, 4812, 4724, 7077, 186, + 6848, 6793, 3463, 5877, 1174, 7116, 3077, 5945, 6591, 590, 6643, 1337, 6036, 3991, 1675, 2053, + 6055, 1162, 1679, 3883, 4311, 2106, 6163, 4486, 6374, 5006, 4576, 4288, 5180, 4102, 282, 6119, + 7443, 6330, 3184, 4971, 2530, 5325, 4171, 7185, 5175, 5655, 1898, 382, 7211, 43, 5965, 6073, + 1730, 332, 1577, 3304, 2329, 1699, 6150, 2379, 5113, 333, 3502, 4517, 1480, 1172, 5567, 651, + 925, 4573, 599, 1367, 4109, 1863, 6929, 1605, 3866, 2065, 4048, 839, 5764, 2447, 2022, 3345, + 1990, 4067, 2036, 2069, 3567, 7371, 2368, 339, 6947, 2159, 654, 7327, 2768, 6676, 987, 2214, +} + +var omegasInvBitrevMontgomery = [kyberN / 2]uint16{ + 990, 254, 862, 5047, 6586, 5538, 4400, 7103, 2025, 6804, 3858, 1595, 2299, 4345, 1319, 7197, + 7678, 5213, 1906, 3639, 1749, 2497, 2547, 6100, 343, 538, 7390, 6396, 7418, 1267, 671, 4098, + 5724, 491, 4146, 412, 4143, 5625, 2397, 5596, 6122, 2750, 2196, 1541, 2539, 2079, 2459, 274, + 7524, 6539, 5015, 6097, 7040, 5220, 2716, 1752, 28, 2552, 133, 4441, 6719, 2298, 6952, 7075, + 4672, 5559, 6830, 1442, 2979, 485, 4549, 4224, 6065, 1944, 5, 1553, 5046, 3436, 4766, 959, + 3291, 3684, 6031, 2137, 1597, 2908, 1825, 6132, 98, 1251, 4306, 4022, 4314, 362, 1289, 5560, + 3830, 6724, 6671, 1215, 2281, 4899, 5074, 5988, 5041, 1883, 2822, 7024, 2920, 594, 6189, 6662, + 3247, 771, 5822, 1742, 4206, 3686, 776, 5987, 8, 4021, 38, 5658, 3017, 6143, 889, 4216, +} + +var psisInvMontgomery = [kyberN]uint16{ + 1024, 4972, 5779, 6907, 4943, 4168, 315, 5580, 90, 497, 1123, 142, 4710, 5527, 2443, 4871, + 698, 2489, 2394, 4003, 684, 2241, 2390, 7224, 5072, 2064, 4741, 1687, 6841, 482, 7441, 1235, + 2126, 4742, 2802, 5744, 6287, 4933, 699, 3604, 1297, 2127, 5857, 1705, 3868, 3779, 4397, 2177, + 159, 622, 2240, 1275, 640, 6948, 4572, 5277, 209, 2605, 1157, 7328, 5817, 3191, 1662, 2009, + 4864, 574, 2487, 164, 6197, 4436, 7257, 3462, 4268, 4281, 3414, 4515, 3170, 1290, 2003, 5855, + 7156, 6062, 7531, 1732, 3249, 4884, 7512, 3590, 1049, 2123, 1397, 6093, 3691, 6130, 6541, 3946, + 6258, 3322, 1788, 4241, 4900, 2309, 1400, 1757, 400, 502, 6698, 2338, 3011, 668, 7444, 4580, + 6516, 6795, 2959, 4136, 3040, 2279, 6355, 3943, 2913, 6613, 7416, 4084, 6508, 5556, 4054, 3782, + 61, 6567, 2212, 779, 632, 5709, 5667, 4923, 4911, 6893, 4695, 4164, 3536, 2287, 7594, 2848, + 3267, 1911, 3128, 546, 1991, 156, 4958, 5531, 6903, 483, 875, 138, 250, 2234, 2266, 7222, + 2842, 4258, 812, 6703, 232, 5207, 6650, 2585, 1900, 6225, 4932, 7265, 4701, 3173, 4635, 6393, + 227, 7313, 4454, 4284, 6759, 1224, 5223, 1447, 395, 2608, 4502, 4037, 189, 3348, 54, 6443, + 2210, 6230, 2826, 1780, 3002, 5995, 1955, 6102, 6045, 3938, 5019, 4417, 1434, 1262, 1507, 5847, + 5917, 7157, 7177, 6434, 7537, 741, 4348, 1309, 145, 374, 2236, 4496, 5028, 6771, 6923, 7421, + 1978, 1023, 3857, 6876, 1102, 7451, 4704, 6518, 1344, 765, 384, 5705, 1207, 1630, 4734, 1563, + 6839, 5933, 1954, 4987, 7142, 5814, 7527, 4953, 7637, 4707, 2182, 5734, 2818, 541, 4097, 5641, +} diff --git a/vendor/blitter.com/go/kyber/reduce.go b/vendor/blitter.com/go/kyber/reduce.go new file mode 100644 index 0000000..ada3eec --- /dev/null +++ b/vendor/blitter.com/go/kyber/reduce.go @@ -0,0 +1,43 @@ +// reduce.go - Montgomery, Barret, and Full reduction. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to the software, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +package kyber + +const ( + qinv = 7679 // -inverse_mod(q,2^18) + rlog = 18 +) + +// Montgomery reduction; given a 32-bit integer a, computes 16-bit integer +// congruent to a * R^-1 mod q, where R=2^18 (see value of rlog). +func montgomeryReduce(a uint32) uint16 { + u := a * qinv + u &= (1 << rlog) - 1 + u *= kyberQ + a += u + return uint16(a >> rlog) +} + +// Barrett reduction; given a 16-bit integer a, computes 16-bit integer +// congruent to a mod q in {0,...,11768}. +func barrettReduce(a uint16) uint16 { + u := uint32(a >> 13) // ((uint32_t) a * sinv) >> 16 + u *= kyberQ + a -= uint16(u) + return a +} + +// Full reduction; given a 16-bit integer a, computes unsigned integer a mod q. +func freeze(x uint16) uint16 { + r := barrettReduce(x) + + m := r - kyberQ + c := int16(m) + c >>= 15 + r = m ^ ((r ^ m) & uint16(c)) + return r +} diff --git a/vendor/blitter.com/go/mtwist/mtwist.go b/vendor/blitter.com/go/mtwist/mtwist.go new file mode 100644 index 0000000..4527525 --- /dev/null +++ b/vendor/blitter.com/go/mtwist/mtwist.go @@ -0,0 +1,125 @@ +// MersenneTwister +// From https://gist.github.com/cuixin/1b8b6bd7bfbde8fe76e8 +package MersenneTwister + +import ( + "crypto" + + _ "crypto/sha512" +) + +const N = 312 +const M = 156 +const MATRIX_A = 0xB5026F5AA96619E9 +const UPPER_MASK = 0xFFFFFFFF80000000 +const LOWER_MASK = 0x7FFFFFFF + +type MT19937_64 struct { + array [N]uint64 //state vector + index uint64 // array index +} + +func New() *MT19937_64 { + return &MT19937_64{ + index: N + 1, + } +} + +func (m *MT19937_64) _initstate() { + // Recommendations abound that mtwist should throw away 1st 10000 or so + // of initial state + for i := 0; i < 10000; i++ { + _ = m.Int63() + } +} + +func (m *MT19937_64) Seed(seed int64) { + m.array[0] = uint64(seed) + for m.index = 1; m.index < N; m.index++ { + m.array[m.index] = (6364136223846793005*(m.array[m.index-1]^(m.array[m.index-1]>>62)) + m.index) + } + m._initstate() + //fmt.Printf("final array(s):%v\n", m.array) +} + +func _bytesToUint64(b []byte) (r uint64) { + r = uint64(b[0])<<56 + + uint64(b[1])<<48 + + uint64(b[2])<<40 + + uint64(b[3])<<32 + + uint64(b[4])<<24 + + uint64(b[5])<<16 + + uint64(b[6])<<8 + + uint64(b[7]) + return +} + +func (m *MT19937_64) SeedFullState(s []byte) { + //fmt.Printf("s:%v\n", s) + if len(s) < N*8 { + // Expand s if shorter than mtwist array state + ha := crypto.SHA512 + h := ha.New() + shortfallChunks := ((N * 8) - len(s)) / h.Size() + //shortfallRem := ((N * 8) - len(s)) % h.Size() + //fmt.Printf("chunks, rem:%d,%d\n", shortfallChunks, shortfallRem) + idx := 0 + for idx < shortfallChunks { + _, _ = h.Write(s) + s = h.Sum(s) + idx += 1 + } + _, _ = h.Write(s) + s = h.Sum(s) + //fmt.Printf("exp s:%v\n", s) + } + + for idx := 0; idx < N; { + m.array[idx] = _bytesToUint64(s[idx*8 : (idx*8)+8]) + idx += 1 + } + //fmt.Printf("final array(xs):%v\n", m.array) + m.index = 0 + m._initstate() +} + +func (m *MT19937_64) Int63() uint64 { + var i int + var x uint64 + mag01 := []uint64{0, MATRIX_A} + if m.index >= N { + if m.index == N+1 { + m.Seed(int64(5489)) + } + + for i = 0; i < N-M; i++ { + x = (m.array[i] & UPPER_MASK) | (m.array[i+1] & LOWER_MASK) + m.array[i] = m.array[i+(M)] ^ (x >> 1) ^ mag01[int(x&uint64(1))] + } + for ; i < N-1; i++ { + x = (m.array[i] & UPPER_MASK) | (m.array[i+1] & LOWER_MASK) + m.array[i] = m.array[i+(M-N)] ^ (x >> 1) ^ mag01[int(x&uint64(1))] + } + x = (m.array[N-1] & UPPER_MASK) | (m.array[0] & LOWER_MASK) + m.array[N-1] = m.array[M-1] ^ (x >> 1) ^ mag01[int(x&uint64(1))] + m.index = 0 + } + x = m.array[m.index] + m.index++ + x ^= (x >> 29) & 0x5555555555555555 + x ^= (x << 17) & 0x71D67FFFEDA60000 + x ^= (x << 37) & 0xFFF7EEE000000000 + x ^= (x >> 43) + return x +} + +func (m *MT19937_64) IntN(value uint64) uint64 { + return m.Int63() % value +} + +func (m *MT19937_64) Read(p []byte) (n int, err error) { + for idx := 0; idx < len(p); idx++ { + p[idx] = byte( (m.Int63()>>47) % 256) + } + return n, nil +} diff --git a/vendor/blitter.com/go/newhope/LICENSE b/vendor/blitter.com/go/newhope/LICENSE new file mode 100644 index 0000000..6ca207e --- /dev/null +++ b/vendor/blitter.com/go/newhope/LICENSE @@ -0,0 +1,122 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. + diff --git a/vendor/blitter.com/go/newhope/batcher.go b/vendor/blitter.com/go/newhope/batcher.go new file mode 100644 index 0000000..2f99489 --- /dev/null +++ b/vendor/blitter.com/go/newhope/batcher.go @@ -0,0 +1,929 @@ +// batcher.go - Constant time polynomial sampler. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to newhope, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +package newhope + +func batcher84(x []uint16) { + // In theory this should probably be inlined. + compareAndSwap := func(x []uint16, i, j int) { + const _5q = 5 * paramQ + var c int32 + var t uint16 + + c = _5q - 1 - int32(x[16*i]) + c >>= 31 + t = x[16*i] ^ x[16*j] + t &= uint16(c) + x[16*i] ^= t + x[16*j] ^= t + } + + compareAndSwap(x, 0, 1) + compareAndSwap(x, 2, 3) + compareAndSwap(x, 0, 2) + compareAndSwap(x, 1, 3) + compareAndSwap(x, 1, 2) + compareAndSwap(x, 4, 5) + compareAndSwap(x, 6, 7) + compareAndSwap(x, 4, 6) + compareAndSwap(x, 5, 7) + compareAndSwap(x, 5, 6) + compareAndSwap(x, 0, 4) + compareAndSwap(x, 2, 6) + compareAndSwap(x, 2, 4) + compareAndSwap(x, 1, 5) + compareAndSwap(x, 3, 7) + compareAndSwap(x, 3, 5) + compareAndSwap(x, 1, 2) + compareAndSwap(x, 3, 4) + compareAndSwap(x, 5, 6) + compareAndSwap(x, 8, 9) + compareAndSwap(x, 10, 11) + compareAndSwap(x, 8, 10) + compareAndSwap(x, 9, 11) + compareAndSwap(x, 9, 10) + compareAndSwap(x, 12, 13) + compareAndSwap(x, 14, 15) + compareAndSwap(x, 12, 14) + compareAndSwap(x, 13, 15) + compareAndSwap(x, 13, 14) + compareAndSwap(x, 8, 12) + compareAndSwap(x, 10, 14) + compareAndSwap(x, 10, 12) + compareAndSwap(x, 9, 13) + compareAndSwap(x, 11, 15) + compareAndSwap(x, 11, 13) + compareAndSwap(x, 9, 10) + compareAndSwap(x, 11, 12) + compareAndSwap(x, 13, 14) + compareAndSwap(x, 0, 8) + compareAndSwap(x, 4, 12) + compareAndSwap(x, 4, 8) + compareAndSwap(x, 2, 10) + compareAndSwap(x, 6, 14) + compareAndSwap(x, 6, 10) + compareAndSwap(x, 2, 4) + compareAndSwap(x, 6, 8) + compareAndSwap(x, 10, 12) + compareAndSwap(x, 1, 9) + compareAndSwap(x, 5, 13) + compareAndSwap(x, 5, 9) + compareAndSwap(x, 3, 11) + compareAndSwap(x, 7, 15) + compareAndSwap(x, 7, 11) + compareAndSwap(x, 3, 5) + compareAndSwap(x, 7, 9) + compareAndSwap(x, 11, 13) + compareAndSwap(x, 1, 2) + compareAndSwap(x, 3, 4) + compareAndSwap(x, 5, 6) + compareAndSwap(x, 7, 8) + compareAndSwap(x, 9, 10) + compareAndSwap(x, 11, 12) + compareAndSwap(x, 13, 14) + compareAndSwap(x, 16, 17) + compareAndSwap(x, 18, 19) + compareAndSwap(x, 16, 18) + compareAndSwap(x, 17, 19) + compareAndSwap(x, 17, 18) + compareAndSwap(x, 20, 21) + compareAndSwap(x, 22, 23) + compareAndSwap(x, 20, 22) + compareAndSwap(x, 21, 23) + compareAndSwap(x, 21, 22) + compareAndSwap(x, 16, 20) + compareAndSwap(x, 18, 22) + compareAndSwap(x, 18, 20) + compareAndSwap(x, 17, 21) + compareAndSwap(x, 19, 23) + compareAndSwap(x, 19, 21) + compareAndSwap(x, 17, 18) + compareAndSwap(x, 19, 20) + compareAndSwap(x, 21, 22) + compareAndSwap(x, 24, 25) + compareAndSwap(x, 26, 27) + compareAndSwap(x, 24, 26) + compareAndSwap(x, 25, 27) + compareAndSwap(x, 25, 26) + compareAndSwap(x, 28, 29) + compareAndSwap(x, 30, 31) + compareAndSwap(x, 28, 30) + compareAndSwap(x, 29, 31) + compareAndSwap(x, 29, 30) + compareAndSwap(x, 24, 28) + compareAndSwap(x, 26, 30) + compareAndSwap(x, 26, 28) + compareAndSwap(x, 25, 29) + compareAndSwap(x, 27, 31) + compareAndSwap(x, 27, 29) + compareAndSwap(x, 25, 26) + compareAndSwap(x, 27, 28) + compareAndSwap(x, 29, 30) + compareAndSwap(x, 16, 24) + compareAndSwap(x, 20, 28) + compareAndSwap(x, 20, 24) + compareAndSwap(x, 18, 26) + compareAndSwap(x, 22, 30) + compareAndSwap(x, 22, 26) + compareAndSwap(x, 18, 20) + compareAndSwap(x, 22, 24) + compareAndSwap(x, 26, 28) + compareAndSwap(x, 17, 25) + compareAndSwap(x, 21, 29) + compareAndSwap(x, 21, 25) + compareAndSwap(x, 19, 27) + compareAndSwap(x, 23, 31) + compareAndSwap(x, 23, 27) + compareAndSwap(x, 19, 21) + compareAndSwap(x, 23, 25) + compareAndSwap(x, 27, 29) + compareAndSwap(x, 17, 18) + compareAndSwap(x, 19, 20) + compareAndSwap(x, 21, 22) + compareAndSwap(x, 23, 24) + compareAndSwap(x, 25, 26) + compareAndSwap(x, 27, 28) + compareAndSwap(x, 29, 30) + compareAndSwap(x, 0, 16) + compareAndSwap(x, 8, 24) + compareAndSwap(x, 8, 16) + compareAndSwap(x, 4, 20) + compareAndSwap(x, 12, 28) + compareAndSwap(x, 12, 20) + compareAndSwap(x, 4, 8) + compareAndSwap(x, 12, 16) + compareAndSwap(x, 20, 24) + compareAndSwap(x, 2, 18) + compareAndSwap(x, 10, 26) + compareAndSwap(x, 10, 18) + compareAndSwap(x, 6, 22) + compareAndSwap(x, 14, 30) + compareAndSwap(x, 14, 22) + compareAndSwap(x, 6, 10) + compareAndSwap(x, 14, 18) + compareAndSwap(x, 22, 26) + compareAndSwap(x, 2, 4) + compareAndSwap(x, 6, 8) + compareAndSwap(x, 10, 12) + compareAndSwap(x, 14, 16) + compareAndSwap(x, 18, 20) + compareAndSwap(x, 22, 24) + compareAndSwap(x, 26, 28) + compareAndSwap(x, 1, 17) + compareAndSwap(x, 9, 25) + compareAndSwap(x, 9, 17) + compareAndSwap(x, 5, 21) + compareAndSwap(x, 13, 29) + compareAndSwap(x, 13, 21) + compareAndSwap(x, 5, 9) + compareAndSwap(x, 13, 17) + compareAndSwap(x, 21, 25) + compareAndSwap(x, 3, 19) + compareAndSwap(x, 11, 27) + compareAndSwap(x, 11, 19) + compareAndSwap(x, 7, 23) + compareAndSwap(x, 15, 31) + compareAndSwap(x, 15, 23) + compareAndSwap(x, 7, 11) + compareAndSwap(x, 15, 19) + compareAndSwap(x, 23, 27) + compareAndSwap(x, 3, 5) + compareAndSwap(x, 7, 9) + compareAndSwap(x, 11, 13) + compareAndSwap(x, 15, 17) + compareAndSwap(x, 19, 21) + compareAndSwap(x, 23, 25) + compareAndSwap(x, 27, 29) + compareAndSwap(x, 1, 2) + compareAndSwap(x, 3, 4) + compareAndSwap(x, 5, 6) + compareAndSwap(x, 7, 8) + compareAndSwap(x, 9, 10) + compareAndSwap(x, 11, 12) + compareAndSwap(x, 13, 14) + compareAndSwap(x, 15, 16) + compareAndSwap(x, 17, 18) + compareAndSwap(x, 19, 20) + compareAndSwap(x, 21, 22) + compareAndSwap(x, 23, 24) + compareAndSwap(x, 25, 26) + compareAndSwap(x, 27, 28) + compareAndSwap(x, 29, 30) + compareAndSwap(x, 32, 33) + compareAndSwap(x, 34, 35) + compareAndSwap(x, 32, 34) + compareAndSwap(x, 33, 35) + compareAndSwap(x, 33, 34) + compareAndSwap(x, 36, 37) + compareAndSwap(x, 38, 39) + compareAndSwap(x, 36, 38) + compareAndSwap(x, 37, 39) + compareAndSwap(x, 37, 38) + compareAndSwap(x, 32, 36) + compareAndSwap(x, 34, 38) + compareAndSwap(x, 34, 36) + compareAndSwap(x, 33, 37) + compareAndSwap(x, 35, 39) + compareAndSwap(x, 35, 37) + compareAndSwap(x, 33, 34) + compareAndSwap(x, 35, 36) + compareAndSwap(x, 37, 38) + compareAndSwap(x, 40, 41) + compareAndSwap(x, 42, 43) + compareAndSwap(x, 40, 42) + compareAndSwap(x, 41, 43) + compareAndSwap(x, 41, 42) + compareAndSwap(x, 44, 45) + compareAndSwap(x, 46, 47) + compareAndSwap(x, 44, 46) + compareAndSwap(x, 45, 47) + compareAndSwap(x, 45, 46) + compareAndSwap(x, 40, 44) + compareAndSwap(x, 42, 46) + compareAndSwap(x, 42, 44) + compareAndSwap(x, 41, 45) + compareAndSwap(x, 43, 47) + compareAndSwap(x, 43, 45) + compareAndSwap(x, 41, 42) + compareAndSwap(x, 43, 44) + compareAndSwap(x, 45, 46) + compareAndSwap(x, 32, 40) + compareAndSwap(x, 36, 44) + compareAndSwap(x, 36, 40) + compareAndSwap(x, 34, 42) + compareAndSwap(x, 38, 46) + compareAndSwap(x, 38, 42) + compareAndSwap(x, 34, 36) + compareAndSwap(x, 38, 40) + compareAndSwap(x, 42, 44) + compareAndSwap(x, 33, 41) + compareAndSwap(x, 37, 45) + compareAndSwap(x, 37, 41) + compareAndSwap(x, 35, 43) + compareAndSwap(x, 39, 47) + compareAndSwap(x, 39, 43) + compareAndSwap(x, 35, 37) + compareAndSwap(x, 39, 41) + compareAndSwap(x, 43, 45) + compareAndSwap(x, 33, 34) + compareAndSwap(x, 35, 36) + compareAndSwap(x, 37, 38) + compareAndSwap(x, 39, 40) + compareAndSwap(x, 41, 42) + compareAndSwap(x, 43, 44) + compareAndSwap(x, 45, 46) + compareAndSwap(x, 48, 49) + compareAndSwap(x, 50, 51) + compareAndSwap(x, 48, 50) + compareAndSwap(x, 49, 51) + compareAndSwap(x, 49, 50) + compareAndSwap(x, 52, 53) + compareAndSwap(x, 54, 55) + compareAndSwap(x, 52, 54) + compareAndSwap(x, 53, 55) + compareAndSwap(x, 53, 54) + compareAndSwap(x, 48, 52) + compareAndSwap(x, 50, 54) + compareAndSwap(x, 50, 52) + compareAndSwap(x, 49, 53) + compareAndSwap(x, 51, 55) + compareAndSwap(x, 51, 53) + compareAndSwap(x, 49, 50) + compareAndSwap(x, 51, 52) + compareAndSwap(x, 53, 54) + compareAndSwap(x, 56, 57) + compareAndSwap(x, 58, 59) + compareAndSwap(x, 56, 58) + compareAndSwap(x, 57, 59) + compareAndSwap(x, 57, 58) + compareAndSwap(x, 60, 61) + compareAndSwap(x, 62, 63) + compareAndSwap(x, 60, 62) + compareAndSwap(x, 61, 63) + compareAndSwap(x, 61, 62) + compareAndSwap(x, 56, 60) + compareAndSwap(x, 58, 62) + compareAndSwap(x, 58, 60) + compareAndSwap(x, 57, 61) + compareAndSwap(x, 59, 63) + compareAndSwap(x, 59, 61) + compareAndSwap(x, 57, 58) + compareAndSwap(x, 59, 60) + compareAndSwap(x, 61, 62) + compareAndSwap(x, 48, 56) + compareAndSwap(x, 52, 60) + compareAndSwap(x, 52, 56) + compareAndSwap(x, 50, 58) + compareAndSwap(x, 54, 62) + compareAndSwap(x, 54, 58) + compareAndSwap(x, 50, 52) + compareAndSwap(x, 54, 56) + compareAndSwap(x, 58, 60) + compareAndSwap(x, 49, 57) + compareAndSwap(x, 53, 61) + compareAndSwap(x, 53, 57) + compareAndSwap(x, 51, 59) + compareAndSwap(x, 55, 63) + compareAndSwap(x, 55, 59) + compareAndSwap(x, 51, 53) + compareAndSwap(x, 55, 57) + compareAndSwap(x, 59, 61) + compareAndSwap(x, 49, 50) + compareAndSwap(x, 51, 52) + compareAndSwap(x, 53, 54) + compareAndSwap(x, 55, 56) + compareAndSwap(x, 57, 58) + compareAndSwap(x, 59, 60) + compareAndSwap(x, 61, 62) + compareAndSwap(x, 32, 48) + compareAndSwap(x, 40, 56) + compareAndSwap(x, 40, 48) + compareAndSwap(x, 36, 52) + compareAndSwap(x, 44, 60) + compareAndSwap(x, 44, 52) + compareAndSwap(x, 36, 40) + compareAndSwap(x, 44, 48) + compareAndSwap(x, 52, 56) + compareAndSwap(x, 34, 50) + compareAndSwap(x, 42, 58) + compareAndSwap(x, 42, 50) + compareAndSwap(x, 38, 54) + compareAndSwap(x, 46, 62) + compareAndSwap(x, 46, 54) + compareAndSwap(x, 38, 42) + compareAndSwap(x, 46, 50) + compareAndSwap(x, 54, 58) + compareAndSwap(x, 34, 36) + compareAndSwap(x, 38, 40) + compareAndSwap(x, 42, 44) + compareAndSwap(x, 46, 48) + compareAndSwap(x, 50, 52) + compareAndSwap(x, 54, 56) + compareAndSwap(x, 58, 60) + compareAndSwap(x, 33, 49) + compareAndSwap(x, 41, 57) + compareAndSwap(x, 41, 49) + compareAndSwap(x, 37, 53) + compareAndSwap(x, 45, 61) + compareAndSwap(x, 45, 53) + compareAndSwap(x, 37, 41) + compareAndSwap(x, 45, 49) + compareAndSwap(x, 53, 57) + compareAndSwap(x, 35, 51) + compareAndSwap(x, 43, 59) + compareAndSwap(x, 43, 51) + compareAndSwap(x, 39, 55) + compareAndSwap(x, 47, 63) + compareAndSwap(x, 47, 55) + compareAndSwap(x, 39, 43) + compareAndSwap(x, 47, 51) + compareAndSwap(x, 55, 59) + compareAndSwap(x, 35, 37) + compareAndSwap(x, 39, 41) + compareAndSwap(x, 43, 45) + compareAndSwap(x, 47, 49) + compareAndSwap(x, 51, 53) + compareAndSwap(x, 55, 57) + compareAndSwap(x, 59, 61) + compareAndSwap(x, 33, 34) + compareAndSwap(x, 35, 36) + compareAndSwap(x, 37, 38) + compareAndSwap(x, 39, 40) + compareAndSwap(x, 41, 42) + compareAndSwap(x, 43, 44) + compareAndSwap(x, 45, 46) + compareAndSwap(x, 47, 48) + compareAndSwap(x, 49, 50) + compareAndSwap(x, 51, 52) + compareAndSwap(x, 53, 54) + compareAndSwap(x, 55, 56) + compareAndSwap(x, 57, 58) + compareAndSwap(x, 59, 60) + compareAndSwap(x, 61, 62) + compareAndSwap(x, 0, 32) + compareAndSwap(x, 16, 48) + compareAndSwap(x, 16, 32) + compareAndSwap(x, 8, 40) + compareAndSwap(x, 24, 56) + compareAndSwap(x, 24, 40) + compareAndSwap(x, 8, 16) + compareAndSwap(x, 24, 32) + compareAndSwap(x, 40, 48) + compareAndSwap(x, 4, 36) + compareAndSwap(x, 20, 52) + compareAndSwap(x, 20, 36) + compareAndSwap(x, 12, 44) + compareAndSwap(x, 28, 60) + compareAndSwap(x, 28, 44) + compareAndSwap(x, 12, 20) + compareAndSwap(x, 28, 36) + compareAndSwap(x, 44, 52) + compareAndSwap(x, 4, 8) + compareAndSwap(x, 12, 16) + compareAndSwap(x, 20, 24) + compareAndSwap(x, 28, 32) + compareAndSwap(x, 36, 40) + compareAndSwap(x, 44, 48) + compareAndSwap(x, 52, 56) + compareAndSwap(x, 2, 34) + compareAndSwap(x, 18, 50) + compareAndSwap(x, 18, 34) + compareAndSwap(x, 10, 42) + compareAndSwap(x, 26, 58) + compareAndSwap(x, 26, 42) + compareAndSwap(x, 10, 18) + compareAndSwap(x, 26, 34) + compareAndSwap(x, 42, 50) + compareAndSwap(x, 6, 38) + compareAndSwap(x, 22, 54) + compareAndSwap(x, 22, 38) + compareAndSwap(x, 14, 46) + compareAndSwap(x, 30, 62) + compareAndSwap(x, 30, 46) + compareAndSwap(x, 14, 22) + compareAndSwap(x, 30, 38) + compareAndSwap(x, 46, 54) + compareAndSwap(x, 6, 10) + compareAndSwap(x, 14, 18) + compareAndSwap(x, 22, 26) + compareAndSwap(x, 30, 34) + compareAndSwap(x, 38, 42) + compareAndSwap(x, 46, 50) + compareAndSwap(x, 54, 58) + compareAndSwap(x, 2, 4) + compareAndSwap(x, 6, 8) + compareAndSwap(x, 10, 12) + compareAndSwap(x, 14, 16) + compareAndSwap(x, 18, 20) + compareAndSwap(x, 22, 24) + compareAndSwap(x, 26, 28) + compareAndSwap(x, 30, 32) + compareAndSwap(x, 34, 36) + compareAndSwap(x, 38, 40) + compareAndSwap(x, 42, 44) + compareAndSwap(x, 46, 48) + compareAndSwap(x, 50, 52) + compareAndSwap(x, 54, 56) + compareAndSwap(x, 58, 60) + compareAndSwap(x, 1, 33) + compareAndSwap(x, 17, 49) + compareAndSwap(x, 17, 33) + compareAndSwap(x, 9, 41) + compareAndSwap(x, 25, 57) + compareAndSwap(x, 25, 41) + compareAndSwap(x, 9, 17) + compareAndSwap(x, 25, 33) + compareAndSwap(x, 41, 49) + compareAndSwap(x, 5, 37) + compareAndSwap(x, 21, 53) + compareAndSwap(x, 21, 37) + compareAndSwap(x, 13, 45) + compareAndSwap(x, 29, 61) + compareAndSwap(x, 29, 45) + compareAndSwap(x, 13, 21) + compareAndSwap(x, 29, 37) + compareAndSwap(x, 45, 53) + compareAndSwap(x, 5, 9) + compareAndSwap(x, 13, 17) + compareAndSwap(x, 21, 25) + compareAndSwap(x, 29, 33) + compareAndSwap(x, 37, 41) + compareAndSwap(x, 45, 49) + compareAndSwap(x, 53, 57) + compareAndSwap(x, 3, 35) + compareAndSwap(x, 19, 51) + compareAndSwap(x, 19, 35) + compareAndSwap(x, 11, 43) + compareAndSwap(x, 27, 59) + compareAndSwap(x, 27, 43) + compareAndSwap(x, 11, 19) + compareAndSwap(x, 27, 35) + compareAndSwap(x, 43, 51) + compareAndSwap(x, 7, 39) + compareAndSwap(x, 23, 55) + compareAndSwap(x, 23, 39) + compareAndSwap(x, 15, 47) + compareAndSwap(x, 31, 63) + compareAndSwap(x, 31, 47) + compareAndSwap(x, 15, 23) + compareAndSwap(x, 31, 39) + compareAndSwap(x, 47, 55) + compareAndSwap(x, 7, 11) + compareAndSwap(x, 15, 19) + compareAndSwap(x, 23, 27) + compareAndSwap(x, 31, 35) + compareAndSwap(x, 39, 43) + compareAndSwap(x, 47, 51) + compareAndSwap(x, 55, 59) + compareAndSwap(x, 3, 5) + compareAndSwap(x, 7, 9) + compareAndSwap(x, 11, 13) + compareAndSwap(x, 15, 17) + compareAndSwap(x, 19, 21) + compareAndSwap(x, 23, 25) + compareAndSwap(x, 27, 29) + compareAndSwap(x, 31, 33) + compareAndSwap(x, 35, 37) + compareAndSwap(x, 39, 41) + compareAndSwap(x, 43, 45) + compareAndSwap(x, 47, 49) + compareAndSwap(x, 51, 53) + compareAndSwap(x, 55, 57) + compareAndSwap(x, 59, 61) + compareAndSwap(x, 1, 2) + compareAndSwap(x, 3, 4) + compareAndSwap(x, 5, 6) + compareAndSwap(x, 7, 8) + compareAndSwap(x, 9, 10) + compareAndSwap(x, 11, 12) + compareAndSwap(x, 13, 14) + compareAndSwap(x, 15, 16) + compareAndSwap(x, 17, 18) + compareAndSwap(x, 19, 20) + compareAndSwap(x, 21, 22) + compareAndSwap(x, 23, 24) + compareAndSwap(x, 25, 26) + compareAndSwap(x, 27, 28) + compareAndSwap(x, 29, 30) + compareAndSwap(x, 31, 32) + compareAndSwap(x, 33, 34) + compareAndSwap(x, 35, 36) + compareAndSwap(x, 37, 38) + compareAndSwap(x, 39, 40) + compareAndSwap(x, 41, 42) + compareAndSwap(x, 43, 44) + compareAndSwap(x, 45, 46) + compareAndSwap(x, 47, 48) + compareAndSwap(x, 49, 50) + compareAndSwap(x, 51, 52) + compareAndSwap(x, 53, 54) + compareAndSwap(x, 55, 56) + compareAndSwap(x, 57, 58) + compareAndSwap(x, 59, 60) + compareAndSwap(x, 61, 62) + compareAndSwap(x, 64, 65) + compareAndSwap(x, 66, 67) + compareAndSwap(x, 64, 66) + compareAndSwap(x, 65, 67) + compareAndSwap(x, 65, 66) + compareAndSwap(x, 68, 69) + compareAndSwap(x, 70, 71) + compareAndSwap(x, 68, 70) + compareAndSwap(x, 69, 71) + compareAndSwap(x, 69, 70) + compareAndSwap(x, 64, 68) + compareAndSwap(x, 66, 70) + compareAndSwap(x, 66, 68) + compareAndSwap(x, 65, 69) + compareAndSwap(x, 67, 71) + compareAndSwap(x, 67, 69) + compareAndSwap(x, 65, 66) + compareAndSwap(x, 67, 68) + compareAndSwap(x, 69, 70) + compareAndSwap(x, 72, 73) + compareAndSwap(x, 74, 75) + compareAndSwap(x, 72, 74) + compareAndSwap(x, 73, 75) + compareAndSwap(x, 73, 74) + compareAndSwap(x, 76, 77) + compareAndSwap(x, 78, 79) + compareAndSwap(x, 76, 78) + compareAndSwap(x, 77, 79) + compareAndSwap(x, 77, 78) + compareAndSwap(x, 72, 76) + compareAndSwap(x, 74, 78) + compareAndSwap(x, 74, 76) + compareAndSwap(x, 73, 77) + compareAndSwap(x, 75, 79) + compareAndSwap(x, 75, 77) + compareAndSwap(x, 73, 74) + compareAndSwap(x, 75, 76) + compareAndSwap(x, 77, 78) + compareAndSwap(x, 64, 72) + compareAndSwap(x, 68, 76) + compareAndSwap(x, 68, 72) + compareAndSwap(x, 66, 74) + compareAndSwap(x, 70, 78) + compareAndSwap(x, 70, 74) + compareAndSwap(x, 66, 68) + compareAndSwap(x, 70, 72) + compareAndSwap(x, 74, 76) + compareAndSwap(x, 65, 73) + compareAndSwap(x, 69, 77) + compareAndSwap(x, 69, 73) + compareAndSwap(x, 67, 75) + compareAndSwap(x, 71, 79) + compareAndSwap(x, 71, 75) + compareAndSwap(x, 67, 69) + compareAndSwap(x, 71, 73) + compareAndSwap(x, 75, 77) + compareAndSwap(x, 65, 66) + compareAndSwap(x, 67, 68) + compareAndSwap(x, 69, 70) + compareAndSwap(x, 71, 72) + compareAndSwap(x, 73, 74) + compareAndSwap(x, 75, 76) + compareAndSwap(x, 77, 78) + compareAndSwap(x, 80, 81) + compareAndSwap(x, 82, 83) + compareAndSwap(x, 80, 82) + compareAndSwap(x, 81, 83) + compareAndSwap(x, 81, 82) + compareAndSwap(x, 81, 82) + compareAndSwap(x, 81, 82) + compareAndSwap(x, 64, 80) + compareAndSwap(x, 72, 80) + compareAndSwap(x, 68, 72) + compareAndSwap(x, 76, 80) + compareAndSwap(x, 66, 82) + compareAndSwap(x, 74, 82) + compareAndSwap(x, 70, 74) + compareAndSwap(x, 78, 82) + compareAndSwap(x, 66, 68) + compareAndSwap(x, 70, 72) + compareAndSwap(x, 74, 76) + compareAndSwap(x, 78, 80) + compareAndSwap(x, 65, 81) + compareAndSwap(x, 73, 81) + compareAndSwap(x, 69, 73) + compareAndSwap(x, 77, 81) + compareAndSwap(x, 67, 83) + compareAndSwap(x, 75, 83) + compareAndSwap(x, 71, 75) + compareAndSwap(x, 79, 83) + compareAndSwap(x, 67, 69) + compareAndSwap(x, 71, 73) + compareAndSwap(x, 75, 77) + compareAndSwap(x, 79, 81) + compareAndSwap(x, 65, 66) + compareAndSwap(x, 67, 68) + compareAndSwap(x, 69, 70) + compareAndSwap(x, 71, 72) + compareAndSwap(x, 73, 74) + compareAndSwap(x, 75, 76) + compareAndSwap(x, 77, 78) + compareAndSwap(x, 79, 80) + compareAndSwap(x, 81, 82) + compareAndSwap(x, 72, 80) + compareAndSwap(x, 68, 72) + compareAndSwap(x, 76, 80) + compareAndSwap(x, 74, 82) + compareAndSwap(x, 70, 74) + compareAndSwap(x, 78, 82) + compareAndSwap(x, 66, 68) + compareAndSwap(x, 70, 72) + compareAndSwap(x, 74, 76) + compareAndSwap(x, 78, 80) + compareAndSwap(x, 73, 81) + compareAndSwap(x, 69, 73) + compareAndSwap(x, 77, 81) + compareAndSwap(x, 75, 83) + compareAndSwap(x, 71, 75) + compareAndSwap(x, 79, 83) + compareAndSwap(x, 67, 69) + compareAndSwap(x, 71, 73) + compareAndSwap(x, 75, 77) + compareAndSwap(x, 79, 81) + compareAndSwap(x, 65, 66) + compareAndSwap(x, 67, 68) + compareAndSwap(x, 69, 70) + compareAndSwap(x, 71, 72) + compareAndSwap(x, 73, 74) + compareAndSwap(x, 75, 76) + compareAndSwap(x, 77, 78) + compareAndSwap(x, 79, 80) + compareAndSwap(x, 81, 82) + compareAndSwap(x, 0, 64) + compareAndSwap(x, 32, 64) + compareAndSwap(x, 16, 80) + compareAndSwap(x, 48, 80) + compareAndSwap(x, 16, 32) + compareAndSwap(x, 48, 64) + compareAndSwap(x, 8, 72) + compareAndSwap(x, 40, 72) + compareAndSwap(x, 24, 40) + compareAndSwap(x, 56, 72) + compareAndSwap(x, 8, 16) + compareAndSwap(x, 24, 32) + compareAndSwap(x, 40, 48) + compareAndSwap(x, 56, 64) + compareAndSwap(x, 72, 80) + compareAndSwap(x, 4, 68) + compareAndSwap(x, 36, 68) + compareAndSwap(x, 20, 36) + compareAndSwap(x, 52, 68) + compareAndSwap(x, 12, 76) + compareAndSwap(x, 44, 76) + compareAndSwap(x, 28, 44) + compareAndSwap(x, 60, 76) + compareAndSwap(x, 12, 20) + compareAndSwap(x, 28, 36) + compareAndSwap(x, 44, 52) + compareAndSwap(x, 60, 68) + compareAndSwap(x, 4, 8) + compareAndSwap(x, 12, 16) + compareAndSwap(x, 20, 24) + compareAndSwap(x, 28, 32) + compareAndSwap(x, 36, 40) + compareAndSwap(x, 44, 48) + compareAndSwap(x, 52, 56) + compareAndSwap(x, 60, 64) + compareAndSwap(x, 68, 72) + compareAndSwap(x, 76, 80) + compareAndSwap(x, 2, 66) + compareAndSwap(x, 34, 66) + compareAndSwap(x, 18, 82) + compareAndSwap(x, 50, 82) + compareAndSwap(x, 18, 34) + compareAndSwap(x, 50, 66) + compareAndSwap(x, 10, 74) + compareAndSwap(x, 42, 74) + compareAndSwap(x, 26, 42) + compareAndSwap(x, 58, 74) + compareAndSwap(x, 10, 18) + compareAndSwap(x, 26, 34) + compareAndSwap(x, 42, 50) + compareAndSwap(x, 58, 66) + compareAndSwap(x, 74, 82) + compareAndSwap(x, 6, 70) + compareAndSwap(x, 38, 70) + compareAndSwap(x, 22, 38) + compareAndSwap(x, 54, 70) + compareAndSwap(x, 14, 78) + compareAndSwap(x, 46, 78) + compareAndSwap(x, 30, 46) + compareAndSwap(x, 62, 78) + compareAndSwap(x, 14, 22) + compareAndSwap(x, 30, 38) + compareAndSwap(x, 46, 54) + compareAndSwap(x, 62, 70) + compareAndSwap(x, 6, 10) + compareAndSwap(x, 14, 18) + compareAndSwap(x, 22, 26) + compareAndSwap(x, 30, 34) + compareAndSwap(x, 38, 42) + compareAndSwap(x, 46, 50) + compareAndSwap(x, 54, 58) + compareAndSwap(x, 62, 66) + compareAndSwap(x, 70, 74) + compareAndSwap(x, 78, 82) + compareAndSwap(x, 2, 4) + compareAndSwap(x, 6, 8) + compareAndSwap(x, 10, 12) + compareAndSwap(x, 14, 16) + compareAndSwap(x, 18, 20) + compareAndSwap(x, 22, 24) + compareAndSwap(x, 26, 28) + compareAndSwap(x, 30, 32) + compareAndSwap(x, 34, 36) + compareAndSwap(x, 38, 40) + compareAndSwap(x, 42, 44) + compareAndSwap(x, 46, 48) + compareAndSwap(x, 50, 52) + compareAndSwap(x, 54, 56) + compareAndSwap(x, 58, 60) + compareAndSwap(x, 62, 64) + compareAndSwap(x, 66, 68) + compareAndSwap(x, 70, 72) + compareAndSwap(x, 74, 76) + compareAndSwap(x, 78, 80) + compareAndSwap(x, 1, 65) + compareAndSwap(x, 33, 65) + compareAndSwap(x, 17, 81) + compareAndSwap(x, 49, 81) + compareAndSwap(x, 17, 33) + compareAndSwap(x, 49, 65) + compareAndSwap(x, 9, 73) + compareAndSwap(x, 41, 73) + compareAndSwap(x, 25, 41) + compareAndSwap(x, 57, 73) + compareAndSwap(x, 9, 17) + compareAndSwap(x, 25, 33) + compareAndSwap(x, 41, 49) + compareAndSwap(x, 57, 65) + compareAndSwap(x, 73, 81) + compareAndSwap(x, 5, 69) + compareAndSwap(x, 37, 69) + compareAndSwap(x, 21, 37) + compareAndSwap(x, 53, 69) + compareAndSwap(x, 13, 77) + compareAndSwap(x, 45, 77) + compareAndSwap(x, 29, 45) + compareAndSwap(x, 61, 77) + compareAndSwap(x, 13, 21) + compareAndSwap(x, 29, 37) + compareAndSwap(x, 45, 53) + compareAndSwap(x, 61, 69) + compareAndSwap(x, 5, 9) + compareAndSwap(x, 13, 17) + compareAndSwap(x, 21, 25) + compareAndSwap(x, 29, 33) + compareAndSwap(x, 37, 41) + compareAndSwap(x, 45, 49) + compareAndSwap(x, 53, 57) + compareAndSwap(x, 61, 65) + compareAndSwap(x, 69, 73) + compareAndSwap(x, 77, 81) + compareAndSwap(x, 3, 67) + compareAndSwap(x, 35, 67) + compareAndSwap(x, 19, 83) + compareAndSwap(x, 51, 83) + compareAndSwap(x, 19, 35) + compareAndSwap(x, 51, 67) + compareAndSwap(x, 11, 75) + compareAndSwap(x, 43, 75) + compareAndSwap(x, 27, 43) + compareAndSwap(x, 59, 75) + compareAndSwap(x, 11, 19) + compareAndSwap(x, 27, 35) + compareAndSwap(x, 43, 51) + compareAndSwap(x, 59, 67) + compareAndSwap(x, 75, 83) + compareAndSwap(x, 7, 71) + compareAndSwap(x, 39, 71) + compareAndSwap(x, 23, 39) + compareAndSwap(x, 55, 71) + compareAndSwap(x, 15, 79) + compareAndSwap(x, 47, 79) + compareAndSwap(x, 31, 47) + compareAndSwap(x, 63, 79) + compareAndSwap(x, 15, 23) + compareAndSwap(x, 31, 39) + compareAndSwap(x, 47, 55) + compareAndSwap(x, 63, 71) + compareAndSwap(x, 7, 11) + compareAndSwap(x, 15, 19) + compareAndSwap(x, 23, 27) + compareAndSwap(x, 31, 35) + compareAndSwap(x, 39, 43) + compareAndSwap(x, 47, 51) + compareAndSwap(x, 55, 59) + compareAndSwap(x, 63, 67) + compareAndSwap(x, 71, 75) + compareAndSwap(x, 79, 83) + compareAndSwap(x, 3, 5) + compareAndSwap(x, 7, 9) + compareAndSwap(x, 11, 13) + compareAndSwap(x, 15, 17) + compareAndSwap(x, 19, 21) + compareAndSwap(x, 23, 25) + compareAndSwap(x, 27, 29) + compareAndSwap(x, 31, 33) + compareAndSwap(x, 35, 37) + compareAndSwap(x, 39, 41) + compareAndSwap(x, 43, 45) + compareAndSwap(x, 47, 49) + compareAndSwap(x, 51, 53) + compareAndSwap(x, 55, 57) + compareAndSwap(x, 59, 61) + compareAndSwap(x, 63, 65) + compareAndSwap(x, 67, 69) + compareAndSwap(x, 71, 73) + compareAndSwap(x, 75, 77) + compareAndSwap(x, 79, 81) + compareAndSwap(x, 1, 2) + compareAndSwap(x, 3, 4) + compareAndSwap(x, 5, 6) + compareAndSwap(x, 7, 8) + compareAndSwap(x, 9, 10) + compareAndSwap(x, 11, 12) + compareAndSwap(x, 13, 14) + compareAndSwap(x, 15, 16) + compareAndSwap(x, 17, 18) + compareAndSwap(x, 19, 20) + compareAndSwap(x, 21, 22) + compareAndSwap(x, 23, 24) + compareAndSwap(x, 25, 26) + compareAndSwap(x, 27, 28) + compareAndSwap(x, 29, 30) + compareAndSwap(x, 31, 32) + compareAndSwap(x, 33, 34) + compareAndSwap(x, 35, 36) + compareAndSwap(x, 37, 38) + compareAndSwap(x, 39, 40) + compareAndSwap(x, 41, 42) + compareAndSwap(x, 43, 44) + compareAndSwap(x, 45, 46) + compareAndSwap(x, 47, 48) + compareAndSwap(x, 49, 50) + compareAndSwap(x, 51, 52) + compareAndSwap(x, 53, 54) + compareAndSwap(x, 55, 56) + compareAndSwap(x, 57, 58) + compareAndSwap(x, 59, 60) + compareAndSwap(x, 61, 62) + compareAndSwap(x, 63, 64) + compareAndSwap(x, 65, 66) + compareAndSwap(x, 67, 68) + compareAndSwap(x, 69, 70) + compareAndSwap(x, 71, 72) + compareAndSwap(x, 73, 74) + compareAndSwap(x, 75, 76) + compareAndSwap(x, 77, 78) + compareAndSwap(x, 79, 80) + compareAndSwap(x, 81, 82) +} diff --git a/vendor/blitter.com/go/newhope/error_correction.go b/vendor/blitter.com/go/newhope/error_correction.go new file mode 100644 index 0000000..7855648 --- /dev/null +++ b/vendor/blitter.com/go/newhope/error_correction.go @@ -0,0 +1,135 @@ +// error_correction.go - NewHope key exchange error correction. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to newhope, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +package newhope + +import "blitter.com/go/chacha20" + +func abs(v int32) int32 { + mask := v >> 31 + return (v ^ mask) - mask +} + +func f(v0, v1 *int32, x int32) int32 { + // The`ref` code uses uint32 for x, but none of the values ever get large + // enough for that, and that would be cast-tastic due to Go being Go. + + // Next 6 lines compute t = x/PARAM_Q + b := x * 2730 + t := b >> 25 + b = x - t*paramQ + b = (paramQ - 1) - b + b >>= 31 + t -= b + + r := t & 1 + xit := t >> 1 + *v0 = xit + r // v0 = round(x/(2*PARAM_Q)) + + t-- + r = t & 1 + *v1 = (t >> 1) + r + + return abs(x - ((*v0) * 2 * paramQ)) +} + +func g(x int32) int32 { + // Next 6 lines compute t = x/(4 *PARAMQ) + b := x * 2730 + t := b >> 27 + b = x - t*(paramQ*4) + b = (paramQ * 4) - b + b >>= 31 + t -= b + + c := t & 1 + t = (t >> 1) + c // t = round(x/(8*PARAM_Q)) + + t *= 8 * paramQ + + return abs(t - x) +} + +func llDecode(xi0, xi1, xi2, xi3 int32) int16 { + t := g(xi0) + t += g(xi1) + t += g(xi2) + t += g(xi3) + + t -= 8 * paramQ + t >>= 31 + return int16(t & 1) +} + +func (c *poly) helpRec(v *poly, seed *[SeedBytes]byte, nonce byte) { + var v0, v1, vTmp [4]int32 + var k int32 + var rand [32]byte + var n [8]byte + + n[7] = nonce + + stream, err := chacha20.New(seed[:], n[:]) + if err != nil { + panic(err) + } + stream.KeyStream(rand[:]) + stream.Reset() + defer memwipe(rand[:]) + + for i := uint(0); i < 256; i++ { + rBit := int32((rand[i>>3] >> (i & 7)) & 1) + + vTmp[0], vTmp[1], vTmp[2], vTmp[3] = int32(v.coeffs[i]), int32(v.coeffs[256+i]), int32(v.coeffs[512+i]), int32(v.coeffs[768+i]) + + // newhope-20151209 - New version of the reconciliation. + k = f(&v0[0], &v1[0], 8*vTmp[0]+4*rBit) + k += f(&v0[1], &v1[1], 8*vTmp[1]+4*rBit) + k += f(&v0[2], &v1[2], 8*vTmp[2]+4*rBit) + k += f(&v0[3], &v1[3], 8*vTmp[3]+4*rBit) + + k = (2*paramQ - 1 - k) >> 31 + + vTmp[0] = ((^k) & v0[0]) ^ (k & v1[0]) + vTmp[1] = ((^k) & v0[1]) ^ (k & v1[1]) + vTmp[2] = ((^k) & v0[2]) ^ (k & v1[2]) + vTmp[3] = ((^k) & v0[3]) ^ (k & v1[3]) + + c.coeffs[0+i] = uint16((vTmp[0] - vTmp[3]) & 3) + c.coeffs[256+i] = uint16((vTmp[1] - vTmp[3]) & 3) + c.coeffs[512+i] = uint16((vTmp[2] - vTmp[3]) & 3) + c.coeffs[768+i] = uint16((-k + 2*vTmp[3]) & 3) + } + + for i := range vTmp { + vTmp[i] = 0 + } +} + +func rec(key *[32]byte, v, c *poly) { + var tmp, vTmp, cTmp [4]int32 + for i := range key { + key[i] = 0 + } + + for i := uint(0); i < 256; i++ { + vTmp[0], vTmp[1], vTmp[2], vTmp[3] = int32(v.coeffs[i]), int32(v.coeffs[256+i]), int32(v.coeffs[512+i]), int32(v.coeffs[768+i]) + cTmp[0], cTmp[1], cTmp[2], cTmp[3] = int32(c.coeffs[i]), int32(c.coeffs[256+i]), int32(c.coeffs[512+i]), int32(c.coeffs[768+i]) + tmp[0] = 16*paramQ + 8*vTmp[0] - paramQ*(2*cTmp[0]+cTmp[3]) + tmp[1] = 16*paramQ + 8*vTmp[1] - paramQ*(2*cTmp[1]+cTmp[3]) + tmp[2] = 16*paramQ + 8*vTmp[2] - paramQ*(2*cTmp[2]+cTmp[3]) + tmp[3] = 16*paramQ + 8*vTmp[3] - paramQ*(cTmp[3]) + + key[i>>3] |= byte(llDecode(tmp[0], tmp[1], tmp[2], tmp[3]) << (i & 7)) + } + + for i := 0; i < 4; i++ { + tmp[i] = 0 + vTmp[i] = 0 + cTmp[i] = 0 + } +} diff --git a/vendor/blitter.com/go/newhope/newhope.go b/vendor/blitter.com/go/newhope/newhope.go new file mode 100644 index 0000000..380d943 --- /dev/null +++ b/vendor/blitter.com/go/newhope/newhope.go @@ -0,0 +1,220 @@ +// newhope.go - NewHope interface. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to newhope, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +// Package newhope implements a key exchange based on the Ring Learning with +// Errors Problem. It is a mechanical port of the Public Domain implementation +// by Erdem Alkim, Léo Ducas, Thomas Pöppelmann, and Peter Schwabe. +// +// For more information see: +// https://cryptojedi.org/papers/newhope-20161119.pdf +// https://cryptojedi.org/papers/newhopesimple-20161217.pdf +// +package newhope + +import ( + "io" + + "golang.org/x/crypto/sha3" +) + +const ( + // SharedSecretSize is the length of a Shared Secret in bytes. + SharedSecretSize = 32 + + // UpstreamVersion is the version of the upstream package this + // implementation is compatible with. + UpstreamVersion = "20160815" + + // RecBytes is the length of the reconciliation data in bytes. + RecBytes = 256 + + // SendASize is the length of Alice's public key in bytes. + SendASize = PolyBytes + SeedBytes + + // SendBSize is the length of Bob's public key in bytes. + SendBSize = PolyBytes + RecBytes +) + +// TorSampling enables the constant time generation of the `a` parameter, +// where every successful `a` generation will take the same amount of time. +// Most users will probably not want to enable this as it does come with a +// performance penalty. Alice and Bob *MUST* agree on the sampling method, +// or the key exchange will fail. +var TorSampling = false + +func encodeA(r []byte, pk *poly, seed *[SeedBytes]byte) { + pk.toBytes(r) + for i := 0; i < SeedBytes; i++ { + r[PolyBytes+i] = seed[i] + } +} + +func decodeA(pk *poly, seed *[SeedBytes]byte, r []byte) { + pk.fromBytes(r) + for i := range seed { + seed[i] = r[PolyBytes+i] + } +} + +func encodeB(r []byte, b *poly, c *poly) { + b.toBytes(r) + for i := 0; i < paramN/4; i++ { + r[PolyBytes+i] = byte(c.coeffs[4*i]) | byte(c.coeffs[4*i+1]<<2) | byte(c.coeffs[4*i+2]<<4) | byte(c.coeffs[4*i+3]<<6) + } +} + +func decodeB(b *poly, c *poly, r []byte) { + b.fromBytes(r) + for i := 0; i < paramN/4; i++ { + c.coeffs[4*i+0] = uint16(r[PolyBytes+i]) & 0x03 + c.coeffs[4*i+1] = uint16(r[PolyBytes+i]>>2) & 0x03 + c.coeffs[4*i+2] = uint16(r[PolyBytes+i]>>4) & 0x03 + c.coeffs[4*i+3] = uint16(r[PolyBytes+i] >> 6) + } +} + +func memwipe(b []byte) { + for i := range b { + b[i] = 0 + } +} + +// PublicKeyAlice is Alice's NewHope public key. +type PublicKeyAlice struct { + Send [SendASize]byte +} + +// PrivateKeyAlice is Alice's NewHope private key. +type PrivateKeyAlice struct { + sk poly +} + +// Reset clears all sensitive information such that it no longer appears in +// memory. +func (k *PrivateKeyAlice) Reset() { + k.sk.reset() +} + +// GenerateKeyPairAlice returns a private/public key pair. The private key is +// generated using the given reader, which must return random data. The +// receiver side of the key exchange (aka "Bob") MUST use KeyExchangeBob() +// instead of this routine. +func GenerateKeyPairAlice(rand io.Reader) (*PrivateKeyAlice, *PublicKeyAlice, error) { + var a, e, pk, r poly + var seed, noiseSeed [SeedBytes]byte + + // seed <- Sample({0, 1}^256) + if _, err := io.ReadFull(rand, seed[:]); err != nil { + return nil, nil, err + } + seed = sha3.Sum256(seed[:]) // Don't send output of system RNG. + // a <- Parse(SHAKE-128(seed)) + a.uniform(&seed, TorSampling) + + // s, e <- Sample(psi(n, 12)) + if _, err := io.ReadFull(rand, noiseSeed[:]); err != nil { + return nil, nil, err + } + defer memwipe(noiseSeed[:]) + privKey := new(PrivateKeyAlice) + privKey.sk.getNoise(&noiseSeed, 0) + privKey.sk.ntt() + e.getNoise(&noiseSeed, 1) + e.ntt() + + // b <- as + e + pubKey := new(PublicKeyAlice) + r.pointwise(&privKey.sk, &a) + pk.add(&e, &r) + encodeA(pubKey.Send[:], &pk, &seed) + + return privKey, pubKey, nil +} + +// PublicKeyBob is Bob's NewHope public key. +type PublicKeyBob struct { + Send [SendBSize]byte +} + +// KeyExchangeBob is the Responder side of the NewHope key exchange. The +// shared secret and "public key" (key + reconciliation data) are generated +// using the given reader, which must return random data. +func KeyExchangeBob(rand io.Reader, alicePk *PublicKeyAlice) (*PublicKeyBob, []byte, error) { + var pka, a, sp, ep, u, v, epp, r poly + var seed, noiseSeed [SeedBytes]byte + + if _, err := io.ReadFull(rand, noiseSeed[:]); err != nil { + return nil, nil, err + } + defer memwipe(noiseSeed[:]) + + // a <- Parse(SHAKE-128(seed)) + decodeA(&pka, &seed, alicePk.Send[:]) + a.uniform(&seed, TorSampling) + + // s', e', e'' <- Sample(psi(n, 12)) + sp.getNoise(&noiseSeed, 0) + sp.ntt() + ep.getNoise(&noiseSeed, 1) + ep.ntt() + epp.getNoise(&noiseSeed, 2) + + // u <- as' + e' + u.pointwise(&a, &sp) + u.add(&u, &ep) + + // v <- bs' + e'' + v.pointwise(&pka, &sp) + v.invNtt() + v.add(&v, &epp) + + // r <- Sample(HelpRec(v)) + r.helpRec(&v, &noiseSeed, 3) + + pubKey := new(PublicKeyBob) + encodeB(pubKey.Send[:], &u, &r) + + // nu <- Rec(v, r) + var nu [SharedSecretSize]byte + rec(&nu, &v, &r) + + // mu <- SHA3-256(nu) + mu := sha3.Sum256(nu[:]) + + // Scrub the sensitive stuff... + memwipe(nu[:]) + sp.reset() + v.reset() + + return pubKey, mu[:], nil +} + +// KeyExchangeAlice is the Initiaitor side of the NewHope key exchange. The +// provided private key is obliterated prior to returning. +func KeyExchangeAlice(bobPk *PublicKeyBob, aliceSk *PrivateKeyAlice) ([]byte, error) { + var u, r, vp poly + + decodeB(&u, &r, bobPk.Send[:]) + + // v' <- us + vp.pointwise(&aliceSk.sk, &u) + vp.invNtt() + + // nu <- Rec(v', r) + var nu [SharedSecretSize]byte + rec(&nu, &vp, &r) + + // mu <- Sha3-256(nu) + mu := sha3.Sum256(nu[:]) + + // Scrub the sensitive stuff... + memwipe(nu[:]) + vp.reset() + aliceSk.Reset() + + return mu[:], nil +} diff --git a/vendor/blitter.com/go/newhope/newhope_simple.go b/vendor/blitter.com/go/newhope/newhope_simple.go new file mode 100644 index 0000000..4c4774b --- /dev/null +++ b/vendor/blitter.com/go/newhope/newhope_simple.go @@ -0,0 +1,166 @@ +// newhope_simple.go - NewHope-Simple interface. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to newhope, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +package newhope + +import ( + "io" + + "golang.org/x/crypto/sha3" +) + +const ( + // HighBytes is the length of the encoded secret in bytes. + HighBytes = 384 + + // SendASimpleSize is the length of Alice's NewHope-Simple public key in + // bytes. + SendASimpleSize = PolyBytes + SeedBytes + + // SendBSimpleSize is the length of Bob's NewHope-Simple public key in + // bytes. + SendBSimpleSize = PolyBytes + HighBytes +) + +func encodeBSimple(r []byte, b *poly, v *poly) { + b.toBytes(r) + v.compress(r[PolyBytes:]) +} + +func decodeBSimple(b *poly, v *poly, r []byte) { + b.fromBytes(r) + v.decompress(r[PolyBytes:]) +} + +// PublicKeySimpleAlice is Alice's NewHope-Simple public key. +type PublicKeySimpleAlice struct { + Send [SendASimpleSize]byte +} + +// PrivateKeySimpleAlice is Alice's NewHope-Simple private key. +type PrivateKeySimpleAlice struct { + sk poly +} + +// Reset clears all sensitive information such that it no longer appears in +// memory. +func (k *PrivateKeySimpleAlice) Reset() { + k.sk.reset() +} + +// GenerateKeyPairSimpleAlice returns a NewHope-Simple private/public key pair. +// The private key is generated using the given reader, which must return +// random data. The receiver side of the key exchange (aka "Bob") MUST use +// KeyExchangeSimpleBob() instead of this routine. +func GenerateKeyPairSimpleAlice(rand io.Reader) (*PrivateKeySimpleAlice, *PublicKeySimpleAlice, error) { + var a, e, pk, r poly + var seed, noiseSeed [SeedBytes]byte + + if _, err := io.ReadFull(rand, seed[:]); err != nil { + return nil, nil, err + } + seed = sha3.Sum256(seed[:]) // Don't send output of system RNG. + a.uniform(&seed, TorSampling) + + if _, err := io.ReadFull(rand, noiseSeed[:]); err != nil { + return nil, nil, err + } + defer memwipe(noiseSeed[:]) + + privKey := new(PrivateKeySimpleAlice) + privKey.sk.getNoise(&noiseSeed, 0) + privKey.sk.ntt() + e.getNoise(&noiseSeed, 1) + e.ntt() + + pubKey := new(PublicKeySimpleAlice) + r.pointwise(&privKey.sk, &a) + pk.add(&e, &r) + encodeA(pubKey.Send[:], &pk, &seed) + + return privKey, pubKey, nil +} + +// PublicKeySimpleBob is Bob's NewHope-Simple public key. +type PublicKeySimpleBob struct { + Send [SendBSimpleSize]byte +} + +// KeyExchangeSimpleBob is the Responder side of the NewHope-Simple key +// exchange. The shared secret and "public key" are generated using the +// given reader, which must return random data. +func KeyExchangeSimpleBob(rand io.Reader, alicePk *PublicKeySimpleAlice) (*PublicKeySimpleBob, []byte, error) { + var pka, a, sp, ep, bp, v, epp, m poly + var seed, noiseSeed [SeedBytes]byte + + if _, err := io.ReadFull(rand, noiseSeed[:]); err != nil { + return nil, nil, err + } + defer memwipe(noiseSeed[:]) + + var sharedKey [SharedSecretSize]byte + if _, err := io.ReadFull(rand, sharedKey[:]); err != nil { + return nil, nil, err + } + defer memwipe(sharedKey[:]) + sharedKey = sha3.Sum256(sharedKey[:]) + m.fromMsg(sharedKey[:]) + + decodeA(&pka, &seed, alicePk.Send[:]) + a.uniform(&seed, TorSampling) + + sp.getNoise(&noiseSeed, 0) + sp.ntt() + ep.getNoise(&noiseSeed, 1) + ep.ntt() + + bp.pointwise(&a, &sp) + bp.add(&bp, &ep) + + v.pointwise(&pka, &sp) + v.invNtt() + + epp.getNoise(&noiseSeed, 2) + v.add(&v, &epp) + v.add(&v, &m) // add key + + pubKey := new(PublicKeySimpleBob) + encodeBSimple(pubKey.Send[:], &bp, &v) + mu := sha3.Sum256(sharedKey[:]) + + // Scrub the sensitive stuff... + sp.reset() + v.reset() + m.reset() + + return pubKey, mu[:], nil +} + +// KeyExchangeSimpleAlice is the Initiaitor side of the NewHope-Simple key +// exchange. The provided private key is obliterated prior to returning. +func KeyExchangeSimpleAlice(bobPk *PublicKeySimpleBob, aliceSk *PrivateKeySimpleAlice) ([]byte, error) { + var v, bp, k poly + + decodeBSimple(&bp, &v, bobPk.Send[:]) + k.pointwise(&aliceSk.sk, &bp) + k.invNtt() + + k.sub(&k, &v) + + var sharedKey [SharedSecretSize]byte + k.toMsg(sharedKey[:]) + + // mu <- Sha3-256(v') + mu := sha3.Sum256(sharedKey[:]) + + // Scrub the sensitive stuff... + memwipe(sharedKey[:]) + k.reset() + aliceSk.Reset() + + return mu[:], nil +} diff --git a/vendor/blitter.com/go/newhope/ntt.go b/vendor/blitter.com/go/newhope/ntt.go new file mode 100644 index 0000000..58d1f2a --- /dev/null +++ b/vendor/blitter.com/go/newhope/ntt.go @@ -0,0 +1,131 @@ +// ntt.go - NewHope Number Theoretic Transform. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to newhope, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +package newhope + +var bitrevTable = [paramN]uint16{ + 0, 512, 256, 768, 128, 640, 384, 896, 64, 576, 320, 832, 192, 704, 448, 960, + 32, 544, 288, 800, 160, 672, 416, 928, 96, 608, 352, 864, 224, 736, 480, + 992, 16, 528, 272, 784, 144, 656, 400, 912, 80, 592, 336, 848, 208, 720, + 464, 976, 48, 560, 304, 816, 176, 688, 432, 944, 112, 624, 368, 880, + 240, 752, 496, 1008, 8, 520, 264, 776, 136, 648, 392, 904, 72, 584, 328, + 840, 200, 712, 456, 968, 40, 552, 296, 808, 168, 680, 424, 936, 104, + 616, 360, 872, 232, 744, 488, 1000, 24, 536, 280, 792, 152, 664, 408, + 920, 88, 600, 344, 856, 216, 728, 472, 984, 56, 568, 312, 824, 184, 696, + 440, 952, 120, 632, 376, 888, 248, 760, 504, 1016, 4, 516, 260, 772, + 132, 644, 388, 900, 68, 580, 324, 836, 196, 708, 452, 964, 36, 548, 292, + 804, 164, 676, 420, 932, 100, 612, 356, 868, 228, 740, 484, 996, 20, + 532, 276, 788, 148, 660, 404, 916, 84, 596, 340, 852, 212, 724, 468, + 980, 52, 564, 308, 820, 180, 692, 436, 948, 116, 628, 372, 884, 244, + 756, 500, 1012, 12, 524, 268, 780, 140, 652, 396, 908, 76, 588, 332, + 844, 204, 716, 460, 972, 44, 556, 300, 812, 172, 684, 428, 940, 108, + 620, 364, 876, 236, 748, 492, 1004, 28, 540, 284, 796, 156, 668, 412, + 924, 92, 604, 348, 860, 220, 732, 476, 988, 60, 572, 316, 828, 188, 700, + 444, 956, 124, 636, 380, 892, 252, 764, 508, 1020, 2, 514, 258, 770, + 130, 642, 386, 898, 66, 578, 322, 834, 194, 706, 450, 962, 34, 546, 290, + 802, 162, 674, 418, 930, 98, 610, 354, 866, 226, 738, 482, 994, 18, 530, + 274, 786, 146, 658, 402, 914, 82, 594, 338, 850, 210, 722, 466, 978, 50, + 562, 306, 818, 178, 690, 434, 946, 114, 626, 370, 882, 242, 754, 498, + 1010, 10, 522, 266, 778, 138, 650, 394, 906, 74, 586, 330, 842, 202, + 714, 458, 970, 42, 554, 298, 810, 170, 682, 426, 938, 106, 618, 362, + 874, 234, 746, 490, 1002, 26, 538, 282, 794, 154, 666, 410, 922, 90, + 602, 346, 858, 218, 730, 474, 986, 58, 570, 314, 826, 186, 698, 442, + 954, 122, 634, 378, 890, 250, 762, 506, 1018, 6, 518, 262, 774, 134, + 646, 390, 902, 70, 582, 326, 838, 198, 710, 454, 966, 38, 550, 294, 806, + 166, 678, 422, 934, 102, 614, 358, 870, 230, 742, 486, 998, 22, 534, + 278, 790, 150, 662, 406, 918, 86, 598, 342, 854, 214, 726, 470, 982, 54, + 566, 310, 822, 182, 694, 438, 950, 118, 630, 374, 886, 246, 758, 502, + 1014, 14, 526, 270, 782, 142, 654, 398, 910, 78, 590, 334, 846, 206, + 718, 462, 974, 46, 558, 302, 814, 174, 686, 430, 942, 110, 622, 366, + 878, 238, 750, 494, 1006, 30, 542, 286, 798, 158, 670, 414, 926, 94, + 606, 350, 862, 222, 734, 478, 990, 62, 574, 318, 830, 190, 702, 446, + 958, 126, 638, 382, 894, 254, 766, 510, 1022, 1, 513, 257, 769, 129, + 641, 385, 897, 65, 577, 321, 833, 193, 705, 449, 961, 33, 545, 289, 801, + 161, 673, 417, 929, 97, 609, 353, 865, 225, 737, 481, 993, 17, 529, 273, + 785, 145, 657, 401, 913, 81, 593, 337, 849, 209, 721, 465, 977, 49, 561, + 305, 817, 177, 689, 433, 945, 113, 625, 369, 881, 241, 753, 497, 1009, + 9, 521, 265, 777, 137, 649, 393, 905, 73, 585, 329, 841, 201, 713, 457, + 969, 41, 553, 297, 809, 169, 681, 425, 937, 105, 617, 361, 873, 233, + 745, 489, 1001, 25, 537, 281, 793, 153, 665, 409, 921, 89, 601, 345, + 857, 217, 729, 473, 985, 57, 569, 313, 825, 185, 697, 441, 953, 121, + 633, 377, 889, 249, 761, 505, 1017, 5, 517, 261, 773, 133, 645, 389, + 901, 69, 581, 325, 837, 197, 709, 453, 965, 37, 549, 293, 805, 165, 677, + 421, 933, 101, 613, 357, 869, 229, 741, 485, 997, 21, 533, 277, 789, + 149, 661, 405, 917, 85, 597, 341, 853, 213, 725, 469, 981, 53, 565, 309, + 821, 181, 693, 437, 949, 117, 629, 373, 885, 245, 757, 501, 1013, 13, + 525, 269, 781, 141, 653, 397, 909, 77, 589, 333, 845, 205, 717, 461, + 973, 45, 557, 301, 813, 173, 685, 429, 941, 109, 621, 365, 877, 237, + 749, 493, 1005, 29, 541, 285, 797, 157, 669, 413, 925, 93, 605, 349, + 861, 221, 733, 477, 989, 61, 573, 317, 829, 189, 701, 445, 957, 125, + 637, 381, 893, 253, 765, 509, 1021, 3, 515, 259, 771, 131, 643, 387, + 899, 67, 579, 323, 835, 195, 707, 451, 963, 35, 547, 291, 803, 163, 675, + 419, 931, 99, 611, 355, 867, 227, 739, 483, 995, 19, 531, 275, 787, 147, + 659, 403, 915, 83, 595, 339, 851, 211, 723, 467, 979, 51, 563, 307, 819, + 179, 691, 435, 947, 115, 627, 371, 883, 243, 755, 499, 1011, 11, 523, + 267, 779, 139, 651, 395, 907, 75, 587, 331, 843, 203, 715, 459, 971, 43, + 555, 299, 811, 171, 683, 427, 939, 107, 619, 363, 875, 235, 747, 491, + 1003, 27, 539, 283, 795, 155, 667, 411, 923, 91, 603, 347, 859, 219, + 731, 475, 987, 59, 571, 315, 827, 187, 699, 443, 955, 123, 635, 379, + 891, 251, 763, 507, 1019, 7, 519, 263, 775, 135, 647, 391, 903, 71, 583, + 327, 839, 199, 711, 455, 967, 39, 551, 295, 807, 167, 679, 423, 935, + 103, 615, 359, 871, 231, 743, 487, 999, 23, 535, 279, 791, 151, 663, + 407, 919, 87, 599, 343, 855, 215, 727, 471, 983, 55, 567, 311, 823, 183, + 695, 439, 951, 119, 631, 375, 887, 247, 759, 503, 1015, 15, 527, 271, + 783, 143, 655, 399, 911, 79, 591, 335, 847, 207, 719, 463, 975, 47, 559, + 303, 815, 175, 687, 431, 943, 111, 623, 367, 879, 239, 751, 495, 1007, + 31, 543, 287, 799, 159, 671, 415, 927, 95, 607, 351, 863, 223, 735, 479, + 991, 63, 575, 319, 831, 191, 703, 447, 959, 127, 639, 383, 895, 255, + 767, 511, 1023, +} + +func (p *poly) bitrev() { + for i, v := range p.coeffs { + r := bitrevTable[i] + if uint16(i) < r { + p.coeffs[i] = p.coeffs[r] + p.coeffs[r] = v + } + } +} + +func (p *poly) mulCoefficients(factors *[paramN]uint16) { + for i, v := range factors { + p.coeffs[i] = montgomeryReduce(uint32(p.coeffs[i]) * uint32(v)) + } +} + +func ntt(a *[paramN]uint16, omega *[paramN / 2]uint16) { + var distance uint + + for i := uint(0); i < 10; i += 2 { + // Even level. + distance = (1 << i) + for start := uint(0); start < distance; start++ { + jTwiddle := 0 + for j := start; j < paramN-1; j += 2 * distance { + w := uint32(omega[jTwiddle]) + jTwiddle++ + tmp := a[j] + a[j] = tmp + a[j+distance] + a[j+distance] = montgomeryReduce(w * (uint32(tmp) + 3*paramQ - uint32(a[j+distance]))) + } + } + + // Odd level. + distance <<= 1 + for start := uint(0); start < distance; start++ { + jTwiddle := 0 + for j := start; j < paramN-1; j += 2 * distance { + w := uint32(omega[jTwiddle]) + jTwiddle++ + tmp := a[j] + a[j] = barrettReduce(tmp + a[j+distance]) + a[j+distance] = montgomeryReduce(w * (uint32(tmp) + 3*paramQ - uint32(a[j+distance]))) + } + } + } +} diff --git a/vendor/blitter.com/go/newhope/params.go b/vendor/blitter.com/go/newhope/params.go new file mode 100644 index 0000000..572236b --- /dev/null +++ b/vendor/blitter.com/go/newhope/params.go @@ -0,0 +1,17 @@ +// params.go - NewHope parameters. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to newhope, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +package newhope + +const ( + paramN = 1024 + paramK = 16 // used in sampler + paramQ = 12289 + + // SeedBytes is the size of the seed in bytes. + SeedBytes = 32 +) diff --git a/vendor/blitter.com/go/newhope/poly.go b/vendor/blitter.com/go/newhope/poly.go new file mode 100644 index 0000000..860126e --- /dev/null +++ b/vendor/blitter.com/go/newhope/poly.go @@ -0,0 +1,212 @@ +// poly.go - NewHope polynomial. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to newhope, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +package newhope + +import ( + "encoding/binary" + + "blitter.com/go/chacha20" + "golang.org/x/crypto/sha3" +) + +const ( + // PolyBytes is the length of an encoded polynomial in bytes. + PolyBytes = 1792 + + shake128Rate = 168 // Stupid that this isn't exposed. +) + +type poly struct { + coeffs [paramN]uint16 +} + +func (p *poly) reset() { + for i := range p.coeffs { + p.coeffs[i] = 0 + } +} + +func (p *poly) fromBytes(a []byte) { + for i := 0; i < paramN/4; i++ { + p.coeffs[4*i+0] = uint16(a[7*i+0]) | ((uint16(a[7*i+1]) & 0x3f) << 8) + p.coeffs[4*i+1] = (uint16(a[7*i+1]) >> 6) | (uint16(a[7*i+2]) << 2) | ((uint16(a[7*i+3]) & 0x0f) << 10) + + p.coeffs[4*i+2] = (uint16(a[7*i+3]) >> 4) | (uint16(a[7*i+4]) << 4) | ((uint16(a[7*i+5]) & 0x03) << 12) + p.coeffs[4*i+3] = (uint16(a[7*i+5]) >> 2) | (uint16(a[7*i+6]) << 6) + } +} + +func (p *poly) toBytes(r []byte) { + for i := 0; i < paramN/4; i++ { + // Make sure that coefficients have only 14 bits. + t0 := barrettReduce(p.coeffs[4*i+0]) + t1 := barrettReduce(p.coeffs[4*i+1]) + t2 := barrettReduce(p.coeffs[4*i+2]) + t3 := barrettReduce(p.coeffs[4*i+3]) + + // Make sure that coefficients are in [0,q] + m := t0 - paramQ + c := int16(m) + c >>= 15 + t0 = m ^ ((t0 ^ m) & uint16(c)) + + m = t1 - paramQ + c = int16(m) + c >>= 15 + t1 = m ^ ((t1 ^ m) & uint16(c)) + + m = t2 - paramQ + c = int16(m) + c >>= 15 + t2 = m ^ ((t2 ^ m) & uint16(c)) + + m = t3 - paramQ + c = int16(m) + c >>= 15 + t3 = m ^ ((t3 ^ m) & uint16(c)) + + r[7*i+0] = byte(t0 & 0xff) + r[7*i+1] = byte(t0>>8) | byte(t1<<6) + r[7*i+2] = byte(t1 >> 2) + r[7*i+3] = byte(t1>>10) | byte(t2<<4) + r[7*i+4] = byte(t2 >> 4) + r[7*i+5] = byte(t2>>12) | byte(t3<<2) + r[7*i+6] = byte(t3 >> 6) + } +} + +func (p *poly) discardTo(xbuf []byte) bool { + var x [shake128Rate * 16 / 2]uint16 + for i := range x { + x[i] = binary.LittleEndian.Uint16(xbuf[i*2:]) + } + + for i := 0; i < 16; i++ { + batcher84(x[i:]) + } + + // Check whether we're safe: + r := int(0) + for i := 1000; i < 1024; i++ { + r |= 61444 - int(x[i]) + } + if r>>31 != 0 { + return true + } + + // If we are, copy coefficients to polynomial: + for i := range p.coeffs { + p.coeffs[i] = x[i] + } + + return false +} + +func (p *poly) uniform(seed *[SeedBytes]byte, torSampling bool) { + if !torSampling { + // Reference version, vartime. + nBlocks := 14 + var buf [shake128Rate * 14]byte + + // h and buf are left unscrubbed because the output is public. + h := sha3.NewShake128() + _, _ = h.Write(seed[:]) + _, _ = h.Read(buf[:]) + + for ctr, pos := 0, 0; ctr < paramN; { + val := binary.LittleEndian.Uint16(buf[pos:]) + + if val < 5*paramQ { + p.coeffs[ctr] = val + ctr++ + } + pos += 2 + if pos > shake128Rate*nBlocks-2 { + nBlocks = 1 + _, _ = h.Read(buf[:shake128Rate]) + pos = 0 + } + } + } else { + // `torref` version, every valid `a` is generate in constant time, + // though the number of attempts varies. + const nBlocks = 16 + var buf [shake128Rate * nBlocks]byte + + // h and buf are left unscrubbed because the output is public. + h := sha3.NewShake128() + _, _ = h.Write(seed[:]) + + for { + _, _ = h.Read(buf[:]) + if !p.discardTo(buf[:]) { + break + } + } + + } +} + +func (p *poly) getNoise(seed *[SeedBytes]byte, nonce byte) { + // The `ref` code uses a uint32 vector instead of a byte vector, + // but converting between the two in Go is cumbersome. + var buf [4 * paramN]byte + var n [8]byte + + n[0] = nonce + stream, err := chacha20.New(seed[:], n[:]) + if err != nil { + panic(err) + } + stream.KeyStream(buf[:]) + stream.Reset() + + for i := 0; i < paramN; i++ { + t := binary.LittleEndian.Uint32(buf[4*i:]) + d := uint32(0) + for j := uint(0); j < 8; j++ { + d += (t >> j) & 0x01010101 + } + a := ((d >> 8) & 0xff) + (d & 0xff) + b := (d >> 24) + ((d >> 16) & 0xff) + p.coeffs[i] = uint16(a) + paramQ - uint16(b) + } + + // Scrub the random bits... + memwipe(buf[:]) +} + +func (p *poly) pointwise(a, b *poly) { + for i := range p.coeffs { + t := montgomeryReduce(3186 * uint32(b.coeffs[i])) // t is now in Montgomery domain + p.coeffs[i] = montgomeryReduce(uint32(a.coeffs[i]) * uint32(t)) // p.coeffs[i] is back in normal domain + } +} + +func (p *poly) add(a, b *poly) { + for i := range p.coeffs { + p.coeffs[i] = barrettReduce(a.coeffs[i] + b.coeffs[i]) + } +} + +func (p *poly) ntt() { + p.mulCoefficients(&psisBitrevMontgomery) + ntt(&p.coeffs, &omegasMontgomery) +} + +func (p *poly) invNtt() { + p.bitrev() + ntt(&p.coeffs, &omegasInvMontgomery) + p.mulCoefficients(&psisInvMontgomery) +} + +func init() { + if paramK != 16 { + panic("poly.getNoise() only supports k=16") + } +} diff --git a/vendor/blitter.com/go/newhope/poly_simple.go b/vendor/blitter.com/go/newhope/poly_simple.go new file mode 100644 index 0000000..59ebec1 --- /dev/null +++ b/vendor/blitter.com/go/newhope/poly_simple.go @@ -0,0 +1,99 @@ +// poly_simple.go - NewHope-Simple polynomial. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to newhope, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +package newhope + +func coeffFreeze(x uint16) uint16 { + var c int16 + + r := barrettReduce(x) + m := r - paramQ + c = int16(m) + c >>= 15 + r = m ^ ((r ^ m) & uint16(c)) + + return r +} + +// Computes abs(x-Q/2) +func flipAbs(x uint16) uint16 { + r := int16(coeffFreeze(x)) + r = r - paramQ/2 + m := r >> 15 + return uint16((r + m) ^ m) +} + +func (p *poly) compress(r []byte) { + var t [8]uint32 + + for i, k := 0, 0; i < paramN; i, k = i+8, k+3 { + for j := range t { + t[j] = uint32(coeffFreeze(p.coeffs[i+j])) + t[j] = (((t[j] << 3) + paramQ/2) / paramQ) & 0x7 + } + + r[k] = byte(t[0]) | byte(t[1]<<3) | byte(t[2]<<6) + r[k+1] = byte(t[2]>>2) | byte(t[3]<<1) | byte(t[4]<<4) | byte(t[5]<<7) + r[k+2] = byte(t[5]>>1) | byte(t[6]<<2) | byte(t[7]<<5) + } + + for i := range t { + t[i] = 0 + } +} + +func (p *poly) decompress(a []byte) { + for i := 0; i < paramN; i += 8 { + a0, a1, a2 := uint16(a[0]), uint16(a[1]), uint16(a[2]) + p.coeffs[i+0] = a0 & 7 + p.coeffs[i+1] = (a0 >> 3) & 7 + p.coeffs[i+2] = (a0 >> 6) | ((a1 << 2) & 4) + p.coeffs[i+3] = (a1 >> 1) & 7 + p.coeffs[i+4] = (a1 >> 4) & 7 + p.coeffs[i+5] = (a1 >> 7) | ((a2 << 1) & 6) + p.coeffs[i+6] = (a2 >> 2) & 7 + p.coeffs[i+7] = (a2 >> 5) + a = a[3:] + for j := 0; j < 8; j++ { + p.coeffs[i+j] = uint16((uint32(p.coeffs[i+j])*paramQ + 4) >> 3) + } + } +} + +func (p *poly) fromMsg(msg []byte) { + for i := uint(0); i < 32; i++ { // XXX: const for 32 + for j := uint(0); j < 8; j++ { + mask := -(uint16((msg[i] >> j) & 1)) + p.coeffs[8*i+j+0] = mask & (paramQ / 2) + p.coeffs[8*i+j+256] = mask & (paramQ / 2) + p.coeffs[8*i+j+512] = mask & (paramQ / 2) + p.coeffs[8*i+j+768] = mask & (paramQ / 2) + } + } +} + +func (p *poly) toMsg(msg []byte) { + memwipe(msg[0:32]) + + for i := uint(0); i < 256; i++ { + t := flipAbs(p.coeffs[i+0]) + t += flipAbs(p.coeffs[i+256]) + t += flipAbs(p.coeffs[i+512]) + t += flipAbs(p.coeffs[i+768]) + + //t = (~(t - PARAM_Q)); + t = (t - paramQ) + t >>= 15 + msg[i>>3] |= byte(t << (i & 7)) + } +} + +func (p *poly) sub(a, b *poly) { + for i := range p.coeffs { + p.coeffs[i] = barrettReduce(a.coeffs[i] + 3*paramQ - b.coeffs[i]) + } +} diff --git a/vendor/blitter.com/go/newhope/precomp.go b/vendor/blitter.com/go/newhope/precomp.go new file mode 100644 index 0000000..4d61c81 --- /dev/null +++ b/vendor/blitter.com/go/newhope/precomp.go @@ -0,0 +1,287 @@ +// precomp.go - NewHope precomputed tables. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to newhope, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +package newhope + +var omegasMontgomery = [paramN / 2]uint16{ + 4075, 6974, 7373, 7965, 3262, 5079, 522, 2169, 6364, 1018, 1041, 8775, 2344, + 11011, 5574, 1973, 4536, 1050, 6844, 3860, 3818, 6118, 2683, 1190, 4789, + 7822, 7540, 6752, 5456, 4449, 3789, 12142, 11973, 382, 3988, 468, 6843, + 5339, 6196, 3710, 11316, 1254, 5435, 10930, 3998, 10256, 10367, 3879, + 11889, 1728, 6137, 4948, 5862, 6136, 3643, 6874, 8724, 654, 10302, 1702, + 7083, 6760, 56, 3199, 9987, 605, 11785, 8076, 5594, 9260, 6403, 4782, + 6212, 4624, 9026, 8689, 4080, 11868, 6221, 3602, 975, 8077, 8851, 9445, + 5681, 3477, 1105, 142, 241, 12231, 1003, 3532, 5009, 1956, 6008, 11404, + 7377, 2049, 10968, 12097, 7591, 5057, 3445, 4780, 2920, 7048, 3127, + 8120, 11279, 6821, 11502, 8807, 12138, 2127, 2839, 3957, 431, 1579, + 6383, 9784, 5874, 677, 3336, 6234, 2766, 1323, 9115, 12237, 2031, 6956, + 6413, 2281, 3969, 3991, 12133, 9522, 4737, 10996, 4774, 5429, 11871, + 3772, 453, 5908, 2882, 1805, 2051, 1954, 11713, 3963, 2447, 6142, 8174, + 3030, 1843, 2361, 12071, 2908, 3529, 3434, 3202, 7796, 2057, 5369, + 11939, 1512, 6906, 10474, 11026, 49, 10806, 5915, 1489, 9789, 5942, + 10706, 10431, 7535, 426, 8974, 3757, 10314, 9364, 347, 5868, 9551, 9634, + 6554, 10596, 9280, 11566, 174, 2948, 2503, 6507, 10723, 11606, 2459, 64, + 3656, 8455, 5257, 5919, 7856, 1747, 9166, 5486, 9235, 6065, 835, 3570, + 4240, 11580, 4046, 10970, 9139, 1058, 8210, 11848, 922, 7967, 1958, + 10211, 1112, 3728, 4049, 11130, 5990, 1404, 325, 948, 11143, 6190, 295, + 11637, 5766, 8212, 8273, 2919, 8527, 6119, 6992, 8333, 1360, 2555, 6167, + 1200, 7105, 7991, 3329, 9597, 12121, 5106, 5961, 10695, 10327, 3051, + 9923, 4896, 9326, 81, 3091, 1000, 7969, 4611, 726, 1853, 12149, 4255, + 11112, 2768, 10654, 1062, 2294, 3553, 4805, 2747, 4846, 8577, 9154, + 1170, 2319, 790, 11334, 9275, 9088, 1326, 5086, 9094, 6429, 11077, + 10643, 3504, 3542, 8668, 9744, 1479, 1, 8246, 7143, 11567, 10984, 4134, + 5736, 4978, 10938, 5777, 8961, 4591, 5728, 6461, 5023, 9650, 7468, 949, + 9664, 2975, 11726, 2744, 9283, 10092, 5067, 12171, 2476, 3748, 11336, + 6522, 827, 9452, 5374, 12159, 7935, 3296, 3949, 9893, 4452, 10908, 2525, + 3584, 8112, 8011, 10616, 4989, 6958, 11809, 9447, 12280, 1022, 11950, + 9821, 11745, 5791, 5092, 2089, 9005, 2881, 3289, 2013, 9048, 729, 7901, + 1260, 5755, 4632, 11955, 2426, 10593, 1428, 4890, 5911, 3932, 9558, + 8830, 3637, 5542, 145, 5179, 8595, 3707, 10530, 355, 3382, 4231, 9741, + 1207, 9041, 7012, 1168, 10146, 11224, 4645, 11885, 10911, 10377, 435, + 7952, 4096, 493, 9908, 6845, 6039, 2422, 2187, 9723, 8643, 9852, 9302, + 6022, 7278, 1002, 4284, 5088, 1607, 7313, 875, 8509, 9430, 1045, 2481, + 5012, 7428, 354, 6591, 9377, 11847, 2401, 1067, 7188, 11516, 390, 8511, + 8456, 7270, 545, 8585, 9611, 12047, 1537, 4143, 4714, 4885, 1017, 5084, + 1632, 3066, 27, 1440, 8526, 9273, 12046, 11618, 9289, 3400, 9890, 3136, + 7098, 8758, 11813, 7384, 3985, 11869, 6730, 10745, 10111, 2249, 4048, + 2884, 11136, 2126, 1630, 9103, 5407, 2686, 9042, 2969, 8311, 9424, 9919, + 8779, 5332, 10626, 1777, 4654, 10863, 7351, 3636, 9585, 5291, 8374, + 2166, 4919, 12176, 9140, 12129, 7852, 12286, 4895, 10805, 2780, 5195, + 2305, 7247, 9644, 4053, 10600, 3364, 3271, 4057, 4414, 9442, 7917, 2174, +} + +var omegasInvMontgomery = [paramN / 2]uint16{ + 4075, 5315, 4324, 4916, 10120, 11767, 7210, 9027, 10316, 6715, 1278, 9945, + 3514, 11248, 11271, 5925, 147, 8500, 7840, 6833, 5537, 4749, 4467, 7500, + 11099, 9606, 6171, 8471, 8429, 5445, 11239, 7753, 9090, 12233, 5529, + 5206, 10587, 1987, 11635, 3565, 5415, 8646, 6153, 6427, 7341, 6152, + 10561, 400, 8410, 1922, 2033, 8291, 1359, 6854, 11035, 973, 8579, 6093, + 6950, 5446, 11821, 8301, 11907, 316, 52, 3174, 10966, 9523, 6055, 8953, + 11612, 6415, 2505, 5906, 10710, 11858, 8332, 9450, 10162, 151, 3482, + 787, 5468, 1010, 4169, 9162, 5241, 9369, 7509, 8844, 7232, 4698, 192, + 1321, 10240, 4912, 885, 6281, 10333, 7280, 8757, 11286, 58, 12048, + 12147, 11184, 8812, 6608, 2844, 3438, 4212, 11314, 8687, 6068, 421, + 8209, 3600, 3263, 7665, 6077, 7507, 5886, 3029, 6695, 4213, 504, 11684, + 2302, 1962, 1594, 6328, 7183, 168, 2692, 8960, 4298, 5184, 11089, 6122, + 9734, 10929, 3956, 5297, 6170, 3762, 9370, 4016, 4077, 6523, 652, 11994, + 6099, 1146, 11341, 11964, 10885, 6299, 1159, 8240, 8561, 11177, 2078, + 10331, 4322, 11367, 441, 4079, 11231, 3150, 1319, 8243, 709, 8049, 8719, + 11454, 6224, 3054, 6803, 3123, 10542, 4433, 6370, 7032, 3834, 8633, + 12225, 9830, 683, 1566, 5782, 9786, 9341, 12115, 723, 3009, 1693, 5735, + 2655, 2738, 6421, 11942, 2925, 1975, 8532, 3315, 11863, 4754, 1858, + 1583, 6347, 2500, 10800, 6374, 1483, 12240, 1263, 1815, 5383, 10777, + 350, 6920, 10232, 4493, 9087, 8855, 8760, 9381, 218, 9928, 10446, 9259, + 4115, 6147, 9842, 8326, 576, 10335, 10238, 10484, 9407, 6381, 11836, + 8517, 418, 6860, 7515, 1293, 7552, 2767, 156, 8298, 8320, 10008, 5876, + 5333, 10258, 10115, 4372, 2847, 7875, 8232, 9018, 8925, 1689, 8236, + 2645, 5042, 9984, 7094, 9509, 1484, 7394, 3, 4437, 160, 3149, 113, 7370, + 10123, 3915, 6998, 2704, 8653, 4938, 1426, 7635, 10512, 1663, 6957, + 3510, 2370, 2865, 3978, 9320, 3247, 9603, 6882, 3186, 10659, 10163, + 1153, 9405, 8241, 10040, 2178, 1544, 5559, 420, 8304, 4905, 476, 3531, + 5191, 9153, 2399, 8889, 3000, 671, 243, 3016, 3763, 10849, 12262, 9223, + 10657, 7205, 11272, 7404, 7575, 8146, 10752, 242, 2678, 3704, 11744, + 5019, 3833, 3778, 11899, 773, 5101, 11222, 9888, 442, 2912, 5698, 11935, + 4861, 7277, 9808, 11244, 2859, 3780, 11414, 4976, 10682, 7201, 8005, + 11287, 5011, 6267, 2987, 2437, 3646, 2566, 10102, 9867, 6250, 5444, + 2381, 11796, 8193, 4337, 11854, 1912, 1378, 404, 7644, 1065, 2143, + 11121, 5277, 3248, 11082, 2548, 8058, 8907, 11934, 1759, 8582, 3694, + 7110, 12144, 6747, 8652, 3459, 2731, 8357, 6378, 7399, 10861, 1696, + 9863, 334, 7657, 6534, 11029, 4388, 11560, 3241, 10276, 9000, 9408, + 3284, 10200, 7197, 6498, 544, 2468, 339, 11267, 9, 2842, 480, 5331, + 7300, 1673, 4278, 4177, 8705, 9764, 1381, 7837, 2396, 8340, 8993, 4354, + 130, 6915, 2837, 11462, 5767, 953, 8541, 9813, 118, 7222, 2197, 3006, + 9545, 563, 9314, 2625, 11340, 4821, 2639, 7266, 5828, 6561, 7698, 3328, + 6512, 1351, 7311, 6553, 8155, 1305, 722, 5146, 4043, 12288, 10810, 2545, + 3621, 8747, 8785, 1646, 1212, 5860, 3195, 7203, 10963, 3201, 3014, 955, + 11499, 9970, 11119, 3135, 3712, 7443, 9542, 7484, 8736, 9995, 11227, + 1635, 9521, 1177, 8034, 140, 10436, 11563, 7678, 4320, 11289, 9198, + 12208, 2963, 7393, 2366, 9238, +} + +var psisBitrevMontgomery = [paramN]uint16{ + 4075, 6974, 7373, 7965, 3262, 5079, 522, 2169, 6364, 1018, 1041, 8775, 2344, + 11011, 5574, 1973, 4536, 1050, 6844, 3860, 3818, 6118, 2683, 1190, 4789, + 7822, 7540, 6752, 5456, 4449, 3789, 12142, 11973, 382, 3988, 468, 6843, + 5339, 6196, 3710, 11316, 1254, 5435, 10930, 3998, 10256, 10367, 3879, + 11889, 1728, 6137, 4948, 5862, 6136, 3643, 6874, 8724, 654, 10302, 1702, + 7083, 6760, 56, 3199, 9987, 605, 11785, 8076, 5594, 9260, 6403, 4782, + 6212, 4624, 9026, 8689, 4080, 11868, 6221, 3602, 975, 8077, 8851, 9445, + 5681, 3477, 1105, 142, 241, 12231, 1003, 3532, 5009, 1956, 6008, 11404, + 7377, 2049, 10968, 12097, 7591, 5057, 3445, 4780, 2920, 7048, 3127, + 8120, 11279, 6821, 11502, 8807, 12138, 2127, 2839, 3957, 431, 1579, + 6383, 9784, 5874, 677, 3336, 6234, 2766, 1323, 9115, 12237, 2031, 6956, + 6413, 2281, 3969, 3991, 12133, 9522, 4737, 10996, 4774, 5429, 11871, + 3772, 453, 5908, 2882, 1805, 2051, 1954, 11713, 3963, 2447, 6142, 8174, + 3030, 1843, 2361, 12071, 2908, 3529, 3434, 3202, 7796, 2057, 5369, + 11939, 1512, 6906, 10474, 11026, 49, 10806, 5915, 1489, 9789, 5942, + 10706, 10431, 7535, 426, 8974, 3757, 10314, 9364, 347, 5868, 9551, 9634, + 6554, 10596, 9280, 11566, 174, 2948, 2503, 6507, 10723, 11606, 2459, 64, + 3656, 8455, 5257, 5919, 7856, 1747, 9166, 5486, 9235, 6065, 835, 3570, + 4240, 11580, 4046, 10970, 9139, 1058, 8210, 11848, 922, 7967, 1958, + 10211, 1112, 3728, 4049, 11130, 5990, 1404, 325, 948, 11143, 6190, 295, + 11637, 5766, 8212, 8273, 2919, 8527, 6119, 6992, 8333, 1360, 2555, 6167, + 1200, 7105, 7991, 3329, 9597, 12121, 5106, 5961, 10695, 10327, 3051, + 9923, 4896, 9326, 81, 3091, 1000, 7969, 4611, 726, 1853, 12149, 4255, + 11112, 2768, 10654, 1062, 2294, 3553, 4805, 2747, 4846, 8577, 9154, + 1170, 2319, 790, 11334, 9275, 9088, 1326, 5086, 9094, 6429, 11077, + 10643, 3504, 3542, 8668, 9744, 1479, 1, 8246, 7143, 11567, 10984, 4134, + 5736, 4978, 10938, 5777, 8961, 4591, 5728, 6461, 5023, 9650, 7468, 949, + 9664, 2975, 11726, 2744, 9283, 10092, 5067, 12171, 2476, 3748, 11336, + 6522, 827, 9452, 5374, 12159, 7935, 3296, 3949, 9893, 4452, 10908, 2525, + 3584, 8112, 8011, 10616, 4989, 6958, 11809, 9447, 12280, 1022, 11950, + 9821, 11745, 5791, 5092, 2089, 9005, 2881, 3289, 2013, 9048, 729, 7901, + 1260, 5755, 4632, 11955, 2426, 10593, 1428, 4890, 5911, 3932, 9558, + 8830, 3637, 5542, 145, 5179, 8595, 3707, 10530, 355, 3382, 4231, 9741, + 1207, 9041, 7012, 1168, 10146, 11224, 4645, 11885, 10911, 10377, 435, + 7952, 4096, 493, 9908, 6845, 6039, 2422, 2187, 9723, 8643, 9852, 9302, + 6022, 7278, 1002, 4284, 5088, 1607, 7313, 875, 8509, 9430, 1045, 2481, + 5012, 7428, 354, 6591, 9377, 11847, 2401, 1067, 7188, 11516, 390, 8511, + 8456, 7270, 545, 8585, 9611, 12047, 1537, 4143, 4714, 4885, 1017, 5084, + 1632, 3066, 27, 1440, 8526, 9273, 12046, 11618, 9289, 3400, 9890, 3136, + 7098, 8758, 11813, 7384, 3985, 11869, 6730, 10745, 10111, 2249, 4048, + 2884, 11136, 2126, 1630, 9103, 5407, 2686, 9042, 2969, 8311, 9424, 9919, + 8779, 5332, 10626, 1777, 4654, 10863, 7351, 3636, 9585, 5291, 8374, + 2166, 4919, 12176, 9140, 12129, 7852, 12286, 4895, 10805, 2780, 5195, + 2305, 7247, 9644, 4053, 10600, 3364, 3271, 4057, 4414, 9442, 7917, 2174, + 3947, 11951, 2455, 6599, 10545, 10975, 3654, 2894, 7681, 7126, 7287, + 12269, 4119, 3343, 2151, 1522, 7174, 7350, 11041, 2442, 2148, 5959, + 6492, 8330, 8945, 5598, 3624, 10397, 1325, 6565, 1945, 11260, 10077, + 2674, 3338, 3276, 11034, 506, 6505, 1392, 5478, 8778, 1178, 2776, 3408, + 10347, 11124, 2575, 9489, 12096, 6092, 10058, 4167, 6085, 923, 11251, + 11912, 4578, 10669, 11914, 425, 10453, 392, 10104, 8464, 4235, 8761, + 7376, 2291, 3375, 7954, 8896, 6617, 7790, 1737, 11667, 3982, 9342, 6680, + 636, 6825, 7383, 512, 4670, 2900, 12050, 7735, 994, 1687, 11883, 7021, + 146, 10485, 1403, 5189, 6094, 2483, 2054, 3042, 10945, 3981, 10821, + 11826, 8882, 8151, 180, 9600, 7684, 5219, 10880, 6780, 204, 11232, 2600, + 7584, 3121, 3017, 11053, 7814, 7043, 4251, 4739, 11063, 6771, 7073, + 9261, 2360, 11925, 1928, 11825, 8024, 3678, 3205, 3359, 11197, 5209, + 8581, 3238, 8840, 1136, 9363, 1826, 3171, 4489, 7885, 346, 2068, 1389, + 8257, 3163, 4840, 6127, 8062, 8921, 612, 4238, 10763, 8067, 125, 11749, + 10125, 5416, 2110, 716, 9839, 10584, 11475, 11873, 3448, 343, 1908, + 4538, 10423, 7078, 4727, 1208, 11572, 3589, 2982, 1373, 1721, 10753, + 4103, 2429, 4209, 5412, 5993, 9011, 438, 3515, 7228, 1218, 8347, 5232, + 8682, 1327, 7508, 4924, 448, 1014, 10029, 12221, 4566, 5836, 12229, + 2717, 1535, 3200, 5588, 5845, 412, 5102, 7326, 3744, 3056, 2528, 7406, + 8314, 9202, 6454, 6613, 1417, 10032, 7784, 1518, 3765, 4176, 5063, 9828, + 2275, 6636, 4267, 6463, 2065, 7725, 3495, 8328, 8755, 8144, 10533, 5966, + 12077, 9175, 9520, 5596, 6302, 8400, 579, 6781, 11014, 5734, 11113, + 11164, 4860, 1131, 10844, 9068, 8016, 9694, 3837, 567, 9348, 7000, 6627, + 7699, 5082, 682, 11309, 5207, 4050, 7087, 844, 7434, 3769, 293, 9057, + 6940, 9344, 10883, 2633, 8190, 3944, 5530, 5604, 3480, 2171, 9282, + 11024, 2213, 8136, 3805, 767, 12239, 216, 11520, 6763, 10353, 7, 8566, + 845, 7235, 3154, 4360, 3285, 10268, 2832, 3572, 1282, 7559, 3229, 8360, + 10583, 6105, 3120, 6643, 6203, 8536, 8348, 6919, 3536, 9199, 10891, + 11463, 5043, 1658, 5618, 8787, 5789, 4719, 751, 11379, 6389, 10783, + 3065, 7806, 6586, 2622, 5386, 510, 7628, 6921, 578, 10345, 11839, 8929, + 4684, 12226, 7154, 9916, 7302, 8481, 3670, 11066, 2334, 1590, 7878, + 10734, 1802, 1891, 5103, 6151, 8820, 3418, 7846, 9951, 4693, 417, 9996, + 9652, 4510, 2946, 5461, 365, 881, 1927, 1015, 11675, 11009, 1371, 12265, + 2485, 11385, 5039, 6742, 8449, 1842, 12217, 8176, 9577, 4834, 7937, + 9461, 2643, 11194, 3045, 6508, 4094, 3451, 7911, 11048, 5406, 4665, + 3020, 6616, 11345, 7519, 3669, 5287, 1790, 7014, 5410, 11038, 11249, + 2035, 6125, 10407, 4565, 7315, 5078, 10506, 2840, 2478, 9270, 4194, + 9195, 4518, 7469, 1160, 6878, 2730, 10421, 10036, 1734, 3815, 10939, + 5832, 10595, 10759, 4423, 8420, 9617, 7119, 11010, 11424, 9173, 189, + 10080, 10526, 3466, 10588, 7592, 3578, 11511, 7785, 9663, 530, 12150, + 8957, 2532, 3317, 9349, 10243, 1481, 9332, 3454, 3758, 7899, 4218, 2593, + 11410, 2276, 982, 6513, 1849, 8494, 9021, 4523, 7988, 8, 457, 648, 150, + 8000, 2307, 2301, 874, 5650, 170, 9462, 2873, 9855, 11498, 2535, 11169, + 5808, 12268, 9687, 1901, 7171, 11787, 3846, 1573, 6063, 3793, 466, + 11259, 10608, 3821, 6320, 4649, 6263, 2929, +} + +var psisInvMontgomery = [paramN]uint16{ + 256, 10570, 1510, 7238, 1034, 7170, 6291, 7921, 11665, 3422, 4000, 2327, + 2088, 5565, 795, 10647, 1521, 5484, 2539, 7385, 1055, 7173, 8047, 11683, + 1669, 1994, 3796, 5809, 4341, 9398, 11876, 12230, 10525, 12037, 12253, + 3506, 4012, 9351, 4847, 2448, 7372, 9831, 3160, 2207, 5582, 2553, 7387, + 6322, 9681, 1383, 10731, 1533, 219, 5298, 4268, 7632, 6357, 9686, 8406, + 4712, 9451, 10128, 4958, 5975, 11387, 8649, 11769, 6948, 11526, 12180, + 1740, 10782, 6807, 2728, 7412, 4570, 4164, 4106, 11120, 12122, 8754, + 11784, 3439, 5758, 11356, 6889, 9762, 11928, 1704, 1999, 10819, 12079, + 12259, 7018, 11536, 1648, 1991, 2040, 2047, 2048, 10826, 12080, 8748, + 8272, 8204, 1172, 1923, 7297, 2798, 7422, 6327, 4415, 7653, 6360, 11442, + 12168, 7005, 8023, 9924, 8440, 8228, 2931, 7441, 1063, 3663, 5790, 9605, + 10150, 1450, 8985, 11817, 10466, 10273, 12001, 3470, 7518, 1074, 1909, + 7295, 9820, 4914, 702, 5367, 7789, 8135, 9940, 1420, 3714, 11064, 12114, + 12264, 1752, 5517, 9566, 11900, 1700, 3754, 5803, 829, 1874, 7290, 2797, + 10933, 5073, 7747, 8129, 6428, 6185, 11417, 1631, 233, 5300, 9535, + 10140, 11982, 8734, 8270, 2937, 10953, 8587, 8249, 2934, 9197, 4825, + 5956, 4362, 9401, 1343, 3703, 529, 10609, 12049, 6988, 6265, 895, 3639, + 4031, 4087, 4095, 585, 10617, 8539, 4731, 4187, 9376, 3095, 9220, 10095, + 10220, 1460, 10742, 12068, 1724, 5513, 11321, 6884, 2739, 5658, 6075, + 4379, 11159, 10372, 8504, 4726, 9453, 3106, 7466, 11600, 10435, 8513, + 9994, 8450, 9985, 3182, 10988, 8592, 2983, 9204, 4826, 2445, 5616, 6069, + 867, 3635, 5786, 11360, 5134, 2489, 10889, 12089, 1727, 7269, 2794, + 9177, 1311, 5454, 9557, 6632, 2703, 9164, 10087, 1441, 3717, 531, 3587, + 2268, 324, 5313, 759, 1864, 5533, 2546, 7386, 9833, 8427, 4715, 11207, + 1601, 7251, 4547, 11183, 12131, 1733, 10781, 10318, 1474, 10744, 5046, + 4232, 11138, 10369, 6748, 964, 7160, 4534, 7670, 8118, 8182, 4680, + 11202, 6867, 981, 8918, 1274, 182, 26, 7026, 8026, 11680, 12202, 10521, + 1503, 7237, 4545, 5916, 9623, 8397, 11733, 10454, 3249, 9242, 6587, 941, + 1890, 270, 10572, 6777, 9746, 6659, 6218, 6155, 6146, 878, 1881, 7291, + 11575, 12187, 1741, 7271, 8061, 11685, 6936, 4502, 9421, 4857, 4205, + 7623, 1089, 10689, 1527, 8996, 10063, 11971, 10488, 6765, 2722, 3900, + 9335, 11867, 6962, 11528, 5158, 4248, 4118, 5855, 2592, 5637, 6072, + 2623, 7397, 8079, 9932, 4930, 5971, 853, 3633, 519, 8852, 11798, 3441, + 11025, 1575, 225, 8810, 11792, 12218, 3501, 9278, 3081, 9218, 4828, + 7712, 8124, 11694, 12204, 3499, 4011, 573, 3593, 5780, 7848, 9899, + 10192, 1456, 208, 7052, 2763, 7417, 11593, 10434, 12024, 8740, 11782, + 10461, 3250, 5731, 7841, 9898, 1414, 202, 3540, 7528, 2831, 2160, 10842, + 5060, 4234, 4116, 588, 84, 12, 7024, 2759, 9172, 6577, 11473, 1639, + 9012, 3043, 7457, 6332, 11438, 1634, 1989, 9062, 11828, 8712, 11778, + 12216, 10523, 6770, 9745, 10170, 4964, 9487, 6622, 946, 8913, 6540, + 6201, 4397, 9406, 8366, 9973, 8447, 8229, 11709, 8695, 10020, 3187, + 5722, 2573, 10901, 6824, 4486, 4152, 9371, 8361, 2950, 2177, 311, 1800, + 9035, 8313, 11721, 3430, 490, 70, 10, 1757, 251, 3547, 7529, 11609, + 3414, 7510, 4584, 4166, 9373, 1339, 5458, 7802, 11648, 1664, 7260, 9815, + 10180, 6721, 9738, 10169, 8475, 8233, 9954, 1422, 8981, 1283, 5450, + 11312, 1616, 3742, 11068, 10359, 4991, 713, 3613, 9294, 8350, 4704, 672, + 96, 7036, 9783, 11931, 3460, 5761, 823, 10651, 12055, 10500, 1500, 5481, + 783, 3623, 11051, 8601, 8251, 8201, 11705, 10450, 5004, 4226, 7626, + 2845, 2162, 3820, 7568, 9859, 3164, 452, 10598, 1514, 5483, 6050, 6131, + 4387, 7649, 8115, 6426, 918, 8909, 8295, 1185, 5436, 11310, 8638, 1234, + 5443, 11311, 5127, 2488, 2111, 10835, 5059, 7745, 2862, 3920, 560, 80, + 1767, 2008, 3798, 11076, 6849, 2734, 10924, 12094, 8750, 1250, 10712, + 6797, 971, 7161, 1023, 8924, 4786, 7706, 4612, 4170, 7618, 6355, 4419, + 5898, 11376, 10403, 10264, 6733, 4473, 639, 5358, 2521, 9138, 3061, + 5704, 4326, 618, 5355, 765, 5376, 768, 7132, 4530, 9425, 3102, 9221, + 6584, 11474, 10417, 10266, 12000, 6981, 6264, 4406, 2385, 7363, 4563, + 4163, 7617, 9866, 3165, 9230, 11852, 10471, 5007, 5982, 11388, 5138, + 734, 3616, 11050, 12112, 6997, 11533, 12181, 10518, 12036, 3475, 2252, + 7344, 9827, 4915, 9480, 6621, 4457, 7659, 9872, 6677, 4465, 4149, 7615, + 4599, 657, 3605, 515, 10607, 6782, 4480, 640, 1847, 3775, 5806, 2585, + 5636, 9583, 1369, 10729, 8555, 10000, 11962, 5220, 7768, 8132, 8184, + 9947, 1421, 203, 29, 8782, 11788, 1684, 10774, 10317, 4985, 9490, 8378, + 4708, 11206, 5112, 5997, 7879, 11659, 12199, 8765, 10030, 4944, 5973, + 6120, 6141, 6144, 7900, 11662, 1666, 238, 34, 3516, 5769, 9602, 8394, + 9977, 6692, 956, 10670, 6791, 9748, 11926, 8726, 11780, 5194, 742, 106, + 8793, 10034, 3189, 10989, 5081, 4237, 5872, 4350, 2377, 10873, 6820, + 6241, 11425, 10410, 10265, 3222, 5727, 9596, 4882, 2453, 2106, 3812, + 11078, 12116, 5242, 4260, 11142, 8614, 11764, 12214, 5256, 4262, 4120, + 11122, 5100, 11262, 5120, 2487, 5622, 9581, 8391, 8221, 2930, 10952, + 12098, 6995, 6266, 9673, 4893, 699, 3611, 4027, 5842, 11368, 1624, 232, + 8811, 8281, 1183, 169, 8802, 3013, 2186, 5579, 797, 3625, 4029, 11109, + 1587, 7249, 11569, 8675, 6506, 2685, 10917, 12093, 12261, 12285, 1755, + 7273, 1039, 1904, 272, 3550, 9285, 3082, 5707, 6082, 4380, 7648, 11626, + 5172, 4250, 9385, 8363, 8217, 4685, 5936, 848, 8899, 6538, 934, 1889, + 3781, 9318, 10109, 10222, 6727, 961, 5404, 772, 5377, 9546, 8386, 1198, + 8949, 3034, 2189, 7335, 4559, 5918, 2601, 10905, 5069, 9502, 3113, 7467, + 8089, 11689, 5181, 9518, 8382, 2953, 3933, 4073, 4093, 7607, 8109, 2914, + 5683, 4323, 11151, 1593, 10761, 6804, 972, 3650, 2277, 5592, 4310, 7638, + 9869, 4921, 703, 1856, 9043, 4803, 9464, 1352, 8971, 11815, 5199, 7765, + 6376, 4422, 7654, 2849, 407, 8836, 6529, 7955, 2892, 9191, 1313, 10721, + 12065, 12257, 1751, 9028, 8312, 2943, 2176, 3822, 546, 78, 8789, 11789, + 10462, 12028, 6985, 4509, 9422, 1346, 5459, 4291, 613, 10621, 6784, + 9747, 3148, 7472, 2823, 5670, 810, 7138, 8042, 4660, 7688, 6365, 6176, + 6149, 2634, 5643, 9584, 10147, 11983, 5223, 9524, 11894, 10477, 8519, + 1217, 3685, 2282, 326, 10580, 3267, 7489, 4581, 2410, 5611, 11335, 6886, + 8006, 8166, 11700, 3427, 11023, 8597, 10006, 3185, 455, 65, 5276, 7776, + 4622, 5927, 7869, 9902, 11948, 5218, 2501, 5624, 2559, 10899, 1557, + 1978, 10816, 10323, 8497, 4725, 675, 1852, 10798, 12076, 10503, 3256, + 9243, 3076, 2195, 10847, 12083, 10504, 12034, 10497, +} diff --git a/vendor/blitter.com/go/newhope/reduce.go b/vendor/blitter.com/go/newhope/reduce.go new file mode 100644 index 0000000..26df25a --- /dev/null +++ b/vendor/blitter.com/go/newhope/reduce.go @@ -0,0 +1,32 @@ +// poly.go - NewHope reductions. +// +// To the extent possible under law, Yawning Angel has waived all copyright +// and related or neighboring rights to newhope, using the Creative +// Commons "CC0" public domain dedication. See LICENSE or +// for full details. + +package newhope + +// Incomplete-reduction routines; for details on allowed input ranges +// and produced output ranges, see the description in the paper: +// https://cryptojedi.org/papers/#newhope + +const ( + qinv = 12287 // -inverse_mod(p,2^18) + rlog = 18 +) + +func montgomeryReduce(a uint32) uint16 { + u := a * qinv + u &= ((1 << rlog) - 1) + u *= paramQ + a = (a + u) >> 18 + return uint16(a) +} + +func barrettReduce(a uint16) uint16 { + u := (uint32(a) * 5) >> 16 + u *= paramQ + a -= uint16(u) + return a +} diff --git a/vendor/github.com/aead/chacha20/LICENSE b/vendor/github.com/aead/chacha20/LICENSE new file mode 100644 index 0000000..b6a9210 --- /dev/null +++ b/vendor/github.com/aead/chacha20/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Andreas Auernhammer + +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/aead/chacha20/chacha/chacha.go b/vendor/github.com/aead/chacha20/chacha/chacha.go new file mode 100644 index 0000000..c2b39da --- /dev/null +++ b/vendor/github.com/aead/chacha20/chacha/chacha.go @@ -0,0 +1,197 @@ +// Copyright (c) 2016 Andreas Auernhammer. All rights reserved. +// Use of this source code is governed by a license that can be +// found in the LICENSE file. + +// Package chacha implements some low-level functions of the +// ChaCha cipher family. +package chacha // import "github.com/aead/chacha20/chacha" + +import ( + "encoding/binary" + "errors" + "math" +) + +const ( + // NonceSize is the size of the ChaCha20 nonce in bytes. + NonceSize = 8 + + // INonceSize is the size of the IETF-ChaCha20 nonce in bytes. + INonceSize = 12 + + // XNonceSize is the size of the XChaCha20 nonce in bytes. + XNonceSize = 24 + + // KeySize is the size of the key in bytes. + KeySize = 32 +) + +var ( + useSSE2 bool + useSSSE3 bool + useAVX bool + useAVX2 bool +) + +var ( + errKeySize = errors.New("chacha20/chacha: bad key length") + errInvalidNonce = errors.New("chacha20/chacha: bad nonce length") +) + +func setup(state *[64]byte, nonce, key []byte) (err error) { + if len(key) != KeySize { + err = errKeySize + return + } + var Nonce [16]byte + switch len(nonce) { + case NonceSize: + copy(Nonce[8:], nonce) + initialize(state, key, &Nonce) + case INonceSize: + copy(Nonce[4:], nonce) + initialize(state, key, &Nonce) + case XNonceSize: + var tmpKey [32]byte + var hNonce [16]byte + + copy(hNonce[:], nonce[:16]) + copy(tmpKey[:], key) + HChaCha20(&tmpKey, &hNonce, &tmpKey) + copy(Nonce[8:], nonce[16:]) + initialize(state, tmpKey[:], &Nonce) + + // BUG(aead): A "good" compiler will remove this (optimizations) + // But using the provided key instead of tmpKey, + // will change the key (-> probably confuses users) + for i := range tmpKey { + tmpKey[i] = 0 + } + default: + err = errInvalidNonce + } + return +} + +// XORKeyStream crypts bytes from src to dst using the given nonce and key. +// The length of the nonce determinds the version of ChaCha20: +// - NonceSize: ChaCha20/r with a 64 bit nonce and a 2^64 * 64 byte period. +// - INonceSize: ChaCha20/r as defined in RFC 7539 and a 2^32 * 64 byte period. +// - XNonceSize: XChaCha20/r with a 192 bit nonce and a 2^64 * 64 byte period. +// The rounds argument specifies the number of rounds performed for keystream +// generation - valid values are 8, 12 or 20. The src and dst may be the same slice +// but otherwise should not overlap. If len(dst) < len(src) this function panics. +// If the nonce is neither 64, 96 nor 192 bits long, this function panics. +func XORKeyStream(dst, src, nonce, key []byte, rounds int) { + if rounds != 20 && rounds != 12 && rounds != 8 { + panic("chacha20/chacha: bad number of rounds") + } + if len(dst) < len(src) { + panic("chacha20/chacha: dst buffer is to small") + } + if len(nonce) == INonceSize && uint64(len(src)) > (1<<38) { + panic("chacha20/chacha: src is too large") + } + + var block, state [64]byte + if err := setup(&state, nonce, key); err != nil { + panic(err) + } + xorKeyStream(dst, src, &block, &state, rounds) +} + +// Cipher implements ChaCha20/r (XChaCha20/r) for a given number of rounds r. +type Cipher struct { + state, block [64]byte + off int + rounds int // 20 for ChaCha20 + noncesize int +} + +// NewCipher returns a new *chacha.Cipher implementing the ChaCha20/r or XChaCha20/r +// (r = 8, 12 or 20) stream cipher. The nonce must be unique for one key for all time. +// The length of the nonce determinds the version of ChaCha20: +// - NonceSize: ChaCha20/r with a 64 bit nonce and a 2^64 * 64 byte period. +// - INonceSize: ChaCha20/r as defined in RFC 7539 and a 2^32 * 64 byte period. +// - XNonceSize: XChaCha20/r with a 192 bit nonce and a 2^64 * 64 byte period. +// If the nonce is neither 64, 96 nor 192 bits long, a non-nil error is returned. +func NewCipher(nonce, key []byte, rounds int) (*Cipher, error) { + if rounds != 20 && rounds != 12 && rounds != 8 { + panic("chacha20/chacha: bad number of rounds") + } + + c := new(Cipher) + if err := setup(&(c.state), nonce, key); err != nil { + return nil, err + } + c.rounds = rounds + + if len(nonce) == INonceSize { + c.noncesize = INonceSize + } else { + c.noncesize = NonceSize + } + + return c, nil +} + +// XORKeyStream crypts bytes from src to dst. Src and dst may be the same slice +// but otherwise should not overlap. If len(dst) < len(src) the function panics. +func (c *Cipher) XORKeyStream(dst, src []byte) { + if len(dst) < len(src) { + panic("chacha20/chacha: dst buffer is to small") + } + + if c.off > 0 { + n := len(c.block[c.off:]) + if len(src) <= n { + for i, v := range src { + dst[i] = v ^ c.block[c.off] + c.off++ + } + if c.off == 64 { + c.off = 0 + } + return + } + + for i, v := range c.block[c.off:] { + dst[i] = src[i] ^ v + } + src = src[n:] + dst = dst[n:] + c.off = 0 + } + + // check for counter overflow + blocksToXOR := len(src) / 64 + if len(src)%64 != 0 { + blocksToXOR++ + } + var overflow bool + if c.noncesize == INonceSize { + overflow = binary.LittleEndian.Uint32(c.state[48:]) > math.MaxUint32-uint32(blocksToXOR) + } else { + overflow = binary.LittleEndian.Uint64(c.state[48:]) > math.MaxUint64-uint64(blocksToXOR) + } + if overflow { + panic("chacha20/chacha: counter overflow") + } + + c.off += xorKeyStream(dst, src, &(c.block), &(c.state), c.rounds) +} + +// SetCounter skips ctr * 64 byte blocks. SetCounter(0) resets the cipher. +// This function always skips the unused keystream of the current 64 byte block. +func (c *Cipher) SetCounter(ctr uint64) { + if c.noncesize == INonceSize { + binary.LittleEndian.PutUint32(c.state[48:], uint32(ctr)) + } else { + binary.LittleEndian.PutUint64(c.state[48:], ctr) + } + c.off = 0 +} + +// HChaCha20 generates 32 pseudo-random bytes from a 128 bit nonce and a 256 bit secret key. +// It can be used as a key-derivation-function (KDF). +func HChaCha20(out *[32]byte, nonce *[16]byte, key *[32]byte) { hChaCha20(out, nonce, key) } diff --git a/vendor/github.com/aead/chacha20/chacha/chachaAVX2_amd64.s b/vendor/github.com/aead/chacha20/chacha/chachaAVX2_amd64.s new file mode 100644 index 0000000..c2b5f52 --- /dev/null +++ b/vendor/github.com/aead/chacha20/chacha/chachaAVX2_amd64.s @@ -0,0 +1,406 @@ +// Copyright (c) 2016 Andreas Auernhammer. All rights reserved. +// Use of this source code is governed by a license that can be +// found in the LICENSE file. + +// +build amd64,!gccgo,!appengine,!nacl + +#include "const.s" +#include "macro.s" + +#define TWO 0(SP) +#define C16 32(SP) +#define C8 64(SP) +#define STATE_0 96(SP) +#define STATE_1 128(SP) +#define STATE_2 160(SP) +#define STATE_3 192(SP) +#define TMP_0 224(SP) +#define TMP_1 256(SP) + +// func xorKeyStreamAVX(dst, src []byte, block, state *[64]byte, rounds int) int +TEXT ·xorKeyStreamAVX2(SB), 4, $320-80 + MOVQ dst_base+0(FP), DI + MOVQ src_base+24(FP), SI + MOVQ block+48(FP), BX + MOVQ state+56(FP), AX + MOVQ rounds+64(FP), DX + MOVQ src_len+32(FP), CX + + MOVQ SP, R8 + ADDQ $32, SP + ANDQ $-32, SP + + VMOVDQU 0(AX), Y2 + VMOVDQU 32(AX), Y3 + VPERM2I128 $0x22, Y2, Y0, Y0 + VPERM2I128 $0x33, Y2, Y1, Y1 + VPERM2I128 $0x22, Y3, Y2, Y2 + VPERM2I128 $0x33, Y3, Y3, Y3 + + TESTQ CX, CX + JZ done + + VMOVDQU ·one_AVX2<>(SB), Y4 + VPADDD Y4, Y3, Y3 + + VMOVDQA Y0, STATE_0 + VMOVDQA Y1, STATE_1 + VMOVDQA Y2, STATE_2 + VMOVDQA Y3, STATE_3 + + VMOVDQU ·rol16_AVX2<>(SB), Y4 + VMOVDQU ·rol8_AVX2<>(SB), Y5 + VMOVDQU ·two_AVX2<>(SB), Y6 + VMOVDQA Y4, Y14 + VMOVDQA Y5, Y15 + VMOVDQA Y4, C16 + VMOVDQA Y5, C8 + VMOVDQA Y6, TWO + + CMPQ CX, $64 + JBE between_0_and_64 + CMPQ CX, $192 + JBE between_64_and_192 + CMPQ CX, $320 + JBE between_192_and_320 + CMPQ CX, $448 + JBE between_320_and_448 + +at_least_512: + VMOVDQA Y0, Y4 + VMOVDQA Y1, Y5 + VMOVDQA Y2, Y6 + VPADDQ TWO, Y3, Y7 + VMOVDQA Y0, Y8 + VMOVDQA Y1, Y9 + VMOVDQA Y2, Y10 + VPADDQ TWO, Y7, Y11 + VMOVDQA Y0, Y12 + VMOVDQA Y1, Y13 + VMOVDQA Y2, Y14 + VPADDQ TWO, Y11, Y15 + + MOVQ DX, R9 + +chacha_loop_512: + VMOVDQA Y8, TMP_0 + CHACHA_QROUND_AVX(Y0, Y1, Y2, Y3, Y8, C16, C8) + CHACHA_QROUND_AVX(Y4, Y5, Y6, Y7, Y8, C16, C8) + VMOVDQA TMP_0, Y8 + VMOVDQA Y0, TMP_0 + CHACHA_QROUND_AVX(Y8, Y9, Y10, Y11, Y0, C16, C8) + CHACHA_QROUND_AVX(Y12, Y13, Y14, Y15, Y0, C16, C8) + CHACHA_SHUFFLE_AVX(Y1, Y2, Y3) + CHACHA_SHUFFLE_AVX(Y5, Y6, Y7) + CHACHA_SHUFFLE_AVX(Y9, Y10, Y11) + CHACHA_SHUFFLE_AVX(Y13, Y14, Y15) + + CHACHA_QROUND_AVX(Y12, Y13, Y14, Y15, Y0, C16, C8) + CHACHA_QROUND_AVX(Y8, Y9, Y10, Y11, Y0, C16, C8) + VMOVDQA TMP_0, Y0 + VMOVDQA Y8, TMP_0 + CHACHA_QROUND_AVX(Y4, Y5, Y6, Y7, Y8, C16, C8) + CHACHA_QROUND_AVX(Y0, Y1, Y2, Y3, Y8, C16, C8) + VMOVDQA TMP_0, Y8 + CHACHA_SHUFFLE_AVX(Y3, Y2, Y1) + CHACHA_SHUFFLE_AVX(Y7, Y6, Y5) + CHACHA_SHUFFLE_AVX(Y11, Y10, Y9) + CHACHA_SHUFFLE_AVX(Y15, Y14, Y13) + SUBQ $2, R9 + JA chacha_loop_512 + + VMOVDQA Y12, TMP_0 + VMOVDQA Y13, TMP_1 + VPADDD STATE_0, Y0, Y0 + VPADDD STATE_1, Y1, Y1 + VPADDD STATE_2, Y2, Y2 + VPADDD STATE_3, Y3, Y3 + XOR_AVX2(DI, SI, 0, Y0, Y1, Y2, Y3, Y12, Y13) + VMOVDQA STATE_0, Y0 + VMOVDQA STATE_1, Y1 + VMOVDQA STATE_2, Y2 + VMOVDQA STATE_3, Y3 + VPADDQ TWO, Y3, Y3 + + VPADDD Y0, Y4, Y4 + VPADDD Y1, Y5, Y5 + VPADDD Y2, Y6, Y6 + VPADDD Y3, Y7, Y7 + XOR_AVX2(DI, SI, 128, Y4, Y5, Y6, Y7, Y12, Y13) + VPADDQ TWO, Y3, Y3 + + VPADDD Y0, Y8, Y8 + VPADDD Y1, Y9, Y9 + VPADDD Y2, Y10, Y10 + VPADDD Y3, Y11, Y11 + XOR_AVX2(DI, SI, 256, Y8, Y9, Y10, Y11, Y12, Y13) + VPADDQ TWO, Y3, Y3 + + VPADDD TMP_0, Y0, Y12 + VPADDD TMP_1, Y1, Y13 + VPADDD Y2, Y14, Y14 + VPADDD Y3, Y15, Y15 + VPADDQ TWO, Y3, Y3 + + CMPQ CX, $512 + JB less_than_512 + + XOR_AVX2(DI, SI, 384, Y12, Y13, Y14, Y15, Y4, Y5) + VMOVDQA Y3, STATE_3 + ADDQ $512, SI + ADDQ $512, DI + SUBQ $512, CX + CMPQ CX, $448 + JA at_least_512 + + TESTQ CX, CX + JZ done + + VMOVDQA C16, Y14 + VMOVDQA C8, Y15 + + CMPQ CX, $64 + JBE between_0_and_64 + CMPQ CX, $192 + JBE between_64_and_192 + CMPQ CX, $320 + JBE between_192_and_320 + JMP between_320_and_448 + +less_than_512: + XOR_UPPER_AVX2(DI, SI, 384, Y12, Y13, Y14, Y15, Y4, Y5) + EXTRACT_LOWER(BX, Y12, Y13, Y14, Y15, Y4) + ADDQ $448, SI + ADDQ $448, DI + SUBQ $448, CX + JMP finalize + +between_320_and_448: + VMOVDQA Y0, Y4 + VMOVDQA Y1, Y5 + VMOVDQA Y2, Y6 + VPADDQ TWO, Y3, Y7 + VMOVDQA Y0, Y8 + VMOVDQA Y1, Y9 + VMOVDQA Y2, Y10 + VPADDQ TWO, Y7, Y11 + + MOVQ DX, R9 + +chacha_loop_384: + CHACHA_QROUND_AVX(Y0, Y1, Y2, Y3, Y13, Y14, Y15) + CHACHA_QROUND_AVX(Y4, Y5, Y6, Y7, Y13, Y14, Y15) + CHACHA_QROUND_AVX(Y8, Y9, Y10, Y11, Y13, Y14, Y15) + CHACHA_SHUFFLE_AVX(Y1, Y2, Y3) + CHACHA_SHUFFLE_AVX(Y5, Y6, Y7) + CHACHA_SHUFFLE_AVX(Y9, Y10, Y11) + CHACHA_QROUND_AVX(Y0, Y1, Y2, Y3, Y13, Y14, Y15) + CHACHA_QROUND_AVX(Y4, Y5, Y6, Y7, Y13, Y14, Y15) + CHACHA_QROUND_AVX(Y8, Y9, Y10, Y11, Y13, Y14, Y15) + CHACHA_SHUFFLE_AVX(Y3, Y2, Y1) + CHACHA_SHUFFLE_AVX(Y7, Y6, Y5) + CHACHA_SHUFFLE_AVX(Y11, Y10, Y9) + SUBQ $2, R9 + JA chacha_loop_384 + + VPADDD STATE_0, Y0, Y0 + VPADDD STATE_1, Y1, Y1 + VPADDD STATE_2, Y2, Y2 + VPADDD STATE_3, Y3, Y3 + XOR_AVX2(DI, SI, 0, Y0, Y1, Y2, Y3, Y12, Y13) + VMOVDQA STATE_0, Y0 + VMOVDQA STATE_1, Y1 + VMOVDQA STATE_2, Y2 + VMOVDQA STATE_3, Y3 + VPADDQ TWO, Y3, Y3 + + VPADDD Y0, Y4, Y4 + VPADDD Y1, Y5, Y5 + VPADDD Y2, Y6, Y6 + VPADDD Y3, Y7, Y7 + XOR_AVX2(DI, SI, 128, Y4, Y5, Y6, Y7, Y12, Y13) + VPADDQ TWO, Y3, Y3 + + VPADDD Y0, Y8, Y8 + VPADDD Y1, Y9, Y9 + VPADDD Y2, Y10, Y10 + VPADDD Y3, Y11, Y11 + VPADDQ TWO, Y3, Y3 + + CMPQ CX, $384 + JB less_than_384 + + XOR_AVX2(DI, SI, 256, Y8, Y9, Y10, Y11, Y12, Y13) + SUBQ $384, CX + TESTQ CX, CX + JE done + + ADDQ $384, SI + ADDQ $384, DI + JMP between_0_and_64 + +less_than_384: + XOR_UPPER_AVX2(DI, SI, 256, Y8, Y9, Y10, Y11, Y12, Y13) + EXTRACT_LOWER(BX, Y8, Y9, Y10, Y11, Y12) + ADDQ $320, SI + ADDQ $320, DI + SUBQ $320, CX + JMP finalize + +between_192_and_320: + VMOVDQA Y0, Y4 + VMOVDQA Y1, Y5 + VMOVDQA Y2, Y6 + VMOVDQA Y3, Y7 + VMOVDQA Y0, Y8 + VMOVDQA Y1, Y9 + VMOVDQA Y2, Y10 + VPADDQ TWO, Y3, Y11 + + MOVQ DX, R9 + +chacha_loop_256: + CHACHA_QROUND_AVX(Y4, Y5, Y6, Y7, Y13, Y14, Y15) + CHACHA_QROUND_AVX(Y8, Y9, Y10, Y11, Y13, Y14, Y15) + CHACHA_SHUFFLE_AVX(Y5, Y6, Y7) + CHACHA_SHUFFLE_AVX(Y9, Y10, Y11) + CHACHA_QROUND_AVX(Y4, Y5, Y6, Y7, Y13, Y14, Y15) + CHACHA_QROUND_AVX(Y8, Y9, Y10, Y11, Y13, Y14, Y15) + CHACHA_SHUFFLE_AVX(Y7, Y6, Y5) + CHACHA_SHUFFLE_AVX(Y11, Y10, Y9) + SUBQ $2, R9 + JA chacha_loop_256 + + VPADDD Y0, Y4, Y4 + VPADDD Y1, Y5, Y5 + VPADDD Y2, Y6, Y6 + VPADDD Y3, Y7, Y7 + VPADDQ TWO, Y3, Y3 + XOR_AVX2(DI, SI, 0, Y4, Y5, Y6, Y7, Y12, Y13) + VPADDD Y0, Y8, Y8 + VPADDD Y1, Y9, Y9 + VPADDD Y2, Y10, Y10 + VPADDD Y3, Y11, Y11 + VPADDQ TWO, Y3, Y3 + + CMPQ CX, $256 + JB less_than_256 + + XOR_AVX2(DI, SI, 128, Y8, Y9, Y10, Y11, Y12, Y13) + SUBQ $256, CX + TESTQ CX, CX + JE done + + ADDQ $256, SI + ADDQ $256, DI + JMP between_0_and_64 + +less_than_256: + XOR_UPPER_AVX2(DI, SI, 128, Y8, Y9, Y10, Y11, Y12, Y13) + EXTRACT_LOWER(BX, Y8, Y9, Y10, Y11, Y12) + ADDQ $192, SI + ADDQ $192, DI + SUBQ $192, CX + JMP finalize + +between_64_and_192: + VMOVDQA Y0, Y4 + VMOVDQA Y1, Y5 + VMOVDQA Y2, Y6 + VMOVDQA Y3, Y7 + + MOVQ DX, R9 + +chacha_loop_128: + CHACHA_QROUND_AVX(Y4, Y5, Y6, Y7, Y13, Y14, Y15) + CHACHA_SHUFFLE_AVX(Y5, Y6, Y7) + CHACHA_QROUND_AVX(Y4, Y5, Y6, Y7, Y13, Y14, Y15) + CHACHA_SHUFFLE_AVX(Y7, Y6, Y5) + SUBQ $2, R9 + JA chacha_loop_128 + + VPADDD Y0, Y4, Y4 + VPADDD Y1, Y5, Y5 + VPADDD Y2, Y6, Y6 + VPADDD Y3, Y7, Y7 + VPADDQ TWO, Y3, Y3 + + CMPQ CX, $128 + JB less_than_128 + + XOR_AVX2(DI, SI, 0, Y4, Y5, Y6, Y7, Y12, Y13) + SUBQ $128, CX + TESTQ CX, CX + JE done + + ADDQ $128, SI + ADDQ $128, DI + JMP between_0_and_64 + +less_than_128: + XOR_UPPER_AVX2(DI, SI, 0, Y4, Y5, Y6, Y7, Y12, Y13) + EXTRACT_LOWER(BX, Y4, Y5, Y6, Y7, Y13) + ADDQ $64, SI + ADDQ $64, DI + SUBQ $64, CX + JMP finalize + +between_0_and_64: + VMOVDQA X0, X4 + VMOVDQA X1, X5 + VMOVDQA X2, X6 + VMOVDQA X3, X7 + + MOVQ DX, R9 + +chacha_loop_64: + CHACHA_QROUND_AVX(X4, X5, X6, X7, X13, X14, X15) + CHACHA_SHUFFLE_AVX(X5, X6, X7) + CHACHA_QROUND_AVX(X4, X5, X6, X7, X13, X14, X15) + CHACHA_SHUFFLE_AVX(X7, X6, X5) + SUBQ $2, R9 + JA chacha_loop_64 + + VPADDD X0, X4, X4 + VPADDD X1, X5, X5 + VPADDD X2, X6, X6 + VPADDD X3, X7, X7 + VMOVDQU ·one<>(SB), X0 + VPADDQ X0, X3, X3 + + CMPQ CX, $64 + JB less_than_64 + + XOR_AVX(DI, SI, 0, X4, X5, X6, X7, X13) + SUBQ $64, CX + JMP done + +less_than_64: + VMOVDQU X4, 0(BX) + VMOVDQU X5, 16(BX) + VMOVDQU X6, 32(BX) + VMOVDQU X7, 48(BX) + +finalize: + XORQ R11, R11 + XORQ R12, R12 + MOVQ CX, BP + +xor_loop: + MOVB 0(SI), R11 + MOVB 0(BX), R12 + XORQ R11, R12 + MOVB R12, 0(DI) + INCQ SI + INCQ BX + INCQ DI + DECQ BP + JA xor_loop + +done: + VMOVDQU X3, 48(AX) + VZEROUPPER + MOVQ R8, SP + MOVQ CX, ret+72(FP) + RET + diff --git a/vendor/github.com/aead/chacha20/chacha/chacha_386.go b/vendor/github.com/aead/chacha20/chacha/chacha_386.go new file mode 100644 index 0000000..97e533d --- /dev/null +++ b/vendor/github.com/aead/chacha20/chacha/chacha_386.go @@ -0,0 +1,60 @@ +// Copyright (c) 2016 Andreas Auernhammer. All rights reserved. +// Use of this source code is governed by a license that can be +// found in the LICENSE file. + +// +build 386,!gccgo,!appengine,!nacl + +package chacha + +import ( + "encoding/binary" + + "golang.org/x/sys/cpu" +) + +func init() { + useSSE2 = cpu.X86.HasSSE2 + useSSSE3 = cpu.X86.HasSSSE3 + useAVX = false + useAVX2 = false +} + +func initialize(state *[64]byte, key []byte, nonce *[16]byte) { + binary.LittleEndian.PutUint32(state[0:], sigma[0]) + binary.LittleEndian.PutUint32(state[4:], sigma[1]) + binary.LittleEndian.PutUint32(state[8:], sigma[2]) + binary.LittleEndian.PutUint32(state[12:], sigma[3]) + copy(state[16:], key[:]) + copy(state[48:], nonce[:]) +} + +// This function is implemented in chacha_386.s +//go:noescape +func hChaCha20SSE2(out *[32]byte, nonce *[16]byte, key *[32]byte) + +// This function is implemented in chacha_386.s +//go:noescape +func hChaCha20SSSE3(out *[32]byte, nonce *[16]byte, key *[32]byte) + +// This function is implemented in chacha_386.s +//go:noescape +func xorKeyStreamSSE2(dst, src []byte, block, state *[64]byte, rounds int) int + +func hChaCha20(out *[32]byte, nonce *[16]byte, key *[32]byte) { + switch { + case useSSSE3: + hChaCha20SSSE3(out, nonce, key) + case useSSE2: + hChaCha20SSE2(out, nonce, key) + default: + hChaCha20Generic(out, nonce, key) + } +} + +func xorKeyStream(dst, src []byte, block, state *[64]byte, rounds int) int { + if useSSE2 { + return xorKeyStreamSSE2(dst, src, block, state, rounds) + } else { + return xorKeyStreamGeneric(dst, src, block, state, rounds) + } +} diff --git a/vendor/github.com/aead/chacha20/chacha/chacha_386.s b/vendor/github.com/aead/chacha20/chacha/chacha_386.s new file mode 100644 index 0000000..262fc86 --- /dev/null +++ b/vendor/github.com/aead/chacha20/chacha/chacha_386.s @@ -0,0 +1,163 @@ +// Copyright (c) 2016 Andreas Auernhammer. All rights reserved. +// Use of this source code is governed by a license that can be +// found in the LICENSE file. + +// +build 386,!gccgo,!appengine,!nacl + +#include "const.s" +#include "macro.s" + +// FINALIZE xors len bytes from src and block using +// the temp. registers t0 and t1 and writes the result +// to dst. +#define FINALIZE(dst, src, block, len, t0, t1) \ + XORL t0, t0; \ + XORL t1, t1; \ + FINALIZE_LOOP:; \ + MOVB 0(src), t0; \ + MOVB 0(block), t1; \ + XORL t0, t1; \ + MOVB t1, 0(dst); \ + INCL src; \ + INCL block; \ + INCL dst; \ + DECL len; \ + JG FINALIZE_LOOP \ + +#define Dst DI +#define Nonce AX +#define Key BX +#define Rounds DX + +// func hChaCha20SSE2(out *[32]byte, nonce *[16]byte, key *[32]byte) +TEXT ·hChaCha20SSE2(SB), 4, $0-12 + MOVL out+0(FP), Dst + MOVL nonce+4(FP), Nonce + MOVL key+8(FP), Key + + MOVOU ·sigma<>(SB), X0 + MOVOU 0*16(Key), X1 + MOVOU 1*16(Key), X2 + MOVOU 0*16(Nonce), X3 + MOVL $20, Rounds + +chacha_loop: + CHACHA_QROUND_SSE2(X0, X1, X2, X3, X4) + CHACHA_SHUFFLE_SSE(X1, X2, X3) + CHACHA_QROUND_SSE2(X0, X1, X2, X3, X4) + CHACHA_SHUFFLE_SSE(X3, X2, X1) + SUBL $2, Rounds + JNZ chacha_loop + + MOVOU X0, 0*16(Dst) + MOVOU X3, 1*16(Dst) + RET + +// func hChaCha20SSSE3(out *[32]byte, nonce *[16]byte, key *[32]byte) +TEXT ·hChaCha20SSSE3(SB), 4, $0-12 + MOVL out+0(FP), Dst + MOVL nonce+4(FP), Nonce + MOVL key+8(FP), Key + + MOVOU ·sigma<>(SB), X0 + MOVOU 0*16(Key), X1 + MOVOU 1*16(Key), X2 + MOVOU 0*16(Nonce), X3 + MOVL $20, Rounds + + MOVOU ·rol16<>(SB), X5 + MOVOU ·rol8<>(SB), X6 + +chacha_loop: + CHACHA_QROUND_SSSE3(X0, X1, X2, X3, X4, X5, X6) + CHACHA_SHUFFLE_SSE(X1, X2, X3) + CHACHA_QROUND_SSSE3(X0, X1, X2, X3, X4, X5, X6) + CHACHA_SHUFFLE_SSE(X3, X2, X1) + SUBL $2, Rounds + JNZ chacha_loop + + MOVOU X0, 0*16(Dst) + MOVOU X3, 1*16(Dst) + RET + +#undef Dst +#undef Nonce +#undef Key +#undef Rounds + +#define State AX +#define Dst DI +#define Src SI +#define Len DX +#define Tmp0 BX +#define Tmp1 BP + +// func xorKeyStreamSSE2(dst, src []byte, block, state *[64]byte, rounds int) int +TEXT ·xorKeyStreamSSE2(SB), 4, $0-40 + MOVL dst_base+0(FP), Dst + MOVL src_base+12(FP), Src + MOVL state+28(FP), State + MOVL src_len+16(FP), Len + MOVL $0, ret+36(FP) // Number of bytes written to the keystream buffer - 0 iff len mod 64 == 0 + + MOVOU 0*16(State), X0 + MOVOU 1*16(State), X1 + MOVOU 2*16(State), X2 + MOVOU 3*16(State), X3 + TESTL Len, Len + JZ DONE + +GENERATE_KEYSTREAM: + MOVO X0, X4 + MOVO X1, X5 + MOVO X2, X6 + MOVO X3, X7 + MOVL rounds+32(FP), Tmp0 + +CHACHA_LOOP: + CHACHA_QROUND_SSE2(X4, X5, X6, X7, X0) + CHACHA_SHUFFLE_SSE(X5, X6, X7) + CHACHA_QROUND_SSE2(X4, X5, X6, X7, X0) + CHACHA_SHUFFLE_SSE(X7, X6, X5) + SUBL $2, Tmp0 + JA CHACHA_LOOP + + MOVOU 0*16(State), X0 // Restore X0 from state + PADDL X0, X4 + PADDL X1, X5 + PADDL X2, X6 + PADDL X3, X7 + MOVOU ·one<>(SB), X0 + PADDQ X0, X3 + + CMPL Len, $64 + JL BUFFER_KEYSTREAM + + XOR_SSE(Dst, Src, 0, X4, X5, X6, X7, X0) + MOVOU 0*16(State), X0 // Restore X0 from state + ADDL $64, Src + ADDL $64, Dst + SUBL $64, Len + JZ DONE + JMP GENERATE_KEYSTREAM // There is at least one more plaintext byte + +BUFFER_KEYSTREAM: + MOVL block+24(FP), State + MOVOU X4, 0(State) + MOVOU X5, 16(State) + MOVOU X6, 32(State) + MOVOU X7, 48(State) + MOVL Len, ret+36(FP) // Number of bytes written to the keystream buffer - 0 < Len < 64 + FINALIZE(Dst, Src, State, Len, Tmp0, Tmp1) + +DONE: + MOVL state+28(FP), State + MOVOU X3, 3*16(State) + RET + +#undef State +#undef Dst +#undef Src +#undef Len +#undef Tmp0 +#undef Tmp1 diff --git a/vendor/github.com/aead/chacha20/chacha/chacha_amd64.go b/vendor/github.com/aead/chacha20/chacha/chacha_amd64.go new file mode 100644 index 0000000..635f7de --- /dev/null +++ b/vendor/github.com/aead/chacha20/chacha/chacha_amd64.go @@ -0,0 +1,76 @@ +// Copyright (c) 2017 Andreas Auernhammer. All rights reserved. +// Use of this source code is governed by a license that can be +// found in the LICENSE file. + +// +build go1.7,amd64,!gccgo,!appengine,!nacl + +package chacha + +import "golang.org/x/sys/cpu" + +func init() { + useSSE2 = cpu.X86.HasSSE2 + useSSSE3 = cpu.X86.HasSSSE3 + useAVX = cpu.X86.HasAVX + useAVX2 = cpu.X86.HasAVX2 +} + +// This function is implemented in chacha_amd64.s +//go:noescape +func initialize(state *[64]byte, key []byte, nonce *[16]byte) + +// This function is implemented in chacha_amd64.s +//go:noescape +func hChaCha20SSE2(out *[32]byte, nonce *[16]byte, key *[32]byte) + +// This function is implemented in chacha_amd64.s +//go:noescape +func hChaCha20SSSE3(out *[32]byte, nonce *[16]byte, key *[32]byte) + +// This function is implemented in chachaAVX2_amd64.s +//go:noescape +func hChaCha20AVX(out *[32]byte, nonce *[16]byte, key *[32]byte) + +// This function is implemented in chacha_amd64.s +//go:noescape +func xorKeyStreamSSE2(dst, src []byte, block, state *[64]byte, rounds int) int + +// This function is implemented in chacha_amd64.s +//go:noescape +func xorKeyStreamSSSE3(dst, src []byte, block, state *[64]byte, rounds int) int + +// This function is implemented in chacha_amd64.s +//go:noescape +func xorKeyStreamAVX(dst, src []byte, block, state *[64]byte, rounds int) int + +// This function is implemented in chachaAVX2_amd64.s +//go:noescape +func xorKeyStreamAVX2(dst, src []byte, block, state *[64]byte, rounds int) int + +func hChaCha20(out *[32]byte, nonce *[16]byte, key *[32]byte) { + switch { + case useAVX: + hChaCha20AVX(out, nonce, key) + case useSSSE3: + hChaCha20SSSE3(out, nonce, key) + case useSSE2: + hChaCha20SSE2(out, nonce, key) + default: + hChaCha20Generic(out, nonce, key) + } +} + +func xorKeyStream(dst, src []byte, block, state *[64]byte, rounds int) int { + switch { + case useAVX2: + return xorKeyStreamAVX2(dst, src, block, state, rounds) + case useAVX: + return xorKeyStreamAVX(dst, src, block, state, rounds) + case useSSSE3: + return xorKeyStreamSSSE3(dst, src, block, state, rounds) + case useSSE2: + return xorKeyStreamSSE2(dst, src, block, state, rounds) + default: + return xorKeyStreamGeneric(dst, src, block, state, rounds) + } +} diff --git a/vendor/github.com/aead/chacha20/chacha/chacha_amd64.s b/vendor/github.com/aead/chacha20/chacha/chacha_amd64.s new file mode 100644 index 0000000..26a2383 --- /dev/null +++ b/vendor/github.com/aead/chacha20/chacha/chacha_amd64.s @@ -0,0 +1,1072 @@ +// Copyright (c) 2016 Andreas Auernhammer. All rights reserved. +// Use of this source code is governed by a license that can be +// found in the LICENSE file. + +// +build amd64,!gccgo,!appengine,!nacl + +#include "const.s" +#include "macro.s" + +// FINALIZE xors len bytes from src and block using +// the temp. registers t0 and t1 and writes the result +// to dst. +#define FINALIZE(dst, src, block, len, t0, t1) \ + XORQ t0, t0; \ + XORQ t1, t1; \ + FINALIZE_LOOP:; \ + MOVB 0(src), t0; \ + MOVB 0(block), t1; \ + XORQ t0, t1; \ + MOVB t1, 0(dst); \ + INCQ src; \ + INCQ block; \ + INCQ dst; \ + DECQ len; \ + JG FINALIZE_LOOP \ + +#define Dst DI +#define Nonce AX +#define Key BX +#define Rounds DX + +// func initialize(state *[64]byte, key []byte, nonce *[16]byte) +TEXT ·initialize(SB), 4, $0-40 + MOVQ state+0(FP), Dst + MOVQ key+8(FP), Key + MOVQ nonce+32(FP), Nonce + + MOVOU ·sigma<>(SB), X0 + MOVOU 0*16(Key), X1 + MOVOU 1*16(Key), X2 + MOVOU 0*16(Nonce), X3 + + MOVOU X0, 0*16(Dst) + MOVOU X1, 1*16(Dst) + MOVOU X2, 2*16(Dst) + MOVOU X3, 3*16(Dst) + RET + +// func hChaCha20AVX(out *[32]byte, nonce *[16]byte, key *[32]byte) +TEXT ·hChaCha20AVX(SB), 4, $0-24 + MOVQ out+0(FP), Dst + MOVQ nonce+8(FP), Nonce + MOVQ key+16(FP), Key + + VMOVDQU ·sigma<>(SB), X0 + VMOVDQU 0*16(Key), X1 + VMOVDQU 1*16(Key), X2 + VMOVDQU 0*16(Nonce), X3 + VMOVDQU ·rol16_AVX2<>(SB), X5 + VMOVDQU ·rol8_AVX2<>(SB), X6 + MOVQ $20, Rounds + +CHACHA_LOOP: + CHACHA_QROUND_AVX(X0, X1, X2, X3, X4, X5, X6) + CHACHA_SHUFFLE_AVX(X1, X2, X3) + CHACHA_QROUND_AVX(X0, X1, X2, X3, X4, X5, X6) + CHACHA_SHUFFLE_AVX(X3, X2, X1) + SUBQ $2, Rounds + JNZ CHACHA_LOOP + + VMOVDQU X0, 0*16(Dst) + VMOVDQU X3, 1*16(Dst) + VZEROUPPER + RET + +// func hChaCha20SSE2(out *[32]byte, nonce *[16]byte, key *[32]byte) +TEXT ·hChaCha20SSE2(SB), 4, $0-24 + MOVQ out+0(FP), Dst + MOVQ nonce+8(FP), Nonce + MOVQ key+16(FP), Key + + MOVOU ·sigma<>(SB), X0 + MOVOU 0*16(Key), X1 + MOVOU 1*16(Key), X2 + MOVOU 0*16(Nonce), X3 + MOVQ $20, Rounds + +CHACHA_LOOP: + CHACHA_QROUND_SSE2(X0, X1, X2, X3, X4) + CHACHA_SHUFFLE_SSE(X1, X2, X3) + CHACHA_QROUND_SSE2(X0, X1, X2, X3, X4) + CHACHA_SHUFFLE_SSE(X3, X2, X1) + SUBQ $2, Rounds + JNZ CHACHA_LOOP + + MOVOU X0, 0*16(Dst) + MOVOU X3, 1*16(Dst) + RET + +// func hChaCha20SSSE3(out *[32]byte, nonce *[16]byte, key *[32]byte) +TEXT ·hChaCha20SSSE3(SB), 4, $0-24 + MOVQ out+0(FP), Dst + MOVQ nonce+8(FP), Nonce + MOVQ key+16(FP), Key + + MOVOU ·sigma<>(SB), X0 + MOVOU 0*16(Key), X1 + MOVOU 1*16(Key), X2 + MOVOU 0*16(Nonce), X3 + MOVOU ·rol16<>(SB), X5 + MOVOU ·rol8<>(SB), X6 + MOVQ $20, Rounds + +chacha_loop: + CHACHA_QROUND_SSSE3(X0, X1, X2, X3, X4, X5, X6) + CHACHA_SHUFFLE_SSE(X1, X2, X3) + CHACHA_QROUND_SSSE3(X0, X1, X2, X3, X4, X5, X6) + CHACHA_SHUFFLE_SSE(X3, X2, X1) + SUBQ $2, Rounds + JNZ chacha_loop + + MOVOU X0, 0*16(Dst) + MOVOU X3, 1*16(Dst) + RET + +#undef Dst +#undef Nonce +#undef Key +#undef Rounds + +#define Dst DI +#define Src SI +#define Len R12 +#define Rounds DX +#define Buffer BX +#define State AX +#define Stack SP +#define SavedSP R8 +#define Tmp0 R9 +#define Tmp1 R10 +#define Tmp2 R11 + +// func xorKeyStreamSSE2(dst, src []byte, block, state *[64]byte, rounds int) int +TEXT ·xorKeyStreamSSE2(SB), 4, $112-80 + MOVQ dst_base+0(FP), Dst + MOVQ src_base+24(FP), Src + MOVQ block+48(FP), Buffer + MOVQ state+56(FP), State + MOVQ rounds+64(FP), Rounds + MOVQ src_len+32(FP), Len + + MOVOU 0*16(State), X0 + MOVOU 1*16(State), X1 + MOVOU 2*16(State), X2 + MOVOU 3*16(State), X3 + + MOVQ Stack, SavedSP + ADDQ $16, Stack + ANDQ $-16, Stack + + TESTQ Len, Len + JZ DONE + + MOVOU ·one<>(SB), X4 + MOVO X0, 0*16(Stack) + MOVO X1, 1*16(Stack) + MOVO X2, 2*16(Stack) + MOVO X3, 3*16(Stack) + MOVO X4, 4*16(Stack) + + CMPQ Len, $64 + JLE GENERATE_KEYSTREAM_64 + CMPQ Len, $128 + JLE GENERATE_KEYSTREAM_128 + CMPQ Len, $192 + JLE GENERATE_KEYSTREAM_192 + +GENERATE_KEYSTREAM_256: + MOVO X0, X12 + MOVO X1, X13 + MOVO X2, X14 + MOVO X3, X15 + PADDQ 4*16(Stack), X15 + MOVO X0, X8 + MOVO X1, X9 + MOVO X2, X10 + MOVO X15, X11 + PADDQ 4*16(Stack), X11 + MOVO X0, X4 + MOVO X1, X5 + MOVO X2, X6 + MOVO X11, X7 + PADDQ 4*16(Stack), X7 + MOVQ Rounds, Tmp0 + + MOVO X3, 3*16(Stack) // Save X3 + +CHACHA_LOOP_256: + MOVO X4, 5*16(Stack) + CHACHA_QROUND_SSE2(X0, X1, X2, X3, X4) + CHACHA_QROUND_SSE2(X12, X13, X14, X15, X4) + MOVO 5*16(Stack), X4 + MOVO X0, 5*16(Stack) + CHACHA_QROUND_SSE2(X8, X9, X10, X11, X0) + CHACHA_QROUND_SSE2(X4, X5, X6, X7, X0) + MOVO 5*16(Stack), X0 + CHACHA_SHUFFLE_SSE(X1, X2, X3) + CHACHA_SHUFFLE_SSE(X13, X14, X15) + CHACHA_SHUFFLE_SSE(X9, X10, X11) + CHACHA_SHUFFLE_SSE(X5, X6, X7) + MOVO X4, 5*16(Stack) + CHACHA_QROUND_SSE2(X0, X1, X2, X3, X4) + CHACHA_QROUND_SSE2(X12, X13, X14, X15, X4) + MOVO 5*16(Stack), X4 + MOVO X0, 5*16(Stack) + CHACHA_QROUND_SSE2(X8, X9, X10, X11, X0) + CHACHA_QROUND_SSE2(X4, X5, X6, X7, X0) + MOVO 5*16(Stack), X0 + CHACHA_SHUFFLE_SSE(X3, X2, X1) + CHACHA_SHUFFLE_SSE(X15, X14, X13) + CHACHA_SHUFFLE_SSE(X11, X10, X9) + CHACHA_SHUFFLE_SSE(X7, X6, X5) + SUBQ $2, Tmp0 + JNZ CHACHA_LOOP_256 + + PADDL 0*16(Stack), X0 + PADDL 1*16(Stack), X1 + PADDL 2*16(Stack), X2 + PADDL 3*16(Stack), X3 + MOVO X4, 5*16(Stack) // Save X4 + XOR_SSE(Dst, Src, 0, X0, X1, X2, X3, X4) + MOVO 5*16(Stack), X4 // Restore X4 + + MOVO 0*16(Stack), X0 + MOVO 1*16(Stack), X1 + MOVO 2*16(Stack), X2 + MOVO 3*16(Stack), X3 + PADDQ 4*16(Stack), X3 + + PADDL X0, X12 + PADDL X1, X13 + PADDL X2, X14 + PADDL X3, X15 + PADDQ 4*16(Stack), X3 + PADDL X0, X8 + PADDL X1, X9 + PADDL X2, X10 + PADDL X3, X11 + PADDQ 4*16(Stack), X3 + PADDL X0, X4 + PADDL X1, X5 + PADDL X2, X6 + PADDL X3, X7 + PADDQ 4*16(Stack), X3 + + XOR_SSE(Dst, Src, 64, X12, X13, X14, X15, X0) + XOR_SSE(Dst, Src, 128, X8, X9, X10, X11, X0) + MOVO 0*16(Stack), X0 // Restore X0 + ADDQ $192, Dst + ADDQ $192, Src + SUBQ $192, Len + + CMPQ Len, $64 + JL BUFFER_KEYSTREAM + + XOR_SSE(Dst, Src, 0, X4, X5, X6, X7, X8) + ADDQ $64, Dst + ADDQ $64, Src + SUBQ $64, Len + JZ DONE + CMPQ Len, $64 // If Len <= 64 -> gen. only 64 byte keystream. + JLE GENERATE_KEYSTREAM_64 + CMPQ Len, $128 // If 64 < Len <= 128 -> gen. only 128 byte keystream. + JLE GENERATE_KEYSTREAM_128 + CMPQ Len, $192 // If Len > 192 -> repeat, otherwise Len > 128 && Len <= 192 -> gen. 192 byte keystream + JG GENERATE_KEYSTREAM_256 + +GENERATE_KEYSTREAM_192: + MOVO X0, X12 + MOVO X1, X13 + MOVO X2, X14 + MOVO X3, X15 + MOVO X0, X8 + MOVO X1, X9 + MOVO X2, X10 + MOVO X3, X11 + PADDQ 4*16(Stack), X11 + MOVO X0, X4 + MOVO X1, X5 + MOVO X2, X6 + MOVO X11, X7 + PADDQ 4*16(Stack), X7 + MOVQ Rounds, Tmp0 + +CHACHA_LOOP_192: + CHACHA_QROUND_SSE2(X12, X13, X14, X15, X0) + CHACHA_QROUND_SSE2(X8, X9, X10, X11, X0) + CHACHA_QROUND_SSE2(X4, X5, X6, X7, X0) + CHACHA_SHUFFLE_SSE(X13, X14, X15) + CHACHA_SHUFFLE_SSE(X9, X10, X11) + CHACHA_SHUFFLE_SSE(X5, X6, X7) + CHACHA_QROUND_SSE2(X12, X13, X14, X15, X0) + CHACHA_QROUND_SSE2(X8, X9, X10, X11, X0) + CHACHA_QROUND_SSE2(X4, X5, X6, X7, X0) + CHACHA_SHUFFLE_SSE(X15, X14, X13) + CHACHA_SHUFFLE_SSE(X11, X10, X9) + CHACHA_SHUFFLE_SSE(X7, X6, X5) + SUBQ $2, Tmp0 + JNZ CHACHA_LOOP_192 + + MOVO 0*16(Stack), X0 // Restore X0 + PADDL X0, X12 + PADDL X1, X13 + PADDL X2, X14 + PADDL X3, X15 + PADDQ 4*16(Stack), X3 + PADDL X0, X8 + PADDL X1, X9 + PADDL X2, X10 + PADDL X3, X11 + PADDQ 4*16(Stack), X3 + PADDL X0, X4 + PADDL X1, X5 + PADDL X2, X6 + PADDL X3, X7 + PADDQ 4*16(Stack), X3 + + XOR_SSE(Dst, Src, 0, X12, X13, X14, X15, X0) + XOR_SSE(Dst, Src, 64, X8, X9, X10, X11, X0) + MOVO 0*16(Stack), X0 // Restore X0 + ADDQ $128, Dst + ADDQ $128, Src + SUBQ $128, Len + + CMPQ Len, $64 + JL BUFFER_KEYSTREAM + + XOR_SSE(Dst, Src, 0, X4, X5, X6, X7, X8) + ADDQ $64, Dst + ADDQ $64, Src + SUBQ $64, Len + JZ DONE + CMPQ Len, $64 // If Len <= 64 -> gen. only 64 byte keystream. + JLE GENERATE_KEYSTREAM_64 + +GENERATE_KEYSTREAM_128: + MOVO X0, X8 + MOVO X1, X9 + MOVO X2, X10 + MOVO X3, X11 + MOVO X0, X4 + MOVO X1, X5 + MOVO X2, X6 + MOVO X3, X7 + PADDQ 4*16(Stack), X7 + MOVQ Rounds, Tmp0 + +CHACHA_LOOP_128: + CHACHA_QROUND_SSE2(X8, X9, X10, X11, X12) + CHACHA_QROUND_SSE2(X4, X5, X6, X7, X12) + CHACHA_SHUFFLE_SSE(X9, X10, X11) + CHACHA_SHUFFLE_SSE(X5, X6, X7) + CHACHA_QROUND_SSE2(X8, X9, X10, X11, X12) + CHACHA_QROUND_SSE2(X4, X5, X6, X7, X12) + CHACHA_SHUFFLE_SSE(X11, X10, X9) + CHACHA_SHUFFLE_SSE(X7, X6, X5) + SUBQ $2, Tmp0 + JNZ CHACHA_LOOP_128 + + PADDL X0, X8 + PADDL X1, X9 + PADDL X2, X10 + PADDL X3, X11 + PADDQ 4*16(Stack), X3 + PADDL X0, X4 + PADDL X1, X5 + PADDL X2, X6 + PADDL X3, X7 + PADDQ 4*16(Stack), X3 + + XOR_SSE(Dst, Src, 0, X8, X9, X10, X11, X12) + ADDQ $64, Dst + ADDQ $64, Src + SUBQ $64, Len + + CMPQ Len, $64 + JL BUFFER_KEYSTREAM + + XOR_SSE(Dst, Src, 0, X4, X5, X6, X7, X8) + ADDQ $64, Dst + ADDQ $64, Src + SUBQ $64, Len + JZ DONE // If Len == 0 -> DONE, otherwise Len <= 64 -> gen 64 byte keystream + +GENERATE_KEYSTREAM_64: + MOVO X0, X4 + MOVO X1, X5 + MOVO X2, X6 + MOVO X3, X7 + MOVQ Rounds, Tmp0 + +CHACHA_LOOP_64: + CHACHA_QROUND_SSE2(X4, X5, X6, X7, X8) + CHACHA_SHUFFLE_SSE(X5, X6, X7) + CHACHA_QROUND_SSE2(X4, X5, X6, X7, X8) + CHACHA_SHUFFLE_SSE(X7, X6, X5) + SUBQ $2, Tmp0 + JNZ CHACHA_LOOP_64 + + PADDL X0, X4 + PADDL X1, X5 + PADDL X2, X6 + PADDL X3, X7 + PADDQ 4*16(Stack), X3 + + CMPQ Len, $64 + JL BUFFER_KEYSTREAM + + XOR_SSE(Dst, Src, 0, X4, X5, X6, X7, X8) + ADDQ $64, Src + ADDQ $64, Dst + SUBQ $64, Len + JMP DONE // jump directly to DONE - there is no keystream to buffer, Len == 0 always true. + +BUFFER_KEYSTREAM: + MOVOU X4, 0*16(Buffer) + MOVOU X5, 1*16(Buffer) + MOVOU X6, 2*16(Buffer) + MOVOU X7, 3*16(Buffer) + MOVQ Len, Tmp0 + FINALIZE(Dst, Src, Buffer, Tmp0, Tmp1, Tmp2) + +DONE: + MOVQ SavedSP, Stack // Restore stack pointer + MOVOU X3, 3*16(State) + MOVQ Len, ret+72(FP) + RET + +// func xorKeyStreamSSSE3(dst, src []byte, block, state *[64]byte, rounds int) int +TEXT ·xorKeyStreamSSSE3(SB), 4, $144-80 + MOVQ dst_base+0(FP), Dst + MOVQ src_base+24(FP), Src + MOVQ block+48(FP), Buffer + MOVQ state+56(FP), State + MOVQ rounds+64(FP), Rounds + MOVQ src_len+32(FP), Len + + MOVOU 0*16(State), X0 + MOVOU 1*16(State), X1 + MOVOU 2*16(State), X2 + MOVOU 3*16(State), X3 + + MOVQ Stack, SavedSP + ADDQ $16, Stack + ANDQ $-16, Stack + + TESTQ Len, Len + JZ DONE + + MOVOU ·one<>(SB), X4 + MOVOU ·rol16<>(SB), X5 + MOVOU ·rol8<>(SB), X6 + MOVO X0, 0*16(Stack) + MOVO X1, 1*16(Stack) + MOVO X2, 2*16(Stack) + MOVO X3, 3*16(Stack) + MOVO X4, 4*16(Stack) + MOVO X5, 6*16(Stack) + MOVO X6, 7*16(Stack) + + CMPQ Len, $64 + JLE GENERATE_KEYSTREAM_64 + CMPQ Len, $128 + JLE GENERATE_KEYSTREAM_128 + CMPQ Len, $192 + JLE GENERATE_KEYSTREAM_192 + +GENERATE_KEYSTREAM_256: + MOVO X0, X12 + MOVO X1, X13 + MOVO X2, X14 + MOVO X3, X15 + PADDQ 4*16(Stack), X15 + MOVO X0, X8 + MOVO X1, X9 + MOVO X2, X10 + MOVO X15, X11 + PADDQ 4*16(Stack), X11 + MOVO X0, X4 + MOVO X1, X5 + MOVO X2, X6 + MOVO X11, X7 + PADDQ 4*16(Stack), X7 + MOVQ Rounds, Tmp0 + + MOVO X3, 3*16(Stack) // Save X3 + +CHACHA_LOOP_256: + MOVO X4, 5*16(Stack) + CHACHA_QROUND_SSSE3(X0, X1, X2, X3, X4, 6*16(Stack), 7*16(Stack)) + CHACHA_QROUND_SSSE3(X12, X13, X14, X15, X4, 6*16(Stack), 7*16(Stack)) + MOVO 5*16(Stack), X4 + MOVO X0, 5*16(Stack) + CHACHA_QROUND_SSSE3(X8, X9, X10, X11, X0, 6*16(Stack), 7*16(Stack)) + CHACHA_QROUND_SSSE3(X4, X5, X6, X7, X0, 6*16(Stack), 7*16(Stack)) + MOVO 5*16(Stack), X0 + CHACHA_SHUFFLE_SSE(X1, X2, X3) + CHACHA_SHUFFLE_SSE(X13, X14, X15) + CHACHA_SHUFFLE_SSE(X9, X10, X11) + CHACHA_SHUFFLE_SSE(X5, X6, X7) + MOVO X4, 5*16(Stack) + CHACHA_QROUND_SSSE3(X0, X1, X2, X3, X4, 6*16(Stack), 7*16(Stack)) + CHACHA_QROUND_SSSE3(X12, X13, X14, X15, X4, 6*16(Stack), 7*16(Stack)) + MOVO 5*16(Stack), X4 + MOVO X0, 5*16(Stack) + CHACHA_QROUND_SSSE3(X8, X9, X10, X11, X0, 6*16(Stack), 7*16(Stack)) + CHACHA_QROUND_SSSE3(X4, X5, X6, X7, X0, 6*16(Stack), 7*16(Stack)) + MOVO 5*16(Stack), X0 + CHACHA_SHUFFLE_SSE(X3, X2, X1) + CHACHA_SHUFFLE_SSE(X15, X14, X13) + CHACHA_SHUFFLE_SSE(X11, X10, X9) + CHACHA_SHUFFLE_SSE(X7, X6, X5) + SUBQ $2, Tmp0 + JNZ CHACHA_LOOP_256 + + PADDL 0*16(Stack), X0 + PADDL 1*16(Stack), X1 + PADDL 2*16(Stack), X2 + PADDL 3*16(Stack), X3 + MOVO X4, 5*16(Stack) // Save X4 + XOR_SSE(Dst, Src, 0, X0, X1, X2, X3, X4) + MOVO 5*16(Stack), X4 // Restore X4 + + MOVO 0*16(Stack), X0 + MOVO 1*16(Stack), X1 + MOVO 2*16(Stack), X2 + MOVO 3*16(Stack), X3 + PADDQ 4*16(Stack), X3 + + PADDL X0, X12 + PADDL X1, X13 + PADDL X2, X14 + PADDL X3, X15 + PADDQ 4*16(Stack), X3 + PADDL X0, X8 + PADDL X1, X9 + PADDL X2, X10 + PADDL X3, X11 + PADDQ 4*16(Stack), X3 + PADDL X0, X4 + PADDL X1, X5 + PADDL X2, X6 + PADDL X3, X7 + PADDQ 4*16(Stack), X3 + + XOR_SSE(Dst, Src, 64, X12, X13, X14, X15, X0) + XOR_SSE(Dst, Src, 128, X8, X9, X10, X11, X0) + MOVO 0*16(Stack), X0 // Restore X0 + ADDQ $192, Dst + ADDQ $192, Src + SUBQ $192, Len + + CMPQ Len, $64 + JL BUFFER_KEYSTREAM + + XOR_SSE(Dst, Src, 0, X4, X5, X6, X7, X8) + ADDQ $64, Dst + ADDQ $64, Src + SUBQ $64, Len + JZ DONE + CMPQ Len, $64 // If Len <= 64 -> gen. only 64 byte keystream. + JLE GENERATE_KEYSTREAM_64 + CMPQ Len, $128 // If 64 < Len <= 128 -> gen. only 128 byte keystream. + JLE GENERATE_KEYSTREAM_128 + CMPQ Len, $192 // If Len > 192 -> repeat, otherwise Len > 128 && Len <= 192 -> gen. 192 byte keystream + JG GENERATE_KEYSTREAM_256 + +GENERATE_KEYSTREAM_192: + MOVO X0, X12 + MOVO X1, X13 + MOVO X2, X14 + MOVO X3, X15 + MOVO X0, X8 + MOVO X1, X9 + MOVO X2, X10 + MOVO X3, X11 + PADDQ 4*16(Stack), X11 + MOVO X0, X4 + MOVO X1, X5 + MOVO X2, X6 + MOVO X11, X7 + PADDQ 4*16(Stack), X7 + MOVQ Rounds, Tmp0 + + MOVO 6*16(Stack), X1 // Load 16 bit rotate-left constant + MOVO 7*16(Stack), X2 // Load 8 bit rotate-left constant + +CHACHA_LOOP_192: + CHACHA_QROUND_SSSE3(X12, X13, X14, X15, X0, X1, X2) + CHACHA_QROUND_SSSE3(X8, X9, X10, X11, X0, X1, X2) + CHACHA_QROUND_SSSE3(X4, X5, X6, X7, X0, X1, X2) + CHACHA_SHUFFLE_SSE(X13, X14, X15) + CHACHA_SHUFFLE_SSE(X9, X10, X11) + CHACHA_SHUFFLE_SSE(X5, X6, X7) + CHACHA_QROUND_SSSE3(X12, X13, X14, X15, X0, X1, X2) + CHACHA_QROUND_SSSE3(X8, X9, X10, X11, X0, X1, X2) + CHACHA_QROUND_SSSE3(X4, X5, X6, X7, X0, X1, X2) + CHACHA_SHUFFLE_SSE(X15, X14, X13) + CHACHA_SHUFFLE_SSE(X11, X10, X9) + CHACHA_SHUFFLE_SSE(X7, X6, X5) + SUBQ $2, Tmp0 + JNZ CHACHA_LOOP_192 + + MOVO 0*16(Stack), X0 // Restore X0 + MOVO 1*16(Stack), X1 // Restore X1 + MOVO 2*16(Stack), X2 // Restore X2 + PADDL X0, X12 + PADDL X1, X13 + PADDL X2, X14 + PADDL X3, X15 + PADDQ 4*16(Stack), X3 + PADDL X0, X8 + PADDL X1, X9 + PADDL X2, X10 + PADDL X3, X11 + PADDQ 4*16(Stack), X3 + PADDL X0, X4 + PADDL X1, X5 + PADDL X2, X6 + PADDL X3, X7 + PADDQ 4*16(Stack), X3 + + XOR_SSE(Dst, Src, 0, X12, X13, X14, X15, X0) + XOR_SSE(Dst, Src, 64, X8, X9, X10, X11, X0) + MOVO 0*16(Stack), X0 // Restore X0 + ADDQ $128, Dst + ADDQ $128, Src + SUBQ $128, Len + + CMPQ Len, $64 + JL BUFFER_KEYSTREAM + + XOR_SSE(Dst, Src, 0, X4, X5, X6, X7, X8) + ADDQ $64, Dst + ADDQ $64, Src + SUBQ $64, Len + JZ DONE + CMPQ Len, $64 // If Len <= 64 -> gen. only 64 byte keystream. + JLE GENERATE_KEYSTREAM_64 + +GENERATE_KEYSTREAM_128: + MOVO X0, X8 + MOVO X1, X9 + MOVO X2, X10 + MOVO X3, X11 + MOVO X0, X4 + MOVO X1, X5 + MOVO X2, X6 + MOVO X3, X7 + PADDQ 4*16(Stack), X7 + MOVQ Rounds, Tmp0 + + MOVO 6*16(Stack), X13 // Load 16 bit rotate-left constant + MOVO 7*16(Stack), X14 // Load 8 bit rotate-left constant + +CHACHA_LOOP_128: + CHACHA_QROUND_SSSE3(X8, X9, X10, X11, X12, X13, X14) + CHACHA_QROUND_SSSE3(X4, X5, X6, X7, X12, X13, X14) + CHACHA_SHUFFLE_SSE(X9, X10, X11) + CHACHA_SHUFFLE_SSE(X5, X6, X7) + CHACHA_QROUND_SSSE3(X8, X9, X10, X11, X12, X13, X14) + CHACHA_QROUND_SSSE3(X4, X5, X6, X7, X12, X13, X14) + CHACHA_SHUFFLE_SSE(X11, X10, X9) + CHACHA_SHUFFLE_SSE(X7, X6, X5) + SUBQ $2, Tmp0 + JNZ CHACHA_LOOP_128 + + PADDL X0, X8 + PADDL X1, X9 + PADDL X2, X10 + PADDL X3, X11 + PADDQ 4*16(Stack), X3 + PADDL X0, X4 + PADDL X1, X5 + PADDL X2, X6 + PADDL X3, X7 + PADDQ 4*16(Stack), X3 + + XOR_SSE(Dst, Src, 0, X8, X9, X10, X11, X12) + ADDQ $64, Dst + ADDQ $64, Src + SUBQ $64, Len + + CMPQ Len, $64 + JL BUFFER_KEYSTREAM + + XOR_SSE(Dst, Src, 0, X4, X5, X6, X7, X8) + ADDQ $64, Dst + ADDQ $64, Src + SUBQ $64, Len + JZ DONE // If Len == 0 -> DONE, otherwise Len <= 64 -> gen 64 byte keystream + +GENERATE_KEYSTREAM_64: + MOVO X0, X4 + MOVO X1, X5 + MOVO X2, X6 + MOVO X3, X7 + MOVQ Rounds, Tmp0 + + MOVO 6*16(Stack), X9 // Load 16 bit rotate-left constant + MOVO 7*16(Stack), X10 // Load 8 bit rotate-left constant + +CHACHA_LOOP_64: + CHACHA_QROUND_SSSE3(X4, X5, X6, X7, X8, X9, X10) + CHACHA_SHUFFLE_SSE(X5, X6, X7) + CHACHA_QROUND_SSSE3(X4, X5, X6, X7, X8, X9, X10) + CHACHA_SHUFFLE_SSE(X7, X6, X5) + SUBQ $2, Tmp0 + JNZ CHACHA_LOOP_64 + + PADDL X0, X4 + PADDL X1, X5 + PADDL X2, X6 + PADDL X3, X7 + PADDQ 4*16(Stack), X3 + + CMPQ Len, $64 + JL BUFFER_KEYSTREAM + + XOR_SSE(Dst, Src, 0, X4, X5, X6, X7, X8) + ADDQ $64, Src + ADDQ $64, Dst + SUBQ $64, Len + JMP DONE // jump directly to DONE - there is no keystream to buffer, Len == 0 always true. + +BUFFER_KEYSTREAM: + MOVOU X4, 0*16(Buffer) + MOVOU X5, 1*16(Buffer) + MOVOU X6, 2*16(Buffer) + MOVOU X7, 3*16(Buffer) + MOVQ Len, Tmp0 + FINALIZE(Dst, Src, Buffer, Tmp0, Tmp1, Tmp2) + +DONE: + MOVQ SavedSP, Stack // Restore stack pointer + MOVOU X3, 3*16(State) + MOVQ Len, ret+72(FP) + RET + +// func xorKeyStreamAVX(dst, src []byte, block, state *[64]byte, rounds int) int +TEXT ·xorKeyStreamAVX(SB), 4, $144-80 + MOVQ dst_base+0(FP), Dst + MOVQ src_base+24(FP), Src + MOVQ block+48(FP), Buffer + MOVQ state+56(FP), State + MOVQ rounds+64(FP), Rounds + MOVQ src_len+32(FP), Len + + VMOVDQU 0*16(State), X0 + VMOVDQU 1*16(State), X1 + VMOVDQU 2*16(State), X2 + VMOVDQU 3*16(State), X3 + + MOVQ Stack, SavedSP + ADDQ $16, Stack + ANDQ $-16, Stack + + TESTQ Len, Len + JZ DONE + + VMOVDQU ·one<>(SB), X4 + VMOVDQU ·rol16<>(SB), X5 + VMOVDQU ·rol8<>(SB), X6 + VMOVDQA X0, 0*16(Stack) + VMOVDQA X1, 1*16(Stack) + VMOVDQA X2, 2*16(Stack) + VMOVDQA X3, 3*16(Stack) + VMOVDQA X4, 4*16(Stack) + VMOVDQA X5, 6*16(Stack) + VMOVDQA X6, 7*16(Stack) + + CMPQ Len, $64 + JLE GENERATE_KEYSTREAM_64 + CMPQ Len, $128 + JLE GENERATE_KEYSTREAM_128 + CMPQ Len, $192 + JLE GENERATE_KEYSTREAM_192 + +GENERATE_KEYSTREAM_256: + VMOVDQA X0, X12 + VMOVDQA X1, X13 + VMOVDQA X2, X14 + VMOVDQA X3, X15 + VPADDQ 4*16(Stack), X15, X15 + VMOVDQA X0, X8 + VMOVDQA X1, X9 + VMOVDQA X2, X10 + VMOVDQA X15, X11 + VPADDQ 4*16(Stack), X11, X11 + VMOVDQA X0, X4 + VMOVDQA X1, X5 + VMOVDQA X2, X6 + VMOVDQA X11, X7 + VPADDQ 4*16(Stack), X7, X7 + MOVQ Rounds, Tmp0 + + VMOVDQA X3, 3*16(Stack) // Save X3 + +CHACHA_LOOP_256: + VMOVDQA X4, 5*16(Stack) + CHACHA_QROUND_AVX(X0, X1, X2, X3, X4, 6*16(Stack), 7*16(Stack)) + CHACHA_QROUND_AVX(X12, X13, X14, X15, X4, 6*16(Stack), 7*16(Stack)) + VMOVDQA 5*16(Stack), X4 + VMOVDQA X0, 5*16(Stack) + CHACHA_QROUND_AVX(X8, X9, X10, X11, X0, 6*16(Stack), 7*16(Stack)) + CHACHA_QROUND_AVX(X4, X5, X6, X7, X0, 6*16(Stack), 7*16(Stack)) + VMOVDQA 5*16(Stack), X0 + CHACHA_SHUFFLE_AVX(X1, X2, X3) + CHACHA_SHUFFLE_AVX(X13, X14, X15) + CHACHA_SHUFFLE_AVX(X9, X10, X11) + CHACHA_SHUFFLE_AVX(X5, X6, X7) + VMOVDQA X4, 5*16(Stack) + CHACHA_QROUND_AVX(X0, X1, X2, X3, X4, 6*16(Stack), 7*16(Stack)) + CHACHA_QROUND_AVX(X12, X13, X14, X15, X4, 6*16(Stack), 7*16(Stack)) + VMOVDQA 5*16(Stack), X4 + VMOVDQA X0, 5*16(Stack) + CHACHA_QROUND_AVX(X8, X9, X10, X11, X0, 6*16(Stack), 7*16(Stack)) + CHACHA_QROUND_AVX(X4, X5, X6, X7, X0, 6*16(Stack), 7*16(Stack)) + VMOVDQA 5*16(Stack), X0 + CHACHA_SHUFFLE_AVX(X3, X2, X1) + CHACHA_SHUFFLE_AVX(X15, X14, X13) + CHACHA_SHUFFLE_AVX(X11, X10, X9) + CHACHA_SHUFFLE_AVX(X7, X6, X5) + SUBQ $2, Tmp0 + JNZ CHACHA_LOOP_256 + + VPADDD 0*16(Stack), X0, X0 + VPADDD 1*16(Stack), X1, X1 + VPADDD 2*16(Stack), X2, X2 + VPADDD 3*16(Stack), X3, X3 + VMOVDQA X4, 5*16(Stack) // Save X4 + XOR_AVX(Dst, Src, 0, X0, X1, X2, X3, X4) + VMOVDQA 5*16(Stack), X4 // Restore X4 + + VMOVDQA 0*16(Stack), X0 + VMOVDQA 1*16(Stack), X1 + VMOVDQA 2*16(Stack), X2 + VMOVDQA 3*16(Stack), X3 + VPADDQ 4*16(Stack), X3, X3 + + VPADDD X0, X12, X12 + VPADDD X1, X13, X13 + VPADDD X2, X14, X14 + VPADDD X3, X15, X15 + VPADDQ 4*16(Stack), X3, X3 + VPADDD X0, X8, X8 + VPADDD X1, X9, X9 + VPADDD X2, X10, X10 + VPADDD X3, X11, X11 + VPADDQ 4*16(Stack), X3, X3 + VPADDD X0, X4, X4 + VPADDD X1, X5, X5 + VPADDD X2, X6, X6 + VPADDD X3, X7, X7 + VPADDQ 4*16(Stack), X3, X3 + + XOR_AVX(Dst, Src, 64, X12, X13, X14, X15, X0) + XOR_AVX(Dst, Src, 128, X8, X9, X10, X11, X0) + VMOVDQA 0*16(Stack), X0 // Restore X0 + ADDQ $192, Dst + ADDQ $192, Src + SUBQ $192, Len + + CMPQ Len, $64 + JL BUFFER_KEYSTREAM + + XOR_AVX(Dst, Src, 0, X4, X5, X6, X7, X8) + ADDQ $64, Dst + ADDQ $64, Src + SUBQ $64, Len + JZ DONE + CMPQ Len, $64 // If Len <= 64 -> gen. only 64 byte keystream. + JLE GENERATE_KEYSTREAM_64 + CMPQ Len, $128 // If 64 < Len <= 128 -> gen. only 128 byte keystream. + JLE GENERATE_KEYSTREAM_128 + CMPQ Len, $192 // If Len > 192 -> repeat, otherwise Len > 128 && Len <= 192 -> gen. 192 byte keystream + JG GENERATE_KEYSTREAM_256 + +GENERATE_KEYSTREAM_192: + VMOVDQA X0, X12 + VMOVDQA X1, X13 + VMOVDQA X2, X14 + VMOVDQA X3, X15 + VMOVDQA X0, X8 + VMOVDQA X1, X9 + VMOVDQA X2, X10 + VMOVDQA X3, X11 + VPADDQ 4*16(Stack), X11, X11 + VMOVDQA X0, X4 + VMOVDQA X1, X5 + VMOVDQA X2, X6 + VMOVDQA X11, X7 + VPADDQ 4*16(Stack), X7, X7 + MOVQ Rounds, Tmp0 + + VMOVDQA 6*16(Stack), X1 // Load 16 bit rotate-left constant + VMOVDQA 7*16(Stack), X2 // Load 8 bit rotate-left constant + +CHACHA_LOOP_192: + CHACHA_QROUND_AVX(X12, X13, X14, X15, X0, X1, X2) + CHACHA_QROUND_AVX(X8, X9, X10, X11, X0, X1, X2) + CHACHA_QROUND_AVX(X4, X5, X6, X7, X0, X1, X2) + CHACHA_SHUFFLE_AVX(X13, X14, X15) + CHACHA_SHUFFLE_AVX(X9, X10, X11) + CHACHA_SHUFFLE_AVX(X5, X6, X7) + CHACHA_QROUND_AVX(X12, X13, X14, X15, X0, X1, X2) + CHACHA_QROUND_AVX(X8, X9, X10, X11, X0, X1, X2) + CHACHA_QROUND_AVX(X4, X5, X6, X7, X0, X1, X2) + CHACHA_SHUFFLE_AVX(X15, X14, X13) + CHACHA_SHUFFLE_AVX(X11, X10, X9) + CHACHA_SHUFFLE_AVX(X7, X6, X5) + SUBQ $2, Tmp0 + JNZ CHACHA_LOOP_192 + + VMOVDQA 0*16(Stack), X0 // Restore X0 + VMOVDQA 1*16(Stack), X1 // Restore X1 + VMOVDQA 2*16(Stack), X2 // Restore X2 + VPADDD X0, X12, X12 + VPADDD X1, X13, X13 + VPADDD X2, X14, X14 + VPADDD X3, X15, X15 + VPADDQ 4*16(Stack), X3, X3 + VPADDD X0, X8, X8 + VPADDD X1, X9, X9 + VPADDD X2, X10, X10 + VPADDD X3, X11, X11 + VPADDQ 4*16(Stack), X3, X3 + VPADDD X0, X4, X4 + VPADDD X1, X5, X5 + VPADDD X2, X6, X6 + VPADDD X3, X7, X7 + VPADDQ 4*16(Stack), X3, X3 + + XOR_AVX(Dst, Src, 0, X12, X13, X14, X15, X0) + XOR_AVX(Dst, Src, 64, X8, X9, X10, X11, X0) + VMOVDQA 0*16(Stack), X0 // Restore X0 + ADDQ $128, Dst + ADDQ $128, Src + SUBQ $128, Len + + CMPQ Len, $64 + JL BUFFER_KEYSTREAM + + XOR_AVX(Dst, Src, 0, X4, X5, X6, X7, X8) + ADDQ $64, Dst + ADDQ $64, Src + SUBQ $64, Len + JZ DONE + CMPQ Len, $64 // If Len <= 64 -> gen. only 64 byte keystream. + JLE GENERATE_KEYSTREAM_64 + +GENERATE_KEYSTREAM_128: + VMOVDQA X0, X8 + VMOVDQA X1, X9 + VMOVDQA X2, X10 + VMOVDQA X3, X11 + VMOVDQA X0, X4 + VMOVDQA X1, X5 + VMOVDQA X2, X6 + VMOVDQA X3, X7 + VPADDQ 4*16(Stack), X7, X7 + MOVQ Rounds, Tmp0 + + VMOVDQA 6*16(Stack), X13 // Load 16 bit rotate-left constant + VMOVDQA 7*16(Stack), X14 // Load 8 bit rotate-left constant + +CHACHA_LOOP_128: + CHACHA_QROUND_AVX(X8, X9, X10, X11, X12, X13, X14) + CHACHA_QROUND_AVX(X4, X5, X6, X7, X12, X13, X14) + CHACHA_SHUFFLE_AVX(X9, X10, X11) + CHACHA_SHUFFLE_AVX(X5, X6, X7) + CHACHA_QROUND_AVX(X8, X9, X10, X11, X12, X13, X14) + CHACHA_QROUND_AVX(X4, X5, X6, X7, X12, X13, X14) + CHACHA_SHUFFLE_AVX(X11, X10, X9) + CHACHA_SHUFFLE_AVX(X7, X6, X5) + SUBQ $2, Tmp0 + JNZ CHACHA_LOOP_128 + + VPADDD X0, X8, X8 + VPADDD X1, X9, X9 + VPADDD X2, X10, X10 + VPADDD X3, X11, X11 + VPADDQ 4*16(Stack), X3, X3 + VPADDD X0, X4, X4 + VPADDD X1, X5, X5 + VPADDD X2, X6, X6 + VPADDD X3, X7, X7 + VPADDQ 4*16(Stack), X3, X3 + + XOR_AVX(Dst, Src, 0, X8, X9, X10, X11, X12) + ADDQ $64, Dst + ADDQ $64, Src + SUBQ $64, Len + + CMPQ Len, $64 + JL BUFFER_KEYSTREAM + + XOR_AVX(Dst, Src, 0, X4, X5, X6, X7, X8) + ADDQ $64, Dst + ADDQ $64, Src + SUBQ $64, Len + JZ DONE // If Len == 0 -> DONE, otherwise Len <= 64 -> gen 64 byte keystream + +GENERATE_KEYSTREAM_64: + VMOVDQA X0, X4 + VMOVDQA X1, X5 + VMOVDQA X2, X6 + VMOVDQA X3, X7 + MOVQ Rounds, Tmp0 + + VMOVDQA 6*16(Stack), X9 // Load 16 bit rotate-left constant + VMOVDQA 7*16(Stack), X10 // Load 8 bit rotate-left constant + +CHACHA_LOOP_64: + CHACHA_QROUND_AVX(X4, X5, X6, X7, X8, X9, X10) + CHACHA_SHUFFLE_AVX(X5, X6, X7) + CHACHA_QROUND_AVX(X4, X5, X6, X7, X8, X9, X10) + CHACHA_SHUFFLE_AVX(X7, X6, X5) + SUBQ $2, Tmp0 + JNZ CHACHA_LOOP_64 + + VPADDD X0, X4, X4 + VPADDD X1, X5, X5 + VPADDD X2, X6, X6 + VPADDD X3, X7, X7 + VPADDQ 4*16(Stack), X3, X3 + + CMPQ Len, $64 + JL BUFFER_KEYSTREAM + + XOR_AVX(Dst, Src, 0, X4, X5, X6, X7, X8) + ADDQ $64, Src + ADDQ $64, Dst + SUBQ $64, Len + JMP DONE // jump directly to DONE - there is no keystream to buffer, Len == 0 always true. + +BUFFER_KEYSTREAM: + VMOVDQU X4, 0*16(Buffer) + VMOVDQU X5, 1*16(Buffer) + VMOVDQU X6, 2*16(Buffer) + VMOVDQU X7, 3*16(Buffer) + MOVQ Len, Tmp0 + FINALIZE(Dst, Src, Buffer, Tmp0, Tmp1, Tmp2) + +DONE: + MOVQ SavedSP, Stack // Restore stack pointer + VMOVDQU X3, 3*16(State) + VZEROUPPER + MOVQ Len, ret+72(FP) + RET + +#undef Dst +#undef Src +#undef Len +#undef Rounds +#undef Buffer +#undef State +#undef Stack +#undef SavedSP +#undef Tmp0 +#undef Tmp1 +#undef Tmp2 diff --git a/vendor/github.com/aead/chacha20/chacha/chacha_generic.go b/vendor/github.com/aead/chacha20/chacha/chacha_generic.go new file mode 100644 index 0000000..8832d5b --- /dev/null +++ b/vendor/github.com/aead/chacha20/chacha/chacha_generic.go @@ -0,0 +1,319 @@ +// Copyright (c) 2016 Andreas Auernhammer. All rights reserved. +// Use of this source code is governed by a license that can be +// found in the LICENSE file. + +package chacha + +import "encoding/binary" + +var sigma = [4]uint32{0x61707865, 0x3320646e, 0x79622d32, 0x6b206574} + +func xorKeyStreamGeneric(dst, src []byte, block, state *[64]byte, rounds int) int { + for len(src) >= 64 { + chachaGeneric(block, state, rounds) + + for i, v := range block { + dst[i] = src[i] ^ v + } + src = src[64:] + dst = dst[64:] + } + + n := len(src) + if n > 0 { + chachaGeneric(block, state, rounds) + for i, v := range src { + dst[i] = v ^ block[i] + } + } + return n +} + +func chachaGeneric(dst *[64]byte, state *[64]byte, rounds int) { + v00 := binary.LittleEndian.Uint32(state[0:]) + v01 := binary.LittleEndian.Uint32(state[4:]) + v02 := binary.LittleEndian.Uint32(state[8:]) + v03 := binary.LittleEndian.Uint32(state[12:]) + v04 := binary.LittleEndian.Uint32(state[16:]) + v05 := binary.LittleEndian.Uint32(state[20:]) + v06 := binary.LittleEndian.Uint32(state[24:]) + v07 := binary.LittleEndian.Uint32(state[28:]) + v08 := binary.LittleEndian.Uint32(state[32:]) + v09 := binary.LittleEndian.Uint32(state[36:]) + v10 := binary.LittleEndian.Uint32(state[40:]) + v11 := binary.LittleEndian.Uint32(state[44:]) + v12 := binary.LittleEndian.Uint32(state[48:]) + v13 := binary.LittleEndian.Uint32(state[52:]) + v14 := binary.LittleEndian.Uint32(state[56:]) + v15 := binary.LittleEndian.Uint32(state[60:]) + + s00, s01, s02, s03, s04, s05, s06, s07 := v00, v01, v02, v03, v04, v05, v06, v07 + s08, s09, s10, s11, s12, s13, s14, s15 := v08, v09, v10, v11, v12, v13, v14, v15 + + for i := 0; i < rounds; i += 2 { + v00 += v04 + v12 ^= v00 + v12 = (v12 << 16) | (v12 >> 16) + v08 += v12 + v04 ^= v08 + v04 = (v04 << 12) | (v04 >> 20) + v00 += v04 + v12 ^= v00 + v12 = (v12 << 8) | (v12 >> 24) + v08 += v12 + v04 ^= v08 + v04 = (v04 << 7) | (v04 >> 25) + v01 += v05 + v13 ^= v01 + v13 = (v13 << 16) | (v13 >> 16) + v09 += v13 + v05 ^= v09 + v05 = (v05 << 12) | (v05 >> 20) + v01 += v05 + v13 ^= v01 + v13 = (v13 << 8) | (v13 >> 24) + v09 += v13 + v05 ^= v09 + v05 = (v05 << 7) | (v05 >> 25) + v02 += v06 + v14 ^= v02 + v14 = (v14 << 16) | (v14 >> 16) + v10 += v14 + v06 ^= v10 + v06 = (v06 << 12) | (v06 >> 20) + v02 += v06 + v14 ^= v02 + v14 = (v14 << 8) | (v14 >> 24) + v10 += v14 + v06 ^= v10 + v06 = (v06 << 7) | (v06 >> 25) + v03 += v07 + v15 ^= v03 + v15 = (v15 << 16) | (v15 >> 16) + v11 += v15 + v07 ^= v11 + v07 = (v07 << 12) | (v07 >> 20) + v03 += v07 + v15 ^= v03 + v15 = (v15 << 8) | (v15 >> 24) + v11 += v15 + v07 ^= v11 + v07 = (v07 << 7) | (v07 >> 25) + v00 += v05 + v15 ^= v00 + v15 = (v15 << 16) | (v15 >> 16) + v10 += v15 + v05 ^= v10 + v05 = (v05 << 12) | (v05 >> 20) + v00 += v05 + v15 ^= v00 + v15 = (v15 << 8) | (v15 >> 24) + v10 += v15 + v05 ^= v10 + v05 = (v05 << 7) | (v05 >> 25) + v01 += v06 + v12 ^= v01 + v12 = (v12 << 16) | (v12 >> 16) + v11 += v12 + v06 ^= v11 + v06 = (v06 << 12) | (v06 >> 20) + v01 += v06 + v12 ^= v01 + v12 = (v12 << 8) | (v12 >> 24) + v11 += v12 + v06 ^= v11 + v06 = (v06 << 7) | (v06 >> 25) + v02 += v07 + v13 ^= v02 + v13 = (v13 << 16) | (v13 >> 16) + v08 += v13 + v07 ^= v08 + v07 = (v07 << 12) | (v07 >> 20) + v02 += v07 + v13 ^= v02 + v13 = (v13 << 8) | (v13 >> 24) + v08 += v13 + v07 ^= v08 + v07 = (v07 << 7) | (v07 >> 25) + v03 += v04 + v14 ^= v03 + v14 = (v14 << 16) | (v14 >> 16) + v09 += v14 + v04 ^= v09 + v04 = (v04 << 12) | (v04 >> 20) + v03 += v04 + v14 ^= v03 + v14 = (v14 << 8) | (v14 >> 24) + v09 += v14 + v04 ^= v09 + v04 = (v04 << 7) | (v04 >> 25) + } + + v00 += s00 + v01 += s01 + v02 += s02 + v03 += s03 + v04 += s04 + v05 += s05 + v06 += s06 + v07 += s07 + v08 += s08 + v09 += s09 + v10 += s10 + v11 += s11 + v12 += s12 + v13 += s13 + v14 += s14 + v15 += s15 + + s12++ + binary.LittleEndian.PutUint32(state[48:], s12) + if s12 == 0 { // indicates overflow + s13++ + binary.LittleEndian.PutUint32(state[52:], s13) + } + + binary.LittleEndian.PutUint32(dst[0:], v00) + binary.LittleEndian.PutUint32(dst[4:], v01) + binary.LittleEndian.PutUint32(dst[8:], v02) + binary.LittleEndian.PutUint32(dst[12:], v03) + binary.LittleEndian.PutUint32(dst[16:], v04) + binary.LittleEndian.PutUint32(dst[20:], v05) + binary.LittleEndian.PutUint32(dst[24:], v06) + binary.LittleEndian.PutUint32(dst[28:], v07) + binary.LittleEndian.PutUint32(dst[32:], v08) + binary.LittleEndian.PutUint32(dst[36:], v09) + binary.LittleEndian.PutUint32(dst[40:], v10) + binary.LittleEndian.PutUint32(dst[44:], v11) + binary.LittleEndian.PutUint32(dst[48:], v12) + binary.LittleEndian.PutUint32(dst[52:], v13) + binary.LittleEndian.PutUint32(dst[56:], v14) + binary.LittleEndian.PutUint32(dst[60:], v15) +} + +func hChaCha20Generic(out *[32]byte, nonce *[16]byte, key *[32]byte) { + v00 := sigma[0] + v01 := sigma[1] + v02 := sigma[2] + v03 := sigma[3] + v04 := binary.LittleEndian.Uint32(key[0:]) + v05 := binary.LittleEndian.Uint32(key[4:]) + v06 := binary.LittleEndian.Uint32(key[8:]) + v07 := binary.LittleEndian.Uint32(key[12:]) + v08 := binary.LittleEndian.Uint32(key[16:]) + v09 := binary.LittleEndian.Uint32(key[20:]) + v10 := binary.LittleEndian.Uint32(key[24:]) + v11 := binary.LittleEndian.Uint32(key[28:]) + v12 := binary.LittleEndian.Uint32(nonce[0:]) + v13 := binary.LittleEndian.Uint32(nonce[4:]) + v14 := binary.LittleEndian.Uint32(nonce[8:]) + v15 := binary.LittleEndian.Uint32(nonce[12:]) + + for i := 0; i < 20; i += 2 { + v00 += v04 + v12 ^= v00 + v12 = (v12 << 16) | (v12 >> 16) + v08 += v12 + v04 ^= v08 + v04 = (v04 << 12) | (v04 >> 20) + v00 += v04 + v12 ^= v00 + v12 = (v12 << 8) | (v12 >> 24) + v08 += v12 + v04 ^= v08 + v04 = (v04 << 7) | (v04 >> 25) + v01 += v05 + v13 ^= v01 + v13 = (v13 << 16) | (v13 >> 16) + v09 += v13 + v05 ^= v09 + v05 = (v05 << 12) | (v05 >> 20) + v01 += v05 + v13 ^= v01 + v13 = (v13 << 8) | (v13 >> 24) + v09 += v13 + v05 ^= v09 + v05 = (v05 << 7) | (v05 >> 25) + v02 += v06 + v14 ^= v02 + v14 = (v14 << 16) | (v14 >> 16) + v10 += v14 + v06 ^= v10 + v06 = (v06 << 12) | (v06 >> 20) + v02 += v06 + v14 ^= v02 + v14 = (v14 << 8) | (v14 >> 24) + v10 += v14 + v06 ^= v10 + v06 = (v06 << 7) | (v06 >> 25) + v03 += v07 + v15 ^= v03 + v15 = (v15 << 16) | (v15 >> 16) + v11 += v15 + v07 ^= v11 + v07 = (v07 << 12) | (v07 >> 20) + v03 += v07 + v15 ^= v03 + v15 = (v15 << 8) | (v15 >> 24) + v11 += v15 + v07 ^= v11 + v07 = (v07 << 7) | (v07 >> 25) + v00 += v05 + v15 ^= v00 + v15 = (v15 << 16) | (v15 >> 16) + v10 += v15 + v05 ^= v10 + v05 = (v05 << 12) | (v05 >> 20) + v00 += v05 + v15 ^= v00 + v15 = (v15 << 8) | (v15 >> 24) + v10 += v15 + v05 ^= v10 + v05 = (v05 << 7) | (v05 >> 25) + v01 += v06 + v12 ^= v01 + v12 = (v12 << 16) | (v12 >> 16) + v11 += v12 + v06 ^= v11 + v06 = (v06 << 12) | (v06 >> 20) + v01 += v06 + v12 ^= v01 + v12 = (v12 << 8) | (v12 >> 24) + v11 += v12 + v06 ^= v11 + v06 = (v06 << 7) | (v06 >> 25) + v02 += v07 + v13 ^= v02 + v13 = (v13 << 16) | (v13 >> 16) + v08 += v13 + v07 ^= v08 + v07 = (v07 << 12) | (v07 >> 20) + v02 += v07 + v13 ^= v02 + v13 = (v13 << 8) | (v13 >> 24) + v08 += v13 + v07 ^= v08 + v07 = (v07 << 7) | (v07 >> 25) + v03 += v04 + v14 ^= v03 + v14 = (v14 << 16) | (v14 >> 16) + v09 += v14 + v04 ^= v09 + v04 = (v04 << 12) | (v04 >> 20) + v03 += v04 + v14 ^= v03 + v14 = (v14 << 8) | (v14 >> 24) + v09 += v14 + v04 ^= v09 + v04 = (v04 << 7) | (v04 >> 25) + } + + binary.LittleEndian.PutUint32(out[0:], v00) + binary.LittleEndian.PutUint32(out[4:], v01) + binary.LittleEndian.PutUint32(out[8:], v02) + binary.LittleEndian.PutUint32(out[12:], v03) + binary.LittleEndian.PutUint32(out[16:], v12) + binary.LittleEndian.PutUint32(out[20:], v13) + binary.LittleEndian.PutUint32(out[24:], v14) + binary.LittleEndian.PutUint32(out[28:], v15) +} diff --git a/vendor/github.com/aead/chacha20/chacha/chacha_ref.go b/vendor/github.com/aead/chacha20/chacha/chacha_ref.go new file mode 100644 index 0000000..526877c --- /dev/null +++ b/vendor/github.com/aead/chacha20/chacha/chacha_ref.go @@ -0,0 +1,33 @@ +// Copyright (c) 2016 Andreas Auernhammer. All rights reserved. +// Use of this source code is governed by a license that can be +// found in the LICENSE file. + +// +build !amd64,!386 gccgo appengine nacl + +package chacha + +import "encoding/binary" + +func init() { + useSSE2 = false + useSSSE3 = false + useAVX = false + useAVX2 = false +} + +func initialize(state *[64]byte, key []byte, nonce *[16]byte) { + binary.LittleEndian.PutUint32(state[0:], sigma[0]) + binary.LittleEndian.PutUint32(state[4:], sigma[1]) + binary.LittleEndian.PutUint32(state[8:], sigma[2]) + binary.LittleEndian.PutUint32(state[12:], sigma[3]) + copy(state[16:], key[:]) + copy(state[48:], nonce[:]) +} + +func xorKeyStream(dst, src []byte, block, state *[64]byte, rounds int) int { + return xorKeyStreamGeneric(dst, src, block, state, rounds) +} + +func hChaCha20(out *[32]byte, nonce *[16]byte, key *[32]byte) { + hChaCha20Generic(out, nonce, key) +} diff --git a/vendor/github.com/aead/chacha20/chacha/const.s b/vendor/github.com/aead/chacha20/chacha/const.s new file mode 100644 index 0000000..c7a94a4 --- /dev/null +++ b/vendor/github.com/aead/chacha20/chacha/const.s @@ -0,0 +1,53 @@ +// Copyright (c) 2018 Andreas Auernhammer. All rights reserved. +// Use of this source code is governed by a license that can be +// found in the LICENSE file. + +// +build 386,!gccgo,!appengine,!nacl amd64,!gccgo,!appengine,!nacl + +#include "textflag.h" + +DATA ·sigma<>+0x00(SB)/4, $0x61707865 +DATA ·sigma<>+0x04(SB)/4, $0x3320646e +DATA ·sigma<>+0x08(SB)/4, $0x79622d32 +DATA ·sigma<>+0x0C(SB)/4, $0x6b206574 +GLOBL ·sigma<>(SB), (NOPTR+RODATA), $16 // The 4 ChaCha initialization constants + +// SSE2/SSE3/AVX constants + +DATA ·one<>+0x00(SB)/8, $1 +DATA ·one<>+0x08(SB)/8, $0 +GLOBL ·one<>(SB), (NOPTR+RODATA), $16 // The constant 1 as 128 bit value + +DATA ·rol16<>+0x00(SB)/8, $0x0504070601000302 +DATA ·rol16<>+0x08(SB)/8, $0x0D0C0F0E09080B0A +GLOBL ·rol16<>(SB), (NOPTR+RODATA), $16 // The PSHUFB 16 bit left rotate constant + +DATA ·rol8<>+0x00(SB)/8, $0x0605040702010003 +DATA ·rol8<>+0x08(SB)/8, $0x0E0D0C0F0A09080B +GLOBL ·rol8<>(SB), (NOPTR+RODATA), $16 // The PSHUFB 8 bit left rotate constant + +// AVX2 constants + +DATA ·one_AVX2<>+0x00(SB)/8, $0 +DATA ·one_AVX2<>+0x08(SB)/8, $0 +DATA ·one_AVX2<>+0x10(SB)/8, $1 +DATA ·one_AVX2<>+0x18(SB)/8, $0 +GLOBL ·one_AVX2<>(SB), (NOPTR+RODATA), $32 // The constant 1 as 256 bit value + +DATA ·two_AVX2<>+0x00(SB)/8, $2 +DATA ·two_AVX2<>+0x08(SB)/8, $0 +DATA ·two_AVX2<>+0x10(SB)/8, $2 +DATA ·two_AVX2<>+0x18(SB)/8, $0 +GLOBL ·two_AVX2<>(SB), (NOPTR+RODATA), $32 + +DATA ·rol16_AVX2<>+0x00(SB)/8, $0x0504070601000302 +DATA ·rol16_AVX2<>+0x08(SB)/8, $0x0D0C0F0E09080B0A +DATA ·rol16_AVX2<>+0x10(SB)/8, $0x0504070601000302 +DATA ·rol16_AVX2<>+0x18(SB)/8, $0x0D0C0F0E09080B0A +GLOBL ·rol16_AVX2<>(SB), (NOPTR+RODATA), $32 // The VPSHUFB 16 bit left rotate constant + +DATA ·rol8_AVX2<>+0x00(SB)/8, $0x0605040702010003 +DATA ·rol8_AVX2<>+0x08(SB)/8, $0x0E0D0C0F0A09080B +DATA ·rol8_AVX2<>+0x10(SB)/8, $0x0605040702010003 +DATA ·rol8_AVX2<>+0x18(SB)/8, $0x0E0D0C0F0A09080B +GLOBL ·rol8_AVX2<>(SB), (NOPTR+RODATA), $32 // The VPSHUFB 8 bit left rotate constant diff --git a/vendor/github.com/aead/chacha20/chacha/macro.s b/vendor/github.com/aead/chacha20/chacha/macro.s new file mode 100644 index 0000000..780108f --- /dev/null +++ b/vendor/github.com/aead/chacha20/chacha/macro.s @@ -0,0 +1,163 @@ +// Copyright (c) 2018 Andreas Auernhammer. All rights reserved. +// Use of this source code is governed by a license that can be +// found in the LICENSE file. + +// +build 386,!gccgo,!appengine,!nacl amd64,!gccgo,!appengine,!nacl + +// ROTL_SSE rotates all 4 32 bit values of the XMM register v +// left by n bits using SSE2 instructions (0 <= n <= 32). +// The XMM register t is used as a temp. register. +#define ROTL_SSE(n, t, v) \ + MOVO v, t; \ + PSLLL $n, t; \ + PSRLL $(32-n), v; \ + PXOR t, v + +// ROTL_AVX rotates all 4/8 32 bit values of the AVX/AVX2 register v +// left by n bits using AVX/AVX2 instructions (0 <= n <= 32). +// The AVX/AVX2 register t is used as a temp. register. +#define ROTL_AVX(n, t, v) \ + VPSLLD $n, v, t; \ + VPSRLD $(32-n), v, v; \ + VPXOR v, t, v + +// CHACHA_QROUND_SSE2 performs a ChaCha quarter-round using the +// 4 XMM registers v0, v1, v2 and v3. It uses only ROTL_SSE2 for +// rotations. The XMM register t is used as a temp. register. +#define CHACHA_QROUND_SSE2(v0, v1, v2, v3, t) \ + PADDL v1, v0; \ + PXOR v0, v3; \ + ROTL_SSE(16, t, v3); \ + PADDL v3, v2; \ + PXOR v2, v1; \ + ROTL_SSE(12, t, v1); \ + PADDL v1, v0; \ + PXOR v0, v3; \ + ROTL_SSE(8, t, v3); \ + PADDL v3, v2; \ + PXOR v2, v1; \ + ROTL_SSE(7, t, v1) + +// CHACHA_QROUND_SSSE3 performs a ChaCha quarter-round using the +// 4 XMM registers v0, v1, v2 and v3. It uses PSHUFB for 8/16 bit +// rotations. The XMM register t is used as a temp. register. +// +// r16 holds the PSHUFB constant for a 16 bit left rotate. +// r8 holds the PSHUFB constant for a 8 bit left rotate. +#define CHACHA_QROUND_SSSE3(v0, v1, v2, v3, t, r16, r8) \ + PADDL v1, v0; \ + PXOR v0, v3; \ + PSHUFB r16, v3; \ + PADDL v3, v2; \ + PXOR v2, v1; \ + ROTL_SSE(12, t, v1); \ + PADDL v1, v0; \ + PXOR v0, v3; \ + PSHUFB r8, v3; \ + PADDL v3, v2; \ + PXOR v2, v1; \ + ROTL_SSE(7, t, v1) + +// CHACHA_QROUND_AVX performs a ChaCha quarter-round using the +// 4 AVX/AVX2 registers v0, v1, v2 and v3. It uses VPSHUFB for 8/16 bit +// rotations. The AVX/AVX2 register t is used as a temp. register. +// +// r16 holds the VPSHUFB constant for a 16 bit left rotate. +// r8 holds the VPSHUFB constant for a 8 bit left rotate. +#define CHACHA_QROUND_AVX(v0, v1, v2, v3, t, r16, r8) \ + VPADDD v0, v1, v0; \ + VPXOR v3, v0, v3; \ + VPSHUFB r16, v3, v3; \ + VPADDD v2, v3, v2; \ + VPXOR v1, v2, v1; \ + ROTL_AVX(12, t, v1); \ + VPADDD v0, v1, v0; \ + VPXOR v3, v0, v3; \ + VPSHUFB r8, v3, v3; \ + VPADDD v2, v3, v2; \ + VPXOR v1, v2, v1; \ + ROTL_AVX(7, t, v1) + +// CHACHA_SHUFFLE_SSE performs a ChaCha shuffle using the +// 3 XMM registers v1, v2 and v3. The inverse shuffle is +// performed by switching v1 and v3: CHACHA_SHUFFLE_SSE(v3, v2, v1). +#define CHACHA_SHUFFLE_SSE(v1, v2, v3) \ + PSHUFL $0x39, v1, v1; \ + PSHUFL $0x4E, v2, v2; \ + PSHUFL $0x93, v3, v3 + +// CHACHA_SHUFFLE_AVX performs a ChaCha shuffle using the +// 3 AVX/AVX2 registers v1, v2 and v3. The inverse shuffle is +// performed by switching v1 and v3: CHACHA_SHUFFLE_AVX(v3, v2, v1). +#define CHACHA_SHUFFLE_AVX(v1, v2, v3) \ + VPSHUFD $0x39, v1, v1; \ + VPSHUFD $0x4E, v2, v2; \ + VPSHUFD $0x93, v3, v3 + +// XOR_SSE extracts 4x16 byte vectors from src at +// off, xors all vectors with the corresponding XMM +// register (v0 - v3) and writes the result to dst +// at off. +// The XMM register t is used as a temp. register. +#define XOR_SSE(dst, src, off, v0, v1, v2, v3, t) \ + MOVOU 0+off(src), t; \ + PXOR v0, t; \ + MOVOU t, 0+off(dst); \ + MOVOU 16+off(src), t; \ + PXOR v1, t; \ + MOVOU t, 16+off(dst); \ + MOVOU 32+off(src), t; \ + PXOR v2, t; \ + MOVOU t, 32+off(dst); \ + MOVOU 48+off(src), t; \ + PXOR v3, t; \ + MOVOU t, 48+off(dst) + +// XOR_AVX extracts 4x16 byte vectors from src at +// off, xors all vectors with the corresponding AVX +// register (v0 - v3) and writes the result to dst +// at off. +// The XMM register t is used as a temp. register. +#define XOR_AVX(dst, src, off, v0, v1, v2, v3, t) \ + VPXOR 0+off(src), v0, t; \ + VMOVDQU t, 0+off(dst); \ + VPXOR 16+off(src), v1, t; \ + VMOVDQU t, 16+off(dst); \ + VPXOR 32+off(src), v2, t; \ + VMOVDQU t, 32+off(dst); \ + VPXOR 48+off(src), v3, t; \ + VMOVDQU t, 48+off(dst) + +#define XOR_AVX2(dst, src, off, v0, v1, v2, v3, t0, t1) \ + VMOVDQU (0+off)(src), t0; \ + VPERM2I128 $32, v1, v0, t1; \ + VPXOR t0, t1, t0; \ + VMOVDQU t0, (0+off)(dst); \ + VMOVDQU (32+off)(src), t0; \ + VPERM2I128 $32, v3, v2, t1; \ + VPXOR t0, t1, t0; \ + VMOVDQU t0, (32+off)(dst); \ + VMOVDQU (64+off)(src), t0; \ + VPERM2I128 $49, v1, v0, t1; \ + VPXOR t0, t1, t0; \ + VMOVDQU t0, (64+off)(dst); \ + VMOVDQU (96+off)(src), t0; \ + VPERM2I128 $49, v3, v2, t1; \ + VPXOR t0, t1, t0; \ + VMOVDQU t0, (96+off)(dst) + +#define XOR_UPPER_AVX2(dst, src, off, v0, v1, v2, v3, t0, t1) \ + VMOVDQU (0+off)(src), t0; \ + VPERM2I128 $32, v1, v0, t1; \ + VPXOR t0, t1, t0; \ + VMOVDQU t0, (0+off)(dst); \ + VMOVDQU (32+off)(src), t0; \ + VPERM2I128 $32, v3, v2, t1; \ + VPXOR t0, t1, t0; \ + VMOVDQU t0, (32+off)(dst); \ + +#define EXTRACT_LOWER(dst, v0, v1, v2, v3, t0) \ + VPERM2I128 $49, v1, v0, t0; \ + VMOVDQU t0, 0(dst); \ + VPERM2I128 $49, v3, v2, t0; \ + VMOVDQU t0, 32(dst) diff --git a/vendor/github.com/creack/pty/.gitignore b/vendor/github.com/creack/pty/.gitignore new file mode 100644 index 0000000..1f0a99f --- /dev/null +++ b/vendor/github.com/creack/pty/.gitignore @@ -0,0 +1,4 @@ +[568].out +_go* +_test* +_obj diff --git a/vendor/github.com/creack/pty/Dockerfile.golang b/vendor/github.com/creack/pty/Dockerfile.golang new file mode 100644 index 0000000..2ee82a3 --- /dev/null +++ b/vendor/github.com/creack/pty/Dockerfile.golang @@ -0,0 +1,17 @@ +ARG GOVERSION=1.14 +FROM golang:${GOVERSION} + +# Set base env. +ARG GOOS=linux +ARG GOARCH=amd64 +ENV GOOS=${GOOS} GOARCH=${GOARCH} CGO_ENABLED=0 GOFLAGS='-v -ldflags=-s -ldflags=-w' + +# Pre compile the stdlib for 386/arm (32bits). +RUN go build -a std + +# Add the code to the image. +WORKDIR pty +ADD . . + +# Build the lib. +RUN go build diff --git a/vendor/github.com/creack/pty/Dockerfile.riscv b/vendor/github.com/creack/pty/Dockerfile.riscv new file mode 100644 index 0000000..7a30c94 --- /dev/null +++ b/vendor/github.com/creack/pty/Dockerfile.riscv @@ -0,0 +1,23 @@ +# NOTE: Using 1.13 as a base to build the RISCV compiler, the resulting version is based on go1.6. +FROM golang:1.13 + +# Clone and complie a riscv compatible version of the go compiler. +RUN git clone https://review.gerrithub.io/riscv/riscv-go /riscv-go +# riscvdev branch HEAD as of 2019-06-29. +RUN cd /riscv-go && git checkout 04885fddd096d09d4450726064d06dd107e374bf +ENV PATH=/riscv-go/misc/riscv:/riscv-go/bin:$PATH +RUN cd /riscv-go/src && GOROOT_BOOTSTRAP=$(go env GOROOT) ./make.bash +ENV GOROOT=/riscv-go + +# Set the base env. +ENV GOOS=linux GOARCH=riscv CGO_ENABLED=0 GOFLAGS='-v -ldflags=-s -ldflags=-w' + +# Pre compile the stdlib. +RUN go build -a std + +# Add the code to the image. +WORKDIR pty +ADD . . + +# Build the lib. +RUN go build diff --git a/vendor/github.com/creack/pty/LICENSE b/vendor/github.com/creack/pty/LICENSE new file mode 100644 index 0000000..6b7558b --- /dev/null +++ b/vendor/github.com/creack/pty/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2011 Keith Rarick + +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/creack/pty/README.md b/vendor/github.com/creack/pty/README.md new file mode 100644 index 0000000..a4fe767 --- /dev/null +++ b/vendor/github.com/creack/pty/README.md @@ -0,0 +1,107 @@ +# pty + +Pty is a Go package for using unix pseudo-terminals. + +## Install + +```sh +go get github.com/creack/pty +``` + +## Examples + +Note that those examples are for demonstration purpose only, to showcase how to use the library. They are not meant to be used in any kind of production environment. + +### Command + +```go +package main + +import ( + "io" + "os" + "os/exec" + + "github.com/creack/pty" +) + +func main() { + c := exec.Command("grep", "--color=auto", "bar") + f, err := pty.Start(c) + if err != nil { + panic(err) + } + + go func() { + f.Write([]byte("foo\n")) + f.Write([]byte("bar\n")) + f.Write([]byte("baz\n")) + f.Write([]byte{4}) // EOT + }() + io.Copy(os.Stdout, f) +} +``` + +### Shell + +```go +package main + +import ( + "io" + "log" + "os" + "os/exec" + "os/signal" + "syscall" + + "github.com/creack/pty" + "golang.org/x/term" +) + +func test() error { + // Create arbitrary command. + c := exec.Command("bash") + + // Start the command with a pty. + ptmx, err := pty.Start(c) + if err != nil { + return err + } + // Make sure to close the pty at the end. + defer func() { _ = ptmx.Close() }() // Best effort. + + // Handle pty size. + ch := make(chan os.Signal, 1) + signal.Notify(ch, syscall.SIGWINCH) + go func() { + for range ch { + if err := pty.InheritSize(os.Stdin, ptmx); err != nil { + log.Printf("error resizing pty: %s", err) + } + } + }() + ch <- syscall.SIGWINCH // Initial resize. + defer func() { signal.Stop(ch); close(ch) }() // Cleanup signals when done. + + // Set stdin in raw mode. + oldState, err := term.MakeRaw(int(os.Stdin.Fd())) + if err != nil { + panic(err) + } + defer func() { _ = term.Restore(int(os.Stdin.Fd()), oldState) }() // Best effort. + + // Copy stdin to the pty and the pty to stdout. + // NOTE: The goroutine will keep reading until the next keystroke before returning. + go func() { _, _ = io.Copy(ptmx, os.Stdin) }() + _, _ = io.Copy(os.Stdout, ptmx) + + return nil +} + +func main() { + if err := test(); err != nil { + log.Fatal(err) + } +} +``` diff --git a/vendor/github.com/creack/pty/asm_solaris_amd64.s b/vendor/github.com/creack/pty/asm_solaris_amd64.s new file mode 100644 index 0000000..7fbef8e --- /dev/null +++ b/vendor/github.com/creack/pty/asm_solaris_amd64.s @@ -0,0 +1,18 @@ +// 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 gc +//+build gc + +#include "textflag.h" + +// +// System calls for amd64, Solaris are implemented in runtime/syscall_solaris.go +// + +TEXT ·sysvicall6(SB),NOSPLIT,$0-88 + JMP syscall·sysvicall6(SB) + +TEXT ·rawSysvicall6(SB),NOSPLIT,$0-88 + JMP syscall·rawSysvicall6(SB) diff --git a/vendor/github.com/creack/pty/doc.go b/vendor/github.com/creack/pty/doc.go new file mode 100644 index 0000000..3c8b324 --- /dev/null +++ b/vendor/github.com/creack/pty/doc.go @@ -0,0 +1,16 @@ +// Package pty provides functions for working with Unix terminals. +package pty + +import ( + "errors" + "os" +) + +// ErrUnsupported is returned if a function is not +// available on the current platform. +var ErrUnsupported = errors.New("unsupported") + +// Open a pty and its corresponding tty. +func Open() (pty, tty *os.File, err error) { + return open() +} diff --git a/vendor/github.com/creack/pty/ioctl.go b/vendor/github.com/creack/pty/ioctl.go new file mode 100644 index 0000000..3cabedd --- /dev/null +++ b/vendor/github.com/creack/pty/ioctl.go @@ -0,0 +1,19 @@ +//go:build !windows && !solaris && !aix +// +build !windows,!solaris,!aix + +package pty + +import "syscall" + +const ( + TIOCGWINSZ = syscall.TIOCGWINSZ + TIOCSWINSZ = syscall.TIOCSWINSZ +) + +func ioctl(fd, cmd, ptr uintptr) error { + _, _, e := syscall.Syscall(syscall.SYS_IOCTL, fd, cmd, ptr) + if e != 0 { + return e + } + return nil +} diff --git a/vendor/github.com/creack/pty/ioctl_bsd.go b/vendor/github.com/creack/pty/ioctl_bsd.go new file mode 100644 index 0000000..db3bf84 --- /dev/null +++ b/vendor/github.com/creack/pty/ioctl_bsd.go @@ -0,0 +1,40 @@ +//go:build darwin || dragonfly || freebsd || netbsd || openbsd +// +build darwin dragonfly freebsd netbsd openbsd + +package pty + +// from +const ( + _IOC_VOID uintptr = 0x20000000 + _IOC_OUT uintptr = 0x40000000 + _IOC_IN uintptr = 0x80000000 + _IOC_IN_OUT uintptr = _IOC_OUT | _IOC_IN + _IOC_DIRMASK = _IOC_VOID | _IOC_OUT | _IOC_IN + + _IOC_PARAM_SHIFT = 13 + _IOC_PARAM_MASK = (1 << _IOC_PARAM_SHIFT) - 1 +) + +func _IOC_PARM_LEN(ioctl uintptr) uintptr { + return (ioctl >> 16) & _IOC_PARAM_MASK +} + +func _IOC(inout uintptr, group byte, ioctl_num uintptr, param_len uintptr) uintptr { + return inout | (param_len&_IOC_PARAM_MASK)<<16 | uintptr(group)<<8 | ioctl_num +} + +func _IO(group byte, ioctl_num uintptr) uintptr { + return _IOC(_IOC_VOID, group, ioctl_num, 0) +} + +func _IOR(group byte, ioctl_num uintptr, param_len uintptr) uintptr { + return _IOC(_IOC_OUT, group, ioctl_num, param_len) +} + +func _IOW(group byte, ioctl_num uintptr, param_len uintptr) uintptr { + return _IOC(_IOC_IN, group, ioctl_num, param_len) +} + +func _IOWR(group byte, ioctl_num uintptr, param_len uintptr) uintptr { + return _IOC(_IOC_IN_OUT, group, ioctl_num, param_len) +} diff --git a/vendor/github.com/creack/pty/ioctl_solaris.go b/vendor/github.com/creack/pty/ioctl_solaris.go new file mode 100644 index 0000000..bff22da --- /dev/null +++ b/vendor/github.com/creack/pty/ioctl_solaris.go @@ -0,0 +1,48 @@ +//go:build solaris +// +build solaris + +package pty + +import ( + "syscall" + "unsafe" +) + +//go:cgo_import_dynamic libc_ioctl ioctl "libc.so" +//go:linkname procioctl libc_ioctl +var procioctl uintptr + +const ( + // see /usr/include/sys/stropts.h + I_PUSH = uintptr((int32('S')<<8 | 002)) + I_STR = uintptr((int32('S')<<8 | 010)) + I_FIND = uintptr((int32('S')<<8 | 013)) + + // see /usr/include/sys/ptms.h + ISPTM = (int32('P') << 8) | 1 + UNLKPT = (int32('P') << 8) | 2 + PTSSTTY = (int32('P') << 8) | 3 + ZONEPT = (int32('P') << 8) | 4 + OWNERPT = (int32('P') << 8) | 5 + + // see /usr/include/sys/termios.h + TIOCSWINSZ = (uint32('T') << 8) | 103 + TIOCGWINSZ = (uint32('T') << 8) | 104 +) + +type strioctl struct { + icCmd int32 + icTimeout int32 + icLen int32 + icDP unsafe.Pointer +} + +// Defined in asm_solaris_amd64.s. +func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) + +func ioctl(fd, cmd, ptr uintptr) error { + if _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, fd, cmd, ptr, 0, 0, 0); errno != 0 { + return errno + } + return nil +} diff --git a/vendor/github.com/creack/pty/ioctl_unsupported.go b/vendor/github.com/creack/pty/ioctl_unsupported.go new file mode 100644 index 0000000..2449a27 --- /dev/null +++ b/vendor/github.com/creack/pty/ioctl_unsupported.go @@ -0,0 +1,13 @@ +//go:build aix +// +build aix + +package pty + +const ( + TIOCGWINSZ = 0 + TIOCSWINSZ = 0 +) + +func ioctl(fd, cmd, ptr uintptr) error { + return ErrUnsupported +} diff --git a/vendor/github.com/creack/pty/mktypes.bash b/vendor/github.com/creack/pty/mktypes.bash new file mode 100644 index 0000000..7f71bda --- /dev/null +++ b/vendor/github.com/creack/pty/mktypes.bash @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +GOOSARCH="${GOOS}_${GOARCH}" +case "$GOOSARCH" in +_* | *_ | _) + echo 'undefined $GOOS_$GOARCH:' "$GOOSARCH" 1>&2 + exit 1 + ;; +esac + +GODEFS="go tool cgo -godefs" + +$GODEFS types.go |gofmt > ztypes_$GOARCH.go + +case $GOOS in +freebsd|dragonfly|netbsd|openbsd) + $GODEFS types_$GOOS.go |gofmt > ztypes_$GOOSARCH.go + ;; +esac diff --git a/vendor/github.com/creack/pty/pty_darwin.go b/vendor/github.com/creack/pty/pty_darwin.go new file mode 100644 index 0000000..9bdd71d --- /dev/null +++ b/vendor/github.com/creack/pty/pty_darwin.go @@ -0,0 +1,68 @@ +//go:build darwin +// +build darwin + +package pty + +import ( + "errors" + "os" + "syscall" + "unsafe" +) + +func open() (pty, tty *os.File, err error) { + pFD, err := syscall.Open("/dev/ptmx", syscall.O_RDWR|syscall.O_CLOEXEC, 0) + if err != nil { + return nil, nil, err + } + p := os.NewFile(uintptr(pFD), "/dev/ptmx") + // In case of error after this point, make sure we close the ptmx fd. + defer func() { + if err != nil { + _ = p.Close() // Best effort. + } + }() + + sname, err := ptsname(p) + if err != nil { + return nil, nil, err + } + + if err := grantpt(p); err != nil { + return nil, nil, err + } + + if err := unlockpt(p); err != nil { + return nil, nil, err + } + + t, err := os.OpenFile(sname, os.O_RDWR|syscall.O_NOCTTY, 0) + if err != nil { + return nil, nil, err + } + return p, t, nil +} + +func ptsname(f *os.File) (string, error) { + n := make([]byte, _IOC_PARM_LEN(syscall.TIOCPTYGNAME)) + + err := ioctl(f.Fd(), syscall.TIOCPTYGNAME, uintptr(unsafe.Pointer(&n[0]))) + if err != nil { + return "", err + } + + for i, c := range n { + if c == 0 { + return string(n[:i]), nil + } + } + return "", errors.New("TIOCPTYGNAME string not NUL-terminated") +} + +func grantpt(f *os.File) error { + return ioctl(f.Fd(), syscall.TIOCPTYGRANT, 0) +} + +func unlockpt(f *os.File) error { + return ioctl(f.Fd(), syscall.TIOCPTYUNLK, 0) +} diff --git a/vendor/github.com/creack/pty/pty_dragonfly.go b/vendor/github.com/creack/pty/pty_dragonfly.go new file mode 100644 index 0000000..aa916aa --- /dev/null +++ b/vendor/github.com/creack/pty/pty_dragonfly.go @@ -0,0 +1,83 @@ +//go:build dragonfly +// +build dragonfly + +package pty + +import ( + "errors" + "os" + "strings" + "syscall" + "unsafe" +) + +// same code as pty_darwin.go +func open() (pty, tty *os.File, err error) { + p, err := os.OpenFile("/dev/ptmx", os.O_RDWR, 0) + if err != nil { + return nil, nil, err + } + // In case of error after this point, make sure we close the ptmx fd. + defer func() { + if err != nil { + _ = p.Close() // Best effort. + } + }() + + sname, err := ptsname(p) + if err != nil { + return nil, nil, err + } + + if err := grantpt(p); err != nil { + return nil, nil, err + } + + if err := unlockpt(p); err != nil { + return nil, nil, err + } + + t, err := os.OpenFile(sname, os.O_RDWR, 0) + if err != nil { + return nil, nil, err + } + return p, t, nil +} + +func grantpt(f *os.File) error { + _, err := isptmaster(f.Fd()) + return err +} + +func unlockpt(f *os.File) error { + _, err := isptmaster(f.Fd()) + return err +} + +func isptmaster(fd uintptr) (bool, error) { + err := ioctl(fd, syscall.TIOCISPTMASTER, 0) + return err == nil, err +} + +var ( + emptyFiodgnameArg fiodgnameArg + ioctl_FIODNAME = _IOW('f', 120, unsafe.Sizeof(emptyFiodgnameArg)) +) + +func ptsname(f *os.File) (string, error) { + name := make([]byte, _C_SPECNAMELEN) + fa := fiodgnameArg{Name: (*byte)(unsafe.Pointer(&name[0])), Len: _C_SPECNAMELEN, Pad_cgo_0: [4]byte{0, 0, 0, 0}} + + err := ioctl(f.Fd(), ioctl_FIODNAME, uintptr(unsafe.Pointer(&fa))) + if err != nil { + return "", err + } + + for i, c := range name { + if c == 0 { + s := "/dev/" + string(name[:i]) + return strings.Replace(s, "ptm", "pts", -1), nil + } + } + return "", errors.New("TIOCPTYGNAME string not NUL-terminated") +} diff --git a/vendor/github.com/creack/pty/pty_freebsd.go b/vendor/github.com/creack/pty/pty_freebsd.go new file mode 100644 index 0000000..bcd3b6f --- /dev/null +++ b/vendor/github.com/creack/pty/pty_freebsd.go @@ -0,0 +1,81 @@ +//go:build freebsd +// +build freebsd + +package pty + +import ( + "errors" + "os" + "syscall" + "unsafe" +) + +func posixOpenpt(oflag int) (fd int, err error) { + r0, _, e1 := syscall.Syscall(syscall.SYS_POSIX_OPENPT, uintptr(oflag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return fd, err +} + +func open() (pty, tty *os.File, err error) { + fd, err := posixOpenpt(syscall.O_RDWR | syscall.O_CLOEXEC) + if err != nil { + return nil, nil, err + } + p := os.NewFile(uintptr(fd), "/dev/pts") + // In case of error after this point, make sure we close the pts fd. + defer func() { + if err != nil { + _ = p.Close() // Best effort. + } + }() + + sname, err := ptsname(p) + if err != nil { + return nil, nil, err + } + + t, err := os.OpenFile("/dev/"+sname, os.O_RDWR, 0) + if err != nil { + return nil, nil, err + } + return p, t, nil +} + +func isptmaster(fd uintptr) (bool, error) { + err := ioctl(fd, syscall.TIOCPTMASTER, 0) + return err == nil, err +} + +var ( + emptyFiodgnameArg fiodgnameArg + ioctlFIODGNAME = _IOW('f', 120, unsafe.Sizeof(emptyFiodgnameArg)) +) + +func ptsname(f *os.File) (string, error) { + master, err := isptmaster(f.Fd()) + if err != nil { + return "", err + } + if !master { + return "", syscall.EINVAL + } + + const n = _C_SPECNAMELEN + 1 + var ( + buf = make([]byte, n) + arg = fiodgnameArg{Len: n, Buf: (*byte)(unsafe.Pointer(&buf[0]))} + ) + if err := ioctl(f.Fd(), ioctlFIODGNAME, uintptr(unsafe.Pointer(&arg))); err != nil { + return "", err + } + + for i, c := range buf { + if c == 0 { + return string(buf[:i]), nil + } + } + return "", errors.New("FIODGNAME string not NUL-terminated") +} diff --git a/vendor/github.com/creack/pty/pty_linux.go b/vendor/github.com/creack/pty/pty_linux.go new file mode 100644 index 0000000..a3b368f --- /dev/null +++ b/vendor/github.com/creack/pty/pty_linux.go @@ -0,0 +1,54 @@ +//go:build linux +// +build linux + +package pty + +import ( + "os" + "strconv" + "syscall" + "unsafe" +) + +func open() (pty, tty *os.File, err error) { + p, err := os.OpenFile("/dev/ptmx", os.O_RDWR, 0) + if err != nil { + return nil, nil, err + } + // In case of error after this point, make sure we close the ptmx fd. + defer func() { + if err != nil { + _ = p.Close() // Best effort. + } + }() + + sname, err := ptsname(p) + if err != nil { + return nil, nil, err + } + + if err := unlockpt(p); err != nil { + return nil, nil, err + } + + t, err := os.OpenFile(sname, os.O_RDWR|syscall.O_NOCTTY, 0) //nolint:gosec // Expected Open from a variable. + if err != nil { + return nil, nil, err + } + return p, t, nil +} + +func ptsname(f *os.File) (string, error) { + var n _C_uint + err := ioctl(f.Fd(), syscall.TIOCGPTN, uintptr(unsafe.Pointer(&n))) //nolint:gosec // Expected unsafe pointer for Syscall call. + if err != nil { + return "", err + } + return "/dev/pts/" + strconv.Itoa(int(n)), nil +} + +func unlockpt(f *os.File) error { + var u _C_int + // use TIOCSPTLCK with a pointer to zero to clear the lock + return ioctl(f.Fd(), syscall.TIOCSPTLCK, uintptr(unsafe.Pointer(&u))) //nolint:gosec // Expected unsafe pointer for Syscall call. +} diff --git a/vendor/github.com/creack/pty/pty_netbsd.go b/vendor/github.com/creack/pty/pty_netbsd.go new file mode 100644 index 0000000..2b20d94 --- /dev/null +++ b/vendor/github.com/creack/pty/pty_netbsd.go @@ -0,0 +1,69 @@ +//go:build netbsd +// +build netbsd + +package pty + +import ( + "errors" + "os" + "syscall" + "unsafe" +) + +func open() (pty, tty *os.File, err error) { + p, err := os.OpenFile("/dev/ptmx", os.O_RDWR, 0) + if err != nil { + return nil, nil, err + } + // In case of error after this point, make sure we close the ptmx fd. + defer func() { + if err != nil { + _ = p.Close() // Best effort. + } + }() + + sname, err := ptsname(p) + if err != nil { + return nil, nil, err + } + + if err := grantpt(p); err != nil { + return nil, nil, err + } + + // In NetBSD unlockpt() does nothing, so it isn't called here. + + t, err := os.OpenFile(sname, os.O_RDWR|syscall.O_NOCTTY, 0) + if err != nil { + return nil, nil, err + } + return p, t, nil +} + +func ptsname(f *os.File) (string, error) { + /* + * from ptsname(3): The ptsname() function is equivalent to: + * struct ptmget pm; + * ioctl(fd, TIOCPTSNAME, &pm) == -1 ? NULL : pm.sn; + */ + var ptm ptmget + if err := ioctl(f.Fd(), uintptr(ioctl_TIOCPTSNAME), uintptr(unsafe.Pointer(&ptm))); err != nil { + return "", err + } + name := make([]byte, len(ptm.Sn)) + for i, c := range ptm.Sn { + name[i] = byte(c) + if c == 0 { + return string(name[:i]), nil + } + } + return "", errors.New("TIOCPTSNAME string not NUL-terminated") +} + +func grantpt(f *os.File) error { + /* + * from grantpt(3): Calling grantpt() is equivalent to: + * ioctl(fd, TIOCGRANTPT, 0); + */ + return ioctl(f.Fd(), uintptr(ioctl_TIOCGRANTPT), 0) +} diff --git a/vendor/github.com/creack/pty/pty_openbsd.go b/vendor/github.com/creack/pty/pty_openbsd.go new file mode 100644 index 0000000..031367a --- /dev/null +++ b/vendor/github.com/creack/pty/pty_openbsd.go @@ -0,0 +1,36 @@ +//go:build openbsd +// +build openbsd + +package pty + +import ( + "os" + "syscall" + "unsafe" +) + +func open() (pty, tty *os.File, err error) { + /* + * from ptm(4): + * The PTMGET command allocates a free pseudo terminal, changes its + * ownership to the caller, revokes the access privileges for all previous + * users, opens the file descriptors for the pty and tty devices and + * returns them to the caller in struct ptmget. + */ + + p, err := os.OpenFile("/dev/ptm", os.O_RDWR|syscall.O_CLOEXEC, 0) + if err != nil { + return nil, nil, err + } + defer p.Close() + + var ptm ptmget + if err := ioctl(p.Fd(), uintptr(ioctl_PTMGET), uintptr(unsafe.Pointer(&ptm))); err != nil { + return nil, nil, err + } + + pty = os.NewFile(uintptr(ptm.Cfd), "/dev/ptm") + tty = os.NewFile(uintptr(ptm.Sfd), "/dev/ptm") + + return pty, tty, nil +} diff --git a/vendor/github.com/creack/pty/pty_solaris.go b/vendor/github.com/creack/pty/pty_solaris.go new file mode 100644 index 0000000..37f933e --- /dev/null +++ b/vendor/github.com/creack/pty/pty_solaris.go @@ -0,0 +1,152 @@ +//go:build solaris +// +build solaris + +package pty + +/* based on: +http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libc/port/gen/pt.c +*/ + +import ( + "errors" + "os" + "strconv" + "syscall" + "unsafe" +) + +func open() (pty, tty *os.File, err error) { + ptmxfd, err := syscall.Open("/dev/ptmx", syscall.O_RDWR|syscall.O_NOCTTY, 0) + if err != nil { + return nil, nil, err + } + p := os.NewFile(uintptr(ptmxfd), "/dev/ptmx") + // In case of error after this point, make sure we close the ptmx fd. + defer func() { + if err != nil { + _ = p.Close() // Best effort. + } + }() + + sname, err := ptsname(p) + if err != nil { + return nil, nil, err + } + + if err := grantpt(p); err != nil { + return nil, nil, err + } + + if err := unlockpt(p); err != nil { + return nil, nil, err + } + + ptsfd, err := syscall.Open(sname, os.O_RDWR|syscall.O_NOCTTY, 0) + if err != nil { + return nil, nil, err + } + t := os.NewFile(uintptr(ptsfd), sname) + + // In case of error after this point, make sure we close the pts fd. + defer func() { + if err != nil { + _ = t.Close() // Best effort. + } + }() + + // pushing terminal driver STREAMS modules as per pts(7) + for _, mod := range []string{"ptem", "ldterm", "ttcompat"} { + if err := streamsPush(t, mod); err != nil { + return nil, nil, err + } + } + + return p, t, nil +} + +func ptsname(f *os.File) (string, error) { + dev, err := ptsdev(f.Fd()) + if err != nil { + return "", err + } + fn := "/dev/pts/" + strconv.FormatInt(int64(dev), 10) + + if err := syscall.Access(fn, 0); err != nil { + return "", err + } + return fn, nil +} + +func unlockpt(f *os.File) error { + istr := strioctl{ + icCmd: UNLKPT, + icTimeout: 0, + icLen: 0, + icDP: nil, + } + return ioctl(f.Fd(), I_STR, uintptr(unsafe.Pointer(&istr))) +} + +func minor(x uint64) uint64 { return x & 0377 } + +func ptsdev(fd uintptr) (uint64, error) { + istr := strioctl{ + icCmd: ISPTM, + icTimeout: 0, + icLen: 0, + icDP: nil, + } + + if err := ioctl(fd, I_STR, uintptr(unsafe.Pointer(&istr))); err != nil { + return 0, err + } + var status syscall.Stat_t + if err := syscall.Fstat(int(fd), &status); err != nil { + return 0, err + } + return uint64(minor(status.Rdev)), nil +} + +type ptOwn struct { + rUID int32 + rGID int32 +} + +func grantpt(f *os.File) error { + if _, err := ptsdev(f.Fd()); err != nil { + return err + } + pto := ptOwn{ + rUID: int32(os.Getuid()), + // XXX should first attempt to get gid of DEFAULT_TTY_GROUP="tty" + rGID: int32(os.Getgid()), + } + istr := strioctl{ + icCmd: OWNERPT, + icTimeout: 0, + icLen: int32(unsafe.Sizeof(strioctl{})), + icDP: unsafe.Pointer(&pto), + } + if err := ioctl(f.Fd(), I_STR, uintptr(unsafe.Pointer(&istr))); err != nil { + return errors.New("access denied") + } + return nil +} + +// streamsPush pushes STREAMS modules if not already done so. +func streamsPush(f *os.File, mod string) error { + buf := []byte(mod) + + // XXX I_FIND is not returning an error when the module + // is already pushed even though truss reports a return + // value of 1. A bug in the Go Solaris syscall interface? + // XXX without this we are at risk of the issue + // https://www.illumos.org/issues/9042 + // but since we are not using libc or XPG4.2, we should not be + // double-pushing modules + + if err := ioctl(f.Fd(), I_FIND, uintptr(unsafe.Pointer(&buf[0]))); err != nil { + return nil + } + return ioctl(f.Fd(), I_PUSH, uintptr(unsafe.Pointer(&buf[0]))) +} diff --git a/vendor/github.com/creack/pty/pty_unsupported.go b/vendor/github.com/creack/pty/pty_unsupported.go new file mode 100644 index 0000000..c771020 --- /dev/null +++ b/vendor/github.com/creack/pty/pty_unsupported.go @@ -0,0 +1,12 @@ +//go:build !linux && !darwin && !freebsd && !dragonfly && !netbsd && !openbsd && !solaris +// +build !linux,!darwin,!freebsd,!dragonfly,!netbsd,!openbsd,!solaris + +package pty + +import ( + "os" +) + +func open() (pty, tty *os.File, err error) { + return nil, nil, ErrUnsupported +} diff --git a/vendor/github.com/creack/pty/run.go b/vendor/github.com/creack/pty/run.go new file mode 100644 index 0000000..4755366 --- /dev/null +++ b/vendor/github.com/creack/pty/run.go @@ -0,0 +1,57 @@ +package pty + +import ( + "os" + "os/exec" + "syscall" +) + +// Start assigns a pseudo-terminal tty os.File to c.Stdin, c.Stdout, +// and c.Stderr, calls c.Start, and returns the File of the tty's +// corresponding pty. +// +// Starts the process in a new session and sets the controlling terminal. +func Start(cmd *exec.Cmd) (*os.File, error) { + return StartWithSize(cmd, nil) +} + +// StartWithAttrs assigns a pseudo-terminal tty os.File to c.Stdin, c.Stdout, +// and c.Stderr, calls c.Start, and returns the File of the tty's +// corresponding pty. +// +// This will resize the pty to the specified size before starting the command if a size is provided. +// The `attrs` parameter overrides the one set in c.SysProcAttr. +// +// This should generally not be needed. Used in some edge cases where it is needed to create a pty +// without a controlling terminal. +func StartWithAttrs(c *exec.Cmd, sz *Winsize, attrs *syscall.SysProcAttr) (*os.File, error) { + pty, tty, err := Open() + if err != nil { + return nil, err + } + defer func() { _ = tty.Close() }() // Best effort. + + if sz != nil { + if err := Setsize(pty, sz); err != nil { + _ = pty.Close() // Best effort. + return nil, err + } + } + if c.Stdout == nil { + c.Stdout = tty + } + if c.Stderr == nil { + c.Stderr = tty + } + if c.Stdin == nil { + c.Stdin = tty + } + + c.SysProcAttr = attrs + + if err := c.Start(); err != nil { + _ = pty.Close() // Best effort. + return nil, err + } + return pty, err +} diff --git a/vendor/github.com/creack/pty/start.go b/vendor/github.com/creack/pty/start.go new file mode 100644 index 0000000..9b51635 --- /dev/null +++ b/vendor/github.com/creack/pty/start.go @@ -0,0 +1,25 @@ +//go:build !windows +// +build !windows + +package pty + +import ( + "os" + "os/exec" + "syscall" +) + +// StartWithSize assigns a pseudo-terminal tty os.File to c.Stdin, c.Stdout, +// and c.Stderr, calls c.Start, and returns the File of the tty's +// corresponding pty. +// +// This will resize the pty to the specified size before starting the command. +// Starts the process in a new session and sets the controlling terminal. +func StartWithSize(cmd *exec.Cmd, ws *Winsize) (*os.File, error) { + if cmd.SysProcAttr == nil { + cmd.SysProcAttr = &syscall.SysProcAttr{} + } + cmd.SysProcAttr.Setsid = true + cmd.SysProcAttr.Setctty = true + return StartWithAttrs(cmd, ws, cmd.SysProcAttr) +} diff --git a/vendor/github.com/creack/pty/start_windows.go b/vendor/github.com/creack/pty/start_windows.go new file mode 100644 index 0000000..7e9530b --- /dev/null +++ b/vendor/github.com/creack/pty/start_windows.go @@ -0,0 +1,19 @@ +//go:build windows +// +build windows + +package pty + +import ( + "os" + "os/exec" +) + +// StartWithSize assigns a pseudo-terminal tty os.File to c.Stdin, c.Stdout, +// and c.Stderr, calls c.Start, and returns the File of the tty's +// corresponding pty. +// +// This will resize the pty to the specified size before starting the command. +// Starts the process in a new session and sets the controlling terminal. +func StartWithSize(cmd *exec.Cmd, ws *Winsize) (*os.File, error) { + return nil, ErrUnsupported +} diff --git a/vendor/github.com/creack/pty/test_crosscompile.sh b/vendor/github.com/creack/pty/test_crosscompile.sh new file mode 100644 index 0000000..47e8b10 --- /dev/null +++ b/vendor/github.com/creack/pty/test_crosscompile.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env sh + +# Test script checking that all expected os/arch compile properly. +# Does not actually test the logic, just the compilation so we make sure we don't break code depending on the lib. + +echo2() { + echo $@ >&2 +} + +trap end 0 +end() { + [ "$?" = 0 ] && echo2 "Pass." || (echo2 "Fail."; exit 1) +} + +cross() { + os=$1 + shift + echo2 "Build for $os." + for arch in $@; do + echo2 " - $os/$arch" + GOOS=$os GOARCH=$arch go build + done + echo2 +} + +set -e + +cross linux amd64 386 arm arm64 ppc64 ppc64le s390x mips mipsle mips64 mips64le +cross darwin amd64 arm64 +cross freebsd amd64 386 arm arm64 +cross netbsd amd64 386 arm arm64 +cross openbsd amd64 386 arm arm64 +cross dragonfly amd64 +cross solaris amd64 + +# Not expected to work but should still compile. +cross windows amd64 386 arm + +# TODO: Fix compilation error on openbsd/arm. +# TODO: Merge the solaris PR. + +# Some os/arch require a different compiler. Run in docker. +if ! hash docker; then + # If docker is not present, stop here. + return +fi + +echo2 "Build for linux." +echo2 " - linux/riscv" +docker build -t creack-pty-test -f Dockerfile.riscv . + +# Golang dropped support for darwin 32bits since go1.15. Make sure the lib still compile with go1.14 on those archs. +echo2 "Build for darwin (32bits)." +echo2 " - darwin/386" +docker build -t creack-pty-test -f Dockerfile.golang --build-arg=GOVERSION=1.14 --build-arg=GOOS=darwin --build-arg=GOARCH=386 . +echo2 " - darwin/arm" +docker build -t creack-pty-test -f Dockerfile.golang --build-arg=GOVERSION=1.14 --build-arg=GOOS=darwin --build-arg=GOARCH=arm . + +# Run a single test for an old go version. Would be best with go1.0, but not available on Dockerhub. +# Using 1.6 as it is the base version for the RISCV compiler. +# Would also be better to run all the tests, not just one, need to refactor this file to allow for specifc archs per version. +echo2 "Build for linux - go1.6." +echo2 " - linux/amd64" +docker build -t creack-pty-test -f Dockerfile.golang --build-arg=GOVERSION=1.6 --build-arg=GOOS=linux --build-arg=GOARCH=amd64 . diff --git a/vendor/github.com/creack/pty/winsize.go b/vendor/github.com/creack/pty/winsize.go new file mode 100644 index 0000000..57323f4 --- /dev/null +++ b/vendor/github.com/creack/pty/winsize.go @@ -0,0 +1,27 @@ +package pty + +import "os" + +// InheritSize applies the terminal size of pty to tty. This should be run +// in a signal handler for syscall.SIGWINCH to automatically resize the tty when +// the pty receives a window size change notification. +func InheritSize(pty, tty *os.File) error { + size, err := GetsizeFull(pty) + if err != nil { + return err + } + if err := Setsize(tty, size); err != nil { + return err + } + return nil +} + +// Getsize returns the number of rows (lines) and cols (positions +// in each line) in terminal t. +func Getsize(t *os.File) (rows, cols int, err error) { + ws, err := GetsizeFull(t) + if err != nil { + return 0, 0, err + } + return int(ws.Rows), int(ws.Cols), nil +} diff --git a/vendor/github.com/creack/pty/winsize_unix.go b/vendor/github.com/creack/pty/winsize_unix.go new file mode 100644 index 0000000..5d99c3d --- /dev/null +++ b/vendor/github.com/creack/pty/winsize_unix.go @@ -0,0 +1,35 @@ +//go:build !windows +// +build !windows + +package pty + +import ( + "os" + "syscall" + "unsafe" +) + +// Winsize describes the terminal size. +type Winsize struct { + Rows uint16 // ws_row: Number of rows (in cells) + Cols uint16 // ws_col: Number of columns (in cells) + X uint16 // ws_xpixel: Width in pixels + Y uint16 // ws_ypixel: Height in pixels +} + +// Setsize resizes t to s. +func Setsize(t *os.File, ws *Winsize) error { + //nolint:gosec // Expected unsafe pointer for Syscall call. + return ioctl(t.Fd(), syscall.TIOCSWINSZ, uintptr(unsafe.Pointer(ws))) +} + +// GetsizeFull returns the full terminal size description. +func GetsizeFull(t *os.File) (size *Winsize, err error) { + var ws Winsize + + //nolint:gosec // Expected unsafe pointer for Syscall call. + if err := ioctl(t.Fd(), syscall.TIOCGWINSZ, uintptr(unsafe.Pointer(&ws))); err != nil { + return nil, err + } + return &ws, nil +} diff --git a/vendor/github.com/creack/pty/winsize_unsupported.go b/vendor/github.com/creack/pty/winsize_unsupported.go new file mode 100644 index 0000000..0d21099 --- /dev/null +++ b/vendor/github.com/creack/pty/winsize_unsupported.go @@ -0,0 +1,23 @@ +//go:build windows +// +build windows + +package pty + +import ( + "os" +) + +// Winsize is a dummy struct to enable compilation on unsupported platforms. +type Winsize struct { + Rows, Cols, X, Y uint16 +} + +// Setsize resizes t to s. +func Setsize(*os.File, *Winsize) error { + return ErrUnsupported +} + +// GetsizeFull returns the full terminal size description. +func GetsizeFull(*os.File) (*Winsize, error) { + return nil, ErrUnsupported +} diff --git a/vendor/github.com/creack/pty/ztypes_386.go b/vendor/github.com/creack/pty/ztypes_386.go new file mode 100644 index 0000000..d126f4a --- /dev/null +++ b/vendor/github.com/creack/pty/ztypes_386.go @@ -0,0 +1,12 @@ +//go:build 386 +// +build 386 + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types.go + +package pty + +type ( + _C_int int32 + _C_uint uint32 +) diff --git a/vendor/github.com/creack/pty/ztypes_amd64.go b/vendor/github.com/creack/pty/ztypes_amd64.go new file mode 100644 index 0000000..6c4a767 --- /dev/null +++ b/vendor/github.com/creack/pty/ztypes_amd64.go @@ -0,0 +1,12 @@ +//go:build amd64 +// +build amd64 + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types.go + +package pty + +type ( + _C_int int32 + _C_uint uint32 +) diff --git a/vendor/github.com/creack/pty/ztypes_arm.go b/vendor/github.com/creack/pty/ztypes_arm.go new file mode 100644 index 0000000..de6fe16 --- /dev/null +++ b/vendor/github.com/creack/pty/ztypes_arm.go @@ -0,0 +1,12 @@ +//go:build arm +// +build arm + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types.go + +package pty + +type ( + _C_int int32 + _C_uint uint32 +) diff --git a/vendor/github.com/creack/pty/ztypes_arm64.go b/vendor/github.com/creack/pty/ztypes_arm64.go new file mode 100644 index 0000000..c4f315c --- /dev/null +++ b/vendor/github.com/creack/pty/ztypes_arm64.go @@ -0,0 +1,12 @@ +//go:build arm64 +// +build arm64 + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types.go + +package pty + +type ( + _C_int int32 + _C_uint uint32 +) diff --git a/vendor/github.com/creack/pty/ztypes_dragonfly_amd64.go b/vendor/github.com/creack/pty/ztypes_dragonfly_amd64.go new file mode 100644 index 0000000..183c421 --- /dev/null +++ b/vendor/github.com/creack/pty/ztypes_dragonfly_amd64.go @@ -0,0 +1,17 @@ +//go:build amd64 && dragonfly +// +build amd64,dragonfly + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_dragonfly.go + +package pty + +const ( + _C_SPECNAMELEN = 0x3f +) + +type fiodgnameArg struct { + Name *byte + Len uint32 + Pad_cgo_0 [4]byte +} diff --git a/vendor/github.com/creack/pty/ztypes_freebsd_386.go b/vendor/github.com/creack/pty/ztypes_freebsd_386.go new file mode 100644 index 0000000..d80dbf7 --- /dev/null +++ b/vendor/github.com/creack/pty/ztypes_freebsd_386.go @@ -0,0 +1,16 @@ +//go:build 386 && freebsd +// +build 386,freebsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_freebsd.go + +package pty + +const ( + _C_SPECNAMELEN = 0x3f +) + +type fiodgnameArg struct { + Len int32 + Buf *byte +} diff --git a/vendor/github.com/creack/pty/ztypes_freebsd_amd64.go b/vendor/github.com/creack/pty/ztypes_freebsd_amd64.go new file mode 100644 index 0000000..bfab4e4 --- /dev/null +++ b/vendor/github.com/creack/pty/ztypes_freebsd_amd64.go @@ -0,0 +1,17 @@ +//go:build amd64 && freebsd +// +build amd64,freebsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_freebsd.go + +package pty + +const ( + _C_SPECNAMELEN = 0x3f +) + +type fiodgnameArg struct { + Len int32 + Pad_cgo_0 [4]byte + Buf *byte +} diff --git a/vendor/github.com/creack/pty/ztypes_freebsd_arm.go b/vendor/github.com/creack/pty/ztypes_freebsd_arm.go new file mode 100644 index 0000000..3a8aeae --- /dev/null +++ b/vendor/github.com/creack/pty/ztypes_freebsd_arm.go @@ -0,0 +1,16 @@ +//go:build arm && freebsd +// +build arm,freebsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_freebsd.go + +package pty + +const ( + _C_SPECNAMELEN = 0x3f +) + +type fiodgnameArg struct { + Len int32 + Buf *byte +} diff --git a/vendor/github.com/creack/pty/ztypes_freebsd_arm64.go b/vendor/github.com/creack/pty/ztypes_freebsd_arm64.go new file mode 100644 index 0000000..a839249 --- /dev/null +++ b/vendor/github.com/creack/pty/ztypes_freebsd_arm64.go @@ -0,0 +1,16 @@ +//go:build arm64 && freebsd +// +build arm64,freebsd + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs types_freebsd.go + +package pty + +const ( + _C_SPECNAMELEN = 0xff +) + +type fiodgnameArg struct { + Len int32 + Buf *byte +} diff --git a/vendor/github.com/creack/pty/ztypes_freebsd_ppc64.go b/vendor/github.com/creack/pty/ztypes_freebsd_ppc64.go new file mode 100644 index 0000000..5fa102f --- /dev/null +++ b/vendor/github.com/creack/pty/ztypes_freebsd_ppc64.go @@ -0,0 +1,14 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_freebsd.go + +package pty + +const ( + _C_SPECNAMELEN = 0x3f +) + +type fiodgnameArg struct { + Len int32 + Pad_cgo_0 [4]byte + Buf *byte +} diff --git a/vendor/github.com/creack/pty/ztypes_loong64.go b/vendor/github.com/creack/pty/ztypes_loong64.go new file mode 100644 index 0000000..3beb5c1 --- /dev/null +++ b/vendor/github.com/creack/pty/ztypes_loong64.go @@ -0,0 +1,12 @@ +//go:build loong64 +// +build loong64 + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types.go + +package pty + +type ( + _C_int int32 + _C_uint uint32 +) diff --git a/vendor/github.com/creack/pty/ztypes_mipsx.go b/vendor/github.com/creack/pty/ztypes_mipsx.go new file mode 100644 index 0000000..2812779 --- /dev/null +++ b/vendor/github.com/creack/pty/ztypes_mipsx.go @@ -0,0 +1,13 @@ +//go:build (mips || mipsle || mips64 || mips64le) && linux +// +build mips mipsle mips64 mips64le +// +build linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types.go + +package pty + +type ( + _C_int int32 + _C_uint uint32 +) diff --git a/vendor/github.com/creack/pty/ztypes_netbsd_32bit_int.go b/vendor/github.com/creack/pty/ztypes_netbsd_32bit_int.go new file mode 100644 index 0000000..2ab7c45 --- /dev/null +++ b/vendor/github.com/creack/pty/ztypes_netbsd_32bit_int.go @@ -0,0 +1,17 @@ +//go:build (386 || amd64 || arm || arm64) && netbsd +// +build 386 amd64 arm arm64 +// +build netbsd + +package pty + +type ptmget struct { + Cfd int32 + Sfd int32 + Cn [1024]int8 + Sn [1024]int8 +} + +var ( + ioctl_TIOCPTSNAME = 0x48087448 + ioctl_TIOCGRANTPT = 0x20007447 +) diff --git a/vendor/github.com/creack/pty/ztypes_openbsd_32bit_int.go b/vendor/github.com/creack/pty/ztypes_openbsd_32bit_int.go new file mode 100644 index 0000000..1eb0948 --- /dev/null +++ b/vendor/github.com/creack/pty/ztypes_openbsd_32bit_int.go @@ -0,0 +1,14 @@ +//go:build (386 || amd64 || arm || arm64 || mips64) && openbsd +// +build 386 amd64 arm arm64 mips64 +// +build openbsd + +package pty + +type ptmget struct { + Cfd int32 + Sfd int32 + Cn [16]int8 + Sn [16]int8 +} + +var ioctl_PTMGET = 0x40287401 diff --git a/vendor/github.com/creack/pty/ztypes_ppc64.go b/vendor/github.com/creack/pty/ztypes_ppc64.go new file mode 100644 index 0000000..bbb3da8 --- /dev/null +++ b/vendor/github.com/creack/pty/ztypes_ppc64.go @@ -0,0 +1,12 @@ +//go:build ppc64 +// +build ppc64 + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types.go + +package pty + +type ( + _C_int int32 + _C_uint uint32 +) diff --git a/vendor/github.com/creack/pty/ztypes_ppc64le.go b/vendor/github.com/creack/pty/ztypes_ppc64le.go new file mode 100644 index 0000000..8a4fac3 --- /dev/null +++ b/vendor/github.com/creack/pty/ztypes_ppc64le.go @@ -0,0 +1,12 @@ +//go:build ppc64le +// +build ppc64le + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types.go + +package pty + +type ( + _C_int int32 + _C_uint uint32 +) diff --git a/vendor/github.com/creack/pty/ztypes_riscvx.go b/vendor/github.com/creack/pty/ztypes_riscvx.go new file mode 100644 index 0000000..dc5da90 --- /dev/null +++ b/vendor/github.com/creack/pty/ztypes_riscvx.go @@ -0,0 +1,12 @@ +//go:build riscv || riscv64 +// +build riscv riscv64 + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs types.go + +package pty + +type ( + _C_int int32 + _C_uint uint32 +) diff --git a/vendor/github.com/creack/pty/ztypes_s390x.go b/vendor/github.com/creack/pty/ztypes_s390x.go new file mode 100644 index 0000000..3433be7 --- /dev/null +++ b/vendor/github.com/creack/pty/ztypes_s390x.go @@ -0,0 +1,12 @@ +//go:build s390x +// +build s390x + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types.go + +package pty + +type ( + _C_int int32 + _C_uint uint32 +) diff --git a/vendor/github.com/jameskeane/bcrypt/.gitignore b/vendor/github.com/jameskeane/bcrypt/.gitignore new file mode 100644 index 0000000..c1e1c06 --- /dev/null +++ b/vendor/github.com/jameskeane/bcrypt/.gitignore @@ -0,0 +1,5 @@ +6.out +*.6 +_obj +_test +_testmain.go diff --git a/vendor/github.com/jameskeane/bcrypt/LICENSE b/vendor/github.com/jameskeane/bcrypt/LICENSE new file mode 100644 index 0000000..555bb71 --- /dev/null +++ b/vendor/github.com/jameskeane/bcrypt/LICENSE @@ -0,0 +1,29 @@ +Copyright (c) 2011 James Keane . All rights reserved. +Copyright (c) 2006 Damien Miller . +Copyright (c) 2011 ZooWar.com, All rights reserved. + +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 weekendlogic 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/github.com/jameskeane/bcrypt/README b/vendor/github.com/jameskeane/bcrypt/README new file mode 100644 index 0000000..a4d638a --- /dev/null +++ b/vendor/github.com/jameskeane/bcrypt/README @@ -0,0 +1,46 @@ +Installation: + goinstall github.com/jameskeane/bcrypt + +Example use: + package main + + import ( + "fmt" + "github.com/jameskeane/bcrypt" + ) + + var password = "WyWihatdyd?frub1" + var bad_password = "just a wild guess" + + func main() { + // generate a random salt with default rounds of complexity + salt, _ := bcrypt.Salt() + + // generate a random salt with 10 rounds of complexity + salt, _ = bcrypt.Salt(10) + + // hash and verify a password with random salt + hash, _ := bcrypt.Hash(password) + if bcrypt.Match(password, hash) { + fmt.Println("They match") + } + + // hash and verify a password with a static salt + hash, _ = bcrypt.Hash(password, salt) + if bcrypt.Match(password, hash) { + fmt.Println("They match") + } + + // verify a random password fails to match the hashed password + if !bcrypt.Match(bad_password, hash) { + fmt.Println("They don't match") + } + } + +Todo: + grep 'TODO' * -r + +Notes: + * This library is derived from jBcrypt by Damien Miller + * bcrypt_test.go is from ZooWar.com + diff --git a/vendor/github.com/jameskeane/bcrypt/bcrypt.go b/vendor/github.com/jameskeane/bcrypt/bcrypt.go new file mode 100644 index 0000000..fe84921 --- /dev/null +++ b/vendor/github.com/jameskeane/bcrypt/bcrypt.go @@ -0,0 +1,190 @@ +package bcrypt + +import ( + "bytes" + "crypto/rand" + "crypto/subtle" + "encoding/base64" + "errors" + "strconv" + "strings" +) + +var ( + InvalidRounds = errors.New("bcrypt: Invalid rounds parameter") + InvalidSalt = errors.New("bcrypt: Invalid salt supplied") +) + +const ( + MaxRounds = 31 + MinRounds = 4 + DefaultRounds = 12 + SaltLen = 16 + BlowfishRounds = 16 +) + +var enc = base64.NewEncoding("./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") + +// Helper function to build the bcrypt hash string +// payload takes : +// * []byte -> which it base64 encodes it (trims padding "=") and writes it to the buffer +// * string -> which it writes straight to the buffer +func build_bcrypt_str(minor byte, rounds uint, payload ...interface{}) []byte { + rs := bytes.NewBuffer(make([]byte, 0, 61)) + rs.WriteString("$2") + if minor >= 'a' { + rs.WriteByte(minor) + } + + rs.WriteByte('$') + if rounds < 10 { + rs.WriteByte('0') + } + + rs.WriteString(strconv.FormatUint(uint64(rounds), 10)) + rs.WriteByte('$') + for _, p := range payload { + if pb, ok := p.([]byte); ok { + rs.WriteString(strings.TrimRight(enc.EncodeToString(pb), "=")) + } else if ps, ok := p.(string); ok { + rs.WriteString(ps) + } + } + return rs.Bytes() +} + +// Salt generation +func Salt(rounds ...int) (string, error) { + rb, err := SaltBytes(rounds...) + return string(rb), err +} + +func SaltBytes(rounds ...int) (salt []byte, err error) { + r := DefaultRounds + if len(rounds) > 0 { + r = rounds[0] + if r < MinRounds || r > MaxRounds { + return nil, InvalidRounds + } + } + + rnd := make([]byte, SaltLen) + read, err := rand.Read(rnd) + if read != SaltLen || err != nil { + return nil, err + } + + return build_bcrypt_str('a', uint(r), rnd), nil +} + +func consume(r *bytes.Buffer, b byte) bool { + got, err := r.ReadByte() + if err != nil { + return false + } + if got != b { + r.UnreadByte() + return false + } + + return true +} + +func Hash(password string, salt ...string) (ps string, err error) { + var s []byte + var pb []byte + + if len(salt) == 0 { + s, err = SaltBytes() + if err != nil { + return + } + } else if len(salt) > 0 { + s = []byte(salt[0]) + } + + pb, err = HashBytes([]byte(password), s) + return string(pb), err +} + +func HashBytes(password []byte, salt ...[]byte) (hash []byte, err error) { + var s []byte + + if len(salt) == 0 { + s, err = SaltBytes() + if err != nil { + return + } + } else if len(salt) > 0 { + s = salt[0] + } + + // TODO: use a regex? I hear go has bad regex performance a simple FSM seems faster + // "^\\$2([a-z]?)\\$([0-3][0-9])\\$([\\./A-Za-z0-9]{22}+)" + + // Ok, extract the required information + minor := byte(0) + sr := bytes.NewBuffer(s) + + if !consume(sr, '$') || !consume(sr, '2') { + return nil, InvalidSalt + } + + if !consume(sr, '$') { + minor, _ = sr.ReadByte() + if minor != 'a' || !consume(sr, '$') { + return nil, InvalidSalt + } + } + + rounds_bytes := make([]byte, 2) + read, err := sr.Read(rounds_bytes) + if err != nil || read != 2 { + return nil, InvalidSalt + } + + if !consume(sr, '$') { + return nil, InvalidSalt + } + + var rounds64 uint64 + rounds64, err = strconv.ParseUint(string(rounds_bytes), 10, 0) + if err != nil { + return nil, InvalidSalt + } + + rounds := uint(rounds64) + + // TODO: can't we use base64.NewDecoder(enc, sr) ? + salt_bytes := make([]byte, 22) + read, err = sr.Read(salt_bytes) + if err != nil || read != 22 { + return nil, InvalidSalt + } + + var saltb []byte + // encoding/base64 expects 4 byte blocks padded, since bcrypt uses only 22 bytes we need to go up + saltb, err = enc.DecodeString(string(salt_bytes) + "==") + if err != nil { + return nil, err + } + + // cipher expects null terminated input (go initializes everything with zero values so this works) + password_term := make([]byte, len(password)+1) + copy(password_term, password) + + hashed := crypt_raw(password_term, saltb[:SaltLen], rounds) + return build_bcrypt_str(minor, rounds, string(salt_bytes), hashed[:len(bf_crypt_ciphertext)*4-1]), nil +} + +func Match(password, hash string) bool { + return MatchBytes([]byte(password), []byte(hash)) +} + +func MatchBytes(password []byte, hash []byte) bool { + h, err := HashBytes(password, hash) + if err != nil { + return false + } + return subtle.ConstantTimeCompare(h, hash) == 1 +} diff --git a/vendor/github.com/jameskeane/bcrypt/cipher.go b/vendor/github.com/jameskeane/bcrypt/cipher.go new file mode 100644 index 0000000..00724e4 --- /dev/null +++ b/vendor/github.com/jameskeane/bcrypt/cipher.go @@ -0,0 +1,415 @@ +package bcrypt + +var p_orig = [18]uint{ + 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, + 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, + 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, + 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, + 0x9216d5d9, 0x8979fb1b, +} + +var s_orig = [1024]uint{ + 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, + 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, + 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, + 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, + 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, + 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, + 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, + 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e, + 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, + 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, + 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, + 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, + 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, + 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677, + 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, + 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, + 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, + 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, + 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, + 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, + 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, + 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, + 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, + 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, + 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, + 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, + 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, + 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, + 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, + 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, + 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, + 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, + 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, + 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, + 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, + 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, + 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, + 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, + 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, + 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, + 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, + 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, + 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, + 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, + 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, + 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, + 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, + 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, + 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, + 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1, + 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, + 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, + 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, + 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, + 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, + 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, + 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, + 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, + 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, + 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, + 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, + 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, + 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, + 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a, + 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, + 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, + 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, + 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, + 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, + 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, + 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, + 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, + 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, + 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, + 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, + 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, + 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, + 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7, + 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, + 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, + 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, + 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, + 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, + 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87, + 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, + 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, + 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, + 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, + 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, + 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, + 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, + 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, + 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, + 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, + 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, + 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, + 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, + 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, + 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, + 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, + 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, + 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, + 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, + 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, + 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, + 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, + 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, + 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, + 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, + 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, + 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, + 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, + 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, + 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, + 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, + 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, + 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, + 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, + 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, + 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061, + 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, + 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, + 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, + 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, + 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, + 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, + 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, + 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7, + 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, + 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, + 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, + 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, + 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, + 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, + 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, + 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, + 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, + 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, + 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, + 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, + 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, + 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, + 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, + 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, + 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, + 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, + 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, + 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, + 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, + 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, + 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, + 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, + 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, + 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, + 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, + 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, + 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, + 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, + 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, + 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, + 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, + 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, + 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, + 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, + 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, + 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, + 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, + 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, + 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, + 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, + 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, + 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, + 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, + 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, + 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, + 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, + 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, + 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, + 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, + 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, + 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, + 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, + 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, + 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62, + 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, + 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, + 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, + 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, + 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, + 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, + 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, + 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0, + 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, + 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe, + 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, + 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, + 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, + 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, + 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, + 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22, + 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, + 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, + 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, + 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, + 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, + 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, + 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, + 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, + 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, + 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, + 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, + 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, + 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, + 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, + 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, + 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, + 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, + 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, + 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, + 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, + 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, + 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, + 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, + 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, + 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, + 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, + 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, + 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, + 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, + 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, + 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, + 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, + 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, + 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, + 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, + 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, + 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, + 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, + 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, + 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, + 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, + 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, + 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, + 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, + 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, + 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, + 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, + 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, + 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, + 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, + 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, + 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, + 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, + 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, + 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, + 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6, +} + +var bf_crypt_ciphertext = [6]uint{ + 0x4f727068, 0x65616e42, 0x65686f6c, + 0x64657253, 0x63727944, 0x6f756274, +} + + +type cipher struct { + P [18]uint + S [1024]uint + data [6]uint +} + +func (c *cipher) encipher(lr []uint, off int) { + l := lr[off] ^ c.P[0] + r := lr[off+1] + + for i := 0; i <= BlowfishRounds-2; i += 2{ + // Feistel substitution on left and right word respectively + r ^= (((c.S[(l>>24)&0xff] + c.S[0x100|((l>>16)&0xff)]) ^ c.S[0x200|((l>>8)&0xff)]) + c.S[0x300|(l&0xff)]) ^ c.P[i+1] + l ^= (((c.S[(r>>24)&0xff] + c.S[0x100|((r>>16)&0xff)]) ^ c.S[0x200|((r>>8)&0xff)]) + c.S[0x300|(r&0xff)]) ^ c.P[i+2] + } + + lr[off] = r ^ c.P[BlowfishRounds+1] + lr[off+1] = l +} +/** + * Cycically extract a word of key material + * @param data the string to extract the data from + * @param off the current offset into the data + * @return the next word of material from data and the next offset into the data + */ +func streamtoword(data []byte, off int) (uint, int) { + var word uint + for i := 0; i < 4; i++ { + word = (word << 8) | uint(data[off]&0xff) + off = (off + 1) % len(data) + } + + return word, off +} + +/** + * Key the Blowfish cipher + * @param key an array containing the key + */ +func (c *cipher) key(key []byte) { + var word uint + off := 0 + lr := []uint{0, 0} + plen := len(c.P) + slen := len(c.S) + + for i := 0; i < plen; i++ { + word, off = streamtoword(key, off) + c.P[i] = c.P[i] ^ word + } + + for i := 0; i < plen; i += 2 { + c.encipher(lr, 0) + c.P[i] = lr[0] + c.P[i+1] = lr[1] + } + + for i := 0; i < slen; i += 2 { + c.encipher(lr, 0) + c.S[i] = lr[0] + c.S[i+1] = lr[1] + } +} + +/** + * Perform the "enhanced key schedule" step described by + * Provos and Mazieres in "A Future-Adaptable Password Scheme" + * http://www.openbsd.org/papers/bcrypt-paper.ps + * @param data salt information + * @param key password information + */ +func (c *cipher) ekskey(data []byte, key []byte) { + var word uint + koff := 0 + doff := 0 + lr := []uint{0, 0} + plen := len(c.P) + slen := len(c.S) + + for i := 0; i < plen; i++ { + word, koff = streamtoword(key, koff) + c.P[i] = c.P[i] ^ word + } + + for i := 0; i < plen; i += 2 { + word, doff = streamtoword(data, doff) + lr[0] ^= word + word, doff = streamtoword(data, doff) + lr[1] ^= word + c.encipher(lr, 0) + c.P[i] = lr[0] + c.P[i+1] = lr[1] + } + + for i := 0; i < slen; i += 2 { + word, doff = streamtoword(data, doff) + lr[0] ^= word + word, doff = streamtoword(data, doff) + lr[1] ^= word + c.encipher(lr, 0) + c.S[i] = lr[0] + c.S[i+1] = lr[1] + } +} + +/** + * Perform the central password hashing step in the + * bcrypt scheme + * @param password the password to hash + * @param salt the binary salt to hash with the password + * @param log_rounds the binary logarithm of the number + * of rounds of hashing to apply + * @return an array containing the binary hashed password + */ +func crypt_raw(password []byte, salt []byte, log_rounds uint) []byte { + c := &cipher{P:p_orig, S:s_orig, data:bf_crypt_ciphertext} + + rounds := 1 << log_rounds + c.ekskey(salt, password) + for i := 0; i < rounds; i++ { + c.key(password) + c.key(salt) + } + + for i := 0; i < 64; i++ { + for j := 0; j < (6 >> 1); j++ { + c.encipher(c.data[:], j<<1) + } + } + + ret := make([]byte, 24) + for i := 0; i < 6; i++ { + k := i<<2 + ret[k] = (byte)((c.data[i] >> 24) & 0xff) + ret[k+1] = (byte)((c.data[i] >> 16) & 0xff) + ret[k+2] = (byte)((c.data[i] >> 8) & 0xff) + ret[k+3] = (byte)(c.data[i] & 0xff) + } + return ret +} diff --git a/vendor/github.com/klauspost/cpuid/v2/.gitignore b/vendor/github.com/klauspost/cpuid/v2/.gitignore new file mode 100644 index 0000000..daf913b --- /dev/null +++ b/vendor/github.com/klauspost/cpuid/v2/.gitignore @@ -0,0 +1,24 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe +*.test +*.prof diff --git a/vendor/github.com/klauspost/cpuid/v2/.goreleaser.yml b/vendor/github.com/klauspost/cpuid/v2/.goreleaser.yml new file mode 100644 index 0000000..944cc00 --- /dev/null +++ b/vendor/github.com/klauspost/cpuid/v2/.goreleaser.yml @@ -0,0 +1,74 @@ +# This is an example goreleaser.yaml file with some sane defaults. +# Make sure to check the documentation at http://goreleaser.com + +builds: + - + id: "cpuid" + binary: cpuid + main: ./cmd/cpuid/main.go + env: + - CGO_ENABLED=0 + flags: + - -ldflags=-s -w + goos: + - aix + - linux + - freebsd + - netbsd + - windows + - darwin + goarch: + - 386 + - amd64 + - arm64 + goarm: + - 7 + +archives: + - + id: cpuid + name_template: "cpuid-{{ .Os }}_{{ .Arch }}_{{ .Version }}" + replacements: + aix: AIX + darwin: OSX + linux: Linux + windows: Windows + 386: i386 + amd64: x86_64 + freebsd: FreeBSD + netbsd: NetBSD + format_overrides: + - goos: windows + format: zip + files: + - LICENSE +checksum: + name_template: 'checksums.txt' +snapshot: + name_template: "{{ .Tag }}-next" +changelog: + sort: asc + filters: + exclude: + - '^doc:' + - '^docs:' + - '^test:' + - '^tests:' + - '^Update\sREADME.md' + +nfpms: + - + file_name_template: "cpuid_package_{{ .Version }}_{{ .Os }}_{{ .Arch }}" + vendor: Klaus Post + homepage: https://github.com/klauspost/cpuid + maintainer: Klaus Post + description: CPUID Tool + license: BSD 3-Clause + formats: + - deb + - rpm + replacements: + darwin: Darwin + linux: Linux + freebsd: FreeBSD + amd64: x86_64 diff --git a/vendor/github.com/klauspost/cpuid/v2/.travis.yml b/vendor/github.com/klauspost/cpuid/v2/.travis.yml new file mode 100644 index 0000000..aa9bad7 --- /dev/null +++ b/vendor/github.com/klauspost/cpuid/v2/.travis.yml @@ -0,0 +1,67 @@ +language: go + +os: + - linux + - osx + - windows + +arch: + - amd64 + - arm64 + +go: + - 1.13.x + - 1.14.x + - 1.15.x + - 1.16.x + - master + +env: + - CGO_ENABLED=0 + +script: + - go vet ./... + - go test -test.v -test.run ^TestCPUID$ + - CGO_ENABLED=1 go test -race ./... + - go test -tags=nounsafe -test.v -test.run ^TestCPUID$ + - go test -tags=noasm ./... + - go run ./cmd/cpuid/main.go + - go run ./cmd/cpuid/main.go -json + +matrix: + allow_failures: + - go: 'master' + fast_finish: true + include: + - stage: other + go: 1.16.x + os: linux + arch: amd64 + script: + - diff <(gofmt -d .) <(printf "") + - diff <(gofmt -d ./private) <(printf "") + - curl -sfL https://git.io/goreleaser | VERSION=v0.157.0 sh -s -- check # check goreleaser config for deprecations + - curl -sL https://git.io/goreleaser | VERSION=v0.157.0 sh -s -- --snapshot --skip-publish --rm-dist + - go get github.com/klauspost/asmfmt&&go install github.com/klauspost/asmfmt/cmd/asmfmt + - diff <(asmfmt -d .) <(printf "") + - GOOS=linux GOARCH=386 go test . + - ./test-architectures.sh + - stage: other + go: 1.15.x + os: linux + arch: amd64 + script: + - ./test-architectures.sh + +deploy: + - provider: script + skip_cleanup: true + script: curl -sL https://git.io/goreleaser | VERSION=v0.157.0 bash || true + on: + tags: true + condition: ($TRAVIS_OS_NAME = linux) && ($TRAVIS_CPU_ARCH = amd64) + go: 1.16.x +branches: + only: + - master + - /^v\d+\.\d+(\.\d+)?(-\S*)?$/ diff --git a/vendor/github.com/klauspost/cpuid/v2/CONTRIBUTING.txt b/vendor/github.com/klauspost/cpuid/v2/CONTRIBUTING.txt new file mode 100644 index 0000000..2ef4714 --- /dev/null +++ b/vendor/github.com/klauspost/cpuid/v2/CONTRIBUTING.txt @@ -0,0 +1,35 @@ +Developer Certificate of Origin +Version 1.1 + +Copyright (C) 2015- Klaus Post & Contributors. +Email: klauspost@gmail.com + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + + +Developer's Certificate of Origin 1.1 + +By making a contribution to this project, I certify that: + +(a) The contribution was created in whole or in part by me and I + have the right to submit it under the open source license + indicated in the file; or + +(b) The contribution is based upon previous work that, to the best + of my knowledge, is covered under an appropriate open source + license and I have the right under that license to submit that + work with modifications, whether created in whole or in part + by me, under the same open source license (unless I am + permitted to submit under a different license), as indicated + in the file; or + +(c) The contribution was provided directly to me by some other + person who certified (a), (b) or (c) and I have not modified + it. + +(d) I understand and agree that this project and the contribution + are public and that a record of the contribution (including all + personal information I submit with it, including my sign-off) is + maintained indefinitely and may be redistributed consistent with + this project or the open source license(s) involved. diff --git a/vendor/github.com/klauspost/cpuid/v2/LICENSE b/vendor/github.com/klauspost/cpuid/v2/LICENSE new file mode 100644 index 0000000..5cec7ee --- /dev/null +++ b/vendor/github.com/klauspost/cpuid/v2/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Klaus Post + +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/klauspost/cpuid/v2/README.md b/vendor/github.com/klauspost/cpuid/v2/README.md new file mode 100644 index 0000000..465f4b7 --- /dev/null +++ b/vendor/github.com/klauspost/cpuid/v2/README.md @@ -0,0 +1,137 @@ +# cpuid +Package cpuid provides information about the CPU running the current program. + +CPU features are detected on startup, and kept for fast access through the life of the application. +Currently x86 / x64 (AMD64/i386) and ARM (ARM64) is supported, and no external C (cgo) code is used, which should make the library very easy to use. + +You can access the CPU information by accessing the shared CPU variable of the cpuid library. + +Package home: https://github.com/klauspost/cpuid + +[![PkgGoDev](https://pkg.go.dev/badge/github.com/klauspost/cpuid)](https://pkg.go.dev/github.com/klauspost/cpuid/v2) +[![Build Status][3]][4] + +[3]: https://travis-ci.org/klauspost/cpuid.svg?branch=master +[4]: https://travis-ci.org/klauspost/cpuid + +## installing + +`go get -u github.com/klauspost/cpuid/v2` using modules. + +Drop `v2` for others. + +## example + +```Go +package main + +import ( + "fmt" + "strings" + + . "github.com/klauspost/cpuid/v2" +) + +func main() { + // Print basic CPU information: + fmt.Println("Name:", CPU.BrandName) + fmt.Println("PhysicalCores:", CPU.PhysicalCores) + fmt.Println("ThreadsPerCore:", CPU.ThreadsPerCore) + fmt.Println("LogicalCores:", CPU.LogicalCores) + fmt.Println("Family", CPU.Family, "Model:", CPU.Model, "Vendor ID:", CPU.VendorID) + fmt.Println("Features:", fmt.Sprintf(strings.Join(CPU.FeatureSet(), ","))) + fmt.Println("Cacheline bytes:", CPU.CacheLine) + fmt.Println("L1 Data Cache:", CPU.Cache.L1D, "bytes") + fmt.Println("L1 Instruction Cache:", CPU.Cache.L1D, "bytes") + fmt.Println("L2 Cache:", CPU.Cache.L2, "bytes") + fmt.Println("L3 Cache:", CPU.Cache.L3, "bytes") + fmt.Println("Frequency", CPU.Hz, "hz") + + // Test if we have these specific features: + if CPU.Supports(SSE, SSE2) { + fmt.Println("We have Streaming SIMD 2 Extensions") + } +} +``` + +Sample output: +``` +>go run main.go +Name: AMD Ryzen 9 3950X 16-Core Processor +PhysicalCores: 16 +ThreadsPerCore: 2 +LogicalCores: 32 +Family 23 Model: 113 Vendor ID: AMD +Features: ADX,AESNI,AVX,AVX2,BMI1,BMI2,CLMUL,CMOV,CX16,F16C,FMA3,HTT,HYPERVISOR,LZCNT,MMX,MMXEXT,NX,POPCNT,RDRAND,RDSEED,RDTSCP,SHA,SSE,SSE2,SSE3,SSE4,SSE42,SSE4A,SSSE3 +Cacheline bytes: 64 +L1 Data Cache: 32768 bytes +L1 Instruction Cache: 32768 bytes +L2 Cache: 524288 bytes +L3 Cache: 16777216 bytes +Frequency 0 hz +We have Streaming SIMD 2 Extensions +``` + +# usage + +The `cpuid.CPU` provides access to CPU features. Use `cpuid.CPU.Supports()` to check for CPU features. +A faster `cpuid.CPU.Has()` is provided which will usually be inlined by the gc compiler. + +Note that for some cpu/os combinations some features will not be detected. +`amd64` has rather good support and should work reliably on all platforms. + +Note that hypervisors may not pass through all CPU features. + +## arm64 feature detection + +Not all operating systems provide ARM features directly +and there is no safe way to do so for the rest. + +Currently `arm64/linux` and `arm64/freebsd` should be quite reliable. +`arm64/darwin` adds features expected from the M1 processor, but a lot remains undetected. + +A `DetectARM()` can be used if you are able to control your deployment, +it will detect CPU features, but may crash if the OS doesn't intercept the calls. +A `-cpu.arm` flag for detecting unsafe ARM features can be added. See below. + +Note that currently only features are detected on ARM, +no additional information is currently available. + +## flags + +It is possible to add flags that affects cpu detection. + +For this the `Flags()` command is provided. + +This must be called *before* `flag.Parse()` AND after the flags have been parsed `Detect()` must be called. + +This means that any detection used in `init()` functions will not contain these flags. + +Example: + +```Go +package main + +import ( + "flag" + "fmt" + "strings" + + "github.com/klauspost/cpuid/v2" +) + +func main() { + cpuid.Flags() + flag.Parse() + cpuid.Detect() + + // Test if we have these specific features: + if cpuid.CPU.Supports(cpuid.SSE, cpuid.SSE2) { + fmt.Println("We have Streaming SIMD 2 Extensions") + } +} +``` + +# license + +This code is published under an MIT license. See LICENSE file for more information. diff --git a/vendor/github.com/klauspost/cpuid/v2/cpuid.go b/vendor/github.com/klauspost/cpuid/v2/cpuid.go new file mode 100644 index 0000000..43e9cc1 --- /dev/null +++ b/vendor/github.com/klauspost/cpuid/v2/cpuid.go @@ -0,0 +1,1023 @@ +// Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. + +// Package cpuid provides information about the CPU running the current program. +// +// CPU features are detected on startup, and kept for fast access through the life of the application. +// Currently x86 / x64 (AMD64) as well as arm64 is supported. +// +// You can access the CPU information by accessing the shared CPU variable of the cpuid library. +// +// Package home: https://github.com/klauspost/cpuid +package cpuid + +import ( + "flag" + "fmt" + "math" + "os" + "runtime" + "strings" +) + +// AMD refererence: https://www.amd.com/system/files/TechDocs/25481.pdf +// and Processor Programming Reference (PPR) + +// Vendor is a representation of a CPU vendor. +type Vendor int + +const ( + VendorUnknown Vendor = iota + Intel + AMD + VIA + Transmeta + NSC + KVM // Kernel-based Virtual Machine + MSVM // Microsoft Hyper-V or Windows Virtual PC + VMware + XenHVM + Bhyve + Hygon + SiS + RDC + + Ampere + ARM + Broadcom + Cavium + DEC + Fujitsu + Infineon + Motorola + NVIDIA + AMCC + Qualcomm + Marvell + + lastVendor +) + +//go:generate stringer -type=FeatureID,Vendor + +// FeatureID is the ID of a specific cpu feature. +type FeatureID int + +const ( + // Keep index -1 as unknown + UNKNOWN = -1 + + // Add features + ADX FeatureID = iota // Intel ADX (Multi-Precision Add-Carry Instruction Extensions) + AESNI // Advanced Encryption Standard New Instructions + AMD3DNOW // AMD 3DNOW + AMD3DNOWEXT // AMD 3DNowExt + AMXBF16 // Tile computational operations on BFLOAT16 numbers + AMXINT8 // Tile computational operations on 8-bit integers + AMXTILE // Tile architecture + AVX // AVX functions + AVX2 // AVX2 functions + AVX512BF16 // AVX-512 BFLOAT16 Instructions + AVX512BITALG // AVX-512 Bit Algorithms + AVX512BW // AVX-512 Byte and Word Instructions + AVX512CD // AVX-512 Conflict Detection Instructions + AVX512DQ // AVX-512 Doubleword and Quadword Instructions + AVX512ER // AVX-512 Exponential and Reciprocal Instructions + AVX512F // AVX-512 Foundation + AVX512IFMA // AVX-512 Integer Fused Multiply-Add Instructions + AVX512PF // AVX-512 Prefetch Instructions + AVX512VBMI // AVX-512 Vector Bit Manipulation Instructions + AVX512VBMI2 // AVX-512 Vector Bit Manipulation Instructions, Version 2 + AVX512VL // AVX-512 Vector Length Extensions + AVX512VNNI // AVX-512 Vector Neural Network Instructions + AVX512VP2INTERSECT // AVX-512 Intersect for D/Q + AVX512VPOPCNTDQ // AVX-512 Vector Population Count Doubleword and Quadword + AVXSLOW // Indicates the CPU performs 2 128 bit operations instead of one. + BMI1 // Bit Manipulation Instruction Set 1 + BMI2 // Bit Manipulation Instruction Set 2 + CLDEMOTE // Cache Line Demote + CLMUL // Carry-less Multiplication + CMOV // i686 CMOV + CX16 // CMPXCHG16B Instruction + ENQCMD // Enqueue Command + ERMS // Enhanced REP MOVSB/STOSB + F16C // Half-precision floating-point conversion + FMA3 // Intel FMA 3. Does not imply AVX. + FMA4 // Bulldozer FMA4 functions + GFNI // Galois Field New Instructions + HLE // Hardware Lock Elision + HTT // Hyperthreading (enabled) + HYPERVISOR // This bit has been reserved by Intel & AMD for use by hypervisors + IBPB // Indirect Branch Restricted Speculation (IBRS) and Indirect Branch Predictor Barrier (IBPB) + IBS // Instruction Based Sampling (AMD) + IBSBRNTRGT // Instruction Based Sampling Feature (AMD) + IBSFETCHSAM // Instruction Based Sampling Feature (AMD) + IBSFFV // Instruction Based Sampling Feature (AMD) + IBSOPCNT // Instruction Based Sampling Feature (AMD) + IBSOPCNTEXT // Instruction Based Sampling Feature (AMD) + IBSOPSAM // Instruction Based Sampling Feature (AMD) + IBSRDWROPCNT // Instruction Based Sampling Feature (AMD) + IBSRIPINVALIDCHK // Instruction Based Sampling Feature (AMD) + LZCNT // LZCNT instruction + MMX // standard MMX + MMXEXT // SSE integer functions or AMD MMX ext + MOVDIR64B // Move 64 Bytes as Direct Store + MOVDIRI // Move Doubleword as Direct Store + MPX // Intel MPX (Memory Protection Extensions) + NX // NX (No-Execute) bit + POPCNT // POPCNT instruction + RDRAND // RDRAND instruction is available + RDSEED // RDSEED instruction is available + RDTSCP // RDTSCP Instruction + RTM // Restricted Transactional Memory + SERIALIZE // Serialize Instruction Execution + SGX // Software Guard Extensions + SGXLC // Software Guard Extensions Launch Control + SHA // Intel SHA Extensions + SSE // SSE functions + SSE2 // P4 SSE functions + SSE3 // Prescott SSE3 functions + SSE4 // Penryn SSE4.1 functions + SSE42 // Nehalem SSE4.2 functions + SSE4A // AMD Barcelona microarchitecture SSE4a instructions + SSSE3 // Conroe SSSE3 functions + STIBP // Single Thread Indirect Branch Predictors + TBM // AMD Trailing Bit Manipulation + TSXLDTRK // Intel TSX Suspend Load Address Tracking + VAES // Vector AES + VMX // Virtual Machine Extensions + VPCLMULQDQ // Carry-Less Multiplication Quadword + WAITPKG // TPAUSE, UMONITOR, UMWAIT + WBNOINVD // Write Back and Do Not Invalidate Cache + XOP // Bulldozer XOP functions + + // ARM features: + AESARM // AES instructions + ARMCPUID // Some CPU ID registers readable at user-level + ASIMD // Advanced SIMD + ASIMDDP // SIMD Dot Product + ASIMDHP // Advanced SIMD half-precision floating point + ASIMDRDM // Rounding Double Multiply Accumulate/Subtract (SQRDMLAH/SQRDMLSH) + ATOMICS // Large System Extensions (LSE) + 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 + FP // Single-precision and double-precision floating point + FPHP // Half-precision floating point + GPA // Generic Pointer Authentication + JSCVT // Javascript-style double->int convert (FJCVTZS) + LRCPC // Weaker release consistency (LDAPR, etc) + PMULL // Polynomial Multiply instructions (PMULL/PMULL2) + SHA1 // SHA-1 instructions (SHA1C, etc) + SHA2 // SHA-2 instructions (SHA256H, etc) + SHA3 // SHA-3 instructions (EOR3, RAXI, XAR, BCAX) + SHA512 // SHA512 instructions + SM3 // SM3 instructions + SM4 // SM4 instructions + SVE // Scalable Vector Extension + + // Keep it last. It automatically defines the size of []flagSet + lastID + + firstID FeatureID = UNKNOWN + 1 +) + +// CPUInfo contains information about the detected system CPU. +type CPUInfo struct { + BrandName string // Brand name reported by the CPU + VendorID Vendor // Comparable CPU vendor ID + VendorString string // Raw vendor string. + featureSet flagSet // Features of the CPU + PhysicalCores int // Number of physical processor cores in your CPU. Will be 0 if undetectable. + ThreadsPerCore int // Number of threads per physical core. Will be 1 if undetectable. + LogicalCores int // Number of physical cores times threads that can run on each core through the use of hyperthreading. Will be 0 if undetectable. + Family int // CPU family number + Model int // CPU model number + CacheLine int // Cache line size in bytes. Will be 0 if undetectable. + Hz int64 // Clock speed, if known, 0 otherwise + Cache struct { + L1I int // L1 Instruction Cache (per core or shared). Will be -1 if undetected + L1D int // L1 Data Cache (per core or shared). Will be -1 if undetected + L2 int // L2 Cache (per core or shared). Will be -1 if undetected + L3 int // L3 Cache (per core, per ccx or shared). Will be -1 if undetected + } + SGX SGXSupport + maxFunc uint32 + maxExFunc 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) +var rdtscpAsm func() (eax, ebx, ecx, edx uint32) +var darwinHasAVX512 = func() bool { return false } + +// CPU contains information about the CPU as detected on startup, +// or when Detect last was called. +// +// Use this as the primary entry point to you data. +var CPU CPUInfo + +func init() { + initCPU() + Detect() +} + +// Detect will re-detect current CPU info. +// This will replace the content of the exported CPU variable. +// +// Unless you expect the CPU to change while you are running your program +// you should not need to call this function. +// If you call this, you must ensure that no other goroutine is accessing the +// exported CPU variable. +func Detect() { + // Set defaults + CPU.ThreadsPerCore = 1 + CPU.Cache.L1I = -1 + CPU.Cache.L1D = -1 + CPU.Cache.L2 = -1 + CPU.Cache.L3 = -1 + safe := true + if detectArmFlag != nil { + safe = !*detectArmFlag + } + addInfo(&CPU, safe) + if displayFeats != nil && *displayFeats { + fmt.Println("cpu features:", strings.Join(CPU.FeatureSet(), ",")) + // Exit with non-zero so tests will print value. + os.Exit(1) + } + if disableFlag != nil { + s := strings.Split(*disableFlag, ",") + for _, feat := range s { + feat := ParseFeature(strings.TrimSpace(feat)) + if feat != UNKNOWN { + CPU.featureSet.unset(feat) + } + } + } +} + +// DetectARM will detect ARM64 features. +// This is NOT done automatically since it can potentially crash +// if the OS does not handle the command. +// If in the future this can be done safely this function may not +// do anything. +func DetectARM() { + addInfo(&CPU, false) +} + +var detectArmFlag *bool +var displayFeats *bool +var disableFlag *string + +// Flags will enable flags. +// This must be called *before* flag.Parse AND +// Detect must be called after the flags have been parsed. +// Note that this means that any detection used in init() functions +// will not contain these flags. +func Flags() { + disableFlag = flag.String("cpu.disable", "", "disable cpu features; comma separated list") + displayFeats = flag.Bool("cpu.features", false, "lists cpu features and exits") + detectArmFlag = flag.Bool("cpu.arm", false, "allow ARM features to be detected; can potentially crash") +} + +// Supports returns whether the CPU supports all of the requested features. +func (c CPUInfo) Supports(ids ...FeatureID) bool { + for _, id := range ids { + if !c.featureSet.inSet(id) { + return false + } + } + return true +} + +// Has allows for checking a single feature. +// Should be inlined by the compiler. +func (c CPUInfo) Has(id FeatureID) bool { + return c.featureSet.inSet(id) +} + +// Disable will disable one or several features. +func (c *CPUInfo) Disable(ids ...FeatureID) bool { + for _, id := range ids { + c.featureSet.unset(id) + } + return true +} + +// Enable will disable one or several features even if they were undetected. +// This is of course not recommended for obvious reasons. +func (c *CPUInfo) Enable(ids ...FeatureID) bool { + for _, id := range ids { + c.featureSet.set(id) + } + return true +} + +// IsVendor returns true if vendor is recognized as Intel +func (c CPUInfo) IsVendor(v Vendor) bool { + return c.VendorID == v +} + +func (c CPUInfo) FeatureSet() []string { + s := make([]string, 0) + for _, f := range c.featureSet.Strings() { + s = append(s, f) + } + return s +} + +// RTCounter returns the 64-bit time-stamp counter +// Uses the RDTSCP instruction. The value 0 is returned +// if the CPU does not support the instruction. +func (c CPUInfo) RTCounter() uint64 { + if !c.Supports(RDTSCP) { + return 0 + } + a, _, _, d := rdtscpAsm() + return uint64(a) | (uint64(d) << 32) +} + +// Ia32TscAux returns the IA32_TSC_AUX part of the RDTSCP. +// This variable is OS dependent, but on Linux contains information +// about the current cpu/core the code is running on. +// If the RDTSCP instruction isn't supported on the CPU, the value 0 is returned. +func (c CPUInfo) Ia32TscAux() uint32 { + if !c.Supports(RDTSCP) { + return 0 + } + _, _, ecx, _ := rdtscpAsm() + return ecx +} + +// LogicalCPU will return the Logical CPU the code is currently executing on. +// This is likely to change when the OS re-schedules the running thread +// to another CPU. +// If the current core cannot be detected, -1 will be returned. +func (c CPUInfo) LogicalCPU() int { + if c.maxFunc < 1 { + return -1 + } + _, ebx, _, _ := cpuid(1) + return int(ebx >> 24) +} + +// hertz tries to compute the clock speed of the CPU. If leaf 15 is +// supported, use it, otherwise parse the brand string. Yes, really. +func hertz(model string) int64 { + mfi := maxFunctionID() + if mfi >= 0x15 { + eax, ebx, ecx, _ := cpuid(0x15) + if eax != 0 && ebx != 0 && ecx != 0 { + return int64((int64(ecx) * int64(ebx)) / int64(eax)) + } + } + // computeHz determines the official rated speed of a CPU from its brand + // string. This insanity is *actually the official documented way to do + // this according to Intel*, prior to leaf 0x15 existing. The official + // documentation only shows this working for exactly `x.xx` or `xxxx` + // cases, e.g., `2.50GHz` or `1300MHz`; this parser will accept other + // sizes. + hz := strings.LastIndex(model, "Hz") + if hz < 3 { + return 0 + } + var multiplier int64 + switch model[hz-1] { + case 'M': + multiplier = 1000 * 1000 + case 'G': + multiplier = 1000 * 1000 * 1000 + case 'T': + multiplier = 1000 * 1000 * 1000 * 1000 + } + if multiplier == 0 { + return 0 + } + freq := int64(0) + divisor := int64(0) + decimalShift := int64(1) + var i int + for i = hz - 2; i >= 0 && model[i] != ' '; i-- { + if model[i] >= '0' && model[i] <= '9' { + freq += int64(model[i]-'0') * decimalShift + decimalShift *= 10 + } else if model[i] == '.' { + if divisor != 0 { + return 0 + } + divisor = decimalShift + } else { + return 0 + } + } + // we didn't find a space + if i < 0 { + return 0 + } + if divisor != 0 { + return (freq * multiplier) / divisor + } + return freq * multiplier +} + +// VM Will return true if the cpu id indicates we are in +// a virtual machine. +func (c CPUInfo) VM() bool { + return CPU.featureSet.inSet(HYPERVISOR) +} + +// flags contains detected cpu features and characteristics +type flags uint64 + +// log2(bits_in_uint64) +const flagBitsLog2 = 6 +const flagBits = 1 << flagBitsLog2 +const flagMask = flagBits - 1 + +// flagSet contains detected cpu features and characteristics in an array of flags +type flagSet [(lastID + flagMask) / flagBits]flags + +func (s flagSet) inSet(feat FeatureID) bool { + return s[feat>>flagBitsLog2]&(1<<(feat&flagMask)) != 0 +} + +func (s *flagSet) set(feat FeatureID) { + s[feat>>flagBitsLog2] |= 1 << (feat & flagMask) +} + +// setIf will set a feature if boolean is true. +func (s *flagSet) setIf(cond bool, features ...FeatureID) { + if cond { + for _, offset := range features { + s[offset>>flagBitsLog2] |= 1 << (offset & flagMask) + } + } +} + +func (s *flagSet) unset(offset FeatureID) { + bit := flags(1 << (offset & flagMask)) + s[offset>>flagBitsLog2] = s[offset>>flagBitsLog2] & ^bit +} + +// or with another flagset. +func (s *flagSet) or(other flagSet) { + for i, v := range other[:] { + s[i] |= v + } +} + +// ParseFeature will parse the string and return the ID of the matching feature. +// Will return UNKNOWN if not found. +func ParseFeature(s string) FeatureID { + s = strings.ToUpper(s) + for i := firstID; i < lastID; i++ { + if i.String() == s { + return i + } + } + return UNKNOWN +} + +// Strings returns an array of the detected features for FlagsSet. +func (s flagSet) Strings() []string { + if len(s) == 0 { + return []string{""} + } + r := make([]string, 0) + for i := firstID; i < lastID; i++ { + if s.inSet(i) { + r = append(r, i.String()) + } + } + return r +} + +func maxExtendedFunction() uint32 { + eax, _, _, _ := cpuid(0x80000000) + return eax +} + +func maxFunctionID() uint32 { + a, _, _, _ := cpuid(0) + return a +} + +func brandName() string { + if maxExtendedFunction() >= 0x80000004 { + v := make([]uint32, 0, 48) + for i := uint32(0); i < 3; i++ { + a, b, c, d := cpuid(0x80000002 + i) + v = append(v, a, b, c, d) + } + return strings.Trim(string(valAsString(v...)), " ") + } + return "unknown" +} + +func threadsPerCore() int { + mfi := maxFunctionID() + vend, _ := vendorID() + + if mfi < 0x4 || (vend != Intel && vend != AMD) { + return 1 + } + + if mfi < 0xb { + if vend != Intel { + return 1 + } + _, b, _, d := cpuid(1) + if (d & (1 << 28)) != 0 { + // v will contain logical core count + v := (b >> 16) & 255 + if v > 1 { + a4, _, _, _ := cpuid(4) + // physical cores + v2 := (a4 >> 26) + 1 + if v2 > 0 { + return int(v) / int(v2) + } + } + } + return 1 + } + _, b, _, _ := cpuidex(0xb, 0) + if b&0xffff == 0 { + if vend == AMD { + // Workaround for AMD returning 0, assume 2 if >= Zen 2 + // It will be more correct than not. + fam, _ := familyModel() + _, _, _, d := cpuid(1) + if (d&(1<<28)) != 0 && fam >= 23 { + return 2 + } + } + return 1 + } + return int(b & 0xffff) +} + +func logicalCores() int { + mfi := maxFunctionID() + v, _ := vendorID() + switch v { + case Intel: + // Use this on old Intel processors + if mfi < 0xb { + if mfi < 1 { + return 0 + } + // CPUID.1:EBX[23:16] represents the maximum number of addressable IDs (initial APIC ID) + // that can be assigned to logical processors in a physical package. + // The value may not be the same as the number of logical processors that are present in the hardware of a physical package. + _, ebx, _, _ := cpuid(1) + logical := (ebx >> 16) & 0xff + return int(logical) + } + _, b, _, _ := cpuidex(0xb, 1) + return int(b & 0xffff) + case AMD, Hygon: + _, b, _, _ := cpuid(1) + return int((b >> 16) & 0xff) + default: + return 0 + } +} + +func familyModel() (int, int) { + if maxFunctionID() < 0x1 { + return 0, 0 + } + eax, _, _, _ := cpuid(1) + family := ((eax >> 8) & 0xf) + ((eax >> 20) & 0xff) + model := ((eax >> 4) & 0xf) + ((eax >> 12) & 0xf0) + return int(family), int(model) +} + +func physicalCores() int { + v, _ := vendorID() + switch v { + case Intel: + return logicalCores() / threadsPerCore() + case AMD, Hygon: + lc := logicalCores() + tpc := threadsPerCore() + if lc > 0 && tpc > 0 { + return lc / tpc + } + + // The following is inaccurate on AMD EPYC 7742 64-Core Processor + if maxExtendedFunction() >= 0x80000008 { + _, _, c, _ := cpuid(0x80000008) + if c&0xff > 0 { + return int(c&0xff) + 1 + } + } + } + return 0 +} + +// Except from http://en.wikipedia.org/wiki/CPUID#EAX.3D0:_Get_vendor_ID +var vendorMapping = map[string]Vendor{ + "AMDisbetter!": AMD, + "AuthenticAMD": AMD, + "CentaurHauls": VIA, + "GenuineIntel": Intel, + "TransmetaCPU": Transmeta, + "GenuineTMx86": Transmeta, + "Geode by NSC": NSC, + "VIA VIA VIA ": VIA, + "KVMKVMKVMKVM": KVM, + "Microsoft Hv": MSVM, + "VMwareVMware": VMware, + "XenVMMXenVMM": XenHVM, + "bhyve bhyve ": Bhyve, + "HygonGenuine": Hygon, + "Vortex86 SoC": SiS, + "SiS SiS SiS ": SiS, + "RiseRiseRise": SiS, + "Genuine RDC": RDC, +} + +func vendorID() (Vendor, string) { + _, b, c, d := cpuid(0) + v := string(valAsString(b, d, c)) + vend, ok := vendorMapping[v] + if !ok { + return VendorUnknown, v + } + return vend, v +} + +func cacheLine() int { + if maxFunctionID() < 0x1 { + return 0 + } + + _, ebx, _, _ := cpuid(1) + cache := (ebx & 0xff00) >> 5 // cflush size + if cache == 0 && maxExtendedFunction() >= 0x80000006 { + _, _, ecx, _ := cpuid(0x80000006) + cache = ecx & 0xff // cacheline size + } + // TODO: Read from Cache and TLB Information + return int(cache) +} + +func (c *CPUInfo) cacheSize() { + c.Cache.L1D = -1 + c.Cache.L1I = -1 + c.Cache.L2 = -1 + c.Cache.L3 = -1 + vendor, _ := vendorID() + switch vendor { + case Intel: + if maxFunctionID() < 4 { + return + } + for i := uint32(0); ; i++ { + eax, ebx, ecx, _ := cpuidex(4, i) + cacheType := eax & 15 + if cacheType == 0 { + break + } + cacheLevel := (eax >> 5) & 7 + coherency := int(ebx&0xfff) + 1 + partitions := int((ebx>>12)&0x3ff) + 1 + associativity := int((ebx>>22)&0x3ff) + 1 + sets := int(ecx) + 1 + size := associativity * partitions * coherency * sets + switch cacheLevel { + case 1: + if cacheType == 1 { + // 1 = Data Cache + c.Cache.L1D = size + } else if cacheType == 2 { + // 2 = Instruction Cache + c.Cache.L1I = size + } else { + if c.Cache.L1D < 0 { + c.Cache.L1I = size + } + if c.Cache.L1I < 0 { + c.Cache.L1I = size + } + } + case 2: + c.Cache.L2 = size + case 3: + c.Cache.L3 = size + } + } + case AMD, Hygon: + // Untested. + if maxExtendedFunction() < 0x80000005 { + return + } + _, _, ecx, edx := cpuid(0x80000005) + c.Cache.L1D = int(((ecx >> 24) & 0xFF) * 1024) + c.Cache.L1I = int(((edx >> 24) & 0xFF) * 1024) + + if maxExtendedFunction() < 0x80000006 { + return + } + _, _, ecx, _ = cpuid(0x80000006) + c.Cache.L2 = int(((ecx >> 16) & 0xFFFF) * 1024) + + // CPUID Fn8000_001D_EAX_x[N:0] Cache Properties + if maxExtendedFunction() < 0x8000001D { + return + } + for i := uint32(0); i < math.MaxUint32; i++ { + eax, ebx, ecx, _ := cpuidex(0x8000001D, i) + + level := (eax >> 5) & 7 + cacheNumSets := ecx + 1 + cacheLineSize := 1 + (ebx & 2047) + cachePhysPartitions := 1 + ((ebx >> 12) & 511) + cacheNumWays := 1 + ((ebx >> 22) & 511) + + typ := eax & 15 + size := int(cacheNumSets * cacheLineSize * cachePhysPartitions * cacheNumWays) + if typ == 0 { + return + } + + switch level { + case 1: + switch typ { + case 1: + // Data cache + c.Cache.L1D = size + case 2: + // Inst cache + c.Cache.L1I = size + default: + if c.Cache.L1D < 0 { + c.Cache.L1I = size + } + if c.Cache.L1I < 0 { + c.Cache.L1I = size + } + } + case 2: + c.Cache.L2 = size + case 3: + c.Cache.L3 = size + } + } + } + + return +} + +type SGXEPCSection struct { + BaseAddress uint64 + EPCSize uint64 +} + +type SGXSupport struct { + Available bool + LaunchControl bool + SGX1Supported bool + SGX2Supported bool + MaxEnclaveSizeNot64 int64 + MaxEnclaveSize64 int64 + EPCSections []SGXEPCSection +} + +func hasSGX(available, lc bool) (rval SGXSupport) { + rval.Available = available + + if !available { + return + } + + rval.LaunchControl = lc + + a, _, _, d := cpuidex(0x12, 0) + rval.SGX1Supported = a&0x01 != 0 + rval.SGX2Supported = a&0x02 != 0 + rval.MaxEnclaveSizeNot64 = 1 << (d & 0xFF) // pow 2 + rval.MaxEnclaveSize64 = 1 << ((d >> 8) & 0xFF) // pow 2 + rval.EPCSections = make([]SGXEPCSection, 0) + + for subleaf := uint32(2); subleaf < 2+8; subleaf++ { + eax, ebx, ecx, edx := cpuidex(0x12, subleaf) + leafType := eax & 0xf + + if leafType == 0 { + // Invalid subleaf, stop iterating + break + } else if leafType == 1 { + // EPC Section subleaf + baseAddress := uint64(eax&0xfffff000) + (uint64(ebx&0x000fffff) << 32) + size := uint64(ecx&0xfffff000) + (uint64(edx&0x000fffff) << 32) + + section := SGXEPCSection{BaseAddress: baseAddress, EPCSize: size} + rval.EPCSections = append(rval.EPCSections, section) + } + } + + return +} + +func support() flagSet { + var fs flagSet + mfi := maxFunctionID() + vend, _ := vendorID() + if mfi < 0x1 { + return fs + } + family, model := familyModel() + + _, _, c, d := cpuid(1) + fs.setIf((d&(1<<15)) != 0, CMOV) + fs.setIf((d&(1<<23)) != 0, MMX) + fs.setIf((d&(1<<25)) != 0, MMXEXT) + fs.setIf((d&(1<<25)) != 0, SSE) + fs.setIf((d&(1<<26)) != 0, SSE2) + fs.setIf((c&1) != 0, SSE3) + fs.setIf((c&(1<<5)) != 0, VMX) + fs.setIf((c&0x00000200) != 0, SSSE3) + fs.setIf((c&0x00080000) != 0, SSE4) + fs.setIf((c&0x00100000) != 0, SSE42) + fs.setIf((c&(1<<25)) != 0, AESNI) + fs.setIf((c&(1<<1)) != 0, CLMUL) + fs.setIf(c&(1<<23) != 0, POPCNT) + fs.setIf(c&(1<<30) != 0, RDRAND) + + // This bit has been reserved by Intel & AMD for use by hypervisors, + // and indicates the presence of a hypervisor. + fs.setIf(c&(1<<31) != 0, HYPERVISOR) + fs.setIf(c&(1<<29) != 0, F16C) + fs.setIf(c&(1<<13) != 0, CX16) + + if vend == Intel && (d&(1<<28)) != 0 && mfi >= 4 { + fs.setIf(threadsPerCore() > 1, HTT) + } + if vend == AMD && (d&(1<<28)) != 0 && mfi >= 4 { + fs.setIf(threadsPerCore() > 1, HTT) + } + // Check XGETBV/XSAVE (26), OXSAVE (27) and AVX (28) bits + const avxCheck = 1<<26 | 1<<27 | 1<<28 + if c&avxCheck == avxCheck { + // Check for OS support + eax, _ := xgetbv(0) + if (eax & 0x6) == 0x6 { + fs.set(AVX) + switch vend { + case Intel: + // Older than Haswell. + fs.setIf(family == 6 && model < 60, AVXSLOW) + case AMD: + // Older than Zen 2 + fs.setIf(family < 23 || (family == 23 && model < 49), AVXSLOW) + } + } + } + // FMA3 can be used with SSE registers, so no OS support is strictly needed. + // fma3 and OSXSAVE needed. + const fma3Check = 1<<12 | 1<<27 + fs.setIf(c&fma3Check == fma3Check, FMA3) + + // Check AVX2, AVX2 requires OS support, but BMI1/2 don't. + if mfi >= 7 { + _, ebx, ecx, edx := cpuidex(7, 0) + eax1, _, _, _ := cpuidex(7, 1) + if fs.inSet(AVX) && (ebx&0x00000020) != 0 { + fs.set(AVX2) + } + // CPUID.(EAX=7, ECX=0).EBX + if (ebx & 0x00000008) != 0 { + fs.set(BMI1) + fs.setIf((ebx&0x00000100) != 0, BMI2) + } + fs.setIf(ebx&(1<<2) != 0, SGX) + fs.setIf(ebx&(1<<4) != 0, HLE) + fs.setIf(ebx&(1<<9) != 0, ERMS) + fs.setIf(ebx&(1<<11) != 0, RTM) + fs.setIf(ebx&(1<<14) != 0, MPX) + fs.setIf(ebx&(1<<18) != 0, RDSEED) + fs.setIf(ebx&(1<<19) != 0, ADX) + fs.setIf(ebx&(1<<29) != 0, SHA) + // CPUID.(EAX=7, ECX=0).ECX + fs.setIf(ecx&(1<<5) != 0, WAITPKG) + fs.setIf(ecx&(1<<25) != 0, CLDEMOTE) + fs.setIf(ecx&(1<<27) != 0, MOVDIRI) + fs.setIf(ecx&(1<<28) != 0, MOVDIR64B) + fs.setIf(ecx&(1<<29) != 0, ENQCMD) + fs.setIf(ecx&(1<<30) != 0, SGXLC) + // CPUID.(EAX=7, ECX=0).EDX + fs.setIf(edx&(1<<14) != 0, SERIALIZE) + fs.setIf(edx&(1<<16) != 0, TSXLDTRK) + fs.setIf(edx&(1<<26) != 0, IBPB) + fs.setIf(edx&(1<<27) != 0, STIBP) + + // Only detect AVX-512 features if XGETBV is supported + if c&((1<<26)|(1<<27)) == (1<<26)|(1<<27) { + // Check for OS support + eax, _ := xgetbv(0) + + // Verify that XCR0[7:5] = ‘111b’ (OPMASK state, upper 256-bit of ZMM0-ZMM15 and + // ZMM16-ZMM31 state are enabled by OS) + /// and that XCR0[2:1] = ‘11b’ (XMM state and YMM state are enabled by OS). + hasAVX512 := (eax>>5)&7 == 7 && (eax>>1)&3 == 3 + if runtime.GOOS == "darwin" { + hasAVX512 = fs.inSet(AVX) && darwinHasAVX512() + } + if hasAVX512 { + fs.setIf(ebx&(1<<16) != 0, AVX512F) + fs.setIf(ebx&(1<<17) != 0, AVX512DQ) + fs.setIf(ebx&(1<<21) != 0, AVX512IFMA) + fs.setIf(ebx&(1<<26) != 0, AVX512PF) + fs.setIf(ebx&(1<<27) != 0, AVX512ER) + fs.setIf(ebx&(1<<28) != 0, AVX512CD) + fs.setIf(ebx&(1<<30) != 0, AVX512BW) + fs.setIf(ebx&(1<<31) != 0, AVX512VL) + // ecx + fs.setIf(ecx&(1<<1) != 0, AVX512VBMI) + fs.setIf(ecx&(1<<6) != 0, AVX512VBMI2) + fs.setIf(ecx&(1<<8) != 0, GFNI) + fs.setIf(ecx&(1<<9) != 0, VAES) + fs.setIf(ecx&(1<<10) != 0, VPCLMULQDQ) + fs.setIf(ecx&(1<<11) != 0, AVX512VNNI) + fs.setIf(ecx&(1<<12) != 0, AVX512BITALG) + fs.setIf(ecx&(1<<14) != 0, AVX512VPOPCNTDQ) + // edx + fs.setIf(edx&(1<<8) != 0, AVX512VP2INTERSECT) + fs.setIf(edx&(1<<22) != 0, AMXBF16) + fs.setIf(edx&(1<<24) != 0, AMXTILE) + fs.setIf(edx&(1<<25) != 0, AMXINT8) + // eax1 = CPUID.(EAX=7, ECX=1).EAX + fs.setIf(eax1&(1<<5) != 0, AVX512BF16) + } + } + } + + if maxExtendedFunction() >= 0x80000001 { + _, _, c, d := cpuid(0x80000001) + if (c & (1 << 5)) != 0 { + fs.set(LZCNT) + fs.set(POPCNT) + } + fs.setIf((c&(1<<10)) != 0, IBS) + fs.setIf((d&(1<<31)) != 0, AMD3DNOW) + fs.setIf((d&(1<<30)) != 0, AMD3DNOWEXT) + fs.setIf((d&(1<<23)) != 0, MMX) + fs.setIf((d&(1<<22)) != 0, MMXEXT) + fs.setIf((c&(1<<6)) != 0, SSE4A) + fs.setIf(d&(1<<20) != 0, NX) + fs.setIf(d&(1<<27) != 0, RDTSCP) + + /* XOP and FMA4 use the AVX instruction coding scheme, so they can't be + * used unless the OS has AVX support. */ + if fs.inSet(AVX) { + fs.setIf((c&0x00000800) != 0, XOP) + fs.setIf((c&0x00010000) != 0, FMA4) + } + + } + if maxExtendedFunction() >= 0x80000008 { + _, b, _, _ := cpuid(0x80000008) + fs.setIf((b&(1<<9)) != 0, WBNOINVD) + } + + if maxExtendedFunction() >= 0x8000001b && fs.inSet(IBS) { + eax, _, _, _ := cpuid(0x8000001b) + fs.setIf((eax>>0)&1 == 1, IBSFFV) + fs.setIf((eax>>1)&1 == 1, IBSFETCHSAM) + fs.setIf((eax>>2)&1 == 1, IBSOPSAM) + fs.setIf((eax>>3)&1 == 1, IBSRDWROPCNT) + fs.setIf((eax>>4)&1 == 1, IBSOPCNT) + fs.setIf((eax>>5)&1 == 1, IBSBRNTRGT) + fs.setIf((eax>>6)&1 == 1, IBSOPCNTEXT) + fs.setIf((eax>>7)&1 == 1, IBSRIPINVALIDCHK) + } + + return fs +} + +func valAsString(values ...uint32) []byte { + r := make([]byte, 4*len(values)) + for i, v := range values { + dst := r[i*4:] + dst[0] = byte(v & 0xff) + dst[1] = byte((v >> 8) & 0xff) + dst[2] = byte((v >> 16) & 0xff) + dst[3] = byte((v >> 24) & 0xff) + switch { + case dst[0] == 0: + return r[:i*4] + case dst[1] == 0: + return r[:i*4+1] + case dst[2] == 0: + return r[:i*4+2] + case dst[3] == 0: + return r[:i*4+3] + } + } + return r +} diff --git a/vendor/github.com/klauspost/cpuid/v2/cpuid_386.s b/vendor/github.com/klauspost/cpuid/v2/cpuid_386.s new file mode 100644 index 0000000..8587c3a --- /dev/null +++ b/vendor/github.com/klauspost/cpuid/v2/cpuid_386.s @@ -0,0 +1,47 @@ +// Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. + +//+build 386,!gccgo,!noasm,!appengine + +// func asmCpuid(op uint32) (eax, ebx, ecx, edx uint32) +TEXT ·asmCpuid(SB), 7, $0 + XORL CX, CX + MOVL op+0(FP), AX + CPUID + MOVL AX, eax+4(FP) + MOVL BX, ebx+8(FP) + MOVL CX, ecx+12(FP) + MOVL DX, edx+16(FP) + RET + +// func asmCpuidex(op, op2 uint32) (eax, ebx, ecx, edx uint32) +TEXT ·asmCpuidex(SB), 7, $0 + MOVL op+0(FP), AX + MOVL op2+4(FP), CX + CPUID + MOVL AX, eax+8(FP) + MOVL BX, ebx+12(FP) + MOVL CX, ecx+16(FP) + MOVL DX, edx+20(FP) + RET + +// func xgetbv(index uint32) (eax, edx uint32) +TEXT ·asmXgetbv(SB), 7, $0 + MOVL index+0(FP), CX + BYTE $0x0f; BYTE $0x01; BYTE $0xd0 // XGETBV + MOVL AX, eax+4(FP) + MOVL DX, edx+8(FP) + RET + +// func asmRdtscpAsm() (eax, ebx, ecx, edx uint32) +TEXT ·asmRdtscpAsm(SB), 7, $0 + BYTE $0x0F; BYTE $0x01; BYTE $0xF9 // RDTSCP + MOVL AX, eax+0(FP) + MOVL BX, ebx+4(FP) + MOVL CX, ecx+8(FP) + MOVL DX, edx+12(FP) + RET + +// func asmDarwinHasAVX512() bool +TEXT ·asmDarwinHasAVX512(SB), 7, $0 + MOVL $0, eax+0(FP) + RET diff --git a/vendor/github.com/klauspost/cpuid/v2/cpuid_amd64.s b/vendor/github.com/klauspost/cpuid/v2/cpuid_amd64.s new file mode 100644 index 0000000..bc11f89 --- /dev/null +++ b/vendor/github.com/klauspost/cpuid/v2/cpuid_amd64.s @@ -0,0 +1,72 @@ +// Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. + +//+build amd64,!gccgo,!noasm,!appengine + +// func asmCpuid(op uint32) (eax, ebx, ecx, edx uint32) +TEXT ·asmCpuid(SB), 7, $0 + XORQ CX, CX + MOVL op+0(FP), AX + CPUID + MOVL AX, eax+8(FP) + MOVL BX, ebx+12(FP) + MOVL CX, ecx+16(FP) + MOVL DX, edx+20(FP) + RET + +// func asmCpuidex(op, op2 uint32) (eax, ebx, ecx, edx uint32) +TEXT ·asmCpuidex(SB), 7, $0 + MOVL op+0(FP), AX + MOVL op2+4(FP), CX + CPUID + MOVL AX, eax+8(FP) + MOVL BX, ebx+12(FP) + MOVL CX, ecx+16(FP) + MOVL DX, edx+20(FP) + RET + +// func asmXgetbv(index uint32) (eax, edx uint32) +TEXT ·asmXgetbv(SB), 7, $0 + MOVL index+0(FP), CX + BYTE $0x0f; BYTE $0x01; BYTE $0xd0 // XGETBV + MOVL AX, eax+8(FP) + MOVL DX, edx+12(FP) + RET + +// func asmRdtscpAsm() (eax, ebx, ecx, edx uint32) +TEXT ·asmRdtscpAsm(SB), 7, $0 + BYTE $0x0F; BYTE $0x01; BYTE $0xF9 // RDTSCP + MOVL AX, eax+0(FP) + MOVL BX, ebx+4(FP) + MOVL CX, ecx+8(FP) + MOVL DX, edx+12(FP) + RET + +// From https://go-review.googlesource.com/c/sys/+/285572/ +// func asmDarwinHasAVX512() bool +TEXT ·asmDarwinHasAVX512(SB), 7, $0-1 + MOVB $0, ret+0(FP) // default to false + +#ifdef GOOS_darwin // return if not darwin +#ifdef GOARCH_amd64 // return if not amd64 +// These values from: +// https://github.com/apple/darwin-xnu/blob/xnu-4570.1.46/osfmk/i386/cpu_capabilities.h +#define commpage64_base_address 0x00007fffffe00000 +#define commpage64_cpu_capabilities64 (commpage64_base_address+0x010) +#define commpage64_version (commpage64_base_address+0x01E) +#define hasAVX512F 0x0000004000000000 + MOVQ $commpage64_version, BX + MOVW (BX), AX + CMPW AX, $13 // versions < 13 do not support AVX512 + JL no_avx512 + MOVQ $commpage64_cpu_capabilities64, BX + MOVQ (BX), AX + MOVQ $hasAVX512F, CX + ANDQ CX, AX + JZ no_avx512 + MOVB $1, ret+0(FP) + +no_avx512: +#endif +#endif + RET + diff --git a/vendor/github.com/klauspost/cpuid/v2/cpuid_arm64.s b/vendor/github.com/klauspost/cpuid/v2/cpuid_arm64.s new file mode 100644 index 0000000..b31d6ae --- /dev/null +++ b/vendor/github.com/klauspost/cpuid/v2/cpuid_arm64.s @@ -0,0 +1,26 @@ +// Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. + +//+build arm64,!gccgo,!noasm,!appengine + +// See https://www.kernel.org/doc/Documentation/arm64/cpu-feature-registers.txt + +// func getMidr +TEXT ·getMidr(SB), 7, $0 + WORD $0xd5380000 // mrs x0, midr_el1 /* Main ID Register */ + MOVD R0, midr+0(FP) + RET + +// func getProcFeatures +TEXT ·getProcFeatures(SB), 7, $0 + WORD $0xd5380400 // mrs x0, id_aa64pfr0_el1 /* Processor Feature Register 0 */ + MOVD R0, procFeatures+0(FP) + RET + +// func getInstAttributes +TEXT ·getInstAttributes(SB), 7, $0 + WORD $0xd5380600 // mrs x0, id_aa64isar0_el1 /* Instruction Set Attribute Register 0 */ + WORD $0xd5380621 // mrs x1, id_aa64isar1_el1 /* Instruction Set Attribute Register 1 */ + MOVD R0, instAttrReg0+0(FP) + MOVD R1, instAttrReg1+8(FP) + RET + diff --git a/vendor/github.com/klauspost/cpuid/v2/detect_arm64.go b/vendor/github.com/klauspost/cpuid/v2/detect_arm64.go new file mode 100644 index 0000000..9bf9f77 --- /dev/null +++ b/vendor/github.com/klauspost/cpuid/v2/detect_arm64.go @@ -0,0 +1,246 @@ +// Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. + +//+build arm64,!gccgo,!noasm,!appengine + +package cpuid + +import "runtime" + +func getMidr() (midr uint64) +func getProcFeatures() (procFeatures uint64) +func getInstAttributes() (instAttrReg0, instAttrReg1 uint64) + +func initCPU() { + cpuid = func(uint32) (a, b, c, d uint32) { return 0, 0, 0, 0 } + cpuidex = func(x, y uint32) (a, b, c, d uint32) { return 0, 0, 0, 0 } + xgetbv = func(uint32) (a, b uint32) { return 0, 0 } + rdtscpAsm = func() (a, b, c, d uint32) { return 0, 0, 0, 0 } +} + +func addInfo(c *CPUInfo, safe bool) { + // Seems to be safe to assume on ARM64 + c.CacheLine = 64 + detectOS(c) + + // ARM64 disabled since it may crash if interrupt is not intercepted by OS. + if safe && !c.Supports(ARMCPUID) && runtime.GOOS != "freebsd" { + return + } + midr := getMidr() + + // MIDR_EL1 - Main ID Register + // https://developer.arm.com/docs/ddi0595/h/aarch64-system-registers/midr_el1 + // x--------------------------------------------------x + // | Name | bits | visible | + // |--------------------------------------------------| + // | Implementer | [31-24] | y | + // |--------------------------------------------------| + // | Variant | [23-20] | y | + // |--------------------------------------------------| + // | Architecture | [19-16] | y | + // |--------------------------------------------------| + // | PartNum | [15-4] | y | + // |--------------------------------------------------| + // | Revision | [3-0] | y | + // x--------------------------------------------------x + + switch (midr >> 24) & 0xff { + case 0xC0: + c.VendorString = "Ampere Computing" + c.VendorID = Ampere + case 0x41: + c.VendorString = "Arm Limited" + c.VendorID = ARM + case 0x42: + c.VendorString = "Broadcom Corporation" + c.VendorID = Broadcom + case 0x43: + c.VendorString = "Cavium Inc" + c.VendorID = Cavium + case 0x44: + c.VendorString = "Digital Equipment Corporation" + c.VendorID = DEC + case 0x46: + c.VendorString = "Fujitsu Ltd" + c.VendorID = Fujitsu + case 0x49: + c.VendorString = "Infineon Technologies AG" + c.VendorID = Infineon + case 0x4D: + c.VendorString = "Motorola or Freescale Semiconductor Inc" + c.VendorID = Motorola + case 0x4E: + c.VendorString = "NVIDIA Corporation" + c.VendorID = NVIDIA + case 0x50: + c.VendorString = "Applied Micro Circuits Corporation" + c.VendorID = AMCC + case 0x51: + c.VendorString = "Qualcomm Inc" + c.VendorID = Qualcomm + case 0x56: + c.VendorString = "Marvell International Ltd" + c.VendorID = Marvell + case 0x69: + c.VendorString = "Intel Corporation" + c.VendorID = Intel + } + + // Lower 4 bits: Architecture + // Architecture Meaning + // 0b0001 Armv4. + // 0b0010 Armv4T. + // 0b0011 Armv5 (obsolete). + // 0b0100 Armv5T. + // 0b0101 Armv5TE. + // 0b0110 Armv5TEJ. + // 0b0111 Armv6. + // 0b1111 Architectural features are individually identified in the ID_* registers, see 'ID registers'. + // Upper 4 bit: Variant + // An IMPLEMENTATION DEFINED variant number. + // Typically, this field is used to distinguish between different product variants, or major revisions of a product. + c.Family = int(midr>>16) & 0xff + + // PartNum, bits [15:4] + // An IMPLEMENTATION DEFINED primary part number for the device. + // On processors implemented by Arm, if the top four bits of the primary + // part number are 0x0 or 0x7, the variant and architecture are encoded differently. + // Revision, bits [3:0] + // An IMPLEMENTATION DEFINED revision number for the device. + c.Model = int(midr) & 0xffff + + procFeatures := getProcFeatures() + + // ID_AA64PFR0_EL1 - Processor Feature Register 0 + // x--------------------------------------------------x + // | Name | bits | visible | + // |--------------------------------------------------| + // | DIT | [51-48] | y | + // |--------------------------------------------------| + // | SVE | [35-32] | y | + // |--------------------------------------------------| + // | GIC | [27-24] | n | + // |--------------------------------------------------| + // | AdvSIMD | [23-20] | y | + // |--------------------------------------------------| + // | FP | [19-16] | y | + // |--------------------------------------------------| + // | EL3 | [15-12] | n | + // |--------------------------------------------------| + // | EL2 | [11-8] | n | + // |--------------------------------------------------| + // | EL1 | [7-4] | n | + // |--------------------------------------------------| + // | EL0 | [3-0] | n | + // x--------------------------------------------------x + + var f flagSet + // if procFeatures&(0xf<<48) != 0 { + // fmt.Println("DIT") + // } + f.setIf(procFeatures&(0xf<<32) != 0, SVE) + if procFeatures&(0xf<<20) != 15<<20 { + f.set(ASIMD) + // https://developer.arm.com/docs/ddi0595/b/aarch64-system-registers/id_aa64pfr0_el1 + // 0b0001 --> As for 0b0000, and also includes support for half-precision floating-point arithmetic. + f.setIf(procFeatures&(0xf<<20) == 1<<20, FPHP, ASIMDHP) + } + f.setIf(procFeatures&(0xf<<16) != 0, FP) + + instAttrReg0, instAttrReg1 := getInstAttributes() + + // https://developer.arm.com/docs/ddi0595/b/aarch64-system-registers/id_aa64isar0_el1 + // + // ID_AA64ISAR0_EL1 - Instruction Set Attribute Register 0 + // x--------------------------------------------------x + // | Name | bits | visible | + // |--------------------------------------------------| + // | TS | [55-52] | y | + // |--------------------------------------------------| + // | FHM | [51-48] | y | + // |--------------------------------------------------| + // | DP | [47-44] | y | + // |--------------------------------------------------| + // | SM4 | [43-40] | y | + // |--------------------------------------------------| + // | SM3 | [39-36] | y | + // |--------------------------------------------------| + // | SHA3 | [35-32] | y | + // |--------------------------------------------------| + // | RDM | [31-28] | y | + // |--------------------------------------------------| + // | ATOMICS | [23-20] | y | + // |--------------------------------------------------| + // | CRC32 | [19-16] | y | + // |--------------------------------------------------| + // | SHA2 | [15-12] | y | + // |--------------------------------------------------| + // | SHA1 | [11-8] | y | + // |--------------------------------------------------| + // | AES | [7-4] | y | + // x--------------------------------------------------x + + // if instAttrReg0&(0xf<<52) != 0 { + // fmt.Println("TS") + // } + // if instAttrReg0&(0xf<<48) != 0 { + // fmt.Println("FHM") + // } + f.setIf(instAttrReg0&(0xf<<44) != 0, ASIMDDP) + f.setIf(instAttrReg0&(0xf<<40) != 0, SM4) + f.setIf(instAttrReg0&(0xf<<36) != 0, SM3) + f.setIf(instAttrReg0&(0xf<<32) != 0, SHA3) + f.setIf(instAttrReg0&(0xf<<28) != 0, ASIMDRDM) + f.setIf(instAttrReg0&(0xf<<20) != 0, ATOMICS) + f.setIf(instAttrReg0&(0xf<<16) != 0, CRC32) + f.setIf(instAttrReg0&(0xf<<12) != 0, SHA2) + // https://developer.arm.com/docs/ddi0595/b/aarch64-system-registers/id_aa64isar0_el1 + // 0b0010 --> As 0b0001, plus SHA512H, SHA512H2, SHA512SU0, and SHA512SU1 instructions implemented. + f.setIf(instAttrReg0&(0xf<<12) == 2<<12, SHA512) + f.setIf(instAttrReg0&(0xf<<8) != 0, SHA1) + f.setIf(instAttrReg0&(0xf<<4) != 0, AESARM) + // https://developer.arm.com/docs/ddi0595/b/aarch64-system-registers/id_aa64isar0_el1 + // 0b0010 --> As for 0b0001, plus PMULL/PMULL2 instructions operating on 64-bit data quantities. + f.setIf(instAttrReg0&(0xf<<4) == 2<<4, PMULL) + + // https://developer.arm.com/docs/ddi0595/b/aarch64-system-registers/id_aa64isar1_el1 + // + // ID_AA64ISAR1_EL1 - Instruction set attribute register 1 + // x--------------------------------------------------x + // | Name | bits | visible | + // |--------------------------------------------------| + // | GPI | [31-28] | y | + // |--------------------------------------------------| + // | GPA | [27-24] | y | + // |--------------------------------------------------| + // | LRCPC | [23-20] | y | + // |--------------------------------------------------| + // | FCMA | [19-16] | y | + // |--------------------------------------------------| + // | JSCVT | [15-12] | y | + // |--------------------------------------------------| + // | API | [11-8] | y | + // |--------------------------------------------------| + // | APA | [7-4] | y | + // |--------------------------------------------------| + // | DPB | [3-0] | y | + // x--------------------------------------------------x + + // if instAttrReg1&(0xf<<28) != 0 { + // fmt.Println("GPI") + // } + f.setIf(instAttrReg1&(0xf<<28) != 24, GPA) + f.setIf(instAttrReg1&(0xf<<20) != 0, LRCPC) + f.setIf(instAttrReg1&(0xf<<16) != 0, FCMA) + f.setIf(instAttrReg1&(0xf<<12) != 0, JSCVT) + // if instAttrReg1&(0xf<<8) != 0 { + // fmt.Println("API") + // } + // if instAttrReg1&(0xf<<4) != 0 { + // fmt.Println("APA") + // } + f.setIf(instAttrReg1&(0xf<<0) != 0, DCPOP) + + // Store + c.featureSet.or(f) +} diff --git a/vendor/github.com/klauspost/cpuid/v2/detect_ref.go b/vendor/github.com/klauspost/cpuid/v2/detect_ref.go new file mode 100644 index 0000000..e9c8606 --- /dev/null +++ b/vendor/github.com/klauspost/cpuid/v2/detect_ref.go @@ -0,0 +1,14 @@ +// Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. + +//+build !amd64,!386,!arm64 gccgo noasm appengine + +package cpuid + +func initCPU() { + cpuid = func(uint32) (a, b, c, d uint32) { return 0, 0, 0, 0 } + cpuidex = func(x, y uint32) (a, b, c, d uint32) { return 0, 0, 0, 0 } + xgetbv = func(uint32) (a, b uint32) { return 0, 0 } + rdtscpAsm = func() (a, b, c, d uint32) { return 0, 0, 0, 0 } +} + +func addInfo(info *CPUInfo, safe bool) {} diff --git a/vendor/github.com/klauspost/cpuid/v2/detect_x86.go b/vendor/github.com/klauspost/cpuid/v2/detect_x86.go new file mode 100644 index 0000000..93bc20f --- /dev/null +++ b/vendor/github.com/klauspost/cpuid/v2/detect_x86.go @@ -0,0 +1,35 @@ +// Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. + +//+build 386,!gccgo,!noasm,!appengine amd64,!gccgo,!noasm,!appengine + +package cpuid + +func asmCpuid(op uint32) (eax, ebx, ecx, edx uint32) +func asmCpuidex(op, op2 uint32) (eax, ebx, ecx, edx uint32) +func asmXgetbv(index uint32) (eax, edx uint32) +func asmRdtscpAsm() (eax, ebx, ecx, edx uint32) +func asmDarwinHasAVX512() bool + +func initCPU() { + cpuid = asmCpuid + cpuidex = asmCpuidex + xgetbv = asmXgetbv + rdtscpAsm = asmRdtscpAsm + darwinHasAVX512 = asmDarwinHasAVX512 +} + +func addInfo(c *CPUInfo, safe bool) { + c.maxFunc = maxFunctionID() + c.maxExFunc = maxExtendedFunction() + c.BrandName = brandName() + c.CacheLine = cacheLine() + c.Family, c.Model = familyModel() + c.featureSet = support() + c.SGX = hasSGX(c.featureSet.inSet(SGX), c.featureSet.inSet(SGXLC)) + c.ThreadsPerCore = threadsPerCore() + c.LogicalCores = logicalCores() + c.PhysicalCores = physicalCores() + c.VendorID, c.VendorString = vendorID() + c.Hz = hertz(c.BrandName) + c.cacheSize() +} diff --git a/vendor/github.com/klauspost/cpuid/v2/featureid_string.go b/vendor/github.com/klauspost/cpuid/v2/featureid_string.go new file mode 100644 index 0000000..0e764f9 --- /dev/null +++ b/vendor/github.com/klauspost/cpuid/v2/featureid_string.go @@ -0,0 +1,173 @@ +// Code generated by "stringer -type=FeatureID,Vendor"; DO NOT EDIT. + +package cpuid + +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[ADX-1] + _ = x[AESNI-2] + _ = x[AMD3DNOW-3] + _ = x[AMD3DNOWEXT-4] + _ = x[AMXBF16-5] + _ = x[AMXINT8-6] + _ = x[AMXTILE-7] + _ = x[AVX-8] + _ = x[AVX2-9] + _ = x[AVX512BF16-10] + _ = x[AVX512BITALG-11] + _ = x[AVX512BW-12] + _ = x[AVX512CD-13] + _ = x[AVX512DQ-14] + _ = x[AVX512ER-15] + _ = x[AVX512F-16] + _ = x[AVX512IFMA-17] + _ = x[AVX512PF-18] + _ = x[AVX512VBMI-19] + _ = x[AVX512VBMI2-20] + _ = x[AVX512VL-21] + _ = x[AVX512VNNI-22] + _ = x[AVX512VP2INTERSECT-23] + _ = x[AVX512VPOPCNTDQ-24] + _ = x[AVXSLOW-25] + _ = x[BMI1-26] + _ = x[BMI2-27] + _ = x[CLDEMOTE-28] + _ = x[CLMUL-29] + _ = x[CMOV-30] + _ = x[CX16-31] + _ = x[ENQCMD-32] + _ = x[ERMS-33] + _ = x[F16C-34] + _ = x[FMA3-35] + _ = x[FMA4-36] + _ = x[GFNI-37] + _ = x[HLE-38] + _ = x[HTT-39] + _ = x[HYPERVISOR-40] + _ = x[IBPB-41] + _ = x[IBS-42] + _ = x[IBSBRNTRGT-43] + _ = x[IBSFETCHSAM-44] + _ = x[IBSFFV-45] + _ = x[IBSOPCNT-46] + _ = x[IBSOPCNTEXT-47] + _ = x[IBSOPSAM-48] + _ = x[IBSRDWROPCNT-49] + _ = x[IBSRIPINVALIDCHK-50] + _ = x[LZCNT-51] + _ = x[MMX-52] + _ = x[MMXEXT-53] + _ = x[MOVDIR64B-54] + _ = x[MOVDIRI-55] + _ = x[MPX-56] + _ = x[NX-57] + _ = x[POPCNT-58] + _ = x[RDRAND-59] + _ = x[RDSEED-60] + _ = x[RDTSCP-61] + _ = x[RTM-62] + _ = x[SERIALIZE-63] + _ = x[SGX-64] + _ = x[SGXLC-65] + _ = x[SHA-66] + _ = x[SSE-67] + _ = x[SSE2-68] + _ = x[SSE3-69] + _ = x[SSE4-70] + _ = x[SSE42-71] + _ = x[SSE4A-72] + _ = x[SSSE3-73] + _ = x[STIBP-74] + _ = x[TBM-75] + _ = x[TSXLDTRK-76] + _ = x[VAES-77] + _ = x[VMX-78] + _ = x[VPCLMULQDQ-79] + _ = x[WAITPKG-80] + _ = x[WBNOINVD-81] + _ = x[XOP-82] + _ = x[AESARM-83] + _ = x[ARMCPUID-84] + _ = x[ASIMD-85] + _ = x[ASIMDDP-86] + _ = x[ASIMDHP-87] + _ = x[ASIMDRDM-88] + _ = x[ATOMICS-89] + _ = x[CRC32-90] + _ = x[DCPOP-91] + _ = x[EVTSTRM-92] + _ = x[FCMA-93] + _ = x[FP-94] + _ = x[FPHP-95] + _ = x[GPA-96] + _ = x[JSCVT-97] + _ = x[LRCPC-98] + _ = x[PMULL-99] + _ = x[SHA1-100] + _ = x[SHA2-101] + _ = x[SHA3-102] + _ = x[SHA512-103] + _ = x[SM3-104] + _ = x[SM4-105] + _ = x[SVE-106] + _ = x[lastID-107] + _ = x[firstID-0] +} + +const _FeatureID_name = "firstIDADXAESNIAMD3DNOWAMD3DNOWEXTAMXBF16AMXINT8AMXTILEAVXAVX2AVX512BF16AVX512BITALGAVX512BWAVX512CDAVX512DQAVX512ERAVX512FAVX512IFMAAVX512PFAVX512VBMIAVX512VBMI2AVX512VLAVX512VNNIAVX512VP2INTERSECTAVX512VPOPCNTDQAVXSLOWBMI1BMI2CLDEMOTECLMULCMOVCX16ENQCMDERMSF16CFMA3FMA4GFNIHLEHTTHYPERVISORIBPBIBSIBSBRNTRGTIBSFETCHSAMIBSFFVIBSOPCNTIBSOPCNTEXTIBSOPSAMIBSRDWROPCNTIBSRIPINVALIDCHKLZCNTMMXMMXEXTMOVDIR64BMOVDIRIMPXNXPOPCNTRDRANDRDSEEDRDTSCPRTMSERIALIZESGXSGXLCSHASSESSE2SSE3SSE4SSE42SSE4ASSSE3STIBPTBMTSXLDTRKVAESVMXVPCLMULQDQWAITPKGWBNOINVDXOPAESARMARMCPUIDASIMDASIMDDPASIMDHPASIMDRDMATOMICSCRC32DCPOPEVTSTRMFCMAFPFPHPGPAJSCVTLRCPCPMULLSHA1SHA2SHA3SHA512SM3SM4SVElastID" + +var _FeatureID_index = [...]uint16{0, 7, 10, 15, 23, 34, 41, 48, 55, 58, 62, 72, 84, 92, 100, 108, 116, 123, 133, 141, 151, 162, 170, 180, 198, 213, 220, 224, 228, 236, 241, 245, 249, 255, 259, 263, 267, 271, 275, 278, 281, 291, 295, 298, 308, 319, 325, 333, 344, 352, 364, 380, 385, 388, 394, 403, 410, 413, 415, 421, 427, 433, 439, 442, 451, 454, 459, 462, 465, 469, 473, 477, 482, 487, 492, 497, 500, 508, 512, 515, 525, 532, 540, 543, 549, 557, 562, 569, 576, 584, 591, 596, 601, 608, 612, 614, 618, 621, 626, 631, 636, 640, 644, 648, 654, 657, 660, 663, 669} + +func (i FeatureID) String() string { + if i < 0 || i >= FeatureID(len(_FeatureID_index)-1) { + return "FeatureID(" + strconv.FormatInt(int64(i), 10) + ")" + } + return _FeatureID_name[_FeatureID_index[i]:_FeatureID_index[i+1]] +} +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[VendorUnknown-0] + _ = x[Intel-1] + _ = x[AMD-2] + _ = x[VIA-3] + _ = x[Transmeta-4] + _ = x[NSC-5] + _ = x[KVM-6] + _ = x[MSVM-7] + _ = x[VMware-8] + _ = x[XenHVM-9] + _ = x[Bhyve-10] + _ = x[Hygon-11] + _ = x[SiS-12] + _ = x[RDC-13] + _ = x[Ampere-14] + _ = x[ARM-15] + _ = x[Broadcom-16] + _ = x[Cavium-17] + _ = x[DEC-18] + _ = x[Fujitsu-19] + _ = x[Infineon-20] + _ = x[Motorola-21] + _ = x[NVIDIA-22] + _ = x[AMCC-23] + _ = x[Qualcomm-24] + _ = x[Marvell-25] + _ = x[lastVendor-26] +} + +const _Vendor_name = "VendorUnknownIntelAMDVIATransmetaNSCKVMMSVMVMwareXenHVMBhyveHygonSiSRDCAmpereARMBroadcomCaviumDECFujitsuInfineonMotorolaNVIDIAAMCCQualcommMarvelllastVendor" + +var _Vendor_index = [...]uint8{0, 13, 18, 21, 24, 33, 36, 39, 43, 49, 55, 60, 65, 68, 71, 77, 80, 88, 94, 97, 104, 112, 120, 126, 130, 138, 145, 155} + +func (i Vendor) String() string { + if i < 0 || i >= Vendor(len(_Vendor_index)-1) { + return "Vendor(" + strconv.FormatInt(int64(i), 10) + ")" + } + return _Vendor_name[_Vendor_index[i]:_Vendor_index[i+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 new file mode 100644 index 0000000..8d2cb03 --- /dev/null +++ b/vendor/github.com/klauspost/cpuid/v2/os_darwin_arm64.go @@ -0,0 +1,19 @@ +// Copyright (c) 2020 Klaus Post, released under MIT License. See LICENSE file. + +package cpuid + +import "runtime" + +func detectOS(c *CPUInfo) bool { + // There are no hw.optional sysctl values for the below features on Mac OS 11.0 + // to detect their supported state dynamically. Assume the CPU features that + // Apple Silicon M1 supports to be available as a minimal set of features + // to all Go programs running on darwin/arm64. + // TODO: Add more if we know them. + c.featureSet.setIf(runtime.GOOS != "ios", AESARM, PMULL, SHA1, SHA2) + c.PhysicalCores = runtime.NumCPU() + // For now assuming 1 thread per core... + c.ThreadsPerCore = 1 + c.LogicalCores = c.PhysicalCores + return true +} diff --git a/vendor/github.com/klauspost/cpuid/v2/os_linux_arm64.go b/vendor/github.com/klauspost/cpuid/v2/os_linux_arm64.go new file mode 100644 index 0000000..ee278b9 --- /dev/null +++ b/vendor/github.com/klauspost/cpuid/v2/os_linux_arm64.go @@ -0,0 +1,130 @@ +// Copyright (c) 2020 Klaus Post, released under MIT License. See LICENSE file. + +// 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 located +// here https://github.com/golang/sys/blob/master/LICENSE + +package cpuid + +import ( + "encoding/binary" + "io/ioutil" + "runtime" +) + +// HWCAP bits. +const ( + hwcap_FP = 1 << 0 + hwcap_ASIMD = 1 << 1 + hwcap_EVTSTRM = 1 << 2 + hwcap_AES = 1 << 3 + hwcap_PMULL = 1 << 4 + hwcap_SHA1 = 1 << 5 + hwcap_SHA2 = 1 << 6 + hwcap_CRC32 = 1 << 7 + hwcap_ATOMICS = 1 << 8 + hwcap_FPHP = 1 << 9 + hwcap_ASIMDHP = 1 << 10 + hwcap_CPUID = 1 << 11 + hwcap_ASIMDRDM = 1 << 12 + hwcap_JSCVT = 1 << 13 + hwcap_FCMA = 1 << 14 + hwcap_LRCPC = 1 << 15 + hwcap_DCPOP = 1 << 16 + hwcap_SHA3 = 1 << 17 + hwcap_SM3 = 1 << 18 + hwcap_SM4 = 1 << 19 + hwcap_ASIMDDP = 1 << 20 + hwcap_SHA512 = 1 << 21 + hwcap_SVE = 1 << 22 + hwcap_ASIMDFHM = 1 << 23 +) + +func detectOS(c *CPUInfo) bool { + // For now assuming no hyperthreading is reasonable. + c.LogicalCores = runtime.NumCPU() + c.PhysicalCores = c.LogicalCores + c.ThreadsPerCore = 1 + if hwcap == 0 { + // We did not get values from the runtime. + // Try reading /proc/self/auxv + + // From https://github.com/golang/sys + const ( + _AT_HWCAP = 16 + _AT_HWCAP2 = 26 + + uintSize = int(32 << (^uint(0) >> 63)) + ) + + buf, err := ioutil.ReadFile("/proc/self/auxv") + if err != nil { + // e.g. on android /proc/self/auxv is not accessible, so silently + // ignore the error and leave Initialized = false. On some + // architectures (e.g. arm64) doinit() implements a fallback + // readout and will set Initialized = true again. + return false + } + bo := binary.LittleEndian + for len(buf) >= 2*(uintSize/8) { + var tag, val uint + switch uintSize { + case 32: + tag = uint(bo.Uint32(buf[0:])) + val = uint(bo.Uint32(buf[4:])) + buf = buf[8:] + case 64: + tag = uint(bo.Uint64(buf[0:])) + val = uint(bo.Uint64(buf[8:])) + buf = buf[16:] + } + switch tag { + case _AT_HWCAP: + hwcap = val + case _AT_HWCAP2: + // Not used + } + } + if hwcap == 0 { + return false + } + } + + // HWCap was populated by the runtime from the auxiliary vector. + // Use HWCap information since reading aarch64 system registers + // is not supported in user space on older linux kernels. + c.featureSet.setIf(isSet(hwcap, hwcap_AES), AESARM) + c.featureSet.setIf(isSet(hwcap, hwcap_ASIMD), ASIMD) + c.featureSet.setIf(isSet(hwcap, hwcap_ASIMDDP), ASIMDDP) + c.featureSet.setIf(isSet(hwcap, hwcap_ASIMDHP), ASIMDHP) + c.featureSet.setIf(isSet(hwcap, hwcap_ASIMDRDM), ASIMDRDM) + c.featureSet.setIf(isSet(hwcap, hwcap_CPUID), ARMCPUID) + c.featureSet.setIf(isSet(hwcap, hwcap_CRC32), CRC32) + c.featureSet.setIf(isSet(hwcap, hwcap_DCPOP), DCPOP) + c.featureSet.setIf(isSet(hwcap, hwcap_EVTSTRM), EVTSTRM) + c.featureSet.setIf(isSet(hwcap, hwcap_FCMA), FCMA) + c.featureSet.setIf(isSet(hwcap, hwcap_FP), FP) + c.featureSet.setIf(isSet(hwcap, hwcap_FPHP), FPHP) + c.featureSet.setIf(isSet(hwcap, hwcap_JSCVT), JSCVT) + c.featureSet.setIf(isSet(hwcap, hwcap_LRCPC), LRCPC) + c.featureSet.setIf(isSet(hwcap, hwcap_PMULL), PMULL) + c.featureSet.setIf(isSet(hwcap, hwcap_SHA1), SHA1) + c.featureSet.setIf(isSet(hwcap, hwcap_SHA2), SHA2) + c.featureSet.setIf(isSet(hwcap, hwcap_SHA3), SHA3) + c.featureSet.setIf(isSet(hwcap, hwcap_SHA512), SHA512) + c.featureSet.setIf(isSet(hwcap, hwcap_SM3), SM3) + c.featureSet.setIf(isSet(hwcap, hwcap_SM4), SM4) + c.featureSet.setIf(isSet(hwcap, hwcap_SVE), SVE) + + // The Samsung S9+ kernel reports support for atomics, but not all cores + // actually support them, resulting in SIGILL. See issue #28431. + // TODO(elias.naur): Only disable the optimization on bad chipsets on android. + c.featureSet.setIf(isSet(hwcap, hwcap_ATOMICS) && runtime.GOOS != "android", ATOMICS) + + return true +} + +func isSet(hwc uint, value uint) bool { + return hwc&value != 0 +} diff --git a/vendor/github.com/klauspost/cpuid/v2/os_other_arm64.go b/vendor/github.com/klauspost/cpuid/v2/os_other_arm64.go new file mode 100644 index 0000000..1a951e6 --- /dev/null +++ b/vendor/github.com/klauspost/cpuid/v2/os_other_arm64.go @@ -0,0 +1,17 @@ +// Copyright (c) 2020 Klaus Post, released under MIT License. See LICENSE file. + +// +build arm64 +// +build !linux +// +build !darwin + +package cpuid + +import "runtime" + +func detectOS(c *CPUInfo) bool { + c.PhysicalCores = runtime.NumCPU() + // For now assuming 1 thread per core... + c.ThreadsPerCore = 1 + c.LogicalCores = c.PhysicalCores + return false +} diff --git a/vendor/github.com/klauspost/cpuid/v2/os_safe_linux_arm64.go b/vendor/github.com/klauspost/cpuid/v2/os_safe_linux_arm64.go new file mode 100644 index 0000000..4d0b8b4 --- /dev/null +++ b/vendor/github.com/klauspost/cpuid/v2/os_safe_linux_arm64.go @@ -0,0 +1,7 @@ +// Copyright (c) 2021 Klaus Post, released under MIT License. See LICENSE file. + +//+build nounsafe + +package cpuid + +var hwcap uint diff --git a/vendor/github.com/klauspost/cpuid/v2/os_unsafe_linux_arm64.go b/vendor/github.com/klauspost/cpuid/v2/os_unsafe_linux_arm64.go new file mode 100644 index 0000000..3298002 --- /dev/null +++ b/vendor/github.com/klauspost/cpuid/v2/os_unsafe_linux_arm64.go @@ -0,0 +1,10 @@ +// Copyright (c) 2021 Klaus Post, released under MIT License. See LICENSE file. + +//+build !nounsafe + +package cpuid + +import _ "unsafe" // needed for go:linkname + +//go:linkname hwcap internal/cpu.HWCap +var hwcap uint diff --git a/vendor/github.com/klauspost/cpuid/v2/test-architectures.sh b/vendor/github.com/klauspost/cpuid/v2/test-architectures.sh new file mode 100644 index 0000000..471d986 --- /dev/null +++ b/vendor/github.com/klauspost/cpuid/v2/test-architectures.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +set -e + +go tool dist list | while IFS=/ read os arch; do + echo "Checking $os/$arch..." + echo " normal" + GOARCH=$arch GOOS=$os go build -o /dev/null . + echo " noasm" + GOARCH=$arch GOOS=$os go build -tags noasm -o /dev/null . + echo " appengine" + GOARCH=$arch GOOS=$os go build -tags appengine -o /dev/null . + echo " noasm,appengine" + GOARCH=$arch GOOS=$os go build -tags 'appengine noasm' -o /dev/null . +done diff --git a/vendor/github.com/klauspost/reedsolomon/.gitignore b/vendor/github.com/klauspost/reedsolomon/.gitignore new file mode 100644 index 0000000..59610b5 --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/.gitignore @@ -0,0 +1,26 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe +*.test +*.prof + +.idea \ No newline at end of file diff --git a/vendor/github.com/klauspost/reedsolomon/.travis.yml b/vendor/github.com/klauspost/reedsolomon/.travis.yml new file mode 100644 index 0000000..fdd619c --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/.travis.yml @@ -0,0 +1,65 @@ +language: go + +os: + - linux + - osx + - windows + +arch: + - amd64 + - arm64 + - ppc64le + - s390x + +go: + - 1.14.x + - 1.15.x + - 1.16.x + - master + +env: + - GO111MODULE=off CGO_ENABLED=0 + +install: + - go get ./... + +script: + - go vet ./... + - go test -cpu=1,2 . + - go test -tags=noasm -cpu=1,2 . + - go build examples/simple-decoder.go + - go build examples/simple-encoder.go + - go build examples/stream-decoder.go + - go build examples/stream-encoder.go + +jobs: + allow_failures: + - go: 'master' + - arch: s390x + fast_finish: true + include: + - stage: other + go: 1.16.x + os: linux + arch: amd64 + script: + - diff <(gofmt -d .) <(printf "") + - diff <(gofmt -d ./examples) <(printf "") + - go get github.com/klauspost/asmfmt&&go install github.com/klauspost/asmfmt/cmd/asmfmt + - diff <(asmfmt -d .) <(printf "") + - CGO_ENABLED=1 go test -cpu=1 -short -race . + - CGO_ENABLED=1 go test -cpu=2 -short -race . + - CGO_ENABLED=1 go test -tags=noasm -cpu=1 -short -race . + - CGO_ENABLED=1 go test -tags=noasm -cpu=4 -short -race . + - CGO_ENABLED=1 go test -no-avx512 -short -race . + - CGO_ENABLED=1 go test -no-avx512 -no-avx2 -short -race . + - CGO_ENABLED=1 go test -no-avx512 -no-avx2 -no-ssse3 -short -race . + - GOOS=linux GOARCH=386 go test -short . + - stage: other + go: 1.15.x + os: linux + arch: amd64 + script: + - go test -no-avx512 + - go test -no-avx512 -no-avx2 + - go test -no-avx512 -no-avx2 -no-ssse3 diff --git a/vendor/github.com/klauspost/reedsolomon/LICENSE b/vendor/github.com/klauspost/reedsolomon/LICENSE new file mode 100644 index 0000000..a947e16 --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/LICENSE @@ -0,0 +1,23 @@ +The MIT License (MIT) + +Copyright (c) 2015 Klaus Post +Copyright (c) 2015 Backblaze + +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/klauspost/reedsolomon/README.md b/vendor/github.com/klauspost/reedsolomon/README.md new file mode 100644 index 0000000..ee8f2ae --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/README.md @@ -0,0 +1,449 @@ +# Reed-Solomon +[![Go Reference](https://pkg.go.dev/badge/github.com/klauspost/reedsolomon.svg)](https://pkg.go.dev/github.com/klauspost/reedsolomon) [![Build Status][3]][4] + +[3]: https://travis-ci.org/klauspost/reedsolomon.svg?branch=master +[4]: https://travis-ci.org/klauspost/reedsolomon + +Reed-Solomon Erasure Coding in Go, with speeds exceeding 1GB/s/cpu core implemented in pure Go. + +This is a Go port of the [JavaReedSolomon](https://github.com/Backblaze/JavaReedSolomon) library released by +[Backblaze](http://backblaze.com), with some additional optimizations. + +For an introduction on erasure coding, see the post on the [Backblaze blog](https://www.backblaze.com/blog/reed-solomon/). + +Package home: https://github.com/klauspost/reedsolomon + +Godoc: https://pkg.go.dev/github.com/klauspost/reedsolomon?tab=doc + +# Installation +To get the package use the standard: +```bash +go get -u github.com/klauspost/reedsolomon +``` + +Using Go modules recommended. + +# Changes +## 2021 + +* Add progressive shard encoding. +* Wider AVX2 loops +* Limit concurrency on AVX2, since we are likely memory bound. +* Allow 0 parity shards. +* Allow disabling inversion cache. +* Faster AVX2 encoding. + + +## May 2020 + +* ARM64 optimizations, up to 2.5x faster. +* Added [WithFastOneParityMatrix](https://pkg.go.dev/github.com/klauspost/reedsolomon?tab=doc#WithFastOneParityMatrix) for faster operation with 1 parity shard. +* Much better performance when using a limited number of goroutines. +* AVX512 is now using multiple cores. +* Stream processing overhaul, big speedups in most cases. +* AVX512 optimizations + +## March 6, 2019 + +The pure Go implementation is about 30% faster. Minor tweaks to assembler implementations. + +## February 8, 2019 + +AVX512 accelerated version added for Intel Skylake CPUs. This can give up to a 4x speed improvement as compared to AVX2. +See [here](https://github.com/klauspost/reedsolomon#performance-on-avx512) for more details. + +## December 18, 2018 + +Assembly code for ppc64le has been contributed, this boosts performance by about 10x on this platform. + +## November 18, 2017 + +Added [WithAutoGoroutines](https://godoc.org/github.com/klauspost/reedsolomon#WithAutoGoroutines) which will attempt +to calculate the optimal number of goroutines to use based on your expected shard size and detected CPU. + +## October 1, 2017 + +* [Cauchy Matrix](https://godoc.org/github.com/klauspost/reedsolomon#WithCauchyMatrix) is now an option. +Thanks to [templexxx](https://github.com/templexxx) for the basis of this. + +* Default maximum number of [goroutines](https://godoc.org/github.com/klauspost/reedsolomon#WithMaxGoroutines) +has been increased for better multi-core scaling. + +* After several requests the Reconstruct and ReconstructData now slices of zero length but sufficient capacity to +be used instead of allocating new memory. + +## August 26, 2017 + +* The [`Encoder()`](https://godoc.org/github.com/klauspost/reedsolomon#Encoder) now contains an `Update` +function contributed by [chenzhongtao](https://github.com/chenzhongtao). + +* [Frank Wessels](https://github.com/fwessels) kindly contributed ARM 64 bit assembly, +which gives a huge performance boost on this platform. + +## July 20, 2017 + +`ReconstructData` added to [`Encoder`](https://godoc.org/github.com/klauspost/reedsolomon#Encoder) interface. +This can cause compatibility issues if you implement your own Encoder. A simple workaround can be added: + +```Go +func (e *YourEnc) ReconstructData(shards [][]byte) error { + return ReconstructData(shards) +} +``` + +You can of course also do your own implementation. +The [`StreamEncoder`](https://godoc.org/github.com/klauspost/reedsolomon#StreamEncoder) +handles this without modifying the interface. +This is a good lesson on why returning interfaces is not a good design. + +# Usage + +This section assumes you know the basics of Reed-Solomon encoding. +A good start is this [Backblaze blog post](https://www.backblaze.com/blog/reed-solomon/). + +This package performs the calculation of the parity sets. The usage is therefore relatively simple. + +First of all, you need to choose your distribution of data and parity shards. +A 'good' distribution is very subjective, and will depend a lot on your usage scenario. +A good starting point is above 5 and below 257 data shards (the maximum supported number), +and the number of parity shards to be 2 or above, and below the number of data shards. + +To create an encoder with 10 data shards (where your data goes) and 3 parity shards (calculated): +```Go + enc, err := reedsolomon.New(10, 3) +``` +This encoder will work for all parity sets with this distribution of data and parity shards. +The error will only be set if you specify 0 or negative values in any of the parameters, +or if you specify more than 256 data shards. + +If you will primarily be using it with one shard size it is recommended to use +[`WithAutoGoroutines(shardSize)`](https://pkg.go.dev/github.com/klauspost/reedsolomon?tab=doc#WithAutoGoroutines) +as an additional parameter. This will attempt to calculate the optimal number of goroutines to use for the best speed. +It is not required that all shards are this size. + +The you send and receive data is a simple slice of byte slices; `[][]byte`. +In the example above, the top slice must have a length of 13. + +```Go + data := make([][]byte, 13) +``` +You should then fill the 10 first slices with *equally sized* data, +and create parity shards that will be populated with parity data. In this case we create the data in memory, +but you could for instance also use [mmap](https://github.com/edsrzf/mmap-go) to map files. + +```Go + // Create all shards, size them at 50000 each + for i := range input { + data[i] := make([]byte, 50000) + } + + + // Fill some data into the data shards + for i, in := range data[:10] { + for j:= range in { + in[j] = byte((i+j)&0xff) + } + } +``` + +To populate the parity shards, you simply call `Encode()` with your data. +```Go + err = enc.Encode(data) +``` +The only cases where you should get an error is, if the data shards aren't of equal size. +The last 3 shards now contain parity data. You can verify this by calling `Verify()`: + +```Go + ok, err = enc.Verify(data) +``` + +The final (and important) part is to be able to reconstruct missing shards. +For this to work, you need to know which parts of your data is missing. +The encoder *does not know which parts are invalid*, so if data corruption is a likely scenario, +you need to implement a hash check for each shard. + +If a byte has changed in your set, and you don't know which it is, there is no way to reconstruct the data set. + +To indicate missing data, you set the shard to nil before calling `Reconstruct()`: + +```Go + // Delete two data shards + data[3] = nil + data[7] = nil + + // Reconstruct the missing shards + err := enc.Reconstruct(data) +``` +The missing data and parity shards will be recreated. If more than 3 shards are missing, the reconstruction will fail. + +If you are only interested in the data shards (for reading purposes) you can call `ReconstructData()`: + +```Go + // Delete two data shards + data[3] = nil + data[7] = nil + + // Reconstruct just the missing data shards + err := enc.ReconstructData(data) +``` + +So to sum up reconstruction: +* The number of data/parity shards must match the numbers used for encoding. +* The order of shards must be the same as used when encoding. +* You may only supply data you know is valid. +* Invalid shards should be set to nil. + +For complete examples of an encoder and decoder see the +[examples folder](https://github.com/klauspost/reedsolomon/tree/master/examples). + +# Splitting/Joining Data + +You might have a large slice of data. +To help you split this, there are some helper functions that can split and join a single byte slice. + +```Go + bigfile, _ := ioutil.Readfile("myfile.data") + + // Split the file + split, err := enc.Split(bigfile) +``` +This will split the file into the number of data shards set when creating the encoder and create empty parity shards. + +An important thing to note is that you have to *keep track of the exact input size*. +If the size of the input isn't divisible by the number of data shards, extra zeros will be inserted in the last shard. + +To join a data set, use the `Join()` function, which will join the shards and write it to the `io.Writer` you supply: +```Go + // Join a data set and write it to io.Discard. + err = enc.Join(io.Discard, data, len(bigfile)) +``` + +# Progressive encoding + +It is possible to encode individual shards using EncodeIdx: + +```Go + // EncodeIdx will add parity for a single data shard. + // Parity shards should start out as 0. The caller must zero them. + // Data shards must be delivered exactly once. There is no check for this. + // The parity shards will always be updated and the data shards will remain the same. + EncodeIdx(dataShard []byte, idx int, parity [][]byte) error +``` + +This allows progressively encoding the parity by sending individual data shards. +There is no requirement on shards being delivered in order, +but when sent in order it allows encoding shards one at the time, +effectively allowing the operation to be streaming. + +The result will be the same as encoding all shards at once. +There is a minor speed penalty using this method, so send +shards at once if they are available. + +## Example + +```Go +func test() { + // Create an encoder with 7 data and 3 parity slices. + enc, _ := reedsolomon.New(7, 3) + + // This will be our output parity. + parity := make([][]byte, 3) + for i := range parity { + parity[i] = make([]byte, 10000) + } + + for i := 0; i < 7; i++ { + // Send data shards one at the time. + _ = enc.EncodeIdx(make([]byte, 10000), i, parity) + } + + // parity now contains parity, as if all data was sent in one call. +} +``` + +# Streaming/Merging + +It might seem like a limitation that all data should be in memory, +but an important property is that *as long as the number of data/parity shards are the same, +you can merge/split data sets*, and they will remain valid as a separate set. + +```Go + // Split the data set of 50000 elements into two of 25000 + splitA := make([][]byte, 13) + splitB := make([][]byte, 13) + + // Merge into a 100000 element set + merged := make([][]byte, 13) + + for i := range data { + splitA[i] = data[i][:25000] + splitB[i] = data[i][25000:] + + // Concatenate it to itself + merged[i] = append(make([]byte, 0, len(data[i])*2), data[i]...) + merged[i] = append(merged[i], data[i]...) + } + + // Each part should still verify as ok. + ok, err := enc.Verify(splitA) + if ok && err == nil { + log.Println("splitA ok") + } + + ok, err = enc.Verify(splitB) + if ok && err == nil { + log.Println("splitB ok") + } + + ok, err = enc.Verify(merge) + if ok && err == nil { + log.Println("merge ok") + } +``` + +This means that if you have a data set that may not fit into memory, you can split processing into smaller blocks. +For the best throughput, don't use too small blocks. + +This also means that you can divide big input up into smaller blocks, and do reconstruction on parts of your data. +This doesn't give the same flexibility of a higher number of data shards, but it will be much more performant. + +# Streaming API + +There has been added support for a streaming API, to help perform fully streaming operations, +which enables you to do the same operations, but on streams. +To use the stream API, use [`NewStream`](https://godoc.org/github.com/klauspost/reedsolomon#NewStream) function +to create the encoding/decoding interfaces. + +You can use [`WithConcurrentStreams`](https://godoc.org/github.com/klauspost/reedsolomon#WithConcurrentStreams) +to ready an interface that reads/writes concurrently from the streams. + +You can specify the size of each operation using +[`WithStreamBlockSize`](https://godoc.org/github.com/klauspost/reedsolomon#WithStreamBlockSize). +This will set the size of each read/write operation. + +Input is delivered as `[]io.Reader`, output as `[]io.Writer`, and functionality corresponds to the in-memory API. +Each stream must supply the same amount of data, similar to how each slice must be similar size with the in-memory API. +If an error occurs in relation to a stream, +a [`StreamReadError`](https://godoc.org/github.com/klauspost/reedsolomon#StreamReadError) +or [`StreamWriteError`](https://godoc.org/github.com/klauspost/reedsolomon#StreamWriteError) +will help you determine which stream was the offender. + +There is no buffering or timeouts/retry specified. If you want to add that, you need to add it to the Reader/Writer. + +For complete examples of a streaming encoder and decoder see the +[examples folder](https://github.com/klauspost/reedsolomon/tree/master/examples). + +# Advanced Options + +You can modify internal options which affects how jobs are split between and processed by goroutines. + +To create options, use the WithXXX functions. You can supply options to `New`, `NewStream`. +If no Options are supplied, default options are used. + +Example of how to supply options: + + ```Go + enc, err := reedsolomon.New(10, 3, WithMaxGoroutines(25)) + ``` + + +# Performance +Performance depends mainly on the number of parity shards. +In rough terms, doubling the number of parity shards will double the encoding time. + +Here are the throughput numbers with some different selections of data and parity shards. +For reference each shard is 1MB random data, and 16 CPU cores are used for encoding. + +| Data | Parity | Go MB/s | SSSE3 MB/s | AVX2 MB/s | +|------|--------|---------|------------|-----------| +| 5 | 2 | 14287 | 66355 | 108755 | +| 8 | 8 | 5569 | 34298 | 70516 | +| 10 | 4 | 6766 | 48237 | 93875 | +| 50 | 20 | 1540 | 12130 | 22090 | + +The throughput numbers here is the size of the encoded data and parity shards. + +If `runtime.GOMAXPROCS()` is set to a value higher than 1, +the encoder will use multiple goroutines to perform the calculations in `Verify`, `Encode` and `Reconstruct`. + +Example of performance scaling on AMD Ryzen 3950X - 16 physical cores, 32 logical cores, AVX 2. +The example uses 10 blocks with 1MB data each and 4 parity blocks. + +| Threads | Speed | +|---------|------------| +| 1 | 9979 MB/s | +| 2 | 18870 MB/s | +| 4 | 33697 MB/s | +| 8 | 51531 MB/s | +| 16 | 59204 MB/s | + + +Benchmarking `Reconstruct()` followed by a `Verify()` (=`all`) versus just calling `ReconstructData()` (=`data`) gives the following result: +``` +benchmark all MB/s data MB/s speedup +BenchmarkReconstruct10x2x10000-8 2011.67 10530.10 5.23x +BenchmarkReconstruct50x5x50000-8 4585.41 14301.60 3.12x +BenchmarkReconstruct10x2x1M-8 8081.15 28216.41 3.49x +BenchmarkReconstruct5x2x1M-8 5780.07 28015.37 4.85x +BenchmarkReconstruct10x4x1M-8 4352.56 14367.61 3.30x +BenchmarkReconstruct50x20x1M-8 1364.35 4189.79 3.07x +BenchmarkReconstruct10x4x16M-8 1484.35 5779.53 3.89x +``` + +# Performance on AVX512 + +The performance on AVX512 has been accelerated for Intel CPUs. +This gives speedups on a per-core basis typically up to 2x compared to +AVX2 as can be seen in the following table: + +``` +[...] +``` + +This speedup has been achieved by computing multiple parity blocks in parallel as opposed to one after the other. +In doing so it is possible to minimize the memory bandwidth required for loading all data shards. +At the same time the calculations are performed in the 512-bit wide ZMM registers and the surplus of ZMM +registers (32 in total) is used to keep more data around (most notably the matrix coefficients). + +# Performance on ARM64 NEON + +By exploiting NEON instructions the performance for ARM has been accelerated. +Below are the performance numbers for a single core on an EC2 m6g.16xlarge (Graviton2) instance (Amazon Linux 2): + +``` +BenchmarkGalois128K-64 119562 10028 ns/op 13070.78 MB/s +BenchmarkGalois1M-64 14380 83424 ns/op 12569.22 MB/s +BenchmarkGaloisXor128K-64 96508 12432 ns/op 10543.29 MB/s +BenchmarkGaloisXor1M-64 10000 100322 ns/op 10452.13 MB/s +``` + +# Performance on ppc64le + +The performance for ppc64le has been accelerated. +This gives roughly a 10x performance improvement on this architecture as can been seen below: + +``` +benchmark old MB/s new MB/s speedup +BenchmarkGalois128K-160 948.87 8878.85 9.36x +BenchmarkGalois1M-160 968.85 9041.92 9.33x +BenchmarkGaloisXor128K-160 862.02 7905.00 9.17x +BenchmarkGaloisXor1M-160 784.60 6296.65 8.03x +``` + +# asm2plan9s + +[asm2plan9s](https://github.com/fwessels/asm2plan9s) is used for assembling the AVX2 instructions into their BYTE/WORD/LONG equivalents. + +# Links +* [Backblaze Open Sources Reed-Solomon Erasure Coding Source Code](https://www.backblaze.com/blog/reed-solomon/). +* [JavaReedSolomon](https://github.com/Backblaze/JavaReedSolomon). Compatible java library by Backblaze. +* [ocaml-reed-solomon-erasure](https://gitlab.com/darrenldl/ocaml-reed-solomon-erasure). Compatible OCaml implementation. +* [reedsolomon-c](https://github.com/jannson/reedsolomon-c). C version, compatible with output from this package. +* [Reed-Solomon Erasure Coding in Haskell](https://github.com/NicolasT/reedsolomon). Haskell port of the package with similar performance. +* [reed-solomon-erasure](https://github.com/darrenldl/reed-solomon-erasure). Compatible Rust implementation. +* [go-erasure](https://github.com/somethingnew2-0/go-erasure). A similar library using cgo, slower in my tests. +* [Screaming Fast Galois Field Arithmetic](http://www.snia.org/sites/default/files2/SDC2013/presentations/NewThinking/EthanMiller_Screaming_Fast_Galois_Field%20Arithmetic_SIMD%20Instructions.pdf). Basis for SSE3 optimizations. + +# License + +This code, as the original [JavaReedSolomon](https://github.com/Backblaze/JavaReedSolomon) is published under an MIT license. See LICENSE file for more information. diff --git a/vendor/github.com/klauspost/reedsolomon/appveyor.yml b/vendor/github.com/klauspost/reedsolomon/appveyor.yml new file mode 100644 index 0000000..9bb067f --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/appveyor.yml @@ -0,0 +1,20 @@ +os: Visual Studio 2015 + +platform: x64 + +clone_folder: c:\gopath\src\github.com\klauspost\reedsolomon + +# environment variables +environment: + GOPATH: c:\gopath + +install: + - echo %PATH% + - echo %GOPATH% + - go version + - go env + - go get -d ./... + +build_script: + - go test -v -cpu=2 ./... + - go test -cpu=1,2,4 -short -race ./... diff --git a/vendor/github.com/klauspost/reedsolomon/galois.go b/vendor/github.com/klauspost/reedsolomon/galois.go new file mode 100644 index 0000000..30e9e03 --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/galois.go @@ -0,0 +1,931 @@ +/** + * 8-bit Galois Field + * Copyright 2015, Klaus Post + * Copyright 2015, Backblaze, Inc. All rights reserved. + */ + +package reedsolomon + +const ( + // The number of elements in the field. + fieldSize = 256 + + // The polynomial used to generate the logarithm table. + // + // There are a number of polynomials that work to generate + // a Galois field of 256 elements. The choice is arbitrary, + // and we just use the first one. + // + // The possibilities are: 29, 43, 45, 77, 95, 99, 101, 105, + //* 113, 135, 141, 169, 195, 207, 231, and 245. + generatingPolynomial = 29 +) + +var logTable = [fieldSize]byte{ + 0, 0, 1, 25, 2, 50, 26, 198, + 3, 223, 51, 238, 27, 104, 199, 75, + 4, 100, 224, 14, 52, 141, 239, 129, + 28, 193, 105, 248, 200, 8, 76, 113, + 5, 138, 101, 47, 225, 36, 15, 33, + 53, 147, 142, 218, 240, 18, 130, 69, + 29, 181, 194, 125, 106, 39, 249, 185, + 201, 154, 9, 120, 77, 228, 114, 166, + 6, 191, 139, 98, 102, 221, 48, 253, + 226, 152, 37, 179, 16, 145, 34, 136, + 54, 208, 148, 206, 143, 150, 219, 189, + 241, 210, 19, 92, 131, 56, 70, 64, + 30, 66, 182, 163, 195, 72, 126, 110, + 107, 58, 40, 84, 250, 133, 186, 61, + 202, 94, 155, 159, 10, 21, 121, 43, + 78, 212, 229, 172, 115, 243, 167, 87, + 7, 112, 192, 247, 140, 128, 99, 13, + 103, 74, 222, 237, 49, 197, 254, 24, + 227, 165, 153, 119, 38, 184, 180, 124, + 17, 68, 146, 217, 35, 32, 137, 46, + 55, 63, 209, 91, 149, 188, 207, 205, + 144, 135, 151, 178, 220, 252, 190, 97, + 242, 86, 211, 171, 20, 42, 93, 158, + 132, 60, 57, 83, 71, 109, 65, 162, + 31, 45, 67, 216, 183, 123, 164, 118, + 196, 23, 73, 236, 127, 12, 111, 246, + 108, 161, 59, 82, 41, 157, 85, 170, + 251, 96, 134, 177, 187, 204, 62, 90, + 203, 89, 95, 176, 156, 169, 160, 81, + 11, 245, 22, 235, 122, 117, 44, 215, + 79, 174, 213, 233, 230, 231, 173, 232, + 116, 214, 244, 234, 168, 80, 88, 175, +} + +/** + * Inverse of the logarithm table. Maps integer logarithms + * to members of the field. There is no entry for 255 + * because the highest log is 254. + * + * This table was generated by `go run gentables.go` + */ +var expTable = []byte{0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, 0x1d, 0x3a, 0x74, 0xe8, 0xcd, 0x87, 0x13, 0x26, 0x4c, 0x98, 0x2d, 0x5a, 0xb4, 0x75, 0xea, 0xc9, 0x8f, 0x3, 0x6, 0xc, 0x18, 0x30, 0x60, 0xc0, 0x9d, 0x27, 0x4e, 0x9c, 0x25, 0x4a, 0x94, 0x35, 0x6a, 0xd4, 0xb5, 0x77, 0xee, 0xc1, 0x9f, 0x23, 0x46, 0x8c, 0x5, 0xa, 0x14, 0x28, 0x50, 0xa0, 0x5d, 0xba, 0x69, 0xd2, 0xb9, 0x6f, 0xde, 0xa1, 0x5f, 0xbe, 0x61, 0xc2, 0x99, 0x2f, 0x5e, 0xbc, 0x65, 0xca, 0x89, 0xf, 0x1e, 0x3c, 0x78, 0xf0, 0xfd, 0xe7, 0xd3, 0xbb, 0x6b, 0xd6, 0xb1, 0x7f, 0xfe, 0xe1, 0xdf, 0xa3, 0x5b, 0xb6, 0x71, 0xe2, 0xd9, 0xaf, 0x43, 0x86, 0x11, 0x22, 0x44, 0x88, 0xd, 0x1a, 0x34, 0x68, 0xd0, 0xbd, 0x67, 0xce, 0x81, 0x1f, 0x3e, 0x7c, 0xf8, 0xed, 0xc7, 0x93, 0x3b, 0x76, 0xec, 0xc5, 0x97, 0x33, 0x66, 0xcc, 0x85, 0x17, 0x2e, 0x5c, 0xb8, 0x6d, 0xda, 0xa9, 0x4f, 0x9e, 0x21, 0x42, 0x84, 0x15, 0x2a, 0x54, 0xa8, 0x4d, 0x9a, 0x29, 0x52, 0xa4, 0x55, 0xaa, 0x49, 0x92, 0x39, 0x72, 0xe4, 0xd5, 0xb7, 0x73, 0xe6, 0xd1, 0xbf, 0x63, 0xc6, 0x91, 0x3f, 0x7e, 0xfc, 0xe5, 0xd7, 0xb3, 0x7b, 0xf6, 0xf1, 0xff, 0xe3, 0xdb, 0xab, 0x4b, 0x96, 0x31, 0x62, 0xc4, 0x95, 0x37, 0x6e, 0xdc, 0xa5, 0x57, 0xae, 0x41, 0x82, 0x19, 0x32, 0x64, 0xc8, 0x8d, 0x7, 0xe, 0x1c, 0x38, 0x70, 0xe0, 0xdd, 0xa7, 0x53, 0xa6, 0x51, 0xa2, 0x59, 0xb2, 0x79, 0xf2, 0xf9, 0xef, 0xc3, 0x9b, 0x2b, 0x56, 0xac, 0x45, 0x8a, 0x9, 0x12, 0x24, 0x48, 0x90, 0x3d, 0x7a, 0xf4, 0xf5, 0xf7, 0xf3, 0xfb, 0xeb, 0xcb, 0x8b, 0xb, 0x16, 0x2c, 0x58, 0xb0, 0x7d, 0xfa, 0xe9, 0xcf, 0x83, 0x1b, 0x36, 0x6c, 0xd8, 0xad, 0x47, 0x8e, 0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, 0x1d, 0x3a, 0x74, 0xe8, 0xcd, 0x87, 0x13, 0x26, 0x4c, 0x98, 0x2d, 0x5a, 0xb4, 0x75, 0xea, 0xc9, 0x8f, 0x3, 0x6, 0xc, 0x18, 0x30, 0x60, 0xc0, 0x9d, 0x27, 0x4e, 0x9c, 0x25, 0x4a, 0x94, 0x35, 0x6a, 0xd4, 0xb5, 0x77, 0xee, 0xc1, 0x9f, 0x23, 0x46, 0x8c, 0x5, 0xa, 0x14, 0x28, 0x50, 0xa0, 0x5d, 0xba, 0x69, 0xd2, 0xb9, 0x6f, 0xde, 0xa1, 0x5f, 0xbe, 0x61, 0xc2, 0x99, 0x2f, 0x5e, 0xbc, 0x65, 0xca, 0x89, 0xf, 0x1e, 0x3c, 0x78, 0xf0, 0xfd, 0xe7, 0xd3, 0xbb, 0x6b, 0xd6, 0xb1, 0x7f, 0xfe, 0xe1, 0xdf, 0xa3, 0x5b, 0xb6, 0x71, 0xe2, 0xd9, 0xaf, 0x43, 0x86, 0x11, 0x22, 0x44, 0x88, 0xd, 0x1a, 0x34, 0x68, 0xd0, 0xbd, 0x67, 0xce, 0x81, 0x1f, 0x3e, 0x7c, 0xf8, 0xed, 0xc7, 0x93, 0x3b, 0x76, 0xec, 0xc5, 0x97, 0x33, 0x66, 0xcc, 0x85, 0x17, 0x2e, 0x5c, 0xb8, 0x6d, 0xda, 0xa9, 0x4f, 0x9e, 0x21, 0x42, 0x84, 0x15, 0x2a, 0x54, 0xa8, 0x4d, 0x9a, 0x29, 0x52, 0xa4, 0x55, 0xaa, 0x49, 0x92, 0x39, 0x72, 0xe4, 0xd5, 0xb7, 0x73, 0xe6, 0xd1, 0xbf, 0x63, 0xc6, 0x91, 0x3f, 0x7e, 0xfc, 0xe5, 0xd7, 0xb3, 0x7b, 0xf6, 0xf1, 0xff, 0xe3, 0xdb, 0xab, 0x4b, 0x96, 0x31, 0x62, 0xc4, 0x95, 0x37, 0x6e, 0xdc, 0xa5, 0x57, 0xae, 0x41, 0x82, 0x19, 0x32, 0x64, 0xc8, 0x8d, 0x7, 0xe, 0x1c, 0x38, 0x70, 0xe0, 0xdd, 0xa7, 0x53, 0xa6, 0x51, 0xa2, 0x59, 0xb2, 0x79, 0xf2, 0xf9, 0xef, 0xc3, 0x9b, 0x2b, 0x56, 0xac, 0x45, 0x8a, 0x9, 0x12, 0x24, 0x48, 0x90, 0x3d, 0x7a, 0xf4, 0xf5, 0xf7, 0xf3, 0xfb, 0xeb, 0xcb, 0x8b, 0xb, 0x16, 0x2c, 0x58, 0xb0, 0x7d, 0xfa, 0xe9, 0xcf, 0x83, 0x1b, 0x36, 0x6c, 0xd8, 0xad, 0x47, 0x8e} + +func galAdd(a, b byte) byte { + return a ^ b +} + +func galSub(a, b byte) byte { + return a ^ b +} + +// Table from https://github.com/templexxx/reedsolomon +var invTable = [256]byte{0x0, 0x1, 0x8e, 0xf4, 0x47, 0xa7, 0x7a, 0xba, 0xad, 0x9d, 0xdd, 0x98, 0x3d, 0xaa, 0x5d, 0x96, 0xd8, 0x72, 0xc0, 0x58, 0xe0, 0x3e, 0x4c, 0x66, 0x90, 0xde, 0x55, 0x80, 0xa0, 0x83, 0x4b, 0x2a, 0x6c, 0xed, 0x39, 0x51, 0x60, 0x56, 0x2c, 0x8a, 0x70, 0xd0, 0x1f, 0x4a, 0x26, 0x8b, 0x33, 0x6e, 0x48, 0x89, 0x6f, 0x2e, 0xa4, 0xc3, 0x40, 0x5e, 0x50, 0x22, 0xcf, 0xa9, 0xab, 0xc, 0x15, 0xe1, 0x36, 0x5f, 0xf8, 0xd5, 0x92, 0x4e, 0xa6, 0x4, 0x30, 0x88, 0x2b, 0x1e, 0x16, 0x67, 0x45, 0x93, 0x38, 0x23, 0x68, 0x8c, 0x81, 0x1a, 0x25, 0x61, 0x13, 0xc1, 0xcb, 0x63, 0x97, 0xe, 0x37, 0x41, 0x24, 0x57, 0xca, 0x5b, 0xb9, 0xc4, 0x17, 0x4d, 0x52, 0x8d, 0xef, 0xb3, 0x20, 0xec, 0x2f, 0x32, 0x28, 0xd1, 0x11, 0xd9, 0xe9, 0xfb, 0xda, 0x79, 0xdb, 0x77, 0x6, 0xbb, 0x84, 0xcd, 0xfe, 0xfc, 0x1b, 0x54, 0xa1, 0x1d, 0x7c, 0xcc, 0xe4, 0xb0, 0x49, 0x31, 0x27, 0x2d, 0x53, 0x69, 0x2, 0xf5, 0x18, 0xdf, 0x44, 0x4f, 0x9b, 0xbc, 0xf, 0x5c, 0xb, 0xdc, 0xbd, 0x94, 0xac, 0x9, 0xc7, 0xa2, 0x1c, 0x82, 0x9f, 0xc6, 0x34, 0xc2, 0x46, 0x5, 0xce, 0x3b, 0xd, 0x3c, 0x9c, 0x8, 0xbe, 0xb7, 0x87, 0xe5, 0xee, 0x6b, 0xeb, 0xf2, 0xbf, 0xaf, 0xc5, 0x64, 0x7, 0x7b, 0x95, 0x9a, 0xae, 0xb6, 0x12, 0x59, 0xa5, 0x35, 0x65, 0xb8, 0xa3, 0x9e, 0xd2, 0xf7, 0x62, 0x5a, 0x85, 0x7d, 0xa8, 0x3a, 0x29, 0x71, 0xc8, 0xf6, 0xf9, 0x43, 0xd7, 0xd6, 0x10, 0x73, 0x76, 0x78, 0x99, 0xa, 0x19, 0x91, 0x14, 0x3f, 0xe6, 0xf0, 0x86, 0xb1, 0xe2, 0xf1, 0xfa, 0x74, 0xf3, 0xb4, 0x6d, 0x21, 0xb2, 0x6a, 0xe3, 0xe7, 0xb5, 0xea, 0x3, 0x8f, 0xd3, 0xc9, 0x42, 0xd4, 0xe8, 0x75, 0x7f, 0xff, 0x7e, 0xfd} + +var mulTable = [256][256]uint8{{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, + {0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff}, + {0x0, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, 0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, 0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e, 0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e, 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e, 0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe, 0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe, 0x1d, 0x1f, 0x19, 0x1b, 0x15, 0x17, 0x11, 0x13, 0xd, 0xf, 0x9, 0xb, 0x5, 0x7, 0x1, 0x3, 0x3d, 0x3f, 0x39, 0x3b, 0x35, 0x37, 0x31, 0x33, 0x2d, 0x2f, 0x29, 0x2b, 0x25, 0x27, 0x21, 0x23, 0x5d, 0x5f, 0x59, 0x5b, 0x55, 0x57, 0x51, 0x53, 0x4d, 0x4f, 0x49, 0x4b, 0x45, 0x47, 0x41, 0x43, 0x7d, 0x7f, 0x79, 0x7b, 0x75, 0x77, 0x71, 0x73, 0x6d, 0x6f, 0x69, 0x6b, 0x65, 0x67, 0x61, 0x63, 0x9d, 0x9f, 0x99, 0x9b, 0x95, 0x97, 0x91, 0x93, 0x8d, 0x8f, 0x89, 0x8b, 0x85, 0x87, 0x81, 0x83, 0xbd, 0xbf, 0xb9, 0xbb, 0xb5, 0xb7, 0xb1, 0xb3, 0xad, 0xaf, 0xa9, 0xab, 0xa5, 0xa7, 0xa1, 0xa3, 0xdd, 0xdf, 0xd9, 0xdb, 0xd5, 0xd7, 0xd1, 0xd3, 0xcd, 0xcf, 0xc9, 0xcb, 0xc5, 0xc7, 0xc1, 0xc3, 0xfd, 0xff, 0xf9, 0xfb, 0xf5, 0xf7, 0xf1, 0xf3, 0xed, 0xef, 0xe9, 0xeb, 0xe5, 0xe7, 0xe1, 0xe3}, + {0x0, 0x3, 0x6, 0x5, 0xc, 0xf, 0xa, 0x9, 0x18, 0x1b, 0x1e, 0x1d, 0x14, 0x17, 0x12, 0x11, 0x30, 0x33, 0x36, 0x35, 0x3c, 0x3f, 0x3a, 0x39, 0x28, 0x2b, 0x2e, 0x2d, 0x24, 0x27, 0x22, 0x21, 0x60, 0x63, 0x66, 0x65, 0x6c, 0x6f, 0x6a, 0x69, 0x78, 0x7b, 0x7e, 0x7d, 0x74, 0x77, 0x72, 0x71, 0x50, 0x53, 0x56, 0x55, 0x5c, 0x5f, 0x5a, 0x59, 0x48, 0x4b, 0x4e, 0x4d, 0x44, 0x47, 0x42, 0x41, 0xc0, 0xc3, 0xc6, 0xc5, 0xcc, 0xcf, 0xca, 0xc9, 0xd8, 0xdb, 0xde, 0xdd, 0xd4, 0xd7, 0xd2, 0xd1, 0xf0, 0xf3, 0xf6, 0xf5, 0xfc, 0xff, 0xfa, 0xf9, 0xe8, 0xeb, 0xee, 0xed, 0xe4, 0xe7, 0xe2, 0xe1, 0xa0, 0xa3, 0xa6, 0xa5, 0xac, 0xaf, 0xaa, 0xa9, 0xb8, 0xbb, 0xbe, 0xbd, 0xb4, 0xb7, 0xb2, 0xb1, 0x90, 0x93, 0x96, 0x95, 0x9c, 0x9f, 0x9a, 0x99, 0x88, 0x8b, 0x8e, 0x8d, 0x84, 0x87, 0x82, 0x81, 0x9d, 0x9e, 0x9b, 0x98, 0x91, 0x92, 0x97, 0x94, 0x85, 0x86, 0x83, 0x80, 0x89, 0x8a, 0x8f, 0x8c, 0xad, 0xae, 0xab, 0xa8, 0xa1, 0xa2, 0xa7, 0xa4, 0xb5, 0xb6, 0xb3, 0xb0, 0xb9, 0xba, 0xbf, 0xbc, 0xfd, 0xfe, 0xfb, 0xf8, 0xf1, 0xf2, 0xf7, 0xf4, 0xe5, 0xe6, 0xe3, 0xe0, 0xe9, 0xea, 0xef, 0xec, 0xcd, 0xce, 0xcb, 0xc8, 0xc1, 0xc2, 0xc7, 0xc4, 0xd5, 0xd6, 0xd3, 0xd0, 0xd9, 0xda, 0xdf, 0xdc, 0x5d, 0x5e, 0x5b, 0x58, 0x51, 0x52, 0x57, 0x54, 0x45, 0x46, 0x43, 0x40, 0x49, 0x4a, 0x4f, 0x4c, 0x6d, 0x6e, 0x6b, 0x68, 0x61, 0x62, 0x67, 0x64, 0x75, 0x76, 0x73, 0x70, 0x79, 0x7a, 0x7f, 0x7c, 0x3d, 0x3e, 0x3b, 0x38, 0x31, 0x32, 0x37, 0x34, 0x25, 0x26, 0x23, 0x20, 0x29, 0x2a, 0x2f, 0x2c, 0xd, 0xe, 0xb, 0x8, 0x1, 0x2, 0x7, 0x4, 0x15, 0x16, 0x13, 0x10, 0x19, 0x1a, 0x1f, 0x1c}, + {0x0, 0x4, 0x8, 0xc, 0x10, 0x14, 0x18, 0x1c, 0x20, 0x24, 0x28, 0x2c, 0x30, 0x34, 0x38, 0x3c, 0x40, 0x44, 0x48, 0x4c, 0x50, 0x54, 0x58, 0x5c, 0x60, 0x64, 0x68, 0x6c, 0x70, 0x74, 0x78, 0x7c, 0x80, 0x84, 0x88, 0x8c, 0x90, 0x94, 0x98, 0x9c, 0xa0, 0xa4, 0xa8, 0xac, 0xb0, 0xb4, 0xb8, 0xbc, 0xc0, 0xc4, 0xc8, 0xcc, 0xd0, 0xd4, 0xd8, 0xdc, 0xe0, 0xe4, 0xe8, 0xec, 0xf0, 0xf4, 0xf8, 0xfc, 0x1d, 0x19, 0x15, 0x11, 0xd, 0x9, 0x5, 0x1, 0x3d, 0x39, 0x35, 0x31, 0x2d, 0x29, 0x25, 0x21, 0x5d, 0x59, 0x55, 0x51, 0x4d, 0x49, 0x45, 0x41, 0x7d, 0x79, 0x75, 0x71, 0x6d, 0x69, 0x65, 0x61, 0x9d, 0x99, 0x95, 0x91, 0x8d, 0x89, 0x85, 0x81, 0xbd, 0xb9, 0xb5, 0xb1, 0xad, 0xa9, 0xa5, 0xa1, 0xdd, 0xd9, 0xd5, 0xd1, 0xcd, 0xc9, 0xc5, 0xc1, 0xfd, 0xf9, 0xf5, 0xf1, 0xed, 0xe9, 0xe5, 0xe1, 0x3a, 0x3e, 0x32, 0x36, 0x2a, 0x2e, 0x22, 0x26, 0x1a, 0x1e, 0x12, 0x16, 0xa, 0xe, 0x2, 0x6, 0x7a, 0x7e, 0x72, 0x76, 0x6a, 0x6e, 0x62, 0x66, 0x5a, 0x5e, 0x52, 0x56, 0x4a, 0x4e, 0x42, 0x46, 0xba, 0xbe, 0xb2, 0xb6, 0xaa, 0xae, 0xa2, 0xa6, 0x9a, 0x9e, 0x92, 0x96, 0x8a, 0x8e, 0x82, 0x86, 0xfa, 0xfe, 0xf2, 0xf6, 0xea, 0xee, 0xe2, 0xe6, 0xda, 0xde, 0xd2, 0xd6, 0xca, 0xce, 0xc2, 0xc6, 0x27, 0x23, 0x2f, 0x2b, 0x37, 0x33, 0x3f, 0x3b, 0x7, 0x3, 0xf, 0xb, 0x17, 0x13, 0x1f, 0x1b, 0x67, 0x63, 0x6f, 0x6b, 0x77, 0x73, 0x7f, 0x7b, 0x47, 0x43, 0x4f, 0x4b, 0x57, 0x53, 0x5f, 0x5b, 0xa7, 0xa3, 0xaf, 0xab, 0xb7, 0xb3, 0xbf, 0xbb, 0x87, 0x83, 0x8f, 0x8b, 0x97, 0x93, 0x9f, 0x9b, 0xe7, 0xe3, 0xef, 0xeb, 0xf7, 0xf3, 0xff, 0xfb, 0xc7, 0xc3, 0xcf, 0xcb, 0xd7, 0xd3, 0xdf, 0xdb}, + {0x0, 0x5, 0xa, 0xf, 0x14, 0x11, 0x1e, 0x1b, 0x28, 0x2d, 0x22, 0x27, 0x3c, 0x39, 0x36, 0x33, 0x50, 0x55, 0x5a, 0x5f, 0x44, 0x41, 0x4e, 0x4b, 0x78, 0x7d, 0x72, 0x77, 0x6c, 0x69, 0x66, 0x63, 0xa0, 0xa5, 0xaa, 0xaf, 0xb4, 0xb1, 0xbe, 0xbb, 0x88, 0x8d, 0x82, 0x87, 0x9c, 0x99, 0x96, 0x93, 0xf0, 0xf5, 0xfa, 0xff, 0xe4, 0xe1, 0xee, 0xeb, 0xd8, 0xdd, 0xd2, 0xd7, 0xcc, 0xc9, 0xc6, 0xc3, 0x5d, 0x58, 0x57, 0x52, 0x49, 0x4c, 0x43, 0x46, 0x75, 0x70, 0x7f, 0x7a, 0x61, 0x64, 0x6b, 0x6e, 0xd, 0x8, 0x7, 0x2, 0x19, 0x1c, 0x13, 0x16, 0x25, 0x20, 0x2f, 0x2a, 0x31, 0x34, 0x3b, 0x3e, 0xfd, 0xf8, 0xf7, 0xf2, 0xe9, 0xec, 0xe3, 0xe6, 0xd5, 0xd0, 0xdf, 0xda, 0xc1, 0xc4, 0xcb, 0xce, 0xad, 0xa8, 0xa7, 0xa2, 0xb9, 0xbc, 0xb3, 0xb6, 0x85, 0x80, 0x8f, 0x8a, 0x91, 0x94, 0x9b, 0x9e, 0xba, 0xbf, 0xb0, 0xb5, 0xae, 0xab, 0xa4, 0xa1, 0x92, 0x97, 0x98, 0x9d, 0x86, 0x83, 0x8c, 0x89, 0xea, 0xef, 0xe0, 0xe5, 0xfe, 0xfb, 0xf4, 0xf1, 0xc2, 0xc7, 0xc8, 0xcd, 0xd6, 0xd3, 0xdc, 0xd9, 0x1a, 0x1f, 0x10, 0x15, 0xe, 0xb, 0x4, 0x1, 0x32, 0x37, 0x38, 0x3d, 0x26, 0x23, 0x2c, 0x29, 0x4a, 0x4f, 0x40, 0x45, 0x5e, 0x5b, 0x54, 0x51, 0x62, 0x67, 0x68, 0x6d, 0x76, 0x73, 0x7c, 0x79, 0xe7, 0xe2, 0xed, 0xe8, 0xf3, 0xf6, 0xf9, 0xfc, 0xcf, 0xca, 0xc5, 0xc0, 0xdb, 0xde, 0xd1, 0xd4, 0xb7, 0xb2, 0xbd, 0xb8, 0xa3, 0xa6, 0xa9, 0xac, 0x9f, 0x9a, 0x95, 0x90, 0x8b, 0x8e, 0x81, 0x84, 0x47, 0x42, 0x4d, 0x48, 0x53, 0x56, 0x59, 0x5c, 0x6f, 0x6a, 0x65, 0x60, 0x7b, 0x7e, 0x71, 0x74, 0x17, 0x12, 0x1d, 0x18, 0x3, 0x6, 0x9, 0xc, 0x3f, 0x3a, 0x35, 0x30, 0x2b, 0x2e, 0x21, 0x24}, + {0x0, 0x6, 0xc, 0xa, 0x18, 0x1e, 0x14, 0x12, 0x30, 0x36, 0x3c, 0x3a, 0x28, 0x2e, 0x24, 0x22, 0x60, 0x66, 0x6c, 0x6a, 0x78, 0x7e, 0x74, 0x72, 0x50, 0x56, 0x5c, 0x5a, 0x48, 0x4e, 0x44, 0x42, 0xc0, 0xc6, 0xcc, 0xca, 0xd8, 0xde, 0xd4, 0xd2, 0xf0, 0xf6, 0xfc, 0xfa, 0xe8, 0xee, 0xe4, 0xe2, 0xa0, 0xa6, 0xac, 0xaa, 0xb8, 0xbe, 0xb4, 0xb2, 0x90, 0x96, 0x9c, 0x9a, 0x88, 0x8e, 0x84, 0x82, 0x9d, 0x9b, 0x91, 0x97, 0x85, 0x83, 0x89, 0x8f, 0xad, 0xab, 0xa1, 0xa7, 0xb5, 0xb3, 0xb9, 0xbf, 0xfd, 0xfb, 0xf1, 0xf7, 0xe5, 0xe3, 0xe9, 0xef, 0xcd, 0xcb, 0xc1, 0xc7, 0xd5, 0xd3, 0xd9, 0xdf, 0x5d, 0x5b, 0x51, 0x57, 0x45, 0x43, 0x49, 0x4f, 0x6d, 0x6b, 0x61, 0x67, 0x75, 0x73, 0x79, 0x7f, 0x3d, 0x3b, 0x31, 0x37, 0x25, 0x23, 0x29, 0x2f, 0xd, 0xb, 0x1, 0x7, 0x15, 0x13, 0x19, 0x1f, 0x27, 0x21, 0x2b, 0x2d, 0x3f, 0x39, 0x33, 0x35, 0x17, 0x11, 0x1b, 0x1d, 0xf, 0x9, 0x3, 0x5, 0x47, 0x41, 0x4b, 0x4d, 0x5f, 0x59, 0x53, 0x55, 0x77, 0x71, 0x7b, 0x7d, 0x6f, 0x69, 0x63, 0x65, 0xe7, 0xe1, 0xeb, 0xed, 0xff, 0xf9, 0xf3, 0xf5, 0xd7, 0xd1, 0xdb, 0xdd, 0xcf, 0xc9, 0xc3, 0xc5, 0x87, 0x81, 0x8b, 0x8d, 0x9f, 0x99, 0x93, 0x95, 0xb7, 0xb1, 0xbb, 0xbd, 0xaf, 0xa9, 0xa3, 0xa5, 0xba, 0xbc, 0xb6, 0xb0, 0xa2, 0xa4, 0xae, 0xa8, 0x8a, 0x8c, 0x86, 0x80, 0x92, 0x94, 0x9e, 0x98, 0xda, 0xdc, 0xd6, 0xd0, 0xc2, 0xc4, 0xce, 0xc8, 0xea, 0xec, 0xe6, 0xe0, 0xf2, 0xf4, 0xfe, 0xf8, 0x7a, 0x7c, 0x76, 0x70, 0x62, 0x64, 0x6e, 0x68, 0x4a, 0x4c, 0x46, 0x40, 0x52, 0x54, 0x5e, 0x58, 0x1a, 0x1c, 0x16, 0x10, 0x2, 0x4, 0xe, 0x8, 0x2a, 0x2c, 0x26, 0x20, 0x32, 0x34, 0x3e, 0x38}, + {0x0, 0x7, 0xe, 0x9, 0x1c, 0x1b, 0x12, 0x15, 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d, 0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65, 0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d, 0xe0, 0xe7, 0xee, 0xe9, 0xfc, 0xfb, 0xf2, 0xf5, 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd, 0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85, 0xa8, 0xaf, 0xa6, 0xa1, 0xb4, 0xb3, 0xba, 0xbd, 0xdd, 0xda, 0xd3, 0xd4, 0xc1, 0xc6, 0xcf, 0xc8, 0xe5, 0xe2, 0xeb, 0xec, 0xf9, 0xfe, 0xf7, 0xf0, 0xad, 0xaa, 0xa3, 0xa4, 0xb1, 0xb6, 0xbf, 0xb8, 0x95, 0x92, 0x9b, 0x9c, 0x89, 0x8e, 0x87, 0x80, 0x3d, 0x3a, 0x33, 0x34, 0x21, 0x26, 0x2f, 0x28, 0x5, 0x2, 0xb, 0xc, 0x19, 0x1e, 0x17, 0x10, 0x4d, 0x4a, 0x43, 0x44, 0x51, 0x56, 0x5f, 0x58, 0x75, 0x72, 0x7b, 0x7c, 0x69, 0x6e, 0x67, 0x60, 0xa7, 0xa0, 0xa9, 0xae, 0xbb, 0xbc, 0xb5, 0xb2, 0x9f, 0x98, 0x91, 0x96, 0x83, 0x84, 0x8d, 0x8a, 0xd7, 0xd0, 0xd9, 0xde, 0xcb, 0xcc, 0xc5, 0xc2, 0xef, 0xe8, 0xe1, 0xe6, 0xf3, 0xf4, 0xfd, 0xfa, 0x47, 0x40, 0x49, 0x4e, 0x5b, 0x5c, 0x55, 0x52, 0x7f, 0x78, 0x71, 0x76, 0x63, 0x64, 0x6d, 0x6a, 0x37, 0x30, 0x39, 0x3e, 0x2b, 0x2c, 0x25, 0x22, 0xf, 0x8, 0x1, 0x6, 0x13, 0x14, 0x1d, 0x1a, 0x7a, 0x7d, 0x74, 0x73, 0x66, 0x61, 0x68, 0x6f, 0x42, 0x45, 0x4c, 0x4b, 0x5e, 0x59, 0x50, 0x57, 0xa, 0xd, 0x4, 0x3, 0x16, 0x11, 0x18, 0x1f, 0x32, 0x35, 0x3c, 0x3b, 0x2e, 0x29, 0x20, 0x27, 0x9a, 0x9d, 0x94, 0x93, 0x86, 0x81, 0x88, 0x8f, 0xa2, 0xa5, 0xac, 0xab, 0xbe, 0xb9, 0xb0, 0xb7, 0xea, 0xed, 0xe4, 0xe3, 0xf6, 0xf1, 0xf8, 0xff, 0xd2, 0xd5, 0xdc, 0xdb, 0xce, 0xc9, 0xc0, 0xc7}, + {0x0, 0x8, 0x10, 0x18, 0x20, 0x28, 0x30, 0x38, 0x40, 0x48, 0x50, 0x58, 0x60, 0x68, 0x70, 0x78, 0x80, 0x88, 0x90, 0x98, 0xa0, 0xa8, 0xb0, 0xb8, 0xc0, 0xc8, 0xd0, 0xd8, 0xe0, 0xe8, 0xf0, 0xf8, 0x1d, 0x15, 0xd, 0x5, 0x3d, 0x35, 0x2d, 0x25, 0x5d, 0x55, 0x4d, 0x45, 0x7d, 0x75, 0x6d, 0x65, 0x9d, 0x95, 0x8d, 0x85, 0xbd, 0xb5, 0xad, 0xa5, 0xdd, 0xd5, 0xcd, 0xc5, 0xfd, 0xf5, 0xed, 0xe5, 0x3a, 0x32, 0x2a, 0x22, 0x1a, 0x12, 0xa, 0x2, 0x7a, 0x72, 0x6a, 0x62, 0x5a, 0x52, 0x4a, 0x42, 0xba, 0xb2, 0xaa, 0xa2, 0x9a, 0x92, 0x8a, 0x82, 0xfa, 0xf2, 0xea, 0xe2, 0xda, 0xd2, 0xca, 0xc2, 0x27, 0x2f, 0x37, 0x3f, 0x7, 0xf, 0x17, 0x1f, 0x67, 0x6f, 0x77, 0x7f, 0x47, 0x4f, 0x57, 0x5f, 0xa7, 0xaf, 0xb7, 0xbf, 0x87, 0x8f, 0x97, 0x9f, 0xe7, 0xef, 0xf7, 0xff, 0xc7, 0xcf, 0xd7, 0xdf, 0x74, 0x7c, 0x64, 0x6c, 0x54, 0x5c, 0x44, 0x4c, 0x34, 0x3c, 0x24, 0x2c, 0x14, 0x1c, 0x4, 0xc, 0xf4, 0xfc, 0xe4, 0xec, 0xd4, 0xdc, 0xc4, 0xcc, 0xb4, 0xbc, 0xa4, 0xac, 0x94, 0x9c, 0x84, 0x8c, 0x69, 0x61, 0x79, 0x71, 0x49, 0x41, 0x59, 0x51, 0x29, 0x21, 0x39, 0x31, 0x9, 0x1, 0x19, 0x11, 0xe9, 0xe1, 0xf9, 0xf1, 0xc9, 0xc1, 0xd9, 0xd1, 0xa9, 0xa1, 0xb9, 0xb1, 0x89, 0x81, 0x99, 0x91, 0x4e, 0x46, 0x5e, 0x56, 0x6e, 0x66, 0x7e, 0x76, 0xe, 0x6, 0x1e, 0x16, 0x2e, 0x26, 0x3e, 0x36, 0xce, 0xc6, 0xde, 0xd6, 0xee, 0xe6, 0xfe, 0xf6, 0x8e, 0x86, 0x9e, 0x96, 0xae, 0xa6, 0xbe, 0xb6, 0x53, 0x5b, 0x43, 0x4b, 0x73, 0x7b, 0x63, 0x6b, 0x13, 0x1b, 0x3, 0xb, 0x33, 0x3b, 0x23, 0x2b, 0xd3, 0xdb, 0xc3, 0xcb, 0xf3, 0xfb, 0xe3, 0xeb, 0x93, 0x9b, 0x83, 0x8b, 0xb3, 0xbb, 0xa3, 0xab}, + {0x0, 0x9, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77, 0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf, 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7, 0x3d, 0x34, 0x2f, 0x26, 0x19, 0x10, 0xb, 0x2, 0x75, 0x7c, 0x67, 0x6e, 0x51, 0x58, 0x43, 0x4a, 0xad, 0xa4, 0xbf, 0xb6, 0x89, 0x80, 0x9b, 0x92, 0xe5, 0xec, 0xf7, 0xfe, 0xc1, 0xc8, 0xd3, 0xda, 0x7a, 0x73, 0x68, 0x61, 0x5e, 0x57, 0x4c, 0x45, 0x32, 0x3b, 0x20, 0x29, 0x16, 0x1f, 0x4, 0xd, 0xea, 0xe3, 0xf8, 0xf1, 0xce, 0xc7, 0xdc, 0xd5, 0xa2, 0xab, 0xb0, 0xb9, 0x86, 0x8f, 0x94, 0x9d, 0x47, 0x4e, 0x55, 0x5c, 0x63, 0x6a, 0x71, 0x78, 0xf, 0x6, 0x1d, 0x14, 0x2b, 0x22, 0x39, 0x30, 0xd7, 0xde, 0xc5, 0xcc, 0xf3, 0xfa, 0xe1, 0xe8, 0x9f, 0x96, 0x8d, 0x84, 0xbb, 0xb2, 0xa9, 0xa0, 0xf4, 0xfd, 0xe6, 0xef, 0xd0, 0xd9, 0xc2, 0xcb, 0xbc, 0xb5, 0xae, 0xa7, 0x98, 0x91, 0x8a, 0x83, 0x64, 0x6d, 0x76, 0x7f, 0x40, 0x49, 0x52, 0x5b, 0x2c, 0x25, 0x3e, 0x37, 0x8, 0x1, 0x1a, 0x13, 0xc9, 0xc0, 0xdb, 0xd2, 0xed, 0xe4, 0xff, 0xf6, 0x81, 0x88, 0x93, 0x9a, 0xa5, 0xac, 0xb7, 0xbe, 0x59, 0x50, 0x4b, 0x42, 0x7d, 0x74, 0x6f, 0x66, 0x11, 0x18, 0x3, 0xa, 0x35, 0x3c, 0x27, 0x2e, 0x8e, 0x87, 0x9c, 0x95, 0xaa, 0xa3, 0xb8, 0xb1, 0xc6, 0xcf, 0xd4, 0xdd, 0xe2, 0xeb, 0xf0, 0xf9, 0x1e, 0x17, 0xc, 0x5, 0x3a, 0x33, 0x28, 0x21, 0x56, 0x5f, 0x44, 0x4d, 0x72, 0x7b, 0x60, 0x69, 0xb3, 0xba, 0xa1, 0xa8, 0x97, 0x9e, 0x85, 0x8c, 0xfb, 0xf2, 0xe9, 0xe0, 0xdf, 0xd6, 0xcd, 0xc4, 0x23, 0x2a, 0x31, 0x38, 0x7, 0xe, 0x15, 0x1c, 0x6b, 0x62, 0x79, 0x70, 0x4f, 0x46, 0x5d, 0x54}, + {0x0, 0xa, 0x14, 0x1e, 0x28, 0x22, 0x3c, 0x36, 0x50, 0x5a, 0x44, 0x4e, 0x78, 0x72, 0x6c, 0x66, 0xa0, 0xaa, 0xb4, 0xbe, 0x88, 0x82, 0x9c, 0x96, 0xf0, 0xfa, 0xe4, 0xee, 0xd8, 0xd2, 0xcc, 0xc6, 0x5d, 0x57, 0x49, 0x43, 0x75, 0x7f, 0x61, 0x6b, 0xd, 0x7, 0x19, 0x13, 0x25, 0x2f, 0x31, 0x3b, 0xfd, 0xf7, 0xe9, 0xe3, 0xd5, 0xdf, 0xc1, 0xcb, 0xad, 0xa7, 0xb9, 0xb3, 0x85, 0x8f, 0x91, 0x9b, 0xba, 0xb0, 0xae, 0xa4, 0x92, 0x98, 0x86, 0x8c, 0xea, 0xe0, 0xfe, 0xf4, 0xc2, 0xc8, 0xd6, 0xdc, 0x1a, 0x10, 0xe, 0x4, 0x32, 0x38, 0x26, 0x2c, 0x4a, 0x40, 0x5e, 0x54, 0x62, 0x68, 0x76, 0x7c, 0xe7, 0xed, 0xf3, 0xf9, 0xcf, 0xc5, 0xdb, 0xd1, 0xb7, 0xbd, 0xa3, 0xa9, 0x9f, 0x95, 0x8b, 0x81, 0x47, 0x4d, 0x53, 0x59, 0x6f, 0x65, 0x7b, 0x71, 0x17, 0x1d, 0x3, 0x9, 0x3f, 0x35, 0x2b, 0x21, 0x69, 0x63, 0x7d, 0x77, 0x41, 0x4b, 0x55, 0x5f, 0x39, 0x33, 0x2d, 0x27, 0x11, 0x1b, 0x5, 0xf, 0xc9, 0xc3, 0xdd, 0xd7, 0xe1, 0xeb, 0xf5, 0xff, 0x99, 0x93, 0x8d, 0x87, 0xb1, 0xbb, 0xa5, 0xaf, 0x34, 0x3e, 0x20, 0x2a, 0x1c, 0x16, 0x8, 0x2, 0x64, 0x6e, 0x70, 0x7a, 0x4c, 0x46, 0x58, 0x52, 0x94, 0x9e, 0x80, 0x8a, 0xbc, 0xb6, 0xa8, 0xa2, 0xc4, 0xce, 0xd0, 0xda, 0xec, 0xe6, 0xf8, 0xf2, 0xd3, 0xd9, 0xc7, 0xcd, 0xfb, 0xf1, 0xef, 0xe5, 0x83, 0x89, 0x97, 0x9d, 0xab, 0xa1, 0xbf, 0xb5, 0x73, 0x79, 0x67, 0x6d, 0x5b, 0x51, 0x4f, 0x45, 0x23, 0x29, 0x37, 0x3d, 0xb, 0x1, 0x1f, 0x15, 0x8e, 0x84, 0x9a, 0x90, 0xa6, 0xac, 0xb2, 0xb8, 0xde, 0xd4, 0xca, 0xc0, 0xf6, 0xfc, 0xe2, 0xe8, 0x2e, 0x24, 0x3a, 0x30, 0x6, 0xc, 0x12, 0x18, 0x7e, 0x74, 0x6a, 0x60, 0x56, 0x5c, 0x42, 0x48}, + {0x0, 0xb, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69, 0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81, 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9, 0x7d, 0x76, 0x6b, 0x60, 0x51, 0x5a, 0x47, 0x4c, 0x25, 0x2e, 0x33, 0x38, 0x9, 0x2, 0x1f, 0x14, 0xcd, 0xc6, 0xdb, 0xd0, 0xe1, 0xea, 0xf7, 0xfc, 0x95, 0x9e, 0x83, 0x88, 0xb9, 0xb2, 0xaf, 0xa4, 0xfa, 0xf1, 0xec, 0xe7, 0xd6, 0xdd, 0xc0, 0xcb, 0xa2, 0xa9, 0xb4, 0xbf, 0x8e, 0x85, 0x98, 0x93, 0x4a, 0x41, 0x5c, 0x57, 0x66, 0x6d, 0x70, 0x7b, 0x12, 0x19, 0x4, 0xf, 0x3e, 0x35, 0x28, 0x23, 0x87, 0x8c, 0x91, 0x9a, 0xab, 0xa0, 0xbd, 0xb6, 0xdf, 0xd4, 0xc9, 0xc2, 0xf3, 0xf8, 0xe5, 0xee, 0x37, 0x3c, 0x21, 0x2a, 0x1b, 0x10, 0xd, 0x6, 0x6f, 0x64, 0x79, 0x72, 0x43, 0x48, 0x55, 0x5e, 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8, 0xb1, 0xba, 0xa7, 0xac, 0x9d, 0x96, 0x8b, 0x80, 0x59, 0x52, 0x4f, 0x44, 0x75, 0x7e, 0x63, 0x68, 0x1, 0xa, 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, 0x94, 0x9f, 0x82, 0x89, 0xb8, 0xb3, 0xae, 0xa5, 0xcc, 0xc7, 0xda, 0xd1, 0xe0, 0xeb, 0xf6, 0xfd, 0x24, 0x2f, 0x32, 0x39, 0x8, 0x3, 0x1e, 0x15, 0x7c, 0x77, 0x6a, 0x61, 0x50, 0x5b, 0x46, 0x4d, 0x13, 0x18, 0x5, 0xe, 0x3f, 0x34, 0x29, 0x22, 0x4b, 0x40, 0x5d, 0x56, 0x67, 0x6c, 0x71, 0x7a, 0xa3, 0xa8, 0xb5, 0xbe, 0x8f, 0x84, 0x99, 0x92, 0xfb, 0xf0, 0xed, 0xe6, 0xd7, 0xdc, 0xc1, 0xca, 0x6e, 0x65, 0x78, 0x73, 0x42, 0x49, 0x54, 0x5f, 0x36, 0x3d, 0x20, 0x2b, 0x1a, 0x11, 0xc, 0x7, 0xde, 0xd5, 0xc8, 0xc3, 0xf2, 0xf9, 0xe4, 0xef, 0x86, 0x8d, 0x90, 0x9b, 0xaa, 0xa1, 0xbc, 0xb7}, + {0x0, 0xc, 0x18, 0x14, 0x30, 0x3c, 0x28, 0x24, 0x60, 0x6c, 0x78, 0x74, 0x50, 0x5c, 0x48, 0x44, 0xc0, 0xcc, 0xd8, 0xd4, 0xf0, 0xfc, 0xe8, 0xe4, 0xa0, 0xac, 0xb8, 0xb4, 0x90, 0x9c, 0x88, 0x84, 0x9d, 0x91, 0x85, 0x89, 0xad, 0xa1, 0xb5, 0xb9, 0xfd, 0xf1, 0xe5, 0xe9, 0xcd, 0xc1, 0xd5, 0xd9, 0x5d, 0x51, 0x45, 0x49, 0x6d, 0x61, 0x75, 0x79, 0x3d, 0x31, 0x25, 0x29, 0xd, 0x1, 0x15, 0x19, 0x27, 0x2b, 0x3f, 0x33, 0x17, 0x1b, 0xf, 0x3, 0x47, 0x4b, 0x5f, 0x53, 0x77, 0x7b, 0x6f, 0x63, 0xe7, 0xeb, 0xff, 0xf3, 0xd7, 0xdb, 0xcf, 0xc3, 0x87, 0x8b, 0x9f, 0x93, 0xb7, 0xbb, 0xaf, 0xa3, 0xba, 0xb6, 0xa2, 0xae, 0x8a, 0x86, 0x92, 0x9e, 0xda, 0xd6, 0xc2, 0xce, 0xea, 0xe6, 0xf2, 0xfe, 0x7a, 0x76, 0x62, 0x6e, 0x4a, 0x46, 0x52, 0x5e, 0x1a, 0x16, 0x2, 0xe, 0x2a, 0x26, 0x32, 0x3e, 0x4e, 0x42, 0x56, 0x5a, 0x7e, 0x72, 0x66, 0x6a, 0x2e, 0x22, 0x36, 0x3a, 0x1e, 0x12, 0x6, 0xa, 0x8e, 0x82, 0x96, 0x9a, 0xbe, 0xb2, 0xa6, 0xaa, 0xee, 0xe2, 0xf6, 0xfa, 0xde, 0xd2, 0xc6, 0xca, 0xd3, 0xdf, 0xcb, 0xc7, 0xe3, 0xef, 0xfb, 0xf7, 0xb3, 0xbf, 0xab, 0xa7, 0x83, 0x8f, 0x9b, 0x97, 0x13, 0x1f, 0xb, 0x7, 0x23, 0x2f, 0x3b, 0x37, 0x73, 0x7f, 0x6b, 0x67, 0x43, 0x4f, 0x5b, 0x57, 0x69, 0x65, 0x71, 0x7d, 0x59, 0x55, 0x41, 0x4d, 0x9, 0x5, 0x11, 0x1d, 0x39, 0x35, 0x21, 0x2d, 0xa9, 0xa5, 0xb1, 0xbd, 0x99, 0x95, 0x81, 0x8d, 0xc9, 0xc5, 0xd1, 0xdd, 0xf9, 0xf5, 0xe1, 0xed, 0xf4, 0xf8, 0xec, 0xe0, 0xc4, 0xc8, 0xdc, 0xd0, 0x94, 0x98, 0x8c, 0x80, 0xa4, 0xa8, 0xbc, 0xb0, 0x34, 0x38, 0x2c, 0x20, 0x4, 0x8, 0x1c, 0x10, 0x54, 0x58, 0x4c, 0x40, 0x64, 0x68, 0x7c, 0x70}, + {0x0, 0xd, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b, 0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3, 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b, 0xbd, 0xb0, 0xa7, 0xaa, 0x89, 0x84, 0x93, 0x9e, 0xd5, 0xd8, 0xcf, 0xc2, 0xe1, 0xec, 0xfb, 0xf6, 0x6d, 0x60, 0x77, 0x7a, 0x59, 0x54, 0x43, 0x4e, 0x5, 0x8, 0x1f, 0x12, 0x31, 0x3c, 0x2b, 0x26, 0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44, 0xf, 0x2, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c, 0xb7, 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, 0xdf, 0xd2, 0xc5, 0xc8, 0xeb, 0xe6, 0xf1, 0xfc, 0xda, 0xd7, 0xc0, 0xcd, 0xee, 0xe3, 0xf4, 0xf9, 0xb2, 0xbf, 0xa8, 0xa5, 0x86, 0x8b, 0x9c, 0x91, 0xa, 0x7, 0x10, 0x1d, 0x3e, 0x33, 0x24, 0x29, 0x62, 0x6f, 0x78, 0x75, 0x56, 0x5b, 0x4c, 0x41, 0xce, 0xc3, 0xd4, 0xd9, 0xfa, 0xf7, 0xe0, 0xed, 0xa6, 0xab, 0xbc, 0xb1, 0x92, 0x9f, 0x88, 0x85, 0x1e, 0x13, 0x4, 0x9, 0x2a, 0x27, 0x30, 0x3d, 0x76, 0x7b, 0x6c, 0x61, 0x42, 0x4f, 0x58, 0x55, 0x73, 0x7e, 0x69, 0x64, 0x47, 0x4a, 0x5d, 0x50, 0x1b, 0x16, 0x1, 0xc, 0x2f, 0x22, 0x35, 0x38, 0xa3, 0xae, 0xb9, 0xb4, 0x97, 0x9a, 0x8d, 0x80, 0xcb, 0xc6, 0xd1, 0xdc, 0xff, 0xf2, 0xe5, 0xe8, 0xa9, 0xa4, 0xb3, 0xbe, 0x9d, 0x90, 0x87, 0x8a, 0xc1, 0xcc, 0xdb, 0xd6, 0xf5, 0xf8, 0xef, 0xe2, 0x79, 0x74, 0x63, 0x6e, 0x4d, 0x40, 0x57, 0x5a, 0x11, 0x1c, 0xb, 0x6, 0x25, 0x28, 0x3f, 0x32, 0x14, 0x19, 0xe, 0x3, 0x20, 0x2d, 0x3a, 0x37, 0x7c, 0x71, 0x66, 0x6b, 0x48, 0x45, 0x52, 0x5f, 0xc4, 0xc9, 0xde, 0xd3, 0xf0, 0xfd, 0xea, 0xe7, 0xac, 0xa1, 0xb6, 0xbb, 0x98, 0x95, 0x82, 0x8f}, + {0x0, 0xe, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a, 0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca, 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba, 0xdd, 0xd3, 0xc1, 0xcf, 0xe5, 0xeb, 0xf9, 0xf7, 0xad, 0xa3, 0xb1, 0xbf, 0x95, 0x9b, 0x89, 0x87, 0x3d, 0x33, 0x21, 0x2f, 0x5, 0xb, 0x19, 0x17, 0x4d, 0x43, 0x51, 0x5f, 0x75, 0x7b, 0x69, 0x67, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d, 0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d, 0x37, 0x39, 0x2b, 0x25, 0xf, 0x1, 0x13, 0x1d, 0x7a, 0x74, 0x66, 0x68, 0x42, 0x4c, 0x5e, 0x50, 0xa, 0x4, 0x16, 0x18, 0x32, 0x3c, 0x2e, 0x20, 0x9a, 0x94, 0x86, 0x88, 0xa2, 0xac, 0xbe, 0xb0, 0xea, 0xe4, 0xf6, 0xf8, 0xd2, 0xdc, 0xce, 0xc0, 0x53, 0x5d, 0x4f, 0x41, 0x6b, 0x65, 0x77, 0x79, 0x23, 0x2d, 0x3f, 0x31, 0x1b, 0x15, 0x7, 0x9, 0xb3, 0xbd, 0xaf, 0xa1, 0x8b, 0x85, 0x97, 0x99, 0xc3, 0xcd, 0xdf, 0xd1, 0xfb, 0xf5, 0xe7, 0xe9, 0x8e, 0x80, 0x92, 0x9c, 0xb6, 0xb8, 0xaa, 0xa4, 0xfe, 0xf0, 0xe2, 0xec, 0xc6, 0xc8, 0xda, 0xd4, 0x6e, 0x60, 0x72, 0x7c, 0x56, 0x58, 0x4a, 0x44, 0x1e, 0x10, 0x2, 0xc, 0x26, 0x28, 0x3a, 0x34, 0xf4, 0xfa, 0xe8, 0xe6, 0xcc, 0xc2, 0xd0, 0xde, 0x84, 0x8a, 0x98, 0x96, 0xbc, 0xb2, 0xa0, 0xae, 0x14, 0x1a, 0x8, 0x6, 0x2c, 0x22, 0x30, 0x3e, 0x64, 0x6a, 0x78, 0x76, 0x5c, 0x52, 0x40, 0x4e, 0x29, 0x27, 0x35, 0x3b, 0x11, 0x1f, 0xd, 0x3, 0x59, 0x57, 0x45, 0x4b, 0x61, 0x6f, 0x7d, 0x73, 0xc9, 0xc7, 0xd5, 0xdb, 0xf1, 0xff, 0xed, 0xe3, 0xb9, 0xb7, 0xa5, 0xab, 0x81, 0x8f, 0x9d, 0x93}, + {0x0, 0xf, 0x1e, 0x11, 0x3c, 0x33, 0x22, 0x2d, 0x78, 0x77, 0x66, 0x69, 0x44, 0x4b, 0x5a, 0x55, 0xf0, 0xff, 0xee, 0xe1, 0xcc, 0xc3, 0xd2, 0xdd, 0x88, 0x87, 0x96, 0x99, 0xb4, 0xbb, 0xaa, 0xa5, 0xfd, 0xf2, 0xe3, 0xec, 0xc1, 0xce, 0xdf, 0xd0, 0x85, 0x8a, 0x9b, 0x94, 0xb9, 0xb6, 0xa7, 0xa8, 0xd, 0x2, 0x13, 0x1c, 0x31, 0x3e, 0x2f, 0x20, 0x75, 0x7a, 0x6b, 0x64, 0x49, 0x46, 0x57, 0x58, 0xe7, 0xe8, 0xf9, 0xf6, 0xdb, 0xd4, 0xc5, 0xca, 0x9f, 0x90, 0x81, 0x8e, 0xa3, 0xac, 0xbd, 0xb2, 0x17, 0x18, 0x9, 0x6, 0x2b, 0x24, 0x35, 0x3a, 0x6f, 0x60, 0x71, 0x7e, 0x53, 0x5c, 0x4d, 0x42, 0x1a, 0x15, 0x4, 0xb, 0x26, 0x29, 0x38, 0x37, 0x62, 0x6d, 0x7c, 0x73, 0x5e, 0x51, 0x40, 0x4f, 0xea, 0xe5, 0xf4, 0xfb, 0xd6, 0xd9, 0xc8, 0xc7, 0x92, 0x9d, 0x8c, 0x83, 0xae, 0xa1, 0xb0, 0xbf, 0xd3, 0xdc, 0xcd, 0xc2, 0xef, 0xe0, 0xf1, 0xfe, 0xab, 0xa4, 0xb5, 0xba, 0x97, 0x98, 0x89, 0x86, 0x23, 0x2c, 0x3d, 0x32, 0x1f, 0x10, 0x1, 0xe, 0x5b, 0x54, 0x45, 0x4a, 0x67, 0x68, 0x79, 0x76, 0x2e, 0x21, 0x30, 0x3f, 0x12, 0x1d, 0xc, 0x3, 0x56, 0x59, 0x48, 0x47, 0x6a, 0x65, 0x74, 0x7b, 0xde, 0xd1, 0xc0, 0xcf, 0xe2, 0xed, 0xfc, 0xf3, 0xa6, 0xa9, 0xb8, 0xb7, 0x9a, 0x95, 0x84, 0x8b, 0x34, 0x3b, 0x2a, 0x25, 0x8, 0x7, 0x16, 0x19, 0x4c, 0x43, 0x52, 0x5d, 0x70, 0x7f, 0x6e, 0x61, 0xc4, 0xcb, 0xda, 0xd5, 0xf8, 0xf7, 0xe6, 0xe9, 0xbc, 0xb3, 0xa2, 0xad, 0x80, 0x8f, 0x9e, 0x91, 0xc9, 0xc6, 0xd7, 0xd8, 0xf5, 0xfa, 0xeb, 0xe4, 0xb1, 0xbe, 0xaf, 0xa0, 0x8d, 0x82, 0x93, 0x9c, 0x39, 0x36, 0x27, 0x28, 0x5, 0xa, 0x1b, 0x14, 0x41, 0x4e, 0x5f, 0x50, 0x7d, 0x72, 0x63, 0x6c}, + {0x0, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0, 0x1d, 0xd, 0x3d, 0x2d, 0x5d, 0x4d, 0x7d, 0x6d, 0x9d, 0x8d, 0xbd, 0xad, 0xdd, 0xcd, 0xfd, 0xed, 0x3a, 0x2a, 0x1a, 0xa, 0x7a, 0x6a, 0x5a, 0x4a, 0xba, 0xaa, 0x9a, 0x8a, 0xfa, 0xea, 0xda, 0xca, 0x27, 0x37, 0x7, 0x17, 0x67, 0x77, 0x47, 0x57, 0xa7, 0xb7, 0x87, 0x97, 0xe7, 0xf7, 0xc7, 0xd7, 0x74, 0x64, 0x54, 0x44, 0x34, 0x24, 0x14, 0x4, 0xf4, 0xe4, 0xd4, 0xc4, 0xb4, 0xa4, 0x94, 0x84, 0x69, 0x79, 0x49, 0x59, 0x29, 0x39, 0x9, 0x19, 0xe9, 0xf9, 0xc9, 0xd9, 0xa9, 0xb9, 0x89, 0x99, 0x4e, 0x5e, 0x6e, 0x7e, 0xe, 0x1e, 0x2e, 0x3e, 0xce, 0xde, 0xee, 0xfe, 0x8e, 0x9e, 0xae, 0xbe, 0x53, 0x43, 0x73, 0x63, 0x13, 0x3, 0x33, 0x23, 0xd3, 0xc3, 0xf3, 0xe3, 0x93, 0x83, 0xb3, 0xa3, 0xe8, 0xf8, 0xc8, 0xd8, 0xa8, 0xb8, 0x88, 0x98, 0x68, 0x78, 0x48, 0x58, 0x28, 0x38, 0x8, 0x18, 0xf5, 0xe5, 0xd5, 0xc5, 0xb5, 0xa5, 0x95, 0x85, 0x75, 0x65, 0x55, 0x45, 0x35, 0x25, 0x15, 0x5, 0xd2, 0xc2, 0xf2, 0xe2, 0x92, 0x82, 0xb2, 0xa2, 0x52, 0x42, 0x72, 0x62, 0x12, 0x2, 0x32, 0x22, 0xcf, 0xdf, 0xef, 0xff, 0x8f, 0x9f, 0xaf, 0xbf, 0x4f, 0x5f, 0x6f, 0x7f, 0xf, 0x1f, 0x2f, 0x3f, 0x9c, 0x8c, 0xbc, 0xac, 0xdc, 0xcc, 0xfc, 0xec, 0x1c, 0xc, 0x3c, 0x2c, 0x5c, 0x4c, 0x7c, 0x6c, 0x81, 0x91, 0xa1, 0xb1, 0xc1, 0xd1, 0xe1, 0xf1, 0x1, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71, 0xa6, 0xb6, 0x86, 0x96, 0xe6, 0xf6, 0xc6, 0xd6, 0x26, 0x36, 0x6, 0x16, 0x66, 0x76, 0x46, 0x56, 0xbb, 0xab, 0x9b, 0x8b, 0xfb, 0xeb, 0xdb, 0xcb, 0x3b, 0x2b, 0x1b, 0xb, 0x7b, 0x6b, 0x5b, 0x4b}, + {0x0, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0xd, 0x1c, 0x2f, 0x3e, 0x49, 0x58, 0x6b, 0x7a, 0x85, 0x94, 0xa7, 0xb6, 0xc1, 0xd0, 0xe3, 0xf2, 0x1a, 0xb, 0x38, 0x29, 0x5e, 0x4f, 0x7c, 0x6d, 0x92, 0x83, 0xb0, 0xa1, 0xd6, 0xc7, 0xf4, 0xe5, 0x17, 0x6, 0x35, 0x24, 0x53, 0x42, 0x71, 0x60, 0x9f, 0x8e, 0xbd, 0xac, 0xdb, 0xca, 0xf9, 0xe8, 0x34, 0x25, 0x16, 0x7, 0x70, 0x61, 0x52, 0x43, 0xbc, 0xad, 0x9e, 0x8f, 0xf8, 0xe9, 0xda, 0xcb, 0x39, 0x28, 0x1b, 0xa, 0x7d, 0x6c, 0x5f, 0x4e, 0xb1, 0xa0, 0x93, 0x82, 0xf5, 0xe4, 0xd7, 0xc6, 0x2e, 0x3f, 0xc, 0x1d, 0x6a, 0x7b, 0x48, 0x59, 0xa6, 0xb7, 0x84, 0x95, 0xe2, 0xf3, 0xc0, 0xd1, 0x23, 0x32, 0x1, 0x10, 0x67, 0x76, 0x45, 0x54, 0xab, 0xba, 0x89, 0x98, 0xef, 0xfe, 0xcd, 0xdc, 0x68, 0x79, 0x4a, 0x5b, 0x2c, 0x3d, 0xe, 0x1f, 0xe0, 0xf1, 0xc2, 0xd3, 0xa4, 0xb5, 0x86, 0x97, 0x65, 0x74, 0x47, 0x56, 0x21, 0x30, 0x3, 0x12, 0xed, 0xfc, 0xcf, 0xde, 0xa9, 0xb8, 0x8b, 0x9a, 0x72, 0x63, 0x50, 0x41, 0x36, 0x27, 0x14, 0x5, 0xfa, 0xeb, 0xd8, 0xc9, 0xbe, 0xaf, 0x9c, 0x8d, 0x7f, 0x6e, 0x5d, 0x4c, 0x3b, 0x2a, 0x19, 0x8, 0xf7, 0xe6, 0xd5, 0xc4, 0xb3, 0xa2, 0x91, 0x80, 0x5c, 0x4d, 0x7e, 0x6f, 0x18, 0x9, 0x3a, 0x2b, 0xd4, 0xc5, 0xf6, 0xe7, 0x90, 0x81, 0xb2, 0xa3, 0x51, 0x40, 0x73, 0x62, 0x15, 0x4, 0x37, 0x26, 0xd9, 0xc8, 0xfb, 0xea, 0x9d, 0x8c, 0xbf, 0xae, 0x46, 0x57, 0x64, 0x75, 0x2, 0x13, 0x20, 0x31, 0xce, 0xdf, 0xec, 0xfd, 0x8a, 0x9b, 0xa8, 0xb9, 0x4b, 0x5a, 0x69, 0x78, 0xf, 0x1e, 0x2d, 0x3c, 0xc3, 0xd2, 0xe1, 0xf0, 0x87, 0x96, 0xa5, 0xb4}, + {0x0, 0x12, 0x24, 0x36, 0x48, 0x5a, 0x6c, 0x7e, 0x90, 0x82, 0xb4, 0xa6, 0xd8, 0xca, 0xfc, 0xee, 0x3d, 0x2f, 0x19, 0xb, 0x75, 0x67, 0x51, 0x43, 0xad, 0xbf, 0x89, 0x9b, 0xe5, 0xf7, 0xc1, 0xd3, 0x7a, 0x68, 0x5e, 0x4c, 0x32, 0x20, 0x16, 0x4, 0xea, 0xf8, 0xce, 0xdc, 0xa2, 0xb0, 0x86, 0x94, 0x47, 0x55, 0x63, 0x71, 0xf, 0x1d, 0x2b, 0x39, 0xd7, 0xc5, 0xf3, 0xe1, 0x9f, 0x8d, 0xbb, 0xa9, 0xf4, 0xe6, 0xd0, 0xc2, 0xbc, 0xae, 0x98, 0x8a, 0x64, 0x76, 0x40, 0x52, 0x2c, 0x3e, 0x8, 0x1a, 0xc9, 0xdb, 0xed, 0xff, 0x81, 0x93, 0xa5, 0xb7, 0x59, 0x4b, 0x7d, 0x6f, 0x11, 0x3, 0x35, 0x27, 0x8e, 0x9c, 0xaa, 0xb8, 0xc6, 0xd4, 0xe2, 0xf0, 0x1e, 0xc, 0x3a, 0x28, 0x56, 0x44, 0x72, 0x60, 0xb3, 0xa1, 0x97, 0x85, 0xfb, 0xe9, 0xdf, 0xcd, 0x23, 0x31, 0x7, 0x15, 0x6b, 0x79, 0x4f, 0x5d, 0xf5, 0xe7, 0xd1, 0xc3, 0xbd, 0xaf, 0x99, 0x8b, 0x65, 0x77, 0x41, 0x53, 0x2d, 0x3f, 0x9, 0x1b, 0xc8, 0xda, 0xec, 0xfe, 0x80, 0x92, 0xa4, 0xb6, 0x58, 0x4a, 0x7c, 0x6e, 0x10, 0x2, 0x34, 0x26, 0x8f, 0x9d, 0xab, 0xb9, 0xc7, 0xd5, 0xe3, 0xf1, 0x1f, 0xd, 0x3b, 0x29, 0x57, 0x45, 0x73, 0x61, 0xb2, 0xa0, 0x96, 0x84, 0xfa, 0xe8, 0xde, 0xcc, 0x22, 0x30, 0x6, 0x14, 0x6a, 0x78, 0x4e, 0x5c, 0x1, 0x13, 0x25, 0x37, 0x49, 0x5b, 0x6d, 0x7f, 0x91, 0x83, 0xb5, 0xa7, 0xd9, 0xcb, 0xfd, 0xef, 0x3c, 0x2e, 0x18, 0xa, 0x74, 0x66, 0x50, 0x42, 0xac, 0xbe, 0x88, 0x9a, 0xe4, 0xf6, 0xc0, 0xd2, 0x7b, 0x69, 0x5f, 0x4d, 0x33, 0x21, 0x17, 0x5, 0xeb, 0xf9, 0xcf, 0xdd, 0xa3, 0xb1, 0x87, 0x95, 0x46, 0x54, 0x62, 0x70, 0xe, 0x1c, 0x2a, 0x38, 0xd6, 0xc4, 0xf2, 0xe0, 0x9e, 0x8c, 0xba, 0xa8}, + {0x0, 0x13, 0x26, 0x35, 0x4c, 0x5f, 0x6a, 0x79, 0x98, 0x8b, 0xbe, 0xad, 0xd4, 0xc7, 0xf2, 0xe1, 0x2d, 0x3e, 0xb, 0x18, 0x61, 0x72, 0x47, 0x54, 0xb5, 0xa6, 0x93, 0x80, 0xf9, 0xea, 0xdf, 0xcc, 0x5a, 0x49, 0x7c, 0x6f, 0x16, 0x5, 0x30, 0x23, 0xc2, 0xd1, 0xe4, 0xf7, 0x8e, 0x9d, 0xa8, 0xbb, 0x77, 0x64, 0x51, 0x42, 0x3b, 0x28, 0x1d, 0xe, 0xef, 0xfc, 0xc9, 0xda, 0xa3, 0xb0, 0x85, 0x96, 0xb4, 0xa7, 0x92, 0x81, 0xf8, 0xeb, 0xde, 0xcd, 0x2c, 0x3f, 0xa, 0x19, 0x60, 0x73, 0x46, 0x55, 0x99, 0x8a, 0xbf, 0xac, 0xd5, 0xc6, 0xf3, 0xe0, 0x1, 0x12, 0x27, 0x34, 0x4d, 0x5e, 0x6b, 0x78, 0xee, 0xfd, 0xc8, 0xdb, 0xa2, 0xb1, 0x84, 0x97, 0x76, 0x65, 0x50, 0x43, 0x3a, 0x29, 0x1c, 0xf, 0xc3, 0xd0, 0xe5, 0xf6, 0x8f, 0x9c, 0xa9, 0xba, 0x5b, 0x48, 0x7d, 0x6e, 0x17, 0x4, 0x31, 0x22, 0x75, 0x66, 0x53, 0x40, 0x39, 0x2a, 0x1f, 0xc, 0xed, 0xfe, 0xcb, 0xd8, 0xa1, 0xb2, 0x87, 0x94, 0x58, 0x4b, 0x7e, 0x6d, 0x14, 0x7, 0x32, 0x21, 0xc0, 0xd3, 0xe6, 0xf5, 0x8c, 0x9f, 0xaa, 0xb9, 0x2f, 0x3c, 0x9, 0x1a, 0x63, 0x70, 0x45, 0x56, 0xb7, 0xa4, 0x91, 0x82, 0xfb, 0xe8, 0xdd, 0xce, 0x2, 0x11, 0x24, 0x37, 0x4e, 0x5d, 0x68, 0x7b, 0x9a, 0x89, 0xbc, 0xaf, 0xd6, 0xc5, 0xf0, 0xe3, 0xc1, 0xd2, 0xe7, 0xf4, 0x8d, 0x9e, 0xab, 0xb8, 0x59, 0x4a, 0x7f, 0x6c, 0x15, 0x6, 0x33, 0x20, 0xec, 0xff, 0xca, 0xd9, 0xa0, 0xb3, 0x86, 0x95, 0x74, 0x67, 0x52, 0x41, 0x38, 0x2b, 0x1e, 0xd, 0x9b, 0x88, 0xbd, 0xae, 0xd7, 0xc4, 0xf1, 0xe2, 0x3, 0x10, 0x25, 0x36, 0x4f, 0x5c, 0x69, 0x7a, 0xb6, 0xa5, 0x90, 0x83, 0xfa, 0xe9, 0xdc, 0xcf, 0x2e, 0x3d, 0x8, 0x1b, 0x62, 0x71, 0x44, 0x57}, + {0x0, 0x14, 0x28, 0x3c, 0x50, 0x44, 0x78, 0x6c, 0xa0, 0xb4, 0x88, 0x9c, 0xf0, 0xe4, 0xd8, 0xcc, 0x5d, 0x49, 0x75, 0x61, 0xd, 0x19, 0x25, 0x31, 0xfd, 0xe9, 0xd5, 0xc1, 0xad, 0xb9, 0x85, 0x91, 0xba, 0xae, 0x92, 0x86, 0xea, 0xfe, 0xc2, 0xd6, 0x1a, 0xe, 0x32, 0x26, 0x4a, 0x5e, 0x62, 0x76, 0xe7, 0xf3, 0xcf, 0xdb, 0xb7, 0xa3, 0x9f, 0x8b, 0x47, 0x53, 0x6f, 0x7b, 0x17, 0x3, 0x3f, 0x2b, 0x69, 0x7d, 0x41, 0x55, 0x39, 0x2d, 0x11, 0x5, 0xc9, 0xdd, 0xe1, 0xf5, 0x99, 0x8d, 0xb1, 0xa5, 0x34, 0x20, 0x1c, 0x8, 0x64, 0x70, 0x4c, 0x58, 0x94, 0x80, 0xbc, 0xa8, 0xc4, 0xd0, 0xec, 0xf8, 0xd3, 0xc7, 0xfb, 0xef, 0x83, 0x97, 0xab, 0xbf, 0x73, 0x67, 0x5b, 0x4f, 0x23, 0x37, 0xb, 0x1f, 0x8e, 0x9a, 0xa6, 0xb2, 0xde, 0xca, 0xf6, 0xe2, 0x2e, 0x3a, 0x6, 0x12, 0x7e, 0x6a, 0x56, 0x42, 0xd2, 0xc6, 0xfa, 0xee, 0x82, 0x96, 0xaa, 0xbe, 0x72, 0x66, 0x5a, 0x4e, 0x22, 0x36, 0xa, 0x1e, 0x8f, 0x9b, 0xa7, 0xb3, 0xdf, 0xcb, 0xf7, 0xe3, 0x2f, 0x3b, 0x7, 0x13, 0x7f, 0x6b, 0x57, 0x43, 0x68, 0x7c, 0x40, 0x54, 0x38, 0x2c, 0x10, 0x4, 0xc8, 0xdc, 0xe0, 0xf4, 0x98, 0x8c, 0xb0, 0xa4, 0x35, 0x21, 0x1d, 0x9, 0x65, 0x71, 0x4d, 0x59, 0x95, 0x81, 0xbd, 0xa9, 0xc5, 0xd1, 0xed, 0xf9, 0xbb, 0xaf, 0x93, 0x87, 0xeb, 0xff, 0xc3, 0xd7, 0x1b, 0xf, 0x33, 0x27, 0x4b, 0x5f, 0x63, 0x77, 0xe6, 0xf2, 0xce, 0xda, 0xb6, 0xa2, 0x9e, 0x8a, 0x46, 0x52, 0x6e, 0x7a, 0x16, 0x2, 0x3e, 0x2a, 0x1, 0x15, 0x29, 0x3d, 0x51, 0x45, 0x79, 0x6d, 0xa1, 0xb5, 0x89, 0x9d, 0xf1, 0xe5, 0xd9, 0xcd, 0x5c, 0x48, 0x74, 0x60, 0xc, 0x18, 0x24, 0x30, 0xfc, 0xe8, 0xd4, 0xc0, 0xac, 0xb8, 0x84, 0x90}, + {0x0, 0x15, 0x2a, 0x3f, 0x54, 0x41, 0x7e, 0x6b, 0xa8, 0xbd, 0x82, 0x97, 0xfc, 0xe9, 0xd6, 0xc3, 0x4d, 0x58, 0x67, 0x72, 0x19, 0xc, 0x33, 0x26, 0xe5, 0xf0, 0xcf, 0xda, 0xb1, 0xa4, 0x9b, 0x8e, 0x9a, 0x8f, 0xb0, 0xa5, 0xce, 0xdb, 0xe4, 0xf1, 0x32, 0x27, 0x18, 0xd, 0x66, 0x73, 0x4c, 0x59, 0xd7, 0xc2, 0xfd, 0xe8, 0x83, 0x96, 0xa9, 0xbc, 0x7f, 0x6a, 0x55, 0x40, 0x2b, 0x3e, 0x1, 0x14, 0x29, 0x3c, 0x3, 0x16, 0x7d, 0x68, 0x57, 0x42, 0x81, 0x94, 0xab, 0xbe, 0xd5, 0xc0, 0xff, 0xea, 0x64, 0x71, 0x4e, 0x5b, 0x30, 0x25, 0x1a, 0xf, 0xcc, 0xd9, 0xe6, 0xf3, 0x98, 0x8d, 0xb2, 0xa7, 0xb3, 0xa6, 0x99, 0x8c, 0xe7, 0xf2, 0xcd, 0xd8, 0x1b, 0xe, 0x31, 0x24, 0x4f, 0x5a, 0x65, 0x70, 0xfe, 0xeb, 0xd4, 0xc1, 0xaa, 0xbf, 0x80, 0x95, 0x56, 0x43, 0x7c, 0x69, 0x2, 0x17, 0x28, 0x3d, 0x52, 0x47, 0x78, 0x6d, 0x6, 0x13, 0x2c, 0x39, 0xfa, 0xef, 0xd0, 0xc5, 0xae, 0xbb, 0x84, 0x91, 0x1f, 0xa, 0x35, 0x20, 0x4b, 0x5e, 0x61, 0x74, 0xb7, 0xa2, 0x9d, 0x88, 0xe3, 0xf6, 0xc9, 0xdc, 0xc8, 0xdd, 0xe2, 0xf7, 0x9c, 0x89, 0xb6, 0xa3, 0x60, 0x75, 0x4a, 0x5f, 0x34, 0x21, 0x1e, 0xb, 0x85, 0x90, 0xaf, 0xba, 0xd1, 0xc4, 0xfb, 0xee, 0x2d, 0x38, 0x7, 0x12, 0x79, 0x6c, 0x53, 0x46, 0x7b, 0x6e, 0x51, 0x44, 0x2f, 0x3a, 0x5, 0x10, 0xd3, 0xc6, 0xf9, 0xec, 0x87, 0x92, 0xad, 0xb8, 0x36, 0x23, 0x1c, 0x9, 0x62, 0x77, 0x48, 0x5d, 0x9e, 0x8b, 0xb4, 0xa1, 0xca, 0xdf, 0xe0, 0xf5, 0xe1, 0xf4, 0xcb, 0xde, 0xb5, 0xa0, 0x9f, 0x8a, 0x49, 0x5c, 0x63, 0x76, 0x1d, 0x8, 0x37, 0x22, 0xac, 0xb9, 0x86, 0x93, 0xf8, 0xed, 0xd2, 0xc7, 0x4, 0x11, 0x2e, 0x3b, 0x50, 0x45, 0x7a, 0x6f}, + {0x0, 0x16, 0x2c, 0x3a, 0x58, 0x4e, 0x74, 0x62, 0xb0, 0xa6, 0x9c, 0x8a, 0xe8, 0xfe, 0xc4, 0xd2, 0x7d, 0x6b, 0x51, 0x47, 0x25, 0x33, 0x9, 0x1f, 0xcd, 0xdb, 0xe1, 0xf7, 0x95, 0x83, 0xb9, 0xaf, 0xfa, 0xec, 0xd6, 0xc0, 0xa2, 0xb4, 0x8e, 0x98, 0x4a, 0x5c, 0x66, 0x70, 0x12, 0x4, 0x3e, 0x28, 0x87, 0x91, 0xab, 0xbd, 0xdf, 0xc9, 0xf3, 0xe5, 0x37, 0x21, 0x1b, 0xd, 0x6f, 0x79, 0x43, 0x55, 0xe9, 0xff, 0xc5, 0xd3, 0xb1, 0xa7, 0x9d, 0x8b, 0x59, 0x4f, 0x75, 0x63, 0x1, 0x17, 0x2d, 0x3b, 0x94, 0x82, 0xb8, 0xae, 0xcc, 0xda, 0xe0, 0xf6, 0x24, 0x32, 0x8, 0x1e, 0x7c, 0x6a, 0x50, 0x46, 0x13, 0x5, 0x3f, 0x29, 0x4b, 0x5d, 0x67, 0x71, 0xa3, 0xb5, 0x8f, 0x99, 0xfb, 0xed, 0xd7, 0xc1, 0x6e, 0x78, 0x42, 0x54, 0x36, 0x20, 0x1a, 0xc, 0xde, 0xc8, 0xf2, 0xe4, 0x86, 0x90, 0xaa, 0xbc, 0xcf, 0xd9, 0xe3, 0xf5, 0x97, 0x81, 0xbb, 0xad, 0x7f, 0x69, 0x53, 0x45, 0x27, 0x31, 0xb, 0x1d, 0xb2, 0xa4, 0x9e, 0x88, 0xea, 0xfc, 0xc6, 0xd0, 0x2, 0x14, 0x2e, 0x38, 0x5a, 0x4c, 0x76, 0x60, 0x35, 0x23, 0x19, 0xf, 0x6d, 0x7b, 0x41, 0x57, 0x85, 0x93, 0xa9, 0xbf, 0xdd, 0xcb, 0xf1, 0xe7, 0x48, 0x5e, 0x64, 0x72, 0x10, 0x6, 0x3c, 0x2a, 0xf8, 0xee, 0xd4, 0xc2, 0xa0, 0xb6, 0x8c, 0x9a, 0x26, 0x30, 0xa, 0x1c, 0x7e, 0x68, 0x52, 0x44, 0x96, 0x80, 0xba, 0xac, 0xce, 0xd8, 0xe2, 0xf4, 0x5b, 0x4d, 0x77, 0x61, 0x3, 0x15, 0x2f, 0x39, 0xeb, 0xfd, 0xc7, 0xd1, 0xb3, 0xa5, 0x9f, 0x89, 0xdc, 0xca, 0xf0, 0xe6, 0x84, 0x92, 0xa8, 0xbe, 0x6c, 0x7a, 0x40, 0x56, 0x34, 0x22, 0x18, 0xe, 0xa1, 0xb7, 0x8d, 0x9b, 0xf9, 0xef, 0xd5, 0xc3, 0x11, 0x7, 0x3d, 0x2b, 0x49, 0x5f, 0x65, 0x73}, + {0x0, 0x17, 0x2e, 0x39, 0x5c, 0x4b, 0x72, 0x65, 0xb8, 0xaf, 0x96, 0x81, 0xe4, 0xf3, 0xca, 0xdd, 0x6d, 0x7a, 0x43, 0x54, 0x31, 0x26, 0x1f, 0x8, 0xd5, 0xc2, 0xfb, 0xec, 0x89, 0x9e, 0xa7, 0xb0, 0xda, 0xcd, 0xf4, 0xe3, 0x86, 0x91, 0xa8, 0xbf, 0x62, 0x75, 0x4c, 0x5b, 0x3e, 0x29, 0x10, 0x7, 0xb7, 0xa0, 0x99, 0x8e, 0xeb, 0xfc, 0xc5, 0xd2, 0xf, 0x18, 0x21, 0x36, 0x53, 0x44, 0x7d, 0x6a, 0xa9, 0xbe, 0x87, 0x90, 0xf5, 0xe2, 0xdb, 0xcc, 0x11, 0x6, 0x3f, 0x28, 0x4d, 0x5a, 0x63, 0x74, 0xc4, 0xd3, 0xea, 0xfd, 0x98, 0x8f, 0xb6, 0xa1, 0x7c, 0x6b, 0x52, 0x45, 0x20, 0x37, 0xe, 0x19, 0x73, 0x64, 0x5d, 0x4a, 0x2f, 0x38, 0x1, 0x16, 0xcb, 0xdc, 0xe5, 0xf2, 0x97, 0x80, 0xb9, 0xae, 0x1e, 0x9, 0x30, 0x27, 0x42, 0x55, 0x6c, 0x7b, 0xa6, 0xb1, 0x88, 0x9f, 0xfa, 0xed, 0xd4, 0xc3, 0x4f, 0x58, 0x61, 0x76, 0x13, 0x4, 0x3d, 0x2a, 0xf7, 0xe0, 0xd9, 0xce, 0xab, 0xbc, 0x85, 0x92, 0x22, 0x35, 0xc, 0x1b, 0x7e, 0x69, 0x50, 0x47, 0x9a, 0x8d, 0xb4, 0xa3, 0xc6, 0xd1, 0xe8, 0xff, 0x95, 0x82, 0xbb, 0xac, 0xc9, 0xde, 0xe7, 0xf0, 0x2d, 0x3a, 0x3, 0x14, 0x71, 0x66, 0x5f, 0x48, 0xf8, 0xef, 0xd6, 0xc1, 0xa4, 0xb3, 0x8a, 0x9d, 0x40, 0x57, 0x6e, 0x79, 0x1c, 0xb, 0x32, 0x25, 0xe6, 0xf1, 0xc8, 0xdf, 0xba, 0xad, 0x94, 0x83, 0x5e, 0x49, 0x70, 0x67, 0x2, 0x15, 0x2c, 0x3b, 0x8b, 0x9c, 0xa5, 0xb2, 0xd7, 0xc0, 0xf9, 0xee, 0x33, 0x24, 0x1d, 0xa, 0x6f, 0x78, 0x41, 0x56, 0x3c, 0x2b, 0x12, 0x5, 0x60, 0x77, 0x4e, 0x59, 0x84, 0x93, 0xaa, 0xbd, 0xd8, 0xcf, 0xf6, 0xe1, 0x51, 0x46, 0x7f, 0x68, 0xd, 0x1a, 0x23, 0x34, 0xe9, 0xfe, 0xc7, 0xd0, 0xb5, 0xa2, 0x9b, 0x8c}, + {0x0, 0x18, 0x30, 0x28, 0x60, 0x78, 0x50, 0x48, 0xc0, 0xd8, 0xf0, 0xe8, 0xa0, 0xb8, 0x90, 0x88, 0x9d, 0x85, 0xad, 0xb5, 0xfd, 0xe5, 0xcd, 0xd5, 0x5d, 0x45, 0x6d, 0x75, 0x3d, 0x25, 0xd, 0x15, 0x27, 0x3f, 0x17, 0xf, 0x47, 0x5f, 0x77, 0x6f, 0xe7, 0xff, 0xd7, 0xcf, 0x87, 0x9f, 0xb7, 0xaf, 0xba, 0xa2, 0x8a, 0x92, 0xda, 0xc2, 0xea, 0xf2, 0x7a, 0x62, 0x4a, 0x52, 0x1a, 0x2, 0x2a, 0x32, 0x4e, 0x56, 0x7e, 0x66, 0x2e, 0x36, 0x1e, 0x6, 0x8e, 0x96, 0xbe, 0xa6, 0xee, 0xf6, 0xde, 0xc6, 0xd3, 0xcb, 0xe3, 0xfb, 0xb3, 0xab, 0x83, 0x9b, 0x13, 0xb, 0x23, 0x3b, 0x73, 0x6b, 0x43, 0x5b, 0x69, 0x71, 0x59, 0x41, 0x9, 0x11, 0x39, 0x21, 0xa9, 0xb1, 0x99, 0x81, 0xc9, 0xd1, 0xf9, 0xe1, 0xf4, 0xec, 0xc4, 0xdc, 0x94, 0x8c, 0xa4, 0xbc, 0x34, 0x2c, 0x4, 0x1c, 0x54, 0x4c, 0x64, 0x7c, 0x9c, 0x84, 0xac, 0xb4, 0xfc, 0xe4, 0xcc, 0xd4, 0x5c, 0x44, 0x6c, 0x74, 0x3c, 0x24, 0xc, 0x14, 0x1, 0x19, 0x31, 0x29, 0x61, 0x79, 0x51, 0x49, 0xc1, 0xd9, 0xf1, 0xe9, 0xa1, 0xb9, 0x91, 0x89, 0xbb, 0xa3, 0x8b, 0x93, 0xdb, 0xc3, 0xeb, 0xf3, 0x7b, 0x63, 0x4b, 0x53, 0x1b, 0x3, 0x2b, 0x33, 0x26, 0x3e, 0x16, 0xe, 0x46, 0x5e, 0x76, 0x6e, 0xe6, 0xfe, 0xd6, 0xce, 0x86, 0x9e, 0xb6, 0xae, 0xd2, 0xca, 0xe2, 0xfa, 0xb2, 0xaa, 0x82, 0x9a, 0x12, 0xa, 0x22, 0x3a, 0x72, 0x6a, 0x42, 0x5a, 0x4f, 0x57, 0x7f, 0x67, 0x2f, 0x37, 0x1f, 0x7, 0x8f, 0x97, 0xbf, 0xa7, 0xef, 0xf7, 0xdf, 0xc7, 0xf5, 0xed, 0xc5, 0xdd, 0x95, 0x8d, 0xa5, 0xbd, 0x35, 0x2d, 0x5, 0x1d, 0x55, 0x4d, 0x65, 0x7d, 0x68, 0x70, 0x58, 0x40, 0x8, 0x10, 0x38, 0x20, 0xa8, 0xb0, 0x98, 0x80, 0xc8, 0xd0, 0xf8, 0xe0}, + {0x0, 0x19, 0x32, 0x2b, 0x64, 0x7d, 0x56, 0x4f, 0xc8, 0xd1, 0xfa, 0xe3, 0xac, 0xb5, 0x9e, 0x87, 0x8d, 0x94, 0xbf, 0xa6, 0xe9, 0xf0, 0xdb, 0xc2, 0x45, 0x5c, 0x77, 0x6e, 0x21, 0x38, 0x13, 0xa, 0x7, 0x1e, 0x35, 0x2c, 0x63, 0x7a, 0x51, 0x48, 0xcf, 0xd6, 0xfd, 0xe4, 0xab, 0xb2, 0x99, 0x80, 0x8a, 0x93, 0xb8, 0xa1, 0xee, 0xf7, 0xdc, 0xc5, 0x42, 0x5b, 0x70, 0x69, 0x26, 0x3f, 0x14, 0xd, 0xe, 0x17, 0x3c, 0x25, 0x6a, 0x73, 0x58, 0x41, 0xc6, 0xdf, 0xf4, 0xed, 0xa2, 0xbb, 0x90, 0x89, 0x83, 0x9a, 0xb1, 0xa8, 0xe7, 0xfe, 0xd5, 0xcc, 0x4b, 0x52, 0x79, 0x60, 0x2f, 0x36, 0x1d, 0x4, 0x9, 0x10, 0x3b, 0x22, 0x6d, 0x74, 0x5f, 0x46, 0xc1, 0xd8, 0xf3, 0xea, 0xa5, 0xbc, 0x97, 0x8e, 0x84, 0x9d, 0xb6, 0xaf, 0xe0, 0xf9, 0xd2, 0xcb, 0x4c, 0x55, 0x7e, 0x67, 0x28, 0x31, 0x1a, 0x3, 0x1c, 0x5, 0x2e, 0x37, 0x78, 0x61, 0x4a, 0x53, 0xd4, 0xcd, 0xe6, 0xff, 0xb0, 0xa9, 0x82, 0x9b, 0x91, 0x88, 0xa3, 0xba, 0xf5, 0xec, 0xc7, 0xde, 0x59, 0x40, 0x6b, 0x72, 0x3d, 0x24, 0xf, 0x16, 0x1b, 0x2, 0x29, 0x30, 0x7f, 0x66, 0x4d, 0x54, 0xd3, 0xca, 0xe1, 0xf8, 0xb7, 0xae, 0x85, 0x9c, 0x96, 0x8f, 0xa4, 0xbd, 0xf2, 0xeb, 0xc0, 0xd9, 0x5e, 0x47, 0x6c, 0x75, 0x3a, 0x23, 0x8, 0x11, 0x12, 0xb, 0x20, 0x39, 0x76, 0x6f, 0x44, 0x5d, 0xda, 0xc3, 0xe8, 0xf1, 0xbe, 0xa7, 0x8c, 0x95, 0x9f, 0x86, 0xad, 0xb4, 0xfb, 0xe2, 0xc9, 0xd0, 0x57, 0x4e, 0x65, 0x7c, 0x33, 0x2a, 0x1, 0x18, 0x15, 0xc, 0x27, 0x3e, 0x71, 0x68, 0x43, 0x5a, 0xdd, 0xc4, 0xef, 0xf6, 0xb9, 0xa0, 0x8b, 0x92, 0x98, 0x81, 0xaa, 0xb3, 0xfc, 0xe5, 0xce, 0xd7, 0x50, 0x49, 0x62, 0x7b, 0x34, 0x2d, 0x6, 0x1f}, + {0x0, 0x1a, 0x34, 0x2e, 0x68, 0x72, 0x5c, 0x46, 0xd0, 0xca, 0xe4, 0xfe, 0xb8, 0xa2, 0x8c, 0x96, 0xbd, 0xa7, 0x89, 0x93, 0xd5, 0xcf, 0xe1, 0xfb, 0x6d, 0x77, 0x59, 0x43, 0x5, 0x1f, 0x31, 0x2b, 0x67, 0x7d, 0x53, 0x49, 0xf, 0x15, 0x3b, 0x21, 0xb7, 0xad, 0x83, 0x99, 0xdf, 0xc5, 0xeb, 0xf1, 0xda, 0xc0, 0xee, 0xf4, 0xb2, 0xa8, 0x86, 0x9c, 0xa, 0x10, 0x3e, 0x24, 0x62, 0x78, 0x56, 0x4c, 0xce, 0xd4, 0xfa, 0xe0, 0xa6, 0xbc, 0x92, 0x88, 0x1e, 0x4, 0x2a, 0x30, 0x76, 0x6c, 0x42, 0x58, 0x73, 0x69, 0x47, 0x5d, 0x1b, 0x1, 0x2f, 0x35, 0xa3, 0xb9, 0x97, 0x8d, 0xcb, 0xd1, 0xff, 0xe5, 0xa9, 0xb3, 0x9d, 0x87, 0xc1, 0xdb, 0xf5, 0xef, 0x79, 0x63, 0x4d, 0x57, 0x11, 0xb, 0x25, 0x3f, 0x14, 0xe, 0x20, 0x3a, 0x7c, 0x66, 0x48, 0x52, 0xc4, 0xde, 0xf0, 0xea, 0xac, 0xb6, 0x98, 0x82, 0x81, 0x9b, 0xb5, 0xaf, 0xe9, 0xf3, 0xdd, 0xc7, 0x51, 0x4b, 0x65, 0x7f, 0x39, 0x23, 0xd, 0x17, 0x3c, 0x26, 0x8, 0x12, 0x54, 0x4e, 0x60, 0x7a, 0xec, 0xf6, 0xd8, 0xc2, 0x84, 0x9e, 0xb0, 0xaa, 0xe6, 0xfc, 0xd2, 0xc8, 0x8e, 0x94, 0xba, 0xa0, 0x36, 0x2c, 0x2, 0x18, 0x5e, 0x44, 0x6a, 0x70, 0x5b, 0x41, 0x6f, 0x75, 0x33, 0x29, 0x7, 0x1d, 0x8b, 0x91, 0xbf, 0xa5, 0xe3, 0xf9, 0xd7, 0xcd, 0x4f, 0x55, 0x7b, 0x61, 0x27, 0x3d, 0x13, 0x9, 0x9f, 0x85, 0xab, 0xb1, 0xf7, 0xed, 0xc3, 0xd9, 0xf2, 0xe8, 0xc6, 0xdc, 0x9a, 0x80, 0xae, 0xb4, 0x22, 0x38, 0x16, 0xc, 0x4a, 0x50, 0x7e, 0x64, 0x28, 0x32, 0x1c, 0x6, 0x40, 0x5a, 0x74, 0x6e, 0xf8, 0xe2, 0xcc, 0xd6, 0x90, 0x8a, 0xa4, 0xbe, 0x95, 0x8f, 0xa1, 0xbb, 0xfd, 0xe7, 0xc9, 0xd3, 0x45, 0x5f, 0x71, 0x6b, 0x2d, 0x37, 0x19, 0x3}, + {0x0, 0x1b, 0x36, 0x2d, 0x6c, 0x77, 0x5a, 0x41, 0xd8, 0xc3, 0xee, 0xf5, 0xb4, 0xaf, 0x82, 0x99, 0xad, 0xb6, 0x9b, 0x80, 0xc1, 0xda, 0xf7, 0xec, 0x75, 0x6e, 0x43, 0x58, 0x19, 0x2, 0x2f, 0x34, 0x47, 0x5c, 0x71, 0x6a, 0x2b, 0x30, 0x1d, 0x6, 0x9f, 0x84, 0xa9, 0xb2, 0xf3, 0xe8, 0xc5, 0xde, 0xea, 0xf1, 0xdc, 0xc7, 0x86, 0x9d, 0xb0, 0xab, 0x32, 0x29, 0x4, 0x1f, 0x5e, 0x45, 0x68, 0x73, 0x8e, 0x95, 0xb8, 0xa3, 0xe2, 0xf9, 0xd4, 0xcf, 0x56, 0x4d, 0x60, 0x7b, 0x3a, 0x21, 0xc, 0x17, 0x23, 0x38, 0x15, 0xe, 0x4f, 0x54, 0x79, 0x62, 0xfb, 0xe0, 0xcd, 0xd6, 0x97, 0x8c, 0xa1, 0xba, 0xc9, 0xd2, 0xff, 0xe4, 0xa5, 0xbe, 0x93, 0x88, 0x11, 0xa, 0x27, 0x3c, 0x7d, 0x66, 0x4b, 0x50, 0x64, 0x7f, 0x52, 0x49, 0x8, 0x13, 0x3e, 0x25, 0xbc, 0xa7, 0x8a, 0x91, 0xd0, 0xcb, 0xe6, 0xfd, 0x1, 0x1a, 0x37, 0x2c, 0x6d, 0x76, 0x5b, 0x40, 0xd9, 0xc2, 0xef, 0xf4, 0xb5, 0xae, 0x83, 0x98, 0xac, 0xb7, 0x9a, 0x81, 0xc0, 0xdb, 0xf6, 0xed, 0x74, 0x6f, 0x42, 0x59, 0x18, 0x3, 0x2e, 0x35, 0x46, 0x5d, 0x70, 0x6b, 0x2a, 0x31, 0x1c, 0x7, 0x9e, 0x85, 0xa8, 0xb3, 0xf2, 0xe9, 0xc4, 0xdf, 0xeb, 0xf0, 0xdd, 0xc6, 0x87, 0x9c, 0xb1, 0xaa, 0x33, 0x28, 0x5, 0x1e, 0x5f, 0x44, 0x69, 0x72, 0x8f, 0x94, 0xb9, 0xa2, 0xe3, 0xf8, 0xd5, 0xce, 0x57, 0x4c, 0x61, 0x7a, 0x3b, 0x20, 0xd, 0x16, 0x22, 0x39, 0x14, 0xf, 0x4e, 0x55, 0x78, 0x63, 0xfa, 0xe1, 0xcc, 0xd7, 0x96, 0x8d, 0xa0, 0xbb, 0xc8, 0xd3, 0xfe, 0xe5, 0xa4, 0xbf, 0x92, 0x89, 0x10, 0xb, 0x26, 0x3d, 0x7c, 0x67, 0x4a, 0x51, 0x65, 0x7e, 0x53, 0x48, 0x9, 0x12, 0x3f, 0x24, 0xbd, 0xa6, 0x8b, 0x90, 0xd1, 0xca, 0xe7, 0xfc}, + {0x0, 0x1c, 0x38, 0x24, 0x70, 0x6c, 0x48, 0x54, 0xe0, 0xfc, 0xd8, 0xc4, 0x90, 0x8c, 0xa8, 0xb4, 0xdd, 0xc1, 0xe5, 0xf9, 0xad, 0xb1, 0x95, 0x89, 0x3d, 0x21, 0x5, 0x19, 0x4d, 0x51, 0x75, 0x69, 0xa7, 0xbb, 0x9f, 0x83, 0xd7, 0xcb, 0xef, 0xf3, 0x47, 0x5b, 0x7f, 0x63, 0x37, 0x2b, 0xf, 0x13, 0x7a, 0x66, 0x42, 0x5e, 0xa, 0x16, 0x32, 0x2e, 0x9a, 0x86, 0xa2, 0xbe, 0xea, 0xf6, 0xd2, 0xce, 0x53, 0x4f, 0x6b, 0x77, 0x23, 0x3f, 0x1b, 0x7, 0xb3, 0xaf, 0x8b, 0x97, 0xc3, 0xdf, 0xfb, 0xe7, 0x8e, 0x92, 0xb6, 0xaa, 0xfe, 0xe2, 0xc6, 0xda, 0x6e, 0x72, 0x56, 0x4a, 0x1e, 0x2, 0x26, 0x3a, 0xf4, 0xe8, 0xcc, 0xd0, 0x84, 0x98, 0xbc, 0xa0, 0x14, 0x8, 0x2c, 0x30, 0x64, 0x78, 0x5c, 0x40, 0x29, 0x35, 0x11, 0xd, 0x59, 0x45, 0x61, 0x7d, 0xc9, 0xd5, 0xf1, 0xed, 0xb9, 0xa5, 0x81, 0x9d, 0xa6, 0xba, 0x9e, 0x82, 0xd6, 0xca, 0xee, 0xf2, 0x46, 0x5a, 0x7e, 0x62, 0x36, 0x2a, 0xe, 0x12, 0x7b, 0x67, 0x43, 0x5f, 0xb, 0x17, 0x33, 0x2f, 0x9b, 0x87, 0xa3, 0xbf, 0xeb, 0xf7, 0xd3, 0xcf, 0x1, 0x1d, 0x39, 0x25, 0x71, 0x6d, 0x49, 0x55, 0xe1, 0xfd, 0xd9, 0xc5, 0x91, 0x8d, 0xa9, 0xb5, 0xdc, 0xc0, 0xe4, 0xf8, 0xac, 0xb0, 0x94, 0x88, 0x3c, 0x20, 0x4, 0x18, 0x4c, 0x50, 0x74, 0x68, 0xf5, 0xe9, 0xcd, 0xd1, 0x85, 0x99, 0xbd, 0xa1, 0x15, 0x9, 0x2d, 0x31, 0x65, 0x79, 0x5d, 0x41, 0x28, 0x34, 0x10, 0xc, 0x58, 0x44, 0x60, 0x7c, 0xc8, 0xd4, 0xf0, 0xec, 0xb8, 0xa4, 0x80, 0x9c, 0x52, 0x4e, 0x6a, 0x76, 0x22, 0x3e, 0x1a, 0x6, 0xb2, 0xae, 0x8a, 0x96, 0xc2, 0xde, 0xfa, 0xe6, 0x8f, 0x93, 0xb7, 0xab, 0xff, 0xe3, 0xc7, 0xdb, 0x6f, 0x73, 0x57, 0x4b, 0x1f, 0x3, 0x27, 0x3b}, + {0x0, 0x1d, 0x3a, 0x27, 0x74, 0x69, 0x4e, 0x53, 0xe8, 0xf5, 0xd2, 0xcf, 0x9c, 0x81, 0xa6, 0xbb, 0xcd, 0xd0, 0xf7, 0xea, 0xb9, 0xa4, 0x83, 0x9e, 0x25, 0x38, 0x1f, 0x2, 0x51, 0x4c, 0x6b, 0x76, 0x87, 0x9a, 0xbd, 0xa0, 0xf3, 0xee, 0xc9, 0xd4, 0x6f, 0x72, 0x55, 0x48, 0x1b, 0x6, 0x21, 0x3c, 0x4a, 0x57, 0x70, 0x6d, 0x3e, 0x23, 0x4, 0x19, 0xa2, 0xbf, 0x98, 0x85, 0xd6, 0xcb, 0xec, 0xf1, 0x13, 0xe, 0x29, 0x34, 0x67, 0x7a, 0x5d, 0x40, 0xfb, 0xe6, 0xc1, 0xdc, 0x8f, 0x92, 0xb5, 0xa8, 0xde, 0xc3, 0xe4, 0xf9, 0xaa, 0xb7, 0x90, 0x8d, 0x36, 0x2b, 0xc, 0x11, 0x42, 0x5f, 0x78, 0x65, 0x94, 0x89, 0xae, 0xb3, 0xe0, 0xfd, 0xda, 0xc7, 0x7c, 0x61, 0x46, 0x5b, 0x8, 0x15, 0x32, 0x2f, 0x59, 0x44, 0x63, 0x7e, 0x2d, 0x30, 0x17, 0xa, 0xb1, 0xac, 0x8b, 0x96, 0xc5, 0xd8, 0xff, 0xe2, 0x26, 0x3b, 0x1c, 0x1, 0x52, 0x4f, 0x68, 0x75, 0xce, 0xd3, 0xf4, 0xe9, 0xba, 0xa7, 0x80, 0x9d, 0xeb, 0xf6, 0xd1, 0xcc, 0x9f, 0x82, 0xa5, 0xb8, 0x3, 0x1e, 0x39, 0x24, 0x77, 0x6a, 0x4d, 0x50, 0xa1, 0xbc, 0x9b, 0x86, 0xd5, 0xc8, 0xef, 0xf2, 0x49, 0x54, 0x73, 0x6e, 0x3d, 0x20, 0x7, 0x1a, 0x6c, 0x71, 0x56, 0x4b, 0x18, 0x5, 0x22, 0x3f, 0x84, 0x99, 0xbe, 0xa3, 0xf0, 0xed, 0xca, 0xd7, 0x35, 0x28, 0xf, 0x12, 0x41, 0x5c, 0x7b, 0x66, 0xdd, 0xc0, 0xe7, 0xfa, 0xa9, 0xb4, 0x93, 0x8e, 0xf8, 0xe5, 0xc2, 0xdf, 0x8c, 0x91, 0xb6, 0xab, 0x10, 0xd, 0x2a, 0x37, 0x64, 0x79, 0x5e, 0x43, 0xb2, 0xaf, 0x88, 0x95, 0xc6, 0xdb, 0xfc, 0xe1, 0x5a, 0x47, 0x60, 0x7d, 0x2e, 0x33, 0x14, 0x9, 0x7f, 0x62, 0x45, 0x58, 0xb, 0x16, 0x31, 0x2c, 0x97, 0x8a, 0xad, 0xb0, 0xe3, 0xfe, 0xd9, 0xc4}, + {0x0, 0x1e, 0x3c, 0x22, 0x78, 0x66, 0x44, 0x5a, 0xf0, 0xee, 0xcc, 0xd2, 0x88, 0x96, 0xb4, 0xaa, 0xfd, 0xe3, 0xc1, 0xdf, 0x85, 0x9b, 0xb9, 0xa7, 0xd, 0x13, 0x31, 0x2f, 0x75, 0x6b, 0x49, 0x57, 0xe7, 0xf9, 0xdb, 0xc5, 0x9f, 0x81, 0xa3, 0xbd, 0x17, 0x9, 0x2b, 0x35, 0x6f, 0x71, 0x53, 0x4d, 0x1a, 0x4, 0x26, 0x38, 0x62, 0x7c, 0x5e, 0x40, 0xea, 0xf4, 0xd6, 0xc8, 0x92, 0x8c, 0xae, 0xb0, 0xd3, 0xcd, 0xef, 0xf1, 0xab, 0xb5, 0x97, 0x89, 0x23, 0x3d, 0x1f, 0x1, 0x5b, 0x45, 0x67, 0x79, 0x2e, 0x30, 0x12, 0xc, 0x56, 0x48, 0x6a, 0x74, 0xde, 0xc0, 0xe2, 0xfc, 0xa6, 0xb8, 0x9a, 0x84, 0x34, 0x2a, 0x8, 0x16, 0x4c, 0x52, 0x70, 0x6e, 0xc4, 0xda, 0xf8, 0xe6, 0xbc, 0xa2, 0x80, 0x9e, 0xc9, 0xd7, 0xf5, 0xeb, 0xb1, 0xaf, 0x8d, 0x93, 0x39, 0x27, 0x5, 0x1b, 0x41, 0x5f, 0x7d, 0x63, 0xbb, 0xa5, 0x87, 0x99, 0xc3, 0xdd, 0xff, 0xe1, 0x4b, 0x55, 0x77, 0x69, 0x33, 0x2d, 0xf, 0x11, 0x46, 0x58, 0x7a, 0x64, 0x3e, 0x20, 0x2, 0x1c, 0xb6, 0xa8, 0x8a, 0x94, 0xce, 0xd0, 0xf2, 0xec, 0x5c, 0x42, 0x60, 0x7e, 0x24, 0x3a, 0x18, 0x6, 0xac, 0xb2, 0x90, 0x8e, 0xd4, 0xca, 0xe8, 0xf6, 0xa1, 0xbf, 0x9d, 0x83, 0xd9, 0xc7, 0xe5, 0xfb, 0x51, 0x4f, 0x6d, 0x73, 0x29, 0x37, 0x15, 0xb, 0x68, 0x76, 0x54, 0x4a, 0x10, 0xe, 0x2c, 0x32, 0x98, 0x86, 0xa4, 0xba, 0xe0, 0xfe, 0xdc, 0xc2, 0x95, 0x8b, 0xa9, 0xb7, 0xed, 0xf3, 0xd1, 0xcf, 0x65, 0x7b, 0x59, 0x47, 0x1d, 0x3, 0x21, 0x3f, 0x8f, 0x91, 0xb3, 0xad, 0xf7, 0xe9, 0xcb, 0xd5, 0x7f, 0x61, 0x43, 0x5d, 0x7, 0x19, 0x3b, 0x25, 0x72, 0x6c, 0x4e, 0x50, 0xa, 0x14, 0x36, 0x28, 0x82, 0x9c, 0xbe, 0xa0, 0xfa, 0xe4, 0xc6, 0xd8}, + {0x0, 0x1f, 0x3e, 0x21, 0x7c, 0x63, 0x42, 0x5d, 0xf8, 0xe7, 0xc6, 0xd9, 0x84, 0x9b, 0xba, 0xa5, 0xed, 0xf2, 0xd3, 0xcc, 0x91, 0x8e, 0xaf, 0xb0, 0x15, 0xa, 0x2b, 0x34, 0x69, 0x76, 0x57, 0x48, 0xc7, 0xd8, 0xf9, 0xe6, 0xbb, 0xa4, 0x85, 0x9a, 0x3f, 0x20, 0x1, 0x1e, 0x43, 0x5c, 0x7d, 0x62, 0x2a, 0x35, 0x14, 0xb, 0x56, 0x49, 0x68, 0x77, 0xd2, 0xcd, 0xec, 0xf3, 0xae, 0xb1, 0x90, 0x8f, 0x93, 0x8c, 0xad, 0xb2, 0xef, 0xf0, 0xd1, 0xce, 0x6b, 0x74, 0x55, 0x4a, 0x17, 0x8, 0x29, 0x36, 0x7e, 0x61, 0x40, 0x5f, 0x2, 0x1d, 0x3c, 0x23, 0x86, 0x99, 0xb8, 0xa7, 0xfa, 0xe5, 0xc4, 0xdb, 0x54, 0x4b, 0x6a, 0x75, 0x28, 0x37, 0x16, 0x9, 0xac, 0xb3, 0x92, 0x8d, 0xd0, 0xcf, 0xee, 0xf1, 0xb9, 0xa6, 0x87, 0x98, 0xc5, 0xda, 0xfb, 0xe4, 0x41, 0x5e, 0x7f, 0x60, 0x3d, 0x22, 0x3, 0x1c, 0x3b, 0x24, 0x5, 0x1a, 0x47, 0x58, 0x79, 0x66, 0xc3, 0xdc, 0xfd, 0xe2, 0xbf, 0xa0, 0x81, 0x9e, 0xd6, 0xc9, 0xe8, 0xf7, 0xaa, 0xb5, 0x94, 0x8b, 0x2e, 0x31, 0x10, 0xf, 0x52, 0x4d, 0x6c, 0x73, 0xfc, 0xe3, 0xc2, 0xdd, 0x80, 0x9f, 0xbe, 0xa1, 0x4, 0x1b, 0x3a, 0x25, 0x78, 0x67, 0x46, 0x59, 0x11, 0xe, 0x2f, 0x30, 0x6d, 0x72, 0x53, 0x4c, 0xe9, 0xf6, 0xd7, 0xc8, 0x95, 0x8a, 0xab, 0xb4, 0xa8, 0xb7, 0x96, 0x89, 0xd4, 0xcb, 0xea, 0xf5, 0x50, 0x4f, 0x6e, 0x71, 0x2c, 0x33, 0x12, 0xd, 0x45, 0x5a, 0x7b, 0x64, 0x39, 0x26, 0x7, 0x18, 0xbd, 0xa2, 0x83, 0x9c, 0xc1, 0xde, 0xff, 0xe0, 0x6f, 0x70, 0x51, 0x4e, 0x13, 0xc, 0x2d, 0x32, 0x97, 0x88, 0xa9, 0xb6, 0xeb, 0xf4, 0xd5, 0xca, 0x82, 0x9d, 0xbc, 0xa3, 0xfe, 0xe1, 0xc0, 0xdf, 0x7a, 0x65, 0x44, 0x5b, 0x6, 0x19, 0x38, 0x27}, + {0x0, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, 0x1d, 0x3d, 0x5d, 0x7d, 0x9d, 0xbd, 0xdd, 0xfd, 0x3a, 0x1a, 0x7a, 0x5a, 0xba, 0x9a, 0xfa, 0xda, 0x27, 0x7, 0x67, 0x47, 0xa7, 0x87, 0xe7, 0xc7, 0x74, 0x54, 0x34, 0x14, 0xf4, 0xd4, 0xb4, 0x94, 0x69, 0x49, 0x29, 0x9, 0xe9, 0xc9, 0xa9, 0x89, 0x4e, 0x6e, 0xe, 0x2e, 0xce, 0xee, 0x8e, 0xae, 0x53, 0x73, 0x13, 0x33, 0xd3, 0xf3, 0x93, 0xb3, 0xe8, 0xc8, 0xa8, 0x88, 0x68, 0x48, 0x28, 0x8, 0xf5, 0xd5, 0xb5, 0x95, 0x75, 0x55, 0x35, 0x15, 0xd2, 0xf2, 0x92, 0xb2, 0x52, 0x72, 0x12, 0x32, 0xcf, 0xef, 0x8f, 0xaf, 0x4f, 0x6f, 0xf, 0x2f, 0x9c, 0xbc, 0xdc, 0xfc, 0x1c, 0x3c, 0x5c, 0x7c, 0x81, 0xa1, 0xc1, 0xe1, 0x1, 0x21, 0x41, 0x61, 0xa6, 0x86, 0xe6, 0xc6, 0x26, 0x6, 0x66, 0x46, 0xbb, 0x9b, 0xfb, 0xdb, 0x3b, 0x1b, 0x7b, 0x5b, 0xcd, 0xed, 0x8d, 0xad, 0x4d, 0x6d, 0xd, 0x2d, 0xd0, 0xf0, 0x90, 0xb0, 0x50, 0x70, 0x10, 0x30, 0xf7, 0xd7, 0xb7, 0x97, 0x77, 0x57, 0x37, 0x17, 0xea, 0xca, 0xaa, 0x8a, 0x6a, 0x4a, 0x2a, 0xa, 0xb9, 0x99, 0xf9, 0xd9, 0x39, 0x19, 0x79, 0x59, 0xa4, 0x84, 0xe4, 0xc4, 0x24, 0x4, 0x64, 0x44, 0x83, 0xa3, 0xc3, 0xe3, 0x3, 0x23, 0x43, 0x63, 0x9e, 0xbe, 0xde, 0xfe, 0x1e, 0x3e, 0x5e, 0x7e, 0x25, 0x5, 0x65, 0x45, 0xa5, 0x85, 0xe5, 0xc5, 0x38, 0x18, 0x78, 0x58, 0xb8, 0x98, 0xf8, 0xd8, 0x1f, 0x3f, 0x5f, 0x7f, 0x9f, 0xbf, 0xdf, 0xff, 0x2, 0x22, 0x42, 0x62, 0x82, 0xa2, 0xc2, 0xe2, 0x51, 0x71, 0x11, 0x31, 0xd1, 0xf1, 0x91, 0xb1, 0x4c, 0x6c, 0xc, 0x2c, 0xcc, 0xec, 0x8c, 0xac, 0x6b, 0x4b, 0x2b, 0xb, 0xeb, 0xcb, 0xab, 0x8b, 0x76, 0x56, 0x36, 0x16, 0xf6, 0xd6, 0xb6, 0x96}, + {0x0, 0x21, 0x42, 0x63, 0x84, 0xa5, 0xc6, 0xe7, 0x15, 0x34, 0x57, 0x76, 0x91, 0xb0, 0xd3, 0xf2, 0x2a, 0xb, 0x68, 0x49, 0xae, 0x8f, 0xec, 0xcd, 0x3f, 0x1e, 0x7d, 0x5c, 0xbb, 0x9a, 0xf9, 0xd8, 0x54, 0x75, 0x16, 0x37, 0xd0, 0xf1, 0x92, 0xb3, 0x41, 0x60, 0x3, 0x22, 0xc5, 0xe4, 0x87, 0xa6, 0x7e, 0x5f, 0x3c, 0x1d, 0xfa, 0xdb, 0xb8, 0x99, 0x6b, 0x4a, 0x29, 0x8, 0xef, 0xce, 0xad, 0x8c, 0xa8, 0x89, 0xea, 0xcb, 0x2c, 0xd, 0x6e, 0x4f, 0xbd, 0x9c, 0xff, 0xde, 0x39, 0x18, 0x7b, 0x5a, 0x82, 0xa3, 0xc0, 0xe1, 0x6, 0x27, 0x44, 0x65, 0x97, 0xb6, 0xd5, 0xf4, 0x13, 0x32, 0x51, 0x70, 0xfc, 0xdd, 0xbe, 0x9f, 0x78, 0x59, 0x3a, 0x1b, 0xe9, 0xc8, 0xab, 0x8a, 0x6d, 0x4c, 0x2f, 0xe, 0xd6, 0xf7, 0x94, 0xb5, 0x52, 0x73, 0x10, 0x31, 0xc3, 0xe2, 0x81, 0xa0, 0x47, 0x66, 0x5, 0x24, 0x4d, 0x6c, 0xf, 0x2e, 0xc9, 0xe8, 0x8b, 0xaa, 0x58, 0x79, 0x1a, 0x3b, 0xdc, 0xfd, 0x9e, 0xbf, 0x67, 0x46, 0x25, 0x4, 0xe3, 0xc2, 0xa1, 0x80, 0x72, 0x53, 0x30, 0x11, 0xf6, 0xd7, 0xb4, 0x95, 0x19, 0x38, 0x5b, 0x7a, 0x9d, 0xbc, 0xdf, 0xfe, 0xc, 0x2d, 0x4e, 0x6f, 0x88, 0xa9, 0xca, 0xeb, 0x33, 0x12, 0x71, 0x50, 0xb7, 0x96, 0xf5, 0xd4, 0x26, 0x7, 0x64, 0x45, 0xa2, 0x83, 0xe0, 0xc1, 0xe5, 0xc4, 0xa7, 0x86, 0x61, 0x40, 0x23, 0x2, 0xf0, 0xd1, 0xb2, 0x93, 0x74, 0x55, 0x36, 0x17, 0xcf, 0xee, 0x8d, 0xac, 0x4b, 0x6a, 0x9, 0x28, 0xda, 0xfb, 0x98, 0xb9, 0x5e, 0x7f, 0x1c, 0x3d, 0xb1, 0x90, 0xf3, 0xd2, 0x35, 0x14, 0x77, 0x56, 0xa4, 0x85, 0xe6, 0xc7, 0x20, 0x1, 0x62, 0x43, 0x9b, 0xba, 0xd9, 0xf8, 0x1f, 0x3e, 0x5d, 0x7c, 0x8e, 0xaf, 0xcc, 0xed, 0xa, 0x2b, 0x48, 0x69}, + {0x0, 0x22, 0x44, 0x66, 0x88, 0xaa, 0xcc, 0xee, 0xd, 0x2f, 0x49, 0x6b, 0x85, 0xa7, 0xc1, 0xe3, 0x1a, 0x38, 0x5e, 0x7c, 0x92, 0xb0, 0xd6, 0xf4, 0x17, 0x35, 0x53, 0x71, 0x9f, 0xbd, 0xdb, 0xf9, 0x34, 0x16, 0x70, 0x52, 0xbc, 0x9e, 0xf8, 0xda, 0x39, 0x1b, 0x7d, 0x5f, 0xb1, 0x93, 0xf5, 0xd7, 0x2e, 0xc, 0x6a, 0x48, 0xa6, 0x84, 0xe2, 0xc0, 0x23, 0x1, 0x67, 0x45, 0xab, 0x89, 0xef, 0xcd, 0x68, 0x4a, 0x2c, 0xe, 0xe0, 0xc2, 0xa4, 0x86, 0x65, 0x47, 0x21, 0x3, 0xed, 0xcf, 0xa9, 0x8b, 0x72, 0x50, 0x36, 0x14, 0xfa, 0xd8, 0xbe, 0x9c, 0x7f, 0x5d, 0x3b, 0x19, 0xf7, 0xd5, 0xb3, 0x91, 0x5c, 0x7e, 0x18, 0x3a, 0xd4, 0xf6, 0x90, 0xb2, 0x51, 0x73, 0x15, 0x37, 0xd9, 0xfb, 0x9d, 0xbf, 0x46, 0x64, 0x2, 0x20, 0xce, 0xec, 0x8a, 0xa8, 0x4b, 0x69, 0xf, 0x2d, 0xc3, 0xe1, 0x87, 0xa5, 0xd0, 0xf2, 0x94, 0xb6, 0x58, 0x7a, 0x1c, 0x3e, 0xdd, 0xff, 0x99, 0xbb, 0x55, 0x77, 0x11, 0x33, 0xca, 0xe8, 0x8e, 0xac, 0x42, 0x60, 0x6, 0x24, 0xc7, 0xe5, 0x83, 0xa1, 0x4f, 0x6d, 0xb, 0x29, 0xe4, 0xc6, 0xa0, 0x82, 0x6c, 0x4e, 0x28, 0xa, 0xe9, 0xcb, 0xad, 0x8f, 0x61, 0x43, 0x25, 0x7, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 0xf3, 0xd1, 0xb7, 0x95, 0x7b, 0x59, 0x3f, 0x1d, 0xb8, 0x9a, 0xfc, 0xde, 0x30, 0x12, 0x74, 0x56, 0xb5, 0x97, 0xf1, 0xd3, 0x3d, 0x1f, 0x79, 0x5b, 0xa2, 0x80, 0xe6, 0xc4, 0x2a, 0x8, 0x6e, 0x4c, 0xaf, 0x8d, 0xeb, 0xc9, 0x27, 0x5, 0x63, 0x41, 0x8c, 0xae, 0xc8, 0xea, 0x4, 0x26, 0x40, 0x62, 0x81, 0xa3, 0xc5, 0xe7, 0x9, 0x2b, 0x4d, 0x6f, 0x96, 0xb4, 0xd2, 0xf0, 0x1e, 0x3c, 0x5a, 0x78, 0x9b, 0xb9, 0xdf, 0xfd, 0x13, 0x31, 0x57, 0x75}, + {0x0, 0x23, 0x46, 0x65, 0x8c, 0xaf, 0xca, 0xe9, 0x5, 0x26, 0x43, 0x60, 0x89, 0xaa, 0xcf, 0xec, 0xa, 0x29, 0x4c, 0x6f, 0x86, 0xa5, 0xc0, 0xe3, 0xf, 0x2c, 0x49, 0x6a, 0x83, 0xa0, 0xc5, 0xe6, 0x14, 0x37, 0x52, 0x71, 0x98, 0xbb, 0xde, 0xfd, 0x11, 0x32, 0x57, 0x74, 0x9d, 0xbe, 0xdb, 0xf8, 0x1e, 0x3d, 0x58, 0x7b, 0x92, 0xb1, 0xd4, 0xf7, 0x1b, 0x38, 0x5d, 0x7e, 0x97, 0xb4, 0xd1, 0xf2, 0x28, 0xb, 0x6e, 0x4d, 0xa4, 0x87, 0xe2, 0xc1, 0x2d, 0xe, 0x6b, 0x48, 0xa1, 0x82, 0xe7, 0xc4, 0x22, 0x1, 0x64, 0x47, 0xae, 0x8d, 0xe8, 0xcb, 0x27, 0x4, 0x61, 0x42, 0xab, 0x88, 0xed, 0xce, 0x3c, 0x1f, 0x7a, 0x59, 0xb0, 0x93, 0xf6, 0xd5, 0x39, 0x1a, 0x7f, 0x5c, 0xb5, 0x96, 0xf3, 0xd0, 0x36, 0x15, 0x70, 0x53, 0xba, 0x99, 0xfc, 0xdf, 0x33, 0x10, 0x75, 0x56, 0xbf, 0x9c, 0xf9, 0xda, 0x50, 0x73, 0x16, 0x35, 0xdc, 0xff, 0x9a, 0xb9, 0x55, 0x76, 0x13, 0x30, 0xd9, 0xfa, 0x9f, 0xbc, 0x5a, 0x79, 0x1c, 0x3f, 0xd6, 0xf5, 0x90, 0xb3, 0x5f, 0x7c, 0x19, 0x3a, 0xd3, 0xf0, 0x95, 0xb6, 0x44, 0x67, 0x2, 0x21, 0xc8, 0xeb, 0x8e, 0xad, 0x41, 0x62, 0x7, 0x24, 0xcd, 0xee, 0x8b, 0xa8, 0x4e, 0x6d, 0x8, 0x2b, 0xc2, 0xe1, 0x84, 0xa7, 0x4b, 0x68, 0xd, 0x2e, 0xc7, 0xe4, 0x81, 0xa2, 0x78, 0x5b, 0x3e, 0x1d, 0xf4, 0xd7, 0xb2, 0x91, 0x7d, 0x5e, 0x3b, 0x18, 0xf1, 0xd2, 0xb7, 0x94, 0x72, 0x51, 0x34, 0x17, 0xfe, 0xdd, 0xb8, 0x9b, 0x77, 0x54, 0x31, 0x12, 0xfb, 0xd8, 0xbd, 0x9e, 0x6c, 0x4f, 0x2a, 0x9, 0xe0, 0xc3, 0xa6, 0x85, 0x69, 0x4a, 0x2f, 0xc, 0xe5, 0xc6, 0xa3, 0x80, 0x66, 0x45, 0x20, 0x3, 0xea, 0xc9, 0xac, 0x8f, 0x63, 0x40, 0x25, 0x6, 0xef, 0xcc, 0xa9, 0x8a}, + {0x0, 0x24, 0x48, 0x6c, 0x90, 0xb4, 0xd8, 0xfc, 0x3d, 0x19, 0x75, 0x51, 0xad, 0x89, 0xe5, 0xc1, 0x7a, 0x5e, 0x32, 0x16, 0xea, 0xce, 0xa2, 0x86, 0x47, 0x63, 0xf, 0x2b, 0xd7, 0xf3, 0x9f, 0xbb, 0xf4, 0xd0, 0xbc, 0x98, 0x64, 0x40, 0x2c, 0x8, 0xc9, 0xed, 0x81, 0xa5, 0x59, 0x7d, 0x11, 0x35, 0x8e, 0xaa, 0xc6, 0xe2, 0x1e, 0x3a, 0x56, 0x72, 0xb3, 0x97, 0xfb, 0xdf, 0x23, 0x7, 0x6b, 0x4f, 0xf5, 0xd1, 0xbd, 0x99, 0x65, 0x41, 0x2d, 0x9, 0xc8, 0xec, 0x80, 0xa4, 0x58, 0x7c, 0x10, 0x34, 0x8f, 0xab, 0xc7, 0xe3, 0x1f, 0x3b, 0x57, 0x73, 0xb2, 0x96, 0xfa, 0xde, 0x22, 0x6, 0x6a, 0x4e, 0x1, 0x25, 0x49, 0x6d, 0x91, 0xb5, 0xd9, 0xfd, 0x3c, 0x18, 0x74, 0x50, 0xac, 0x88, 0xe4, 0xc0, 0x7b, 0x5f, 0x33, 0x17, 0xeb, 0xcf, 0xa3, 0x87, 0x46, 0x62, 0xe, 0x2a, 0xd6, 0xf2, 0x9e, 0xba, 0xf7, 0xd3, 0xbf, 0x9b, 0x67, 0x43, 0x2f, 0xb, 0xca, 0xee, 0x82, 0xa6, 0x5a, 0x7e, 0x12, 0x36, 0x8d, 0xa9, 0xc5, 0xe1, 0x1d, 0x39, 0x55, 0x71, 0xb0, 0x94, 0xf8, 0xdc, 0x20, 0x4, 0x68, 0x4c, 0x3, 0x27, 0x4b, 0x6f, 0x93, 0xb7, 0xdb, 0xff, 0x3e, 0x1a, 0x76, 0x52, 0xae, 0x8a, 0xe6, 0xc2, 0x79, 0x5d, 0x31, 0x15, 0xe9, 0xcd, 0xa1, 0x85, 0x44, 0x60, 0xc, 0x28, 0xd4, 0xf0, 0x9c, 0xb8, 0x2, 0x26, 0x4a, 0x6e, 0x92, 0xb6, 0xda, 0xfe, 0x3f, 0x1b, 0x77, 0x53, 0xaf, 0x8b, 0xe7, 0xc3, 0x78, 0x5c, 0x30, 0x14, 0xe8, 0xcc, 0xa0, 0x84, 0x45, 0x61, 0xd, 0x29, 0xd5, 0xf1, 0x9d, 0xb9, 0xf6, 0xd2, 0xbe, 0x9a, 0x66, 0x42, 0x2e, 0xa, 0xcb, 0xef, 0x83, 0xa7, 0x5b, 0x7f, 0x13, 0x37, 0x8c, 0xa8, 0xc4, 0xe0, 0x1c, 0x38, 0x54, 0x70, 0xb1, 0x95, 0xf9, 0xdd, 0x21, 0x5, 0x69, 0x4d}, + {0x0, 0x25, 0x4a, 0x6f, 0x94, 0xb1, 0xde, 0xfb, 0x35, 0x10, 0x7f, 0x5a, 0xa1, 0x84, 0xeb, 0xce, 0x6a, 0x4f, 0x20, 0x5, 0xfe, 0xdb, 0xb4, 0x91, 0x5f, 0x7a, 0x15, 0x30, 0xcb, 0xee, 0x81, 0xa4, 0xd4, 0xf1, 0x9e, 0xbb, 0x40, 0x65, 0xa, 0x2f, 0xe1, 0xc4, 0xab, 0x8e, 0x75, 0x50, 0x3f, 0x1a, 0xbe, 0x9b, 0xf4, 0xd1, 0x2a, 0xf, 0x60, 0x45, 0x8b, 0xae, 0xc1, 0xe4, 0x1f, 0x3a, 0x55, 0x70, 0xb5, 0x90, 0xff, 0xda, 0x21, 0x4, 0x6b, 0x4e, 0x80, 0xa5, 0xca, 0xef, 0x14, 0x31, 0x5e, 0x7b, 0xdf, 0xfa, 0x95, 0xb0, 0x4b, 0x6e, 0x1, 0x24, 0xea, 0xcf, 0xa0, 0x85, 0x7e, 0x5b, 0x34, 0x11, 0x61, 0x44, 0x2b, 0xe, 0xf5, 0xd0, 0xbf, 0x9a, 0x54, 0x71, 0x1e, 0x3b, 0xc0, 0xe5, 0x8a, 0xaf, 0xb, 0x2e, 0x41, 0x64, 0x9f, 0xba, 0xd5, 0xf0, 0x3e, 0x1b, 0x74, 0x51, 0xaa, 0x8f, 0xe0, 0xc5, 0x77, 0x52, 0x3d, 0x18, 0xe3, 0xc6, 0xa9, 0x8c, 0x42, 0x67, 0x8, 0x2d, 0xd6, 0xf3, 0x9c, 0xb9, 0x1d, 0x38, 0x57, 0x72, 0x89, 0xac, 0xc3, 0xe6, 0x28, 0xd, 0x62, 0x47, 0xbc, 0x99, 0xf6, 0xd3, 0xa3, 0x86, 0xe9, 0xcc, 0x37, 0x12, 0x7d, 0x58, 0x96, 0xb3, 0xdc, 0xf9, 0x2, 0x27, 0x48, 0x6d, 0xc9, 0xec, 0x83, 0xa6, 0x5d, 0x78, 0x17, 0x32, 0xfc, 0xd9, 0xb6, 0x93, 0x68, 0x4d, 0x22, 0x7, 0xc2, 0xe7, 0x88, 0xad, 0x56, 0x73, 0x1c, 0x39, 0xf7, 0xd2, 0xbd, 0x98, 0x63, 0x46, 0x29, 0xc, 0xa8, 0x8d, 0xe2, 0xc7, 0x3c, 0x19, 0x76, 0x53, 0x9d, 0xb8, 0xd7, 0xf2, 0x9, 0x2c, 0x43, 0x66, 0x16, 0x33, 0x5c, 0x79, 0x82, 0xa7, 0xc8, 0xed, 0x23, 0x6, 0x69, 0x4c, 0xb7, 0x92, 0xfd, 0xd8, 0x7c, 0x59, 0x36, 0x13, 0xe8, 0xcd, 0xa2, 0x87, 0x49, 0x6c, 0x3, 0x26, 0xdd, 0xf8, 0x97, 0xb2}, + {0x0, 0x26, 0x4c, 0x6a, 0x98, 0xbe, 0xd4, 0xf2, 0x2d, 0xb, 0x61, 0x47, 0xb5, 0x93, 0xf9, 0xdf, 0x5a, 0x7c, 0x16, 0x30, 0xc2, 0xe4, 0x8e, 0xa8, 0x77, 0x51, 0x3b, 0x1d, 0xef, 0xc9, 0xa3, 0x85, 0xb4, 0x92, 0xf8, 0xde, 0x2c, 0xa, 0x60, 0x46, 0x99, 0xbf, 0xd5, 0xf3, 0x1, 0x27, 0x4d, 0x6b, 0xee, 0xc8, 0xa2, 0x84, 0x76, 0x50, 0x3a, 0x1c, 0xc3, 0xe5, 0x8f, 0xa9, 0x5b, 0x7d, 0x17, 0x31, 0x75, 0x53, 0x39, 0x1f, 0xed, 0xcb, 0xa1, 0x87, 0x58, 0x7e, 0x14, 0x32, 0xc0, 0xe6, 0x8c, 0xaa, 0x2f, 0x9, 0x63, 0x45, 0xb7, 0x91, 0xfb, 0xdd, 0x2, 0x24, 0x4e, 0x68, 0x9a, 0xbc, 0xd6, 0xf0, 0xc1, 0xe7, 0x8d, 0xab, 0x59, 0x7f, 0x15, 0x33, 0xec, 0xca, 0xa0, 0x86, 0x74, 0x52, 0x38, 0x1e, 0x9b, 0xbd, 0xd7, 0xf1, 0x3, 0x25, 0x4f, 0x69, 0xb6, 0x90, 0xfa, 0xdc, 0x2e, 0x8, 0x62, 0x44, 0xea, 0xcc, 0xa6, 0x80, 0x72, 0x54, 0x3e, 0x18, 0xc7, 0xe1, 0x8b, 0xad, 0x5f, 0x79, 0x13, 0x35, 0xb0, 0x96, 0xfc, 0xda, 0x28, 0xe, 0x64, 0x42, 0x9d, 0xbb, 0xd1, 0xf7, 0x5, 0x23, 0x49, 0x6f, 0x5e, 0x78, 0x12, 0x34, 0xc6, 0xe0, 0x8a, 0xac, 0x73, 0x55, 0x3f, 0x19, 0xeb, 0xcd, 0xa7, 0x81, 0x4, 0x22, 0x48, 0x6e, 0x9c, 0xba, 0xd0, 0xf6, 0x29, 0xf, 0x65, 0x43, 0xb1, 0x97, 0xfd, 0xdb, 0x9f, 0xb9, 0xd3, 0xf5, 0x7, 0x21, 0x4b, 0x6d, 0xb2, 0x94, 0xfe, 0xd8, 0x2a, 0xc, 0x66, 0x40, 0xc5, 0xe3, 0x89, 0xaf, 0x5d, 0x7b, 0x11, 0x37, 0xe8, 0xce, 0xa4, 0x82, 0x70, 0x56, 0x3c, 0x1a, 0x2b, 0xd, 0x67, 0x41, 0xb3, 0x95, 0xff, 0xd9, 0x6, 0x20, 0x4a, 0x6c, 0x9e, 0xb8, 0xd2, 0xf4, 0x71, 0x57, 0x3d, 0x1b, 0xe9, 0xcf, 0xa5, 0x83, 0x5c, 0x7a, 0x10, 0x36, 0xc4, 0xe2, 0x88, 0xae}, + {0x0, 0x27, 0x4e, 0x69, 0x9c, 0xbb, 0xd2, 0xf5, 0x25, 0x2, 0x6b, 0x4c, 0xb9, 0x9e, 0xf7, 0xd0, 0x4a, 0x6d, 0x4, 0x23, 0xd6, 0xf1, 0x98, 0xbf, 0x6f, 0x48, 0x21, 0x6, 0xf3, 0xd4, 0xbd, 0x9a, 0x94, 0xb3, 0xda, 0xfd, 0x8, 0x2f, 0x46, 0x61, 0xb1, 0x96, 0xff, 0xd8, 0x2d, 0xa, 0x63, 0x44, 0xde, 0xf9, 0x90, 0xb7, 0x42, 0x65, 0xc, 0x2b, 0xfb, 0xdc, 0xb5, 0x92, 0x67, 0x40, 0x29, 0xe, 0x35, 0x12, 0x7b, 0x5c, 0xa9, 0x8e, 0xe7, 0xc0, 0x10, 0x37, 0x5e, 0x79, 0x8c, 0xab, 0xc2, 0xe5, 0x7f, 0x58, 0x31, 0x16, 0xe3, 0xc4, 0xad, 0x8a, 0x5a, 0x7d, 0x14, 0x33, 0xc6, 0xe1, 0x88, 0xaf, 0xa1, 0x86, 0xef, 0xc8, 0x3d, 0x1a, 0x73, 0x54, 0x84, 0xa3, 0xca, 0xed, 0x18, 0x3f, 0x56, 0x71, 0xeb, 0xcc, 0xa5, 0x82, 0x77, 0x50, 0x39, 0x1e, 0xce, 0xe9, 0x80, 0xa7, 0x52, 0x75, 0x1c, 0x3b, 0x6a, 0x4d, 0x24, 0x3, 0xf6, 0xd1, 0xb8, 0x9f, 0x4f, 0x68, 0x1, 0x26, 0xd3, 0xf4, 0x9d, 0xba, 0x20, 0x7, 0x6e, 0x49, 0xbc, 0x9b, 0xf2, 0xd5, 0x5, 0x22, 0x4b, 0x6c, 0x99, 0xbe, 0xd7, 0xf0, 0xfe, 0xd9, 0xb0, 0x97, 0x62, 0x45, 0x2c, 0xb, 0xdb, 0xfc, 0x95, 0xb2, 0x47, 0x60, 0x9, 0x2e, 0xb4, 0x93, 0xfa, 0xdd, 0x28, 0xf, 0x66, 0x41, 0x91, 0xb6, 0xdf, 0xf8, 0xd, 0x2a, 0x43, 0x64, 0x5f, 0x78, 0x11, 0x36, 0xc3, 0xe4, 0x8d, 0xaa, 0x7a, 0x5d, 0x34, 0x13, 0xe6, 0xc1, 0xa8, 0x8f, 0x15, 0x32, 0x5b, 0x7c, 0x89, 0xae, 0xc7, 0xe0, 0x30, 0x17, 0x7e, 0x59, 0xac, 0x8b, 0xe2, 0xc5, 0xcb, 0xec, 0x85, 0xa2, 0x57, 0x70, 0x19, 0x3e, 0xee, 0xc9, 0xa0, 0x87, 0x72, 0x55, 0x3c, 0x1b, 0x81, 0xa6, 0xcf, 0xe8, 0x1d, 0x3a, 0x53, 0x74, 0xa4, 0x83, 0xea, 0xcd, 0x38, 0x1f, 0x76, 0x51}, + {0x0, 0x28, 0x50, 0x78, 0xa0, 0x88, 0xf0, 0xd8, 0x5d, 0x75, 0xd, 0x25, 0xfd, 0xd5, 0xad, 0x85, 0xba, 0x92, 0xea, 0xc2, 0x1a, 0x32, 0x4a, 0x62, 0xe7, 0xcf, 0xb7, 0x9f, 0x47, 0x6f, 0x17, 0x3f, 0x69, 0x41, 0x39, 0x11, 0xc9, 0xe1, 0x99, 0xb1, 0x34, 0x1c, 0x64, 0x4c, 0x94, 0xbc, 0xc4, 0xec, 0xd3, 0xfb, 0x83, 0xab, 0x73, 0x5b, 0x23, 0xb, 0x8e, 0xa6, 0xde, 0xf6, 0x2e, 0x6, 0x7e, 0x56, 0xd2, 0xfa, 0x82, 0xaa, 0x72, 0x5a, 0x22, 0xa, 0x8f, 0xa7, 0xdf, 0xf7, 0x2f, 0x7, 0x7f, 0x57, 0x68, 0x40, 0x38, 0x10, 0xc8, 0xe0, 0x98, 0xb0, 0x35, 0x1d, 0x65, 0x4d, 0x95, 0xbd, 0xc5, 0xed, 0xbb, 0x93, 0xeb, 0xc3, 0x1b, 0x33, 0x4b, 0x63, 0xe6, 0xce, 0xb6, 0x9e, 0x46, 0x6e, 0x16, 0x3e, 0x1, 0x29, 0x51, 0x79, 0xa1, 0x89, 0xf1, 0xd9, 0x5c, 0x74, 0xc, 0x24, 0xfc, 0xd4, 0xac, 0x84, 0xb9, 0x91, 0xe9, 0xc1, 0x19, 0x31, 0x49, 0x61, 0xe4, 0xcc, 0xb4, 0x9c, 0x44, 0x6c, 0x14, 0x3c, 0x3, 0x2b, 0x53, 0x7b, 0xa3, 0x8b, 0xf3, 0xdb, 0x5e, 0x76, 0xe, 0x26, 0xfe, 0xd6, 0xae, 0x86, 0xd0, 0xf8, 0x80, 0xa8, 0x70, 0x58, 0x20, 0x8, 0x8d, 0xa5, 0xdd, 0xf5, 0x2d, 0x5, 0x7d, 0x55, 0x6a, 0x42, 0x3a, 0x12, 0xca, 0xe2, 0x9a, 0xb2, 0x37, 0x1f, 0x67, 0x4f, 0x97, 0xbf, 0xc7, 0xef, 0x6b, 0x43, 0x3b, 0x13, 0xcb, 0xe3, 0x9b, 0xb3, 0x36, 0x1e, 0x66, 0x4e, 0x96, 0xbe, 0xc6, 0xee, 0xd1, 0xf9, 0x81, 0xa9, 0x71, 0x59, 0x21, 0x9, 0x8c, 0xa4, 0xdc, 0xf4, 0x2c, 0x4, 0x7c, 0x54, 0x2, 0x2a, 0x52, 0x7a, 0xa2, 0x8a, 0xf2, 0xda, 0x5f, 0x77, 0xf, 0x27, 0xff, 0xd7, 0xaf, 0x87, 0xb8, 0x90, 0xe8, 0xc0, 0x18, 0x30, 0x48, 0x60, 0xe5, 0xcd, 0xb5, 0x9d, 0x45, 0x6d, 0x15, 0x3d}, + {0x0, 0x29, 0x52, 0x7b, 0xa4, 0x8d, 0xf6, 0xdf, 0x55, 0x7c, 0x7, 0x2e, 0xf1, 0xd8, 0xa3, 0x8a, 0xaa, 0x83, 0xf8, 0xd1, 0xe, 0x27, 0x5c, 0x75, 0xff, 0xd6, 0xad, 0x84, 0x5b, 0x72, 0x9, 0x20, 0x49, 0x60, 0x1b, 0x32, 0xed, 0xc4, 0xbf, 0x96, 0x1c, 0x35, 0x4e, 0x67, 0xb8, 0x91, 0xea, 0xc3, 0xe3, 0xca, 0xb1, 0x98, 0x47, 0x6e, 0x15, 0x3c, 0xb6, 0x9f, 0xe4, 0xcd, 0x12, 0x3b, 0x40, 0x69, 0x92, 0xbb, 0xc0, 0xe9, 0x36, 0x1f, 0x64, 0x4d, 0xc7, 0xee, 0x95, 0xbc, 0x63, 0x4a, 0x31, 0x18, 0x38, 0x11, 0x6a, 0x43, 0x9c, 0xb5, 0xce, 0xe7, 0x6d, 0x44, 0x3f, 0x16, 0xc9, 0xe0, 0x9b, 0xb2, 0xdb, 0xf2, 0x89, 0xa0, 0x7f, 0x56, 0x2d, 0x4, 0x8e, 0xa7, 0xdc, 0xf5, 0x2a, 0x3, 0x78, 0x51, 0x71, 0x58, 0x23, 0xa, 0xd5, 0xfc, 0x87, 0xae, 0x24, 0xd, 0x76, 0x5f, 0x80, 0xa9, 0xd2, 0xfb, 0x39, 0x10, 0x6b, 0x42, 0x9d, 0xb4, 0xcf, 0xe6, 0x6c, 0x45, 0x3e, 0x17, 0xc8, 0xe1, 0x9a, 0xb3, 0x93, 0xba, 0xc1, 0xe8, 0x37, 0x1e, 0x65, 0x4c, 0xc6, 0xef, 0x94, 0xbd, 0x62, 0x4b, 0x30, 0x19, 0x70, 0x59, 0x22, 0xb, 0xd4, 0xfd, 0x86, 0xaf, 0x25, 0xc, 0x77, 0x5e, 0x81, 0xa8, 0xd3, 0xfa, 0xda, 0xf3, 0x88, 0xa1, 0x7e, 0x57, 0x2c, 0x5, 0x8f, 0xa6, 0xdd, 0xf4, 0x2b, 0x2, 0x79, 0x50, 0xab, 0x82, 0xf9, 0xd0, 0xf, 0x26, 0x5d, 0x74, 0xfe, 0xd7, 0xac, 0x85, 0x5a, 0x73, 0x8, 0x21, 0x1, 0x28, 0x53, 0x7a, 0xa5, 0x8c, 0xf7, 0xde, 0x54, 0x7d, 0x6, 0x2f, 0xf0, 0xd9, 0xa2, 0x8b, 0xe2, 0xcb, 0xb0, 0x99, 0x46, 0x6f, 0x14, 0x3d, 0xb7, 0x9e, 0xe5, 0xcc, 0x13, 0x3a, 0x41, 0x68, 0x48, 0x61, 0x1a, 0x33, 0xec, 0xc5, 0xbe, 0x97, 0x1d, 0x34, 0x4f, 0x66, 0xb9, 0x90, 0xeb, 0xc2}, + {0x0, 0x2a, 0x54, 0x7e, 0xa8, 0x82, 0xfc, 0xd6, 0x4d, 0x67, 0x19, 0x33, 0xe5, 0xcf, 0xb1, 0x9b, 0x9a, 0xb0, 0xce, 0xe4, 0x32, 0x18, 0x66, 0x4c, 0xd7, 0xfd, 0x83, 0xa9, 0x7f, 0x55, 0x2b, 0x1, 0x29, 0x3, 0x7d, 0x57, 0x81, 0xab, 0xd5, 0xff, 0x64, 0x4e, 0x30, 0x1a, 0xcc, 0xe6, 0x98, 0xb2, 0xb3, 0x99, 0xe7, 0xcd, 0x1b, 0x31, 0x4f, 0x65, 0xfe, 0xd4, 0xaa, 0x80, 0x56, 0x7c, 0x2, 0x28, 0x52, 0x78, 0x6, 0x2c, 0xfa, 0xd0, 0xae, 0x84, 0x1f, 0x35, 0x4b, 0x61, 0xb7, 0x9d, 0xe3, 0xc9, 0xc8, 0xe2, 0x9c, 0xb6, 0x60, 0x4a, 0x34, 0x1e, 0x85, 0xaf, 0xd1, 0xfb, 0x2d, 0x7, 0x79, 0x53, 0x7b, 0x51, 0x2f, 0x5, 0xd3, 0xf9, 0x87, 0xad, 0x36, 0x1c, 0x62, 0x48, 0x9e, 0xb4, 0xca, 0xe0, 0xe1, 0xcb, 0xb5, 0x9f, 0x49, 0x63, 0x1d, 0x37, 0xac, 0x86, 0xf8, 0xd2, 0x4, 0x2e, 0x50, 0x7a, 0xa4, 0x8e, 0xf0, 0xda, 0xc, 0x26, 0x58, 0x72, 0xe9, 0xc3, 0xbd, 0x97, 0x41, 0x6b, 0x15, 0x3f, 0x3e, 0x14, 0x6a, 0x40, 0x96, 0xbc, 0xc2, 0xe8, 0x73, 0x59, 0x27, 0xd, 0xdb, 0xf1, 0x8f, 0xa5, 0x8d, 0xa7, 0xd9, 0xf3, 0x25, 0xf, 0x71, 0x5b, 0xc0, 0xea, 0x94, 0xbe, 0x68, 0x42, 0x3c, 0x16, 0x17, 0x3d, 0x43, 0x69, 0xbf, 0x95, 0xeb, 0xc1, 0x5a, 0x70, 0xe, 0x24, 0xf2, 0xd8, 0xa6, 0x8c, 0xf6, 0xdc, 0xa2, 0x88, 0x5e, 0x74, 0xa, 0x20, 0xbb, 0x91, 0xef, 0xc5, 0x13, 0x39, 0x47, 0x6d, 0x6c, 0x46, 0x38, 0x12, 0xc4, 0xee, 0x90, 0xba, 0x21, 0xb, 0x75, 0x5f, 0x89, 0xa3, 0xdd, 0xf7, 0xdf, 0xf5, 0x8b, 0xa1, 0x77, 0x5d, 0x23, 0x9, 0x92, 0xb8, 0xc6, 0xec, 0x3a, 0x10, 0x6e, 0x44, 0x45, 0x6f, 0x11, 0x3b, 0xed, 0xc7, 0xb9, 0x93, 0x8, 0x22, 0x5c, 0x76, 0xa0, 0x8a, 0xf4, 0xde}, + {0x0, 0x2b, 0x56, 0x7d, 0xac, 0x87, 0xfa, 0xd1, 0x45, 0x6e, 0x13, 0x38, 0xe9, 0xc2, 0xbf, 0x94, 0x8a, 0xa1, 0xdc, 0xf7, 0x26, 0xd, 0x70, 0x5b, 0xcf, 0xe4, 0x99, 0xb2, 0x63, 0x48, 0x35, 0x1e, 0x9, 0x22, 0x5f, 0x74, 0xa5, 0x8e, 0xf3, 0xd8, 0x4c, 0x67, 0x1a, 0x31, 0xe0, 0xcb, 0xb6, 0x9d, 0x83, 0xa8, 0xd5, 0xfe, 0x2f, 0x4, 0x79, 0x52, 0xc6, 0xed, 0x90, 0xbb, 0x6a, 0x41, 0x3c, 0x17, 0x12, 0x39, 0x44, 0x6f, 0xbe, 0x95, 0xe8, 0xc3, 0x57, 0x7c, 0x1, 0x2a, 0xfb, 0xd0, 0xad, 0x86, 0x98, 0xb3, 0xce, 0xe5, 0x34, 0x1f, 0x62, 0x49, 0xdd, 0xf6, 0x8b, 0xa0, 0x71, 0x5a, 0x27, 0xc, 0x1b, 0x30, 0x4d, 0x66, 0xb7, 0x9c, 0xe1, 0xca, 0x5e, 0x75, 0x8, 0x23, 0xf2, 0xd9, 0xa4, 0x8f, 0x91, 0xba, 0xc7, 0xec, 0x3d, 0x16, 0x6b, 0x40, 0xd4, 0xff, 0x82, 0xa9, 0x78, 0x53, 0x2e, 0x5, 0x24, 0xf, 0x72, 0x59, 0x88, 0xa3, 0xde, 0xf5, 0x61, 0x4a, 0x37, 0x1c, 0xcd, 0xe6, 0x9b, 0xb0, 0xae, 0x85, 0xf8, 0xd3, 0x2, 0x29, 0x54, 0x7f, 0xeb, 0xc0, 0xbd, 0x96, 0x47, 0x6c, 0x11, 0x3a, 0x2d, 0x6, 0x7b, 0x50, 0x81, 0xaa, 0xd7, 0xfc, 0x68, 0x43, 0x3e, 0x15, 0xc4, 0xef, 0x92, 0xb9, 0xa7, 0x8c, 0xf1, 0xda, 0xb, 0x20, 0x5d, 0x76, 0xe2, 0xc9, 0xb4, 0x9f, 0x4e, 0x65, 0x18, 0x33, 0x36, 0x1d, 0x60, 0x4b, 0x9a, 0xb1, 0xcc, 0xe7, 0x73, 0x58, 0x25, 0xe, 0xdf, 0xf4, 0x89, 0xa2, 0xbc, 0x97, 0xea, 0xc1, 0x10, 0x3b, 0x46, 0x6d, 0xf9, 0xd2, 0xaf, 0x84, 0x55, 0x7e, 0x3, 0x28, 0x3f, 0x14, 0x69, 0x42, 0x93, 0xb8, 0xc5, 0xee, 0x7a, 0x51, 0x2c, 0x7, 0xd6, 0xfd, 0x80, 0xab, 0xb5, 0x9e, 0xe3, 0xc8, 0x19, 0x32, 0x4f, 0x64, 0xf0, 0xdb, 0xa6, 0x8d, 0x5c, 0x77, 0xa, 0x21}, + {0x0, 0x2c, 0x58, 0x74, 0xb0, 0x9c, 0xe8, 0xc4, 0x7d, 0x51, 0x25, 0x9, 0xcd, 0xe1, 0x95, 0xb9, 0xfa, 0xd6, 0xa2, 0x8e, 0x4a, 0x66, 0x12, 0x3e, 0x87, 0xab, 0xdf, 0xf3, 0x37, 0x1b, 0x6f, 0x43, 0xe9, 0xc5, 0xb1, 0x9d, 0x59, 0x75, 0x1, 0x2d, 0x94, 0xb8, 0xcc, 0xe0, 0x24, 0x8, 0x7c, 0x50, 0x13, 0x3f, 0x4b, 0x67, 0xa3, 0x8f, 0xfb, 0xd7, 0x6e, 0x42, 0x36, 0x1a, 0xde, 0xf2, 0x86, 0xaa, 0xcf, 0xe3, 0x97, 0xbb, 0x7f, 0x53, 0x27, 0xb, 0xb2, 0x9e, 0xea, 0xc6, 0x2, 0x2e, 0x5a, 0x76, 0x35, 0x19, 0x6d, 0x41, 0x85, 0xa9, 0xdd, 0xf1, 0x48, 0x64, 0x10, 0x3c, 0xf8, 0xd4, 0xa0, 0x8c, 0x26, 0xa, 0x7e, 0x52, 0x96, 0xba, 0xce, 0xe2, 0x5b, 0x77, 0x3, 0x2f, 0xeb, 0xc7, 0xb3, 0x9f, 0xdc, 0xf0, 0x84, 0xa8, 0x6c, 0x40, 0x34, 0x18, 0xa1, 0x8d, 0xf9, 0xd5, 0x11, 0x3d, 0x49, 0x65, 0x83, 0xaf, 0xdb, 0xf7, 0x33, 0x1f, 0x6b, 0x47, 0xfe, 0xd2, 0xa6, 0x8a, 0x4e, 0x62, 0x16, 0x3a, 0x79, 0x55, 0x21, 0xd, 0xc9, 0xe5, 0x91, 0xbd, 0x4, 0x28, 0x5c, 0x70, 0xb4, 0x98, 0xec, 0xc0, 0x6a, 0x46, 0x32, 0x1e, 0xda, 0xf6, 0x82, 0xae, 0x17, 0x3b, 0x4f, 0x63, 0xa7, 0x8b, 0xff, 0xd3, 0x90, 0xbc, 0xc8, 0xe4, 0x20, 0xc, 0x78, 0x54, 0xed, 0xc1, 0xb5, 0x99, 0x5d, 0x71, 0x5, 0x29, 0x4c, 0x60, 0x14, 0x38, 0xfc, 0xd0, 0xa4, 0x88, 0x31, 0x1d, 0x69, 0x45, 0x81, 0xad, 0xd9, 0xf5, 0xb6, 0x9a, 0xee, 0xc2, 0x6, 0x2a, 0x5e, 0x72, 0xcb, 0xe7, 0x93, 0xbf, 0x7b, 0x57, 0x23, 0xf, 0xa5, 0x89, 0xfd, 0xd1, 0x15, 0x39, 0x4d, 0x61, 0xd8, 0xf4, 0x80, 0xac, 0x68, 0x44, 0x30, 0x1c, 0x5f, 0x73, 0x7, 0x2b, 0xef, 0xc3, 0xb7, 0x9b, 0x22, 0xe, 0x7a, 0x56, 0x92, 0xbe, 0xca, 0xe6}, + {0x0, 0x2d, 0x5a, 0x77, 0xb4, 0x99, 0xee, 0xc3, 0x75, 0x58, 0x2f, 0x2, 0xc1, 0xec, 0x9b, 0xb6, 0xea, 0xc7, 0xb0, 0x9d, 0x5e, 0x73, 0x4, 0x29, 0x9f, 0xb2, 0xc5, 0xe8, 0x2b, 0x6, 0x71, 0x5c, 0xc9, 0xe4, 0x93, 0xbe, 0x7d, 0x50, 0x27, 0xa, 0xbc, 0x91, 0xe6, 0xcb, 0x8, 0x25, 0x52, 0x7f, 0x23, 0xe, 0x79, 0x54, 0x97, 0xba, 0xcd, 0xe0, 0x56, 0x7b, 0xc, 0x21, 0xe2, 0xcf, 0xb8, 0x95, 0x8f, 0xa2, 0xd5, 0xf8, 0x3b, 0x16, 0x61, 0x4c, 0xfa, 0xd7, 0xa0, 0x8d, 0x4e, 0x63, 0x14, 0x39, 0x65, 0x48, 0x3f, 0x12, 0xd1, 0xfc, 0x8b, 0xa6, 0x10, 0x3d, 0x4a, 0x67, 0xa4, 0x89, 0xfe, 0xd3, 0x46, 0x6b, 0x1c, 0x31, 0xf2, 0xdf, 0xa8, 0x85, 0x33, 0x1e, 0x69, 0x44, 0x87, 0xaa, 0xdd, 0xf0, 0xac, 0x81, 0xf6, 0xdb, 0x18, 0x35, 0x42, 0x6f, 0xd9, 0xf4, 0x83, 0xae, 0x6d, 0x40, 0x37, 0x1a, 0x3, 0x2e, 0x59, 0x74, 0xb7, 0x9a, 0xed, 0xc0, 0x76, 0x5b, 0x2c, 0x1, 0xc2, 0xef, 0x98, 0xb5, 0xe9, 0xc4, 0xb3, 0x9e, 0x5d, 0x70, 0x7, 0x2a, 0x9c, 0xb1, 0xc6, 0xeb, 0x28, 0x5, 0x72, 0x5f, 0xca, 0xe7, 0x90, 0xbd, 0x7e, 0x53, 0x24, 0x9, 0xbf, 0x92, 0xe5, 0xc8, 0xb, 0x26, 0x51, 0x7c, 0x20, 0xd, 0x7a, 0x57, 0x94, 0xb9, 0xce, 0xe3, 0x55, 0x78, 0xf, 0x22, 0xe1, 0xcc, 0xbb, 0x96, 0x8c, 0xa1, 0xd6, 0xfb, 0x38, 0x15, 0x62, 0x4f, 0xf9, 0xd4, 0xa3, 0x8e, 0x4d, 0x60, 0x17, 0x3a, 0x66, 0x4b, 0x3c, 0x11, 0xd2, 0xff, 0x88, 0xa5, 0x13, 0x3e, 0x49, 0x64, 0xa7, 0x8a, 0xfd, 0xd0, 0x45, 0x68, 0x1f, 0x32, 0xf1, 0xdc, 0xab, 0x86, 0x30, 0x1d, 0x6a, 0x47, 0x84, 0xa9, 0xde, 0xf3, 0xaf, 0x82, 0xf5, 0xd8, 0x1b, 0x36, 0x41, 0x6c, 0xda, 0xf7, 0x80, 0xad, 0x6e, 0x43, 0x34, 0x19}, + {0x0, 0x2e, 0x5c, 0x72, 0xb8, 0x96, 0xe4, 0xca, 0x6d, 0x43, 0x31, 0x1f, 0xd5, 0xfb, 0x89, 0xa7, 0xda, 0xf4, 0x86, 0xa8, 0x62, 0x4c, 0x3e, 0x10, 0xb7, 0x99, 0xeb, 0xc5, 0xf, 0x21, 0x53, 0x7d, 0xa9, 0x87, 0xf5, 0xdb, 0x11, 0x3f, 0x4d, 0x63, 0xc4, 0xea, 0x98, 0xb6, 0x7c, 0x52, 0x20, 0xe, 0x73, 0x5d, 0x2f, 0x1, 0xcb, 0xe5, 0x97, 0xb9, 0x1e, 0x30, 0x42, 0x6c, 0xa6, 0x88, 0xfa, 0xd4, 0x4f, 0x61, 0x13, 0x3d, 0xf7, 0xd9, 0xab, 0x85, 0x22, 0xc, 0x7e, 0x50, 0x9a, 0xb4, 0xc6, 0xe8, 0x95, 0xbb, 0xc9, 0xe7, 0x2d, 0x3, 0x71, 0x5f, 0xf8, 0xd6, 0xa4, 0x8a, 0x40, 0x6e, 0x1c, 0x32, 0xe6, 0xc8, 0xba, 0x94, 0x5e, 0x70, 0x2, 0x2c, 0x8b, 0xa5, 0xd7, 0xf9, 0x33, 0x1d, 0x6f, 0x41, 0x3c, 0x12, 0x60, 0x4e, 0x84, 0xaa, 0xd8, 0xf6, 0x51, 0x7f, 0xd, 0x23, 0xe9, 0xc7, 0xb5, 0x9b, 0x9e, 0xb0, 0xc2, 0xec, 0x26, 0x8, 0x7a, 0x54, 0xf3, 0xdd, 0xaf, 0x81, 0x4b, 0x65, 0x17, 0x39, 0x44, 0x6a, 0x18, 0x36, 0xfc, 0xd2, 0xa0, 0x8e, 0x29, 0x7, 0x75, 0x5b, 0x91, 0xbf, 0xcd, 0xe3, 0x37, 0x19, 0x6b, 0x45, 0x8f, 0xa1, 0xd3, 0xfd, 0x5a, 0x74, 0x6, 0x28, 0xe2, 0xcc, 0xbe, 0x90, 0xed, 0xc3, 0xb1, 0x9f, 0x55, 0x7b, 0x9, 0x27, 0x80, 0xae, 0xdc, 0xf2, 0x38, 0x16, 0x64, 0x4a, 0xd1, 0xff, 0x8d, 0xa3, 0x69, 0x47, 0x35, 0x1b, 0xbc, 0x92, 0xe0, 0xce, 0x4, 0x2a, 0x58, 0x76, 0xb, 0x25, 0x57, 0x79, 0xb3, 0x9d, 0xef, 0xc1, 0x66, 0x48, 0x3a, 0x14, 0xde, 0xf0, 0x82, 0xac, 0x78, 0x56, 0x24, 0xa, 0xc0, 0xee, 0x9c, 0xb2, 0x15, 0x3b, 0x49, 0x67, 0xad, 0x83, 0xf1, 0xdf, 0xa2, 0x8c, 0xfe, 0xd0, 0x1a, 0x34, 0x46, 0x68, 0xcf, 0xe1, 0x93, 0xbd, 0x77, 0x59, 0x2b, 0x5}, + {0x0, 0x2f, 0x5e, 0x71, 0xbc, 0x93, 0xe2, 0xcd, 0x65, 0x4a, 0x3b, 0x14, 0xd9, 0xf6, 0x87, 0xa8, 0xca, 0xe5, 0x94, 0xbb, 0x76, 0x59, 0x28, 0x7, 0xaf, 0x80, 0xf1, 0xde, 0x13, 0x3c, 0x4d, 0x62, 0x89, 0xa6, 0xd7, 0xf8, 0x35, 0x1a, 0x6b, 0x44, 0xec, 0xc3, 0xb2, 0x9d, 0x50, 0x7f, 0xe, 0x21, 0x43, 0x6c, 0x1d, 0x32, 0xff, 0xd0, 0xa1, 0x8e, 0x26, 0x9, 0x78, 0x57, 0x9a, 0xb5, 0xc4, 0xeb, 0xf, 0x20, 0x51, 0x7e, 0xb3, 0x9c, 0xed, 0xc2, 0x6a, 0x45, 0x34, 0x1b, 0xd6, 0xf9, 0x88, 0xa7, 0xc5, 0xea, 0x9b, 0xb4, 0x79, 0x56, 0x27, 0x8, 0xa0, 0x8f, 0xfe, 0xd1, 0x1c, 0x33, 0x42, 0x6d, 0x86, 0xa9, 0xd8, 0xf7, 0x3a, 0x15, 0x64, 0x4b, 0xe3, 0xcc, 0xbd, 0x92, 0x5f, 0x70, 0x1, 0x2e, 0x4c, 0x63, 0x12, 0x3d, 0xf0, 0xdf, 0xae, 0x81, 0x29, 0x6, 0x77, 0x58, 0x95, 0xba, 0xcb, 0xe4, 0x1e, 0x31, 0x40, 0x6f, 0xa2, 0x8d, 0xfc, 0xd3, 0x7b, 0x54, 0x25, 0xa, 0xc7, 0xe8, 0x99, 0xb6, 0xd4, 0xfb, 0x8a, 0xa5, 0x68, 0x47, 0x36, 0x19, 0xb1, 0x9e, 0xef, 0xc0, 0xd, 0x22, 0x53, 0x7c, 0x97, 0xb8, 0xc9, 0xe6, 0x2b, 0x4, 0x75, 0x5a, 0xf2, 0xdd, 0xac, 0x83, 0x4e, 0x61, 0x10, 0x3f, 0x5d, 0x72, 0x3, 0x2c, 0xe1, 0xce, 0xbf, 0x90, 0x38, 0x17, 0x66, 0x49, 0x84, 0xab, 0xda, 0xf5, 0x11, 0x3e, 0x4f, 0x60, 0xad, 0x82, 0xf3, 0xdc, 0x74, 0x5b, 0x2a, 0x5, 0xc8, 0xe7, 0x96, 0xb9, 0xdb, 0xf4, 0x85, 0xaa, 0x67, 0x48, 0x39, 0x16, 0xbe, 0x91, 0xe0, 0xcf, 0x2, 0x2d, 0x5c, 0x73, 0x98, 0xb7, 0xc6, 0xe9, 0x24, 0xb, 0x7a, 0x55, 0xfd, 0xd2, 0xa3, 0x8c, 0x41, 0x6e, 0x1f, 0x30, 0x52, 0x7d, 0xc, 0x23, 0xee, 0xc1, 0xb0, 0x9f, 0x37, 0x18, 0x69, 0x46, 0x8b, 0xa4, 0xd5, 0xfa}, + {0x0, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, 0x9d, 0xad, 0xfd, 0xcd, 0x5d, 0x6d, 0x3d, 0xd, 0x27, 0x17, 0x47, 0x77, 0xe7, 0xd7, 0x87, 0xb7, 0xba, 0x8a, 0xda, 0xea, 0x7a, 0x4a, 0x1a, 0x2a, 0x4e, 0x7e, 0x2e, 0x1e, 0x8e, 0xbe, 0xee, 0xde, 0xd3, 0xe3, 0xb3, 0x83, 0x13, 0x23, 0x73, 0x43, 0x69, 0x59, 0x9, 0x39, 0xa9, 0x99, 0xc9, 0xf9, 0xf4, 0xc4, 0x94, 0xa4, 0x34, 0x4, 0x54, 0x64, 0x9c, 0xac, 0xfc, 0xcc, 0x5c, 0x6c, 0x3c, 0xc, 0x1, 0x31, 0x61, 0x51, 0xc1, 0xf1, 0xa1, 0x91, 0xbb, 0x8b, 0xdb, 0xeb, 0x7b, 0x4b, 0x1b, 0x2b, 0x26, 0x16, 0x46, 0x76, 0xe6, 0xd6, 0x86, 0xb6, 0xd2, 0xe2, 0xb2, 0x82, 0x12, 0x22, 0x72, 0x42, 0x4f, 0x7f, 0x2f, 0x1f, 0x8f, 0xbf, 0xef, 0xdf, 0xf5, 0xc5, 0x95, 0xa5, 0x35, 0x5, 0x55, 0x65, 0x68, 0x58, 0x8, 0x38, 0xa8, 0x98, 0xc8, 0xf8, 0x25, 0x15, 0x45, 0x75, 0xe5, 0xd5, 0x85, 0xb5, 0xb8, 0x88, 0xd8, 0xe8, 0x78, 0x48, 0x18, 0x28, 0x2, 0x32, 0x62, 0x52, 0xc2, 0xf2, 0xa2, 0x92, 0x9f, 0xaf, 0xff, 0xcf, 0x5f, 0x6f, 0x3f, 0xf, 0x6b, 0x5b, 0xb, 0x3b, 0xab, 0x9b, 0xcb, 0xfb, 0xf6, 0xc6, 0x96, 0xa6, 0x36, 0x6, 0x56, 0x66, 0x4c, 0x7c, 0x2c, 0x1c, 0x8c, 0xbc, 0xec, 0xdc, 0xd1, 0xe1, 0xb1, 0x81, 0x11, 0x21, 0x71, 0x41, 0xb9, 0x89, 0xd9, 0xe9, 0x79, 0x49, 0x19, 0x29, 0x24, 0x14, 0x44, 0x74, 0xe4, 0xd4, 0x84, 0xb4, 0x9e, 0xae, 0xfe, 0xce, 0x5e, 0x6e, 0x3e, 0xe, 0x3, 0x33, 0x63, 0x53, 0xc3, 0xf3, 0xa3, 0x93, 0xf7, 0xc7, 0x97, 0xa7, 0x37, 0x7, 0x57, 0x67, 0x6a, 0x5a, 0xa, 0x3a, 0xaa, 0x9a, 0xca, 0xfa, 0xd0, 0xe0, 0xb0, 0x80, 0x10, 0x20, 0x70, 0x40, 0x4d, 0x7d, 0x2d, 0x1d, 0x8d, 0xbd, 0xed, 0xdd}, + {0x0, 0x31, 0x62, 0x53, 0xc4, 0xf5, 0xa6, 0x97, 0x95, 0xa4, 0xf7, 0xc6, 0x51, 0x60, 0x33, 0x2, 0x37, 0x6, 0x55, 0x64, 0xf3, 0xc2, 0x91, 0xa0, 0xa2, 0x93, 0xc0, 0xf1, 0x66, 0x57, 0x4, 0x35, 0x6e, 0x5f, 0xc, 0x3d, 0xaa, 0x9b, 0xc8, 0xf9, 0xfb, 0xca, 0x99, 0xa8, 0x3f, 0xe, 0x5d, 0x6c, 0x59, 0x68, 0x3b, 0xa, 0x9d, 0xac, 0xff, 0xce, 0xcc, 0xfd, 0xae, 0x9f, 0x8, 0x39, 0x6a, 0x5b, 0xdc, 0xed, 0xbe, 0x8f, 0x18, 0x29, 0x7a, 0x4b, 0x49, 0x78, 0x2b, 0x1a, 0x8d, 0xbc, 0xef, 0xde, 0xeb, 0xda, 0x89, 0xb8, 0x2f, 0x1e, 0x4d, 0x7c, 0x7e, 0x4f, 0x1c, 0x2d, 0xba, 0x8b, 0xd8, 0xe9, 0xb2, 0x83, 0xd0, 0xe1, 0x76, 0x47, 0x14, 0x25, 0x27, 0x16, 0x45, 0x74, 0xe3, 0xd2, 0x81, 0xb0, 0x85, 0xb4, 0xe7, 0xd6, 0x41, 0x70, 0x23, 0x12, 0x10, 0x21, 0x72, 0x43, 0xd4, 0xe5, 0xb6, 0x87, 0xa5, 0x94, 0xc7, 0xf6, 0x61, 0x50, 0x3, 0x32, 0x30, 0x1, 0x52, 0x63, 0xf4, 0xc5, 0x96, 0xa7, 0x92, 0xa3, 0xf0, 0xc1, 0x56, 0x67, 0x34, 0x5, 0x7, 0x36, 0x65, 0x54, 0xc3, 0xf2, 0xa1, 0x90, 0xcb, 0xfa, 0xa9, 0x98, 0xf, 0x3e, 0x6d, 0x5c, 0x5e, 0x6f, 0x3c, 0xd, 0x9a, 0xab, 0xf8, 0xc9, 0xfc, 0xcd, 0x9e, 0xaf, 0x38, 0x9, 0x5a, 0x6b, 0x69, 0x58, 0xb, 0x3a, 0xad, 0x9c, 0xcf, 0xfe, 0x79, 0x48, 0x1b, 0x2a, 0xbd, 0x8c, 0xdf, 0xee, 0xec, 0xdd, 0x8e, 0xbf, 0x28, 0x19, 0x4a, 0x7b, 0x4e, 0x7f, 0x2c, 0x1d, 0x8a, 0xbb, 0xe8, 0xd9, 0xdb, 0xea, 0xb9, 0x88, 0x1f, 0x2e, 0x7d, 0x4c, 0x17, 0x26, 0x75, 0x44, 0xd3, 0xe2, 0xb1, 0x80, 0x82, 0xb3, 0xe0, 0xd1, 0x46, 0x77, 0x24, 0x15, 0x20, 0x11, 0x42, 0x73, 0xe4, 0xd5, 0x86, 0xb7, 0xb5, 0x84, 0xd7, 0xe6, 0x71, 0x40, 0x13, 0x22}, + {0x0, 0x32, 0x64, 0x56, 0xc8, 0xfa, 0xac, 0x9e, 0x8d, 0xbf, 0xe9, 0xdb, 0x45, 0x77, 0x21, 0x13, 0x7, 0x35, 0x63, 0x51, 0xcf, 0xfd, 0xab, 0x99, 0x8a, 0xb8, 0xee, 0xdc, 0x42, 0x70, 0x26, 0x14, 0xe, 0x3c, 0x6a, 0x58, 0xc6, 0xf4, 0xa2, 0x90, 0x83, 0xb1, 0xe7, 0xd5, 0x4b, 0x79, 0x2f, 0x1d, 0x9, 0x3b, 0x6d, 0x5f, 0xc1, 0xf3, 0xa5, 0x97, 0x84, 0xb6, 0xe0, 0xd2, 0x4c, 0x7e, 0x28, 0x1a, 0x1c, 0x2e, 0x78, 0x4a, 0xd4, 0xe6, 0xb0, 0x82, 0x91, 0xa3, 0xf5, 0xc7, 0x59, 0x6b, 0x3d, 0xf, 0x1b, 0x29, 0x7f, 0x4d, 0xd3, 0xe1, 0xb7, 0x85, 0x96, 0xa4, 0xf2, 0xc0, 0x5e, 0x6c, 0x3a, 0x8, 0x12, 0x20, 0x76, 0x44, 0xda, 0xe8, 0xbe, 0x8c, 0x9f, 0xad, 0xfb, 0xc9, 0x57, 0x65, 0x33, 0x1, 0x15, 0x27, 0x71, 0x43, 0xdd, 0xef, 0xb9, 0x8b, 0x98, 0xaa, 0xfc, 0xce, 0x50, 0x62, 0x34, 0x6, 0x38, 0xa, 0x5c, 0x6e, 0xf0, 0xc2, 0x94, 0xa6, 0xb5, 0x87, 0xd1, 0xe3, 0x7d, 0x4f, 0x19, 0x2b, 0x3f, 0xd, 0x5b, 0x69, 0xf7, 0xc5, 0x93, 0xa1, 0xb2, 0x80, 0xd6, 0xe4, 0x7a, 0x48, 0x1e, 0x2c, 0x36, 0x4, 0x52, 0x60, 0xfe, 0xcc, 0x9a, 0xa8, 0xbb, 0x89, 0xdf, 0xed, 0x73, 0x41, 0x17, 0x25, 0x31, 0x3, 0x55, 0x67, 0xf9, 0xcb, 0x9d, 0xaf, 0xbc, 0x8e, 0xd8, 0xea, 0x74, 0x46, 0x10, 0x22, 0x24, 0x16, 0x40, 0x72, 0xec, 0xde, 0x88, 0xba, 0xa9, 0x9b, 0xcd, 0xff, 0x61, 0x53, 0x5, 0x37, 0x23, 0x11, 0x47, 0x75, 0xeb, 0xd9, 0x8f, 0xbd, 0xae, 0x9c, 0xca, 0xf8, 0x66, 0x54, 0x2, 0x30, 0x2a, 0x18, 0x4e, 0x7c, 0xe2, 0xd0, 0x86, 0xb4, 0xa7, 0x95, 0xc3, 0xf1, 0x6f, 0x5d, 0xb, 0x39, 0x2d, 0x1f, 0x49, 0x7b, 0xe5, 0xd7, 0x81, 0xb3, 0xa0, 0x92, 0xc4, 0xf6, 0x68, 0x5a, 0xc, 0x3e}, + {0x0, 0x33, 0x66, 0x55, 0xcc, 0xff, 0xaa, 0x99, 0x85, 0xb6, 0xe3, 0xd0, 0x49, 0x7a, 0x2f, 0x1c, 0x17, 0x24, 0x71, 0x42, 0xdb, 0xe8, 0xbd, 0x8e, 0x92, 0xa1, 0xf4, 0xc7, 0x5e, 0x6d, 0x38, 0xb, 0x2e, 0x1d, 0x48, 0x7b, 0xe2, 0xd1, 0x84, 0xb7, 0xab, 0x98, 0xcd, 0xfe, 0x67, 0x54, 0x1, 0x32, 0x39, 0xa, 0x5f, 0x6c, 0xf5, 0xc6, 0x93, 0xa0, 0xbc, 0x8f, 0xda, 0xe9, 0x70, 0x43, 0x16, 0x25, 0x5c, 0x6f, 0x3a, 0x9, 0x90, 0xa3, 0xf6, 0xc5, 0xd9, 0xea, 0xbf, 0x8c, 0x15, 0x26, 0x73, 0x40, 0x4b, 0x78, 0x2d, 0x1e, 0x87, 0xb4, 0xe1, 0xd2, 0xce, 0xfd, 0xa8, 0x9b, 0x2, 0x31, 0x64, 0x57, 0x72, 0x41, 0x14, 0x27, 0xbe, 0x8d, 0xd8, 0xeb, 0xf7, 0xc4, 0x91, 0xa2, 0x3b, 0x8, 0x5d, 0x6e, 0x65, 0x56, 0x3, 0x30, 0xa9, 0x9a, 0xcf, 0xfc, 0xe0, 0xd3, 0x86, 0xb5, 0x2c, 0x1f, 0x4a, 0x79, 0xb8, 0x8b, 0xde, 0xed, 0x74, 0x47, 0x12, 0x21, 0x3d, 0xe, 0x5b, 0x68, 0xf1, 0xc2, 0x97, 0xa4, 0xaf, 0x9c, 0xc9, 0xfa, 0x63, 0x50, 0x5, 0x36, 0x2a, 0x19, 0x4c, 0x7f, 0xe6, 0xd5, 0x80, 0xb3, 0x96, 0xa5, 0xf0, 0xc3, 0x5a, 0x69, 0x3c, 0xf, 0x13, 0x20, 0x75, 0x46, 0xdf, 0xec, 0xb9, 0x8a, 0x81, 0xb2, 0xe7, 0xd4, 0x4d, 0x7e, 0x2b, 0x18, 0x4, 0x37, 0x62, 0x51, 0xc8, 0xfb, 0xae, 0x9d, 0xe4, 0xd7, 0x82, 0xb1, 0x28, 0x1b, 0x4e, 0x7d, 0x61, 0x52, 0x7, 0x34, 0xad, 0x9e, 0xcb, 0xf8, 0xf3, 0xc0, 0x95, 0xa6, 0x3f, 0xc, 0x59, 0x6a, 0x76, 0x45, 0x10, 0x23, 0xba, 0x89, 0xdc, 0xef, 0xca, 0xf9, 0xac, 0x9f, 0x6, 0x35, 0x60, 0x53, 0x4f, 0x7c, 0x29, 0x1a, 0x83, 0xb0, 0xe5, 0xd6, 0xdd, 0xee, 0xbb, 0x88, 0x11, 0x22, 0x77, 0x44, 0x58, 0x6b, 0x3e, 0xd, 0x94, 0xa7, 0xf2, 0xc1}, + {0x0, 0x34, 0x68, 0x5c, 0xd0, 0xe4, 0xb8, 0x8c, 0xbd, 0x89, 0xd5, 0xe1, 0x6d, 0x59, 0x5, 0x31, 0x67, 0x53, 0xf, 0x3b, 0xb7, 0x83, 0xdf, 0xeb, 0xda, 0xee, 0xb2, 0x86, 0xa, 0x3e, 0x62, 0x56, 0xce, 0xfa, 0xa6, 0x92, 0x1e, 0x2a, 0x76, 0x42, 0x73, 0x47, 0x1b, 0x2f, 0xa3, 0x97, 0xcb, 0xff, 0xa9, 0x9d, 0xc1, 0xf5, 0x79, 0x4d, 0x11, 0x25, 0x14, 0x20, 0x7c, 0x48, 0xc4, 0xf0, 0xac, 0x98, 0x81, 0xb5, 0xe9, 0xdd, 0x51, 0x65, 0x39, 0xd, 0x3c, 0x8, 0x54, 0x60, 0xec, 0xd8, 0x84, 0xb0, 0xe6, 0xd2, 0x8e, 0xba, 0x36, 0x2, 0x5e, 0x6a, 0x5b, 0x6f, 0x33, 0x7, 0x8b, 0xbf, 0xe3, 0xd7, 0x4f, 0x7b, 0x27, 0x13, 0x9f, 0xab, 0xf7, 0xc3, 0xf2, 0xc6, 0x9a, 0xae, 0x22, 0x16, 0x4a, 0x7e, 0x28, 0x1c, 0x40, 0x74, 0xf8, 0xcc, 0x90, 0xa4, 0x95, 0xa1, 0xfd, 0xc9, 0x45, 0x71, 0x2d, 0x19, 0x1f, 0x2b, 0x77, 0x43, 0xcf, 0xfb, 0xa7, 0x93, 0xa2, 0x96, 0xca, 0xfe, 0x72, 0x46, 0x1a, 0x2e, 0x78, 0x4c, 0x10, 0x24, 0xa8, 0x9c, 0xc0, 0xf4, 0xc5, 0xf1, 0xad, 0x99, 0x15, 0x21, 0x7d, 0x49, 0xd1, 0xe5, 0xb9, 0x8d, 0x1, 0x35, 0x69, 0x5d, 0x6c, 0x58, 0x4, 0x30, 0xbc, 0x88, 0xd4, 0xe0, 0xb6, 0x82, 0xde, 0xea, 0x66, 0x52, 0xe, 0x3a, 0xb, 0x3f, 0x63, 0x57, 0xdb, 0xef, 0xb3, 0x87, 0x9e, 0xaa, 0xf6, 0xc2, 0x4e, 0x7a, 0x26, 0x12, 0x23, 0x17, 0x4b, 0x7f, 0xf3, 0xc7, 0x9b, 0xaf, 0xf9, 0xcd, 0x91, 0xa5, 0x29, 0x1d, 0x41, 0x75, 0x44, 0x70, 0x2c, 0x18, 0x94, 0xa0, 0xfc, 0xc8, 0x50, 0x64, 0x38, 0xc, 0x80, 0xb4, 0xe8, 0xdc, 0xed, 0xd9, 0x85, 0xb1, 0x3d, 0x9, 0x55, 0x61, 0x37, 0x3, 0x5f, 0x6b, 0xe7, 0xd3, 0x8f, 0xbb, 0x8a, 0xbe, 0xe2, 0xd6, 0x5a, 0x6e, 0x32, 0x6}, + {0x0, 0x35, 0x6a, 0x5f, 0xd4, 0xe1, 0xbe, 0x8b, 0xb5, 0x80, 0xdf, 0xea, 0x61, 0x54, 0xb, 0x3e, 0x77, 0x42, 0x1d, 0x28, 0xa3, 0x96, 0xc9, 0xfc, 0xc2, 0xf7, 0xa8, 0x9d, 0x16, 0x23, 0x7c, 0x49, 0xee, 0xdb, 0x84, 0xb1, 0x3a, 0xf, 0x50, 0x65, 0x5b, 0x6e, 0x31, 0x4, 0x8f, 0xba, 0xe5, 0xd0, 0x99, 0xac, 0xf3, 0xc6, 0x4d, 0x78, 0x27, 0x12, 0x2c, 0x19, 0x46, 0x73, 0xf8, 0xcd, 0x92, 0xa7, 0xc1, 0xf4, 0xab, 0x9e, 0x15, 0x20, 0x7f, 0x4a, 0x74, 0x41, 0x1e, 0x2b, 0xa0, 0x95, 0xca, 0xff, 0xb6, 0x83, 0xdc, 0xe9, 0x62, 0x57, 0x8, 0x3d, 0x3, 0x36, 0x69, 0x5c, 0xd7, 0xe2, 0xbd, 0x88, 0x2f, 0x1a, 0x45, 0x70, 0xfb, 0xce, 0x91, 0xa4, 0x9a, 0xaf, 0xf0, 0xc5, 0x4e, 0x7b, 0x24, 0x11, 0x58, 0x6d, 0x32, 0x7, 0x8c, 0xb9, 0xe6, 0xd3, 0xed, 0xd8, 0x87, 0xb2, 0x39, 0xc, 0x53, 0x66, 0x9f, 0xaa, 0xf5, 0xc0, 0x4b, 0x7e, 0x21, 0x14, 0x2a, 0x1f, 0x40, 0x75, 0xfe, 0xcb, 0x94, 0xa1, 0xe8, 0xdd, 0x82, 0xb7, 0x3c, 0x9, 0x56, 0x63, 0x5d, 0x68, 0x37, 0x2, 0x89, 0xbc, 0xe3, 0xd6, 0x71, 0x44, 0x1b, 0x2e, 0xa5, 0x90, 0xcf, 0xfa, 0xc4, 0xf1, 0xae, 0x9b, 0x10, 0x25, 0x7a, 0x4f, 0x6, 0x33, 0x6c, 0x59, 0xd2, 0xe7, 0xb8, 0x8d, 0xb3, 0x86, 0xd9, 0xec, 0x67, 0x52, 0xd, 0x38, 0x5e, 0x6b, 0x34, 0x1, 0x8a, 0xbf, 0xe0, 0xd5, 0xeb, 0xde, 0x81, 0xb4, 0x3f, 0xa, 0x55, 0x60, 0x29, 0x1c, 0x43, 0x76, 0xfd, 0xc8, 0x97, 0xa2, 0x9c, 0xa9, 0xf6, 0xc3, 0x48, 0x7d, 0x22, 0x17, 0xb0, 0x85, 0xda, 0xef, 0x64, 0x51, 0xe, 0x3b, 0x5, 0x30, 0x6f, 0x5a, 0xd1, 0xe4, 0xbb, 0x8e, 0xc7, 0xf2, 0xad, 0x98, 0x13, 0x26, 0x79, 0x4c, 0x72, 0x47, 0x18, 0x2d, 0xa6, 0x93, 0xcc, 0xf9}, + {0x0, 0x36, 0x6c, 0x5a, 0xd8, 0xee, 0xb4, 0x82, 0xad, 0x9b, 0xc1, 0xf7, 0x75, 0x43, 0x19, 0x2f, 0x47, 0x71, 0x2b, 0x1d, 0x9f, 0xa9, 0xf3, 0xc5, 0xea, 0xdc, 0x86, 0xb0, 0x32, 0x4, 0x5e, 0x68, 0x8e, 0xb8, 0xe2, 0xd4, 0x56, 0x60, 0x3a, 0xc, 0x23, 0x15, 0x4f, 0x79, 0xfb, 0xcd, 0x97, 0xa1, 0xc9, 0xff, 0xa5, 0x93, 0x11, 0x27, 0x7d, 0x4b, 0x64, 0x52, 0x8, 0x3e, 0xbc, 0x8a, 0xd0, 0xe6, 0x1, 0x37, 0x6d, 0x5b, 0xd9, 0xef, 0xb5, 0x83, 0xac, 0x9a, 0xc0, 0xf6, 0x74, 0x42, 0x18, 0x2e, 0x46, 0x70, 0x2a, 0x1c, 0x9e, 0xa8, 0xf2, 0xc4, 0xeb, 0xdd, 0x87, 0xb1, 0x33, 0x5, 0x5f, 0x69, 0x8f, 0xb9, 0xe3, 0xd5, 0x57, 0x61, 0x3b, 0xd, 0x22, 0x14, 0x4e, 0x78, 0xfa, 0xcc, 0x96, 0xa0, 0xc8, 0xfe, 0xa4, 0x92, 0x10, 0x26, 0x7c, 0x4a, 0x65, 0x53, 0x9, 0x3f, 0xbd, 0x8b, 0xd1, 0xe7, 0x2, 0x34, 0x6e, 0x58, 0xda, 0xec, 0xb6, 0x80, 0xaf, 0x99, 0xc3, 0xf5, 0x77, 0x41, 0x1b, 0x2d, 0x45, 0x73, 0x29, 0x1f, 0x9d, 0xab, 0xf1, 0xc7, 0xe8, 0xde, 0x84, 0xb2, 0x30, 0x6, 0x5c, 0x6a, 0x8c, 0xba, 0xe0, 0xd6, 0x54, 0x62, 0x38, 0xe, 0x21, 0x17, 0x4d, 0x7b, 0xf9, 0xcf, 0x95, 0xa3, 0xcb, 0xfd, 0xa7, 0x91, 0x13, 0x25, 0x7f, 0x49, 0x66, 0x50, 0xa, 0x3c, 0xbe, 0x88, 0xd2, 0xe4, 0x3, 0x35, 0x6f, 0x59, 0xdb, 0xed, 0xb7, 0x81, 0xae, 0x98, 0xc2, 0xf4, 0x76, 0x40, 0x1a, 0x2c, 0x44, 0x72, 0x28, 0x1e, 0x9c, 0xaa, 0xf0, 0xc6, 0xe9, 0xdf, 0x85, 0xb3, 0x31, 0x7, 0x5d, 0x6b, 0x8d, 0xbb, 0xe1, 0xd7, 0x55, 0x63, 0x39, 0xf, 0x20, 0x16, 0x4c, 0x7a, 0xf8, 0xce, 0x94, 0xa2, 0xca, 0xfc, 0xa6, 0x90, 0x12, 0x24, 0x7e, 0x48, 0x67, 0x51, 0xb, 0x3d, 0xbf, 0x89, 0xd3, 0xe5}, + {0x0, 0x37, 0x6e, 0x59, 0xdc, 0xeb, 0xb2, 0x85, 0xa5, 0x92, 0xcb, 0xfc, 0x79, 0x4e, 0x17, 0x20, 0x57, 0x60, 0x39, 0xe, 0x8b, 0xbc, 0xe5, 0xd2, 0xf2, 0xc5, 0x9c, 0xab, 0x2e, 0x19, 0x40, 0x77, 0xae, 0x99, 0xc0, 0xf7, 0x72, 0x45, 0x1c, 0x2b, 0xb, 0x3c, 0x65, 0x52, 0xd7, 0xe0, 0xb9, 0x8e, 0xf9, 0xce, 0x97, 0xa0, 0x25, 0x12, 0x4b, 0x7c, 0x5c, 0x6b, 0x32, 0x5, 0x80, 0xb7, 0xee, 0xd9, 0x41, 0x76, 0x2f, 0x18, 0x9d, 0xaa, 0xf3, 0xc4, 0xe4, 0xd3, 0x8a, 0xbd, 0x38, 0xf, 0x56, 0x61, 0x16, 0x21, 0x78, 0x4f, 0xca, 0xfd, 0xa4, 0x93, 0xb3, 0x84, 0xdd, 0xea, 0x6f, 0x58, 0x1, 0x36, 0xef, 0xd8, 0x81, 0xb6, 0x33, 0x4, 0x5d, 0x6a, 0x4a, 0x7d, 0x24, 0x13, 0x96, 0xa1, 0xf8, 0xcf, 0xb8, 0x8f, 0xd6, 0xe1, 0x64, 0x53, 0xa, 0x3d, 0x1d, 0x2a, 0x73, 0x44, 0xc1, 0xf6, 0xaf, 0x98, 0x82, 0xb5, 0xec, 0xdb, 0x5e, 0x69, 0x30, 0x7, 0x27, 0x10, 0x49, 0x7e, 0xfb, 0xcc, 0x95, 0xa2, 0xd5, 0xe2, 0xbb, 0x8c, 0x9, 0x3e, 0x67, 0x50, 0x70, 0x47, 0x1e, 0x29, 0xac, 0x9b, 0xc2, 0xf5, 0x2c, 0x1b, 0x42, 0x75, 0xf0, 0xc7, 0x9e, 0xa9, 0x89, 0xbe, 0xe7, 0xd0, 0x55, 0x62, 0x3b, 0xc, 0x7b, 0x4c, 0x15, 0x22, 0xa7, 0x90, 0xc9, 0xfe, 0xde, 0xe9, 0xb0, 0x87, 0x2, 0x35, 0x6c, 0x5b, 0xc3, 0xf4, 0xad, 0x9a, 0x1f, 0x28, 0x71, 0x46, 0x66, 0x51, 0x8, 0x3f, 0xba, 0x8d, 0xd4, 0xe3, 0x94, 0xa3, 0xfa, 0xcd, 0x48, 0x7f, 0x26, 0x11, 0x31, 0x6, 0x5f, 0x68, 0xed, 0xda, 0x83, 0xb4, 0x6d, 0x5a, 0x3, 0x34, 0xb1, 0x86, 0xdf, 0xe8, 0xc8, 0xff, 0xa6, 0x91, 0x14, 0x23, 0x7a, 0x4d, 0x3a, 0xd, 0x54, 0x63, 0xe6, 0xd1, 0x88, 0xbf, 0x9f, 0xa8, 0xf1, 0xc6, 0x43, 0x74, 0x2d, 0x1a}, + {0x0, 0x38, 0x70, 0x48, 0xe0, 0xd8, 0x90, 0xa8, 0xdd, 0xe5, 0xad, 0x95, 0x3d, 0x5, 0x4d, 0x75, 0xa7, 0x9f, 0xd7, 0xef, 0x47, 0x7f, 0x37, 0xf, 0x7a, 0x42, 0xa, 0x32, 0x9a, 0xa2, 0xea, 0xd2, 0x53, 0x6b, 0x23, 0x1b, 0xb3, 0x8b, 0xc3, 0xfb, 0x8e, 0xb6, 0xfe, 0xc6, 0x6e, 0x56, 0x1e, 0x26, 0xf4, 0xcc, 0x84, 0xbc, 0x14, 0x2c, 0x64, 0x5c, 0x29, 0x11, 0x59, 0x61, 0xc9, 0xf1, 0xb9, 0x81, 0xa6, 0x9e, 0xd6, 0xee, 0x46, 0x7e, 0x36, 0xe, 0x7b, 0x43, 0xb, 0x33, 0x9b, 0xa3, 0xeb, 0xd3, 0x1, 0x39, 0x71, 0x49, 0xe1, 0xd9, 0x91, 0xa9, 0xdc, 0xe4, 0xac, 0x94, 0x3c, 0x4, 0x4c, 0x74, 0xf5, 0xcd, 0x85, 0xbd, 0x15, 0x2d, 0x65, 0x5d, 0x28, 0x10, 0x58, 0x60, 0xc8, 0xf0, 0xb8, 0x80, 0x52, 0x6a, 0x22, 0x1a, 0xb2, 0x8a, 0xc2, 0xfa, 0x8f, 0xb7, 0xff, 0xc7, 0x6f, 0x57, 0x1f, 0x27, 0x51, 0x69, 0x21, 0x19, 0xb1, 0x89, 0xc1, 0xf9, 0x8c, 0xb4, 0xfc, 0xc4, 0x6c, 0x54, 0x1c, 0x24, 0xf6, 0xce, 0x86, 0xbe, 0x16, 0x2e, 0x66, 0x5e, 0x2b, 0x13, 0x5b, 0x63, 0xcb, 0xf3, 0xbb, 0x83, 0x2, 0x3a, 0x72, 0x4a, 0xe2, 0xda, 0x92, 0xaa, 0xdf, 0xe7, 0xaf, 0x97, 0x3f, 0x7, 0x4f, 0x77, 0xa5, 0x9d, 0xd5, 0xed, 0x45, 0x7d, 0x35, 0xd, 0x78, 0x40, 0x8, 0x30, 0x98, 0xa0, 0xe8, 0xd0, 0xf7, 0xcf, 0x87, 0xbf, 0x17, 0x2f, 0x67, 0x5f, 0x2a, 0x12, 0x5a, 0x62, 0xca, 0xf2, 0xba, 0x82, 0x50, 0x68, 0x20, 0x18, 0xb0, 0x88, 0xc0, 0xf8, 0x8d, 0xb5, 0xfd, 0xc5, 0x6d, 0x55, 0x1d, 0x25, 0xa4, 0x9c, 0xd4, 0xec, 0x44, 0x7c, 0x34, 0xc, 0x79, 0x41, 0x9, 0x31, 0x99, 0xa1, 0xe9, 0xd1, 0x3, 0x3b, 0x73, 0x4b, 0xe3, 0xdb, 0x93, 0xab, 0xde, 0xe6, 0xae, 0x96, 0x3e, 0x6, 0x4e, 0x76}, + {0x0, 0x39, 0x72, 0x4b, 0xe4, 0xdd, 0x96, 0xaf, 0xd5, 0xec, 0xa7, 0x9e, 0x31, 0x8, 0x43, 0x7a, 0xb7, 0x8e, 0xc5, 0xfc, 0x53, 0x6a, 0x21, 0x18, 0x62, 0x5b, 0x10, 0x29, 0x86, 0xbf, 0xf4, 0xcd, 0x73, 0x4a, 0x1, 0x38, 0x97, 0xae, 0xe5, 0xdc, 0xa6, 0x9f, 0xd4, 0xed, 0x42, 0x7b, 0x30, 0x9, 0xc4, 0xfd, 0xb6, 0x8f, 0x20, 0x19, 0x52, 0x6b, 0x11, 0x28, 0x63, 0x5a, 0xf5, 0xcc, 0x87, 0xbe, 0xe6, 0xdf, 0x94, 0xad, 0x2, 0x3b, 0x70, 0x49, 0x33, 0xa, 0x41, 0x78, 0xd7, 0xee, 0xa5, 0x9c, 0x51, 0x68, 0x23, 0x1a, 0xb5, 0x8c, 0xc7, 0xfe, 0x84, 0xbd, 0xf6, 0xcf, 0x60, 0x59, 0x12, 0x2b, 0x95, 0xac, 0xe7, 0xde, 0x71, 0x48, 0x3, 0x3a, 0x40, 0x79, 0x32, 0xb, 0xa4, 0x9d, 0xd6, 0xef, 0x22, 0x1b, 0x50, 0x69, 0xc6, 0xff, 0xb4, 0x8d, 0xf7, 0xce, 0x85, 0xbc, 0x13, 0x2a, 0x61, 0x58, 0xd1, 0xe8, 0xa3, 0x9a, 0x35, 0xc, 0x47, 0x7e, 0x4, 0x3d, 0x76, 0x4f, 0xe0, 0xd9, 0x92, 0xab, 0x66, 0x5f, 0x14, 0x2d, 0x82, 0xbb, 0xf0, 0xc9, 0xb3, 0x8a, 0xc1, 0xf8, 0x57, 0x6e, 0x25, 0x1c, 0xa2, 0x9b, 0xd0, 0xe9, 0x46, 0x7f, 0x34, 0xd, 0x77, 0x4e, 0x5, 0x3c, 0x93, 0xaa, 0xe1, 0xd8, 0x15, 0x2c, 0x67, 0x5e, 0xf1, 0xc8, 0x83, 0xba, 0xc0, 0xf9, 0xb2, 0x8b, 0x24, 0x1d, 0x56, 0x6f, 0x37, 0xe, 0x45, 0x7c, 0xd3, 0xea, 0xa1, 0x98, 0xe2, 0xdb, 0x90, 0xa9, 0x6, 0x3f, 0x74, 0x4d, 0x80, 0xb9, 0xf2, 0xcb, 0x64, 0x5d, 0x16, 0x2f, 0x55, 0x6c, 0x27, 0x1e, 0xb1, 0x88, 0xc3, 0xfa, 0x44, 0x7d, 0x36, 0xf, 0xa0, 0x99, 0xd2, 0xeb, 0x91, 0xa8, 0xe3, 0xda, 0x75, 0x4c, 0x7, 0x3e, 0xf3, 0xca, 0x81, 0xb8, 0x17, 0x2e, 0x65, 0x5c, 0x26, 0x1f, 0x54, 0x6d, 0xc2, 0xfb, 0xb0, 0x89}, + {0x0, 0x3a, 0x74, 0x4e, 0xe8, 0xd2, 0x9c, 0xa6, 0xcd, 0xf7, 0xb9, 0x83, 0x25, 0x1f, 0x51, 0x6b, 0x87, 0xbd, 0xf3, 0xc9, 0x6f, 0x55, 0x1b, 0x21, 0x4a, 0x70, 0x3e, 0x4, 0xa2, 0x98, 0xd6, 0xec, 0x13, 0x29, 0x67, 0x5d, 0xfb, 0xc1, 0x8f, 0xb5, 0xde, 0xe4, 0xaa, 0x90, 0x36, 0xc, 0x42, 0x78, 0x94, 0xae, 0xe0, 0xda, 0x7c, 0x46, 0x8, 0x32, 0x59, 0x63, 0x2d, 0x17, 0xb1, 0x8b, 0xc5, 0xff, 0x26, 0x1c, 0x52, 0x68, 0xce, 0xf4, 0xba, 0x80, 0xeb, 0xd1, 0x9f, 0xa5, 0x3, 0x39, 0x77, 0x4d, 0xa1, 0x9b, 0xd5, 0xef, 0x49, 0x73, 0x3d, 0x7, 0x6c, 0x56, 0x18, 0x22, 0x84, 0xbe, 0xf0, 0xca, 0x35, 0xf, 0x41, 0x7b, 0xdd, 0xe7, 0xa9, 0x93, 0xf8, 0xc2, 0x8c, 0xb6, 0x10, 0x2a, 0x64, 0x5e, 0xb2, 0x88, 0xc6, 0xfc, 0x5a, 0x60, 0x2e, 0x14, 0x7f, 0x45, 0xb, 0x31, 0x97, 0xad, 0xe3, 0xd9, 0x4c, 0x76, 0x38, 0x2, 0xa4, 0x9e, 0xd0, 0xea, 0x81, 0xbb, 0xf5, 0xcf, 0x69, 0x53, 0x1d, 0x27, 0xcb, 0xf1, 0xbf, 0x85, 0x23, 0x19, 0x57, 0x6d, 0x6, 0x3c, 0x72, 0x48, 0xee, 0xd4, 0x9a, 0xa0, 0x5f, 0x65, 0x2b, 0x11, 0xb7, 0x8d, 0xc3, 0xf9, 0x92, 0xa8, 0xe6, 0xdc, 0x7a, 0x40, 0xe, 0x34, 0xd8, 0xe2, 0xac, 0x96, 0x30, 0xa, 0x44, 0x7e, 0x15, 0x2f, 0x61, 0x5b, 0xfd, 0xc7, 0x89, 0xb3, 0x6a, 0x50, 0x1e, 0x24, 0x82, 0xb8, 0xf6, 0xcc, 0xa7, 0x9d, 0xd3, 0xe9, 0x4f, 0x75, 0x3b, 0x1, 0xed, 0xd7, 0x99, 0xa3, 0x5, 0x3f, 0x71, 0x4b, 0x20, 0x1a, 0x54, 0x6e, 0xc8, 0xf2, 0xbc, 0x86, 0x79, 0x43, 0xd, 0x37, 0x91, 0xab, 0xe5, 0xdf, 0xb4, 0x8e, 0xc0, 0xfa, 0x5c, 0x66, 0x28, 0x12, 0xfe, 0xc4, 0x8a, 0xb0, 0x16, 0x2c, 0x62, 0x58, 0x33, 0x9, 0x47, 0x7d, 0xdb, 0xe1, 0xaf, 0x95}, + {0x0, 0x3b, 0x76, 0x4d, 0xec, 0xd7, 0x9a, 0xa1, 0xc5, 0xfe, 0xb3, 0x88, 0x29, 0x12, 0x5f, 0x64, 0x97, 0xac, 0xe1, 0xda, 0x7b, 0x40, 0xd, 0x36, 0x52, 0x69, 0x24, 0x1f, 0xbe, 0x85, 0xc8, 0xf3, 0x33, 0x8, 0x45, 0x7e, 0xdf, 0xe4, 0xa9, 0x92, 0xf6, 0xcd, 0x80, 0xbb, 0x1a, 0x21, 0x6c, 0x57, 0xa4, 0x9f, 0xd2, 0xe9, 0x48, 0x73, 0x3e, 0x5, 0x61, 0x5a, 0x17, 0x2c, 0x8d, 0xb6, 0xfb, 0xc0, 0x66, 0x5d, 0x10, 0x2b, 0x8a, 0xb1, 0xfc, 0xc7, 0xa3, 0x98, 0xd5, 0xee, 0x4f, 0x74, 0x39, 0x2, 0xf1, 0xca, 0x87, 0xbc, 0x1d, 0x26, 0x6b, 0x50, 0x34, 0xf, 0x42, 0x79, 0xd8, 0xe3, 0xae, 0x95, 0x55, 0x6e, 0x23, 0x18, 0xb9, 0x82, 0xcf, 0xf4, 0x90, 0xab, 0xe6, 0xdd, 0x7c, 0x47, 0xa, 0x31, 0xc2, 0xf9, 0xb4, 0x8f, 0x2e, 0x15, 0x58, 0x63, 0x7, 0x3c, 0x71, 0x4a, 0xeb, 0xd0, 0x9d, 0xa6, 0xcc, 0xf7, 0xba, 0x81, 0x20, 0x1b, 0x56, 0x6d, 0x9, 0x32, 0x7f, 0x44, 0xe5, 0xde, 0x93, 0xa8, 0x5b, 0x60, 0x2d, 0x16, 0xb7, 0x8c, 0xc1, 0xfa, 0x9e, 0xa5, 0xe8, 0xd3, 0x72, 0x49, 0x4, 0x3f, 0xff, 0xc4, 0x89, 0xb2, 0x13, 0x28, 0x65, 0x5e, 0x3a, 0x1, 0x4c, 0x77, 0xd6, 0xed, 0xa0, 0x9b, 0x68, 0x53, 0x1e, 0x25, 0x84, 0xbf, 0xf2, 0xc9, 0xad, 0x96, 0xdb, 0xe0, 0x41, 0x7a, 0x37, 0xc, 0xaa, 0x91, 0xdc, 0xe7, 0x46, 0x7d, 0x30, 0xb, 0x6f, 0x54, 0x19, 0x22, 0x83, 0xb8, 0xf5, 0xce, 0x3d, 0x6, 0x4b, 0x70, 0xd1, 0xea, 0xa7, 0x9c, 0xf8, 0xc3, 0x8e, 0xb5, 0x14, 0x2f, 0x62, 0x59, 0x99, 0xa2, 0xef, 0xd4, 0x75, 0x4e, 0x3, 0x38, 0x5c, 0x67, 0x2a, 0x11, 0xb0, 0x8b, 0xc6, 0xfd, 0xe, 0x35, 0x78, 0x43, 0xe2, 0xd9, 0x94, 0xaf, 0xcb, 0xf0, 0xbd, 0x86, 0x27, 0x1c, 0x51, 0x6a}, + {0x0, 0x3c, 0x78, 0x44, 0xf0, 0xcc, 0x88, 0xb4, 0xfd, 0xc1, 0x85, 0xb9, 0xd, 0x31, 0x75, 0x49, 0xe7, 0xdb, 0x9f, 0xa3, 0x17, 0x2b, 0x6f, 0x53, 0x1a, 0x26, 0x62, 0x5e, 0xea, 0xd6, 0x92, 0xae, 0xd3, 0xef, 0xab, 0x97, 0x23, 0x1f, 0x5b, 0x67, 0x2e, 0x12, 0x56, 0x6a, 0xde, 0xe2, 0xa6, 0x9a, 0x34, 0x8, 0x4c, 0x70, 0xc4, 0xf8, 0xbc, 0x80, 0xc9, 0xf5, 0xb1, 0x8d, 0x39, 0x5, 0x41, 0x7d, 0xbb, 0x87, 0xc3, 0xff, 0x4b, 0x77, 0x33, 0xf, 0x46, 0x7a, 0x3e, 0x2, 0xb6, 0x8a, 0xce, 0xf2, 0x5c, 0x60, 0x24, 0x18, 0xac, 0x90, 0xd4, 0xe8, 0xa1, 0x9d, 0xd9, 0xe5, 0x51, 0x6d, 0x29, 0x15, 0x68, 0x54, 0x10, 0x2c, 0x98, 0xa4, 0xe0, 0xdc, 0x95, 0xa9, 0xed, 0xd1, 0x65, 0x59, 0x1d, 0x21, 0x8f, 0xb3, 0xf7, 0xcb, 0x7f, 0x43, 0x7, 0x3b, 0x72, 0x4e, 0xa, 0x36, 0x82, 0xbe, 0xfa, 0xc6, 0x6b, 0x57, 0x13, 0x2f, 0x9b, 0xa7, 0xe3, 0xdf, 0x96, 0xaa, 0xee, 0xd2, 0x66, 0x5a, 0x1e, 0x22, 0x8c, 0xb0, 0xf4, 0xc8, 0x7c, 0x40, 0x4, 0x38, 0x71, 0x4d, 0x9, 0x35, 0x81, 0xbd, 0xf9, 0xc5, 0xb8, 0x84, 0xc0, 0xfc, 0x48, 0x74, 0x30, 0xc, 0x45, 0x79, 0x3d, 0x1, 0xb5, 0x89, 0xcd, 0xf1, 0x5f, 0x63, 0x27, 0x1b, 0xaf, 0x93, 0xd7, 0xeb, 0xa2, 0x9e, 0xda, 0xe6, 0x52, 0x6e, 0x2a, 0x16, 0xd0, 0xec, 0xa8, 0x94, 0x20, 0x1c, 0x58, 0x64, 0x2d, 0x11, 0x55, 0x69, 0xdd, 0xe1, 0xa5, 0x99, 0x37, 0xb, 0x4f, 0x73, 0xc7, 0xfb, 0xbf, 0x83, 0xca, 0xf6, 0xb2, 0x8e, 0x3a, 0x6, 0x42, 0x7e, 0x3, 0x3f, 0x7b, 0x47, 0xf3, 0xcf, 0x8b, 0xb7, 0xfe, 0xc2, 0x86, 0xba, 0xe, 0x32, 0x76, 0x4a, 0xe4, 0xd8, 0x9c, 0xa0, 0x14, 0x28, 0x6c, 0x50, 0x19, 0x25, 0x61, 0x5d, 0xe9, 0xd5, 0x91, 0xad}, + {0x0, 0x3d, 0x7a, 0x47, 0xf4, 0xc9, 0x8e, 0xb3, 0xf5, 0xc8, 0x8f, 0xb2, 0x1, 0x3c, 0x7b, 0x46, 0xf7, 0xca, 0x8d, 0xb0, 0x3, 0x3e, 0x79, 0x44, 0x2, 0x3f, 0x78, 0x45, 0xf6, 0xcb, 0x8c, 0xb1, 0xf3, 0xce, 0x89, 0xb4, 0x7, 0x3a, 0x7d, 0x40, 0x6, 0x3b, 0x7c, 0x41, 0xf2, 0xcf, 0x88, 0xb5, 0x4, 0x39, 0x7e, 0x43, 0xf0, 0xcd, 0x8a, 0xb7, 0xf1, 0xcc, 0x8b, 0xb6, 0x5, 0x38, 0x7f, 0x42, 0xfb, 0xc6, 0x81, 0xbc, 0xf, 0x32, 0x75, 0x48, 0xe, 0x33, 0x74, 0x49, 0xfa, 0xc7, 0x80, 0xbd, 0xc, 0x31, 0x76, 0x4b, 0xf8, 0xc5, 0x82, 0xbf, 0xf9, 0xc4, 0x83, 0xbe, 0xd, 0x30, 0x77, 0x4a, 0x8, 0x35, 0x72, 0x4f, 0xfc, 0xc1, 0x86, 0xbb, 0xfd, 0xc0, 0x87, 0xba, 0x9, 0x34, 0x73, 0x4e, 0xff, 0xc2, 0x85, 0xb8, 0xb, 0x36, 0x71, 0x4c, 0xa, 0x37, 0x70, 0x4d, 0xfe, 0xc3, 0x84, 0xb9, 0xeb, 0xd6, 0x91, 0xac, 0x1f, 0x22, 0x65, 0x58, 0x1e, 0x23, 0x64, 0x59, 0xea, 0xd7, 0x90, 0xad, 0x1c, 0x21, 0x66, 0x5b, 0xe8, 0xd5, 0x92, 0xaf, 0xe9, 0xd4, 0x93, 0xae, 0x1d, 0x20, 0x67, 0x5a, 0x18, 0x25, 0x62, 0x5f, 0xec, 0xd1, 0x96, 0xab, 0xed, 0xd0, 0x97, 0xaa, 0x19, 0x24, 0x63, 0x5e, 0xef, 0xd2, 0x95, 0xa8, 0x1b, 0x26, 0x61, 0x5c, 0x1a, 0x27, 0x60, 0x5d, 0xee, 0xd3, 0x94, 0xa9, 0x10, 0x2d, 0x6a, 0x57, 0xe4, 0xd9, 0x9e, 0xa3, 0xe5, 0xd8, 0x9f, 0xa2, 0x11, 0x2c, 0x6b, 0x56, 0xe7, 0xda, 0x9d, 0xa0, 0x13, 0x2e, 0x69, 0x54, 0x12, 0x2f, 0x68, 0x55, 0xe6, 0xdb, 0x9c, 0xa1, 0xe3, 0xde, 0x99, 0xa4, 0x17, 0x2a, 0x6d, 0x50, 0x16, 0x2b, 0x6c, 0x51, 0xe2, 0xdf, 0x98, 0xa5, 0x14, 0x29, 0x6e, 0x53, 0xe0, 0xdd, 0x9a, 0xa7, 0xe1, 0xdc, 0x9b, 0xa6, 0x15, 0x28, 0x6f, 0x52}, + {0x0, 0x3e, 0x7c, 0x42, 0xf8, 0xc6, 0x84, 0xba, 0xed, 0xd3, 0x91, 0xaf, 0x15, 0x2b, 0x69, 0x57, 0xc7, 0xf9, 0xbb, 0x85, 0x3f, 0x1, 0x43, 0x7d, 0x2a, 0x14, 0x56, 0x68, 0xd2, 0xec, 0xae, 0x90, 0x93, 0xad, 0xef, 0xd1, 0x6b, 0x55, 0x17, 0x29, 0x7e, 0x40, 0x2, 0x3c, 0x86, 0xb8, 0xfa, 0xc4, 0x54, 0x6a, 0x28, 0x16, 0xac, 0x92, 0xd0, 0xee, 0xb9, 0x87, 0xc5, 0xfb, 0x41, 0x7f, 0x3d, 0x3, 0x3b, 0x5, 0x47, 0x79, 0xc3, 0xfd, 0xbf, 0x81, 0xd6, 0xe8, 0xaa, 0x94, 0x2e, 0x10, 0x52, 0x6c, 0xfc, 0xc2, 0x80, 0xbe, 0x4, 0x3a, 0x78, 0x46, 0x11, 0x2f, 0x6d, 0x53, 0xe9, 0xd7, 0x95, 0xab, 0xa8, 0x96, 0xd4, 0xea, 0x50, 0x6e, 0x2c, 0x12, 0x45, 0x7b, 0x39, 0x7, 0xbd, 0x83, 0xc1, 0xff, 0x6f, 0x51, 0x13, 0x2d, 0x97, 0xa9, 0xeb, 0xd5, 0x82, 0xbc, 0xfe, 0xc0, 0x7a, 0x44, 0x6, 0x38, 0x76, 0x48, 0xa, 0x34, 0x8e, 0xb0, 0xf2, 0xcc, 0x9b, 0xa5, 0xe7, 0xd9, 0x63, 0x5d, 0x1f, 0x21, 0xb1, 0x8f, 0xcd, 0xf3, 0x49, 0x77, 0x35, 0xb, 0x5c, 0x62, 0x20, 0x1e, 0xa4, 0x9a, 0xd8, 0xe6, 0xe5, 0xdb, 0x99, 0xa7, 0x1d, 0x23, 0x61, 0x5f, 0x8, 0x36, 0x74, 0x4a, 0xf0, 0xce, 0x8c, 0xb2, 0x22, 0x1c, 0x5e, 0x60, 0xda, 0xe4, 0xa6, 0x98, 0xcf, 0xf1, 0xb3, 0x8d, 0x37, 0x9, 0x4b, 0x75, 0x4d, 0x73, 0x31, 0xf, 0xb5, 0x8b, 0xc9, 0xf7, 0xa0, 0x9e, 0xdc, 0xe2, 0x58, 0x66, 0x24, 0x1a, 0x8a, 0xb4, 0xf6, 0xc8, 0x72, 0x4c, 0xe, 0x30, 0x67, 0x59, 0x1b, 0x25, 0x9f, 0xa1, 0xe3, 0xdd, 0xde, 0xe0, 0xa2, 0x9c, 0x26, 0x18, 0x5a, 0x64, 0x33, 0xd, 0x4f, 0x71, 0xcb, 0xf5, 0xb7, 0x89, 0x19, 0x27, 0x65, 0x5b, 0xe1, 0xdf, 0x9d, 0xa3, 0xf4, 0xca, 0x88, 0xb6, 0xc, 0x32, 0x70, 0x4e}, + {0x0, 0x3f, 0x7e, 0x41, 0xfc, 0xc3, 0x82, 0xbd, 0xe5, 0xda, 0x9b, 0xa4, 0x19, 0x26, 0x67, 0x58, 0xd7, 0xe8, 0xa9, 0x96, 0x2b, 0x14, 0x55, 0x6a, 0x32, 0xd, 0x4c, 0x73, 0xce, 0xf1, 0xb0, 0x8f, 0xb3, 0x8c, 0xcd, 0xf2, 0x4f, 0x70, 0x31, 0xe, 0x56, 0x69, 0x28, 0x17, 0xaa, 0x95, 0xd4, 0xeb, 0x64, 0x5b, 0x1a, 0x25, 0x98, 0xa7, 0xe6, 0xd9, 0x81, 0xbe, 0xff, 0xc0, 0x7d, 0x42, 0x3, 0x3c, 0x7b, 0x44, 0x5, 0x3a, 0x87, 0xb8, 0xf9, 0xc6, 0x9e, 0xa1, 0xe0, 0xdf, 0x62, 0x5d, 0x1c, 0x23, 0xac, 0x93, 0xd2, 0xed, 0x50, 0x6f, 0x2e, 0x11, 0x49, 0x76, 0x37, 0x8, 0xb5, 0x8a, 0xcb, 0xf4, 0xc8, 0xf7, 0xb6, 0x89, 0x34, 0xb, 0x4a, 0x75, 0x2d, 0x12, 0x53, 0x6c, 0xd1, 0xee, 0xaf, 0x90, 0x1f, 0x20, 0x61, 0x5e, 0xe3, 0xdc, 0x9d, 0xa2, 0xfa, 0xc5, 0x84, 0xbb, 0x6, 0x39, 0x78, 0x47, 0xf6, 0xc9, 0x88, 0xb7, 0xa, 0x35, 0x74, 0x4b, 0x13, 0x2c, 0x6d, 0x52, 0xef, 0xd0, 0x91, 0xae, 0x21, 0x1e, 0x5f, 0x60, 0xdd, 0xe2, 0xa3, 0x9c, 0xc4, 0xfb, 0xba, 0x85, 0x38, 0x7, 0x46, 0x79, 0x45, 0x7a, 0x3b, 0x4, 0xb9, 0x86, 0xc7, 0xf8, 0xa0, 0x9f, 0xde, 0xe1, 0x5c, 0x63, 0x22, 0x1d, 0x92, 0xad, 0xec, 0xd3, 0x6e, 0x51, 0x10, 0x2f, 0x77, 0x48, 0x9, 0x36, 0x8b, 0xb4, 0xf5, 0xca, 0x8d, 0xb2, 0xf3, 0xcc, 0x71, 0x4e, 0xf, 0x30, 0x68, 0x57, 0x16, 0x29, 0x94, 0xab, 0xea, 0xd5, 0x5a, 0x65, 0x24, 0x1b, 0xa6, 0x99, 0xd8, 0xe7, 0xbf, 0x80, 0xc1, 0xfe, 0x43, 0x7c, 0x3d, 0x2, 0x3e, 0x1, 0x40, 0x7f, 0xc2, 0xfd, 0xbc, 0x83, 0xdb, 0xe4, 0xa5, 0x9a, 0x27, 0x18, 0x59, 0x66, 0xe9, 0xd6, 0x97, 0xa8, 0x15, 0x2a, 0x6b, 0x54, 0xc, 0x33, 0x72, 0x4d, 0xf0, 0xcf, 0x8e, 0xb1}, + {0x0, 0x40, 0x80, 0xc0, 0x1d, 0x5d, 0x9d, 0xdd, 0x3a, 0x7a, 0xba, 0xfa, 0x27, 0x67, 0xa7, 0xe7, 0x74, 0x34, 0xf4, 0xb4, 0x69, 0x29, 0xe9, 0xa9, 0x4e, 0xe, 0xce, 0x8e, 0x53, 0x13, 0xd3, 0x93, 0xe8, 0xa8, 0x68, 0x28, 0xf5, 0xb5, 0x75, 0x35, 0xd2, 0x92, 0x52, 0x12, 0xcf, 0x8f, 0x4f, 0xf, 0x9c, 0xdc, 0x1c, 0x5c, 0x81, 0xc1, 0x1, 0x41, 0xa6, 0xe6, 0x26, 0x66, 0xbb, 0xfb, 0x3b, 0x7b, 0xcd, 0x8d, 0x4d, 0xd, 0xd0, 0x90, 0x50, 0x10, 0xf7, 0xb7, 0x77, 0x37, 0xea, 0xaa, 0x6a, 0x2a, 0xb9, 0xf9, 0x39, 0x79, 0xa4, 0xe4, 0x24, 0x64, 0x83, 0xc3, 0x3, 0x43, 0x9e, 0xde, 0x1e, 0x5e, 0x25, 0x65, 0xa5, 0xe5, 0x38, 0x78, 0xb8, 0xf8, 0x1f, 0x5f, 0x9f, 0xdf, 0x2, 0x42, 0x82, 0xc2, 0x51, 0x11, 0xd1, 0x91, 0x4c, 0xc, 0xcc, 0x8c, 0x6b, 0x2b, 0xeb, 0xab, 0x76, 0x36, 0xf6, 0xb6, 0x87, 0xc7, 0x7, 0x47, 0x9a, 0xda, 0x1a, 0x5a, 0xbd, 0xfd, 0x3d, 0x7d, 0xa0, 0xe0, 0x20, 0x60, 0xf3, 0xb3, 0x73, 0x33, 0xee, 0xae, 0x6e, 0x2e, 0xc9, 0x89, 0x49, 0x9, 0xd4, 0x94, 0x54, 0x14, 0x6f, 0x2f, 0xef, 0xaf, 0x72, 0x32, 0xf2, 0xb2, 0x55, 0x15, 0xd5, 0x95, 0x48, 0x8, 0xc8, 0x88, 0x1b, 0x5b, 0x9b, 0xdb, 0x6, 0x46, 0x86, 0xc6, 0x21, 0x61, 0xa1, 0xe1, 0x3c, 0x7c, 0xbc, 0xfc, 0x4a, 0xa, 0xca, 0x8a, 0x57, 0x17, 0xd7, 0x97, 0x70, 0x30, 0xf0, 0xb0, 0x6d, 0x2d, 0xed, 0xad, 0x3e, 0x7e, 0xbe, 0xfe, 0x23, 0x63, 0xa3, 0xe3, 0x4, 0x44, 0x84, 0xc4, 0x19, 0x59, 0x99, 0xd9, 0xa2, 0xe2, 0x22, 0x62, 0xbf, 0xff, 0x3f, 0x7f, 0x98, 0xd8, 0x18, 0x58, 0x85, 0xc5, 0x5, 0x45, 0xd6, 0x96, 0x56, 0x16, 0xcb, 0x8b, 0x4b, 0xb, 0xec, 0xac, 0x6c, 0x2c, 0xf1, 0xb1, 0x71, 0x31}, + {0x0, 0x41, 0x82, 0xc3, 0x19, 0x58, 0x9b, 0xda, 0x32, 0x73, 0xb0, 0xf1, 0x2b, 0x6a, 0xa9, 0xe8, 0x64, 0x25, 0xe6, 0xa7, 0x7d, 0x3c, 0xff, 0xbe, 0x56, 0x17, 0xd4, 0x95, 0x4f, 0xe, 0xcd, 0x8c, 0xc8, 0x89, 0x4a, 0xb, 0xd1, 0x90, 0x53, 0x12, 0xfa, 0xbb, 0x78, 0x39, 0xe3, 0xa2, 0x61, 0x20, 0xac, 0xed, 0x2e, 0x6f, 0xb5, 0xf4, 0x37, 0x76, 0x9e, 0xdf, 0x1c, 0x5d, 0x87, 0xc6, 0x5, 0x44, 0x8d, 0xcc, 0xf, 0x4e, 0x94, 0xd5, 0x16, 0x57, 0xbf, 0xfe, 0x3d, 0x7c, 0xa6, 0xe7, 0x24, 0x65, 0xe9, 0xa8, 0x6b, 0x2a, 0xf0, 0xb1, 0x72, 0x33, 0xdb, 0x9a, 0x59, 0x18, 0xc2, 0x83, 0x40, 0x1, 0x45, 0x4, 0xc7, 0x86, 0x5c, 0x1d, 0xde, 0x9f, 0x77, 0x36, 0xf5, 0xb4, 0x6e, 0x2f, 0xec, 0xad, 0x21, 0x60, 0xa3, 0xe2, 0x38, 0x79, 0xba, 0xfb, 0x13, 0x52, 0x91, 0xd0, 0xa, 0x4b, 0x88, 0xc9, 0x7, 0x46, 0x85, 0xc4, 0x1e, 0x5f, 0x9c, 0xdd, 0x35, 0x74, 0xb7, 0xf6, 0x2c, 0x6d, 0xae, 0xef, 0x63, 0x22, 0xe1, 0xa0, 0x7a, 0x3b, 0xf8, 0xb9, 0x51, 0x10, 0xd3, 0x92, 0x48, 0x9, 0xca, 0x8b, 0xcf, 0x8e, 0x4d, 0xc, 0xd6, 0x97, 0x54, 0x15, 0xfd, 0xbc, 0x7f, 0x3e, 0xe4, 0xa5, 0x66, 0x27, 0xab, 0xea, 0x29, 0x68, 0xb2, 0xf3, 0x30, 0x71, 0x99, 0xd8, 0x1b, 0x5a, 0x80, 0xc1, 0x2, 0x43, 0x8a, 0xcb, 0x8, 0x49, 0x93, 0xd2, 0x11, 0x50, 0xb8, 0xf9, 0x3a, 0x7b, 0xa1, 0xe0, 0x23, 0x62, 0xee, 0xaf, 0x6c, 0x2d, 0xf7, 0xb6, 0x75, 0x34, 0xdc, 0x9d, 0x5e, 0x1f, 0xc5, 0x84, 0x47, 0x6, 0x42, 0x3, 0xc0, 0x81, 0x5b, 0x1a, 0xd9, 0x98, 0x70, 0x31, 0xf2, 0xb3, 0x69, 0x28, 0xeb, 0xaa, 0x26, 0x67, 0xa4, 0xe5, 0x3f, 0x7e, 0xbd, 0xfc, 0x14, 0x55, 0x96, 0xd7, 0xd, 0x4c, 0x8f, 0xce}, + {0x0, 0x42, 0x84, 0xc6, 0x15, 0x57, 0x91, 0xd3, 0x2a, 0x68, 0xae, 0xec, 0x3f, 0x7d, 0xbb, 0xf9, 0x54, 0x16, 0xd0, 0x92, 0x41, 0x3, 0xc5, 0x87, 0x7e, 0x3c, 0xfa, 0xb8, 0x6b, 0x29, 0xef, 0xad, 0xa8, 0xea, 0x2c, 0x6e, 0xbd, 0xff, 0x39, 0x7b, 0x82, 0xc0, 0x6, 0x44, 0x97, 0xd5, 0x13, 0x51, 0xfc, 0xbe, 0x78, 0x3a, 0xe9, 0xab, 0x6d, 0x2f, 0xd6, 0x94, 0x52, 0x10, 0xc3, 0x81, 0x47, 0x5, 0x4d, 0xf, 0xc9, 0x8b, 0x58, 0x1a, 0xdc, 0x9e, 0x67, 0x25, 0xe3, 0xa1, 0x72, 0x30, 0xf6, 0xb4, 0x19, 0x5b, 0x9d, 0xdf, 0xc, 0x4e, 0x88, 0xca, 0x33, 0x71, 0xb7, 0xf5, 0x26, 0x64, 0xa2, 0xe0, 0xe5, 0xa7, 0x61, 0x23, 0xf0, 0xb2, 0x74, 0x36, 0xcf, 0x8d, 0x4b, 0x9, 0xda, 0x98, 0x5e, 0x1c, 0xb1, 0xf3, 0x35, 0x77, 0xa4, 0xe6, 0x20, 0x62, 0x9b, 0xd9, 0x1f, 0x5d, 0x8e, 0xcc, 0xa, 0x48, 0x9a, 0xd8, 0x1e, 0x5c, 0x8f, 0xcd, 0xb, 0x49, 0xb0, 0xf2, 0x34, 0x76, 0xa5, 0xe7, 0x21, 0x63, 0xce, 0x8c, 0x4a, 0x8, 0xdb, 0x99, 0x5f, 0x1d, 0xe4, 0xa6, 0x60, 0x22, 0xf1, 0xb3, 0x75, 0x37, 0x32, 0x70, 0xb6, 0xf4, 0x27, 0x65, 0xa3, 0xe1, 0x18, 0x5a, 0x9c, 0xde, 0xd, 0x4f, 0x89, 0xcb, 0x66, 0x24, 0xe2, 0xa0, 0x73, 0x31, 0xf7, 0xb5, 0x4c, 0xe, 0xc8, 0x8a, 0x59, 0x1b, 0xdd, 0x9f, 0xd7, 0x95, 0x53, 0x11, 0xc2, 0x80, 0x46, 0x4, 0xfd, 0xbf, 0x79, 0x3b, 0xe8, 0xaa, 0x6c, 0x2e, 0x83, 0xc1, 0x7, 0x45, 0x96, 0xd4, 0x12, 0x50, 0xa9, 0xeb, 0x2d, 0x6f, 0xbc, 0xfe, 0x38, 0x7a, 0x7f, 0x3d, 0xfb, 0xb9, 0x6a, 0x28, 0xee, 0xac, 0x55, 0x17, 0xd1, 0x93, 0x40, 0x2, 0xc4, 0x86, 0x2b, 0x69, 0xaf, 0xed, 0x3e, 0x7c, 0xba, 0xf8, 0x1, 0x43, 0x85, 0xc7, 0x14, 0x56, 0x90, 0xd2}, + {0x0, 0x43, 0x86, 0xc5, 0x11, 0x52, 0x97, 0xd4, 0x22, 0x61, 0xa4, 0xe7, 0x33, 0x70, 0xb5, 0xf6, 0x44, 0x7, 0xc2, 0x81, 0x55, 0x16, 0xd3, 0x90, 0x66, 0x25, 0xe0, 0xa3, 0x77, 0x34, 0xf1, 0xb2, 0x88, 0xcb, 0xe, 0x4d, 0x99, 0xda, 0x1f, 0x5c, 0xaa, 0xe9, 0x2c, 0x6f, 0xbb, 0xf8, 0x3d, 0x7e, 0xcc, 0x8f, 0x4a, 0x9, 0xdd, 0x9e, 0x5b, 0x18, 0xee, 0xad, 0x68, 0x2b, 0xff, 0xbc, 0x79, 0x3a, 0xd, 0x4e, 0x8b, 0xc8, 0x1c, 0x5f, 0x9a, 0xd9, 0x2f, 0x6c, 0xa9, 0xea, 0x3e, 0x7d, 0xb8, 0xfb, 0x49, 0xa, 0xcf, 0x8c, 0x58, 0x1b, 0xde, 0x9d, 0x6b, 0x28, 0xed, 0xae, 0x7a, 0x39, 0xfc, 0xbf, 0x85, 0xc6, 0x3, 0x40, 0x94, 0xd7, 0x12, 0x51, 0xa7, 0xe4, 0x21, 0x62, 0xb6, 0xf5, 0x30, 0x73, 0xc1, 0x82, 0x47, 0x4, 0xd0, 0x93, 0x56, 0x15, 0xe3, 0xa0, 0x65, 0x26, 0xf2, 0xb1, 0x74, 0x37, 0x1a, 0x59, 0x9c, 0xdf, 0xb, 0x48, 0x8d, 0xce, 0x38, 0x7b, 0xbe, 0xfd, 0x29, 0x6a, 0xaf, 0xec, 0x5e, 0x1d, 0xd8, 0x9b, 0x4f, 0xc, 0xc9, 0x8a, 0x7c, 0x3f, 0xfa, 0xb9, 0x6d, 0x2e, 0xeb, 0xa8, 0x92, 0xd1, 0x14, 0x57, 0x83, 0xc0, 0x5, 0x46, 0xb0, 0xf3, 0x36, 0x75, 0xa1, 0xe2, 0x27, 0x64, 0xd6, 0x95, 0x50, 0x13, 0xc7, 0x84, 0x41, 0x2, 0xf4, 0xb7, 0x72, 0x31, 0xe5, 0xa6, 0x63, 0x20, 0x17, 0x54, 0x91, 0xd2, 0x6, 0x45, 0x80, 0xc3, 0x35, 0x76, 0xb3, 0xf0, 0x24, 0x67, 0xa2, 0xe1, 0x53, 0x10, 0xd5, 0x96, 0x42, 0x1, 0xc4, 0x87, 0x71, 0x32, 0xf7, 0xb4, 0x60, 0x23, 0xe6, 0xa5, 0x9f, 0xdc, 0x19, 0x5a, 0x8e, 0xcd, 0x8, 0x4b, 0xbd, 0xfe, 0x3b, 0x78, 0xac, 0xef, 0x2a, 0x69, 0xdb, 0x98, 0x5d, 0x1e, 0xca, 0x89, 0x4c, 0xf, 0xf9, 0xba, 0x7f, 0x3c, 0xe8, 0xab, 0x6e, 0x2d}, + {0x0, 0x44, 0x88, 0xcc, 0xd, 0x49, 0x85, 0xc1, 0x1a, 0x5e, 0x92, 0xd6, 0x17, 0x53, 0x9f, 0xdb, 0x34, 0x70, 0xbc, 0xf8, 0x39, 0x7d, 0xb1, 0xf5, 0x2e, 0x6a, 0xa6, 0xe2, 0x23, 0x67, 0xab, 0xef, 0x68, 0x2c, 0xe0, 0xa4, 0x65, 0x21, 0xed, 0xa9, 0x72, 0x36, 0xfa, 0xbe, 0x7f, 0x3b, 0xf7, 0xb3, 0x5c, 0x18, 0xd4, 0x90, 0x51, 0x15, 0xd9, 0x9d, 0x46, 0x2, 0xce, 0x8a, 0x4b, 0xf, 0xc3, 0x87, 0xd0, 0x94, 0x58, 0x1c, 0xdd, 0x99, 0x55, 0x11, 0xca, 0x8e, 0x42, 0x6, 0xc7, 0x83, 0x4f, 0xb, 0xe4, 0xa0, 0x6c, 0x28, 0xe9, 0xad, 0x61, 0x25, 0xfe, 0xba, 0x76, 0x32, 0xf3, 0xb7, 0x7b, 0x3f, 0xb8, 0xfc, 0x30, 0x74, 0xb5, 0xf1, 0x3d, 0x79, 0xa2, 0xe6, 0x2a, 0x6e, 0xaf, 0xeb, 0x27, 0x63, 0x8c, 0xc8, 0x4, 0x40, 0x81, 0xc5, 0x9, 0x4d, 0x96, 0xd2, 0x1e, 0x5a, 0x9b, 0xdf, 0x13, 0x57, 0xbd, 0xf9, 0x35, 0x71, 0xb0, 0xf4, 0x38, 0x7c, 0xa7, 0xe3, 0x2f, 0x6b, 0xaa, 0xee, 0x22, 0x66, 0x89, 0xcd, 0x1, 0x45, 0x84, 0xc0, 0xc, 0x48, 0x93, 0xd7, 0x1b, 0x5f, 0x9e, 0xda, 0x16, 0x52, 0xd5, 0x91, 0x5d, 0x19, 0xd8, 0x9c, 0x50, 0x14, 0xcf, 0x8b, 0x47, 0x3, 0xc2, 0x86, 0x4a, 0xe, 0xe1, 0xa5, 0x69, 0x2d, 0xec, 0xa8, 0x64, 0x20, 0xfb, 0xbf, 0x73, 0x37, 0xf6, 0xb2, 0x7e, 0x3a, 0x6d, 0x29, 0xe5, 0xa1, 0x60, 0x24, 0xe8, 0xac, 0x77, 0x33, 0xff, 0xbb, 0x7a, 0x3e, 0xf2, 0xb6, 0x59, 0x1d, 0xd1, 0x95, 0x54, 0x10, 0xdc, 0x98, 0x43, 0x7, 0xcb, 0x8f, 0x4e, 0xa, 0xc6, 0x82, 0x5, 0x41, 0x8d, 0xc9, 0x8, 0x4c, 0x80, 0xc4, 0x1f, 0x5b, 0x97, 0xd3, 0x12, 0x56, 0x9a, 0xde, 0x31, 0x75, 0xb9, 0xfd, 0x3c, 0x78, 0xb4, 0xf0, 0x2b, 0x6f, 0xa3, 0xe7, 0x26, 0x62, 0xae, 0xea}, + {0x0, 0x45, 0x8a, 0xcf, 0x9, 0x4c, 0x83, 0xc6, 0x12, 0x57, 0x98, 0xdd, 0x1b, 0x5e, 0x91, 0xd4, 0x24, 0x61, 0xae, 0xeb, 0x2d, 0x68, 0xa7, 0xe2, 0x36, 0x73, 0xbc, 0xf9, 0x3f, 0x7a, 0xb5, 0xf0, 0x48, 0xd, 0xc2, 0x87, 0x41, 0x4, 0xcb, 0x8e, 0x5a, 0x1f, 0xd0, 0x95, 0x53, 0x16, 0xd9, 0x9c, 0x6c, 0x29, 0xe6, 0xa3, 0x65, 0x20, 0xef, 0xaa, 0x7e, 0x3b, 0xf4, 0xb1, 0x77, 0x32, 0xfd, 0xb8, 0x90, 0xd5, 0x1a, 0x5f, 0x99, 0xdc, 0x13, 0x56, 0x82, 0xc7, 0x8, 0x4d, 0x8b, 0xce, 0x1, 0x44, 0xb4, 0xf1, 0x3e, 0x7b, 0xbd, 0xf8, 0x37, 0x72, 0xa6, 0xe3, 0x2c, 0x69, 0xaf, 0xea, 0x25, 0x60, 0xd8, 0x9d, 0x52, 0x17, 0xd1, 0x94, 0x5b, 0x1e, 0xca, 0x8f, 0x40, 0x5, 0xc3, 0x86, 0x49, 0xc, 0xfc, 0xb9, 0x76, 0x33, 0xf5, 0xb0, 0x7f, 0x3a, 0xee, 0xab, 0x64, 0x21, 0xe7, 0xa2, 0x6d, 0x28, 0x3d, 0x78, 0xb7, 0xf2, 0x34, 0x71, 0xbe, 0xfb, 0x2f, 0x6a, 0xa5, 0xe0, 0x26, 0x63, 0xac, 0xe9, 0x19, 0x5c, 0x93, 0xd6, 0x10, 0x55, 0x9a, 0xdf, 0xb, 0x4e, 0x81, 0xc4, 0x2, 0x47, 0x88, 0xcd, 0x75, 0x30, 0xff, 0xba, 0x7c, 0x39, 0xf6, 0xb3, 0x67, 0x22, 0xed, 0xa8, 0x6e, 0x2b, 0xe4, 0xa1, 0x51, 0x14, 0xdb, 0x9e, 0x58, 0x1d, 0xd2, 0x97, 0x43, 0x6, 0xc9, 0x8c, 0x4a, 0xf, 0xc0, 0x85, 0xad, 0xe8, 0x27, 0x62, 0xa4, 0xe1, 0x2e, 0x6b, 0xbf, 0xfa, 0x35, 0x70, 0xb6, 0xf3, 0x3c, 0x79, 0x89, 0xcc, 0x3, 0x46, 0x80, 0xc5, 0xa, 0x4f, 0x9b, 0xde, 0x11, 0x54, 0x92, 0xd7, 0x18, 0x5d, 0xe5, 0xa0, 0x6f, 0x2a, 0xec, 0xa9, 0x66, 0x23, 0xf7, 0xb2, 0x7d, 0x38, 0xfe, 0xbb, 0x74, 0x31, 0xc1, 0x84, 0x4b, 0xe, 0xc8, 0x8d, 0x42, 0x7, 0xd3, 0x96, 0x59, 0x1c, 0xda, 0x9f, 0x50, 0x15}, + {0x0, 0x46, 0x8c, 0xca, 0x5, 0x43, 0x89, 0xcf, 0xa, 0x4c, 0x86, 0xc0, 0xf, 0x49, 0x83, 0xc5, 0x14, 0x52, 0x98, 0xde, 0x11, 0x57, 0x9d, 0xdb, 0x1e, 0x58, 0x92, 0xd4, 0x1b, 0x5d, 0x97, 0xd1, 0x28, 0x6e, 0xa4, 0xe2, 0x2d, 0x6b, 0xa1, 0xe7, 0x22, 0x64, 0xae, 0xe8, 0x27, 0x61, 0xab, 0xed, 0x3c, 0x7a, 0xb0, 0xf6, 0x39, 0x7f, 0xb5, 0xf3, 0x36, 0x70, 0xba, 0xfc, 0x33, 0x75, 0xbf, 0xf9, 0x50, 0x16, 0xdc, 0x9a, 0x55, 0x13, 0xd9, 0x9f, 0x5a, 0x1c, 0xd6, 0x90, 0x5f, 0x19, 0xd3, 0x95, 0x44, 0x2, 0xc8, 0x8e, 0x41, 0x7, 0xcd, 0x8b, 0x4e, 0x8, 0xc2, 0x84, 0x4b, 0xd, 0xc7, 0x81, 0x78, 0x3e, 0xf4, 0xb2, 0x7d, 0x3b, 0xf1, 0xb7, 0x72, 0x34, 0xfe, 0xb8, 0x77, 0x31, 0xfb, 0xbd, 0x6c, 0x2a, 0xe0, 0xa6, 0x69, 0x2f, 0xe5, 0xa3, 0x66, 0x20, 0xea, 0xac, 0x63, 0x25, 0xef, 0xa9, 0xa0, 0xe6, 0x2c, 0x6a, 0xa5, 0xe3, 0x29, 0x6f, 0xaa, 0xec, 0x26, 0x60, 0xaf, 0xe9, 0x23, 0x65, 0xb4, 0xf2, 0x38, 0x7e, 0xb1, 0xf7, 0x3d, 0x7b, 0xbe, 0xf8, 0x32, 0x74, 0xbb, 0xfd, 0x37, 0x71, 0x88, 0xce, 0x4, 0x42, 0x8d, 0xcb, 0x1, 0x47, 0x82, 0xc4, 0xe, 0x48, 0x87, 0xc1, 0xb, 0x4d, 0x9c, 0xda, 0x10, 0x56, 0x99, 0xdf, 0x15, 0x53, 0x96, 0xd0, 0x1a, 0x5c, 0x93, 0xd5, 0x1f, 0x59, 0xf0, 0xb6, 0x7c, 0x3a, 0xf5, 0xb3, 0x79, 0x3f, 0xfa, 0xbc, 0x76, 0x30, 0xff, 0xb9, 0x73, 0x35, 0xe4, 0xa2, 0x68, 0x2e, 0xe1, 0xa7, 0x6d, 0x2b, 0xee, 0xa8, 0x62, 0x24, 0xeb, 0xad, 0x67, 0x21, 0xd8, 0x9e, 0x54, 0x12, 0xdd, 0x9b, 0x51, 0x17, 0xd2, 0x94, 0x5e, 0x18, 0xd7, 0x91, 0x5b, 0x1d, 0xcc, 0x8a, 0x40, 0x6, 0xc9, 0x8f, 0x45, 0x3, 0xc6, 0x80, 0x4a, 0xc, 0xc3, 0x85, 0x4f, 0x9}, + {0x0, 0x47, 0x8e, 0xc9, 0x1, 0x46, 0x8f, 0xc8, 0x2, 0x45, 0x8c, 0xcb, 0x3, 0x44, 0x8d, 0xca, 0x4, 0x43, 0x8a, 0xcd, 0x5, 0x42, 0x8b, 0xcc, 0x6, 0x41, 0x88, 0xcf, 0x7, 0x40, 0x89, 0xce, 0x8, 0x4f, 0x86, 0xc1, 0x9, 0x4e, 0x87, 0xc0, 0xa, 0x4d, 0x84, 0xc3, 0xb, 0x4c, 0x85, 0xc2, 0xc, 0x4b, 0x82, 0xc5, 0xd, 0x4a, 0x83, 0xc4, 0xe, 0x49, 0x80, 0xc7, 0xf, 0x48, 0x81, 0xc6, 0x10, 0x57, 0x9e, 0xd9, 0x11, 0x56, 0x9f, 0xd8, 0x12, 0x55, 0x9c, 0xdb, 0x13, 0x54, 0x9d, 0xda, 0x14, 0x53, 0x9a, 0xdd, 0x15, 0x52, 0x9b, 0xdc, 0x16, 0x51, 0x98, 0xdf, 0x17, 0x50, 0x99, 0xde, 0x18, 0x5f, 0x96, 0xd1, 0x19, 0x5e, 0x97, 0xd0, 0x1a, 0x5d, 0x94, 0xd3, 0x1b, 0x5c, 0x95, 0xd2, 0x1c, 0x5b, 0x92, 0xd5, 0x1d, 0x5a, 0x93, 0xd4, 0x1e, 0x59, 0x90, 0xd7, 0x1f, 0x58, 0x91, 0xd6, 0x20, 0x67, 0xae, 0xe9, 0x21, 0x66, 0xaf, 0xe8, 0x22, 0x65, 0xac, 0xeb, 0x23, 0x64, 0xad, 0xea, 0x24, 0x63, 0xaa, 0xed, 0x25, 0x62, 0xab, 0xec, 0x26, 0x61, 0xa8, 0xef, 0x27, 0x60, 0xa9, 0xee, 0x28, 0x6f, 0xa6, 0xe1, 0x29, 0x6e, 0xa7, 0xe0, 0x2a, 0x6d, 0xa4, 0xe3, 0x2b, 0x6c, 0xa5, 0xe2, 0x2c, 0x6b, 0xa2, 0xe5, 0x2d, 0x6a, 0xa3, 0xe4, 0x2e, 0x69, 0xa0, 0xe7, 0x2f, 0x68, 0xa1, 0xe6, 0x30, 0x77, 0xbe, 0xf9, 0x31, 0x76, 0xbf, 0xf8, 0x32, 0x75, 0xbc, 0xfb, 0x33, 0x74, 0xbd, 0xfa, 0x34, 0x73, 0xba, 0xfd, 0x35, 0x72, 0xbb, 0xfc, 0x36, 0x71, 0xb8, 0xff, 0x37, 0x70, 0xb9, 0xfe, 0x38, 0x7f, 0xb6, 0xf1, 0x39, 0x7e, 0xb7, 0xf0, 0x3a, 0x7d, 0xb4, 0xf3, 0x3b, 0x7c, 0xb5, 0xf2, 0x3c, 0x7b, 0xb2, 0xf5, 0x3d, 0x7a, 0xb3, 0xf4, 0x3e, 0x79, 0xb0, 0xf7, 0x3f, 0x78, 0xb1, 0xf6}, + {0x0, 0x48, 0x90, 0xd8, 0x3d, 0x75, 0xad, 0xe5, 0x7a, 0x32, 0xea, 0xa2, 0x47, 0xf, 0xd7, 0x9f, 0xf4, 0xbc, 0x64, 0x2c, 0xc9, 0x81, 0x59, 0x11, 0x8e, 0xc6, 0x1e, 0x56, 0xb3, 0xfb, 0x23, 0x6b, 0xf5, 0xbd, 0x65, 0x2d, 0xc8, 0x80, 0x58, 0x10, 0x8f, 0xc7, 0x1f, 0x57, 0xb2, 0xfa, 0x22, 0x6a, 0x1, 0x49, 0x91, 0xd9, 0x3c, 0x74, 0xac, 0xe4, 0x7b, 0x33, 0xeb, 0xa3, 0x46, 0xe, 0xd6, 0x9e, 0xf7, 0xbf, 0x67, 0x2f, 0xca, 0x82, 0x5a, 0x12, 0x8d, 0xc5, 0x1d, 0x55, 0xb0, 0xf8, 0x20, 0x68, 0x3, 0x4b, 0x93, 0xdb, 0x3e, 0x76, 0xae, 0xe6, 0x79, 0x31, 0xe9, 0xa1, 0x44, 0xc, 0xd4, 0x9c, 0x2, 0x4a, 0x92, 0xda, 0x3f, 0x77, 0xaf, 0xe7, 0x78, 0x30, 0xe8, 0xa0, 0x45, 0xd, 0xd5, 0x9d, 0xf6, 0xbe, 0x66, 0x2e, 0xcb, 0x83, 0x5b, 0x13, 0x8c, 0xc4, 0x1c, 0x54, 0xb1, 0xf9, 0x21, 0x69, 0xf3, 0xbb, 0x63, 0x2b, 0xce, 0x86, 0x5e, 0x16, 0x89, 0xc1, 0x19, 0x51, 0xb4, 0xfc, 0x24, 0x6c, 0x7, 0x4f, 0x97, 0xdf, 0x3a, 0x72, 0xaa, 0xe2, 0x7d, 0x35, 0xed, 0xa5, 0x40, 0x8, 0xd0, 0x98, 0x6, 0x4e, 0x96, 0xde, 0x3b, 0x73, 0xab, 0xe3, 0x7c, 0x34, 0xec, 0xa4, 0x41, 0x9, 0xd1, 0x99, 0xf2, 0xba, 0x62, 0x2a, 0xcf, 0x87, 0x5f, 0x17, 0x88, 0xc0, 0x18, 0x50, 0xb5, 0xfd, 0x25, 0x6d, 0x4, 0x4c, 0x94, 0xdc, 0x39, 0x71, 0xa9, 0xe1, 0x7e, 0x36, 0xee, 0xa6, 0x43, 0xb, 0xd3, 0x9b, 0xf0, 0xb8, 0x60, 0x28, 0xcd, 0x85, 0x5d, 0x15, 0x8a, 0xc2, 0x1a, 0x52, 0xb7, 0xff, 0x27, 0x6f, 0xf1, 0xb9, 0x61, 0x29, 0xcc, 0x84, 0x5c, 0x14, 0x8b, 0xc3, 0x1b, 0x53, 0xb6, 0xfe, 0x26, 0x6e, 0x5, 0x4d, 0x95, 0xdd, 0x38, 0x70, 0xa8, 0xe0, 0x7f, 0x37, 0xef, 0xa7, 0x42, 0xa, 0xd2, 0x9a}, + {0x0, 0x49, 0x92, 0xdb, 0x39, 0x70, 0xab, 0xe2, 0x72, 0x3b, 0xe0, 0xa9, 0x4b, 0x2, 0xd9, 0x90, 0xe4, 0xad, 0x76, 0x3f, 0xdd, 0x94, 0x4f, 0x6, 0x96, 0xdf, 0x4, 0x4d, 0xaf, 0xe6, 0x3d, 0x74, 0xd5, 0x9c, 0x47, 0xe, 0xec, 0xa5, 0x7e, 0x37, 0xa7, 0xee, 0x35, 0x7c, 0x9e, 0xd7, 0xc, 0x45, 0x31, 0x78, 0xa3, 0xea, 0x8, 0x41, 0x9a, 0xd3, 0x43, 0xa, 0xd1, 0x98, 0x7a, 0x33, 0xe8, 0xa1, 0xb7, 0xfe, 0x25, 0x6c, 0x8e, 0xc7, 0x1c, 0x55, 0xc5, 0x8c, 0x57, 0x1e, 0xfc, 0xb5, 0x6e, 0x27, 0x53, 0x1a, 0xc1, 0x88, 0x6a, 0x23, 0xf8, 0xb1, 0x21, 0x68, 0xb3, 0xfa, 0x18, 0x51, 0x8a, 0xc3, 0x62, 0x2b, 0xf0, 0xb9, 0x5b, 0x12, 0xc9, 0x80, 0x10, 0x59, 0x82, 0xcb, 0x29, 0x60, 0xbb, 0xf2, 0x86, 0xcf, 0x14, 0x5d, 0xbf, 0xf6, 0x2d, 0x64, 0xf4, 0xbd, 0x66, 0x2f, 0xcd, 0x84, 0x5f, 0x16, 0x73, 0x3a, 0xe1, 0xa8, 0x4a, 0x3, 0xd8, 0x91, 0x1, 0x48, 0x93, 0xda, 0x38, 0x71, 0xaa, 0xe3, 0x97, 0xde, 0x5, 0x4c, 0xae, 0xe7, 0x3c, 0x75, 0xe5, 0xac, 0x77, 0x3e, 0xdc, 0x95, 0x4e, 0x7, 0xa6, 0xef, 0x34, 0x7d, 0x9f, 0xd6, 0xd, 0x44, 0xd4, 0x9d, 0x46, 0xf, 0xed, 0xa4, 0x7f, 0x36, 0x42, 0xb, 0xd0, 0x99, 0x7b, 0x32, 0xe9, 0xa0, 0x30, 0x79, 0xa2, 0xeb, 0x9, 0x40, 0x9b, 0xd2, 0xc4, 0x8d, 0x56, 0x1f, 0xfd, 0xb4, 0x6f, 0x26, 0xb6, 0xff, 0x24, 0x6d, 0x8f, 0xc6, 0x1d, 0x54, 0x20, 0x69, 0xb2, 0xfb, 0x19, 0x50, 0x8b, 0xc2, 0x52, 0x1b, 0xc0, 0x89, 0x6b, 0x22, 0xf9, 0xb0, 0x11, 0x58, 0x83, 0xca, 0x28, 0x61, 0xba, 0xf3, 0x63, 0x2a, 0xf1, 0xb8, 0x5a, 0x13, 0xc8, 0x81, 0xf5, 0xbc, 0x67, 0x2e, 0xcc, 0x85, 0x5e, 0x17, 0x87, 0xce, 0x15, 0x5c, 0xbe, 0xf7, 0x2c, 0x65}, + {0x0, 0x4a, 0x94, 0xde, 0x35, 0x7f, 0xa1, 0xeb, 0x6a, 0x20, 0xfe, 0xb4, 0x5f, 0x15, 0xcb, 0x81, 0xd4, 0x9e, 0x40, 0xa, 0xe1, 0xab, 0x75, 0x3f, 0xbe, 0xf4, 0x2a, 0x60, 0x8b, 0xc1, 0x1f, 0x55, 0xb5, 0xff, 0x21, 0x6b, 0x80, 0xca, 0x14, 0x5e, 0xdf, 0x95, 0x4b, 0x1, 0xea, 0xa0, 0x7e, 0x34, 0x61, 0x2b, 0xf5, 0xbf, 0x54, 0x1e, 0xc0, 0x8a, 0xb, 0x41, 0x9f, 0xd5, 0x3e, 0x74, 0xaa, 0xe0, 0x77, 0x3d, 0xe3, 0xa9, 0x42, 0x8, 0xd6, 0x9c, 0x1d, 0x57, 0x89, 0xc3, 0x28, 0x62, 0xbc, 0xf6, 0xa3, 0xe9, 0x37, 0x7d, 0x96, 0xdc, 0x2, 0x48, 0xc9, 0x83, 0x5d, 0x17, 0xfc, 0xb6, 0x68, 0x22, 0xc2, 0x88, 0x56, 0x1c, 0xf7, 0xbd, 0x63, 0x29, 0xa8, 0xe2, 0x3c, 0x76, 0x9d, 0xd7, 0x9, 0x43, 0x16, 0x5c, 0x82, 0xc8, 0x23, 0x69, 0xb7, 0xfd, 0x7c, 0x36, 0xe8, 0xa2, 0x49, 0x3, 0xdd, 0x97, 0xee, 0xa4, 0x7a, 0x30, 0xdb, 0x91, 0x4f, 0x5, 0x84, 0xce, 0x10, 0x5a, 0xb1, 0xfb, 0x25, 0x6f, 0x3a, 0x70, 0xae, 0xe4, 0xf, 0x45, 0x9b, 0xd1, 0x50, 0x1a, 0xc4, 0x8e, 0x65, 0x2f, 0xf1, 0xbb, 0x5b, 0x11, 0xcf, 0x85, 0x6e, 0x24, 0xfa, 0xb0, 0x31, 0x7b, 0xa5, 0xef, 0x4, 0x4e, 0x90, 0xda, 0x8f, 0xc5, 0x1b, 0x51, 0xba, 0xf0, 0x2e, 0x64, 0xe5, 0xaf, 0x71, 0x3b, 0xd0, 0x9a, 0x44, 0xe, 0x99, 0xd3, 0xd, 0x47, 0xac, 0xe6, 0x38, 0x72, 0xf3, 0xb9, 0x67, 0x2d, 0xc6, 0x8c, 0x52, 0x18, 0x4d, 0x7, 0xd9, 0x93, 0x78, 0x32, 0xec, 0xa6, 0x27, 0x6d, 0xb3, 0xf9, 0x12, 0x58, 0x86, 0xcc, 0x2c, 0x66, 0xb8, 0xf2, 0x19, 0x53, 0x8d, 0xc7, 0x46, 0xc, 0xd2, 0x98, 0x73, 0x39, 0xe7, 0xad, 0xf8, 0xb2, 0x6c, 0x26, 0xcd, 0x87, 0x59, 0x13, 0x92, 0xd8, 0x6, 0x4c, 0xa7, 0xed, 0x33, 0x79}, + {0x0, 0x4b, 0x96, 0xdd, 0x31, 0x7a, 0xa7, 0xec, 0x62, 0x29, 0xf4, 0xbf, 0x53, 0x18, 0xc5, 0x8e, 0xc4, 0x8f, 0x52, 0x19, 0xf5, 0xbe, 0x63, 0x28, 0xa6, 0xed, 0x30, 0x7b, 0x97, 0xdc, 0x1, 0x4a, 0x95, 0xde, 0x3, 0x48, 0xa4, 0xef, 0x32, 0x79, 0xf7, 0xbc, 0x61, 0x2a, 0xc6, 0x8d, 0x50, 0x1b, 0x51, 0x1a, 0xc7, 0x8c, 0x60, 0x2b, 0xf6, 0xbd, 0x33, 0x78, 0xa5, 0xee, 0x2, 0x49, 0x94, 0xdf, 0x37, 0x7c, 0xa1, 0xea, 0x6, 0x4d, 0x90, 0xdb, 0x55, 0x1e, 0xc3, 0x88, 0x64, 0x2f, 0xf2, 0xb9, 0xf3, 0xb8, 0x65, 0x2e, 0xc2, 0x89, 0x54, 0x1f, 0x91, 0xda, 0x7, 0x4c, 0xa0, 0xeb, 0x36, 0x7d, 0xa2, 0xe9, 0x34, 0x7f, 0x93, 0xd8, 0x5, 0x4e, 0xc0, 0x8b, 0x56, 0x1d, 0xf1, 0xba, 0x67, 0x2c, 0x66, 0x2d, 0xf0, 0xbb, 0x57, 0x1c, 0xc1, 0x8a, 0x4, 0x4f, 0x92, 0xd9, 0x35, 0x7e, 0xa3, 0xe8, 0x6e, 0x25, 0xf8, 0xb3, 0x5f, 0x14, 0xc9, 0x82, 0xc, 0x47, 0x9a, 0xd1, 0x3d, 0x76, 0xab, 0xe0, 0xaa, 0xe1, 0x3c, 0x77, 0x9b, 0xd0, 0xd, 0x46, 0xc8, 0x83, 0x5e, 0x15, 0xf9, 0xb2, 0x6f, 0x24, 0xfb, 0xb0, 0x6d, 0x26, 0xca, 0x81, 0x5c, 0x17, 0x99, 0xd2, 0xf, 0x44, 0xa8, 0xe3, 0x3e, 0x75, 0x3f, 0x74, 0xa9, 0xe2, 0xe, 0x45, 0x98, 0xd3, 0x5d, 0x16, 0xcb, 0x80, 0x6c, 0x27, 0xfa, 0xb1, 0x59, 0x12, 0xcf, 0x84, 0x68, 0x23, 0xfe, 0xb5, 0x3b, 0x70, 0xad, 0xe6, 0xa, 0x41, 0x9c, 0xd7, 0x9d, 0xd6, 0xb, 0x40, 0xac, 0xe7, 0x3a, 0x71, 0xff, 0xb4, 0x69, 0x22, 0xce, 0x85, 0x58, 0x13, 0xcc, 0x87, 0x5a, 0x11, 0xfd, 0xb6, 0x6b, 0x20, 0xae, 0xe5, 0x38, 0x73, 0x9f, 0xd4, 0x9, 0x42, 0x8, 0x43, 0x9e, 0xd5, 0x39, 0x72, 0xaf, 0xe4, 0x6a, 0x21, 0xfc, 0xb7, 0x5b, 0x10, 0xcd, 0x86}, + {0x0, 0x4c, 0x98, 0xd4, 0x2d, 0x61, 0xb5, 0xf9, 0x5a, 0x16, 0xc2, 0x8e, 0x77, 0x3b, 0xef, 0xa3, 0xb4, 0xf8, 0x2c, 0x60, 0x99, 0xd5, 0x1, 0x4d, 0xee, 0xa2, 0x76, 0x3a, 0xc3, 0x8f, 0x5b, 0x17, 0x75, 0x39, 0xed, 0xa1, 0x58, 0x14, 0xc0, 0x8c, 0x2f, 0x63, 0xb7, 0xfb, 0x2, 0x4e, 0x9a, 0xd6, 0xc1, 0x8d, 0x59, 0x15, 0xec, 0xa0, 0x74, 0x38, 0x9b, 0xd7, 0x3, 0x4f, 0xb6, 0xfa, 0x2e, 0x62, 0xea, 0xa6, 0x72, 0x3e, 0xc7, 0x8b, 0x5f, 0x13, 0xb0, 0xfc, 0x28, 0x64, 0x9d, 0xd1, 0x5, 0x49, 0x5e, 0x12, 0xc6, 0x8a, 0x73, 0x3f, 0xeb, 0xa7, 0x4, 0x48, 0x9c, 0xd0, 0x29, 0x65, 0xb1, 0xfd, 0x9f, 0xd3, 0x7, 0x4b, 0xb2, 0xfe, 0x2a, 0x66, 0xc5, 0x89, 0x5d, 0x11, 0xe8, 0xa4, 0x70, 0x3c, 0x2b, 0x67, 0xb3, 0xff, 0x6, 0x4a, 0x9e, 0xd2, 0x71, 0x3d, 0xe9, 0xa5, 0x5c, 0x10, 0xc4, 0x88, 0xc9, 0x85, 0x51, 0x1d, 0xe4, 0xa8, 0x7c, 0x30, 0x93, 0xdf, 0xb, 0x47, 0xbe, 0xf2, 0x26, 0x6a, 0x7d, 0x31, 0xe5, 0xa9, 0x50, 0x1c, 0xc8, 0x84, 0x27, 0x6b, 0xbf, 0xf3, 0xa, 0x46, 0x92, 0xde, 0xbc, 0xf0, 0x24, 0x68, 0x91, 0xdd, 0x9, 0x45, 0xe6, 0xaa, 0x7e, 0x32, 0xcb, 0x87, 0x53, 0x1f, 0x8, 0x44, 0x90, 0xdc, 0x25, 0x69, 0xbd, 0xf1, 0x52, 0x1e, 0xca, 0x86, 0x7f, 0x33, 0xe7, 0xab, 0x23, 0x6f, 0xbb, 0xf7, 0xe, 0x42, 0x96, 0xda, 0x79, 0x35, 0xe1, 0xad, 0x54, 0x18, 0xcc, 0x80, 0x97, 0xdb, 0xf, 0x43, 0xba, 0xf6, 0x22, 0x6e, 0xcd, 0x81, 0x55, 0x19, 0xe0, 0xac, 0x78, 0x34, 0x56, 0x1a, 0xce, 0x82, 0x7b, 0x37, 0xe3, 0xaf, 0xc, 0x40, 0x94, 0xd8, 0x21, 0x6d, 0xb9, 0xf5, 0xe2, 0xae, 0x7a, 0x36, 0xcf, 0x83, 0x57, 0x1b, 0xb8, 0xf4, 0x20, 0x6c, 0x95, 0xd9, 0xd, 0x41}, + {0x0, 0x4d, 0x9a, 0xd7, 0x29, 0x64, 0xb3, 0xfe, 0x52, 0x1f, 0xc8, 0x85, 0x7b, 0x36, 0xe1, 0xac, 0xa4, 0xe9, 0x3e, 0x73, 0x8d, 0xc0, 0x17, 0x5a, 0xf6, 0xbb, 0x6c, 0x21, 0xdf, 0x92, 0x45, 0x8, 0x55, 0x18, 0xcf, 0x82, 0x7c, 0x31, 0xe6, 0xab, 0x7, 0x4a, 0x9d, 0xd0, 0x2e, 0x63, 0xb4, 0xf9, 0xf1, 0xbc, 0x6b, 0x26, 0xd8, 0x95, 0x42, 0xf, 0xa3, 0xee, 0x39, 0x74, 0x8a, 0xc7, 0x10, 0x5d, 0xaa, 0xe7, 0x30, 0x7d, 0x83, 0xce, 0x19, 0x54, 0xf8, 0xb5, 0x62, 0x2f, 0xd1, 0x9c, 0x4b, 0x6, 0xe, 0x43, 0x94, 0xd9, 0x27, 0x6a, 0xbd, 0xf0, 0x5c, 0x11, 0xc6, 0x8b, 0x75, 0x38, 0xef, 0xa2, 0xff, 0xb2, 0x65, 0x28, 0xd6, 0x9b, 0x4c, 0x1, 0xad, 0xe0, 0x37, 0x7a, 0x84, 0xc9, 0x1e, 0x53, 0x5b, 0x16, 0xc1, 0x8c, 0x72, 0x3f, 0xe8, 0xa5, 0x9, 0x44, 0x93, 0xde, 0x20, 0x6d, 0xba, 0xf7, 0x49, 0x4, 0xd3, 0x9e, 0x60, 0x2d, 0xfa, 0xb7, 0x1b, 0x56, 0x81, 0xcc, 0x32, 0x7f, 0xa8, 0xe5, 0xed, 0xa0, 0x77, 0x3a, 0xc4, 0x89, 0x5e, 0x13, 0xbf, 0xf2, 0x25, 0x68, 0x96, 0xdb, 0xc, 0x41, 0x1c, 0x51, 0x86, 0xcb, 0x35, 0x78, 0xaf, 0xe2, 0x4e, 0x3, 0xd4, 0x99, 0x67, 0x2a, 0xfd, 0xb0, 0xb8, 0xf5, 0x22, 0x6f, 0x91, 0xdc, 0xb, 0x46, 0xea, 0xa7, 0x70, 0x3d, 0xc3, 0x8e, 0x59, 0x14, 0xe3, 0xae, 0x79, 0x34, 0xca, 0x87, 0x50, 0x1d, 0xb1, 0xfc, 0x2b, 0x66, 0x98, 0xd5, 0x2, 0x4f, 0x47, 0xa, 0xdd, 0x90, 0x6e, 0x23, 0xf4, 0xb9, 0x15, 0x58, 0x8f, 0xc2, 0x3c, 0x71, 0xa6, 0xeb, 0xb6, 0xfb, 0x2c, 0x61, 0x9f, 0xd2, 0x5, 0x48, 0xe4, 0xa9, 0x7e, 0x33, 0xcd, 0x80, 0x57, 0x1a, 0x12, 0x5f, 0x88, 0xc5, 0x3b, 0x76, 0xa1, 0xec, 0x40, 0xd, 0xda, 0x97, 0x69, 0x24, 0xf3, 0xbe}, + {0x0, 0x4e, 0x9c, 0xd2, 0x25, 0x6b, 0xb9, 0xf7, 0x4a, 0x4, 0xd6, 0x98, 0x6f, 0x21, 0xf3, 0xbd, 0x94, 0xda, 0x8, 0x46, 0xb1, 0xff, 0x2d, 0x63, 0xde, 0x90, 0x42, 0xc, 0xfb, 0xb5, 0x67, 0x29, 0x35, 0x7b, 0xa9, 0xe7, 0x10, 0x5e, 0x8c, 0xc2, 0x7f, 0x31, 0xe3, 0xad, 0x5a, 0x14, 0xc6, 0x88, 0xa1, 0xef, 0x3d, 0x73, 0x84, 0xca, 0x18, 0x56, 0xeb, 0xa5, 0x77, 0x39, 0xce, 0x80, 0x52, 0x1c, 0x6a, 0x24, 0xf6, 0xb8, 0x4f, 0x1, 0xd3, 0x9d, 0x20, 0x6e, 0xbc, 0xf2, 0x5, 0x4b, 0x99, 0xd7, 0xfe, 0xb0, 0x62, 0x2c, 0xdb, 0x95, 0x47, 0x9, 0xb4, 0xfa, 0x28, 0x66, 0x91, 0xdf, 0xd, 0x43, 0x5f, 0x11, 0xc3, 0x8d, 0x7a, 0x34, 0xe6, 0xa8, 0x15, 0x5b, 0x89, 0xc7, 0x30, 0x7e, 0xac, 0xe2, 0xcb, 0x85, 0x57, 0x19, 0xee, 0xa0, 0x72, 0x3c, 0x81, 0xcf, 0x1d, 0x53, 0xa4, 0xea, 0x38, 0x76, 0xd4, 0x9a, 0x48, 0x6, 0xf1, 0xbf, 0x6d, 0x23, 0x9e, 0xd0, 0x2, 0x4c, 0xbb, 0xf5, 0x27, 0x69, 0x40, 0xe, 0xdc, 0x92, 0x65, 0x2b, 0xf9, 0xb7, 0xa, 0x44, 0x96, 0xd8, 0x2f, 0x61, 0xb3, 0xfd, 0xe1, 0xaf, 0x7d, 0x33, 0xc4, 0x8a, 0x58, 0x16, 0xab, 0xe5, 0x37, 0x79, 0x8e, 0xc0, 0x12, 0x5c, 0x75, 0x3b, 0xe9, 0xa7, 0x50, 0x1e, 0xcc, 0x82, 0x3f, 0x71, 0xa3, 0xed, 0x1a, 0x54, 0x86, 0xc8, 0xbe, 0xf0, 0x22, 0x6c, 0x9b, 0xd5, 0x7, 0x49, 0xf4, 0xba, 0x68, 0x26, 0xd1, 0x9f, 0x4d, 0x3, 0x2a, 0x64, 0xb6, 0xf8, 0xf, 0x41, 0x93, 0xdd, 0x60, 0x2e, 0xfc, 0xb2, 0x45, 0xb, 0xd9, 0x97, 0x8b, 0xc5, 0x17, 0x59, 0xae, 0xe0, 0x32, 0x7c, 0xc1, 0x8f, 0x5d, 0x13, 0xe4, 0xaa, 0x78, 0x36, 0x1f, 0x51, 0x83, 0xcd, 0x3a, 0x74, 0xa6, 0xe8, 0x55, 0x1b, 0xc9, 0x87, 0x70, 0x3e, 0xec, 0xa2}, + {0x0, 0x4f, 0x9e, 0xd1, 0x21, 0x6e, 0xbf, 0xf0, 0x42, 0xd, 0xdc, 0x93, 0x63, 0x2c, 0xfd, 0xb2, 0x84, 0xcb, 0x1a, 0x55, 0xa5, 0xea, 0x3b, 0x74, 0xc6, 0x89, 0x58, 0x17, 0xe7, 0xa8, 0x79, 0x36, 0x15, 0x5a, 0x8b, 0xc4, 0x34, 0x7b, 0xaa, 0xe5, 0x57, 0x18, 0xc9, 0x86, 0x76, 0x39, 0xe8, 0xa7, 0x91, 0xde, 0xf, 0x40, 0xb0, 0xff, 0x2e, 0x61, 0xd3, 0x9c, 0x4d, 0x2, 0xf2, 0xbd, 0x6c, 0x23, 0x2a, 0x65, 0xb4, 0xfb, 0xb, 0x44, 0x95, 0xda, 0x68, 0x27, 0xf6, 0xb9, 0x49, 0x6, 0xd7, 0x98, 0xae, 0xe1, 0x30, 0x7f, 0x8f, 0xc0, 0x11, 0x5e, 0xec, 0xa3, 0x72, 0x3d, 0xcd, 0x82, 0x53, 0x1c, 0x3f, 0x70, 0xa1, 0xee, 0x1e, 0x51, 0x80, 0xcf, 0x7d, 0x32, 0xe3, 0xac, 0x5c, 0x13, 0xc2, 0x8d, 0xbb, 0xf4, 0x25, 0x6a, 0x9a, 0xd5, 0x4, 0x4b, 0xf9, 0xb6, 0x67, 0x28, 0xd8, 0x97, 0x46, 0x9, 0x54, 0x1b, 0xca, 0x85, 0x75, 0x3a, 0xeb, 0xa4, 0x16, 0x59, 0x88, 0xc7, 0x37, 0x78, 0xa9, 0xe6, 0xd0, 0x9f, 0x4e, 0x1, 0xf1, 0xbe, 0x6f, 0x20, 0x92, 0xdd, 0xc, 0x43, 0xb3, 0xfc, 0x2d, 0x62, 0x41, 0xe, 0xdf, 0x90, 0x60, 0x2f, 0xfe, 0xb1, 0x3, 0x4c, 0x9d, 0xd2, 0x22, 0x6d, 0xbc, 0xf3, 0xc5, 0x8a, 0x5b, 0x14, 0xe4, 0xab, 0x7a, 0x35, 0x87, 0xc8, 0x19, 0x56, 0xa6, 0xe9, 0x38, 0x77, 0x7e, 0x31, 0xe0, 0xaf, 0x5f, 0x10, 0xc1, 0x8e, 0x3c, 0x73, 0xa2, 0xed, 0x1d, 0x52, 0x83, 0xcc, 0xfa, 0xb5, 0x64, 0x2b, 0xdb, 0x94, 0x45, 0xa, 0xb8, 0xf7, 0x26, 0x69, 0x99, 0xd6, 0x7, 0x48, 0x6b, 0x24, 0xf5, 0xba, 0x4a, 0x5, 0xd4, 0x9b, 0x29, 0x66, 0xb7, 0xf8, 0x8, 0x47, 0x96, 0xd9, 0xef, 0xa0, 0x71, 0x3e, 0xce, 0x81, 0x50, 0x1f, 0xad, 0xe2, 0x33, 0x7c, 0x8c, 0xc3, 0x12, 0x5d}, + {0x0, 0x50, 0xa0, 0xf0, 0x5d, 0xd, 0xfd, 0xad, 0xba, 0xea, 0x1a, 0x4a, 0xe7, 0xb7, 0x47, 0x17, 0x69, 0x39, 0xc9, 0x99, 0x34, 0x64, 0x94, 0xc4, 0xd3, 0x83, 0x73, 0x23, 0x8e, 0xde, 0x2e, 0x7e, 0xd2, 0x82, 0x72, 0x22, 0x8f, 0xdf, 0x2f, 0x7f, 0x68, 0x38, 0xc8, 0x98, 0x35, 0x65, 0x95, 0xc5, 0xbb, 0xeb, 0x1b, 0x4b, 0xe6, 0xb6, 0x46, 0x16, 0x1, 0x51, 0xa1, 0xf1, 0x5c, 0xc, 0xfc, 0xac, 0xb9, 0xe9, 0x19, 0x49, 0xe4, 0xb4, 0x44, 0x14, 0x3, 0x53, 0xa3, 0xf3, 0x5e, 0xe, 0xfe, 0xae, 0xd0, 0x80, 0x70, 0x20, 0x8d, 0xdd, 0x2d, 0x7d, 0x6a, 0x3a, 0xca, 0x9a, 0x37, 0x67, 0x97, 0xc7, 0x6b, 0x3b, 0xcb, 0x9b, 0x36, 0x66, 0x96, 0xc6, 0xd1, 0x81, 0x71, 0x21, 0x8c, 0xdc, 0x2c, 0x7c, 0x2, 0x52, 0xa2, 0xf2, 0x5f, 0xf, 0xff, 0xaf, 0xb8, 0xe8, 0x18, 0x48, 0xe5, 0xb5, 0x45, 0x15, 0x6f, 0x3f, 0xcf, 0x9f, 0x32, 0x62, 0x92, 0xc2, 0xd5, 0x85, 0x75, 0x25, 0x88, 0xd8, 0x28, 0x78, 0x6, 0x56, 0xa6, 0xf6, 0x5b, 0xb, 0xfb, 0xab, 0xbc, 0xec, 0x1c, 0x4c, 0xe1, 0xb1, 0x41, 0x11, 0xbd, 0xed, 0x1d, 0x4d, 0xe0, 0xb0, 0x40, 0x10, 0x7, 0x57, 0xa7, 0xf7, 0x5a, 0xa, 0xfa, 0xaa, 0xd4, 0x84, 0x74, 0x24, 0x89, 0xd9, 0x29, 0x79, 0x6e, 0x3e, 0xce, 0x9e, 0x33, 0x63, 0x93, 0xc3, 0xd6, 0x86, 0x76, 0x26, 0x8b, 0xdb, 0x2b, 0x7b, 0x6c, 0x3c, 0xcc, 0x9c, 0x31, 0x61, 0x91, 0xc1, 0xbf, 0xef, 0x1f, 0x4f, 0xe2, 0xb2, 0x42, 0x12, 0x5, 0x55, 0xa5, 0xf5, 0x58, 0x8, 0xf8, 0xa8, 0x4, 0x54, 0xa4, 0xf4, 0x59, 0x9, 0xf9, 0xa9, 0xbe, 0xee, 0x1e, 0x4e, 0xe3, 0xb3, 0x43, 0x13, 0x6d, 0x3d, 0xcd, 0x9d, 0x30, 0x60, 0x90, 0xc0, 0xd7, 0x87, 0x77, 0x27, 0x8a, 0xda, 0x2a, 0x7a}, + {0x0, 0x51, 0xa2, 0xf3, 0x59, 0x8, 0xfb, 0xaa, 0xb2, 0xe3, 0x10, 0x41, 0xeb, 0xba, 0x49, 0x18, 0x79, 0x28, 0xdb, 0x8a, 0x20, 0x71, 0x82, 0xd3, 0xcb, 0x9a, 0x69, 0x38, 0x92, 0xc3, 0x30, 0x61, 0xf2, 0xa3, 0x50, 0x1, 0xab, 0xfa, 0x9, 0x58, 0x40, 0x11, 0xe2, 0xb3, 0x19, 0x48, 0xbb, 0xea, 0x8b, 0xda, 0x29, 0x78, 0xd2, 0x83, 0x70, 0x21, 0x39, 0x68, 0x9b, 0xca, 0x60, 0x31, 0xc2, 0x93, 0xf9, 0xa8, 0x5b, 0xa, 0xa0, 0xf1, 0x2, 0x53, 0x4b, 0x1a, 0xe9, 0xb8, 0x12, 0x43, 0xb0, 0xe1, 0x80, 0xd1, 0x22, 0x73, 0xd9, 0x88, 0x7b, 0x2a, 0x32, 0x63, 0x90, 0xc1, 0x6b, 0x3a, 0xc9, 0x98, 0xb, 0x5a, 0xa9, 0xf8, 0x52, 0x3, 0xf0, 0xa1, 0xb9, 0xe8, 0x1b, 0x4a, 0xe0, 0xb1, 0x42, 0x13, 0x72, 0x23, 0xd0, 0x81, 0x2b, 0x7a, 0x89, 0xd8, 0xc0, 0x91, 0x62, 0x33, 0x99, 0xc8, 0x3b, 0x6a, 0xef, 0xbe, 0x4d, 0x1c, 0xb6, 0xe7, 0x14, 0x45, 0x5d, 0xc, 0xff, 0xae, 0x4, 0x55, 0xa6, 0xf7, 0x96, 0xc7, 0x34, 0x65, 0xcf, 0x9e, 0x6d, 0x3c, 0x24, 0x75, 0x86, 0xd7, 0x7d, 0x2c, 0xdf, 0x8e, 0x1d, 0x4c, 0xbf, 0xee, 0x44, 0x15, 0xe6, 0xb7, 0xaf, 0xfe, 0xd, 0x5c, 0xf6, 0xa7, 0x54, 0x5, 0x64, 0x35, 0xc6, 0x97, 0x3d, 0x6c, 0x9f, 0xce, 0xd6, 0x87, 0x74, 0x25, 0x8f, 0xde, 0x2d, 0x7c, 0x16, 0x47, 0xb4, 0xe5, 0x4f, 0x1e, 0xed, 0xbc, 0xa4, 0xf5, 0x6, 0x57, 0xfd, 0xac, 0x5f, 0xe, 0x6f, 0x3e, 0xcd, 0x9c, 0x36, 0x67, 0x94, 0xc5, 0xdd, 0x8c, 0x7f, 0x2e, 0x84, 0xd5, 0x26, 0x77, 0xe4, 0xb5, 0x46, 0x17, 0xbd, 0xec, 0x1f, 0x4e, 0x56, 0x7, 0xf4, 0xa5, 0xf, 0x5e, 0xad, 0xfc, 0x9d, 0xcc, 0x3f, 0x6e, 0xc4, 0x95, 0x66, 0x37, 0x2f, 0x7e, 0x8d, 0xdc, 0x76, 0x27, 0xd4, 0x85}, + {0x0, 0x52, 0xa4, 0xf6, 0x55, 0x7, 0xf1, 0xa3, 0xaa, 0xf8, 0xe, 0x5c, 0xff, 0xad, 0x5b, 0x9, 0x49, 0x1b, 0xed, 0xbf, 0x1c, 0x4e, 0xb8, 0xea, 0xe3, 0xb1, 0x47, 0x15, 0xb6, 0xe4, 0x12, 0x40, 0x92, 0xc0, 0x36, 0x64, 0xc7, 0x95, 0x63, 0x31, 0x38, 0x6a, 0x9c, 0xce, 0x6d, 0x3f, 0xc9, 0x9b, 0xdb, 0x89, 0x7f, 0x2d, 0x8e, 0xdc, 0x2a, 0x78, 0x71, 0x23, 0xd5, 0x87, 0x24, 0x76, 0x80, 0xd2, 0x39, 0x6b, 0x9d, 0xcf, 0x6c, 0x3e, 0xc8, 0x9a, 0x93, 0xc1, 0x37, 0x65, 0xc6, 0x94, 0x62, 0x30, 0x70, 0x22, 0xd4, 0x86, 0x25, 0x77, 0x81, 0xd3, 0xda, 0x88, 0x7e, 0x2c, 0x8f, 0xdd, 0x2b, 0x79, 0xab, 0xf9, 0xf, 0x5d, 0xfe, 0xac, 0x5a, 0x8, 0x1, 0x53, 0xa5, 0xf7, 0x54, 0x6, 0xf0, 0xa2, 0xe2, 0xb0, 0x46, 0x14, 0xb7, 0xe5, 0x13, 0x41, 0x48, 0x1a, 0xec, 0xbe, 0x1d, 0x4f, 0xb9, 0xeb, 0x72, 0x20, 0xd6, 0x84, 0x27, 0x75, 0x83, 0xd1, 0xd8, 0x8a, 0x7c, 0x2e, 0x8d, 0xdf, 0x29, 0x7b, 0x3b, 0x69, 0x9f, 0xcd, 0x6e, 0x3c, 0xca, 0x98, 0x91, 0xc3, 0x35, 0x67, 0xc4, 0x96, 0x60, 0x32, 0xe0, 0xb2, 0x44, 0x16, 0xb5, 0xe7, 0x11, 0x43, 0x4a, 0x18, 0xee, 0xbc, 0x1f, 0x4d, 0xbb, 0xe9, 0xa9, 0xfb, 0xd, 0x5f, 0xfc, 0xae, 0x58, 0xa, 0x3, 0x51, 0xa7, 0xf5, 0x56, 0x4, 0xf2, 0xa0, 0x4b, 0x19, 0xef, 0xbd, 0x1e, 0x4c, 0xba, 0xe8, 0xe1, 0xb3, 0x45, 0x17, 0xb4, 0xe6, 0x10, 0x42, 0x2, 0x50, 0xa6, 0xf4, 0x57, 0x5, 0xf3, 0xa1, 0xa8, 0xfa, 0xc, 0x5e, 0xfd, 0xaf, 0x59, 0xb, 0xd9, 0x8b, 0x7d, 0x2f, 0x8c, 0xde, 0x28, 0x7a, 0x73, 0x21, 0xd7, 0x85, 0x26, 0x74, 0x82, 0xd0, 0x90, 0xc2, 0x34, 0x66, 0xc5, 0x97, 0x61, 0x33, 0x3a, 0x68, 0x9e, 0xcc, 0x6f, 0x3d, 0xcb, 0x99}, + {0x0, 0x53, 0xa6, 0xf5, 0x51, 0x2, 0xf7, 0xa4, 0xa2, 0xf1, 0x4, 0x57, 0xf3, 0xa0, 0x55, 0x6, 0x59, 0xa, 0xff, 0xac, 0x8, 0x5b, 0xae, 0xfd, 0xfb, 0xa8, 0x5d, 0xe, 0xaa, 0xf9, 0xc, 0x5f, 0xb2, 0xe1, 0x14, 0x47, 0xe3, 0xb0, 0x45, 0x16, 0x10, 0x43, 0xb6, 0xe5, 0x41, 0x12, 0xe7, 0xb4, 0xeb, 0xb8, 0x4d, 0x1e, 0xba, 0xe9, 0x1c, 0x4f, 0x49, 0x1a, 0xef, 0xbc, 0x18, 0x4b, 0xbe, 0xed, 0x79, 0x2a, 0xdf, 0x8c, 0x28, 0x7b, 0x8e, 0xdd, 0xdb, 0x88, 0x7d, 0x2e, 0x8a, 0xd9, 0x2c, 0x7f, 0x20, 0x73, 0x86, 0xd5, 0x71, 0x22, 0xd7, 0x84, 0x82, 0xd1, 0x24, 0x77, 0xd3, 0x80, 0x75, 0x26, 0xcb, 0x98, 0x6d, 0x3e, 0x9a, 0xc9, 0x3c, 0x6f, 0x69, 0x3a, 0xcf, 0x9c, 0x38, 0x6b, 0x9e, 0xcd, 0x92, 0xc1, 0x34, 0x67, 0xc3, 0x90, 0x65, 0x36, 0x30, 0x63, 0x96, 0xc5, 0x61, 0x32, 0xc7, 0x94, 0xf2, 0xa1, 0x54, 0x7, 0xa3, 0xf0, 0x5, 0x56, 0x50, 0x3, 0xf6, 0xa5, 0x1, 0x52, 0xa7, 0xf4, 0xab, 0xf8, 0xd, 0x5e, 0xfa, 0xa9, 0x5c, 0xf, 0x9, 0x5a, 0xaf, 0xfc, 0x58, 0xb, 0xfe, 0xad, 0x40, 0x13, 0xe6, 0xb5, 0x11, 0x42, 0xb7, 0xe4, 0xe2, 0xb1, 0x44, 0x17, 0xb3, 0xe0, 0x15, 0x46, 0x19, 0x4a, 0xbf, 0xec, 0x48, 0x1b, 0xee, 0xbd, 0xbb, 0xe8, 0x1d, 0x4e, 0xea, 0xb9, 0x4c, 0x1f, 0x8b, 0xd8, 0x2d, 0x7e, 0xda, 0x89, 0x7c, 0x2f, 0x29, 0x7a, 0x8f, 0xdc, 0x78, 0x2b, 0xde, 0x8d, 0xd2, 0x81, 0x74, 0x27, 0x83, 0xd0, 0x25, 0x76, 0x70, 0x23, 0xd6, 0x85, 0x21, 0x72, 0x87, 0xd4, 0x39, 0x6a, 0x9f, 0xcc, 0x68, 0x3b, 0xce, 0x9d, 0x9b, 0xc8, 0x3d, 0x6e, 0xca, 0x99, 0x6c, 0x3f, 0x60, 0x33, 0xc6, 0x95, 0x31, 0x62, 0x97, 0xc4, 0xc2, 0x91, 0x64, 0x37, 0x93, 0xc0, 0x35, 0x66}, + {0x0, 0x54, 0xa8, 0xfc, 0x4d, 0x19, 0xe5, 0xb1, 0x9a, 0xce, 0x32, 0x66, 0xd7, 0x83, 0x7f, 0x2b, 0x29, 0x7d, 0x81, 0xd5, 0x64, 0x30, 0xcc, 0x98, 0xb3, 0xe7, 0x1b, 0x4f, 0xfe, 0xaa, 0x56, 0x2, 0x52, 0x6, 0xfa, 0xae, 0x1f, 0x4b, 0xb7, 0xe3, 0xc8, 0x9c, 0x60, 0x34, 0x85, 0xd1, 0x2d, 0x79, 0x7b, 0x2f, 0xd3, 0x87, 0x36, 0x62, 0x9e, 0xca, 0xe1, 0xb5, 0x49, 0x1d, 0xac, 0xf8, 0x4, 0x50, 0xa4, 0xf0, 0xc, 0x58, 0xe9, 0xbd, 0x41, 0x15, 0x3e, 0x6a, 0x96, 0xc2, 0x73, 0x27, 0xdb, 0x8f, 0x8d, 0xd9, 0x25, 0x71, 0xc0, 0x94, 0x68, 0x3c, 0x17, 0x43, 0xbf, 0xeb, 0x5a, 0xe, 0xf2, 0xa6, 0xf6, 0xa2, 0x5e, 0xa, 0xbb, 0xef, 0x13, 0x47, 0x6c, 0x38, 0xc4, 0x90, 0x21, 0x75, 0x89, 0xdd, 0xdf, 0x8b, 0x77, 0x23, 0x92, 0xc6, 0x3a, 0x6e, 0x45, 0x11, 0xed, 0xb9, 0x8, 0x5c, 0xa0, 0xf4, 0x55, 0x1, 0xfd, 0xa9, 0x18, 0x4c, 0xb0, 0xe4, 0xcf, 0x9b, 0x67, 0x33, 0x82, 0xd6, 0x2a, 0x7e, 0x7c, 0x28, 0xd4, 0x80, 0x31, 0x65, 0x99, 0xcd, 0xe6, 0xb2, 0x4e, 0x1a, 0xab, 0xff, 0x3, 0x57, 0x7, 0x53, 0xaf, 0xfb, 0x4a, 0x1e, 0xe2, 0xb6, 0x9d, 0xc9, 0x35, 0x61, 0xd0, 0x84, 0x78, 0x2c, 0x2e, 0x7a, 0x86, 0xd2, 0x63, 0x37, 0xcb, 0x9f, 0xb4, 0xe0, 0x1c, 0x48, 0xf9, 0xad, 0x51, 0x5, 0xf1, 0xa5, 0x59, 0xd, 0xbc, 0xe8, 0x14, 0x40, 0x6b, 0x3f, 0xc3, 0x97, 0x26, 0x72, 0x8e, 0xda, 0xd8, 0x8c, 0x70, 0x24, 0x95, 0xc1, 0x3d, 0x69, 0x42, 0x16, 0xea, 0xbe, 0xf, 0x5b, 0xa7, 0xf3, 0xa3, 0xf7, 0xb, 0x5f, 0xee, 0xba, 0x46, 0x12, 0x39, 0x6d, 0x91, 0xc5, 0x74, 0x20, 0xdc, 0x88, 0x8a, 0xde, 0x22, 0x76, 0xc7, 0x93, 0x6f, 0x3b, 0x10, 0x44, 0xb8, 0xec, 0x5d, 0x9, 0xf5, 0xa1}, + {0x0, 0x55, 0xaa, 0xff, 0x49, 0x1c, 0xe3, 0xb6, 0x92, 0xc7, 0x38, 0x6d, 0xdb, 0x8e, 0x71, 0x24, 0x39, 0x6c, 0x93, 0xc6, 0x70, 0x25, 0xda, 0x8f, 0xab, 0xfe, 0x1, 0x54, 0xe2, 0xb7, 0x48, 0x1d, 0x72, 0x27, 0xd8, 0x8d, 0x3b, 0x6e, 0x91, 0xc4, 0xe0, 0xb5, 0x4a, 0x1f, 0xa9, 0xfc, 0x3, 0x56, 0x4b, 0x1e, 0xe1, 0xb4, 0x2, 0x57, 0xa8, 0xfd, 0xd9, 0x8c, 0x73, 0x26, 0x90, 0xc5, 0x3a, 0x6f, 0xe4, 0xb1, 0x4e, 0x1b, 0xad, 0xf8, 0x7, 0x52, 0x76, 0x23, 0xdc, 0x89, 0x3f, 0x6a, 0x95, 0xc0, 0xdd, 0x88, 0x77, 0x22, 0x94, 0xc1, 0x3e, 0x6b, 0x4f, 0x1a, 0xe5, 0xb0, 0x6, 0x53, 0xac, 0xf9, 0x96, 0xc3, 0x3c, 0x69, 0xdf, 0x8a, 0x75, 0x20, 0x4, 0x51, 0xae, 0xfb, 0x4d, 0x18, 0xe7, 0xb2, 0xaf, 0xfa, 0x5, 0x50, 0xe6, 0xb3, 0x4c, 0x19, 0x3d, 0x68, 0x97, 0xc2, 0x74, 0x21, 0xde, 0x8b, 0xd5, 0x80, 0x7f, 0x2a, 0x9c, 0xc9, 0x36, 0x63, 0x47, 0x12, 0xed, 0xb8, 0xe, 0x5b, 0xa4, 0xf1, 0xec, 0xb9, 0x46, 0x13, 0xa5, 0xf0, 0xf, 0x5a, 0x7e, 0x2b, 0xd4, 0x81, 0x37, 0x62, 0x9d, 0xc8, 0xa7, 0xf2, 0xd, 0x58, 0xee, 0xbb, 0x44, 0x11, 0x35, 0x60, 0x9f, 0xca, 0x7c, 0x29, 0xd6, 0x83, 0x9e, 0xcb, 0x34, 0x61, 0xd7, 0x82, 0x7d, 0x28, 0xc, 0x59, 0xa6, 0xf3, 0x45, 0x10, 0xef, 0xba, 0x31, 0x64, 0x9b, 0xce, 0x78, 0x2d, 0xd2, 0x87, 0xa3, 0xf6, 0x9, 0x5c, 0xea, 0xbf, 0x40, 0x15, 0x8, 0x5d, 0xa2, 0xf7, 0x41, 0x14, 0xeb, 0xbe, 0x9a, 0xcf, 0x30, 0x65, 0xd3, 0x86, 0x79, 0x2c, 0x43, 0x16, 0xe9, 0xbc, 0xa, 0x5f, 0xa0, 0xf5, 0xd1, 0x84, 0x7b, 0x2e, 0x98, 0xcd, 0x32, 0x67, 0x7a, 0x2f, 0xd0, 0x85, 0x33, 0x66, 0x99, 0xcc, 0xe8, 0xbd, 0x42, 0x17, 0xa1, 0xf4, 0xb, 0x5e}, + {0x0, 0x56, 0xac, 0xfa, 0x45, 0x13, 0xe9, 0xbf, 0x8a, 0xdc, 0x26, 0x70, 0xcf, 0x99, 0x63, 0x35, 0x9, 0x5f, 0xa5, 0xf3, 0x4c, 0x1a, 0xe0, 0xb6, 0x83, 0xd5, 0x2f, 0x79, 0xc6, 0x90, 0x6a, 0x3c, 0x12, 0x44, 0xbe, 0xe8, 0x57, 0x1, 0xfb, 0xad, 0x98, 0xce, 0x34, 0x62, 0xdd, 0x8b, 0x71, 0x27, 0x1b, 0x4d, 0xb7, 0xe1, 0x5e, 0x8, 0xf2, 0xa4, 0x91, 0xc7, 0x3d, 0x6b, 0xd4, 0x82, 0x78, 0x2e, 0x24, 0x72, 0x88, 0xde, 0x61, 0x37, 0xcd, 0x9b, 0xae, 0xf8, 0x2, 0x54, 0xeb, 0xbd, 0x47, 0x11, 0x2d, 0x7b, 0x81, 0xd7, 0x68, 0x3e, 0xc4, 0x92, 0xa7, 0xf1, 0xb, 0x5d, 0xe2, 0xb4, 0x4e, 0x18, 0x36, 0x60, 0x9a, 0xcc, 0x73, 0x25, 0xdf, 0x89, 0xbc, 0xea, 0x10, 0x46, 0xf9, 0xaf, 0x55, 0x3, 0x3f, 0x69, 0x93, 0xc5, 0x7a, 0x2c, 0xd6, 0x80, 0xb5, 0xe3, 0x19, 0x4f, 0xf0, 0xa6, 0x5c, 0xa, 0x48, 0x1e, 0xe4, 0xb2, 0xd, 0x5b, 0xa1, 0xf7, 0xc2, 0x94, 0x6e, 0x38, 0x87, 0xd1, 0x2b, 0x7d, 0x41, 0x17, 0xed, 0xbb, 0x4, 0x52, 0xa8, 0xfe, 0xcb, 0x9d, 0x67, 0x31, 0x8e, 0xd8, 0x22, 0x74, 0x5a, 0xc, 0xf6, 0xa0, 0x1f, 0x49, 0xb3, 0xe5, 0xd0, 0x86, 0x7c, 0x2a, 0x95, 0xc3, 0x39, 0x6f, 0x53, 0x5, 0xff, 0xa9, 0x16, 0x40, 0xba, 0xec, 0xd9, 0x8f, 0x75, 0x23, 0x9c, 0xca, 0x30, 0x66, 0x6c, 0x3a, 0xc0, 0x96, 0x29, 0x7f, 0x85, 0xd3, 0xe6, 0xb0, 0x4a, 0x1c, 0xa3, 0xf5, 0xf, 0x59, 0x65, 0x33, 0xc9, 0x9f, 0x20, 0x76, 0x8c, 0xda, 0xef, 0xb9, 0x43, 0x15, 0xaa, 0xfc, 0x6, 0x50, 0x7e, 0x28, 0xd2, 0x84, 0x3b, 0x6d, 0x97, 0xc1, 0xf4, 0xa2, 0x58, 0xe, 0xb1, 0xe7, 0x1d, 0x4b, 0x77, 0x21, 0xdb, 0x8d, 0x32, 0x64, 0x9e, 0xc8, 0xfd, 0xab, 0x51, 0x7, 0xb8, 0xee, 0x14, 0x42}, + {0x0, 0x57, 0xae, 0xf9, 0x41, 0x16, 0xef, 0xb8, 0x82, 0xd5, 0x2c, 0x7b, 0xc3, 0x94, 0x6d, 0x3a, 0x19, 0x4e, 0xb7, 0xe0, 0x58, 0xf, 0xf6, 0xa1, 0x9b, 0xcc, 0x35, 0x62, 0xda, 0x8d, 0x74, 0x23, 0x32, 0x65, 0x9c, 0xcb, 0x73, 0x24, 0xdd, 0x8a, 0xb0, 0xe7, 0x1e, 0x49, 0xf1, 0xa6, 0x5f, 0x8, 0x2b, 0x7c, 0x85, 0xd2, 0x6a, 0x3d, 0xc4, 0x93, 0xa9, 0xfe, 0x7, 0x50, 0xe8, 0xbf, 0x46, 0x11, 0x64, 0x33, 0xca, 0x9d, 0x25, 0x72, 0x8b, 0xdc, 0xe6, 0xb1, 0x48, 0x1f, 0xa7, 0xf0, 0x9, 0x5e, 0x7d, 0x2a, 0xd3, 0x84, 0x3c, 0x6b, 0x92, 0xc5, 0xff, 0xa8, 0x51, 0x6, 0xbe, 0xe9, 0x10, 0x47, 0x56, 0x1, 0xf8, 0xaf, 0x17, 0x40, 0xb9, 0xee, 0xd4, 0x83, 0x7a, 0x2d, 0x95, 0xc2, 0x3b, 0x6c, 0x4f, 0x18, 0xe1, 0xb6, 0xe, 0x59, 0xa0, 0xf7, 0xcd, 0x9a, 0x63, 0x34, 0x8c, 0xdb, 0x22, 0x75, 0xc8, 0x9f, 0x66, 0x31, 0x89, 0xde, 0x27, 0x70, 0x4a, 0x1d, 0xe4, 0xb3, 0xb, 0x5c, 0xa5, 0xf2, 0xd1, 0x86, 0x7f, 0x28, 0x90, 0xc7, 0x3e, 0x69, 0x53, 0x4, 0xfd, 0xaa, 0x12, 0x45, 0xbc, 0xeb, 0xfa, 0xad, 0x54, 0x3, 0xbb, 0xec, 0x15, 0x42, 0x78, 0x2f, 0xd6, 0x81, 0x39, 0x6e, 0x97, 0xc0, 0xe3, 0xb4, 0x4d, 0x1a, 0xa2, 0xf5, 0xc, 0x5b, 0x61, 0x36, 0xcf, 0x98, 0x20, 0x77, 0x8e, 0xd9, 0xac, 0xfb, 0x2, 0x55, 0xed, 0xba, 0x43, 0x14, 0x2e, 0x79, 0x80, 0xd7, 0x6f, 0x38, 0xc1, 0x96, 0xb5, 0xe2, 0x1b, 0x4c, 0xf4, 0xa3, 0x5a, 0xd, 0x37, 0x60, 0x99, 0xce, 0x76, 0x21, 0xd8, 0x8f, 0x9e, 0xc9, 0x30, 0x67, 0xdf, 0x88, 0x71, 0x26, 0x1c, 0x4b, 0xb2, 0xe5, 0x5d, 0xa, 0xf3, 0xa4, 0x87, 0xd0, 0x29, 0x7e, 0xc6, 0x91, 0x68, 0x3f, 0x5, 0x52, 0xab, 0xfc, 0x44, 0x13, 0xea, 0xbd}, + {0x0, 0x58, 0xb0, 0xe8, 0x7d, 0x25, 0xcd, 0x95, 0xfa, 0xa2, 0x4a, 0x12, 0x87, 0xdf, 0x37, 0x6f, 0xe9, 0xb1, 0x59, 0x1, 0x94, 0xcc, 0x24, 0x7c, 0x13, 0x4b, 0xa3, 0xfb, 0x6e, 0x36, 0xde, 0x86, 0xcf, 0x97, 0x7f, 0x27, 0xb2, 0xea, 0x2, 0x5a, 0x35, 0x6d, 0x85, 0xdd, 0x48, 0x10, 0xf8, 0xa0, 0x26, 0x7e, 0x96, 0xce, 0x5b, 0x3, 0xeb, 0xb3, 0xdc, 0x84, 0x6c, 0x34, 0xa1, 0xf9, 0x11, 0x49, 0x83, 0xdb, 0x33, 0x6b, 0xfe, 0xa6, 0x4e, 0x16, 0x79, 0x21, 0xc9, 0x91, 0x4, 0x5c, 0xb4, 0xec, 0x6a, 0x32, 0xda, 0x82, 0x17, 0x4f, 0xa7, 0xff, 0x90, 0xc8, 0x20, 0x78, 0xed, 0xb5, 0x5d, 0x5, 0x4c, 0x14, 0xfc, 0xa4, 0x31, 0x69, 0x81, 0xd9, 0xb6, 0xee, 0x6, 0x5e, 0xcb, 0x93, 0x7b, 0x23, 0xa5, 0xfd, 0x15, 0x4d, 0xd8, 0x80, 0x68, 0x30, 0x5f, 0x7, 0xef, 0xb7, 0x22, 0x7a, 0x92, 0xca, 0x1b, 0x43, 0xab, 0xf3, 0x66, 0x3e, 0xd6, 0x8e, 0xe1, 0xb9, 0x51, 0x9, 0x9c, 0xc4, 0x2c, 0x74, 0xf2, 0xaa, 0x42, 0x1a, 0x8f, 0xd7, 0x3f, 0x67, 0x8, 0x50, 0xb8, 0xe0, 0x75, 0x2d, 0xc5, 0x9d, 0xd4, 0x8c, 0x64, 0x3c, 0xa9, 0xf1, 0x19, 0x41, 0x2e, 0x76, 0x9e, 0xc6, 0x53, 0xb, 0xe3, 0xbb, 0x3d, 0x65, 0x8d, 0xd5, 0x40, 0x18, 0xf0, 0xa8, 0xc7, 0x9f, 0x77, 0x2f, 0xba, 0xe2, 0xa, 0x52, 0x98, 0xc0, 0x28, 0x70, 0xe5, 0xbd, 0x55, 0xd, 0x62, 0x3a, 0xd2, 0x8a, 0x1f, 0x47, 0xaf, 0xf7, 0x71, 0x29, 0xc1, 0x99, 0xc, 0x54, 0xbc, 0xe4, 0x8b, 0xd3, 0x3b, 0x63, 0xf6, 0xae, 0x46, 0x1e, 0x57, 0xf, 0xe7, 0xbf, 0x2a, 0x72, 0x9a, 0xc2, 0xad, 0xf5, 0x1d, 0x45, 0xd0, 0x88, 0x60, 0x38, 0xbe, 0xe6, 0xe, 0x56, 0xc3, 0x9b, 0x73, 0x2b, 0x44, 0x1c, 0xf4, 0xac, 0x39, 0x61, 0x89, 0xd1}, + {0x0, 0x59, 0xb2, 0xeb, 0x79, 0x20, 0xcb, 0x92, 0xf2, 0xab, 0x40, 0x19, 0x8b, 0xd2, 0x39, 0x60, 0xf9, 0xa0, 0x4b, 0x12, 0x80, 0xd9, 0x32, 0x6b, 0xb, 0x52, 0xb9, 0xe0, 0x72, 0x2b, 0xc0, 0x99, 0xef, 0xb6, 0x5d, 0x4, 0x96, 0xcf, 0x24, 0x7d, 0x1d, 0x44, 0xaf, 0xf6, 0x64, 0x3d, 0xd6, 0x8f, 0x16, 0x4f, 0xa4, 0xfd, 0x6f, 0x36, 0xdd, 0x84, 0xe4, 0xbd, 0x56, 0xf, 0x9d, 0xc4, 0x2f, 0x76, 0xc3, 0x9a, 0x71, 0x28, 0xba, 0xe3, 0x8, 0x51, 0x31, 0x68, 0x83, 0xda, 0x48, 0x11, 0xfa, 0xa3, 0x3a, 0x63, 0x88, 0xd1, 0x43, 0x1a, 0xf1, 0xa8, 0xc8, 0x91, 0x7a, 0x23, 0xb1, 0xe8, 0x3, 0x5a, 0x2c, 0x75, 0x9e, 0xc7, 0x55, 0xc, 0xe7, 0xbe, 0xde, 0x87, 0x6c, 0x35, 0xa7, 0xfe, 0x15, 0x4c, 0xd5, 0x8c, 0x67, 0x3e, 0xac, 0xf5, 0x1e, 0x47, 0x27, 0x7e, 0x95, 0xcc, 0x5e, 0x7, 0xec, 0xb5, 0x9b, 0xc2, 0x29, 0x70, 0xe2, 0xbb, 0x50, 0x9, 0x69, 0x30, 0xdb, 0x82, 0x10, 0x49, 0xa2, 0xfb, 0x62, 0x3b, 0xd0, 0x89, 0x1b, 0x42, 0xa9, 0xf0, 0x90, 0xc9, 0x22, 0x7b, 0xe9, 0xb0, 0x5b, 0x2, 0x74, 0x2d, 0xc6, 0x9f, 0xd, 0x54, 0xbf, 0xe6, 0x86, 0xdf, 0x34, 0x6d, 0xff, 0xa6, 0x4d, 0x14, 0x8d, 0xd4, 0x3f, 0x66, 0xf4, 0xad, 0x46, 0x1f, 0x7f, 0x26, 0xcd, 0x94, 0x6, 0x5f, 0xb4, 0xed, 0x58, 0x1, 0xea, 0xb3, 0x21, 0x78, 0x93, 0xca, 0xaa, 0xf3, 0x18, 0x41, 0xd3, 0x8a, 0x61, 0x38, 0xa1, 0xf8, 0x13, 0x4a, 0xd8, 0x81, 0x6a, 0x33, 0x53, 0xa, 0xe1, 0xb8, 0x2a, 0x73, 0x98, 0xc1, 0xb7, 0xee, 0x5, 0x5c, 0xce, 0x97, 0x7c, 0x25, 0x45, 0x1c, 0xf7, 0xae, 0x3c, 0x65, 0x8e, 0xd7, 0x4e, 0x17, 0xfc, 0xa5, 0x37, 0x6e, 0x85, 0xdc, 0xbc, 0xe5, 0xe, 0x57, 0xc5, 0x9c, 0x77, 0x2e}, + {0x0, 0x5a, 0xb4, 0xee, 0x75, 0x2f, 0xc1, 0x9b, 0xea, 0xb0, 0x5e, 0x4, 0x9f, 0xc5, 0x2b, 0x71, 0xc9, 0x93, 0x7d, 0x27, 0xbc, 0xe6, 0x8, 0x52, 0x23, 0x79, 0x97, 0xcd, 0x56, 0xc, 0xe2, 0xb8, 0x8f, 0xd5, 0x3b, 0x61, 0xfa, 0xa0, 0x4e, 0x14, 0x65, 0x3f, 0xd1, 0x8b, 0x10, 0x4a, 0xa4, 0xfe, 0x46, 0x1c, 0xf2, 0xa8, 0x33, 0x69, 0x87, 0xdd, 0xac, 0xf6, 0x18, 0x42, 0xd9, 0x83, 0x6d, 0x37, 0x3, 0x59, 0xb7, 0xed, 0x76, 0x2c, 0xc2, 0x98, 0xe9, 0xb3, 0x5d, 0x7, 0x9c, 0xc6, 0x28, 0x72, 0xca, 0x90, 0x7e, 0x24, 0xbf, 0xe5, 0xb, 0x51, 0x20, 0x7a, 0x94, 0xce, 0x55, 0xf, 0xe1, 0xbb, 0x8c, 0xd6, 0x38, 0x62, 0xf9, 0xa3, 0x4d, 0x17, 0x66, 0x3c, 0xd2, 0x88, 0x13, 0x49, 0xa7, 0xfd, 0x45, 0x1f, 0xf1, 0xab, 0x30, 0x6a, 0x84, 0xde, 0xaf, 0xf5, 0x1b, 0x41, 0xda, 0x80, 0x6e, 0x34, 0x6, 0x5c, 0xb2, 0xe8, 0x73, 0x29, 0xc7, 0x9d, 0xec, 0xb6, 0x58, 0x2, 0x99, 0xc3, 0x2d, 0x77, 0xcf, 0x95, 0x7b, 0x21, 0xba, 0xe0, 0xe, 0x54, 0x25, 0x7f, 0x91, 0xcb, 0x50, 0xa, 0xe4, 0xbe, 0x89, 0xd3, 0x3d, 0x67, 0xfc, 0xa6, 0x48, 0x12, 0x63, 0x39, 0xd7, 0x8d, 0x16, 0x4c, 0xa2, 0xf8, 0x40, 0x1a, 0xf4, 0xae, 0x35, 0x6f, 0x81, 0xdb, 0xaa, 0xf0, 0x1e, 0x44, 0xdf, 0x85, 0x6b, 0x31, 0x5, 0x5f, 0xb1, 0xeb, 0x70, 0x2a, 0xc4, 0x9e, 0xef, 0xb5, 0x5b, 0x1, 0x9a, 0xc0, 0x2e, 0x74, 0xcc, 0x96, 0x78, 0x22, 0xb9, 0xe3, 0xd, 0x57, 0x26, 0x7c, 0x92, 0xc8, 0x53, 0x9, 0xe7, 0xbd, 0x8a, 0xd0, 0x3e, 0x64, 0xff, 0xa5, 0x4b, 0x11, 0x60, 0x3a, 0xd4, 0x8e, 0x15, 0x4f, 0xa1, 0xfb, 0x43, 0x19, 0xf7, 0xad, 0x36, 0x6c, 0x82, 0xd8, 0xa9, 0xf3, 0x1d, 0x47, 0xdc, 0x86, 0x68, 0x32}, + {0x0, 0x5b, 0xb6, 0xed, 0x71, 0x2a, 0xc7, 0x9c, 0xe2, 0xb9, 0x54, 0xf, 0x93, 0xc8, 0x25, 0x7e, 0xd9, 0x82, 0x6f, 0x34, 0xa8, 0xf3, 0x1e, 0x45, 0x3b, 0x60, 0x8d, 0xd6, 0x4a, 0x11, 0xfc, 0xa7, 0xaf, 0xf4, 0x19, 0x42, 0xde, 0x85, 0x68, 0x33, 0x4d, 0x16, 0xfb, 0xa0, 0x3c, 0x67, 0x8a, 0xd1, 0x76, 0x2d, 0xc0, 0x9b, 0x7, 0x5c, 0xb1, 0xea, 0x94, 0xcf, 0x22, 0x79, 0xe5, 0xbe, 0x53, 0x8, 0x43, 0x18, 0xf5, 0xae, 0x32, 0x69, 0x84, 0xdf, 0xa1, 0xfa, 0x17, 0x4c, 0xd0, 0x8b, 0x66, 0x3d, 0x9a, 0xc1, 0x2c, 0x77, 0xeb, 0xb0, 0x5d, 0x6, 0x78, 0x23, 0xce, 0x95, 0x9, 0x52, 0xbf, 0xe4, 0xec, 0xb7, 0x5a, 0x1, 0x9d, 0xc6, 0x2b, 0x70, 0xe, 0x55, 0xb8, 0xe3, 0x7f, 0x24, 0xc9, 0x92, 0x35, 0x6e, 0x83, 0xd8, 0x44, 0x1f, 0xf2, 0xa9, 0xd7, 0x8c, 0x61, 0x3a, 0xa6, 0xfd, 0x10, 0x4b, 0x86, 0xdd, 0x30, 0x6b, 0xf7, 0xac, 0x41, 0x1a, 0x64, 0x3f, 0xd2, 0x89, 0x15, 0x4e, 0xa3, 0xf8, 0x5f, 0x4, 0xe9, 0xb2, 0x2e, 0x75, 0x98, 0xc3, 0xbd, 0xe6, 0xb, 0x50, 0xcc, 0x97, 0x7a, 0x21, 0x29, 0x72, 0x9f, 0xc4, 0x58, 0x3, 0xee, 0xb5, 0xcb, 0x90, 0x7d, 0x26, 0xba, 0xe1, 0xc, 0x57, 0xf0, 0xab, 0x46, 0x1d, 0x81, 0xda, 0x37, 0x6c, 0x12, 0x49, 0xa4, 0xff, 0x63, 0x38, 0xd5, 0x8e, 0xc5, 0x9e, 0x73, 0x28, 0xb4, 0xef, 0x2, 0x59, 0x27, 0x7c, 0x91, 0xca, 0x56, 0xd, 0xe0, 0xbb, 0x1c, 0x47, 0xaa, 0xf1, 0x6d, 0x36, 0xdb, 0x80, 0xfe, 0xa5, 0x48, 0x13, 0x8f, 0xd4, 0x39, 0x62, 0x6a, 0x31, 0xdc, 0x87, 0x1b, 0x40, 0xad, 0xf6, 0x88, 0xd3, 0x3e, 0x65, 0xf9, 0xa2, 0x4f, 0x14, 0xb3, 0xe8, 0x5, 0x5e, 0xc2, 0x99, 0x74, 0x2f, 0x51, 0xa, 0xe7, 0xbc, 0x20, 0x7b, 0x96, 0xcd}, + {0x0, 0x5c, 0xb8, 0xe4, 0x6d, 0x31, 0xd5, 0x89, 0xda, 0x86, 0x62, 0x3e, 0xb7, 0xeb, 0xf, 0x53, 0xa9, 0xf5, 0x11, 0x4d, 0xc4, 0x98, 0x7c, 0x20, 0x73, 0x2f, 0xcb, 0x97, 0x1e, 0x42, 0xa6, 0xfa, 0x4f, 0x13, 0xf7, 0xab, 0x22, 0x7e, 0x9a, 0xc6, 0x95, 0xc9, 0x2d, 0x71, 0xf8, 0xa4, 0x40, 0x1c, 0xe6, 0xba, 0x5e, 0x2, 0x8b, 0xd7, 0x33, 0x6f, 0x3c, 0x60, 0x84, 0xd8, 0x51, 0xd, 0xe9, 0xb5, 0x9e, 0xc2, 0x26, 0x7a, 0xf3, 0xaf, 0x4b, 0x17, 0x44, 0x18, 0xfc, 0xa0, 0x29, 0x75, 0x91, 0xcd, 0x37, 0x6b, 0x8f, 0xd3, 0x5a, 0x6, 0xe2, 0xbe, 0xed, 0xb1, 0x55, 0x9, 0x80, 0xdc, 0x38, 0x64, 0xd1, 0x8d, 0x69, 0x35, 0xbc, 0xe0, 0x4, 0x58, 0xb, 0x57, 0xb3, 0xef, 0x66, 0x3a, 0xde, 0x82, 0x78, 0x24, 0xc0, 0x9c, 0x15, 0x49, 0xad, 0xf1, 0xa2, 0xfe, 0x1a, 0x46, 0xcf, 0x93, 0x77, 0x2b, 0x21, 0x7d, 0x99, 0xc5, 0x4c, 0x10, 0xf4, 0xa8, 0xfb, 0xa7, 0x43, 0x1f, 0x96, 0xca, 0x2e, 0x72, 0x88, 0xd4, 0x30, 0x6c, 0xe5, 0xb9, 0x5d, 0x1, 0x52, 0xe, 0xea, 0xb6, 0x3f, 0x63, 0x87, 0xdb, 0x6e, 0x32, 0xd6, 0x8a, 0x3, 0x5f, 0xbb, 0xe7, 0xb4, 0xe8, 0xc, 0x50, 0xd9, 0x85, 0x61, 0x3d, 0xc7, 0x9b, 0x7f, 0x23, 0xaa, 0xf6, 0x12, 0x4e, 0x1d, 0x41, 0xa5, 0xf9, 0x70, 0x2c, 0xc8, 0x94, 0xbf, 0xe3, 0x7, 0x5b, 0xd2, 0x8e, 0x6a, 0x36, 0x65, 0x39, 0xdd, 0x81, 0x8, 0x54, 0xb0, 0xec, 0x16, 0x4a, 0xae, 0xf2, 0x7b, 0x27, 0xc3, 0x9f, 0xcc, 0x90, 0x74, 0x28, 0xa1, 0xfd, 0x19, 0x45, 0xf0, 0xac, 0x48, 0x14, 0x9d, 0xc1, 0x25, 0x79, 0x2a, 0x76, 0x92, 0xce, 0x47, 0x1b, 0xff, 0xa3, 0x59, 0x5, 0xe1, 0xbd, 0x34, 0x68, 0x8c, 0xd0, 0x83, 0xdf, 0x3b, 0x67, 0xee, 0xb2, 0x56, 0xa}, + {0x0, 0x5d, 0xba, 0xe7, 0x69, 0x34, 0xd3, 0x8e, 0xd2, 0x8f, 0x68, 0x35, 0xbb, 0xe6, 0x1, 0x5c, 0xb9, 0xe4, 0x3, 0x5e, 0xd0, 0x8d, 0x6a, 0x37, 0x6b, 0x36, 0xd1, 0x8c, 0x2, 0x5f, 0xb8, 0xe5, 0x6f, 0x32, 0xd5, 0x88, 0x6, 0x5b, 0xbc, 0xe1, 0xbd, 0xe0, 0x7, 0x5a, 0xd4, 0x89, 0x6e, 0x33, 0xd6, 0x8b, 0x6c, 0x31, 0xbf, 0xe2, 0x5, 0x58, 0x4, 0x59, 0xbe, 0xe3, 0x6d, 0x30, 0xd7, 0x8a, 0xde, 0x83, 0x64, 0x39, 0xb7, 0xea, 0xd, 0x50, 0xc, 0x51, 0xb6, 0xeb, 0x65, 0x38, 0xdf, 0x82, 0x67, 0x3a, 0xdd, 0x80, 0xe, 0x53, 0xb4, 0xe9, 0xb5, 0xe8, 0xf, 0x52, 0xdc, 0x81, 0x66, 0x3b, 0xb1, 0xec, 0xb, 0x56, 0xd8, 0x85, 0x62, 0x3f, 0x63, 0x3e, 0xd9, 0x84, 0xa, 0x57, 0xb0, 0xed, 0x8, 0x55, 0xb2, 0xef, 0x61, 0x3c, 0xdb, 0x86, 0xda, 0x87, 0x60, 0x3d, 0xb3, 0xee, 0x9, 0x54, 0xa1, 0xfc, 0x1b, 0x46, 0xc8, 0x95, 0x72, 0x2f, 0x73, 0x2e, 0xc9, 0x94, 0x1a, 0x47, 0xa0, 0xfd, 0x18, 0x45, 0xa2, 0xff, 0x71, 0x2c, 0xcb, 0x96, 0xca, 0x97, 0x70, 0x2d, 0xa3, 0xfe, 0x19, 0x44, 0xce, 0x93, 0x74, 0x29, 0xa7, 0xfa, 0x1d, 0x40, 0x1c, 0x41, 0xa6, 0xfb, 0x75, 0x28, 0xcf, 0x92, 0x77, 0x2a, 0xcd, 0x90, 0x1e, 0x43, 0xa4, 0xf9, 0xa5, 0xf8, 0x1f, 0x42, 0xcc, 0x91, 0x76, 0x2b, 0x7f, 0x22, 0xc5, 0x98, 0x16, 0x4b, 0xac, 0xf1, 0xad, 0xf0, 0x17, 0x4a, 0xc4, 0x99, 0x7e, 0x23, 0xc6, 0x9b, 0x7c, 0x21, 0xaf, 0xf2, 0x15, 0x48, 0x14, 0x49, 0xae, 0xf3, 0x7d, 0x20, 0xc7, 0x9a, 0x10, 0x4d, 0xaa, 0xf7, 0x79, 0x24, 0xc3, 0x9e, 0xc2, 0x9f, 0x78, 0x25, 0xab, 0xf6, 0x11, 0x4c, 0xa9, 0xf4, 0x13, 0x4e, 0xc0, 0x9d, 0x7a, 0x27, 0x7b, 0x26, 0xc1, 0x9c, 0x12, 0x4f, 0xa8, 0xf5}, + {0x0, 0x5e, 0xbc, 0xe2, 0x65, 0x3b, 0xd9, 0x87, 0xca, 0x94, 0x76, 0x28, 0xaf, 0xf1, 0x13, 0x4d, 0x89, 0xd7, 0x35, 0x6b, 0xec, 0xb2, 0x50, 0xe, 0x43, 0x1d, 0xff, 0xa1, 0x26, 0x78, 0x9a, 0xc4, 0xf, 0x51, 0xb3, 0xed, 0x6a, 0x34, 0xd6, 0x88, 0xc5, 0x9b, 0x79, 0x27, 0xa0, 0xfe, 0x1c, 0x42, 0x86, 0xd8, 0x3a, 0x64, 0xe3, 0xbd, 0x5f, 0x1, 0x4c, 0x12, 0xf0, 0xae, 0x29, 0x77, 0x95, 0xcb, 0x1e, 0x40, 0xa2, 0xfc, 0x7b, 0x25, 0xc7, 0x99, 0xd4, 0x8a, 0x68, 0x36, 0xb1, 0xef, 0xd, 0x53, 0x97, 0xc9, 0x2b, 0x75, 0xf2, 0xac, 0x4e, 0x10, 0x5d, 0x3, 0xe1, 0xbf, 0x38, 0x66, 0x84, 0xda, 0x11, 0x4f, 0xad, 0xf3, 0x74, 0x2a, 0xc8, 0x96, 0xdb, 0x85, 0x67, 0x39, 0xbe, 0xe0, 0x2, 0x5c, 0x98, 0xc6, 0x24, 0x7a, 0xfd, 0xa3, 0x41, 0x1f, 0x52, 0xc, 0xee, 0xb0, 0x37, 0x69, 0x8b, 0xd5, 0x3c, 0x62, 0x80, 0xde, 0x59, 0x7, 0xe5, 0xbb, 0xf6, 0xa8, 0x4a, 0x14, 0x93, 0xcd, 0x2f, 0x71, 0xb5, 0xeb, 0x9, 0x57, 0xd0, 0x8e, 0x6c, 0x32, 0x7f, 0x21, 0xc3, 0x9d, 0x1a, 0x44, 0xa6, 0xf8, 0x33, 0x6d, 0x8f, 0xd1, 0x56, 0x8, 0xea, 0xb4, 0xf9, 0xa7, 0x45, 0x1b, 0x9c, 0xc2, 0x20, 0x7e, 0xba, 0xe4, 0x6, 0x58, 0xdf, 0x81, 0x63, 0x3d, 0x70, 0x2e, 0xcc, 0x92, 0x15, 0x4b, 0xa9, 0xf7, 0x22, 0x7c, 0x9e, 0xc0, 0x47, 0x19, 0xfb, 0xa5, 0xe8, 0xb6, 0x54, 0xa, 0x8d, 0xd3, 0x31, 0x6f, 0xab, 0xf5, 0x17, 0x49, 0xce, 0x90, 0x72, 0x2c, 0x61, 0x3f, 0xdd, 0x83, 0x4, 0x5a, 0xb8, 0xe6, 0x2d, 0x73, 0x91, 0xcf, 0x48, 0x16, 0xf4, 0xaa, 0xe7, 0xb9, 0x5b, 0x5, 0x82, 0xdc, 0x3e, 0x60, 0xa4, 0xfa, 0x18, 0x46, 0xc1, 0x9f, 0x7d, 0x23, 0x6e, 0x30, 0xd2, 0x8c, 0xb, 0x55, 0xb7, 0xe9}, + {0x0, 0x5f, 0xbe, 0xe1, 0x61, 0x3e, 0xdf, 0x80, 0xc2, 0x9d, 0x7c, 0x23, 0xa3, 0xfc, 0x1d, 0x42, 0x99, 0xc6, 0x27, 0x78, 0xf8, 0xa7, 0x46, 0x19, 0x5b, 0x4, 0xe5, 0xba, 0x3a, 0x65, 0x84, 0xdb, 0x2f, 0x70, 0x91, 0xce, 0x4e, 0x11, 0xf0, 0xaf, 0xed, 0xb2, 0x53, 0xc, 0x8c, 0xd3, 0x32, 0x6d, 0xb6, 0xe9, 0x8, 0x57, 0xd7, 0x88, 0x69, 0x36, 0x74, 0x2b, 0xca, 0x95, 0x15, 0x4a, 0xab, 0xf4, 0x5e, 0x1, 0xe0, 0xbf, 0x3f, 0x60, 0x81, 0xde, 0x9c, 0xc3, 0x22, 0x7d, 0xfd, 0xa2, 0x43, 0x1c, 0xc7, 0x98, 0x79, 0x26, 0xa6, 0xf9, 0x18, 0x47, 0x5, 0x5a, 0xbb, 0xe4, 0x64, 0x3b, 0xda, 0x85, 0x71, 0x2e, 0xcf, 0x90, 0x10, 0x4f, 0xae, 0xf1, 0xb3, 0xec, 0xd, 0x52, 0xd2, 0x8d, 0x6c, 0x33, 0xe8, 0xb7, 0x56, 0x9, 0x89, 0xd6, 0x37, 0x68, 0x2a, 0x75, 0x94, 0xcb, 0x4b, 0x14, 0xf5, 0xaa, 0xbc, 0xe3, 0x2, 0x5d, 0xdd, 0x82, 0x63, 0x3c, 0x7e, 0x21, 0xc0, 0x9f, 0x1f, 0x40, 0xa1, 0xfe, 0x25, 0x7a, 0x9b, 0xc4, 0x44, 0x1b, 0xfa, 0xa5, 0xe7, 0xb8, 0x59, 0x6, 0x86, 0xd9, 0x38, 0x67, 0x93, 0xcc, 0x2d, 0x72, 0xf2, 0xad, 0x4c, 0x13, 0x51, 0xe, 0xef, 0xb0, 0x30, 0x6f, 0x8e, 0xd1, 0xa, 0x55, 0xb4, 0xeb, 0x6b, 0x34, 0xd5, 0x8a, 0xc8, 0x97, 0x76, 0x29, 0xa9, 0xf6, 0x17, 0x48, 0xe2, 0xbd, 0x5c, 0x3, 0x83, 0xdc, 0x3d, 0x62, 0x20, 0x7f, 0x9e, 0xc1, 0x41, 0x1e, 0xff, 0xa0, 0x7b, 0x24, 0xc5, 0x9a, 0x1a, 0x45, 0xa4, 0xfb, 0xb9, 0xe6, 0x7, 0x58, 0xd8, 0x87, 0x66, 0x39, 0xcd, 0x92, 0x73, 0x2c, 0xac, 0xf3, 0x12, 0x4d, 0xf, 0x50, 0xb1, 0xee, 0x6e, 0x31, 0xd0, 0x8f, 0x54, 0xb, 0xea, 0xb5, 0x35, 0x6a, 0x8b, 0xd4, 0x96, 0xc9, 0x28, 0x77, 0xf7, 0xa8, 0x49, 0x16}, + {0x0, 0x60, 0xc0, 0xa0, 0x9d, 0xfd, 0x5d, 0x3d, 0x27, 0x47, 0xe7, 0x87, 0xba, 0xda, 0x7a, 0x1a, 0x4e, 0x2e, 0x8e, 0xee, 0xd3, 0xb3, 0x13, 0x73, 0x69, 0x9, 0xa9, 0xc9, 0xf4, 0x94, 0x34, 0x54, 0x9c, 0xfc, 0x5c, 0x3c, 0x1, 0x61, 0xc1, 0xa1, 0xbb, 0xdb, 0x7b, 0x1b, 0x26, 0x46, 0xe6, 0x86, 0xd2, 0xb2, 0x12, 0x72, 0x4f, 0x2f, 0x8f, 0xef, 0xf5, 0x95, 0x35, 0x55, 0x68, 0x8, 0xa8, 0xc8, 0x25, 0x45, 0xe5, 0x85, 0xb8, 0xd8, 0x78, 0x18, 0x2, 0x62, 0xc2, 0xa2, 0x9f, 0xff, 0x5f, 0x3f, 0x6b, 0xb, 0xab, 0xcb, 0xf6, 0x96, 0x36, 0x56, 0x4c, 0x2c, 0x8c, 0xec, 0xd1, 0xb1, 0x11, 0x71, 0xb9, 0xd9, 0x79, 0x19, 0x24, 0x44, 0xe4, 0x84, 0x9e, 0xfe, 0x5e, 0x3e, 0x3, 0x63, 0xc3, 0xa3, 0xf7, 0x97, 0x37, 0x57, 0x6a, 0xa, 0xaa, 0xca, 0xd0, 0xb0, 0x10, 0x70, 0x4d, 0x2d, 0x8d, 0xed, 0x4a, 0x2a, 0x8a, 0xea, 0xd7, 0xb7, 0x17, 0x77, 0x6d, 0xd, 0xad, 0xcd, 0xf0, 0x90, 0x30, 0x50, 0x4, 0x64, 0xc4, 0xa4, 0x99, 0xf9, 0x59, 0x39, 0x23, 0x43, 0xe3, 0x83, 0xbe, 0xde, 0x7e, 0x1e, 0xd6, 0xb6, 0x16, 0x76, 0x4b, 0x2b, 0x8b, 0xeb, 0xf1, 0x91, 0x31, 0x51, 0x6c, 0xc, 0xac, 0xcc, 0x98, 0xf8, 0x58, 0x38, 0x5, 0x65, 0xc5, 0xa5, 0xbf, 0xdf, 0x7f, 0x1f, 0x22, 0x42, 0xe2, 0x82, 0x6f, 0xf, 0xaf, 0xcf, 0xf2, 0x92, 0x32, 0x52, 0x48, 0x28, 0x88, 0xe8, 0xd5, 0xb5, 0x15, 0x75, 0x21, 0x41, 0xe1, 0x81, 0xbc, 0xdc, 0x7c, 0x1c, 0x6, 0x66, 0xc6, 0xa6, 0x9b, 0xfb, 0x5b, 0x3b, 0xf3, 0x93, 0x33, 0x53, 0x6e, 0xe, 0xae, 0xce, 0xd4, 0xb4, 0x14, 0x74, 0x49, 0x29, 0x89, 0xe9, 0xbd, 0xdd, 0x7d, 0x1d, 0x20, 0x40, 0xe0, 0x80, 0x9a, 0xfa, 0x5a, 0x3a, 0x7, 0x67, 0xc7, 0xa7}, + {0x0, 0x61, 0xc2, 0xa3, 0x99, 0xf8, 0x5b, 0x3a, 0x2f, 0x4e, 0xed, 0x8c, 0xb6, 0xd7, 0x74, 0x15, 0x5e, 0x3f, 0x9c, 0xfd, 0xc7, 0xa6, 0x5, 0x64, 0x71, 0x10, 0xb3, 0xd2, 0xe8, 0x89, 0x2a, 0x4b, 0xbc, 0xdd, 0x7e, 0x1f, 0x25, 0x44, 0xe7, 0x86, 0x93, 0xf2, 0x51, 0x30, 0xa, 0x6b, 0xc8, 0xa9, 0xe2, 0x83, 0x20, 0x41, 0x7b, 0x1a, 0xb9, 0xd8, 0xcd, 0xac, 0xf, 0x6e, 0x54, 0x35, 0x96, 0xf7, 0x65, 0x4, 0xa7, 0xc6, 0xfc, 0x9d, 0x3e, 0x5f, 0x4a, 0x2b, 0x88, 0xe9, 0xd3, 0xb2, 0x11, 0x70, 0x3b, 0x5a, 0xf9, 0x98, 0xa2, 0xc3, 0x60, 0x1, 0x14, 0x75, 0xd6, 0xb7, 0x8d, 0xec, 0x4f, 0x2e, 0xd9, 0xb8, 0x1b, 0x7a, 0x40, 0x21, 0x82, 0xe3, 0xf6, 0x97, 0x34, 0x55, 0x6f, 0xe, 0xad, 0xcc, 0x87, 0xe6, 0x45, 0x24, 0x1e, 0x7f, 0xdc, 0xbd, 0xa8, 0xc9, 0x6a, 0xb, 0x31, 0x50, 0xf3, 0x92, 0xca, 0xab, 0x8, 0x69, 0x53, 0x32, 0x91, 0xf0, 0xe5, 0x84, 0x27, 0x46, 0x7c, 0x1d, 0xbe, 0xdf, 0x94, 0xf5, 0x56, 0x37, 0xd, 0x6c, 0xcf, 0xae, 0xbb, 0xda, 0x79, 0x18, 0x22, 0x43, 0xe0, 0x81, 0x76, 0x17, 0xb4, 0xd5, 0xef, 0x8e, 0x2d, 0x4c, 0x59, 0x38, 0x9b, 0xfa, 0xc0, 0xa1, 0x2, 0x63, 0x28, 0x49, 0xea, 0x8b, 0xb1, 0xd0, 0x73, 0x12, 0x7, 0x66, 0xc5, 0xa4, 0x9e, 0xff, 0x5c, 0x3d, 0xaf, 0xce, 0x6d, 0xc, 0x36, 0x57, 0xf4, 0x95, 0x80, 0xe1, 0x42, 0x23, 0x19, 0x78, 0xdb, 0xba, 0xf1, 0x90, 0x33, 0x52, 0x68, 0x9, 0xaa, 0xcb, 0xde, 0xbf, 0x1c, 0x7d, 0x47, 0x26, 0x85, 0xe4, 0x13, 0x72, 0xd1, 0xb0, 0x8a, 0xeb, 0x48, 0x29, 0x3c, 0x5d, 0xfe, 0x9f, 0xa5, 0xc4, 0x67, 0x6, 0x4d, 0x2c, 0x8f, 0xee, 0xd4, 0xb5, 0x16, 0x77, 0x62, 0x3, 0xa0, 0xc1, 0xfb, 0x9a, 0x39, 0x58}, + {0x0, 0x62, 0xc4, 0xa6, 0x95, 0xf7, 0x51, 0x33, 0x37, 0x55, 0xf3, 0x91, 0xa2, 0xc0, 0x66, 0x4, 0x6e, 0xc, 0xaa, 0xc8, 0xfb, 0x99, 0x3f, 0x5d, 0x59, 0x3b, 0x9d, 0xff, 0xcc, 0xae, 0x8, 0x6a, 0xdc, 0xbe, 0x18, 0x7a, 0x49, 0x2b, 0x8d, 0xef, 0xeb, 0x89, 0x2f, 0x4d, 0x7e, 0x1c, 0xba, 0xd8, 0xb2, 0xd0, 0x76, 0x14, 0x27, 0x45, 0xe3, 0x81, 0x85, 0xe7, 0x41, 0x23, 0x10, 0x72, 0xd4, 0xb6, 0xa5, 0xc7, 0x61, 0x3, 0x30, 0x52, 0xf4, 0x96, 0x92, 0xf0, 0x56, 0x34, 0x7, 0x65, 0xc3, 0xa1, 0xcb, 0xa9, 0xf, 0x6d, 0x5e, 0x3c, 0x9a, 0xf8, 0xfc, 0x9e, 0x38, 0x5a, 0x69, 0xb, 0xad, 0xcf, 0x79, 0x1b, 0xbd, 0xdf, 0xec, 0x8e, 0x28, 0x4a, 0x4e, 0x2c, 0x8a, 0xe8, 0xdb, 0xb9, 0x1f, 0x7d, 0x17, 0x75, 0xd3, 0xb1, 0x82, 0xe0, 0x46, 0x24, 0x20, 0x42, 0xe4, 0x86, 0xb5, 0xd7, 0x71, 0x13, 0x57, 0x35, 0x93, 0xf1, 0xc2, 0xa0, 0x6, 0x64, 0x60, 0x2, 0xa4, 0xc6, 0xf5, 0x97, 0x31, 0x53, 0x39, 0x5b, 0xfd, 0x9f, 0xac, 0xce, 0x68, 0xa, 0xe, 0x6c, 0xca, 0xa8, 0x9b, 0xf9, 0x5f, 0x3d, 0x8b, 0xe9, 0x4f, 0x2d, 0x1e, 0x7c, 0xda, 0xb8, 0xbc, 0xde, 0x78, 0x1a, 0x29, 0x4b, 0xed, 0x8f, 0xe5, 0x87, 0x21, 0x43, 0x70, 0x12, 0xb4, 0xd6, 0xd2, 0xb0, 0x16, 0x74, 0x47, 0x25, 0x83, 0xe1, 0xf2, 0x90, 0x36, 0x54, 0x67, 0x5, 0xa3, 0xc1, 0xc5, 0xa7, 0x1, 0x63, 0x50, 0x32, 0x94, 0xf6, 0x9c, 0xfe, 0x58, 0x3a, 0x9, 0x6b, 0xcd, 0xaf, 0xab, 0xc9, 0x6f, 0xd, 0x3e, 0x5c, 0xfa, 0x98, 0x2e, 0x4c, 0xea, 0x88, 0xbb, 0xd9, 0x7f, 0x1d, 0x19, 0x7b, 0xdd, 0xbf, 0x8c, 0xee, 0x48, 0x2a, 0x40, 0x22, 0x84, 0xe6, 0xd5, 0xb7, 0x11, 0x73, 0x77, 0x15, 0xb3, 0xd1, 0xe2, 0x80, 0x26, 0x44}, + {0x0, 0x63, 0xc6, 0xa5, 0x91, 0xf2, 0x57, 0x34, 0x3f, 0x5c, 0xf9, 0x9a, 0xae, 0xcd, 0x68, 0xb, 0x7e, 0x1d, 0xb8, 0xdb, 0xef, 0x8c, 0x29, 0x4a, 0x41, 0x22, 0x87, 0xe4, 0xd0, 0xb3, 0x16, 0x75, 0xfc, 0x9f, 0x3a, 0x59, 0x6d, 0xe, 0xab, 0xc8, 0xc3, 0xa0, 0x5, 0x66, 0x52, 0x31, 0x94, 0xf7, 0x82, 0xe1, 0x44, 0x27, 0x13, 0x70, 0xd5, 0xb6, 0xbd, 0xde, 0x7b, 0x18, 0x2c, 0x4f, 0xea, 0x89, 0xe5, 0x86, 0x23, 0x40, 0x74, 0x17, 0xb2, 0xd1, 0xda, 0xb9, 0x1c, 0x7f, 0x4b, 0x28, 0x8d, 0xee, 0x9b, 0xf8, 0x5d, 0x3e, 0xa, 0x69, 0xcc, 0xaf, 0xa4, 0xc7, 0x62, 0x1, 0x35, 0x56, 0xf3, 0x90, 0x19, 0x7a, 0xdf, 0xbc, 0x88, 0xeb, 0x4e, 0x2d, 0x26, 0x45, 0xe0, 0x83, 0xb7, 0xd4, 0x71, 0x12, 0x67, 0x4, 0xa1, 0xc2, 0xf6, 0x95, 0x30, 0x53, 0x58, 0x3b, 0x9e, 0xfd, 0xc9, 0xaa, 0xf, 0x6c, 0xd7, 0xb4, 0x11, 0x72, 0x46, 0x25, 0x80, 0xe3, 0xe8, 0x8b, 0x2e, 0x4d, 0x79, 0x1a, 0xbf, 0xdc, 0xa9, 0xca, 0x6f, 0xc, 0x38, 0x5b, 0xfe, 0x9d, 0x96, 0xf5, 0x50, 0x33, 0x7, 0x64, 0xc1, 0xa2, 0x2b, 0x48, 0xed, 0x8e, 0xba, 0xd9, 0x7c, 0x1f, 0x14, 0x77, 0xd2, 0xb1, 0x85, 0xe6, 0x43, 0x20, 0x55, 0x36, 0x93, 0xf0, 0xc4, 0xa7, 0x2, 0x61, 0x6a, 0x9, 0xac, 0xcf, 0xfb, 0x98, 0x3d, 0x5e, 0x32, 0x51, 0xf4, 0x97, 0xa3, 0xc0, 0x65, 0x6, 0xd, 0x6e, 0xcb, 0xa8, 0x9c, 0xff, 0x5a, 0x39, 0x4c, 0x2f, 0x8a, 0xe9, 0xdd, 0xbe, 0x1b, 0x78, 0x73, 0x10, 0xb5, 0xd6, 0xe2, 0x81, 0x24, 0x47, 0xce, 0xad, 0x8, 0x6b, 0x5f, 0x3c, 0x99, 0xfa, 0xf1, 0x92, 0x37, 0x54, 0x60, 0x3, 0xa6, 0xc5, 0xb0, 0xd3, 0x76, 0x15, 0x21, 0x42, 0xe7, 0x84, 0x8f, 0xec, 0x49, 0x2a, 0x1e, 0x7d, 0xd8, 0xbb}, + {0x0, 0x64, 0xc8, 0xac, 0x8d, 0xe9, 0x45, 0x21, 0x7, 0x63, 0xcf, 0xab, 0x8a, 0xee, 0x42, 0x26, 0xe, 0x6a, 0xc6, 0xa2, 0x83, 0xe7, 0x4b, 0x2f, 0x9, 0x6d, 0xc1, 0xa5, 0x84, 0xe0, 0x4c, 0x28, 0x1c, 0x78, 0xd4, 0xb0, 0x91, 0xf5, 0x59, 0x3d, 0x1b, 0x7f, 0xd3, 0xb7, 0x96, 0xf2, 0x5e, 0x3a, 0x12, 0x76, 0xda, 0xbe, 0x9f, 0xfb, 0x57, 0x33, 0x15, 0x71, 0xdd, 0xb9, 0x98, 0xfc, 0x50, 0x34, 0x38, 0x5c, 0xf0, 0x94, 0xb5, 0xd1, 0x7d, 0x19, 0x3f, 0x5b, 0xf7, 0x93, 0xb2, 0xd6, 0x7a, 0x1e, 0x36, 0x52, 0xfe, 0x9a, 0xbb, 0xdf, 0x73, 0x17, 0x31, 0x55, 0xf9, 0x9d, 0xbc, 0xd8, 0x74, 0x10, 0x24, 0x40, 0xec, 0x88, 0xa9, 0xcd, 0x61, 0x5, 0x23, 0x47, 0xeb, 0x8f, 0xae, 0xca, 0x66, 0x2, 0x2a, 0x4e, 0xe2, 0x86, 0xa7, 0xc3, 0x6f, 0xb, 0x2d, 0x49, 0xe5, 0x81, 0xa0, 0xc4, 0x68, 0xc, 0x70, 0x14, 0xb8, 0xdc, 0xfd, 0x99, 0x35, 0x51, 0x77, 0x13, 0xbf, 0xdb, 0xfa, 0x9e, 0x32, 0x56, 0x7e, 0x1a, 0xb6, 0xd2, 0xf3, 0x97, 0x3b, 0x5f, 0x79, 0x1d, 0xb1, 0xd5, 0xf4, 0x90, 0x3c, 0x58, 0x6c, 0x8, 0xa4, 0xc0, 0xe1, 0x85, 0x29, 0x4d, 0x6b, 0xf, 0xa3, 0xc7, 0xe6, 0x82, 0x2e, 0x4a, 0x62, 0x6, 0xaa, 0xce, 0xef, 0x8b, 0x27, 0x43, 0x65, 0x1, 0xad, 0xc9, 0xe8, 0x8c, 0x20, 0x44, 0x48, 0x2c, 0x80, 0xe4, 0xc5, 0xa1, 0xd, 0x69, 0x4f, 0x2b, 0x87, 0xe3, 0xc2, 0xa6, 0xa, 0x6e, 0x46, 0x22, 0x8e, 0xea, 0xcb, 0xaf, 0x3, 0x67, 0x41, 0x25, 0x89, 0xed, 0xcc, 0xa8, 0x4, 0x60, 0x54, 0x30, 0x9c, 0xf8, 0xd9, 0xbd, 0x11, 0x75, 0x53, 0x37, 0x9b, 0xff, 0xde, 0xba, 0x16, 0x72, 0x5a, 0x3e, 0x92, 0xf6, 0xd7, 0xb3, 0x1f, 0x7b, 0x5d, 0x39, 0x95, 0xf1, 0xd0, 0xb4, 0x18, 0x7c}, + {0x0, 0x65, 0xca, 0xaf, 0x89, 0xec, 0x43, 0x26, 0xf, 0x6a, 0xc5, 0xa0, 0x86, 0xe3, 0x4c, 0x29, 0x1e, 0x7b, 0xd4, 0xb1, 0x97, 0xf2, 0x5d, 0x38, 0x11, 0x74, 0xdb, 0xbe, 0x98, 0xfd, 0x52, 0x37, 0x3c, 0x59, 0xf6, 0x93, 0xb5, 0xd0, 0x7f, 0x1a, 0x33, 0x56, 0xf9, 0x9c, 0xba, 0xdf, 0x70, 0x15, 0x22, 0x47, 0xe8, 0x8d, 0xab, 0xce, 0x61, 0x4, 0x2d, 0x48, 0xe7, 0x82, 0xa4, 0xc1, 0x6e, 0xb, 0x78, 0x1d, 0xb2, 0xd7, 0xf1, 0x94, 0x3b, 0x5e, 0x77, 0x12, 0xbd, 0xd8, 0xfe, 0x9b, 0x34, 0x51, 0x66, 0x3, 0xac, 0xc9, 0xef, 0x8a, 0x25, 0x40, 0x69, 0xc, 0xa3, 0xc6, 0xe0, 0x85, 0x2a, 0x4f, 0x44, 0x21, 0x8e, 0xeb, 0xcd, 0xa8, 0x7, 0x62, 0x4b, 0x2e, 0x81, 0xe4, 0xc2, 0xa7, 0x8, 0x6d, 0x5a, 0x3f, 0x90, 0xf5, 0xd3, 0xb6, 0x19, 0x7c, 0x55, 0x30, 0x9f, 0xfa, 0xdc, 0xb9, 0x16, 0x73, 0xf0, 0x95, 0x3a, 0x5f, 0x79, 0x1c, 0xb3, 0xd6, 0xff, 0x9a, 0x35, 0x50, 0x76, 0x13, 0xbc, 0xd9, 0xee, 0x8b, 0x24, 0x41, 0x67, 0x2, 0xad, 0xc8, 0xe1, 0x84, 0x2b, 0x4e, 0x68, 0xd, 0xa2, 0xc7, 0xcc, 0xa9, 0x6, 0x63, 0x45, 0x20, 0x8f, 0xea, 0xc3, 0xa6, 0x9, 0x6c, 0x4a, 0x2f, 0x80, 0xe5, 0xd2, 0xb7, 0x18, 0x7d, 0x5b, 0x3e, 0x91, 0xf4, 0xdd, 0xb8, 0x17, 0x72, 0x54, 0x31, 0x9e, 0xfb, 0x88, 0xed, 0x42, 0x27, 0x1, 0x64, 0xcb, 0xae, 0x87, 0xe2, 0x4d, 0x28, 0xe, 0x6b, 0xc4, 0xa1, 0x96, 0xf3, 0x5c, 0x39, 0x1f, 0x7a, 0xd5, 0xb0, 0x99, 0xfc, 0x53, 0x36, 0x10, 0x75, 0xda, 0xbf, 0xb4, 0xd1, 0x7e, 0x1b, 0x3d, 0x58, 0xf7, 0x92, 0xbb, 0xde, 0x71, 0x14, 0x32, 0x57, 0xf8, 0x9d, 0xaa, 0xcf, 0x60, 0x5, 0x23, 0x46, 0xe9, 0x8c, 0xa5, 0xc0, 0x6f, 0xa, 0x2c, 0x49, 0xe6, 0x83}, + {0x0, 0x66, 0xcc, 0xaa, 0x85, 0xe3, 0x49, 0x2f, 0x17, 0x71, 0xdb, 0xbd, 0x92, 0xf4, 0x5e, 0x38, 0x2e, 0x48, 0xe2, 0x84, 0xab, 0xcd, 0x67, 0x1, 0x39, 0x5f, 0xf5, 0x93, 0xbc, 0xda, 0x70, 0x16, 0x5c, 0x3a, 0x90, 0xf6, 0xd9, 0xbf, 0x15, 0x73, 0x4b, 0x2d, 0x87, 0xe1, 0xce, 0xa8, 0x2, 0x64, 0x72, 0x14, 0xbe, 0xd8, 0xf7, 0x91, 0x3b, 0x5d, 0x65, 0x3, 0xa9, 0xcf, 0xe0, 0x86, 0x2c, 0x4a, 0xb8, 0xde, 0x74, 0x12, 0x3d, 0x5b, 0xf1, 0x97, 0xaf, 0xc9, 0x63, 0x5, 0x2a, 0x4c, 0xe6, 0x80, 0x96, 0xf0, 0x5a, 0x3c, 0x13, 0x75, 0xdf, 0xb9, 0x81, 0xe7, 0x4d, 0x2b, 0x4, 0x62, 0xc8, 0xae, 0xe4, 0x82, 0x28, 0x4e, 0x61, 0x7, 0xad, 0xcb, 0xf3, 0x95, 0x3f, 0x59, 0x76, 0x10, 0xba, 0xdc, 0xca, 0xac, 0x6, 0x60, 0x4f, 0x29, 0x83, 0xe5, 0xdd, 0xbb, 0x11, 0x77, 0x58, 0x3e, 0x94, 0xf2, 0x6d, 0xb, 0xa1, 0xc7, 0xe8, 0x8e, 0x24, 0x42, 0x7a, 0x1c, 0xb6, 0xd0, 0xff, 0x99, 0x33, 0x55, 0x43, 0x25, 0x8f, 0xe9, 0xc6, 0xa0, 0xa, 0x6c, 0x54, 0x32, 0x98, 0xfe, 0xd1, 0xb7, 0x1d, 0x7b, 0x31, 0x57, 0xfd, 0x9b, 0xb4, 0xd2, 0x78, 0x1e, 0x26, 0x40, 0xea, 0x8c, 0xa3, 0xc5, 0x6f, 0x9, 0x1f, 0x79, 0xd3, 0xb5, 0x9a, 0xfc, 0x56, 0x30, 0x8, 0x6e, 0xc4, 0xa2, 0x8d, 0xeb, 0x41, 0x27, 0xd5, 0xb3, 0x19, 0x7f, 0x50, 0x36, 0x9c, 0xfa, 0xc2, 0xa4, 0xe, 0x68, 0x47, 0x21, 0x8b, 0xed, 0xfb, 0x9d, 0x37, 0x51, 0x7e, 0x18, 0xb2, 0xd4, 0xec, 0x8a, 0x20, 0x46, 0x69, 0xf, 0xa5, 0xc3, 0x89, 0xef, 0x45, 0x23, 0xc, 0x6a, 0xc0, 0xa6, 0x9e, 0xf8, 0x52, 0x34, 0x1b, 0x7d, 0xd7, 0xb1, 0xa7, 0xc1, 0x6b, 0xd, 0x22, 0x44, 0xee, 0x88, 0xb0, 0xd6, 0x7c, 0x1a, 0x35, 0x53, 0xf9, 0x9f}, + {0x0, 0x67, 0xce, 0xa9, 0x81, 0xe6, 0x4f, 0x28, 0x1f, 0x78, 0xd1, 0xb6, 0x9e, 0xf9, 0x50, 0x37, 0x3e, 0x59, 0xf0, 0x97, 0xbf, 0xd8, 0x71, 0x16, 0x21, 0x46, 0xef, 0x88, 0xa0, 0xc7, 0x6e, 0x9, 0x7c, 0x1b, 0xb2, 0xd5, 0xfd, 0x9a, 0x33, 0x54, 0x63, 0x4, 0xad, 0xca, 0xe2, 0x85, 0x2c, 0x4b, 0x42, 0x25, 0x8c, 0xeb, 0xc3, 0xa4, 0xd, 0x6a, 0x5d, 0x3a, 0x93, 0xf4, 0xdc, 0xbb, 0x12, 0x75, 0xf8, 0x9f, 0x36, 0x51, 0x79, 0x1e, 0xb7, 0xd0, 0xe7, 0x80, 0x29, 0x4e, 0x66, 0x1, 0xa8, 0xcf, 0xc6, 0xa1, 0x8, 0x6f, 0x47, 0x20, 0x89, 0xee, 0xd9, 0xbe, 0x17, 0x70, 0x58, 0x3f, 0x96, 0xf1, 0x84, 0xe3, 0x4a, 0x2d, 0x5, 0x62, 0xcb, 0xac, 0x9b, 0xfc, 0x55, 0x32, 0x1a, 0x7d, 0xd4, 0xb3, 0xba, 0xdd, 0x74, 0x13, 0x3b, 0x5c, 0xf5, 0x92, 0xa5, 0xc2, 0x6b, 0xc, 0x24, 0x43, 0xea, 0x8d, 0xed, 0x8a, 0x23, 0x44, 0x6c, 0xb, 0xa2, 0xc5, 0xf2, 0x95, 0x3c, 0x5b, 0x73, 0x14, 0xbd, 0xda, 0xd3, 0xb4, 0x1d, 0x7a, 0x52, 0x35, 0x9c, 0xfb, 0xcc, 0xab, 0x2, 0x65, 0x4d, 0x2a, 0x83, 0xe4, 0x91, 0xf6, 0x5f, 0x38, 0x10, 0x77, 0xde, 0xb9, 0x8e, 0xe9, 0x40, 0x27, 0xf, 0x68, 0xc1, 0xa6, 0xaf, 0xc8, 0x61, 0x6, 0x2e, 0x49, 0xe0, 0x87, 0xb0, 0xd7, 0x7e, 0x19, 0x31, 0x56, 0xff, 0x98, 0x15, 0x72, 0xdb, 0xbc, 0x94, 0xf3, 0x5a, 0x3d, 0xa, 0x6d, 0xc4, 0xa3, 0x8b, 0xec, 0x45, 0x22, 0x2b, 0x4c, 0xe5, 0x82, 0xaa, 0xcd, 0x64, 0x3, 0x34, 0x53, 0xfa, 0x9d, 0xb5, 0xd2, 0x7b, 0x1c, 0x69, 0xe, 0xa7, 0xc0, 0xe8, 0x8f, 0x26, 0x41, 0x76, 0x11, 0xb8, 0xdf, 0xf7, 0x90, 0x39, 0x5e, 0x57, 0x30, 0x99, 0xfe, 0xd6, 0xb1, 0x18, 0x7f, 0x48, 0x2f, 0x86, 0xe1, 0xc9, 0xae, 0x7, 0x60}, + {0x0, 0x68, 0xd0, 0xb8, 0xbd, 0xd5, 0x6d, 0x5, 0x67, 0xf, 0xb7, 0xdf, 0xda, 0xb2, 0xa, 0x62, 0xce, 0xa6, 0x1e, 0x76, 0x73, 0x1b, 0xa3, 0xcb, 0xa9, 0xc1, 0x79, 0x11, 0x14, 0x7c, 0xc4, 0xac, 0x81, 0xe9, 0x51, 0x39, 0x3c, 0x54, 0xec, 0x84, 0xe6, 0x8e, 0x36, 0x5e, 0x5b, 0x33, 0x8b, 0xe3, 0x4f, 0x27, 0x9f, 0xf7, 0xf2, 0x9a, 0x22, 0x4a, 0x28, 0x40, 0xf8, 0x90, 0x95, 0xfd, 0x45, 0x2d, 0x1f, 0x77, 0xcf, 0xa7, 0xa2, 0xca, 0x72, 0x1a, 0x78, 0x10, 0xa8, 0xc0, 0xc5, 0xad, 0x15, 0x7d, 0xd1, 0xb9, 0x1, 0x69, 0x6c, 0x4, 0xbc, 0xd4, 0xb6, 0xde, 0x66, 0xe, 0xb, 0x63, 0xdb, 0xb3, 0x9e, 0xf6, 0x4e, 0x26, 0x23, 0x4b, 0xf3, 0x9b, 0xf9, 0x91, 0x29, 0x41, 0x44, 0x2c, 0x94, 0xfc, 0x50, 0x38, 0x80, 0xe8, 0xed, 0x85, 0x3d, 0x55, 0x37, 0x5f, 0xe7, 0x8f, 0x8a, 0xe2, 0x5a, 0x32, 0x3e, 0x56, 0xee, 0x86, 0x83, 0xeb, 0x53, 0x3b, 0x59, 0x31, 0x89, 0xe1, 0xe4, 0x8c, 0x34, 0x5c, 0xf0, 0x98, 0x20, 0x48, 0x4d, 0x25, 0x9d, 0xf5, 0x97, 0xff, 0x47, 0x2f, 0x2a, 0x42, 0xfa, 0x92, 0xbf, 0xd7, 0x6f, 0x7, 0x2, 0x6a, 0xd2, 0xba, 0xd8, 0xb0, 0x8, 0x60, 0x65, 0xd, 0xb5, 0xdd, 0x71, 0x19, 0xa1, 0xc9, 0xcc, 0xa4, 0x1c, 0x74, 0x16, 0x7e, 0xc6, 0xae, 0xab, 0xc3, 0x7b, 0x13, 0x21, 0x49, 0xf1, 0x99, 0x9c, 0xf4, 0x4c, 0x24, 0x46, 0x2e, 0x96, 0xfe, 0xfb, 0x93, 0x2b, 0x43, 0xef, 0x87, 0x3f, 0x57, 0x52, 0x3a, 0x82, 0xea, 0x88, 0xe0, 0x58, 0x30, 0x35, 0x5d, 0xe5, 0x8d, 0xa0, 0xc8, 0x70, 0x18, 0x1d, 0x75, 0xcd, 0xa5, 0xc7, 0xaf, 0x17, 0x7f, 0x7a, 0x12, 0xaa, 0xc2, 0x6e, 0x6, 0xbe, 0xd6, 0xd3, 0xbb, 0x3, 0x6b, 0x9, 0x61, 0xd9, 0xb1, 0xb4, 0xdc, 0x64, 0xc}, + {0x0, 0x69, 0xd2, 0xbb, 0xb9, 0xd0, 0x6b, 0x2, 0x6f, 0x6, 0xbd, 0xd4, 0xd6, 0xbf, 0x4, 0x6d, 0xde, 0xb7, 0xc, 0x65, 0x67, 0xe, 0xb5, 0xdc, 0xb1, 0xd8, 0x63, 0xa, 0x8, 0x61, 0xda, 0xb3, 0xa1, 0xc8, 0x73, 0x1a, 0x18, 0x71, 0xca, 0xa3, 0xce, 0xa7, 0x1c, 0x75, 0x77, 0x1e, 0xa5, 0xcc, 0x7f, 0x16, 0xad, 0xc4, 0xc6, 0xaf, 0x14, 0x7d, 0x10, 0x79, 0xc2, 0xab, 0xa9, 0xc0, 0x7b, 0x12, 0x5f, 0x36, 0x8d, 0xe4, 0xe6, 0x8f, 0x34, 0x5d, 0x30, 0x59, 0xe2, 0x8b, 0x89, 0xe0, 0x5b, 0x32, 0x81, 0xe8, 0x53, 0x3a, 0x38, 0x51, 0xea, 0x83, 0xee, 0x87, 0x3c, 0x55, 0x57, 0x3e, 0x85, 0xec, 0xfe, 0x97, 0x2c, 0x45, 0x47, 0x2e, 0x95, 0xfc, 0x91, 0xf8, 0x43, 0x2a, 0x28, 0x41, 0xfa, 0x93, 0x20, 0x49, 0xf2, 0x9b, 0x99, 0xf0, 0x4b, 0x22, 0x4f, 0x26, 0x9d, 0xf4, 0xf6, 0x9f, 0x24, 0x4d, 0xbe, 0xd7, 0x6c, 0x5, 0x7, 0x6e, 0xd5, 0xbc, 0xd1, 0xb8, 0x3, 0x6a, 0x68, 0x1, 0xba, 0xd3, 0x60, 0x9, 0xb2, 0xdb, 0xd9, 0xb0, 0xb, 0x62, 0xf, 0x66, 0xdd, 0xb4, 0xb6, 0xdf, 0x64, 0xd, 0x1f, 0x76, 0xcd, 0xa4, 0xa6, 0xcf, 0x74, 0x1d, 0x70, 0x19, 0xa2, 0xcb, 0xc9, 0xa0, 0x1b, 0x72, 0xc1, 0xa8, 0x13, 0x7a, 0x78, 0x11, 0xaa, 0xc3, 0xae, 0xc7, 0x7c, 0x15, 0x17, 0x7e, 0xc5, 0xac, 0xe1, 0x88, 0x33, 0x5a, 0x58, 0x31, 0x8a, 0xe3, 0x8e, 0xe7, 0x5c, 0x35, 0x37, 0x5e, 0xe5, 0x8c, 0x3f, 0x56, 0xed, 0x84, 0x86, 0xef, 0x54, 0x3d, 0x50, 0x39, 0x82, 0xeb, 0xe9, 0x80, 0x3b, 0x52, 0x40, 0x29, 0x92, 0xfb, 0xf9, 0x90, 0x2b, 0x42, 0x2f, 0x46, 0xfd, 0x94, 0x96, 0xff, 0x44, 0x2d, 0x9e, 0xf7, 0x4c, 0x25, 0x27, 0x4e, 0xf5, 0x9c, 0xf1, 0x98, 0x23, 0x4a, 0x48, 0x21, 0x9a, 0xf3}, + {0x0, 0x6a, 0xd4, 0xbe, 0xb5, 0xdf, 0x61, 0xb, 0x77, 0x1d, 0xa3, 0xc9, 0xc2, 0xa8, 0x16, 0x7c, 0xee, 0x84, 0x3a, 0x50, 0x5b, 0x31, 0x8f, 0xe5, 0x99, 0xf3, 0x4d, 0x27, 0x2c, 0x46, 0xf8, 0x92, 0xc1, 0xab, 0x15, 0x7f, 0x74, 0x1e, 0xa0, 0xca, 0xb6, 0xdc, 0x62, 0x8, 0x3, 0x69, 0xd7, 0xbd, 0x2f, 0x45, 0xfb, 0x91, 0x9a, 0xf0, 0x4e, 0x24, 0x58, 0x32, 0x8c, 0xe6, 0xed, 0x87, 0x39, 0x53, 0x9f, 0xf5, 0x4b, 0x21, 0x2a, 0x40, 0xfe, 0x94, 0xe8, 0x82, 0x3c, 0x56, 0x5d, 0x37, 0x89, 0xe3, 0x71, 0x1b, 0xa5, 0xcf, 0xc4, 0xae, 0x10, 0x7a, 0x6, 0x6c, 0xd2, 0xb8, 0xb3, 0xd9, 0x67, 0xd, 0x5e, 0x34, 0x8a, 0xe0, 0xeb, 0x81, 0x3f, 0x55, 0x29, 0x43, 0xfd, 0x97, 0x9c, 0xf6, 0x48, 0x22, 0xb0, 0xda, 0x64, 0xe, 0x5, 0x6f, 0xd1, 0xbb, 0xc7, 0xad, 0x13, 0x79, 0x72, 0x18, 0xa6, 0xcc, 0x23, 0x49, 0xf7, 0x9d, 0x96, 0xfc, 0x42, 0x28, 0x54, 0x3e, 0x80, 0xea, 0xe1, 0x8b, 0x35, 0x5f, 0xcd, 0xa7, 0x19, 0x73, 0x78, 0x12, 0xac, 0xc6, 0xba, 0xd0, 0x6e, 0x4, 0xf, 0x65, 0xdb, 0xb1, 0xe2, 0x88, 0x36, 0x5c, 0x57, 0x3d, 0x83, 0xe9, 0x95, 0xff, 0x41, 0x2b, 0x20, 0x4a, 0xf4, 0x9e, 0xc, 0x66, 0xd8, 0xb2, 0xb9, 0xd3, 0x6d, 0x7, 0x7b, 0x11, 0xaf, 0xc5, 0xce, 0xa4, 0x1a, 0x70, 0xbc, 0xd6, 0x68, 0x2, 0x9, 0x63, 0xdd, 0xb7, 0xcb, 0xa1, 0x1f, 0x75, 0x7e, 0x14, 0xaa, 0xc0, 0x52, 0x38, 0x86, 0xec, 0xe7, 0x8d, 0x33, 0x59, 0x25, 0x4f, 0xf1, 0x9b, 0x90, 0xfa, 0x44, 0x2e, 0x7d, 0x17, 0xa9, 0xc3, 0xc8, 0xa2, 0x1c, 0x76, 0xa, 0x60, 0xde, 0xb4, 0xbf, 0xd5, 0x6b, 0x1, 0x93, 0xf9, 0x47, 0x2d, 0x26, 0x4c, 0xf2, 0x98, 0xe4, 0x8e, 0x30, 0x5a, 0x51, 0x3b, 0x85, 0xef}, + {0x0, 0x6b, 0xd6, 0xbd, 0xb1, 0xda, 0x67, 0xc, 0x7f, 0x14, 0xa9, 0xc2, 0xce, 0xa5, 0x18, 0x73, 0xfe, 0x95, 0x28, 0x43, 0x4f, 0x24, 0x99, 0xf2, 0x81, 0xea, 0x57, 0x3c, 0x30, 0x5b, 0xe6, 0x8d, 0xe1, 0x8a, 0x37, 0x5c, 0x50, 0x3b, 0x86, 0xed, 0x9e, 0xf5, 0x48, 0x23, 0x2f, 0x44, 0xf9, 0x92, 0x1f, 0x74, 0xc9, 0xa2, 0xae, 0xc5, 0x78, 0x13, 0x60, 0xb, 0xb6, 0xdd, 0xd1, 0xba, 0x7, 0x6c, 0xdf, 0xb4, 0x9, 0x62, 0x6e, 0x5, 0xb8, 0xd3, 0xa0, 0xcb, 0x76, 0x1d, 0x11, 0x7a, 0xc7, 0xac, 0x21, 0x4a, 0xf7, 0x9c, 0x90, 0xfb, 0x46, 0x2d, 0x5e, 0x35, 0x88, 0xe3, 0xef, 0x84, 0x39, 0x52, 0x3e, 0x55, 0xe8, 0x83, 0x8f, 0xe4, 0x59, 0x32, 0x41, 0x2a, 0x97, 0xfc, 0xf0, 0x9b, 0x26, 0x4d, 0xc0, 0xab, 0x16, 0x7d, 0x71, 0x1a, 0xa7, 0xcc, 0xbf, 0xd4, 0x69, 0x2, 0xe, 0x65, 0xd8, 0xb3, 0xa3, 0xc8, 0x75, 0x1e, 0x12, 0x79, 0xc4, 0xaf, 0xdc, 0xb7, 0xa, 0x61, 0x6d, 0x6, 0xbb, 0xd0, 0x5d, 0x36, 0x8b, 0xe0, 0xec, 0x87, 0x3a, 0x51, 0x22, 0x49, 0xf4, 0x9f, 0x93, 0xf8, 0x45, 0x2e, 0x42, 0x29, 0x94, 0xff, 0xf3, 0x98, 0x25, 0x4e, 0x3d, 0x56, 0xeb, 0x80, 0x8c, 0xe7, 0x5a, 0x31, 0xbc, 0xd7, 0x6a, 0x1, 0xd, 0x66, 0xdb, 0xb0, 0xc3, 0xa8, 0x15, 0x7e, 0x72, 0x19, 0xa4, 0xcf, 0x7c, 0x17, 0xaa, 0xc1, 0xcd, 0xa6, 0x1b, 0x70, 0x3, 0x68, 0xd5, 0xbe, 0xb2, 0xd9, 0x64, 0xf, 0x82, 0xe9, 0x54, 0x3f, 0x33, 0x58, 0xe5, 0x8e, 0xfd, 0x96, 0x2b, 0x40, 0x4c, 0x27, 0x9a, 0xf1, 0x9d, 0xf6, 0x4b, 0x20, 0x2c, 0x47, 0xfa, 0x91, 0xe2, 0x89, 0x34, 0x5f, 0x53, 0x38, 0x85, 0xee, 0x63, 0x8, 0xb5, 0xde, 0xd2, 0xb9, 0x4, 0x6f, 0x1c, 0x77, 0xca, 0xa1, 0xad, 0xc6, 0x7b, 0x10}, + {0x0, 0x6c, 0xd8, 0xb4, 0xad, 0xc1, 0x75, 0x19, 0x47, 0x2b, 0x9f, 0xf3, 0xea, 0x86, 0x32, 0x5e, 0x8e, 0xe2, 0x56, 0x3a, 0x23, 0x4f, 0xfb, 0x97, 0xc9, 0xa5, 0x11, 0x7d, 0x64, 0x8, 0xbc, 0xd0, 0x1, 0x6d, 0xd9, 0xb5, 0xac, 0xc0, 0x74, 0x18, 0x46, 0x2a, 0x9e, 0xf2, 0xeb, 0x87, 0x33, 0x5f, 0x8f, 0xe3, 0x57, 0x3b, 0x22, 0x4e, 0xfa, 0x96, 0xc8, 0xa4, 0x10, 0x7c, 0x65, 0x9, 0xbd, 0xd1, 0x2, 0x6e, 0xda, 0xb6, 0xaf, 0xc3, 0x77, 0x1b, 0x45, 0x29, 0x9d, 0xf1, 0xe8, 0x84, 0x30, 0x5c, 0x8c, 0xe0, 0x54, 0x38, 0x21, 0x4d, 0xf9, 0x95, 0xcb, 0xa7, 0x13, 0x7f, 0x66, 0xa, 0xbe, 0xd2, 0x3, 0x6f, 0xdb, 0xb7, 0xae, 0xc2, 0x76, 0x1a, 0x44, 0x28, 0x9c, 0xf0, 0xe9, 0x85, 0x31, 0x5d, 0x8d, 0xe1, 0x55, 0x39, 0x20, 0x4c, 0xf8, 0x94, 0xca, 0xa6, 0x12, 0x7e, 0x67, 0xb, 0xbf, 0xd3, 0x4, 0x68, 0xdc, 0xb0, 0xa9, 0xc5, 0x71, 0x1d, 0x43, 0x2f, 0x9b, 0xf7, 0xee, 0x82, 0x36, 0x5a, 0x8a, 0xe6, 0x52, 0x3e, 0x27, 0x4b, 0xff, 0x93, 0xcd, 0xa1, 0x15, 0x79, 0x60, 0xc, 0xb8, 0xd4, 0x5, 0x69, 0xdd, 0xb1, 0xa8, 0xc4, 0x70, 0x1c, 0x42, 0x2e, 0x9a, 0xf6, 0xef, 0x83, 0x37, 0x5b, 0x8b, 0xe7, 0x53, 0x3f, 0x26, 0x4a, 0xfe, 0x92, 0xcc, 0xa0, 0x14, 0x78, 0x61, 0xd, 0xb9, 0xd5, 0x6, 0x6a, 0xde, 0xb2, 0xab, 0xc7, 0x73, 0x1f, 0x41, 0x2d, 0x99, 0xf5, 0xec, 0x80, 0x34, 0x58, 0x88, 0xe4, 0x50, 0x3c, 0x25, 0x49, 0xfd, 0x91, 0xcf, 0xa3, 0x17, 0x7b, 0x62, 0xe, 0xba, 0xd6, 0x7, 0x6b, 0xdf, 0xb3, 0xaa, 0xc6, 0x72, 0x1e, 0x40, 0x2c, 0x98, 0xf4, 0xed, 0x81, 0x35, 0x59, 0x89, 0xe5, 0x51, 0x3d, 0x24, 0x48, 0xfc, 0x90, 0xce, 0xa2, 0x16, 0x7a, 0x63, 0xf, 0xbb, 0xd7}, + {0x0, 0x6d, 0xda, 0xb7, 0xa9, 0xc4, 0x73, 0x1e, 0x4f, 0x22, 0x95, 0xf8, 0xe6, 0x8b, 0x3c, 0x51, 0x9e, 0xf3, 0x44, 0x29, 0x37, 0x5a, 0xed, 0x80, 0xd1, 0xbc, 0xb, 0x66, 0x78, 0x15, 0xa2, 0xcf, 0x21, 0x4c, 0xfb, 0x96, 0x88, 0xe5, 0x52, 0x3f, 0x6e, 0x3, 0xb4, 0xd9, 0xc7, 0xaa, 0x1d, 0x70, 0xbf, 0xd2, 0x65, 0x8, 0x16, 0x7b, 0xcc, 0xa1, 0xf0, 0x9d, 0x2a, 0x47, 0x59, 0x34, 0x83, 0xee, 0x42, 0x2f, 0x98, 0xf5, 0xeb, 0x86, 0x31, 0x5c, 0xd, 0x60, 0xd7, 0xba, 0xa4, 0xc9, 0x7e, 0x13, 0xdc, 0xb1, 0x6, 0x6b, 0x75, 0x18, 0xaf, 0xc2, 0x93, 0xfe, 0x49, 0x24, 0x3a, 0x57, 0xe0, 0x8d, 0x63, 0xe, 0xb9, 0xd4, 0xca, 0xa7, 0x10, 0x7d, 0x2c, 0x41, 0xf6, 0x9b, 0x85, 0xe8, 0x5f, 0x32, 0xfd, 0x90, 0x27, 0x4a, 0x54, 0x39, 0x8e, 0xe3, 0xb2, 0xdf, 0x68, 0x5, 0x1b, 0x76, 0xc1, 0xac, 0x84, 0xe9, 0x5e, 0x33, 0x2d, 0x40, 0xf7, 0x9a, 0xcb, 0xa6, 0x11, 0x7c, 0x62, 0xf, 0xb8, 0xd5, 0x1a, 0x77, 0xc0, 0xad, 0xb3, 0xde, 0x69, 0x4, 0x55, 0x38, 0x8f, 0xe2, 0xfc, 0x91, 0x26, 0x4b, 0xa5, 0xc8, 0x7f, 0x12, 0xc, 0x61, 0xd6, 0xbb, 0xea, 0x87, 0x30, 0x5d, 0x43, 0x2e, 0x99, 0xf4, 0x3b, 0x56, 0xe1, 0x8c, 0x92, 0xff, 0x48, 0x25, 0x74, 0x19, 0xae, 0xc3, 0xdd, 0xb0, 0x7, 0x6a, 0xc6, 0xab, 0x1c, 0x71, 0x6f, 0x2, 0xb5, 0xd8, 0x89, 0xe4, 0x53, 0x3e, 0x20, 0x4d, 0xfa, 0x97, 0x58, 0x35, 0x82, 0xef, 0xf1, 0x9c, 0x2b, 0x46, 0x17, 0x7a, 0xcd, 0xa0, 0xbe, 0xd3, 0x64, 0x9, 0xe7, 0x8a, 0x3d, 0x50, 0x4e, 0x23, 0x94, 0xf9, 0xa8, 0xc5, 0x72, 0x1f, 0x1, 0x6c, 0xdb, 0xb6, 0x79, 0x14, 0xa3, 0xce, 0xd0, 0xbd, 0xa, 0x67, 0x36, 0x5b, 0xec, 0x81, 0x9f, 0xf2, 0x45, 0x28}, + {0x0, 0x6e, 0xdc, 0xb2, 0xa5, 0xcb, 0x79, 0x17, 0x57, 0x39, 0x8b, 0xe5, 0xf2, 0x9c, 0x2e, 0x40, 0xae, 0xc0, 0x72, 0x1c, 0xb, 0x65, 0xd7, 0xb9, 0xf9, 0x97, 0x25, 0x4b, 0x5c, 0x32, 0x80, 0xee, 0x41, 0x2f, 0x9d, 0xf3, 0xe4, 0x8a, 0x38, 0x56, 0x16, 0x78, 0xca, 0xa4, 0xb3, 0xdd, 0x6f, 0x1, 0xef, 0x81, 0x33, 0x5d, 0x4a, 0x24, 0x96, 0xf8, 0xb8, 0xd6, 0x64, 0xa, 0x1d, 0x73, 0xc1, 0xaf, 0x82, 0xec, 0x5e, 0x30, 0x27, 0x49, 0xfb, 0x95, 0xd5, 0xbb, 0x9, 0x67, 0x70, 0x1e, 0xac, 0xc2, 0x2c, 0x42, 0xf0, 0x9e, 0x89, 0xe7, 0x55, 0x3b, 0x7b, 0x15, 0xa7, 0xc9, 0xde, 0xb0, 0x2, 0x6c, 0xc3, 0xad, 0x1f, 0x71, 0x66, 0x8, 0xba, 0xd4, 0x94, 0xfa, 0x48, 0x26, 0x31, 0x5f, 0xed, 0x83, 0x6d, 0x3, 0xb1, 0xdf, 0xc8, 0xa6, 0x14, 0x7a, 0x3a, 0x54, 0xe6, 0x88, 0x9f, 0xf1, 0x43, 0x2d, 0x19, 0x77, 0xc5, 0xab, 0xbc, 0xd2, 0x60, 0xe, 0x4e, 0x20, 0x92, 0xfc, 0xeb, 0x85, 0x37, 0x59, 0xb7, 0xd9, 0x6b, 0x5, 0x12, 0x7c, 0xce, 0xa0, 0xe0, 0x8e, 0x3c, 0x52, 0x45, 0x2b, 0x99, 0xf7, 0x58, 0x36, 0x84, 0xea, 0xfd, 0x93, 0x21, 0x4f, 0xf, 0x61, 0xd3, 0xbd, 0xaa, 0xc4, 0x76, 0x18, 0xf6, 0x98, 0x2a, 0x44, 0x53, 0x3d, 0x8f, 0xe1, 0xa1, 0xcf, 0x7d, 0x13, 0x4, 0x6a, 0xd8, 0xb6, 0x9b, 0xf5, 0x47, 0x29, 0x3e, 0x50, 0xe2, 0x8c, 0xcc, 0xa2, 0x10, 0x7e, 0x69, 0x7, 0xb5, 0xdb, 0x35, 0x5b, 0xe9, 0x87, 0x90, 0xfe, 0x4c, 0x22, 0x62, 0xc, 0xbe, 0xd0, 0xc7, 0xa9, 0x1b, 0x75, 0xda, 0xb4, 0x6, 0x68, 0x7f, 0x11, 0xa3, 0xcd, 0x8d, 0xe3, 0x51, 0x3f, 0x28, 0x46, 0xf4, 0x9a, 0x74, 0x1a, 0xa8, 0xc6, 0xd1, 0xbf, 0xd, 0x63, 0x23, 0x4d, 0xff, 0x91, 0x86, 0xe8, 0x5a, 0x34}, + {0x0, 0x6f, 0xde, 0xb1, 0xa1, 0xce, 0x7f, 0x10, 0x5f, 0x30, 0x81, 0xee, 0xfe, 0x91, 0x20, 0x4f, 0xbe, 0xd1, 0x60, 0xf, 0x1f, 0x70, 0xc1, 0xae, 0xe1, 0x8e, 0x3f, 0x50, 0x40, 0x2f, 0x9e, 0xf1, 0x61, 0xe, 0xbf, 0xd0, 0xc0, 0xaf, 0x1e, 0x71, 0x3e, 0x51, 0xe0, 0x8f, 0x9f, 0xf0, 0x41, 0x2e, 0xdf, 0xb0, 0x1, 0x6e, 0x7e, 0x11, 0xa0, 0xcf, 0x80, 0xef, 0x5e, 0x31, 0x21, 0x4e, 0xff, 0x90, 0xc2, 0xad, 0x1c, 0x73, 0x63, 0xc, 0xbd, 0xd2, 0x9d, 0xf2, 0x43, 0x2c, 0x3c, 0x53, 0xe2, 0x8d, 0x7c, 0x13, 0xa2, 0xcd, 0xdd, 0xb2, 0x3, 0x6c, 0x23, 0x4c, 0xfd, 0x92, 0x82, 0xed, 0x5c, 0x33, 0xa3, 0xcc, 0x7d, 0x12, 0x2, 0x6d, 0xdc, 0xb3, 0xfc, 0x93, 0x22, 0x4d, 0x5d, 0x32, 0x83, 0xec, 0x1d, 0x72, 0xc3, 0xac, 0xbc, 0xd3, 0x62, 0xd, 0x42, 0x2d, 0x9c, 0xf3, 0xe3, 0x8c, 0x3d, 0x52, 0x99, 0xf6, 0x47, 0x28, 0x38, 0x57, 0xe6, 0x89, 0xc6, 0xa9, 0x18, 0x77, 0x67, 0x8, 0xb9, 0xd6, 0x27, 0x48, 0xf9, 0x96, 0x86, 0xe9, 0x58, 0x37, 0x78, 0x17, 0xa6, 0xc9, 0xd9, 0xb6, 0x7, 0x68, 0xf8, 0x97, 0x26, 0x49, 0x59, 0x36, 0x87, 0xe8, 0xa7, 0xc8, 0x79, 0x16, 0x6, 0x69, 0xd8, 0xb7, 0x46, 0x29, 0x98, 0xf7, 0xe7, 0x88, 0x39, 0x56, 0x19, 0x76, 0xc7, 0xa8, 0xb8, 0xd7, 0x66, 0x9, 0x5b, 0x34, 0x85, 0xea, 0xfa, 0x95, 0x24, 0x4b, 0x4, 0x6b, 0xda, 0xb5, 0xa5, 0xca, 0x7b, 0x14, 0xe5, 0x8a, 0x3b, 0x54, 0x44, 0x2b, 0x9a, 0xf5, 0xba, 0xd5, 0x64, 0xb, 0x1b, 0x74, 0xc5, 0xaa, 0x3a, 0x55, 0xe4, 0x8b, 0x9b, 0xf4, 0x45, 0x2a, 0x65, 0xa, 0xbb, 0xd4, 0xc4, 0xab, 0x1a, 0x75, 0x84, 0xeb, 0x5a, 0x35, 0x25, 0x4a, 0xfb, 0x94, 0xdb, 0xb4, 0x5, 0x6a, 0x7a, 0x15, 0xa4, 0xcb}, + {0x0, 0x70, 0xe0, 0x90, 0xdd, 0xad, 0x3d, 0x4d, 0xa7, 0xd7, 0x47, 0x37, 0x7a, 0xa, 0x9a, 0xea, 0x53, 0x23, 0xb3, 0xc3, 0x8e, 0xfe, 0x6e, 0x1e, 0xf4, 0x84, 0x14, 0x64, 0x29, 0x59, 0xc9, 0xb9, 0xa6, 0xd6, 0x46, 0x36, 0x7b, 0xb, 0x9b, 0xeb, 0x1, 0x71, 0xe1, 0x91, 0xdc, 0xac, 0x3c, 0x4c, 0xf5, 0x85, 0x15, 0x65, 0x28, 0x58, 0xc8, 0xb8, 0x52, 0x22, 0xb2, 0xc2, 0x8f, 0xff, 0x6f, 0x1f, 0x51, 0x21, 0xb1, 0xc1, 0x8c, 0xfc, 0x6c, 0x1c, 0xf6, 0x86, 0x16, 0x66, 0x2b, 0x5b, 0xcb, 0xbb, 0x2, 0x72, 0xe2, 0x92, 0xdf, 0xaf, 0x3f, 0x4f, 0xa5, 0xd5, 0x45, 0x35, 0x78, 0x8, 0x98, 0xe8, 0xf7, 0x87, 0x17, 0x67, 0x2a, 0x5a, 0xca, 0xba, 0x50, 0x20, 0xb0, 0xc0, 0x8d, 0xfd, 0x6d, 0x1d, 0xa4, 0xd4, 0x44, 0x34, 0x79, 0x9, 0x99, 0xe9, 0x3, 0x73, 0xe3, 0x93, 0xde, 0xae, 0x3e, 0x4e, 0xa2, 0xd2, 0x42, 0x32, 0x7f, 0xf, 0x9f, 0xef, 0x5, 0x75, 0xe5, 0x95, 0xd8, 0xa8, 0x38, 0x48, 0xf1, 0x81, 0x11, 0x61, 0x2c, 0x5c, 0xcc, 0xbc, 0x56, 0x26, 0xb6, 0xc6, 0x8b, 0xfb, 0x6b, 0x1b, 0x4, 0x74, 0xe4, 0x94, 0xd9, 0xa9, 0x39, 0x49, 0xa3, 0xd3, 0x43, 0x33, 0x7e, 0xe, 0x9e, 0xee, 0x57, 0x27, 0xb7, 0xc7, 0x8a, 0xfa, 0x6a, 0x1a, 0xf0, 0x80, 0x10, 0x60, 0x2d, 0x5d, 0xcd, 0xbd, 0xf3, 0x83, 0x13, 0x63, 0x2e, 0x5e, 0xce, 0xbe, 0x54, 0x24, 0xb4, 0xc4, 0x89, 0xf9, 0x69, 0x19, 0xa0, 0xd0, 0x40, 0x30, 0x7d, 0xd, 0x9d, 0xed, 0x7, 0x77, 0xe7, 0x97, 0xda, 0xaa, 0x3a, 0x4a, 0x55, 0x25, 0xb5, 0xc5, 0x88, 0xf8, 0x68, 0x18, 0xf2, 0x82, 0x12, 0x62, 0x2f, 0x5f, 0xcf, 0xbf, 0x6, 0x76, 0xe6, 0x96, 0xdb, 0xab, 0x3b, 0x4b, 0xa1, 0xd1, 0x41, 0x31, 0x7c, 0xc, 0x9c, 0xec}, + {0x0, 0x71, 0xe2, 0x93, 0xd9, 0xa8, 0x3b, 0x4a, 0xaf, 0xde, 0x4d, 0x3c, 0x76, 0x7, 0x94, 0xe5, 0x43, 0x32, 0xa1, 0xd0, 0x9a, 0xeb, 0x78, 0x9, 0xec, 0x9d, 0xe, 0x7f, 0x35, 0x44, 0xd7, 0xa6, 0x86, 0xf7, 0x64, 0x15, 0x5f, 0x2e, 0xbd, 0xcc, 0x29, 0x58, 0xcb, 0xba, 0xf0, 0x81, 0x12, 0x63, 0xc5, 0xb4, 0x27, 0x56, 0x1c, 0x6d, 0xfe, 0x8f, 0x6a, 0x1b, 0x88, 0xf9, 0xb3, 0xc2, 0x51, 0x20, 0x11, 0x60, 0xf3, 0x82, 0xc8, 0xb9, 0x2a, 0x5b, 0xbe, 0xcf, 0x5c, 0x2d, 0x67, 0x16, 0x85, 0xf4, 0x52, 0x23, 0xb0, 0xc1, 0x8b, 0xfa, 0x69, 0x18, 0xfd, 0x8c, 0x1f, 0x6e, 0x24, 0x55, 0xc6, 0xb7, 0x97, 0xe6, 0x75, 0x4, 0x4e, 0x3f, 0xac, 0xdd, 0x38, 0x49, 0xda, 0xab, 0xe1, 0x90, 0x3, 0x72, 0xd4, 0xa5, 0x36, 0x47, 0xd, 0x7c, 0xef, 0x9e, 0x7b, 0xa, 0x99, 0xe8, 0xa2, 0xd3, 0x40, 0x31, 0x22, 0x53, 0xc0, 0xb1, 0xfb, 0x8a, 0x19, 0x68, 0x8d, 0xfc, 0x6f, 0x1e, 0x54, 0x25, 0xb6, 0xc7, 0x61, 0x10, 0x83, 0xf2, 0xb8, 0xc9, 0x5a, 0x2b, 0xce, 0xbf, 0x2c, 0x5d, 0x17, 0x66, 0xf5, 0x84, 0xa4, 0xd5, 0x46, 0x37, 0x7d, 0xc, 0x9f, 0xee, 0xb, 0x7a, 0xe9, 0x98, 0xd2, 0xa3, 0x30, 0x41, 0xe7, 0x96, 0x5, 0x74, 0x3e, 0x4f, 0xdc, 0xad, 0x48, 0x39, 0xaa, 0xdb, 0x91, 0xe0, 0x73, 0x2, 0x33, 0x42, 0xd1, 0xa0, 0xea, 0x9b, 0x8, 0x79, 0x9c, 0xed, 0x7e, 0xf, 0x45, 0x34, 0xa7, 0xd6, 0x70, 0x1, 0x92, 0xe3, 0xa9, 0xd8, 0x4b, 0x3a, 0xdf, 0xae, 0x3d, 0x4c, 0x6, 0x77, 0xe4, 0x95, 0xb5, 0xc4, 0x57, 0x26, 0x6c, 0x1d, 0x8e, 0xff, 0x1a, 0x6b, 0xf8, 0x89, 0xc3, 0xb2, 0x21, 0x50, 0xf6, 0x87, 0x14, 0x65, 0x2f, 0x5e, 0xcd, 0xbc, 0x59, 0x28, 0xbb, 0xca, 0x80, 0xf1, 0x62, 0x13}, + {0x0, 0x72, 0xe4, 0x96, 0xd5, 0xa7, 0x31, 0x43, 0xb7, 0xc5, 0x53, 0x21, 0x62, 0x10, 0x86, 0xf4, 0x73, 0x1, 0x97, 0xe5, 0xa6, 0xd4, 0x42, 0x30, 0xc4, 0xb6, 0x20, 0x52, 0x11, 0x63, 0xf5, 0x87, 0xe6, 0x94, 0x2, 0x70, 0x33, 0x41, 0xd7, 0xa5, 0x51, 0x23, 0xb5, 0xc7, 0x84, 0xf6, 0x60, 0x12, 0x95, 0xe7, 0x71, 0x3, 0x40, 0x32, 0xa4, 0xd6, 0x22, 0x50, 0xc6, 0xb4, 0xf7, 0x85, 0x13, 0x61, 0xd1, 0xa3, 0x35, 0x47, 0x4, 0x76, 0xe0, 0x92, 0x66, 0x14, 0x82, 0xf0, 0xb3, 0xc1, 0x57, 0x25, 0xa2, 0xd0, 0x46, 0x34, 0x77, 0x5, 0x93, 0xe1, 0x15, 0x67, 0xf1, 0x83, 0xc0, 0xb2, 0x24, 0x56, 0x37, 0x45, 0xd3, 0xa1, 0xe2, 0x90, 0x6, 0x74, 0x80, 0xf2, 0x64, 0x16, 0x55, 0x27, 0xb1, 0xc3, 0x44, 0x36, 0xa0, 0xd2, 0x91, 0xe3, 0x75, 0x7, 0xf3, 0x81, 0x17, 0x65, 0x26, 0x54, 0xc2, 0xb0, 0xbf, 0xcd, 0x5b, 0x29, 0x6a, 0x18, 0x8e, 0xfc, 0x8, 0x7a, 0xec, 0x9e, 0xdd, 0xaf, 0x39, 0x4b, 0xcc, 0xbe, 0x28, 0x5a, 0x19, 0x6b, 0xfd, 0x8f, 0x7b, 0x9, 0x9f, 0xed, 0xae, 0xdc, 0x4a, 0x38, 0x59, 0x2b, 0xbd, 0xcf, 0x8c, 0xfe, 0x68, 0x1a, 0xee, 0x9c, 0xa, 0x78, 0x3b, 0x49, 0xdf, 0xad, 0x2a, 0x58, 0xce, 0xbc, 0xff, 0x8d, 0x1b, 0x69, 0x9d, 0xef, 0x79, 0xb, 0x48, 0x3a, 0xac, 0xde, 0x6e, 0x1c, 0x8a, 0xf8, 0xbb, 0xc9, 0x5f, 0x2d, 0xd9, 0xab, 0x3d, 0x4f, 0xc, 0x7e, 0xe8, 0x9a, 0x1d, 0x6f, 0xf9, 0x8b, 0xc8, 0xba, 0x2c, 0x5e, 0xaa, 0xd8, 0x4e, 0x3c, 0x7f, 0xd, 0x9b, 0xe9, 0x88, 0xfa, 0x6c, 0x1e, 0x5d, 0x2f, 0xb9, 0xcb, 0x3f, 0x4d, 0xdb, 0xa9, 0xea, 0x98, 0xe, 0x7c, 0xfb, 0x89, 0x1f, 0x6d, 0x2e, 0x5c, 0xca, 0xb8, 0x4c, 0x3e, 0xa8, 0xda, 0x99, 0xeb, 0x7d, 0xf}, + {0x0, 0x73, 0xe6, 0x95, 0xd1, 0xa2, 0x37, 0x44, 0xbf, 0xcc, 0x59, 0x2a, 0x6e, 0x1d, 0x88, 0xfb, 0x63, 0x10, 0x85, 0xf6, 0xb2, 0xc1, 0x54, 0x27, 0xdc, 0xaf, 0x3a, 0x49, 0xd, 0x7e, 0xeb, 0x98, 0xc6, 0xb5, 0x20, 0x53, 0x17, 0x64, 0xf1, 0x82, 0x79, 0xa, 0x9f, 0xec, 0xa8, 0xdb, 0x4e, 0x3d, 0xa5, 0xd6, 0x43, 0x30, 0x74, 0x7, 0x92, 0xe1, 0x1a, 0x69, 0xfc, 0x8f, 0xcb, 0xb8, 0x2d, 0x5e, 0x91, 0xe2, 0x77, 0x4, 0x40, 0x33, 0xa6, 0xd5, 0x2e, 0x5d, 0xc8, 0xbb, 0xff, 0x8c, 0x19, 0x6a, 0xf2, 0x81, 0x14, 0x67, 0x23, 0x50, 0xc5, 0xb6, 0x4d, 0x3e, 0xab, 0xd8, 0x9c, 0xef, 0x7a, 0x9, 0x57, 0x24, 0xb1, 0xc2, 0x86, 0xf5, 0x60, 0x13, 0xe8, 0x9b, 0xe, 0x7d, 0x39, 0x4a, 0xdf, 0xac, 0x34, 0x47, 0xd2, 0xa1, 0xe5, 0x96, 0x3, 0x70, 0x8b, 0xf8, 0x6d, 0x1e, 0x5a, 0x29, 0xbc, 0xcf, 0x3f, 0x4c, 0xd9, 0xaa, 0xee, 0x9d, 0x8, 0x7b, 0x80, 0xf3, 0x66, 0x15, 0x51, 0x22, 0xb7, 0xc4, 0x5c, 0x2f, 0xba, 0xc9, 0x8d, 0xfe, 0x6b, 0x18, 0xe3, 0x90, 0x5, 0x76, 0x32, 0x41, 0xd4, 0xa7, 0xf9, 0x8a, 0x1f, 0x6c, 0x28, 0x5b, 0xce, 0xbd, 0x46, 0x35, 0xa0, 0xd3, 0x97, 0xe4, 0x71, 0x2, 0x9a, 0xe9, 0x7c, 0xf, 0x4b, 0x38, 0xad, 0xde, 0x25, 0x56, 0xc3, 0xb0, 0xf4, 0x87, 0x12, 0x61, 0xae, 0xdd, 0x48, 0x3b, 0x7f, 0xc, 0x99, 0xea, 0x11, 0x62, 0xf7, 0x84, 0xc0, 0xb3, 0x26, 0x55, 0xcd, 0xbe, 0x2b, 0x58, 0x1c, 0x6f, 0xfa, 0x89, 0x72, 0x1, 0x94, 0xe7, 0xa3, 0xd0, 0x45, 0x36, 0x68, 0x1b, 0x8e, 0xfd, 0xb9, 0xca, 0x5f, 0x2c, 0xd7, 0xa4, 0x31, 0x42, 0x6, 0x75, 0xe0, 0x93, 0xb, 0x78, 0xed, 0x9e, 0xda, 0xa9, 0x3c, 0x4f, 0xb4, 0xc7, 0x52, 0x21, 0x65, 0x16, 0x83, 0xf0}, + {0x0, 0x74, 0xe8, 0x9c, 0xcd, 0xb9, 0x25, 0x51, 0x87, 0xf3, 0x6f, 0x1b, 0x4a, 0x3e, 0xa2, 0xd6, 0x13, 0x67, 0xfb, 0x8f, 0xde, 0xaa, 0x36, 0x42, 0x94, 0xe0, 0x7c, 0x8, 0x59, 0x2d, 0xb1, 0xc5, 0x26, 0x52, 0xce, 0xba, 0xeb, 0x9f, 0x3, 0x77, 0xa1, 0xd5, 0x49, 0x3d, 0x6c, 0x18, 0x84, 0xf0, 0x35, 0x41, 0xdd, 0xa9, 0xf8, 0x8c, 0x10, 0x64, 0xb2, 0xc6, 0x5a, 0x2e, 0x7f, 0xb, 0x97, 0xe3, 0x4c, 0x38, 0xa4, 0xd0, 0x81, 0xf5, 0x69, 0x1d, 0xcb, 0xbf, 0x23, 0x57, 0x6, 0x72, 0xee, 0x9a, 0x5f, 0x2b, 0xb7, 0xc3, 0x92, 0xe6, 0x7a, 0xe, 0xd8, 0xac, 0x30, 0x44, 0x15, 0x61, 0xfd, 0x89, 0x6a, 0x1e, 0x82, 0xf6, 0xa7, 0xd3, 0x4f, 0x3b, 0xed, 0x99, 0x5, 0x71, 0x20, 0x54, 0xc8, 0xbc, 0x79, 0xd, 0x91, 0xe5, 0xb4, 0xc0, 0x5c, 0x28, 0xfe, 0x8a, 0x16, 0x62, 0x33, 0x47, 0xdb, 0xaf, 0x98, 0xec, 0x70, 0x4, 0x55, 0x21, 0xbd, 0xc9, 0x1f, 0x6b, 0xf7, 0x83, 0xd2, 0xa6, 0x3a, 0x4e, 0x8b, 0xff, 0x63, 0x17, 0x46, 0x32, 0xae, 0xda, 0xc, 0x78, 0xe4, 0x90, 0xc1, 0xb5, 0x29, 0x5d, 0xbe, 0xca, 0x56, 0x22, 0x73, 0x7, 0x9b, 0xef, 0x39, 0x4d, 0xd1, 0xa5, 0xf4, 0x80, 0x1c, 0x68, 0xad, 0xd9, 0x45, 0x31, 0x60, 0x14, 0x88, 0xfc, 0x2a, 0x5e, 0xc2, 0xb6, 0xe7, 0x93, 0xf, 0x7b, 0xd4, 0xa0, 0x3c, 0x48, 0x19, 0x6d, 0xf1, 0x85, 0x53, 0x27, 0xbb, 0xcf, 0x9e, 0xea, 0x76, 0x2, 0xc7, 0xb3, 0x2f, 0x5b, 0xa, 0x7e, 0xe2, 0x96, 0x40, 0x34, 0xa8, 0xdc, 0x8d, 0xf9, 0x65, 0x11, 0xf2, 0x86, 0x1a, 0x6e, 0x3f, 0x4b, 0xd7, 0xa3, 0x75, 0x1, 0x9d, 0xe9, 0xb8, 0xcc, 0x50, 0x24, 0xe1, 0x95, 0x9, 0x7d, 0x2c, 0x58, 0xc4, 0xb0, 0x66, 0x12, 0x8e, 0xfa, 0xab, 0xdf, 0x43, 0x37}, + {0x0, 0x75, 0xea, 0x9f, 0xc9, 0xbc, 0x23, 0x56, 0x8f, 0xfa, 0x65, 0x10, 0x46, 0x33, 0xac, 0xd9, 0x3, 0x76, 0xe9, 0x9c, 0xca, 0xbf, 0x20, 0x55, 0x8c, 0xf9, 0x66, 0x13, 0x45, 0x30, 0xaf, 0xda, 0x6, 0x73, 0xec, 0x99, 0xcf, 0xba, 0x25, 0x50, 0x89, 0xfc, 0x63, 0x16, 0x40, 0x35, 0xaa, 0xdf, 0x5, 0x70, 0xef, 0x9a, 0xcc, 0xb9, 0x26, 0x53, 0x8a, 0xff, 0x60, 0x15, 0x43, 0x36, 0xa9, 0xdc, 0xc, 0x79, 0xe6, 0x93, 0xc5, 0xb0, 0x2f, 0x5a, 0x83, 0xf6, 0x69, 0x1c, 0x4a, 0x3f, 0xa0, 0xd5, 0xf, 0x7a, 0xe5, 0x90, 0xc6, 0xb3, 0x2c, 0x59, 0x80, 0xf5, 0x6a, 0x1f, 0x49, 0x3c, 0xa3, 0xd6, 0xa, 0x7f, 0xe0, 0x95, 0xc3, 0xb6, 0x29, 0x5c, 0x85, 0xf0, 0x6f, 0x1a, 0x4c, 0x39, 0xa6, 0xd3, 0x9, 0x7c, 0xe3, 0x96, 0xc0, 0xb5, 0x2a, 0x5f, 0x86, 0xf3, 0x6c, 0x19, 0x4f, 0x3a, 0xa5, 0xd0, 0x18, 0x6d, 0xf2, 0x87, 0xd1, 0xa4, 0x3b, 0x4e, 0x97, 0xe2, 0x7d, 0x8, 0x5e, 0x2b, 0xb4, 0xc1, 0x1b, 0x6e, 0xf1, 0x84, 0xd2, 0xa7, 0x38, 0x4d, 0x94, 0xe1, 0x7e, 0xb, 0x5d, 0x28, 0xb7, 0xc2, 0x1e, 0x6b, 0xf4, 0x81, 0xd7, 0xa2, 0x3d, 0x48, 0x91, 0xe4, 0x7b, 0xe, 0x58, 0x2d, 0xb2, 0xc7, 0x1d, 0x68, 0xf7, 0x82, 0xd4, 0xa1, 0x3e, 0x4b, 0x92, 0xe7, 0x78, 0xd, 0x5b, 0x2e, 0xb1, 0xc4, 0x14, 0x61, 0xfe, 0x8b, 0xdd, 0xa8, 0x37, 0x42, 0x9b, 0xee, 0x71, 0x4, 0x52, 0x27, 0xb8, 0xcd, 0x17, 0x62, 0xfd, 0x88, 0xde, 0xab, 0x34, 0x41, 0x98, 0xed, 0x72, 0x7, 0x51, 0x24, 0xbb, 0xce, 0x12, 0x67, 0xf8, 0x8d, 0xdb, 0xae, 0x31, 0x44, 0x9d, 0xe8, 0x77, 0x2, 0x54, 0x21, 0xbe, 0xcb, 0x11, 0x64, 0xfb, 0x8e, 0xd8, 0xad, 0x32, 0x47, 0x9e, 0xeb, 0x74, 0x1, 0x57, 0x22, 0xbd, 0xc8}, + {0x0, 0x76, 0xec, 0x9a, 0xc5, 0xb3, 0x29, 0x5f, 0x97, 0xe1, 0x7b, 0xd, 0x52, 0x24, 0xbe, 0xc8, 0x33, 0x45, 0xdf, 0xa9, 0xf6, 0x80, 0x1a, 0x6c, 0xa4, 0xd2, 0x48, 0x3e, 0x61, 0x17, 0x8d, 0xfb, 0x66, 0x10, 0x8a, 0xfc, 0xa3, 0xd5, 0x4f, 0x39, 0xf1, 0x87, 0x1d, 0x6b, 0x34, 0x42, 0xd8, 0xae, 0x55, 0x23, 0xb9, 0xcf, 0x90, 0xe6, 0x7c, 0xa, 0xc2, 0xb4, 0x2e, 0x58, 0x7, 0x71, 0xeb, 0x9d, 0xcc, 0xba, 0x20, 0x56, 0x9, 0x7f, 0xe5, 0x93, 0x5b, 0x2d, 0xb7, 0xc1, 0x9e, 0xe8, 0x72, 0x4, 0xff, 0x89, 0x13, 0x65, 0x3a, 0x4c, 0xd6, 0xa0, 0x68, 0x1e, 0x84, 0xf2, 0xad, 0xdb, 0x41, 0x37, 0xaa, 0xdc, 0x46, 0x30, 0x6f, 0x19, 0x83, 0xf5, 0x3d, 0x4b, 0xd1, 0xa7, 0xf8, 0x8e, 0x14, 0x62, 0x99, 0xef, 0x75, 0x3, 0x5c, 0x2a, 0xb0, 0xc6, 0xe, 0x78, 0xe2, 0x94, 0xcb, 0xbd, 0x27, 0x51, 0x85, 0xf3, 0x69, 0x1f, 0x40, 0x36, 0xac, 0xda, 0x12, 0x64, 0xfe, 0x88, 0xd7, 0xa1, 0x3b, 0x4d, 0xb6, 0xc0, 0x5a, 0x2c, 0x73, 0x5, 0x9f, 0xe9, 0x21, 0x57, 0xcd, 0xbb, 0xe4, 0x92, 0x8, 0x7e, 0xe3, 0x95, 0xf, 0x79, 0x26, 0x50, 0xca, 0xbc, 0x74, 0x2, 0x98, 0xee, 0xb1, 0xc7, 0x5d, 0x2b, 0xd0, 0xa6, 0x3c, 0x4a, 0x15, 0x63, 0xf9, 0x8f, 0x47, 0x31, 0xab, 0xdd, 0x82, 0xf4, 0x6e, 0x18, 0x49, 0x3f, 0xa5, 0xd3, 0x8c, 0xfa, 0x60, 0x16, 0xde, 0xa8, 0x32, 0x44, 0x1b, 0x6d, 0xf7, 0x81, 0x7a, 0xc, 0x96, 0xe0, 0xbf, 0xc9, 0x53, 0x25, 0xed, 0x9b, 0x1, 0x77, 0x28, 0x5e, 0xc4, 0xb2, 0x2f, 0x59, 0xc3, 0xb5, 0xea, 0x9c, 0x6, 0x70, 0xb8, 0xce, 0x54, 0x22, 0x7d, 0xb, 0x91, 0xe7, 0x1c, 0x6a, 0xf0, 0x86, 0xd9, 0xaf, 0x35, 0x43, 0x8b, 0xfd, 0x67, 0x11, 0x4e, 0x38, 0xa2, 0xd4}, + {0x0, 0x77, 0xee, 0x99, 0xc1, 0xb6, 0x2f, 0x58, 0x9f, 0xe8, 0x71, 0x6, 0x5e, 0x29, 0xb0, 0xc7, 0x23, 0x54, 0xcd, 0xba, 0xe2, 0x95, 0xc, 0x7b, 0xbc, 0xcb, 0x52, 0x25, 0x7d, 0xa, 0x93, 0xe4, 0x46, 0x31, 0xa8, 0xdf, 0x87, 0xf0, 0x69, 0x1e, 0xd9, 0xae, 0x37, 0x40, 0x18, 0x6f, 0xf6, 0x81, 0x65, 0x12, 0x8b, 0xfc, 0xa4, 0xd3, 0x4a, 0x3d, 0xfa, 0x8d, 0x14, 0x63, 0x3b, 0x4c, 0xd5, 0xa2, 0x8c, 0xfb, 0x62, 0x15, 0x4d, 0x3a, 0xa3, 0xd4, 0x13, 0x64, 0xfd, 0x8a, 0xd2, 0xa5, 0x3c, 0x4b, 0xaf, 0xd8, 0x41, 0x36, 0x6e, 0x19, 0x80, 0xf7, 0x30, 0x47, 0xde, 0xa9, 0xf1, 0x86, 0x1f, 0x68, 0xca, 0xbd, 0x24, 0x53, 0xb, 0x7c, 0xe5, 0x92, 0x55, 0x22, 0xbb, 0xcc, 0x94, 0xe3, 0x7a, 0xd, 0xe9, 0x9e, 0x7, 0x70, 0x28, 0x5f, 0xc6, 0xb1, 0x76, 0x1, 0x98, 0xef, 0xb7, 0xc0, 0x59, 0x2e, 0x5, 0x72, 0xeb, 0x9c, 0xc4, 0xb3, 0x2a, 0x5d, 0x9a, 0xed, 0x74, 0x3, 0x5b, 0x2c, 0xb5, 0xc2, 0x26, 0x51, 0xc8, 0xbf, 0xe7, 0x90, 0x9, 0x7e, 0xb9, 0xce, 0x57, 0x20, 0x78, 0xf, 0x96, 0xe1, 0x43, 0x34, 0xad, 0xda, 0x82, 0xf5, 0x6c, 0x1b, 0xdc, 0xab, 0x32, 0x45, 0x1d, 0x6a, 0xf3, 0x84, 0x60, 0x17, 0x8e, 0xf9, 0xa1, 0xd6, 0x4f, 0x38, 0xff, 0x88, 0x11, 0x66, 0x3e, 0x49, 0xd0, 0xa7, 0x89, 0xfe, 0x67, 0x10, 0x48, 0x3f, 0xa6, 0xd1, 0x16, 0x61, 0xf8, 0x8f, 0xd7, 0xa0, 0x39, 0x4e, 0xaa, 0xdd, 0x44, 0x33, 0x6b, 0x1c, 0x85, 0xf2, 0x35, 0x42, 0xdb, 0xac, 0xf4, 0x83, 0x1a, 0x6d, 0xcf, 0xb8, 0x21, 0x56, 0xe, 0x79, 0xe0, 0x97, 0x50, 0x27, 0xbe, 0xc9, 0x91, 0xe6, 0x7f, 0x8, 0xec, 0x9b, 0x2, 0x75, 0x2d, 0x5a, 0xc3, 0xb4, 0x73, 0x4, 0x9d, 0xea, 0xb2, 0xc5, 0x5c, 0x2b}, + {0x0, 0x78, 0xf0, 0x88, 0xfd, 0x85, 0xd, 0x75, 0xe7, 0x9f, 0x17, 0x6f, 0x1a, 0x62, 0xea, 0x92, 0xd3, 0xab, 0x23, 0x5b, 0x2e, 0x56, 0xde, 0xa6, 0x34, 0x4c, 0xc4, 0xbc, 0xc9, 0xb1, 0x39, 0x41, 0xbb, 0xc3, 0x4b, 0x33, 0x46, 0x3e, 0xb6, 0xce, 0x5c, 0x24, 0xac, 0xd4, 0xa1, 0xd9, 0x51, 0x29, 0x68, 0x10, 0x98, 0xe0, 0x95, 0xed, 0x65, 0x1d, 0x8f, 0xf7, 0x7f, 0x7, 0x72, 0xa, 0x82, 0xfa, 0x6b, 0x13, 0x9b, 0xe3, 0x96, 0xee, 0x66, 0x1e, 0x8c, 0xf4, 0x7c, 0x4, 0x71, 0x9, 0x81, 0xf9, 0xb8, 0xc0, 0x48, 0x30, 0x45, 0x3d, 0xb5, 0xcd, 0x5f, 0x27, 0xaf, 0xd7, 0xa2, 0xda, 0x52, 0x2a, 0xd0, 0xa8, 0x20, 0x58, 0x2d, 0x55, 0xdd, 0xa5, 0x37, 0x4f, 0xc7, 0xbf, 0xca, 0xb2, 0x3a, 0x42, 0x3, 0x7b, 0xf3, 0x8b, 0xfe, 0x86, 0xe, 0x76, 0xe4, 0x9c, 0x14, 0x6c, 0x19, 0x61, 0xe9, 0x91, 0xd6, 0xae, 0x26, 0x5e, 0x2b, 0x53, 0xdb, 0xa3, 0x31, 0x49, 0xc1, 0xb9, 0xcc, 0xb4, 0x3c, 0x44, 0x5, 0x7d, 0xf5, 0x8d, 0xf8, 0x80, 0x8, 0x70, 0xe2, 0x9a, 0x12, 0x6a, 0x1f, 0x67, 0xef, 0x97, 0x6d, 0x15, 0x9d, 0xe5, 0x90, 0xe8, 0x60, 0x18, 0x8a, 0xf2, 0x7a, 0x2, 0x77, 0xf, 0x87, 0xff, 0xbe, 0xc6, 0x4e, 0x36, 0x43, 0x3b, 0xb3, 0xcb, 0x59, 0x21, 0xa9, 0xd1, 0xa4, 0xdc, 0x54, 0x2c, 0xbd, 0xc5, 0x4d, 0x35, 0x40, 0x38, 0xb0, 0xc8, 0x5a, 0x22, 0xaa, 0xd2, 0xa7, 0xdf, 0x57, 0x2f, 0x6e, 0x16, 0x9e, 0xe6, 0x93, 0xeb, 0x63, 0x1b, 0x89, 0xf1, 0x79, 0x1, 0x74, 0xc, 0x84, 0xfc, 0x6, 0x7e, 0xf6, 0x8e, 0xfb, 0x83, 0xb, 0x73, 0xe1, 0x99, 0x11, 0x69, 0x1c, 0x64, 0xec, 0x94, 0xd5, 0xad, 0x25, 0x5d, 0x28, 0x50, 0xd8, 0xa0, 0x32, 0x4a, 0xc2, 0xba, 0xcf, 0xb7, 0x3f, 0x47}, + {0x0, 0x79, 0xf2, 0x8b, 0xf9, 0x80, 0xb, 0x72, 0xef, 0x96, 0x1d, 0x64, 0x16, 0x6f, 0xe4, 0x9d, 0xc3, 0xba, 0x31, 0x48, 0x3a, 0x43, 0xc8, 0xb1, 0x2c, 0x55, 0xde, 0xa7, 0xd5, 0xac, 0x27, 0x5e, 0x9b, 0xe2, 0x69, 0x10, 0x62, 0x1b, 0x90, 0xe9, 0x74, 0xd, 0x86, 0xff, 0x8d, 0xf4, 0x7f, 0x6, 0x58, 0x21, 0xaa, 0xd3, 0xa1, 0xd8, 0x53, 0x2a, 0xb7, 0xce, 0x45, 0x3c, 0x4e, 0x37, 0xbc, 0xc5, 0x2b, 0x52, 0xd9, 0xa0, 0xd2, 0xab, 0x20, 0x59, 0xc4, 0xbd, 0x36, 0x4f, 0x3d, 0x44, 0xcf, 0xb6, 0xe8, 0x91, 0x1a, 0x63, 0x11, 0x68, 0xe3, 0x9a, 0x7, 0x7e, 0xf5, 0x8c, 0xfe, 0x87, 0xc, 0x75, 0xb0, 0xc9, 0x42, 0x3b, 0x49, 0x30, 0xbb, 0xc2, 0x5f, 0x26, 0xad, 0xd4, 0xa6, 0xdf, 0x54, 0x2d, 0x73, 0xa, 0x81, 0xf8, 0x8a, 0xf3, 0x78, 0x1, 0x9c, 0xe5, 0x6e, 0x17, 0x65, 0x1c, 0x97, 0xee, 0x56, 0x2f, 0xa4, 0xdd, 0xaf, 0xd6, 0x5d, 0x24, 0xb9, 0xc0, 0x4b, 0x32, 0x40, 0x39, 0xb2, 0xcb, 0x95, 0xec, 0x67, 0x1e, 0x6c, 0x15, 0x9e, 0xe7, 0x7a, 0x3, 0x88, 0xf1, 0x83, 0xfa, 0x71, 0x8, 0xcd, 0xb4, 0x3f, 0x46, 0x34, 0x4d, 0xc6, 0xbf, 0x22, 0x5b, 0xd0, 0xa9, 0xdb, 0xa2, 0x29, 0x50, 0xe, 0x77, 0xfc, 0x85, 0xf7, 0x8e, 0x5, 0x7c, 0xe1, 0x98, 0x13, 0x6a, 0x18, 0x61, 0xea, 0x93, 0x7d, 0x4, 0x8f, 0xf6, 0x84, 0xfd, 0x76, 0xf, 0x92, 0xeb, 0x60, 0x19, 0x6b, 0x12, 0x99, 0xe0, 0xbe, 0xc7, 0x4c, 0x35, 0x47, 0x3e, 0xb5, 0xcc, 0x51, 0x28, 0xa3, 0xda, 0xa8, 0xd1, 0x5a, 0x23, 0xe6, 0x9f, 0x14, 0x6d, 0x1f, 0x66, 0xed, 0x94, 0x9, 0x70, 0xfb, 0x82, 0xf0, 0x89, 0x2, 0x7b, 0x25, 0x5c, 0xd7, 0xae, 0xdc, 0xa5, 0x2e, 0x57, 0xca, 0xb3, 0x38, 0x41, 0x33, 0x4a, 0xc1, 0xb8}, + {0x0, 0x7a, 0xf4, 0x8e, 0xf5, 0x8f, 0x1, 0x7b, 0xf7, 0x8d, 0x3, 0x79, 0x2, 0x78, 0xf6, 0x8c, 0xf3, 0x89, 0x7, 0x7d, 0x6, 0x7c, 0xf2, 0x88, 0x4, 0x7e, 0xf0, 0x8a, 0xf1, 0x8b, 0x5, 0x7f, 0xfb, 0x81, 0xf, 0x75, 0xe, 0x74, 0xfa, 0x80, 0xc, 0x76, 0xf8, 0x82, 0xf9, 0x83, 0xd, 0x77, 0x8, 0x72, 0xfc, 0x86, 0xfd, 0x87, 0x9, 0x73, 0xff, 0x85, 0xb, 0x71, 0xa, 0x70, 0xfe, 0x84, 0xeb, 0x91, 0x1f, 0x65, 0x1e, 0x64, 0xea, 0x90, 0x1c, 0x66, 0xe8, 0x92, 0xe9, 0x93, 0x1d, 0x67, 0x18, 0x62, 0xec, 0x96, 0xed, 0x97, 0x19, 0x63, 0xef, 0x95, 0x1b, 0x61, 0x1a, 0x60, 0xee, 0x94, 0x10, 0x6a, 0xe4, 0x9e, 0xe5, 0x9f, 0x11, 0x6b, 0xe7, 0x9d, 0x13, 0x69, 0x12, 0x68, 0xe6, 0x9c, 0xe3, 0x99, 0x17, 0x6d, 0x16, 0x6c, 0xe2, 0x98, 0x14, 0x6e, 0xe0, 0x9a, 0xe1, 0x9b, 0x15, 0x6f, 0xcb, 0xb1, 0x3f, 0x45, 0x3e, 0x44, 0xca, 0xb0, 0x3c, 0x46, 0xc8, 0xb2, 0xc9, 0xb3, 0x3d, 0x47, 0x38, 0x42, 0xcc, 0xb6, 0xcd, 0xb7, 0x39, 0x43, 0xcf, 0xb5, 0x3b, 0x41, 0x3a, 0x40, 0xce, 0xb4, 0x30, 0x4a, 0xc4, 0xbe, 0xc5, 0xbf, 0x31, 0x4b, 0xc7, 0xbd, 0x33, 0x49, 0x32, 0x48, 0xc6, 0xbc, 0xc3, 0xb9, 0x37, 0x4d, 0x36, 0x4c, 0xc2, 0xb8, 0x34, 0x4e, 0xc0, 0xba, 0xc1, 0xbb, 0x35, 0x4f, 0x20, 0x5a, 0xd4, 0xae, 0xd5, 0xaf, 0x21, 0x5b, 0xd7, 0xad, 0x23, 0x59, 0x22, 0x58, 0xd6, 0xac, 0xd3, 0xa9, 0x27, 0x5d, 0x26, 0x5c, 0xd2, 0xa8, 0x24, 0x5e, 0xd0, 0xaa, 0xd1, 0xab, 0x25, 0x5f, 0xdb, 0xa1, 0x2f, 0x55, 0x2e, 0x54, 0xda, 0xa0, 0x2c, 0x56, 0xd8, 0xa2, 0xd9, 0xa3, 0x2d, 0x57, 0x28, 0x52, 0xdc, 0xa6, 0xdd, 0xa7, 0x29, 0x53, 0xdf, 0xa5, 0x2b, 0x51, 0x2a, 0x50, 0xde, 0xa4}, + {0x0, 0x7b, 0xf6, 0x8d, 0xf1, 0x8a, 0x7, 0x7c, 0xff, 0x84, 0x9, 0x72, 0xe, 0x75, 0xf8, 0x83, 0xe3, 0x98, 0x15, 0x6e, 0x12, 0x69, 0xe4, 0x9f, 0x1c, 0x67, 0xea, 0x91, 0xed, 0x96, 0x1b, 0x60, 0xdb, 0xa0, 0x2d, 0x56, 0x2a, 0x51, 0xdc, 0xa7, 0x24, 0x5f, 0xd2, 0xa9, 0xd5, 0xae, 0x23, 0x58, 0x38, 0x43, 0xce, 0xb5, 0xc9, 0xb2, 0x3f, 0x44, 0xc7, 0xbc, 0x31, 0x4a, 0x36, 0x4d, 0xc0, 0xbb, 0xab, 0xd0, 0x5d, 0x26, 0x5a, 0x21, 0xac, 0xd7, 0x54, 0x2f, 0xa2, 0xd9, 0xa5, 0xde, 0x53, 0x28, 0x48, 0x33, 0xbe, 0xc5, 0xb9, 0xc2, 0x4f, 0x34, 0xb7, 0xcc, 0x41, 0x3a, 0x46, 0x3d, 0xb0, 0xcb, 0x70, 0xb, 0x86, 0xfd, 0x81, 0xfa, 0x77, 0xc, 0x8f, 0xf4, 0x79, 0x2, 0x7e, 0x5, 0x88, 0xf3, 0x93, 0xe8, 0x65, 0x1e, 0x62, 0x19, 0x94, 0xef, 0x6c, 0x17, 0x9a, 0xe1, 0x9d, 0xe6, 0x6b, 0x10, 0x4b, 0x30, 0xbd, 0xc6, 0xba, 0xc1, 0x4c, 0x37, 0xb4, 0xcf, 0x42, 0x39, 0x45, 0x3e, 0xb3, 0xc8, 0xa8, 0xd3, 0x5e, 0x25, 0x59, 0x22, 0xaf, 0xd4, 0x57, 0x2c, 0xa1, 0xda, 0xa6, 0xdd, 0x50, 0x2b, 0x90, 0xeb, 0x66, 0x1d, 0x61, 0x1a, 0x97, 0xec, 0x6f, 0x14, 0x99, 0xe2, 0x9e, 0xe5, 0x68, 0x13, 0x73, 0x8, 0x85, 0xfe, 0x82, 0xf9, 0x74, 0xf, 0x8c, 0xf7, 0x7a, 0x1, 0x7d, 0x6, 0x8b, 0xf0, 0xe0, 0x9b, 0x16, 0x6d, 0x11, 0x6a, 0xe7, 0x9c, 0x1f, 0x64, 0xe9, 0x92, 0xee, 0x95, 0x18, 0x63, 0x3, 0x78, 0xf5, 0x8e, 0xf2, 0x89, 0x4, 0x7f, 0xfc, 0x87, 0xa, 0x71, 0xd, 0x76, 0xfb, 0x80, 0x3b, 0x40, 0xcd, 0xb6, 0xca, 0xb1, 0x3c, 0x47, 0xc4, 0xbf, 0x32, 0x49, 0x35, 0x4e, 0xc3, 0xb8, 0xd8, 0xa3, 0x2e, 0x55, 0x29, 0x52, 0xdf, 0xa4, 0x27, 0x5c, 0xd1, 0xaa, 0xd6, 0xad, 0x20, 0x5b}, + {0x0, 0x7c, 0xf8, 0x84, 0xed, 0x91, 0x15, 0x69, 0xc7, 0xbb, 0x3f, 0x43, 0x2a, 0x56, 0xd2, 0xae, 0x93, 0xef, 0x6b, 0x17, 0x7e, 0x2, 0x86, 0xfa, 0x54, 0x28, 0xac, 0xd0, 0xb9, 0xc5, 0x41, 0x3d, 0x3b, 0x47, 0xc3, 0xbf, 0xd6, 0xaa, 0x2e, 0x52, 0xfc, 0x80, 0x4, 0x78, 0x11, 0x6d, 0xe9, 0x95, 0xa8, 0xd4, 0x50, 0x2c, 0x45, 0x39, 0xbd, 0xc1, 0x6f, 0x13, 0x97, 0xeb, 0x82, 0xfe, 0x7a, 0x6, 0x76, 0xa, 0x8e, 0xf2, 0x9b, 0xe7, 0x63, 0x1f, 0xb1, 0xcd, 0x49, 0x35, 0x5c, 0x20, 0xa4, 0xd8, 0xe5, 0x99, 0x1d, 0x61, 0x8, 0x74, 0xf0, 0x8c, 0x22, 0x5e, 0xda, 0xa6, 0xcf, 0xb3, 0x37, 0x4b, 0x4d, 0x31, 0xb5, 0xc9, 0xa0, 0xdc, 0x58, 0x24, 0x8a, 0xf6, 0x72, 0xe, 0x67, 0x1b, 0x9f, 0xe3, 0xde, 0xa2, 0x26, 0x5a, 0x33, 0x4f, 0xcb, 0xb7, 0x19, 0x65, 0xe1, 0x9d, 0xf4, 0x88, 0xc, 0x70, 0xec, 0x90, 0x14, 0x68, 0x1, 0x7d, 0xf9, 0x85, 0x2b, 0x57, 0xd3, 0xaf, 0xc6, 0xba, 0x3e, 0x42, 0x7f, 0x3, 0x87, 0xfb, 0x92, 0xee, 0x6a, 0x16, 0xb8, 0xc4, 0x40, 0x3c, 0x55, 0x29, 0xad, 0xd1, 0xd7, 0xab, 0x2f, 0x53, 0x3a, 0x46, 0xc2, 0xbe, 0x10, 0x6c, 0xe8, 0x94, 0xfd, 0x81, 0x5, 0x79, 0x44, 0x38, 0xbc, 0xc0, 0xa9, 0xd5, 0x51, 0x2d, 0x83, 0xff, 0x7b, 0x7, 0x6e, 0x12, 0x96, 0xea, 0x9a, 0xe6, 0x62, 0x1e, 0x77, 0xb, 0x8f, 0xf3, 0x5d, 0x21, 0xa5, 0xd9, 0xb0, 0xcc, 0x48, 0x34, 0x9, 0x75, 0xf1, 0x8d, 0xe4, 0x98, 0x1c, 0x60, 0xce, 0xb2, 0x36, 0x4a, 0x23, 0x5f, 0xdb, 0xa7, 0xa1, 0xdd, 0x59, 0x25, 0x4c, 0x30, 0xb4, 0xc8, 0x66, 0x1a, 0x9e, 0xe2, 0x8b, 0xf7, 0x73, 0xf, 0x32, 0x4e, 0xca, 0xb6, 0xdf, 0xa3, 0x27, 0x5b, 0xf5, 0x89, 0xd, 0x71, 0x18, 0x64, 0xe0, 0x9c}, + {0x0, 0x7d, 0xfa, 0x87, 0xe9, 0x94, 0x13, 0x6e, 0xcf, 0xb2, 0x35, 0x48, 0x26, 0x5b, 0xdc, 0xa1, 0x83, 0xfe, 0x79, 0x4, 0x6a, 0x17, 0x90, 0xed, 0x4c, 0x31, 0xb6, 0xcb, 0xa5, 0xd8, 0x5f, 0x22, 0x1b, 0x66, 0xe1, 0x9c, 0xf2, 0x8f, 0x8, 0x75, 0xd4, 0xa9, 0x2e, 0x53, 0x3d, 0x40, 0xc7, 0xba, 0x98, 0xe5, 0x62, 0x1f, 0x71, 0xc, 0x8b, 0xf6, 0x57, 0x2a, 0xad, 0xd0, 0xbe, 0xc3, 0x44, 0x39, 0x36, 0x4b, 0xcc, 0xb1, 0xdf, 0xa2, 0x25, 0x58, 0xf9, 0x84, 0x3, 0x7e, 0x10, 0x6d, 0xea, 0x97, 0xb5, 0xc8, 0x4f, 0x32, 0x5c, 0x21, 0xa6, 0xdb, 0x7a, 0x7, 0x80, 0xfd, 0x93, 0xee, 0x69, 0x14, 0x2d, 0x50, 0xd7, 0xaa, 0xc4, 0xb9, 0x3e, 0x43, 0xe2, 0x9f, 0x18, 0x65, 0xb, 0x76, 0xf1, 0x8c, 0xae, 0xd3, 0x54, 0x29, 0x47, 0x3a, 0xbd, 0xc0, 0x61, 0x1c, 0x9b, 0xe6, 0x88, 0xf5, 0x72, 0xf, 0x6c, 0x11, 0x96, 0xeb, 0x85, 0xf8, 0x7f, 0x2, 0xa3, 0xde, 0x59, 0x24, 0x4a, 0x37, 0xb0, 0xcd, 0xef, 0x92, 0x15, 0x68, 0x6, 0x7b, 0xfc, 0x81, 0x20, 0x5d, 0xda, 0xa7, 0xc9, 0xb4, 0x33, 0x4e, 0x77, 0xa, 0x8d, 0xf0, 0x9e, 0xe3, 0x64, 0x19, 0xb8, 0xc5, 0x42, 0x3f, 0x51, 0x2c, 0xab, 0xd6, 0xf4, 0x89, 0xe, 0x73, 0x1d, 0x60, 0xe7, 0x9a, 0x3b, 0x46, 0xc1, 0xbc, 0xd2, 0xaf, 0x28, 0x55, 0x5a, 0x27, 0xa0, 0xdd, 0xb3, 0xce, 0x49, 0x34, 0x95, 0xe8, 0x6f, 0x12, 0x7c, 0x1, 0x86, 0xfb, 0xd9, 0xa4, 0x23, 0x5e, 0x30, 0x4d, 0xca, 0xb7, 0x16, 0x6b, 0xec, 0x91, 0xff, 0x82, 0x5, 0x78, 0x41, 0x3c, 0xbb, 0xc6, 0xa8, 0xd5, 0x52, 0x2f, 0x8e, 0xf3, 0x74, 0x9, 0x67, 0x1a, 0x9d, 0xe0, 0xc2, 0xbf, 0x38, 0x45, 0x2b, 0x56, 0xd1, 0xac, 0xd, 0x70, 0xf7, 0x8a, 0xe4, 0x99, 0x1e, 0x63}, + {0x0, 0x7e, 0xfc, 0x82, 0xe5, 0x9b, 0x19, 0x67, 0xd7, 0xa9, 0x2b, 0x55, 0x32, 0x4c, 0xce, 0xb0, 0xb3, 0xcd, 0x4f, 0x31, 0x56, 0x28, 0xaa, 0xd4, 0x64, 0x1a, 0x98, 0xe6, 0x81, 0xff, 0x7d, 0x3, 0x7b, 0x5, 0x87, 0xf9, 0x9e, 0xe0, 0x62, 0x1c, 0xac, 0xd2, 0x50, 0x2e, 0x49, 0x37, 0xb5, 0xcb, 0xc8, 0xb6, 0x34, 0x4a, 0x2d, 0x53, 0xd1, 0xaf, 0x1f, 0x61, 0xe3, 0x9d, 0xfa, 0x84, 0x6, 0x78, 0xf6, 0x88, 0xa, 0x74, 0x13, 0x6d, 0xef, 0x91, 0x21, 0x5f, 0xdd, 0xa3, 0xc4, 0xba, 0x38, 0x46, 0x45, 0x3b, 0xb9, 0xc7, 0xa0, 0xde, 0x5c, 0x22, 0x92, 0xec, 0x6e, 0x10, 0x77, 0x9, 0x8b, 0xf5, 0x8d, 0xf3, 0x71, 0xf, 0x68, 0x16, 0x94, 0xea, 0x5a, 0x24, 0xa6, 0xd8, 0xbf, 0xc1, 0x43, 0x3d, 0x3e, 0x40, 0xc2, 0xbc, 0xdb, 0xa5, 0x27, 0x59, 0xe9, 0x97, 0x15, 0x6b, 0xc, 0x72, 0xf0, 0x8e, 0xf1, 0x8f, 0xd, 0x73, 0x14, 0x6a, 0xe8, 0x96, 0x26, 0x58, 0xda, 0xa4, 0xc3, 0xbd, 0x3f, 0x41, 0x42, 0x3c, 0xbe, 0xc0, 0xa7, 0xd9, 0x5b, 0x25, 0x95, 0xeb, 0x69, 0x17, 0x70, 0xe, 0x8c, 0xf2, 0x8a, 0xf4, 0x76, 0x8, 0x6f, 0x11, 0x93, 0xed, 0x5d, 0x23, 0xa1, 0xdf, 0xb8, 0xc6, 0x44, 0x3a, 0x39, 0x47, 0xc5, 0xbb, 0xdc, 0xa2, 0x20, 0x5e, 0xee, 0x90, 0x12, 0x6c, 0xb, 0x75, 0xf7, 0x89, 0x7, 0x79, 0xfb, 0x85, 0xe2, 0x9c, 0x1e, 0x60, 0xd0, 0xae, 0x2c, 0x52, 0x35, 0x4b, 0xc9, 0xb7, 0xb4, 0xca, 0x48, 0x36, 0x51, 0x2f, 0xad, 0xd3, 0x63, 0x1d, 0x9f, 0xe1, 0x86, 0xf8, 0x7a, 0x4, 0x7c, 0x2, 0x80, 0xfe, 0x99, 0xe7, 0x65, 0x1b, 0xab, 0xd5, 0x57, 0x29, 0x4e, 0x30, 0xb2, 0xcc, 0xcf, 0xb1, 0x33, 0x4d, 0x2a, 0x54, 0xd6, 0xa8, 0x18, 0x66, 0xe4, 0x9a, 0xfd, 0x83, 0x1, 0x7f}, + {0x0, 0x7f, 0xfe, 0x81, 0xe1, 0x9e, 0x1f, 0x60, 0xdf, 0xa0, 0x21, 0x5e, 0x3e, 0x41, 0xc0, 0xbf, 0xa3, 0xdc, 0x5d, 0x22, 0x42, 0x3d, 0xbc, 0xc3, 0x7c, 0x3, 0x82, 0xfd, 0x9d, 0xe2, 0x63, 0x1c, 0x5b, 0x24, 0xa5, 0xda, 0xba, 0xc5, 0x44, 0x3b, 0x84, 0xfb, 0x7a, 0x5, 0x65, 0x1a, 0x9b, 0xe4, 0xf8, 0x87, 0x6, 0x79, 0x19, 0x66, 0xe7, 0x98, 0x27, 0x58, 0xd9, 0xa6, 0xc6, 0xb9, 0x38, 0x47, 0xb6, 0xc9, 0x48, 0x37, 0x57, 0x28, 0xa9, 0xd6, 0x69, 0x16, 0x97, 0xe8, 0x88, 0xf7, 0x76, 0x9, 0x15, 0x6a, 0xeb, 0x94, 0xf4, 0x8b, 0xa, 0x75, 0xca, 0xb5, 0x34, 0x4b, 0x2b, 0x54, 0xd5, 0xaa, 0xed, 0x92, 0x13, 0x6c, 0xc, 0x73, 0xf2, 0x8d, 0x32, 0x4d, 0xcc, 0xb3, 0xd3, 0xac, 0x2d, 0x52, 0x4e, 0x31, 0xb0, 0xcf, 0xaf, 0xd0, 0x51, 0x2e, 0x91, 0xee, 0x6f, 0x10, 0x70, 0xf, 0x8e, 0xf1, 0x71, 0xe, 0x8f, 0xf0, 0x90, 0xef, 0x6e, 0x11, 0xae, 0xd1, 0x50, 0x2f, 0x4f, 0x30, 0xb1, 0xce, 0xd2, 0xad, 0x2c, 0x53, 0x33, 0x4c, 0xcd, 0xb2, 0xd, 0x72, 0xf3, 0x8c, 0xec, 0x93, 0x12, 0x6d, 0x2a, 0x55, 0xd4, 0xab, 0xcb, 0xb4, 0x35, 0x4a, 0xf5, 0x8a, 0xb, 0x74, 0x14, 0x6b, 0xea, 0x95, 0x89, 0xf6, 0x77, 0x8, 0x68, 0x17, 0x96, 0xe9, 0x56, 0x29, 0xa8, 0xd7, 0xb7, 0xc8, 0x49, 0x36, 0xc7, 0xb8, 0x39, 0x46, 0x26, 0x59, 0xd8, 0xa7, 0x18, 0x67, 0xe6, 0x99, 0xf9, 0x86, 0x7, 0x78, 0x64, 0x1b, 0x9a, 0xe5, 0x85, 0xfa, 0x7b, 0x4, 0xbb, 0xc4, 0x45, 0x3a, 0x5a, 0x25, 0xa4, 0xdb, 0x9c, 0xe3, 0x62, 0x1d, 0x7d, 0x2, 0x83, 0xfc, 0x43, 0x3c, 0xbd, 0xc2, 0xa2, 0xdd, 0x5c, 0x23, 0x3f, 0x40, 0xc1, 0xbe, 0xde, 0xa1, 0x20, 0x5f, 0xe0, 0x9f, 0x1e, 0x61, 0x1, 0x7e, 0xff, 0x80}, + {0x0, 0x80, 0x1d, 0x9d, 0x3a, 0xba, 0x27, 0xa7, 0x74, 0xf4, 0x69, 0xe9, 0x4e, 0xce, 0x53, 0xd3, 0xe8, 0x68, 0xf5, 0x75, 0xd2, 0x52, 0xcf, 0x4f, 0x9c, 0x1c, 0x81, 0x1, 0xa6, 0x26, 0xbb, 0x3b, 0xcd, 0x4d, 0xd0, 0x50, 0xf7, 0x77, 0xea, 0x6a, 0xb9, 0x39, 0xa4, 0x24, 0x83, 0x3, 0x9e, 0x1e, 0x25, 0xa5, 0x38, 0xb8, 0x1f, 0x9f, 0x2, 0x82, 0x51, 0xd1, 0x4c, 0xcc, 0x6b, 0xeb, 0x76, 0xf6, 0x87, 0x7, 0x9a, 0x1a, 0xbd, 0x3d, 0xa0, 0x20, 0xf3, 0x73, 0xee, 0x6e, 0xc9, 0x49, 0xd4, 0x54, 0x6f, 0xef, 0x72, 0xf2, 0x55, 0xd5, 0x48, 0xc8, 0x1b, 0x9b, 0x6, 0x86, 0x21, 0xa1, 0x3c, 0xbc, 0x4a, 0xca, 0x57, 0xd7, 0x70, 0xf0, 0x6d, 0xed, 0x3e, 0xbe, 0x23, 0xa3, 0x4, 0x84, 0x19, 0x99, 0xa2, 0x22, 0xbf, 0x3f, 0x98, 0x18, 0x85, 0x5, 0xd6, 0x56, 0xcb, 0x4b, 0xec, 0x6c, 0xf1, 0x71, 0x13, 0x93, 0xe, 0x8e, 0x29, 0xa9, 0x34, 0xb4, 0x67, 0xe7, 0x7a, 0xfa, 0x5d, 0xdd, 0x40, 0xc0, 0xfb, 0x7b, 0xe6, 0x66, 0xc1, 0x41, 0xdc, 0x5c, 0x8f, 0xf, 0x92, 0x12, 0xb5, 0x35, 0xa8, 0x28, 0xde, 0x5e, 0xc3, 0x43, 0xe4, 0x64, 0xf9, 0x79, 0xaa, 0x2a, 0xb7, 0x37, 0x90, 0x10, 0x8d, 0xd, 0x36, 0xb6, 0x2b, 0xab, 0xc, 0x8c, 0x11, 0x91, 0x42, 0xc2, 0x5f, 0xdf, 0x78, 0xf8, 0x65, 0xe5, 0x94, 0x14, 0x89, 0x9, 0xae, 0x2e, 0xb3, 0x33, 0xe0, 0x60, 0xfd, 0x7d, 0xda, 0x5a, 0xc7, 0x47, 0x7c, 0xfc, 0x61, 0xe1, 0x46, 0xc6, 0x5b, 0xdb, 0x8, 0x88, 0x15, 0x95, 0x32, 0xb2, 0x2f, 0xaf, 0x59, 0xd9, 0x44, 0xc4, 0x63, 0xe3, 0x7e, 0xfe, 0x2d, 0xad, 0x30, 0xb0, 0x17, 0x97, 0xa, 0x8a, 0xb1, 0x31, 0xac, 0x2c, 0x8b, 0xb, 0x96, 0x16, 0xc5, 0x45, 0xd8, 0x58, 0xff, 0x7f, 0xe2, 0x62}, + {0x0, 0x81, 0x1f, 0x9e, 0x3e, 0xbf, 0x21, 0xa0, 0x7c, 0xfd, 0x63, 0xe2, 0x42, 0xc3, 0x5d, 0xdc, 0xf8, 0x79, 0xe7, 0x66, 0xc6, 0x47, 0xd9, 0x58, 0x84, 0x5, 0x9b, 0x1a, 0xba, 0x3b, 0xa5, 0x24, 0xed, 0x6c, 0xf2, 0x73, 0xd3, 0x52, 0xcc, 0x4d, 0x91, 0x10, 0x8e, 0xf, 0xaf, 0x2e, 0xb0, 0x31, 0x15, 0x94, 0xa, 0x8b, 0x2b, 0xaa, 0x34, 0xb5, 0x69, 0xe8, 0x76, 0xf7, 0x57, 0xd6, 0x48, 0xc9, 0xc7, 0x46, 0xd8, 0x59, 0xf9, 0x78, 0xe6, 0x67, 0xbb, 0x3a, 0xa4, 0x25, 0x85, 0x4, 0x9a, 0x1b, 0x3f, 0xbe, 0x20, 0xa1, 0x1, 0x80, 0x1e, 0x9f, 0x43, 0xc2, 0x5c, 0xdd, 0x7d, 0xfc, 0x62, 0xe3, 0x2a, 0xab, 0x35, 0xb4, 0x14, 0x95, 0xb, 0x8a, 0x56, 0xd7, 0x49, 0xc8, 0x68, 0xe9, 0x77, 0xf6, 0xd2, 0x53, 0xcd, 0x4c, 0xec, 0x6d, 0xf3, 0x72, 0xae, 0x2f, 0xb1, 0x30, 0x90, 0x11, 0x8f, 0xe, 0x93, 0x12, 0x8c, 0xd, 0xad, 0x2c, 0xb2, 0x33, 0xef, 0x6e, 0xf0, 0x71, 0xd1, 0x50, 0xce, 0x4f, 0x6b, 0xea, 0x74, 0xf5, 0x55, 0xd4, 0x4a, 0xcb, 0x17, 0x96, 0x8, 0x89, 0x29, 0xa8, 0x36, 0xb7, 0x7e, 0xff, 0x61, 0xe0, 0x40, 0xc1, 0x5f, 0xde, 0x2, 0x83, 0x1d, 0x9c, 0x3c, 0xbd, 0x23, 0xa2, 0x86, 0x7, 0x99, 0x18, 0xb8, 0x39, 0xa7, 0x26, 0xfa, 0x7b, 0xe5, 0x64, 0xc4, 0x45, 0xdb, 0x5a, 0x54, 0xd5, 0x4b, 0xca, 0x6a, 0xeb, 0x75, 0xf4, 0x28, 0xa9, 0x37, 0xb6, 0x16, 0x97, 0x9, 0x88, 0xac, 0x2d, 0xb3, 0x32, 0x92, 0x13, 0x8d, 0xc, 0xd0, 0x51, 0xcf, 0x4e, 0xee, 0x6f, 0xf1, 0x70, 0xb9, 0x38, 0xa6, 0x27, 0x87, 0x6, 0x98, 0x19, 0xc5, 0x44, 0xda, 0x5b, 0xfb, 0x7a, 0xe4, 0x65, 0x41, 0xc0, 0x5e, 0xdf, 0x7f, 0xfe, 0x60, 0xe1, 0x3d, 0xbc, 0x22, 0xa3, 0x3, 0x82, 0x1c, 0x9d}, + {0x0, 0x82, 0x19, 0x9b, 0x32, 0xb0, 0x2b, 0xa9, 0x64, 0xe6, 0x7d, 0xff, 0x56, 0xd4, 0x4f, 0xcd, 0xc8, 0x4a, 0xd1, 0x53, 0xfa, 0x78, 0xe3, 0x61, 0xac, 0x2e, 0xb5, 0x37, 0x9e, 0x1c, 0x87, 0x5, 0x8d, 0xf, 0x94, 0x16, 0xbf, 0x3d, 0xa6, 0x24, 0xe9, 0x6b, 0xf0, 0x72, 0xdb, 0x59, 0xc2, 0x40, 0x45, 0xc7, 0x5c, 0xde, 0x77, 0xf5, 0x6e, 0xec, 0x21, 0xa3, 0x38, 0xba, 0x13, 0x91, 0xa, 0x88, 0x7, 0x85, 0x1e, 0x9c, 0x35, 0xb7, 0x2c, 0xae, 0x63, 0xe1, 0x7a, 0xf8, 0x51, 0xd3, 0x48, 0xca, 0xcf, 0x4d, 0xd6, 0x54, 0xfd, 0x7f, 0xe4, 0x66, 0xab, 0x29, 0xb2, 0x30, 0x99, 0x1b, 0x80, 0x2, 0x8a, 0x8, 0x93, 0x11, 0xb8, 0x3a, 0xa1, 0x23, 0xee, 0x6c, 0xf7, 0x75, 0xdc, 0x5e, 0xc5, 0x47, 0x42, 0xc0, 0x5b, 0xd9, 0x70, 0xf2, 0x69, 0xeb, 0x26, 0xa4, 0x3f, 0xbd, 0x14, 0x96, 0xd, 0x8f, 0xe, 0x8c, 0x17, 0x95, 0x3c, 0xbe, 0x25, 0xa7, 0x6a, 0xe8, 0x73, 0xf1, 0x58, 0xda, 0x41, 0xc3, 0xc6, 0x44, 0xdf, 0x5d, 0xf4, 0x76, 0xed, 0x6f, 0xa2, 0x20, 0xbb, 0x39, 0x90, 0x12, 0x89, 0xb, 0x83, 0x1, 0x9a, 0x18, 0xb1, 0x33, 0xa8, 0x2a, 0xe7, 0x65, 0xfe, 0x7c, 0xd5, 0x57, 0xcc, 0x4e, 0x4b, 0xc9, 0x52, 0xd0, 0x79, 0xfb, 0x60, 0xe2, 0x2f, 0xad, 0x36, 0xb4, 0x1d, 0x9f, 0x4, 0x86, 0x9, 0x8b, 0x10, 0x92, 0x3b, 0xb9, 0x22, 0xa0, 0x6d, 0xef, 0x74, 0xf6, 0x5f, 0xdd, 0x46, 0xc4, 0xc1, 0x43, 0xd8, 0x5a, 0xf3, 0x71, 0xea, 0x68, 0xa5, 0x27, 0xbc, 0x3e, 0x97, 0x15, 0x8e, 0xc, 0x84, 0x6, 0x9d, 0x1f, 0xb6, 0x34, 0xaf, 0x2d, 0xe0, 0x62, 0xf9, 0x7b, 0xd2, 0x50, 0xcb, 0x49, 0x4c, 0xce, 0x55, 0xd7, 0x7e, 0xfc, 0x67, 0xe5, 0x28, 0xaa, 0x31, 0xb3, 0x1a, 0x98, 0x3, 0x81}, + {0x0, 0x83, 0x1b, 0x98, 0x36, 0xb5, 0x2d, 0xae, 0x6c, 0xef, 0x77, 0xf4, 0x5a, 0xd9, 0x41, 0xc2, 0xd8, 0x5b, 0xc3, 0x40, 0xee, 0x6d, 0xf5, 0x76, 0xb4, 0x37, 0xaf, 0x2c, 0x82, 0x1, 0x99, 0x1a, 0xad, 0x2e, 0xb6, 0x35, 0x9b, 0x18, 0x80, 0x3, 0xc1, 0x42, 0xda, 0x59, 0xf7, 0x74, 0xec, 0x6f, 0x75, 0xf6, 0x6e, 0xed, 0x43, 0xc0, 0x58, 0xdb, 0x19, 0x9a, 0x2, 0x81, 0x2f, 0xac, 0x34, 0xb7, 0x47, 0xc4, 0x5c, 0xdf, 0x71, 0xf2, 0x6a, 0xe9, 0x2b, 0xa8, 0x30, 0xb3, 0x1d, 0x9e, 0x6, 0x85, 0x9f, 0x1c, 0x84, 0x7, 0xa9, 0x2a, 0xb2, 0x31, 0xf3, 0x70, 0xe8, 0x6b, 0xc5, 0x46, 0xde, 0x5d, 0xea, 0x69, 0xf1, 0x72, 0xdc, 0x5f, 0xc7, 0x44, 0x86, 0x5, 0x9d, 0x1e, 0xb0, 0x33, 0xab, 0x28, 0x32, 0xb1, 0x29, 0xaa, 0x4, 0x87, 0x1f, 0x9c, 0x5e, 0xdd, 0x45, 0xc6, 0x68, 0xeb, 0x73, 0xf0, 0x8e, 0xd, 0x95, 0x16, 0xb8, 0x3b, 0xa3, 0x20, 0xe2, 0x61, 0xf9, 0x7a, 0xd4, 0x57, 0xcf, 0x4c, 0x56, 0xd5, 0x4d, 0xce, 0x60, 0xe3, 0x7b, 0xf8, 0x3a, 0xb9, 0x21, 0xa2, 0xc, 0x8f, 0x17, 0x94, 0x23, 0xa0, 0x38, 0xbb, 0x15, 0x96, 0xe, 0x8d, 0x4f, 0xcc, 0x54, 0xd7, 0x79, 0xfa, 0x62, 0xe1, 0xfb, 0x78, 0xe0, 0x63, 0xcd, 0x4e, 0xd6, 0x55, 0x97, 0x14, 0x8c, 0xf, 0xa1, 0x22, 0xba, 0x39, 0xc9, 0x4a, 0xd2, 0x51, 0xff, 0x7c, 0xe4, 0x67, 0xa5, 0x26, 0xbe, 0x3d, 0x93, 0x10, 0x88, 0xb, 0x11, 0x92, 0xa, 0x89, 0x27, 0xa4, 0x3c, 0xbf, 0x7d, 0xfe, 0x66, 0xe5, 0x4b, 0xc8, 0x50, 0xd3, 0x64, 0xe7, 0x7f, 0xfc, 0x52, 0xd1, 0x49, 0xca, 0x8, 0x8b, 0x13, 0x90, 0x3e, 0xbd, 0x25, 0xa6, 0xbc, 0x3f, 0xa7, 0x24, 0x8a, 0x9, 0x91, 0x12, 0xd0, 0x53, 0xcb, 0x48, 0xe6, 0x65, 0xfd, 0x7e}, + {0x0, 0x84, 0x15, 0x91, 0x2a, 0xae, 0x3f, 0xbb, 0x54, 0xd0, 0x41, 0xc5, 0x7e, 0xfa, 0x6b, 0xef, 0xa8, 0x2c, 0xbd, 0x39, 0x82, 0x6, 0x97, 0x13, 0xfc, 0x78, 0xe9, 0x6d, 0xd6, 0x52, 0xc3, 0x47, 0x4d, 0xc9, 0x58, 0xdc, 0x67, 0xe3, 0x72, 0xf6, 0x19, 0x9d, 0xc, 0x88, 0x33, 0xb7, 0x26, 0xa2, 0xe5, 0x61, 0xf0, 0x74, 0xcf, 0x4b, 0xda, 0x5e, 0xb1, 0x35, 0xa4, 0x20, 0x9b, 0x1f, 0x8e, 0xa, 0x9a, 0x1e, 0x8f, 0xb, 0xb0, 0x34, 0xa5, 0x21, 0xce, 0x4a, 0xdb, 0x5f, 0xe4, 0x60, 0xf1, 0x75, 0x32, 0xb6, 0x27, 0xa3, 0x18, 0x9c, 0xd, 0x89, 0x66, 0xe2, 0x73, 0xf7, 0x4c, 0xc8, 0x59, 0xdd, 0xd7, 0x53, 0xc2, 0x46, 0xfd, 0x79, 0xe8, 0x6c, 0x83, 0x7, 0x96, 0x12, 0xa9, 0x2d, 0xbc, 0x38, 0x7f, 0xfb, 0x6a, 0xee, 0x55, 0xd1, 0x40, 0xc4, 0x2b, 0xaf, 0x3e, 0xba, 0x1, 0x85, 0x14, 0x90, 0x29, 0xad, 0x3c, 0xb8, 0x3, 0x87, 0x16, 0x92, 0x7d, 0xf9, 0x68, 0xec, 0x57, 0xd3, 0x42, 0xc6, 0x81, 0x5, 0x94, 0x10, 0xab, 0x2f, 0xbe, 0x3a, 0xd5, 0x51, 0xc0, 0x44, 0xff, 0x7b, 0xea, 0x6e, 0x64, 0xe0, 0x71, 0xf5, 0x4e, 0xca, 0x5b, 0xdf, 0x30, 0xb4, 0x25, 0xa1, 0x1a, 0x9e, 0xf, 0x8b, 0xcc, 0x48, 0xd9, 0x5d, 0xe6, 0x62, 0xf3, 0x77, 0x98, 0x1c, 0x8d, 0x9, 0xb2, 0x36, 0xa7, 0x23, 0xb3, 0x37, 0xa6, 0x22, 0x99, 0x1d, 0x8c, 0x8, 0xe7, 0x63, 0xf2, 0x76, 0xcd, 0x49, 0xd8, 0x5c, 0x1b, 0x9f, 0xe, 0x8a, 0x31, 0xb5, 0x24, 0xa0, 0x4f, 0xcb, 0x5a, 0xde, 0x65, 0xe1, 0x70, 0xf4, 0xfe, 0x7a, 0xeb, 0x6f, 0xd4, 0x50, 0xc1, 0x45, 0xaa, 0x2e, 0xbf, 0x3b, 0x80, 0x4, 0x95, 0x11, 0x56, 0xd2, 0x43, 0xc7, 0x7c, 0xf8, 0x69, 0xed, 0x2, 0x86, 0x17, 0x93, 0x28, 0xac, 0x3d, 0xb9}, + {0x0, 0x85, 0x17, 0x92, 0x2e, 0xab, 0x39, 0xbc, 0x5c, 0xd9, 0x4b, 0xce, 0x72, 0xf7, 0x65, 0xe0, 0xb8, 0x3d, 0xaf, 0x2a, 0x96, 0x13, 0x81, 0x4, 0xe4, 0x61, 0xf3, 0x76, 0xca, 0x4f, 0xdd, 0x58, 0x6d, 0xe8, 0x7a, 0xff, 0x43, 0xc6, 0x54, 0xd1, 0x31, 0xb4, 0x26, 0xa3, 0x1f, 0x9a, 0x8, 0x8d, 0xd5, 0x50, 0xc2, 0x47, 0xfb, 0x7e, 0xec, 0x69, 0x89, 0xc, 0x9e, 0x1b, 0xa7, 0x22, 0xb0, 0x35, 0xda, 0x5f, 0xcd, 0x48, 0xf4, 0x71, 0xe3, 0x66, 0x86, 0x3, 0x91, 0x14, 0xa8, 0x2d, 0xbf, 0x3a, 0x62, 0xe7, 0x75, 0xf0, 0x4c, 0xc9, 0x5b, 0xde, 0x3e, 0xbb, 0x29, 0xac, 0x10, 0x95, 0x7, 0x82, 0xb7, 0x32, 0xa0, 0x25, 0x99, 0x1c, 0x8e, 0xb, 0xeb, 0x6e, 0xfc, 0x79, 0xc5, 0x40, 0xd2, 0x57, 0xf, 0x8a, 0x18, 0x9d, 0x21, 0xa4, 0x36, 0xb3, 0x53, 0xd6, 0x44, 0xc1, 0x7d, 0xf8, 0x6a, 0xef, 0xa9, 0x2c, 0xbe, 0x3b, 0x87, 0x2, 0x90, 0x15, 0xf5, 0x70, 0xe2, 0x67, 0xdb, 0x5e, 0xcc, 0x49, 0x11, 0x94, 0x6, 0x83, 0x3f, 0xba, 0x28, 0xad, 0x4d, 0xc8, 0x5a, 0xdf, 0x63, 0xe6, 0x74, 0xf1, 0xc4, 0x41, 0xd3, 0x56, 0xea, 0x6f, 0xfd, 0x78, 0x98, 0x1d, 0x8f, 0xa, 0xb6, 0x33, 0xa1, 0x24, 0x7c, 0xf9, 0x6b, 0xee, 0x52, 0xd7, 0x45, 0xc0, 0x20, 0xa5, 0x37, 0xb2, 0xe, 0x8b, 0x19, 0x9c, 0x73, 0xf6, 0x64, 0xe1, 0x5d, 0xd8, 0x4a, 0xcf, 0x2f, 0xaa, 0x38, 0xbd, 0x1, 0x84, 0x16, 0x93, 0xcb, 0x4e, 0xdc, 0x59, 0xe5, 0x60, 0xf2, 0x77, 0x97, 0x12, 0x80, 0x5, 0xb9, 0x3c, 0xae, 0x2b, 0x1e, 0x9b, 0x9, 0x8c, 0x30, 0xb5, 0x27, 0xa2, 0x42, 0xc7, 0x55, 0xd0, 0x6c, 0xe9, 0x7b, 0xfe, 0xa6, 0x23, 0xb1, 0x34, 0x88, 0xd, 0x9f, 0x1a, 0xfa, 0x7f, 0xed, 0x68, 0xd4, 0x51, 0xc3, 0x46}, + {0x0, 0x86, 0x11, 0x97, 0x22, 0xa4, 0x33, 0xb5, 0x44, 0xc2, 0x55, 0xd3, 0x66, 0xe0, 0x77, 0xf1, 0x88, 0xe, 0x99, 0x1f, 0xaa, 0x2c, 0xbb, 0x3d, 0xcc, 0x4a, 0xdd, 0x5b, 0xee, 0x68, 0xff, 0x79, 0xd, 0x8b, 0x1c, 0x9a, 0x2f, 0xa9, 0x3e, 0xb8, 0x49, 0xcf, 0x58, 0xde, 0x6b, 0xed, 0x7a, 0xfc, 0x85, 0x3, 0x94, 0x12, 0xa7, 0x21, 0xb6, 0x30, 0xc1, 0x47, 0xd0, 0x56, 0xe3, 0x65, 0xf2, 0x74, 0x1a, 0x9c, 0xb, 0x8d, 0x38, 0xbe, 0x29, 0xaf, 0x5e, 0xd8, 0x4f, 0xc9, 0x7c, 0xfa, 0x6d, 0xeb, 0x92, 0x14, 0x83, 0x5, 0xb0, 0x36, 0xa1, 0x27, 0xd6, 0x50, 0xc7, 0x41, 0xf4, 0x72, 0xe5, 0x63, 0x17, 0x91, 0x6, 0x80, 0x35, 0xb3, 0x24, 0xa2, 0x53, 0xd5, 0x42, 0xc4, 0x71, 0xf7, 0x60, 0xe6, 0x9f, 0x19, 0x8e, 0x8, 0xbd, 0x3b, 0xac, 0x2a, 0xdb, 0x5d, 0xca, 0x4c, 0xf9, 0x7f, 0xe8, 0x6e, 0x34, 0xb2, 0x25, 0xa3, 0x16, 0x90, 0x7, 0x81, 0x70, 0xf6, 0x61, 0xe7, 0x52, 0xd4, 0x43, 0xc5, 0xbc, 0x3a, 0xad, 0x2b, 0x9e, 0x18, 0x8f, 0x9, 0xf8, 0x7e, 0xe9, 0x6f, 0xda, 0x5c, 0xcb, 0x4d, 0x39, 0xbf, 0x28, 0xae, 0x1b, 0x9d, 0xa, 0x8c, 0x7d, 0xfb, 0x6c, 0xea, 0x5f, 0xd9, 0x4e, 0xc8, 0xb1, 0x37, 0xa0, 0x26, 0x93, 0x15, 0x82, 0x4, 0xf5, 0x73, 0xe4, 0x62, 0xd7, 0x51, 0xc6, 0x40, 0x2e, 0xa8, 0x3f, 0xb9, 0xc, 0x8a, 0x1d, 0x9b, 0x6a, 0xec, 0x7b, 0xfd, 0x48, 0xce, 0x59, 0xdf, 0xa6, 0x20, 0xb7, 0x31, 0x84, 0x2, 0x95, 0x13, 0xe2, 0x64, 0xf3, 0x75, 0xc0, 0x46, 0xd1, 0x57, 0x23, 0xa5, 0x32, 0xb4, 0x1, 0x87, 0x10, 0x96, 0x67, 0xe1, 0x76, 0xf0, 0x45, 0xc3, 0x54, 0xd2, 0xab, 0x2d, 0xba, 0x3c, 0x89, 0xf, 0x98, 0x1e, 0xef, 0x69, 0xfe, 0x78, 0xcd, 0x4b, 0xdc, 0x5a}, + {0x0, 0x87, 0x13, 0x94, 0x26, 0xa1, 0x35, 0xb2, 0x4c, 0xcb, 0x5f, 0xd8, 0x6a, 0xed, 0x79, 0xfe, 0x98, 0x1f, 0x8b, 0xc, 0xbe, 0x39, 0xad, 0x2a, 0xd4, 0x53, 0xc7, 0x40, 0xf2, 0x75, 0xe1, 0x66, 0x2d, 0xaa, 0x3e, 0xb9, 0xb, 0x8c, 0x18, 0x9f, 0x61, 0xe6, 0x72, 0xf5, 0x47, 0xc0, 0x54, 0xd3, 0xb5, 0x32, 0xa6, 0x21, 0x93, 0x14, 0x80, 0x7, 0xf9, 0x7e, 0xea, 0x6d, 0xdf, 0x58, 0xcc, 0x4b, 0x5a, 0xdd, 0x49, 0xce, 0x7c, 0xfb, 0x6f, 0xe8, 0x16, 0x91, 0x5, 0x82, 0x30, 0xb7, 0x23, 0xa4, 0xc2, 0x45, 0xd1, 0x56, 0xe4, 0x63, 0xf7, 0x70, 0x8e, 0x9, 0x9d, 0x1a, 0xa8, 0x2f, 0xbb, 0x3c, 0x77, 0xf0, 0x64, 0xe3, 0x51, 0xd6, 0x42, 0xc5, 0x3b, 0xbc, 0x28, 0xaf, 0x1d, 0x9a, 0xe, 0x89, 0xef, 0x68, 0xfc, 0x7b, 0xc9, 0x4e, 0xda, 0x5d, 0xa3, 0x24, 0xb0, 0x37, 0x85, 0x2, 0x96, 0x11, 0xb4, 0x33, 0xa7, 0x20, 0x92, 0x15, 0x81, 0x6, 0xf8, 0x7f, 0xeb, 0x6c, 0xde, 0x59, 0xcd, 0x4a, 0x2c, 0xab, 0x3f, 0xb8, 0xa, 0x8d, 0x19, 0x9e, 0x60, 0xe7, 0x73, 0xf4, 0x46, 0xc1, 0x55, 0xd2, 0x99, 0x1e, 0x8a, 0xd, 0xbf, 0x38, 0xac, 0x2b, 0xd5, 0x52, 0xc6, 0x41, 0xf3, 0x74, 0xe0, 0x67, 0x1, 0x86, 0x12, 0x95, 0x27, 0xa0, 0x34, 0xb3, 0x4d, 0xca, 0x5e, 0xd9, 0x6b, 0xec, 0x78, 0xff, 0xee, 0x69, 0xfd, 0x7a, 0xc8, 0x4f, 0xdb, 0x5c, 0xa2, 0x25, 0xb1, 0x36, 0x84, 0x3, 0x97, 0x10, 0x76, 0xf1, 0x65, 0xe2, 0x50, 0xd7, 0x43, 0xc4, 0x3a, 0xbd, 0x29, 0xae, 0x1c, 0x9b, 0xf, 0x88, 0xc3, 0x44, 0xd0, 0x57, 0xe5, 0x62, 0xf6, 0x71, 0x8f, 0x8, 0x9c, 0x1b, 0xa9, 0x2e, 0xba, 0x3d, 0x5b, 0xdc, 0x48, 0xcf, 0x7d, 0xfa, 0x6e, 0xe9, 0x17, 0x90, 0x4, 0x83, 0x31, 0xb6, 0x22, 0xa5}, + {0x0, 0x88, 0xd, 0x85, 0x1a, 0x92, 0x17, 0x9f, 0x34, 0xbc, 0x39, 0xb1, 0x2e, 0xa6, 0x23, 0xab, 0x68, 0xe0, 0x65, 0xed, 0x72, 0xfa, 0x7f, 0xf7, 0x5c, 0xd4, 0x51, 0xd9, 0x46, 0xce, 0x4b, 0xc3, 0xd0, 0x58, 0xdd, 0x55, 0xca, 0x42, 0xc7, 0x4f, 0xe4, 0x6c, 0xe9, 0x61, 0xfe, 0x76, 0xf3, 0x7b, 0xb8, 0x30, 0xb5, 0x3d, 0xa2, 0x2a, 0xaf, 0x27, 0x8c, 0x4, 0x81, 0x9, 0x96, 0x1e, 0x9b, 0x13, 0xbd, 0x35, 0xb0, 0x38, 0xa7, 0x2f, 0xaa, 0x22, 0x89, 0x1, 0x84, 0xc, 0x93, 0x1b, 0x9e, 0x16, 0xd5, 0x5d, 0xd8, 0x50, 0xcf, 0x47, 0xc2, 0x4a, 0xe1, 0x69, 0xec, 0x64, 0xfb, 0x73, 0xf6, 0x7e, 0x6d, 0xe5, 0x60, 0xe8, 0x77, 0xff, 0x7a, 0xf2, 0x59, 0xd1, 0x54, 0xdc, 0x43, 0xcb, 0x4e, 0xc6, 0x5, 0x8d, 0x8, 0x80, 0x1f, 0x97, 0x12, 0x9a, 0x31, 0xb9, 0x3c, 0xb4, 0x2b, 0xa3, 0x26, 0xae, 0x67, 0xef, 0x6a, 0xe2, 0x7d, 0xf5, 0x70, 0xf8, 0x53, 0xdb, 0x5e, 0xd6, 0x49, 0xc1, 0x44, 0xcc, 0xf, 0x87, 0x2, 0x8a, 0x15, 0x9d, 0x18, 0x90, 0x3b, 0xb3, 0x36, 0xbe, 0x21, 0xa9, 0x2c, 0xa4, 0xb7, 0x3f, 0xba, 0x32, 0xad, 0x25, 0xa0, 0x28, 0x83, 0xb, 0x8e, 0x6, 0x99, 0x11, 0x94, 0x1c, 0xdf, 0x57, 0xd2, 0x5a, 0xc5, 0x4d, 0xc8, 0x40, 0xeb, 0x63, 0xe6, 0x6e, 0xf1, 0x79, 0xfc, 0x74, 0xda, 0x52, 0xd7, 0x5f, 0xc0, 0x48, 0xcd, 0x45, 0xee, 0x66, 0xe3, 0x6b, 0xf4, 0x7c, 0xf9, 0x71, 0xb2, 0x3a, 0xbf, 0x37, 0xa8, 0x20, 0xa5, 0x2d, 0x86, 0xe, 0x8b, 0x3, 0x9c, 0x14, 0x91, 0x19, 0xa, 0x82, 0x7, 0x8f, 0x10, 0x98, 0x1d, 0x95, 0x3e, 0xb6, 0x33, 0xbb, 0x24, 0xac, 0x29, 0xa1, 0x62, 0xea, 0x6f, 0xe7, 0x78, 0xf0, 0x75, 0xfd, 0x56, 0xde, 0x5b, 0xd3, 0x4c, 0xc4, 0x41, 0xc9}, + {0x0, 0x89, 0xf, 0x86, 0x1e, 0x97, 0x11, 0x98, 0x3c, 0xb5, 0x33, 0xba, 0x22, 0xab, 0x2d, 0xa4, 0x78, 0xf1, 0x77, 0xfe, 0x66, 0xef, 0x69, 0xe0, 0x44, 0xcd, 0x4b, 0xc2, 0x5a, 0xd3, 0x55, 0xdc, 0xf0, 0x79, 0xff, 0x76, 0xee, 0x67, 0xe1, 0x68, 0xcc, 0x45, 0xc3, 0x4a, 0xd2, 0x5b, 0xdd, 0x54, 0x88, 0x1, 0x87, 0xe, 0x96, 0x1f, 0x99, 0x10, 0xb4, 0x3d, 0xbb, 0x32, 0xaa, 0x23, 0xa5, 0x2c, 0xfd, 0x74, 0xf2, 0x7b, 0xe3, 0x6a, 0xec, 0x65, 0xc1, 0x48, 0xce, 0x47, 0xdf, 0x56, 0xd0, 0x59, 0x85, 0xc, 0x8a, 0x3, 0x9b, 0x12, 0x94, 0x1d, 0xb9, 0x30, 0xb6, 0x3f, 0xa7, 0x2e, 0xa8, 0x21, 0xd, 0x84, 0x2, 0x8b, 0x13, 0x9a, 0x1c, 0x95, 0x31, 0xb8, 0x3e, 0xb7, 0x2f, 0xa6, 0x20, 0xa9, 0x75, 0xfc, 0x7a, 0xf3, 0x6b, 0xe2, 0x64, 0xed, 0x49, 0xc0, 0x46, 0xcf, 0x57, 0xde, 0x58, 0xd1, 0xe7, 0x6e, 0xe8, 0x61, 0xf9, 0x70, 0xf6, 0x7f, 0xdb, 0x52, 0xd4, 0x5d, 0xc5, 0x4c, 0xca, 0x43, 0x9f, 0x16, 0x90, 0x19, 0x81, 0x8, 0x8e, 0x7, 0xa3, 0x2a, 0xac, 0x25, 0xbd, 0x34, 0xb2, 0x3b, 0x17, 0x9e, 0x18, 0x91, 0x9, 0x80, 0x6, 0x8f, 0x2b, 0xa2, 0x24, 0xad, 0x35, 0xbc, 0x3a, 0xb3, 0x6f, 0xe6, 0x60, 0xe9, 0x71, 0xf8, 0x7e, 0xf7, 0x53, 0xda, 0x5c, 0xd5, 0x4d, 0xc4, 0x42, 0xcb, 0x1a, 0x93, 0x15, 0x9c, 0x4, 0x8d, 0xb, 0x82, 0x26, 0xaf, 0x29, 0xa0, 0x38, 0xb1, 0x37, 0xbe, 0x62, 0xeb, 0x6d, 0xe4, 0x7c, 0xf5, 0x73, 0xfa, 0x5e, 0xd7, 0x51, 0xd8, 0x40, 0xc9, 0x4f, 0xc6, 0xea, 0x63, 0xe5, 0x6c, 0xf4, 0x7d, 0xfb, 0x72, 0xd6, 0x5f, 0xd9, 0x50, 0xc8, 0x41, 0xc7, 0x4e, 0x92, 0x1b, 0x9d, 0x14, 0x8c, 0x5, 0x83, 0xa, 0xae, 0x27, 0xa1, 0x28, 0xb0, 0x39, 0xbf, 0x36}, + {0x0, 0x8a, 0x9, 0x83, 0x12, 0x98, 0x1b, 0x91, 0x24, 0xae, 0x2d, 0xa7, 0x36, 0xbc, 0x3f, 0xb5, 0x48, 0xc2, 0x41, 0xcb, 0x5a, 0xd0, 0x53, 0xd9, 0x6c, 0xe6, 0x65, 0xef, 0x7e, 0xf4, 0x77, 0xfd, 0x90, 0x1a, 0x99, 0x13, 0x82, 0x8, 0x8b, 0x1, 0xb4, 0x3e, 0xbd, 0x37, 0xa6, 0x2c, 0xaf, 0x25, 0xd8, 0x52, 0xd1, 0x5b, 0xca, 0x40, 0xc3, 0x49, 0xfc, 0x76, 0xf5, 0x7f, 0xee, 0x64, 0xe7, 0x6d, 0x3d, 0xb7, 0x34, 0xbe, 0x2f, 0xa5, 0x26, 0xac, 0x19, 0x93, 0x10, 0x9a, 0xb, 0x81, 0x2, 0x88, 0x75, 0xff, 0x7c, 0xf6, 0x67, 0xed, 0x6e, 0xe4, 0x51, 0xdb, 0x58, 0xd2, 0x43, 0xc9, 0x4a, 0xc0, 0xad, 0x27, 0xa4, 0x2e, 0xbf, 0x35, 0xb6, 0x3c, 0x89, 0x3, 0x80, 0xa, 0x9b, 0x11, 0x92, 0x18, 0xe5, 0x6f, 0xec, 0x66, 0xf7, 0x7d, 0xfe, 0x74, 0xc1, 0x4b, 0xc8, 0x42, 0xd3, 0x59, 0xda, 0x50, 0x7a, 0xf0, 0x73, 0xf9, 0x68, 0xe2, 0x61, 0xeb, 0x5e, 0xd4, 0x57, 0xdd, 0x4c, 0xc6, 0x45, 0xcf, 0x32, 0xb8, 0x3b, 0xb1, 0x20, 0xaa, 0x29, 0xa3, 0x16, 0x9c, 0x1f, 0x95, 0x4, 0x8e, 0xd, 0x87, 0xea, 0x60, 0xe3, 0x69, 0xf8, 0x72, 0xf1, 0x7b, 0xce, 0x44, 0xc7, 0x4d, 0xdc, 0x56, 0xd5, 0x5f, 0xa2, 0x28, 0xab, 0x21, 0xb0, 0x3a, 0xb9, 0x33, 0x86, 0xc, 0x8f, 0x5, 0x94, 0x1e, 0x9d, 0x17, 0x47, 0xcd, 0x4e, 0xc4, 0x55, 0xdf, 0x5c, 0xd6, 0x63, 0xe9, 0x6a, 0xe0, 0x71, 0xfb, 0x78, 0xf2, 0xf, 0x85, 0x6, 0x8c, 0x1d, 0x97, 0x14, 0x9e, 0x2b, 0xa1, 0x22, 0xa8, 0x39, 0xb3, 0x30, 0xba, 0xd7, 0x5d, 0xde, 0x54, 0xc5, 0x4f, 0xcc, 0x46, 0xf3, 0x79, 0xfa, 0x70, 0xe1, 0x6b, 0xe8, 0x62, 0x9f, 0x15, 0x96, 0x1c, 0x8d, 0x7, 0x84, 0xe, 0xbb, 0x31, 0xb2, 0x38, 0xa9, 0x23, 0xa0, 0x2a}, + {0x0, 0x8b, 0xb, 0x80, 0x16, 0x9d, 0x1d, 0x96, 0x2c, 0xa7, 0x27, 0xac, 0x3a, 0xb1, 0x31, 0xba, 0x58, 0xd3, 0x53, 0xd8, 0x4e, 0xc5, 0x45, 0xce, 0x74, 0xff, 0x7f, 0xf4, 0x62, 0xe9, 0x69, 0xe2, 0xb0, 0x3b, 0xbb, 0x30, 0xa6, 0x2d, 0xad, 0x26, 0x9c, 0x17, 0x97, 0x1c, 0x8a, 0x1, 0x81, 0xa, 0xe8, 0x63, 0xe3, 0x68, 0xfe, 0x75, 0xf5, 0x7e, 0xc4, 0x4f, 0xcf, 0x44, 0xd2, 0x59, 0xd9, 0x52, 0x7d, 0xf6, 0x76, 0xfd, 0x6b, 0xe0, 0x60, 0xeb, 0x51, 0xda, 0x5a, 0xd1, 0x47, 0xcc, 0x4c, 0xc7, 0x25, 0xae, 0x2e, 0xa5, 0x33, 0xb8, 0x38, 0xb3, 0x9, 0x82, 0x2, 0x89, 0x1f, 0x94, 0x14, 0x9f, 0xcd, 0x46, 0xc6, 0x4d, 0xdb, 0x50, 0xd0, 0x5b, 0xe1, 0x6a, 0xea, 0x61, 0xf7, 0x7c, 0xfc, 0x77, 0x95, 0x1e, 0x9e, 0x15, 0x83, 0x8, 0x88, 0x3, 0xb9, 0x32, 0xb2, 0x39, 0xaf, 0x24, 0xa4, 0x2f, 0xfa, 0x71, 0xf1, 0x7a, 0xec, 0x67, 0xe7, 0x6c, 0xd6, 0x5d, 0xdd, 0x56, 0xc0, 0x4b, 0xcb, 0x40, 0xa2, 0x29, 0xa9, 0x22, 0xb4, 0x3f, 0xbf, 0x34, 0x8e, 0x5, 0x85, 0xe, 0x98, 0x13, 0x93, 0x18, 0x4a, 0xc1, 0x41, 0xca, 0x5c, 0xd7, 0x57, 0xdc, 0x66, 0xed, 0x6d, 0xe6, 0x70, 0xfb, 0x7b, 0xf0, 0x12, 0x99, 0x19, 0x92, 0x4, 0x8f, 0xf, 0x84, 0x3e, 0xb5, 0x35, 0xbe, 0x28, 0xa3, 0x23, 0xa8, 0x87, 0xc, 0x8c, 0x7, 0x91, 0x1a, 0x9a, 0x11, 0xab, 0x20, 0xa0, 0x2b, 0xbd, 0x36, 0xb6, 0x3d, 0xdf, 0x54, 0xd4, 0x5f, 0xc9, 0x42, 0xc2, 0x49, 0xf3, 0x78, 0xf8, 0x73, 0xe5, 0x6e, 0xee, 0x65, 0x37, 0xbc, 0x3c, 0xb7, 0x21, 0xaa, 0x2a, 0xa1, 0x1b, 0x90, 0x10, 0x9b, 0xd, 0x86, 0x6, 0x8d, 0x6f, 0xe4, 0x64, 0xef, 0x79, 0xf2, 0x72, 0xf9, 0x43, 0xc8, 0x48, 0xc3, 0x55, 0xde, 0x5e, 0xd5}, + {0x0, 0x8c, 0x5, 0x89, 0xa, 0x86, 0xf, 0x83, 0x14, 0x98, 0x11, 0x9d, 0x1e, 0x92, 0x1b, 0x97, 0x28, 0xa4, 0x2d, 0xa1, 0x22, 0xae, 0x27, 0xab, 0x3c, 0xb0, 0x39, 0xb5, 0x36, 0xba, 0x33, 0xbf, 0x50, 0xdc, 0x55, 0xd9, 0x5a, 0xd6, 0x5f, 0xd3, 0x44, 0xc8, 0x41, 0xcd, 0x4e, 0xc2, 0x4b, 0xc7, 0x78, 0xf4, 0x7d, 0xf1, 0x72, 0xfe, 0x77, 0xfb, 0x6c, 0xe0, 0x69, 0xe5, 0x66, 0xea, 0x63, 0xef, 0xa0, 0x2c, 0xa5, 0x29, 0xaa, 0x26, 0xaf, 0x23, 0xb4, 0x38, 0xb1, 0x3d, 0xbe, 0x32, 0xbb, 0x37, 0x88, 0x4, 0x8d, 0x1, 0x82, 0xe, 0x87, 0xb, 0x9c, 0x10, 0x99, 0x15, 0x96, 0x1a, 0x93, 0x1f, 0xf0, 0x7c, 0xf5, 0x79, 0xfa, 0x76, 0xff, 0x73, 0xe4, 0x68, 0xe1, 0x6d, 0xee, 0x62, 0xeb, 0x67, 0xd8, 0x54, 0xdd, 0x51, 0xd2, 0x5e, 0xd7, 0x5b, 0xcc, 0x40, 0xc9, 0x45, 0xc6, 0x4a, 0xc3, 0x4f, 0x5d, 0xd1, 0x58, 0xd4, 0x57, 0xdb, 0x52, 0xde, 0x49, 0xc5, 0x4c, 0xc0, 0x43, 0xcf, 0x46, 0xca, 0x75, 0xf9, 0x70, 0xfc, 0x7f, 0xf3, 0x7a, 0xf6, 0x61, 0xed, 0x64, 0xe8, 0x6b, 0xe7, 0x6e, 0xe2, 0xd, 0x81, 0x8, 0x84, 0x7, 0x8b, 0x2, 0x8e, 0x19, 0x95, 0x1c, 0x90, 0x13, 0x9f, 0x16, 0x9a, 0x25, 0xa9, 0x20, 0xac, 0x2f, 0xa3, 0x2a, 0xa6, 0x31, 0xbd, 0x34, 0xb8, 0x3b, 0xb7, 0x3e, 0xb2, 0xfd, 0x71, 0xf8, 0x74, 0xf7, 0x7b, 0xf2, 0x7e, 0xe9, 0x65, 0xec, 0x60, 0xe3, 0x6f, 0xe6, 0x6a, 0xd5, 0x59, 0xd0, 0x5c, 0xdf, 0x53, 0xda, 0x56, 0xc1, 0x4d, 0xc4, 0x48, 0xcb, 0x47, 0xce, 0x42, 0xad, 0x21, 0xa8, 0x24, 0xa7, 0x2b, 0xa2, 0x2e, 0xb9, 0x35, 0xbc, 0x30, 0xb3, 0x3f, 0xb6, 0x3a, 0x85, 0x9, 0x80, 0xc, 0x8f, 0x3, 0x8a, 0x6, 0x91, 0x1d, 0x94, 0x18, 0x9b, 0x17, 0x9e, 0x12}, + {0x0, 0x8d, 0x7, 0x8a, 0xe, 0x83, 0x9, 0x84, 0x1c, 0x91, 0x1b, 0x96, 0x12, 0x9f, 0x15, 0x98, 0x38, 0xb5, 0x3f, 0xb2, 0x36, 0xbb, 0x31, 0xbc, 0x24, 0xa9, 0x23, 0xae, 0x2a, 0xa7, 0x2d, 0xa0, 0x70, 0xfd, 0x77, 0xfa, 0x7e, 0xf3, 0x79, 0xf4, 0x6c, 0xe1, 0x6b, 0xe6, 0x62, 0xef, 0x65, 0xe8, 0x48, 0xc5, 0x4f, 0xc2, 0x46, 0xcb, 0x41, 0xcc, 0x54, 0xd9, 0x53, 0xde, 0x5a, 0xd7, 0x5d, 0xd0, 0xe0, 0x6d, 0xe7, 0x6a, 0xee, 0x63, 0xe9, 0x64, 0xfc, 0x71, 0xfb, 0x76, 0xf2, 0x7f, 0xf5, 0x78, 0xd8, 0x55, 0xdf, 0x52, 0xd6, 0x5b, 0xd1, 0x5c, 0xc4, 0x49, 0xc3, 0x4e, 0xca, 0x47, 0xcd, 0x40, 0x90, 0x1d, 0x97, 0x1a, 0x9e, 0x13, 0x99, 0x14, 0x8c, 0x1, 0x8b, 0x6, 0x82, 0xf, 0x85, 0x8, 0xa8, 0x25, 0xaf, 0x22, 0xa6, 0x2b, 0xa1, 0x2c, 0xb4, 0x39, 0xb3, 0x3e, 0xba, 0x37, 0xbd, 0x30, 0xdd, 0x50, 0xda, 0x57, 0xd3, 0x5e, 0xd4, 0x59, 0xc1, 0x4c, 0xc6, 0x4b, 0xcf, 0x42, 0xc8, 0x45, 0xe5, 0x68, 0xe2, 0x6f, 0xeb, 0x66, 0xec, 0x61, 0xf9, 0x74, 0xfe, 0x73, 0xf7, 0x7a, 0xf0, 0x7d, 0xad, 0x20, 0xaa, 0x27, 0xa3, 0x2e, 0xa4, 0x29, 0xb1, 0x3c, 0xb6, 0x3b, 0xbf, 0x32, 0xb8, 0x35, 0x95, 0x18, 0x92, 0x1f, 0x9b, 0x16, 0x9c, 0x11, 0x89, 0x4, 0x8e, 0x3, 0x87, 0xa, 0x80, 0xd, 0x3d, 0xb0, 0x3a, 0xb7, 0x33, 0xbe, 0x34, 0xb9, 0x21, 0xac, 0x26, 0xab, 0x2f, 0xa2, 0x28, 0xa5, 0x5, 0x88, 0x2, 0x8f, 0xb, 0x86, 0xc, 0x81, 0x19, 0x94, 0x1e, 0x93, 0x17, 0x9a, 0x10, 0x9d, 0x4d, 0xc0, 0x4a, 0xc7, 0x43, 0xce, 0x44, 0xc9, 0x51, 0xdc, 0x56, 0xdb, 0x5f, 0xd2, 0x58, 0xd5, 0x75, 0xf8, 0x72, 0xff, 0x7b, 0xf6, 0x7c, 0xf1, 0x69, 0xe4, 0x6e, 0xe3, 0x67, 0xea, 0x60, 0xed}, + {0x0, 0x8e, 0x1, 0x8f, 0x2, 0x8c, 0x3, 0x8d, 0x4, 0x8a, 0x5, 0x8b, 0x6, 0x88, 0x7, 0x89, 0x8, 0x86, 0x9, 0x87, 0xa, 0x84, 0xb, 0x85, 0xc, 0x82, 0xd, 0x83, 0xe, 0x80, 0xf, 0x81, 0x10, 0x9e, 0x11, 0x9f, 0x12, 0x9c, 0x13, 0x9d, 0x14, 0x9a, 0x15, 0x9b, 0x16, 0x98, 0x17, 0x99, 0x18, 0x96, 0x19, 0x97, 0x1a, 0x94, 0x1b, 0x95, 0x1c, 0x92, 0x1d, 0x93, 0x1e, 0x90, 0x1f, 0x91, 0x20, 0xae, 0x21, 0xaf, 0x22, 0xac, 0x23, 0xad, 0x24, 0xaa, 0x25, 0xab, 0x26, 0xa8, 0x27, 0xa9, 0x28, 0xa6, 0x29, 0xa7, 0x2a, 0xa4, 0x2b, 0xa5, 0x2c, 0xa2, 0x2d, 0xa3, 0x2e, 0xa0, 0x2f, 0xa1, 0x30, 0xbe, 0x31, 0xbf, 0x32, 0xbc, 0x33, 0xbd, 0x34, 0xba, 0x35, 0xbb, 0x36, 0xb8, 0x37, 0xb9, 0x38, 0xb6, 0x39, 0xb7, 0x3a, 0xb4, 0x3b, 0xb5, 0x3c, 0xb2, 0x3d, 0xb3, 0x3e, 0xb0, 0x3f, 0xb1, 0x40, 0xce, 0x41, 0xcf, 0x42, 0xcc, 0x43, 0xcd, 0x44, 0xca, 0x45, 0xcb, 0x46, 0xc8, 0x47, 0xc9, 0x48, 0xc6, 0x49, 0xc7, 0x4a, 0xc4, 0x4b, 0xc5, 0x4c, 0xc2, 0x4d, 0xc3, 0x4e, 0xc0, 0x4f, 0xc1, 0x50, 0xde, 0x51, 0xdf, 0x52, 0xdc, 0x53, 0xdd, 0x54, 0xda, 0x55, 0xdb, 0x56, 0xd8, 0x57, 0xd9, 0x58, 0xd6, 0x59, 0xd7, 0x5a, 0xd4, 0x5b, 0xd5, 0x5c, 0xd2, 0x5d, 0xd3, 0x5e, 0xd0, 0x5f, 0xd1, 0x60, 0xee, 0x61, 0xef, 0x62, 0xec, 0x63, 0xed, 0x64, 0xea, 0x65, 0xeb, 0x66, 0xe8, 0x67, 0xe9, 0x68, 0xe6, 0x69, 0xe7, 0x6a, 0xe4, 0x6b, 0xe5, 0x6c, 0xe2, 0x6d, 0xe3, 0x6e, 0xe0, 0x6f, 0xe1, 0x70, 0xfe, 0x71, 0xff, 0x72, 0xfc, 0x73, 0xfd, 0x74, 0xfa, 0x75, 0xfb, 0x76, 0xf8, 0x77, 0xf9, 0x78, 0xf6, 0x79, 0xf7, 0x7a, 0xf4, 0x7b, 0xf5, 0x7c, 0xf2, 0x7d, 0xf3, 0x7e, 0xf0, 0x7f, 0xf1}, + {0x0, 0x8f, 0x3, 0x8c, 0x6, 0x89, 0x5, 0x8a, 0xc, 0x83, 0xf, 0x80, 0xa, 0x85, 0x9, 0x86, 0x18, 0x97, 0x1b, 0x94, 0x1e, 0x91, 0x1d, 0x92, 0x14, 0x9b, 0x17, 0x98, 0x12, 0x9d, 0x11, 0x9e, 0x30, 0xbf, 0x33, 0xbc, 0x36, 0xb9, 0x35, 0xba, 0x3c, 0xb3, 0x3f, 0xb0, 0x3a, 0xb5, 0x39, 0xb6, 0x28, 0xa7, 0x2b, 0xa4, 0x2e, 0xa1, 0x2d, 0xa2, 0x24, 0xab, 0x27, 0xa8, 0x22, 0xad, 0x21, 0xae, 0x60, 0xef, 0x63, 0xec, 0x66, 0xe9, 0x65, 0xea, 0x6c, 0xe3, 0x6f, 0xe0, 0x6a, 0xe5, 0x69, 0xe6, 0x78, 0xf7, 0x7b, 0xf4, 0x7e, 0xf1, 0x7d, 0xf2, 0x74, 0xfb, 0x77, 0xf8, 0x72, 0xfd, 0x71, 0xfe, 0x50, 0xdf, 0x53, 0xdc, 0x56, 0xd9, 0x55, 0xda, 0x5c, 0xd3, 0x5f, 0xd0, 0x5a, 0xd5, 0x59, 0xd6, 0x48, 0xc7, 0x4b, 0xc4, 0x4e, 0xc1, 0x4d, 0xc2, 0x44, 0xcb, 0x47, 0xc8, 0x42, 0xcd, 0x41, 0xce, 0xc0, 0x4f, 0xc3, 0x4c, 0xc6, 0x49, 0xc5, 0x4a, 0xcc, 0x43, 0xcf, 0x40, 0xca, 0x45, 0xc9, 0x46, 0xd8, 0x57, 0xdb, 0x54, 0xde, 0x51, 0xdd, 0x52, 0xd4, 0x5b, 0xd7, 0x58, 0xd2, 0x5d, 0xd1, 0x5e, 0xf0, 0x7f, 0xf3, 0x7c, 0xf6, 0x79, 0xf5, 0x7a, 0xfc, 0x73, 0xff, 0x70, 0xfa, 0x75, 0xf9, 0x76, 0xe8, 0x67, 0xeb, 0x64, 0xee, 0x61, 0xed, 0x62, 0xe4, 0x6b, 0xe7, 0x68, 0xe2, 0x6d, 0xe1, 0x6e, 0xa0, 0x2f, 0xa3, 0x2c, 0xa6, 0x29, 0xa5, 0x2a, 0xac, 0x23, 0xaf, 0x20, 0xaa, 0x25, 0xa9, 0x26, 0xb8, 0x37, 0xbb, 0x34, 0xbe, 0x31, 0xbd, 0x32, 0xb4, 0x3b, 0xb7, 0x38, 0xb2, 0x3d, 0xb1, 0x3e, 0x90, 0x1f, 0x93, 0x1c, 0x96, 0x19, 0x95, 0x1a, 0x9c, 0x13, 0x9f, 0x10, 0x9a, 0x15, 0x99, 0x16, 0x88, 0x7, 0x8b, 0x4, 0x8e, 0x1, 0x8d, 0x2, 0x84, 0xb, 0x87, 0x8, 0x82, 0xd, 0x81, 0xe}, + {0x0, 0x90, 0x3d, 0xad, 0x7a, 0xea, 0x47, 0xd7, 0xf4, 0x64, 0xc9, 0x59, 0x8e, 0x1e, 0xb3, 0x23, 0xf5, 0x65, 0xc8, 0x58, 0x8f, 0x1f, 0xb2, 0x22, 0x1, 0x91, 0x3c, 0xac, 0x7b, 0xeb, 0x46, 0xd6, 0xf7, 0x67, 0xca, 0x5a, 0x8d, 0x1d, 0xb0, 0x20, 0x3, 0x93, 0x3e, 0xae, 0x79, 0xe9, 0x44, 0xd4, 0x2, 0x92, 0x3f, 0xaf, 0x78, 0xe8, 0x45, 0xd5, 0xf6, 0x66, 0xcb, 0x5b, 0x8c, 0x1c, 0xb1, 0x21, 0xf3, 0x63, 0xce, 0x5e, 0x89, 0x19, 0xb4, 0x24, 0x7, 0x97, 0x3a, 0xaa, 0x7d, 0xed, 0x40, 0xd0, 0x6, 0x96, 0x3b, 0xab, 0x7c, 0xec, 0x41, 0xd1, 0xf2, 0x62, 0xcf, 0x5f, 0x88, 0x18, 0xb5, 0x25, 0x4, 0x94, 0x39, 0xa9, 0x7e, 0xee, 0x43, 0xd3, 0xf0, 0x60, 0xcd, 0x5d, 0x8a, 0x1a, 0xb7, 0x27, 0xf1, 0x61, 0xcc, 0x5c, 0x8b, 0x1b, 0xb6, 0x26, 0x5, 0x95, 0x38, 0xa8, 0x7f, 0xef, 0x42, 0xd2, 0xfb, 0x6b, 0xc6, 0x56, 0x81, 0x11, 0xbc, 0x2c, 0xf, 0x9f, 0x32, 0xa2, 0x75, 0xe5, 0x48, 0xd8, 0xe, 0x9e, 0x33, 0xa3, 0x74, 0xe4, 0x49, 0xd9, 0xfa, 0x6a, 0xc7, 0x57, 0x80, 0x10, 0xbd, 0x2d, 0xc, 0x9c, 0x31, 0xa1, 0x76, 0xe6, 0x4b, 0xdb, 0xf8, 0x68, 0xc5, 0x55, 0x82, 0x12, 0xbf, 0x2f, 0xf9, 0x69, 0xc4, 0x54, 0x83, 0x13, 0xbe, 0x2e, 0xd, 0x9d, 0x30, 0xa0, 0x77, 0xe7, 0x4a, 0xda, 0x8, 0x98, 0x35, 0xa5, 0x72, 0xe2, 0x4f, 0xdf, 0xfc, 0x6c, 0xc1, 0x51, 0x86, 0x16, 0xbb, 0x2b, 0xfd, 0x6d, 0xc0, 0x50, 0x87, 0x17, 0xba, 0x2a, 0x9, 0x99, 0x34, 0xa4, 0x73, 0xe3, 0x4e, 0xde, 0xff, 0x6f, 0xc2, 0x52, 0x85, 0x15, 0xb8, 0x28, 0xb, 0x9b, 0x36, 0xa6, 0x71, 0xe1, 0x4c, 0xdc, 0xa, 0x9a, 0x37, 0xa7, 0x70, 0xe0, 0x4d, 0xdd, 0xfe, 0x6e, 0xc3, 0x53, 0x84, 0x14, 0xb9, 0x29}, + {0x0, 0x91, 0x3f, 0xae, 0x7e, 0xef, 0x41, 0xd0, 0xfc, 0x6d, 0xc3, 0x52, 0x82, 0x13, 0xbd, 0x2c, 0xe5, 0x74, 0xda, 0x4b, 0x9b, 0xa, 0xa4, 0x35, 0x19, 0x88, 0x26, 0xb7, 0x67, 0xf6, 0x58, 0xc9, 0xd7, 0x46, 0xe8, 0x79, 0xa9, 0x38, 0x96, 0x7, 0x2b, 0xba, 0x14, 0x85, 0x55, 0xc4, 0x6a, 0xfb, 0x32, 0xa3, 0xd, 0x9c, 0x4c, 0xdd, 0x73, 0xe2, 0xce, 0x5f, 0xf1, 0x60, 0xb0, 0x21, 0x8f, 0x1e, 0xb3, 0x22, 0x8c, 0x1d, 0xcd, 0x5c, 0xf2, 0x63, 0x4f, 0xde, 0x70, 0xe1, 0x31, 0xa0, 0xe, 0x9f, 0x56, 0xc7, 0x69, 0xf8, 0x28, 0xb9, 0x17, 0x86, 0xaa, 0x3b, 0x95, 0x4, 0xd4, 0x45, 0xeb, 0x7a, 0x64, 0xf5, 0x5b, 0xca, 0x1a, 0x8b, 0x25, 0xb4, 0x98, 0x9, 0xa7, 0x36, 0xe6, 0x77, 0xd9, 0x48, 0x81, 0x10, 0xbe, 0x2f, 0xff, 0x6e, 0xc0, 0x51, 0x7d, 0xec, 0x42, 0xd3, 0x3, 0x92, 0x3c, 0xad, 0x7b, 0xea, 0x44, 0xd5, 0x5, 0x94, 0x3a, 0xab, 0x87, 0x16, 0xb8, 0x29, 0xf9, 0x68, 0xc6, 0x57, 0x9e, 0xf, 0xa1, 0x30, 0xe0, 0x71, 0xdf, 0x4e, 0x62, 0xf3, 0x5d, 0xcc, 0x1c, 0x8d, 0x23, 0xb2, 0xac, 0x3d, 0x93, 0x2, 0xd2, 0x43, 0xed, 0x7c, 0x50, 0xc1, 0x6f, 0xfe, 0x2e, 0xbf, 0x11, 0x80, 0x49, 0xd8, 0x76, 0xe7, 0x37, 0xa6, 0x8, 0x99, 0xb5, 0x24, 0x8a, 0x1b, 0xcb, 0x5a, 0xf4, 0x65, 0xc8, 0x59, 0xf7, 0x66, 0xb6, 0x27, 0x89, 0x18, 0x34, 0xa5, 0xb, 0x9a, 0x4a, 0xdb, 0x75, 0xe4, 0x2d, 0xbc, 0x12, 0x83, 0x53, 0xc2, 0x6c, 0xfd, 0xd1, 0x40, 0xee, 0x7f, 0xaf, 0x3e, 0x90, 0x1, 0x1f, 0x8e, 0x20, 0xb1, 0x61, 0xf0, 0x5e, 0xcf, 0xe3, 0x72, 0xdc, 0x4d, 0x9d, 0xc, 0xa2, 0x33, 0xfa, 0x6b, 0xc5, 0x54, 0x84, 0x15, 0xbb, 0x2a, 0x6, 0x97, 0x39, 0xa8, 0x78, 0xe9, 0x47, 0xd6}, + {0x0, 0x92, 0x39, 0xab, 0x72, 0xe0, 0x4b, 0xd9, 0xe4, 0x76, 0xdd, 0x4f, 0x96, 0x4, 0xaf, 0x3d, 0xd5, 0x47, 0xec, 0x7e, 0xa7, 0x35, 0x9e, 0xc, 0x31, 0xa3, 0x8, 0x9a, 0x43, 0xd1, 0x7a, 0xe8, 0xb7, 0x25, 0x8e, 0x1c, 0xc5, 0x57, 0xfc, 0x6e, 0x53, 0xc1, 0x6a, 0xf8, 0x21, 0xb3, 0x18, 0x8a, 0x62, 0xf0, 0x5b, 0xc9, 0x10, 0x82, 0x29, 0xbb, 0x86, 0x14, 0xbf, 0x2d, 0xf4, 0x66, 0xcd, 0x5f, 0x73, 0xe1, 0x4a, 0xd8, 0x1, 0x93, 0x38, 0xaa, 0x97, 0x5, 0xae, 0x3c, 0xe5, 0x77, 0xdc, 0x4e, 0xa6, 0x34, 0x9f, 0xd, 0xd4, 0x46, 0xed, 0x7f, 0x42, 0xd0, 0x7b, 0xe9, 0x30, 0xa2, 0x9, 0x9b, 0xc4, 0x56, 0xfd, 0x6f, 0xb6, 0x24, 0x8f, 0x1d, 0x20, 0xb2, 0x19, 0x8b, 0x52, 0xc0, 0x6b, 0xf9, 0x11, 0x83, 0x28, 0xba, 0x63, 0xf1, 0x5a, 0xc8, 0xf5, 0x67, 0xcc, 0x5e, 0x87, 0x15, 0xbe, 0x2c, 0xe6, 0x74, 0xdf, 0x4d, 0x94, 0x6, 0xad, 0x3f, 0x2, 0x90, 0x3b, 0xa9, 0x70, 0xe2, 0x49, 0xdb, 0x33, 0xa1, 0xa, 0x98, 0x41, 0xd3, 0x78, 0xea, 0xd7, 0x45, 0xee, 0x7c, 0xa5, 0x37, 0x9c, 0xe, 0x51, 0xc3, 0x68, 0xfa, 0x23, 0xb1, 0x1a, 0x88, 0xb5, 0x27, 0x8c, 0x1e, 0xc7, 0x55, 0xfe, 0x6c, 0x84, 0x16, 0xbd, 0x2f, 0xf6, 0x64, 0xcf, 0x5d, 0x60, 0xf2, 0x59, 0xcb, 0x12, 0x80, 0x2b, 0xb9, 0x95, 0x7, 0xac, 0x3e, 0xe7, 0x75, 0xde, 0x4c, 0x71, 0xe3, 0x48, 0xda, 0x3, 0x91, 0x3a, 0xa8, 0x40, 0xd2, 0x79, 0xeb, 0x32, 0xa0, 0xb, 0x99, 0xa4, 0x36, 0x9d, 0xf, 0xd6, 0x44, 0xef, 0x7d, 0x22, 0xb0, 0x1b, 0x89, 0x50, 0xc2, 0x69, 0xfb, 0xc6, 0x54, 0xff, 0x6d, 0xb4, 0x26, 0x8d, 0x1f, 0xf7, 0x65, 0xce, 0x5c, 0x85, 0x17, 0xbc, 0x2e, 0x13, 0x81, 0x2a, 0xb8, 0x61, 0xf3, 0x58, 0xca}, + {0x0, 0x93, 0x3b, 0xa8, 0x76, 0xe5, 0x4d, 0xde, 0xec, 0x7f, 0xd7, 0x44, 0x9a, 0x9, 0xa1, 0x32, 0xc5, 0x56, 0xfe, 0x6d, 0xb3, 0x20, 0x88, 0x1b, 0x29, 0xba, 0x12, 0x81, 0x5f, 0xcc, 0x64, 0xf7, 0x97, 0x4, 0xac, 0x3f, 0xe1, 0x72, 0xda, 0x49, 0x7b, 0xe8, 0x40, 0xd3, 0xd, 0x9e, 0x36, 0xa5, 0x52, 0xc1, 0x69, 0xfa, 0x24, 0xb7, 0x1f, 0x8c, 0xbe, 0x2d, 0x85, 0x16, 0xc8, 0x5b, 0xf3, 0x60, 0x33, 0xa0, 0x8, 0x9b, 0x45, 0xd6, 0x7e, 0xed, 0xdf, 0x4c, 0xe4, 0x77, 0xa9, 0x3a, 0x92, 0x1, 0xf6, 0x65, 0xcd, 0x5e, 0x80, 0x13, 0xbb, 0x28, 0x1a, 0x89, 0x21, 0xb2, 0x6c, 0xff, 0x57, 0xc4, 0xa4, 0x37, 0x9f, 0xc, 0xd2, 0x41, 0xe9, 0x7a, 0x48, 0xdb, 0x73, 0xe0, 0x3e, 0xad, 0x5, 0x96, 0x61, 0xf2, 0x5a, 0xc9, 0x17, 0x84, 0x2c, 0xbf, 0x8d, 0x1e, 0xb6, 0x25, 0xfb, 0x68, 0xc0, 0x53, 0x66, 0xf5, 0x5d, 0xce, 0x10, 0x83, 0x2b, 0xb8, 0x8a, 0x19, 0xb1, 0x22, 0xfc, 0x6f, 0xc7, 0x54, 0xa3, 0x30, 0x98, 0xb, 0xd5, 0x46, 0xee, 0x7d, 0x4f, 0xdc, 0x74, 0xe7, 0x39, 0xaa, 0x2, 0x91, 0xf1, 0x62, 0xca, 0x59, 0x87, 0x14, 0xbc, 0x2f, 0x1d, 0x8e, 0x26, 0xb5, 0x6b, 0xf8, 0x50, 0xc3, 0x34, 0xa7, 0xf, 0x9c, 0x42, 0xd1, 0x79, 0xea, 0xd8, 0x4b, 0xe3, 0x70, 0xae, 0x3d, 0x95, 0x6, 0x55, 0xc6, 0x6e, 0xfd, 0x23, 0xb0, 0x18, 0x8b, 0xb9, 0x2a, 0x82, 0x11, 0xcf, 0x5c, 0xf4, 0x67, 0x90, 0x3, 0xab, 0x38, 0xe6, 0x75, 0xdd, 0x4e, 0x7c, 0xef, 0x47, 0xd4, 0xa, 0x99, 0x31, 0xa2, 0xc2, 0x51, 0xf9, 0x6a, 0xb4, 0x27, 0x8f, 0x1c, 0x2e, 0xbd, 0x15, 0x86, 0x58, 0xcb, 0x63, 0xf0, 0x7, 0x94, 0x3c, 0xaf, 0x71, 0xe2, 0x4a, 0xd9, 0xeb, 0x78, 0xd0, 0x43, 0x9d, 0xe, 0xa6, 0x35}, + {0x0, 0x94, 0x35, 0xa1, 0x6a, 0xfe, 0x5f, 0xcb, 0xd4, 0x40, 0xe1, 0x75, 0xbe, 0x2a, 0x8b, 0x1f, 0xb5, 0x21, 0x80, 0x14, 0xdf, 0x4b, 0xea, 0x7e, 0x61, 0xf5, 0x54, 0xc0, 0xb, 0x9f, 0x3e, 0xaa, 0x77, 0xe3, 0x42, 0xd6, 0x1d, 0x89, 0x28, 0xbc, 0xa3, 0x37, 0x96, 0x2, 0xc9, 0x5d, 0xfc, 0x68, 0xc2, 0x56, 0xf7, 0x63, 0xa8, 0x3c, 0x9d, 0x9, 0x16, 0x82, 0x23, 0xb7, 0x7c, 0xe8, 0x49, 0xdd, 0xee, 0x7a, 0xdb, 0x4f, 0x84, 0x10, 0xb1, 0x25, 0x3a, 0xae, 0xf, 0x9b, 0x50, 0xc4, 0x65, 0xf1, 0x5b, 0xcf, 0x6e, 0xfa, 0x31, 0xa5, 0x4, 0x90, 0x8f, 0x1b, 0xba, 0x2e, 0xe5, 0x71, 0xd0, 0x44, 0x99, 0xd, 0xac, 0x38, 0xf3, 0x67, 0xc6, 0x52, 0x4d, 0xd9, 0x78, 0xec, 0x27, 0xb3, 0x12, 0x86, 0x2c, 0xb8, 0x19, 0x8d, 0x46, 0xd2, 0x73, 0xe7, 0xf8, 0x6c, 0xcd, 0x59, 0x92, 0x6, 0xa7, 0x33, 0xc1, 0x55, 0xf4, 0x60, 0xab, 0x3f, 0x9e, 0xa, 0x15, 0x81, 0x20, 0xb4, 0x7f, 0xeb, 0x4a, 0xde, 0x74, 0xe0, 0x41, 0xd5, 0x1e, 0x8a, 0x2b, 0xbf, 0xa0, 0x34, 0x95, 0x1, 0xca, 0x5e, 0xff, 0x6b, 0xb6, 0x22, 0x83, 0x17, 0xdc, 0x48, 0xe9, 0x7d, 0x62, 0xf6, 0x57, 0xc3, 0x8, 0x9c, 0x3d, 0xa9, 0x3, 0x97, 0x36, 0xa2, 0x69, 0xfd, 0x5c, 0xc8, 0xd7, 0x43, 0xe2, 0x76, 0xbd, 0x29, 0x88, 0x1c, 0x2f, 0xbb, 0x1a, 0x8e, 0x45, 0xd1, 0x70, 0xe4, 0xfb, 0x6f, 0xce, 0x5a, 0x91, 0x5, 0xa4, 0x30, 0x9a, 0xe, 0xaf, 0x3b, 0xf0, 0x64, 0xc5, 0x51, 0x4e, 0xda, 0x7b, 0xef, 0x24, 0xb0, 0x11, 0x85, 0x58, 0xcc, 0x6d, 0xf9, 0x32, 0xa6, 0x7, 0x93, 0x8c, 0x18, 0xb9, 0x2d, 0xe6, 0x72, 0xd3, 0x47, 0xed, 0x79, 0xd8, 0x4c, 0x87, 0x13, 0xb2, 0x26, 0x39, 0xad, 0xc, 0x98, 0x53, 0xc7, 0x66, 0xf2}, + {0x0, 0x95, 0x37, 0xa2, 0x6e, 0xfb, 0x59, 0xcc, 0xdc, 0x49, 0xeb, 0x7e, 0xb2, 0x27, 0x85, 0x10, 0xa5, 0x30, 0x92, 0x7, 0xcb, 0x5e, 0xfc, 0x69, 0x79, 0xec, 0x4e, 0xdb, 0x17, 0x82, 0x20, 0xb5, 0x57, 0xc2, 0x60, 0xf5, 0x39, 0xac, 0xe, 0x9b, 0x8b, 0x1e, 0xbc, 0x29, 0xe5, 0x70, 0xd2, 0x47, 0xf2, 0x67, 0xc5, 0x50, 0x9c, 0x9, 0xab, 0x3e, 0x2e, 0xbb, 0x19, 0x8c, 0x40, 0xd5, 0x77, 0xe2, 0xae, 0x3b, 0x99, 0xc, 0xc0, 0x55, 0xf7, 0x62, 0x72, 0xe7, 0x45, 0xd0, 0x1c, 0x89, 0x2b, 0xbe, 0xb, 0x9e, 0x3c, 0xa9, 0x65, 0xf0, 0x52, 0xc7, 0xd7, 0x42, 0xe0, 0x75, 0xb9, 0x2c, 0x8e, 0x1b, 0xf9, 0x6c, 0xce, 0x5b, 0x97, 0x2, 0xa0, 0x35, 0x25, 0xb0, 0x12, 0x87, 0x4b, 0xde, 0x7c, 0xe9, 0x5c, 0xc9, 0x6b, 0xfe, 0x32, 0xa7, 0x5, 0x90, 0x80, 0x15, 0xb7, 0x22, 0xee, 0x7b, 0xd9, 0x4c, 0x41, 0xd4, 0x76, 0xe3, 0x2f, 0xba, 0x18, 0x8d, 0x9d, 0x8, 0xaa, 0x3f, 0xf3, 0x66, 0xc4, 0x51, 0xe4, 0x71, 0xd3, 0x46, 0x8a, 0x1f, 0xbd, 0x28, 0x38, 0xad, 0xf, 0x9a, 0x56, 0xc3, 0x61, 0xf4, 0x16, 0x83, 0x21, 0xb4, 0x78, 0xed, 0x4f, 0xda, 0xca, 0x5f, 0xfd, 0x68, 0xa4, 0x31, 0x93, 0x6, 0xb3, 0x26, 0x84, 0x11, 0xdd, 0x48, 0xea, 0x7f, 0x6f, 0xfa, 0x58, 0xcd, 0x1, 0x94, 0x36, 0xa3, 0xef, 0x7a, 0xd8, 0x4d, 0x81, 0x14, 0xb6, 0x23, 0x33, 0xa6, 0x4, 0x91, 0x5d, 0xc8, 0x6a, 0xff, 0x4a, 0xdf, 0x7d, 0xe8, 0x24, 0xb1, 0x13, 0x86, 0x96, 0x3, 0xa1, 0x34, 0xf8, 0x6d, 0xcf, 0x5a, 0xb8, 0x2d, 0x8f, 0x1a, 0xd6, 0x43, 0xe1, 0x74, 0x64, 0xf1, 0x53, 0xc6, 0xa, 0x9f, 0x3d, 0xa8, 0x1d, 0x88, 0x2a, 0xbf, 0x73, 0xe6, 0x44, 0xd1, 0xc1, 0x54, 0xf6, 0x63, 0xaf, 0x3a, 0x98, 0xd}, + {0x0, 0x96, 0x31, 0xa7, 0x62, 0xf4, 0x53, 0xc5, 0xc4, 0x52, 0xf5, 0x63, 0xa6, 0x30, 0x97, 0x1, 0x95, 0x3, 0xa4, 0x32, 0xf7, 0x61, 0xc6, 0x50, 0x51, 0xc7, 0x60, 0xf6, 0x33, 0xa5, 0x2, 0x94, 0x37, 0xa1, 0x6, 0x90, 0x55, 0xc3, 0x64, 0xf2, 0xf3, 0x65, 0xc2, 0x54, 0x91, 0x7, 0xa0, 0x36, 0xa2, 0x34, 0x93, 0x5, 0xc0, 0x56, 0xf1, 0x67, 0x66, 0xf0, 0x57, 0xc1, 0x4, 0x92, 0x35, 0xa3, 0x6e, 0xf8, 0x5f, 0xc9, 0xc, 0x9a, 0x3d, 0xab, 0xaa, 0x3c, 0x9b, 0xd, 0xc8, 0x5e, 0xf9, 0x6f, 0xfb, 0x6d, 0xca, 0x5c, 0x99, 0xf, 0xa8, 0x3e, 0x3f, 0xa9, 0xe, 0x98, 0x5d, 0xcb, 0x6c, 0xfa, 0x59, 0xcf, 0x68, 0xfe, 0x3b, 0xad, 0xa, 0x9c, 0x9d, 0xb, 0xac, 0x3a, 0xff, 0x69, 0xce, 0x58, 0xcc, 0x5a, 0xfd, 0x6b, 0xae, 0x38, 0x9f, 0x9, 0x8, 0x9e, 0x39, 0xaf, 0x6a, 0xfc, 0x5b, 0xcd, 0xdc, 0x4a, 0xed, 0x7b, 0xbe, 0x28, 0x8f, 0x19, 0x18, 0x8e, 0x29, 0xbf, 0x7a, 0xec, 0x4b, 0xdd, 0x49, 0xdf, 0x78, 0xee, 0x2b, 0xbd, 0x1a, 0x8c, 0x8d, 0x1b, 0xbc, 0x2a, 0xef, 0x79, 0xde, 0x48, 0xeb, 0x7d, 0xda, 0x4c, 0x89, 0x1f, 0xb8, 0x2e, 0x2f, 0xb9, 0x1e, 0x88, 0x4d, 0xdb, 0x7c, 0xea, 0x7e, 0xe8, 0x4f, 0xd9, 0x1c, 0x8a, 0x2d, 0xbb, 0xba, 0x2c, 0x8b, 0x1d, 0xd8, 0x4e, 0xe9, 0x7f, 0xb2, 0x24, 0x83, 0x15, 0xd0, 0x46, 0xe1, 0x77, 0x76, 0xe0, 0x47, 0xd1, 0x14, 0x82, 0x25, 0xb3, 0x27, 0xb1, 0x16, 0x80, 0x45, 0xd3, 0x74, 0xe2, 0xe3, 0x75, 0xd2, 0x44, 0x81, 0x17, 0xb0, 0x26, 0x85, 0x13, 0xb4, 0x22, 0xe7, 0x71, 0xd6, 0x40, 0x41, 0xd7, 0x70, 0xe6, 0x23, 0xb5, 0x12, 0x84, 0x10, 0x86, 0x21, 0xb7, 0x72, 0xe4, 0x43, 0xd5, 0xd4, 0x42, 0xe5, 0x73, 0xb6, 0x20, 0x87, 0x11}, + {0x0, 0x97, 0x33, 0xa4, 0x66, 0xf1, 0x55, 0xc2, 0xcc, 0x5b, 0xff, 0x68, 0xaa, 0x3d, 0x99, 0xe, 0x85, 0x12, 0xb6, 0x21, 0xe3, 0x74, 0xd0, 0x47, 0x49, 0xde, 0x7a, 0xed, 0x2f, 0xb8, 0x1c, 0x8b, 0x17, 0x80, 0x24, 0xb3, 0x71, 0xe6, 0x42, 0xd5, 0xdb, 0x4c, 0xe8, 0x7f, 0xbd, 0x2a, 0x8e, 0x19, 0x92, 0x5, 0xa1, 0x36, 0xf4, 0x63, 0xc7, 0x50, 0x5e, 0xc9, 0x6d, 0xfa, 0x38, 0xaf, 0xb, 0x9c, 0x2e, 0xb9, 0x1d, 0x8a, 0x48, 0xdf, 0x7b, 0xec, 0xe2, 0x75, 0xd1, 0x46, 0x84, 0x13, 0xb7, 0x20, 0xab, 0x3c, 0x98, 0xf, 0xcd, 0x5a, 0xfe, 0x69, 0x67, 0xf0, 0x54, 0xc3, 0x1, 0x96, 0x32, 0xa5, 0x39, 0xae, 0xa, 0x9d, 0x5f, 0xc8, 0x6c, 0xfb, 0xf5, 0x62, 0xc6, 0x51, 0x93, 0x4, 0xa0, 0x37, 0xbc, 0x2b, 0x8f, 0x18, 0xda, 0x4d, 0xe9, 0x7e, 0x70, 0xe7, 0x43, 0xd4, 0x16, 0x81, 0x25, 0xb2, 0x5c, 0xcb, 0x6f, 0xf8, 0x3a, 0xad, 0x9, 0x9e, 0x90, 0x7, 0xa3, 0x34, 0xf6, 0x61, 0xc5, 0x52, 0xd9, 0x4e, 0xea, 0x7d, 0xbf, 0x28, 0x8c, 0x1b, 0x15, 0x82, 0x26, 0xb1, 0x73, 0xe4, 0x40, 0xd7, 0x4b, 0xdc, 0x78, 0xef, 0x2d, 0xba, 0x1e, 0x89, 0x87, 0x10, 0xb4, 0x23, 0xe1, 0x76, 0xd2, 0x45, 0xce, 0x59, 0xfd, 0x6a, 0xa8, 0x3f, 0x9b, 0xc, 0x2, 0x95, 0x31, 0xa6, 0x64, 0xf3, 0x57, 0xc0, 0x72, 0xe5, 0x41, 0xd6, 0x14, 0x83, 0x27, 0xb0, 0xbe, 0x29, 0x8d, 0x1a, 0xd8, 0x4f, 0xeb, 0x7c, 0xf7, 0x60, 0xc4, 0x53, 0x91, 0x6, 0xa2, 0x35, 0x3b, 0xac, 0x8, 0x9f, 0x5d, 0xca, 0x6e, 0xf9, 0x65, 0xf2, 0x56, 0xc1, 0x3, 0x94, 0x30, 0xa7, 0xa9, 0x3e, 0x9a, 0xd, 0xcf, 0x58, 0xfc, 0x6b, 0xe0, 0x77, 0xd3, 0x44, 0x86, 0x11, 0xb5, 0x22, 0x2c, 0xbb, 0x1f, 0x88, 0x4a, 0xdd, 0x79, 0xee}, + {0x0, 0x98, 0x2d, 0xb5, 0x5a, 0xc2, 0x77, 0xef, 0xb4, 0x2c, 0x99, 0x1, 0xee, 0x76, 0xc3, 0x5b, 0x75, 0xed, 0x58, 0xc0, 0x2f, 0xb7, 0x2, 0x9a, 0xc1, 0x59, 0xec, 0x74, 0x9b, 0x3, 0xb6, 0x2e, 0xea, 0x72, 0xc7, 0x5f, 0xb0, 0x28, 0x9d, 0x5, 0x5e, 0xc6, 0x73, 0xeb, 0x4, 0x9c, 0x29, 0xb1, 0x9f, 0x7, 0xb2, 0x2a, 0xc5, 0x5d, 0xe8, 0x70, 0x2b, 0xb3, 0x6, 0x9e, 0x71, 0xe9, 0x5c, 0xc4, 0xc9, 0x51, 0xe4, 0x7c, 0x93, 0xb, 0xbe, 0x26, 0x7d, 0xe5, 0x50, 0xc8, 0x27, 0xbf, 0xa, 0x92, 0xbc, 0x24, 0x91, 0x9, 0xe6, 0x7e, 0xcb, 0x53, 0x8, 0x90, 0x25, 0xbd, 0x52, 0xca, 0x7f, 0xe7, 0x23, 0xbb, 0xe, 0x96, 0x79, 0xe1, 0x54, 0xcc, 0x97, 0xf, 0xba, 0x22, 0xcd, 0x55, 0xe0, 0x78, 0x56, 0xce, 0x7b, 0xe3, 0xc, 0x94, 0x21, 0xb9, 0xe2, 0x7a, 0xcf, 0x57, 0xb8, 0x20, 0x95, 0xd, 0x8f, 0x17, 0xa2, 0x3a, 0xd5, 0x4d, 0xf8, 0x60, 0x3b, 0xa3, 0x16, 0x8e, 0x61, 0xf9, 0x4c, 0xd4, 0xfa, 0x62, 0xd7, 0x4f, 0xa0, 0x38, 0x8d, 0x15, 0x4e, 0xd6, 0x63, 0xfb, 0x14, 0x8c, 0x39, 0xa1, 0x65, 0xfd, 0x48, 0xd0, 0x3f, 0xa7, 0x12, 0x8a, 0xd1, 0x49, 0xfc, 0x64, 0x8b, 0x13, 0xa6, 0x3e, 0x10, 0x88, 0x3d, 0xa5, 0x4a, 0xd2, 0x67, 0xff, 0xa4, 0x3c, 0x89, 0x11, 0xfe, 0x66, 0xd3, 0x4b, 0x46, 0xde, 0x6b, 0xf3, 0x1c, 0x84, 0x31, 0xa9, 0xf2, 0x6a, 0xdf, 0x47, 0xa8, 0x30, 0x85, 0x1d, 0x33, 0xab, 0x1e, 0x86, 0x69, 0xf1, 0x44, 0xdc, 0x87, 0x1f, 0xaa, 0x32, 0xdd, 0x45, 0xf0, 0x68, 0xac, 0x34, 0x81, 0x19, 0xf6, 0x6e, 0xdb, 0x43, 0x18, 0x80, 0x35, 0xad, 0x42, 0xda, 0x6f, 0xf7, 0xd9, 0x41, 0xf4, 0x6c, 0x83, 0x1b, 0xae, 0x36, 0x6d, 0xf5, 0x40, 0xd8, 0x37, 0xaf, 0x1a, 0x82}, + {0x0, 0x99, 0x2f, 0xb6, 0x5e, 0xc7, 0x71, 0xe8, 0xbc, 0x25, 0x93, 0xa, 0xe2, 0x7b, 0xcd, 0x54, 0x65, 0xfc, 0x4a, 0xd3, 0x3b, 0xa2, 0x14, 0x8d, 0xd9, 0x40, 0xf6, 0x6f, 0x87, 0x1e, 0xa8, 0x31, 0xca, 0x53, 0xe5, 0x7c, 0x94, 0xd, 0xbb, 0x22, 0x76, 0xef, 0x59, 0xc0, 0x28, 0xb1, 0x7, 0x9e, 0xaf, 0x36, 0x80, 0x19, 0xf1, 0x68, 0xde, 0x47, 0x13, 0x8a, 0x3c, 0xa5, 0x4d, 0xd4, 0x62, 0xfb, 0x89, 0x10, 0xa6, 0x3f, 0xd7, 0x4e, 0xf8, 0x61, 0x35, 0xac, 0x1a, 0x83, 0x6b, 0xf2, 0x44, 0xdd, 0xec, 0x75, 0xc3, 0x5a, 0xb2, 0x2b, 0x9d, 0x4, 0x50, 0xc9, 0x7f, 0xe6, 0xe, 0x97, 0x21, 0xb8, 0x43, 0xda, 0x6c, 0xf5, 0x1d, 0x84, 0x32, 0xab, 0xff, 0x66, 0xd0, 0x49, 0xa1, 0x38, 0x8e, 0x17, 0x26, 0xbf, 0x9, 0x90, 0x78, 0xe1, 0x57, 0xce, 0x9a, 0x3, 0xb5, 0x2c, 0xc4, 0x5d, 0xeb, 0x72, 0xf, 0x96, 0x20, 0xb9, 0x51, 0xc8, 0x7e, 0xe7, 0xb3, 0x2a, 0x9c, 0x5, 0xed, 0x74, 0xc2, 0x5b, 0x6a, 0xf3, 0x45, 0xdc, 0x34, 0xad, 0x1b, 0x82, 0xd6, 0x4f, 0xf9, 0x60, 0x88, 0x11, 0xa7, 0x3e, 0xc5, 0x5c, 0xea, 0x73, 0x9b, 0x2, 0xb4, 0x2d, 0x79, 0xe0, 0x56, 0xcf, 0x27, 0xbe, 0x8, 0x91, 0xa0, 0x39, 0x8f, 0x16, 0xfe, 0x67, 0xd1, 0x48, 0x1c, 0x85, 0x33, 0xaa, 0x42, 0xdb, 0x6d, 0xf4, 0x86, 0x1f, 0xa9, 0x30, 0xd8, 0x41, 0xf7, 0x6e, 0x3a, 0xa3, 0x15, 0x8c, 0x64, 0xfd, 0x4b, 0xd2, 0xe3, 0x7a, 0xcc, 0x55, 0xbd, 0x24, 0x92, 0xb, 0x5f, 0xc6, 0x70, 0xe9, 0x1, 0x98, 0x2e, 0xb7, 0x4c, 0xd5, 0x63, 0xfa, 0x12, 0x8b, 0x3d, 0xa4, 0xf0, 0x69, 0xdf, 0x46, 0xae, 0x37, 0x81, 0x18, 0x29, 0xb0, 0x6, 0x9f, 0x77, 0xee, 0x58, 0xc1, 0x95, 0xc, 0xba, 0x23, 0xcb, 0x52, 0xe4, 0x7d}, + {0x0, 0x9a, 0x29, 0xb3, 0x52, 0xc8, 0x7b, 0xe1, 0xa4, 0x3e, 0x8d, 0x17, 0xf6, 0x6c, 0xdf, 0x45, 0x55, 0xcf, 0x7c, 0xe6, 0x7, 0x9d, 0x2e, 0xb4, 0xf1, 0x6b, 0xd8, 0x42, 0xa3, 0x39, 0x8a, 0x10, 0xaa, 0x30, 0x83, 0x19, 0xf8, 0x62, 0xd1, 0x4b, 0xe, 0x94, 0x27, 0xbd, 0x5c, 0xc6, 0x75, 0xef, 0xff, 0x65, 0xd6, 0x4c, 0xad, 0x37, 0x84, 0x1e, 0x5b, 0xc1, 0x72, 0xe8, 0x9, 0x93, 0x20, 0xba, 0x49, 0xd3, 0x60, 0xfa, 0x1b, 0x81, 0x32, 0xa8, 0xed, 0x77, 0xc4, 0x5e, 0xbf, 0x25, 0x96, 0xc, 0x1c, 0x86, 0x35, 0xaf, 0x4e, 0xd4, 0x67, 0xfd, 0xb8, 0x22, 0x91, 0xb, 0xea, 0x70, 0xc3, 0x59, 0xe3, 0x79, 0xca, 0x50, 0xb1, 0x2b, 0x98, 0x2, 0x47, 0xdd, 0x6e, 0xf4, 0x15, 0x8f, 0x3c, 0xa6, 0xb6, 0x2c, 0x9f, 0x5, 0xe4, 0x7e, 0xcd, 0x57, 0x12, 0x88, 0x3b, 0xa1, 0x40, 0xda, 0x69, 0xf3, 0x92, 0x8, 0xbb, 0x21, 0xc0, 0x5a, 0xe9, 0x73, 0x36, 0xac, 0x1f, 0x85, 0x64, 0xfe, 0x4d, 0xd7, 0xc7, 0x5d, 0xee, 0x74, 0x95, 0xf, 0xbc, 0x26, 0x63, 0xf9, 0x4a, 0xd0, 0x31, 0xab, 0x18, 0x82, 0x38, 0xa2, 0x11, 0x8b, 0x6a, 0xf0, 0x43, 0xd9, 0x9c, 0x6, 0xb5, 0x2f, 0xce, 0x54, 0xe7, 0x7d, 0x6d, 0xf7, 0x44, 0xde, 0x3f, 0xa5, 0x16, 0x8c, 0xc9, 0x53, 0xe0, 0x7a, 0x9b, 0x1, 0xb2, 0x28, 0xdb, 0x41, 0xf2, 0x68, 0x89, 0x13, 0xa0, 0x3a, 0x7f, 0xe5, 0x56, 0xcc, 0x2d, 0xb7, 0x4, 0x9e, 0x8e, 0x14, 0xa7, 0x3d, 0xdc, 0x46, 0xf5, 0x6f, 0x2a, 0xb0, 0x3, 0x99, 0x78, 0xe2, 0x51, 0xcb, 0x71, 0xeb, 0x58, 0xc2, 0x23, 0xb9, 0xa, 0x90, 0xd5, 0x4f, 0xfc, 0x66, 0x87, 0x1d, 0xae, 0x34, 0x24, 0xbe, 0xd, 0x97, 0x76, 0xec, 0x5f, 0xc5, 0x80, 0x1a, 0xa9, 0x33, 0xd2, 0x48, 0xfb, 0x61}, + {0x0, 0x9b, 0x2b, 0xb0, 0x56, 0xcd, 0x7d, 0xe6, 0xac, 0x37, 0x87, 0x1c, 0xfa, 0x61, 0xd1, 0x4a, 0x45, 0xde, 0x6e, 0xf5, 0x13, 0x88, 0x38, 0xa3, 0xe9, 0x72, 0xc2, 0x59, 0xbf, 0x24, 0x94, 0xf, 0x8a, 0x11, 0xa1, 0x3a, 0xdc, 0x47, 0xf7, 0x6c, 0x26, 0xbd, 0xd, 0x96, 0x70, 0xeb, 0x5b, 0xc0, 0xcf, 0x54, 0xe4, 0x7f, 0x99, 0x2, 0xb2, 0x29, 0x63, 0xf8, 0x48, 0xd3, 0x35, 0xae, 0x1e, 0x85, 0x9, 0x92, 0x22, 0xb9, 0x5f, 0xc4, 0x74, 0xef, 0xa5, 0x3e, 0x8e, 0x15, 0xf3, 0x68, 0xd8, 0x43, 0x4c, 0xd7, 0x67, 0xfc, 0x1a, 0x81, 0x31, 0xaa, 0xe0, 0x7b, 0xcb, 0x50, 0xb6, 0x2d, 0x9d, 0x6, 0x83, 0x18, 0xa8, 0x33, 0xd5, 0x4e, 0xfe, 0x65, 0x2f, 0xb4, 0x4, 0x9f, 0x79, 0xe2, 0x52, 0xc9, 0xc6, 0x5d, 0xed, 0x76, 0x90, 0xb, 0xbb, 0x20, 0x6a, 0xf1, 0x41, 0xda, 0x3c, 0xa7, 0x17, 0x8c, 0x12, 0x89, 0x39, 0xa2, 0x44, 0xdf, 0x6f, 0xf4, 0xbe, 0x25, 0x95, 0xe, 0xe8, 0x73, 0xc3, 0x58, 0x57, 0xcc, 0x7c, 0xe7, 0x1, 0x9a, 0x2a, 0xb1, 0xfb, 0x60, 0xd0, 0x4b, 0xad, 0x36, 0x86, 0x1d, 0x98, 0x3, 0xb3, 0x28, 0xce, 0x55, 0xe5, 0x7e, 0x34, 0xaf, 0x1f, 0x84, 0x62, 0xf9, 0x49, 0xd2, 0xdd, 0x46, 0xf6, 0x6d, 0x8b, 0x10, 0xa0, 0x3b, 0x71, 0xea, 0x5a, 0xc1, 0x27, 0xbc, 0xc, 0x97, 0x1b, 0x80, 0x30, 0xab, 0x4d, 0xd6, 0x66, 0xfd, 0xb7, 0x2c, 0x9c, 0x7, 0xe1, 0x7a, 0xca, 0x51, 0x5e, 0xc5, 0x75, 0xee, 0x8, 0x93, 0x23, 0xb8, 0xf2, 0x69, 0xd9, 0x42, 0xa4, 0x3f, 0x8f, 0x14, 0x91, 0xa, 0xba, 0x21, 0xc7, 0x5c, 0xec, 0x77, 0x3d, 0xa6, 0x16, 0x8d, 0x6b, 0xf0, 0x40, 0xdb, 0xd4, 0x4f, 0xff, 0x64, 0x82, 0x19, 0xa9, 0x32, 0x78, 0xe3, 0x53, 0xc8, 0x2e, 0xb5, 0x5, 0x9e}, + {0x0, 0x9c, 0x25, 0xb9, 0x4a, 0xd6, 0x6f, 0xf3, 0x94, 0x8, 0xb1, 0x2d, 0xde, 0x42, 0xfb, 0x67, 0x35, 0xa9, 0x10, 0x8c, 0x7f, 0xe3, 0x5a, 0xc6, 0xa1, 0x3d, 0x84, 0x18, 0xeb, 0x77, 0xce, 0x52, 0x6a, 0xf6, 0x4f, 0xd3, 0x20, 0xbc, 0x5, 0x99, 0xfe, 0x62, 0xdb, 0x47, 0xb4, 0x28, 0x91, 0xd, 0x5f, 0xc3, 0x7a, 0xe6, 0x15, 0x89, 0x30, 0xac, 0xcb, 0x57, 0xee, 0x72, 0x81, 0x1d, 0xa4, 0x38, 0xd4, 0x48, 0xf1, 0x6d, 0x9e, 0x2, 0xbb, 0x27, 0x40, 0xdc, 0x65, 0xf9, 0xa, 0x96, 0x2f, 0xb3, 0xe1, 0x7d, 0xc4, 0x58, 0xab, 0x37, 0x8e, 0x12, 0x75, 0xe9, 0x50, 0xcc, 0x3f, 0xa3, 0x1a, 0x86, 0xbe, 0x22, 0x9b, 0x7, 0xf4, 0x68, 0xd1, 0x4d, 0x2a, 0xb6, 0xf, 0x93, 0x60, 0xfc, 0x45, 0xd9, 0x8b, 0x17, 0xae, 0x32, 0xc1, 0x5d, 0xe4, 0x78, 0x1f, 0x83, 0x3a, 0xa6, 0x55, 0xc9, 0x70, 0xec, 0xb5, 0x29, 0x90, 0xc, 0xff, 0x63, 0xda, 0x46, 0x21, 0xbd, 0x4, 0x98, 0x6b, 0xf7, 0x4e, 0xd2, 0x80, 0x1c, 0xa5, 0x39, 0xca, 0x56, 0xef, 0x73, 0x14, 0x88, 0x31, 0xad, 0x5e, 0xc2, 0x7b, 0xe7, 0xdf, 0x43, 0xfa, 0x66, 0x95, 0x9, 0xb0, 0x2c, 0x4b, 0xd7, 0x6e, 0xf2, 0x1, 0x9d, 0x24, 0xb8, 0xea, 0x76, 0xcf, 0x53, 0xa0, 0x3c, 0x85, 0x19, 0x7e, 0xe2, 0x5b, 0xc7, 0x34, 0xa8, 0x11, 0x8d, 0x61, 0xfd, 0x44, 0xd8, 0x2b, 0xb7, 0xe, 0x92, 0xf5, 0x69, 0xd0, 0x4c, 0xbf, 0x23, 0x9a, 0x6, 0x54, 0xc8, 0x71, 0xed, 0x1e, 0x82, 0x3b, 0xa7, 0xc0, 0x5c, 0xe5, 0x79, 0x8a, 0x16, 0xaf, 0x33, 0xb, 0x97, 0x2e, 0xb2, 0x41, 0xdd, 0x64, 0xf8, 0x9f, 0x3, 0xba, 0x26, 0xd5, 0x49, 0xf0, 0x6c, 0x3e, 0xa2, 0x1b, 0x87, 0x74, 0xe8, 0x51, 0xcd, 0xaa, 0x36, 0x8f, 0x13, 0xe0, 0x7c, 0xc5, 0x59}, + {0x0, 0x9d, 0x27, 0xba, 0x4e, 0xd3, 0x69, 0xf4, 0x9c, 0x1, 0xbb, 0x26, 0xd2, 0x4f, 0xf5, 0x68, 0x25, 0xb8, 0x2, 0x9f, 0x6b, 0xf6, 0x4c, 0xd1, 0xb9, 0x24, 0x9e, 0x3, 0xf7, 0x6a, 0xd0, 0x4d, 0x4a, 0xd7, 0x6d, 0xf0, 0x4, 0x99, 0x23, 0xbe, 0xd6, 0x4b, 0xf1, 0x6c, 0x98, 0x5, 0xbf, 0x22, 0x6f, 0xf2, 0x48, 0xd5, 0x21, 0xbc, 0x6, 0x9b, 0xf3, 0x6e, 0xd4, 0x49, 0xbd, 0x20, 0x9a, 0x7, 0x94, 0x9, 0xb3, 0x2e, 0xda, 0x47, 0xfd, 0x60, 0x8, 0x95, 0x2f, 0xb2, 0x46, 0xdb, 0x61, 0xfc, 0xb1, 0x2c, 0x96, 0xb, 0xff, 0x62, 0xd8, 0x45, 0x2d, 0xb0, 0xa, 0x97, 0x63, 0xfe, 0x44, 0xd9, 0xde, 0x43, 0xf9, 0x64, 0x90, 0xd, 0xb7, 0x2a, 0x42, 0xdf, 0x65, 0xf8, 0xc, 0x91, 0x2b, 0xb6, 0xfb, 0x66, 0xdc, 0x41, 0xb5, 0x28, 0x92, 0xf, 0x67, 0xfa, 0x40, 0xdd, 0x29, 0xb4, 0xe, 0x93, 0x35, 0xa8, 0x12, 0x8f, 0x7b, 0xe6, 0x5c, 0xc1, 0xa9, 0x34, 0x8e, 0x13, 0xe7, 0x7a, 0xc0, 0x5d, 0x10, 0x8d, 0x37, 0xaa, 0x5e, 0xc3, 0x79, 0xe4, 0x8c, 0x11, 0xab, 0x36, 0xc2, 0x5f, 0xe5, 0x78, 0x7f, 0xe2, 0x58, 0xc5, 0x31, 0xac, 0x16, 0x8b, 0xe3, 0x7e, 0xc4, 0x59, 0xad, 0x30, 0x8a, 0x17, 0x5a, 0xc7, 0x7d, 0xe0, 0x14, 0x89, 0x33, 0xae, 0xc6, 0x5b, 0xe1, 0x7c, 0x88, 0x15, 0xaf, 0x32, 0xa1, 0x3c, 0x86, 0x1b, 0xef, 0x72, 0xc8, 0x55, 0x3d, 0xa0, 0x1a, 0x87, 0x73, 0xee, 0x54, 0xc9, 0x84, 0x19, 0xa3, 0x3e, 0xca, 0x57, 0xed, 0x70, 0x18, 0x85, 0x3f, 0xa2, 0x56, 0xcb, 0x71, 0xec, 0xeb, 0x76, 0xcc, 0x51, 0xa5, 0x38, 0x82, 0x1f, 0x77, 0xea, 0x50, 0xcd, 0x39, 0xa4, 0x1e, 0x83, 0xce, 0x53, 0xe9, 0x74, 0x80, 0x1d, 0xa7, 0x3a, 0x52, 0xcf, 0x75, 0xe8, 0x1c, 0x81, 0x3b, 0xa6}, + {0x0, 0x9e, 0x21, 0xbf, 0x42, 0xdc, 0x63, 0xfd, 0x84, 0x1a, 0xa5, 0x3b, 0xc6, 0x58, 0xe7, 0x79, 0x15, 0x8b, 0x34, 0xaa, 0x57, 0xc9, 0x76, 0xe8, 0x91, 0xf, 0xb0, 0x2e, 0xd3, 0x4d, 0xf2, 0x6c, 0x2a, 0xb4, 0xb, 0x95, 0x68, 0xf6, 0x49, 0xd7, 0xae, 0x30, 0x8f, 0x11, 0xec, 0x72, 0xcd, 0x53, 0x3f, 0xa1, 0x1e, 0x80, 0x7d, 0xe3, 0x5c, 0xc2, 0xbb, 0x25, 0x9a, 0x4, 0xf9, 0x67, 0xd8, 0x46, 0x54, 0xca, 0x75, 0xeb, 0x16, 0x88, 0x37, 0xa9, 0xd0, 0x4e, 0xf1, 0x6f, 0x92, 0xc, 0xb3, 0x2d, 0x41, 0xdf, 0x60, 0xfe, 0x3, 0x9d, 0x22, 0xbc, 0xc5, 0x5b, 0xe4, 0x7a, 0x87, 0x19, 0xa6, 0x38, 0x7e, 0xe0, 0x5f, 0xc1, 0x3c, 0xa2, 0x1d, 0x83, 0xfa, 0x64, 0xdb, 0x45, 0xb8, 0x26, 0x99, 0x7, 0x6b, 0xf5, 0x4a, 0xd4, 0x29, 0xb7, 0x8, 0x96, 0xef, 0x71, 0xce, 0x50, 0xad, 0x33, 0x8c, 0x12, 0xa8, 0x36, 0x89, 0x17, 0xea, 0x74, 0xcb, 0x55, 0x2c, 0xb2, 0xd, 0x93, 0x6e, 0xf0, 0x4f, 0xd1, 0xbd, 0x23, 0x9c, 0x2, 0xff, 0x61, 0xde, 0x40, 0x39, 0xa7, 0x18, 0x86, 0x7b, 0xe5, 0x5a, 0xc4, 0x82, 0x1c, 0xa3, 0x3d, 0xc0, 0x5e, 0xe1, 0x7f, 0x6, 0x98, 0x27, 0xb9, 0x44, 0xda, 0x65, 0xfb, 0x97, 0x9, 0xb6, 0x28, 0xd5, 0x4b, 0xf4, 0x6a, 0x13, 0x8d, 0x32, 0xac, 0x51, 0xcf, 0x70, 0xee, 0xfc, 0x62, 0xdd, 0x43, 0xbe, 0x20, 0x9f, 0x1, 0x78, 0xe6, 0x59, 0xc7, 0x3a, 0xa4, 0x1b, 0x85, 0xe9, 0x77, 0xc8, 0x56, 0xab, 0x35, 0x8a, 0x14, 0x6d, 0xf3, 0x4c, 0xd2, 0x2f, 0xb1, 0xe, 0x90, 0xd6, 0x48, 0xf7, 0x69, 0x94, 0xa, 0xb5, 0x2b, 0x52, 0xcc, 0x73, 0xed, 0x10, 0x8e, 0x31, 0xaf, 0xc3, 0x5d, 0xe2, 0x7c, 0x81, 0x1f, 0xa0, 0x3e, 0x47, 0xd9, 0x66, 0xf8, 0x5, 0x9b, 0x24, 0xba}, + {0x0, 0x9f, 0x23, 0xbc, 0x46, 0xd9, 0x65, 0xfa, 0x8c, 0x13, 0xaf, 0x30, 0xca, 0x55, 0xe9, 0x76, 0x5, 0x9a, 0x26, 0xb9, 0x43, 0xdc, 0x60, 0xff, 0x89, 0x16, 0xaa, 0x35, 0xcf, 0x50, 0xec, 0x73, 0xa, 0x95, 0x29, 0xb6, 0x4c, 0xd3, 0x6f, 0xf0, 0x86, 0x19, 0xa5, 0x3a, 0xc0, 0x5f, 0xe3, 0x7c, 0xf, 0x90, 0x2c, 0xb3, 0x49, 0xd6, 0x6a, 0xf5, 0x83, 0x1c, 0xa0, 0x3f, 0xc5, 0x5a, 0xe6, 0x79, 0x14, 0x8b, 0x37, 0xa8, 0x52, 0xcd, 0x71, 0xee, 0x98, 0x7, 0xbb, 0x24, 0xde, 0x41, 0xfd, 0x62, 0x11, 0x8e, 0x32, 0xad, 0x57, 0xc8, 0x74, 0xeb, 0x9d, 0x2, 0xbe, 0x21, 0xdb, 0x44, 0xf8, 0x67, 0x1e, 0x81, 0x3d, 0xa2, 0x58, 0xc7, 0x7b, 0xe4, 0x92, 0xd, 0xb1, 0x2e, 0xd4, 0x4b, 0xf7, 0x68, 0x1b, 0x84, 0x38, 0xa7, 0x5d, 0xc2, 0x7e, 0xe1, 0x97, 0x8, 0xb4, 0x2b, 0xd1, 0x4e, 0xf2, 0x6d, 0x28, 0xb7, 0xb, 0x94, 0x6e, 0xf1, 0x4d, 0xd2, 0xa4, 0x3b, 0x87, 0x18, 0xe2, 0x7d, 0xc1, 0x5e, 0x2d, 0xb2, 0xe, 0x91, 0x6b, 0xf4, 0x48, 0xd7, 0xa1, 0x3e, 0x82, 0x1d, 0xe7, 0x78, 0xc4, 0x5b, 0x22, 0xbd, 0x1, 0x9e, 0x64, 0xfb, 0x47, 0xd8, 0xae, 0x31, 0x8d, 0x12, 0xe8, 0x77, 0xcb, 0x54, 0x27, 0xb8, 0x4, 0x9b, 0x61, 0xfe, 0x42, 0xdd, 0xab, 0x34, 0x88, 0x17, 0xed, 0x72, 0xce, 0x51, 0x3c, 0xa3, 0x1f, 0x80, 0x7a, 0xe5, 0x59, 0xc6, 0xb0, 0x2f, 0x93, 0xc, 0xf6, 0x69, 0xd5, 0x4a, 0x39, 0xa6, 0x1a, 0x85, 0x7f, 0xe0, 0x5c, 0xc3, 0xb5, 0x2a, 0x96, 0x9, 0xf3, 0x6c, 0xd0, 0x4f, 0x36, 0xa9, 0x15, 0x8a, 0x70, 0xef, 0x53, 0xcc, 0xba, 0x25, 0x99, 0x6, 0xfc, 0x63, 0xdf, 0x40, 0x33, 0xac, 0x10, 0x8f, 0x75, 0xea, 0x56, 0xc9, 0xbf, 0x20, 0x9c, 0x3, 0xf9, 0x66, 0xda, 0x45}, + {0x0, 0xa0, 0x5d, 0xfd, 0xba, 0x1a, 0xe7, 0x47, 0x69, 0xc9, 0x34, 0x94, 0xd3, 0x73, 0x8e, 0x2e, 0xd2, 0x72, 0x8f, 0x2f, 0x68, 0xc8, 0x35, 0x95, 0xbb, 0x1b, 0xe6, 0x46, 0x1, 0xa1, 0x5c, 0xfc, 0xb9, 0x19, 0xe4, 0x44, 0x3, 0xa3, 0x5e, 0xfe, 0xd0, 0x70, 0x8d, 0x2d, 0x6a, 0xca, 0x37, 0x97, 0x6b, 0xcb, 0x36, 0x96, 0xd1, 0x71, 0x8c, 0x2c, 0x2, 0xa2, 0x5f, 0xff, 0xb8, 0x18, 0xe5, 0x45, 0x6f, 0xcf, 0x32, 0x92, 0xd5, 0x75, 0x88, 0x28, 0x6, 0xa6, 0x5b, 0xfb, 0xbc, 0x1c, 0xe1, 0x41, 0xbd, 0x1d, 0xe0, 0x40, 0x7, 0xa7, 0x5a, 0xfa, 0xd4, 0x74, 0x89, 0x29, 0x6e, 0xce, 0x33, 0x93, 0xd6, 0x76, 0x8b, 0x2b, 0x6c, 0xcc, 0x31, 0x91, 0xbf, 0x1f, 0xe2, 0x42, 0x5, 0xa5, 0x58, 0xf8, 0x4, 0xa4, 0x59, 0xf9, 0xbe, 0x1e, 0xe3, 0x43, 0x6d, 0xcd, 0x30, 0x90, 0xd7, 0x77, 0x8a, 0x2a, 0xde, 0x7e, 0x83, 0x23, 0x64, 0xc4, 0x39, 0x99, 0xb7, 0x17, 0xea, 0x4a, 0xd, 0xad, 0x50, 0xf0, 0xc, 0xac, 0x51, 0xf1, 0xb6, 0x16, 0xeb, 0x4b, 0x65, 0xc5, 0x38, 0x98, 0xdf, 0x7f, 0x82, 0x22, 0x67, 0xc7, 0x3a, 0x9a, 0xdd, 0x7d, 0x80, 0x20, 0xe, 0xae, 0x53, 0xf3, 0xb4, 0x14, 0xe9, 0x49, 0xb5, 0x15, 0xe8, 0x48, 0xf, 0xaf, 0x52, 0xf2, 0xdc, 0x7c, 0x81, 0x21, 0x66, 0xc6, 0x3b, 0x9b, 0xb1, 0x11, 0xec, 0x4c, 0xb, 0xab, 0x56, 0xf6, 0xd8, 0x78, 0x85, 0x25, 0x62, 0xc2, 0x3f, 0x9f, 0x63, 0xc3, 0x3e, 0x9e, 0xd9, 0x79, 0x84, 0x24, 0xa, 0xaa, 0x57, 0xf7, 0xb0, 0x10, 0xed, 0x4d, 0x8, 0xa8, 0x55, 0xf5, 0xb2, 0x12, 0xef, 0x4f, 0x61, 0xc1, 0x3c, 0x9c, 0xdb, 0x7b, 0x86, 0x26, 0xda, 0x7a, 0x87, 0x27, 0x60, 0xc0, 0x3d, 0x9d, 0xb3, 0x13, 0xee, 0x4e, 0x9, 0xa9, 0x54, 0xf4}, + {0x0, 0xa1, 0x5f, 0xfe, 0xbe, 0x1f, 0xe1, 0x40, 0x61, 0xc0, 0x3e, 0x9f, 0xdf, 0x7e, 0x80, 0x21, 0xc2, 0x63, 0x9d, 0x3c, 0x7c, 0xdd, 0x23, 0x82, 0xa3, 0x2, 0xfc, 0x5d, 0x1d, 0xbc, 0x42, 0xe3, 0x99, 0x38, 0xc6, 0x67, 0x27, 0x86, 0x78, 0xd9, 0xf8, 0x59, 0xa7, 0x6, 0x46, 0xe7, 0x19, 0xb8, 0x5b, 0xfa, 0x4, 0xa5, 0xe5, 0x44, 0xba, 0x1b, 0x3a, 0x9b, 0x65, 0xc4, 0x84, 0x25, 0xdb, 0x7a, 0x2f, 0x8e, 0x70, 0xd1, 0x91, 0x30, 0xce, 0x6f, 0x4e, 0xef, 0x11, 0xb0, 0xf0, 0x51, 0xaf, 0xe, 0xed, 0x4c, 0xb2, 0x13, 0x53, 0xf2, 0xc, 0xad, 0x8c, 0x2d, 0xd3, 0x72, 0x32, 0x93, 0x6d, 0xcc, 0xb6, 0x17, 0xe9, 0x48, 0x8, 0xa9, 0x57, 0xf6, 0xd7, 0x76, 0x88, 0x29, 0x69, 0xc8, 0x36, 0x97, 0x74, 0xd5, 0x2b, 0x8a, 0xca, 0x6b, 0x95, 0x34, 0x15, 0xb4, 0x4a, 0xeb, 0xab, 0xa, 0xf4, 0x55, 0x5e, 0xff, 0x1, 0xa0, 0xe0, 0x41, 0xbf, 0x1e, 0x3f, 0x9e, 0x60, 0xc1, 0x81, 0x20, 0xde, 0x7f, 0x9c, 0x3d, 0xc3, 0x62, 0x22, 0x83, 0x7d, 0xdc, 0xfd, 0x5c, 0xa2, 0x3, 0x43, 0xe2, 0x1c, 0xbd, 0xc7, 0x66, 0x98, 0x39, 0x79, 0xd8, 0x26, 0x87, 0xa6, 0x7, 0xf9, 0x58, 0x18, 0xb9, 0x47, 0xe6, 0x5, 0xa4, 0x5a, 0xfb, 0xbb, 0x1a, 0xe4, 0x45, 0x64, 0xc5, 0x3b, 0x9a, 0xda, 0x7b, 0x85, 0x24, 0x71, 0xd0, 0x2e, 0x8f, 0xcf, 0x6e, 0x90, 0x31, 0x10, 0xb1, 0x4f, 0xee, 0xae, 0xf, 0xf1, 0x50, 0xb3, 0x12, 0xec, 0x4d, 0xd, 0xac, 0x52, 0xf3, 0xd2, 0x73, 0x8d, 0x2c, 0x6c, 0xcd, 0x33, 0x92, 0xe8, 0x49, 0xb7, 0x16, 0x56, 0xf7, 0x9, 0xa8, 0x89, 0x28, 0xd6, 0x77, 0x37, 0x96, 0x68, 0xc9, 0x2a, 0x8b, 0x75, 0xd4, 0x94, 0x35, 0xcb, 0x6a, 0x4b, 0xea, 0x14, 0xb5, 0xf5, 0x54, 0xaa, 0xb}, + {0x0, 0xa2, 0x59, 0xfb, 0xb2, 0x10, 0xeb, 0x49, 0x79, 0xdb, 0x20, 0x82, 0xcb, 0x69, 0x92, 0x30, 0xf2, 0x50, 0xab, 0x9, 0x40, 0xe2, 0x19, 0xbb, 0x8b, 0x29, 0xd2, 0x70, 0x39, 0x9b, 0x60, 0xc2, 0xf9, 0x5b, 0xa0, 0x2, 0x4b, 0xe9, 0x12, 0xb0, 0x80, 0x22, 0xd9, 0x7b, 0x32, 0x90, 0x6b, 0xc9, 0xb, 0xa9, 0x52, 0xf0, 0xb9, 0x1b, 0xe0, 0x42, 0x72, 0xd0, 0x2b, 0x89, 0xc0, 0x62, 0x99, 0x3b, 0xef, 0x4d, 0xb6, 0x14, 0x5d, 0xff, 0x4, 0xa6, 0x96, 0x34, 0xcf, 0x6d, 0x24, 0x86, 0x7d, 0xdf, 0x1d, 0xbf, 0x44, 0xe6, 0xaf, 0xd, 0xf6, 0x54, 0x64, 0xc6, 0x3d, 0x9f, 0xd6, 0x74, 0x8f, 0x2d, 0x16, 0xb4, 0x4f, 0xed, 0xa4, 0x6, 0xfd, 0x5f, 0x6f, 0xcd, 0x36, 0x94, 0xdd, 0x7f, 0x84, 0x26, 0xe4, 0x46, 0xbd, 0x1f, 0x56, 0xf4, 0xf, 0xad, 0x9d, 0x3f, 0xc4, 0x66, 0x2f, 0x8d, 0x76, 0xd4, 0xc3, 0x61, 0x9a, 0x38, 0x71, 0xd3, 0x28, 0x8a, 0xba, 0x18, 0xe3, 0x41, 0x8, 0xaa, 0x51, 0xf3, 0x31, 0x93, 0x68, 0xca, 0x83, 0x21, 0xda, 0x78, 0x48, 0xea, 0x11, 0xb3, 0xfa, 0x58, 0xa3, 0x1, 0x3a, 0x98, 0x63, 0xc1, 0x88, 0x2a, 0xd1, 0x73, 0x43, 0xe1, 0x1a, 0xb8, 0xf1, 0x53, 0xa8, 0xa, 0xc8, 0x6a, 0x91, 0x33, 0x7a, 0xd8, 0x23, 0x81, 0xb1, 0x13, 0xe8, 0x4a, 0x3, 0xa1, 0x5a, 0xf8, 0x2c, 0x8e, 0x75, 0xd7, 0x9e, 0x3c, 0xc7, 0x65, 0x55, 0xf7, 0xc, 0xae, 0xe7, 0x45, 0xbe, 0x1c, 0xde, 0x7c, 0x87, 0x25, 0x6c, 0xce, 0x35, 0x97, 0xa7, 0x5, 0xfe, 0x5c, 0x15, 0xb7, 0x4c, 0xee, 0xd5, 0x77, 0x8c, 0x2e, 0x67, 0xc5, 0x3e, 0x9c, 0xac, 0xe, 0xf5, 0x57, 0x1e, 0xbc, 0x47, 0xe5, 0x27, 0x85, 0x7e, 0xdc, 0x95, 0x37, 0xcc, 0x6e, 0x5e, 0xfc, 0x7, 0xa5, 0xec, 0x4e, 0xb5, 0x17}, + {0x0, 0xa3, 0x5b, 0xf8, 0xb6, 0x15, 0xed, 0x4e, 0x71, 0xd2, 0x2a, 0x89, 0xc7, 0x64, 0x9c, 0x3f, 0xe2, 0x41, 0xb9, 0x1a, 0x54, 0xf7, 0xf, 0xac, 0x93, 0x30, 0xc8, 0x6b, 0x25, 0x86, 0x7e, 0xdd, 0xd9, 0x7a, 0x82, 0x21, 0x6f, 0xcc, 0x34, 0x97, 0xa8, 0xb, 0xf3, 0x50, 0x1e, 0xbd, 0x45, 0xe6, 0x3b, 0x98, 0x60, 0xc3, 0x8d, 0x2e, 0xd6, 0x75, 0x4a, 0xe9, 0x11, 0xb2, 0xfc, 0x5f, 0xa7, 0x4, 0xaf, 0xc, 0xf4, 0x57, 0x19, 0xba, 0x42, 0xe1, 0xde, 0x7d, 0x85, 0x26, 0x68, 0xcb, 0x33, 0x90, 0x4d, 0xee, 0x16, 0xb5, 0xfb, 0x58, 0xa0, 0x3, 0x3c, 0x9f, 0x67, 0xc4, 0x8a, 0x29, 0xd1, 0x72, 0x76, 0xd5, 0x2d, 0x8e, 0xc0, 0x63, 0x9b, 0x38, 0x7, 0xa4, 0x5c, 0xff, 0xb1, 0x12, 0xea, 0x49, 0x94, 0x37, 0xcf, 0x6c, 0x22, 0x81, 0x79, 0xda, 0xe5, 0x46, 0xbe, 0x1d, 0x53, 0xf0, 0x8, 0xab, 0x43, 0xe0, 0x18, 0xbb, 0xf5, 0x56, 0xae, 0xd, 0x32, 0x91, 0x69, 0xca, 0x84, 0x27, 0xdf, 0x7c, 0xa1, 0x2, 0xfa, 0x59, 0x17, 0xb4, 0x4c, 0xef, 0xd0, 0x73, 0x8b, 0x28, 0x66, 0xc5, 0x3d, 0x9e, 0x9a, 0x39, 0xc1, 0x62, 0x2c, 0x8f, 0x77, 0xd4, 0xeb, 0x48, 0xb0, 0x13, 0x5d, 0xfe, 0x6, 0xa5, 0x78, 0xdb, 0x23, 0x80, 0xce, 0x6d, 0x95, 0x36, 0x9, 0xaa, 0x52, 0xf1, 0xbf, 0x1c, 0xe4, 0x47, 0xec, 0x4f, 0xb7, 0x14, 0x5a, 0xf9, 0x1, 0xa2, 0x9d, 0x3e, 0xc6, 0x65, 0x2b, 0x88, 0x70, 0xd3, 0xe, 0xad, 0x55, 0xf6, 0xb8, 0x1b, 0xe3, 0x40, 0x7f, 0xdc, 0x24, 0x87, 0xc9, 0x6a, 0x92, 0x31, 0x35, 0x96, 0x6e, 0xcd, 0x83, 0x20, 0xd8, 0x7b, 0x44, 0xe7, 0x1f, 0xbc, 0xf2, 0x51, 0xa9, 0xa, 0xd7, 0x74, 0x8c, 0x2f, 0x61, 0xc2, 0x3a, 0x99, 0xa6, 0x5, 0xfd, 0x5e, 0x10, 0xb3, 0x4b, 0xe8}, + {0x0, 0xa4, 0x55, 0xf1, 0xaa, 0xe, 0xff, 0x5b, 0x49, 0xed, 0x1c, 0xb8, 0xe3, 0x47, 0xb6, 0x12, 0x92, 0x36, 0xc7, 0x63, 0x38, 0x9c, 0x6d, 0xc9, 0xdb, 0x7f, 0x8e, 0x2a, 0x71, 0xd5, 0x24, 0x80, 0x39, 0x9d, 0x6c, 0xc8, 0x93, 0x37, 0xc6, 0x62, 0x70, 0xd4, 0x25, 0x81, 0xda, 0x7e, 0x8f, 0x2b, 0xab, 0xf, 0xfe, 0x5a, 0x1, 0xa5, 0x54, 0xf0, 0xe2, 0x46, 0xb7, 0x13, 0x48, 0xec, 0x1d, 0xb9, 0x72, 0xd6, 0x27, 0x83, 0xd8, 0x7c, 0x8d, 0x29, 0x3b, 0x9f, 0x6e, 0xca, 0x91, 0x35, 0xc4, 0x60, 0xe0, 0x44, 0xb5, 0x11, 0x4a, 0xee, 0x1f, 0xbb, 0xa9, 0xd, 0xfc, 0x58, 0x3, 0xa7, 0x56, 0xf2, 0x4b, 0xef, 0x1e, 0xba, 0xe1, 0x45, 0xb4, 0x10, 0x2, 0xa6, 0x57, 0xf3, 0xa8, 0xc, 0xfd, 0x59, 0xd9, 0x7d, 0x8c, 0x28, 0x73, 0xd7, 0x26, 0x82, 0x90, 0x34, 0xc5, 0x61, 0x3a, 0x9e, 0x6f, 0xcb, 0xe4, 0x40, 0xb1, 0x15, 0x4e, 0xea, 0x1b, 0xbf, 0xad, 0x9, 0xf8, 0x5c, 0x7, 0xa3, 0x52, 0xf6, 0x76, 0xd2, 0x23, 0x87, 0xdc, 0x78, 0x89, 0x2d, 0x3f, 0x9b, 0x6a, 0xce, 0x95, 0x31, 0xc0, 0x64, 0xdd, 0x79, 0x88, 0x2c, 0x77, 0xd3, 0x22, 0x86, 0x94, 0x30, 0xc1, 0x65, 0x3e, 0x9a, 0x6b, 0xcf, 0x4f, 0xeb, 0x1a, 0xbe, 0xe5, 0x41, 0xb0, 0x14, 0x6, 0xa2, 0x53, 0xf7, 0xac, 0x8, 0xf9, 0x5d, 0x96, 0x32, 0xc3, 0x67, 0x3c, 0x98, 0x69, 0xcd, 0xdf, 0x7b, 0x8a, 0x2e, 0x75, 0xd1, 0x20, 0x84, 0x4, 0xa0, 0x51, 0xf5, 0xae, 0xa, 0xfb, 0x5f, 0x4d, 0xe9, 0x18, 0xbc, 0xe7, 0x43, 0xb2, 0x16, 0xaf, 0xb, 0xfa, 0x5e, 0x5, 0xa1, 0x50, 0xf4, 0xe6, 0x42, 0xb3, 0x17, 0x4c, 0xe8, 0x19, 0xbd, 0x3d, 0x99, 0x68, 0xcc, 0x97, 0x33, 0xc2, 0x66, 0x74, 0xd0, 0x21, 0x85, 0xde, 0x7a, 0x8b, 0x2f}, + {0x0, 0xa5, 0x57, 0xf2, 0xae, 0xb, 0xf9, 0x5c, 0x41, 0xe4, 0x16, 0xb3, 0xef, 0x4a, 0xb8, 0x1d, 0x82, 0x27, 0xd5, 0x70, 0x2c, 0x89, 0x7b, 0xde, 0xc3, 0x66, 0x94, 0x31, 0x6d, 0xc8, 0x3a, 0x9f, 0x19, 0xbc, 0x4e, 0xeb, 0xb7, 0x12, 0xe0, 0x45, 0x58, 0xfd, 0xf, 0xaa, 0xf6, 0x53, 0xa1, 0x4, 0x9b, 0x3e, 0xcc, 0x69, 0x35, 0x90, 0x62, 0xc7, 0xda, 0x7f, 0x8d, 0x28, 0x74, 0xd1, 0x23, 0x86, 0x32, 0x97, 0x65, 0xc0, 0x9c, 0x39, 0xcb, 0x6e, 0x73, 0xd6, 0x24, 0x81, 0xdd, 0x78, 0x8a, 0x2f, 0xb0, 0x15, 0xe7, 0x42, 0x1e, 0xbb, 0x49, 0xec, 0xf1, 0x54, 0xa6, 0x3, 0x5f, 0xfa, 0x8, 0xad, 0x2b, 0x8e, 0x7c, 0xd9, 0x85, 0x20, 0xd2, 0x77, 0x6a, 0xcf, 0x3d, 0x98, 0xc4, 0x61, 0x93, 0x36, 0xa9, 0xc, 0xfe, 0x5b, 0x7, 0xa2, 0x50, 0xf5, 0xe8, 0x4d, 0xbf, 0x1a, 0x46, 0xe3, 0x11, 0xb4, 0x64, 0xc1, 0x33, 0x96, 0xca, 0x6f, 0x9d, 0x38, 0x25, 0x80, 0x72, 0xd7, 0x8b, 0x2e, 0xdc, 0x79, 0xe6, 0x43, 0xb1, 0x14, 0x48, 0xed, 0x1f, 0xba, 0xa7, 0x2, 0xf0, 0x55, 0x9, 0xac, 0x5e, 0xfb, 0x7d, 0xd8, 0x2a, 0x8f, 0xd3, 0x76, 0x84, 0x21, 0x3c, 0x99, 0x6b, 0xce, 0x92, 0x37, 0xc5, 0x60, 0xff, 0x5a, 0xa8, 0xd, 0x51, 0xf4, 0x6, 0xa3, 0xbe, 0x1b, 0xe9, 0x4c, 0x10, 0xb5, 0x47, 0xe2, 0x56, 0xf3, 0x1, 0xa4, 0xf8, 0x5d, 0xaf, 0xa, 0x17, 0xb2, 0x40, 0xe5, 0xb9, 0x1c, 0xee, 0x4b, 0xd4, 0x71, 0x83, 0x26, 0x7a, 0xdf, 0x2d, 0x88, 0x95, 0x30, 0xc2, 0x67, 0x3b, 0x9e, 0x6c, 0xc9, 0x4f, 0xea, 0x18, 0xbd, 0xe1, 0x44, 0xb6, 0x13, 0xe, 0xab, 0x59, 0xfc, 0xa0, 0x5, 0xf7, 0x52, 0xcd, 0x68, 0x9a, 0x3f, 0x63, 0xc6, 0x34, 0x91, 0x8c, 0x29, 0xdb, 0x7e, 0x22, 0x87, 0x75, 0xd0}, + {0x0, 0xa6, 0x51, 0xf7, 0xa2, 0x4, 0xf3, 0x55, 0x59, 0xff, 0x8, 0xae, 0xfb, 0x5d, 0xaa, 0xc, 0xb2, 0x14, 0xe3, 0x45, 0x10, 0xb6, 0x41, 0xe7, 0xeb, 0x4d, 0xba, 0x1c, 0x49, 0xef, 0x18, 0xbe, 0x79, 0xdf, 0x28, 0x8e, 0xdb, 0x7d, 0x8a, 0x2c, 0x20, 0x86, 0x71, 0xd7, 0x82, 0x24, 0xd3, 0x75, 0xcb, 0x6d, 0x9a, 0x3c, 0x69, 0xcf, 0x38, 0x9e, 0x92, 0x34, 0xc3, 0x65, 0x30, 0x96, 0x61, 0xc7, 0xf2, 0x54, 0xa3, 0x5, 0x50, 0xf6, 0x1, 0xa7, 0xab, 0xd, 0xfa, 0x5c, 0x9, 0xaf, 0x58, 0xfe, 0x40, 0xe6, 0x11, 0xb7, 0xe2, 0x44, 0xb3, 0x15, 0x19, 0xbf, 0x48, 0xee, 0xbb, 0x1d, 0xea, 0x4c, 0x8b, 0x2d, 0xda, 0x7c, 0x29, 0x8f, 0x78, 0xde, 0xd2, 0x74, 0x83, 0x25, 0x70, 0xd6, 0x21, 0x87, 0x39, 0x9f, 0x68, 0xce, 0x9b, 0x3d, 0xca, 0x6c, 0x60, 0xc6, 0x31, 0x97, 0xc2, 0x64, 0x93, 0x35, 0xf9, 0x5f, 0xa8, 0xe, 0x5b, 0xfd, 0xa, 0xac, 0xa0, 0x6, 0xf1, 0x57, 0x2, 0xa4, 0x53, 0xf5, 0x4b, 0xed, 0x1a, 0xbc, 0xe9, 0x4f, 0xb8, 0x1e, 0x12, 0xb4, 0x43, 0xe5, 0xb0, 0x16, 0xe1, 0x47, 0x80, 0x26, 0xd1, 0x77, 0x22, 0x84, 0x73, 0xd5, 0xd9, 0x7f, 0x88, 0x2e, 0x7b, 0xdd, 0x2a, 0x8c, 0x32, 0x94, 0x63, 0xc5, 0x90, 0x36, 0xc1, 0x67, 0x6b, 0xcd, 0x3a, 0x9c, 0xc9, 0x6f, 0x98, 0x3e, 0xb, 0xad, 0x5a, 0xfc, 0xa9, 0xf, 0xf8, 0x5e, 0x52, 0xf4, 0x3, 0xa5, 0xf0, 0x56, 0xa1, 0x7, 0xb9, 0x1f, 0xe8, 0x4e, 0x1b, 0xbd, 0x4a, 0xec, 0xe0, 0x46, 0xb1, 0x17, 0x42, 0xe4, 0x13, 0xb5, 0x72, 0xd4, 0x23, 0x85, 0xd0, 0x76, 0x81, 0x27, 0x2b, 0x8d, 0x7a, 0xdc, 0x89, 0x2f, 0xd8, 0x7e, 0xc0, 0x66, 0x91, 0x37, 0x62, 0xc4, 0x33, 0x95, 0x99, 0x3f, 0xc8, 0x6e, 0x3b, 0x9d, 0x6a, 0xcc}, + {0x0, 0xa7, 0x53, 0xf4, 0xa6, 0x1, 0xf5, 0x52, 0x51, 0xf6, 0x2, 0xa5, 0xf7, 0x50, 0xa4, 0x3, 0xa2, 0x5, 0xf1, 0x56, 0x4, 0xa3, 0x57, 0xf0, 0xf3, 0x54, 0xa0, 0x7, 0x55, 0xf2, 0x6, 0xa1, 0x59, 0xfe, 0xa, 0xad, 0xff, 0x58, 0xac, 0xb, 0x8, 0xaf, 0x5b, 0xfc, 0xae, 0x9, 0xfd, 0x5a, 0xfb, 0x5c, 0xa8, 0xf, 0x5d, 0xfa, 0xe, 0xa9, 0xaa, 0xd, 0xf9, 0x5e, 0xc, 0xab, 0x5f, 0xf8, 0xb2, 0x15, 0xe1, 0x46, 0x14, 0xb3, 0x47, 0xe0, 0xe3, 0x44, 0xb0, 0x17, 0x45, 0xe2, 0x16, 0xb1, 0x10, 0xb7, 0x43, 0xe4, 0xb6, 0x11, 0xe5, 0x42, 0x41, 0xe6, 0x12, 0xb5, 0xe7, 0x40, 0xb4, 0x13, 0xeb, 0x4c, 0xb8, 0x1f, 0x4d, 0xea, 0x1e, 0xb9, 0xba, 0x1d, 0xe9, 0x4e, 0x1c, 0xbb, 0x4f, 0xe8, 0x49, 0xee, 0x1a, 0xbd, 0xef, 0x48, 0xbc, 0x1b, 0x18, 0xbf, 0x4b, 0xec, 0xbe, 0x19, 0xed, 0x4a, 0x79, 0xde, 0x2a, 0x8d, 0xdf, 0x78, 0x8c, 0x2b, 0x28, 0x8f, 0x7b, 0xdc, 0x8e, 0x29, 0xdd, 0x7a, 0xdb, 0x7c, 0x88, 0x2f, 0x7d, 0xda, 0x2e, 0x89, 0x8a, 0x2d, 0xd9, 0x7e, 0x2c, 0x8b, 0x7f, 0xd8, 0x20, 0x87, 0x73, 0xd4, 0x86, 0x21, 0xd5, 0x72, 0x71, 0xd6, 0x22, 0x85, 0xd7, 0x70, 0x84, 0x23, 0x82, 0x25, 0xd1, 0x76, 0x24, 0x83, 0x77, 0xd0, 0xd3, 0x74, 0x80, 0x27, 0x75, 0xd2, 0x26, 0x81, 0xcb, 0x6c, 0x98, 0x3f, 0x6d, 0xca, 0x3e, 0x99, 0x9a, 0x3d, 0xc9, 0x6e, 0x3c, 0x9b, 0x6f, 0xc8, 0x69, 0xce, 0x3a, 0x9d, 0xcf, 0x68, 0x9c, 0x3b, 0x38, 0x9f, 0x6b, 0xcc, 0x9e, 0x39, 0xcd, 0x6a, 0x92, 0x35, 0xc1, 0x66, 0x34, 0x93, 0x67, 0xc0, 0xc3, 0x64, 0x90, 0x37, 0x65, 0xc2, 0x36, 0x91, 0x30, 0x97, 0x63, 0xc4, 0x96, 0x31, 0xc5, 0x62, 0x61, 0xc6, 0x32, 0x95, 0xc7, 0x60, 0x94, 0x33}, + {0x0, 0xa8, 0x4d, 0xe5, 0x9a, 0x32, 0xd7, 0x7f, 0x29, 0x81, 0x64, 0xcc, 0xb3, 0x1b, 0xfe, 0x56, 0x52, 0xfa, 0x1f, 0xb7, 0xc8, 0x60, 0x85, 0x2d, 0x7b, 0xd3, 0x36, 0x9e, 0xe1, 0x49, 0xac, 0x4, 0xa4, 0xc, 0xe9, 0x41, 0x3e, 0x96, 0x73, 0xdb, 0x8d, 0x25, 0xc0, 0x68, 0x17, 0xbf, 0x5a, 0xf2, 0xf6, 0x5e, 0xbb, 0x13, 0x6c, 0xc4, 0x21, 0x89, 0xdf, 0x77, 0x92, 0x3a, 0x45, 0xed, 0x8, 0xa0, 0x55, 0xfd, 0x18, 0xb0, 0xcf, 0x67, 0x82, 0x2a, 0x7c, 0xd4, 0x31, 0x99, 0xe6, 0x4e, 0xab, 0x3, 0x7, 0xaf, 0x4a, 0xe2, 0x9d, 0x35, 0xd0, 0x78, 0x2e, 0x86, 0x63, 0xcb, 0xb4, 0x1c, 0xf9, 0x51, 0xf1, 0x59, 0xbc, 0x14, 0x6b, 0xc3, 0x26, 0x8e, 0xd8, 0x70, 0x95, 0x3d, 0x42, 0xea, 0xf, 0xa7, 0xa3, 0xb, 0xee, 0x46, 0x39, 0x91, 0x74, 0xdc, 0x8a, 0x22, 0xc7, 0x6f, 0x10, 0xb8, 0x5d, 0xf5, 0xaa, 0x2, 0xe7, 0x4f, 0x30, 0x98, 0x7d, 0xd5, 0x83, 0x2b, 0xce, 0x66, 0x19, 0xb1, 0x54, 0xfc, 0xf8, 0x50, 0xb5, 0x1d, 0x62, 0xca, 0x2f, 0x87, 0xd1, 0x79, 0x9c, 0x34, 0x4b, 0xe3, 0x6, 0xae, 0xe, 0xa6, 0x43, 0xeb, 0x94, 0x3c, 0xd9, 0x71, 0x27, 0x8f, 0x6a, 0xc2, 0xbd, 0x15, 0xf0, 0x58, 0x5c, 0xf4, 0x11, 0xb9, 0xc6, 0x6e, 0x8b, 0x23, 0x75, 0xdd, 0x38, 0x90, 0xef, 0x47, 0xa2, 0xa, 0xff, 0x57, 0xb2, 0x1a, 0x65, 0xcd, 0x28, 0x80, 0xd6, 0x7e, 0x9b, 0x33, 0x4c, 0xe4, 0x1, 0xa9, 0xad, 0x5, 0xe0, 0x48, 0x37, 0x9f, 0x7a, 0xd2, 0x84, 0x2c, 0xc9, 0x61, 0x1e, 0xb6, 0x53, 0xfb, 0x5b, 0xf3, 0x16, 0xbe, 0xc1, 0x69, 0x8c, 0x24, 0x72, 0xda, 0x3f, 0x97, 0xe8, 0x40, 0xa5, 0xd, 0x9, 0xa1, 0x44, 0xec, 0x93, 0x3b, 0xde, 0x76, 0x20, 0x88, 0x6d, 0xc5, 0xba, 0x12, 0xf7, 0x5f}, + {0x0, 0xa9, 0x4f, 0xe6, 0x9e, 0x37, 0xd1, 0x78, 0x21, 0x88, 0x6e, 0xc7, 0xbf, 0x16, 0xf0, 0x59, 0x42, 0xeb, 0xd, 0xa4, 0xdc, 0x75, 0x93, 0x3a, 0x63, 0xca, 0x2c, 0x85, 0xfd, 0x54, 0xb2, 0x1b, 0x84, 0x2d, 0xcb, 0x62, 0x1a, 0xb3, 0x55, 0xfc, 0xa5, 0xc, 0xea, 0x43, 0x3b, 0x92, 0x74, 0xdd, 0xc6, 0x6f, 0x89, 0x20, 0x58, 0xf1, 0x17, 0xbe, 0xe7, 0x4e, 0xa8, 0x1, 0x79, 0xd0, 0x36, 0x9f, 0x15, 0xbc, 0x5a, 0xf3, 0x8b, 0x22, 0xc4, 0x6d, 0x34, 0x9d, 0x7b, 0xd2, 0xaa, 0x3, 0xe5, 0x4c, 0x57, 0xfe, 0x18, 0xb1, 0xc9, 0x60, 0x86, 0x2f, 0x76, 0xdf, 0x39, 0x90, 0xe8, 0x41, 0xa7, 0xe, 0x91, 0x38, 0xde, 0x77, 0xf, 0xa6, 0x40, 0xe9, 0xb0, 0x19, 0xff, 0x56, 0x2e, 0x87, 0x61, 0xc8, 0xd3, 0x7a, 0x9c, 0x35, 0x4d, 0xe4, 0x2, 0xab, 0xf2, 0x5b, 0xbd, 0x14, 0x6c, 0xc5, 0x23, 0x8a, 0x2a, 0x83, 0x65, 0xcc, 0xb4, 0x1d, 0xfb, 0x52, 0xb, 0xa2, 0x44, 0xed, 0x95, 0x3c, 0xda, 0x73, 0x68, 0xc1, 0x27, 0x8e, 0xf6, 0x5f, 0xb9, 0x10, 0x49, 0xe0, 0x6, 0xaf, 0xd7, 0x7e, 0x98, 0x31, 0xae, 0x7, 0xe1, 0x48, 0x30, 0x99, 0x7f, 0xd6, 0x8f, 0x26, 0xc0, 0x69, 0x11, 0xb8, 0x5e, 0xf7, 0xec, 0x45, 0xa3, 0xa, 0x72, 0xdb, 0x3d, 0x94, 0xcd, 0x64, 0x82, 0x2b, 0x53, 0xfa, 0x1c, 0xb5, 0x3f, 0x96, 0x70, 0xd9, 0xa1, 0x8, 0xee, 0x47, 0x1e, 0xb7, 0x51, 0xf8, 0x80, 0x29, 0xcf, 0x66, 0x7d, 0xd4, 0x32, 0x9b, 0xe3, 0x4a, 0xac, 0x5, 0x5c, 0xf5, 0x13, 0xba, 0xc2, 0x6b, 0x8d, 0x24, 0xbb, 0x12, 0xf4, 0x5d, 0x25, 0x8c, 0x6a, 0xc3, 0x9a, 0x33, 0xd5, 0x7c, 0x4, 0xad, 0x4b, 0xe2, 0xf9, 0x50, 0xb6, 0x1f, 0x67, 0xce, 0x28, 0x81, 0xd8, 0x71, 0x97, 0x3e, 0x46, 0xef, 0x9, 0xa0}, + {0x0, 0xaa, 0x49, 0xe3, 0x92, 0x38, 0xdb, 0x71, 0x39, 0x93, 0x70, 0xda, 0xab, 0x1, 0xe2, 0x48, 0x72, 0xd8, 0x3b, 0x91, 0xe0, 0x4a, 0xa9, 0x3, 0x4b, 0xe1, 0x2, 0xa8, 0xd9, 0x73, 0x90, 0x3a, 0xe4, 0x4e, 0xad, 0x7, 0x76, 0xdc, 0x3f, 0x95, 0xdd, 0x77, 0x94, 0x3e, 0x4f, 0xe5, 0x6, 0xac, 0x96, 0x3c, 0xdf, 0x75, 0x4, 0xae, 0x4d, 0xe7, 0xaf, 0x5, 0xe6, 0x4c, 0x3d, 0x97, 0x74, 0xde, 0xd5, 0x7f, 0x9c, 0x36, 0x47, 0xed, 0xe, 0xa4, 0xec, 0x46, 0xa5, 0xf, 0x7e, 0xd4, 0x37, 0x9d, 0xa7, 0xd, 0xee, 0x44, 0x35, 0x9f, 0x7c, 0xd6, 0x9e, 0x34, 0xd7, 0x7d, 0xc, 0xa6, 0x45, 0xef, 0x31, 0x9b, 0x78, 0xd2, 0xa3, 0x9, 0xea, 0x40, 0x8, 0xa2, 0x41, 0xeb, 0x9a, 0x30, 0xd3, 0x79, 0x43, 0xe9, 0xa, 0xa0, 0xd1, 0x7b, 0x98, 0x32, 0x7a, 0xd0, 0x33, 0x99, 0xe8, 0x42, 0xa1, 0xb, 0xb7, 0x1d, 0xfe, 0x54, 0x25, 0x8f, 0x6c, 0xc6, 0x8e, 0x24, 0xc7, 0x6d, 0x1c, 0xb6, 0x55, 0xff, 0xc5, 0x6f, 0x8c, 0x26, 0x57, 0xfd, 0x1e, 0xb4, 0xfc, 0x56, 0xb5, 0x1f, 0x6e, 0xc4, 0x27, 0x8d, 0x53, 0xf9, 0x1a, 0xb0, 0xc1, 0x6b, 0x88, 0x22, 0x6a, 0xc0, 0x23, 0x89, 0xf8, 0x52, 0xb1, 0x1b, 0x21, 0x8b, 0x68, 0xc2, 0xb3, 0x19, 0xfa, 0x50, 0x18, 0xb2, 0x51, 0xfb, 0x8a, 0x20, 0xc3, 0x69, 0x62, 0xc8, 0x2b, 0x81, 0xf0, 0x5a, 0xb9, 0x13, 0x5b, 0xf1, 0x12, 0xb8, 0xc9, 0x63, 0x80, 0x2a, 0x10, 0xba, 0x59, 0xf3, 0x82, 0x28, 0xcb, 0x61, 0x29, 0x83, 0x60, 0xca, 0xbb, 0x11, 0xf2, 0x58, 0x86, 0x2c, 0xcf, 0x65, 0x14, 0xbe, 0x5d, 0xf7, 0xbf, 0x15, 0xf6, 0x5c, 0x2d, 0x87, 0x64, 0xce, 0xf4, 0x5e, 0xbd, 0x17, 0x66, 0xcc, 0x2f, 0x85, 0xcd, 0x67, 0x84, 0x2e, 0x5f, 0xf5, 0x16, 0xbc}, + {0x0, 0xab, 0x4b, 0xe0, 0x96, 0x3d, 0xdd, 0x76, 0x31, 0x9a, 0x7a, 0xd1, 0xa7, 0xc, 0xec, 0x47, 0x62, 0xc9, 0x29, 0x82, 0xf4, 0x5f, 0xbf, 0x14, 0x53, 0xf8, 0x18, 0xb3, 0xc5, 0x6e, 0x8e, 0x25, 0xc4, 0x6f, 0x8f, 0x24, 0x52, 0xf9, 0x19, 0xb2, 0xf5, 0x5e, 0xbe, 0x15, 0x63, 0xc8, 0x28, 0x83, 0xa6, 0xd, 0xed, 0x46, 0x30, 0x9b, 0x7b, 0xd0, 0x97, 0x3c, 0xdc, 0x77, 0x1, 0xaa, 0x4a, 0xe1, 0x95, 0x3e, 0xde, 0x75, 0x3, 0xa8, 0x48, 0xe3, 0xa4, 0xf, 0xef, 0x44, 0x32, 0x99, 0x79, 0xd2, 0xf7, 0x5c, 0xbc, 0x17, 0x61, 0xca, 0x2a, 0x81, 0xc6, 0x6d, 0x8d, 0x26, 0x50, 0xfb, 0x1b, 0xb0, 0x51, 0xfa, 0x1a, 0xb1, 0xc7, 0x6c, 0x8c, 0x27, 0x60, 0xcb, 0x2b, 0x80, 0xf6, 0x5d, 0xbd, 0x16, 0x33, 0x98, 0x78, 0xd3, 0xa5, 0xe, 0xee, 0x45, 0x2, 0xa9, 0x49, 0xe2, 0x94, 0x3f, 0xdf, 0x74, 0x37, 0x9c, 0x7c, 0xd7, 0xa1, 0xa, 0xea, 0x41, 0x6, 0xad, 0x4d, 0xe6, 0x90, 0x3b, 0xdb, 0x70, 0x55, 0xfe, 0x1e, 0xb5, 0xc3, 0x68, 0x88, 0x23, 0x64, 0xcf, 0x2f, 0x84, 0xf2, 0x59, 0xb9, 0x12, 0xf3, 0x58, 0xb8, 0x13, 0x65, 0xce, 0x2e, 0x85, 0xc2, 0x69, 0x89, 0x22, 0x54, 0xff, 0x1f, 0xb4, 0x91, 0x3a, 0xda, 0x71, 0x7, 0xac, 0x4c, 0xe7, 0xa0, 0xb, 0xeb, 0x40, 0x36, 0x9d, 0x7d, 0xd6, 0xa2, 0x9, 0xe9, 0x42, 0x34, 0x9f, 0x7f, 0xd4, 0x93, 0x38, 0xd8, 0x73, 0x5, 0xae, 0x4e, 0xe5, 0xc0, 0x6b, 0x8b, 0x20, 0x56, 0xfd, 0x1d, 0xb6, 0xf1, 0x5a, 0xba, 0x11, 0x67, 0xcc, 0x2c, 0x87, 0x66, 0xcd, 0x2d, 0x86, 0xf0, 0x5b, 0xbb, 0x10, 0x57, 0xfc, 0x1c, 0xb7, 0xc1, 0x6a, 0x8a, 0x21, 0x4, 0xaf, 0x4f, 0xe4, 0x92, 0x39, 0xd9, 0x72, 0x35, 0x9e, 0x7e, 0xd5, 0xa3, 0x8, 0xe8, 0x43}, + {0x0, 0xac, 0x45, 0xe9, 0x8a, 0x26, 0xcf, 0x63, 0x9, 0xa5, 0x4c, 0xe0, 0x83, 0x2f, 0xc6, 0x6a, 0x12, 0xbe, 0x57, 0xfb, 0x98, 0x34, 0xdd, 0x71, 0x1b, 0xb7, 0x5e, 0xf2, 0x91, 0x3d, 0xd4, 0x78, 0x24, 0x88, 0x61, 0xcd, 0xae, 0x2, 0xeb, 0x47, 0x2d, 0x81, 0x68, 0xc4, 0xa7, 0xb, 0xe2, 0x4e, 0x36, 0x9a, 0x73, 0xdf, 0xbc, 0x10, 0xf9, 0x55, 0x3f, 0x93, 0x7a, 0xd6, 0xb5, 0x19, 0xf0, 0x5c, 0x48, 0xe4, 0xd, 0xa1, 0xc2, 0x6e, 0x87, 0x2b, 0x41, 0xed, 0x4, 0xa8, 0xcb, 0x67, 0x8e, 0x22, 0x5a, 0xf6, 0x1f, 0xb3, 0xd0, 0x7c, 0x95, 0x39, 0x53, 0xff, 0x16, 0xba, 0xd9, 0x75, 0x9c, 0x30, 0x6c, 0xc0, 0x29, 0x85, 0xe6, 0x4a, 0xa3, 0xf, 0x65, 0xc9, 0x20, 0x8c, 0xef, 0x43, 0xaa, 0x6, 0x7e, 0xd2, 0x3b, 0x97, 0xf4, 0x58, 0xb1, 0x1d, 0x77, 0xdb, 0x32, 0x9e, 0xfd, 0x51, 0xb8, 0x14, 0x90, 0x3c, 0xd5, 0x79, 0x1a, 0xb6, 0x5f, 0xf3, 0x99, 0x35, 0xdc, 0x70, 0x13, 0xbf, 0x56, 0xfa, 0x82, 0x2e, 0xc7, 0x6b, 0x8, 0xa4, 0x4d, 0xe1, 0x8b, 0x27, 0xce, 0x62, 0x1, 0xad, 0x44, 0xe8, 0xb4, 0x18, 0xf1, 0x5d, 0x3e, 0x92, 0x7b, 0xd7, 0xbd, 0x11, 0xf8, 0x54, 0x37, 0x9b, 0x72, 0xde, 0xa6, 0xa, 0xe3, 0x4f, 0x2c, 0x80, 0x69, 0xc5, 0xaf, 0x3, 0xea, 0x46, 0x25, 0x89, 0x60, 0xcc, 0xd8, 0x74, 0x9d, 0x31, 0x52, 0xfe, 0x17, 0xbb, 0xd1, 0x7d, 0x94, 0x38, 0x5b, 0xf7, 0x1e, 0xb2, 0xca, 0x66, 0x8f, 0x23, 0x40, 0xec, 0x5, 0xa9, 0xc3, 0x6f, 0x86, 0x2a, 0x49, 0xe5, 0xc, 0xa0, 0xfc, 0x50, 0xb9, 0x15, 0x76, 0xda, 0x33, 0x9f, 0xf5, 0x59, 0xb0, 0x1c, 0x7f, 0xd3, 0x3a, 0x96, 0xee, 0x42, 0xab, 0x7, 0x64, 0xc8, 0x21, 0x8d, 0xe7, 0x4b, 0xa2, 0xe, 0x6d, 0xc1, 0x28, 0x84}, + {0x0, 0xad, 0x47, 0xea, 0x8e, 0x23, 0xc9, 0x64, 0x1, 0xac, 0x46, 0xeb, 0x8f, 0x22, 0xc8, 0x65, 0x2, 0xaf, 0x45, 0xe8, 0x8c, 0x21, 0xcb, 0x66, 0x3, 0xae, 0x44, 0xe9, 0x8d, 0x20, 0xca, 0x67, 0x4, 0xa9, 0x43, 0xee, 0x8a, 0x27, 0xcd, 0x60, 0x5, 0xa8, 0x42, 0xef, 0x8b, 0x26, 0xcc, 0x61, 0x6, 0xab, 0x41, 0xec, 0x88, 0x25, 0xcf, 0x62, 0x7, 0xaa, 0x40, 0xed, 0x89, 0x24, 0xce, 0x63, 0x8, 0xa5, 0x4f, 0xe2, 0x86, 0x2b, 0xc1, 0x6c, 0x9, 0xa4, 0x4e, 0xe3, 0x87, 0x2a, 0xc0, 0x6d, 0xa, 0xa7, 0x4d, 0xe0, 0x84, 0x29, 0xc3, 0x6e, 0xb, 0xa6, 0x4c, 0xe1, 0x85, 0x28, 0xc2, 0x6f, 0xc, 0xa1, 0x4b, 0xe6, 0x82, 0x2f, 0xc5, 0x68, 0xd, 0xa0, 0x4a, 0xe7, 0x83, 0x2e, 0xc4, 0x69, 0xe, 0xa3, 0x49, 0xe4, 0x80, 0x2d, 0xc7, 0x6a, 0xf, 0xa2, 0x48, 0xe5, 0x81, 0x2c, 0xc6, 0x6b, 0x10, 0xbd, 0x57, 0xfa, 0x9e, 0x33, 0xd9, 0x74, 0x11, 0xbc, 0x56, 0xfb, 0x9f, 0x32, 0xd8, 0x75, 0x12, 0xbf, 0x55, 0xf8, 0x9c, 0x31, 0xdb, 0x76, 0x13, 0xbe, 0x54, 0xf9, 0x9d, 0x30, 0xda, 0x77, 0x14, 0xb9, 0x53, 0xfe, 0x9a, 0x37, 0xdd, 0x70, 0x15, 0xb8, 0x52, 0xff, 0x9b, 0x36, 0xdc, 0x71, 0x16, 0xbb, 0x51, 0xfc, 0x98, 0x35, 0xdf, 0x72, 0x17, 0xba, 0x50, 0xfd, 0x99, 0x34, 0xde, 0x73, 0x18, 0xb5, 0x5f, 0xf2, 0x96, 0x3b, 0xd1, 0x7c, 0x19, 0xb4, 0x5e, 0xf3, 0x97, 0x3a, 0xd0, 0x7d, 0x1a, 0xb7, 0x5d, 0xf0, 0x94, 0x39, 0xd3, 0x7e, 0x1b, 0xb6, 0x5c, 0xf1, 0x95, 0x38, 0xd2, 0x7f, 0x1c, 0xb1, 0x5b, 0xf6, 0x92, 0x3f, 0xd5, 0x78, 0x1d, 0xb0, 0x5a, 0xf7, 0x93, 0x3e, 0xd4, 0x79, 0x1e, 0xb3, 0x59, 0xf4, 0x90, 0x3d, 0xd7, 0x7a, 0x1f, 0xb2, 0x58, 0xf5, 0x91, 0x3c, 0xd6, 0x7b}, + {0x0, 0xae, 0x41, 0xef, 0x82, 0x2c, 0xc3, 0x6d, 0x19, 0xb7, 0x58, 0xf6, 0x9b, 0x35, 0xda, 0x74, 0x32, 0x9c, 0x73, 0xdd, 0xb0, 0x1e, 0xf1, 0x5f, 0x2b, 0x85, 0x6a, 0xc4, 0xa9, 0x7, 0xe8, 0x46, 0x64, 0xca, 0x25, 0x8b, 0xe6, 0x48, 0xa7, 0x9, 0x7d, 0xd3, 0x3c, 0x92, 0xff, 0x51, 0xbe, 0x10, 0x56, 0xf8, 0x17, 0xb9, 0xd4, 0x7a, 0x95, 0x3b, 0x4f, 0xe1, 0xe, 0xa0, 0xcd, 0x63, 0x8c, 0x22, 0xc8, 0x66, 0x89, 0x27, 0x4a, 0xe4, 0xb, 0xa5, 0xd1, 0x7f, 0x90, 0x3e, 0x53, 0xfd, 0x12, 0xbc, 0xfa, 0x54, 0xbb, 0x15, 0x78, 0xd6, 0x39, 0x97, 0xe3, 0x4d, 0xa2, 0xc, 0x61, 0xcf, 0x20, 0x8e, 0xac, 0x2, 0xed, 0x43, 0x2e, 0x80, 0x6f, 0xc1, 0xb5, 0x1b, 0xf4, 0x5a, 0x37, 0x99, 0x76, 0xd8, 0x9e, 0x30, 0xdf, 0x71, 0x1c, 0xb2, 0x5d, 0xf3, 0x87, 0x29, 0xc6, 0x68, 0x5, 0xab, 0x44, 0xea, 0x8d, 0x23, 0xcc, 0x62, 0xf, 0xa1, 0x4e, 0xe0, 0x94, 0x3a, 0xd5, 0x7b, 0x16, 0xb8, 0x57, 0xf9, 0xbf, 0x11, 0xfe, 0x50, 0x3d, 0x93, 0x7c, 0xd2, 0xa6, 0x8, 0xe7, 0x49, 0x24, 0x8a, 0x65, 0xcb, 0xe9, 0x47, 0xa8, 0x6, 0x6b, 0xc5, 0x2a, 0x84, 0xf0, 0x5e, 0xb1, 0x1f, 0x72, 0xdc, 0x33, 0x9d, 0xdb, 0x75, 0x9a, 0x34, 0x59, 0xf7, 0x18, 0xb6, 0xc2, 0x6c, 0x83, 0x2d, 0x40, 0xee, 0x1, 0xaf, 0x45, 0xeb, 0x4, 0xaa, 0xc7, 0x69, 0x86, 0x28, 0x5c, 0xf2, 0x1d, 0xb3, 0xde, 0x70, 0x9f, 0x31, 0x77, 0xd9, 0x36, 0x98, 0xf5, 0x5b, 0xb4, 0x1a, 0x6e, 0xc0, 0x2f, 0x81, 0xec, 0x42, 0xad, 0x3, 0x21, 0x8f, 0x60, 0xce, 0xa3, 0xd, 0xe2, 0x4c, 0x38, 0x96, 0x79, 0xd7, 0xba, 0x14, 0xfb, 0x55, 0x13, 0xbd, 0x52, 0xfc, 0x91, 0x3f, 0xd0, 0x7e, 0xa, 0xa4, 0x4b, 0xe5, 0x88, 0x26, 0xc9, 0x67}, + {0x0, 0xaf, 0x43, 0xec, 0x86, 0x29, 0xc5, 0x6a, 0x11, 0xbe, 0x52, 0xfd, 0x97, 0x38, 0xd4, 0x7b, 0x22, 0x8d, 0x61, 0xce, 0xa4, 0xb, 0xe7, 0x48, 0x33, 0x9c, 0x70, 0xdf, 0xb5, 0x1a, 0xf6, 0x59, 0x44, 0xeb, 0x7, 0xa8, 0xc2, 0x6d, 0x81, 0x2e, 0x55, 0xfa, 0x16, 0xb9, 0xd3, 0x7c, 0x90, 0x3f, 0x66, 0xc9, 0x25, 0x8a, 0xe0, 0x4f, 0xa3, 0xc, 0x77, 0xd8, 0x34, 0x9b, 0xf1, 0x5e, 0xb2, 0x1d, 0x88, 0x27, 0xcb, 0x64, 0xe, 0xa1, 0x4d, 0xe2, 0x99, 0x36, 0xda, 0x75, 0x1f, 0xb0, 0x5c, 0xf3, 0xaa, 0x5, 0xe9, 0x46, 0x2c, 0x83, 0x6f, 0xc0, 0xbb, 0x14, 0xf8, 0x57, 0x3d, 0x92, 0x7e, 0xd1, 0xcc, 0x63, 0x8f, 0x20, 0x4a, 0xe5, 0x9, 0xa6, 0xdd, 0x72, 0x9e, 0x31, 0x5b, 0xf4, 0x18, 0xb7, 0xee, 0x41, 0xad, 0x2, 0x68, 0xc7, 0x2b, 0x84, 0xff, 0x50, 0xbc, 0x13, 0x79, 0xd6, 0x3a, 0x95, 0xd, 0xa2, 0x4e, 0xe1, 0x8b, 0x24, 0xc8, 0x67, 0x1c, 0xb3, 0x5f, 0xf0, 0x9a, 0x35, 0xd9, 0x76, 0x2f, 0x80, 0x6c, 0xc3, 0xa9, 0x6, 0xea, 0x45, 0x3e, 0x91, 0x7d, 0xd2, 0xb8, 0x17, 0xfb, 0x54, 0x49, 0xe6, 0xa, 0xa5, 0xcf, 0x60, 0x8c, 0x23, 0x58, 0xf7, 0x1b, 0xb4, 0xde, 0x71, 0x9d, 0x32, 0x6b, 0xc4, 0x28, 0x87, 0xed, 0x42, 0xae, 0x1, 0x7a, 0xd5, 0x39, 0x96, 0xfc, 0x53, 0xbf, 0x10, 0x85, 0x2a, 0xc6, 0x69, 0x3, 0xac, 0x40, 0xef, 0x94, 0x3b, 0xd7, 0x78, 0x12, 0xbd, 0x51, 0xfe, 0xa7, 0x8, 0xe4, 0x4b, 0x21, 0x8e, 0x62, 0xcd, 0xb6, 0x19, 0xf5, 0x5a, 0x30, 0x9f, 0x73, 0xdc, 0xc1, 0x6e, 0x82, 0x2d, 0x47, 0xe8, 0x4, 0xab, 0xd0, 0x7f, 0x93, 0x3c, 0x56, 0xf9, 0x15, 0xba, 0xe3, 0x4c, 0xa0, 0xf, 0x65, 0xca, 0x26, 0x89, 0xf2, 0x5d, 0xb1, 0x1e, 0x74, 0xdb, 0x37, 0x98}, + {0x0, 0xb0, 0x7d, 0xcd, 0xfa, 0x4a, 0x87, 0x37, 0xe9, 0x59, 0x94, 0x24, 0x13, 0xa3, 0x6e, 0xde, 0xcf, 0x7f, 0xb2, 0x2, 0x35, 0x85, 0x48, 0xf8, 0x26, 0x96, 0x5b, 0xeb, 0xdc, 0x6c, 0xa1, 0x11, 0x83, 0x33, 0xfe, 0x4e, 0x79, 0xc9, 0x4, 0xb4, 0x6a, 0xda, 0x17, 0xa7, 0x90, 0x20, 0xed, 0x5d, 0x4c, 0xfc, 0x31, 0x81, 0xb6, 0x6, 0xcb, 0x7b, 0xa5, 0x15, 0xd8, 0x68, 0x5f, 0xef, 0x22, 0x92, 0x1b, 0xab, 0x66, 0xd6, 0xe1, 0x51, 0x9c, 0x2c, 0xf2, 0x42, 0x8f, 0x3f, 0x8, 0xb8, 0x75, 0xc5, 0xd4, 0x64, 0xa9, 0x19, 0x2e, 0x9e, 0x53, 0xe3, 0x3d, 0x8d, 0x40, 0xf0, 0xc7, 0x77, 0xba, 0xa, 0x98, 0x28, 0xe5, 0x55, 0x62, 0xd2, 0x1f, 0xaf, 0x71, 0xc1, 0xc, 0xbc, 0x8b, 0x3b, 0xf6, 0x46, 0x57, 0xe7, 0x2a, 0x9a, 0xad, 0x1d, 0xd0, 0x60, 0xbe, 0xe, 0xc3, 0x73, 0x44, 0xf4, 0x39, 0x89, 0x36, 0x86, 0x4b, 0xfb, 0xcc, 0x7c, 0xb1, 0x1, 0xdf, 0x6f, 0xa2, 0x12, 0x25, 0x95, 0x58, 0xe8, 0xf9, 0x49, 0x84, 0x34, 0x3, 0xb3, 0x7e, 0xce, 0x10, 0xa0, 0x6d, 0xdd, 0xea, 0x5a, 0x97, 0x27, 0xb5, 0x5, 0xc8, 0x78, 0x4f, 0xff, 0x32, 0x82, 0x5c, 0xec, 0x21, 0x91, 0xa6, 0x16, 0xdb, 0x6b, 0x7a, 0xca, 0x7, 0xb7, 0x80, 0x30, 0xfd, 0x4d, 0x93, 0x23, 0xee, 0x5e, 0x69, 0xd9, 0x14, 0xa4, 0x2d, 0x9d, 0x50, 0xe0, 0xd7, 0x67, 0xaa, 0x1a, 0xc4, 0x74, 0xb9, 0x9, 0x3e, 0x8e, 0x43, 0xf3, 0xe2, 0x52, 0x9f, 0x2f, 0x18, 0xa8, 0x65, 0xd5, 0xb, 0xbb, 0x76, 0xc6, 0xf1, 0x41, 0x8c, 0x3c, 0xae, 0x1e, 0xd3, 0x63, 0x54, 0xe4, 0x29, 0x99, 0x47, 0xf7, 0x3a, 0x8a, 0xbd, 0xd, 0xc0, 0x70, 0x61, 0xd1, 0x1c, 0xac, 0x9b, 0x2b, 0xe6, 0x56, 0x88, 0x38, 0xf5, 0x45, 0x72, 0xc2, 0xf, 0xbf}, + {0x0, 0xb1, 0x7f, 0xce, 0xfe, 0x4f, 0x81, 0x30, 0xe1, 0x50, 0x9e, 0x2f, 0x1f, 0xae, 0x60, 0xd1, 0xdf, 0x6e, 0xa0, 0x11, 0x21, 0x90, 0x5e, 0xef, 0x3e, 0x8f, 0x41, 0xf0, 0xc0, 0x71, 0xbf, 0xe, 0xa3, 0x12, 0xdc, 0x6d, 0x5d, 0xec, 0x22, 0x93, 0x42, 0xf3, 0x3d, 0x8c, 0xbc, 0xd, 0xc3, 0x72, 0x7c, 0xcd, 0x3, 0xb2, 0x82, 0x33, 0xfd, 0x4c, 0x9d, 0x2c, 0xe2, 0x53, 0x63, 0xd2, 0x1c, 0xad, 0x5b, 0xea, 0x24, 0x95, 0xa5, 0x14, 0xda, 0x6b, 0xba, 0xb, 0xc5, 0x74, 0x44, 0xf5, 0x3b, 0x8a, 0x84, 0x35, 0xfb, 0x4a, 0x7a, 0xcb, 0x5, 0xb4, 0x65, 0xd4, 0x1a, 0xab, 0x9b, 0x2a, 0xe4, 0x55, 0xf8, 0x49, 0x87, 0x36, 0x6, 0xb7, 0x79, 0xc8, 0x19, 0xa8, 0x66, 0xd7, 0xe7, 0x56, 0x98, 0x29, 0x27, 0x96, 0x58, 0xe9, 0xd9, 0x68, 0xa6, 0x17, 0xc6, 0x77, 0xb9, 0x8, 0x38, 0x89, 0x47, 0xf6, 0xb6, 0x7, 0xc9, 0x78, 0x48, 0xf9, 0x37, 0x86, 0x57, 0xe6, 0x28, 0x99, 0xa9, 0x18, 0xd6, 0x67, 0x69, 0xd8, 0x16, 0xa7, 0x97, 0x26, 0xe8, 0x59, 0x88, 0x39, 0xf7, 0x46, 0x76, 0xc7, 0x9, 0xb8, 0x15, 0xa4, 0x6a, 0xdb, 0xeb, 0x5a, 0x94, 0x25, 0xf4, 0x45, 0x8b, 0x3a, 0xa, 0xbb, 0x75, 0xc4, 0xca, 0x7b, 0xb5, 0x4, 0x34, 0x85, 0x4b, 0xfa, 0x2b, 0x9a, 0x54, 0xe5, 0xd5, 0x64, 0xaa, 0x1b, 0xed, 0x5c, 0x92, 0x23, 0x13, 0xa2, 0x6c, 0xdd, 0xc, 0xbd, 0x73, 0xc2, 0xf2, 0x43, 0x8d, 0x3c, 0x32, 0x83, 0x4d, 0xfc, 0xcc, 0x7d, 0xb3, 0x2, 0xd3, 0x62, 0xac, 0x1d, 0x2d, 0x9c, 0x52, 0xe3, 0x4e, 0xff, 0x31, 0x80, 0xb0, 0x1, 0xcf, 0x7e, 0xaf, 0x1e, 0xd0, 0x61, 0x51, 0xe0, 0x2e, 0x9f, 0x91, 0x20, 0xee, 0x5f, 0x6f, 0xde, 0x10, 0xa1, 0x70, 0xc1, 0xf, 0xbe, 0x8e, 0x3f, 0xf1, 0x40}, + {0x0, 0xb2, 0x79, 0xcb, 0xf2, 0x40, 0x8b, 0x39, 0xf9, 0x4b, 0x80, 0x32, 0xb, 0xb9, 0x72, 0xc0, 0xef, 0x5d, 0x96, 0x24, 0x1d, 0xaf, 0x64, 0xd6, 0x16, 0xa4, 0x6f, 0xdd, 0xe4, 0x56, 0x9d, 0x2f, 0xc3, 0x71, 0xba, 0x8, 0x31, 0x83, 0x48, 0xfa, 0x3a, 0x88, 0x43, 0xf1, 0xc8, 0x7a, 0xb1, 0x3, 0x2c, 0x9e, 0x55, 0xe7, 0xde, 0x6c, 0xa7, 0x15, 0xd5, 0x67, 0xac, 0x1e, 0x27, 0x95, 0x5e, 0xec, 0x9b, 0x29, 0xe2, 0x50, 0x69, 0xdb, 0x10, 0xa2, 0x62, 0xd0, 0x1b, 0xa9, 0x90, 0x22, 0xe9, 0x5b, 0x74, 0xc6, 0xd, 0xbf, 0x86, 0x34, 0xff, 0x4d, 0x8d, 0x3f, 0xf4, 0x46, 0x7f, 0xcd, 0x6, 0xb4, 0x58, 0xea, 0x21, 0x93, 0xaa, 0x18, 0xd3, 0x61, 0xa1, 0x13, 0xd8, 0x6a, 0x53, 0xe1, 0x2a, 0x98, 0xb7, 0x5, 0xce, 0x7c, 0x45, 0xf7, 0x3c, 0x8e, 0x4e, 0xfc, 0x37, 0x85, 0xbc, 0xe, 0xc5, 0x77, 0x2b, 0x99, 0x52, 0xe0, 0xd9, 0x6b, 0xa0, 0x12, 0xd2, 0x60, 0xab, 0x19, 0x20, 0x92, 0x59, 0xeb, 0xc4, 0x76, 0xbd, 0xf, 0x36, 0x84, 0x4f, 0xfd, 0x3d, 0x8f, 0x44, 0xf6, 0xcf, 0x7d, 0xb6, 0x4, 0xe8, 0x5a, 0x91, 0x23, 0x1a, 0xa8, 0x63, 0xd1, 0x11, 0xa3, 0x68, 0xda, 0xe3, 0x51, 0x9a, 0x28, 0x7, 0xb5, 0x7e, 0xcc, 0xf5, 0x47, 0x8c, 0x3e, 0xfe, 0x4c, 0x87, 0x35, 0xc, 0xbe, 0x75, 0xc7, 0xb0, 0x2, 0xc9, 0x7b, 0x42, 0xf0, 0x3b, 0x89, 0x49, 0xfb, 0x30, 0x82, 0xbb, 0x9, 0xc2, 0x70, 0x5f, 0xed, 0x26, 0x94, 0xad, 0x1f, 0xd4, 0x66, 0xa6, 0x14, 0xdf, 0x6d, 0x54, 0xe6, 0x2d, 0x9f, 0x73, 0xc1, 0xa, 0xb8, 0x81, 0x33, 0xf8, 0x4a, 0x8a, 0x38, 0xf3, 0x41, 0x78, 0xca, 0x1, 0xb3, 0x9c, 0x2e, 0xe5, 0x57, 0x6e, 0xdc, 0x17, 0xa5, 0x65, 0xd7, 0x1c, 0xae, 0x97, 0x25, 0xee, 0x5c}, + {0x0, 0xb3, 0x7b, 0xc8, 0xf6, 0x45, 0x8d, 0x3e, 0xf1, 0x42, 0x8a, 0x39, 0x7, 0xb4, 0x7c, 0xcf, 0xff, 0x4c, 0x84, 0x37, 0x9, 0xba, 0x72, 0xc1, 0xe, 0xbd, 0x75, 0xc6, 0xf8, 0x4b, 0x83, 0x30, 0xe3, 0x50, 0x98, 0x2b, 0x15, 0xa6, 0x6e, 0xdd, 0x12, 0xa1, 0x69, 0xda, 0xe4, 0x57, 0x9f, 0x2c, 0x1c, 0xaf, 0x67, 0xd4, 0xea, 0x59, 0x91, 0x22, 0xed, 0x5e, 0x96, 0x25, 0x1b, 0xa8, 0x60, 0xd3, 0xdb, 0x68, 0xa0, 0x13, 0x2d, 0x9e, 0x56, 0xe5, 0x2a, 0x99, 0x51, 0xe2, 0xdc, 0x6f, 0xa7, 0x14, 0x24, 0x97, 0x5f, 0xec, 0xd2, 0x61, 0xa9, 0x1a, 0xd5, 0x66, 0xae, 0x1d, 0x23, 0x90, 0x58, 0xeb, 0x38, 0x8b, 0x43, 0xf0, 0xce, 0x7d, 0xb5, 0x6, 0xc9, 0x7a, 0xb2, 0x1, 0x3f, 0x8c, 0x44, 0xf7, 0xc7, 0x74, 0xbc, 0xf, 0x31, 0x82, 0x4a, 0xf9, 0x36, 0x85, 0x4d, 0xfe, 0xc0, 0x73, 0xbb, 0x8, 0xab, 0x18, 0xd0, 0x63, 0x5d, 0xee, 0x26, 0x95, 0x5a, 0xe9, 0x21, 0x92, 0xac, 0x1f, 0xd7, 0x64, 0x54, 0xe7, 0x2f, 0x9c, 0xa2, 0x11, 0xd9, 0x6a, 0xa5, 0x16, 0xde, 0x6d, 0x53, 0xe0, 0x28, 0x9b, 0x48, 0xfb, 0x33, 0x80, 0xbe, 0xd, 0xc5, 0x76, 0xb9, 0xa, 0xc2, 0x71, 0x4f, 0xfc, 0x34, 0x87, 0xb7, 0x4, 0xcc, 0x7f, 0x41, 0xf2, 0x3a, 0x89, 0x46, 0xf5, 0x3d, 0x8e, 0xb0, 0x3, 0xcb, 0x78, 0x70, 0xc3, 0xb, 0xb8, 0x86, 0x35, 0xfd, 0x4e, 0x81, 0x32, 0xfa, 0x49, 0x77, 0xc4, 0xc, 0xbf, 0x8f, 0x3c, 0xf4, 0x47, 0x79, 0xca, 0x2, 0xb1, 0x7e, 0xcd, 0x5, 0xb6, 0x88, 0x3b, 0xf3, 0x40, 0x93, 0x20, 0xe8, 0x5b, 0x65, 0xd6, 0x1e, 0xad, 0x62, 0xd1, 0x19, 0xaa, 0x94, 0x27, 0xef, 0x5c, 0x6c, 0xdf, 0x17, 0xa4, 0x9a, 0x29, 0xe1, 0x52, 0x9d, 0x2e, 0xe6, 0x55, 0x6b, 0xd8, 0x10, 0xa3}, + {0x0, 0xb4, 0x75, 0xc1, 0xea, 0x5e, 0x9f, 0x2b, 0xc9, 0x7d, 0xbc, 0x8, 0x23, 0x97, 0x56, 0xe2, 0x8f, 0x3b, 0xfa, 0x4e, 0x65, 0xd1, 0x10, 0xa4, 0x46, 0xf2, 0x33, 0x87, 0xac, 0x18, 0xd9, 0x6d, 0x3, 0xb7, 0x76, 0xc2, 0xe9, 0x5d, 0x9c, 0x28, 0xca, 0x7e, 0xbf, 0xb, 0x20, 0x94, 0x55, 0xe1, 0x8c, 0x38, 0xf9, 0x4d, 0x66, 0xd2, 0x13, 0xa7, 0x45, 0xf1, 0x30, 0x84, 0xaf, 0x1b, 0xda, 0x6e, 0x6, 0xb2, 0x73, 0xc7, 0xec, 0x58, 0x99, 0x2d, 0xcf, 0x7b, 0xba, 0xe, 0x25, 0x91, 0x50, 0xe4, 0x89, 0x3d, 0xfc, 0x48, 0x63, 0xd7, 0x16, 0xa2, 0x40, 0xf4, 0x35, 0x81, 0xaa, 0x1e, 0xdf, 0x6b, 0x5, 0xb1, 0x70, 0xc4, 0xef, 0x5b, 0x9a, 0x2e, 0xcc, 0x78, 0xb9, 0xd, 0x26, 0x92, 0x53, 0xe7, 0x8a, 0x3e, 0xff, 0x4b, 0x60, 0xd4, 0x15, 0xa1, 0x43, 0xf7, 0x36, 0x82, 0xa9, 0x1d, 0xdc, 0x68, 0xc, 0xb8, 0x79, 0xcd, 0xe6, 0x52, 0x93, 0x27, 0xc5, 0x71, 0xb0, 0x4, 0x2f, 0x9b, 0x5a, 0xee, 0x83, 0x37, 0xf6, 0x42, 0x69, 0xdd, 0x1c, 0xa8, 0x4a, 0xfe, 0x3f, 0x8b, 0xa0, 0x14, 0xd5, 0x61, 0xf, 0xbb, 0x7a, 0xce, 0xe5, 0x51, 0x90, 0x24, 0xc6, 0x72, 0xb3, 0x7, 0x2c, 0x98, 0x59, 0xed, 0x80, 0x34, 0xf5, 0x41, 0x6a, 0xde, 0x1f, 0xab, 0x49, 0xfd, 0x3c, 0x88, 0xa3, 0x17, 0xd6, 0x62, 0xa, 0xbe, 0x7f, 0xcb, 0xe0, 0x54, 0x95, 0x21, 0xc3, 0x77, 0xb6, 0x2, 0x29, 0x9d, 0x5c, 0xe8, 0x85, 0x31, 0xf0, 0x44, 0x6f, 0xdb, 0x1a, 0xae, 0x4c, 0xf8, 0x39, 0x8d, 0xa6, 0x12, 0xd3, 0x67, 0x9, 0xbd, 0x7c, 0xc8, 0xe3, 0x57, 0x96, 0x22, 0xc0, 0x74, 0xb5, 0x1, 0x2a, 0x9e, 0x5f, 0xeb, 0x86, 0x32, 0xf3, 0x47, 0x6c, 0xd8, 0x19, 0xad, 0x4f, 0xfb, 0x3a, 0x8e, 0xa5, 0x11, 0xd0, 0x64}, + {0x0, 0xb5, 0x77, 0xc2, 0xee, 0x5b, 0x99, 0x2c, 0xc1, 0x74, 0xb6, 0x3, 0x2f, 0x9a, 0x58, 0xed, 0x9f, 0x2a, 0xe8, 0x5d, 0x71, 0xc4, 0x6, 0xb3, 0x5e, 0xeb, 0x29, 0x9c, 0xb0, 0x5, 0xc7, 0x72, 0x23, 0x96, 0x54, 0xe1, 0xcd, 0x78, 0xba, 0xf, 0xe2, 0x57, 0x95, 0x20, 0xc, 0xb9, 0x7b, 0xce, 0xbc, 0x9, 0xcb, 0x7e, 0x52, 0xe7, 0x25, 0x90, 0x7d, 0xc8, 0xa, 0xbf, 0x93, 0x26, 0xe4, 0x51, 0x46, 0xf3, 0x31, 0x84, 0xa8, 0x1d, 0xdf, 0x6a, 0x87, 0x32, 0xf0, 0x45, 0x69, 0xdc, 0x1e, 0xab, 0xd9, 0x6c, 0xae, 0x1b, 0x37, 0x82, 0x40, 0xf5, 0x18, 0xad, 0x6f, 0xda, 0xf6, 0x43, 0x81, 0x34, 0x65, 0xd0, 0x12, 0xa7, 0x8b, 0x3e, 0xfc, 0x49, 0xa4, 0x11, 0xd3, 0x66, 0x4a, 0xff, 0x3d, 0x88, 0xfa, 0x4f, 0x8d, 0x38, 0x14, 0xa1, 0x63, 0xd6, 0x3b, 0x8e, 0x4c, 0xf9, 0xd5, 0x60, 0xa2, 0x17, 0x8c, 0x39, 0xfb, 0x4e, 0x62, 0xd7, 0x15, 0xa0, 0x4d, 0xf8, 0x3a, 0x8f, 0xa3, 0x16, 0xd4, 0x61, 0x13, 0xa6, 0x64, 0xd1, 0xfd, 0x48, 0x8a, 0x3f, 0xd2, 0x67, 0xa5, 0x10, 0x3c, 0x89, 0x4b, 0xfe, 0xaf, 0x1a, 0xd8, 0x6d, 0x41, 0xf4, 0x36, 0x83, 0x6e, 0xdb, 0x19, 0xac, 0x80, 0x35, 0xf7, 0x42, 0x30, 0x85, 0x47, 0xf2, 0xde, 0x6b, 0xa9, 0x1c, 0xf1, 0x44, 0x86, 0x33, 0x1f, 0xaa, 0x68, 0xdd, 0xca, 0x7f, 0xbd, 0x8, 0x24, 0x91, 0x53, 0xe6, 0xb, 0xbe, 0x7c, 0xc9, 0xe5, 0x50, 0x92, 0x27, 0x55, 0xe0, 0x22, 0x97, 0xbb, 0xe, 0xcc, 0x79, 0x94, 0x21, 0xe3, 0x56, 0x7a, 0xcf, 0xd, 0xb8, 0xe9, 0x5c, 0x9e, 0x2b, 0x7, 0xb2, 0x70, 0xc5, 0x28, 0x9d, 0x5f, 0xea, 0xc6, 0x73, 0xb1, 0x4, 0x76, 0xc3, 0x1, 0xb4, 0x98, 0x2d, 0xef, 0x5a, 0xb7, 0x2, 0xc0, 0x75, 0x59, 0xec, 0x2e, 0x9b}, + {0x0, 0xb6, 0x71, 0xc7, 0xe2, 0x54, 0x93, 0x25, 0xd9, 0x6f, 0xa8, 0x1e, 0x3b, 0x8d, 0x4a, 0xfc, 0xaf, 0x19, 0xde, 0x68, 0x4d, 0xfb, 0x3c, 0x8a, 0x76, 0xc0, 0x7, 0xb1, 0x94, 0x22, 0xe5, 0x53, 0x43, 0xf5, 0x32, 0x84, 0xa1, 0x17, 0xd0, 0x66, 0x9a, 0x2c, 0xeb, 0x5d, 0x78, 0xce, 0x9, 0xbf, 0xec, 0x5a, 0x9d, 0x2b, 0xe, 0xb8, 0x7f, 0xc9, 0x35, 0x83, 0x44, 0xf2, 0xd7, 0x61, 0xa6, 0x10, 0x86, 0x30, 0xf7, 0x41, 0x64, 0xd2, 0x15, 0xa3, 0x5f, 0xe9, 0x2e, 0x98, 0xbd, 0xb, 0xcc, 0x7a, 0x29, 0x9f, 0x58, 0xee, 0xcb, 0x7d, 0xba, 0xc, 0xf0, 0x46, 0x81, 0x37, 0x12, 0xa4, 0x63, 0xd5, 0xc5, 0x73, 0xb4, 0x2, 0x27, 0x91, 0x56, 0xe0, 0x1c, 0xaa, 0x6d, 0xdb, 0xfe, 0x48, 0x8f, 0x39, 0x6a, 0xdc, 0x1b, 0xad, 0x88, 0x3e, 0xf9, 0x4f, 0xb3, 0x5, 0xc2, 0x74, 0x51, 0xe7, 0x20, 0x96, 0x11, 0xa7, 0x60, 0xd6, 0xf3, 0x45, 0x82, 0x34, 0xc8, 0x7e, 0xb9, 0xf, 0x2a, 0x9c, 0x5b, 0xed, 0xbe, 0x8, 0xcf, 0x79, 0x5c, 0xea, 0x2d, 0x9b, 0x67, 0xd1, 0x16, 0xa0, 0x85, 0x33, 0xf4, 0x42, 0x52, 0xe4, 0x23, 0x95, 0xb0, 0x6, 0xc1, 0x77, 0x8b, 0x3d, 0xfa, 0x4c, 0x69, 0xdf, 0x18, 0xae, 0xfd, 0x4b, 0x8c, 0x3a, 0x1f, 0xa9, 0x6e, 0xd8, 0x24, 0x92, 0x55, 0xe3, 0xc6, 0x70, 0xb7, 0x1, 0x97, 0x21, 0xe6, 0x50, 0x75, 0xc3, 0x4, 0xb2, 0x4e, 0xf8, 0x3f, 0x89, 0xac, 0x1a, 0xdd, 0x6b, 0x38, 0x8e, 0x49, 0xff, 0xda, 0x6c, 0xab, 0x1d, 0xe1, 0x57, 0x90, 0x26, 0x3, 0xb5, 0x72, 0xc4, 0xd4, 0x62, 0xa5, 0x13, 0x36, 0x80, 0x47, 0xf1, 0xd, 0xbb, 0x7c, 0xca, 0xef, 0x59, 0x9e, 0x28, 0x7b, 0xcd, 0xa, 0xbc, 0x99, 0x2f, 0xe8, 0x5e, 0xa2, 0x14, 0xd3, 0x65, 0x40, 0xf6, 0x31, 0x87}, + {0x0, 0xb7, 0x73, 0xc4, 0xe6, 0x51, 0x95, 0x22, 0xd1, 0x66, 0xa2, 0x15, 0x37, 0x80, 0x44, 0xf3, 0xbf, 0x8, 0xcc, 0x7b, 0x59, 0xee, 0x2a, 0x9d, 0x6e, 0xd9, 0x1d, 0xaa, 0x88, 0x3f, 0xfb, 0x4c, 0x63, 0xd4, 0x10, 0xa7, 0x85, 0x32, 0xf6, 0x41, 0xb2, 0x5, 0xc1, 0x76, 0x54, 0xe3, 0x27, 0x90, 0xdc, 0x6b, 0xaf, 0x18, 0x3a, 0x8d, 0x49, 0xfe, 0xd, 0xba, 0x7e, 0xc9, 0xeb, 0x5c, 0x98, 0x2f, 0xc6, 0x71, 0xb5, 0x2, 0x20, 0x97, 0x53, 0xe4, 0x17, 0xa0, 0x64, 0xd3, 0xf1, 0x46, 0x82, 0x35, 0x79, 0xce, 0xa, 0xbd, 0x9f, 0x28, 0xec, 0x5b, 0xa8, 0x1f, 0xdb, 0x6c, 0x4e, 0xf9, 0x3d, 0x8a, 0xa5, 0x12, 0xd6, 0x61, 0x43, 0xf4, 0x30, 0x87, 0x74, 0xc3, 0x7, 0xb0, 0x92, 0x25, 0xe1, 0x56, 0x1a, 0xad, 0x69, 0xde, 0xfc, 0x4b, 0x8f, 0x38, 0xcb, 0x7c, 0xb8, 0xf, 0x2d, 0x9a, 0x5e, 0xe9, 0x91, 0x26, 0xe2, 0x55, 0x77, 0xc0, 0x4, 0xb3, 0x40, 0xf7, 0x33, 0x84, 0xa6, 0x11, 0xd5, 0x62, 0x2e, 0x99, 0x5d, 0xea, 0xc8, 0x7f, 0xbb, 0xc, 0xff, 0x48, 0x8c, 0x3b, 0x19, 0xae, 0x6a, 0xdd, 0xf2, 0x45, 0x81, 0x36, 0x14, 0xa3, 0x67, 0xd0, 0x23, 0x94, 0x50, 0xe7, 0xc5, 0x72, 0xb6, 0x1, 0x4d, 0xfa, 0x3e, 0x89, 0xab, 0x1c, 0xd8, 0x6f, 0x9c, 0x2b, 0xef, 0x58, 0x7a, 0xcd, 0x9, 0xbe, 0x57, 0xe0, 0x24, 0x93, 0xb1, 0x6, 0xc2, 0x75, 0x86, 0x31, 0xf5, 0x42, 0x60, 0xd7, 0x13, 0xa4, 0xe8, 0x5f, 0x9b, 0x2c, 0xe, 0xb9, 0x7d, 0xca, 0x39, 0x8e, 0x4a, 0xfd, 0xdf, 0x68, 0xac, 0x1b, 0x34, 0x83, 0x47, 0xf0, 0xd2, 0x65, 0xa1, 0x16, 0xe5, 0x52, 0x96, 0x21, 0x3, 0xb4, 0x70, 0xc7, 0x8b, 0x3c, 0xf8, 0x4f, 0x6d, 0xda, 0x1e, 0xa9, 0x5a, 0xed, 0x29, 0x9e, 0xbc, 0xb, 0xcf, 0x78}, + {0x0, 0xb8, 0x6d, 0xd5, 0xda, 0x62, 0xb7, 0xf, 0xa9, 0x11, 0xc4, 0x7c, 0x73, 0xcb, 0x1e, 0xa6, 0x4f, 0xf7, 0x22, 0x9a, 0x95, 0x2d, 0xf8, 0x40, 0xe6, 0x5e, 0x8b, 0x33, 0x3c, 0x84, 0x51, 0xe9, 0x9e, 0x26, 0xf3, 0x4b, 0x44, 0xfc, 0x29, 0x91, 0x37, 0x8f, 0x5a, 0xe2, 0xed, 0x55, 0x80, 0x38, 0xd1, 0x69, 0xbc, 0x4, 0xb, 0xb3, 0x66, 0xde, 0x78, 0xc0, 0x15, 0xad, 0xa2, 0x1a, 0xcf, 0x77, 0x21, 0x99, 0x4c, 0xf4, 0xfb, 0x43, 0x96, 0x2e, 0x88, 0x30, 0xe5, 0x5d, 0x52, 0xea, 0x3f, 0x87, 0x6e, 0xd6, 0x3, 0xbb, 0xb4, 0xc, 0xd9, 0x61, 0xc7, 0x7f, 0xaa, 0x12, 0x1d, 0xa5, 0x70, 0xc8, 0xbf, 0x7, 0xd2, 0x6a, 0x65, 0xdd, 0x8, 0xb0, 0x16, 0xae, 0x7b, 0xc3, 0xcc, 0x74, 0xa1, 0x19, 0xf0, 0x48, 0x9d, 0x25, 0x2a, 0x92, 0x47, 0xff, 0x59, 0xe1, 0x34, 0x8c, 0x83, 0x3b, 0xee, 0x56, 0x42, 0xfa, 0x2f, 0x97, 0x98, 0x20, 0xf5, 0x4d, 0xeb, 0x53, 0x86, 0x3e, 0x31, 0x89, 0x5c, 0xe4, 0xd, 0xb5, 0x60, 0xd8, 0xd7, 0x6f, 0xba, 0x2, 0xa4, 0x1c, 0xc9, 0x71, 0x7e, 0xc6, 0x13, 0xab, 0xdc, 0x64, 0xb1, 0x9, 0x6, 0xbe, 0x6b, 0xd3, 0x75, 0xcd, 0x18, 0xa0, 0xaf, 0x17, 0xc2, 0x7a, 0x93, 0x2b, 0xfe, 0x46, 0x49, 0xf1, 0x24, 0x9c, 0x3a, 0x82, 0x57, 0xef, 0xe0, 0x58, 0x8d, 0x35, 0x63, 0xdb, 0xe, 0xb6, 0xb9, 0x1, 0xd4, 0x6c, 0xca, 0x72, 0xa7, 0x1f, 0x10, 0xa8, 0x7d, 0xc5, 0x2c, 0x94, 0x41, 0xf9, 0xf6, 0x4e, 0x9b, 0x23, 0x85, 0x3d, 0xe8, 0x50, 0x5f, 0xe7, 0x32, 0x8a, 0xfd, 0x45, 0x90, 0x28, 0x27, 0x9f, 0x4a, 0xf2, 0x54, 0xec, 0x39, 0x81, 0x8e, 0x36, 0xe3, 0x5b, 0xb2, 0xa, 0xdf, 0x67, 0x68, 0xd0, 0x5, 0xbd, 0x1b, 0xa3, 0x76, 0xce, 0xc1, 0x79, 0xac, 0x14}, + {0x0, 0xb9, 0x6f, 0xd6, 0xde, 0x67, 0xb1, 0x8, 0xa1, 0x18, 0xce, 0x77, 0x7f, 0xc6, 0x10, 0xa9, 0x5f, 0xe6, 0x30, 0x89, 0x81, 0x38, 0xee, 0x57, 0xfe, 0x47, 0x91, 0x28, 0x20, 0x99, 0x4f, 0xf6, 0xbe, 0x7, 0xd1, 0x68, 0x60, 0xd9, 0xf, 0xb6, 0x1f, 0xa6, 0x70, 0xc9, 0xc1, 0x78, 0xae, 0x17, 0xe1, 0x58, 0x8e, 0x37, 0x3f, 0x86, 0x50, 0xe9, 0x40, 0xf9, 0x2f, 0x96, 0x9e, 0x27, 0xf1, 0x48, 0x61, 0xd8, 0xe, 0xb7, 0xbf, 0x6, 0xd0, 0x69, 0xc0, 0x79, 0xaf, 0x16, 0x1e, 0xa7, 0x71, 0xc8, 0x3e, 0x87, 0x51, 0xe8, 0xe0, 0x59, 0x8f, 0x36, 0x9f, 0x26, 0xf0, 0x49, 0x41, 0xf8, 0x2e, 0x97, 0xdf, 0x66, 0xb0, 0x9, 0x1, 0xb8, 0x6e, 0xd7, 0x7e, 0xc7, 0x11, 0xa8, 0xa0, 0x19, 0xcf, 0x76, 0x80, 0x39, 0xef, 0x56, 0x5e, 0xe7, 0x31, 0x88, 0x21, 0x98, 0x4e, 0xf7, 0xff, 0x46, 0x90, 0x29, 0xc2, 0x7b, 0xad, 0x14, 0x1c, 0xa5, 0x73, 0xca, 0x63, 0xda, 0xc, 0xb5, 0xbd, 0x4, 0xd2, 0x6b, 0x9d, 0x24, 0xf2, 0x4b, 0x43, 0xfa, 0x2c, 0x95, 0x3c, 0x85, 0x53, 0xea, 0xe2, 0x5b, 0x8d, 0x34, 0x7c, 0xc5, 0x13, 0xaa, 0xa2, 0x1b, 0xcd, 0x74, 0xdd, 0x64, 0xb2, 0xb, 0x3, 0xba, 0x6c, 0xd5, 0x23, 0x9a, 0x4c, 0xf5, 0xfd, 0x44, 0x92, 0x2b, 0x82, 0x3b, 0xed, 0x54, 0x5c, 0xe5, 0x33, 0x8a, 0xa3, 0x1a, 0xcc, 0x75, 0x7d, 0xc4, 0x12, 0xab, 0x2, 0xbb, 0x6d, 0xd4, 0xdc, 0x65, 0xb3, 0xa, 0xfc, 0x45, 0x93, 0x2a, 0x22, 0x9b, 0x4d, 0xf4, 0x5d, 0xe4, 0x32, 0x8b, 0x83, 0x3a, 0xec, 0x55, 0x1d, 0xa4, 0x72, 0xcb, 0xc3, 0x7a, 0xac, 0x15, 0xbc, 0x5, 0xd3, 0x6a, 0x62, 0xdb, 0xd, 0xb4, 0x42, 0xfb, 0x2d, 0x94, 0x9c, 0x25, 0xf3, 0x4a, 0xe3, 0x5a, 0x8c, 0x35, 0x3d, 0x84, 0x52, 0xeb}, + {0x0, 0xba, 0x69, 0xd3, 0xd2, 0x68, 0xbb, 0x1, 0xb9, 0x3, 0xd0, 0x6a, 0x6b, 0xd1, 0x2, 0xb8, 0x6f, 0xd5, 0x6, 0xbc, 0xbd, 0x7, 0xd4, 0x6e, 0xd6, 0x6c, 0xbf, 0x5, 0x4, 0xbe, 0x6d, 0xd7, 0xde, 0x64, 0xb7, 0xd, 0xc, 0xb6, 0x65, 0xdf, 0x67, 0xdd, 0xe, 0xb4, 0xb5, 0xf, 0xdc, 0x66, 0xb1, 0xb, 0xd8, 0x62, 0x63, 0xd9, 0xa, 0xb0, 0x8, 0xb2, 0x61, 0xdb, 0xda, 0x60, 0xb3, 0x9, 0xa1, 0x1b, 0xc8, 0x72, 0x73, 0xc9, 0x1a, 0xa0, 0x18, 0xa2, 0x71, 0xcb, 0xca, 0x70, 0xa3, 0x19, 0xce, 0x74, 0xa7, 0x1d, 0x1c, 0xa6, 0x75, 0xcf, 0x77, 0xcd, 0x1e, 0xa4, 0xa5, 0x1f, 0xcc, 0x76, 0x7f, 0xc5, 0x16, 0xac, 0xad, 0x17, 0xc4, 0x7e, 0xc6, 0x7c, 0xaf, 0x15, 0x14, 0xae, 0x7d, 0xc7, 0x10, 0xaa, 0x79, 0xc3, 0xc2, 0x78, 0xab, 0x11, 0xa9, 0x13, 0xc0, 0x7a, 0x7b, 0xc1, 0x12, 0xa8, 0x5f, 0xe5, 0x36, 0x8c, 0x8d, 0x37, 0xe4, 0x5e, 0xe6, 0x5c, 0x8f, 0x35, 0x34, 0x8e, 0x5d, 0xe7, 0x30, 0x8a, 0x59, 0xe3, 0xe2, 0x58, 0x8b, 0x31, 0x89, 0x33, 0xe0, 0x5a, 0x5b, 0xe1, 0x32, 0x88, 0x81, 0x3b, 0xe8, 0x52, 0x53, 0xe9, 0x3a, 0x80, 0x38, 0x82, 0x51, 0xeb, 0xea, 0x50, 0x83, 0x39, 0xee, 0x54, 0x87, 0x3d, 0x3c, 0x86, 0x55, 0xef, 0x57, 0xed, 0x3e, 0x84, 0x85, 0x3f, 0xec, 0x56, 0xfe, 0x44, 0x97, 0x2d, 0x2c, 0x96, 0x45, 0xff, 0x47, 0xfd, 0x2e, 0x94, 0x95, 0x2f, 0xfc, 0x46, 0x91, 0x2b, 0xf8, 0x42, 0x43, 0xf9, 0x2a, 0x90, 0x28, 0x92, 0x41, 0xfb, 0xfa, 0x40, 0x93, 0x29, 0x20, 0x9a, 0x49, 0xf3, 0xf2, 0x48, 0x9b, 0x21, 0x99, 0x23, 0xf0, 0x4a, 0x4b, 0xf1, 0x22, 0x98, 0x4f, 0xf5, 0x26, 0x9c, 0x9d, 0x27, 0xf4, 0x4e, 0xf6, 0x4c, 0x9f, 0x25, 0x24, 0x9e, 0x4d, 0xf7}, + {0x0, 0xbb, 0x6b, 0xd0, 0xd6, 0x6d, 0xbd, 0x6, 0xb1, 0xa, 0xda, 0x61, 0x67, 0xdc, 0xc, 0xb7, 0x7f, 0xc4, 0x14, 0xaf, 0xa9, 0x12, 0xc2, 0x79, 0xce, 0x75, 0xa5, 0x1e, 0x18, 0xa3, 0x73, 0xc8, 0xfe, 0x45, 0x95, 0x2e, 0x28, 0x93, 0x43, 0xf8, 0x4f, 0xf4, 0x24, 0x9f, 0x99, 0x22, 0xf2, 0x49, 0x81, 0x3a, 0xea, 0x51, 0x57, 0xec, 0x3c, 0x87, 0x30, 0x8b, 0x5b, 0xe0, 0xe6, 0x5d, 0x8d, 0x36, 0xe1, 0x5a, 0x8a, 0x31, 0x37, 0x8c, 0x5c, 0xe7, 0x50, 0xeb, 0x3b, 0x80, 0x86, 0x3d, 0xed, 0x56, 0x9e, 0x25, 0xf5, 0x4e, 0x48, 0xf3, 0x23, 0x98, 0x2f, 0x94, 0x44, 0xff, 0xf9, 0x42, 0x92, 0x29, 0x1f, 0xa4, 0x74, 0xcf, 0xc9, 0x72, 0xa2, 0x19, 0xae, 0x15, 0xc5, 0x7e, 0x78, 0xc3, 0x13, 0xa8, 0x60, 0xdb, 0xb, 0xb0, 0xb6, 0xd, 0xdd, 0x66, 0xd1, 0x6a, 0xba, 0x1, 0x7, 0xbc, 0x6c, 0xd7, 0xdf, 0x64, 0xb4, 0xf, 0x9, 0xb2, 0x62, 0xd9, 0x6e, 0xd5, 0x5, 0xbe, 0xb8, 0x3, 0xd3, 0x68, 0xa0, 0x1b, 0xcb, 0x70, 0x76, 0xcd, 0x1d, 0xa6, 0x11, 0xaa, 0x7a, 0xc1, 0xc7, 0x7c, 0xac, 0x17, 0x21, 0x9a, 0x4a, 0xf1, 0xf7, 0x4c, 0x9c, 0x27, 0x90, 0x2b, 0xfb, 0x40, 0x46, 0xfd, 0x2d, 0x96, 0x5e, 0xe5, 0x35, 0x8e, 0x88, 0x33, 0xe3, 0x58, 0xef, 0x54, 0x84, 0x3f, 0x39, 0x82, 0x52, 0xe9, 0x3e, 0x85, 0x55, 0xee, 0xe8, 0x53, 0x83, 0x38, 0x8f, 0x34, 0xe4, 0x5f, 0x59, 0xe2, 0x32, 0x89, 0x41, 0xfa, 0x2a, 0x91, 0x97, 0x2c, 0xfc, 0x47, 0xf0, 0x4b, 0x9b, 0x20, 0x26, 0x9d, 0x4d, 0xf6, 0xc0, 0x7b, 0xab, 0x10, 0x16, 0xad, 0x7d, 0xc6, 0x71, 0xca, 0x1a, 0xa1, 0xa7, 0x1c, 0xcc, 0x77, 0xbf, 0x4, 0xd4, 0x6f, 0x69, 0xd2, 0x2, 0xb9, 0xe, 0xb5, 0x65, 0xde, 0xd8, 0x63, 0xb3, 0x8}, + {0x0, 0xbc, 0x65, 0xd9, 0xca, 0x76, 0xaf, 0x13, 0x89, 0x35, 0xec, 0x50, 0x43, 0xff, 0x26, 0x9a, 0xf, 0xb3, 0x6a, 0xd6, 0xc5, 0x79, 0xa0, 0x1c, 0x86, 0x3a, 0xe3, 0x5f, 0x4c, 0xf0, 0x29, 0x95, 0x1e, 0xa2, 0x7b, 0xc7, 0xd4, 0x68, 0xb1, 0xd, 0x97, 0x2b, 0xf2, 0x4e, 0x5d, 0xe1, 0x38, 0x84, 0x11, 0xad, 0x74, 0xc8, 0xdb, 0x67, 0xbe, 0x2, 0x98, 0x24, 0xfd, 0x41, 0x52, 0xee, 0x37, 0x8b, 0x3c, 0x80, 0x59, 0xe5, 0xf6, 0x4a, 0x93, 0x2f, 0xb5, 0x9, 0xd0, 0x6c, 0x7f, 0xc3, 0x1a, 0xa6, 0x33, 0x8f, 0x56, 0xea, 0xf9, 0x45, 0x9c, 0x20, 0xba, 0x6, 0xdf, 0x63, 0x70, 0xcc, 0x15, 0xa9, 0x22, 0x9e, 0x47, 0xfb, 0xe8, 0x54, 0x8d, 0x31, 0xab, 0x17, 0xce, 0x72, 0x61, 0xdd, 0x4, 0xb8, 0x2d, 0x91, 0x48, 0xf4, 0xe7, 0x5b, 0x82, 0x3e, 0xa4, 0x18, 0xc1, 0x7d, 0x6e, 0xd2, 0xb, 0xb7, 0x78, 0xc4, 0x1d, 0xa1, 0xb2, 0xe, 0xd7, 0x6b, 0xf1, 0x4d, 0x94, 0x28, 0x3b, 0x87, 0x5e, 0xe2, 0x77, 0xcb, 0x12, 0xae, 0xbd, 0x1, 0xd8, 0x64, 0xfe, 0x42, 0x9b, 0x27, 0x34, 0x88, 0x51, 0xed, 0x66, 0xda, 0x3, 0xbf, 0xac, 0x10, 0xc9, 0x75, 0xef, 0x53, 0x8a, 0x36, 0x25, 0x99, 0x40, 0xfc, 0x69, 0xd5, 0xc, 0xb0, 0xa3, 0x1f, 0xc6, 0x7a, 0xe0, 0x5c, 0x85, 0x39, 0x2a, 0x96, 0x4f, 0xf3, 0x44, 0xf8, 0x21, 0x9d, 0x8e, 0x32, 0xeb, 0x57, 0xcd, 0x71, 0xa8, 0x14, 0x7, 0xbb, 0x62, 0xde, 0x4b, 0xf7, 0x2e, 0x92, 0x81, 0x3d, 0xe4, 0x58, 0xc2, 0x7e, 0xa7, 0x1b, 0x8, 0xb4, 0x6d, 0xd1, 0x5a, 0xe6, 0x3f, 0x83, 0x90, 0x2c, 0xf5, 0x49, 0xd3, 0x6f, 0xb6, 0xa, 0x19, 0xa5, 0x7c, 0xc0, 0x55, 0xe9, 0x30, 0x8c, 0x9f, 0x23, 0xfa, 0x46, 0xdc, 0x60, 0xb9, 0x5, 0x16, 0xaa, 0x73, 0xcf}, + {0x0, 0xbd, 0x67, 0xda, 0xce, 0x73, 0xa9, 0x14, 0x81, 0x3c, 0xe6, 0x5b, 0x4f, 0xf2, 0x28, 0x95, 0x1f, 0xa2, 0x78, 0xc5, 0xd1, 0x6c, 0xb6, 0xb, 0x9e, 0x23, 0xf9, 0x44, 0x50, 0xed, 0x37, 0x8a, 0x3e, 0x83, 0x59, 0xe4, 0xf0, 0x4d, 0x97, 0x2a, 0xbf, 0x2, 0xd8, 0x65, 0x71, 0xcc, 0x16, 0xab, 0x21, 0x9c, 0x46, 0xfb, 0xef, 0x52, 0x88, 0x35, 0xa0, 0x1d, 0xc7, 0x7a, 0x6e, 0xd3, 0x9, 0xb4, 0x7c, 0xc1, 0x1b, 0xa6, 0xb2, 0xf, 0xd5, 0x68, 0xfd, 0x40, 0x9a, 0x27, 0x33, 0x8e, 0x54, 0xe9, 0x63, 0xde, 0x4, 0xb9, 0xad, 0x10, 0xca, 0x77, 0xe2, 0x5f, 0x85, 0x38, 0x2c, 0x91, 0x4b, 0xf6, 0x42, 0xff, 0x25, 0x98, 0x8c, 0x31, 0xeb, 0x56, 0xc3, 0x7e, 0xa4, 0x19, 0xd, 0xb0, 0x6a, 0xd7, 0x5d, 0xe0, 0x3a, 0x87, 0x93, 0x2e, 0xf4, 0x49, 0xdc, 0x61, 0xbb, 0x6, 0x12, 0xaf, 0x75, 0xc8, 0xf8, 0x45, 0x9f, 0x22, 0x36, 0x8b, 0x51, 0xec, 0x79, 0xc4, 0x1e, 0xa3, 0xb7, 0xa, 0xd0, 0x6d, 0xe7, 0x5a, 0x80, 0x3d, 0x29, 0x94, 0x4e, 0xf3, 0x66, 0xdb, 0x1, 0xbc, 0xa8, 0x15, 0xcf, 0x72, 0xc6, 0x7b, 0xa1, 0x1c, 0x8, 0xb5, 0x6f, 0xd2, 0x47, 0xfa, 0x20, 0x9d, 0x89, 0x34, 0xee, 0x53, 0xd9, 0x64, 0xbe, 0x3, 0x17, 0xaa, 0x70, 0xcd, 0x58, 0xe5, 0x3f, 0x82, 0x96, 0x2b, 0xf1, 0x4c, 0x84, 0x39, 0xe3, 0x5e, 0x4a, 0xf7, 0x2d, 0x90, 0x5, 0xb8, 0x62, 0xdf, 0xcb, 0x76, 0xac, 0x11, 0x9b, 0x26, 0xfc, 0x41, 0x55, 0xe8, 0x32, 0x8f, 0x1a, 0xa7, 0x7d, 0xc0, 0xd4, 0x69, 0xb3, 0xe, 0xba, 0x7, 0xdd, 0x60, 0x74, 0xc9, 0x13, 0xae, 0x3b, 0x86, 0x5c, 0xe1, 0xf5, 0x48, 0x92, 0x2f, 0xa5, 0x18, 0xc2, 0x7f, 0x6b, 0xd6, 0xc, 0xb1, 0x24, 0x99, 0x43, 0xfe, 0xea, 0x57, 0x8d, 0x30}, + {0x0, 0xbe, 0x61, 0xdf, 0xc2, 0x7c, 0xa3, 0x1d, 0x99, 0x27, 0xf8, 0x46, 0x5b, 0xe5, 0x3a, 0x84, 0x2f, 0x91, 0x4e, 0xf0, 0xed, 0x53, 0x8c, 0x32, 0xb6, 0x8, 0xd7, 0x69, 0x74, 0xca, 0x15, 0xab, 0x5e, 0xe0, 0x3f, 0x81, 0x9c, 0x22, 0xfd, 0x43, 0xc7, 0x79, 0xa6, 0x18, 0x5, 0xbb, 0x64, 0xda, 0x71, 0xcf, 0x10, 0xae, 0xb3, 0xd, 0xd2, 0x6c, 0xe8, 0x56, 0x89, 0x37, 0x2a, 0x94, 0x4b, 0xf5, 0xbc, 0x2, 0xdd, 0x63, 0x7e, 0xc0, 0x1f, 0xa1, 0x25, 0x9b, 0x44, 0xfa, 0xe7, 0x59, 0x86, 0x38, 0x93, 0x2d, 0xf2, 0x4c, 0x51, 0xef, 0x30, 0x8e, 0xa, 0xb4, 0x6b, 0xd5, 0xc8, 0x76, 0xa9, 0x17, 0xe2, 0x5c, 0x83, 0x3d, 0x20, 0x9e, 0x41, 0xff, 0x7b, 0xc5, 0x1a, 0xa4, 0xb9, 0x7, 0xd8, 0x66, 0xcd, 0x73, 0xac, 0x12, 0xf, 0xb1, 0x6e, 0xd0, 0x54, 0xea, 0x35, 0x8b, 0x96, 0x28, 0xf7, 0x49, 0x65, 0xdb, 0x4, 0xba, 0xa7, 0x19, 0xc6, 0x78, 0xfc, 0x42, 0x9d, 0x23, 0x3e, 0x80, 0x5f, 0xe1, 0x4a, 0xf4, 0x2b, 0x95, 0x88, 0x36, 0xe9, 0x57, 0xd3, 0x6d, 0xb2, 0xc, 0x11, 0xaf, 0x70, 0xce, 0x3b, 0x85, 0x5a, 0xe4, 0xf9, 0x47, 0x98, 0x26, 0xa2, 0x1c, 0xc3, 0x7d, 0x60, 0xde, 0x1, 0xbf, 0x14, 0xaa, 0x75, 0xcb, 0xd6, 0x68, 0xb7, 0x9, 0x8d, 0x33, 0xec, 0x52, 0x4f, 0xf1, 0x2e, 0x90, 0xd9, 0x67, 0xb8, 0x6, 0x1b, 0xa5, 0x7a, 0xc4, 0x40, 0xfe, 0x21, 0x9f, 0x82, 0x3c, 0xe3, 0x5d, 0xf6, 0x48, 0x97, 0x29, 0x34, 0x8a, 0x55, 0xeb, 0x6f, 0xd1, 0xe, 0xb0, 0xad, 0x13, 0xcc, 0x72, 0x87, 0x39, 0xe6, 0x58, 0x45, 0xfb, 0x24, 0x9a, 0x1e, 0xa0, 0x7f, 0xc1, 0xdc, 0x62, 0xbd, 0x3, 0xa8, 0x16, 0xc9, 0x77, 0x6a, 0xd4, 0xb, 0xb5, 0x31, 0x8f, 0x50, 0xee, 0xf3, 0x4d, 0x92, 0x2c}, + {0x0, 0xbf, 0x63, 0xdc, 0xc6, 0x79, 0xa5, 0x1a, 0x91, 0x2e, 0xf2, 0x4d, 0x57, 0xe8, 0x34, 0x8b, 0x3f, 0x80, 0x5c, 0xe3, 0xf9, 0x46, 0x9a, 0x25, 0xae, 0x11, 0xcd, 0x72, 0x68, 0xd7, 0xb, 0xb4, 0x7e, 0xc1, 0x1d, 0xa2, 0xb8, 0x7, 0xdb, 0x64, 0xef, 0x50, 0x8c, 0x33, 0x29, 0x96, 0x4a, 0xf5, 0x41, 0xfe, 0x22, 0x9d, 0x87, 0x38, 0xe4, 0x5b, 0xd0, 0x6f, 0xb3, 0xc, 0x16, 0xa9, 0x75, 0xca, 0xfc, 0x43, 0x9f, 0x20, 0x3a, 0x85, 0x59, 0xe6, 0x6d, 0xd2, 0xe, 0xb1, 0xab, 0x14, 0xc8, 0x77, 0xc3, 0x7c, 0xa0, 0x1f, 0x5, 0xba, 0x66, 0xd9, 0x52, 0xed, 0x31, 0x8e, 0x94, 0x2b, 0xf7, 0x48, 0x82, 0x3d, 0xe1, 0x5e, 0x44, 0xfb, 0x27, 0x98, 0x13, 0xac, 0x70, 0xcf, 0xd5, 0x6a, 0xb6, 0x9, 0xbd, 0x2, 0xde, 0x61, 0x7b, 0xc4, 0x18, 0xa7, 0x2c, 0x93, 0x4f, 0xf0, 0xea, 0x55, 0x89, 0x36, 0xe5, 0x5a, 0x86, 0x39, 0x23, 0x9c, 0x40, 0xff, 0x74, 0xcb, 0x17, 0xa8, 0xb2, 0xd, 0xd1, 0x6e, 0xda, 0x65, 0xb9, 0x6, 0x1c, 0xa3, 0x7f, 0xc0, 0x4b, 0xf4, 0x28, 0x97, 0x8d, 0x32, 0xee, 0x51, 0x9b, 0x24, 0xf8, 0x47, 0x5d, 0xe2, 0x3e, 0x81, 0xa, 0xb5, 0x69, 0xd6, 0xcc, 0x73, 0xaf, 0x10, 0xa4, 0x1b, 0xc7, 0x78, 0x62, 0xdd, 0x1, 0xbe, 0x35, 0x8a, 0x56, 0xe9, 0xf3, 0x4c, 0x90, 0x2f, 0x19, 0xa6, 0x7a, 0xc5, 0xdf, 0x60, 0xbc, 0x3, 0x88, 0x37, 0xeb, 0x54, 0x4e, 0xf1, 0x2d, 0x92, 0x26, 0x99, 0x45, 0xfa, 0xe0, 0x5f, 0x83, 0x3c, 0xb7, 0x8, 0xd4, 0x6b, 0x71, 0xce, 0x12, 0xad, 0x67, 0xd8, 0x4, 0xbb, 0xa1, 0x1e, 0xc2, 0x7d, 0xf6, 0x49, 0x95, 0x2a, 0x30, 0x8f, 0x53, 0xec, 0x58, 0xe7, 0x3b, 0x84, 0x9e, 0x21, 0xfd, 0x42, 0xc9, 0x76, 0xaa, 0x15, 0xf, 0xb0, 0x6c, 0xd3}, + {0x0, 0xc0, 0x9d, 0x5d, 0x27, 0xe7, 0xba, 0x7a, 0x4e, 0x8e, 0xd3, 0x13, 0x69, 0xa9, 0xf4, 0x34, 0x9c, 0x5c, 0x1, 0xc1, 0xbb, 0x7b, 0x26, 0xe6, 0xd2, 0x12, 0x4f, 0x8f, 0xf5, 0x35, 0x68, 0xa8, 0x25, 0xe5, 0xb8, 0x78, 0x2, 0xc2, 0x9f, 0x5f, 0x6b, 0xab, 0xf6, 0x36, 0x4c, 0x8c, 0xd1, 0x11, 0xb9, 0x79, 0x24, 0xe4, 0x9e, 0x5e, 0x3, 0xc3, 0xf7, 0x37, 0x6a, 0xaa, 0xd0, 0x10, 0x4d, 0x8d, 0x4a, 0x8a, 0xd7, 0x17, 0x6d, 0xad, 0xf0, 0x30, 0x4, 0xc4, 0x99, 0x59, 0x23, 0xe3, 0xbe, 0x7e, 0xd6, 0x16, 0x4b, 0x8b, 0xf1, 0x31, 0x6c, 0xac, 0x98, 0x58, 0x5, 0xc5, 0xbf, 0x7f, 0x22, 0xe2, 0x6f, 0xaf, 0xf2, 0x32, 0x48, 0x88, 0xd5, 0x15, 0x21, 0xe1, 0xbc, 0x7c, 0x6, 0xc6, 0x9b, 0x5b, 0xf3, 0x33, 0x6e, 0xae, 0xd4, 0x14, 0x49, 0x89, 0xbd, 0x7d, 0x20, 0xe0, 0x9a, 0x5a, 0x7, 0xc7, 0x94, 0x54, 0x9, 0xc9, 0xb3, 0x73, 0x2e, 0xee, 0xda, 0x1a, 0x47, 0x87, 0xfd, 0x3d, 0x60, 0xa0, 0x8, 0xc8, 0x95, 0x55, 0x2f, 0xef, 0xb2, 0x72, 0x46, 0x86, 0xdb, 0x1b, 0x61, 0xa1, 0xfc, 0x3c, 0xb1, 0x71, 0x2c, 0xec, 0x96, 0x56, 0xb, 0xcb, 0xff, 0x3f, 0x62, 0xa2, 0xd8, 0x18, 0x45, 0x85, 0x2d, 0xed, 0xb0, 0x70, 0xa, 0xca, 0x97, 0x57, 0x63, 0xa3, 0xfe, 0x3e, 0x44, 0x84, 0xd9, 0x19, 0xde, 0x1e, 0x43, 0x83, 0xf9, 0x39, 0x64, 0xa4, 0x90, 0x50, 0xd, 0xcd, 0xb7, 0x77, 0x2a, 0xea, 0x42, 0x82, 0xdf, 0x1f, 0x65, 0xa5, 0xf8, 0x38, 0xc, 0xcc, 0x91, 0x51, 0x2b, 0xeb, 0xb6, 0x76, 0xfb, 0x3b, 0x66, 0xa6, 0xdc, 0x1c, 0x41, 0x81, 0xb5, 0x75, 0x28, 0xe8, 0x92, 0x52, 0xf, 0xcf, 0x67, 0xa7, 0xfa, 0x3a, 0x40, 0x80, 0xdd, 0x1d, 0x29, 0xe9, 0xb4, 0x74, 0xe, 0xce, 0x93, 0x53}, + {0x0, 0xc1, 0x9f, 0x5e, 0x23, 0xe2, 0xbc, 0x7d, 0x46, 0x87, 0xd9, 0x18, 0x65, 0xa4, 0xfa, 0x3b, 0x8c, 0x4d, 0x13, 0xd2, 0xaf, 0x6e, 0x30, 0xf1, 0xca, 0xb, 0x55, 0x94, 0xe9, 0x28, 0x76, 0xb7, 0x5, 0xc4, 0x9a, 0x5b, 0x26, 0xe7, 0xb9, 0x78, 0x43, 0x82, 0xdc, 0x1d, 0x60, 0xa1, 0xff, 0x3e, 0x89, 0x48, 0x16, 0xd7, 0xaa, 0x6b, 0x35, 0xf4, 0xcf, 0xe, 0x50, 0x91, 0xec, 0x2d, 0x73, 0xb2, 0xa, 0xcb, 0x95, 0x54, 0x29, 0xe8, 0xb6, 0x77, 0x4c, 0x8d, 0xd3, 0x12, 0x6f, 0xae, 0xf0, 0x31, 0x86, 0x47, 0x19, 0xd8, 0xa5, 0x64, 0x3a, 0xfb, 0xc0, 0x1, 0x5f, 0x9e, 0xe3, 0x22, 0x7c, 0xbd, 0xf, 0xce, 0x90, 0x51, 0x2c, 0xed, 0xb3, 0x72, 0x49, 0x88, 0xd6, 0x17, 0x6a, 0xab, 0xf5, 0x34, 0x83, 0x42, 0x1c, 0xdd, 0xa0, 0x61, 0x3f, 0xfe, 0xc5, 0x4, 0x5a, 0x9b, 0xe6, 0x27, 0x79, 0xb8, 0x14, 0xd5, 0x8b, 0x4a, 0x37, 0xf6, 0xa8, 0x69, 0x52, 0x93, 0xcd, 0xc, 0x71, 0xb0, 0xee, 0x2f, 0x98, 0x59, 0x7, 0xc6, 0xbb, 0x7a, 0x24, 0xe5, 0xde, 0x1f, 0x41, 0x80, 0xfd, 0x3c, 0x62, 0xa3, 0x11, 0xd0, 0x8e, 0x4f, 0x32, 0xf3, 0xad, 0x6c, 0x57, 0x96, 0xc8, 0x9, 0x74, 0xb5, 0xeb, 0x2a, 0x9d, 0x5c, 0x2, 0xc3, 0xbe, 0x7f, 0x21, 0xe0, 0xdb, 0x1a, 0x44, 0x85, 0xf8, 0x39, 0x67, 0xa6, 0x1e, 0xdf, 0x81, 0x40, 0x3d, 0xfc, 0xa2, 0x63, 0x58, 0x99, 0xc7, 0x6, 0x7b, 0xba, 0xe4, 0x25, 0x92, 0x53, 0xd, 0xcc, 0xb1, 0x70, 0x2e, 0xef, 0xd4, 0x15, 0x4b, 0x8a, 0xf7, 0x36, 0x68, 0xa9, 0x1b, 0xda, 0x84, 0x45, 0x38, 0xf9, 0xa7, 0x66, 0x5d, 0x9c, 0xc2, 0x3, 0x7e, 0xbf, 0xe1, 0x20, 0x97, 0x56, 0x8, 0xc9, 0xb4, 0x75, 0x2b, 0xea, 0xd1, 0x10, 0x4e, 0x8f, 0xf2, 0x33, 0x6d, 0xac}, + {0x0, 0xc2, 0x99, 0x5b, 0x2f, 0xed, 0xb6, 0x74, 0x5e, 0x9c, 0xc7, 0x5, 0x71, 0xb3, 0xe8, 0x2a, 0xbc, 0x7e, 0x25, 0xe7, 0x93, 0x51, 0xa, 0xc8, 0xe2, 0x20, 0x7b, 0xb9, 0xcd, 0xf, 0x54, 0x96, 0x65, 0xa7, 0xfc, 0x3e, 0x4a, 0x88, 0xd3, 0x11, 0x3b, 0xf9, 0xa2, 0x60, 0x14, 0xd6, 0x8d, 0x4f, 0xd9, 0x1b, 0x40, 0x82, 0xf6, 0x34, 0x6f, 0xad, 0x87, 0x45, 0x1e, 0xdc, 0xa8, 0x6a, 0x31, 0xf3, 0xca, 0x8, 0x53, 0x91, 0xe5, 0x27, 0x7c, 0xbe, 0x94, 0x56, 0xd, 0xcf, 0xbb, 0x79, 0x22, 0xe0, 0x76, 0xb4, 0xef, 0x2d, 0x59, 0x9b, 0xc0, 0x2, 0x28, 0xea, 0xb1, 0x73, 0x7, 0xc5, 0x9e, 0x5c, 0xaf, 0x6d, 0x36, 0xf4, 0x80, 0x42, 0x19, 0xdb, 0xf1, 0x33, 0x68, 0xaa, 0xde, 0x1c, 0x47, 0x85, 0x13, 0xd1, 0x8a, 0x48, 0x3c, 0xfe, 0xa5, 0x67, 0x4d, 0x8f, 0xd4, 0x16, 0x62, 0xa0, 0xfb, 0x39, 0x89, 0x4b, 0x10, 0xd2, 0xa6, 0x64, 0x3f, 0xfd, 0xd7, 0x15, 0x4e, 0x8c, 0xf8, 0x3a, 0x61, 0xa3, 0x35, 0xf7, 0xac, 0x6e, 0x1a, 0xd8, 0x83, 0x41, 0x6b, 0xa9, 0xf2, 0x30, 0x44, 0x86, 0xdd, 0x1f, 0xec, 0x2e, 0x75, 0xb7, 0xc3, 0x1, 0x5a, 0x98, 0xb2, 0x70, 0x2b, 0xe9, 0x9d, 0x5f, 0x4, 0xc6, 0x50, 0x92, 0xc9, 0xb, 0x7f, 0xbd, 0xe6, 0x24, 0xe, 0xcc, 0x97, 0x55, 0x21, 0xe3, 0xb8, 0x7a, 0x43, 0x81, 0xda, 0x18, 0x6c, 0xae, 0xf5, 0x37, 0x1d, 0xdf, 0x84, 0x46, 0x32, 0xf0, 0xab, 0x69, 0xff, 0x3d, 0x66, 0xa4, 0xd0, 0x12, 0x49, 0x8b, 0xa1, 0x63, 0x38, 0xfa, 0x8e, 0x4c, 0x17, 0xd5, 0x26, 0xe4, 0xbf, 0x7d, 0x9, 0xcb, 0x90, 0x52, 0x78, 0xba, 0xe1, 0x23, 0x57, 0x95, 0xce, 0xc, 0x9a, 0x58, 0x3, 0xc1, 0xb5, 0x77, 0x2c, 0xee, 0xc4, 0x6, 0x5d, 0x9f, 0xeb, 0x29, 0x72, 0xb0}, + {0x0, 0xc3, 0x9b, 0x58, 0x2b, 0xe8, 0xb0, 0x73, 0x56, 0x95, 0xcd, 0xe, 0x7d, 0xbe, 0xe6, 0x25, 0xac, 0x6f, 0x37, 0xf4, 0x87, 0x44, 0x1c, 0xdf, 0xfa, 0x39, 0x61, 0xa2, 0xd1, 0x12, 0x4a, 0x89, 0x45, 0x86, 0xde, 0x1d, 0x6e, 0xad, 0xf5, 0x36, 0x13, 0xd0, 0x88, 0x4b, 0x38, 0xfb, 0xa3, 0x60, 0xe9, 0x2a, 0x72, 0xb1, 0xc2, 0x1, 0x59, 0x9a, 0xbf, 0x7c, 0x24, 0xe7, 0x94, 0x57, 0xf, 0xcc, 0x8a, 0x49, 0x11, 0xd2, 0xa1, 0x62, 0x3a, 0xf9, 0xdc, 0x1f, 0x47, 0x84, 0xf7, 0x34, 0x6c, 0xaf, 0x26, 0xe5, 0xbd, 0x7e, 0xd, 0xce, 0x96, 0x55, 0x70, 0xb3, 0xeb, 0x28, 0x5b, 0x98, 0xc0, 0x3, 0xcf, 0xc, 0x54, 0x97, 0xe4, 0x27, 0x7f, 0xbc, 0x99, 0x5a, 0x2, 0xc1, 0xb2, 0x71, 0x29, 0xea, 0x63, 0xa0, 0xf8, 0x3b, 0x48, 0x8b, 0xd3, 0x10, 0x35, 0xf6, 0xae, 0x6d, 0x1e, 0xdd, 0x85, 0x46, 0x9, 0xca, 0x92, 0x51, 0x22, 0xe1, 0xb9, 0x7a, 0x5f, 0x9c, 0xc4, 0x7, 0x74, 0xb7, 0xef, 0x2c, 0xa5, 0x66, 0x3e, 0xfd, 0x8e, 0x4d, 0x15, 0xd6, 0xf3, 0x30, 0x68, 0xab, 0xd8, 0x1b, 0x43, 0x80, 0x4c, 0x8f, 0xd7, 0x14, 0x67, 0xa4, 0xfc, 0x3f, 0x1a, 0xd9, 0x81, 0x42, 0x31, 0xf2, 0xaa, 0x69, 0xe0, 0x23, 0x7b, 0xb8, 0xcb, 0x8, 0x50, 0x93, 0xb6, 0x75, 0x2d, 0xee, 0x9d, 0x5e, 0x6, 0xc5, 0x83, 0x40, 0x18, 0xdb, 0xa8, 0x6b, 0x33, 0xf0, 0xd5, 0x16, 0x4e, 0x8d, 0xfe, 0x3d, 0x65, 0xa6, 0x2f, 0xec, 0xb4, 0x77, 0x4, 0xc7, 0x9f, 0x5c, 0x79, 0xba, 0xe2, 0x21, 0x52, 0x91, 0xc9, 0xa, 0xc6, 0x5, 0x5d, 0x9e, 0xed, 0x2e, 0x76, 0xb5, 0x90, 0x53, 0xb, 0xc8, 0xbb, 0x78, 0x20, 0xe3, 0x6a, 0xa9, 0xf1, 0x32, 0x41, 0x82, 0xda, 0x19, 0x3c, 0xff, 0xa7, 0x64, 0x17, 0xd4, 0x8c, 0x4f}, + {0x0, 0xc4, 0x95, 0x51, 0x37, 0xf3, 0xa2, 0x66, 0x6e, 0xaa, 0xfb, 0x3f, 0x59, 0x9d, 0xcc, 0x8, 0xdc, 0x18, 0x49, 0x8d, 0xeb, 0x2f, 0x7e, 0xba, 0xb2, 0x76, 0x27, 0xe3, 0x85, 0x41, 0x10, 0xd4, 0xa5, 0x61, 0x30, 0xf4, 0x92, 0x56, 0x7, 0xc3, 0xcb, 0xf, 0x5e, 0x9a, 0xfc, 0x38, 0x69, 0xad, 0x79, 0xbd, 0xec, 0x28, 0x4e, 0x8a, 0xdb, 0x1f, 0x17, 0xd3, 0x82, 0x46, 0x20, 0xe4, 0xb5, 0x71, 0x57, 0x93, 0xc2, 0x6, 0x60, 0xa4, 0xf5, 0x31, 0x39, 0xfd, 0xac, 0x68, 0xe, 0xca, 0x9b, 0x5f, 0x8b, 0x4f, 0x1e, 0xda, 0xbc, 0x78, 0x29, 0xed, 0xe5, 0x21, 0x70, 0xb4, 0xd2, 0x16, 0x47, 0x83, 0xf2, 0x36, 0x67, 0xa3, 0xc5, 0x1, 0x50, 0x94, 0x9c, 0x58, 0x9, 0xcd, 0xab, 0x6f, 0x3e, 0xfa, 0x2e, 0xea, 0xbb, 0x7f, 0x19, 0xdd, 0x8c, 0x48, 0x40, 0x84, 0xd5, 0x11, 0x77, 0xb3, 0xe2, 0x26, 0xae, 0x6a, 0x3b, 0xff, 0x99, 0x5d, 0xc, 0xc8, 0xc0, 0x4, 0x55, 0x91, 0xf7, 0x33, 0x62, 0xa6, 0x72, 0xb6, 0xe7, 0x23, 0x45, 0x81, 0xd0, 0x14, 0x1c, 0xd8, 0x89, 0x4d, 0x2b, 0xef, 0xbe, 0x7a, 0xb, 0xcf, 0x9e, 0x5a, 0x3c, 0xf8, 0xa9, 0x6d, 0x65, 0xa1, 0xf0, 0x34, 0x52, 0x96, 0xc7, 0x3, 0xd7, 0x13, 0x42, 0x86, 0xe0, 0x24, 0x75, 0xb1, 0xb9, 0x7d, 0x2c, 0xe8, 0x8e, 0x4a, 0x1b, 0xdf, 0xf9, 0x3d, 0x6c, 0xa8, 0xce, 0xa, 0x5b, 0x9f, 0x97, 0x53, 0x2, 0xc6, 0xa0, 0x64, 0x35, 0xf1, 0x25, 0xe1, 0xb0, 0x74, 0x12, 0xd6, 0x87, 0x43, 0x4b, 0x8f, 0xde, 0x1a, 0x7c, 0xb8, 0xe9, 0x2d, 0x5c, 0x98, 0xc9, 0xd, 0x6b, 0xaf, 0xfe, 0x3a, 0x32, 0xf6, 0xa7, 0x63, 0x5, 0xc1, 0x90, 0x54, 0x80, 0x44, 0x15, 0xd1, 0xb7, 0x73, 0x22, 0xe6, 0xee, 0x2a, 0x7b, 0xbf, 0xd9, 0x1d, 0x4c, 0x88}, + {0x0, 0xc5, 0x97, 0x52, 0x33, 0xf6, 0xa4, 0x61, 0x66, 0xa3, 0xf1, 0x34, 0x55, 0x90, 0xc2, 0x7, 0xcc, 0x9, 0x5b, 0x9e, 0xff, 0x3a, 0x68, 0xad, 0xaa, 0x6f, 0x3d, 0xf8, 0x99, 0x5c, 0xe, 0xcb, 0x85, 0x40, 0x12, 0xd7, 0xb6, 0x73, 0x21, 0xe4, 0xe3, 0x26, 0x74, 0xb1, 0xd0, 0x15, 0x47, 0x82, 0x49, 0x8c, 0xde, 0x1b, 0x7a, 0xbf, 0xed, 0x28, 0x2f, 0xea, 0xb8, 0x7d, 0x1c, 0xd9, 0x8b, 0x4e, 0x17, 0xd2, 0x80, 0x45, 0x24, 0xe1, 0xb3, 0x76, 0x71, 0xb4, 0xe6, 0x23, 0x42, 0x87, 0xd5, 0x10, 0xdb, 0x1e, 0x4c, 0x89, 0xe8, 0x2d, 0x7f, 0xba, 0xbd, 0x78, 0x2a, 0xef, 0x8e, 0x4b, 0x19, 0xdc, 0x92, 0x57, 0x5, 0xc0, 0xa1, 0x64, 0x36, 0xf3, 0xf4, 0x31, 0x63, 0xa6, 0xc7, 0x2, 0x50, 0x95, 0x5e, 0x9b, 0xc9, 0xc, 0x6d, 0xa8, 0xfa, 0x3f, 0x38, 0xfd, 0xaf, 0x6a, 0xb, 0xce, 0x9c, 0x59, 0x2e, 0xeb, 0xb9, 0x7c, 0x1d, 0xd8, 0x8a, 0x4f, 0x48, 0x8d, 0xdf, 0x1a, 0x7b, 0xbe, 0xec, 0x29, 0xe2, 0x27, 0x75, 0xb0, 0xd1, 0x14, 0x46, 0x83, 0x84, 0x41, 0x13, 0xd6, 0xb7, 0x72, 0x20, 0xe5, 0xab, 0x6e, 0x3c, 0xf9, 0x98, 0x5d, 0xf, 0xca, 0xcd, 0x8, 0x5a, 0x9f, 0xfe, 0x3b, 0x69, 0xac, 0x67, 0xa2, 0xf0, 0x35, 0x54, 0x91, 0xc3, 0x6, 0x1, 0xc4, 0x96, 0x53, 0x32, 0xf7, 0xa5, 0x60, 0x39, 0xfc, 0xae, 0x6b, 0xa, 0xcf, 0x9d, 0x58, 0x5f, 0x9a, 0xc8, 0xd, 0x6c, 0xa9, 0xfb, 0x3e, 0xf5, 0x30, 0x62, 0xa7, 0xc6, 0x3, 0x51, 0x94, 0x93, 0x56, 0x4, 0xc1, 0xa0, 0x65, 0x37, 0xf2, 0xbc, 0x79, 0x2b, 0xee, 0x8f, 0x4a, 0x18, 0xdd, 0xda, 0x1f, 0x4d, 0x88, 0xe9, 0x2c, 0x7e, 0xbb, 0x70, 0xb5, 0xe7, 0x22, 0x43, 0x86, 0xd4, 0x11, 0x16, 0xd3, 0x81, 0x44, 0x25, 0xe0, 0xb2, 0x77}, + {0x0, 0xc6, 0x91, 0x57, 0x3f, 0xf9, 0xae, 0x68, 0x7e, 0xb8, 0xef, 0x29, 0x41, 0x87, 0xd0, 0x16, 0xfc, 0x3a, 0x6d, 0xab, 0xc3, 0x5, 0x52, 0x94, 0x82, 0x44, 0x13, 0xd5, 0xbd, 0x7b, 0x2c, 0xea, 0xe5, 0x23, 0x74, 0xb2, 0xda, 0x1c, 0x4b, 0x8d, 0x9b, 0x5d, 0xa, 0xcc, 0xa4, 0x62, 0x35, 0xf3, 0x19, 0xdf, 0x88, 0x4e, 0x26, 0xe0, 0xb7, 0x71, 0x67, 0xa1, 0xf6, 0x30, 0x58, 0x9e, 0xc9, 0xf, 0xd7, 0x11, 0x46, 0x80, 0xe8, 0x2e, 0x79, 0xbf, 0xa9, 0x6f, 0x38, 0xfe, 0x96, 0x50, 0x7, 0xc1, 0x2b, 0xed, 0xba, 0x7c, 0x14, 0xd2, 0x85, 0x43, 0x55, 0x93, 0xc4, 0x2, 0x6a, 0xac, 0xfb, 0x3d, 0x32, 0xf4, 0xa3, 0x65, 0xd, 0xcb, 0x9c, 0x5a, 0x4c, 0x8a, 0xdd, 0x1b, 0x73, 0xb5, 0xe2, 0x24, 0xce, 0x8, 0x5f, 0x99, 0xf1, 0x37, 0x60, 0xa6, 0xb0, 0x76, 0x21, 0xe7, 0x8f, 0x49, 0x1e, 0xd8, 0xb3, 0x75, 0x22, 0xe4, 0x8c, 0x4a, 0x1d, 0xdb, 0xcd, 0xb, 0x5c, 0x9a, 0xf2, 0x34, 0x63, 0xa5, 0x4f, 0x89, 0xde, 0x18, 0x70, 0xb6, 0xe1, 0x27, 0x31, 0xf7, 0xa0, 0x66, 0xe, 0xc8, 0x9f, 0x59, 0x56, 0x90, 0xc7, 0x1, 0x69, 0xaf, 0xf8, 0x3e, 0x28, 0xee, 0xb9, 0x7f, 0x17, 0xd1, 0x86, 0x40, 0xaa, 0x6c, 0x3b, 0xfd, 0x95, 0x53, 0x4, 0xc2, 0xd4, 0x12, 0x45, 0x83, 0xeb, 0x2d, 0x7a, 0xbc, 0x64, 0xa2, 0xf5, 0x33, 0x5b, 0x9d, 0xca, 0xc, 0x1a, 0xdc, 0x8b, 0x4d, 0x25, 0xe3, 0xb4, 0x72, 0x98, 0x5e, 0x9, 0xcf, 0xa7, 0x61, 0x36, 0xf0, 0xe6, 0x20, 0x77, 0xb1, 0xd9, 0x1f, 0x48, 0x8e, 0x81, 0x47, 0x10, 0xd6, 0xbe, 0x78, 0x2f, 0xe9, 0xff, 0x39, 0x6e, 0xa8, 0xc0, 0x6, 0x51, 0x97, 0x7d, 0xbb, 0xec, 0x2a, 0x42, 0x84, 0xd3, 0x15, 0x3, 0xc5, 0x92, 0x54, 0x3c, 0xfa, 0xad, 0x6b}, + {0x0, 0xc7, 0x93, 0x54, 0x3b, 0xfc, 0xa8, 0x6f, 0x76, 0xb1, 0xe5, 0x22, 0x4d, 0x8a, 0xde, 0x19, 0xec, 0x2b, 0x7f, 0xb8, 0xd7, 0x10, 0x44, 0x83, 0x9a, 0x5d, 0x9, 0xce, 0xa1, 0x66, 0x32, 0xf5, 0xc5, 0x2, 0x56, 0x91, 0xfe, 0x39, 0x6d, 0xaa, 0xb3, 0x74, 0x20, 0xe7, 0x88, 0x4f, 0x1b, 0xdc, 0x29, 0xee, 0xba, 0x7d, 0x12, 0xd5, 0x81, 0x46, 0x5f, 0x98, 0xcc, 0xb, 0x64, 0xa3, 0xf7, 0x30, 0x97, 0x50, 0x4, 0xc3, 0xac, 0x6b, 0x3f, 0xf8, 0xe1, 0x26, 0x72, 0xb5, 0xda, 0x1d, 0x49, 0x8e, 0x7b, 0xbc, 0xe8, 0x2f, 0x40, 0x87, 0xd3, 0x14, 0xd, 0xca, 0x9e, 0x59, 0x36, 0xf1, 0xa5, 0x62, 0x52, 0x95, 0xc1, 0x6, 0x69, 0xae, 0xfa, 0x3d, 0x24, 0xe3, 0xb7, 0x70, 0x1f, 0xd8, 0x8c, 0x4b, 0xbe, 0x79, 0x2d, 0xea, 0x85, 0x42, 0x16, 0xd1, 0xc8, 0xf, 0x5b, 0x9c, 0xf3, 0x34, 0x60, 0xa7, 0x33, 0xf4, 0xa0, 0x67, 0x8, 0xcf, 0x9b, 0x5c, 0x45, 0x82, 0xd6, 0x11, 0x7e, 0xb9, 0xed, 0x2a, 0xdf, 0x18, 0x4c, 0x8b, 0xe4, 0x23, 0x77, 0xb0, 0xa9, 0x6e, 0x3a, 0xfd, 0x92, 0x55, 0x1, 0xc6, 0xf6, 0x31, 0x65, 0xa2, 0xcd, 0xa, 0x5e, 0x99, 0x80, 0x47, 0x13, 0xd4, 0xbb, 0x7c, 0x28, 0xef, 0x1a, 0xdd, 0x89, 0x4e, 0x21, 0xe6, 0xb2, 0x75, 0x6c, 0xab, 0xff, 0x38, 0x57, 0x90, 0xc4, 0x3, 0xa4, 0x63, 0x37, 0xf0, 0x9f, 0x58, 0xc, 0xcb, 0xd2, 0x15, 0x41, 0x86, 0xe9, 0x2e, 0x7a, 0xbd, 0x48, 0x8f, 0xdb, 0x1c, 0x73, 0xb4, 0xe0, 0x27, 0x3e, 0xf9, 0xad, 0x6a, 0x5, 0xc2, 0x96, 0x51, 0x61, 0xa6, 0xf2, 0x35, 0x5a, 0x9d, 0xc9, 0xe, 0x17, 0xd0, 0x84, 0x43, 0x2c, 0xeb, 0xbf, 0x78, 0x8d, 0x4a, 0x1e, 0xd9, 0xb6, 0x71, 0x25, 0xe2, 0xfb, 0x3c, 0x68, 0xaf, 0xc0, 0x7, 0x53, 0x94}, + {0x0, 0xc8, 0x8d, 0x45, 0x7, 0xcf, 0x8a, 0x42, 0xe, 0xc6, 0x83, 0x4b, 0x9, 0xc1, 0x84, 0x4c, 0x1c, 0xd4, 0x91, 0x59, 0x1b, 0xd3, 0x96, 0x5e, 0x12, 0xda, 0x9f, 0x57, 0x15, 0xdd, 0x98, 0x50, 0x38, 0xf0, 0xb5, 0x7d, 0x3f, 0xf7, 0xb2, 0x7a, 0x36, 0xfe, 0xbb, 0x73, 0x31, 0xf9, 0xbc, 0x74, 0x24, 0xec, 0xa9, 0x61, 0x23, 0xeb, 0xae, 0x66, 0x2a, 0xe2, 0xa7, 0x6f, 0x2d, 0xe5, 0xa0, 0x68, 0x70, 0xb8, 0xfd, 0x35, 0x77, 0xbf, 0xfa, 0x32, 0x7e, 0xb6, 0xf3, 0x3b, 0x79, 0xb1, 0xf4, 0x3c, 0x6c, 0xa4, 0xe1, 0x29, 0x6b, 0xa3, 0xe6, 0x2e, 0x62, 0xaa, 0xef, 0x27, 0x65, 0xad, 0xe8, 0x20, 0x48, 0x80, 0xc5, 0xd, 0x4f, 0x87, 0xc2, 0xa, 0x46, 0x8e, 0xcb, 0x3, 0x41, 0x89, 0xcc, 0x4, 0x54, 0x9c, 0xd9, 0x11, 0x53, 0x9b, 0xde, 0x16, 0x5a, 0x92, 0xd7, 0x1f, 0x5d, 0x95, 0xd0, 0x18, 0xe0, 0x28, 0x6d, 0xa5, 0xe7, 0x2f, 0x6a, 0xa2, 0xee, 0x26, 0x63, 0xab, 0xe9, 0x21, 0x64, 0xac, 0xfc, 0x34, 0x71, 0xb9, 0xfb, 0x33, 0x76, 0xbe, 0xf2, 0x3a, 0x7f, 0xb7, 0xf5, 0x3d, 0x78, 0xb0, 0xd8, 0x10, 0x55, 0x9d, 0xdf, 0x17, 0x52, 0x9a, 0xd6, 0x1e, 0x5b, 0x93, 0xd1, 0x19, 0x5c, 0x94, 0xc4, 0xc, 0x49, 0x81, 0xc3, 0xb, 0x4e, 0x86, 0xca, 0x2, 0x47, 0x8f, 0xcd, 0x5, 0x40, 0x88, 0x90, 0x58, 0x1d, 0xd5, 0x97, 0x5f, 0x1a, 0xd2, 0x9e, 0x56, 0x13, 0xdb, 0x99, 0x51, 0x14, 0xdc, 0x8c, 0x44, 0x1, 0xc9, 0x8b, 0x43, 0x6, 0xce, 0x82, 0x4a, 0xf, 0xc7, 0x85, 0x4d, 0x8, 0xc0, 0xa8, 0x60, 0x25, 0xed, 0xaf, 0x67, 0x22, 0xea, 0xa6, 0x6e, 0x2b, 0xe3, 0xa1, 0x69, 0x2c, 0xe4, 0xb4, 0x7c, 0x39, 0xf1, 0xb3, 0x7b, 0x3e, 0xf6, 0xba, 0x72, 0x37, 0xff, 0xbd, 0x75, 0x30, 0xf8}, + {0x0, 0xc9, 0x8f, 0x46, 0x3, 0xca, 0x8c, 0x45, 0x6, 0xcf, 0x89, 0x40, 0x5, 0xcc, 0x8a, 0x43, 0xc, 0xc5, 0x83, 0x4a, 0xf, 0xc6, 0x80, 0x49, 0xa, 0xc3, 0x85, 0x4c, 0x9, 0xc0, 0x86, 0x4f, 0x18, 0xd1, 0x97, 0x5e, 0x1b, 0xd2, 0x94, 0x5d, 0x1e, 0xd7, 0x91, 0x58, 0x1d, 0xd4, 0x92, 0x5b, 0x14, 0xdd, 0x9b, 0x52, 0x17, 0xde, 0x98, 0x51, 0x12, 0xdb, 0x9d, 0x54, 0x11, 0xd8, 0x9e, 0x57, 0x30, 0xf9, 0xbf, 0x76, 0x33, 0xfa, 0xbc, 0x75, 0x36, 0xff, 0xb9, 0x70, 0x35, 0xfc, 0xba, 0x73, 0x3c, 0xf5, 0xb3, 0x7a, 0x3f, 0xf6, 0xb0, 0x79, 0x3a, 0xf3, 0xb5, 0x7c, 0x39, 0xf0, 0xb6, 0x7f, 0x28, 0xe1, 0xa7, 0x6e, 0x2b, 0xe2, 0xa4, 0x6d, 0x2e, 0xe7, 0xa1, 0x68, 0x2d, 0xe4, 0xa2, 0x6b, 0x24, 0xed, 0xab, 0x62, 0x27, 0xee, 0xa8, 0x61, 0x22, 0xeb, 0xad, 0x64, 0x21, 0xe8, 0xae, 0x67, 0x60, 0xa9, 0xef, 0x26, 0x63, 0xaa, 0xec, 0x25, 0x66, 0xaf, 0xe9, 0x20, 0x65, 0xac, 0xea, 0x23, 0x6c, 0xa5, 0xe3, 0x2a, 0x6f, 0xa6, 0xe0, 0x29, 0x6a, 0xa3, 0xe5, 0x2c, 0x69, 0xa0, 0xe6, 0x2f, 0x78, 0xb1, 0xf7, 0x3e, 0x7b, 0xb2, 0xf4, 0x3d, 0x7e, 0xb7, 0xf1, 0x38, 0x7d, 0xb4, 0xf2, 0x3b, 0x74, 0xbd, 0xfb, 0x32, 0x77, 0xbe, 0xf8, 0x31, 0x72, 0xbb, 0xfd, 0x34, 0x71, 0xb8, 0xfe, 0x37, 0x50, 0x99, 0xdf, 0x16, 0x53, 0x9a, 0xdc, 0x15, 0x56, 0x9f, 0xd9, 0x10, 0x55, 0x9c, 0xda, 0x13, 0x5c, 0x95, 0xd3, 0x1a, 0x5f, 0x96, 0xd0, 0x19, 0x5a, 0x93, 0xd5, 0x1c, 0x59, 0x90, 0xd6, 0x1f, 0x48, 0x81, 0xc7, 0xe, 0x4b, 0x82, 0xc4, 0xd, 0x4e, 0x87, 0xc1, 0x8, 0x4d, 0x84, 0xc2, 0xb, 0x44, 0x8d, 0xcb, 0x2, 0x47, 0x8e, 0xc8, 0x1, 0x42, 0x8b, 0xcd, 0x4, 0x41, 0x88, 0xce, 0x7}, + {0x0, 0xca, 0x89, 0x43, 0xf, 0xc5, 0x86, 0x4c, 0x1e, 0xd4, 0x97, 0x5d, 0x11, 0xdb, 0x98, 0x52, 0x3c, 0xf6, 0xb5, 0x7f, 0x33, 0xf9, 0xba, 0x70, 0x22, 0xe8, 0xab, 0x61, 0x2d, 0xe7, 0xa4, 0x6e, 0x78, 0xb2, 0xf1, 0x3b, 0x77, 0xbd, 0xfe, 0x34, 0x66, 0xac, 0xef, 0x25, 0x69, 0xa3, 0xe0, 0x2a, 0x44, 0x8e, 0xcd, 0x7, 0x4b, 0x81, 0xc2, 0x8, 0x5a, 0x90, 0xd3, 0x19, 0x55, 0x9f, 0xdc, 0x16, 0xf0, 0x3a, 0x79, 0xb3, 0xff, 0x35, 0x76, 0xbc, 0xee, 0x24, 0x67, 0xad, 0xe1, 0x2b, 0x68, 0xa2, 0xcc, 0x6, 0x45, 0x8f, 0xc3, 0x9, 0x4a, 0x80, 0xd2, 0x18, 0x5b, 0x91, 0xdd, 0x17, 0x54, 0x9e, 0x88, 0x42, 0x1, 0xcb, 0x87, 0x4d, 0xe, 0xc4, 0x96, 0x5c, 0x1f, 0xd5, 0x99, 0x53, 0x10, 0xda, 0xb4, 0x7e, 0x3d, 0xf7, 0xbb, 0x71, 0x32, 0xf8, 0xaa, 0x60, 0x23, 0xe9, 0xa5, 0x6f, 0x2c, 0xe6, 0xfd, 0x37, 0x74, 0xbe, 0xf2, 0x38, 0x7b, 0xb1, 0xe3, 0x29, 0x6a, 0xa0, 0xec, 0x26, 0x65, 0xaf, 0xc1, 0xb, 0x48, 0x82, 0xce, 0x4, 0x47, 0x8d, 0xdf, 0x15, 0x56, 0x9c, 0xd0, 0x1a, 0x59, 0x93, 0x85, 0x4f, 0xc, 0xc6, 0x8a, 0x40, 0x3, 0xc9, 0x9b, 0x51, 0x12, 0xd8, 0x94, 0x5e, 0x1d, 0xd7, 0xb9, 0x73, 0x30, 0xfa, 0xb6, 0x7c, 0x3f, 0xf5, 0xa7, 0x6d, 0x2e, 0xe4, 0xa8, 0x62, 0x21, 0xeb, 0xd, 0xc7, 0x84, 0x4e, 0x2, 0xc8, 0x8b, 0x41, 0x13, 0xd9, 0x9a, 0x50, 0x1c, 0xd6, 0x95, 0x5f, 0x31, 0xfb, 0xb8, 0x72, 0x3e, 0xf4, 0xb7, 0x7d, 0x2f, 0xe5, 0xa6, 0x6c, 0x20, 0xea, 0xa9, 0x63, 0x75, 0xbf, 0xfc, 0x36, 0x7a, 0xb0, 0xf3, 0x39, 0x6b, 0xa1, 0xe2, 0x28, 0x64, 0xae, 0xed, 0x27, 0x49, 0x83, 0xc0, 0xa, 0x46, 0x8c, 0xcf, 0x5, 0x57, 0x9d, 0xde, 0x14, 0x58, 0x92, 0xd1, 0x1b}, + {0x0, 0xcb, 0x8b, 0x40, 0xb, 0xc0, 0x80, 0x4b, 0x16, 0xdd, 0x9d, 0x56, 0x1d, 0xd6, 0x96, 0x5d, 0x2c, 0xe7, 0xa7, 0x6c, 0x27, 0xec, 0xac, 0x67, 0x3a, 0xf1, 0xb1, 0x7a, 0x31, 0xfa, 0xba, 0x71, 0x58, 0x93, 0xd3, 0x18, 0x53, 0x98, 0xd8, 0x13, 0x4e, 0x85, 0xc5, 0xe, 0x45, 0x8e, 0xce, 0x5, 0x74, 0xbf, 0xff, 0x34, 0x7f, 0xb4, 0xf4, 0x3f, 0x62, 0xa9, 0xe9, 0x22, 0x69, 0xa2, 0xe2, 0x29, 0xb0, 0x7b, 0x3b, 0xf0, 0xbb, 0x70, 0x30, 0xfb, 0xa6, 0x6d, 0x2d, 0xe6, 0xad, 0x66, 0x26, 0xed, 0x9c, 0x57, 0x17, 0xdc, 0x97, 0x5c, 0x1c, 0xd7, 0x8a, 0x41, 0x1, 0xca, 0x81, 0x4a, 0xa, 0xc1, 0xe8, 0x23, 0x63, 0xa8, 0xe3, 0x28, 0x68, 0xa3, 0xfe, 0x35, 0x75, 0xbe, 0xf5, 0x3e, 0x7e, 0xb5, 0xc4, 0xf, 0x4f, 0x84, 0xcf, 0x4, 0x44, 0x8f, 0xd2, 0x19, 0x59, 0x92, 0xd9, 0x12, 0x52, 0x99, 0x7d, 0xb6, 0xf6, 0x3d, 0x76, 0xbd, 0xfd, 0x36, 0x6b, 0xa0, 0xe0, 0x2b, 0x60, 0xab, 0xeb, 0x20, 0x51, 0x9a, 0xda, 0x11, 0x5a, 0x91, 0xd1, 0x1a, 0x47, 0x8c, 0xcc, 0x7, 0x4c, 0x87, 0xc7, 0xc, 0x25, 0xee, 0xae, 0x65, 0x2e, 0xe5, 0xa5, 0x6e, 0x33, 0xf8, 0xb8, 0x73, 0x38, 0xf3, 0xb3, 0x78, 0x9, 0xc2, 0x82, 0x49, 0x2, 0xc9, 0x89, 0x42, 0x1f, 0xd4, 0x94, 0x5f, 0x14, 0xdf, 0x9f, 0x54, 0xcd, 0x6, 0x46, 0x8d, 0xc6, 0xd, 0x4d, 0x86, 0xdb, 0x10, 0x50, 0x9b, 0xd0, 0x1b, 0x5b, 0x90, 0xe1, 0x2a, 0x6a, 0xa1, 0xea, 0x21, 0x61, 0xaa, 0xf7, 0x3c, 0x7c, 0xb7, 0xfc, 0x37, 0x77, 0xbc, 0x95, 0x5e, 0x1e, 0xd5, 0x9e, 0x55, 0x15, 0xde, 0x83, 0x48, 0x8, 0xc3, 0x88, 0x43, 0x3, 0xc8, 0xb9, 0x72, 0x32, 0xf9, 0xb2, 0x79, 0x39, 0xf2, 0xaf, 0x64, 0x24, 0xef, 0xa4, 0x6f, 0x2f, 0xe4}, + {0x0, 0xcc, 0x85, 0x49, 0x17, 0xdb, 0x92, 0x5e, 0x2e, 0xe2, 0xab, 0x67, 0x39, 0xf5, 0xbc, 0x70, 0x5c, 0x90, 0xd9, 0x15, 0x4b, 0x87, 0xce, 0x2, 0x72, 0xbe, 0xf7, 0x3b, 0x65, 0xa9, 0xe0, 0x2c, 0xb8, 0x74, 0x3d, 0xf1, 0xaf, 0x63, 0x2a, 0xe6, 0x96, 0x5a, 0x13, 0xdf, 0x81, 0x4d, 0x4, 0xc8, 0xe4, 0x28, 0x61, 0xad, 0xf3, 0x3f, 0x76, 0xba, 0xca, 0x6, 0x4f, 0x83, 0xdd, 0x11, 0x58, 0x94, 0x6d, 0xa1, 0xe8, 0x24, 0x7a, 0xb6, 0xff, 0x33, 0x43, 0x8f, 0xc6, 0xa, 0x54, 0x98, 0xd1, 0x1d, 0x31, 0xfd, 0xb4, 0x78, 0x26, 0xea, 0xa3, 0x6f, 0x1f, 0xd3, 0x9a, 0x56, 0x8, 0xc4, 0x8d, 0x41, 0xd5, 0x19, 0x50, 0x9c, 0xc2, 0xe, 0x47, 0x8b, 0xfb, 0x37, 0x7e, 0xb2, 0xec, 0x20, 0x69, 0xa5, 0x89, 0x45, 0xc, 0xc0, 0x9e, 0x52, 0x1b, 0xd7, 0xa7, 0x6b, 0x22, 0xee, 0xb0, 0x7c, 0x35, 0xf9, 0xda, 0x16, 0x5f, 0x93, 0xcd, 0x1, 0x48, 0x84, 0xf4, 0x38, 0x71, 0xbd, 0xe3, 0x2f, 0x66, 0xaa, 0x86, 0x4a, 0x3, 0xcf, 0x91, 0x5d, 0x14, 0xd8, 0xa8, 0x64, 0x2d, 0xe1, 0xbf, 0x73, 0x3a, 0xf6, 0x62, 0xae, 0xe7, 0x2b, 0x75, 0xb9, 0xf0, 0x3c, 0x4c, 0x80, 0xc9, 0x5, 0x5b, 0x97, 0xde, 0x12, 0x3e, 0xf2, 0xbb, 0x77, 0x29, 0xe5, 0xac, 0x60, 0x10, 0xdc, 0x95, 0x59, 0x7, 0xcb, 0x82, 0x4e, 0xb7, 0x7b, 0x32, 0xfe, 0xa0, 0x6c, 0x25, 0xe9, 0x99, 0x55, 0x1c, 0xd0, 0x8e, 0x42, 0xb, 0xc7, 0xeb, 0x27, 0x6e, 0xa2, 0xfc, 0x30, 0x79, 0xb5, 0xc5, 0x9, 0x40, 0x8c, 0xd2, 0x1e, 0x57, 0x9b, 0xf, 0xc3, 0x8a, 0x46, 0x18, 0xd4, 0x9d, 0x51, 0x21, 0xed, 0xa4, 0x68, 0x36, 0xfa, 0xb3, 0x7f, 0x53, 0x9f, 0xd6, 0x1a, 0x44, 0x88, 0xc1, 0xd, 0x7d, 0xb1, 0xf8, 0x34, 0x6a, 0xa6, 0xef, 0x23}, + {0x0, 0xcd, 0x87, 0x4a, 0x13, 0xde, 0x94, 0x59, 0x26, 0xeb, 0xa1, 0x6c, 0x35, 0xf8, 0xb2, 0x7f, 0x4c, 0x81, 0xcb, 0x6, 0x5f, 0x92, 0xd8, 0x15, 0x6a, 0xa7, 0xed, 0x20, 0x79, 0xb4, 0xfe, 0x33, 0x98, 0x55, 0x1f, 0xd2, 0x8b, 0x46, 0xc, 0xc1, 0xbe, 0x73, 0x39, 0xf4, 0xad, 0x60, 0x2a, 0xe7, 0xd4, 0x19, 0x53, 0x9e, 0xc7, 0xa, 0x40, 0x8d, 0xf2, 0x3f, 0x75, 0xb8, 0xe1, 0x2c, 0x66, 0xab, 0x2d, 0xe0, 0xaa, 0x67, 0x3e, 0xf3, 0xb9, 0x74, 0xb, 0xc6, 0x8c, 0x41, 0x18, 0xd5, 0x9f, 0x52, 0x61, 0xac, 0xe6, 0x2b, 0x72, 0xbf, 0xf5, 0x38, 0x47, 0x8a, 0xc0, 0xd, 0x54, 0x99, 0xd3, 0x1e, 0xb5, 0x78, 0x32, 0xff, 0xa6, 0x6b, 0x21, 0xec, 0x93, 0x5e, 0x14, 0xd9, 0x80, 0x4d, 0x7, 0xca, 0xf9, 0x34, 0x7e, 0xb3, 0xea, 0x27, 0x6d, 0xa0, 0xdf, 0x12, 0x58, 0x95, 0xcc, 0x1, 0x4b, 0x86, 0x5a, 0x97, 0xdd, 0x10, 0x49, 0x84, 0xce, 0x3, 0x7c, 0xb1, 0xfb, 0x36, 0x6f, 0xa2, 0xe8, 0x25, 0x16, 0xdb, 0x91, 0x5c, 0x5, 0xc8, 0x82, 0x4f, 0x30, 0xfd, 0xb7, 0x7a, 0x23, 0xee, 0xa4, 0x69, 0xc2, 0xf, 0x45, 0x88, 0xd1, 0x1c, 0x56, 0x9b, 0xe4, 0x29, 0x63, 0xae, 0xf7, 0x3a, 0x70, 0xbd, 0x8e, 0x43, 0x9, 0xc4, 0x9d, 0x50, 0x1a, 0xd7, 0xa8, 0x65, 0x2f, 0xe2, 0xbb, 0x76, 0x3c, 0xf1, 0x77, 0xba, 0xf0, 0x3d, 0x64, 0xa9, 0xe3, 0x2e, 0x51, 0x9c, 0xd6, 0x1b, 0x42, 0x8f, 0xc5, 0x8, 0x3b, 0xf6, 0xbc, 0x71, 0x28, 0xe5, 0xaf, 0x62, 0x1d, 0xd0, 0x9a, 0x57, 0xe, 0xc3, 0x89, 0x44, 0xef, 0x22, 0x68, 0xa5, 0xfc, 0x31, 0x7b, 0xb6, 0xc9, 0x4, 0x4e, 0x83, 0xda, 0x17, 0x5d, 0x90, 0xa3, 0x6e, 0x24, 0xe9, 0xb0, 0x7d, 0x37, 0xfa, 0x85, 0x48, 0x2, 0xcf, 0x96, 0x5b, 0x11, 0xdc}, + {0x0, 0xce, 0x81, 0x4f, 0x1f, 0xd1, 0x9e, 0x50, 0x3e, 0xf0, 0xbf, 0x71, 0x21, 0xef, 0xa0, 0x6e, 0x7c, 0xb2, 0xfd, 0x33, 0x63, 0xad, 0xe2, 0x2c, 0x42, 0x8c, 0xc3, 0xd, 0x5d, 0x93, 0xdc, 0x12, 0xf8, 0x36, 0x79, 0xb7, 0xe7, 0x29, 0x66, 0xa8, 0xc6, 0x8, 0x47, 0x89, 0xd9, 0x17, 0x58, 0x96, 0x84, 0x4a, 0x5, 0xcb, 0x9b, 0x55, 0x1a, 0xd4, 0xba, 0x74, 0x3b, 0xf5, 0xa5, 0x6b, 0x24, 0xea, 0xed, 0x23, 0x6c, 0xa2, 0xf2, 0x3c, 0x73, 0xbd, 0xd3, 0x1d, 0x52, 0x9c, 0xcc, 0x2, 0x4d, 0x83, 0x91, 0x5f, 0x10, 0xde, 0x8e, 0x40, 0xf, 0xc1, 0xaf, 0x61, 0x2e, 0xe0, 0xb0, 0x7e, 0x31, 0xff, 0x15, 0xdb, 0x94, 0x5a, 0xa, 0xc4, 0x8b, 0x45, 0x2b, 0xe5, 0xaa, 0x64, 0x34, 0xfa, 0xb5, 0x7b, 0x69, 0xa7, 0xe8, 0x26, 0x76, 0xb8, 0xf7, 0x39, 0x57, 0x99, 0xd6, 0x18, 0x48, 0x86, 0xc9, 0x7, 0xc7, 0x9, 0x46, 0x88, 0xd8, 0x16, 0x59, 0x97, 0xf9, 0x37, 0x78, 0xb6, 0xe6, 0x28, 0x67, 0xa9, 0xbb, 0x75, 0x3a, 0xf4, 0xa4, 0x6a, 0x25, 0xeb, 0x85, 0x4b, 0x4, 0xca, 0x9a, 0x54, 0x1b, 0xd5, 0x3f, 0xf1, 0xbe, 0x70, 0x20, 0xee, 0xa1, 0x6f, 0x1, 0xcf, 0x80, 0x4e, 0x1e, 0xd0, 0x9f, 0x51, 0x43, 0x8d, 0xc2, 0xc, 0x5c, 0x92, 0xdd, 0x13, 0x7d, 0xb3, 0xfc, 0x32, 0x62, 0xac, 0xe3, 0x2d, 0x2a, 0xe4, 0xab, 0x65, 0x35, 0xfb, 0xb4, 0x7a, 0x14, 0xda, 0x95, 0x5b, 0xb, 0xc5, 0x8a, 0x44, 0x56, 0x98, 0xd7, 0x19, 0x49, 0x87, 0xc8, 0x6, 0x68, 0xa6, 0xe9, 0x27, 0x77, 0xb9, 0xf6, 0x38, 0xd2, 0x1c, 0x53, 0x9d, 0xcd, 0x3, 0x4c, 0x82, 0xec, 0x22, 0x6d, 0xa3, 0xf3, 0x3d, 0x72, 0xbc, 0xae, 0x60, 0x2f, 0xe1, 0xb1, 0x7f, 0x30, 0xfe, 0x90, 0x5e, 0x11, 0xdf, 0x8f, 0x41, 0xe, 0xc0}, + {0x0, 0xcf, 0x83, 0x4c, 0x1b, 0xd4, 0x98, 0x57, 0x36, 0xf9, 0xb5, 0x7a, 0x2d, 0xe2, 0xae, 0x61, 0x6c, 0xa3, 0xef, 0x20, 0x77, 0xb8, 0xf4, 0x3b, 0x5a, 0x95, 0xd9, 0x16, 0x41, 0x8e, 0xc2, 0xd, 0xd8, 0x17, 0x5b, 0x94, 0xc3, 0xc, 0x40, 0x8f, 0xee, 0x21, 0x6d, 0xa2, 0xf5, 0x3a, 0x76, 0xb9, 0xb4, 0x7b, 0x37, 0xf8, 0xaf, 0x60, 0x2c, 0xe3, 0x82, 0x4d, 0x1, 0xce, 0x99, 0x56, 0x1a, 0xd5, 0xad, 0x62, 0x2e, 0xe1, 0xb6, 0x79, 0x35, 0xfa, 0x9b, 0x54, 0x18, 0xd7, 0x80, 0x4f, 0x3, 0xcc, 0xc1, 0xe, 0x42, 0x8d, 0xda, 0x15, 0x59, 0x96, 0xf7, 0x38, 0x74, 0xbb, 0xec, 0x23, 0x6f, 0xa0, 0x75, 0xba, 0xf6, 0x39, 0x6e, 0xa1, 0xed, 0x22, 0x43, 0x8c, 0xc0, 0xf, 0x58, 0x97, 0xdb, 0x14, 0x19, 0xd6, 0x9a, 0x55, 0x2, 0xcd, 0x81, 0x4e, 0x2f, 0xe0, 0xac, 0x63, 0x34, 0xfb, 0xb7, 0x78, 0x47, 0x88, 0xc4, 0xb, 0x5c, 0x93, 0xdf, 0x10, 0x71, 0xbe, 0xf2, 0x3d, 0x6a, 0xa5, 0xe9, 0x26, 0x2b, 0xe4, 0xa8, 0x67, 0x30, 0xff, 0xb3, 0x7c, 0x1d, 0xd2, 0x9e, 0x51, 0x6, 0xc9, 0x85, 0x4a, 0x9f, 0x50, 0x1c, 0xd3, 0x84, 0x4b, 0x7, 0xc8, 0xa9, 0x66, 0x2a, 0xe5, 0xb2, 0x7d, 0x31, 0xfe, 0xf3, 0x3c, 0x70, 0xbf, 0xe8, 0x27, 0x6b, 0xa4, 0xc5, 0xa, 0x46, 0x89, 0xde, 0x11, 0x5d, 0x92, 0xea, 0x25, 0x69, 0xa6, 0xf1, 0x3e, 0x72, 0xbd, 0xdc, 0x13, 0x5f, 0x90, 0xc7, 0x8, 0x44, 0x8b, 0x86, 0x49, 0x5, 0xca, 0x9d, 0x52, 0x1e, 0xd1, 0xb0, 0x7f, 0x33, 0xfc, 0xab, 0x64, 0x28, 0xe7, 0x32, 0xfd, 0xb1, 0x7e, 0x29, 0xe6, 0xaa, 0x65, 0x4, 0xcb, 0x87, 0x48, 0x1f, 0xd0, 0x9c, 0x53, 0x5e, 0x91, 0xdd, 0x12, 0x45, 0x8a, 0xc6, 0x9, 0x68, 0xa7, 0xeb, 0x24, 0x73, 0xbc, 0xf0, 0x3f}, + {0x0, 0xd0, 0xbd, 0x6d, 0x67, 0xb7, 0xda, 0xa, 0xce, 0x1e, 0x73, 0xa3, 0xa9, 0x79, 0x14, 0xc4, 0x81, 0x51, 0x3c, 0xec, 0xe6, 0x36, 0x5b, 0x8b, 0x4f, 0x9f, 0xf2, 0x22, 0x28, 0xf8, 0x95, 0x45, 0x1f, 0xcf, 0xa2, 0x72, 0x78, 0xa8, 0xc5, 0x15, 0xd1, 0x1, 0x6c, 0xbc, 0xb6, 0x66, 0xb, 0xdb, 0x9e, 0x4e, 0x23, 0xf3, 0xf9, 0x29, 0x44, 0x94, 0x50, 0x80, 0xed, 0x3d, 0x37, 0xe7, 0x8a, 0x5a, 0x3e, 0xee, 0x83, 0x53, 0x59, 0x89, 0xe4, 0x34, 0xf0, 0x20, 0x4d, 0x9d, 0x97, 0x47, 0x2a, 0xfa, 0xbf, 0x6f, 0x2, 0xd2, 0xd8, 0x8, 0x65, 0xb5, 0x71, 0xa1, 0xcc, 0x1c, 0x16, 0xc6, 0xab, 0x7b, 0x21, 0xf1, 0x9c, 0x4c, 0x46, 0x96, 0xfb, 0x2b, 0xef, 0x3f, 0x52, 0x82, 0x88, 0x58, 0x35, 0xe5, 0xa0, 0x70, 0x1d, 0xcd, 0xc7, 0x17, 0x7a, 0xaa, 0x6e, 0xbe, 0xd3, 0x3, 0x9, 0xd9, 0xb4, 0x64, 0x7c, 0xac, 0xc1, 0x11, 0x1b, 0xcb, 0xa6, 0x76, 0xb2, 0x62, 0xf, 0xdf, 0xd5, 0x5, 0x68, 0xb8, 0xfd, 0x2d, 0x40, 0x90, 0x9a, 0x4a, 0x27, 0xf7, 0x33, 0xe3, 0x8e, 0x5e, 0x54, 0x84, 0xe9, 0x39, 0x63, 0xb3, 0xde, 0xe, 0x4, 0xd4, 0xb9, 0x69, 0xad, 0x7d, 0x10, 0xc0, 0xca, 0x1a, 0x77, 0xa7, 0xe2, 0x32, 0x5f, 0x8f, 0x85, 0x55, 0x38, 0xe8, 0x2c, 0xfc, 0x91, 0x41, 0x4b, 0x9b, 0xf6, 0x26, 0x42, 0x92, 0xff, 0x2f, 0x25, 0xf5, 0x98, 0x48, 0x8c, 0x5c, 0x31, 0xe1, 0xeb, 0x3b, 0x56, 0x86, 0xc3, 0x13, 0x7e, 0xae, 0xa4, 0x74, 0x19, 0xc9, 0xd, 0xdd, 0xb0, 0x60, 0x6a, 0xba, 0xd7, 0x7, 0x5d, 0x8d, 0xe0, 0x30, 0x3a, 0xea, 0x87, 0x57, 0x93, 0x43, 0x2e, 0xfe, 0xf4, 0x24, 0x49, 0x99, 0xdc, 0xc, 0x61, 0xb1, 0xbb, 0x6b, 0x6, 0xd6, 0x12, 0xc2, 0xaf, 0x7f, 0x75, 0xa5, 0xc8, 0x18}, + {0x0, 0xd1, 0xbf, 0x6e, 0x63, 0xb2, 0xdc, 0xd, 0xc6, 0x17, 0x79, 0xa8, 0xa5, 0x74, 0x1a, 0xcb, 0x91, 0x40, 0x2e, 0xff, 0xf2, 0x23, 0x4d, 0x9c, 0x57, 0x86, 0xe8, 0x39, 0x34, 0xe5, 0x8b, 0x5a, 0x3f, 0xee, 0x80, 0x51, 0x5c, 0x8d, 0xe3, 0x32, 0xf9, 0x28, 0x46, 0x97, 0x9a, 0x4b, 0x25, 0xf4, 0xae, 0x7f, 0x11, 0xc0, 0xcd, 0x1c, 0x72, 0xa3, 0x68, 0xb9, 0xd7, 0x6, 0xb, 0xda, 0xb4, 0x65, 0x7e, 0xaf, 0xc1, 0x10, 0x1d, 0xcc, 0xa2, 0x73, 0xb8, 0x69, 0x7, 0xd6, 0xdb, 0xa, 0x64, 0xb5, 0xef, 0x3e, 0x50, 0x81, 0x8c, 0x5d, 0x33, 0xe2, 0x29, 0xf8, 0x96, 0x47, 0x4a, 0x9b, 0xf5, 0x24, 0x41, 0x90, 0xfe, 0x2f, 0x22, 0xf3, 0x9d, 0x4c, 0x87, 0x56, 0x38, 0xe9, 0xe4, 0x35, 0x5b, 0x8a, 0xd0, 0x1, 0x6f, 0xbe, 0xb3, 0x62, 0xc, 0xdd, 0x16, 0xc7, 0xa9, 0x78, 0x75, 0xa4, 0xca, 0x1b, 0xfc, 0x2d, 0x43, 0x92, 0x9f, 0x4e, 0x20, 0xf1, 0x3a, 0xeb, 0x85, 0x54, 0x59, 0x88, 0xe6, 0x37, 0x6d, 0xbc, 0xd2, 0x3, 0xe, 0xdf, 0xb1, 0x60, 0xab, 0x7a, 0x14, 0xc5, 0xc8, 0x19, 0x77, 0xa6, 0xc3, 0x12, 0x7c, 0xad, 0xa0, 0x71, 0x1f, 0xce, 0x5, 0xd4, 0xba, 0x6b, 0x66, 0xb7, 0xd9, 0x8, 0x52, 0x83, 0xed, 0x3c, 0x31, 0xe0, 0x8e, 0x5f, 0x94, 0x45, 0x2b, 0xfa, 0xf7, 0x26, 0x48, 0x99, 0x82, 0x53, 0x3d, 0xec, 0xe1, 0x30, 0x5e, 0x8f, 0x44, 0x95, 0xfb, 0x2a, 0x27, 0xf6, 0x98, 0x49, 0x13, 0xc2, 0xac, 0x7d, 0x70, 0xa1, 0xcf, 0x1e, 0xd5, 0x4, 0x6a, 0xbb, 0xb6, 0x67, 0x9, 0xd8, 0xbd, 0x6c, 0x2, 0xd3, 0xde, 0xf, 0x61, 0xb0, 0x7b, 0xaa, 0xc4, 0x15, 0x18, 0xc9, 0xa7, 0x76, 0x2c, 0xfd, 0x93, 0x42, 0x4f, 0x9e, 0xf0, 0x21, 0xea, 0x3b, 0x55, 0x84, 0x89, 0x58, 0x36, 0xe7}, + {0x0, 0xd2, 0xb9, 0x6b, 0x6f, 0xbd, 0xd6, 0x4, 0xde, 0xc, 0x67, 0xb5, 0xb1, 0x63, 0x8, 0xda, 0xa1, 0x73, 0x18, 0xca, 0xce, 0x1c, 0x77, 0xa5, 0x7f, 0xad, 0xc6, 0x14, 0x10, 0xc2, 0xa9, 0x7b, 0x5f, 0x8d, 0xe6, 0x34, 0x30, 0xe2, 0x89, 0x5b, 0x81, 0x53, 0x38, 0xea, 0xee, 0x3c, 0x57, 0x85, 0xfe, 0x2c, 0x47, 0x95, 0x91, 0x43, 0x28, 0xfa, 0x20, 0xf2, 0x99, 0x4b, 0x4f, 0x9d, 0xf6, 0x24, 0xbe, 0x6c, 0x7, 0xd5, 0xd1, 0x3, 0x68, 0xba, 0x60, 0xb2, 0xd9, 0xb, 0xf, 0xdd, 0xb6, 0x64, 0x1f, 0xcd, 0xa6, 0x74, 0x70, 0xa2, 0xc9, 0x1b, 0xc1, 0x13, 0x78, 0xaa, 0xae, 0x7c, 0x17, 0xc5, 0xe1, 0x33, 0x58, 0x8a, 0x8e, 0x5c, 0x37, 0xe5, 0x3f, 0xed, 0x86, 0x54, 0x50, 0x82, 0xe9, 0x3b, 0x40, 0x92, 0xf9, 0x2b, 0x2f, 0xfd, 0x96, 0x44, 0x9e, 0x4c, 0x27, 0xf5, 0xf1, 0x23, 0x48, 0x9a, 0x61, 0xb3, 0xd8, 0xa, 0xe, 0xdc, 0xb7, 0x65, 0xbf, 0x6d, 0x6, 0xd4, 0xd0, 0x2, 0x69, 0xbb, 0xc0, 0x12, 0x79, 0xab, 0xaf, 0x7d, 0x16, 0xc4, 0x1e, 0xcc, 0xa7, 0x75, 0x71, 0xa3, 0xc8, 0x1a, 0x3e, 0xec, 0x87, 0x55, 0x51, 0x83, 0xe8, 0x3a, 0xe0, 0x32, 0x59, 0x8b, 0x8f, 0x5d, 0x36, 0xe4, 0x9f, 0x4d, 0x26, 0xf4, 0xf0, 0x22, 0x49, 0x9b, 0x41, 0x93, 0xf8, 0x2a, 0x2e, 0xfc, 0x97, 0x45, 0xdf, 0xd, 0x66, 0xb4, 0xb0, 0x62, 0x9, 0xdb, 0x1, 0xd3, 0xb8, 0x6a, 0x6e, 0xbc, 0xd7, 0x5, 0x7e, 0xac, 0xc7, 0x15, 0x11, 0xc3, 0xa8, 0x7a, 0xa0, 0x72, 0x19, 0xcb, 0xcf, 0x1d, 0x76, 0xa4, 0x80, 0x52, 0x39, 0xeb, 0xef, 0x3d, 0x56, 0x84, 0x5e, 0x8c, 0xe7, 0x35, 0x31, 0xe3, 0x88, 0x5a, 0x21, 0xf3, 0x98, 0x4a, 0x4e, 0x9c, 0xf7, 0x25, 0xff, 0x2d, 0x46, 0x94, 0x90, 0x42, 0x29, 0xfb}, + {0x0, 0xd3, 0xbb, 0x68, 0x6b, 0xb8, 0xd0, 0x3, 0xd6, 0x5, 0x6d, 0xbe, 0xbd, 0x6e, 0x6, 0xd5, 0xb1, 0x62, 0xa, 0xd9, 0xda, 0x9, 0x61, 0xb2, 0x67, 0xb4, 0xdc, 0xf, 0xc, 0xdf, 0xb7, 0x64, 0x7f, 0xac, 0xc4, 0x17, 0x14, 0xc7, 0xaf, 0x7c, 0xa9, 0x7a, 0x12, 0xc1, 0xc2, 0x11, 0x79, 0xaa, 0xce, 0x1d, 0x75, 0xa6, 0xa5, 0x76, 0x1e, 0xcd, 0x18, 0xcb, 0xa3, 0x70, 0x73, 0xa0, 0xc8, 0x1b, 0xfe, 0x2d, 0x45, 0x96, 0x95, 0x46, 0x2e, 0xfd, 0x28, 0xfb, 0x93, 0x40, 0x43, 0x90, 0xf8, 0x2b, 0x4f, 0x9c, 0xf4, 0x27, 0x24, 0xf7, 0x9f, 0x4c, 0x99, 0x4a, 0x22, 0xf1, 0xf2, 0x21, 0x49, 0x9a, 0x81, 0x52, 0x3a, 0xe9, 0xea, 0x39, 0x51, 0x82, 0x57, 0x84, 0xec, 0x3f, 0x3c, 0xef, 0x87, 0x54, 0x30, 0xe3, 0x8b, 0x58, 0x5b, 0x88, 0xe0, 0x33, 0xe6, 0x35, 0x5d, 0x8e, 0x8d, 0x5e, 0x36, 0xe5, 0xe1, 0x32, 0x5a, 0x89, 0x8a, 0x59, 0x31, 0xe2, 0x37, 0xe4, 0x8c, 0x5f, 0x5c, 0x8f, 0xe7, 0x34, 0x50, 0x83, 0xeb, 0x38, 0x3b, 0xe8, 0x80, 0x53, 0x86, 0x55, 0x3d, 0xee, 0xed, 0x3e, 0x56, 0x85, 0x9e, 0x4d, 0x25, 0xf6, 0xf5, 0x26, 0x4e, 0x9d, 0x48, 0x9b, 0xf3, 0x20, 0x23, 0xf0, 0x98, 0x4b, 0x2f, 0xfc, 0x94, 0x47, 0x44, 0x97, 0xff, 0x2c, 0xf9, 0x2a, 0x42, 0x91, 0x92, 0x41, 0x29, 0xfa, 0x1f, 0xcc, 0xa4, 0x77, 0x74, 0xa7, 0xcf, 0x1c, 0xc9, 0x1a, 0x72, 0xa1, 0xa2, 0x71, 0x19, 0xca, 0xae, 0x7d, 0x15, 0xc6, 0xc5, 0x16, 0x7e, 0xad, 0x78, 0xab, 0xc3, 0x10, 0x13, 0xc0, 0xa8, 0x7b, 0x60, 0xb3, 0xdb, 0x8, 0xb, 0xd8, 0xb0, 0x63, 0xb6, 0x65, 0xd, 0xde, 0xdd, 0xe, 0x66, 0xb5, 0xd1, 0x2, 0x6a, 0xb9, 0xba, 0x69, 0x1, 0xd2, 0x7, 0xd4, 0xbc, 0x6f, 0x6c, 0xbf, 0xd7, 0x4}, + {0x0, 0xd4, 0xb5, 0x61, 0x77, 0xa3, 0xc2, 0x16, 0xee, 0x3a, 0x5b, 0x8f, 0x99, 0x4d, 0x2c, 0xf8, 0xc1, 0x15, 0x74, 0xa0, 0xb6, 0x62, 0x3, 0xd7, 0x2f, 0xfb, 0x9a, 0x4e, 0x58, 0x8c, 0xed, 0x39, 0x9f, 0x4b, 0x2a, 0xfe, 0xe8, 0x3c, 0x5d, 0x89, 0x71, 0xa5, 0xc4, 0x10, 0x6, 0xd2, 0xb3, 0x67, 0x5e, 0x8a, 0xeb, 0x3f, 0x29, 0xfd, 0x9c, 0x48, 0xb0, 0x64, 0x5, 0xd1, 0xc7, 0x13, 0x72, 0xa6, 0x23, 0xf7, 0x96, 0x42, 0x54, 0x80, 0xe1, 0x35, 0xcd, 0x19, 0x78, 0xac, 0xba, 0x6e, 0xf, 0xdb, 0xe2, 0x36, 0x57, 0x83, 0x95, 0x41, 0x20, 0xf4, 0xc, 0xd8, 0xb9, 0x6d, 0x7b, 0xaf, 0xce, 0x1a, 0xbc, 0x68, 0x9, 0xdd, 0xcb, 0x1f, 0x7e, 0xaa, 0x52, 0x86, 0xe7, 0x33, 0x25, 0xf1, 0x90, 0x44, 0x7d, 0xa9, 0xc8, 0x1c, 0xa, 0xde, 0xbf, 0x6b, 0x93, 0x47, 0x26, 0xf2, 0xe4, 0x30, 0x51, 0x85, 0x46, 0x92, 0xf3, 0x27, 0x31, 0xe5, 0x84, 0x50, 0xa8, 0x7c, 0x1d, 0xc9, 0xdf, 0xb, 0x6a, 0xbe, 0x87, 0x53, 0x32, 0xe6, 0xf0, 0x24, 0x45, 0x91, 0x69, 0xbd, 0xdc, 0x8, 0x1e, 0xca, 0xab, 0x7f, 0xd9, 0xd, 0x6c, 0xb8, 0xae, 0x7a, 0x1b, 0xcf, 0x37, 0xe3, 0x82, 0x56, 0x40, 0x94, 0xf5, 0x21, 0x18, 0xcc, 0xad, 0x79, 0x6f, 0xbb, 0xda, 0xe, 0xf6, 0x22, 0x43, 0x97, 0x81, 0x55, 0x34, 0xe0, 0x65, 0xb1, 0xd0, 0x4, 0x12, 0xc6, 0xa7, 0x73, 0x8b, 0x5f, 0x3e, 0xea, 0xfc, 0x28, 0x49, 0x9d, 0xa4, 0x70, 0x11, 0xc5, 0xd3, 0x7, 0x66, 0xb2, 0x4a, 0x9e, 0xff, 0x2b, 0x3d, 0xe9, 0x88, 0x5c, 0xfa, 0x2e, 0x4f, 0x9b, 0x8d, 0x59, 0x38, 0xec, 0x14, 0xc0, 0xa1, 0x75, 0x63, 0xb7, 0xd6, 0x2, 0x3b, 0xef, 0x8e, 0x5a, 0x4c, 0x98, 0xf9, 0x2d, 0xd5, 0x1, 0x60, 0xb4, 0xa2, 0x76, 0x17, 0xc3}, + {0x0, 0xd5, 0xb7, 0x62, 0x73, 0xa6, 0xc4, 0x11, 0xe6, 0x33, 0x51, 0x84, 0x95, 0x40, 0x22, 0xf7, 0xd1, 0x4, 0x66, 0xb3, 0xa2, 0x77, 0x15, 0xc0, 0x37, 0xe2, 0x80, 0x55, 0x44, 0x91, 0xf3, 0x26, 0xbf, 0x6a, 0x8, 0xdd, 0xcc, 0x19, 0x7b, 0xae, 0x59, 0x8c, 0xee, 0x3b, 0x2a, 0xff, 0x9d, 0x48, 0x6e, 0xbb, 0xd9, 0xc, 0x1d, 0xc8, 0xaa, 0x7f, 0x88, 0x5d, 0x3f, 0xea, 0xfb, 0x2e, 0x4c, 0x99, 0x63, 0xb6, 0xd4, 0x1, 0x10, 0xc5, 0xa7, 0x72, 0x85, 0x50, 0x32, 0xe7, 0xf6, 0x23, 0x41, 0x94, 0xb2, 0x67, 0x5, 0xd0, 0xc1, 0x14, 0x76, 0xa3, 0x54, 0x81, 0xe3, 0x36, 0x27, 0xf2, 0x90, 0x45, 0xdc, 0x9, 0x6b, 0xbe, 0xaf, 0x7a, 0x18, 0xcd, 0x3a, 0xef, 0x8d, 0x58, 0x49, 0x9c, 0xfe, 0x2b, 0xd, 0xd8, 0xba, 0x6f, 0x7e, 0xab, 0xc9, 0x1c, 0xeb, 0x3e, 0x5c, 0x89, 0x98, 0x4d, 0x2f, 0xfa, 0xc6, 0x13, 0x71, 0xa4, 0xb5, 0x60, 0x2, 0xd7, 0x20, 0xf5, 0x97, 0x42, 0x53, 0x86, 0xe4, 0x31, 0x17, 0xc2, 0xa0, 0x75, 0x64, 0xb1, 0xd3, 0x6, 0xf1, 0x24, 0x46, 0x93, 0x82, 0x57, 0x35, 0xe0, 0x79, 0xac, 0xce, 0x1b, 0xa, 0xdf, 0xbd, 0x68, 0x9f, 0x4a, 0x28, 0xfd, 0xec, 0x39, 0x5b, 0x8e, 0xa8, 0x7d, 0x1f, 0xca, 0xdb, 0xe, 0x6c, 0xb9, 0x4e, 0x9b, 0xf9, 0x2c, 0x3d, 0xe8, 0x8a, 0x5f, 0xa5, 0x70, 0x12, 0xc7, 0xd6, 0x3, 0x61, 0xb4, 0x43, 0x96, 0xf4, 0x21, 0x30, 0xe5, 0x87, 0x52, 0x74, 0xa1, 0xc3, 0x16, 0x7, 0xd2, 0xb0, 0x65, 0x92, 0x47, 0x25, 0xf0, 0xe1, 0x34, 0x56, 0x83, 0x1a, 0xcf, 0xad, 0x78, 0x69, 0xbc, 0xde, 0xb, 0xfc, 0x29, 0x4b, 0x9e, 0x8f, 0x5a, 0x38, 0xed, 0xcb, 0x1e, 0x7c, 0xa9, 0xb8, 0x6d, 0xf, 0xda, 0x2d, 0xf8, 0x9a, 0x4f, 0x5e, 0x8b, 0xe9, 0x3c}, + {0x0, 0xd6, 0xb1, 0x67, 0x7f, 0xa9, 0xce, 0x18, 0xfe, 0x28, 0x4f, 0x99, 0x81, 0x57, 0x30, 0xe6, 0xe1, 0x37, 0x50, 0x86, 0x9e, 0x48, 0x2f, 0xf9, 0x1f, 0xc9, 0xae, 0x78, 0x60, 0xb6, 0xd1, 0x7, 0xdf, 0x9, 0x6e, 0xb8, 0xa0, 0x76, 0x11, 0xc7, 0x21, 0xf7, 0x90, 0x46, 0x5e, 0x88, 0xef, 0x39, 0x3e, 0xe8, 0x8f, 0x59, 0x41, 0x97, 0xf0, 0x26, 0xc0, 0x16, 0x71, 0xa7, 0xbf, 0x69, 0xe, 0xd8, 0xa3, 0x75, 0x12, 0xc4, 0xdc, 0xa, 0x6d, 0xbb, 0x5d, 0x8b, 0xec, 0x3a, 0x22, 0xf4, 0x93, 0x45, 0x42, 0x94, 0xf3, 0x25, 0x3d, 0xeb, 0x8c, 0x5a, 0xbc, 0x6a, 0xd, 0xdb, 0xc3, 0x15, 0x72, 0xa4, 0x7c, 0xaa, 0xcd, 0x1b, 0x3, 0xd5, 0xb2, 0x64, 0x82, 0x54, 0x33, 0xe5, 0xfd, 0x2b, 0x4c, 0x9a, 0x9d, 0x4b, 0x2c, 0xfa, 0xe2, 0x34, 0x53, 0x85, 0x63, 0xb5, 0xd2, 0x4, 0x1c, 0xca, 0xad, 0x7b, 0x5b, 0x8d, 0xea, 0x3c, 0x24, 0xf2, 0x95, 0x43, 0xa5, 0x73, 0x14, 0xc2, 0xda, 0xc, 0x6b, 0xbd, 0xba, 0x6c, 0xb, 0xdd, 0xc5, 0x13, 0x74, 0xa2, 0x44, 0x92, 0xf5, 0x23, 0x3b, 0xed, 0x8a, 0x5c, 0x84, 0x52, 0x35, 0xe3, 0xfb, 0x2d, 0x4a, 0x9c, 0x7a, 0xac, 0xcb, 0x1d, 0x5, 0xd3, 0xb4, 0x62, 0x65, 0xb3, 0xd4, 0x2, 0x1a, 0xcc, 0xab, 0x7d, 0x9b, 0x4d, 0x2a, 0xfc, 0xe4, 0x32, 0x55, 0x83, 0xf8, 0x2e, 0x49, 0x9f, 0x87, 0x51, 0x36, 0xe0, 0x6, 0xd0, 0xb7, 0x61, 0x79, 0xaf, 0xc8, 0x1e, 0x19, 0xcf, 0xa8, 0x7e, 0x66, 0xb0, 0xd7, 0x1, 0xe7, 0x31, 0x56, 0x80, 0x98, 0x4e, 0x29, 0xff, 0x27, 0xf1, 0x96, 0x40, 0x58, 0x8e, 0xe9, 0x3f, 0xd9, 0xf, 0x68, 0xbe, 0xa6, 0x70, 0x17, 0xc1, 0xc6, 0x10, 0x77, 0xa1, 0xb9, 0x6f, 0x8, 0xde, 0x38, 0xee, 0x89, 0x5f, 0x47, 0x91, 0xf6, 0x20}, + {0x0, 0xd7, 0xb3, 0x64, 0x7b, 0xac, 0xc8, 0x1f, 0xf6, 0x21, 0x45, 0x92, 0x8d, 0x5a, 0x3e, 0xe9, 0xf1, 0x26, 0x42, 0x95, 0x8a, 0x5d, 0x39, 0xee, 0x7, 0xd0, 0xb4, 0x63, 0x7c, 0xab, 0xcf, 0x18, 0xff, 0x28, 0x4c, 0x9b, 0x84, 0x53, 0x37, 0xe0, 0x9, 0xde, 0xba, 0x6d, 0x72, 0xa5, 0xc1, 0x16, 0xe, 0xd9, 0xbd, 0x6a, 0x75, 0xa2, 0xc6, 0x11, 0xf8, 0x2f, 0x4b, 0x9c, 0x83, 0x54, 0x30, 0xe7, 0xe3, 0x34, 0x50, 0x87, 0x98, 0x4f, 0x2b, 0xfc, 0x15, 0xc2, 0xa6, 0x71, 0x6e, 0xb9, 0xdd, 0xa, 0x12, 0xc5, 0xa1, 0x76, 0x69, 0xbe, 0xda, 0xd, 0xe4, 0x33, 0x57, 0x80, 0x9f, 0x48, 0x2c, 0xfb, 0x1c, 0xcb, 0xaf, 0x78, 0x67, 0xb0, 0xd4, 0x3, 0xea, 0x3d, 0x59, 0x8e, 0x91, 0x46, 0x22, 0xf5, 0xed, 0x3a, 0x5e, 0x89, 0x96, 0x41, 0x25, 0xf2, 0x1b, 0xcc, 0xa8, 0x7f, 0x60, 0xb7, 0xd3, 0x4, 0xdb, 0xc, 0x68, 0xbf, 0xa0, 0x77, 0x13, 0xc4, 0x2d, 0xfa, 0x9e, 0x49, 0x56, 0x81, 0xe5, 0x32, 0x2a, 0xfd, 0x99, 0x4e, 0x51, 0x86, 0xe2, 0x35, 0xdc, 0xb, 0x6f, 0xb8, 0xa7, 0x70, 0x14, 0xc3, 0x24, 0xf3, 0x97, 0x40, 0x5f, 0x88, 0xec, 0x3b, 0xd2, 0x5, 0x61, 0xb6, 0xa9, 0x7e, 0x1a, 0xcd, 0xd5, 0x2, 0x66, 0xb1, 0xae, 0x79, 0x1d, 0xca, 0x23, 0xf4, 0x90, 0x47, 0x58, 0x8f, 0xeb, 0x3c, 0x38, 0xef, 0x8b, 0x5c, 0x43, 0x94, 0xf0, 0x27, 0xce, 0x19, 0x7d, 0xaa, 0xb5, 0x62, 0x6, 0xd1, 0xc9, 0x1e, 0x7a, 0xad, 0xb2, 0x65, 0x1, 0xd6, 0x3f, 0xe8, 0x8c, 0x5b, 0x44, 0x93, 0xf7, 0x20, 0xc7, 0x10, 0x74, 0xa3, 0xbc, 0x6b, 0xf, 0xd8, 0x31, 0xe6, 0x82, 0x55, 0x4a, 0x9d, 0xf9, 0x2e, 0x36, 0xe1, 0x85, 0x52, 0x4d, 0x9a, 0xfe, 0x29, 0xc0, 0x17, 0x73, 0xa4, 0xbb, 0x6c, 0x8, 0xdf}, + {0x0, 0xd8, 0xad, 0x75, 0x47, 0x9f, 0xea, 0x32, 0x8e, 0x56, 0x23, 0xfb, 0xc9, 0x11, 0x64, 0xbc, 0x1, 0xd9, 0xac, 0x74, 0x46, 0x9e, 0xeb, 0x33, 0x8f, 0x57, 0x22, 0xfa, 0xc8, 0x10, 0x65, 0xbd, 0x2, 0xda, 0xaf, 0x77, 0x45, 0x9d, 0xe8, 0x30, 0x8c, 0x54, 0x21, 0xf9, 0xcb, 0x13, 0x66, 0xbe, 0x3, 0xdb, 0xae, 0x76, 0x44, 0x9c, 0xe9, 0x31, 0x8d, 0x55, 0x20, 0xf8, 0xca, 0x12, 0x67, 0xbf, 0x4, 0xdc, 0xa9, 0x71, 0x43, 0x9b, 0xee, 0x36, 0x8a, 0x52, 0x27, 0xff, 0xcd, 0x15, 0x60, 0xb8, 0x5, 0xdd, 0xa8, 0x70, 0x42, 0x9a, 0xef, 0x37, 0x8b, 0x53, 0x26, 0xfe, 0xcc, 0x14, 0x61, 0xb9, 0x6, 0xde, 0xab, 0x73, 0x41, 0x99, 0xec, 0x34, 0x88, 0x50, 0x25, 0xfd, 0xcf, 0x17, 0x62, 0xba, 0x7, 0xdf, 0xaa, 0x72, 0x40, 0x98, 0xed, 0x35, 0x89, 0x51, 0x24, 0xfc, 0xce, 0x16, 0x63, 0xbb, 0x8, 0xd0, 0xa5, 0x7d, 0x4f, 0x97, 0xe2, 0x3a, 0x86, 0x5e, 0x2b, 0xf3, 0xc1, 0x19, 0x6c, 0xb4, 0x9, 0xd1, 0xa4, 0x7c, 0x4e, 0x96, 0xe3, 0x3b, 0x87, 0x5f, 0x2a, 0xf2, 0xc0, 0x18, 0x6d, 0xb5, 0xa, 0xd2, 0xa7, 0x7f, 0x4d, 0x95, 0xe0, 0x38, 0x84, 0x5c, 0x29, 0xf1, 0xc3, 0x1b, 0x6e, 0xb6, 0xb, 0xd3, 0xa6, 0x7e, 0x4c, 0x94, 0xe1, 0x39, 0x85, 0x5d, 0x28, 0xf0, 0xc2, 0x1a, 0x6f, 0xb7, 0xc, 0xd4, 0xa1, 0x79, 0x4b, 0x93, 0xe6, 0x3e, 0x82, 0x5a, 0x2f, 0xf7, 0xc5, 0x1d, 0x68, 0xb0, 0xd, 0xd5, 0xa0, 0x78, 0x4a, 0x92, 0xe7, 0x3f, 0x83, 0x5b, 0x2e, 0xf6, 0xc4, 0x1c, 0x69, 0xb1, 0xe, 0xd6, 0xa3, 0x7b, 0x49, 0x91, 0xe4, 0x3c, 0x80, 0x58, 0x2d, 0xf5, 0xc7, 0x1f, 0x6a, 0xb2, 0xf, 0xd7, 0xa2, 0x7a, 0x48, 0x90, 0xe5, 0x3d, 0x81, 0x59, 0x2c, 0xf4, 0xc6, 0x1e, 0x6b, 0xb3}, + {0x0, 0xd9, 0xaf, 0x76, 0x43, 0x9a, 0xec, 0x35, 0x86, 0x5f, 0x29, 0xf0, 0xc5, 0x1c, 0x6a, 0xb3, 0x11, 0xc8, 0xbe, 0x67, 0x52, 0x8b, 0xfd, 0x24, 0x97, 0x4e, 0x38, 0xe1, 0xd4, 0xd, 0x7b, 0xa2, 0x22, 0xfb, 0x8d, 0x54, 0x61, 0xb8, 0xce, 0x17, 0xa4, 0x7d, 0xb, 0xd2, 0xe7, 0x3e, 0x48, 0x91, 0x33, 0xea, 0x9c, 0x45, 0x70, 0xa9, 0xdf, 0x6, 0xb5, 0x6c, 0x1a, 0xc3, 0xf6, 0x2f, 0x59, 0x80, 0x44, 0x9d, 0xeb, 0x32, 0x7, 0xde, 0xa8, 0x71, 0xc2, 0x1b, 0x6d, 0xb4, 0x81, 0x58, 0x2e, 0xf7, 0x55, 0x8c, 0xfa, 0x23, 0x16, 0xcf, 0xb9, 0x60, 0xd3, 0xa, 0x7c, 0xa5, 0x90, 0x49, 0x3f, 0xe6, 0x66, 0xbf, 0xc9, 0x10, 0x25, 0xfc, 0x8a, 0x53, 0xe0, 0x39, 0x4f, 0x96, 0xa3, 0x7a, 0xc, 0xd5, 0x77, 0xae, 0xd8, 0x1, 0x34, 0xed, 0x9b, 0x42, 0xf1, 0x28, 0x5e, 0x87, 0xb2, 0x6b, 0x1d, 0xc4, 0x88, 0x51, 0x27, 0xfe, 0xcb, 0x12, 0x64, 0xbd, 0xe, 0xd7, 0xa1, 0x78, 0x4d, 0x94, 0xe2, 0x3b, 0x99, 0x40, 0x36, 0xef, 0xda, 0x3, 0x75, 0xac, 0x1f, 0xc6, 0xb0, 0x69, 0x5c, 0x85, 0xf3, 0x2a, 0xaa, 0x73, 0x5, 0xdc, 0xe9, 0x30, 0x46, 0x9f, 0x2c, 0xf5, 0x83, 0x5a, 0x6f, 0xb6, 0xc0, 0x19, 0xbb, 0x62, 0x14, 0xcd, 0xf8, 0x21, 0x57, 0x8e, 0x3d, 0xe4, 0x92, 0x4b, 0x7e, 0xa7, 0xd1, 0x8, 0xcc, 0x15, 0x63, 0xba, 0x8f, 0x56, 0x20, 0xf9, 0x4a, 0x93, 0xe5, 0x3c, 0x9, 0xd0, 0xa6, 0x7f, 0xdd, 0x4, 0x72, 0xab, 0x9e, 0x47, 0x31, 0xe8, 0x5b, 0x82, 0xf4, 0x2d, 0x18, 0xc1, 0xb7, 0x6e, 0xee, 0x37, 0x41, 0x98, 0xad, 0x74, 0x2, 0xdb, 0x68, 0xb1, 0xc7, 0x1e, 0x2b, 0xf2, 0x84, 0x5d, 0xff, 0x26, 0x50, 0x89, 0xbc, 0x65, 0x13, 0xca, 0x79, 0xa0, 0xd6, 0xf, 0x3a, 0xe3, 0x95, 0x4c}, + {0x0, 0xda, 0xa9, 0x73, 0x4f, 0x95, 0xe6, 0x3c, 0x9e, 0x44, 0x37, 0xed, 0xd1, 0xb, 0x78, 0xa2, 0x21, 0xfb, 0x88, 0x52, 0x6e, 0xb4, 0xc7, 0x1d, 0xbf, 0x65, 0x16, 0xcc, 0xf0, 0x2a, 0x59, 0x83, 0x42, 0x98, 0xeb, 0x31, 0xd, 0xd7, 0xa4, 0x7e, 0xdc, 0x6, 0x75, 0xaf, 0x93, 0x49, 0x3a, 0xe0, 0x63, 0xb9, 0xca, 0x10, 0x2c, 0xf6, 0x85, 0x5f, 0xfd, 0x27, 0x54, 0x8e, 0xb2, 0x68, 0x1b, 0xc1, 0x84, 0x5e, 0x2d, 0xf7, 0xcb, 0x11, 0x62, 0xb8, 0x1a, 0xc0, 0xb3, 0x69, 0x55, 0x8f, 0xfc, 0x26, 0xa5, 0x7f, 0xc, 0xd6, 0xea, 0x30, 0x43, 0x99, 0x3b, 0xe1, 0x92, 0x48, 0x74, 0xae, 0xdd, 0x7, 0xc6, 0x1c, 0x6f, 0xb5, 0x89, 0x53, 0x20, 0xfa, 0x58, 0x82, 0xf1, 0x2b, 0x17, 0xcd, 0xbe, 0x64, 0xe7, 0x3d, 0x4e, 0x94, 0xa8, 0x72, 0x1, 0xdb, 0x79, 0xa3, 0xd0, 0xa, 0x36, 0xec, 0x9f, 0x45, 0x15, 0xcf, 0xbc, 0x66, 0x5a, 0x80, 0xf3, 0x29, 0x8b, 0x51, 0x22, 0xf8, 0xc4, 0x1e, 0x6d, 0xb7, 0x34, 0xee, 0x9d, 0x47, 0x7b, 0xa1, 0xd2, 0x8, 0xaa, 0x70, 0x3, 0xd9, 0xe5, 0x3f, 0x4c, 0x96, 0x57, 0x8d, 0xfe, 0x24, 0x18, 0xc2, 0xb1, 0x6b, 0xc9, 0x13, 0x60, 0xba, 0x86, 0x5c, 0x2f, 0xf5, 0x76, 0xac, 0xdf, 0x5, 0x39, 0xe3, 0x90, 0x4a, 0xe8, 0x32, 0x41, 0x9b, 0xa7, 0x7d, 0xe, 0xd4, 0x91, 0x4b, 0x38, 0xe2, 0xde, 0x4, 0x77, 0xad, 0xf, 0xd5, 0xa6, 0x7c, 0x40, 0x9a, 0xe9, 0x33, 0xb0, 0x6a, 0x19, 0xc3, 0xff, 0x25, 0x56, 0x8c, 0x2e, 0xf4, 0x87, 0x5d, 0x61, 0xbb, 0xc8, 0x12, 0xd3, 0x9, 0x7a, 0xa0, 0x9c, 0x46, 0x35, 0xef, 0x4d, 0x97, 0xe4, 0x3e, 0x2, 0xd8, 0xab, 0x71, 0xf2, 0x28, 0x5b, 0x81, 0xbd, 0x67, 0x14, 0xce, 0x6c, 0xb6, 0xc5, 0x1f, 0x23, 0xf9, 0x8a, 0x50}, + {0x0, 0xdb, 0xab, 0x70, 0x4b, 0x90, 0xe0, 0x3b, 0x96, 0x4d, 0x3d, 0xe6, 0xdd, 0x6, 0x76, 0xad, 0x31, 0xea, 0x9a, 0x41, 0x7a, 0xa1, 0xd1, 0xa, 0xa7, 0x7c, 0xc, 0xd7, 0xec, 0x37, 0x47, 0x9c, 0x62, 0xb9, 0xc9, 0x12, 0x29, 0xf2, 0x82, 0x59, 0xf4, 0x2f, 0x5f, 0x84, 0xbf, 0x64, 0x14, 0xcf, 0x53, 0x88, 0xf8, 0x23, 0x18, 0xc3, 0xb3, 0x68, 0xc5, 0x1e, 0x6e, 0xb5, 0x8e, 0x55, 0x25, 0xfe, 0xc4, 0x1f, 0x6f, 0xb4, 0x8f, 0x54, 0x24, 0xff, 0x52, 0x89, 0xf9, 0x22, 0x19, 0xc2, 0xb2, 0x69, 0xf5, 0x2e, 0x5e, 0x85, 0xbe, 0x65, 0x15, 0xce, 0x63, 0xb8, 0xc8, 0x13, 0x28, 0xf3, 0x83, 0x58, 0xa6, 0x7d, 0xd, 0xd6, 0xed, 0x36, 0x46, 0x9d, 0x30, 0xeb, 0x9b, 0x40, 0x7b, 0xa0, 0xd0, 0xb, 0x97, 0x4c, 0x3c, 0xe7, 0xdc, 0x7, 0x77, 0xac, 0x1, 0xda, 0xaa, 0x71, 0x4a, 0x91, 0xe1, 0x3a, 0x95, 0x4e, 0x3e, 0xe5, 0xde, 0x5, 0x75, 0xae, 0x3, 0xd8, 0xa8, 0x73, 0x48, 0x93, 0xe3, 0x38, 0xa4, 0x7f, 0xf, 0xd4, 0xef, 0x34, 0x44, 0x9f, 0x32, 0xe9, 0x99, 0x42, 0x79, 0xa2, 0xd2, 0x9, 0xf7, 0x2c, 0x5c, 0x87, 0xbc, 0x67, 0x17, 0xcc, 0x61, 0xba, 0xca, 0x11, 0x2a, 0xf1, 0x81, 0x5a, 0xc6, 0x1d, 0x6d, 0xb6, 0x8d, 0x56, 0x26, 0xfd, 0x50, 0x8b, 0xfb, 0x20, 0x1b, 0xc0, 0xb0, 0x6b, 0x51, 0x8a, 0xfa, 0x21, 0x1a, 0xc1, 0xb1, 0x6a, 0xc7, 0x1c, 0x6c, 0xb7, 0x8c, 0x57, 0x27, 0xfc, 0x60, 0xbb, 0xcb, 0x10, 0x2b, 0xf0, 0x80, 0x5b, 0xf6, 0x2d, 0x5d, 0x86, 0xbd, 0x66, 0x16, 0xcd, 0x33, 0xe8, 0x98, 0x43, 0x78, 0xa3, 0xd3, 0x8, 0xa5, 0x7e, 0xe, 0xd5, 0xee, 0x35, 0x45, 0x9e, 0x2, 0xd9, 0xa9, 0x72, 0x49, 0x92, 0xe2, 0x39, 0x94, 0x4f, 0x3f, 0xe4, 0xdf, 0x4, 0x74, 0xaf}, + {0x0, 0xdc, 0xa5, 0x79, 0x57, 0x8b, 0xf2, 0x2e, 0xae, 0x72, 0xb, 0xd7, 0xf9, 0x25, 0x5c, 0x80, 0x41, 0x9d, 0xe4, 0x38, 0x16, 0xca, 0xb3, 0x6f, 0xef, 0x33, 0x4a, 0x96, 0xb8, 0x64, 0x1d, 0xc1, 0x82, 0x5e, 0x27, 0xfb, 0xd5, 0x9, 0x70, 0xac, 0x2c, 0xf0, 0x89, 0x55, 0x7b, 0xa7, 0xde, 0x2, 0xc3, 0x1f, 0x66, 0xba, 0x94, 0x48, 0x31, 0xed, 0x6d, 0xb1, 0xc8, 0x14, 0x3a, 0xe6, 0x9f, 0x43, 0x19, 0xc5, 0xbc, 0x60, 0x4e, 0x92, 0xeb, 0x37, 0xb7, 0x6b, 0x12, 0xce, 0xe0, 0x3c, 0x45, 0x99, 0x58, 0x84, 0xfd, 0x21, 0xf, 0xd3, 0xaa, 0x76, 0xf6, 0x2a, 0x53, 0x8f, 0xa1, 0x7d, 0x4, 0xd8, 0x9b, 0x47, 0x3e, 0xe2, 0xcc, 0x10, 0x69, 0xb5, 0x35, 0xe9, 0x90, 0x4c, 0x62, 0xbe, 0xc7, 0x1b, 0xda, 0x6, 0x7f, 0xa3, 0x8d, 0x51, 0x28, 0xf4, 0x74, 0xa8, 0xd1, 0xd, 0x23, 0xff, 0x86, 0x5a, 0x32, 0xee, 0x97, 0x4b, 0x65, 0xb9, 0xc0, 0x1c, 0x9c, 0x40, 0x39, 0xe5, 0xcb, 0x17, 0x6e, 0xb2, 0x73, 0xaf, 0xd6, 0xa, 0x24, 0xf8, 0x81, 0x5d, 0xdd, 0x1, 0x78, 0xa4, 0x8a, 0x56, 0x2f, 0xf3, 0xb0, 0x6c, 0x15, 0xc9, 0xe7, 0x3b, 0x42, 0x9e, 0x1e, 0xc2, 0xbb, 0x67, 0x49, 0x95, 0xec, 0x30, 0xf1, 0x2d, 0x54, 0x88, 0xa6, 0x7a, 0x3, 0xdf, 0x5f, 0x83, 0xfa, 0x26, 0x8, 0xd4, 0xad, 0x71, 0x2b, 0xf7, 0x8e, 0x52, 0x7c, 0xa0, 0xd9, 0x5, 0x85, 0x59, 0x20, 0xfc, 0xd2, 0xe, 0x77, 0xab, 0x6a, 0xb6, 0xcf, 0x13, 0x3d, 0xe1, 0x98, 0x44, 0xc4, 0x18, 0x61, 0xbd, 0x93, 0x4f, 0x36, 0xea, 0xa9, 0x75, 0xc, 0xd0, 0xfe, 0x22, 0x5b, 0x87, 0x7, 0xdb, 0xa2, 0x7e, 0x50, 0x8c, 0xf5, 0x29, 0xe8, 0x34, 0x4d, 0x91, 0xbf, 0x63, 0x1a, 0xc6, 0x46, 0x9a, 0xe3, 0x3f, 0x11, 0xcd, 0xb4, 0x68}, + {0x0, 0xdd, 0xa7, 0x7a, 0x53, 0x8e, 0xf4, 0x29, 0xa6, 0x7b, 0x1, 0xdc, 0xf5, 0x28, 0x52, 0x8f, 0x51, 0x8c, 0xf6, 0x2b, 0x2, 0xdf, 0xa5, 0x78, 0xf7, 0x2a, 0x50, 0x8d, 0xa4, 0x79, 0x3, 0xde, 0xa2, 0x7f, 0x5, 0xd8, 0xf1, 0x2c, 0x56, 0x8b, 0x4, 0xd9, 0xa3, 0x7e, 0x57, 0x8a, 0xf0, 0x2d, 0xf3, 0x2e, 0x54, 0x89, 0xa0, 0x7d, 0x7, 0xda, 0x55, 0x88, 0xf2, 0x2f, 0x6, 0xdb, 0xa1, 0x7c, 0x59, 0x84, 0xfe, 0x23, 0xa, 0xd7, 0xad, 0x70, 0xff, 0x22, 0x58, 0x85, 0xac, 0x71, 0xb, 0xd6, 0x8, 0xd5, 0xaf, 0x72, 0x5b, 0x86, 0xfc, 0x21, 0xae, 0x73, 0x9, 0xd4, 0xfd, 0x20, 0x5a, 0x87, 0xfb, 0x26, 0x5c, 0x81, 0xa8, 0x75, 0xf, 0xd2, 0x5d, 0x80, 0xfa, 0x27, 0xe, 0xd3, 0xa9, 0x74, 0xaa, 0x77, 0xd, 0xd0, 0xf9, 0x24, 0x5e, 0x83, 0xc, 0xd1, 0xab, 0x76, 0x5f, 0x82, 0xf8, 0x25, 0xb2, 0x6f, 0x15, 0xc8, 0xe1, 0x3c, 0x46, 0x9b, 0x14, 0xc9, 0xb3, 0x6e, 0x47, 0x9a, 0xe0, 0x3d, 0xe3, 0x3e, 0x44, 0x99, 0xb0, 0x6d, 0x17, 0xca, 0x45, 0x98, 0xe2, 0x3f, 0x16, 0xcb, 0xb1, 0x6c, 0x10, 0xcd, 0xb7, 0x6a, 0x43, 0x9e, 0xe4, 0x39, 0xb6, 0x6b, 0x11, 0xcc, 0xe5, 0x38, 0x42, 0x9f, 0x41, 0x9c, 0xe6, 0x3b, 0x12, 0xcf, 0xb5, 0x68, 0xe7, 0x3a, 0x40, 0x9d, 0xb4, 0x69, 0x13, 0xce, 0xeb, 0x36, 0x4c, 0x91, 0xb8, 0x65, 0x1f, 0xc2, 0x4d, 0x90, 0xea, 0x37, 0x1e, 0xc3, 0xb9, 0x64, 0xba, 0x67, 0x1d, 0xc0, 0xe9, 0x34, 0x4e, 0x93, 0x1c, 0xc1, 0xbb, 0x66, 0x4f, 0x92, 0xe8, 0x35, 0x49, 0x94, 0xee, 0x33, 0x1a, 0xc7, 0xbd, 0x60, 0xef, 0x32, 0x48, 0x95, 0xbc, 0x61, 0x1b, 0xc6, 0x18, 0xc5, 0xbf, 0x62, 0x4b, 0x96, 0xec, 0x31, 0xbe, 0x63, 0x19, 0xc4, 0xed, 0x30, 0x4a, 0x97}, + {0x0, 0xde, 0xa1, 0x7f, 0x5f, 0x81, 0xfe, 0x20, 0xbe, 0x60, 0x1f, 0xc1, 0xe1, 0x3f, 0x40, 0x9e, 0x61, 0xbf, 0xc0, 0x1e, 0x3e, 0xe0, 0x9f, 0x41, 0xdf, 0x1, 0x7e, 0xa0, 0x80, 0x5e, 0x21, 0xff, 0xc2, 0x1c, 0x63, 0xbd, 0x9d, 0x43, 0x3c, 0xe2, 0x7c, 0xa2, 0xdd, 0x3, 0x23, 0xfd, 0x82, 0x5c, 0xa3, 0x7d, 0x2, 0xdc, 0xfc, 0x22, 0x5d, 0x83, 0x1d, 0xc3, 0xbc, 0x62, 0x42, 0x9c, 0xe3, 0x3d, 0x99, 0x47, 0x38, 0xe6, 0xc6, 0x18, 0x67, 0xb9, 0x27, 0xf9, 0x86, 0x58, 0x78, 0xa6, 0xd9, 0x7, 0xf8, 0x26, 0x59, 0x87, 0xa7, 0x79, 0x6, 0xd8, 0x46, 0x98, 0xe7, 0x39, 0x19, 0xc7, 0xb8, 0x66, 0x5b, 0x85, 0xfa, 0x24, 0x4, 0xda, 0xa5, 0x7b, 0xe5, 0x3b, 0x44, 0x9a, 0xba, 0x64, 0x1b, 0xc5, 0x3a, 0xe4, 0x9b, 0x45, 0x65, 0xbb, 0xc4, 0x1a, 0x84, 0x5a, 0x25, 0xfb, 0xdb, 0x5, 0x7a, 0xa4, 0x2f, 0xf1, 0x8e, 0x50, 0x70, 0xae, 0xd1, 0xf, 0x91, 0x4f, 0x30, 0xee, 0xce, 0x10, 0x6f, 0xb1, 0x4e, 0x90, 0xef, 0x31, 0x11, 0xcf, 0xb0, 0x6e, 0xf0, 0x2e, 0x51, 0x8f, 0xaf, 0x71, 0xe, 0xd0, 0xed, 0x33, 0x4c, 0x92, 0xb2, 0x6c, 0x13, 0xcd, 0x53, 0x8d, 0xf2, 0x2c, 0xc, 0xd2, 0xad, 0x73, 0x8c, 0x52, 0x2d, 0xf3, 0xd3, 0xd, 0x72, 0xac, 0x32, 0xec, 0x93, 0x4d, 0x6d, 0xb3, 0xcc, 0x12, 0xb6, 0x68, 0x17, 0xc9, 0xe9, 0x37, 0x48, 0x96, 0x8, 0xd6, 0xa9, 0x77, 0x57, 0x89, 0xf6, 0x28, 0xd7, 0x9, 0x76, 0xa8, 0x88, 0x56, 0x29, 0xf7, 0x69, 0xb7, 0xc8, 0x16, 0x36, 0xe8, 0x97, 0x49, 0x74, 0xaa, 0xd5, 0xb, 0x2b, 0xf5, 0x8a, 0x54, 0xca, 0x14, 0x6b, 0xb5, 0x95, 0x4b, 0x34, 0xea, 0x15, 0xcb, 0xb4, 0x6a, 0x4a, 0x94, 0xeb, 0x35, 0xab, 0x75, 0xa, 0xd4, 0xf4, 0x2a, 0x55, 0x8b}, + {0x0, 0xdf, 0xa3, 0x7c, 0x5b, 0x84, 0xf8, 0x27, 0xb6, 0x69, 0x15, 0xca, 0xed, 0x32, 0x4e, 0x91, 0x71, 0xae, 0xd2, 0xd, 0x2a, 0xf5, 0x89, 0x56, 0xc7, 0x18, 0x64, 0xbb, 0x9c, 0x43, 0x3f, 0xe0, 0xe2, 0x3d, 0x41, 0x9e, 0xb9, 0x66, 0x1a, 0xc5, 0x54, 0x8b, 0xf7, 0x28, 0xf, 0xd0, 0xac, 0x73, 0x93, 0x4c, 0x30, 0xef, 0xc8, 0x17, 0x6b, 0xb4, 0x25, 0xfa, 0x86, 0x59, 0x7e, 0xa1, 0xdd, 0x2, 0xd9, 0x6, 0x7a, 0xa5, 0x82, 0x5d, 0x21, 0xfe, 0x6f, 0xb0, 0xcc, 0x13, 0x34, 0xeb, 0x97, 0x48, 0xa8, 0x77, 0xb, 0xd4, 0xf3, 0x2c, 0x50, 0x8f, 0x1e, 0xc1, 0xbd, 0x62, 0x45, 0x9a, 0xe6, 0x39, 0x3b, 0xe4, 0x98, 0x47, 0x60, 0xbf, 0xc3, 0x1c, 0x8d, 0x52, 0x2e, 0xf1, 0xd6, 0x9, 0x75, 0xaa, 0x4a, 0x95, 0xe9, 0x36, 0x11, 0xce, 0xb2, 0x6d, 0xfc, 0x23, 0x5f, 0x80, 0xa7, 0x78, 0x4, 0xdb, 0xaf, 0x70, 0xc, 0xd3, 0xf4, 0x2b, 0x57, 0x88, 0x19, 0xc6, 0xba, 0x65, 0x42, 0x9d, 0xe1, 0x3e, 0xde, 0x1, 0x7d, 0xa2, 0x85, 0x5a, 0x26, 0xf9, 0x68, 0xb7, 0xcb, 0x14, 0x33, 0xec, 0x90, 0x4f, 0x4d, 0x92, 0xee, 0x31, 0x16, 0xc9, 0xb5, 0x6a, 0xfb, 0x24, 0x58, 0x87, 0xa0, 0x7f, 0x3, 0xdc, 0x3c, 0xe3, 0x9f, 0x40, 0x67, 0xb8, 0xc4, 0x1b, 0x8a, 0x55, 0x29, 0xf6, 0xd1, 0xe, 0x72, 0xad, 0x76, 0xa9, 0xd5, 0xa, 0x2d, 0xf2, 0x8e, 0x51, 0xc0, 0x1f, 0x63, 0xbc, 0x9b, 0x44, 0x38, 0xe7, 0x7, 0xd8, 0xa4, 0x7b, 0x5c, 0x83, 0xff, 0x20, 0xb1, 0x6e, 0x12, 0xcd, 0xea, 0x35, 0x49, 0x96, 0x94, 0x4b, 0x37, 0xe8, 0xcf, 0x10, 0x6c, 0xb3, 0x22, 0xfd, 0x81, 0x5e, 0x79, 0xa6, 0xda, 0x5, 0xe5, 0x3a, 0x46, 0x99, 0xbe, 0x61, 0x1d, 0xc2, 0x53, 0x8c, 0xf0, 0x2f, 0x8, 0xd7, 0xab, 0x74}, + {0x0, 0xe0, 0xdd, 0x3d, 0xa7, 0x47, 0x7a, 0x9a, 0x53, 0xb3, 0x8e, 0x6e, 0xf4, 0x14, 0x29, 0xc9, 0xa6, 0x46, 0x7b, 0x9b, 0x1, 0xe1, 0xdc, 0x3c, 0xf5, 0x15, 0x28, 0xc8, 0x52, 0xb2, 0x8f, 0x6f, 0x51, 0xb1, 0x8c, 0x6c, 0xf6, 0x16, 0x2b, 0xcb, 0x2, 0xe2, 0xdf, 0x3f, 0xa5, 0x45, 0x78, 0x98, 0xf7, 0x17, 0x2a, 0xca, 0x50, 0xb0, 0x8d, 0x6d, 0xa4, 0x44, 0x79, 0x99, 0x3, 0xe3, 0xde, 0x3e, 0xa2, 0x42, 0x7f, 0x9f, 0x5, 0xe5, 0xd8, 0x38, 0xf1, 0x11, 0x2c, 0xcc, 0x56, 0xb6, 0x8b, 0x6b, 0x4, 0xe4, 0xd9, 0x39, 0xa3, 0x43, 0x7e, 0x9e, 0x57, 0xb7, 0x8a, 0x6a, 0xf0, 0x10, 0x2d, 0xcd, 0xf3, 0x13, 0x2e, 0xce, 0x54, 0xb4, 0x89, 0x69, 0xa0, 0x40, 0x7d, 0x9d, 0x7, 0xe7, 0xda, 0x3a, 0x55, 0xb5, 0x88, 0x68, 0xf2, 0x12, 0x2f, 0xcf, 0x6, 0xe6, 0xdb, 0x3b, 0xa1, 0x41, 0x7c, 0x9c, 0x59, 0xb9, 0x84, 0x64, 0xfe, 0x1e, 0x23, 0xc3, 0xa, 0xea, 0xd7, 0x37, 0xad, 0x4d, 0x70, 0x90, 0xff, 0x1f, 0x22, 0xc2, 0x58, 0xb8, 0x85, 0x65, 0xac, 0x4c, 0x71, 0x91, 0xb, 0xeb, 0xd6, 0x36, 0x8, 0xe8, 0xd5, 0x35, 0xaf, 0x4f, 0x72, 0x92, 0x5b, 0xbb, 0x86, 0x66, 0xfc, 0x1c, 0x21, 0xc1, 0xae, 0x4e, 0x73, 0x93, 0x9, 0xe9, 0xd4, 0x34, 0xfd, 0x1d, 0x20, 0xc0, 0x5a, 0xba, 0x87, 0x67, 0xfb, 0x1b, 0x26, 0xc6, 0x5c, 0xbc, 0x81, 0x61, 0xa8, 0x48, 0x75, 0x95, 0xf, 0xef, 0xd2, 0x32, 0x5d, 0xbd, 0x80, 0x60, 0xfa, 0x1a, 0x27, 0xc7, 0xe, 0xee, 0xd3, 0x33, 0xa9, 0x49, 0x74, 0x94, 0xaa, 0x4a, 0x77, 0x97, 0xd, 0xed, 0xd0, 0x30, 0xf9, 0x19, 0x24, 0xc4, 0x5e, 0xbe, 0x83, 0x63, 0xc, 0xec, 0xd1, 0x31, 0xab, 0x4b, 0x76, 0x96, 0x5f, 0xbf, 0x82, 0x62, 0xf8, 0x18, 0x25, 0xc5}, + {0x0, 0xe1, 0xdf, 0x3e, 0xa3, 0x42, 0x7c, 0x9d, 0x5b, 0xba, 0x84, 0x65, 0xf8, 0x19, 0x27, 0xc6, 0xb6, 0x57, 0x69, 0x88, 0x15, 0xf4, 0xca, 0x2b, 0xed, 0xc, 0x32, 0xd3, 0x4e, 0xaf, 0x91, 0x70, 0x71, 0x90, 0xae, 0x4f, 0xd2, 0x33, 0xd, 0xec, 0x2a, 0xcb, 0xf5, 0x14, 0x89, 0x68, 0x56, 0xb7, 0xc7, 0x26, 0x18, 0xf9, 0x64, 0x85, 0xbb, 0x5a, 0x9c, 0x7d, 0x43, 0xa2, 0x3f, 0xde, 0xe0, 0x1, 0xe2, 0x3, 0x3d, 0xdc, 0x41, 0xa0, 0x9e, 0x7f, 0xb9, 0x58, 0x66, 0x87, 0x1a, 0xfb, 0xc5, 0x24, 0x54, 0xb5, 0x8b, 0x6a, 0xf7, 0x16, 0x28, 0xc9, 0xf, 0xee, 0xd0, 0x31, 0xac, 0x4d, 0x73, 0x92, 0x93, 0x72, 0x4c, 0xad, 0x30, 0xd1, 0xef, 0xe, 0xc8, 0x29, 0x17, 0xf6, 0x6b, 0x8a, 0xb4, 0x55, 0x25, 0xc4, 0xfa, 0x1b, 0x86, 0x67, 0x59, 0xb8, 0x7e, 0x9f, 0xa1, 0x40, 0xdd, 0x3c, 0x2, 0xe3, 0xd9, 0x38, 0x6, 0xe7, 0x7a, 0x9b, 0xa5, 0x44, 0x82, 0x63, 0x5d, 0xbc, 0x21, 0xc0, 0xfe, 0x1f, 0x6f, 0x8e, 0xb0, 0x51, 0xcc, 0x2d, 0x13, 0xf2, 0x34, 0xd5, 0xeb, 0xa, 0x97, 0x76, 0x48, 0xa9, 0xa8, 0x49, 0x77, 0x96, 0xb, 0xea, 0xd4, 0x35, 0xf3, 0x12, 0x2c, 0xcd, 0x50, 0xb1, 0x8f, 0x6e, 0x1e, 0xff, 0xc1, 0x20, 0xbd, 0x5c, 0x62, 0x83, 0x45, 0xa4, 0x9a, 0x7b, 0xe6, 0x7, 0x39, 0xd8, 0x3b, 0xda, 0xe4, 0x5, 0x98, 0x79, 0x47, 0xa6, 0x60, 0x81, 0xbf, 0x5e, 0xc3, 0x22, 0x1c, 0xfd, 0x8d, 0x6c, 0x52, 0xb3, 0x2e, 0xcf, 0xf1, 0x10, 0xd6, 0x37, 0x9, 0xe8, 0x75, 0x94, 0xaa, 0x4b, 0x4a, 0xab, 0x95, 0x74, 0xe9, 0x8, 0x36, 0xd7, 0x11, 0xf0, 0xce, 0x2f, 0xb2, 0x53, 0x6d, 0x8c, 0xfc, 0x1d, 0x23, 0xc2, 0x5f, 0xbe, 0x80, 0x61, 0xa7, 0x46, 0x78, 0x99, 0x4, 0xe5, 0xdb, 0x3a}, + {0x0, 0xe2, 0xd9, 0x3b, 0xaf, 0x4d, 0x76, 0x94, 0x43, 0xa1, 0x9a, 0x78, 0xec, 0xe, 0x35, 0xd7, 0x86, 0x64, 0x5f, 0xbd, 0x29, 0xcb, 0xf0, 0x12, 0xc5, 0x27, 0x1c, 0xfe, 0x6a, 0x88, 0xb3, 0x51, 0x11, 0xf3, 0xc8, 0x2a, 0xbe, 0x5c, 0x67, 0x85, 0x52, 0xb0, 0x8b, 0x69, 0xfd, 0x1f, 0x24, 0xc6, 0x97, 0x75, 0x4e, 0xac, 0x38, 0xda, 0xe1, 0x3, 0xd4, 0x36, 0xd, 0xef, 0x7b, 0x99, 0xa2, 0x40, 0x22, 0xc0, 0xfb, 0x19, 0x8d, 0x6f, 0x54, 0xb6, 0x61, 0x83, 0xb8, 0x5a, 0xce, 0x2c, 0x17, 0xf5, 0xa4, 0x46, 0x7d, 0x9f, 0xb, 0xe9, 0xd2, 0x30, 0xe7, 0x5, 0x3e, 0xdc, 0x48, 0xaa, 0x91, 0x73, 0x33, 0xd1, 0xea, 0x8, 0x9c, 0x7e, 0x45, 0xa7, 0x70, 0x92, 0xa9, 0x4b, 0xdf, 0x3d, 0x6, 0xe4, 0xb5, 0x57, 0x6c, 0x8e, 0x1a, 0xf8, 0xc3, 0x21, 0xf6, 0x14, 0x2f, 0xcd, 0x59, 0xbb, 0x80, 0x62, 0x44, 0xa6, 0x9d, 0x7f, 0xeb, 0x9, 0x32, 0xd0, 0x7, 0xe5, 0xde, 0x3c, 0xa8, 0x4a, 0x71, 0x93, 0xc2, 0x20, 0x1b, 0xf9, 0x6d, 0x8f, 0xb4, 0x56, 0x81, 0x63, 0x58, 0xba, 0x2e, 0xcc, 0xf7, 0x15, 0x55, 0xb7, 0x8c, 0x6e, 0xfa, 0x18, 0x23, 0xc1, 0x16, 0xf4, 0xcf, 0x2d, 0xb9, 0x5b, 0x60, 0x82, 0xd3, 0x31, 0xa, 0xe8, 0x7c, 0x9e, 0xa5, 0x47, 0x90, 0x72, 0x49, 0xab, 0x3f, 0xdd, 0xe6, 0x4, 0x66, 0x84, 0xbf, 0x5d, 0xc9, 0x2b, 0x10, 0xf2, 0x25, 0xc7, 0xfc, 0x1e, 0x8a, 0x68, 0x53, 0xb1, 0xe0, 0x2, 0x39, 0xdb, 0x4f, 0xad, 0x96, 0x74, 0xa3, 0x41, 0x7a, 0x98, 0xc, 0xee, 0xd5, 0x37, 0x77, 0x95, 0xae, 0x4c, 0xd8, 0x3a, 0x1, 0xe3, 0x34, 0xd6, 0xed, 0xf, 0x9b, 0x79, 0x42, 0xa0, 0xf1, 0x13, 0x28, 0xca, 0x5e, 0xbc, 0x87, 0x65, 0xb2, 0x50, 0x6b, 0x89, 0x1d, 0xff, 0xc4, 0x26}, + {0x0, 0xe3, 0xdb, 0x38, 0xab, 0x48, 0x70, 0x93, 0x4b, 0xa8, 0x90, 0x73, 0xe0, 0x3, 0x3b, 0xd8, 0x96, 0x75, 0x4d, 0xae, 0x3d, 0xde, 0xe6, 0x5, 0xdd, 0x3e, 0x6, 0xe5, 0x76, 0x95, 0xad, 0x4e, 0x31, 0xd2, 0xea, 0x9, 0x9a, 0x79, 0x41, 0xa2, 0x7a, 0x99, 0xa1, 0x42, 0xd1, 0x32, 0xa, 0xe9, 0xa7, 0x44, 0x7c, 0x9f, 0xc, 0xef, 0xd7, 0x34, 0xec, 0xf, 0x37, 0xd4, 0x47, 0xa4, 0x9c, 0x7f, 0x62, 0x81, 0xb9, 0x5a, 0xc9, 0x2a, 0x12, 0xf1, 0x29, 0xca, 0xf2, 0x11, 0x82, 0x61, 0x59, 0xba, 0xf4, 0x17, 0x2f, 0xcc, 0x5f, 0xbc, 0x84, 0x67, 0xbf, 0x5c, 0x64, 0x87, 0x14, 0xf7, 0xcf, 0x2c, 0x53, 0xb0, 0x88, 0x6b, 0xf8, 0x1b, 0x23, 0xc0, 0x18, 0xfb, 0xc3, 0x20, 0xb3, 0x50, 0x68, 0x8b, 0xc5, 0x26, 0x1e, 0xfd, 0x6e, 0x8d, 0xb5, 0x56, 0x8e, 0x6d, 0x55, 0xb6, 0x25, 0xc6, 0xfe, 0x1d, 0xc4, 0x27, 0x1f, 0xfc, 0x6f, 0x8c, 0xb4, 0x57, 0x8f, 0x6c, 0x54, 0xb7, 0x24, 0xc7, 0xff, 0x1c, 0x52, 0xb1, 0x89, 0x6a, 0xf9, 0x1a, 0x22, 0xc1, 0x19, 0xfa, 0xc2, 0x21, 0xb2, 0x51, 0x69, 0x8a, 0xf5, 0x16, 0x2e, 0xcd, 0x5e, 0xbd, 0x85, 0x66, 0xbe, 0x5d, 0x65, 0x86, 0x15, 0xf6, 0xce, 0x2d, 0x63, 0x80, 0xb8, 0x5b, 0xc8, 0x2b, 0x13, 0xf0, 0x28, 0xcb, 0xf3, 0x10, 0x83, 0x60, 0x58, 0xbb, 0xa6, 0x45, 0x7d, 0x9e, 0xd, 0xee, 0xd6, 0x35, 0xed, 0xe, 0x36, 0xd5, 0x46, 0xa5, 0x9d, 0x7e, 0x30, 0xd3, 0xeb, 0x8, 0x9b, 0x78, 0x40, 0xa3, 0x7b, 0x98, 0xa0, 0x43, 0xd0, 0x33, 0xb, 0xe8, 0x97, 0x74, 0x4c, 0xaf, 0x3c, 0xdf, 0xe7, 0x4, 0xdc, 0x3f, 0x7, 0xe4, 0x77, 0x94, 0xac, 0x4f, 0x1, 0xe2, 0xda, 0x39, 0xaa, 0x49, 0x71, 0x92, 0x4a, 0xa9, 0x91, 0x72, 0xe1, 0x2, 0x3a, 0xd9}, + {0x0, 0xe4, 0xd5, 0x31, 0xb7, 0x53, 0x62, 0x86, 0x73, 0x97, 0xa6, 0x42, 0xc4, 0x20, 0x11, 0xf5, 0xe6, 0x2, 0x33, 0xd7, 0x51, 0xb5, 0x84, 0x60, 0x95, 0x71, 0x40, 0xa4, 0x22, 0xc6, 0xf7, 0x13, 0xd1, 0x35, 0x4, 0xe0, 0x66, 0x82, 0xb3, 0x57, 0xa2, 0x46, 0x77, 0x93, 0x15, 0xf1, 0xc0, 0x24, 0x37, 0xd3, 0xe2, 0x6, 0x80, 0x64, 0x55, 0xb1, 0x44, 0xa0, 0x91, 0x75, 0xf3, 0x17, 0x26, 0xc2, 0xbf, 0x5b, 0x6a, 0x8e, 0x8, 0xec, 0xdd, 0x39, 0xcc, 0x28, 0x19, 0xfd, 0x7b, 0x9f, 0xae, 0x4a, 0x59, 0xbd, 0x8c, 0x68, 0xee, 0xa, 0x3b, 0xdf, 0x2a, 0xce, 0xff, 0x1b, 0x9d, 0x79, 0x48, 0xac, 0x6e, 0x8a, 0xbb, 0x5f, 0xd9, 0x3d, 0xc, 0xe8, 0x1d, 0xf9, 0xc8, 0x2c, 0xaa, 0x4e, 0x7f, 0x9b, 0x88, 0x6c, 0x5d, 0xb9, 0x3f, 0xdb, 0xea, 0xe, 0xfb, 0x1f, 0x2e, 0xca, 0x4c, 0xa8, 0x99, 0x7d, 0x63, 0x87, 0xb6, 0x52, 0xd4, 0x30, 0x1, 0xe5, 0x10, 0xf4, 0xc5, 0x21, 0xa7, 0x43, 0x72, 0x96, 0x85, 0x61, 0x50, 0xb4, 0x32, 0xd6, 0xe7, 0x3, 0xf6, 0x12, 0x23, 0xc7, 0x41, 0xa5, 0x94, 0x70, 0xb2, 0x56, 0x67, 0x83, 0x5, 0xe1, 0xd0, 0x34, 0xc1, 0x25, 0x14, 0xf0, 0x76, 0x92, 0xa3, 0x47, 0x54, 0xb0, 0x81, 0x65, 0xe3, 0x7, 0x36, 0xd2, 0x27, 0xc3, 0xf2, 0x16, 0x90, 0x74, 0x45, 0xa1, 0xdc, 0x38, 0x9, 0xed, 0x6b, 0x8f, 0xbe, 0x5a, 0xaf, 0x4b, 0x7a, 0x9e, 0x18, 0xfc, 0xcd, 0x29, 0x3a, 0xde, 0xef, 0xb, 0x8d, 0x69, 0x58, 0xbc, 0x49, 0xad, 0x9c, 0x78, 0xfe, 0x1a, 0x2b, 0xcf, 0xd, 0xe9, 0xd8, 0x3c, 0xba, 0x5e, 0x6f, 0x8b, 0x7e, 0x9a, 0xab, 0x4f, 0xc9, 0x2d, 0x1c, 0xf8, 0xeb, 0xf, 0x3e, 0xda, 0x5c, 0xb8, 0x89, 0x6d, 0x98, 0x7c, 0x4d, 0xa9, 0x2f, 0xcb, 0xfa, 0x1e}, + {0x0, 0xe5, 0xd7, 0x32, 0xb3, 0x56, 0x64, 0x81, 0x7b, 0x9e, 0xac, 0x49, 0xc8, 0x2d, 0x1f, 0xfa, 0xf6, 0x13, 0x21, 0xc4, 0x45, 0xa0, 0x92, 0x77, 0x8d, 0x68, 0x5a, 0xbf, 0x3e, 0xdb, 0xe9, 0xc, 0xf1, 0x14, 0x26, 0xc3, 0x42, 0xa7, 0x95, 0x70, 0x8a, 0x6f, 0x5d, 0xb8, 0x39, 0xdc, 0xee, 0xb, 0x7, 0xe2, 0xd0, 0x35, 0xb4, 0x51, 0x63, 0x86, 0x7c, 0x99, 0xab, 0x4e, 0xcf, 0x2a, 0x18, 0xfd, 0xff, 0x1a, 0x28, 0xcd, 0x4c, 0xa9, 0x9b, 0x7e, 0x84, 0x61, 0x53, 0xb6, 0x37, 0xd2, 0xe0, 0x5, 0x9, 0xec, 0xde, 0x3b, 0xba, 0x5f, 0x6d, 0x88, 0x72, 0x97, 0xa5, 0x40, 0xc1, 0x24, 0x16, 0xf3, 0xe, 0xeb, 0xd9, 0x3c, 0xbd, 0x58, 0x6a, 0x8f, 0x75, 0x90, 0xa2, 0x47, 0xc6, 0x23, 0x11, 0xf4, 0xf8, 0x1d, 0x2f, 0xca, 0x4b, 0xae, 0x9c, 0x79, 0x83, 0x66, 0x54, 0xb1, 0x30, 0xd5, 0xe7, 0x2, 0xe3, 0x6, 0x34, 0xd1, 0x50, 0xb5, 0x87, 0x62, 0x98, 0x7d, 0x4f, 0xaa, 0x2b, 0xce, 0xfc, 0x19, 0x15, 0xf0, 0xc2, 0x27, 0xa6, 0x43, 0x71, 0x94, 0x6e, 0x8b, 0xb9, 0x5c, 0xdd, 0x38, 0xa, 0xef, 0x12, 0xf7, 0xc5, 0x20, 0xa1, 0x44, 0x76, 0x93, 0x69, 0x8c, 0xbe, 0x5b, 0xda, 0x3f, 0xd, 0xe8, 0xe4, 0x1, 0x33, 0xd6, 0x57, 0xb2, 0x80, 0x65, 0x9f, 0x7a, 0x48, 0xad, 0x2c, 0xc9, 0xfb, 0x1e, 0x1c, 0xf9, 0xcb, 0x2e, 0xaf, 0x4a, 0x78, 0x9d, 0x67, 0x82, 0xb0, 0x55, 0xd4, 0x31, 0x3, 0xe6, 0xea, 0xf, 0x3d, 0xd8, 0x59, 0xbc, 0x8e, 0x6b, 0x91, 0x74, 0x46, 0xa3, 0x22, 0xc7, 0xf5, 0x10, 0xed, 0x8, 0x3a, 0xdf, 0x5e, 0xbb, 0x89, 0x6c, 0x96, 0x73, 0x41, 0xa4, 0x25, 0xc0, 0xf2, 0x17, 0x1b, 0xfe, 0xcc, 0x29, 0xa8, 0x4d, 0x7f, 0x9a, 0x60, 0x85, 0xb7, 0x52, 0xd3, 0x36, 0x4, 0xe1}, + {0x0, 0xe6, 0xd1, 0x37, 0xbf, 0x59, 0x6e, 0x88, 0x63, 0x85, 0xb2, 0x54, 0xdc, 0x3a, 0xd, 0xeb, 0xc6, 0x20, 0x17, 0xf1, 0x79, 0x9f, 0xa8, 0x4e, 0xa5, 0x43, 0x74, 0x92, 0x1a, 0xfc, 0xcb, 0x2d, 0x91, 0x77, 0x40, 0xa6, 0x2e, 0xc8, 0xff, 0x19, 0xf2, 0x14, 0x23, 0xc5, 0x4d, 0xab, 0x9c, 0x7a, 0x57, 0xb1, 0x86, 0x60, 0xe8, 0xe, 0x39, 0xdf, 0x34, 0xd2, 0xe5, 0x3, 0x8b, 0x6d, 0x5a, 0xbc, 0x3f, 0xd9, 0xee, 0x8, 0x80, 0x66, 0x51, 0xb7, 0x5c, 0xba, 0x8d, 0x6b, 0xe3, 0x5, 0x32, 0xd4, 0xf9, 0x1f, 0x28, 0xce, 0x46, 0xa0, 0x97, 0x71, 0x9a, 0x7c, 0x4b, 0xad, 0x25, 0xc3, 0xf4, 0x12, 0xae, 0x48, 0x7f, 0x99, 0x11, 0xf7, 0xc0, 0x26, 0xcd, 0x2b, 0x1c, 0xfa, 0x72, 0x94, 0xa3, 0x45, 0x68, 0x8e, 0xb9, 0x5f, 0xd7, 0x31, 0x6, 0xe0, 0xb, 0xed, 0xda, 0x3c, 0xb4, 0x52, 0x65, 0x83, 0x7e, 0x98, 0xaf, 0x49, 0xc1, 0x27, 0x10, 0xf6, 0x1d, 0xfb, 0xcc, 0x2a, 0xa2, 0x44, 0x73, 0x95, 0xb8, 0x5e, 0x69, 0x8f, 0x7, 0xe1, 0xd6, 0x30, 0xdb, 0x3d, 0xa, 0xec, 0x64, 0x82, 0xb5, 0x53, 0xef, 0x9, 0x3e, 0xd8, 0x50, 0xb6, 0x81, 0x67, 0x8c, 0x6a, 0x5d, 0xbb, 0x33, 0xd5, 0xe2, 0x4, 0x29, 0xcf, 0xf8, 0x1e, 0x96, 0x70, 0x47, 0xa1, 0x4a, 0xac, 0x9b, 0x7d, 0xf5, 0x13, 0x24, 0xc2, 0x41, 0xa7, 0x90, 0x76, 0xfe, 0x18, 0x2f, 0xc9, 0x22, 0xc4, 0xf3, 0x15, 0x9d, 0x7b, 0x4c, 0xaa, 0x87, 0x61, 0x56, 0xb0, 0x38, 0xde, 0xe9, 0xf, 0xe4, 0x2, 0x35, 0xd3, 0x5b, 0xbd, 0x8a, 0x6c, 0xd0, 0x36, 0x1, 0xe7, 0x6f, 0x89, 0xbe, 0x58, 0xb3, 0x55, 0x62, 0x84, 0xc, 0xea, 0xdd, 0x3b, 0x16, 0xf0, 0xc7, 0x21, 0xa9, 0x4f, 0x78, 0x9e, 0x75, 0x93, 0xa4, 0x42, 0xca, 0x2c, 0x1b, 0xfd}, + {0x0, 0xe7, 0xd3, 0x34, 0xbb, 0x5c, 0x68, 0x8f, 0x6b, 0x8c, 0xb8, 0x5f, 0xd0, 0x37, 0x3, 0xe4, 0xd6, 0x31, 0x5, 0xe2, 0x6d, 0x8a, 0xbe, 0x59, 0xbd, 0x5a, 0x6e, 0x89, 0x6, 0xe1, 0xd5, 0x32, 0xb1, 0x56, 0x62, 0x85, 0xa, 0xed, 0xd9, 0x3e, 0xda, 0x3d, 0x9, 0xee, 0x61, 0x86, 0xb2, 0x55, 0x67, 0x80, 0xb4, 0x53, 0xdc, 0x3b, 0xf, 0xe8, 0xc, 0xeb, 0xdf, 0x38, 0xb7, 0x50, 0x64, 0x83, 0x7f, 0x98, 0xac, 0x4b, 0xc4, 0x23, 0x17, 0xf0, 0x14, 0xf3, 0xc7, 0x20, 0xaf, 0x48, 0x7c, 0x9b, 0xa9, 0x4e, 0x7a, 0x9d, 0x12, 0xf5, 0xc1, 0x26, 0xc2, 0x25, 0x11, 0xf6, 0x79, 0x9e, 0xaa, 0x4d, 0xce, 0x29, 0x1d, 0xfa, 0x75, 0x92, 0xa6, 0x41, 0xa5, 0x42, 0x76, 0x91, 0x1e, 0xf9, 0xcd, 0x2a, 0x18, 0xff, 0xcb, 0x2c, 0xa3, 0x44, 0x70, 0x97, 0x73, 0x94, 0xa0, 0x47, 0xc8, 0x2f, 0x1b, 0xfc, 0xfe, 0x19, 0x2d, 0xca, 0x45, 0xa2, 0x96, 0x71, 0x95, 0x72, 0x46, 0xa1, 0x2e, 0xc9, 0xfd, 0x1a, 0x28, 0xcf, 0xfb, 0x1c, 0x93, 0x74, 0x40, 0xa7, 0x43, 0xa4, 0x90, 0x77, 0xf8, 0x1f, 0x2b, 0xcc, 0x4f, 0xa8, 0x9c, 0x7b, 0xf4, 0x13, 0x27, 0xc0, 0x24, 0xc3, 0xf7, 0x10, 0x9f, 0x78, 0x4c, 0xab, 0x99, 0x7e, 0x4a, 0xad, 0x22, 0xc5, 0xf1, 0x16, 0xf2, 0x15, 0x21, 0xc6, 0x49, 0xae, 0x9a, 0x7d, 0x81, 0x66, 0x52, 0xb5, 0x3a, 0xdd, 0xe9, 0xe, 0xea, 0xd, 0x39, 0xde, 0x51, 0xb6, 0x82, 0x65, 0x57, 0xb0, 0x84, 0x63, 0xec, 0xb, 0x3f, 0xd8, 0x3c, 0xdb, 0xef, 0x8, 0x87, 0x60, 0x54, 0xb3, 0x30, 0xd7, 0xe3, 0x4, 0x8b, 0x6c, 0x58, 0xbf, 0x5b, 0xbc, 0x88, 0x6f, 0xe0, 0x7, 0x33, 0xd4, 0xe6, 0x1, 0x35, 0xd2, 0x5d, 0xba, 0x8e, 0x69, 0x8d, 0x6a, 0x5e, 0xb9, 0x36, 0xd1, 0xe5, 0x2}, + {0x0, 0xe8, 0xcd, 0x25, 0x87, 0x6f, 0x4a, 0xa2, 0x13, 0xfb, 0xde, 0x36, 0x94, 0x7c, 0x59, 0xb1, 0x26, 0xce, 0xeb, 0x3, 0xa1, 0x49, 0x6c, 0x84, 0x35, 0xdd, 0xf8, 0x10, 0xb2, 0x5a, 0x7f, 0x97, 0x4c, 0xa4, 0x81, 0x69, 0xcb, 0x23, 0x6, 0xee, 0x5f, 0xb7, 0x92, 0x7a, 0xd8, 0x30, 0x15, 0xfd, 0x6a, 0x82, 0xa7, 0x4f, 0xed, 0x5, 0x20, 0xc8, 0x79, 0x91, 0xb4, 0x5c, 0xfe, 0x16, 0x33, 0xdb, 0x98, 0x70, 0x55, 0xbd, 0x1f, 0xf7, 0xd2, 0x3a, 0x8b, 0x63, 0x46, 0xae, 0xc, 0xe4, 0xc1, 0x29, 0xbe, 0x56, 0x73, 0x9b, 0x39, 0xd1, 0xf4, 0x1c, 0xad, 0x45, 0x60, 0x88, 0x2a, 0xc2, 0xe7, 0xf, 0xd4, 0x3c, 0x19, 0xf1, 0x53, 0xbb, 0x9e, 0x76, 0xc7, 0x2f, 0xa, 0xe2, 0x40, 0xa8, 0x8d, 0x65, 0xf2, 0x1a, 0x3f, 0xd7, 0x75, 0x9d, 0xb8, 0x50, 0xe1, 0x9, 0x2c, 0xc4, 0x66, 0x8e, 0xab, 0x43, 0x2d, 0xc5, 0xe0, 0x8, 0xaa, 0x42, 0x67, 0x8f, 0x3e, 0xd6, 0xf3, 0x1b, 0xb9, 0x51, 0x74, 0x9c, 0xb, 0xe3, 0xc6, 0x2e, 0x8c, 0x64, 0x41, 0xa9, 0x18, 0xf0, 0xd5, 0x3d, 0x9f, 0x77, 0x52, 0xba, 0x61, 0x89, 0xac, 0x44, 0xe6, 0xe, 0x2b, 0xc3, 0x72, 0x9a, 0xbf, 0x57, 0xf5, 0x1d, 0x38, 0xd0, 0x47, 0xaf, 0x8a, 0x62, 0xc0, 0x28, 0xd, 0xe5, 0x54, 0xbc, 0x99, 0x71, 0xd3, 0x3b, 0x1e, 0xf6, 0xb5, 0x5d, 0x78, 0x90, 0x32, 0xda, 0xff, 0x17, 0xa6, 0x4e, 0x6b, 0x83, 0x21, 0xc9, 0xec, 0x4, 0x93, 0x7b, 0x5e, 0xb6, 0x14, 0xfc, 0xd9, 0x31, 0x80, 0x68, 0x4d, 0xa5, 0x7, 0xef, 0xca, 0x22, 0xf9, 0x11, 0x34, 0xdc, 0x7e, 0x96, 0xb3, 0x5b, 0xea, 0x2, 0x27, 0xcf, 0x6d, 0x85, 0xa0, 0x48, 0xdf, 0x37, 0x12, 0xfa, 0x58, 0xb0, 0x95, 0x7d, 0xcc, 0x24, 0x1, 0xe9, 0x4b, 0xa3, 0x86, 0x6e}, + {0x0, 0xe9, 0xcf, 0x26, 0x83, 0x6a, 0x4c, 0xa5, 0x1b, 0xf2, 0xd4, 0x3d, 0x98, 0x71, 0x57, 0xbe, 0x36, 0xdf, 0xf9, 0x10, 0xb5, 0x5c, 0x7a, 0x93, 0x2d, 0xc4, 0xe2, 0xb, 0xae, 0x47, 0x61, 0x88, 0x6c, 0x85, 0xa3, 0x4a, 0xef, 0x6, 0x20, 0xc9, 0x77, 0x9e, 0xb8, 0x51, 0xf4, 0x1d, 0x3b, 0xd2, 0x5a, 0xb3, 0x95, 0x7c, 0xd9, 0x30, 0x16, 0xff, 0x41, 0xa8, 0x8e, 0x67, 0xc2, 0x2b, 0xd, 0xe4, 0xd8, 0x31, 0x17, 0xfe, 0x5b, 0xb2, 0x94, 0x7d, 0xc3, 0x2a, 0xc, 0xe5, 0x40, 0xa9, 0x8f, 0x66, 0xee, 0x7, 0x21, 0xc8, 0x6d, 0x84, 0xa2, 0x4b, 0xf5, 0x1c, 0x3a, 0xd3, 0x76, 0x9f, 0xb9, 0x50, 0xb4, 0x5d, 0x7b, 0x92, 0x37, 0xde, 0xf8, 0x11, 0xaf, 0x46, 0x60, 0x89, 0x2c, 0xc5, 0xe3, 0xa, 0x82, 0x6b, 0x4d, 0xa4, 0x1, 0xe8, 0xce, 0x27, 0x99, 0x70, 0x56, 0xbf, 0x1a, 0xf3, 0xd5, 0x3c, 0xad, 0x44, 0x62, 0x8b, 0x2e, 0xc7, 0xe1, 0x8, 0xb6, 0x5f, 0x79, 0x90, 0x35, 0xdc, 0xfa, 0x13, 0x9b, 0x72, 0x54, 0xbd, 0x18, 0xf1, 0xd7, 0x3e, 0x80, 0x69, 0x4f, 0xa6, 0x3, 0xea, 0xcc, 0x25, 0xc1, 0x28, 0xe, 0xe7, 0x42, 0xab, 0x8d, 0x64, 0xda, 0x33, 0x15, 0xfc, 0x59, 0xb0, 0x96, 0x7f, 0xf7, 0x1e, 0x38, 0xd1, 0x74, 0x9d, 0xbb, 0x52, 0xec, 0x5, 0x23, 0xca, 0x6f, 0x86, 0xa0, 0x49, 0x75, 0x9c, 0xba, 0x53, 0xf6, 0x1f, 0x39, 0xd0, 0x6e, 0x87, 0xa1, 0x48, 0xed, 0x4, 0x22, 0xcb, 0x43, 0xaa, 0x8c, 0x65, 0xc0, 0x29, 0xf, 0xe6, 0x58, 0xb1, 0x97, 0x7e, 0xdb, 0x32, 0x14, 0xfd, 0x19, 0xf0, 0xd6, 0x3f, 0x9a, 0x73, 0x55, 0xbc, 0x2, 0xeb, 0xcd, 0x24, 0x81, 0x68, 0x4e, 0xa7, 0x2f, 0xc6, 0xe0, 0x9, 0xac, 0x45, 0x63, 0x8a, 0x34, 0xdd, 0xfb, 0x12, 0xb7, 0x5e, 0x78, 0x91}, + {0x0, 0xea, 0xc9, 0x23, 0x8f, 0x65, 0x46, 0xac, 0x3, 0xe9, 0xca, 0x20, 0x8c, 0x66, 0x45, 0xaf, 0x6, 0xec, 0xcf, 0x25, 0x89, 0x63, 0x40, 0xaa, 0x5, 0xef, 0xcc, 0x26, 0x8a, 0x60, 0x43, 0xa9, 0xc, 0xe6, 0xc5, 0x2f, 0x83, 0x69, 0x4a, 0xa0, 0xf, 0xe5, 0xc6, 0x2c, 0x80, 0x6a, 0x49, 0xa3, 0xa, 0xe0, 0xc3, 0x29, 0x85, 0x6f, 0x4c, 0xa6, 0x9, 0xe3, 0xc0, 0x2a, 0x86, 0x6c, 0x4f, 0xa5, 0x18, 0xf2, 0xd1, 0x3b, 0x97, 0x7d, 0x5e, 0xb4, 0x1b, 0xf1, 0xd2, 0x38, 0x94, 0x7e, 0x5d, 0xb7, 0x1e, 0xf4, 0xd7, 0x3d, 0x91, 0x7b, 0x58, 0xb2, 0x1d, 0xf7, 0xd4, 0x3e, 0x92, 0x78, 0x5b, 0xb1, 0x14, 0xfe, 0xdd, 0x37, 0x9b, 0x71, 0x52, 0xb8, 0x17, 0xfd, 0xde, 0x34, 0x98, 0x72, 0x51, 0xbb, 0x12, 0xf8, 0xdb, 0x31, 0x9d, 0x77, 0x54, 0xbe, 0x11, 0xfb, 0xd8, 0x32, 0x9e, 0x74, 0x57, 0xbd, 0x30, 0xda, 0xf9, 0x13, 0xbf, 0x55, 0x76, 0x9c, 0x33, 0xd9, 0xfa, 0x10, 0xbc, 0x56, 0x75, 0x9f, 0x36, 0xdc, 0xff, 0x15, 0xb9, 0x53, 0x70, 0x9a, 0x35, 0xdf, 0xfc, 0x16, 0xba, 0x50, 0x73, 0x99, 0x3c, 0xd6, 0xf5, 0x1f, 0xb3, 0x59, 0x7a, 0x90, 0x3f, 0xd5, 0xf6, 0x1c, 0xb0, 0x5a, 0x79, 0x93, 0x3a, 0xd0, 0xf3, 0x19, 0xb5, 0x5f, 0x7c, 0x96, 0x39, 0xd3, 0xf0, 0x1a, 0xb6, 0x5c, 0x7f, 0x95, 0x28, 0xc2, 0xe1, 0xb, 0xa7, 0x4d, 0x6e, 0x84, 0x2b, 0xc1, 0xe2, 0x8, 0xa4, 0x4e, 0x6d, 0x87, 0x2e, 0xc4, 0xe7, 0xd, 0xa1, 0x4b, 0x68, 0x82, 0x2d, 0xc7, 0xe4, 0xe, 0xa2, 0x48, 0x6b, 0x81, 0x24, 0xce, 0xed, 0x7, 0xab, 0x41, 0x62, 0x88, 0x27, 0xcd, 0xee, 0x4, 0xa8, 0x42, 0x61, 0x8b, 0x22, 0xc8, 0xeb, 0x1, 0xad, 0x47, 0x64, 0x8e, 0x21, 0xcb, 0xe8, 0x2, 0xae, 0x44, 0x67, 0x8d}, + {0x0, 0xeb, 0xcb, 0x20, 0x8b, 0x60, 0x40, 0xab, 0xb, 0xe0, 0xc0, 0x2b, 0x80, 0x6b, 0x4b, 0xa0, 0x16, 0xfd, 0xdd, 0x36, 0x9d, 0x76, 0x56, 0xbd, 0x1d, 0xf6, 0xd6, 0x3d, 0x96, 0x7d, 0x5d, 0xb6, 0x2c, 0xc7, 0xe7, 0xc, 0xa7, 0x4c, 0x6c, 0x87, 0x27, 0xcc, 0xec, 0x7, 0xac, 0x47, 0x67, 0x8c, 0x3a, 0xd1, 0xf1, 0x1a, 0xb1, 0x5a, 0x7a, 0x91, 0x31, 0xda, 0xfa, 0x11, 0xba, 0x51, 0x71, 0x9a, 0x58, 0xb3, 0x93, 0x78, 0xd3, 0x38, 0x18, 0xf3, 0x53, 0xb8, 0x98, 0x73, 0xd8, 0x33, 0x13, 0xf8, 0x4e, 0xa5, 0x85, 0x6e, 0xc5, 0x2e, 0xe, 0xe5, 0x45, 0xae, 0x8e, 0x65, 0xce, 0x25, 0x5, 0xee, 0x74, 0x9f, 0xbf, 0x54, 0xff, 0x14, 0x34, 0xdf, 0x7f, 0x94, 0xb4, 0x5f, 0xf4, 0x1f, 0x3f, 0xd4, 0x62, 0x89, 0xa9, 0x42, 0xe9, 0x2, 0x22, 0xc9, 0x69, 0x82, 0xa2, 0x49, 0xe2, 0x9, 0x29, 0xc2, 0xb0, 0x5b, 0x7b, 0x90, 0x3b, 0xd0, 0xf0, 0x1b, 0xbb, 0x50, 0x70, 0x9b, 0x30, 0xdb, 0xfb, 0x10, 0xa6, 0x4d, 0x6d, 0x86, 0x2d, 0xc6, 0xe6, 0xd, 0xad, 0x46, 0x66, 0x8d, 0x26, 0xcd, 0xed, 0x6, 0x9c, 0x77, 0x57, 0xbc, 0x17, 0xfc, 0xdc, 0x37, 0x97, 0x7c, 0x5c, 0xb7, 0x1c, 0xf7, 0xd7, 0x3c, 0x8a, 0x61, 0x41, 0xaa, 0x1, 0xea, 0xca, 0x21, 0x81, 0x6a, 0x4a, 0xa1, 0xa, 0xe1, 0xc1, 0x2a, 0xe8, 0x3, 0x23, 0xc8, 0x63, 0x88, 0xa8, 0x43, 0xe3, 0x8, 0x28, 0xc3, 0x68, 0x83, 0xa3, 0x48, 0xfe, 0x15, 0x35, 0xde, 0x75, 0x9e, 0xbe, 0x55, 0xf5, 0x1e, 0x3e, 0xd5, 0x7e, 0x95, 0xb5, 0x5e, 0xc4, 0x2f, 0xf, 0xe4, 0x4f, 0xa4, 0x84, 0x6f, 0xcf, 0x24, 0x4, 0xef, 0x44, 0xaf, 0x8f, 0x64, 0xd2, 0x39, 0x19, 0xf2, 0x59, 0xb2, 0x92, 0x79, 0xd9, 0x32, 0x12, 0xf9, 0x52, 0xb9, 0x99, 0x72}, + {0x0, 0xec, 0xc5, 0x29, 0x97, 0x7b, 0x52, 0xbe, 0x33, 0xdf, 0xf6, 0x1a, 0xa4, 0x48, 0x61, 0x8d, 0x66, 0x8a, 0xa3, 0x4f, 0xf1, 0x1d, 0x34, 0xd8, 0x55, 0xb9, 0x90, 0x7c, 0xc2, 0x2e, 0x7, 0xeb, 0xcc, 0x20, 0x9, 0xe5, 0x5b, 0xb7, 0x9e, 0x72, 0xff, 0x13, 0x3a, 0xd6, 0x68, 0x84, 0xad, 0x41, 0xaa, 0x46, 0x6f, 0x83, 0x3d, 0xd1, 0xf8, 0x14, 0x99, 0x75, 0x5c, 0xb0, 0xe, 0xe2, 0xcb, 0x27, 0x85, 0x69, 0x40, 0xac, 0x12, 0xfe, 0xd7, 0x3b, 0xb6, 0x5a, 0x73, 0x9f, 0x21, 0xcd, 0xe4, 0x8, 0xe3, 0xf, 0x26, 0xca, 0x74, 0x98, 0xb1, 0x5d, 0xd0, 0x3c, 0x15, 0xf9, 0x47, 0xab, 0x82, 0x6e, 0x49, 0xa5, 0x8c, 0x60, 0xde, 0x32, 0x1b, 0xf7, 0x7a, 0x96, 0xbf, 0x53, 0xed, 0x1, 0x28, 0xc4, 0x2f, 0xc3, 0xea, 0x6, 0xb8, 0x54, 0x7d, 0x91, 0x1c, 0xf0, 0xd9, 0x35, 0x8b, 0x67, 0x4e, 0xa2, 0x17, 0xfb, 0xd2, 0x3e, 0x80, 0x6c, 0x45, 0xa9, 0x24, 0xc8, 0xe1, 0xd, 0xb3, 0x5f, 0x76, 0x9a, 0x71, 0x9d, 0xb4, 0x58, 0xe6, 0xa, 0x23, 0xcf, 0x42, 0xae, 0x87, 0x6b, 0xd5, 0x39, 0x10, 0xfc, 0xdb, 0x37, 0x1e, 0xf2, 0x4c, 0xa0, 0x89, 0x65, 0xe8, 0x4, 0x2d, 0xc1, 0x7f, 0x93, 0xba, 0x56, 0xbd, 0x51, 0x78, 0x94, 0x2a, 0xc6, 0xef, 0x3, 0x8e, 0x62, 0x4b, 0xa7, 0x19, 0xf5, 0xdc, 0x30, 0x92, 0x7e, 0x57, 0xbb, 0x5, 0xe9, 0xc0, 0x2c, 0xa1, 0x4d, 0x64, 0x88, 0x36, 0xda, 0xf3, 0x1f, 0xf4, 0x18, 0x31, 0xdd, 0x63, 0x8f, 0xa6, 0x4a, 0xc7, 0x2b, 0x2, 0xee, 0x50, 0xbc, 0x95, 0x79, 0x5e, 0xb2, 0x9b, 0x77, 0xc9, 0x25, 0xc, 0xe0, 0x6d, 0x81, 0xa8, 0x44, 0xfa, 0x16, 0x3f, 0xd3, 0x38, 0xd4, 0xfd, 0x11, 0xaf, 0x43, 0x6a, 0x86, 0xb, 0xe7, 0xce, 0x22, 0x9c, 0x70, 0x59, 0xb5}, + {0x0, 0xed, 0xc7, 0x2a, 0x93, 0x7e, 0x54, 0xb9, 0x3b, 0xd6, 0xfc, 0x11, 0xa8, 0x45, 0x6f, 0x82, 0x76, 0x9b, 0xb1, 0x5c, 0xe5, 0x8, 0x22, 0xcf, 0x4d, 0xa0, 0x8a, 0x67, 0xde, 0x33, 0x19, 0xf4, 0xec, 0x1, 0x2b, 0xc6, 0x7f, 0x92, 0xb8, 0x55, 0xd7, 0x3a, 0x10, 0xfd, 0x44, 0xa9, 0x83, 0x6e, 0x9a, 0x77, 0x5d, 0xb0, 0x9, 0xe4, 0xce, 0x23, 0xa1, 0x4c, 0x66, 0x8b, 0x32, 0xdf, 0xf5, 0x18, 0xc5, 0x28, 0x2, 0xef, 0x56, 0xbb, 0x91, 0x7c, 0xfe, 0x13, 0x39, 0xd4, 0x6d, 0x80, 0xaa, 0x47, 0xb3, 0x5e, 0x74, 0x99, 0x20, 0xcd, 0xe7, 0xa, 0x88, 0x65, 0x4f, 0xa2, 0x1b, 0xf6, 0xdc, 0x31, 0x29, 0xc4, 0xee, 0x3, 0xba, 0x57, 0x7d, 0x90, 0x12, 0xff, 0xd5, 0x38, 0x81, 0x6c, 0x46, 0xab, 0x5f, 0xb2, 0x98, 0x75, 0xcc, 0x21, 0xb, 0xe6, 0x64, 0x89, 0xa3, 0x4e, 0xf7, 0x1a, 0x30, 0xdd, 0x97, 0x7a, 0x50, 0xbd, 0x4, 0xe9, 0xc3, 0x2e, 0xac, 0x41, 0x6b, 0x86, 0x3f, 0xd2, 0xf8, 0x15, 0xe1, 0xc, 0x26, 0xcb, 0x72, 0x9f, 0xb5, 0x58, 0xda, 0x37, 0x1d, 0xf0, 0x49, 0xa4, 0x8e, 0x63, 0x7b, 0x96, 0xbc, 0x51, 0xe8, 0x5, 0x2f, 0xc2, 0x40, 0xad, 0x87, 0x6a, 0xd3, 0x3e, 0x14, 0xf9, 0xd, 0xe0, 0xca, 0x27, 0x9e, 0x73, 0x59, 0xb4, 0x36, 0xdb, 0xf1, 0x1c, 0xa5, 0x48, 0x62, 0x8f, 0x52, 0xbf, 0x95, 0x78, 0xc1, 0x2c, 0x6, 0xeb, 0x69, 0x84, 0xae, 0x43, 0xfa, 0x17, 0x3d, 0xd0, 0x24, 0xc9, 0xe3, 0xe, 0xb7, 0x5a, 0x70, 0x9d, 0x1f, 0xf2, 0xd8, 0x35, 0x8c, 0x61, 0x4b, 0xa6, 0xbe, 0x53, 0x79, 0x94, 0x2d, 0xc0, 0xea, 0x7, 0x85, 0x68, 0x42, 0xaf, 0x16, 0xfb, 0xd1, 0x3c, 0xc8, 0x25, 0xf, 0xe2, 0x5b, 0xb6, 0x9c, 0x71, 0xf3, 0x1e, 0x34, 0xd9, 0x60, 0x8d, 0xa7, 0x4a}, + {0x0, 0xee, 0xc1, 0x2f, 0x9f, 0x71, 0x5e, 0xb0, 0x23, 0xcd, 0xe2, 0xc, 0xbc, 0x52, 0x7d, 0x93, 0x46, 0xa8, 0x87, 0x69, 0xd9, 0x37, 0x18, 0xf6, 0x65, 0x8b, 0xa4, 0x4a, 0xfa, 0x14, 0x3b, 0xd5, 0x8c, 0x62, 0x4d, 0xa3, 0x13, 0xfd, 0xd2, 0x3c, 0xaf, 0x41, 0x6e, 0x80, 0x30, 0xde, 0xf1, 0x1f, 0xca, 0x24, 0xb, 0xe5, 0x55, 0xbb, 0x94, 0x7a, 0xe9, 0x7, 0x28, 0xc6, 0x76, 0x98, 0xb7, 0x59, 0x5, 0xeb, 0xc4, 0x2a, 0x9a, 0x74, 0x5b, 0xb5, 0x26, 0xc8, 0xe7, 0x9, 0xb9, 0x57, 0x78, 0x96, 0x43, 0xad, 0x82, 0x6c, 0xdc, 0x32, 0x1d, 0xf3, 0x60, 0x8e, 0xa1, 0x4f, 0xff, 0x11, 0x3e, 0xd0, 0x89, 0x67, 0x48, 0xa6, 0x16, 0xf8, 0xd7, 0x39, 0xaa, 0x44, 0x6b, 0x85, 0x35, 0xdb, 0xf4, 0x1a, 0xcf, 0x21, 0xe, 0xe0, 0x50, 0xbe, 0x91, 0x7f, 0xec, 0x2, 0x2d, 0xc3, 0x73, 0x9d, 0xb2, 0x5c, 0xa, 0xe4, 0xcb, 0x25, 0x95, 0x7b, 0x54, 0xba, 0x29, 0xc7, 0xe8, 0x6, 0xb6, 0x58, 0x77, 0x99, 0x4c, 0xa2, 0x8d, 0x63, 0xd3, 0x3d, 0x12, 0xfc, 0x6f, 0x81, 0xae, 0x40, 0xf0, 0x1e, 0x31, 0xdf, 0x86, 0x68, 0x47, 0xa9, 0x19, 0xf7, 0xd8, 0x36, 0xa5, 0x4b, 0x64, 0x8a, 0x3a, 0xd4, 0xfb, 0x15, 0xc0, 0x2e, 0x1, 0xef, 0x5f, 0xb1, 0x9e, 0x70, 0xe3, 0xd, 0x22, 0xcc, 0x7c, 0x92, 0xbd, 0x53, 0xf, 0xe1, 0xce, 0x20, 0x90, 0x7e, 0x51, 0xbf, 0x2c, 0xc2, 0xed, 0x3, 0xb3, 0x5d, 0x72, 0x9c, 0x49, 0xa7, 0x88, 0x66, 0xd6, 0x38, 0x17, 0xf9, 0x6a, 0x84, 0xab, 0x45, 0xf5, 0x1b, 0x34, 0xda, 0x83, 0x6d, 0x42, 0xac, 0x1c, 0xf2, 0xdd, 0x33, 0xa0, 0x4e, 0x61, 0x8f, 0x3f, 0xd1, 0xfe, 0x10, 0xc5, 0x2b, 0x4, 0xea, 0x5a, 0xb4, 0x9b, 0x75, 0xe6, 0x8, 0x27, 0xc9, 0x79, 0x97, 0xb8, 0x56}, + {0x0, 0xef, 0xc3, 0x2c, 0x9b, 0x74, 0x58, 0xb7, 0x2b, 0xc4, 0xe8, 0x7, 0xb0, 0x5f, 0x73, 0x9c, 0x56, 0xb9, 0x95, 0x7a, 0xcd, 0x22, 0xe, 0xe1, 0x7d, 0x92, 0xbe, 0x51, 0xe6, 0x9, 0x25, 0xca, 0xac, 0x43, 0x6f, 0x80, 0x37, 0xd8, 0xf4, 0x1b, 0x87, 0x68, 0x44, 0xab, 0x1c, 0xf3, 0xdf, 0x30, 0xfa, 0x15, 0x39, 0xd6, 0x61, 0x8e, 0xa2, 0x4d, 0xd1, 0x3e, 0x12, 0xfd, 0x4a, 0xa5, 0x89, 0x66, 0x45, 0xaa, 0x86, 0x69, 0xde, 0x31, 0x1d, 0xf2, 0x6e, 0x81, 0xad, 0x42, 0xf5, 0x1a, 0x36, 0xd9, 0x13, 0xfc, 0xd0, 0x3f, 0x88, 0x67, 0x4b, 0xa4, 0x38, 0xd7, 0xfb, 0x14, 0xa3, 0x4c, 0x60, 0x8f, 0xe9, 0x6, 0x2a, 0xc5, 0x72, 0x9d, 0xb1, 0x5e, 0xc2, 0x2d, 0x1, 0xee, 0x59, 0xb6, 0x9a, 0x75, 0xbf, 0x50, 0x7c, 0x93, 0x24, 0xcb, 0xe7, 0x8, 0x94, 0x7b, 0x57, 0xb8, 0xf, 0xe0, 0xcc, 0x23, 0x8a, 0x65, 0x49, 0xa6, 0x11, 0xfe, 0xd2, 0x3d, 0xa1, 0x4e, 0x62, 0x8d, 0x3a, 0xd5, 0xf9, 0x16, 0xdc, 0x33, 0x1f, 0xf0, 0x47, 0xa8, 0x84, 0x6b, 0xf7, 0x18, 0x34, 0xdb, 0x6c, 0x83, 0xaf, 0x40, 0x26, 0xc9, 0xe5, 0xa, 0xbd, 0x52, 0x7e, 0x91, 0xd, 0xe2, 0xce, 0x21, 0x96, 0x79, 0x55, 0xba, 0x70, 0x9f, 0xb3, 0x5c, 0xeb, 0x4, 0x28, 0xc7, 0x5b, 0xb4, 0x98, 0x77, 0xc0, 0x2f, 0x3, 0xec, 0xcf, 0x20, 0xc, 0xe3, 0x54, 0xbb, 0x97, 0x78, 0xe4, 0xb, 0x27, 0xc8, 0x7f, 0x90, 0xbc, 0x53, 0x99, 0x76, 0x5a, 0xb5, 0x2, 0xed, 0xc1, 0x2e, 0xb2, 0x5d, 0x71, 0x9e, 0x29, 0xc6, 0xea, 0x5, 0x63, 0x8c, 0xa0, 0x4f, 0xf8, 0x17, 0x3b, 0xd4, 0x48, 0xa7, 0x8b, 0x64, 0xd3, 0x3c, 0x10, 0xff, 0x35, 0xda, 0xf6, 0x19, 0xae, 0x41, 0x6d, 0x82, 0x1e, 0xf1, 0xdd, 0x32, 0x85, 0x6a, 0x46, 0xa9}, + {0x0, 0xf0, 0xfd, 0xd, 0xe7, 0x17, 0x1a, 0xea, 0xd3, 0x23, 0x2e, 0xde, 0x34, 0xc4, 0xc9, 0x39, 0xbb, 0x4b, 0x46, 0xb6, 0x5c, 0xac, 0xa1, 0x51, 0x68, 0x98, 0x95, 0x65, 0x8f, 0x7f, 0x72, 0x82, 0x6b, 0x9b, 0x96, 0x66, 0x8c, 0x7c, 0x71, 0x81, 0xb8, 0x48, 0x45, 0xb5, 0x5f, 0xaf, 0xa2, 0x52, 0xd0, 0x20, 0x2d, 0xdd, 0x37, 0xc7, 0xca, 0x3a, 0x3, 0xf3, 0xfe, 0xe, 0xe4, 0x14, 0x19, 0xe9, 0xd6, 0x26, 0x2b, 0xdb, 0x31, 0xc1, 0xcc, 0x3c, 0x5, 0xf5, 0xf8, 0x8, 0xe2, 0x12, 0x1f, 0xef, 0x6d, 0x9d, 0x90, 0x60, 0x8a, 0x7a, 0x77, 0x87, 0xbe, 0x4e, 0x43, 0xb3, 0x59, 0xa9, 0xa4, 0x54, 0xbd, 0x4d, 0x40, 0xb0, 0x5a, 0xaa, 0xa7, 0x57, 0x6e, 0x9e, 0x93, 0x63, 0x89, 0x79, 0x74, 0x84, 0x6, 0xf6, 0xfb, 0xb, 0xe1, 0x11, 0x1c, 0xec, 0xd5, 0x25, 0x28, 0xd8, 0x32, 0xc2, 0xcf, 0x3f, 0xb1, 0x41, 0x4c, 0xbc, 0x56, 0xa6, 0xab, 0x5b, 0x62, 0x92, 0x9f, 0x6f, 0x85, 0x75, 0x78, 0x88, 0xa, 0xfa, 0xf7, 0x7, 0xed, 0x1d, 0x10, 0xe0, 0xd9, 0x29, 0x24, 0xd4, 0x3e, 0xce, 0xc3, 0x33, 0xda, 0x2a, 0x27, 0xd7, 0x3d, 0xcd, 0xc0, 0x30, 0x9, 0xf9, 0xf4, 0x4, 0xee, 0x1e, 0x13, 0xe3, 0x61, 0x91, 0x9c, 0x6c, 0x86, 0x76, 0x7b, 0x8b, 0xb2, 0x42, 0x4f, 0xbf, 0x55, 0xa5, 0xa8, 0x58, 0x67, 0x97, 0x9a, 0x6a, 0x80, 0x70, 0x7d, 0x8d, 0xb4, 0x44, 0x49, 0xb9, 0x53, 0xa3, 0xae, 0x5e, 0xdc, 0x2c, 0x21, 0xd1, 0x3b, 0xcb, 0xc6, 0x36, 0xf, 0xff, 0xf2, 0x2, 0xe8, 0x18, 0x15, 0xe5, 0xc, 0xfc, 0xf1, 0x1, 0xeb, 0x1b, 0x16, 0xe6, 0xdf, 0x2f, 0x22, 0xd2, 0x38, 0xc8, 0xc5, 0x35, 0xb7, 0x47, 0x4a, 0xba, 0x50, 0xa0, 0xad, 0x5d, 0x64, 0x94, 0x99, 0x69, 0x83, 0x73, 0x7e, 0x8e}, + {0x0, 0xf1, 0xff, 0xe, 0xe3, 0x12, 0x1c, 0xed, 0xdb, 0x2a, 0x24, 0xd5, 0x38, 0xc9, 0xc7, 0x36, 0xab, 0x5a, 0x54, 0xa5, 0x48, 0xb9, 0xb7, 0x46, 0x70, 0x81, 0x8f, 0x7e, 0x93, 0x62, 0x6c, 0x9d, 0x4b, 0xba, 0xb4, 0x45, 0xa8, 0x59, 0x57, 0xa6, 0x90, 0x61, 0x6f, 0x9e, 0x73, 0x82, 0x8c, 0x7d, 0xe0, 0x11, 0x1f, 0xee, 0x3, 0xf2, 0xfc, 0xd, 0x3b, 0xca, 0xc4, 0x35, 0xd8, 0x29, 0x27, 0xd6, 0x96, 0x67, 0x69, 0x98, 0x75, 0x84, 0x8a, 0x7b, 0x4d, 0xbc, 0xb2, 0x43, 0xae, 0x5f, 0x51, 0xa0, 0x3d, 0xcc, 0xc2, 0x33, 0xde, 0x2f, 0x21, 0xd0, 0xe6, 0x17, 0x19, 0xe8, 0x5, 0xf4, 0xfa, 0xb, 0xdd, 0x2c, 0x22, 0xd3, 0x3e, 0xcf, 0xc1, 0x30, 0x6, 0xf7, 0xf9, 0x8, 0xe5, 0x14, 0x1a, 0xeb, 0x76, 0x87, 0x89, 0x78, 0x95, 0x64, 0x6a, 0x9b, 0xad, 0x5c, 0x52, 0xa3, 0x4e, 0xbf, 0xb1, 0x40, 0x31, 0xc0, 0xce, 0x3f, 0xd2, 0x23, 0x2d, 0xdc, 0xea, 0x1b, 0x15, 0xe4, 0x9, 0xf8, 0xf6, 0x7, 0x9a, 0x6b, 0x65, 0x94, 0x79, 0x88, 0x86, 0x77, 0x41, 0xb0, 0xbe, 0x4f, 0xa2, 0x53, 0x5d, 0xac, 0x7a, 0x8b, 0x85, 0x74, 0x99, 0x68, 0x66, 0x97, 0xa1, 0x50, 0x5e, 0xaf, 0x42, 0xb3, 0xbd, 0x4c, 0xd1, 0x20, 0x2e, 0xdf, 0x32, 0xc3, 0xcd, 0x3c, 0xa, 0xfb, 0xf5, 0x4, 0xe9, 0x18, 0x16, 0xe7, 0xa7, 0x56, 0x58, 0xa9, 0x44, 0xb5, 0xbb, 0x4a, 0x7c, 0x8d, 0x83, 0x72, 0x9f, 0x6e, 0x60, 0x91, 0xc, 0xfd, 0xf3, 0x2, 0xef, 0x1e, 0x10, 0xe1, 0xd7, 0x26, 0x28, 0xd9, 0x34, 0xc5, 0xcb, 0x3a, 0xec, 0x1d, 0x13, 0xe2, 0xf, 0xfe, 0xf0, 0x1, 0x37, 0xc6, 0xc8, 0x39, 0xd4, 0x25, 0x2b, 0xda, 0x47, 0xb6, 0xb8, 0x49, 0xa4, 0x55, 0x5b, 0xaa, 0x9c, 0x6d, 0x63, 0x92, 0x7f, 0x8e, 0x80, 0x71}, + {0x0, 0xf2, 0xf9, 0xb, 0xef, 0x1d, 0x16, 0xe4, 0xc3, 0x31, 0x3a, 0xc8, 0x2c, 0xde, 0xd5, 0x27, 0x9b, 0x69, 0x62, 0x90, 0x74, 0x86, 0x8d, 0x7f, 0x58, 0xaa, 0xa1, 0x53, 0xb7, 0x45, 0x4e, 0xbc, 0x2b, 0xd9, 0xd2, 0x20, 0xc4, 0x36, 0x3d, 0xcf, 0xe8, 0x1a, 0x11, 0xe3, 0x7, 0xf5, 0xfe, 0xc, 0xb0, 0x42, 0x49, 0xbb, 0x5f, 0xad, 0xa6, 0x54, 0x73, 0x81, 0x8a, 0x78, 0x9c, 0x6e, 0x65, 0x97, 0x56, 0xa4, 0xaf, 0x5d, 0xb9, 0x4b, 0x40, 0xb2, 0x95, 0x67, 0x6c, 0x9e, 0x7a, 0x88, 0x83, 0x71, 0xcd, 0x3f, 0x34, 0xc6, 0x22, 0xd0, 0xdb, 0x29, 0xe, 0xfc, 0xf7, 0x5, 0xe1, 0x13, 0x18, 0xea, 0x7d, 0x8f, 0x84, 0x76, 0x92, 0x60, 0x6b, 0x99, 0xbe, 0x4c, 0x47, 0xb5, 0x51, 0xa3, 0xa8, 0x5a, 0xe6, 0x14, 0x1f, 0xed, 0x9, 0xfb, 0xf0, 0x2, 0x25, 0xd7, 0xdc, 0x2e, 0xca, 0x38, 0x33, 0xc1, 0xac, 0x5e, 0x55, 0xa7, 0x43, 0xb1, 0xba, 0x48, 0x6f, 0x9d, 0x96, 0x64, 0x80, 0x72, 0x79, 0x8b, 0x37, 0xc5, 0xce, 0x3c, 0xd8, 0x2a, 0x21, 0xd3, 0xf4, 0x6, 0xd, 0xff, 0x1b, 0xe9, 0xe2, 0x10, 0x87, 0x75, 0x7e, 0x8c, 0x68, 0x9a, 0x91, 0x63, 0x44, 0xb6, 0xbd, 0x4f, 0xab, 0x59, 0x52, 0xa0, 0x1c, 0xee, 0xe5, 0x17, 0xf3, 0x1, 0xa, 0xf8, 0xdf, 0x2d, 0x26, 0xd4, 0x30, 0xc2, 0xc9, 0x3b, 0xfa, 0x8, 0x3, 0xf1, 0x15, 0xe7, 0xec, 0x1e, 0x39, 0xcb, 0xc0, 0x32, 0xd6, 0x24, 0x2f, 0xdd, 0x61, 0x93, 0x98, 0x6a, 0x8e, 0x7c, 0x77, 0x85, 0xa2, 0x50, 0x5b, 0xa9, 0x4d, 0xbf, 0xb4, 0x46, 0xd1, 0x23, 0x28, 0xda, 0x3e, 0xcc, 0xc7, 0x35, 0x12, 0xe0, 0xeb, 0x19, 0xfd, 0xf, 0x4, 0xf6, 0x4a, 0xb8, 0xb3, 0x41, 0xa5, 0x57, 0x5c, 0xae, 0x89, 0x7b, 0x70, 0x82, 0x66, 0x94, 0x9f, 0x6d}, + {0x0, 0xf3, 0xfb, 0x8, 0xeb, 0x18, 0x10, 0xe3, 0xcb, 0x38, 0x30, 0xc3, 0x20, 0xd3, 0xdb, 0x28, 0x8b, 0x78, 0x70, 0x83, 0x60, 0x93, 0x9b, 0x68, 0x40, 0xb3, 0xbb, 0x48, 0xab, 0x58, 0x50, 0xa3, 0xb, 0xf8, 0xf0, 0x3, 0xe0, 0x13, 0x1b, 0xe8, 0xc0, 0x33, 0x3b, 0xc8, 0x2b, 0xd8, 0xd0, 0x23, 0x80, 0x73, 0x7b, 0x88, 0x6b, 0x98, 0x90, 0x63, 0x4b, 0xb8, 0xb0, 0x43, 0xa0, 0x53, 0x5b, 0xa8, 0x16, 0xe5, 0xed, 0x1e, 0xfd, 0xe, 0x6, 0xf5, 0xdd, 0x2e, 0x26, 0xd5, 0x36, 0xc5, 0xcd, 0x3e, 0x9d, 0x6e, 0x66, 0x95, 0x76, 0x85, 0x8d, 0x7e, 0x56, 0xa5, 0xad, 0x5e, 0xbd, 0x4e, 0x46, 0xb5, 0x1d, 0xee, 0xe6, 0x15, 0xf6, 0x5, 0xd, 0xfe, 0xd6, 0x25, 0x2d, 0xde, 0x3d, 0xce, 0xc6, 0x35, 0x96, 0x65, 0x6d, 0x9e, 0x7d, 0x8e, 0x86, 0x75, 0x5d, 0xae, 0xa6, 0x55, 0xb6, 0x45, 0x4d, 0xbe, 0x2c, 0xdf, 0xd7, 0x24, 0xc7, 0x34, 0x3c, 0xcf, 0xe7, 0x14, 0x1c, 0xef, 0xc, 0xff, 0xf7, 0x4, 0xa7, 0x54, 0x5c, 0xaf, 0x4c, 0xbf, 0xb7, 0x44, 0x6c, 0x9f, 0x97, 0x64, 0x87, 0x74, 0x7c, 0x8f, 0x27, 0xd4, 0xdc, 0x2f, 0xcc, 0x3f, 0x37, 0xc4, 0xec, 0x1f, 0x17, 0xe4, 0x7, 0xf4, 0xfc, 0xf, 0xac, 0x5f, 0x57, 0xa4, 0x47, 0xb4, 0xbc, 0x4f, 0x67, 0x94, 0x9c, 0x6f, 0x8c, 0x7f, 0x77, 0x84, 0x3a, 0xc9, 0xc1, 0x32, 0xd1, 0x22, 0x2a, 0xd9, 0xf1, 0x2, 0xa, 0xf9, 0x1a, 0xe9, 0xe1, 0x12, 0xb1, 0x42, 0x4a, 0xb9, 0x5a, 0xa9, 0xa1, 0x52, 0x7a, 0x89, 0x81, 0x72, 0x91, 0x62, 0x6a, 0x99, 0x31, 0xc2, 0xca, 0x39, 0xda, 0x29, 0x21, 0xd2, 0xfa, 0x9, 0x1, 0xf2, 0x11, 0xe2, 0xea, 0x19, 0xba, 0x49, 0x41, 0xb2, 0x51, 0xa2, 0xaa, 0x59, 0x71, 0x82, 0x8a, 0x79, 0x9a, 0x69, 0x61, 0x92}, + {0x0, 0xf4, 0xf5, 0x1, 0xf7, 0x3, 0x2, 0xf6, 0xf3, 0x7, 0x6, 0xf2, 0x4, 0xf0, 0xf1, 0x5, 0xfb, 0xf, 0xe, 0xfa, 0xc, 0xf8, 0xf9, 0xd, 0x8, 0xfc, 0xfd, 0x9, 0xff, 0xb, 0xa, 0xfe, 0xeb, 0x1f, 0x1e, 0xea, 0x1c, 0xe8, 0xe9, 0x1d, 0x18, 0xec, 0xed, 0x19, 0xef, 0x1b, 0x1a, 0xee, 0x10, 0xe4, 0xe5, 0x11, 0xe7, 0x13, 0x12, 0xe6, 0xe3, 0x17, 0x16, 0xe2, 0x14, 0xe0, 0xe1, 0x15, 0xcb, 0x3f, 0x3e, 0xca, 0x3c, 0xc8, 0xc9, 0x3d, 0x38, 0xcc, 0xcd, 0x39, 0xcf, 0x3b, 0x3a, 0xce, 0x30, 0xc4, 0xc5, 0x31, 0xc7, 0x33, 0x32, 0xc6, 0xc3, 0x37, 0x36, 0xc2, 0x34, 0xc0, 0xc1, 0x35, 0x20, 0xd4, 0xd5, 0x21, 0xd7, 0x23, 0x22, 0xd6, 0xd3, 0x27, 0x26, 0xd2, 0x24, 0xd0, 0xd1, 0x25, 0xdb, 0x2f, 0x2e, 0xda, 0x2c, 0xd8, 0xd9, 0x2d, 0x28, 0xdc, 0xdd, 0x29, 0xdf, 0x2b, 0x2a, 0xde, 0x8b, 0x7f, 0x7e, 0x8a, 0x7c, 0x88, 0x89, 0x7d, 0x78, 0x8c, 0x8d, 0x79, 0x8f, 0x7b, 0x7a, 0x8e, 0x70, 0x84, 0x85, 0x71, 0x87, 0x73, 0x72, 0x86, 0x83, 0x77, 0x76, 0x82, 0x74, 0x80, 0x81, 0x75, 0x60, 0x94, 0x95, 0x61, 0x97, 0x63, 0x62, 0x96, 0x93, 0x67, 0x66, 0x92, 0x64, 0x90, 0x91, 0x65, 0x9b, 0x6f, 0x6e, 0x9a, 0x6c, 0x98, 0x99, 0x6d, 0x68, 0x9c, 0x9d, 0x69, 0x9f, 0x6b, 0x6a, 0x9e, 0x40, 0xb4, 0xb5, 0x41, 0xb7, 0x43, 0x42, 0xb6, 0xb3, 0x47, 0x46, 0xb2, 0x44, 0xb0, 0xb1, 0x45, 0xbb, 0x4f, 0x4e, 0xba, 0x4c, 0xb8, 0xb9, 0x4d, 0x48, 0xbc, 0xbd, 0x49, 0xbf, 0x4b, 0x4a, 0xbe, 0xab, 0x5f, 0x5e, 0xaa, 0x5c, 0xa8, 0xa9, 0x5d, 0x58, 0xac, 0xad, 0x59, 0xaf, 0x5b, 0x5a, 0xae, 0x50, 0xa4, 0xa5, 0x51, 0xa7, 0x53, 0x52, 0xa6, 0xa3, 0x57, 0x56, 0xa2, 0x54, 0xa0, 0xa1, 0x55}, + {0x0, 0xf5, 0xf7, 0x2, 0xf3, 0x6, 0x4, 0xf1, 0xfb, 0xe, 0xc, 0xf9, 0x8, 0xfd, 0xff, 0xa, 0xeb, 0x1e, 0x1c, 0xe9, 0x18, 0xed, 0xef, 0x1a, 0x10, 0xe5, 0xe7, 0x12, 0xe3, 0x16, 0x14, 0xe1, 0xcb, 0x3e, 0x3c, 0xc9, 0x38, 0xcd, 0xcf, 0x3a, 0x30, 0xc5, 0xc7, 0x32, 0xc3, 0x36, 0x34, 0xc1, 0x20, 0xd5, 0xd7, 0x22, 0xd3, 0x26, 0x24, 0xd1, 0xdb, 0x2e, 0x2c, 0xd9, 0x28, 0xdd, 0xdf, 0x2a, 0x8b, 0x7e, 0x7c, 0x89, 0x78, 0x8d, 0x8f, 0x7a, 0x70, 0x85, 0x87, 0x72, 0x83, 0x76, 0x74, 0x81, 0x60, 0x95, 0x97, 0x62, 0x93, 0x66, 0x64, 0x91, 0x9b, 0x6e, 0x6c, 0x99, 0x68, 0x9d, 0x9f, 0x6a, 0x40, 0xb5, 0xb7, 0x42, 0xb3, 0x46, 0x44, 0xb1, 0xbb, 0x4e, 0x4c, 0xb9, 0x48, 0xbd, 0xbf, 0x4a, 0xab, 0x5e, 0x5c, 0xa9, 0x58, 0xad, 0xaf, 0x5a, 0x50, 0xa5, 0xa7, 0x52, 0xa3, 0x56, 0x54, 0xa1, 0xb, 0xfe, 0xfc, 0x9, 0xf8, 0xd, 0xf, 0xfa, 0xf0, 0x5, 0x7, 0xf2, 0x3, 0xf6, 0xf4, 0x1, 0xe0, 0x15, 0x17, 0xe2, 0x13, 0xe6, 0xe4, 0x11, 0x1b, 0xee, 0xec, 0x19, 0xe8, 0x1d, 0x1f, 0xea, 0xc0, 0x35, 0x37, 0xc2, 0x33, 0xc6, 0xc4, 0x31, 0x3b, 0xce, 0xcc, 0x39, 0xc8, 0x3d, 0x3f, 0xca, 0x2b, 0xde, 0xdc, 0x29, 0xd8, 0x2d, 0x2f, 0xda, 0xd0, 0x25, 0x27, 0xd2, 0x23, 0xd6, 0xd4, 0x21, 0x80, 0x75, 0x77, 0x82, 0x73, 0x86, 0x84, 0x71, 0x7b, 0x8e, 0x8c, 0x79, 0x88, 0x7d, 0x7f, 0x8a, 0x6b, 0x9e, 0x9c, 0x69, 0x98, 0x6d, 0x6f, 0x9a, 0x90, 0x65, 0x67, 0x92, 0x63, 0x96, 0x94, 0x61, 0x4b, 0xbe, 0xbc, 0x49, 0xb8, 0x4d, 0x4f, 0xba, 0xb0, 0x45, 0x47, 0xb2, 0x43, 0xb6, 0xb4, 0x41, 0xa0, 0x55, 0x57, 0xa2, 0x53, 0xa6, 0xa4, 0x51, 0x5b, 0xae, 0xac, 0x59, 0xa8, 0x5d, 0x5f, 0xaa}, + {0x0, 0xf6, 0xf1, 0x7, 0xff, 0x9, 0xe, 0xf8, 0xe3, 0x15, 0x12, 0xe4, 0x1c, 0xea, 0xed, 0x1b, 0xdb, 0x2d, 0x2a, 0xdc, 0x24, 0xd2, 0xd5, 0x23, 0x38, 0xce, 0xc9, 0x3f, 0xc7, 0x31, 0x36, 0xc0, 0xab, 0x5d, 0x5a, 0xac, 0x54, 0xa2, 0xa5, 0x53, 0x48, 0xbe, 0xb9, 0x4f, 0xb7, 0x41, 0x46, 0xb0, 0x70, 0x86, 0x81, 0x77, 0x8f, 0x79, 0x7e, 0x88, 0x93, 0x65, 0x62, 0x94, 0x6c, 0x9a, 0x9d, 0x6b, 0x4b, 0xbd, 0xba, 0x4c, 0xb4, 0x42, 0x45, 0xb3, 0xa8, 0x5e, 0x59, 0xaf, 0x57, 0xa1, 0xa6, 0x50, 0x90, 0x66, 0x61, 0x97, 0x6f, 0x99, 0x9e, 0x68, 0x73, 0x85, 0x82, 0x74, 0x8c, 0x7a, 0x7d, 0x8b, 0xe0, 0x16, 0x11, 0xe7, 0x1f, 0xe9, 0xee, 0x18, 0x3, 0xf5, 0xf2, 0x4, 0xfc, 0xa, 0xd, 0xfb, 0x3b, 0xcd, 0xca, 0x3c, 0xc4, 0x32, 0x35, 0xc3, 0xd8, 0x2e, 0x29, 0xdf, 0x27, 0xd1, 0xd6, 0x20, 0x96, 0x60, 0x67, 0x91, 0x69, 0x9f, 0x98, 0x6e, 0x75, 0x83, 0x84, 0x72, 0x8a, 0x7c, 0x7b, 0x8d, 0x4d, 0xbb, 0xbc, 0x4a, 0xb2, 0x44, 0x43, 0xb5, 0xae, 0x58, 0x5f, 0xa9, 0x51, 0xa7, 0xa0, 0x56, 0x3d, 0xcb, 0xcc, 0x3a, 0xc2, 0x34, 0x33, 0xc5, 0xde, 0x28, 0x2f, 0xd9, 0x21, 0xd7, 0xd0, 0x26, 0xe6, 0x10, 0x17, 0xe1, 0x19, 0xef, 0xe8, 0x1e, 0x5, 0xf3, 0xf4, 0x2, 0xfa, 0xc, 0xb, 0xfd, 0xdd, 0x2b, 0x2c, 0xda, 0x22, 0xd4, 0xd3, 0x25, 0x3e, 0xc8, 0xcf, 0x39, 0xc1, 0x37, 0x30, 0xc6, 0x6, 0xf0, 0xf7, 0x1, 0xf9, 0xf, 0x8, 0xfe, 0xe5, 0x13, 0x14, 0xe2, 0x1a, 0xec, 0xeb, 0x1d, 0x76, 0x80, 0x87, 0x71, 0x89, 0x7f, 0x78, 0x8e, 0x95, 0x63, 0x64, 0x92, 0x6a, 0x9c, 0x9b, 0x6d, 0xad, 0x5b, 0x5c, 0xaa, 0x52, 0xa4, 0xa3, 0x55, 0x4e, 0xb8, 0xbf, 0x49, 0xb1, 0x47, 0x40, 0xb6}, + {0x0, 0xf7, 0xf3, 0x4, 0xfb, 0xc, 0x8, 0xff, 0xeb, 0x1c, 0x18, 0xef, 0x10, 0xe7, 0xe3, 0x14, 0xcb, 0x3c, 0x38, 0xcf, 0x30, 0xc7, 0xc3, 0x34, 0x20, 0xd7, 0xd3, 0x24, 0xdb, 0x2c, 0x28, 0xdf, 0x8b, 0x7c, 0x78, 0x8f, 0x70, 0x87, 0x83, 0x74, 0x60, 0x97, 0x93, 0x64, 0x9b, 0x6c, 0x68, 0x9f, 0x40, 0xb7, 0xb3, 0x44, 0xbb, 0x4c, 0x48, 0xbf, 0xab, 0x5c, 0x58, 0xaf, 0x50, 0xa7, 0xa3, 0x54, 0xb, 0xfc, 0xf8, 0xf, 0xf0, 0x7, 0x3, 0xf4, 0xe0, 0x17, 0x13, 0xe4, 0x1b, 0xec, 0xe8, 0x1f, 0xc0, 0x37, 0x33, 0xc4, 0x3b, 0xcc, 0xc8, 0x3f, 0x2b, 0xdc, 0xd8, 0x2f, 0xd0, 0x27, 0x23, 0xd4, 0x80, 0x77, 0x73, 0x84, 0x7b, 0x8c, 0x88, 0x7f, 0x6b, 0x9c, 0x98, 0x6f, 0x90, 0x67, 0x63, 0x94, 0x4b, 0xbc, 0xb8, 0x4f, 0xb0, 0x47, 0x43, 0xb4, 0xa0, 0x57, 0x53, 0xa4, 0x5b, 0xac, 0xa8, 0x5f, 0x16, 0xe1, 0xe5, 0x12, 0xed, 0x1a, 0x1e, 0xe9, 0xfd, 0xa, 0xe, 0xf9, 0x6, 0xf1, 0xf5, 0x2, 0xdd, 0x2a, 0x2e, 0xd9, 0x26, 0xd1, 0xd5, 0x22, 0x36, 0xc1, 0xc5, 0x32, 0xcd, 0x3a, 0x3e, 0xc9, 0x9d, 0x6a, 0x6e, 0x99, 0x66, 0x91, 0x95, 0x62, 0x76, 0x81, 0x85, 0x72, 0x8d, 0x7a, 0x7e, 0x89, 0x56, 0xa1, 0xa5, 0x52, 0xad, 0x5a, 0x5e, 0xa9, 0xbd, 0x4a, 0x4e, 0xb9, 0x46, 0xb1, 0xb5, 0x42, 0x1d, 0xea, 0xee, 0x19, 0xe6, 0x11, 0x15, 0xe2, 0xf6, 0x1, 0x5, 0xf2, 0xd, 0xfa, 0xfe, 0x9, 0xd6, 0x21, 0x25, 0xd2, 0x2d, 0xda, 0xde, 0x29, 0x3d, 0xca, 0xce, 0x39, 0xc6, 0x31, 0x35, 0xc2, 0x96, 0x61, 0x65, 0x92, 0x6d, 0x9a, 0x9e, 0x69, 0x7d, 0x8a, 0x8e, 0x79, 0x86, 0x71, 0x75, 0x82, 0x5d, 0xaa, 0xae, 0x59, 0xa6, 0x51, 0x55, 0xa2, 0xb6, 0x41, 0x45, 0xb2, 0x4d, 0xba, 0xbe, 0x49}, + {0x0, 0xf8, 0xed, 0x15, 0xc7, 0x3f, 0x2a, 0xd2, 0x93, 0x6b, 0x7e, 0x86, 0x54, 0xac, 0xb9, 0x41, 0x3b, 0xc3, 0xd6, 0x2e, 0xfc, 0x4, 0x11, 0xe9, 0xa8, 0x50, 0x45, 0xbd, 0x6f, 0x97, 0x82, 0x7a, 0x76, 0x8e, 0x9b, 0x63, 0xb1, 0x49, 0x5c, 0xa4, 0xe5, 0x1d, 0x8, 0xf0, 0x22, 0xda, 0xcf, 0x37, 0x4d, 0xb5, 0xa0, 0x58, 0x8a, 0x72, 0x67, 0x9f, 0xde, 0x26, 0x33, 0xcb, 0x19, 0xe1, 0xf4, 0xc, 0xec, 0x14, 0x1, 0xf9, 0x2b, 0xd3, 0xc6, 0x3e, 0x7f, 0x87, 0x92, 0x6a, 0xb8, 0x40, 0x55, 0xad, 0xd7, 0x2f, 0x3a, 0xc2, 0x10, 0xe8, 0xfd, 0x5, 0x44, 0xbc, 0xa9, 0x51, 0x83, 0x7b, 0x6e, 0x96, 0x9a, 0x62, 0x77, 0x8f, 0x5d, 0xa5, 0xb0, 0x48, 0x9, 0xf1, 0xe4, 0x1c, 0xce, 0x36, 0x23, 0xdb, 0xa1, 0x59, 0x4c, 0xb4, 0x66, 0x9e, 0x8b, 0x73, 0x32, 0xca, 0xdf, 0x27, 0xf5, 0xd, 0x18, 0xe0, 0xc5, 0x3d, 0x28, 0xd0, 0x2, 0xfa, 0xef, 0x17, 0x56, 0xae, 0xbb, 0x43, 0x91, 0x69, 0x7c, 0x84, 0xfe, 0x6, 0x13, 0xeb, 0x39, 0xc1, 0xd4, 0x2c, 0x6d, 0x95, 0x80, 0x78, 0xaa, 0x52, 0x47, 0xbf, 0xb3, 0x4b, 0x5e, 0xa6, 0x74, 0x8c, 0x99, 0x61, 0x20, 0xd8, 0xcd, 0x35, 0xe7, 0x1f, 0xa, 0xf2, 0x88, 0x70, 0x65, 0x9d, 0x4f, 0xb7, 0xa2, 0x5a, 0x1b, 0xe3, 0xf6, 0xe, 0xdc, 0x24, 0x31, 0xc9, 0x29, 0xd1, 0xc4, 0x3c, 0xee, 0x16, 0x3, 0xfb, 0xba, 0x42, 0x57, 0xaf, 0x7d, 0x85, 0x90, 0x68, 0x12, 0xea, 0xff, 0x7, 0xd5, 0x2d, 0x38, 0xc0, 0x81, 0x79, 0x6c, 0x94, 0x46, 0xbe, 0xab, 0x53, 0x5f, 0xa7, 0xb2, 0x4a, 0x98, 0x60, 0x75, 0x8d, 0xcc, 0x34, 0x21, 0xd9, 0xb, 0xf3, 0xe6, 0x1e, 0x64, 0x9c, 0x89, 0x71, 0xa3, 0x5b, 0x4e, 0xb6, 0xf7, 0xf, 0x1a, 0xe2, 0x30, 0xc8, 0xdd, 0x25}, + {0x0, 0xf9, 0xef, 0x16, 0xc3, 0x3a, 0x2c, 0xd5, 0x9b, 0x62, 0x74, 0x8d, 0x58, 0xa1, 0xb7, 0x4e, 0x2b, 0xd2, 0xc4, 0x3d, 0xe8, 0x11, 0x7, 0xfe, 0xb0, 0x49, 0x5f, 0xa6, 0x73, 0x8a, 0x9c, 0x65, 0x56, 0xaf, 0xb9, 0x40, 0x95, 0x6c, 0x7a, 0x83, 0xcd, 0x34, 0x22, 0xdb, 0xe, 0xf7, 0xe1, 0x18, 0x7d, 0x84, 0x92, 0x6b, 0xbe, 0x47, 0x51, 0xa8, 0xe6, 0x1f, 0x9, 0xf0, 0x25, 0xdc, 0xca, 0x33, 0xac, 0x55, 0x43, 0xba, 0x6f, 0x96, 0x80, 0x79, 0x37, 0xce, 0xd8, 0x21, 0xf4, 0xd, 0x1b, 0xe2, 0x87, 0x7e, 0x68, 0x91, 0x44, 0xbd, 0xab, 0x52, 0x1c, 0xe5, 0xf3, 0xa, 0xdf, 0x26, 0x30, 0xc9, 0xfa, 0x3, 0x15, 0xec, 0x39, 0xc0, 0xd6, 0x2f, 0x61, 0x98, 0x8e, 0x77, 0xa2, 0x5b, 0x4d, 0xb4, 0xd1, 0x28, 0x3e, 0xc7, 0x12, 0xeb, 0xfd, 0x4, 0x4a, 0xb3, 0xa5, 0x5c, 0x89, 0x70, 0x66, 0x9f, 0x45, 0xbc, 0xaa, 0x53, 0x86, 0x7f, 0x69, 0x90, 0xde, 0x27, 0x31, 0xc8, 0x1d, 0xe4, 0xf2, 0xb, 0x6e, 0x97, 0x81, 0x78, 0xad, 0x54, 0x42, 0xbb, 0xf5, 0xc, 0x1a, 0xe3, 0x36, 0xcf, 0xd9, 0x20, 0x13, 0xea, 0xfc, 0x5, 0xd0, 0x29, 0x3f, 0xc6, 0x88, 0x71, 0x67, 0x9e, 0x4b, 0xb2, 0xa4, 0x5d, 0x38, 0xc1, 0xd7, 0x2e, 0xfb, 0x2, 0x14, 0xed, 0xa3, 0x5a, 0x4c, 0xb5, 0x60, 0x99, 0x8f, 0x76, 0xe9, 0x10, 0x6, 0xff, 0x2a, 0xd3, 0xc5, 0x3c, 0x72, 0x8b, 0x9d, 0x64, 0xb1, 0x48, 0x5e, 0xa7, 0xc2, 0x3b, 0x2d, 0xd4, 0x1, 0xf8, 0xee, 0x17, 0x59, 0xa0, 0xb6, 0x4f, 0x9a, 0x63, 0x75, 0x8c, 0xbf, 0x46, 0x50, 0xa9, 0x7c, 0x85, 0x93, 0x6a, 0x24, 0xdd, 0xcb, 0x32, 0xe7, 0x1e, 0x8, 0xf1, 0x94, 0x6d, 0x7b, 0x82, 0x57, 0xae, 0xb8, 0x41, 0xf, 0xf6, 0xe0, 0x19, 0xcc, 0x35, 0x23, 0xda}, + {0x0, 0xfa, 0xe9, 0x13, 0xcf, 0x35, 0x26, 0xdc, 0x83, 0x79, 0x6a, 0x90, 0x4c, 0xb6, 0xa5, 0x5f, 0x1b, 0xe1, 0xf2, 0x8, 0xd4, 0x2e, 0x3d, 0xc7, 0x98, 0x62, 0x71, 0x8b, 0x57, 0xad, 0xbe, 0x44, 0x36, 0xcc, 0xdf, 0x25, 0xf9, 0x3, 0x10, 0xea, 0xb5, 0x4f, 0x5c, 0xa6, 0x7a, 0x80, 0x93, 0x69, 0x2d, 0xd7, 0xc4, 0x3e, 0xe2, 0x18, 0xb, 0xf1, 0xae, 0x54, 0x47, 0xbd, 0x61, 0x9b, 0x88, 0x72, 0x6c, 0x96, 0x85, 0x7f, 0xa3, 0x59, 0x4a, 0xb0, 0xef, 0x15, 0x6, 0xfc, 0x20, 0xda, 0xc9, 0x33, 0x77, 0x8d, 0x9e, 0x64, 0xb8, 0x42, 0x51, 0xab, 0xf4, 0xe, 0x1d, 0xe7, 0x3b, 0xc1, 0xd2, 0x28, 0x5a, 0xa0, 0xb3, 0x49, 0x95, 0x6f, 0x7c, 0x86, 0xd9, 0x23, 0x30, 0xca, 0x16, 0xec, 0xff, 0x5, 0x41, 0xbb, 0xa8, 0x52, 0x8e, 0x74, 0x67, 0x9d, 0xc2, 0x38, 0x2b, 0xd1, 0xd, 0xf7, 0xe4, 0x1e, 0xd8, 0x22, 0x31, 0xcb, 0x17, 0xed, 0xfe, 0x4, 0x5b, 0xa1, 0xb2, 0x48, 0x94, 0x6e, 0x7d, 0x87, 0xc3, 0x39, 0x2a, 0xd0, 0xc, 0xf6, 0xe5, 0x1f, 0x40, 0xba, 0xa9, 0x53, 0x8f, 0x75, 0x66, 0x9c, 0xee, 0x14, 0x7, 0xfd, 0x21, 0xdb, 0xc8, 0x32, 0x6d, 0x97, 0x84, 0x7e, 0xa2, 0x58, 0x4b, 0xb1, 0xf5, 0xf, 0x1c, 0xe6, 0x3a, 0xc0, 0xd3, 0x29, 0x76, 0x8c, 0x9f, 0x65, 0xb9, 0x43, 0x50, 0xaa, 0xb4, 0x4e, 0x5d, 0xa7, 0x7b, 0x81, 0x92, 0x68, 0x37, 0xcd, 0xde, 0x24, 0xf8, 0x2, 0x11, 0xeb, 0xaf, 0x55, 0x46, 0xbc, 0x60, 0x9a, 0x89, 0x73, 0x2c, 0xd6, 0xc5, 0x3f, 0xe3, 0x19, 0xa, 0xf0, 0x82, 0x78, 0x6b, 0x91, 0x4d, 0xb7, 0xa4, 0x5e, 0x1, 0xfb, 0xe8, 0x12, 0xce, 0x34, 0x27, 0xdd, 0x99, 0x63, 0x70, 0x8a, 0x56, 0xac, 0xbf, 0x45, 0x1a, 0xe0, 0xf3, 0x9, 0xd5, 0x2f, 0x3c, 0xc6}, + {0x0, 0xfb, 0xeb, 0x10, 0xcb, 0x30, 0x20, 0xdb, 0x8b, 0x70, 0x60, 0x9b, 0x40, 0xbb, 0xab, 0x50, 0xb, 0xf0, 0xe0, 0x1b, 0xc0, 0x3b, 0x2b, 0xd0, 0x80, 0x7b, 0x6b, 0x90, 0x4b, 0xb0, 0xa0, 0x5b, 0x16, 0xed, 0xfd, 0x6, 0xdd, 0x26, 0x36, 0xcd, 0x9d, 0x66, 0x76, 0x8d, 0x56, 0xad, 0xbd, 0x46, 0x1d, 0xe6, 0xf6, 0xd, 0xd6, 0x2d, 0x3d, 0xc6, 0x96, 0x6d, 0x7d, 0x86, 0x5d, 0xa6, 0xb6, 0x4d, 0x2c, 0xd7, 0xc7, 0x3c, 0xe7, 0x1c, 0xc, 0xf7, 0xa7, 0x5c, 0x4c, 0xb7, 0x6c, 0x97, 0x87, 0x7c, 0x27, 0xdc, 0xcc, 0x37, 0xec, 0x17, 0x7, 0xfc, 0xac, 0x57, 0x47, 0xbc, 0x67, 0x9c, 0x8c, 0x77, 0x3a, 0xc1, 0xd1, 0x2a, 0xf1, 0xa, 0x1a, 0xe1, 0xb1, 0x4a, 0x5a, 0xa1, 0x7a, 0x81, 0x91, 0x6a, 0x31, 0xca, 0xda, 0x21, 0xfa, 0x1, 0x11, 0xea, 0xba, 0x41, 0x51, 0xaa, 0x71, 0x8a, 0x9a, 0x61, 0x58, 0xa3, 0xb3, 0x48, 0x93, 0x68, 0x78, 0x83, 0xd3, 0x28, 0x38, 0xc3, 0x18, 0xe3, 0xf3, 0x8, 0x53, 0xa8, 0xb8, 0x43, 0x98, 0x63, 0x73, 0x88, 0xd8, 0x23, 0x33, 0xc8, 0x13, 0xe8, 0xf8, 0x3, 0x4e, 0xb5, 0xa5, 0x5e, 0x85, 0x7e, 0x6e, 0x95, 0xc5, 0x3e, 0x2e, 0xd5, 0xe, 0xf5, 0xe5, 0x1e, 0x45, 0xbe, 0xae, 0x55, 0x8e, 0x75, 0x65, 0x9e, 0xce, 0x35, 0x25, 0xde, 0x5, 0xfe, 0xee, 0x15, 0x74, 0x8f, 0x9f, 0x64, 0xbf, 0x44, 0x54, 0xaf, 0xff, 0x4, 0x14, 0xef, 0x34, 0xcf, 0xdf, 0x24, 0x7f, 0x84, 0x94, 0x6f, 0xb4, 0x4f, 0x5f, 0xa4, 0xf4, 0xf, 0x1f, 0xe4, 0x3f, 0xc4, 0xd4, 0x2f, 0x62, 0x99, 0x89, 0x72, 0xa9, 0x52, 0x42, 0xb9, 0xe9, 0x12, 0x2, 0xf9, 0x22, 0xd9, 0xc9, 0x32, 0x69, 0x92, 0x82, 0x79, 0xa2, 0x59, 0x49, 0xb2, 0xe2, 0x19, 0x9, 0xf2, 0x29, 0xd2, 0xc2, 0x39}, + {0x0, 0xfc, 0xe5, 0x19, 0xd7, 0x2b, 0x32, 0xce, 0xb3, 0x4f, 0x56, 0xaa, 0x64, 0x98, 0x81, 0x7d, 0x7b, 0x87, 0x9e, 0x62, 0xac, 0x50, 0x49, 0xb5, 0xc8, 0x34, 0x2d, 0xd1, 0x1f, 0xe3, 0xfa, 0x6, 0xf6, 0xa, 0x13, 0xef, 0x21, 0xdd, 0xc4, 0x38, 0x45, 0xb9, 0xa0, 0x5c, 0x92, 0x6e, 0x77, 0x8b, 0x8d, 0x71, 0x68, 0x94, 0x5a, 0xa6, 0xbf, 0x43, 0x3e, 0xc2, 0xdb, 0x27, 0xe9, 0x15, 0xc, 0xf0, 0xf1, 0xd, 0x14, 0xe8, 0x26, 0xda, 0xc3, 0x3f, 0x42, 0xbe, 0xa7, 0x5b, 0x95, 0x69, 0x70, 0x8c, 0x8a, 0x76, 0x6f, 0x93, 0x5d, 0xa1, 0xb8, 0x44, 0x39, 0xc5, 0xdc, 0x20, 0xee, 0x12, 0xb, 0xf7, 0x7, 0xfb, 0xe2, 0x1e, 0xd0, 0x2c, 0x35, 0xc9, 0xb4, 0x48, 0x51, 0xad, 0x63, 0x9f, 0x86, 0x7a, 0x7c, 0x80, 0x99, 0x65, 0xab, 0x57, 0x4e, 0xb2, 0xcf, 0x33, 0x2a, 0xd6, 0x18, 0xe4, 0xfd, 0x1, 0xff, 0x3, 0x1a, 0xe6, 0x28, 0xd4, 0xcd, 0x31, 0x4c, 0xb0, 0xa9, 0x55, 0x9b, 0x67, 0x7e, 0x82, 0x84, 0x78, 0x61, 0x9d, 0x53, 0xaf, 0xb6, 0x4a, 0x37, 0xcb, 0xd2, 0x2e, 0xe0, 0x1c, 0x5, 0xf9, 0x9, 0xf5, 0xec, 0x10, 0xde, 0x22, 0x3b, 0xc7, 0xba, 0x46, 0x5f, 0xa3, 0x6d, 0x91, 0x88, 0x74, 0x72, 0x8e, 0x97, 0x6b, 0xa5, 0x59, 0x40, 0xbc, 0xc1, 0x3d, 0x24, 0xd8, 0x16, 0xea, 0xf3, 0xf, 0xe, 0xf2, 0xeb, 0x17, 0xd9, 0x25, 0x3c, 0xc0, 0xbd, 0x41, 0x58, 0xa4, 0x6a, 0x96, 0x8f, 0x73, 0x75, 0x89, 0x90, 0x6c, 0xa2, 0x5e, 0x47, 0xbb, 0xc6, 0x3a, 0x23, 0xdf, 0x11, 0xed, 0xf4, 0x8, 0xf8, 0x4, 0x1d, 0xe1, 0x2f, 0xd3, 0xca, 0x36, 0x4b, 0xb7, 0xae, 0x52, 0x9c, 0x60, 0x79, 0x85, 0x83, 0x7f, 0x66, 0x9a, 0x54, 0xa8, 0xb1, 0x4d, 0x30, 0xcc, 0xd5, 0x29, 0xe7, 0x1b, 0x2, 0xfe}, + {0x0, 0xfd, 0xe7, 0x1a, 0xd3, 0x2e, 0x34, 0xc9, 0xbb, 0x46, 0x5c, 0xa1, 0x68, 0x95, 0x8f, 0x72, 0x6b, 0x96, 0x8c, 0x71, 0xb8, 0x45, 0x5f, 0xa2, 0xd0, 0x2d, 0x37, 0xca, 0x3, 0xfe, 0xe4, 0x19, 0xd6, 0x2b, 0x31, 0xcc, 0x5, 0xf8, 0xe2, 0x1f, 0x6d, 0x90, 0x8a, 0x77, 0xbe, 0x43, 0x59, 0xa4, 0xbd, 0x40, 0x5a, 0xa7, 0x6e, 0x93, 0x89, 0x74, 0x6, 0xfb, 0xe1, 0x1c, 0xd5, 0x28, 0x32, 0xcf, 0xb1, 0x4c, 0x56, 0xab, 0x62, 0x9f, 0x85, 0x78, 0xa, 0xf7, 0xed, 0x10, 0xd9, 0x24, 0x3e, 0xc3, 0xda, 0x27, 0x3d, 0xc0, 0x9, 0xf4, 0xee, 0x13, 0x61, 0x9c, 0x86, 0x7b, 0xb2, 0x4f, 0x55, 0xa8, 0x67, 0x9a, 0x80, 0x7d, 0xb4, 0x49, 0x53, 0xae, 0xdc, 0x21, 0x3b, 0xc6, 0xf, 0xf2, 0xe8, 0x15, 0xc, 0xf1, 0xeb, 0x16, 0xdf, 0x22, 0x38, 0xc5, 0xb7, 0x4a, 0x50, 0xad, 0x64, 0x99, 0x83, 0x7e, 0x7f, 0x82, 0x98, 0x65, 0xac, 0x51, 0x4b, 0xb6, 0xc4, 0x39, 0x23, 0xde, 0x17, 0xea, 0xf0, 0xd, 0x14, 0xe9, 0xf3, 0xe, 0xc7, 0x3a, 0x20, 0xdd, 0xaf, 0x52, 0x48, 0xb5, 0x7c, 0x81, 0x9b, 0x66, 0xa9, 0x54, 0x4e, 0xb3, 0x7a, 0x87, 0x9d, 0x60, 0x12, 0xef, 0xf5, 0x8, 0xc1, 0x3c, 0x26, 0xdb, 0xc2, 0x3f, 0x25, 0xd8, 0x11, 0xec, 0xf6, 0xb, 0x79, 0x84, 0x9e, 0x63, 0xaa, 0x57, 0x4d, 0xb0, 0xce, 0x33, 0x29, 0xd4, 0x1d, 0xe0, 0xfa, 0x7, 0x75, 0x88, 0x92, 0x6f, 0xa6, 0x5b, 0x41, 0xbc, 0xa5, 0x58, 0x42, 0xbf, 0x76, 0x8b, 0x91, 0x6c, 0x1e, 0xe3, 0xf9, 0x4, 0xcd, 0x30, 0x2a, 0xd7, 0x18, 0xe5, 0xff, 0x2, 0xcb, 0x36, 0x2c, 0xd1, 0xa3, 0x5e, 0x44, 0xb9, 0x70, 0x8d, 0x97, 0x6a, 0x73, 0x8e, 0x94, 0x69, 0xa0, 0x5d, 0x47, 0xba, 0xc8, 0x35, 0x2f, 0xd2, 0x1b, 0xe6, 0xfc, 0x1}, + {0x0, 0xfe, 0xe1, 0x1f, 0xdf, 0x21, 0x3e, 0xc0, 0xa3, 0x5d, 0x42, 0xbc, 0x7c, 0x82, 0x9d, 0x63, 0x5b, 0xa5, 0xba, 0x44, 0x84, 0x7a, 0x65, 0x9b, 0xf8, 0x6, 0x19, 0xe7, 0x27, 0xd9, 0xc6, 0x38, 0xb6, 0x48, 0x57, 0xa9, 0x69, 0x97, 0x88, 0x76, 0x15, 0xeb, 0xf4, 0xa, 0xca, 0x34, 0x2b, 0xd5, 0xed, 0x13, 0xc, 0xf2, 0x32, 0xcc, 0xd3, 0x2d, 0x4e, 0xb0, 0xaf, 0x51, 0x91, 0x6f, 0x70, 0x8e, 0x71, 0x8f, 0x90, 0x6e, 0xae, 0x50, 0x4f, 0xb1, 0xd2, 0x2c, 0x33, 0xcd, 0xd, 0xf3, 0xec, 0x12, 0x2a, 0xd4, 0xcb, 0x35, 0xf5, 0xb, 0x14, 0xea, 0x89, 0x77, 0x68, 0x96, 0x56, 0xa8, 0xb7, 0x49, 0xc7, 0x39, 0x26, 0xd8, 0x18, 0xe6, 0xf9, 0x7, 0x64, 0x9a, 0x85, 0x7b, 0xbb, 0x45, 0x5a, 0xa4, 0x9c, 0x62, 0x7d, 0x83, 0x43, 0xbd, 0xa2, 0x5c, 0x3f, 0xc1, 0xde, 0x20, 0xe0, 0x1e, 0x1, 0xff, 0xe2, 0x1c, 0x3, 0xfd, 0x3d, 0xc3, 0xdc, 0x22, 0x41, 0xbf, 0xa0, 0x5e, 0x9e, 0x60, 0x7f, 0x81, 0xb9, 0x47, 0x58, 0xa6, 0x66, 0x98, 0x87, 0x79, 0x1a, 0xe4, 0xfb, 0x5, 0xc5, 0x3b, 0x24, 0xda, 0x54, 0xaa, 0xb5, 0x4b, 0x8b, 0x75, 0x6a, 0x94, 0xf7, 0x9, 0x16, 0xe8, 0x28, 0xd6, 0xc9, 0x37, 0xf, 0xf1, 0xee, 0x10, 0xd0, 0x2e, 0x31, 0xcf, 0xac, 0x52, 0x4d, 0xb3, 0x73, 0x8d, 0x92, 0x6c, 0x93, 0x6d, 0x72, 0x8c, 0x4c, 0xb2, 0xad, 0x53, 0x30, 0xce, 0xd1, 0x2f, 0xef, 0x11, 0xe, 0xf0, 0xc8, 0x36, 0x29, 0xd7, 0x17, 0xe9, 0xf6, 0x8, 0x6b, 0x95, 0x8a, 0x74, 0xb4, 0x4a, 0x55, 0xab, 0x25, 0xdb, 0xc4, 0x3a, 0xfa, 0x4, 0x1b, 0xe5, 0x86, 0x78, 0x67, 0x99, 0x59, 0xa7, 0xb8, 0x46, 0x7e, 0x80, 0x9f, 0x61, 0xa1, 0x5f, 0x40, 0xbe, 0xdd, 0x23, 0x3c, 0xc2, 0x2, 0xfc, 0xe3, 0x1d}, + {0x0, 0xff, 0xe3, 0x1c, 0xdb, 0x24, 0x38, 0xc7, 0xab, 0x54, 0x48, 0xb7, 0x70, 0x8f, 0x93, 0x6c, 0x4b, 0xb4, 0xa8, 0x57, 0x90, 0x6f, 0x73, 0x8c, 0xe0, 0x1f, 0x3, 0xfc, 0x3b, 0xc4, 0xd8, 0x27, 0x96, 0x69, 0x75, 0x8a, 0x4d, 0xb2, 0xae, 0x51, 0x3d, 0xc2, 0xde, 0x21, 0xe6, 0x19, 0x5, 0xfa, 0xdd, 0x22, 0x3e, 0xc1, 0x6, 0xf9, 0xe5, 0x1a, 0x76, 0x89, 0x95, 0x6a, 0xad, 0x52, 0x4e, 0xb1, 0x31, 0xce, 0xd2, 0x2d, 0xea, 0x15, 0x9, 0xf6, 0x9a, 0x65, 0x79, 0x86, 0x41, 0xbe, 0xa2, 0x5d, 0x7a, 0x85, 0x99, 0x66, 0xa1, 0x5e, 0x42, 0xbd, 0xd1, 0x2e, 0x32, 0xcd, 0xa, 0xf5, 0xe9, 0x16, 0xa7, 0x58, 0x44, 0xbb, 0x7c, 0x83, 0x9f, 0x60, 0xc, 0xf3, 0xef, 0x10, 0xd7, 0x28, 0x34, 0xcb, 0xec, 0x13, 0xf, 0xf0, 0x37, 0xc8, 0xd4, 0x2b, 0x47, 0xb8, 0xa4, 0x5b, 0x9c, 0x63, 0x7f, 0x80, 0x62, 0x9d, 0x81, 0x7e, 0xb9, 0x46, 0x5a, 0xa5, 0xc9, 0x36, 0x2a, 0xd5, 0x12, 0xed, 0xf1, 0xe, 0x29, 0xd6, 0xca, 0x35, 0xf2, 0xd, 0x11, 0xee, 0x82, 0x7d, 0x61, 0x9e, 0x59, 0xa6, 0xba, 0x45, 0xf4, 0xb, 0x17, 0xe8, 0x2f, 0xd0, 0xcc, 0x33, 0x5f, 0xa0, 0xbc, 0x43, 0x84, 0x7b, 0x67, 0x98, 0xbf, 0x40, 0x5c, 0xa3, 0x64, 0x9b, 0x87, 0x78, 0x14, 0xeb, 0xf7, 0x8, 0xcf, 0x30, 0x2c, 0xd3, 0x53, 0xac, 0xb0, 0x4f, 0x88, 0x77, 0x6b, 0x94, 0xf8, 0x7, 0x1b, 0xe4, 0x23, 0xdc, 0xc0, 0x3f, 0x18, 0xe7, 0xfb, 0x4, 0xc3, 0x3c, 0x20, 0xdf, 0xb3, 0x4c, 0x50, 0xaf, 0x68, 0x97, 0x8b, 0x74, 0xc5, 0x3a, 0x26, 0xd9, 0x1e, 0xe1, 0xfd, 0x2, 0x6e, 0x91, 0x8d, 0x72, 0xb5, 0x4a, 0x56, 0xa9, 0x8e, 0x71, 0x6d, 0x92, 0x55, 0xaa, 0xb6, 0x49, 0x25, 0xda, 0xc6, 0x39, 0xfe, 0x1, 0x1d, 0xe2}} + +var mulTableLow = [256][16]uint8{{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, + {0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf}, + {0x0, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e}, + {0x0, 0x3, 0x6, 0x5, 0xc, 0xf, 0xa, 0x9, 0x18, 0x1b, 0x1e, 0x1d, 0x14, 0x17, 0x12, 0x11}, + {0x0, 0x4, 0x8, 0xc, 0x10, 0x14, 0x18, 0x1c, 0x20, 0x24, 0x28, 0x2c, 0x30, 0x34, 0x38, 0x3c}, + {0x0, 0x5, 0xa, 0xf, 0x14, 0x11, 0x1e, 0x1b, 0x28, 0x2d, 0x22, 0x27, 0x3c, 0x39, 0x36, 0x33}, + {0x0, 0x6, 0xc, 0xa, 0x18, 0x1e, 0x14, 0x12, 0x30, 0x36, 0x3c, 0x3a, 0x28, 0x2e, 0x24, 0x22}, + {0x0, 0x7, 0xe, 0x9, 0x1c, 0x1b, 0x12, 0x15, 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d}, + {0x0, 0x8, 0x10, 0x18, 0x20, 0x28, 0x30, 0x38, 0x40, 0x48, 0x50, 0x58, 0x60, 0x68, 0x70, 0x78}, + {0x0, 0x9, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77}, + {0x0, 0xa, 0x14, 0x1e, 0x28, 0x22, 0x3c, 0x36, 0x50, 0x5a, 0x44, 0x4e, 0x78, 0x72, 0x6c, 0x66}, + {0x0, 0xb, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69}, + {0x0, 0xc, 0x18, 0x14, 0x30, 0x3c, 0x28, 0x24, 0x60, 0x6c, 0x78, 0x74, 0x50, 0x5c, 0x48, 0x44}, + {0x0, 0xd, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b}, + {0x0, 0xe, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a}, + {0x0, 0xf, 0x1e, 0x11, 0x3c, 0x33, 0x22, 0x2d, 0x78, 0x77, 0x66, 0x69, 0x44, 0x4b, 0x5a, 0x55}, + {0x0, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0}, + {0x0, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff}, + {0x0, 0x12, 0x24, 0x36, 0x48, 0x5a, 0x6c, 0x7e, 0x90, 0x82, 0xb4, 0xa6, 0xd8, 0xca, 0xfc, 0xee}, + {0x0, 0x13, 0x26, 0x35, 0x4c, 0x5f, 0x6a, 0x79, 0x98, 0x8b, 0xbe, 0xad, 0xd4, 0xc7, 0xf2, 0xe1}, + {0x0, 0x14, 0x28, 0x3c, 0x50, 0x44, 0x78, 0x6c, 0xa0, 0xb4, 0x88, 0x9c, 0xf0, 0xe4, 0xd8, 0xcc}, + {0x0, 0x15, 0x2a, 0x3f, 0x54, 0x41, 0x7e, 0x6b, 0xa8, 0xbd, 0x82, 0x97, 0xfc, 0xe9, 0xd6, 0xc3}, + {0x0, 0x16, 0x2c, 0x3a, 0x58, 0x4e, 0x74, 0x62, 0xb0, 0xa6, 0x9c, 0x8a, 0xe8, 0xfe, 0xc4, 0xd2}, + {0x0, 0x17, 0x2e, 0x39, 0x5c, 0x4b, 0x72, 0x65, 0xb8, 0xaf, 0x96, 0x81, 0xe4, 0xf3, 0xca, 0xdd}, + {0x0, 0x18, 0x30, 0x28, 0x60, 0x78, 0x50, 0x48, 0xc0, 0xd8, 0xf0, 0xe8, 0xa0, 0xb8, 0x90, 0x88}, + {0x0, 0x19, 0x32, 0x2b, 0x64, 0x7d, 0x56, 0x4f, 0xc8, 0xd1, 0xfa, 0xe3, 0xac, 0xb5, 0x9e, 0x87}, + {0x0, 0x1a, 0x34, 0x2e, 0x68, 0x72, 0x5c, 0x46, 0xd0, 0xca, 0xe4, 0xfe, 0xb8, 0xa2, 0x8c, 0x96}, + {0x0, 0x1b, 0x36, 0x2d, 0x6c, 0x77, 0x5a, 0x41, 0xd8, 0xc3, 0xee, 0xf5, 0xb4, 0xaf, 0x82, 0x99}, + {0x0, 0x1c, 0x38, 0x24, 0x70, 0x6c, 0x48, 0x54, 0xe0, 0xfc, 0xd8, 0xc4, 0x90, 0x8c, 0xa8, 0xb4}, + {0x0, 0x1d, 0x3a, 0x27, 0x74, 0x69, 0x4e, 0x53, 0xe8, 0xf5, 0xd2, 0xcf, 0x9c, 0x81, 0xa6, 0xbb}, + {0x0, 0x1e, 0x3c, 0x22, 0x78, 0x66, 0x44, 0x5a, 0xf0, 0xee, 0xcc, 0xd2, 0x88, 0x96, 0xb4, 0xaa}, + {0x0, 0x1f, 0x3e, 0x21, 0x7c, 0x63, 0x42, 0x5d, 0xf8, 0xe7, 0xc6, 0xd9, 0x84, 0x9b, 0xba, 0xa5}, + {0x0, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, 0x1d, 0x3d, 0x5d, 0x7d, 0x9d, 0xbd, 0xdd, 0xfd}, + {0x0, 0x21, 0x42, 0x63, 0x84, 0xa5, 0xc6, 0xe7, 0x15, 0x34, 0x57, 0x76, 0x91, 0xb0, 0xd3, 0xf2}, + {0x0, 0x22, 0x44, 0x66, 0x88, 0xaa, 0xcc, 0xee, 0xd, 0x2f, 0x49, 0x6b, 0x85, 0xa7, 0xc1, 0xe3}, + {0x0, 0x23, 0x46, 0x65, 0x8c, 0xaf, 0xca, 0xe9, 0x5, 0x26, 0x43, 0x60, 0x89, 0xaa, 0xcf, 0xec}, + {0x0, 0x24, 0x48, 0x6c, 0x90, 0xb4, 0xd8, 0xfc, 0x3d, 0x19, 0x75, 0x51, 0xad, 0x89, 0xe5, 0xc1}, + {0x0, 0x25, 0x4a, 0x6f, 0x94, 0xb1, 0xde, 0xfb, 0x35, 0x10, 0x7f, 0x5a, 0xa1, 0x84, 0xeb, 0xce}, + {0x0, 0x26, 0x4c, 0x6a, 0x98, 0xbe, 0xd4, 0xf2, 0x2d, 0xb, 0x61, 0x47, 0xb5, 0x93, 0xf9, 0xdf}, + {0x0, 0x27, 0x4e, 0x69, 0x9c, 0xbb, 0xd2, 0xf5, 0x25, 0x2, 0x6b, 0x4c, 0xb9, 0x9e, 0xf7, 0xd0}, + {0x0, 0x28, 0x50, 0x78, 0xa0, 0x88, 0xf0, 0xd8, 0x5d, 0x75, 0xd, 0x25, 0xfd, 0xd5, 0xad, 0x85}, + {0x0, 0x29, 0x52, 0x7b, 0xa4, 0x8d, 0xf6, 0xdf, 0x55, 0x7c, 0x7, 0x2e, 0xf1, 0xd8, 0xa3, 0x8a}, + {0x0, 0x2a, 0x54, 0x7e, 0xa8, 0x82, 0xfc, 0xd6, 0x4d, 0x67, 0x19, 0x33, 0xe5, 0xcf, 0xb1, 0x9b}, + {0x0, 0x2b, 0x56, 0x7d, 0xac, 0x87, 0xfa, 0xd1, 0x45, 0x6e, 0x13, 0x38, 0xe9, 0xc2, 0xbf, 0x94}, + {0x0, 0x2c, 0x58, 0x74, 0xb0, 0x9c, 0xe8, 0xc4, 0x7d, 0x51, 0x25, 0x9, 0xcd, 0xe1, 0x95, 0xb9}, + {0x0, 0x2d, 0x5a, 0x77, 0xb4, 0x99, 0xee, 0xc3, 0x75, 0x58, 0x2f, 0x2, 0xc1, 0xec, 0x9b, 0xb6}, + {0x0, 0x2e, 0x5c, 0x72, 0xb8, 0x96, 0xe4, 0xca, 0x6d, 0x43, 0x31, 0x1f, 0xd5, 0xfb, 0x89, 0xa7}, + {0x0, 0x2f, 0x5e, 0x71, 0xbc, 0x93, 0xe2, 0xcd, 0x65, 0x4a, 0x3b, 0x14, 0xd9, 0xf6, 0x87, 0xa8}, + {0x0, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, 0x9d, 0xad, 0xfd, 0xcd, 0x5d, 0x6d, 0x3d, 0xd}, + {0x0, 0x31, 0x62, 0x53, 0xc4, 0xf5, 0xa6, 0x97, 0x95, 0xa4, 0xf7, 0xc6, 0x51, 0x60, 0x33, 0x2}, + {0x0, 0x32, 0x64, 0x56, 0xc8, 0xfa, 0xac, 0x9e, 0x8d, 0xbf, 0xe9, 0xdb, 0x45, 0x77, 0x21, 0x13}, + {0x0, 0x33, 0x66, 0x55, 0xcc, 0xff, 0xaa, 0x99, 0x85, 0xb6, 0xe3, 0xd0, 0x49, 0x7a, 0x2f, 0x1c}, + {0x0, 0x34, 0x68, 0x5c, 0xd0, 0xe4, 0xb8, 0x8c, 0xbd, 0x89, 0xd5, 0xe1, 0x6d, 0x59, 0x5, 0x31}, + {0x0, 0x35, 0x6a, 0x5f, 0xd4, 0xe1, 0xbe, 0x8b, 0xb5, 0x80, 0xdf, 0xea, 0x61, 0x54, 0xb, 0x3e}, + {0x0, 0x36, 0x6c, 0x5a, 0xd8, 0xee, 0xb4, 0x82, 0xad, 0x9b, 0xc1, 0xf7, 0x75, 0x43, 0x19, 0x2f}, + {0x0, 0x37, 0x6e, 0x59, 0xdc, 0xeb, 0xb2, 0x85, 0xa5, 0x92, 0xcb, 0xfc, 0x79, 0x4e, 0x17, 0x20}, + {0x0, 0x38, 0x70, 0x48, 0xe0, 0xd8, 0x90, 0xa8, 0xdd, 0xe5, 0xad, 0x95, 0x3d, 0x5, 0x4d, 0x75}, + {0x0, 0x39, 0x72, 0x4b, 0xe4, 0xdd, 0x96, 0xaf, 0xd5, 0xec, 0xa7, 0x9e, 0x31, 0x8, 0x43, 0x7a}, + {0x0, 0x3a, 0x74, 0x4e, 0xe8, 0xd2, 0x9c, 0xa6, 0xcd, 0xf7, 0xb9, 0x83, 0x25, 0x1f, 0x51, 0x6b}, + {0x0, 0x3b, 0x76, 0x4d, 0xec, 0xd7, 0x9a, 0xa1, 0xc5, 0xfe, 0xb3, 0x88, 0x29, 0x12, 0x5f, 0x64}, + {0x0, 0x3c, 0x78, 0x44, 0xf0, 0xcc, 0x88, 0xb4, 0xfd, 0xc1, 0x85, 0xb9, 0xd, 0x31, 0x75, 0x49}, + {0x0, 0x3d, 0x7a, 0x47, 0xf4, 0xc9, 0x8e, 0xb3, 0xf5, 0xc8, 0x8f, 0xb2, 0x1, 0x3c, 0x7b, 0x46}, + {0x0, 0x3e, 0x7c, 0x42, 0xf8, 0xc6, 0x84, 0xba, 0xed, 0xd3, 0x91, 0xaf, 0x15, 0x2b, 0x69, 0x57}, + {0x0, 0x3f, 0x7e, 0x41, 0xfc, 0xc3, 0x82, 0xbd, 0xe5, 0xda, 0x9b, 0xa4, 0x19, 0x26, 0x67, 0x58}, + {0x0, 0x40, 0x80, 0xc0, 0x1d, 0x5d, 0x9d, 0xdd, 0x3a, 0x7a, 0xba, 0xfa, 0x27, 0x67, 0xa7, 0xe7}, + {0x0, 0x41, 0x82, 0xc3, 0x19, 0x58, 0x9b, 0xda, 0x32, 0x73, 0xb0, 0xf1, 0x2b, 0x6a, 0xa9, 0xe8}, + {0x0, 0x42, 0x84, 0xc6, 0x15, 0x57, 0x91, 0xd3, 0x2a, 0x68, 0xae, 0xec, 0x3f, 0x7d, 0xbb, 0xf9}, + {0x0, 0x43, 0x86, 0xc5, 0x11, 0x52, 0x97, 0xd4, 0x22, 0x61, 0xa4, 0xe7, 0x33, 0x70, 0xb5, 0xf6}, + {0x0, 0x44, 0x88, 0xcc, 0xd, 0x49, 0x85, 0xc1, 0x1a, 0x5e, 0x92, 0xd6, 0x17, 0x53, 0x9f, 0xdb}, + {0x0, 0x45, 0x8a, 0xcf, 0x9, 0x4c, 0x83, 0xc6, 0x12, 0x57, 0x98, 0xdd, 0x1b, 0x5e, 0x91, 0xd4}, + {0x0, 0x46, 0x8c, 0xca, 0x5, 0x43, 0x89, 0xcf, 0xa, 0x4c, 0x86, 0xc0, 0xf, 0x49, 0x83, 0xc5}, + {0x0, 0x47, 0x8e, 0xc9, 0x1, 0x46, 0x8f, 0xc8, 0x2, 0x45, 0x8c, 0xcb, 0x3, 0x44, 0x8d, 0xca}, + {0x0, 0x48, 0x90, 0xd8, 0x3d, 0x75, 0xad, 0xe5, 0x7a, 0x32, 0xea, 0xa2, 0x47, 0xf, 0xd7, 0x9f}, + {0x0, 0x49, 0x92, 0xdb, 0x39, 0x70, 0xab, 0xe2, 0x72, 0x3b, 0xe0, 0xa9, 0x4b, 0x2, 0xd9, 0x90}, + {0x0, 0x4a, 0x94, 0xde, 0x35, 0x7f, 0xa1, 0xeb, 0x6a, 0x20, 0xfe, 0xb4, 0x5f, 0x15, 0xcb, 0x81}, + {0x0, 0x4b, 0x96, 0xdd, 0x31, 0x7a, 0xa7, 0xec, 0x62, 0x29, 0xf4, 0xbf, 0x53, 0x18, 0xc5, 0x8e}, + {0x0, 0x4c, 0x98, 0xd4, 0x2d, 0x61, 0xb5, 0xf9, 0x5a, 0x16, 0xc2, 0x8e, 0x77, 0x3b, 0xef, 0xa3}, + {0x0, 0x4d, 0x9a, 0xd7, 0x29, 0x64, 0xb3, 0xfe, 0x52, 0x1f, 0xc8, 0x85, 0x7b, 0x36, 0xe1, 0xac}, + {0x0, 0x4e, 0x9c, 0xd2, 0x25, 0x6b, 0xb9, 0xf7, 0x4a, 0x4, 0xd6, 0x98, 0x6f, 0x21, 0xf3, 0xbd}, + {0x0, 0x4f, 0x9e, 0xd1, 0x21, 0x6e, 0xbf, 0xf0, 0x42, 0xd, 0xdc, 0x93, 0x63, 0x2c, 0xfd, 0xb2}, + {0x0, 0x50, 0xa0, 0xf0, 0x5d, 0xd, 0xfd, 0xad, 0xba, 0xea, 0x1a, 0x4a, 0xe7, 0xb7, 0x47, 0x17}, + {0x0, 0x51, 0xa2, 0xf3, 0x59, 0x8, 0xfb, 0xaa, 0xb2, 0xe3, 0x10, 0x41, 0xeb, 0xba, 0x49, 0x18}, + {0x0, 0x52, 0xa4, 0xf6, 0x55, 0x7, 0xf1, 0xa3, 0xaa, 0xf8, 0xe, 0x5c, 0xff, 0xad, 0x5b, 0x9}, + {0x0, 0x53, 0xa6, 0xf5, 0x51, 0x2, 0xf7, 0xa4, 0xa2, 0xf1, 0x4, 0x57, 0xf3, 0xa0, 0x55, 0x6}, + {0x0, 0x54, 0xa8, 0xfc, 0x4d, 0x19, 0xe5, 0xb1, 0x9a, 0xce, 0x32, 0x66, 0xd7, 0x83, 0x7f, 0x2b}, + {0x0, 0x55, 0xaa, 0xff, 0x49, 0x1c, 0xe3, 0xb6, 0x92, 0xc7, 0x38, 0x6d, 0xdb, 0x8e, 0x71, 0x24}, + {0x0, 0x56, 0xac, 0xfa, 0x45, 0x13, 0xe9, 0xbf, 0x8a, 0xdc, 0x26, 0x70, 0xcf, 0x99, 0x63, 0x35}, + {0x0, 0x57, 0xae, 0xf9, 0x41, 0x16, 0xef, 0xb8, 0x82, 0xd5, 0x2c, 0x7b, 0xc3, 0x94, 0x6d, 0x3a}, + {0x0, 0x58, 0xb0, 0xe8, 0x7d, 0x25, 0xcd, 0x95, 0xfa, 0xa2, 0x4a, 0x12, 0x87, 0xdf, 0x37, 0x6f}, + {0x0, 0x59, 0xb2, 0xeb, 0x79, 0x20, 0xcb, 0x92, 0xf2, 0xab, 0x40, 0x19, 0x8b, 0xd2, 0x39, 0x60}, + {0x0, 0x5a, 0xb4, 0xee, 0x75, 0x2f, 0xc1, 0x9b, 0xea, 0xb0, 0x5e, 0x4, 0x9f, 0xc5, 0x2b, 0x71}, + {0x0, 0x5b, 0xb6, 0xed, 0x71, 0x2a, 0xc7, 0x9c, 0xe2, 0xb9, 0x54, 0xf, 0x93, 0xc8, 0x25, 0x7e}, + {0x0, 0x5c, 0xb8, 0xe4, 0x6d, 0x31, 0xd5, 0x89, 0xda, 0x86, 0x62, 0x3e, 0xb7, 0xeb, 0xf, 0x53}, + {0x0, 0x5d, 0xba, 0xe7, 0x69, 0x34, 0xd3, 0x8e, 0xd2, 0x8f, 0x68, 0x35, 0xbb, 0xe6, 0x1, 0x5c}, + {0x0, 0x5e, 0xbc, 0xe2, 0x65, 0x3b, 0xd9, 0x87, 0xca, 0x94, 0x76, 0x28, 0xaf, 0xf1, 0x13, 0x4d}, + {0x0, 0x5f, 0xbe, 0xe1, 0x61, 0x3e, 0xdf, 0x80, 0xc2, 0x9d, 0x7c, 0x23, 0xa3, 0xfc, 0x1d, 0x42}, + {0x0, 0x60, 0xc0, 0xa0, 0x9d, 0xfd, 0x5d, 0x3d, 0x27, 0x47, 0xe7, 0x87, 0xba, 0xda, 0x7a, 0x1a}, + {0x0, 0x61, 0xc2, 0xa3, 0x99, 0xf8, 0x5b, 0x3a, 0x2f, 0x4e, 0xed, 0x8c, 0xb6, 0xd7, 0x74, 0x15}, + {0x0, 0x62, 0xc4, 0xa6, 0x95, 0xf7, 0x51, 0x33, 0x37, 0x55, 0xf3, 0x91, 0xa2, 0xc0, 0x66, 0x4}, + {0x0, 0x63, 0xc6, 0xa5, 0x91, 0xf2, 0x57, 0x34, 0x3f, 0x5c, 0xf9, 0x9a, 0xae, 0xcd, 0x68, 0xb}, + {0x0, 0x64, 0xc8, 0xac, 0x8d, 0xe9, 0x45, 0x21, 0x7, 0x63, 0xcf, 0xab, 0x8a, 0xee, 0x42, 0x26}, + {0x0, 0x65, 0xca, 0xaf, 0x89, 0xec, 0x43, 0x26, 0xf, 0x6a, 0xc5, 0xa0, 0x86, 0xe3, 0x4c, 0x29}, + {0x0, 0x66, 0xcc, 0xaa, 0x85, 0xe3, 0x49, 0x2f, 0x17, 0x71, 0xdb, 0xbd, 0x92, 0xf4, 0x5e, 0x38}, + {0x0, 0x67, 0xce, 0xa9, 0x81, 0xe6, 0x4f, 0x28, 0x1f, 0x78, 0xd1, 0xb6, 0x9e, 0xf9, 0x50, 0x37}, + {0x0, 0x68, 0xd0, 0xb8, 0xbd, 0xd5, 0x6d, 0x5, 0x67, 0xf, 0xb7, 0xdf, 0xda, 0xb2, 0xa, 0x62}, + {0x0, 0x69, 0xd2, 0xbb, 0xb9, 0xd0, 0x6b, 0x2, 0x6f, 0x6, 0xbd, 0xd4, 0xd6, 0xbf, 0x4, 0x6d}, + {0x0, 0x6a, 0xd4, 0xbe, 0xb5, 0xdf, 0x61, 0xb, 0x77, 0x1d, 0xa3, 0xc9, 0xc2, 0xa8, 0x16, 0x7c}, + {0x0, 0x6b, 0xd6, 0xbd, 0xb1, 0xda, 0x67, 0xc, 0x7f, 0x14, 0xa9, 0xc2, 0xce, 0xa5, 0x18, 0x73}, + {0x0, 0x6c, 0xd8, 0xb4, 0xad, 0xc1, 0x75, 0x19, 0x47, 0x2b, 0x9f, 0xf3, 0xea, 0x86, 0x32, 0x5e}, + {0x0, 0x6d, 0xda, 0xb7, 0xa9, 0xc4, 0x73, 0x1e, 0x4f, 0x22, 0x95, 0xf8, 0xe6, 0x8b, 0x3c, 0x51}, + {0x0, 0x6e, 0xdc, 0xb2, 0xa5, 0xcb, 0x79, 0x17, 0x57, 0x39, 0x8b, 0xe5, 0xf2, 0x9c, 0x2e, 0x40}, + {0x0, 0x6f, 0xde, 0xb1, 0xa1, 0xce, 0x7f, 0x10, 0x5f, 0x30, 0x81, 0xee, 0xfe, 0x91, 0x20, 0x4f}, + {0x0, 0x70, 0xe0, 0x90, 0xdd, 0xad, 0x3d, 0x4d, 0xa7, 0xd7, 0x47, 0x37, 0x7a, 0xa, 0x9a, 0xea}, + {0x0, 0x71, 0xe2, 0x93, 0xd9, 0xa8, 0x3b, 0x4a, 0xaf, 0xde, 0x4d, 0x3c, 0x76, 0x7, 0x94, 0xe5}, + {0x0, 0x72, 0xe4, 0x96, 0xd5, 0xa7, 0x31, 0x43, 0xb7, 0xc5, 0x53, 0x21, 0x62, 0x10, 0x86, 0xf4}, + {0x0, 0x73, 0xe6, 0x95, 0xd1, 0xa2, 0x37, 0x44, 0xbf, 0xcc, 0x59, 0x2a, 0x6e, 0x1d, 0x88, 0xfb}, + {0x0, 0x74, 0xe8, 0x9c, 0xcd, 0xb9, 0x25, 0x51, 0x87, 0xf3, 0x6f, 0x1b, 0x4a, 0x3e, 0xa2, 0xd6}, + {0x0, 0x75, 0xea, 0x9f, 0xc9, 0xbc, 0x23, 0x56, 0x8f, 0xfa, 0x65, 0x10, 0x46, 0x33, 0xac, 0xd9}, + {0x0, 0x76, 0xec, 0x9a, 0xc5, 0xb3, 0x29, 0x5f, 0x97, 0xe1, 0x7b, 0xd, 0x52, 0x24, 0xbe, 0xc8}, + {0x0, 0x77, 0xee, 0x99, 0xc1, 0xb6, 0x2f, 0x58, 0x9f, 0xe8, 0x71, 0x6, 0x5e, 0x29, 0xb0, 0xc7}, + {0x0, 0x78, 0xf0, 0x88, 0xfd, 0x85, 0xd, 0x75, 0xe7, 0x9f, 0x17, 0x6f, 0x1a, 0x62, 0xea, 0x92}, + {0x0, 0x79, 0xf2, 0x8b, 0xf9, 0x80, 0xb, 0x72, 0xef, 0x96, 0x1d, 0x64, 0x16, 0x6f, 0xe4, 0x9d}, + {0x0, 0x7a, 0xf4, 0x8e, 0xf5, 0x8f, 0x1, 0x7b, 0xf7, 0x8d, 0x3, 0x79, 0x2, 0x78, 0xf6, 0x8c}, + {0x0, 0x7b, 0xf6, 0x8d, 0xf1, 0x8a, 0x7, 0x7c, 0xff, 0x84, 0x9, 0x72, 0xe, 0x75, 0xf8, 0x83}, + {0x0, 0x7c, 0xf8, 0x84, 0xed, 0x91, 0x15, 0x69, 0xc7, 0xbb, 0x3f, 0x43, 0x2a, 0x56, 0xd2, 0xae}, + {0x0, 0x7d, 0xfa, 0x87, 0xe9, 0x94, 0x13, 0x6e, 0xcf, 0xb2, 0x35, 0x48, 0x26, 0x5b, 0xdc, 0xa1}, + {0x0, 0x7e, 0xfc, 0x82, 0xe5, 0x9b, 0x19, 0x67, 0xd7, 0xa9, 0x2b, 0x55, 0x32, 0x4c, 0xce, 0xb0}, + {0x0, 0x7f, 0xfe, 0x81, 0xe1, 0x9e, 0x1f, 0x60, 0xdf, 0xa0, 0x21, 0x5e, 0x3e, 0x41, 0xc0, 0xbf}, + {0x0, 0x80, 0x1d, 0x9d, 0x3a, 0xba, 0x27, 0xa7, 0x74, 0xf4, 0x69, 0xe9, 0x4e, 0xce, 0x53, 0xd3}, + {0x0, 0x81, 0x1f, 0x9e, 0x3e, 0xbf, 0x21, 0xa0, 0x7c, 0xfd, 0x63, 0xe2, 0x42, 0xc3, 0x5d, 0xdc}, + {0x0, 0x82, 0x19, 0x9b, 0x32, 0xb0, 0x2b, 0xa9, 0x64, 0xe6, 0x7d, 0xff, 0x56, 0xd4, 0x4f, 0xcd}, + {0x0, 0x83, 0x1b, 0x98, 0x36, 0xb5, 0x2d, 0xae, 0x6c, 0xef, 0x77, 0xf4, 0x5a, 0xd9, 0x41, 0xc2}, + {0x0, 0x84, 0x15, 0x91, 0x2a, 0xae, 0x3f, 0xbb, 0x54, 0xd0, 0x41, 0xc5, 0x7e, 0xfa, 0x6b, 0xef}, + {0x0, 0x85, 0x17, 0x92, 0x2e, 0xab, 0x39, 0xbc, 0x5c, 0xd9, 0x4b, 0xce, 0x72, 0xf7, 0x65, 0xe0}, + {0x0, 0x86, 0x11, 0x97, 0x22, 0xa4, 0x33, 0xb5, 0x44, 0xc2, 0x55, 0xd3, 0x66, 0xe0, 0x77, 0xf1}, + {0x0, 0x87, 0x13, 0x94, 0x26, 0xa1, 0x35, 0xb2, 0x4c, 0xcb, 0x5f, 0xd8, 0x6a, 0xed, 0x79, 0xfe}, + {0x0, 0x88, 0xd, 0x85, 0x1a, 0x92, 0x17, 0x9f, 0x34, 0xbc, 0x39, 0xb1, 0x2e, 0xa6, 0x23, 0xab}, + {0x0, 0x89, 0xf, 0x86, 0x1e, 0x97, 0x11, 0x98, 0x3c, 0xb5, 0x33, 0xba, 0x22, 0xab, 0x2d, 0xa4}, + {0x0, 0x8a, 0x9, 0x83, 0x12, 0x98, 0x1b, 0x91, 0x24, 0xae, 0x2d, 0xa7, 0x36, 0xbc, 0x3f, 0xb5}, + {0x0, 0x8b, 0xb, 0x80, 0x16, 0x9d, 0x1d, 0x96, 0x2c, 0xa7, 0x27, 0xac, 0x3a, 0xb1, 0x31, 0xba}, + {0x0, 0x8c, 0x5, 0x89, 0xa, 0x86, 0xf, 0x83, 0x14, 0x98, 0x11, 0x9d, 0x1e, 0x92, 0x1b, 0x97}, + {0x0, 0x8d, 0x7, 0x8a, 0xe, 0x83, 0x9, 0x84, 0x1c, 0x91, 0x1b, 0x96, 0x12, 0x9f, 0x15, 0x98}, + {0x0, 0x8e, 0x1, 0x8f, 0x2, 0x8c, 0x3, 0x8d, 0x4, 0x8a, 0x5, 0x8b, 0x6, 0x88, 0x7, 0x89}, + {0x0, 0x8f, 0x3, 0x8c, 0x6, 0x89, 0x5, 0x8a, 0xc, 0x83, 0xf, 0x80, 0xa, 0x85, 0x9, 0x86}, + {0x0, 0x90, 0x3d, 0xad, 0x7a, 0xea, 0x47, 0xd7, 0xf4, 0x64, 0xc9, 0x59, 0x8e, 0x1e, 0xb3, 0x23}, + {0x0, 0x91, 0x3f, 0xae, 0x7e, 0xef, 0x41, 0xd0, 0xfc, 0x6d, 0xc3, 0x52, 0x82, 0x13, 0xbd, 0x2c}, + {0x0, 0x92, 0x39, 0xab, 0x72, 0xe0, 0x4b, 0xd9, 0xe4, 0x76, 0xdd, 0x4f, 0x96, 0x4, 0xaf, 0x3d}, + {0x0, 0x93, 0x3b, 0xa8, 0x76, 0xe5, 0x4d, 0xde, 0xec, 0x7f, 0xd7, 0x44, 0x9a, 0x9, 0xa1, 0x32}, + {0x0, 0x94, 0x35, 0xa1, 0x6a, 0xfe, 0x5f, 0xcb, 0xd4, 0x40, 0xe1, 0x75, 0xbe, 0x2a, 0x8b, 0x1f}, + {0x0, 0x95, 0x37, 0xa2, 0x6e, 0xfb, 0x59, 0xcc, 0xdc, 0x49, 0xeb, 0x7e, 0xb2, 0x27, 0x85, 0x10}, + {0x0, 0x96, 0x31, 0xa7, 0x62, 0xf4, 0x53, 0xc5, 0xc4, 0x52, 0xf5, 0x63, 0xa6, 0x30, 0x97, 0x1}, + {0x0, 0x97, 0x33, 0xa4, 0x66, 0xf1, 0x55, 0xc2, 0xcc, 0x5b, 0xff, 0x68, 0xaa, 0x3d, 0x99, 0xe}, + {0x0, 0x98, 0x2d, 0xb5, 0x5a, 0xc2, 0x77, 0xef, 0xb4, 0x2c, 0x99, 0x1, 0xee, 0x76, 0xc3, 0x5b}, + {0x0, 0x99, 0x2f, 0xb6, 0x5e, 0xc7, 0x71, 0xe8, 0xbc, 0x25, 0x93, 0xa, 0xe2, 0x7b, 0xcd, 0x54}, + {0x0, 0x9a, 0x29, 0xb3, 0x52, 0xc8, 0x7b, 0xe1, 0xa4, 0x3e, 0x8d, 0x17, 0xf6, 0x6c, 0xdf, 0x45}, + {0x0, 0x9b, 0x2b, 0xb0, 0x56, 0xcd, 0x7d, 0xe6, 0xac, 0x37, 0x87, 0x1c, 0xfa, 0x61, 0xd1, 0x4a}, + {0x0, 0x9c, 0x25, 0xb9, 0x4a, 0xd6, 0x6f, 0xf3, 0x94, 0x8, 0xb1, 0x2d, 0xde, 0x42, 0xfb, 0x67}, + {0x0, 0x9d, 0x27, 0xba, 0x4e, 0xd3, 0x69, 0xf4, 0x9c, 0x1, 0xbb, 0x26, 0xd2, 0x4f, 0xf5, 0x68}, + {0x0, 0x9e, 0x21, 0xbf, 0x42, 0xdc, 0x63, 0xfd, 0x84, 0x1a, 0xa5, 0x3b, 0xc6, 0x58, 0xe7, 0x79}, + {0x0, 0x9f, 0x23, 0xbc, 0x46, 0xd9, 0x65, 0xfa, 0x8c, 0x13, 0xaf, 0x30, 0xca, 0x55, 0xe9, 0x76}, + {0x0, 0xa0, 0x5d, 0xfd, 0xba, 0x1a, 0xe7, 0x47, 0x69, 0xc9, 0x34, 0x94, 0xd3, 0x73, 0x8e, 0x2e}, + {0x0, 0xa1, 0x5f, 0xfe, 0xbe, 0x1f, 0xe1, 0x40, 0x61, 0xc0, 0x3e, 0x9f, 0xdf, 0x7e, 0x80, 0x21}, + {0x0, 0xa2, 0x59, 0xfb, 0xb2, 0x10, 0xeb, 0x49, 0x79, 0xdb, 0x20, 0x82, 0xcb, 0x69, 0x92, 0x30}, + {0x0, 0xa3, 0x5b, 0xf8, 0xb6, 0x15, 0xed, 0x4e, 0x71, 0xd2, 0x2a, 0x89, 0xc7, 0x64, 0x9c, 0x3f}, + {0x0, 0xa4, 0x55, 0xf1, 0xaa, 0xe, 0xff, 0x5b, 0x49, 0xed, 0x1c, 0xb8, 0xe3, 0x47, 0xb6, 0x12}, + {0x0, 0xa5, 0x57, 0xf2, 0xae, 0xb, 0xf9, 0x5c, 0x41, 0xe4, 0x16, 0xb3, 0xef, 0x4a, 0xb8, 0x1d}, + {0x0, 0xa6, 0x51, 0xf7, 0xa2, 0x4, 0xf3, 0x55, 0x59, 0xff, 0x8, 0xae, 0xfb, 0x5d, 0xaa, 0xc}, + {0x0, 0xa7, 0x53, 0xf4, 0xa6, 0x1, 0xf5, 0x52, 0x51, 0xf6, 0x2, 0xa5, 0xf7, 0x50, 0xa4, 0x3}, + {0x0, 0xa8, 0x4d, 0xe5, 0x9a, 0x32, 0xd7, 0x7f, 0x29, 0x81, 0x64, 0xcc, 0xb3, 0x1b, 0xfe, 0x56}, + {0x0, 0xa9, 0x4f, 0xe6, 0x9e, 0x37, 0xd1, 0x78, 0x21, 0x88, 0x6e, 0xc7, 0xbf, 0x16, 0xf0, 0x59}, + {0x0, 0xaa, 0x49, 0xe3, 0x92, 0x38, 0xdb, 0x71, 0x39, 0x93, 0x70, 0xda, 0xab, 0x1, 0xe2, 0x48}, + {0x0, 0xab, 0x4b, 0xe0, 0x96, 0x3d, 0xdd, 0x76, 0x31, 0x9a, 0x7a, 0xd1, 0xa7, 0xc, 0xec, 0x47}, + {0x0, 0xac, 0x45, 0xe9, 0x8a, 0x26, 0xcf, 0x63, 0x9, 0xa5, 0x4c, 0xe0, 0x83, 0x2f, 0xc6, 0x6a}, + {0x0, 0xad, 0x47, 0xea, 0x8e, 0x23, 0xc9, 0x64, 0x1, 0xac, 0x46, 0xeb, 0x8f, 0x22, 0xc8, 0x65}, + {0x0, 0xae, 0x41, 0xef, 0x82, 0x2c, 0xc3, 0x6d, 0x19, 0xb7, 0x58, 0xf6, 0x9b, 0x35, 0xda, 0x74}, + {0x0, 0xaf, 0x43, 0xec, 0x86, 0x29, 0xc5, 0x6a, 0x11, 0xbe, 0x52, 0xfd, 0x97, 0x38, 0xd4, 0x7b}, + {0x0, 0xb0, 0x7d, 0xcd, 0xfa, 0x4a, 0x87, 0x37, 0xe9, 0x59, 0x94, 0x24, 0x13, 0xa3, 0x6e, 0xde}, + {0x0, 0xb1, 0x7f, 0xce, 0xfe, 0x4f, 0x81, 0x30, 0xe1, 0x50, 0x9e, 0x2f, 0x1f, 0xae, 0x60, 0xd1}, + {0x0, 0xb2, 0x79, 0xcb, 0xf2, 0x40, 0x8b, 0x39, 0xf9, 0x4b, 0x80, 0x32, 0xb, 0xb9, 0x72, 0xc0}, + {0x0, 0xb3, 0x7b, 0xc8, 0xf6, 0x45, 0x8d, 0x3e, 0xf1, 0x42, 0x8a, 0x39, 0x7, 0xb4, 0x7c, 0xcf}, + {0x0, 0xb4, 0x75, 0xc1, 0xea, 0x5e, 0x9f, 0x2b, 0xc9, 0x7d, 0xbc, 0x8, 0x23, 0x97, 0x56, 0xe2}, + {0x0, 0xb5, 0x77, 0xc2, 0xee, 0x5b, 0x99, 0x2c, 0xc1, 0x74, 0xb6, 0x3, 0x2f, 0x9a, 0x58, 0xed}, + {0x0, 0xb6, 0x71, 0xc7, 0xe2, 0x54, 0x93, 0x25, 0xd9, 0x6f, 0xa8, 0x1e, 0x3b, 0x8d, 0x4a, 0xfc}, + {0x0, 0xb7, 0x73, 0xc4, 0xe6, 0x51, 0x95, 0x22, 0xd1, 0x66, 0xa2, 0x15, 0x37, 0x80, 0x44, 0xf3}, + {0x0, 0xb8, 0x6d, 0xd5, 0xda, 0x62, 0xb7, 0xf, 0xa9, 0x11, 0xc4, 0x7c, 0x73, 0xcb, 0x1e, 0xa6}, + {0x0, 0xb9, 0x6f, 0xd6, 0xde, 0x67, 0xb1, 0x8, 0xa1, 0x18, 0xce, 0x77, 0x7f, 0xc6, 0x10, 0xa9}, + {0x0, 0xba, 0x69, 0xd3, 0xd2, 0x68, 0xbb, 0x1, 0xb9, 0x3, 0xd0, 0x6a, 0x6b, 0xd1, 0x2, 0xb8}, + {0x0, 0xbb, 0x6b, 0xd0, 0xd6, 0x6d, 0xbd, 0x6, 0xb1, 0xa, 0xda, 0x61, 0x67, 0xdc, 0xc, 0xb7}, + {0x0, 0xbc, 0x65, 0xd9, 0xca, 0x76, 0xaf, 0x13, 0x89, 0x35, 0xec, 0x50, 0x43, 0xff, 0x26, 0x9a}, + {0x0, 0xbd, 0x67, 0xda, 0xce, 0x73, 0xa9, 0x14, 0x81, 0x3c, 0xe6, 0x5b, 0x4f, 0xf2, 0x28, 0x95}, + {0x0, 0xbe, 0x61, 0xdf, 0xc2, 0x7c, 0xa3, 0x1d, 0x99, 0x27, 0xf8, 0x46, 0x5b, 0xe5, 0x3a, 0x84}, + {0x0, 0xbf, 0x63, 0xdc, 0xc6, 0x79, 0xa5, 0x1a, 0x91, 0x2e, 0xf2, 0x4d, 0x57, 0xe8, 0x34, 0x8b}, + {0x0, 0xc0, 0x9d, 0x5d, 0x27, 0xe7, 0xba, 0x7a, 0x4e, 0x8e, 0xd3, 0x13, 0x69, 0xa9, 0xf4, 0x34}, + {0x0, 0xc1, 0x9f, 0x5e, 0x23, 0xe2, 0xbc, 0x7d, 0x46, 0x87, 0xd9, 0x18, 0x65, 0xa4, 0xfa, 0x3b}, + {0x0, 0xc2, 0x99, 0x5b, 0x2f, 0xed, 0xb6, 0x74, 0x5e, 0x9c, 0xc7, 0x5, 0x71, 0xb3, 0xe8, 0x2a}, + {0x0, 0xc3, 0x9b, 0x58, 0x2b, 0xe8, 0xb0, 0x73, 0x56, 0x95, 0xcd, 0xe, 0x7d, 0xbe, 0xe6, 0x25}, + {0x0, 0xc4, 0x95, 0x51, 0x37, 0xf3, 0xa2, 0x66, 0x6e, 0xaa, 0xfb, 0x3f, 0x59, 0x9d, 0xcc, 0x8}, + {0x0, 0xc5, 0x97, 0x52, 0x33, 0xf6, 0xa4, 0x61, 0x66, 0xa3, 0xf1, 0x34, 0x55, 0x90, 0xc2, 0x7}, + {0x0, 0xc6, 0x91, 0x57, 0x3f, 0xf9, 0xae, 0x68, 0x7e, 0xb8, 0xef, 0x29, 0x41, 0x87, 0xd0, 0x16}, + {0x0, 0xc7, 0x93, 0x54, 0x3b, 0xfc, 0xa8, 0x6f, 0x76, 0xb1, 0xe5, 0x22, 0x4d, 0x8a, 0xde, 0x19}, + {0x0, 0xc8, 0x8d, 0x45, 0x7, 0xcf, 0x8a, 0x42, 0xe, 0xc6, 0x83, 0x4b, 0x9, 0xc1, 0x84, 0x4c}, + {0x0, 0xc9, 0x8f, 0x46, 0x3, 0xca, 0x8c, 0x45, 0x6, 0xcf, 0x89, 0x40, 0x5, 0xcc, 0x8a, 0x43}, + {0x0, 0xca, 0x89, 0x43, 0xf, 0xc5, 0x86, 0x4c, 0x1e, 0xd4, 0x97, 0x5d, 0x11, 0xdb, 0x98, 0x52}, + {0x0, 0xcb, 0x8b, 0x40, 0xb, 0xc0, 0x80, 0x4b, 0x16, 0xdd, 0x9d, 0x56, 0x1d, 0xd6, 0x96, 0x5d}, + {0x0, 0xcc, 0x85, 0x49, 0x17, 0xdb, 0x92, 0x5e, 0x2e, 0xe2, 0xab, 0x67, 0x39, 0xf5, 0xbc, 0x70}, + {0x0, 0xcd, 0x87, 0x4a, 0x13, 0xde, 0x94, 0x59, 0x26, 0xeb, 0xa1, 0x6c, 0x35, 0xf8, 0xb2, 0x7f}, + {0x0, 0xce, 0x81, 0x4f, 0x1f, 0xd1, 0x9e, 0x50, 0x3e, 0xf0, 0xbf, 0x71, 0x21, 0xef, 0xa0, 0x6e}, + {0x0, 0xcf, 0x83, 0x4c, 0x1b, 0xd4, 0x98, 0x57, 0x36, 0xf9, 0xb5, 0x7a, 0x2d, 0xe2, 0xae, 0x61}, + {0x0, 0xd0, 0xbd, 0x6d, 0x67, 0xb7, 0xda, 0xa, 0xce, 0x1e, 0x73, 0xa3, 0xa9, 0x79, 0x14, 0xc4}, + {0x0, 0xd1, 0xbf, 0x6e, 0x63, 0xb2, 0xdc, 0xd, 0xc6, 0x17, 0x79, 0xa8, 0xa5, 0x74, 0x1a, 0xcb}, + {0x0, 0xd2, 0xb9, 0x6b, 0x6f, 0xbd, 0xd6, 0x4, 0xde, 0xc, 0x67, 0xb5, 0xb1, 0x63, 0x8, 0xda}, + {0x0, 0xd3, 0xbb, 0x68, 0x6b, 0xb8, 0xd0, 0x3, 0xd6, 0x5, 0x6d, 0xbe, 0xbd, 0x6e, 0x6, 0xd5}, + {0x0, 0xd4, 0xb5, 0x61, 0x77, 0xa3, 0xc2, 0x16, 0xee, 0x3a, 0x5b, 0x8f, 0x99, 0x4d, 0x2c, 0xf8}, + {0x0, 0xd5, 0xb7, 0x62, 0x73, 0xa6, 0xc4, 0x11, 0xe6, 0x33, 0x51, 0x84, 0x95, 0x40, 0x22, 0xf7}, + {0x0, 0xd6, 0xb1, 0x67, 0x7f, 0xa9, 0xce, 0x18, 0xfe, 0x28, 0x4f, 0x99, 0x81, 0x57, 0x30, 0xe6}, + {0x0, 0xd7, 0xb3, 0x64, 0x7b, 0xac, 0xc8, 0x1f, 0xf6, 0x21, 0x45, 0x92, 0x8d, 0x5a, 0x3e, 0xe9}, + {0x0, 0xd8, 0xad, 0x75, 0x47, 0x9f, 0xea, 0x32, 0x8e, 0x56, 0x23, 0xfb, 0xc9, 0x11, 0x64, 0xbc}, + {0x0, 0xd9, 0xaf, 0x76, 0x43, 0x9a, 0xec, 0x35, 0x86, 0x5f, 0x29, 0xf0, 0xc5, 0x1c, 0x6a, 0xb3}, + {0x0, 0xda, 0xa9, 0x73, 0x4f, 0x95, 0xe6, 0x3c, 0x9e, 0x44, 0x37, 0xed, 0xd1, 0xb, 0x78, 0xa2}, + {0x0, 0xdb, 0xab, 0x70, 0x4b, 0x90, 0xe0, 0x3b, 0x96, 0x4d, 0x3d, 0xe6, 0xdd, 0x6, 0x76, 0xad}, + {0x0, 0xdc, 0xa5, 0x79, 0x57, 0x8b, 0xf2, 0x2e, 0xae, 0x72, 0xb, 0xd7, 0xf9, 0x25, 0x5c, 0x80}, + {0x0, 0xdd, 0xa7, 0x7a, 0x53, 0x8e, 0xf4, 0x29, 0xa6, 0x7b, 0x1, 0xdc, 0xf5, 0x28, 0x52, 0x8f}, + {0x0, 0xde, 0xa1, 0x7f, 0x5f, 0x81, 0xfe, 0x20, 0xbe, 0x60, 0x1f, 0xc1, 0xe1, 0x3f, 0x40, 0x9e}, + {0x0, 0xdf, 0xa3, 0x7c, 0x5b, 0x84, 0xf8, 0x27, 0xb6, 0x69, 0x15, 0xca, 0xed, 0x32, 0x4e, 0x91}, + {0x0, 0xe0, 0xdd, 0x3d, 0xa7, 0x47, 0x7a, 0x9a, 0x53, 0xb3, 0x8e, 0x6e, 0xf4, 0x14, 0x29, 0xc9}, + {0x0, 0xe1, 0xdf, 0x3e, 0xa3, 0x42, 0x7c, 0x9d, 0x5b, 0xba, 0x84, 0x65, 0xf8, 0x19, 0x27, 0xc6}, + {0x0, 0xe2, 0xd9, 0x3b, 0xaf, 0x4d, 0x76, 0x94, 0x43, 0xa1, 0x9a, 0x78, 0xec, 0xe, 0x35, 0xd7}, + {0x0, 0xe3, 0xdb, 0x38, 0xab, 0x48, 0x70, 0x93, 0x4b, 0xa8, 0x90, 0x73, 0xe0, 0x3, 0x3b, 0xd8}, + {0x0, 0xe4, 0xd5, 0x31, 0xb7, 0x53, 0x62, 0x86, 0x73, 0x97, 0xa6, 0x42, 0xc4, 0x20, 0x11, 0xf5}, + {0x0, 0xe5, 0xd7, 0x32, 0xb3, 0x56, 0x64, 0x81, 0x7b, 0x9e, 0xac, 0x49, 0xc8, 0x2d, 0x1f, 0xfa}, + {0x0, 0xe6, 0xd1, 0x37, 0xbf, 0x59, 0x6e, 0x88, 0x63, 0x85, 0xb2, 0x54, 0xdc, 0x3a, 0xd, 0xeb}, + {0x0, 0xe7, 0xd3, 0x34, 0xbb, 0x5c, 0x68, 0x8f, 0x6b, 0x8c, 0xb8, 0x5f, 0xd0, 0x37, 0x3, 0xe4}, + {0x0, 0xe8, 0xcd, 0x25, 0x87, 0x6f, 0x4a, 0xa2, 0x13, 0xfb, 0xde, 0x36, 0x94, 0x7c, 0x59, 0xb1}, + {0x0, 0xe9, 0xcf, 0x26, 0x83, 0x6a, 0x4c, 0xa5, 0x1b, 0xf2, 0xd4, 0x3d, 0x98, 0x71, 0x57, 0xbe}, + {0x0, 0xea, 0xc9, 0x23, 0x8f, 0x65, 0x46, 0xac, 0x3, 0xe9, 0xca, 0x20, 0x8c, 0x66, 0x45, 0xaf}, + {0x0, 0xeb, 0xcb, 0x20, 0x8b, 0x60, 0x40, 0xab, 0xb, 0xe0, 0xc0, 0x2b, 0x80, 0x6b, 0x4b, 0xa0}, + {0x0, 0xec, 0xc5, 0x29, 0x97, 0x7b, 0x52, 0xbe, 0x33, 0xdf, 0xf6, 0x1a, 0xa4, 0x48, 0x61, 0x8d}, + {0x0, 0xed, 0xc7, 0x2a, 0x93, 0x7e, 0x54, 0xb9, 0x3b, 0xd6, 0xfc, 0x11, 0xa8, 0x45, 0x6f, 0x82}, + {0x0, 0xee, 0xc1, 0x2f, 0x9f, 0x71, 0x5e, 0xb0, 0x23, 0xcd, 0xe2, 0xc, 0xbc, 0x52, 0x7d, 0x93}, + {0x0, 0xef, 0xc3, 0x2c, 0x9b, 0x74, 0x58, 0xb7, 0x2b, 0xc4, 0xe8, 0x7, 0xb0, 0x5f, 0x73, 0x9c}, + {0x0, 0xf0, 0xfd, 0xd, 0xe7, 0x17, 0x1a, 0xea, 0xd3, 0x23, 0x2e, 0xde, 0x34, 0xc4, 0xc9, 0x39}, + {0x0, 0xf1, 0xff, 0xe, 0xe3, 0x12, 0x1c, 0xed, 0xdb, 0x2a, 0x24, 0xd5, 0x38, 0xc9, 0xc7, 0x36}, + {0x0, 0xf2, 0xf9, 0xb, 0xef, 0x1d, 0x16, 0xe4, 0xc3, 0x31, 0x3a, 0xc8, 0x2c, 0xde, 0xd5, 0x27}, + {0x0, 0xf3, 0xfb, 0x8, 0xeb, 0x18, 0x10, 0xe3, 0xcb, 0x38, 0x30, 0xc3, 0x20, 0xd3, 0xdb, 0x28}, + {0x0, 0xf4, 0xf5, 0x1, 0xf7, 0x3, 0x2, 0xf6, 0xf3, 0x7, 0x6, 0xf2, 0x4, 0xf0, 0xf1, 0x5}, + {0x0, 0xf5, 0xf7, 0x2, 0xf3, 0x6, 0x4, 0xf1, 0xfb, 0xe, 0xc, 0xf9, 0x8, 0xfd, 0xff, 0xa}, + {0x0, 0xf6, 0xf1, 0x7, 0xff, 0x9, 0xe, 0xf8, 0xe3, 0x15, 0x12, 0xe4, 0x1c, 0xea, 0xed, 0x1b}, + {0x0, 0xf7, 0xf3, 0x4, 0xfb, 0xc, 0x8, 0xff, 0xeb, 0x1c, 0x18, 0xef, 0x10, 0xe7, 0xe3, 0x14}, + {0x0, 0xf8, 0xed, 0x15, 0xc7, 0x3f, 0x2a, 0xd2, 0x93, 0x6b, 0x7e, 0x86, 0x54, 0xac, 0xb9, 0x41}, + {0x0, 0xf9, 0xef, 0x16, 0xc3, 0x3a, 0x2c, 0xd5, 0x9b, 0x62, 0x74, 0x8d, 0x58, 0xa1, 0xb7, 0x4e}, + {0x0, 0xfa, 0xe9, 0x13, 0xcf, 0x35, 0x26, 0xdc, 0x83, 0x79, 0x6a, 0x90, 0x4c, 0xb6, 0xa5, 0x5f}, + {0x0, 0xfb, 0xeb, 0x10, 0xcb, 0x30, 0x20, 0xdb, 0x8b, 0x70, 0x60, 0x9b, 0x40, 0xbb, 0xab, 0x50}, + {0x0, 0xfc, 0xe5, 0x19, 0xd7, 0x2b, 0x32, 0xce, 0xb3, 0x4f, 0x56, 0xaa, 0x64, 0x98, 0x81, 0x7d}, + {0x0, 0xfd, 0xe7, 0x1a, 0xd3, 0x2e, 0x34, 0xc9, 0xbb, 0x46, 0x5c, 0xa1, 0x68, 0x95, 0x8f, 0x72}, + {0x0, 0xfe, 0xe1, 0x1f, 0xdf, 0x21, 0x3e, 0xc0, 0xa3, 0x5d, 0x42, 0xbc, 0x7c, 0x82, 0x9d, 0x63}, + {0x0, 0xff, 0xe3, 0x1c, 0xdb, 0x24, 0x38, 0xc7, 0xab, 0x54, 0x48, 0xb7, 0x70, 0x8f, 0x93, 0x6c}} +var mulTableHigh = [256][16]uint8{{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, + {0x0, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0}, + {0x0, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, 0x1d, 0x3d, 0x5d, 0x7d, 0x9d, 0xbd, 0xdd, 0xfd}, + {0x0, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, 0x9d, 0xad, 0xfd, 0xcd, 0x5d, 0x6d, 0x3d, 0xd}, + {0x0, 0x40, 0x80, 0xc0, 0x1d, 0x5d, 0x9d, 0xdd, 0x3a, 0x7a, 0xba, 0xfa, 0x27, 0x67, 0xa7, 0xe7}, + {0x0, 0x50, 0xa0, 0xf0, 0x5d, 0xd, 0xfd, 0xad, 0xba, 0xea, 0x1a, 0x4a, 0xe7, 0xb7, 0x47, 0x17}, + {0x0, 0x60, 0xc0, 0xa0, 0x9d, 0xfd, 0x5d, 0x3d, 0x27, 0x47, 0xe7, 0x87, 0xba, 0xda, 0x7a, 0x1a}, + {0x0, 0x70, 0xe0, 0x90, 0xdd, 0xad, 0x3d, 0x4d, 0xa7, 0xd7, 0x47, 0x37, 0x7a, 0xa, 0x9a, 0xea}, + {0x0, 0x80, 0x1d, 0x9d, 0x3a, 0xba, 0x27, 0xa7, 0x74, 0xf4, 0x69, 0xe9, 0x4e, 0xce, 0x53, 0xd3}, + {0x0, 0x90, 0x3d, 0xad, 0x7a, 0xea, 0x47, 0xd7, 0xf4, 0x64, 0xc9, 0x59, 0x8e, 0x1e, 0xb3, 0x23}, + {0x0, 0xa0, 0x5d, 0xfd, 0xba, 0x1a, 0xe7, 0x47, 0x69, 0xc9, 0x34, 0x94, 0xd3, 0x73, 0x8e, 0x2e}, + {0x0, 0xb0, 0x7d, 0xcd, 0xfa, 0x4a, 0x87, 0x37, 0xe9, 0x59, 0x94, 0x24, 0x13, 0xa3, 0x6e, 0xde}, + {0x0, 0xc0, 0x9d, 0x5d, 0x27, 0xe7, 0xba, 0x7a, 0x4e, 0x8e, 0xd3, 0x13, 0x69, 0xa9, 0xf4, 0x34}, + {0x0, 0xd0, 0xbd, 0x6d, 0x67, 0xb7, 0xda, 0xa, 0xce, 0x1e, 0x73, 0xa3, 0xa9, 0x79, 0x14, 0xc4}, + {0x0, 0xe0, 0xdd, 0x3d, 0xa7, 0x47, 0x7a, 0x9a, 0x53, 0xb3, 0x8e, 0x6e, 0xf4, 0x14, 0x29, 0xc9}, + {0x0, 0xf0, 0xfd, 0xd, 0xe7, 0x17, 0x1a, 0xea, 0xd3, 0x23, 0x2e, 0xde, 0x34, 0xc4, 0xc9, 0x39}, + {0x0, 0x1d, 0x3a, 0x27, 0x74, 0x69, 0x4e, 0x53, 0xe8, 0xf5, 0xd2, 0xcf, 0x9c, 0x81, 0xa6, 0xbb}, + {0x0, 0xd, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b}, + {0x0, 0x3d, 0x7a, 0x47, 0xf4, 0xc9, 0x8e, 0xb3, 0xf5, 0xc8, 0x8f, 0xb2, 0x1, 0x3c, 0x7b, 0x46}, + {0x0, 0x2d, 0x5a, 0x77, 0xb4, 0x99, 0xee, 0xc3, 0x75, 0x58, 0x2f, 0x2, 0xc1, 0xec, 0x9b, 0xb6}, + {0x0, 0x5d, 0xba, 0xe7, 0x69, 0x34, 0xd3, 0x8e, 0xd2, 0x8f, 0x68, 0x35, 0xbb, 0xe6, 0x1, 0x5c}, + {0x0, 0x4d, 0x9a, 0xd7, 0x29, 0x64, 0xb3, 0xfe, 0x52, 0x1f, 0xc8, 0x85, 0x7b, 0x36, 0xe1, 0xac}, + {0x0, 0x7d, 0xfa, 0x87, 0xe9, 0x94, 0x13, 0x6e, 0xcf, 0xb2, 0x35, 0x48, 0x26, 0x5b, 0xdc, 0xa1}, + {0x0, 0x6d, 0xda, 0xb7, 0xa9, 0xc4, 0x73, 0x1e, 0x4f, 0x22, 0x95, 0xf8, 0xe6, 0x8b, 0x3c, 0x51}, + {0x0, 0x9d, 0x27, 0xba, 0x4e, 0xd3, 0x69, 0xf4, 0x9c, 0x1, 0xbb, 0x26, 0xd2, 0x4f, 0xf5, 0x68}, + {0x0, 0x8d, 0x7, 0x8a, 0xe, 0x83, 0x9, 0x84, 0x1c, 0x91, 0x1b, 0x96, 0x12, 0x9f, 0x15, 0x98}, + {0x0, 0xbd, 0x67, 0xda, 0xce, 0x73, 0xa9, 0x14, 0x81, 0x3c, 0xe6, 0x5b, 0x4f, 0xf2, 0x28, 0x95}, + {0x0, 0xad, 0x47, 0xea, 0x8e, 0x23, 0xc9, 0x64, 0x1, 0xac, 0x46, 0xeb, 0x8f, 0x22, 0xc8, 0x65}, + {0x0, 0xdd, 0xa7, 0x7a, 0x53, 0x8e, 0xf4, 0x29, 0xa6, 0x7b, 0x1, 0xdc, 0xf5, 0x28, 0x52, 0x8f}, + {0x0, 0xcd, 0x87, 0x4a, 0x13, 0xde, 0x94, 0x59, 0x26, 0xeb, 0xa1, 0x6c, 0x35, 0xf8, 0xb2, 0x7f}, + {0x0, 0xfd, 0xe7, 0x1a, 0xd3, 0x2e, 0x34, 0xc9, 0xbb, 0x46, 0x5c, 0xa1, 0x68, 0x95, 0x8f, 0x72}, + {0x0, 0xed, 0xc7, 0x2a, 0x93, 0x7e, 0x54, 0xb9, 0x3b, 0xd6, 0xfc, 0x11, 0xa8, 0x45, 0x6f, 0x82}, + {0x0, 0x3a, 0x74, 0x4e, 0xe8, 0xd2, 0x9c, 0xa6, 0xcd, 0xf7, 0xb9, 0x83, 0x25, 0x1f, 0x51, 0x6b}, + {0x0, 0x2a, 0x54, 0x7e, 0xa8, 0x82, 0xfc, 0xd6, 0x4d, 0x67, 0x19, 0x33, 0xe5, 0xcf, 0xb1, 0x9b}, + {0x0, 0x1a, 0x34, 0x2e, 0x68, 0x72, 0x5c, 0x46, 0xd0, 0xca, 0xe4, 0xfe, 0xb8, 0xa2, 0x8c, 0x96}, + {0x0, 0xa, 0x14, 0x1e, 0x28, 0x22, 0x3c, 0x36, 0x50, 0x5a, 0x44, 0x4e, 0x78, 0x72, 0x6c, 0x66}, + {0x0, 0x7a, 0xf4, 0x8e, 0xf5, 0x8f, 0x1, 0x7b, 0xf7, 0x8d, 0x3, 0x79, 0x2, 0x78, 0xf6, 0x8c}, + {0x0, 0x6a, 0xd4, 0xbe, 0xb5, 0xdf, 0x61, 0xb, 0x77, 0x1d, 0xa3, 0xc9, 0xc2, 0xa8, 0x16, 0x7c}, + {0x0, 0x5a, 0xb4, 0xee, 0x75, 0x2f, 0xc1, 0x9b, 0xea, 0xb0, 0x5e, 0x4, 0x9f, 0xc5, 0x2b, 0x71}, + {0x0, 0x4a, 0x94, 0xde, 0x35, 0x7f, 0xa1, 0xeb, 0x6a, 0x20, 0xfe, 0xb4, 0x5f, 0x15, 0xcb, 0x81}, + {0x0, 0xba, 0x69, 0xd3, 0xd2, 0x68, 0xbb, 0x1, 0xb9, 0x3, 0xd0, 0x6a, 0x6b, 0xd1, 0x2, 0xb8}, + {0x0, 0xaa, 0x49, 0xe3, 0x92, 0x38, 0xdb, 0x71, 0x39, 0x93, 0x70, 0xda, 0xab, 0x1, 0xe2, 0x48}, + {0x0, 0x9a, 0x29, 0xb3, 0x52, 0xc8, 0x7b, 0xe1, 0xa4, 0x3e, 0x8d, 0x17, 0xf6, 0x6c, 0xdf, 0x45}, + {0x0, 0x8a, 0x9, 0x83, 0x12, 0x98, 0x1b, 0x91, 0x24, 0xae, 0x2d, 0xa7, 0x36, 0xbc, 0x3f, 0xb5}, + {0x0, 0xfa, 0xe9, 0x13, 0xcf, 0x35, 0x26, 0xdc, 0x83, 0x79, 0x6a, 0x90, 0x4c, 0xb6, 0xa5, 0x5f}, + {0x0, 0xea, 0xc9, 0x23, 0x8f, 0x65, 0x46, 0xac, 0x3, 0xe9, 0xca, 0x20, 0x8c, 0x66, 0x45, 0xaf}, + {0x0, 0xda, 0xa9, 0x73, 0x4f, 0x95, 0xe6, 0x3c, 0x9e, 0x44, 0x37, 0xed, 0xd1, 0xb, 0x78, 0xa2}, + {0x0, 0xca, 0x89, 0x43, 0xf, 0xc5, 0x86, 0x4c, 0x1e, 0xd4, 0x97, 0x5d, 0x11, 0xdb, 0x98, 0x52}, + {0x0, 0x27, 0x4e, 0x69, 0x9c, 0xbb, 0xd2, 0xf5, 0x25, 0x2, 0x6b, 0x4c, 0xb9, 0x9e, 0xf7, 0xd0}, + {0x0, 0x37, 0x6e, 0x59, 0xdc, 0xeb, 0xb2, 0x85, 0xa5, 0x92, 0xcb, 0xfc, 0x79, 0x4e, 0x17, 0x20}, + {0x0, 0x7, 0xe, 0x9, 0x1c, 0x1b, 0x12, 0x15, 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d}, + {0x0, 0x17, 0x2e, 0x39, 0x5c, 0x4b, 0x72, 0x65, 0xb8, 0xaf, 0x96, 0x81, 0xe4, 0xf3, 0xca, 0xdd}, + {0x0, 0x67, 0xce, 0xa9, 0x81, 0xe6, 0x4f, 0x28, 0x1f, 0x78, 0xd1, 0xb6, 0x9e, 0xf9, 0x50, 0x37}, + {0x0, 0x77, 0xee, 0x99, 0xc1, 0xb6, 0x2f, 0x58, 0x9f, 0xe8, 0x71, 0x6, 0x5e, 0x29, 0xb0, 0xc7}, + {0x0, 0x47, 0x8e, 0xc9, 0x1, 0x46, 0x8f, 0xc8, 0x2, 0x45, 0x8c, 0xcb, 0x3, 0x44, 0x8d, 0xca}, + {0x0, 0x57, 0xae, 0xf9, 0x41, 0x16, 0xef, 0xb8, 0x82, 0xd5, 0x2c, 0x7b, 0xc3, 0x94, 0x6d, 0x3a}, + {0x0, 0xa7, 0x53, 0xf4, 0xa6, 0x1, 0xf5, 0x52, 0x51, 0xf6, 0x2, 0xa5, 0xf7, 0x50, 0xa4, 0x3}, + {0x0, 0xb7, 0x73, 0xc4, 0xe6, 0x51, 0x95, 0x22, 0xd1, 0x66, 0xa2, 0x15, 0x37, 0x80, 0x44, 0xf3}, + {0x0, 0x87, 0x13, 0x94, 0x26, 0xa1, 0x35, 0xb2, 0x4c, 0xcb, 0x5f, 0xd8, 0x6a, 0xed, 0x79, 0xfe}, + {0x0, 0x97, 0x33, 0xa4, 0x66, 0xf1, 0x55, 0xc2, 0xcc, 0x5b, 0xff, 0x68, 0xaa, 0x3d, 0x99, 0xe}, + {0x0, 0xe7, 0xd3, 0x34, 0xbb, 0x5c, 0x68, 0x8f, 0x6b, 0x8c, 0xb8, 0x5f, 0xd0, 0x37, 0x3, 0xe4}, + {0x0, 0xf7, 0xf3, 0x4, 0xfb, 0xc, 0x8, 0xff, 0xeb, 0x1c, 0x18, 0xef, 0x10, 0xe7, 0xe3, 0x14}, + {0x0, 0xc7, 0x93, 0x54, 0x3b, 0xfc, 0xa8, 0x6f, 0x76, 0xb1, 0xe5, 0x22, 0x4d, 0x8a, 0xde, 0x19}, + {0x0, 0xd7, 0xb3, 0x64, 0x7b, 0xac, 0xc8, 0x1f, 0xf6, 0x21, 0x45, 0x92, 0x8d, 0x5a, 0x3e, 0xe9}, + {0x0, 0x74, 0xe8, 0x9c, 0xcd, 0xb9, 0x25, 0x51, 0x87, 0xf3, 0x6f, 0x1b, 0x4a, 0x3e, 0xa2, 0xd6}, + {0x0, 0x64, 0xc8, 0xac, 0x8d, 0xe9, 0x45, 0x21, 0x7, 0x63, 0xcf, 0xab, 0x8a, 0xee, 0x42, 0x26}, + {0x0, 0x54, 0xa8, 0xfc, 0x4d, 0x19, 0xe5, 0xb1, 0x9a, 0xce, 0x32, 0x66, 0xd7, 0x83, 0x7f, 0x2b}, + {0x0, 0x44, 0x88, 0xcc, 0xd, 0x49, 0x85, 0xc1, 0x1a, 0x5e, 0x92, 0xd6, 0x17, 0x53, 0x9f, 0xdb}, + {0x0, 0x34, 0x68, 0x5c, 0xd0, 0xe4, 0xb8, 0x8c, 0xbd, 0x89, 0xd5, 0xe1, 0x6d, 0x59, 0x5, 0x31}, + {0x0, 0x24, 0x48, 0x6c, 0x90, 0xb4, 0xd8, 0xfc, 0x3d, 0x19, 0x75, 0x51, 0xad, 0x89, 0xe5, 0xc1}, + {0x0, 0x14, 0x28, 0x3c, 0x50, 0x44, 0x78, 0x6c, 0xa0, 0xb4, 0x88, 0x9c, 0xf0, 0xe4, 0xd8, 0xcc}, + {0x0, 0x4, 0x8, 0xc, 0x10, 0x14, 0x18, 0x1c, 0x20, 0x24, 0x28, 0x2c, 0x30, 0x34, 0x38, 0x3c}, + {0x0, 0xf4, 0xf5, 0x1, 0xf7, 0x3, 0x2, 0xf6, 0xf3, 0x7, 0x6, 0xf2, 0x4, 0xf0, 0xf1, 0x5}, + {0x0, 0xe4, 0xd5, 0x31, 0xb7, 0x53, 0x62, 0x86, 0x73, 0x97, 0xa6, 0x42, 0xc4, 0x20, 0x11, 0xf5}, + {0x0, 0xd4, 0xb5, 0x61, 0x77, 0xa3, 0xc2, 0x16, 0xee, 0x3a, 0x5b, 0x8f, 0x99, 0x4d, 0x2c, 0xf8}, + {0x0, 0xc4, 0x95, 0x51, 0x37, 0xf3, 0xa2, 0x66, 0x6e, 0xaa, 0xfb, 0x3f, 0x59, 0x9d, 0xcc, 0x8}, + {0x0, 0xb4, 0x75, 0xc1, 0xea, 0x5e, 0x9f, 0x2b, 0xc9, 0x7d, 0xbc, 0x8, 0x23, 0x97, 0x56, 0xe2}, + {0x0, 0xa4, 0x55, 0xf1, 0xaa, 0xe, 0xff, 0x5b, 0x49, 0xed, 0x1c, 0xb8, 0xe3, 0x47, 0xb6, 0x12}, + {0x0, 0x94, 0x35, 0xa1, 0x6a, 0xfe, 0x5f, 0xcb, 0xd4, 0x40, 0xe1, 0x75, 0xbe, 0x2a, 0x8b, 0x1f}, + {0x0, 0x84, 0x15, 0x91, 0x2a, 0xae, 0x3f, 0xbb, 0x54, 0xd0, 0x41, 0xc5, 0x7e, 0xfa, 0x6b, 0xef}, + {0x0, 0x69, 0xd2, 0xbb, 0xb9, 0xd0, 0x6b, 0x2, 0x6f, 0x6, 0xbd, 0xd4, 0xd6, 0xbf, 0x4, 0x6d}, + {0x0, 0x79, 0xf2, 0x8b, 0xf9, 0x80, 0xb, 0x72, 0xef, 0x96, 0x1d, 0x64, 0x16, 0x6f, 0xe4, 0x9d}, + {0x0, 0x49, 0x92, 0xdb, 0x39, 0x70, 0xab, 0xe2, 0x72, 0x3b, 0xe0, 0xa9, 0x4b, 0x2, 0xd9, 0x90}, + {0x0, 0x59, 0xb2, 0xeb, 0x79, 0x20, 0xcb, 0x92, 0xf2, 0xab, 0x40, 0x19, 0x8b, 0xd2, 0x39, 0x60}, + {0x0, 0x29, 0x52, 0x7b, 0xa4, 0x8d, 0xf6, 0xdf, 0x55, 0x7c, 0x7, 0x2e, 0xf1, 0xd8, 0xa3, 0x8a}, + {0x0, 0x39, 0x72, 0x4b, 0xe4, 0xdd, 0x96, 0xaf, 0xd5, 0xec, 0xa7, 0x9e, 0x31, 0x8, 0x43, 0x7a}, + {0x0, 0x9, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77}, + {0x0, 0x19, 0x32, 0x2b, 0x64, 0x7d, 0x56, 0x4f, 0xc8, 0xd1, 0xfa, 0xe3, 0xac, 0xb5, 0x9e, 0x87}, + {0x0, 0xe9, 0xcf, 0x26, 0x83, 0x6a, 0x4c, 0xa5, 0x1b, 0xf2, 0xd4, 0x3d, 0x98, 0x71, 0x57, 0xbe}, + {0x0, 0xf9, 0xef, 0x16, 0xc3, 0x3a, 0x2c, 0xd5, 0x9b, 0x62, 0x74, 0x8d, 0x58, 0xa1, 0xb7, 0x4e}, + {0x0, 0xc9, 0x8f, 0x46, 0x3, 0xca, 0x8c, 0x45, 0x6, 0xcf, 0x89, 0x40, 0x5, 0xcc, 0x8a, 0x43}, + {0x0, 0xd9, 0xaf, 0x76, 0x43, 0x9a, 0xec, 0x35, 0x86, 0x5f, 0x29, 0xf0, 0xc5, 0x1c, 0x6a, 0xb3}, + {0x0, 0xa9, 0x4f, 0xe6, 0x9e, 0x37, 0xd1, 0x78, 0x21, 0x88, 0x6e, 0xc7, 0xbf, 0x16, 0xf0, 0x59}, + {0x0, 0xb9, 0x6f, 0xd6, 0xde, 0x67, 0xb1, 0x8, 0xa1, 0x18, 0xce, 0x77, 0x7f, 0xc6, 0x10, 0xa9}, + {0x0, 0x89, 0xf, 0x86, 0x1e, 0x97, 0x11, 0x98, 0x3c, 0xb5, 0x33, 0xba, 0x22, 0xab, 0x2d, 0xa4}, + {0x0, 0x99, 0x2f, 0xb6, 0x5e, 0xc7, 0x71, 0xe8, 0xbc, 0x25, 0x93, 0xa, 0xe2, 0x7b, 0xcd, 0x54}, + {0x0, 0x4e, 0x9c, 0xd2, 0x25, 0x6b, 0xb9, 0xf7, 0x4a, 0x4, 0xd6, 0x98, 0x6f, 0x21, 0xf3, 0xbd}, + {0x0, 0x5e, 0xbc, 0xe2, 0x65, 0x3b, 0xd9, 0x87, 0xca, 0x94, 0x76, 0x28, 0xaf, 0xf1, 0x13, 0x4d}, + {0x0, 0x6e, 0xdc, 0xb2, 0xa5, 0xcb, 0x79, 0x17, 0x57, 0x39, 0x8b, 0xe5, 0xf2, 0x9c, 0x2e, 0x40}, + {0x0, 0x7e, 0xfc, 0x82, 0xe5, 0x9b, 0x19, 0x67, 0xd7, 0xa9, 0x2b, 0x55, 0x32, 0x4c, 0xce, 0xb0}, + {0x0, 0xe, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a}, + {0x0, 0x1e, 0x3c, 0x22, 0x78, 0x66, 0x44, 0x5a, 0xf0, 0xee, 0xcc, 0xd2, 0x88, 0x96, 0xb4, 0xaa}, + {0x0, 0x2e, 0x5c, 0x72, 0xb8, 0x96, 0xe4, 0xca, 0x6d, 0x43, 0x31, 0x1f, 0xd5, 0xfb, 0x89, 0xa7}, + {0x0, 0x3e, 0x7c, 0x42, 0xf8, 0xc6, 0x84, 0xba, 0xed, 0xd3, 0x91, 0xaf, 0x15, 0x2b, 0x69, 0x57}, + {0x0, 0xce, 0x81, 0x4f, 0x1f, 0xd1, 0x9e, 0x50, 0x3e, 0xf0, 0xbf, 0x71, 0x21, 0xef, 0xa0, 0x6e}, + {0x0, 0xde, 0xa1, 0x7f, 0x5f, 0x81, 0xfe, 0x20, 0xbe, 0x60, 0x1f, 0xc1, 0xe1, 0x3f, 0x40, 0x9e}, + {0x0, 0xee, 0xc1, 0x2f, 0x9f, 0x71, 0x5e, 0xb0, 0x23, 0xcd, 0xe2, 0xc, 0xbc, 0x52, 0x7d, 0x93}, + {0x0, 0xfe, 0xe1, 0x1f, 0xdf, 0x21, 0x3e, 0xc0, 0xa3, 0x5d, 0x42, 0xbc, 0x7c, 0x82, 0x9d, 0x63}, + {0x0, 0x8e, 0x1, 0x8f, 0x2, 0x8c, 0x3, 0x8d, 0x4, 0x8a, 0x5, 0x8b, 0x6, 0x88, 0x7, 0x89}, + {0x0, 0x9e, 0x21, 0xbf, 0x42, 0xdc, 0x63, 0xfd, 0x84, 0x1a, 0xa5, 0x3b, 0xc6, 0x58, 0xe7, 0x79}, + {0x0, 0xae, 0x41, 0xef, 0x82, 0x2c, 0xc3, 0x6d, 0x19, 0xb7, 0x58, 0xf6, 0x9b, 0x35, 0xda, 0x74}, + {0x0, 0xbe, 0x61, 0xdf, 0xc2, 0x7c, 0xa3, 0x1d, 0x99, 0x27, 0xf8, 0x46, 0x5b, 0xe5, 0x3a, 0x84}, + {0x0, 0x53, 0xa6, 0xf5, 0x51, 0x2, 0xf7, 0xa4, 0xa2, 0xf1, 0x4, 0x57, 0xf3, 0xa0, 0x55, 0x6}, + {0x0, 0x43, 0x86, 0xc5, 0x11, 0x52, 0x97, 0xd4, 0x22, 0x61, 0xa4, 0xe7, 0x33, 0x70, 0xb5, 0xf6}, + {0x0, 0x73, 0xe6, 0x95, 0xd1, 0xa2, 0x37, 0x44, 0xbf, 0xcc, 0x59, 0x2a, 0x6e, 0x1d, 0x88, 0xfb}, + {0x0, 0x63, 0xc6, 0xa5, 0x91, 0xf2, 0x57, 0x34, 0x3f, 0x5c, 0xf9, 0x9a, 0xae, 0xcd, 0x68, 0xb}, + {0x0, 0x13, 0x26, 0x35, 0x4c, 0x5f, 0x6a, 0x79, 0x98, 0x8b, 0xbe, 0xad, 0xd4, 0xc7, 0xf2, 0xe1}, + {0x0, 0x3, 0x6, 0x5, 0xc, 0xf, 0xa, 0x9, 0x18, 0x1b, 0x1e, 0x1d, 0x14, 0x17, 0x12, 0x11}, + {0x0, 0x33, 0x66, 0x55, 0xcc, 0xff, 0xaa, 0x99, 0x85, 0xb6, 0xe3, 0xd0, 0x49, 0x7a, 0x2f, 0x1c}, + {0x0, 0x23, 0x46, 0x65, 0x8c, 0xaf, 0xca, 0xe9, 0x5, 0x26, 0x43, 0x60, 0x89, 0xaa, 0xcf, 0xec}, + {0x0, 0xd3, 0xbb, 0x68, 0x6b, 0xb8, 0xd0, 0x3, 0xd6, 0x5, 0x6d, 0xbe, 0xbd, 0x6e, 0x6, 0xd5}, + {0x0, 0xc3, 0x9b, 0x58, 0x2b, 0xe8, 0xb0, 0x73, 0x56, 0x95, 0xcd, 0xe, 0x7d, 0xbe, 0xe6, 0x25}, + {0x0, 0xf3, 0xfb, 0x8, 0xeb, 0x18, 0x10, 0xe3, 0xcb, 0x38, 0x30, 0xc3, 0x20, 0xd3, 0xdb, 0x28}, + {0x0, 0xe3, 0xdb, 0x38, 0xab, 0x48, 0x70, 0x93, 0x4b, 0xa8, 0x90, 0x73, 0xe0, 0x3, 0x3b, 0xd8}, + {0x0, 0x93, 0x3b, 0xa8, 0x76, 0xe5, 0x4d, 0xde, 0xec, 0x7f, 0xd7, 0x44, 0x9a, 0x9, 0xa1, 0x32}, + {0x0, 0x83, 0x1b, 0x98, 0x36, 0xb5, 0x2d, 0xae, 0x6c, 0xef, 0x77, 0xf4, 0x5a, 0xd9, 0x41, 0xc2}, + {0x0, 0xb3, 0x7b, 0xc8, 0xf6, 0x45, 0x8d, 0x3e, 0xf1, 0x42, 0x8a, 0x39, 0x7, 0xb4, 0x7c, 0xcf}, + {0x0, 0xa3, 0x5b, 0xf8, 0xb6, 0x15, 0xed, 0x4e, 0x71, 0xd2, 0x2a, 0x89, 0xc7, 0x64, 0x9c, 0x3f}, + {0x0, 0xe8, 0xcd, 0x25, 0x87, 0x6f, 0x4a, 0xa2, 0x13, 0xfb, 0xde, 0x36, 0x94, 0x7c, 0x59, 0xb1}, + {0x0, 0xf8, 0xed, 0x15, 0xc7, 0x3f, 0x2a, 0xd2, 0x93, 0x6b, 0x7e, 0x86, 0x54, 0xac, 0xb9, 0x41}, + {0x0, 0xc8, 0x8d, 0x45, 0x7, 0xcf, 0x8a, 0x42, 0xe, 0xc6, 0x83, 0x4b, 0x9, 0xc1, 0x84, 0x4c}, + {0x0, 0xd8, 0xad, 0x75, 0x47, 0x9f, 0xea, 0x32, 0x8e, 0x56, 0x23, 0xfb, 0xc9, 0x11, 0x64, 0xbc}, + {0x0, 0xa8, 0x4d, 0xe5, 0x9a, 0x32, 0xd7, 0x7f, 0x29, 0x81, 0x64, 0xcc, 0xb3, 0x1b, 0xfe, 0x56}, + {0x0, 0xb8, 0x6d, 0xd5, 0xda, 0x62, 0xb7, 0xf, 0xa9, 0x11, 0xc4, 0x7c, 0x73, 0xcb, 0x1e, 0xa6}, + {0x0, 0x88, 0xd, 0x85, 0x1a, 0x92, 0x17, 0x9f, 0x34, 0xbc, 0x39, 0xb1, 0x2e, 0xa6, 0x23, 0xab}, + {0x0, 0x98, 0x2d, 0xb5, 0x5a, 0xc2, 0x77, 0xef, 0xb4, 0x2c, 0x99, 0x1, 0xee, 0x76, 0xc3, 0x5b}, + {0x0, 0x68, 0xd0, 0xb8, 0xbd, 0xd5, 0x6d, 0x5, 0x67, 0xf, 0xb7, 0xdf, 0xda, 0xb2, 0xa, 0x62}, + {0x0, 0x78, 0xf0, 0x88, 0xfd, 0x85, 0xd, 0x75, 0xe7, 0x9f, 0x17, 0x6f, 0x1a, 0x62, 0xea, 0x92}, + {0x0, 0x48, 0x90, 0xd8, 0x3d, 0x75, 0xad, 0xe5, 0x7a, 0x32, 0xea, 0xa2, 0x47, 0xf, 0xd7, 0x9f}, + {0x0, 0x58, 0xb0, 0xe8, 0x7d, 0x25, 0xcd, 0x95, 0xfa, 0xa2, 0x4a, 0x12, 0x87, 0xdf, 0x37, 0x6f}, + {0x0, 0x28, 0x50, 0x78, 0xa0, 0x88, 0xf0, 0xd8, 0x5d, 0x75, 0xd, 0x25, 0xfd, 0xd5, 0xad, 0x85}, + {0x0, 0x38, 0x70, 0x48, 0xe0, 0xd8, 0x90, 0xa8, 0xdd, 0xe5, 0xad, 0x95, 0x3d, 0x5, 0x4d, 0x75}, + {0x0, 0x8, 0x10, 0x18, 0x20, 0x28, 0x30, 0x38, 0x40, 0x48, 0x50, 0x58, 0x60, 0x68, 0x70, 0x78}, + {0x0, 0x18, 0x30, 0x28, 0x60, 0x78, 0x50, 0x48, 0xc0, 0xd8, 0xf0, 0xe8, 0xa0, 0xb8, 0x90, 0x88}, + {0x0, 0xf5, 0xf7, 0x2, 0xf3, 0x6, 0x4, 0xf1, 0xfb, 0xe, 0xc, 0xf9, 0x8, 0xfd, 0xff, 0xa}, + {0x0, 0xe5, 0xd7, 0x32, 0xb3, 0x56, 0x64, 0x81, 0x7b, 0x9e, 0xac, 0x49, 0xc8, 0x2d, 0x1f, 0xfa}, + {0x0, 0xd5, 0xb7, 0x62, 0x73, 0xa6, 0xc4, 0x11, 0xe6, 0x33, 0x51, 0x84, 0x95, 0x40, 0x22, 0xf7}, + {0x0, 0xc5, 0x97, 0x52, 0x33, 0xf6, 0xa4, 0x61, 0x66, 0xa3, 0xf1, 0x34, 0x55, 0x90, 0xc2, 0x7}, + {0x0, 0xb5, 0x77, 0xc2, 0xee, 0x5b, 0x99, 0x2c, 0xc1, 0x74, 0xb6, 0x3, 0x2f, 0x9a, 0x58, 0xed}, + {0x0, 0xa5, 0x57, 0xf2, 0xae, 0xb, 0xf9, 0x5c, 0x41, 0xe4, 0x16, 0xb3, 0xef, 0x4a, 0xb8, 0x1d}, + {0x0, 0x95, 0x37, 0xa2, 0x6e, 0xfb, 0x59, 0xcc, 0xdc, 0x49, 0xeb, 0x7e, 0xb2, 0x27, 0x85, 0x10}, + {0x0, 0x85, 0x17, 0x92, 0x2e, 0xab, 0x39, 0xbc, 0x5c, 0xd9, 0x4b, 0xce, 0x72, 0xf7, 0x65, 0xe0}, + {0x0, 0x75, 0xea, 0x9f, 0xc9, 0xbc, 0x23, 0x56, 0x8f, 0xfa, 0x65, 0x10, 0x46, 0x33, 0xac, 0xd9}, + {0x0, 0x65, 0xca, 0xaf, 0x89, 0xec, 0x43, 0x26, 0xf, 0x6a, 0xc5, 0xa0, 0x86, 0xe3, 0x4c, 0x29}, + {0x0, 0x55, 0xaa, 0xff, 0x49, 0x1c, 0xe3, 0xb6, 0x92, 0xc7, 0x38, 0x6d, 0xdb, 0x8e, 0x71, 0x24}, + {0x0, 0x45, 0x8a, 0xcf, 0x9, 0x4c, 0x83, 0xc6, 0x12, 0x57, 0x98, 0xdd, 0x1b, 0x5e, 0x91, 0xd4}, + {0x0, 0x35, 0x6a, 0x5f, 0xd4, 0xe1, 0xbe, 0x8b, 0xb5, 0x80, 0xdf, 0xea, 0x61, 0x54, 0xb, 0x3e}, + {0x0, 0x25, 0x4a, 0x6f, 0x94, 0xb1, 0xde, 0xfb, 0x35, 0x10, 0x7f, 0x5a, 0xa1, 0x84, 0xeb, 0xce}, + {0x0, 0x15, 0x2a, 0x3f, 0x54, 0x41, 0x7e, 0x6b, 0xa8, 0xbd, 0x82, 0x97, 0xfc, 0xe9, 0xd6, 0xc3}, + {0x0, 0x5, 0xa, 0xf, 0x14, 0x11, 0x1e, 0x1b, 0x28, 0x2d, 0x22, 0x27, 0x3c, 0x39, 0x36, 0x33}, + {0x0, 0xd2, 0xb9, 0x6b, 0x6f, 0xbd, 0xd6, 0x4, 0xde, 0xc, 0x67, 0xb5, 0xb1, 0x63, 0x8, 0xda}, + {0x0, 0xc2, 0x99, 0x5b, 0x2f, 0xed, 0xb6, 0x74, 0x5e, 0x9c, 0xc7, 0x5, 0x71, 0xb3, 0xe8, 0x2a}, + {0x0, 0xf2, 0xf9, 0xb, 0xef, 0x1d, 0x16, 0xe4, 0xc3, 0x31, 0x3a, 0xc8, 0x2c, 0xde, 0xd5, 0x27}, + {0x0, 0xe2, 0xd9, 0x3b, 0xaf, 0x4d, 0x76, 0x94, 0x43, 0xa1, 0x9a, 0x78, 0xec, 0xe, 0x35, 0xd7}, + {0x0, 0x92, 0x39, 0xab, 0x72, 0xe0, 0x4b, 0xd9, 0xe4, 0x76, 0xdd, 0x4f, 0x96, 0x4, 0xaf, 0x3d}, + {0x0, 0x82, 0x19, 0x9b, 0x32, 0xb0, 0x2b, 0xa9, 0x64, 0xe6, 0x7d, 0xff, 0x56, 0xd4, 0x4f, 0xcd}, + {0x0, 0xb2, 0x79, 0xcb, 0xf2, 0x40, 0x8b, 0x39, 0xf9, 0x4b, 0x80, 0x32, 0xb, 0xb9, 0x72, 0xc0}, + {0x0, 0xa2, 0x59, 0xfb, 0xb2, 0x10, 0xeb, 0x49, 0x79, 0xdb, 0x20, 0x82, 0xcb, 0x69, 0x92, 0x30}, + {0x0, 0x52, 0xa4, 0xf6, 0x55, 0x7, 0xf1, 0xa3, 0xaa, 0xf8, 0xe, 0x5c, 0xff, 0xad, 0x5b, 0x9}, + {0x0, 0x42, 0x84, 0xc6, 0x15, 0x57, 0x91, 0xd3, 0x2a, 0x68, 0xae, 0xec, 0x3f, 0x7d, 0xbb, 0xf9}, + {0x0, 0x72, 0xe4, 0x96, 0xd5, 0xa7, 0x31, 0x43, 0xb7, 0xc5, 0x53, 0x21, 0x62, 0x10, 0x86, 0xf4}, + {0x0, 0x62, 0xc4, 0xa6, 0x95, 0xf7, 0x51, 0x33, 0x37, 0x55, 0xf3, 0x91, 0xa2, 0xc0, 0x66, 0x4}, + {0x0, 0x12, 0x24, 0x36, 0x48, 0x5a, 0x6c, 0x7e, 0x90, 0x82, 0xb4, 0xa6, 0xd8, 0xca, 0xfc, 0xee}, + {0x0, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e}, + {0x0, 0x32, 0x64, 0x56, 0xc8, 0xfa, 0xac, 0x9e, 0x8d, 0xbf, 0xe9, 0xdb, 0x45, 0x77, 0x21, 0x13}, + {0x0, 0x22, 0x44, 0x66, 0x88, 0xaa, 0xcc, 0xee, 0xd, 0x2f, 0x49, 0x6b, 0x85, 0xa7, 0xc1, 0xe3}, + {0x0, 0xcf, 0x83, 0x4c, 0x1b, 0xd4, 0x98, 0x57, 0x36, 0xf9, 0xb5, 0x7a, 0x2d, 0xe2, 0xae, 0x61}, + {0x0, 0xdf, 0xa3, 0x7c, 0x5b, 0x84, 0xf8, 0x27, 0xb6, 0x69, 0x15, 0xca, 0xed, 0x32, 0x4e, 0x91}, + {0x0, 0xef, 0xc3, 0x2c, 0x9b, 0x74, 0x58, 0xb7, 0x2b, 0xc4, 0xe8, 0x7, 0xb0, 0x5f, 0x73, 0x9c}, + {0x0, 0xff, 0xe3, 0x1c, 0xdb, 0x24, 0x38, 0xc7, 0xab, 0x54, 0x48, 0xb7, 0x70, 0x8f, 0x93, 0x6c}, + {0x0, 0x8f, 0x3, 0x8c, 0x6, 0x89, 0x5, 0x8a, 0xc, 0x83, 0xf, 0x80, 0xa, 0x85, 0x9, 0x86}, + {0x0, 0x9f, 0x23, 0xbc, 0x46, 0xd9, 0x65, 0xfa, 0x8c, 0x13, 0xaf, 0x30, 0xca, 0x55, 0xe9, 0x76}, + {0x0, 0xaf, 0x43, 0xec, 0x86, 0x29, 0xc5, 0x6a, 0x11, 0xbe, 0x52, 0xfd, 0x97, 0x38, 0xd4, 0x7b}, + {0x0, 0xbf, 0x63, 0xdc, 0xc6, 0x79, 0xa5, 0x1a, 0x91, 0x2e, 0xf2, 0x4d, 0x57, 0xe8, 0x34, 0x8b}, + {0x0, 0x4f, 0x9e, 0xd1, 0x21, 0x6e, 0xbf, 0xf0, 0x42, 0xd, 0xdc, 0x93, 0x63, 0x2c, 0xfd, 0xb2}, + {0x0, 0x5f, 0xbe, 0xe1, 0x61, 0x3e, 0xdf, 0x80, 0xc2, 0x9d, 0x7c, 0x23, 0xa3, 0xfc, 0x1d, 0x42}, + {0x0, 0x6f, 0xde, 0xb1, 0xa1, 0xce, 0x7f, 0x10, 0x5f, 0x30, 0x81, 0xee, 0xfe, 0x91, 0x20, 0x4f}, + {0x0, 0x7f, 0xfe, 0x81, 0xe1, 0x9e, 0x1f, 0x60, 0xdf, 0xa0, 0x21, 0x5e, 0x3e, 0x41, 0xc0, 0xbf}, + {0x0, 0xf, 0x1e, 0x11, 0x3c, 0x33, 0x22, 0x2d, 0x78, 0x77, 0x66, 0x69, 0x44, 0x4b, 0x5a, 0x55}, + {0x0, 0x1f, 0x3e, 0x21, 0x7c, 0x63, 0x42, 0x5d, 0xf8, 0xe7, 0xc6, 0xd9, 0x84, 0x9b, 0xba, 0xa5}, + {0x0, 0x2f, 0x5e, 0x71, 0xbc, 0x93, 0xe2, 0xcd, 0x65, 0x4a, 0x3b, 0x14, 0xd9, 0xf6, 0x87, 0xa8}, + {0x0, 0x3f, 0x7e, 0x41, 0xfc, 0xc3, 0x82, 0xbd, 0xe5, 0xda, 0x9b, 0xa4, 0x19, 0x26, 0x67, 0x58}, + {0x0, 0x9c, 0x25, 0xb9, 0x4a, 0xd6, 0x6f, 0xf3, 0x94, 0x8, 0xb1, 0x2d, 0xde, 0x42, 0xfb, 0x67}, + {0x0, 0x8c, 0x5, 0x89, 0xa, 0x86, 0xf, 0x83, 0x14, 0x98, 0x11, 0x9d, 0x1e, 0x92, 0x1b, 0x97}, + {0x0, 0xbc, 0x65, 0xd9, 0xca, 0x76, 0xaf, 0x13, 0x89, 0x35, 0xec, 0x50, 0x43, 0xff, 0x26, 0x9a}, + {0x0, 0xac, 0x45, 0xe9, 0x8a, 0x26, 0xcf, 0x63, 0x9, 0xa5, 0x4c, 0xe0, 0x83, 0x2f, 0xc6, 0x6a}, + {0x0, 0xdc, 0xa5, 0x79, 0x57, 0x8b, 0xf2, 0x2e, 0xae, 0x72, 0xb, 0xd7, 0xf9, 0x25, 0x5c, 0x80}, + {0x0, 0xcc, 0x85, 0x49, 0x17, 0xdb, 0x92, 0x5e, 0x2e, 0xe2, 0xab, 0x67, 0x39, 0xf5, 0xbc, 0x70}, + {0x0, 0xfc, 0xe5, 0x19, 0xd7, 0x2b, 0x32, 0xce, 0xb3, 0x4f, 0x56, 0xaa, 0x64, 0x98, 0x81, 0x7d}, + {0x0, 0xec, 0xc5, 0x29, 0x97, 0x7b, 0x52, 0xbe, 0x33, 0xdf, 0xf6, 0x1a, 0xa4, 0x48, 0x61, 0x8d}, + {0x0, 0x1c, 0x38, 0x24, 0x70, 0x6c, 0x48, 0x54, 0xe0, 0xfc, 0xd8, 0xc4, 0x90, 0x8c, 0xa8, 0xb4}, + {0x0, 0xc, 0x18, 0x14, 0x30, 0x3c, 0x28, 0x24, 0x60, 0x6c, 0x78, 0x74, 0x50, 0x5c, 0x48, 0x44}, + {0x0, 0x3c, 0x78, 0x44, 0xf0, 0xcc, 0x88, 0xb4, 0xfd, 0xc1, 0x85, 0xb9, 0xd, 0x31, 0x75, 0x49}, + {0x0, 0x2c, 0x58, 0x74, 0xb0, 0x9c, 0xe8, 0xc4, 0x7d, 0x51, 0x25, 0x9, 0xcd, 0xe1, 0x95, 0xb9}, + {0x0, 0x5c, 0xb8, 0xe4, 0x6d, 0x31, 0xd5, 0x89, 0xda, 0x86, 0x62, 0x3e, 0xb7, 0xeb, 0xf, 0x53}, + {0x0, 0x4c, 0x98, 0xd4, 0x2d, 0x61, 0xb5, 0xf9, 0x5a, 0x16, 0xc2, 0x8e, 0x77, 0x3b, 0xef, 0xa3}, + {0x0, 0x7c, 0xf8, 0x84, 0xed, 0x91, 0x15, 0x69, 0xc7, 0xbb, 0x3f, 0x43, 0x2a, 0x56, 0xd2, 0xae}, + {0x0, 0x6c, 0xd8, 0xb4, 0xad, 0xc1, 0x75, 0x19, 0x47, 0x2b, 0x9f, 0xf3, 0xea, 0x86, 0x32, 0x5e}, + {0x0, 0x81, 0x1f, 0x9e, 0x3e, 0xbf, 0x21, 0xa0, 0x7c, 0xfd, 0x63, 0xe2, 0x42, 0xc3, 0x5d, 0xdc}, + {0x0, 0x91, 0x3f, 0xae, 0x7e, 0xef, 0x41, 0xd0, 0xfc, 0x6d, 0xc3, 0x52, 0x82, 0x13, 0xbd, 0x2c}, + {0x0, 0xa1, 0x5f, 0xfe, 0xbe, 0x1f, 0xe1, 0x40, 0x61, 0xc0, 0x3e, 0x9f, 0xdf, 0x7e, 0x80, 0x21}, + {0x0, 0xb1, 0x7f, 0xce, 0xfe, 0x4f, 0x81, 0x30, 0xe1, 0x50, 0x9e, 0x2f, 0x1f, 0xae, 0x60, 0xd1}, + {0x0, 0xc1, 0x9f, 0x5e, 0x23, 0xe2, 0xbc, 0x7d, 0x46, 0x87, 0xd9, 0x18, 0x65, 0xa4, 0xfa, 0x3b}, + {0x0, 0xd1, 0xbf, 0x6e, 0x63, 0xb2, 0xdc, 0xd, 0xc6, 0x17, 0x79, 0xa8, 0xa5, 0x74, 0x1a, 0xcb}, + {0x0, 0xe1, 0xdf, 0x3e, 0xa3, 0x42, 0x7c, 0x9d, 0x5b, 0xba, 0x84, 0x65, 0xf8, 0x19, 0x27, 0xc6}, + {0x0, 0xf1, 0xff, 0xe, 0xe3, 0x12, 0x1c, 0xed, 0xdb, 0x2a, 0x24, 0xd5, 0x38, 0xc9, 0xc7, 0x36}, + {0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf}, + {0x0, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff}, + {0x0, 0x21, 0x42, 0x63, 0x84, 0xa5, 0xc6, 0xe7, 0x15, 0x34, 0x57, 0x76, 0x91, 0xb0, 0xd3, 0xf2}, + {0x0, 0x31, 0x62, 0x53, 0xc4, 0xf5, 0xa6, 0x97, 0x95, 0xa4, 0xf7, 0xc6, 0x51, 0x60, 0x33, 0x2}, + {0x0, 0x41, 0x82, 0xc3, 0x19, 0x58, 0x9b, 0xda, 0x32, 0x73, 0xb0, 0xf1, 0x2b, 0x6a, 0xa9, 0xe8}, + {0x0, 0x51, 0xa2, 0xf3, 0x59, 0x8, 0xfb, 0xaa, 0xb2, 0xe3, 0x10, 0x41, 0xeb, 0xba, 0x49, 0x18}, + {0x0, 0x61, 0xc2, 0xa3, 0x99, 0xf8, 0x5b, 0x3a, 0x2f, 0x4e, 0xed, 0x8c, 0xb6, 0xd7, 0x74, 0x15}, + {0x0, 0x71, 0xe2, 0x93, 0xd9, 0xa8, 0x3b, 0x4a, 0xaf, 0xde, 0x4d, 0x3c, 0x76, 0x7, 0x94, 0xe5}, + {0x0, 0xa6, 0x51, 0xf7, 0xa2, 0x4, 0xf3, 0x55, 0x59, 0xff, 0x8, 0xae, 0xfb, 0x5d, 0xaa, 0xc}, + {0x0, 0xb6, 0x71, 0xc7, 0xe2, 0x54, 0x93, 0x25, 0xd9, 0x6f, 0xa8, 0x1e, 0x3b, 0x8d, 0x4a, 0xfc}, + {0x0, 0x86, 0x11, 0x97, 0x22, 0xa4, 0x33, 0xb5, 0x44, 0xc2, 0x55, 0xd3, 0x66, 0xe0, 0x77, 0xf1}, + {0x0, 0x96, 0x31, 0xa7, 0x62, 0xf4, 0x53, 0xc5, 0xc4, 0x52, 0xf5, 0x63, 0xa6, 0x30, 0x97, 0x1}, + {0x0, 0xe6, 0xd1, 0x37, 0xbf, 0x59, 0x6e, 0x88, 0x63, 0x85, 0xb2, 0x54, 0xdc, 0x3a, 0xd, 0xeb}, + {0x0, 0xf6, 0xf1, 0x7, 0xff, 0x9, 0xe, 0xf8, 0xe3, 0x15, 0x12, 0xe4, 0x1c, 0xea, 0xed, 0x1b}, + {0x0, 0xc6, 0x91, 0x57, 0x3f, 0xf9, 0xae, 0x68, 0x7e, 0xb8, 0xef, 0x29, 0x41, 0x87, 0xd0, 0x16}, + {0x0, 0xd6, 0xb1, 0x67, 0x7f, 0xa9, 0xce, 0x18, 0xfe, 0x28, 0x4f, 0x99, 0x81, 0x57, 0x30, 0xe6}, + {0x0, 0x26, 0x4c, 0x6a, 0x98, 0xbe, 0xd4, 0xf2, 0x2d, 0xb, 0x61, 0x47, 0xb5, 0x93, 0xf9, 0xdf}, + {0x0, 0x36, 0x6c, 0x5a, 0xd8, 0xee, 0xb4, 0x82, 0xad, 0x9b, 0xc1, 0xf7, 0x75, 0x43, 0x19, 0x2f}, + {0x0, 0x6, 0xc, 0xa, 0x18, 0x1e, 0x14, 0x12, 0x30, 0x36, 0x3c, 0x3a, 0x28, 0x2e, 0x24, 0x22}, + {0x0, 0x16, 0x2c, 0x3a, 0x58, 0x4e, 0x74, 0x62, 0xb0, 0xa6, 0x9c, 0x8a, 0xe8, 0xfe, 0xc4, 0xd2}, + {0x0, 0x66, 0xcc, 0xaa, 0x85, 0xe3, 0x49, 0x2f, 0x17, 0x71, 0xdb, 0xbd, 0x92, 0xf4, 0x5e, 0x38}, + {0x0, 0x76, 0xec, 0x9a, 0xc5, 0xb3, 0x29, 0x5f, 0x97, 0xe1, 0x7b, 0xd, 0x52, 0x24, 0xbe, 0xc8}, + {0x0, 0x46, 0x8c, 0xca, 0x5, 0x43, 0x89, 0xcf, 0xa, 0x4c, 0x86, 0xc0, 0xf, 0x49, 0x83, 0xc5}, + {0x0, 0x56, 0xac, 0xfa, 0x45, 0x13, 0xe9, 0xbf, 0x8a, 0xdc, 0x26, 0x70, 0xcf, 0x99, 0x63, 0x35}, + {0x0, 0xbb, 0x6b, 0xd0, 0xd6, 0x6d, 0xbd, 0x6, 0xb1, 0xa, 0xda, 0x61, 0x67, 0xdc, 0xc, 0xb7}, + {0x0, 0xab, 0x4b, 0xe0, 0x96, 0x3d, 0xdd, 0x76, 0x31, 0x9a, 0x7a, 0xd1, 0xa7, 0xc, 0xec, 0x47}, + {0x0, 0x9b, 0x2b, 0xb0, 0x56, 0xcd, 0x7d, 0xe6, 0xac, 0x37, 0x87, 0x1c, 0xfa, 0x61, 0xd1, 0x4a}, + {0x0, 0x8b, 0xb, 0x80, 0x16, 0x9d, 0x1d, 0x96, 0x2c, 0xa7, 0x27, 0xac, 0x3a, 0xb1, 0x31, 0xba}, + {0x0, 0xfb, 0xeb, 0x10, 0xcb, 0x30, 0x20, 0xdb, 0x8b, 0x70, 0x60, 0x9b, 0x40, 0xbb, 0xab, 0x50}, + {0x0, 0xeb, 0xcb, 0x20, 0x8b, 0x60, 0x40, 0xab, 0xb, 0xe0, 0xc0, 0x2b, 0x80, 0x6b, 0x4b, 0xa0}, + {0x0, 0xdb, 0xab, 0x70, 0x4b, 0x90, 0xe0, 0x3b, 0x96, 0x4d, 0x3d, 0xe6, 0xdd, 0x6, 0x76, 0xad}, + {0x0, 0xcb, 0x8b, 0x40, 0xb, 0xc0, 0x80, 0x4b, 0x16, 0xdd, 0x9d, 0x56, 0x1d, 0xd6, 0x96, 0x5d}, + {0x0, 0x3b, 0x76, 0x4d, 0xec, 0xd7, 0x9a, 0xa1, 0xc5, 0xfe, 0xb3, 0x88, 0x29, 0x12, 0x5f, 0x64}, + {0x0, 0x2b, 0x56, 0x7d, 0xac, 0x87, 0xfa, 0xd1, 0x45, 0x6e, 0x13, 0x38, 0xe9, 0xc2, 0xbf, 0x94}, + {0x0, 0x1b, 0x36, 0x2d, 0x6c, 0x77, 0x5a, 0x41, 0xd8, 0xc3, 0xee, 0xf5, 0xb4, 0xaf, 0x82, 0x99}, + {0x0, 0xb, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69}, + {0x0, 0x7b, 0xf6, 0x8d, 0xf1, 0x8a, 0x7, 0x7c, 0xff, 0x84, 0x9, 0x72, 0xe, 0x75, 0xf8, 0x83}, + {0x0, 0x6b, 0xd6, 0xbd, 0xb1, 0xda, 0x67, 0xc, 0x7f, 0x14, 0xa9, 0xc2, 0xce, 0xa5, 0x18, 0x73}, + {0x0, 0x5b, 0xb6, 0xed, 0x71, 0x2a, 0xc7, 0x9c, 0xe2, 0xb9, 0x54, 0xf, 0x93, 0xc8, 0x25, 0x7e}, + {0x0, 0x4b, 0x96, 0xdd, 0x31, 0x7a, 0xa7, 0xec, 0x62, 0x29, 0xf4, 0xbf, 0x53, 0x18, 0xc5, 0x8e}} + +// galMultiply multiplies to elements of the field. +// Uses lookup table ~40% faster +func galMultiply(a, b byte) byte { + return mulTable[a][b] +} + +// Original function: +/* +// galMultiply multiplies to elements of the field. +func galMultiply(a, b byte) byte { + if a == 0 || b == 0 { + return 0 + } + logA := int(logTable[a]) + logB := int(logTable[b]) + return expTable[logA+logB] +} +*/ + +// galDivide is inverse of galMultiply. +func galDivide(a, b byte) byte { + if a == 0 { + return 0 + } + if b == 0 { + panic("Argument 'divisor' is 0") + } + logA := int(logTable[a]) + logB := int(logTable[b]) + logResult := logA - logB + if logResult < 0 { + logResult += 255 + } + return expTable[logResult] +} + +// Computes a**n. +// +// The result will be the same as multiplying a times itself n times. +func galExp(a byte, n int) byte { + if n == 0 { + return 1 + } + if a == 0 { + return 0 + } + + logA := logTable[a] + logResult := int(logA) * n + for logResult >= 255 { + logResult -= 255 + } + return expTable[logResult] +} + +func genAvx2Matrix(matrixRows [][]byte, inputs, inIdx, outputs int, dst []byte) []byte { + if !avx2CodeGen { + panic("codegen not enabled") + } + total := inputs * outputs + + // Duplicated in+out + wantBytes := total * 32 * 2 + if cap(dst) < wantBytes { + dst = make([]byte, wantBytes) + } else { + dst = dst[:wantBytes] + } + for i, row := range matrixRows[:outputs] { + for j, idx := range row[inIdx : inIdx+inputs] { + dstIdx := (j*outputs + i) * 64 + dstPart := dst[dstIdx:] + dstPart = dstPart[:64] + lo := mulTableLow[idx][:] + hi := mulTableHigh[idx][:] + copy(dstPart[:16], lo) + copy(dstPart[16:32], lo) + copy(dstPart[32:48], hi) + copy(dstPart[48:64], hi) + } + } + return dst +} diff --git a/vendor/github.com/klauspost/reedsolomon/galoisAvx512_amd64.go b/vendor/github.com/klauspost/reedsolomon/galoisAvx512_amd64.go new file mode 100644 index 0000000..79207e6 --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/galoisAvx512_amd64.go @@ -0,0 +1,339 @@ +//go:build !noasm && !appengine && !gccgo +// +build !noasm,!appengine,!gccgo + +// Copyright 2015, Klaus Post, see LICENSE for details. +// Copyright 2019, Minio, Inc. + +package reedsolomon + +import ( + "sync" +) + +//go:noescape +func _galMulAVX512Parallel81(in, out [][]byte, matrix *[matrixSize81]byte, addTo bool) + +//go:noescape +func _galMulAVX512Parallel82(in, out [][]byte, matrix *[matrixSize82]byte, addTo bool) + +//go:noescape +func _galMulAVX512Parallel84(in, out [][]byte, matrix *[matrixSize84]byte, addTo bool) + +const ( + dimIn = 8 // Number of input rows processed simultaneously + dimOut81 = 1 // Number of output rows processed simultaneously for x1 routine + dimOut82 = 2 // Number of output rows processed simultaneously for x2 routine + dimOut84 = 4 // Number of output rows processed simultaneously for x4 routine + matrixSize81 = (16 + 16) * dimIn * dimOut81 // Dimension of slice of matrix coefficient passed into x1 routine + matrixSize82 = (16 + 16) * dimIn * dimOut82 // Dimension of slice of matrix coefficient passed into x2 routine + matrixSize84 = (16 + 16) * dimIn * dimOut84 // Dimension of slice of matrix coefficient passed into x4 routine +) + +// Construct block of matrix coefficients for single output row in parallel +func setupMatrix81(matrixRows [][]byte, inputOffset, outputOffset int, matrix *[matrixSize81]byte) { + offset := 0 + for c := inputOffset; c < inputOffset+dimIn; c++ { + for iRow := outputOffset; iRow < outputOffset+dimOut81; iRow++ { + if c < len(matrixRows[iRow]) { + coeff := matrixRows[iRow][c] + copy(matrix[offset*32:], mulTableLow[coeff][:]) + copy(matrix[offset*32+16:], mulTableHigh[coeff][:]) + } else { + // coefficients not used for this input shard (so null out) + v := matrix[offset*32 : offset*32+32] + for i := range v { + v[i] = 0 + } + } + offset += dimIn + if offset >= dimIn*dimOut81 { + offset -= dimIn*dimOut81 - 1 + } + } + } +} + +// Construct block of matrix coefficients for 2 output rows in parallel +func setupMatrix82(matrixRows [][]byte, inputOffset, outputOffset int, matrix *[matrixSize82]byte) { + offset := 0 + for c := inputOffset; c < inputOffset+dimIn; c++ { + for iRow := outputOffset; iRow < outputOffset+dimOut82; iRow++ { + if c < len(matrixRows[iRow]) { + coeff := matrixRows[iRow][c] + copy(matrix[offset*32:], mulTableLow[coeff][:]) + copy(matrix[offset*32+16:], mulTableHigh[coeff][:]) + } else { + // coefficients not used for this input shard (so null out) + v := matrix[offset*32 : offset*32+32] + for i := range v { + v[i] = 0 + } + } + offset += dimIn + if offset >= dimIn*dimOut82 { + offset -= dimIn*dimOut82 - 1 + } + } + } +} + +// Construct block of matrix coefficients for 4 output rows in parallel +func setupMatrix84(matrixRows [][]byte, inputOffset, outputOffset int, matrix *[matrixSize84]byte) { + offset := 0 + for c := inputOffset; c < inputOffset+dimIn; c++ { + for iRow := outputOffset; iRow < outputOffset+dimOut84; iRow++ { + if c < len(matrixRows[iRow]) { + coeff := matrixRows[iRow][c] + copy(matrix[offset*32:], mulTableLow[coeff][:]) + copy(matrix[offset*32+16:], mulTableHigh[coeff][:]) + } else { + // coefficients not used for this input shard (so null out) + v := matrix[offset*32 : offset*32+32] + for i := range v { + v[i] = 0 + } + } + offset += dimIn + if offset >= dimIn*dimOut84 { + offset -= dimIn*dimOut84 - 1 + } + } + } +} + +// Invoke AVX512 routine for single output row in parallel +func galMulAVX512Parallel81(in, out [][]byte, matrixRows [][]byte, inputOffset, outputOffset, start, stop int, matrix81 *[matrixSize81]byte) { + done := stop - start + if done <= 0 { + return + } + + inputEnd := inputOffset + dimIn + if inputEnd > len(in) { + inputEnd = len(in) + } + outputEnd := outputOffset + dimOut81 + if outputEnd > len(out) { + outputEnd = len(out) + } + + // We know the max size, alloc temp array. + var inTmp [dimIn][]byte + for i, v := range in[inputOffset:inputEnd] { + inTmp[i] = v[start:stop] + } + var outTmp [dimOut81][]byte + for i, v := range out[outputOffset:outputEnd] { + outTmp[i] = v[start:stop] + } + + addTo := inputOffset != 0 // Except for the first input column, add to previous results + _galMulAVX512Parallel81(inTmp[:inputEnd-inputOffset], outTmp[:outputEnd-outputOffset], matrix81, addTo) + + done = start + ((done >> 6) << 6) + if done < stop { + galMulAVX512LastInput(inputOffset, inputEnd, outputOffset, outputEnd, matrixRows, done, stop, out, in) + } +} + +// Invoke AVX512 routine for 2 output rows in parallel +func galMulAVX512Parallel82(in, out [][]byte, matrixRows [][]byte, inputOffset, outputOffset, start, stop int, matrix82 *[matrixSize82]byte) { + done := stop - start + if done <= 0 { + return + } + + inputEnd := inputOffset + dimIn + if inputEnd > len(in) { + inputEnd = len(in) + } + outputEnd := outputOffset + dimOut82 + if outputEnd > len(out) { + outputEnd = len(out) + } + + // We know the max size, alloc temp array. + var inTmp [dimIn][]byte + for i, v := range in[inputOffset:inputEnd] { + inTmp[i] = v[start:stop] + } + var outTmp [dimOut82][]byte + for i, v := range out[outputOffset:outputEnd] { + outTmp[i] = v[start:stop] + } + + addTo := inputOffset != 0 // Except for the first input column, add to previous results + _galMulAVX512Parallel82(inTmp[:inputEnd-inputOffset], outTmp[:outputEnd-outputOffset], matrix82, addTo) + + done = start + ((done >> 6) << 6) + if done < stop { + galMulAVX512LastInput(inputOffset, inputEnd, outputOffset, outputEnd, matrixRows, done, stop, out, in) + } +} + +// Invoke AVX512 routine for 4 output rows in parallel +func galMulAVX512Parallel84(in, out [][]byte, matrixRows [][]byte, inputOffset, outputOffset, start, stop int, matrix84 *[matrixSize84]byte) { + done := stop - start + if done <= 0 { + return + } + + inputEnd := inputOffset + dimIn + if inputEnd > len(in) { + inputEnd = len(in) + } + outputEnd := outputOffset + dimOut84 + if outputEnd > len(out) { + outputEnd = len(out) + } + + // We know the max size, alloc temp array. + var inTmp [dimIn][]byte + for i, v := range in[inputOffset:inputEnd] { + inTmp[i] = v[start:stop] + } + var outTmp [dimOut84][]byte + for i, v := range out[outputOffset:outputEnd] { + outTmp[i] = v[start:stop] + } + + addTo := inputOffset != 0 // Except for the first input column, add to previous results + _galMulAVX512Parallel84(inTmp[:inputEnd-inputOffset], outTmp[:outputEnd-outputOffset], matrix84, addTo) + + done = start + ((done >> 6) << 6) + if done < stop { + galMulAVX512LastInput(inputOffset, inputEnd, outputOffset, outputEnd, matrixRows, done, stop, out, in) + } +} + +func galMulAVX512LastInput(inputOffset int, inputEnd int, outputOffset int, outputEnd int, matrixRows [][]byte, done int, stop int, out [][]byte, in [][]byte) { + for c := inputOffset; c < inputEnd; c++ { + for iRow := outputOffset; iRow < outputEnd; iRow++ { + if c < len(matrixRows[iRow]) { + mt := mulTable[matrixRows[iRow][c]][:256] + for i := done; i < stop; i++ { + if c == 0 { // only set value for first input column + out[iRow][i] = mt[in[c][i]] + } else { // and add for all others + out[iRow][i] ^= mt[in[c][i]] + } + } + } + } + } +} + +// Perform the same as codeSomeShards, but taking advantage of +// AVX512 parallelism for up to 4x faster execution as compared to AVX2 +func (r *reedSolomon) codeSomeShardsAvx512(matrixRows, inputs, outputs [][]byte, byteCount int) { + // Process using no goroutines + outputCount := len(outputs) + start, end := 0, r.o.perRound + if end > byteCount { + end = byteCount + } + for start < byteCount { + matrix84 := [matrixSize84]byte{} + matrix82 := [matrixSize82]byte{} + matrix81 := [matrixSize81]byte{} + + outputRow := 0 + // First process (multiple) batches of 4 output rows in parallel + if outputRow+dimOut84 <= outputCount { + for ; outputRow+dimOut84 <= outputCount; outputRow += dimOut84 { + for inputRow := 0; inputRow < len(inputs); inputRow += dimIn { + setupMatrix84(matrixRows, inputRow, outputRow, &matrix84) + galMulAVX512Parallel84(inputs, outputs, matrixRows, inputRow, outputRow, start, end, &matrix84) + } + } + } + // Then process a (single) batch of 2 output rows in parallel + if outputRow+dimOut82 <= outputCount { + for inputRow := 0; inputRow < len(inputs); inputRow += dimIn { + setupMatrix82(matrixRows, inputRow, outputRow, &matrix82) + galMulAVX512Parallel82(inputs, outputs, matrixRows, inputRow, outputRow, start, end, &matrix82) + } + outputRow += dimOut82 + } + // Lastly, we may have a single output row left (for uneven parity) + if outputRow < outputCount { + for inputRow := 0; inputRow < len(inputs); inputRow += dimIn { + setupMatrix81(matrixRows, inputRow, outputRow, &matrix81) + galMulAVX512Parallel81(inputs, outputs, matrixRows, inputRow, outputRow, start, end, &matrix81) + } + } + + start = end + end += r.o.perRound + if end > byteCount { + end = byteCount + } + } +} + +// Perform the same as codeSomeShards, but taking advantage of +// AVX512 parallelism for up to 4x faster execution as compared to AVX2 +func (r *reedSolomon) codeSomeShardsAvx512P(matrixRows, inputs, outputs [][]byte, byteCount int) { + outputCount := len(outputs) + var wg sync.WaitGroup + do := byteCount / r.o.maxGoroutines + if do < r.o.minSplitSize { + do = r.o.minSplitSize + } + // Make sizes divisible by 64 + do = (do + 63) & (^63) + start := 0 + for start < byteCount { + if start+do > byteCount { + do = byteCount - start + } + wg.Add(1) + go func(grStart, grStop int) { + start, stop := grStart, grStart+r.o.perRound + if stop > grStop { + stop = grStop + } + // Loop for each round. + matrix84 := [matrixSize84]byte{} + matrix82 := [matrixSize82]byte{} + matrix81 := [matrixSize81]byte{} + for start < grStop { + outputRow := 0 + // First process (multiple) batches of 4 output rows in parallel + if outputRow+dimOut84 <= outputCount { + // 1K matrix buffer + for ; outputRow+dimOut84 <= outputCount; outputRow += dimOut84 { + for inputRow := 0; inputRow < len(inputs); inputRow += dimIn { + setupMatrix84(matrixRows, inputRow, outputRow, &matrix84) + galMulAVX512Parallel84(inputs, outputs, matrixRows, inputRow, outputRow, start, stop, &matrix84) + } + } + } + // Then process a (single) batch of 2 output rows in parallel + if outputRow+dimOut82 <= outputCount { + // 512B matrix buffer + for inputRow := 0; inputRow < len(inputs); inputRow += dimIn { + setupMatrix82(matrixRows, inputRow, outputRow, &matrix82) + galMulAVX512Parallel82(inputs, outputs, matrixRows, inputRow, outputRow, start, stop, &matrix82) + } + outputRow += dimOut82 + } + // Lastly, we may have a single output row left (for uneven parity) + if outputRow < outputCount { + for inputRow := 0; inputRow < len(inputs); inputRow += dimIn { + setupMatrix81(matrixRows, inputRow, outputRow, &matrix81) + galMulAVX512Parallel81(inputs, outputs, matrixRows, inputRow, outputRow, start, stop, &matrix81) + } + } + start = stop + stop += r.o.perRound + if stop > grStop { + stop = grStop + } + } + wg.Done() + }(start, start+do) + start += do + } + wg.Wait() +} diff --git a/vendor/github.com/klauspost/reedsolomon/galoisAvx512_amd64.s b/vendor/github.com/klauspost/reedsolomon/galoisAvx512_amd64.s new file mode 100644 index 0000000..09f1d0d --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/galoisAvx512_amd64.s @@ -0,0 +1,402 @@ +//+build !noasm +//+build !appengine +//+build !gccgo + +// Copyright 2015, Klaus Post, see LICENSE for details. +// Copyright 2019, Minio, Inc. + +#define LOAD(OFFSET) \ + MOVQ OFFSET(SI), BX \ + VMOVDQU64 (BX)(R11*1), Z0 \ + VPSRLQ $4, Z0, Z1 \ // high input + VPANDQ Z2, Z0, Z0 \ // low input + VPANDQ Z2, Z1, Z1 // high input + +#define GALOIS_MUL(MUL_LO, MUL_HI, LO, HI, OUT) \ + VPSHUFB Z0, MUL_LO, LO \ // mul low part + VPSHUFB Z1, MUL_HI, HI \ // mul high part + VPTERNLOGD $0x96, LO, HI, OUT + +#define GALOIS(C1, C2, IN, LO, HI, OUT) \ + VSHUFI64X2 $C1, IN, IN, LO \ + VSHUFI64X2 $C2, IN, IN, HI \ + GALOIS_MUL(LO, HI, LO, HI, OUT) + +// +// Process single output row from a total of 8 input rows +// +// func _galMulAVX512Parallel81(in, out [][]byte, matrix *[matrixSize81]byte, addTo bool) +TEXT ·_galMulAVX512Parallel81(SB), 7, $0 + MOVQ in+0(FP), SI + MOVQ 8(SI), R9 // R9: len(in) + SHRQ $6, R9 // len(in) / 64 + TESTQ R9, R9 + JZ done_avx512_parallel81 + + MOVQ matrix+48(FP), SI + VMOVDQU64 0x000(SI), Z16 + VMOVDQU64 0x040(SI), Z17 + VMOVDQU64 0x080(SI), Z18 + VMOVDQU64 0x0c0(SI), Z19 + + // Initialize multiplication constants + VSHUFI64X2 $0x55, Z16, Z16, Z20 + VSHUFI64X2 $0xaa, Z16, Z16, Z24 + VSHUFI64X2 $0xff, Z16, Z16, Z28 + VSHUFI64X2 $0x00, Z16, Z16, Z16 + + VSHUFI64X2 $0x55, Z17, Z17, Z21 + VSHUFI64X2 $0xaa, Z17, Z17, Z25 + VSHUFI64X2 $0xff, Z17, Z17, Z29 + VSHUFI64X2 $0x00, Z17, Z17, Z17 + + VSHUFI64X2 $0x55, Z18, Z18, Z22 + VSHUFI64X2 $0xaa, Z18, Z18, Z26 + VSHUFI64X2 $0xff, Z18, Z18, Z30 + VSHUFI64X2 $0x00, Z18, Z18, Z18 + + VSHUFI64X2 $0x55, Z19, Z19, Z23 + VSHUFI64X2 $0xaa, Z19, Z19, Z27 + VSHUFI64X2 $0xff, Z19, Z19, Z31 + VSHUFI64X2 $0x00, Z19, Z19, Z19 + + MOVQ $15, BX + VPBROADCASTB BX, Z2 + + MOVB addTo+56(FP), AX + IMULQ $-0x1, AX + KMOVQ AX, K1 + MOVQ in+0(FP), SI // SI: &in + MOVQ in_len+8(FP), AX // number of inputs + XORQ R11, R11 + MOVQ out+24(FP), DX + MOVQ (DX), DX // DX: &out[0][0] + +loopback_avx512_parallel81: + VMOVDQU64.Z (DX), K1, Z4 + + LOAD(0x00) // &in[0][0] + GALOIS_MUL(Z16, Z20, Z14, Z15, Z4) + + CMPQ AX, $1 + JE skip_avx512_parallel81 + + LOAD(0x18) // &in[1][0] + GALOIS_MUL(Z24, Z28, Z14, Z15, Z4) + + CMPQ AX, $2 + JE skip_avx512_parallel81 + + LOAD(0x30) // &in[2][0] + GALOIS_MUL(Z17, Z21, Z14, Z15, Z4) + + CMPQ AX, $3 + JE skip_avx512_parallel81 + + LOAD(0x48) // &in[3][0] + GALOIS_MUL(Z25, Z29, Z14, Z15, Z4) + + CMPQ AX, $4 + JE skip_avx512_parallel81 + + LOAD(0x60) // &in[4][0] + GALOIS_MUL(Z18, Z22, Z14, Z15, Z4) + + CMPQ AX, $5 + JE skip_avx512_parallel81 + + LOAD(0x78) // &in[5][0] + GALOIS_MUL(Z26, Z30, Z14, Z15, Z4) + + CMPQ AX, $6 + JE skip_avx512_parallel81 + + LOAD(0x90) // &in[6][0] + GALOIS_MUL(Z19, Z23, Z14, Z15, Z4) + + CMPQ AX, $7 + JE skip_avx512_parallel81 + + LOAD(0xa8) // &in[7][0] + GALOIS_MUL(Z27, Z31, Z14, Z15, Z4) + +skip_avx512_parallel81: + VMOVDQU64 Z4, (DX) + + ADDQ $64, R11 // in4+=64 + + ADDQ $64, DX // out+=64 + + SUBQ $1, R9 + JNZ loopback_avx512_parallel81 + +done_avx512_parallel81: + VZEROUPPER + RET + +// +// Process 2 output rows in parallel from a total of 8 input rows +// +// func _galMulAVX512Parallel82(in, out [][]byte, matrix *[matrixSize82]byte, addTo bool) +TEXT ·_galMulAVX512Parallel82(SB), 7, $0 + MOVQ in+0(FP), SI + MOVQ 8(SI), R9 // R9: len(in) + SHRQ $6, R9 // len(in) / 64 + TESTQ R9, R9 + JZ done_avx512_parallel82 + + MOVQ matrix+48(FP), SI + VMOVDQU64 0x000(SI), Z16 + VMOVDQU64 0x040(SI), Z17 + VMOVDQU64 0x080(SI), Z18 + VMOVDQU64 0x0c0(SI), Z19 + VMOVDQU64 0x100(SI), Z20 + VMOVDQU64 0x140(SI), Z21 + VMOVDQU64 0x180(SI), Z22 + VMOVDQU64 0x1c0(SI), Z23 + + // Initialize multiplication constants + VSHUFI64X2 $0x55, Z16, Z16, Z24 + VSHUFI64X2 $0xaa, Z16, Z16, Z25 + VSHUFI64X2 $0xff, Z16, Z16, Z26 + VSHUFI64X2 $0x00, Z16, Z16, Z16 + + VSHUFI64X2 $0x55, Z20, Z20, Z27 + VSHUFI64X2 $0xaa, Z20, Z20, Z28 + VSHUFI64X2 $0xff, Z20, Z20, Z29 + VSHUFI64X2 $0x00, Z20, Z20, Z20 + + VSHUFI64X2 $0x55, Z17, Z17, Z30 + VSHUFI64X2 $0xaa, Z17, Z17, Z31 + VSHUFI64X2 $0xff, Z17, Z17, Z11 + VSHUFI64X2 $0x00, Z17, Z17, Z17 + + VSHUFI64X2 $0x55, Z21, Z21, Z8 + VSHUFI64X2 $0xaa, Z21, Z21, Z9 + VSHUFI64X2 $0xff, Z21, Z21, Z10 + VSHUFI64X2 $0x00, Z21, Z21, Z21 + + MOVQ $15, BX + VPBROADCASTB BX, Z2 + + MOVB addTo+56(FP), AX + IMULQ $-0x1, AX + KMOVQ AX, K1 + MOVQ in+0(FP), SI // SI: &in + MOVQ in_len+8(FP), AX // number of inputs + XORQ R11, R11 + MOVQ out+24(FP), DX + MOVQ 24(DX), CX // CX: &out[1][0] + MOVQ (DX), DX // DX: &out[0][0] + +loopback_avx512_parallel82: + VMOVDQU64.Z (DX), K1, Z4 + VMOVDQU64.Z (CX), K1, Z5 + + LOAD(0x00) // &in[0][0] + GALOIS_MUL(Z16, Z24, Z14, Z15, Z4) + GALOIS_MUL(Z20, Z27, Z12, Z13, Z5) + + CMPQ AX, $1 + JE skip_avx512_parallel82 + + LOAD(0x18) // &in[1][0] + GALOIS_MUL(Z25, Z26, Z14, Z15, Z4) + GALOIS_MUL(Z28, Z29, Z12, Z13, Z5) + + CMPQ AX, $2 + JE skip_avx512_parallel82 + + LOAD(0x30) // &in[2][0] + GALOIS_MUL(Z17, Z30, Z14, Z15, Z4) + GALOIS_MUL(Z21, Z8, Z12, Z13, Z5) + + CMPQ AX, $3 + JE skip_avx512_parallel82 + + LOAD(0x48) // &in[3][0] + GALOIS_MUL(Z31, Z11, Z14, Z15, Z4) + GALOIS_MUL(Z9, Z10, Z12, Z13, Z5) + + CMPQ AX, $4 + JE skip_avx512_parallel82 + + LOAD(0x60) // &in[4][0] + GALOIS(0x00, 0x55, Z18, Z14, Z15, Z4) + GALOIS(0x00, 0x55, Z22, Z12, Z13, Z5) + + CMPQ AX, $5 + JE skip_avx512_parallel82 + + LOAD(0x78) // &in[5][0] + GALOIS(0xaa, 0xff, Z18, Z14, Z15, Z4) + GALOIS(0xaa, 0xff, Z22, Z12, Z13, Z5) + + CMPQ AX, $6 + JE skip_avx512_parallel82 + + LOAD(0x90) // &in[6][0] + GALOIS(0x00, 0x55, Z19, Z14, Z15, Z4) + GALOIS(0x00, 0x55, Z23, Z12, Z13, Z5) + + CMPQ AX, $7 + JE skip_avx512_parallel82 + + LOAD(0xa8) // &in[7][0] + GALOIS(0xaa, 0xff, Z19, Z14, Z15, Z4) + GALOIS(0xaa, 0xff, Z23, Z12, Z13, Z5) + +skip_avx512_parallel82: + VMOVDQU64 Z4, (DX) + VMOVDQU64 Z5, (CX) + + ADDQ $64, R11 // in4+=64 + + ADDQ $64, DX // out+=64 + ADDQ $64, CX // out2+=64 + + SUBQ $1, R9 + JNZ loopback_avx512_parallel82 + +done_avx512_parallel82: + VZEROUPPER + RET + +// +// Process 4 output rows in parallel from a total of 8 input rows +// +// func _galMulAVX512Parallel84(in, out [][]byte, matrix *[matrixSize84]byte, addTo bool) +TEXT ·_galMulAVX512Parallel84(SB), 7, $0 + MOVQ in+0(FP), SI + MOVQ 8(SI), R9 // R9: len(in) + SHRQ $6, R9 // len(in) / 64 + TESTQ R9, R9 + JZ done_avx512_parallel84 + + MOVQ matrix+48(FP), SI + VMOVDQU64 0x000(SI), Z16 + VMOVDQU64 0x040(SI), Z17 + VMOVDQU64 0x080(SI), Z18 + VMOVDQU64 0x0c0(SI), Z19 + VMOVDQU64 0x100(SI), Z20 + VMOVDQU64 0x140(SI), Z21 + VMOVDQU64 0x180(SI), Z22 + VMOVDQU64 0x1c0(SI), Z23 + VMOVDQU64 0x200(SI), Z24 + VMOVDQU64 0x240(SI), Z25 + VMOVDQU64 0x280(SI), Z26 + VMOVDQU64 0x2c0(SI), Z27 + VMOVDQU64 0x300(SI), Z28 + VMOVDQU64 0x340(SI), Z29 + VMOVDQU64 0x380(SI), Z30 + VMOVDQU64 0x3c0(SI), Z31 + + MOVQ $15, BX + VPBROADCASTB BX, Z2 + + MOVB addTo+56(FP), AX + IMULQ $-0x1, AX + KMOVQ AX, K1 + MOVQ in+0(FP), SI // SI: &in + MOVQ in_len+8(FP), AX // number of inputs + XORQ R11, R11 + MOVQ out+24(FP), DX + MOVQ 24(DX), CX // CX: &out[1][0] + MOVQ 48(DX), R10 // R10: &out[2][0] + MOVQ 72(DX), R12 // R12: &out[3][0] + MOVQ (DX), DX // DX: &out[0][0] + +loopback_avx512_parallel84: + VMOVDQU64.Z (DX), K1, Z4 + VMOVDQU64.Z (CX), K1, Z5 + VMOVDQU64.Z (R10), K1, Z6 + VMOVDQU64.Z (R12), K1, Z7 + + LOAD(0x00) // &in[0][0] + GALOIS(0x00, 0x55, Z16, Z14, Z15, Z4) + GALOIS(0x00, 0x55, Z20, Z12, Z13, Z5) + GALOIS(0x00, 0x55, Z24, Z10, Z11, Z6) + GALOIS(0x00, 0x55, Z28, Z8, Z9, Z7) + + CMPQ AX, $1 + JE skip_avx512_parallel84 + + LOAD(0x18) // &in[1][0] + GALOIS(0xaa, 0xff, Z16, Z14, Z15, Z4) + GALOIS(0xaa, 0xff, Z20, Z12, Z13, Z5) + GALOIS(0xaa, 0xff, Z24, Z10, Z11, Z6) + GALOIS(0xaa, 0xff, Z28, Z8, Z9, Z7) + + CMPQ AX, $2 + JE skip_avx512_parallel84 + + LOAD(0x30) // &in[2][0] + GALOIS(0x00, 0x55, Z17, Z14, Z15, Z4) + GALOIS(0x00, 0x55, Z21, Z12, Z13, Z5) + GALOIS(0x00, 0x55, Z25, Z10, Z11, Z6) + GALOIS(0x00, 0x55, Z29, Z8, Z9, Z7) + + CMPQ AX, $3 + JE skip_avx512_parallel84 + + LOAD(0x48) // &in[3][0] + GALOIS(0xaa, 0xff, Z17, Z14, Z15, Z4) + GALOIS(0xaa, 0xff, Z21, Z12, Z13, Z5) + GALOIS(0xaa, 0xff, Z25, Z10, Z11, Z6) + GALOIS(0xaa, 0xff, Z29, Z8, Z9, Z7) + + CMPQ AX, $4 + JE skip_avx512_parallel84 + + LOAD(0x60) // &in[4][0] + GALOIS(0x00, 0x55, Z18, Z14, Z15, Z4) + GALOIS(0x00, 0x55, Z22, Z12, Z13, Z5) + GALOIS(0x00, 0x55, Z26, Z10, Z11, Z6) + GALOIS(0x00, 0x55, Z30, Z8, Z9, Z7) + + CMPQ AX, $5 + JE skip_avx512_parallel84 + + LOAD(0x78) // &in[5][0] + GALOIS(0xaa, 0xff, Z18, Z14, Z15, Z4) + GALOIS(0xaa, 0xff, Z22, Z12, Z13, Z5) + GALOIS(0xaa, 0xff, Z26, Z10, Z11, Z6) + GALOIS(0xaa, 0xff, Z30, Z8, Z9, Z7) + + CMPQ AX, $6 + JE skip_avx512_parallel84 + + LOAD(0x90) // &in[6][0] + GALOIS(0x00, 0x55, Z19, Z14, Z15, Z4) + GALOIS(0x00, 0x55, Z23, Z12, Z13, Z5) + GALOIS(0x00, 0x55, Z27, Z10, Z11, Z6) + GALOIS(0x00, 0x55, Z31, Z8, Z9, Z7) + + CMPQ AX, $7 + JE skip_avx512_parallel84 + + LOAD(0xa8) // &in[7][0] + GALOIS(0xaa, 0xff, Z19, Z14, Z15, Z4) + GALOIS(0xaa, 0xff, Z23, Z12, Z13, Z5) + GALOIS(0xaa, 0xff, Z27, Z10, Z11, Z6) + GALOIS(0xaa, 0xff, Z31, Z8, Z9, Z7) + +skip_avx512_parallel84: + VMOVDQU64 Z4, (DX) + VMOVDQU64 Z5, (CX) + VMOVDQU64 Z6, (R10) + VMOVDQU64 Z7, (R12) + + ADDQ $64, R11 // in4+=64 + + ADDQ $64, DX // out+=64 + ADDQ $64, CX // out2+=64 + ADDQ $64, R10 // out3+=64 + ADDQ $64, R12 // out4+=64 + + SUBQ $1, R9 + JNZ loopback_avx512_parallel84 + +done_avx512_parallel84: + VZEROUPPER + RET diff --git a/vendor/github.com/klauspost/reedsolomon/galois_amd64.go b/vendor/github.com/klauspost/reedsolomon/galois_amd64.go new file mode 100644 index 0000000..d722e31 --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/galois_amd64.go @@ -0,0 +1,140 @@ +//go:build !noasm && !appengine && !gccgo +// +build !noasm,!appengine,!gccgo + +// Copyright 2015, Klaus Post, see LICENSE for details. + +package reedsolomon + +//go:noescape +func galMulSSSE3(low, high, in, out []byte) + +//go:noescape +func galMulSSSE3Xor(low, high, in, out []byte) + +//go:noescape +func galMulAVX2Xor(low, high, in, out []byte) + +//go:noescape +func galMulAVX2(low, high, in, out []byte) + +//go:noescape +func sSE2XorSlice(in, out []byte) + +//go:noescape +func galMulAVX2Xor_64(low, high, in, out []byte) + +//go:noescape +func galMulAVX2_64(low, high, in, out []byte) + +//go:noescape +func sSE2XorSlice_64(in, out []byte) + +// This is what the assembler routines do in blocks of 16 bytes: +/* +func galMulSSSE3(low, high, in, out []byte) { + for n, input := range in { + l := input & 0xf + h := input >> 4 + out[n] = low[l] ^ high[h] + } +} + +func galMulSSSE3Xor(low, high, in, out []byte) { + for n, input := range in { + l := input & 0xf + h := input >> 4 + out[n] ^= low[l] ^ high[h] + } +} +*/ + +// bigSwitchover is the size where 64 bytes are processed per loop. +const bigSwitchover = 128 + +func galMulSlice(c byte, in, out []byte, o *options) { + if c == 1 { + copy(out, in) + return + } + if o.useAVX2 { + if len(in) >= bigSwitchover { + galMulAVX2_64(mulTableLow[c][:], mulTableHigh[c][:], in, out) + done := (len(in) >> 6) << 6 + in = in[done:] + out = out[done:] + } + if len(in) > 32 { + galMulAVX2(mulTableLow[c][:], mulTableHigh[c][:], in, out) + done := (len(in) >> 5) << 5 + in = in[done:] + out = out[done:] + } + } else if o.useSSSE3 { + galMulSSSE3(mulTableLow[c][:], mulTableHigh[c][:], in, out) + done := (len(in) >> 4) << 4 + in = in[done:] + out = out[done:] + } + out = out[:len(in)] + mt := mulTable[c][:256] + for i := range in { + out[i] = mt[in[i]] + } +} + +func galMulSliceXor(c byte, in, out []byte, o *options) { + if c == 1 { + sliceXor(in, out, o) + return + } + + if o.useAVX2 { + if len(in) >= bigSwitchover { + galMulAVX2Xor_64(mulTableLow[c][:], mulTableHigh[c][:], in, out) + done := (len(in) >> 6) << 6 + in = in[done:] + out = out[done:] + } + if len(in) >= 32 { + galMulAVX2Xor(mulTableLow[c][:], mulTableHigh[c][:], in, out) + done := (len(in) >> 5) << 5 + in = in[done:] + out = out[done:] + } + } else if o.useSSSE3 { + galMulSSSE3Xor(mulTableLow[c][:], mulTableHigh[c][:], in, out) + done := (len(in) >> 4) << 4 + in = in[done:] + out = out[done:] + } + if len(in) == 0 { + return + } + out = out[:len(in)] + mt := mulTable[c][:256] + for i := range in { + out[i] ^= mt[in[i]] + } +} + +// simple slice xor +func sliceXor(in, out []byte, o *options) { + if o.useSSE2 { + if len(in) >= bigSwitchover { + sSE2XorSlice_64(in, out) + done := (len(in) >> 6) << 6 + in = in[done:] + out = out[done:] + } + if len(in) >= 16 { + sSE2XorSlice(in, out) + done := (len(in) >> 4) << 4 + in = in[done:] + out = out[done:] + } + } + out = out[:len(in)] + for i := range in { + out[i] ^= in[i] + } +} diff --git a/vendor/github.com/klauspost/reedsolomon/galois_amd64.s b/vendor/github.com/klauspost/reedsolomon/galois_amd64.s new file mode 100644 index 0000000..f1dc8d5 --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/galois_amd64.s @@ -0,0 +1,370 @@ +//+build !noasm +//+build !appengine +//+build !gccgo + +// Copyright 2015, Klaus Post, see LICENSE for details. + +// Based on http://www.snia.org/sites/default/files2/SDC2013/presentations/NewThinking/EthanMiller_Screaming_Fast_Galois_Field%20Arithmetic_SIMD%20Instructions.pdf +// and http://jerasure.org/jerasure/gf-complete/tree/master + +// func galMulSSSE3Xor(low, high, in, out []byte) +TEXT ·galMulSSSE3Xor(SB), 7, $0 + MOVQ low+0(FP), SI // SI: &low + MOVQ high+24(FP), DX // DX: &high + MOVOU (SI), X6 // X6 low + MOVOU (DX), X7 // X7: high + MOVQ $15, BX // BX: low mask + MOVQ BX, X8 + PXOR X5, X5 + MOVQ in+48(FP), SI // R11: &in + MOVQ in_len+56(FP), R9 // R9: len(in) + MOVQ out+72(FP), DX // DX: &out + PSHUFB X5, X8 // X8: lomask (unpacked) + SHRQ $4, R9 // len(in) / 16 + MOVQ SI, AX + MOVQ DX, BX + ANDQ $15, AX + ANDQ $15, BX + CMPQ R9, $0 + JEQ done_xor + ORQ AX, BX + CMPQ BX, $0 + JNZ loopback_xor + +loopback_xor_aligned: + MOVOA (SI), X0 // in[x] + MOVOA (DX), X4 // out[x] + MOVOA X0, X1 // in[x] + MOVOA X6, X2 // low copy + MOVOA X7, X3 // high copy + PSRLQ $4, X1 // X1: high input + PAND X8, X0 // X0: low input + PAND X8, X1 // X0: high input + PSHUFB X0, X2 // X2: mul low part + PSHUFB X1, X3 // X3: mul high part + PXOR X2, X3 // X3: Result + PXOR X4, X3 // X3: Result xor existing out + MOVOA X3, (DX) // Store + ADDQ $16, SI // in+=16 + ADDQ $16, DX // out+=16 + SUBQ $1, R9 + JNZ loopback_xor_aligned + JMP done_xor + +loopback_xor: + MOVOU (SI), X0 // in[x] + MOVOU (DX), X4 // out[x] + MOVOU X0, X1 // in[x] + MOVOU X6, X2 // low copy + MOVOU X7, X3 // high copy + PSRLQ $4, X1 // X1: high input + PAND X8, X0 // X0: low input + PAND X8, X1 // X0: high input + PSHUFB X0, X2 // X2: mul low part + PSHUFB X1, X3 // X3: mul high part + PXOR X2, X3 // X3: Result + PXOR X4, X3 // X3: Result xor existing out + MOVOU X3, (DX) // Store + ADDQ $16, SI // in+=16 + ADDQ $16, DX // out+=16 + SUBQ $1, R9 + JNZ loopback_xor + +done_xor: + RET + +// func galMulSSSE3(low, high, in, out []byte) +TEXT ·galMulSSSE3(SB), 7, $0 + MOVQ low+0(FP), SI // SI: &low + MOVQ high+24(FP), DX // DX: &high + MOVOU (SI), X6 // X6 low + MOVOU (DX), X7 // X7: high + MOVQ $15, BX // BX: low mask + MOVQ BX, X8 + PXOR X5, X5 + MOVQ in+48(FP), SI // R11: &in + MOVQ in_len+56(FP), R9 // R9: len(in) + MOVQ out+72(FP), DX // DX: &out + PSHUFB X5, X8 // X8: lomask (unpacked) + MOVQ SI, AX + MOVQ DX, BX + SHRQ $4, R9 // len(in) / 16 + ANDQ $15, AX + ANDQ $15, BX + CMPQ R9, $0 + JEQ done + ORQ AX, BX + CMPQ BX, $0 + JNZ loopback + +loopback_aligned: + MOVOA (SI), X0 // in[x] + MOVOA X0, X1 // in[x] + MOVOA X6, X2 // low copy + MOVOA X7, X3 // high copy + PSRLQ $4, X1 // X1: high input + PAND X8, X0 // X0: low input + PAND X8, X1 // X0: high input + PSHUFB X0, X2 // X2: mul low part + PSHUFB X1, X3 // X3: mul high part + PXOR X2, X3 // X3: Result + MOVOA X3, (DX) // Store + ADDQ $16, SI // in+=16 + ADDQ $16, DX // out+=16 + SUBQ $1, R9 + JNZ loopback_aligned + JMP done + +loopback: + MOVOU (SI), X0 // in[x] + MOVOU X0, X1 // in[x] + MOVOA X6, X2 // low copy + MOVOA X7, X3 // high copy + PSRLQ $4, X1 // X1: high input + PAND X8, X0 // X0: low input + PAND X8, X1 // X0: high input + PSHUFB X0, X2 // X2: mul low part + PSHUFB X1, X3 // X3: mul high part + PXOR X2, X3 // X3: Result + MOVOU X3, (DX) // Store + ADDQ $16, SI // in+=16 + ADDQ $16, DX // out+=16 + SUBQ $1, R9 + JNZ loopback + +done: + RET + +// func galMulAVX2Xor(low, high, in, out []byte) +TEXT ·galMulAVX2Xor(SB), 7, $0 + MOVQ low+0(FP), SI // SI: &low + MOVQ high+24(FP), DX // DX: &high + MOVQ $15, BX // BX: low mask + MOVQ BX, X5 + MOVOU (SI), X6 // X6: low + MOVOU (DX), X7 // X7: high + MOVQ in_len+56(FP), R9 // R9: len(in) + + VINSERTI128 $1, X6, Y6, Y6 // low + VINSERTI128 $1, X7, Y7, Y7 // high + VPBROADCASTB X5, Y8 // Y8: lomask (unpacked) + + SHRQ $5, R9 // len(in) / 32 + MOVQ out+72(FP), DX // DX: &out + MOVQ in+48(FP), SI // SI: &in + TESTQ R9, R9 + JZ done_xor_avx2 + +loopback_xor_avx2: + VMOVDQU (SI), Y0 + VMOVDQU (DX), Y4 + VPSRLQ $4, Y0, Y1 // Y1: high input + VPAND Y8, Y0, Y0 // Y0: low input + VPAND Y8, Y1, Y1 // Y1: high input + VPSHUFB Y0, Y6, Y2 // Y2: mul low part + VPSHUFB Y1, Y7, Y3 // Y3: mul high part + VPXOR Y3, Y2, Y3 // Y3: Result + VPXOR Y4, Y3, Y4 // Y4: Result + VMOVDQU Y4, (DX) + + ADDQ $32, SI // in+=32 + ADDQ $32, DX // out+=32 + SUBQ $1, R9 + JNZ loopback_xor_avx2 + +done_xor_avx2: + VZEROUPPER + RET + +// func galMulAVX2(low, high, in, out []byte) +TEXT ·galMulAVX2(SB), 7, $0 + MOVQ low+0(FP), SI // SI: &low + MOVQ high+24(FP), DX // DX: &high + MOVQ $15, BX // BX: low mask + MOVQ BX, X5 + MOVOU (SI), X6 // X6: low + MOVOU (DX), X7 // X7: high + MOVQ in_len+56(FP), R9 // R9: len(in) + + VINSERTI128 $1, X6, Y6, Y6 // low + VINSERTI128 $1, X7, Y7, Y7 // high + VPBROADCASTB X5, Y8 // Y8: lomask (unpacked) + + SHRQ $5, R9 // len(in) / 32 + MOVQ out+72(FP), DX // DX: &out + MOVQ in+48(FP), SI // SI: &in + TESTQ R9, R9 + JZ done_avx2 + +loopback_avx2: + VMOVDQU (SI), Y0 + VPSRLQ $4, Y0, Y1 // Y1: high input + VPAND Y8, Y0, Y0 // Y0: low input + VPAND Y8, Y1, Y1 // Y1: high input + VPSHUFB Y0, Y6, Y2 // Y2: mul low part + VPSHUFB Y1, Y7, Y3 // Y3: mul high part + VPXOR Y3, Y2, Y4 // Y4: Result + VMOVDQU Y4, (DX) + + ADDQ $32, SI // in+=32 + ADDQ $32, DX // out+=32 + SUBQ $1, R9 + JNZ loopback_avx2 + +done_avx2: + VZEROUPPER + RET + +// func sSE2XorSlice(in, out []byte) +TEXT ·sSE2XorSlice(SB), 7, $0 + MOVQ in+0(FP), SI // SI: &in + MOVQ in_len+8(FP), R9 // R9: len(in) + MOVQ out+24(FP), DX // DX: &out + SHRQ $4, R9 // len(in) / 16 + CMPQ R9, $0 + JEQ done_xor_sse2 + +loopback_xor_sse2: + MOVOU (SI), X0 // in[x] + MOVOU (DX), X1 // out[x] + PXOR X0, X1 + MOVOU X1, (DX) + ADDQ $16, SI // in+=16 + ADDQ $16, DX // out+=16 + SUBQ $1, R9 + JNZ loopback_xor_sse2 + +done_xor_sse2: + RET + +// func galMulAVX2Xor_64(low, high, in, out []byte) +TEXT ·galMulAVX2Xor_64(SB), 7, $0 + MOVQ low+0(FP), SI // SI: &low + MOVQ high+24(FP), DX // DX: &high + MOVQ $15, BX // BX: low mask + MOVQ BX, X5 + MOVOU (SI), X6 // X6: low + MOVOU (DX), X7 // X7: high + MOVQ in_len+56(FP), R9 // R9: len(in) + + VINSERTI128 $1, X6, Y6, Y6 // low + VINSERTI128 $1, X7, Y7, Y7 // high + VPBROADCASTB X5, Y8 // Y8: lomask (unpacked) + + SHRQ $6, R9 // len(in) / 64 + MOVQ out+72(FP), DX // DX: &out + MOVQ in+48(FP), SI // SI: &in + TESTQ R9, R9 + JZ done_xor_avx2_64 + +loopback_xor_avx2_64: + VMOVDQU (SI), Y0 + VMOVDQU 32(SI), Y10 + VMOVDQU (DX), Y4 + VMOVDQU 32(DX), Y14 + VPSRLQ $4, Y0, Y1 // Y1: high input + VPSRLQ $4, Y10, Y11 // Y11: high input 2 + VPAND Y8, Y0, Y0 // Y0: low input + VPAND Y8, Y10, Y10 // Y10: low input 2 + VPAND Y8, Y1, Y1 // Y11: high input + VPAND Y8, Y11, Y11 // Y11: high input 2 + VPSHUFB Y0, Y6, Y2 // Y2: mul low part + VPSHUFB Y10, Y6, Y12 // Y12: mul low part 2 + VPSHUFB Y1, Y7, Y3 // Y3: mul high part + VPSHUFB Y11, Y7, Y13 // Y13: mul high part 2 + VPXOR Y3, Y2, Y3 // Y3: Result + VPXOR Y13, Y12, Y13 // Y13: Result 2 + VPXOR Y4, Y3, Y4 // Y4: Result + VPXOR Y14, Y13, Y14 // Y4: Result 2 + VMOVDQU Y4, (DX) + VMOVDQU Y14, 32(DX) + + ADDQ $64, SI // in+=64 + ADDQ $64, DX // out+=64 + SUBQ $1, R9 + JNZ loopback_xor_avx2_64 + +done_xor_avx2_64: + VZEROUPPER + RET + +// func galMulAVX2_64(low, high, in, out []byte) +TEXT ·galMulAVX2_64(SB), 7, $0 + MOVQ low+0(FP), SI // SI: &low + MOVQ high+24(FP), DX // DX: &high + MOVQ $15, BX // BX: low mask + MOVQ BX, X5 + MOVOU (SI), X6 // X6: low + MOVOU (DX), X7 // X7: high + MOVQ in_len+56(FP), R9 // R9: len(in) + + VINSERTI128 $1, X6, Y6, Y6 // low + VINSERTI128 $1, X7, Y7, Y7 // high + VPBROADCASTB X5, Y8 // Y8: lomask (unpacked) + + SHRQ $6, R9 // len(in) / 64 + MOVQ out+72(FP), DX // DX: &out + MOVQ in+48(FP), SI // SI: &in + TESTQ R9, R9 + JZ done_avx2_64 + +loopback_avx2_64: + VMOVDQU (SI), Y0 + VMOVDQU 32(SI), Y10 + VPSRLQ $4, Y0, Y1 // Y1: high input + VPSRLQ $4, Y10, Y11 // Y11: high input 2 + VPAND Y8, Y0, Y0 // Y0: low input + VPAND Y8, Y10, Y10 // Y10: low input + VPAND Y8, Y1, Y1 // Y1: high input + VPAND Y8, Y11, Y11 // Y11: high input 2 + VPSHUFB Y0, Y6, Y2 // Y2: mul low part + VPSHUFB Y10, Y6, Y12 // Y12: mul low part 2 + VPSHUFB Y1, Y7, Y3 // Y3: mul high part + VPSHUFB Y11, Y7, Y13 // Y13: mul high part 2 + VPXOR Y3, Y2, Y4 // Y4: Result + VPXOR Y13, Y12, Y14 // Y14: Result 2 + VMOVDQU Y4, (DX) + VMOVDQU Y14, 32(DX) + + ADDQ $64, SI // in+=64 + ADDQ $64, DX // out+=64 + SUBQ $1, R9 + JNZ loopback_avx2_64 + +done_avx2_64: + VZEROUPPER + RET + +// func sSE2XorSlice_64(in, out []byte) +TEXT ·sSE2XorSlice_64(SB), 7, $0 + MOVQ in+0(FP), SI // SI: &in + MOVQ in_len+8(FP), R9 // R9: len(in) + MOVQ out+24(FP), DX // DX: &out + SHRQ $6, R9 // len(in) / 64 + CMPQ R9, $0 + JEQ done_xor_sse2_64 + +loopback_xor_sse2_64: + MOVOU (SI), X0 // in[x] + MOVOU 16(SI), X2 // in[x] + MOVOU 32(SI), X4 // in[x] + MOVOU 48(SI), X6 // in[x] + MOVOU (DX), X1 // out[x] + MOVOU 16(DX), X3 // out[x] + MOVOU 32(DX), X5 // out[x] + MOVOU 48(DX), X7 // out[x] + PXOR X0, X1 + PXOR X2, X3 + PXOR X4, X5 + PXOR X6, X7 + MOVOU X1, (DX) + MOVOU X3, 16(DX) + MOVOU X5, 32(DX) + MOVOU X7, 48(DX) + ADDQ $64, SI // in+=64 + ADDQ $64, DX // out+=64 + SUBQ $1, R9 + JNZ loopback_xor_sse2_64 + +done_xor_sse2_64: + RET diff --git a/vendor/github.com/klauspost/reedsolomon/galois_arm64.go b/vendor/github.com/klauspost/reedsolomon/galois_arm64.go new file mode 100644 index 0000000..df79a98 --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/galois_arm64.go @@ -0,0 +1,66 @@ +//go:build !noasm && !appengine && !gccgo +// +build !noasm,!appengine,!gccgo + +// Copyright 2015, Klaus Post, see LICENSE for details. +// Copyright 2017, Minio, Inc. + +package reedsolomon + +//go:noescape +func galMulNEON(low, high, in, out []byte) + +//go:noescape +func galMulXorNEON(low, high, in, out []byte) + +//go:noescape +func galXorNEON(in, out []byte) + +func galMulSlice(c byte, in, out []byte, o *options) { + if c == 1 { + copy(out, in) + return + } + var done int + galMulNEON(mulTableLow[c][:], mulTableHigh[c][:], in, out) + done = (len(in) >> 5) << 5 + + remain := len(in) - done + if remain > 0 { + mt := mulTable[c][:256] + for i := done; i < len(in); i++ { + out[i] = mt[in[i]] + } + } +} + +func galMulSliceXor(c byte, in, out []byte, o *options) { + if c == 1 { + sliceXor(in, out, o) + return + } + var done int + galMulXorNEON(mulTableLow[c][:], mulTableHigh[c][:], in, out) + done = (len(in) >> 5) << 5 + + remain := len(in) - done + if remain > 0 { + mt := mulTable[c][:256] + for i := done; i < len(in); i++ { + out[i] ^= mt[in[i]] + } + } +} + +// simple slice xor +func sliceXor(in, out []byte, o *options) { + + galXorNEON(in, out) + done := (len(in) >> 5) << 5 + + remain := len(in) - done + if remain > 0 { + for i := done; i < len(in); i++ { + out[i] ^= in[i] + } + } +} diff --git a/vendor/github.com/klauspost/reedsolomon/galois_arm64.s b/vendor/github.com/klauspost/reedsolomon/galois_arm64.s new file mode 100644 index 0000000..3ae3237 --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/galois_arm64.s @@ -0,0 +1,127 @@ +//+build !noasm +//+build !appengine +//+build !gccgo + +// Copyright 2015, Klaus Post, see LICENSE for details. +// Copyright 2017, Minio, Inc. + +#define LOAD(LO1, LO2, HI1, HI2) \ + VLD1.P 32(R1), [LO1.B16, LO2.B16] \ + \ + \ // Get low input and high input + VUSHR $4, LO1.B16, HI1.B16 \ + VUSHR $4, LO2.B16, HI2.B16 \ + VAND V8.B16, LO1.B16, LO1.B16 \ + VAND V8.B16, LO2.B16, LO2.B16 + +#define GALOIS_MUL(MUL_LO, MUL_HI, OUT1, OUT2, TMP1, TMP2) \ + \ // Mul low part and mul high part + VTBL V0.B16, [MUL_LO.B16], OUT1.B16 \ + VTBL V10.B16, [MUL_HI.B16], OUT2.B16 \ + VTBL V1.B16, [MUL_LO.B16], TMP1.B16 \ + VTBL V11.B16, [MUL_HI.B16], TMP2.B16 \ + \ + \ // Combine results + VEOR OUT2.B16, OUT1.B16, OUT1.B16 \ + VEOR TMP2.B16, TMP1.B16, OUT2.B16 + +// func galMulNEON(low, high, in, out []byte) +TEXT ·galMulNEON(SB), 7, $0 + MOVD in_base+48(FP), R1 + MOVD in_len+56(FP), R2 // length of message + MOVD out_base+72(FP), R5 + SUBS $32, R2 + BMI complete + + MOVD low+0(FP), R10 // R10: &low + MOVD high+24(FP), R11 // R11: &high + VLD1 (R10), [V6.B16] + VLD1 (R11), [V7.B16] + + // + // Use an extra instruction below since `VDUP R3, V8.B16` generates assembler error + // WORD $0x4e010c68 // dup v8.16b, w3 + // + MOVD $0x0f, R3 + VMOV R3, V8.B[0] + VDUP V8.B[0], V8.B16 + +loop: + // Main loop + LOAD(V0, V1, V10, V11) + GALOIS_MUL(V6, V7, V4, V5, V14, V15) + + // Store result + VST1.P [V4.D2, V5.D2], 32(R5) + + SUBS $32, R2 + BPL loop + +complete: + RET + +// func galMulXorNEON(low, high, in, out []byte) +TEXT ·galMulXorNEON(SB), 7, $0 + MOVD in_base+48(FP), R1 + MOVD in_len+56(FP), R2 // length of message + MOVD out_base+72(FP), R5 + SUBS $32, R2 + BMI completeXor + + MOVD low+0(FP), R10 // R10: &low + MOVD high+24(FP), R11 // R11: &high + VLD1 (R10), [V6.B16] + VLD1 (R11), [V7.B16] + + // + // Use an extra instruction below since `VDUP R3, V8.B16` generates assembler error + // WORD $0x4e010c68 // dup v8.16b, w3 + // + MOVD $0x0f, R3 + VMOV R3, V8.B[0] + VDUP V8.B[0], V8.B16 + +loopXor: + // Main loop + VLD1 (R5), [V20.B16, V21.B16] + + LOAD(V0, V1, V10, V11) + GALOIS_MUL(V6, V7, V4, V5, V14, V15) + + VEOR V20.B16, V4.B16, V4.B16 + VEOR V21.B16, V5.B16, V5.B16 + + // Store result + VST1.P [V4.D2, V5.D2], 32(R5) + + SUBS $32, R2 + BPL loopXor + +completeXor: + RET + +// func galXorNEON(in, out []byte) +TEXT ·galXorNEON(SB), 7, $0 + MOVD in_base+0(FP), R1 + MOVD in_len+8(FP), R2 // length of message + MOVD out_base+24(FP), R5 + SUBS $32, R2 + BMI completeXor + +loopXor: + // Main loop + VLD1.P 32(R1), [V0.B16, V1.B16] + VLD1 (R5), [V20.B16, V21.B16] + + VEOR V20.B16, V0.B16, V4.B16 + VEOR V21.B16, V1.B16, V5.B16 + + // Store result + VST1.P [V4.D2, V5.D2], 32(R5) + + SUBS $32, R2 + BPL loopXor + +completeXor: + RET + diff --git a/vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.go b/vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.go new file mode 100644 index 0000000..817c7ea --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.go @@ -0,0 +1,1176 @@ +// Code generated by command: go run gen.go -out ../galois_gen_amd64.s -stubs ../galois_gen_amd64.go -pkg=reedsolomon. DO NOT EDIT. + +//go:build !appengine && !noasm && !nogen && gc +// +build !appengine,!noasm,!nogen,gc + +package reedsolomon + +// mulAvxTwo_1x1 takes 1 inputs and produces 1 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_1x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x1_64 takes 1 inputs and produces 1 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_1x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x1Xor takes 1 inputs and produces 1 outputs. +//go:noescape +func mulAvxTwo_1x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x1_64Xor takes 1 inputs and produces 1 outputs. +//go:noescape +func mulAvxTwo_1x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x2 takes 1 inputs and produces 2 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_1x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x2_64 takes 1 inputs and produces 2 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_1x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x2Xor takes 1 inputs and produces 2 outputs. +//go:noescape +func mulAvxTwo_1x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x2_64Xor takes 1 inputs and produces 2 outputs. +//go:noescape +func mulAvxTwo_1x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x3 takes 1 inputs and produces 3 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_1x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x3_64 takes 1 inputs and produces 3 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_1x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x3Xor takes 1 inputs and produces 3 outputs. +//go:noescape +func mulAvxTwo_1x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x3_64Xor takes 1 inputs and produces 3 outputs. +//go:noescape +func mulAvxTwo_1x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x4 takes 1 inputs and produces 4 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_1x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x4Xor takes 1 inputs and produces 4 outputs. +//go:noescape +func mulAvxTwo_1x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x5 takes 1 inputs and produces 5 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_1x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x5Xor takes 1 inputs and produces 5 outputs. +//go:noescape +func mulAvxTwo_1x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x6 takes 1 inputs and produces 6 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_1x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x6Xor takes 1 inputs and produces 6 outputs. +//go:noescape +func mulAvxTwo_1x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x7 takes 1 inputs and produces 7 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_1x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x7Xor takes 1 inputs and produces 7 outputs. +//go:noescape +func mulAvxTwo_1x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x8 takes 1 inputs and produces 8 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_1x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x8Xor takes 1 inputs and produces 8 outputs. +//go:noescape +func mulAvxTwo_1x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x9 takes 1 inputs and produces 9 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_1x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x9Xor takes 1 inputs and produces 9 outputs. +//go:noescape +func mulAvxTwo_1x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x10 takes 1 inputs and produces 10 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_1x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_1x10Xor takes 1 inputs and produces 10 outputs. +//go:noescape +func mulAvxTwo_1x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x1 takes 2 inputs and produces 1 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_2x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x1_64 takes 2 inputs and produces 1 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_2x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x1Xor takes 2 inputs and produces 1 outputs. +//go:noescape +func mulAvxTwo_2x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x1_64Xor takes 2 inputs and produces 1 outputs. +//go:noescape +func mulAvxTwo_2x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x2 takes 2 inputs and produces 2 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_2x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x2_64 takes 2 inputs and produces 2 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_2x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x2Xor takes 2 inputs and produces 2 outputs. +//go:noescape +func mulAvxTwo_2x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x2_64Xor takes 2 inputs and produces 2 outputs. +//go:noescape +func mulAvxTwo_2x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x3 takes 2 inputs and produces 3 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_2x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x3_64 takes 2 inputs and produces 3 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_2x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x3Xor takes 2 inputs and produces 3 outputs. +//go:noescape +func mulAvxTwo_2x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x3_64Xor takes 2 inputs and produces 3 outputs. +//go:noescape +func mulAvxTwo_2x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x4 takes 2 inputs and produces 4 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_2x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x4Xor takes 2 inputs and produces 4 outputs. +//go:noescape +func mulAvxTwo_2x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x5 takes 2 inputs and produces 5 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_2x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x5Xor takes 2 inputs and produces 5 outputs. +//go:noescape +func mulAvxTwo_2x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x6 takes 2 inputs and produces 6 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_2x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x6Xor takes 2 inputs and produces 6 outputs. +//go:noescape +func mulAvxTwo_2x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x7 takes 2 inputs and produces 7 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_2x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x7Xor takes 2 inputs and produces 7 outputs. +//go:noescape +func mulAvxTwo_2x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x8 takes 2 inputs and produces 8 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_2x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x8Xor takes 2 inputs and produces 8 outputs. +//go:noescape +func mulAvxTwo_2x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x9 takes 2 inputs and produces 9 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_2x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x9Xor takes 2 inputs and produces 9 outputs. +//go:noescape +func mulAvxTwo_2x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x10 takes 2 inputs and produces 10 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_2x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_2x10Xor takes 2 inputs and produces 10 outputs. +//go:noescape +func mulAvxTwo_2x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x1 takes 3 inputs and produces 1 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_3x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x1_64 takes 3 inputs and produces 1 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_3x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x1Xor takes 3 inputs and produces 1 outputs. +//go:noescape +func mulAvxTwo_3x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x1_64Xor takes 3 inputs and produces 1 outputs. +//go:noescape +func mulAvxTwo_3x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x2 takes 3 inputs and produces 2 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_3x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x2_64 takes 3 inputs and produces 2 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_3x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x2Xor takes 3 inputs and produces 2 outputs. +//go:noescape +func mulAvxTwo_3x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x2_64Xor takes 3 inputs and produces 2 outputs. +//go:noescape +func mulAvxTwo_3x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x3 takes 3 inputs and produces 3 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_3x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x3_64 takes 3 inputs and produces 3 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_3x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x3Xor takes 3 inputs and produces 3 outputs. +//go:noescape +func mulAvxTwo_3x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x3_64Xor takes 3 inputs and produces 3 outputs. +//go:noescape +func mulAvxTwo_3x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x4 takes 3 inputs and produces 4 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_3x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x4Xor takes 3 inputs and produces 4 outputs. +//go:noescape +func mulAvxTwo_3x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x5 takes 3 inputs and produces 5 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_3x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x5Xor takes 3 inputs and produces 5 outputs. +//go:noescape +func mulAvxTwo_3x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x6 takes 3 inputs and produces 6 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_3x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x6Xor takes 3 inputs and produces 6 outputs. +//go:noescape +func mulAvxTwo_3x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x7 takes 3 inputs and produces 7 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_3x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x7Xor takes 3 inputs and produces 7 outputs. +//go:noescape +func mulAvxTwo_3x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x8 takes 3 inputs and produces 8 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_3x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x8Xor takes 3 inputs and produces 8 outputs. +//go:noescape +func mulAvxTwo_3x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x9 takes 3 inputs and produces 9 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_3x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x9Xor takes 3 inputs and produces 9 outputs. +//go:noescape +func mulAvxTwo_3x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x10 takes 3 inputs and produces 10 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_3x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_3x10Xor takes 3 inputs and produces 10 outputs. +//go:noescape +func mulAvxTwo_3x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x1 takes 4 inputs and produces 1 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_4x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x1_64 takes 4 inputs and produces 1 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_4x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x1Xor takes 4 inputs and produces 1 outputs. +//go:noescape +func mulAvxTwo_4x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x1_64Xor takes 4 inputs and produces 1 outputs. +//go:noescape +func mulAvxTwo_4x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x2 takes 4 inputs and produces 2 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_4x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x2_64 takes 4 inputs and produces 2 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_4x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x2Xor takes 4 inputs and produces 2 outputs. +//go:noescape +func mulAvxTwo_4x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x2_64Xor takes 4 inputs and produces 2 outputs. +//go:noescape +func mulAvxTwo_4x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x3 takes 4 inputs and produces 3 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_4x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x3_64 takes 4 inputs and produces 3 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_4x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x3Xor takes 4 inputs and produces 3 outputs. +//go:noescape +func mulAvxTwo_4x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x3_64Xor takes 4 inputs and produces 3 outputs. +//go:noescape +func mulAvxTwo_4x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x4 takes 4 inputs and produces 4 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_4x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x4Xor takes 4 inputs and produces 4 outputs. +//go:noescape +func mulAvxTwo_4x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x5 takes 4 inputs and produces 5 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_4x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x5Xor takes 4 inputs and produces 5 outputs. +//go:noescape +func mulAvxTwo_4x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x6 takes 4 inputs and produces 6 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_4x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x6Xor takes 4 inputs and produces 6 outputs. +//go:noescape +func mulAvxTwo_4x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x7 takes 4 inputs and produces 7 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_4x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x7Xor takes 4 inputs and produces 7 outputs. +//go:noescape +func mulAvxTwo_4x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x8 takes 4 inputs and produces 8 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_4x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x8Xor takes 4 inputs and produces 8 outputs. +//go:noescape +func mulAvxTwo_4x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x9 takes 4 inputs and produces 9 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_4x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x9Xor takes 4 inputs and produces 9 outputs. +//go:noescape +func mulAvxTwo_4x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x10 takes 4 inputs and produces 10 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_4x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_4x10Xor takes 4 inputs and produces 10 outputs. +//go:noescape +func mulAvxTwo_4x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x1 takes 5 inputs and produces 1 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_5x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x1_64 takes 5 inputs and produces 1 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_5x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x1Xor takes 5 inputs and produces 1 outputs. +//go:noescape +func mulAvxTwo_5x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x1_64Xor takes 5 inputs and produces 1 outputs. +//go:noescape +func mulAvxTwo_5x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x2 takes 5 inputs and produces 2 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_5x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x2_64 takes 5 inputs and produces 2 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_5x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x2Xor takes 5 inputs and produces 2 outputs. +//go:noescape +func mulAvxTwo_5x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x2_64Xor takes 5 inputs and produces 2 outputs. +//go:noescape +func mulAvxTwo_5x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x3 takes 5 inputs and produces 3 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_5x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x3_64 takes 5 inputs and produces 3 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_5x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x3Xor takes 5 inputs and produces 3 outputs. +//go:noescape +func mulAvxTwo_5x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x3_64Xor takes 5 inputs and produces 3 outputs. +//go:noescape +func mulAvxTwo_5x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x4 takes 5 inputs and produces 4 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_5x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x4Xor takes 5 inputs and produces 4 outputs. +//go:noescape +func mulAvxTwo_5x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x5 takes 5 inputs and produces 5 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_5x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x5Xor takes 5 inputs and produces 5 outputs. +//go:noescape +func mulAvxTwo_5x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x6 takes 5 inputs and produces 6 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_5x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x6Xor takes 5 inputs and produces 6 outputs. +//go:noescape +func mulAvxTwo_5x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x7 takes 5 inputs and produces 7 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_5x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x7Xor takes 5 inputs and produces 7 outputs. +//go:noescape +func mulAvxTwo_5x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x8 takes 5 inputs and produces 8 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_5x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x8Xor takes 5 inputs and produces 8 outputs. +//go:noescape +func mulAvxTwo_5x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x9 takes 5 inputs and produces 9 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_5x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x9Xor takes 5 inputs and produces 9 outputs. +//go:noescape +func mulAvxTwo_5x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x10 takes 5 inputs and produces 10 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_5x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_5x10Xor takes 5 inputs and produces 10 outputs. +//go:noescape +func mulAvxTwo_5x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x1 takes 6 inputs and produces 1 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_6x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x1_64 takes 6 inputs and produces 1 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_6x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x1Xor takes 6 inputs and produces 1 outputs. +//go:noescape +func mulAvxTwo_6x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x1_64Xor takes 6 inputs and produces 1 outputs. +//go:noescape +func mulAvxTwo_6x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x2 takes 6 inputs and produces 2 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_6x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x2_64 takes 6 inputs and produces 2 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_6x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x2Xor takes 6 inputs and produces 2 outputs. +//go:noescape +func mulAvxTwo_6x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x2_64Xor takes 6 inputs and produces 2 outputs. +//go:noescape +func mulAvxTwo_6x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x3 takes 6 inputs and produces 3 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_6x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x3_64 takes 6 inputs and produces 3 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_6x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x3Xor takes 6 inputs and produces 3 outputs. +//go:noescape +func mulAvxTwo_6x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x3_64Xor takes 6 inputs and produces 3 outputs. +//go:noescape +func mulAvxTwo_6x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x4 takes 6 inputs and produces 4 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_6x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x4Xor takes 6 inputs and produces 4 outputs. +//go:noescape +func mulAvxTwo_6x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x5 takes 6 inputs and produces 5 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_6x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x5Xor takes 6 inputs and produces 5 outputs. +//go:noescape +func mulAvxTwo_6x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x6 takes 6 inputs and produces 6 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_6x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x6Xor takes 6 inputs and produces 6 outputs. +//go:noescape +func mulAvxTwo_6x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x7 takes 6 inputs and produces 7 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_6x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x7Xor takes 6 inputs and produces 7 outputs. +//go:noescape +func mulAvxTwo_6x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x8 takes 6 inputs and produces 8 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_6x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x8Xor takes 6 inputs and produces 8 outputs. +//go:noescape +func mulAvxTwo_6x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x9 takes 6 inputs and produces 9 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_6x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x9Xor takes 6 inputs and produces 9 outputs. +//go:noescape +func mulAvxTwo_6x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x10 takes 6 inputs and produces 10 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_6x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_6x10Xor takes 6 inputs and produces 10 outputs. +//go:noescape +func mulAvxTwo_6x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x1 takes 7 inputs and produces 1 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_7x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x1_64 takes 7 inputs and produces 1 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_7x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x1Xor takes 7 inputs and produces 1 outputs. +//go:noescape +func mulAvxTwo_7x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x1_64Xor takes 7 inputs and produces 1 outputs. +//go:noescape +func mulAvxTwo_7x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x2 takes 7 inputs and produces 2 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_7x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x2_64 takes 7 inputs and produces 2 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_7x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x2Xor takes 7 inputs and produces 2 outputs. +//go:noescape +func mulAvxTwo_7x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x2_64Xor takes 7 inputs and produces 2 outputs. +//go:noescape +func mulAvxTwo_7x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x3 takes 7 inputs and produces 3 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_7x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x3_64 takes 7 inputs and produces 3 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_7x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x3Xor takes 7 inputs and produces 3 outputs. +//go:noescape +func mulAvxTwo_7x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x3_64Xor takes 7 inputs and produces 3 outputs. +//go:noescape +func mulAvxTwo_7x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x4 takes 7 inputs and produces 4 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_7x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x4Xor takes 7 inputs and produces 4 outputs. +//go:noescape +func mulAvxTwo_7x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x5 takes 7 inputs and produces 5 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_7x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x5Xor takes 7 inputs and produces 5 outputs. +//go:noescape +func mulAvxTwo_7x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x6 takes 7 inputs and produces 6 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_7x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x6Xor takes 7 inputs and produces 6 outputs. +//go:noescape +func mulAvxTwo_7x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x7 takes 7 inputs and produces 7 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_7x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x7Xor takes 7 inputs and produces 7 outputs. +//go:noescape +func mulAvxTwo_7x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x8 takes 7 inputs and produces 8 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_7x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x8Xor takes 7 inputs and produces 8 outputs. +//go:noescape +func mulAvxTwo_7x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x9 takes 7 inputs and produces 9 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_7x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x9Xor takes 7 inputs and produces 9 outputs. +//go:noescape +func mulAvxTwo_7x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x10 takes 7 inputs and produces 10 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_7x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_7x10Xor takes 7 inputs and produces 10 outputs. +//go:noescape +func mulAvxTwo_7x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x1 takes 8 inputs and produces 1 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_8x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x1_64 takes 8 inputs and produces 1 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_8x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x1Xor takes 8 inputs and produces 1 outputs. +//go:noescape +func mulAvxTwo_8x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x1_64Xor takes 8 inputs and produces 1 outputs. +//go:noescape +func mulAvxTwo_8x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x2 takes 8 inputs and produces 2 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_8x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x2_64 takes 8 inputs and produces 2 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_8x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x2Xor takes 8 inputs and produces 2 outputs. +//go:noescape +func mulAvxTwo_8x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x2_64Xor takes 8 inputs and produces 2 outputs. +//go:noescape +func mulAvxTwo_8x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x3 takes 8 inputs and produces 3 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_8x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x3_64 takes 8 inputs and produces 3 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_8x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x3Xor takes 8 inputs and produces 3 outputs. +//go:noescape +func mulAvxTwo_8x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x3_64Xor takes 8 inputs and produces 3 outputs. +//go:noescape +func mulAvxTwo_8x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x4 takes 8 inputs and produces 4 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_8x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x4Xor takes 8 inputs and produces 4 outputs. +//go:noescape +func mulAvxTwo_8x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x5 takes 8 inputs and produces 5 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_8x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x5Xor takes 8 inputs and produces 5 outputs. +//go:noescape +func mulAvxTwo_8x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x6 takes 8 inputs and produces 6 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_8x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x6Xor takes 8 inputs and produces 6 outputs. +//go:noescape +func mulAvxTwo_8x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x7 takes 8 inputs and produces 7 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_8x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x7Xor takes 8 inputs and produces 7 outputs. +//go:noescape +func mulAvxTwo_8x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x8 takes 8 inputs and produces 8 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_8x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x8Xor takes 8 inputs and produces 8 outputs. +//go:noescape +func mulAvxTwo_8x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x9 takes 8 inputs and produces 9 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_8x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x9Xor takes 8 inputs and produces 9 outputs. +//go:noescape +func mulAvxTwo_8x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x10 takes 8 inputs and produces 10 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_8x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_8x10Xor takes 8 inputs and produces 10 outputs. +//go:noescape +func mulAvxTwo_8x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x1 takes 9 inputs and produces 1 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_9x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x1_64 takes 9 inputs and produces 1 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_9x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x1Xor takes 9 inputs and produces 1 outputs. +//go:noescape +func mulAvxTwo_9x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x1_64Xor takes 9 inputs and produces 1 outputs. +//go:noescape +func mulAvxTwo_9x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x2 takes 9 inputs and produces 2 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_9x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x2_64 takes 9 inputs and produces 2 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_9x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x2Xor takes 9 inputs and produces 2 outputs. +//go:noescape +func mulAvxTwo_9x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x2_64Xor takes 9 inputs and produces 2 outputs. +//go:noescape +func mulAvxTwo_9x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x3 takes 9 inputs and produces 3 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_9x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x3_64 takes 9 inputs and produces 3 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_9x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x3Xor takes 9 inputs and produces 3 outputs. +//go:noescape +func mulAvxTwo_9x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x3_64Xor takes 9 inputs and produces 3 outputs. +//go:noescape +func mulAvxTwo_9x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x4 takes 9 inputs and produces 4 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_9x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x4Xor takes 9 inputs and produces 4 outputs. +//go:noescape +func mulAvxTwo_9x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x5 takes 9 inputs and produces 5 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_9x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x5Xor takes 9 inputs and produces 5 outputs. +//go:noescape +func mulAvxTwo_9x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x6 takes 9 inputs and produces 6 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_9x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x6Xor takes 9 inputs and produces 6 outputs. +//go:noescape +func mulAvxTwo_9x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x7 takes 9 inputs and produces 7 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_9x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x7Xor takes 9 inputs and produces 7 outputs. +//go:noescape +func mulAvxTwo_9x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x8 takes 9 inputs and produces 8 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_9x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x8Xor takes 9 inputs and produces 8 outputs. +//go:noescape +func mulAvxTwo_9x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x9 takes 9 inputs and produces 9 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_9x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x9Xor takes 9 inputs and produces 9 outputs. +//go:noescape +func mulAvxTwo_9x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x10 takes 9 inputs and produces 10 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_9x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_9x10Xor takes 9 inputs and produces 10 outputs. +//go:noescape +func mulAvxTwo_9x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x1 takes 10 inputs and produces 1 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_10x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x1_64 takes 10 inputs and produces 1 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_10x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x1Xor takes 10 inputs and produces 1 outputs. +//go:noescape +func mulAvxTwo_10x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x1_64Xor takes 10 inputs and produces 1 outputs. +//go:noescape +func mulAvxTwo_10x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x2 takes 10 inputs and produces 2 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_10x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x2_64 takes 10 inputs and produces 2 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_10x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x2Xor takes 10 inputs and produces 2 outputs. +//go:noescape +func mulAvxTwo_10x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x2_64Xor takes 10 inputs and produces 2 outputs. +//go:noescape +func mulAvxTwo_10x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x3 takes 10 inputs and produces 3 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_10x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x3_64 takes 10 inputs and produces 3 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_10x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x3Xor takes 10 inputs and produces 3 outputs. +//go:noescape +func mulAvxTwo_10x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x3_64Xor takes 10 inputs and produces 3 outputs. +//go:noescape +func mulAvxTwo_10x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x4 takes 10 inputs and produces 4 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_10x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x4Xor takes 10 inputs and produces 4 outputs. +//go:noescape +func mulAvxTwo_10x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x5 takes 10 inputs and produces 5 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_10x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x5Xor takes 10 inputs and produces 5 outputs. +//go:noescape +func mulAvxTwo_10x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x6 takes 10 inputs and produces 6 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_10x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x6Xor takes 10 inputs and produces 6 outputs. +//go:noescape +func mulAvxTwo_10x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x7 takes 10 inputs and produces 7 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_10x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x7Xor takes 10 inputs and produces 7 outputs. +//go:noescape +func mulAvxTwo_10x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x8 takes 10 inputs and produces 8 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_10x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x8Xor takes 10 inputs and produces 8 outputs. +//go:noescape +func mulAvxTwo_10x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x9 takes 10 inputs and produces 9 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_10x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x9Xor takes 10 inputs and produces 9 outputs. +//go:noescape +func mulAvxTwo_10x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x10 takes 10 inputs and produces 10 outputs. +// The output is initialized to 0. +//go:noescape +func mulAvxTwo_10x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +// mulAvxTwo_10x10Xor takes 10 inputs and produces 10 outputs. +//go:noescape +func mulAvxTwo_10x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) diff --git a/vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.s b/vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.s new file mode 100644 index 0000000..36e885f --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.s @@ -0,0 +1,70110 @@ +// Code generated by command: go run gen.go -out ../galois_gen_amd64.s -stubs ../galois_gen_amd64.go -pkg=reedsolomon. DO NOT EDIT. + +// +build !appengine +// +build !noasm +// +build !nogen +// +build gc + +#include "textflag.h" + +// func mulAvxTwo_1x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x1(SB), NOSPLIT, $0-88 + // Loading all tables to registers + // Destination kept in GP registers + // Full registers estimated 6 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_1x1_end + VMOVDQU (CX), Y0 + VMOVDQU 32(CX), Y1 + MOVQ in_base+24(FP), CX + MOVQ (CX), CX + MOVQ out_base+48(FP), DX + MOVQ (DX), DX + MOVQ start+72(FP), BX + + // Add start offset to output + ADDQ BX, DX + + // Add start offset to input + ADDQ BX, CX + MOVQ $0x0000000f, BX + MOVQ BX, X3 + VPBROADCASTB X3, Y3 + +mulAvxTwo_1x1_loop: + // Load and process 32 bytes from input 0 to 1 outputs + VMOVDQU (CX), Y2 + ADDQ $0x20, CX + VPSRLQ $0x04, Y2, Y4 + VPAND Y3, Y2, Y2 + VPAND Y3, Y4, Y4 + VPSHUFB Y2, Y0, Y2 + VPSHUFB Y4, Y1, Y4 + VPXOR Y2, Y4, Y2 + + // Store 1 outputs + VMOVDQU Y2, (DX) + ADDQ $0x20, DX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x1_loop + VZEROUPPER + +mulAvxTwo_1x1_end: + RET + +// func mulAvxTwo_1x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x1_64(SB), $0-88 + // Loading all tables to registers + // Destination kept in GP registers + // Full registers estimated 10 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_1x1_64_end + VMOVDQU (CX), Y0 + VMOVDQU 32(CX), Y1 + MOVQ in_base+24(FP), CX + MOVQ (CX), CX + MOVQ out_base+48(FP), DX + MOVQ out_base+48(FP), DX + MOVQ (DX), DX + MOVQ start+72(FP), BX + + // Add start offset to output + ADDQ BX, DX + + // Add start offset to input + ADDQ BX, CX + MOVQ $0x0000000f, BX + MOVQ BX, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_1x1_64_loop: + // Load and process 64 bytes from input 0 to 1 outputs + VMOVDQU (CX), Y2 + VMOVDQU 32(CX), Y3 + ADDQ $0x40, CX + VPSRLQ $0x04, Y2, Y6 + VPSRLQ $0x04, Y3, Y5 + VPAND Y4, Y2, Y2 + VPAND Y4, Y3, Y3 + VPAND Y4, Y6, Y6 + VPAND Y4, Y5, Y5 + VPSHUFB Y2, Y0, Y2 + VPSHUFB Y3, Y0, Y3 + VPSHUFB Y6, Y1, Y6 + VPSHUFB Y5, Y1, Y5 + VPXOR Y2, Y6, Y2 + VPXOR Y3, Y5, Y3 + + // Store 1 outputs + VMOVDQU Y2, (DX) + VMOVDQU Y3, 32(DX) + ADDQ $0x40, DX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x1_64_loop + VZEROUPPER + +mulAvxTwo_1x1_64_end: + RET + +// func mulAvxTwo_1x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x1Xor(SB), NOSPLIT, $0-88 + // Loading all tables to registers + // Destination kept in GP registers + // Full registers estimated 6 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_1x1Xor_end + VMOVDQU (CX), Y0 + VMOVDQU 32(CX), Y1 + MOVQ in_base+24(FP), CX + MOVQ (CX), CX + MOVQ out_base+48(FP), DX + MOVQ (DX), DX + MOVQ start+72(FP), BX + + // Add start offset to output + ADDQ BX, DX + + // Add start offset to input + ADDQ BX, CX + MOVQ $0x0000000f, BX + MOVQ BX, X3 + VPBROADCASTB X3, Y3 + +mulAvxTwo_1x1Xor_loop: + // Load and process 32 bytes from input 0 to 1 outputs + VMOVDQU (CX), Y4 + ADDQ $0x20, CX + VPSRLQ $0x04, Y4, Y5 + VPAND Y3, Y4, Y4 + VPAND Y3, Y5, Y5 + VMOVDQU (DX), Y2 + VPSHUFB Y4, Y0, Y4 + VPSHUFB Y5, Y1, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Store 1 outputs + VMOVDQU Y2, (DX) + ADDQ $0x20, DX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x1Xor_loop + VZEROUPPER + +mulAvxTwo_1x1Xor_end: + RET + +// func mulAvxTwo_1x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x1_64Xor(SB), $0-88 + // Loading all tables to registers + // Destination kept in GP registers + // Full registers estimated 10 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_1x1_64Xor_end + VMOVDQU (CX), Y0 + VMOVDQU 32(CX), Y1 + MOVQ in_base+24(FP), CX + MOVQ (CX), CX + MOVQ out_base+48(FP), DX + MOVQ out_base+48(FP), DX + MOVQ (DX), DX + MOVQ start+72(FP), BX + + // Add start offset to output + ADDQ BX, DX + + // Add start offset to input + ADDQ BX, CX + MOVQ $0x0000000f, BX + MOVQ BX, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_1x1_64Xor_loop: + // Load 1 outputs + VMOVDQU (DX), Y2 + VMOVDQU 32(DX), Y3 + + // Load and process 64 bytes from input 0 to 1 outputs + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y7 + ADDQ $0x40, CX + VPSRLQ $0x04, Y5, Y6 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y5, Y5 + VPAND Y4, Y7, Y7 + VPAND Y4, Y6, Y6 + VPAND Y4, Y8, Y8 + VPSHUFB Y5, Y0, Y5 + VPSHUFB Y7, Y0, Y7 + VPSHUFB Y6, Y1, Y6 + VPSHUFB Y8, Y1, Y8 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Store 1 outputs + VMOVDQU Y2, (DX) + VMOVDQU Y3, 32(DX) + ADDQ $0x40, DX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x1_64Xor_loop + VZEROUPPER + +mulAvxTwo_1x1_64Xor_end: + RET + +// func mulAvxTwo_1x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x2(SB), NOSPLIT, $0-88 + // Loading all tables to registers + // Destination kept in GP registers + // Full registers estimated 11 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_1x2_end + VMOVDQU (CX), Y0 + VMOVDQU 32(CX), Y1 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + MOVQ in_base+24(FP), CX + MOVQ (CX), CX + MOVQ out_base+48(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), DX + MOVQ start+72(FP), SI + + // Add start offset to output + ADDQ SI, BX + ADDQ SI, DX + + // Add start offset to input + ADDQ SI, CX + MOVQ $0x0000000f, SI + MOVQ SI, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_1x2_loop: + // Load and process 32 bytes from input 0 to 2 outputs + VMOVDQU (CX), Y8 + ADDQ $0x20, CX + VPSRLQ $0x04, Y8, Y9 + VPAND Y6, Y8, Y8 + VPAND Y6, Y9, Y9 + VPSHUFB Y8, Y0, Y5 + VPSHUFB Y9, Y1, Y7 + VPXOR Y5, Y7, Y4 + VPSHUFB Y8, Y2, Y5 + VPSHUFB Y9, Y3, Y7 + VPXOR Y5, Y7, Y5 + + // Store 2 outputs + VMOVDQU Y4, (BX) + ADDQ $0x20, BX + VMOVDQU Y5, (DX) + ADDQ $0x20, DX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x2_loop + VZEROUPPER + +mulAvxTwo_1x2_end: + RET + +// func mulAvxTwo_1x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x2_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 17 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_1x2_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), DX + MOVQ out_base+48(FP), BX + MOVQ out_base+48(FP), BX + MOVQ (BX), SI + MOVQ 24(BX), BX + MOVQ start+72(FP), DI + + // Add start offset to output + ADDQ DI, SI + ADDQ DI, BX + + // Add start offset to input + ADDQ DI, DX + MOVQ $0x0000000f, DI + MOVQ DI, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_1x2_64_loop: + // Load and process 64 bytes from input 0 to 2 outputs + VMOVDQU (DX), Y7 + VMOVDQU 32(DX), Y9 + ADDQ $0x40, DX + VPSRLQ $0x04, Y7, Y8 + VPSRLQ $0x04, Y9, Y10 + VPAND Y4, Y7, Y7 + VPAND Y4, Y9, Y9 + VPAND Y4, Y8, Y8 + VPAND Y4, Y10, Y10 + VMOVDQU (CX), Y2 + VMOVDQU 32(CX), Y6 + VPSHUFB Y9, Y2, Y3 + VPSHUFB Y7, Y2, Y2 + VPSHUFB Y10, Y6, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y2, Y6, Y0 + VPXOR Y3, Y5, Y1 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y6 + VPSHUFB Y9, Y2, Y3 + VPSHUFB Y7, Y2, Y2 + VPSHUFB Y10, Y6, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y2, Y6, Y2 + VPXOR Y3, Y5, Y3 + + // Store 2 outputs + VMOVDQU Y0, (SI) + VMOVDQU Y1, 32(SI) + ADDQ $0x40, SI + VMOVDQU Y2, (BX) + VMOVDQU Y3, 32(BX) + ADDQ $0x40, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x2_64_loop + VZEROUPPER + +mulAvxTwo_1x2_64_end: + RET + +// func mulAvxTwo_1x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x2Xor(SB), NOSPLIT, $0-88 + // Loading all tables to registers + // Destination kept in GP registers + // Full registers estimated 11 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_1x2Xor_end + VMOVDQU (CX), Y0 + VMOVDQU 32(CX), Y1 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + MOVQ in_base+24(FP), CX + MOVQ (CX), CX + MOVQ out_base+48(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), DX + MOVQ start+72(FP), SI + + // Add start offset to output + ADDQ SI, BX + ADDQ SI, DX + + // Add start offset to input + ADDQ SI, CX + MOVQ $0x0000000f, SI + MOVQ SI, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_1x2Xor_loop: + // Load and process 32 bytes from input 0 to 2 outputs + VMOVDQU (CX), Y9 + ADDQ $0x20, CX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU (BX), Y4 + VPSHUFB Y9, Y0, Y7 + VPSHUFB Y10, Y1, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU (DX), Y5 + VPSHUFB Y9, Y2, Y7 + VPSHUFB Y10, Y3, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Store 2 outputs + VMOVDQU Y4, (BX) + ADDQ $0x20, BX + VMOVDQU Y5, (DX) + ADDQ $0x20, DX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x2Xor_loop + VZEROUPPER + +mulAvxTwo_1x2Xor_end: + RET + +// func mulAvxTwo_1x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x2_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 17 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_1x2_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), DX + MOVQ out_base+48(FP), BX + MOVQ out_base+48(FP), BX + MOVQ (BX), SI + MOVQ 24(BX), BX + MOVQ start+72(FP), DI + + // Add start offset to output + ADDQ DI, SI + ADDQ DI, BX + + // Add start offset to input + ADDQ DI, DX + MOVQ $0x0000000f, DI + MOVQ DI, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_1x2_64Xor_loop: + // Load 2 outputs + VMOVDQU (SI), Y0 + VMOVDQU 32(SI), Y1 + VMOVDQU (BX), Y2 + VMOVDQU 32(BX), Y3 + + // Load and process 64 bytes from input 0 to 2 outputs + VMOVDQU (DX), Y9 + VMOVDQU 32(DX), Y11 + ADDQ $0x40, DX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Store 2 outputs + VMOVDQU Y0, (SI) + VMOVDQU Y1, 32(SI) + ADDQ $0x40, SI + VMOVDQU Y2, (BX) + VMOVDQU Y3, 32(BX) + ADDQ $0x40, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x2_64Xor_loop + VZEROUPPER + +mulAvxTwo_1x2_64Xor_end: + RET + +// func mulAvxTwo_1x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x3(SB), NOSPLIT, $0-88 + // Loading all tables to registers + // Destination kept in GP registers + // Full registers estimated 14 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_1x3_end + VMOVDQU (CX), Y0 + VMOVDQU 32(CX), Y1 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + MOVQ in_base+24(FP), CX + MOVQ (CX), CX + MOVQ out_base+48(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ start+72(FP), DI + + // Add start offset to output + ADDQ DI, BX + ADDQ DI, SI + ADDQ DI, DX + + // Add start offset to input + ADDQ DI, CX + MOVQ $0x0000000f, DI + MOVQ DI, X9 + VPBROADCASTB X9, Y9 + +mulAvxTwo_1x3_loop: + // Load and process 32 bytes from input 0 to 3 outputs + VMOVDQU (CX), Y11 + ADDQ $0x20, CX + VPSRLQ $0x04, Y11, Y12 + VPAND Y9, Y11, Y11 + VPAND Y9, Y12, Y12 + VPSHUFB Y11, Y0, Y8 + VPSHUFB Y12, Y1, Y10 + VPXOR Y8, Y10, Y6 + VPSHUFB Y11, Y2, Y8 + VPSHUFB Y12, Y3, Y10 + VPXOR Y8, Y10, Y7 + VPSHUFB Y11, Y4, Y8 + VPSHUFB Y12, Y5, Y10 + VPXOR Y8, Y10, Y8 + + // Store 3 outputs + VMOVDQU Y6, (BX) + ADDQ $0x20, BX + VMOVDQU Y7, (SI) + ADDQ $0x20, SI + VMOVDQU Y8, (DX) + ADDQ $0x20, DX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x3_loop + VZEROUPPER + +mulAvxTwo_1x3_end: + RET + +// func mulAvxTwo_1x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x3_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 22 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_1x3_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), DX + MOVQ out_base+48(FP), BX + MOVQ out_base+48(FP), BX + MOVQ (BX), SI + MOVQ 24(BX), DI + MOVQ 48(BX), BX + MOVQ start+72(FP), R8 + + // Add start offset to output + ADDQ R8, SI + ADDQ R8, DI + ADDQ R8, BX + + // Add start offset to input + ADDQ R8, DX + MOVQ $0x0000000f, R8 + MOVQ R8, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_1x3_64_loop: + // Load and process 64 bytes from input 0 to 3 outputs + VMOVDQU (DX), Y9 + VMOVDQU 32(DX), Y11 + ADDQ $0x40, DX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y6, Y9, Y9 + VPAND Y6, Y11, Y11 + VPAND Y6, Y10, Y10 + VPAND Y6, Y12, Y12 + VMOVDQU (CX), Y4 + VMOVDQU 32(CX), Y8 + VPSHUFB Y11, Y4, Y5 + VPSHUFB Y9, Y4, Y4 + VPSHUFB Y12, Y8, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y4, Y8, Y0 + VPXOR Y5, Y7, Y1 + VMOVDQU 64(CX), Y4 + VMOVDQU 96(CX), Y8 + VPSHUFB Y11, Y4, Y5 + VPSHUFB Y9, Y4, Y4 + VPSHUFB Y12, Y8, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y4, Y8, Y2 + VPXOR Y5, Y7, Y3 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y8 + VPSHUFB Y11, Y4, Y5 + VPSHUFB Y9, Y4, Y4 + VPSHUFB Y12, Y8, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y4, Y8, Y4 + VPXOR Y5, Y7, Y5 + + // Store 3 outputs + VMOVDQU Y0, (SI) + VMOVDQU Y1, 32(SI) + ADDQ $0x40, SI + VMOVDQU Y2, (DI) + VMOVDQU Y3, 32(DI) + ADDQ $0x40, DI + VMOVDQU Y4, (BX) + VMOVDQU Y5, 32(BX) + ADDQ $0x40, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x3_64_loop + VZEROUPPER + +mulAvxTwo_1x3_64_end: + RET + +// func mulAvxTwo_1x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x3Xor(SB), NOSPLIT, $0-88 + // Loading all tables to registers + // Destination kept in GP registers + // Full registers estimated 14 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_1x3Xor_end + VMOVDQU (CX), Y0 + VMOVDQU 32(CX), Y1 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + MOVQ in_base+24(FP), CX + MOVQ (CX), CX + MOVQ out_base+48(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ start+72(FP), DI + + // Add start offset to output + ADDQ DI, BX + ADDQ DI, SI + ADDQ DI, DX + + // Add start offset to input + ADDQ DI, CX + MOVQ $0x0000000f, DI + MOVQ DI, X9 + VPBROADCASTB X9, Y9 + +mulAvxTwo_1x3Xor_loop: + // Load and process 32 bytes from input 0 to 3 outputs + VMOVDQU (CX), Y12 + ADDQ $0x20, CX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU (BX), Y6 + VPSHUFB Y12, Y0, Y10 + VPSHUFB Y13, Y1, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU (SI), Y7 + VPSHUFB Y12, Y2, Y10 + VPSHUFB Y13, Y3, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU (DX), Y8 + VPSHUFB Y12, Y4, Y10 + VPSHUFB Y13, Y5, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Store 3 outputs + VMOVDQU Y6, (BX) + ADDQ $0x20, BX + VMOVDQU Y7, (SI) + ADDQ $0x20, SI + VMOVDQU Y8, (DX) + ADDQ $0x20, DX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x3Xor_loop + VZEROUPPER + +mulAvxTwo_1x3Xor_end: + RET + +// func mulAvxTwo_1x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x3_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 22 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_1x3_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), DX + MOVQ out_base+48(FP), BX + MOVQ out_base+48(FP), BX + MOVQ (BX), SI + MOVQ 24(BX), DI + MOVQ 48(BX), BX + MOVQ start+72(FP), R8 + + // Add start offset to output + ADDQ R8, SI + ADDQ R8, DI + ADDQ R8, BX + + // Add start offset to input + ADDQ R8, DX + MOVQ $0x0000000f, R8 + MOVQ R8, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_1x3_64Xor_loop: + // Load 3 outputs + VMOVDQU (SI), Y0 + VMOVDQU 32(SI), Y1 + VMOVDQU (DI), Y2 + VMOVDQU 32(DI), Y3 + VMOVDQU (BX), Y4 + VMOVDQU 32(BX), Y5 + + // Load and process 64 bytes from input 0 to 3 outputs + VMOVDQU (DX), Y11 + VMOVDQU 32(DX), Y13 + ADDQ $0x40, DX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Store 3 outputs + VMOVDQU Y0, (SI) + VMOVDQU Y1, 32(SI) + ADDQ $0x40, SI + VMOVDQU Y2, (DI) + VMOVDQU Y3, 32(DI) + ADDQ $0x40, DI + VMOVDQU Y4, (BX) + VMOVDQU Y5, 32(BX) + ADDQ $0x40, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x3_64Xor_loop + VZEROUPPER + +mulAvxTwo_1x3_64Xor_end: + RET + +// func mulAvxTwo_1x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x4(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 17 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_1x4_end + MOVQ in_base+24(FP), DX + MOVQ (DX), DX + MOVQ out_base+48(FP), BX + MOVQ (BX), SI + MOVQ 24(BX), DI + MOVQ 48(BX), R8 + MOVQ 72(BX), BX + MOVQ start+72(FP), R9 + + // Add start offset to output + ADDQ R9, SI + ADDQ R9, DI + ADDQ R9, R8 + ADDQ R9, BX + + // Add start offset to input + ADDQ R9, DX + MOVQ $0x0000000f, R9 + MOVQ R9, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_1x4_loop: + // Load and process 32 bytes from input 0 to 4 outputs + VMOVDQU (DX), Y6 + ADDQ $0x20, DX + VPSRLQ $0x04, Y6, Y7 + VPAND Y4, Y6, Y6 + VPAND Y4, Y7, Y7 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y7, Y5, Y5 + VPXOR Y3, Y5, Y0 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y7, Y5, Y5 + VPXOR Y3, Y5, Y1 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y7, Y5, Y5 + VPXOR Y3, Y5, Y2 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y7, Y5, Y5 + VPXOR Y3, Y5, Y3 + + // Store 4 outputs + VMOVDQU Y0, (SI) + ADDQ $0x20, SI + VMOVDQU Y1, (DI) + ADDQ $0x20, DI + VMOVDQU Y2, (R8) + ADDQ $0x20, R8 + VMOVDQU Y3, (BX) + ADDQ $0x20, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x4_loop + VZEROUPPER + +mulAvxTwo_1x4_end: + RET + +// func mulAvxTwo_1x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x4Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 17 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_1x4Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), DX + MOVQ out_base+48(FP), BX + MOVQ (BX), SI + MOVQ 24(BX), DI + MOVQ 48(BX), R8 + MOVQ 72(BX), BX + MOVQ start+72(FP), R9 + + // Add start offset to output + ADDQ R9, SI + ADDQ R9, DI + ADDQ R9, R8 + ADDQ R9, BX + + // Add start offset to input + ADDQ R9, DX + MOVQ $0x0000000f, R9 + MOVQ R9, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_1x4Xor_loop: + // Load and process 32 bytes from input 0 to 4 outputs + VMOVDQU (DX), Y7 + ADDQ $0x20, DX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU (SI), Y0 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU (DI), Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU (R8), Y2 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU (BX), Y3 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Store 4 outputs + VMOVDQU Y0, (SI) + ADDQ $0x20, SI + VMOVDQU Y1, (DI) + ADDQ $0x20, DI + VMOVDQU Y2, (R8) + ADDQ $0x20, R8 + VMOVDQU Y3, (BX) + ADDQ $0x20, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x4Xor_loop + VZEROUPPER + +mulAvxTwo_1x4Xor_end: + RET + +// func mulAvxTwo_1x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x5(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 20 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_1x5_end + MOVQ in_base+24(FP), DX + MOVQ (DX), DX + MOVQ out_base+48(FP), BX + MOVQ (BX), SI + MOVQ 24(BX), DI + MOVQ 48(BX), R8 + MOVQ 72(BX), R9 + MOVQ 96(BX), BX + MOVQ start+72(FP), R10 + + // Add start offset to output + ADDQ R10, SI + ADDQ R10, DI + ADDQ R10, R8 + ADDQ R10, R9 + ADDQ R10, BX + + // Add start offset to input + ADDQ R10, DX + MOVQ $0x0000000f, R10 + MOVQ R10, X5 + VPBROADCASTB X5, Y5 + +mulAvxTwo_1x5_loop: + // Load and process 32 bytes from input 0 to 5 outputs + VMOVDQU (DX), Y7 + ADDQ $0x20, DX + VPSRLQ $0x04, Y7, Y8 + VPAND Y5, Y7, Y7 + VPAND Y5, Y8, Y8 + VMOVDQU (CX), Y4 + VMOVDQU 32(CX), Y6 + VPSHUFB Y7, Y4, Y4 + VPSHUFB Y8, Y6, Y6 + VPXOR Y4, Y6, Y0 + VMOVDQU 64(CX), Y4 + VMOVDQU 96(CX), Y6 + VPSHUFB Y7, Y4, Y4 + VPSHUFB Y8, Y6, Y6 + VPXOR Y4, Y6, Y1 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y6 + VPSHUFB Y7, Y4, Y4 + VPSHUFB Y8, Y6, Y6 + VPXOR Y4, Y6, Y2 + VMOVDQU 192(CX), Y4 + VMOVDQU 224(CX), Y6 + VPSHUFB Y7, Y4, Y4 + VPSHUFB Y8, Y6, Y6 + VPXOR Y4, Y6, Y3 + VMOVDQU 256(CX), Y4 + VMOVDQU 288(CX), Y6 + VPSHUFB Y7, Y4, Y4 + VPSHUFB Y8, Y6, Y6 + VPXOR Y4, Y6, Y4 + + // Store 5 outputs + VMOVDQU Y0, (SI) + ADDQ $0x20, SI + VMOVDQU Y1, (DI) + ADDQ $0x20, DI + VMOVDQU Y2, (R8) + ADDQ $0x20, R8 + VMOVDQU Y3, (R9) + ADDQ $0x20, R9 + VMOVDQU Y4, (BX) + ADDQ $0x20, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x5_loop + VZEROUPPER + +mulAvxTwo_1x5_end: + RET + +// func mulAvxTwo_1x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x5Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 20 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_1x5Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), DX + MOVQ out_base+48(FP), BX + MOVQ (BX), SI + MOVQ 24(BX), DI + MOVQ 48(BX), R8 + MOVQ 72(BX), R9 + MOVQ 96(BX), BX + MOVQ start+72(FP), R10 + + // Add start offset to output + ADDQ R10, SI + ADDQ R10, DI + ADDQ R10, R8 + ADDQ R10, R9 + ADDQ R10, BX + + // Add start offset to input + ADDQ R10, DX + MOVQ $0x0000000f, R10 + MOVQ R10, X5 + VPBROADCASTB X5, Y5 + +mulAvxTwo_1x5Xor_loop: + // Load and process 32 bytes from input 0 to 5 outputs + VMOVDQU (DX), Y8 + ADDQ $0x20, DX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU (SI), Y0 + VMOVDQU (CX), Y6 + VMOVDQU 32(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU (DI), Y1 + VMOVDQU 64(CX), Y6 + VMOVDQU 96(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU (R8), Y2 + VMOVDQU 128(CX), Y6 + VMOVDQU 160(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU (R9), Y3 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU (BX), Y4 + VMOVDQU 256(CX), Y6 + VMOVDQU 288(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Store 5 outputs + VMOVDQU Y0, (SI) + ADDQ $0x20, SI + VMOVDQU Y1, (DI) + ADDQ $0x20, DI + VMOVDQU Y2, (R8) + ADDQ $0x20, R8 + VMOVDQU Y3, (R9) + ADDQ $0x20, R9 + VMOVDQU Y4, (BX) + ADDQ $0x20, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x5Xor_loop + VZEROUPPER + +mulAvxTwo_1x5Xor_end: + RET + +// func mulAvxTwo_1x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x6(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 23 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_1x6_end + MOVQ in_base+24(FP), DX + MOVQ (DX), DX + MOVQ out_base+48(FP), BX + MOVQ (BX), SI + MOVQ 24(BX), DI + MOVQ 48(BX), R8 + MOVQ 72(BX), R9 + MOVQ 96(BX), R10 + MOVQ 120(BX), BX + MOVQ start+72(FP), R11 + + // Add start offset to output + ADDQ R11, SI + ADDQ R11, DI + ADDQ R11, R8 + ADDQ R11, R9 + ADDQ R11, R10 + ADDQ R11, BX + + // Add start offset to input + ADDQ R11, DX + MOVQ $0x0000000f, R11 + MOVQ R11, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_1x6_loop: + // Load and process 32 bytes from input 0 to 6 outputs + VMOVDQU (DX), Y8 + ADDQ $0x20, DX + VPSRLQ $0x04, Y8, Y9 + VPAND Y6, Y8, Y8 + VPAND Y6, Y9, Y9 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y7 + VPSHUFB Y8, Y5, Y5 + VPSHUFB Y9, Y7, Y7 + VPXOR Y5, Y7, Y0 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y7 + VPSHUFB Y8, Y5, Y5 + VPSHUFB Y9, Y7, Y7 + VPXOR Y5, Y7, Y1 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y7 + VPSHUFB Y8, Y5, Y5 + VPSHUFB Y9, Y7, Y7 + VPXOR Y5, Y7, Y2 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y7 + VPSHUFB Y8, Y5, Y5 + VPSHUFB Y9, Y7, Y7 + VPXOR Y5, Y7, Y3 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y7 + VPSHUFB Y8, Y5, Y5 + VPSHUFB Y9, Y7, Y7 + VPXOR Y5, Y7, Y4 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y7 + VPSHUFB Y8, Y5, Y5 + VPSHUFB Y9, Y7, Y7 + VPXOR Y5, Y7, Y5 + + // Store 6 outputs + VMOVDQU Y0, (SI) + ADDQ $0x20, SI + VMOVDQU Y1, (DI) + ADDQ $0x20, DI + VMOVDQU Y2, (R8) + ADDQ $0x20, R8 + VMOVDQU Y3, (R9) + ADDQ $0x20, R9 + VMOVDQU Y4, (R10) + ADDQ $0x20, R10 + VMOVDQU Y5, (BX) + ADDQ $0x20, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x6_loop + VZEROUPPER + +mulAvxTwo_1x6_end: + RET + +// func mulAvxTwo_1x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x6Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 23 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_1x6Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), DX + MOVQ out_base+48(FP), BX + MOVQ (BX), SI + MOVQ 24(BX), DI + MOVQ 48(BX), R8 + MOVQ 72(BX), R9 + MOVQ 96(BX), R10 + MOVQ 120(BX), BX + MOVQ start+72(FP), R11 + + // Add start offset to output + ADDQ R11, SI + ADDQ R11, DI + ADDQ R11, R8 + ADDQ R11, R9 + ADDQ R11, R10 + ADDQ R11, BX + + // Add start offset to input + ADDQ R11, DX + MOVQ $0x0000000f, R11 + MOVQ R11, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_1x6Xor_loop: + // Load and process 32 bytes from input 0 to 6 outputs + VMOVDQU (DX), Y9 + ADDQ $0x20, DX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU (SI), Y0 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU (DI), Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU (R8), Y2 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU (R9), Y3 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU (R10), Y4 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU (BX), Y5 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Store 6 outputs + VMOVDQU Y0, (SI) + ADDQ $0x20, SI + VMOVDQU Y1, (DI) + ADDQ $0x20, DI + VMOVDQU Y2, (R8) + ADDQ $0x20, R8 + VMOVDQU Y3, (R9) + ADDQ $0x20, R9 + VMOVDQU Y4, (R10) + ADDQ $0x20, R10 + VMOVDQU Y5, (BX) + ADDQ $0x20, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x6Xor_loop + VZEROUPPER + +mulAvxTwo_1x6Xor_end: + RET + +// func mulAvxTwo_1x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x7(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 26 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_1x7_end + MOVQ in_base+24(FP), DX + MOVQ (DX), DX + MOVQ out_base+48(FP), BX + MOVQ (BX), SI + MOVQ 24(BX), DI + MOVQ 48(BX), R8 + MOVQ 72(BX), R9 + MOVQ 96(BX), R10 + MOVQ 120(BX), R11 + MOVQ 144(BX), BX + MOVQ start+72(FP), R12 + + // Add start offset to output + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, R9 + ADDQ R12, R10 + ADDQ R12, R11 + ADDQ R12, BX + + // Add start offset to input + ADDQ R12, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X7 + VPBROADCASTB X7, Y7 + +mulAvxTwo_1x7_loop: + // Load and process 32 bytes from input 0 to 7 outputs + VMOVDQU (DX), Y9 + ADDQ $0x20, DX + VPSRLQ $0x04, Y9, Y10 + VPAND Y7, Y9, Y9 + VPAND Y7, Y10, Y10 + VMOVDQU (CX), Y6 + VMOVDQU 32(CX), Y8 + VPSHUFB Y9, Y6, Y6 + VPSHUFB Y10, Y8, Y8 + VPXOR Y6, Y8, Y0 + VMOVDQU 64(CX), Y6 + VMOVDQU 96(CX), Y8 + VPSHUFB Y9, Y6, Y6 + VPSHUFB Y10, Y8, Y8 + VPXOR Y6, Y8, Y1 + VMOVDQU 128(CX), Y6 + VMOVDQU 160(CX), Y8 + VPSHUFB Y9, Y6, Y6 + VPSHUFB Y10, Y8, Y8 + VPXOR Y6, Y8, Y2 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y8 + VPSHUFB Y9, Y6, Y6 + VPSHUFB Y10, Y8, Y8 + VPXOR Y6, Y8, Y3 + VMOVDQU 256(CX), Y6 + VMOVDQU 288(CX), Y8 + VPSHUFB Y9, Y6, Y6 + VPSHUFB Y10, Y8, Y8 + VPXOR Y6, Y8, Y4 + VMOVDQU 320(CX), Y6 + VMOVDQU 352(CX), Y8 + VPSHUFB Y9, Y6, Y6 + VPSHUFB Y10, Y8, Y8 + VPXOR Y6, Y8, Y5 + VMOVDQU 384(CX), Y6 + VMOVDQU 416(CX), Y8 + VPSHUFB Y9, Y6, Y6 + VPSHUFB Y10, Y8, Y8 + VPXOR Y6, Y8, Y6 + + // Store 7 outputs + VMOVDQU Y0, (SI) + ADDQ $0x20, SI + VMOVDQU Y1, (DI) + ADDQ $0x20, DI + VMOVDQU Y2, (R8) + ADDQ $0x20, R8 + VMOVDQU Y3, (R9) + ADDQ $0x20, R9 + VMOVDQU Y4, (R10) + ADDQ $0x20, R10 + VMOVDQU Y5, (R11) + ADDQ $0x20, R11 + VMOVDQU Y6, (BX) + ADDQ $0x20, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x7_loop + VZEROUPPER + +mulAvxTwo_1x7_end: + RET + +// func mulAvxTwo_1x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x7Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 26 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_1x7Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), DX + MOVQ out_base+48(FP), BX + MOVQ (BX), SI + MOVQ 24(BX), DI + MOVQ 48(BX), R8 + MOVQ 72(BX), R9 + MOVQ 96(BX), R10 + MOVQ 120(BX), R11 + MOVQ 144(BX), BX + MOVQ start+72(FP), R12 + + // Add start offset to output + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, R9 + ADDQ R12, R10 + ADDQ R12, R11 + ADDQ R12, BX + + // Add start offset to input + ADDQ R12, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X7 + VPBROADCASTB X7, Y7 + +mulAvxTwo_1x7Xor_loop: + // Load and process 32 bytes from input 0 to 7 outputs + VMOVDQU (DX), Y10 + ADDQ $0x20, DX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU (SI), Y0 + VMOVDQU (CX), Y8 + VMOVDQU 32(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU (DI), Y1 + VMOVDQU 64(CX), Y8 + VMOVDQU 96(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU (R8), Y2 + VMOVDQU 128(CX), Y8 + VMOVDQU 160(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU (R9), Y3 + VMOVDQU 192(CX), Y8 + VMOVDQU 224(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU (R10), Y4 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU (R11), Y5 + VMOVDQU 320(CX), Y8 + VMOVDQU 352(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU (BX), Y6 + VMOVDQU 384(CX), Y8 + VMOVDQU 416(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Store 7 outputs + VMOVDQU Y0, (SI) + ADDQ $0x20, SI + VMOVDQU Y1, (DI) + ADDQ $0x20, DI + VMOVDQU Y2, (R8) + ADDQ $0x20, R8 + VMOVDQU Y3, (R9) + ADDQ $0x20, R9 + VMOVDQU Y4, (R10) + ADDQ $0x20, R10 + VMOVDQU Y5, (R11) + ADDQ $0x20, R11 + VMOVDQU Y6, (BX) + ADDQ $0x20, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x7Xor_loop + VZEROUPPER + +mulAvxTwo_1x7Xor_end: + RET + +// func mulAvxTwo_1x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x8(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 29 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_1x8_end + MOVQ in_base+24(FP), DX + MOVQ (DX), DX + MOVQ out_base+48(FP), BX + MOVQ (BX), SI + MOVQ 24(BX), DI + MOVQ 48(BX), R8 + MOVQ 72(BX), R9 + MOVQ 96(BX), R10 + MOVQ 120(BX), R11 + MOVQ 144(BX), R12 + MOVQ 168(BX), BX + MOVQ start+72(FP), R13 + + // Add start offset to output + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, R12 + ADDQ R13, BX + + // Add start offset to input + ADDQ R13, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X8 + VPBROADCASTB X8, Y8 + +mulAvxTwo_1x8_loop: + // Load and process 32 bytes from input 0 to 8 outputs + VMOVDQU (DX), Y10 + ADDQ $0x20, DX + VPSRLQ $0x04, Y10, Y11 + VPAND Y8, Y10, Y10 + VPAND Y8, Y11, Y11 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y9 + VPSHUFB Y10, Y7, Y7 + VPSHUFB Y11, Y9, Y9 + VPXOR Y7, Y9, Y0 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y9 + VPSHUFB Y10, Y7, Y7 + VPSHUFB Y11, Y9, Y9 + VPXOR Y7, Y9, Y1 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y9 + VPSHUFB Y10, Y7, Y7 + VPSHUFB Y11, Y9, Y9 + VPXOR Y7, Y9, Y2 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y9 + VPSHUFB Y10, Y7, Y7 + VPSHUFB Y11, Y9, Y9 + VPXOR Y7, Y9, Y3 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y9 + VPSHUFB Y10, Y7, Y7 + VPSHUFB Y11, Y9, Y9 + VPXOR Y7, Y9, Y4 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y9 + VPSHUFB Y10, Y7, Y7 + VPSHUFB Y11, Y9, Y9 + VPXOR Y7, Y9, Y5 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y9 + VPSHUFB Y10, Y7, Y7 + VPSHUFB Y11, Y9, Y9 + VPXOR Y7, Y9, Y6 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y9 + VPSHUFB Y10, Y7, Y7 + VPSHUFB Y11, Y9, Y9 + VPXOR Y7, Y9, Y7 + + // Store 8 outputs + VMOVDQU Y0, (SI) + ADDQ $0x20, SI + VMOVDQU Y1, (DI) + ADDQ $0x20, DI + VMOVDQU Y2, (R8) + ADDQ $0x20, R8 + VMOVDQU Y3, (R9) + ADDQ $0x20, R9 + VMOVDQU Y4, (R10) + ADDQ $0x20, R10 + VMOVDQU Y5, (R11) + ADDQ $0x20, R11 + VMOVDQU Y6, (R12) + ADDQ $0x20, R12 + VMOVDQU Y7, (BX) + ADDQ $0x20, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x8_loop + VZEROUPPER + +mulAvxTwo_1x8_end: + RET + +// func mulAvxTwo_1x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x8Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 29 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_1x8Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), DX + MOVQ out_base+48(FP), BX + MOVQ (BX), SI + MOVQ 24(BX), DI + MOVQ 48(BX), R8 + MOVQ 72(BX), R9 + MOVQ 96(BX), R10 + MOVQ 120(BX), R11 + MOVQ 144(BX), R12 + MOVQ 168(BX), BX + MOVQ start+72(FP), R13 + + // Add start offset to output + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, R12 + ADDQ R13, BX + + // Add start offset to input + ADDQ R13, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X8 + VPBROADCASTB X8, Y8 + +mulAvxTwo_1x8Xor_loop: + // Load and process 32 bytes from input 0 to 8 outputs + VMOVDQU (DX), Y11 + ADDQ $0x20, DX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU (SI), Y0 + VMOVDQU (CX), Y9 + VMOVDQU 32(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU (DI), Y1 + VMOVDQU 64(CX), Y9 + VMOVDQU 96(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU (R8), Y2 + VMOVDQU 128(CX), Y9 + VMOVDQU 160(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU (R9), Y3 + VMOVDQU 192(CX), Y9 + VMOVDQU 224(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU (R10), Y4 + VMOVDQU 256(CX), Y9 + VMOVDQU 288(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU (R11), Y5 + VMOVDQU 320(CX), Y9 + VMOVDQU 352(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU (R12), Y6 + VMOVDQU 384(CX), Y9 + VMOVDQU 416(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU (BX), Y7 + VMOVDQU 448(CX), Y9 + VMOVDQU 480(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Store 8 outputs + VMOVDQU Y0, (SI) + ADDQ $0x20, SI + VMOVDQU Y1, (DI) + ADDQ $0x20, DI + VMOVDQU Y2, (R8) + ADDQ $0x20, R8 + VMOVDQU Y3, (R9) + ADDQ $0x20, R9 + VMOVDQU Y4, (R10) + ADDQ $0x20, R10 + VMOVDQU Y5, (R11) + ADDQ $0x20, R11 + VMOVDQU Y6, (R12) + ADDQ $0x20, R12 + VMOVDQU Y7, (BX) + ADDQ $0x20, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x8Xor_loop + VZEROUPPER + +mulAvxTwo_1x8Xor_end: + RET + +// func mulAvxTwo_1x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x9(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 32 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_1x9_end + MOVQ in_base+24(FP), DX + MOVQ (DX), DX + MOVQ out_base+48(FP), BX + MOVQ (BX), SI + MOVQ 24(BX), DI + MOVQ 48(BX), R8 + MOVQ 72(BX), R9 + MOVQ 96(BX), R10 + MOVQ 120(BX), R11 + MOVQ 144(BX), R12 + MOVQ 168(BX), R13 + MOVQ 192(BX), BX + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, R13 + ADDQ R14, BX + + // Add start offset to input + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X9 + VPBROADCASTB X9, Y9 + +mulAvxTwo_1x9_loop: + // Load and process 32 bytes from input 0 to 9 outputs + VMOVDQU (DX), Y11 + ADDQ $0x20, DX + VPSRLQ $0x04, Y11, Y12 + VPAND Y9, Y11, Y11 + VPAND Y9, Y12, Y12 + VMOVDQU (CX), Y8 + VMOVDQU 32(CX), Y10 + VPSHUFB Y11, Y8, Y8 + VPSHUFB Y12, Y10, Y10 + VPXOR Y8, Y10, Y0 + VMOVDQU 64(CX), Y8 + VMOVDQU 96(CX), Y10 + VPSHUFB Y11, Y8, Y8 + VPSHUFB Y12, Y10, Y10 + VPXOR Y8, Y10, Y1 + VMOVDQU 128(CX), Y8 + VMOVDQU 160(CX), Y10 + VPSHUFB Y11, Y8, Y8 + VPSHUFB Y12, Y10, Y10 + VPXOR Y8, Y10, Y2 + VMOVDQU 192(CX), Y8 + VMOVDQU 224(CX), Y10 + VPSHUFB Y11, Y8, Y8 + VPSHUFB Y12, Y10, Y10 + VPXOR Y8, Y10, Y3 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y10 + VPSHUFB Y11, Y8, Y8 + VPSHUFB Y12, Y10, Y10 + VPXOR Y8, Y10, Y4 + VMOVDQU 320(CX), Y8 + VMOVDQU 352(CX), Y10 + VPSHUFB Y11, Y8, Y8 + VPSHUFB Y12, Y10, Y10 + VPXOR Y8, Y10, Y5 + VMOVDQU 384(CX), Y8 + VMOVDQU 416(CX), Y10 + VPSHUFB Y11, Y8, Y8 + VPSHUFB Y12, Y10, Y10 + VPXOR Y8, Y10, Y6 + VMOVDQU 448(CX), Y8 + VMOVDQU 480(CX), Y10 + VPSHUFB Y11, Y8, Y8 + VPSHUFB Y12, Y10, Y10 + VPXOR Y8, Y10, Y7 + VMOVDQU 512(CX), Y8 + VMOVDQU 544(CX), Y10 + VPSHUFB Y11, Y8, Y8 + VPSHUFB Y12, Y10, Y10 + VPXOR Y8, Y10, Y8 + + // Store 9 outputs + VMOVDQU Y0, (SI) + ADDQ $0x20, SI + VMOVDQU Y1, (DI) + ADDQ $0x20, DI + VMOVDQU Y2, (R8) + ADDQ $0x20, R8 + VMOVDQU Y3, (R9) + ADDQ $0x20, R9 + VMOVDQU Y4, (R10) + ADDQ $0x20, R10 + VMOVDQU Y5, (R11) + ADDQ $0x20, R11 + VMOVDQU Y6, (R12) + ADDQ $0x20, R12 + VMOVDQU Y7, (R13) + ADDQ $0x20, R13 + VMOVDQU Y8, (BX) + ADDQ $0x20, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x9_loop + VZEROUPPER + +mulAvxTwo_1x9_end: + RET + +// func mulAvxTwo_1x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x9Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 32 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_1x9Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), DX + MOVQ out_base+48(FP), BX + MOVQ (BX), SI + MOVQ 24(BX), DI + MOVQ 48(BX), R8 + MOVQ 72(BX), R9 + MOVQ 96(BX), R10 + MOVQ 120(BX), R11 + MOVQ 144(BX), R12 + MOVQ 168(BX), R13 + MOVQ 192(BX), BX + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, R13 + ADDQ R14, BX + + // Add start offset to input + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X9 + VPBROADCASTB X9, Y9 + +mulAvxTwo_1x9Xor_loop: + // Load and process 32 bytes from input 0 to 9 outputs + VMOVDQU (DX), Y12 + ADDQ $0x20, DX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU (SI), Y0 + VMOVDQU (CX), Y10 + VMOVDQU 32(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU (DI), Y1 + VMOVDQU 64(CX), Y10 + VMOVDQU 96(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU (R8), Y2 + VMOVDQU 128(CX), Y10 + VMOVDQU 160(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU (R9), Y3 + VMOVDQU 192(CX), Y10 + VMOVDQU 224(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU (R10), Y4 + VMOVDQU 256(CX), Y10 + VMOVDQU 288(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU (R11), Y5 + VMOVDQU 320(CX), Y10 + VMOVDQU 352(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU (R12), Y6 + VMOVDQU 384(CX), Y10 + VMOVDQU 416(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU (R13), Y7 + VMOVDQU 448(CX), Y10 + VMOVDQU 480(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU (BX), Y8 + VMOVDQU 512(CX), Y10 + VMOVDQU 544(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Store 9 outputs + VMOVDQU Y0, (SI) + ADDQ $0x20, SI + VMOVDQU Y1, (DI) + ADDQ $0x20, DI + VMOVDQU Y2, (R8) + ADDQ $0x20, R8 + VMOVDQU Y3, (R9) + ADDQ $0x20, R9 + VMOVDQU Y4, (R10) + ADDQ $0x20, R10 + VMOVDQU Y5, (R11) + ADDQ $0x20, R11 + VMOVDQU Y6, (R12) + ADDQ $0x20, R12 + VMOVDQU Y7, (R13) + ADDQ $0x20, R13 + VMOVDQU Y8, (BX) + ADDQ $0x20, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x9Xor_loop + VZEROUPPER + +mulAvxTwo_1x9Xor_end: + RET + +// func mulAvxTwo_1x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x10(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 35 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_1x10_end + MOVQ in_base+24(FP), DX + MOVQ (DX), DX + MOVQ out_base+48(FP), BX + MOVQ (BX), SI + MOVQ 24(BX), DI + MOVQ 48(BX), R8 + MOVQ 72(BX), R9 + MOVQ 96(BX), R10 + MOVQ 120(BX), R11 + MOVQ 144(BX), R12 + MOVQ 168(BX), R13 + MOVQ 192(BX), R14 + MOVQ 216(BX), BX + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, R14 + ADDQ R15, BX + + // Add start offset to input + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X10 + VPBROADCASTB X10, Y10 + +mulAvxTwo_1x10_loop: + // Load and process 32 bytes from input 0 to 10 outputs + VMOVDQU (DX), Y12 + ADDQ $0x20, DX + VPSRLQ $0x04, Y12, Y13 + VPAND Y10, Y12, Y12 + VPAND Y10, Y13, Y13 + VMOVDQU (CX), Y9 + VMOVDQU 32(CX), Y11 + VPSHUFB Y12, Y9, Y9 + VPSHUFB Y13, Y11, Y11 + VPXOR Y9, Y11, Y0 + VMOVDQU 64(CX), Y9 + VMOVDQU 96(CX), Y11 + VPSHUFB Y12, Y9, Y9 + VPSHUFB Y13, Y11, Y11 + VPXOR Y9, Y11, Y1 + VMOVDQU 128(CX), Y9 + VMOVDQU 160(CX), Y11 + VPSHUFB Y12, Y9, Y9 + VPSHUFB Y13, Y11, Y11 + VPXOR Y9, Y11, Y2 + VMOVDQU 192(CX), Y9 + VMOVDQU 224(CX), Y11 + VPSHUFB Y12, Y9, Y9 + VPSHUFB Y13, Y11, Y11 + VPXOR Y9, Y11, Y3 + VMOVDQU 256(CX), Y9 + VMOVDQU 288(CX), Y11 + VPSHUFB Y12, Y9, Y9 + VPSHUFB Y13, Y11, Y11 + VPXOR Y9, Y11, Y4 + VMOVDQU 320(CX), Y9 + VMOVDQU 352(CX), Y11 + VPSHUFB Y12, Y9, Y9 + VPSHUFB Y13, Y11, Y11 + VPXOR Y9, Y11, Y5 + VMOVDQU 384(CX), Y9 + VMOVDQU 416(CX), Y11 + VPSHUFB Y12, Y9, Y9 + VPSHUFB Y13, Y11, Y11 + VPXOR Y9, Y11, Y6 + VMOVDQU 448(CX), Y9 + VMOVDQU 480(CX), Y11 + VPSHUFB Y12, Y9, Y9 + VPSHUFB Y13, Y11, Y11 + VPXOR Y9, Y11, Y7 + VMOVDQU 512(CX), Y9 + VMOVDQU 544(CX), Y11 + VPSHUFB Y12, Y9, Y9 + VPSHUFB Y13, Y11, Y11 + VPXOR Y9, Y11, Y8 + VMOVDQU 576(CX), Y9 + VMOVDQU 608(CX), Y11 + VPSHUFB Y12, Y9, Y9 + VPSHUFB Y13, Y11, Y11 + VPXOR Y9, Y11, Y9 + + // Store 10 outputs + VMOVDQU Y0, (SI) + ADDQ $0x20, SI + VMOVDQU Y1, (DI) + ADDQ $0x20, DI + VMOVDQU Y2, (R8) + ADDQ $0x20, R8 + VMOVDQU Y3, (R9) + ADDQ $0x20, R9 + VMOVDQU Y4, (R10) + ADDQ $0x20, R10 + VMOVDQU Y5, (R11) + ADDQ $0x20, R11 + VMOVDQU Y6, (R12) + ADDQ $0x20, R12 + VMOVDQU Y7, (R13) + ADDQ $0x20, R13 + VMOVDQU Y8, (R14) + ADDQ $0x20, R14 + VMOVDQU Y9, (BX) + ADDQ $0x20, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x10_loop + VZEROUPPER + +mulAvxTwo_1x10_end: + RET + +// func mulAvxTwo_1x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_1x10Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 35 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_1x10Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), DX + MOVQ out_base+48(FP), BX + MOVQ (BX), SI + MOVQ 24(BX), DI + MOVQ 48(BX), R8 + MOVQ 72(BX), R9 + MOVQ 96(BX), R10 + MOVQ 120(BX), R11 + MOVQ 144(BX), R12 + MOVQ 168(BX), R13 + MOVQ 192(BX), R14 + MOVQ 216(BX), BX + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, R14 + ADDQ R15, BX + + // Add start offset to input + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X10 + VPBROADCASTB X10, Y10 + +mulAvxTwo_1x10Xor_loop: + // Load and process 32 bytes from input 0 to 10 outputs + VMOVDQU (DX), Y13 + ADDQ $0x20, DX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU (SI), Y0 + VMOVDQU (CX), Y11 + VMOVDQU 32(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU (DI), Y1 + VMOVDQU 64(CX), Y11 + VMOVDQU 96(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU (R8), Y2 + VMOVDQU 128(CX), Y11 + VMOVDQU 160(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU (R9), Y3 + VMOVDQU 192(CX), Y11 + VMOVDQU 224(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU (R10), Y4 + VMOVDQU 256(CX), Y11 + VMOVDQU 288(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU (R11), Y5 + VMOVDQU 320(CX), Y11 + VMOVDQU 352(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU (R12), Y6 + VMOVDQU 384(CX), Y11 + VMOVDQU 416(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU (R13), Y7 + VMOVDQU 448(CX), Y11 + VMOVDQU 480(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU (R14), Y8 + VMOVDQU 512(CX), Y11 + VMOVDQU 544(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU (BX), Y9 + VMOVDQU 576(CX), Y11 + VMOVDQU 608(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Store 10 outputs + VMOVDQU Y0, (SI) + ADDQ $0x20, SI + VMOVDQU Y1, (DI) + ADDQ $0x20, DI + VMOVDQU Y2, (R8) + ADDQ $0x20, R8 + VMOVDQU Y3, (R9) + ADDQ $0x20, R9 + VMOVDQU Y4, (R10) + ADDQ $0x20, R10 + VMOVDQU Y5, (R11) + ADDQ $0x20, R11 + VMOVDQU Y6, (R12) + ADDQ $0x20, R12 + VMOVDQU Y7, (R13) + ADDQ $0x20, R13 + VMOVDQU Y8, (R14) + ADDQ $0x20, R14 + VMOVDQU Y9, (BX) + ADDQ $0x20, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_1x10Xor_loop + VZEROUPPER + +mulAvxTwo_1x10Xor_end: + RET + +// func mulAvxTwo_2x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x1(SB), NOSPLIT, $0-88 + // Loading all tables to registers + // Destination kept in GP registers + // Full registers estimated 8 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_2x1_end + VMOVDQU (CX), Y0 + VMOVDQU 32(CX), Y1 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + MOVQ in_base+24(FP), CX + MOVQ (CX), DX + MOVQ 24(CX), CX + MOVQ out_base+48(FP), BX + MOVQ (BX), BX + MOVQ start+72(FP), SI + + // Add start offset to output + ADDQ SI, BX + + // Add start offset to input + ADDQ SI, DX + ADDQ SI, CX + MOVQ $0x0000000f, SI + MOVQ SI, X5 + VPBROADCASTB X5, Y5 + +mulAvxTwo_2x1_loop: + // Load and process 32 bytes from input 0 to 1 outputs + VMOVDQU (DX), Y6 + ADDQ $0x20, DX + VPSRLQ $0x04, Y6, Y7 + VPAND Y5, Y6, Y6 + VPAND Y5, Y7, Y7 + VPSHUFB Y6, Y0, Y6 + VPSHUFB Y7, Y1, Y7 + VPXOR Y6, Y7, Y4 + + // Load and process 32 bytes from input 1 to 1 outputs + VMOVDQU (CX), Y6 + ADDQ $0x20, CX + VPSRLQ $0x04, Y6, Y7 + VPAND Y5, Y6, Y6 + VPAND Y5, Y7, Y7 + VPSHUFB Y6, Y2, Y6 + VPSHUFB Y7, Y3, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Store 1 outputs + VMOVDQU Y4, (BX) + ADDQ $0x20, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x1_loop + VZEROUPPER + +mulAvxTwo_2x1_end: + RET + +// func mulAvxTwo_2x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x1_64(SB), $0-88 + // Loading all tables to registers + // Destination kept in GP registers + // Full registers estimated 14 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_2x1_64_end + VMOVDQU (CX), Y0 + VMOVDQU 32(CX), Y1 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + MOVQ in_base+24(FP), CX + MOVQ (CX), DX + MOVQ 24(CX), CX + MOVQ out_base+48(FP), BX + MOVQ out_base+48(FP), BX + MOVQ (BX), BX + MOVQ start+72(FP), SI + + // Add start offset to output + ADDQ SI, BX + + // Add start offset to input + ADDQ SI, DX + ADDQ SI, CX + MOVQ $0x0000000f, SI + MOVQ SI, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_2x1_64_loop: + // Load and process 64 bytes from input 0 to 1 outputs + VMOVDQU (DX), Y7 + VMOVDQU 32(DX), Y9 + ADDQ $0x40, DX + VPSRLQ $0x04, Y7, Y8 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y7, Y7 + VPAND Y6, Y9, Y9 + VPAND Y6, Y8, Y8 + VPAND Y6, Y10, Y10 + VPSHUFB Y7, Y0, Y7 + VPSHUFB Y9, Y0, Y9 + VPSHUFB Y8, Y1, Y8 + VPSHUFB Y10, Y1, Y10 + VPXOR Y7, Y8, Y4 + VPXOR Y9, Y10, Y5 + + // Load and process 64 bytes from input 1 to 1 outputs + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y9 + ADDQ $0x40, CX + VPSRLQ $0x04, Y7, Y8 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y7, Y7 + VPAND Y6, Y9, Y9 + VPAND Y6, Y8, Y8 + VPAND Y6, Y10, Y10 + VPSHUFB Y7, Y2, Y7 + VPSHUFB Y9, Y2, Y9 + VPSHUFB Y8, Y3, Y8 + VPSHUFB Y10, Y3, Y10 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Store 1 outputs + VMOVDQU Y4, (BX) + VMOVDQU Y5, 32(BX) + ADDQ $0x40, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x1_64_loop + VZEROUPPER + +mulAvxTwo_2x1_64_end: + RET + +// func mulAvxTwo_2x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x1Xor(SB), NOSPLIT, $0-88 + // Loading all tables to registers + // Destination kept in GP registers + // Full registers estimated 8 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_2x1Xor_end + VMOVDQU (CX), Y0 + VMOVDQU 32(CX), Y1 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + MOVQ in_base+24(FP), CX + MOVQ (CX), DX + MOVQ 24(CX), CX + MOVQ out_base+48(FP), BX + MOVQ (BX), BX + MOVQ start+72(FP), SI + + // Add start offset to output + ADDQ SI, BX + + // Add start offset to input + ADDQ SI, DX + ADDQ SI, CX + MOVQ $0x0000000f, SI + MOVQ SI, X5 + VPBROADCASTB X5, Y5 + +mulAvxTwo_2x1Xor_loop: + // Load and process 32 bytes from input 0 to 1 outputs + VMOVDQU (DX), Y6 + ADDQ $0x20, DX + VPSRLQ $0x04, Y6, Y7 + VPAND Y5, Y6, Y6 + VPAND Y5, Y7, Y7 + VMOVDQU (BX), Y4 + VPSHUFB Y6, Y0, Y6 + VPSHUFB Y7, Y1, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 1 to 1 outputs + VMOVDQU (CX), Y6 + ADDQ $0x20, CX + VPSRLQ $0x04, Y6, Y7 + VPAND Y5, Y6, Y6 + VPAND Y5, Y7, Y7 + VPSHUFB Y6, Y2, Y6 + VPSHUFB Y7, Y3, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Store 1 outputs + VMOVDQU Y4, (BX) + ADDQ $0x20, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x1Xor_loop + VZEROUPPER + +mulAvxTwo_2x1Xor_end: + RET + +// func mulAvxTwo_2x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x1_64Xor(SB), $0-88 + // Loading all tables to registers + // Destination kept in GP registers + // Full registers estimated 14 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_2x1_64Xor_end + VMOVDQU (CX), Y0 + VMOVDQU 32(CX), Y1 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + MOVQ in_base+24(FP), CX + MOVQ (CX), DX + MOVQ 24(CX), CX + MOVQ out_base+48(FP), BX + MOVQ out_base+48(FP), BX + MOVQ (BX), BX + MOVQ start+72(FP), SI + + // Add start offset to output + ADDQ SI, BX + + // Add start offset to input + ADDQ SI, DX + ADDQ SI, CX + MOVQ $0x0000000f, SI + MOVQ SI, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_2x1_64Xor_loop: + // Load 1 outputs + VMOVDQU (BX), Y4 + VMOVDQU 32(BX), Y5 + + // Load and process 64 bytes from input 0 to 1 outputs + VMOVDQU (DX), Y7 + VMOVDQU 32(DX), Y9 + ADDQ $0x40, DX + VPSRLQ $0x04, Y7, Y8 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y7, Y7 + VPAND Y6, Y9, Y9 + VPAND Y6, Y8, Y8 + VPAND Y6, Y10, Y10 + VPSHUFB Y7, Y0, Y7 + VPSHUFB Y9, Y0, Y9 + VPSHUFB Y8, Y1, Y8 + VPSHUFB Y10, Y1, Y10 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 1 to 1 outputs + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y9 + ADDQ $0x40, CX + VPSRLQ $0x04, Y7, Y8 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y7, Y7 + VPAND Y6, Y9, Y9 + VPAND Y6, Y8, Y8 + VPAND Y6, Y10, Y10 + VPSHUFB Y7, Y2, Y7 + VPSHUFB Y9, Y2, Y9 + VPSHUFB Y8, Y3, Y8 + VPSHUFB Y10, Y3, Y10 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Store 1 outputs + VMOVDQU Y4, (BX) + VMOVDQU Y5, 32(BX) + ADDQ $0x40, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x1_64Xor_loop + VZEROUPPER + +mulAvxTwo_2x1_64Xor_end: + RET + +// func mulAvxTwo_2x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x2(SB), NOSPLIT, $0-88 + // Loading all tables to registers + // Destination kept in GP registers + // Full registers estimated 15 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_2x2_end + VMOVDQU (CX), Y0 + VMOVDQU 32(CX), Y1 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + MOVQ in_base+24(FP), CX + MOVQ (CX), DX + MOVQ 24(CX), CX + MOVQ out_base+48(FP), BX + MOVQ (BX), SI + MOVQ 24(BX), BX + MOVQ start+72(FP), DI + + // Add start offset to output + ADDQ DI, SI + ADDQ DI, BX + + // Add start offset to input + ADDQ DI, DX + ADDQ DI, CX + MOVQ $0x0000000f, DI + MOVQ DI, X10 + VPBROADCASTB X10, Y10 + +mulAvxTwo_2x2_loop: + // Load and process 32 bytes from input 0 to 2 outputs + VMOVDQU (DX), Y13 + ADDQ $0x20, DX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VPSHUFB Y13, Y0, Y11 + VPSHUFB Y14, Y1, Y12 + VPXOR Y11, Y12, Y8 + VPSHUFB Y13, Y2, Y11 + VPSHUFB Y14, Y3, Y12 + VPXOR Y11, Y12, Y9 + + // Load and process 32 bytes from input 1 to 2 outputs + VMOVDQU (CX), Y13 + ADDQ $0x20, CX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VPSHUFB Y13, Y4, Y11 + VPSHUFB Y14, Y5, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VPSHUFB Y13, Y6, Y11 + VPSHUFB Y14, Y7, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Store 2 outputs + VMOVDQU Y8, (SI) + ADDQ $0x20, SI + VMOVDQU Y9, (BX) + ADDQ $0x20, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x2_loop + VZEROUPPER + +mulAvxTwo_2x2_end: + RET + +// func mulAvxTwo_2x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x2_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 25 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_2x2_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), DX + MOVQ out_base+48(FP), SI + MOVQ out_base+48(FP), SI + MOVQ (SI), DI + MOVQ 24(SI), SI + MOVQ start+72(FP), R8 + + // Add start offset to output + ADDQ R8, DI + ADDQ R8, SI + + // Add start offset to input + ADDQ R8, BX + ADDQ R8, DX + MOVQ $0x0000000f, R8 + MOVQ R8, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_2x2_64_loop: + // Load and process 64 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y9 + VMOVDQU 32(BX), Y11 + ADDQ $0x40, BX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y0 + VPXOR Y7, Y8, Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y2 + VPXOR Y7, Y8, Y3 + + // Load and process 64 bytes from input 1 to 2 outputs + VMOVDQU (DX), Y9 + VMOVDQU 32(DX), Y11 + ADDQ $0x40, DX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Store 2 outputs + VMOVDQU Y0, (DI) + VMOVDQU Y1, 32(DI) + ADDQ $0x40, DI + VMOVDQU Y2, (SI) + VMOVDQU Y3, 32(SI) + ADDQ $0x40, SI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x2_64_loop + VZEROUPPER + +mulAvxTwo_2x2_64_end: + RET + +// func mulAvxTwo_2x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x2Xor(SB), NOSPLIT, $0-88 + // Loading all tables to registers + // Destination kept in GP registers + // Full registers estimated 15 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_2x2Xor_end + VMOVDQU (CX), Y0 + VMOVDQU 32(CX), Y1 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + MOVQ in_base+24(FP), CX + MOVQ (CX), DX + MOVQ 24(CX), CX + MOVQ out_base+48(FP), BX + MOVQ (BX), SI + MOVQ 24(BX), BX + MOVQ start+72(FP), DI + + // Add start offset to output + ADDQ DI, SI + ADDQ DI, BX + + // Add start offset to input + ADDQ DI, DX + ADDQ DI, CX + MOVQ $0x0000000f, DI + MOVQ DI, X10 + VPBROADCASTB X10, Y10 + +mulAvxTwo_2x2Xor_loop: + // Load and process 32 bytes from input 0 to 2 outputs + VMOVDQU (DX), Y13 + ADDQ $0x20, DX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU (SI), Y8 + VPSHUFB Y13, Y0, Y11 + VPSHUFB Y14, Y1, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU (BX), Y9 + VPSHUFB Y13, Y2, Y11 + VPSHUFB Y14, Y3, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 1 to 2 outputs + VMOVDQU (CX), Y13 + ADDQ $0x20, CX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VPSHUFB Y13, Y4, Y11 + VPSHUFB Y14, Y5, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VPSHUFB Y13, Y6, Y11 + VPSHUFB Y14, Y7, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Store 2 outputs + VMOVDQU Y8, (SI) + ADDQ $0x20, SI + VMOVDQU Y9, (BX) + ADDQ $0x20, BX + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x2Xor_loop + VZEROUPPER + +mulAvxTwo_2x2Xor_end: + RET + +// func mulAvxTwo_2x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x2_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 25 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_2x2_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), DX + MOVQ out_base+48(FP), SI + MOVQ out_base+48(FP), SI + MOVQ (SI), DI + MOVQ 24(SI), SI + MOVQ start+72(FP), R8 + + // Add start offset to output + ADDQ R8, DI + ADDQ R8, SI + + // Add start offset to input + ADDQ R8, BX + ADDQ R8, DX + MOVQ $0x0000000f, R8 + MOVQ R8, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_2x2_64Xor_loop: + // Load 2 outputs + VMOVDQU (DI), Y0 + VMOVDQU 32(DI), Y1 + VMOVDQU (SI), Y2 + VMOVDQU 32(SI), Y3 + + // Load and process 64 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y9 + VMOVDQU 32(BX), Y11 + ADDQ $0x40, BX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 1 to 2 outputs + VMOVDQU (DX), Y9 + VMOVDQU 32(DX), Y11 + ADDQ $0x40, DX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Store 2 outputs + VMOVDQU Y0, (DI) + VMOVDQU Y1, 32(DI) + ADDQ $0x40, DI + VMOVDQU Y2, (SI) + VMOVDQU Y3, 32(SI) + ADDQ $0x40, SI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x2_64Xor_loop + VZEROUPPER + +mulAvxTwo_2x2_64Xor_end: + RET + +// func mulAvxTwo_2x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x3(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 20 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_2x3_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), DX + MOVQ out_base+48(FP), SI + MOVQ (SI), DI + MOVQ 24(SI), R8 + MOVQ 48(SI), SI + MOVQ start+72(FP), R9 + + // Add start offset to output + ADDQ R9, DI + ADDQ R9, R8 + ADDQ R9, SI + + // Add start offset to input + ADDQ R9, BX + ADDQ R9, DX + MOVQ $0x0000000f, R9 + MOVQ R9, X3 + VPBROADCASTB X3, Y3 + +mulAvxTwo_2x3_loop: + // Load and process 32 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y6 + ADDQ $0x20, BX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU (CX), Y4 + VMOVDQU 32(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y0 + VMOVDQU 64(CX), Y4 + VMOVDQU 96(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y1 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y2 + + // Load and process 32 bytes from input 1 to 3 outputs + VMOVDQU (DX), Y6 + ADDQ $0x20, DX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 192(CX), Y4 + VMOVDQU 224(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 256(CX), Y4 + VMOVDQU 288(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 320(CX), Y4 + VMOVDQU 352(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Store 3 outputs + VMOVDQU Y0, (DI) + ADDQ $0x20, DI + VMOVDQU Y1, (R8) + ADDQ $0x20, R8 + VMOVDQU Y2, (SI) + ADDQ $0x20, SI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x3_loop + VZEROUPPER + +mulAvxTwo_2x3_end: + RET + +// func mulAvxTwo_2x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x3_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 34 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_2x3_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), DX + MOVQ out_base+48(FP), SI + MOVQ out_base+48(FP), SI + MOVQ (SI), DI + MOVQ 24(SI), R8 + MOVQ 48(SI), SI + MOVQ start+72(FP), R9 + + // Add start offset to output + ADDQ R9, DI + ADDQ R9, R8 + ADDQ R9, SI + + // Add start offset to input + ADDQ R9, BX + ADDQ R9, DX + MOVQ $0x0000000f, R9 + MOVQ R9, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_2x3_64_loop: + // Load and process 64 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y11 + VMOVDQU 32(BX), Y13 + ADDQ $0x40, BX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y0 + VPXOR Y9, Y10, Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y2 + VPXOR Y9, Y10, Y3 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y4 + VPXOR Y9, Y10, Y5 + + // Load and process 64 bytes from input 1 to 3 outputs + VMOVDQU (DX), Y11 + VMOVDQU 32(DX), Y13 + ADDQ $0x40, DX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Store 3 outputs + VMOVDQU Y0, (DI) + VMOVDQU Y1, 32(DI) + ADDQ $0x40, DI + VMOVDQU Y2, (R8) + VMOVDQU Y3, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y4, (SI) + VMOVDQU Y5, 32(SI) + ADDQ $0x40, SI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x3_64_loop + VZEROUPPER + +mulAvxTwo_2x3_64_end: + RET + +// func mulAvxTwo_2x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x3Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 20 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_2x3Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), DX + MOVQ out_base+48(FP), SI + MOVQ (SI), DI + MOVQ 24(SI), R8 + MOVQ 48(SI), SI + MOVQ start+72(FP), R9 + + // Add start offset to output + ADDQ R9, DI + ADDQ R9, R8 + ADDQ R9, SI + + // Add start offset to input + ADDQ R9, BX + ADDQ R9, DX + MOVQ $0x0000000f, R9 + MOVQ R9, X3 + VPBROADCASTB X3, Y3 + +mulAvxTwo_2x3Xor_loop: + // Load and process 32 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y6 + ADDQ $0x20, BX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU (DI), Y0 + VMOVDQU (CX), Y4 + VMOVDQU 32(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU (R8), Y1 + VMOVDQU 64(CX), Y4 + VMOVDQU 96(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU (SI), Y2 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 1 to 3 outputs + VMOVDQU (DX), Y6 + ADDQ $0x20, DX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 192(CX), Y4 + VMOVDQU 224(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 256(CX), Y4 + VMOVDQU 288(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 320(CX), Y4 + VMOVDQU 352(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Store 3 outputs + VMOVDQU Y0, (DI) + ADDQ $0x20, DI + VMOVDQU Y1, (R8) + ADDQ $0x20, R8 + VMOVDQU Y2, (SI) + ADDQ $0x20, SI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x3Xor_loop + VZEROUPPER + +mulAvxTwo_2x3Xor_end: + RET + +// func mulAvxTwo_2x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x3_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 34 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_2x3_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), DX + MOVQ out_base+48(FP), SI + MOVQ out_base+48(FP), SI + MOVQ (SI), DI + MOVQ 24(SI), R8 + MOVQ 48(SI), SI + MOVQ start+72(FP), R9 + + // Add start offset to output + ADDQ R9, DI + ADDQ R9, R8 + ADDQ R9, SI + + // Add start offset to input + ADDQ R9, BX + ADDQ R9, DX + MOVQ $0x0000000f, R9 + MOVQ R9, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_2x3_64Xor_loop: + // Load 3 outputs + VMOVDQU (DI), Y0 + VMOVDQU 32(DI), Y1 + VMOVDQU (R8), Y2 + VMOVDQU 32(R8), Y3 + VMOVDQU (SI), Y4 + VMOVDQU 32(SI), Y5 + + // Load and process 64 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y11 + VMOVDQU 32(BX), Y13 + ADDQ $0x40, BX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 1 to 3 outputs + VMOVDQU (DX), Y11 + VMOVDQU 32(DX), Y13 + ADDQ $0x40, DX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Store 3 outputs + VMOVDQU Y0, (DI) + VMOVDQU Y1, 32(DI) + ADDQ $0x40, DI + VMOVDQU Y2, (R8) + VMOVDQU Y3, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y4, (SI) + VMOVDQU Y5, 32(SI) + ADDQ $0x40, SI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x3_64Xor_loop + VZEROUPPER + +mulAvxTwo_2x3_64Xor_end: + RET + +// func mulAvxTwo_2x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x4(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 25 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_2x4_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), DX + MOVQ out_base+48(FP), SI + MOVQ (SI), DI + MOVQ 24(SI), R8 + MOVQ 48(SI), R9 + MOVQ 72(SI), SI + MOVQ start+72(FP), R10 + + // Add start offset to output + ADDQ R10, DI + ADDQ R10, R8 + ADDQ R10, R9 + ADDQ R10, SI + + // Add start offset to input + ADDQ R10, BX + ADDQ R10, DX + MOVQ $0x0000000f, R10 + MOVQ R10, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_2x4_loop: + // Load and process 32 bytes from input 0 to 4 outputs + VMOVDQU (BX), Y7 + ADDQ $0x20, BX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y0 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y1 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y2 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y3 + + // Load and process 32 bytes from input 1 to 4 outputs + VMOVDQU (DX), Y7 + ADDQ $0x20, DX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Store 4 outputs + VMOVDQU Y0, (DI) + ADDQ $0x20, DI + VMOVDQU Y1, (R8) + ADDQ $0x20, R8 + VMOVDQU Y2, (R9) + ADDQ $0x20, R9 + VMOVDQU Y3, (SI) + ADDQ $0x20, SI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x4_loop + VZEROUPPER + +mulAvxTwo_2x4_end: + RET + +// func mulAvxTwo_2x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x4Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 25 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_2x4Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), DX + MOVQ out_base+48(FP), SI + MOVQ (SI), DI + MOVQ 24(SI), R8 + MOVQ 48(SI), R9 + MOVQ 72(SI), SI + MOVQ start+72(FP), R10 + + // Add start offset to output + ADDQ R10, DI + ADDQ R10, R8 + ADDQ R10, R9 + ADDQ R10, SI + + // Add start offset to input + ADDQ R10, BX + ADDQ R10, DX + MOVQ $0x0000000f, R10 + MOVQ R10, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_2x4Xor_loop: + // Load and process 32 bytes from input 0 to 4 outputs + VMOVDQU (BX), Y7 + ADDQ $0x20, BX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU (DI), Y0 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU (R8), Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU (R9), Y2 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU (SI), Y3 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 1 to 4 outputs + VMOVDQU (DX), Y7 + ADDQ $0x20, DX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Store 4 outputs + VMOVDQU Y0, (DI) + ADDQ $0x20, DI + VMOVDQU Y1, (R8) + ADDQ $0x20, R8 + VMOVDQU Y2, (R9) + ADDQ $0x20, R9 + VMOVDQU Y3, (SI) + ADDQ $0x20, SI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x4Xor_loop + VZEROUPPER + +mulAvxTwo_2x4Xor_end: + RET + +// func mulAvxTwo_2x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x5(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 30 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_2x5_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), DX + MOVQ out_base+48(FP), SI + MOVQ (SI), DI + MOVQ 24(SI), R8 + MOVQ 48(SI), R9 + MOVQ 72(SI), R10 + MOVQ 96(SI), SI + MOVQ start+72(FP), R11 + + // Add start offset to output + ADDQ R11, DI + ADDQ R11, R8 + ADDQ R11, R9 + ADDQ R11, R10 + ADDQ R11, SI + + // Add start offset to input + ADDQ R11, BX + ADDQ R11, DX + MOVQ $0x0000000f, R11 + MOVQ R11, X5 + VPBROADCASTB X5, Y5 + +mulAvxTwo_2x5_loop: + // Load and process 32 bytes from input 0 to 5 outputs + VMOVDQU (BX), Y8 + ADDQ $0x20, BX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU (CX), Y6 + VMOVDQU 32(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y0 + VMOVDQU 64(CX), Y6 + VMOVDQU 96(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y1 + VMOVDQU 128(CX), Y6 + VMOVDQU 160(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y2 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y3 + VMOVDQU 256(CX), Y6 + VMOVDQU 288(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y4 + + // Load and process 32 bytes from input 1 to 5 outputs + VMOVDQU (DX), Y8 + ADDQ $0x20, DX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 320(CX), Y6 + VMOVDQU 352(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 384(CX), Y6 + VMOVDQU 416(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 448(CX), Y6 + VMOVDQU 480(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 512(CX), Y6 + VMOVDQU 544(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 576(CX), Y6 + VMOVDQU 608(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Store 5 outputs + VMOVDQU Y0, (DI) + ADDQ $0x20, DI + VMOVDQU Y1, (R8) + ADDQ $0x20, R8 + VMOVDQU Y2, (R9) + ADDQ $0x20, R9 + VMOVDQU Y3, (R10) + ADDQ $0x20, R10 + VMOVDQU Y4, (SI) + ADDQ $0x20, SI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x5_loop + VZEROUPPER + +mulAvxTwo_2x5_end: + RET + +// func mulAvxTwo_2x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x5Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 30 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_2x5Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), DX + MOVQ out_base+48(FP), SI + MOVQ (SI), DI + MOVQ 24(SI), R8 + MOVQ 48(SI), R9 + MOVQ 72(SI), R10 + MOVQ 96(SI), SI + MOVQ start+72(FP), R11 + + // Add start offset to output + ADDQ R11, DI + ADDQ R11, R8 + ADDQ R11, R9 + ADDQ R11, R10 + ADDQ R11, SI + + // Add start offset to input + ADDQ R11, BX + ADDQ R11, DX + MOVQ $0x0000000f, R11 + MOVQ R11, X5 + VPBROADCASTB X5, Y5 + +mulAvxTwo_2x5Xor_loop: + // Load and process 32 bytes from input 0 to 5 outputs + VMOVDQU (BX), Y8 + ADDQ $0x20, BX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU (DI), Y0 + VMOVDQU (CX), Y6 + VMOVDQU 32(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU (R8), Y1 + VMOVDQU 64(CX), Y6 + VMOVDQU 96(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU (R9), Y2 + VMOVDQU 128(CX), Y6 + VMOVDQU 160(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU (R10), Y3 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU (SI), Y4 + VMOVDQU 256(CX), Y6 + VMOVDQU 288(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 1 to 5 outputs + VMOVDQU (DX), Y8 + ADDQ $0x20, DX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 320(CX), Y6 + VMOVDQU 352(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 384(CX), Y6 + VMOVDQU 416(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 448(CX), Y6 + VMOVDQU 480(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 512(CX), Y6 + VMOVDQU 544(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 576(CX), Y6 + VMOVDQU 608(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Store 5 outputs + VMOVDQU Y0, (DI) + ADDQ $0x20, DI + VMOVDQU Y1, (R8) + ADDQ $0x20, R8 + VMOVDQU Y2, (R9) + ADDQ $0x20, R9 + VMOVDQU Y3, (R10) + ADDQ $0x20, R10 + VMOVDQU Y4, (SI) + ADDQ $0x20, SI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x5Xor_loop + VZEROUPPER + +mulAvxTwo_2x5Xor_end: + RET + +// func mulAvxTwo_2x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x6(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 35 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_2x6_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), DX + MOVQ out_base+48(FP), SI + MOVQ (SI), DI + MOVQ 24(SI), R8 + MOVQ 48(SI), R9 + MOVQ 72(SI), R10 + MOVQ 96(SI), R11 + MOVQ 120(SI), SI + MOVQ start+72(FP), R12 + + // Add start offset to output + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, R9 + ADDQ R12, R10 + ADDQ R12, R11 + ADDQ R12, SI + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_2x6_loop: + // Load and process 32 bytes from input 0 to 6 outputs + VMOVDQU (BX), Y9 + ADDQ $0x20, BX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y0 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y1 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y2 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y3 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y4 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y5 + + // Load and process 32 bytes from input 1 to 6 outputs + VMOVDQU (DX), Y9 + ADDQ $0x20, DX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Store 6 outputs + VMOVDQU Y0, (DI) + ADDQ $0x20, DI + VMOVDQU Y1, (R8) + ADDQ $0x20, R8 + VMOVDQU Y2, (R9) + ADDQ $0x20, R9 + VMOVDQU Y3, (R10) + ADDQ $0x20, R10 + VMOVDQU Y4, (R11) + ADDQ $0x20, R11 + VMOVDQU Y5, (SI) + ADDQ $0x20, SI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x6_loop + VZEROUPPER + +mulAvxTwo_2x6_end: + RET + +// func mulAvxTwo_2x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x6Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 35 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_2x6Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), DX + MOVQ out_base+48(FP), SI + MOVQ (SI), DI + MOVQ 24(SI), R8 + MOVQ 48(SI), R9 + MOVQ 72(SI), R10 + MOVQ 96(SI), R11 + MOVQ 120(SI), SI + MOVQ start+72(FP), R12 + + // Add start offset to output + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, R9 + ADDQ R12, R10 + ADDQ R12, R11 + ADDQ R12, SI + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_2x6Xor_loop: + // Load and process 32 bytes from input 0 to 6 outputs + VMOVDQU (BX), Y9 + ADDQ $0x20, BX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU (DI), Y0 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU (R8), Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU (R9), Y2 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU (R10), Y3 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU (R11), Y4 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU (SI), Y5 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 1 to 6 outputs + VMOVDQU (DX), Y9 + ADDQ $0x20, DX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Store 6 outputs + VMOVDQU Y0, (DI) + ADDQ $0x20, DI + VMOVDQU Y1, (R8) + ADDQ $0x20, R8 + VMOVDQU Y2, (R9) + ADDQ $0x20, R9 + VMOVDQU Y3, (R10) + ADDQ $0x20, R10 + VMOVDQU Y4, (R11) + ADDQ $0x20, R11 + VMOVDQU Y5, (SI) + ADDQ $0x20, SI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x6Xor_loop + VZEROUPPER + +mulAvxTwo_2x6Xor_end: + RET + +// func mulAvxTwo_2x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x7(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 40 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_2x7_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), DX + MOVQ out_base+48(FP), SI + MOVQ (SI), DI + MOVQ 24(SI), R8 + MOVQ 48(SI), R9 + MOVQ 72(SI), R10 + MOVQ 96(SI), R11 + MOVQ 120(SI), R12 + MOVQ 144(SI), SI + MOVQ start+72(FP), R13 + + // Add start offset to output + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, R12 + ADDQ R13, SI + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X7 + VPBROADCASTB X7, Y7 + +mulAvxTwo_2x7_loop: + // Load and process 32 bytes from input 0 to 7 outputs + VMOVDQU (BX), Y10 + ADDQ $0x20, BX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU (CX), Y8 + VMOVDQU 32(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y0 + VMOVDQU 64(CX), Y8 + VMOVDQU 96(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y1 + VMOVDQU 128(CX), Y8 + VMOVDQU 160(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y2 + VMOVDQU 192(CX), Y8 + VMOVDQU 224(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y3 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y4 + VMOVDQU 320(CX), Y8 + VMOVDQU 352(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y5 + VMOVDQU 384(CX), Y8 + VMOVDQU 416(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y6 + + // Load and process 32 bytes from input 1 to 7 outputs + VMOVDQU (DX), Y10 + ADDQ $0x20, DX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 448(CX), Y8 + VMOVDQU 480(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 512(CX), Y8 + VMOVDQU 544(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 576(CX), Y8 + VMOVDQU 608(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 640(CX), Y8 + VMOVDQU 672(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 704(CX), Y8 + VMOVDQU 736(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 768(CX), Y8 + VMOVDQU 800(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 832(CX), Y8 + VMOVDQU 864(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Store 7 outputs + VMOVDQU Y0, (DI) + ADDQ $0x20, DI + VMOVDQU Y1, (R8) + ADDQ $0x20, R8 + VMOVDQU Y2, (R9) + ADDQ $0x20, R9 + VMOVDQU Y3, (R10) + ADDQ $0x20, R10 + VMOVDQU Y4, (R11) + ADDQ $0x20, R11 + VMOVDQU Y5, (R12) + ADDQ $0x20, R12 + VMOVDQU Y6, (SI) + ADDQ $0x20, SI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x7_loop + VZEROUPPER + +mulAvxTwo_2x7_end: + RET + +// func mulAvxTwo_2x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x7Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 40 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_2x7Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), DX + MOVQ out_base+48(FP), SI + MOVQ (SI), DI + MOVQ 24(SI), R8 + MOVQ 48(SI), R9 + MOVQ 72(SI), R10 + MOVQ 96(SI), R11 + MOVQ 120(SI), R12 + MOVQ 144(SI), SI + MOVQ start+72(FP), R13 + + // Add start offset to output + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, R12 + ADDQ R13, SI + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X7 + VPBROADCASTB X7, Y7 + +mulAvxTwo_2x7Xor_loop: + // Load and process 32 bytes from input 0 to 7 outputs + VMOVDQU (BX), Y10 + ADDQ $0x20, BX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU (DI), Y0 + VMOVDQU (CX), Y8 + VMOVDQU 32(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU (R8), Y1 + VMOVDQU 64(CX), Y8 + VMOVDQU 96(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU (R9), Y2 + VMOVDQU 128(CX), Y8 + VMOVDQU 160(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU (R10), Y3 + VMOVDQU 192(CX), Y8 + VMOVDQU 224(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU (R11), Y4 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU (R12), Y5 + VMOVDQU 320(CX), Y8 + VMOVDQU 352(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU (SI), Y6 + VMOVDQU 384(CX), Y8 + VMOVDQU 416(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 1 to 7 outputs + VMOVDQU (DX), Y10 + ADDQ $0x20, DX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 448(CX), Y8 + VMOVDQU 480(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 512(CX), Y8 + VMOVDQU 544(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 576(CX), Y8 + VMOVDQU 608(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 640(CX), Y8 + VMOVDQU 672(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 704(CX), Y8 + VMOVDQU 736(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 768(CX), Y8 + VMOVDQU 800(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 832(CX), Y8 + VMOVDQU 864(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Store 7 outputs + VMOVDQU Y0, (DI) + ADDQ $0x20, DI + VMOVDQU Y1, (R8) + ADDQ $0x20, R8 + VMOVDQU Y2, (R9) + ADDQ $0x20, R9 + VMOVDQU Y3, (R10) + ADDQ $0x20, R10 + VMOVDQU Y4, (R11) + ADDQ $0x20, R11 + VMOVDQU Y5, (R12) + ADDQ $0x20, R12 + VMOVDQU Y6, (SI) + ADDQ $0x20, SI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x7Xor_loop + VZEROUPPER + +mulAvxTwo_2x7Xor_end: + RET + +// func mulAvxTwo_2x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x8(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 45 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_2x8_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), DX + MOVQ out_base+48(FP), SI + MOVQ (SI), DI + MOVQ 24(SI), R8 + MOVQ 48(SI), R9 + MOVQ 72(SI), R10 + MOVQ 96(SI), R11 + MOVQ 120(SI), R12 + MOVQ 144(SI), R13 + MOVQ 168(SI), SI + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, R13 + ADDQ R14, SI + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X8 + VPBROADCASTB X8, Y8 + +mulAvxTwo_2x8_loop: + // Load and process 32 bytes from input 0 to 8 outputs + VMOVDQU (BX), Y11 + ADDQ $0x20, BX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU (CX), Y9 + VMOVDQU 32(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y0 + VMOVDQU 64(CX), Y9 + VMOVDQU 96(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y1 + VMOVDQU 128(CX), Y9 + VMOVDQU 160(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y2 + VMOVDQU 192(CX), Y9 + VMOVDQU 224(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y3 + VMOVDQU 256(CX), Y9 + VMOVDQU 288(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y4 + VMOVDQU 320(CX), Y9 + VMOVDQU 352(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y5 + VMOVDQU 384(CX), Y9 + VMOVDQU 416(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y6 + VMOVDQU 448(CX), Y9 + VMOVDQU 480(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y7 + + // Load and process 32 bytes from input 1 to 8 outputs + VMOVDQU (DX), Y11 + ADDQ $0x20, DX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 512(CX), Y9 + VMOVDQU 544(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 576(CX), Y9 + VMOVDQU 608(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y9 + VMOVDQU 672(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 704(CX), Y9 + VMOVDQU 736(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 768(CX), Y9 + VMOVDQU 800(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 832(CX), Y9 + VMOVDQU 864(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 896(CX), Y9 + VMOVDQU 928(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 960(CX), Y9 + VMOVDQU 992(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Store 8 outputs + VMOVDQU Y0, (DI) + ADDQ $0x20, DI + VMOVDQU Y1, (R8) + ADDQ $0x20, R8 + VMOVDQU Y2, (R9) + ADDQ $0x20, R9 + VMOVDQU Y3, (R10) + ADDQ $0x20, R10 + VMOVDQU Y4, (R11) + ADDQ $0x20, R11 + VMOVDQU Y5, (R12) + ADDQ $0x20, R12 + VMOVDQU Y6, (R13) + ADDQ $0x20, R13 + VMOVDQU Y7, (SI) + ADDQ $0x20, SI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x8_loop + VZEROUPPER + +mulAvxTwo_2x8_end: + RET + +// func mulAvxTwo_2x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x8Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 45 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_2x8Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), DX + MOVQ out_base+48(FP), SI + MOVQ (SI), DI + MOVQ 24(SI), R8 + MOVQ 48(SI), R9 + MOVQ 72(SI), R10 + MOVQ 96(SI), R11 + MOVQ 120(SI), R12 + MOVQ 144(SI), R13 + MOVQ 168(SI), SI + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, R13 + ADDQ R14, SI + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X8 + VPBROADCASTB X8, Y8 + +mulAvxTwo_2x8Xor_loop: + // Load and process 32 bytes from input 0 to 8 outputs + VMOVDQU (BX), Y11 + ADDQ $0x20, BX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU (DI), Y0 + VMOVDQU (CX), Y9 + VMOVDQU 32(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU (R8), Y1 + VMOVDQU 64(CX), Y9 + VMOVDQU 96(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU (R9), Y2 + VMOVDQU 128(CX), Y9 + VMOVDQU 160(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU (R10), Y3 + VMOVDQU 192(CX), Y9 + VMOVDQU 224(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU (R11), Y4 + VMOVDQU 256(CX), Y9 + VMOVDQU 288(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU (R12), Y5 + VMOVDQU 320(CX), Y9 + VMOVDQU 352(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU (R13), Y6 + VMOVDQU 384(CX), Y9 + VMOVDQU 416(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU (SI), Y7 + VMOVDQU 448(CX), Y9 + VMOVDQU 480(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 1 to 8 outputs + VMOVDQU (DX), Y11 + ADDQ $0x20, DX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 512(CX), Y9 + VMOVDQU 544(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 576(CX), Y9 + VMOVDQU 608(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y9 + VMOVDQU 672(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 704(CX), Y9 + VMOVDQU 736(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 768(CX), Y9 + VMOVDQU 800(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 832(CX), Y9 + VMOVDQU 864(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 896(CX), Y9 + VMOVDQU 928(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 960(CX), Y9 + VMOVDQU 992(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Store 8 outputs + VMOVDQU Y0, (DI) + ADDQ $0x20, DI + VMOVDQU Y1, (R8) + ADDQ $0x20, R8 + VMOVDQU Y2, (R9) + ADDQ $0x20, R9 + VMOVDQU Y3, (R10) + ADDQ $0x20, R10 + VMOVDQU Y4, (R11) + ADDQ $0x20, R11 + VMOVDQU Y5, (R12) + ADDQ $0x20, R12 + VMOVDQU Y6, (R13) + ADDQ $0x20, R13 + VMOVDQU Y7, (SI) + ADDQ $0x20, SI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x8Xor_loop + VZEROUPPER + +mulAvxTwo_2x8Xor_end: + RET + +// func mulAvxTwo_2x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x9(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 50 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_2x9_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), DX + MOVQ out_base+48(FP), SI + MOVQ (SI), DI + MOVQ 24(SI), R8 + MOVQ 48(SI), R9 + MOVQ 72(SI), R10 + MOVQ 96(SI), R11 + MOVQ 120(SI), R12 + MOVQ 144(SI), R13 + MOVQ 168(SI), R14 + MOVQ 192(SI), SI + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, R14 + ADDQ R15, SI + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X9 + VPBROADCASTB X9, Y9 + +mulAvxTwo_2x9_loop: + // Load and process 32 bytes from input 0 to 9 outputs + VMOVDQU (BX), Y12 + ADDQ $0x20, BX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU (CX), Y10 + VMOVDQU 32(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y0 + VMOVDQU 64(CX), Y10 + VMOVDQU 96(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y1 + VMOVDQU 128(CX), Y10 + VMOVDQU 160(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y2 + VMOVDQU 192(CX), Y10 + VMOVDQU 224(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y3 + VMOVDQU 256(CX), Y10 + VMOVDQU 288(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y4 + VMOVDQU 320(CX), Y10 + VMOVDQU 352(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y5 + VMOVDQU 384(CX), Y10 + VMOVDQU 416(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y6 + VMOVDQU 448(CX), Y10 + VMOVDQU 480(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y7 + VMOVDQU 512(CX), Y10 + VMOVDQU 544(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y8 + + // Load and process 32 bytes from input 1 to 9 outputs + VMOVDQU (DX), Y12 + ADDQ $0x20, DX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 576(CX), Y10 + VMOVDQU 608(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 640(CX), Y10 + VMOVDQU 672(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 704(CX), Y10 + VMOVDQU 736(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 768(CX), Y10 + VMOVDQU 800(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 832(CX), Y10 + VMOVDQU 864(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 896(CX), Y10 + VMOVDQU 928(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 960(CX), Y10 + VMOVDQU 992(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1024(CX), Y10 + VMOVDQU 1056(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1088(CX), Y10 + VMOVDQU 1120(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Store 9 outputs + VMOVDQU Y0, (DI) + ADDQ $0x20, DI + VMOVDQU Y1, (R8) + ADDQ $0x20, R8 + VMOVDQU Y2, (R9) + ADDQ $0x20, R9 + VMOVDQU Y3, (R10) + ADDQ $0x20, R10 + VMOVDQU Y4, (R11) + ADDQ $0x20, R11 + VMOVDQU Y5, (R12) + ADDQ $0x20, R12 + VMOVDQU Y6, (R13) + ADDQ $0x20, R13 + VMOVDQU Y7, (R14) + ADDQ $0x20, R14 + VMOVDQU Y8, (SI) + ADDQ $0x20, SI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x9_loop + VZEROUPPER + +mulAvxTwo_2x9_end: + RET + +// func mulAvxTwo_2x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x9Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 50 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_2x9Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), DX + MOVQ out_base+48(FP), SI + MOVQ (SI), DI + MOVQ 24(SI), R8 + MOVQ 48(SI), R9 + MOVQ 72(SI), R10 + MOVQ 96(SI), R11 + MOVQ 120(SI), R12 + MOVQ 144(SI), R13 + MOVQ 168(SI), R14 + MOVQ 192(SI), SI + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, R14 + ADDQ R15, SI + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X9 + VPBROADCASTB X9, Y9 + +mulAvxTwo_2x9Xor_loop: + // Load and process 32 bytes from input 0 to 9 outputs + VMOVDQU (BX), Y12 + ADDQ $0x20, BX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU (DI), Y0 + VMOVDQU (CX), Y10 + VMOVDQU 32(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU (R8), Y1 + VMOVDQU 64(CX), Y10 + VMOVDQU 96(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU (R9), Y2 + VMOVDQU 128(CX), Y10 + VMOVDQU 160(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU (R10), Y3 + VMOVDQU 192(CX), Y10 + VMOVDQU 224(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU (R11), Y4 + VMOVDQU 256(CX), Y10 + VMOVDQU 288(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU (R12), Y5 + VMOVDQU 320(CX), Y10 + VMOVDQU 352(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU (R13), Y6 + VMOVDQU 384(CX), Y10 + VMOVDQU 416(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU (R14), Y7 + VMOVDQU 448(CX), Y10 + VMOVDQU 480(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU (SI), Y8 + VMOVDQU 512(CX), Y10 + VMOVDQU 544(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 1 to 9 outputs + VMOVDQU (DX), Y12 + ADDQ $0x20, DX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 576(CX), Y10 + VMOVDQU 608(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 640(CX), Y10 + VMOVDQU 672(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 704(CX), Y10 + VMOVDQU 736(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 768(CX), Y10 + VMOVDQU 800(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 832(CX), Y10 + VMOVDQU 864(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 896(CX), Y10 + VMOVDQU 928(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 960(CX), Y10 + VMOVDQU 992(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1024(CX), Y10 + VMOVDQU 1056(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1088(CX), Y10 + VMOVDQU 1120(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Store 9 outputs + VMOVDQU Y0, (DI) + ADDQ $0x20, DI + VMOVDQU Y1, (R8) + ADDQ $0x20, R8 + VMOVDQU Y2, (R9) + ADDQ $0x20, R9 + VMOVDQU Y3, (R10) + ADDQ $0x20, R10 + VMOVDQU Y4, (R11) + ADDQ $0x20, R11 + VMOVDQU Y5, (R12) + ADDQ $0x20, R12 + VMOVDQU Y6, (R13) + ADDQ $0x20, R13 + VMOVDQU Y7, (R14) + ADDQ $0x20, R14 + VMOVDQU Y8, (SI) + ADDQ $0x20, SI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x9Xor_loop + VZEROUPPER + +mulAvxTwo_2x9Xor_end: + RET + +// func mulAvxTwo_2x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x10(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 55 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_2x10_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), DX + MOVQ out_base+48(FP), SI + MOVQ (SI), DI + MOVQ 24(SI), R8 + MOVQ 48(SI), R9 + MOVQ 72(SI), R10 + MOVQ 96(SI), R11 + MOVQ 120(SI), R12 + MOVQ 144(SI), R13 + MOVQ 168(SI), R14 + MOVQ 192(SI), R15 + MOVQ 216(SI), SI + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, SI + + // Add start offset to input + ADDQ BP, BX + ADDQ BP, DX + MOVQ $0x0000000f, BP + MOVQ BP, X10 + VPBROADCASTB X10, Y10 + +mulAvxTwo_2x10_loop: + // Load and process 32 bytes from input 0 to 10 outputs + VMOVDQU (BX), Y13 + ADDQ $0x20, BX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU (CX), Y11 + VMOVDQU 32(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y0 + VMOVDQU 64(CX), Y11 + VMOVDQU 96(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y1 + VMOVDQU 128(CX), Y11 + VMOVDQU 160(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y2 + VMOVDQU 192(CX), Y11 + VMOVDQU 224(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y3 + VMOVDQU 256(CX), Y11 + VMOVDQU 288(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y4 + VMOVDQU 320(CX), Y11 + VMOVDQU 352(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y5 + VMOVDQU 384(CX), Y11 + VMOVDQU 416(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y6 + VMOVDQU 448(CX), Y11 + VMOVDQU 480(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y7 + VMOVDQU 512(CX), Y11 + VMOVDQU 544(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y8 + VMOVDQU 576(CX), Y11 + VMOVDQU 608(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y9 + + // Load and process 32 bytes from input 1 to 10 outputs + VMOVDQU (DX), Y13 + ADDQ $0x20, DX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 640(CX), Y11 + VMOVDQU 672(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 704(CX), Y11 + VMOVDQU 736(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 768(CX), Y11 + VMOVDQU 800(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 832(CX), Y11 + VMOVDQU 864(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 896(CX), Y11 + VMOVDQU 928(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 960(CX), Y11 + VMOVDQU 992(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1024(CX), Y11 + VMOVDQU 1056(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1088(CX), Y11 + VMOVDQU 1120(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1152(CX), Y11 + VMOVDQU 1184(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1216(CX), Y11 + VMOVDQU 1248(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Store 10 outputs + VMOVDQU Y0, (DI) + ADDQ $0x20, DI + VMOVDQU Y1, (R8) + ADDQ $0x20, R8 + VMOVDQU Y2, (R9) + ADDQ $0x20, R9 + VMOVDQU Y3, (R10) + ADDQ $0x20, R10 + VMOVDQU Y4, (R11) + ADDQ $0x20, R11 + VMOVDQU Y5, (R12) + ADDQ $0x20, R12 + VMOVDQU Y6, (R13) + ADDQ $0x20, R13 + VMOVDQU Y7, (R14) + ADDQ $0x20, R14 + VMOVDQU Y8, (R15) + ADDQ $0x20, R15 + VMOVDQU Y9, (SI) + ADDQ $0x20, SI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x10_loop + VZEROUPPER + +mulAvxTwo_2x10_end: + RET + +// func mulAvxTwo_2x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_2x10Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 55 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_2x10Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), DX + MOVQ out_base+48(FP), SI + MOVQ (SI), DI + MOVQ 24(SI), R8 + MOVQ 48(SI), R9 + MOVQ 72(SI), R10 + MOVQ 96(SI), R11 + MOVQ 120(SI), R12 + MOVQ 144(SI), R13 + MOVQ 168(SI), R14 + MOVQ 192(SI), R15 + MOVQ 216(SI), SI + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, SI + + // Add start offset to input + ADDQ BP, BX + ADDQ BP, DX + MOVQ $0x0000000f, BP + MOVQ BP, X10 + VPBROADCASTB X10, Y10 + +mulAvxTwo_2x10Xor_loop: + // Load and process 32 bytes from input 0 to 10 outputs + VMOVDQU (BX), Y13 + ADDQ $0x20, BX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU (DI), Y0 + VMOVDQU (CX), Y11 + VMOVDQU 32(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU (R8), Y1 + VMOVDQU 64(CX), Y11 + VMOVDQU 96(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU (R9), Y2 + VMOVDQU 128(CX), Y11 + VMOVDQU 160(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU (R10), Y3 + VMOVDQU 192(CX), Y11 + VMOVDQU 224(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU (R11), Y4 + VMOVDQU 256(CX), Y11 + VMOVDQU 288(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU (R12), Y5 + VMOVDQU 320(CX), Y11 + VMOVDQU 352(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU (R13), Y6 + VMOVDQU 384(CX), Y11 + VMOVDQU 416(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU (R14), Y7 + VMOVDQU 448(CX), Y11 + VMOVDQU 480(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU (R15), Y8 + VMOVDQU 512(CX), Y11 + VMOVDQU 544(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU (SI), Y9 + VMOVDQU 576(CX), Y11 + VMOVDQU 608(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 1 to 10 outputs + VMOVDQU (DX), Y13 + ADDQ $0x20, DX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 640(CX), Y11 + VMOVDQU 672(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 704(CX), Y11 + VMOVDQU 736(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 768(CX), Y11 + VMOVDQU 800(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 832(CX), Y11 + VMOVDQU 864(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 896(CX), Y11 + VMOVDQU 928(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 960(CX), Y11 + VMOVDQU 992(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1024(CX), Y11 + VMOVDQU 1056(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1088(CX), Y11 + VMOVDQU 1120(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1152(CX), Y11 + VMOVDQU 1184(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1216(CX), Y11 + VMOVDQU 1248(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Store 10 outputs + VMOVDQU Y0, (DI) + ADDQ $0x20, DI + VMOVDQU Y1, (R8) + ADDQ $0x20, R8 + VMOVDQU Y2, (R9) + ADDQ $0x20, R9 + VMOVDQU Y3, (R10) + ADDQ $0x20, R10 + VMOVDQU Y4, (R11) + ADDQ $0x20, R11 + VMOVDQU Y5, (R12) + ADDQ $0x20, R12 + VMOVDQU Y6, (R13) + ADDQ $0x20, R13 + VMOVDQU Y7, (R14) + ADDQ $0x20, R14 + VMOVDQU Y8, (R15) + ADDQ $0x20, R15 + VMOVDQU Y9, (SI) + ADDQ $0x20, SI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_2x10Xor_loop + VZEROUPPER + +mulAvxTwo_2x10Xor_end: + RET + +// func mulAvxTwo_3x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x1(SB), NOSPLIT, $0-88 + // Loading all tables to registers + // Destination kept in GP registers + // Full registers estimated 10 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_3x1_end + VMOVDQU (CX), Y0 + VMOVDQU 32(CX), Y1 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + MOVQ in_base+24(FP), CX + MOVQ (CX), DX + MOVQ 24(CX), BX + MOVQ 48(CX), CX + MOVQ out_base+48(FP), SI + MOVQ (SI), SI + MOVQ start+72(FP), DI + + // Add start offset to output + ADDQ DI, SI + + // Add start offset to input + ADDQ DI, DX + ADDQ DI, BX + ADDQ DI, CX + MOVQ $0x0000000f, DI + MOVQ DI, X7 + VPBROADCASTB X7, Y7 + +mulAvxTwo_3x1_loop: + // Load and process 32 bytes from input 0 to 1 outputs + VMOVDQU (DX), Y8 + ADDQ $0x20, DX + VPSRLQ $0x04, Y8, Y9 + VPAND Y7, Y8, Y8 + VPAND Y7, Y9, Y9 + VPSHUFB Y8, Y0, Y8 + VPSHUFB Y9, Y1, Y9 + VPXOR Y8, Y9, Y6 + + // Load and process 32 bytes from input 1 to 1 outputs + VMOVDQU (BX), Y8 + ADDQ $0x20, BX + VPSRLQ $0x04, Y8, Y9 + VPAND Y7, Y8, Y8 + VPAND Y7, Y9, Y9 + VPSHUFB Y8, Y2, Y8 + VPSHUFB Y9, Y3, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 2 to 1 outputs + VMOVDQU (CX), Y8 + ADDQ $0x20, CX + VPSRLQ $0x04, Y8, Y9 + VPAND Y7, Y8, Y8 + VPAND Y7, Y9, Y9 + VPSHUFB Y8, Y4, Y8 + VPSHUFB Y9, Y5, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Store 1 outputs + VMOVDQU Y6, (SI) + ADDQ $0x20, SI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x1_loop + VZEROUPPER + +mulAvxTwo_3x1_end: + RET + +// func mulAvxTwo_3x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x1_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 18 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_3x1_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ out_base+48(FP), DI + MOVQ out_base+48(FP), DI + MOVQ (DI), DI + MOVQ start+72(FP), R8 + + // Add start offset to output + ADDQ R8, DI + + // Add start offset to input + ADDQ R8, BX + ADDQ R8, SI + ADDQ R8, DX + MOVQ $0x0000000f, R8 + MOVQ R8, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_3x1_64_loop: + // Load and process 64 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y6 + VMOVDQU 32(BX), Y5 + ADDQ $0x40, BX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y0 + VPXOR Y5, Y6, Y1 + + // Load and process 64 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y6 + VMOVDQU 32(SI), Y5 + ADDQ $0x40, SI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 2 to 1 outputs + VMOVDQU (DX), Y6 + VMOVDQU 32(DX), Y5 + ADDQ $0x40, DX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Store 1 outputs + VMOVDQU Y0, (DI) + VMOVDQU Y1, 32(DI) + ADDQ $0x40, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x1_64_loop + VZEROUPPER + +mulAvxTwo_3x1_64_end: + RET + +// func mulAvxTwo_3x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x1Xor(SB), NOSPLIT, $0-88 + // Loading all tables to registers + // Destination kept in GP registers + // Full registers estimated 10 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_3x1Xor_end + VMOVDQU (CX), Y0 + VMOVDQU 32(CX), Y1 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + MOVQ in_base+24(FP), CX + MOVQ (CX), DX + MOVQ 24(CX), BX + MOVQ 48(CX), CX + MOVQ out_base+48(FP), SI + MOVQ (SI), SI + MOVQ start+72(FP), DI + + // Add start offset to output + ADDQ DI, SI + + // Add start offset to input + ADDQ DI, DX + ADDQ DI, BX + ADDQ DI, CX + MOVQ $0x0000000f, DI + MOVQ DI, X7 + VPBROADCASTB X7, Y7 + +mulAvxTwo_3x1Xor_loop: + // Load and process 32 bytes from input 0 to 1 outputs + VMOVDQU (DX), Y8 + ADDQ $0x20, DX + VPSRLQ $0x04, Y8, Y9 + VPAND Y7, Y8, Y8 + VPAND Y7, Y9, Y9 + VMOVDQU (SI), Y6 + VPSHUFB Y8, Y0, Y8 + VPSHUFB Y9, Y1, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 1 to 1 outputs + VMOVDQU (BX), Y8 + ADDQ $0x20, BX + VPSRLQ $0x04, Y8, Y9 + VPAND Y7, Y8, Y8 + VPAND Y7, Y9, Y9 + VPSHUFB Y8, Y2, Y8 + VPSHUFB Y9, Y3, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 2 to 1 outputs + VMOVDQU (CX), Y8 + ADDQ $0x20, CX + VPSRLQ $0x04, Y8, Y9 + VPAND Y7, Y8, Y8 + VPAND Y7, Y9, Y9 + VPSHUFB Y8, Y4, Y8 + VPSHUFB Y9, Y5, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Store 1 outputs + VMOVDQU Y6, (SI) + ADDQ $0x20, SI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x1Xor_loop + VZEROUPPER + +mulAvxTwo_3x1Xor_end: + RET + +// func mulAvxTwo_3x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x1_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 18 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_3x1_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ out_base+48(FP), DI + MOVQ out_base+48(FP), DI + MOVQ (DI), DI + MOVQ start+72(FP), R8 + + // Add start offset to output + ADDQ R8, DI + + // Add start offset to input + ADDQ R8, BX + ADDQ R8, SI + ADDQ R8, DX + MOVQ $0x0000000f, R8 + MOVQ R8, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_3x1_64Xor_loop: + // Load 1 outputs + VMOVDQU (DI), Y0 + VMOVDQU 32(DI), Y1 + + // Load and process 64 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y6 + VMOVDQU 32(BX), Y5 + ADDQ $0x40, BX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y6 + VMOVDQU 32(SI), Y5 + ADDQ $0x40, SI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 2 to 1 outputs + VMOVDQU (DX), Y6 + VMOVDQU 32(DX), Y5 + ADDQ $0x40, DX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Store 1 outputs + VMOVDQU Y0, (DI) + VMOVDQU Y1, 32(DI) + ADDQ $0x40, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x1_64Xor_loop + VZEROUPPER + +mulAvxTwo_3x1_64Xor_end: + RET + +// func mulAvxTwo_3x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x2(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 19 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_3x2_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ out_base+48(FP), DI + MOVQ (DI), R8 + MOVQ 24(DI), DI + MOVQ start+72(FP), R9 + + // Add start offset to output + ADDQ R9, R8 + ADDQ R9, DI + + // Add start offset to input + ADDQ R9, BX + ADDQ R9, SI + ADDQ R9, DX + MOVQ $0x0000000f, R9 + MOVQ R9, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_3x2_loop: + // Load and process 32 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y5 + ADDQ $0x20, BX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y0 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y1 + + // Load and process 32 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y5 + ADDQ $0x20, SI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 2 to 2 outputs + VMOVDQU (DX), Y5 + ADDQ $0x20, DX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Store 2 outputs + VMOVDQU Y0, (R8) + ADDQ $0x20, R8 + VMOVDQU Y1, (DI) + ADDQ $0x20, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x2_loop + VZEROUPPER + +mulAvxTwo_3x2_end: + RET + +// func mulAvxTwo_3x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x2_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 33 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_3x2_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ out_base+48(FP), DI + MOVQ out_base+48(FP), DI + MOVQ (DI), R8 + MOVQ 24(DI), DI + MOVQ start+72(FP), R9 + + // Add start offset to output + ADDQ R9, R8 + ADDQ R9, DI + + // Add start offset to input + ADDQ R9, BX + ADDQ R9, SI + ADDQ R9, DX + MOVQ $0x0000000f, R9 + MOVQ R9, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_3x2_64_loop: + // Load and process 64 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y9 + VMOVDQU 32(BX), Y11 + ADDQ $0x40, BX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y0 + VPXOR Y7, Y8, Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y2 + VPXOR Y7, Y8, Y3 + + // Load and process 64 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y9 + VMOVDQU 32(SI), Y11 + ADDQ $0x40, SI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 2 to 2 outputs + VMOVDQU (DX), Y9 + VMOVDQU 32(DX), Y11 + ADDQ $0x40, DX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Store 2 outputs + VMOVDQU Y0, (R8) + VMOVDQU Y1, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y2, (DI) + VMOVDQU Y3, 32(DI) + ADDQ $0x40, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x2_64_loop + VZEROUPPER + +mulAvxTwo_3x2_64_end: + RET + +// func mulAvxTwo_3x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x2Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 19 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_3x2Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ out_base+48(FP), DI + MOVQ (DI), R8 + MOVQ 24(DI), DI + MOVQ start+72(FP), R9 + + // Add start offset to output + ADDQ R9, R8 + ADDQ R9, DI + + // Add start offset to input + ADDQ R9, BX + ADDQ R9, SI + ADDQ R9, DX + MOVQ $0x0000000f, R9 + MOVQ R9, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_3x2Xor_loop: + // Load and process 32 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y5 + ADDQ $0x20, BX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU (R8), Y0 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU (DI), Y1 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y5 + ADDQ $0x20, SI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 2 to 2 outputs + VMOVDQU (DX), Y5 + ADDQ $0x20, DX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Store 2 outputs + VMOVDQU Y0, (R8) + ADDQ $0x20, R8 + VMOVDQU Y1, (DI) + ADDQ $0x20, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x2Xor_loop + VZEROUPPER + +mulAvxTwo_3x2Xor_end: + RET + +// func mulAvxTwo_3x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x2_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 33 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_3x2_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ out_base+48(FP), DI + MOVQ out_base+48(FP), DI + MOVQ (DI), R8 + MOVQ 24(DI), DI + MOVQ start+72(FP), R9 + + // Add start offset to output + ADDQ R9, R8 + ADDQ R9, DI + + // Add start offset to input + ADDQ R9, BX + ADDQ R9, SI + ADDQ R9, DX + MOVQ $0x0000000f, R9 + MOVQ R9, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_3x2_64Xor_loop: + // Load 2 outputs + VMOVDQU (R8), Y0 + VMOVDQU 32(R8), Y1 + VMOVDQU (DI), Y2 + VMOVDQU 32(DI), Y3 + + // Load and process 64 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y9 + VMOVDQU 32(BX), Y11 + ADDQ $0x40, BX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y9 + VMOVDQU 32(SI), Y11 + ADDQ $0x40, SI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 2 to 2 outputs + VMOVDQU (DX), Y9 + VMOVDQU 32(DX), Y11 + ADDQ $0x40, DX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Store 2 outputs + VMOVDQU Y0, (R8) + VMOVDQU Y1, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y2, (DI) + VMOVDQU Y3, 32(DI) + ADDQ $0x40, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x2_64Xor_loop + VZEROUPPER + +mulAvxTwo_3x2_64Xor_end: + RET + +// func mulAvxTwo_3x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x3(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 26 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_3x3_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ out_base+48(FP), DI + MOVQ (DI), R8 + MOVQ 24(DI), R9 + MOVQ 48(DI), DI + MOVQ start+72(FP), R10 + + // Add start offset to output + ADDQ R10, R8 + ADDQ R10, R9 + ADDQ R10, DI + + // Add start offset to input + ADDQ R10, BX + ADDQ R10, SI + ADDQ R10, DX + MOVQ $0x0000000f, R10 + MOVQ R10, X3 + VPBROADCASTB X3, Y3 + +mulAvxTwo_3x3_loop: + // Load and process 32 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y6 + ADDQ $0x20, BX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU (CX), Y4 + VMOVDQU 32(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y0 + VMOVDQU 64(CX), Y4 + VMOVDQU 96(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y1 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y2 + + // Load and process 32 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y6 + ADDQ $0x20, SI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 192(CX), Y4 + VMOVDQU 224(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 256(CX), Y4 + VMOVDQU 288(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 320(CX), Y4 + VMOVDQU 352(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 2 to 3 outputs + VMOVDQU (DX), Y6 + ADDQ $0x20, DX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 384(CX), Y4 + VMOVDQU 416(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 448(CX), Y4 + VMOVDQU 480(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 512(CX), Y4 + VMOVDQU 544(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Store 3 outputs + VMOVDQU Y0, (R8) + ADDQ $0x20, R8 + VMOVDQU Y1, (R9) + ADDQ $0x20, R9 + VMOVDQU Y2, (DI) + ADDQ $0x20, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x3_loop + VZEROUPPER + +mulAvxTwo_3x3_end: + RET + +// func mulAvxTwo_3x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x3_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 46 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_3x3_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ out_base+48(FP), DI + MOVQ out_base+48(FP), DI + MOVQ (DI), R8 + MOVQ 24(DI), R9 + MOVQ 48(DI), DI + MOVQ start+72(FP), R10 + + // Add start offset to output + ADDQ R10, R8 + ADDQ R10, R9 + ADDQ R10, DI + + // Add start offset to input + ADDQ R10, BX + ADDQ R10, SI + ADDQ R10, DX + MOVQ $0x0000000f, R10 + MOVQ R10, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_3x3_64_loop: + // Load and process 64 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y11 + VMOVDQU 32(BX), Y13 + ADDQ $0x40, BX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y0 + VPXOR Y9, Y10, Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y2 + VPXOR Y9, Y10, Y3 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y4 + VPXOR Y9, Y10, Y5 + + // Load and process 64 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y11 + VMOVDQU 32(SI), Y13 + ADDQ $0x40, SI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 2 to 3 outputs + VMOVDQU (DX), Y11 + VMOVDQU 32(DX), Y13 + ADDQ $0x40, DX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Store 3 outputs + VMOVDQU Y0, (R8) + VMOVDQU Y1, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y2, (R9) + VMOVDQU Y3, 32(R9) + ADDQ $0x40, R9 + VMOVDQU Y4, (DI) + VMOVDQU Y5, 32(DI) + ADDQ $0x40, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x3_64_loop + VZEROUPPER + +mulAvxTwo_3x3_64_end: + RET + +// func mulAvxTwo_3x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x3Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 26 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_3x3Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ out_base+48(FP), DI + MOVQ (DI), R8 + MOVQ 24(DI), R9 + MOVQ 48(DI), DI + MOVQ start+72(FP), R10 + + // Add start offset to output + ADDQ R10, R8 + ADDQ R10, R9 + ADDQ R10, DI + + // Add start offset to input + ADDQ R10, BX + ADDQ R10, SI + ADDQ R10, DX + MOVQ $0x0000000f, R10 + MOVQ R10, X3 + VPBROADCASTB X3, Y3 + +mulAvxTwo_3x3Xor_loop: + // Load and process 32 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y6 + ADDQ $0x20, BX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU (R8), Y0 + VMOVDQU (CX), Y4 + VMOVDQU 32(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU (R9), Y1 + VMOVDQU 64(CX), Y4 + VMOVDQU 96(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU (DI), Y2 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y6 + ADDQ $0x20, SI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 192(CX), Y4 + VMOVDQU 224(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 256(CX), Y4 + VMOVDQU 288(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 320(CX), Y4 + VMOVDQU 352(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 2 to 3 outputs + VMOVDQU (DX), Y6 + ADDQ $0x20, DX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 384(CX), Y4 + VMOVDQU 416(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 448(CX), Y4 + VMOVDQU 480(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 512(CX), Y4 + VMOVDQU 544(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Store 3 outputs + VMOVDQU Y0, (R8) + ADDQ $0x20, R8 + VMOVDQU Y1, (R9) + ADDQ $0x20, R9 + VMOVDQU Y2, (DI) + ADDQ $0x20, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x3Xor_loop + VZEROUPPER + +mulAvxTwo_3x3Xor_end: + RET + +// func mulAvxTwo_3x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x3_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 46 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_3x3_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ out_base+48(FP), DI + MOVQ out_base+48(FP), DI + MOVQ (DI), R8 + MOVQ 24(DI), R9 + MOVQ 48(DI), DI + MOVQ start+72(FP), R10 + + // Add start offset to output + ADDQ R10, R8 + ADDQ R10, R9 + ADDQ R10, DI + + // Add start offset to input + ADDQ R10, BX + ADDQ R10, SI + ADDQ R10, DX + MOVQ $0x0000000f, R10 + MOVQ R10, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_3x3_64Xor_loop: + // Load 3 outputs + VMOVDQU (R8), Y0 + VMOVDQU 32(R8), Y1 + VMOVDQU (R9), Y2 + VMOVDQU 32(R9), Y3 + VMOVDQU (DI), Y4 + VMOVDQU 32(DI), Y5 + + // Load and process 64 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y11 + VMOVDQU 32(BX), Y13 + ADDQ $0x40, BX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y11 + VMOVDQU 32(SI), Y13 + ADDQ $0x40, SI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 2 to 3 outputs + VMOVDQU (DX), Y11 + VMOVDQU 32(DX), Y13 + ADDQ $0x40, DX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Store 3 outputs + VMOVDQU Y0, (R8) + VMOVDQU Y1, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y2, (R9) + VMOVDQU Y3, 32(R9) + ADDQ $0x40, R9 + VMOVDQU Y4, (DI) + VMOVDQU Y5, 32(DI) + ADDQ $0x40, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x3_64Xor_loop + VZEROUPPER + +mulAvxTwo_3x3_64Xor_end: + RET + +// func mulAvxTwo_3x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x4(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 33 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_3x4_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ out_base+48(FP), DI + MOVQ (DI), R8 + MOVQ 24(DI), R9 + MOVQ 48(DI), R10 + MOVQ 72(DI), DI + MOVQ start+72(FP), R11 + + // Add start offset to output + ADDQ R11, R8 + ADDQ R11, R9 + ADDQ R11, R10 + ADDQ R11, DI + + // Add start offset to input + ADDQ R11, BX + ADDQ R11, SI + ADDQ R11, DX + MOVQ $0x0000000f, R11 + MOVQ R11, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_3x4_loop: + // Load and process 32 bytes from input 0 to 4 outputs + VMOVDQU (BX), Y7 + ADDQ $0x20, BX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y0 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y1 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y2 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y3 + + // Load and process 32 bytes from input 1 to 4 outputs + VMOVDQU (SI), Y7 + ADDQ $0x20, SI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 2 to 4 outputs + VMOVDQU (DX), Y7 + ADDQ $0x20, DX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Store 4 outputs + VMOVDQU Y0, (R8) + ADDQ $0x20, R8 + VMOVDQU Y1, (R9) + ADDQ $0x20, R9 + VMOVDQU Y2, (R10) + ADDQ $0x20, R10 + VMOVDQU Y3, (DI) + ADDQ $0x20, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x4_loop + VZEROUPPER + +mulAvxTwo_3x4_end: + RET + +// func mulAvxTwo_3x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x4Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 33 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_3x4Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ out_base+48(FP), DI + MOVQ (DI), R8 + MOVQ 24(DI), R9 + MOVQ 48(DI), R10 + MOVQ 72(DI), DI + MOVQ start+72(FP), R11 + + // Add start offset to output + ADDQ R11, R8 + ADDQ R11, R9 + ADDQ R11, R10 + ADDQ R11, DI + + // Add start offset to input + ADDQ R11, BX + ADDQ R11, SI + ADDQ R11, DX + MOVQ $0x0000000f, R11 + MOVQ R11, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_3x4Xor_loop: + // Load and process 32 bytes from input 0 to 4 outputs + VMOVDQU (BX), Y7 + ADDQ $0x20, BX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU (R8), Y0 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU (R9), Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU (R10), Y2 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU (DI), Y3 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 1 to 4 outputs + VMOVDQU (SI), Y7 + ADDQ $0x20, SI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 2 to 4 outputs + VMOVDQU (DX), Y7 + ADDQ $0x20, DX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Store 4 outputs + VMOVDQU Y0, (R8) + ADDQ $0x20, R8 + VMOVDQU Y1, (R9) + ADDQ $0x20, R9 + VMOVDQU Y2, (R10) + ADDQ $0x20, R10 + VMOVDQU Y3, (DI) + ADDQ $0x20, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x4Xor_loop + VZEROUPPER + +mulAvxTwo_3x4Xor_end: + RET + +// func mulAvxTwo_3x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x5(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 40 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_3x5_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ out_base+48(FP), DI + MOVQ (DI), R8 + MOVQ 24(DI), R9 + MOVQ 48(DI), R10 + MOVQ 72(DI), R11 + MOVQ 96(DI), DI + MOVQ start+72(FP), R12 + + // Add start offset to output + ADDQ R12, R8 + ADDQ R12, R9 + ADDQ R12, R10 + ADDQ R12, R11 + ADDQ R12, DI + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X5 + VPBROADCASTB X5, Y5 + +mulAvxTwo_3x5_loop: + // Load and process 32 bytes from input 0 to 5 outputs + VMOVDQU (BX), Y8 + ADDQ $0x20, BX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU (CX), Y6 + VMOVDQU 32(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y0 + VMOVDQU 64(CX), Y6 + VMOVDQU 96(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y1 + VMOVDQU 128(CX), Y6 + VMOVDQU 160(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y2 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y3 + VMOVDQU 256(CX), Y6 + VMOVDQU 288(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y4 + + // Load and process 32 bytes from input 1 to 5 outputs + VMOVDQU (SI), Y8 + ADDQ $0x20, SI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 320(CX), Y6 + VMOVDQU 352(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 384(CX), Y6 + VMOVDQU 416(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 448(CX), Y6 + VMOVDQU 480(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 512(CX), Y6 + VMOVDQU 544(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 576(CX), Y6 + VMOVDQU 608(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 2 to 5 outputs + VMOVDQU (DX), Y8 + ADDQ $0x20, DX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 640(CX), Y6 + VMOVDQU 672(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 704(CX), Y6 + VMOVDQU 736(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 768(CX), Y6 + VMOVDQU 800(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 832(CX), Y6 + VMOVDQU 864(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 896(CX), Y6 + VMOVDQU 928(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Store 5 outputs + VMOVDQU Y0, (R8) + ADDQ $0x20, R8 + VMOVDQU Y1, (R9) + ADDQ $0x20, R9 + VMOVDQU Y2, (R10) + ADDQ $0x20, R10 + VMOVDQU Y3, (R11) + ADDQ $0x20, R11 + VMOVDQU Y4, (DI) + ADDQ $0x20, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x5_loop + VZEROUPPER + +mulAvxTwo_3x5_end: + RET + +// func mulAvxTwo_3x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x5Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 40 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_3x5Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ out_base+48(FP), DI + MOVQ (DI), R8 + MOVQ 24(DI), R9 + MOVQ 48(DI), R10 + MOVQ 72(DI), R11 + MOVQ 96(DI), DI + MOVQ start+72(FP), R12 + + // Add start offset to output + ADDQ R12, R8 + ADDQ R12, R9 + ADDQ R12, R10 + ADDQ R12, R11 + ADDQ R12, DI + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X5 + VPBROADCASTB X5, Y5 + +mulAvxTwo_3x5Xor_loop: + // Load and process 32 bytes from input 0 to 5 outputs + VMOVDQU (BX), Y8 + ADDQ $0x20, BX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU (R8), Y0 + VMOVDQU (CX), Y6 + VMOVDQU 32(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU (R9), Y1 + VMOVDQU 64(CX), Y6 + VMOVDQU 96(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU (R10), Y2 + VMOVDQU 128(CX), Y6 + VMOVDQU 160(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU (R11), Y3 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU (DI), Y4 + VMOVDQU 256(CX), Y6 + VMOVDQU 288(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 1 to 5 outputs + VMOVDQU (SI), Y8 + ADDQ $0x20, SI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 320(CX), Y6 + VMOVDQU 352(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 384(CX), Y6 + VMOVDQU 416(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 448(CX), Y6 + VMOVDQU 480(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 512(CX), Y6 + VMOVDQU 544(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 576(CX), Y6 + VMOVDQU 608(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 2 to 5 outputs + VMOVDQU (DX), Y8 + ADDQ $0x20, DX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 640(CX), Y6 + VMOVDQU 672(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 704(CX), Y6 + VMOVDQU 736(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 768(CX), Y6 + VMOVDQU 800(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 832(CX), Y6 + VMOVDQU 864(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 896(CX), Y6 + VMOVDQU 928(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Store 5 outputs + VMOVDQU Y0, (R8) + ADDQ $0x20, R8 + VMOVDQU Y1, (R9) + ADDQ $0x20, R9 + VMOVDQU Y2, (R10) + ADDQ $0x20, R10 + VMOVDQU Y3, (R11) + ADDQ $0x20, R11 + VMOVDQU Y4, (DI) + ADDQ $0x20, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x5Xor_loop + VZEROUPPER + +mulAvxTwo_3x5Xor_end: + RET + +// func mulAvxTwo_3x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x6(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 47 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_3x6_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ out_base+48(FP), DI + MOVQ (DI), R8 + MOVQ 24(DI), R9 + MOVQ 48(DI), R10 + MOVQ 72(DI), R11 + MOVQ 96(DI), R12 + MOVQ 120(DI), DI + MOVQ start+72(FP), R13 + + // Add start offset to output + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, R12 + ADDQ R13, DI + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_3x6_loop: + // Load and process 32 bytes from input 0 to 6 outputs + VMOVDQU (BX), Y9 + ADDQ $0x20, BX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y0 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y1 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y2 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y3 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y4 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y5 + + // Load and process 32 bytes from input 1 to 6 outputs + VMOVDQU (SI), Y9 + ADDQ $0x20, SI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 2 to 6 outputs + VMOVDQU (DX), Y9 + ADDQ $0x20, DX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Store 6 outputs + VMOVDQU Y0, (R8) + ADDQ $0x20, R8 + VMOVDQU Y1, (R9) + ADDQ $0x20, R9 + VMOVDQU Y2, (R10) + ADDQ $0x20, R10 + VMOVDQU Y3, (R11) + ADDQ $0x20, R11 + VMOVDQU Y4, (R12) + ADDQ $0x20, R12 + VMOVDQU Y5, (DI) + ADDQ $0x20, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x6_loop + VZEROUPPER + +mulAvxTwo_3x6_end: + RET + +// func mulAvxTwo_3x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x6Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 47 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_3x6Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ out_base+48(FP), DI + MOVQ (DI), R8 + MOVQ 24(DI), R9 + MOVQ 48(DI), R10 + MOVQ 72(DI), R11 + MOVQ 96(DI), R12 + MOVQ 120(DI), DI + MOVQ start+72(FP), R13 + + // Add start offset to output + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, R12 + ADDQ R13, DI + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_3x6Xor_loop: + // Load and process 32 bytes from input 0 to 6 outputs + VMOVDQU (BX), Y9 + ADDQ $0x20, BX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU (R8), Y0 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU (R9), Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU (R10), Y2 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU (R11), Y3 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU (R12), Y4 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU (DI), Y5 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 1 to 6 outputs + VMOVDQU (SI), Y9 + ADDQ $0x20, SI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 2 to 6 outputs + VMOVDQU (DX), Y9 + ADDQ $0x20, DX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Store 6 outputs + VMOVDQU Y0, (R8) + ADDQ $0x20, R8 + VMOVDQU Y1, (R9) + ADDQ $0x20, R9 + VMOVDQU Y2, (R10) + ADDQ $0x20, R10 + VMOVDQU Y3, (R11) + ADDQ $0x20, R11 + VMOVDQU Y4, (R12) + ADDQ $0x20, R12 + VMOVDQU Y5, (DI) + ADDQ $0x20, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x6Xor_loop + VZEROUPPER + +mulAvxTwo_3x6Xor_end: + RET + +// func mulAvxTwo_3x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x7(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 54 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_3x7_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ out_base+48(FP), DI + MOVQ (DI), R8 + MOVQ 24(DI), R9 + MOVQ 48(DI), R10 + MOVQ 72(DI), R11 + MOVQ 96(DI), R12 + MOVQ 120(DI), R13 + MOVQ 144(DI), DI + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, R13 + ADDQ R14, DI + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X7 + VPBROADCASTB X7, Y7 + +mulAvxTwo_3x7_loop: + // Load and process 32 bytes from input 0 to 7 outputs + VMOVDQU (BX), Y10 + ADDQ $0x20, BX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU (CX), Y8 + VMOVDQU 32(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y0 + VMOVDQU 64(CX), Y8 + VMOVDQU 96(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y1 + VMOVDQU 128(CX), Y8 + VMOVDQU 160(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y2 + VMOVDQU 192(CX), Y8 + VMOVDQU 224(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y3 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y4 + VMOVDQU 320(CX), Y8 + VMOVDQU 352(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y5 + VMOVDQU 384(CX), Y8 + VMOVDQU 416(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y6 + + // Load and process 32 bytes from input 1 to 7 outputs + VMOVDQU (SI), Y10 + ADDQ $0x20, SI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 448(CX), Y8 + VMOVDQU 480(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 512(CX), Y8 + VMOVDQU 544(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 576(CX), Y8 + VMOVDQU 608(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 640(CX), Y8 + VMOVDQU 672(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 704(CX), Y8 + VMOVDQU 736(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 768(CX), Y8 + VMOVDQU 800(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 832(CX), Y8 + VMOVDQU 864(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 2 to 7 outputs + VMOVDQU (DX), Y10 + ADDQ $0x20, DX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 896(CX), Y8 + VMOVDQU 928(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 960(CX), Y8 + VMOVDQU 992(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1024(CX), Y8 + VMOVDQU 1056(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1088(CX), Y8 + VMOVDQU 1120(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1152(CX), Y8 + VMOVDQU 1184(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1216(CX), Y8 + VMOVDQU 1248(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1280(CX), Y8 + VMOVDQU 1312(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Store 7 outputs + VMOVDQU Y0, (R8) + ADDQ $0x20, R8 + VMOVDQU Y1, (R9) + ADDQ $0x20, R9 + VMOVDQU Y2, (R10) + ADDQ $0x20, R10 + VMOVDQU Y3, (R11) + ADDQ $0x20, R11 + VMOVDQU Y4, (R12) + ADDQ $0x20, R12 + VMOVDQU Y5, (R13) + ADDQ $0x20, R13 + VMOVDQU Y6, (DI) + ADDQ $0x20, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x7_loop + VZEROUPPER + +mulAvxTwo_3x7_end: + RET + +// func mulAvxTwo_3x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x7Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 54 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_3x7Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ out_base+48(FP), DI + MOVQ (DI), R8 + MOVQ 24(DI), R9 + MOVQ 48(DI), R10 + MOVQ 72(DI), R11 + MOVQ 96(DI), R12 + MOVQ 120(DI), R13 + MOVQ 144(DI), DI + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, R13 + ADDQ R14, DI + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X7 + VPBROADCASTB X7, Y7 + +mulAvxTwo_3x7Xor_loop: + // Load and process 32 bytes from input 0 to 7 outputs + VMOVDQU (BX), Y10 + ADDQ $0x20, BX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU (R8), Y0 + VMOVDQU (CX), Y8 + VMOVDQU 32(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU (R9), Y1 + VMOVDQU 64(CX), Y8 + VMOVDQU 96(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU (R10), Y2 + VMOVDQU 128(CX), Y8 + VMOVDQU 160(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU (R11), Y3 + VMOVDQU 192(CX), Y8 + VMOVDQU 224(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU (R12), Y4 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU (R13), Y5 + VMOVDQU 320(CX), Y8 + VMOVDQU 352(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU (DI), Y6 + VMOVDQU 384(CX), Y8 + VMOVDQU 416(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 1 to 7 outputs + VMOVDQU (SI), Y10 + ADDQ $0x20, SI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 448(CX), Y8 + VMOVDQU 480(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 512(CX), Y8 + VMOVDQU 544(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 576(CX), Y8 + VMOVDQU 608(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 640(CX), Y8 + VMOVDQU 672(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 704(CX), Y8 + VMOVDQU 736(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 768(CX), Y8 + VMOVDQU 800(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 832(CX), Y8 + VMOVDQU 864(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 2 to 7 outputs + VMOVDQU (DX), Y10 + ADDQ $0x20, DX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 896(CX), Y8 + VMOVDQU 928(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 960(CX), Y8 + VMOVDQU 992(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1024(CX), Y8 + VMOVDQU 1056(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1088(CX), Y8 + VMOVDQU 1120(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1152(CX), Y8 + VMOVDQU 1184(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1216(CX), Y8 + VMOVDQU 1248(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1280(CX), Y8 + VMOVDQU 1312(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Store 7 outputs + VMOVDQU Y0, (R8) + ADDQ $0x20, R8 + VMOVDQU Y1, (R9) + ADDQ $0x20, R9 + VMOVDQU Y2, (R10) + ADDQ $0x20, R10 + VMOVDQU Y3, (R11) + ADDQ $0x20, R11 + VMOVDQU Y4, (R12) + ADDQ $0x20, R12 + VMOVDQU Y5, (R13) + ADDQ $0x20, R13 + VMOVDQU Y6, (DI) + ADDQ $0x20, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x7Xor_loop + VZEROUPPER + +mulAvxTwo_3x7Xor_end: + RET + +// func mulAvxTwo_3x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x8(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 61 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_3x8_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ out_base+48(FP), DI + MOVQ (DI), R8 + MOVQ 24(DI), R9 + MOVQ 48(DI), R10 + MOVQ 72(DI), R11 + MOVQ 96(DI), R12 + MOVQ 120(DI), R13 + MOVQ 144(DI), R14 + MOVQ 168(DI), DI + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, R14 + ADDQ R15, DI + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X8 + VPBROADCASTB X8, Y8 + +mulAvxTwo_3x8_loop: + // Load and process 32 bytes from input 0 to 8 outputs + VMOVDQU (BX), Y11 + ADDQ $0x20, BX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU (CX), Y9 + VMOVDQU 32(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y0 + VMOVDQU 64(CX), Y9 + VMOVDQU 96(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y1 + VMOVDQU 128(CX), Y9 + VMOVDQU 160(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y2 + VMOVDQU 192(CX), Y9 + VMOVDQU 224(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y3 + VMOVDQU 256(CX), Y9 + VMOVDQU 288(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y4 + VMOVDQU 320(CX), Y9 + VMOVDQU 352(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y5 + VMOVDQU 384(CX), Y9 + VMOVDQU 416(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y6 + VMOVDQU 448(CX), Y9 + VMOVDQU 480(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y7 + + // Load and process 32 bytes from input 1 to 8 outputs + VMOVDQU (SI), Y11 + ADDQ $0x20, SI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 512(CX), Y9 + VMOVDQU 544(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 576(CX), Y9 + VMOVDQU 608(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y9 + VMOVDQU 672(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 704(CX), Y9 + VMOVDQU 736(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 768(CX), Y9 + VMOVDQU 800(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 832(CX), Y9 + VMOVDQU 864(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 896(CX), Y9 + VMOVDQU 928(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 960(CX), Y9 + VMOVDQU 992(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 2 to 8 outputs + VMOVDQU (DX), Y11 + ADDQ $0x20, DX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1024(CX), Y9 + VMOVDQU 1056(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1088(CX), Y9 + VMOVDQU 1120(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1152(CX), Y9 + VMOVDQU 1184(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1216(CX), Y9 + VMOVDQU 1248(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y9 + VMOVDQU 1312(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1344(CX), Y9 + VMOVDQU 1376(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1408(CX), Y9 + VMOVDQU 1440(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1472(CX), Y9 + VMOVDQU 1504(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Store 8 outputs + VMOVDQU Y0, (R8) + ADDQ $0x20, R8 + VMOVDQU Y1, (R9) + ADDQ $0x20, R9 + VMOVDQU Y2, (R10) + ADDQ $0x20, R10 + VMOVDQU Y3, (R11) + ADDQ $0x20, R11 + VMOVDQU Y4, (R12) + ADDQ $0x20, R12 + VMOVDQU Y5, (R13) + ADDQ $0x20, R13 + VMOVDQU Y6, (R14) + ADDQ $0x20, R14 + VMOVDQU Y7, (DI) + ADDQ $0x20, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x8_loop + VZEROUPPER + +mulAvxTwo_3x8_end: + RET + +// func mulAvxTwo_3x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x8Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 61 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_3x8Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ out_base+48(FP), DI + MOVQ (DI), R8 + MOVQ 24(DI), R9 + MOVQ 48(DI), R10 + MOVQ 72(DI), R11 + MOVQ 96(DI), R12 + MOVQ 120(DI), R13 + MOVQ 144(DI), R14 + MOVQ 168(DI), DI + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, R14 + ADDQ R15, DI + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X8 + VPBROADCASTB X8, Y8 + +mulAvxTwo_3x8Xor_loop: + // Load and process 32 bytes from input 0 to 8 outputs + VMOVDQU (BX), Y11 + ADDQ $0x20, BX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU (R8), Y0 + VMOVDQU (CX), Y9 + VMOVDQU 32(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU (R9), Y1 + VMOVDQU 64(CX), Y9 + VMOVDQU 96(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU (R10), Y2 + VMOVDQU 128(CX), Y9 + VMOVDQU 160(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU (R11), Y3 + VMOVDQU 192(CX), Y9 + VMOVDQU 224(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU (R12), Y4 + VMOVDQU 256(CX), Y9 + VMOVDQU 288(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU (R13), Y5 + VMOVDQU 320(CX), Y9 + VMOVDQU 352(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU (R14), Y6 + VMOVDQU 384(CX), Y9 + VMOVDQU 416(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU (DI), Y7 + VMOVDQU 448(CX), Y9 + VMOVDQU 480(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 1 to 8 outputs + VMOVDQU (SI), Y11 + ADDQ $0x20, SI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 512(CX), Y9 + VMOVDQU 544(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 576(CX), Y9 + VMOVDQU 608(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y9 + VMOVDQU 672(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 704(CX), Y9 + VMOVDQU 736(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 768(CX), Y9 + VMOVDQU 800(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 832(CX), Y9 + VMOVDQU 864(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 896(CX), Y9 + VMOVDQU 928(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 960(CX), Y9 + VMOVDQU 992(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 2 to 8 outputs + VMOVDQU (DX), Y11 + ADDQ $0x20, DX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1024(CX), Y9 + VMOVDQU 1056(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1088(CX), Y9 + VMOVDQU 1120(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1152(CX), Y9 + VMOVDQU 1184(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1216(CX), Y9 + VMOVDQU 1248(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y9 + VMOVDQU 1312(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1344(CX), Y9 + VMOVDQU 1376(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1408(CX), Y9 + VMOVDQU 1440(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1472(CX), Y9 + VMOVDQU 1504(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Store 8 outputs + VMOVDQU Y0, (R8) + ADDQ $0x20, R8 + VMOVDQU Y1, (R9) + ADDQ $0x20, R9 + VMOVDQU Y2, (R10) + ADDQ $0x20, R10 + VMOVDQU Y3, (R11) + ADDQ $0x20, R11 + VMOVDQU Y4, (R12) + ADDQ $0x20, R12 + VMOVDQU Y5, (R13) + ADDQ $0x20, R13 + VMOVDQU Y6, (R14) + ADDQ $0x20, R14 + VMOVDQU Y7, (DI) + ADDQ $0x20, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x8Xor_loop + VZEROUPPER + +mulAvxTwo_3x8Xor_end: + RET + +// func mulAvxTwo_3x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x9(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 68 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_3x9_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ out_base+48(FP), DI + MOVQ (DI), R8 + MOVQ 24(DI), R9 + MOVQ 48(DI), R10 + MOVQ 72(DI), R11 + MOVQ 96(DI), R12 + MOVQ 120(DI), R13 + MOVQ 144(DI), R14 + MOVQ 168(DI), R15 + MOVQ 192(DI), DI + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, DI + + // Add start offset to input + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DX + MOVQ $0x0000000f, BP + MOVQ BP, X9 + VPBROADCASTB X9, Y9 + +mulAvxTwo_3x9_loop: + // Load and process 32 bytes from input 0 to 9 outputs + VMOVDQU (BX), Y12 + ADDQ $0x20, BX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU (CX), Y10 + VMOVDQU 32(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y0 + VMOVDQU 64(CX), Y10 + VMOVDQU 96(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y1 + VMOVDQU 128(CX), Y10 + VMOVDQU 160(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y2 + VMOVDQU 192(CX), Y10 + VMOVDQU 224(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y3 + VMOVDQU 256(CX), Y10 + VMOVDQU 288(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y4 + VMOVDQU 320(CX), Y10 + VMOVDQU 352(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y5 + VMOVDQU 384(CX), Y10 + VMOVDQU 416(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y6 + VMOVDQU 448(CX), Y10 + VMOVDQU 480(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y7 + VMOVDQU 512(CX), Y10 + VMOVDQU 544(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y8 + + // Load and process 32 bytes from input 1 to 9 outputs + VMOVDQU (SI), Y12 + ADDQ $0x20, SI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 576(CX), Y10 + VMOVDQU 608(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 640(CX), Y10 + VMOVDQU 672(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 704(CX), Y10 + VMOVDQU 736(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 768(CX), Y10 + VMOVDQU 800(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 832(CX), Y10 + VMOVDQU 864(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 896(CX), Y10 + VMOVDQU 928(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 960(CX), Y10 + VMOVDQU 992(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1024(CX), Y10 + VMOVDQU 1056(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1088(CX), Y10 + VMOVDQU 1120(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 2 to 9 outputs + VMOVDQU (DX), Y12 + ADDQ $0x20, DX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1152(CX), Y10 + VMOVDQU 1184(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1216(CX), Y10 + VMOVDQU 1248(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1280(CX), Y10 + VMOVDQU 1312(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1344(CX), Y10 + VMOVDQU 1376(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1408(CX), Y10 + VMOVDQU 1440(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 1472(CX), Y10 + VMOVDQU 1504(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 1536(CX), Y10 + VMOVDQU 1568(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1600(CX), Y10 + VMOVDQU 1632(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1664(CX), Y10 + VMOVDQU 1696(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Store 9 outputs + VMOVDQU Y0, (R8) + ADDQ $0x20, R8 + VMOVDQU Y1, (R9) + ADDQ $0x20, R9 + VMOVDQU Y2, (R10) + ADDQ $0x20, R10 + VMOVDQU Y3, (R11) + ADDQ $0x20, R11 + VMOVDQU Y4, (R12) + ADDQ $0x20, R12 + VMOVDQU Y5, (R13) + ADDQ $0x20, R13 + VMOVDQU Y6, (R14) + ADDQ $0x20, R14 + VMOVDQU Y7, (R15) + ADDQ $0x20, R15 + VMOVDQU Y8, (DI) + ADDQ $0x20, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x9_loop + VZEROUPPER + +mulAvxTwo_3x9_end: + RET + +// func mulAvxTwo_3x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x9Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 68 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_3x9Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DX + MOVQ out_base+48(FP), DI + MOVQ (DI), R8 + MOVQ 24(DI), R9 + MOVQ 48(DI), R10 + MOVQ 72(DI), R11 + MOVQ 96(DI), R12 + MOVQ 120(DI), R13 + MOVQ 144(DI), R14 + MOVQ 168(DI), R15 + MOVQ 192(DI), DI + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, DI + + // Add start offset to input + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DX + MOVQ $0x0000000f, BP + MOVQ BP, X9 + VPBROADCASTB X9, Y9 + +mulAvxTwo_3x9Xor_loop: + // Load and process 32 bytes from input 0 to 9 outputs + VMOVDQU (BX), Y12 + ADDQ $0x20, BX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU (R8), Y0 + VMOVDQU (CX), Y10 + VMOVDQU 32(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU (R9), Y1 + VMOVDQU 64(CX), Y10 + VMOVDQU 96(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU (R10), Y2 + VMOVDQU 128(CX), Y10 + VMOVDQU 160(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU (R11), Y3 + VMOVDQU 192(CX), Y10 + VMOVDQU 224(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU (R12), Y4 + VMOVDQU 256(CX), Y10 + VMOVDQU 288(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU (R13), Y5 + VMOVDQU 320(CX), Y10 + VMOVDQU 352(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU (R14), Y6 + VMOVDQU 384(CX), Y10 + VMOVDQU 416(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU (R15), Y7 + VMOVDQU 448(CX), Y10 + VMOVDQU 480(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU (DI), Y8 + VMOVDQU 512(CX), Y10 + VMOVDQU 544(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 1 to 9 outputs + VMOVDQU (SI), Y12 + ADDQ $0x20, SI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 576(CX), Y10 + VMOVDQU 608(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 640(CX), Y10 + VMOVDQU 672(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 704(CX), Y10 + VMOVDQU 736(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 768(CX), Y10 + VMOVDQU 800(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 832(CX), Y10 + VMOVDQU 864(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 896(CX), Y10 + VMOVDQU 928(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 960(CX), Y10 + VMOVDQU 992(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1024(CX), Y10 + VMOVDQU 1056(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1088(CX), Y10 + VMOVDQU 1120(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 2 to 9 outputs + VMOVDQU (DX), Y12 + ADDQ $0x20, DX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1152(CX), Y10 + VMOVDQU 1184(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1216(CX), Y10 + VMOVDQU 1248(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1280(CX), Y10 + VMOVDQU 1312(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1344(CX), Y10 + VMOVDQU 1376(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1408(CX), Y10 + VMOVDQU 1440(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 1472(CX), Y10 + VMOVDQU 1504(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 1536(CX), Y10 + VMOVDQU 1568(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1600(CX), Y10 + VMOVDQU 1632(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1664(CX), Y10 + VMOVDQU 1696(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Store 9 outputs + VMOVDQU Y0, (R8) + ADDQ $0x20, R8 + VMOVDQU Y1, (R9) + ADDQ $0x20, R9 + VMOVDQU Y2, (R10) + ADDQ $0x20, R10 + VMOVDQU Y3, (R11) + ADDQ $0x20, R11 + VMOVDQU Y4, (R12) + ADDQ $0x20, R12 + VMOVDQU Y5, (R13) + ADDQ $0x20, R13 + VMOVDQU Y6, (R14) + ADDQ $0x20, R14 + VMOVDQU Y7, (R15) + ADDQ $0x20, R15 + VMOVDQU Y8, (DI) + ADDQ $0x20, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_3x9Xor_loop + VZEROUPPER + +mulAvxTwo_3x9Xor_end: + RET + +// func mulAvxTwo_3x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x10(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 75 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_3x10_end + MOVQ in_base+24(FP), AX + MOVQ (AX), DX + MOVQ 24(AX), BX + MOVQ 48(AX), AX + MOVQ out_base+48(FP), SI + MOVQ (SI), DI + MOVQ 24(SI), R8 + MOVQ 48(SI), R9 + MOVQ 72(SI), R10 + MOVQ 96(SI), R11 + MOVQ 120(SI), R12 + MOVQ 144(SI), R13 + MOVQ 168(SI), R14 + MOVQ 192(SI), R15 + MOVQ 216(SI), SI + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, SI + + // Add start offset to input + ADDQ BP, DX + ADDQ BP, BX + ADDQ BP, AX + MOVQ $0x0000000f, BP + MOVQ BP, X10 + VPBROADCASTB X10, Y10 + MOVQ n+80(FP), BP + SHRQ $0x05, BP + +mulAvxTwo_3x10_loop: + // Load and process 32 bytes from input 0 to 10 outputs + VMOVDQU (DX), Y13 + ADDQ $0x20, DX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU (CX), Y11 + VMOVDQU 32(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y0 + VMOVDQU 64(CX), Y11 + VMOVDQU 96(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y1 + VMOVDQU 128(CX), Y11 + VMOVDQU 160(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y2 + VMOVDQU 192(CX), Y11 + VMOVDQU 224(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y3 + VMOVDQU 256(CX), Y11 + VMOVDQU 288(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y4 + VMOVDQU 320(CX), Y11 + VMOVDQU 352(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y5 + VMOVDQU 384(CX), Y11 + VMOVDQU 416(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y6 + VMOVDQU 448(CX), Y11 + VMOVDQU 480(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y7 + VMOVDQU 512(CX), Y11 + VMOVDQU 544(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y8 + VMOVDQU 576(CX), Y11 + VMOVDQU 608(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y9 + + // Load and process 32 bytes from input 1 to 10 outputs + VMOVDQU (BX), Y13 + ADDQ $0x20, BX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 640(CX), Y11 + VMOVDQU 672(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 704(CX), Y11 + VMOVDQU 736(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 768(CX), Y11 + VMOVDQU 800(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 832(CX), Y11 + VMOVDQU 864(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 896(CX), Y11 + VMOVDQU 928(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 960(CX), Y11 + VMOVDQU 992(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1024(CX), Y11 + VMOVDQU 1056(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1088(CX), Y11 + VMOVDQU 1120(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1152(CX), Y11 + VMOVDQU 1184(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1216(CX), Y11 + VMOVDQU 1248(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 2 to 10 outputs + VMOVDQU (AX), Y13 + ADDQ $0x20, AX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1280(CX), Y11 + VMOVDQU 1312(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1344(CX), Y11 + VMOVDQU 1376(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 1408(CX), Y11 + VMOVDQU 1440(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 1472(CX), Y11 + VMOVDQU 1504(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 1536(CX), Y11 + VMOVDQU 1568(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 1600(CX), Y11 + VMOVDQU 1632(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1664(CX), Y11 + VMOVDQU 1696(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1728(CX), Y11 + VMOVDQU 1760(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1792(CX), Y11 + VMOVDQU 1824(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1856(CX), Y11 + VMOVDQU 1888(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Store 10 outputs + VMOVDQU Y0, (DI) + ADDQ $0x20, DI + VMOVDQU Y1, (R8) + ADDQ $0x20, R8 + VMOVDQU Y2, (R9) + ADDQ $0x20, R9 + VMOVDQU Y3, (R10) + ADDQ $0x20, R10 + VMOVDQU Y4, (R11) + ADDQ $0x20, R11 + VMOVDQU Y5, (R12) + ADDQ $0x20, R12 + VMOVDQU Y6, (R13) + ADDQ $0x20, R13 + VMOVDQU Y7, (R14) + ADDQ $0x20, R14 + VMOVDQU Y8, (R15) + ADDQ $0x20, R15 + VMOVDQU Y9, (SI) + ADDQ $0x20, SI + + // Prepare for next loop + DECQ BP + JNZ mulAvxTwo_3x10_loop + VZEROUPPER + +mulAvxTwo_3x10_end: + RET + +// func mulAvxTwo_3x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_3x10Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 75 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_3x10Xor_end + MOVQ in_base+24(FP), AX + MOVQ (AX), DX + MOVQ 24(AX), BX + MOVQ 48(AX), AX + MOVQ out_base+48(FP), SI + MOVQ (SI), DI + MOVQ 24(SI), R8 + MOVQ 48(SI), R9 + MOVQ 72(SI), R10 + MOVQ 96(SI), R11 + MOVQ 120(SI), R12 + MOVQ 144(SI), R13 + MOVQ 168(SI), R14 + MOVQ 192(SI), R15 + MOVQ 216(SI), SI + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, SI + + // Add start offset to input + ADDQ BP, DX + ADDQ BP, BX + ADDQ BP, AX + MOVQ $0x0000000f, BP + MOVQ BP, X10 + VPBROADCASTB X10, Y10 + MOVQ n+80(FP), BP + SHRQ $0x05, BP + +mulAvxTwo_3x10Xor_loop: + // Load and process 32 bytes from input 0 to 10 outputs + VMOVDQU (DX), Y13 + ADDQ $0x20, DX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU (DI), Y0 + VMOVDQU (CX), Y11 + VMOVDQU 32(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU (R8), Y1 + VMOVDQU 64(CX), Y11 + VMOVDQU 96(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU (R9), Y2 + VMOVDQU 128(CX), Y11 + VMOVDQU 160(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU (R10), Y3 + VMOVDQU 192(CX), Y11 + VMOVDQU 224(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU (R11), Y4 + VMOVDQU 256(CX), Y11 + VMOVDQU 288(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU (R12), Y5 + VMOVDQU 320(CX), Y11 + VMOVDQU 352(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU (R13), Y6 + VMOVDQU 384(CX), Y11 + VMOVDQU 416(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU (R14), Y7 + VMOVDQU 448(CX), Y11 + VMOVDQU 480(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU (R15), Y8 + VMOVDQU 512(CX), Y11 + VMOVDQU 544(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU (SI), Y9 + VMOVDQU 576(CX), Y11 + VMOVDQU 608(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 1 to 10 outputs + VMOVDQU (BX), Y13 + ADDQ $0x20, BX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 640(CX), Y11 + VMOVDQU 672(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 704(CX), Y11 + VMOVDQU 736(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 768(CX), Y11 + VMOVDQU 800(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 832(CX), Y11 + VMOVDQU 864(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 896(CX), Y11 + VMOVDQU 928(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 960(CX), Y11 + VMOVDQU 992(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1024(CX), Y11 + VMOVDQU 1056(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1088(CX), Y11 + VMOVDQU 1120(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1152(CX), Y11 + VMOVDQU 1184(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1216(CX), Y11 + VMOVDQU 1248(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 2 to 10 outputs + VMOVDQU (AX), Y13 + ADDQ $0x20, AX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1280(CX), Y11 + VMOVDQU 1312(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1344(CX), Y11 + VMOVDQU 1376(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 1408(CX), Y11 + VMOVDQU 1440(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 1472(CX), Y11 + VMOVDQU 1504(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 1536(CX), Y11 + VMOVDQU 1568(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 1600(CX), Y11 + VMOVDQU 1632(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1664(CX), Y11 + VMOVDQU 1696(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1728(CX), Y11 + VMOVDQU 1760(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1792(CX), Y11 + VMOVDQU 1824(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1856(CX), Y11 + VMOVDQU 1888(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Store 10 outputs + VMOVDQU Y0, (DI) + ADDQ $0x20, DI + VMOVDQU Y1, (R8) + ADDQ $0x20, R8 + VMOVDQU Y2, (R9) + ADDQ $0x20, R9 + VMOVDQU Y3, (R10) + ADDQ $0x20, R10 + VMOVDQU Y4, (R11) + ADDQ $0x20, R11 + VMOVDQU Y5, (R12) + ADDQ $0x20, R12 + VMOVDQU Y6, (R13) + ADDQ $0x20, R13 + VMOVDQU Y7, (R14) + ADDQ $0x20, R14 + VMOVDQU Y8, (R15) + ADDQ $0x20, R15 + VMOVDQU Y9, (SI) + ADDQ $0x20, SI + + // Prepare for next loop + DECQ BP + JNZ mulAvxTwo_3x10Xor_loop + VZEROUPPER + +mulAvxTwo_3x10Xor_end: + RET + +// func mulAvxTwo_4x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x1(SB), NOSPLIT, $0-88 + // Loading all tables to registers + // Destination kept in GP registers + // Full registers estimated 12 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_4x1_end + VMOVDQU (CX), Y0 + VMOVDQU 32(CX), Y1 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + MOVQ in_base+24(FP), CX + MOVQ (CX), DX + MOVQ 24(CX), BX + MOVQ 48(CX), SI + MOVQ 72(CX), CX + MOVQ out_base+48(FP), DI + MOVQ (DI), DI + MOVQ start+72(FP), R8 + + // Add start offset to output + ADDQ R8, DI + + // Add start offset to input + ADDQ R8, DX + ADDQ R8, BX + ADDQ R8, SI + ADDQ R8, CX + MOVQ $0x0000000f, R8 + MOVQ R8, X9 + VPBROADCASTB X9, Y9 + +mulAvxTwo_4x1_loop: + // Load and process 32 bytes from input 0 to 1 outputs + VMOVDQU (DX), Y10 + ADDQ $0x20, DX + VPSRLQ $0x04, Y10, Y11 + VPAND Y9, Y10, Y10 + VPAND Y9, Y11, Y11 + VPSHUFB Y10, Y0, Y10 + VPSHUFB Y11, Y1, Y11 + VPXOR Y10, Y11, Y8 + + // Load and process 32 bytes from input 1 to 1 outputs + VMOVDQU (BX), Y10 + ADDQ $0x20, BX + VPSRLQ $0x04, Y10, Y11 + VPAND Y9, Y10, Y10 + VPAND Y9, Y11, Y11 + VPSHUFB Y10, Y2, Y10 + VPSHUFB Y11, Y3, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 2 to 1 outputs + VMOVDQU (SI), Y10 + ADDQ $0x20, SI + VPSRLQ $0x04, Y10, Y11 + VPAND Y9, Y10, Y10 + VPAND Y9, Y11, Y11 + VPSHUFB Y10, Y4, Y10 + VPSHUFB Y11, Y5, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 3 to 1 outputs + VMOVDQU (CX), Y10 + ADDQ $0x20, CX + VPSRLQ $0x04, Y10, Y11 + VPAND Y9, Y10, Y10 + VPAND Y9, Y11, Y11 + VPSHUFB Y10, Y6, Y10 + VPSHUFB Y11, Y7, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Store 1 outputs + VMOVDQU Y8, (DI) + ADDQ $0x20, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_4x1_loop + VZEROUPPER + +mulAvxTwo_4x1_end: + RET + +// func mulAvxTwo_4x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x1_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 22 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_4x1_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), DX + MOVQ out_base+48(FP), R8 + MOVQ out_base+48(FP), R8 + MOVQ (R8), R8 + MOVQ start+72(FP), R9 + + // Add start offset to output + ADDQ R9, R8 + + // Add start offset to input + ADDQ R9, BX + ADDQ R9, SI + ADDQ R9, DI + ADDQ R9, DX + MOVQ $0x0000000f, R9 + MOVQ R9, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_4x1_64_loop: + // Load and process 64 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y6 + VMOVDQU 32(BX), Y5 + ADDQ $0x40, BX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y0 + VPXOR Y5, Y6, Y1 + + // Load and process 64 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y6 + VMOVDQU 32(SI), Y5 + ADDQ $0x40, SI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 2 to 1 outputs + VMOVDQU (DI), Y6 + VMOVDQU 32(DI), Y5 + ADDQ $0x40, DI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 3 to 1 outputs + VMOVDQU (DX), Y6 + VMOVDQU 32(DX), Y5 + ADDQ $0x40, DX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Store 1 outputs + VMOVDQU Y0, (R8) + VMOVDQU Y1, 32(R8) + ADDQ $0x40, R8 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_4x1_64_loop + VZEROUPPER + +mulAvxTwo_4x1_64_end: + RET + +// func mulAvxTwo_4x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x1Xor(SB), NOSPLIT, $0-88 + // Loading all tables to registers + // Destination kept in GP registers + // Full registers estimated 12 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_4x1Xor_end + VMOVDQU (CX), Y0 + VMOVDQU 32(CX), Y1 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + MOVQ in_base+24(FP), CX + MOVQ (CX), DX + MOVQ 24(CX), BX + MOVQ 48(CX), SI + MOVQ 72(CX), CX + MOVQ out_base+48(FP), DI + MOVQ (DI), DI + MOVQ start+72(FP), R8 + + // Add start offset to output + ADDQ R8, DI + + // Add start offset to input + ADDQ R8, DX + ADDQ R8, BX + ADDQ R8, SI + ADDQ R8, CX + MOVQ $0x0000000f, R8 + MOVQ R8, X9 + VPBROADCASTB X9, Y9 + +mulAvxTwo_4x1Xor_loop: + // Load and process 32 bytes from input 0 to 1 outputs + VMOVDQU (DX), Y10 + ADDQ $0x20, DX + VPSRLQ $0x04, Y10, Y11 + VPAND Y9, Y10, Y10 + VPAND Y9, Y11, Y11 + VMOVDQU (DI), Y8 + VPSHUFB Y10, Y0, Y10 + VPSHUFB Y11, Y1, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 1 to 1 outputs + VMOVDQU (BX), Y10 + ADDQ $0x20, BX + VPSRLQ $0x04, Y10, Y11 + VPAND Y9, Y10, Y10 + VPAND Y9, Y11, Y11 + VPSHUFB Y10, Y2, Y10 + VPSHUFB Y11, Y3, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 2 to 1 outputs + VMOVDQU (SI), Y10 + ADDQ $0x20, SI + VPSRLQ $0x04, Y10, Y11 + VPAND Y9, Y10, Y10 + VPAND Y9, Y11, Y11 + VPSHUFB Y10, Y4, Y10 + VPSHUFB Y11, Y5, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 3 to 1 outputs + VMOVDQU (CX), Y10 + ADDQ $0x20, CX + VPSRLQ $0x04, Y10, Y11 + VPAND Y9, Y10, Y10 + VPAND Y9, Y11, Y11 + VPSHUFB Y10, Y6, Y10 + VPSHUFB Y11, Y7, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Store 1 outputs + VMOVDQU Y8, (DI) + ADDQ $0x20, DI + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_4x1Xor_loop + VZEROUPPER + +mulAvxTwo_4x1Xor_end: + RET + +// func mulAvxTwo_4x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x1_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 22 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_4x1_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), DX + MOVQ out_base+48(FP), R8 + MOVQ out_base+48(FP), R8 + MOVQ (R8), R8 + MOVQ start+72(FP), R9 + + // Add start offset to output + ADDQ R9, R8 + + // Add start offset to input + ADDQ R9, BX + ADDQ R9, SI + ADDQ R9, DI + ADDQ R9, DX + MOVQ $0x0000000f, R9 + MOVQ R9, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_4x1_64Xor_loop: + // Load 1 outputs + VMOVDQU (R8), Y0 + VMOVDQU 32(R8), Y1 + + // Load and process 64 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y6 + VMOVDQU 32(BX), Y5 + ADDQ $0x40, BX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y6 + VMOVDQU 32(SI), Y5 + ADDQ $0x40, SI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 2 to 1 outputs + VMOVDQU (DI), Y6 + VMOVDQU 32(DI), Y5 + ADDQ $0x40, DI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 3 to 1 outputs + VMOVDQU (DX), Y6 + VMOVDQU 32(DX), Y5 + ADDQ $0x40, DX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Store 1 outputs + VMOVDQU Y0, (R8) + VMOVDQU Y1, 32(R8) + ADDQ $0x40, R8 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_4x1_64Xor_loop + VZEROUPPER + +mulAvxTwo_4x1_64Xor_end: + RET + +// func mulAvxTwo_4x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x2(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 23 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_4x2_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), DX + MOVQ out_base+48(FP), R8 + MOVQ (R8), R9 + MOVQ 24(R8), R8 + MOVQ start+72(FP), R10 + + // Add start offset to output + ADDQ R10, R9 + ADDQ R10, R8 + + // Add start offset to input + ADDQ R10, BX + ADDQ R10, SI + ADDQ R10, DI + ADDQ R10, DX + MOVQ $0x0000000f, R10 + MOVQ R10, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_4x2_loop: + // Load and process 32 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y5 + ADDQ $0x20, BX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y0 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y1 + + // Load and process 32 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y5 + ADDQ $0x20, SI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y5 + ADDQ $0x20, DI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 3 to 2 outputs + VMOVDQU (DX), Y5 + ADDQ $0x20, DX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 384(CX), Y3 + VMOVDQU 416(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 448(CX), Y3 + VMOVDQU 480(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Store 2 outputs + VMOVDQU Y0, (R9) + ADDQ $0x20, R9 + VMOVDQU Y1, (R8) + ADDQ $0x20, R8 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_4x2_loop + VZEROUPPER + +mulAvxTwo_4x2_end: + RET + +// func mulAvxTwo_4x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x2_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 41 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_4x2_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), DX + MOVQ out_base+48(FP), R8 + MOVQ out_base+48(FP), R8 + MOVQ (R8), R9 + MOVQ 24(R8), R8 + MOVQ start+72(FP), R10 + + // Add start offset to output + ADDQ R10, R9 + ADDQ R10, R8 + + // Add start offset to input + ADDQ R10, BX + ADDQ R10, SI + ADDQ R10, DI + ADDQ R10, DX + MOVQ $0x0000000f, R10 + MOVQ R10, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_4x2_64_loop: + // Load and process 64 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y9 + VMOVDQU 32(BX), Y11 + ADDQ $0x40, BX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y0 + VPXOR Y7, Y8, Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y2 + VPXOR Y7, Y8, Y3 + + // Load and process 64 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y9 + VMOVDQU 32(SI), Y11 + ADDQ $0x40, SI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y9 + VMOVDQU 32(DI), Y11 + ADDQ $0x40, DI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 3 to 2 outputs + VMOVDQU (DX), Y9 + VMOVDQU 32(DX), Y11 + ADDQ $0x40, DX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Store 2 outputs + VMOVDQU Y0, (R9) + VMOVDQU Y1, 32(R9) + ADDQ $0x40, R9 + VMOVDQU Y2, (R8) + VMOVDQU Y3, 32(R8) + ADDQ $0x40, R8 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_4x2_64_loop + VZEROUPPER + +mulAvxTwo_4x2_64_end: + RET + +// func mulAvxTwo_4x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x2Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 23 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_4x2Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), DX + MOVQ out_base+48(FP), R8 + MOVQ (R8), R9 + MOVQ 24(R8), R8 + MOVQ start+72(FP), R10 + + // Add start offset to output + ADDQ R10, R9 + ADDQ R10, R8 + + // Add start offset to input + ADDQ R10, BX + ADDQ R10, SI + ADDQ R10, DI + ADDQ R10, DX + MOVQ $0x0000000f, R10 + MOVQ R10, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_4x2Xor_loop: + // Load and process 32 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y5 + ADDQ $0x20, BX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU (R9), Y0 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU (R8), Y1 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y5 + ADDQ $0x20, SI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y5 + ADDQ $0x20, DI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 3 to 2 outputs + VMOVDQU (DX), Y5 + ADDQ $0x20, DX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 384(CX), Y3 + VMOVDQU 416(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 448(CX), Y3 + VMOVDQU 480(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Store 2 outputs + VMOVDQU Y0, (R9) + ADDQ $0x20, R9 + VMOVDQU Y1, (R8) + ADDQ $0x20, R8 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_4x2Xor_loop + VZEROUPPER + +mulAvxTwo_4x2Xor_end: + RET + +// func mulAvxTwo_4x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x2_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 41 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_4x2_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), DX + MOVQ out_base+48(FP), R8 + MOVQ out_base+48(FP), R8 + MOVQ (R8), R9 + MOVQ 24(R8), R8 + MOVQ start+72(FP), R10 + + // Add start offset to output + ADDQ R10, R9 + ADDQ R10, R8 + + // Add start offset to input + ADDQ R10, BX + ADDQ R10, SI + ADDQ R10, DI + ADDQ R10, DX + MOVQ $0x0000000f, R10 + MOVQ R10, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_4x2_64Xor_loop: + // Load 2 outputs + VMOVDQU (R9), Y0 + VMOVDQU 32(R9), Y1 + VMOVDQU (R8), Y2 + VMOVDQU 32(R8), Y3 + + // Load and process 64 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y9 + VMOVDQU 32(BX), Y11 + ADDQ $0x40, BX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y9 + VMOVDQU 32(SI), Y11 + ADDQ $0x40, SI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y9 + VMOVDQU 32(DI), Y11 + ADDQ $0x40, DI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 3 to 2 outputs + VMOVDQU (DX), Y9 + VMOVDQU 32(DX), Y11 + ADDQ $0x40, DX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Store 2 outputs + VMOVDQU Y0, (R9) + VMOVDQU Y1, 32(R9) + ADDQ $0x40, R9 + VMOVDQU Y2, (R8) + VMOVDQU Y3, 32(R8) + ADDQ $0x40, R8 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_4x2_64Xor_loop + VZEROUPPER + +mulAvxTwo_4x2_64Xor_end: + RET + +// func mulAvxTwo_4x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x3(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 32 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_4x3_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), DX + MOVQ out_base+48(FP), R8 + MOVQ (R8), R9 + MOVQ 24(R8), R10 + MOVQ 48(R8), R8 + MOVQ start+72(FP), R11 + + // Add start offset to output + ADDQ R11, R9 + ADDQ R11, R10 + ADDQ R11, R8 + + // Add start offset to input + ADDQ R11, BX + ADDQ R11, SI + ADDQ R11, DI + ADDQ R11, DX + MOVQ $0x0000000f, R11 + MOVQ R11, X3 + VPBROADCASTB X3, Y3 + +mulAvxTwo_4x3_loop: + // Load and process 32 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y6 + ADDQ $0x20, BX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU (CX), Y4 + VMOVDQU 32(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y0 + VMOVDQU 64(CX), Y4 + VMOVDQU 96(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y1 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y2 + + // Load and process 32 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y6 + ADDQ $0x20, SI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 192(CX), Y4 + VMOVDQU 224(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 256(CX), Y4 + VMOVDQU 288(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 320(CX), Y4 + VMOVDQU 352(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y6 + ADDQ $0x20, DI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 384(CX), Y4 + VMOVDQU 416(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 448(CX), Y4 + VMOVDQU 480(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 512(CX), Y4 + VMOVDQU 544(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 3 to 3 outputs + VMOVDQU (DX), Y6 + ADDQ $0x20, DX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 576(CX), Y4 + VMOVDQU 608(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 640(CX), Y4 + VMOVDQU 672(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 704(CX), Y4 + VMOVDQU 736(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Store 3 outputs + VMOVDQU Y0, (R9) + ADDQ $0x20, R9 + VMOVDQU Y1, (R10) + ADDQ $0x20, R10 + VMOVDQU Y2, (R8) + ADDQ $0x20, R8 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_4x3_loop + VZEROUPPER + +mulAvxTwo_4x3_end: + RET + +// func mulAvxTwo_4x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x3_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 58 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_4x3_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), DX + MOVQ out_base+48(FP), R8 + MOVQ out_base+48(FP), R8 + MOVQ (R8), R9 + MOVQ 24(R8), R10 + MOVQ 48(R8), R8 + MOVQ start+72(FP), R11 + + // Add start offset to output + ADDQ R11, R9 + ADDQ R11, R10 + ADDQ R11, R8 + + // Add start offset to input + ADDQ R11, BX + ADDQ R11, SI + ADDQ R11, DI + ADDQ R11, DX + MOVQ $0x0000000f, R11 + MOVQ R11, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_4x3_64_loop: + // Load and process 64 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y11 + VMOVDQU 32(BX), Y13 + ADDQ $0x40, BX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y0 + VPXOR Y9, Y10, Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y2 + VPXOR Y9, Y10, Y3 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y4 + VPXOR Y9, Y10, Y5 + + // Load and process 64 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y11 + VMOVDQU 32(SI), Y13 + ADDQ $0x40, SI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y11 + VMOVDQU 32(DI), Y13 + ADDQ $0x40, DI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 3 to 3 outputs + VMOVDQU (DX), Y11 + VMOVDQU 32(DX), Y13 + ADDQ $0x40, DX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Store 3 outputs + VMOVDQU Y0, (R9) + VMOVDQU Y1, 32(R9) + ADDQ $0x40, R9 + VMOVDQU Y2, (R10) + VMOVDQU Y3, 32(R10) + ADDQ $0x40, R10 + VMOVDQU Y4, (R8) + VMOVDQU Y5, 32(R8) + ADDQ $0x40, R8 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_4x3_64_loop + VZEROUPPER + +mulAvxTwo_4x3_64_end: + RET + +// func mulAvxTwo_4x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x3Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 32 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_4x3Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), DX + MOVQ out_base+48(FP), R8 + MOVQ (R8), R9 + MOVQ 24(R8), R10 + MOVQ 48(R8), R8 + MOVQ start+72(FP), R11 + + // Add start offset to output + ADDQ R11, R9 + ADDQ R11, R10 + ADDQ R11, R8 + + // Add start offset to input + ADDQ R11, BX + ADDQ R11, SI + ADDQ R11, DI + ADDQ R11, DX + MOVQ $0x0000000f, R11 + MOVQ R11, X3 + VPBROADCASTB X3, Y3 + +mulAvxTwo_4x3Xor_loop: + // Load and process 32 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y6 + ADDQ $0x20, BX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU (R9), Y0 + VMOVDQU (CX), Y4 + VMOVDQU 32(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU (R10), Y1 + VMOVDQU 64(CX), Y4 + VMOVDQU 96(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU (R8), Y2 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y6 + ADDQ $0x20, SI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 192(CX), Y4 + VMOVDQU 224(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 256(CX), Y4 + VMOVDQU 288(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 320(CX), Y4 + VMOVDQU 352(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y6 + ADDQ $0x20, DI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 384(CX), Y4 + VMOVDQU 416(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 448(CX), Y4 + VMOVDQU 480(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 512(CX), Y4 + VMOVDQU 544(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 3 to 3 outputs + VMOVDQU (DX), Y6 + ADDQ $0x20, DX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 576(CX), Y4 + VMOVDQU 608(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 640(CX), Y4 + VMOVDQU 672(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 704(CX), Y4 + VMOVDQU 736(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Store 3 outputs + VMOVDQU Y0, (R9) + ADDQ $0x20, R9 + VMOVDQU Y1, (R10) + ADDQ $0x20, R10 + VMOVDQU Y2, (R8) + ADDQ $0x20, R8 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_4x3Xor_loop + VZEROUPPER + +mulAvxTwo_4x3Xor_end: + RET + +// func mulAvxTwo_4x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x3_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 58 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_4x3_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), DX + MOVQ out_base+48(FP), R8 + MOVQ out_base+48(FP), R8 + MOVQ (R8), R9 + MOVQ 24(R8), R10 + MOVQ 48(R8), R8 + MOVQ start+72(FP), R11 + + // Add start offset to output + ADDQ R11, R9 + ADDQ R11, R10 + ADDQ R11, R8 + + // Add start offset to input + ADDQ R11, BX + ADDQ R11, SI + ADDQ R11, DI + ADDQ R11, DX + MOVQ $0x0000000f, R11 + MOVQ R11, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_4x3_64Xor_loop: + // Load 3 outputs + VMOVDQU (R9), Y0 + VMOVDQU 32(R9), Y1 + VMOVDQU (R10), Y2 + VMOVDQU 32(R10), Y3 + VMOVDQU (R8), Y4 + VMOVDQU 32(R8), Y5 + + // Load and process 64 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y11 + VMOVDQU 32(BX), Y13 + ADDQ $0x40, BX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y11 + VMOVDQU 32(SI), Y13 + ADDQ $0x40, SI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y11 + VMOVDQU 32(DI), Y13 + ADDQ $0x40, DI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 3 to 3 outputs + VMOVDQU (DX), Y11 + VMOVDQU 32(DX), Y13 + ADDQ $0x40, DX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Store 3 outputs + VMOVDQU Y0, (R9) + VMOVDQU Y1, 32(R9) + ADDQ $0x40, R9 + VMOVDQU Y2, (R10) + VMOVDQU Y3, 32(R10) + ADDQ $0x40, R10 + VMOVDQU Y4, (R8) + VMOVDQU Y5, 32(R8) + ADDQ $0x40, R8 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_4x3_64Xor_loop + VZEROUPPER + +mulAvxTwo_4x3_64Xor_end: + RET + +// func mulAvxTwo_4x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x4(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 41 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_4x4_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), DX + MOVQ out_base+48(FP), R8 + MOVQ (R8), R9 + MOVQ 24(R8), R10 + MOVQ 48(R8), R11 + MOVQ 72(R8), R8 + MOVQ start+72(FP), R12 + + // Add start offset to output + ADDQ R12, R9 + ADDQ R12, R10 + ADDQ R12, R11 + ADDQ R12, R8 + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_4x4_loop: + // Load and process 32 bytes from input 0 to 4 outputs + VMOVDQU (BX), Y7 + ADDQ $0x20, BX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y0 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y1 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y2 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y3 + + // Load and process 32 bytes from input 1 to 4 outputs + VMOVDQU (SI), Y7 + ADDQ $0x20, SI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 2 to 4 outputs + VMOVDQU (DI), Y7 + ADDQ $0x20, DI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 3 to 4 outputs + VMOVDQU (DX), Y7 + ADDQ $0x20, DX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 768(CX), Y5 + VMOVDQU 800(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 832(CX), Y5 + VMOVDQU 864(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 896(CX), Y5 + VMOVDQU 928(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 960(CX), Y5 + VMOVDQU 992(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Store 4 outputs + VMOVDQU Y0, (R9) + ADDQ $0x20, R9 + VMOVDQU Y1, (R10) + ADDQ $0x20, R10 + VMOVDQU Y2, (R11) + ADDQ $0x20, R11 + VMOVDQU Y3, (R8) + ADDQ $0x20, R8 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_4x4_loop + VZEROUPPER + +mulAvxTwo_4x4_end: + RET + +// func mulAvxTwo_4x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x4Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 41 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_4x4Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), DX + MOVQ out_base+48(FP), R8 + MOVQ (R8), R9 + MOVQ 24(R8), R10 + MOVQ 48(R8), R11 + MOVQ 72(R8), R8 + MOVQ start+72(FP), R12 + + // Add start offset to output + ADDQ R12, R9 + ADDQ R12, R10 + ADDQ R12, R11 + ADDQ R12, R8 + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_4x4Xor_loop: + // Load and process 32 bytes from input 0 to 4 outputs + VMOVDQU (BX), Y7 + ADDQ $0x20, BX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU (R9), Y0 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU (R10), Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU (R11), Y2 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU (R8), Y3 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 1 to 4 outputs + VMOVDQU (SI), Y7 + ADDQ $0x20, SI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 2 to 4 outputs + VMOVDQU (DI), Y7 + ADDQ $0x20, DI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 3 to 4 outputs + VMOVDQU (DX), Y7 + ADDQ $0x20, DX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 768(CX), Y5 + VMOVDQU 800(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 832(CX), Y5 + VMOVDQU 864(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 896(CX), Y5 + VMOVDQU 928(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 960(CX), Y5 + VMOVDQU 992(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Store 4 outputs + VMOVDQU Y0, (R9) + ADDQ $0x20, R9 + VMOVDQU Y1, (R10) + ADDQ $0x20, R10 + VMOVDQU Y2, (R11) + ADDQ $0x20, R11 + VMOVDQU Y3, (R8) + ADDQ $0x20, R8 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_4x4Xor_loop + VZEROUPPER + +mulAvxTwo_4x4Xor_end: + RET + +// func mulAvxTwo_4x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x5(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 50 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_4x5_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), DX + MOVQ out_base+48(FP), R8 + MOVQ (R8), R9 + MOVQ 24(R8), R10 + MOVQ 48(R8), R11 + MOVQ 72(R8), R12 + MOVQ 96(R8), R8 + MOVQ start+72(FP), R13 + + // Add start offset to output + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, R12 + ADDQ R13, R8 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X5 + VPBROADCASTB X5, Y5 + +mulAvxTwo_4x5_loop: + // Load and process 32 bytes from input 0 to 5 outputs + VMOVDQU (BX), Y8 + ADDQ $0x20, BX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU (CX), Y6 + VMOVDQU 32(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y0 + VMOVDQU 64(CX), Y6 + VMOVDQU 96(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y1 + VMOVDQU 128(CX), Y6 + VMOVDQU 160(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y2 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y3 + VMOVDQU 256(CX), Y6 + VMOVDQU 288(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y4 + + // Load and process 32 bytes from input 1 to 5 outputs + VMOVDQU (SI), Y8 + ADDQ $0x20, SI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 320(CX), Y6 + VMOVDQU 352(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 384(CX), Y6 + VMOVDQU 416(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 448(CX), Y6 + VMOVDQU 480(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 512(CX), Y6 + VMOVDQU 544(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 576(CX), Y6 + VMOVDQU 608(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 2 to 5 outputs + VMOVDQU (DI), Y8 + ADDQ $0x20, DI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 640(CX), Y6 + VMOVDQU 672(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 704(CX), Y6 + VMOVDQU 736(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 768(CX), Y6 + VMOVDQU 800(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 832(CX), Y6 + VMOVDQU 864(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 896(CX), Y6 + VMOVDQU 928(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 3 to 5 outputs + VMOVDQU (DX), Y8 + ADDQ $0x20, DX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 960(CX), Y6 + VMOVDQU 992(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1024(CX), Y6 + VMOVDQU 1056(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1088(CX), Y6 + VMOVDQU 1120(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1152(CX), Y6 + VMOVDQU 1184(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1216(CX), Y6 + VMOVDQU 1248(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Store 5 outputs + VMOVDQU Y0, (R9) + ADDQ $0x20, R9 + VMOVDQU Y1, (R10) + ADDQ $0x20, R10 + VMOVDQU Y2, (R11) + ADDQ $0x20, R11 + VMOVDQU Y3, (R12) + ADDQ $0x20, R12 + VMOVDQU Y4, (R8) + ADDQ $0x20, R8 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_4x5_loop + VZEROUPPER + +mulAvxTwo_4x5_end: + RET + +// func mulAvxTwo_4x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x5Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 50 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_4x5Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), DX + MOVQ out_base+48(FP), R8 + MOVQ (R8), R9 + MOVQ 24(R8), R10 + MOVQ 48(R8), R11 + MOVQ 72(R8), R12 + MOVQ 96(R8), R8 + MOVQ start+72(FP), R13 + + // Add start offset to output + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, R12 + ADDQ R13, R8 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X5 + VPBROADCASTB X5, Y5 + +mulAvxTwo_4x5Xor_loop: + // Load and process 32 bytes from input 0 to 5 outputs + VMOVDQU (BX), Y8 + ADDQ $0x20, BX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU (R9), Y0 + VMOVDQU (CX), Y6 + VMOVDQU 32(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU (R10), Y1 + VMOVDQU 64(CX), Y6 + VMOVDQU 96(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU (R11), Y2 + VMOVDQU 128(CX), Y6 + VMOVDQU 160(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU (R12), Y3 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU (R8), Y4 + VMOVDQU 256(CX), Y6 + VMOVDQU 288(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 1 to 5 outputs + VMOVDQU (SI), Y8 + ADDQ $0x20, SI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 320(CX), Y6 + VMOVDQU 352(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 384(CX), Y6 + VMOVDQU 416(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 448(CX), Y6 + VMOVDQU 480(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 512(CX), Y6 + VMOVDQU 544(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 576(CX), Y6 + VMOVDQU 608(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 2 to 5 outputs + VMOVDQU (DI), Y8 + ADDQ $0x20, DI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 640(CX), Y6 + VMOVDQU 672(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 704(CX), Y6 + VMOVDQU 736(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 768(CX), Y6 + VMOVDQU 800(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 832(CX), Y6 + VMOVDQU 864(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 896(CX), Y6 + VMOVDQU 928(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 3 to 5 outputs + VMOVDQU (DX), Y8 + ADDQ $0x20, DX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 960(CX), Y6 + VMOVDQU 992(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1024(CX), Y6 + VMOVDQU 1056(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1088(CX), Y6 + VMOVDQU 1120(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1152(CX), Y6 + VMOVDQU 1184(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1216(CX), Y6 + VMOVDQU 1248(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Store 5 outputs + VMOVDQU Y0, (R9) + ADDQ $0x20, R9 + VMOVDQU Y1, (R10) + ADDQ $0x20, R10 + VMOVDQU Y2, (R11) + ADDQ $0x20, R11 + VMOVDQU Y3, (R12) + ADDQ $0x20, R12 + VMOVDQU Y4, (R8) + ADDQ $0x20, R8 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_4x5Xor_loop + VZEROUPPER + +mulAvxTwo_4x5Xor_end: + RET + +// func mulAvxTwo_4x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x6(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 59 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_4x6_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), DX + MOVQ out_base+48(FP), R8 + MOVQ (R8), R9 + MOVQ 24(R8), R10 + MOVQ 48(R8), R11 + MOVQ 72(R8), R12 + MOVQ 96(R8), R13 + MOVQ 120(R8), R8 + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, R13 + ADDQ R14, R8 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_4x6_loop: + // Load and process 32 bytes from input 0 to 6 outputs + VMOVDQU (BX), Y9 + ADDQ $0x20, BX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y0 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y1 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y2 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y3 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y4 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y5 + + // Load and process 32 bytes from input 1 to 6 outputs + VMOVDQU (SI), Y9 + ADDQ $0x20, SI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 2 to 6 outputs + VMOVDQU (DI), Y9 + ADDQ $0x20, DI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 3 to 6 outputs + VMOVDQU (DX), Y9 + ADDQ $0x20, DX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1152(CX), Y7 + VMOVDQU 1184(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1216(CX), Y7 + VMOVDQU 1248(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1280(CX), Y7 + VMOVDQU 1312(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1344(CX), Y7 + VMOVDQU 1376(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1408(CX), Y7 + VMOVDQU 1440(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1472(CX), Y7 + VMOVDQU 1504(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Store 6 outputs + VMOVDQU Y0, (R9) + ADDQ $0x20, R9 + VMOVDQU Y1, (R10) + ADDQ $0x20, R10 + VMOVDQU Y2, (R11) + ADDQ $0x20, R11 + VMOVDQU Y3, (R12) + ADDQ $0x20, R12 + VMOVDQU Y4, (R13) + ADDQ $0x20, R13 + VMOVDQU Y5, (R8) + ADDQ $0x20, R8 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_4x6_loop + VZEROUPPER + +mulAvxTwo_4x6_end: + RET + +// func mulAvxTwo_4x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x6Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 59 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_4x6Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), DX + MOVQ out_base+48(FP), R8 + MOVQ (R8), R9 + MOVQ 24(R8), R10 + MOVQ 48(R8), R11 + MOVQ 72(R8), R12 + MOVQ 96(R8), R13 + MOVQ 120(R8), R8 + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, R13 + ADDQ R14, R8 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_4x6Xor_loop: + // Load and process 32 bytes from input 0 to 6 outputs + VMOVDQU (BX), Y9 + ADDQ $0x20, BX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU (R9), Y0 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU (R10), Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU (R11), Y2 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU (R12), Y3 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU (R13), Y4 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU (R8), Y5 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 1 to 6 outputs + VMOVDQU (SI), Y9 + ADDQ $0x20, SI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 2 to 6 outputs + VMOVDQU (DI), Y9 + ADDQ $0x20, DI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 3 to 6 outputs + VMOVDQU (DX), Y9 + ADDQ $0x20, DX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1152(CX), Y7 + VMOVDQU 1184(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1216(CX), Y7 + VMOVDQU 1248(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1280(CX), Y7 + VMOVDQU 1312(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1344(CX), Y7 + VMOVDQU 1376(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1408(CX), Y7 + VMOVDQU 1440(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1472(CX), Y7 + VMOVDQU 1504(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Store 6 outputs + VMOVDQU Y0, (R9) + ADDQ $0x20, R9 + VMOVDQU Y1, (R10) + ADDQ $0x20, R10 + VMOVDQU Y2, (R11) + ADDQ $0x20, R11 + VMOVDQU Y3, (R12) + ADDQ $0x20, R12 + VMOVDQU Y4, (R13) + ADDQ $0x20, R13 + VMOVDQU Y5, (R8) + ADDQ $0x20, R8 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_4x6Xor_loop + VZEROUPPER + +mulAvxTwo_4x6Xor_end: + RET + +// func mulAvxTwo_4x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x7(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 68 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_4x7_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), DX + MOVQ out_base+48(FP), R8 + MOVQ (R8), R9 + MOVQ 24(R8), R10 + MOVQ 48(R8), R11 + MOVQ 72(R8), R12 + MOVQ 96(R8), R13 + MOVQ 120(R8), R14 + MOVQ 144(R8), R8 + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, R14 + ADDQ R15, R8 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X7 + VPBROADCASTB X7, Y7 + +mulAvxTwo_4x7_loop: + // Load and process 32 bytes from input 0 to 7 outputs + VMOVDQU (BX), Y10 + ADDQ $0x20, BX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU (CX), Y8 + VMOVDQU 32(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y0 + VMOVDQU 64(CX), Y8 + VMOVDQU 96(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y1 + VMOVDQU 128(CX), Y8 + VMOVDQU 160(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y2 + VMOVDQU 192(CX), Y8 + VMOVDQU 224(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y3 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y4 + VMOVDQU 320(CX), Y8 + VMOVDQU 352(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y5 + VMOVDQU 384(CX), Y8 + VMOVDQU 416(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y6 + + // Load and process 32 bytes from input 1 to 7 outputs + VMOVDQU (SI), Y10 + ADDQ $0x20, SI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 448(CX), Y8 + VMOVDQU 480(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 512(CX), Y8 + VMOVDQU 544(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 576(CX), Y8 + VMOVDQU 608(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 640(CX), Y8 + VMOVDQU 672(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 704(CX), Y8 + VMOVDQU 736(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 768(CX), Y8 + VMOVDQU 800(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 832(CX), Y8 + VMOVDQU 864(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 2 to 7 outputs + VMOVDQU (DI), Y10 + ADDQ $0x20, DI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 896(CX), Y8 + VMOVDQU 928(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 960(CX), Y8 + VMOVDQU 992(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1024(CX), Y8 + VMOVDQU 1056(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1088(CX), Y8 + VMOVDQU 1120(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1152(CX), Y8 + VMOVDQU 1184(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1216(CX), Y8 + VMOVDQU 1248(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1280(CX), Y8 + VMOVDQU 1312(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 3 to 7 outputs + VMOVDQU (DX), Y10 + ADDQ $0x20, DX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1344(CX), Y8 + VMOVDQU 1376(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1408(CX), Y8 + VMOVDQU 1440(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1472(CX), Y8 + VMOVDQU 1504(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1536(CX), Y8 + VMOVDQU 1568(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1600(CX), Y8 + VMOVDQU 1632(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1664(CX), Y8 + VMOVDQU 1696(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1728(CX), Y8 + VMOVDQU 1760(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Store 7 outputs + VMOVDQU Y0, (R9) + ADDQ $0x20, R9 + VMOVDQU Y1, (R10) + ADDQ $0x20, R10 + VMOVDQU Y2, (R11) + ADDQ $0x20, R11 + VMOVDQU Y3, (R12) + ADDQ $0x20, R12 + VMOVDQU Y4, (R13) + ADDQ $0x20, R13 + VMOVDQU Y5, (R14) + ADDQ $0x20, R14 + VMOVDQU Y6, (R8) + ADDQ $0x20, R8 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_4x7_loop + VZEROUPPER + +mulAvxTwo_4x7_end: + RET + +// func mulAvxTwo_4x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x7Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 68 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_4x7Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), DX + MOVQ out_base+48(FP), R8 + MOVQ (R8), R9 + MOVQ 24(R8), R10 + MOVQ 48(R8), R11 + MOVQ 72(R8), R12 + MOVQ 96(R8), R13 + MOVQ 120(R8), R14 + MOVQ 144(R8), R8 + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, R14 + ADDQ R15, R8 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X7 + VPBROADCASTB X7, Y7 + +mulAvxTwo_4x7Xor_loop: + // Load and process 32 bytes from input 0 to 7 outputs + VMOVDQU (BX), Y10 + ADDQ $0x20, BX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU (R9), Y0 + VMOVDQU (CX), Y8 + VMOVDQU 32(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU (R10), Y1 + VMOVDQU 64(CX), Y8 + VMOVDQU 96(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU (R11), Y2 + VMOVDQU 128(CX), Y8 + VMOVDQU 160(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU (R12), Y3 + VMOVDQU 192(CX), Y8 + VMOVDQU 224(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU (R13), Y4 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU (R14), Y5 + VMOVDQU 320(CX), Y8 + VMOVDQU 352(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU (R8), Y6 + VMOVDQU 384(CX), Y8 + VMOVDQU 416(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 1 to 7 outputs + VMOVDQU (SI), Y10 + ADDQ $0x20, SI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 448(CX), Y8 + VMOVDQU 480(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 512(CX), Y8 + VMOVDQU 544(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 576(CX), Y8 + VMOVDQU 608(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 640(CX), Y8 + VMOVDQU 672(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 704(CX), Y8 + VMOVDQU 736(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 768(CX), Y8 + VMOVDQU 800(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 832(CX), Y8 + VMOVDQU 864(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 2 to 7 outputs + VMOVDQU (DI), Y10 + ADDQ $0x20, DI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 896(CX), Y8 + VMOVDQU 928(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 960(CX), Y8 + VMOVDQU 992(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1024(CX), Y8 + VMOVDQU 1056(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1088(CX), Y8 + VMOVDQU 1120(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1152(CX), Y8 + VMOVDQU 1184(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1216(CX), Y8 + VMOVDQU 1248(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1280(CX), Y8 + VMOVDQU 1312(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 3 to 7 outputs + VMOVDQU (DX), Y10 + ADDQ $0x20, DX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1344(CX), Y8 + VMOVDQU 1376(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1408(CX), Y8 + VMOVDQU 1440(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1472(CX), Y8 + VMOVDQU 1504(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1536(CX), Y8 + VMOVDQU 1568(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1600(CX), Y8 + VMOVDQU 1632(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1664(CX), Y8 + VMOVDQU 1696(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1728(CX), Y8 + VMOVDQU 1760(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Store 7 outputs + VMOVDQU Y0, (R9) + ADDQ $0x20, R9 + VMOVDQU Y1, (R10) + ADDQ $0x20, R10 + VMOVDQU Y2, (R11) + ADDQ $0x20, R11 + VMOVDQU Y3, (R12) + ADDQ $0x20, R12 + VMOVDQU Y4, (R13) + ADDQ $0x20, R13 + VMOVDQU Y5, (R14) + ADDQ $0x20, R14 + VMOVDQU Y6, (R8) + ADDQ $0x20, R8 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_4x7Xor_loop + VZEROUPPER + +mulAvxTwo_4x7Xor_end: + RET + +// func mulAvxTwo_4x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x8(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 77 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_4x8_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), DX + MOVQ out_base+48(FP), R8 + MOVQ (R8), R9 + MOVQ 24(R8), R10 + MOVQ 48(R8), R11 + MOVQ 72(R8), R12 + MOVQ 96(R8), R13 + MOVQ 120(R8), R14 + MOVQ 144(R8), R15 + MOVQ 168(R8), R8 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R8 + + // Add start offset to input + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, DX + MOVQ $0x0000000f, BP + MOVQ BP, X8 + VPBROADCASTB X8, Y8 + +mulAvxTwo_4x8_loop: + // Load and process 32 bytes from input 0 to 8 outputs + VMOVDQU (BX), Y11 + ADDQ $0x20, BX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU (CX), Y9 + VMOVDQU 32(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y0 + VMOVDQU 64(CX), Y9 + VMOVDQU 96(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y1 + VMOVDQU 128(CX), Y9 + VMOVDQU 160(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y2 + VMOVDQU 192(CX), Y9 + VMOVDQU 224(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y3 + VMOVDQU 256(CX), Y9 + VMOVDQU 288(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y4 + VMOVDQU 320(CX), Y9 + VMOVDQU 352(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y5 + VMOVDQU 384(CX), Y9 + VMOVDQU 416(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y6 + VMOVDQU 448(CX), Y9 + VMOVDQU 480(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y7 + + // Load and process 32 bytes from input 1 to 8 outputs + VMOVDQU (SI), Y11 + ADDQ $0x20, SI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 512(CX), Y9 + VMOVDQU 544(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 576(CX), Y9 + VMOVDQU 608(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y9 + VMOVDQU 672(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 704(CX), Y9 + VMOVDQU 736(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 768(CX), Y9 + VMOVDQU 800(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 832(CX), Y9 + VMOVDQU 864(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 896(CX), Y9 + VMOVDQU 928(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 960(CX), Y9 + VMOVDQU 992(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 2 to 8 outputs + VMOVDQU (DI), Y11 + ADDQ $0x20, DI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1024(CX), Y9 + VMOVDQU 1056(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1088(CX), Y9 + VMOVDQU 1120(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1152(CX), Y9 + VMOVDQU 1184(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1216(CX), Y9 + VMOVDQU 1248(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y9 + VMOVDQU 1312(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1344(CX), Y9 + VMOVDQU 1376(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1408(CX), Y9 + VMOVDQU 1440(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1472(CX), Y9 + VMOVDQU 1504(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 3 to 8 outputs + VMOVDQU (DX), Y11 + ADDQ $0x20, DX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1536(CX), Y9 + VMOVDQU 1568(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1600(CX), Y9 + VMOVDQU 1632(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1664(CX), Y9 + VMOVDQU 1696(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1728(CX), Y9 + VMOVDQU 1760(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1792(CX), Y9 + VMOVDQU 1824(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1856(CX), Y9 + VMOVDQU 1888(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1920(CX), Y9 + VMOVDQU 1952(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1984(CX), Y9 + VMOVDQU 2016(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Store 8 outputs + VMOVDQU Y0, (R9) + ADDQ $0x20, R9 + VMOVDQU Y1, (R10) + ADDQ $0x20, R10 + VMOVDQU Y2, (R11) + ADDQ $0x20, R11 + VMOVDQU Y3, (R12) + ADDQ $0x20, R12 + VMOVDQU Y4, (R13) + ADDQ $0x20, R13 + VMOVDQU Y5, (R14) + ADDQ $0x20, R14 + VMOVDQU Y6, (R15) + ADDQ $0x20, R15 + VMOVDQU Y7, (R8) + ADDQ $0x20, R8 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_4x8_loop + VZEROUPPER + +mulAvxTwo_4x8_end: + RET + +// func mulAvxTwo_4x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x8Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 77 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_4x8Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), DX + MOVQ out_base+48(FP), R8 + MOVQ (R8), R9 + MOVQ 24(R8), R10 + MOVQ 48(R8), R11 + MOVQ 72(R8), R12 + MOVQ 96(R8), R13 + MOVQ 120(R8), R14 + MOVQ 144(R8), R15 + MOVQ 168(R8), R8 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R8 + + // Add start offset to input + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, DX + MOVQ $0x0000000f, BP + MOVQ BP, X8 + VPBROADCASTB X8, Y8 + +mulAvxTwo_4x8Xor_loop: + // Load and process 32 bytes from input 0 to 8 outputs + VMOVDQU (BX), Y11 + ADDQ $0x20, BX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU (R9), Y0 + VMOVDQU (CX), Y9 + VMOVDQU 32(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU (R10), Y1 + VMOVDQU 64(CX), Y9 + VMOVDQU 96(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU (R11), Y2 + VMOVDQU 128(CX), Y9 + VMOVDQU 160(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU (R12), Y3 + VMOVDQU 192(CX), Y9 + VMOVDQU 224(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU (R13), Y4 + VMOVDQU 256(CX), Y9 + VMOVDQU 288(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU (R14), Y5 + VMOVDQU 320(CX), Y9 + VMOVDQU 352(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU (R15), Y6 + VMOVDQU 384(CX), Y9 + VMOVDQU 416(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU (R8), Y7 + VMOVDQU 448(CX), Y9 + VMOVDQU 480(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 1 to 8 outputs + VMOVDQU (SI), Y11 + ADDQ $0x20, SI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 512(CX), Y9 + VMOVDQU 544(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 576(CX), Y9 + VMOVDQU 608(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y9 + VMOVDQU 672(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 704(CX), Y9 + VMOVDQU 736(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 768(CX), Y9 + VMOVDQU 800(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 832(CX), Y9 + VMOVDQU 864(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 896(CX), Y9 + VMOVDQU 928(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 960(CX), Y9 + VMOVDQU 992(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 2 to 8 outputs + VMOVDQU (DI), Y11 + ADDQ $0x20, DI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1024(CX), Y9 + VMOVDQU 1056(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1088(CX), Y9 + VMOVDQU 1120(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1152(CX), Y9 + VMOVDQU 1184(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1216(CX), Y9 + VMOVDQU 1248(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y9 + VMOVDQU 1312(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1344(CX), Y9 + VMOVDQU 1376(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1408(CX), Y9 + VMOVDQU 1440(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1472(CX), Y9 + VMOVDQU 1504(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 3 to 8 outputs + VMOVDQU (DX), Y11 + ADDQ $0x20, DX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1536(CX), Y9 + VMOVDQU 1568(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1600(CX), Y9 + VMOVDQU 1632(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1664(CX), Y9 + VMOVDQU 1696(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1728(CX), Y9 + VMOVDQU 1760(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1792(CX), Y9 + VMOVDQU 1824(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1856(CX), Y9 + VMOVDQU 1888(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1920(CX), Y9 + VMOVDQU 1952(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1984(CX), Y9 + VMOVDQU 2016(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Store 8 outputs + VMOVDQU Y0, (R9) + ADDQ $0x20, R9 + VMOVDQU Y1, (R10) + ADDQ $0x20, R10 + VMOVDQU Y2, (R11) + ADDQ $0x20, R11 + VMOVDQU Y3, (R12) + ADDQ $0x20, R12 + VMOVDQU Y4, (R13) + ADDQ $0x20, R13 + VMOVDQU Y5, (R14) + ADDQ $0x20, R14 + VMOVDQU Y6, (R15) + ADDQ $0x20, R15 + VMOVDQU Y7, (R8) + ADDQ $0x20, R8 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_4x8Xor_loop + VZEROUPPER + +mulAvxTwo_4x8Xor_end: + RET + +// func mulAvxTwo_4x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x9(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 86 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_4x9_end + MOVQ in_base+24(FP), AX + MOVQ (AX), DX + MOVQ 24(AX), BX + MOVQ 48(AX), SI + MOVQ 72(AX), AX + MOVQ out_base+48(FP), DI + MOVQ (DI), R8 + MOVQ 24(DI), R9 + MOVQ 48(DI), R10 + MOVQ 72(DI), R11 + MOVQ 96(DI), R12 + MOVQ 120(DI), R13 + MOVQ 144(DI), R14 + MOVQ 168(DI), R15 + MOVQ 192(DI), DI + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, DI + + // Add start offset to input + ADDQ BP, DX + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, AX + MOVQ $0x0000000f, BP + MOVQ BP, X9 + VPBROADCASTB X9, Y9 + MOVQ n+80(FP), BP + SHRQ $0x05, BP + +mulAvxTwo_4x9_loop: + // Load and process 32 bytes from input 0 to 9 outputs + VMOVDQU (DX), Y12 + ADDQ $0x20, DX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU (CX), Y10 + VMOVDQU 32(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y0 + VMOVDQU 64(CX), Y10 + VMOVDQU 96(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y1 + VMOVDQU 128(CX), Y10 + VMOVDQU 160(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y2 + VMOVDQU 192(CX), Y10 + VMOVDQU 224(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y3 + VMOVDQU 256(CX), Y10 + VMOVDQU 288(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y4 + VMOVDQU 320(CX), Y10 + VMOVDQU 352(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y5 + VMOVDQU 384(CX), Y10 + VMOVDQU 416(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y6 + VMOVDQU 448(CX), Y10 + VMOVDQU 480(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y7 + VMOVDQU 512(CX), Y10 + VMOVDQU 544(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y8 + + // Load and process 32 bytes from input 1 to 9 outputs + VMOVDQU (BX), Y12 + ADDQ $0x20, BX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 576(CX), Y10 + VMOVDQU 608(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 640(CX), Y10 + VMOVDQU 672(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 704(CX), Y10 + VMOVDQU 736(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 768(CX), Y10 + VMOVDQU 800(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 832(CX), Y10 + VMOVDQU 864(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 896(CX), Y10 + VMOVDQU 928(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 960(CX), Y10 + VMOVDQU 992(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1024(CX), Y10 + VMOVDQU 1056(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1088(CX), Y10 + VMOVDQU 1120(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 2 to 9 outputs + VMOVDQU (SI), Y12 + ADDQ $0x20, SI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1152(CX), Y10 + VMOVDQU 1184(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1216(CX), Y10 + VMOVDQU 1248(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1280(CX), Y10 + VMOVDQU 1312(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1344(CX), Y10 + VMOVDQU 1376(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1408(CX), Y10 + VMOVDQU 1440(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 1472(CX), Y10 + VMOVDQU 1504(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 1536(CX), Y10 + VMOVDQU 1568(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1600(CX), Y10 + VMOVDQU 1632(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1664(CX), Y10 + VMOVDQU 1696(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 3 to 9 outputs + VMOVDQU (AX), Y12 + ADDQ $0x20, AX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1728(CX), Y10 + VMOVDQU 1760(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1792(CX), Y10 + VMOVDQU 1824(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1856(CX), Y10 + VMOVDQU 1888(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1920(CX), Y10 + VMOVDQU 1952(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1984(CX), Y10 + VMOVDQU 2016(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2048(CX), Y10 + VMOVDQU 2080(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2112(CX), Y10 + VMOVDQU 2144(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2176(CX), Y10 + VMOVDQU 2208(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2240(CX), Y10 + VMOVDQU 2272(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Store 9 outputs + VMOVDQU Y0, (R8) + ADDQ $0x20, R8 + VMOVDQU Y1, (R9) + ADDQ $0x20, R9 + VMOVDQU Y2, (R10) + ADDQ $0x20, R10 + VMOVDQU Y3, (R11) + ADDQ $0x20, R11 + VMOVDQU Y4, (R12) + ADDQ $0x20, R12 + VMOVDQU Y5, (R13) + ADDQ $0x20, R13 + VMOVDQU Y6, (R14) + ADDQ $0x20, R14 + VMOVDQU Y7, (R15) + ADDQ $0x20, R15 + VMOVDQU Y8, (DI) + ADDQ $0x20, DI + + // Prepare for next loop + DECQ BP + JNZ mulAvxTwo_4x9_loop + VZEROUPPER + +mulAvxTwo_4x9_end: + RET + +// func mulAvxTwo_4x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x9Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 86 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_4x9Xor_end + MOVQ in_base+24(FP), AX + MOVQ (AX), DX + MOVQ 24(AX), BX + MOVQ 48(AX), SI + MOVQ 72(AX), AX + MOVQ out_base+48(FP), DI + MOVQ (DI), R8 + MOVQ 24(DI), R9 + MOVQ 48(DI), R10 + MOVQ 72(DI), R11 + MOVQ 96(DI), R12 + MOVQ 120(DI), R13 + MOVQ 144(DI), R14 + MOVQ 168(DI), R15 + MOVQ 192(DI), DI + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, DI + + // Add start offset to input + ADDQ BP, DX + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, AX + MOVQ $0x0000000f, BP + MOVQ BP, X9 + VPBROADCASTB X9, Y9 + MOVQ n+80(FP), BP + SHRQ $0x05, BP + +mulAvxTwo_4x9Xor_loop: + // Load and process 32 bytes from input 0 to 9 outputs + VMOVDQU (DX), Y12 + ADDQ $0x20, DX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU (R8), Y0 + VMOVDQU (CX), Y10 + VMOVDQU 32(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU (R9), Y1 + VMOVDQU 64(CX), Y10 + VMOVDQU 96(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU (R10), Y2 + VMOVDQU 128(CX), Y10 + VMOVDQU 160(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU (R11), Y3 + VMOVDQU 192(CX), Y10 + VMOVDQU 224(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU (R12), Y4 + VMOVDQU 256(CX), Y10 + VMOVDQU 288(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU (R13), Y5 + VMOVDQU 320(CX), Y10 + VMOVDQU 352(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU (R14), Y6 + VMOVDQU 384(CX), Y10 + VMOVDQU 416(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU (R15), Y7 + VMOVDQU 448(CX), Y10 + VMOVDQU 480(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU (DI), Y8 + VMOVDQU 512(CX), Y10 + VMOVDQU 544(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 1 to 9 outputs + VMOVDQU (BX), Y12 + ADDQ $0x20, BX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 576(CX), Y10 + VMOVDQU 608(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 640(CX), Y10 + VMOVDQU 672(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 704(CX), Y10 + VMOVDQU 736(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 768(CX), Y10 + VMOVDQU 800(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 832(CX), Y10 + VMOVDQU 864(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 896(CX), Y10 + VMOVDQU 928(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 960(CX), Y10 + VMOVDQU 992(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1024(CX), Y10 + VMOVDQU 1056(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1088(CX), Y10 + VMOVDQU 1120(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 2 to 9 outputs + VMOVDQU (SI), Y12 + ADDQ $0x20, SI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1152(CX), Y10 + VMOVDQU 1184(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1216(CX), Y10 + VMOVDQU 1248(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1280(CX), Y10 + VMOVDQU 1312(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1344(CX), Y10 + VMOVDQU 1376(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1408(CX), Y10 + VMOVDQU 1440(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 1472(CX), Y10 + VMOVDQU 1504(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 1536(CX), Y10 + VMOVDQU 1568(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1600(CX), Y10 + VMOVDQU 1632(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1664(CX), Y10 + VMOVDQU 1696(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 3 to 9 outputs + VMOVDQU (AX), Y12 + ADDQ $0x20, AX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1728(CX), Y10 + VMOVDQU 1760(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1792(CX), Y10 + VMOVDQU 1824(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1856(CX), Y10 + VMOVDQU 1888(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1920(CX), Y10 + VMOVDQU 1952(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1984(CX), Y10 + VMOVDQU 2016(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2048(CX), Y10 + VMOVDQU 2080(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2112(CX), Y10 + VMOVDQU 2144(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2176(CX), Y10 + VMOVDQU 2208(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2240(CX), Y10 + VMOVDQU 2272(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Store 9 outputs + VMOVDQU Y0, (R8) + ADDQ $0x20, R8 + VMOVDQU Y1, (R9) + ADDQ $0x20, R9 + VMOVDQU Y2, (R10) + ADDQ $0x20, R10 + VMOVDQU Y3, (R11) + ADDQ $0x20, R11 + VMOVDQU Y4, (R12) + ADDQ $0x20, R12 + VMOVDQU Y5, (R13) + ADDQ $0x20, R13 + VMOVDQU Y6, (R14) + ADDQ $0x20, R14 + VMOVDQU Y7, (R15) + ADDQ $0x20, R15 + VMOVDQU Y8, (DI) + ADDQ $0x20, DI + + // Prepare for next loop + DECQ BP + JNZ mulAvxTwo_4x9Xor_loop + VZEROUPPER + +mulAvxTwo_4x9Xor_end: + RET + +// func mulAvxTwo_4x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x10(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 95 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_4x10_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), DX + MOVQ out_base+48(FP), R8 + MOVQ start+72(FP), R9 + + // Add start offset to input + ADDQ R9, BX + ADDQ R9, SI + ADDQ R9, DI + ADDQ R9, DX + MOVQ $0x0000000f, R10 + MOVQ R10, X10 + VPBROADCASTB X10, Y10 + +mulAvxTwo_4x10_loop: + // Load and process 32 bytes from input 0 to 10 outputs + VMOVDQU (BX), Y13 + ADDQ $0x20, BX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU (CX), Y11 + VMOVDQU 32(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y0 + VMOVDQU 64(CX), Y11 + VMOVDQU 96(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y1 + VMOVDQU 128(CX), Y11 + VMOVDQU 160(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y2 + VMOVDQU 192(CX), Y11 + VMOVDQU 224(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y3 + VMOVDQU 256(CX), Y11 + VMOVDQU 288(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y4 + VMOVDQU 320(CX), Y11 + VMOVDQU 352(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y5 + VMOVDQU 384(CX), Y11 + VMOVDQU 416(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y6 + VMOVDQU 448(CX), Y11 + VMOVDQU 480(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y7 + VMOVDQU 512(CX), Y11 + VMOVDQU 544(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y8 + VMOVDQU 576(CX), Y11 + VMOVDQU 608(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y9 + + // Load and process 32 bytes from input 1 to 10 outputs + VMOVDQU (SI), Y13 + ADDQ $0x20, SI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 640(CX), Y11 + VMOVDQU 672(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 704(CX), Y11 + VMOVDQU 736(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 768(CX), Y11 + VMOVDQU 800(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 832(CX), Y11 + VMOVDQU 864(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 896(CX), Y11 + VMOVDQU 928(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 960(CX), Y11 + VMOVDQU 992(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1024(CX), Y11 + VMOVDQU 1056(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1088(CX), Y11 + VMOVDQU 1120(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1152(CX), Y11 + VMOVDQU 1184(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1216(CX), Y11 + VMOVDQU 1248(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 2 to 10 outputs + VMOVDQU (DI), Y13 + ADDQ $0x20, DI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1280(CX), Y11 + VMOVDQU 1312(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1344(CX), Y11 + VMOVDQU 1376(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 1408(CX), Y11 + VMOVDQU 1440(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 1472(CX), Y11 + VMOVDQU 1504(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 1536(CX), Y11 + VMOVDQU 1568(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 1600(CX), Y11 + VMOVDQU 1632(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1664(CX), Y11 + VMOVDQU 1696(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1728(CX), Y11 + VMOVDQU 1760(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1792(CX), Y11 + VMOVDQU 1824(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1856(CX), Y11 + VMOVDQU 1888(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 3 to 10 outputs + VMOVDQU (DX), Y13 + ADDQ $0x20, DX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1920(CX), Y11 + VMOVDQU 1952(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1984(CX), Y11 + VMOVDQU 2016(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2048(CX), Y11 + VMOVDQU 2080(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2112(CX), Y11 + VMOVDQU 2144(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2176(CX), Y11 + VMOVDQU 2208(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2240(CX), Y11 + VMOVDQU 2272(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2304(CX), Y11 + VMOVDQU 2336(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 2368(CX), Y11 + VMOVDQU 2400(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 2432(CX), Y11 + VMOVDQU 2464(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 2496(CX), Y11 + VMOVDQU 2528(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Store 10 outputs + MOVQ (R8), R10 + VMOVDQU Y0, (R10)(R9*1) + MOVQ 24(R8), R10 + VMOVDQU Y1, (R10)(R9*1) + MOVQ 48(R8), R10 + VMOVDQU Y2, (R10)(R9*1) + MOVQ 72(R8), R10 + VMOVDQU Y3, (R10)(R9*1) + MOVQ 96(R8), R10 + VMOVDQU Y4, (R10)(R9*1) + MOVQ 120(R8), R10 + VMOVDQU Y5, (R10)(R9*1) + MOVQ 144(R8), R10 + VMOVDQU Y6, (R10)(R9*1) + MOVQ 168(R8), R10 + VMOVDQU Y7, (R10)(R9*1) + MOVQ 192(R8), R10 + VMOVDQU Y8, (R10)(R9*1) + MOVQ 216(R8), R10 + VMOVDQU Y9, (R10)(R9*1) + + // Prepare for next loop + ADDQ $0x20, R9 + DECQ AX + JNZ mulAvxTwo_4x10_loop + VZEROUPPER + +mulAvxTwo_4x10_end: + RET + +// func mulAvxTwo_4x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_4x10Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 95 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_4x10Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), DX + MOVQ out_base+48(FP), R8 + MOVQ start+72(FP), R9 + + // Add start offset to input + ADDQ R9, BX + ADDQ R9, SI + ADDQ R9, DI + ADDQ R9, DX + MOVQ $0x0000000f, R10 + MOVQ R10, X10 + VPBROADCASTB X10, Y10 + +mulAvxTwo_4x10Xor_loop: + // Load and process 32 bytes from input 0 to 10 outputs + VMOVDQU (BX), Y13 + ADDQ $0x20, BX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + MOVQ (R8), R10 + VMOVDQU (R10)(R9*1), Y0 + VMOVDQU (CX), Y11 + VMOVDQU 32(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + MOVQ 24(R8), R10 + VMOVDQU (R10)(R9*1), Y1 + VMOVDQU 64(CX), Y11 + VMOVDQU 96(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + MOVQ 48(R8), R10 + VMOVDQU (R10)(R9*1), Y2 + VMOVDQU 128(CX), Y11 + VMOVDQU 160(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + MOVQ 72(R8), R10 + VMOVDQU (R10)(R9*1), Y3 + VMOVDQU 192(CX), Y11 + VMOVDQU 224(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + MOVQ 96(R8), R10 + VMOVDQU (R10)(R9*1), Y4 + VMOVDQU 256(CX), Y11 + VMOVDQU 288(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + MOVQ 120(R8), R10 + VMOVDQU (R10)(R9*1), Y5 + VMOVDQU 320(CX), Y11 + VMOVDQU 352(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + MOVQ 144(R8), R10 + VMOVDQU (R10)(R9*1), Y6 + VMOVDQU 384(CX), Y11 + VMOVDQU 416(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + MOVQ 168(R8), R10 + VMOVDQU (R10)(R9*1), Y7 + VMOVDQU 448(CX), Y11 + VMOVDQU 480(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + MOVQ 192(R8), R10 + VMOVDQU (R10)(R9*1), Y8 + VMOVDQU 512(CX), Y11 + VMOVDQU 544(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + MOVQ 216(R8), R10 + VMOVDQU (R10)(R9*1), Y9 + VMOVDQU 576(CX), Y11 + VMOVDQU 608(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 1 to 10 outputs + VMOVDQU (SI), Y13 + ADDQ $0x20, SI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 640(CX), Y11 + VMOVDQU 672(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 704(CX), Y11 + VMOVDQU 736(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 768(CX), Y11 + VMOVDQU 800(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 832(CX), Y11 + VMOVDQU 864(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 896(CX), Y11 + VMOVDQU 928(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 960(CX), Y11 + VMOVDQU 992(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1024(CX), Y11 + VMOVDQU 1056(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1088(CX), Y11 + VMOVDQU 1120(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1152(CX), Y11 + VMOVDQU 1184(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1216(CX), Y11 + VMOVDQU 1248(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 2 to 10 outputs + VMOVDQU (DI), Y13 + ADDQ $0x20, DI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1280(CX), Y11 + VMOVDQU 1312(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1344(CX), Y11 + VMOVDQU 1376(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 1408(CX), Y11 + VMOVDQU 1440(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 1472(CX), Y11 + VMOVDQU 1504(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 1536(CX), Y11 + VMOVDQU 1568(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 1600(CX), Y11 + VMOVDQU 1632(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1664(CX), Y11 + VMOVDQU 1696(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1728(CX), Y11 + VMOVDQU 1760(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1792(CX), Y11 + VMOVDQU 1824(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1856(CX), Y11 + VMOVDQU 1888(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 3 to 10 outputs + VMOVDQU (DX), Y13 + ADDQ $0x20, DX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1920(CX), Y11 + VMOVDQU 1952(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1984(CX), Y11 + VMOVDQU 2016(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2048(CX), Y11 + VMOVDQU 2080(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2112(CX), Y11 + VMOVDQU 2144(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2176(CX), Y11 + VMOVDQU 2208(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2240(CX), Y11 + VMOVDQU 2272(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2304(CX), Y11 + VMOVDQU 2336(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 2368(CX), Y11 + VMOVDQU 2400(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 2432(CX), Y11 + VMOVDQU 2464(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 2496(CX), Y11 + VMOVDQU 2528(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Store 10 outputs + MOVQ (R8), R10 + VMOVDQU Y0, (R10)(R9*1) + MOVQ 24(R8), R10 + VMOVDQU Y1, (R10)(R9*1) + MOVQ 48(R8), R10 + VMOVDQU Y2, (R10)(R9*1) + MOVQ 72(R8), R10 + VMOVDQU Y3, (R10)(R9*1) + MOVQ 96(R8), R10 + VMOVDQU Y4, (R10)(R9*1) + MOVQ 120(R8), R10 + VMOVDQU Y5, (R10)(R9*1) + MOVQ 144(R8), R10 + VMOVDQU Y6, (R10)(R9*1) + MOVQ 168(R8), R10 + VMOVDQU Y7, (R10)(R9*1) + MOVQ 192(R8), R10 + VMOVDQU Y8, (R10)(R9*1) + MOVQ 216(R8), R10 + VMOVDQU Y9, (R10)(R9*1) + + // Prepare for next loop + ADDQ $0x20, R9 + DECQ AX + JNZ mulAvxTwo_4x10Xor_loop + VZEROUPPER + +mulAvxTwo_4x10Xor_end: + RET + +// func mulAvxTwo_5x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x1(SB), NOSPLIT, $0-88 + // Loading all tables to registers + // Destination kept in GP registers + // Full registers estimated 14 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_5x1_end + VMOVDQU (CX), Y0 + VMOVDQU 32(CX), Y1 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y9 + MOVQ in_base+24(FP), CX + MOVQ (CX), DX + MOVQ 24(CX), BX + MOVQ 48(CX), SI + MOVQ 72(CX), DI + MOVQ 96(CX), CX + MOVQ out_base+48(FP), R8 + MOVQ (R8), R8 + MOVQ start+72(FP), R9 + + // Add start offset to output + ADDQ R9, R8 + + // Add start offset to input + ADDQ R9, DX + ADDQ R9, BX + ADDQ R9, SI + ADDQ R9, DI + ADDQ R9, CX + MOVQ $0x0000000f, R9 + MOVQ R9, X11 + VPBROADCASTB X11, Y11 + +mulAvxTwo_5x1_loop: + // Load and process 32 bytes from input 0 to 1 outputs + VMOVDQU (DX), Y12 + ADDQ $0x20, DX + VPSRLQ $0x04, Y12, Y13 + VPAND Y11, Y12, Y12 + VPAND Y11, Y13, Y13 + VPSHUFB Y12, Y0, Y12 + VPSHUFB Y13, Y1, Y13 + VPXOR Y12, Y13, Y10 + + // Load and process 32 bytes from input 1 to 1 outputs + VMOVDQU (BX), Y12 + ADDQ $0x20, BX + VPSRLQ $0x04, Y12, Y13 + VPAND Y11, Y12, Y12 + VPAND Y11, Y13, Y13 + VPSHUFB Y12, Y2, Y12 + VPSHUFB Y13, Y3, Y13 + VPXOR Y12, Y13, Y12 + VPXOR Y12, Y10, Y10 + + // Load and process 32 bytes from input 2 to 1 outputs + VMOVDQU (SI), Y12 + ADDQ $0x20, SI + VPSRLQ $0x04, Y12, Y13 + VPAND Y11, Y12, Y12 + VPAND Y11, Y13, Y13 + VPSHUFB Y12, Y4, Y12 + VPSHUFB Y13, Y5, Y13 + VPXOR Y12, Y13, Y12 + VPXOR Y12, Y10, Y10 + + // Load and process 32 bytes from input 3 to 1 outputs + VMOVDQU (DI), Y12 + ADDQ $0x20, DI + VPSRLQ $0x04, Y12, Y13 + VPAND Y11, Y12, Y12 + VPAND Y11, Y13, Y13 + VPSHUFB Y12, Y6, Y12 + VPSHUFB Y13, Y7, Y13 + VPXOR Y12, Y13, Y12 + VPXOR Y12, Y10, Y10 + + // Load and process 32 bytes from input 4 to 1 outputs + VMOVDQU (CX), Y12 + ADDQ $0x20, CX + VPSRLQ $0x04, Y12, Y13 + VPAND Y11, Y12, Y12 + VPAND Y11, Y13, Y13 + VPSHUFB Y12, Y8, Y12 + VPSHUFB Y13, Y9, Y13 + VPXOR Y12, Y13, Y12 + VPXOR Y12, Y10, Y10 + + // Store 1 outputs + VMOVDQU Y10, (R8) + ADDQ $0x20, R8 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_5x1_loop + VZEROUPPER + +mulAvxTwo_5x1_end: + RET + +// func mulAvxTwo_5x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x1_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 26 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_5x1_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), DX + MOVQ out_base+48(FP), R9 + MOVQ out_base+48(FP), R9 + MOVQ (R9), R9 + MOVQ start+72(FP), R10 + + // Add start offset to output + ADDQ R10, R9 + + // Add start offset to input + ADDQ R10, BX + ADDQ R10, SI + ADDQ R10, DI + ADDQ R10, R8 + ADDQ R10, DX + MOVQ $0x0000000f, R10 + MOVQ R10, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_5x1_64_loop: + // Load and process 64 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y6 + VMOVDQU 32(BX), Y5 + ADDQ $0x40, BX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y0 + VPXOR Y5, Y6, Y1 + + // Load and process 64 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y6 + VMOVDQU 32(SI), Y5 + ADDQ $0x40, SI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 2 to 1 outputs + VMOVDQU (DI), Y6 + VMOVDQU 32(DI), Y5 + ADDQ $0x40, DI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 3 to 1 outputs + VMOVDQU (R8), Y6 + VMOVDQU 32(R8), Y5 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 4 to 1 outputs + VMOVDQU (DX), Y6 + VMOVDQU 32(DX), Y5 + ADDQ $0x40, DX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Store 1 outputs + VMOVDQU Y0, (R9) + VMOVDQU Y1, 32(R9) + ADDQ $0x40, R9 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_5x1_64_loop + VZEROUPPER + +mulAvxTwo_5x1_64_end: + RET + +// func mulAvxTwo_5x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x1Xor(SB), NOSPLIT, $0-88 + // Loading all tables to registers + // Destination kept in GP registers + // Full registers estimated 14 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_5x1Xor_end + VMOVDQU (CX), Y0 + VMOVDQU 32(CX), Y1 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y9 + MOVQ in_base+24(FP), CX + MOVQ (CX), DX + MOVQ 24(CX), BX + MOVQ 48(CX), SI + MOVQ 72(CX), DI + MOVQ 96(CX), CX + MOVQ out_base+48(FP), R8 + MOVQ (R8), R8 + MOVQ start+72(FP), R9 + + // Add start offset to output + ADDQ R9, R8 + + // Add start offset to input + ADDQ R9, DX + ADDQ R9, BX + ADDQ R9, SI + ADDQ R9, DI + ADDQ R9, CX + MOVQ $0x0000000f, R9 + MOVQ R9, X11 + VPBROADCASTB X11, Y11 + +mulAvxTwo_5x1Xor_loop: + // Load and process 32 bytes from input 0 to 1 outputs + VMOVDQU (DX), Y12 + ADDQ $0x20, DX + VPSRLQ $0x04, Y12, Y13 + VPAND Y11, Y12, Y12 + VPAND Y11, Y13, Y13 + VMOVDQU (R8), Y10 + VPSHUFB Y12, Y0, Y12 + VPSHUFB Y13, Y1, Y13 + VPXOR Y12, Y13, Y12 + VPXOR Y12, Y10, Y10 + + // Load and process 32 bytes from input 1 to 1 outputs + VMOVDQU (BX), Y12 + ADDQ $0x20, BX + VPSRLQ $0x04, Y12, Y13 + VPAND Y11, Y12, Y12 + VPAND Y11, Y13, Y13 + VPSHUFB Y12, Y2, Y12 + VPSHUFB Y13, Y3, Y13 + VPXOR Y12, Y13, Y12 + VPXOR Y12, Y10, Y10 + + // Load and process 32 bytes from input 2 to 1 outputs + VMOVDQU (SI), Y12 + ADDQ $0x20, SI + VPSRLQ $0x04, Y12, Y13 + VPAND Y11, Y12, Y12 + VPAND Y11, Y13, Y13 + VPSHUFB Y12, Y4, Y12 + VPSHUFB Y13, Y5, Y13 + VPXOR Y12, Y13, Y12 + VPXOR Y12, Y10, Y10 + + // Load and process 32 bytes from input 3 to 1 outputs + VMOVDQU (DI), Y12 + ADDQ $0x20, DI + VPSRLQ $0x04, Y12, Y13 + VPAND Y11, Y12, Y12 + VPAND Y11, Y13, Y13 + VPSHUFB Y12, Y6, Y12 + VPSHUFB Y13, Y7, Y13 + VPXOR Y12, Y13, Y12 + VPXOR Y12, Y10, Y10 + + // Load and process 32 bytes from input 4 to 1 outputs + VMOVDQU (CX), Y12 + ADDQ $0x20, CX + VPSRLQ $0x04, Y12, Y13 + VPAND Y11, Y12, Y12 + VPAND Y11, Y13, Y13 + VPSHUFB Y12, Y8, Y12 + VPSHUFB Y13, Y9, Y13 + VPXOR Y12, Y13, Y12 + VPXOR Y12, Y10, Y10 + + // Store 1 outputs + VMOVDQU Y10, (R8) + ADDQ $0x20, R8 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_5x1Xor_loop + VZEROUPPER + +mulAvxTwo_5x1Xor_end: + RET + +// func mulAvxTwo_5x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x1_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 26 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_5x1_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), DX + MOVQ out_base+48(FP), R9 + MOVQ out_base+48(FP), R9 + MOVQ (R9), R9 + MOVQ start+72(FP), R10 + + // Add start offset to output + ADDQ R10, R9 + + // Add start offset to input + ADDQ R10, BX + ADDQ R10, SI + ADDQ R10, DI + ADDQ R10, R8 + ADDQ R10, DX + MOVQ $0x0000000f, R10 + MOVQ R10, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_5x1_64Xor_loop: + // Load 1 outputs + VMOVDQU (R9), Y0 + VMOVDQU 32(R9), Y1 + + // Load and process 64 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y6 + VMOVDQU 32(BX), Y5 + ADDQ $0x40, BX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y6 + VMOVDQU 32(SI), Y5 + ADDQ $0x40, SI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 2 to 1 outputs + VMOVDQU (DI), Y6 + VMOVDQU 32(DI), Y5 + ADDQ $0x40, DI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 3 to 1 outputs + VMOVDQU (R8), Y6 + VMOVDQU 32(R8), Y5 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 4 to 1 outputs + VMOVDQU (DX), Y6 + VMOVDQU 32(DX), Y5 + ADDQ $0x40, DX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Store 1 outputs + VMOVDQU Y0, (R9) + VMOVDQU Y1, 32(R9) + ADDQ $0x40, R9 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_5x1_64Xor_loop + VZEROUPPER + +mulAvxTwo_5x1_64Xor_end: + RET + +// func mulAvxTwo_5x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x2(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 27 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_5x2_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), DX + MOVQ out_base+48(FP), R9 + MOVQ (R9), R10 + MOVQ 24(R9), R9 + MOVQ start+72(FP), R11 + + // Add start offset to output + ADDQ R11, R10 + ADDQ R11, R9 + + // Add start offset to input + ADDQ R11, BX + ADDQ R11, SI + ADDQ R11, DI + ADDQ R11, R8 + ADDQ R11, DX + MOVQ $0x0000000f, R11 + MOVQ R11, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_5x2_loop: + // Load and process 32 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y5 + ADDQ $0x20, BX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y0 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y1 + + // Load and process 32 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y5 + ADDQ $0x20, SI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y5 + ADDQ $0x20, DI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y5 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 384(CX), Y3 + VMOVDQU 416(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 448(CX), Y3 + VMOVDQU 480(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 4 to 2 outputs + VMOVDQU (DX), Y5 + ADDQ $0x20, DX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 512(CX), Y3 + VMOVDQU 544(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 576(CX), Y3 + VMOVDQU 608(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Store 2 outputs + VMOVDQU Y0, (R10) + ADDQ $0x20, R10 + VMOVDQU Y1, (R9) + ADDQ $0x20, R9 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_5x2_loop + VZEROUPPER + +mulAvxTwo_5x2_end: + RET + +// func mulAvxTwo_5x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x2_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 49 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_5x2_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), DX + MOVQ out_base+48(FP), R9 + MOVQ out_base+48(FP), R9 + MOVQ (R9), R10 + MOVQ 24(R9), R9 + MOVQ start+72(FP), R11 + + // Add start offset to output + ADDQ R11, R10 + ADDQ R11, R9 + + // Add start offset to input + ADDQ R11, BX + ADDQ R11, SI + ADDQ R11, DI + ADDQ R11, R8 + ADDQ R11, DX + MOVQ $0x0000000f, R11 + MOVQ R11, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_5x2_64_loop: + // Load and process 64 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y9 + VMOVDQU 32(BX), Y11 + ADDQ $0x40, BX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y0 + VPXOR Y7, Y8, Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y2 + VPXOR Y7, Y8, Y3 + + // Load and process 64 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y9 + VMOVDQU 32(SI), Y11 + ADDQ $0x40, SI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y9 + VMOVDQU 32(DI), Y11 + ADDQ $0x40, DI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y9 + VMOVDQU 32(R8), Y11 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 4 to 2 outputs + VMOVDQU (DX), Y9 + VMOVDQU 32(DX), Y11 + ADDQ $0x40, DX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Store 2 outputs + VMOVDQU Y0, (R10) + VMOVDQU Y1, 32(R10) + ADDQ $0x40, R10 + VMOVDQU Y2, (R9) + VMOVDQU Y3, 32(R9) + ADDQ $0x40, R9 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_5x2_64_loop + VZEROUPPER + +mulAvxTwo_5x2_64_end: + RET + +// func mulAvxTwo_5x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x2Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 27 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_5x2Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), DX + MOVQ out_base+48(FP), R9 + MOVQ (R9), R10 + MOVQ 24(R9), R9 + MOVQ start+72(FP), R11 + + // Add start offset to output + ADDQ R11, R10 + ADDQ R11, R9 + + // Add start offset to input + ADDQ R11, BX + ADDQ R11, SI + ADDQ R11, DI + ADDQ R11, R8 + ADDQ R11, DX + MOVQ $0x0000000f, R11 + MOVQ R11, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_5x2Xor_loop: + // Load and process 32 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y5 + ADDQ $0x20, BX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU (R10), Y0 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU (R9), Y1 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y5 + ADDQ $0x20, SI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y5 + ADDQ $0x20, DI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y5 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 384(CX), Y3 + VMOVDQU 416(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 448(CX), Y3 + VMOVDQU 480(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 4 to 2 outputs + VMOVDQU (DX), Y5 + ADDQ $0x20, DX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 512(CX), Y3 + VMOVDQU 544(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 576(CX), Y3 + VMOVDQU 608(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Store 2 outputs + VMOVDQU Y0, (R10) + ADDQ $0x20, R10 + VMOVDQU Y1, (R9) + ADDQ $0x20, R9 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_5x2Xor_loop + VZEROUPPER + +mulAvxTwo_5x2Xor_end: + RET + +// func mulAvxTwo_5x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x2_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 49 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_5x2_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), DX + MOVQ out_base+48(FP), R9 + MOVQ out_base+48(FP), R9 + MOVQ (R9), R10 + MOVQ 24(R9), R9 + MOVQ start+72(FP), R11 + + // Add start offset to output + ADDQ R11, R10 + ADDQ R11, R9 + + // Add start offset to input + ADDQ R11, BX + ADDQ R11, SI + ADDQ R11, DI + ADDQ R11, R8 + ADDQ R11, DX + MOVQ $0x0000000f, R11 + MOVQ R11, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_5x2_64Xor_loop: + // Load 2 outputs + VMOVDQU (R10), Y0 + VMOVDQU 32(R10), Y1 + VMOVDQU (R9), Y2 + VMOVDQU 32(R9), Y3 + + // Load and process 64 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y9 + VMOVDQU 32(BX), Y11 + ADDQ $0x40, BX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y9 + VMOVDQU 32(SI), Y11 + ADDQ $0x40, SI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y9 + VMOVDQU 32(DI), Y11 + ADDQ $0x40, DI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y9 + VMOVDQU 32(R8), Y11 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 4 to 2 outputs + VMOVDQU (DX), Y9 + VMOVDQU 32(DX), Y11 + ADDQ $0x40, DX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Store 2 outputs + VMOVDQU Y0, (R10) + VMOVDQU Y1, 32(R10) + ADDQ $0x40, R10 + VMOVDQU Y2, (R9) + VMOVDQU Y3, 32(R9) + ADDQ $0x40, R9 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_5x2_64Xor_loop + VZEROUPPER + +mulAvxTwo_5x2_64Xor_end: + RET + +// func mulAvxTwo_5x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x3(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 38 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_5x3_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), DX + MOVQ out_base+48(FP), R9 + MOVQ (R9), R10 + MOVQ 24(R9), R11 + MOVQ 48(R9), R9 + MOVQ start+72(FP), R12 + + // Add start offset to output + ADDQ R12, R10 + ADDQ R12, R11 + ADDQ R12, R9 + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X3 + VPBROADCASTB X3, Y3 + +mulAvxTwo_5x3_loop: + // Load and process 32 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y6 + ADDQ $0x20, BX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU (CX), Y4 + VMOVDQU 32(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y0 + VMOVDQU 64(CX), Y4 + VMOVDQU 96(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y1 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y2 + + // Load and process 32 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y6 + ADDQ $0x20, SI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 192(CX), Y4 + VMOVDQU 224(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 256(CX), Y4 + VMOVDQU 288(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 320(CX), Y4 + VMOVDQU 352(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y6 + ADDQ $0x20, DI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 384(CX), Y4 + VMOVDQU 416(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 448(CX), Y4 + VMOVDQU 480(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 512(CX), Y4 + VMOVDQU 544(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 3 to 3 outputs + VMOVDQU (R8), Y6 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 576(CX), Y4 + VMOVDQU 608(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 640(CX), Y4 + VMOVDQU 672(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 704(CX), Y4 + VMOVDQU 736(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 4 to 3 outputs + VMOVDQU (DX), Y6 + ADDQ $0x20, DX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 768(CX), Y4 + VMOVDQU 800(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 832(CX), Y4 + VMOVDQU 864(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 896(CX), Y4 + VMOVDQU 928(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Store 3 outputs + VMOVDQU Y0, (R10) + ADDQ $0x20, R10 + VMOVDQU Y1, (R11) + ADDQ $0x20, R11 + VMOVDQU Y2, (R9) + ADDQ $0x20, R9 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_5x3_loop + VZEROUPPER + +mulAvxTwo_5x3_end: + RET + +// func mulAvxTwo_5x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x3_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 70 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_5x3_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), DX + MOVQ out_base+48(FP), R9 + MOVQ out_base+48(FP), R9 + MOVQ (R9), R10 + MOVQ 24(R9), R11 + MOVQ 48(R9), R9 + MOVQ start+72(FP), R12 + + // Add start offset to output + ADDQ R12, R10 + ADDQ R12, R11 + ADDQ R12, R9 + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_5x3_64_loop: + // Load and process 64 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y11 + VMOVDQU 32(BX), Y13 + ADDQ $0x40, BX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y0 + VPXOR Y9, Y10, Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y2 + VPXOR Y9, Y10, Y3 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y4 + VPXOR Y9, Y10, Y5 + + // Load and process 64 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y11 + VMOVDQU 32(SI), Y13 + ADDQ $0x40, SI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y11 + VMOVDQU 32(DI), Y13 + ADDQ $0x40, DI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 3 to 3 outputs + VMOVDQU (R8), Y11 + VMOVDQU 32(R8), Y13 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 4 to 3 outputs + VMOVDQU (DX), Y11 + VMOVDQU 32(DX), Y13 + ADDQ $0x40, DX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Store 3 outputs + VMOVDQU Y0, (R10) + VMOVDQU Y1, 32(R10) + ADDQ $0x40, R10 + VMOVDQU Y2, (R11) + VMOVDQU Y3, 32(R11) + ADDQ $0x40, R11 + VMOVDQU Y4, (R9) + VMOVDQU Y5, 32(R9) + ADDQ $0x40, R9 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_5x3_64_loop + VZEROUPPER + +mulAvxTwo_5x3_64_end: + RET + +// func mulAvxTwo_5x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x3Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 38 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_5x3Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), DX + MOVQ out_base+48(FP), R9 + MOVQ (R9), R10 + MOVQ 24(R9), R11 + MOVQ 48(R9), R9 + MOVQ start+72(FP), R12 + + // Add start offset to output + ADDQ R12, R10 + ADDQ R12, R11 + ADDQ R12, R9 + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X3 + VPBROADCASTB X3, Y3 + +mulAvxTwo_5x3Xor_loop: + // Load and process 32 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y6 + ADDQ $0x20, BX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU (R10), Y0 + VMOVDQU (CX), Y4 + VMOVDQU 32(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU (R11), Y1 + VMOVDQU 64(CX), Y4 + VMOVDQU 96(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU (R9), Y2 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y6 + ADDQ $0x20, SI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 192(CX), Y4 + VMOVDQU 224(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 256(CX), Y4 + VMOVDQU 288(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 320(CX), Y4 + VMOVDQU 352(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y6 + ADDQ $0x20, DI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 384(CX), Y4 + VMOVDQU 416(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 448(CX), Y4 + VMOVDQU 480(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 512(CX), Y4 + VMOVDQU 544(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 3 to 3 outputs + VMOVDQU (R8), Y6 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 576(CX), Y4 + VMOVDQU 608(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 640(CX), Y4 + VMOVDQU 672(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 704(CX), Y4 + VMOVDQU 736(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 4 to 3 outputs + VMOVDQU (DX), Y6 + ADDQ $0x20, DX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 768(CX), Y4 + VMOVDQU 800(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 832(CX), Y4 + VMOVDQU 864(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 896(CX), Y4 + VMOVDQU 928(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Store 3 outputs + VMOVDQU Y0, (R10) + ADDQ $0x20, R10 + VMOVDQU Y1, (R11) + ADDQ $0x20, R11 + VMOVDQU Y2, (R9) + ADDQ $0x20, R9 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_5x3Xor_loop + VZEROUPPER + +mulAvxTwo_5x3Xor_end: + RET + +// func mulAvxTwo_5x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x3_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 70 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_5x3_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), DX + MOVQ out_base+48(FP), R9 + MOVQ out_base+48(FP), R9 + MOVQ (R9), R10 + MOVQ 24(R9), R11 + MOVQ 48(R9), R9 + MOVQ start+72(FP), R12 + + // Add start offset to output + ADDQ R12, R10 + ADDQ R12, R11 + ADDQ R12, R9 + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_5x3_64Xor_loop: + // Load 3 outputs + VMOVDQU (R10), Y0 + VMOVDQU 32(R10), Y1 + VMOVDQU (R11), Y2 + VMOVDQU 32(R11), Y3 + VMOVDQU (R9), Y4 + VMOVDQU 32(R9), Y5 + + // Load and process 64 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y11 + VMOVDQU 32(BX), Y13 + ADDQ $0x40, BX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y11 + VMOVDQU 32(SI), Y13 + ADDQ $0x40, SI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y11 + VMOVDQU 32(DI), Y13 + ADDQ $0x40, DI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 3 to 3 outputs + VMOVDQU (R8), Y11 + VMOVDQU 32(R8), Y13 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 4 to 3 outputs + VMOVDQU (DX), Y11 + VMOVDQU 32(DX), Y13 + ADDQ $0x40, DX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Store 3 outputs + VMOVDQU Y0, (R10) + VMOVDQU Y1, 32(R10) + ADDQ $0x40, R10 + VMOVDQU Y2, (R11) + VMOVDQU Y3, 32(R11) + ADDQ $0x40, R11 + VMOVDQU Y4, (R9) + VMOVDQU Y5, 32(R9) + ADDQ $0x40, R9 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_5x3_64Xor_loop + VZEROUPPER + +mulAvxTwo_5x3_64Xor_end: + RET + +// func mulAvxTwo_5x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x4(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 49 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_5x4_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), DX + MOVQ out_base+48(FP), R9 + MOVQ (R9), R10 + MOVQ 24(R9), R11 + MOVQ 48(R9), R12 + MOVQ 72(R9), R9 + MOVQ start+72(FP), R13 + + // Add start offset to output + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, R12 + ADDQ R13, R9 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_5x4_loop: + // Load and process 32 bytes from input 0 to 4 outputs + VMOVDQU (BX), Y7 + ADDQ $0x20, BX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y0 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y1 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y2 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y3 + + // Load and process 32 bytes from input 1 to 4 outputs + VMOVDQU (SI), Y7 + ADDQ $0x20, SI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 2 to 4 outputs + VMOVDQU (DI), Y7 + ADDQ $0x20, DI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 3 to 4 outputs + VMOVDQU (R8), Y7 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 768(CX), Y5 + VMOVDQU 800(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 832(CX), Y5 + VMOVDQU 864(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 896(CX), Y5 + VMOVDQU 928(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 960(CX), Y5 + VMOVDQU 992(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 4 to 4 outputs + VMOVDQU (DX), Y7 + ADDQ $0x20, DX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1024(CX), Y5 + VMOVDQU 1056(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1088(CX), Y5 + VMOVDQU 1120(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1152(CX), Y5 + VMOVDQU 1184(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1216(CX), Y5 + VMOVDQU 1248(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Store 4 outputs + VMOVDQU Y0, (R10) + ADDQ $0x20, R10 + VMOVDQU Y1, (R11) + ADDQ $0x20, R11 + VMOVDQU Y2, (R12) + ADDQ $0x20, R12 + VMOVDQU Y3, (R9) + ADDQ $0x20, R9 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_5x4_loop + VZEROUPPER + +mulAvxTwo_5x4_end: + RET + +// func mulAvxTwo_5x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x4Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 49 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_5x4Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), DX + MOVQ out_base+48(FP), R9 + MOVQ (R9), R10 + MOVQ 24(R9), R11 + MOVQ 48(R9), R12 + MOVQ 72(R9), R9 + MOVQ start+72(FP), R13 + + // Add start offset to output + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, R12 + ADDQ R13, R9 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_5x4Xor_loop: + // Load and process 32 bytes from input 0 to 4 outputs + VMOVDQU (BX), Y7 + ADDQ $0x20, BX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU (R10), Y0 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU (R11), Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU (R12), Y2 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU (R9), Y3 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 1 to 4 outputs + VMOVDQU (SI), Y7 + ADDQ $0x20, SI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 2 to 4 outputs + VMOVDQU (DI), Y7 + ADDQ $0x20, DI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 3 to 4 outputs + VMOVDQU (R8), Y7 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 768(CX), Y5 + VMOVDQU 800(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 832(CX), Y5 + VMOVDQU 864(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 896(CX), Y5 + VMOVDQU 928(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 960(CX), Y5 + VMOVDQU 992(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 4 to 4 outputs + VMOVDQU (DX), Y7 + ADDQ $0x20, DX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1024(CX), Y5 + VMOVDQU 1056(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1088(CX), Y5 + VMOVDQU 1120(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1152(CX), Y5 + VMOVDQU 1184(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1216(CX), Y5 + VMOVDQU 1248(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Store 4 outputs + VMOVDQU Y0, (R10) + ADDQ $0x20, R10 + VMOVDQU Y1, (R11) + ADDQ $0x20, R11 + VMOVDQU Y2, (R12) + ADDQ $0x20, R12 + VMOVDQU Y3, (R9) + ADDQ $0x20, R9 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_5x4Xor_loop + VZEROUPPER + +mulAvxTwo_5x4Xor_end: + RET + +// func mulAvxTwo_5x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x5(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 60 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_5x5_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), DX + MOVQ out_base+48(FP), R9 + MOVQ (R9), R10 + MOVQ 24(R9), R11 + MOVQ 48(R9), R12 + MOVQ 72(R9), R13 + MOVQ 96(R9), R9 + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, R13 + ADDQ R14, R9 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X5 + VPBROADCASTB X5, Y5 + +mulAvxTwo_5x5_loop: + // Load and process 32 bytes from input 0 to 5 outputs + VMOVDQU (BX), Y8 + ADDQ $0x20, BX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU (CX), Y6 + VMOVDQU 32(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y0 + VMOVDQU 64(CX), Y6 + VMOVDQU 96(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y1 + VMOVDQU 128(CX), Y6 + VMOVDQU 160(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y2 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y3 + VMOVDQU 256(CX), Y6 + VMOVDQU 288(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y4 + + // Load and process 32 bytes from input 1 to 5 outputs + VMOVDQU (SI), Y8 + ADDQ $0x20, SI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 320(CX), Y6 + VMOVDQU 352(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 384(CX), Y6 + VMOVDQU 416(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 448(CX), Y6 + VMOVDQU 480(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 512(CX), Y6 + VMOVDQU 544(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 576(CX), Y6 + VMOVDQU 608(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 2 to 5 outputs + VMOVDQU (DI), Y8 + ADDQ $0x20, DI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 640(CX), Y6 + VMOVDQU 672(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 704(CX), Y6 + VMOVDQU 736(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 768(CX), Y6 + VMOVDQU 800(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 832(CX), Y6 + VMOVDQU 864(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 896(CX), Y6 + VMOVDQU 928(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 3 to 5 outputs + VMOVDQU (R8), Y8 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 960(CX), Y6 + VMOVDQU 992(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1024(CX), Y6 + VMOVDQU 1056(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1088(CX), Y6 + VMOVDQU 1120(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1152(CX), Y6 + VMOVDQU 1184(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1216(CX), Y6 + VMOVDQU 1248(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 4 to 5 outputs + VMOVDQU (DX), Y8 + ADDQ $0x20, DX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1280(CX), Y6 + VMOVDQU 1312(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1344(CX), Y6 + VMOVDQU 1376(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1408(CX), Y6 + VMOVDQU 1440(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1472(CX), Y6 + VMOVDQU 1504(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1536(CX), Y6 + VMOVDQU 1568(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Store 5 outputs + VMOVDQU Y0, (R10) + ADDQ $0x20, R10 + VMOVDQU Y1, (R11) + ADDQ $0x20, R11 + VMOVDQU Y2, (R12) + ADDQ $0x20, R12 + VMOVDQU Y3, (R13) + ADDQ $0x20, R13 + VMOVDQU Y4, (R9) + ADDQ $0x20, R9 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_5x5_loop + VZEROUPPER + +mulAvxTwo_5x5_end: + RET + +// func mulAvxTwo_5x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x5Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 60 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_5x5Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), DX + MOVQ out_base+48(FP), R9 + MOVQ (R9), R10 + MOVQ 24(R9), R11 + MOVQ 48(R9), R12 + MOVQ 72(R9), R13 + MOVQ 96(R9), R9 + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, R13 + ADDQ R14, R9 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X5 + VPBROADCASTB X5, Y5 + +mulAvxTwo_5x5Xor_loop: + // Load and process 32 bytes from input 0 to 5 outputs + VMOVDQU (BX), Y8 + ADDQ $0x20, BX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU (R10), Y0 + VMOVDQU (CX), Y6 + VMOVDQU 32(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU (R11), Y1 + VMOVDQU 64(CX), Y6 + VMOVDQU 96(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU (R12), Y2 + VMOVDQU 128(CX), Y6 + VMOVDQU 160(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU (R13), Y3 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU (R9), Y4 + VMOVDQU 256(CX), Y6 + VMOVDQU 288(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 1 to 5 outputs + VMOVDQU (SI), Y8 + ADDQ $0x20, SI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 320(CX), Y6 + VMOVDQU 352(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 384(CX), Y6 + VMOVDQU 416(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 448(CX), Y6 + VMOVDQU 480(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 512(CX), Y6 + VMOVDQU 544(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 576(CX), Y6 + VMOVDQU 608(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 2 to 5 outputs + VMOVDQU (DI), Y8 + ADDQ $0x20, DI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 640(CX), Y6 + VMOVDQU 672(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 704(CX), Y6 + VMOVDQU 736(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 768(CX), Y6 + VMOVDQU 800(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 832(CX), Y6 + VMOVDQU 864(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 896(CX), Y6 + VMOVDQU 928(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 3 to 5 outputs + VMOVDQU (R8), Y8 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 960(CX), Y6 + VMOVDQU 992(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1024(CX), Y6 + VMOVDQU 1056(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1088(CX), Y6 + VMOVDQU 1120(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1152(CX), Y6 + VMOVDQU 1184(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1216(CX), Y6 + VMOVDQU 1248(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 4 to 5 outputs + VMOVDQU (DX), Y8 + ADDQ $0x20, DX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1280(CX), Y6 + VMOVDQU 1312(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1344(CX), Y6 + VMOVDQU 1376(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1408(CX), Y6 + VMOVDQU 1440(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1472(CX), Y6 + VMOVDQU 1504(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1536(CX), Y6 + VMOVDQU 1568(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Store 5 outputs + VMOVDQU Y0, (R10) + ADDQ $0x20, R10 + VMOVDQU Y1, (R11) + ADDQ $0x20, R11 + VMOVDQU Y2, (R12) + ADDQ $0x20, R12 + VMOVDQU Y3, (R13) + ADDQ $0x20, R13 + VMOVDQU Y4, (R9) + ADDQ $0x20, R9 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_5x5Xor_loop + VZEROUPPER + +mulAvxTwo_5x5Xor_end: + RET + +// func mulAvxTwo_5x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x6(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 71 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_5x6_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), DX + MOVQ out_base+48(FP), R9 + MOVQ (R9), R10 + MOVQ 24(R9), R11 + MOVQ 48(R9), R12 + MOVQ 72(R9), R13 + MOVQ 96(R9), R14 + MOVQ 120(R9), R9 + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, R14 + ADDQ R15, R9 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_5x6_loop: + // Load and process 32 bytes from input 0 to 6 outputs + VMOVDQU (BX), Y9 + ADDQ $0x20, BX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y0 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y1 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y2 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y3 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y4 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y5 + + // Load and process 32 bytes from input 1 to 6 outputs + VMOVDQU (SI), Y9 + ADDQ $0x20, SI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 2 to 6 outputs + VMOVDQU (DI), Y9 + ADDQ $0x20, DI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 3 to 6 outputs + VMOVDQU (R8), Y9 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1152(CX), Y7 + VMOVDQU 1184(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1216(CX), Y7 + VMOVDQU 1248(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1280(CX), Y7 + VMOVDQU 1312(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1344(CX), Y7 + VMOVDQU 1376(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1408(CX), Y7 + VMOVDQU 1440(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1472(CX), Y7 + VMOVDQU 1504(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 4 to 6 outputs + VMOVDQU (DX), Y9 + ADDQ $0x20, DX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1536(CX), Y7 + VMOVDQU 1568(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1600(CX), Y7 + VMOVDQU 1632(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1664(CX), Y7 + VMOVDQU 1696(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1728(CX), Y7 + VMOVDQU 1760(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1792(CX), Y7 + VMOVDQU 1824(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1856(CX), Y7 + VMOVDQU 1888(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Store 6 outputs + VMOVDQU Y0, (R10) + ADDQ $0x20, R10 + VMOVDQU Y1, (R11) + ADDQ $0x20, R11 + VMOVDQU Y2, (R12) + ADDQ $0x20, R12 + VMOVDQU Y3, (R13) + ADDQ $0x20, R13 + VMOVDQU Y4, (R14) + ADDQ $0x20, R14 + VMOVDQU Y5, (R9) + ADDQ $0x20, R9 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_5x6_loop + VZEROUPPER + +mulAvxTwo_5x6_end: + RET + +// func mulAvxTwo_5x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x6Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 71 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_5x6Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), DX + MOVQ out_base+48(FP), R9 + MOVQ (R9), R10 + MOVQ 24(R9), R11 + MOVQ 48(R9), R12 + MOVQ 72(R9), R13 + MOVQ 96(R9), R14 + MOVQ 120(R9), R9 + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, R14 + ADDQ R15, R9 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_5x6Xor_loop: + // Load and process 32 bytes from input 0 to 6 outputs + VMOVDQU (BX), Y9 + ADDQ $0x20, BX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU (R10), Y0 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU (R11), Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU (R12), Y2 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU (R13), Y3 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU (R14), Y4 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU (R9), Y5 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 1 to 6 outputs + VMOVDQU (SI), Y9 + ADDQ $0x20, SI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 2 to 6 outputs + VMOVDQU (DI), Y9 + ADDQ $0x20, DI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 3 to 6 outputs + VMOVDQU (R8), Y9 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1152(CX), Y7 + VMOVDQU 1184(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1216(CX), Y7 + VMOVDQU 1248(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1280(CX), Y7 + VMOVDQU 1312(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1344(CX), Y7 + VMOVDQU 1376(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1408(CX), Y7 + VMOVDQU 1440(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1472(CX), Y7 + VMOVDQU 1504(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 4 to 6 outputs + VMOVDQU (DX), Y9 + ADDQ $0x20, DX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1536(CX), Y7 + VMOVDQU 1568(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1600(CX), Y7 + VMOVDQU 1632(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1664(CX), Y7 + VMOVDQU 1696(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1728(CX), Y7 + VMOVDQU 1760(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1792(CX), Y7 + VMOVDQU 1824(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1856(CX), Y7 + VMOVDQU 1888(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Store 6 outputs + VMOVDQU Y0, (R10) + ADDQ $0x20, R10 + VMOVDQU Y1, (R11) + ADDQ $0x20, R11 + VMOVDQU Y2, (R12) + ADDQ $0x20, R12 + VMOVDQU Y3, (R13) + ADDQ $0x20, R13 + VMOVDQU Y4, (R14) + ADDQ $0x20, R14 + VMOVDQU Y5, (R9) + ADDQ $0x20, R9 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_5x6Xor_loop + VZEROUPPER + +mulAvxTwo_5x6Xor_end: + RET + +// func mulAvxTwo_5x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x7(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 82 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_5x7_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), DX + MOVQ out_base+48(FP), R9 + MOVQ (R9), R10 + MOVQ 24(R9), R11 + MOVQ 48(R9), R12 + MOVQ 72(R9), R13 + MOVQ 96(R9), R14 + MOVQ 120(R9), R15 + MOVQ 144(R9), R9 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R9 + + // Add start offset to input + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, DX + MOVQ $0x0000000f, BP + MOVQ BP, X7 + VPBROADCASTB X7, Y7 + +mulAvxTwo_5x7_loop: + // Load and process 32 bytes from input 0 to 7 outputs + VMOVDQU (BX), Y10 + ADDQ $0x20, BX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU (CX), Y8 + VMOVDQU 32(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y0 + VMOVDQU 64(CX), Y8 + VMOVDQU 96(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y1 + VMOVDQU 128(CX), Y8 + VMOVDQU 160(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y2 + VMOVDQU 192(CX), Y8 + VMOVDQU 224(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y3 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y4 + VMOVDQU 320(CX), Y8 + VMOVDQU 352(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y5 + VMOVDQU 384(CX), Y8 + VMOVDQU 416(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y6 + + // Load and process 32 bytes from input 1 to 7 outputs + VMOVDQU (SI), Y10 + ADDQ $0x20, SI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 448(CX), Y8 + VMOVDQU 480(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 512(CX), Y8 + VMOVDQU 544(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 576(CX), Y8 + VMOVDQU 608(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 640(CX), Y8 + VMOVDQU 672(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 704(CX), Y8 + VMOVDQU 736(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 768(CX), Y8 + VMOVDQU 800(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 832(CX), Y8 + VMOVDQU 864(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 2 to 7 outputs + VMOVDQU (DI), Y10 + ADDQ $0x20, DI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 896(CX), Y8 + VMOVDQU 928(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 960(CX), Y8 + VMOVDQU 992(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1024(CX), Y8 + VMOVDQU 1056(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1088(CX), Y8 + VMOVDQU 1120(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1152(CX), Y8 + VMOVDQU 1184(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1216(CX), Y8 + VMOVDQU 1248(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1280(CX), Y8 + VMOVDQU 1312(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 3 to 7 outputs + VMOVDQU (R8), Y10 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1344(CX), Y8 + VMOVDQU 1376(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1408(CX), Y8 + VMOVDQU 1440(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1472(CX), Y8 + VMOVDQU 1504(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1536(CX), Y8 + VMOVDQU 1568(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1600(CX), Y8 + VMOVDQU 1632(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1664(CX), Y8 + VMOVDQU 1696(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1728(CX), Y8 + VMOVDQU 1760(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 4 to 7 outputs + VMOVDQU (DX), Y10 + ADDQ $0x20, DX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1792(CX), Y8 + VMOVDQU 1824(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1856(CX), Y8 + VMOVDQU 1888(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1920(CX), Y8 + VMOVDQU 1952(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1984(CX), Y8 + VMOVDQU 2016(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2048(CX), Y8 + VMOVDQU 2080(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 2112(CX), Y8 + VMOVDQU 2144(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 2176(CX), Y8 + VMOVDQU 2208(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Store 7 outputs + VMOVDQU Y0, (R10) + ADDQ $0x20, R10 + VMOVDQU Y1, (R11) + ADDQ $0x20, R11 + VMOVDQU Y2, (R12) + ADDQ $0x20, R12 + VMOVDQU Y3, (R13) + ADDQ $0x20, R13 + VMOVDQU Y4, (R14) + ADDQ $0x20, R14 + VMOVDQU Y5, (R15) + ADDQ $0x20, R15 + VMOVDQU Y6, (R9) + ADDQ $0x20, R9 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_5x7_loop + VZEROUPPER + +mulAvxTwo_5x7_end: + RET + +// func mulAvxTwo_5x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x7Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 82 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_5x7Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), DX + MOVQ out_base+48(FP), R9 + MOVQ (R9), R10 + MOVQ 24(R9), R11 + MOVQ 48(R9), R12 + MOVQ 72(R9), R13 + MOVQ 96(R9), R14 + MOVQ 120(R9), R15 + MOVQ 144(R9), R9 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R9 + + // Add start offset to input + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, DX + MOVQ $0x0000000f, BP + MOVQ BP, X7 + VPBROADCASTB X7, Y7 + +mulAvxTwo_5x7Xor_loop: + // Load and process 32 bytes from input 0 to 7 outputs + VMOVDQU (BX), Y10 + ADDQ $0x20, BX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU (R10), Y0 + VMOVDQU (CX), Y8 + VMOVDQU 32(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU (R11), Y1 + VMOVDQU 64(CX), Y8 + VMOVDQU 96(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU (R12), Y2 + VMOVDQU 128(CX), Y8 + VMOVDQU 160(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU (R13), Y3 + VMOVDQU 192(CX), Y8 + VMOVDQU 224(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU (R14), Y4 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU (R15), Y5 + VMOVDQU 320(CX), Y8 + VMOVDQU 352(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU (R9), Y6 + VMOVDQU 384(CX), Y8 + VMOVDQU 416(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 1 to 7 outputs + VMOVDQU (SI), Y10 + ADDQ $0x20, SI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 448(CX), Y8 + VMOVDQU 480(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 512(CX), Y8 + VMOVDQU 544(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 576(CX), Y8 + VMOVDQU 608(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 640(CX), Y8 + VMOVDQU 672(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 704(CX), Y8 + VMOVDQU 736(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 768(CX), Y8 + VMOVDQU 800(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 832(CX), Y8 + VMOVDQU 864(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 2 to 7 outputs + VMOVDQU (DI), Y10 + ADDQ $0x20, DI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 896(CX), Y8 + VMOVDQU 928(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 960(CX), Y8 + VMOVDQU 992(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1024(CX), Y8 + VMOVDQU 1056(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1088(CX), Y8 + VMOVDQU 1120(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1152(CX), Y8 + VMOVDQU 1184(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1216(CX), Y8 + VMOVDQU 1248(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1280(CX), Y8 + VMOVDQU 1312(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 3 to 7 outputs + VMOVDQU (R8), Y10 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1344(CX), Y8 + VMOVDQU 1376(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1408(CX), Y8 + VMOVDQU 1440(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1472(CX), Y8 + VMOVDQU 1504(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1536(CX), Y8 + VMOVDQU 1568(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1600(CX), Y8 + VMOVDQU 1632(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1664(CX), Y8 + VMOVDQU 1696(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1728(CX), Y8 + VMOVDQU 1760(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 4 to 7 outputs + VMOVDQU (DX), Y10 + ADDQ $0x20, DX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1792(CX), Y8 + VMOVDQU 1824(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1856(CX), Y8 + VMOVDQU 1888(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1920(CX), Y8 + VMOVDQU 1952(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1984(CX), Y8 + VMOVDQU 2016(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2048(CX), Y8 + VMOVDQU 2080(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 2112(CX), Y8 + VMOVDQU 2144(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 2176(CX), Y8 + VMOVDQU 2208(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Store 7 outputs + VMOVDQU Y0, (R10) + ADDQ $0x20, R10 + VMOVDQU Y1, (R11) + ADDQ $0x20, R11 + VMOVDQU Y2, (R12) + ADDQ $0x20, R12 + VMOVDQU Y3, (R13) + ADDQ $0x20, R13 + VMOVDQU Y4, (R14) + ADDQ $0x20, R14 + VMOVDQU Y5, (R15) + ADDQ $0x20, R15 + VMOVDQU Y6, (R9) + ADDQ $0x20, R9 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_5x7Xor_loop + VZEROUPPER + +mulAvxTwo_5x7Xor_end: + RET + +// func mulAvxTwo_5x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x8(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 93 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_5x8_end + MOVQ in_base+24(FP), AX + MOVQ (AX), DX + MOVQ 24(AX), BX + MOVQ 48(AX), SI + MOVQ 72(AX), DI + MOVQ 96(AX), AX + MOVQ out_base+48(FP), R8 + MOVQ (R8), R9 + MOVQ 24(R8), R10 + MOVQ 48(R8), R11 + MOVQ 72(R8), R12 + MOVQ 96(R8), R13 + MOVQ 120(R8), R14 + MOVQ 144(R8), R15 + MOVQ 168(R8), R8 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R8 + + // Add start offset to input + ADDQ BP, DX + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, AX + MOVQ $0x0000000f, BP + MOVQ BP, X8 + VPBROADCASTB X8, Y8 + MOVQ n+80(FP), BP + SHRQ $0x05, BP + +mulAvxTwo_5x8_loop: + // Load and process 32 bytes from input 0 to 8 outputs + VMOVDQU (DX), Y11 + ADDQ $0x20, DX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU (CX), Y9 + VMOVDQU 32(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y0 + VMOVDQU 64(CX), Y9 + VMOVDQU 96(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y1 + VMOVDQU 128(CX), Y9 + VMOVDQU 160(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y2 + VMOVDQU 192(CX), Y9 + VMOVDQU 224(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y3 + VMOVDQU 256(CX), Y9 + VMOVDQU 288(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y4 + VMOVDQU 320(CX), Y9 + VMOVDQU 352(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y5 + VMOVDQU 384(CX), Y9 + VMOVDQU 416(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y6 + VMOVDQU 448(CX), Y9 + VMOVDQU 480(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y7 + + // Load and process 32 bytes from input 1 to 8 outputs + VMOVDQU (BX), Y11 + ADDQ $0x20, BX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 512(CX), Y9 + VMOVDQU 544(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 576(CX), Y9 + VMOVDQU 608(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y9 + VMOVDQU 672(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 704(CX), Y9 + VMOVDQU 736(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 768(CX), Y9 + VMOVDQU 800(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 832(CX), Y9 + VMOVDQU 864(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 896(CX), Y9 + VMOVDQU 928(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 960(CX), Y9 + VMOVDQU 992(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 2 to 8 outputs + VMOVDQU (SI), Y11 + ADDQ $0x20, SI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1024(CX), Y9 + VMOVDQU 1056(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1088(CX), Y9 + VMOVDQU 1120(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1152(CX), Y9 + VMOVDQU 1184(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1216(CX), Y9 + VMOVDQU 1248(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y9 + VMOVDQU 1312(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1344(CX), Y9 + VMOVDQU 1376(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1408(CX), Y9 + VMOVDQU 1440(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1472(CX), Y9 + VMOVDQU 1504(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 3 to 8 outputs + VMOVDQU (DI), Y11 + ADDQ $0x20, DI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1536(CX), Y9 + VMOVDQU 1568(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1600(CX), Y9 + VMOVDQU 1632(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1664(CX), Y9 + VMOVDQU 1696(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1728(CX), Y9 + VMOVDQU 1760(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1792(CX), Y9 + VMOVDQU 1824(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1856(CX), Y9 + VMOVDQU 1888(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1920(CX), Y9 + VMOVDQU 1952(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1984(CX), Y9 + VMOVDQU 2016(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 4 to 8 outputs + VMOVDQU (AX), Y11 + ADDQ $0x20, AX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 2048(CX), Y9 + VMOVDQU 2080(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 2112(CX), Y9 + VMOVDQU 2144(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 2176(CX), Y9 + VMOVDQU 2208(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 2240(CX), Y9 + VMOVDQU 2272(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 2304(CX), Y9 + VMOVDQU 2336(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 2368(CX), Y9 + VMOVDQU 2400(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 2432(CX), Y9 + VMOVDQU 2464(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 2496(CX), Y9 + VMOVDQU 2528(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Store 8 outputs + VMOVDQU Y0, (R9) + ADDQ $0x20, R9 + VMOVDQU Y1, (R10) + ADDQ $0x20, R10 + VMOVDQU Y2, (R11) + ADDQ $0x20, R11 + VMOVDQU Y3, (R12) + ADDQ $0x20, R12 + VMOVDQU Y4, (R13) + ADDQ $0x20, R13 + VMOVDQU Y5, (R14) + ADDQ $0x20, R14 + VMOVDQU Y6, (R15) + ADDQ $0x20, R15 + VMOVDQU Y7, (R8) + ADDQ $0x20, R8 + + // Prepare for next loop + DECQ BP + JNZ mulAvxTwo_5x8_loop + VZEROUPPER + +mulAvxTwo_5x8_end: + RET + +// func mulAvxTwo_5x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x8Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 93 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_5x8Xor_end + MOVQ in_base+24(FP), AX + MOVQ (AX), DX + MOVQ 24(AX), BX + MOVQ 48(AX), SI + MOVQ 72(AX), DI + MOVQ 96(AX), AX + MOVQ out_base+48(FP), R8 + MOVQ (R8), R9 + MOVQ 24(R8), R10 + MOVQ 48(R8), R11 + MOVQ 72(R8), R12 + MOVQ 96(R8), R13 + MOVQ 120(R8), R14 + MOVQ 144(R8), R15 + MOVQ 168(R8), R8 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R8 + + // Add start offset to input + ADDQ BP, DX + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, AX + MOVQ $0x0000000f, BP + MOVQ BP, X8 + VPBROADCASTB X8, Y8 + MOVQ n+80(FP), BP + SHRQ $0x05, BP + +mulAvxTwo_5x8Xor_loop: + // Load and process 32 bytes from input 0 to 8 outputs + VMOVDQU (DX), Y11 + ADDQ $0x20, DX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU (R9), Y0 + VMOVDQU (CX), Y9 + VMOVDQU 32(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU (R10), Y1 + VMOVDQU 64(CX), Y9 + VMOVDQU 96(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU (R11), Y2 + VMOVDQU 128(CX), Y9 + VMOVDQU 160(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU (R12), Y3 + VMOVDQU 192(CX), Y9 + VMOVDQU 224(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU (R13), Y4 + VMOVDQU 256(CX), Y9 + VMOVDQU 288(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU (R14), Y5 + VMOVDQU 320(CX), Y9 + VMOVDQU 352(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU (R15), Y6 + VMOVDQU 384(CX), Y9 + VMOVDQU 416(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU (R8), Y7 + VMOVDQU 448(CX), Y9 + VMOVDQU 480(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 1 to 8 outputs + VMOVDQU (BX), Y11 + ADDQ $0x20, BX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 512(CX), Y9 + VMOVDQU 544(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 576(CX), Y9 + VMOVDQU 608(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y9 + VMOVDQU 672(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 704(CX), Y9 + VMOVDQU 736(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 768(CX), Y9 + VMOVDQU 800(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 832(CX), Y9 + VMOVDQU 864(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 896(CX), Y9 + VMOVDQU 928(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 960(CX), Y9 + VMOVDQU 992(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 2 to 8 outputs + VMOVDQU (SI), Y11 + ADDQ $0x20, SI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1024(CX), Y9 + VMOVDQU 1056(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1088(CX), Y9 + VMOVDQU 1120(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1152(CX), Y9 + VMOVDQU 1184(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1216(CX), Y9 + VMOVDQU 1248(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y9 + VMOVDQU 1312(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1344(CX), Y9 + VMOVDQU 1376(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1408(CX), Y9 + VMOVDQU 1440(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1472(CX), Y9 + VMOVDQU 1504(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 3 to 8 outputs + VMOVDQU (DI), Y11 + ADDQ $0x20, DI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1536(CX), Y9 + VMOVDQU 1568(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1600(CX), Y9 + VMOVDQU 1632(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1664(CX), Y9 + VMOVDQU 1696(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1728(CX), Y9 + VMOVDQU 1760(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1792(CX), Y9 + VMOVDQU 1824(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1856(CX), Y9 + VMOVDQU 1888(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1920(CX), Y9 + VMOVDQU 1952(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1984(CX), Y9 + VMOVDQU 2016(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 4 to 8 outputs + VMOVDQU (AX), Y11 + ADDQ $0x20, AX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 2048(CX), Y9 + VMOVDQU 2080(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 2112(CX), Y9 + VMOVDQU 2144(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 2176(CX), Y9 + VMOVDQU 2208(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 2240(CX), Y9 + VMOVDQU 2272(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 2304(CX), Y9 + VMOVDQU 2336(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 2368(CX), Y9 + VMOVDQU 2400(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 2432(CX), Y9 + VMOVDQU 2464(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 2496(CX), Y9 + VMOVDQU 2528(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Store 8 outputs + VMOVDQU Y0, (R9) + ADDQ $0x20, R9 + VMOVDQU Y1, (R10) + ADDQ $0x20, R10 + VMOVDQU Y2, (R11) + ADDQ $0x20, R11 + VMOVDQU Y3, (R12) + ADDQ $0x20, R12 + VMOVDQU Y4, (R13) + ADDQ $0x20, R13 + VMOVDQU Y5, (R14) + ADDQ $0x20, R14 + VMOVDQU Y6, (R15) + ADDQ $0x20, R15 + VMOVDQU Y7, (R8) + ADDQ $0x20, R8 + + // Prepare for next loop + DECQ BP + JNZ mulAvxTwo_5x8Xor_loop + VZEROUPPER + +mulAvxTwo_5x8Xor_end: + RET + +// func mulAvxTwo_5x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x9(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 104 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_5x9_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), DX + MOVQ out_base+48(FP), R9 + MOVQ start+72(FP), R10 + + // Add start offset to input + ADDQ R10, BX + ADDQ R10, SI + ADDQ R10, DI + ADDQ R10, R8 + ADDQ R10, DX + MOVQ $0x0000000f, R11 + MOVQ R11, X9 + VPBROADCASTB X9, Y9 + +mulAvxTwo_5x9_loop: + // Load and process 32 bytes from input 0 to 9 outputs + VMOVDQU (BX), Y12 + ADDQ $0x20, BX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU (CX), Y10 + VMOVDQU 32(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y0 + VMOVDQU 64(CX), Y10 + VMOVDQU 96(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y1 + VMOVDQU 128(CX), Y10 + VMOVDQU 160(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y2 + VMOVDQU 192(CX), Y10 + VMOVDQU 224(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y3 + VMOVDQU 256(CX), Y10 + VMOVDQU 288(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y4 + VMOVDQU 320(CX), Y10 + VMOVDQU 352(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y5 + VMOVDQU 384(CX), Y10 + VMOVDQU 416(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y6 + VMOVDQU 448(CX), Y10 + VMOVDQU 480(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y7 + VMOVDQU 512(CX), Y10 + VMOVDQU 544(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y8 + + // Load and process 32 bytes from input 1 to 9 outputs + VMOVDQU (SI), Y12 + ADDQ $0x20, SI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 576(CX), Y10 + VMOVDQU 608(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 640(CX), Y10 + VMOVDQU 672(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 704(CX), Y10 + VMOVDQU 736(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 768(CX), Y10 + VMOVDQU 800(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 832(CX), Y10 + VMOVDQU 864(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 896(CX), Y10 + VMOVDQU 928(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 960(CX), Y10 + VMOVDQU 992(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1024(CX), Y10 + VMOVDQU 1056(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1088(CX), Y10 + VMOVDQU 1120(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 2 to 9 outputs + VMOVDQU (DI), Y12 + ADDQ $0x20, DI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1152(CX), Y10 + VMOVDQU 1184(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1216(CX), Y10 + VMOVDQU 1248(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1280(CX), Y10 + VMOVDQU 1312(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1344(CX), Y10 + VMOVDQU 1376(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1408(CX), Y10 + VMOVDQU 1440(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 1472(CX), Y10 + VMOVDQU 1504(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 1536(CX), Y10 + VMOVDQU 1568(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1600(CX), Y10 + VMOVDQU 1632(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1664(CX), Y10 + VMOVDQU 1696(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 3 to 9 outputs + VMOVDQU (R8), Y12 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1728(CX), Y10 + VMOVDQU 1760(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1792(CX), Y10 + VMOVDQU 1824(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1856(CX), Y10 + VMOVDQU 1888(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1920(CX), Y10 + VMOVDQU 1952(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1984(CX), Y10 + VMOVDQU 2016(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2048(CX), Y10 + VMOVDQU 2080(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2112(CX), Y10 + VMOVDQU 2144(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2176(CX), Y10 + VMOVDQU 2208(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2240(CX), Y10 + VMOVDQU 2272(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 4 to 9 outputs + VMOVDQU (DX), Y12 + ADDQ $0x20, DX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 2304(CX), Y10 + VMOVDQU 2336(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 2368(CX), Y10 + VMOVDQU 2400(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 2432(CX), Y10 + VMOVDQU 2464(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 2496(CX), Y10 + VMOVDQU 2528(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 2560(CX), Y10 + VMOVDQU 2592(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2624(CX), Y10 + VMOVDQU 2656(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2688(CX), Y10 + VMOVDQU 2720(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2752(CX), Y10 + VMOVDQU 2784(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2816(CX), Y10 + VMOVDQU 2848(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Store 9 outputs + MOVQ (R9), R11 + VMOVDQU Y0, (R11)(R10*1) + MOVQ 24(R9), R11 + VMOVDQU Y1, (R11)(R10*1) + MOVQ 48(R9), R11 + VMOVDQU Y2, (R11)(R10*1) + MOVQ 72(R9), R11 + VMOVDQU Y3, (R11)(R10*1) + MOVQ 96(R9), R11 + VMOVDQU Y4, (R11)(R10*1) + MOVQ 120(R9), R11 + VMOVDQU Y5, (R11)(R10*1) + MOVQ 144(R9), R11 + VMOVDQU Y6, (R11)(R10*1) + MOVQ 168(R9), R11 + VMOVDQU Y7, (R11)(R10*1) + MOVQ 192(R9), R11 + VMOVDQU Y8, (R11)(R10*1) + + // Prepare for next loop + ADDQ $0x20, R10 + DECQ AX + JNZ mulAvxTwo_5x9_loop + VZEROUPPER + +mulAvxTwo_5x9_end: + RET + +// func mulAvxTwo_5x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x9Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 104 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_5x9Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), DX + MOVQ out_base+48(FP), R9 + MOVQ start+72(FP), R10 + + // Add start offset to input + ADDQ R10, BX + ADDQ R10, SI + ADDQ R10, DI + ADDQ R10, R8 + ADDQ R10, DX + MOVQ $0x0000000f, R11 + MOVQ R11, X9 + VPBROADCASTB X9, Y9 + +mulAvxTwo_5x9Xor_loop: + // Load and process 32 bytes from input 0 to 9 outputs + VMOVDQU (BX), Y12 + ADDQ $0x20, BX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + MOVQ (R9), R11 + VMOVDQU (R11)(R10*1), Y0 + VMOVDQU (CX), Y10 + VMOVDQU 32(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + MOVQ 24(R9), R11 + VMOVDQU (R11)(R10*1), Y1 + VMOVDQU 64(CX), Y10 + VMOVDQU 96(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + MOVQ 48(R9), R11 + VMOVDQU (R11)(R10*1), Y2 + VMOVDQU 128(CX), Y10 + VMOVDQU 160(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + MOVQ 72(R9), R11 + VMOVDQU (R11)(R10*1), Y3 + VMOVDQU 192(CX), Y10 + VMOVDQU 224(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + MOVQ 96(R9), R11 + VMOVDQU (R11)(R10*1), Y4 + VMOVDQU 256(CX), Y10 + VMOVDQU 288(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + MOVQ 120(R9), R11 + VMOVDQU (R11)(R10*1), Y5 + VMOVDQU 320(CX), Y10 + VMOVDQU 352(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + MOVQ 144(R9), R11 + VMOVDQU (R11)(R10*1), Y6 + VMOVDQU 384(CX), Y10 + VMOVDQU 416(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + MOVQ 168(R9), R11 + VMOVDQU (R11)(R10*1), Y7 + VMOVDQU 448(CX), Y10 + VMOVDQU 480(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + MOVQ 192(R9), R11 + VMOVDQU (R11)(R10*1), Y8 + VMOVDQU 512(CX), Y10 + VMOVDQU 544(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 1 to 9 outputs + VMOVDQU (SI), Y12 + ADDQ $0x20, SI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 576(CX), Y10 + VMOVDQU 608(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 640(CX), Y10 + VMOVDQU 672(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 704(CX), Y10 + VMOVDQU 736(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 768(CX), Y10 + VMOVDQU 800(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 832(CX), Y10 + VMOVDQU 864(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 896(CX), Y10 + VMOVDQU 928(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 960(CX), Y10 + VMOVDQU 992(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1024(CX), Y10 + VMOVDQU 1056(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1088(CX), Y10 + VMOVDQU 1120(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 2 to 9 outputs + VMOVDQU (DI), Y12 + ADDQ $0x20, DI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1152(CX), Y10 + VMOVDQU 1184(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1216(CX), Y10 + VMOVDQU 1248(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1280(CX), Y10 + VMOVDQU 1312(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1344(CX), Y10 + VMOVDQU 1376(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1408(CX), Y10 + VMOVDQU 1440(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 1472(CX), Y10 + VMOVDQU 1504(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 1536(CX), Y10 + VMOVDQU 1568(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1600(CX), Y10 + VMOVDQU 1632(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1664(CX), Y10 + VMOVDQU 1696(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 3 to 9 outputs + VMOVDQU (R8), Y12 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1728(CX), Y10 + VMOVDQU 1760(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1792(CX), Y10 + VMOVDQU 1824(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1856(CX), Y10 + VMOVDQU 1888(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1920(CX), Y10 + VMOVDQU 1952(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1984(CX), Y10 + VMOVDQU 2016(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2048(CX), Y10 + VMOVDQU 2080(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2112(CX), Y10 + VMOVDQU 2144(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2176(CX), Y10 + VMOVDQU 2208(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2240(CX), Y10 + VMOVDQU 2272(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 4 to 9 outputs + VMOVDQU (DX), Y12 + ADDQ $0x20, DX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 2304(CX), Y10 + VMOVDQU 2336(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 2368(CX), Y10 + VMOVDQU 2400(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 2432(CX), Y10 + VMOVDQU 2464(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 2496(CX), Y10 + VMOVDQU 2528(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 2560(CX), Y10 + VMOVDQU 2592(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2624(CX), Y10 + VMOVDQU 2656(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2688(CX), Y10 + VMOVDQU 2720(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2752(CX), Y10 + VMOVDQU 2784(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2816(CX), Y10 + VMOVDQU 2848(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Store 9 outputs + MOVQ (R9), R11 + VMOVDQU Y0, (R11)(R10*1) + MOVQ 24(R9), R11 + VMOVDQU Y1, (R11)(R10*1) + MOVQ 48(R9), R11 + VMOVDQU Y2, (R11)(R10*1) + MOVQ 72(R9), R11 + VMOVDQU Y3, (R11)(R10*1) + MOVQ 96(R9), R11 + VMOVDQU Y4, (R11)(R10*1) + MOVQ 120(R9), R11 + VMOVDQU Y5, (R11)(R10*1) + MOVQ 144(R9), R11 + VMOVDQU Y6, (R11)(R10*1) + MOVQ 168(R9), R11 + VMOVDQU Y7, (R11)(R10*1) + MOVQ 192(R9), R11 + VMOVDQU Y8, (R11)(R10*1) + + // Prepare for next loop + ADDQ $0x20, R10 + DECQ AX + JNZ mulAvxTwo_5x9Xor_loop + VZEROUPPER + +mulAvxTwo_5x9Xor_end: + RET + +// func mulAvxTwo_5x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x10(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 115 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_5x10_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), DX + MOVQ out_base+48(FP), R9 + MOVQ start+72(FP), R10 + + // Add start offset to input + ADDQ R10, BX + ADDQ R10, SI + ADDQ R10, DI + ADDQ R10, R8 + ADDQ R10, DX + MOVQ $0x0000000f, R11 + MOVQ R11, X10 + VPBROADCASTB X10, Y10 + +mulAvxTwo_5x10_loop: + // Load and process 32 bytes from input 0 to 10 outputs + VMOVDQU (BX), Y13 + ADDQ $0x20, BX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU (CX), Y11 + VMOVDQU 32(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y0 + VMOVDQU 64(CX), Y11 + VMOVDQU 96(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y1 + VMOVDQU 128(CX), Y11 + VMOVDQU 160(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y2 + VMOVDQU 192(CX), Y11 + VMOVDQU 224(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y3 + VMOVDQU 256(CX), Y11 + VMOVDQU 288(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y4 + VMOVDQU 320(CX), Y11 + VMOVDQU 352(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y5 + VMOVDQU 384(CX), Y11 + VMOVDQU 416(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y6 + VMOVDQU 448(CX), Y11 + VMOVDQU 480(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y7 + VMOVDQU 512(CX), Y11 + VMOVDQU 544(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y8 + VMOVDQU 576(CX), Y11 + VMOVDQU 608(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y9 + + // Load and process 32 bytes from input 1 to 10 outputs + VMOVDQU (SI), Y13 + ADDQ $0x20, SI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 640(CX), Y11 + VMOVDQU 672(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 704(CX), Y11 + VMOVDQU 736(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 768(CX), Y11 + VMOVDQU 800(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 832(CX), Y11 + VMOVDQU 864(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 896(CX), Y11 + VMOVDQU 928(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 960(CX), Y11 + VMOVDQU 992(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1024(CX), Y11 + VMOVDQU 1056(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1088(CX), Y11 + VMOVDQU 1120(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1152(CX), Y11 + VMOVDQU 1184(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1216(CX), Y11 + VMOVDQU 1248(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 2 to 10 outputs + VMOVDQU (DI), Y13 + ADDQ $0x20, DI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1280(CX), Y11 + VMOVDQU 1312(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1344(CX), Y11 + VMOVDQU 1376(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 1408(CX), Y11 + VMOVDQU 1440(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 1472(CX), Y11 + VMOVDQU 1504(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 1536(CX), Y11 + VMOVDQU 1568(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 1600(CX), Y11 + VMOVDQU 1632(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1664(CX), Y11 + VMOVDQU 1696(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1728(CX), Y11 + VMOVDQU 1760(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1792(CX), Y11 + VMOVDQU 1824(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1856(CX), Y11 + VMOVDQU 1888(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 3 to 10 outputs + VMOVDQU (R8), Y13 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1920(CX), Y11 + VMOVDQU 1952(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1984(CX), Y11 + VMOVDQU 2016(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2048(CX), Y11 + VMOVDQU 2080(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2112(CX), Y11 + VMOVDQU 2144(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2176(CX), Y11 + VMOVDQU 2208(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2240(CX), Y11 + VMOVDQU 2272(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2304(CX), Y11 + VMOVDQU 2336(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 2368(CX), Y11 + VMOVDQU 2400(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 2432(CX), Y11 + VMOVDQU 2464(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 2496(CX), Y11 + VMOVDQU 2528(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 4 to 10 outputs + VMOVDQU (DX), Y13 + ADDQ $0x20, DX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 2560(CX), Y11 + VMOVDQU 2592(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 2624(CX), Y11 + VMOVDQU 2656(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2688(CX), Y11 + VMOVDQU 2720(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2752(CX), Y11 + VMOVDQU 2784(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2816(CX), Y11 + VMOVDQU 2848(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2880(CX), Y11 + VMOVDQU 2912(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2944(CX), Y11 + VMOVDQU 2976(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 3008(CX), Y11 + VMOVDQU 3040(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 3072(CX), Y11 + VMOVDQU 3104(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 3136(CX), Y11 + VMOVDQU 3168(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Store 10 outputs + MOVQ (R9), R11 + VMOVDQU Y0, (R11)(R10*1) + MOVQ 24(R9), R11 + VMOVDQU Y1, (R11)(R10*1) + MOVQ 48(R9), R11 + VMOVDQU Y2, (R11)(R10*1) + MOVQ 72(R9), R11 + VMOVDQU Y3, (R11)(R10*1) + MOVQ 96(R9), R11 + VMOVDQU Y4, (R11)(R10*1) + MOVQ 120(R9), R11 + VMOVDQU Y5, (R11)(R10*1) + MOVQ 144(R9), R11 + VMOVDQU Y6, (R11)(R10*1) + MOVQ 168(R9), R11 + VMOVDQU Y7, (R11)(R10*1) + MOVQ 192(R9), R11 + VMOVDQU Y8, (R11)(R10*1) + MOVQ 216(R9), R11 + VMOVDQU Y9, (R11)(R10*1) + + // Prepare for next loop + ADDQ $0x20, R10 + DECQ AX + JNZ mulAvxTwo_5x10_loop + VZEROUPPER + +mulAvxTwo_5x10_end: + RET + +// func mulAvxTwo_5x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_5x10Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 115 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_5x10Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), DX + MOVQ out_base+48(FP), R9 + MOVQ start+72(FP), R10 + + // Add start offset to input + ADDQ R10, BX + ADDQ R10, SI + ADDQ R10, DI + ADDQ R10, R8 + ADDQ R10, DX + MOVQ $0x0000000f, R11 + MOVQ R11, X10 + VPBROADCASTB X10, Y10 + +mulAvxTwo_5x10Xor_loop: + // Load and process 32 bytes from input 0 to 10 outputs + VMOVDQU (BX), Y13 + ADDQ $0x20, BX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + MOVQ (R9), R11 + VMOVDQU (R11)(R10*1), Y0 + VMOVDQU (CX), Y11 + VMOVDQU 32(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + MOVQ 24(R9), R11 + VMOVDQU (R11)(R10*1), Y1 + VMOVDQU 64(CX), Y11 + VMOVDQU 96(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + MOVQ 48(R9), R11 + VMOVDQU (R11)(R10*1), Y2 + VMOVDQU 128(CX), Y11 + VMOVDQU 160(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + MOVQ 72(R9), R11 + VMOVDQU (R11)(R10*1), Y3 + VMOVDQU 192(CX), Y11 + VMOVDQU 224(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + MOVQ 96(R9), R11 + VMOVDQU (R11)(R10*1), Y4 + VMOVDQU 256(CX), Y11 + VMOVDQU 288(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + MOVQ 120(R9), R11 + VMOVDQU (R11)(R10*1), Y5 + VMOVDQU 320(CX), Y11 + VMOVDQU 352(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + MOVQ 144(R9), R11 + VMOVDQU (R11)(R10*1), Y6 + VMOVDQU 384(CX), Y11 + VMOVDQU 416(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + MOVQ 168(R9), R11 + VMOVDQU (R11)(R10*1), Y7 + VMOVDQU 448(CX), Y11 + VMOVDQU 480(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + MOVQ 192(R9), R11 + VMOVDQU (R11)(R10*1), Y8 + VMOVDQU 512(CX), Y11 + VMOVDQU 544(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + MOVQ 216(R9), R11 + VMOVDQU (R11)(R10*1), Y9 + VMOVDQU 576(CX), Y11 + VMOVDQU 608(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 1 to 10 outputs + VMOVDQU (SI), Y13 + ADDQ $0x20, SI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 640(CX), Y11 + VMOVDQU 672(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 704(CX), Y11 + VMOVDQU 736(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 768(CX), Y11 + VMOVDQU 800(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 832(CX), Y11 + VMOVDQU 864(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 896(CX), Y11 + VMOVDQU 928(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 960(CX), Y11 + VMOVDQU 992(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1024(CX), Y11 + VMOVDQU 1056(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1088(CX), Y11 + VMOVDQU 1120(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1152(CX), Y11 + VMOVDQU 1184(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1216(CX), Y11 + VMOVDQU 1248(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 2 to 10 outputs + VMOVDQU (DI), Y13 + ADDQ $0x20, DI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1280(CX), Y11 + VMOVDQU 1312(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1344(CX), Y11 + VMOVDQU 1376(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 1408(CX), Y11 + VMOVDQU 1440(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 1472(CX), Y11 + VMOVDQU 1504(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 1536(CX), Y11 + VMOVDQU 1568(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 1600(CX), Y11 + VMOVDQU 1632(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1664(CX), Y11 + VMOVDQU 1696(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1728(CX), Y11 + VMOVDQU 1760(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1792(CX), Y11 + VMOVDQU 1824(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1856(CX), Y11 + VMOVDQU 1888(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 3 to 10 outputs + VMOVDQU (R8), Y13 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1920(CX), Y11 + VMOVDQU 1952(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1984(CX), Y11 + VMOVDQU 2016(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2048(CX), Y11 + VMOVDQU 2080(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2112(CX), Y11 + VMOVDQU 2144(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2176(CX), Y11 + VMOVDQU 2208(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2240(CX), Y11 + VMOVDQU 2272(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2304(CX), Y11 + VMOVDQU 2336(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 2368(CX), Y11 + VMOVDQU 2400(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 2432(CX), Y11 + VMOVDQU 2464(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 2496(CX), Y11 + VMOVDQU 2528(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 4 to 10 outputs + VMOVDQU (DX), Y13 + ADDQ $0x20, DX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 2560(CX), Y11 + VMOVDQU 2592(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 2624(CX), Y11 + VMOVDQU 2656(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2688(CX), Y11 + VMOVDQU 2720(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2752(CX), Y11 + VMOVDQU 2784(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2816(CX), Y11 + VMOVDQU 2848(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2880(CX), Y11 + VMOVDQU 2912(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2944(CX), Y11 + VMOVDQU 2976(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 3008(CX), Y11 + VMOVDQU 3040(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 3072(CX), Y11 + VMOVDQU 3104(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 3136(CX), Y11 + VMOVDQU 3168(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Store 10 outputs + MOVQ (R9), R11 + VMOVDQU Y0, (R11)(R10*1) + MOVQ 24(R9), R11 + VMOVDQU Y1, (R11)(R10*1) + MOVQ 48(R9), R11 + VMOVDQU Y2, (R11)(R10*1) + MOVQ 72(R9), R11 + VMOVDQU Y3, (R11)(R10*1) + MOVQ 96(R9), R11 + VMOVDQU Y4, (R11)(R10*1) + MOVQ 120(R9), R11 + VMOVDQU Y5, (R11)(R10*1) + MOVQ 144(R9), R11 + VMOVDQU Y6, (R11)(R10*1) + MOVQ 168(R9), R11 + VMOVDQU Y7, (R11)(R10*1) + MOVQ 192(R9), R11 + VMOVDQU Y8, (R11)(R10*1) + MOVQ 216(R9), R11 + VMOVDQU Y9, (R11)(R10*1) + + // Prepare for next loop + ADDQ $0x20, R10 + DECQ AX + JNZ mulAvxTwo_5x10Xor_loop + VZEROUPPER + +mulAvxTwo_5x10Xor_end: + RET + +// func mulAvxTwo_6x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x1(SB), NOSPLIT, $0-88 + // Loading all tables to registers + // Destination kept in GP registers + // Full registers estimated 16 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_6x1_end + VMOVDQU (CX), Y0 + VMOVDQU 32(CX), Y1 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y9 + VMOVDQU 320(CX), Y10 + VMOVDQU 352(CX), Y11 + MOVQ in_base+24(FP), CX + MOVQ (CX), DX + MOVQ 24(CX), BX + MOVQ 48(CX), SI + MOVQ 72(CX), DI + MOVQ 96(CX), R8 + MOVQ 120(CX), CX + MOVQ out_base+48(FP), R9 + MOVQ (R9), R9 + MOVQ start+72(FP), R10 + + // Add start offset to output + ADDQ R10, R9 + + // Add start offset to input + ADDQ R10, DX + ADDQ R10, BX + ADDQ R10, SI + ADDQ R10, DI + ADDQ R10, R8 + ADDQ R10, CX + MOVQ $0x0000000f, R10 + MOVQ R10, X13 + VPBROADCASTB X13, Y13 + +mulAvxTwo_6x1_loop: + // Load and process 32 bytes from input 0 to 1 outputs + VMOVDQU (DX), Y14 + ADDQ $0x20, DX + VPSRLQ $0x04, Y14, Y15 + VPAND Y13, Y14, Y14 + VPAND Y13, Y15, Y15 + VPSHUFB Y14, Y0, Y14 + VPSHUFB Y15, Y1, Y15 + VPXOR Y14, Y15, Y12 + + // Load and process 32 bytes from input 1 to 1 outputs + VMOVDQU (BX), Y14 + ADDQ $0x20, BX + VPSRLQ $0x04, Y14, Y15 + VPAND Y13, Y14, Y14 + VPAND Y13, Y15, Y15 + VPSHUFB Y14, Y2, Y14 + VPSHUFB Y15, Y3, Y15 + VPXOR Y14, Y15, Y14 + VPXOR Y14, Y12, Y12 + + // Load and process 32 bytes from input 2 to 1 outputs + VMOVDQU (SI), Y14 + ADDQ $0x20, SI + VPSRLQ $0x04, Y14, Y15 + VPAND Y13, Y14, Y14 + VPAND Y13, Y15, Y15 + VPSHUFB Y14, Y4, Y14 + VPSHUFB Y15, Y5, Y15 + VPXOR Y14, Y15, Y14 + VPXOR Y14, Y12, Y12 + + // Load and process 32 bytes from input 3 to 1 outputs + VMOVDQU (DI), Y14 + ADDQ $0x20, DI + VPSRLQ $0x04, Y14, Y15 + VPAND Y13, Y14, Y14 + VPAND Y13, Y15, Y15 + VPSHUFB Y14, Y6, Y14 + VPSHUFB Y15, Y7, Y15 + VPXOR Y14, Y15, Y14 + VPXOR Y14, Y12, Y12 + + // Load and process 32 bytes from input 4 to 1 outputs + VMOVDQU (R8), Y14 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y14, Y15 + VPAND Y13, Y14, Y14 + VPAND Y13, Y15, Y15 + VPSHUFB Y14, Y8, Y14 + VPSHUFB Y15, Y9, Y15 + VPXOR Y14, Y15, Y14 + VPXOR Y14, Y12, Y12 + + // Load and process 32 bytes from input 5 to 1 outputs + VMOVDQU (CX), Y14 + ADDQ $0x20, CX + VPSRLQ $0x04, Y14, Y15 + VPAND Y13, Y14, Y14 + VPAND Y13, Y15, Y15 + VPSHUFB Y14, Y10, Y14 + VPSHUFB Y15, Y11, Y15 + VPXOR Y14, Y15, Y14 + VPXOR Y14, Y12, Y12 + + // Store 1 outputs + VMOVDQU Y12, (R9) + ADDQ $0x20, R9 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_6x1_loop + VZEROUPPER + +mulAvxTwo_6x1_end: + RET + +// func mulAvxTwo_6x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x1_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 30 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_6x1_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), DX + MOVQ out_base+48(FP), R10 + MOVQ out_base+48(FP), R10 + MOVQ (R10), R10 + MOVQ start+72(FP), R11 + + // Add start offset to output + ADDQ R11, R10 + + // Add start offset to input + ADDQ R11, BX + ADDQ R11, SI + ADDQ R11, DI + ADDQ R11, R8 + ADDQ R11, R9 + ADDQ R11, DX + MOVQ $0x0000000f, R11 + MOVQ R11, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_6x1_64_loop: + // Load and process 64 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y6 + VMOVDQU 32(BX), Y5 + ADDQ $0x40, BX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y0 + VPXOR Y5, Y6, Y1 + + // Load and process 64 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y6 + VMOVDQU 32(SI), Y5 + ADDQ $0x40, SI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 2 to 1 outputs + VMOVDQU (DI), Y6 + VMOVDQU 32(DI), Y5 + ADDQ $0x40, DI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 3 to 1 outputs + VMOVDQU (R8), Y6 + VMOVDQU 32(R8), Y5 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 4 to 1 outputs + VMOVDQU (R9), Y6 + VMOVDQU 32(R9), Y5 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 5 to 1 outputs + VMOVDQU (DX), Y6 + VMOVDQU 32(DX), Y5 + ADDQ $0x40, DX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Store 1 outputs + VMOVDQU Y0, (R10) + VMOVDQU Y1, 32(R10) + ADDQ $0x40, R10 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_6x1_64_loop + VZEROUPPER + +mulAvxTwo_6x1_64_end: + RET + +// func mulAvxTwo_6x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x1Xor(SB), NOSPLIT, $0-88 + // Loading all tables to registers + // Destination kept in GP registers + // Full registers estimated 16 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_6x1Xor_end + VMOVDQU (CX), Y0 + VMOVDQU 32(CX), Y1 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y9 + VMOVDQU 320(CX), Y10 + VMOVDQU 352(CX), Y11 + MOVQ in_base+24(FP), CX + MOVQ (CX), DX + MOVQ 24(CX), BX + MOVQ 48(CX), SI + MOVQ 72(CX), DI + MOVQ 96(CX), R8 + MOVQ 120(CX), CX + MOVQ out_base+48(FP), R9 + MOVQ (R9), R9 + MOVQ start+72(FP), R10 + + // Add start offset to output + ADDQ R10, R9 + + // Add start offset to input + ADDQ R10, DX + ADDQ R10, BX + ADDQ R10, SI + ADDQ R10, DI + ADDQ R10, R8 + ADDQ R10, CX + MOVQ $0x0000000f, R10 + MOVQ R10, X13 + VPBROADCASTB X13, Y13 + +mulAvxTwo_6x1Xor_loop: + // Load and process 32 bytes from input 0 to 1 outputs + VMOVDQU (DX), Y14 + ADDQ $0x20, DX + VPSRLQ $0x04, Y14, Y15 + VPAND Y13, Y14, Y14 + VPAND Y13, Y15, Y15 + VMOVDQU (R9), Y12 + VPSHUFB Y14, Y0, Y14 + VPSHUFB Y15, Y1, Y15 + VPXOR Y14, Y15, Y14 + VPXOR Y14, Y12, Y12 + + // Load and process 32 bytes from input 1 to 1 outputs + VMOVDQU (BX), Y14 + ADDQ $0x20, BX + VPSRLQ $0x04, Y14, Y15 + VPAND Y13, Y14, Y14 + VPAND Y13, Y15, Y15 + VPSHUFB Y14, Y2, Y14 + VPSHUFB Y15, Y3, Y15 + VPXOR Y14, Y15, Y14 + VPXOR Y14, Y12, Y12 + + // Load and process 32 bytes from input 2 to 1 outputs + VMOVDQU (SI), Y14 + ADDQ $0x20, SI + VPSRLQ $0x04, Y14, Y15 + VPAND Y13, Y14, Y14 + VPAND Y13, Y15, Y15 + VPSHUFB Y14, Y4, Y14 + VPSHUFB Y15, Y5, Y15 + VPXOR Y14, Y15, Y14 + VPXOR Y14, Y12, Y12 + + // Load and process 32 bytes from input 3 to 1 outputs + VMOVDQU (DI), Y14 + ADDQ $0x20, DI + VPSRLQ $0x04, Y14, Y15 + VPAND Y13, Y14, Y14 + VPAND Y13, Y15, Y15 + VPSHUFB Y14, Y6, Y14 + VPSHUFB Y15, Y7, Y15 + VPXOR Y14, Y15, Y14 + VPXOR Y14, Y12, Y12 + + // Load and process 32 bytes from input 4 to 1 outputs + VMOVDQU (R8), Y14 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y14, Y15 + VPAND Y13, Y14, Y14 + VPAND Y13, Y15, Y15 + VPSHUFB Y14, Y8, Y14 + VPSHUFB Y15, Y9, Y15 + VPXOR Y14, Y15, Y14 + VPXOR Y14, Y12, Y12 + + // Load and process 32 bytes from input 5 to 1 outputs + VMOVDQU (CX), Y14 + ADDQ $0x20, CX + VPSRLQ $0x04, Y14, Y15 + VPAND Y13, Y14, Y14 + VPAND Y13, Y15, Y15 + VPSHUFB Y14, Y10, Y14 + VPSHUFB Y15, Y11, Y15 + VPXOR Y14, Y15, Y14 + VPXOR Y14, Y12, Y12 + + // Store 1 outputs + VMOVDQU Y12, (R9) + ADDQ $0x20, R9 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_6x1Xor_loop + VZEROUPPER + +mulAvxTwo_6x1Xor_end: + RET + +// func mulAvxTwo_6x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x1_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 30 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_6x1_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), DX + MOVQ out_base+48(FP), R10 + MOVQ out_base+48(FP), R10 + MOVQ (R10), R10 + MOVQ start+72(FP), R11 + + // Add start offset to output + ADDQ R11, R10 + + // Add start offset to input + ADDQ R11, BX + ADDQ R11, SI + ADDQ R11, DI + ADDQ R11, R8 + ADDQ R11, R9 + ADDQ R11, DX + MOVQ $0x0000000f, R11 + MOVQ R11, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_6x1_64Xor_loop: + // Load 1 outputs + VMOVDQU (R10), Y0 + VMOVDQU 32(R10), Y1 + + // Load and process 64 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y6 + VMOVDQU 32(BX), Y5 + ADDQ $0x40, BX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y6 + VMOVDQU 32(SI), Y5 + ADDQ $0x40, SI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 2 to 1 outputs + VMOVDQU (DI), Y6 + VMOVDQU 32(DI), Y5 + ADDQ $0x40, DI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 3 to 1 outputs + VMOVDQU (R8), Y6 + VMOVDQU 32(R8), Y5 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 4 to 1 outputs + VMOVDQU (R9), Y6 + VMOVDQU 32(R9), Y5 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 5 to 1 outputs + VMOVDQU (DX), Y6 + VMOVDQU 32(DX), Y5 + ADDQ $0x40, DX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Store 1 outputs + VMOVDQU Y0, (R10) + VMOVDQU Y1, 32(R10) + ADDQ $0x40, R10 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_6x1_64Xor_loop + VZEROUPPER + +mulAvxTwo_6x1_64Xor_end: + RET + +// func mulAvxTwo_6x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x2(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 31 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_6x2_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), DX + MOVQ out_base+48(FP), R10 + MOVQ (R10), R11 + MOVQ 24(R10), R10 + MOVQ start+72(FP), R12 + + // Add start offset to output + ADDQ R12, R11 + ADDQ R12, R10 + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, R9 + ADDQ R12, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_6x2_loop: + // Load and process 32 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y5 + ADDQ $0x20, BX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y0 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y1 + + // Load and process 32 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y5 + ADDQ $0x20, SI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y5 + ADDQ $0x20, DI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y5 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 384(CX), Y3 + VMOVDQU 416(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 448(CX), Y3 + VMOVDQU 480(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 4 to 2 outputs + VMOVDQU (R9), Y5 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 512(CX), Y3 + VMOVDQU 544(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 576(CX), Y3 + VMOVDQU 608(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 5 to 2 outputs + VMOVDQU (DX), Y5 + ADDQ $0x20, DX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 640(CX), Y3 + VMOVDQU 672(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 704(CX), Y3 + VMOVDQU 736(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Store 2 outputs + VMOVDQU Y0, (R11) + ADDQ $0x20, R11 + VMOVDQU Y1, (R10) + ADDQ $0x20, R10 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_6x2_loop + VZEROUPPER + +mulAvxTwo_6x2_end: + RET + +// func mulAvxTwo_6x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x2_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 57 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_6x2_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), DX + MOVQ out_base+48(FP), R10 + MOVQ out_base+48(FP), R10 + MOVQ (R10), R11 + MOVQ 24(R10), R10 + MOVQ start+72(FP), R12 + + // Add start offset to output + ADDQ R12, R11 + ADDQ R12, R10 + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, R9 + ADDQ R12, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_6x2_64_loop: + // Load and process 64 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y9 + VMOVDQU 32(BX), Y11 + ADDQ $0x40, BX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y0 + VPXOR Y7, Y8, Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y2 + VPXOR Y7, Y8, Y3 + + // Load and process 64 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y9 + VMOVDQU 32(SI), Y11 + ADDQ $0x40, SI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y9 + VMOVDQU 32(DI), Y11 + ADDQ $0x40, DI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y9 + VMOVDQU 32(R8), Y11 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 4 to 2 outputs + VMOVDQU (R9), Y9 + VMOVDQU 32(R9), Y11 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 5 to 2 outputs + VMOVDQU (DX), Y9 + VMOVDQU 32(DX), Y11 + ADDQ $0x40, DX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Store 2 outputs + VMOVDQU Y0, (R11) + VMOVDQU Y1, 32(R11) + ADDQ $0x40, R11 + VMOVDQU Y2, (R10) + VMOVDQU Y3, 32(R10) + ADDQ $0x40, R10 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_6x2_64_loop + VZEROUPPER + +mulAvxTwo_6x2_64_end: + RET + +// func mulAvxTwo_6x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x2Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 31 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_6x2Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), DX + MOVQ out_base+48(FP), R10 + MOVQ (R10), R11 + MOVQ 24(R10), R10 + MOVQ start+72(FP), R12 + + // Add start offset to output + ADDQ R12, R11 + ADDQ R12, R10 + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, R9 + ADDQ R12, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_6x2Xor_loop: + // Load and process 32 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y5 + ADDQ $0x20, BX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU (R11), Y0 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU (R10), Y1 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y5 + ADDQ $0x20, SI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y5 + ADDQ $0x20, DI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y5 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 384(CX), Y3 + VMOVDQU 416(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 448(CX), Y3 + VMOVDQU 480(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 4 to 2 outputs + VMOVDQU (R9), Y5 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 512(CX), Y3 + VMOVDQU 544(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 576(CX), Y3 + VMOVDQU 608(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 5 to 2 outputs + VMOVDQU (DX), Y5 + ADDQ $0x20, DX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 640(CX), Y3 + VMOVDQU 672(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 704(CX), Y3 + VMOVDQU 736(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Store 2 outputs + VMOVDQU Y0, (R11) + ADDQ $0x20, R11 + VMOVDQU Y1, (R10) + ADDQ $0x20, R10 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_6x2Xor_loop + VZEROUPPER + +mulAvxTwo_6x2Xor_end: + RET + +// func mulAvxTwo_6x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x2_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 57 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_6x2_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), DX + MOVQ out_base+48(FP), R10 + MOVQ out_base+48(FP), R10 + MOVQ (R10), R11 + MOVQ 24(R10), R10 + MOVQ start+72(FP), R12 + + // Add start offset to output + ADDQ R12, R11 + ADDQ R12, R10 + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, R9 + ADDQ R12, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_6x2_64Xor_loop: + // Load 2 outputs + VMOVDQU (R11), Y0 + VMOVDQU 32(R11), Y1 + VMOVDQU (R10), Y2 + VMOVDQU 32(R10), Y3 + + // Load and process 64 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y9 + VMOVDQU 32(BX), Y11 + ADDQ $0x40, BX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y9 + VMOVDQU 32(SI), Y11 + ADDQ $0x40, SI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y9 + VMOVDQU 32(DI), Y11 + ADDQ $0x40, DI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y9 + VMOVDQU 32(R8), Y11 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 4 to 2 outputs + VMOVDQU (R9), Y9 + VMOVDQU 32(R9), Y11 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 5 to 2 outputs + VMOVDQU (DX), Y9 + VMOVDQU 32(DX), Y11 + ADDQ $0x40, DX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Store 2 outputs + VMOVDQU Y0, (R11) + VMOVDQU Y1, 32(R11) + ADDQ $0x40, R11 + VMOVDQU Y2, (R10) + VMOVDQU Y3, 32(R10) + ADDQ $0x40, R10 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_6x2_64Xor_loop + VZEROUPPER + +mulAvxTwo_6x2_64Xor_end: + RET + +// func mulAvxTwo_6x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x3(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 44 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_6x3_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), DX + MOVQ out_base+48(FP), R10 + MOVQ (R10), R11 + MOVQ 24(R10), R12 + MOVQ 48(R10), R10 + MOVQ start+72(FP), R13 + + // Add start offset to output + ADDQ R13, R11 + ADDQ R13, R12 + ADDQ R13, R10 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X3 + VPBROADCASTB X3, Y3 + +mulAvxTwo_6x3_loop: + // Load and process 32 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y6 + ADDQ $0x20, BX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU (CX), Y4 + VMOVDQU 32(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y0 + VMOVDQU 64(CX), Y4 + VMOVDQU 96(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y1 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y2 + + // Load and process 32 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y6 + ADDQ $0x20, SI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 192(CX), Y4 + VMOVDQU 224(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 256(CX), Y4 + VMOVDQU 288(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 320(CX), Y4 + VMOVDQU 352(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y6 + ADDQ $0x20, DI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 384(CX), Y4 + VMOVDQU 416(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 448(CX), Y4 + VMOVDQU 480(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 512(CX), Y4 + VMOVDQU 544(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 3 to 3 outputs + VMOVDQU (R8), Y6 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 576(CX), Y4 + VMOVDQU 608(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 640(CX), Y4 + VMOVDQU 672(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 704(CX), Y4 + VMOVDQU 736(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 4 to 3 outputs + VMOVDQU (R9), Y6 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 768(CX), Y4 + VMOVDQU 800(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 832(CX), Y4 + VMOVDQU 864(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 896(CX), Y4 + VMOVDQU 928(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 5 to 3 outputs + VMOVDQU (DX), Y6 + ADDQ $0x20, DX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 960(CX), Y4 + VMOVDQU 992(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1024(CX), Y4 + VMOVDQU 1056(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1088(CX), Y4 + VMOVDQU 1120(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Store 3 outputs + VMOVDQU Y0, (R11) + ADDQ $0x20, R11 + VMOVDQU Y1, (R12) + ADDQ $0x20, R12 + VMOVDQU Y2, (R10) + ADDQ $0x20, R10 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_6x3_loop + VZEROUPPER + +mulAvxTwo_6x3_end: + RET + +// func mulAvxTwo_6x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x3_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 82 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_6x3_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), DX + MOVQ out_base+48(FP), R10 + MOVQ out_base+48(FP), R10 + MOVQ (R10), R11 + MOVQ 24(R10), R12 + MOVQ 48(R10), R10 + MOVQ start+72(FP), R13 + + // Add start offset to output + ADDQ R13, R11 + ADDQ R13, R12 + ADDQ R13, R10 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_6x3_64_loop: + // Load and process 64 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y11 + VMOVDQU 32(BX), Y13 + ADDQ $0x40, BX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y0 + VPXOR Y9, Y10, Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y2 + VPXOR Y9, Y10, Y3 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y4 + VPXOR Y9, Y10, Y5 + + // Load and process 64 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y11 + VMOVDQU 32(SI), Y13 + ADDQ $0x40, SI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y11 + VMOVDQU 32(DI), Y13 + ADDQ $0x40, DI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 3 to 3 outputs + VMOVDQU (R8), Y11 + VMOVDQU 32(R8), Y13 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 4 to 3 outputs + VMOVDQU (R9), Y11 + VMOVDQU 32(R9), Y13 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 5 to 3 outputs + VMOVDQU (DX), Y11 + VMOVDQU 32(DX), Y13 + ADDQ $0x40, DX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Store 3 outputs + VMOVDQU Y0, (R11) + VMOVDQU Y1, 32(R11) + ADDQ $0x40, R11 + VMOVDQU Y2, (R12) + VMOVDQU Y3, 32(R12) + ADDQ $0x40, R12 + VMOVDQU Y4, (R10) + VMOVDQU Y5, 32(R10) + ADDQ $0x40, R10 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_6x3_64_loop + VZEROUPPER + +mulAvxTwo_6x3_64_end: + RET + +// func mulAvxTwo_6x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x3Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 44 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_6x3Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), DX + MOVQ out_base+48(FP), R10 + MOVQ (R10), R11 + MOVQ 24(R10), R12 + MOVQ 48(R10), R10 + MOVQ start+72(FP), R13 + + // Add start offset to output + ADDQ R13, R11 + ADDQ R13, R12 + ADDQ R13, R10 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X3 + VPBROADCASTB X3, Y3 + +mulAvxTwo_6x3Xor_loop: + // Load and process 32 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y6 + ADDQ $0x20, BX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU (R11), Y0 + VMOVDQU (CX), Y4 + VMOVDQU 32(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU (R12), Y1 + VMOVDQU 64(CX), Y4 + VMOVDQU 96(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU (R10), Y2 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y6 + ADDQ $0x20, SI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 192(CX), Y4 + VMOVDQU 224(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 256(CX), Y4 + VMOVDQU 288(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 320(CX), Y4 + VMOVDQU 352(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y6 + ADDQ $0x20, DI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 384(CX), Y4 + VMOVDQU 416(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 448(CX), Y4 + VMOVDQU 480(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 512(CX), Y4 + VMOVDQU 544(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 3 to 3 outputs + VMOVDQU (R8), Y6 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 576(CX), Y4 + VMOVDQU 608(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 640(CX), Y4 + VMOVDQU 672(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 704(CX), Y4 + VMOVDQU 736(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 4 to 3 outputs + VMOVDQU (R9), Y6 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 768(CX), Y4 + VMOVDQU 800(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 832(CX), Y4 + VMOVDQU 864(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 896(CX), Y4 + VMOVDQU 928(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 5 to 3 outputs + VMOVDQU (DX), Y6 + ADDQ $0x20, DX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 960(CX), Y4 + VMOVDQU 992(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1024(CX), Y4 + VMOVDQU 1056(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1088(CX), Y4 + VMOVDQU 1120(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Store 3 outputs + VMOVDQU Y0, (R11) + ADDQ $0x20, R11 + VMOVDQU Y1, (R12) + ADDQ $0x20, R12 + VMOVDQU Y2, (R10) + ADDQ $0x20, R10 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_6x3Xor_loop + VZEROUPPER + +mulAvxTwo_6x3Xor_end: + RET + +// func mulAvxTwo_6x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x3_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 82 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_6x3_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), DX + MOVQ out_base+48(FP), R10 + MOVQ out_base+48(FP), R10 + MOVQ (R10), R11 + MOVQ 24(R10), R12 + MOVQ 48(R10), R10 + MOVQ start+72(FP), R13 + + // Add start offset to output + ADDQ R13, R11 + ADDQ R13, R12 + ADDQ R13, R10 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_6x3_64Xor_loop: + // Load 3 outputs + VMOVDQU (R11), Y0 + VMOVDQU 32(R11), Y1 + VMOVDQU (R12), Y2 + VMOVDQU 32(R12), Y3 + VMOVDQU (R10), Y4 + VMOVDQU 32(R10), Y5 + + // Load and process 64 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y11 + VMOVDQU 32(BX), Y13 + ADDQ $0x40, BX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y11 + VMOVDQU 32(SI), Y13 + ADDQ $0x40, SI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y11 + VMOVDQU 32(DI), Y13 + ADDQ $0x40, DI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 3 to 3 outputs + VMOVDQU (R8), Y11 + VMOVDQU 32(R8), Y13 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 4 to 3 outputs + VMOVDQU (R9), Y11 + VMOVDQU 32(R9), Y13 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 5 to 3 outputs + VMOVDQU (DX), Y11 + VMOVDQU 32(DX), Y13 + ADDQ $0x40, DX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Store 3 outputs + VMOVDQU Y0, (R11) + VMOVDQU Y1, 32(R11) + ADDQ $0x40, R11 + VMOVDQU Y2, (R12) + VMOVDQU Y3, 32(R12) + ADDQ $0x40, R12 + VMOVDQU Y4, (R10) + VMOVDQU Y5, 32(R10) + ADDQ $0x40, R10 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_6x3_64Xor_loop + VZEROUPPER + +mulAvxTwo_6x3_64Xor_end: + RET + +// func mulAvxTwo_6x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x4(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 57 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_6x4_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), DX + MOVQ out_base+48(FP), R10 + MOVQ (R10), R11 + MOVQ 24(R10), R12 + MOVQ 48(R10), R13 + MOVQ 72(R10), R10 + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, R13 + ADDQ R14, R10 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_6x4_loop: + // Load and process 32 bytes from input 0 to 4 outputs + VMOVDQU (BX), Y7 + ADDQ $0x20, BX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y0 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y1 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y2 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y3 + + // Load and process 32 bytes from input 1 to 4 outputs + VMOVDQU (SI), Y7 + ADDQ $0x20, SI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 2 to 4 outputs + VMOVDQU (DI), Y7 + ADDQ $0x20, DI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 3 to 4 outputs + VMOVDQU (R8), Y7 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 768(CX), Y5 + VMOVDQU 800(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 832(CX), Y5 + VMOVDQU 864(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 896(CX), Y5 + VMOVDQU 928(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 960(CX), Y5 + VMOVDQU 992(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 4 to 4 outputs + VMOVDQU (R9), Y7 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1024(CX), Y5 + VMOVDQU 1056(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1088(CX), Y5 + VMOVDQU 1120(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1152(CX), Y5 + VMOVDQU 1184(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1216(CX), Y5 + VMOVDQU 1248(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 5 to 4 outputs + VMOVDQU (DX), Y7 + ADDQ $0x20, DX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1280(CX), Y5 + VMOVDQU 1312(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1344(CX), Y5 + VMOVDQU 1376(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1408(CX), Y5 + VMOVDQU 1440(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1472(CX), Y5 + VMOVDQU 1504(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Store 4 outputs + VMOVDQU Y0, (R11) + ADDQ $0x20, R11 + VMOVDQU Y1, (R12) + ADDQ $0x20, R12 + VMOVDQU Y2, (R13) + ADDQ $0x20, R13 + VMOVDQU Y3, (R10) + ADDQ $0x20, R10 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_6x4_loop + VZEROUPPER + +mulAvxTwo_6x4_end: + RET + +// func mulAvxTwo_6x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x4Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 57 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_6x4Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), DX + MOVQ out_base+48(FP), R10 + MOVQ (R10), R11 + MOVQ 24(R10), R12 + MOVQ 48(R10), R13 + MOVQ 72(R10), R10 + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, R13 + ADDQ R14, R10 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_6x4Xor_loop: + // Load and process 32 bytes from input 0 to 4 outputs + VMOVDQU (BX), Y7 + ADDQ $0x20, BX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU (R11), Y0 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU (R12), Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU (R13), Y2 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU (R10), Y3 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 1 to 4 outputs + VMOVDQU (SI), Y7 + ADDQ $0x20, SI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 2 to 4 outputs + VMOVDQU (DI), Y7 + ADDQ $0x20, DI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 3 to 4 outputs + VMOVDQU (R8), Y7 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 768(CX), Y5 + VMOVDQU 800(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 832(CX), Y5 + VMOVDQU 864(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 896(CX), Y5 + VMOVDQU 928(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 960(CX), Y5 + VMOVDQU 992(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 4 to 4 outputs + VMOVDQU (R9), Y7 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1024(CX), Y5 + VMOVDQU 1056(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1088(CX), Y5 + VMOVDQU 1120(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1152(CX), Y5 + VMOVDQU 1184(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1216(CX), Y5 + VMOVDQU 1248(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 5 to 4 outputs + VMOVDQU (DX), Y7 + ADDQ $0x20, DX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1280(CX), Y5 + VMOVDQU 1312(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1344(CX), Y5 + VMOVDQU 1376(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1408(CX), Y5 + VMOVDQU 1440(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1472(CX), Y5 + VMOVDQU 1504(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Store 4 outputs + VMOVDQU Y0, (R11) + ADDQ $0x20, R11 + VMOVDQU Y1, (R12) + ADDQ $0x20, R12 + VMOVDQU Y2, (R13) + ADDQ $0x20, R13 + VMOVDQU Y3, (R10) + ADDQ $0x20, R10 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_6x4Xor_loop + VZEROUPPER + +mulAvxTwo_6x4Xor_end: + RET + +// func mulAvxTwo_6x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x5(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 70 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_6x5_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), DX + MOVQ out_base+48(FP), R10 + MOVQ (R10), R11 + MOVQ 24(R10), R12 + MOVQ 48(R10), R13 + MOVQ 72(R10), R14 + MOVQ 96(R10), R10 + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, R14 + ADDQ R15, R10 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X5 + VPBROADCASTB X5, Y5 + +mulAvxTwo_6x5_loop: + // Load and process 32 bytes from input 0 to 5 outputs + VMOVDQU (BX), Y8 + ADDQ $0x20, BX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU (CX), Y6 + VMOVDQU 32(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y0 + VMOVDQU 64(CX), Y6 + VMOVDQU 96(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y1 + VMOVDQU 128(CX), Y6 + VMOVDQU 160(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y2 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y3 + VMOVDQU 256(CX), Y6 + VMOVDQU 288(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y4 + + // Load and process 32 bytes from input 1 to 5 outputs + VMOVDQU (SI), Y8 + ADDQ $0x20, SI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 320(CX), Y6 + VMOVDQU 352(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 384(CX), Y6 + VMOVDQU 416(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 448(CX), Y6 + VMOVDQU 480(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 512(CX), Y6 + VMOVDQU 544(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 576(CX), Y6 + VMOVDQU 608(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 2 to 5 outputs + VMOVDQU (DI), Y8 + ADDQ $0x20, DI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 640(CX), Y6 + VMOVDQU 672(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 704(CX), Y6 + VMOVDQU 736(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 768(CX), Y6 + VMOVDQU 800(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 832(CX), Y6 + VMOVDQU 864(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 896(CX), Y6 + VMOVDQU 928(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 3 to 5 outputs + VMOVDQU (R8), Y8 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 960(CX), Y6 + VMOVDQU 992(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1024(CX), Y6 + VMOVDQU 1056(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1088(CX), Y6 + VMOVDQU 1120(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1152(CX), Y6 + VMOVDQU 1184(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1216(CX), Y6 + VMOVDQU 1248(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 4 to 5 outputs + VMOVDQU (R9), Y8 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1280(CX), Y6 + VMOVDQU 1312(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1344(CX), Y6 + VMOVDQU 1376(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1408(CX), Y6 + VMOVDQU 1440(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1472(CX), Y6 + VMOVDQU 1504(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1536(CX), Y6 + VMOVDQU 1568(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 5 to 5 outputs + VMOVDQU (DX), Y8 + ADDQ $0x20, DX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1600(CX), Y6 + VMOVDQU 1632(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1664(CX), Y6 + VMOVDQU 1696(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1728(CX), Y6 + VMOVDQU 1760(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1792(CX), Y6 + VMOVDQU 1824(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1856(CX), Y6 + VMOVDQU 1888(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Store 5 outputs + VMOVDQU Y0, (R11) + ADDQ $0x20, R11 + VMOVDQU Y1, (R12) + ADDQ $0x20, R12 + VMOVDQU Y2, (R13) + ADDQ $0x20, R13 + VMOVDQU Y3, (R14) + ADDQ $0x20, R14 + VMOVDQU Y4, (R10) + ADDQ $0x20, R10 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_6x5_loop + VZEROUPPER + +mulAvxTwo_6x5_end: + RET + +// func mulAvxTwo_6x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x5Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 70 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_6x5Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), DX + MOVQ out_base+48(FP), R10 + MOVQ (R10), R11 + MOVQ 24(R10), R12 + MOVQ 48(R10), R13 + MOVQ 72(R10), R14 + MOVQ 96(R10), R10 + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, R14 + ADDQ R15, R10 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X5 + VPBROADCASTB X5, Y5 + +mulAvxTwo_6x5Xor_loop: + // Load and process 32 bytes from input 0 to 5 outputs + VMOVDQU (BX), Y8 + ADDQ $0x20, BX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU (R11), Y0 + VMOVDQU (CX), Y6 + VMOVDQU 32(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU (R12), Y1 + VMOVDQU 64(CX), Y6 + VMOVDQU 96(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU (R13), Y2 + VMOVDQU 128(CX), Y6 + VMOVDQU 160(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU (R14), Y3 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU (R10), Y4 + VMOVDQU 256(CX), Y6 + VMOVDQU 288(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 1 to 5 outputs + VMOVDQU (SI), Y8 + ADDQ $0x20, SI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 320(CX), Y6 + VMOVDQU 352(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 384(CX), Y6 + VMOVDQU 416(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 448(CX), Y6 + VMOVDQU 480(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 512(CX), Y6 + VMOVDQU 544(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 576(CX), Y6 + VMOVDQU 608(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 2 to 5 outputs + VMOVDQU (DI), Y8 + ADDQ $0x20, DI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 640(CX), Y6 + VMOVDQU 672(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 704(CX), Y6 + VMOVDQU 736(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 768(CX), Y6 + VMOVDQU 800(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 832(CX), Y6 + VMOVDQU 864(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 896(CX), Y6 + VMOVDQU 928(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 3 to 5 outputs + VMOVDQU (R8), Y8 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 960(CX), Y6 + VMOVDQU 992(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1024(CX), Y6 + VMOVDQU 1056(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1088(CX), Y6 + VMOVDQU 1120(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1152(CX), Y6 + VMOVDQU 1184(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1216(CX), Y6 + VMOVDQU 1248(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 4 to 5 outputs + VMOVDQU (R9), Y8 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1280(CX), Y6 + VMOVDQU 1312(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1344(CX), Y6 + VMOVDQU 1376(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1408(CX), Y6 + VMOVDQU 1440(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1472(CX), Y6 + VMOVDQU 1504(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1536(CX), Y6 + VMOVDQU 1568(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 5 to 5 outputs + VMOVDQU (DX), Y8 + ADDQ $0x20, DX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1600(CX), Y6 + VMOVDQU 1632(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1664(CX), Y6 + VMOVDQU 1696(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1728(CX), Y6 + VMOVDQU 1760(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1792(CX), Y6 + VMOVDQU 1824(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1856(CX), Y6 + VMOVDQU 1888(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Store 5 outputs + VMOVDQU Y0, (R11) + ADDQ $0x20, R11 + VMOVDQU Y1, (R12) + ADDQ $0x20, R12 + VMOVDQU Y2, (R13) + ADDQ $0x20, R13 + VMOVDQU Y3, (R14) + ADDQ $0x20, R14 + VMOVDQU Y4, (R10) + ADDQ $0x20, R10 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_6x5Xor_loop + VZEROUPPER + +mulAvxTwo_6x5Xor_end: + RET + +// func mulAvxTwo_6x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x6(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 83 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_6x6_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), DX + MOVQ out_base+48(FP), R10 + MOVQ (R10), R11 + MOVQ 24(R10), R12 + MOVQ 48(R10), R13 + MOVQ 72(R10), R14 + MOVQ 96(R10), R15 + MOVQ 120(R10), R10 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R10 + + // Add start offset to input + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, DX + MOVQ $0x0000000f, BP + MOVQ BP, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_6x6_loop: + // Load and process 32 bytes from input 0 to 6 outputs + VMOVDQU (BX), Y9 + ADDQ $0x20, BX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y0 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y1 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y2 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y3 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y4 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y5 + + // Load and process 32 bytes from input 1 to 6 outputs + VMOVDQU (SI), Y9 + ADDQ $0x20, SI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 2 to 6 outputs + VMOVDQU (DI), Y9 + ADDQ $0x20, DI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 3 to 6 outputs + VMOVDQU (R8), Y9 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1152(CX), Y7 + VMOVDQU 1184(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1216(CX), Y7 + VMOVDQU 1248(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1280(CX), Y7 + VMOVDQU 1312(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1344(CX), Y7 + VMOVDQU 1376(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1408(CX), Y7 + VMOVDQU 1440(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1472(CX), Y7 + VMOVDQU 1504(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 4 to 6 outputs + VMOVDQU (R9), Y9 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1536(CX), Y7 + VMOVDQU 1568(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1600(CX), Y7 + VMOVDQU 1632(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1664(CX), Y7 + VMOVDQU 1696(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1728(CX), Y7 + VMOVDQU 1760(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1792(CX), Y7 + VMOVDQU 1824(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1856(CX), Y7 + VMOVDQU 1888(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 5 to 6 outputs + VMOVDQU (DX), Y9 + ADDQ $0x20, DX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1920(CX), Y7 + VMOVDQU 1952(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1984(CX), Y7 + VMOVDQU 2016(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2048(CX), Y7 + VMOVDQU 2080(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2112(CX), Y7 + VMOVDQU 2144(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2176(CX), Y7 + VMOVDQU 2208(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 2240(CX), Y7 + VMOVDQU 2272(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Store 6 outputs + VMOVDQU Y0, (R11) + ADDQ $0x20, R11 + VMOVDQU Y1, (R12) + ADDQ $0x20, R12 + VMOVDQU Y2, (R13) + ADDQ $0x20, R13 + VMOVDQU Y3, (R14) + ADDQ $0x20, R14 + VMOVDQU Y4, (R15) + ADDQ $0x20, R15 + VMOVDQU Y5, (R10) + ADDQ $0x20, R10 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_6x6_loop + VZEROUPPER + +mulAvxTwo_6x6_end: + RET + +// func mulAvxTwo_6x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x6Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 83 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_6x6Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), DX + MOVQ out_base+48(FP), R10 + MOVQ (R10), R11 + MOVQ 24(R10), R12 + MOVQ 48(R10), R13 + MOVQ 72(R10), R14 + MOVQ 96(R10), R15 + MOVQ 120(R10), R10 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R10 + + // Add start offset to input + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, DX + MOVQ $0x0000000f, BP + MOVQ BP, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_6x6Xor_loop: + // Load and process 32 bytes from input 0 to 6 outputs + VMOVDQU (BX), Y9 + ADDQ $0x20, BX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU (R11), Y0 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU (R12), Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU (R13), Y2 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU (R14), Y3 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU (R15), Y4 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU (R10), Y5 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 1 to 6 outputs + VMOVDQU (SI), Y9 + ADDQ $0x20, SI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 2 to 6 outputs + VMOVDQU (DI), Y9 + ADDQ $0x20, DI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 3 to 6 outputs + VMOVDQU (R8), Y9 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1152(CX), Y7 + VMOVDQU 1184(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1216(CX), Y7 + VMOVDQU 1248(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1280(CX), Y7 + VMOVDQU 1312(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1344(CX), Y7 + VMOVDQU 1376(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1408(CX), Y7 + VMOVDQU 1440(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1472(CX), Y7 + VMOVDQU 1504(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 4 to 6 outputs + VMOVDQU (R9), Y9 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1536(CX), Y7 + VMOVDQU 1568(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1600(CX), Y7 + VMOVDQU 1632(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1664(CX), Y7 + VMOVDQU 1696(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1728(CX), Y7 + VMOVDQU 1760(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1792(CX), Y7 + VMOVDQU 1824(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1856(CX), Y7 + VMOVDQU 1888(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 5 to 6 outputs + VMOVDQU (DX), Y9 + ADDQ $0x20, DX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1920(CX), Y7 + VMOVDQU 1952(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1984(CX), Y7 + VMOVDQU 2016(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2048(CX), Y7 + VMOVDQU 2080(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2112(CX), Y7 + VMOVDQU 2144(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2176(CX), Y7 + VMOVDQU 2208(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 2240(CX), Y7 + VMOVDQU 2272(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Store 6 outputs + VMOVDQU Y0, (R11) + ADDQ $0x20, R11 + VMOVDQU Y1, (R12) + ADDQ $0x20, R12 + VMOVDQU Y2, (R13) + ADDQ $0x20, R13 + VMOVDQU Y3, (R14) + ADDQ $0x20, R14 + VMOVDQU Y4, (R15) + ADDQ $0x20, R15 + VMOVDQU Y5, (R10) + ADDQ $0x20, R10 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_6x6Xor_loop + VZEROUPPER + +mulAvxTwo_6x6Xor_end: + RET + +// func mulAvxTwo_6x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x7(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 96 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_6x7_end + MOVQ in_base+24(FP), AX + MOVQ (AX), DX + MOVQ 24(AX), BX + MOVQ 48(AX), SI + MOVQ 72(AX), DI + MOVQ 96(AX), R8 + MOVQ 120(AX), AX + MOVQ out_base+48(FP), R9 + MOVQ (R9), R10 + MOVQ 24(R9), R11 + MOVQ 48(R9), R12 + MOVQ 72(R9), R13 + MOVQ 96(R9), R14 + MOVQ 120(R9), R15 + MOVQ 144(R9), R9 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R9 + + // Add start offset to input + ADDQ BP, DX + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, AX + MOVQ $0x0000000f, BP + MOVQ BP, X7 + VPBROADCASTB X7, Y7 + MOVQ n+80(FP), BP + SHRQ $0x05, BP + +mulAvxTwo_6x7_loop: + // Load and process 32 bytes from input 0 to 7 outputs + VMOVDQU (DX), Y10 + ADDQ $0x20, DX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU (CX), Y8 + VMOVDQU 32(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y0 + VMOVDQU 64(CX), Y8 + VMOVDQU 96(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y1 + VMOVDQU 128(CX), Y8 + VMOVDQU 160(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y2 + VMOVDQU 192(CX), Y8 + VMOVDQU 224(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y3 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y4 + VMOVDQU 320(CX), Y8 + VMOVDQU 352(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y5 + VMOVDQU 384(CX), Y8 + VMOVDQU 416(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y6 + + // Load and process 32 bytes from input 1 to 7 outputs + VMOVDQU (BX), Y10 + ADDQ $0x20, BX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 448(CX), Y8 + VMOVDQU 480(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 512(CX), Y8 + VMOVDQU 544(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 576(CX), Y8 + VMOVDQU 608(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 640(CX), Y8 + VMOVDQU 672(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 704(CX), Y8 + VMOVDQU 736(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 768(CX), Y8 + VMOVDQU 800(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 832(CX), Y8 + VMOVDQU 864(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 2 to 7 outputs + VMOVDQU (SI), Y10 + ADDQ $0x20, SI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 896(CX), Y8 + VMOVDQU 928(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 960(CX), Y8 + VMOVDQU 992(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1024(CX), Y8 + VMOVDQU 1056(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1088(CX), Y8 + VMOVDQU 1120(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1152(CX), Y8 + VMOVDQU 1184(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1216(CX), Y8 + VMOVDQU 1248(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1280(CX), Y8 + VMOVDQU 1312(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 3 to 7 outputs + VMOVDQU (DI), Y10 + ADDQ $0x20, DI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1344(CX), Y8 + VMOVDQU 1376(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1408(CX), Y8 + VMOVDQU 1440(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1472(CX), Y8 + VMOVDQU 1504(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1536(CX), Y8 + VMOVDQU 1568(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1600(CX), Y8 + VMOVDQU 1632(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1664(CX), Y8 + VMOVDQU 1696(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1728(CX), Y8 + VMOVDQU 1760(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 4 to 7 outputs + VMOVDQU (R8), Y10 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1792(CX), Y8 + VMOVDQU 1824(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1856(CX), Y8 + VMOVDQU 1888(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1920(CX), Y8 + VMOVDQU 1952(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1984(CX), Y8 + VMOVDQU 2016(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2048(CX), Y8 + VMOVDQU 2080(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 2112(CX), Y8 + VMOVDQU 2144(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 2176(CX), Y8 + VMOVDQU 2208(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 5 to 7 outputs + VMOVDQU (AX), Y10 + ADDQ $0x20, AX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 2240(CX), Y8 + VMOVDQU 2272(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 2304(CX), Y8 + VMOVDQU 2336(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 2368(CX), Y8 + VMOVDQU 2400(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 2432(CX), Y8 + VMOVDQU 2464(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2496(CX), Y8 + VMOVDQU 2528(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 2560(CX), Y8 + VMOVDQU 2592(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 2624(CX), Y8 + VMOVDQU 2656(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Store 7 outputs + VMOVDQU Y0, (R10) + ADDQ $0x20, R10 + VMOVDQU Y1, (R11) + ADDQ $0x20, R11 + VMOVDQU Y2, (R12) + ADDQ $0x20, R12 + VMOVDQU Y3, (R13) + ADDQ $0x20, R13 + VMOVDQU Y4, (R14) + ADDQ $0x20, R14 + VMOVDQU Y5, (R15) + ADDQ $0x20, R15 + VMOVDQU Y6, (R9) + ADDQ $0x20, R9 + + // Prepare for next loop + DECQ BP + JNZ mulAvxTwo_6x7_loop + VZEROUPPER + +mulAvxTwo_6x7_end: + RET + +// func mulAvxTwo_6x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x7Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 96 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_6x7Xor_end + MOVQ in_base+24(FP), AX + MOVQ (AX), DX + MOVQ 24(AX), BX + MOVQ 48(AX), SI + MOVQ 72(AX), DI + MOVQ 96(AX), R8 + MOVQ 120(AX), AX + MOVQ out_base+48(FP), R9 + MOVQ (R9), R10 + MOVQ 24(R9), R11 + MOVQ 48(R9), R12 + MOVQ 72(R9), R13 + MOVQ 96(R9), R14 + MOVQ 120(R9), R15 + MOVQ 144(R9), R9 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R9 + + // Add start offset to input + ADDQ BP, DX + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, AX + MOVQ $0x0000000f, BP + MOVQ BP, X7 + VPBROADCASTB X7, Y7 + MOVQ n+80(FP), BP + SHRQ $0x05, BP + +mulAvxTwo_6x7Xor_loop: + // Load and process 32 bytes from input 0 to 7 outputs + VMOVDQU (DX), Y10 + ADDQ $0x20, DX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU (R10), Y0 + VMOVDQU (CX), Y8 + VMOVDQU 32(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU (R11), Y1 + VMOVDQU 64(CX), Y8 + VMOVDQU 96(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU (R12), Y2 + VMOVDQU 128(CX), Y8 + VMOVDQU 160(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU (R13), Y3 + VMOVDQU 192(CX), Y8 + VMOVDQU 224(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU (R14), Y4 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU (R15), Y5 + VMOVDQU 320(CX), Y8 + VMOVDQU 352(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU (R9), Y6 + VMOVDQU 384(CX), Y8 + VMOVDQU 416(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 1 to 7 outputs + VMOVDQU (BX), Y10 + ADDQ $0x20, BX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 448(CX), Y8 + VMOVDQU 480(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 512(CX), Y8 + VMOVDQU 544(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 576(CX), Y8 + VMOVDQU 608(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 640(CX), Y8 + VMOVDQU 672(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 704(CX), Y8 + VMOVDQU 736(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 768(CX), Y8 + VMOVDQU 800(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 832(CX), Y8 + VMOVDQU 864(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 2 to 7 outputs + VMOVDQU (SI), Y10 + ADDQ $0x20, SI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 896(CX), Y8 + VMOVDQU 928(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 960(CX), Y8 + VMOVDQU 992(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1024(CX), Y8 + VMOVDQU 1056(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1088(CX), Y8 + VMOVDQU 1120(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1152(CX), Y8 + VMOVDQU 1184(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1216(CX), Y8 + VMOVDQU 1248(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1280(CX), Y8 + VMOVDQU 1312(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 3 to 7 outputs + VMOVDQU (DI), Y10 + ADDQ $0x20, DI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1344(CX), Y8 + VMOVDQU 1376(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1408(CX), Y8 + VMOVDQU 1440(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1472(CX), Y8 + VMOVDQU 1504(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1536(CX), Y8 + VMOVDQU 1568(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1600(CX), Y8 + VMOVDQU 1632(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1664(CX), Y8 + VMOVDQU 1696(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1728(CX), Y8 + VMOVDQU 1760(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 4 to 7 outputs + VMOVDQU (R8), Y10 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1792(CX), Y8 + VMOVDQU 1824(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1856(CX), Y8 + VMOVDQU 1888(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1920(CX), Y8 + VMOVDQU 1952(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1984(CX), Y8 + VMOVDQU 2016(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2048(CX), Y8 + VMOVDQU 2080(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 2112(CX), Y8 + VMOVDQU 2144(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 2176(CX), Y8 + VMOVDQU 2208(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 5 to 7 outputs + VMOVDQU (AX), Y10 + ADDQ $0x20, AX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 2240(CX), Y8 + VMOVDQU 2272(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 2304(CX), Y8 + VMOVDQU 2336(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 2368(CX), Y8 + VMOVDQU 2400(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 2432(CX), Y8 + VMOVDQU 2464(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2496(CX), Y8 + VMOVDQU 2528(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 2560(CX), Y8 + VMOVDQU 2592(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 2624(CX), Y8 + VMOVDQU 2656(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Store 7 outputs + VMOVDQU Y0, (R10) + ADDQ $0x20, R10 + VMOVDQU Y1, (R11) + ADDQ $0x20, R11 + VMOVDQU Y2, (R12) + ADDQ $0x20, R12 + VMOVDQU Y3, (R13) + ADDQ $0x20, R13 + VMOVDQU Y4, (R14) + ADDQ $0x20, R14 + VMOVDQU Y5, (R15) + ADDQ $0x20, R15 + VMOVDQU Y6, (R9) + ADDQ $0x20, R9 + + // Prepare for next loop + DECQ BP + JNZ mulAvxTwo_6x7Xor_loop + VZEROUPPER + +mulAvxTwo_6x7Xor_end: + RET + +// func mulAvxTwo_6x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x8(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 109 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_6x8_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), DX + MOVQ out_base+48(FP), R10 + MOVQ start+72(FP), R11 + + // Add start offset to input + ADDQ R11, BX + ADDQ R11, SI + ADDQ R11, DI + ADDQ R11, R8 + ADDQ R11, R9 + ADDQ R11, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X8 + VPBROADCASTB X8, Y8 + +mulAvxTwo_6x8_loop: + // Load and process 32 bytes from input 0 to 8 outputs + VMOVDQU (BX), Y11 + ADDQ $0x20, BX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU (CX), Y9 + VMOVDQU 32(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y0 + VMOVDQU 64(CX), Y9 + VMOVDQU 96(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y1 + VMOVDQU 128(CX), Y9 + VMOVDQU 160(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y2 + VMOVDQU 192(CX), Y9 + VMOVDQU 224(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y3 + VMOVDQU 256(CX), Y9 + VMOVDQU 288(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y4 + VMOVDQU 320(CX), Y9 + VMOVDQU 352(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y5 + VMOVDQU 384(CX), Y9 + VMOVDQU 416(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y6 + VMOVDQU 448(CX), Y9 + VMOVDQU 480(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y7 + + // Load and process 32 bytes from input 1 to 8 outputs + VMOVDQU (SI), Y11 + ADDQ $0x20, SI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 512(CX), Y9 + VMOVDQU 544(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 576(CX), Y9 + VMOVDQU 608(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y9 + VMOVDQU 672(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 704(CX), Y9 + VMOVDQU 736(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 768(CX), Y9 + VMOVDQU 800(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 832(CX), Y9 + VMOVDQU 864(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 896(CX), Y9 + VMOVDQU 928(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 960(CX), Y9 + VMOVDQU 992(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 2 to 8 outputs + VMOVDQU (DI), Y11 + ADDQ $0x20, DI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1024(CX), Y9 + VMOVDQU 1056(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1088(CX), Y9 + VMOVDQU 1120(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1152(CX), Y9 + VMOVDQU 1184(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1216(CX), Y9 + VMOVDQU 1248(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y9 + VMOVDQU 1312(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1344(CX), Y9 + VMOVDQU 1376(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1408(CX), Y9 + VMOVDQU 1440(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1472(CX), Y9 + VMOVDQU 1504(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 3 to 8 outputs + VMOVDQU (R8), Y11 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1536(CX), Y9 + VMOVDQU 1568(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1600(CX), Y9 + VMOVDQU 1632(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1664(CX), Y9 + VMOVDQU 1696(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1728(CX), Y9 + VMOVDQU 1760(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1792(CX), Y9 + VMOVDQU 1824(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1856(CX), Y9 + VMOVDQU 1888(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1920(CX), Y9 + VMOVDQU 1952(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1984(CX), Y9 + VMOVDQU 2016(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 4 to 8 outputs + VMOVDQU (R9), Y11 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 2048(CX), Y9 + VMOVDQU 2080(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 2112(CX), Y9 + VMOVDQU 2144(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 2176(CX), Y9 + VMOVDQU 2208(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 2240(CX), Y9 + VMOVDQU 2272(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 2304(CX), Y9 + VMOVDQU 2336(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 2368(CX), Y9 + VMOVDQU 2400(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 2432(CX), Y9 + VMOVDQU 2464(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 2496(CX), Y9 + VMOVDQU 2528(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 5 to 8 outputs + VMOVDQU (DX), Y11 + ADDQ $0x20, DX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 2560(CX), Y9 + VMOVDQU 2592(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 2624(CX), Y9 + VMOVDQU 2656(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 2688(CX), Y9 + VMOVDQU 2720(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 2752(CX), Y9 + VMOVDQU 2784(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 2816(CX), Y9 + VMOVDQU 2848(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 2880(CX), Y9 + VMOVDQU 2912(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 2944(CX), Y9 + VMOVDQU 2976(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 3008(CX), Y9 + VMOVDQU 3040(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Store 8 outputs + MOVQ (R10), R12 + VMOVDQU Y0, (R12)(R11*1) + MOVQ 24(R10), R12 + VMOVDQU Y1, (R12)(R11*1) + MOVQ 48(R10), R12 + VMOVDQU Y2, (R12)(R11*1) + MOVQ 72(R10), R12 + VMOVDQU Y3, (R12)(R11*1) + MOVQ 96(R10), R12 + VMOVDQU Y4, (R12)(R11*1) + MOVQ 120(R10), R12 + VMOVDQU Y5, (R12)(R11*1) + MOVQ 144(R10), R12 + VMOVDQU Y6, (R12)(R11*1) + MOVQ 168(R10), R12 + VMOVDQU Y7, (R12)(R11*1) + + // Prepare for next loop + ADDQ $0x20, R11 + DECQ AX + JNZ mulAvxTwo_6x8_loop + VZEROUPPER + +mulAvxTwo_6x8_end: + RET + +// func mulAvxTwo_6x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x8Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 109 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_6x8Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), DX + MOVQ out_base+48(FP), R10 + MOVQ start+72(FP), R11 + + // Add start offset to input + ADDQ R11, BX + ADDQ R11, SI + ADDQ R11, DI + ADDQ R11, R8 + ADDQ R11, R9 + ADDQ R11, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X8 + VPBROADCASTB X8, Y8 + +mulAvxTwo_6x8Xor_loop: + // Load and process 32 bytes from input 0 to 8 outputs + VMOVDQU (BX), Y11 + ADDQ $0x20, BX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + MOVQ (R10), R12 + VMOVDQU (R12)(R11*1), Y0 + VMOVDQU (CX), Y9 + VMOVDQU 32(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + MOVQ 24(R10), R12 + VMOVDQU (R12)(R11*1), Y1 + VMOVDQU 64(CX), Y9 + VMOVDQU 96(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + MOVQ 48(R10), R12 + VMOVDQU (R12)(R11*1), Y2 + VMOVDQU 128(CX), Y9 + VMOVDQU 160(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + MOVQ 72(R10), R12 + VMOVDQU (R12)(R11*1), Y3 + VMOVDQU 192(CX), Y9 + VMOVDQU 224(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + MOVQ 96(R10), R12 + VMOVDQU (R12)(R11*1), Y4 + VMOVDQU 256(CX), Y9 + VMOVDQU 288(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + MOVQ 120(R10), R12 + VMOVDQU (R12)(R11*1), Y5 + VMOVDQU 320(CX), Y9 + VMOVDQU 352(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + MOVQ 144(R10), R12 + VMOVDQU (R12)(R11*1), Y6 + VMOVDQU 384(CX), Y9 + VMOVDQU 416(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + MOVQ 168(R10), R12 + VMOVDQU (R12)(R11*1), Y7 + VMOVDQU 448(CX), Y9 + VMOVDQU 480(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 1 to 8 outputs + VMOVDQU (SI), Y11 + ADDQ $0x20, SI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 512(CX), Y9 + VMOVDQU 544(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 576(CX), Y9 + VMOVDQU 608(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y9 + VMOVDQU 672(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 704(CX), Y9 + VMOVDQU 736(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 768(CX), Y9 + VMOVDQU 800(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 832(CX), Y9 + VMOVDQU 864(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 896(CX), Y9 + VMOVDQU 928(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 960(CX), Y9 + VMOVDQU 992(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 2 to 8 outputs + VMOVDQU (DI), Y11 + ADDQ $0x20, DI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1024(CX), Y9 + VMOVDQU 1056(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1088(CX), Y9 + VMOVDQU 1120(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1152(CX), Y9 + VMOVDQU 1184(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1216(CX), Y9 + VMOVDQU 1248(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y9 + VMOVDQU 1312(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1344(CX), Y9 + VMOVDQU 1376(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1408(CX), Y9 + VMOVDQU 1440(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1472(CX), Y9 + VMOVDQU 1504(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 3 to 8 outputs + VMOVDQU (R8), Y11 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1536(CX), Y9 + VMOVDQU 1568(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1600(CX), Y9 + VMOVDQU 1632(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1664(CX), Y9 + VMOVDQU 1696(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1728(CX), Y9 + VMOVDQU 1760(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1792(CX), Y9 + VMOVDQU 1824(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1856(CX), Y9 + VMOVDQU 1888(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1920(CX), Y9 + VMOVDQU 1952(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1984(CX), Y9 + VMOVDQU 2016(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 4 to 8 outputs + VMOVDQU (R9), Y11 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 2048(CX), Y9 + VMOVDQU 2080(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 2112(CX), Y9 + VMOVDQU 2144(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 2176(CX), Y9 + VMOVDQU 2208(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 2240(CX), Y9 + VMOVDQU 2272(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 2304(CX), Y9 + VMOVDQU 2336(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 2368(CX), Y9 + VMOVDQU 2400(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 2432(CX), Y9 + VMOVDQU 2464(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 2496(CX), Y9 + VMOVDQU 2528(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 5 to 8 outputs + VMOVDQU (DX), Y11 + ADDQ $0x20, DX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 2560(CX), Y9 + VMOVDQU 2592(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 2624(CX), Y9 + VMOVDQU 2656(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 2688(CX), Y9 + VMOVDQU 2720(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 2752(CX), Y9 + VMOVDQU 2784(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 2816(CX), Y9 + VMOVDQU 2848(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 2880(CX), Y9 + VMOVDQU 2912(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 2944(CX), Y9 + VMOVDQU 2976(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 3008(CX), Y9 + VMOVDQU 3040(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Store 8 outputs + MOVQ (R10), R12 + VMOVDQU Y0, (R12)(R11*1) + MOVQ 24(R10), R12 + VMOVDQU Y1, (R12)(R11*1) + MOVQ 48(R10), R12 + VMOVDQU Y2, (R12)(R11*1) + MOVQ 72(R10), R12 + VMOVDQU Y3, (R12)(R11*1) + MOVQ 96(R10), R12 + VMOVDQU Y4, (R12)(R11*1) + MOVQ 120(R10), R12 + VMOVDQU Y5, (R12)(R11*1) + MOVQ 144(R10), R12 + VMOVDQU Y6, (R12)(R11*1) + MOVQ 168(R10), R12 + VMOVDQU Y7, (R12)(R11*1) + + // Prepare for next loop + ADDQ $0x20, R11 + DECQ AX + JNZ mulAvxTwo_6x8Xor_loop + VZEROUPPER + +mulAvxTwo_6x8Xor_end: + RET + +// func mulAvxTwo_6x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x9(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 122 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_6x9_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), DX + MOVQ out_base+48(FP), R10 + MOVQ start+72(FP), R11 + + // Add start offset to input + ADDQ R11, BX + ADDQ R11, SI + ADDQ R11, DI + ADDQ R11, R8 + ADDQ R11, R9 + ADDQ R11, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X9 + VPBROADCASTB X9, Y9 + +mulAvxTwo_6x9_loop: + // Load and process 32 bytes from input 0 to 9 outputs + VMOVDQU (BX), Y12 + ADDQ $0x20, BX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU (CX), Y10 + VMOVDQU 32(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y0 + VMOVDQU 64(CX), Y10 + VMOVDQU 96(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y1 + VMOVDQU 128(CX), Y10 + VMOVDQU 160(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y2 + VMOVDQU 192(CX), Y10 + VMOVDQU 224(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y3 + VMOVDQU 256(CX), Y10 + VMOVDQU 288(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y4 + VMOVDQU 320(CX), Y10 + VMOVDQU 352(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y5 + VMOVDQU 384(CX), Y10 + VMOVDQU 416(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y6 + VMOVDQU 448(CX), Y10 + VMOVDQU 480(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y7 + VMOVDQU 512(CX), Y10 + VMOVDQU 544(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y8 + + // Load and process 32 bytes from input 1 to 9 outputs + VMOVDQU (SI), Y12 + ADDQ $0x20, SI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 576(CX), Y10 + VMOVDQU 608(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 640(CX), Y10 + VMOVDQU 672(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 704(CX), Y10 + VMOVDQU 736(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 768(CX), Y10 + VMOVDQU 800(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 832(CX), Y10 + VMOVDQU 864(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 896(CX), Y10 + VMOVDQU 928(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 960(CX), Y10 + VMOVDQU 992(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1024(CX), Y10 + VMOVDQU 1056(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1088(CX), Y10 + VMOVDQU 1120(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 2 to 9 outputs + VMOVDQU (DI), Y12 + ADDQ $0x20, DI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1152(CX), Y10 + VMOVDQU 1184(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1216(CX), Y10 + VMOVDQU 1248(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1280(CX), Y10 + VMOVDQU 1312(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1344(CX), Y10 + VMOVDQU 1376(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1408(CX), Y10 + VMOVDQU 1440(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 1472(CX), Y10 + VMOVDQU 1504(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 1536(CX), Y10 + VMOVDQU 1568(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1600(CX), Y10 + VMOVDQU 1632(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1664(CX), Y10 + VMOVDQU 1696(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 3 to 9 outputs + VMOVDQU (R8), Y12 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1728(CX), Y10 + VMOVDQU 1760(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1792(CX), Y10 + VMOVDQU 1824(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1856(CX), Y10 + VMOVDQU 1888(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1920(CX), Y10 + VMOVDQU 1952(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1984(CX), Y10 + VMOVDQU 2016(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2048(CX), Y10 + VMOVDQU 2080(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2112(CX), Y10 + VMOVDQU 2144(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2176(CX), Y10 + VMOVDQU 2208(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2240(CX), Y10 + VMOVDQU 2272(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 4 to 9 outputs + VMOVDQU (R9), Y12 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 2304(CX), Y10 + VMOVDQU 2336(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 2368(CX), Y10 + VMOVDQU 2400(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 2432(CX), Y10 + VMOVDQU 2464(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 2496(CX), Y10 + VMOVDQU 2528(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 2560(CX), Y10 + VMOVDQU 2592(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2624(CX), Y10 + VMOVDQU 2656(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2688(CX), Y10 + VMOVDQU 2720(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2752(CX), Y10 + VMOVDQU 2784(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2816(CX), Y10 + VMOVDQU 2848(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 5 to 9 outputs + VMOVDQU (DX), Y12 + ADDQ $0x20, DX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 2880(CX), Y10 + VMOVDQU 2912(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 2944(CX), Y10 + VMOVDQU 2976(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 3008(CX), Y10 + VMOVDQU 3040(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 3072(CX), Y10 + VMOVDQU 3104(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 3136(CX), Y10 + VMOVDQU 3168(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 3200(CX), Y10 + VMOVDQU 3232(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 3264(CX), Y10 + VMOVDQU 3296(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 3328(CX), Y10 + VMOVDQU 3360(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 3392(CX), Y10 + VMOVDQU 3424(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Store 9 outputs + MOVQ (R10), R12 + VMOVDQU Y0, (R12)(R11*1) + MOVQ 24(R10), R12 + VMOVDQU Y1, (R12)(R11*1) + MOVQ 48(R10), R12 + VMOVDQU Y2, (R12)(R11*1) + MOVQ 72(R10), R12 + VMOVDQU Y3, (R12)(R11*1) + MOVQ 96(R10), R12 + VMOVDQU Y4, (R12)(R11*1) + MOVQ 120(R10), R12 + VMOVDQU Y5, (R12)(R11*1) + MOVQ 144(R10), R12 + VMOVDQU Y6, (R12)(R11*1) + MOVQ 168(R10), R12 + VMOVDQU Y7, (R12)(R11*1) + MOVQ 192(R10), R12 + VMOVDQU Y8, (R12)(R11*1) + + // Prepare for next loop + ADDQ $0x20, R11 + DECQ AX + JNZ mulAvxTwo_6x9_loop + VZEROUPPER + +mulAvxTwo_6x9_end: + RET + +// func mulAvxTwo_6x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x9Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 122 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_6x9Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), DX + MOVQ out_base+48(FP), R10 + MOVQ start+72(FP), R11 + + // Add start offset to input + ADDQ R11, BX + ADDQ R11, SI + ADDQ R11, DI + ADDQ R11, R8 + ADDQ R11, R9 + ADDQ R11, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X9 + VPBROADCASTB X9, Y9 + +mulAvxTwo_6x9Xor_loop: + // Load and process 32 bytes from input 0 to 9 outputs + VMOVDQU (BX), Y12 + ADDQ $0x20, BX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + MOVQ (R10), R12 + VMOVDQU (R12)(R11*1), Y0 + VMOVDQU (CX), Y10 + VMOVDQU 32(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + MOVQ 24(R10), R12 + VMOVDQU (R12)(R11*1), Y1 + VMOVDQU 64(CX), Y10 + VMOVDQU 96(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + MOVQ 48(R10), R12 + VMOVDQU (R12)(R11*1), Y2 + VMOVDQU 128(CX), Y10 + VMOVDQU 160(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + MOVQ 72(R10), R12 + VMOVDQU (R12)(R11*1), Y3 + VMOVDQU 192(CX), Y10 + VMOVDQU 224(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + MOVQ 96(R10), R12 + VMOVDQU (R12)(R11*1), Y4 + VMOVDQU 256(CX), Y10 + VMOVDQU 288(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + MOVQ 120(R10), R12 + VMOVDQU (R12)(R11*1), Y5 + VMOVDQU 320(CX), Y10 + VMOVDQU 352(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + MOVQ 144(R10), R12 + VMOVDQU (R12)(R11*1), Y6 + VMOVDQU 384(CX), Y10 + VMOVDQU 416(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + MOVQ 168(R10), R12 + VMOVDQU (R12)(R11*1), Y7 + VMOVDQU 448(CX), Y10 + VMOVDQU 480(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + MOVQ 192(R10), R12 + VMOVDQU (R12)(R11*1), Y8 + VMOVDQU 512(CX), Y10 + VMOVDQU 544(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 1 to 9 outputs + VMOVDQU (SI), Y12 + ADDQ $0x20, SI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 576(CX), Y10 + VMOVDQU 608(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 640(CX), Y10 + VMOVDQU 672(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 704(CX), Y10 + VMOVDQU 736(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 768(CX), Y10 + VMOVDQU 800(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 832(CX), Y10 + VMOVDQU 864(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 896(CX), Y10 + VMOVDQU 928(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 960(CX), Y10 + VMOVDQU 992(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1024(CX), Y10 + VMOVDQU 1056(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1088(CX), Y10 + VMOVDQU 1120(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 2 to 9 outputs + VMOVDQU (DI), Y12 + ADDQ $0x20, DI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1152(CX), Y10 + VMOVDQU 1184(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1216(CX), Y10 + VMOVDQU 1248(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1280(CX), Y10 + VMOVDQU 1312(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1344(CX), Y10 + VMOVDQU 1376(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1408(CX), Y10 + VMOVDQU 1440(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 1472(CX), Y10 + VMOVDQU 1504(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 1536(CX), Y10 + VMOVDQU 1568(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1600(CX), Y10 + VMOVDQU 1632(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1664(CX), Y10 + VMOVDQU 1696(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 3 to 9 outputs + VMOVDQU (R8), Y12 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1728(CX), Y10 + VMOVDQU 1760(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1792(CX), Y10 + VMOVDQU 1824(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1856(CX), Y10 + VMOVDQU 1888(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1920(CX), Y10 + VMOVDQU 1952(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1984(CX), Y10 + VMOVDQU 2016(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2048(CX), Y10 + VMOVDQU 2080(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2112(CX), Y10 + VMOVDQU 2144(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2176(CX), Y10 + VMOVDQU 2208(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2240(CX), Y10 + VMOVDQU 2272(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 4 to 9 outputs + VMOVDQU (R9), Y12 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 2304(CX), Y10 + VMOVDQU 2336(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 2368(CX), Y10 + VMOVDQU 2400(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 2432(CX), Y10 + VMOVDQU 2464(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 2496(CX), Y10 + VMOVDQU 2528(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 2560(CX), Y10 + VMOVDQU 2592(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2624(CX), Y10 + VMOVDQU 2656(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2688(CX), Y10 + VMOVDQU 2720(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2752(CX), Y10 + VMOVDQU 2784(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2816(CX), Y10 + VMOVDQU 2848(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 5 to 9 outputs + VMOVDQU (DX), Y12 + ADDQ $0x20, DX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 2880(CX), Y10 + VMOVDQU 2912(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 2944(CX), Y10 + VMOVDQU 2976(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 3008(CX), Y10 + VMOVDQU 3040(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 3072(CX), Y10 + VMOVDQU 3104(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 3136(CX), Y10 + VMOVDQU 3168(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 3200(CX), Y10 + VMOVDQU 3232(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 3264(CX), Y10 + VMOVDQU 3296(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 3328(CX), Y10 + VMOVDQU 3360(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 3392(CX), Y10 + VMOVDQU 3424(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Store 9 outputs + MOVQ (R10), R12 + VMOVDQU Y0, (R12)(R11*1) + MOVQ 24(R10), R12 + VMOVDQU Y1, (R12)(R11*1) + MOVQ 48(R10), R12 + VMOVDQU Y2, (R12)(R11*1) + MOVQ 72(R10), R12 + VMOVDQU Y3, (R12)(R11*1) + MOVQ 96(R10), R12 + VMOVDQU Y4, (R12)(R11*1) + MOVQ 120(R10), R12 + VMOVDQU Y5, (R12)(R11*1) + MOVQ 144(R10), R12 + VMOVDQU Y6, (R12)(R11*1) + MOVQ 168(R10), R12 + VMOVDQU Y7, (R12)(R11*1) + MOVQ 192(R10), R12 + VMOVDQU Y8, (R12)(R11*1) + + // Prepare for next loop + ADDQ $0x20, R11 + DECQ AX + JNZ mulAvxTwo_6x9Xor_loop + VZEROUPPER + +mulAvxTwo_6x9Xor_end: + RET + +// func mulAvxTwo_6x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x10(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 135 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_6x10_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), DX + MOVQ out_base+48(FP), R10 + MOVQ start+72(FP), R11 + + // Add start offset to input + ADDQ R11, BX + ADDQ R11, SI + ADDQ R11, DI + ADDQ R11, R8 + ADDQ R11, R9 + ADDQ R11, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X10 + VPBROADCASTB X10, Y10 + +mulAvxTwo_6x10_loop: + // Load and process 32 bytes from input 0 to 10 outputs + VMOVDQU (BX), Y13 + ADDQ $0x20, BX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU (CX), Y11 + VMOVDQU 32(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y0 + VMOVDQU 64(CX), Y11 + VMOVDQU 96(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y1 + VMOVDQU 128(CX), Y11 + VMOVDQU 160(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y2 + VMOVDQU 192(CX), Y11 + VMOVDQU 224(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y3 + VMOVDQU 256(CX), Y11 + VMOVDQU 288(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y4 + VMOVDQU 320(CX), Y11 + VMOVDQU 352(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y5 + VMOVDQU 384(CX), Y11 + VMOVDQU 416(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y6 + VMOVDQU 448(CX), Y11 + VMOVDQU 480(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y7 + VMOVDQU 512(CX), Y11 + VMOVDQU 544(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y8 + VMOVDQU 576(CX), Y11 + VMOVDQU 608(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y9 + + // Load and process 32 bytes from input 1 to 10 outputs + VMOVDQU (SI), Y13 + ADDQ $0x20, SI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 640(CX), Y11 + VMOVDQU 672(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 704(CX), Y11 + VMOVDQU 736(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 768(CX), Y11 + VMOVDQU 800(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 832(CX), Y11 + VMOVDQU 864(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 896(CX), Y11 + VMOVDQU 928(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 960(CX), Y11 + VMOVDQU 992(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1024(CX), Y11 + VMOVDQU 1056(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1088(CX), Y11 + VMOVDQU 1120(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1152(CX), Y11 + VMOVDQU 1184(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1216(CX), Y11 + VMOVDQU 1248(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 2 to 10 outputs + VMOVDQU (DI), Y13 + ADDQ $0x20, DI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1280(CX), Y11 + VMOVDQU 1312(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1344(CX), Y11 + VMOVDQU 1376(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 1408(CX), Y11 + VMOVDQU 1440(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 1472(CX), Y11 + VMOVDQU 1504(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 1536(CX), Y11 + VMOVDQU 1568(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 1600(CX), Y11 + VMOVDQU 1632(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1664(CX), Y11 + VMOVDQU 1696(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1728(CX), Y11 + VMOVDQU 1760(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1792(CX), Y11 + VMOVDQU 1824(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1856(CX), Y11 + VMOVDQU 1888(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 3 to 10 outputs + VMOVDQU (R8), Y13 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1920(CX), Y11 + VMOVDQU 1952(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1984(CX), Y11 + VMOVDQU 2016(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2048(CX), Y11 + VMOVDQU 2080(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2112(CX), Y11 + VMOVDQU 2144(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2176(CX), Y11 + VMOVDQU 2208(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2240(CX), Y11 + VMOVDQU 2272(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2304(CX), Y11 + VMOVDQU 2336(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 2368(CX), Y11 + VMOVDQU 2400(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 2432(CX), Y11 + VMOVDQU 2464(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 2496(CX), Y11 + VMOVDQU 2528(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 4 to 10 outputs + VMOVDQU (R9), Y13 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 2560(CX), Y11 + VMOVDQU 2592(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 2624(CX), Y11 + VMOVDQU 2656(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2688(CX), Y11 + VMOVDQU 2720(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2752(CX), Y11 + VMOVDQU 2784(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2816(CX), Y11 + VMOVDQU 2848(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2880(CX), Y11 + VMOVDQU 2912(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2944(CX), Y11 + VMOVDQU 2976(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 3008(CX), Y11 + VMOVDQU 3040(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 3072(CX), Y11 + VMOVDQU 3104(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 3136(CX), Y11 + VMOVDQU 3168(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 5 to 10 outputs + VMOVDQU (DX), Y13 + ADDQ $0x20, DX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 3200(CX), Y11 + VMOVDQU 3232(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 3264(CX), Y11 + VMOVDQU 3296(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 3328(CX), Y11 + VMOVDQU 3360(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 3392(CX), Y11 + VMOVDQU 3424(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 3456(CX), Y11 + VMOVDQU 3488(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 3520(CX), Y11 + VMOVDQU 3552(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 3584(CX), Y11 + VMOVDQU 3616(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 3648(CX), Y11 + VMOVDQU 3680(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 3712(CX), Y11 + VMOVDQU 3744(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 3776(CX), Y11 + VMOVDQU 3808(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Store 10 outputs + MOVQ (R10), R12 + VMOVDQU Y0, (R12)(R11*1) + MOVQ 24(R10), R12 + VMOVDQU Y1, (R12)(R11*1) + MOVQ 48(R10), R12 + VMOVDQU Y2, (R12)(R11*1) + MOVQ 72(R10), R12 + VMOVDQU Y3, (R12)(R11*1) + MOVQ 96(R10), R12 + VMOVDQU Y4, (R12)(R11*1) + MOVQ 120(R10), R12 + VMOVDQU Y5, (R12)(R11*1) + MOVQ 144(R10), R12 + VMOVDQU Y6, (R12)(R11*1) + MOVQ 168(R10), R12 + VMOVDQU Y7, (R12)(R11*1) + MOVQ 192(R10), R12 + VMOVDQU Y8, (R12)(R11*1) + MOVQ 216(R10), R12 + VMOVDQU Y9, (R12)(R11*1) + + // Prepare for next loop + ADDQ $0x20, R11 + DECQ AX + JNZ mulAvxTwo_6x10_loop + VZEROUPPER + +mulAvxTwo_6x10_end: + RET + +// func mulAvxTwo_6x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_6x10Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 135 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_6x10Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), DX + MOVQ out_base+48(FP), R10 + MOVQ start+72(FP), R11 + + // Add start offset to input + ADDQ R11, BX + ADDQ R11, SI + ADDQ R11, DI + ADDQ R11, R8 + ADDQ R11, R9 + ADDQ R11, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X10 + VPBROADCASTB X10, Y10 + +mulAvxTwo_6x10Xor_loop: + // Load and process 32 bytes from input 0 to 10 outputs + VMOVDQU (BX), Y13 + ADDQ $0x20, BX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + MOVQ (R10), R12 + VMOVDQU (R12)(R11*1), Y0 + VMOVDQU (CX), Y11 + VMOVDQU 32(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + MOVQ 24(R10), R12 + VMOVDQU (R12)(R11*1), Y1 + VMOVDQU 64(CX), Y11 + VMOVDQU 96(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + MOVQ 48(R10), R12 + VMOVDQU (R12)(R11*1), Y2 + VMOVDQU 128(CX), Y11 + VMOVDQU 160(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + MOVQ 72(R10), R12 + VMOVDQU (R12)(R11*1), Y3 + VMOVDQU 192(CX), Y11 + VMOVDQU 224(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + MOVQ 96(R10), R12 + VMOVDQU (R12)(R11*1), Y4 + VMOVDQU 256(CX), Y11 + VMOVDQU 288(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + MOVQ 120(R10), R12 + VMOVDQU (R12)(R11*1), Y5 + VMOVDQU 320(CX), Y11 + VMOVDQU 352(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + MOVQ 144(R10), R12 + VMOVDQU (R12)(R11*1), Y6 + VMOVDQU 384(CX), Y11 + VMOVDQU 416(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + MOVQ 168(R10), R12 + VMOVDQU (R12)(R11*1), Y7 + VMOVDQU 448(CX), Y11 + VMOVDQU 480(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + MOVQ 192(R10), R12 + VMOVDQU (R12)(R11*1), Y8 + VMOVDQU 512(CX), Y11 + VMOVDQU 544(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + MOVQ 216(R10), R12 + VMOVDQU (R12)(R11*1), Y9 + VMOVDQU 576(CX), Y11 + VMOVDQU 608(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 1 to 10 outputs + VMOVDQU (SI), Y13 + ADDQ $0x20, SI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 640(CX), Y11 + VMOVDQU 672(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 704(CX), Y11 + VMOVDQU 736(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 768(CX), Y11 + VMOVDQU 800(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 832(CX), Y11 + VMOVDQU 864(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 896(CX), Y11 + VMOVDQU 928(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 960(CX), Y11 + VMOVDQU 992(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1024(CX), Y11 + VMOVDQU 1056(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1088(CX), Y11 + VMOVDQU 1120(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1152(CX), Y11 + VMOVDQU 1184(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1216(CX), Y11 + VMOVDQU 1248(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 2 to 10 outputs + VMOVDQU (DI), Y13 + ADDQ $0x20, DI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1280(CX), Y11 + VMOVDQU 1312(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1344(CX), Y11 + VMOVDQU 1376(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 1408(CX), Y11 + VMOVDQU 1440(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 1472(CX), Y11 + VMOVDQU 1504(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 1536(CX), Y11 + VMOVDQU 1568(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 1600(CX), Y11 + VMOVDQU 1632(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1664(CX), Y11 + VMOVDQU 1696(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1728(CX), Y11 + VMOVDQU 1760(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1792(CX), Y11 + VMOVDQU 1824(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1856(CX), Y11 + VMOVDQU 1888(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 3 to 10 outputs + VMOVDQU (R8), Y13 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1920(CX), Y11 + VMOVDQU 1952(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1984(CX), Y11 + VMOVDQU 2016(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2048(CX), Y11 + VMOVDQU 2080(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2112(CX), Y11 + VMOVDQU 2144(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2176(CX), Y11 + VMOVDQU 2208(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2240(CX), Y11 + VMOVDQU 2272(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2304(CX), Y11 + VMOVDQU 2336(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 2368(CX), Y11 + VMOVDQU 2400(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 2432(CX), Y11 + VMOVDQU 2464(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 2496(CX), Y11 + VMOVDQU 2528(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 4 to 10 outputs + VMOVDQU (R9), Y13 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 2560(CX), Y11 + VMOVDQU 2592(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 2624(CX), Y11 + VMOVDQU 2656(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2688(CX), Y11 + VMOVDQU 2720(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2752(CX), Y11 + VMOVDQU 2784(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2816(CX), Y11 + VMOVDQU 2848(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2880(CX), Y11 + VMOVDQU 2912(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2944(CX), Y11 + VMOVDQU 2976(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 3008(CX), Y11 + VMOVDQU 3040(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 3072(CX), Y11 + VMOVDQU 3104(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 3136(CX), Y11 + VMOVDQU 3168(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 5 to 10 outputs + VMOVDQU (DX), Y13 + ADDQ $0x20, DX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 3200(CX), Y11 + VMOVDQU 3232(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 3264(CX), Y11 + VMOVDQU 3296(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 3328(CX), Y11 + VMOVDQU 3360(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 3392(CX), Y11 + VMOVDQU 3424(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 3456(CX), Y11 + VMOVDQU 3488(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 3520(CX), Y11 + VMOVDQU 3552(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 3584(CX), Y11 + VMOVDQU 3616(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 3648(CX), Y11 + VMOVDQU 3680(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 3712(CX), Y11 + VMOVDQU 3744(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 3776(CX), Y11 + VMOVDQU 3808(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Store 10 outputs + MOVQ (R10), R12 + VMOVDQU Y0, (R12)(R11*1) + MOVQ 24(R10), R12 + VMOVDQU Y1, (R12)(R11*1) + MOVQ 48(R10), R12 + VMOVDQU Y2, (R12)(R11*1) + MOVQ 72(R10), R12 + VMOVDQU Y3, (R12)(R11*1) + MOVQ 96(R10), R12 + VMOVDQU Y4, (R12)(R11*1) + MOVQ 120(R10), R12 + VMOVDQU Y5, (R12)(R11*1) + MOVQ 144(R10), R12 + VMOVDQU Y6, (R12)(R11*1) + MOVQ 168(R10), R12 + VMOVDQU Y7, (R12)(R11*1) + MOVQ 192(R10), R12 + VMOVDQU Y8, (R12)(R11*1) + MOVQ 216(R10), R12 + VMOVDQU Y9, (R12)(R11*1) + + // Prepare for next loop + ADDQ $0x20, R11 + DECQ AX + JNZ mulAvxTwo_6x10Xor_loop + VZEROUPPER + +mulAvxTwo_6x10Xor_end: + RET + +// func mulAvxTwo_7x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x1(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 18 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_7x1_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ (R11), R11 + MOVQ start+72(FP), R12 + + // Add start offset to output + ADDQ R12, R11 + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, R9 + ADDQ R12, R10 + ADDQ R12, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X1 + VPBROADCASTB X1, Y1 + +mulAvxTwo_7x1_loop: + // Load and process 32 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y4 + ADDQ $0x20, BX + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU (CX), Y2 + VMOVDQU 32(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y0 + + // Load and process 32 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y4 + ADDQ $0x20, SI + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 2 to 1 outputs + VMOVDQU (DI), Y4 + ADDQ $0x20, DI + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 128(CX), Y2 + VMOVDQU 160(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 3 to 1 outputs + VMOVDQU (R8), Y4 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 192(CX), Y2 + VMOVDQU 224(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 4 to 1 outputs + VMOVDQU (R9), Y4 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 256(CX), Y2 + VMOVDQU 288(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 5 to 1 outputs + VMOVDQU (R10), Y4 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 320(CX), Y2 + VMOVDQU 352(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 6 to 1 outputs + VMOVDQU (DX), Y4 + ADDQ $0x20, DX + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 384(CX), Y2 + VMOVDQU 416(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Store 1 outputs + VMOVDQU Y0, (R11) + ADDQ $0x20, R11 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_7x1_loop + VZEROUPPER + +mulAvxTwo_7x1_end: + RET + +// func mulAvxTwo_7x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x1_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 34 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_7x1_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ out_base+48(FP), R11 + MOVQ (R11), R11 + MOVQ start+72(FP), R12 + + // Add start offset to output + ADDQ R12, R11 + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, R9 + ADDQ R12, R10 + ADDQ R12, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_7x1_64_loop: + // Load and process 64 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y6 + VMOVDQU 32(BX), Y5 + ADDQ $0x40, BX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y0 + VPXOR Y5, Y6, Y1 + + // Load and process 64 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y6 + VMOVDQU 32(SI), Y5 + ADDQ $0x40, SI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 2 to 1 outputs + VMOVDQU (DI), Y6 + VMOVDQU 32(DI), Y5 + ADDQ $0x40, DI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 3 to 1 outputs + VMOVDQU (R8), Y6 + VMOVDQU 32(R8), Y5 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 4 to 1 outputs + VMOVDQU (R9), Y6 + VMOVDQU 32(R9), Y5 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 5 to 1 outputs + VMOVDQU (R10), Y6 + VMOVDQU 32(R10), Y5 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 6 to 1 outputs + VMOVDQU (DX), Y6 + VMOVDQU 32(DX), Y5 + ADDQ $0x40, DX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 384(CX), Y3 + VMOVDQU 416(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Store 1 outputs + VMOVDQU Y0, (R11) + VMOVDQU Y1, 32(R11) + ADDQ $0x40, R11 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_7x1_64_loop + VZEROUPPER + +mulAvxTwo_7x1_64_end: + RET + +// func mulAvxTwo_7x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x1Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 18 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_7x1Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ (R11), R11 + MOVQ start+72(FP), R12 + + // Add start offset to output + ADDQ R12, R11 + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, R9 + ADDQ R12, R10 + ADDQ R12, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X1 + VPBROADCASTB X1, Y1 + +mulAvxTwo_7x1Xor_loop: + // Load and process 32 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y4 + ADDQ $0x20, BX + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU (R11), Y0 + VMOVDQU (CX), Y2 + VMOVDQU 32(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y4 + ADDQ $0x20, SI + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 2 to 1 outputs + VMOVDQU (DI), Y4 + ADDQ $0x20, DI + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 128(CX), Y2 + VMOVDQU 160(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 3 to 1 outputs + VMOVDQU (R8), Y4 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 192(CX), Y2 + VMOVDQU 224(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 4 to 1 outputs + VMOVDQU (R9), Y4 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 256(CX), Y2 + VMOVDQU 288(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 5 to 1 outputs + VMOVDQU (R10), Y4 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 320(CX), Y2 + VMOVDQU 352(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 6 to 1 outputs + VMOVDQU (DX), Y4 + ADDQ $0x20, DX + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 384(CX), Y2 + VMOVDQU 416(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Store 1 outputs + VMOVDQU Y0, (R11) + ADDQ $0x20, R11 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_7x1Xor_loop + VZEROUPPER + +mulAvxTwo_7x1Xor_end: + RET + +// func mulAvxTwo_7x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x1_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 34 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_7x1_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ out_base+48(FP), R11 + MOVQ (R11), R11 + MOVQ start+72(FP), R12 + + // Add start offset to output + ADDQ R12, R11 + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, R9 + ADDQ R12, R10 + ADDQ R12, DX + MOVQ $0x0000000f, R12 + MOVQ R12, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_7x1_64Xor_loop: + // Load 1 outputs + VMOVDQU (R11), Y0 + VMOVDQU 32(R11), Y1 + + // Load and process 64 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y6 + VMOVDQU 32(BX), Y5 + ADDQ $0x40, BX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y6 + VMOVDQU 32(SI), Y5 + ADDQ $0x40, SI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 2 to 1 outputs + VMOVDQU (DI), Y6 + VMOVDQU 32(DI), Y5 + ADDQ $0x40, DI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 3 to 1 outputs + VMOVDQU (R8), Y6 + VMOVDQU 32(R8), Y5 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 4 to 1 outputs + VMOVDQU (R9), Y6 + VMOVDQU 32(R9), Y5 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 5 to 1 outputs + VMOVDQU (R10), Y6 + VMOVDQU 32(R10), Y5 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 6 to 1 outputs + VMOVDQU (DX), Y6 + VMOVDQU 32(DX), Y5 + ADDQ $0x40, DX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 384(CX), Y3 + VMOVDQU 416(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Store 1 outputs + VMOVDQU Y0, (R11) + VMOVDQU Y1, 32(R11) + ADDQ $0x40, R11 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_7x1_64Xor_loop + VZEROUPPER + +mulAvxTwo_7x1_64Xor_end: + RET + +// func mulAvxTwo_7x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x2(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 35 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_7x2_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ (R11), R12 + MOVQ 24(R11), R11 + MOVQ start+72(FP), R13 + + // Add start offset to output + ADDQ R13, R12 + ADDQ R13, R11 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_7x2_loop: + // Load and process 32 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y5 + ADDQ $0x20, BX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y0 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y1 + + // Load and process 32 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y5 + ADDQ $0x20, SI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y5 + ADDQ $0x20, DI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y5 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 384(CX), Y3 + VMOVDQU 416(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 448(CX), Y3 + VMOVDQU 480(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 4 to 2 outputs + VMOVDQU (R9), Y5 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 512(CX), Y3 + VMOVDQU 544(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 576(CX), Y3 + VMOVDQU 608(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 5 to 2 outputs + VMOVDQU (R10), Y5 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 640(CX), Y3 + VMOVDQU 672(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 704(CX), Y3 + VMOVDQU 736(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 6 to 2 outputs + VMOVDQU (DX), Y5 + ADDQ $0x20, DX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 768(CX), Y3 + VMOVDQU 800(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 832(CX), Y3 + VMOVDQU 864(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Store 2 outputs + VMOVDQU Y0, (R12) + ADDQ $0x20, R12 + VMOVDQU Y1, (R11) + ADDQ $0x20, R11 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_7x2_loop + VZEROUPPER + +mulAvxTwo_7x2_end: + RET + +// func mulAvxTwo_7x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x2_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 65 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_7x2_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ out_base+48(FP), R11 + MOVQ (R11), R12 + MOVQ 24(R11), R11 + MOVQ start+72(FP), R13 + + // Add start offset to output + ADDQ R13, R12 + ADDQ R13, R11 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_7x2_64_loop: + // Load and process 64 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y9 + VMOVDQU 32(BX), Y11 + ADDQ $0x40, BX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y0 + VPXOR Y7, Y8, Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y2 + VPXOR Y7, Y8, Y3 + + // Load and process 64 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y9 + VMOVDQU 32(SI), Y11 + ADDQ $0x40, SI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y9 + VMOVDQU 32(DI), Y11 + ADDQ $0x40, DI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y9 + VMOVDQU 32(R8), Y11 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 4 to 2 outputs + VMOVDQU (R9), Y9 + VMOVDQU 32(R9), Y11 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 5 to 2 outputs + VMOVDQU (R10), Y9 + VMOVDQU 32(R10), Y11 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 6 to 2 outputs + VMOVDQU (DX), Y9 + VMOVDQU 32(DX), Y11 + ADDQ $0x40, DX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 768(CX), Y5 + VMOVDQU 800(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 832(CX), Y5 + VMOVDQU 864(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Store 2 outputs + VMOVDQU Y0, (R12) + VMOVDQU Y1, 32(R12) + ADDQ $0x40, R12 + VMOVDQU Y2, (R11) + VMOVDQU Y3, 32(R11) + ADDQ $0x40, R11 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_7x2_64_loop + VZEROUPPER + +mulAvxTwo_7x2_64_end: + RET + +// func mulAvxTwo_7x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x2Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 35 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_7x2Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ (R11), R12 + MOVQ 24(R11), R11 + MOVQ start+72(FP), R13 + + // Add start offset to output + ADDQ R13, R12 + ADDQ R13, R11 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_7x2Xor_loop: + // Load and process 32 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y5 + ADDQ $0x20, BX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU (R12), Y0 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU (R11), Y1 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y5 + ADDQ $0x20, SI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y5 + ADDQ $0x20, DI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y5 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 384(CX), Y3 + VMOVDQU 416(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 448(CX), Y3 + VMOVDQU 480(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 4 to 2 outputs + VMOVDQU (R9), Y5 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 512(CX), Y3 + VMOVDQU 544(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 576(CX), Y3 + VMOVDQU 608(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 5 to 2 outputs + VMOVDQU (R10), Y5 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 640(CX), Y3 + VMOVDQU 672(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 704(CX), Y3 + VMOVDQU 736(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 6 to 2 outputs + VMOVDQU (DX), Y5 + ADDQ $0x20, DX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 768(CX), Y3 + VMOVDQU 800(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 832(CX), Y3 + VMOVDQU 864(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Store 2 outputs + VMOVDQU Y0, (R12) + ADDQ $0x20, R12 + VMOVDQU Y1, (R11) + ADDQ $0x20, R11 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_7x2Xor_loop + VZEROUPPER + +mulAvxTwo_7x2Xor_end: + RET + +// func mulAvxTwo_7x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x2_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 65 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_7x2_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ out_base+48(FP), R11 + MOVQ (R11), R12 + MOVQ 24(R11), R11 + MOVQ start+72(FP), R13 + + // Add start offset to output + ADDQ R13, R12 + ADDQ R13, R11 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_7x2_64Xor_loop: + // Load 2 outputs + VMOVDQU (R12), Y0 + VMOVDQU 32(R12), Y1 + VMOVDQU (R11), Y2 + VMOVDQU 32(R11), Y3 + + // Load and process 64 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y9 + VMOVDQU 32(BX), Y11 + ADDQ $0x40, BX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y9 + VMOVDQU 32(SI), Y11 + ADDQ $0x40, SI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y9 + VMOVDQU 32(DI), Y11 + ADDQ $0x40, DI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y9 + VMOVDQU 32(R8), Y11 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 4 to 2 outputs + VMOVDQU (R9), Y9 + VMOVDQU 32(R9), Y11 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 5 to 2 outputs + VMOVDQU (R10), Y9 + VMOVDQU 32(R10), Y11 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 6 to 2 outputs + VMOVDQU (DX), Y9 + VMOVDQU 32(DX), Y11 + ADDQ $0x40, DX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 768(CX), Y5 + VMOVDQU 800(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 832(CX), Y5 + VMOVDQU 864(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Store 2 outputs + VMOVDQU Y0, (R12) + VMOVDQU Y1, 32(R12) + ADDQ $0x40, R12 + VMOVDQU Y2, (R11) + VMOVDQU Y3, 32(R11) + ADDQ $0x40, R11 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_7x2_64Xor_loop + VZEROUPPER + +mulAvxTwo_7x2_64Xor_end: + RET + +// func mulAvxTwo_7x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x3(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 50 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_7x3_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ (R11), R12 + MOVQ 24(R11), R13 + MOVQ 48(R11), R11 + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, R12 + ADDQ R14, R13 + ADDQ R14, R11 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X3 + VPBROADCASTB X3, Y3 + +mulAvxTwo_7x3_loop: + // Load and process 32 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y6 + ADDQ $0x20, BX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU (CX), Y4 + VMOVDQU 32(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y0 + VMOVDQU 64(CX), Y4 + VMOVDQU 96(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y1 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y2 + + // Load and process 32 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y6 + ADDQ $0x20, SI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 192(CX), Y4 + VMOVDQU 224(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 256(CX), Y4 + VMOVDQU 288(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 320(CX), Y4 + VMOVDQU 352(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y6 + ADDQ $0x20, DI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 384(CX), Y4 + VMOVDQU 416(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 448(CX), Y4 + VMOVDQU 480(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 512(CX), Y4 + VMOVDQU 544(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 3 to 3 outputs + VMOVDQU (R8), Y6 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 576(CX), Y4 + VMOVDQU 608(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 640(CX), Y4 + VMOVDQU 672(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 704(CX), Y4 + VMOVDQU 736(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 4 to 3 outputs + VMOVDQU (R9), Y6 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 768(CX), Y4 + VMOVDQU 800(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 832(CX), Y4 + VMOVDQU 864(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 896(CX), Y4 + VMOVDQU 928(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 5 to 3 outputs + VMOVDQU (R10), Y6 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 960(CX), Y4 + VMOVDQU 992(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1024(CX), Y4 + VMOVDQU 1056(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1088(CX), Y4 + VMOVDQU 1120(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 6 to 3 outputs + VMOVDQU (DX), Y6 + ADDQ $0x20, DX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 1152(CX), Y4 + VMOVDQU 1184(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1216(CX), Y4 + VMOVDQU 1248(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1280(CX), Y4 + VMOVDQU 1312(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Store 3 outputs + VMOVDQU Y0, (R12) + ADDQ $0x20, R12 + VMOVDQU Y1, (R13) + ADDQ $0x20, R13 + VMOVDQU Y2, (R11) + ADDQ $0x20, R11 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_7x3_loop + VZEROUPPER + +mulAvxTwo_7x3_end: + RET + +// func mulAvxTwo_7x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x3_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 94 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_7x3_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ out_base+48(FP), R11 + MOVQ (R11), R12 + MOVQ 24(R11), R13 + MOVQ 48(R11), R11 + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, R12 + ADDQ R14, R13 + ADDQ R14, R11 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_7x3_64_loop: + // Load and process 64 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y11 + VMOVDQU 32(BX), Y13 + ADDQ $0x40, BX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y0 + VPXOR Y9, Y10, Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y2 + VPXOR Y9, Y10, Y3 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y4 + VPXOR Y9, Y10, Y5 + + // Load and process 64 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y11 + VMOVDQU 32(SI), Y13 + ADDQ $0x40, SI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y11 + VMOVDQU 32(DI), Y13 + ADDQ $0x40, DI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 3 to 3 outputs + VMOVDQU (R8), Y11 + VMOVDQU 32(R8), Y13 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 4 to 3 outputs + VMOVDQU (R9), Y11 + VMOVDQU 32(R9), Y13 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 5 to 3 outputs + VMOVDQU (R10), Y11 + VMOVDQU 32(R10), Y13 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 6 to 3 outputs + VMOVDQU (DX), Y11 + VMOVDQU 32(DX), Y13 + ADDQ $0x40, DX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 1152(CX), Y7 + VMOVDQU 1184(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1216(CX), Y7 + VMOVDQU 1248(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y7 + VMOVDQU 1312(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Store 3 outputs + VMOVDQU Y0, (R12) + VMOVDQU Y1, 32(R12) + ADDQ $0x40, R12 + VMOVDQU Y2, (R13) + VMOVDQU Y3, 32(R13) + ADDQ $0x40, R13 + VMOVDQU Y4, (R11) + VMOVDQU Y5, 32(R11) + ADDQ $0x40, R11 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_7x3_64_loop + VZEROUPPER + +mulAvxTwo_7x3_64_end: + RET + +// func mulAvxTwo_7x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x3Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 50 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_7x3Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ (R11), R12 + MOVQ 24(R11), R13 + MOVQ 48(R11), R11 + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, R12 + ADDQ R14, R13 + ADDQ R14, R11 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X3 + VPBROADCASTB X3, Y3 + +mulAvxTwo_7x3Xor_loop: + // Load and process 32 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y6 + ADDQ $0x20, BX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU (R12), Y0 + VMOVDQU (CX), Y4 + VMOVDQU 32(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU (R13), Y1 + VMOVDQU 64(CX), Y4 + VMOVDQU 96(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU (R11), Y2 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y6 + ADDQ $0x20, SI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 192(CX), Y4 + VMOVDQU 224(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 256(CX), Y4 + VMOVDQU 288(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 320(CX), Y4 + VMOVDQU 352(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y6 + ADDQ $0x20, DI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 384(CX), Y4 + VMOVDQU 416(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 448(CX), Y4 + VMOVDQU 480(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 512(CX), Y4 + VMOVDQU 544(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 3 to 3 outputs + VMOVDQU (R8), Y6 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 576(CX), Y4 + VMOVDQU 608(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 640(CX), Y4 + VMOVDQU 672(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 704(CX), Y4 + VMOVDQU 736(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 4 to 3 outputs + VMOVDQU (R9), Y6 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 768(CX), Y4 + VMOVDQU 800(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 832(CX), Y4 + VMOVDQU 864(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 896(CX), Y4 + VMOVDQU 928(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 5 to 3 outputs + VMOVDQU (R10), Y6 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 960(CX), Y4 + VMOVDQU 992(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1024(CX), Y4 + VMOVDQU 1056(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1088(CX), Y4 + VMOVDQU 1120(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 6 to 3 outputs + VMOVDQU (DX), Y6 + ADDQ $0x20, DX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 1152(CX), Y4 + VMOVDQU 1184(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1216(CX), Y4 + VMOVDQU 1248(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1280(CX), Y4 + VMOVDQU 1312(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Store 3 outputs + VMOVDQU Y0, (R12) + ADDQ $0x20, R12 + VMOVDQU Y1, (R13) + ADDQ $0x20, R13 + VMOVDQU Y2, (R11) + ADDQ $0x20, R11 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_7x3Xor_loop + VZEROUPPER + +mulAvxTwo_7x3Xor_end: + RET + +// func mulAvxTwo_7x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x3_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 94 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_7x3_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ out_base+48(FP), R11 + MOVQ (R11), R12 + MOVQ 24(R11), R13 + MOVQ 48(R11), R11 + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, R12 + ADDQ R14, R13 + ADDQ R14, R11 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_7x3_64Xor_loop: + // Load 3 outputs + VMOVDQU (R12), Y0 + VMOVDQU 32(R12), Y1 + VMOVDQU (R13), Y2 + VMOVDQU 32(R13), Y3 + VMOVDQU (R11), Y4 + VMOVDQU 32(R11), Y5 + + // Load and process 64 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y11 + VMOVDQU 32(BX), Y13 + ADDQ $0x40, BX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y11 + VMOVDQU 32(SI), Y13 + ADDQ $0x40, SI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y11 + VMOVDQU 32(DI), Y13 + ADDQ $0x40, DI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 3 to 3 outputs + VMOVDQU (R8), Y11 + VMOVDQU 32(R8), Y13 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 4 to 3 outputs + VMOVDQU (R9), Y11 + VMOVDQU 32(R9), Y13 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 5 to 3 outputs + VMOVDQU (R10), Y11 + VMOVDQU 32(R10), Y13 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 6 to 3 outputs + VMOVDQU (DX), Y11 + VMOVDQU 32(DX), Y13 + ADDQ $0x40, DX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 1152(CX), Y7 + VMOVDQU 1184(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1216(CX), Y7 + VMOVDQU 1248(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y7 + VMOVDQU 1312(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Store 3 outputs + VMOVDQU Y0, (R12) + VMOVDQU Y1, 32(R12) + ADDQ $0x40, R12 + VMOVDQU Y2, (R13) + VMOVDQU Y3, 32(R13) + ADDQ $0x40, R13 + VMOVDQU Y4, (R11) + VMOVDQU Y5, 32(R11) + ADDQ $0x40, R11 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_7x3_64Xor_loop + VZEROUPPER + +mulAvxTwo_7x3_64Xor_end: + RET + +// func mulAvxTwo_7x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x4(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 65 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_7x4_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ (R11), R12 + MOVQ 24(R11), R13 + MOVQ 48(R11), R14 + MOVQ 72(R11), R11 + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, R14 + ADDQ R15, R11 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_7x4_loop: + // Load and process 32 bytes from input 0 to 4 outputs + VMOVDQU (BX), Y7 + ADDQ $0x20, BX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y0 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y1 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y2 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y3 + + // Load and process 32 bytes from input 1 to 4 outputs + VMOVDQU (SI), Y7 + ADDQ $0x20, SI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 2 to 4 outputs + VMOVDQU (DI), Y7 + ADDQ $0x20, DI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 3 to 4 outputs + VMOVDQU (R8), Y7 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 768(CX), Y5 + VMOVDQU 800(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 832(CX), Y5 + VMOVDQU 864(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 896(CX), Y5 + VMOVDQU 928(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 960(CX), Y5 + VMOVDQU 992(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 4 to 4 outputs + VMOVDQU (R9), Y7 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1024(CX), Y5 + VMOVDQU 1056(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1088(CX), Y5 + VMOVDQU 1120(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1152(CX), Y5 + VMOVDQU 1184(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1216(CX), Y5 + VMOVDQU 1248(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 5 to 4 outputs + VMOVDQU (R10), Y7 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1280(CX), Y5 + VMOVDQU 1312(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1344(CX), Y5 + VMOVDQU 1376(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1408(CX), Y5 + VMOVDQU 1440(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1472(CX), Y5 + VMOVDQU 1504(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 6 to 4 outputs + VMOVDQU (DX), Y7 + ADDQ $0x20, DX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1536(CX), Y5 + VMOVDQU 1568(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1600(CX), Y5 + VMOVDQU 1632(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1664(CX), Y5 + VMOVDQU 1696(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1728(CX), Y5 + VMOVDQU 1760(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Store 4 outputs + VMOVDQU Y0, (R12) + ADDQ $0x20, R12 + VMOVDQU Y1, (R13) + ADDQ $0x20, R13 + VMOVDQU Y2, (R14) + ADDQ $0x20, R14 + VMOVDQU Y3, (R11) + ADDQ $0x20, R11 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_7x4_loop + VZEROUPPER + +mulAvxTwo_7x4_end: + RET + +// func mulAvxTwo_7x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x4Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 65 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_7x4Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ (R11), R12 + MOVQ 24(R11), R13 + MOVQ 48(R11), R14 + MOVQ 72(R11), R11 + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, R14 + ADDQ R15, R11 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_7x4Xor_loop: + // Load and process 32 bytes from input 0 to 4 outputs + VMOVDQU (BX), Y7 + ADDQ $0x20, BX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU (R12), Y0 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU (R13), Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU (R14), Y2 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU (R11), Y3 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 1 to 4 outputs + VMOVDQU (SI), Y7 + ADDQ $0x20, SI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 2 to 4 outputs + VMOVDQU (DI), Y7 + ADDQ $0x20, DI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 3 to 4 outputs + VMOVDQU (R8), Y7 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 768(CX), Y5 + VMOVDQU 800(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 832(CX), Y5 + VMOVDQU 864(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 896(CX), Y5 + VMOVDQU 928(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 960(CX), Y5 + VMOVDQU 992(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 4 to 4 outputs + VMOVDQU (R9), Y7 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1024(CX), Y5 + VMOVDQU 1056(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1088(CX), Y5 + VMOVDQU 1120(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1152(CX), Y5 + VMOVDQU 1184(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1216(CX), Y5 + VMOVDQU 1248(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 5 to 4 outputs + VMOVDQU (R10), Y7 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1280(CX), Y5 + VMOVDQU 1312(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1344(CX), Y5 + VMOVDQU 1376(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1408(CX), Y5 + VMOVDQU 1440(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1472(CX), Y5 + VMOVDQU 1504(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 6 to 4 outputs + VMOVDQU (DX), Y7 + ADDQ $0x20, DX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1536(CX), Y5 + VMOVDQU 1568(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1600(CX), Y5 + VMOVDQU 1632(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1664(CX), Y5 + VMOVDQU 1696(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1728(CX), Y5 + VMOVDQU 1760(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Store 4 outputs + VMOVDQU Y0, (R12) + ADDQ $0x20, R12 + VMOVDQU Y1, (R13) + ADDQ $0x20, R13 + VMOVDQU Y2, (R14) + ADDQ $0x20, R14 + VMOVDQU Y3, (R11) + ADDQ $0x20, R11 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_7x4Xor_loop + VZEROUPPER + +mulAvxTwo_7x4Xor_end: + RET + +// func mulAvxTwo_7x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x5(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 80 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_7x5_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ (R11), R12 + MOVQ 24(R11), R13 + MOVQ 48(R11), R14 + MOVQ 72(R11), R15 + MOVQ 96(R11), R11 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R11 + + // Add start offset to input + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, DX + MOVQ $0x0000000f, BP + MOVQ BP, X5 + VPBROADCASTB X5, Y5 + +mulAvxTwo_7x5_loop: + // Load and process 32 bytes from input 0 to 5 outputs + VMOVDQU (BX), Y8 + ADDQ $0x20, BX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU (CX), Y6 + VMOVDQU 32(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y0 + VMOVDQU 64(CX), Y6 + VMOVDQU 96(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y1 + VMOVDQU 128(CX), Y6 + VMOVDQU 160(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y2 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y3 + VMOVDQU 256(CX), Y6 + VMOVDQU 288(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y4 + + // Load and process 32 bytes from input 1 to 5 outputs + VMOVDQU (SI), Y8 + ADDQ $0x20, SI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 320(CX), Y6 + VMOVDQU 352(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 384(CX), Y6 + VMOVDQU 416(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 448(CX), Y6 + VMOVDQU 480(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 512(CX), Y6 + VMOVDQU 544(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 576(CX), Y6 + VMOVDQU 608(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 2 to 5 outputs + VMOVDQU (DI), Y8 + ADDQ $0x20, DI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 640(CX), Y6 + VMOVDQU 672(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 704(CX), Y6 + VMOVDQU 736(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 768(CX), Y6 + VMOVDQU 800(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 832(CX), Y6 + VMOVDQU 864(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 896(CX), Y6 + VMOVDQU 928(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 3 to 5 outputs + VMOVDQU (R8), Y8 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 960(CX), Y6 + VMOVDQU 992(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1024(CX), Y6 + VMOVDQU 1056(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1088(CX), Y6 + VMOVDQU 1120(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1152(CX), Y6 + VMOVDQU 1184(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1216(CX), Y6 + VMOVDQU 1248(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 4 to 5 outputs + VMOVDQU (R9), Y8 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1280(CX), Y6 + VMOVDQU 1312(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1344(CX), Y6 + VMOVDQU 1376(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1408(CX), Y6 + VMOVDQU 1440(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1472(CX), Y6 + VMOVDQU 1504(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1536(CX), Y6 + VMOVDQU 1568(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 5 to 5 outputs + VMOVDQU (R10), Y8 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1600(CX), Y6 + VMOVDQU 1632(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1664(CX), Y6 + VMOVDQU 1696(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1728(CX), Y6 + VMOVDQU 1760(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1792(CX), Y6 + VMOVDQU 1824(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1856(CX), Y6 + VMOVDQU 1888(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 6 to 5 outputs + VMOVDQU (DX), Y8 + ADDQ $0x20, DX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1920(CX), Y6 + VMOVDQU 1952(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1984(CX), Y6 + VMOVDQU 2016(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 2048(CX), Y6 + VMOVDQU 2080(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 2112(CX), Y6 + VMOVDQU 2144(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 2176(CX), Y6 + VMOVDQU 2208(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Store 5 outputs + VMOVDQU Y0, (R12) + ADDQ $0x20, R12 + VMOVDQU Y1, (R13) + ADDQ $0x20, R13 + VMOVDQU Y2, (R14) + ADDQ $0x20, R14 + VMOVDQU Y3, (R15) + ADDQ $0x20, R15 + VMOVDQU Y4, (R11) + ADDQ $0x20, R11 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_7x5_loop + VZEROUPPER + +mulAvxTwo_7x5_end: + RET + +// func mulAvxTwo_7x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x5Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 80 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_7x5Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ (R11), R12 + MOVQ 24(R11), R13 + MOVQ 48(R11), R14 + MOVQ 72(R11), R15 + MOVQ 96(R11), R11 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R11 + + // Add start offset to input + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, DX + MOVQ $0x0000000f, BP + MOVQ BP, X5 + VPBROADCASTB X5, Y5 + +mulAvxTwo_7x5Xor_loop: + // Load and process 32 bytes from input 0 to 5 outputs + VMOVDQU (BX), Y8 + ADDQ $0x20, BX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU (R12), Y0 + VMOVDQU (CX), Y6 + VMOVDQU 32(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU (R13), Y1 + VMOVDQU 64(CX), Y6 + VMOVDQU 96(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU (R14), Y2 + VMOVDQU 128(CX), Y6 + VMOVDQU 160(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU (R15), Y3 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU (R11), Y4 + VMOVDQU 256(CX), Y6 + VMOVDQU 288(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 1 to 5 outputs + VMOVDQU (SI), Y8 + ADDQ $0x20, SI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 320(CX), Y6 + VMOVDQU 352(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 384(CX), Y6 + VMOVDQU 416(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 448(CX), Y6 + VMOVDQU 480(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 512(CX), Y6 + VMOVDQU 544(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 576(CX), Y6 + VMOVDQU 608(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 2 to 5 outputs + VMOVDQU (DI), Y8 + ADDQ $0x20, DI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 640(CX), Y6 + VMOVDQU 672(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 704(CX), Y6 + VMOVDQU 736(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 768(CX), Y6 + VMOVDQU 800(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 832(CX), Y6 + VMOVDQU 864(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 896(CX), Y6 + VMOVDQU 928(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 3 to 5 outputs + VMOVDQU (R8), Y8 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 960(CX), Y6 + VMOVDQU 992(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1024(CX), Y6 + VMOVDQU 1056(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1088(CX), Y6 + VMOVDQU 1120(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1152(CX), Y6 + VMOVDQU 1184(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1216(CX), Y6 + VMOVDQU 1248(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 4 to 5 outputs + VMOVDQU (R9), Y8 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1280(CX), Y6 + VMOVDQU 1312(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1344(CX), Y6 + VMOVDQU 1376(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1408(CX), Y6 + VMOVDQU 1440(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1472(CX), Y6 + VMOVDQU 1504(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1536(CX), Y6 + VMOVDQU 1568(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 5 to 5 outputs + VMOVDQU (R10), Y8 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1600(CX), Y6 + VMOVDQU 1632(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1664(CX), Y6 + VMOVDQU 1696(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1728(CX), Y6 + VMOVDQU 1760(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1792(CX), Y6 + VMOVDQU 1824(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1856(CX), Y6 + VMOVDQU 1888(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 6 to 5 outputs + VMOVDQU (DX), Y8 + ADDQ $0x20, DX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1920(CX), Y6 + VMOVDQU 1952(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1984(CX), Y6 + VMOVDQU 2016(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 2048(CX), Y6 + VMOVDQU 2080(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 2112(CX), Y6 + VMOVDQU 2144(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 2176(CX), Y6 + VMOVDQU 2208(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Store 5 outputs + VMOVDQU Y0, (R12) + ADDQ $0x20, R12 + VMOVDQU Y1, (R13) + ADDQ $0x20, R13 + VMOVDQU Y2, (R14) + ADDQ $0x20, R14 + VMOVDQU Y3, (R15) + ADDQ $0x20, R15 + VMOVDQU Y4, (R11) + ADDQ $0x20, R11 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_7x5Xor_loop + VZEROUPPER + +mulAvxTwo_7x5Xor_end: + RET + +// func mulAvxTwo_7x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x6(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 95 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_7x6_end + MOVQ in_base+24(FP), AX + MOVQ (AX), DX + MOVQ 24(AX), BX + MOVQ 48(AX), SI + MOVQ 72(AX), DI + MOVQ 96(AX), R8 + MOVQ 120(AX), R9 + MOVQ 144(AX), AX + MOVQ out_base+48(FP), R10 + MOVQ (R10), R11 + MOVQ 24(R10), R12 + MOVQ 48(R10), R13 + MOVQ 72(R10), R14 + MOVQ 96(R10), R15 + MOVQ 120(R10), R10 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R10 + + // Add start offset to input + ADDQ BP, DX + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, AX + MOVQ $0x0000000f, BP + MOVQ BP, X6 + VPBROADCASTB X6, Y6 + MOVQ n+80(FP), BP + SHRQ $0x05, BP + +mulAvxTwo_7x6_loop: + // Load and process 32 bytes from input 0 to 6 outputs + VMOVDQU (DX), Y9 + ADDQ $0x20, DX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y0 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y1 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y2 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y3 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y4 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y5 + + // Load and process 32 bytes from input 1 to 6 outputs + VMOVDQU (BX), Y9 + ADDQ $0x20, BX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 2 to 6 outputs + VMOVDQU (SI), Y9 + ADDQ $0x20, SI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 3 to 6 outputs + VMOVDQU (DI), Y9 + ADDQ $0x20, DI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1152(CX), Y7 + VMOVDQU 1184(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1216(CX), Y7 + VMOVDQU 1248(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1280(CX), Y7 + VMOVDQU 1312(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1344(CX), Y7 + VMOVDQU 1376(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1408(CX), Y7 + VMOVDQU 1440(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1472(CX), Y7 + VMOVDQU 1504(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 4 to 6 outputs + VMOVDQU (R8), Y9 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1536(CX), Y7 + VMOVDQU 1568(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1600(CX), Y7 + VMOVDQU 1632(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1664(CX), Y7 + VMOVDQU 1696(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1728(CX), Y7 + VMOVDQU 1760(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1792(CX), Y7 + VMOVDQU 1824(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1856(CX), Y7 + VMOVDQU 1888(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 5 to 6 outputs + VMOVDQU (R9), Y9 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1920(CX), Y7 + VMOVDQU 1952(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1984(CX), Y7 + VMOVDQU 2016(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2048(CX), Y7 + VMOVDQU 2080(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2112(CX), Y7 + VMOVDQU 2144(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2176(CX), Y7 + VMOVDQU 2208(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 2240(CX), Y7 + VMOVDQU 2272(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 6 to 6 outputs + VMOVDQU (AX), Y9 + ADDQ $0x20, AX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 2304(CX), Y7 + VMOVDQU 2336(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 2368(CX), Y7 + VMOVDQU 2400(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2432(CX), Y7 + VMOVDQU 2464(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2496(CX), Y7 + VMOVDQU 2528(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2560(CX), Y7 + VMOVDQU 2592(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 2624(CX), Y7 + VMOVDQU 2656(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Store 6 outputs + VMOVDQU Y0, (R11) + ADDQ $0x20, R11 + VMOVDQU Y1, (R12) + ADDQ $0x20, R12 + VMOVDQU Y2, (R13) + ADDQ $0x20, R13 + VMOVDQU Y3, (R14) + ADDQ $0x20, R14 + VMOVDQU Y4, (R15) + ADDQ $0x20, R15 + VMOVDQU Y5, (R10) + ADDQ $0x20, R10 + + // Prepare for next loop + DECQ BP + JNZ mulAvxTwo_7x6_loop + VZEROUPPER + +mulAvxTwo_7x6_end: + RET + +// func mulAvxTwo_7x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x6Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 95 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_7x6Xor_end + MOVQ in_base+24(FP), AX + MOVQ (AX), DX + MOVQ 24(AX), BX + MOVQ 48(AX), SI + MOVQ 72(AX), DI + MOVQ 96(AX), R8 + MOVQ 120(AX), R9 + MOVQ 144(AX), AX + MOVQ out_base+48(FP), R10 + MOVQ (R10), R11 + MOVQ 24(R10), R12 + MOVQ 48(R10), R13 + MOVQ 72(R10), R14 + MOVQ 96(R10), R15 + MOVQ 120(R10), R10 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R10 + + // Add start offset to input + ADDQ BP, DX + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, AX + MOVQ $0x0000000f, BP + MOVQ BP, X6 + VPBROADCASTB X6, Y6 + MOVQ n+80(FP), BP + SHRQ $0x05, BP + +mulAvxTwo_7x6Xor_loop: + // Load and process 32 bytes from input 0 to 6 outputs + VMOVDQU (DX), Y9 + ADDQ $0x20, DX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU (R11), Y0 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU (R12), Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU (R13), Y2 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU (R14), Y3 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU (R15), Y4 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU (R10), Y5 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 1 to 6 outputs + VMOVDQU (BX), Y9 + ADDQ $0x20, BX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 2 to 6 outputs + VMOVDQU (SI), Y9 + ADDQ $0x20, SI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 3 to 6 outputs + VMOVDQU (DI), Y9 + ADDQ $0x20, DI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1152(CX), Y7 + VMOVDQU 1184(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1216(CX), Y7 + VMOVDQU 1248(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1280(CX), Y7 + VMOVDQU 1312(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1344(CX), Y7 + VMOVDQU 1376(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1408(CX), Y7 + VMOVDQU 1440(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1472(CX), Y7 + VMOVDQU 1504(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 4 to 6 outputs + VMOVDQU (R8), Y9 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1536(CX), Y7 + VMOVDQU 1568(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1600(CX), Y7 + VMOVDQU 1632(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1664(CX), Y7 + VMOVDQU 1696(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1728(CX), Y7 + VMOVDQU 1760(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1792(CX), Y7 + VMOVDQU 1824(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1856(CX), Y7 + VMOVDQU 1888(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 5 to 6 outputs + VMOVDQU (R9), Y9 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1920(CX), Y7 + VMOVDQU 1952(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1984(CX), Y7 + VMOVDQU 2016(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2048(CX), Y7 + VMOVDQU 2080(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2112(CX), Y7 + VMOVDQU 2144(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2176(CX), Y7 + VMOVDQU 2208(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 2240(CX), Y7 + VMOVDQU 2272(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 6 to 6 outputs + VMOVDQU (AX), Y9 + ADDQ $0x20, AX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 2304(CX), Y7 + VMOVDQU 2336(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 2368(CX), Y7 + VMOVDQU 2400(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2432(CX), Y7 + VMOVDQU 2464(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2496(CX), Y7 + VMOVDQU 2528(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2560(CX), Y7 + VMOVDQU 2592(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 2624(CX), Y7 + VMOVDQU 2656(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Store 6 outputs + VMOVDQU Y0, (R11) + ADDQ $0x20, R11 + VMOVDQU Y1, (R12) + ADDQ $0x20, R12 + VMOVDQU Y2, (R13) + ADDQ $0x20, R13 + VMOVDQU Y3, (R14) + ADDQ $0x20, R14 + VMOVDQU Y4, (R15) + ADDQ $0x20, R15 + VMOVDQU Y5, (R10) + ADDQ $0x20, R10 + + // Prepare for next loop + DECQ BP + JNZ mulAvxTwo_7x6Xor_loop + VZEROUPPER + +mulAvxTwo_7x6Xor_end: + RET + +// func mulAvxTwo_7x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x7(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 110 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_7x7_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ start+72(FP), R12 + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, R9 + ADDQ R12, R10 + ADDQ R12, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X7 + VPBROADCASTB X7, Y7 + +mulAvxTwo_7x7_loop: + // Load and process 32 bytes from input 0 to 7 outputs + VMOVDQU (BX), Y10 + ADDQ $0x20, BX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU (CX), Y8 + VMOVDQU 32(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y0 + VMOVDQU 64(CX), Y8 + VMOVDQU 96(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y1 + VMOVDQU 128(CX), Y8 + VMOVDQU 160(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y2 + VMOVDQU 192(CX), Y8 + VMOVDQU 224(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y3 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y4 + VMOVDQU 320(CX), Y8 + VMOVDQU 352(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y5 + VMOVDQU 384(CX), Y8 + VMOVDQU 416(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y6 + + // Load and process 32 bytes from input 1 to 7 outputs + VMOVDQU (SI), Y10 + ADDQ $0x20, SI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 448(CX), Y8 + VMOVDQU 480(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 512(CX), Y8 + VMOVDQU 544(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 576(CX), Y8 + VMOVDQU 608(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 640(CX), Y8 + VMOVDQU 672(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 704(CX), Y8 + VMOVDQU 736(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 768(CX), Y8 + VMOVDQU 800(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 832(CX), Y8 + VMOVDQU 864(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 2 to 7 outputs + VMOVDQU (DI), Y10 + ADDQ $0x20, DI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 896(CX), Y8 + VMOVDQU 928(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 960(CX), Y8 + VMOVDQU 992(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1024(CX), Y8 + VMOVDQU 1056(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1088(CX), Y8 + VMOVDQU 1120(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1152(CX), Y8 + VMOVDQU 1184(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1216(CX), Y8 + VMOVDQU 1248(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1280(CX), Y8 + VMOVDQU 1312(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 3 to 7 outputs + VMOVDQU (R8), Y10 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1344(CX), Y8 + VMOVDQU 1376(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1408(CX), Y8 + VMOVDQU 1440(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1472(CX), Y8 + VMOVDQU 1504(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1536(CX), Y8 + VMOVDQU 1568(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1600(CX), Y8 + VMOVDQU 1632(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1664(CX), Y8 + VMOVDQU 1696(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1728(CX), Y8 + VMOVDQU 1760(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 4 to 7 outputs + VMOVDQU (R9), Y10 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1792(CX), Y8 + VMOVDQU 1824(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1856(CX), Y8 + VMOVDQU 1888(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1920(CX), Y8 + VMOVDQU 1952(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1984(CX), Y8 + VMOVDQU 2016(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2048(CX), Y8 + VMOVDQU 2080(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 2112(CX), Y8 + VMOVDQU 2144(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 2176(CX), Y8 + VMOVDQU 2208(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 5 to 7 outputs + VMOVDQU (R10), Y10 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 2240(CX), Y8 + VMOVDQU 2272(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 2304(CX), Y8 + VMOVDQU 2336(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 2368(CX), Y8 + VMOVDQU 2400(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 2432(CX), Y8 + VMOVDQU 2464(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2496(CX), Y8 + VMOVDQU 2528(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 2560(CX), Y8 + VMOVDQU 2592(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 2624(CX), Y8 + VMOVDQU 2656(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 6 to 7 outputs + VMOVDQU (DX), Y10 + ADDQ $0x20, DX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 2688(CX), Y8 + VMOVDQU 2720(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 2752(CX), Y8 + VMOVDQU 2784(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 2816(CX), Y8 + VMOVDQU 2848(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 2880(CX), Y8 + VMOVDQU 2912(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2944(CX), Y8 + VMOVDQU 2976(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 3008(CX), Y8 + VMOVDQU 3040(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 3072(CX), Y8 + VMOVDQU 3104(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Store 7 outputs + MOVQ (R11), R13 + VMOVDQU Y0, (R13)(R12*1) + MOVQ 24(R11), R13 + VMOVDQU Y1, (R13)(R12*1) + MOVQ 48(R11), R13 + VMOVDQU Y2, (R13)(R12*1) + MOVQ 72(R11), R13 + VMOVDQU Y3, (R13)(R12*1) + MOVQ 96(R11), R13 + VMOVDQU Y4, (R13)(R12*1) + MOVQ 120(R11), R13 + VMOVDQU Y5, (R13)(R12*1) + MOVQ 144(R11), R13 + VMOVDQU Y6, (R13)(R12*1) + + // Prepare for next loop + ADDQ $0x20, R12 + DECQ AX + JNZ mulAvxTwo_7x7_loop + VZEROUPPER + +mulAvxTwo_7x7_end: + RET + +// func mulAvxTwo_7x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x7Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 110 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_7x7Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ start+72(FP), R12 + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, R9 + ADDQ R12, R10 + ADDQ R12, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X7 + VPBROADCASTB X7, Y7 + +mulAvxTwo_7x7Xor_loop: + // Load and process 32 bytes from input 0 to 7 outputs + VMOVDQU (BX), Y10 + ADDQ $0x20, BX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + MOVQ (R11), R13 + VMOVDQU (R13)(R12*1), Y0 + VMOVDQU (CX), Y8 + VMOVDQU 32(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + MOVQ 24(R11), R13 + VMOVDQU (R13)(R12*1), Y1 + VMOVDQU 64(CX), Y8 + VMOVDQU 96(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + MOVQ 48(R11), R13 + VMOVDQU (R13)(R12*1), Y2 + VMOVDQU 128(CX), Y8 + VMOVDQU 160(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + MOVQ 72(R11), R13 + VMOVDQU (R13)(R12*1), Y3 + VMOVDQU 192(CX), Y8 + VMOVDQU 224(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + MOVQ 96(R11), R13 + VMOVDQU (R13)(R12*1), Y4 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + MOVQ 120(R11), R13 + VMOVDQU (R13)(R12*1), Y5 + VMOVDQU 320(CX), Y8 + VMOVDQU 352(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + MOVQ 144(R11), R13 + VMOVDQU (R13)(R12*1), Y6 + VMOVDQU 384(CX), Y8 + VMOVDQU 416(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 1 to 7 outputs + VMOVDQU (SI), Y10 + ADDQ $0x20, SI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 448(CX), Y8 + VMOVDQU 480(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 512(CX), Y8 + VMOVDQU 544(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 576(CX), Y8 + VMOVDQU 608(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 640(CX), Y8 + VMOVDQU 672(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 704(CX), Y8 + VMOVDQU 736(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 768(CX), Y8 + VMOVDQU 800(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 832(CX), Y8 + VMOVDQU 864(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 2 to 7 outputs + VMOVDQU (DI), Y10 + ADDQ $0x20, DI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 896(CX), Y8 + VMOVDQU 928(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 960(CX), Y8 + VMOVDQU 992(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1024(CX), Y8 + VMOVDQU 1056(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1088(CX), Y8 + VMOVDQU 1120(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1152(CX), Y8 + VMOVDQU 1184(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1216(CX), Y8 + VMOVDQU 1248(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1280(CX), Y8 + VMOVDQU 1312(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 3 to 7 outputs + VMOVDQU (R8), Y10 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1344(CX), Y8 + VMOVDQU 1376(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1408(CX), Y8 + VMOVDQU 1440(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1472(CX), Y8 + VMOVDQU 1504(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1536(CX), Y8 + VMOVDQU 1568(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1600(CX), Y8 + VMOVDQU 1632(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1664(CX), Y8 + VMOVDQU 1696(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1728(CX), Y8 + VMOVDQU 1760(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 4 to 7 outputs + VMOVDQU (R9), Y10 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1792(CX), Y8 + VMOVDQU 1824(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1856(CX), Y8 + VMOVDQU 1888(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1920(CX), Y8 + VMOVDQU 1952(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1984(CX), Y8 + VMOVDQU 2016(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2048(CX), Y8 + VMOVDQU 2080(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 2112(CX), Y8 + VMOVDQU 2144(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 2176(CX), Y8 + VMOVDQU 2208(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 5 to 7 outputs + VMOVDQU (R10), Y10 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 2240(CX), Y8 + VMOVDQU 2272(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 2304(CX), Y8 + VMOVDQU 2336(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 2368(CX), Y8 + VMOVDQU 2400(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 2432(CX), Y8 + VMOVDQU 2464(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2496(CX), Y8 + VMOVDQU 2528(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 2560(CX), Y8 + VMOVDQU 2592(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 2624(CX), Y8 + VMOVDQU 2656(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 6 to 7 outputs + VMOVDQU (DX), Y10 + ADDQ $0x20, DX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 2688(CX), Y8 + VMOVDQU 2720(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 2752(CX), Y8 + VMOVDQU 2784(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 2816(CX), Y8 + VMOVDQU 2848(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 2880(CX), Y8 + VMOVDQU 2912(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2944(CX), Y8 + VMOVDQU 2976(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 3008(CX), Y8 + VMOVDQU 3040(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 3072(CX), Y8 + VMOVDQU 3104(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Store 7 outputs + MOVQ (R11), R13 + VMOVDQU Y0, (R13)(R12*1) + MOVQ 24(R11), R13 + VMOVDQU Y1, (R13)(R12*1) + MOVQ 48(R11), R13 + VMOVDQU Y2, (R13)(R12*1) + MOVQ 72(R11), R13 + VMOVDQU Y3, (R13)(R12*1) + MOVQ 96(R11), R13 + VMOVDQU Y4, (R13)(R12*1) + MOVQ 120(R11), R13 + VMOVDQU Y5, (R13)(R12*1) + MOVQ 144(R11), R13 + VMOVDQU Y6, (R13)(R12*1) + + // Prepare for next loop + ADDQ $0x20, R12 + DECQ AX + JNZ mulAvxTwo_7x7Xor_loop + VZEROUPPER + +mulAvxTwo_7x7Xor_end: + RET + +// func mulAvxTwo_7x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x8(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 125 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_7x8_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ start+72(FP), R12 + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, R9 + ADDQ R12, R10 + ADDQ R12, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X8 + VPBROADCASTB X8, Y8 + +mulAvxTwo_7x8_loop: + // Load and process 32 bytes from input 0 to 8 outputs + VMOVDQU (BX), Y11 + ADDQ $0x20, BX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU (CX), Y9 + VMOVDQU 32(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y0 + VMOVDQU 64(CX), Y9 + VMOVDQU 96(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y1 + VMOVDQU 128(CX), Y9 + VMOVDQU 160(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y2 + VMOVDQU 192(CX), Y9 + VMOVDQU 224(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y3 + VMOVDQU 256(CX), Y9 + VMOVDQU 288(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y4 + VMOVDQU 320(CX), Y9 + VMOVDQU 352(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y5 + VMOVDQU 384(CX), Y9 + VMOVDQU 416(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y6 + VMOVDQU 448(CX), Y9 + VMOVDQU 480(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y7 + + // Load and process 32 bytes from input 1 to 8 outputs + VMOVDQU (SI), Y11 + ADDQ $0x20, SI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 512(CX), Y9 + VMOVDQU 544(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 576(CX), Y9 + VMOVDQU 608(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y9 + VMOVDQU 672(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 704(CX), Y9 + VMOVDQU 736(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 768(CX), Y9 + VMOVDQU 800(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 832(CX), Y9 + VMOVDQU 864(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 896(CX), Y9 + VMOVDQU 928(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 960(CX), Y9 + VMOVDQU 992(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 2 to 8 outputs + VMOVDQU (DI), Y11 + ADDQ $0x20, DI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1024(CX), Y9 + VMOVDQU 1056(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1088(CX), Y9 + VMOVDQU 1120(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1152(CX), Y9 + VMOVDQU 1184(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1216(CX), Y9 + VMOVDQU 1248(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y9 + VMOVDQU 1312(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1344(CX), Y9 + VMOVDQU 1376(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1408(CX), Y9 + VMOVDQU 1440(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1472(CX), Y9 + VMOVDQU 1504(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 3 to 8 outputs + VMOVDQU (R8), Y11 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1536(CX), Y9 + VMOVDQU 1568(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1600(CX), Y9 + VMOVDQU 1632(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1664(CX), Y9 + VMOVDQU 1696(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1728(CX), Y9 + VMOVDQU 1760(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1792(CX), Y9 + VMOVDQU 1824(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1856(CX), Y9 + VMOVDQU 1888(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1920(CX), Y9 + VMOVDQU 1952(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1984(CX), Y9 + VMOVDQU 2016(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 4 to 8 outputs + VMOVDQU (R9), Y11 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 2048(CX), Y9 + VMOVDQU 2080(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 2112(CX), Y9 + VMOVDQU 2144(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 2176(CX), Y9 + VMOVDQU 2208(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 2240(CX), Y9 + VMOVDQU 2272(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 2304(CX), Y9 + VMOVDQU 2336(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 2368(CX), Y9 + VMOVDQU 2400(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 2432(CX), Y9 + VMOVDQU 2464(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 2496(CX), Y9 + VMOVDQU 2528(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 5 to 8 outputs + VMOVDQU (R10), Y11 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 2560(CX), Y9 + VMOVDQU 2592(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 2624(CX), Y9 + VMOVDQU 2656(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 2688(CX), Y9 + VMOVDQU 2720(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 2752(CX), Y9 + VMOVDQU 2784(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 2816(CX), Y9 + VMOVDQU 2848(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 2880(CX), Y9 + VMOVDQU 2912(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 2944(CX), Y9 + VMOVDQU 2976(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 3008(CX), Y9 + VMOVDQU 3040(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 6 to 8 outputs + VMOVDQU (DX), Y11 + ADDQ $0x20, DX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 3072(CX), Y9 + VMOVDQU 3104(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 3136(CX), Y9 + VMOVDQU 3168(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 3200(CX), Y9 + VMOVDQU 3232(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 3264(CX), Y9 + VMOVDQU 3296(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 3328(CX), Y9 + VMOVDQU 3360(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 3392(CX), Y9 + VMOVDQU 3424(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 3456(CX), Y9 + VMOVDQU 3488(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 3520(CX), Y9 + VMOVDQU 3552(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Store 8 outputs + MOVQ (R11), R13 + VMOVDQU Y0, (R13)(R12*1) + MOVQ 24(R11), R13 + VMOVDQU Y1, (R13)(R12*1) + MOVQ 48(R11), R13 + VMOVDQU Y2, (R13)(R12*1) + MOVQ 72(R11), R13 + VMOVDQU Y3, (R13)(R12*1) + MOVQ 96(R11), R13 + VMOVDQU Y4, (R13)(R12*1) + MOVQ 120(R11), R13 + VMOVDQU Y5, (R13)(R12*1) + MOVQ 144(R11), R13 + VMOVDQU Y6, (R13)(R12*1) + MOVQ 168(R11), R13 + VMOVDQU Y7, (R13)(R12*1) + + // Prepare for next loop + ADDQ $0x20, R12 + DECQ AX + JNZ mulAvxTwo_7x8_loop + VZEROUPPER + +mulAvxTwo_7x8_end: + RET + +// func mulAvxTwo_7x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x8Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 125 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_7x8Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ start+72(FP), R12 + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, R9 + ADDQ R12, R10 + ADDQ R12, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X8 + VPBROADCASTB X8, Y8 + +mulAvxTwo_7x8Xor_loop: + // Load and process 32 bytes from input 0 to 8 outputs + VMOVDQU (BX), Y11 + ADDQ $0x20, BX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + MOVQ (R11), R13 + VMOVDQU (R13)(R12*1), Y0 + VMOVDQU (CX), Y9 + VMOVDQU 32(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + MOVQ 24(R11), R13 + VMOVDQU (R13)(R12*1), Y1 + VMOVDQU 64(CX), Y9 + VMOVDQU 96(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + MOVQ 48(R11), R13 + VMOVDQU (R13)(R12*1), Y2 + VMOVDQU 128(CX), Y9 + VMOVDQU 160(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + MOVQ 72(R11), R13 + VMOVDQU (R13)(R12*1), Y3 + VMOVDQU 192(CX), Y9 + VMOVDQU 224(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + MOVQ 96(R11), R13 + VMOVDQU (R13)(R12*1), Y4 + VMOVDQU 256(CX), Y9 + VMOVDQU 288(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + MOVQ 120(R11), R13 + VMOVDQU (R13)(R12*1), Y5 + VMOVDQU 320(CX), Y9 + VMOVDQU 352(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + MOVQ 144(R11), R13 + VMOVDQU (R13)(R12*1), Y6 + VMOVDQU 384(CX), Y9 + VMOVDQU 416(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + MOVQ 168(R11), R13 + VMOVDQU (R13)(R12*1), Y7 + VMOVDQU 448(CX), Y9 + VMOVDQU 480(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 1 to 8 outputs + VMOVDQU (SI), Y11 + ADDQ $0x20, SI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 512(CX), Y9 + VMOVDQU 544(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 576(CX), Y9 + VMOVDQU 608(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y9 + VMOVDQU 672(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 704(CX), Y9 + VMOVDQU 736(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 768(CX), Y9 + VMOVDQU 800(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 832(CX), Y9 + VMOVDQU 864(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 896(CX), Y9 + VMOVDQU 928(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 960(CX), Y9 + VMOVDQU 992(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 2 to 8 outputs + VMOVDQU (DI), Y11 + ADDQ $0x20, DI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1024(CX), Y9 + VMOVDQU 1056(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1088(CX), Y9 + VMOVDQU 1120(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1152(CX), Y9 + VMOVDQU 1184(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1216(CX), Y9 + VMOVDQU 1248(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y9 + VMOVDQU 1312(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1344(CX), Y9 + VMOVDQU 1376(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1408(CX), Y9 + VMOVDQU 1440(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1472(CX), Y9 + VMOVDQU 1504(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 3 to 8 outputs + VMOVDQU (R8), Y11 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1536(CX), Y9 + VMOVDQU 1568(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1600(CX), Y9 + VMOVDQU 1632(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1664(CX), Y9 + VMOVDQU 1696(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1728(CX), Y9 + VMOVDQU 1760(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1792(CX), Y9 + VMOVDQU 1824(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1856(CX), Y9 + VMOVDQU 1888(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1920(CX), Y9 + VMOVDQU 1952(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1984(CX), Y9 + VMOVDQU 2016(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 4 to 8 outputs + VMOVDQU (R9), Y11 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 2048(CX), Y9 + VMOVDQU 2080(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 2112(CX), Y9 + VMOVDQU 2144(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 2176(CX), Y9 + VMOVDQU 2208(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 2240(CX), Y9 + VMOVDQU 2272(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 2304(CX), Y9 + VMOVDQU 2336(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 2368(CX), Y9 + VMOVDQU 2400(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 2432(CX), Y9 + VMOVDQU 2464(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 2496(CX), Y9 + VMOVDQU 2528(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 5 to 8 outputs + VMOVDQU (R10), Y11 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 2560(CX), Y9 + VMOVDQU 2592(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 2624(CX), Y9 + VMOVDQU 2656(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 2688(CX), Y9 + VMOVDQU 2720(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 2752(CX), Y9 + VMOVDQU 2784(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 2816(CX), Y9 + VMOVDQU 2848(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 2880(CX), Y9 + VMOVDQU 2912(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 2944(CX), Y9 + VMOVDQU 2976(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 3008(CX), Y9 + VMOVDQU 3040(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 6 to 8 outputs + VMOVDQU (DX), Y11 + ADDQ $0x20, DX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 3072(CX), Y9 + VMOVDQU 3104(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 3136(CX), Y9 + VMOVDQU 3168(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 3200(CX), Y9 + VMOVDQU 3232(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 3264(CX), Y9 + VMOVDQU 3296(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 3328(CX), Y9 + VMOVDQU 3360(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 3392(CX), Y9 + VMOVDQU 3424(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 3456(CX), Y9 + VMOVDQU 3488(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 3520(CX), Y9 + VMOVDQU 3552(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Store 8 outputs + MOVQ (R11), R13 + VMOVDQU Y0, (R13)(R12*1) + MOVQ 24(R11), R13 + VMOVDQU Y1, (R13)(R12*1) + MOVQ 48(R11), R13 + VMOVDQU Y2, (R13)(R12*1) + MOVQ 72(R11), R13 + VMOVDQU Y3, (R13)(R12*1) + MOVQ 96(R11), R13 + VMOVDQU Y4, (R13)(R12*1) + MOVQ 120(R11), R13 + VMOVDQU Y5, (R13)(R12*1) + MOVQ 144(R11), R13 + VMOVDQU Y6, (R13)(R12*1) + MOVQ 168(R11), R13 + VMOVDQU Y7, (R13)(R12*1) + + // Prepare for next loop + ADDQ $0x20, R12 + DECQ AX + JNZ mulAvxTwo_7x8Xor_loop + VZEROUPPER + +mulAvxTwo_7x8Xor_end: + RET + +// func mulAvxTwo_7x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x9(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 140 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_7x9_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ start+72(FP), R12 + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, R9 + ADDQ R12, R10 + ADDQ R12, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X9 + VPBROADCASTB X9, Y9 + +mulAvxTwo_7x9_loop: + // Load and process 32 bytes from input 0 to 9 outputs + VMOVDQU (BX), Y12 + ADDQ $0x20, BX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU (CX), Y10 + VMOVDQU 32(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y0 + VMOVDQU 64(CX), Y10 + VMOVDQU 96(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y1 + VMOVDQU 128(CX), Y10 + VMOVDQU 160(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y2 + VMOVDQU 192(CX), Y10 + VMOVDQU 224(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y3 + VMOVDQU 256(CX), Y10 + VMOVDQU 288(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y4 + VMOVDQU 320(CX), Y10 + VMOVDQU 352(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y5 + VMOVDQU 384(CX), Y10 + VMOVDQU 416(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y6 + VMOVDQU 448(CX), Y10 + VMOVDQU 480(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y7 + VMOVDQU 512(CX), Y10 + VMOVDQU 544(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y8 + + // Load and process 32 bytes from input 1 to 9 outputs + VMOVDQU (SI), Y12 + ADDQ $0x20, SI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 576(CX), Y10 + VMOVDQU 608(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 640(CX), Y10 + VMOVDQU 672(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 704(CX), Y10 + VMOVDQU 736(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 768(CX), Y10 + VMOVDQU 800(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 832(CX), Y10 + VMOVDQU 864(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 896(CX), Y10 + VMOVDQU 928(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 960(CX), Y10 + VMOVDQU 992(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1024(CX), Y10 + VMOVDQU 1056(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1088(CX), Y10 + VMOVDQU 1120(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 2 to 9 outputs + VMOVDQU (DI), Y12 + ADDQ $0x20, DI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1152(CX), Y10 + VMOVDQU 1184(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1216(CX), Y10 + VMOVDQU 1248(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1280(CX), Y10 + VMOVDQU 1312(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1344(CX), Y10 + VMOVDQU 1376(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1408(CX), Y10 + VMOVDQU 1440(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 1472(CX), Y10 + VMOVDQU 1504(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 1536(CX), Y10 + VMOVDQU 1568(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1600(CX), Y10 + VMOVDQU 1632(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1664(CX), Y10 + VMOVDQU 1696(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 3 to 9 outputs + VMOVDQU (R8), Y12 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1728(CX), Y10 + VMOVDQU 1760(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1792(CX), Y10 + VMOVDQU 1824(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1856(CX), Y10 + VMOVDQU 1888(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1920(CX), Y10 + VMOVDQU 1952(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1984(CX), Y10 + VMOVDQU 2016(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2048(CX), Y10 + VMOVDQU 2080(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2112(CX), Y10 + VMOVDQU 2144(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2176(CX), Y10 + VMOVDQU 2208(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2240(CX), Y10 + VMOVDQU 2272(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 4 to 9 outputs + VMOVDQU (R9), Y12 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 2304(CX), Y10 + VMOVDQU 2336(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 2368(CX), Y10 + VMOVDQU 2400(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 2432(CX), Y10 + VMOVDQU 2464(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 2496(CX), Y10 + VMOVDQU 2528(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 2560(CX), Y10 + VMOVDQU 2592(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2624(CX), Y10 + VMOVDQU 2656(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2688(CX), Y10 + VMOVDQU 2720(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2752(CX), Y10 + VMOVDQU 2784(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2816(CX), Y10 + VMOVDQU 2848(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 5 to 9 outputs + VMOVDQU (R10), Y12 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 2880(CX), Y10 + VMOVDQU 2912(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 2944(CX), Y10 + VMOVDQU 2976(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 3008(CX), Y10 + VMOVDQU 3040(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 3072(CX), Y10 + VMOVDQU 3104(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 3136(CX), Y10 + VMOVDQU 3168(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 3200(CX), Y10 + VMOVDQU 3232(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 3264(CX), Y10 + VMOVDQU 3296(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 3328(CX), Y10 + VMOVDQU 3360(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 3392(CX), Y10 + VMOVDQU 3424(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 6 to 9 outputs + VMOVDQU (DX), Y12 + ADDQ $0x20, DX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 3456(CX), Y10 + VMOVDQU 3488(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 3520(CX), Y10 + VMOVDQU 3552(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 3584(CX), Y10 + VMOVDQU 3616(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 3648(CX), Y10 + VMOVDQU 3680(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 3712(CX), Y10 + VMOVDQU 3744(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 3776(CX), Y10 + VMOVDQU 3808(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 3840(CX), Y10 + VMOVDQU 3872(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 3904(CX), Y10 + VMOVDQU 3936(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 3968(CX), Y10 + VMOVDQU 4000(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Store 9 outputs + MOVQ (R11), R13 + VMOVDQU Y0, (R13)(R12*1) + MOVQ 24(R11), R13 + VMOVDQU Y1, (R13)(R12*1) + MOVQ 48(R11), R13 + VMOVDQU Y2, (R13)(R12*1) + MOVQ 72(R11), R13 + VMOVDQU Y3, (R13)(R12*1) + MOVQ 96(R11), R13 + VMOVDQU Y4, (R13)(R12*1) + MOVQ 120(R11), R13 + VMOVDQU Y5, (R13)(R12*1) + MOVQ 144(R11), R13 + VMOVDQU Y6, (R13)(R12*1) + MOVQ 168(R11), R13 + VMOVDQU Y7, (R13)(R12*1) + MOVQ 192(R11), R13 + VMOVDQU Y8, (R13)(R12*1) + + // Prepare for next loop + ADDQ $0x20, R12 + DECQ AX + JNZ mulAvxTwo_7x9_loop + VZEROUPPER + +mulAvxTwo_7x9_end: + RET + +// func mulAvxTwo_7x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x9Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 140 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_7x9Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ start+72(FP), R12 + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, R9 + ADDQ R12, R10 + ADDQ R12, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X9 + VPBROADCASTB X9, Y9 + +mulAvxTwo_7x9Xor_loop: + // Load and process 32 bytes from input 0 to 9 outputs + VMOVDQU (BX), Y12 + ADDQ $0x20, BX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + MOVQ (R11), R13 + VMOVDQU (R13)(R12*1), Y0 + VMOVDQU (CX), Y10 + VMOVDQU 32(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + MOVQ 24(R11), R13 + VMOVDQU (R13)(R12*1), Y1 + VMOVDQU 64(CX), Y10 + VMOVDQU 96(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + MOVQ 48(R11), R13 + VMOVDQU (R13)(R12*1), Y2 + VMOVDQU 128(CX), Y10 + VMOVDQU 160(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + MOVQ 72(R11), R13 + VMOVDQU (R13)(R12*1), Y3 + VMOVDQU 192(CX), Y10 + VMOVDQU 224(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + MOVQ 96(R11), R13 + VMOVDQU (R13)(R12*1), Y4 + VMOVDQU 256(CX), Y10 + VMOVDQU 288(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + MOVQ 120(R11), R13 + VMOVDQU (R13)(R12*1), Y5 + VMOVDQU 320(CX), Y10 + VMOVDQU 352(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + MOVQ 144(R11), R13 + VMOVDQU (R13)(R12*1), Y6 + VMOVDQU 384(CX), Y10 + VMOVDQU 416(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + MOVQ 168(R11), R13 + VMOVDQU (R13)(R12*1), Y7 + VMOVDQU 448(CX), Y10 + VMOVDQU 480(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + MOVQ 192(R11), R13 + VMOVDQU (R13)(R12*1), Y8 + VMOVDQU 512(CX), Y10 + VMOVDQU 544(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 1 to 9 outputs + VMOVDQU (SI), Y12 + ADDQ $0x20, SI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 576(CX), Y10 + VMOVDQU 608(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 640(CX), Y10 + VMOVDQU 672(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 704(CX), Y10 + VMOVDQU 736(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 768(CX), Y10 + VMOVDQU 800(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 832(CX), Y10 + VMOVDQU 864(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 896(CX), Y10 + VMOVDQU 928(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 960(CX), Y10 + VMOVDQU 992(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1024(CX), Y10 + VMOVDQU 1056(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1088(CX), Y10 + VMOVDQU 1120(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 2 to 9 outputs + VMOVDQU (DI), Y12 + ADDQ $0x20, DI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1152(CX), Y10 + VMOVDQU 1184(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1216(CX), Y10 + VMOVDQU 1248(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1280(CX), Y10 + VMOVDQU 1312(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1344(CX), Y10 + VMOVDQU 1376(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1408(CX), Y10 + VMOVDQU 1440(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 1472(CX), Y10 + VMOVDQU 1504(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 1536(CX), Y10 + VMOVDQU 1568(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1600(CX), Y10 + VMOVDQU 1632(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1664(CX), Y10 + VMOVDQU 1696(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 3 to 9 outputs + VMOVDQU (R8), Y12 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1728(CX), Y10 + VMOVDQU 1760(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1792(CX), Y10 + VMOVDQU 1824(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1856(CX), Y10 + VMOVDQU 1888(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1920(CX), Y10 + VMOVDQU 1952(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1984(CX), Y10 + VMOVDQU 2016(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2048(CX), Y10 + VMOVDQU 2080(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2112(CX), Y10 + VMOVDQU 2144(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2176(CX), Y10 + VMOVDQU 2208(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2240(CX), Y10 + VMOVDQU 2272(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 4 to 9 outputs + VMOVDQU (R9), Y12 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 2304(CX), Y10 + VMOVDQU 2336(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 2368(CX), Y10 + VMOVDQU 2400(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 2432(CX), Y10 + VMOVDQU 2464(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 2496(CX), Y10 + VMOVDQU 2528(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 2560(CX), Y10 + VMOVDQU 2592(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2624(CX), Y10 + VMOVDQU 2656(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2688(CX), Y10 + VMOVDQU 2720(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2752(CX), Y10 + VMOVDQU 2784(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2816(CX), Y10 + VMOVDQU 2848(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 5 to 9 outputs + VMOVDQU (R10), Y12 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 2880(CX), Y10 + VMOVDQU 2912(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 2944(CX), Y10 + VMOVDQU 2976(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 3008(CX), Y10 + VMOVDQU 3040(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 3072(CX), Y10 + VMOVDQU 3104(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 3136(CX), Y10 + VMOVDQU 3168(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 3200(CX), Y10 + VMOVDQU 3232(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 3264(CX), Y10 + VMOVDQU 3296(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 3328(CX), Y10 + VMOVDQU 3360(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 3392(CX), Y10 + VMOVDQU 3424(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 6 to 9 outputs + VMOVDQU (DX), Y12 + ADDQ $0x20, DX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 3456(CX), Y10 + VMOVDQU 3488(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 3520(CX), Y10 + VMOVDQU 3552(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 3584(CX), Y10 + VMOVDQU 3616(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 3648(CX), Y10 + VMOVDQU 3680(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 3712(CX), Y10 + VMOVDQU 3744(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 3776(CX), Y10 + VMOVDQU 3808(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 3840(CX), Y10 + VMOVDQU 3872(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 3904(CX), Y10 + VMOVDQU 3936(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 3968(CX), Y10 + VMOVDQU 4000(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Store 9 outputs + MOVQ (R11), R13 + VMOVDQU Y0, (R13)(R12*1) + MOVQ 24(R11), R13 + VMOVDQU Y1, (R13)(R12*1) + MOVQ 48(R11), R13 + VMOVDQU Y2, (R13)(R12*1) + MOVQ 72(R11), R13 + VMOVDQU Y3, (R13)(R12*1) + MOVQ 96(R11), R13 + VMOVDQU Y4, (R13)(R12*1) + MOVQ 120(R11), R13 + VMOVDQU Y5, (R13)(R12*1) + MOVQ 144(R11), R13 + VMOVDQU Y6, (R13)(R12*1) + MOVQ 168(R11), R13 + VMOVDQU Y7, (R13)(R12*1) + MOVQ 192(R11), R13 + VMOVDQU Y8, (R13)(R12*1) + + // Prepare for next loop + ADDQ $0x20, R12 + DECQ AX + JNZ mulAvxTwo_7x9Xor_loop + VZEROUPPER + +mulAvxTwo_7x9Xor_end: + RET + +// func mulAvxTwo_7x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x10(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 155 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_7x10_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ start+72(FP), R12 + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, R9 + ADDQ R12, R10 + ADDQ R12, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X10 + VPBROADCASTB X10, Y10 + +mulAvxTwo_7x10_loop: + // Load and process 32 bytes from input 0 to 10 outputs + VMOVDQU (BX), Y13 + ADDQ $0x20, BX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU (CX), Y11 + VMOVDQU 32(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y0 + VMOVDQU 64(CX), Y11 + VMOVDQU 96(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y1 + VMOVDQU 128(CX), Y11 + VMOVDQU 160(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y2 + VMOVDQU 192(CX), Y11 + VMOVDQU 224(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y3 + VMOVDQU 256(CX), Y11 + VMOVDQU 288(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y4 + VMOVDQU 320(CX), Y11 + VMOVDQU 352(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y5 + VMOVDQU 384(CX), Y11 + VMOVDQU 416(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y6 + VMOVDQU 448(CX), Y11 + VMOVDQU 480(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y7 + VMOVDQU 512(CX), Y11 + VMOVDQU 544(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y8 + VMOVDQU 576(CX), Y11 + VMOVDQU 608(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y9 + + // Load and process 32 bytes from input 1 to 10 outputs + VMOVDQU (SI), Y13 + ADDQ $0x20, SI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 640(CX), Y11 + VMOVDQU 672(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 704(CX), Y11 + VMOVDQU 736(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 768(CX), Y11 + VMOVDQU 800(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 832(CX), Y11 + VMOVDQU 864(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 896(CX), Y11 + VMOVDQU 928(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 960(CX), Y11 + VMOVDQU 992(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1024(CX), Y11 + VMOVDQU 1056(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1088(CX), Y11 + VMOVDQU 1120(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1152(CX), Y11 + VMOVDQU 1184(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1216(CX), Y11 + VMOVDQU 1248(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 2 to 10 outputs + VMOVDQU (DI), Y13 + ADDQ $0x20, DI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1280(CX), Y11 + VMOVDQU 1312(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1344(CX), Y11 + VMOVDQU 1376(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 1408(CX), Y11 + VMOVDQU 1440(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 1472(CX), Y11 + VMOVDQU 1504(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 1536(CX), Y11 + VMOVDQU 1568(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 1600(CX), Y11 + VMOVDQU 1632(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1664(CX), Y11 + VMOVDQU 1696(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1728(CX), Y11 + VMOVDQU 1760(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1792(CX), Y11 + VMOVDQU 1824(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1856(CX), Y11 + VMOVDQU 1888(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 3 to 10 outputs + VMOVDQU (R8), Y13 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1920(CX), Y11 + VMOVDQU 1952(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1984(CX), Y11 + VMOVDQU 2016(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2048(CX), Y11 + VMOVDQU 2080(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2112(CX), Y11 + VMOVDQU 2144(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2176(CX), Y11 + VMOVDQU 2208(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2240(CX), Y11 + VMOVDQU 2272(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2304(CX), Y11 + VMOVDQU 2336(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 2368(CX), Y11 + VMOVDQU 2400(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 2432(CX), Y11 + VMOVDQU 2464(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 2496(CX), Y11 + VMOVDQU 2528(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 4 to 10 outputs + VMOVDQU (R9), Y13 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 2560(CX), Y11 + VMOVDQU 2592(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 2624(CX), Y11 + VMOVDQU 2656(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2688(CX), Y11 + VMOVDQU 2720(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2752(CX), Y11 + VMOVDQU 2784(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2816(CX), Y11 + VMOVDQU 2848(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2880(CX), Y11 + VMOVDQU 2912(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2944(CX), Y11 + VMOVDQU 2976(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 3008(CX), Y11 + VMOVDQU 3040(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 3072(CX), Y11 + VMOVDQU 3104(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 3136(CX), Y11 + VMOVDQU 3168(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 5 to 10 outputs + VMOVDQU (R10), Y13 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 3200(CX), Y11 + VMOVDQU 3232(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 3264(CX), Y11 + VMOVDQU 3296(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 3328(CX), Y11 + VMOVDQU 3360(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 3392(CX), Y11 + VMOVDQU 3424(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 3456(CX), Y11 + VMOVDQU 3488(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 3520(CX), Y11 + VMOVDQU 3552(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 3584(CX), Y11 + VMOVDQU 3616(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 3648(CX), Y11 + VMOVDQU 3680(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 3712(CX), Y11 + VMOVDQU 3744(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 3776(CX), Y11 + VMOVDQU 3808(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 6 to 10 outputs + VMOVDQU (DX), Y13 + ADDQ $0x20, DX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 3840(CX), Y11 + VMOVDQU 3872(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 3904(CX), Y11 + VMOVDQU 3936(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 3968(CX), Y11 + VMOVDQU 4000(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 4032(CX), Y11 + VMOVDQU 4064(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 4096(CX), Y11 + VMOVDQU 4128(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 4160(CX), Y11 + VMOVDQU 4192(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 4224(CX), Y11 + VMOVDQU 4256(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 4288(CX), Y11 + VMOVDQU 4320(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 4352(CX), Y11 + VMOVDQU 4384(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 4416(CX), Y11 + VMOVDQU 4448(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Store 10 outputs + MOVQ (R11), R13 + VMOVDQU Y0, (R13)(R12*1) + MOVQ 24(R11), R13 + VMOVDQU Y1, (R13)(R12*1) + MOVQ 48(R11), R13 + VMOVDQU Y2, (R13)(R12*1) + MOVQ 72(R11), R13 + VMOVDQU Y3, (R13)(R12*1) + MOVQ 96(R11), R13 + VMOVDQU Y4, (R13)(R12*1) + MOVQ 120(R11), R13 + VMOVDQU Y5, (R13)(R12*1) + MOVQ 144(R11), R13 + VMOVDQU Y6, (R13)(R12*1) + MOVQ 168(R11), R13 + VMOVDQU Y7, (R13)(R12*1) + MOVQ 192(R11), R13 + VMOVDQU Y8, (R13)(R12*1) + MOVQ 216(R11), R13 + VMOVDQU Y9, (R13)(R12*1) + + // Prepare for next loop + ADDQ $0x20, R12 + DECQ AX + JNZ mulAvxTwo_7x10_loop + VZEROUPPER + +mulAvxTwo_7x10_end: + RET + +// func mulAvxTwo_7x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_7x10Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 155 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_7x10Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), DX + MOVQ out_base+48(FP), R11 + MOVQ start+72(FP), R12 + + // Add start offset to input + ADDQ R12, BX + ADDQ R12, SI + ADDQ R12, DI + ADDQ R12, R8 + ADDQ R12, R9 + ADDQ R12, R10 + ADDQ R12, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X10 + VPBROADCASTB X10, Y10 + +mulAvxTwo_7x10Xor_loop: + // Load and process 32 bytes from input 0 to 10 outputs + VMOVDQU (BX), Y13 + ADDQ $0x20, BX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + MOVQ (R11), R13 + VMOVDQU (R13)(R12*1), Y0 + VMOVDQU (CX), Y11 + VMOVDQU 32(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + MOVQ 24(R11), R13 + VMOVDQU (R13)(R12*1), Y1 + VMOVDQU 64(CX), Y11 + VMOVDQU 96(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + MOVQ 48(R11), R13 + VMOVDQU (R13)(R12*1), Y2 + VMOVDQU 128(CX), Y11 + VMOVDQU 160(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + MOVQ 72(R11), R13 + VMOVDQU (R13)(R12*1), Y3 + VMOVDQU 192(CX), Y11 + VMOVDQU 224(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + MOVQ 96(R11), R13 + VMOVDQU (R13)(R12*1), Y4 + VMOVDQU 256(CX), Y11 + VMOVDQU 288(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + MOVQ 120(R11), R13 + VMOVDQU (R13)(R12*1), Y5 + VMOVDQU 320(CX), Y11 + VMOVDQU 352(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + MOVQ 144(R11), R13 + VMOVDQU (R13)(R12*1), Y6 + VMOVDQU 384(CX), Y11 + VMOVDQU 416(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + MOVQ 168(R11), R13 + VMOVDQU (R13)(R12*1), Y7 + VMOVDQU 448(CX), Y11 + VMOVDQU 480(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + MOVQ 192(R11), R13 + VMOVDQU (R13)(R12*1), Y8 + VMOVDQU 512(CX), Y11 + VMOVDQU 544(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + MOVQ 216(R11), R13 + VMOVDQU (R13)(R12*1), Y9 + VMOVDQU 576(CX), Y11 + VMOVDQU 608(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 1 to 10 outputs + VMOVDQU (SI), Y13 + ADDQ $0x20, SI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 640(CX), Y11 + VMOVDQU 672(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 704(CX), Y11 + VMOVDQU 736(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 768(CX), Y11 + VMOVDQU 800(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 832(CX), Y11 + VMOVDQU 864(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 896(CX), Y11 + VMOVDQU 928(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 960(CX), Y11 + VMOVDQU 992(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1024(CX), Y11 + VMOVDQU 1056(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1088(CX), Y11 + VMOVDQU 1120(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1152(CX), Y11 + VMOVDQU 1184(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1216(CX), Y11 + VMOVDQU 1248(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 2 to 10 outputs + VMOVDQU (DI), Y13 + ADDQ $0x20, DI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1280(CX), Y11 + VMOVDQU 1312(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1344(CX), Y11 + VMOVDQU 1376(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 1408(CX), Y11 + VMOVDQU 1440(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 1472(CX), Y11 + VMOVDQU 1504(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 1536(CX), Y11 + VMOVDQU 1568(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 1600(CX), Y11 + VMOVDQU 1632(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1664(CX), Y11 + VMOVDQU 1696(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1728(CX), Y11 + VMOVDQU 1760(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1792(CX), Y11 + VMOVDQU 1824(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1856(CX), Y11 + VMOVDQU 1888(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 3 to 10 outputs + VMOVDQU (R8), Y13 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1920(CX), Y11 + VMOVDQU 1952(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1984(CX), Y11 + VMOVDQU 2016(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2048(CX), Y11 + VMOVDQU 2080(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2112(CX), Y11 + VMOVDQU 2144(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2176(CX), Y11 + VMOVDQU 2208(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2240(CX), Y11 + VMOVDQU 2272(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2304(CX), Y11 + VMOVDQU 2336(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 2368(CX), Y11 + VMOVDQU 2400(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 2432(CX), Y11 + VMOVDQU 2464(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 2496(CX), Y11 + VMOVDQU 2528(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 4 to 10 outputs + VMOVDQU (R9), Y13 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 2560(CX), Y11 + VMOVDQU 2592(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 2624(CX), Y11 + VMOVDQU 2656(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2688(CX), Y11 + VMOVDQU 2720(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2752(CX), Y11 + VMOVDQU 2784(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2816(CX), Y11 + VMOVDQU 2848(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2880(CX), Y11 + VMOVDQU 2912(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2944(CX), Y11 + VMOVDQU 2976(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 3008(CX), Y11 + VMOVDQU 3040(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 3072(CX), Y11 + VMOVDQU 3104(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 3136(CX), Y11 + VMOVDQU 3168(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 5 to 10 outputs + VMOVDQU (R10), Y13 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 3200(CX), Y11 + VMOVDQU 3232(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 3264(CX), Y11 + VMOVDQU 3296(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 3328(CX), Y11 + VMOVDQU 3360(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 3392(CX), Y11 + VMOVDQU 3424(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 3456(CX), Y11 + VMOVDQU 3488(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 3520(CX), Y11 + VMOVDQU 3552(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 3584(CX), Y11 + VMOVDQU 3616(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 3648(CX), Y11 + VMOVDQU 3680(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 3712(CX), Y11 + VMOVDQU 3744(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 3776(CX), Y11 + VMOVDQU 3808(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 6 to 10 outputs + VMOVDQU (DX), Y13 + ADDQ $0x20, DX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 3840(CX), Y11 + VMOVDQU 3872(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 3904(CX), Y11 + VMOVDQU 3936(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 3968(CX), Y11 + VMOVDQU 4000(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 4032(CX), Y11 + VMOVDQU 4064(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 4096(CX), Y11 + VMOVDQU 4128(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 4160(CX), Y11 + VMOVDQU 4192(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 4224(CX), Y11 + VMOVDQU 4256(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 4288(CX), Y11 + VMOVDQU 4320(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 4352(CX), Y11 + VMOVDQU 4384(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 4416(CX), Y11 + VMOVDQU 4448(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Store 10 outputs + MOVQ (R11), R13 + VMOVDQU Y0, (R13)(R12*1) + MOVQ 24(R11), R13 + VMOVDQU Y1, (R13)(R12*1) + MOVQ 48(R11), R13 + VMOVDQU Y2, (R13)(R12*1) + MOVQ 72(R11), R13 + VMOVDQU Y3, (R13)(R12*1) + MOVQ 96(R11), R13 + VMOVDQU Y4, (R13)(R12*1) + MOVQ 120(R11), R13 + VMOVDQU Y5, (R13)(R12*1) + MOVQ 144(R11), R13 + VMOVDQU Y6, (R13)(R12*1) + MOVQ 168(R11), R13 + VMOVDQU Y7, (R13)(R12*1) + MOVQ 192(R11), R13 + VMOVDQU Y8, (R13)(R12*1) + MOVQ 216(R11), R13 + VMOVDQU Y9, (R13)(R12*1) + + // Prepare for next loop + ADDQ $0x20, R12 + DECQ AX + JNZ mulAvxTwo_7x10Xor_loop + VZEROUPPER + +mulAvxTwo_7x10Xor_end: + RET + +// func mulAvxTwo_8x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x1(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 20 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_8x1_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ (R12), R12 + MOVQ start+72(FP), R13 + + // Add start offset to output + ADDQ R13, R12 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X1 + VPBROADCASTB X1, Y1 + +mulAvxTwo_8x1_loop: + // Load and process 32 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y4 + ADDQ $0x20, BX + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU (CX), Y2 + VMOVDQU 32(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y0 + + // Load and process 32 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y4 + ADDQ $0x20, SI + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 2 to 1 outputs + VMOVDQU (DI), Y4 + ADDQ $0x20, DI + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 128(CX), Y2 + VMOVDQU 160(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 3 to 1 outputs + VMOVDQU (R8), Y4 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 192(CX), Y2 + VMOVDQU 224(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 4 to 1 outputs + VMOVDQU (R9), Y4 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 256(CX), Y2 + VMOVDQU 288(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 5 to 1 outputs + VMOVDQU (R10), Y4 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 320(CX), Y2 + VMOVDQU 352(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 6 to 1 outputs + VMOVDQU (R11), Y4 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 384(CX), Y2 + VMOVDQU 416(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 7 to 1 outputs + VMOVDQU (DX), Y4 + ADDQ $0x20, DX + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 448(CX), Y2 + VMOVDQU 480(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Store 1 outputs + VMOVDQU Y0, (R12) + ADDQ $0x20, R12 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_8x1_loop + VZEROUPPER + +mulAvxTwo_8x1_end: + RET + +// func mulAvxTwo_8x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x1_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 38 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_8x1_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ out_base+48(FP), R12 + MOVQ (R12), R12 + MOVQ start+72(FP), R13 + + // Add start offset to output + ADDQ R13, R12 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_8x1_64_loop: + // Load and process 64 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y6 + VMOVDQU 32(BX), Y5 + ADDQ $0x40, BX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y0 + VPXOR Y5, Y6, Y1 + + // Load and process 64 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y6 + VMOVDQU 32(SI), Y5 + ADDQ $0x40, SI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 2 to 1 outputs + VMOVDQU (DI), Y6 + VMOVDQU 32(DI), Y5 + ADDQ $0x40, DI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 3 to 1 outputs + VMOVDQU (R8), Y6 + VMOVDQU 32(R8), Y5 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 4 to 1 outputs + VMOVDQU (R9), Y6 + VMOVDQU 32(R9), Y5 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 5 to 1 outputs + VMOVDQU (R10), Y6 + VMOVDQU 32(R10), Y5 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 6 to 1 outputs + VMOVDQU (R11), Y6 + VMOVDQU 32(R11), Y5 + ADDQ $0x40, R11 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 384(CX), Y3 + VMOVDQU 416(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 7 to 1 outputs + VMOVDQU (DX), Y6 + VMOVDQU 32(DX), Y5 + ADDQ $0x40, DX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 448(CX), Y3 + VMOVDQU 480(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Store 1 outputs + VMOVDQU Y0, (R12) + VMOVDQU Y1, 32(R12) + ADDQ $0x40, R12 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_8x1_64_loop + VZEROUPPER + +mulAvxTwo_8x1_64_end: + RET + +// func mulAvxTwo_8x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x1Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 20 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_8x1Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ (R12), R12 + MOVQ start+72(FP), R13 + + // Add start offset to output + ADDQ R13, R12 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X1 + VPBROADCASTB X1, Y1 + +mulAvxTwo_8x1Xor_loop: + // Load and process 32 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y4 + ADDQ $0x20, BX + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU (R12), Y0 + VMOVDQU (CX), Y2 + VMOVDQU 32(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y4 + ADDQ $0x20, SI + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 2 to 1 outputs + VMOVDQU (DI), Y4 + ADDQ $0x20, DI + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 128(CX), Y2 + VMOVDQU 160(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 3 to 1 outputs + VMOVDQU (R8), Y4 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 192(CX), Y2 + VMOVDQU 224(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 4 to 1 outputs + VMOVDQU (R9), Y4 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 256(CX), Y2 + VMOVDQU 288(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 5 to 1 outputs + VMOVDQU (R10), Y4 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 320(CX), Y2 + VMOVDQU 352(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 6 to 1 outputs + VMOVDQU (R11), Y4 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 384(CX), Y2 + VMOVDQU 416(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 7 to 1 outputs + VMOVDQU (DX), Y4 + ADDQ $0x20, DX + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 448(CX), Y2 + VMOVDQU 480(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Store 1 outputs + VMOVDQU Y0, (R12) + ADDQ $0x20, R12 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_8x1Xor_loop + VZEROUPPER + +mulAvxTwo_8x1Xor_end: + RET + +// func mulAvxTwo_8x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x1_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 38 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_8x1_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ out_base+48(FP), R12 + MOVQ (R12), R12 + MOVQ start+72(FP), R13 + + // Add start offset to output + ADDQ R13, R12 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, DX + MOVQ $0x0000000f, R13 + MOVQ R13, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_8x1_64Xor_loop: + // Load 1 outputs + VMOVDQU (R12), Y0 + VMOVDQU 32(R12), Y1 + + // Load and process 64 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y6 + VMOVDQU 32(BX), Y5 + ADDQ $0x40, BX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y6 + VMOVDQU 32(SI), Y5 + ADDQ $0x40, SI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 2 to 1 outputs + VMOVDQU (DI), Y6 + VMOVDQU 32(DI), Y5 + ADDQ $0x40, DI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 3 to 1 outputs + VMOVDQU (R8), Y6 + VMOVDQU 32(R8), Y5 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 4 to 1 outputs + VMOVDQU (R9), Y6 + VMOVDQU 32(R9), Y5 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 5 to 1 outputs + VMOVDQU (R10), Y6 + VMOVDQU 32(R10), Y5 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 6 to 1 outputs + VMOVDQU (R11), Y6 + VMOVDQU 32(R11), Y5 + ADDQ $0x40, R11 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 384(CX), Y3 + VMOVDQU 416(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 7 to 1 outputs + VMOVDQU (DX), Y6 + VMOVDQU 32(DX), Y5 + ADDQ $0x40, DX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 448(CX), Y3 + VMOVDQU 480(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Store 1 outputs + VMOVDQU Y0, (R12) + VMOVDQU Y1, 32(R12) + ADDQ $0x40, R12 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_8x1_64Xor_loop + VZEROUPPER + +mulAvxTwo_8x1_64Xor_end: + RET + +// func mulAvxTwo_8x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x2(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 39 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_8x2_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ (R12), R13 + MOVQ 24(R12), R12 + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, R13 + ADDQ R14, R12 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_8x2_loop: + // Load and process 32 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y5 + ADDQ $0x20, BX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y0 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y1 + + // Load and process 32 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y5 + ADDQ $0x20, SI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y5 + ADDQ $0x20, DI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y5 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 384(CX), Y3 + VMOVDQU 416(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 448(CX), Y3 + VMOVDQU 480(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 4 to 2 outputs + VMOVDQU (R9), Y5 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 512(CX), Y3 + VMOVDQU 544(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 576(CX), Y3 + VMOVDQU 608(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 5 to 2 outputs + VMOVDQU (R10), Y5 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 640(CX), Y3 + VMOVDQU 672(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 704(CX), Y3 + VMOVDQU 736(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 6 to 2 outputs + VMOVDQU (R11), Y5 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 768(CX), Y3 + VMOVDQU 800(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 832(CX), Y3 + VMOVDQU 864(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 7 to 2 outputs + VMOVDQU (DX), Y5 + ADDQ $0x20, DX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 896(CX), Y3 + VMOVDQU 928(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 960(CX), Y3 + VMOVDQU 992(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Store 2 outputs + VMOVDQU Y0, (R13) + ADDQ $0x20, R13 + VMOVDQU Y1, (R12) + ADDQ $0x20, R12 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_8x2_loop + VZEROUPPER + +mulAvxTwo_8x2_end: + RET + +// func mulAvxTwo_8x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x2_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 73 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_8x2_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ out_base+48(FP), R12 + MOVQ (R12), R13 + MOVQ 24(R12), R12 + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, R13 + ADDQ R14, R12 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_8x2_64_loop: + // Load and process 64 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y9 + VMOVDQU 32(BX), Y11 + ADDQ $0x40, BX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y0 + VPXOR Y7, Y8, Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y2 + VPXOR Y7, Y8, Y3 + + // Load and process 64 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y9 + VMOVDQU 32(SI), Y11 + ADDQ $0x40, SI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y9 + VMOVDQU 32(DI), Y11 + ADDQ $0x40, DI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y9 + VMOVDQU 32(R8), Y11 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 4 to 2 outputs + VMOVDQU (R9), Y9 + VMOVDQU 32(R9), Y11 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 5 to 2 outputs + VMOVDQU (R10), Y9 + VMOVDQU 32(R10), Y11 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 6 to 2 outputs + VMOVDQU (R11), Y9 + VMOVDQU 32(R11), Y11 + ADDQ $0x40, R11 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 768(CX), Y5 + VMOVDQU 800(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 832(CX), Y5 + VMOVDQU 864(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 7 to 2 outputs + VMOVDQU (DX), Y9 + VMOVDQU 32(DX), Y11 + ADDQ $0x40, DX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 896(CX), Y5 + VMOVDQU 928(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 960(CX), Y5 + VMOVDQU 992(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Store 2 outputs + VMOVDQU Y0, (R13) + VMOVDQU Y1, 32(R13) + ADDQ $0x40, R13 + VMOVDQU Y2, (R12) + VMOVDQU Y3, 32(R12) + ADDQ $0x40, R12 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_8x2_64_loop + VZEROUPPER + +mulAvxTwo_8x2_64_end: + RET + +// func mulAvxTwo_8x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x2Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 39 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_8x2Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ (R12), R13 + MOVQ 24(R12), R12 + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, R13 + ADDQ R14, R12 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_8x2Xor_loop: + // Load and process 32 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y5 + ADDQ $0x20, BX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU (R13), Y0 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU (R12), Y1 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y5 + ADDQ $0x20, SI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y5 + ADDQ $0x20, DI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y5 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 384(CX), Y3 + VMOVDQU 416(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 448(CX), Y3 + VMOVDQU 480(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 4 to 2 outputs + VMOVDQU (R9), Y5 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 512(CX), Y3 + VMOVDQU 544(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 576(CX), Y3 + VMOVDQU 608(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 5 to 2 outputs + VMOVDQU (R10), Y5 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 640(CX), Y3 + VMOVDQU 672(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 704(CX), Y3 + VMOVDQU 736(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 6 to 2 outputs + VMOVDQU (R11), Y5 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 768(CX), Y3 + VMOVDQU 800(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 832(CX), Y3 + VMOVDQU 864(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 7 to 2 outputs + VMOVDQU (DX), Y5 + ADDQ $0x20, DX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 896(CX), Y3 + VMOVDQU 928(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 960(CX), Y3 + VMOVDQU 992(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Store 2 outputs + VMOVDQU Y0, (R13) + ADDQ $0x20, R13 + VMOVDQU Y1, (R12) + ADDQ $0x20, R12 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_8x2Xor_loop + VZEROUPPER + +mulAvxTwo_8x2Xor_end: + RET + +// func mulAvxTwo_8x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x2_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 73 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_8x2_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ out_base+48(FP), R12 + MOVQ (R12), R13 + MOVQ 24(R12), R12 + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, R13 + ADDQ R14, R12 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_8x2_64Xor_loop: + // Load 2 outputs + VMOVDQU (R13), Y0 + VMOVDQU 32(R13), Y1 + VMOVDQU (R12), Y2 + VMOVDQU 32(R12), Y3 + + // Load and process 64 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y9 + VMOVDQU 32(BX), Y11 + ADDQ $0x40, BX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y9 + VMOVDQU 32(SI), Y11 + ADDQ $0x40, SI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y9 + VMOVDQU 32(DI), Y11 + ADDQ $0x40, DI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y9 + VMOVDQU 32(R8), Y11 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 4 to 2 outputs + VMOVDQU (R9), Y9 + VMOVDQU 32(R9), Y11 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 5 to 2 outputs + VMOVDQU (R10), Y9 + VMOVDQU 32(R10), Y11 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 6 to 2 outputs + VMOVDQU (R11), Y9 + VMOVDQU 32(R11), Y11 + ADDQ $0x40, R11 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 768(CX), Y5 + VMOVDQU 800(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 832(CX), Y5 + VMOVDQU 864(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 7 to 2 outputs + VMOVDQU (DX), Y9 + VMOVDQU 32(DX), Y11 + ADDQ $0x40, DX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 896(CX), Y5 + VMOVDQU 928(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 960(CX), Y5 + VMOVDQU 992(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Store 2 outputs + VMOVDQU Y0, (R13) + VMOVDQU Y1, 32(R13) + ADDQ $0x40, R13 + VMOVDQU Y2, (R12) + VMOVDQU Y3, 32(R12) + ADDQ $0x40, R12 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_8x2_64Xor_loop + VZEROUPPER + +mulAvxTwo_8x2_64Xor_end: + RET + +// func mulAvxTwo_8x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x3(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 56 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_8x3_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ (R12), R13 + MOVQ 24(R12), R14 + MOVQ 48(R12), R12 + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, R13 + ADDQ R15, R14 + ADDQ R15, R12 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X3 + VPBROADCASTB X3, Y3 + +mulAvxTwo_8x3_loop: + // Load and process 32 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y6 + ADDQ $0x20, BX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU (CX), Y4 + VMOVDQU 32(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y0 + VMOVDQU 64(CX), Y4 + VMOVDQU 96(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y1 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y2 + + // Load and process 32 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y6 + ADDQ $0x20, SI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 192(CX), Y4 + VMOVDQU 224(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 256(CX), Y4 + VMOVDQU 288(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 320(CX), Y4 + VMOVDQU 352(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y6 + ADDQ $0x20, DI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 384(CX), Y4 + VMOVDQU 416(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 448(CX), Y4 + VMOVDQU 480(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 512(CX), Y4 + VMOVDQU 544(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 3 to 3 outputs + VMOVDQU (R8), Y6 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 576(CX), Y4 + VMOVDQU 608(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 640(CX), Y4 + VMOVDQU 672(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 704(CX), Y4 + VMOVDQU 736(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 4 to 3 outputs + VMOVDQU (R9), Y6 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 768(CX), Y4 + VMOVDQU 800(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 832(CX), Y4 + VMOVDQU 864(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 896(CX), Y4 + VMOVDQU 928(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 5 to 3 outputs + VMOVDQU (R10), Y6 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 960(CX), Y4 + VMOVDQU 992(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1024(CX), Y4 + VMOVDQU 1056(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1088(CX), Y4 + VMOVDQU 1120(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 6 to 3 outputs + VMOVDQU (R11), Y6 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 1152(CX), Y4 + VMOVDQU 1184(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1216(CX), Y4 + VMOVDQU 1248(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1280(CX), Y4 + VMOVDQU 1312(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 7 to 3 outputs + VMOVDQU (DX), Y6 + ADDQ $0x20, DX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 1344(CX), Y4 + VMOVDQU 1376(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1408(CX), Y4 + VMOVDQU 1440(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1472(CX), Y4 + VMOVDQU 1504(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Store 3 outputs + VMOVDQU Y0, (R13) + ADDQ $0x20, R13 + VMOVDQU Y1, (R14) + ADDQ $0x20, R14 + VMOVDQU Y2, (R12) + ADDQ $0x20, R12 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_8x3_loop + VZEROUPPER + +mulAvxTwo_8x3_end: + RET + +// func mulAvxTwo_8x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x3_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 106 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_8x3_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ out_base+48(FP), R12 + MOVQ (R12), R13 + MOVQ 24(R12), R14 + MOVQ 48(R12), R12 + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, R13 + ADDQ R15, R14 + ADDQ R15, R12 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_8x3_64_loop: + // Load and process 64 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y11 + VMOVDQU 32(BX), Y13 + ADDQ $0x40, BX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y0 + VPXOR Y9, Y10, Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y2 + VPXOR Y9, Y10, Y3 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y4 + VPXOR Y9, Y10, Y5 + + // Load and process 64 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y11 + VMOVDQU 32(SI), Y13 + ADDQ $0x40, SI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y11 + VMOVDQU 32(DI), Y13 + ADDQ $0x40, DI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 3 to 3 outputs + VMOVDQU (R8), Y11 + VMOVDQU 32(R8), Y13 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 4 to 3 outputs + VMOVDQU (R9), Y11 + VMOVDQU 32(R9), Y13 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 5 to 3 outputs + VMOVDQU (R10), Y11 + VMOVDQU 32(R10), Y13 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 6 to 3 outputs + VMOVDQU (R11), Y11 + VMOVDQU 32(R11), Y13 + ADDQ $0x40, R11 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 1152(CX), Y7 + VMOVDQU 1184(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1216(CX), Y7 + VMOVDQU 1248(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y7 + VMOVDQU 1312(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 7 to 3 outputs + VMOVDQU (DX), Y11 + VMOVDQU 32(DX), Y13 + ADDQ $0x40, DX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 1344(CX), Y7 + VMOVDQU 1376(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1408(CX), Y7 + VMOVDQU 1440(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1472(CX), Y7 + VMOVDQU 1504(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Store 3 outputs + VMOVDQU Y0, (R13) + VMOVDQU Y1, 32(R13) + ADDQ $0x40, R13 + VMOVDQU Y2, (R14) + VMOVDQU Y3, 32(R14) + ADDQ $0x40, R14 + VMOVDQU Y4, (R12) + VMOVDQU Y5, 32(R12) + ADDQ $0x40, R12 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_8x3_64_loop + VZEROUPPER + +mulAvxTwo_8x3_64_end: + RET + +// func mulAvxTwo_8x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x3Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 56 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_8x3Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ (R12), R13 + MOVQ 24(R12), R14 + MOVQ 48(R12), R12 + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, R13 + ADDQ R15, R14 + ADDQ R15, R12 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X3 + VPBROADCASTB X3, Y3 + +mulAvxTwo_8x3Xor_loop: + // Load and process 32 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y6 + ADDQ $0x20, BX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU (R13), Y0 + VMOVDQU (CX), Y4 + VMOVDQU 32(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU (R14), Y1 + VMOVDQU 64(CX), Y4 + VMOVDQU 96(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU (R12), Y2 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y6 + ADDQ $0x20, SI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 192(CX), Y4 + VMOVDQU 224(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 256(CX), Y4 + VMOVDQU 288(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 320(CX), Y4 + VMOVDQU 352(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y6 + ADDQ $0x20, DI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 384(CX), Y4 + VMOVDQU 416(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 448(CX), Y4 + VMOVDQU 480(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 512(CX), Y4 + VMOVDQU 544(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 3 to 3 outputs + VMOVDQU (R8), Y6 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 576(CX), Y4 + VMOVDQU 608(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 640(CX), Y4 + VMOVDQU 672(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 704(CX), Y4 + VMOVDQU 736(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 4 to 3 outputs + VMOVDQU (R9), Y6 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 768(CX), Y4 + VMOVDQU 800(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 832(CX), Y4 + VMOVDQU 864(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 896(CX), Y4 + VMOVDQU 928(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 5 to 3 outputs + VMOVDQU (R10), Y6 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 960(CX), Y4 + VMOVDQU 992(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1024(CX), Y4 + VMOVDQU 1056(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1088(CX), Y4 + VMOVDQU 1120(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 6 to 3 outputs + VMOVDQU (R11), Y6 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 1152(CX), Y4 + VMOVDQU 1184(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1216(CX), Y4 + VMOVDQU 1248(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1280(CX), Y4 + VMOVDQU 1312(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 7 to 3 outputs + VMOVDQU (DX), Y6 + ADDQ $0x20, DX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 1344(CX), Y4 + VMOVDQU 1376(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1408(CX), Y4 + VMOVDQU 1440(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1472(CX), Y4 + VMOVDQU 1504(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Store 3 outputs + VMOVDQU Y0, (R13) + ADDQ $0x20, R13 + VMOVDQU Y1, (R14) + ADDQ $0x20, R14 + VMOVDQU Y2, (R12) + ADDQ $0x20, R12 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_8x3Xor_loop + VZEROUPPER + +mulAvxTwo_8x3Xor_end: + RET + +// func mulAvxTwo_8x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x3_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 106 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_8x3_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ out_base+48(FP), R12 + MOVQ (R12), R13 + MOVQ 24(R12), R14 + MOVQ 48(R12), R12 + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, R13 + ADDQ R15, R14 + ADDQ R15, R12 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_8x3_64Xor_loop: + // Load 3 outputs + VMOVDQU (R13), Y0 + VMOVDQU 32(R13), Y1 + VMOVDQU (R14), Y2 + VMOVDQU 32(R14), Y3 + VMOVDQU (R12), Y4 + VMOVDQU 32(R12), Y5 + + // Load and process 64 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y11 + VMOVDQU 32(BX), Y13 + ADDQ $0x40, BX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y11 + VMOVDQU 32(SI), Y13 + ADDQ $0x40, SI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y11 + VMOVDQU 32(DI), Y13 + ADDQ $0x40, DI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 3 to 3 outputs + VMOVDQU (R8), Y11 + VMOVDQU 32(R8), Y13 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 4 to 3 outputs + VMOVDQU (R9), Y11 + VMOVDQU 32(R9), Y13 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 5 to 3 outputs + VMOVDQU (R10), Y11 + VMOVDQU 32(R10), Y13 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 6 to 3 outputs + VMOVDQU (R11), Y11 + VMOVDQU 32(R11), Y13 + ADDQ $0x40, R11 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 1152(CX), Y7 + VMOVDQU 1184(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1216(CX), Y7 + VMOVDQU 1248(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y7 + VMOVDQU 1312(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 7 to 3 outputs + VMOVDQU (DX), Y11 + VMOVDQU 32(DX), Y13 + ADDQ $0x40, DX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 1344(CX), Y7 + VMOVDQU 1376(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1408(CX), Y7 + VMOVDQU 1440(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1472(CX), Y7 + VMOVDQU 1504(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Store 3 outputs + VMOVDQU Y0, (R13) + VMOVDQU Y1, 32(R13) + ADDQ $0x40, R13 + VMOVDQU Y2, (R14) + VMOVDQU Y3, 32(R14) + ADDQ $0x40, R14 + VMOVDQU Y4, (R12) + VMOVDQU Y5, 32(R12) + ADDQ $0x40, R12 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_8x3_64Xor_loop + VZEROUPPER + +mulAvxTwo_8x3_64Xor_end: + RET + +// func mulAvxTwo_8x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x4(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 73 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_8x4_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ (R12), R13 + MOVQ 24(R12), R14 + MOVQ 48(R12), R15 + MOVQ 72(R12), R12 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R12 + + // Add start offset to input + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, DX + MOVQ $0x0000000f, BP + MOVQ BP, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_8x4_loop: + // Load and process 32 bytes from input 0 to 4 outputs + VMOVDQU (BX), Y7 + ADDQ $0x20, BX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y0 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y1 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y2 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y3 + + // Load and process 32 bytes from input 1 to 4 outputs + VMOVDQU (SI), Y7 + ADDQ $0x20, SI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 2 to 4 outputs + VMOVDQU (DI), Y7 + ADDQ $0x20, DI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 3 to 4 outputs + VMOVDQU (R8), Y7 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 768(CX), Y5 + VMOVDQU 800(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 832(CX), Y5 + VMOVDQU 864(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 896(CX), Y5 + VMOVDQU 928(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 960(CX), Y5 + VMOVDQU 992(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 4 to 4 outputs + VMOVDQU (R9), Y7 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1024(CX), Y5 + VMOVDQU 1056(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1088(CX), Y5 + VMOVDQU 1120(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1152(CX), Y5 + VMOVDQU 1184(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1216(CX), Y5 + VMOVDQU 1248(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 5 to 4 outputs + VMOVDQU (R10), Y7 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1280(CX), Y5 + VMOVDQU 1312(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1344(CX), Y5 + VMOVDQU 1376(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1408(CX), Y5 + VMOVDQU 1440(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1472(CX), Y5 + VMOVDQU 1504(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 6 to 4 outputs + VMOVDQU (R11), Y7 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1536(CX), Y5 + VMOVDQU 1568(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1600(CX), Y5 + VMOVDQU 1632(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1664(CX), Y5 + VMOVDQU 1696(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1728(CX), Y5 + VMOVDQU 1760(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 7 to 4 outputs + VMOVDQU (DX), Y7 + ADDQ $0x20, DX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1792(CX), Y5 + VMOVDQU 1824(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1856(CX), Y5 + VMOVDQU 1888(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1920(CX), Y5 + VMOVDQU 1952(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1984(CX), Y5 + VMOVDQU 2016(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Store 4 outputs + VMOVDQU Y0, (R13) + ADDQ $0x20, R13 + VMOVDQU Y1, (R14) + ADDQ $0x20, R14 + VMOVDQU Y2, (R15) + ADDQ $0x20, R15 + VMOVDQU Y3, (R12) + ADDQ $0x20, R12 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_8x4_loop + VZEROUPPER + +mulAvxTwo_8x4_end: + RET + +// func mulAvxTwo_8x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x4Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 73 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_8x4Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ (R12), R13 + MOVQ 24(R12), R14 + MOVQ 48(R12), R15 + MOVQ 72(R12), R12 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R12 + + // Add start offset to input + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, DX + MOVQ $0x0000000f, BP + MOVQ BP, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_8x4Xor_loop: + // Load and process 32 bytes from input 0 to 4 outputs + VMOVDQU (BX), Y7 + ADDQ $0x20, BX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU (R13), Y0 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU (R14), Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU (R15), Y2 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU (R12), Y3 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 1 to 4 outputs + VMOVDQU (SI), Y7 + ADDQ $0x20, SI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 2 to 4 outputs + VMOVDQU (DI), Y7 + ADDQ $0x20, DI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 3 to 4 outputs + VMOVDQU (R8), Y7 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 768(CX), Y5 + VMOVDQU 800(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 832(CX), Y5 + VMOVDQU 864(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 896(CX), Y5 + VMOVDQU 928(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 960(CX), Y5 + VMOVDQU 992(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 4 to 4 outputs + VMOVDQU (R9), Y7 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1024(CX), Y5 + VMOVDQU 1056(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1088(CX), Y5 + VMOVDQU 1120(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1152(CX), Y5 + VMOVDQU 1184(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1216(CX), Y5 + VMOVDQU 1248(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 5 to 4 outputs + VMOVDQU (R10), Y7 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1280(CX), Y5 + VMOVDQU 1312(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1344(CX), Y5 + VMOVDQU 1376(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1408(CX), Y5 + VMOVDQU 1440(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1472(CX), Y5 + VMOVDQU 1504(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 6 to 4 outputs + VMOVDQU (R11), Y7 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1536(CX), Y5 + VMOVDQU 1568(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1600(CX), Y5 + VMOVDQU 1632(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1664(CX), Y5 + VMOVDQU 1696(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1728(CX), Y5 + VMOVDQU 1760(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 7 to 4 outputs + VMOVDQU (DX), Y7 + ADDQ $0x20, DX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1792(CX), Y5 + VMOVDQU 1824(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1856(CX), Y5 + VMOVDQU 1888(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1920(CX), Y5 + VMOVDQU 1952(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1984(CX), Y5 + VMOVDQU 2016(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Store 4 outputs + VMOVDQU Y0, (R13) + ADDQ $0x20, R13 + VMOVDQU Y1, (R14) + ADDQ $0x20, R14 + VMOVDQU Y2, (R15) + ADDQ $0x20, R15 + VMOVDQU Y3, (R12) + ADDQ $0x20, R12 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_8x4Xor_loop + VZEROUPPER + +mulAvxTwo_8x4Xor_end: + RET + +// func mulAvxTwo_8x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x5(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 90 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_8x5_end + MOVQ in_base+24(FP), AX + MOVQ (AX), DX + MOVQ 24(AX), BX + MOVQ 48(AX), SI + MOVQ 72(AX), DI + MOVQ 96(AX), R8 + MOVQ 120(AX), R9 + MOVQ 144(AX), R10 + MOVQ 168(AX), AX + MOVQ out_base+48(FP), R11 + MOVQ (R11), R12 + MOVQ 24(R11), R13 + MOVQ 48(R11), R14 + MOVQ 72(R11), R15 + MOVQ 96(R11), R11 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R11 + + // Add start offset to input + ADDQ BP, DX + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, AX + MOVQ $0x0000000f, BP + MOVQ BP, X5 + VPBROADCASTB X5, Y5 + MOVQ n+80(FP), BP + SHRQ $0x05, BP + +mulAvxTwo_8x5_loop: + // Load and process 32 bytes from input 0 to 5 outputs + VMOVDQU (DX), Y8 + ADDQ $0x20, DX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU (CX), Y6 + VMOVDQU 32(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y0 + VMOVDQU 64(CX), Y6 + VMOVDQU 96(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y1 + VMOVDQU 128(CX), Y6 + VMOVDQU 160(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y2 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y3 + VMOVDQU 256(CX), Y6 + VMOVDQU 288(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y4 + + // Load and process 32 bytes from input 1 to 5 outputs + VMOVDQU (BX), Y8 + ADDQ $0x20, BX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 320(CX), Y6 + VMOVDQU 352(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 384(CX), Y6 + VMOVDQU 416(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 448(CX), Y6 + VMOVDQU 480(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 512(CX), Y6 + VMOVDQU 544(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 576(CX), Y6 + VMOVDQU 608(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 2 to 5 outputs + VMOVDQU (SI), Y8 + ADDQ $0x20, SI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 640(CX), Y6 + VMOVDQU 672(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 704(CX), Y6 + VMOVDQU 736(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 768(CX), Y6 + VMOVDQU 800(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 832(CX), Y6 + VMOVDQU 864(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 896(CX), Y6 + VMOVDQU 928(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 3 to 5 outputs + VMOVDQU (DI), Y8 + ADDQ $0x20, DI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 960(CX), Y6 + VMOVDQU 992(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1024(CX), Y6 + VMOVDQU 1056(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1088(CX), Y6 + VMOVDQU 1120(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1152(CX), Y6 + VMOVDQU 1184(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1216(CX), Y6 + VMOVDQU 1248(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 4 to 5 outputs + VMOVDQU (R8), Y8 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1280(CX), Y6 + VMOVDQU 1312(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1344(CX), Y6 + VMOVDQU 1376(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1408(CX), Y6 + VMOVDQU 1440(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1472(CX), Y6 + VMOVDQU 1504(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1536(CX), Y6 + VMOVDQU 1568(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 5 to 5 outputs + VMOVDQU (R9), Y8 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1600(CX), Y6 + VMOVDQU 1632(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1664(CX), Y6 + VMOVDQU 1696(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1728(CX), Y6 + VMOVDQU 1760(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1792(CX), Y6 + VMOVDQU 1824(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1856(CX), Y6 + VMOVDQU 1888(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 6 to 5 outputs + VMOVDQU (R10), Y8 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1920(CX), Y6 + VMOVDQU 1952(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1984(CX), Y6 + VMOVDQU 2016(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 2048(CX), Y6 + VMOVDQU 2080(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 2112(CX), Y6 + VMOVDQU 2144(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 2176(CX), Y6 + VMOVDQU 2208(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 7 to 5 outputs + VMOVDQU (AX), Y8 + ADDQ $0x20, AX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 2240(CX), Y6 + VMOVDQU 2272(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 2304(CX), Y6 + VMOVDQU 2336(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 2368(CX), Y6 + VMOVDQU 2400(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 2432(CX), Y6 + VMOVDQU 2464(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 2496(CX), Y6 + VMOVDQU 2528(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Store 5 outputs + VMOVDQU Y0, (R12) + ADDQ $0x20, R12 + VMOVDQU Y1, (R13) + ADDQ $0x20, R13 + VMOVDQU Y2, (R14) + ADDQ $0x20, R14 + VMOVDQU Y3, (R15) + ADDQ $0x20, R15 + VMOVDQU Y4, (R11) + ADDQ $0x20, R11 + + // Prepare for next loop + DECQ BP + JNZ mulAvxTwo_8x5_loop + VZEROUPPER + +mulAvxTwo_8x5_end: + RET + +// func mulAvxTwo_8x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x5Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 90 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_8x5Xor_end + MOVQ in_base+24(FP), AX + MOVQ (AX), DX + MOVQ 24(AX), BX + MOVQ 48(AX), SI + MOVQ 72(AX), DI + MOVQ 96(AX), R8 + MOVQ 120(AX), R9 + MOVQ 144(AX), R10 + MOVQ 168(AX), AX + MOVQ out_base+48(FP), R11 + MOVQ (R11), R12 + MOVQ 24(R11), R13 + MOVQ 48(R11), R14 + MOVQ 72(R11), R15 + MOVQ 96(R11), R11 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R11 + + // Add start offset to input + ADDQ BP, DX + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, AX + MOVQ $0x0000000f, BP + MOVQ BP, X5 + VPBROADCASTB X5, Y5 + MOVQ n+80(FP), BP + SHRQ $0x05, BP + +mulAvxTwo_8x5Xor_loop: + // Load and process 32 bytes from input 0 to 5 outputs + VMOVDQU (DX), Y8 + ADDQ $0x20, DX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU (R12), Y0 + VMOVDQU (CX), Y6 + VMOVDQU 32(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU (R13), Y1 + VMOVDQU 64(CX), Y6 + VMOVDQU 96(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU (R14), Y2 + VMOVDQU 128(CX), Y6 + VMOVDQU 160(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU (R15), Y3 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU (R11), Y4 + VMOVDQU 256(CX), Y6 + VMOVDQU 288(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 1 to 5 outputs + VMOVDQU (BX), Y8 + ADDQ $0x20, BX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 320(CX), Y6 + VMOVDQU 352(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 384(CX), Y6 + VMOVDQU 416(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 448(CX), Y6 + VMOVDQU 480(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 512(CX), Y6 + VMOVDQU 544(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 576(CX), Y6 + VMOVDQU 608(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 2 to 5 outputs + VMOVDQU (SI), Y8 + ADDQ $0x20, SI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 640(CX), Y6 + VMOVDQU 672(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 704(CX), Y6 + VMOVDQU 736(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 768(CX), Y6 + VMOVDQU 800(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 832(CX), Y6 + VMOVDQU 864(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 896(CX), Y6 + VMOVDQU 928(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 3 to 5 outputs + VMOVDQU (DI), Y8 + ADDQ $0x20, DI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 960(CX), Y6 + VMOVDQU 992(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1024(CX), Y6 + VMOVDQU 1056(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1088(CX), Y6 + VMOVDQU 1120(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1152(CX), Y6 + VMOVDQU 1184(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1216(CX), Y6 + VMOVDQU 1248(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 4 to 5 outputs + VMOVDQU (R8), Y8 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1280(CX), Y6 + VMOVDQU 1312(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1344(CX), Y6 + VMOVDQU 1376(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1408(CX), Y6 + VMOVDQU 1440(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1472(CX), Y6 + VMOVDQU 1504(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1536(CX), Y6 + VMOVDQU 1568(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 5 to 5 outputs + VMOVDQU (R9), Y8 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1600(CX), Y6 + VMOVDQU 1632(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1664(CX), Y6 + VMOVDQU 1696(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1728(CX), Y6 + VMOVDQU 1760(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1792(CX), Y6 + VMOVDQU 1824(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1856(CX), Y6 + VMOVDQU 1888(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 6 to 5 outputs + VMOVDQU (R10), Y8 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1920(CX), Y6 + VMOVDQU 1952(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1984(CX), Y6 + VMOVDQU 2016(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 2048(CX), Y6 + VMOVDQU 2080(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 2112(CX), Y6 + VMOVDQU 2144(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 2176(CX), Y6 + VMOVDQU 2208(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 7 to 5 outputs + VMOVDQU (AX), Y8 + ADDQ $0x20, AX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 2240(CX), Y6 + VMOVDQU 2272(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 2304(CX), Y6 + VMOVDQU 2336(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 2368(CX), Y6 + VMOVDQU 2400(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 2432(CX), Y6 + VMOVDQU 2464(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 2496(CX), Y6 + VMOVDQU 2528(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Store 5 outputs + VMOVDQU Y0, (R12) + ADDQ $0x20, R12 + VMOVDQU Y1, (R13) + ADDQ $0x20, R13 + VMOVDQU Y2, (R14) + ADDQ $0x20, R14 + VMOVDQU Y3, (R15) + ADDQ $0x20, R15 + VMOVDQU Y4, (R11) + ADDQ $0x20, R11 + + // Prepare for next loop + DECQ BP + JNZ mulAvxTwo_8x5Xor_loop + VZEROUPPER + +mulAvxTwo_8x5Xor_end: + RET + +// func mulAvxTwo_8x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x6(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 107 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_8x6_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ start+72(FP), R13 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_8x6_loop: + // Load and process 32 bytes from input 0 to 6 outputs + VMOVDQU (BX), Y9 + ADDQ $0x20, BX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y0 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y1 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y2 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y3 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y4 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y5 + + // Load and process 32 bytes from input 1 to 6 outputs + VMOVDQU (SI), Y9 + ADDQ $0x20, SI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 2 to 6 outputs + VMOVDQU (DI), Y9 + ADDQ $0x20, DI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 3 to 6 outputs + VMOVDQU (R8), Y9 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1152(CX), Y7 + VMOVDQU 1184(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1216(CX), Y7 + VMOVDQU 1248(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1280(CX), Y7 + VMOVDQU 1312(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1344(CX), Y7 + VMOVDQU 1376(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1408(CX), Y7 + VMOVDQU 1440(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1472(CX), Y7 + VMOVDQU 1504(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 4 to 6 outputs + VMOVDQU (R9), Y9 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1536(CX), Y7 + VMOVDQU 1568(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1600(CX), Y7 + VMOVDQU 1632(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1664(CX), Y7 + VMOVDQU 1696(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1728(CX), Y7 + VMOVDQU 1760(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1792(CX), Y7 + VMOVDQU 1824(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1856(CX), Y7 + VMOVDQU 1888(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 5 to 6 outputs + VMOVDQU (R10), Y9 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1920(CX), Y7 + VMOVDQU 1952(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1984(CX), Y7 + VMOVDQU 2016(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2048(CX), Y7 + VMOVDQU 2080(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2112(CX), Y7 + VMOVDQU 2144(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2176(CX), Y7 + VMOVDQU 2208(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 2240(CX), Y7 + VMOVDQU 2272(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 6 to 6 outputs + VMOVDQU (R11), Y9 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 2304(CX), Y7 + VMOVDQU 2336(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 2368(CX), Y7 + VMOVDQU 2400(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2432(CX), Y7 + VMOVDQU 2464(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2496(CX), Y7 + VMOVDQU 2528(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2560(CX), Y7 + VMOVDQU 2592(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 2624(CX), Y7 + VMOVDQU 2656(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 7 to 6 outputs + VMOVDQU (DX), Y9 + ADDQ $0x20, DX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 2688(CX), Y7 + VMOVDQU 2720(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 2752(CX), Y7 + VMOVDQU 2784(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2816(CX), Y7 + VMOVDQU 2848(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2880(CX), Y7 + VMOVDQU 2912(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2944(CX), Y7 + VMOVDQU 2976(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 3008(CX), Y7 + VMOVDQU 3040(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Store 6 outputs + MOVQ (R12), R14 + VMOVDQU Y0, (R14)(R13*1) + MOVQ 24(R12), R14 + VMOVDQU Y1, (R14)(R13*1) + MOVQ 48(R12), R14 + VMOVDQU Y2, (R14)(R13*1) + MOVQ 72(R12), R14 + VMOVDQU Y3, (R14)(R13*1) + MOVQ 96(R12), R14 + VMOVDQU Y4, (R14)(R13*1) + MOVQ 120(R12), R14 + VMOVDQU Y5, (R14)(R13*1) + + // Prepare for next loop + ADDQ $0x20, R13 + DECQ AX + JNZ mulAvxTwo_8x6_loop + VZEROUPPER + +mulAvxTwo_8x6_end: + RET + +// func mulAvxTwo_8x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x6Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 107 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_8x6Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ start+72(FP), R13 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_8x6Xor_loop: + // Load and process 32 bytes from input 0 to 6 outputs + VMOVDQU (BX), Y9 + ADDQ $0x20, BX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + MOVQ (R12), R14 + VMOVDQU (R14)(R13*1), Y0 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + MOVQ 24(R12), R14 + VMOVDQU (R14)(R13*1), Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + MOVQ 48(R12), R14 + VMOVDQU (R14)(R13*1), Y2 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + MOVQ 72(R12), R14 + VMOVDQU (R14)(R13*1), Y3 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + MOVQ 96(R12), R14 + VMOVDQU (R14)(R13*1), Y4 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + MOVQ 120(R12), R14 + VMOVDQU (R14)(R13*1), Y5 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 1 to 6 outputs + VMOVDQU (SI), Y9 + ADDQ $0x20, SI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 2 to 6 outputs + VMOVDQU (DI), Y9 + ADDQ $0x20, DI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 3 to 6 outputs + VMOVDQU (R8), Y9 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1152(CX), Y7 + VMOVDQU 1184(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1216(CX), Y7 + VMOVDQU 1248(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1280(CX), Y7 + VMOVDQU 1312(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1344(CX), Y7 + VMOVDQU 1376(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1408(CX), Y7 + VMOVDQU 1440(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1472(CX), Y7 + VMOVDQU 1504(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 4 to 6 outputs + VMOVDQU (R9), Y9 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1536(CX), Y7 + VMOVDQU 1568(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1600(CX), Y7 + VMOVDQU 1632(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1664(CX), Y7 + VMOVDQU 1696(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1728(CX), Y7 + VMOVDQU 1760(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1792(CX), Y7 + VMOVDQU 1824(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1856(CX), Y7 + VMOVDQU 1888(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 5 to 6 outputs + VMOVDQU (R10), Y9 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1920(CX), Y7 + VMOVDQU 1952(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1984(CX), Y7 + VMOVDQU 2016(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2048(CX), Y7 + VMOVDQU 2080(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2112(CX), Y7 + VMOVDQU 2144(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2176(CX), Y7 + VMOVDQU 2208(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 2240(CX), Y7 + VMOVDQU 2272(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 6 to 6 outputs + VMOVDQU (R11), Y9 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 2304(CX), Y7 + VMOVDQU 2336(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 2368(CX), Y7 + VMOVDQU 2400(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2432(CX), Y7 + VMOVDQU 2464(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2496(CX), Y7 + VMOVDQU 2528(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2560(CX), Y7 + VMOVDQU 2592(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 2624(CX), Y7 + VMOVDQU 2656(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 7 to 6 outputs + VMOVDQU (DX), Y9 + ADDQ $0x20, DX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 2688(CX), Y7 + VMOVDQU 2720(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 2752(CX), Y7 + VMOVDQU 2784(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2816(CX), Y7 + VMOVDQU 2848(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2880(CX), Y7 + VMOVDQU 2912(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2944(CX), Y7 + VMOVDQU 2976(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 3008(CX), Y7 + VMOVDQU 3040(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Store 6 outputs + MOVQ (R12), R14 + VMOVDQU Y0, (R14)(R13*1) + MOVQ 24(R12), R14 + VMOVDQU Y1, (R14)(R13*1) + MOVQ 48(R12), R14 + VMOVDQU Y2, (R14)(R13*1) + MOVQ 72(R12), R14 + VMOVDQU Y3, (R14)(R13*1) + MOVQ 96(R12), R14 + VMOVDQU Y4, (R14)(R13*1) + MOVQ 120(R12), R14 + VMOVDQU Y5, (R14)(R13*1) + + // Prepare for next loop + ADDQ $0x20, R13 + DECQ AX + JNZ mulAvxTwo_8x6Xor_loop + VZEROUPPER + +mulAvxTwo_8x6Xor_end: + RET + +// func mulAvxTwo_8x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x7(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 124 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_8x7_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ start+72(FP), R13 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X7 + VPBROADCASTB X7, Y7 + +mulAvxTwo_8x7_loop: + // Load and process 32 bytes from input 0 to 7 outputs + VMOVDQU (BX), Y10 + ADDQ $0x20, BX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU (CX), Y8 + VMOVDQU 32(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y0 + VMOVDQU 64(CX), Y8 + VMOVDQU 96(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y1 + VMOVDQU 128(CX), Y8 + VMOVDQU 160(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y2 + VMOVDQU 192(CX), Y8 + VMOVDQU 224(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y3 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y4 + VMOVDQU 320(CX), Y8 + VMOVDQU 352(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y5 + VMOVDQU 384(CX), Y8 + VMOVDQU 416(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y6 + + // Load and process 32 bytes from input 1 to 7 outputs + VMOVDQU (SI), Y10 + ADDQ $0x20, SI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 448(CX), Y8 + VMOVDQU 480(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 512(CX), Y8 + VMOVDQU 544(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 576(CX), Y8 + VMOVDQU 608(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 640(CX), Y8 + VMOVDQU 672(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 704(CX), Y8 + VMOVDQU 736(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 768(CX), Y8 + VMOVDQU 800(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 832(CX), Y8 + VMOVDQU 864(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 2 to 7 outputs + VMOVDQU (DI), Y10 + ADDQ $0x20, DI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 896(CX), Y8 + VMOVDQU 928(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 960(CX), Y8 + VMOVDQU 992(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1024(CX), Y8 + VMOVDQU 1056(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1088(CX), Y8 + VMOVDQU 1120(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1152(CX), Y8 + VMOVDQU 1184(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1216(CX), Y8 + VMOVDQU 1248(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1280(CX), Y8 + VMOVDQU 1312(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 3 to 7 outputs + VMOVDQU (R8), Y10 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1344(CX), Y8 + VMOVDQU 1376(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1408(CX), Y8 + VMOVDQU 1440(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1472(CX), Y8 + VMOVDQU 1504(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1536(CX), Y8 + VMOVDQU 1568(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1600(CX), Y8 + VMOVDQU 1632(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1664(CX), Y8 + VMOVDQU 1696(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1728(CX), Y8 + VMOVDQU 1760(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 4 to 7 outputs + VMOVDQU (R9), Y10 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1792(CX), Y8 + VMOVDQU 1824(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1856(CX), Y8 + VMOVDQU 1888(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1920(CX), Y8 + VMOVDQU 1952(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1984(CX), Y8 + VMOVDQU 2016(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2048(CX), Y8 + VMOVDQU 2080(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 2112(CX), Y8 + VMOVDQU 2144(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 2176(CX), Y8 + VMOVDQU 2208(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 5 to 7 outputs + VMOVDQU (R10), Y10 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 2240(CX), Y8 + VMOVDQU 2272(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 2304(CX), Y8 + VMOVDQU 2336(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 2368(CX), Y8 + VMOVDQU 2400(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 2432(CX), Y8 + VMOVDQU 2464(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2496(CX), Y8 + VMOVDQU 2528(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 2560(CX), Y8 + VMOVDQU 2592(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 2624(CX), Y8 + VMOVDQU 2656(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 6 to 7 outputs + VMOVDQU (R11), Y10 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 2688(CX), Y8 + VMOVDQU 2720(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 2752(CX), Y8 + VMOVDQU 2784(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 2816(CX), Y8 + VMOVDQU 2848(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 2880(CX), Y8 + VMOVDQU 2912(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2944(CX), Y8 + VMOVDQU 2976(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 3008(CX), Y8 + VMOVDQU 3040(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 3072(CX), Y8 + VMOVDQU 3104(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 7 to 7 outputs + VMOVDQU (DX), Y10 + ADDQ $0x20, DX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 3136(CX), Y8 + VMOVDQU 3168(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 3200(CX), Y8 + VMOVDQU 3232(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 3264(CX), Y8 + VMOVDQU 3296(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 3328(CX), Y8 + VMOVDQU 3360(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 3392(CX), Y8 + VMOVDQU 3424(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 3456(CX), Y8 + VMOVDQU 3488(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 3520(CX), Y8 + VMOVDQU 3552(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Store 7 outputs + MOVQ (R12), R14 + VMOVDQU Y0, (R14)(R13*1) + MOVQ 24(R12), R14 + VMOVDQU Y1, (R14)(R13*1) + MOVQ 48(R12), R14 + VMOVDQU Y2, (R14)(R13*1) + MOVQ 72(R12), R14 + VMOVDQU Y3, (R14)(R13*1) + MOVQ 96(R12), R14 + VMOVDQU Y4, (R14)(R13*1) + MOVQ 120(R12), R14 + VMOVDQU Y5, (R14)(R13*1) + MOVQ 144(R12), R14 + VMOVDQU Y6, (R14)(R13*1) + + // Prepare for next loop + ADDQ $0x20, R13 + DECQ AX + JNZ mulAvxTwo_8x7_loop + VZEROUPPER + +mulAvxTwo_8x7_end: + RET + +// func mulAvxTwo_8x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x7Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 124 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_8x7Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ start+72(FP), R13 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X7 + VPBROADCASTB X7, Y7 + +mulAvxTwo_8x7Xor_loop: + // Load and process 32 bytes from input 0 to 7 outputs + VMOVDQU (BX), Y10 + ADDQ $0x20, BX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + MOVQ (R12), R14 + VMOVDQU (R14)(R13*1), Y0 + VMOVDQU (CX), Y8 + VMOVDQU 32(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + MOVQ 24(R12), R14 + VMOVDQU (R14)(R13*1), Y1 + VMOVDQU 64(CX), Y8 + VMOVDQU 96(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + MOVQ 48(R12), R14 + VMOVDQU (R14)(R13*1), Y2 + VMOVDQU 128(CX), Y8 + VMOVDQU 160(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + MOVQ 72(R12), R14 + VMOVDQU (R14)(R13*1), Y3 + VMOVDQU 192(CX), Y8 + VMOVDQU 224(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + MOVQ 96(R12), R14 + VMOVDQU (R14)(R13*1), Y4 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + MOVQ 120(R12), R14 + VMOVDQU (R14)(R13*1), Y5 + VMOVDQU 320(CX), Y8 + VMOVDQU 352(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + MOVQ 144(R12), R14 + VMOVDQU (R14)(R13*1), Y6 + VMOVDQU 384(CX), Y8 + VMOVDQU 416(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 1 to 7 outputs + VMOVDQU (SI), Y10 + ADDQ $0x20, SI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 448(CX), Y8 + VMOVDQU 480(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 512(CX), Y8 + VMOVDQU 544(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 576(CX), Y8 + VMOVDQU 608(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 640(CX), Y8 + VMOVDQU 672(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 704(CX), Y8 + VMOVDQU 736(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 768(CX), Y8 + VMOVDQU 800(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 832(CX), Y8 + VMOVDQU 864(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 2 to 7 outputs + VMOVDQU (DI), Y10 + ADDQ $0x20, DI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 896(CX), Y8 + VMOVDQU 928(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 960(CX), Y8 + VMOVDQU 992(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1024(CX), Y8 + VMOVDQU 1056(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1088(CX), Y8 + VMOVDQU 1120(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1152(CX), Y8 + VMOVDQU 1184(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1216(CX), Y8 + VMOVDQU 1248(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1280(CX), Y8 + VMOVDQU 1312(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 3 to 7 outputs + VMOVDQU (R8), Y10 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1344(CX), Y8 + VMOVDQU 1376(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1408(CX), Y8 + VMOVDQU 1440(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1472(CX), Y8 + VMOVDQU 1504(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1536(CX), Y8 + VMOVDQU 1568(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1600(CX), Y8 + VMOVDQU 1632(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1664(CX), Y8 + VMOVDQU 1696(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1728(CX), Y8 + VMOVDQU 1760(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 4 to 7 outputs + VMOVDQU (R9), Y10 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1792(CX), Y8 + VMOVDQU 1824(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1856(CX), Y8 + VMOVDQU 1888(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1920(CX), Y8 + VMOVDQU 1952(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1984(CX), Y8 + VMOVDQU 2016(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2048(CX), Y8 + VMOVDQU 2080(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 2112(CX), Y8 + VMOVDQU 2144(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 2176(CX), Y8 + VMOVDQU 2208(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 5 to 7 outputs + VMOVDQU (R10), Y10 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 2240(CX), Y8 + VMOVDQU 2272(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 2304(CX), Y8 + VMOVDQU 2336(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 2368(CX), Y8 + VMOVDQU 2400(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 2432(CX), Y8 + VMOVDQU 2464(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2496(CX), Y8 + VMOVDQU 2528(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 2560(CX), Y8 + VMOVDQU 2592(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 2624(CX), Y8 + VMOVDQU 2656(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 6 to 7 outputs + VMOVDQU (R11), Y10 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 2688(CX), Y8 + VMOVDQU 2720(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 2752(CX), Y8 + VMOVDQU 2784(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 2816(CX), Y8 + VMOVDQU 2848(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 2880(CX), Y8 + VMOVDQU 2912(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2944(CX), Y8 + VMOVDQU 2976(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 3008(CX), Y8 + VMOVDQU 3040(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 3072(CX), Y8 + VMOVDQU 3104(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 7 to 7 outputs + VMOVDQU (DX), Y10 + ADDQ $0x20, DX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 3136(CX), Y8 + VMOVDQU 3168(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 3200(CX), Y8 + VMOVDQU 3232(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 3264(CX), Y8 + VMOVDQU 3296(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 3328(CX), Y8 + VMOVDQU 3360(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 3392(CX), Y8 + VMOVDQU 3424(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 3456(CX), Y8 + VMOVDQU 3488(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 3520(CX), Y8 + VMOVDQU 3552(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Store 7 outputs + MOVQ (R12), R14 + VMOVDQU Y0, (R14)(R13*1) + MOVQ 24(R12), R14 + VMOVDQU Y1, (R14)(R13*1) + MOVQ 48(R12), R14 + VMOVDQU Y2, (R14)(R13*1) + MOVQ 72(R12), R14 + VMOVDQU Y3, (R14)(R13*1) + MOVQ 96(R12), R14 + VMOVDQU Y4, (R14)(R13*1) + MOVQ 120(R12), R14 + VMOVDQU Y5, (R14)(R13*1) + MOVQ 144(R12), R14 + VMOVDQU Y6, (R14)(R13*1) + + // Prepare for next loop + ADDQ $0x20, R13 + DECQ AX + JNZ mulAvxTwo_8x7Xor_loop + VZEROUPPER + +mulAvxTwo_8x7Xor_end: + RET + +// func mulAvxTwo_8x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x8(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 141 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_8x8_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ start+72(FP), R13 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X8 + VPBROADCASTB X8, Y8 + +mulAvxTwo_8x8_loop: + // Load and process 32 bytes from input 0 to 8 outputs + VMOVDQU (BX), Y11 + ADDQ $0x20, BX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU (CX), Y9 + VMOVDQU 32(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y0 + VMOVDQU 64(CX), Y9 + VMOVDQU 96(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y1 + VMOVDQU 128(CX), Y9 + VMOVDQU 160(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y2 + VMOVDQU 192(CX), Y9 + VMOVDQU 224(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y3 + VMOVDQU 256(CX), Y9 + VMOVDQU 288(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y4 + VMOVDQU 320(CX), Y9 + VMOVDQU 352(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y5 + VMOVDQU 384(CX), Y9 + VMOVDQU 416(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y6 + VMOVDQU 448(CX), Y9 + VMOVDQU 480(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y7 + + // Load and process 32 bytes from input 1 to 8 outputs + VMOVDQU (SI), Y11 + ADDQ $0x20, SI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 512(CX), Y9 + VMOVDQU 544(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 576(CX), Y9 + VMOVDQU 608(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y9 + VMOVDQU 672(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 704(CX), Y9 + VMOVDQU 736(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 768(CX), Y9 + VMOVDQU 800(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 832(CX), Y9 + VMOVDQU 864(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 896(CX), Y9 + VMOVDQU 928(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 960(CX), Y9 + VMOVDQU 992(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 2 to 8 outputs + VMOVDQU (DI), Y11 + ADDQ $0x20, DI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1024(CX), Y9 + VMOVDQU 1056(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1088(CX), Y9 + VMOVDQU 1120(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1152(CX), Y9 + VMOVDQU 1184(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1216(CX), Y9 + VMOVDQU 1248(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y9 + VMOVDQU 1312(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1344(CX), Y9 + VMOVDQU 1376(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1408(CX), Y9 + VMOVDQU 1440(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1472(CX), Y9 + VMOVDQU 1504(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 3 to 8 outputs + VMOVDQU (R8), Y11 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1536(CX), Y9 + VMOVDQU 1568(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1600(CX), Y9 + VMOVDQU 1632(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1664(CX), Y9 + VMOVDQU 1696(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1728(CX), Y9 + VMOVDQU 1760(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1792(CX), Y9 + VMOVDQU 1824(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1856(CX), Y9 + VMOVDQU 1888(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1920(CX), Y9 + VMOVDQU 1952(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1984(CX), Y9 + VMOVDQU 2016(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 4 to 8 outputs + VMOVDQU (R9), Y11 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 2048(CX), Y9 + VMOVDQU 2080(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 2112(CX), Y9 + VMOVDQU 2144(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 2176(CX), Y9 + VMOVDQU 2208(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 2240(CX), Y9 + VMOVDQU 2272(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 2304(CX), Y9 + VMOVDQU 2336(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 2368(CX), Y9 + VMOVDQU 2400(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 2432(CX), Y9 + VMOVDQU 2464(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 2496(CX), Y9 + VMOVDQU 2528(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 5 to 8 outputs + VMOVDQU (R10), Y11 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 2560(CX), Y9 + VMOVDQU 2592(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 2624(CX), Y9 + VMOVDQU 2656(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 2688(CX), Y9 + VMOVDQU 2720(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 2752(CX), Y9 + VMOVDQU 2784(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 2816(CX), Y9 + VMOVDQU 2848(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 2880(CX), Y9 + VMOVDQU 2912(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 2944(CX), Y9 + VMOVDQU 2976(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 3008(CX), Y9 + VMOVDQU 3040(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 6 to 8 outputs + VMOVDQU (R11), Y11 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 3072(CX), Y9 + VMOVDQU 3104(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 3136(CX), Y9 + VMOVDQU 3168(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 3200(CX), Y9 + VMOVDQU 3232(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 3264(CX), Y9 + VMOVDQU 3296(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 3328(CX), Y9 + VMOVDQU 3360(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 3392(CX), Y9 + VMOVDQU 3424(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 3456(CX), Y9 + VMOVDQU 3488(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 3520(CX), Y9 + VMOVDQU 3552(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 7 to 8 outputs + VMOVDQU (DX), Y11 + ADDQ $0x20, DX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 3584(CX), Y9 + VMOVDQU 3616(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 3648(CX), Y9 + VMOVDQU 3680(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 3712(CX), Y9 + VMOVDQU 3744(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 3776(CX), Y9 + VMOVDQU 3808(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 3840(CX), Y9 + VMOVDQU 3872(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 3904(CX), Y9 + VMOVDQU 3936(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 3968(CX), Y9 + VMOVDQU 4000(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 4032(CX), Y9 + VMOVDQU 4064(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Store 8 outputs + MOVQ (R12), R14 + VMOVDQU Y0, (R14)(R13*1) + MOVQ 24(R12), R14 + VMOVDQU Y1, (R14)(R13*1) + MOVQ 48(R12), R14 + VMOVDQU Y2, (R14)(R13*1) + MOVQ 72(R12), R14 + VMOVDQU Y3, (R14)(R13*1) + MOVQ 96(R12), R14 + VMOVDQU Y4, (R14)(R13*1) + MOVQ 120(R12), R14 + VMOVDQU Y5, (R14)(R13*1) + MOVQ 144(R12), R14 + VMOVDQU Y6, (R14)(R13*1) + MOVQ 168(R12), R14 + VMOVDQU Y7, (R14)(R13*1) + + // Prepare for next loop + ADDQ $0x20, R13 + DECQ AX + JNZ mulAvxTwo_8x8_loop + VZEROUPPER + +mulAvxTwo_8x8_end: + RET + +// func mulAvxTwo_8x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x8Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 141 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_8x8Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ start+72(FP), R13 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X8 + VPBROADCASTB X8, Y8 + +mulAvxTwo_8x8Xor_loop: + // Load and process 32 bytes from input 0 to 8 outputs + VMOVDQU (BX), Y11 + ADDQ $0x20, BX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + MOVQ (R12), R14 + VMOVDQU (R14)(R13*1), Y0 + VMOVDQU (CX), Y9 + VMOVDQU 32(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + MOVQ 24(R12), R14 + VMOVDQU (R14)(R13*1), Y1 + VMOVDQU 64(CX), Y9 + VMOVDQU 96(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + MOVQ 48(R12), R14 + VMOVDQU (R14)(R13*1), Y2 + VMOVDQU 128(CX), Y9 + VMOVDQU 160(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + MOVQ 72(R12), R14 + VMOVDQU (R14)(R13*1), Y3 + VMOVDQU 192(CX), Y9 + VMOVDQU 224(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + MOVQ 96(R12), R14 + VMOVDQU (R14)(R13*1), Y4 + VMOVDQU 256(CX), Y9 + VMOVDQU 288(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + MOVQ 120(R12), R14 + VMOVDQU (R14)(R13*1), Y5 + VMOVDQU 320(CX), Y9 + VMOVDQU 352(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + MOVQ 144(R12), R14 + VMOVDQU (R14)(R13*1), Y6 + VMOVDQU 384(CX), Y9 + VMOVDQU 416(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + MOVQ 168(R12), R14 + VMOVDQU (R14)(R13*1), Y7 + VMOVDQU 448(CX), Y9 + VMOVDQU 480(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 1 to 8 outputs + VMOVDQU (SI), Y11 + ADDQ $0x20, SI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 512(CX), Y9 + VMOVDQU 544(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 576(CX), Y9 + VMOVDQU 608(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y9 + VMOVDQU 672(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 704(CX), Y9 + VMOVDQU 736(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 768(CX), Y9 + VMOVDQU 800(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 832(CX), Y9 + VMOVDQU 864(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 896(CX), Y9 + VMOVDQU 928(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 960(CX), Y9 + VMOVDQU 992(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 2 to 8 outputs + VMOVDQU (DI), Y11 + ADDQ $0x20, DI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1024(CX), Y9 + VMOVDQU 1056(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1088(CX), Y9 + VMOVDQU 1120(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1152(CX), Y9 + VMOVDQU 1184(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1216(CX), Y9 + VMOVDQU 1248(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y9 + VMOVDQU 1312(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1344(CX), Y9 + VMOVDQU 1376(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1408(CX), Y9 + VMOVDQU 1440(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1472(CX), Y9 + VMOVDQU 1504(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 3 to 8 outputs + VMOVDQU (R8), Y11 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1536(CX), Y9 + VMOVDQU 1568(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1600(CX), Y9 + VMOVDQU 1632(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1664(CX), Y9 + VMOVDQU 1696(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1728(CX), Y9 + VMOVDQU 1760(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1792(CX), Y9 + VMOVDQU 1824(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1856(CX), Y9 + VMOVDQU 1888(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1920(CX), Y9 + VMOVDQU 1952(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1984(CX), Y9 + VMOVDQU 2016(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 4 to 8 outputs + VMOVDQU (R9), Y11 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 2048(CX), Y9 + VMOVDQU 2080(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 2112(CX), Y9 + VMOVDQU 2144(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 2176(CX), Y9 + VMOVDQU 2208(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 2240(CX), Y9 + VMOVDQU 2272(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 2304(CX), Y9 + VMOVDQU 2336(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 2368(CX), Y9 + VMOVDQU 2400(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 2432(CX), Y9 + VMOVDQU 2464(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 2496(CX), Y9 + VMOVDQU 2528(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 5 to 8 outputs + VMOVDQU (R10), Y11 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 2560(CX), Y9 + VMOVDQU 2592(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 2624(CX), Y9 + VMOVDQU 2656(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 2688(CX), Y9 + VMOVDQU 2720(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 2752(CX), Y9 + VMOVDQU 2784(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 2816(CX), Y9 + VMOVDQU 2848(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 2880(CX), Y9 + VMOVDQU 2912(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 2944(CX), Y9 + VMOVDQU 2976(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 3008(CX), Y9 + VMOVDQU 3040(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 6 to 8 outputs + VMOVDQU (R11), Y11 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 3072(CX), Y9 + VMOVDQU 3104(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 3136(CX), Y9 + VMOVDQU 3168(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 3200(CX), Y9 + VMOVDQU 3232(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 3264(CX), Y9 + VMOVDQU 3296(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 3328(CX), Y9 + VMOVDQU 3360(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 3392(CX), Y9 + VMOVDQU 3424(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 3456(CX), Y9 + VMOVDQU 3488(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 3520(CX), Y9 + VMOVDQU 3552(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 7 to 8 outputs + VMOVDQU (DX), Y11 + ADDQ $0x20, DX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 3584(CX), Y9 + VMOVDQU 3616(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 3648(CX), Y9 + VMOVDQU 3680(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 3712(CX), Y9 + VMOVDQU 3744(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 3776(CX), Y9 + VMOVDQU 3808(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 3840(CX), Y9 + VMOVDQU 3872(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 3904(CX), Y9 + VMOVDQU 3936(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 3968(CX), Y9 + VMOVDQU 4000(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 4032(CX), Y9 + VMOVDQU 4064(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Store 8 outputs + MOVQ (R12), R14 + VMOVDQU Y0, (R14)(R13*1) + MOVQ 24(R12), R14 + VMOVDQU Y1, (R14)(R13*1) + MOVQ 48(R12), R14 + VMOVDQU Y2, (R14)(R13*1) + MOVQ 72(R12), R14 + VMOVDQU Y3, (R14)(R13*1) + MOVQ 96(R12), R14 + VMOVDQU Y4, (R14)(R13*1) + MOVQ 120(R12), R14 + VMOVDQU Y5, (R14)(R13*1) + MOVQ 144(R12), R14 + VMOVDQU Y6, (R14)(R13*1) + MOVQ 168(R12), R14 + VMOVDQU Y7, (R14)(R13*1) + + // Prepare for next loop + ADDQ $0x20, R13 + DECQ AX + JNZ mulAvxTwo_8x8Xor_loop + VZEROUPPER + +mulAvxTwo_8x8Xor_end: + RET + +// func mulAvxTwo_8x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x9(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 158 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_8x9_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ start+72(FP), R13 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X9 + VPBROADCASTB X9, Y9 + +mulAvxTwo_8x9_loop: + // Load and process 32 bytes from input 0 to 9 outputs + VMOVDQU (BX), Y12 + ADDQ $0x20, BX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU (CX), Y10 + VMOVDQU 32(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y0 + VMOVDQU 64(CX), Y10 + VMOVDQU 96(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y1 + VMOVDQU 128(CX), Y10 + VMOVDQU 160(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y2 + VMOVDQU 192(CX), Y10 + VMOVDQU 224(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y3 + VMOVDQU 256(CX), Y10 + VMOVDQU 288(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y4 + VMOVDQU 320(CX), Y10 + VMOVDQU 352(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y5 + VMOVDQU 384(CX), Y10 + VMOVDQU 416(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y6 + VMOVDQU 448(CX), Y10 + VMOVDQU 480(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y7 + VMOVDQU 512(CX), Y10 + VMOVDQU 544(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y8 + + // Load and process 32 bytes from input 1 to 9 outputs + VMOVDQU (SI), Y12 + ADDQ $0x20, SI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 576(CX), Y10 + VMOVDQU 608(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 640(CX), Y10 + VMOVDQU 672(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 704(CX), Y10 + VMOVDQU 736(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 768(CX), Y10 + VMOVDQU 800(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 832(CX), Y10 + VMOVDQU 864(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 896(CX), Y10 + VMOVDQU 928(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 960(CX), Y10 + VMOVDQU 992(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1024(CX), Y10 + VMOVDQU 1056(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1088(CX), Y10 + VMOVDQU 1120(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 2 to 9 outputs + VMOVDQU (DI), Y12 + ADDQ $0x20, DI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1152(CX), Y10 + VMOVDQU 1184(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1216(CX), Y10 + VMOVDQU 1248(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1280(CX), Y10 + VMOVDQU 1312(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1344(CX), Y10 + VMOVDQU 1376(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1408(CX), Y10 + VMOVDQU 1440(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 1472(CX), Y10 + VMOVDQU 1504(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 1536(CX), Y10 + VMOVDQU 1568(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1600(CX), Y10 + VMOVDQU 1632(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1664(CX), Y10 + VMOVDQU 1696(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 3 to 9 outputs + VMOVDQU (R8), Y12 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1728(CX), Y10 + VMOVDQU 1760(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1792(CX), Y10 + VMOVDQU 1824(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1856(CX), Y10 + VMOVDQU 1888(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1920(CX), Y10 + VMOVDQU 1952(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1984(CX), Y10 + VMOVDQU 2016(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2048(CX), Y10 + VMOVDQU 2080(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2112(CX), Y10 + VMOVDQU 2144(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2176(CX), Y10 + VMOVDQU 2208(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2240(CX), Y10 + VMOVDQU 2272(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 4 to 9 outputs + VMOVDQU (R9), Y12 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 2304(CX), Y10 + VMOVDQU 2336(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 2368(CX), Y10 + VMOVDQU 2400(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 2432(CX), Y10 + VMOVDQU 2464(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 2496(CX), Y10 + VMOVDQU 2528(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 2560(CX), Y10 + VMOVDQU 2592(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2624(CX), Y10 + VMOVDQU 2656(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2688(CX), Y10 + VMOVDQU 2720(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2752(CX), Y10 + VMOVDQU 2784(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2816(CX), Y10 + VMOVDQU 2848(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 5 to 9 outputs + VMOVDQU (R10), Y12 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 2880(CX), Y10 + VMOVDQU 2912(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 2944(CX), Y10 + VMOVDQU 2976(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 3008(CX), Y10 + VMOVDQU 3040(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 3072(CX), Y10 + VMOVDQU 3104(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 3136(CX), Y10 + VMOVDQU 3168(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 3200(CX), Y10 + VMOVDQU 3232(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 3264(CX), Y10 + VMOVDQU 3296(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 3328(CX), Y10 + VMOVDQU 3360(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 3392(CX), Y10 + VMOVDQU 3424(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 6 to 9 outputs + VMOVDQU (R11), Y12 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 3456(CX), Y10 + VMOVDQU 3488(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 3520(CX), Y10 + VMOVDQU 3552(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 3584(CX), Y10 + VMOVDQU 3616(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 3648(CX), Y10 + VMOVDQU 3680(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 3712(CX), Y10 + VMOVDQU 3744(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 3776(CX), Y10 + VMOVDQU 3808(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 3840(CX), Y10 + VMOVDQU 3872(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 3904(CX), Y10 + VMOVDQU 3936(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 3968(CX), Y10 + VMOVDQU 4000(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 7 to 9 outputs + VMOVDQU (DX), Y12 + ADDQ $0x20, DX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 4032(CX), Y10 + VMOVDQU 4064(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 4096(CX), Y10 + VMOVDQU 4128(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 4160(CX), Y10 + VMOVDQU 4192(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 4224(CX), Y10 + VMOVDQU 4256(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 4288(CX), Y10 + VMOVDQU 4320(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 4352(CX), Y10 + VMOVDQU 4384(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 4416(CX), Y10 + VMOVDQU 4448(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 4480(CX), Y10 + VMOVDQU 4512(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 4544(CX), Y10 + VMOVDQU 4576(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Store 9 outputs + MOVQ (R12), R14 + VMOVDQU Y0, (R14)(R13*1) + MOVQ 24(R12), R14 + VMOVDQU Y1, (R14)(R13*1) + MOVQ 48(R12), R14 + VMOVDQU Y2, (R14)(R13*1) + MOVQ 72(R12), R14 + VMOVDQU Y3, (R14)(R13*1) + MOVQ 96(R12), R14 + VMOVDQU Y4, (R14)(R13*1) + MOVQ 120(R12), R14 + VMOVDQU Y5, (R14)(R13*1) + MOVQ 144(R12), R14 + VMOVDQU Y6, (R14)(R13*1) + MOVQ 168(R12), R14 + VMOVDQU Y7, (R14)(R13*1) + MOVQ 192(R12), R14 + VMOVDQU Y8, (R14)(R13*1) + + // Prepare for next loop + ADDQ $0x20, R13 + DECQ AX + JNZ mulAvxTwo_8x9_loop + VZEROUPPER + +mulAvxTwo_8x9_end: + RET + +// func mulAvxTwo_8x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x9Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 158 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_8x9Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ start+72(FP), R13 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X9 + VPBROADCASTB X9, Y9 + +mulAvxTwo_8x9Xor_loop: + // Load and process 32 bytes from input 0 to 9 outputs + VMOVDQU (BX), Y12 + ADDQ $0x20, BX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + MOVQ (R12), R14 + VMOVDQU (R14)(R13*1), Y0 + VMOVDQU (CX), Y10 + VMOVDQU 32(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + MOVQ 24(R12), R14 + VMOVDQU (R14)(R13*1), Y1 + VMOVDQU 64(CX), Y10 + VMOVDQU 96(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + MOVQ 48(R12), R14 + VMOVDQU (R14)(R13*1), Y2 + VMOVDQU 128(CX), Y10 + VMOVDQU 160(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + MOVQ 72(R12), R14 + VMOVDQU (R14)(R13*1), Y3 + VMOVDQU 192(CX), Y10 + VMOVDQU 224(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + MOVQ 96(R12), R14 + VMOVDQU (R14)(R13*1), Y4 + VMOVDQU 256(CX), Y10 + VMOVDQU 288(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + MOVQ 120(R12), R14 + VMOVDQU (R14)(R13*1), Y5 + VMOVDQU 320(CX), Y10 + VMOVDQU 352(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + MOVQ 144(R12), R14 + VMOVDQU (R14)(R13*1), Y6 + VMOVDQU 384(CX), Y10 + VMOVDQU 416(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + MOVQ 168(R12), R14 + VMOVDQU (R14)(R13*1), Y7 + VMOVDQU 448(CX), Y10 + VMOVDQU 480(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + MOVQ 192(R12), R14 + VMOVDQU (R14)(R13*1), Y8 + VMOVDQU 512(CX), Y10 + VMOVDQU 544(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 1 to 9 outputs + VMOVDQU (SI), Y12 + ADDQ $0x20, SI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 576(CX), Y10 + VMOVDQU 608(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 640(CX), Y10 + VMOVDQU 672(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 704(CX), Y10 + VMOVDQU 736(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 768(CX), Y10 + VMOVDQU 800(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 832(CX), Y10 + VMOVDQU 864(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 896(CX), Y10 + VMOVDQU 928(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 960(CX), Y10 + VMOVDQU 992(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1024(CX), Y10 + VMOVDQU 1056(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1088(CX), Y10 + VMOVDQU 1120(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 2 to 9 outputs + VMOVDQU (DI), Y12 + ADDQ $0x20, DI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1152(CX), Y10 + VMOVDQU 1184(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1216(CX), Y10 + VMOVDQU 1248(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1280(CX), Y10 + VMOVDQU 1312(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1344(CX), Y10 + VMOVDQU 1376(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1408(CX), Y10 + VMOVDQU 1440(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 1472(CX), Y10 + VMOVDQU 1504(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 1536(CX), Y10 + VMOVDQU 1568(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1600(CX), Y10 + VMOVDQU 1632(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1664(CX), Y10 + VMOVDQU 1696(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 3 to 9 outputs + VMOVDQU (R8), Y12 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1728(CX), Y10 + VMOVDQU 1760(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1792(CX), Y10 + VMOVDQU 1824(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1856(CX), Y10 + VMOVDQU 1888(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1920(CX), Y10 + VMOVDQU 1952(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1984(CX), Y10 + VMOVDQU 2016(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2048(CX), Y10 + VMOVDQU 2080(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2112(CX), Y10 + VMOVDQU 2144(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2176(CX), Y10 + VMOVDQU 2208(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2240(CX), Y10 + VMOVDQU 2272(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 4 to 9 outputs + VMOVDQU (R9), Y12 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 2304(CX), Y10 + VMOVDQU 2336(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 2368(CX), Y10 + VMOVDQU 2400(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 2432(CX), Y10 + VMOVDQU 2464(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 2496(CX), Y10 + VMOVDQU 2528(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 2560(CX), Y10 + VMOVDQU 2592(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2624(CX), Y10 + VMOVDQU 2656(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2688(CX), Y10 + VMOVDQU 2720(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2752(CX), Y10 + VMOVDQU 2784(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2816(CX), Y10 + VMOVDQU 2848(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 5 to 9 outputs + VMOVDQU (R10), Y12 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 2880(CX), Y10 + VMOVDQU 2912(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 2944(CX), Y10 + VMOVDQU 2976(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 3008(CX), Y10 + VMOVDQU 3040(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 3072(CX), Y10 + VMOVDQU 3104(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 3136(CX), Y10 + VMOVDQU 3168(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 3200(CX), Y10 + VMOVDQU 3232(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 3264(CX), Y10 + VMOVDQU 3296(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 3328(CX), Y10 + VMOVDQU 3360(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 3392(CX), Y10 + VMOVDQU 3424(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 6 to 9 outputs + VMOVDQU (R11), Y12 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 3456(CX), Y10 + VMOVDQU 3488(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 3520(CX), Y10 + VMOVDQU 3552(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 3584(CX), Y10 + VMOVDQU 3616(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 3648(CX), Y10 + VMOVDQU 3680(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 3712(CX), Y10 + VMOVDQU 3744(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 3776(CX), Y10 + VMOVDQU 3808(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 3840(CX), Y10 + VMOVDQU 3872(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 3904(CX), Y10 + VMOVDQU 3936(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 3968(CX), Y10 + VMOVDQU 4000(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 7 to 9 outputs + VMOVDQU (DX), Y12 + ADDQ $0x20, DX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 4032(CX), Y10 + VMOVDQU 4064(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 4096(CX), Y10 + VMOVDQU 4128(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 4160(CX), Y10 + VMOVDQU 4192(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 4224(CX), Y10 + VMOVDQU 4256(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 4288(CX), Y10 + VMOVDQU 4320(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 4352(CX), Y10 + VMOVDQU 4384(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 4416(CX), Y10 + VMOVDQU 4448(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 4480(CX), Y10 + VMOVDQU 4512(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 4544(CX), Y10 + VMOVDQU 4576(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Store 9 outputs + MOVQ (R12), R14 + VMOVDQU Y0, (R14)(R13*1) + MOVQ 24(R12), R14 + VMOVDQU Y1, (R14)(R13*1) + MOVQ 48(R12), R14 + VMOVDQU Y2, (R14)(R13*1) + MOVQ 72(R12), R14 + VMOVDQU Y3, (R14)(R13*1) + MOVQ 96(R12), R14 + VMOVDQU Y4, (R14)(R13*1) + MOVQ 120(R12), R14 + VMOVDQU Y5, (R14)(R13*1) + MOVQ 144(R12), R14 + VMOVDQU Y6, (R14)(R13*1) + MOVQ 168(R12), R14 + VMOVDQU Y7, (R14)(R13*1) + MOVQ 192(R12), R14 + VMOVDQU Y8, (R14)(R13*1) + + // Prepare for next loop + ADDQ $0x20, R13 + DECQ AX + JNZ mulAvxTwo_8x9Xor_loop + VZEROUPPER + +mulAvxTwo_8x9Xor_end: + RET + +// func mulAvxTwo_8x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x10(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 175 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_8x10_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ start+72(FP), R13 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X10 + VPBROADCASTB X10, Y10 + +mulAvxTwo_8x10_loop: + // Load and process 32 bytes from input 0 to 10 outputs + VMOVDQU (BX), Y13 + ADDQ $0x20, BX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU (CX), Y11 + VMOVDQU 32(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y0 + VMOVDQU 64(CX), Y11 + VMOVDQU 96(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y1 + VMOVDQU 128(CX), Y11 + VMOVDQU 160(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y2 + VMOVDQU 192(CX), Y11 + VMOVDQU 224(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y3 + VMOVDQU 256(CX), Y11 + VMOVDQU 288(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y4 + VMOVDQU 320(CX), Y11 + VMOVDQU 352(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y5 + VMOVDQU 384(CX), Y11 + VMOVDQU 416(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y6 + VMOVDQU 448(CX), Y11 + VMOVDQU 480(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y7 + VMOVDQU 512(CX), Y11 + VMOVDQU 544(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y8 + VMOVDQU 576(CX), Y11 + VMOVDQU 608(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y9 + + // Load and process 32 bytes from input 1 to 10 outputs + VMOVDQU (SI), Y13 + ADDQ $0x20, SI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 640(CX), Y11 + VMOVDQU 672(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 704(CX), Y11 + VMOVDQU 736(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 768(CX), Y11 + VMOVDQU 800(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 832(CX), Y11 + VMOVDQU 864(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 896(CX), Y11 + VMOVDQU 928(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 960(CX), Y11 + VMOVDQU 992(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1024(CX), Y11 + VMOVDQU 1056(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1088(CX), Y11 + VMOVDQU 1120(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1152(CX), Y11 + VMOVDQU 1184(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1216(CX), Y11 + VMOVDQU 1248(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 2 to 10 outputs + VMOVDQU (DI), Y13 + ADDQ $0x20, DI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1280(CX), Y11 + VMOVDQU 1312(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1344(CX), Y11 + VMOVDQU 1376(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 1408(CX), Y11 + VMOVDQU 1440(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 1472(CX), Y11 + VMOVDQU 1504(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 1536(CX), Y11 + VMOVDQU 1568(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 1600(CX), Y11 + VMOVDQU 1632(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1664(CX), Y11 + VMOVDQU 1696(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1728(CX), Y11 + VMOVDQU 1760(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1792(CX), Y11 + VMOVDQU 1824(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1856(CX), Y11 + VMOVDQU 1888(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 3 to 10 outputs + VMOVDQU (R8), Y13 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1920(CX), Y11 + VMOVDQU 1952(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1984(CX), Y11 + VMOVDQU 2016(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2048(CX), Y11 + VMOVDQU 2080(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2112(CX), Y11 + VMOVDQU 2144(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2176(CX), Y11 + VMOVDQU 2208(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2240(CX), Y11 + VMOVDQU 2272(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2304(CX), Y11 + VMOVDQU 2336(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 2368(CX), Y11 + VMOVDQU 2400(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 2432(CX), Y11 + VMOVDQU 2464(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 2496(CX), Y11 + VMOVDQU 2528(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 4 to 10 outputs + VMOVDQU (R9), Y13 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 2560(CX), Y11 + VMOVDQU 2592(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 2624(CX), Y11 + VMOVDQU 2656(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2688(CX), Y11 + VMOVDQU 2720(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2752(CX), Y11 + VMOVDQU 2784(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2816(CX), Y11 + VMOVDQU 2848(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2880(CX), Y11 + VMOVDQU 2912(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2944(CX), Y11 + VMOVDQU 2976(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 3008(CX), Y11 + VMOVDQU 3040(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 3072(CX), Y11 + VMOVDQU 3104(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 3136(CX), Y11 + VMOVDQU 3168(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 5 to 10 outputs + VMOVDQU (R10), Y13 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 3200(CX), Y11 + VMOVDQU 3232(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 3264(CX), Y11 + VMOVDQU 3296(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 3328(CX), Y11 + VMOVDQU 3360(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 3392(CX), Y11 + VMOVDQU 3424(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 3456(CX), Y11 + VMOVDQU 3488(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 3520(CX), Y11 + VMOVDQU 3552(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 3584(CX), Y11 + VMOVDQU 3616(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 3648(CX), Y11 + VMOVDQU 3680(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 3712(CX), Y11 + VMOVDQU 3744(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 3776(CX), Y11 + VMOVDQU 3808(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 6 to 10 outputs + VMOVDQU (R11), Y13 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 3840(CX), Y11 + VMOVDQU 3872(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 3904(CX), Y11 + VMOVDQU 3936(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 3968(CX), Y11 + VMOVDQU 4000(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 4032(CX), Y11 + VMOVDQU 4064(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 4096(CX), Y11 + VMOVDQU 4128(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 4160(CX), Y11 + VMOVDQU 4192(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 4224(CX), Y11 + VMOVDQU 4256(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 4288(CX), Y11 + VMOVDQU 4320(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 4352(CX), Y11 + VMOVDQU 4384(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 4416(CX), Y11 + VMOVDQU 4448(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 7 to 10 outputs + VMOVDQU (DX), Y13 + ADDQ $0x20, DX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 4480(CX), Y11 + VMOVDQU 4512(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 4544(CX), Y11 + VMOVDQU 4576(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 4608(CX), Y11 + VMOVDQU 4640(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 4672(CX), Y11 + VMOVDQU 4704(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 4736(CX), Y11 + VMOVDQU 4768(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 4800(CX), Y11 + VMOVDQU 4832(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 4864(CX), Y11 + VMOVDQU 4896(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 4928(CX), Y11 + VMOVDQU 4960(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 4992(CX), Y11 + VMOVDQU 5024(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 5056(CX), Y11 + VMOVDQU 5088(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Store 10 outputs + MOVQ (R12), R14 + VMOVDQU Y0, (R14)(R13*1) + MOVQ 24(R12), R14 + VMOVDQU Y1, (R14)(R13*1) + MOVQ 48(R12), R14 + VMOVDQU Y2, (R14)(R13*1) + MOVQ 72(R12), R14 + VMOVDQU Y3, (R14)(R13*1) + MOVQ 96(R12), R14 + VMOVDQU Y4, (R14)(R13*1) + MOVQ 120(R12), R14 + VMOVDQU Y5, (R14)(R13*1) + MOVQ 144(R12), R14 + VMOVDQU Y6, (R14)(R13*1) + MOVQ 168(R12), R14 + VMOVDQU Y7, (R14)(R13*1) + MOVQ 192(R12), R14 + VMOVDQU Y8, (R14)(R13*1) + MOVQ 216(R12), R14 + VMOVDQU Y9, (R14)(R13*1) + + // Prepare for next loop + ADDQ $0x20, R13 + DECQ AX + JNZ mulAvxTwo_8x10_loop + VZEROUPPER + +mulAvxTwo_8x10_end: + RET + +// func mulAvxTwo_8x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_8x10Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 175 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_8x10Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), DX + MOVQ out_base+48(FP), R12 + MOVQ start+72(FP), R13 + + // Add start offset to input + ADDQ R13, BX + ADDQ R13, SI + ADDQ R13, DI + ADDQ R13, R8 + ADDQ R13, R9 + ADDQ R13, R10 + ADDQ R13, R11 + ADDQ R13, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X10 + VPBROADCASTB X10, Y10 + +mulAvxTwo_8x10Xor_loop: + // Load and process 32 bytes from input 0 to 10 outputs + VMOVDQU (BX), Y13 + ADDQ $0x20, BX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + MOVQ (R12), R14 + VMOVDQU (R14)(R13*1), Y0 + VMOVDQU (CX), Y11 + VMOVDQU 32(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + MOVQ 24(R12), R14 + VMOVDQU (R14)(R13*1), Y1 + VMOVDQU 64(CX), Y11 + VMOVDQU 96(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + MOVQ 48(R12), R14 + VMOVDQU (R14)(R13*1), Y2 + VMOVDQU 128(CX), Y11 + VMOVDQU 160(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + MOVQ 72(R12), R14 + VMOVDQU (R14)(R13*1), Y3 + VMOVDQU 192(CX), Y11 + VMOVDQU 224(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + MOVQ 96(R12), R14 + VMOVDQU (R14)(R13*1), Y4 + VMOVDQU 256(CX), Y11 + VMOVDQU 288(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + MOVQ 120(R12), R14 + VMOVDQU (R14)(R13*1), Y5 + VMOVDQU 320(CX), Y11 + VMOVDQU 352(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + MOVQ 144(R12), R14 + VMOVDQU (R14)(R13*1), Y6 + VMOVDQU 384(CX), Y11 + VMOVDQU 416(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + MOVQ 168(R12), R14 + VMOVDQU (R14)(R13*1), Y7 + VMOVDQU 448(CX), Y11 + VMOVDQU 480(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + MOVQ 192(R12), R14 + VMOVDQU (R14)(R13*1), Y8 + VMOVDQU 512(CX), Y11 + VMOVDQU 544(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + MOVQ 216(R12), R14 + VMOVDQU (R14)(R13*1), Y9 + VMOVDQU 576(CX), Y11 + VMOVDQU 608(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 1 to 10 outputs + VMOVDQU (SI), Y13 + ADDQ $0x20, SI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 640(CX), Y11 + VMOVDQU 672(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 704(CX), Y11 + VMOVDQU 736(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 768(CX), Y11 + VMOVDQU 800(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 832(CX), Y11 + VMOVDQU 864(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 896(CX), Y11 + VMOVDQU 928(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 960(CX), Y11 + VMOVDQU 992(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1024(CX), Y11 + VMOVDQU 1056(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1088(CX), Y11 + VMOVDQU 1120(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1152(CX), Y11 + VMOVDQU 1184(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1216(CX), Y11 + VMOVDQU 1248(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 2 to 10 outputs + VMOVDQU (DI), Y13 + ADDQ $0x20, DI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1280(CX), Y11 + VMOVDQU 1312(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1344(CX), Y11 + VMOVDQU 1376(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 1408(CX), Y11 + VMOVDQU 1440(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 1472(CX), Y11 + VMOVDQU 1504(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 1536(CX), Y11 + VMOVDQU 1568(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 1600(CX), Y11 + VMOVDQU 1632(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1664(CX), Y11 + VMOVDQU 1696(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1728(CX), Y11 + VMOVDQU 1760(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1792(CX), Y11 + VMOVDQU 1824(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1856(CX), Y11 + VMOVDQU 1888(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 3 to 10 outputs + VMOVDQU (R8), Y13 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1920(CX), Y11 + VMOVDQU 1952(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1984(CX), Y11 + VMOVDQU 2016(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2048(CX), Y11 + VMOVDQU 2080(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2112(CX), Y11 + VMOVDQU 2144(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2176(CX), Y11 + VMOVDQU 2208(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2240(CX), Y11 + VMOVDQU 2272(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2304(CX), Y11 + VMOVDQU 2336(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 2368(CX), Y11 + VMOVDQU 2400(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 2432(CX), Y11 + VMOVDQU 2464(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 2496(CX), Y11 + VMOVDQU 2528(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 4 to 10 outputs + VMOVDQU (R9), Y13 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 2560(CX), Y11 + VMOVDQU 2592(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 2624(CX), Y11 + VMOVDQU 2656(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2688(CX), Y11 + VMOVDQU 2720(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2752(CX), Y11 + VMOVDQU 2784(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2816(CX), Y11 + VMOVDQU 2848(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2880(CX), Y11 + VMOVDQU 2912(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2944(CX), Y11 + VMOVDQU 2976(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 3008(CX), Y11 + VMOVDQU 3040(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 3072(CX), Y11 + VMOVDQU 3104(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 3136(CX), Y11 + VMOVDQU 3168(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 5 to 10 outputs + VMOVDQU (R10), Y13 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 3200(CX), Y11 + VMOVDQU 3232(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 3264(CX), Y11 + VMOVDQU 3296(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 3328(CX), Y11 + VMOVDQU 3360(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 3392(CX), Y11 + VMOVDQU 3424(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 3456(CX), Y11 + VMOVDQU 3488(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 3520(CX), Y11 + VMOVDQU 3552(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 3584(CX), Y11 + VMOVDQU 3616(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 3648(CX), Y11 + VMOVDQU 3680(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 3712(CX), Y11 + VMOVDQU 3744(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 3776(CX), Y11 + VMOVDQU 3808(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 6 to 10 outputs + VMOVDQU (R11), Y13 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 3840(CX), Y11 + VMOVDQU 3872(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 3904(CX), Y11 + VMOVDQU 3936(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 3968(CX), Y11 + VMOVDQU 4000(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 4032(CX), Y11 + VMOVDQU 4064(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 4096(CX), Y11 + VMOVDQU 4128(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 4160(CX), Y11 + VMOVDQU 4192(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 4224(CX), Y11 + VMOVDQU 4256(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 4288(CX), Y11 + VMOVDQU 4320(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 4352(CX), Y11 + VMOVDQU 4384(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 4416(CX), Y11 + VMOVDQU 4448(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 7 to 10 outputs + VMOVDQU (DX), Y13 + ADDQ $0x20, DX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 4480(CX), Y11 + VMOVDQU 4512(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 4544(CX), Y11 + VMOVDQU 4576(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 4608(CX), Y11 + VMOVDQU 4640(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 4672(CX), Y11 + VMOVDQU 4704(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 4736(CX), Y11 + VMOVDQU 4768(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 4800(CX), Y11 + VMOVDQU 4832(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 4864(CX), Y11 + VMOVDQU 4896(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 4928(CX), Y11 + VMOVDQU 4960(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 4992(CX), Y11 + VMOVDQU 5024(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 5056(CX), Y11 + VMOVDQU 5088(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Store 10 outputs + MOVQ (R12), R14 + VMOVDQU Y0, (R14)(R13*1) + MOVQ 24(R12), R14 + VMOVDQU Y1, (R14)(R13*1) + MOVQ 48(R12), R14 + VMOVDQU Y2, (R14)(R13*1) + MOVQ 72(R12), R14 + VMOVDQU Y3, (R14)(R13*1) + MOVQ 96(R12), R14 + VMOVDQU Y4, (R14)(R13*1) + MOVQ 120(R12), R14 + VMOVDQU Y5, (R14)(R13*1) + MOVQ 144(R12), R14 + VMOVDQU Y6, (R14)(R13*1) + MOVQ 168(R12), R14 + VMOVDQU Y7, (R14)(R13*1) + MOVQ 192(R12), R14 + VMOVDQU Y8, (R14)(R13*1) + MOVQ 216(R12), R14 + VMOVDQU Y9, (R14)(R13*1) + + // Prepare for next loop + ADDQ $0x20, R13 + DECQ AX + JNZ mulAvxTwo_8x10Xor_loop + VZEROUPPER + +mulAvxTwo_8x10Xor_end: + RET + +// func mulAvxTwo_9x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x1(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 22 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_9x1_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ (R13), R13 + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, R13 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X1 + VPBROADCASTB X1, Y1 + +mulAvxTwo_9x1_loop: + // Load and process 32 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y4 + ADDQ $0x20, BX + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU (CX), Y2 + VMOVDQU 32(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y0 + + // Load and process 32 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y4 + ADDQ $0x20, SI + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 2 to 1 outputs + VMOVDQU (DI), Y4 + ADDQ $0x20, DI + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 128(CX), Y2 + VMOVDQU 160(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 3 to 1 outputs + VMOVDQU (R8), Y4 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 192(CX), Y2 + VMOVDQU 224(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 4 to 1 outputs + VMOVDQU (R9), Y4 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 256(CX), Y2 + VMOVDQU 288(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 5 to 1 outputs + VMOVDQU (R10), Y4 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 320(CX), Y2 + VMOVDQU 352(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 6 to 1 outputs + VMOVDQU (R11), Y4 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 384(CX), Y2 + VMOVDQU 416(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 7 to 1 outputs + VMOVDQU (R12), Y4 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 448(CX), Y2 + VMOVDQU 480(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 8 to 1 outputs + VMOVDQU (DX), Y4 + ADDQ $0x20, DX + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 512(CX), Y2 + VMOVDQU 544(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Store 1 outputs + VMOVDQU Y0, (R13) + ADDQ $0x20, R13 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_9x1_loop + VZEROUPPER + +mulAvxTwo_9x1_end: + RET + +// func mulAvxTwo_9x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x1_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 42 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_9x1_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ out_base+48(FP), R13 + MOVQ (R13), R13 + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, R13 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_9x1_64_loop: + // Load and process 64 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y6 + VMOVDQU 32(BX), Y5 + ADDQ $0x40, BX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y0 + VPXOR Y5, Y6, Y1 + + // Load and process 64 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y6 + VMOVDQU 32(SI), Y5 + ADDQ $0x40, SI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 2 to 1 outputs + VMOVDQU (DI), Y6 + VMOVDQU 32(DI), Y5 + ADDQ $0x40, DI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 3 to 1 outputs + VMOVDQU (R8), Y6 + VMOVDQU 32(R8), Y5 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 4 to 1 outputs + VMOVDQU (R9), Y6 + VMOVDQU 32(R9), Y5 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 5 to 1 outputs + VMOVDQU (R10), Y6 + VMOVDQU 32(R10), Y5 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 6 to 1 outputs + VMOVDQU (R11), Y6 + VMOVDQU 32(R11), Y5 + ADDQ $0x40, R11 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 384(CX), Y3 + VMOVDQU 416(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 7 to 1 outputs + VMOVDQU (R12), Y6 + VMOVDQU 32(R12), Y5 + ADDQ $0x40, R12 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 448(CX), Y3 + VMOVDQU 480(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 8 to 1 outputs + VMOVDQU (DX), Y6 + VMOVDQU 32(DX), Y5 + ADDQ $0x40, DX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 512(CX), Y3 + VMOVDQU 544(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Store 1 outputs + VMOVDQU Y0, (R13) + VMOVDQU Y1, 32(R13) + ADDQ $0x40, R13 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_9x1_64_loop + VZEROUPPER + +mulAvxTwo_9x1_64_end: + RET + +// func mulAvxTwo_9x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x1Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 22 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_9x1Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ (R13), R13 + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, R13 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X1 + VPBROADCASTB X1, Y1 + +mulAvxTwo_9x1Xor_loop: + // Load and process 32 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y4 + ADDQ $0x20, BX + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU (R13), Y0 + VMOVDQU (CX), Y2 + VMOVDQU 32(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y4 + ADDQ $0x20, SI + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 2 to 1 outputs + VMOVDQU (DI), Y4 + ADDQ $0x20, DI + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 128(CX), Y2 + VMOVDQU 160(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 3 to 1 outputs + VMOVDQU (R8), Y4 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 192(CX), Y2 + VMOVDQU 224(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 4 to 1 outputs + VMOVDQU (R9), Y4 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 256(CX), Y2 + VMOVDQU 288(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 5 to 1 outputs + VMOVDQU (R10), Y4 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 320(CX), Y2 + VMOVDQU 352(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 6 to 1 outputs + VMOVDQU (R11), Y4 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 384(CX), Y2 + VMOVDQU 416(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 7 to 1 outputs + VMOVDQU (R12), Y4 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 448(CX), Y2 + VMOVDQU 480(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 8 to 1 outputs + VMOVDQU (DX), Y4 + ADDQ $0x20, DX + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 512(CX), Y2 + VMOVDQU 544(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Store 1 outputs + VMOVDQU Y0, (R13) + ADDQ $0x20, R13 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_9x1Xor_loop + VZEROUPPER + +mulAvxTwo_9x1Xor_end: + RET + +// func mulAvxTwo_9x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x1_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 42 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_9x1_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ out_base+48(FP), R13 + MOVQ (R13), R13 + MOVQ start+72(FP), R14 + + // Add start offset to output + ADDQ R14, R13 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, DX + MOVQ $0x0000000f, R14 + MOVQ R14, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_9x1_64Xor_loop: + // Load 1 outputs + VMOVDQU (R13), Y0 + VMOVDQU 32(R13), Y1 + + // Load and process 64 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y6 + VMOVDQU 32(BX), Y5 + ADDQ $0x40, BX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y6 + VMOVDQU 32(SI), Y5 + ADDQ $0x40, SI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 2 to 1 outputs + VMOVDQU (DI), Y6 + VMOVDQU 32(DI), Y5 + ADDQ $0x40, DI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 3 to 1 outputs + VMOVDQU (R8), Y6 + VMOVDQU 32(R8), Y5 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 4 to 1 outputs + VMOVDQU (R9), Y6 + VMOVDQU 32(R9), Y5 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 5 to 1 outputs + VMOVDQU (R10), Y6 + VMOVDQU 32(R10), Y5 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 6 to 1 outputs + VMOVDQU (R11), Y6 + VMOVDQU 32(R11), Y5 + ADDQ $0x40, R11 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 384(CX), Y3 + VMOVDQU 416(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 7 to 1 outputs + VMOVDQU (R12), Y6 + VMOVDQU 32(R12), Y5 + ADDQ $0x40, R12 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 448(CX), Y3 + VMOVDQU 480(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 8 to 1 outputs + VMOVDQU (DX), Y6 + VMOVDQU 32(DX), Y5 + ADDQ $0x40, DX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 512(CX), Y3 + VMOVDQU 544(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Store 1 outputs + VMOVDQU Y0, (R13) + VMOVDQU Y1, 32(R13) + ADDQ $0x40, R13 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_9x1_64Xor_loop + VZEROUPPER + +mulAvxTwo_9x1_64Xor_end: + RET + +// func mulAvxTwo_9x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x2(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 43 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_9x2_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ (R13), R14 + MOVQ 24(R13), R13 + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, R14 + ADDQ R15, R13 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_9x2_loop: + // Load and process 32 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y5 + ADDQ $0x20, BX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y0 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y1 + + // Load and process 32 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y5 + ADDQ $0x20, SI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y5 + ADDQ $0x20, DI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y5 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 384(CX), Y3 + VMOVDQU 416(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 448(CX), Y3 + VMOVDQU 480(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 4 to 2 outputs + VMOVDQU (R9), Y5 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 512(CX), Y3 + VMOVDQU 544(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 576(CX), Y3 + VMOVDQU 608(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 5 to 2 outputs + VMOVDQU (R10), Y5 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 640(CX), Y3 + VMOVDQU 672(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 704(CX), Y3 + VMOVDQU 736(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 6 to 2 outputs + VMOVDQU (R11), Y5 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 768(CX), Y3 + VMOVDQU 800(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 832(CX), Y3 + VMOVDQU 864(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 7 to 2 outputs + VMOVDQU (R12), Y5 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 896(CX), Y3 + VMOVDQU 928(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 960(CX), Y3 + VMOVDQU 992(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 8 to 2 outputs + VMOVDQU (DX), Y5 + ADDQ $0x20, DX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 1024(CX), Y3 + VMOVDQU 1056(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 1088(CX), Y3 + VMOVDQU 1120(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Store 2 outputs + VMOVDQU Y0, (R14) + ADDQ $0x20, R14 + VMOVDQU Y1, (R13) + ADDQ $0x20, R13 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_9x2_loop + VZEROUPPER + +mulAvxTwo_9x2_end: + RET + +// func mulAvxTwo_9x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x2_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 81 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_9x2_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ out_base+48(FP), R13 + MOVQ (R13), R14 + MOVQ 24(R13), R13 + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, R14 + ADDQ R15, R13 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_9x2_64_loop: + // Load and process 64 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y9 + VMOVDQU 32(BX), Y11 + ADDQ $0x40, BX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y0 + VPXOR Y7, Y8, Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y2 + VPXOR Y7, Y8, Y3 + + // Load and process 64 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y9 + VMOVDQU 32(SI), Y11 + ADDQ $0x40, SI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y9 + VMOVDQU 32(DI), Y11 + ADDQ $0x40, DI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y9 + VMOVDQU 32(R8), Y11 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 4 to 2 outputs + VMOVDQU (R9), Y9 + VMOVDQU 32(R9), Y11 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 5 to 2 outputs + VMOVDQU (R10), Y9 + VMOVDQU 32(R10), Y11 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 6 to 2 outputs + VMOVDQU (R11), Y9 + VMOVDQU 32(R11), Y11 + ADDQ $0x40, R11 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 768(CX), Y5 + VMOVDQU 800(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 832(CX), Y5 + VMOVDQU 864(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 7 to 2 outputs + VMOVDQU (R12), Y9 + VMOVDQU 32(R12), Y11 + ADDQ $0x40, R12 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 896(CX), Y5 + VMOVDQU 928(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 960(CX), Y5 + VMOVDQU 992(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 8 to 2 outputs + VMOVDQU (DX), Y9 + VMOVDQU 32(DX), Y11 + ADDQ $0x40, DX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 1024(CX), Y5 + VMOVDQU 1056(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 1088(CX), Y5 + VMOVDQU 1120(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Store 2 outputs + VMOVDQU Y0, (R14) + VMOVDQU Y1, 32(R14) + ADDQ $0x40, R14 + VMOVDQU Y2, (R13) + VMOVDQU Y3, 32(R13) + ADDQ $0x40, R13 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_9x2_64_loop + VZEROUPPER + +mulAvxTwo_9x2_64_end: + RET + +// func mulAvxTwo_9x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x2Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 43 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_9x2Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ (R13), R14 + MOVQ 24(R13), R13 + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, R14 + ADDQ R15, R13 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_9x2Xor_loop: + // Load and process 32 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y5 + ADDQ $0x20, BX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU (R14), Y0 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU (R13), Y1 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y5 + ADDQ $0x20, SI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y5 + ADDQ $0x20, DI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y5 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 384(CX), Y3 + VMOVDQU 416(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 448(CX), Y3 + VMOVDQU 480(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 4 to 2 outputs + VMOVDQU (R9), Y5 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 512(CX), Y3 + VMOVDQU 544(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 576(CX), Y3 + VMOVDQU 608(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 5 to 2 outputs + VMOVDQU (R10), Y5 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 640(CX), Y3 + VMOVDQU 672(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 704(CX), Y3 + VMOVDQU 736(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 6 to 2 outputs + VMOVDQU (R11), Y5 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 768(CX), Y3 + VMOVDQU 800(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 832(CX), Y3 + VMOVDQU 864(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 7 to 2 outputs + VMOVDQU (R12), Y5 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 896(CX), Y3 + VMOVDQU 928(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 960(CX), Y3 + VMOVDQU 992(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 8 to 2 outputs + VMOVDQU (DX), Y5 + ADDQ $0x20, DX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 1024(CX), Y3 + VMOVDQU 1056(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 1088(CX), Y3 + VMOVDQU 1120(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Store 2 outputs + VMOVDQU Y0, (R14) + ADDQ $0x20, R14 + VMOVDQU Y1, (R13) + ADDQ $0x20, R13 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_9x2Xor_loop + VZEROUPPER + +mulAvxTwo_9x2Xor_end: + RET + +// func mulAvxTwo_9x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x2_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 81 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_9x2_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ out_base+48(FP), R13 + MOVQ (R13), R14 + MOVQ 24(R13), R13 + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, R14 + ADDQ R15, R13 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_9x2_64Xor_loop: + // Load 2 outputs + VMOVDQU (R14), Y0 + VMOVDQU 32(R14), Y1 + VMOVDQU (R13), Y2 + VMOVDQU 32(R13), Y3 + + // Load and process 64 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y9 + VMOVDQU 32(BX), Y11 + ADDQ $0x40, BX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y9 + VMOVDQU 32(SI), Y11 + ADDQ $0x40, SI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y9 + VMOVDQU 32(DI), Y11 + ADDQ $0x40, DI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y9 + VMOVDQU 32(R8), Y11 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 4 to 2 outputs + VMOVDQU (R9), Y9 + VMOVDQU 32(R9), Y11 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 5 to 2 outputs + VMOVDQU (R10), Y9 + VMOVDQU 32(R10), Y11 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 6 to 2 outputs + VMOVDQU (R11), Y9 + VMOVDQU 32(R11), Y11 + ADDQ $0x40, R11 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 768(CX), Y5 + VMOVDQU 800(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 832(CX), Y5 + VMOVDQU 864(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 7 to 2 outputs + VMOVDQU (R12), Y9 + VMOVDQU 32(R12), Y11 + ADDQ $0x40, R12 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 896(CX), Y5 + VMOVDQU 928(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 960(CX), Y5 + VMOVDQU 992(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 8 to 2 outputs + VMOVDQU (DX), Y9 + VMOVDQU 32(DX), Y11 + ADDQ $0x40, DX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 1024(CX), Y5 + VMOVDQU 1056(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 1088(CX), Y5 + VMOVDQU 1120(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Store 2 outputs + VMOVDQU Y0, (R14) + VMOVDQU Y1, 32(R14) + ADDQ $0x40, R14 + VMOVDQU Y2, (R13) + VMOVDQU Y3, 32(R13) + ADDQ $0x40, R13 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_9x2_64Xor_loop + VZEROUPPER + +mulAvxTwo_9x2_64Xor_end: + RET + +// func mulAvxTwo_9x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x3(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 62 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_9x3_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ (R13), R14 + MOVQ 24(R13), R15 + MOVQ 48(R13), R13 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R13 + + // Add start offset to input + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, DX + MOVQ $0x0000000f, BP + MOVQ BP, X3 + VPBROADCASTB X3, Y3 + +mulAvxTwo_9x3_loop: + // Load and process 32 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y6 + ADDQ $0x20, BX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU (CX), Y4 + VMOVDQU 32(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y0 + VMOVDQU 64(CX), Y4 + VMOVDQU 96(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y1 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y2 + + // Load and process 32 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y6 + ADDQ $0x20, SI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 192(CX), Y4 + VMOVDQU 224(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 256(CX), Y4 + VMOVDQU 288(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 320(CX), Y4 + VMOVDQU 352(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y6 + ADDQ $0x20, DI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 384(CX), Y4 + VMOVDQU 416(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 448(CX), Y4 + VMOVDQU 480(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 512(CX), Y4 + VMOVDQU 544(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 3 to 3 outputs + VMOVDQU (R8), Y6 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 576(CX), Y4 + VMOVDQU 608(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 640(CX), Y4 + VMOVDQU 672(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 704(CX), Y4 + VMOVDQU 736(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 4 to 3 outputs + VMOVDQU (R9), Y6 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 768(CX), Y4 + VMOVDQU 800(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 832(CX), Y4 + VMOVDQU 864(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 896(CX), Y4 + VMOVDQU 928(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 5 to 3 outputs + VMOVDQU (R10), Y6 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 960(CX), Y4 + VMOVDQU 992(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1024(CX), Y4 + VMOVDQU 1056(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1088(CX), Y4 + VMOVDQU 1120(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 6 to 3 outputs + VMOVDQU (R11), Y6 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 1152(CX), Y4 + VMOVDQU 1184(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1216(CX), Y4 + VMOVDQU 1248(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1280(CX), Y4 + VMOVDQU 1312(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 7 to 3 outputs + VMOVDQU (R12), Y6 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 1344(CX), Y4 + VMOVDQU 1376(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1408(CX), Y4 + VMOVDQU 1440(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1472(CX), Y4 + VMOVDQU 1504(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 8 to 3 outputs + VMOVDQU (DX), Y6 + ADDQ $0x20, DX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 1536(CX), Y4 + VMOVDQU 1568(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1600(CX), Y4 + VMOVDQU 1632(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1664(CX), Y4 + VMOVDQU 1696(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Store 3 outputs + VMOVDQU Y0, (R14) + ADDQ $0x20, R14 + VMOVDQU Y1, (R15) + ADDQ $0x20, R15 + VMOVDQU Y2, (R13) + ADDQ $0x20, R13 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_9x3_loop + VZEROUPPER + +mulAvxTwo_9x3_end: + RET + +// func mulAvxTwo_9x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x3_64(SB), $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 118 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_9x3_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ out_base+48(FP), R13 + MOVQ (R13), R14 + MOVQ 24(R13), R15 + MOVQ 48(R13), R13 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R13 + + // Add start offset to input + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, DX + MOVQ $0x0000000f, BP + MOVQ BP, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_9x3_64_loop: + // Load and process 64 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y11 + VMOVDQU 32(BX), Y13 + ADDQ $0x40, BX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y0 + VPXOR Y9, Y10, Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y2 + VPXOR Y9, Y10, Y3 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y4 + VPXOR Y9, Y10, Y5 + + // Load and process 64 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y11 + VMOVDQU 32(SI), Y13 + ADDQ $0x40, SI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y11 + VMOVDQU 32(DI), Y13 + ADDQ $0x40, DI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 3 to 3 outputs + VMOVDQU (R8), Y11 + VMOVDQU 32(R8), Y13 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 4 to 3 outputs + VMOVDQU (R9), Y11 + VMOVDQU 32(R9), Y13 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 5 to 3 outputs + VMOVDQU (R10), Y11 + VMOVDQU 32(R10), Y13 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 6 to 3 outputs + VMOVDQU (R11), Y11 + VMOVDQU 32(R11), Y13 + ADDQ $0x40, R11 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 1152(CX), Y7 + VMOVDQU 1184(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1216(CX), Y7 + VMOVDQU 1248(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y7 + VMOVDQU 1312(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 7 to 3 outputs + VMOVDQU (R12), Y11 + VMOVDQU 32(R12), Y13 + ADDQ $0x40, R12 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 1344(CX), Y7 + VMOVDQU 1376(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1408(CX), Y7 + VMOVDQU 1440(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1472(CX), Y7 + VMOVDQU 1504(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 8 to 3 outputs + VMOVDQU (DX), Y11 + VMOVDQU 32(DX), Y13 + ADDQ $0x40, DX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 1536(CX), Y7 + VMOVDQU 1568(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1600(CX), Y7 + VMOVDQU 1632(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1664(CX), Y7 + VMOVDQU 1696(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Store 3 outputs + VMOVDQU Y0, (R14) + VMOVDQU Y1, 32(R14) + ADDQ $0x40, R14 + VMOVDQU Y2, (R15) + VMOVDQU Y3, 32(R15) + ADDQ $0x40, R15 + VMOVDQU Y4, (R13) + VMOVDQU Y5, 32(R13) + ADDQ $0x40, R13 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_9x3_64_loop + VZEROUPPER + +mulAvxTwo_9x3_64_end: + RET + +// func mulAvxTwo_9x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x3Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 62 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_9x3Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ (R13), R14 + MOVQ 24(R13), R15 + MOVQ 48(R13), R13 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R13 + + // Add start offset to input + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, DX + MOVQ $0x0000000f, BP + MOVQ BP, X3 + VPBROADCASTB X3, Y3 + +mulAvxTwo_9x3Xor_loop: + // Load and process 32 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y6 + ADDQ $0x20, BX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU (R14), Y0 + VMOVDQU (CX), Y4 + VMOVDQU 32(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU (R15), Y1 + VMOVDQU 64(CX), Y4 + VMOVDQU 96(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU (R13), Y2 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y6 + ADDQ $0x20, SI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 192(CX), Y4 + VMOVDQU 224(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 256(CX), Y4 + VMOVDQU 288(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 320(CX), Y4 + VMOVDQU 352(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y6 + ADDQ $0x20, DI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 384(CX), Y4 + VMOVDQU 416(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 448(CX), Y4 + VMOVDQU 480(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 512(CX), Y4 + VMOVDQU 544(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 3 to 3 outputs + VMOVDQU (R8), Y6 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 576(CX), Y4 + VMOVDQU 608(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 640(CX), Y4 + VMOVDQU 672(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 704(CX), Y4 + VMOVDQU 736(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 4 to 3 outputs + VMOVDQU (R9), Y6 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 768(CX), Y4 + VMOVDQU 800(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 832(CX), Y4 + VMOVDQU 864(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 896(CX), Y4 + VMOVDQU 928(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 5 to 3 outputs + VMOVDQU (R10), Y6 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 960(CX), Y4 + VMOVDQU 992(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1024(CX), Y4 + VMOVDQU 1056(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1088(CX), Y4 + VMOVDQU 1120(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 6 to 3 outputs + VMOVDQU (R11), Y6 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 1152(CX), Y4 + VMOVDQU 1184(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1216(CX), Y4 + VMOVDQU 1248(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1280(CX), Y4 + VMOVDQU 1312(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 7 to 3 outputs + VMOVDQU (R12), Y6 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 1344(CX), Y4 + VMOVDQU 1376(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1408(CX), Y4 + VMOVDQU 1440(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1472(CX), Y4 + VMOVDQU 1504(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 8 to 3 outputs + VMOVDQU (DX), Y6 + ADDQ $0x20, DX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 1536(CX), Y4 + VMOVDQU 1568(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1600(CX), Y4 + VMOVDQU 1632(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1664(CX), Y4 + VMOVDQU 1696(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Store 3 outputs + VMOVDQU Y0, (R14) + ADDQ $0x20, R14 + VMOVDQU Y1, (R15) + ADDQ $0x20, R15 + VMOVDQU Y2, (R13) + ADDQ $0x20, R13 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_9x3Xor_loop + VZEROUPPER + +mulAvxTwo_9x3Xor_end: + RET + +// func mulAvxTwo_9x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x3_64Xor(SB), $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 118 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_9x3_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ out_base+48(FP), R13 + MOVQ (R13), R14 + MOVQ 24(R13), R15 + MOVQ 48(R13), R13 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R13 + + // Add start offset to input + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, DX + MOVQ $0x0000000f, BP + MOVQ BP, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_9x3_64Xor_loop: + // Load 3 outputs + VMOVDQU (R14), Y0 + VMOVDQU 32(R14), Y1 + VMOVDQU (R15), Y2 + VMOVDQU 32(R15), Y3 + VMOVDQU (R13), Y4 + VMOVDQU 32(R13), Y5 + + // Load and process 64 bytes from input 0 to 3 outputs + VMOVDQU (BX), Y11 + VMOVDQU 32(BX), Y13 + ADDQ $0x40, BX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 1 to 3 outputs + VMOVDQU (SI), Y11 + VMOVDQU 32(SI), Y13 + ADDQ $0x40, SI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 2 to 3 outputs + VMOVDQU (DI), Y11 + VMOVDQU 32(DI), Y13 + ADDQ $0x40, DI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 3 to 3 outputs + VMOVDQU (R8), Y11 + VMOVDQU 32(R8), Y13 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 4 to 3 outputs + VMOVDQU (R9), Y11 + VMOVDQU 32(R9), Y13 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 5 to 3 outputs + VMOVDQU (R10), Y11 + VMOVDQU 32(R10), Y13 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 6 to 3 outputs + VMOVDQU (R11), Y11 + VMOVDQU 32(R11), Y13 + ADDQ $0x40, R11 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 1152(CX), Y7 + VMOVDQU 1184(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1216(CX), Y7 + VMOVDQU 1248(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y7 + VMOVDQU 1312(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 7 to 3 outputs + VMOVDQU (R12), Y11 + VMOVDQU 32(R12), Y13 + ADDQ $0x40, R12 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 1344(CX), Y7 + VMOVDQU 1376(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1408(CX), Y7 + VMOVDQU 1440(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1472(CX), Y7 + VMOVDQU 1504(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 8 to 3 outputs + VMOVDQU (DX), Y11 + VMOVDQU 32(DX), Y13 + ADDQ $0x40, DX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 1536(CX), Y7 + VMOVDQU 1568(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1600(CX), Y7 + VMOVDQU 1632(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1664(CX), Y7 + VMOVDQU 1696(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Store 3 outputs + VMOVDQU Y0, (R14) + VMOVDQU Y1, 32(R14) + ADDQ $0x40, R14 + VMOVDQU Y2, (R15) + VMOVDQU Y3, 32(R15) + ADDQ $0x40, R15 + VMOVDQU Y4, (R13) + VMOVDQU Y5, 32(R13) + ADDQ $0x40, R13 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_9x3_64Xor_loop + VZEROUPPER + +mulAvxTwo_9x3_64Xor_end: + RET + +// func mulAvxTwo_9x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x4(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 81 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_9x4_end + MOVQ in_base+24(FP), AX + MOVQ (AX), DX + MOVQ 24(AX), BX + MOVQ 48(AX), SI + MOVQ 72(AX), DI + MOVQ 96(AX), R8 + MOVQ 120(AX), R9 + MOVQ 144(AX), R10 + MOVQ 168(AX), R11 + MOVQ 192(AX), AX + MOVQ out_base+48(FP), R12 + MOVQ (R12), R13 + MOVQ 24(R12), R14 + MOVQ 48(R12), R15 + MOVQ 72(R12), R12 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R12 + + // Add start offset to input + ADDQ BP, DX + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, AX + MOVQ $0x0000000f, BP + MOVQ BP, X4 + VPBROADCASTB X4, Y4 + MOVQ n+80(FP), BP + SHRQ $0x05, BP + +mulAvxTwo_9x4_loop: + // Load and process 32 bytes from input 0 to 4 outputs + VMOVDQU (DX), Y7 + ADDQ $0x20, DX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y0 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y1 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y2 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y3 + + // Load and process 32 bytes from input 1 to 4 outputs + VMOVDQU (BX), Y7 + ADDQ $0x20, BX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 2 to 4 outputs + VMOVDQU (SI), Y7 + ADDQ $0x20, SI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 3 to 4 outputs + VMOVDQU (DI), Y7 + ADDQ $0x20, DI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 768(CX), Y5 + VMOVDQU 800(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 832(CX), Y5 + VMOVDQU 864(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 896(CX), Y5 + VMOVDQU 928(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 960(CX), Y5 + VMOVDQU 992(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 4 to 4 outputs + VMOVDQU (R8), Y7 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1024(CX), Y5 + VMOVDQU 1056(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1088(CX), Y5 + VMOVDQU 1120(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1152(CX), Y5 + VMOVDQU 1184(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1216(CX), Y5 + VMOVDQU 1248(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 5 to 4 outputs + VMOVDQU (R9), Y7 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1280(CX), Y5 + VMOVDQU 1312(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1344(CX), Y5 + VMOVDQU 1376(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1408(CX), Y5 + VMOVDQU 1440(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1472(CX), Y5 + VMOVDQU 1504(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 6 to 4 outputs + VMOVDQU (R10), Y7 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1536(CX), Y5 + VMOVDQU 1568(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1600(CX), Y5 + VMOVDQU 1632(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1664(CX), Y5 + VMOVDQU 1696(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1728(CX), Y5 + VMOVDQU 1760(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 7 to 4 outputs + VMOVDQU (R11), Y7 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1792(CX), Y5 + VMOVDQU 1824(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1856(CX), Y5 + VMOVDQU 1888(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1920(CX), Y5 + VMOVDQU 1952(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1984(CX), Y5 + VMOVDQU 2016(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 8 to 4 outputs + VMOVDQU (AX), Y7 + ADDQ $0x20, AX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 2048(CX), Y5 + VMOVDQU 2080(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 2112(CX), Y5 + VMOVDQU 2144(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 2176(CX), Y5 + VMOVDQU 2208(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 2240(CX), Y5 + VMOVDQU 2272(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Store 4 outputs + VMOVDQU Y0, (R13) + ADDQ $0x20, R13 + VMOVDQU Y1, (R14) + ADDQ $0x20, R14 + VMOVDQU Y2, (R15) + ADDQ $0x20, R15 + VMOVDQU Y3, (R12) + ADDQ $0x20, R12 + + // Prepare for next loop + DECQ BP + JNZ mulAvxTwo_9x4_loop + VZEROUPPER + +mulAvxTwo_9x4_end: + RET + +// func mulAvxTwo_9x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x4Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 81 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_9x4Xor_end + MOVQ in_base+24(FP), AX + MOVQ (AX), DX + MOVQ 24(AX), BX + MOVQ 48(AX), SI + MOVQ 72(AX), DI + MOVQ 96(AX), R8 + MOVQ 120(AX), R9 + MOVQ 144(AX), R10 + MOVQ 168(AX), R11 + MOVQ 192(AX), AX + MOVQ out_base+48(FP), R12 + MOVQ (R12), R13 + MOVQ 24(R12), R14 + MOVQ 48(R12), R15 + MOVQ 72(R12), R12 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R13 + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R12 + + // Add start offset to input + ADDQ BP, DX + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, AX + MOVQ $0x0000000f, BP + MOVQ BP, X4 + VPBROADCASTB X4, Y4 + MOVQ n+80(FP), BP + SHRQ $0x05, BP + +mulAvxTwo_9x4Xor_loop: + // Load and process 32 bytes from input 0 to 4 outputs + VMOVDQU (DX), Y7 + ADDQ $0x20, DX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU (R13), Y0 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU (R14), Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU (R15), Y2 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU (R12), Y3 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 1 to 4 outputs + VMOVDQU (BX), Y7 + ADDQ $0x20, BX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 2 to 4 outputs + VMOVDQU (SI), Y7 + ADDQ $0x20, SI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 3 to 4 outputs + VMOVDQU (DI), Y7 + ADDQ $0x20, DI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 768(CX), Y5 + VMOVDQU 800(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 832(CX), Y5 + VMOVDQU 864(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 896(CX), Y5 + VMOVDQU 928(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 960(CX), Y5 + VMOVDQU 992(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 4 to 4 outputs + VMOVDQU (R8), Y7 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1024(CX), Y5 + VMOVDQU 1056(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1088(CX), Y5 + VMOVDQU 1120(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1152(CX), Y5 + VMOVDQU 1184(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1216(CX), Y5 + VMOVDQU 1248(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 5 to 4 outputs + VMOVDQU (R9), Y7 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1280(CX), Y5 + VMOVDQU 1312(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1344(CX), Y5 + VMOVDQU 1376(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1408(CX), Y5 + VMOVDQU 1440(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1472(CX), Y5 + VMOVDQU 1504(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 6 to 4 outputs + VMOVDQU (R10), Y7 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1536(CX), Y5 + VMOVDQU 1568(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1600(CX), Y5 + VMOVDQU 1632(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1664(CX), Y5 + VMOVDQU 1696(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1728(CX), Y5 + VMOVDQU 1760(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 7 to 4 outputs + VMOVDQU (R11), Y7 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1792(CX), Y5 + VMOVDQU 1824(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1856(CX), Y5 + VMOVDQU 1888(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1920(CX), Y5 + VMOVDQU 1952(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1984(CX), Y5 + VMOVDQU 2016(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 8 to 4 outputs + VMOVDQU (AX), Y7 + ADDQ $0x20, AX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 2048(CX), Y5 + VMOVDQU 2080(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 2112(CX), Y5 + VMOVDQU 2144(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 2176(CX), Y5 + VMOVDQU 2208(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 2240(CX), Y5 + VMOVDQU 2272(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Store 4 outputs + VMOVDQU Y0, (R13) + ADDQ $0x20, R13 + VMOVDQU Y1, (R14) + ADDQ $0x20, R14 + VMOVDQU Y2, (R15) + ADDQ $0x20, R15 + VMOVDQU Y3, (R12) + ADDQ $0x20, R12 + + // Prepare for next loop + DECQ BP + JNZ mulAvxTwo_9x4Xor_loop + VZEROUPPER + +mulAvxTwo_9x4Xor_end: + RET + +// func mulAvxTwo_9x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x5(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 100 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_9x5_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ start+72(FP), R14 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X5 + VPBROADCASTB X5, Y5 + +mulAvxTwo_9x5_loop: + // Load and process 32 bytes from input 0 to 5 outputs + VMOVDQU (BX), Y8 + ADDQ $0x20, BX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU (CX), Y6 + VMOVDQU 32(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y0 + VMOVDQU 64(CX), Y6 + VMOVDQU 96(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y1 + VMOVDQU 128(CX), Y6 + VMOVDQU 160(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y2 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y3 + VMOVDQU 256(CX), Y6 + VMOVDQU 288(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y4 + + // Load and process 32 bytes from input 1 to 5 outputs + VMOVDQU (SI), Y8 + ADDQ $0x20, SI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 320(CX), Y6 + VMOVDQU 352(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 384(CX), Y6 + VMOVDQU 416(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 448(CX), Y6 + VMOVDQU 480(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 512(CX), Y6 + VMOVDQU 544(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 576(CX), Y6 + VMOVDQU 608(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 2 to 5 outputs + VMOVDQU (DI), Y8 + ADDQ $0x20, DI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 640(CX), Y6 + VMOVDQU 672(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 704(CX), Y6 + VMOVDQU 736(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 768(CX), Y6 + VMOVDQU 800(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 832(CX), Y6 + VMOVDQU 864(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 896(CX), Y6 + VMOVDQU 928(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 3 to 5 outputs + VMOVDQU (R8), Y8 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 960(CX), Y6 + VMOVDQU 992(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1024(CX), Y6 + VMOVDQU 1056(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1088(CX), Y6 + VMOVDQU 1120(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1152(CX), Y6 + VMOVDQU 1184(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1216(CX), Y6 + VMOVDQU 1248(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 4 to 5 outputs + VMOVDQU (R9), Y8 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1280(CX), Y6 + VMOVDQU 1312(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1344(CX), Y6 + VMOVDQU 1376(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1408(CX), Y6 + VMOVDQU 1440(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1472(CX), Y6 + VMOVDQU 1504(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1536(CX), Y6 + VMOVDQU 1568(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 5 to 5 outputs + VMOVDQU (R10), Y8 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1600(CX), Y6 + VMOVDQU 1632(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1664(CX), Y6 + VMOVDQU 1696(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1728(CX), Y6 + VMOVDQU 1760(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1792(CX), Y6 + VMOVDQU 1824(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1856(CX), Y6 + VMOVDQU 1888(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 6 to 5 outputs + VMOVDQU (R11), Y8 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1920(CX), Y6 + VMOVDQU 1952(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1984(CX), Y6 + VMOVDQU 2016(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 2048(CX), Y6 + VMOVDQU 2080(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 2112(CX), Y6 + VMOVDQU 2144(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 2176(CX), Y6 + VMOVDQU 2208(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 7 to 5 outputs + VMOVDQU (R12), Y8 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 2240(CX), Y6 + VMOVDQU 2272(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 2304(CX), Y6 + VMOVDQU 2336(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 2368(CX), Y6 + VMOVDQU 2400(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 2432(CX), Y6 + VMOVDQU 2464(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 2496(CX), Y6 + VMOVDQU 2528(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 8 to 5 outputs + VMOVDQU (DX), Y8 + ADDQ $0x20, DX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 2560(CX), Y6 + VMOVDQU 2592(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 2624(CX), Y6 + VMOVDQU 2656(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 2688(CX), Y6 + VMOVDQU 2720(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 2752(CX), Y6 + VMOVDQU 2784(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 2816(CX), Y6 + VMOVDQU 2848(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Store 5 outputs + MOVQ (R13), R15 + VMOVDQU Y0, (R15)(R14*1) + MOVQ 24(R13), R15 + VMOVDQU Y1, (R15)(R14*1) + MOVQ 48(R13), R15 + VMOVDQU Y2, (R15)(R14*1) + MOVQ 72(R13), R15 + VMOVDQU Y3, (R15)(R14*1) + MOVQ 96(R13), R15 + VMOVDQU Y4, (R15)(R14*1) + + // Prepare for next loop + ADDQ $0x20, R14 + DECQ AX + JNZ mulAvxTwo_9x5_loop + VZEROUPPER + +mulAvxTwo_9x5_end: + RET + +// func mulAvxTwo_9x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x5Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 100 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_9x5Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ start+72(FP), R14 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X5 + VPBROADCASTB X5, Y5 + +mulAvxTwo_9x5Xor_loop: + // Load and process 32 bytes from input 0 to 5 outputs + VMOVDQU (BX), Y8 + ADDQ $0x20, BX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + MOVQ (R13), R15 + VMOVDQU (R15)(R14*1), Y0 + VMOVDQU (CX), Y6 + VMOVDQU 32(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + MOVQ 24(R13), R15 + VMOVDQU (R15)(R14*1), Y1 + VMOVDQU 64(CX), Y6 + VMOVDQU 96(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + MOVQ 48(R13), R15 + VMOVDQU (R15)(R14*1), Y2 + VMOVDQU 128(CX), Y6 + VMOVDQU 160(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + MOVQ 72(R13), R15 + VMOVDQU (R15)(R14*1), Y3 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + MOVQ 96(R13), R15 + VMOVDQU (R15)(R14*1), Y4 + VMOVDQU 256(CX), Y6 + VMOVDQU 288(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 1 to 5 outputs + VMOVDQU (SI), Y8 + ADDQ $0x20, SI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 320(CX), Y6 + VMOVDQU 352(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 384(CX), Y6 + VMOVDQU 416(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 448(CX), Y6 + VMOVDQU 480(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 512(CX), Y6 + VMOVDQU 544(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 576(CX), Y6 + VMOVDQU 608(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 2 to 5 outputs + VMOVDQU (DI), Y8 + ADDQ $0x20, DI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 640(CX), Y6 + VMOVDQU 672(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 704(CX), Y6 + VMOVDQU 736(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 768(CX), Y6 + VMOVDQU 800(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 832(CX), Y6 + VMOVDQU 864(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 896(CX), Y6 + VMOVDQU 928(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 3 to 5 outputs + VMOVDQU (R8), Y8 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 960(CX), Y6 + VMOVDQU 992(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1024(CX), Y6 + VMOVDQU 1056(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1088(CX), Y6 + VMOVDQU 1120(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1152(CX), Y6 + VMOVDQU 1184(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1216(CX), Y6 + VMOVDQU 1248(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 4 to 5 outputs + VMOVDQU (R9), Y8 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1280(CX), Y6 + VMOVDQU 1312(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1344(CX), Y6 + VMOVDQU 1376(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1408(CX), Y6 + VMOVDQU 1440(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1472(CX), Y6 + VMOVDQU 1504(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1536(CX), Y6 + VMOVDQU 1568(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 5 to 5 outputs + VMOVDQU (R10), Y8 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1600(CX), Y6 + VMOVDQU 1632(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1664(CX), Y6 + VMOVDQU 1696(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1728(CX), Y6 + VMOVDQU 1760(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1792(CX), Y6 + VMOVDQU 1824(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1856(CX), Y6 + VMOVDQU 1888(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 6 to 5 outputs + VMOVDQU (R11), Y8 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1920(CX), Y6 + VMOVDQU 1952(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1984(CX), Y6 + VMOVDQU 2016(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 2048(CX), Y6 + VMOVDQU 2080(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 2112(CX), Y6 + VMOVDQU 2144(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 2176(CX), Y6 + VMOVDQU 2208(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 7 to 5 outputs + VMOVDQU (R12), Y8 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 2240(CX), Y6 + VMOVDQU 2272(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 2304(CX), Y6 + VMOVDQU 2336(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 2368(CX), Y6 + VMOVDQU 2400(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 2432(CX), Y6 + VMOVDQU 2464(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 2496(CX), Y6 + VMOVDQU 2528(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 8 to 5 outputs + VMOVDQU (DX), Y8 + ADDQ $0x20, DX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 2560(CX), Y6 + VMOVDQU 2592(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 2624(CX), Y6 + VMOVDQU 2656(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 2688(CX), Y6 + VMOVDQU 2720(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 2752(CX), Y6 + VMOVDQU 2784(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 2816(CX), Y6 + VMOVDQU 2848(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Store 5 outputs + MOVQ (R13), R15 + VMOVDQU Y0, (R15)(R14*1) + MOVQ 24(R13), R15 + VMOVDQU Y1, (R15)(R14*1) + MOVQ 48(R13), R15 + VMOVDQU Y2, (R15)(R14*1) + MOVQ 72(R13), R15 + VMOVDQU Y3, (R15)(R14*1) + MOVQ 96(R13), R15 + VMOVDQU Y4, (R15)(R14*1) + + // Prepare for next loop + ADDQ $0x20, R14 + DECQ AX + JNZ mulAvxTwo_9x5Xor_loop + VZEROUPPER + +mulAvxTwo_9x5Xor_end: + RET + +// func mulAvxTwo_9x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x6(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 119 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_9x6_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ start+72(FP), R14 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_9x6_loop: + // Load and process 32 bytes from input 0 to 6 outputs + VMOVDQU (BX), Y9 + ADDQ $0x20, BX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y0 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y1 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y2 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y3 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y4 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y5 + + // Load and process 32 bytes from input 1 to 6 outputs + VMOVDQU (SI), Y9 + ADDQ $0x20, SI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 2 to 6 outputs + VMOVDQU (DI), Y9 + ADDQ $0x20, DI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 3 to 6 outputs + VMOVDQU (R8), Y9 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1152(CX), Y7 + VMOVDQU 1184(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1216(CX), Y7 + VMOVDQU 1248(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1280(CX), Y7 + VMOVDQU 1312(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1344(CX), Y7 + VMOVDQU 1376(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1408(CX), Y7 + VMOVDQU 1440(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1472(CX), Y7 + VMOVDQU 1504(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 4 to 6 outputs + VMOVDQU (R9), Y9 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1536(CX), Y7 + VMOVDQU 1568(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1600(CX), Y7 + VMOVDQU 1632(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1664(CX), Y7 + VMOVDQU 1696(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1728(CX), Y7 + VMOVDQU 1760(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1792(CX), Y7 + VMOVDQU 1824(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1856(CX), Y7 + VMOVDQU 1888(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 5 to 6 outputs + VMOVDQU (R10), Y9 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1920(CX), Y7 + VMOVDQU 1952(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1984(CX), Y7 + VMOVDQU 2016(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2048(CX), Y7 + VMOVDQU 2080(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2112(CX), Y7 + VMOVDQU 2144(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2176(CX), Y7 + VMOVDQU 2208(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 2240(CX), Y7 + VMOVDQU 2272(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 6 to 6 outputs + VMOVDQU (R11), Y9 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 2304(CX), Y7 + VMOVDQU 2336(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 2368(CX), Y7 + VMOVDQU 2400(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2432(CX), Y7 + VMOVDQU 2464(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2496(CX), Y7 + VMOVDQU 2528(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2560(CX), Y7 + VMOVDQU 2592(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 2624(CX), Y7 + VMOVDQU 2656(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 7 to 6 outputs + VMOVDQU (R12), Y9 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 2688(CX), Y7 + VMOVDQU 2720(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 2752(CX), Y7 + VMOVDQU 2784(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2816(CX), Y7 + VMOVDQU 2848(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2880(CX), Y7 + VMOVDQU 2912(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2944(CX), Y7 + VMOVDQU 2976(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 3008(CX), Y7 + VMOVDQU 3040(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 8 to 6 outputs + VMOVDQU (DX), Y9 + ADDQ $0x20, DX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 3072(CX), Y7 + VMOVDQU 3104(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 3136(CX), Y7 + VMOVDQU 3168(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 3200(CX), Y7 + VMOVDQU 3232(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 3264(CX), Y7 + VMOVDQU 3296(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 3328(CX), Y7 + VMOVDQU 3360(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 3392(CX), Y7 + VMOVDQU 3424(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Store 6 outputs + MOVQ (R13), R15 + VMOVDQU Y0, (R15)(R14*1) + MOVQ 24(R13), R15 + VMOVDQU Y1, (R15)(R14*1) + MOVQ 48(R13), R15 + VMOVDQU Y2, (R15)(R14*1) + MOVQ 72(R13), R15 + VMOVDQU Y3, (R15)(R14*1) + MOVQ 96(R13), R15 + VMOVDQU Y4, (R15)(R14*1) + MOVQ 120(R13), R15 + VMOVDQU Y5, (R15)(R14*1) + + // Prepare for next loop + ADDQ $0x20, R14 + DECQ AX + JNZ mulAvxTwo_9x6_loop + VZEROUPPER + +mulAvxTwo_9x6_end: + RET + +// func mulAvxTwo_9x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x6Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 119 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_9x6Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ start+72(FP), R14 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_9x6Xor_loop: + // Load and process 32 bytes from input 0 to 6 outputs + VMOVDQU (BX), Y9 + ADDQ $0x20, BX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + MOVQ (R13), R15 + VMOVDQU (R15)(R14*1), Y0 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + MOVQ 24(R13), R15 + VMOVDQU (R15)(R14*1), Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + MOVQ 48(R13), R15 + VMOVDQU (R15)(R14*1), Y2 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + MOVQ 72(R13), R15 + VMOVDQU (R15)(R14*1), Y3 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + MOVQ 96(R13), R15 + VMOVDQU (R15)(R14*1), Y4 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + MOVQ 120(R13), R15 + VMOVDQU (R15)(R14*1), Y5 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 1 to 6 outputs + VMOVDQU (SI), Y9 + ADDQ $0x20, SI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 2 to 6 outputs + VMOVDQU (DI), Y9 + ADDQ $0x20, DI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 3 to 6 outputs + VMOVDQU (R8), Y9 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1152(CX), Y7 + VMOVDQU 1184(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1216(CX), Y7 + VMOVDQU 1248(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1280(CX), Y7 + VMOVDQU 1312(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1344(CX), Y7 + VMOVDQU 1376(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1408(CX), Y7 + VMOVDQU 1440(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1472(CX), Y7 + VMOVDQU 1504(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 4 to 6 outputs + VMOVDQU (R9), Y9 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1536(CX), Y7 + VMOVDQU 1568(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1600(CX), Y7 + VMOVDQU 1632(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1664(CX), Y7 + VMOVDQU 1696(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1728(CX), Y7 + VMOVDQU 1760(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1792(CX), Y7 + VMOVDQU 1824(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1856(CX), Y7 + VMOVDQU 1888(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 5 to 6 outputs + VMOVDQU (R10), Y9 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1920(CX), Y7 + VMOVDQU 1952(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1984(CX), Y7 + VMOVDQU 2016(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2048(CX), Y7 + VMOVDQU 2080(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2112(CX), Y7 + VMOVDQU 2144(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2176(CX), Y7 + VMOVDQU 2208(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 2240(CX), Y7 + VMOVDQU 2272(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 6 to 6 outputs + VMOVDQU (R11), Y9 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 2304(CX), Y7 + VMOVDQU 2336(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 2368(CX), Y7 + VMOVDQU 2400(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2432(CX), Y7 + VMOVDQU 2464(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2496(CX), Y7 + VMOVDQU 2528(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2560(CX), Y7 + VMOVDQU 2592(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 2624(CX), Y7 + VMOVDQU 2656(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 7 to 6 outputs + VMOVDQU (R12), Y9 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 2688(CX), Y7 + VMOVDQU 2720(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 2752(CX), Y7 + VMOVDQU 2784(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2816(CX), Y7 + VMOVDQU 2848(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2880(CX), Y7 + VMOVDQU 2912(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2944(CX), Y7 + VMOVDQU 2976(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 3008(CX), Y7 + VMOVDQU 3040(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 8 to 6 outputs + VMOVDQU (DX), Y9 + ADDQ $0x20, DX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 3072(CX), Y7 + VMOVDQU 3104(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 3136(CX), Y7 + VMOVDQU 3168(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 3200(CX), Y7 + VMOVDQU 3232(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 3264(CX), Y7 + VMOVDQU 3296(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 3328(CX), Y7 + VMOVDQU 3360(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 3392(CX), Y7 + VMOVDQU 3424(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Store 6 outputs + MOVQ (R13), R15 + VMOVDQU Y0, (R15)(R14*1) + MOVQ 24(R13), R15 + VMOVDQU Y1, (R15)(R14*1) + MOVQ 48(R13), R15 + VMOVDQU Y2, (R15)(R14*1) + MOVQ 72(R13), R15 + VMOVDQU Y3, (R15)(R14*1) + MOVQ 96(R13), R15 + VMOVDQU Y4, (R15)(R14*1) + MOVQ 120(R13), R15 + VMOVDQU Y5, (R15)(R14*1) + + // Prepare for next loop + ADDQ $0x20, R14 + DECQ AX + JNZ mulAvxTwo_9x6Xor_loop + VZEROUPPER + +mulAvxTwo_9x6Xor_end: + RET + +// func mulAvxTwo_9x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x7(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 138 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_9x7_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ start+72(FP), R14 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X7 + VPBROADCASTB X7, Y7 + +mulAvxTwo_9x7_loop: + // Load and process 32 bytes from input 0 to 7 outputs + VMOVDQU (BX), Y10 + ADDQ $0x20, BX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU (CX), Y8 + VMOVDQU 32(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y0 + VMOVDQU 64(CX), Y8 + VMOVDQU 96(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y1 + VMOVDQU 128(CX), Y8 + VMOVDQU 160(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y2 + VMOVDQU 192(CX), Y8 + VMOVDQU 224(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y3 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y4 + VMOVDQU 320(CX), Y8 + VMOVDQU 352(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y5 + VMOVDQU 384(CX), Y8 + VMOVDQU 416(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y6 + + // Load and process 32 bytes from input 1 to 7 outputs + VMOVDQU (SI), Y10 + ADDQ $0x20, SI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 448(CX), Y8 + VMOVDQU 480(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 512(CX), Y8 + VMOVDQU 544(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 576(CX), Y8 + VMOVDQU 608(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 640(CX), Y8 + VMOVDQU 672(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 704(CX), Y8 + VMOVDQU 736(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 768(CX), Y8 + VMOVDQU 800(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 832(CX), Y8 + VMOVDQU 864(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 2 to 7 outputs + VMOVDQU (DI), Y10 + ADDQ $0x20, DI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 896(CX), Y8 + VMOVDQU 928(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 960(CX), Y8 + VMOVDQU 992(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1024(CX), Y8 + VMOVDQU 1056(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1088(CX), Y8 + VMOVDQU 1120(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1152(CX), Y8 + VMOVDQU 1184(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1216(CX), Y8 + VMOVDQU 1248(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1280(CX), Y8 + VMOVDQU 1312(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 3 to 7 outputs + VMOVDQU (R8), Y10 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1344(CX), Y8 + VMOVDQU 1376(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1408(CX), Y8 + VMOVDQU 1440(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1472(CX), Y8 + VMOVDQU 1504(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1536(CX), Y8 + VMOVDQU 1568(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1600(CX), Y8 + VMOVDQU 1632(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1664(CX), Y8 + VMOVDQU 1696(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1728(CX), Y8 + VMOVDQU 1760(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 4 to 7 outputs + VMOVDQU (R9), Y10 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1792(CX), Y8 + VMOVDQU 1824(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1856(CX), Y8 + VMOVDQU 1888(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1920(CX), Y8 + VMOVDQU 1952(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1984(CX), Y8 + VMOVDQU 2016(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2048(CX), Y8 + VMOVDQU 2080(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 2112(CX), Y8 + VMOVDQU 2144(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 2176(CX), Y8 + VMOVDQU 2208(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 5 to 7 outputs + VMOVDQU (R10), Y10 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 2240(CX), Y8 + VMOVDQU 2272(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 2304(CX), Y8 + VMOVDQU 2336(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 2368(CX), Y8 + VMOVDQU 2400(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 2432(CX), Y8 + VMOVDQU 2464(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2496(CX), Y8 + VMOVDQU 2528(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 2560(CX), Y8 + VMOVDQU 2592(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 2624(CX), Y8 + VMOVDQU 2656(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 6 to 7 outputs + VMOVDQU (R11), Y10 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 2688(CX), Y8 + VMOVDQU 2720(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 2752(CX), Y8 + VMOVDQU 2784(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 2816(CX), Y8 + VMOVDQU 2848(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 2880(CX), Y8 + VMOVDQU 2912(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2944(CX), Y8 + VMOVDQU 2976(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 3008(CX), Y8 + VMOVDQU 3040(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 3072(CX), Y8 + VMOVDQU 3104(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 7 to 7 outputs + VMOVDQU (R12), Y10 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 3136(CX), Y8 + VMOVDQU 3168(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 3200(CX), Y8 + VMOVDQU 3232(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 3264(CX), Y8 + VMOVDQU 3296(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 3328(CX), Y8 + VMOVDQU 3360(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 3392(CX), Y8 + VMOVDQU 3424(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 3456(CX), Y8 + VMOVDQU 3488(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 3520(CX), Y8 + VMOVDQU 3552(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 8 to 7 outputs + VMOVDQU (DX), Y10 + ADDQ $0x20, DX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 3584(CX), Y8 + VMOVDQU 3616(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 3648(CX), Y8 + VMOVDQU 3680(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 3712(CX), Y8 + VMOVDQU 3744(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 3776(CX), Y8 + VMOVDQU 3808(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 3840(CX), Y8 + VMOVDQU 3872(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 3904(CX), Y8 + VMOVDQU 3936(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 3968(CX), Y8 + VMOVDQU 4000(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Store 7 outputs + MOVQ (R13), R15 + VMOVDQU Y0, (R15)(R14*1) + MOVQ 24(R13), R15 + VMOVDQU Y1, (R15)(R14*1) + MOVQ 48(R13), R15 + VMOVDQU Y2, (R15)(R14*1) + MOVQ 72(R13), R15 + VMOVDQU Y3, (R15)(R14*1) + MOVQ 96(R13), R15 + VMOVDQU Y4, (R15)(R14*1) + MOVQ 120(R13), R15 + VMOVDQU Y5, (R15)(R14*1) + MOVQ 144(R13), R15 + VMOVDQU Y6, (R15)(R14*1) + + // Prepare for next loop + ADDQ $0x20, R14 + DECQ AX + JNZ mulAvxTwo_9x7_loop + VZEROUPPER + +mulAvxTwo_9x7_end: + RET + +// func mulAvxTwo_9x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x7Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 138 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_9x7Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ start+72(FP), R14 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X7 + VPBROADCASTB X7, Y7 + +mulAvxTwo_9x7Xor_loop: + // Load and process 32 bytes from input 0 to 7 outputs + VMOVDQU (BX), Y10 + ADDQ $0x20, BX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + MOVQ (R13), R15 + VMOVDQU (R15)(R14*1), Y0 + VMOVDQU (CX), Y8 + VMOVDQU 32(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + MOVQ 24(R13), R15 + VMOVDQU (R15)(R14*1), Y1 + VMOVDQU 64(CX), Y8 + VMOVDQU 96(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + MOVQ 48(R13), R15 + VMOVDQU (R15)(R14*1), Y2 + VMOVDQU 128(CX), Y8 + VMOVDQU 160(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + MOVQ 72(R13), R15 + VMOVDQU (R15)(R14*1), Y3 + VMOVDQU 192(CX), Y8 + VMOVDQU 224(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + MOVQ 96(R13), R15 + VMOVDQU (R15)(R14*1), Y4 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + MOVQ 120(R13), R15 + VMOVDQU (R15)(R14*1), Y5 + VMOVDQU 320(CX), Y8 + VMOVDQU 352(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + MOVQ 144(R13), R15 + VMOVDQU (R15)(R14*1), Y6 + VMOVDQU 384(CX), Y8 + VMOVDQU 416(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 1 to 7 outputs + VMOVDQU (SI), Y10 + ADDQ $0x20, SI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 448(CX), Y8 + VMOVDQU 480(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 512(CX), Y8 + VMOVDQU 544(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 576(CX), Y8 + VMOVDQU 608(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 640(CX), Y8 + VMOVDQU 672(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 704(CX), Y8 + VMOVDQU 736(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 768(CX), Y8 + VMOVDQU 800(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 832(CX), Y8 + VMOVDQU 864(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 2 to 7 outputs + VMOVDQU (DI), Y10 + ADDQ $0x20, DI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 896(CX), Y8 + VMOVDQU 928(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 960(CX), Y8 + VMOVDQU 992(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1024(CX), Y8 + VMOVDQU 1056(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1088(CX), Y8 + VMOVDQU 1120(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1152(CX), Y8 + VMOVDQU 1184(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1216(CX), Y8 + VMOVDQU 1248(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1280(CX), Y8 + VMOVDQU 1312(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 3 to 7 outputs + VMOVDQU (R8), Y10 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1344(CX), Y8 + VMOVDQU 1376(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1408(CX), Y8 + VMOVDQU 1440(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1472(CX), Y8 + VMOVDQU 1504(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1536(CX), Y8 + VMOVDQU 1568(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1600(CX), Y8 + VMOVDQU 1632(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1664(CX), Y8 + VMOVDQU 1696(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1728(CX), Y8 + VMOVDQU 1760(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 4 to 7 outputs + VMOVDQU (R9), Y10 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1792(CX), Y8 + VMOVDQU 1824(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1856(CX), Y8 + VMOVDQU 1888(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1920(CX), Y8 + VMOVDQU 1952(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1984(CX), Y8 + VMOVDQU 2016(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2048(CX), Y8 + VMOVDQU 2080(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 2112(CX), Y8 + VMOVDQU 2144(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 2176(CX), Y8 + VMOVDQU 2208(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 5 to 7 outputs + VMOVDQU (R10), Y10 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 2240(CX), Y8 + VMOVDQU 2272(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 2304(CX), Y8 + VMOVDQU 2336(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 2368(CX), Y8 + VMOVDQU 2400(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 2432(CX), Y8 + VMOVDQU 2464(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2496(CX), Y8 + VMOVDQU 2528(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 2560(CX), Y8 + VMOVDQU 2592(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 2624(CX), Y8 + VMOVDQU 2656(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 6 to 7 outputs + VMOVDQU (R11), Y10 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 2688(CX), Y8 + VMOVDQU 2720(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 2752(CX), Y8 + VMOVDQU 2784(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 2816(CX), Y8 + VMOVDQU 2848(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 2880(CX), Y8 + VMOVDQU 2912(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2944(CX), Y8 + VMOVDQU 2976(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 3008(CX), Y8 + VMOVDQU 3040(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 3072(CX), Y8 + VMOVDQU 3104(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 7 to 7 outputs + VMOVDQU (R12), Y10 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 3136(CX), Y8 + VMOVDQU 3168(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 3200(CX), Y8 + VMOVDQU 3232(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 3264(CX), Y8 + VMOVDQU 3296(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 3328(CX), Y8 + VMOVDQU 3360(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 3392(CX), Y8 + VMOVDQU 3424(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 3456(CX), Y8 + VMOVDQU 3488(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 3520(CX), Y8 + VMOVDQU 3552(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 8 to 7 outputs + VMOVDQU (DX), Y10 + ADDQ $0x20, DX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 3584(CX), Y8 + VMOVDQU 3616(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 3648(CX), Y8 + VMOVDQU 3680(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 3712(CX), Y8 + VMOVDQU 3744(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 3776(CX), Y8 + VMOVDQU 3808(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 3840(CX), Y8 + VMOVDQU 3872(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 3904(CX), Y8 + VMOVDQU 3936(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 3968(CX), Y8 + VMOVDQU 4000(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Store 7 outputs + MOVQ (R13), R15 + VMOVDQU Y0, (R15)(R14*1) + MOVQ 24(R13), R15 + VMOVDQU Y1, (R15)(R14*1) + MOVQ 48(R13), R15 + VMOVDQU Y2, (R15)(R14*1) + MOVQ 72(R13), R15 + VMOVDQU Y3, (R15)(R14*1) + MOVQ 96(R13), R15 + VMOVDQU Y4, (R15)(R14*1) + MOVQ 120(R13), R15 + VMOVDQU Y5, (R15)(R14*1) + MOVQ 144(R13), R15 + VMOVDQU Y6, (R15)(R14*1) + + // Prepare for next loop + ADDQ $0x20, R14 + DECQ AX + JNZ mulAvxTwo_9x7Xor_loop + VZEROUPPER + +mulAvxTwo_9x7Xor_end: + RET + +// func mulAvxTwo_9x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x8(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 157 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_9x8_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ start+72(FP), R14 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X8 + VPBROADCASTB X8, Y8 + +mulAvxTwo_9x8_loop: + // Load and process 32 bytes from input 0 to 8 outputs + VMOVDQU (BX), Y11 + ADDQ $0x20, BX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU (CX), Y9 + VMOVDQU 32(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y0 + VMOVDQU 64(CX), Y9 + VMOVDQU 96(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y1 + VMOVDQU 128(CX), Y9 + VMOVDQU 160(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y2 + VMOVDQU 192(CX), Y9 + VMOVDQU 224(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y3 + VMOVDQU 256(CX), Y9 + VMOVDQU 288(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y4 + VMOVDQU 320(CX), Y9 + VMOVDQU 352(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y5 + VMOVDQU 384(CX), Y9 + VMOVDQU 416(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y6 + VMOVDQU 448(CX), Y9 + VMOVDQU 480(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y7 + + // Load and process 32 bytes from input 1 to 8 outputs + VMOVDQU (SI), Y11 + ADDQ $0x20, SI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 512(CX), Y9 + VMOVDQU 544(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 576(CX), Y9 + VMOVDQU 608(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y9 + VMOVDQU 672(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 704(CX), Y9 + VMOVDQU 736(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 768(CX), Y9 + VMOVDQU 800(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 832(CX), Y9 + VMOVDQU 864(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 896(CX), Y9 + VMOVDQU 928(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 960(CX), Y9 + VMOVDQU 992(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 2 to 8 outputs + VMOVDQU (DI), Y11 + ADDQ $0x20, DI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1024(CX), Y9 + VMOVDQU 1056(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1088(CX), Y9 + VMOVDQU 1120(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1152(CX), Y9 + VMOVDQU 1184(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1216(CX), Y9 + VMOVDQU 1248(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y9 + VMOVDQU 1312(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1344(CX), Y9 + VMOVDQU 1376(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1408(CX), Y9 + VMOVDQU 1440(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1472(CX), Y9 + VMOVDQU 1504(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 3 to 8 outputs + VMOVDQU (R8), Y11 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1536(CX), Y9 + VMOVDQU 1568(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1600(CX), Y9 + VMOVDQU 1632(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1664(CX), Y9 + VMOVDQU 1696(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1728(CX), Y9 + VMOVDQU 1760(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1792(CX), Y9 + VMOVDQU 1824(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1856(CX), Y9 + VMOVDQU 1888(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1920(CX), Y9 + VMOVDQU 1952(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1984(CX), Y9 + VMOVDQU 2016(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 4 to 8 outputs + VMOVDQU (R9), Y11 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 2048(CX), Y9 + VMOVDQU 2080(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 2112(CX), Y9 + VMOVDQU 2144(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 2176(CX), Y9 + VMOVDQU 2208(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 2240(CX), Y9 + VMOVDQU 2272(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 2304(CX), Y9 + VMOVDQU 2336(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 2368(CX), Y9 + VMOVDQU 2400(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 2432(CX), Y9 + VMOVDQU 2464(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 2496(CX), Y9 + VMOVDQU 2528(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 5 to 8 outputs + VMOVDQU (R10), Y11 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 2560(CX), Y9 + VMOVDQU 2592(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 2624(CX), Y9 + VMOVDQU 2656(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 2688(CX), Y9 + VMOVDQU 2720(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 2752(CX), Y9 + VMOVDQU 2784(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 2816(CX), Y9 + VMOVDQU 2848(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 2880(CX), Y9 + VMOVDQU 2912(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 2944(CX), Y9 + VMOVDQU 2976(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 3008(CX), Y9 + VMOVDQU 3040(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 6 to 8 outputs + VMOVDQU (R11), Y11 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 3072(CX), Y9 + VMOVDQU 3104(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 3136(CX), Y9 + VMOVDQU 3168(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 3200(CX), Y9 + VMOVDQU 3232(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 3264(CX), Y9 + VMOVDQU 3296(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 3328(CX), Y9 + VMOVDQU 3360(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 3392(CX), Y9 + VMOVDQU 3424(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 3456(CX), Y9 + VMOVDQU 3488(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 3520(CX), Y9 + VMOVDQU 3552(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 7 to 8 outputs + VMOVDQU (R12), Y11 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 3584(CX), Y9 + VMOVDQU 3616(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 3648(CX), Y9 + VMOVDQU 3680(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 3712(CX), Y9 + VMOVDQU 3744(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 3776(CX), Y9 + VMOVDQU 3808(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 3840(CX), Y9 + VMOVDQU 3872(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 3904(CX), Y9 + VMOVDQU 3936(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 3968(CX), Y9 + VMOVDQU 4000(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 4032(CX), Y9 + VMOVDQU 4064(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 8 to 8 outputs + VMOVDQU (DX), Y11 + ADDQ $0x20, DX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 4096(CX), Y9 + VMOVDQU 4128(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 4160(CX), Y9 + VMOVDQU 4192(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 4224(CX), Y9 + VMOVDQU 4256(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 4288(CX), Y9 + VMOVDQU 4320(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 4352(CX), Y9 + VMOVDQU 4384(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 4416(CX), Y9 + VMOVDQU 4448(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 4480(CX), Y9 + VMOVDQU 4512(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 4544(CX), Y9 + VMOVDQU 4576(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Store 8 outputs + MOVQ (R13), R15 + VMOVDQU Y0, (R15)(R14*1) + MOVQ 24(R13), R15 + VMOVDQU Y1, (R15)(R14*1) + MOVQ 48(R13), R15 + VMOVDQU Y2, (R15)(R14*1) + MOVQ 72(R13), R15 + VMOVDQU Y3, (R15)(R14*1) + MOVQ 96(R13), R15 + VMOVDQU Y4, (R15)(R14*1) + MOVQ 120(R13), R15 + VMOVDQU Y5, (R15)(R14*1) + MOVQ 144(R13), R15 + VMOVDQU Y6, (R15)(R14*1) + MOVQ 168(R13), R15 + VMOVDQU Y7, (R15)(R14*1) + + // Prepare for next loop + ADDQ $0x20, R14 + DECQ AX + JNZ mulAvxTwo_9x8_loop + VZEROUPPER + +mulAvxTwo_9x8_end: + RET + +// func mulAvxTwo_9x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x8Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 157 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_9x8Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ start+72(FP), R14 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X8 + VPBROADCASTB X8, Y8 + +mulAvxTwo_9x8Xor_loop: + // Load and process 32 bytes from input 0 to 8 outputs + VMOVDQU (BX), Y11 + ADDQ $0x20, BX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + MOVQ (R13), R15 + VMOVDQU (R15)(R14*1), Y0 + VMOVDQU (CX), Y9 + VMOVDQU 32(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + MOVQ 24(R13), R15 + VMOVDQU (R15)(R14*1), Y1 + VMOVDQU 64(CX), Y9 + VMOVDQU 96(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + MOVQ 48(R13), R15 + VMOVDQU (R15)(R14*1), Y2 + VMOVDQU 128(CX), Y9 + VMOVDQU 160(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + MOVQ 72(R13), R15 + VMOVDQU (R15)(R14*1), Y3 + VMOVDQU 192(CX), Y9 + VMOVDQU 224(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + MOVQ 96(R13), R15 + VMOVDQU (R15)(R14*1), Y4 + VMOVDQU 256(CX), Y9 + VMOVDQU 288(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + MOVQ 120(R13), R15 + VMOVDQU (R15)(R14*1), Y5 + VMOVDQU 320(CX), Y9 + VMOVDQU 352(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + MOVQ 144(R13), R15 + VMOVDQU (R15)(R14*1), Y6 + VMOVDQU 384(CX), Y9 + VMOVDQU 416(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + MOVQ 168(R13), R15 + VMOVDQU (R15)(R14*1), Y7 + VMOVDQU 448(CX), Y9 + VMOVDQU 480(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 1 to 8 outputs + VMOVDQU (SI), Y11 + ADDQ $0x20, SI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 512(CX), Y9 + VMOVDQU 544(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 576(CX), Y9 + VMOVDQU 608(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y9 + VMOVDQU 672(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 704(CX), Y9 + VMOVDQU 736(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 768(CX), Y9 + VMOVDQU 800(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 832(CX), Y9 + VMOVDQU 864(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 896(CX), Y9 + VMOVDQU 928(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 960(CX), Y9 + VMOVDQU 992(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 2 to 8 outputs + VMOVDQU (DI), Y11 + ADDQ $0x20, DI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1024(CX), Y9 + VMOVDQU 1056(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1088(CX), Y9 + VMOVDQU 1120(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1152(CX), Y9 + VMOVDQU 1184(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1216(CX), Y9 + VMOVDQU 1248(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y9 + VMOVDQU 1312(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1344(CX), Y9 + VMOVDQU 1376(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1408(CX), Y9 + VMOVDQU 1440(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1472(CX), Y9 + VMOVDQU 1504(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 3 to 8 outputs + VMOVDQU (R8), Y11 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1536(CX), Y9 + VMOVDQU 1568(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1600(CX), Y9 + VMOVDQU 1632(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1664(CX), Y9 + VMOVDQU 1696(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1728(CX), Y9 + VMOVDQU 1760(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1792(CX), Y9 + VMOVDQU 1824(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1856(CX), Y9 + VMOVDQU 1888(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1920(CX), Y9 + VMOVDQU 1952(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1984(CX), Y9 + VMOVDQU 2016(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 4 to 8 outputs + VMOVDQU (R9), Y11 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 2048(CX), Y9 + VMOVDQU 2080(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 2112(CX), Y9 + VMOVDQU 2144(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 2176(CX), Y9 + VMOVDQU 2208(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 2240(CX), Y9 + VMOVDQU 2272(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 2304(CX), Y9 + VMOVDQU 2336(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 2368(CX), Y9 + VMOVDQU 2400(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 2432(CX), Y9 + VMOVDQU 2464(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 2496(CX), Y9 + VMOVDQU 2528(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 5 to 8 outputs + VMOVDQU (R10), Y11 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 2560(CX), Y9 + VMOVDQU 2592(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 2624(CX), Y9 + VMOVDQU 2656(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 2688(CX), Y9 + VMOVDQU 2720(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 2752(CX), Y9 + VMOVDQU 2784(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 2816(CX), Y9 + VMOVDQU 2848(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 2880(CX), Y9 + VMOVDQU 2912(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 2944(CX), Y9 + VMOVDQU 2976(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 3008(CX), Y9 + VMOVDQU 3040(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 6 to 8 outputs + VMOVDQU (R11), Y11 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 3072(CX), Y9 + VMOVDQU 3104(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 3136(CX), Y9 + VMOVDQU 3168(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 3200(CX), Y9 + VMOVDQU 3232(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 3264(CX), Y9 + VMOVDQU 3296(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 3328(CX), Y9 + VMOVDQU 3360(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 3392(CX), Y9 + VMOVDQU 3424(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 3456(CX), Y9 + VMOVDQU 3488(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 3520(CX), Y9 + VMOVDQU 3552(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 7 to 8 outputs + VMOVDQU (R12), Y11 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 3584(CX), Y9 + VMOVDQU 3616(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 3648(CX), Y9 + VMOVDQU 3680(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 3712(CX), Y9 + VMOVDQU 3744(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 3776(CX), Y9 + VMOVDQU 3808(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 3840(CX), Y9 + VMOVDQU 3872(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 3904(CX), Y9 + VMOVDQU 3936(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 3968(CX), Y9 + VMOVDQU 4000(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 4032(CX), Y9 + VMOVDQU 4064(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 8 to 8 outputs + VMOVDQU (DX), Y11 + ADDQ $0x20, DX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 4096(CX), Y9 + VMOVDQU 4128(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 4160(CX), Y9 + VMOVDQU 4192(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 4224(CX), Y9 + VMOVDQU 4256(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 4288(CX), Y9 + VMOVDQU 4320(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 4352(CX), Y9 + VMOVDQU 4384(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 4416(CX), Y9 + VMOVDQU 4448(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 4480(CX), Y9 + VMOVDQU 4512(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 4544(CX), Y9 + VMOVDQU 4576(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Store 8 outputs + MOVQ (R13), R15 + VMOVDQU Y0, (R15)(R14*1) + MOVQ 24(R13), R15 + VMOVDQU Y1, (R15)(R14*1) + MOVQ 48(R13), R15 + VMOVDQU Y2, (R15)(R14*1) + MOVQ 72(R13), R15 + VMOVDQU Y3, (R15)(R14*1) + MOVQ 96(R13), R15 + VMOVDQU Y4, (R15)(R14*1) + MOVQ 120(R13), R15 + VMOVDQU Y5, (R15)(R14*1) + MOVQ 144(R13), R15 + VMOVDQU Y6, (R15)(R14*1) + MOVQ 168(R13), R15 + VMOVDQU Y7, (R15)(R14*1) + + // Prepare for next loop + ADDQ $0x20, R14 + DECQ AX + JNZ mulAvxTwo_9x8Xor_loop + VZEROUPPER + +mulAvxTwo_9x8Xor_end: + RET + +// func mulAvxTwo_9x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x9(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 176 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_9x9_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ start+72(FP), R14 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X9 + VPBROADCASTB X9, Y9 + +mulAvxTwo_9x9_loop: + // Load and process 32 bytes from input 0 to 9 outputs + VMOVDQU (BX), Y12 + ADDQ $0x20, BX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU (CX), Y10 + VMOVDQU 32(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y0 + VMOVDQU 64(CX), Y10 + VMOVDQU 96(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y1 + VMOVDQU 128(CX), Y10 + VMOVDQU 160(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y2 + VMOVDQU 192(CX), Y10 + VMOVDQU 224(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y3 + VMOVDQU 256(CX), Y10 + VMOVDQU 288(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y4 + VMOVDQU 320(CX), Y10 + VMOVDQU 352(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y5 + VMOVDQU 384(CX), Y10 + VMOVDQU 416(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y6 + VMOVDQU 448(CX), Y10 + VMOVDQU 480(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y7 + VMOVDQU 512(CX), Y10 + VMOVDQU 544(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y8 + + // Load and process 32 bytes from input 1 to 9 outputs + VMOVDQU (SI), Y12 + ADDQ $0x20, SI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 576(CX), Y10 + VMOVDQU 608(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 640(CX), Y10 + VMOVDQU 672(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 704(CX), Y10 + VMOVDQU 736(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 768(CX), Y10 + VMOVDQU 800(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 832(CX), Y10 + VMOVDQU 864(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 896(CX), Y10 + VMOVDQU 928(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 960(CX), Y10 + VMOVDQU 992(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1024(CX), Y10 + VMOVDQU 1056(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1088(CX), Y10 + VMOVDQU 1120(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 2 to 9 outputs + VMOVDQU (DI), Y12 + ADDQ $0x20, DI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1152(CX), Y10 + VMOVDQU 1184(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1216(CX), Y10 + VMOVDQU 1248(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1280(CX), Y10 + VMOVDQU 1312(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1344(CX), Y10 + VMOVDQU 1376(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1408(CX), Y10 + VMOVDQU 1440(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 1472(CX), Y10 + VMOVDQU 1504(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 1536(CX), Y10 + VMOVDQU 1568(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1600(CX), Y10 + VMOVDQU 1632(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1664(CX), Y10 + VMOVDQU 1696(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 3 to 9 outputs + VMOVDQU (R8), Y12 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1728(CX), Y10 + VMOVDQU 1760(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1792(CX), Y10 + VMOVDQU 1824(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1856(CX), Y10 + VMOVDQU 1888(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1920(CX), Y10 + VMOVDQU 1952(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1984(CX), Y10 + VMOVDQU 2016(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2048(CX), Y10 + VMOVDQU 2080(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2112(CX), Y10 + VMOVDQU 2144(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2176(CX), Y10 + VMOVDQU 2208(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2240(CX), Y10 + VMOVDQU 2272(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 4 to 9 outputs + VMOVDQU (R9), Y12 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 2304(CX), Y10 + VMOVDQU 2336(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 2368(CX), Y10 + VMOVDQU 2400(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 2432(CX), Y10 + VMOVDQU 2464(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 2496(CX), Y10 + VMOVDQU 2528(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 2560(CX), Y10 + VMOVDQU 2592(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2624(CX), Y10 + VMOVDQU 2656(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2688(CX), Y10 + VMOVDQU 2720(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2752(CX), Y10 + VMOVDQU 2784(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2816(CX), Y10 + VMOVDQU 2848(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 5 to 9 outputs + VMOVDQU (R10), Y12 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 2880(CX), Y10 + VMOVDQU 2912(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 2944(CX), Y10 + VMOVDQU 2976(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 3008(CX), Y10 + VMOVDQU 3040(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 3072(CX), Y10 + VMOVDQU 3104(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 3136(CX), Y10 + VMOVDQU 3168(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 3200(CX), Y10 + VMOVDQU 3232(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 3264(CX), Y10 + VMOVDQU 3296(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 3328(CX), Y10 + VMOVDQU 3360(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 3392(CX), Y10 + VMOVDQU 3424(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 6 to 9 outputs + VMOVDQU (R11), Y12 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 3456(CX), Y10 + VMOVDQU 3488(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 3520(CX), Y10 + VMOVDQU 3552(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 3584(CX), Y10 + VMOVDQU 3616(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 3648(CX), Y10 + VMOVDQU 3680(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 3712(CX), Y10 + VMOVDQU 3744(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 3776(CX), Y10 + VMOVDQU 3808(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 3840(CX), Y10 + VMOVDQU 3872(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 3904(CX), Y10 + VMOVDQU 3936(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 3968(CX), Y10 + VMOVDQU 4000(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 7 to 9 outputs + VMOVDQU (R12), Y12 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 4032(CX), Y10 + VMOVDQU 4064(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 4096(CX), Y10 + VMOVDQU 4128(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 4160(CX), Y10 + VMOVDQU 4192(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 4224(CX), Y10 + VMOVDQU 4256(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 4288(CX), Y10 + VMOVDQU 4320(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 4352(CX), Y10 + VMOVDQU 4384(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 4416(CX), Y10 + VMOVDQU 4448(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 4480(CX), Y10 + VMOVDQU 4512(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 4544(CX), Y10 + VMOVDQU 4576(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 8 to 9 outputs + VMOVDQU (DX), Y12 + ADDQ $0x20, DX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 4608(CX), Y10 + VMOVDQU 4640(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 4672(CX), Y10 + VMOVDQU 4704(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 4736(CX), Y10 + VMOVDQU 4768(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 4800(CX), Y10 + VMOVDQU 4832(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 4864(CX), Y10 + VMOVDQU 4896(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 4928(CX), Y10 + VMOVDQU 4960(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 4992(CX), Y10 + VMOVDQU 5024(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 5056(CX), Y10 + VMOVDQU 5088(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 5120(CX), Y10 + VMOVDQU 5152(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Store 9 outputs + MOVQ (R13), R15 + VMOVDQU Y0, (R15)(R14*1) + MOVQ 24(R13), R15 + VMOVDQU Y1, (R15)(R14*1) + MOVQ 48(R13), R15 + VMOVDQU Y2, (R15)(R14*1) + MOVQ 72(R13), R15 + VMOVDQU Y3, (R15)(R14*1) + MOVQ 96(R13), R15 + VMOVDQU Y4, (R15)(R14*1) + MOVQ 120(R13), R15 + VMOVDQU Y5, (R15)(R14*1) + MOVQ 144(R13), R15 + VMOVDQU Y6, (R15)(R14*1) + MOVQ 168(R13), R15 + VMOVDQU Y7, (R15)(R14*1) + MOVQ 192(R13), R15 + VMOVDQU Y8, (R15)(R14*1) + + // Prepare for next loop + ADDQ $0x20, R14 + DECQ AX + JNZ mulAvxTwo_9x9_loop + VZEROUPPER + +mulAvxTwo_9x9_end: + RET + +// func mulAvxTwo_9x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x9Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 176 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_9x9Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ start+72(FP), R14 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X9 + VPBROADCASTB X9, Y9 + +mulAvxTwo_9x9Xor_loop: + // Load and process 32 bytes from input 0 to 9 outputs + VMOVDQU (BX), Y12 + ADDQ $0x20, BX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + MOVQ (R13), R15 + VMOVDQU (R15)(R14*1), Y0 + VMOVDQU (CX), Y10 + VMOVDQU 32(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + MOVQ 24(R13), R15 + VMOVDQU (R15)(R14*1), Y1 + VMOVDQU 64(CX), Y10 + VMOVDQU 96(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + MOVQ 48(R13), R15 + VMOVDQU (R15)(R14*1), Y2 + VMOVDQU 128(CX), Y10 + VMOVDQU 160(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + MOVQ 72(R13), R15 + VMOVDQU (R15)(R14*1), Y3 + VMOVDQU 192(CX), Y10 + VMOVDQU 224(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + MOVQ 96(R13), R15 + VMOVDQU (R15)(R14*1), Y4 + VMOVDQU 256(CX), Y10 + VMOVDQU 288(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + MOVQ 120(R13), R15 + VMOVDQU (R15)(R14*1), Y5 + VMOVDQU 320(CX), Y10 + VMOVDQU 352(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + MOVQ 144(R13), R15 + VMOVDQU (R15)(R14*1), Y6 + VMOVDQU 384(CX), Y10 + VMOVDQU 416(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + MOVQ 168(R13), R15 + VMOVDQU (R15)(R14*1), Y7 + VMOVDQU 448(CX), Y10 + VMOVDQU 480(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + MOVQ 192(R13), R15 + VMOVDQU (R15)(R14*1), Y8 + VMOVDQU 512(CX), Y10 + VMOVDQU 544(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 1 to 9 outputs + VMOVDQU (SI), Y12 + ADDQ $0x20, SI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 576(CX), Y10 + VMOVDQU 608(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 640(CX), Y10 + VMOVDQU 672(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 704(CX), Y10 + VMOVDQU 736(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 768(CX), Y10 + VMOVDQU 800(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 832(CX), Y10 + VMOVDQU 864(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 896(CX), Y10 + VMOVDQU 928(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 960(CX), Y10 + VMOVDQU 992(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1024(CX), Y10 + VMOVDQU 1056(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1088(CX), Y10 + VMOVDQU 1120(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 2 to 9 outputs + VMOVDQU (DI), Y12 + ADDQ $0x20, DI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1152(CX), Y10 + VMOVDQU 1184(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1216(CX), Y10 + VMOVDQU 1248(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1280(CX), Y10 + VMOVDQU 1312(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1344(CX), Y10 + VMOVDQU 1376(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1408(CX), Y10 + VMOVDQU 1440(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 1472(CX), Y10 + VMOVDQU 1504(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 1536(CX), Y10 + VMOVDQU 1568(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1600(CX), Y10 + VMOVDQU 1632(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1664(CX), Y10 + VMOVDQU 1696(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 3 to 9 outputs + VMOVDQU (R8), Y12 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1728(CX), Y10 + VMOVDQU 1760(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1792(CX), Y10 + VMOVDQU 1824(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1856(CX), Y10 + VMOVDQU 1888(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1920(CX), Y10 + VMOVDQU 1952(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1984(CX), Y10 + VMOVDQU 2016(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2048(CX), Y10 + VMOVDQU 2080(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2112(CX), Y10 + VMOVDQU 2144(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2176(CX), Y10 + VMOVDQU 2208(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2240(CX), Y10 + VMOVDQU 2272(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 4 to 9 outputs + VMOVDQU (R9), Y12 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 2304(CX), Y10 + VMOVDQU 2336(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 2368(CX), Y10 + VMOVDQU 2400(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 2432(CX), Y10 + VMOVDQU 2464(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 2496(CX), Y10 + VMOVDQU 2528(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 2560(CX), Y10 + VMOVDQU 2592(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2624(CX), Y10 + VMOVDQU 2656(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2688(CX), Y10 + VMOVDQU 2720(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2752(CX), Y10 + VMOVDQU 2784(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2816(CX), Y10 + VMOVDQU 2848(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 5 to 9 outputs + VMOVDQU (R10), Y12 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 2880(CX), Y10 + VMOVDQU 2912(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 2944(CX), Y10 + VMOVDQU 2976(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 3008(CX), Y10 + VMOVDQU 3040(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 3072(CX), Y10 + VMOVDQU 3104(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 3136(CX), Y10 + VMOVDQU 3168(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 3200(CX), Y10 + VMOVDQU 3232(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 3264(CX), Y10 + VMOVDQU 3296(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 3328(CX), Y10 + VMOVDQU 3360(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 3392(CX), Y10 + VMOVDQU 3424(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 6 to 9 outputs + VMOVDQU (R11), Y12 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 3456(CX), Y10 + VMOVDQU 3488(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 3520(CX), Y10 + VMOVDQU 3552(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 3584(CX), Y10 + VMOVDQU 3616(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 3648(CX), Y10 + VMOVDQU 3680(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 3712(CX), Y10 + VMOVDQU 3744(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 3776(CX), Y10 + VMOVDQU 3808(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 3840(CX), Y10 + VMOVDQU 3872(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 3904(CX), Y10 + VMOVDQU 3936(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 3968(CX), Y10 + VMOVDQU 4000(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 7 to 9 outputs + VMOVDQU (R12), Y12 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 4032(CX), Y10 + VMOVDQU 4064(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 4096(CX), Y10 + VMOVDQU 4128(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 4160(CX), Y10 + VMOVDQU 4192(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 4224(CX), Y10 + VMOVDQU 4256(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 4288(CX), Y10 + VMOVDQU 4320(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 4352(CX), Y10 + VMOVDQU 4384(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 4416(CX), Y10 + VMOVDQU 4448(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 4480(CX), Y10 + VMOVDQU 4512(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 4544(CX), Y10 + VMOVDQU 4576(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 8 to 9 outputs + VMOVDQU (DX), Y12 + ADDQ $0x20, DX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 4608(CX), Y10 + VMOVDQU 4640(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 4672(CX), Y10 + VMOVDQU 4704(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 4736(CX), Y10 + VMOVDQU 4768(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 4800(CX), Y10 + VMOVDQU 4832(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 4864(CX), Y10 + VMOVDQU 4896(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 4928(CX), Y10 + VMOVDQU 4960(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 4992(CX), Y10 + VMOVDQU 5024(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 5056(CX), Y10 + VMOVDQU 5088(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 5120(CX), Y10 + VMOVDQU 5152(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Store 9 outputs + MOVQ (R13), R15 + VMOVDQU Y0, (R15)(R14*1) + MOVQ 24(R13), R15 + VMOVDQU Y1, (R15)(R14*1) + MOVQ 48(R13), R15 + VMOVDQU Y2, (R15)(R14*1) + MOVQ 72(R13), R15 + VMOVDQU Y3, (R15)(R14*1) + MOVQ 96(R13), R15 + VMOVDQU Y4, (R15)(R14*1) + MOVQ 120(R13), R15 + VMOVDQU Y5, (R15)(R14*1) + MOVQ 144(R13), R15 + VMOVDQU Y6, (R15)(R14*1) + MOVQ 168(R13), R15 + VMOVDQU Y7, (R15)(R14*1) + MOVQ 192(R13), R15 + VMOVDQU Y8, (R15)(R14*1) + + // Prepare for next loop + ADDQ $0x20, R14 + DECQ AX + JNZ mulAvxTwo_9x9Xor_loop + VZEROUPPER + +mulAvxTwo_9x9Xor_end: + RET + +// func mulAvxTwo_9x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x10(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 195 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_9x10_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ start+72(FP), R14 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X10 + VPBROADCASTB X10, Y10 + +mulAvxTwo_9x10_loop: + // Load and process 32 bytes from input 0 to 10 outputs + VMOVDQU (BX), Y13 + ADDQ $0x20, BX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU (CX), Y11 + VMOVDQU 32(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y0 + VMOVDQU 64(CX), Y11 + VMOVDQU 96(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y1 + VMOVDQU 128(CX), Y11 + VMOVDQU 160(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y2 + VMOVDQU 192(CX), Y11 + VMOVDQU 224(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y3 + VMOVDQU 256(CX), Y11 + VMOVDQU 288(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y4 + VMOVDQU 320(CX), Y11 + VMOVDQU 352(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y5 + VMOVDQU 384(CX), Y11 + VMOVDQU 416(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y6 + VMOVDQU 448(CX), Y11 + VMOVDQU 480(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y7 + VMOVDQU 512(CX), Y11 + VMOVDQU 544(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y8 + VMOVDQU 576(CX), Y11 + VMOVDQU 608(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y9 + + // Load and process 32 bytes from input 1 to 10 outputs + VMOVDQU (SI), Y13 + ADDQ $0x20, SI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 640(CX), Y11 + VMOVDQU 672(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 704(CX), Y11 + VMOVDQU 736(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 768(CX), Y11 + VMOVDQU 800(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 832(CX), Y11 + VMOVDQU 864(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 896(CX), Y11 + VMOVDQU 928(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 960(CX), Y11 + VMOVDQU 992(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1024(CX), Y11 + VMOVDQU 1056(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1088(CX), Y11 + VMOVDQU 1120(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1152(CX), Y11 + VMOVDQU 1184(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1216(CX), Y11 + VMOVDQU 1248(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 2 to 10 outputs + VMOVDQU (DI), Y13 + ADDQ $0x20, DI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1280(CX), Y11 + VMOVDQU 1312(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1344(CX), Y11 + VMOVDQU 1376(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 1408(CX), Y11 + VMOVDQU 1440(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 1472(CX), Y11 + VMOVDQU 1504(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 1536(CX), Y11 + VMOVDQU 1568(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 1600(CX), Y11 + VMOVDQU 1632(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1664(CX), Y11 + VMOVDQU 1696(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1728(CX), Y11 + VMOVDQU 1760(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1792(CX), Y11 + VMOVDQU 1824(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1856(CX), Y11 + VMOVDQU 1888(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 3 to 10 outputs + VMOVDQU (R8), Y13 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1920(CX), Y11 + VMOVDQU 1952(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1984(CX), Y11 + VMOVDQU 2016(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2048(CX), Y11 + VMOVDQU 2080(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2112(CX), Y11 + VMOVDQU 2144(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2176(CX), Y11 + VMOVDQU 2208(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2240(CX), Y11 + VMOVDQU 2272(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2304(CX), Y11 + VMOVDQU 2336(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 2368(CX), Y11 + VMOVDQU 2400(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 2432(CX), Y11 + VMOVDQU 2464(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 2496(CX), Y11 + VMOVDQU 2528(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 4 to 10 outputs + VMOVDQU (R9), Y13 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 2560(CX), Y11 + VMOVDQU 2592(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 2624(CX), Y11 + VMOVDQU 2656(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2688(CX), Y11 + VMOVDQU 2720(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2752(CX), Y11 + VMOVDQU 2784(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2816(CX), Y11 + VMOVDQU 2848(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2880(CX), Y11 + VMOVDQU 2912(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2944(CX), Y11 + VMOVDQU 2976(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 3008(CX), Y11 + VMOVDQU 3040(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 3072(CX), Y11 + VMOVDQU 3104(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 3136(CX), Y11 + VMOVDQU 3168(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 5 to 10 outputs + VMOVDQU (R10), Y13 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 3200(CX), Y11 + VMOVDQU 3232(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 3264(CX), Y11 + VMOVDQU 3296(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 3328(CX), Y11 + VMOVDQU 3360(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 3392(CX), Y11 + VMOVDQU 3424(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 3456(CX), Y11 + VMOVDQU 3488(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 3520(CX), Y11 + VMOVDQU 3552(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 3584(CX), Y11 + VMOVDQU 3616(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 3648(CX), Y11 + VMOVDQU 3680(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 3712(CX), Y11 + VMOVDQU 3744(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 3776(CX), Y11 + VMOVDQU 3808(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 6 to 10 outputs + VMOVDQU (R11), Y13 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 3840(CX), Y11 + VMOVDQU 3872(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 3904(CX), Y11 + VMOVDQU 3936(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 3968(CX), Y11 + VMOVDQU 4000(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 4032(CX), Y11 + VMOVDQU 4064(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 4096(CX), Y11 + VMOVDQU 4128(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 4160(CX), Y11 + VMOVDQU 4192(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 4224(CX), Y11 + VMOVDQU 4256(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 4288(CX), Y11 + VMOVDQU 4320(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 4352(CX), Y11 + VMOVDQU 4384(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 4416(CX), Y11 + VMOVDQU 4448(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 7 to 10 outputs + VMOVDQU (R12), Y13 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 4480(CX), Y11 + VMOVDQU 4512(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 4544(CX), Y11 + VMOVDQU 4576(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 4608(CX), Y11 + VMOVDQU 4640(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 4672(CX), Y11 + VMOVDQU 4704(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 4736(CX), Y11 + VMOVDQU 4768(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 4800(CX), Y11 + VMOVDQU 4832(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 4864(CX), Y11 + VMOVDQU 4896(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 4928(CX), Y11 + VMOVDQU 4960(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 4992(CX), Y11 + VMOVDQU 5024(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 5056(CX), Y11 + VMOVDQU 5088(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 8 to 10 outputs + VMOVDQU (DX), Y13 + ADDQ $0x20, DX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 5120(CX), Y11 + VMOVDQU 5152(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 5184(CX), Y11 + VMOVDQU 5216(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 5248(CX), Y11 + VMOVDQU 5280(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 5312(CX), Y11 + VMOVDQU 5344(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 5376(CX), Y11 + VMOVDQU 5408(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 5440(CX), Y11 + VMOVDQU 5472(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 5504(CX), Y11 + VMOVDQU 5536(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 5568(CX), Y11 + VMOVDQU 5600(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 5632(CX), Y11 + VMOVDQU 5664(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 5696(CX), Y11 + VMOVDQU 5728(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Store 10 outputs + MOVQ (R13), R15 + VMOVDQU Y0, (R15)(R14*1) + MOVQ 24(R13), R15 + VMOVDQU Y1, (R15)(R14*1) + MOVQ 48(R13), R15 + VMOVDQU Y2, (R15)(R14*1) + MOVQ 72(R13), R15 + VMOVDQU Y3, (R15)(R14*1) + MOVQ 96(R13), R15 + VMOVDQU Y4, (R15)(R14*1) + MOVQ 120(R13), R15 + VMOVDQU Y5, (R15)(R14*1) + MOVQ 144(R13), R15 + VMOVDQU Y6, (R15)(R14*1) + MOVQ 168(R13), R15 + VMOVDQU Y7, (R15)(R14*1) + MOVQ 192(R13), R15 + VMOVDQU Y8, (R15)(R14*1) + MOVQ 216(R13), R15 + VMOVDQU Y9, (R15)(R14*1) + + // Prepare for next loop + ADDQ $0x20, R14 + DECQ AX + JNZ mulAvxTwo_9x10_loop + VZEROUPPER + +mulAvxTwo_9x10_end: + RET + +// func mulAvxTwo_9x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_9x10Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 195 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_9x10Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), DX + MOVQ out_base+48(FP), R13 + MOVQ start+72(FP), R14 + + // Add start offset to input + ADDQ R14, BX + ADDQ R14, SI + ADDQ R14, DI + ADDQ R14, R8 + ADDQ R14, R9 + ADDQ R14, R10 + ADDQ R14, R11 + ADDQ R14, R12 + ADDQ R14, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X10 + VPBROADCASTB X10, Y10 + +mulAvxTwo_9x10Xor_loop: + // Load and process 32 bytes from input 0 to 10 outputs + VMOVDQU (BX), Y13 + ADDQ $0x20, BX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + MOVQ (R13), R15 + VMOVDQU (R15)(R14*1), Y0 + VMOVDQU (CX), Y11 + VMOVDQU 32(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + MOVQ 24(R13), R15 + VMOVDQU (R15)(R14*1), Y1 + VMOVDQU 64(CX), Y11 + VMOVDQU 96(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + MOVQ 48(R13), R15 + VMOVDQU (R15)(R14*1), Y2 + VMOVDQU 128(CX), Y11 + VMOVDQU 160(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + MOVQ 72(R13), R15 + VMOVDQU (R15)(R14*1), Y3 + VMOVDQU 192(CX), Y11 + VMOVDQU 224(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + MOVQ 96(R13), R15 + VMOVDQU (R15)(R14*1), Y4 + VMOVDQU 256(CX), Y11 + VMOVDQU 288(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + MOVQ 120(R13), R15 + VMOVDQU (R15)(R14*1), Y5 + VMOVDQU 320(CX), Y11 + VMOVDQU 352(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + MOVQ 144(R13), R15 + VMOVDQU (R15)(R14*1), Y6 + VMOVDQU 384(CX), Y11 + VMOVDQU 416(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + MOVQ 168(R13), R15 + VMOVDQU (R15)(R14*1), Y7 + VMOVDQU 448(CX), Y11 + VMOVDQU 480(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + MOVQ 192(R13), R15 + VMOVDQU (R15)(R14*1), Y8 + VMOVDQU 512(CX), Y11 + VMOVDQU 544(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + MOVQ 216(R13), R15 + VMOVDQU (R15)(R14*1), Y9 + VMOVDQU 576(CX), Y11 + VMOVDQU 608(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 1 to 10 outputs + VMOVDQU (SI), Y13 + ADDQ $0x20, SI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 640(CX), Y11 + VMOVDQU 672(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 704(CX), Y11 + VMOVDQU 736(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 768(CX), Y11 + VMOVDQU 800(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 832(CX), Y11 + VMOVDQU 864(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 896(CX), Y11 + VMOVDQU 928(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 960(CX), Y11 + VMOVDQU 992(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1024(CX), Y11 + VMOVDQU 1056(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1088(CX), Y11 + VMOVDQU 1120(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1152(CX), Y11 + VMOVDQU 1184(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1216(CX), Y11 + VMOVDQU 1248(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 2 to 10 outputs + VMOVDQU (DI), Y13 + ADDQ $0x20, DI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1280(CX), Y11 + VMOVDQU 1312(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1344(CX), Y11 + VMOVDQU 1376(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 1408(CX), Y11 + VMOVDQU 1440(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 1472(CX), Y11 + VMOVDQU 1504(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 1536(CX), Y11 + VMOVDQU 1568(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 1600(CX), Y11 + VMOVDQU 1632(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1664(CX), Y11 + VMOVDQU 1696(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1728(CX), Y11 + VMOVDQU 1760(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1792(CX), Y11 + VMOVDQU 1824(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1856(CX), Y11 + VMOVDQU 1888(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 3 to 10 outputs + VMOVDQU (R8), Y13 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1920(CX), Y11 + VMOVDQU 1952(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1984(CX), Y11 + VMOVDQU 2016(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2048(CX), Y11 + VMOVDQU 2080(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2112(CX), Y11 + VMOVDQU 2144(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2176(CX), Y11 + VMOVDQU 2208(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2240(CX), Y11 + VMOVDQU 2272(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2304(CX), Y11 + VMOVDQU 2336(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 2368(CX), Y11 + VMOVDQU 2400(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 2432(CX), Y11 + VMOVDQU 2464(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 2496(CX), Y11 + VMOVDQU 2528(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 4 to 10 outputs + VMOVDQU (R9), Y13 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 2560(CX), Y11 + VMOVDQU 2592(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 2624(CX), Y11 + VMOVDQU 2656(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2688(CX), Y11 + VMOVDQU 2720(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2752(CX), Y11 + VMOVDQU 2784(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2816(CX), Y11 + VMOVDQU 2848(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2880(CX), Y11 + VMOVDQU 2912(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2944(CX), Y11 + VMOVDQU 2976(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 3008(CX), Y11 + VMOVDQU 3040(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 3072(CX), Y11 + VMOVDQU 3104(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 3136(CX), Y11 + VMOVDQU 3168(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 5 to 10 outputs + VMOVDQU (R10), Y13 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 3200(CX), Y11 + VMOVDQU 3232(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 3264(CX), Y11 + VMOVDQU 3296(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 3328(CX), Y11 + VMOVDQU 3360(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 3392(CX), Y11 + VMOVDQU 3424(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 3456(CX), Y11 + VMOVDQU 3488(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 3520(CX), Y11 + VMOVDQU 3552(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 3584(CX), Y11 + VMOVDQU 3616(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 3648(CX), Y11 + VMOVDQU 3680(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 3712(CX), Y11 + VMOVDQU 3744(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 3776(CX), Y11 + VMOVDQU 3808(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 6 to 10 outputs + VMOVDQU (R11), Y13 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 3840(CX), Y11 + VMOVDQU 3872(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 3904(CX), Y11 + VMOVDQU 3936(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 3968(CX), Y11 + VMOVDQU 4000(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 4032(CX), Y11 + VMOVDQU 4064(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 4096(CX), Y11 + VMOVDQU 4128(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 4160(CX), Y11 + VMOVDQU 4192(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 4224(CX), Y11 + VMOVDQU 4256(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 4288(CX), Y11 + VMOVDQU 4320(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 4352(CX), Y11 + VMOVDQU 4384(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 4416(CX), Y11 + VMOVDQU 4448(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 7 to 10 outputs + VMOVDQU (R12), Y13 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 4480(CX), Y11 + VMOVDQU 4512(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 4544(CX), Y11 + VMOVDQU 4576(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 4608(CX), Y11 + VMOVDQU 4640(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 4672(CX), Y11 + VMOVDQU 4704(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 4736(CX), Y11 + VMOVDQU 4768(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 4800(CX), Y11 + VMOVDQU 4832(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 4864(CX), Y11 + VMOVDQU 4896(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 4928(CX), Y11 + VMOVDQU 4960(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 4992(CX), Y11 + VMOVDQU 5024(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 5056(CX), Y11 + VMOVDQU 5088(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 8 to 10 outputs + VMOVDQU (DX), Y13 + ADDQ $0x20, DX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 5120(CX), Y11 + VMOVDQU 5152(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 5184(CX), Y11 + VMOVDQU 5216(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 5248(CX), Y11 + VMOVDQU 5280(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 5312(CX), Y11 + VMOVDQU 5344(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 5376(CX), Y11 + VMOVDQU 5408(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 5440(CX), Y11 + VMOVDQU 5472(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 5504(CX), Y11 + VMOVDQU 5536(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 5568(CX), Y11 + VMOVDQU 5600(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 5632(CX), Y11 + VMOVDQU 5664(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 5696(CX), Y11 + VMOVDQU 5728(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Store 10 outputs + MOVQ (R13), R15 + VMOVDQU Y0, (R15)(R14*1) + MOVQ 24(R13), R15 + VMOVDQU Y1, (R15)(R14*1) + MOVQ 48(R13), R15 + VMOVDQU Y2, (R15)(R14*1) + MOVQ 72(R13), R15 + VMOVDQU Y3, (R15)(R14*1) + MOVQ 96(R13), R15 + VMOVDQU Y4, (R15)(R14*1) + MOVQ 120(R13), R15 + VMOVDQU Y5, (R15)(R14*1) + MOVQ 144(R13), R15 + VMOVDQU Y6, (R15)(R14*1) + MOVQ 168(R13), R15 + VMOVDQU Y7, (R15)(R14*1) + MOVQ 192(R13), R15 + VMOVDQU Y8, (R15)(R14*1) + MOVQ 216(R13), R15 + VMOVDQU Y9, (R15)(R14*1) + + // Prepare for next loop + ADDQ $0x20, R14 + DECQ AX + JNZ mulAvxTwo_9x10Xor_loop + VZEROUPPER + +mulAvxTwo_9x10Xor_end: + RET + +// func mulAvxTwo_10x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x1(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 24 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_10x1_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), R13 + MOVQ 216(DX), DX + MOVQ out_base+48(FP), R14 + MOVQ (R14), R14 + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, R14 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X1 + VPBROADCASTB X1, Y1 + +mulAvxTwo_10x1_loop: + // Load and process 32 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y4 + ADDQ $0x20, BX + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU (CX), Y2 + VMOVDQU 32(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y0 + + // Load and process 32 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y4 + ADDQ $0x20, SI + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 2 to 1 outputs + VMOVDQU (DI), Y4 + ADDQ $0x20, DI + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 128(CX), Y2 + VMOVDQU 160(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 3 to 1 outputs + VMOVDQU (R8), Y4 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 192(CX), Y2 + VMOVDQU 224(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 4 to 1 outputs + VMOVDQU (R9), Y4 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 256(CX), Y2 + VMOVDQU 288(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 5 to 1 outputs + VMOVDQU (R10), Y4 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 320(CX), Y2 + VMOVDQU 352(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 6 to 1 outputs + VMOVDQU (R11), Y4 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 384(CX), Y2 + VMOVDQU 416(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 7 to 1 outputs + VMOVDQU (R12), Y4 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 448(CX), Y2 + VMOVDQU 480(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 8 to 1 outputs + VMOVDQU (R13), Y4 + ADDQ $0x20, R13 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 512(CX), Y2 + VMOVDQU 544(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 9 to 1 outputs + VMOVDQU (DX), Y4 + ADDQ $0x20, DX + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 576(CX), Y2 + VMOVDQU 608(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Store 1 outputs + VMOVDQU Y0, (R14) + ADDQ $0x20, R14 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_10x1_loop + VZEROUPPER + +mulAvxTwo_10x1_end: + RET + +// func mulAvxTwo_10x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x1_64(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 46 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_10x1_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), R13 + MOVQ 216(DX), DX + MOVQ out_base+48(FP), R14 + MOVQ out_base+48(FP), R14 + MOVQ (R14), R14 + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, R14 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_10x1_64_loop: + // Load and process 64 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y6 + VMOVDQU 32(BX), Y5 + ADDQ $0x40, BX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y0 + VPXOR Y5, Y6, Y1 + + // Load and process 64 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y6 + VMOVDQU 32(SI), Y5 + ADDQ $0x40, SI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 2 to 1 outputs + VMOVDQU (DI), Y6 + VMOVDQU 32(DI), Y5 + ADDQ $0x40, DI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 3 to 1 outputs + VMOVDQU (R8), Y6 + VMOVDQU 32(R8), Y5 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 4 to 1 outputs + VMOVDQU (R9), Y6 + VMOVDQU 32(R9), Y5 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 5 to 1 outputs + VMOVDQU (R10), Y6 + VMOVDQU 32(R10), Y5 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 6 to 1 outputs + VMOVDQU (R11), Y6 + VMOVDQU 32(R11), Y5 + ADDQ $0x40, R11 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 384(CX), Y3 + VMOVDQU 416(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 7 to 1 outputs + VMOVDQU (R12), Y6 + VMOVDQU 32(R12), Y5 + ADDQ $0x40, R12 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 448(CX), Y3 + VMOVDQU 480(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 8 to 1 outputs + VMOVDQU (R13), Y6 + VMOVDQU 32(R13), Y5 + ADDQ $0x40, R13 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 512(CX), Y3 + VMOVDQU 544(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 9 to 1 outputs + VMOVDQU (DX), Y6 + VMOVDQU 32(DX), Y5 + ADDQ $0x40, DX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 576(CX), Y3 + VMOVDQU 608(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Store 1 outputs + VMOVDQU Y0, (R14) + VMOVDQU Y1, 32(R14) + ADDQ $0x40, R14 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_10x1_64_loop + VZEROUPPER + +mulAvxTwo_10x1_64_end: + RET + +// func mulAvxTwo_10x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x1Xor(SB), NOSPLIT, $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 24 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_10x1Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), R13 + MOVQ 216(DX), DX + MOVQ out_base+48(FP), R14 + MOVQ (R14), R14 + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, R14 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X1 + VPBROADCASTB X1, Y1 + +mulAvxTwo_10x1Xor_loop: + // Load and process 32 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y4 + ADDQ $0x20, BX + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU (R14), Y0 + VMOVDQU (CX), Y2 + VMOVDQU 32(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y4 + ADDQ $0x20, SI + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 64(CX), Y2 + VMOVDQU 96(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 2 to 1 outputs + VMOVDQU (DI), Y4 + ADDQ $0x20, DI + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 128(CX), Y2 + VMOVDQU 160(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 3 to 1 outputs + VMOVDQU (R8), Y4 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 192(CX), Y2 + VMOVDQU 224(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 4 to 1 outputs + VMOVDQU (R9), Y4 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 256(CX), Y2 + VMOVDQU 288(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 5 to 1 outputs + VMOVDQU (R10), Y4 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 320(CX), Y2 + VMOVDQU 352(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 6 to 1 outputs + VMOVDQU (R11), Y4 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 384(CX), Y2 + VMOVDQU 416(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 7 to 1 outputs + VMOVDQU (R12), Y4 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 448(CX), Y2 + VMOVDQU 480(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 8 to 1 outputs + VMOVDQU (R13), Y4 + ADDQ $0x20, R13 + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 512(CX), Y2 + VMOVDQU 544(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Load and process 32 bytes from input 9 to 1 outputs + VMOVDQU (DX), Y4 + ADDQ $0x20, DX + VPSRLQ $0x04, Y4, Y5 + VPAND Y1, Y4, Y4 + VPAND Y1, Y5, Y5 + VMOVDQU 576(CX), Y2 + VMOVDQU 608(CX), Y3 + VPSHUFB Y4, Y2, Y2 + VPSHUFB Y5, Y3, Y3 + VPXOR Y2, Y3, Y2 + VPXOR Y2, Y0, Y0 + + // Store 1 outputs + VMOVDQU Y0, (R14) + ADDQ $0x20, R14 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_10x1Xor_loop + VZEROUPPER + +mulAvxTwo_10x1Xor_end: + RET + +// func mulAvxTwo_10x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x1_64Xor(SB), $0-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 46 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_10x1_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), R13 + MOVQ 216(DX), DX + MOVQ out_base+48(FP), R14 + MOVQ out_base+48(FP), R14 + MOVQ (R14), R14 + MOVQ start+72(FP), R15 + + // Add start offset to output + ADDQ R15, R14 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, DX + MOVQ $0x0000000f, R15 + MOVQ R15, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_10x1_64Xor_loop: + // Load 1 outputs + VMOVDQU (R14), Y0 + VMOVDQU 32(R14), Y1 + + // Load and process 64 bytes from input 0 to 1 outputs + VMOVDQU (BX), Y6 + VMOVDQU 32(BX), Y5 + ADDQ $0x40, BX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 1 to 1 outputs + VMOVDQU (SI), Y6 + VMOVDQU 32(SI), Y5 + ADDQ $0x40, SI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 2 to 1 outputs + VMOVDQU (DI), Y6 + VMOVDQU 32(DI), Y5 + ADDQ $0x40, DI + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 3 to 1 outputs + VMOVDQU (R8), Y6 + VMOVDQU 32(R8), Y5 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 4 to 1 outputs + VMOVDQU (R9), Y6 + VMOVDQU 32(R9), Y5 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 5 to 1 outputs + VMOVDQU (R10), Y6 + VMOVDQU 32(R10), Y5 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 6 to 1 outputs + VMOVDQU (R11), Y6 + VMOVDQU 32(R11), Y5 + ADDQ $0x40, R11 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 384(CX), Y3 + VMOVDQU 416(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 7 to 1 outputs + VMOVDQU (R12), Y6 + VMOVDQU 32(R12), Y5 + ADDQ $0x40, R12 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 448(CX), Y3 + VMOVDQU 480(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 8 to 1 outputs + VMOVDQU (R13), Y6 + VMOVDQU 32(R13), Y5 + ADDQ $0x40, R13 + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 512(CX), Y3 + VMOVDQU 544(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Load and process 64 bytes from input 9 to 1 outputs + VMOVDQU (DX), Y6 + VMOVDQU 32(DX), Y5 + ADDQ $0x40, DX + VPSRLQ $0x04, Y6, Y7 + VPSRLQ $0x04, Y5, Y8 + VPAND Y2, Y6, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y7, Y7 + VPAND Y2, Y8, Y8 + VMOVDQU 576(CX), Y3 + VMOVDQU 608(CX), Y4 + VPSHUFB Y5, Y3, Y5 + VPSHUFB Y6, Y3, Y3 + VPSHUFB Y8, Y4, Y6 + VPSHUFB Y7, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y5, Y6, Y5 + VPXOR Y3, Y0, Y0 + VPXOR Y5, Y1, Y1 + + // Store 1 outputs + VMOVDQU Y0, (R14) + VMOVDQU Y1, 32(R14) + ADDQ $0x40, R14 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_10x1_64Xor_loop + VZEROUPPER + +mulAvxTwo_10x1_64Xor_end: + RET + +// func mulAvxTwo_10x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x2(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 47 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_10x2_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), R13 + MOVQ 216(DX), DX + MOVQ out_base+48(FP), R14 + MOVQ (R14), R15 + MOVQ 24(R14), R14 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R15 + ADDQ BP, R14 + + // Add start offset to input + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, DX + MOVQ $0x0000000f, BP + MOVQ BP, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_10x2_loop: + // Load and process 32 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y5 + ADDQ $0x20, BX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y0 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y1 + + // Load and process 32 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y5 + ADDQ $0x20, SI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y5 + ADDQ $0x20, DI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y5 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 384(CX), Y3 + VMOVDQU 416(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 448(CX), Y3 + VMOVDQU 480(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 4 to 2 outputs + VMOVDQU (R9), Y5 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 512(CX), Y3 + VMOVDQU 544(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 576(CX), Y3 + VMOVDQU 608(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 5 to 2 outputs + VMOVDQU (R10), Y5 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 640(CX), Y3 + VMOVDQU 672(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 704(CX), Y3 + VMOVDQU 736(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 6 to 2 outputs + VMOVDQU (R11), Y5 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 768(CX), Y3 + VMOVDQU 800(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 832(CX), Y3 + VMOVDQU 864(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 7 to 2 outputs + VMOVDQU (R12), Y5 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 896(CX), Y3 + VMOVDQU 928(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 960(CX), Y3 + VMOVDQU 992(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 8 to 2 outputs + VMOVDQU (R13), Y5 + ADDQ $0x20, R13 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 1024(CX), Y3 + VMOVDQU 1056(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 1088(CX), Y3 + VMOVDQU 1120(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 9 to 2 outputs + VMOVDQU (DX), Y5 + ADDQ $0x20, DX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 1152(CX), Y3 + VMOVDQU 1184(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 1216(CX), Y3 + VMOVDQU 1248(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Store 2 outputs + VMOVDQU Y0, (R15) + ADDQ $0x20, R15 + VMOVDQU Y1, (R14) + ADDQ $0x20, R14 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_10x2_loop + VZEROUPPER + +mulAvxTwo_10x2_end: + RET + +// func mulAvxTwo_10x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x2_64(SB), $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 89 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_10x2_64_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), R13 + MOVQ 216(DX), DX + MOVQ out_base+48(FP), R14 + MOVQ out_base+48(FP), R14 + MOVQ (R14), R15 + MOVQ 24(R14), R14 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R15 + ADDQ BP, R14 + + // Add start offset to input + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, DX + MOVQ $0x0000000f, BP + MOVQ BP, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_10x2_64_loop: + // Load and process 64 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y9 + VMOVDQU 32(BX), Y11 + ADDQ $0x40, BX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y0 + VPXOR Y7, Y8, Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y2 + VPXOR Y7, Y8, Y3 + + // Load and process 64 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y9 + VMOVDQU 32(SI), Y11 + ADDQ $0x40, SI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y9 + VMOVDQU 32(DI), Y11 + ADDQ $0x40, DI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y9 + VMOVDQU 32(R8), Y11 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 4 to 2 outputs + VMOVDQU (R9), Y9 + VMOVDQU 32(R9), Y11 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 5 to 2 outputs + VMOVDQU (R10), Y9 + VMOVDQU 32(R10), Y11 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 6 to 2 outputs + VMOVDQU (R11), Y9 + VMOVDQU 32(R11), Y11 + ADDQ $0x40, R11 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 768(CX), Y5 + VMOVDQU 800(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 832(CX), Y5 + VMOVDQU 864(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 7 to 2 outputs + VMOVDQU (R12), Y9 + VMOVDQU 32(R12), Y11 + ADDQ $0x40, R12 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 896(CX), Y5 + VMOVDQU 928(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 960(CX), Y5 + VMOVDQU 992(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 8 to 2 outputs + VMOVDQU (R13), Y9 + VMOVDQU 32(R13), Y11 + ADDQ $0x40, R13 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 1024(CX), Y5 + VMOVDQU 1056(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 1088(CX), Y5 + VMOVDQU 1120(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 9 to 2 outputs + VMOVDQU (DX), Y9 + VMOVDQU 32(DX), Y11 + ADDQ $0x40, DX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 1152(CX), Y5 + VMOVDQU 1184(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 1216(CX), Y5 + VMOVDQU 1248(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Store 2 outputs + VMOVDQU Y0, (R15) + VMOVDQU Y1, 32(R15) + ADDQ $0x40, R15 + VMOVDQU Y2, (R14) + VMOVDQU Y3, 32(R14) + ADDQ $0x40, R14 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_10x2_64_loop + VZEROUPPER + +mulAvxTwo_10x2_64_end: + RET + +// func mulAvxTwo_10x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x2Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 47 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_10x2Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), R13 + MOVQ 216(DX), DX + MOVQ out_base+48(FP), R14 + MOVQ (R14), R15 + MOVQ 24(R14), R14 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R15 + ADDQ BP, R14 + + // Add start offset to input + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, DX + MOVQ $0x0000000f, BP + MOVQ BP, X2 + VPBROADCASTB X2, Y2 + +mulAvxTwo_10x2Xor_loop: + // Load and process 32 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y5 + ADDQ $0x20, BX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU (R15), Y0 + VMOVDQU (CX), Y3 + VMOVDQU 32(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU (R14), Y1 + VMOVDQU 64(CX), Y3 + VMOVDQU 96(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y5 + ADDQ $0x20, SI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 128(CX), Y3 + VMOVDQU 160(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 192(CX), Y3 + VMOVDQU 224(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y5 + ADDQ $0x20, DI + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 256(CX), Y3 + VMOVDQU 288(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 320(CX), Y3 + VMOVDQU 352(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y5 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 384(CX), Y3 + VMOVDQU 416(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 448(CX), Y3 + VMOVDQU 480(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 4 to 2 outputs + VMOVDQU (R9), Y5 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 512(CX), Y3 + VMOVDQU 544(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 576(CX), Y3 + VMOVDQU 608(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 5 to 2 outputs + VMOVDQU (R10), Y5 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 640(CX), Y3 + VMOVDQU 672(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 704(CX), Y3 + VMOVDQU 736(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 6 to 2 outputs + VMOVDQU (R11), Y5 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 768(CX), Y3 + VMOVDQU 800(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 832(CX), Y3 + VMOVDQU 864(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 7 to 2 outputs + VMOVDQU (R12), Y5 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 896(CX), Y3 + VMOVDQU 928(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 960(CX), Y3 + VMOVDQU 992(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 8 to 2 outputs + VMOVDQU (R13), Y5 + ADDQ $0x20, R13 + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 1024(CX), Y3 + VMOVDQU 1056(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 1088(CX), Y3 + VMOVDQU 1120(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Load and process 32 bytes from input 9 to 2 outputs + VMOVDQU (DX), Y5 + ADDQ $0x20, DX + VPSRLQ $0x04, Y5, Y6 + VPAND Y2, Y5, Y5 + VPAND Y2, Y6, Y6 + VMOVDQU 1152(CX), Y3 + VMOVDQU 1184(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y0, Y0 + VMOVDQU 1216(CX), Y3 + VMOVDQU 1248(CX), Y4 + VPSHUFB Y5, Y3, Y3 + VPSHUFB Y6, Y4, Y4 + VPXOR Y3, Y4, Y3 + VPXOR Y3, Y1, Y1 + + // Store 2 outputs + VMOVDQU Y0, (R15) + ADDQ $0x20, R15 + VMOVDQU Y1, (R14) + ADDQ $0x20, R14 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_10x2Xor_loop + VZEROUPPER + +mulAvxTwo_10x2Xor_end: + RET + +// func mulAvxTwo_10x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x2_64Xor(SB), $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 89 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_10x2_64Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), R13 + MOVQ 216(DX), DX + MOVQ out_base+48(FP), R14 + MOVQ out_base+48(FP), R14 + MOVQ (R14), R15 + MOVQ 24(R14), R14 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R15 + ADDQ BP, R14 + + // Add start offset to input + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, R13 + ADDQ BP, DX + MOVQ $0x0000000f, BP + MOVQ BP, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_10x2_64Xor_loop: + // Load 2 outputs + VMOVDQU (R15), Y0 + VMOVDQU 32(R15), Y1 + VMOVDQU (R14), Y2 + VMOVDQU 32(R14), Y3 + + // Load and process 64 bytes from input 0 to 2 outputs + VMOVDQU (BX), Y9 + VMOVDQU 32(BX), Y11 + ADDQ $0x40, BX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 1 to 2 outputs + VMOVDQU (SI), Y9 + VMOVDQU 32(SI), Y11 + ADDQ $0x40, SI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 2 to 2 outputs + VMOVDQU (DI), Y9 + VMOVDQU 32(DI), Y11 + ADDQ $0x40, DI + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 3 to 2 outputs + VMOVDQU (R8), Y9 + VMOVDQU 32(R8), Y11 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 4 to 2 outputs + VMOVDQU (R9), Y9 + VMOVDQU 32(R9), Y11 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 5 to 2 outputs + VMOVDQU (R10), Y9 + VMOVDQU 32(R10), Y11 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 6 to 2 outputs + VMOVDQU (R11), Y9 + VMOVDQU 32(R11), Y11 + ADDQ $0x40, R11 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 768(CX), Y5 + VMOVDQU 800(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 832(CX), Y5 + VMOVDQU 864(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 7 to 2 outputs + VMOVDQU (R12), Y9 + VMOVDQU 32(R12), Y11 + ADDQ $0x40, R12 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 896(CX), Y5 + VMOVDQU 928(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 960(CX), Y5 + VMOVDQU 992(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 8 to 2 outputs + VMOVDQU (R13), Y9 + VMOVDQU 32(R13), Y11 + ADDQ $0x40, R13 + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 1024(CX), Y5 + VMOVDQU 1056(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 1088(CX), Y5 + VMOVDQU 1120(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Load and process 64 bytes from input 9 to 2 outputs + VMOVDQU (DX), Y9 + VMOVDQU 32(DX), Y11 + ADDQ $0x40, DX + VPSRLQ $0x04, Y9, Y10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y4, Y9, Y9 + VPAND Y4, Y11, Y11 + VPAND Y4, Y10, Y10 + VPAND Y4, Y12, Y12 + VMOVDQU 1152(CX), Y5 + VMOVDQU 1184(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y0, Y0 + VPXOR Y7, Y1, Y1 + VMOVDQU 1216(CX), Y5 + VMOVDQU 1248(CX), Y6 + VPSHUFB Y11, Y5, Y7 + VPSHUFB Y9, Y5, Y5 + VPSHUFB Y12, Y6, Y8 + VPSHUFB Y10, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y2, Y2 + VPXOR Y7, Y3, Y3 + + // Store 2 outputs + VMOVDQU Y0, (R15) + VMOVDQU Y1, 32(R15) + ADDQ $0x40, R15 + VMOVDQU Y2, (R14) + VMOVDQU Y3, 32(R14) + ADDQ $0x40, R14 + + // Prepare for next loop + DECQ AX + JNZ mulAvxTwo_10x2_64Xor_loop + VZEROUPPER + +mulAvxTwo_10x2_64Xor_end: + RET + +// func mulAvxTwo_10x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x3(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 68 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_10x3_end + MOVQ in_base+24(FP), AX + MOVQ (AX), DX + MOVQ 24(AX), BX + MOVQ 48(AX), SI + MOVQ 72(AX), DI + MOVQ 96(AX), R8 + MOVQ 120(AX), R9 + MOVQ 144(AX), R10 + MOVQ 168(AX), R11 + MOVQ 192(AX), R12 + MOVQ 216(AX), AX + MOVQ out_base+48(FP), R13 + MOVQ (R13), R14 + MOVQ 24(R13), R15 + MOVQ 48(R13), R13 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R13 + + // Add start offset to input + ADDQ BP, DX + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, AX + MOVQ $0x0000000f, BP + MOVQ BP, X3 + VPBROADCASTB X3, Y3 + MOVQ n+80(FP), BP + SHRQ $0x05, BP + +mulAvxTwo_10x3_loop: + // Load and process 32 bytes from input 0 to 3 outputs + VMOVDQU (DX), Y6 + ADDQ $0x20, DX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU (CX), Y4 + VMOVDQU 32(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y0 + VMOVDQU 64(CX), Y4 + VMOVDQU 96(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y1 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y2 + + // Load and process 32 bytes from input 1 to 3 outputs + VMOVDQU (BX), Y6 + ADDQ $0x20, BX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 192(CX), Y4 + VMOVDQU 224(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 256(CX), Y4 + VMOVDQU 288(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 320(CX), Y4 + VMOVDQU 352(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 2 to 3 outputs + VMOVDQU (SI), Y6 + ADDQ $0x20, SI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 384(CX), Y4 + VMOVDQU 416(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 448(CX), Y4 + VMOVDQU 480(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 512(CX), Y4 + VMOVDQU 544(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 3 to 3 outputs + VMOVDQU (DI), Y6 + ADDQ $0x20, DI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 576(CX), Y4 + VMOVDQU 608(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 640(CX), Y4 + VMOVDQU 672(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 704(CX), Y4 + VMOVDQU 736(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 4 to 3 outputs + VMOVDQU (R8), Y6 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 768(CX), Y4 + VMOVDQU 800(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 832(CX), Y4 + VMOVDQU 864(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 896(CX), Y4 + VMOVDQU 928(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 5 to 3 outputs + VMOVDQU (R9), Y6 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 960(CX), Y4 + VMOVDQU 992(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1024(CX), Y4 + VMOVDQU 1056(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1088(CX), Y4 + VMOVDQU 1120(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 6 to 3 outputs + VMOVDQU (R10), Y6 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 1152(CX), Y4 + VMOVDQU 1184(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1216(CX), Y4 + VMOVDQU 1248(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1280(CX), Y4 + VMOVDQU 1312(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 7 to 3 outputs + VMOVDQU (R11), Y6 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 1344(CX), Y4 + VMOVDQU 1376(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1408(CX), Y4 + VMOVDQU 1440(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1472(CX), Y4 + VMOVDQU 1504(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 8 to 3 outputs + VMOVDQU (R12), Y6 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 1536(CX), Y4 + VMOVDQU 1568(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1600(CX), Y4 + VMOVDQU 1632(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1664(CX), Y4 + VMOVDQU 1696(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 9 to 3 outputs + VMOVDQU (AX), Y6 + ADDQ $0x20, AX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 1728(CX), Y4 + VMOVDQU 1760(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1792(CX), Y4 + VMOVDQU 1824(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1856(CX), Y4 + VMOVDQU 1888(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Store 3 outputs + VMOVDQU Y0, (R14) + ADDQ $0x20, R14 + VMOVDQU Y1, (R15) + ADDQ $0x20, R15 + VMOVDQU Y2, (R13) + ADDQ $0x20, R13 + + // Prepare for next loop + DECQ BP + JNZ mulAvxTwo_10x3_loop + VZEROUPPER + +mulAvxTwo_10x3_end: + RET + +// func mulAvxTwo_10x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x3_64(SB), $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 130 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_10x3_64_end + MOVQ in_base+24(FP), AX + MOVQ (AX), DX + MOVQ 24(AX), BX + MOVQ 48(AX), SI + MOVQ 72(AX), DI + MOVQ 96(AX), R8 + MOVQ 120(AX), R9 + MOVQ 144(AX), R10 + MOVQ 168(AX), R11 + MOVQ 192(AX), R12 + MOVQ 216(AX), AX + MOVQ out_base+48(FP), R13 + MOVQ out_base+48(FP), R13 + MOVQ (R13), R14 + MOVQ 24(R13), R15 + MOVQ 48(R13), R13 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R13 + + // Add start offset to input + ADDQ BP, DX + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, AX + MOVQ $0x0000000f, BP + MOVQ BP, X6 + VPBROADCASTB X6, Y6 + + // Reload length to save a register + MOVQ n+80(FP), BP + SHRQ $0x06, BP + +mulAvxTwo_10x3_64_loop: + // Load and process 64 bytes from input 0 to 3 outputs + VMOVDQU (DX), Y11 + VMOVDQU 32(DX), Y13 + ADDQ $0x40, DX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y0 + VPXOR Y9, Y10, Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y2 + VPXOR Y9, Y10, Y3 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y4 + VPXOR Y9, Y10, Y5 + + // Load and process 64 bytes from input 1 to 3 outputs + VMOVDQU (BX), Y11 + VMOVDQU 32(BX), Y13 + ADDQ $0x40, BX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 2 to 3 outputs + VMOVDQU (SI), Y11 + VMOVDQU 32(SI), Y13 + ADDQ $0x40, SI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 3 to 3 outputs + VMOVDQU (DI), Y11 + VMOVDQU 32(DI), Y13 + ADDQ $0x40, DI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 4 to 3 outputs + VMOVDQU (R8), Y11 + VMOVDQU 32(R8), Y13 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 5 to 3 outputs + VMOVDQU (R9), Y11 + VMOVDQU 32(R9), Y13 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 6 to 3 outputs + VMOVDQU (R10), Y11 + VMOVDQU 32(R10), Y13 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 1152(CX), Y7 + VMOVDQU 1184(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1216(CX), Y7 + VMOVDQU 1248(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y7 + VMOVDQU 1312(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 7 to 3 outputs + VMOVDQU (R11), Y11 + VMOVDQU 32(R11), Y13 + ADDQ $0x40, R11 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 1344(CX), Y7 + VMOVDQU 1376(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1408(CX), Y7 + VMOVDQU 1440(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1472(CX), Y7 + VMOVDQU 1504(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 8 to 3 outputs + VMOVDQU (R12), Y11 + VMOVDQU 32(R12), Y13 + ADDQ $0x40, R12 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 1536(CX), Y7 + VMOVDQU 1568(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1600(CX), Y7 + VMOVDQU 1632(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1664(CX), Y7 + VMOVDQU 1696(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 9 to 3 outputs + VMOVDQU (AX), Y11 + VMOVDQU 32(AX), Y13 + ADDQ $0x40, AX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 1728(CX), Y7 + VMOVDQU 1760(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1792(CX), Y7 + VMOVDQU 1824(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1856(CX), Y7 + VMOVDQU 1888(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Store 3 outputs + VMOVDQU Y0, (R14) + VMOVDQU Y1, 32(R14) + ADDQ $0x40, R14 + VMOVDQU Y2, (R15) + VMOVDQU Y3, 32(R15) + ADDQ $0x40, R15 + VMOVDQU Y4, (R13) + VMOVDQU Y5, 32(R13) + ADDQ $0x40, R13 + + // Prepare for next loop + DECQ BP + JNZ mulAvxTwo_10x3_64_loop + VZEROUPPER + +mulAvxTwo_10x3_64_end: + RET + +// func mulAvxTwo_10x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x3Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 68 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_10x3Xor_end + MOVQ in_base+24(FP), AX + MOVQ (AX), DX + MOVQ 24(AX), BX + MOVQ 48(AX), SI + MOVQ 72(AX), DI + MOVQ 96(AX), R8 + MOVQ 120(AX), R9 + MOVQ 144(AX), R10 + MOVQ 168(AX), R11 + MOVQ 192(AX), R12 + MOVQ 216(AX), AX + MOVQ out_base+48(FP), R13 + MOVQ (R13), R14 + MOVQ 24(R13), R15 + MOVQ 48(R13), R13 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R13 + + // Add start offset to input + ADDQ BP, DX + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, AX + MOVQ $0x0000000f, BP + MOVQ BP, X3 + VPBROADCASTB X3, Y3 + MOVQ n+80(FP), BP + SHRQ $0x05, BP + +mulAvxTwo_10x3Xor_loop: + // Load and process 32 bytes from input 0 to 3 outputs + VMOVDQU (DX), Y6 + ADDQ $0x20, DX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU (R14), Y0 + VMOVDQU (CX), Y4 + VMOVDQU 32(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU (R15), Y1 + VMOVDQU 64(CX), Y4 + VMOVDQU 96(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU (R13), Y2 + VMOVDQU 128(CX), Y4 + VMOVDQU 160(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 1 to 3 outputs + VMOVDQU (BX), Y6 + ADDQ $0x20, BX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 192(CX), Y4 + VMOVDQU 224(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 256(CX), Y4 + VMOVDQU 288(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 320(CX), Y4 + VMOVDQU 352(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 2 to 3 outputs + VMOVDQU (SI), Y6 + ADDQ $0x20, SI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 384(CX), Y4 + VMOVDQU 416(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 448(CX), Y4 + VMOVDQU 480(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 512(CX), Y4 + VMOVDQU 544(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 3 to 3 outputs + VMOVDQU (DI), Y6 + ADDQ $0x20, DI + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 576(CX), Y4 + VMOVDQU 608(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 640(CX), Y4 + VMOVDQU 672(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 704(CX), Y4 + VMOVDQU 736(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 4 to 3 outputs + VMOVDQU (R8), Y6 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 768(CX), Y4 + VMOVDQU 800(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 832(CX), Y4 + VMOVDQU 864(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 896(CX), Y4 + VMOVDQU 928(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 5 to 3 outputs + VMOVDQU (R9), Y6 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 960(CX), Y4 + VMOVDQU 992(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1024(CX), Y4 + VMOVDQU 1056(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1088(CX), Y4 + VMOVDQU 1120(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 6 to 3 outputs + VMOVDQU (R10), Y6 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 1152(CX), Y4 + VMOVDQU 1184(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1216(CX), Y4 + VMOVDQU 1248(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1280(CX), Y4 + VMOVDQU 1312(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 7 to 3 outputs + VMOVDQU (R11), Y6 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 1344(CX), Y4 + VMOVDQU 1376(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1408(CX), Y4 + VMOVDQU 1440(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1472(CX), Y4 + VMOVDQU 1504(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 8 to 3 outputs + VMOVDQU (R12), Y6 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 1536(CX), Y4 + VMOVDQU 1568(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1600(CX), Y4 + VMOVDQU 1632(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1664(CX), Y4 + VMOVDQU 1696(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Load and process 32 bytes from input 9 to 3 outputs + VMOVDQU (AX), Y6 + ADDQ $0x20, AX + VPSRLQ $0x04, Y6, Y7 + VPAND Y3, Y6, Y6 + VPAND Y3, Y7, Y7 + VMOVDQU 1728(CX), Y4 + VMOVDQU 1760(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y0, Y0 + VMOVDQU 1792(CX), Y4 + VMOVDQU 1824(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y1, Y1 + VMOVDQU 1856(CX), Y4 + VMOVDQU 1888(CX), Y5 + VPSHUFB Y6, Y4, Y4 + VPSHUFB Y7, Y5, Y5 + VPXOR Y4, Y5, Y4 + VPXOR Y4, Y2, Y2 + + // Store 3 outputs + VMOVDQU Y0, (R14) + ADDQ $0x20, R14 + VMOVDQU Y1, (R15) + ADDQ $0x20, R15 + VMOVDQU Y2, (R13) + ADDQ $0x20, R13 + + // Prepare for next loop + DECQ BP + JNZ mulAvxTwo_10x3Xor_loop + VZEROUPPER + +mulAvxTwo_10x3Xor_end: + RET + +// func mulAvxTwo_10x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x3_64Xor(SB), $8-88 + // Loading no tables to registers + // Destination kept in GP registers + // Full registers estimated 130 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x06, AX + TESTQ AX, AX + JZ mulAvxTwo_10x3_64Xor_end + MOVQ in_base+24(FP), AX + MOVQ (AX), DX + MOVQ 24(AX), BX + MOVQ 48(AX), SI + MOVQ 72(AX), DI + MOVQ 96(AX), R8 + MOVQ 120(AX), R9 + MOVQ 144(AX), R10 + MOVQ 168(AX), R11 + MOVQ 192(AX), R12 + MOVQ 216(AX), AX + MOVQ out_base+48(FP), R13 + MOVQ out_base+48(FP), R13 + MOVQ (R13), R14 + MOVQ 24(R13), R15 + MOVQ 48(R13), R13 + MOVQ start+72(FP), BP + + // Add start offset to output + ADDQ BP, R14 + ADDQ BP, R15 + ADDQ BP, R13 + + // Add start offset to input + ADDQ BP, DX + ADDQ BP, BX + ADDQ BP, SI + ADDQ BP, DI + ADDQ BP, R8 + ADDQ BP, R9 + ADDQ BP, R10 + ADDQ BP, R11 + ADDQ BP, R12 + ADDQ BP, AX + MOVQ $0x0000000f, BP + MOVQ BP, X6 + VPBROADCASTB X6, Y6 + + // Reload length to save a register + MOVQ n+80(FP), BP + SHRQ $0x06, BP + +mulAvxTwo_10x3_64Xor_loop: + // Load 3 outputs + VMOVDQU (R14), Y0 + VMOVDQU 32(R14), Y1 + VMOVDQU (R15), Y2 + VMOVDQU 32(R15), Y3 + VMOVDQU (R13), Y4 + VMOVDQU 32(R13), Y5 + + // Load and process 64 bytes from input 0 to 3 outputs + VMOVDQU (DX), Y11 + VMOVDQU 32(DX), Y13 + ADDQ $0x40, DX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 1 to 3 outputs + VMOVDQU (BX), Y11 + VMOVDQU 32(BX), Y13 + ADDQ $0x40, BX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 2 to 3 outputs + VMOVDQU (SI), Y11 + VMOVDQU 32(SI), Y13 + ADDQ $0x40, SI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 3 to 3 outputs + VMOVDQU (DI), Y11 + VMOVDQU 32(DI), Y13 + ADDQ $0x40, DI + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 4 to 3 outputs + VMOVDQU (R8), Y11 + VMOVDQU 32(R8), Y13 + ADDQ $0x40, R8 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 5 to 3 outputs + VMOVDQU (R9), Y11 + VMOVDQU 32(R9), Y13 + ADDQ $0x40, R9 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 6 to 3 outputs + VMOVDQU (R10), Y11 + VMOVDQU 32(R10), Y13 + ADDQ $0x40, R10 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 1152(CX), Y7 + VMOVDQU 1184(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1216(CX), Y7 + VMOVDQU 1248(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y7 + VMOVDQU 1312(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 7 to 3 outputs + VMOVDQU (R11), Y11 + VMOVDQU 32(R11), Y13 + ADDQ $0x40, R11 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 1344(CX), Y7 + VMOVDQU 1376(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1408(CX), Y7 + VMOVDQU 1440(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1472(CX), Y7 + VMOVDQU 1504(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 8 to 3 outputs + VMOVDQU (R12), Y11 + VMOVDQU 32(R12), Y13 + ADDQ $0x40, R12 + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 1536(CX), Y7 + VMOVDQU 1568(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1600(CX), Y7 + VMOVDQU 1632(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1664(CX), Y7 + VMOVDQU 1696(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Load and process 64 bytes from input 9 to 3 outputs + VMOVDQU (AX), Y11 + VMOVDQU 32(AX), Y13 + ADDQ $0x40, AX + VPSRLQ $0x04, Y11, Y12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y6, Y11, Y11 + VPAND Y6, Y13, Y13 + VPAND Y6, Y12, Y12 + VPAND Y6, Y14, Y14 + VMOVDQU 1728(CX), Y7 + VMOVDQU 1760(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y0, Y0 + VPXOR Y9, Y1, Y1 + VMOVDQU 1792(CX), Y7 + VMOVDQU 1824(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y2, Y2 + VPXOR Y9, Y3, Y3 + VMOVDQU 1856(CX), Y7 + VMOVDQU 1888(CX), Y8 + VPSHUFB Y13, Y7, Y9 + VPSHUFB Y11, Y7, Y7 + VPSHUFB Y14, Y8, Y10 + VPSHUFB Y12, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y9, Y10, Y9 + VPXOR Y7, Y4, Y4 + VPXOR Y9, Y5, Y5 + + // Store 3 outputs + VMOVDQU Y0, (R14) + VMOVDQU Y1, 32(R14) + ADDQ $0x40, R14 + VMOVDQU Y2, (R15) + VMOVDQU Y3, 32(R15) + ADDQ $0x40, R15 + VMOVDQU Y4, (R13) + VMOVDQU Y5, 32(R13) + ADDQ $0x40, R13 + + // Prepare for next loop + DECQ BP + JNZ mulAvxTwo_10x3_64Xor_loop + VZEROUPPER + +mulAvxTwo_10x3_64Xor_end: + RET + +// func mulAvxTwo_10x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x4(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 89 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_10x4_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), R13 + MOVQ 216(DX), DX + MOVQ out_base+48(FP), R14 + MOVQ start+72(FP), R15 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, DX + MOVQ $0x0000000f, BP + MOVQ BP, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_10x4_loop: + // Load and process 32 bytes from input 0 to 4 outputs + VMOVDQU (BX), Y7 + ADDQ $0x20, BX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y0 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y1 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y2 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y3 + + // Load and process 32 bytes from input 1 to 4 outputs + VMOVDQU (SI), Y7 + ADDQ $0x20, SI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 2 to 4 outputs + VMOVDQU (DI), Y7 + ADDQ $0x20, DI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 3 to 4 outputs + VMOVDQU (R8), Y7 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 768(CX), Y5 + VMOVDQU 800(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 832(CX), Y5 + VMOVDQU 864(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 896(CX), Y5 + VMOVDQU 928(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 960(CX), Y5 + VMOVDQU 992(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 4 to 4 outputs + VMOVDQU (R9), Y7 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1024(CX), Y5 + VMOVDQU 1056(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1088(CX), Y5 + VMOVDQU 1120(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1152(CX), Y5 + VMOVDQU 1184(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1216(CX), Y5 + VMOVDQU 1248(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 5 to 4 outputs + VMOVDQU (R10), Y7 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1280(CX), Y5 + VMOVDQU 1312(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1344(CX), Y5 + VMOVDQU 1376(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1408(CX), Y5 + VMOVDQU 1440(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1472(CX), Y5 + VMOVDQU 1504(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 6 to 4 outputs + VMOVDQU (R11), Y7 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1536(CX), Y5 + VMOVDQU 1568(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1600(CX), Y5 + VMOVDQU 1632(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1664(CX), Y5 + VMOVDQU 1696(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1728(CX), Y5 + VMOVDQU 1760(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 7 to 4 outputs + VMOVDQU (R12), Y7 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1792(CX), Y5 + VMOVDQU 1824(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1856(CX), Y5 + VMOVDQU 1888(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1920(CX), Y5 + VMOVDQU 1952(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1984(CX), Y5 + VMOVDQU 2016(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 8 to 4 outputs + VMOVDQU (R13), Y7 + ADDQ $0x20, R13 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 2048(CX), Y5 + VMOVDQU 2080(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 2112(CX), Y5 + VMOVDQU 2144(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 2176(CX), Y5 + VMOVDQU 2208(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 2240(CX), Y5 + VMOVDQU 2272(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 9 to 4 outputs + VMOVDQU (DX), Y7 + ADDQ $0x20, DX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 2304(CX), Y5 + VMOVDQU 2336(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 2368(CX), Y5 + VMOVDQU 2400(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 2432(CX), Y5 + VMOVDQU 2464(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 2496(CX), Y5 + VMOVDQU 2528(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Store 4 outputs + MOVQ (R14), BP + VMOVDQU Y0, (BP)(R15*1) + MOVQ 24(R14), BP + VMOVDQU Y1, (BP)(R15*1) + MOVQ 48(R14), BP + VMOVDQU Y2, (BP)(R15*1) + MOVQ 72(R14), BP + VMOVDQU Y3, (BP)(R15*1) + + // Prepare for next loop + ADDQ $0x20, R15 + DECQ AX + JNZ mulAvxTwo_10x4_loop + VZEROUPPER + +mulAvxTwo_10x4_end: + RET + +// func mulAvxTwo_10x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x4Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 89 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_10x4Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), R13 + MOVQ 216(DX), DX + MOVQ out_base+48(FP), R14 + MOVQ start+72(FP), R15 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, DX + MOVQ $0x0000000f, BP + MOVQ BP, X4 + VPBROADCASTB X4, Y4 + +mulAvxTwo_10x4Xor_loop: + // Load and process 32 bytes from input 0 to 4 outputs + VMOVDQU (BX), Y7 + ADDQ $0x20, BX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + MOVQ (R14), BP + VMOVDQU (BP)(R15*1), Y0 + VMOVDQU (CX), Y5 + VMOVDQU 32(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + MOVQ 24(R14), BP + VMOVDQU (BP)(R15*1), Y1 + VMOVDQU 64(CX), Y5 + VMOVDQU 96(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + MOVQ 48(R14), BP + VMOVDQU (BP)(R15*1), Y2 + VMOVDQU 128(CX), Y5 + VMOVDQU 160(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + MOVQ 72(R14), BP + VMOVDQU (BP)(R15*1), Y3 + VMOVDQU 192(CX), Y5 + VMOVDQU 224(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 1 to 4 outputs + VMOVDQU (SI), Y7 + ADDQ $0x20, SI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 256(CX), Y5 + VMOVDQU 288(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 320(CX), Y5 + VMOVDQU 352(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 384(CX), Y5 + VMOVDQU 416(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 448(CX), Y5 + VMOVDQU 480(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 2 to 4 outputs + VMOVDQU (DI), Y7 + ADDQ $0x20, DI + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 512(CX), Y5 + VMOVDQU 544(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 576(CX), Y5 + VMOVDQU 608(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 640(CX), Y5 + VMOVDQU 672(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 704(CX), Y5 + VMOVDQU 736(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 3 to 4 outputs + VMOVDQU (R8), Y7 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 768(CX), Y5 + VMOVDQU 800(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 832(CX), Y5 + VMOVDQU 864(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 896(CX), Y5 + VMOVDQU 928(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 960(CX), Y5 + VMOVDQU 992(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 4 to 4 outputs + VMOVDQU (R9), Y7 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1024(CX), Y5 + VMOVDQU 1056(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1088(CX), Y5 + VMOVDQU 1120(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1152(CX), Y5 + VMOVDQU 1184(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1216(CX), Y5 + VMOVDQU 1248(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 5 to 4 outputs + VMOVDQU (R10), Y7 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1280(CX), Y5 + VMOVDQU 1312(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1344(CX), Y5 + VMOVDQU 1376(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1408(CX), Y5 + VMOVDQU 1440(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1472(CX), Y5 + VMOVDQU 1504(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 6 to 4 outputs + VMOVDQU (R11), Y7 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1536(CX), Y5 + VMOVDQU 1568(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1600(CX), Y5 + VMOVDQU 1632(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1664(CX), Y5 + VMOVDQU 1696(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1728(CX), Y5 + VMOVDQU 1760(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 7 to 4 outputs + VMOVDQU (R12), Y7 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 1792(CX), Y5 + VMOVDQU 1824(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 1856(CX), Y5 + VMOVDQU 1888(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 1920(CX), Y5 + VMOVDQU 1952(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 1984(CX), Y5 + VMOVDQU 2016(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 8 to 4 outputs + VMOVDQU (R13), Y7 + ADDQ $0x20, R13 + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 2048(CX), Y5 + VMOVDQU 2080(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 2112(CX), Y5 + VMOVDQU 2144(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 2176(CX), Y5 + VMOVDQU 2208(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 2240(CX), Y5 + VMOVDQU 2272(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Load and process 32 bytes from input 9 to 4 outputs + VMOVDQU (DX), Y7 + ADDQ $0x20, DX + VPSRLQ $0x04, Y7, Y8 + VPAND Y4, Y7, Y7 + VPAND Y4, Y8, Y8 + VMOVDQU 2304(CX), Y5 + VMOVDQU 2336(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y0, Y0 + VMOVDQU 2368(CX), Y5 + VMOVDQU 2400(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y1, Y1 + VMOVDQU 2432(CX), Y5 + VMOVDQU 2464(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y2, Y2 + VMOVDQU 2496(CX), Y5 + VMOVDQU 2528(CX), Y6 + VPSHUFB Y7, Y5, Y5 + VPSHUFB Y8, Y6, Y6 + VPXOR Y5, Y6, Y5 + VPXOR Y5, Y3, Y3 + + // Store 4 outputs + MOVQ (R14), BP + VMOVDQU Y0, (BP)(R15*1) + MOVQ 24(R14), BP + VMOVDQU Y1, (BP)(R15*1) + MOVQ 48(R14), BP + VMOVDQU Y2, (BP)(R15*1) + MOVQ 72(R14), BP + VMOVDQU Y3, (BP)(R15*1) + + // Prepare for next loop + ADDQ $0x20, R15 + DECQ AX + JNZ mulAvxTwo_10x4Xor_loop + VZEROUPPER + +mulAvxTwo_10x4Xor_end: + RET + +// func mulAvxTwo_10x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x5(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 110 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_10x5_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), R13 + MOVQ 216(DX), DX + MOVQ out_base+48(FP), R14 + MOVQ start+72(FP), R15 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, DX + MOVQ $0x0000000f, BP + MOVQ BP, X5 + VPBROADCASTB X5, Y5 + +mulAvxTwo_10x5_loop: + // Load and process 32 bytes from input 0 to 5 outputs + VMOVDQU (BX), Y8 + ADDQ $0x20, BX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU (CX), Y6 + VMOVDQU 32(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y0 + VMOVDQU 64(CX), Y6 + VMOVDQU 96(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y1 + VMOVDQU 128(CX), Y6 + VMOVDQU 160(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y2 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y3 + VMOVDQU 256(CX), Y6 + VMOVDQU 288(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y4 + + // Load and process 32 bytes from input 1 to 5 outputs + VMOVDQU (SI), Y8 + ADDQ $0x20, SI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 320(CX), Y6 + VMOVDQU 352(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 384(CX), Y6 + VMOVDQU 416(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 448(CX), Y6 + VMOVDQU 480(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 512(CX), Y6 + VMOVDQU 544(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 576(CX), Y6 + VMOVDQU 608(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 2 to 5 outputs + VMOVDQU (DI), Y8 + ADDQ $0x20, DI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 640(CX), Y6 + VMOVDQU 672(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 704(CX), Y6 + VMOVDQU 736(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 768(CX), Y6 + VMOVDQU 800(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 832(CX), Y6 + VMOVDQU 864(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 896(CX), Y6 + VMOVDQU 928(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 3 to 5 outputs + VMOVDQU (R8), Y8 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 960(CX), Y6 + VMOVDQU 992(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1024(CX), Y6 + VMOVDQU 1056(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1088(CX), Y6 + VMOVDQU 1120(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1152(CX), Y6 + VMOVDQU 1184(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1216(CX), Y6 + VMOVDQU 1248(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 4 to 5 outputs + VMOVDQU (R9), Y8 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1280(CX), Y6 + VMOVDQU 1312(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1344(CX), Y6 + VMOVDQU 1376(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1408(CX), Y6 + VMOVDQU 1440(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1472(CX), Y6 + VMOVDQU 1504(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1536(CX), Y6 + VMOVDQU 1568(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 5 to 5 outputs + VMOVDQU (R10), Y8 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1600(CX), Y6 + VMOVDQU 1632(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1664(CX), Y6 + VMOVDQU 1696(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1728(CX), Y6 + VMOVDQU 1760(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1792(CX), Y6 + VMOVDQU 1824(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1856(CX), Y6 + VMOVDQU 1888(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 6 to 5 outputs + VMOVDQU (R11), Y8 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1920(CX), Y6 + VMOVDQU 1952(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1984(CX), Y6 + VMOVDQU 2016(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 2048(CX), Y6 + VMOVDQU 2080(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 2112(CX), Y6 + VMOVDQU 2144(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 2176(CX), Y6 + VMOVDQU 2208(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 7 to 5 outputs + VMOVDQU (R12), Y8 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 2240(CX), Y6 + VMOVDQU 2272(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 2304(CX), Y6 + VMOVDQU 2336(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 2368(CX), Y6 + VMOVDQU 2400(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 2432(CX), Y6 + VMOVDQU 2464(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 2496(CX), Y6 + VMOVDQU 2528(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 8 to 5 outputs + VMOVDQU (R13), Y8 + ADDQ $0x20, R13 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 2560(CX), Y6 + VMOVDQU 2592(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 2624(CX), Y6 + VMOVDQU 2656(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 2688(CX), Y6 + VMOVDQU 2720(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 2752(CX), Y6 + VMOVDQU 2784(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 2816(CX), Y6 + VMOVDQU 2848(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 9 to 5 outputs + VMOVDQU (DX), Y8 + ADDQ $0x20, DX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 2880(CX), Y6 + VMOVDQU 2912(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 2944(CX), Y6 + VMOVDQU 2976(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 3008(CX), Y6 + VMOVDQU 3040(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 3072(CX), Y6 + VMOVDQU 3104(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 3136(CX), Y6 + VMOVDQU 3168(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Store 5 outputs + MOVQ (R14), BP + VMOVDQU Y0, (BP)(R15*1) + MOVQ 24(R14), BP + VMOVDQU Y1, (BP)(R15*1) + MOVQ 48(R14), BP + VMOVDQU Y2, (BP)(R15*1) + MOVQ 72(R14), BP + VMOVDQU Y3, (BP)(R15*1) + MOVQ 96(R14), BP + VMOVDQU Y4, (BP)(R15*1) + + // Prepare for next loop + ADDQ $0x20, R15 + DECQ AX + JNZ mulAvxTwo_10x5_loop + VZEROUPPER + +mulAvxTwo_10x5_end: + RET + +// func mulAvxTwo_10x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x5Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 110 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_10x5Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), R13 + MOVQ 216(DX), DX + MOVQ out_base+48(FP), R14 + MOVQ start+72(FP), R15 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, DX + MOVQ $0x0000000f, BP + MOVQ BP, X5 + VPBROADCASTB X5, Y5 + +mulAvxTwo_10x5Xor_loop: + // Load and process 32 bytes from input 0 to 5 outputs + VMOVDQU (BX), Y8 + ADDQ $0x20, BX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + MOVQ (R14), BP + VMOVDQU (BP)(R15*1), Y0 + VMOVDQU (CX), Y6 + VMOVDQU 32(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + MOVQ 24(R14), BP + VMOVDQU (BP)(R15*1), Y1 + VMOVDQU 64(CX), Y6 + VMOVDQU 96(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + MOVQ 48(R14), BP + VMOVDQU (BP)(R15*1), Y2 + VMOVDQU 128(CX), Y6 + VMOVDQU 160(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + MOVQ 72(R14), BP + VMOVDQU (BP)(R15*1), Y3 + VMOVDQU 192(CX), Y6 + VMOVDQU 224(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + MOVQ 96(R14), BP + VMOVDQU (BP)(R15*1), Y4 + VMOVDQU 256(CX), Y6 + VMOVDQU 288(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 1 to 5 outputs + VMOVDQU (SI), Y8 + ADDQ $0x20, SI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 320(CX), Y6 + VMOVDQU 352(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 384(CX), Y6 + VMOVDQU 416(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 448(CX), Y6 + VMOVDQU 480(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 512(CX), Y6 + VMOVDQU 544(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 576(CX), Y6 + VMOVDQU 608(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 2 to 5 outputs + VMOVDQU (DI), Y8 + ADDQ $0x20, DI + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 640(CX), Y6 + VMOVDQU 672(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 704(CX), Y6 + VMOVDQU 736(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 768(CX), Y6 + VMOVDQU 800(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 832(CX), Y6 + VMOVDQU 864(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 896(CX), Y6 + VMOVDQU 928(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 3 to 5 outputs + VMOVDQU (R8), Y8 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 960(CX), Y6 + VMOVDQU 992(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1024(CX), Y6 + VMOVDQU 1056(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1088(CX), Y6 + VMOVDQU 1120(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1152(CX), Y6 + VMOVDQU 1184(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1216(CX), Y6 + VMOVDQU 1248(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 4 to 5 outputs + VMOVDQU (R9), Y8 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1280(CX), Y6 + VMOVDQU 1312(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1344(CX), Y6 + VMOVDQU 1376(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1408(CX), Y6 + VMOVDQU 1440(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1472(CX), Y6 + VMOVDQU 1504(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1536(CX), Y6 + VMOVDQU 1568(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 5 to 5 outputs + VMOVDQU (R10), Y8 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1600(CX), Y6 + VMOVDQU 1632(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1664(CX), Y6 + VMOVDQU 1696(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 1728(CX), Y6 + VMOVDQU 1760(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 1792(CX), Y6 + VMOVDQU 1824(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 1856(CX), Y6 + VMOVDQU 1888(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 6 to 5 outputs + VMOVDQU (R11), Y8 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 1920(CX), Y6 + VMOVDQU 1952(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 1984(CX), Y6 + VMOVDQU 2016(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 2048(CX), Y6 + VMOVDQU 2080(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 2112(CX), Y6 + VMOVDQU 2144(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 2176(CX), Y6 + VMOVDQU 2208(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 7 to 5 outputs + VMOVDQU (R12), Y8 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 2240(CX), Y6 + VMOVDQU 2272(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 2304(CX), Y6 + VMOVDQU 2336(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 2368(CX), Y6 + VMOVDQU 2400(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 2432(CX), Y6 + VMOVDQU 2464(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 2496(CX), Y6 + VMOVDQU 2528(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 8 to 5 outputs + VMOVDQU (R13), Y8 + ADDQ $0x20, R13 + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 2560(CX), Y6 + VMOVDQU 2592(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 2624(CX), Y6 + VMOVDQU 2656(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 2688(CX), Y6 + VMOVDQU 2720(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 2752(CX), Y6 + VMOVDQU 2784(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 2816(CX), Y6 + VMOVDQU 2848(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Load and process 32 bytes from input 9 to 5 outputs + VMOVDQU (DX), Y8 + ADDQ $0x20, DX + VPSRLQ $0x04, Y8, Y9 + VPAND Y5, Y8, Y8 + VPAND Y5, Y9, Y9 + VMOVDQU 2880(CX), Y6 + VMOVDQU 2912(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y0, Y0 + VMOVDQU 2944(CX), Y6 + VMOVDQU 2976(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y1, Y1 + VMOVDQU 3008(CX), Y6 + VMOVDQU 3040(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y2, Y2 + VMOVDQU 3072(CX), Y6 + VMOVDQU 3104(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y3, Y3 + VMOVDQU 3136(CX), Y6 + VMOVDQU 3168(CX), Y7 + VPSHUFB Y8, Y6, Y6 + VPSHUFB Y9, Y7, Y7 + VPXOR Y6, Y7, Y6 + VPXOR Y6, Y4, Y4 + + // Store 5 outputs + MOVQ (R14), BP + VMOVDQU Y0, (BP)(R15*1) + MOVQ 24(R14), BP + VMOVDQU Y1, (BP)(R15*1) + MOVQ 48(R14), BP + VMOVDQU Y2, (BP)(R15*1) + MOVQ 72(R14), BP + VMOVDQU Y3, (BP)(R15*1) + MOVQ 96(R14), BP + VMOVDQU Y4, (BP)(R15*1) + + // Prepare for next loop + ADDQ $0x20, R15 + DECQ AX + JNZ mulAvxTwo_10x5Xor_loop + VZEROUPPER + +mulAvxTwo_10x5Xor_end: + RET + +// func mulAvxTwo_10x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x6(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 131 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_10x6_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), R13 + MOVQ 216(DX), DX + MOVQ out_base+48(FP), R14 + MOVQ start+72(FP), R15 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, DX + MOVQ $0x0000000f, BP + MOVQ BP, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_10x6_loop: + // Load and process 32 bytes from input 0 to 6 outputs + VMOVDQU (BX), Y9 + ADDQ $0x20, BX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y0 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y1 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y2 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y3 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y4 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y5 + + // Load and process 32 bytes from input 1 to 6 outputs + VMOVDQU (SI), Y9 + ADDQ $0x20, SI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 2 to 6 outputs + VMOVDQU (DI), Y9 + ADDQ $0x20, DI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 3 to 6 outputs + VMOVDQU (R8), Y9 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1152(CX), Y7 + VMOVDQU 1184(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1216(CX), Y7 + VMOVDQU 1248(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1280(CX), Y7 + VMOVDQU 1312(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1344(CX), Y7 + VMOVDQU 1376(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1408(CX), Y7 + VMOVDQU 1440(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1472(CX), Y7 + VMOVDQU 1504(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 4 to 6 outputs + VMOVDQU (R9), Y9 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1536(CX), Y7 + VMOVDQU 1568(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1600(CX), Y7 + VMOVDQU 1632(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1664(CX), Y7 + VMOVDQU 1696(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1728(CX), Y7 + VMOVDQU 1760(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1792(CX), Y7 + VMOVDQU 1824(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1856(CX), Y7 + VMOVDQU 1888(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 5 to 6 outputs + VMOVDQU (R10), Y9 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1920(CX), Y7 + VMOVDQU 1952(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1984(CX), Y7 + VMOVDQU 2016(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2048(CX), Y7 + VMOVDQU 2080(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2112(CX), Y7 + VMOVDQU 2144(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2176(CX), Y7 + VMOVDQU 2208(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 2240(CX), Y7 + VMOVDQU 2272(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 6 to 6 outputs + VMOVDQU (R11), Y9 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 2304(CX), Y7 + VMOVDQU 2336(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 2368(CX), Y7 + VMOVDQU 2400(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2432(CX), Y7 + VMOVDQU 2464(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2496(CX), Y7 + VMOVDQU 2528(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2560(CX), Y7 + VMOVDQU 2592(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 2624(CX), Y7 + VMOVDQU 2656(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 7 to 6 outputs + VMOVDQU (R12), Y9 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 2688(CX), Y7 + VMOVDQU 2720(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 2752(CX), Y7 + VMOVDQU 2784(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2816(CX), Y7 + VMOVDQU 2848(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2880(CX), Y7 + VMOVDQU 2912(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2944(CX), Y7 + VMOVDQU 2976(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 3008(CX), Y7 + VMOVDQU 3040(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 8 to 6 outputs + VMOVDQU (R13), Y9 + ADDQ $0x20, R13 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 3072(CX), Y7 + VMOVDQU 3104(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 3136(CX), Y7 + VMOVDQU 3168(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 3200(CX), Y7 + VMOVDQU 3232(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 3264(CX), Y7 + VMOVDQU 3296(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 3328(CX), Y7 + VMOVDQU 3360(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 3392(CX), Y7 + VMOVDQU 3424(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 9 to 6 outputs + VMOVDQU (DX), Y9 + ADDQ $0x20, DX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 3456(CX), Y7 + VMOVDQU 3488(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 3520(CX), Y7 + VMOVDQU 3552(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 3584(CX), Y7 + VMOVDQU 3616(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 3648(CX), Y7 + VMOVDQU 3680(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 3712(CX), Y7 + VMOVDQU 3744(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 3776(CX), Y7 + VMOVDQU 3808(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Store 6 outputs + MOVQ (R14), BP + VMOVDQU Y0, (BP)(R15*1) + MOVQ 24(R14), BP + VMOVDQU Y1, (BP)(R15*1) + MOVQ 48(R14), BP + VMOVDQU Y2, (BP)(R15*1) + MOVQ 72(R14), BP + VMOVDQU Y3, (BP)(R15*1) + MOVQ 96(R14), BP + VMOVDQU Y4, (BP)(R15*1) + MOVQ 120(R14), BP + VMOVDQU Y5, (BP)(R15*1) + + // Prepare for next loop + ADDQ $0x20, R15 + DECQ AX + JNZ mulAvxTwo_10x6_loop + VZEROUPPER + +mulAvxTwo_10x6_end: + RET + +// func mulAvxTwo_10x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x6Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 131 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_10x6Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), R13 + MOVQ 216(DX), DX + MOVQ out_base+48(FP), R14 + MOVQ start+72(FP), R15 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, DX + MOVQ $0x0000000f, BP + MOVQ BP, X6 + VPBROADCASTB X6, Y6 + +mulAvxTwo_10x6Xor_loop: + // Load and process 32 bytes from input 0 to 6 outputs + VMOVDQU (BX), Y9 + ADDQ $0x20, BX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + MOVQ (R14), BP + VMOVDQU (BP)(R15*1), Y0 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + MOVQ 24(R14), BP + VMOVDQU (BP)(R15*1), Y1 + VMOVDQU 64(CX), Y7 + VMOVDQU 96(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + MOVQ 48(R14), BP + VMOVDQU (BP)(R15*1), Y2 + VMOVDQU 128(CX), Y7 + VMOVDQU 160(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + MOVQ 72(R14), BP + VMOVDQU (BP)(R15*1), Y3 + VMOVDQU 192(CX), Y7 + VMOVDQU 224(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + MOVQ 96(R14), BP + VMOVDQU (BP)(R15*1), Y4 + VMOVDQU 256(CX), Y7 + VMOVDQU 288(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + MOVQ 120(R14), BP + VMOVDQU (BP)(R15*1), Y5 + VMOVDQU 320(CX), Y7 + VMOVDQU 352(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 1 to 6 outputs + VMOVDQU (SI), Y9 + ADDQ $0x20, SI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 384(CX), Y7 + VMOVDQU 416(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 448(CX), Y7 + VMOVDQU 480(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 512(CX), Y7 + VMOVDQU 544(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 576(CX), Y7 + VMOVDQU 608(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 640(CX), Y7 + VMOVDQU 672(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 704(CX), Y7 + VMOVDQU 736(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 2 to 6 outputs + VMOVDQU (DI), Y9 + ADDQ $0x20, DI + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 768(CX), Y7 + VMOVDQU 800(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 832(CX), Y7 + VMOVDQU 864(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 896(CX), Y7 + VMOVDQU 928(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 960(CX), Y7 + VMOVDQU 992(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1024(CX), Y7 + VMOVDQU 1056(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1088(CX), Y7 + VMOVDQU 1120(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 3 to 6 outputs + VMOVDQU (R8), Y9 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1152(CX), Y7 + VMOVDQU 1184(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1216(CX), Y7 + VMOVDQU 1248(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1280(CX), Y7 + VMOVDQU 1312(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1344(CX), Y7 + VMOVDQU 1376(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1408(CX), Y7 + VMOVDQU 1440(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1472(CX), Y7 + VMOVDQU 1504(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 4 to 6 outputs + VMOVDQU (R9), Y9 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1536(CX), Y7 + VMOVDQU 1568(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1600(CX), Y7 + VMOVDQU 1632(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 1664(CX), Y7 + VMOVDQU 1696(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 1728(CX), Y7 + VMOVDQU 1760(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 1792(CX), Y7 + VMOVDQU 1824(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 1856(CX), Y7 + VMOVDQU 1888(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 5 to 6 outputs + VMOVDQU (R10), Y9 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 1920(CX), Y7 + VMOVDQU 1952(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 1984(CX), Y7 + VMOVDQU 2016(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2048(CX), Y7 + VMOVDQU 2080(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2112(CX), Y7 + VMOVDQU 2144(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2176(CX), Y7 + VMOVDQU 2208(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 2240(CX), Y7 + VMOVDQU 2272(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 6 to 6 outputs + VMOVDQU (R11), Y9 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 2304(CX), Y7 + VMOVDQU 2336(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 2368(CX), Y7 + VMOVDQU 2400(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2432(CX), Y7 + VMOVDQU 2464(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2496(CX), Y7 + VMOVDQU 2528(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2560(CX), Y7 + VMOVDQU 2592(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 2624(CX), Y7 + VMOVDQU 2656(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 7 to 6 outputs + VMOVDQU (R12), Y9 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 2688(CX), Y7 + VMOVDQU 2720(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 2752(CX), Y7 + VMOVDQU 2784(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 2816(CX), Y7 + VMOVDQU 2848(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 2880(CX), Y7 + VMOVDQU 2912(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 2944(CX), Y7 + VMOVDQU 2976(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 3008(CX), Y7 + VMOVDQU 3040(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 8 to 6 outputs + VMOVDQU (R13), Y9 + ADDQ $0x20, R13 + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 3072(CX), Y7 + VMOVDQU 3104(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 3136(CX), Y7 + VMOVDQU 3168(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 3200(CX), Y7 + VMOVDQU 3232(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 3264(CX), Y7 + VMOVDQU 3296(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 3328(CX), Y7 + VMOVDQU 3360(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 3392(CX), Y7 + VMOVDQU 3424(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Load and process 32 bytes from input 9 to 6 outputs + VMOVDQU (DX), Y9 + ADDQ $0x20, DX + VPSRLQ $0x04, Y9, Y10 + VPAND Y6, Y9, Y9 + VPAND Y6, Y10, Y10 + VMOVDQU 3456(CX), Y7 + VMOVDQU 3488(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y0, Y0 + VMOVDQU 3520(CX), Y7 + VMOVDQU 3552(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y1, Y1 + VMOVDQU 3584(CX), Y7 + VMOVDQU 3616(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y2, Y2 + VMOVDQU 3648(CX), Y7 + VMOVDQU 3680(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y3, Y3 + VMOVDQU 3712(CX), Y7 + VMOVDQU 3744(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y4, Y4 + VMOVDQU 3776(CX), Y7 + VMOVDQU 3808(CX), Y8 + VPSHUFB Y9, Y7, Y7 + VPSHUFB Y10, Y8, Y8 + VPXOR Y7, Y8, Y7 + VPXOR Y7, Y5, Y5 + + // Store 6 outputs + MOVQ (R14), BP + VMOVDQU Y0, (BP)(R15*1) + MOVQ 24(R14), BP + VMOVDQU Y1, (BP)(R15*1) + MOVQ 48(R14), BP + VMOVDQU Y2, (BP)(R15*1) + MOVQ 72(R14), BP + VMOVDQU Y3, (BP)(R15*1) + MOVQ 96(R14), BP + VMOVDQU Y4, (BP)(R15*1) + MOVQ 120(R14), BP + VMOVDQU Y5, (BP)(R15*1) + + // Prepare for next loop + ADDQ $0x20, R15 + DECQ AX + JNZ mulAvxTwo_10x6Xor_loop + VZEROUPPER + +mulAvxTwo_10x6Xor_end: + RET + +// func mulAvxTwo_10x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x7(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 152 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_10x7_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), R13 + MOVQ 216(DX), DX + MOVQ out_base+48(FP), R14 + MOVQ start+72(FP), R15 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, DX + MOVQ $0x0000000f, BP + MOVQ BP, X7 + VPBROADCASTB X7, Y7 + +mulAvxTwo_10x7_loop: + // Load and process 32 bytes from input 0 to 7 outputs + VMOVDQU (BX), Y10 + ADDQ $0x20, BX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU (CX), Y8 + VMOVDQU 32(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y0 + VMOVDQU 64(CX), Y8 + VMOVDQU 96(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y1 + VMOVDQU 128(CX), Y8 + VMOVDQU 160(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y2 + VMOVDQU 192(CX), Y8 + VMOVDQU 224(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y3 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y4 + VMOVDQU 320(CX), Y8 + VMOVDQU 352(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y5 + VMOVDQU 384(CX), Y8 + VMOVDQU 416(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y6 + + // Load and process 32 bytes from input 1 to 7 outputs + VMOVDQU (SI), Y10 + ADDQ $0x20, SI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 448(CX), Y8 + VMOVDQU 480(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 512(CX), Y8 + VMOVDQU 544(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 576(CX), Y8 + VMOVDQU 608(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 640(CX), Y8 + VMOVDQU 672(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 704(CX), Y8 + VMOVDQU 736(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 768(CX), Y8 + VMOVDQU 800(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 832(CX), Y8 + VMOVDQU 864(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 2 to 7 outputs + VMOVDQU (DI), Y10 + ADDQ $0x20, DI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 896(CX), Y8 + VMOVDQU 928(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 960(CX), Y8 + VMOVDQU 992(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1024(CX), Y8 + VMOVDQU 1056(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1088(CX), Y8 + VMOVDQU 1120(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1152(CX), Y8 + VMOVDQU 1184(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1216(CX), Y8 + VMOVDQU 1248(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1280(CX), Y8 + VMOVDQU 1312(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 3 to 7 outputs + VMOVDQU (R8), Y10 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1344(CX), Y8 + VMOVDQU 1376(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1408(CX), Y8 + VMOVDQU 1440(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1472(CX), Y8 + VMOVDQU 1504(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1536(CX), Y8 + VMOVDQU 1568(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1600(CX), Y8 + VMOVDQU 1632(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1664(CX), Y8 + VMOVDQU 1696(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1728(CX), Y8 + VMOVDQU 1760(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 4 to 7 outputs + VMOVDQU (R9), Y10 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1792(CX), Y8 + VMOVDQU 1824(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1856(CX), Y8 + VMOVDQU 1888(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1920(CX), Y8 + VMOVDQU 1952(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1984(CX), Y8 + VMOVDQU 2016(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2048(CX), Y8 + VMOVDQU 2080(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 2112(CX), Y8 + VMOVDQU 2144(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 2176(CX), Y8 + VMOVDQU 2208(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 5 to 7 outputs + VMOVDQU (R10), Y10 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 2240(CX), Y8 + VMOVDQU 2272(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 2304(CX), Y8 + VMOVDQU 2336(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 2368(CX), Y8 + VMOVDQU 2400(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 2432(CX), Y8 + VMOVDQU 2464(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2496(CX), Y8 + VMOVDQU 2528(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 2560(CX), Y8 + VMOVDQU 2592(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 2624(CX), Y8 + VMOVDQU 2656(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 6 to 7 outputs + VMOVDQU (R11), Y10 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 2688(CX), Y8 + VMOVDQU 2720(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 2752(CX), Y8 + VMOVDQU 2784(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 2816(CX), Y8 + VMOVDQU 2848(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 2880(CX), Y8 + VMOVDQU 2912(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2944(CX), Y8 + VMOVDQU 2976(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 3008(CX), Y8 + VMOVDQU 3040(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 3072(CX), Y8 + VMOVDQU 3104(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 7 to 7 outputs + VMOVDQU (R12), Y10 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 3136(CX), Y8 + VMOVDQU 3168(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 3200(CX), Y8 + VMOVDQU 3232(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 3264(CX), Y8 + VMOVDQU 3296(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 3328(CX), Y8 + VMOVDQU 3360(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 3392(CX), Y8 + VMOVDQU 3424(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 3456(CX), Y8 + VMOVDQU 3488(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 3520(CX), Y8 + VMOVDQU 3552(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 8 to 7 outputs + VMOVDQU (R13), Y10 + ADDQ $0x20, R13 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 3584(CX), Y8 + VMOVDQU 3616(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 3648(CX), Y8 + VMOVDQU 3680(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 3712(CX), Y8 + VMOVDQU 3744(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 3776(CX), Y8 + VMOVDQU 3808(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 3840(CX), Y8 + VMOVDQU 3872(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 3904(CX), Y8 + VMOVDQU 3936(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 3968(CX), Y8 + VMOVDQU 4000(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 9 to 7 outputs + VMOVDQU (DX), Y10 + ADDQ $0x20, DX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 4032(CX), Y8 + VMOVDQU 4064(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 4096(CX), Y8 + VMOVDQU 4128(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 4160(CX), Y8 + VMOVDQU 4192(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 4224(CX), Y8 + VMOVDQU 4256(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 4288(CX), Y8 + VMOVDQU 4320(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 4352(CX), Y8 + VMOVDQU 4384(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 4416(CX), Y8 + VMOVDQU 4448(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Store 7 outputs + MOVQ (R14), BP + VMOVDQU Y0, (BP)(R15*1) + MOVQ 24(R14), BP + VMOVDQU Y1, (BP)(R15*1) + MOVQ 48(R14), BP + VMOVDQU Y2, (BP)(R15*1) + MOVQ 72(R14), BP + VMOVDQU Y3, (BP)(R15*1) + MOVQ 96(R14), BP + VMOVDQU Y4, (BP)(R15*1) + MOVQ 120(R14), BP + VMOVDQU Y5, (BP)(R15*1) + MOVQ 144(R14), BP + VMOVDQU Y6, (BP)(R15*1) + + // Prepare for next loop + ADDQ $0x20, R15 + DECQ AX + JNZ mulAvxTwo_10x7_loop + VZEROUPPER + +mulAvxTwo_10x7_end: + RET + +// func mulAvxTwo_10x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x7Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 152 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_10x7Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), R13 + MOVQ 216(DX), DX + MOVQ out_base+48(FP), R14 + MOVQ start+72(FP), R15 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, DX + MOVQ $0x0000000f, BP + MOVQ BP, X7 + VPBROADCASTB X7, Y7 + +mulAvxTwo_10x7Xor_loop: + // Load and process 32 bytes from input 0 to 7 outputs + VMOVDQU (BX), Y10 + ADDQ $0x20, BX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + MOVQ (R14), BP + VMOVDQU (BP)(R15*1), Y0 + VMOVDQU (CX), Y8 + VMOVDQU 32(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + MOVQ 24(R14), BP + VMOVDQU (BP)(R15*1), Y1 + VMOVDQU 64(CX), Y8 + VMOVDQU 96(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + MOVQ 48(R14), BP + VMOVDQU (BP)(R15*1), Y2 + VMOVDQU 128(CX), Y8 + VMOVDQU 160(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + MOVQ 72(R14), BP + VMOVDQU (BP)(R15*1), Y3 + VMOVDQU 192(CX), Y8 + VMOVDQU 224(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + MOVQ 96(R14), BP + VMOVDQU (BP)(R15*1), Y4 + VMOVDQU 256(CX), Y8 + VMOVDQU 288(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + MOVQ 120(R14), BP + VMOVDQU (BP)(R15*1), Y5 + VMOVDQU 320(CX), Y8 + VMOVDQU 352(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + MOVQ 144(R14), BP + VMOVDQU (BP)(R15*1), Y6 + VMOVDQU 384(CX), Y8 + VMOVDQU 416(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 1 to 7 outputs + VMOVDQU (SI), Y10 + ADDQ $0x20, SI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 448(CX), Y8 + VMOVDQU 480(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 512(CX), Y8 + VMOVDQU 544(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 576(CX), Y8 + VMOVDQU 608(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 640(CX), Y8 + VMOVDQU 672(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 704(CX), Y8 + VMOVDQU 736(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 768(CX), Y8 + VMOVDQU 800(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 832(CX), Y8 + VMOVDQU 864(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 2 to 7 outputs + VMOVDQU (DI), Y10 + ADDQ $0x20, DI + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 896(CX), Y8 + VMOVDQU 928(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 960(CX), Y8 + VMOVDQU 992(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1024(CX), Y8 + VMOVDQU 1056(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1088(CX), Y8 + VMOVDQU 1120(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1152(CX), Y8 + VMOVDQU 1184(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1216(CX), Y8 + VMOVDQU 1248(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1280(CX), Y8 + VMOVDQU 1312(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 3 to 7 outputs + VMOVDQU (R8), Y10 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1344(CX), Y8 + VMOVDQU 1376(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1408(CX), Y8 + VMOVDQU 1440(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1472(CX), Y8 + VMOVDQU 1504(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1536(CX), Y8 + VMOVDQU 1568(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 1600(CX), Y8 + VMOVDQU 1632(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 1664(CX), Y8 + VMOVDQU 1696(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 1728(CX), Y8 + VMOVDQU 1760(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 4 to 7 outputs + VMOVDQU (R9), Y10 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 1792(CX), Y8 + VMOVDQU 1824(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 1856(CX), Y8 + VMOVDQU 1888(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 1920(CX), Y8 + VMOVDQU 1952(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 1984(CX), Y8 + VMOVDQU 2016(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2048(CX), Y8 + VMOVDQU 2080(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 2112(CX), Y8 + VMOVDQU 2144(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 2176(CX), Y8 + VMOVDQU 2208(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 5 to 7 outputs + VMOVDQU (R10), Y10 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 2240(CX), Y8 + VMOVDQU 2272(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 2304(CX), Y8 + VMOVDQU 2336(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 2368(CX), Y8 + VMOVDQU 2400(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 2432(CX), Y8 + VMOVDQU 2464(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2496(CX), Y8 + VMOVDQU 2528(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 2560(CX), Y8 + VMOVDQU 2592(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 2624(CX), Y8 + VMOVDQU 2656(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 6 to 7 outputs + VMOVDQU (R11), Y10 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 2688(CX), Y8 + VMOVDQU 2720(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 2752(CX), Y8 + VMOVDQU 2784(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 2816(CX), Y8 + VMOVDQU 2848(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 2880(CX), Y8 + VMOVDQU 2912(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 2944(CX), Y8 + VMOVDQU 2976(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 3008(CX), Y8 + VMOVDQU 3040(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 3072(CX), Y8 + VMOVDQU 3104(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 7 to 7 outputs + VMOVDQU (R12), Y10 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 3136(CX), Y8 + VMOVDQU 3168(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 3200(CX), Y8 + VMOVDQU 3232(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 3264(CX), Y8 + VMOVDQU 3296(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 3328(CX), Y8 + VMOVDQU 3360(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 3392(CX), Y8 + VMOVDQU 3424(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 3456(CX), Y8 + VMOVDQU 3488(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 3520(CX), Y8 + VMOVDQU 3552(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 8 to 7 outputs + VMOVDQU (R13), Y10 + ADDQ $0x20, R13 + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 3584(CX), Y8 + VMOVDQU 3616(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 3648(CX), Y8 + VMOVDQU 3680(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 3712(CX), Y8 + VMOVDQU 3744(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 3776(CX), Y8 + VMOVDQU 3808(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 3840(CX), Y8 + VMOVDQU 3872(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 3904(CX), Y8 + VMOVDQU 3936(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 3968(CX), Y8 + VMOVDQU 4000(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Load and process 32 bytes from input 9 to 7 outputs + VMOVDQU (DX), Y10 + ADDQ $0x20, DX + VPSRLQ $0x04, Y10, Y11 + VPAND Y7, Y10, Y10 + VPAND Y7, Y11, Y11 + VMOVDQU 4032(CX), Y8 + VMOVDQU 4064(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y0, Y0 + VMOVDQU 4096(CX), Y8 + VMOVDQU 4128(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y1, Y1 + VMOVDQU 4160(CX), Y8 + VMOVDQU 4192(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y2, Y2 + VMOVDQU 4224(CX), Y8 + VMOVDQU 4256(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y3, Y3 + VMOVDQU 4288(CX), Y8 + VMOVDQU 4320(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y4, Y4 + VMOVDQU 4352(CX), Y8 + VMOVDQU 4384(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y5, Y5 + VMOVDQU 4416(CX), Y8 + VMOVDQU 4448(CX), Y9 + VPSHUFB Y10, Y8, Y8 + VPSHUFB Y11, Y9, Y9 + VPXOR Y8, Y9, Y8 + VPXOR Y8, Y6, Y6 + + // Store 7 outputs + MOVQ (R14), BP + VMOVDQU Y0, (BP)(R15*1) + MOVQ 24(R14), BP + VMOVDQU Y1, (BP)(R15*1) + MOVQ 48(R14), BP + VMOVDQU Y2, (BP)(R15*1) + MOVQ 72(R14), BP + VMOVDQU Y3, (BP)(R15*1) + MOVQ 96(R14), BP + VMOVDQU Y4, (BP)(R15*1) + MOVQ 120(R14), BP + VMOVDQU Y5, (BP)(R15*1) + MOVQ 144(R14), BP + VMOVDQU Y6, (BP)(R15*1) + + // Prepare for next loop + ADDQ $0x20, R15 + DECQ AX + JNZ mulAvxTwo_10x7Xor_loop + VZEROUPPER + +mulAvxTwo_10x7Xor_end: + RET + +// func mulAvxTwo_10x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x8(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 173 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_10x8_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), R13 + MOVQ 216(DX), DX + MOVQ out_base+48(FP), R14 + MOVQ start+72(FP), R15 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, DX + MOVQ $0x0000000f, BP + MOVQ BP, X8 + VPBROADCASTB X8, Y8 + +mulAvxTwo_10x8_loop: + // Load and process 32 bytes from input 0 to 8 outputs + VMOVDQU (BX), Y11 + ADDQ $0x20, BX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU (CX), Y9 + VMOVDQU 32(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y0 + VMOVDQU 64(CX), Y9 + VMOVDQU 96(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y1 + VMOVDQU 128(CX), Y9 + VMOVDQU 160(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y2 + VMOVDQU 192(CX), Y9 + VMOVDQU 224(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y3 + VMOVDQU 256(CX), Y9 + VMOVDQU 288(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y4 + VMOVDQU 320(CX), Y9 + VMOVDQU 352(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y5 + VMOVDQU 384(CX), Y9 + VMOVDQU 416(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y6 + VMOVDQU 448(CX), Y9 + VMOVDQU 480(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y7 + + // Load and process 32 bytes from input 1 to 8 outputs + VMOVDQU (SI), Y11 + ADDQ $0x20, SI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 512(CX), Y9 + VMOVDQU 544(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 576(CX), Y9 + VMOVDQU 608(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y9 + VMOVDQU 672(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 704(CX), Y9 + VMOVDQU 736(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 768(CX), Y9 + VMOVDQU 800(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 832(CX), Y9 + VMOVDQU 864(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 896(CX), Y9 + VMOVDQU 928(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 960(CX), Y9 + VMOVDQU 992(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 2 to 8 outputs + VMOVDQU (DI), Y11 + ADDQ $0x20, DI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1024(CX), Y9 + VMOVDQU 1056(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1088(CX), Y9 + VMOVDQU 1120(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1152(CX), Y9 + VMOVDQU 1184(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1216(CX), Y9 + VMOVDQU 1248(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y9 + VMOVDQU 1312(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1344(CX), Y9 + VMOVDQU 1376(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1408(CX), Y9 + VMOVDQU 1440(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1472(CX), Y9 + VMOVDQU 1504(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 3 to 8 outputs + VMOVDQU (R8), Y11 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1536(CX), Y9 + VMOVDQU 1568(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1600(CX), Y9 + VMOVDQU 1632(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1664(CX), Y9 + VMOVDQU 1696(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1728(CX), Y9 + VMOVDQU 1760(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1792(CX), Y9 + VMOVDQU 1824(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1856(CX), Y9 + VMOVDQU 1888(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1920(CX), Y9 + VMOVDQU 1952(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1984(CX), Y9 + VMOVDQU 2016(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 4 to 8 outputs + VMOVDQU (R9), Y11 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 2048(CX), Y9 + VMOVDQU 2080(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 2112(CX), Y9 + VMOVDQU 2144(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 2176(CX), Y9 + VMOVDQU 2208(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 2240(CX), Y9 + VMOVDQU 2272(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 2304(CX), Y9 + VMOVDQU 2336(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 2368(CX), Y9 + VMOVDQU 2400(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 2432(CX), Y9 + VMOVDQU 2464(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 2496(CX), Y9 + VMOVDQU 2528(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 5 to 8 outputs + VMOVDQU (R10), Y11 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 2560(CX), Y9 + VMOVDQU 2592(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 2624(CX), Y9 + VMOVDQU 2656(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 2688(CX), Y9 + VMOVDQU 2720(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 2752(CX), Y9 + VMOVDQU 2784(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 2816(CX), Y9 + VMOVDQU 2848(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 2880(CX), Y9 + VMOVDQU 2912(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 2944(CX), Y9 + VMOVDQU 2976(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 3008(CX), Y9 + VMOVDQU 3040(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 6 to 8 outputs + VMOVDQU (R11), Y11 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 3072(CX), Y9 + VMOVDQU 3104(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 3136(CX), Y9 + VMOVDQU 3168(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 3200(CX), Y9 + VMOVDQU 3232(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 3264(CX), Y9 + VMOVDQU 3296(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 3328(CX), Y9 + VMOVDQU 3360(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 3392(CX), Y9 + VMOVDQU 3424(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 3456(CX), Y9 + VMOVDQU 3488(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 3520(CX), Y9 + VMOVDQU 3552(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 7 to 8 outputs + VMOVDQU (R12), Y11 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 3584(CX), Y9 + VMOVDQU 3616(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 3648(CX), Y9 + VMOVDQU 3680(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 3712(CX), Y9 + VMOVDQU 3744(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 3776(CX), Y9 + VMOVDQU 3808(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 3840(CX), Y9 + VMOVDQU 3872(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 3904(CX), Y9 + VMOVDQU 3936(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 3968(CX), Y9 + VMOVDQU 4000(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 4032(CX), Y9 + VMOVDQU 4064(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 8 to 8 outputs + VMOVDQU (R13), Y11 + ADDQ $0x20, R13 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 4096(CX), Y9 + VMOVDQU 4128(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 4160(CX), Y9 + VMOVDQU 4192(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 4224(CX), Y9 + VMOVDQU 4256(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 4288(CX), Y9 + VMOVDQU 4320(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 4352(CX), Y9 + VMOVDQU 4384(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 4416(CX), Y9 + VMOVDQU 4448(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 4480(CX), Y9 + VMOVDQU 4512(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 4544(CX), Y9 + VMOVDQU 4576(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 9 to 8 outputs + VMOVDQU (DX), Y11 + ADDQ $0x20, DX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 4608(CX), Y9 + VMOVDQU 4640(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 4672(CX), Y9 + VMOVDQU 4704(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 4736(CX), Y9 + VMOVDQU 4768(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 4800(CX), Y9 + VMOVDQU 4832(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 4864(CX), Y9 + VMOVDQU 4896(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 4928(CX), Y9 + VMOVDQU 4960(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 4992(CX), Y9 + VMOVDQU 5024(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 5056(CX), Y9 + VMOVDQU 5088(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Store 8 outputs + MOVQ (R14), BP + VMOVDQU Y0, (BP)(R15*1) + MOVQ 24(R14), BP + VMOVDQU Y1, (BP)(R15*1) + MOVQ 48(R14), BP + VMOVDQU Y2, (BP)(R15*1) + MOVQ 72(R14), BP + VMOVDQU Y3, (BP)(R15*1) + MOVQ 96(R14), BP + VMOVDQU Y4, (BP)(R15*1) + MOVQ 120(R14), BP + VMOVDQU Y5, (BP)(R15*1) + MOVQ 144(R14), BP + VMOVDQU Y6, (BP)(R15*1) + MOVQ 168(R14), BP + VMOVDQU Y7, (BP)(R15*1) + + // Prepare for next loop + ADDQ $0x20, R15 + DECQ AX + JNZ mulAvxTwo_10x8_loop + VZEROUPPER + +mulAvxTwo_10x8_end: + RET + +// func mulAvxTwo_10x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x8Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 173 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_10x8Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), R13 + MOVQ 216(DX), DX + MOVQ out_base+48(FP), R14 + MOVQ start+72(FP), R15 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, DX + MOVQ $0x0000000f, BP + MOVQ BP, X8 + VPBROADCASTB X8, Y8 + +mulAvxTwo_10x8Xor_loop: + // Load and process 32 bytes from input 0 to 8 outputs + VMOVDQU (BX), Y11 + ADDQ $0x20, BX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + MOVQ (R14), BP + VMOVDQU (BP)(R15*1), Y0 + VMOVDQU (CX), Y9 + VMOVDQU 32(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + MOVQ 24(R14), BP + VMOVDQU (BP)(R15*1), Y1 + VMOVDQU 64(CX), Y9 + VMOVDQU 96(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + MOVQ 48(R14), BP + VMOVDQU (BP)(R15*1), Y2 + VMOVDQU 128(CX), Y9 + VMOVDQU 160(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + MOVQ 72(R14), BP + VMOVDQU (BP)(R15*1), Y3 + VMOVDQU 192(CX), Y9 + VMOVDQU 224(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + MOVQ 96(R14), BP + VMOVDQU (BP)(R15*1), Y4 + VMOVDQU 256(CX), Y9 + VMOVDQU 288(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + MOVQ 120(R14), BP + VMOVDQU (BP)(R15*1), Y5 + VMOVDQU 320(CX), Y9 + VMOVDQU 352(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + MOVQ 144(R14), BP + VMOVDQU (BP)(R15*1), Y6 + VMOVDQU 384(CX), Y9 + VMOVDQU 416(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + MOVQ 168(R14), BP + VMOVDQU (BP)(R15*1), Y7 + VMOVDQU 448(CX), Y9 + VMOVDQU 480(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 1 to 8 outputs + VMOVDQU (SI), Y11 + ADDQ $0x20, SI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 512(CX), Y9 + VMOVDQU 544(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 576(CX), Y9 + VMOVDQU 608(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 640(CX), Y9 + VMOVDQU 672(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 704(CX), Y9 + VMOVDQU 736(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 768(CX), Y9 + VMOVDQU 800(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 832(CX), Y9 + VMOVDQU 864(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 896(CX), Y9 + VMOVDQU 928(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 960(CX), Y9 + VMOVDQU 992(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 2 to 8 outputs + VMOVDQU (DI), Y11 + ADDQ $0x20, DI + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1024(CX), Y9 + VMOVDQU 1056(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1088(CX), Y9 + VMOVDQU 1120(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1152(CX), Y9 + VMOVDQU 1184(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1216(CX), Y9 + VMOVDQU 1248(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1280(CX), Y9 + VMOVDQU 1312(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1344(CX), Y9 + VMOVDQU 1376(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1408(CX), Y9 + VMOVDQU 1440(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1472(CX), Y9 + VMOVDQU 1504(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 3 to 8 outputs + VMOVDQU (R8), Y11 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 1536(CX), Y9 + VMOVDQU 1568(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 1600(CX), Y9 + VMOVDQU 1632(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 1664(CX), Y9 + VMOVDQU 1696(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 1728(CX), Y9 + VMOVDQU 1760(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 1792(CX), Y9 + VMOVDQU 1824(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 1856(CX), Y9 + VMOVDQU 1888(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 1920(CX), Y9 + VMOVDQU 1952(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 1984(CX), Y9 + VMOVDQU 2016(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 4 to 8 outputs + VMOVDQU (R9), Y11 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 2048(CX), Y9 + VMOVDQU 2080(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 2112(CX), Y9 + VMOVDQU 2144(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 2176(CX), Y9 + VMOVDQU 2208(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 2240(CX), Y9 + VMOVDQU 2272(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 2304(CX), Y9 + VMOVDQU 2336(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 2368(CX), Y9 + VMOVDQU 2400(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 2432(CX), Y9 + VMOVDQU 2464(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 2496(CX), Y9 + VMOVDQU 2528(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 5 to 8 outputs + VMOVDQU (R10), Y11 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 2560(CX), Y9 + VMOVDQU 2592(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 2624(CX), Y9 + VMOVDQU 2656(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 2688(CX), Y9 + VMOVDQU 2720(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 2752(CX), Y9 + VMOVDQU 2784(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 2816(CX), Y9 + VMOVDQU 2848(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 2880(CX), Y9 + VMOVDQU 2912(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 2944(CX), Y9 + VMOVDQU 2976(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 3008(CX), Y9 + VMOVDQU 3040(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 6 to 8 outputs + VMOVDQU (R11), Y11 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 3072(CX), Y9 + VMOVDQU 3104(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 3136(CX), Y9 + VMOVDQU 3168(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 3200(CX), Y9 + VMOVDQU 3232(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 3264(CX), Y9 + VMOVDQU 3296(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 3328(CX), Y9 + VMOVDQU 3360(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 3392(CX), Y9 + VMOVDQU 3424(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 3456(CX), Y9 + VMOVDQU 3488(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 3520(CX), Y9 + VMOVDQU 3552(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 7 to 8 outputs + VMOVDQU (R12), Y11 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 3584(CX), Y9 + VMOVDQU 3616(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 3648(CX), Y9 + VMOVDQU 3680(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 3712(CX), Y9 + VMOVDQU 3744(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 3776(CX), Y9 + VMOVDQU 3808(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 3840(CX), Y9 + VMOVDQU 3872(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 3904(CX), Y9 + VMOVDQU 3936(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 3968(CX), Y9 + VMOVDQU 4000(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 4032(CX), Y9 + VMOVDQU 4064(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 8 to 8 outputs + VMOVDQU (R13), Y11 + ADDQ $0x20, R13 + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 4096(CX), Y9 + VMOVDQU 4128(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 4160(CX), Y9 + VMOVDQU 4192(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 4224(CX), Y9 + VMOVDQU 4256(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 4288(CX), Y9 + VMOVDQU 4320(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 4352(CX), Y9 + VMOVDQU 4384(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 4416(CX), Y9 + VMOVDQU 4448(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 4480(CX), Y9 + VMOVDQU 4512(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 4544(CX), Y9 + VMOVDQU 4576(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Load and process 32 bytes from input 9 to 8 outputs + VMOVDQU (DX), Y11 + ADDQ $0x20, DX + VPSRLQ $0x04, Y11, Y12 + VPAND Y8, Y11, Y11 + VPAND Y8, Y12, Y12 + VMOVDQU 4608(CX), Y9 + VMOVDQU 4640(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y0, Y0 + VMOVDQU 4672(CX), Y9 + VMOVDQU 4704(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y1, Y1 + VMOVDQU 4736(CX), Y9 + VMOVDQU 4768(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y2, Y2 + VMOVDQU 4800(CX), Y9 + VMOVDQU 4832(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y3, Y3 + VMOVDQU 4864(CX), Y9 + VMOVDQU 4896(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y4, Y4 + VMOVDQU 4928(CX), Y9 + VMOVDQU 4960(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y5, Y5 + VMOVDQU 4992(CX), Y9 + VMOVDQU 5024(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y6, Y6 + VMOVDQU 5056(CX), Y9 + VMOVDQU 5088(CX), Y10 + VPSHUFB Y11, Y9, Y9 + VPSHUFB Y12, Y10, Y10 + VPXOR Y9, Y10, Y9 + VPXOR Y9, Y7, Y7 + + // Store 8 outputs + MOVQ (R14), BP + VMOVDQU Y0, (BP)(R15*1) + MOVQ 24(R14), BP + VMOVDQU Y1, (BP)(R15*1) + MOVQ 48(R14), BP + VMOVDQU Y2, (BP)(R15*1) + MOVQ 72(R14), BP + VMOVDQU Y3, (BP)(R15*1) + MOVQ 96(R14), BP + VMOVDQU Y4, (BP)(R15*1) + MOVQ 120(R14), BP + VMOVDQU Y5, (BP)(R15*1) + MOVQ 144(R14), BP + VMOVDQU Y6, (BP)(R15*1) + MOVQ 168(R14), BP + VMOVDQU Y7, (BP)(R15*1) + + // Prepare for next loop + ADDQ $0x20, R15 + DECQ AX + JNZ mulAvxTwo_10x8Xor_loop + VZEROUPPER + +mulAvxTwo_10x8Xor_end: + RET + +// func mulAvxTwo_10x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x9(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 194 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_10x9_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), R13 + MOVQ 216(DX), DX + MOVQ out_base+48(FP), R14 + MOVQ start+72(FP), R15 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, DX + MOVQ $0x0000000f, BP + MOVQ BP, X9 + VPBROADCASTB X9, Y9 + +mulAvxTwo_10x9_loop: + // Load and process 32 bytes from input 0 to 9 outputs + VMOVDQU (BX), Y12 + ADDQ $0x20, BX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU (CX), Y10 + VMOVDQU 32(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y0 + VMOVDQU 64(CX), Y10 + VMOVDQU 96(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y1 + VMOVDQU 128(CX), Y10 + VMOVDQU 160(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y2 + VMOVDQU 192(CX), Y10 + VMOVDQU 224(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y3 + VMOVDQU 256(CX), Y10 + VMOVDQU 288(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y4 + VMOVDQU 320(CX), Y10 + VMOVDQU 352(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y5 + VMOVDQU 384(CX), Y10 + VMOVDQU 416(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y6 + VMOVDQU 448(CX), Y10 + VMOVDQU 480(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y7 + VMOVDQU 512(CX), Y10 + VMOVDQU 544(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y8 + + // Load and process 32 bytes from input 1 to 9 outputs + VMOVDQU (SI), Y12 + ADDQ $0x20, SI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 576(CX), Y10 + VMOVDQU 608(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 640(CX), Y10 + VMOVDQU 672(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 704(CX), Y10 + VMOVDQU 736(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 768(CX), Y10 + VMOVDQU 800(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 832(CX), Y10 + VMOVDQU 864(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 896(CX), Y10 + VMOVDQU 928(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 960(CX), Y10 + VMOVDQU 992(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1024(CX), Y10 + VMOVDQU 1056(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1088(CX), Y10 + VMOVDQU 1120(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 2 to 9 outputs + VMOVDQU (DI), Y12 + ADDQ $0x20, DI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1152(CX), Y10 + VMOVDQU 1184(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1216(CX), Y10 + VMOVDQU 1248(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1280(CX), Y10 + VMOVDQU 1312(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1344(CX), Y10 + VMOVDQU 1376(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1408(CX), Y10 + VMOVDQU 1440(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 1472(CX), Y10 + VMOVDQU 1504(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 1536(CX), Y10 + VMOVDQU 1568(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1600(CX), Y10 + VMOVDQU 1632(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1664(CX), Y10 + VMOVDQU 1696(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 3 to 9 outputs + VMOVDQU (R8), Y12 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1728(CX), Y10 + VMOVDQU 1760(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1792(CX), Y10 + VMOVDQU 1824(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1856(CX), Y10 + VMOVDQU 1888(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1920(CX), Y10 + VMOVDQU 1952(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1984(CX), Y10 + VMOVDQU 2016(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2048(CX), Y10 + VMOVDQU 2080(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2112(CX), Y10 + VMOVDQU 2144(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2176(CX), Y10 + VMOVDQU 2208(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2240(CX), Y10 + VMOVDQU 2272(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 4 to 9 outputs + VMOVDQU (R9), Y12 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 2304(CX), Y10 + VMOVDQU 2336(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 2368(CX), Y10 + VMOVDQU 2400(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 2432(CX), Y10 + VMOVDQU 2464(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 2496(CX), Y10 + VMOVDQU 2528(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 2560(CX), Y10 + VMOVDQU 2592(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2624(CX), Y10 + VMOVDQU 2656(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2688(CX), Y10 + VMOVDQU 2720(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2752(CX), Y10 + VMOVDQU 2784(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2816(CX), Y10 + VMOVDQU 2848(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 5 to 9 outputs + VMOVDQU (R10), Y12 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 2880(CX), Y10 + VMOVDQU 2912(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 2944(CX), Y10 + VMOVDQU 2976(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 3008(CX), Y10 + VMOVDQU 3040(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 3072(CX), Y10 + VMOVDQU 3104(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 3136(CX), Y10 + VMOVDQU 3168(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 3200(CX), Y10 + VMOVDQU 3232(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 3264(CX), Y10 + VMOVDQU 3296(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 3328(CX), Y10 + VMOVDQU 3360(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 3392(CX), Y10 + VMOVDQU 3424(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 6 to 9 outputs + VMOVDQU (R11), Y12 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 3456(CX), Y10 + VMOVDQU 3488(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 3520(CX), Y10 + VMOVDQU 3552(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 3584(CX), Y10 + VMOVDQU 3616(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 3648(CX), Y10 + VMOVDQU 3680(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 3712(CX), Y10 + VMOVDQU 3744(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 3776(CX), Y10 + VMOVDQU 3808(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 3840(CX), Y10 + VMOVDQU 3872(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 3904(CX), Y10 + VMOVDQU 3936(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 3968(CX), Y10 + VMOVDQU 4000(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 7 to 9 outputs + VMOVDQU (R12), Y12 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 4032(CX), Y10 + VMOVDQU 4064(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 4096(CX), Y10 + VMOVDQU 4128(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 4160(CX), Y10 + VMOVDQU 4192(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 4224(CX), Y10 + VMOVDQU 4256(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 4288(CX), Y10 + VMOVDQU 4320(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 4352(CX), Y10 + VMOVDQU 4384(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 4416(CX), Y10 + VMOVDQU 4448(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 4480(CX), Y10 + VMOVDQU 4512(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 4544(CX), Y10 + VMOVDQU 4576(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 8 to 9 outputs + VMOVDQU (R13), Y12 + ADDQ $0x20, R13 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 4608(CX), Y10 + VMOVDQU 4640(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 4672(CX), Y10 + VMOVDQU 4704(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 4736(CX), Y10 + VMOVDQU 4768(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 4800(CX), Y10 + VMOVDQU 4832(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 4864(CX), Y10 + VMOVDQU 4896(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 4928(CX), Y10 + VMOVDQU 4960(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 4992(CX), Y10 + VMOVDQU 5024(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 5056(CX), Y10 + VMOVDQU 5088(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 5120(CX), Y10 + VMOVDQU 5152(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 9 to 9 outputs + VMOVDQU (DX), Y12 + ADDQ $0x20, DX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 5184(CX), Y10 + VMOVDQU 5216(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 5248(CX), Y10 + VMOVDQU 5280(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 5312(CX), Y10 + VMOVDQU 5344(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 5376(CX), Y10 + VMOVDQU 5408(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 5440(CX), Y10 + VMOVDQU 5472(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 5504(CX), Y10 + VMOVDQU 5536(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 5568(CX), Y10 + VMOVDQU 5600(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 5632(CX), Y10 + VMOVDQU 5664(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 5696(CX), Y10 + VMOVDQU 5728(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Store 9 outputs + MOVQ (R14), BP + VMOVDQU Y0, (BP)(R15*1) + MOVQ 24(R14), BP + VMOVDQU Y1, (BP)(R15*1) + MOVQ 48(R14), BP + VMOVDQU Y2, (BP)(R15*1) + MOVQ 72(R14), BP + VMOVDQU Y3, (BP)(R15*1) + MOVQ 96(R14), BP + VMOVDQU Y4, (BP)(R15*1) + MOVQ 120(R14), BP + VMOVDQU Y5, (BP)(R15*1) + MOVQ 144(R14), BP + VMOVDQU Y6, (BP)(R15*1) + MOVQ 168(R14), BP + VMOVDQU Y7, (BP)(R15*1) + MOVQ 192(R14), BP + VMOVDQU Y8, (BP)(R15*1) + + // Prepare for next loop + ADDQ $0x20, R15 + DECQ AX + JNZ mulAvxTwo_10x9_loop + VZEROUPPER + +mulAvxTwo_10x9_end: + RET + +// func mulAvxTwo_10x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x9Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 194 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_10x9Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), R13 + MOVQ 216(DX), DX + MOVQ out_base+48(FP), R14 + MOVQ start+72(FP), R15 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, DX + MOVQ $0x0000000f, BP + MOVQ BP, X9 + VPBROADCASTB X9, Y9 + +mulAvxTwo_10x9Xor_loop: + // Load and process 32 bytes from input 0 to 9 outputs + VMOVDQU (BX), Y12 + ADDQ $0x20, BX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + MOVQ (R14), BP + VMOVDQU (BP)(R15*1), Y0 + VMOVDQU (CX), Y10 + VMOVDQU 32(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + MOVQ 24(R14), BP + VMOVDQU (BP)(R15*1), Y1 + VMOVDQU 64(CX), Y10 + VMOVDQU 96(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + MOVQ 48(R14), BP + VMOVDQU (BP)(R15*1), Y2 + VMOVDQU 128(CX), Y10 + VMOVDQU 160(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + MOVQ 72(R14), BP + VMOVDQU (BP)(R15*1), Y3 + VMOVDQU 192(CX), Y10 + VMOVDQU 224(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + MOVQ 96(R14), BP + VMOVDQU (BP)(R15*1), Y4 + VMOVDQU 256(CX), Y10 + VMOVDQU 288(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + MOVQ 120(R14), BP + VMOVDQU (BP)(R15*1), Y5 + VMOVDQU 320(CX), Y10 + VMOVDQU 352(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + MOVQ 144(R14), BP + VMOVDQU (BP)(R15*1), Y6 + VMOVDQU 384(CX), Y10 + VMOVDQU 416(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + MOVQ 168(R14), BP + VMOVDQU (BP)(R15*1), Y7 + VMOVDQU 448(CX), Y10 + VMOVDQU 480(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + MOVQ 192(R14), BP + VMOVDQU (BP)(R15*1), Y8 + VMOVDQU 512(CX), Y10 + VMOVDQU 544(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 1 to 9 outputs + VMOVDQU (SI), Y12 + ADDQ $0x20, SI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 576(CX), Y10 + VMOVDQU 608(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 640(CX), Y10 + VMOVDQU 672(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 704(CX), Y10 + VMOVDQU 736(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 768(CX), Y10 + VMOVDQU 800(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 832(CX), Y10 + VMOVDQU 864(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 896(CX), Y10 + VMOVDQU 928(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 960(CX), Y10 + VMOVDQU 992(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1024(CX), Y10 + VMOVDQU 1056(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1088(CX), Y10 + VMOVDQU 1120(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 2 to 9 outputs + VMOVDQU (DI), Y12 + ADDQ $0x20, DI + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1152(CX), Y10 + VMOVDQU 1184(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1216(CX), Y10 + VMOVDQU 1248(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1280(CX), Y10 + VMOVDQU 1312(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1344(CX), Y10 + VMOVDQU 1376(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1408(CX), Y10 + VMOVDQU 1440(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 1472(CX), Y10 + VMOVDQU 1504(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 1536(CX), Y10 + VMOVDQU 1568(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 1600(CX), Y10 + VMOVDQU 1632(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 1664(CX), Y10 + VMOVDQU 1696(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 3 to 9 outputs + VMOVDQU (R8), Y12 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 1728(CX), Y10 + VMOVDQU 1760(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 1792(CX), Y10 + VMOVDQU 1824(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 1856(CX), Y10 + VMOVDQU 1888(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 1920(CX), Y10 + VMOVDQU 1952(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 1984(CX), Y10 + VMOVDQU 2016(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2048(CX), Y10 + VMOVDQU 2080(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2112(CX), Y10 + VMOVDQU 2144(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2176(CX), Y10 + VMOVDQU 2208(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2240(CX), Y10 + VMOVDQU 2272(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 4 to 9 outputs + VMOVDQU (R9), Y12 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 2304(CX), Y10 + VMOVDQU 2336(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 2368(CX), Y10 + VMOVDQU 2400(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 2432(CX), Y10 + VMOVDQU 2464(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 2496(CX), Y10 + VMOVDQU 2528(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 2560(CX), Y10 + VMOVDQU 2592(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 2624(CX), Y10 + VMOVDQU 2656(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 2688(CX), Y10 + VMOVDQU 2720(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 2752(CX), Y10 + VMOVDQU 2784(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 2816(CX), Y10 + VMOVDQU 2848(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 5 to 9 outputs + VMOVDQU (R10), Y12 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 2880(CX), Y10 + VMOVDQU 2912(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 2944(CX), Y10 + VMOVDQU 2976(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 3008(CX), Y10 + VMOVDQU 3040(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 3072(CX), Y10 + VMOVDQU 3104(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 3136(CX), Y10 + VMOVDQU 3168(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 3200(CX), Y10 + VMOVDQU 3232(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 3264(CX), Y10 + VMOVDQU 3296(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 3328(CX), Y10 + VMOVDQU 3360(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 3392(CX), Y10 + VMOVDQU 3424(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 6 to 9 outputs + VMOVDQU (R11), Y12 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 3456(CX), Y10 + VMOVDQU 3488(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 3520(CX), Y10 + VMOVDQU 3552(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 3584(CX), Y10 + VMOVDQU 3616(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 3648(CX), Y10 + VMOVDQU 3680(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 3712(CX), Y10 + VMOVDQU 3744(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 3776(CX), Y10 + VMOVDQU 3808(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 3840(CX), Y10 + VMOVDQU 3872(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 3904(CX), Y10 + VMOVDQU 3936(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 3968(CX), Y10 + VMOVDQU 4000(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 7 to 9 outputs + VMOVDQU (R12), Y12 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 4032(CX), Y10 + VMOVDQU 4064(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 4096(CX), Y10 + VMOVDQU 4128(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 4160(CX), Y10 + VMOVDQU 4192(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 4224(CX), Y10 + VMOVDQU 4256(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 4288(CX), Y10 + VMOVDQU 4320(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 4352(CX), Y10 + VMOVDQU 4384(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 4416(CX), Y10 + VMOVDQU 4448(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 4480(CX), Y10 + VMOVDQU 4512(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 4544(CX), Y10 + VMOVDQU 4576(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 8 to 9 outputs + VMOVDQU (R13), Y12 + ADDQ $0x20, R13 + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 4608(CX), Y10 + VMOVDQU 4640(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 4672(CX), Y10 + VMOVDQU 4704(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 4736(CX), Y10 + VMOVDQU 4768(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 4800(CX), Y10 + VMOVDQU 4832(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 4864(CX), Y10 + VMOVDQU 4896(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 4928(CX), Y10 + VMOVDQU 4960(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 4992(CX), Y10 + VMOVDQU 5024(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 5056(CX), Y10 + VMOVDQU 5088(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 5120(CX), Y10 + VMOVDQU 5152(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Load and process 32 bytes from input 9 to 9 outputs + VMOVDQU (DX), Y12 + ADDQ $0x20, DX + VPSRLQ $0x04, Y12, Y13 + VPAND Y9, Y12, Y12 + VPAND Y9, Y13, Y13 + VMOVDQU 5184(CX), Y10 + VMOVDQU 5216(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y0, Y0 + VMOVDQU 5248(CX), Y10 + VMOVDQU 5280(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y1, Y1 + VMOVDQU 5312(CX), Y10 + VMOVDQU 5344(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y2, Y2 + VMOVDQU 5376(CX), Y10 + VMOVDQU 5408(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y3, Y3 + VMOVDQU 5440(CX), Y10 + VMOVDQU 5472(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y4, Y4 + VMOVDQU 5504(CX), Y10 + VMOVDQU 5536(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y5, Y5 + VMOVDQU 5568(CX), Y10 + VMOVDQU 5600(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y6, Y6 + VMOVDQU 5632(CX), Y10 + VMOVDQU 5664(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y7, Y7 + VMOVDQU 5696(CX), Y10 + VMOVDQU 5728(CX), Y11 + VPSHUFB Y12, Y10, Y10 + VPSHUFB Y13, Y11, Y11 + VPXOR Y10, Y11, Y10 + VPXOR Y10, Y8, Y8 + + // Store 9 outputs + MOVQ (R14), BP + VMOVDQU Y0, (BP)(R15*1) + MOVQ 24(R14), BP + VMOVDQU Y1, (BP)(R15*1) + MOVQ 48(R14), BP + VMOVDQU Y2, (BP)(R15*1) + MOVQ 72(R14), BP + VMOVDQU Y3, (BP)(R15*1) + MOVQ 96(R14), BP + VMOVDQU Y4, (BP)(R15*1) + MOVQ 120(R14), BP + VMOVDQU Y5, (BP)(R15*1) + MOVQ 144(R14), BP + VMOVDQU Y6, (BP)(R15*1) + MOVQ 168(R14), BP + VMOVDQU Y7, (BP)(R15*1) + MOVQ 192(R14), BP + VMOVDQU Y8, (BP)(R15*1) + + // Prepare for next loop + ADDQ $0x20, R15 + DECQ AX + JNZ mulAvxTwo_10x9Xor_loop + VZEROUPPER + +mulAvxTwo_10x9Xor_end: + RET + +// func mulAvxTwo_10x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x10(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 215 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_10x10_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), R13 + MOVQ 216(DX), DX + MOVQ out_base+48(FP), R14 + MOVQ start+72(FP), R15 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, DX + MOVQ $0x0000000f, BP + MOVQ BP, X10 + VPBROADCASTB X10, Y10 + +mulAvxTwo_10x10_loop: + // Load and process 32 bytes from input 0 to 10 outputs + VMOVDQU (BX), Y13 + ADDQ $0x20, BX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU (CX), Y11 + VMOVDQU 32(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y0 + VMOVDQU 64(CX), Y11 + VMOVDQU 96(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y1 + VMOVDQU 128(CX), Y11 + VMOVDQU 160(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y2 + VMOVDQU 192(CX), Y11 + VMOVDQU 224(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y3 + VMOVDQU 256(CX), Y11 + VMOVDQU 288(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y4 + VMOVDQU 320(CX), Y11 + VMOVDQU 352(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y5 + VMOVDQU 384(CX), Y11 + VMOVDQU 416(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y6 + VMOVDQU 448(CX), Y11 + VMOVDQU 480(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y7 + VMOVDQU 512(CX), Y11 + VMOVDQU 544(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y8 + VMOVDQU 576(CX), Y11 + VMOVDQU 608(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y9 + + // Load and process 32 bytes from input 1 to 10 outputs + VMOVDQU (SI), Y13 + ADDQ $0x20, SI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 640(CX), Y11 + VMOVDQU 672(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 704(CX), Y11 + VMOVDQU 736(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 768(CX), Y11 + VMOVDQU 800(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 832(CX), Y11 + VMOVDQU 864(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 896(CX), Y11 + VMOVDQU 928(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 960(CX), Y11 + VMOVDQU 992(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1024(CX), Y11 + VMOVDQU 1056(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1088(CX), Y11 + VMOVDQU 1120(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1152(CX), Y11 + VMOVDQU 1184(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1216(CX), Y11 + VMOVDQU 1248(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 2 to 10 outputs + VMOVDQU (DI), Y13 + ADDQ $0x20, DI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1280(CX), Y11 + VMOVDQU 1312(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1344(CX), Y11 + VMOVDQU 1376(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 1408(CX), Y11 + VMOVDQU 1440(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 1472(CX), Y11 + VMOVDQU 1504(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 1536(CX), Y11 + VMOVDQU 1568(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 1600(CX), Y11 + VMOVDQU 1632(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1664(CX), Y11 + VMOVDQU 1696(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1728(CX), Y11 + VMOVDQU 1760(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1792(CX), Y11 + VMOVDQU 1824(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1856(CX), Y11 + VMOVDQU 1888(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 3 to 10 outputs + VMOVDQU (R8), Y13 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1920(CX), Y11 + VMOVDQU 1952(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1984(CX), Y11 + VMOVDQU 2016(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2048(CX), Y11 + VMOVDQU 2080(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2112(CX), Y11 + VMOVDQU 2144(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2176(CX), Y11 + VMOVDQU 2208(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2240(CX), Y11 + VMOVDQU 2272(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2304(CX), Y11 + VMOVDQU 2336(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 2368(CX), Y11 + VMOVDQU 2400(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 2432(CX), Y11 + VMOVDQU 2464(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 2496(CX), Y11 + VMOVDQU 2528(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 4 to 10 outputs + VMOVDQU (R9), Y13 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 2560(CX), Y11 + VMOVDQU 2592(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 2624(CX), Y11 + VMOVDQU 2656(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2688(CX), Y11 + VMOVDQU 2720(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2752(CX), Y11 + VMOVDQU 2784(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2816(CX), Y11 + VMOVDQU 2848(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2880(CX), Y11 + VMOVDQU 2912(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2944(CX), Y11 + VMOVDQU 2976(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 3008(CX), Y11 + VMOVDQU 3040(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 3072(CX), Y11 + VMOVDQU 3104(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 3136(CX), Y11 + VMOVDQU 3168(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 5 to 10 outputs + VMOVDQU (R10), Y13 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 3200(CX), Y11 + VMOVDQU 3232(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 3264(CX), Y11 + VMOVDQU 3296(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 3328(CX), Y11 + VMOVDQU 3360(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 3392(CX), Y11 + VMOVDQU 3424(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 3456(CX), Y11 + VMOVDQU 3488(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 3520(CX), Y11 + VMOVDQU 3552(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 3584(CX), Y11 + VMOVDQU 3616(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 3648(CX), Y11 + VMOVDQU 3680(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 3712(CX), Y11 + VMOVDQU 3744(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 3776(CX), Y11 + VMOVDQU 3808(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 6 to 10 outputs + VMOVDQU (R11), Y13 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 3840(CX), Y11 + VMOVDQU 3872(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 3904(CX), Y11 + VMOVDQU 3936(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 3968(CX), Y11 + VMOVDQU 4000(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 4032(CX), Y11 + VMOVDQU 4064(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 4096(CX), Y11 + VMOVDQU 4128(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 4160(CX), Y11 + VMOVDQU 4192(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 4224(CX), Y11 + VMOVDQU 4256(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 4288(CX), Y11 + VMOVDQU 4320(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 4352(CX), Y11 + VMOVDQU 4384(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 4416(CX), Y11 + VMOVDQU 4448(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 7 to 10 outputs + VMOVDQU (R12), Y13 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 4480(CX), Y11 + VMOVDQU 4512(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 4544(CX), Y11 + VMOVDQU 4576(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 4608(CX), Y11 + VMOVDQU 4640(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 4672(CX), Y11 + VMOVDQU 4704(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 4736(CX), Y11 + VMOVDQU 4768(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 4800(CX), Y11 + VMOVDQU 4832(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 4864(CX), Y11 + VMOVDQU 4896(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 4928(CX), Y11 + VMOVDQU 4960(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 4992(CX), Y11 + VMOVDQU 5024(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 5056(CX), Y11 + VMOVDQU 5088(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 8 to 10 outputs + VMOVDQU (R13), Y13 + ADDQ $0x20, R13 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 5120(CX), Y11 + VMOVDQU 5152(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 5184(CX), Y11 + VMOVDQU 5216(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 5248(CX), Y11 + VMOVDQU 5280(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 5312(CX), Y11 + VMOVDQU 5344(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 5376(CX), Y11 + VMOVDQU 5408(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 5440(CX), Y11 + VMOVDQU 5472(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 5504(CX), Y11 + VMOVDQU 5536(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 5568(CX), Y11 + VMOVDQU 5600(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 5632(CX), Y11 + VMOVDQU 5664(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 5696(CX), Y11 + VMOVDQU 5728(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 9 to 10 outputs + VMOVDQU (DX), Y13 + ADDQ $0x20, DX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 5760(CX), Y11 + VMOVDQU 5792(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 5824(CX), Y11 + VMOVDQU 5856(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 5888(CX), Y11 + VMOVDQU 5920(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 5952(CX), Y11 + VMOVDQU 5984(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 6016(CX), Y11 + VMOVDQU 6048(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 6080(CX), Y11 + VMOVDQU 6112(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 6144(CX), Y11 + VMOVDQU 6176(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 6208(CX), Y11 + VMOVDQU 6240(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 6272(CX), Y11 + VMOVDQU 6304(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 6336(CX), Y11 + VMOVDQU 6368(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Store 10 outputs + MOVQ (R14), BP + VMOVDQU Y0, (BP)(R15*1) + MOVQ 24(R14), BP + VMOVDQU Y1, (BP)(R15*1) + MOVQ 48(R14), BP + VMOVDQU Y2, (BP)(R15*1) + MOVQ 72(R14), BP + VMOVDQU Y3, (BP)(R15*1) + MOVQ 96(R14), BP + VMOVDQU Y4, (BP)(R15*1) + MOVQ 120(R14), BP + VMOVDQU Y5, (BP)(R15*1) + MOVQ 144(R14), BP + VMOVDQU Y6, (BP)(R15*1) + MOVQ 168(R14), BP + VMOVDQU Y7, (BP)(R15*1) + MOVQ 192(R14), BP + VMOVDQU Y8, (BP)(R15*1) + MOVQ 216(R14), BP + VMOVDQU Y9, (BP)(R15*1) + + // Prepare for next loop + ADDQ $0x20, R15 + DECQ AX + JNZ mulAvxTwo_10x10_loop + VZEROUPPER + +mulAvxTwo_10x10_end: + RET + +// func mulAvxTwo_10x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulAvxTwo_10x10Xor(SB), NOSPLIT, $8-88 + // Loading no tables to registers + // Destination kept on stack + // Full registers estimated 215 YMM used + MOVQ n+80(FP), AX + MOVQ matrix_base+0(FP), CX + SHRQ $0x05, AX + TESTQ AX, AX + JZ mulAvxTwo_10x10Xor_end + MOVQ in_base+24(FP), DX + MOVQ (DX), BX + MOVQ 24(DX), SI + MOVQ 48(DX), DI + MOVQ 72(DX), R8 + MOVQ 96(DX), R9 + MOVQ 120(DX), R10 + MOVQ 144(DX), R11 + MOVQ 168(DX), R12 + MOVQ 192(DX), R13 + MOVQ 216(DX), DX + MOVQ out_base+48(FP), R14 + MOVQ start+72(FP), R15 + + // Add start offset to input + ADDQ R15, BX + ADDQ R15, SI + ADDQ R15, DI + ADDQ R15, R8 + ADDQ R15, R9 + ADDQ R15, R10 + ADDQ R15, R11 + ADDQ R15, R12 + ADDQ R15, R13 + ADDQ R15, DX + MOVQ $0x0000000f, BP + MOVQ BP, X10 + VPBROADCASTB X10, Y10 + +mulAvxTwo_10x10Xor_loop: + // Load and process 32 bytes from input 0 to 10 outputs + VMOVDQU (BX), Y13 + ADDQ $0x20, BX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + MOVQ (R14), BP + VMOVDQU (BP)(R15*1), Y0 + VMOVDQU (CX), Y11 + VMOVDQU 32(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + MOVQ 24(R14), BP + VMOVDQU (BP)(R15*1), Y1 + VMOVDQU 64(CX), Y11 + VMOVDQU 96(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + MOVQ 48(R14), BP + VMOVDQU (BP)(R15*1), Y2 + VMOVDQU 128(CX), Y11 + VMOVDQU 160(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + MOVQ 72(R14), BP + VMOVDQU (BP)(R15*1), Y3 + VMOVDQU 192(CX), Y11 + VMOVDQU 224(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + MOVQ 96(R14), BP + VMOVDQU (BP)(R15*1), Y4 + VMOVDQU 256(CX), Y11 + VMOVDQU 288(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + MOVQ 120(R14), BP + VMOVDQU (BP)(R15*1), Y5 + VMOVDQU 320(CX), Y11 + VMOVDQU 352(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + MOVQ 144(R14), BP + VMOVDQU (BP)(R15*1), Y6 + VMOVDQU 384(CX), Y11 + VMOVDQU 416(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + MOVQ 168(R14), BP + VMOVDQU (BP)(R15*1), Y7 + VMOVDQU 448(CX), Y11 + VMOVDQU 480(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + MOVQ 192(R14), BP + VMOVDQU (BP)(R15*1), Y8 + VMOVDQU 512(CX), Y11 + VMOVDQU 544(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + MOVQ 216(R14), BP + VMOVDQU (BP)(R15*1), Y9 + VMOVDQU 576(CX), Y11 + VMOVDQU 608(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 1 to 10 outputs + VMOVDQU (SI), Y13 + ADDQ $0x20, SI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 640(CX), Y11 + VMOVDQU 672(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 704(CX), Y11 + VMOVDQU 736(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 768(CX), Y11 + VMOVDQU 800(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 832(CX), Y11 + VMOVDQU 864(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 896(CX), Y11 + VMOVDQU 928(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 960(CX), Y11 + VMOVDQU 992(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1024(CX), Y11 + VMOVDQU 1056(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1088(CX), Y11 + VMOVDQU 1120(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1152(CX), Y11 + VMOVDQU 1184(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1216(CX), Y11 + VMOVDQU 1248(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 2 to 10 outputs + VMOVDQU (DI), Y13 + ADDQ $0x20, DI + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1280(CX), Y11 + VMOVDQU 1312(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1344(CX), Y11 + VMOVDQU 1376(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 1408(CX), Y11 + VMOVDQU 1440(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 1472(CX), Y11 + VMOVDQU 1504(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 1536(CX), Y11 + VMOVDQU 1568(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 1600(CX), Y11 + VMOVDQU 1632(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 1664(CX), Y11 + VMOVDQU 1696(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 1728(CX), Y11 + VMOVDQU 1760(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 1792(CX), Y11 + VMOVDQU 1824(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 1856(CX), Y11 + VMOVDQU 1888(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 3 to 10 outputs + VMOVDQU (R8), Y13 + ADDQ $0x20, R8 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 1920(CX), Y11 + VMOVDQU 1952(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 1984(CX), Y11 + VMOVDQU 2016(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2048(CX), Y11 + VMOVDQU 2080(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2112(CX), Y11 + VMOVDQU 2144(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2176(CX), Y11 + VMOVDQU 2208(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2240(CX), Y11 + VMOVDQU 2272(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2304(CX), Y11 + VMOVDQU 2336(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 2368(CX), Y11 + VMOVDQU 2400(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 2432(CX), Y11 + VMOVDQU 2464(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 2496(CX), Y11 + VMOVDQU 2528(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 4 to 10 outputs + VMOVDQU (R9), Y13 + ADDQ $0x20, R9 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 2560(CX), Y11 + VMOVDQU 2592(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 2624(CX), Y11 + VMOVDQU 2656(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 2688(CX), Y11 + VMOVDQU 2720(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 2752(CX), Y11 + VMOVDQU 2784(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 2816(CX), Y11 + VMOVDQU 2848(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 2880(CX), Y11 + VMOVDQU 2912(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 2944(CX), Y11 + VMOVDQU 2976(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 3008(CX), Y11 + VMOVDQU 3040(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 3072(CX), Y11 + VMOVDQU 3104(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 3136(CX), Y11 + VMOVDQU 3168(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 5 to 10 outputs + VMOVDQU (R10), Y13 + ADDQ $0x20, R10 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 3200(CX), Y11 + VMOVDQU 3232(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 3264(CX), Y11 + VMOVDQU 3296(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 3328(CX), Y11 + VMOVDQU 3360(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 3392(CX), Y11 + VMOVDQU 3424(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 3456(CX), Y11 + VMOVDQU 3488(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 3520(CX), Y11 + VMOVDQU 3552(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 3584(CX), Y11 + VMOVDQU 3616(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 3648(CX), Y11 + VMOVDQU 3680(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 3712(CX), Y11 + VMOVDQU 3744(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 3776(CX), Y11 + VMOVDQU 3808(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 6 to 10 outputs + VMOVDQU (R11), Y13 + ADDQ $0x20, R11 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 3840(CX), Y11 + VMOVDQU 3872(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 3904(CX), Y11 + VMOVDQU 3936(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 3968(CX), Y11 + VMOVDQU 4000(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 4032(CX), Y11 + VMOVDQU 4064(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 4096(CX), Y11 + VMOVDQU 4128(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 4160(CX), Y11 + VMOVDQU 4192(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 4224(CX), Y11 + VMOVDQU 4256(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 4288(CX), Y11 + VMOVDQU 4320(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 4352(CX), Y11 + VMOVDQU 4384(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 4416(CX), Y11 + VMOVDQU 4448(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 7 to 10 outputs + VMOVDQU (R12), Y13 + ADDQ $0x20, R12 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 4480(CX), Y11 + VMOVDQU 4512(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 4544(CX), Y11 + VMOVDQU 4576(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 4608(CX), Y11 + VMOVDQU 4640(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 4672(CX), Y11 + VMOVDQU 4704(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 4736(CX), Y11 + VMOVDQU 4768(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 4800(CX), Y11 + VMOVDQU 4832(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 4864(CX), Y11 + VMOVDQU 4896(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 4928(CX), Y11 + VMOVDQU 4960(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 4992(CX), Y11 + VMOVDQU 5024(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 5056(CX), Y11 + VMOVDQU 5088(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 8 to 10 outputs + VMOVDQU (R13), Y13 + ADDQ $0x20, R13 + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 5120(CX), Y11 + VMOVDQU 5152(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 5184(CX), Y11 + VMOVDQU 5216(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 5248(CX), Y11 + VMOVDQU 5280(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 5312(CX), Y11 + VMOVDQU 5344(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 5376(CX), Y11 + VMOVDQU 5408(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 5440(CX), Y11 + VMOVDQU 5472(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 5504(CX), Y11 + VMOVDQU 5536(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 5568(CX), Y11 + VMOVDQU 5600(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 5632(CX), Y11 + VMOVDQU 5664(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 5696(CX), Y11 + VMOVDQU 5728(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Load and process 32 bytes from input 9 to 10 outputs + VMOVDQU (DX), Y13 + ADDQ $0x20, DX + VPSRLQ $0x04, Y13, Y14 + VPAND Y10, Y13, Y13 + VPAND Y10, Y14, Y14 + VMOVDQU 5760(CX), Y11 + VMOVDQU 5792(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y0, Y0 + VMOVDQU 5824(CX), Y11 + VMOVDQU 5856(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y1, Y1 + VMOVDQU 5888(CX), Y11 + VMOVDQU 5920(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y2, Y2 + VMOVDQU 5952(CX), Y11 + VMOVDQU 5984(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y3, Y3 + VMOVDQU 6016(CX), Y11 + VMOVDQU 6048(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y4, Y4 + VMOVDQU 6080(CX), Y11 + VMOVDQU 6112(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y5, Y5 + VMOVDQU 6144(CX), Y11 + VMOVDQU 6176(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y6, Y6 + VMOVDQU 6208(CX), Y11 + VMOVDQU 6240(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y7, Y7 + VMOVDQU 6272(CX), Y11 + VMOVDQU 6304(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y8, Y8 + VMOVDQU 6336(CX), Y11 + VMOVDQU 6368(CX), Y12 + VPSHUFB Y13, Y11, Y11 + VPSHUFB Y14, Y12, Y12 + VPXOR Y11, Y12, Y11 + VPXOR Y11, Y9, Y9 + + // Store 10 outputs + MOVQ (R14), BP + VMOVDQU Y0, (BP)(R15*1) + MOVQ 24(R14), BP + VMOVDQU Y1, (BP)(R15*1) + MOVQ 48(R14), BP + VMOVDQU Y2, (BP)(R15*1) + MOVQ 72(R14), BP + VMOVDQU Y3, (BP)(R15*1) + MOVQ 96(R14), BP + VMOVDQU Y4, (BP)(R15*1) + MOVQ 120(R14), BP + VMOVDQU Y5, (BP)(R15*1) + MOVQ 144(R14), BP + VMOVDQU Y6, (BP)(R15*1) + MOVQ 168(R14), BP + VMOVDQU Y7, (BP)(R15*1) + MOVQ 192(R14), BP + VMOVDQU Y8, (BP)(R15*1) + MOVQ 216(R14), BP + VMOVDQU Y9, (BP)(R15*1) + + // Prepare for next loop + ADDQ $0x20, R15 + DECQ AX + JNZ mulAvxTwo_10x10Xor_loop + VZEROUPPER + +mulAvxTwo_10x10Xor_end: + RET diff --git a/vendor/github.com/klauspost/reedsolomon/galois_gen_none.go b/vendor/github.com/klauspost/reedsolomon/galois_gen_none.go new file mode 100644 index 0000000..303d6a9 --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/galois_gen_none.go @@ -0,0 +1,18 @@ +//go:build !amd64 || noasm || appengine || gccgo || nogen +// +build !amd64 noasm appengine gccgo nogen + +package reedsolomon + +const maxAvx2Inputs = 1 +const maxAvx2Outputs = 1 +const minAvx2Size = 1 +const avxSizeMask = 0 +const avx2CodeGen = false + +func galMulSlicesAvx2(matrix []byte, in, out [][]byte, start, stop int) int { + panic("avx2 codegen not available") +} + +func galMulSlicesAvx2Xor(matrix []byte, in, out [][]byte, start, stop int) int { + panic("avx2 codegen not available") +} diff --git a/vendor/github.com/klauspost/reedsolomon/galois_gen_switch_amd64.go b/vendor/github.com/klauspost/reedsolomon/galois_gen_switch_amd64.go new file mode 100644 index 0000000..3078114 --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/galois_gen_switch_amd64.go @@ -0,0 +1,694 @@ +// Code generated by command: go generate gen.go. DO NOT EDIT. + +//go:build !appengine && !noasm && gc && !nogen +// +build !appengine,!noasm,gc,!nogen + +package reedsolomon + +import ( + "fmt" +) + +const ( + avx2CodeGen = true + maxAvx2Inputs = 10 + maxAvx2Outputs = 10 + minAvx2Size = 64 + avxSizeMask = maxInt - (minAvx2Size - 1) +) + +func galMulSlicesAvx2(matrix []byte, in, out [][]byte, start, stop int) int { + n := (stop - start) & avxSizeMask + + switch len(in) { + case 1: + switch len(out) { + case 1: + mulAvxTwo_1x1_64(matrix, in, out, start, n) + return n + case 2: + mulAvxTwo_1x2_64(matrix, in, out, start, n) + return n + case 3: + mulAvxTwo_1x3_64(matrix, in, out, start, n) + return n + case 4: + mulAvxTwo_1x4(matrix, in, out, start, n) + return n + case 5: + mulAvxTwo_1x5(matrix, in, out, start, n) + return n + case 6: + mulAvxTwo_1x6(matrix, in, out, start, n) + return n + case 7: + mulAvxTwo_1x7(matrix, in, out, start, n) + return n + case 8: + mulAvxTwo_1x8(matrix, in, out, start, n) + return n + case 9: + mulAvxTwo_1x9(matrix, in, out, start, n) + return n + case 10: + mulAvxTwo_1x10(matrix, in, out, start, n) + return n + } + case 2: + switch len(out) { + case 1: + mulAvxTwo_2x1_64(matrix, in, out, start, n) + return n + case 2: + mulAvxTwo_2x2_64(matrix, in, out, start, n) + return n + case 3: + mulAvxTwo_2x3_64(matrix, in, out, start, n) + return n + case 4: + mulAvxTwo_2x4(matrix, in, out, start, n) + return n + case 5: + mulAvxTwo_2x5(matrix, in, out, start, n) + return n + case 6: + mulAvxTwo_2x6(matrix, in, out, start, n) + return n + case 7: + mulAvxTwo_2x7(matrix, in, out, start, n) + return n + case 8: + mulAvxTwo_2x8(matrix, in, out, start, n) + return n + case 9: + mulAvxTwo_2x9(matrix, in, out, start, n) + return n + case 10: + mulAvxTwo_2x10(matrix, in, out, start, n) + return n + } + case 3: + switch len(out) { + case 1: + mulAvxTwo_3x1_64(matrix, in, out, start, n) + return n + case 2: + mulAvxTwo_3x2_64(matrix, in, out, start, n) + return n + case 3: + mulAvxTwo_3x3_64(matrix, in, out, start, n) + return n + case 4: + mulAvxTwo_3x4(matrix, in, out, start, n) + return n + case 5: + mulAvxTwo_3x5(matrix, in, out, start, n) + return n + case 6: + mulAvxTwo_3x6(matrix, in, out, start, n) + return n + case 7: + mulAvxTwo_3x7(matrix, in, out, start, n) + return n + case 8: + mulAvxTwo_3x8(matrix, in, out, start, n) + return n + case 9: + mulAvxTwo_3x9(matrix, in, out, start, n) + return n + case 10: + mulAvxTwo_3x10(matrix, in, out, start, n) + return n + } + case 4: + switch len(out) { + case 1: + mulAvxTwo_4x1_64(matrix, in, out, start, n) + return n + case 2: + mulAvxTwo_4x2_64(matrix, in, out, start, n) + return n + case 3: + mulAvxTwo_4x3_64(matrix, in, out, start, n) + return n + case 4: + mulAvxTwo_4x4(matrix, in, out, start, n) + return n + case 5: + mulAvxTwo_4x5(matrix, in, out, start, n) + return n + case 6: + mulAvxTwo_4x6(matrix, in, out, start, n) + return n + case 7: + mulAvxTwo_4x7(matrix, in, out, start, n) + return n + case 8: + mulAvxTwo_4x8(matrix, in, out, start, n) + return n + case 9: + mulAvxTwo_4x9(matrix, in, out, start, n) + return n + case 10: + mulAvxTwo_4x10(matrix, in, out, start, n) + return n + } + case 5: + switch len(out) { + case 1: + mulAvxTwo_5x1_64(matrix, in, out, start, n) + return n + case 2: + mulAvxTwo_5x2_64(matrix, in, out, start, n) + return n + case 3: + mulAvxTwo_5x3_64(matrix, in, out, start, n) + return n + case 4: + mulAvxTwo_5x4(matrix, in, out, start, n) + return n + case 5: + mulAvxTwo_5x5(matrix, in, out, start, n) + return n + case 6: + mulAvxTwo_5x6(matrix, in, out, start, n) + return n + case 7: + mulAvxTwo_5x7(matrix, in, out, start, n) + return n + case 8: + mulAvxTwo_5x8(matrix, in, out, start, n) + return n + case 9: + mulAvxTwo_5x9(matrix, in, out, start, n) + return n + case 10: + mulAvxTwo_5x10(matrix, in, out, start, n) + return n + } + case 6: + switch len(out) { + case 1: + mulAvxTwo_6x1_64(matrix, in, out, start, n) + return n + case 2: + mulAvxTwo_6x2_64(matrix, in, out, start, n) + return n + case 3: + mulAvxTwo_6x3_64(matrix, in, out, start, n) + return n + case 4: + mulAvxTwo_6x4(matrix, in, out, start, n) + return n + case 5: + mulAvxTwo_6x5(matrix, in, out, start, n) + return n + case 6: + mulAvxTwo_6x6(matrix, in, out, start, n) + return n + case 7: + mulAvxTwo_6x7(matrix, in, out, start, n) + return n + case 8: + mulAvxTwo_6x8(matrix, in, out, start, n) + return n + case 9: + mulAvxTwo_6x9(matrix, in, out, start, n) + return n + case 10: + mulAvxTwo_6x10(matrix, in, out, start, n) + return n + } + case 7: + switch len(out) { + case 1: + mulAvxTwo_7x1_64(matrix, in, out, start, n) + return n + case 2: + mulAvxTwo_7x2_64(matrix, in, out, start, n) + return n + case 3: + mulAvxTwo_7x3_64(matrix, in, out, start, n) + return n + case 4: + mulAvxTwo_7x4(matrix, in, out, start, n) + return n + case 5: + mulAvxTwo_7x5(matrix, in, out, start, n) + return n + case 6: + mulAvxTwo_7x6(matrix, in, out, start, n) + return n + case 7: + mulAvxTwo_7x7(matrix, in, out, start, n) + return n + case 8: + mulAvxTwo_7x8(matrix, in, out, start, n) + return n + case 9: + mulAvxTwo_7x9(matrix, in, out, start, n) + return n + case 10: + mulAvxTwo_7x10(matrix, in, out, start, n) + return n + } + case 8: + switch len(out) { + case 1: + mulAvxTwo_8x1_64(matrix, in, out, start, n) + return n + case 2: + mulAvxTwo_8x2_64(matrix, in, out, start, n) + return n + case 3: + mulAvxTwo_8x3_64(matrix, in, out, start, n) + return n + case 4: + mulAvxTwo_8x4(matrix, in, out, start, n) + return n + case 5: + mulAvxTwo_8x5(matrix, in, out, start, n) + return n + case 6: + mulAvxTwo_8x6(matrix, in, out, start, n) + return n + case 7: + mulAvxTwo_8x7(matrix, in, out, start, n) + return n + case 8: + mulAvxTwo_8x8(matrix, in, out, start, n) + return n + case 9: + mulAvxTwo_8x9(matrix, in, out, start, n) + return n + case 10: + mulAvxTwo_8x10(matrix, in, out, start, n) + return n + } + case 9: + switch len(out) { + case 1: + mulAvxTwo_9x1_64(matrix, in, out, start, n) + return n + case 2: + mulAvxTwo_9x2_64(matrix, in, out, start, n) + return n + case 3: + mulAvxTwo_9x3_64(matrix, in, out, start, n) + return n + case 4: + mulAvxTwo_9x4(matrix, in, out, start, n) + return n + case 5: + mulAvxTwo_9x5(matrix, in, out, start, n) + return n + case 6: + mulAvxTwo_9x6(matrix, in, out, start, n) + return n + case 7: + mulAvxTwo_9x7(matrix, in, out, start, n) + return n + case 8: + mulAvxTwo_9x8(matrix, in, out, start, n) + return n + case 9: + mulAvxTwo_9x9(matrix, in, out, start, n) + return n + case 10: + mulAvxTwo_9x10(matrix, in, out, start, n) + return n + } + case 10: + switch len(out) { + case 1: + mulAvxTwo_10x1_64(matrix, in, out, start, n) + return n + case 2: + mulAvxTwo_10x2_64(matrix, in, out, start, n) + return n + case 3: + mulAvxTwo_10x3_64(matrix, in, out, start, n) + return n + case 4: + mulAvxTwo_10x4(matrix, in, out, start, n) + return n + case 5: + mulAvxTwo_10x5(matrix, in, out, start, n) + return n + case 6: + mulAvxTwo_10x6(matrix, in, out, start, n) + return n + case 7: + mulAvxTwo_10x7(matrix, in, out, start, n) + return n + case 8: + mulAvxTwo_10x8(matrix, in, out, start, n) + return n + case 9: + mulAvxTwo_10x9(matrix, in, out, start, n) + return n + case 10: + mulAvxTwo_10x10(matrix, in, out, start, n) + return n + } + } + panic(fmt.Sprintf("unhandled size: %dx%d", len(in), len(out))) +} + +func galMulSlicesAvx2Xor(matrix []byte, in, out [][]byte, start, stop int) int { + n := (stop - start) & avxSizeMask + + switch len(in) { + case 1: + switch len(out) { + case 1: + mulAvxTwo_1x1_64Xor(matrix, in, out, start, n) + return n + case 2: + mulAvxTwo_1x2_64Xor(matrix, in, out, start, n) + return n + case 3: + mulAvxTwo_1x3_64Xor(matrix, in, out, start, n) + return n + case 4: + mulAvxTwo_1x4Xor(matrix, in, out, start, n) + return n + case 5: + mulAvxTwo_1x5Xor(matrix, in, out, start, n) + return n + case 6: + mulAvxTwo_1x6Xor(matrix, in, out, start, n) + return n + case 7: + mulAvxTwo_1x7Xor(matrix, in, out, start, n) + return n + case 8: + mulAvxTwo_1x8Xor(matrix, in, out, start, n) + return n + case 9: + mulAvxTwo_1x9Xor(matrix, in, out, start, n) + return n + case 10: + mulAvxTwo_1x10Xor(matrix, in, out, start, n) + return n + } + case 2: + switch len(out) { + case 1: + mulAvxTwo_2x1_64Xor(matrix, in, out, start, n) + return n + case 2: + mulAvxTwo_2x2_64Xor(matrix, in, out, start, n) + return n + case 3: + mulAvxTwo_2x3_64Xor(matrix, in, out, start, n) + return n + case 4: + mulAvxTwo_2x4Xor(matrix, in, out, start, n) + return n + case 5: + mulAvxTwo_2x5Xor(matrix, in, out, start, n) + return n + case 6: + mulAvxTwo_2x6Xor(matrix, in, out, start, n) + return n + case 7: + mulAvxTwo_2x7Xor(matrix, in, out, start, n) + return n + case 8: + mulAvxTwo_2x8Xor(matrix, in, out, start, n) + return n + case 9: + mulAvxTwo_2x9Xor(matrix, in, out, start, n) + return n + case 10: + mulAvxTwo_2x10Xor(matrix, in, out, start, n) + return n + } + case 3: + switch len(out) { + case 1: + mulAvxTwo_3x1_64Xor(matrix, in, out, start, n) + return n + case 2: + mulAvxTwo_3x2_64Xor(matrix, in, out, start, n) + return n + case 3: + mulAvxTwo_3x3_64Xor(matrix, in, out, start, n) + return n + case 4: + mulAvxTwo_3x4Xor(matrix, in, out, start, n) + return n + case 5: + mulAvxTwo_3x5Xor(matrix, in, out, start, n) + return n + case 6: + mulAvxTwo_3x6Xor(matrix, in, out, start, n) + return n + case 7: + mulAvxTwo_3x7Xor(matrix, in, out, start, n) + return n + case 8: + mulAvxTwo_3x8Xor(matrix, in, out, start, n) + return n + case 9: + mulAvxTwo_3x9Xor(matrix, in, out, start, n) + return n + case 10: + mulAvxTwo_3x10Xor(matrix, in, out, start, n) + return n + } + case 4: + switch len(out) { + case 1: + mulAvxTwo_4x1_64Xor(matrix, in, out, start, n) + return n + case 2: + mulAvxTwo_4x2_64Xor(matrix, in, out, start, n) + return n + case 3: + mulAvxTwo_4x3_64Xor(matrix, in, out, start, n) + return n + case 4: + mulAvxTwo_4x4Xor(matrix, in, out, start, n) + return n + case 5: + mulAvxTwo_4x5Xor(matrix, in, out, start, n) + return n + case 6: + mulAvxTwo_4x6Xor(matrix, in, out, start, n) + return n + case 7: + mulAvxTwo_4x7Xor(matrix, in, out, start, n) + return n + case 8: + mulAvxTwo_4x8Xor(matrix, in, out, start, n) + return n + case 9: + mulAvxTwo_4x9Xor(matrix, in, out, start, n) + return n + case 10: + mulAvxTwo_4x10Xor(matrix, in, out, start, n) + return n + } + case 5: + switch len(out) { + case 1: + mulAvxTwo_5x1_64Xor(matrix, in, out, start, n) + return n + case 2: + mulAvxTwo_5x2_64Xor(matrix, in, out, start, n) + return n + case 3: + mulAvxTwo_5x3_64Xor(matrix, in, out, start, n) + return n + case 4: + mulAvxTwo_5x4Xor(matrix, in, out, start, n) + return n + case 5: + mulAvxTwo_5x5Xor(matrix, in, out, start, n) + return n + case 6: + mulAvxTwo_5x6Xor(matrix, in, out, start, n) + return n + case 7: + mulAvxTwo_5x7Xor(matrix, in, out, start, n) + return n + case 8: + mulAvxTwo_5x8Xor(matrix, in, out, start, n) + return n + case 9: + mulAvxTwo_5x9Xor(matrix, in, out, start, n) + return n + case 10: + mulAvxTwo_5x10Xor(matrix, in, out, start, n) + return n + } + case 6: + switch len(out) { + case 1: + mulAvxTwo_6x1_64Xor(matrix, in, out, start, n) + return n + case 2: + mulAvxTwo_6x2_64Xor(matrix, in, out, start, n) + return n + case 3: + mulAvxTwo_6x3_64Xor(matrix, in, out, start, n) + return n + case 4: + mulAvxTwo_6x4Xor(matrix, in, out, start, n) + return n + case 5: + mulAvxTwo_6x5Xor(matrix, in, out, start, n) + return n + case 6: + mulAvxTwo_6x6Xor(matrix, in, out, start, n) + return n + case 7: + mulAvxTwo_6x7Xor(matrix, in, out, start, n) + return n + case 8: + mulAvxTwo_6x8Xor(matrix, in, out, start, n) + return n + case 9: + mulAvxTwo_6x9Xor(matrix, in, out, start, n) + return n + case 10: + mulAvxTwo_6x10Xor(matrix, in, out, start, n) + return n + } + case 7: + switch len(out) { + case 1: + mulAvxTwo_7x1_64Xor(matrix, in, out, start, n) + return n + case 2: + mulAvxTwo_7x2_64Xor(matrix, in, out, start, n) + return n + case 3: + mulAvxTwo_7x3_64Xor(matrix, in, out, start, n) + return n + case 4: + mulAvxTwo_7x4Xor(matrix, in, out, start, n) + return n + case 5: + mulAvxTwo_7x5Xor(matrix, in, out, start, n) + return n + case 6: + mulAvxTwo_7x6Xor(matrix, in, out, start, n) + return n + case 7: + mulAvxTwo_7x7Xor(matrix, in, out, start, n) + return n + case 8: + mulAvxTwo_7x8Xor(matrix, in, out, start, n) + return n + case 9: + mulAvxTwo_7x9Xor(matrix, in, out, start, n) + return n + case 10: + mulAvxTwo_7x10Xor(matrix, in, out, start, n) + return n + } + case 8: + switch len(out) { + case 1: + mulAvxTwo_8x1_64Xor(matrix, in, out, start, n) + return n + case 2: + mulAvxTwo_8x2_64Xor(matrix, in, out, start, n) + return n + case 3: + mulAvxTwo_8x3_64Xor(matrix, in, out, start, n) + return n + case 4: + mulAvxTwo_8x4Xor(matrix, in, out, start, n) + return n + case 5: + mulAvxTwo_8x5Xor(matrix, in, out, start, n) + return n + case 6: + mulAvxTwo_8x6Xor(matrix, in, out, start, n) + return n + case 7: + mulAvxTwo_8x7Xor(matrix, in, out, start, n) + return n + case 8: + mulAvxTwo_8x8Xor(matrix, in, out, start, n) + return n + case 9: + mulAvxTwo_8x9Xor(matrix, in, out, start, n) + return n + case 10: + mulAvxTwo_8x10Xor(matrix, in, out, start, n) + return n + } + case 9: + switch len(out) { + case 1: + mulAvxTwo_9x1_64Xor(matrix, in, out, start, n) + return n + case 2: + mulAvxTwo_9x2_64Xor(matrix, in, out, start, n) + return n + case 3: + mulAvxTwo_9x3_64Xor(matrix, in, out, start, n) + return n + case 4: + mulAvxTwo_9x4Xor(matrix, in, out, start, n) + return n + case 5: + mulAvxTwo_9x5Xor(matrix, in, out, start, n) + return n + case 6: + mulAvxTwo_9x6Xor(matrix, in, out, start, n) + return n + case 7: + mulAvxTwo_9x7Xor(matrix, in, out, start, n) + return n + case 8: + mulAvxTwo_9x8Xor(matrix, in, out, start, n) + return n + case 9: + mulAvxTwo_9x9Xor(matrix, in, out, start, n) + return n + case 10: + mulAvxTwo_9x10Xor(matrix, in, out, start, n) + return n + } + case 10: + switch len(out) { + case 1: + mulAvxTwo_10x1_64Xor(matrix, in, out, start, n) + return n + case 2: + mulAvxTwo_10x2_64Xor(matrix, in, out, start, n) + return n + case 3: + mulAvxTwo_10x3_64Xor(matrix, in, out, start, n) + return n + case 4: + mulAvxTwo_10x4Xor(matrix, in, out, start, n) + return n + case 5: + mulAvxTwo_10x5Xor(matrix, in, out, start, n) + return n + case 6: + mulAvxTwo_10x6Xor(matrix, in, out, start, n) + return n + case 7: + mulAvxTwo_10x7Xor(matrix, in, out, start, n) + return n + case 8: + mulAvxTwo_10x8Xor(matrix, in, out, start, n) + return n + case 9: + mulAvxTwo_10x9Xor(matrix, in, out, start, n) + return n + case 10: + mulAvxTwo_10x10Xor(matrix, in, out, start, n) + return n + } + } + panic(fmt.Sprintf("unhandled size: %dx%d", len(in), len(out))) +} diff --git a/vendor/github.com/klauspost/reedsolomon/galois_noasm.go b/vendor/github.com/klauspost/reedsolomon/galois_noasm.go new file mode 100644 index 0000000..7ef78f8 --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/galois_noasm.go @@ -0,0 +1,58 @@ +//go:build (!amd64 || noasm || appengine || gccgo) && (!arm64 || noasm || appengine || gccgo) && (!ppc64le || noasm || appengine || gccgo) +// +build !amd64 noasm appengine gccgo +// +build !arm64 noasm appengine gccgo +// +build !ppc64le noasm appengine gccgo + +// Copyright 2015, Klaus Post, see LICENSE for details. + +package reedsolomon + +import "encoding/binary" + +func galMulSlice(c byte, in, out []byte, o *options) { + out = out[:len(in)] + if c == 1 { + copy(out, in) + return + } + mt := mulTable[c][:256] + for n, input := range in { + out[n] = mt[input] + } +} + +func galMulSliceXor(c byte, in, out []byte, o *options) { + out = out[:len(in)] + if c == 1 { + sliceXor(in, out, o) + return + } + mt := mulTable[c][:256] + for n, input := range in { + out[n] ^= mt[input] + } +} + +// simple slice xor +func sliceXor(in, out []byte, _ *options) { + for len(out) >= 32 { + inS := in[:32] + v0 := binary.LittleEndian.Uint64(out[:]) ^ binary.LittleEndian.Uint64(inS[:]) + v1 := binary.LittleEndian.Uint64(out[8:]) ^ binary.LittleEndian.Uint64(inS[8:]) + v2 := binary.LittleEndian.Uint64(out[16:]) ^ binary.LittleEndian.Uint64(inS[16:]) + v3 := binary.LittleEndian.Uint64(out[24:]) ^ binary.LittleEndian.Uint64(inS[24:]) + binary.LittleEndian.PutUint64(out[:], v0) + binary.LittleEndian.PutUint64(out[8:], v1) + binary.LittleEndian.PutUint64(out[16:], v2) + binary.LittleEndian.PutUint64(out[24:], v3) + out = out[32:] + in = in[32:] + } + for n, input := range in { + out[n] ^= input + } +} + +func init() { + defaultOptions.useAVX512 = false +} diff --git a/vendor/github.com/klauspost/reedsolomon/galois_notamd64.go b/vendor/github.com/klauspost/reedsolomon/galois_notamd64.go new file mode 100644 index 0000000..e67905b --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/galois_notamd64.go @@ -0,0 +1,14 @@ +//go:build !amd64 || noasm || appengine || gccgo +// +build !amd64 noasm appengine gccgo + +// Copyright 2020, Klaus Post, see LICENSE for details. + +package reedsolomon + +func (r *reedSolomon) codeSomeShardsAvx512(matrixRows, inputs, outputs [][]byte, byteCount int) { + panic("codeSomeShardsAvx512 should not be called if built without asm") +} + +func (r *reedSolomon) codeSomeShardsAvx512P(matrixRows, inputs, outputs [][]byte, byteCount int) { + panic("codeSomeShardsAvx512P should not be called if built without asm") +} diff --git a/vendor/github.com/klauspost/reedsolomon/galois_ppc64le.go b/vendor/github.com/klauspost/reedsolomon/galois_ppc64le.go new file mode 100644 index 0000000..52e8c23 --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/galois_ppc64le.go @@ -0,0 +1,74 @@ +//go:build !noasm && !appengine && !gccgo +// +build !noasm,!appengine,!gccgo + +// Copyright 2015, Klaus Post, see LICENSE for details. +// Copyright 2018, Minio, Inc. + +package reedsolomon + +//go:noescape +func galMulPpc(low, high, in, out []byte) + +//go:noescape +func galMulPpcXor(low, high, in, out []byte) + +// This is what the assembler routines do in blocks of 16 bytes: +/* +func galMulPpc(low, high, in, out []byte) { + for n, input := range in { + l := input & 0xf + h := input >> 4 + out[n] = low[l] ^ high[h] + } +} +func galMulPpcXor(low, high, in, out []byte) { + for n, input := range in { + l := input & 0xf + h := input >> 4 + out[n] ^= low[l] ^ high[h] + } +} +*/ + +func galMulSlice(c byte, in, out []byte, o *options) { + if c == 1 { + copy(out, in) + return + } + done := (len(in) >> 4) << 4 + if done > 0 { + galMulPpc(mulTableLow[c][:], mulTableHigh[c][:], in[:done], out) + } + remain := len(in) - done + if remain > 0 { + mt := mulTable[c][:256] + for i := done; i < len(in); i++ { + out[i] = mt[in[i]] + } + } +} + +func galMulSliceXor(c byte, in, out []byte, o *options) { + if c == 1 { + sliceXor(in, out, o) + return + } + done := (len(in) >> 4) << 4 + if done > 0 { + galMulPpcXor(mulTableLow[c][:], mulTableHigh[c][:], in[:done], out) + } + remain := len(in) - done + if remain > 0 { + mt := mulTable[c][:256] + for i := done; i < len(in); i++ { + out[i] ^= mt[in[i]] + } + } +} + +// slice galois add +func sliceXor(in, out []byte, o *options) { + for n, input := range in { + out[n] ^= input + } +} diff --git a/vendor/github.com/klauspost/reedsolomon/galois_ppc64le.s b/vendor/github.com/klauspost/reedsolomon/galois_ppc64le.s new file mode 100644 index 0000000..7213c61 --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/galois_ppc64le.s @@ -0,0 +1,126 @@ +//+build !noasm +//+build !appengine +//+build !gccgo + +// Copyright 2015, Klaus Post, see LICENSE for details. +// Copyright 2018, Minio, Inc. + +#include "textflag.h" + +#define LOW R3 +#define HIGH R4 +#define IN R5 +#define LEN R6 +#define OUT R7 +#define CONSTANTS R8 +#define OFFSET R9 +#define OFFSET1 R10 +#define OFFSET2 R11 + +#define X6 VS34 +#define X6_ V2 +#define X7 VS35 +#define X7_ V3 +#define MSG VS36 +#define MSG_ V4 +#define MSG_HI VS37 +#define MSG_HI_ V5 +#define RESULT VS38 +#define RESULT_ V6 +#define ROTATE VS39 +#define ROTATE_ V7 +#define MASK VS40 +#define MASK_ V8 +#define FLIP VS41 +#define FLIP_ V9 + +// func galMulPpc(low, high, in, out []byte) +TEXT ·galMulPpc(SB), NOFRAME|NOSPLIT, $0-96 + MOVD low+0(FP), LOW + MOVD high+24(FP), HIGH + MOVD in+48(FP), IN + MOVD in_len+56(FP), LEN + MOVD out+72(FP), OUT + + MOVD $16, OFFSET1 + MOVD $32, OFFSET2 + + MOVD $·constants(SB), CONSTANTS + LXVD2X (CONSTANTS)(R0), ROTATE + LXVD2X (CONSTANTS)(OFFSET1), MASK + LXVD2X (CONSTANTS)(OFFSET2), FLIP + + LXVD2X (LOW)(R0), X6 + LXVD2X (HIGH)(R0), X7 + VPERM X6_, V31, FLIP_, X6_ + VPERM X7_, V31, FLIP_, X7_ + + MOVD $0, OFFSET + +loop: + LXVD2X (IN)(OFFSET), MSG + + VSRB MSG_, ROTATE_, MSG_HI_ + VAND MSG_, MASK_, MSG_ + VPERM X6_, V31, MSG_, MSG_ + VPERM X7_, V31, MSG_HI_, MSG_HI_ + + VXOR MSG_, MSG_HI_, MSG_ + + STXVD2X MSG, (OUT)(OFFSET) + + ADD $16, OFFSET, OFFSET + CMP LEN, OFFSET + BGT loop + RET + +// func galMulPpcXorlow, high, in, out []byte) +TEXT ·galMulPpcXor(SB), NOFRAME|NOSPLIT, $0-96 + MOVD low+0(FP), LOW + MOVD high+24(FP), HIGH + MOVD in+48(FP), IN + MOVD in_len+56(FP), LEN + MOVD out+72(FP), OUT + + MOVD $16, OFFSET1 + MOVD $32, OFFSET2 + + MOVD $·constants(SB), CONSTANTS + LXVD2X (CONSTANTS)(R0), ROTATE + LXVD2X (CONSTANTS)(OFFSET1), MASK + LXVD2X (CONSTANTS)(OFFSET2), FLIP + + LXVD2X (LOW)(R0), X6 + LXVD2X (HIGH)(R0), X7 + VPERM X6_, V31, FLIP_, X6_ + VPERM X7_, V31, FLIP_, X7_ + + MOVD $0, OFFSET + +loopXor: + LXVD2X (IN)(OFFSET), MSG + LXVD2X (OUT)(OFFSET), RESULT + + VSRB MSG_, ROTATE_, MSG_HI_ + VAND MSG_, MASK_, MSG_ + VPERM X6_, V31, MSG_, MSG_ + VPERM X7_, V31, MSG_HI_, MSG_HI_ + + VXOR MSG_, MSG_HI_, MSG_ + VXOR MSG_, RESULT_, RESULT_ + + STXVD2X RESULT, (OUT)(OFFSET) + + ADD $16, OFFSET, OFFSET + CMP LEN, OFFSET + BGT loopXor + RET + +DATA ·constants+0x0(SB)/8, $0x0404040404040404 +DATA ·constants+0x8(SB)/8, $0x0404040404040404 +DATA ·constants+0x10(SB)/8, $0x0f0f0f0f0f0f0f0f +DATA ·constants+0x18(SB)/8, $0x0f0f0f0f0f0f0f0f +DATA ·constants+0x20(SB)/8, $0x0706050403020100 +DATA ·constants+0x28(SB)/8, $0x0f0e0d0c0b0a0908 + +GLOBL ·constants(SB), 8, $48 diff --git a/vendor/github.com/klauspost/reedsolomon/inversion_tree.go b/vendor/github.com/klauspost/reedsolomon/inversion_tree.go new file mode 100644 index 0000000..3f97f81 --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/inversion_tree.go @@ -0,0 +1,164 @@ +/** + * A thread-safe tree which caches inverted matrices. + * + * Copyright 2016, Peter Collins + */ + +package reedsolomon + +import ( + "errors" + "sync" +) + +// The tree uses a Reader-Writer mutex to make it thread-safe +// when accessing cached matrices and inserting new ones. +type inversionTree struct { + mutex sync.RWMutex + root inversionNode +} + +type inversionNode struct { + matrix matrix + children []*inversionNode +} + +// newInversionTree initializes a tree for storing inverted matrices. +// Note that the root node is the identity matrix as it implies +// there were no errors with the original data. +func newInversionTree(dataShards, parityShards int) *inversionTree { + identity, _ := identityMatrix(dataShards) + return &inversionTree{ + root: inversionNode{ + matrix: identity, + children: make([]*inversionNode, dataShards+parityShards), + }, + } +} + +// GetInvertedMatrix returns the cached inverted matrix or nil if it +// is not found in the tree keyed on the indices of invalid rows. +func (t *inversionTree) GetInvertedMatrix(invalidIndices []int) matrix { + if t == nil { + return nil + } + // Lock the tree for reading before accessing the tree. + t.mutex.RLock() + defer t.mutex.RUnlock() + + // If no invalid indices were give we should return the root + // identity matrix. + if len(invalidIndices) == 0 { + return t.root.matrix + } + + // Recursively search for the inverted matrix in the tree, passing in + // 0 as the parent index as we start at the root of the tree. + return t.root.getInvertedMatrix(invalidIndices, 0) +} + +// errAlreadySet is returned if the root node matrix is overwritten +var errAlreadySet = errors.New("the root node identity matrix is already set") + +// InsertInvertedMatrix inserts a new inverted matrix into the tree +// keyed by the indices of invalid rows. The total number of shards +// is required for creating the proper length lists of child nodes for +// each node. +func (t *inversionTree) InsertInvertedMatrix(invalidIndices []int, matrix matrix, shards int) error { + if t == nil { + return nil + } + // If no invalid indices were given then we are done because the + // root node is already set with the identity matrix. + if len(invalidIndices) == 0 { + return errAlreadySet + } + + if !matrix.IsSquare() { + return errNotSquare + } + + // Lock the tree for writing and reading before accessing the tree. + t.mutex.Lock() + defer t.mutex.Unlock() + + // Recursively create nodes for the inverted matrix in the tree until + // we reach the node to insert the matrix to. We start by passing in + // 0 as the parent index as we start at the root of the tree. + t.root.insertInvertedMatrix(invalidIndices, matrix, shards, 0) + + return nil +} + +func (n *inversionNode) getInvertedMatrix(invalidIndices []int, parent int) matrix { + // Get the child node to search next from the list of children. The + // list of children starts relative to the parent index passed in + // because the indices of invalid rows is sorted (by default). As we + // search recursively, the first invalid index gets popped off the list, + // so when searching through the list of children, use that first invalid + // index to find the child node. + firstIndex := invalidIndices[0] + node := n.children[firstIndex-parent] + + // If the child node doesn't exist in the list yet, fail fast by + // returning, so we can construct and insert the proper inverted matrix. + if node == nil { + return nil + } + + // If there's more than one invalid index left in the list we should + // keep searching recursively. + if len(invalidIndices) > 1 { + // Search recursively on the child node by passing in the invalid indices + // with the first index popped off the front. Also the parent index to + // pass down is the first index plus one. + return node.getInvertedMatrix(invalidIndices[1:], firstIndex+1) + } + // If there aren't any more invalid indices to search, we've found our + // node. Return it, however keep in mind that the matrix could still be + // nil because intermediary nodes in the tree are created sometimes with + // their inversion matrices uninitialized. + return node.matrix +} + +func (n *inversionNode) insertInvertedMatrix(invalidIndices []int, matrix matrix, shards, parent int) { + // As above, get the child node to search next from the list of children. + // The list of children starts relative to the parent index passed in + // because the indices of invalid rows is sorted (by default). As we + // search recursively, the first invalid index gets popped off the list, + // so when searching through the list of children, use that first invalid + // index to find the child node. + firstIndex := invalidIndices[0] + node := n.children[firstIndex-parent] + + // If the child node doesn't exist in the list yet, create a new + // node because we have the writer lock and add it to the list + // of children. + if node == nil { + // Make the length of the list of children equal to the number + // of shards minus the first invalid index because the list of + // invalid indices is sorted, so only this length of errors + // are possible in the tree. + node = &inversionNode{ + children: make([]*inversionNode, shards-firstIndex), + } + // Insert the new node into the tree at the first index relative + // to the parent index that was given in this recursive call. + n.children[firstIndex-parent] = node + } + + // If there's more than one invalid index left in the list we should + // keep searching recursively in order to find the node to add our + // matrix. + if len(invalidIndices) > 1 { + // As above, search recursively on the child node by passing in + // the invalid indices with the first index popped off the front. + // Also the total number of shards and parent index are passed down + // which is equal to the first index plus one. + node.insertInvertedMatrix(invalidIndices[1:], matrix, shards, firstIndex+1) + } else { + // If there aren't any more invalid indices to search, we've found our + // node. Cache the inverted matrix in this node. + node.matrix = matrix + } +} diff --git a/vendor/github.com/klauspost/reedsolomon/matrix.go b/vendor/github.com/klauspost/reedsolomon/matrix.go new file mode 100644 index 0000000..22669c2 --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/matrix.go @@ -0,0 +1,282 @@ +/** + * Matrix Algebra over an 8-bit Galois Field + * + * Copyright 2015, Klaus Post + * Copyright 2015, Backblaze, Inc. + */ + +package reedsolomon + +import ( + "errors" + "fmt" + "strconv" + "strings" +) + +// byte[row][col] +type matrix [][]byte + +// newMatrix returns a matrix of zeros. +func newMatrix(rows, cols int) (matrix, error) { + if rows <= 0 { + return nil, errInvalidRowSize + } + if cols <= 0 { + return nil, errInvalidColSize + } + + m := matrix(make([][]byte, rows)) + for i := range m { + m[i] = make([]byte, cols) + } + return m, nil +} + +// NewMatrixData initializes a matrix with the given row-major data. +// Note that data is not copied from input. +func newMatrixData(data [][]byte) (matrix, error) { + m := matrix(data) + err := m.Check() + if err != nil { + return nil, err + } + return m, nil +} + +// IdentityMatrix returns an identity matrix of the given size. +func identityMatrix(size int) (matrix, error) { + m, err := newMatrix(size, size) + if err != nil { + return nil, err + } + for i := range m { + m[i][i] = 1 + } + return m, nil +} + +// errInvalidRowSize will be returned if attempting to create a matrix with negative or zero row number. +var errInvalidRowSize = errors.New("invalid row size") + +// errInvalidColSize will be returned if attempting to create a matrix with negative or zero column number. +var errInvalidColSize = errors.New("invalid column size") + +// errColSizeMismatch is returned if the size of matrix columns mismatch. +var errColSizeMismatch = errors.New("column size is not the same for all rows") + +func (m matrix) Check() error { + rows := len(m) + if rows <= 0 { + return errInvalidRowSize + } + cols := len(m[0]) + if cols <= 0 { + return errInvalidColSize + } + + for _, col := range m { + if len(col) != cols { + return errColSizeMismatch + } + } + return nil +} + +// String returns a human-readable string of the matrix contents. +// +// Example: [[1, 2], [3, 4]] +func (m matrix) String() string { + rowOut := make([]string, 0, len(m)) + for _, row := range m { + colOut := make([]string, 0, len(row)) + for _, col := range row { + colOut = append(colOut, strconv.Itoa(int(col))) + } + rowOut = append(rowOut, "["+strings.Join(colOut, ", ")+"]") + } + return "[" + strings.Join(rowOut, ", ") + "]" +} + +// Multiply multiplies this matrix (the one on the left) by another +// matrix (the one on the right) and returns a new matrix with the result. +func (m matrix) Multiply(right matrix) (matrix, error) { + if len(m[0]) != len(right) { + return nil, fmt.Errorf("columns on left (%d) is different than rows on right (%d)", len(m[0]), len(right)) + } + result, _ := newMatrix(len(m), len(right[0])) + for r, row := range result { + for c := range row { + var value byte + for i := range m[0] { + value ^= galMultiply(m[r][i], right[i][c]) + } + result[r][c] = value + } + } + return result, nil +} + +// Augment returns the concatenation of this matrix and the matrix on the right. +func (m matrix) Augment(right matrix) (matrix, error) { + if len(m) != len(right) { + return nil, errMatrixSize + } + + result, _ := newMatrix(len(m), len(m[0])+len(right[0])) + for r, row := range m { + for c := range row { + result[r][c] = m[r][c] + } + cols := len(m[0]) + for c := range right[0] { + result[r][cols+c] = right[r][c] + } + } + return result, nil +} + +// errMatrixSize is returned if matrix dimensions are doesn't match. +var errMatrixSize = errors.New("matrix sizes do not match") + +func (m matrix) SameSize(n matrix) error { + if len(m) != len(n) { + return errMatrixSize + } + for i := range m { + if len(m[i]) != len(n[i]) { + return errMatrixSize + } + } + return nil +} + +// SubMatrix returns a part of this matrix. Data is copied. +func (m matrix) SubMatrix(rmin, cmin, rmax, cmax int) (matrix, error) { + result, err := newMatrix(rmax-rmin, cmax-cmin) + if err != nil { + return nil, err + } + // OPTME: If used heavily, use copy function to copy slice + for r := rmin; r < rmax; r++ { + for c := cmin; c < cmax; c++ { + result[r-rmin][c-cmin] = m[r][c] + } + } + return result, nil +} + +// SwapRows Exchanges two rows in the matrix. +func (m matrix) SwapRows(r1, r2 int) error { + if r1 < 0 || len(m) <= r1 || r2 < 0 || len(m) <= r2 { + return errInvalidRowSize + } + m[r2], m[r1] = m[r1], m[r2] + return nil +} + +// IsSquare will return true if the matrix is square +// and nil if the matrix is square +func (m matrix) IsSquare() bool { + return len(m) == len(m[0]) +} + +// errSingular is returned if the matrix is singular and cannot be inversed +var errSingular = errors.New("matrix is singular") + +// errNotSquare is returned if attempting to inverse a non-square matrix. +var errNotSquare = errors.New("only square matrices can be inverted") + +// Invert returns the inverse of this matrix. +// Returns ErrSingular when the matrix is singular and doesn't have an inverse. +// The matrix must be square, otherwise ErrNotSquare is returned. +func (m matrix) Invert() (matrix, error) { + if !m.IsSquare() { + return nil, errNotSquare + } + + size := len(m) + work, _ := identityMatrix(size) + work, _ = m.Augment(work) + + err := work.gaussianElimination() + if err != nil { + return nil, err + } + + return work.SubMatrix(0, size, size, size*2) +} + +func (m matrix) gaussianElimination() error { + rows := len(m) + columns := len(m[0]) + // Clear out the part below the main diagonal and scale the main + // diagonal to be 1. + for r := 0; r < rows; r++ { + // If the element on the diagonal is 0, find a row below + // that has a non-zero and swap them. + if m[r][r] == 0 { + for rowBelow := r + 1; rowBelow < rows; rowBelow++ { + if m[rowBelow][r] != 0 { + err := m.SwapRows(r, rowBelow) + if err != nil { + return err + } + break + } + } + } + // If we couldn't find one, the matrix is singular. + if m[r][r] == 0 { + return errSingular + } + // Scale to 1. + if m[r][r] != 1 { + scale := galDivide(1, m[r][r]) + for c := 0; c < columns; c++ { + m[r][c] = galMultiply(m[r][c], scale) + } + } + // Make everything below the 1 be a 0 by subtracting + // a multiple of it. (Subtraction and addition are + // both exclusive or in the Galois field.) + for rowBelow := r + 1; rowBelow < rows; rowBelow++ { + if m[rowBelow][r] != 0 { + scale := m[rowBelow][r] + for c := 0; c < columns; c++ { + m[rowBelow][c] ^= galMultiply(scale, m[r][c]) + } + } + } + } + + // Now clear the part above the main diagonal. + for d := 0; d < rows; d++ { + for rowAbove := 0; rowAbove < d; rowAbove++ { + if m[rowAbove][d] != 0 { + scale := m[rowAbove][d] + for c := 0; c < columns; c++ { + m[rowAbove][c] ^= galMultiply(scale, m[d][c]) + } + + } + } + } + return nil +} + +// Create a Vandermonde matrix, which is guaranteed to have the +// property that any subset of rows that forms a square matrix +// is invertible. +func vandermonde(rows, cols int) (matrix, error) { + result, err := newMatrix(rows, cols) + if err != nil { + return nil, err + } + for r, row := range result { + for c := range row { + result[r][c] = galExp(byte(r), c) + } + } + return result, nil +} diff --git a/vendor/github.com/klauspost/reedsolomon/options.go b/vendor/github.com/klauspost/reedsolomon/options.go new file mode 100644 index 0000000..26269eb --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/options.go @@ -0,0 +1,186 @@ +package reedsolomon + +import ( + "runtime" + + "github.com/klauspost/cpuid/v2" +) + +// Option allows to override processing parameters. +type Option func(*options) + +type options struct { + maxGoroutines int + minSplitSize int + shardSize int + perRound int + + useAVX512, useAVX2, useSSSE3, useSSE2 bool + usePAR1Matrix bool + useCauchy bool + fastOneParity bool + inversionCache bool + + // stream options + concReads bool + concWrites bool + streamBS int +} + +var defaultOptions = options{ + maxGoroutines: 384, + minSplitSize: -1, + fastOneParity: false, + inversionCache: true, + + // Detect CPU capabilities. + useSSSE3: cpuid.CPU.Supports(cpuid.SSSE3), + useSSE2: cpuid.CPU.Supports(cpuid.SSE2), + useAVX2: cpuid.CPU.Supports(cpuid.AVX2), + useAVX512: cpuid.CPU.Supports(cpuid.AVX512F, cpuid.AVX512BW), +} + +func init() { + if runtime.GOMAXPROCS(0) <= 1 { + defaultOptions.maxGoroutines = 1 + } +} + +// WithMaxGoroutines is the maximum number of goroutines number for encoding & decoding. +// Jobs will be split into this many parts, unless each goroutine would have to process +// less than minSplitSize bytes (set with WithMinSplitSize). +// For the best speed, keep this well above the GOMAXPROCS number for more fine grained +// scheduling. +// If n <= 0, it is ignored. +func WithMaxGoroutines(n int) Option { + return func(o *options) { + if n > 0 { + o.maxGoroutines = n + } + } +} + +// WithAutoGoroutines will adjust the number of goroutines for optimal speed with a +// specific shard size. +// Send in the shard size you expect to send. Other shard sizes will work, but may not +// run at the optimal speed. +// Overwrites WithMaxGoroutines. +// If shardSize <= 0, it is ignored. +func WithAutoGoroutines(shardSize int) Option { + return func(o *options) { + o.shardSize = shardSize + } +} + +// WithMinSplitSize is the minimum encoding size in bytes per goroutine. +// By default this parameter is determined by CPU cache characteristics. +// See WithMaxGoroutines on how jobs are split. +// If n <= 0, it is ignored. +func WithMinSplitSize(n int) Option { + return func(o *options) { + if n > 0 { + o.minSplitSize = n + } + } +} + +// WithConcurrentStreams will enable concurrent reads and writes on the streams. +// Default: Disabled, meaning only one stream will be read/written at the time. +// Ignored if not used on a stream input. +func WithConcurrentStreams(enabled bool) Option { + return func(o *options) { + o.concReads, o.concWrites = enabled, enabled + } +} + +// WithConcurrentStreamReads will enable concurrent reads from the input streams. +// Default: Disabled, meaning only one stream will be read at the time. +// Ignored if not used on a stream input. +func WithConcurrentStreamReads(enabled bool) Option { + return func(o *options) { + o.concReads = enabled + } +} + +// WithConcurrentStreamWrites will enable concurrent writes to the the output streams. +// Default: Disabled, meaning only one stream will be written at the time. +// Ignored if not used on a stream input. +func WithConcurrentStreamWrites(enabled bool) Option { + return func(o *options) { + o.concWrites = enabled + } +} + +// WithInversionCache allows to control the inversion cache. +// This will cache reconstruction matrices so they can be reused. +// Enabled by default. +func WithInversionCache(enabled bool) Option { + return func(o *options) { + o.inversionCache = enabled + } +} + +// WithStreamBlockSize allows to set a custom block size per round of reads/writes. +// If not set, any shard size set with WithAutoGoroutines will be used. +// If WithAutoGoroutines is also unset, 4MB will be used. +// Ignored if not used on stream. +func WithStreamBlockSize(n int) Option { + return func(o *options) { + o.streamBS = n + } +} + +func withSSSE3(enabled bool) Option { + return func(o *options) { + o.useSSSE3 = enabled + } +} + +func withAVX2(enabled bool) Option { + return func(o *options) { + o.useAVX2 = enabled + } +} + +func withSSE2(enabled bool) Option { + return func(o *options) { + o.useSSE2 = enabled + } +} + +func withAVX512(enabled bool) Option { + return func(o *options) { + o.useAVX512 = enabled + } +} + +// WithPAR1Matrix causes the encoder to build the matrix how PARv1 +// does. Note that the method they use is buggy, and may lead to cases +// where recovery is impossible, even if there are enough parity +// shards. +func WithPAR1Matrix() Option { + return func(o *options) { + o.usePAR1Matrix = true + o.useCauchy = false + } +} + +// WithCauchyMatrix will make the encoder build a Cauchy style matrix. +// The output of this is not compatible with the standard output. +// A Cauchy matrix is faster to generate. This does not affect data throughput, +// but will result in slightly faster start-up time. +func WithCauchyMatrix() Option { + return func(o *options) { + o.useCauchy = true + o.usePAR1Matrix = false + } +} + +// WithFastOneParityMatrix will switch the matrix to a simple xor +// if there is only one parity shard. +// The PAR1 matrix already has this property so it has little effect there. +func WithFastOneParityMatrix() Option { + return func(o *options) { + o.fastOneParity = true + } +} diff --git a/vendor/github.com/klauspost/reedsolomon/reedsolomon.go b/vendor/github.com/klauspost/reedsolomon/reedsolomon.go new file mode 100644 index 0000000..8382e56 --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/reedsolomon.go @@ -0,0 +1,1263 @@ +/** + * Reed-Solomon Coding over 8-bit values. + * + * Copyright 2015, Klaus Post + * Copyright 2015, Backblaze, Inc. + */ + +// Package reedsolomon enables Erasure Coding in Go +// +// For usage and examples, see https://github.com/klauspost/reedsolomon +// +package reedsolomon + +import ( + "bytes" + "errors" + "io" + "runtime" + "sync" + + "github.com/klauspost/cpuid/v2" +) + +// Encoder is an interface to encode Reed-Salomon parity sets for your data. +type Encoder interface { + // Encode parity for a set of data shards. + // Input is 'shards' containing data shards followed by parity shards. + // The number of shards must match the number given to New(). + // Each shard is a byte array, and they must all be the same size. + // The parity shards will always be overwritten and the data shards + // will remain the same, so it is safe for you to read from the + // data shards while this is running. + Encode(shards [][]byte) error + + // EncodeIdx will add parity for a single data shard. + // Parity shards should start out as 0. The caller must zero them. + // Data shards must be delivered exactly once. There is no check for this. + // The parity shards will always be updated and the data shards will remain the same. + EncodeIdx(dataShard []byte, idx int, parity [][]byte) error + + // Verify returns true if the parity shards contain correct data. + // The data is the same format as Encode. No data is modified, so + // you are allowed to read from data while this is running. + Verify(shards [][]byte) (bool, error) + + // Reconstruct will recreate the missing shards if possible. + // + // Given a list of shards, some of which contain data, fills in the + // ones that don't have data. + // + // The length of the array must be equal to the total number of shards. + // You indicate that a shard is missing by setting it to nil or zero-length. + // If a shard is zero-length but has sufficient capacity, that memory will + // be used, otherwise a new []byte will be allocated. + // + // If there are too few shards to reconstruct the missing + // ones, ErrTooFewShards will be returned. + // + // The reconstructed shard set is complete, but integrity is not verified. + // Use the Verify function to check if data set is ok. + Reconstruct(shards [][]byte) error + + // ReconstructData will recreate any missing data shards, if possible. + // + // Given a list of shards, some of which contain data, fills in the + // data shards that don't have data. + // + // The length of the array must be equal to Shards. + // You indicate that a shard is missing by setting it to nil or zero-length. + // If a shard is zero-length but has sufficient capacity, that memory will + // be used, otherwise a new []byte will be allocated. + // + // If there are too few shards to reconstruct the missing + // ones, ErrTooFewShards will be returned. + // + // As the reconstructed shard set may contain missing parity shards, + // calling the Verify function is likely to fail. + ReconstructData(shards [][]byte) error + + // Update parity is use for change a few data shards and update it's parity. + // Input 'newDatashards' containing data shards changed. + // Input 'shards' containing old data shards (if data shard not changed, it can be nil) and old parity shards. + // new parity shards will in shards[DataShards:] + // Update is very useful if DataShards much larger than ParityShards and changed data shards is few. It will + // faster than Encode and not need read all data shards to encode. + Update(shards [][]byte, newDatashards [][]byte) error + + // Split a data slice into the number of shards given to the encoder, + // and create empty parity shards. + // + // The data will be split into equally sized shards. + // If the data size isn't dividable by the number of shards, + // the last shard will contain extra zeros. + // + // There must be at least 1 byte otherwise ErrShortData will be + // returned. + // + // The data will not be copied, except for the last shard, so you + // should not modify the data of the input slice afterwards. + Split(data []byte) ([][]byte, error) + + // Join the shards and write the data segment to dst. + // + // Only the data shards are considered. + // You must supply the exact output size you want. + // If there are to few shards given, ErrTooFewShards will be returned. + // If the total data size is less than outSize, ErrShortData will be returned. + Join(dst io.Writer, shards [][]byte, outSize int) error +} + +const ( + avx2CodeGenMinSize = 64 + avx2CodeGenMinShards = 3 + avx2CodeGenMaxGoroutines = 8 + + intSize = 32 << (^uint(0) >> 63) // 32 or 64 + maxInt = 1<<(intSize-1) - 1 +) + +// reedSolomon contains a matrix for a specific +// distribution of datashards and parity shards. +// Construct if using New() +type reedSolomon struct { + DataShards int // Number of data shards, should not be modified. + ParityShards int // Number of parity shards, should not be modified. + Shards int // Total number of shards. Calculated, and should not be modified. + m matrix + tree *inversionTree + parity [][]byte + o options + mPool sync.Pool +} + +// ErrInvShardNum will be returned by New, if you attempt to create +// an Encoder with less than one data shard or less than zero parity +// shards. +var ErrInvShardNum = errors.New("cannot create Encoder with less than one data shard or less than zero parity shards") + +// ErrMaxShardNum will be returned by New, if you attempt to create an +// Encoder where data and parity shards are bigger than the order of +// GF(2^8). +var ErrMaxShardNum = errors.New("cannot create Encoder with more than 256 data+parity shards") + +// buildMatrix creates the matrix to use for encoding, given the +// number of data shards and the number of total shards. +// +// The top square of the matrix is guaranteed to be an identity +// matrix, which means that the data shards are unchanged after +// encoding. +func buildMatrix(dataShards, totalShards int) (matrix, error) { + // Start with a Vandermonde matrix. This matrix would work, + // in theory, but doesn't have the property that the data + // shards are unchanged after encoding. + vm, err := vandermonde(totalShards, dataShards) + if err != nil { + return nil, err + } + + // Multiply by the inverse of the top square of the matrix. + // This will make the top square be the identity matrix, but + // preserve the property that any square subset of rows is + // invertible. + top, err := vm.SubMatrix(0, 0, dataShards, dataShards) + if err != nil { + return nil, err + } + + topInv, err := top.Invert() + if err != nil { + return nil, err + } + + return vm.Multiply(topInv) +} + +// buildMatrixPAR1 creates the matrix to use for encoding according to +// the PARv1 spec, given the number of data shards and the number of +// total shards. Note that the method they use is buggy, and may lead +// to cases where recovery is impossible, even if there are enough +// parity shards. +// +// The top square of the matrix is guaranteed to be an identity +// matrix, which means that the data shards are unchanged after +// encoding. +func buildMatrixPAR1(dataShards, totalShards int) (matrix, error) { + result, err := newMatrix(totalShards, dataShards) + if err != nil { + return nil, err + } + + for r, row := range result { + // The top portion of the matrix is the identity + // matrix, and the bottom is a transposed Vandermonde + // matrix starting at 1 instead of 0. + if r < dataShards { + result[r][r] = 1 + } else { + for c := range row { + result[r][c] = galExp(byte(c+1), r-dataShards) + } + } + } + return result, nil +} + +func buildMatrixCauchy(dataShards, totalShards int) (matrix, error) { + result, err := newMatrix(totalShards, dataShards) + if err != nil { + return nil, err + } + + for r, row := range result { + // The top portion of the matrix is the identity + // matrix, and the bottom is a transposed Cauchy matrix. + if r < dataShards { + result[r][r] = 1 + } else { + for c := range row { + result[r][c] = invTable[(byte(r ^ c))] + } + } + } + return result, nil +} + +// buildXorMatrix can be used to build a matrix with pure XOR +// operations if there is only one parity shard. +func buildXorMatrix(dataShards, totalShards int) (matrix, error) { + if dataShards+1 != totalShards { + return nil, errors.New("internal error") + } + result, err := newMatrix(totalShards, dataShards) + if err != nil { + return nil, err + } + + for r, row := range result { + // The top portion of the matrix is the identity + // matrix. + if r < dataShards { + result[r][r] = 1 + } else { + // Set all values to 1 (XOR) + for c := range row { + result[r][c] = 1 + } + } + } + return result, nil +} + +// New creates a new encoder and initializes it to +// the number of data shards and parity shards that +// you want to use. You can reuse this encoder. +// Note that the maximum number of total shards is 256. +// If no options are supplied, default options are used. +func New(dataShards, parityShards int, opts ...Option) (Encoder, error) { + r := reedSolomon{ + DataShards: dataShards, + ParityShards: parityShards, + Shards: dataShards + parityShards, + o: defaultOptions, + } + + for _, opt := range opts { + opt(&r.o) + } + if dataShards <= 0 || parityShards < 0 { + return nil, ErrInvShardNum + } + + if dataShards+parityShards > 256 { + return nil, ErrMaxShardNum + } + + if parityShards == 0 { + return &r, nil + } + + var err error + switch { + case r.o.fastOneParity && parityShards == 1: + r.m, err = buildXorMatrix(dataShards, r.Shards) + case r.o.useCauchy: + r.m, err = buildMatrixCauchy(dataShards, r.Shards) + case r.o.usePAR1Matrix: + r.m, err = buildMatrixPAR1(dataShards, r.Shards) + default: + r.m, err = buildMatrix(dataShards, r.Shards) + } + if err != nil { + return nil, err + } + + // Calculate what we want per round + r.o.perRound = cpuid.CPU.Cache.L2 + + divide := parityShards + 1 + if avx2CodeGen && r.o.useAVX2 && (dataShards > maxAvx2Inputs || parityShards > maxAvx2Outputs) { + // Base on L1 cache if we have many inputs. + r.o.perRound = cpuid.CPU.Cache.L1D + divide = 0 + if dataShards > maxAvx2Inputs { + divide += maxAvx2Inputs + } else { + divide += dataShards + } + if parityShards > maxAvx2Inputs { + divide += maxAvx2Outputs + } else { + divide += parityShards + } + } + + if r.o.perRound <= 0 { + // Set to 128K if undetectable. + r.o.perRound = 128 << 10 + } + + if cpuid.CPU.ThreadsPerCore > 1 && r.o.maxGoroutines > cpuid.CPU.PhysicalCores { + // If multiple threads per core, make sure they don't contend for cache. + r.o.perRound /= cpuid.CPU.ThreadsPerCore + } + + // 1 input + parity must fit in cache, and we add one more to be safer. + r.o.perRound = r.o.perRound / divide + // Align to 64 bytes. + r.o.perRound = ((r.o.perRound + 63) / 64) * 64 + + if r.o.minSplitSize <= 0 { + // Set minsplit as high as we can, but still have parity in L1. + cacheSize := cpuid.CPU.Cache.L1D + if cacheSize <= 0 { + cacheSize = 32 << 10 + } + + r.o.minSplitSize = cacheSize / (parityShards + 1) + // Min 1K + if r.o.minSplitSize < 1024 { + r.o.minSplitSize = 1024 + } + } + + if r.o.shardSize > 0 { + p := runtime.GOMAXPROCS(0) + if p == 1 || r.o.shardSize <= r.o.minSplitSize*2 { + // Not worth it. + r.o.maxGoroutines = 1 + } else { + g := r.o.shardSize / r.o.perRound + + // Overprovision by a factor of 2. + if g < p*2 && r.o.perRound > r.o.minSplitSize*2 { + g = p * 2 + r.o.perRound /= 2 + } + + // Have g be multiple of p + g += p - 1 + g -= g % p + + r.o.maxGoroutines = g + } + } + + // Generated AVX2 does not need data to stay in L1 cache between runs. + // We will be purely limited by RAM speed. + if r.canAVX2C(avx2CodeGenMinSize, maxAvx2Inputs, maxAvx2Outputs) && r.o.maxGoroutines > avx2CodeGenMaxGoroutines { + r.o.maxGoroutines = avx2CodeGenMaxGoroutines + } + + // Inverted matrices are cached in a tree keyed by the indices + // of the invalid rows of the data to reconstruct. + // The inversion root node will have the identity matrix as + // its inversion matrix because it implies there are no errors + // with the original data. + if r.o.inversionCache { + r.tree = newInversionTree(dataShards, parityShards) + } + + r.parity = make([][]byte, parityShards) + for i := range r.parity { + r.parity[i] = r.m[dataShards+i] + } + + if avx2CodeGen && r.o.useAVX2 { + sz := r.DataShards * r.ParityShards * 2 * 32 + r.mPool.New = func() interface{} { + return make([]byte, sz) + } + } + return &r, err +} + +// ErrTooFewShards is returned if too few shards where given to +// Encode/Verify/Reconstruct/Update. It will also be returned from Reconstruct +// if there were too few shards to reconstruct the missing data. +var ErrTooFewShards = errors.New("too few shards given") + +// Encode parity for a set of data shards. +// An array 'shards' containing data shards followed by parity shards. +// The number of shards must match the number given to New. +// Each shard is a byte array, and they must all be the same size. +// The parity shards will always be overwritten and the data shards +// will remain the same. +func (r *reedSolomon) Encode(shards [][]byte) error { + if len(shards) != r.Shards { + return ErrTooFewShards + } + + err := checkShards(shards, false) + if err != nil { + return err + } + + // Get the slice of output buffers. + output := shards[r.DataShards:] + + // Do the coding. + r.codeSomeShards(r.parity, shards[0:r.DataShards], output[:r.ParityShards], len(shards[0])) + return nil +} + +// EncodeIdx will add parity for a single data shard. +// Parity shards should start out zeroed. The caller must zero them before first call. +// Data shards should only be delivered once. There is no check for this. +// The parity shards will always be updated and the data shards will remain the unchanged. +func (r *reedSolomon) EncodeIdx(dataShard []byte, idx int, parity [][]byte) error { + if len(parity) != r.ParityShards { + return ErrTooFewShards + } + if len(parity) == 0 { + return nil + } + if idx < 0 || idx >= r.DataShards { + return ErrInvShardNum + } + err := checkShards(parity, false) + if err != nil { + return err + } + if len(parity[0]) != len(dataShard) { + return ErrShardSize + } + + // Process using no goroutines for now. + start, end := 0, r.o.perRound + if end > len(dataShard) { + end = len(dataShard) + } + + for start < len(dataShard) { + in := dataShard[start:end] + for iRow := 0; iRow < r.ParityShards; iRow++ { + galMulSliceXor(r.parity[iRow][idx], in, parity[iRow][start:end], &r.o) + } + start = end + end += r.o.perRound + if end > len(dataShard) { + end = len(dataShard) + } + } + return nil +} + +// ErrInvalidInput is returned if invalid input parameter of Update. +var ErrInvalidInput = errors.New("invalid input") + +func (r *reedSolomon) Update(shards [][]byte, newDatashards [][]byte) error { + if len(shards) != r.Shards { + return ErrTooFewShards + } + + if len(newDatashards) != r.DataShards { + return ErrTooFewShards + } + + err := checkShards(shards, true) + if err != nil { + return err + } + + err = checkShards(newDatashards, true) + if err != nil { + return err + } + + for i := range newDatashards { + if newDatashards[i] != nil && shards[i] == nil { + return ErrInvalidInput + } + } + for _, p := range shards[r.DataShards:] { + if p == nil { + return ErrInvalidInput + } + } + + shardSize := shardSize(shards) + + // Get the slice of output buffers. + output := shards[r.DataShards:] + + // Do the coding. + r.updateParityShards(r.parity, shards[0:r.DataShards], newDatashards[0:r.DataShards], output, r.ParityShards, shardSize) + return nil +} + +func (r *reedSolomon) updateParityShards(matrixRows, oldinputs, newinputs, outputs [][]byte, outputCount, byteCount int) { + if len(outputs) == 0 { + return + } + + if r.o.maxGoroutines > 1 && byteCount > r.o.minSplitSize { + r.updateParityShardsP(matrixRows, oldinputs, newinputs, outputs, outputCount, byteCount) + return + } + + for c := 0; c < r.DataShards; c++ { + in := newinputs[c] + if in == nil { + continue + } + oldin := oldinputs[c] + // oldinputs data will be changed + sliceXor(in, oldin, &r.o) + for iRow := 0; iRow < outputCount; iRow++ { + galMulSliceXor(matrixRows[iRow][c], oldin, outputs[iRow], &r.o) + } + } +} + +func (r *reedSolomon) updateParityShardsP(matrixRows, oldinputs, newinputs, outputs [][]byte, outputCount, byteCount int) { + var wg sync.WaitGroup + do := byteCount / r.o.maxGoroutines + if do < r.o.minSplitSize { + do = r.o.minSplitSize + } + start := 0 + for start < byteCount { + if start+do > byteCount { + do = byteCount - start + } + wg.Add(1) + go func(start, stop int) { + for c := 0; c < r.DataShards; c++ { + in := newinputs[c] + if in == nil { + continue + } + oldin := oldinputs[c] + // oldinputs data will be change + sliceXor(in[start:stop], oldin[start:stop], &r.o) + for iRow := 0; iRow < outputCount; iRow++ { + galMulSliceXor(matrixRows[iRow][c], oldin[start:stop], outputs[iRow][start:stop], &r.o) + } + } + wg.Done() + }(start, start+do) + start += do + } + wg.Wait() +} + +// Verify returns true if the parity shards contain the right data. +// The data is the same format as Encode. No data is modified. +func (r *reedSolomon) Verify(shards [][]byte) (bool, error) { + if len(shards) != r.Shards { + return false, ErrTooFewShards + } + err := checkShards(shards, false) + if err != nil { + return false, err + } + + // Slice of buffers being checked. + toCheck := shards[r.DataShards:] + + // Do the checking. + return r.checkSomeShards(r.parity, shards[:r.DataShards], toCheck[:r.ParityShards], len(shards[0])), nil +} + +func (r *reedSolomon) canAVX2C(byteCount int, inputs, outputs int) bool { + return avx2CodeGen && r.o.useAVX2 && + byteCount >= avx2CodeGenMinSize && inputs+outputs >= avx2CodeGenMinShards && + inputs <= maxAvx2Inputs && outputs <= maxAvx2Outputs +} + +// Multiplies a subset of rows from a coding matrix by a full set of +// input shards to produce some output shards. +// 'matrixRows' is The rows from the matrix to use. +// 'inputs' An array of byte arrays, each of which is one input shard. +// The number of inputs used is determined by the length of each matrix row. +// outputs Byte arrays where the computed shards are stored. +// The number of outputs computed, and the +// number of matrix rows used, is determined by +// outputCount, which is the number of outputs to compute. +func (r *reedSolomon) codeSomeShards(matrixRows, inputs, outputs [][]byte, byteCount int) { + if len(outputs) == 0 { + return + } + switch { + case r.o.useAVX512 && r.o.maxGoroutines > 1 && byteCount > r.o.minSplitSize && len(inputs) >= 4 && len(outputs) >= 2: + r.codeSomeShardsAvx512P(matrixRows, inputs, outputs, byteCount) + return + case r.o.useAVX512 && len(inputs) >= 4 && len(outputs) >= 2: + r.codeSomeShardsAvx512(matrixRows, inputs, outputs, byteCount) + return + case byteCount > r.o.minSplitSize: + r.codeSomeShardsP(matrixRows, inputs, outputs, byteCount) + return + } + + // Process using no goroutines + start, end := 0, r.o.perRound + if end > len(inputs[0]) { + end = len(inputs[0]) + } + if r.canAVX2C(byteCount, len(inputs), len(outputs)) { + m := genAvx2Matrix(matrixRows, len(inputs), 0, len(outputs), r.mPool.Get().([]byte)) + start += galMulSlicesAvx2(m, inputs, outputs, 0, byteCount) + r.mPool.Put(m) + end = len(inputs[0]) + } else if len(inputs)+len(outputs) > avx2CodeGenMinShards && r.canAVX2C(byteCount, maxAvx2Inputs, maxAvx2Outputs) { + end = len(inputs[0]) + inIdx := 0 + m := r.mPool.Get().([]byte) + defer r.mPool.Put(m) + ins := inputs + for len(ins) > 0 { + inPer := ins + if len(inPer) > maxAvx2Inputs { + inPer = inPer[:maxAvx2Inputs] + } + outs := outputs + outIdx := 0 + for len(outs) > 0 { + outPer := outs + if len(outPer) > maxAvx2Outputs { + outPer = outPer[:maxAvx2Outputs] + } + m = genAvx2Matrix(matrixRows[outIdx:], len(inPer), inIdx, len(outPer), m) + if inIdx == 0 { + galMulSlicesAvx2(m, inPer, outPer, 0, byteCount) + } else { + galMulSlicesAvx2Xor(m, inPer, outPer, 0, byteCount) + } + start = byteCount & avxSizeMask + outIdx += len(outPer) + outs = outs[len(outPer):] + } + inIdx += len(inPer) + ins = ins[len(inPer):] + } + if start >= end { + return + } + } + for start < len(inputs[0]) { + for c := 0; c < len(inputs); c++ { + in := inputs[c][start:end] + for iRow := 0; iRow < len(outputs); iRow++ { + if c == 0 { + galMulSlice(matrixRows[iRow][c], in, outputs[iRow][start:end], &r.o) + } else { + galMulSliceXor(matrixRows[iRow][c], in, outputs[iRow][start:end], &r.o) + } + } + } + start = end + end += r.o.perRound + if end > len(inputs[0]) { + end = len(inputs[0]) + } + } +} + +// Perform the same as codeSomeShards, but split the workload into +// several goroutines. +func (r *reedSolomon) codeSomeShardsP(matrixRows, inputs, outputs [][]byte, byteCount int) { + var wg sync.WaitGroup + gor := r.o.maxGoroutines + + var avx2Matrix []byte + useAvx2 := r.canAVX2C(byteCount, len(inputs), len(outputs)) + if useAvx2 { + avx2Matrix = genAvx2Matrix(matrixRows, len(inputs), 0, len(outputs), r.mPool.Get().([]byte)) + defer r.mPool.Put(avx2Matrix) + } else if byteCount < 10<<20 && len(inputs)+len(outputs) > avx2CodeGenMinShards && + r.canAVX2C(byteCount/4, maxAvx2Inputs, maxAvx2Outputs) { + // It appears there is a switchover point at around 10MB where + // Regular processing is faster... + r.codeSomeShardsAVXP(matrixRows, inputs, outputs, byteCount) + return + } + + do := byteCount / gor + if do < r.o.minSplitSize { + do = r.o.minSplitSize + } + + exec := func(start, stop int) { + if useAvx2 && stop-start >= 64 { + start += galMulSlicesAvx2(avx2Matrix, inputs, outputs, start, stop) + } + + lstart, lstop := start, start+r.o.perRound + if lstop > stop { + lstop = stop + } + for lstart < stop { + for c := 0; c < len(inputs); c++ { + in := inputs[c][lstart:lstop] + for iRow := 0; iRow < len(outputs); iRow++ { + if c == 0 { + galMulSlice(matrixRows[iRow][c], in, outputs[iRow][lstart:lstop], &r.o) + } else { + galMulSliceXor(matrixRows[iRow][c], in, outputs[iRow][lstart:lstop], &r.o) + } + } + } + lstart = lstop + lstop += r.o.perRound + if lstop > stop { + lstop = stop + } + } + wg.Done() + } + if gor <= 1 { + wg.Add(1) + exec(0, byteCount) + return + } + + // Make sizes divisible by 64 + do = (do + 63) & (^63) + start := 0 + for start < byteCount { + if start+do > byteCount { + do = byteCount - start + } + + wg.Add(1) + go exec(start, start+do) + start += do + } + wg.Wait() +} + +// Perform the same as codeSomeShards, but split the workload into +// several goroutines. +func (r *reedSolomon) codeSomeShardsAVXP(matrixRows, inputs, outputs [][]byte, byteCount int) { + var wg sync.WaitGroup + gor := r.o.maxGoroutines + + type state struct { + input [][]byte + output [][]byte + m []byte + first bool + } + // Make a plan... + plan := make([]state, 0, ((len(inputs)+maxAvx2Inputs-1)/maxAvx2Inputs)*((len(outputs)+maxAvx2Outputs-1)/maxAvx2Outputs)) + + tmp := r.mPool.Get().([]byte) + defer func(b []byte) { + r.mPool.Put(b) + }(tmp) + + // Flips between input first to output first. + // We put the smallest data load in the inner loop. + if len(inputs) > len(outputs) { + inIdx := 0 + ins := inputs + for len(ins) > 0 { + inPer := ins + if len(inPer) > maxAvx2Inputs { + inPer = inPer[:maxAvx2Inputs] + } + outs := outputs + outIdx := 0 + for len(outs) > 0 { + outPer := outs + if len(outPer) > maxAvx2Outputs { + outPer = outPer[:maxAvx2Outputs] + } + // Generate local matrix + m := genAvx2Matrix(matrixRows[outIdx:], len(inPer), inIdx, len(outPer), tmp) + tmp = tmp[len(m):] + plan = append(plan, state{ + input: inPer, + output: outPer, + m: m, + first: inIdx == 0, + }) + outIdx += len(outPer) + outs = outs[len(outPer):] + } + inIdx += len(inPer) + ins = ins[len(inPer):] + } + } else { + outs := outputs + outIdx := 0 + for len(outs) > 0 { + outPer := outs + if len(outPer) > maxAvx2Outputs { + outPer = outPer[:maxAvx2Outputs] + } + + inIdx := 0 + ins := inputs + for len(ins) > 0 { + inPer := ins + if len(inPer) > maxAvx2Inputs { + inPer = inPer[:maxAvx2Inputs] + } + // Generate local matrix + m := genAvx2Matrix(matrixRows[outIdx:], len(inPer), inIdx, len(outPer), tmp) + tmp = tmp[len(m):] + //fmt.Println("bytes:", len(inPer)*r.o.perRound, "out:", len(outPer)*r.o.perRound) + plan = append(plan, state{ + input: inPer, + output: outPer, + m: m, + first: inIdx == 0, + }) + inIdx += len(inPer) + ins = ins[len(inPer):] + } + outIdx += len(outPer) + outs = outs[len(outPer):] + } + } + + do := byteCount / gor + if do < r.o.minSplitSize { + do = r.o.minSplitSize + } + + exec := func(start, stop int) { + lstart, lstop := start, start+r.o.perRound + if lstop > stop { + lstop = stop + } + for lstart < stop { + if lstop-lstart >= minAvx2Size { + // Execute plan... + for _, p := range plan { + if p.first { + galMulSlicesAvx2(p.m, p.input, p.output, lstart, lstop) + } else { + galMulSlicesAvx2Xor(p.m, p.input, p.output, lstart, lstop) + } + } + lstart += (lstop - lstart) & avxSizeMask + if lstart == lstop { + lstop += r.o.perRound + if lstop > stop { + lstop = stop + } + continue + } + } + + for c := range inputs { + in := inputs[c][lstart:lstop] + for iRow := 0; iRow < len(outputs); iRow++ { + if c == 0 { + galMulSlice(matrixRows[iRow][c], in, outputs[iRow][lstart:lstop], &r.o) + } else { + galMulSliceXor(matrixRows[iRow][c], in, outputs[iRow][lstart:lstop], &r.o) + } + } + } + lstart = lstop + lstop += r.o.perRound + if lstop > stop { + lstop = stop + } + } + wg.Done() + } + if gor == 1 { + wg.Add(1) + exec(0, byteCount) + return + } + + // Make sizes divisible by 64 + do = (do + 63) & (^63) + start := 0 + for start < byteCount { + if start+do > byteCount { + do = byteCount - start + } + + wg.Add(1) + go exec(start, start+do) + start += do + } + wg.Wait() +} + +// checkSomeShards is mostly the same as codeSomeShards, +// except this will check values and return +// as soon as a difference is found. +func (r *reedSolomon) checkSomeShards(matrixRows, inputs, toCheck [][]byte, byteCount int) bool { + if len(toCheck) == 0 { + return true + } + + outputs := make([][]byte, len(toCheck)) + for i := range outputs { + outputs[i] = make([]byte, byteCount) + } + r.codeSomeShards(matrixRows, inputs, outputs, byteCount) + + for i, calc := range outputs { + if !bytes.Equal(calc, toCheck[i]) { + return false + } + } + return true +} + +// ErrShardNoData will be returned if there are no shards, +// or if the length of all shards is zero. +var ErrShardNoData = errors.New("no shard data") + +// ErrShardSize is returned if shard length isn't the same for all +// shards. +var ErrShardSize = errors.New("shard sizes do not match") + +// checkShards will check if shards are the same size +// or 0, if allowed. An error is returned if this fails. +// An error is also returned if all shards are size 0. +func checkShards(shards [][]byte, nilok bool) error { + size := shardSize(shards) + if size == 0 { + return ErrShardNoData + } + for _, shard := range shards { + if len(shard) != size { + if len(shard) != 0 || !nilok { + return ErrShardSize + } + } + } + return nil +} + +// shardSize return the size of a single shard. +// The first non-zero size is returned, +// or 0 if all shards are size 0. +func shardSize(shards [][]byte) int { + for _, shard := range shards { + if len(shard) != 0 { + return len(shard) + } + } + return 0 +} + +// Reconstruct will recreate the missing shards, if possible. +// +// Given a list of shards, some of which contain data, fills in the +// ones that don't have data. +// +// The length of the array must be equal to Shards. +// You indicate that a shard is missing by setting it to nil or zero-length. +// If a shard is zero-length but has sufficient capacity, that memory will +// be used, otherwise a new []byte will be allocated. +// +// If there are too few shards to reconstruct the missing +// ones, ErrTooFewShards will be returned. +// +// The reconstructed shard set is complete, but integrity is not verified. +// Use the Verify function to check if data set is ok. +func (r *reedSolomon) Reconstruct(shards [][]byte) error { + return r.reconstruct(shards, false) +} + +// ReconstructData will recreate any missing data shards, if possible. +// +// Given a list of shards, some of which contain data, fills in the +// data shards that don't have data. +// +// The length of the array must be equal to Shards. +// You indicate that a shard is missing by setting it to nil or zero-length. +// If a shard is zero-length but has sufficient capacity, that memory will +// be used, otherwise a new []byte will be allocated. +// +// If there are too few shards to reconstruct the missing +// ones, ErrTooFewShards will be returned. +// +// As the reconstructed shard set may contain missing parity shards, +// calling the Verify function is likely to fail. +func (r *reedSolomon) ReconstructData(shards [][]byte) error { + return r.reconstruct(shards, true) +} + +// reconstruct will recreate the missing data shards, and unless +// dataOnly is true, also the missing parity shards +// +// The length of the array must be equal to Shards. +// You indicate that a shard is missing by setting it to nil. +// +// If there are too few shards to reconstruct the missing +// ones, ErrTooFewShards will be returned. +func (r *reedSolomon) reconstruct(shards [][]byte, dataOnly bool) error { + if len(shards) != r.Shards { + return ErrTooFewShards + } + // Check arguments. + err := checkShards(shards, true) + if err != nil { + return err + } + + shardSize := shardSize(shards) + + // Quick check: are all of the shards present? If so, there's + // nothing to do. + numberPresent := 0 + dataPresent := 0 + for i := 0; i < r.Shards; i++ { + if len(shards[i]) != 0 { + numberPresent++ + if i < r.DataShards { + dataPresent++ + } + } + } + if numberPresent == r.Shards || dataOnly && dataPresent == r.DataShards { + // Cool. All of the shards data data. We don't + // need to do anything. + return nil + } + + // More complete sanity check + if numberPresent < r.DataShards { + return ErrTooFewShards + } + + // Pull out an array holding just the shards that + // correspond to the rows of the submatrix. These shards + // will be the input to the decoding process that re-creates + // the missing data shards. + // + // Also, create an array of indices of the valid rows we do have + // and the invalid rows we don't have up until we have enough valid rows. + subShards := make([][]byte, r.DataShards) + validIndices := make([]int, r.DataShards) + invalidIndices := make([]int, 0) + subMatrixRow := 0 + for matrixRow := 0; matrixRow < r.Shards && subMatrixRow < r.DataShards; matrixRow++ { + if len(shards[matrixRow]) != 0 { + subShards[subMatrixRow] = shards[matrixRow] + validIndices[subMatrixRow] = matrixRow + subMatrixRow++ + } else { + invalidIndices = append(invalidIndices, matrixRow) + } + } + + // Attempt to get the cached inverted matrix out of the tree + // based on the indices of the invalid rows. + dataDecodeMatrix := r.tree.GetInvertedMatrix(invalidIndices) + + // If the inverted matrix isn't cached in the tree yet we must + // construct it ourselves and insert it into the tree for the + // future. In this way the inversion tree is lazily loaded. + if dataDecodeMatrix == nil { + // Pull out the rows of the matrix that correspond to the + // shards that we have and build a square matrix. This + // matrix could be used to generate the shards that we have + // from the original data. + subMatrix, _ := newMatrix(r.DataShards, r.DataShards) + for subMatrixRow, validIndex := range validIndices { + for c := 0; c < r.DataShards; c++ { + subMatrix[subMatrixRow][c] = r.m[validIndex][c] + } + } + // Invert the matrix, so we can go from the encoded shards + // back to the original data. Then pull out the row that + // generates the shard that we want to decode. Note that + // since this matrix maps back to the original data, it can + // be used to create a data shard, but not a parity shard. + dataDecodeMatrix, err = subMatrix.Invert() + if err != nil { + return err + } + + // Cache the inverted matrix in the tree for future use keyed on the + // indices of the invalid rows. + err = r.tree.InsertInvertedMatrix(invalidIndices, dataDecodeMatrix, r.Shards) + if err != nil { + return err + } + } + + // Re-create any data shards that were missing. + // + // The input to the coding is all of the shards we actually + // have, and the output is the missing data shards. The computation + // is done using the special decode matrix we just built. + outputs := make([][]byte, r.ParityShards) + matrixRows := make([][]byte, r.ParityShards) + outputCount := 0 + + for iShard := 0; iShard < r.DataShards; iShard++ { + if len(shards[iShard]) == 0 { + if cap(shards[iShard]) >= shardSize { + shards[iShard] = shards[iShard][0:shardSize] + } else { + shards[iShard] = make([]byte, shardSize) + } + outputs[outputCount] = shards[iShard] + matrixRows[outputCount] = dataDecodeMatrix[iShard] + outputCount++ + } + } + r.codeSomeShards(matrixRows, subShards, outputs[:outputCount], shardSize) + + if dataOnly { + // Exit out early if we are only interested in the data shards + return nil + } + + // Now that we have all of the data shards intact, we can + // compute any of the parity that is missing. + // + // The input to the coding is ALL of the data shards, including + // any that we just calculated. The output is whichever of the + // data shards were missing. + outputCount = 0 + for iShard := r.DataShards; iShard < r.Shards; iShard++ { + if len(shards[iShard]) == 0 { + if cap(shards[iShard]) >= shardSize { + shards[iShard] = shards[iShard][0:shardSize] + } else { + shards[iShard] = make([]byte, shardSize) + } + outputs[outputCount] = shards[iShard] + matrixRows[outputCount] = r.parity[iShard-r.DataShards] + outputCount++ + } + } + r.codeSomeShards(matrixRows, shards[:r.DataShards], outputs[:outputCount], shardSize) + return nil +} + +// ErrShortData will be returned by Split(), if there isn't enough data +// to fill the number of shards. +var ErrShortData = errors.New("not enough data to fill the number of requested shards") + +// Split a data slice into the number of shards given to the encoder, +// and create empty parity shards if necessary. +// +// The data will be split into equally sized shards. +// If the data size isn't divisible by the number of shards, +// the last shard will contain extra zeros. +// +// There must be at least 1 byte otherwise ErrShortData will be +// returned. +// +// The data will not be copied, except for the last shard, so you +// should not modify the data of the input slice afterwards. +func (r *reedSolomon) Split(data []byte) ([][]byte, error) { + if len(data) == 0 { + return nil, ErrShortData + } + dataLen := len(data) + // Calculate number of bytes per data shard. + perShard := (len(data) + r.DataShards - 1) / r.DataShards + + if cap(data) > len(data) { + data = data[:cap(data)] + } + + // Only allocate memory if necessary + var padding []byte + if len(data) < (r.Shards * perShard) { + // calculate maximum number of full shards in `data` slice + fullShards := len(data) / perShard + padding = make([]byte, r.Shards*perShard-perShard*fullShards) + copy(padding, data[perShard*fullShards:]) + data = data[0 : perShard*fullShards] + } else { + for i := dataLen; i < dataLen+r.DataShards; i++ { + data[i] = 0 + } + } + + // Split into equal-length shards. + dst := make([][]byte, r.Shards) + i := 0 + for ; i < len(dst) && len(data) >= perShard; i++ { + dst[i] = data[:perShard:perShard] + data = data[perShard:] + } + + for j := 0; i+j < len(dst); j++ { + dst[i+j] = padding[:perShard:perShard] + padding = padding[perShard:] + } + + return dst, nil +} + +// ErrReconstructRequired is returned if too few data shards are intact and a +// reconstruction is required before you can successfully join the shards. +var ErrReconstructRequired = errors.New("reconstruction required as one or more required data shards are nil") + +// Join the shards and write the data segment to dst. +// +// Only the data shards are considered. +// You must supply the exact output size you want. +// +// If there are to few shards given, ErrTooFewShards will be returned. +// If the total data size is less than outSize, ErrShortData will be returned. +// If one or more required data shards are nil, ErrReconstructRequired will be returned. +func (r *reedSolomon) Join(dst io.Writer, shards [][]byte, outSize int) error { + // Do we have enough shards? + if len(shards) < r.DataShards { + return ErrTooFewShards + } + shards = shards[:r.DataShards] + + // Do we have enough data? + size := 0 + for _, shard := range shards { + if shard == nil { + return ErrReconstructRequired + } + size += len(shard) + + // Do we have enough data already? + if size >= outSize { + break + } + } + if size < outSize { + return ErrShortData + } + + // Copy data to dst + write := outSize + for _, shard := range shards { + if write < len(shard) { + _, err := dst.Write(shard[:write]) + return err + } + n, err := dst.Write(shard) + if err != nil { + return err + } + write -= n + } + return nil +} diff --git a/vendor/github.com/klauspost/reedsolomon/streaming.go b/vendor/github.com/klauspost/reedsolomon/streaming.go new file mode 100644 index 0000000..d048ba0 --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/streaming.go @@ -0,0 +1,603 @@ +/** + * Reed-Solomon Coding over 8-bit values. + * + * Copyright 2015, Klaus Post + * Copyright 2015, Backblaze, Inc. + */ + +package reedsolomon + +import ( + "bytes" + "errors" + "fmt" + "io" + "sync" +) + +// StreamEncoder is an interface to encode Reed-Salomon parity sets for your data. +// It provides a fully streaming interface, and processes data in blocks of up to 4MB. +// +// For small shard sizes, 10MB and below, it is recommended to use the in-memory interface, +// since the streaming interface has a start up overhead. +// +// For all operations, no readers and writers should not assume any order/size of +// individual reads/writes. +// +// For usage examples, see "stream-encoder.go" and "streamdecoder.go" in the examples +// folder. +type StreamEncoder interface { + // Encode parity shards for a set of data shards. + // + // Input is 'shards' containing readers for data shards followed by parity shards + // io.Writer. + // + // The number of shards must match the number given to NewStream(). + // + // Each reader must supply the same number of bytes. + // + // The parity shards will be written to the writer. + // The number of bytes written will match the input size. + // + // If a data stream returns an error, a StreamReadError type error + // will be returned. If a parity writer returns an error, a + // StreamWriteError will be returned. + Encode(data []io.Reader, parity []io.Writer) error + + // Verify returns true if the parity shards contain correct data. + // + // The number of shards must match the number total data+parity shards + // given to NewStream(). + // + // Each reader must supply the same number of bytes. + // If a shard stream returns an error, a StreamReadError type error + // will be returned. + Verify(shards []io.Reader) (bool, error) + + // Reconstruct will recreate the missing shards if possible. + // + // Given a list of valid shards (to read) and invalid shards (to write) + // + // You indicate that a shard is missing by setting it to nil in the 'valid' + // slice and at the same time setting a non-nil writer in "fill". + // An index cannot contain both non-nil 'valid' and 'fill' entry. + // If both are provided 'ErrReconstructMismatch' is returned. + // + // If there are too few shards to reconstruct the missing + // ones, ErrTooFewShards will be returned. + // + // The reconstructed shard set is complete, but integrity is not verified. + // Use the Verify function to check if data set is ok. + Reconstruct(valid []io.Reader, fill []io.Writer) error + + // Split a an input stream into the number of shards given to the encoder. + // + // The data will be split into equally sized shards. + // If the data size isn't dividable by the number of shards, + // the last shard will contain extra zeros. + // + // You must supply the total size of your input. + // 'ErrShortData' will be returned if it is unable to retrieve the + // number of bytes indicated. + Split(data io.Reader, dst []io.Writer, size int64) (err error) + + // Join the shards and write the data segment to dst. + // + // Only the data shards are considered. + // + // You must supply the exact output size you want. + // If there are to few shards given, ErrTooFewShards will be returned. + // If the total data size is less than outSize, ErrShortData will be returned. + Join(dst io.Writer, shards []io.Reader, outSize int64) error +} + +// StreamReadError is returned when a read error is encountered +// that relates to a supplied stream. +// This will allow you to find out which reader has failed. +type StreamReadError struct { + Err error // The error + Stream int // The stream number on which the error occurred +} + +// Error returns the error as a string +func (s StreamReadError) Error() string { + return fmt.Sprintf("error reading stream %d: %s", s.Stream, s.Err) +} + +// String returns the error as a string +func (s StreamReadError) String() string { + return s.Error() +} + +// StreamWriteError is returned when a write error is encountered +// that relates to a supplied stream. This will allow you to +// find out which reader has failed. +type StreamWriteError struct { + Err error // The error + Stream int // The stream number on which the error occurred +} + +// Error returns the error as a string +func (s StreamWriteError) Error() string { + return fmt.Sprintf("error writing stream %d: %s", s.Stream, s.Err) +} + +// String returns the error as a string +func (s StreamWriteError) String() string { + return s.Error() +} + +// rsStream contains a matrix for a specific +// distribution of datashards and parity shards. +// Construct if using NewStream() +type rsStream struct { + r *reedSolomon + o options + + // Shard reader + readShards func(dst [][]byte, in []io.Reader) error + // Shard writer + writeShards func(out []io.Writer, in [][]byte) error + + blockPool sync.Pool +} + +// NewStream creates a new encoder and initializes it to +// the number of data shards and parity shards that +// you want to use. You can reuse this encoder. +// Note that the maximum number of data shards is 256. +func NewStream(dataShards, parityShards int, o ...Option) (StreamEncoder, error) { + r := rsStream{o: defaultOptions} + for _, opt := range o { + opt(&r.o) + } + // Override block size if shard size is set. + if r.o.streamBS == 0 && r.o.shardSize > 0 { + r.o.streamBS = r.o.shardSize + } + if r.o.streamBS <= 0 { + r.o.streamBS = 4 << 20 + } + if r.o.shardSize == 0 && r.o.maxGoroutines == defaultOptions.maxGoroutines { + o = append(o, WithAutoGoroutines(r.o.streamBS)) + } + + enc, err := New(dataShards, parityShards, o...) + if err != nil { + return nil, err + } + r.r = enc.(*reedSolomon) + + r.blockPool.New = func() interface{} { + out := make([][]byte, dataShards+parityShards) + for i := range out { + out[i] = make([]byte, r.o.streamBS) + } + return out + } + r.readShards = readShards + r.writeShards = writeShards + if r.o.concReads { + r.readShards = cReadShards + } + if r.o.concWrites { + r.writeShards = cWriteShards + } + + return &r, err +} + +// NewStreamC creates a new encoder and initializes it to +// the number of data shards and parity shards given. +// +// This functions as 'NewStream', but allows you to enable CONCURRENT reads and writes. +func NewStreamC(dataShards, parityShards int, conReads, conWrites bool, o ...Option) (StreamEncoder, error) { + return NewStream(dataShards, parityShards, append(o, WithConcurrentStreamReads(conReads), WithConcurrentStreamWrites(conWrites))...) +} + +func (r *rsStream) createSlice() [][]byte { + out := r.blockPool.Get().([][]byte) + for i := range out { + out[i] = out[i][:r.o.streamBS] + } + return out +} + +// Encodes parity shards for a set of data shards. +// +// Input is 'shards' containing readers for data shards followed by parity shards +// io.Writer. +// +// The number of shards must match the number given to NewStream(). +// +// Each reader must supply the same number of bytes. +// +// The parity shards will be written to the writer. +// The number of bytes written will match the input size. +// +// If a data stream returns an error, a StreamReadError type error +// will be returned. If a parity writer returns an error, a +// StreamWriteError will be returned. +func (r *rsStream) Encode(data []io.Reader, parity []io.Writer) error { + if len(data) != r.r.DataShards { + return ErrTooFewShards + } + + if len(parity) != r.r.ParityShards { + return ErrTooFewShards + } + + all := r.createSlice() + defer r.blockPool.Put(all) + in := all[:r.r.DataShards] + out := all[r.r.DataShards:] + read := 0 + + for { + err := r.readShards(in, data) + switch err { + case nil: + case io.EOF: + if read == 0 { + return ErrShardNoData + } + return nil + default: + return err + } + out = trimShards(out, shardSize(in)) + read += shardSize(in) + err = r.r.Encode(all) + if err != nil { + return err + } + err = r.writeShards(parity, out) + if err != nil { + return err + } + } +} + +// Trim the shards so they are all the same size +func trimShards(in [][]byte, size int) [][]byte { + for i := range in { + if len(in[i]) != 0 { + in[i] = in[i][0:size] + } + if len(in[i]) < size { + in[i] = in[i][:0] + } + } + return in +} + +func readShards(dst [][]byte, in []io.Reader) error { + if len(in) != len(dst) { + panic("internal error: in and dst size do not match") + } + size := -1 + for i := range in { + if in[i] == nil { + dst[i] = dst[i][:0] + continue + } + n, err := io.ReadFull(in[i], dst[i]) + // The error is EOF only if no bytes were read. + // If an EOF happens after reading some but not all the bytes, + // ReadFull returns ErrUnexpectedEOF. + switch err { + case io.ErrUnexpectedEOF, io.EOF: + if size < 0 { + size = n + } else if n != size { + // Shard sizes must match. + return ErrShardSize + } + dst[i] = dst[i][0:n] + case nil: + continue + default: + return StreamReadError{Err: err, Stream: i} + } + } + if size == 0 { + return io.EOF + } + return nil +} + +func writeShards(out []io.Writer, in [][]byte) error { + if len(out) != len(in) { + panic("internal error: in and out size do not match") + } + for i := range in { + if out[i] == nil { + continue + } + n, err := out[i].Write(in[i]) + if err != nil { + return StreamWriteError{Err: err, Stream: i} + } + // + if n != len(in[i]) { + return StreamWriteError{Err: io.ErrShortWrite, Stream: i} + } + } + return nil +} + +type readResult struct { + n int + size int + err error +} + +// cReadShards reads shards concurrently +func cReadShards(dst [][]byte, in []io.Reader) error { + if len(in) != len(dst) { + panic("internal error: in and dst size do not match") + } + var wg sync.WaitGroup + wg.Add(len(in)) + res := make(chan readResult, len(in)) + for i := range in { + if in[i] == nil { + dst[i] = dst[i][:0] + wg.Done() + continue + } + go func(i int) { + defer wg.Done() + n, err := io.ReadFull(in[i], dst[i]) + // The error is EOF only if no bytes were read. + // If an EOF happens after reading some but not all the bytes, + // ReadFull returns ErrUnexpectedEOF. + res <- readResult{size: n, err: err, n: i} + + }(i) + } + wg.Wait() + close(res) + size := -1 + for r := range res { + switch r.err { + case io.ErrUnexpectedEOF, io.EOF: + if size < 0 { + size = r.size + } else if r.size != size { + // Shard sizes must match. + return ErrShardSize + } + dst[r.n] = dst[r.n][0:r.size] + case nil: + default: + return StreamReadError{Err: r.err, Stream: r.n} + } + } + if size == 0 { + return io.EOF + } + return nil +} + +// cWriteShards writes shards concurrently +func cWriteShards(out []io.Writer, in [][]byte) error { + if len(out) != len(in) { + panic("internal error: in and out size do not match") + } + var errs = make(chan error, len(out)) + var wg sync.WaitGroup + wg.Add(len(out)) + for i := range in { + go func(i int) { + defer wg.Done() + if out[i] == nil { + errs <- nil + return + } + n, err := out[i].Write(in[i]) + if err != nil { + errs <- StreamWriteError{Err: err, Stream: i} + return + } + if n != len(in[i]) { + errs <- StreamWriteError{Err: io.ErrShortWrite, Stream: i} + } + }(i) + } + wg.Wait() + close(errs) + for err := range errs { + if err != nil { + return err + } + } + + return nil +} + +// Verify returns true if the parity shards contain correct data. +// +// The number of shards must match the number total data+parity shards +// given to NewStream(). +// +// Each reader must supply the same number of bytes. +// If a shard stream returns an error, a StreamReadError type error +// will be returned. +func (r *rsStream) Verify(shards []io.Reader) (bool, error) { + if len(shards) != r.r.Shards { + return false, ErrTooFewShards + } + + read := 0 + all := r.createSlice() + defer r.blockPool.Put(all) + for { + err := r.readShards(all, shards) + if err == io.EOF { + if read == 0 { + return false, ErrShardNoData + } + return true, nil + } + if err != nil { + return false, err + } + read += shardSize(all) + ok, err := r.r.Verify(all) + if !ok || err != nil { + return ok, err + } + } +} + +// ErrReconstructMismatch is returned by the StreamEncoder, if you supply +// "valid" and "fill" streams on the same index. +// Therefore it is impossible to see if you consider the shard valid +// or would like to have it reconstructed. +var ErrReconstructMismatch = errors.New("valid shards and fill shards are mutually exclusive") + +// Reconstruct will recreate the missing shards if possible. +// +// Given a list of valid shards (to read) and invalid shards (to write) +// +// You indicate that a shard is missing by setting it to nil in the 'valid' +// slice and at the same time setting a non-nil writer in "fill". +// An index cannot contain both non-nil 'valid' and 'fill' entry. +// +// If there are too few shards to reconstruct the missing +// ones, ErrTooFewShards will be returned. +// +// The reconstructed shard set is complete when explicitly asked for all missing shards. +// However its integrity is not automatically verified. +// Use the Verify function to check in case the data set is complete. +func (r *rsStream) Reconstruct(valid []io.Reader, fill []io.Writer) error { + if len(valid) != r.r.Shards { + return ErrTooFewShards + } + if len(fill) != r.r.Shards { + return ErrTooFewShards + } + + all := r.createSlice() + defer r.blockPool.Put(all) + reconDataOnly := true + for i := range valid { + if valid[i] != nil && fill[i] != nil { + return ErrReconstructMismatch + } + if i >= r.r.DataShards && fill[i] != nil { + reconDataOnly = false + } + } + + read := 0 + for { + err := r.readShards(all, valid) + if err == io.EOF { + if read == 0 { + return ErrShardNoData + } + return nil + } + if err != nil { + return err + } + read += shardSize(all) + all = trimShards(all, shardSize(all)) + + if reconDataOnly { + err = r.r.ReconstructData(all) // just reconstruct missing data shards + } else { + err = r.r.Reconstruct(all) // reconstruct all missing shards + } + if err != nil { + return err + } + err = r.writeShards(fill, all) + if err != nil { + return err + } + } +} + +// Join the shards and write the data segment to dst. +// +// Only the data shards are considered. +// +// You must supply the exact output size you want. +// If there are to few shards given, ErrTooFewShards will be returned. +// If the total data size is less than outSize, ErrShortData will be returned. +func (r *rsStream) Join(dst io.Writer, shards []io.Reader, outSize int64) error { + // Do we have enough shards? + if len(shards) < r.r.DataShards { + return ErrTooFewShards + } + + // Trim off parity shards if any + shards = shards[:r.r.DataShards] + for i := range shards { + if shards[i] == nil { + return StreamReadError{Err: ErrShardNoData, Stream: i} + } + } + // Join all shards + src := io.MultiReader(shards...) + + // Copy data to dst + n, err := io.CopyN(dst, src, outSize) + if err == io.EOF { + return ErrShortData + } + if err != nil { + return err + } + if n != outSize { + return ErrShortData + } + return nil +} + +// Split a an input stream into the number of shards given to the encoder. +// +// The data will be split into equally sized shards. +// If the data size isn't dividable by the number of shards, +// the last shard will contain extra zeros. +// +// You must supply the total size of your input. +// 'ErrShortData' will be returned if it is unable to retrieve the +// number of bytes indicated. +func (r *rsStream) Split(data io.Reader, dst []io.Writer, size int64) error { + if size == 0 { + return ErrShortData + } + if len(dst) != r.r.DataShards { + return ErrInvShardNum + } + + for i := range dst { + if dst[i] == nil { + return StreamWriteError{Err: ErrShardNoData, Stream: i} + } + } + + // Calculate number of bytes per shard. + perShard := (size + int64(r.r.DataShards) - 1) / int64(r.r.DataShards) + + // Pad data to r.Shards*perShard. + padding := make([]byte, (int64(r.r.Shards)*perShard)-size) + data = io.MultiReader(data, bytes.NewBuffer(padding)) + + // Split into equal-length shards and copy. + for i := range dst { + n, err := io.CopyN(dst[i], data, perShard) + if err != io.EOF && err != nil { + return err + } + if n != perShard { + return ErrShortData + } + } + + return nil +} diff --git a/vendor/github.com/kuking/go-frodokem/.gitignore b/vendor/github.com/kuking/go-frodokem/.gitignore new file mode 100644 index 0000000..3a02bf1 --- /dev/null +++ b/vendor/github.com/kuking/go-frodokem/.gitignore @@ -0,0 +1,11 @@ +*.exe +*.exe~ +*.dll +*.so +*.dylib +*.test +*.out + +.idea +bin/ + diff --git a/vendor/github.com/kuking/go-frodokem/LICENSE b/vendor/github.com/kuking/go-frodokem/LICENSE new file mode 100644 index 0000000..cb89df3 --- /dev/null +++ b/vendor/github.com/kuking/go-frodokem/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Ed Riccardi + +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/kuking/go-frodokem/Makefile b/vendor/github.com/kuking/go-frodokem/Makefile new file mode 100644 index 0000000..6374be6 --- /dev/null +++ b/vendor/github.com/kuking/go-frodokem/Makefile @@ -0,0 +1,22 @@ +all: clean build test bench coverage + +clean: + go clean -testcache -cache + rm -f bin/soak_test bin/demo + +build: + go build + go build -o bin/soak_test mains/soak/soak.go + go build -o bin/demo mains/demo/demo.go + +test: + go test + +bench: + go test -run=Benchmark -bench=. -benchmem + +coverage: + go test -cover -coverprofile=coverage.out + go tool cover -func=coverage.out + + diff --git a/vendor/github.com/kuking/go-frodokem/README.md b/vendor/github.com/kuking/go-frodokem/README.md new file mode 100644 index 0000000..d548558 --- /dev/null +++ b/vendor/github.com/kuking/go-frodokem/README.md @@ -0,0 +1,45 @@ +# FrodoKEM in Golang +Golang implementation of FrodoKEM: a Practical quantum-secure key encapsulation from generic lattices (https://frodokem.org). +This implementation passes all KAT tests from the reference specification for all defined key sizes (640 / 976 / 1344) and variants (AES / SHAKE). + +## API +There is a demo app that uses every method in the API. i.e. methods for listing variants, for creating key pairs, +encapsulating & dencapsulating kems, auxiliary methods reporting cipher-text length, key-length, variant name, etc. +You can find it here: [demo.go](mains/demo/demo.go). The built binary will be placed in `bin/demo` (use `make build` to +generate it). + +You can also read the documentation using `go doc -all` in this package, or look at [impl.go](impl.go) and +[types.go](types.go). + +_Complete usage Snippet:_ +```go +import frodo "github.com/kuking/go-frodokem" + +kem := frodo.Frodo640AES() +pk, sk := kem.Keygen() // public-key, secret-key +ct, ssEnc, _ := kem.Encapsulate(pk) // cipher-text, shared-secret +ssDec, _ := kem.Dencapsulate(sk, ct) // recovered shared-secret +// ssEnc == ssDec +``` + +For a full key agreement example, see [agreement_test.go](agreement_test.go). + +#### Note on Concurrency +This library is stateless. A FrodoKEM struct (as returned by i.e. `frodo.Frodo640AES()`) can be used concurrently. +Keys are immutable `[]byte` and they can be shared between concurrent goroutines. + +## Author +Eduardo E.S. Riccardi, you can contact me via [linkedin](https://uk.linkedin.com/in/kukino), or you could find my email +address [here](https://kukino.uk/ed@kukino.uk.pub). + +## Releases + +v1.0.2 - 12 November 2021 - Updated XZ dependency version (only used in tests) + +v1.0.1 - 25 June 2020 - Fixed a possible timing attack [#2](https://github.com/kuking/go-frodokem/issues/2) + +v1.0.0 - 10 June 2020 - Feature complete. + +## Pending +- implement optimisations with SIMD instructions + diff --git a/vendor/github.com/kuking/go-frodokem/impl.go b/vendor/github.com/kuking/go-frodokem/impl.go new file mode 100644 index 0000000..71395be --- /dev/null +++ b/vendor/github.com/kuking/go-frodokem/impl.go @@ -0,0 +1,535 @@ +package go_frodokem + +import ( + "crypto/aes" + "encoding/binary" + "errors" + "golang.org/x/crypto/sha3" + "math" +) + +// Returns the name of this particular FrodoKEM variant, i.e. Frodo640AES +func (k *FrodoKEM) Name() string { + return k.name +} + +// Returns the shared secret (in bytes) this variant generates +func (k *FrodoKEM) SharedSecretLen() int { + return k.lenSS / 8 +} + +// Returns the public key length (in bytes) for this variant +func (k *FrodoKEM) PublicKeyLen() int { + return k.lenPkBytes +} + +// Returns the secret key length (in bytes) for this variant +func (k *FrodoKEM) SecretKeyLen() int { + return k.lenSkBytes +} + +// Returns the cipher-text length (in bytes) encapsulating the shared secret for this variant +func (k *FrodoKEM) CipherTextLen() int { + return k.lenCtBytes +} + +// Generate a key-pair +func (k *FrodoKEM) Keygen() (pk []uint8, sk []uint8) { + sSeedSEz := make([]byte, k.lenS/8+k.lenSeedSE/8+k.lenZ/8) + k.rng(sSeedSEz) // fmt.Println("randomness(", len(sSeedSEz), ")", strings.ToUpper(hex.EncodeToString(sSeedSEz))) + s := sSeedSEz[0 : k.lenS/8] + seedSE := sSeedSEz[k.lenS/8 : k.lenS/8+k.lenSeedSE/8] // fmt.Println("seedSE", hex.EncodeToString(seedSE)) + z := sSeedSEz[k.lenS/8+k.lenSeedSE/8 : k.lenS/8+k.lenSeedSE/8+k.lenZ/8] + seedA := k.shake(z, k.lenSeedA/8) // fmt.Println("seedA(", len(seedA), ")", strings.ToUpper(hex.EncodeToString(seedA))) + A := k.gen(seedA) + r := unpackUint16(k.shake(append([]byte{0x5f}, seedSE...), 2*k.n*k.nBar*k.lenChi/8)) //fmt.Println("r(", len(r), ")", r) + Stransposed := k.sampleMatrix(r[0:k.n*k.nBar], k.nBar, k.n) //fmt.Println("S^T", Stransposed) + S := matrixTranspose(Stransposed) + E := k.sampleMatrix(r[k.n*k.nBar:2*k.n*k.nBar], k.n, k.nBar) + B := matrixAddWithMod(matrixMulWithMod(A, S, k.q), E, k.q) + b := k.pack(B) // fmt.Println("b", hex.EncodeToString(b)) + pk = append(seedA, b...) + pkh := k.shake(pk, k.lenPkh/8) // fmt.Println("pkh", strings.ToUpper(hex.EncodeToString(pkh))) + stb := make([]uint8, len(Stransposed)*len(Stransposed[0])*2) + stbI := 0 + for i := 0; i < len(Stransposed); i++ { + for j := 0; j < len(Stransposed[i]); j++ { + stb[stbI] = uint8(Stransposed[i][j] & 0xff) + stbI++ + stb[stbI] = uint8(Stransposed[i][j] >> 8) + stbI++ + } + } + sk = append(s, seedA...) + sk = append(sk, b...) + sk = append(sk, stb...) + sk = append(sk, pkh...) + return +} + +// Generate a KEM returning the cipher-text and shared-secret +func (k *FrodoKEM) Encapsulate(pk []uint8) (ct []uint8, ssEnc []uint8, err error) { + if len(pk) != k.lenSeedA/8+k.d*k.n*k.nBar/8 { + err = errors.New("incorrect public key length") + return + } + seedA := pk[0 : k.lenSeedA/8] + b := pk[k.lenSeedA/8:] + mu := make([]uint8, k.lenMu/8) + k.rng(mu) + //fmt.Println("seedA", hex.EncodeToString(seedA)) + //fmt.Println("b", hex.EncodeToString(b)) + //fmt.Println("mu", hex.EncodeToString(mu)) + pkh := k.shake(pk, k.lenPkh/8) // fmt.Println("pkh", hex.EncodeToString(pkh)) + seedSE_k := k.shake(append(pkh, mu...), k.lenSeedSE/8+k.lenK/8) + seedSE := seedSE_k[0 : k.lenSeedSE/8] + _k := seedSE_k[k.lenSeedSE/8 : k.lenSeedSE/8+k.lenK/8] + r := unpackUint16(k.shake(append([]byte{0x96}, seedSE...), (2*k.mBar*k.n*k.mBar*k.mBar)*k.lenChi/8)) + Sprime := k.sampleMatrix(r[0:k.mBar*k.n], k.mBar, k.n) // fmt.Println("S'", Sprime) + Eprime := k.sampleMatrix(r[k.mBar*k.n:2*k.mBar*k.n], k.mBar, k.n) // fmt.Println("E'", Eprime) + A := k.gen(seedA) + Bprime := matrixAddWithMod(matrixMulWithMod2(Sprime, A, k.q), Eprime, k.q) // fmt.Println("b'", Bprime) + c1 := k.pack(Bprime) // fmt.Println("c1", hex.EncodeToString(c1)) + Eprimeprime := k.sampleMatrix(r[2*k.mBar*k.n:2*k.mBar*k.n+k.mBar*k.nBar], k.mBar, k.nBar) // fmt.Println("E''", Eprimeprime) + B := k.unpack(b, k.n, k.nBar) + V := matrixAddWithMod(matrixMulWithMod2(Sprime, B, k.q), Eprimeprime, k.q) + C := uMatrixAdd(V, k.encode(mu), k.q) + c2 := k.pack(C) // fmt.Println("c2", hex.EncodeToString(c2)) + ct = append(c1, c2...) + ssEnc = k.shake(append(ct, _k...), k.lenSS/8) + return +} + +// Returns the shared secret by using the provided cipher-text and secret-key +func (k *FrodoKEM) Dencapsulate(sk []uint8, ct []uint8) (ssDec []uint8, err error) { + if len(ct) != k.lenCtBytes { + err = errors.New("incorrect cipher length") + return + } + if len(sk) != k.lenSkBytes { + err = errors.New("incorrect secret key length") + return + } + + c1, c2 := k.unwrapCt(ct) + s, seedA, b, Stransposed, pkh := k.unwrapSk(sk) + S := matrixTranspose(Stransposed) + Bprime := k.unpack(c1, k.mBar, k.n) + C := k.unpack(c2, k.mBar, k.nBar) + BprimeS := matrixMulWithMod(Bprime, S, k.q) + M := matrixSubWithMod(C, BprimeS, k.q) + muPrime := k.decode(M) // fmt.Println("mu'", hex.EncodeToString(muPrime)) + + seedSEprime_kprime := k.shake(append(pkh, muPrime...), k.lenSeedSE/8+k.lenK/8) + seedSEprime := seedSEprime_kprime[0 : k.lenSeedSE/8] // fmt.Println("seedSE'", hex.EncodeToString(seedSEprime)) + kprime := seedSEprime_kprime[k.lenSeedSE/8:] // fmt.Println("k'", hex.EncodeToString(kprime)) + + r := unpackUint16(k.shake(append([]byte{0x96}, seedSEprime...), (2*k.mBar*k.n+k.mBar*k.mBar)*k.lenChi/8)) // fmt.Println("r", r) + + Sprime := k.sampleMatrix(r[0:k.mBar*k.n], k.mBar, k.n) + Eprime := k.sampleMatrix(r[k.mBar*k.n:2*k.mBar*k.n], k.mBar, k.n) + A := k.gen(seedA) + Bprimeprime := matrixAddWithMod(matrixMulWithMod2(Sprime, A, k.q), Eprime, k.q) + + Eprimeprime := k.sampleMatrix(r[2*k.mBar*k.n:2*k.mBar*k.n+k.mBar*k.nBar], k.mBar, k.nBar) + B := k.unpack(b, k.n, k.nBar) + V := matrixAddWithMod(matrixMulWithMod2(Sprime, B, k.q), Eprimeprime, k.q) + Cprime := uMatrixAdd(V, k.encode(muPrime), k.q) + + if constantUint16Equals(Bprime, Bprimeprime)+constantUint16Equals(C, Cprime) == 2 { + ssDec = k.shake(append(ct, kprime...), k.lenSS/8) + } else { + ssDec = k.shake(append(ct, s...), k.lenSS/8) + } + return +} + +// Overrides the default random number generator (crypto/rand) +func (k *FrodoKEM) OverrideRng(newRng func([]byte)) { + k.rng = newRng +} + +func (k *FrodoKEM) unwrapCt(ct []uint8) (c1 []uint8, c2 []uint8) { + ofs := 0 + size := k.mBar * k.n * k.d / 8 + c1 = ct[ofs:size] // fmt.Println("c1", hex.EncodeToString(c1)) + ofs += size + size = k.mBar * k.mBar * k.d / 8 + c2 = ct[ofs : ofs+size] // fmt.Println("c2", hex.EncodeToString(c2)) + return +} + +func (k *FrodoKEM) unwrapSk(sk []uint8) (s []uint8, seedA []uint8, b []uint8, Stransposed [][]int16, pkh []uint8) { + ofs := 0 + size := k.lenS / 8 + s = sk[ofs:size] // fmt.Println("s", hex.EncodeToString(s)) + ofs += size + size = k.lenSeedA / 8 + seedA = sk[ofs : ofs+size] // fmt.Println("seedA", hex.EncodeToString(seedA)) + ofs += size + size = k.d * k.n * k.nBar / 8 + b = sk[ofs : ofs+size] // fmt.Println("b", hex.EncodeToString(b)) + + ofs += size + size = k.n * k.nBar * 2 + Sbytes := sk[ofs : ofs+size] + + idx := 0 + Stransposed = make([][]int16, k.nBar) + for i := 0; i < k.nBar; i++ { + Stransposed[i] = make([]int16, k.n) + for j := 0; j < k.n; j++ { + Stransposed[i][j] = int16(Sbytes[idx]) + idx++ + Stransposed[i][j] |= int16(Sbytes[idx]) << 8 + idx++ + } + } + // fmt.Println("S^T", Stransposed) + + ofs += size + size = k.lenPkh / 8 + pkh = sk[ofs : ofs+size] // fmt.Println("pkh", hex.EncodeToString(pkh)) + + return +} + +func (k *FrodoKEM) sample(r uint16) (e int16) { + t := int(r >> 1) + e = 0 + for z := 0; z < len(k.tChi)-1; z++ { + if t > int(k.tChi[z]) { + e += 1 + } + } + r0 := r % 2 + if r0 == 1 { + e = -e + } + return +} + +func (k *FrodoKEM) sampleMatrix(r []uint16, n1 int, n2 int) (E [][]int16) { + E = make([][]int16, n1) + for i := 0; i < n1; i++ { + E[i] = make([]int16, n2) + for j := 0; j < n2; j++ { + E[i][j] = k.sample(r[i*n2+j]) + } + } + return E +} + +// FrodoKEM specification, Algorithm 3: Frodo.Pack +func (k *FrodoKEM) pack(C [][]uint16) (r []byte) { + rows := len(C) + cols := len(C[0]) + r = make([]byte, k.d*rows*cols/8) + var ri = 0 + var packed uint8 + var bits uint8 + for i := 0; i < rows; i++ { + for j := 0; j < cols; j++ { + val := C[i][j] + for b := 0; b < k.d; b++ { + packed <<= 1 + packed |= uint16BitN(val, k.d-b-1) + if bits++; bits == 8 { + r[ri] = packed + ri++ + packed = 0 + bits = 0 + } + } + } + } + if bits != 0 { + r[ri] = packed + } + return r +} + +// FrodoKEM specification, Algorithm 4: Frodo.Unpack +func (k *FrodoKEM) unpack(b []uint8, n1 int, n2 int) (C [][]uint16) { + bIdx := 0 + BBit := 7 + C = make([][]uint16, n1) + for i := 0; i < n1; i++ { + C[i] = make([]uint16, n2) + for j := 0; j < n2; j++ { + var val uint16 + for l := 0; l < k.d; l++ { + val <<= 1 + val |= uint16(uint8BitN(b[bIdx], BBit)) + if BBit--; BBit < 0 { + BBit = 7 + bIdx++ + } + } + C[i][j] = val + } + } + return +} + +// FrodoKEM specification, Algorithm 1 +func (k *FrodoKEM) encode(b []uint8) (K [][]uint16) { + multiplier := int(k.q) + if multiplier == 0 { + multiplier = 65536 + } + if k.b > 0 { + multiplier /= 2 << (k.b - 1) + } + bIdx := 0 + BBit := 0 + K = make([][]uint16, k.mBar) + for i := 0; i < k.mBar; i++ { + K[i] = make([]uint16, k.nBar) + for j := 0; j < k.nBar; j++ { + var val uint16 + for l := 0; l < k.b; l++ { + val |= uint16(uint8BitN(b[bIdx], BBit)) << l + if BBit++; BBit > 7 { + BBit = 0 + bIdx++ + } + } + K[i][j] = val * uint16(multiplier) + } + } + return +} + +// FrodoKEM specification, Algorithm 2 +func (k *FrodoKEM) decode(K [][]uint16) (b []uint8) { + b = make([]uint8, k.b*k.mBar*k.nBar/8) + fixedQ := float64(k.q) + if k.q == 0 { + fixedQ = float64(65535) + } + twoPowerB := int32(2 << (k.b - 1)) + twoPowerBf := float64(int(2 << (k.b - 1))) + bIdx := 0 + BBit := 0 + for i := 0; i < k.mBar; i++ { + for j := 0; j < k.nBar; j++ { + tmp := uint8(int32(math.Round(float64(K[i][j])*twoPowerBf/fixedQ)) % twoPowerB) //FIXME: please do this better + for l := 0; l < k.b; l++ { + if uint8BitN(tmp, l) == 1 { + b[bIdx] = uint8setBitN(b[bIdx], BBit) + } + BBit++ + if BBit == 8 { + bIdx++ + BBit = 0 + } + } + } + } + return +} + +func (k *FrodoKEM) genSHAKE128(seedA []byte) (A [][]uint16) { + var c = make([]byte, 2*k.n) + var tmp = make([]byte, 2+len(seedA)) + copy(tmp[2:], seedA) + A = make([][]uint16, k.n) + for i := 0; i < k.n; i++ { + A[i] = make([]uint16, k.n) + binary.LittleEndian.PutUint16(tmp[0:], uint16(i)) + sha3.ShakeSum128(c, tmp) + for j := 0; j < k.n; j++ { + A[i][j] = binary.LittleEndian.Uint16(c[j*2 : (j+1)*2]) + if k.q != 0 { + A[i][j] %= k.q + } + } + } + return +} + +func (k *FrodoKEM) genAES128(seedA []byte) (A [][]uint16) { + A = make([][]uint16, k.n) + cipher, err := aes.NewCipher(seedA) + if err != nil { + panic(err) + } + var b = [16]byte{} + var c = [16]byte{} + for i := 0; i < k.n; i++ { + A[i] = make([]uint16, k.n) + for j := 0; j < k.n; j += 8 { + binary.LittleEndian.PutUint16(b[0:2], uint16(i)) + binary.LittleEndian.PutUint16(b[2:4], uint16(j)) + cipher.Encrypt(c[:], b[:]) + for l := 0; l < 8; l++ { + A[i][j+l] = binary.LittleEndian.Uint16(c[l*2 : (l+1)*2]) + if k.q != 0 { + A[i][j+l] %= k.q + } + } + + } + } + return +} + +// constant time [][]uint16 equals, 1=true, 0=false +func constantUint16Equals(a [][]uint16, b [][]uint16) (ret int) { + ret = 1 + if len(a) != len(b) { + panic("Can not compare matrices of different size") + } + for i := 0; i < len(a); i++ { + if len(a[i]) != len(b[i]) { + panic("Can not compare matrices of different size") + } + for j := 0; j < len(a[i]); j++ { + if a[i][j] != b[i][j] { + ret = 0 + } + } + } + return +} + +func matrixAddWithMod(X [][]uint16, Y [][]int16, q uint16) (R [][]uint16) { + nrowsx := len(X) + ncolsx := len(X[0]) + nrowsy := len(Y) + ncolsy := len(Y[0]) + if nrowsx != nrowsy || ncolsx != ncolsy { + panic("can't add these matrices") + } + R = make([][]uint16, nrowsx) + for i := 0; i < nrowsx; i++ { + R[i] = make([]uint16, ncolsx) + for j := 0; j < ncolsx; j++ { + R[i][j] = uint16(int16(X[i][j]) + Y[i][j]) + if q != 0 { + R[i][j] %= q + } + } + } + return +} + +func uMatrixAdd(X [][]uint16, Y [][]uint16, q uint16) (R [][]uint16) { + nrowsx := len(X) + ncolsx := len(X[0]) + nrowsy := len(Y) + ncolsy := len(Y[0]) + if nrowsx != nrowsy || ncolsx != ncolsy { + panic("can't add these matrices") + } + R = make([][]uint16, nrowsx) + for i := 0; i < nrowsx; i++ { + R[i] = make([]uint16, ncolsx) + for j := 0; j < ncolsx; j++ { + R[i][j] = X[i][j] + Y[i][j] + if q != 0 { + R[i][j] %= q + } + } + } + return +} + +func matrixSubWithMod(X [][]uint16, Y [][]uint16, q uint16) (R [][]uint16) { + nrowsx := len(X) + ncolsx := len(X[0]) + nrowsy := len(Y) + ncolsy := len(Y[0]) + if nrowsx != nrowsy || ncolsx != ncolsy { + panic("can't sub these matrices") + } + R = make([][]uint16, nrowsx) + for i := 0; i < nrowsx; i++ { + R[i] = make([]uint16, ncolsx) + for j := 0; j < ncolsx; j++ { + R[i][j] = X[i][j] - Y[i][j] + if q != 0 { + R[i][j] %= q + } + } + } + return +} + +func matrixMulWithMod(X [][]uint16, Y [][]int16, q uint16) (R [][]uint16) { + nrowsx := len(X) + ncolsx := len(X[0]) + //nrowsy := len(y) + ncolsy := len(Y[0]) + R = make([][]uint16, nrowsx) + for i := 0; i < nrowsx; i++ { + R[i] = make([]uint16, ncolsy) + for j := 0; j < ncolsy; j++ { + var res uint16 + for k := 0; k < ncolsx; k++ { + res += uint16(int16(X[i][k]) * Y[k][j]) + } + if q != 0 { + res %= q + } + R[i][j] = res + } + } + return +} + +func matrixMulWithMod2(X [][]int16, Y [][]uint16, q uint16) (R [][]uint16) { + nrowsx := len(X) + ncolsx := len(X[0]) + //nrowsy := len(y) + ncolsy := len(Y[0]) + R = make([][]uint16, nrowsx) + for i := 0; i < nrowsx; i++ { + R[i] = make([]uint16, ncolsy) + for j := 0; j < ncolsy; j++ { + var res uint16 + for k := 0; k < ncolsx; k++ { + res += uint16(X[i][k] * int16(Y[k][j])) + } + if q != 0 { + res %= q + } + R[i][j] = res + } + } + return +} + +func matrixTranspose(O [][]int16) (T [][]int16) { + T = make([][]int16, len(O[0])) + for x := 0; x < len(T); x++ { + T[x] = make([]int16, len(O)) + for y := 0; y < len(O); y++ { + T[x][y] = O[y][x] + } + } + return +} + +func unpackUint16(bytes []byte) (r []uint16) { + r = make([]uint16, len(bytes)/2) + j := 0 + for i := 0; i+1 < len(bytes); i += 2 { + r[j] = binary.LittleEndian.Uint16(bytes[i : i+2]) + j++ + } + return r +} + +func uint8setBitN(val uint8, i int) uint8 { + return val | (1 << i) +} + +func uint16BitN(val uint16, i int) uint8 { + return uint8((val >> i) & 1) +} + +func uint8BitN(val uint8, i int) uint8 { + return (val >> i) & 1 +} diff --git a/vendor/github.com/kuking/go-frodokem/types.go b/vendor/github.com/kuking/go-frodokem/types.go new file mode 100644 index 0000000..045db1c --- /dev/null +++ b/vendor/github.com/kuking/go-frodokem/types.go @@ -0,0 +1,202 @@ +package go_frodokem + +import ( + "crypto/rand" + "golang.org/x/crypto/sha3" +) + +var variants = []FrodoKEM{ + Frodo640AES(), Frodo640SHAKE(), + Frodo976AES(), Frodo976SHAKE(), + Frodo1344AES(), Frodo1344SHAKE(), +} + +// Returns all the FrodoKEM variants supported as an array +func Variants() []FrodoKEM { + return variants +} + +type FrodoKEM struct { + // error_distribution + name string + errDistribution []uint16 + tChi []uint16 + d int + q uint16 + n int + nBar int + mBar int + b int + lenSeedA int + lenZ int + lenMu int + lenSeedSE int + lenS int + lenK int + lenPkh int + lenSS int + lenChi int + lenSkBytes int + lenPkBytes int + lenCtBytes int + shake func(msg []byte, digestLength int) []byte + gen func([]byte) [][]uint16 + rng func([]byte) +} + +// Returns a new FrodoKEM 640 AES variant (Generates 128 bits of secret) +func Frodo640AES() (f FrodoKEM) { + f = FrodoKEM{ + name: "Frodo640AES", + errDistribution: []uint16{9288, 8720, 7216, 5264, 3384, 1918, 958, 422, 164, 56, 17, 4, 1}, + d: 15, + q: 32768, + n: 640, + nBar: 8, + mBar: 8, + b: 2, + lenSeedA: 128, + lenZ: 128, + lenMu: 128, + lenSeedSE: 128, + lenS: 128, + lenK: 128, + lenPkh: 128, + lenSS: 128, + lenChi: 16, + lenSkBytes: 19888, + lenPkBytes: 9616, + lenCtBytes: 9720, + shake: shake128, + rng: cryptoRand, + } + f.tChi = cdfZeroCentredSymmetric(f.errDistribution) + f.gen = f.genAES128 + return +} + +// Returns a new FrodoKEM 640 SHAKE variant (Generates 128 bits of secret) +func Frodo640SHAKE() (f FrodoKEM) { + f = Frodo640AES() + f.name = "Frodo640Shake" + f.shake = shake128 + f.gen = f.genSHAKE128 + return +} + +// Returns a new FrodoKEM 976 AES variant (Generates 192 bits of secret) +func Frodo976AES() (f FrodoKEM) { + f = FrodoKEM{ + name: "Frodo976AES", + errDistribution: []uint16{11278, 10277, 7774, 4882, 2545, 1101, 396, 118, 29, 6, 1}, + d: 16, + q: 0, // means no mod in 16 bits uint + n: 976, + nBar: 8, + mBar: 8, + b: 3, + lenSeedA: 128, + lenZ: 128, + lenMu: 192, + lenSeedSE: 192, + lenS: 192, + lenK: 192, + lenPkh: 192, + lenSS: 192, + lenChi: 16, + lenSkBytes: 31296, + lenPkBytes: 15632, + lenCtBytes: 15744, + shake: shake256, + rng: cryptoRand, + } + f.tChi = cdfZeroCentredSymmetric(f.errDistribution) + f.gen = f.genAES128 + return +} + +// Returns a new FrodoKEM 976 SHAKE variant (Generates 192 bits of secret) +func Frodo976SHAKE() (f FrodoKEM) { + f = Frodo976AES() + f.name = "Frodo976Shake" + f.gen = f.genSHAKE128 + return +} + +// Returns a new FrodoKEM 1344 AES variant (Generates 256 bits of secret) +func Frodo1344AES() (f FrodoKEM) { + f = FrodoKEM{ + name: "Frodo1344AES", + errDistribution: []uint16{18286, 14320, 6876, 2023, 364, 40, 2}, + d: 16, + q: 0, + n: 1344, + nBar: 8, + mBar: 8, + b: 4, + lenSeedA: 128, + lenZ: 128, + lenMu: 256, + lenSeedSE: 256, + lenS: 256, + lenK: 256, + lenPkh: 256, + lenSS: 256, + lenChi: 16, + lenSkBytes: 43088, + lenPkBytes: 21520, + lenCtBytes: 21632, + shake: shake256, + rng: cryptoRand, + } + f.tChi = cdfZeroCentredSymmetric(f.errDistribution) + f.gen = f.genAES128 + return +} + +// Returns a new FrodoKEM 1344 SHAKE variant (Generates 256 bits of secret) +func Frodo1344SHAKE() (f FrodoKEM) { + f = Frodo1344AES() + f.name = "Frodo1344Shake" + f.gen = f.genSHAKE128 + return +} + +func sumUint16s(arr []uint16) (r uint16) { + r = 0 + for _, v := range arr { + r += v + } + return +} + +func cdfZeroCentredSymmetric(chi []uint16) (tChi []uint16) { + tChi = make([]uint16, len(chi)) + tChi[0] = (chi[0] / 2) - 1 + for z := 1; z < len(chi); z++ { + tChi[z] = tChi[0] + sumUint16s(chi[1:z+1]) + } + return +} + +func cryptoRand(target []byte) { + n, err := rand.Read(target) + if err != nil { + panic(err) + } + if len(target) != n { + panic("could not generate enough randomness") + } +} + +func shake128(msg []byte, size int) (hash []byte) { + hash = make([]byte, size) + sha3.ShakeSum128(hash, msg) + return +} + +func shake256(msg []byte, size int) (hash []byte) { + hash = make([]byte, size) + sha3.ShakeSum256(hash, msg) + return +} diff --git a/vendor/github.com/mattn/go-isatty/LICENSE b/vendor/github.com/mattn/go-isatty/LICENSE new file mode 100644 index 0000000..65dc692 --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/LICENSE @@ -0,0 +1,9 @@ +Copyright (c) Yasuhiro MATSUMOTO + +MIT License (Expat) + +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/mattn/go-isatty/README.md b/vendor/github.com/mattn/go-isatty/README.md new file mode 100644 index 0000000..3841835 --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/README.md @@ -0,0 +1,50 @@ +# go-isatty + +[![Godoc Reference](https://godoc.org/github.com/mattn/go-isatty?status.svg)](http://godoc.org/github.com/mattn/go-isatty) +[![Codecov](https://codecov.io/gh/mattn/go-isatty/branch/master/graph/badge.svg)](https://codecov.io/gh/mattn/go-isatty) +[![Coverage Status](https://coveralls.io/repos/github/mattn/go-isatty/badge.svg?branch=master)](https://coveralls.io/github/mattn/go-isatty?branch=master) +[![Go Report Card](https://goreportcard.com/badge/mattn/go-isatty)](https://goreportcard.com/report/mattn/go-isatty) + +isatty for golang + +## Usage + +```go +package main + +import ( + "fmt" + "github.com/mattn/go-isatty" + "os" +) + +func main() { + if isatty.IsTerminal(os.Stdout.Fd()) { + fmt.Println("Is Terminal") + } else if isatty.IsCygwinTerminal(os.Stdout.Fd()) { + fmt.Println("Is Cygwin/MSYS2 Terminal") + } else { + fmt.Println("Is Not Terminal") + } +} +``` + +## Installation + +``` +$ go get github.com/mattn/go-isatty +``` + +## License + +MIT + +## Author + +Yasuhiro Matsumoto (a.k.a mattn) + +## Thanks + +* k-takata: base idea for IsCygwinTerminal + + https://github.com/k-takata/go-iscygpty diff --git a/vendor/github.com/mattn/go-isatty/doc.go b/vendor/github.com/mattn/go-isatty/doc.go new file mode 100644 index 0000000..17d4f90 --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/doc.go @@ -0,0 +1,2 @@ +// Package isatty implements interface to isatty +package isatty diff --git a/vendor/github.com/mattn/go-isatty/go.test.sh b/vendor/github.com/mattn/go-isatty/go.test.sh new file mode 100644 index 0000000..012162b --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/go.test.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +set -e +echo "" > coverage.txt + +for d in $(go list ./... | grep -v vendor); do + go test -race -coverprofile=profile.out -covermode=atomic "$d" + if [ -f profile.out ]; then + cat profile.out >> coverage.txt + rm profile.out + fi +done diff --git a/vendor/github.com/mattn/go-isatty/isatty_bsd.go b/vendor/github.com/mattn/go-isatty/isatty_bsd.go new file mode 100644 index 0000000..39bbcf0 --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/isatty_bsd.go @@ -0,0 +1,19 @@ +//go:build (darwin || freebsd || openbsd || netbsd || dragonfly) && !appengine +// +build darwin freebsd openbsd netbsd dragonfly +// +build !appengine + +package isatty + +import "golang.org/x/sys/unix" + +// IsTerminal return true if the file descriptor is terminal. +func IsTerminal(fd uintptr) bool { + _, err := unix.IoctlGetTermios(int(fd), unix.TIOCGETA) + return err == nil +} + +// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2 +// terminal. This is also always false on this environment. +func IsCygwinTerminal(fd uintptr) bool { + return false +} diff --git a/vendor/github.com/mattn/go-isatty/isatty_others.go b/vendor/github.com/mattn/go-isatty/isatty_others.go new file mode 100644 index 0000000..3150322 --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/isatty_others.go @@ -0,0 +1,16 @@ +//go:build appengine || js || nacl || wasm +// +build appengine js nacl wasm + +package isatty + +// IsTerminal returns true if the file descriptor is terminal which +// is always false on js and appengine classic which is a sandboxed PaaS. +func IsTerminal(fd uintptr) bool { + return false +} + +// IsCygwinTerminal() return true if the file descriptor is a cygwin or msys2 +// terminal. This is also always false on this environment. +func IsCygwinTerminal(fd uintptr) bool { + return false +} diff --git a/vendor/github.com/mattn/go-isatty/isatty_plan9.go b/vendor/github.com/mattn/go-isatty/isatty_plan9.go new file mode 100644 index 0000000..bae7f9b --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/isatty_plan9.go @@ -0,0 +1,23 @@ +//go:build plan9 +// +build plan9 + +package isatty + +import ( + "syscall" +) + +// IsTerminal returns true if the given file descriptor is a terminal. +func IsTerminal(fd uintptr) bool { + path, err := syscall.Fd2path(int(fd)) + if err != nil { + return false + } + return path == "/dev/cons" || path == "/mnt/term/dev/cons" +} + +// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2 +// terminal. This is also always false on this environment. +func IsCygwinTerminal(fd uintptr) bool { + return false +} diff --git a/vendor/github.com/mattn/go-isatty/isatty_solaris.go b/vendor/github.com/mattn/go-isatty/isatty_solaris.go new file mode 100644 index 0000000..0c3acf2 --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/isatty_solaris.go @@ -0,0 +1,21 @@ +//go:build solaris && !appengine +// +build solaris,!appengine + +package isatty + +import ( + "golang.org/x/sys/unix" +) + +// IsTerminal returns true if the given file descriptor is a terminal. +// see: https://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libc/port/gen/isatty.c +func IsTerminal(fd uintptr) bool { + _, err := unix.IoctlGetTermio(int(fd), unix.TCGETA) + return err == nil +} + +// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2 +// terminal. This is also always false on this environment. +func IsCygwinTerminal(fd uintptr) bool { + return false +} diff --git a/vendor/github.com/mattn/go-isatty/isatty_tcgets.go b/vendor/github.com/mattn/go-isatty/isatty_tcgets.go new file mode 100644 index 0000000..6778765 --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/isatty_tcgets.go @@ -0,0 +1,19 @@ +//go:build (linux || aix || zos) && !appengine +// +build linux aix zos +// +build !appengine + +package isatty + +import "golang.org/x/sys/unix" + +// IsTerminal return true if the file descriptor is terminal. +func IsTerminal(fd uintptr) bool { + _, err := unix.IoctlGetTermios(int(fd), unix.TCGETS) + return err == nil +} + +// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2 +// terminal. This is also always false on this environment. +func IsCygwinTerminal(fd uintptr) bool { + return false +} diff --git a/vendor/github.com/mattn/go-isatty/isatty_windows.go b/vendor/github.com/mattn/go-isatty/isatty_windows.go new file mode 100644 index 0000000..8e3c991 --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/isatty_windows.go @@ -0,0 +1,125 @@ +//go:build windows && !appengine +// +build windows,!appengine + +package isatty + +import ( + "errors" + "strings" + "syscall" + "unicode/utf16" + "unsafe" +) + +const ( + objectNameInfo uintptr = 1 + fileNameInfo = 2 + fileTypePipe = 3 +) + +var ( + kernel32 = syscall.NewLazyDLL("kernel32.dll") + ntdll = syscall.NewLazyDLL("ntdll.dll") + procGetConsoleMode = kernel32.NewProc("GetConsoleMode") + procGetFileInformationByHandleEx = kernel32.NewProc("GetFileInformationByHandleEx") + procGetFileType = kernel32.NewProc("GetFileType") + procNtQueryObject = ntdll.NewProc("NtQueryObject") +) + +func init() { + // Check if GetFileInformationByHandleEx is available. + if procGetFileInformationByHandleEx.Find() != nil { + procGetFileInformationByHandleEx = nil + } +} + +// IsTerminal return true if the file descriptor is terminal. +func IsTerminal(fd uintptr) bool { + var st uint32 + r, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, fd, uintptr(unsafe.Pointer(&st)), 0) + return r != 0 && e == 0 +} + +// Check pipe name is used for cygwin/msys2 pty. +// Cygwin/MSYS2 PTY has a name like: +// \{cygwin,msys}-XXXXXXXXXXXXXXXX-ptyN-{from,to}-master +func isCygwinPipeName(name string) bool { + token := strings.Split(name, "-") + if len(token) < 5 { + return false + } + + if token[0] != `\msys` && + token[0] != `\cygwin` && + token[0] != `\Device\NamedPipe\msys` && + token[0] != `\Device\NamedPipe\cygwin` { + return false + } + + if token[1] == "" { + return false + } + + if !strings.HasPrefix(token[2], "pty") { + return false + } + + if token[3] != `from` && token[3] != `to` { + return false + } + + if token[4] != "master" { + return false + } + + return true +} + +// getFileNameByHandle use the undocomented ntdll NtQueryObject to get file full name from file handler +// since GetFileInformationByHandleEx is not available under windows Vista and still some old fashion +// guys are using Windows XP, this is a workaround for those guys, it will also work on system from +// Windows vista to 10 +// see https://stackoverflow.com/a/18792477 for details +func getFileNameByHandle(fd uintptr) (string, error) { + if procNtQueryObject == nil { + return "", errors.New("ntdll.dll: NtQueryObject not supported") + } + + var buf [4 + syscall.MAX_PATH]uint16 + var result int + r, _, e := syscall.Syscall6(procNtQueryObject.Addr(), 5, + fd, objectNameInfo, uintptr(unsafe.Pointer(&buf)), uintptr(2*len(buf)), uintptr(unsafe.Pointer(&result)), 0) + if r != 0 { + return "", e + } + return string(utf16.Decode(buf[4 : 4+buf[0]/2])), nil +} + +// IsCygwinTerminal() return true if the file descriptor is a cygwin or msys2 +// terminal. +func IsCygwinTerminal(fd uintptr) bool { + if procGetFileInformationByHandleEx == nil { + name, err := getFileNameByHandle(fd) + if err != nil { + return false + } + return isCygwinPipeName(name) + } + + // Cygwin/msys's pty is a pipe. + ft, _, e := syscall.Syscall(procGetFileType.Addr(), 1, fd, 0, 0) + if ft != fileTypePipe || e != 0 { + return false + } + + var buf [2 + syscall.MAX_PATH]uint16 + r, _, e := syscall.Syscall6(procGetFileInformationByHandleEx.Addr(), + 4, fd, fileNameInfo, uintptr(unsafe.Pointer(&buf)), + uintptr(len(buf)*2), 0, 0) + if r == 0 || e != 0 { + return false + } + + l := *(*uint32)(unsafe.Pointer(&buf)) + return isCygwinPipeName(string(utf16.Decode(buf[2 : 2+l/2]))) +} diff --git a/vendor/github.com/pkg/errors/.gitignore b/vendor/github.com/pkg/errors/.gitignore new file mode 100644 index 0000000..daf913b --- /dev/null +++ b/vendor/github.com/pkg/errors/.gitignore @@ -0,0 +1,24 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe +*.test +*.prof diff --git a/vendor/github.com/pkg/errors/.travis.yml b/vendor/github.com/pkg/errors/.travis.yml new file mode 100644 index 0000000..9159de0 --- /dev/null +++ b/vendor/github.com/pkg/errors/.travis.yml @@ -0,0 +1,10 @@ +language: go +go_import_path: github.com/pkg/errors +go: + - 1.11.x + - 1.12.x + - 1.13.x + - tip + +script: + - make check diff --git a/vendor/github.com/pkg/errors/LICENSE b/vendor/github.com/pkg/errors/LICENSE new file mode 100644 index 0000000..835ba3e --- /dev/null +++ b/vendor/github.com/pkg/errors/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2015, Dave Cheney +All rights reserved. + +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. + +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 HOLDER 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/github.com/pkg/errors/Makefile b/vendor/github.com/pkg/errors/Makefile new file mode 100644 index 0000000..ce9d7cd --- /dev/null +++ b/vendor/github.com/pkg/errors/Makefile @@ -0,0 +1,44 @@ +PKGS := github.com/pkg/errors +SRCDIRS := $(shell go list -f '{{.Dir}}' $(PKGS)) +GO := go + +check: test vet gofmt misspell unconvert staticcheck ineffassign unparam + +test: + $(GO) test $(PKGS) + +vet: | test + $(GO) vet $(PKGS) + +staticcheck: + $(GO) get honnef.co/go/tools/cmd/staticcheck + staticcheck -checks all $(PKGS) + +misspell: + $(GO) get github.com/client9/misspell/cmd/misspell + misspell \ + -locale GB \ + -error \ + *.md *.go + +unconvert: + $(GO) get github.com/mdempsky/unconvert + unconvert -v $(PKGS) + +ineffassign: + $(GO) get github.com/gordonklaus/ineffassign + find $(SRCDIRS) -name '*.go' | xargs ineffassign + +pedantic: check errcheck + +unparam: + $(GO) get mvdan.cc/unparam + unparam ./... + +errcheck: + $(GO) get github.com/kisielk/errcheck + errcheck $(PKGS) + +gofmt: + @echo Checking code is gofmted + @test -z "$(shell gofmt -s -l -d -e $(SRCDIRS) | tee /dev/stderr)" diff --git a/vendor/github.com/pkg/errors/README.md b/vendor/github.com/pkg/errors/README.md new file mode 100644 index 0000000..54dfdcb --- /dev/null +++ b/vendor/github.com/pkg/errors/README.md @@ -0,0 +1,59 @@ +# errors [![Travis-CI](https://travis-ci.org/pkg/errors.svg)](https://travis-ci.org/pkg/errors) [![AppVeyor](https://ci.appveyor.com/api/projects/status/b98mptawhudj53ep/branch/master?svg=true)](https://ci.appveyor.com/project/davecheney/errors/branch/master) [![GoDoc](https://godoc.org/github.com/pkg/errors?status.svg)](http://godoc.org/github.com/pkg/errors) [![Report card](https://goreportcard.com/badge/github.com/pkg/errors)](https://goreportcard.com/report/github.com/pkg/errors) [![Sourcegraph](https://sourcegraph.com/github.com/pkg/errors/-/badge.svg)](https://sourcegraph.com/github.com/pkg/errors?badge) + +Package errors provides simple error handling primitives. + +`go get github.com/pkg/errors` + +The traditional error handling idiom in Go is roughly akin to +```go +if err != nil { + return err +} +``` +which applied recursively up the call stack results in error reports without context or debugging information. The errors package allows programmers to add context to the failure path in their code in a way that does not destroy the original value of the error. + +## Adding context to an error + +The errors.Wrap function returns a new error that adds context to the original error. For example +```go +_, err := ioutil.ReadAll(r) +if err != nil { + return errors.Wrap(err, "read failed") +} +``` +## Retrieving the cause of an error + +Using `errors.Wrap` constructs a stack of errors, adding context to the preceding error. Depending on the nature of the error it may be necessary to reverse the operation of errors.Wrap to retrieve the original error for inspection. Any error value which implements this interface can be inspected by `errors.Cause`. +```go +type causer interface { + Cause() error +} +``` +`errors.Cause` will recursively retrieve the topmost error which does not implement `causer`, which is assumed to be the original cause. For example: +```go +switch err := errors.Cause(err).(type) { +case *MyError: + // handle specifically +default: + // unknown error +} +``` + +[Read the package documentation for more information](https://godoc.org/github.com/pkg/errors). + +## Roadmap + +With the upcoming [Go2 error proposals](https://go.googlesource.com/proposal/+/master/design/go2draft.md) this package is moving into maintenance mode. The roadmap for a 1.0 release is as follows: + +- 0.9. Remove pre Go 1.9 and Go 1.10 support, address outstanding pull requests (if possible) +- 1.0. Final release. + +## Contributing + +Because of the Go2 errors changes, this package is not accepting proposals for new functionality. With that said, we welcome pull requests, bug fixes and issue reports. + +Before sending a PR, please discuss your change by raising an issue. + +## License + +BSD-2-Clause diff --git a/vendor/github.com/pkg/errors/appveyor.yml b/vendor/github.com/pkg/errors/appveyor.yml new file mode 100644 index 0000000..a932ead --- /dev/null +++ b/vendor/github.com/pkg/errors/appveyor.yml @@ -0,0 +1,32 @@ +version: build-{build}.{branch} + +clone_folder: C:\gopath\src\github.com\pkg\errors +shallow_clone: true # for startup speed + +environment: + GOPATH: C:\gopath + +platform: + - x64 + +# http://www.appveyor.com/docs/installed-software +install: + # some helpful output for debugging builds + - go version + - go env + # pre-installed MinGW at C:\MinGW is 32bit only + # but MSYS2 at C:\msys64 has mingw64 + - set PATH=C:\msys64\mingw64\bin;%PATH% + - gcc --version + - g++ --version + +build_script: + - go install -v ./... + +test_script: + - set PATH=C:\gopath\bin;%PATH% + - go test -v ./... + +#artifacts: +# - path: '%GOPATH%\bin\*.exe' +deploy: off diff --git a/vendor/github.com/pkg/errors/errors.go b/vendor/github.com/pkg/errors/errors.go new file mode 100644 index 0000000..161aea2 --- /dev/null +++ b/vendor/github.com/pkg/errors/errors.go @@ -0,0 +1,288 @@ +// Package errors provides simple error handling primitives. +// +// The traditional error handling idiom in Go is roughly akin to +// +// if err != nil { +// return err +// } +// +// which when applied recursively up the call stack results in error reports +// without context or debugging information. The errors package allows +// programmers to add context to the failure path in their code in a way +// that does not destroy the original value of the error. +// +// Adding context to an error +// +// The errors.Wrap function returns a new error that adds context to the +// original error by recording a stack trace at the point Wrap is called, +// together with the supplied message. For example +// +// _, err := ioutil.ReadAll(r) +// if err != nil { +// return errors.Wrap(err, "read failed") +// } +// +// If additional control is required, the errors.WithStack and +// errors.WithMessage functions destructure errors.Wrap into its component +// operations: annotating an error with a stack trace and with a message, +// respectively. +// +// Retrieving the cause of an error +// +// Using errors.Wrap constructs a stack of errors, adding context to the +// preceding error. Depending on the nature of the error it may be necessary +// to reverse the operation of errors.Wrap to retrieve the original error +// for inspection. Any error value which implements this interface +// +// type causer interface { +// Cause() error +// } +// +// can be inspected by errors.Cause. errors.Cause will recursively retrieve +// the topmost error that does not implement causer, which is assumed to be +// the original cause. For example: +// +// switch err := errors.Cause(err).(type) { +// case *MyError: +// // handle specifically +// default: +// // unknown error +// } +// +// Although the causer interface is not exported by this package, it is +// considered a part of its stable public interface. +// +// Formatted printing of errors +// +// All error values returned from this package implement fmt.Formatter and can +// be formatted by the fmt package. The following verbs are supported: +// +// %s print the error. If the error has a Cause it will be +// printed recursively. +// %v see %s +// %+v extended format. Each Frame of the error's StackTrace will +// be printed in detail. +// +// Retrieving the stack trace of an error or wrapper +// +// New, Errorf, Wrap, and Wrapf record a stack trace at the point they are +// invoked. This information can be retrieved with the following interface: +// +// type stackTracer interface { +// StackTrace() errors.StackTrace +// } +// +// The returned errors.StackTrace type is defined as +// +// type StackTrace []Frame +// +// The Frame type represents a call site in the stack trace. Frame supports +// the fmt.Formatter interface that can be used for printing information about +// the stack trace of this error. For example: +// +// if err, ok := err.(stackTracer); ok { +// for _, f := range err.StackTrace() { +// fmt.Printf("%+s:%d\n", f, f) +// } +// } +// +// Although the stackTracer interface is not exported by this package, it is +// considered a part of its stable public interface. +// +// See the documentation for Frame.Format for more details. +package errors + +import ( + "fmt" + "io" +) + +// New returns an error with the supplied message. +// New also records the stack trace at the point it was called. +func New(message string) error { + return &fundamental{ + msg: message, + stack: callers(), + } +} + +// Errorf formats according to a format specifier and returns the string +// as a value that satisfies error. +// Errorf also records the stack trace at the point it was called. +func Errorf(format string, args ...interface{}) error { + return &fundamental{ + msg: fmt.Sprintf(format, args...), + stack: callers(), + } +} + +// fundamental is an error that has a message and a stack, but no caller. +type fundamental struct { + msg string + *stack +} + +func (f *fundamental) Error() string { return f.msg } + +func (f *fundamental) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + if s.Flag('+') { + io.WriteString(s, f.msg) + f.stack.Format(s, verb) + return + } + fallthrough + case 's': + io.WriteString(s, f.msg) + case 'q': + fmt.Fprintf(s, "%q", f.msg) + } +} + +// WithStack annotates err with a stack trace at the point WithStack was called. +// If err is nil, WithStack returns nil. +func WithStack(err error) error { + if err == nil { + return nil + } + return &withStack{ + err, + callers(), + } +} + +type withStack struct { + error + *stack +} + +func (w *withStack) Cause() error { return w.error } + +// Unwrap provides compatibility for Go 1.13 error chains. +func (w *withStack) Unwrap() error { return w.error } + +func (w *withStack) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + if s.Flag('+') { + fmt.Fprintf(s, "%+v", w.Cause()) + w.stack.Format(s, verb) + return + } + fallthrough + case 's': + io.WriteString(s, w.Error()) + case 'q': + fmt.Fprintf(s, "%q", w.Error()) + } +} + +// Wrap returns an error annotating err with a stack trace +// at the point Wrap is called, and the supplied message. +// If err is nil, Wrap returns nil. +func Wrap(err error, message string) error { + if err == nil { + return nil + } + err = &withMessage{ + cause: err, + msg: message, + } + return &withStack{ + err, + callers(), + } +} + +// Wrapf returns an error annotating err with a stack trace +// at the point Wrapf is called, and the format specifier. +// If err is nil, Wrapf returns nil. +func Wrapf(err error, format string, args ...interface{}) error { + if err == nil { + return nil + } + err = &withMessage{ + cause: err, + msg: fmt.Sprintf(format, args...), + } + return &withStack{ + err, + callers(), + } +} + +// WithMessage annotates err with a new message. +// If err is nil, WithMessage returns nil. +func WithMessage(err error, message string) error { + if err == nil { + return nil + } + return &withMessage{ + cause: err, + msg: message, + } +} + +// WithMessagef annotates err with the format specifier. +// If err is nil, WithMessagef returns nil. +func WithMessagef(err error, format string, args ...interface{}) error { + if err == nil { + return nil + } + return &withMessage{ + cause: err, + msg: fmt.Sprintf(format, args...), + } +} + +type withMessage struct { + cause error + msg string +} + +func (w *withMessage) Error() string { return w.msg + ": " + w.cause.Error() } +func (w *withMessage) Cause() error { return w.cause } + +// Unwrap provides compatibility for Go 1.13 error chains. +func (w *withMessage) Unwrap() error { return w.cause } + +func (w *withMessage) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + if s.Flag('+') { + fmt.Fprintf(s, "%+v\n", w.Cause()) + io.WriteString(s, w.msg) + return + } + fallthrough + case 's', 'q': + io.WriteString(s, w.Error()) + } +} + +// Cause returns the underlying cause of the error, if possible. +// An error value has a cause if it implements the following +// interface: +// +// type causer interface { +// Cause() error +// } +// +// If the error does not implement Cause, the original error will +// be returned. If the error is nil, nil will be returned without further +// investigation. +func Cause(err error) error { + type causer interface { + Cause() error + } + + for err != nil { + cause, ok := err.(causer) + if !ok { + break + } + err = cause.Cause() + } + return err +} diff --git a/vendor/github.com/pkg/errors/go113.go b/vendor/github.com/pkg/errors/go113.go new file mode 100644 index 0000000..be0d10d --- /dev/null +++ b/vendor/github.com/pkg/errors/go113.go @@ -0,0 +1,38 @@ +// +build go1.13 + +package errors + +import ( + stderrors "errors" +) + +// Is reports whether any error in err's chain matches target. +// +// The chain consists of err itself followed by the sequence of errors obtained by +// repeatedly calling Unwrap. +// +// An error is considered to match a target if it is equal to that target or if +// it implements a method Is(error) bool such that Is(target) returns true. +func Is(err, target error) bool { return stderrors.Is(err, target) } + +// As finds the first error in err's chain that matches target, and if so, sets +// target to that error value and returns true. +// +// The chain consists of err itself followed by the sequence of errors obtained by +// repeatedly calling Unwrap. +// +// An error matches target if the error's concrete value is assignable to the value +// pointed to by target, or if the error has a method As(interface{}) bool such that +// As(target) returns true. In the latter case, the As method is responsible for +// setting target. +// +// As will panic if target is not a non-nil pointer to either a type that implements +// error, or to any interface type. As returns false if err is nil. +func As(err error, target interface{}) bool { return stderrors.As(err, target) } + +// Unwrap returns the result of calling the Unwrap method on err, if err's +// type contains an Unwrap method returning error. +// Otherwise, Unwrap returns nil. +func Unwrap(err error) error { + return stderrors.Unwrap(err) +} diff --git a/vendor/github.com/pkg/errors/stack.go b/vendor/github.com/pkg/errors/stack.go new file mode 100644 index 0000000..779a834 --- /dev/null +++ b/vendor/github.com/pkg/errors/stack.go @@ -0,0 +1,177 @@ +package errors + +import ( + "fmt" + "io" + "path" + "runtime" + "strconv" + "strings" +) + +// Frame represents a program counter inside a stack frame. +// For historical reasons if Frame is interpreted as a uintptr +// its value represents the program counter + 1. +type Frame uintptr + +// pc returns the program counter for this frame; +// multiple frames may have the same PC value. +func (f Frame) pc() uintptr { return uintptr(f) - 1 } + +// file returns the full path to the file that contains the +// function for this Frame's pc. +func (f Frame) file() string { + fn := runtime.FuncForPC(f.pc()) + if fn == nil { + return "unknown" + } + file, _ := fn.FileLine(f.pc()) + return file +} + +// line returns the line number of source code of the +// function for this Frame's pc. +func (f Frame) line() int { + fn := runtime.FuncForPC(f.pc()) + if fn == nil { + return 0 + } + _, line := fn.FileLine(f.pc()) + return line +} + +// name returns the name of this function, if known. +func (f Frame) name() string { + fn := runtime.FuncForPC(f.pc()) + if fn == nil { + return "unknown" + } + return fn.Name() +} + +// Format formats the frame according to the fmt.Formatter interface. +// +// %s source file +// %d source line +// %n function name +// %v equivalent to %s:%d +// +// Format accepts flags that alter the printing of some verbs, as follows: +// +// %+s function name and path of source file relative to the compile time +// GOPATH separated by \n\t (\n\t) +// %+v equivalent to %+s:%d +func (f Frame) Format(s fmt.State, verb rune) { + switch verb { + case 's': + switch { + case s.Flag('+'): + io.WriteString(s, f.name()) + io.WriteString(s, "\n\t") + io.WriteString(s, f.file()) + default: + io.WriteString(s, path.Base(f.file())) + } + case 'd': + io.WriteString(s, strconv.Itoa(f.line())) + case 'n': + io.WriteString(s, funcname(f.name())) + case 'v': + f.Format(s, 's') + io.WriteString(s, ":") + f.Format(s, 'd') + } +} + +// MarshalText formats a stacktrace Frame as a text string. The output is the +// same as that of fmt.Sprintf("%+v", f), but without newlines or tabs. +func (f Frame) MarshalText() ([]byte, error) { + name := f.name() + if name == "unknown" { + return []byte(name), nil + } + return []byte(fmt.Sprintf("%s %s:%d", name, f.file(), f.line())), nil +} + +// StackTrace is stack of Frames from innermost (newest) to outermost (oldest). +type StackTrace []Frame + +// Format formats the stack of Frames according to the fmt.Formatter interface. +// +// %s lists source files for each Frame in the stack +// %v lists the source file and line number for each Frame in the stack +// +// Format accepts flags that alter the printing of some verbs, as follows: +// +// %+v Prints filename, function, and line number for each Frame in the stack. +func (st StackTrace) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + switch { + case s.Flag('+'): + for _, f := range st { + io.WriteString(s, "\n") + f.Format(s, verb) + } + case s.Flag('#'): + fmt.Fprintf(s, "%#v", []Frame(st)) + default: + st.formatSlice(s, verb) + } + case 's': + st.formatSlice(s, verb) + } +} + +// formatSlice will format this StackTrace into the given buffer as a slice of +// Frame, only valid when called with '%s' or '%v'. +func (st StackTrace) formatSlice(s fmt.State, verb rune) { + io.WriteString(s, "[") + for i, f := range st { + if i > 0 { + io.WriteString(s, " ") + } + f.Format(s, verb) + } + io.WriteString(s, "]") +} + +// stack represents a stack of program counters. +type stack []uintptr + +func (s *stack) Format(st fmt.State, verb rune) { + switch verb { + case 'v': + switch { + case st.Flag('+'): + for _, pc := range *s { + f := Frame(pc) + fmt.Fprintf(st, "\n%+v", f) + } + } + } +} + +func (s *stack) StackTrace() StackTrace { + f := make([]Frame, len(*s)) + for i := 0; i < len(f); i++ { + f[i] = Frame((*s)[i]) + } + return f +} + +func callers() *stack { + const depth = 32 + var pcs [depth]uintptr + n := runtime.Callers(3, pcs[:]) + var st stack = pcs[0:n] + return &st +} + +// funcname removes the path prefix component of a function's name reported by func.Name(). +func funcname(name string) string { + i := strings.LastIndex(name, "/") + name = name[i+1:] + i = strings.Index(name, ".") + return name[i+1:] +} diff --git a/vendor/github.com/templexxx/cpufeat/.gitignore b/vendor/github.com/templexxx/cpufeat/.gitignore new file mode 100644 index 0000000..08baa1a --- /dev/null +++ b/vendor/github.com/templexxx/cpufeat/.gitignore @@ -0,0 +1,15 @@ +# Binaries for programs and plugins +*.exe +*.dll +*.so +*.dylib + +# Test binary, build with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736 +.glide/ +.idea diff --git a/vendor/github.com/templexxx/cpufeat/LICENSE b/vendor/github.com/templexxx/cpufeat/LICENSE new file mode 100644 index 0000000..ea5ea89 --- /dev/null +++ b/vendor/github.com/templexxx/cpufeat/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +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 Inc. 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. \ No newline at end of file diff --git a/vendor/github.com/templexxx/cpufeat/README.md b/vendor/github.com/templexxx/cpufeat/README.md new file mode 100644 index 0000000..16afe53 --- /dev/null +++ b/vendor/github.com/templexxx/cpufeat/README.md @@ -0,0 +1 @@ +see: https://github.com/templexxx/cpu diff --git a/vendor/github.com/templexxx/cpufeat/cpu.go b/vendor/github.com/templexxx/cpufeat/cpu.go new file mode 100644 index 0000000..dd5a949 --- /dev/null +++ b/vendor/github.com/templexxx/cpufeat/cpu.go @@ -0,0 +1,33 @@ +// 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 cpu implements processor feature detection +// used by the Go standard libary. +package cpufeat + +var X86 x86 + +// The booleans in x86 contain the correspondingly named cpuid feature bit. +// HasAVX and HasAVX2 are only set if the OS does support XMM and YMM registers +// in addition to the cpuid feature bit being set. +// The struct is padded to avoid false sharing. +type x86 struct { + _ [CacheLineSize]byte + HasAES bool + HasAVX bool + HasAVX2 bool + HasAVX512 bool + HasBMI1 bool + HasBMI2 bool + HasERMS bool + HasOSXSAVE bool + HasPCLMULQDQ bool + HasPOPCNT bool + HasSSE2 bool + HasSSE3 bool + HasSSSE3 bool + HasSSE41 bool + HasSSE42 bool + _ [CacheLineSize]byte +} diff --git a/vendor/github.com/templexxx/cpufeat/cpu_arm.go b/vendor/github.com/templexxx/cpufeat/cpu_arm.go new file mode 100644 index 0000000..b3eb5a9 --- /dev/null +++ b/vendor/github.com/templexxx/cpufeat/cpu_arm.go @@ -0,0 +1,7 @@ +// 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 cpufeat + +const CacheLineSize = 32 diff --git a/vendor/github.com/templexxx/cpufeat/cpu_arm64.go b/vendor/github.com/templexxx/cpufeat/cpu_arm64.go new file mode 100644 index 0000000..b3eb5a9 --- /dev/null +++ b/vendor/github.com/templexxx/cpufeat/cpu_arm64.go @@ -0,0 +1,7 @@ +// 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 cpufeat + +const CacheLineSize = 32 diff --git a/vendor/github.com/templexxx/cpufeat/cpu_mips.go b/vendor/github.com/templexxx/cpufeat/cpu_mips.go new file mode 100644 index 0000000..b3eb5a9 --- /dev/null +++ b/vendor/github.com/templexxx/cpufeat/cpu_mips.go @@ -0,0 +1,7 @@ +// 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 cpufeat + +const CacheLineSize = 32 diff --git a/vendor/github.com/templexxx/cpufeat/cpu_mips64.go b/vendor/github.com/templexxx/cpufeat/cpu_mips64.go new file mode 100644 index 0000000..b3eb5a9 --- /dev/null +++ b/vendor/github.com/templexxx/cpufeat/cpu_mips64.go @@ -0,0 +1,7 @@ +// 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 cpufeat + +const CacheLineSize = 32 diff --git a/vendor/github.com/templexxx/cpufeat/cpu_mips64le.go b/vendor/github.com/templexxx/cpufeat/cpu_mips64le.go new file mode 100644 index 0000000..b3eb5a9 --- /dev/null +++ b/vendor/github.com/templexxx/cpufeat/cpu_mips64le.go @@ -0,0 +1,7 @@ +// 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 cpufeat + +const CacheLineSize = 32 diff --git a/vendor/github.com/templexxx/cpufeat/cpu_mipsle.go b/vendor/github.com/templexxx/cpufeat/cpu_mipsle.go new file mode 100644 index 0000000..b3eb5a9 --- /dev/null +++ b/vendor/github.com/templexxx/cpufeat/cpu_mipsle.go @@ -0,0 +1,7 @@ +// 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 cpufeat + +const CacheLineSize = 32 diff --git a/vendor/github.com/templexxx/cpufeat/cpu_ppc64.go b/vendor/github.com/templexxx/cpufeat/cpu_ppc64.go new file mode 100644 index 0000000..1e738e3 --- /dev/null +++ b/vendor/github.com/templexxx/cpufeat/cpu_ppc64.go @@ -0,0 +1,7 @@ +// 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 cpufeat + +const CacheLineSize = 128 diff --git a/vendor/github.com/templexxx/cpufeat/cpu_ppc64le.go b/vendor/github.com/templexxx/cpufeat/cpu_ppc64le.go new file mode 100644 index 0000000..1e738e3 --- /dev/null +++ b/vendor/github.com/templexxx/cpufeat/cpu_ppc64le.go @@ -0,0 +1,7 @@ +// 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 cpufeat + +const CacheLineSize = 128 diff --git a/vendor/github.com/templexxx/cpufeat/cpu_s390x.go b/vendor/github.com/templexxx/cpufeat/cpu_s390x.go new file mode 100644 index 0000000..17be8fe --- /dev/null +++ b/vendor/github.com/templexxx/cpufeat/cpu_s390x.go @@ -0,0 +1,7 @@ +// 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 cpufeat + +const CacheLineSize = 256 diff --git a/vendor/github.com/templexxx/cpufeat/cpu_x86.go b/vendor/github.com/templexxx/cpufeat/cpu_x86.go new file mode 100644 index 0000000..19d6d22 --- /dev/null +++ b/vendor/github.com/templexxx/cpufeat/cpu_x86.go @@ -0,0 +1,70 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build 386 amd64 amd64p32 + +package cpufeat + +const CacheLineSize = 64 + +// cpuid is implemented in cpu_x86.s. +func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) + +// xgetbv with ecx = 0 is implemented in cpu_x86.s. +func xgetbv() (eax, edx uint32) + +func init() { + maxId, _, _, _ := cpuid(0, 0) + + if maxId < 1 { + return + } + + _, _, ecx1, edx1 := cpuid(1, 0) + X86.HasSSE2 = isSet(26, edx1) + + X86.HasSSE3 = isSet(0, ecx1) + X86.HasPCLMULQDQ = isSet(1, ecx1) + X86.HasSSSE3 = isSet(9, ecx1) + X86.HasSSE41 = isSet(19, ecx1) + X86.HasSSE42 = isSet(20, ecx1) + X86.HasPOPCNT = isSet(23, ecx1) + X86.HasAES = isSet(25, ecx1) + X86.HasOSXSAVE = isSet(27, ecx1) + + osSupportsAVX := false + osSupportAVX512 := false + // For XGETBV, OSXSAVE bit is required and sufficient. + if X86.HasOSXSAVE { + eax, _ := xgetbv() + // Check if XMM and YMM registers have OS support. + osSupportsAVX = isSet(1, eax) && isSet(2, eax) + // Check is ZMM registers have OS support. + osSupportAVX512 = (eax>>5)&7 == 7 && (eax>>1)&3 == 3 + } + + X86.HasAVX = isSet(28, ecx1) && osSupportsAVX + + if maxId < 7 { + return + } + + _, ebx7, _, _ := cpuid(7, 0) + X86.HasBMI1 = isSet(3, ebx7) + X86.HasAVX2 = isSet(5, ebx7) && osSupportsAVX + X86.HasBMI2 = isSet(8, ebx7) + X86.HasERMS = isSet(9, ebx7) + X86.HasAVX512 = hasAVX512(ebx7) && osSupportAVX512 +} + +func isSet(bitpos uint, value uint32) bool { + return value&(1< 0 { + wordBytes := w * wordSize + fastXORWords(dst[:wordBytes], a[:wordBytes], b[:wordBytes]) + } + for i := n - n%wordSize; i < n; i++ { + dst[i] = a[i] ^ b[i] + } +} + +func safeXORBytes(dst, a, b []byte, n int) { + ex := n % 8 + for i := 0; i < ex; i++ { + dst[i] = a[i] ^ b[i] + } + + for i := ex; i < n; i += 8 { + _dst := dst[i : i+8] + _a := a[i : i+8] + _b := b[i : i+8] + _dst[0] = _a[0] ^ _b[0] + _dst[1] = _a[1] ^ _b[1] + _dst[2] = _a[2] ^ _b[2] + _dst[3] = _a[3] ^ _b[3] + + _dst[4] = _a[4] ^ _b[4] + _dst[5] = _a[5] ^ _b[5] + _dst[6] = _a[6] ^ _b[6] + _dst[7] = _a[7] ^ _b[7] + } +} + +// fastXORWords XORs multiples of 4 or 8 bytes (depending on architecture.) +// The arguments are assumed to be of equal length. +func fastXORWords(dst, a, b []byte) { + dw := *(*[]uintptr)(unsafe.Pointer(&dst)) + aw := *(*[]uintptr)(unsafe.Pointer(&a)) + bw := *(*[]uintptr)(unsafe.Pointer(&b)) + n := len(b) / wordSize + ex := n % 8 + for i := 0; i < ex; i++ { + dw[i] = aw[i] ^ bw[i] + } + + for i := ex; i < n; i += 8 { + _dw := dw[i : i+8] + _aw := aw[i : i+8] + _bw := bw[i : i+8] + _dw[0] = _aw[0] ^ _bw[0] + _dw[1] = _aw[1] ^ _bw[1] + _dw[2] = _aw[2] ^ _bw[2] + _dw[3] = _aw[3] ^ _bw[3] + _dw[4] = _aw[4] ^ _bw[4] + _dw[5] = _aw[5] ^ _bw[5] + _dw[6] = _aw[6] ^ _bw[6] + _dw[7] = _aw[7] ^ _bw[7] + } +} diff --git a/vendor/github.com/templexxx/xor/sse2_amd64.s b/vendor/github.com/templexxx/xor/sse2_amd64.s new file mode 100644 index 0000000..d7f702b --- /dev/null +++ b/vendor/github.com/templexxx/xor/sse2_amd64.s @@ -0,0 +1,574 @@ +#include "textflag.h" + +// addr of mem +#define DST BX +#define SRC SI +#define SRC0 TMP4 +#define SRC1 TMP5 + +// loop args +// num of vect +#define VECT CX +#define LEN DX +// pos of matrix +#define POS R8 + +// tmp store +// num of vect or ... +#define TMP1 R9 +// pos of matrix or ... +#define TMP2 R10 +// store addr of data/parity or ... +#define TMP3 R11 +#define TMP4 R12 +#define TMP5 R13 +#define TMP6 R14 + +// func bytesSrc0(dst, src0, src1 []byte) +TEXT ·xorSrc0(SB), NOSPLIT, $0 + MOVQ len+32(FP), LEN + CMPQ LEN, $0 + JE ret + MOVQ dst+0(FP), DST + MOVQ src0+24(FP), SRC0 + MOVQ src1+48(FP), SRC1 + TESTQ $15, LEN + JNZ not_aligned + +aligned: + MOVQ $0, POS + +loop16b: + MOVOU (SRC0)(POS*1), X0 + XORPD (SRC1)(POS*1), X0 + MOVOU X0, (DST)(POS*1) + ADDQ $16, POS + CMPQ LEN, POS + JNE loop16b + RET + +loop_1b: + MOVB -1(SRC0)(LEN*1), TMP1 + MOVB -1(SRC1)(LEN*1), TMP2 + XORB TMP1, TMP2 + MOVB TMP2, -1(DST)(LEN*1) + SUBQ $1, LEN + TESTQ $7, LEN + JNZ loop_1b + CMPQ LEN, $0 + JE ret + TESTQ $15, LEN + JZ aligned + +not_aligned: + TESTQ $7, LEN + JNE loop_1b + MOVQ LEN, TMP1 + ANDQ $15, TMP1 + +loop_8b: + MOVQ -8(SRC0)(LEN*1), TMP2 + MOVQ -8(SRC1)(LEN*1), TMP3 + XORQ TMP2, TMP3 + MOVQ TMP3, -8(DST)(LEN*1) + SUBQ $8, LEN + SUBQ $8, TMP1 + JG loop_8b + + CMPQ LEN, $16 + JGE aligned + RET + +ret: + RET + +// func bytesSrc1(dst, src0, src1 []byte) +TEXT ·xorSrc1(SB), NOSPLIT, $0 + MOVQ len+56(FP), LEN + CMPQ LEN, $0 + JE ret + MOVQ dst+0(FP), DST + MOVQ src0+24(FP), SRC0 + MOVQ src1+48(FP), SRC1 + TESTQ $15, LEN + JNZ not_aligned + +aligned: + MOVQ $0, POS + +loop16b: + MOVOU (SRC0)(POS*1), X0 + XORPD (SRC1)(POS*1), X0 + MOVOU X0, (DST)(POS*1) + ADDQ $16, POS + CMPQ LEN, POS + JNE loop16b + RET + +loop_1b: + MOVB -1(SRC0)(LEN*1), TMP1 + MOVB -1(SRC1)(LEN*1), TMP2 + XORB TMP1, TMP2 + MOVB TMP2, -1(DST)(LEN*1) + SUBQ $1, LEN + TESTQ $7, LEN + JNZ loop_1b + CMPQ LEN, $0 + JE ret + TESTQ $15, LEN + JZ aligned + +not_aligned: + TESTQ $7, LEN + JNE loop_1b + MOVQ LEN, TMP1 + ANDQ $15, TMP1 + +loop_8b: + MOVQ -8(SRC0)(LEN*1), TMP2 + MOVQ -8(SRC1)(LEN*1), TMP3 + XORQ TMP2, TMP3 + MOVQ TMP3, -8(DST)(LEN*1) + SUBQ $8, LEN + SUBQ $8, TMP1 + JG loop_8b + + CMPQ LEN, $16 + JGE aligned + RET + +ret: + RET + +// func bytesSSE2mini(dst, src0, src1 []byte, size int) +TEXT ·bytesSSE2mini(SB), NOSPLIT, $0 + MOVQ len+72(FP), LEN + CMPQ LEN, $0 + JE ret + MOVQ dst+0(FP), DST + MOVQ src0+24(FP), SRC0 + MOVQ src1+48(FP), SRC1 + TESTQ $15, LEN + JNZ not_aligned + +aligned: + MOVQ $0, POS + +loop16b: + MOVOU (SRC0)(POS*1), X0 + XORPD (SRC1)(POS*1), X0 + + // MOVOU (SRC1)(POS*1), X4 + // PXOR X4, X0 + MOVOU X0, (DST)(POS*1) + ADDQ $16, POS + CMPQ LEN, POS + JNE loop16b + RET + +loop_1b: + MOVB -1(SRC0)(LEN*1), TMP1 + MOVB -1(SRC1)(LEN*1), TMP2 + XORB TMP1, TMP2 + MOVB TMP2, -1(DST)(LEN*1) + SUBQ $1, LEN + TESTQ $7, LEN + JNZ loop_1b + CMPQ LEN, $0 + JE ret + TESTQ $15, LEN + JZ aligned + +not_aligned: + TESTQ $7, LEN + JNE loop_1b + MOVQ LEN, TMP1 + ANDQ $15, TMP1 + +loop_8b: + MOVQ -8(SRC0)(LEN*1), TMP2 + MOVQ -8(SRC1)(LEN*1), TMP3 + XORQ TMP2, TMP3 + MOVQ TMP3, -8(DST)(LEN*1) + SUBQ $8, LEN + SUBQ $8, TMP1 + JG loop_8b + + CMPQ LEN, $16 + JGE aligned + RET + +ret: + RET + +// func bytesSSE2small(dst, src0, src1 []byte, size int) +TEXT ·bytesSSE2small(SB), NOSPLIT, $0 + MOVQ len+72(FP), LEN + CMPQ LEN, $0 + JE ret + MOVQ dst+0(FP), DST + MOVQ src0+24(FP), SRC0 + MOVQ src1+48(FP), SRC1 + TESTQ $63, LEN + JNZ not_aligned + +aligned: + MOVQ $0, POS + +loop64b: + MOVOU (SRC0)(POS*1), X0 + MOVOU 16(SRC0)(POS*1), X1 + MOVOU 32(SRC0)(POS*1), X2 + MOVOU 48(SRC0)(POS*1), X3 + + MOVOU (SRC1)(POS*1), X4 + MOVOU 16(SRC1)(POS*1), X5 + MOVOU 32(SRC1)(POS*1), X6 + MOVOU 48(SRC1)(POS*1), X7 + + PXOR X4, X0 + PXOR X5, X1 + PXOR X6, X2 + PXOR X7, X3 + + MOVOU X0, (DST)(POS*1) + MOVOU X1, 16(DST)(POS*1) + MOVOU X2, 32(DST)(POS*1) + MOVOU X3, 48(DST)(POS*1) + + ADDQ $64, POS + CMPQ LEN, POS + JNE loop64b + RET + +loop_1b: + MOVB -1(SRC0)(LEN*1), TMP1 + MOVB -1(SRC1)(LEN*1), TMP2 + XORB TMP1, TMP2 + MOVB TMP2, -1(DST)(LEN*1) + SUBQ $1, LEN + TESTQ $7, LEN + JNZ loop_1b + CMPQ LEN, $0 + JE ret + TESTQ $63, LEN + JZ aligned + +not_aligned: + TESTQ $7, LEN + JNE loop_1b + MOVQ LEN, TMP1 + ANDQ $63, TMP1 + +loop_8b: + MOVQ -8(SRC0)(LEN*1), TMP2 + MOVQ -8(SRC1)(LEN*1), TMP3 + XORQ TMP2, TMP3 + MOVQ TMP3, -8(DST)(LEN*1) + SUBQ $8, LEN + SUBQ $8, TMP1 + JG loop_8b + + CMPQ LEN, $64 + JGE aligned + RET + +ret: + RET + +// func bytesSSE2big(dst, src0, src1 []byte, size int) +TEXT ·bytesSSE2big(SB), NOSPLIT, $0 + MOVQ len+72(FP), LEN + CMPQ LEN, $0 + JE ret + MOVQ dst+0(FP), DST + MOVQ src0+24(FP), SRC0 + MOVQ src1+48(FP), SRC1 + TESTQ $63, LEN + JNZ not_aligned + +aligned: + MOVQ $0, POS + +loop64b: + MOVOU (SRC0)(POS*1), X0 + MOVOU 16(SRC0)(POS*1), X1 + MOVOU 32(SRC0)(POS*1), X2 + MOVOU 48(SRC0)(POS*1), X3 + + MOVOU (SRC1)(POS*1), X4 + MOVOU 16(SRC1)(POS*1), X5 + MOVOU 32(SRC1)(POS*1), X6 + MOVOU 48(SRC1)(POS*1), X7 + + PXOR X4, X0 + PXOR X5, X1 + PXOR X6, X2 + PXOR X7, X3 + + LONG $0xe70f4266; WORD $0x0304 // MOVNTDQ + LONG $0xe70f4266; WORD $0x034c; BYTE $0x10 + LONG $0xe70f4266; WORD $0x0354; BYTE $0x20 + LONG $0xe70f4266; WORD $0x035c; BYTE $0x30 + + ADDQ $64, POS + CMPQ LEN, POS + JNE loop64b + RET + +loop_1b: + MOVB -1(SRC0)(LEN*1), TMP1 + MOVB -1(SRC1)(LEN*1), TMP2 + XORB TMP1, TMP2 + MOVB TMP2, -1(DST)(LEN*1) + SUBQ $1, LEN + TESTQ $7, LEN + JNZ loop_1b + CMPQ LEN, $0 + JE ret + TESTQ $63, LEN + JZ aligned + +not_aligned: + TESTQ $7, LEN + JNE loop_1b + MOVQ LEN, TMP1 + ANDQ $63, TMP1 + +loop_8b: + MOVQ -8(SRC0)(LEN*1), TMP2 + MOVQ -8(SRC1)(LEN*1), TMP3 + XORQ TMP2, TMP3 + MOVQ TMP3, -8(DST)(LEN*1) + SUBQ $8, LEN + SUBQ $8, TMP1 + JG loop_8b + + CMPQ LEN, $64 + JGE aligned + RET + +ret: + RET + +// func matrixSSE2small(dst []byte, src [][]byte) +TEXT ·matrixSSE2small(SB), NOSPLIT, $0 + MOVQ dst+0(FP), DST + MOVQ src+24(FP), SRC + MOVQ vec+32(FP), VECT + MOVQ len+8(FP), LEN + TESTQ $63, LEN + JNZ not_aligned + +aligned: + MOVQ $0, POS + +loop64b: + MOVQ VECT, TMP1 + SUBQ $2, TMP1 + MOVQ $0, TMP2 + MOVQ (SRC)(TMP2*1), TMP3 + MOVQ TMP3, TMP4 + MOVOU (TMP3)(POS*1), X0 + MOVOU 16(TMP4)(POS*1), X1 + MOVOU 32(TMP3)(POS*1), X2 + MOVOU 48(TMP4)(POS*1), X3 + +next_vect: + ADDQ $24, TMP2 + MOVQ (SRC)(TMP2*1), TMP3 + MOVQ TMP3, TMP4 + MOVOU (TMP3)(POS*1), X4 + MOVOU 16(TMP4)(POS*1), X5 + MOVOU 32(TMP3)(POS*1), X6 + MOVOU 48(TMP4)(POS*1), X7 + PXOR X4, X0 + PXOR X5, X1 + PXOR X6, X2 + PXOR X7, X3 + SUBQ $1, TMP1 + JGE next_vect + + MOVOU X0, (DST)(POS*1) + MOVOU X1, 16(DST)(POS*1) + MOVOU X2, 32(DST)(POS*1) + MOVOU X3, 48(DST)(POS*1) + + ADDQ $64, POS + CMPQ LEN, POS + JNE loop64b + RET + +loop_1b: + MOVQ VECT, TMP1 + MOVQ $0, TMP2 + MOVQ (SRC)(TMP2*1), TMP3 + SUBQ $2, TMP1 + MOVB -1(TMP3)(LEN*1), TMP5 + +next_vect_1b: + ADDQ $24, TMP2 + MOVQ (SRC)(TMP2*1), TMP3 + MOVB -1(TMP3)(LEN*1), TMP6 + XORB TMP6, TMP5 + SUBQ $1, TMP1 + JGE next_vect_1b + + MOVB TMP5, -1(DST)(LEN*1) + SUBQ $1, LEN + TESTQ $7, LEN + JNZ loop_1b + + CMPQ LEN, $0 + JE ret + TESTQ $63, LEN + JZ aligned + +not_aligned: + TESTQ $7, LEN + JNE loop_1b + MOVQ LEN, TMP4 + ANDQ $63, TMP4 + +loop_8b: + MOVQ VECT, TMP1 + MOVQ $0, TMP2 + MOVQ (SRC)(TMP2*1), TMP3 + SUBQ $2, TMP1 + MOVQ -8(TMP3)(LEN*1), TMP5 + +next_vect_8b: + ADDQ $24, TMP2 + MOVQ (SRC)(TMP2*1), TMP3 + MOVQ -8(TMP3)(LEN*1), TMP6 + XORQ TMP6, TMP5 + SUBQ $1, TMP1 + JGE next_vect_8b + + MOVQ TMP5, -8(DST)(LEN*1) + SUBQ $8, LEN + SUBQ $8, TMP4 + JG loop_8b + + CMPQ LEN, $64 + JGE aligned + RET + +ret: + RET + +// func matrixSSE2big(dst []byte, src [][]byte) +TEXT ·matrixSSE2big(SB), NOSPLIT, $0 + MOVQ dst+0(FP), DST + MOVQ src+24(FP), SRC + MOVQ vec+32(FP), VECT + MOVQ len+8(FP), LEN + TESTQ $63, LEN + JNZ not_aligned + +aligned: + MOVQ $0, POS + +loop64b: + MOVQ VECT, TMP1 + SUBQ $2, TMP1 + MOVQ $0, TMP2 + MOVQ (SRC)(TMP2*1), TMP3 + MOVQ TMP3, TMP4 + MOVOU (TMP3)(POS*1), X0 + MOVOU 16(TMP4)(POS*1), X1 + MOVOU 32(TMP3)(POS*1), X2 + MOVOU 48(TMP4)(POS*1), X3 + +next_vect: + ADDQ $24, TMP2 + MOVQ (SRC)(TMP2*1), TMP3 + MOVQ TMP3, TMP4 + MOVOU (TMP3)(POS*1), X4 + MOVOU 16(TMP4)(POS*1), X5 + MOVOU 32(TMP3)(POS*1), X6 + MOVOU 48(TMP4)(POS*1), X7 + PXOR X4, X0 + PXOR X5, X1 + PXOR X6, X2 + PXOR X7, X3 + SUBQ $1, TMP1 + JGE next_vect + + LONG $0xe70f4266; WORD $0x0304 + LONG $0xe70f4266; WORD $0x034c; BYTE $0x10 + LONG $0xe70f4266; WORD $0x0354; BYTE $0x20 + LONG $0xe70f4266; WORD $0x035c; BYTE $0x30 + + ADDQ $64, POS + CMPQ LEN, POS + JNE loop64b + RET + +loop_1b: + MOVQ VECT, TMP1 + MOVQ $0, TMP2 + MOVQ (SRC)(TMP2*1), TMP3 + SUBQ $2, TMP1 + MOVB -1(TMP3)(LEN*1), TMP5 + +next_vect_1b: + ADDQ $24, TMP2 + MOVQ (SRC)(TMP2*1), TMP3 + MOVB -1(TMP3)(LEN*1), TMP6 + XORB TMP6, TMP5 + SUBQ $1, TMP1 + JGE next_vect_1b + + MOVB TMP5, -1(DST)(LEN*1) + SUBQ $1, LEN + TESTQ $7, LEN + JNZ loop_1b + + CMPQ LEN, $0 + JE ret + TESTQ $63, LEN + JZ aligned + +not_aligned: + TESTQ $7, LEN + JNE loop_1b + MOVQ LEN, TMP4 + ANDQ $63, TMP4 + +loop_8b: + MOVQ VECT, TMP1 + MOVQ $0, TMP2 + MOVQ (SRC)(TMP2*1), TMP3 + SUBQ $2, TMP1 + MOVQ -8(TMP3)(LEN*1), TMP5 + +next_vect_8b: + ADDQ $24, TMP2 + MOVQ (SRC)(TMP2*1), TMP3 + MOVQ -8(TMP3)(LEN*1), TMP6 + XORQ TMP6, TMP5 + SUBQ $1, TMP1 + JGE next_vect_8b + + MOVQ TMP5, -8(DST)(LEN*1) + SUBQ $8, LEN + SUBQ $8, TMP4 + JG loop_8b + + CMPQ LEN, $64 + JGE aligned + RET + +ret: + RET + +TEXT ·hasSSE2(SB), NOSPLIT, $0 + XORQ AX, AX + INCL AX + CPUID + SHRQ $26, DX + ANDQ $1, DX + MOVB DX, ret+0(FP) + RET + diff --git a/vendor/github.com/templexxx/xor/xor.go b/vendor/github.com/templexxx/xor/xor.go new file mode 100644 index 0000000..2fa5616 --- /dev/null +++ b/vendor/github.com/templexxx/xor/xor.go @@ -0,0 +1,49 @@ +package xor + +// SIMD Extensions +const ( + none = iota + avx2 + // first introduced by Intel with the initial version of the Pentium 4 in 2001 + // so I think we can assume all amd64 has sse2 + sse2 +) + +var extension = none + +// Bytes : chose the shortest one as xor size +// it's better to use it for big data ( > 64bytes ) +func Bytes(dst, src0, src1 []byte) { + size := len(dst) + if size > len(src0) { + size = len(src0) + } + if size > len(src1) { + size = len(src1) + } + xorBytes(dst, src0, src1, size) +} + +// BytesSameLen : all slice's length must be equal +// cut size branch, save time for small data +func BytesSameLen(dst, src0, src1 []byte) { + xorSrc1(dst, src0, src1) +} + +// BytesSrc0 : src1 >= src0, dst >= src0 +// xor src0's len bytes +func BytesSrc0(dst, src0, src1 []byte) { + xorSrc0(dst, src0, src1) +} + +// BytesSrc1 : src0 >= src1, dst >= src1 +// xor src1's len bytes +func BytesSrc1(dst, src0, src1 []byte) { + xorSrc1(dst, src0, src1) +} + +// Matrix : all slice's length must be equal && != 0 +// len(src) must >= 2 +func Matrix(dst []byte, src [][]byte) { + xorMatrix(dst, src) +} diff --git a/vendor/github.com/templexxx/xor/xor_amd64.go b/vendor/github.com/templexxx/xor/xor_amd64.go new file mode 100644 index 0000000..b449bc0 --- /dev/null +++ b/vendor/github.com/templexxx/xor/xor_amd64.go @@ -0,0 +1,120 @@ +package xor + +import "github.com/templexxx/cpufeat" + +func init() { + getEXT() +} + +func getEXT() { + if cpufeat.X86.HasAVX2 { + extension = avx2 + } else { + extension = sse2 + } + return +} + +func xorBytes(dst, src0, src1 []byte, size int) { + switch extension { + case avx2: + bytesAVX2(dst, src0, src1, size) + default: + bytesSSE2(dst, src0, src1, size) + } +} + +// non-temporal hint store +const nontmp = 8 * 1024 +const avx2loopsize = 128 + +func bytesAVX2(dst, src0, src1 []byte, size int) { + if size < avx2loopsize { + bytesAVX2mini(dst, src0, src1, size) + } else if size >= avx2loopsize && size <= nontmp { + bytesAVX2small(dst, src0, src1, size) + } else { + bytesAVX2big(dst, src0, src1, size) + } +} + +const sse2loopsize = 64 + +func bytesSSE2(dst, src0, src1 []byte, size int) { + if size < sse2loopsize { + bytesSSE2mini(dst, src0, src1, size) + } else if size >= sse2loopsize && size <= nontmp { + bytesSSE2small(dst, src0, src1, size) + } else { + bytesSSE2big(dst, src0, src1, size) + } +} + +func xorMatrix(dst []byte, src [][]byte) { + switch extension { + case avx2: + matrixAVX2(dst, src) + default: + matrixSSE2(dst, src) + } +} + +func matrixAVX2(dst []byte, src [][]byte) { + size := len(dst) + if size > nontmp { + matrixAVX2big(dst, src) + } else { + matrixAVX2small(dst, src) + } +} + +func matrixSSE2(dst []byte, src [][]byte) { + size := len(dst) + if size > nontmp { + matrixSSE2big(dst, src) + } else { + matrixSSE2small(dst, src) + } +} + +//go:noescape +func xorSrc0(dst, src0, src1 []byte) + +//go:noescape +func xorSrc1(dst, src0, src1 []byte) + +//go:noescape +func bytesAVX2mini(dst, src0, src1 []byte, size int) + +//go:noescape +func bytesAVX2big(dst, src0, src1 []byte, size int) + +//go:noescape +func bytesAVX2small(dst, src0, src1 []byte, size int) + +//go:noescape +func bytesSSE2mini(dst, src0, src1 []byte, size int) + +//go:noescape +func bytesSSE2small(dst, src0, src1 []byte, size int) + +//go:noescape +func bytesSSE2big(dst, src0, src1 []byte, size int) + +//go:noescape +func matrixAVX2small(dst []byte, src [][]byte) + +//go:noescape +func matrixAVX2big(dst []byte, src [][]byte) + +//go:noescape +func matrixSSE2small(dst []byte, src [][]byte) + +//go:noescape +func matrixSSE2big(dst []byte, src [][]byte) + +//go:noescape +func hasAVX2() bool + +//go:noescape +func hasSSE2() bool diff --git a/vendor/github.com/templexxx/xor/xor_other.go b/vendor/github.com/templexxx/xor/xor_other.go new file mode 100644 index 0000000..4aa2967 --- /dev/null +++ b/vendor/github.com/templexxx/xor/xor_other.go @@ -0,0 +1,19 @@ +// +build !amd64 noasm + +package xor + +func xorBytes(dst, src0, src1 []byte, size int) { + bytesNoSIMD(dst, src0, src1, size) +} + +func xorMatrix(dst []byte, src [][]byte) { + matrixNoSIMD(dst, src) +} + +func xorSrc0(dst, src0, src1 []byte) { + bytesNoSIMD(dst, src0, src1, len(src0)) +} + +func xorSrc1(dst, src0, src1 []byte) { + bytesNoSIMD(dst, src0, src1, len(src1)) +} diff --git a/vendor/github.com/tjfoc/gmsm/LICENSE b/vendor/github.com/tjfoc/gmsm/LICENSE new file mode 100644 index 0000000..8dada3e --- /dev/null +++ b/vendor/github.com/tjfoc/gmsm/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor 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, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + 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. diff --git a/vendor/github.com/tjfoc/gmsm/sm4/sm4.go b/vendor/github.com/tjfoc/gmsm/sm4/sm4.go new file mode 100644 index 0000000..9956af2 --- /dev/null +++ b/vendor/github.com/tjfoc/gmsm/sm4/sm4.go @@ -0,0 +1,491 @@ +/* +Copyright Suzhou Tongji Fintech Research Institute 2017 All Rights Reserved. +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. + +sm4 acceleration +modified by Jack, 2017 Oct +*/ + +package sm4 + +import ( + "bytes" + "crypto/cipher" + "errors" + "strconv" +) + +const BlockSize = 16 +var IV=make([]byte,BlockSize) +type SM4Key []byte + +// Cipher is an instance of SM4 encryption. +type Sm4Cipher struct { + subkeys []uint32 + block1 []uint32 + block2 []byte +} + +// sm4密钥参量 +var fk = [4]uint32{ + 0xa3b1bac6, 0x56aa3350, 0x677d9197, 0xb27022dc, +} + +// sm4密钥参量 +var ck = [32]uint32{ + 0x00070e15, 0x1c232a31, 0x383f464d, 0x545b6269, + 0x70777e85, 0x8c939aa1, 0xa8afb6bd, 0xc4cbd2d9, + 0xe0e7eef5, 0xfc030a11, 0x181f262d, 0x343b4249, + 0x50575e65, 0x6c737a81, 0x888f969d, 0xa4abb2b9, + 0xc0c7ced5, 0xdce3eaf1, 0xf8ff060d, 0x141b2229, + 0x30373e45, 0x4c535a61, 0x686f767d, 0x848b9299, + 0xa0a7aeb5, 0xbcc3cad1, 0xd8dfe6ed, 0xf4fb0209, + 0x10171e25, 0x2c333a41, 0x484f565d, 0x646b7279, +} + +// sm4密钥参量 +var sbox = [256]uint8{ + 0xd6, 0x90, 0xe9, 0xfe, 0xcc, 0xe1, 0x3d, 0xb7, 0x16, 0xb6, 0x14, 0xc2, 0x28, 0xfb, 0x2c, 0x05, + 0x2b, 0x67, 0x9a, 0x76, 0x2a, 0xbe, 0x04, 0xc3, 0xaa, 0x44, 0x13, 0x26, 0x49, 0x86, 0x06, 0x99, + 0x9c, 0x42, 0x50, 0xf4, 0x91, 0xef, 0x98, 0x7a, 0x33, 0x54, 0x0b, 0x43, 0xed, 0xcf, 0xac, 0x62, + 0xe4, 0xb3, 0x1c, 0xa9, 0xc9, 0x08, 0xe8, 0x95, 0x80, 0xdf, 0x94, 0xfa, 0x75, 0x8f, 0x3f, 0xa6, + 0x47, 0x07, 0xa7, 0xfc, 0xf3, 0x73, 0x17, 0xba, 0x83, 0x59, 0x3c, 0x19, 0xe6, 0x85, 0x4f, 0xa8, + 0x68, 0x6b, 0x81, 0xb2, 0x71, 0x64, 0xda, 0x8b, 0xf8, 0xeb, 0x0f, 0x4b, 0x70, 0x56, 0x9d, 0x35, + 0x1e, 0x24, 0x0e, 0x5e, 0x63, 0x58, 0xd1, 0xa2, 0x25, 0x22, 0x7c, 0x3b, 0x01, 0x21, 0x78, 0x87, + 0xd4, 0x00, 0x46, 0x57, 0x9f, 0xd3, 0x27, 0x52, 0x4c, 0x36, 0x02, 0xe7, 0xa0, 0xc4, 0xc8, 0x9e, + 0xea, 0xbf, 0x8a, 0xd2, 0x40, 0xc7, 0x38, 0xb5, 0xa3, 0xf7, 0xf2, 0xce, 0xf9, 0x61, 0x15, 0xa1, + 0xe0, 0xae, 0x5d, 0xa4, 0x9b, 0x34, 0x1a, 0x55, 0xad, 0x93, 0x32, 0x30, 0xf5, 0x8c, 0xb1, 0xe3, + 0x1d, 0xf6, 0xe2, 0x2e, 0x82, 0x66, 0xca, 0x60, 0xc0, 0x29, 0x23, 0xab, 0x0d, 0x53, 0x4e, 0x6f, + 0xd5, 0xdb, 0x37, 0x45, 0xde, 0xfd, 0x8e, 0x2f, 0x03, 0xff, 0x6a, 0x72, 0x6d, 0x6c, 0x5b, 0x51, + 0x8d, 0x1b, 0xaf, 0x92, 0xbb, 0xdd, 0xbc, 0x7f, 0x11, 0xd9, 0x5c, 0x41, 0x1f, 0x10, 0x5a, 0xd8, + 0x0a, 0xc1, 0x31, 0x88, 0xa5, 0xcd, 0x7b, 0xbd, 0x2d, 0x74, 0xd0, 0x12, 0xb8, 0xe5, 0xb4, 0xb0, + 0x89, 0x69, 0x97, 0x4a, 0x0c, 0x96, 0x77, 0x7e, 0x65, 0xb9, 0xf1, 0x09, 0xc5, 0x6e, 0xc6, 0x84, + 0x18, 0xf0, 0x7d, 0xec, 0x3a, 0xdc, 0x4d, 0x20, 0x79, 0xee, 0x5f, 0x3e, 0xd7, 0xcb, 0x39, 0x48, +} + +var sbox0 = [256]uint32{ + 0xd55b5b8e, 0x924242d0, 0xeaa7a74d, 0xfdfbfb06, 0xcf3333fc, 0xe2878765, 0x3df4f4c9, 0xb5dede6b, 0x1658584e, 0xb4dada6e, 0x14505044, 0xc10b0bca, 0x28a0a088, 0xf8efef17, 0x2cb0b09c, 0x05141411, + 0x2bacac87, 0x669d9dfb, 0x986a6af2, 0x77d9d9ae, 0x2aa8a882, 0xbcfafa46, 0x04101014, 0xc00f0fcf, 0xa8aaaa02, 0x45111154, 0x134c4c5f, 0x269898be, 0x4825256d, 0x841a1a9e, 0x0618181e, 0x9b6666fd, + 0x9e7272ec, 0x4309094a, 0x51414110, 0xf7d3d324, 0x934646d5, 0xecbfbf53, 0x9a6262f8, 0x7be9e992, 0x33ccccff, 0x55515104, 0x0b2c2c27, 0x420d0d4f, 0xeeb7b759, 0xcc3f3ff3, 0xaeb2b21c, 0x638989ea, + 0xe7939374, 0xb1cece7f, 0x1c70706c, 0xaba6a60d, 0xca2727ed, 0x08202028, 0xeba3a348, 0x975656c1, 0x82020280, 0xdc7f7fa3, 0x965252c4, 0xf9ebeb12, 0x74d5d5a1, 0x8d3e3eb3, 0x3ffcfcc3, 0xa49a9a3e, + 0x461d1d5b, 0x071c1c1b, 0xa59e9e3b, 0xfff3f30c, 0xf0cfcf3f, 0x72cdcdbf, 0x175c5c4b, 0xb8eaea52, 0x810e0e8f, 0x5865653d, 0x3cf0f0cc, 0x1964647d, 0xe59b9b7e, 0x87161691, 0x4e3d3d73, 0xaaa2a208, + 0x69a1a1c8, 0x6aadadc7, 0x83060685, 0xb0caca7a, 0x70c5c5b5, 0x659191f4, 0xd96b6bb2, 0x892e2ea7, 0xfbe3e318, 0xe8afaf47, 0x0f3c3c33, 0x4a2d2d67, 0x71c1c1b0, 0x5759590e, 0x9f7676e9, 0x35d4d4e1, + 0x1e787866, 0x249090b4, 0x0e383836, 0x5f797926, 0x628d8def, 0x59616138, 0xd2474795, 0xa08a8a2a, 0x259494b1, 0x228888aa, 0x7df1f18c, 0x3bececd7, 0x01040405, 0x218484a5, 0x79e1e198, 0x851e1e9b, + 0xd7535384, 0x00000000, 0x4719195e, 0x565d5d0b, 0x9d7e7ee3, 0xd04f4f9f, 0x279c9cbb, 0x5349491a, 0x4d31317c, 0x36d8d8ee, 0x0208080a, 0xe49f9f7b, 0xa2828220, 0xc71313d4, 0xcb2323e8, 0x9c7a7ae6, + 0xe9abab42, 0xbdfefe43, 0x882a2aa2, 0xd14b4b9a, 0x41010140, 0xc41f1fdb, 0x38e0e0d8, 0xb7d6d661, 0xa18e8e2f, 0xf4dfdf2b, 0xf1cbcb3a, 0xcd3b3bf6, 0xfae7e71d, 0x608585e5, 0x15545441, 0xa3868625, + 0xe3838360, 0xacbaba16, 0x5c757529, 0xa6929234, 0x996e6ef7, 0x34d0d0e4, 0x1a686872, 0x54555501, 0xafb6b619, 0x914e4edf, 0x32c8c8fa, 0x30c0c0f0, 0xf6d7d721, 0x8e3232bc, 0xb3c6c675, 0xe08f8f6f, + 0x1d747469, 0xf5dbdb2e, 0xe18b8b6a, 0x2eb8b896, 0x800a0a8a, 0x679999fe, 0xc92b2be2, 0x618181e0, 0xc30303c0, 0x29a4a48d, 0x238c8caf, 0xa9aeae07, 0x0d343439, 0x524d4d1f, 0x4f393976, 0x6ebdbdd3, + 0xd6575781, 0xd86f6fb7, 0x37dcdceb, 0x44151551, 0xdd7b7ba6, 0xfef7f709, 0x8c3a3ab6, 0x2fbcbc93, 0x030c0c0f, 0xfcffff03, 0x6ba9a9c2, 0x73c9c9ba, 0x6cb5b5d9, 0x6db1b1dc, 0x5a6d6d37, 0x50454515, + 0x8f3636b9, 0x1b6c6c77, 0xadbebe13, 0x904a4ada, 0xb9eeee57, 0xde7777a9, 0xbef2f24c, 0x7efdfd83, 0x11444455, 0xda6767bd, 0x5d71712c, 0x40050545, 0x1f7c7c63, 0x10404050, 0x5b696932, 0xdb6363b8, + 0x0a282822, 0xc20707c5, 0x31c4c4f5, 0x8a2222a8, 0xa7969631, 0xce3737f9, 0x7aeded97, 0xbff6f649, 0x2db4b499, 0x75d1d1a4, 0xd3434390, 0x1248485a, 0xbae2e258, 0xe6979771, 0xb6d2d264, 0xb2c2c270, + 0x8b2626ad, 0x68a5a5cd, 0x955e5ecb, 0x4b292962, 0x0c30303c, 0x945a5ace, 0x76ddddab, 0x7ff9f986, 0x649595f1, 0xbbe6e65d, 0xf2c7c735, 0x0924242d, 0xc61717d1, 0x6fb9b9d6, 0xc51b1bde, 0x86121294, + 0x18606078, 0xf3c3c330, 0x7cf5f589, 0xefb3b35c, 0x3ae8e8d2, 0xdf7373ac, 0x4c353579, 0x208080a0, 0x78e5e59d, 0xedbbbb56, 0x5e7d7d23, 0x3ef8f8c6, 0xd45f5f8b, 0xc82f2fe7, 0x39e4e4dd, 0x49212168, +} + +var sbox1 = [256]uint32{ + 0x5b5b8ed5, 0x4242d092, 0xa7a74dea, 0xfbfb06fd, 0x3333fccf, 0x878765e2, 0xf4f4c93d, 0xdede6bb5, 0x58584e16, 0xdada6eb4, 0x50504414, 0x0b0bcac1, 0xa0a08828, 0xefef17f8, 0xb0b09c2c, 0x14141105, + 0xacac872b, 0x9d9dfb66, 0x6a6af298, 0xd9d9ae77, 0xa8a8822a, 0xfafa46bc, 0x10101404, 0x0f0fcfc0, 0xaaaa02a8, 0x11115445, 0x4c4c5f13, 0x9898be26, 0x25256d48, 0x1a1a9e84, 0x18181e06, 0x6666fd9b, + 0x7272ec9e, 0x09094a43, 0x41411051, 0xd3d324f7, 0x4646d593, 0xbfbf53ec, 0x6262f89a, 0xe9e9927b, 0xccccff33, 0x51510455, 0x2c2c270b, 0x0d0d4f42, 0xb7b759ee, 0x3f3ff3cc, 0xb2b21cae, 0x8989ea63, + 0x939374e7, 0xcece7fb1, 0x70706c1c, 0xa6a60dab, 0x2727edca, 0x20202808, 0xa3a348eb, 0x5656c197, 0x02028082, 0x7f7fa3dc, 0x5252c496, 0xebeb12f9, 0xd5d5a174, 0x3e3eb38d, 0xfcfcc33f, 0x9a9a3ea4, + 0x1d1d5b46, 0x1c1c1b07, 0x9e9e3ba5, 0xf3f30cff, 0xcfcf3ff0, 0xcdcdbf72, 0x5c5c4b17, 0xeaea52b8, 0x0e0e8f81, 0x65653d58, 0xf0f0cc3c, 0x64647d19, 0x9b9b7ee5, 0x16169187, 0x3d3d734e, 0xa2a208aa, + 0xa1a1c869, 0xadadc76a, 0x06068583, 0xcaca7ab0, 0xc5c5b570, 0x9191f465, 0x6b6bb2d9, 0x2e2ea789, 0xe3e318fb, 0xafaf47e8, 0x3c3c330f, 0x2d2d674a, 0xc1c1b071, 0x59590e57, 0x7676e99f, 0xd4d4e135, + 0x7878661e, 0x9090b424, 0x3838360e, 0x7979265f, 0x8d8def62, 0x61613859, 0x474795d2, 0x8a8a2aa0, 0x9494b125, 0x8888aa22, 0xf1f18c7d, 0xececd73b, 0x04040501, 0x8484a521, 0xe1e19879, 0x1e1e9b85, + 0x535384d7, 0x00000000, 0x19195e47, 0x5d5d0b56, 0x7e7ee39d, 0x4f4f9fd0, 0x9c9cbb27, 0x49491a53, 0x31317c4d, 0xd8d8ee36, 0x08080a02, 0x9f9f7be4, 0x828220a2, 0x1313d4c7, 0x2323e8cb, 0x7a7ae69c, + 0xabab42e9, 0xfefe43bd, 0x2a2aa288, 0x4b4b9ad1, 0x01014041, 0x1f1fdbc4, 0xe0e0d838, 0xd6d661b7, 0x8e8e2fa1, 0xdfdf2bf4, 0xcbcb3af1, 0x3b3bf6cd, 0xe7e71dfa, 0x8585e560, 0x54544115, 0x868625a3, + 0x838360e3, 0xbaba16ac, 0x7575295c, 0x929234a6, 0x6e6ef799, 0xd0d0e434, 0x6868721a, 0x55550154, 0xb6b619af, 0x4e4edf91, 0xc8c8fa32, 0xc0c0f030, 0xd7d721f6, 0x3232bc8e, 0xc6c675b3, 0x8f8f6fe0, + 0x7474691d, 0xdbdb2ef5, 0x8b8b6ae1, 0xb8b8962e, 0x0a0a8a80, 0x9999fe67, 0x2b2be2c9, 0x8181e061, 0x0303c0c3, 0xa4a48d29, 0x8c8caf23, 0xaeae07a9, 0x3434390d, 0x4d4d1f52, 0x3939764f, 0xbdbdd36e, + 0x575781d6, 0x6f6fb7d8, 0xdcdceb37, 0x15155144, 0x7b7ba6dd, 0xf7f709fe, 0x3a3ab68c, 0xbcbc932f, 0x0c0c0f03, 0xffff03fc, 0xa9a9c26b, 0xc9c9ba73, 0xb5b5d96c, 0xb1b1dc6d, 0x6d6d375a, 0x45451550, + 0x3636b98f, 0x6c6c771b, 0xbebe13ad, 0x4a4ada90, 0xeeee57b9, 0x7777a9de, 0xf2f24cbe, 0xfdfd837e, 0x44445511, 0x6767bdda, 0x71712c5d, 0x05054540, 0x7c7c631f, 0x40405010, 0x6969325b, 0x6363b8db, + 0x2828220a, 0x0707c5c2, 0xc4c4f531, 0x2222a88a, 0x969631a7, 0x3737f9ce, 0xeded977a, 0xf6f649bf, 0xb4b4992d, 0xd1d1a475, 0x434390d3, 0x48485a12, 0xe2e258ba, 0x979771e6, 0xd2d264b6, 0xc2c270b2, + 0x2626ad8b, 0xa5a5cd68, 0x5e5ecb95, 0x2929624b, 0x30303c0c, 0x5a5ace94, 0xddddab76, 0xf9f9867f, 0x9595f164, 0xe6e65dbb, 0xc7c735f2, 0x24242d09, 0x1717d1c6, 0xb9b9d66f, 0x1b1bdec5, 0x12129486, + 0x60607818, 0xc3c330f3, 0xf5f5897c, 0xb3b35cef, 0xe8e8d23a, 0x7373acdf, 0x3535794c, 0x8080a020, 0xe5e59d78, 0xbbbb56ed, 0x7d7d235e, 0xf8f8c63e, 0x5f5f8bd4, 0x2f2fe7c8, 0xe4e4dd39, 0x21216849, +} + +var sbox2 = [256]uint32{ + 0x5b8ed55b, 0x42d09242, 0xa74deaa7, 0xfb06fdfb, 0x33fccf33, 0x8765e287, 0xf4c93df4, 0xde6bb5de, 0x584e1658, 0xda6eb4da, 0x50441450, 0x0bcac10b, 0xa08828a0, 0xef17f8ef, 0xb09c2cb0, 0x14110514, + 0xac872bac, 0x9dfb669d, 0x6af2986a, 0xd9ae77d9, 0xa8822aa8, 0xfa46bcfa, 0x10140410, 0x0fcfc00f, 0xaa02a8aa, 0x11544511, 0x4c5f134c, 0x98be2698, 0x256d4825, 0x1a9e841a, 0x181e0618, 0x66fd9b66, + 0x72ec9e72, 0x094a4309, 0x41105141, 0xd324f7d3, 0x46d59346, 0xbf53ecbf, 0x62f89a62, 0xe9927be9, 0xccff33cc, 0x51045551, 0x2c270b2c, 0x0d4f420d, 0xb759eeb7, 0x3ff3cc3f, 0xb21caeb2, 0x89ea6389, + 0x9374e793, 0xce7fb1ce, 0x706c1c70, 0xa60daba6, 0x27edca27, 0x20280820, 0xa348eba3, 0x56c19756, 0x02808202, 0x7fa3dc7f, 0x52c49652, 0xeb12f9eb, 0xd5a174d5, 0x3eb38d3e, 0xfcc33ffc, 0x9a3ea49a, + 0x1d5b461d, 0x1c1b071c, 0x9e3ba59e, 0xf30cfff3, 0xcf3ff0cf, 0xcdbf72cd, 0x5c4b175c, 0xea52b8ea, 0x0e8f810e, 0x653d5865, 0xf0cc3cf0, 0x647d1964, 0x9b7ee59b, 0x16918716, 0x3d734e3d, 0xa208aaa2, + 0xa1c869a1, 0xadc76aad, 0x06858306, 0xca7ab0ca, 0xc5b570c5, 0x91f46591, 0x6bb2d96b, 0x2ea7892e, 0xe318fbe3, 0xaf47e8af, 0x3c330f3c, 0x2d674a2d, 0xc1b071c1, 0x590e5759, 0x76e99f76, 0xd4e135d4, + 0x78661e78, 0x90b42490, 0x38360e38, 0x79265f79, 0x8def628d, 0x61385961, 0x4795d247, 0x8a2aa08a, 0x94b12594, 0x88aa2288, 0xf18c7df1, 0xecd73bec, 0x04050104, 0x84a52184, 0xe19879e1, 0x1e9b851e, + 0x5384d753, 0x00000000, 0x195e4719, 0x5d0b565d, 0x7ee39d7e, 0x4f9fd04f, 0x9cbb279c, 0x491a5349, 0x317c4d31, 0xd8ee36d8, 0x080a0208, 0x9f7be49f, 0x8220a282, 0x13d4c713, 0x23e8cb23, 0x7ae69c7a, + 0xab42e9ab, 0xfe43bdfe, 0x2aa2882a, 0x4b9ad14b, 0x01404101, 0x1fdbc41f, 0xe0d838e0, 0xd661b7d6, 0x8e2fa18e, 0xdf2bf4df, 0xcb3af1cb, 0x3bf6cd3b, 0xe71dfae7, 0x85e56085, 0x54411554, 0x8625a386, + 0x8360e383, 0xba16acba, 0x75295c75, 0x9234a692, 0x6ef7996e, 0xd0e434d0, 0x68721a68, 0x55015455, 0xb619afb6, 0x4edf914e, 0xc8fa32c8, 0xc0f030c0, 0xd721f6d7, 0x32bc8e32, 0xc675b3c6, 0x8f6fe08f, + 0x74691d74, 0xdb2ef5db, 0x8b6ae18b, 0xb8962eb8, 0x0a8a800a, 0x99fe6799, 0x2be2c92b, 0x81e06181, 0x03c0c303, 0xa48d29a4, 0x8caf238c, 0xae07a9ae, 0x34390d34, 0x4d1f524d, 0x39764f39, 0xbdd36ebd, + 0x5781d657, 0x6fb7d86f, 0xdceb37dc, 0x15514415, 0x7ba6dd7b, 0xf709fef7, 0x3ab68c3a, 0xbc932fbc, 0x0c0f030c, 0xff03fcff, 0xa9c26ba9, 0xc9ba73c9, 0xb5d96cb5, 0xb1dc6db1, 0x6d375a6d, 0x45155045, + 0x36b98f36, 0x6c771b6c, 0xbe13adbe, 0x4ada904a, 0xee57b9ee, 0x77a9de77, 0xf24cbef2, 0xfd837efd, 0x44551144, 0x67bdda67, 0x712c5d71, 0x05454005, 0x7c631f7c, 0x40501040, 0x69325b69, 0x63b8db63, + 0x28220a28, 0x07c5c207, 0xc4f531c4, 0x22a88a22, 0x9631a796, 0x37f9ce37, 0xed977aed, 0xf649bff6, 0xb4992db4, 0xd1a475d1, 0x4390d343, 0x485a1248, 0xe258bae2, 0x9771e697, 0xd264b6d2, 0xc270b2c2, + 0x26ad8b26, 0xa5cd68a5, 0x5ecb955e, 0x29624b29, 0x303c0c30, 0x5ace945a, 0xddab76dd, 0xf9867ff9, 0x95f16495, 0xe65dbbe6, 0xc735f2c7, 0x242d0924, 0x17d1c617, 0xb9d66fb9, 0x1bdec51b, 0x12948612, + 0x60781860, 0xc330f3c3, 0xf5897cf5, 0xb35cefb3, 0xe8d23ae8, 0x73acdf73, 0x35794c35, 0x80a02080, 0xe59d78e5, 0xbb56edbb, 0x7d235e7d, 0xf8c63ef8, 0x5f8bd45f, 0x2fe7c82f, 0xe4dd39e4, 0x21684921, +} + +var sbox3 = [256]uint32{ + 0x8ed55b5b, 0xd0924242, 0x4deaa7a7, 0x06fdfbfb, 0xfccf3333, 0x65e28787, 0xc93df4f4, 0x6bb5dede, 0x4e165858, 0x6eb4dada, 0x44145050, 0xcac10b0b, 0x8828a0a0, 0x17f8efef, 0x9c2cb0b0, 0x11051414, + 0x872bacac, 0xfb669d9d, 0xf2986a6a, 0xae77d9d9, 0x822aa8a8, 0x46bcfafa, 0x14041010, 0xcfc00f0f, 0x02a8aaaa, 0x54451111, 0x5f134c4c, 0xbe269898, 0x6d482525, 0x9e841a1a, 0x1e061818, 0xfd9b6666, + 0xec9e7272, 0x4a430909, 0x10514141, 0x24f7d3d3, 0xd5934646, 0x53ecbfbf, 0xf89a6262, 0x927be9e9, 0xff33cccc, 0x04555151, 0x270b2c2c, 0x4f420d0d, 0x59eeb7b7, 0xf3cc3f3f, 0x1caeb2b2, 0xea638989, + 0x74e79393, 0x7fb1cece, 0x6c1c7070, 0x0daba6a6, 0xedca2727, 0x28082020, 0x48eba3a3, 0xc1975656, 0x80820202, 0xa3dc7f7f, 0xc4965252, 0x12f9ebeb, 0xa174d5d5, 0xb38d3e3e, 0xc33ffcfc, 0x3ea49a9a, + 0x5b461d1d, 0x1b071c1c, 0x3ba59e9e, 0x0cfff3f3, 0x3ff0cfcf, 0xbf72cdcd, 0x4b175c5c, 0x52b8eaea, 0x8f810e0e, 0x3d586565, 0xcc3cf0f0, 0x7d196464, 0x7ee59b9b, 0x91871616, 0x734e3d3d, 0x08aaa2a2, + 0xc869a1a1, 0xc76aadad, 0x85830606, 0x7ab0caca, 0xb570c5c5, 0xf4659191, 0xb2d96b6b, 0xa7892e2e, 0x18fbe3e3, 0x47e8afaf, 0x330f3c3c, 0x674a2d2d, 0xb071c1c1, 0x0e575959, 0xe99f7676, 0xe135d4d4, + 0x661e7878, 0xb4249090, 0x360e3838, 0x265f7979, 0xef628d8d, 0x38596161, 0x95d24747, 0x2aa08a8a, 0xb1259494, 0xaa228888, 0x8c7df1f1, 0xd73becec, 0x05010404, 0xa5218484, 0x9879e1e1, 0x9b851e1e, + 0x84d75353, 0x00000000, 0x5e471919, 0x0b565d5d, 0xe39d7e7e, 0x9fd04f4f, 0xbb279c9c, 0x1a534949, 0x7c4d3131, 0xee36d8d8, 0x0a020808, 0x7be49f9f, 0x20a28282, 0xd4c71313, 0xe8cb2323, 0xe69c7a7a, + 0x42e9abab, 0x43bdfefe, 0xa2882a2a, 0x9ad14b4b, 0x40410101, 0xdbc41f1f, 0xd838e0e0, 0x61b7d6d6, 0x2fa18e8e, 0x2bf4dfdf, 0x3af1cbcb, 0xf6cd3b3b, 0x1dfae7e7, 0xe5608585, 0x41155454, 0x25a38686, + 0x60e38383, 0x16acbaba, 0x295c7575, 0x34a69292, 0xf7996e6e, 0xe434d0d0, 0x721a6868, 0x01545555, 0x19afb6b6, 0xdf914e4e, 0xfa32c8c8, 0xf030c0c0, 0x21f6d7d7, 0xbc8e3232, 0x75b3c6c6, 0x6fe08f8f, + 0x691d7474, 0x2ef5dbdb, 0x6ae18b8b, 0x962eb8b8, 0x8a800a0a, 0xfe679999, 0xe2c92b2b, 0xe0618181, 0xc0c30303, 0x8d29a4a4, 0xaf238c8c, 0x07a9aeae, 0x390d3434, 0x1f524d4d, 0x764f3939, 0xd36ebdbd, + 0x81d65757, 0xb7d86f6f, 0xeb37dcdc, 0x51441515, 0xa6dd7b7b, 0x09fef7f7, 0xb68c3a3a, 0x932fbcbc, 0x0f030c0c, 0x03fcffff, 0xc26ba9a9, 0xba73c9c9, 0xd96cb5b5, 0xdc6db1b1, 0x375a6d6d, 0x15504545, + 0xb98f3636, 0x771b6c6c, 0x13adbebe, 0xda904a4a, 0x57b9eeee, 0xa9de7777, 0x4cbef2f2, 0x837efdfd, 0x55114444, 0xbdda6767, 0x2c5d7171, 0x45400505, 0x631f7c7c, 0x50104040, 0x325b6969, 0xb8db6363, + 0x220a2828, 0xc5c20707, 0xf531c4c4, 0xa88a2222, 0x31a79696, 0xf9ce3737, 0x977aeded, 0x49bff6f6, 0x992db4b4, 0xa475d1d1, 0x90d34343, 0x5a124848, 0x58bae2e2, 0x71e69797, 0x64b6d2d2, 0x70b2c2c2, + 0xad8b2626, 0xcd68a5a5, 0xcb955e5e, 0x624b2929, 0x3c0c3030, 0xce945a5a, 0xab76dddd, 0x867ff9f9, 0xf1649595, 0x5dbbe6e6, 0x35f2c7c7, 0x2d092424, 0xd1c61717, 0xd66fb9b9, 0xdec51b1b, 0x94861212, + 0x78186060, 0x30f3c3c3, 0x897cf5f5, 0x5cefb3b3, 0xd23ae8e8, 0xacdf7373, 0x794c3535, 0xa0208080, 0x9d78e5e5, 0x56edbbbb, 0x235e7d7d, 0xc63ef8f8, 0x8bd45f5f, 0xe7c82f2f, 0xdd39e4e4, 0x68492121, +} + +func rl(x uint32, i uint8) uint32 { return (x << (i % 32)) | (x >> (32 - (i % 32))) } + +func l0(b uint32) uint32 { return b ^ rl(b, 13) ^ rl(b, 23) } + +func feistel0(x0, x1, x2, x3, rk uint32) uint32 { return x0 ^ l0(p(x1^x2^x3^rk)) } + +//非线性变换τ(.) +func p(a uint32) uint32 { + return (uint32(sbox[a>>24]) << 24) ^ (uint32(sbox[(a>>16)&0xff]) << 16) ^ (uint32(sbox[(a>>8)&0xff]) << 8) ^ uint32(sbox[(a)&0xff]) +} + +func permuteInitialBlock(b []uint32, block []byte) { + for i := 0; i < 4; i++ { + b[i] = (uint32(block[i*4]) << 24) | (uint32(block[i*4+1]) << 16) | + (uint32(block[i*4+2]) << 8) | (uint32(block[i*4+3])) + } +} + +func permuteFinalBlock(b []byte, block []uint32) { + for i := 0; i < 4; i++ { + b[i*4] = uint8(block[i] >> 24) + b[i*4+1] = uint8(block[i] >> 16) + b[i*4+2] = uint8(block[i] >> 8) + b[i*4+3] = uint8(block[i]) + } +} + +//修改后的加密核心函数 +func cryptBlock(subkeys []uint32, b []uint32, r []byte, dst, src []byte, decrypt bool) { + permuteInitialBlock(b, src) + + // bounds check elimination in major encryption loop + // https://go101.org/article/bounds-check-elimination.html + _ = b[3] + if decrypt { + for i := 0; i < 8; i++ { + s := subkeys[31-4*i-3 : 31-4*i-3+4] + x := b[1] ^ b[2] ^ b[3] ^ s[3] + b[0] = b[0] ^ sbox0[x&0xff] ^ sbox1[(x>>8)&0xff] ^ sbox2[(x>>16)&0xff] ^ sbox3[(x>>24)&0xff] + x = b[0] ^ b[2] ^ b[3] ^ s[2] + b[1] = b[1] ^ sbox0[x&0xff] ^ sbox1[(x>>8)&0xff] ^ sbox2[(x>>16)&0xff] ^ sbox3[(x>>24)&0xff] + x = b[0] ^ b[1] ^ b[3] ^ s[1] + b[2] = b[2] ^ sbox0[x&0xff] ^ sbox1[(x>>8)&0xff] ^ sbox2[(x>>16)&0xff] ^ sbox3[(x>>24)&0xff] + x = b[1] ^ b[2] ^ b[0] ^ s[0] + b[3] = b[3] ^ sbox0[x&0xff] ^ sbox1[(x>>8)&0xff] ^ sbox2[(x>>16)&0xff] ^ sbox3[(x>>24)&0xff] + } + } else { + for i := 0; i < 8; i++ { + s := subkeys[4*i : 4*i+4] + x := b[1] ^ b[2] ^ b[3] ^ s[0] + b[0] = b[0] ^ sbox0[x&0xff] ^ sbox1[(x>>8)&0xff] ^ sbox2[(x>>16)&0xff] ^ sbox3[(x>>24)&0xff] + x = b[0] ^ b[2] ^ b[3] ^ s[1] + b[1] = b[1] ^ sbox0[x&0xff] ^ sbox1[(x>>8)&0xff] ^ sbox2[(x>>16)&0xff] ^ sbox3[(x>>24)&0xff] + x = b[0] ^ b[1] ^ b[3] ^ s[2] + b[2] = b[2] ^ sbox0[x&0xff] ^ sbox1[(x>>8)&0xff] ^ sbox2[(x>>16)&0xff] ^ sbox3[(x>>24)&0xff] + x = b[1] ^ b[2] ^ b[0] ^ s[3] + b[3] = b[3] ^ sbox0[x&0xff] ^ sbox1[(x>>8)&0xff] ^ sbox2[(x>>16)&0xff] ^ sbox3[(x>>24)&0xff] + } + } + b[0], b[1], b[2], b[3] = b[3], b[2], b[1], b[0] + permuteFinalBlock(r, b) + copy(dst, r) +} + +func generateSubKeys(key []byte) []uint32 { + subkeys := make([]uint32, 32) + b := make([]uint32, 4) + permuteInitialBlock(b, key) + b[0] ^= fk[0] + b[1] ^= fk[1] + b[2] ^= fk[2] + b[3] ^= fk[3] + for i := 0; i < 32; i++ { + subkeys[i] = feistel0(b[0], b[1], b[2], b[3], ck[i]) + b[0], b[1], b[2], b[3] = b[1], b[2], b[3], subkeys[i] + } + return subkeys +} + +// NewCipher creates and returns a new cipher.Block. +func NewCipher(key []byte) (cipher.Block, error) { + if len(key) != BlockSize { + return nil, errors.New("SM4: invalid key size " + strconv.Itoa(len(key))) + } + c := new(Sm4Cipher) + c.subkeys = generateSubKeys(key) + c.block1 = make([]uint32, 4) + c.block2 = make([]byte, 16) + return c, nil +} + +func (c *Sm4Cipher) BlockSize() int { + return BlockSize +} + +func (c *Sm4Cipher) Encrypt(dst, src []byte) { + cryptBlock(c.subkeys, c.block1, c.block2, dst, src, false) +} + + + +func (c *Sm4Cipher) Decrypt(dst, src []byte) { + cryptBlock(c.subkeys, c.block1, c.block2, dst, src, true) +} + + + +func xor(in, iv []byte) (out []byte) { + if len(in) != len(iv) { + return nil + } + + out = make([]byte, len(in)) + for i := 0; i < len(in); i++ { + out[i] = in[i] ^ iv[i] + } + return +} + +func pkcs7Padding(src []byte) []byte { + padding := BlockSize - len(src)%BlockSize + padtext := bytes.Repeat([]byte{byte(padding)}, padding) + return append(src, padtext...) +} + +func pkcs7UnPadding(src []byte) ([]byte, error) { + length := len(src) + unpadding := int(src[length-1]) + if unpadding > BlockSize || unpadding == 0 { + return nil, errors.New("Invalid pkcs7 padding (unpadding > BlockSize || unpadding == 0)") + } + + pad := src[len(src)-unpadding:] + for i := 0; i < unpadding; i++ { + if pad[i] != byte(unpadding) { + return nil, errors.New("Invalid pkcs7 padding (pad[i] != unpadding)") + } + } + + return src[:(length - unpadding)], nil +} +func SetIV(iv []byte)error{ + if len(iv)!=BlockSize{ + return errors.New("SM4: invalid iv size") + } + IV=iv + return nil +} + +func Sm4Cbc(key []byte, in []byte, mode bool) (out []byte, err error) { + if len(key) != BlockSize { + return nil, errors.New("SM4: invalid key size " + strconv.Itoa(len(key))) + } + var inData []byte + if mode { + inData = pkcs7Padding(in) + } else { + inData = in + } + iv:=make([]byte,BlockSize) + copy(iv,IV) + out = make([]byte, len(inData)) + c, err := NewCipher(key) + if err != nil { + panic(err) + } + if mode { + for i := 0; i < len(inData)/16; i++ { + in_tmp := xor(inData[i*16:i*16+16], iv) + out_tmp := make([]byte, 16) + c.Encrypt(out_tmp, in_tmp) + copy(out[i*16:i*16+16], out_tmp) + iv = out_tmp + } + } else { + for i := 0; i < len(inData)/16; i++ { + in_tmp := inData[i*16 : i*16+16] + out_tmp := make([]byte, 16) + c.Decrypt(out_tmp, in_tmp) + out_tmp = xor(out_tmp, iv) + copy(out[i*16:i*16+16], out_tmp) + iv = in_tmp + } + out, _ = pkcs7UnPadding(out) + } + + return out, nil +} +func Sm4Ecb(key []byte, in []byte, mode bool) (out []byte, err error) { + if len(key) != BlockSize { + return nil, errors.New("SM4: invalid key size " + strconv.Itoa(len(key))) + } + var inData []byte + if mode { + inData = pkcs7Padding(in) + } else { + inData = in + } + out = make([]byte, len(inData)) + c, err := NewCipher(key) + if err != nil { + panic(err) + } + if mode { + for i := 0; i < len(inData)/16; i++ { + in_tmp := inData[i*16 : i*16+16] + out_tmp := make([]byte, 16) + c.Encrypt(out_tmp, in_tmp) + copy(out[i*16:i*16+16], out_tmp) + } + } else { + for i := 0; i < len(inData)/16; i++ { + in_tmp := inData[i*16 : i*16+16] + out_tmp := make([]byte, 16) + c.Decrypt(out_tmp, in_tmp) + copy(out[i*16:i*16+16], out_tmp) + } + out, _ = pkcs7UnPadding(out) + } + + return out, nil +} + +//密码反馈模式(Cipher FeedBack (CFB)) +//https://blog.csdn.net/zy_strive_2012/article/details/102520356 +//https://blog.csdn.net/sinat_23338865/article/details/72869841 +func Sm4CFB(key []byte, in []byte, mode bool) (out []byte, err error) { + if len(key) != BlockSize { + return nil, errors.New("SM4: invalid key size " + strconv.Itoa(len(key))) + } + var inData []byte + if mode { + inData = pkcs7Padding(in) + } else { + inData = in + } + + out = make([]byte, len(inData)) + c, err := NewCipher(key) + if err != nil { + panic(err) + } + + K := make([]byte, BlockSize) + cipherBlock := make([]byte, BlockSize) + plainBlock := make([]byte, BlockSize) + if mode { //加密 + for i := 0; i < len(inData)/16; i++ { + if i == 0 { + c.Encrypt(K, IV) + cipherBlock = xor(K[:BlockSize], inData[i*16:i*16+16]) + copy(out[i*16:i*16+16], cipherBlock) + //copy(cipherBlock,out_tmp) + continue + } + c.Encrypt(K, cipherBlock) + cipherBlock = xor(K[:BlockSize], inData[i*16:i*16+16]) + copy(out[i*16:i*16+16], cipherBlock) + //copy(cipherBlock,out_tmp) + } + + } else { //解密 + var i int = 0 + for ; i < len(inData)/16; i++ { + if i == 0 { + c.Encrypt(K, IV) //这里是加密,而不是调用解密方法Decrypt + plainBlock = xor(K[:BlockSize], inData[i*16:i*16+16]) //获取明文分组 + copy(out[i*16:i*16+16], plainBlock) + continue + } + c.Encrypt(K, inData[(i-1)*16:(i-1)*16+16]) + plainBlock = xor(K[:BlockSize], inData[i*16:i*16+16]) //获取明文分组 + copy(out[i*16:i*16+16], plainBlock) + + } + + out, _ = pkcs7UnPadding(out) + } + + return out, nil +} + +//输出反馈模式(Output feedback, OFB) +//https://blog.csdn.net/chengqiuming/article/details/82390910 +//https://blog.csdn.net/sinat_23338865/article/details/72869841 +func Sm4OFB(key []byte, in []byte, mode bool) (out []byte, err error) { + if len(key) != BlockSize { + return nil, errors.New("SM4: invalid key size " + strconv.Itoa(len(key))) + } + var inData []byte + if mode { + inData = pkcs7Padding(in) + } else { + inData = in + } + + out = make([]byte, len(inData)) + c, err := NewCipher(key) + if err != nil { + panic(err) + } + + K := make([]byte, BlockSize) + cipherBlock := make([]byte, BlockSize) + plainBlock := make([]byte, BlockSize) + shiftIV := make([]byte, BlockSize) + if mode { //加密 + for i := 0; i < len(inData)/16; i++ { + if i == 0 { + c.Encrypt(K, IV) + cipherBlock = xor(K[:BlockSize], inData[i*16:i*16+16]) + copy(out[i*16:i*16+16], cipherBlock) + copy(shiftIV, K[:BlockSize]) + continue + } + c.Encrypt(K, shiftIV) + cipherBlock = xor(K[:BlockSize], inData[i*16:i*16+16]) + copy(out[i*16:i*16+16], cipherBlock) + copy(shiftIV, K[:BlockSize]) + } + + } else { //解密 + for i := 0; i < len(inData)/16; i++ { + if i == 0 { + c.Encrypt(K, IV) //这里是加密,而不是调用解密方法Decrypt + plainBlock = xor(K[:BlockSize], inData[i*16:i*16+16]) //获取明文分组 + copy(out[i*16:i*16+16], plainBlock) + copy(shiftIV, K[:BlockSize]) + continue + } + c.Encrypt(K, shiftIV) + plainBlock = xor(K[:BlockSize], inData[i*16:i*16+16]) //获取明文分组 + copy(out[i*16:i*16+16], plainBlock) + copy(shiftIV, K[:BlockSize]) + } + out, _ = pkcs7UnPadding(out) + } + + return out, nil +} diff --git a/vendor/github.com/tjfoc/gmsm/sm4/sm4_gcm.go b/vendor/github.com/tjfoc/gmsm/sm4/sm4_gcm.go new file mode 100644 index 0000000..6257c21 --- /dev/null +++ b/vendor/github.com/tjfoc/gmsm/sm4/sm4_gcm.go @@ -0,0 +1,333 @@ +/* +Copyright Hyperledger-TWGC All Rights Reserved. +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. + +writed by Zhiwei Yan, 2020 Oct +*/ +package sm4 + +import ( + "errors" + "strconv" +) + +//Paper: The Galois/Counter Mode of Operation (GCM) David A. Mcgrew,John Viega .2004. +func Sm4GCM(key []byte, IV ,in, A []byte, mode bool) ([]byte, []byte, error) { + if len(key) != BlockSize { + return nil,nil, errors.New("SM4: invalid key size " + strconv.Itoa(len(key))) + } + if mode { + C,T:=GCMEncrypt(key,IV,in,A) + return C,T,nil + }else{ + P,_T:=GCMDecrypt(key,IV,in,A) + return P,_T,nil + } +} + +func GetH(key []byte) (H []byte){ + c,err := NewCipher(key) + if err != nil { + panic(err) + } + + zores:=make([]byte, BlockSize) + H =make([]byte, BlockSize) + c.Encrypt(H,zores) + return H +} + +//ut = a + b +func addition(a ,b []byte) (out []byte){ + Len:=len(a) + if Len != len(b) { + return nil + } + out = make([]byte, Len) + for i := 0; i < Len; i++ { + out[i] = a[i] ^ b[i] + } + return out +} + +func Rightshift(V []byte){ + n:=len(V) + for i:=n-1;i>=0;i-- { + V[i]=V[i]>>1 + if i!=0{ + V[i]=((V[i-1]&0x01)<<7)|V[i] + } + } +} + +func findYi( Y []byte,index int) int{ + var temp byte + i := uint(index) + temp=Y[i/8] + temp=temp>>(7-i%8) + if temp & 0x01 == 1{ + return 1 + }else{ + return 0 + } +} + + +func multiplication(X,Y []byte) (Z []byte){ + + R:=make([]byte,BlockSize) + R[0]=0xe1 + Z=make([]byte,BlockSize) + V:=make([]byte,BlockSize) + copy(V,X) + for i:=0;i<=127;i++{ + if findYi(Y,i)==1{ + Z=addition(Z,V) + } + if V[BlockSize-1]&0x01==0{ + Rightshift(V) + }else{ + Rightshift(V) + V=addition(V,R) + } + } + return Z +} + +func GHASH(H []byte,A []byte,C []byte) (X[]byte){ + + calculm_v:=func(m ,v int) (int,int) { + if(m==0 && v!=0){ + m=1 + v=v*8 + }else if(m!=0 && v==0) { + v=BlockSize*8 + }else if(m!=0 && v!=0){ + m=m+1 + v=v*8 + }else { //m==0 && v==0 + m=1 + v=0 + } + return m,v + } + m:=len(A)/BlockSize + v:=len(A)%BlockSize + m,v=calculm_v(m,v) + + n:=len(C)/BlockSize + u:=(len(C)%BlockSize) + n,u=calculm_v(n,u) + + //i=0 + X=make([]byte,BlockSize*(m+n+2)) //X0 = 0 + for i:=0;im-1 对于数组来说是 0-->m-2 + } + + //i=m + zeros:=make([]byte,(128-v)/8) + Am:=make([]byte,v/8) + copy(Am[:],A[(m-1)*BlockSize:]) + Am=append(Am,zeros...) + copy(X[m*BlockSize:m*BlockSize+BlockSize],multiplication( addition(X[(m-1)*BlockSize:(m-1)*BlockSize+BlockSize],Am),H)) + + //i=m+1...m+n-1 + for i:=m+1;i<=(m+n-1);i++{ + copy(X[i*BlockSize:i*BlockSize+BlockSize],multiplication( addition(X[(i-1)*BlockSize:(i-1)*BlockSize+BlockSize],C[(i-m-1)*BlockSize:(i-m-1)*BlockSize+BlockSize]),H)) + } + + //i=m+n + zeros =make([]byte,(128-u)/8) + Cn:=make([]byte,u/8) + copy(Cn[:],C[(n-1)*BlockSize:]) + Cn=append(Cn,zeros...) + copy(X[(m+n)*BlockSize:(m+n)*BlockSize+BlockSize],multiplication( addition(X[(m+n-1)*BlockSize:(m+n-1)*BlockSize+BlockSize],Cn),H)) + + //i=m+n+1 + var lenAB []byte + calculateLenToBytes :=func(len int) []byte{ + data:=make([]byte,8) + data[0]=byte((len>>56)&0xff) + data[1]=byte((len>>48)&0xff) + data[2]=byte((len>>40)&0xff) + data[3]=byte((len>>32)&0xff) + data[4]=byte((len>>24)&0xff) + data[5]=byte((len>>16)&0xff) + data[6]=byte((len>>8)&0xff) + data[7]=byte((len>>0)&0xff) + return data + } + lenAB=append(lenAB,calculateLenToBytes(len(A))...) + lenAB=append(lenAB,calculateLenToBytes(len(C))...) + copy(X[(m+n+1)*BlockSize:(m+n+1)*BlockSize+BlockSize],multiplication(addition(X[(m+n)*BlockSize:(m+n)*BlockSize+BlockSize],lenAB),H)) + return X[(m+n+1)*BlockSize:(m+n+1)*BlockSize+BlockSize] +} + + +func GetY0(H,IV []byte) []byte{ + if len(IV)*8 == 96 { + zero31one1:=[]byte{0x00,0x00,0x00,0x01} + IV=append(IV,zero31one1...) + return IV + }else{ + return GHASH(H,[]byte{},IV) + + } + +} + +func incr(n int ,Y_i []byte) (Y_ii []byte) { + + Y_ii=make([]byte,BlockSize*n) + copy(Y_ii,Y_i) + + addYone:=func(yi,yii []byte){ + copy(yii[:],yi[:]) + + Len:=len(yi) + var rc byte=0x00 + for i:=Len-1;i>=0;i--{ + if(i==Len-1){ + if(yii[i]<0xff){ + yii[i]=yii[i]+0x01 + rc=0x00 + }else{ + yii[i]=0x00 + rc=0x01 + } + }else{ + if yii[i]+rc<0xff { + yii[i]=yii[i]+rc + rc=0x00 + }else{ + yii[i]=0x00 + rc=0x01 + } + } + } + } + for i:=1;i + + +[![GoDoc][1]][2] [![Powered][9]][10] [![MIT licensed][11]][12] [![Build Status][3]][4] [![Go Report Card][5]][6] [![Coverage Statusd][7]][8] + +[1]: https://godoc.org/github.com/xtaci/kcp-go?status.svg +[2]: https://godoc.org/github.com/xtaci/kcp-go +[3]: https://travis-ci.org/xtaci/kcp-go.svg?branch=master +[4]: https://travis-ci.org/xtaci/kcp-go +[5]: https://goreportcard.com/badge/github.com/xtaci/kcp-go +[6]: https://goreportcard.com/report/github.com/xtaci/kcp-go +[7]: https://codecov.io/gh/xtaci/kcp-go/branch/master/graph/badge.svg +[8]: https://codecov.io/gh/xtaci/kcp-go +[9]: https://img.shields.io/badge/KCP-Powered-blue.svg +[10]: https://github.com/skywind3000/kcp +[11]: https://img.shields.io/badge/license-MIT-blue.svg +[12]: LICENSE + +## Introduction + +**kcp-go** is a **Production-Grade Reliable-UDP** library for [golang](https://golang.org/). + +This library intents to provide a **smooth, resilient, ordered, error-checked and anonymous** delivery of streams over **UDP** packets, it has been battle-tested with opensource project [kcptun](https://github.com/xtaci/kcptun). Millions of devices(from low-end MIPS routers to high-end servers) have deployed **kcp-go** powered program in a variety of forms like **online games, live broadcasting, file synchronization and network acceleration**. + +[Lastest Release](https://github.com/xtaci/kcp-go/releases) + +## Features + +1. Designed for **Latency-sensitive** scenarios. +1. **Cache friendly** and **Memory optimized** design, offers extremely **High Performance** core. +1. Handles **>5K concurrent connections** on a single commodity server. +1. Compatible with [net.Conn](https://golang.org/pkg/net/#Conn) and [net.Listener](https://golang.org/pkg/net/#Listener), a drop-in replacement for [net.TCPConn](https://golang.org/pkg/net/#TCPConn). +1. [FEC(Forward Error Correction)](https://en.wikipedia.org/wiki/Forward_error_correction) Support with [Reed-Solomon Codes](https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction) +1. Packet level encryption support with [AES](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard), [TEA](https://en.wikipedia.org/wiki/Tiny_Encryption_Algorithm), [3DES](https://en.wikipedia.org/wiki/Triple_DES), [Blowfish](https://en.wikipedia.org/wiki/Blowfish_(cipher)), [Cast5](https://en.wikipedia.org/wiki/CAST-128), [Salsa20]( https://en.wikipedia.org/wiki/Salsa20), etc. in [CFB](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_Feedback_.28CFB.29) mode, which generates completely anonymous packet. +1. Only **A fixed number of goroutines** will be created for the entire server application, costs in **context switch** between goroutines have been taken into consideration. +1. Compatible with [skywind3000's](https://github.com/skywind3000) C version with various improvements. +1. Platform-dependent optimizations: [sendmmsg](http://man7.org/linux/man-pages/man2/sendmmsg.2.html) and [recvmmsg](http://man7.org/linux/man-pages/man2/recvmmsg.2.html) were expoloited for linux. + +## Documentation + +For complete documentation, see the associated [Godoc](https://godoc.org/github.com/xtaci/kcp-go). + +## Specification + +Frame Format + +``` +NONCE: + 16bytes cryptographically secure random number, nonce changes for every packet. + +CRC32: + CRC-32 checksum of data using the IEEE polynomial + +FEC TYPE: + typeData = 0xF1 + typeParity = 0xF2 + +FEC SEQID: + monotonically increasing in range: [0, (0xffffffff/shardSize) * shardSize - 1] + +SIZE: + The size of KCP frame plus 2 +``` + +``` ++-----------------+ +| SESSION | ++-----------------+ +| KCP(ARQ) | ++-----------------+ +| FEC(OPTIONAL) | ++-----------------+ +| CRYPTO(OPTIONAL)| ++-----------------+ +| UDP(PACKET) | ++-----------------+ +| IP | ++-----------------+ +| LINK | ++-----------------+ +| PHY | ++-----------------+ +(LAYER MODEL OF KCP-GO) +``` + + +## Examples + +1. [simple examples](https://github.com/xtaci/kcp-go/tree/master/examples) +2. [kcptun client](https://github.com/xtaci/kcptun/blob/master/client/main.go) +3. [kcptun server](https://github.com/xtaci/kcptun/blob/master/server/main.go) + +## Benchmark +``` + Model Name: MacBook Pro + Model Identifier: MacBookPro14,1 + Processor Name: Intel Core i5 + Processor Speed: 3.1 GHz + Number of Processors: 1 + Total Number of Cores: 2 + L2 Cache (per Core): 256 KB + L3 Cache: 4 MB + Memory: 8 GB +``` +``` +$ go test -v -run=^$ -bench . +beginning tests, encryption:salsa20, fec:10/3 +goos: darwin +goarch: amd64 +pkg: github.com/xtaci/kcp-go +BenchmarkSM4-4 50000 32180 ns/op 93.23 MB/s 0 B/op 0 allocs/op +BenchmarkAES128-4 500000 3285 ns/op 913.21 MB/s 0 B/op 0 allocs/op +BenchmarkAES192-4 300000 3623 ns/op 827.85 MB/s 0 B/op 0 allocs/op +BenchmarkAES256-4 300000 3874 ns/op 774.20 MB/s 0 B/op 0 allocs/op +BenchmarkTEA-4 100000 15384 ns/op 195.00 MB/s 0 B/op 0 allocs/op +BenchmarkXOR-4 20000000 89.9 ns/op 33372.00 MB/s 0 B/op 0 allocs/op +BenchmarkBlowfish-4 50000 26927 ns/op 111.41 MB/s 0 B/op 0 allocs/op +BenchmarkNone-4 30000000 45.7 ns/op 65597.94 MB/s 0 B/op 0 allocs/op +BenchmarkCast5-4 50000 34258 ns/op 87.57 MB/s 0 B/op 0 allocs/op +Benchmark3DES-4 10000 117149 ns/op 25.61 MB/s 0 B/op 0 allocs/op +BenchmarkTwofish-4 50000 33538 ns/op 89.45 MB/s 0 B/op 0 allocs/op +BenchmarkXTEA-4 30000 45666 ns/op 65.69 MB/s 0 B/op 0 allocs/op +BenchmarkSalsa20-4 500000 3308 ns/op 906.76 MB/s 0 B/op 0 allocs/op +BenchmarkCRC32-4 20000000 65.2 ns/op 15712.43 MB/s +BenchmarkCsprngSystem-4 1000000 1150 ns/op 13.91 MB/s +BenchmarkCsprngMD5-4 10000000 145 ns/op 110.26 MB/s +BenchmarkCsprngSHA1-4 10000000 158 ns/op 126.54 MB/s +BenchmarkCsprngNonceMD5-4 10000000 153 ns/op 104.22 MB/s +BenchmarkCsprngNonceAES128-4 100000000 19.1 ns/op 837.81 MB/s +BenchmarkFECDecode-4 1000000 1119 ns/op 1339.61 MB/s 1606 B/op 2 allocs/op +BenchmarkFECEncode-4 2000000 832 ns/op 1801.83 MB/s 17 B/op 0 allocs/op +BenchmarkFlush-4 5000000 272 ns/op 0 B/op 0 allocs/op +BenchmarkEchoSpeed4K-4 5000 259617 ns/op 15.78 MB/s 5451 B/op 149 allocs/op +BenchmarkEchoSpeed64K-4 1000 1706084 ns/op 38.41 MB/s 56002 B/op 1604 allocs/op +BenchmarkEchoSpeed512K-4 100 14345505 ns/op 36.55 MB/s 482597 B/op 13045 allocs/op +BenchmarkEchoSpeed1M-4 30 34859104 ns/op 30.08 MB/s 1143773 B/op 27186 allocs/op +BenchmarkSinkSpeed4K-4 50000 31369 ns/op 130.57 MB/s 1566 B/op 30 allocs/op +BenchmarkSinkSpeed64K-4 5000 329065 ns/op 199.16 MB/s 21529 B/op 453 allocs/op +BenchmarkSinkSpeed256K-4 500 2373354 ns/op 220.91 MB/s 166332 B/op 3554 allocs/op +BenchmarkSinkSpeed1M-4 300 5117927 ns/op 204.88 MB/s 310378 B/op 6988 allocs/op +PASS +ok github.com/xtaci/kcp-go 50.349s +``` + + +## Typical Flame Graph +![Flame Graph in kcptun](flame.png) + +## Key Design Considerations + +1. slice vs. container/list + +`kcp.flush()` loops through the send queue for retransmission checking for every 20ms(interval). + +I've wrote a benchmark for comparing sequential loop through *slice* and *container/list* here: + +https://github.com/xtaci/notes/blob/master/golang/benchmark2/cachemiss_test.go + +``` +BenchmarkLoopSlice-4 2000000000 0.39 ns/op +BenchmarkLoopList-4 100000000 54.6 ns/op +``` + +List structure introduces **heavy cache misses** compared to slice which owns better **locality**, 5000 connections with 32 window size and 20ms interval will cost 6us/0.03%(cpu) using slice, and 8.7ms/43.5%(cpu) for list for each `kcp.flush()`. + +2. Timing accuracy vs. syscall clock_gettime + +Timing is **critical** to **RTT estimator**, inaccurate timing leads to false retransmissions in KCP, but calling `time.Now()` costs 42 cycles(10.5ns on 4GHz CPU, 15.6ns on my MacBook Pro 2.7GHz). + +The benchmark for time.Now() lies here: + +https://github.com/xtaci/notes/blob/master/golang/benchmark2/syscall_test.go + +``` +BenchmarkNow-4 100000000 15.6 ns/op +``` + +In kcp-go, after each `kcp.output()` function call, current clock time will be updated upon return, and for a single `kcp.flush()` operation, current time will be queried from system once. For most of the time, 5000 connections costs 5000 * 15.6ns = 78us(a fixed cost while no packet needs to be sent), as for 10MB/s data transfering with 1400 MTU, `kcp.output()` will be called around 7500 times and costs 117us for `time.Now()` in **every second**. + +3. Memory management + +Primary memory allocation are done from a global buffer pool xmit.Buf, in kcp-go, when we need to allocate some bytes, we can get from that pool, and a fixed-capacity 1500 bytes(mtuLimit) will be returned, the rx queue, tx queue and fec queue all receive bytes from there, and they will return the bytes to the pool after using to prevent unnecessary zer0ing of bytes. The pool mechanism maintained a high watermark for slice objects, these in-flight objects from the pool will survive from the perodical garbage collection, meanwhile the pool kept the ability to return the memory to runtime if in idle. + +4. Information security + +kcp-go is shipped with builtin packet encryption powered by various block encryption algorithms and works in [Cipher Feedback Mode](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_Feedback_(CFB)), for each packet to be sent, the encryption process will start from encrypting a [nonce](https://en.wikipedia.org/wiki/Cryptographic_nonce) from the [system entropy](https://en.wikipedia.org/wiki//dev/random), so encryption to same plaintexts never leads to a same ciphertexts thereafter. + +The contents of the packets are completely anonymous with encryption, including the headers(FEC,KCP), checksums and contents. Note that, no matter which encryption method you choose on you upper layer, if you disable encryption, the transmit will be insecure somehow, since the header is ***PLAINTEXT*** to everyone it would be susceptible to header tampering, such as jamming the *sliding window size*, *round-trip time*, *FEC property* and *checksums*. ```AES-128``` is suggested for minimal encryption since modern CPUs are shipped with [AES-NI](https://en.wikipedia.org/wiki/AES_instruction_set) instructions and performs even better than `salsa20`(check the table above). + +Other possible attacks to kcp-go includes: a) [traffic analysis](https://en.wikipedia.org/wiki/Traffic_analysis), dataflow on specific websites may have pattern while interchanging data, but this type of eavesdropping has been mitigated by adapting [smux](https://github.com/xtaci/smux) to mix data streams so as to introduce noises, perfect solution to this has not appeared yet, theroretically by shuffling/mixing messages on larger scale network may mitigate this problem. b) [replay attack](https://en.wikipedia.org/wiki/Replay_attack), since the asymmetrical encryption has not been introduced into kcp-go for some reason, capturing the packets and replay them on a different machine is possible, (notice: hijacking the session and decrypting the contents is still *impossible*), so upper layers should contain a asymmetrical encryption system to guarantee the authenticity of each message(to process message exactly once), such as HTTPS/OpenSSL/LibreSSL, only by signing the requests with private keys can eliminate this type of attack. + +## Connection Termination + +Control messages like **SYN/FIN/RST** in TCP **are not defined** in KCP, you need some **keepalive/heartbeat mechanism** in the application-level. A real world example is to use some **multiplexing** protocol over session, such as [smux](https://github.com/xtaci/smux)(with embedded keepalive mechanism), see [kcptun](https://github.com/xtaci/kcptun) for example. + +## FAQ + +Q: I'm handling >5K connections on my server, the CPU utilization is so high. + +A: A standalone `agent` or `gate` server for running kcp-go is suggested, not only for CPU utilization, but also important to the **precision** of RTT measurements(timing) which indirectly affects retransmission. By increasing update `interval` with `SetNoDelay` like `conn.SetNoDelay(1, 40, 1, 1)` will dramatically reduce system load, but lower the performance. + +Q: When should I enable FEC? + +A: Forward error correction is critical to long-distance transmission, because a packet loss will lead to a huge penalty in time. And for the complicated packet routing network in modern world, round-trip time based loss check will not always be efficient, the big deviation of RTT samples in the long way usually leads to a larger RTO value in typical rtt estimator, which in other words, slows down the transmission. + +Q: Should I enable encryption? + +A: Yes, for the safety of protocol, even if the upper layer has encrypted. + +## Who is using this? + +1. https://github.com/xtaci/kcptun -- A Secure Tunnel Based On KCP over UDP. +2. https://github.com/getlantern/lantern -- Lantern delivers fast access to the open Internet. +3. https://github.com/smallnest/rpcx -- A RPC service framework based on net/rpc like alibaba Dubbo and weibo Motan. +4. https://github.com/gonet2/agent -- A gateway for games with stream multiplexing. +5. https://github.com/syncthing/syncthing -- Open Source Continuous File Synchronization. + +## Links + +1. https://github.com/xtaci/smux/ -- A Stream Multiplexing Library for golang with least memory +1. https://github.com/xtaci/libkcp -- FEC enhanced KCP session library for iOS/Android in C++ +1. https://github.com/skywind3000/kcp -- A Fast and Reliable ARQ Protocol +1. https://github.com/klauspost/reedsolomon -- Reed-Solomon Erasure Coding in Go + +## Consulting + +WeChat(付费技术咨询) + +kcptun diff --git a/vendor/github.com/xtaci/kcp-go/batchconn.go b/vendor/github.com/xtaci/kcp-go/batchconn.go new file mode 100644 index 0000000..6c30701 --- /dev/null +++ b/vendor/github.com/xtaci/kcp-go/batchconn.go @@ -0,0 +1,12 @@ +package kcp + +import "golang.org/x/net/ipv4" + +const ( + batchSize = 16 +) + +type batchConn interface { + WriteBatch(ms []ipv4.Message, flags int) (int, error) + ReadBatch(ms []ipv4.Message, flags int) (int, error) +} diff --git a/vendor/github.com/xtaci/kcp-go/crypt.go b/vendor/github.com/xtaci/kcp-go/crypt.go new file mode 100644 index 0000000..958fdea --- /dev/null +++ b/vendor/github.com/xtaci/kcp-go/crypt.go @@ -0,0 +1,785 @@ +package kcp + +import ( + "crypto/aes" + "crypto/cipher" + "crypto/des" + "crypto/sha1" + + "github.com/templexxx/xor" + "github.com/tjfoc/gmsm/sm4" + + "golang.org/x/crypto/blowfish" + "golang.org/x/crypto/cast5" + "golang.org/x/crypto/pbkdf2" + "golang.org/x/crypto/salsa20" + "golang.org/x/crypto/tea" + "golang.org/x/crypto/twofish" + "golang.org/x/crypto/xtea" +) + +var ( + initialVector = []byte{167, 115, 79, 156, 18, 172, 27, 1, 164, 21, 242, 193, 252, 120, 230, 107} + saltxor = `sH3CIVoF#rWLtJo6` +) + +// BlockCrypt defines encryption/decryption methods for a given byte slice. +// Notes on implementing: the data to be encrypted contains a builtin +// nonce at the first 16 bytes +type BlockCrypt interface { + // Encrypt encrypts the whole block in src into dst. + // Dst and src may point at the same memory. + Encrypt(dst, src []byte) + + // Decrypt decrypts the whole block in src into dst. + // Dst and src may point at the same memory. + Decrypt(dst, src []byte) +} + +type salsa20BlockCrypt struct { + key [32]byte +} + +// NewSalsa20BlockCrypt https://en.wikipedia.org/wiki/Salsa20 +func NewSalsa20BlockCrypt(key []byte) (BlockCrypt, error) { + c := new(salsa20BlockCrypt) + copy(c.key[:], key) + return c, nil +} + +func (c *salsa20BlockCrypt) Encrypt(dst, src []byte) { + salsa20.XORKeyStream(dst[8:], src[8:], src[:8], &c.key) + copy(dst[:8], src[:8]) +} +func (c *salsa20BlockCrypt) Decrypt(dst, src []byte) { + salsa20.XORKeyStream(dst[8:], src[8:], src[:8], &c.key) + copy(dst[:8], src[:8]) +} + +type sm4BlockCrypt struct { + encbuf [sm4.BlockSize]byte + decbuf [2 * sm4.BlockSize]byte + block cipher.Block +} + +// NewSM4BlockCrypt https://github.com/tjfoc/gmsm/tree/master/sm4 +func NewSM4BlockCrypt(key []byte) (BlockCrypt, error) { + c := new(sm4BlockCrypt) + block, err := sm4.NewCipher(key) + if err != nil { + return nil, err + } + c.block = block + return c, nil +} + +func (c *sm4BlockCrypt) Encrypt(dst, src []byte) { encrypt(c.block, dst, src, c.encbuf[:]) } +func (c *sm4BlockCrypt) Decrypt(dst, src []byte) { decrypt(c.block, dst, src, c.decbuf[:]) } + +type twofishBlockCrypt struct { + encbuf [twofish.BlockSize]byte + decbuf [2 * twofish.BlockSize]byte + block cipher.Block +} + +// NewTwofishBlockCrypt https://en.wikipedia.org/wiki/Twofish +func NewTwofishBlockCrypt(key []byte) (BlockCrypt, error) { + c := new(twofishBlockCrypt) + block, err := twofish.NewCipher(key) + if err != nil { + return nil, err + } + c.block = block + return c, nil +} + +func (c *twofishBlockCrypt) Encrypt(dst, src []byte) { encrypt(c.block, dst, src, c.encbuf[:]) } +func (c *twofishBlockCrypt) Decrypt(dst, src []byte) { decrypt(c.block, dst, src, c.decbuf[:]) } + +type tripleDESBlockCrypt struct { + encbuf [des.BlockSize]byte + decbuf [2 * des.BlockSize]byte + block cipher.Block +} + +// NewTripleDESBlockCrypt https://en.wikipedia.org/wiki/Triple_DES +func NewTripleDESBlockCrypt(key []byte) (BlockCrypt, error) { + c := new(tripleDESBlockCrypt) + block, err := des.NewTripleDESCipher(key) + if err != nil { + return nil, err + } + c.block = block + return c, nil +} + +func (c *tripleDESBlockCrypt) Encrypt(dst, src []byte) { encrypt(c.block, dst, src, c.encbuf[:]) } +func (c *tripleDESBlockCrypt) Decrypt(dst, src []byte) { decrypt(c.block, dst, src, c.decbuf[:]) } + +type cast5BlockCrypt struct { + encbuf [cast5.BlockSize]byte + decbuf [2 * cast5.BlockSize]byte + block cipher.Block +} + +// NewCast5BlockCrypt https://en.wikipedia.org/wiki/CAST-128 +func NewCast5BlockCrypt(key []byte) (BlockCrypt, error) { + c := new(cast5BlockCrypt) + block, err := cast5.NewCipher(key) + if err != nil { + return nil, err + } + c.block = block + return c, nil +} + +func (c *cast5BlockCrypt) Encrypt(dst, src []byte) { encrypt(c.block, dst, src, c.encbuf[:]) } +func (c *cast5BlockCrypt) Decrypt(dst, src []byte) { decrypt(c.block, dst, src, c.decbuf[:]) } + +type blowfishBlockCrypt struct { + encbuf [blowfish.BlockSize]byte + decbuf [2 * blowfish.BlockSize]byte + block cipher.Block +} + +// NewBlowfishBlockCrypt https://en.wikipedia.org/wiki/Blowfish_(cipher) +func NewBlowfishBlockCrypt(key []byte) (BlockCrypt, error) { + c := new(blowfishBlockCrypt) + block, err := blowfish.NewCipher(key) + if err != nil { + return nil, err + } + c.block = block + return c, nil +} + +func (c *blowfishBlockCrypt) Encrypt(dst, src []byte) { encrypt(c.block, dst, src, c.encbuf[:]) } +func (c *blowfishBlockCrypt) Decrypt(dst, src []byte) { decrypt(c.block, dst, src, c.decbuf[:]) } + +type aesBlockCrypt struct { + encbuf [aes.BlockSize]byte + decbuf [2 * aes.BlockSize]byte + block cipher.Block +} + +// NewAESBlockCrypt https://en.wikipedia.org/wiki/Advanced_Encryption_Standard +func NewAESBlockCrypt(key []byte) (BlockCrypt, error) { + c := new(aesBlockCrypt) + block, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + c.block = block + return c, nil +} + +func (c *aesBlockCrypt) Encrypt(dst, src []byte) { encrypt(c.block, dst, src, c.encbuf[:]) } +func (c *aesBlockCrypt) Decrypt(dst, src []byte) { decrypt(c.block, dst, src, c.decbuf[:]) } + +type teaBlockCrypt struct { + encbuf [tea.BlockSize]byte + decbuf [2 * tea.BlockSize]byte + block cipher.Block +} + +// NewTEABlockCrypt https://en.wikipedia.org/wiki/Tiny_Encryption_Algorithm +func NewTEABlockCrypt(key []byte) (BlockCrypt, error) { + c := new(teaBlockCrypt) + block, err := tea.NewCipherWithRounds(key, 16) + if err != nil { + return nil, err + } + c.block = block + return c, nil +} + +func (c *teaBlockCrypt) Encrypt(dst, src []byte) { encrypt(c.block, dst, src, c.encbuf[:]) } +func (c *teaBlockCrypt) Decrypt(dst, src []byte) { decrypt(c.block, dst, src, c.decbuf[:]) } + +type xteaBlockCrypt struct { + encbuf [xtea.BlockSize]byte + decbuf [2 * xtea.BlockSize]byte + block cipher.Block +} + +// NewXTEABlockCrypt https://en.wikipedia.org/wiki/XTEA +func NewXTEABlockCrypt(key []byte) (BlockCrypt, error) { + c := new(xteaBlockCrypt) + block, err := xtea.NewCipher(key) + if err != nil { + return nil, err + } + c.block = block + return c, nil +} + +func (c *xteaBlockCrypt) Encrypt(dst, src []byte) { encrypt(c.block, dst, src, c.encbuf[:]) } +func (c *xteaBlockCrypt) Decrypt(dst, src []byte) { decrypt(c.block, dst, src, c.decbuf[:]) } + +type simpleXORBlockCrypt struct { + xortbl []byte +} + +// NewSimpleXORBlockCrypt simple xor with key expanding +func NewSimpleXORBlockCrypt(key []byte) (BlockCrypt, error) { + c := new(simpleXORBlockCrypt) + c.xortbl = pbkdf2.Key(key, []byte(saltxor), 32, mtuLimit, sha1.New) + return c, nil +} + +func (c *simpleXORBlockCrypt) Encrypt(dst, src []byte) { xor.Bytes(dst, src, c.xortbl) } +func (c *simpleXORBlockCrypt) Decrypt(dst, src []byte) { xor.Bytes(dst, src, c.xortbl) } + +type noneBlockCrypt struct{} + +// NewNoneBlockCrypt does nothing but copying +func NewNoneBlockCrypt(key []byte) (BlockCrypt, error) { + return new(noneBlockCrypt), nil +} + +func (c *noneBlockCrypt) Encrypt(dst, src []byte) { copy(dst, src) } +func (c *noneBlockCrypt) Decrypt(dst, src []byte) { copy(dst, src) } + +// packet encryption with local CFB mode +func encrypt(block cipher.Block, dst, src, buf []byte) { + switch block.BlockSize() { + case 8: + encrypt8(block, dst, src, buf) + case 16: + encrypt16(block, dst, src, buf) + default: + encryptVariant(block, dst, src, buf) + } +} + +// optimized encryption for the ciphers which works in 8-bytes +func encrypt8(block cipher.Block, dst, src, buf []byte) { + tbl := buf[:8] + block.Encrypt(tbl, initialVector) + n := len(src) / 8 + base := 0 + repeat := n / 8 + left := n % 8 + for i := 0; i < repeat; i++ { + s := src[base:][0:64] + d := dst[base:][0:64] + // 1 + xor.BytesSrc1(d[0:8], s[0:8], tbl) + block.Encrypt(tbl, d[0:8]) + // 2 + xor.BytesSrc1(d[8:16], s[8:16], tbl) + block.Encrypt(tbl, d[8:16]) + // 3 + xor.BytesSrc1(d[16:24], s[16:24], tbl) + block.Encrypt(tbl, d[16:24]) + // 4 + xor.BytesSrc1(d[24:32], s[24:32], tbl) + block.Encrypt(tbl, d[24:32]) + // 5 + xor.BytesSrc1(d[32:40], s[32:40], tbl) + block.Encrypt(tbl, d[32:40]) + // 6 + xor.BytesSrc1(d[40:48], s[40:48], tbl) + block.Encrypt(tbl, d[40:48]) + // 7 + xor.BytesSrc1(d[48:56], s[48:56], tbl) + block.Encrypt(tbl, d[48:56]) + // 8 + xor.BytesSrc1(d[56:64], s[56:64], tbl) + block.Encrypt(tbl, d[56:64]) + base += 64 + } + + switch left { + case 7: + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += 8 + fallthrough + case 6: + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += 8 + fallthrough + case 5: + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += 8 + fallthrough + case 4: + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += 8 + fallthrough + case 3: + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += 8 + fallthrough + case 2: + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += 8 + fallthrough + case 1: + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += 8 + fallthrough + case 0: + xor.BytesSrc0(dst[base:], src[base:], tbl) + } +} + +// optimized encryption for the ciphers which works in 16-bytes +func encrypt16(block cipher.Block, dst, src, buf []byte) { + tbl := buf[:16] + block.Encrypt(tbl, initialVector) + n := len(src) / 16 + base := 0 + repeat := n / 8 + left := n % 8 + for i := 0; i < repeat; i++ { + s := src[base:][0:128] + d := dst[base:][0:128] + // 1 + xor.BytesSrc1(d[0:16], s[0:16], tbl) + block.Encrypt(tbl, d[0:16]) + // 2 + xor.BytesSrc1(d[16:32], s[16:32], tbl) + block.Encrypt(tbl, d[16:32]) + // 3 + xor.BytesSrc1(d[32:48], s[32:48], tbl) + block.Encrypt(tbl, d[32:48]) + // 4 + xor.BytesSrc1(d[48:64], s[48:64], tbl) + block.Encrypt(tbl, d[48:64]) + // 5 + xor.BytesSrc1(d[64:80], s[64:80], tbl) + block.Encrypt(tbl, d[64:80]) + // 6 + xor.BytesSrc1(d[80:96], s[80:96], tbl) + block.Encrypt(tbl, d[80:96]) + // 7 + xor.BytesSrc1(d[96:112], s[96:112], tbl) + block.Encrypt(tbl, d[96:112]) + // 8 + xor.BytesSrc1(d[112:128], s[112:128], tbl) + block.Encrypt(tbl, d[112:128]) + base += 128 + } + + switch left { + case 7: + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += 16 + fallthrough + case 6: + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += 16 + fallthrough + case 5: + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += 16 + fallthrough + case 4: + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += 16 + fallthrough + case 3: + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += 16 + fallthrough + case 2: + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += 16 + fallthrough + case 1: + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += 16 + fallthrough + case 0: + xor.BytesSrc0(dst[base:], src[base:], tbl) + } +} + +func encryptVariant(block cipher.Block, dst, src, buf []byte) { + blocksize := block.BlockSize() + tbl := buf[:blocksize] + block.Encrypt(tbl, initialVector) + n := len(src) / blocksize + base := 0 + repeat := n / 8 + left := n % 8 + for i := 0; i < repeat; i++ { + // 1 + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += blocksize + + // 2 + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += blocksize + + // 3 + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += blocksize + + // 4 + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += blocksize + + // 5 + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += blocksize + + // 6 + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += blocksize + + // 7 + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += blocksize + + // 8 + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += blocksize + } + + switch left { + case 7: + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += blocksize + fallthrough + case 6: + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += blocksize + fallthrough + case 5: + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += blocksize + fallthrough + case 4: + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += blocksize + fallthrough + case 3: + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += blocksize + fallthrough + case 2: + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += blocksize + fallthrough + case 1: + xor.BytesSrc1(dst[base:], src[base:], tbl) + block.Encrypt(tbl, dst[base:]) + base += blocksize + fallthrough + case 0: + xor.BytesSrc0(dst[base:], src[base:], tbl) + } +} + +// decryption +func decrypt(block cipher.Block, dst, src, buf []byte) { + switch block.BlockSize() { + case 8: + decrypt8(block, dst, src, buf) + case 16: + decrypt16(block, dst, src, buf) + default: + decryptVariant(block, dst, src, buf) + } +} + +func decrypt8(block cipher.Block, dst, src, buf []byte) { + tbl := buf[0:8] + next := buf[8:16] + block.Encrypt(tbl, initialVector) + n := len(src) / 8 + base := 0 + repeat := n / 8 + left := n % 8 + for i := 0; i < repeat; i++ { + s := src[base:][0:64] + d := dst[base:][0:64] + // 1 + block.Encrypt(next, s[0:8]) + xor.BytesSrc1(d[0:8], s[0:8], tbl) + // 2 + block.Encrypt(tbl, s[8:16]) + xor.BytesSrc1(d[8:16], s[8:16], next) + // 3 + block.Encrypt(next, s[16:24]) + xor.BytesSrc1(d[16:24], s[16:24], tbl) + // 4 + block.Encrypt(tbl, s[24:32]) + xor.BytesSrc1(d[24:32], s[24:32], next) + // 5 + block.Encrypt(next, s[32:40]) + xor.BytesSrc1(d[32:40], s[32:40], tbl) + // 6 + block.Encrypt(tbl, s[40:48]) + xor.BytesSrc1(d[40:48], s[40:48], next) + // 7 + block.Encrypt(next, s[48:56]) + xor.BytesSrc1(d[48:56], s[48:56], tbl) + // 8 + block.Encrypt(tbl, s[56:64]) + xor.BytesSrc1(d[56:64], s[56:64], next) + base += 64 + } + + switch left { + case 7: + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + tbl, next = next, tbl + base += 8 + fallthrough + case 6: + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + tbl, next = next, tbl + base += 8 + fallthrough + case 5: + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + tbl, next = next, tbl + base += 8 + fallthrough + case 4: + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + tbl, next = next, tbl + base += 8 + fallthrough + case 3: + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + tbl, next = next, tbl + base += 8 + fallthrough + case 2: + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + tbl, next = next, tbl + base += 8 + fallthrough + case 1: + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + tbl, next = next, tbl + base += 8 + fallthrough + case 0: + xor.BytesSrc0(dst[base:], src[base:], tbl) + } +} + +func decrypt16(block cipher.Block, dst, src, buf []byte) { + tbl := buf[0:16] + next := buf[16:32] + block.Encrypt(tbl, initialVector) + n := len(src) / 16 + base := 0 + repeat := n / 8 + left := n % 8 + for i := 0; i < repeat; i++ { + s := src[base:][0:128] + d := dst[base:][0:128] + // 1 + block.Encrypt(next, s[0:16]) + xor.BytesSrc1(d[0:16], s[0:16], tbl) + // 2 + block.Encrypt(tbl, s[16:32]) + xor.BytesSrc1(d[16:32], s[16:32], next) + // 3 + block.Encrypt(next, s[32:48]) + xor.BytesSrc1(d[32:48], s[32:48], tbl) + // 4 + block.Encrypt(tbl, s[48:64]) + xor.BytesSrc1(d[48:64], s[48:64], next) + // 5 + block.Encrypt(next, s[64:80]) + xor.BytesSrc1(d[64:80], s[64:80], tbl) + // 6 + block.Encrypt(tbl, s[80:96]) + xor.BytesSrc1(d[80:96], s[80:96], next) + // 7 + block.Encrypt(next, s[96:112]) + xor.BytesSrc1(d[96:112], s[96:112], tbl) + // 8 + block.Encrypt(tbl, s[112:128]) + xor.BytesSrc1(d[112:128], s[112:128], next) + base += 128 + } + + switch left { + case 7: + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + tbl, next = next, tbl + base += 16 + fallthrough + case 6: + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + tbl, next = next, tbl + base += 16 + fallthrough + case 5: + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + tbl, next = next, tbl + base += 16 + fallthrough + case 4: + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + tbl, next = next, tbl + base += 16 + fallthrough + case 3: + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + tbl, next = next, tbl + base += 16 + fallthrough + case 2: + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + tbl, next = next, tbl + base += 16 + fallthrough + case 1: + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + tbl, next = next, tbl + base += 16 + fallthrough + case 0: + xor.BytesSrc0(dst[base:], src[base:], tbl) + } +} + +func decryptVariant(block cipher.Block, dst, src, buf []byte) { + blocksize := block.BlockSize() + tbl := buf[:blocksize] + next := buf[blocksize:] + block.Encrypt(tbl, initialVector) + n := len(src) / blocksize + base := 0 + repeat := n / 8 + left := n % 8 + for i := 0; i < repeat; i++ { + // 1 + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + base += blocksize + + // 2 + block.Encrypt(tbl, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], next) + base += blocksize + + // 3 + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + base += blocksize + + // 4 + block.Encrypt(tbl, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], next) + base += blocksize + + // 5 + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + base += blocksize + + // 6 + block.Encrypt(tbl, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], next) + base += blocksize + + // 7 + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + base += blocksize + + // 8 + block.Encrypt(tbl, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], next) + base += blocksize + } + + switch left { + case 7: + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + tbl, next = next, tbl + base += blocksize + fallthrough + case 6: + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + tbl, next = next, tbl + base += blocksize + fallthrough + case 5: + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + tbl, next = next, tbl + base += blocksize + fallthrough + case 4: + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + tbl, next = next, tbl + base += blocksize + fallthrough + case 3: + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + tbl, next = next, tbl + base += blocksize + fallthrough + case 2: + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + tbl, next = next, tbl + base += blocksize + fallthrough + case 1: + block.Encrypt(next, src[base:]) + xor.BytesSrc1(dst[base:], src[base:], tbl) + tbl, next = next, tbl + base += blocksize + fallthrough + case 0: + xor.BytesSrc0(dst[base:], src[base:], tbl) + } +} diff --git a/vendor/github.com/xtaci/kcp-go/donate.png b/vendor/github.com/xtaci/kcp-go/donate.png new file mode 100644 index 0000000000000000000000000000000000000000..0f353d96e902936aed15a7312a6e8b4b332fe960 GIT binary patch literal 4420 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 literal 0 HcmV?d00001 diff --git a/vendor/github.com/xtaci/kcp-go/entropy.go b/vendor/github.com/xtaci/kcp-go/entropy.go new file mode 100644 index 0000000..156c1cd --- /dev/null +++ b/vendor/github.com/xtaci/kcp-go/entropy.go @@ -0,0 +1,52 @@ +package kcp + +import ( + "crypto/aes" + "crypto/cipher" + "crypto/md5" + "crypto/rand" + "io" +) + +// Entropy defines a entropy source +type Entropy interface { + Init() + Fill(nonce []byte) +} + +// nonceMD5 nonce generator for packet header +type nonceMD5 struct { + seed [md5.Size]byte +} + +func (n *nonceMD5) Init() { /*nothing required*/ } + +func (n *nonceMD5) Fill(nonce []byte) { + if n.seed[0] == 0 { // entropy update + io.ReadFull(rand.Reader, n.seed[:]) + } + n.seed = md5.Sum(n.seed[:]) + copy(nonce, n.seed[:]) +} + +// nonceAES128 nonce generator for packet headers +type nonceAES128 struct { + seed [aes.BlockSize]byte + block cipher.Block +} + +func (n *nonceAES128) Init() { + var key [16]byte //aes-128 + io.ReadFull(rand.Reader, key[:]) + io.ReadFull(rand.Reader, n.seed[:]) + block, _ := aes.NewCipher(key[:]) + n.block = block +} + +func (n *nonceAES128) Fill(nonce []byte) { + if n.seed[0] == 0 { // entropy update + io.ReadFull(rand.Reader, n.seed[:]) + } + n.block.Encrypt(n.seed[:], n.seed[:]) + copy(nonce, n.seed[:]) +} diff --git a/vendor/github.com/xtaci/kcp-go/fec.go b/vendor/github.com/xtaci/kcp-go/fec.go new file mode 100644 index 0000000..97cd40b --- /dev/null +++ b/vendor/github.com/xtaci/kcp-go/fec.go @@ -0,0 +1,337 @@ +package kcp + +import ( + "encoding/binary" + "sync/atomic" + + "github.com/klauspost/reedsolomon" +) + +const ( + fecHeaderSize = 6 + fecHeaderSizePlus2 = fecHeaderSize + 2 // plus 2B data size + typeData = 0xf1 + typeParity = 0xf2 + fecExpire = 60000 +) + +// fecPacket is a decoded FEC packet +type fecPacket []byte + +func (bts fecPacket) seqid() uint32 { return binary.LittleEndian.Uint32(bts) } +func (bts fecPacket) flag() uint16 { return binary.LittleEndian.Uint16(bts[4:]) } +func (bts fecPacket) data() []byte { return bts[6:] } + +// fecElement has auxcilliary time field +type fecElement struct { + fecPacket + ts uint32 +} + +// fecDecoder for decoding incoming packets +type fecDecoder struct { + rxlimit int // queue size limit + dataShards int + parityShards int + shardSize int + rx []fecElement // ordered receive queue + + // caches + decodeCache [][]byte + flagCache []bool + + // zeros + zeros []byte + + // RS decoder + codec reedsolomon.Encoder +} + +func newFECDecoder(rxlimit, dataShards, parityShards int) *fecDecoder { + if dataShards <= 0 || parityShards <= 0 { + return nil + } + if rxlimit < dataShards+parityShards { + return nil + } + + dec := new(fecDecoder) + dec.rxlimit = rxlimit + dec.dataShards = dataShards + dec.parityShards = parityShards + dec.shardSize = dataShards + parityShards + codec, err := reedsolomon.New(dataShards, parityShards) + if err != nil { + return nil + } + dec.codec = codec + dec.decodeCache = make([][]byte, dec.shardSize) + dec.flagCache = make([]bool, dec.shardSize) + dec.zeros = make([]byte, mtuLimit) + return dec +} + +// decode a fec packet +func (dec *fecDecoder) decode(in fecPacket) (recovered [][]byte) { + // insertion + n := len(dec.rx) - 1 + insertIdx := 0 + for i := n; i >= 0; i-- { + if in.seqid() == dec.rx[i].seqid() { // de-duplicate + return nil + } else if _itimediff(in.seqid(), dec.rx[i].seqid()) > 0 { // insertion + insertIdx = i + 1 + break + } + } + + // make a copy + pkt := fecPacket(xmitBuf.Get().([]byte)[:len(in)]) + copy(pkt, in) + elem := fecElement{pkt, currentMs()} + + // insert into ordered rx queue + if insertIdx == n+1 { + dec.rx = append(dec.rx, elem) + } else { + dec.rx = append(dec.rx, fecElement{}) + copy(dec.rx[insertIdx+1:], dec.rx[insertIdx:]) // shift right + dec.rx[insertIdx] = elem + } + + // shard range for current packet + shardBegin := pkt.seqid() - pkt.seqid()%uint32(dec.shardSize) + shardEnd := shardBegin + uint32(dec.shardSize) - 1 + + // max search range in ordered queue for current shard + searchBegin := insertIdx - int(pkt.seqid()%uint32(dec.shardSize)) + if searchBegin < 0 { + searchBegin = 0 + } + searchEnd := searchBegin + dec.shardSize - 1 + if searchEnd >= len(dec.rx) { + searchEnd = len(dec.rx) - 1 + } + + // re-construct datashards + if searchEnd-searchBegin+1 >= dec.dataShards { + var numshard, numDataShard, first, maxlen int + + // zero caches + shards := dec.decodeCache + shardsflag := dec.flagCache + for k := range dec.decodeCache { + shards[k] = nil + shardsflag[k] = false + } + + // shard assembly + for i := searchBegin; i <= searchEnd; i++ { + seqid := dec.rx[i].seqid() + if _itimediff(seqid, shardEnd) > 0 { + break + } else if _itimediff(seqid, shardBegin) >= 0 { + shards[seqid%uint32(dec.shardSize)] = dec.rx[i].data() + shardsflag[seqid%uint32(dec.shardSize)] = true + numshard++ + if dec.rx[i].flag() == typeData { + numDataShard++ + } + if numshard == 1 { + first = i + } + if len(dec.rx[i].data()) > maxlen { + maxlen = len(dec.rx[i].data()) + } + } + } + + if numDataShard == dec.dataShards { + // case 1: no loss on data shards + dec.rx = dec.freeRange(first, numshard, dec.rx) + } else if numshard >= dec.dataShards { + // case 2: loss on data shards, but it's recoverable from parity shards + for k := range shards { + if shards[k] != nil { + dlen := len(shards[k]) + shards[k] = shards[k][:maxlen] + copy(shards[k][dlen:], dec.zeros) + } else if k < dec.dataShards { + shards[k] = xmitBuf.Get().([]byte)[:0] + } + } + if err := dec.codec.ReconstructData(shards); err == nil { + for k := range shards[:dec.dataShards] { + if !shardsflag[k] { + // recovered data should be recycled + recovered = append(recovered, shards[k]) + } + } + } + dec.rx = dec.freeRange(first, numshard, dec.rx) + } + } + + // keep rxlimit + if len(dec.rx) > dec.rxlimit { + if dec.rx[0].flag() == typeData { // track the unrecoverable data + atomic.AddUint64(&DefaultSnmp.FECShortShards, 1) + } + dec.rx = dec.freeRange(0, 1, dec.rx) + } + + // timeout policy + current := currentMs() + numExpired := 0 + for k := range dec.rx { + if _itimediff(current, dec.rx[k].ts) > fecExpire { + numExpired++ + continue + } + break + } + if numExpired > 0 { + dec.rx = dec.freeRange(0, numExpired, dec.rx) + } + return +} + +// free a range of fecPacket +func (dec *fecDecoder) freeRange(first, n int, q []fecElement) []fecElement { + for i := first; i < first+n; i++ { // recycle buffer + xmitBuf.Put([]byte(q[i].fecPacket)) + } + + if first == 0 && n < cap(q)/2 { + return q[n:] + } + copy(q[first:], q[first+n:]) + return q[:len(q)-n] +} + +// release all segments back to xmitBuf +func (dec *fecDecoder) release() { + if n := len(dec.rx); n > 0 { + dec.rx = dec.freeRange(0, n, dec.rx) + } +} + +type ( + // fecEncoder for encoding outgoing packets + fecEncoder struct { + dataShards int + parityShards int + shardSize int + paws uint32 // Protect Against Wrapped Sequence numbers + next uint32 // next seqid + + shardCount int // count the number of datashards collected + maxSize int // track maximum data length in datashard + + headerOffset int // FEC header offset + payloadOffset int // FEC payload offset + + // caches + shardCache [][]byte + encodeCache [][]byte + + // zeros + zeros []byte + + // RS encoder + codec reedsolomon.Encoder + } +) + +func newFECEncoder(dataShards, parityShards, offset int) *fecEncoder { + if dataShards <= 0 || parityShards <= 0 { + return nil + } + enc := new(fecEncoder) + enc.dataShards = dataShards + enc.parityShards = parityShards + enc.shardSize = dataShards + parityShards + enc.paws = 0xffffffff / uint32(enc.shardSize) * uint32(enc.shardSize) + enc.headerOffset = offset + enc.payloadOffset = enc.headerOffset + fecHeaderSize + + codec, err := reedsolomon.New(dataShards, parityShards) + if err != nil { + return nil + } + enc.codec = codec + + // caches + enc.encodeCache = make([][]byte, enc.shardSize) + enc.shardCache = make([][]byte, enc.shardSize) + for k := range enc.shardCache { + enc.shardCache[k] = make([]byte, mtuLimit) + } + enc.zeros = make([]byte, mtuLimit) + return enc +} + +// encodes the packet, outputs parity shards if we have collected quorum datashards +// notice: the contents of 'ps' will be re-written in successive calling +func (enc *fecEncoder) encode(b []byte) (ps [][]byte) { + // The header format: + // | FEC SEQID(4B) | FEC TYPE(2B) | SIZE (2B) | PAYLOAD(SIZE-2) | + // |<-headerOffset |<-payloadOffset + enc.markData(b[enc.headerOffset:]) + binary.LittleEndian.PutUint16(b[enc.payloadOffset:], uint16(len(b[enc.payloadOffset:]))) + + // copy data from payloadOffset to fec shard cache + sz := len(b) + enc.shardCache[enc.shardCount] = enc.shardCache[enc.shardCount][:sz] + copy(enc.shardCache[enc.shardCount][enc.payloadOffset:], b[enc.payloadOffset:]) + enc.shardCount++ + + // track max datashard length + if sz > enc.maxSize { + enc.maxSize = sz + } + + // Generation of Reed-Solomon Erasure Code + if enc.shardCount == enc.dataShards { + // fill '0' into the tail of each datashard + for i := 0; i < enc.dataShards; i++ { + shard := enc.shardCache[i] + slen := len(shard) + copy(shard[slen:enc.maxSize], enc.zeros) + } + + // construct equal-sized slice with stripped header + cache := enc.encodeCache + for k := range cache { + cache[k] = enc.shardCache[k][enc.payloadOffset:enc.maxSize] + } + + // encoding + if err := enc.codec.Encode(cache); err == nil { + ps = enc.shardCache[enc.dataShards:] + for k := range ps { + enc.markParity(ps[k][enc.headerOffset:]) + ps[k] = ps[k][:enc.maxSize] + } + } + + // counters resetting + enc.shardCount = 0 + enc.maxSize = 0 + } + + return +} + +func (enc *fecEncoder) markData(data []byte) { + binary.LittleEndian.PutUint32(data, enc.next) + binary.LittleEndian.PutUint16(data[4:], typeData) + enc.next++ +} + +func (enc *fecEncoder) markParity(data []byte) { + binary.LittleEndian.PutUint32(data, enc.next) + binary.LittleEndian.PutUint16(data[4:], typeParity) + // sequence wrap will only happen at parity shard + enc.next = (enc.next + 1) % enc.paws +} diff --git a/vendor/github.com/xtaci/kcp-go/flame.png b/vendor/github.com/xtaci/kcp-go/flame.png new file mode 100644 index 0000000000000000000000000000000000000000..672f649ef9c72635be58e330cc901a8937db0fa8 GIT binary patch literal 57142 zcmYhi1yozl^9LFrNN`dpUIGMncL{E#xVuX!UYtUJ;>D$C&;l*))&wXBR)EJ(go*u<&A{(rAnp}FS9Yt#F<>+3&Q(bR0+AY+5czD>) z)VaC2`Sa(``T6lHB)1!2g)7_2JrSX%NbX*MJS+M#^ckyv`HN@frp0l2 z@agIdF)rrW#{6-q&vBvW>0s^e2BV`C{nOsE)2-!`(WVn`wbR+&le+km@A(u2AWHgN~bl1F--09(7;Tyh_w(OIJq~ij&qij1RcJkxKq$9+;FG!l_zCe>gf50zqh%|)50z-cK;2O+?gqb12wxWlj?AT)f$ML?QNg#t{v~qpG|ZgPqd!&S6*~}yZDxVoa4M-Y^BXaF&V7H`~r75 zM76^cmSo5quEpgd$GG=V-AkUi{F6eMI!C{++z&GeaXMl*S*8jPNqY(UlhyH)rQ!3D zALl`Wl^^ze-s^nmJaJb?kFEl`#qd7=6FC3<;NFVV|@T{e1XENvDd&$LqL@S(A)bkslNvOB#uJ=9tMpV<=*7Iimj3 z4O{iuuKq7_t{8lNeM<`fgy_=30e~)6A{YQ*krss%UZWyMhh#vb8l=n|Sbk^4=pJ)p$RSAeJw10138uJpSK5?Gm zw?_d0hz~g6jHc8xujB7pgSB>68|H4ylwF%UK&SvfUqAxFSx0X$OH;F$;{H(@uC!GsOAz1Ej+>itT}q?2Rn@4EVCMs!Gw#Q-G%$ z<1=O~Ss0l@t7Y4QQA8BNz=*kO0B^AsS1e=82}lzW5s@fe<*9y`F@sAZUAcw?E-?ma zxE2@&kXAwZMM)WH5ew3C2m|t2F%%96Nj3YgRos8A{1r6NxZ70U4zC|tnX?klJU$1R zWJkxgj49N{+Lo)54!jrsQgE8D_*_fs{!YJ^Bho;s2@Cc63mDx#DV-7!DV9hFhseu* z&m?$BcvG13?03K>&B9S$(7B2Omr_$)JO}05P`|}m*n$p*EG`BvkW)9xuXu$A4p|D1 zk%G8XT(7;Fu8`ME2r4UIQm82NP!2fxXZP!7Q_=b=x!@|gcRbF1p6_YP@UAxTQ_h_v8F1T3)s>e85C z}S*@ z%W*5{$5bY%->A3BlvVB+r=%jDYk^}uB_`B77Nx0X-CmBOaz%c9P|A{|R|&iwjv0I7 zKk{B63g0?0nq9Jd$VbbZH(jPz*|PER-Z3Q$35IpHp$YqCqs1U?$OKlBze)kP%`pq*T6femre8~#D4fJXjSYZ=i(Y`mg z;-G`2xs({syiSFX&0yf&ke9kBz9*$X$8N+3 z4rI27*&WbcJ{JhVmUhfZ75XL3!L^YJh9xsg4Uu`uccWG(LcuO zAFDL!RoS$*pN8m91YetjugfiQr=}!NXgvS2eCCOZ3lK=GZ1ucXpUlp46pDMDSMTaq zXDwnsCzB}85$6XG710a=(fw?f?n;HkA{;Wg*kXlk7|{&%Kk*i#*Vca4Z7xexEkSF2 z!_sP_#+JkIfxVO0MqOTSf3(j4lfBK(rL(NirYXL~@AT8aTXXR<_Y!TsqnPLb-W_jm zbv;#$n}NE;gJFNY6Y&#%+!Bd1mFmC>C1^8QEbxXDTX4CzN2dD3tN`M*1+xsnXNnkT ziZmyfU?}q{b{kf&9z(s=rVjhd%xI6GN4rHc1Fx&M)=MMzOT@*)LZEoWXnVy$ZNx{i}8f9wDb-5cz=}L z)HKulBTsAhdT3&7 zKWayX*u<<`Cw%`BeB~=|7^$CY0nVL0lc-L%VW%lvm*T5?Xd7Z`;S;h1><(E!uXKb0QoL+8ToILHDun0vJ+^@ArKPohDC1{8CUK;m(Z@-@?4=;^abJo7 zypX7Qb=wE8$3jFicaM9vMQHGGyL?D{O}2vw4^s&bHQn&(ns~hj)&>Zv1UO+oQ1YNy zTana+?NSxzCfRi8>|gXRX5RxCL50!f; z^o>`JsH&rq{`@#zI!c6d6zJ98)%1f@c9?Yh)eJddVV;;acoUp&;5tYdJXF-?DCY7M zCsbQ3lXJP5Xbp{*l)~-})Ch$YACJ@LUwQS8o6!i9qGBvr7!Jj6ik`<)28KR=P z&)KEHzFnTx<;S?PjDnkM4EJZQ5PI)SXBE8)pFWgsR{IALD^PyZfn zXj1KJwnp@;zXQGtR|AOz7@~wl!Sp`Xgp(NL&bA<{IQ*F3h$)0|@g`l!mYfgi`Ji6m z(?U`7p;*q`hJyk;Dk9N$&qfDbO9sB{qgCaucWtN*mNWSZ6d4K~A*^|#9=P>!gD z+F)O^t@Tbxg*rr=1!irWJ>HUx z*3{A)HLQ^7Y(XRKnvCHQsHLl-F*lH`NraufN~BLo13t^v`#;QnZqyGvYBxe1PDP9t z4S|g8%XaK}+ViY z@L$V*8d>YR5z^BC1XY@h;Hl!wKPiYyD~ox|=vQXuw5_bKcm1GcikO%2>scQ|B5=#K z!3Qy2&!1`Adl#y7{k#MnEdPw(fSwa2o4*k%eP=&vulhT=Gfo3%D<;}>)FhMzhNBVSE5;w* zyH%qVCN`476s!ktU~m^9VM&_Y5UD5J*?uXk7hvr*H^7UA8~xIK^)f|{2xm4pdb`O( z51tpT(+H%#deP!9BV4V})#1?}{ZWm|!=e%QZkv8+PMx8n#vGy!+#VN}a{frG;?R~P3oW9=*O^#IG8K;>Vu z9lw{ZM1o04_&X%O038YBD~#ZRqt)hLIbe}?dXJHv^?x0UdRKzOk(v=p6rpvr$WUfz!u^2hAmBS62Bysuu$wa#P^izC z`}!}>KF^(Omt}_IThx^Zdys|bm3aNc$d?~`exlz5e}%yG<}l=M4hXP{@o-uw6X`M# z35z%+J;(M$e{LCK&q55?z|i66LTH&&<(fHwBF4fLciFNcGChJ@HF^=s{I=40C}#m+ zDA2?AiAz;n8-6JR=O$$Dj`78hFS97~{w1w~-jCfli9Okz)wCo4o=X82yX#vke{dMiQV_xUc;@3qi!!+D{@j1scLY4 z0}r&aR{x)`FPeluNJG3?`?366dL_xgR~(WDj%iaDl#0H{l(3WTi$ zjoOpMq4MRRdJJgJzYyjB3>?BfGKK4fEShEmqhATXbBfw!gdIpqhb8H&TR?so)uuTK5Y2O*<02+`qzEa}5%G+)B~hlO6Ze3Wku zO^nRvbPNs)HH8omB&eX1j*Wx|CbUy#PS?el==anHzww2wRw z4zLgm@>olkbpOeN=wXBvdGQ4WRQIAM;ouvJd5T)56TPY*s}JrhnxJE`0}X=xMS z`hY_zkq4K(ftO#Ng#$Xcc%gcwBCDMZzQzGwf2B4){DPB=2-^i;Q&{LKsDSp*Pz_h< z?NJ-r^NaHo;qX$RiwEdl60LtH9YV)gL7h4yz%f>##n5kgk$?nj=i4o}Onh%4U9QdC z=f6>&K4MU2{865Q$(X)Y|G6oLes~wQt#ObdpC%@0Rw31mJU`Zn}c!t?(=nv z^5hzbi<{YY-Bv(KvgPp{tTHLUH`?f{x*-q0HOhb#)?vzUEJ2lASz*1nHMSzr^_XdV z6)5c-N`yRx&D{J9p(LvC9O@4<9Zf8-4}f*7SK21~OiA}UaOi%R9@ODg3xja7YN9Pg zK6~gNry3WKe<5nO-02omh6x-_F-co$5b$Qcfpy+JAj*D*5k{hFG5iyy*TGzKFG)Fwu2D_#p&_9Td?y=IRAbQ?2L~;4J(cQuI4~iKLH*O_6g$XVDG;3u^=c46Fk4xpM}=1p*LD0Ak!GU?TC zD>q2U_a^V4gtf{VT4mu?mi<)>m)PbXON}p*r&7TDD7?@};DKekF@ph+|LnGJf;=E# zc^fP@t@|?Hg1=7}{wvf}A2d9(!|v~wO$?U1fJ6gDTvdTiIzYP~K~NTgR8mr(LglTJ{Bi<5HJL@k3sqN3&?I>Atua^O_&ccmE4 z78A+2c6*zNSA$F>Fx;|c2+S!;aL~t}Dl3ZPts!{(_|J}?i#a?mcQQ}0YhsT9b{DGi z0yKS|gbAVm3K}Ire$$Y>)ra5L+-Mnt<#s;M8gH|0Xl7U3h~LNzRya;6J81T)(^UHx z5J@I5K7H>h5*<>4S_+ns^yR9HCP&$Y6q~{?wL>UG8DO26SfEzR$SR|R%^9&z)KKrMFw6REwNuSx7peJV<*^t7 zdAeh05A#SKiw^%lf*0Ywi%V>v2RJH#Cadl5AlMYeE{FPuc=d_uom{mYqJ#*8aiN%r6gH|KP4a?$E)ybQI}xX|hn@j_*CZ;t%c(-hzoqW4?V!3&a#r z2B)-ct?;+?dXW(jIm*V=nW6qX1@ps`Gmp)LSzsj6xg%^t{^9s~p#}mXqPVA_Xwp8y z4HV&ti0KOD1$X0XT*8^O;?`L%e6LS8A3Z9hD0e+e+|v;32>er5nliUEg!@KM4emg!sy6MrAPTO9RQ7Zw6I^j31ZoVHiaf| zb~s+2DICb~vJUiGMjC9hD~(fY2OxoT6M^LnLo47`+Erj;^in7oiaqj%EUb@H2>K}z z605%FvZy;|lQ9le;{NjIkBMmxxc2~Mz!d&VhfwjgM0fB@E->;9`JuJdWHK^2fZ!*gi7C6lFq1uV4_Q zw~F^?z)uA}kQN1N&4ITAxZUSLCr(&2_>EsYDiJHC6n^Fn6xO>(c)Z{fJB2aUPO0+ni@o{}~l@J^K+Ez7Q>HS0`9 zMJA6RaiL13yi5yje@xW^R0-$35b->wVfZGDJI>e0vRI#=ut!9mJX-^%rm>uLgvRsv zh4FTD0XTqf;vMNQK4=)lI}(^i(!Bt{qSv%F1@H(sNuFA*S`6uug6h^^((zjaBpXm= zTH+gMBH4;t5JVBl04pc>d-~!|02aCgmahFHdkXRy%Y3HZn~o5A2j^aB&RPNBx`XG* z3mg3i16*S=mRdYtYgAB!Dx&9SSOGW4(KIN5Le-$v@^}Q9Jrd9qrhAYCm=uw9<#p5; zZWNG$C{9odro+=r;k)dhy1W5h3fm#?3y$dfS3;oIzVv>( za09z1kE_r|#xh1p&GQ4gG-X0v%mCHH&|wCp(TZ0W$EK9#FTl{sfbt9Hm4+{9>A*R0 z)k(lwt!vWrg2m-SXDqM}MH#AO_JkMmiaOv0#t(AyCVH4ha@uOKK~QNVtFruXBFW*@ z*KAq8z9C$lzwJfwV=_wm9iBNEQ?+J&3c<}9bCo9Zl$!2`Zk-;7vqSz8#Y##UiH`mU zPL>i}oT3dz(My!8yZ%N=8!a52X=622SbMWYzgNxr2KH2B!Q1`8&l?`n;~pn&92=pt z@lPj@A^KW(r&L+pc>$DRu1cw2yg?qxtCIeSPR(v!8@WsWy@ViPZ+b~uDRIB(<3~9z zRt7^dJQjN%%s7>R2e*P(>H$G-6&_@@iKB)@gOlc)=7A!AFJg1QNIj(lwq5lVrIRYO zySvtWs5HbW8#>IYU%Qq%r#KjuT(A(BxO(X)k}qlanAN-Yb}cyX(mV<%lD^TNymzSa zajC&f=!uP>|FD?xLMHkl`)A-2X(G_nPznANmI%z1azra>m}Z2+P6%Gl7A54S%{x$n zy=W7GkIjVOSxFhVjfo^k#{AAi(Oq?+DHUsM*DSby!?r$z3nnS~9rzavEkfIWYGx=i ziRl&F?CBc)?3a7VFqnZ5gbv!s=@&;)pJ#lSQq>Jh*BSqr0imHWhX;a^`A~YFT|lTz zWS5Eh|5Z4t3#TN>6UUkwSG>$2(;6>K8p1WX?+%8hl(TVVuB;y~)vEMpkbV4}*CP~7 zUM#EWD34C`4U1J&m)(9+J|~w76&{NflhPhm=5WK<0jid{7F_8adKEL7UeV1j_LEvnOc5c!wuzAS{}m@|An+&%9djoEN(e43d^!?~4tbBv)NSJ;9|Jt1-N{0pHwP?9 zI6e~_&lX3QeKWcfK2~ThE%xS9Vh~^qKCh~k5gYQy(;dxusRo?!2Z5WvF&Y2rbgXb( z_V-z84!bRD-sm{NS0RASR8=WHpX%yUKTM3hAdYmSYT})yslUg%=fh7e-7S&fl79lB zo>S6A{Z9vEjti;S|CIqqB@y^YjpdL@FQU{0tfjY=!4D^!LDUpMwEyXkC5=G@lfbhD zdT*%`5~W69iN4Pe6uF__t7zI8tz62i5Cj=>-lmxf`#6NYxg9V45>NlBXG!EAe%d9< zZQGv2H--^XXnTK%?SMgd2gLx%LRz;sAd-~Hty~83(Zf{(Oe|1*f>{;?*^^^-(Nvis z=qg~MV2RvakbTTwBg#oA2FN>#jN`Nzv&2z5Wq8i1Ww5`d*}Tqlt2WiTL*J<)hB`XXT>z-`shrmEVg}hdlpCg*4UG;k(!}j9rzAQBWVC z*v4^Kwt%;%d2@{6ubLZIb=gf=K!w1jM4;}H|82EM9p2lwu4mq;!Y#jq^V`5)>Y)4Y zm8z|3-@wbLW3(@5!KRY^da!?hK$Y6_uJQQ4fH|>H-CrYCiP`r(93@alGXU695@3I z-TT*owT)m*5Kn-M^cuNnt^X15`HMs_38{WUbXo4KLNVhLH85#C23Tc|0x zHndBjISfi00wIBw8V<#n6tnzd{aF|?xjRnW*fKc`s4xP&xQ~(MJOFiGM*kmeMVlM& z4rXr01IW<@J_?x?dpgjbS)CU(WU^dNUxiTv=N1HNctN;NPvzPT&cO)rb#8R0byL zEO-{*<|^($9;;BtxH=(ZQfu_*u9pk?7zS?bx>1U%2IW0X6N? zmf%&u&ttL!O$#sR1`h*sDT>5Y2u3)&b`QU!yfJkM1|C*#F2f)cyI~$XLgm#A+GxGe zO8|#aoKqL0wIAAkbexx`HWr!!?@~dxa54g)LX&u?kOD2Pz|q2J4T1S876|&7sh;cm z+YNJ)7Fs4ouIwZ|9mt*ZnsMF*I+(>_DNPB&Lvb?e1-L}vn>1x0h^hCIPBX$NiaqUk zvh4ro>l?65*BVh&t1)X?-G@m6hewi^U%|aMztb_wip6sQN&(>9uGthOZRu=zIN;Y}>1J_ww9nDbv4K=*w@A|peZ9_@_LB#|^4kArDN zE}e_;nM^b^PQZ6W7+sPf>9Z^98$t+WTSgfWVV42VjbFMn@9i%d(wMg>__nBCUX#$)8|$sRg2E565gAO zA3gpYCwh0rJiJN8t;e@epa8$mXBjqNLP)AJ4<~fJu5FwUKa1Z2^WUN4iDF=IDZ zL{Aoqa0Oc)9&~TbBw9158Mio$;@sESk=3dZ%e zU^4DAEI&?ITcFB}AUHJvP~`Yhho=WmEk_D1HIog-$syMX?9{-bRP<%dMa=8LB~zxV znW@kOi5UtuF(Z^5{#>>I8HhJua=&K*dz}J@$Fw#6Qdgq}jj_Q#pwjqy5iUq@!m8JP z+}EIV{2N&@ZXl+fwA_0KG9tq7?Hm{p=85qoBhqn%X;lV%CGk@JKN9>EI3CHi$VLsk{ER>x#Y?iJhqhv`<4MbmfcRmx5gwK&+J8(!K08ebAB1#uH4t z1orTZ{#y#rrT##p%~ba%=Ik-P^aO@HR+t|PZ2v;7Xo*}XQKwsTz6Dc_RQM_+AKT|n z=3eQkXlDyt4ATD{O^6n}9i%3@@@*voOv&o@D{0%KUL-$zsG^HezaTXXXjsnx3L7%b zhyW@_vl&B`jxHQR&U51yav~JV5)=L#lPa^S8b61Ks;>6YEavp!_dAw%B%4fL7j{oa zLc*T=bt#Ae>9Z20$<`OlLaqQ}jcGIfYM^&F;nZ13!T^KPdAnP_#J}s%E2i_O6)-kgrYFJtmQYa zHCUQMzH~k-!SO@x#M^Mh9ce)nycLxYO^7KMj0YlDZH;nf!aA!oNx=bSuwVKpj`^XHmlX;?Yh>)Zs+@ly4CRQ_2{842wMwPSiZ~nYLrSj z5kGEOMFU0mPlY83V|Irh(>?_D>+L~0lNyR7E$ng-E{|NwnZ>-jFkUCVMU%6V0~@iI z@{wlj?u~*Q{Of?Li8lg<1br3P%gP!w=kh7alZQj#Ylf~K`3?6gl}Va9pCb}C2PW7` zsKXC>$sC{e24I7PAtzoNZDU11ZXa#twk&vBfW#|R&{GF!WC9OcJ?T?VluE4|GAZ`^Ru=qy&$8PehJl&@qHMuiwDN*Q?n|+GAoh$X&E~{ zrkE#Ym4x8d*p?}Ht^RU;I6Wh17;SXM<*T{szc}Ogfqh!f#!OwPzis!}gbfC}(Tgg7^;Sr;zJ%m&v1{TP|-F>QYNAr9Cf{fb5De#q7L zzZ^sOD*-y#Wy!h7dEn%BTP{$-K@#NeMFQPt>UcSI*VXL~T3TOSMSDVwb1j|iAhxTo zkjDr{c)?ZGl@U9|%jhiqyp1GYCl9Y>tNIxBv+I>6T`V*%W9xxKvCLejA%DuxzJVL` z(;#?vM#^w;ij9<_4^}r|9Sl1|yzDNOcwkxuDqq;?7TT5SXr87TRod~UJ7_upP)&?Y z`7tzPM@uf4gCA`Xtz+&LH^BEbXnMzAkf8T112aDEvT~wYZm;z%ReB3Bg31{FZIRB^ zpsHGBl3k;T{DsbuRu7DXXjdgsmCYj=*eUS^C_<1^Znlele*Pl`(X6ir4<4YQyC?cn z6>M?syrKW8-G;+#a?y|118v3-Oip88L9x7ID@r-X8uULJWYac z^18_9pF4;Gg)vhX?)9P4SiW_0??m!nj%_kl4IMP9*txWHVnH3A9{SoCG_1;!#4=t( z4=TKcV1nxGRHet)*inONVZ5#P%HUKz9-enGT9TZDu-Ji_(Y}(uwHXi*{{BTG{(qAp zz!SimH>rr_2Deu5tS_pu0sQv-GB@r?mkZYJ*(KN~6k-~CW{@G}(!#(jbB5ESTI=n5 z=L;k<^KpY2GB9K2e6ltr9CK`AaQ(QO}sQfImjx?F@4|9<#av-B# ztB{rynLJ9|z?)fN-I@+CJ=JF4yMUBJ=Ao1NLS3d;SaK{CV$FKt4sYl((Kj2xsS|*T zW_7p~*@a5$?{-dr@?Q?y{*RAZRSJe~dKp<-X$U}~6oNX)tR`x`Bx@0m$iX}etvxALT?g%?y`6MX3Zq2s2&Y zgZ$rCTnCM*!^?;TATXa$F>CC-epAtdljX1DV17G%3?qqlU?*m&Zv&36E=cnDgt{RL zn8f_mcr$*vzT~JR=a0c=uaUU{dL;h`F=yVUxjyd_+_-45(_Ot4@b12=}j5&`#A1dsH|vfp(* zwy`1^FungJ4OBe|p)399uDIxTE+O@gXVTVecjO_~M@ql1CC3%lT2T}Hu@?3~rf}A$ zIw=C)XNSFSUZVngRlX4R^>KM_6oKyRW0wGlXvUHzt3&6j*GvPv-7tyy?j5r&6Nyg9 zJ?+yWFVX92RpOjB#bZeYo^m0L2A}@QcD0Q=6?8UkD+y^l_A4O?E|JmExt)BRQXz+D zm7A_%n)}~tDC}$3N>MK5I$9GLsya0UmJ67WAk+5$(Aqb$CLw7*+Uj>RzUPzHThFpa zEodwL<%j|UkMWRqSN%zS5~HU1VdzwFlEH2`_B`71SRb_qAz6pk3Oh0X)agz{MDJ1 zh?qqbEx19_uc=`_J2n^$vIT+h)^3KMl-04|Dnl5`RFF&k>qkv zOMd4+s-K@fL>{0b%*XcsfC-i~JpS}2c@yQXD8oJj@)F<=zwYP#4YnyvUvP)N*zlD@ z&o#%i7|cKh?}Z(QbMkLrDG4M2S(>}t6Cs8%NT}r~q47$Ife~7&yY?;gRabBtL>@cr z!P5@^xxt(bwhZW#KL(vw3_+RcAACx~;tnkH{!FlxUG{A?iOQoFg~^9LljH7k$*(Aygj@85w>B9q=yVhCyuhIzxXwF zJnoLkUONLFRAln}Zw%KeO^(qkDh0CHAr=TeYrgtAP4tII+phhY^w)2ky9XHAn}7t> zNeP{O6Wv4T{?HFPWO#&F38bzF4C*Xvzu8SfI6wRd^QHf_R9kA!@KwJmaA4IP0nFJ_t7HS17sF@ z|LljQCnEeeOU7EL$SMO=-FFA28_N~Bs&ThJr%~zb6@?kIp;wPneDUDwDJT0%`@@j= zXs+FC8GBg!VP3`i%ctr}zt3m~jy7*Pyjp8=GDxWnn5QD3J83)o^#fTPwbL=?_R}Ia zh!1@ICMH$$2dlbC2hcPSHTz0`JHhwv z;{35uVd3%5Z;A3Lk$enB}cq zUBxN2DXfnd!{*wf`z6yIc2>Xk=$}bCmY65`e1t|VrXcAV<1o6d_L(UApof4ziG&lHtw3jgNmcQO?w9_5^AA<&Qx6ySowZcTzf zGCsxo*(Oqcc?JK7CU=?8M{8z~tk&0;hInoS3Jfl~9IPiJP`twJ?2A}yc2o!l(h#x9 zkd)$aswBP*)o+U|&Xb$R{3aj|cXx*U51g=H`E7}8JBLoQc2Y4$6R_?dtT0CT-T(DN z4h^a7*E|7?V!w39_;|b2t=Y0q9PcxNc(YBdGe&&{N06SCe2xbOtu2bsd3EtmkXzu3`kOrl2NJ=aV;}%&KHTF^M^X&t*XvhQs-M`S zPmzrri0POq>B_7mqY<~1`gqjXFP(&9j=kQZGw0{<4*{jhAMK_X? z8fdSUU!M?+Y)sE;A?>df8I}JzJ%$Y8_#>6Cct43mT|eu3;vel< zmulNT$BMiy&m$+&p^zhVivPbI`Y0@95To#4!r*`V^wPkBq<6=wFx6!XssZ=Bz4P`P z^zEhkNRVX)=4@6)!_;rqQJZY|l}4X89iLif)Oanvx%5a5vCvm8Y4#iRxB@k|v#$E% zCTbsp>03?x=pdu`_b1P?4tc5kuhCe{J(QT?|KEirPw1#h467u8NstO*T;_^<=-x!r zMIo;;YE58Lx&qOx5s^-O6;Km-l`CbHezvf6_Rz_AQQxJ5mz{601up&jD>vx+c46If zW)w&ad-zE7yW7u+jL+krQ_Q*!CP5cpkAv65HVSks6e)H87oEc-ciW#EX1G%kmJ<}N zN6j=b8%SuCse6R^edI!w9}KG}v#+?E%yia1u8qlA&?OMG==n+o8Twa=vOM>r2qIqO zN%>VM2EnpHL@+9OE}en1pIYQMLa}A5nl5lMZk5hvJK%qF#a}C4e)=~muqO}LFti^s zJ~w7luiEi(kg#U_sKg849aKZ*s`=F>YaaG4WJMXsVZ&-aoxWwWU`q_Uqk#RO+Or>= zKhU4pzc^_AN-(m25uh6bq4piDp8rVX6`VCHx~vAXAZpkWwy&gwVRm6_^A@6@>y-df z{h{@|KQpD_3>k0W35bi>gttAdJ6KkVUAzza_|uv*3K~$H%GmblTG;qSrsrz#8D~Gr zXTjJIQi0sWZ%iFF)Fei(Ec9=4j&_FAb$;dLg_L4~VH8#?d>`xDzRUklSI5EnWQh&F z_HerWVETQsKiZGnv%}l0GNQQ30%B2gN(vfVU!u|C%duGD;~_o2;t|D!#%g`tlqT^A zT|D(d6Q)51`y>OLp1p}?>TsK?u!YOaF8L=*Wez>n_uDo#Wt0Jt5>2RV3+FsQE zR9mA{GCTT9bg2szjP2W!1bm^jl^})*#Uo6oCUk%#upbc%j;mN&Y5zvnTCW@2<=svA zVxOxH{hR766OS)zlDZXaxOwmiLZjWNMte}uEW@}zb&q{l5D)il2m}xl+pjV^ zp``IY0t~&<6b=gw-)rVSoLh_ImjVTpA2T*T$DUd5s*kryol5u!hvT8JqZz)pdUr4> zfQu&fcj6V?L$}_#y>L*X>nd7CL#>Bh>dFTd#R21*ToDfoyJkC!per;4(Y}c)fGJX3 zo2lZlA|yJSP>HqC2E(Eovno1Y41s)=l)$PhLxJUcsZH{22vD!1=H09C+rft+``Q92 z&jD(Q9!XCTzuKl98GMqlPBdjerF_`)PNFWngN7(@UBc99l?FlyG=S@;4@v5KMWpL* zxa{Qwm`0-0it1md^W>V5*z(S*6T$tP!80SIjMXRI8+U6OR$}_V6ppj&i#~S_tYK3x z>Pl#OScjM3YSA^mzkZvIJ74|Ev4nA>w1(v4lqUY2X#^#Es%ERI#(E*;(<;#_8Ik?Gdq%kV}wuxl@9yxJEo2irdT|z`vt=5 z(-UL&%Nf7@#pQWHLOFjJlN#5$WPtnA3>(j$_1&2hA^&f$wnLwIjyw93-@lB1QYsBx zmCF)RzSa7?t~VsQt?{RlOlWN5^!mb8CE~LN$WdOxbf%rW-ojZbK(+*hbAjaY)P+^1 zB;WsqDJgo&a$(i|V=3K-I89N7^Mg2xyNqnBH2KT5o&;a6ZM6`?XIT*SRB)qEhI`*) zy+IlbZK*3RNw-zTU^4XRG#bLM&OW$_*GyJ7&Q55>?}uFIyAo|f*?-2$F~_3G)c*cpXw@Qr3Qw*$v%VOO`)^+0A^TgaR*v1zO)rZ zaRmJFEsU8fE{Q!oEsW_t8)F(Fqv98_Rko3}V<|iYrxdcq?x5 ztu*ZoewgDIR3|;suC#*g8yTY8C=*BVxvLx4WCFk#|3UluoWPtJh~h5}LWHD9bT!G` zqc6M|k(OecBixSQ43J0(#~_w$Dmu1I#*ge~<3&lhTlg9#aljd^Zr@cA4rxP`sHMVe z5RXKB?{&v29KxyKAexo}z`hi0$$L^L@N6w25g2 zVvQnCXqoXd=RZP(XnxLNAzrs-hXmJo0g4{IB01)8XKBd4xc0VGB{bZi8GRF<&%#w< z#4NNVW)A#jjtvWz=88m+Z)S>hG4HSq^I)jG_i8{p`G+0nX5Wr4t80znwk!k&?8Xp! z0W3N=aP$0ewX|O_NsmU_4+|k<1I|C>u zT}g?*hC`%}zGRuEfBZ(MV}``>6&!a#mXL*fJ`-o~8pYonRt`o+&wbv~^xGEz$T5#Z z*Y)i!|KwZH(iIi;9m*O8a1{$U1(W)4i|YFn^X9?;g3Rb3iS)icKkuOHApsS37ae-| zKA!WE{WJ-W_e|w~lW^!ITq!aVpw2ofCqwAiLNKc4MX~Wm6f2~to0EXXr9=zE?N5+Z z=3$JJ#q!9$jgjVe^oE1gG<1j$1C~DlKEEycYp1efAgG`LfW7A@{pthj4&iWDgD^8dbf-aF^!oZNf&CUa+IXJ>b3e)D@I z1j!8FAqVS_{vpLH?o+;J zkysqm^GZ#tL(3(>4dbQY8w%UWglXau1okC&%9#of0b_oovArI#NzMrB(NCq542VU| zxvx^85wld9+C3g*l|TqZ^MmZORRUje;BWNeuXH4&#BzUakY$-i(xW^d+&)jZjvCo~ zh(VXS&pWpb#1#!v@@+JbAzW4OEP##nF9)6q0Cj}Xq{E@g;?J%luU~4G(nTsBA~;y* zvq;PzwGQ94;EzAAc708Z$UxFf(k8?{!&zZ5C%ms!7Dyq?#X`*2&jw*Z}G?m5%Ft|uF`w4l0aWpi-~og2@bx~xb|n5hifrvzTZa6 z-{~S`0siJncbVy-!})RqeR{$E`&c{5gp{QBb|w3NB--v5D{bN0FWQs|x+4MpJZ}hE zd(-rf3-d!7cf>3fTmuTOSQ09)D>`6G>pKs)04D>dtZXph{#gD-Sg*<7u-bt=l68_l zpy3hu#N+mT4M8S-`!YSLLv|=gC3X`2Q8$?>M|a^>YI0zsQrYO)EOZ|{v8Jo?@?s#F5|9o3_{MX zS_%vVUXOUf2HC<~1e~9(ZI%FDhLEdgDS4tDzABvidpAp$nzcQ{Gz&7%8UMVtX}XQ$ zOk{=&X9}zU!mB?@-Ctb7(qo9{Qsw02r&Ke4qp|9jamb8os{%7{iUDHUMR5m7g2pY~ zOX>A8lOdJw@?QKHaxQDcF0g7wPfCsF9Ly53;I~Ksh-;)7p@4&rJ(aQnF`vhdI z*J_hu&$J$@UD3L&hT?f*_ejE_&*tZ4v=n9HoQdGAjAaU;EPw@mitPfIK8Gci?=L@k z_AV*cYFj)fE4zd3OP*1vKI$ob>;l(gT?(Y1xjE#yZ0P#rqx#fNFH=%faBXBd5~uA{ zf$Di{6GRiW>HNvVoV(SUJohU_*kw*~c=$^~J~S&nlAoh0z$u(ie02EkW2*4Uvp~s? zT~3bUn3YkhtCJdlhJX5apoK-@b@s6=dyZ~32%a67NwlKq8{i_YjrS%Cdz(_}?azMo z0|+40x^(J{p@QYJ5p9T)1uooqog*0edC7)4F#OrBA3av5&}uiW-V$IMyIY=eKN(&5 zkBrruQVfJi5#}FEI(&(f!NZy#^E%{dMgs1%64bdxBce!}IlA%>I8wda0FoSo2gv9EaLKY6W-RfQ2; zR;n{qY)3M?p716VNosTjCs4z1Nvv0z!^=v^Iju3OW3E)6w)`GQ>L1vX_BP>EUA7be zzmQfZAJmhZt3Wbs=Ey-$GG_wMlgZLTJOaougsNVeizCuvVLEVu#3}c7>A<#SF zIBq)n9_2BE16P-cfhrBM)s=q}e{M|&1BaMG_aK_1ZM_^ zziq2eI?m$(-1??1&vq(+Ns;$W$DOd`p>u0sMqgz^9yZ{C0-XH754chSGXBm>)(iDz zMYHN!nhr$LAdu4AzvtpQO~rw)@a1n+?*6p2_H=iKJ#kilBcSAzjYk=lU9iWsHP8fm z`>aKQgX6kAxfu;D$HqAvo;r)C4hTatY2)$~0{US`T)Jm{>H;TkfM?{)Q!yJCFgen6 zbQ;B~hjHQB*l;$q;tAebHVj0g1MG-$FfHe_48QS!j0jH&A6q!iC>YP-ksnay*m>sG z@_LpKG1X}=1jv@fQ$AjjnUur>?C6x)Sc&*a0vX@+7A|<}8MpB7<1QZX$%1nq z*s-x14Y=dtO0WF@9uymxk19Ynhe;nR51-!&e>x!~5;Jfgc-qQkHdwTzSv#J-I_bx6 zfbKjW%%Kn{F4lhx+t(%lQe!OoF#p}2nfgZ?3=KwnbMjmdYpXn0g_iz+Ai}7@mkjVp zdr2@ePN;vUwNgZs;fXvJ;SCMgg9+>rMImuZ=%WjQf3@h4zRogaGPDrEr%;PH@V!8#L!(;+Y#%V_ z8g&VN*p>#s+hrPG0EW2P06dH3$YOQke0sire^MpaL?jeyaUs?Cd#duw-V16d+eI!8 z^s{+_2fq^VH*TcHMCPxLI7-e2E5zJ05b;!Rpl>qkrA8;LiZI>F3G>Hq|+dV za?Aotv>&w|Sr_Kj?|%m)m1W#fy;ch2l>)FI&$9kWHnbH08pVgFG44Jv{Jf z|G3`<#32=S4iVQW_%7NRgvM(-a^f)eInW7kz7W>! z+NzM5G+l33bNz{u|!A(3xy z$#1i;v&`JR)3?N}62o?hmFXX^5{o8`Z-Q3Ip7E=S2}*sPhDjham?wXGP2lyqlr~;C zQGOoU{Xhm5w4T%~hYsFMa*WRjrg|2LeAyP$GTo(3)SjDdMMQJik;ewB?Vw8OfPL-V`>FpPDUnp z=?ZnQ{2TTUWhQ;WUojEMw$Faoq#c(kF>91MZ(K|S_Msdu0O04^25>g^WI-Lk-2#UjjPVK!wIM^TRyYTkIM&lW$u7-Dc2Rjp&hY%>Wx}ToO*(*}TGw zjIi!au^nY5ack-_{9FLyK%JJrzq_ycqalEERR;^9vDqrDbOYeUrk+=~GBHBQ`0ref51S*hU!G|}?>(WP!4Qtn*X{3K9#_Yf+6dCvpZTbTqStGuN@ z7M>r*lL zRj7YMhcj&0MbfX29e%ZF2gBe$rnF_j2kj9dAJNUkb2I3@hSMpH!$Vy%a{R%`oG`KpaQ0 zMXWAJf9|7Y6X5>ox%j&SYmOo#SE<{i?1hyt3)#n`A0Nf1s|hexiJ7++kqTq1aAj=$ zSNtriy^xG0S^hZ1CN}0$Z-PLw&avww$TmiXmufsz<)Kvm0Z-ntL^;q^^el0xu0h#G^(Zyx##A}%2 zp>7sJe9sG?%k;-S4&d&HqpQ&ku;$iBIHK#v953}!ELZOG7936M@UTiiVCSkz?Goa- zOm!HU2xvW&E8k><1MVDS&ruqEusZhZXBIRkC>e=@2YAi_=g|xl8)-apM=N1#S zs(qGF(lXigb}-dwVVG}zV>&eC^{@Et-isR<_f)giwb1Z6a(D)6x~H>XxWHonbcKyU zF2pAFcTB6NSI6!y))s0Z#CF~BMJCt;jUeU2hwB+x?&uE#exa%Q)oRQyUZ__}aM`L% zlBI*TY4xcKp1lYQxWj6B@(}@-bSLo8-^*x%hX>U37*ZZrJcUkDiEYQlSXTQ z;GR~WNo2xJOqM|mlXAdAl_vE|(gG#c2)W9g>h-=UB*mf&g+8SM=%~Mq4snI5#LK8? zac0VxZa{k1)D5afF&|WJl_rt93?6zo=uT;On%o$TPu*Fo?327K`#>nmeuT0X`YYY} z9K#fpE!pt;{CW0GXPpk>0xmsXq6Fd$0(iz@j$o;3MaLedxE1M#OX+Js0I@lzk1Lq? z$xlYH6fR{th*&h#CktTC@>m-^svqev_t0y(JBLce9ID}DVP`l+bLD_PF~f-`q+WNu z^^u5cvNaX|x^2I(wV*wmVjRa-P1^zp?bZ+yj}xV-S|m8>3X|L>KG7b@igXd_nc?i& z2sCk%heQ4YoU2vUDxQw0fqn?p$~oH3r8L+3HNSneQfd5BF1kD!**4>IXIcn2PK7ED z4JJb)w+CS?`wq&J`psml&oi1$PmH8Mob()Ue>s)-WMqI6C{d{p@F2|+u^swUpyfQ) z%z1NBK0_I&fIPk-kmffi;`Pm0>opR z#bIr50~H_hR0~jMhA0m``-dDAJq&Swx}sJ23@gB2c%T>+{Q^l2eNc&S<7R=C0I2@^ zYv%B8|ig~ULrAyxP1Hq z9j46)y47|^<>mpAUU$ua-I?eZe^MGk@!Z_`Afj+{pUn!#k5ZE7j?{$WLIW=IW!PVj zt_x5o7zGoSWypyi+MT|8Us7HBBl)re_?PYKe~hR~(6Yuu^b}FZez`D~(zpM?2P&aB z3Pq_Xj715>m;X+}{yWz}F#pf-zlehW(@b6^9(DZh&HuUlA20rg;r~5`e2N2n(6apG zAEdl_bv0)1QvO(cStWe(l6&{?kcsW#CA%!5MM^W8oC8k4Ygl9=#%W&tjMxj`WQOrT zhlsu$aS+2q<5iWch^Tfas9>?3-!TykRvgZfq+;tFyW{4cm z=5n8X7nXWzQat#CK42i1JE4_lMvp8dqg^vkJ6s-r`DUwiqZBv{k* z#s%w{AjH37ayjSuR3v5`%?8mh9MO?=eSp^8qtETgK;M9oQB^_-s>LL1u+^(V|G+qf zo<}_(CWg_SC?>XVAUS8vzfPpip!!z>hxlsl1q zUSzi2%GI0S?}if&Uq+_JK10gQTmZ}*KVn;r)V=Jqn?_%ebQOWvUQ$Y&?f?B-uESqJ zPZ^^M5_19lMmI8*cniwsRZ-DWW-hh!YzPex>t{%V=y9SD737P*#>hDp$sA?VXtrQp zg@MMTMjPLn5p`YJDu=o}G1r&XBcNxKsTf8$XE{{GHjcbFped_YHsqvXkzXs!SlEH1 zH9Gmx<-fzM6?mg8aVkr*27GQk!65@`pAb;nJRcs&-&x6NJo!J-YNSRBB>>ML8$LWx zdEo>$mf0-%6(u$SNt8)cG7=kT7S0H#&RGxQv6ACRhsk8p{Z9KIh0>CG5hz0RSuP3U zkq*%#3h1uKI%^Y(yOGKiGVE10{JrG$I~;A4!jIM)O^6Dz9og4djm7`bzY9|Mhgmo; zfO+tR$h2_4^YtAFsn?iDKJ_}MF32&w3}S(-c0?<{Fm|^Om@&Y>Qnf%w?+EwDSNG>NJ9{28tb(wK5-1(Zn zRXr{yc)x%wEv{B9_>~ALAe{d(L%!Hx{~6z%oO5r|WyjEy$ERO?fU+ly(8XcaDEfe& zS#f>)#ilD!k&rh}sQKX&v)fb8yFHQ9p`d01(G^+-H#2Ha1t8L_4PvlSmknET`bg# z8LkpegJV-M*#ZpUgGC5<7ZdmIax7a`|4C43Rh2t9B~_L{8*7 z=nOk9jh90#*T;(NtgUC?hAt(juSUce;7Hikr;0e)-6tcz{&=`PoPPX!QefGkUj6LV zr^f(6X7>D`Jk6hyPpLh)E^n~f=AHa^&(!O; zyB{$e-qe+@q4!KXW~e=gL`2a%FX#oj_#1%k@Jly#%!&HvdMbN0T;>?&o;gdEK zFjh-cD$)_UtV;Kp44)x0^f`fITt>f*a8JmU%CSU3&h<f)zd>=wOQ% zy(z$5J`fnMuV%2=1h@)A&v-~~JMu8XY@;-Ne>cj+r?R=_;64iK-6hD({ zjQOL=8??BLt=EeUnZGa}E=hkAZkWG+1`;d7ND|hGve!j$qD}112`!i8*pTs8V49fd zA8R67x;w`ntcRX=v2h+FblFueYaYiyX`b%lJ+|d#ojkF~`s-2|OJFMahg$ zjWAufZ60~vjziy-Z8HX!j^sXj(;HO^w4eyXu7p<{53|7?nRYUgk!UN6JW5T;;7JjY zBfuqgYV>Y(^eS2nXdW0YE7h4BkHn@sn-%q(hRB2*a6b%1@_8CFvm?*7zxQq1@iRx9 z2_@qfjZeF}jvI1?-XZHoP2g z?4$>=_oNT>XoZqIidOqwIN^b~EJK6LF6{{>DwAtR*+ZH%hO`5-3IE8#A2Hpt|Iqd) z_F)aB8YA!>Vk9VNJ&YT};$7zIk9J^Saux%C=bu`VdGF~uJt6a9Ywq-l&J`A+M(>zHhso7@WcFzcio&~-QW1#R??XXvD{d=2##oFPa9sQh&n!H+;F@&FFKeP{kWzGU_) zECh*@jaHB2N%$H4ona`_51N`%gQVj~?k$SK*#ZW=Ea2*K9DiKnW)D#2JWihB&ri#r zYHXMX;P++bHI-8~lOn=`LNF1soBTbD{C>XCTuK=4T9$uAHfo2$0|pqhFy>+x8i8`) z*)=80TRUosQqd{uo|6LYnC~!lhiCD!X>iIc)b6HZf%9CY>@-&hvUE)h`TfX)`XdPb zj`e4sjT%Fxg_VX`j-X;u)lq75lGLd7M78^1Ie)4!zo!73*w@wHr|S-q*&+ModTdAv z7(0P9na=0znI*$~tXrHpM<4qxoZl+U8f*&Noy>fcDeoo-+5a_zb zz{y=T4uEP!IJE0378Mv!4!-P(+x){;_qQM@_ak#|`t2>X%p~&+riB!mUvIZqgrgLT z6xgH=y5G?!)3M}`uv(^1>n{sF$FiBrCi}wpbTnW11>I_SZ-(SCpD2E`_8>{$LCR3O z6sKtdKB;E->%jC+yi5J~`Ok0+C+a|RDLkCTe34>Pj* z-e63k2z(T(+`(JXKeP2K-5jO7KwL+1%y*)=tdYblN-+lH@LV_!)29~0*3JLG^pdT>E*>Z$XDSvgBn@pvnp{s_N*QO}V*PCq(- ztkjv;%Tp(WiGpHO`+pL?$A(YIHFksRLG@NrOt1*TVuGXR9Y6iTpeN;AGLua*1q2+) zm*b=EI(vGx90E9{Lt+LJ1l*RcwY>l${$U;md=f&SBdJ9(Wk^QfAAScL!YaZV&9a6W zaotx1C$E!R0EpjMeIe*o(_g#v;Ah=N(uInRfWmFo5XC%>VMsie5sxPNqDLbDf#|C# zCU*Rk@WLw)u`)j+3S8v0FWkv4{zBk2iWL-q+G5Vxx_+C2W}5IpF#pRtB|2>zMKT<~ z8_L8!AX3EE=`2aup^RM}yi?)(6jEhj=Xg8go=+qhS&n;A>Jrb)}iU zt2t;XGwVLVd*EiP3pi;u7^&IY%@=rkL&P1xc!_zo_r!o`DSWE=ko!+Ufotp?_vF8z zU>1&x=besW%{>PFcnE40-S1wnTSOUR;L$>ZAFDl0m`cMBM!h=*X|Lw-5Z?*BttztT zR32X$E+U)5qo|h5W--c*WWhmkWuY|ngLIu>TW|ePa55UbkBnBP;i&sm0tv$!W@@#F z%_WZ&-!PH!kIgV-2*2+U+(APmO$Q~Itz*&#=19MT&$d0G$ zD^aBdum?cw@GunV%@>9w41>ZY>1t;G>k0rkY&~^++DFK@QwcD6Z0YO?jR-Ft`CSE{ zRF#>uy@KuIpu>N3&9R{r|00_{xUdm#()hJawBn0oY&Jl`?u{ssQ%Bqm2%Z!|Wg+G+ z1ENVeGIGSZ3c&qqrZ6PO3v6j>^eV1Bb;RDck-R#t{Zyf(6b^WGN(PHiQ7i_+zl3ut z4cH@|Bv{`8-MmoT6~tziggO9A-75%c-1;#5JM~sjZR@)lLw0My^~>zZU~6=Z@LymG zvMOdD2i&mDDh#dnJuf$D0YZ3xftZhFWdZMHIP_&PV@ntOPfhbh6YxI9&v0-Nf8Lfx zZO^Rg&(G{2KQrAAS-8N#om#N*NdkBoE)2N-5+poIf@q{J+Ek%6a+A>tBygrp>U(vc zXu9!2Je!*cD%@Z;C=OE^DuHLLyb#vFR4jC5q~em*`Z`?i^%;EGg(s_p2cIZg zrUtZA0~wF)e3u=r0ux@yG<|B;4~9?-t>dx7do(pp(2lCVoF!@5zn7KM&TM(ocbF@zoro!*z3X(RO^dPVq1D&8ZM> zfz_o{vvZ;ZUn26GZ{8CKfK7)c^oxLdNN?V7)mslVD+gVjff3q4G z0TvgW>Q!ojKCl5ilM?JM0#*JLS&LGi+^Tpo;7Pr|ith@)3h1j;Fy9EN?V&&*u?2nX z!X*KMeq;-};-RYrWdxHgf#LY@eBwhKeE2v;!-+1A#A_huarrQmov_|lW>Ua+$jq^J zRI!~?%hKBp7&Uoj52);|tfWDN`E+52`QZR&>o)ESXBg_tuRoiJ@jE_;*8>pwOfnUC zh+5aost~?+y<8Bt%nii#4W=<3Vw1L|%8BwS3~8`#W>qiknXjXN5#qg!(tlcg47ekd zy3Rx??>1YW_+OL}l`V6*zC%_tH?G5WE586m*+ zNYfWM_s}8Ldt`RWZao>GKNBBgv)S!krU-%@H6=e!a^uv(S zfv1*CK)>&&{OQ~>ro@)GTE5Z8l3$uCk80EyCfQ0rn{WKDTNR85mOe;jeGzR)FH!@Z z!;mKR3AeyQk9BlyAN=F>P^g1N%Od$}`x60x@p|a3&_;!6jT)RTx?8-FqieS;lpim~ zJeKrD7_vv*tJylC19BShp%~6{T#l=|{W|D7e!__zFdt)Gb7=XmjQNzA+_0mJO3S3) zT@)D=^{_!Y;~H+^mRnXdy8!+|7;^n~CQpQ4*7W^fEC80zLwx=3%P?7Ayl1#OYpyBV z>zl-VAb6K(=hs#!dk_a+qRvMsrwh;fb8T7e3*#kH&str7MLMq%=ee20(K zc7cesxSv<(Sfpd45|!}DtJmQNrz1*55a8j^+M0PcY1-wGWs$b#XacuO5=kyEJCUcf%1-Xram80CD5PW(kG?f^&U<(%s7 zj{;l29%#W-y|q@xhee<{E*v7Os8&B|)9E4u;v0a5Wf$8D@)xK2^=!{AR^?GnP)g#5 zeka#O_18em@1>)2133X23Z_NL`KSgEK4eJ^@5|qXpVU#J7|-#6qzYO`y1WK zjG1NT-M$(stI5%Xe>%`us%PieCQQvx}-odWp96Lb*oP;C>w$#~e1 z&ZN4}M2>IRlR>O70__|9ZODOcneT*)!o!Fcl{gmsT&>6)mZRA2HUg0%Q#STbSrPxX z6p^18Gt6|xG(oCHIq|rDSv#t7lS_e%5BtGvoD#57BA>nEhOtakfKzMW-E4s{{kv6? z)=$7?7um_BFxNDhVgAzZR?8J|Ezez$%Gglu>%fmMjaj6sB5(a>4yqh#B3}ovM`1J7 zvQT%&*bpj`$%2WrDSl->kBE%L4{l@-P;>-e_LEpOIDPZ~&tj{DUU!Z45r!dMd-hq~ z1WH}(Dc`pX0urS0Edy?MGc6xmWct2-&UK*afim7Lr9Z8~!D?myOrrGBOwP^oUvm~7 zQ56`P6#6>UeUE}V(8@-?0NDK{uym%Y@0rURQsvYi=J`&GSS(`{1{iBPSFW<2PdXNSz2*A(fDaxWaAUJLj0Q+J8?yaY18_Z-5ZUv;}bzUycIB%J3Xiy9t}5Kz%GC;J6dZ-ZBA!~Jy7fA;&`&KddcAK*ci zV1`SLN8TI=DEY#I(RfI8I;X!Ebzu3F2Fp7QjL)m!Uh{mc{fin}aPPxQ=bkg}tOaY` z8lfZCR6ZOybH@nEw$RGP@diQf*;m1U(ZSCx@?;-`faSP=p`mf6T6PvI`9V4{@>F4; zq<^6p%_=aI^M!Z#8OC$E(^eB*j&g@>)UihJ5R0moncqN@PB*c6L-(#o4B*`dbnXQ1 zMw$0hXdlS}E^nU*5G^#7F>GA?FFp3G(sm9r&=1mAtS@H~F$czNu$xvGr9wx!?HU4_ z*z7lEsA%4#A8#VHQnKkx^yBN14lvQV4t`xh^#TBr{AIh9!#lV|R2fOY1~-x1ncRmn z$i;7jK&^#aY?Q1LX};nwi{wxlwT8nD4fU@vW{>MdsCl@Gi2k=nQBzJM4T4^ z5Em4Mq{oGDfyQjDLTYzaSI!p9f~0qKb7ida5(3OOR05)`Ke^L}UX#BUkjdb3iIOPO zCYxbZH=$*$*Y=nv_(rV2B|FJ4{@H#k`1hQh1HrV0yBNj~uwhB0U0h1AFh%%L+3nVH))v*r9X9jfcr>(lGM+_-GBr2%BDx(T#h zKIRNXD&QebW}&6!U_Cyl(w$pL(O!n236%1un6DTfA28z;(C>!;u=YQ>Ux~v?o3Y`A zM7@~r?G4BE#asvxtB*z!1VfL0+_3#Gw?8rER^u$&xlv0;|KOMh(fM@q{m(=%0g+05fklDqN*Er#iNC^m;x*=e)pL8*F>eI7t1?qyYEBu_R`_Oh}) z8TtE~m65e(QUK#HOB6-yCMvxh$D;fIAHIs4nP&bPQ~w{kPgiPV8Cyr)R_yc_Y>1ud z4|mA!$$>d<$Vz*wjkmpv|7+DUEoY$Hq4rDRJQb>yBfp!oV)HhKo>(IK<{#C40DU?{ zTM-T$f`d?NoHa>|$B>70zvy>WyF$nE>FKWV4bJ=I0gt0bfmjd08U3tdtCWTBCHJVN2Uf{p_wV_`&pDNL3)01iGV%x^c!3}nj_?o0Yh zCl6@f*OrK&AU?el{RcQFTU6J!q*vJS^<>@QdpQV}m^dX?*`>GkPD^ov0U{yW^7bXTA z3Iqf}!Gdk6$#HWl>HbyHE@I!PYk&O<%Txehy%XEeZ#{JqYTwhT=1u<$U2t+80-fe0 zd%nIvJp@3=fPuINHdS+OTgRqVUhXUEl@#w!Qrp?~sF$i6fPTp2=ii+S4Vv2A{Ervd zrF$aMSiAk^^~P9UZSkbd|g-sj?bZivrYVKsN4 zhbt;^!$iBJVfUd6du_QPXvNH?QP7Gi%CJ#S1R-2h6(cEAIZp9fCw2OSFY~ za^UZI5ycLxkmf$@?svf)oB1BORt*U3(!c03?AsGY0w<&Wq0CYohKF zHg8QJTdYC8<^6l3S85VzY2jf@d}WF!Jx|Xvjw1l zfgU#_B@xt_#ok(?@7~{=DBQGtpUdJP%J2QTD4;|2D)tbfovDt3y+hSRRGrj9Uj9%8 zuVB6f)w1kory_~1&WFE5Yf3rhs|R{HCu@Ftg^HQDsKGzB@}4-)&36M60_rLn4Uzbq0c}`GV)7`mU#mKrKQAqny3G z0Q%~w4xrw3%b;4=t%0S5`149OzysTD((+WStJfyi2$o>7jE_#p*Kl`DKVEH{X$XXI<)A|dI)E1iYVmG9F13&W8EE~`)Xf;R}{{PeoMNqi_tM8k2`pHlVnP1rYTz+qgI``C2 z_+hN!ovWXfz#aBu32Vvuj$=4nY z*&fL{+lF z4)k)4tLdeVx9GJfkJ=4Cb{J*~|E;~>zYSDC;J#*JVt5wp`|TgIENb)XhXkFU~^So z+y?jDYsz0}uRUCBJh--FHT3hu#$+X-a%%#f-@wv>5UxinJFA9d1wS=UtEwfa88)=* zrb~8CR$fO}scH@9j;OsaI)Lp-{oJv4S}01Jjm(K@Vsrj5C<^m7^1+v1TqN<>^cpyL zUMrN1pCXa0b>yX5Eqb~?6*)7gB_bkr?A9vWZ1onaSb#;d0wTEKRkSKmk=w$d4<2RE_VxG%Ewo z|E2r%;T6O~d-!vh%BXjgoNC^-gEOyNvnIca2D43+{)0@L^G7t`;h(yA^Dyp|7*t^Z zH*FpZ!`2@r3pIsu9r61G>8&VEFN{K9SpT`|#2|%HsaMX$b~r5}?GD z+?XKh^cfB<(!|_Cvcf~1k*&y2Qdl+{2|ec^{L0vxzzq{$tCZBEEenjnwA#|#;GaTP zA+3H4h<$EBgGd3bW>P54lRP$3*iH@|CcSkp$xkhMM(eX*-isr;I3s^Ci*WI%X!YWSRZ4pX%1GdmZ+~||B&-PDW7=MN8&P5f93O#9(qKv0 zY7SPHb%kG8`1=c0zuQ}{zt%5!kaSdqY~x(?IW<{-!p5dA@4rg_m&y$=!9V`46A7C=morPrMCd;`27ro=-fKA*%2TJZQN+ zV6V|^hL2QYJG_ZzxUE825?)8h_F;*-8>2EmgxB8q#H8bAD2nOkh$vsHlPNNEHBq=o z^t%M8E0LD!dI(3{dvQ!zb9^mvSGSvb_FhV8E93g{9DXXnSzz|vz(lD_0KENY(*$XQp6w+xud+Ry6x&142S;dL@5N?Kw-HB*hjvZ5R)cqUZIN7z$pVWXy%7hd_} z?1BuPagh(Rt5FHnGq%xuqn!CciO}q~vgo$CJn;9bhzN#{Xr1+YnliTsX}P596{b+Q zolX60{}~Cc{xi=qdNj>+2nRDsiiNS#WZs61Q>Swf*Nn<^7IIIfA(ghU-7h4~QWGPX zo98ZRWJu0DT4L49!DwO{cc}+1r|&cRlLgcreIGYIz(q!o#PE||@OuZOIslNloR9-V!Fj=Vq6g~lBru`OfvI{5=GEtV}S)Hf>r7A7yt|IQ=R=Q{xF z@5`T{@2h5rWtn=PhZmz!pTyiiZnCJA2HXqBcFsupY_#}Dti0>N!Nb|~eX|UNER9wP z^sx1{C9!f!9Tv!qMs$oVZbdKp+1fq|cnDy(p*Afq{pMxV06gwcH}|=Ow=bbmX$3~8XRBMZT_m@*6V8s;_CDM#JYe|gO zO{^TH5R~-dKlxN*j#H|uyMZzmlbOX_RZ(_J5_EUse|;Nl@nF$Iw5F@3_SA+25d`_Z zO!f{WGPWkL719iP&O|g2k7U}F5hI%HE6}YFao~ivYB^>!=xoSsPY`k@2M4=`r=-2= zmfTg38&vqqOZrkS(_(kbtnwJKvsT4_U;STRMjR@!$58=Ms{>()X(_oC(?s8zRz3BCT==fYR13ZAY{Ip znId7T%*S0*QZ-OwiU8Izq+l4z;{w~i0p9(5I9+_leh=ygGf)4WE`ZtK`O{hr!>}CSo@}b2QlZMJDD>I>vknOLm+E zK`ls*zI*CEH$&)TmTl2ObAg~KuDXURyY0VU%AiPb(|7WljgG35E2+?27vvq6tjBeK znaec9b`=v5I5N+spH;b^v{BEpU!^>mTX{x6`Y?g2BTI0JclL142j>g&F9|ilcM3^s zVfUL+?}kD_Cf0=VZJohV{hZ0gkePRd0HHSSZxkZ!^@aU-!JSMw8%&Abv;?#L@1hkV z1S~F}S?IW&8n5uz^0rN8b^slLY0$-OIa)D%kQi2r1&AR4exjR%#6>QDZRCYhaO=ux z;aQGG@<%|)fMXc7x3r(_IL-^+Ny0O!MZpOn`6{&0fq#S4m7@^Ew!+*${ts1e0T$Kw z1Pl`kEWNvQFP+leOLvEKcStJ@E8QTSO9+URq=1AXDN0L+bP6JZfWWu-^Z&l@_uPH% z1Lw{;GiT16x#yg@GouKXY>g_Cgd=m!$@|?0CkwwtO?@RMxWt@4!o(Q1lyp6!sp@8>p&Y~ZKJN6Tzr`VTAmgX*wS3 zF;t(to{GT=)2IX8(7JR&11_#gt5KYZl{}RPdi1_A&bMxoTHnPIE#;HpH(j25^$A{$ z!4dC(gAL!%THixeO*m<(0F8sW15MeUw<19h-SCh0ZhjTM#wy!p76L!-LsWx(-cm!@$N+xM zf!~DGbck<}%-fOb!vf?ZGZg9|^Zs=~&S_pCtZdE}kfN9}jSlkRAu1A@TqqNzrWCJ( zC`i^ejdoaevLfgD3pR=TvsQ<=tUUvM-&dM1>8-p44JddTG7w~GC)gLm=F}{7k$#Sm z1ga{aM=-j2B28`cfX*p%pcnoMlyeu9wtUnpi$@TJSmt=GLXk|U?XCY}8hR~i1D+uTj?!ThQiqGl!TI~_-t$Xj zlQPG}MZH&1dgkTp8YCv|lnxDbCH*)?O0`AsXiG**5xF7BaqD@f@tTj#)l^yIeSoa} z?^-iOu@5=;==Ca0SfZgq*k{uQ1I$_~RiXjn6w{PvG<;C|Ue-NNbx^v&E3W#u3w4m4 zg+UOKTl3k7rwVY=(*Y5<*#uF=&#j}M+$hh9!HXb*>4CfI90XRMS2PF4 zWG2pOqqWiJ?uk{b24-07o+}5;R^M^`vp8ulp20rKBZweM$Rnn>YR_{mc(NsWiUu}A zfYwRFsI0L%gcz$WADIk(+8E_?{L||oLE2(xGi^{|f=Yj$Vo!X;m@eDs2kAzKbi|b@ zi>T>9@@WWyS(*0K{{(ee zW)G8B4BatIaAI25Ww;|;vk)*y{0L2rRITNgfhi@VYY z7a$^YkJwAU6sg6&oX6vZXk=0AxD%%(vE|;ax2ou9FfqTzQCic1%T19ZI_lSA9Qu$e zN)g`i8rB)67mxaWoj_U?V?B!~Jx$;MZm70T#-Vc>G-cHCj0p0LgC52#`^q7HKmiLx z^TR=NXJO2Q&hSRFTy-3Ub!V?}SQtbKQD}BbE-B+o*v~GK`U+}UBM(IeQ4dfola)0G zCqr7WxmFqhCMT#%Uczc=;?JWV!A_z8w*(=4uzlj81*Kg98g z*Lo4Y9kL=~vRu-qv9Ez%hf1^OXyZGvi{>|B4Trva{F~UV<=ai|8QSQVR;E3A!q!LG zpSpfQ&T+Pc%LdT%dP2Ww)}29^V8K+aOlJexF~j3= zLo1HU3^1|?eTSEJ#>yODSV>8W*#$9&1yw<3L3Sed#fU(!cygk9fc_A2iH)MKN25zi z=*!&UZD0C3X*D0RBHX=tN`;qxg4*=Pt(_io%VpmmxqiyYE%|2mbkp*raMDHS{sgkc z5T8a)#Ql|zbhG{HN+btCFK^?R&P+t#6Ywyq z{-s`>3Db*-ugDrQ5%QUIhSakH0TG5MSg}R?xqu>@riO#+Lhf}%WHMMvG{=!V5!u{qV{4BHgIk7~$zelY1u(8|YT7oQPEkysj;y;J9?7AY>QG8~ggG&U$<{UZ?KygljkLwZ zkhtxTrA8u#qFh)%yQBJqMFw=_PeE~pM63;5^*Ly6h+a}rBCoOc&6q<~T*XqH) zS5-lN_CK15U!xH3oxfpnq@ezpJekG4D%GM}pa>Bp7%XFlVdNc^vP*RHE=-52Ru(mp znm?Rh4R9jE0;2)m)nQiIsw_zj^{S*z;%&zVhFI`FddA{t(>PG_`4q0t1M6WE)j;|j z3kI|0Z4EF^jD_HzQu59oJc&(49c2mj6^zA>Loiv`QYIn5!IUK7GDI1Q@R;ABbtSVG zkyGI+XrP3pWxuJ<{&nNQSkec)K$`+k(6DZKq@flMcRN&9%dHOK$ayxqf z@xJ@;n5WoW5T<%@pVVPI026GQcO-p_>HSC-G9m3 zr)@hq(yQ2HsEAApo}&4Tltq`<(sxn$J3{N;xKc2&^iYA#X@?KEWhIxIsZF=S*m$2~ zot}S-&mFG%@o7w1c)$!x==#rN70~QgF;|1rHmd;hx=k~umIn*}D$4ku#zgbR;{^K9gLVa3WpN=yS|HQ;Tq4X6n%0dZZI!f_PuOOk)cVke zm1|Yr3jQ4#M#$Dc+i<*6&G&?~2uZ^&^L$e0x3Z?`i0j}8C(@65lB#JRw5Aa1424G6 zIExVbvv5_=kK3m>aXjJ3&0WRo4}HIX_obLnQ8$=6N>ki-Za9D0_`M%k+P1jA`sHQm zX^BLAWl-mj;bqNjKd<%9$V#XCNjm+|nV}S=qu2mnO;T-<3yz$jrqB=V&24XtJoX*p z;VK;8^&}|c1}^Q&-uC#1Og5?%D8&kub+YJz(=(5L9_e4yEZb!D&4GPrRx?yS>ty1TLGxT*CVODEgr%;^m9W&M?0JS z%%8c&DNt&~n`Vmj(+`y)xAav>OP+*;#H-9ABIJU1xZ+y^3YwmKiPgCX(z!bBAn&w7 z(bkVIYwGgJeZrrmbi_``&8$;+h!-cMd})v)S*AB|uWFF`xXSdCm8k%08x;0vs%O&1 zxc@~)f&Lbp4|l$71<~hazNHGoS!gAB4d_0JLQQ?JI|vPFBzg7%gi;8a znfF#Q5K98$wH|nlIXEk#uZjP-%DmtqI4M~vsd%?{X$sH30JL($;$qak?|Ymjwll-L z0qDNIHdno2Bf6jES2JtpA%4u#6!8RR@CWAlQVWnpn%Tz28xcCC}% zWmG~!ebNqSogxxM#w;=BrCH7Urnn0z-i~y>!oZAO_ix4#}&8W`u3kSiN{$oDLiOx&84vHDfEW zUd2XP{Z99%Uvfd+%gl3IpSSOMGS$^(&b&M5#?j&LD23q$5B50(p9U_#UmGr)M)5zJ z6-YsAQbC8MpJ|x+|C*=@84{r^uwe9m7E59aKss%!)gQ)Jzc5wgU0osCT^HN>RpOwE z(Tngqe~X^$@y=1L#P_2$Sc`{C+*d(C?f@ERlil-1aE1CbE!lXQD*Xo+QQ*|+R@?Wk zYdqw4@gPBpNT?Lj9LA;sW%~eZnzP91=T(;^v@MaxipR4{&+)s$lIEN(~|;p zp{X2==^&7pRIGA8yu&)IeRgC=lRehe&_AuqzbY3OYe8Kj0KZ%1$HjY?#3?tETwyL7COG<_F*9RX@#+THkv zrlu+PY}T-!ZDD8*zubma((E1kww`~-DrQn?4fpC}ZIe)uB>!C}H7QgBlU$eEo{eSY z7jkQq{tq-oB23uTp?fkCPp9)$AVc2Nk|884PY?~EUtsjl%qfU~YSgEYjVM_Iph-*? z=(E~8Le3+pEw&>wFVMRJI|8wSsNWz)$Pb9`N_|cJzESW~M^gBL#=Z5Fp@Y9$$+f^e z$1m_X4p=bi`-gSn;*USP#lgtfS3f823AYP*#i!|{F42N~FDMZ||J*C3MHa;w=+H{+ zcbCw@o|Hk(SAd(OHtW#$KAw}tpL{-|TnUQrk#4t*Y#3Z;Wd z!$Sa9z-wc`tToc*a?cWcR8R;A7bKKD?D$G|9ziF4LlJ`uq{PGA1oQqWVPw;*4q23p zDU{O*>xM}2THjVFPmCL42R#K+<;xFw*dXk9Urb)RP*%?a)tFy&2te10VH4sNy$*=r zbxC7(<^Yucp*#bhO92mTR!0U$CqBCK!{4ViIK!Hsl-G=P@X}M~u)FQH^VHs&g7$y2Z5n^~o*_sw?HW|Sf7vk%3 zh@w{G|KbODi*Z;vEfrBh1iQUsdVFY}Tq4Br{TluCC0o9>KKaGXZQ_F5#Kgi^bl%XG z@k2Ax{PU8|_d|F6&&0!?>A4x-_K3fc@vi)}zJF*K<7(+7emn!eST^-KlPr?1R@c4` zJ$(0LcKySlz9rG9c3=| zypBw9BFEX!jJmxhT4O`SUGEPwC4Oy|EmoBkTH;mivM5`vVtM%QEGQ2^sOB*5R_-M| zF89l=J6OG!Od_J7{3C2*&j?Z(ls`puO z`}L-o`lLNe;P2P7iz#6^ zN1l!ssnWlJrljyK{hN`X;)`E#w|=2iK)4HTdees7XN3y(B%3mR0&xoYIj{kdAI%<` ztNdgy@Ir?j_rgz>+97i%l4w0t*bKakNG&sXFu z0n|bwKUf_j*Vt2pq4fwyF>T}yJQesPjiAE^<-`gCE5T11|N29pJkJl>h+Q>Ijk(ig z^igZM0T2k?lTK7yIk2vp_o8QuR5RtactxHi=4xOqufxVXZXWwK?4^hGTd*Jg4FS9+ zt-E;T(k`=hfo1o^d|DH){prSh#|2U=wRw{6Bv?( z&?%hJ$Oi2>5jb?cVm9g(*Ik4dIe~^v-nt=$Qn%%J_nc_$&PWHV;QQ<8eGY)odnKJK zS4rteALEou!(+_Sm+TJgrB&-1re6HyNeHJ)=rV_VpdvjmzYfgneL?Im1)h1H)j<^~ z1YG>o@6GZe=L{7c^qC4uB7xg~60~ta;2v98OG^}n43%erZZ{`x6k+Q*gc1+sefkCU zJ)`kOQ`$q-obJM($u0h{4eEONV{O#O7`naqIe4(Te zp*@o`v zP_U(;Z?-=M1OVU>M=98Y!AS1NgC-79GovZ>|@La(DJ%CAAKOPbv_o9IfjEvp0( zllIF$^9m*40nDzeQLl)cxgz_(_XcudtiS;LDpPm78YPTiLJ;9|0%oTpOb9!CfFooI z6FhB^Z5m^}wVOBo@(gUfb$7l2pj=f{$ZOm8V@M%kU~{$Gyx`&pf-ofu3idFtsVg8O zhO|^uS*R_~w5k@iXhty3sxG`X&gaYF2E6=c$+)-L_ipl&k4=KdKvNtSO3^|&7=tN= zDE9JfSl1$-eM@LEH^rUKu+xT!ar#ChDka<9 z_%l}0Ep4ed03*i6`Fs2`IFjS^d$#2sm^kgv0AKcm_mi zGAxGmQ{Erp-0rWA%-hn?93C7Tm>c_Xt{WC}o<5pxxtyR5r>XWN;rK4pF|7Mn99}Y3 z*WfX&G*=F`E3h&YoZvGc*%5^$`L6Zx+xw!i`Tzw}E}mUYz#_L?PU> zBKo^!9PXY*%=A|_Jeq+ti9^Gm*qvy)u2z0tEG+uT6kCSDO>>6EdwctgRkcJrHUuyZ zDVq}H#9#(?M!rQSc}(c?GX%S%xvQ8B{)TGmDlJ-VZvb?z{Fq#Y>3N51Y8QwY>oDAw z-Ch_iQpls^(ciwRs~8r(d_B0m598zUDC2}Fs&szs@l3U)dSy4CH#GRjnOn%(4io0h zC){4N2g#$k-MOKjbI|%`)boyeO=?+ZS|BDgY~^7VFf;Cz3nRmF*GoM~GfGC+c$fe> zn!=dYw?%=SJ@f$f{v}_zLocq1l$bHKJcOx%MMCjOP47^Y2K->9E<%jRmP-O z;0l={r8L@{eZC8YiK3m17mJ**3FYcwC>wTg>D3XXy>V;gmv4gSw!lT~{`!N8H~=a5 z94w82wmVE*_j%fA4Jpu!D$KZPqwG5d`1Z>{aRBeQ+7!dFfITUACJsg6m*RMlafN6%!w{RUjkP|W`rRf?31F7 zGDCIji^T$YoxGi_FCVF3-w;o!0TzNb=MxPUvdSbLnD3i@ZREbTPK`u-Db%2yOf-|v z4IzV@;sS$?0)}|?=;lKi8(t!ls&&x<7h@-EGrY=8-F9_=-PCXtk33$g`#6M}`A+#P zy!VgVL@#}Hkpjzf_L|pjtxgA52gp9z5iC}3N-!cP3T{}dA_W;lFzVlXonwkNFs++1 zu+4d{QR>VB8Pn8dE=eU`;mx>RD>}cdO7{; z*br`-BpJ>%DRrg^z(?><3BxOsxSi_(ZeCR^v$@P;ICz3hdtqd7Epjf;Bukg~GsR*- z{xaEb@eK(9B$DB1)d0HLFa+;Md7gMg+^cppl96DfJ7G?L;U5e`q>v>;ivo~Ypg07< zc->AWj4C6Hw786-dPt=WB-sV~@qGPIGvAM0{n{IYb(ixjr>|Q{$Dml*{35Z!@u?{l zab0+x*t7xt4svBOfm{(&k@v=Z;b203!$^O`6WfggXeIA{MWJF* zBS5k!b|-iy7S*n!ArN8UKj#B!6OWB+klC7=|?8#xsndNMu| z7(TIjyvnrFxh3UZ_c_~^6))GbRAoY`*YrYkk8Dpf&KEKL`; z9*DFq=G}BI)1R$y$Z}$?4c9`Qe+YrHa8K;efv%|14dykqTr9S(+v@s;I1Z@KjrMD? z&?duW6v7DmidTjYQmt2O6QMGV&AgdFFDO={kM@KLz>wPVh@pEXN?^y$0|oY#O1HOwg4IaIf&zz(s-n)&)`UVp^Kn!;id*+AF8tC*i{N|*m&ezmSICUx?(bPRJ<{8Pjk@H`UxMQ z)derb>OG+L^|znH#s&n1synxWxt72K15+Zn(w8d5b)@5S6W!)Sn>Jv$ma8_K;ouXb zg!u!fiQR9{+(jyhJWUG?17ZeOI!*v82V2yA=_SA+O}ssu()H{qI9q-rX zLdG0B%nyTFx)hS(vpomUyfxS=&ls!39P@l>Q?!dn2r~zm&|A;>fD}f=Lgl@oex4?~ z?*#?N&bjeX@~Vc6%J0CZCTb?ybxH%K95^s(h;5N&DrhJPsx$!rDLBY1*>oxP3i6PZ z1qx^Z`Oi-J@0|KruXWlOhZV5oChpkZd{H2Qknhu51ge!mp0uxWK;9~S?mWn{|%6<>5H0}FB16Bx?t<)@vLM4fZ zW`XJYeA2Ml0UjuvXG(XZ@jw;H^I`B~0-TF`KmRQ0nlBP?$zvWCHf5)o z1KP>6=tO)|wp3VJ71tI;5GBl5_G<8>-8MlXtLrDnNXjzFBpUyi6K;6Qb^i#rIRIa~ z+#8j6@%a<`08qO=>O8}O&jlO_hJmD>MBh()?I%tr(?hvmm(grCk5MOcNj59G*#5$ z&w9UP6S%$VXLND;n<sS8Q)+z&wxJ5)&amKtrxG9ruGQ{k3wWLvjg0x>?Q%s z#m71KlG9ZdKVeE+k6KxrlVm3-`=nq=i2D=-L@Ma%%;ogWQ&`{|Wgx$Zi&zW8aQpf&RCXe+aAvgIprr|t{u*N0dA=IB9d z-pKCblskNgpHF!DL#gb|^J>eGb}JYBle2J~a^<0}GY;_A=*ic2=pB;ce0}3WFh<<+ zf?uO=wz)(OUWz{=91yRcDd_YzpK?&Jo31{Yj(_qZChSpW(s^>qY>n|3s^<+gVea0V zAV%j5ASF%1eU{8C+;S@x$VDA*v0|7wvaGW+=)1DbdEL+CPW{S4et$snr!oBWUc<^5 z#J5SC^75E8=BGAHfqwH)xT7?__2JW{4&HpQAQdt~w|Ej*&AB8Amm$@!A4@^&{O?<}DxZLf$y>KNfSxp6j*ZO|aJdo){e_vZCj=Fk`vgaO}Jw6(c{qaUsfQ5pb8`9A-3{LvZNQ zL?@-LgHPCi@%v}4+v*0wq?&?SO-D^St$vJw$vH6saEr-QO(YA4!jv9v7xU^mkNI{q zpXtUH{fT450BvMUL0=p+qN{C*3YO}7P}f%X#|3=()NB@YQ+cYA(4W{Ke)JoD2=!%Y zxnCho-VmeVo`ozd_EVj6e%Cx~yzISc3k)%Cux8VrP#-fG?*&))6OS1=@xFBFzU%tx zKQAA6(VIT$R&vOzNmCJd*!X_8`-usS(L`}QK{IP9g8^@)s=2p?Wq3_pKZB#vc=u<~ z@`7#gqx9l3&Y;7QBsMk}jblq+8O85gfpsGfQS(?BvKMJkl{9wb4a5Y50I=Zz82nu( z!X{8O0}93^gAn`wi9icr(nHEzTA!=aMQ8}=5P<$uHH|4?O_FsDK+tveX)Ip>P`t(>^a5 z(g?E1oz+BvY$FO2%M%*ttl3Ozru|LwYUMrmsy67M0yOVR?;Y&FBDrX-NvSv zzo@@9YG{$G(YQ&?k~v!G_S{e-$6WtDn;wec8H%CxB8EXv3yK3##9=KpK~2|5pcXCw zluk@~V@#5kCcZ^uQm#+eiAu76IS`q^kf?x4=Jk7r)$Sz2xqb8Z7^lb4djUIEv(vqw z)(Nwt$Mb*K%e%U5?}Tkv3R>0tPfh}SGJbgUn06e#5hymV({6rBo)`a^Z332<*`McY zTVswY_?uwe*lF{zFy2F*DQv>k)ium=1cXJEt4$ zv?N&@tZ;rs9}w#$!syKLYzyury31dd{0(V(N4jdomCqzkJ@zjD@q1a@29t{twiJVC zF@leoP!Mb3#VtSM>!ps2ozO*3oz){sDF1dnG;$rKz4UgrqeqsOkmAaw=Fb z)q7(>8U6A7vm0XAAmIoJ!>Bb8e6J7A==^LE`#{!i<;j3U3kqG9Jfrj*WC9Y0oN-iZ z!g+--7NB`tkRgqiY2<5gi$74!joJAKWk~rYn%5_g0UIre2cr6q4^VXAPb7XU{jm7_ zYmhICBNvuzsT>a(1-$-*Gk8~aA-Kdo>Q`S#D;_ef3{6hTci65$;C6ZN2?i7)SJ2B8 zk1OzD+HPV|CWvu`jNorI&u&1lan~PT7#l<0JCLK$ z5aeGot81Ak^1m!l*d7Pscrf5~Pvk_IzVXF!7ah_;kIc_?_8YC*B73{Bbf>2EZp--Q zIC`%V+~NULb7CGAd^+H>rRtw!3O)`VijdQxkf7~;t9_lDtf5BuHj%`F0XnXbB~$i% zSvk=9TzZ7IHV%K; zh0p~0d~2w7C@xp$rk*l?Ry+>*;|1yP?N_+;lyqyT**r{|%MjR{X zm~z4x5ffX|rEMaeuU8Ar`q*~Jwya1Vu^0zqMZ2wY8TtJ{xpAdFY_<~T6zwZ2j6z0^ z(4!e7%epDzpJ}4?$^6A(a8UzNh#i)_l#M?20>neI>j5r*FAv!X;@nS{Q?UjN$nC!$+bCx~=Bu$%7F&VzT#`fLG~1#T96)712vTFWo<1;gXaoD%&x?2@sEslbeXj|Eig+{tA;q z-yX28u(D(O=0~ceImY*nnZ0JarZtWKsSIK09yZ8>4#ojKN3S;(k>5KEkAfO!CT3hw z!>l5E1ZQ}FK~#9FDB;|_rs!71tE8c&npiY;ana!Q8LuBqECg83QJ&fV9FM$yrQ%js zgt_ilxe}HQI>)RPgtrmF_G!^@5X%fBsBRtnv&JH&9k!%%(|@n0Qm2dm*AEnpqdAB+%AbIYmvd2Ca{be zRr4C0hX(U`n?JCGI_QYH_8D2)vX3W~&z^$d>?EV`x~HsQ=~r z@1-G3ANRdxc*mC#oQZy2yFN?C3*I8xA1&& zAKgz7mdTueQM`zV#zUoz`$T3sUWdgt!hrnt_^zdYwU!%mwTLcBHn6&B&<5!uUdL)P zBYcVSRfglI+Jx#WKXuNqph^Qx`)r$LaQu?Z8F+dt&%)YjbsHj7Bu5;+lP0xe_Nm;( zeO-s92vx{iOz8Hb^Z#^JKDreN>2I@VYM{)bnCFJLz_+4D(KfX)eSgRRtx-ZovX>&@ z84JHEbuw8y&o~ViSLvtRd@R&x>H*nW;f+A3x~P928O;h^)&|~ zC(`G4&k17?%w8QhU1GP5AM50Gt~p@u%=KU{J9(QH2!+=vZ|*5u$3gNsQD=%R0bfv2 zo#;dllbxQDlEbSl>=g?NR_D)^jt+Zj`X=2&^kCGmwYsj>V$1u=gD(I!k)aof{3zVq zg29qRmXE}Xb0^cQfi~U8@t}k+k%@0anj+(fcSJo*MURPrDk;7;2Wn|bX~<0&Elddu zh^>L>c@?{H2|vO0bXNkk`t~AEU6=dPymdu{p(}x9RLtpy*3-Sl{P@}s7z$T} zq2=HlNR>fF3obnC`YZ#O(Oejqq{<(kn((8`+Y&6f3sz1W%~g{nWh;}M*}NP}v6-e{ zSNorQCp8lEq4H)v9v&b?oPI^0xIdw1TY~-uz)5f&F{|7{;0S8o-yVRglp7FBkME}H zZ$)|)eC4%0@iCsWfZPKR3J)J(WaV3s%-9d#ZBoAko|ckhM{;=5MAlDDA$S|k1HGTs zs7YQLhsh-B?V}3plbzI{s9nLuH3FP_CnWk|cre{n)NRL))*mRbUWmdMu@H}iIChfM z@ib#w@quMqkA&aPFGoRr^{mSa9MNDYzZdx)w8(W%w}7)ZC9uD7lq*WttIOeiVgebD z+>^Vggz&zgB|1HY(>4+CyP!u0is^CLJ`IU!9-<*a3Hzpn ztx!_oypez@t@e@r8)jmNfiJdcego-Cjml~&HOP*{ld1n4%NnN5r0aKpr zH_JKCI##8e-|j6mIE!WAs34=?R@bQNeDGT?!9TyQn5H@Ox8*%dt*YcZyl@H6;d||S?wgSy7 z&t)3SzxzO-%0yeGKYs>oQbusEt;yf2ADCcF@-xtZ#_J;`1+9KU$eXTGf6BbuQjC$* zeZ_wpNGL3-9#i_#8{u?tT|9+?Ee9bM#P(^;Wg1=_-j)Ox04Bw!w^s{E*q9!6pCG2{ z4T#@VPa5qzw{|k0Cq3;;oF=pnbi$cnZHo3;a6)*KScgghT*cR)6n5_l`@+Y5!;E>K_T9$Hqwqbof$3@L7Pin2ng& zAb{8(+`0c3#G)R+o{)}!XFyqo-zYvOgqMAI4!tD!zs*EP0%n!q#26|%+mZiOM4YLo zRlZ`CiN0b5n5FPfPruDx^kaL+9tjXqz+{BMPSX%b`;sk?6V}>C4?7?E!GwH4CWfv( zzOM>o`cuj%*1K@KC?==LWm6K{v`Z)6M~W*IJY-{f#J2yfloz}6V|(mVDixh#S@;fpED#O5CKg~JvQ4f}puWLoNKlGQHS>ItA?i=|$2X6DtY-Ebh_P4@NPKM` z%S3+3RIW+=M@4e^*NQr=1%rWDt;23N?RKL?P?Wp{0nx_Yn`a@L>Ymwi^I84Uhctiu za{6cPnnia@Mr{h_)>KAqcrvERfQiatNuywliFbP2joQei;FamSAKbB%KV+U?|B2;} zWmZlhG$3GX+HOqUxZK%X7%Qc|__bdDERb^`6_V9oPdjpT5+E%)YEx%_C-n7dt}nCy z@0kK}@RJ_SQqmBAcUy}(T@v-ttRF5?2f=!P&O~~$Fat|sIiB0{*>Mozc0QaE+D**VA zhr9qVOaTNwFHuDPp`rZWe+qzGr-$O{zt0{(?oE(DAN`QGzZG;UJ>8dbRt^>}ESuby zT4THF|HxS^1#HE~K^fwJqon_9Hj^F8`QEQtN_6o9OP?vzA%*zio%g#MRJV{24v8J( z$YM#zU(h^8_}`jA5ZIG~&pZkf4;R>IMwu$F_jK~+5xaCc!PywFEzCnBx}Y{bYxvEv!`D3g3VLQntvVL< zpJ0E6rRuo)L^FadWDU7ktGbRV^KriqR-d8VzsGJ`oIsgieZb(H^A`;RyjWoZOSXvM z#?giA-DeWGV}$M=;1QHR?g`or&3IH#o*Mx|`W00l1V+2wab00BDV@YJowF)!{arb_ z$%oJ@ovWYS`UBv=qMI)(xEoEQK_4sW_f=?JJ-M9|Re3hWL~sNY9r_pJ+&_#>40{B9 z@4Fyn?ApMyjIO$%*+>=TX=ZA4bVUY%nCK@|>~NO&$j-huud!zrf;1;EK-@e8P13)- z{q?ap4x0A9^(V$Ac!c(NWK{2dG(O>7B{!_^_`-IZ_No7_Y;f8JIlwLY|3=vaEI4@6 z^^AWK858q>S7|>8aP(S{?2W5dM8~SA8c0wRj|rc6Ru?U)oneoBC&PrsYK=jL?uH>& zR`Y9@+PybQRDz(?ny3{c1FfE=YYDO6V3&gjipsV(PaXy?C3q_NAPmqT?8 zb#x!P`X2`6@*j)%8TJHD4U>2KUQ^RoC$W`##!hy&Zz-TZNseso6g@+W+ig=JAIwM}Sph|S3a>l)h^rC^0{D`<_E6%^< z`NYSUexo^=aeRzU_Q~ekCqPWes!l*YHVlLKZ!1CnPxmn1st?&9M}gG!;v+DFRKx04 zA2xuxx~Iw7Au%R}LXgpbElyKxM)Bovl4;sEuP+#oc>GAcoFD+eVH0G>5Ep!80zQ|OoL+i2+u865y9yRCQqrb zNG-|3fI0N33OcMRr#&$#+VgTYN!*)gV)>6-|EWj?ov$a@LHOn+y`te*nde1k*S|-b zJjjQOkfvd@r7}|}&FAx}{?OaIeI3vtb71h4Fn6w_m#JsK&rq@x5Z77Mo>D^dz zXK6wT=*X$A+?}n(2Wb8``jr2@By@Jx2qb!y%vG)Eq|E8}F07Q&;>_x2N6TjoUPZeV zJYP)aS#q0m#C>|zvarARzV7tN)^2pOW%w`QyIQ>fW-}*QMcP5PzuM)0Q->Bdp+wgc zA{w6FY?Xd*hS8V&=SmJ;@hbTN@ymaT+(9`l1vqMC68dU_jt9l{jOw9W{okBsfZyp6 zOn7Y*USjSIpCDg{*5fJOlu;Wf1ZL0qyq(!tJP#0w+ysM+UYI=Vff^d;kopwMK09p5 zIF&lN8~4St+iU_4J+|#1+qd*8njiq|;dgG;y?xaWTb4fi6DIT+S@a4U4h25^lt=-v zG`W9Zf=$R0;(t#N=@>9j#lI(jWG*Cl^nY~%z%Ylp0))$je*lidw_TT8g>S8voutO} z)zgkrE>6E}0@N|HzlQgCP8MrUx`JkE6ee~o@>ksBIXf%?{s+ksn^{jzxlHQ3suR~N zzc(p7whj_XMO;@;e^qX>_xNQ_dpT&CU)$|Mwy@wb}UdTX46_;hz`NBfjU} z^B(fK?>8Gy#odamTWP{gYMZ7u289T4H{;%JHXhtbsC#xEuC=V)k`3Azzo=r{Y`omK z5!h_Z)lQqcjU?F|?xzdF+iYYWnq2WF|I5|1Fv5SVLb8SFFE{`4C*waZJ=|6P1E55H zt_{1kpGz^EjX~p0S=+u@rFSbv1Uoj{gUjr}RWDuwGhlw|23~J@prwjGY)8<6mlPjK z7vCTEXh^Y69z1G)yyvrjX@ys|8?s5Liw%=Y12F+^9oEXL`?|D&5O^j89tEXW0bYN? z6MJu_nJw@x@!@}VWD)WSB0L_NYIVx}0QB-N+&^$VwTH(K760#}>l2WHWJA?#WzmQ1 zfHEct$`26G?1phx$0jaH}Aq+%l*64N>kw#j%pac+C& z<)KDAIHo%%j2k=#exbc^-Uu)%`qjwam^GL=;GN@6d#qZ(bV$+=&_#L(jkio;A^l6h zzb>srLpLY4wYhZK{5+;8S?Tr`EkT(v_PJ>LG4($fPvbR-%yH%|FqzP;NvDLW!LxQN zLEF9nW7U|x7|FMfR;NQ0mL}?-F_rUqIA%-;=l^L7=C_`P{p}qy;4cn8Lij}m+14~4 z1$wl0z|S#O-$HTIP6PDRcThIQW@1^zwlYhlYYbA0sgq)k2CxAc)FZwB^KPH?oYi?o zjW$8ri_}J%VX5`U+gNr}j0^45H{U?^ROkDvbW1|Bhbyo7#0Xy3AqNK=cJS>##Poa8 z0Ecsy3;#(gw7}#zA9Ze;_>k9`3};_}HI(R|NBm9onR>6aCmz9@=zdI7OEsa3Znn_4 zw0&o-@`}hEvvzx97`}d37C`z`;HmNyw7T5~o&2M$SmkBVQ-!cMzP5iyZ|3=5oXDKX zNCSjfsf%JjEYMUC3*S0%c;VRdnfrSq;Dex5(EgK<@A4BO{0miH0~L|42T*|fRn9)Z z(Q(WV#so|C?6)GwASiCCN*;4@`s?UK<_BrxC>%}I;4K245n6YOTS^$+c)=I-jinWy zE!Mvz8@%{GBqs!pQYkP;3@lKQ`{11~3<<&cee#9p-*VhC!WaJ-l40a+>K!am;iOX3 zgIdHHou4Kmq@N2EAsh2(dh~Z(UH{23G7tFt6PKS1SVdyy^r7qM&)onEO50aeIl4aI z$ASD?!Y&DoetjL8FSJE7Qs;nbYqAp;II#Av)Gf=uQZkF2R`w^~Eec~cMN^E2Ptb9s zSLicT_o|`X8xtKC{A?{73>Gcw>?*OFopFYx{kQ1KVsVeT26S;ezrO^Ezg;QWu+6aY zt(=^n`HIDTf;<$KpR($=xGq}@MtShI*_KT^KK=BT5H(F4Fd7YcI!>m$+v{LgpfjDanCVCI~Or&wP~#E}921<*CO ze&&bfL~%ZguE`570Dcap^*%Z$$K1=yLq@jl@7PH95NI6fU&j+!9ce%}9m{Ijf^i4k zZIxi^vOt>z9Z#5e?JwCNkeUPJ(*PdT`^uV>H#GiT&Ezn?U_pM}U+6^quGZaWfi}6J z9k;FEOw*^cS~EdHe;r)1{&QeqqeFiDpIV+R7RDl#5;7@?H^z8;gUXvfbuPNDrjHAt z=wS7XGBssg0^S>5ir%=zdld! zN|U^6)p0%PRt&>o_k_y|{>h+Ia=>}%oZj;}CS_`j_Dl;)_ujkX38EHMe_?5p-7ay; zL|cou%C0$gf{clTB_-6gq`=#0G7>~H0;HQu4rlJMZ5b?x5*aLb;9cBk)yYhKCKBGo zVXKZe-!l7wsh-o2pu$n0w>yqmMAr?t87^@KRXYP+#f1C5mi1-6aAW(mU%lc|{Enl_ zw>)-!WBS){kET;`b$P1Bk>h0{AI8f)=2x7DN3-2dFDzBiyv5M3UgF?~RCF$D9FqQ# zI$iX~>tygt9m+kFH(6_h@n9D6P8P-CQq^4d)47`Il^yeoK?83Cc0gc+PS+YrTc37( zj{VcQjHIHbmTrlr+*8}PyH34z&Oe^qfEucKGjch^;Ot?n+%~@L`sppl?ATh=U09#p zS7Er1UE%+xG($0ZP^6h_^7xXHZ5zQdiOg+*$%_iHzQ7^@_ZB-NZavvWWANouJQ{bwCXOr;)fjM92&7L z3MocVsP{w}+MB$*#qG6h_<1~}Xi%@O^Ix!I%G4A4b6*h3u^sMril)rRo`4#(ivK1d z^bk>KvwoB9rQOC?5SH^yEX53?=Gr==8%Dq3Vlr#>T#YUhBgYDB9(7vYQd2^LPgrtH z<>VEUv(NS49UfQ1HC3i+tSx36QszPCA;_>RxR@gs;y#V{=DmfF*Z)OB^u~iyY9X(` z^iW5M&PIjgqS_<2I`K<5%SS&33Yufn-VE~>B%~JyuWmJC+MzR3vOyaX%p?juJNo#Ras0UQy`qb$wpy~)nEcWP{!J%S4Q=TeZ%Z(W(^V}q;EyK@`L#+e zIiI79s#jn-u55BpN6)k=;%F1W8YHxDS-cs-eUS7(wf4#T=LaW;)xa93t9xbZltWj2+^T9Bd zHm&FGnab{tVuj^aPW#0s{Mw0D>G1DH@XTG!pgUJ>!^F^vG9QZVl7#YR@O5J|MghN# zD?#Qj?PyZz0rKUMZ`ec9&A8D+{`hMp%((&|%l&{yrEeu3CUK^>{AH5RaEwB|ZpBEF z#Mzw!lONf;k6{b;NWS9I=YBD5D{zoArno6(Br5=?7K`eseNY7+6g{pHuYC_gj~-h{hVAJrd(%uI}rD| z*sdirWbdcjJ5pf~*e}G^ovV@Sr#H45=`xPZ!RNaZqlPX}owLan^}N;^liE#%iB1~w z+t174uMfYHZ+NFORlF9j>v1xo$k>c0%lI+{EX7-6?og4$F@AcT@BrdNu8!XZW`m** zqqb+?_?9t3SoeHN%-`i>Y$i&2Pxomqxs;I-GEt(vLr$QX7lz(aLmcP^2uc^!Ft0n zk)^AqTl41>tU36}**9ZXcwSe>Ne6v?rZ?C9ONAbFB=go6>$vT2Hm|ulWiHiRy@5vA zSSQonW*M5|aLH-{cRsb}vU;9T%C-7hLa-L+=qtypTa{xU111S1Nrp~5Vab)x|KQMp zxx77{8CzSectkzec;&2@Rtm*@WEYpzl)6_2_d917`C3V(IdQA`l@lKyRn1@ETmJE@ z9bZLa7U=mc)D4fh&HHwzQV>XDeFTNHKZ(#xf~f>+py4|MXb6ZPC8|EeE5&dJA_f^; z872U$0TCQc5P%Oyvc!Ohas-NGW$2j30ufPyq0?qcmC=JDDG>n6L57qBM1KbOU-|vL zi`x~6p;jriPUQ)l2T`J1q!gYj>Yd~;Mh9rd0L;wQQV^kTGK7`7mFmSTN;+nI1SBy*Ri12L5jeP2edG0>H)0RP7eyD<{<=hvhUS9Uq ztQ!oLT3#$=w-$OV2Nf`9cvC)qUYQ#YYY~0C;CsHdOC`>`$g`6Pca1F;ft{%ycOtUpD+U1DVap4dCXg8}~4MEOgX$;tL^l~pbF-}6i@ zaOu4c@B0x>RpqttI;-TwuTeZ2wM^R2@7hzp5??*6vHJ3T>d=|R{!60ixf+`f)^(M| z^z=-B&B_8KQ3>6V6q1mvCL_Aeh1_8Eedx4@IytikdK;n1{jNl+&EXcA0^ zXl=VT7~G(2U|=>RvQ7vj?Sus&EEtd_DPsgmemF4TPX)YxZd|4WrbO4?71(GvPU-4e%{^b z(>I4656ZM~sjRFKoc?4HhH8!_(ugM7>R6RJ)vs!k>nK4Lr3Y~u|E;RWFm zB=aEi`LFFyj(0t!L9meSu~0s(2E`XOD_l38{`lPKh|ZAt$24Mj_9u%4zz?q=dzmAVgGfP7nni4^ZHxgyQgutj&-h%U$%(N z0WZFa+UJ{ZAM)vccfxDQ4qBbPGwqkgO&wVno8{O)*68(n*fp=$IlW)wv@Wtq#UnQx z0O?HlnQ-SKzL3OE2gaRko6S3|8mCq`i#2D$(G3Xa0@g6o4;$kscaAa3ldNGLm(YN-)qN!l0ik0Gm=7KpWNJCV>GSd?A{1bcjh2 zfTe#PGN8bo=l%vfFo$%ISpBMkvPeX{jw#PTh0iPD@`@$xKS1Sw5b{av^1)GRT3l2@ z*2?k0aQ_vrCx+cS!1oE#!gdb3&9Zm+WXI^~wA}<$*7QVD7!T?m)Sc=*9gfu~|1hF%cf`)aCB4bj@BqCp8q&QQlyn07K#jom%!}6`- zm#^gpuL0Ozs%afAXqaPcpB$C;%R6-(>0D*oQlGNzn*(8$tv>+JGXA}knO&CNt9?gys zlz;Q^s%`LA(#+$*BM`Q=^Dq<)3ce(;`(Q9v$QU{Sr`navg+(GB=5&Od7sBcjF?0xv zIUxXH{Oy-Du`q;~=75IQJbdau%ZmzDquC`D>OKtMVq z^coV%iT`ol5AQk8b3fcO#<}-HGBWneT6@p6eslijnse@tZ#0z%@u~4KFfa&Jlwa#$ zU|`Roe=p+Vpue3E6Z04t1eA{Q@^4h++vt+V%3cfdwc9VBz6LDc~y7Rt+#ByY^u49D0mdhI;_h@F6BEqQu@#E<> zri?>WK&hC&7>NW%Q`Zv`?9dNt?{Wy7Ro}%Dn5wzHExBQ^!;~p+UKkL>NMr8FzRnYT zrlc}3rP;Ujm|+E{iIO#cJPN`1ZEj(qh0%aT-lgEwJg*fps7@94!>%I1%9uxo5p|{@ zX1wozZ!dP&VPpSMX`VMSB8P_{F=dkg?!(~aQ;Dt1=tlB6Qc0#3=fqaZ&KrRQx)vgtp9ir3QyIFZSDCj=Lw}=UIMKTIX_7(mc=KzWlJHkUdrGxjOuC542V) zEa#CH*~0hjNGB>xo1aEqz*I1Y(r(mBZ9cp=wCQx(I@}g)gr$}CM0g}@^o%&!qwkA^ zY;7J5PWPyY>Y-^~Dmi<{u+MRGc!`boP~wNvQl((=Gs}n{uu#b#mRgBv4MJ(DlvFP^ zqDvVF5SSr-*l$I3`dpGR5w5ovx5t?-EKeH4o_xlnYy9M_D7juHfQ5+1dH6@`gP)Ax z_6}$MR#;HwJ%4$+q^nHzdto5#6JCLAUV`(6#g|8PIE7rI&)*sTcAZVClIY^#3*FTs zV8J2b9`bv~0Ot~o483=MUwk|sv7qt=SJ4YWk#rnCDeEWqMPZle_XCeVRf4g<%D+%53jm6i%UsyMZJ2wc-Xny@6wPKO_A~H6P=LE55quaQw z%aE>TwYm+K^6X71OG(XB82Kf=A!2u7O$Iq~`WAIGNzdIx{)?~np?HjWe@N7)8Xv zGgQ4{2Vja&-Gk>%yuk8Qm*G$hHW?}qxrq$%Gfc0nqzCVC=t3W2_1QeZd@IA0g~wSy z)XcaeW{GKpA1ljl^jJ8&&XV=l1ESEcf7mJ?Y5aNq1-m}X=iOt8(BP@Z7U7t@*wIh1 z85sp56CD_lAMoBri89oGpd<;6WYkt>N{Ro>i1j+2OD2P{Oqr^gd?7)P5yHg!$?H4$ z=LelJ?_UIer`aTpE!NYcg(_%F;Z<_NBBD$9b_oOt#}yt=GQAh-qN;mMT{p z&Zs?OBKb&ALN)ael=<-+!Ftd-$GXp3?h~%2h+p#0nLjC;FmtA`vWI_T+4>Z#VyYaY zY_FXE*<$)pGm~-Qz6=pF>!*jCa-L$>4A+94sW*8NwM8YCC4cIl6!+<8RWvGEHOQ3? zct=@8S;cY;#;>baCiu z+K@(`rjZt$X3s&%mdQ!43$Fj&P*U`^dc9)6!1%LHv8T>f;z$vPIn+W(PRP_d9VQFq ztOm>~JC!?OI+?XGwMjbdKm&H4Eq^#v+L_Fpx|#+|2SPu>>|l&ADp(mT2D&u+NN`q= z#p#>l7_@Ryv}|gy?^${L6GaMZ!VR_!;f)#5We=$hzYT-L8mf7*!`^K_jSLp8me(x? zXBpe9+~o$L2IX_F>H_MN7QeKYUFsc(EsD1SoUW1#>5upd1i&^oQzuv6Z)nx>+48Sn z1->`&#__&*AMxJneaCLW{K35SZqqscx$tiO9DJq%9=LaQA+lRIbstgHe{N;RCn5mg zeMIn{Ae`_UPB-BqK{Vkwfi>Y{LT5sHD(!f)1f2xoXF@cD&)_s#d={2wu0gA>`@cb% zmu*s2;(i3`3e5P;Y?WV>1I7f$<;L*Gs>kVaX2yEQy~a7m-A$fwn{o4Vx0|+_mSkvV z>}8N=%-6l)wC4mveQJoD!`pJ(`nsl(iGolh=!oT-7{kv9`Cc7B*DnLv8M<^IhYqN2M`ugRJMiNqi7WA|DnWW*^o_s)-Gx zKcWXxtfuoaT3HRWy*_vidMi)D&d%cqoc_}q>PS;@q3N4rA#r<2&_d;9Z7hODkJTFzkau{^qS+%e1ceaRo z)_TTzb$Kp(iEI<$%15DIe{hJdWYnUi^D-ISUN8K%d~I<}eoepqZCp&)(7WE!4K6Y2 z&$%NBz~w^NN=X$8K>Wk{!^<9bQ6jm1_u?9-HCOsKO|6#<_Ns+vJU3D`&gneAlItF5 z9`GGq&lIBAqu^$TU9<02z}}XfKFZqmQF1n-%rWz*&6WP=+^+XgS=Y)7XM9trScv^0x7QEt)zvXSpqYar(ud4~Xyd5SIG@l*8`SwsrlmQ)2G(RiAKB$!DUfTtksJ zg%+#Oo~J*y6_bWYAq#iykRL@=>uEz(LKW;4ahgea?4kmG!aFYaovmJy<1IP# zd0L_&X9Kg3T`A=O7GN^Jy`VU)(d^NJ%-s4fKrw&lh10Fjjbi+sl%Xu}-CZKIZi_3XKW69$$p4~R%VR2_4R1q?T0 zz;;E2Hbd3=A0zmDjR*ewh3Dk9+78 z{O@;|S(BgetQ9aggok2l;}((Y%`%vj=n)PY=$H!0xoSJnoCCr|2u!$@+luO9>nI!3 zNdU8xCD`20T4lmZurcu%QrI%FRsJOBZQks39Qj{L9D%!!x={tAfjq0%n>IW7D3Gt6 z&-Q}7T^F(h@1Y&)65QCYsih<35fr%@F@!x*3F@;*z zeIPje7qNpJM!yNEsGsbAAN5~z6@9=6Z)4*BBL6R9JWOn7jX!@L{%^Pa&jeviSh#bs z-~SN(i5kBPdi!m31>f>eo zv2#-HVEF&bi$l)y(S!r3?kpOx$IHt?M=LA!jlrlt%+4c@s7n)z)ROw&mJhwt0Qa5g z-cdkfo$IwfnGI|x@$p!{E*=D~IdhPmUz%%`{D5#8=948#en4?2?%o$b1`{V|HD(y5B$gUn0 z_Q&u;dD^2JRVxkxY>1p-nZzGMd|fLB1bGSj7A8a|3;#iX!xIg5Vnq6Y-ZNZKl!K~& zU&Axqt2Fk(0+aSmA^fj4%-A!hY&vh!?E&s;+v5-97GQwZ-s4x{uoB< zcsxUpx3F)ZFR02haBylqr~hB^`9F~sZ-|D<5Il7Y{0|sL|0g;f4MeL!we^2q$Bn<@ z6QoTi;2-A?vw9h7>1uS6BKl7z658kYSKK3IeE9gk+0K7ifu#{1gAt8E5A#0*nb+d4 zxIrre75acJ&9>3Q4#VHi!bUd_Xt~oy zf1`()CnuVqXX!1C^2|o@`*%N{)~-R%;@kR$#|u5oSN4_Dh3)BOBE^X9A$k~(^8eMF zNB>xqYZO-ROyT-RKww}GiH02>ETKHzidmLZfk22acb>}a>G~#fs)vqADpJ9}*?qMD z?+uc5D+0JTl7jR3ZVEIrGC3=EFLyuP8on7Y4Vi>&8pPu$At{lW(W+C^VRun?WwtL> zuqM%xv>J9PvfIbEaSgC&JB z>8AzmsC_b0&~c4i=v@PT-B9DPvyIN+Ly*3MP;?aVMJfjmT2#Zwbwi!4=Me@ZH%YKs zoB#ef_VG>iq!Ynoh$4%=*&o9w1M6QLH(fNPF~{FXwIVOz^MmkmM#|cY3+F0th4HrH zC$oEYw$ZA`O4m*jOV_{&ED)p1Li0;U`L2MLuSDXJ<~|EAcXRCjWGa>Q(A%_QIlU09C2mm z?t$RgK18dK@Z#_!Cmk=y&HN}z+23|0|Tp4}& z{VRm<{%m#hD_PeBLNmLRDyv4QOTVxK|vF33*Zwbo%3Xw=^lbq9C9;aiP_5 zW}qPOkjiJ#vEr343RC*U)CxK1z@x>;_By?8RaGm5U;bh(;;w9{CI5a@YPH!h>1rpp zZl??A3M>W%9ra!j%v9`LZ5)rX%G~~S^4_f{rNPG_PE+5rfrP6orON^(Q&d?{>#7TF zkmv!>i9K3E^$yxrMmC%NL`KPSCojrzdD9bBgyX^LIf( z0h>duN(!rz%IR#CZmv`9Rz)-?wjw1a>}ofFF3rvlSFmOWK1c3MN37+jOpa9=hjC#2 zUNY&UPR_vzJbDNkoU&cvou z6-bId2O-vec$YMOmZQylRDit+b51Eg_;6E~ z(H%D)h~-~1ma}~D*{%TbFX0&m);0E%+AXhs@_*zl3@i;aGdagT()veM#Khesm1)eF zcxd=9VnH-5*0Iw`{Ke7#5?21D#$+vY>?lQP_AlbeG&Cod`yEIABPoW;NTFlLYqNJz z|032!lV;9(Kk2_{_J6AQ?n+nNRB4AuBp9sdYxd7U2LrD*uFDdIT*3a>Atdn3u7$`f zFhK6jYl43v4HhO$_I%d`lD`A|8p&pr|5dq%Sj#gNBGCn}gd%^W(ky#~{qrL9y=It% zk`JK$ZZfNQ3+kwVf3Wt!{NdpfGO7pvxFr~2A5~>y?fshtHu`nmy!cmKkmE8K)nLRG z{c|++gcrT`@!0u3(SGEg#`mG;79jaIRJ;j8qXNGX7yqB1AM-`1<@o>8 zy5Y`o^f9sh%Lc?_gbV%uSm`01NkSUoNZ>8Z&=M=4sNgnjXWnQ_pb=>|w_{4A!_tzvwmFq341iTV$?ks0$XqZ!Qs%@fMu8t?Z-ze|547bQk<0O2-Eq%ME^);59bKn87#FKLp zgKV_7|8ks?*~7fwJj&zvrqBSk%hlW4yY@L%6F=~<(|)}gC3@6zHefGxmc4m(f4h1g zMcMP`;m767?n*Oh)WSqcAnKwagqHce-?l&@6$OvkGa~VQ-b`oQf{Lpwso(&=xt0QQ zBC*Y6UT@g!tXlr08W1^MlnFV!cqEOG%@X%@gC&&-U<)SCw|u#nGbNQxf}MF4oaMc{ zIT@apqzC%eey%%MKuO>_H9P3 z;_hy7Dxl-@vi6E5<2km32x2MGz1(2>m1>Cvk2ftRsi$0LiR@0O5odH{N946Vrm|QJ ziQ#PM;lEiZyft1wKS>Ia=(*}W8V{zt7A2jk_oy1eh9Cw3DNBaZKKo6>EVsaR>8WRC z^q%^V!mFO0vW-xe)wE&l+nf~v>cS->DL~%z<%atO1bDMf`IX8(?-MrUc;NBZl$UDL zm9UM!pp~ozLZm!&3u~_<7Av7kB~oS^+{>k~3E4-qdLlcP>YteCL?~91Y~a~$r;E-F zgh`T@MxKz<`J0oz2gK?j&RiZd8X_-UWrCAdx~b=#Z=Ad}!s3w13EY?HXp7lgnpK1U z!+jf!Q%Dgp*8xtS^G;YzhrqfQ%r0Df&_^VU_T& z4_e8*?Y`bNMXtvcAE7;w=A8{>E5r0{h;+bsj*#OAd88Yn zwp4$5HYTC)niH~X{BSG)FK>8on_+m9M%_Oqe* z@-Di`)h=i}n)T-Ix1kF65;b!WiQip22#?}o9;1~7-`AH^rlKLYvlUY5Hf3ND5COZo zsRtMdZI~nHTq-n?F7&>-&Xy!fL6!8C@JQZ%Fmdv>{SJP?6%K>Np`p~(SkN($?(eR! zCObXHy}aK7IqZUu)x4NrtKE_JmN&M$j6bNhf5yt{Juz}~1BI20Yz^Z{#V?e~bTlH+ zR^zx!9fj@K2|i745d7?ay_H#UXS)ua9{Fi=|e|Jbo+TK@vsRXMr8~AS{8r@&PX`PAhdpUK>*KkvV%fSU7!y2TUm8`sU z2*ztn67);naB+LqNa<`uA!J_=0@P~2(;dAoV*0+N14`xrQax={4;}P{%UrFKs$HR! zMXL7&+`1LR>~~U)#FCglz&#TCuI}QcN5j(KPFc6@Er-fC{>65{TZ%<;ltVH&+jPdi!^EKj-EZbuC zPoLV*9ucC_`XYA=`6(%gIcS4sRXN-S9%RuIf~*L^M+4TTdc2fZ|Lo)PTSPYm)&2S_ z6M(ogcux(8Pigi}7Iq81>IGcm=e@GwLVNrBCwjsHNKfy>&Yi`H*E2hLUO#_8cPA-3 zYEN>qPHPq^K4%wqxo=0)xZzG4^`%)Gm-EDyAraLVfFmkpdBsKkX<;`0%fv>|5+o^h z{gf1eBeqFIHEnjZkE$&FhAE?}GH z8_T!i`iHhFriC|~tfbs*)+`!gsP%fm^+%PjO;vr=rNa1wljb$QYrXtTjXnL{MOgDq zkmD&?TNMAr%199u!!82=wCHe+T6r+7DR4F<0_L0gaJj*Ac4p|vrcmsj+@7mWB}D;o zxM9BMILhKD`211CeWm9$IyIvf_j+;E?p%uFt&0`Q^u=FZ_$t17{j{q&G={X`E}ZugD3vm(F}L}w5^}jnPqvQjn+Je2IyX(UH&ci#wj_GP9D1F_4!<=try<>cxltH;Zebq@gtZ6;l5o(yT z-5GUd2sL+PQ(Cixnavus5KQC#d|M+~-KtM1*<`S{N>yRAr%}7=Ve;wwaI>eteV}FV zhNv}Z*}UWMr(PkN@1y2wv9puoL4O|5<1Ri{=lElv@0}s`2oElZ`BOl9pa6g1^k!TG zV4-0!rW|$CzU21!YS|Z<-<_f66q+jp!)S}t3lvaEHw&RwRvaJLw9vpU@uQA(5UZSZ z7y5YL5rXP)@!UJAC@sPOebAJ3;MMTM$J7{QHv+)L7nBdkU4W?!VICH6CWG@j7AI(#xvp3;IuO4g*LH zBtK9SJ5E+#D?eEWjyS!jjx&K-M(Dldv5H(wz3Z7&SL-9Ua5`S8OmGTiC=I9%3yWV& zo1IM8no}+!fuz{y=ic$mQ1~o+&%gdtdug)`2i^xPf1Cczda6JAP@n$10<3Ast=|!r z)}(D7pOfMpT#}*Ugr(nhXPk3K4N+#f&dFVjTzM+88sufZJTESHy-lS-(3Vtq)N!#U z>phlnz-e)llY9ON`KQ!3RiqH{jWs2##n;(ZM7a7)ihgkB5gmaX(JStcLR3%s?H+d^!KImW$ZD7`9Llq`Q9R&v?AgNxk2BPosSiIaJx`lb<6r8;i!G~TSR~0DD^*Uw^ z)!vnqd*;LpJp>cadv?|~`6grcI;q(S7Mxi#dI8o;x4f(8r4kbgTi>_j`^Ilo)gXN? z%uQb1Cfy^FsxnuUsNFf-xviljveG`&1`o56Bh zzEgE_j84I+sWJ6d^HdXY^uQ`FlJJiWLoN(|e2L~$h;{yLdQJy5>Wha(;N=U|w>8z> zK$T#U)!^YI59mBwer=PKj`#RZ@w=QCPS>Cou#O}0!$%3EQL|cG zjb%k1g{fw~TbbN(8SU(V!i)?thitO~?d%?;d)|3j|GK5f`1~`3r|rV^mj&Bqe9jGj z6Ju`q^d-PnDn2CJMQkH-v}b5s-)Yh0Qp_YX+$sD0Zvbl@>D~1%qq4>l>|?!l-{PB{ zjn5Ln7A9SPW?C+xno`-lFgh`znxHu*#eb3J9bO{^bKJOme>z z#ZWKQ_4%kl#=|;#Rp({|%sSAmJ2cMm8FzNxu5fNAs^K27p)xAW_nv6}DA#{(5xau9 zBKc$Nw!)Uhr{ONgRSBH1)!QL4v+s2WhupyhlU%ONwWF6`|ks==jOc`cq~RJkolv`G^lju=h~@y6x>Bi3Jq zz+c?9On_V9Bp;-k{eOAd-%Fe#`3e({I)Xq8$R}5pYNdlJ!R9n?XdDeD$oXi7k)Z1Y zC|}fw#az5zFQ;k28h&P-$YtLB>OCsN`(k-s=&0gOKDdbLqC@*n?$GUNCM3`A+9&0} ztK`osLib>OG$z#)>!b}4Y`87^sZDu>?kL|6fCxyTU~>yXLQv^L_}6b8s;1sQ+Js`> z1g);L90?anT{dYH)s+>cvUm>yP!}OO-ZXGUAa~oIpFk<$`!?-XD%baJYOl9g5*`6; zGov+YnJ9V=sc8(<5>kKhm3y4qPKT%%fa55*Rc|+B_}X$`YLcY_a4wgC7y1jcA=WVz zb`u5p0dU?2j^@9%zf>tf2176>GuwBht~wo)_nSrT^%t;ImilQt;^33Lx=xv0^@q#q zK0oR^y=bMdkgyGS3DMZGBDI6XWA28ZYNJ!}8F71~SyXMLP^izTwuHbm#T#?s(k(l% z*+PR}bvJU|PI0uTmv3CW0k3$A+Fwn6_O4Y=0|*{-cyVn|u4+0NeeNTTMUzbw& z=FS7d5C#f1KYzMd6(R-RuSQK@@|Pxf1_ysqY!vhuSAN0SAYpLDm1lm7Qt}oFEQ%u% zZG2TC3Jx}+9tK)kwqdA8-M?-Ie2Ab`1opa(S3_88e2p&d=8m~A36%G`sHSG-Q&5SDs?GH&0 zoN~5(RzbhHL=u*IPlBs`-R&|dDzZh_w21Z^SAE9e!(&=8Uj7Mf`&Pmfnj3hliSKu_ zh*10+@b{mV#`Alg}cVrj(; zyLuuM{?voQt%8FWy&1VT`qH@<>7a|u3?NEAMbK@UUsZtm%&Gp(V5L@4c!yx@kO25L zOR1&Z$?CLTAL%>9?vKqHYuY=;#VMaFSitAtUbbH}wA%2B7UE{k+GDF>(75@~U8+`d zIX32*Uj{3e<1iVv_L2IgvH zv)O9q2DHT)`5Am5t;h5hH$e-hI3!XMm&L44gvO>{3x$o;T%lK+FRaej*)9{-X)$@Q zxdBhO%s&YP*eunI{9)B1!9{g(cH?0L`IoXp-Df*zHi|h>d>&OIuQX?Dgs>JGUxJ=6 z_`Qng=+M1y?yQDP1%nvU5DI^LYPNGf@oX)6bykPtgYwre>D=o^5Cz z9iENnB9M)wgFKkEAxX~0xgsQjjw-gZb1E4V@XbXI#o+k%4Bk>noH!{iqpY49dL`7( z?l29^G?>2j-QCLR^tjjAUSLQks%tQ7V1{bRN759c5qqep7JsnOfPC!AXr*`tu01*9 zKFHoiwY&V&Ir+Q?8`kh4_5D7 zwUeV&bcKsv(GF(vY5{q9E z>6Ew*Pb{%8;&d;mwVtU(z>2UBgqUSb#mikx9avl(SXV#N*;m3kDQi_6Ztkui(o~Zs z$Z0yZX@<&Ef@WY`%{OkE_Da`lgu>ROlu=g*Rj_}?pTVPw^%)0S0B15M$!VJ^{eAz_ z?;AV^V}1jk{2ud0a##ud)Ocm%4m~WcxNV#>l^K(=fxCJ_BttgRu?8An2Z%4k6;Thb zud=pMdyyYa=iHfY=UViZTYNi-*pnGFLihuIT5Pm)^l$o!e8m1JO=9zgk z-k(#vyLz^g8Np3?GRza^!D^(t(E&&|=_(_|erYrcw~1bFa{N<43D!eh2myiJi|Ix1 zG`3rED#F%SZ0!gtBgBm$x}~K|6JYh(VhrYYW7!vzY3>p9DCnSVey)lWrLoiEAyhfV zTxV{#aE_4l!wL{{zHSsDY4qQK7qj3|i{?yuM)DtU1L)DIowk!IP2O|0vJ0Jb1`|MQ z$;Zr9OVa~AHTf1b;UFoyOrP>rb6YYkYEu7-2ot{$T6NPmG*asyUIclPE*97tV}G3= zEaCM(w1pQ6{^-$`Zm{jn1cLmRJwfy=&W4h-<3oVnQO*iM`d0Q{Dh;Vo&BNv+Zf>#o zz-l9%wbmI;&i(tBX&H(iSKwLO*dy(k{N8+8UpUsHGlq%F7SQ>}2v`cyX!4XSHaKWH zZ{{`c1j47`M-CuYxbW&Ob~RoLo%mY;=&$fC5UbvS1cloYhV)tTg}M5*3qB3SU?&K( zk3SZ8`djdFR{YoFjf;X=1Ar%e{8S81$iUm**42l{EQLPp^k<*|O@#p+$1T6G4@nhe zhb+8lsHR~$crR&p!!Sn!Q8AxY-jFN^p5bCML}tuneb#{_lpdNh|JI94xi(H0*SVbo zemV*M49jU3`C5gnSs7r`}J-NvRD zYc>sw5c>_d$VQq32kE@)Z@fA6%5tUZGE?fj-S-@j&n|5A9lc}+Wq`dPZEJcLa2F-F zNJ^0!DXj*w?VA@{0vNaQ!Hfs`h$Vj(nB^zU9RaPff_-R&esE^^yHDBsCaC3Hfyn=SH^W0Ct=x(_Z5+Gk5a({9C?=y z9WQL#@HHK4t9Y)%>PE^z8Wp?S>Fl}Sb@&JWbnOT!jmlBn!j`@FunranpT(>daikGc z^_jgbG?0^SJB16C%=@Am3Q`MCS}VmNBX0ta_{gq z$mZf?s8lQ@({)gOSOuwx*w_WP)AXre&!$!b4BU`ZM8@nhUz}CM>Cs8o9nU@mh%RmSAiPbTv*EB0;}lqc8^HqJO-) zZ?Z+Z;cuGL1@Q}K%gMs|Jg9H2rBN%iq7QN2MyI({q>7yRR}+i+=}n3Pti7kECoE!| zZtA4;Yp~Sc6a}>cGa_vkl0wis$JwH2-B=>e+iZ0$>4R6fsj7_-wNfp?N0y5i5-uA zuc=2SKVr^e2^&bt&&~IYr__6Ej>>V`owb6{5G1u+ysyV?PKcc4gTb>zNEkAn@+w!B zQ{I`bBIjN~%?l|mPn2W;;=TJZI+L6S50@fWVCjoF_bC}K*$MTJ8iI=i9eAuiM{R7V ze&EgOrK}rkjp9Ggjrmk=NLBi>K;CtB0<`&pzG_Kt`E)Y$WIYbhUbt~s{nc5Wtui;2 z;*+1>I8&!{v(cPGNs-2fm+v^wH2*eF;NYgY0v_^v;z6Y<*po8eSM#@&f$8oE_Sc=5zDB0j{;FARR z$WOb{=S^nT7?L5YE&6hEN?clX)B!mi9y+UMUC%9Tmde-5*$@Gocyg{wrgO+s!9KAE32D%HkQj*mBFd1w- z{NBc)Bmb0O{0PU#3#}|j_X(Zbd>mbWMQ`oVhUx;dyi5a5k>IFt8eSN@a@9x#{nEw@ zy5RGv&#MMEO(k{ZsAKxra}aNW3qZzD+TxsNI#BJZ_9{bDA6k%`!}i_5b8pFP{dkL-hc{8(^KYG_sD$*_O^b`*YSH=j+>kJN7bJHI{KB`#$#-9`XKCM_Zt@lF} z8H3bz4sO%@emeSTaa=x7Y!Bex_)`CBp~apRh}k-kvwH4RdAXh(op{P?jU|6eF^oEb ztoBUTfVtpz&}*1NL-2Ob6J1m-xpxVgu|bYFMv8f%utMly&)CIK=QHADvU}=9S-pp3LABksRaaOC#>0-t}4G$75hZ^ohEgun) z5UKH6D%wt2aFO8Jzz;1K!^K$g*2$o?4{HE*@%uh-l( zN~l&xdeL+(n)W2&RH)S1)(oA2-K^BlSMb^*>%-fRMNam}W^UiM7w+dPDWN6@+Butx zPJICAT;DRbs}$X((_e<`pH)Z@$myl5PWNMYzhcqE(npJ{@806m;GxuV*Z)>%L)Yg< zZ=2TodO<&CyYj#pqFIM^Jn*!4_`JXQyP$KXg2zyI_sS0a?XD6{YYg3(QmTr4R@ zs>Gk$+I4qDRlIot(Y^1b18(mc9C<10+d}H2KY>nO(pO8(IagIl&rt|wooHF!-(G25 zia`Ts*%) zsOw!NM9gbj@VQzoQQhvt6}N%~epUE)Vs&PT6Iy@a9+17bk9Rqe$!fd4`;dd{>RrJv zr)#e|MH#0>CHmm^CX}~#su?L3s{AAaCd)IM2y_=iD+70f?di!!hadS3aj&XZ;$gKJ z>Hhs$i@H92)$;1Ck6su2a4Khy$HDN=Q8tk)2^@FYB`oK5h%g+(2;&;XEDXqn4hGE6 zL8|AZ9UT^99@6kGq7*u-?slN$*MxRrP3y!RKg1J$o{l-`1RXd7Ys6J11{_1UXf0CB zw?75D@0ssiNq@@txFYU9gpKeAeSwmqt$496ZaV8zdwqg-PX1?OVDlX0oX-Cw4w#3N zW27TFBE z0qLvG3FylT;u!_{&fq?D1B5W`e2v!F(#}#$res5%-EiQ7zfbpV_o;Or6aKRoy!Gf! zSD9ft1N!f8#~`cmx^dJky35#-dbVs}1Y-{ONhM`M6hpwX>9afAg9TeMlGhF!zp96X z^9&_|KehG05vB#O{Xm`szJGE&!Eegcn|FgVZ6a*Id^0{YerF(sJ`ead0}8RpbiA(Q zEUxVz+Ga%S4c_iqkl<|7zANf)i5&D-+^TO*d+l^;8^1GO%k4)v%fClr=YWUU+0@Mt z&WP+n;&aI65Go2;&RR|p3kppMgcK@L1-2h?liF7fRMJvrbHtF5m3=}NZB?G}6l)Yr z8J=+*_4f$AtI=d=;IVu7x~>(cdb7Iq=9EtIs#c~$H9-Gs29mdE3`>wARut_Bh^U5#U!oK(Xn0HqYevg;9GiWF7*{CI*2K=^|y}d@l$XMD7O$m z_ZM8=ow2GpUwbXMas&k|@Wo?$D_HXkkrn*@)t-yf08B3ypMJ*dJ~jpGt@1bLwDP2D zvI{QTUf?KPIYJuk>;#8gXNDLX-sdJnaRYn3-dDy@;q_gu1iGV)_o{_c$T$5le_Q@d zDy7p6ej%1P@0Lj7w?V!wZ7BR(^rTkJaCI05J8*ceSkAC^p=+uv723hO^7N-atCk@* zXcO$RnP6CL^6$@yd{5$(E+pmJyIDh^+IuWVaN~Xuw;^=9NTm+nI%L(kD`*C8^w3|f zu@;3@g0a*d46C=Bw<2Nw19+@PvqiE6(|JP91~3-2g&_3NA;V(Cp|7Svw+^S4WXOM< z@nEp*E7oZ|teuh!AsfD!3ocRlVt1fp=*V%cOIViD@XlmKw=BO(Vti4~XFbOd^n3Be zoA$e{viiG;3~mQ$)(hiHo@9eoFqUa>>gC6yxU*?aPujui0T^@P@xL1=u&m%UpCmb&;hKvZhc5+Lc~KoTY8l+JS}FK@XulKzpR_#Sr+ zo`{sWCCqdbqM(5V-S%!J6jt|GS7(enZxh-tHJH>-kyr$m2zHMtlPao>j4MYdExr}j zbS-Nt4-W6Wj7K)PtlBwd_Ez5^R04hSxDw0&Po^Fr>`>L|K=yyca0p6_GY z?AgQ88;+2;!Tk>@1syt6li|_^4*PIa=Zi#9CfXf?POn16_J&!+PAq4=a>~pvnZ-2W zj!AK#sRBY?TyReKzK4HzQnumK&e9tTgq<5TTx~|zw)G@tF=0sj;BPi5XR6>AXv4x< zBYidG>ez^PW;t`Yc%@E2K=Xx=|{X3$Jh=c*rU;0WCVkqaMVyB(6UH|bTI$Khn zs;?P$LI65VEo7!mDnp@dfY&88YLK+~Yl1liY7rWba;qJ9VqY)O^7*fLOR_E@?; zKw0$OyS&?Fy_zmMp_e!>yE$+V30!2Ubwv>F*k-=dJ}4Vwh61SO`{ulkuf)-{=m8aL z@hh#ow^-nUnibot(R1(NkUfB=$N4n^ypUPHfT)6r4^`ya&lg0269c(jAnt6VaZcy0 zA>|2xO;31T$DGwTetJ(Mgvaup*j3Zbs`ahh;`az4B-;+^4Fpg&J-6b1IhI~A@+WFe z|8zb^DmY7IV|X*3J$?kyi{wt+=Yd?*xxe({0=%314ZZS37Tv6(8;~f<4rvQtWi$%H zIqipE-mchOC7t6_I7Rr!tQiNT-;M(Bns3!J)c<;QjS#~&huRm6U6*C3U&B%vH;xU8 z38~UPr|5G! zs8}|6rYp`{Dr?EPRsoBY{w6cZb)MdtA9RCZ;ynd8x3NJtiR{%2$rv|(_*9XwD=B(+r++%k&C2BxcVHQF~%5Kq}9N)rOsO176dVB>5 zEC=+6zDLu$i>2RLd>1EIMv8q?3;$F+<)@H#aKB*u4(XVc()g;S;>2&cmHcG2@VyVZ zjnKw(YsV6g461-va7gCBkOTQ!yGDUp!gWCK~0tmAFr#4I$CG`PC90nrzgahl?{aQb?Y&T2n-(TKI zX&x-S{nf$qaEEH%%u9n~HaU6xY9p4_l}TFaleu-;-+nf!g>Q$bcfr4=?$Yi+w@T7O zWQ2&JvajfpJhBTlE&F`>F5rinMM{@igc&L|`%|*&k&nOuPl(%`VKw0FLfiVKWBw0^ zo@2D#EH!Hl(To!jeA0=TcMH5ntpcm0xtwYoF_GN=aXigr*9UmYLdL*v$g8f@he_}>;z`DYqk%r^Ye-ee}yJdPbK zG%E-~j&bwizaLX{!IO^o~J^=+667E?!8F%EiS_kFVg>f-X79J--KbK;u7lv+rJE{vGg2l-8|G8(J4 z&vHk2Me$W;zgBsf=8Zw#=Q975(f2)gHeTnRqEWa-a^I)Q{9@>V_pTy-nFcWHuU@hT zpCSsL@}z_u+2BQ3gq4_&#N4@7D{UzsM4#OV0G zh<=7c;3|fQTc+1M4^(l<_C-%Flu&sOlh);oB}dCCJ6I!@P3Kh9Hq;vpZT?`Q3qvWy5FMVlN#o(5V;^H+YuTTzJBH`a_%-KM!rix6N? zO)$arf!0U*?y6ETx`4$6lO|)bIFsnD_eb$Ue0KwwzBF>hzP~Yuj=vK1^usrFD@@WO z%%HMYUjZwxDYqB)Zk!To8uB?xI&q;F{$VymQD$bje zpP$;FcAd4(bsy}b)j4rnZi$_lC9uXE@8{HbUf1Sf2O8Fu3dpz_hItlPMC+xq!GL_l z4AWT3sa+-G>$=9P>ZZhb!GbA`K^X3mmh*{0wQkQ)&bzF=fwm!#@W$zx0JAWhWc)@%Q; zsgOxYdwY=n>$%yW0h8KbyUV*Y%)l#KHkT`*M6$!a*-f1ZV|{p9cX`!8Ra?9KxV)<9 ziYABbjAyg)R?Up&2|l8u+kw8l4NTwdeW*YMR#a$_Bc(qZ{hKm)+w4J`O*$MM{h}P@iHgT&APl~Jp}2Y`Pw2?@^~#LzbV0Xa zv!H7?lcY4)^SAM3UZ)R5mx*fF z-(`w#?Y?~+5V%W@8X8tiQF+iXx36%pm{KOw0Ha};_VxYT$kU3a)_*7oyK1)y$IXty z89)4?Vy}bGq|-GR#irCFcAgJ-Wg>_6jGACqGp=)qye?9QikUJCDBGz4u=%fNA4z=$ua>E>RPZ$z8!qzU~a4_DWT^V6-E)G(!`2-#lip7~ktRH;Hy9WxsyX^ocF7n<r@pWv5S-^57aQX4|+{tTz?g{X%KHw%2B2S%?gW`?Y0tZ!!=%0b?@iR7abZ0=8(p&q$QK65t!sM3N%|t={IJI@} zfYob)jUtm@8cHaGZOq`!z}jRfZh%bGX2VZ{`d9_e{<(Kl*T%DDKix;X5HsJpt|)Tf9l4}rfH!P!kL za8&N(#&5o;Nw~1SeQiP0shU+hT=pJrJSii3B!O*%A##%_u3r(P$n#y7Y$cbnd(xrl zq!7sU3kjaeNq9Op^1yfA&?(~fS#%J$jJr$6xz$`6Pwm3<0<$!W%Q&blh9SkR^3cdT z`AZ@_QEHF+x3oU#8Olco)T2+toH9@{V4-ZA`V}Btqh%DOLU$)hB^Vgwt>O=!8yLXifeT z4DQ>jqj;odPD))jgH2|CdVE21L1|d_sufsBjl;`j}WcCFrUnjzImHB*YU(Z;~H zVB-Xq;dkvI=R1+ztkSeQbKV7K?GnO&NzR&nV)n0&Y2X&FoDB*Szv`(DrRA^rSAC=I zHuhH@VN!@@$YgTs=^&9RFUNB*ZR*eG|4>2lhzVtnn{6-yGS`1F0st-C`s4ewNh=+_ z1#IEn&3{s4V$$5HCY@Bg{v?Z(1TOm{p#4GN)(I#!Rg!Q>|Dd`2h6M;Z)0+O#(tlGG zdK?03(MV$v@qe`A-(-&&z~xMul7H=rf06j5@BxC&74@fBzcl)v?WYAU)1uPFs(3*8^g?G@%aBld|ObrPUhw^xl#@$zW$qAszRskH)x zUWm~6I~>3QY27pgNEY_J3$Zt|A~cOt0@CWbzTmKEY9W56KL2mnAx)o5Nv0~nXtILW zcH?D+Qis{pH2_Y4!X1$L>BsOn9sY2sPCpASoHZpZG^QfwUD}er>ZiefDEhTY?sP58 z&Gbg6H3F+3m%Q#`GhdPPP2^)_G!H*fp&&W1(NbGbYE>0y&GnsBlJ8_(-|zFJ7Z^JT z?UYvlSq|3TZoAAFhn&wR?zj{XoRKr&Q za&ml};qL6Cm@OlHTU#e39ZofvPEzX9gIyp|CwC+tlwAc-CL#=5e9-+);@HMA3}e`l zN6X%wp?e%i=&~KJ)xT~to>?s75f_p|I&M|;WVK`y*H!nR{^CZDl>!NA%@&Q#$4W_3 zr4&8$d#6iZ8N&A_$cqsROR}0uFX+WgvKO0(H9g_j0(t-YmsxA%g~Bf;de{Q=_3n&O zKUqkAZhGT}Pqic~)2z>_*A{DY>XO|gp768W#fCTmr-kvi=WtJMjmFHOvdW1s5kP?9c~`P!-6 zM&tYm&pLNaSC8AY*7wN*_3~zO(BZP<}*5Qo!St1DF#>5S3E2lh1Rc zWV9>jP}vCquD77tm%hn#rc9|qLJWcP<=uP%DSv=3{IPf`_1em^W+loBh|y79+I7GI z3IWR9NZ?wH(f_jg*69(%NvX3A+9ivGYjRjXnL7JEsa`*Z#V~rgA7wQ<={+~^k?k_U zikT#XQr%7!O-O2tB? z9ikv{S`JOgmw6C5VcW;wvOQ7WvfxXSq-9RJb?Xb_56Oegt46B1eL5RC%DF&;DEp20 zk`!JQ2!iTVuARWJR{j%{ndGrK?WN*^tGw4gK6ho@r{nm;IwO=q53Ci25>KD}VKNN{ zblgY}{xm6d0*jnV)U$wraEO{P2{O6jBeSxeYpRs_`Z4Z?0*oicr?z{-HQ%m zLmQOcE%XA4l$TX!;yLjsv70k;`bKB8kLIvI%+3>!+tyddCygjVR_}C3yfz61C^O z%40oxJ-=qERMqm|6td&R|XJR=YBtxyEv*u^z_-Vs15_C107@lH7hWfmMJ&B%Kqcu$Cc6 z*T8A232dq6TCynPvJ1a%t?h=7faTUP@?@$3%9;Hzbv4VY;B&*&g|KQ7CL;{fsYo)v zu5L9wqw-|c`_+=@`MhdY(y(vp&B&xQf8-%-9tmax^}dO{snL=?NL>f&l!dHU!NGuEfe zObt_&?TvLeo?pF8ZNfqN?mEGSktbaW{WkAW{)9;6L6}jjmF6F+!^n}`3XE95b~H!AvYzoouGFvhwMExch}_TO67vkPkpiVIqYU3|*mut+Fto&3sb6Dm$c$`oeM8 zg817R?;ZjJN(E-YIc4(fEX&MO)Omn3M;_tU_0bg|(;5Ew|3$$yO>dUBF8En=LfRiF zQYoIm#BPr%p#BFwp*BDRYTGSOU;h2XO+*3UfIRm*@PGRXbhq!;B!^@oO5fkED(f$S zWr4^`cJ%iT*N+BpL8X`5G~BL zLOATU!`m2vmg%2P$lLsWMSFtvmoItR*ob*d zJv2oC;Bk6pcW)(Ivd1iVa6=CNhs@J_>!EsssY=XBOOlx6pNxMwZ}Ve14drV4tXMnR z3uDBb0f=|VJNt^m@*AxcR&tm8o9Sj;?fjp`wValWl2l$2^2vq3bP1zu)IBbH5jfDJ zj?d5Ui8n0Y_?-_uX-^li^=|URK{$5*KcWswJq4s(j~6zw&4t;#LkB1%Ee`48$Y0;& zmztfrpFyRHa53&shABC>`C&d7yc%18bB2}iPxtn$^jXDMvOhy>Q(P{NKg_)o9=k;} z1|~;>0-umZ1PMiHqs`&_;OaOj_$@8S-bmol6<^S%!zM~e^Y42<}gX? zMdVn}Bla;kJ(35Qzy}CXAdMW#|KWm)(g|+$QOgq36mAz@9C`GgSH3#T-=$SN#174m z0$T(%Grwps$++NDTLNkI95RMuto+YlsVouxEltI3qP7Im^=z=xbHDAo%J3mVTJ7`y z6R{dI&mP_=%ca|{emkw~`t|V&0ipQW zcT1~>qGBK2o;d*wo-o0QZ0UH8MMQ#H9mgL5GCuz{jpSj+5QYQ{ElatVg;0Oju*d&# z7n5XmKvBDGa5~EBuPfx-7;?K6z;g7_1yj(3BmL4^W;5jNl9nfW0CorYjym;ihRSGA zgJ28aJpB<1;$3Ks8R6lT!cAj!1jwxxkli1Yg?POw;lPUMc<@WNKWBefTUXc8%e$9w z)zN6bHM)Pc6hiG@rvI0(tosr3=gA!O#?5&W7V<+IfXSkCF5myfM-RkD2&a;kWP6d( z^Rn(_WuipyZLL^e4lT`JwYcYz_0ZYbx%mRV)ne&>IrY+|(%ll@=_?<1z3x|`uwQv~ z%pAz?{pu?BfOtzs@^1!RpxQE?d@3psXq@+LM_`8!HKiu{dcd+ax zV!gg(HkkQF@df&bg6kg}_P^j*I2V}xWTdq&%NQeOf<4aP4 zzhmv9)b~+_0gy=&@NYv(Q~IYf=^TfFPiORlGE>sagXLcRGS}+Hplkz@v4z+^S0gR} zX4PEme!W#?m;a#>O-+L4i-q- zvQ#H#1XYq1I2q{Mq_dvH5d=H8UX{$_95p|7XCfH$qASvwad&5J`J%Wsb{XBmwwyYu z1*0#}nZp*gL}p!MKt94?GOEAWq-&0wG^=4=n*Ri3S>r^x0k*fa$I7rU%csq_*#as5g59Kdn0G#nC(O*)s2QDt20^z+Q8> z+5Ir1iMyqghtZ?>RS*{Fspgjsfu`XRaO}7Cb`_Zkqp~cstL@h2R+=eSLIg$FdH9sGbqK z?tfq2M__o+uoTRT#ZdY72{*+ybWG=slt|`+3ah?HGOQ)Eytn~ks%F=AnDwHU_d3jK z#JKmdZ59W*%6iQr$t*ErgZk`Nv%F;^MS{y=LURcNzw@Y1z|B>Y)k!2bsUTw&;=+`A02TaKMvzXp8DhxJZ&tGIGm0Xa>pac}LpbC8)W#34YK?-v6Fz^P(FQbHI24R3$H1;ZBvK(9LBs;~>?v|NYf zP%$63lL_hxUuguc_h<-;#!zI;=1r!0R>HIS;r-#mRxmQ%Vuw2?2sa9j*6b`3sG$Ll zPqGpTm1B^$by9oAUTIVmfRGbAQ0k(wiTz=Nm*JxX+EQMYSCfd*5?CI)%PGlG;aL;B z$eIyxl&PM-+rPQ+BuV{EoS&_%noEy}o)b)t`J)CVqf^LF(V;196`dM-`mK=0l(jI3 zCRC~~QS}+>2z}-X3Fw&v2J73o_6u+4M&iE1zUdEk^E?_`I!JOfQYa%8TDL$hFzQ`i zu?<-c5Mf+B(DUWz>`ru1lbaI=%W}DN7!p64ki>eiNR{N4dbgV_S`|oXU0tfEq+{S! z6Fd3z^=-Tlu$6QkNd-8|T_gB+P-PqTR^K#WyK?|f9hU*H%L-b&{;umFpDOoQ4siB< zfpO0hB$6w+Pi?Fx7_jRd%WzLLHq*N6lVs}fa`058uX_236x$e;bR6I2npim1i}ExL zcC6i_X2-Dt;x3`PvMWKcgvY3TxVlR(GZ+>~oKMQxXNs|&L0xQlEI z(>*QW5U9&M!pr#>AjCqXVYnB6Xp z&z>5n46E>RZ48Z6Vf>6gG|<^yMJ-UCh0SQX9I@oq(2`zv99wLmY1ar>$GOMeMn;*+ z)8!Ug6Mb^YQlaS_Bj(2rY{q~nBlkltd0SrfYpI=m?^E`rQkk_3#E4T0L14Oj6JPQ| zt+U)awm?*ld(Tg%&F7e1PRg;Rk#E3py1{%G5Qy1dUJy3;;fmx5R3k5^L{JHom0!9$$XFp_?Cuwx^AJZi)tarR!jqz z;auxH)3&A5Z*>e{9};W{$8gdmxM{k7W1>eh7pQyLZT-3}f!!=i+xkE#7tht`&F}y! zY5tMp_;=gIqd5H49zF&w_axMZoFBSfpMdr#CQoA>fR~_@>o>+^%!oWDb1ec%e@2L zsmVJ2jZ3!GZyR2&>j!g|!7h3Nm=*z-x{%w;F`wj{k33M`-emq|X}$Ll&{6Rc*};tY$O)a6>q|_JvhGNmIW?66(^U>&1cSrn zjs?GJ_mGp_2~M+j>lNIlZ{Nob5>d$}u^psD)-F{WM@7(ltgN}UUT7w7`CO8xgg+tl z0-W33_i^0_##wMG_0rh;g}rIdW3;(Ct^~KZjd5+^*kRu5a`^we`E6Rb9HQ;+P{B4K42Le_qm*llX#T`4Bv zBl^sCf7H3~eNx{Evcn~Q~F zTzCCEX1d&NF#a?Upz|Ejko1aC{mI3{X^U z8N6~9jyqUeuA+(Yf+y*2rpHP6YPN}olfm^zSym$>bLi%~IwTxz*c8$Ar`^nsJ{Wjk zWQZEJ{c-ems3@7qyWPHDm8|#3>vwlKu}}vyx(;1cYaRGoO^m2|!|RxyM7!#~N$Y{$ zRK|>|MyPzv)*!~iO(vdUJs(-qxrExp;^ik2tk${ope3(WUd1V=u4x~I*+l3OI&=Eq zs4`-7VDAKJSYxFpjE9J%G!`ghsNr-c$sDsNs=sdgq zgls(tdsXcFLf(rtA6D5ol3*7PVdL&zXv6X7)hBheo5aYDj#Ad-D&~Z1RkTf6ubBz~ z`rC^Yz1AM6qL_Wz_7x|izhS(3^nBc2E4CJi-zhf`6Yj?ouHJn&7Cr z(A(h(&6{GIfG^h#t6od9)m-#nSJo?H2l;8$QF+1+Qvsr`ceV?M@8#~L^4UO$MIaK+ zH1TLr1LxBcV81Dfgi8o`M+-kx8(9c#yV1fP7*i+_m;xsYpG)ZX*wUR#pkO|3nkuo z29hr7)$^W~7*a4>OPfRE9i<G}LyfvloH6#t%?%Qq-YS`@$GVkSP>RG_9 zK5V9Dw;Ebzk9g;fjn&fA^MJM0h!DkQwQxBX=SnWRZ?LIcn#)c}@MO-b8M3x9&bIZMAyYdLGAJ+K^VVC=eaQ7w-h5>pQA<_BQ^UQ+Jzm5Pj6gh&n>3wim9HBG*6A-VI<7wQT{xj%|?D#z3IW6!ZQEG^cYj$ z(>(NNNA-d{%!GACOoW{CN+0QBqh!t!ocrsmAIsI688IUJN^4>l)m^4 zlBJ^=`FvDcA{BGn@#)(SmrF!T&Y7pJ%I#DLF#FRQ?_}!47pvk^+vo?hVqi{IJO)1c zg6n1bg~QWs*~J)_a`OhcLR=d-T;7EVbu_DOt&B}9$7rMQ=FGf#P_+O}N_Klp>*$m& zbu#qzG8mU>60`>^nvn|7az=*d&2al}%FJjJfSX(5-*GVxyGi{S;y4 z#|bQA_p5{D^tQbvELR3ZFWZSdm|k^)CpF?Tx5(7l;;W|RiItYm=92# zDsSDMe6}tDaT_pBsX9gHSfGr#;2G3tnEv5a+<@s05^OXu&igZnm8bA}ek@MD9CP1X zG#g5CrNL^3iva0auQ>4p5vLb%y^W}x2z$Q_NTZwRTUD6D|75Hc)WyE-G`zO zReEuG57C@Ti;hk$+$Xkz!=NJ1t_1%jRzU+GHIf)4K)W?Ho&Fq)#|U#1QR{CY>vnAR zmnzo5UTrr_B_I}H)N)wV+YkUB^}-knK1E0E!I{SB;zu{+^>bY;s`sYGq$1 z8ZLOzOxNsBy0nC0Z?R84>g3XmcQgyUE%nx$8Jl~dgDv}nT~X0_3x%#xcT#a+?Wb)E z(U@3I`c^d0n?B4w}-{xWQVOxV=EmE!bb?v=EsQT5@(Y=AB91 zhhlE2fg9B}#DHWYiEQ9^W6t(Hoc^%Q%G|Px3a$9tioB*lL|R$470P zMDN7KH&4!fiZgeVrJrhYWBk-A?>9Oh$f^CD@oL%7G*SMdYt}_L#^H!^VK(PAXZCaN zFH}Yc)WxV$vuxD#yh}M&Nv2~v(@YQRvu|n=>b8TeX8lO%-8S?VzCb)C5b=t?T4b{$ zABJTUw$Oi-GKfA!BU07bNj?m-nu#lKAv7g~7@2-r!`n>ujkL@tqEefhb$9-rF>d@s zrNrnu`JuTiUn!|N1bDYtIUVBUYHnpwZjvb+=A#8xKS_PP02kC7uW{d7uQ!2P!hL!K zCp!Nmy4XQ?>1RhVa7rq=`8pKimnhmjk6tY19w?B&%|r+obB71wpno-;Ma(roGbU3H z%g9U{Oz3~u&qhNGI9moNIZ+-e>Zp0#DLoI^C5X1)LCcTx)*4rR?t{~;mSgo67Fg5n zk?rc?cr#U+-b}&|B6?|%pdt=}K+nZ;htRbjnRToun`?IKeAxVLnEB0`_uo_B}1Ku5X*OO}0j zn|-v?Qo1tnid>Dk_B(M3*`LYQ@@X9=d3RuIoMpAjmyEjKUJExt%~h(E@VrE*+xe%- z=2{Q-1JJhj1MIiLcFr&CM+f&0XnmD2++TN3(eY67jrs;y$TR?1BJ{z+a;bKdMDGd#pSUYU6XTu7Sa?%J;&nG-Ie0LhbD0j1o?5Hoh zKy(Oj=iRCzdlrM1p%Ufz9Us2o{mv+~7Zqf$cYt`FUb5SX1RKT4tjiu(=#=0zQ2B*Y zV5_sTkz~O1Qu-lOOX3TMH0J9Sl@ zXFP0lFOZY$GyKL6LR@M`>XHeIO+yL$N1r@{wvH0qg+J#X0T zk_>gKnTcIXmeHYy6)ocm4f|k=mRo;?ueC#x#)P=IL@%~PhEE2|CZIfzb=xkOUoL83 z2J`-WJ>z7dR?ChmH%EXGR6QPWXol|}Jzc?=aGn;c(tTk*GuY$IbRBmzn4^4>SS_U) zaSlIzPk{L-&myJWvcf9s0X_s_mc#!vnjZXwV2M~Lgs)y;L~AH46UcF6y@6v6D26UCm968yW;QSg}B zOQ9GDIQPEqhpD(d?Ond~M-hoB8(IzU>AmTvy^xIp0}{HOP!3xr>Jeg$jZ=`8sEdwdQmG4_ri zwNKxu2P`dHHL~4B8KA=-1G_ki>&X%veTKFJk|x@7_ic@gQD0E9?$TyU1mkwy$qe3+ zcSmVFSy7OiNxy(?3}sW2uzpOIWVlwkHJ3VGX}lB1yAMMb=34|*+G<@rZwdA9UO1J8NEOY1 zv#IO(pt8GO=~Tq{d*PC&KSm~5ca*l(l+$=AQ+Wj%osn*ICA02YA)`{5z+yP5r!NOfEcWY|gZ7jkjGp>`6Y;AV;ZhH41z2GJ$m@S0;9JSTtLn~>%Uq06? zPh$F3+rm*Wt24$bN#^?EfkAFwW|d)j@v7;Yq9P}!>I(Z2^Qc+!`W1zb>V<=5dfT!# zCr?sNRV6t3y`b=qQDv7sfdZtp%Hk@9#;>Cvw=SzQQj|8U8$$EQTlq3?K81#H_SnvL zhS%EHhojHzPL>{EQ_GZ;RJN+uXdt^%P+DqZ4CBbI?9D+0>SPSEl~K(XUCOI8K#4}~ zj6aYNUf%oVHznNk(}4HW{=EP&)DjWL8x3+HfhIpJg{e*eXCu9WYS3M|#5KD`Z|jjP zr7B;RjD58P#fx;hgHrkzkduQl4cXy#)Va5LwBM$yos$`j7_^;3|FB&%T zznH+}tPW9;bJ z(5>&aGkzG^(b^j(-a%d|K#kJ4TOrWw7uS@jk?hn&iUKty(bh1SaOV%XOgoqQt zy4(mjMN-F&S>;eQf53xFd(A}(5e3(B04H68I+}ewU~?@KylT38f*#kvt(ZrOUw0HU zn7lc~LH4FWfHOD;CoU$Bz>Q}fg+Ex^k zk=_8&D;$8iPo3jr>`DW6MxNOXgZYX+Vh2<0`S7+p>KFqoUS#KID|Sr=QP;C-t?Ju;*B|R1Uv` z9uLe6)snhLz>FTe3jpWk)K6+Pp{B43c=&^ zJ>*}0O}j63xrNPa6L+Q7vc2I2`S$WSLng*zCPK0tEIxdKbY5hFjbvg4Q;0(o^@e%6 za*Q!0LQe8dgQ{JMyM9hB{Ulfhd>RZ$!@h3^@1F;pnl@-e{=8z*R%c&J<{Gnv!FZw7%_IJHLN?@CvoN`gIfv*{s6|qFOek;3W=|k#R- z()0|^zrya)KO$C?UI-Z_ReTGhRposHzj}5(W+3Vdjj(rIOExRUo1hmG$Oju+Yp?Mm z31=^)zbMSTP!|;`+BTUHeZjk}I7zc=qK;KLS|0aVZT_gK08W-b*-~t@4aRTV(;NE+y7;BzhvegIC|8PvFkq4Gl-R`=@ zvKxF4vDrHRjKUBnwr#qOQ#i4d3tdN3*P|!9_=G0Njh&*VOYYDl=8>S};LCPinsyfs z34Q^4cGQ#oSfi}V?j6NURR4vg!4tV78~E(P&0y>YpM}gu=F0%Zl=OH;3C*X_Ekuo* zc#1h|D&66r)CIYXA!>cfWJXb(DKcY$jZCg$cu+B=$Bxx7Sum>X_3Ql4&-qzJqm&yH zGpuyKg=zgvJ^GoVqpB1@dhRi&c>J|i|H0q`gZ1IQvukv(b626l54m>oxl^~PKbwc9 z7Ab?-oBD`SEV{V8eC`Xx``z<`8fl>a_>VElAdy0rZ)ELb)c9Wg2U^-|$v*UGR?jq& zIN$a<0UK^|I&rr(iiJ1RC2^_V$_y@D$xLbM?W}BchR7(6Xr~I9p1UF-bJyJ|Jfr%y zoHP1PP(~vMahgZIO=W~ZNZNm>@CDkxI(GYEz=sR_On30xljxRxp<~*+4|k zT%|Z2OKAmqgF)m*!T09332aE!oCiJlD=JytrLA`7?@N0B+GxuT+vQ^47 zwxc$r=MGEuRnNDvZI9R}6UlK`by4SxDPOa`@g#X?z!?Sk)&~#M%!cQ?<_@2BsR_vT zLS!_)3Hx?0KCq)Pd3w+H<~W8b(-`}{8Y1QFrqi^61l~n%`@+Za{!+cki`UYMc+1d! zlAUqP9>&6fD`U5dd+z%aA6Fc5rfrGWy4!Q9kD^YgU*CMzxvHiQ%A~pUB(7Q3D2OaX zaaYe5giP@tggL6<*m@vt8mTPTOjv&a%VzxA&-PX~A zdNutsC&)7ypPG|y-l`f%kjcyK4qy?Ls{g}>m-M=37 zytA$DDrO>*S^u0QGpq~ETWJ1@8GRh%xScNA2K_r$DWl(Pw~x=fF{j>riTf(KF4~VVJy-1T*29*?bSWrpr#A1#N2IjMGO=K| z{fF>#0k3QkQ-171y4+QO1WTNKR z-if$9z8Y5N{`=-qmHDx-=C}*2CYxgH@!`sw&gY^qNkuZUkd!$S1Yu4y?>SiFU@?AZ z;N&{Hr{J%P%0Jea5=>;#MK)`vKpmu(VcUw33)vGzwz4H|*Qnzu>z&9Ce6`ijWZ>rW zs)?b|h-Xd%xe#0acl=vIHfrohr58L&Lo1!7nN_ zg^KF-6Ff21@I)7Tii1<_F}CzqT{3v_tdWUrbMn~qtD~0!IFh>@^J~4LE2w9=ayC`> z1syqFsW!=aht;8<)s)NEAV6M4OoN;H5`#K%_7zi?EgnF2KPnYfAP7dTeMZ0Y7tTmu zR>a>~80~f5eTCTMmCp>nx)J~4Rcr(LoKc5%o<&-rdk=s6n|*yB*?jLgSJs1n^y)9` z_kGN9qK7XFc7pAHDE{KB{L7!z>mz6h-$Vb8=j(D}p3M;y3AGod^Eb7wZRTUXdUe0i zIa7XP)9l?r4Fh9vmG>E2M&qs9CGM5$+i;6}f+&w_(J4O%LVXs!Sb=v=r|hqD@7_Hk liFa?5erEz64Z`!cU#7=J+|t}VfgA5hh{(Jv64w3lzW|r@csKw6 literal 0 HcmV?d00001 diff --git a/vendor/github.com/xtaci/kcp-go/kcp-go.png b/vendor/github.com/xtaci/kcp-go/kcp-go.png new file mode 100644 index 0000000000000000000000000000000000000000..151b7c4f7c49c1a8382552322787a3e7f04ac3c6 GIT binary patch literal 9153 zcmdUzMOPe5(?HR|H88ll1b5fq65QP-xZB|F?m>dP1P=oQx4~UQa0~9dJiG5Ne2ebe zrx#VVsB^0OMyo2zpdk|?LqS2I$;nEoeQ@MsnIQr`cHFHzAQTiTj;*Ams+^=GxvHy^ zm92v%6qIaqx;BE2`Y5nKUkwrIGbS`ckyokqks)RhI*$Z4c^VXw_+SDHW4q^9XrfM- z;%z-BT_#UUtcE27N=Bv=GiVe>CpEF9rC(mZoX%hP-KMhNCxpE?U_r%bOuW1(nlR+K zg{)D?SC+KYwCr*lAef2xsmCQ}LpkJ2NH^6HjZ zS=_Ki~j=B@q`W;!B2A}>R%92w1dBq zzek*7$m!&PWS_UK!y`v`YZMP6;&w<3OvP@plo(mr;LLPv4`=#svb-5oZv3HHS%}Tx zqXfgUXNowshQp5ncg%TUzNTe0Q~bVAgAe|yMx-dL&zFH`HEAWcAJPi)IVc~7QwV5; zt7D^Zh=YwhAtV0_a%q3jA>c*T%5+MbXyfB$QnN}t+qQz2mRlkaq-KsHy*?X@gr_w` zIF$p~%a=OT?X16y;4|!}5%GGzuPT87pe;KEZE?YDdGjqmR}U=`W5 zU1uJsIM}Eg4J{R9#>Spx!!s3%rfc0t3)LM|f)Xx_XGOQ)Pd2`zFVxQ|LAQgn11!pQ z#`qmvok51dxznmSw4d*dt2y1joKxk27XPT&AC{Bas`T0b7958SH7Lbxju)iYyiq*|sq zW%h&@4CaQW^(3?(T5U)*6EZ?lp-E@s(N7E0r;QsRYHqA-K5Bb>8CYjtdD*?i-gi6L zj}-;<=B@j{80qXww$YgHJ)rVVO=98T)$+Xs0dNnAMTot~Xy0K`K@1ba=zP##+h{Og z98734G0H4>Z6Oj1$tgE5Oal&1s9FQM1K_U--7>5lSlk((EBMnkb30;PFuF5}5XfT& z!6-zW4fP8q90dheSb`0CXB3uM@G=EU6dg7wjN+>-WlCHrg}+o7vsebjj}bsA@k;zW zWiRD$a`Omo>8Fm!8}io?qPe5=viAeyvoFzU}lv?nzdxuQ8^2djwpjKn<^sG=aiy!i6ac71fw0J(jzW=`=hn# zYfMX&UWRol-@=L&*^9hY&FBfzex%i=`HsPlNsj6J`1l0)Xg}Is2|dzW>HozTHO{z5 zewWoO%29u<;H;oLCbZ+eMZG1x{T%;=v&?5M#pbbvyG3u6f7N^y0lqV&RU!&T#<~?6hhp3bc<_z3&_K7D+a`3niXseXn3r7lcIR0J!e%7nV z=+H`A^sg1xbJUYu6<8Ht?O0uFnYP6^WOMKK;BeMilF7MArips}??7dsQ0y5nKLbudTj7^w`d<>Js`Nz7V9k8ZMD78BiO!ME(WeFK z0XezUMU_sjqw4q)rHo0VT!f#DKh+ rPWxmb2Fy&lpd?t7ZrM6=*p4DcCmHBREt%LHs&& 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 literal 0 HcmV?d00001 diff --git a/vendor/github.com/xtaci/kcp-go/kcp.go b/vendor/github.com/xtaci/kcp-go/kcp.go new file mode 100644 index 0000000..342e69a --- /dev/null +++ b/vendor/github.com/xtaci/kcp-go/kcp.go @@ -0,0 +1,1070 @@ +package kcp + +import ( + "encoding/binary" + "sync/atomic" + "time" +) + +const ( + IKCP_RTO_NDL = 30 // no delay min rto + IKCP_RTO_MIN = 100 // normal min rto + IKCP_RTO_DEF = 200 + IKCP_RTO_MAX = 60000 + IKCP_CMD_PUSH = 81 // cmd: push data + IKCP_CMD_ACK = 82 // cmd: ack + IKCP_CMD_WASK = 83 // cmd: window probe (ask) + IKCP_CMD_WINS = 84 // cmd: window size (tell) + IKCP_ASK_SEND = 1 // need to send IKCP_CMD_WASK + IKCP_ASK_TELL = 2 // need to send IKCP_CMD_WINS + IKCP_WND_SND = 32 + IKCP_WND_RCV = 32 + IKCP_MTU_DEF = 1400 + IKCP_ACK_FAST = 3 + IKCP_INTERVAL = 100 + IKCP_OVERHEAD = 24 + IKCP_DEADLINK = 20 + IKCP_THRESH_INIT = 2 + IKCP_THRESH_MIN = 2 + IKCP_PROBE_INIT = 7000 // 7 secs to probe window size + IKCP_PROBE_LIMIT = 120000 // up to 120 secs to probe window + IKCP_SN_OFFSET = 12 +) + +// monotonic reference time point +var refTime time.Time = time.Now() + +// currentMs returns current elasped monotonic milliseconds since program startup +func currentMs() uint32 { return uint32(time.Now().Sub(refTime) / time.Millisecond) } + +// output_callback is a prototype which ought capture conn and call conn.Write +type output_callback func(buf []byte, size int) + +/* encode 8 bits unsigned int */ +func ikcp_encode8u(p []byte, c byte) []byte { + p[0] = c + return p[1:] +} + +/* decode 8 bits unsigned int */ +func ikcp_decode8u(p []byte, c *byte) []byte { + *c = p[0] + return p[1:] +} + +/* encode 16 bits unsigned int (lsb) */ +func ikcp_encode16u(p []byte, w uint16) []byte { + binary.LittleEndian.PutUint16(p, w) + return p[2:] +} + +/* decode 16 bits unsigned int (lsb) */ +func ikcp_decode16u(p []byte, w *uint16) []byte { + *w = binary.LittleEndian.Uint16(p) + return p[2:] +} + +/* encode 32 bits unsigned int (lsb) */ +func ikcp_encode32u(p []byte, l uint32) []byte { + binary.LittleEndian.PutUint32(p, l) + return p[4:] +} + +/* decode 32 bits unsigned int (lsb) */ +func ikcp_decode32u(p []byte, l *uint32) []byte { + *l = binary.LittleEndian.Uint32(p) + return p[4:] +} + +func _imin_(a, b uint32) uint32 { + if a <= b { + return a + } + return b +} + +func _imax_(a, b uint32) uint32 { + if a >= b { + return a + } + return b +} + +func _ibound_(lower, middle, upper uint32) uint32 { + return _imin_(_imax_(lower, middle), upper) +} + +func _itimediff(later, earlier uint32) int32 { + return (int32)(later - earlier) +} + +// segment defines a KCP segment +type segment struct { + conv uint32 + cmd uint8 + frg uint8 + wnd uint16 + ts uint32 + sn uint32 + una uint32 + rto uint32 + xmit uint32 + resendts uint32 + fastack uint32 + acked uint32 // mark if the seg has acked + data []byte +} + +// encode a segment into buffer +func (seg *segment) encode(ptr []byte) []byte { + ptr = ikcp_encode32u(ptr, seg.conv) + ptr = ikcp_encode8u(ptr, seg.cmd) + ptr = ikcp_encode8u(ptr, seg.frg) + ptr = ikcp_encode16u(ptr, seg.wnd) + ptr = ikcp_encode32u(ptr, seg.ts) + ptr = ikcp_encode32u(ptr, seg.sn) + ptr = ikcp_encode32u(ptr, seg.una) + ptr = ikcp_encode32u(ptr, uint32(len(seg.data))) + atomic.AddUint64(&DefaultSnmp.OutSegs, 1) + return ptr +} + +// KCP defines a single KCP connection +type KCP struct { + conv, mtu, mss, state uint32 + snd_una, snd_nxt, rcv_nxt uint32 + ssthresh uint32 + rx_rttvar, rx_srtt int32 + rx_rto, rx_minrto uint32 + snd_wnd, rcv_wnd, rmt_wnd, cwnd, probe uint32 + interval, ts_flush uint32 + nodelay, updated uint32 + ts_probe, probe_wait uint32 + dead_link, incr uint32 + + fastresend int32 + nocwnd, stream int32 + + snd_queue []segment + rcv_queue []segment + snd_buf []segment + rcv_buf []segment + + acklist []ackItem + + buffer []byte + reserved int + output output_callback +} + +type ackItem struct { + sn uint32 + ts uint32 +} + +// NewKCP create a new kcp state machine +// +// 'conv' must be equal in the connection peers, or else data will be silently rejected. +// +// 'output' function will be called whenever these is data to be sent on wire. +func NewKCP(conv uint32, output output_callback) *KCP { + kcp := new(KCP) + kcp.conv = conv + kcp.snd_wnd = IKCP_WND_SND + kcp.rcv_wnd = IKCP_WND_RCV + kcp.rmt_wnd = IKCP_WND_RCV + kcp.mtu = IKCP_MTU_DEF + kcp.mss = kcp.mtu - IKCP_OVERHEAD + kcp.buffer = make([]byte, kcp.mtu) + kcp.rx_rto = IKCP_RTO_DEF + kcp.rx_minrto = IKCP_RTO_MIN + kcp.interval = IKCP_INTERVAL + kcp.ts_flush = IKCP_INTERVAL + kcp.ssthresh = IKCP_THRESH_INIT + kcp.dead_link = IKCP_DEADLINK + kcp.output = output + return kcp +} + +// newSegment creates a KCP segment +func (kcp *KCP) newSegment(size int) (seg segment) { + seg.data = xmitBuf.Get().([]byte)[:size] + return +} + +// delSegment recycles a KCP segment +func (kcp *KCP) delSegment(seg *segment) { + if seg.data != nil { + xmitBuf.Put(seg.data) + seg.data = nil + } +} + +// ReserveBytes keeps n bytes untouched from the beginning of the buffer, +// the output_callback function should be aware of this. +// +// Return false if n >= mss +func (kcp *KCP) ReserveBytes(n int) bool { + if n >= int(kcp.mtu-IKCP_OVERHEAD) || n < 0 { + return false + } + kcp.reserved = n + kcp.mss = kcp.mtu - IKCP_OVERHEAD - uint32(n) + return true +} + +// PeekSize checks the size of next message in the recv queue +func (kcp *KCP) PeekSize() (length int) { + if len(kcp.rcv_queue) == 0 { + return -1 + } + + seg := &kcp.rcv_queue[0] + if seg.frg == 0 { + return len(seg.data) + } + + if len(kcp.rcv_queue) < int(seg.frg+1) { + return -1 + } + + for k := range kcp.rcv_queue { + seg := &kcp.rcv_queue[k] + length += len(seg.data) + if seg.frg == 0 { + break + } + } + return +} + +// Receive data from kcp state machine +// +// Return number of bytes read. +// +// Return -1 when there is no readable data. +// +// Return -2 if len(buffer) is smaller than kcp.PeekSize(). +func (kcp *KCP) Recv(buffer []byte) (n int) { + peeksize := kcp.PeekSize() + if peeksize < 0 { + return -1 + } + + if peeksize > len(buffer) { + return -2 + } + + var fast_recover bool + if len(kcp.rcv_queue) >= int(kcp.rcv_wnd) { + fast_recover = true + } + + // merge fragment + count := 0 + for k := range kcp.rcv_queue { + seg := &kcp.rcv_queue[k] + copy(buffer, seg.data) + buffer = buffer[len(seg.data):] + n += len(seg.data) + count++ + kcp.delSegment(seg) + if seg.frg == 0 { + break + } + } + if count > 0 { + kcp.rcv_queue = kcp.remove_front(kcp.rcv_queue, count) + } + + // move available data from rcv_buf -> rcv_queue + count = 0 + for k := range kcp.rcv_buf { + seg := &kcp.rcv_buf[k] + if seg.sn == kcp.rcv_nxt && len(kcp.rcv_queue)+count < int(kcp.rcv_wnd) { + kcp.rcv_nxt++ + count++ + } else { + break + } + } + + if count > 0 { + kcp.rcv_queue = append(kcp.rcv_queue, kcp.rcv_buf[:count]...) + kcp.rcv_buf = kcp.remove_front(kcp.rcv_buf, count) + } + + // fast recover + if len(kcp.rcv_queue) < int(kcp.rcv_wnd) && fast_recover { + // ready to send back IKCP_CMD_WINS in ikcp_flush + // tell remote my window size + kcp.probe |= IKCP_ASK_TELL + } + return +} + +// Send is user/upper level send, returns below zero for error +func (kcp *KCP) Send(buffer []byte) int { + var count int + if len(buffer) == 0 { + return -1 + } + + // append to previous segment in streaming mode (if possible) + if kcp.stream != 0 { + n := len(kcp.snd_queue) + if n > 0 { + seg := &kcp.snd_queue[n-1] + if len(seg.data) < int(kcp.mss) { + capacity := int(kcp.mss) - len(seg.data) + extend := capacity + if len(buffer) < capacity { + extend = len(buffer) + } + + // grow slice, the underlying cap is guaranteed to + // be larger than kcp.mss + oldlen := len(seg.data) + seg.data = seg.data[:oldlen+extend] + copy(seg.data[oldlen:], buffer) + buffer = buffer[extend:] + } + } + + if len(buffer) == 0 { + return 0 + } + } + + if len(buffer) <= int(kcp.mss) { + count = 1 + } else { + count = (len(buffer) + int(kcp.mss) - 1) / int(kcp.mss) + } + + if count > 255 { + return -2 + } + + if count == 0 { + count = 1 + } + + for i := 0; i < count; i++ { + var size int + if len(buffer) > int(kcp.mss) { + size = int(kcp.mss) + } else { + size = len(buffer) + } + seg := kcp.newSegment(size) + copy(seg.data, buffer[:size]) + if kcp.stream == 0 { // message mode + seg.frg = uint8(count - i - 1) + } else { // stream mode + seg.frg = 0 + } + kcp.snd_queue = append(kcp.snd_queue, seg) + buffer = buffer[size:] + } + return 0 +} + +func (kcp *KCP) update_ack(rtt int32) { + // https://tools.ietf.org/html/rfc6298 + var rto uint32 + if kcp.rx_srtt == 0 { + kcp.rx_srtt = rtt + kcp.rx_rttvar = rtt >> 1 + } else { + delta := rtt - kcp.rx_srtt + kcp.rx_srtt += delta >> 3 + if delta < 0 { + delta = -delta + } + if rtt < kcp.rx_srtt-kcp.rx_rttvar { + // if the new RTT sample is below the bottom of the range of + // what an RTT measurement is expected to be. + // give an 8x reduced weight versus its normal weighting + kcp.rx_rttvar += (delta - kcp.rx_rttvar) >> 5 + } else { + kcp.rx_rttvar += (delta - kcp.rx_rttvar) >> 2 + } + } + rto = uint32(kcp.rx_srtt) + _imax_(kcp.interval, uint32(kcp.rx_rttvar)<<2) + kcp.rx_rto = _ibound_(kcp.rx_minrto, rto, IKCP_RTO_MAX) +} + +func (kcp *KCP) shrink_buf() { + if len(kcp.snd_buf) > 0 { + seg := &kcp.snd_buf[0] + kcp.snd_una = seg.sn + } else { + kcp.snd_una = kcp.snd_nxt + } +} + +func (kcp *KCP) parse_ack(sn uint32) { + if _itimediff(sn, kcp.snd_una) < 0 || _itimediff(sn, kcp.snd_nxt) >= 0 { + return + } + + for k := range kcp.snd_buf { + seg := &kcp.snd_buf[k] + if sn == seg.sn { + // mark and free space, but leave the segment here, + // and wait until `una` to delete this, then we don't + // have to shift the segments behind forward, + // which is an expensive operation for large window + seg.acked = 1 + kcp.delSegment(seg) + break + } + if _itimediff(sn, seg.sn) < 0 { + break + } + } +} + +func (kcp *KCP) parse_fastack(sn, ts uint32) { + if _itimediff(sn, kcp.snd_una) < 0 || _itimediff(sn, kcp.snd_nxt) >= 0 { + return + } + + for k := range kcp.snd_buf { + seg := &kcp.snd_buf[k] + if _itimediff(sn, seg.sn) < 0 { + break + } else if sn != seg.sn && _itimediff(seg.ts, ts) <= 0 { + seg.fastack++ + } + } +} + +func (kcp *KCP) parse_una(una uint32) { + count := 0 + for k := range kcp.snd_buf { + seg := &kcp.snd_buf[k] + if _itimediff(una, seg.sn) > 0 { + kcp.delSegment(seg) + count++ + } else { + break + } + } + if count > 0 { + kcp.snd_buf = kcp.remove_front(kcp.snd_buf, count) + } +} + +// ack append +func (kcp *KCP) ack_push(sn, ts uint32) { + kcp.acklist = append(kcp.acklist, ackItem{sn, ts}) +} + +// returns true if data has repeated +func (kcp *KCP) parse_data(newseg segment) bool { + sn := newseg.sn + if _itimediff(sn, kcp.rcv_nxt+kcp.rcv_wnd) >= 0 || + _itimediff(sn, kcp.rcv_nxt) < 0 { + return true + } + + n := len(kcp.rcv_buf) - 1 + insert_idx := 0 + repeat := false + for i := n; i >= 0; i-- { + seg := &kcp.rcv_buf[i] + if seg.sn == sn { + repeat = true + break + } + if _itimediff(sn, seg.sn) > 0 { + insert_idx = i + 1 + break + } + } + + if !repeat { + // replicate the content if it's new + dataCopy := xmitBuf.Get().([]byte)[:len(newseg.data)] + copy(dataCopy, newseg.data) + newseg.data = dataCopy + + if insert_idx == n+1 { + kcp.rcv_buf = append(kcp.rcv_buf, newseg) + } else { + kcp.rcv_buf = append(kcp.rcv_buf, segment{}) + copy(kcp.rcv_buf[insert_idx+1:], kcp.rcv_buf[insert_idx:]) + kcp.rcv_buf[insert_idx] = newseg + } + } + + // move available data from rcv_buf -> rcv_queue + count := 0 + for k := range kcp.rcv_buf { + seg := &kcp.rcv_buf[k] + if seg.sn == kcp.rcv_nxt && len(kcp.rcv_queue)+count < int(kcp.rcv_wnd) { + kcp.rcv_nxt++ + count++ + } else { + break + } + } + if count > 0 { + kcp.rcv_queue = append(kcp.rcv_queue, kcp.rcv_buf[:count]...) + kcp.rcv_buf = kcp.remove_front(kcp.rcv_buf, count) + } + + return repeat +} + +// Input a packet into kcp state machine. +// +// 'regular' indicates it's a real data packet from remote, and it means it's not generated from ReedSolomon +// codecs. +// +// 'ackNoDelay' will trigger immediate ACK, but surely it will not be efficient in bandwidth +func (kcp *KCP) Input(data []byte, regular, ackNoDelay bool) int { + snd_una := kcp.snd_una + if len(data) < IKCP_OVERHEAD { + return -1 + } + + var latest uint32 // the latest ack packet + var flag int + var inSegs uint64 + + for { + var ts, sn, length, una, conv uint32 + var wnd uint16 + var cmd, frg uint8 + + if len(data) < int(IKCP_OVERHEAD) { + break + } + + data = ikcp_decode32u(data, &conv) + if conv != kcp.conv { + return -1 + } + + data = ikcp_decode8u(data, &cmd) + data = ikcp_decode8u(data, &frg) + data = ikcp_decode16u(data, &wnd) + data = ikcp_decode32u(data, &ts) + data = ikcp_decode32u(data, &sn) + data = ikcp_decode32u(data, &una) + data = ikcp_decode32u(data, &length) + if len(data) < int(length) { + return -2 + } + + if cmd != IKCP_CMD_PUSH && cmd != IKCP_CMD_ACK && + cmd != IKCP_CMD_WASK && cmd != IKCP_CMD_WINS { + return -3 + } + + // only trust window updates from regular packets. i.e: latest update + if regular { + kcp.rmt_wnd = uint32(wnd) + } + kcp.parse_una(una) + kcp.shrink_buf() + + if cmd == IKCP_CMD_ACK { + kcp.parse_ack(sn) + kcp.parse_fastack(sn, ts) + flag |= 1 + latest = ts + } else if cmd == IKCP_CMD_PUSH { + repeat := true + if _itimediff(sn, kcp.rcv_nxt+kcp.rcv_wnd) < 0 { + kcp.ack_push(sn, ts) + if _itimediff(sn, kcp.rcv_nxt) >= 0 { + var seg segment + seg.conv = conv + seg.cmd = cmd + seg.frg = frg + seg.wnd = wnd + seg.ts = ts + seg.sn = sn + seg.una = una + seg.data = data[:length] // delayed data copying + repeat = kcp.parse_data(seg) + } + } + if regular && repeat { + atomic.AddUint64(&DefaultSnmp.RepeatSegs, 1) + } + } else if cmd == IKCP_CMD_WASK { + // ready to send back IKCP_CMD_WINS in Ikcp_flush + // tell remote my window size + kcp.probe |= IKCP_ASK_TELL + } else if cmd == IKCP_CMD_WINS { + // do nothing + } else { + return -3 + } + + inSegs++ + data = data[length:] + } + atomic.AddUint64(&DefaultSnmp.InSegs, inSegs) + + // update rtt with the latest ts + // ignore the FEC packet + if flag != 0 && regular { + current := currentMs() + if _itimediff(current, latest) >= 0 { + kcp.update_ack(_itimediff(current, latest)) + } + } + + // cwnd update when packet arrived + if kcp.nocwnd == 0 { + if _itimediff(kcp.snd_una, snd_una) > 0 { + if kcp.cwnd < kcp.rmt_wnd { + mss := kcp.mss + if kcp.cwnd < kcp.ssthresh { + kcp.cwnd++ + kcp.incr += mss + } else { + if kcp.incr < mss { + kcp.incr = mss + } + kcp.incr += (mss*mss)/kcp.incr + (mss / 16) + if (kcp.cwnd+1)*mss <= kcp.incr { + kcp.cwnd++ + } + } + if kcp.cwnd > kcp.rmt_wnd { + kcp.cwnd = kcp.rmt_wnd + kcp.incr = kcp.rmt_wnd * mss + } + } + } + } + + if ackNoDelay && len(kcp.acklist) > 0 { // ack immediately + kcp.flush(true) + } + return 0 +} + +func (kcp *KCP) wnd_unused() uint16 { + if len(kcp.rcv_queue) < int(kcp.rcv_wnd) { + return uint16(int(kcp.rcv_wnd) - len(kcp.rcv_queue)) + } + return 0 +} + +// flush pending data +func (kcp *KCP) flush(ackOnly bool) uint32 { + var seg segment + seg.conv = kcp.conv + seg.cmd = IKCP_CMD_ACK + seg.wnd = kcp.wnd_unused() + seg.una = kcp.rcv_nxt + + buffer := kcp.buffer + ptr := buffer[kcp.reserved:] // keep n bytes untouched + + // makeSpace makes room for writing + makeSpace := func(space int) { + size := len(buffer) - len(ptr) + if size+space > int(kcp.mtu) { + kcp.output(buffer, size) + ptr = buffer[kcp.reserved:] + } + } + + // flush bytes in buffer if there is any + flushBuffer := func() { + size := len(buffer) - len(ptr) + if size > kcp.reserved { + kcp.output(buffer, size) + } + } + + // flush acknowledges + for i, ack := range kcp.acklist { + makeSpace(IKCP_OVERHEAD) + // filter jitters caused by bufferbloat + if ack.sn >= kcp.rcv_nxt || len(kcp.acklist)-1 == i { + seg.sn, seg.ts = ack.sn, ack.ts + ptr = seg.encode(ptr) + } + } + kcp.acklist = kcp.acklist[0:0] + + if ackOnly { // flash remain ack segments + flushBuffer() + return kcp.interval + } + + // probe window size (if remote window size equals zero) + if kcp.rmt_wnd == 0 { + current := currentMs() + if kcp.probe_wait == 0 { + kcp.probe_wait = IKCP_PROBE_INIT + kcp.ts_probe = current + kcp.probe_wait + } else { + if _itimediff(current, kcp.ts_probe) >= 0 { + if kcp.probe_wait < IKCP_PROBE_INIT { + kcp.probe_wait = IKCP_PROBE_INIT + } + kcp.probe_wait += kcp.probe_wait / 2 + if kcp.probe_wait > IKCP_PROBE_LIMIT { + kcp.probe_wait = IKCP_PROBE_LIMIT + } + kcp.ts_probe = current + kcp.probe_wait + kcp.probe |= IKCP_ASK_SEND + } + } + } else { + kcp.ts_probe = 0 + kcp.probe_wait = 0 + } + + // flush window probing commands + if (kcp.probe & IKCP_ASK_SEND) != 0 { + seg.cmd = IKCP_CMD_WASK + makeSpace(IKCP_OVERHEAD) + ptr = seg.encode(ptr) + } + + // flush window probing commands + if (kcp.probe & IKCP_ASK_TELL) != 0 { + seg.cmd = IKCP_CMD_WINS + makeSpace(IKCP_OVERHEAD) + ptr = seg.encode(ptr) + } + + kcp.probe = 0 + + // calculate window size + cwnd := _imin_(kcp.snd_wnd, kcp.rmt_wnd) + if kcp.nocwnd == 0 { + cwnd = _imin_(kcp.cwnd, cwnd) + } + + // sliding window, controlled by snd_nxt && sna_una+cwnd + newSegsCount := 0 + for k := range kcp.snd_queue { + if _itimediff(kcp.snd_nxt, kcp.snd_una+cwnd) >= 0 { + break + } + newseg := kcp.snd_queue[k] + newseg.conv = kcp.conv + newseg.cmd = IKCP_CMD_PUSH + newseg.sn = kcp.snd_nxt + kcp.snd_buf = append(kcp.snd_buf, newseg) + kcp.snd_nxt++ + newSegsCount++ + } + if newSegsCount > 0 { + kcp.snd_queue = kcp.remove_front(kcp.snd_queue, newSegsCount) + } + + // calculate resent + resent := uint32(kcp.fastresend) + if kcp.fastresend <= 0 { + resent = 0xffffffff + } + + // check for retransmissions + current := currentMs() + var change, lostSegs, fastRetransSegs, earlyRetransSegs uint64 + minrto := int32(kcp.interval) + + ref := kcp.snd_buf[:len(kcp.snd_buf)] // for bounds check elimination + for k := range ref { + segment := &ref[k] + needsend := false + if segment.acked == 1 { + continue + } + if segment.xmit == 0 { // initial transmit + needsend = true + segment.rto = kcp.rx_rto + segment.resendts = current + segment.rto + } else if segment.fastack >= resent { // fast retransmit + needsend = true + segment.fastack = 0 + segment.rto = kcp.rx_rto + segment.resendts = current + segment.rto + change++ + fastRetransSegs++ + } else if segment.fastack > 0 && newSegsCount == 0 { // early retransmit + needsend = true + segment.fastack = 0 + segment.rto = kcp.rx_rto + segment.resendts = current + segment.rto + change++ + earlyRetransSegs++ + } else if _itimediff(current, segment.resendts) >= 0 { // RTO + needsend = true + if kcp.nodelay == 0 { + segment.rto += kcp.rx_rto + } else { + segment.rto += kcp.rx_rto / 2 + } + segment.fastack = 0 + segment.resendts = current + segment.rto + lostSegs++ + } + + if needsend { + current = currentMs() + segment.xmit++ + segment.ts = current + segment.wnd = seg.wnd + segment.una = seg.una + + need := IKCP_OVERHEAD + len(segment.data) + makeSpace(need) + ptr = segment.encode(ptr) + copy(ptr, segment.data) + ptr = ptr[len(segment.data):] + + if segment.xmit >= kcp.dead_link { + kcp.state = 0xFFFFFFFF + } + } + + // get the nearest rto + if rto := _itimediff(segment.resendts, current); rto > 0 && rto < minrto { + minrto = rto + } + } + + // flash remain segments + flushBuffer() + + // counter updates + sum := lostSegs + if lostSegs > 0 { + atomic.AddUint64(&DefaultSnmp.LostSegs, lostSegs) + } + if fastRetransSegs > 0 { + atomic.AddUint64(&DefaultSnmp.FastRetransSegs, fastRetransSegs) + sum += fastRetransSegs + } + if earlyRetransSegs > 0 { + atomic.AddUint64(&DefaultSnmp.EarlyRetransSegs, earlyRetransSegs) + sum += earlyRetransSegs + } + if sum > 0 { + atomic.AddUint64(&DefaultSnmp.RetransSegs, sum) + } + + // cwnd update + if kcp.nocwnd == 0 { + // update ssthresh + // rate halving, https://tools.ietf.org/html/rfc6937 + if change > 0 { + inflight := kcp.snd_nxt - kcp.snd_una + kcp.ssthresh = inflight / 2 + if kcp.ssthresh < IKCP_THRESH_MIN { + kcp.ssthresh = IKCP_THRESH_MIN + } + kcp.cwnd = kcp.ssthresh + resent + kcp.incr = kcp.cwnd * kcp.mss + } + + // congestion control, https://tools.ietf.org/html/rfc5681 + if lostSegs > 0 { + kcp.ssthresh = cwnd / 2 + if kcp.ssthresh < IKCP_THRESH_MIN { + kcp.ssthresh = IKCP_THRESH_MIN + } + kcp.cwnd = 1 + kcp.incr = kcp.mss + } + + if kcp.cwnd < 1 { + kcp.cwnd = 1 + kcp.incr = kcp.mss + } + } + + return uint32(minrto) +} + +// (deprecated) +// +// Update updates state (call it repeatedly, every 10ms-100ms), or you can ask +// ikcp_check when to call it again (without ikcp_input/_send calling). +// 'current' - current timestamp in millisec. +func (kcp *KCP) Update() { + var slap int32 + + current := currentMs() + if kcp.updated == 0 { + kcp.updated = 1 + kcp.ts_flush = current + } + + slap = _itimediff(current, kcp.ts_flush) + + if slap >= 10000 || slap < -10000 { + kcp.ts_flush = current + slap = 0 + } + + if slap >= 0 { + kcp.ts_flush += kcp.interval + if _itimediff(current, kcp.ts_flush) >= 0 { + kcp.ts_flush = current + kcp.interval + } + kcp.flush(false) + } +} + +// (deprecated) +// +// Check determines when should you invoke ikcp_update: +// returns when you should invoke ikcp_update in millisec, if there +// is no ikcp_input/_send calling. you can call ikcp_update in that +// time, instead of call update repeatly. +// Important to reduce unnacessary ikcp_update invoking. use it to +// schedule ikcp_update (eg. implementing an epoll-like mechanism, +// or optimize ikcp_update when handling massive kcp connections) +func (kcp *KCP) Check() uint32 { + current := currentMs() + ts_flush := kcp.ts_flush + tm_flush := int32(0x7fffffff) + tm_packet := int32(0x7fffffff) + minimal := uint32(0) + if kcp.updated == 0 { + return current + } + + if _itimediff(current, ts_flush) >= 10000 || + _itimediff(current, ts_flush) < -10000 { + ts_flush = current + } + + if _itimediff(current, ts_flush) >= 0 { + return current + } + + tm_flush = _itimediff(ts_flush, current) + + for k := range kcp.snd_buf { + seg := &kcp.snd_buf[k] + diff := _itimediff(seg.resendts, current) + if diff <= 0 { + return current + } + if diff < tm_packet { + tm_packet = diff + } + } + + minimal = uint32(tm_packet) + if tm_packet >= tm_flush { + minimal = uint32(tm_flush) + } + if minimal >= kcp.interval { + minimal = kcp.interval + } + + return current + minimal +} + +// SetMtu changes MTU size, default is 1400 +func (kcp *KCP) SetMtu(mtu int) int { + if mtu < 50 || mtu < IKCP_OVERHEAD { + return -1 + } + if kcp.reserved >= int(kcp.mtu-IKCP_OVERHEAD) || kcp.reserved < 0 { + return -1 + } + + buffer := make([]byte, mtu) + if buffer == nil { + return -2 + } + kcp.mtu = uint32(mtu) + kcp.mss = kcp.mtu - IKCP_OVERHEAD - uint32(kcp.reserved) + kcp.buffer = buffer + return 0 +} + +// NoDelay options +// fastest: ikcp_nodelay(kcp, 1, 20, 2, 1) +// nodelay: 0:disable(default), 1:enable +// interval: internal update timer interval in millisec, default is 100ms +// resend: 0:disable fast resend(default), 1:enable fast resend +// nc: 0:normal congestion control(default), 1:disable congestion control +func (kcp *KCP) NoDelay(nodelay, interval, resend, nc int) int { + if nodelay >= 0 { + kcp.nodelay = uint32(nodelay) + if nodelay != 0 { + kcp.rx_minrto = IKCP_RTO_NDL + } else { + kcp.rx_minrto = IKCP_RTO_MIN + } + } + if interval >= 0 { + if interval > 5000 { + interval = 5000 + } else if interval < 10 { + interval = 10 + } + kcp.interval = uint32(interval) + } + if resend >= 0 { + kcp.fastresend = int32(resend) + } + if nc >= 0 { + kcp.nocwnd = int32(nc) + } + return 0 +} + +// WndSize sets maximum window size: sndwnd=32, rcvwnd=32 by default +func (kcp *KCP) WndSize(sndwnd, rcvwnd int) int { + if sndwnd > 0 { + kcp.snd_wnd = uint32(sndwnd) + } + if rcvwnd > 0 { + kcp.rcv_wnd = uint32(rcvwnd) + } + return 0 +} + +// WaitSnd gets how many packet is waiting to be sent +func (kcp *KCP) WaitSnd() int { + return len(kcp.snd_buf) + len(kcp.snd_queue) +} + +// remove front n elements from queue +// if the number of elements to remove is more than half of the size. +// just shift the rear elements to front, otherwise just reslice q to q[n:] +// then the cost of runtime.growslice can always be less than n/2 +func (kcp *KCP) remove_front(q []segment, n int) []segment { + if n > cap(q)/2 { + newn := copy(q, q[n:]) + return q[:newn] + } + return q[n:] +} + +// Release all cached outgoing segments +func (kcp *KCP) ReleaseTX() { + for k := range kcp.snd_queue { + if kcp.snd_queue[k].data != nil { + xmitBuf.Put(kcp.snd_queue[k].data) + } + } + for k := range kcp.snd_buf { + if kcp.snd_buf[k].data != nil { + xmitBuf.Put(kcp.snd_buf[k].data) + } + } + kcp.snd_queue = nil + kcp.snd_buf = nil +} diff --git a/vendor/github.com/xtaci/kcp-go/readloop.go b/vendor/github.com/xtaci/kcp-go/readloop.go new file mode 100644 index 0000000..bc48e84 --- /dev/null +++ b/vendor/github.com/xtaci/kcp-go/readloop.go @@ -0,0 +1,48 @@ +package kcp + +import ( + "sync/atomic" + + "github.com/pkg/errors" +) + +func (s *UDPSession) defaultReadLoop() { + buf := make([]byte, mtuLimit) + var src string + for { + if n, addr, err := s.conn.ReadFrom(buf); err == nil { + // make sure the packet is from the same source + if src == "" { // set source address + src = addr.String() + } else if addr.String() != src { + atomic.AddUint64(&DefaultSnmp.InErrs, 1) + continue + } + + if n >= s.headerSize+IKCP_OVERHEAD { + s.packetInput(buf[:n]) + } else { + atomic.AddUint64(&DefaultSnmp.InErrs, 1) + } + } else { + s.notifyReadError(errors.WithStack(err)) + return + } + } +} + +func (l *Listener) defaultMonitor() { + buf := make([]byte, mtuLimit) + for { + if n, from, err := l.conn.ReadFrom(buf); err == nil { + if n >= l.headerSize+IKCP_OVERHEAD { + l.packetInput(buf[:n], from) + } else { + atomic.AddUint64(&DefaultSnmp.InErrs, 1) + } + } else { + l.notifyReadError(errors.WithStack(err)) + return + } + } +} diff --git a/vendor/github.com/xtaci/kcp-go/readloop_generic.go b/vendor/github.com/xtaci/kcp-go/readloop_generic.go new file mode 100644 index 0000000..5dbe4f4 --- /dev/null +++ b/vendor/github.com/xtaci/kcp-go/readloop_generic.go @@ -0,0 +1,11 @@ +// +build !linux + +package kcp + +func (s *UDPSession) readLoop() { + s.defaultReadLoop() +} + +func (l *Listener) monitor() { + l.defaultMonitor() +} diff --git a/vendor/github.com/xtaci/kcp-go/readloop_linux.go b/vendor/github.com/xtaci/kcp-go/readloop_linux.go new file mode 100644 index 0000000..6226478 --- /dev/null +++ b/vendor/github.com/xtaci/kcp-go/readloop_linux.go @@ -0,0 +1,120 @@ +// +build linux + +package kcp + +import ( + "net" + "os" + "sync/atomic" + + "github.com/pkg/errors" + "golang.org/x/net/ipv4" + "golang.org/x/net/ipv6" +) + +// the read loop for a client session +func (s *UDPSession) readLoop() { + // default version + if s.xconn == nil { + s.defaultReadLoop() + return + } + + // x/net version + var src string + msgs := make([]ipv4.Message, batchSize) + for k := range msgs { + msgs[k].Buffers = [][]byte{make([]byte, mtuLimit)} + } + + for { + if count, err := s.xconn.ReadBatch(msgs, 0); err == nil { + for i := 0; i < count; i++ { + msg := &msgs[i] + // make sure the packet is from the same source + if src == "" { // set source address if nil + src = msg.Addr.String() + } else if msg.Addr.String() != src { + atomic.AddUint64(&DefaultSnmp.InErrs, 1) + continue + } + + if msg.N < s.headerSize+IKCP_OVERHEAD { + atomic.AddUint64(&DefaultSnmp.InErrs, 1) + continue + } + + // source and size has validated + s.packetInput(msg.Buffers[0][:msg.N]) + } + } else { + // compatibility issue: + // for linux kernel<=2.6.32, support for sendmmsg is not available + // an error of type os.SyscallError will be returned + if operr, ok := err.(*net.OpError); ok { + if se, ok := operr.Err.(*os.SyscallError); ok { + if se.Syscall == "recvmmsg" { + s.defaultReadLoop() + return + } + } + } + s.notifyReadError(errors.WithStack(err)) + return + } + } +} + +// monitor incoming data for all connections of server +func (l *Listener) monitor() { + var xconn batchConn + if _, ok := l.conn.(*net.UDPConn); ok { + addr, err := net.ResolveUDPAddr("udp", l.conn.LocalAddr().String()) + if err == nil { + if addr.IP.To4() != nil { + xconn = ipv4.NewPacketConn(l.conn) + } else { + xconn = ipv6.NewPacketConn(l.conn) + } + } + } + + // default version + if xconn == nil { + l.defaultMonitor() + return + } + + // x/net version + msgs := make([]ipv4.Message, batchSize) + for k := range msgs { + msgs[k].Buffers = [][]byte{make([]byte, mtuLimit)} + } + + for { + if count, err := xconn.ReadBatch(msgs, 0); err == nil { + for i := 0; i < count; i++ { + msg := &msgs[i] + if msg.N >= l.headerSize+IKCP_OVERHEAD { + l.packetInput(msg.Buffers[0][:msg.N], msg.Addr) + } else { + atomic.AddUint64(&DefaultSnmp.InErrs, 1) + } + } + } else { + // compatibility issue: + // for linux kernel<=2.6.32, support for sendmmsg is not available + // an error of type os.SyscallError will be returned + if operr, ok := err.(*net.OpError); ok { + if se, ok := operr.Err.(*os.SyscallError); ok { + if se.Syscall == "recvmmsg" { + l.defaultMonitor() + return + } + } + } + l.notifyReadError(errors.WithStack(err)) + return + } + } +} diff --git a/vendor/github.com/xtaci/kcp-go/sess.go b/vendor/github.com/xtaci/kcp-go/sess.go new file mode 100644 index 0000000..2384816 --- /dev/null +++ b/vendor/github.com/xtaci/kcp-go/sess.go @@ -0,0 +1,1054 @@ +// Package kcp-go is a Reliable-UDP library for golang. +// +// This library intents to provide a smooth, resilient, ordered, +// error-checked and anonymous delivery of streams over UDP packets. +// +// The interfaces of this package aims to be compatible with +// net.Conn in standard library, but offers powerful features for advanced users. +package kcp + +import ( + "crypto/rand" + "encoding/binary" + "hash/crc32" + "io" + "net" + "sync" + "sync/atomic" + "time" + + "github.com/pkg/errors" + "golang.org/x/net/ipv4" + "golang.org/x/net/ipv6" +) + +const ( + // 16-bytes nonce for each packet + nonceSize = 16 + + // 4-bytes packet checksum + crcSize = 4 + + // overall crypto header size + cryptHeaderSize = nonceSize + crcSize + + // maximum packet size + mtuLimit = 1500 + + // FEC keeps rxFECMulti* (dataShard+parityShard) ordered packets in memory + rxFECMulti = 3 + + // accept backlog + acceptBacklog = 128 +) + +var ( + errInvalidOperation = errors.New("invalid operation") + errTimeout = errors.New("timeout") +) + +var ( + // a system-wide packet buffer shared among sending, receiving and FEC + // to mitigate high-frequency memory allocation for packets + xmitBuf sync.Pool +) + +func init() { + xmitBuf.New = func() interface{} { + return make([]byte, mtuLimit) + } +} + +type ( + // UDPSession defines a KCP session implemented by UDP + UDPSession struct { + conn net.PacketConn // the underlying packet connection + kcp *KCP // KCP ARQ protocol + l *Listener // pointing to the Listener object if it's been accepted by a Listener + block BlockCrypt // block encryption object + + // kcp receiving is based on packets + // recvbuf turns packets into stream + recvbuf []byte + bufptr []byte + + // FEC codec + fecDecoder *fecDecoder + fecEncoder *fecEncoder + + // settings + remote net.Addr // remote peer address + rd time.Time // read deadline + wd time.Time // write deadline + headerSize int // the header size additional to a KCP frame + ackNoDelay bool // send ack immediately for each incoming packet(testing purpose) + writeDelay bool // delay kcp.flush() for Write() for bulk transfer + dup int // duplicate udp packets(testing purpose) + + // notifications + die chan struct{} // notify current session has Closed + dieOnce sync.Once + chReadEvent chan struct{} // notify Read() can be called without blocking + chWriteEvent chan struct{} // notify Write() can be called without blocking + + // socket error handling + socketReadError atomic.Value + socketWriteError atomic.Value + chSocketReadError chan struct{} + chSocketWriteError chan struct{} + socketReadErrorOnce sync.Once + socketWriteErrorOnce sync.Once + + // nonce generator + nonce Entropy + + // packets waiting to be sent on wire + txqueue []ipv4.Message + xconn batchConn // for x/net + xconnWriteError error + + mu sync.Mutex + } + + setReadBuffer interface { + SetReadBuffer(bytes int) error + } + + setWriteBuffer interface { + SetWriteBuffer(bytes int) error + } + + setDSCP interface { + SetDSCP(int) error + } +) + +// newUDPSession create a new udp session for client or server +func newUDPSession(conv uint32, dataShards, parityShards int, l *Listener, conn net.PacketConn, remote net.Addr, block BlockCrypt) *UDPSession { + sess := new(UDPSession) + sess.die = make(chan struct{}) + sess.nonce = new(nonceAES128) + sess.nonce.Init() + sess.chReadEvent = make(chan struct{}, 1) + sess.chWriteEvent = make(chan struct{}, 1) + sess.chSocketReadError = make(chan struct{}) + sess.chSocketWriteError = make(chan struct{}) + sess.remote = remote + sess.conn = conn + sess.l = l + sess.block = block + sess.recvbuf = make([]byte, mtuLimit) + + // cast to writebatch conn + if _, ok := conn.(*net.UDPConn); ok { + addr, err := net.ResolveUDPAddr("udp", conn.LocalAddr().String()) + if err == nil { + if addr.IP.To4() != nil { + sess.xconn = ipv4.NewPacketConn(conn) + } else { + sess.xconn = ipv6.NewPacketConn(conn) + } + } + } + + // FEC codec initialization + sess.fecDecoder = newFECDecoder(rxFECMulti*(dataShards+parityShards), dataShards, parityShards) + if sess.block != nil { + sess.fecEncoder = newFECEncoder(dataShards, parityShards, cryptHeaderSize) + } else { + sess.fecEncoder = newFECEncoder(dataShards, parityShards, 0) + } + + // calculate additional header size introduced by FEC and encryption + if sess.block != nil { + sess.headerSize += cryptHeaderSize + } + if sess.fecEncoder != nil { + sess.headerSize += fecHeaderSizePlus2 + } + + sess.kcp = NewKCP(conv, func(buf []byte, size int) { + if size >= IKCP_OVERHEAD+sess.headerSize { + sess.output(buf[:size]) + } + }) + sess.kcp.ReserveBytes(sess.headerSize) + + if sess.l == nil { // it's a client connection + go sess.readLoop() + atomic.AddUint64(&DefaultSnmp.ActiveOpens, 1) + } else { + atomic.AddUint64(&DefaultSnmp.PassiveOpens, 1) + } + + // start per-session updater + go sess.updater() + + currestab := atomic.AddUint64(&DefaultSnmp.CurrEstab, 1) + maxconn := atomic.LoadUint64(&DefaultSnmp.MaxConn) + if currestab > maxconn { + atomic.CompareAndSwapUint64(&DefaultSnmp.MaxConn, maxconn, currestab) + } + + return sess +} + +// Read implements net.Conn +func (s *UDPSession) Read(b []byte) (n int, err error) { + for { + s.mu.Lock() + if len(s.bufptr) > 0 { // copy from buffer into b + n = copy(b, s.bufptr) + s.bufptr = s.bufptr[n:] + s.mu.Unlock() + atomic.AddUint64(&DefaultSnmp.BytesReceived, uint64(n)) + return n, nil + } + + if size := s.kcp.PeekSize(); size > 0 { // peek data size from kcp + if len(b) >= size { // receive data into 'b' directly + s.kcp.Recv(b) + s.mu.Unlock() + atomic.AddUint64(&DefaultSnmp.BytesReceived, uint64(size)) + return size, nil + } + + // if necessary resize the stream buffer to guarantee a sufficent buffer space + if cap(s.recvbuf) < size { + s.recvbuf = make([]byte, size) + } + + // resize the length of recvbuf to correspond to data size + s.recvbuf = s.recvbuf[:size] + s.kcp.Recv(s.recvbuf) + n = copy(b, s.recvbuf) // copy to 'b' + s.bufptr = s.recvbuf[n:] // pointer update + s.mu.Unlock() + atomic.AddUint64(&DefaultSnmp.BytesReceived, uint64(n)) + return n, nil + } + + // deadline for current reading operation + var timeout *time.Timer + var c <-chan time.Time + if !s.rd.IsZero() { + if time.Now().After(s.rd) { + s.mu.Unlock() + return 0, errors.WithStack(errTimeout) + } + + delay := s.rd.Sub(time.Now()) + timeout = time.NewTimer(delay) + c = timeout.C + } + s.mu.Unlock() + + // wait for read event or timeout or error + select { + case <-s.chReadEvent: + if timeout != nil { + timeout.Stop() + } + case <-c: + return 0, errors.WithStack(errTimeout) + case <-s.chSocketReadError: + return 0, s.socketReadError.Load().(error) + case <-s.die: + return 0, errors.WithStack(io.ErrClosedPipe) + } + } +} + +// Write implements net.Conn +func (s *UDPSession) Write(b []byte) (n int, err error) { return s.WriteBuffers([][]byte{b}) } + +// WriteBuffers write a vector of byte slices to the underlying connection +func (s *UDPSession) WriteBuffers(v [][]byte) (n int, err error) { + for { + select { + case <-s.chSocketWriteError: + return 0, s.socketWriteError.Load().(error) + case <-s.die: + return 0, errors.WithStack(io.ErrClosedPipe) + default: + } + + s.mu.Lock() + + // make sure write do not overflow the max sliding window on both side + waitsnd := s.kcp.WaitSnd() + if waitsnd < int(s.kcp.snd_wnd) && waitsnd < int(s.kcp.rmt_wnd) { + for _, b := range v { + n += len(b) + for { + if len(b) <= int(s.kcp.mss) { + s.kcp.Send(b) + break + } else { + s.kcp.Send(b[:s.kcp.mss]) + b = b[s.kcp.mss:] + } + } + } + + waitsnd = s.kcp.WaitSnd() + if waitsnd >= int(s.kcp.snd_wnd) || waitsnd >= int(s.kcp.rmt_wnd) || !s.writeDelay { + s.kcp.flush(false) + s.uncork() + } + s.mu.Unlock() + atomic.AddUint64(&DefaultSnmp.BytesSent, uint64(n)) + return n, nil + } + + var timeout *time.Timer + var c <-chan time.Time + if !s.wd.IsZero() { + if time.Now().After(s.wd) { + s.mu.Unlock() + return 0, errors.WithStack(errTimeout) + } + delay := s.wd.Sub(time.Now()) + timeout = time.NewTimer(delay) + c = timeout.C + } + s.mu.Unlock() + + select { + case <-s.chWriteEvent: + if timeout != nil { + timeout.Stop() + } + case <-c: + return 0, errors.WithStack(errTimeout) + case <-s.chSocketWriteError: + return 0, s.socketWriteError.Load().(error) + case <-s.die: + return 0, errors.WithStack(io.ErrClosedPipe) + } + } +} + +// uncork sends data in txqueue if there is any +func (s *UDPSession) uncork() { + if len(s.txqueue) > 0 { + s.tx(s.txqueue) + // recycle + for k := range s.txqueue { + xmitBuf.Put(s.txqueue[k].Buffers[0]) + s.txqueue[k].Buffers = nil + } + s.txqueue = s.txqueue[:0] + } + return +} + +// Close closes the connection. +func (s *UDPSession) Close() error { + var once bool + s.dieOnce.Do(func() { + close(s.die) + once = true + }) + + if once { + atomic.AddUint64(&DefaultSnmp.CurrEstab, ^uint64(0)) + + // try best to send all queued messages + s.mu.Lock() + s.kcp.flush(false) + s.uncork() + // release pending segments + s.kcp.ReleaseTX() + if s.fecDecoder != nil { + s.fecDecoder.release() + } + s.mu.Unlock() + + if s.l != nil { // belongs to listener + s.l.closeSession(s.remote) + return nil + } else { // client socket close + return s.conn.Close() + } + } else { + return errors.WithStack(io.ErrClosedPipe) + } +} + +// LocalAddr returns the local network address. The Addr returned is shared by all invocations of LocalAddr, so do not modify it. +func (s *UDPSession) LocalAddr() net.Addr { return s.conn.LocalAddr() } + +// RemoteAddr returns the remote network address. The Addr returned is shared by all invocations of RemoteAddr, so do not modify it. +func (s *UDPSession) RemoteAddr() net.Addr { return s.remote } + +// SetDeadline sets the deadline associated with the listener. A zero time value disables the deadline. +func (s *UDPSession) SetDeadline(t time.Time) error { + s.mu.Lock() + defer s.mu.Unlock() + s.rd = t + s.wd = t + s.notifyReadEvent() + s.notifyWriteEvent() + return nil +} + +// SetReadDeadline implements the Conn SetReadDeadline method. +func (s *UDPSession) SetReadDeadline(t time.Time) error { + s.mu.Lock() + defer s.mu.Unlock() + s.rd = t + s.notifyReadEvent() + return nil +} + +// SetWriteDeadline implements the Conn SetWriteDeadline method. +func (s *UDPSession) SetWriteDeadline(t time.Time) error { + s.mu.Lock() + defer s.mu.Unlock() + s.wd = t + s.notifyWriteEvent() + return nil +} + +// SetWriteDelay delays write for bulk transfer until the next update interval +func (s *UDPSession) SetWriteDelay(delay bool) { + s.mu.Lock() + defer s.mu.Unlock() + s.writeDelay = delay +} + +// SetWindowSize set maximum window size +func (s *UDPSession) SetWindowSize(sndwnd, rcvwnd int) { + s.mu.Lock() + defer s.mu.Unlock() + s.kcp.WndSize(sndwnd, rcvwnd) +} + +// SetMtu sets the maximum transmission unit(not including UDP header) +func (s *UDPSession) SetMtu(mtu int) bool { + if mtu > mtuLimit { + return false + } + + s.mu.Lock() + defer s.mu.Unlock() + s.kcp.SetMtu(mtu) + return true +} + +// SetStreamMode toggles the stream mode on/off +func (s *UDPSession) SetStreamMode(enable bool) { + s.mu.Lock() + defer s.mu.Unlock() + if enable { + s.kcp.stream = 1 + } else { + s.kcp.stream = 0 + } +} + +// SetACKNoDelay changes ack flush option, set true to flush ack immediately, +func (s *UDPSession) SetACKNoDelay(nodelay bool) { + s.mu.Lock() + defer s.mu.Unlock() + s.ackNoDelay = nodelay +} + +// (deprecated) +// +// SetDUP duplicates udp packets for kcp output. +func (s *UDPSession) SetDUP(dup int) { + s.mu.Lock() + defer s.mu.Unlock() + s.dup = dup +} + +// SetNoDelay calls nodelay() of kcp +// https://github.com/skywind3000/kcp/blob/master/README.en.md#protocol-configuration +func (s *UDPSession) SetNoDelay(nodelay, interval, resend, nc int) { + s.mu.Lock() + defer s.mu.Unlock() + s.kcp.NoDelay(nodelay, interval, resend, nc) +} + +// SetDSCP sets the 6bit DSCP field in IPv4 header, or 8bit Traffic Class in IPv6 header. +// +// if the underlying connection has implemented `func SetDSCP(int) error`, SetDSCP() will invoke +// this function instead. +// +// It has no effect if it's accepted from Listener. +func (s *UDPSession) SetDSCP(dscp int) error { + s.mu.Lock() + defer s.mu.Unlock() + if s.l != nil { + return errInvalidOperation + } + + // interface enabled + if ts, ok := s.conn.(setDSCP); ok { + return ts.SetDSCP(dscp) + } + + if nc, ok := s.conn.(net.Conn); ok { + var succeed bool + if err := ipv4.NewConn(nc).SetTOS(dscp << 2); err == nil { + succeed = true + } + if err := ipv6.NewConn(nc).SetTrafficClass(dscp); err == nil { + succeed = true + } + + if succeed { + return nil + } + } + return errInvalidOperation +} + +// SetReadBuffer sets the socket read buffer, no effect if it's accepted from Listener +func (s *UDPSession) SetReadBuffer(bytes int) error { + s.mu.Lock() + defer s.mu.Unlock() + if s.l == nil { + if nc, ok := s.conn.(setReadBuffer); ok { + return nc.SetReadBuffer(bytes) + } + } + return errInvalidOperation +} + +// SetWriteBuffer sets the socket write buffer, no effect if it's accepted from Listener +func (s *UDPSession) SetWriteBuffer(bytes int) error { + s.mu.Lock() + defer s.mu.Unlock() + if s.l == nil { + if nc, ok := s.conn.(setWriteBuffer); ok { + return nc.SetWriteBuffer(bytes) + } + } + return errInvalidOperation +} + +// post-processing for sending a packet from kcp core +// steps: +// 1. FEC packet generation +// 2. CRC32 integrity +// 3. Encryption +// 4. TxQueue +func (s *UDPSession) output(buf []byte) { + var ecc [][]byte + + // 1. FEC encoding + if s.fecEncoder != nil { + ecc = s.fecEncoder.encode(buf) + } + + // 2&3. crc32 & encryption + if s.block != nil { + s.nonce.Fill(buf[:nonceSize]) + checksum := crc32.ChecksumIEEE(buf[cryptHeaderSize:]) + binary.LittleEndian.PutUint32(buf[nonceSize:], checksum) + s.block.Encrypt(buf, buf) + + for k := range ecc { + s.nonce.Fill(ecc[k][:nonceSize]) + checksum := crc32.ChecksumIEEE(ecc[k][cryptHeaderSize:]) + binary.LittleEndian.PutUint32(ecc[k][nonceSize:], checksum) + s.block.Encrypt(ecc[k], ecc[k]) + } + } + + // 4. TxQueue + var msg ipv4.Message + for i := 0; i < s.dup+1; i++ { + bts := xmitBuf.Get().([]byte)[:len(buf)] + copy(bts, buf) + msg.Buffers = [][]byte{bts} + msg.Addr = s.remote + s.txqueue = append(s.txqueue, msg) + } + + for k := range ecc { + bts := xmitBuf.Get().([]byte)[:len(ecc[k])] + copy(bts, ecc[k]) + msg.Buffers = [][]byte{bts} + msg.Addr = s.remote + s.txqueue = append(s.txqueue, msg) + } +} + +// sess updater to trigger protocol +func (s *UDPSession) updater() { + timer := time.NewTimer(0) + for { + select { + case <-timer.C: + s.mu.Lock() + interval := time.Duration(s.kcp.flush(false)) * time.Millisecond + waitsnd := s.kcp.WaitSnd() + if waitsnd < int(s.kcp.snd_wnd) && waitsnd < int(s.kcp.rmt_wnd) { + s.notifyWriteEvent() + } + s.uncork() + s.mu.Unlock() + timer.Reset(interval) + case <-s.die: + timer.Stop() + return + } + } +} + +// GetConv gets conversation id of a session +func (s *UDPSession) GetConv() uint32 { return s.kcp.conv } + +func (s *UDPSession) notifyReadEvent() { + select { + case s.chReadEvent <- struct{}{}: + default: + } +} + +func (s *UDPSession) notifyWriteEvent() { + select { + case s.chWriteEvent <- struct{}{}: + default: + } +} + +func (s *UDPSession) notifyReadError(err error) { + s.socketReadErrorOnce.Do(func() { + s.socketReadError.Store(err) + close(s.chSocketReadError) + }) +} + +func (s *UDPSession) notifyWriteError(err error) { + s.socketWriteErrorOnce.Do(func() { + s.socketWriteError.Store(err) + close(s.chSocketWriteError) + }) +} + +// packet input stage +func (s *UDPSession) packetInput(data []byte) { + dataValid := false + if s.block != nil { + s.block.Decrypt(data, data) + data = data[nonceSize:] + checksum := crc32.ChecksumIEEE(data[crcSize:]) + if checksum == binary.LittleEndian.Uint32(data) { + data = data[crcSize:] + dataValid = true + } else { + atomic.AddUint64(&DefaultSnmp.InCsumErrors, 1) + } + } else if s.block == nil { + dataValid = true + } + + if dataValid { + s.kcpInput(data) + } +} + +func (s *UDPSession) kcpInput(data []byte) { + var kcpInErrors, fecErrs, fecRecovered, fecParityShards uint64 + + if s.fecDecoder != nil { + if len(data) > fecHeaderSize { // must be larger than fec header size + f := fecPacket(data) + if f.flag() == typeData || f.flag() == typeParity { // header check + if f.flag() == typeParity { + fecParityShards++ + } + + // lock + s.mu.Lock() + recovers := s.fecDecoder.decode(f) + if f.flag() == typeData { + if ret := s.kcp.Input(data[fecHeaderSizePlus2:], true, s.ackNoDelay); ret != 0 { + kcpInErrors++ + } + } + + for _, r := range recovers { + if len(r) >= 2 { // must be larger than 2bytes + sz := binary.LittleEndian.Uint16(r) + if int(sz) <= len(r) && sz >= 2 { + if ret := s.kcp.Input(r[2:sz], false, s.ackNoDelay); ret == 0 { + fecRecovered++ + } else { + kcpInErrors++ + } + } else { + fecErrs++ + } + } else { + fecErrs++ + } + // recycle the recovers + xmitBuf.Put(r) + } + + // to notify the readers to receive the data + if n := s.kcp.PeekSize(); n > 0 { + s.notifyReadEvent() + } + // to notify the writers + waitsnd := s.kcp.WaitSnd() + if waitsnd < int(s.kcp.snd_wnd) && waitsnd < int(s.kcp.rmt_wnd) { + s.notifyWriteEvent() + } + + s.uncork() + s.mu.Unlock() + } else { + atomic.AddUint64(&DefaultSnmp.InErrs, 1) + } + } else { + atomic.AddUint64(&DefaultSnmp.InErrs, 1) + } + } else { + s.mu.Lock() + if ret := s.kcp.Input(data, true, s.ackNoDelay); ret != 0 { + kcpInErrors++ + } + if n := s.kcp.PeekSize(); n > 0 { + s.notifyReadEvent() + } + waitsnd := s.kcp.WaitSnd() + if waitsnd < int(s.kcp.snd_wnd) && waitsnd < int(s.kcp.rmt_wnd) { + s.notifyWriteEvent() + } + s.uncork() + s.mu.Unlock() + } + + atomic.AddUint64(&DefaultSnmp.InPkts, 1) + atomic.AddUint64(&DefaultSnmp.InBytes, uint64(len(data))) + if fecParityShards > 0 { + atomic.AddUint64(&DefaultSnmp.FECParityShards, fecParityShards) + } + if kcpInErrors > 0 { + atomic.AddUint64(&DefaultSnmp.KCPInErrors, kcpInErrors) + } + if fecErrs > 0 { + atomic.AddUint64(&DefaultSnmp.FECErrs, fecErrs) + } + if fecRecovered > 0 { + atomic.AddUint64(&DefaultSnmp.FECRecovered, fecRecovered) + } + +} + +type ( + // Listener defines a server which will be waiting to accept incoming connections + Listener struct { + block BlockCrypt // block encryption + dataShards int // FEC data shard + parityShards int // FEC parity shard + fecDecoder *fecDecoder // FEC mock initialization + conn net.PacketConn // the underlying packet connection + + sessions map[string]*UDPSession // all sessions accepted by this Listener + sessionLock sync.Mutex + chAccepts chan *UDPSession // Listen() backlog + chSessionClosed chan net.Addr // session close queue + headerSize int // the additional header to a KCP frame + + die chan struct{} // notify the listener has closed + dieOnce sync.Once + + // socket error handling + socketReadError atomic.Value + chSocketReadError chan struct{} + socketReadErrorOnce sync.Once + + rd atomic.Value // read deadline for Accept() + } +) + +// packet input stage +func (l *Listener) packetInput(data []byte, addr net.Addr) { + dataValid := false + if l.block != nil { + l.block.Decrypt(data, data) + data = data[nonceSize:] + checksum := crc32.ChecksumIEEE(data[crcSize:]) + if checksum == binary.LittleEndian.Uint32(data) { + data = data[crcSize:] + dataValid = true + } else { + atomic.AddUint64(&DefaultSnmp.InCsumErrors, 1) + } + } else if l.block == nil { + dataValid = true + } + + if dataValid { + l.sessionLock.Lock() + s, ok := l.sessions[addr.String()] + l.sessionLock.Unlock() + + var conv, sn uint32 + convValid := false + if l.fecDecoder != nil { + isfec := binary.LittleEndian.Uint16(data[4:]) + if isfec == typeData { + conv = binary.LittleEndian.Uint32(data[fecHeaderSizePlus2:]) + sn = binary.LittleEndian.Uint32(data[fecHeaderSizePlus2+IKCP_SN_OFFSET:]) + convValid = true + } + } else { + conv = binary.LittleEndian.Uint32(data) + sn = binary.LittleEndian.Uint32(data[IKCP_SN_OFFSET:]) + convValid = true + } + + if ok { // existing connection + if !convValid || conv == s.kcp.conv { // parity or valid data shard + s.kcpInput(data) + } else if sn == 0 { // should replace current connection + s.Close() + s = nil + } + } + + if s == nil && convValid { // new session + if len(l.chAccepts) < cap(l.chAccepts) { // do not let the new sessions overwhelm accept queue + s := newUDPSession(conv, l.dataShards, l.parityShards, l, l.conn, addr, l.block) + s.kcpInput(data) + l.sessionLock.Lock() + l.sessions[addr.String()] = s + l.sessionLock.Unlock() + l.chAccepts <- s + } + } + } +} + +func (l *Listener) notifyReadError(err error) { + l.socketReadErrorOnce.Do(func() { + l.socketReadError.Store(err) + close(l.chSocketReadError) + + // propagate read error to all sessions + l.sessionLock.Lock() + for _, s := range l.sessions { + s.notifyReadError(err) + } + l.sessionLock.Unlock() + }) +} + +// SetReadBuffer sets the socket read buffer for the Listener +func (l *Listener) SetReadBuffer(bytes int) error { + if nc, ok := l.conn.(setReadBuffer); ok { + return nc.SetReadBuffer(bytes) + } + return errInvalidOperation +} + +// SetWriteBuffer sets the socket write buffer for the Listener +func (l *Listener) SetWriteBuffer(bytes int) error { + if nc, ok := l.conn.(setWriteBuffer); ok { + return nc.SetWriteBuffer(bytes) + } + return errInvalidOperation +} + +// SetDSCP sets the 6bit DSCP field in IPv4 header, or 8bit Traffic Class in IPv6 header. +// +// if the underlying connection has implemented `func SetDSCP(int) error`, SetDSCP() will invoke +// this function instead. +func (l *Listener) SetDSCP(dscp int) error { + // interface enabled + if ts, ok := l.conn.(setDSCP); ok { + return ts.SetDSCP(dscp) + } + + if nc, ok := l.conn.(net.Conn); ok { + var succeed bool + if err := ipv4.NewConn(nc).SetTOS(dscp << 2); err == nil { + succeed = true + } + if err := ipv6.NewConn(nc).SetTrafficClass(dscp); err == nil { + succeed = true + } + + if succeed { + return nil + } + } + return errInvalidOperation +} + +// Accept implements the Accept method in the Listener interface; it waits for the next call and returns a generic Conn. +func (l *Listener) Accept() (net.Conn, error) { + return l.AcceptKCP() +} + +// AcceptKCP accepts a KCP connection +func (l *Listener) AcceptKCP() (*UDPSession, error) { + var timeout <-chan time.Time + if tdeadline, ok := l.rd.Load().(time.Time); ok && !tdeadline.IsZero() { + timeout = time.After(tdeadline.Sub(time.Now())) + } + + select { + case <-timeout: + return nil, errors.WithStack(errTimeout) + case c := <-l.chAccepts: + return c, nil + case <-l.chSocketReadError: + return nil, l.socketReadError.Load().(error) + case <-l.die: + return nil, errors.WithStack(io.ErrClosedPipe) + } +} + +// SetDeadline sets the deadline associated with the listener. A zero time value disables the deadline. +func (l *Listener) SetDeadline(t time.Time) error { + l.SetReadDeadline(t) + l.SetWriteDeadline(t) + return nil +} + +// SetReadDeadline implements the Conn SetReadDeadline method. +func (l *Listener) SetReadDeadline(t time.Time) error { + l.rd.Store(t) + return nil +} + +// SetWriteDeadline implements the Conn SetWriteDeadline method. +func (l *Listener) SetWriteDeadline(t time.Time) error { return errInvalidOperation } + +// Close stops listening on the UDP address, and closes the socket +func (l *Listener) Close() error { + var once bool + l.dieOnce.Do(func() { + close(l.die) + once = true + }) + + if once { + return l.conn.Close() + } else { + return errors.WithStack(io.ErrClosedPipe) + } +} + +// closeSession notify the listener that a session has closed +func (l *Listener) closeSession(remote net.Addr) (ret bool) { + l.sessionLock.Lock() + defer l.sessionLock.Unlock() + if _, ok := l.sessions[remote.String()]; ok { + delete(l.sessions, remote.String()) + return true + } + return false +} + +// Addr returns the listener's network address, The Addr returned is shared by all invocations of Addr, so do not modify it. +func (l *Listener) Addr() net.Addr { return l.conn.LocalAddr() } + +// Listen listens for incoming KCP packets addressed to the local address laddr on the network "udp", +func Listen(laddr string) (net.Listener, error) { return ListenWithOptions(laddr, nil, 0, 0) } + +// ListenWithOptions listens for incoming KCP packets addressed to the local address laddr on the network "udp" with packet encryption. +// +// 'block' is the block encryption algorithm to encrypt packets. +// +// 'dataShards', 'parityShards' specifiy how many parity packets will be generated following the data packets. +// +// Check https://github.com/klauspost/reedsolomon for details +func ListenWithOptions(laddr string, block BlockCrypt, dataShards, parityShards int) (*Listener, error) { + udpaddr, err := net.ResolveUDPAddr("udp", laddr) + if err != nil { + return nil, errors.WithStack(err) + } + conn, err := net.ListenUDP("udp", udpaddr) + if err != nil { + return nil, errors.WithStack(err) + } + + return ServeConn(block, dataShards, parityShards, conn) +} + +// ServeConn serves KCP protocol for a single packet connection. +func ServeConn(block BlockCrypt, dataShards, parityShards int, conn net.PacketConn) (*Listener, error) { + l := new(Listener) + l.conn = conn + l.sessions = make(map[string]*UDPSession) + l.chAccepts = make(chan *UDPSession, acceptBacklog) + l.chSessionClosed = make(chan net.Addr) + l.die = make(chan struct{}) + l.dataShards = dataShards + l.parityShards = parityShards + l.block = block + l.fecDecoder = newFECDecoder(rxFECMulti*(dataShards+parityShards), dataShards, parityShards) + l.chSocketReadError = make(chan struct{}) + + // calculate header size + if l.block != nil { + l.headerSize += cryptHeaderSize + } + if l.fecDecoder != nil { + l.headerSize += fecHeaderSizePlus2 + } + + go l.monitor() + return l, nil +} + +// Dial connects to the remote address "raddr" on the network "udp" without encryption and FEC +func Dial(raddr string) (net.Conn, error) { return DialWithOptions(raddr, nil, 0, 0) } + +// DialWithOptions connects to the remote address "raddr" on the network "udp" with packet encryption +// +// 'block' is the block encryption algorithm to encrypt packets. +// +// 'dataShards', 'parityShards' specifiy how many parity packets will be generated following the data packets. +// +// Check https://github.com/klauspost/reedsolomon for details +func DialWithOptions(raddr string, block BlockCrypt, dataShards, parityShards int) (*UDPSession, error) { + // network type detection + udpaddr, err := net.ResolveUDPAddr("udp", raddr) + if err != nil { + return nil, errors.WithStack(err) + } + network := "udp4" + if udpaddr.IP.To4() == nil { + network = "udp" + } + + conn, err := net.ListenUDP(network, nil) + if err != nil { + return nil, errors.WithStack(err) + } + + return NewConn(raddr, block, dataShards, parityShards, conn) +} + +// NewConn3 establishes a session and talks KCP protocol over a packet connection. +func NewConn3(convid uint32, raddr net.Addr, block BlockCrypt, dataShards, parityShards int, conn net.PacketConn) (*UDPSession, error) { + return newUDPSession(convid, dataShards, parityShards, nil, conn, raddr, block), nil +} + +// NewConn2 establishes a session and talks KCP protocol over a packet connection. +func NewConn2(raddr net.Addr, block BlockCrypt, dataShards, parityShards int, conn net.PacketConn) (*UDPSession, error) { + var convid uint32 + binary.Read(rand.Reader, binary.LittleEndian, &convid) + return NewConn3(convid, raddr, block, dataShards, parityShards, conn) +} + +// NewConn establishes a session and talks KCP protocol over a packet connection. +func NewConn(raddr string, block BlockCrypt, dataShards, parityShards int, conn net.PacketConn) (*UDPSession, error) { + udpaddr, err := net.ResolveUDPAddr("udp", raddr) + if err != nil { + return nil, errors.WithStack(err) + } + return NewConn2(udpaddr, block, dataShards, parityShards, conn) +} diff --git a/vendor/github.com/xtaci/kcp-go/snmp.go b/vendor/github.com/xtaci/kcp-go/snmp.go new file mode 100644 index 0000000..607118e --- /dev/null +++ b/vendor/github.com/xtaci/kcp-go/snmp.go @@ -0,0 +1,164 @@ +package kcp + +import ( + "fmt" + "sync/atomic" +) + +// Snmp defines network statistics indicator +type Snmp struct { + BytesSent uint64 // bytes sent from upper level + BytesReceived uint64 // bytes received to upper level + MaxConn uint64 // max number of connections ever reached + ActiveOpens uint64 // accumulated active open connections + PassiveOpens uint64 // accumulated passive open connections + CurrEstab uint64 // current number of established connections + InErrs uint64 // UDP read errors reported from net.PacketConn + InCsumErrors uint64 // checksum errors from CRC32 + KCPInErrors uint64 // packet iput errors reported from KCP + InPkts uint64 // incoming packets count + OutPkts uint64 // outgoing packets count + InSegs uint64 // incoming KCP segments + OutSegs uint64 // outgoing KCP segments + InBytes uint64 // UDP bytes received + OutBytes uint64 // UDP bytes sent + RetransSegs uint64 // accmulated retransmited segments + FastRetransSegs uint64 // accmulated fast retransmitted segments + EarlyRetransSegs uint64 // accmulated early retransmitted segments + LostSegs uint64 // number of segs infered as lost + RepeatSegs uint64 // number of segs duplicated + FECRecovered uint64 // correct packets recovered from FEC + FECErrs uint64 // incorrect packets recovered from FEC + FECParityShards uint64 // FEC segments received + FECShortShards uint64 // number of data shards that's not enough for recovery +} + +func newSnmp() *Snmp { + return new(Snmp) +} + +// Header returns all field names +func (s *Snmp) Header() []string { + return []string{ + "BytesSent", + "BytesReceived", + "MaxConn", + "ActiveOpens", + "PassiveOpens", + "CurrEstab", + "InErrs", + "InCsumErrors", + "KCPInErrors", + "InPkts", + "OutPkts", + "InSegs", + "OutSegs", + "InBytes", + "OutBytes", + "RetransSegs", + "FastRetransSegs", + "EarlyRetransSegs", + "LostSegs", + "RepeatSegs", + "FECParityShards", + "FECErrs", + "FECRecovered", + "FECShortShards", + } +} + +// ToSlice returns current snmp info as slice +func (s *Snmp) ToSlice() []string { + snmp := s.Copy() + return []string{ + fmt.Sprint(snmp.BytesSent), + fmt.Sprint(snmp.BytesReceived), + fmt.Sprint(snmp.MaxConn), + fmt.Sprint(snmp.ActiveOpens), + fmt.Sprint(snmp.PassiveOpens), + fmt.Sprint(snmp.CurrEstab), + fmt.Sprint(snmp.InErrs), + fmt.Sprint(snmp.InCsumErrors), + fmt.Sprint(snmp.KCPInErrors), + fmt.Sprint(snmp.InPkts), + fmt.Sprint(snmp.OutPkts), + fmt.Sprint(snmp.InSegs), + fmt.Sprint(snmp.OutSegs), + fmt.Sprint(snmp.InBytes), + fmt.Sprint(snmp.OutBytes), + fmt.Sprint(snmp.RetransSegs), + fmt.Sprint(snmp.FastRetransSegs), + fmt.Sprint(snmp.EarlyRetransSegs), + fmt.Sprint(snmp.LostSegs), + fmt.Sprint(snmp.RepeatSegs), + fmt.Sprint(snmp.FECParityShards), + fmt.Sprint(snmp.FECErrs), + fmt.Sprint(snmp.FECRecovered), + fmt.Sprint(snmp.FECShortShards), + } +} + +// Copy make a copy of current snmp snapshot +func (s *Snmp) Copy() *Snmp { + d := newSnmp() + d.BytesSent = atomic.LoadUint64(&s.BytesSent) + d.BytesReceived = atomic.LoadUint64(&s.BytesReceived) + d.MaxConn = atomic.LoadUint64(&s.MaxConn) + d.ActiveOpens = atomic.LoadUint64(&s.ActiveOpens) + d.PassiveOpens = atomic.LoadUint64(&s.PassiveOpens) + d.CurrEstab = atomic.LoadUint64(&s.CurrEstab) + d.InErrs = atomic.LoadUint64(&s.InErrs) + d.InCsumErrors = atomic.LoadUint64(&s.InCsumErrors) + d.KCPInErrors = atomic.LoadUint64(&s.KCPInErrors) + d.InPkts = atomic.LoadUint64(&s.InPkts) + d.OutPkts = atomic.LoadUint64(&s.OutPkts) + d.InSegs = atomic.LoadUint64(&s.InSegs) + d.OutSegs = atomic.LoadUint64(&s.OutSegs) + d.InBytes = atomic.LoadUint64(&s.InBytes) + d.OutBytes = atomic.LoadUint64(&s.OutBytes) + d.RetransSegs = atomic.LoadUint64(&s.RetransSegs) + d.FastRetransSegs = atomic.LoadUint64(&s.FastRetransSegs) + d.EarlyRetransSegs = atomic.LoadUint64(&s.EarlyRetransSegs) + d.LostSegs = atomic.LoadUint64(&s.LostSegs) + d.RepeatSegs = atomic.LoadUint64(&s.RepeatSegs) + d.FECParityShards = atomic.LoadUint64(&s.FECParityShards) + d.FECErrs = atomic.LoadUint64(&s.FECErrs) + d.FECRecovered = atomic.LoadUint64(&s.FECRecovered) + d.FECShortShards = atomic.LoadUint64(&s.FECShortShards) + return d +} + +// Reset values to zero +func (s *Snmp) Reset() { + atomic.StoreUint64(&s.BytesSent, 0) + atomic.StoreUint64(&s.BytesReceived, 0) + atomic.StoreUint64(&s.MaxConn, 0) + atomic.StoreUint64(&s.ActiveOpens, 0) + atomic.StoreUint64(&s.PassiveOpens, 0) + atomic.StoreUint64(&s.CurrEstab, 0) + atomic.StoreUint64(&s.InErrs, 0) + atomic.StoreUint64(&s.InCsumErrors, 0) + atomic.StoreUint64(&s.KCPInErrors, 0) + atomic.StoreUint64(&s.InPkts, 0) + atomic.StoreUint64(&s.OutPkts, 0) + atomic.StoreUint64(&s.InSegs, 0) + atomic.StoreUint64(&s.OutSegs, 0) + atomic.StoreUint64(&s.InBytes, 0) + atomic.StoreUint64(&s.OutBytes, 0) + atomic.StoreUint64(&s.RetransSegs, 0) + atomic.StoreUint64(&s.FastRetransSegs, 0) + atomic.StoreUint64(&s.EarlyRetransSegs, 0) + atomic.StoreUint64(&s.LostSegs, 0) + atomic.StoreUint64(&s.RepeatSegs, 0) + atomic.StoreUint64(&s.FECParityShards, 0) + atomic.StoreUint64(&s.FECErrs, 0) + atomic.StoreUint64(&s.FECRecovered, 0) + atomic.StoreUint64(&s.FECShortShards, 0) +} + +// DefaultSnmp is the global KCP connection statistics collector +var DefaultSnmp *Snmp + +func init() { + DefaultSnmp = newSnmp() +} diff --git a/vendor/github.com/xtaci/kcp-go/tx.go b/vendor/github.com/xtaci/kcp-go/tx.go new file mode 100644 index 0000000..3397b82 --- /dev/null +++ b/vendor/github.com/xtaci/kcp-go/tx.go @@ -0,0 +1,24 @@ +package kcp + +import ( + "sync/atomic" + + "github.com/pkg/errors" + "golang.org/x/net/ipv4" +) + +func (s *UDPSession) defaultTx(txqueue []ipv4.Message) { + nbytes := 0 + npkts := 0 + for k := range txqueue { + if n, err := s.conn.WriteTo(txqueue[k].Buffers[0], txqueue[k].Addr); err == nil { + nbytes += n + npkts++ + } else { + s.notifyWriteError(errors.WithStack(err)) + break + } + } + atomic.AddUint64(&DefaultSnmp.OutPkts, uint64(npkts)) + atomic.AddUint64(&DefaultSnmp.OutBytes, uint64(nbytes)) +} diff --git a/vendor/github.com/xtaci/kcp-go/tx_generic.go b/vendor/github.com/xtaci/kcp-go/tx_generic.go new file mode 100644 index 0000000..0b4f349 --- /dev/null +++ b/vendor/github.com/xtaci/kcp-go/tx_generic.go @@ -0,0 +1,11 @@ +// +build !linux + +package kcp + +import ( + "golang.org/x/net/ipv4" +) + +func (s *UDPSession) tx(txqueue []ipv4.Message) { + s.defaultTx(txqueue) +} diff --git a/vendor/github.com/xtaci/kcp-go/tx_linux.go b/vendor/github.com/xtaci/kcp-go/tx_linux.go new file mode 100644 index 0000000..4f19df5 --- /dev/null +++ b/vendor/github.com/xtaci/kcp-go/tx_linux.go @@ -0,0 +1,51 @@ +// +build linux + +package kcp + +import ( + "net" + "os" + "sync/atomic" + + "github.com/pkg/errors" + "golang.org/x/net/ipv4" +) + +func (s *UDPSession) tx(txqueue []ipv4.Message) { + // default version + if s.xconn == nil || s.xconnWriteError != nil { + s.defaultTx(txqueue) + return + } + + // x/net version + nbytes := 0 + npkts := 0 + for len(txqueue) > 0 { + if n, err := s.xconn.WriteBatch(txqueue, 0); err == nil { + for k := range txqueue[:n] { + nbytes += len(txqueue[k].Buffers[0]) + } + npkts += n + txqueue = txqueue[n:] + } else { + // compatibility issue: + // for linux kernel<=2.6.32, support for sendmmsg is not available + // an error of type os.SyscallError will be returned + if operr, ok := err.(*net.OpError); ok { + if se, ok := operr.Err.(*os.SyscallError); ok { + if se.Syscall == "sendmmsg" { + s.xconnWriteError = se + s.defaultTx(txqueue) + return + } + } + } + s.notifyWriteError(errors.WithStack(err)) + break + } + } + + atomic.AddUint64(&DefaultSnmp.OutPkts, uint64(npkts)) + atomic.AddUint64(&DefaultSnmp.OutBytes, uint64(nbytes)) +} diff --git a/vendor/github.com/xtaci/kcp-go/wechat_donate.jpg b/vendor/github.com/xtaci/kcp-go/wechat_donate.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ad72505ce56882faf47353fbc27c54826df29526 GIT binary patch literal 35307 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 F|JmoHbYK7g literal 0 HcmV?d00001 diff --git a/vendor/golang.org/x/crypto/AUTHORS b/vendor/golang.org/x/crypto/AUTHORS new file mode 100644 index 0000000..2b00ddb --- /dev/null +++ b/vendor/golang.org/x/crypto/AUTHORS @@ -0,0 +1,3 @@ +# This source code refers to The Go Authors for copyright purposes. +# The master list of authors is in the main Go distribution, +# visible at https://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/crypto/CONTRIBUTORS b/vendor/golang.org/x/crypto/CONTRIBUTORS new file mode 100644 index 0000000..1fbd3e9 --- /dev/null +++ b/vendor/golang.org/x/crypto/CONTRIBUTORS @@ -0,0 +1,3 @@ +# This source code was written by the Go contributors. +# The master list of contributors is in the main Go distribution, +# visible at https://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/crypto/LICENSE b/vendor/golang.org/x/crypto/LICENSE new file mode 100644 index 0000000..6a66aea --- /dev/null +++ b/vendor/golang.org/x/crypto/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +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 Inc. 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/crypto/PATENTS b/vendor/golang.org/x/crypto/PATENTS new file mode 100644 index 0000000..7330990 --- /dev/null +++ b/vendor/golang.org/x/crypto/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/crypto/argon2/argon2.go b/vendor/golang.org/x/crypto/argon2/argon2.go new file mode 100644 index 0000000..b423fea --- /dev/null +++ b/vendor/golang.org/x/crypto/argon2/argon2.go @@ -0,0 +1,285 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package argon2 implements the key derivation function Argon2. +// Argon2 was selected as the winner of the Password Hashing Competition and can +// be used to derive cryptographic keys from passwords. +// +// For a detailed specification of Argon2 see [1]. +// +// If you aren't sure which function you need, use Argon2id (IDKey) and +// the parameter recommendations for your scenario. +// +// +// Argon2i +// +// Argon2i (implemented by Key) is the side-channel resistant version of Argon2. +// It uses data-independent memory access, which is preferred for password +// hashing and password-based key derivation. Argon2i requires more passes over +// memory than Argon2id to protect from trade-off attacks. The recommended +// parameters (taken from [2]) for non-interactive operations are time=3 and to +// use the maximum available memory. +// +// +// Argon2id +// +// Argon2id (implemented by IDKey) is a hybrid version of Argon2 combining +// Argon2i and Argon2d. It uses data-independent memory access for the first +// half of the first iteration over the memory and data-dependent memory access +// for the rest. Argon2id is side-channel resistant and provides better brute- +// force cost savings due to time-memory tradeoffs than Argon2i. The recommended +// parameters for non-interactive operations (taken from [2]) are time=1 and to +// use the maximum available memory. +// +// [1] https://github.com/P-H-C/phc-winner-argon2/blob/master/argon2-specs.pdf +// [2] https://tools.ietf.org/html/draft-irtf-cfrg-argon2-03#section-9.3 +package argon2 + +import ( + "encoding/binary" + "sync" + + "golang.org/x/crypto/blake2b" +) + +// The Argon2 version implemented by this package. +const Version = 0x13 + +const ( + argon2d = iota + argon2i + argon2id +) + +// Key derives a key from the password, salt, and cost parameters using Argon2i +// returning a byte slice of length keyLen that can be used as cryptographic +// key. The CPU cost and parallelism degree must be greater than zero. +// +// For example, you can get a derived key for e.g. AES-256 (which needs a +// 32-byte key) by doing: +// +// key := argon2.Key([]byte("some password"), salt, 3, 32*1024, 4, 32) +// +// The draft RFC recommends[2] time=3, and memory=32*1024 is a sensible number. +// If using that amount of memory (32 MB) is not possible in some contexts then +// the time parameter can be increased to compensate. +// +// The time parameter specifies the number of passes over the memory and the +// memory parameter specifies the size of the memory in KiB. For example +// memory=32*1024 sets the memory cost to ~32 MB. The number of threads can be +// adjusted to the number of available CPUs. The cost parameters should be +// increased as memory latency and CPU parallelism increases. Remember to get a +// good random salt. +func Key(password, salt []byte, time, memory uint32, threads uint8, keyLen uint32) []byte { + return deriveKey(argon2i, password, salt, nil, nil, time, memory, threads, keyLen) +} + +// IDKey derives a key from the password, salt, and cost parameters using +// Argon2id returning a byte slice of length keyLen that can be used as +// cryptographic key. The CPU cost and parallelism degree must be greater than +// zero. +// +// For example, you can get a derived key for e.g. AES-256 (which needs a +// 32-byte key) by doing: +// +// key := argon2.IDKey([]byte("some password"), salt, 1, 64*1024, 4, 32) +// +// The draft RFC recommends[2] time=1, and memory=64*1024 is a sensible number. +// If using that amount of memory (64 MB) is not possible in some contexts then +// the time parameter can be increased to compensate. +// +// The time parameter specifies the number of passes over the memory and the +// memory parameter specifies the size of the memory in KiB. For example +// memory=64*1024 sets the memory cost to ~64 MB. The number of threads can be +// adjusted to the numbers of available CPUs. The cost parameters should be +// increased as memory latency and CPU parallelism increases. Remember to get a +// good random salt. +func IDKey(password, salt []byte, time, memory uint32, threads uint8, keyLen uint32) []byte { + return deriveKey(argon2id, password, salt, nil, nil, time, memory, threads, keyLen) +} + +func deriveKey(mode int, password, salt, secret, data []byte, time, memory uint32, threads uint8, keyLen uint32) []byte { + if time < 1 { + panic("argon2: number of rounds too small") + } + if threads < 1 { + panic("argon2: parallelism degree too low") + } + h0 := initHash(password, salt, secret, data, time, memory, uint32(threads), keyLen, mode) + + memory = memory / (syncPoints * uint32(threads)) * (syncPoints * uint32(threads)) + if memory < 2*syncPoints*uint32(threads) { + memory = 2 * syncPoints * uint32(threads) + } + B := initBlocks(&h0, memory, uint32(threads)) + processBlocks(B, time, memory, uint32(threads), mode) + return extractKey(B, memory, uint32(threads), keyLen) +} + +const ( + blockLength = 128 + syncPoints = 4 +) + +type block [blockLength]uint64 + +func initHash(password, salt, key, data []byte, time, memory, threads, keyLen uint32, mode int) [blake2b.Size + 8]byte { + var ( + h0 [blake2b.Size + 8]byte + params [24]byte + tmp [4]byte + ) + + b2, _ := blake2b.New512(nil) + binary.LittleEndian.PutUint32(params[0:4], threads) + binary.LittleEndian.PutUint32(params[4:8], keyLen) + binary.LittleEndian.PutUint32(params[8:12], memory) + binary.LittleEndian.PutUint32(params[12:16], time) + binary.LittleEndian.PutUint32(params[16:20], uint32(Version)) + binary.LittleEndian.PutUint32(params[20:24], uint32(mode)) + b2.Write(params[:]) + binary.LittleEndian.PutUint32(tmp[:], uint32(len(password))) + b2.Write(tmp[:]) + b2.Write(password) + binary.LittleEndian.PutUint32(tmp[:], uint32(len(salt))) + b2.Write(tmp[:]) + b2.Write(salt) + binary.LittleEndian.PutUint32(tmp[:], uint32(len(key))) + b2.Write(tmp[:]) + b2.Write(key) + binary.LittleEndian.PutUint32(tmp[:], uint32(len(data))) + b2.Write(tmp[:]) + b2.Write(data) + b2.Sum(h0[:0]) + return h0 +} + +func initBlocks(h0 *[blake2b.Size + 8]byte, memory, threads uint32) []block { + var block0 [1024]byte + B := make([]block, memory) + for lane := uint32(0); lane < threads; lane++ { + j := lane * (memory / threads) + binary.LittleEndian.PutUint32(h0[blake2b.Size+4:], lane) + + binary.LittleEndian.PutUint32(h0[blake2b.Size:], 0) + blake2bHash(block0[:], h0[:]) + for i := range B[j+0] { + B[j+0][i] = binary.LittleEndian.Uint64(block0[i*8:]) + } + + binary.LittleEndian.PutUint32(h0[blake2b.Size:], 1) + blake2bHash(block0[:], h0[:]) + for i := range B[j+1] { + B[j+1][i] = binary.LittleEndian.Uint64(block0[i*8:]) + } + } + return B +} + +func processBlocks(B []block, time, memory, threads uint32, mode int) { + lanes := memory / threads + segments := lanes / syncPoints + + processSegment := func(n, slice, lane uint32, wg *sync.WaitGroup) { + var addresses, in, zero block + if mode == argon2i || (mode == argon2id && n == 0 && slice < syncPoints/2) { + in[0] = uint64(n) + in[1] = uint64(lane) + in[2] = uint64(slice) + in[3] = uint64(memory) + in[4] = uint64(time) + in[5] = uint64(mode) + } + + index := uint32(0) + if n == 0 && slice == 0 { + index = 2 // we have already generated the first two blocks + if mode == argon2i || mode == argon2id { + in[6]++ + processBlock(&addresses, &in, &zero) + processBlock(&addresses, &addresses, &zero) + } + } + + offset := lane*lanes + slice*segments + index + var random uint64 + for index < segments { + prev := offset - 1 + if index == 0 && slice == 0 { + prev += lanes // last block in lane + } + if mode == argon2i || (mode == argon2id && n == 0 && slice < syncPoints/2) { + if index%blockLength == 0 { + in[6]++ + processBlock(&addresses, &in, &zero) + processBlock(&addresses, &addresses, &zero) + } + random = addresses[index%blockLength] + } else { + random = B[prev][0] + } + newOffset := indexAlpha(random, lanes, segments, threads, n, slice, lane, index) + processBlockXOR(&B[offset], &B[prev], &B[newOffset]) + index, offset = index+1, offset+1 + } + wg.Done() + } + + for n := uint32(0); n < time; n++ { + for slice := uint32(0); slice < syncPoints; slice++ { + var wg sync.WaitGroup + for lane := uint32(0); lane < threads; lane++ { + wg.Add(1) + go processSegment(n, slice, lane, &wg) + } + wg.Wait() + } + } + +} + +func extractKey(B []block, memory, threads, keyLen uint32) []byte { + lanes := memory / threads + for lane := uint32(0); lane < threads-1; lane++ { + for i, v := range B[(lane*lanes)+lanes-1] { + B[memory-1][i] ^= v + } + } + + var block [1024]byte + for i, v := range B[memory-1] { + binary.LittleEndian.PutUint64(block[i*8:], v) + } + key := make([]byte, keyLen) + blake2bHash(key, block[:]) + return key +} + +func indexAlpha(rand uint64, lanes, segments, threads, n, slice, lane, index uint32) uint32 { + refLane := uint32(rand>>32) % threads + if n == 0 && slice == 0 { + refLane = lane + } + m, s := 3*segments, ((slice+1)%syncPoints)*segments + if lane == refLane { + m += index + } + if n == 0 { + m, s = slice*segments, 0 + if slice == 0 || lane == refLane { + m += index + } + } + if index == 0 || lane == refLane { + m-- + } + return phi(rand, uint64(m), uint64(s), refLane, lanes) +} + +func phi(rand, m, s uint64, lane, lanes uint32) uint32 { + p := rand & 0xFFFFFFFF + p = (p * p) >> 32 + p = (p * m) >> 32 + return lane*lanes + uint32((s+m-(p+1))%uint64(lanes)) +} diff --git a/vendor/golang.org/x/crypto/argon2/blake2b.go b/vendor/golang.org/x/crypto/argon2/blake2b.go new file mode 100644 index 0000000..10f4694 --- /dev/null +++ b/vendor/golang.org/x/crypto/argon2/blake2b.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. + +package argon2 + +import ( + "encoding/binary" + "hash" + + "golang.org/x/crypto/blake2b" +) + +// blake2bHash computes an arbitrary long hash value of in +// and writes the hash to out. +func blake2bHash(out []byte, in []byte) { + var b2 hash.Hash + if n := len(out); n < blake2b.Size { + b2, _ = blake2b.New(n, nil) + } else { + b2, _ = blake2b.New512(nil) + } + + var buffer [blake2b.Size]byte + binary.LittleEndian.PutUint32(buffer[:4], uint32(len(out))) + b2.Write(buffer[:4]) + b2.Write(in) + + if len(out) <= blake2b.Size { + b2.Sum(out[:0]) + return + } + + outLen := len(out) + b2.Sum(buffer[:0]) + b2.Reset() + copy(out, buffer[:32]) + out = out[32:] + for len(out) > blake2b.Size { + b2.Write(buffer[:]) + b2.Sum(buffer[:0]) + copy(out, buffer[:32]) + out = out[32:] + b2.Reset() + } + + if outLen%blake2b.Size > 0 { // outLen > 64 + r := ((outLen + 31) / 32) - 2 // ⌈τ /32⌉-2 + b2, _ = blake2b.New(outLen-32*r, nil) + } + b2.Write(buffer[:]) + b2.Sum(out[:0]) +} diff --git a/vendor/golang.org/x/crypto/argon2/blamka_amd64.go b/vendor/golang.org/x/crypto/argon2/blamka_amd64.go new file mode 100644 index 0000000..a014ac9 --- /dev/null +++ b/vendor/golang.org/x/crypto/argon2/blamka_amd64.go @@ -0,0 +1,61 @@ +// 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 && gc && !purego +// +build amd64,gc,!purego + +package argon2 + +import "golang.org/x/sys/cpu" + +func init() { + useSSE4 = cpu.X86.HasSSE41 +} + +//go:noescape +func mixBlocksSSE2(out, a, b, c *block) + +//go:noescape +func xorBlocksSSE2(out, a, b, c *block) + +//go:noescape +func blamkaSSE4(b *block) + +func processBlockSSE(out, in1, in2 *block, xor bool) { + var t block + mixBlocksSSE2(&t, in1, in2, &t) + if useSSE4 { + blamkaSSE4(&t) + } else { + for i := 0; i < blockLength; i += 16 { + blamkaGeneric( + &t[i+0], &t[i+1], &t[i+2], &t[i+3], + &t[i+4], &t[i+5], &t[i+6], &t[i+7], + &t[i+8], &t[i+9], &t[i+10], &t[i+11], + &t[i+12], &t[i+13], &t[i+14], &t[i+15], + ) + } + for i := 0; i < blockLength/8; i += 2 { + blamkaGeneric( + &t[i], &t[i+1], &t[16+i], &t[16+i+1], + &t[32+i], &t[32+i+1], &t[48+i], &t[48+i+1], + &t[64+i], &t[64+i+1], &t[80+i], &t[80+i+1], + &t[96+i], &t[96+i+1], &t[112+i], &t[112+i+1], + ) + } + } + if xor { + xorBlocksSSE2(out, in1, in2, &t) + } else { + mixBlocksSSE2(out, in1, in2, &t) + } +} + +func processBlock(out, in1, in2 *block) { + processBlockSSE(out, in1, in2, false) +} + +func processBlockXOR(out, in1, in2 *block) { + processBlockSSE(out, in1, in2, true) +} diff --git a/vendor/golang.org/x/crypto/argon2/blamka_amd64.s b/vendor/golang.org/x/crypto/argon2/blamka_amd64.s new file mode 100644 index 0000000..b2cc051 --- /dev/null +++ b/vendor/golang.org/x/crypto/argon2/blamka_amd64.s @@ -0,0 +1,244 @@ +// 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 && gc && !purego +// +build amd64,gc,!purego + +#include "textflag.h" + +DATA ·c40<>+0x00(SB)/8, $0x0201000706050403 +DATA ·c40<>+0x08(SB)/8, $0x0a09080f0e0d0c0b +GLOBL ·c40<>(SB), (NOPTR+RODATA), $16 + +DATA ·c48<>+0x00(SB)/8, $0x0100070605040302 +DATA ·c48<>+0x08(SB)/8, $0x09080f0e0d0c0b0a +GLOBL ·c48<>(SB), (NOPTR+RODATA), $16 + +#define SHUFFLE(v2, v3, v4, v5, v6, v7, t1, t2) \ + MOVO v4, t1; \ + MOVO v5, v4; \ + MOVO t1, v5; \ + MOVO v6, t1; \ + PUNPCKLQDQ v6, t2; \ + PUNPCKHQDQ v7, v6; \ + PUNPCKHQDQ t2, v6; \ + PUNPCKLQDQ v7, t2; \ + MOVO t1, v7; \ + MOVO v2, t1; \ + PUNPCKHQDQ t2, v7; \ + PUNPCKLQDQ v3, t2; \ + PUNPCKHQDQ t2, v2; \ + PUNPCKLQDQ t1, t2; \ + PUNPCKHQDQ t2, v3 + +#define SHUFFLE_INV(v2, v3, v4, v5, v6, v7, t1, t2) \ + MOVO v4, t1; \ + MOVO v5, v4; \ + MOVO t1, v5; \ + MOVO v2, t1; \ + PUNPCKLQDQ v2, t2; \ + PUNPCKHQDQ v3, v2; \ + PUNPCKHQDQ t2, v2; \ + PUNPCKLQDQ v3, t2; \ + MOVO t1, v3; \ + MOVO v6, t1; \ + PUNPCKHQDQ t2, v3; \ + PUNPCKLQDQ v7, t2; \ + PUNPCKHQDQ t2, v6; \ + PUNPCKLQDQ t1, t2; \ + PUNPCKHQDQ t2, v7 + +#define HALF_ROUND(v0, v1, v2, v3, v4, v5, v6, v7, t0, c40, c48) \ + MOVO v0, t0; \ + PMULULQ v2, t0; \ + PADDQ v2, v0; \ + PADDQ t0, v0; \ + PADDQ t0, v0; \ + PXOR v0, v6; \ + PSHUFD $0xB1, v6, v6; \ + MOVO v4, t0; \ + PMULULQ v6, t0; \ + PADDQ v6, v4; \ + PADDQ t0, v4; \ + PADDQ t0, v4; \ + PXOR v4, v2; \ + PSHUFB c40, v2; \ + MOVO v0, t0; \ + PMULULQ v2, t0; \ + PADDQ v2, v0; \ + PADDQ t0, v0; \ + PADDQ t0, v0; \ + PXOR v0, v6; \ + PSHUFB c48, v6; \ + MOVO v4, t0; \ + PMULULQ v6, t0; \ + PADDQ v6, v4; \ + PADDQ t0, v4; \ + PADDQ t0, v4; \ + PXOR v4, v2; \ + MOVO v2, t0; \ + PADDQ v2, t0; \ + PSRLQ $63, v2; \ + PXOR t0, v2; \ + MOVO v1, t0; \ + PMULULQ v3, t0; \ + PADDQ v3, v1; \ + PADDQ t0, v1; \ + PADDQ t0, v1; \ + PXOR v1, v7; \ + PSHUFD $0xB1, v7, v7; \ + MOVO v5, t0; \ + PMULULQ v7, t0; \ + PADDQ v7, v5; \ + PADDQ t0, v5; \ + PADDQ t0, v5; \ + PXOR v5, v3; \ + PSHUFB c40, v3; \ + MOVO v1, t0; \ + PMULULQ v3, t0; \ + PADDQ v3, v1; \ + PADDQ t0, v1; \ + PADDQ t0, v1; \ + PXOR v1, v7; \ + PSHUFB c48, v7; \ + MOVO v5, t0; \ + PMULULQ v7, t0; \ + PADDQ v7, v5; \ + PADDQ t0, v5; \ + PADDQ t0, v5; \ + PXOR v5, v3; \ + MOVO v3, t0; \ + PADDQ v3, t0; \ + PSRLQ $63, v3; \ + PXOR t0, v3 + +#define LOAD_MSG_0(block, off) \ + MOVOU 8*(off+0)(block), X0; \ + MOVOU 8*(off+2)(block), X1; \ + MOVOU 8*(off+4)(block), X2; \ + MOVOU 8*(off+6)(block), X3; \ + MOVOU 8*(off+8)(block), X4; \ + MOVOU 8*(off+10)(block), X5; \ + MOVOU 8*(off+12)(block), X6; \ + MOVOU 8*(off+14)(block), X7 + +#define STORE_MSG_0(block, off) \ + MOVOU X0, 8*(off+0)(block); \ + MOVOU X1, 8*(off+2)(block); \ + MOVOU X2, 8*(off+4)(block); \ + MOVOU X3, 8*(off+6)(block); \ + MOVOU X4, 8*(off+8)(block); \ + MOVOU X5, 8*(off+10)(block); \ + MOVOU X6, 8*(off+12)(block); \ + MOVOU X7, 8*(off+14)(block) + +#define LOAD_MSG_1(block, off) \ + MOVOU 8*off+0*8(block), X0; \ + MOVOU 8*off+16*8(block), X1; \ + MOVOU 8*off+32*8(block), X2; \ + MOVOU 8*off+48*8(block), X3; \ + MOVOU 8*off+64*8(block), X4; \ + MOVOU 8*off+80*8(block), X5; \ + MOVOU 8*off+96*8(block), X6; \ + MOVOU 8*off+112*8(block), X7 + +#define STORE_MSG_1(block, off) \ + MOVOU X0, 8*off+0*8(block); \ + MOVOU X1, 8*off+16*8(block); \ + MOVOU X2, 8*off+32*8(block); \ + MOVOU X3, 8*off+48*8(block); \ + MOVOU X4, 8*off+64*8(block); \ + MOVOU X5, 8*off+80*8(block); \ + MOVOU X6, 8*off+96*8(block); \ + MOVOU X7, 8*off+112*8(block) + +#define BLAMKA_ROUND_0(block, off, t0, t1, c40, c48) \ + LOAD_MSG_0(block, off); \ + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, t0, c40, c48); \ + SHUFFLE(X2, X3, X4, X5, X6, X7, t0, t1); \ + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, t0, c40, c48); \ + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, t0, t1); \ + STORE_MSG_0(block, off) + +#define BLAMKA_ROUND_1(block, off, t0, t1, c40, c48) \ + LOAD_MSG_1(block, off); \ + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, t0, c40, c48); \ + SHUFFLE(X2, X3, X4, X5, X6, X7, t0, t1); \ + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, t0, c40, c48); \ + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, t0, t1); \ + STORE_MSG_1(block, off) + +// func blamkaSSE4(b *block) +TEXT ·blamkaSSE4(SB), 4, $0-8 + MOVQ b+0(FP), AX + + MOVOU ·c40<>(SB), X10 + MOVOU ·c48<>(SB), X11 + + BLAMKA_ROUND_0(AX, 0, X8, X9, X10, X11) + BLAMKA_ROUND_0(AX, 16, X8, X9, X10, X11) + BLAMKA_ROUND_0(AX, 32, X8, X9, X10, X11) + BLAMKA_ROUND_0(AX, 48, X8, X9, X10, X11) + BLAMKA_ROUND_0(AX, 64, X8, X9, X10, X11) + BLAMKA_ROUND_0(AX, 80, X8, X9, X10, X11) + BLAMKA_ROUND_0(AX, 96, X8, X9, X10, X11) + BLAMKA_ROUND_0(AX, 112, X8, X9, X10, X11) + + BLAMKA_ROUND_1(AX, 0, X8, X9, X10, X11) + BLAMKA_ROUND_1(AX, 2, X8, X9, X10, X11) + BLAMKA_ROUND_1(AX, 4, X8, X9, X10, X11) + BLAMKA_ROUND_1(AX, 6, X8, X9, X10, X11) + BLAMKA_ROUND_1(AX, 8, X8, X9, X10, X11) + BLAMKA_ROUND_1(AX, 10, X8, X9, X10, X11) + BLAMKA_ROUND_1(AX, 12, X8, X9, X10, X11) + BLAMKA_ROUND_1(AX, 14, X8, X9, X10, X11) + RET + +// func mixBlocksSSE2(out, a, b, c *block) +TEXT ·mixBlocksSSE2(SB), 4, $0-32 + MOVQ out+0(FP), DX + MOVQ a+8(FP), AX + MOVQ b+16(FP), BX + MOVQ a+24(FP), CX + MOVQ $128, BP + +loop: + MOVOU 0(AX), X0 + MOVOU 0(BX), X1 + MOVOU 0(CX), X2 + PXOR X1, X0 + PXOR X2, X0 + MOVOU X0, 0(DX) + ADDQ $16, AX + ADDQ $16, BX + ADDQ $16, CX + ADDQ $16, DX + SUBQ $2, BP + JA loop + RET + +// func xorBlocksSSE2(out, a, b, c *block) +TEXT ·xorBlocksSSE2(SB), 4, $0-32 + MOVQ out+0(FP), DX + MOVQ a+8(FP), AX + MOVQ b+16(FP), BX + MOVQ a+24(FP), CX + MOVQ $128, BP + +loop: + MOVOU 0(AX), X0 + MOVOU 0(BX), X1 + MOVOU 0(CX), X2 + MOVOU 0(DX), X3 + PXOR X1, X0 + PXOR X2, X0 + PXOR X3, X0 + MOVOU X0, 0(DX) + ADDQ $16, AX + ADDQ $16, BX + ADDQ $16, CX + ADDQ $16, DX + SUBQ $2, BP + JA loop + RET diff --git a/vendor/golang.org/x/crypto/argon2/blamka_generic.go b/vendor/golang.org/x/crypto/argon2/blamka_generic.go new file mode 100644 index 0000000..a481b22 --- /dev/null +++ b/vendor/golang.org/x/crypto/argon2/blamka_generic.go @@ -0,0 +1,163 @@ +// 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 argon2 + +var useSSE4 bool + +func processBlockGeneric(out, in1, in2 *block, xor bool) { + var t block + for i := range t { + t[i] = in1[i] ^ in2[i] + } + for i := 0; i < blockLength; i += 16 { + blamkaGeneric( + &t[i+0], &t[i+1], &t[i+2], &t[i+3], + &t[i+4], &t[i+5], &t[i+6], &t[i+7], + &t[i+8], &t[i+9], &t[i+10], &t[i+11], + &t[i+12], &t[i+13], &t[i+14], &t[i+15], + ) + } + for i := 0; i < blockLength/8; i += 2 { + blamkaGeneric( + &t[i], &t[i+1], &t[16+i], &t[16+i+1], + &t[32+i], &t[32+i+1], &t[48+i], &t[48+i+1], + &t[64+i], &t[64+i+1], &t[80+i], &t[80+i+1], + &t[96+i], &t[96+i+1], &t[112+i], &t[112+i+1], + ) + } + if xor { + for i := range t { + out[i] ^= in1[i] ^ in2[i] ^ t[i] + } + } else { + for i := range t { + out[i] = in1[i] ^ in2[i] ^ t[i] + } + } +} + +func blamkaGeneric(t00, t01, t02, t03, t04, t05, t06, t07, t08, t09, t10, t11, t12, t13, t14, t15 *uint64) { + v00, v01, v02, v03 := *t00, *t01, *t02, *t03 + v04, v05, v06, v07 := *t04, *t05, *t06, *t07 + v08, v09, v10, v11 := *t08, *t09, *t10, *t11 + v12, v13, v14, v15 := *t12, *t13, *t14, *t15 + + v00 += v04 + 2*uint64(uint32(v00))*uint64(uint32(v04)) + v12 ^= v00 + v12 = v12>>32 | v12<<32 + v08 += v12 + 2*uint64(uint32(v08))*uint64(uint32(v12)) + v04 ^= v08 + v04 = v04>>24 | v04<<40 + + v00 += v04 + 2*uint64(uint32(v00))*uint64(uint32(v04)) + v12 ^= v00 + v12 = v12>>16 | v12<<48 + v08 += v12 + 2*uint64(uint32(v08))*uint64(uint32(v12)) + v04 ^= v08 + v04 = v04>>63 | v04<<1 + + v01 += v05 + 2*uint64(uint32(v01))*uint64(uint32(v05)) + v13 ^= v01 + v13 = v13>>32 | v13<<32 + v09 += v13 + 2*uint64(uint32(v09))*uint64(uint32(v13)) + v05 ^= v09 + v05 = v05>>24 | v05<<40 + + v01 += v05 + 2*uint64(uint32(v01))*uint64(uint32(v05)) + v13 ^= v01 + v13 = v13>>16 | v13<<48 + v09 += v13 + 2*uint64(uint32(v09))*uint64(uint32(v13)) + v05 ^= v09 + v05 = v05>>63 | v05<<1 + + v02 += v06 + 2*uint64(uint32(v02))*uint64(uint32(v06)) + v14 ^= v02 + v14 = v14>>32 | v14<<32 + v10 += v14 + 2*uint64(uint32(v10))*uint64(uint32(v14)) + v06 ^= v10 + v06 = v06>>24 | v06<<40 + + v02 += v06 + 2*uint64(uint32(v02))*uint64(uint32(v06)) + v14 ^= v02 + v14 = v14>>16 | v14<<48 + v10 += v14 + 2*uint64(uint32(v10))*uint64(uint32(v14)) + v06 ^= v10 + v06 = v06>>63 | v06<<1 + + v03 += v07 + 2*uint64(uint32(v03))*uint64(uint32(v07)) + v15 ^= v03 + v15 = v15>>32 | v15<<32 + v11 += v15 + 2*uint64(uint32(v11))*uint64(uint32(v15)) + v07 ^= v11 + v07 = v07>>24 | v07<<40 + + v03 += v07 + 2*uint64(uint32(v03))*uint64(uint32(v07)) + v15 ^= v03 + v15 = v15>>16 | v15<<48 + v11 += v15 + 2*uint64(uint32(v11))*uint64(uint32(v15)) + v07 ^= v11 + v07 = v07>>63 | v07<<1 + + v00 += v05 + 2*uint64(uint32(v00))*uint64(uint32(v05)) + v15 ^= v00 + v15 = v15>>32 | v15<<32 + v10 += v15 + 2*uint64(uint32(v10))*uint64(uint32(v15)) + v05 ^= v10 + v05 = v05>>24 | v05<<40 + + v00 += v05 + 2*uint64(uint32(v00))*uint64(uint32(v05)) + v15 ^= v00 + v15 = v15>>16 | v15<<48 + v10 += v15 + 2*uint64(uint32(v10))*uint64(uint32(v15)) + v05 ^= v10 + v05 = v05>>63 | v05<<1 + + v01 += v06 + 2*uint64(uint32(v01))*uint64(uint32(v06)) + v12 ^= v01 + v12 = v12>>32 | v12<<32 + v11 += v12 + 2*uint64(uint32(v11))*uint64(uint32(v12)) + v06 ^= v11 + v06 = v06>>24 | v06<<40 + + v01 += v06 + 2*uint64(uint32(v01))*uint64(uint32(v06)) + v12 ^= v01 + v12 = v12>>16 | v12<<48 + v11 += v12 + 2*uint64(uint32(v11))*uint64(uint32(v12)) + v06 ^= v11 + v06 = v06>>63 | v06<<1 + + v02 += v07 + 2*uint64(uint32(v02))*uint64(uint32(v07)) + v13 ^= v02 + v13 = v13>>32 | v13<<32 + v08 += v13 + 2*uint64(uint32(v08))*uint64(uint32(v13)) + v07 ^= v08 + v07 = v07>>24 | v07<<40 + + v02 += v07 + 2*uint64(uint32(v02))*uint64(uint32(v07)) + v13 ^= v02 + v13 = v13>>16 | v13<<48 + v08 += v13 + 2*uint64(uint32(v08))*uint64(uint32(v13)) + v07 ^= v08 + v07 = v07>>63 | v07<<1 + + v03 += v04 + 2*uint64(uint32(v03))*uint64(uint32(v04)) + v14 ^= v03 + v14 = v14>>32 | v14<<32 + v09 += v14 + 2*uint64(uint32(v09))*uint64(uint32(v14)) + v04 ^= v09 + v04 = v04>>24 | v04<<40 + + v03 += v04 + 2*uint64(uint32(v03))*uint64(uint32(v04)) + v14 ^= v03 + v14 = v14>>16 | v14<<48 + v09 += v14 + 2*uint64(uint32(v09))*uint64(uint32(v14)) + v04 ^= v09 + v04 = v04>>63 | v04<<1 + + *t00, *t01, *t02, *t03 = v00, v01, v02, v03 + *t04, *t05, *t06, *t07 = v04, v05, v06, v07 + *t08, *t09, *t10, *t11 = v08, v09, v10, v11 + *t12, *t13, *t14, *t15 = v12, v13, v14, v15 +} diff --git a/vendor/golang.org/x/crypto/argon2/blamka_ref.go b/vendor/golang.org/x/crypto/argon2/blamka_ref.go new file mode 100644 index 0000000..167c59d --- /dev/null +++ b/vendor/golang.org/x/crypto/argon2/blamka_ref.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 !amd64 || purego || !gc +// +build !amd64 purego !gc + +package argon2 + +func processBlock(out, in1, in2 *block) { + processBlockGeneric(out, in1, in2, false) +} + +func processBlockXOR(out, in1, in2 *block) { + processBlockGeneric(out, in1, in2, true) +} diff --git a/vendor/golang.org/x/crypto/bcrypt/base64.go b/vendor/golang.org/x/crypto/bcrypt/base64.go new file mode 100644 index 0000000..fc31160 --- /dev/null +++ b/vendor/golang.org/x/crypto/bcrypt/base64.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 bcrypt + +import "encoding/base64" + +const alphabet = "./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" + +var bcEncoding = base64.NewEncoding(alphabet) + +func base64Encode(src []byte) []byte { + n := bcEncoding.EncodedLen(len(src)) + dst := make([]byte, n) + bcEncoding.Encode(dst, src) + for dst[n-1] == '=' { + n-- + } + return dst[:n] +} + +func base64Decode(src []byte) ([]byte, error) { + numOfEquals := 4 - (len(src) % 4) + for i := 0; i < numOfEquals; i++ { + src = append(src, '=') + } + + dst := make([]byte, bcEncoding.DecodedLen(len(src))) + n, err := bcEncoding.Decode(dst, src) + if err != nil { + return nil, err + } + return dst[:n], nil +} diff --git a/vendor/golang.org/x/crypto/bcrypt/bcrypt.go b/vendor/golang.org/x/crypto/bcrypt/bcrypt.go new file mode 100644 index 0000000..aeb73f8 --- /dev/null +++ b/vendor/golang.org/x/crypto/bcrypt/bcrypt.go @@ -0,0 +1,295 @@ +// 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 bcrypt implements Provos and Mazières's bcrypt adaptive hashing +// algorithm. See http://www.usenix.org/event/usenix99/provos/provos.pdf +package bcrypt // import "golang.org/x/crypto/bcrypt" + +// The code is a port of Provos and Mazières's C implementation. +import ( + "crypto/rand" + "crypto/subtle" + "errors" + "fmt" + "io" + "strconv" + + "golang.org/x/crypto/blowfish" +) + +const ( + MinCost int = 4 // the minimum allowable cost as passed in to GenerateFromPassword + MaxCost int = 31 // the maximum allowable cost as passed in to GenerateFromPassword + DefaultCost int = 10 // the cost that will actually be set if a cost below MinCost is passed into GenerateFromPassword +) + +// The error returned from CompareHashAndPassword when a password and hash do +// not match. +var ErrMismatchedHashAndPassword = errors.New("crypto/bcrypt: hashedPassword is not the hash of the given password") + +// The error returned from CompareHashAndPassword when a hash is too short to +// be a bcrypt hash. +var ErrHashTooShort = errors.New("crypto/bcrypt: hashedSecret too short to be a bcrypted password") + +// The error returned from CompareHashAndPassword when a hash was created with +// a bcrypt algorithm newer than this implementation. +type HashVersionTooNewError byte + +func (hv HashVersionTooNewError) Error() string { + return fmt.Sprintf("crypto/bcrypt: bcrypt algorithm version '%c' requested is newer than current version '%c'", byte(hv), majorVersion) +} + +// The error returned from CompareHashAndPassword when a hash starts with something other than '$' +type InvalidHashPrefixError byte + +func (ih InvalidHashPrefixError) Error() string { + return fmt.Sprintf("crypto/bcrypt: bcrypt hashes must start with '$', but hashedSecret started with '%c'", byte(ih)) +} + +type InvalidCostError int + +func (ic InvalidCostError) Error() string { + return fmt.Sprintf("crypto/bcrypt: cost %d is outside allowed range (%d,%d)", int(ic), int(MinCost), int(MaxCost)) +} + +const ( + majorVersion = '2' + minorVersion = 'a' + maxSaltSize = 16 + maxCryptedHashSize = 23 + encodedSaltSize = 22 + encodedHashSize = 31 + minHashSize = 59 +) + +// magicCipherData is an IV for the 64 Blowfish encryption calls in +// bcrypt(). It's the string "OrpheanBeholderScryDoubt" in big-endian bytes. +var magicCipherData = []byte{ + 0x4f, 0x72, 0x70, 0x68, + 0x65, 0x61, 0x6e, 0x42, + 0x65, 0x68, 0x6f, 0x6c, + 0x64, 0x65, 0x72, 0x53, + 0x63, 0x72, 0x79, 0x44, + 0x6f, 0x75, 0x62, 0x74, +} + +type hashed struct { + hash []byte + salt []byte + cost int // allowed range is MinCost to MaxCost + major byte + minor byte +} + +// GenerateFromPassword returns the bcrypt hash of the password at the given +// cost. If the cost given is less than MinCost, the cost will be set to +// DefaultCost, instead. Use CompareHashAndPassword, as defined in this package, +// to compare the returned hashed password with its cleartext version. +func GenerateFromPassword(password []byte, cost int) ([]byte, error) { + p, err := newFromPassword(password, cost) + if err != nil { + return nil, err + } + return p.Hash(), nil +} + +// CompareHashAndPassword compares a bcrypt hashed password with its possible +// plaintext equivalent. Returns nil on success, or an error on failure. +func CompareHashAndPassword(hashedPassword, password []byte) error { + p, err := newFromHash(hashedPassword) + if err != nil { + return err + } + + otherHash, err := bcrypt(password, p.cost, p.salt) + if err != nil { + return err + } + + otherP := &hashed{otherHash, p.salt, p.cost, p.major, p.minor} + if subtle.ConstantTimeCompare(p.Hash(), otherP.Hash()) == 1 { + return nil + } + + return ErrMismatchedHashAndPassword +} + +// Cost returns the hashing cost used to create the given hashed +// password. When, in the future, the hashing cost of a password system needs +// to be increased in order to adjust for greater computational power, this +// function allows one to establish which passwords need to be updated. +func Cost(hashedPassword []byte) (int, error) { + p, err := newFromHash(hashedPassword) + if err != nil { + return 0, err + } + return p.cost, nil +} + +func newFromPassword(password []byte, cost int) (*hashed, error) { + if cost < MinCost { + cost = DefaultCost + } + p := new(hashed) + p.major = majorVersion + p.minor = minorVersion + + err := checkCost(cost) + if err != nil { + return nil, err + } + p.cost = cost + + unencodedSalt := make([]byte, maxSaltSize) + _, err = io.ReadFull(rand.Reader, unencodedSalt) + if err != nil { + return nil, err + } + + p.salt = base64Encode(unencodedSalt) + hash, err := bcrypt(password, p.cost, p.salt) + if err != nil { + return nil, err + } + p.hash = hash + return p, err +} + +func newFromHash(hashedSecret []byte) (*hashed, error) { + if len(hashedSecret) < minHashSize { + return nil, ErrHashTooShort + } + p := new(hashed) + n, err := p.decodeVersion(hashedSecret) + if err != nil { + return nil, err + } + hashedSecret = hashedSecret[n:] + n, err = p.decodeCost(hashedSecret) + if err != nil { + return nil, err + } + hashedSecret = hashedSecret[n:] + + // The "+2" is here because we'll have to append at most 2 '=' to the salt + // when base64 decoding it in expensiveBlowfishSetup(). + p.salt = make([]byte, encodedSaltSize, encodedSaltSize+2) + copy(p.salt, hashedSecret[:encodedSaltSize]) + + hashedSecret = hashedSecret[encodedSaltSize:] + p.hash = make([]byte, len(hashedSecret)) + copy(p.hash, hashedSecret) + + return p, nil +} + +func bcrypt(password []byte, cost int, salt []byte) ([]byte, error) { + cipherData := make([]byte, len(magicCipherData)) + copy(cipherData, magicCipherData) + + c, err := expensiveBlowfishSetup(password, uint32(cost), salt) + if err != nil { + return nil, err + } + + for i := 0; i < 24; i += 8 { + for j := 0; j < 64; j++ { + c.Encrypt(cipherData[i:i+8], cipherData[i:i+8]) + } + } + + // Bug compatibility with C bcrypt implementations. We only encode 23 of + // the 24 bytes encrypted. + hsh := base64Encode(cipherData[:maxCryptedHashSize]) + return hsh, nil +} + +func expensiveBlowfishSetup(key []byte, cost uint32, salt []byte) (*blowfish.Cipher, error) { + csalt, err := base64Decode(salt) + if err != nil { + return nil, err + } + + // Bug compatibility with C bcrypt implementations. They use the trailing + // NULL in the key string during expansion. + // We copy the key to prevent changing the underlying array. + ckey := append(key[:len(key):len(key)], 0) + + c, err := blowfish.NewSaltedCipher(ckey, csalt) + if err != nil { + return nil, err + } + + var i, rounds uint64 + rounds = 1 << cost + for i = 0; i < rounds; i++ { + blowfish.ExpandKey(ckey, c) + blowfish.ExpandKey(csalt, c) + } + + return c, nil +} + +func (p *hashed) Hash() []byte { + arr := make([]byte, 60) + arr[0] = '$' + arr[1] = p.major + n := 2 + if p.minor != 0 { + arr[2] = p.minor + n = 3 + } + arr[n] = '$' + n++ + copy(arr[n:], []byte(fmt.Sprintf("%02d", p.cost))) + n += 2 + arr[n] = '$' + n++ + copy(arr[n:], p.salt) + n += encodedSaltSize + copy(arr[n:], p.hash) + n += encodedHashSize + return arr[:n] +} + +func (p *hashed) decodeVersion(sbytes []byte) (int, error) { + if sbytes[0] != '$' { + return -1, InvalidHashPrefixError(sbytes[0]) + } + if sbytes[1] > majorVersion { + return -1, HashVersionTooNewError(sbytes[1]) + } + p.major = sbytes[1] + n := 3 + if sbytes[2] != '$' { + p.minor = sbytes[2] + n++ + } + return n, nil +} + +// sbytes should begin where decodeVersion left off. +func (p *hashed) decodeCost(sbytes []byte) (int, error) { + cost, err := strconv.Atoi(string(sbytes[0:2])) + if err != nil { + return -1, err + } + err = checkCost(cost) + if err != nil { + return -1, err + } + p.cost = cost + return 3, nil +} + +func (p *hashed) String() string { + return fmt.Sprintf("&{hash: %#v, salt: %#v, cost: %d, major: %c, minor: %c}", string(p.hash), p.salt, p.cost, p.major, p.minor) +} + +func checkCost(cost int) error { + if cost < MinCost || cost > MaxCost { + return InvalidCostError(cost) + } + return nil +} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b.go b/vendor/golang.org/x/crypto/blake2b/blake2b.go new file mode 100644 index 0000000..d2e98d4 --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2b.go @@ -0,0 +1,291 @@ +// 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 blake2b implements the BLAKE2b hash algorithm defined by RFC 7693 +// and the extendable output function (XOF) BLAKE2Xb. +// +// BLAKE2b is optimized for 64-bit platforms—including NEON-enabled ARMs—and +// produces digests of any size between 1 and 64 bytes. +// For a detailed specification of BLAKE2b see https://blake2.net/blake2.pdf +// and for BLAKE2Xb see https://blake2.net/blake2x.pdf +// +// If you aren't sure which function you need, use BLAKE2b (Sum512 or New512). +// If you need a secret-key MAC (message authentication code), use the New512 +// function with a non-nil key. +// +// BLAKE2X is a construction to compute hash values larger than 64 bytes. It +// can produce hash values between 0 and 4 GiB. +package blake2b + +import ( + "encoding/binary" + "errors" + "hash" +) + +const ( + // The blocksize of BLAKE2b in bytes. + BlockSize = 128 + // The hash size of BLAKE2b-512 in bytes. + Size = 64 + // The hash size of BLAKE2b-384 in bytes. + Size384 = 48 + // The hash size of BLAKE2b-256 in bytes. + Size256 = 32 +) + +var ( + useAVX2 bool + useAVX bool + useSSE4 bool +) + +var ( + errKeySize = errors.New("blake2b: invalid key size") + errHashSize = errors.New("blake2b: invalid hash size") +) + +var iv = [8]uint64{ + 0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1, + 0x510e527fade682d1, 0x9b05688c2b3e6c1f, 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179, +} + +// Sum512 returns the BLAKE2b-512 checksum of the data. +func Sum512(data []byte) [Size]byte { + var sum [Size]byte + checkSum(&sum, Size, data) + return sum +} + +// Sum384 returns the BLAKE2b-384 checksum of the data. +func Sum384(data []byte) [Size384]byte { + var sum [Size]byte + var sum384 [Size384]byte + checkSum(&sum, Size384, data) + copy(sum384[:], sum[:Size384]) + return sum384 +} + +// Sum256 returns the BLAKE2b-256 checksum of the data. +func Sum256(data []byte) [Size256]byte { + var sum [Size]byte + var sum256 [Size256]byte + checkSum(&sum, Size256, data) + copy(sum256[:], sum[:Size256]) + return sum256 +} + +// New512 returns a new hash.Hash computing the BLAKE2b-512 checksum. A non-nil +// key turns the hash into a MAC. The key must be between zero and 64 bytes long. +func New512(key []byte) (hash.Hash, error) { return newDigest(Size, key) } + +// New384 returns a new hash.Hash computing the BLAKE2b-384 checksum. A non-nil +// key turns the hash into a MAC. The key must be between zero and 64 bytes long. +func New384(key []byte) (hash.Hash, error) { return newDigest(Size384, key) } + +// New256 returns a new hash.Hash computing the BLAKE2b-256 checksum. A non-nil +// key turns the hash into a MAC. The key must be between zero and 64 bytes long. +func New256(key []byte) (hash.Hash, error) { return newDigest(Size256, key) } + +// New returns a new hash.Hash computing the BLAKE2b checksum with a custom length. +// A non-nil key turns the hash into a MAC. The key must be between zero and 64 bytes long. +// The hash size can be a value between 1 and 64 but it is highly recommended to use +// values equal or greater than: +// - 32 if BLAKE2b is used as a hash function (The key is zero bytes long). +// - 16 if BLAKE2b is used as a MAC function (The key is at least 16 bytes long). +// When the key is nil, the returned hash.Hash implements BinaryMarshaler +// and BinaryUnmarshaler for state (de)serialization as documented by hash.Hash. +func New(size int, key []byte) (hash.Hash, error) { return newDigest(size, key) } + +func newDigest(hashSize int, key []byte) (*digest, error) { + if hashSize < 1 || hashSize > Size { + return nil, errHashSize + } + if len(key) > Size { + return nil, errKeySize + } + d := &digest{ + size: hashSize, + keyLen: len(key), + } + copy(d.key[:], key) + d.Reset() + return d, nil +} + +func checkSum(sum *[Size]byte, hashSize int, data []byte) { + h := iv + h[0] ^= uint64(hashSize) | (1 << 16) | (1 << 24) + var c [2]uint64 + + if length := len(data); length > BlockSize { + n := length &^ (BlockSize - 1) + if length == n { + n -= BlockSize + } + hashBlocks(&h, &c, 0, data[:n]) + data = data[n:] + } + + var block [BlockSize]byte + offset := copy(block[:], data) + remaining := uint64(BlockSize - offset) + if c[0] < remaining { + c[1]-- + } + c[0] -= remaining + + hashBlocks(&h, &c, 0xFFFFFFFFFFFFFFFF, block[:]) + + for i, v := range h[:(hashSize+7)/8] { + binary.LittleEndian.PutUint64(sum[8*i:], v) + } +} + +type digest struct { + h [8]uint64 + c [2]uint64 + size int + block [BlockSize]byte + offset int + + key [BlockSize]byte + keyLen int +} + +const ( + magic = "b2b" + marshaledSize = len(magic) + 8*8 + 2*8 + 1 + BlockSize + 1 +) + +func (d *digest) MarshalBinary() ([]byte, error) { + if d.keyLen != 0 { + return nil, errors.New("crypto/blake2b: cannot marshal MACs") + } + b := make([]byte, 0, marshaledSize) + b = append(b, magic...) + for i := 0; i < 8; i++ { + b = appendUint64(b, d.h[i]) + } + b = appendUint64(b, d.c[0]) + b = appendUint64(b, d.c[1]) + // Maximum value for size is 64 + b = append(b, byte(d.size)) + b = append(b, d.block[:]...) + b = append(b, byte(d.offset)) + return b, nil +} + +func (d *digest) UnmarshalBinary(b []byte) error { + if len(b) < len(magic) || string(b[:len(magic)]) != magic { + return errors.New("crypto/blake2b: invalid hash state identifier") + } + if len(b) != marshaledSize { + return errors.New("crypto/blake2b: invalid hash state size") + } + b = b[len(magic):] + for i := 0; i < 8; i++ { + b, d.h[i] = consumeUint64(b) + } + b, d.c[0] = consumeUint64(b) + b, d.c[1] = consumeUint64(b) + d.size = int(b[0]) + b = b[1:] + copy(d.block[:], b[:BlockSize]) + b = b[BlockSize:] + d.offset = int(b[0]) + return nil +} + +func (d *digest) BlockSize() int { return BlockSize } + +func (d *digest) Size() int { return d.size } + +func (d *digest) Reset() { + d.h = iv + d.h[0] ^= uint64(d.size) | (uint64(d.keyLen) << 8) | (1 << 16) | (1 << 24) + d.offset, d.c[0], d.c[1] = 0, 0, 0 + if d.keyLen > 0 { + d.block = d.key + d.offset = BlockSize + } +} + +func (d *digest) Write(p []byte) (n int, err error) { + n = len(p) + + if d.offset > 0 { + remaining := BlockSize - d.offset + if n <= remaining { + d.offset += copy(d.block[d.offset:], p) + return + } + copy(d.block[d.offset:], p[:remaining]) + hashBlocks(&d.h, &d.c, 0, d.block[:]) + d.offset = 0 + p = p[remaining:] + } + + if length := len(p); length > BlockSize { + nn := length &^ (BlockSize - 1) + if length == nn { + nn -= BlockSize + } + hashBlocks(&d.h, &d.c, 0, p[:nn]) + p = p[nn:] + } + + if len(p) > 0 { + d.offset += copy(d.block[:], p) + } + + return +} + +func (d *digest) Sum(sum []byte) []byte { + var hash [Size]byte + d.finalize(&hash) + return append(sum, hash[:d.size]...) +} + +func (d *digest) finalize(hash *[Size]byte) { + var block [BlockSize]byte + copy(block[:], d.block[:d.offset]) + remaining := uint64(BlockSize - d.offset) + + c := d.c + if c[0] < remaining { + c[1]-- + } + c[0] -= remaining + + h := d.h + hashBlocks(&h, &c, 0xFFFFFFFFFFFFFFFF, block[:]) + + for i, v := range h { + binary.LittleEndian.PutUint64(hash[8*i:], v) + } +} + +func appendUint64(b []byte, x uint64) []byte { + var a [8]byte + binary.BigEndian.PutUint64(a[:], x) + return append(b, a[:]...) +} + +func appendUint32(b []byte, x uint32) []byte { + var a [4]byte + binary.BigEndian.PutUint32(a[:], x) + return append(b, a[:]...) +} + +func consumeUint64(b []byte) ([]byte, uint64) { + x := binary.BigEndian.Uint64(b) + return b[8:], x +} + +func consumeUint32(b []byte) ([]byte, uint32) { + x := binary.BigEndian.Uint32(b) + return b[4:], x +} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.go b/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.go new file mode 100644 index 0000000..56bfaaa --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.go @@ -0,0 +1,38 @@ +// 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 go1.7 && amd64 && gc && !purego +// +build go1.7,amd64,gc,!purego + +package blake2b + +import "golang.org/x/sys/cpu" + +func init() { + useAVX2 = cpu.X86.HasAVX2 + useAVX = cpu.X86.HasAVX + useSSE4 = cpu.X86.HasSSE41 +} + +//go:noescape +func hashBlocksAVX2(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) + +//go:noescape +func hashBlocksAVX(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) + +//go:noescape +func hashBlocksSSE4(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) + +func hashBlocks(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) { + switch { + case useAVX2: + hashBlocksAVX2(h, c, flag, blocks) + case useAVX: + hashBlocksAVX(h, c, flag, blocks) + case useSSE4: + hashBlocksSSE4(h, c, flag, blocks) + default: + hashBlocksGeneric(h, c, flag, blocks) + } +} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.s b/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.s new file mode 100644 index 0000000..4b9daa1 --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.s @@ -0,0 +1,745 @@ +// 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 go1.7 && amd64 && gc && !purego +// +build go1.7,amd64,gc,!purego + +#include "textflag.h" + +DATA ·AVX2_iv0<>+0x00(SB)/8, $0x6a09e667f3bcc908 +DATA ·AVX2_iv0<>+0x08(SB)/8, $0xbb67ae8584caa73b +DATA ·AVX2_iv0<>+0x10(SB)/8, $0x3c6ef372fe94f82b +DATA ·AVX2_iv0<>+0x18(SB)/8, $0xa54ff53a5f1d36f1 +GLOBL ·AVX2_iv0<>(SB), (NOPTR+RODATA), $32 + +DATA ·AVX2_iv1<>+0x00(SB)/8, $0x510e527fade682d1 +DATA ·AVX2_iv1<>+0x08(SB)/8, $0x9b05688c2b3e6c1f +DATA ·AVX2_iv1<>+0x10(SB)/8, $0x1f83d9abfb41bd6b +DATA ·AVX2_iv1<>+0x18(SB)/8, $0x5be0cd19137e2179 +GLOBL ·AVX2_iv1<>(SB), (NOPTR+RODATA), $32 + +DATA ·AVX2_c40<>+0x00(SB)/8, $0x0201000706050403 +DATA ·AVX2_c40<>+0x08(SB)/8, $0x0a09080f0e0d0c0b +DATA ·AVX2_c40<>+0x10(SB)/8, $0x0201000706050403 +DATA ·AVX2_c40<>+0x18(SB)/8, $0x0a09080f0e0d0c0b +GLOBL ·AVX2_c40<>(SB), (NOPTR+RODATA), $32 + +DATA ·AVX2_c48<>+0x00(SB)/8, $0x0100070605040302 +DATA ·AVX2_c48<>+0x08(SB)/8, $0x09080f0e0d0c0b0a +DATA ·AVX2_c48<>+0x10(SB)/8, $0x0100070605040302 +DATA ·AVX2_c48<>+0x18(SB)/8, $0x09080f0e0d0c0b0a +GLOBL ·AVX2_c48<>(SB), (NOPTR+RODATA), $32 + +DATA ·AVX_iv0<>+0x00(SB)/8, $0x6a09e667f3bcc908 +DATA ·AVX_iv0<>+0x08(SB)/8, $0xbb67ae8584caa73b +GLOBL ·AVX_iv0<>(SB), (NOPTR+RODATA), $16 + +DATA ·AVX_iv1<>+0x00(SB)/8, $0x3c6ef372fe94f82b +DATA ·AVX_iv1<>+0x08(SB)/8, $0xa54ff53a5f1d36f1 +GLOBL ·AVX_iv1<>(SB), (NOPTR+RODATA), $16 + +DATA ·AVX_iv2<>+0x00(SB)/8, $0x510e527fade682d1 +DATA ·AVX_iv2<>+0x08(SB)/8, $0x9b05688c2b3e6c1f +GLOBL ·AVX_iv2<>(SB), (NOPTR+RODATA), $16 + +DATA ·AVX_iv3<>+0x00(SB)/8, $0x1f83d9abfb41bd6b +DATA ·AVX_iv3<>+0x08(SB)/8, $0x5be0cd19137e2179 +GLOBL ·AVX_iv3<>(SB), (NOPTR+RODATA), $16 + +DATA ·AVX_c40<>+0x00(SB)/8, $0x0201000706050403 +DATA ·AVX_c40<>+0x08(SB)/8, $0x0a09080f0e0d0c0b +GLOBL ·AVX_c40<>(SB), (NOPTR+RODATA), $16 + +DATA ·AVX_c48<>+0x00(SB)/8, $0x0100070605040302 +DATA ·AVX_c48<>+0x08(SB)/8, $0x09080f0e0d0c0b0a +GLOBL ·AVX_c48<>(SB), (NOPTR+RODATA), $16 + +#define VPERMQ_0x39_Y1_Y1 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xc9; BYTE $0x39 +#define VPERMQ_0x93_Y1_Y1 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xc9; BYTE $0x93 +#define VPERMQ_0x4E_Y2_Y2 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xd2; BYTE $0x4e +#define VPERMQ_0x93_Y3_Y3 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xdb; BYTE $0x93 +#define VPERMQ_0x39_Y3_Y3 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xdb; BYTE $0x39 + +#define ROUND_AVX2(m0, m1, m2, m3, t, c40, c48) \ + VPADDQ m0, Y0, Y0; \ + VPADDQ Y1, Y0, Y0; \ + VPXOR Y0, Y3, Y3; \ + VPSHUFD $-79, Y3, Y3; \ + VPADDQ Y3, Y2, Y2; \ + VPXOR Y2, Y1, Y1; \ + VPSHUFB c40, Y1, Y1; \ + VPADDQ m1, Y0, Y0; \ + VPADDQ Y1, Y0, Y0; \ + VPXOR Y0, Y3, Y3; \ + VPSHUFB c48, Y3, Y3; \ + VPADDQ Y3, Y2, Y2; \ + VPXOR Y2, Y1, Y1; \ + VPADDQ Y1, Y1, t; \ + VPSRLQ $63, Y1, Y1; \ + VPXOR t, Y1, Y1; \ + VPERMQ_0x39_Y1_Y1; \ + VPERMQ_0x4E_Y2_Y2; \ + VPERMQ_0x93_Y3_Y3; \ + VPADDQ m2, Y0, Y0; \ + VPADDQ Y1, Y0, Y0; \ + VPXOR Y0, Y3, Y3; \ + VPSHUFD $-79, Y3, Y3; \ + VPADDQ Y3, Y2, Y2; \ + VPXOR Y2, Y1, Y1; \ + VPSHUFB c40, Y1, Y1; \ + VPADDQ m3, Y0, Y0; \ + VPADDQ Y1, Y0, Y0; \ + VPXOR Y0, Y3, Y3; \ + VPSHUFB c48, Y3, Y3; \ + VPADDQ Y3, Y2, Y2; \ + VPXOR Y2, Y1, Y1; \ + VPADDQ Y1, Y1, t; \ + VPSRLQ $63, Y1, Y1; \ + VPXOR t, Y1, Y1; \ + VPERMQ_0x39_Y3_Y3; \ + VPERMQ_0x4E_Y2_Y2; \ + VPERMQ_0x93_Y1_Y1 + +#define VMOVQ_SI_X11_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x1E +#define VMOVQ_SI_X12_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x26 +#define VMOVQ_SI_X13_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x2E +#define VMOVQ_SI_X14_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x36 +#define VMOVQ_SI_X15_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x3E + +#define VMOVQ_SI_X11(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x5E; BYTE $n +#define VMOVQ_SI_X12(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x66; BYTE $n +#define VMOVQ_SI_X13(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x6E; BYTE $n +#define VMOVQ_SI_X14(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x76; BYTE $n +#define VMOVQ_SI_X15(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x7E; BYTE $n + +#define VPINSRQ_1_SI_X11_0 BYTE $0xC4; BYTE $0x63; BYTE $0xA1; BYTE $0x22; BYTE $0x1E; BYTE $0x01 +#define VPINSRQ_1_SI_X12_0 BYTE $0xC4; BYTE $0x63; BYTE $0x99; BYTE $0x22; BYTE $0x26; BYTE $0x01 +#define VPINSRQ_1_SI_X13_0 BYTE $0xC4; BYTE $0x63; BYTE $0x91; BYTE $0x22; BYTE $0x2E; BYTE $0x01 +#define VPINSRQ_1_SI_X14_0 BYTE $0xC4; BYTE $0x63; BYTE $0x89; BYTE $0x22; BYTE $0x36; BYTE $0x01 +#define VPINSRQ_1_SI_X15_0 BYTE $0xC4; BYTE $0x63; BYTE $0x81; BYTE $0x22; BYTE $0x3E; BYTE $0x01 + +#define VPINSRQ_1_SI_X11(n) BYTE $0xC4; BYTE $0x63; BYTE $0xA1; BYTE $0x22; BYTE $0x5E; BYTE $n; BYTE $0x01 +#define VPINSRQ_1_SI_X12(n) BYTE $0xC4; BYTE $0x63; BYTE $0x99; BYTE $0x22; BYTE $0x66; BYTE $n; BYTE $0x01 +#define VPINSRQ_1_SI_X13(n) BYTE $0xC4; BYTE $0x63; BYTE $0x91; BYTE $0x22; BYTE $0x6E; BYTE $n; BYTE $0x01 +#define VPINSRQ_1_SI_X14(n) BYTE $0xC4; BYTE $0x63; BYTE $0x89; BYTE $0x22; BYTE $0x76; BYTE $n; BYTE $0x01 +#define VPINSRQ_1_SI_X15(n) BYTE $0xC4; BYTE $0x63; BYTE $0x81; BYTE $0x22; BYTE $0x7E; BYTE $n; BYTE $0x01 + +#define VMOVQ_R8_X15 BYTE $0xC4; BYTE $0x41; BYTE $0xF9; BYTE $0x6E; BYTE $0xF8 +#define VPINSRQ_1_R9_X15 BYTE $0xC4; BYTE $0x43; BYTE $0x81; BYTE $0x22; BYTE $0xF9; BYTE $0x01 + +// load msg: Y12 = (i0, i1, i2, i3) +// i0, i1, i2, i3 must not be 0 +#define LOAD_MSG_AVX2_Y12(i0, i1, i2, i3) \ + VMOVQ_SI_X12(i0*8); \ + VMOVQ_SI_X11(i2*8); \ + VPINSRQ_1_SI_X12(i1*8); \ + VPINSRQ_1_SI_X11(i3*8); \ + VINSERTI128 $1, X11, Y12, Y12 + +// load msg: Y13 = (i0, i1, i2, i3) +// i0, i1, i2, i3 must not be 0 +#define LOAD_MSG_AVX2_Y13(i0, i1, i2, i3) \ + VMOVQ_SI_X13(i0*8); \ + VMOVQ_SI_X11(i2*8); \ + VPINSRQ_1_SI_X13(i1*8); \ + VPINSRQ_1_SI_X11(i3*8); \ + VINSERTI128 $1, X11, Y13, Y13 + +// load msg: Y14 = (i0, i1, i2, i3) +// i0, i1, i2, i3 must not be 0 +#define LOAD_MSG_AVX2_Y14(i0, i1, i2, i3) \ + VMOVQ_SI_X14(i0*8); \ + VMOVQ_SI_X11(i2*8); \ + VPINSRQ_1_SI_X14(i1*8); \ + VPINSRQ_1_SI_X11(i3*8); \ + VINSERTI128 $1, X11, Y14, Y14 + +// load msg: Y15 = (i0, i1, i2, i3) +// i0, i1, i2, i3 must not be 0 +#define LOAD_MSG_AVX2_Y15(i0, i1, i2, i3) \ + VMOVQ_SI_X15(i0*8); \ + VMOVQ_SI_X11(i2*8); \ + VPINSRQ_1_SI_X15(i1*8); \ + VPINSRQ_1_SI_X11(i3*8); \ + VINSERTI128 $1, X11, Y15, Y15 + +#define LOAD_MSG_AVX2_0_2_4_6_1_3_5_7_8_10_12_14_9_11_13_15() \ + VMOVQ_SI_X12_0; \ + VMOVQ_SI_X11(4*8); \ + VPINSRQ_1_SI_X12(2*8); \ + VPINSRQ_1_SI_X11(6*8); \ + VINSERTI128 $1, X11, Y12, Y12; \ + LOAD_MSG_AVX2_Y13(1, 3, 5, 7); \ + LOAD_MSG_AVX2_Y14(8, 10, 12, 14); \ + LOAD_MSG_AVX2_Y15(9, 11, 13, 15) + +#define LOAD_MSG_AVX2_14_4_9_13_10_8_15_6_1_0_11_5_12_2_7_3() \ + LOAD_MSG_AVX2_Y12(14, 4, 9, 13); \ + LOAD_MSG_AVX2_Y13(10, 8, 15, 6); \ + VMOVQ_SI_X11(11*8); \ + VPSHUFD $0x4E, 0*8(SI), X14; \ + VPINSRQ_1_SI_X11(5*8); \ + VINSERTI128 $1, X11, Y14, Y14; \ + LOAD_MSG_AVX2_Y15(12, 2, 7, 3) + +#define LOAD_MSG_AVX2_11_12_5_15_8_0_2_13_10_3_7_9_14_6_1_4() \ + VMOVQ_SI_X11(5*8); \ + VMOVDQU 11*8(SI), X12; \ + VPINSRQ_1_SI_X11(15*8); \ + VINSERTI128 $1, X11, Y12, Y12; \ + VMOVQ_SI_X13(8*8); \ + VMOVQ_SI_X11(2*8); \ + VPINSRQ_1_SI_X13_0; \ + VPINSRQ_1_SI_X11(13*8); \ + VINSERTI128 $1, X11, Y13, Y13; \ + LOAD_MSG_AVX2_Y14(10, 3, 7, 9); \ + LOAD_MSG_AVX2_Y15(14, 6, 1, 4) + +#define LOAD_MSG_AVX2_7_3_13_11_9_1_12_14_2_5_4_15_6_10_0_8() \ + LOAD_MSG_AVX2_Y12(7, 3, 13, 11); \ + LOAD_MSG_AVX2_Y13(9, 1, 12, 14); \ + LOAD_MSG_AVX2_Y14(2, 5, 4, 15); \ + VMOVQ_SI_X15(6*8); \ + VMOVQ_SI_X11_0; \ + VPINSRQ_1_SI_X15(10*8); \ + VPINSRQ_1_SI_X11(8*8); \ + VINSERTI128 $1, X11, Y15, Y15 + +#define LOAD_MSG_AVX2_9_5_2_10_0_7_4_15_14_11_6_3_1_12_8_13() \ + LOAD_MSG_AVX2_Y12(9, 5, 2, 10); \ + VMOVQ_SI_X13_0; \ + VMOVQ_SI_X11(4*8); \ + VPINSRQ_1_SI_X13(7*8); \ + VPINSRQ_1_SI_X11(15*8); \ + VINSERTI128 $1, X11, Y13, Y13; \ + LOAD_MSG_AVX2_Y14(14, 11, 6, 3); \ + LOAD_MSG_AVX2_Y15(1, 12, 8, 13) + +#define LOAD_MSG_AVX2_2_6_0_8_12_10_11_3_4_7_15_1_13_5_14_9() \ + VMOVQ_SI_X12(2*8); \ + VMOVQ_SI_X11_0; \ + VPINSRQ_1_SI_X12(6*8); \ + VPINSRQ_1_SI_X11(8*8); \ + VINSERTI128 $1, X11, Y12, Y12; \ + LOAD_MSG_AVX2_Y13(12, 10, 11, 3); \ + LOAD_MSG_AVX2_Y14(4, 7, 15, 1); \ + LOAD_MSG_AVX2_Y15(13, 5, 14, 9) + +#define LOAD_MSG_AVX2_12_1_14_4_5_15_13_10_0_6_9_8_7_3_2_11() \ + LOAD_MSG_AVX2_Y12(12, 1, 14, 4); \ + LOAD_MSG_AVX2_Y13(5, 15, 13, 10); \ + VMOVQ_SI_X14_0; \ + VPSHUFD $0x4E, 8*8(SI), X11; \ + VPINSRQ_1_SI_X14(6*8); \ + VINSERTI128 $1, X11, Y14, Y14; \ + LOAD_MSG_AVX2_Y15(7, 3, 2, 11) + +#define LOAD_MSG_AVX2_13_7_12_3_11_14_1_9_5_15_8_2_0_4_6_10() \ + LOAD_MSG_AVX2_Y12(13, 7, 12, 3); \ + LOAD_MSG_AVX2_Y13(11, 14, 1, 9); \ + LOAD_MSG_AVX2_Y14(5, 15, 8, 2); \ + VMOVQ_SI_X15_0; \ + VMOVQ_SI_X11(6*8); \ + VPINSRQ_1_SI_X15(4*8); \ + VPINSRQ_1_SI_X11(10*8); \ + VINSERTI128 $1, X11, Y15, Y15 + +#define LOAD_MSG_AVX2_6_14_11_0_15_9_3_8_12_13_1_10_2_7_4_5() \ + VMOVQ_SI_X12(6*8); \ + VMOVQ_SI_X11(11*8); \ + VPINSRQ_1_SI_X12(14*8); \ + VPINSRQ_1_SI_X11_0; \ + VINSERTI128 $1, X11, Y12, Y12; \ + LOAD_MSG_AVX2_Y13(15, 9, 3, 8); \ + VMOVQ_SI_X11(1*8); \ + VMOVDQU 12*8(SI), X14; \ + VPINSRQ_1_SI_X11(10*8); \ + VINSERTI128 $1, X11, Y14, Y14; \ + VMOVQ_SI_X15(2*8); \ + VMOVDQU 4*8(SI), X11; \ + VPINSRQ_1_SI_X15(7*8); \ + VINSERTI128 $1, X11, Y15, Y15 + +#define LOAD_MSG_AVX2_10_8_7_1_2_4_6_5_15_9_3_13_11_14_12_0() \ + LOAD_MSG_AVX2_Y12(10, 8, 7, 1); \ + VMOVQ_SI_X13(2*8); \ + VPSHUFD $0x4E, 5*8(SI), X11; \ + VPINSRQ_1_SI_X13(4*8); \ + VINSERTI128 $1, X11, Y13, Y13; \ + LOAD_MSG_AVX2_Y14(15, 9, 3, 13); \ + VMOVQ_SI_X15(11*8); \ + VMOVQ_SI_X11(12*8); \ + VPINSRQ_1_SI_X15(14*8); \ + VPINSRQ_1_SI_X11_0; \ + VINSERTI128 $1, X11, Y15, Y15 + +// func hashBlocksAVX2(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) +TEXT ·hashBlocksAVX2(SB), 4, $320-48 // frame size = 288 + 32 byte alignment + MOVQ h+0(FP), AX + MOVQ c+8(FP), BX + MOVQ flag+16(FP), CX + MOVQ blocks_base+24(FP), SI + MOVQ blocks_len+32(FP), DI + + MOVQ SP, DX + ADDQ $31, DX + ANDQ $~31, DX + + MOVQ CX, 16(DX) + XORQ CX, CX + MOVQ CX, 24(DX) + + VMOVDQU ·AVX2_c40<>(SB), Y4 + VMOVDQU ·AVX2_c48<>(SB), Y5 + + VMOVDQU 0(AX), Y8 + VMOVDQU 32(AX), Y9 + VMOVDQU ·AVX2_iv0<>(SB), Y6 + VMOVDQU ·AVX2_iv1<>(SB), Y7 + + MOVQ 0(BX), R8 + MOVQ 8(BX), R9 + MOVQ R9, 8(DX) + +loop: + ADDQ $128, R8 + MOVQ R8, 0(DX) + CMPQ R8, $128 + JGE noinc + INCQ R9 + MOVQ R9, 8(DX) + +noinc: + VMOVDQA Y8, Y0 + VMOVDQA Y9, Y1 + VMOVDQA Y6, Y2 + VPXOR 0(DX), Y7, Y3 + + LOAD_MSG_AVX2_0_2_4_6_1_3_5_7_8_10_12_14_9_11_13_15() + VMOVDQA Y12, 32(DX) + VMOVDQA Y13, 64(DX) + VMOVDQA Y14, 96(DX) + VMOVDQA Y15, 128(DX) + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_14_4_9_13_10_8_15_6_1_0_11_5_12_2_7_3() + VMOVDQA Y12, 160(DX) + VMOVDQA Y13, 192(DX) + VMOVDQA Y14, 224(DX) + VMOVDQA Y15, 256(DX) + + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_11_12_5_15_8_0_2_13_10_3_7_9_14_6_1_4() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_7_3_13_11_9_1_12_14_2_5_4_15_6_10_0_8() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_9_5_2_10_0_7_4_15_14_11_6_3_1_12_8_13() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_2_6_0_8_12_10_11_3_4_7_15_1_13_5_14_9() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_12_1_14_4_5_15_13_10_0_6_9_8_7_3_2_11() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_13_7_12_3_11_14_1_9_5_15_8_2_0_4_6_10() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_6_14_11_0_15_9_3_8_12_13_1_10_2_7_4_5() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_10_8_7_1_2_4_6_5_15_9_3_13_11_14_12_0() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + + ROUND_AVX2(32(DX), 64(DX), 96(DX), 128(DX), Y10, Y4, Y5) + ROUND_AVX2(160(DX), 192(DX), 224(DX), 256(DX), Y10, Y4, Y5) + + VPXOR Y0, Y8, Y8 + VPXOR Y1, Y9, Y9 + VPXOR Y2, Y8, Y8 + VPXOR Y3, Y9, Y9 + + LEAQ 128(SI), SI + SUBQ $128, DI + JNE loop + + MOVQ R8, 0(BX) + MOVQ R9, 8(BX) + + VMOVDQU Y8, 0(AX) + VMOVDQU Y9, 32(AX) + VZEROUPPER + + RET + +#define VPUNPCKLQDQ_X2_X2_X15 BYTE $0xC5; BYTE $0x69; BYTE $0x6C; BYTE $0xFA +#define VPUNPCKLQDQ_X3_X3_X15 BYTE $0xC5; BYTE $0x61; BYTE $0x6C; BYTE $0xFB +#define VPUNPCKLQDQ_X7_X7_X15 BYTE $0xC5; BYTE $0x41; BYTE $0x6C; BYTE $0xFF +#define VPUNPCKLQDQ_X13_X13_X15 BYTE $0xC4; BYTE $0x41; BYTE $0x11; BYTE $0x6C; BYTE $0xFD +#define VPUNPCKLQDQ_X14_X14_X15 BYTE $0xC4; BYTE $0x41; BYTE $0x09; BYTE $0x6C; BYTE $0xFE + +#define VPUNPCKHQDQ_X15_X2_X2 BYTE $0xC4; BYTE $0xC1; BYTE $0x69; BYTE $0x6D; BYTE $0xD7 +#define VPUNPCKHQDQ_X15_X3_X3 BYTE $0xC4; BYTE $0xC1; BYTE $0x61; BYTE $0x6D; BYTE $0xDF +#define VPUNPCKHQDQ_X15_X6_X6 BYTE $0xC4; BYTE $0xC1; BYTE $0x49; BYTE $0x6D; BYTE $0xF7 +#define VPUNPCKHQDQ_X15_X7_X7 BYTE $0xC4; BYTE $0xC1; BYTE $0x41; BYTE $0x6D; BYTE $0xFF +#define VPUNPCKHQDQ_X15_X3_X2 BYTE $0xC4; BYTE $0xC1; BYTE $0x61; BYTE $0x6D; BYTE $0xD7 +#define VPUNPCKHQDQ_X15_X7_X6 BYTE $0xC4; BYTE $0xC1; BYTE $0x41; BYTE $0x6D; BYTE $0xF7 +#define VPUNPCKHQDQ_X15_X13_X3 BYTE $0xC4; BYTE $0xC1; BYTE $0x11; BYTE $0x6D; BYTE $0xDF +#define VPUNPCKHQDQ_X15_X13_X7 BYTE $0xC4; BYTE $0xC1; BYTE $0x11; BYTE $0x6D; BYTE $0xFF + +#define SHUFFLE_AVX() \ + VMOVDQA X6, X13; \ + VMOVDQA X2, X14; \ + VMOVDQA X4, X6; \ + VPUNPCKLQDQ_X13_X13_X15; \ + VMOVDQA X5, X4; \ + VMOVDQA X6, X5; \ + VPUNPCKHQDQ_X15_X7_X6; \ + VPUNPCKLQDQ_X7_X7_X15; \ + VPUNPCKHQDQ_X15_X13_X7; \ + VPUNPCKLQDQ_X3_X3_X15; \ + VPUNPCKHQDQ_X15_X2_X2; \ + VPUNPCKLQDQ_X14_X14_X15; \ + VPUNPCKHQDQ_X15_X3_X3; \ + +#define SHUFFLE_AVX_INV() \ + VMOVDQA X2, X13; \ + VMOVDQA X4, X14; \ + VPUNPCKLQDQ_X2_X2_X15; \ + VMOVDQA X5, X4; \ + VPUNPCKHQDQ_X15_X3_X2; \ + VMOVDQA X14, X5; \ + VPUNPCKLQDQ_X3_X3_X15; \ + VMOVDQA X6, X14; \ + VPUNPCKHQDQ_X15_X13_X3; \ + VPUNPCKLQDQ_X7_X7_X15; \ + VPUNPCKHQDQ_X15_X6_X6; \ + VPUNPCKLQDQ_X14_X14_X15; \ + VPUNPCKHQDQ_X15_X7_X7; \ + +#define HALF_ROUND_AVX(v0, v1, v2, v3, v4, v5, v6, v7, m0, m1, m2, m3, t0, c40, c48) \ + VPADDQ m0, v0, v0; \ + VPADDQ v2, v0, v0; \ + VPADDQ m1, v1, v1; \ + VPADDQ v3, v1, v1; \ + VPXOR v0, v6, v6; \ + VPXOR v1, v7, v7; \ + VPSHUFD $-79, v6, v6; \ + VPSHUFD $-79, v7, v7; \ + VPADDQ v6, v4, v4; \ + VPADDQ v7, v5, v5; \ + VPXOR v4, v2, v2; \ + VPXOR v5, v3, v3; \ + VPSHUFB c40, v2, v2; \ + VPSHUFB c40, v3, v3; \ + VPADDQ m2, v0, v0; \ + VPADDQ v2, v0, v0; \ + VPADDQ m3, v1, v1; \ + VPADDQ v3, v1, v1; \ + VPXOR v0, v6, v6; \ + VPXOR v1, v7, v7; \ + VPSHUFB c48, v6, v6; \ + VPSHUFB c48, v7, v7; \ + VPADDQ v6, v4, v4; \ + VPADDQ v7, v5, v5; \ + VPXOR v4, v2, v2; \ + VPXOR v5, v3, v3; \ + VPADDQ v2, v2, t0; \ + VPSRLQ $63, v2, v2; \ + VPXOR t0, v2, v2; \ + VPADDQ v3, v3, t0; \ + VPSRLQ $63, v3, v3; \ + VPXOR t0, v3, v3 + +// load msg: X12 = (i0, i1), X13 = (i2, i3), X14 = (i4, i5), X15 = (i6, i7) +// i0, i1, i2, i3, i4, i5, i6, i7 must not be 0 +#define LOAD_MSG_AVX(i0, i1, i2, i3, i4, i5, i6, i7) \ + VMOVQ_SI_X12(i0*8); \ + VMOVQ_SI_X13(i2*8); \ + VMOVQ_SI_X14(i4*8); \ + VMOVQ_SI_X15(i6*8); \ + VPINSRQ_1_SI_X12(i1*8); \ + VPINSRQ_1_SI_X13(i3*8); \ + VPINSRQ_1_SI_X14(i5*8); \ + VPINSRQ_1_SI_X15(i7*8) + +// load msg: X12 = (0, 2), X13 = (4, 6), X14 = (1, 3), X15 = (5, 7) +#define LOAD_MSG_AVX_0_2_4_6_1_3_5_7() \ + VMOVQ_SI_X12_0; \ + VMOVQ_SI_X13(4*8); \ + VMOVQ_SI_X14(1*8); \ + VMOVQ_SI_X15(5*8); \ + VPINSRQ_1_SI_X12(2*8); \ + VPINSRQ_1_SI_X13(6*8); \ + VPINSRQ_1_SI_X14(3*8); \ + VPINSRQ_1_SI_X15(7*8) + +// load msg: X12 = (1, 0), X13 = (11, 5), X14 = (12, 2), X15 = (7, 3) +#define LOAD_MSG_AVX_1_0_11_5_12_2_7_3() \ + VPSHUFD $0x4E, 0*8(SI), X12; \ + VMOVQ_SI_X13(11*8); \ + VMOVQ_SI_X14(12*8); \ + VMOVQ_SI_X15(7*8); \ + VPINSRQ_1_SI_X13(5*8); \ + VPINSRQ_1_SI_X14(2*8); \ + VPINSRQ_1_SI_X15(3*8) + +// load msg: X12 = (11, 12), X13 = (5, 15), X14 = (8, 0), X15 = (2, 13) +#define LOAD_MSG_AVX_11_12_5_15_8_0_2_13() \ + VMOVDQU 11*8(SI), X12; \ + VMOVQ_SI_X13(5*8); \ + VMOVQ_SI_X14(8*8); \ + VMOVQ_SI_X15(2*8); \ + VPINSRQ_1_SI_X13(15*8); \ + VPINSRQ_1_SI_X14_0; \ + VPINSRQ_1_SI_X15(13*8) + +// load msg: X12 = (2, 5), X13 = (4, 15), X14 = (6, 10), X15 = (0, 8) +#define LOAD_MSG_AVX_2_5_4_15_6_10_0_8() \ + VMOVQ_SI_X12(2*8); \ + VMOVQ_SI_X13(4*8); \ + VMOVQ_SI_X14(6*8); \ + VMOVQ_SI_X15_0; \ + VPINSRQ_1_SI_X12(5*8); \ + VPINSRQ_1_SI_X13(15*8); \ + VPINSRQ_1_SI_X14(10*8); \ + VPINSRQ_1_SI_X15(8*8) + +// load msg: X12 = (9, 5), X13 = (2, 10), X14 = (0, 7), X15 = (4, 15) +#define LOAD_MSG_AVX_9_5_2_10_0_7_4_15() \ + VMOVQ_SI_X12(9*8); \ + VMOVQ_SI_X13(2*8); \ + VMOVQ_SI_X14_0; \ + VMOVQ_SI_X15(4*8); \ + VPINSRQ_1_SI_X12(5*8); \ + VPINSRQ_1_SI_X13(10*8); \ + VPINSRQ_1_SI_X14(7*8); \ + VPINSRQ_1_SI_X15(15*8) + +// load msg: X12 = (2, 6), X13 = (0, 8), X14 = (12, 10), X15 = (11, 3) +#define LOAD_MSG_AVX_2_6_0_8_12_10_11_3() \ + VMOVQ_SI_X12(2*8); \ + VMOVQ_SI_X13_0; \ + VMOVQ_SI_X14(12*8); \ + VMOVQ_SI_X15(11*8); \ + VPINSRQ_1_SI_X12(6*8); \ + VPINSRQ_1_SI_X13(8*8); \ + VPINSRQ_1_SI_X14(10*8); \ + VPINSRQ_1_SI_X15(3*8) + +// load msg: X12 = (0, 6), X13 = (9, 8), X14 = (7, 3), X15 = (2, 11) +#define LOAD_MSG_AVX_0_6_9_8_7_3_2_11() \ + MOVQ 0*8(SI), X12; \ + VPSHUFD $0x4E, 8*8(SI), X13; \ + MOVQ 7*8(SI), X14; \ + MOVQ 2*8(SI), X15; \ + VPINSRQ_1_SI_X12(6*8); \ + VPINSRQ_1_SI_X14(3*8); \ + VPINSRQ_1_SI_X15(11*8) + +// load msg: X12 = (6, 14), X13 = (11, 0), X14 = (15, 9), X15 = (3, 8) +#define LOAD_MSG_AVX_6_14_11_0_15_9_3_8() \ + MOVQ 6*8(SI), X12; \ + MOVQ 11*8(SI), X13; \ + MOVQ 15*8(SI), X14; \ + MOVQ 3*8(SI), X15; \ + VPINSRQ_1_SI_X12(14*8); \ + VPINSRQ_1_SI_X13_0; \ + VPINSRQ_1_SI_X14(9*8); \ + VPINSRQ_1_SI_X15(8*8) + +// load msg: X12 = (5, 15), X13 = (8, 2), X14 = (0, 4), X15 = (6, 10) +#define LOAD_MSG_AVX_5_15_8_2_0_4_6_10() \ + MOVQ 5*8(SI), X12; \ + MOVQ 8*8(SI), X13; \ + MOVQ 0*8(SI), X14; \ + MOVQ 6*8(SI), X15; \ + VPINSRQ_1_SI_X12(15*8); \ + VPINSRQ_1_SI_X13(2*8); \ + VPINSRQ_1_SI_X14(4*8); \ + VPINSRQ_1_SI_X15(10*8) + +// load msg: X12 = (12, 13), X13 = (1, 10), X14 = (2, 7), X15 = (4, 5) +#define LOAD_MSG_AVX_12_13_1_10_2_7_4_5() \ + VMOVDQU 12*8(SI), X12; \ + MOVQ 1*8(SI), X13; \ + MOVQ 2*8(SI), X14; \ + VPINSRQ_1_SI_X13(10*8); \ + VPINSRQ_1_SI_X14(7*8); \ + VMOVDQU 4*8(SI), X15 + +// load msg: X12 = (15, 9), X13 = (3, 13), X14 = (11, 14), X15 = (12, 0) +#define LOAD_MSG_AVX_15_9_3_13_11_14_12_0() \ + MOVQ 15*8(SI), X12; \ + MOVQ 3*8(SI), X13; \ + MOVQ 11*8(SI), X14; \ + MOVQ 12*8(SI), X15; \ + VPINSRQ_1_SI_X12(9*8); \ + VPINSRQ_1_SI_X13(13*8); \ + VPINSRQ_1_SI_X14(14*8); \ + VPINSRQ_1_SI_X15_0 + +// func hashBlocksAVX(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) +TEXT ·hashBlocksAVX(SB), 4, $288-48 // frame size = 272 + 16 byte alignment + MOVQ h+0(FP), AX + MOVQ c+8(FP), BX + MOVQ flag+16(FP), CX + MOVQ blocks_base+24(FP), SI + MOVQ blocks_len+32(FP), DI + + MOVQ SP, R10 + ADDQ $15, R10 + ANDQ $~15, R10 + + VMOVDQU ·AVX_c40<>(SB), X0 + VMOVDQU ·AVX_c48<>(SB), X1 + VMOVDQA X0, X8 + VMOVDQA X1, X9 + + VMOVDQU ·AVX_iv3<>(SB), X0 + VMOVDQA X0, 0(R10) + XORQ CX, 0(R10) // 0(R10) = ·AVX_iv3 ^ (CX || 0) + + VMOVDQU 0(AX), X10 + VMOVDQU 16(AX), X11 + VMOVDQU 32(AX), X2 + VMOVDQU 48(AX), X3 + + MOVQ 0(BX), R8 + MOVQ 8(BX), R9 + +loop: + ADDQ $128, R8 + CMPQ R8, $128 + JGE noinc + INCQ R9 + +noinc: + VMOVQ_R8_X15 + VPINSRQ_1_R9_X15 + + VMOVDQA X10, X0 + VMOVDQA X11, X1 + VMOVDQU ·AVX_iv0<>(SB), X4 + VMOVDQU ·AVX_iv1<>(SB), X5 + VMOVDQU ·AVX_iv2<>(SB), X6 + + VPXOR X15, X6, X6 + VMOVDQA 0(R10), X7 + + LOAD_MSG_AVX_0_2_4_6_1_3_5_7() + VMOVDQA X12, 16(R10) + VMOVDQA X13, 32(R10) + VMOVDQA X14, 48(R10) + VMOVDQA X15, 64(R10) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX(8, 10, 12, 14, 9, 11, 13, 15) + VMOVDQA X12, 80(R10) + VMOVDQA X13, 96(R10) + VMOVDQA X14, 112(R10) + VMOVDQA X15, 128(R10) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX(14, 4, 9, 13, 10, 8, 15, 6) + VMOVDQA X12, 144(R10) + VMOVDQA X13, 160(R10) + VMOVDQA X14, 176(R10) + VMOVDQA X15, 192(R10) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_1_0_11_5_12_2_7_3() + VMOVDQA X12, 208(R10) + VMOVDQA X13, 224(R10) + VMOVDQA X14, 240(R10) + VMOVDQA X15, 256(R10) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX_11_12_5_15_8_0_2_13() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX(10, 3, 7, 9, 14, 6, 1, 4) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX(7, 3, 13, 11, 9, 1, 12, 14) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_2_5_4_15_6_10_0_8() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX_9_5_2_10_0_7_4_15() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX(14, 11, 6, 3, 1, 12, 8, 13) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX_2_6_0_8_12_10_11_3() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX(4, 7, 15, 1, 13, 5, 14, 9) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX(12, 1, 14, 4, 5, 15, 13, 10) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_0_6_9_8_7_3_2_11() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX(13, 7, 12, 3, 11, 14, 1, 9) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_5_15_8_2_0_4_6_10() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX_6_14_11_0_15_9_3_8() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_12_13_1_10_2_7_4_5() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX(10, 8, 7, 1, 2, 4, 6, 5) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_15_9_3_13_11_14_12_0() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 16(R10), 32(R10), 48(R10), 64(R10), X15, X8, X9) + SHUFFLE_AVX() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 80(R10), 96(R10), 112(R10), 128(R10), X15, X8, X9) + SHUFFLE_AVX_INV() + + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 144(R10), 160(R10), 176(R10), 192(R10), X15, X8, X9) + SHUFFLE_AVX() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 208(R10), 224(R10), 240(R10), 256(R10), X15, X8, X9) + SHUFFLE_AVX_INV() + + VMOVDQU 32(AX), X14 + VMOVDQU 48(AX), X15 + VPXOR X0, X10, X10 + VPXOR X1, X11, X11 + VPXOR X2, X14, X14 + VPXOR X3, X15, X15 + VPXOR X4, X10, X10 + VPXOR X5, X11, X11 + VPXOR X6, X14, X2 + VPXOR X7, X15, X3 + VMOVDQU X2, 32(AX) + VMOVDQU X3, 48(AX) + + LEAQ 128(SI), SI + SUBQ $128, DI + JNE loop + + VMOVDQU X10, 0(AX) + VMOVDQU X11, 16(AX) + + MOVQ R8, 0(BX) + MOVQ R9, 8(BX) + VZEROUPPER + + RET diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.go b/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.go new file mode 100644 index 0000000..5fa1b32 --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.go @@ -0,0 +1,25 @@ +// 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 !go1.7 && amd64 && gc && !purego +// +build !go1.7,amd64,gc,!purego + +package blake2b + +import "golang.org/x/sys/cpu" + +func init() { + useSSE4 = cpu.X86.HasSSE41 +} + +//go:noescape +func hashBlocksSSE4(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) + +func hashBlocks(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) { + if useSSE4 { + hashBlocksSSE4(h, c, flag, blocks) + } else { + hashBlocksGeneric(h, c, flag, blocks) + } +} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.s b/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.s new file mode 100644 index 0000000..ae75eb9 --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.s @@ -0,0 +1,279 @@ +// 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 +// +build amd64,gc,!purego + +#include "textflag.h" + +DATA ·iv0<>+0x00(SB)/8, $0x6a09e667f3bcc908 +DATA ·iv0<>+0x08(SB)/8, $0xbb67ae8584caa73b +GLOBL ·iv0<>(SB), (NOPTR+RODATA), $16 + +DATA ·iv1<>+0x00(SB)/8, $0x3c6ef372fe94f82b +DATA ·iv1<>+0x08(SB)/8, $0xa54ff53a5f1d36f1 +GLOBL ·iv1<>(SB), (NOPTR+RODATA), $16 + +DATA ·iv2<>+0x00(SB)/8, $0x510e527fade682d1 +DATA ·iv2<>+0x08(SB)/8, $0x9b05688c2b3e6c1f +GLOBL ·iv2<>(SB), (NOPTR+RODATA), $16 + +DATA ·iv3<>+0x00(SB)/8, $0x1f83d9abfb41bd6b +DATA ·iv3<>+0x08(SB)/8, $0x5be0cd19137e2179 +GLOBL ·iv3<>(SB), (NOPTR+RODATA), $16 + +DATA ·c40<>+0x00(SB)/8, $0x0201000706050403 +DATA ·c40<>+0x08(SB)/8, $0x0a09080f0e0d0c0b +GLOBL ·c40<>(SB), (NOPTR+RODATA), $16 + +DATA ·c48<>+0x00(SB)/8, $0x0100070605040302 +DATA ·c48<>+0x08(SB)/8, $0x09080f0e0d0c0b0a +GLOBL ·c48<>(SB), (NOPTR+RODATA), $16 + +#define SHUFFLE(v2, v3, v4, v5, v6, v7, t1, t2) \ + MOVO v4, t1; \ + MOVO v5, v4; \ + MOVO t1, v5; \ + MOVO v6, t1; \ + PUNPCKLQDQ v6, t2; \ + PUNPCKHQDQ v7, v6; \ + PUNPCKHQDQ t2, v6; \ + PUNPCKLQDQ v7, t2; \ + MOVO t1, v7; \ + MOVO v2, t1; \ + PUNPCKHQDQ t2, v7; \ + PUNPCKLQDQ v3, t2; \ + PUNPCKHQDQ t2, v2; \ + PUNPCKLQDQ t1, t2; \ + PUNPCKHQDQ t2, v3 + +#define SHUFFLE_INV(v2, v3, v4, v5, v6, v7, t1, t2) \ + MOVO v4, t1; \ + MOVO v5, v4; \ + MOVO t1, v5; \ + MOVO v2, t1; \ + PUNPCKLQDQ v2, t2; \ + PUNPCKHQDQ v3, v2; \ + PUNPCKHQDQ t2, v2; \ + PUNPCKLQDQ v3, t2; \ + MOVO t1, v3; \ + MOVO v6, t1; \ + PUNPCKHQDQ t2, v3; \ + PUNPCKLQDQ v7, t2; \ + PUNPCKHQDQ t2, v6; \ + PUNPCKLQDQ t1, t2; \ + PUNPCKHQDQ t2, v7 + +#define HALF_ROUND(v0, v1, v2, v3, v4, v5, v6, v7, m0, m1, m2, m3, t0, c40, c48) \ + PADDQ m0, v0; \ + PADDQ m1, v1; \ + PADDQ v2, v0; \ + PADDQ v3, v1; \ + PXOR v0, v6; \ + PXOR v1, v7; \ + PSHUFD $0xB1, v6, v6; \ + PSHUFD $0xB1, v7, v7; \ + PADDQ v6, v4; \ + PADDQ v7, v5; \ + PXOR v4, v2; \ + PXOR v5, v3; \ + PSHUFB c40, v2; \ + PSHUFB c40, v3; \ + PADDQ m2, v0; \ + PADDQ m3, v1; \ + PADDQ v2, v0; \ + PADDQ v3, v1; \ + PXOR v0, v6; \ + PXOR v1, v7; \ + PSHUFB c48, v6; \ + PSHUFB c48, v7; \ + PADDQ v6, v4; \ + PADDQ v7, v5; \ + PXOR v4, v2; \ + PXOR v5, v3; \ + MOVOU v2, t0; \ + PADDQ v2, t0; \ + PSRLQ $63, v2; \ + PXOR t0, v2; \ + MOVOU v3, t0; \ + PADDQ v3, t0; \ + PSRLQ $63, v3; \ + PXOR t0, v3 + +#define LOAD_MSG(m0, m1, m2, m3, src, i0, i1, i2, i3, i4, i5, i6, i7) \ + MOVQ i0*8(src), m0; \ + PINSRQ $1, i1*8(src), m0; \ + MOVQ i2*8(src), m1; \ + PINSRQ $1, i3*8(src), m1; \ + MOVQ i4*8(src), m2; \ + PINSRQ $1, i5*8(src), m2; \ + MOVQ i6*8(src), m3; \ + PINSRQ $1, i7*8(src), m3 + +// func hashBlocksSSE4(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) +TEXT ·hashBlocksSSE4(SB), 4, $288-48 // frame size = 272 + 16 byte alignment + MOVQ h+0(FP), AX + MOVQ c+8(FP), BX + MOVQ flag+16(FP), CX + MOVQ blocks_base+24(FP), SI + MOVQ blocks_len+32(FP), DI + + MOVQ SP, R10 + ADDQ $15, R10 + ANDQ $~15, R10 + + MOVOU ·iv3<>(SB), X0 + MOVO X0, 0(R10) + XORQ CX, 0(R10) // 0(R10) = ·iv3 ^ (CX || 0) + + MOVOU ·c40<>(SB), X13 + MOVOU ·c48<>(SB), X14 + + MOVOU 0(AX), X12 + MOVOU 16(AX), X15 + + MOVQ 0(BX), R8 + MOVQ 8(BX), R9 + +loop: + ADDQ $128, R8 + CMPQ R8, $128 + JGE noinc + INCQ R9 + +noinc: + MOVQ R8, X8 + PINSRQ $1, R9, X8 + + MOVO X12, X0 + MOVO X15, X1 + MOVOU 32(AX), X2 + MOVOU 48(AX), X3 + MOVOU ·iv0<>(SB), X4 + MOVOU ·iv1<>(SB), X5 + MOVOU ·iv2<>(SB), X6 + + PXOR X8, X6 + MOVO 0(R10), X7 + + LOAD_MSG(X8, X9, X10, X11, SI, 0, 2, 4, 6, 1, 3, 5, 7) + MOVO X8, 16(R10) + MOVO X9, 32(R10) + MOVO X10, 48(R10) + MOVO X11, 64(R10) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 8, 10, 12, 14, 9, 11, 13, 15) + MOVO X8, 80(R10) + MOVO X9, 96(R10) + MOVO X10, 112(R10) + MOVO X11, 128(R10) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 14, 4, 9, 13, 10, 8, 15, 6) + MOVO X8, 144(R10) + MOVO X9, 160(R10) + MOVO X10, 176(R10) + MOVO X11, 192(R10) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 1, 0, 11, 5, 12, 2, 7, 3) + MOVO X8, 208(R10) + MOVO X9, 224(R10) + MOVO X10, 240(R10) + MOVO X11, 256(R10) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 11, 12, 5, 15, 8, 0, 2, 13) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 10, 3, 7, 9, 14, 6, 1, 4) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 7, 3, 13, 11, 9, 1, 12, 14) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 2, 5, 4, 15, 6, 10, 0, 8) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 9, 5, 2, 10, 0, 7, 4, 15) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 14, 11, 6, 3, 1, 12, 8, 13) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 2, 6, 0, 8, 12, 10, 11, 3) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 4, 7, 15, 1, 13, 5, 14, 9) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 12, 1, 14, 4, 5, 15, 13, 10) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 0, 6, 9, 8, 7, 3, 2, 11) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 13, 7, 12, 3, 11, 14, 1, 9) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 5, 15, 8, 2, 0, 4, 6, 10) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 6, 14, 11, 0, 15, 9, 3, 8) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 12, 13, 1, 10, 2, 7, 4, 5) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 10, 8, 7, 1, 2, 4, 6, 5) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 15, 9, 3, 13, 11, 14, 12, 0) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, 16(R10), 32(R10), 48(R10), 64(R10), X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, 80(R10), 96(R10), 112(R10), 128(R10), X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, 144(R10), 160(R10), 176(R10), 192(R10), X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, 208(R10), 224(R10), 240(R10), 256(R10), X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + MOVOU 32(AX), X10 + MOVOU 48(AX), X11 + PXOR X0, X12 + PXOR X1, X15 + PXOR X2, X10 + PXOR X3, X11 + PXOR X4, X12 + PXOR X5, X15 + PXOR X6, X10 + PXOR X7, X11 + MOVOU X10, 32(AX) + MOVOU X11, 48(AX) + + LEAQ 128(SI), SI + SUBQ $128, DI + JNE loop + + MOVOU X12, 0(AX) + MOVOU X15, 16(AX) + + MOVQ R8, 0(BX) + MOVQ R9, 8(BX) + + RET diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b_generic.go b/vendor/golang.org/x/crypto/blake2b/blake2b_generic.go new file mode 100644 index 0000000..3168a8a --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2b_generic.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 blake2b + +import ( + "encoding/binary" + "math/bits" +) + +// the precomputed values for BLAKE2b +// there are 12 16-byte arrays - one for each round +// the entries are calculated from the sigma constants. +var precomputed = [12][16]byte{ + {0, 2, 4, 6, 1, 3, 5, 7, 8, 10, 12, 14, 9, 11, 13, 15}, + {14, 4, 9, 13, 10, 8, 15, 6, 1, 0, 11, 5, 12, 2, 7, 3}, + {11, 12, 5, 15, 8, 0, 2, 13, 10, 3, 7, 9, 14, 6, 1, 4}, + {7, 3, 13, 11, 9, 1, 12, 14, 2, 5, 4, 15, 6, 10, 0, 8}, + {9, 5, 2, 10, 0, 7, 4, 15, 14, 11, 6, 3, 1, 12, 8, 13}, + {2, 6, 0, 8, 12, 10, 11, 3, 4, 7, 15, 1, 13, 5, 14, 9}, + {12, 1, 14, 4, 5, 15, 13, 10, 0, 6, 9, 8, 7, 3, 2, 11}, + {13, 7, 12, 3, 11, 14, 1, 9, 5, 15, 8, 2, 0, 4, 6, 10}, + {6, 14, 11, 0, 15, 9, 3, 8, 12, 13, 1, 10, 2, 7, 4, 5}, + {10, 8, 7, 1, 2, 4, 6, 5, 15, 9, 3, 13, 11, 14, 12, 0}, + {0, 2, 4, 6, 1, 3, 5, 7, 8, 10, 12, 14, 9, 11, 13, 15}, // equal to the first + {14, 4, 9, 13, 10, 8, 15, 6, 1, 0, 11, 5, 12, 2, 7, 3}, // equal to the second +} + +func hashBlocksGeneric(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) { + var m [16]uint64 + c0, c1 := c[0], c[1] + + for i := 0; i < len(blocks); { + c0 += BlockSize + if c0 < BlockSize { + c1++ + } + + v0, v1, v2, v3, v4, v5, v6, v7 := h[0], h[1], h[2], h[3], h[4], h[5], h[6], h[7] + v8, v9, v10, v11, v12, v13, v14, v15 := iv[0], iv[1], iv[2], iv[3], iv[4], iv[5], iv[6], iv[7] + v12 ^= c0 + v13 ^= c1 + v14 ^= flag + + for j := range m { + m[j] = binary.LittleEndian.Uint64(blocks[i:]) + i += 8 + } + + for j := range precomputed { + s := &(precomputed[j]) + + v0 += m[s[0]] + v0 += v4 + v12 ^= v0 + v12 = bits.RotateLeft64(v12, -32) + v8 += v12 + v4 ^= v8 + v4 = bits.RotateLeft64(v4, -24) + v1 += m[s[1]] + v1 += v5 + v13 ^= v1 + v13 = bits.RotateLeft64(v13, -32) + v9 += v13 + v5 ^= v9 + v5 = bits.RotateLeft64(v5, -24) + v2 += m[s[2]] + v2 += v6 + v14 ^= v2 + v14 = bits.RotateLeft64(v14, -32) + v10 += v14 + v6 ^= v10 + v6 = bits.RotateLeft64(v6, -24) + v3 += m[s[3]] + v3 += v7 + v15 ^= v3 + v15 = bits.RotateLeft64(v15, -32) + v11 += v15 + v7 ^= v11 + v7 = bits.RotateLeft64(v7, -24) + + v0 += m[s[4]] + v0 += v4 + v12 ^= v0 + v12 = bits.RotateLeft64(v12, -16) + v8 += v12 + v4 ^= v8 + v4 = bits.RotateLeft64(v4, -63) + v1 += m[s[5]] + v1 += v5 + v13 ^= v1 + v13 = bits.RotateLeft64(v13, -16) + v9 += v13 + v5 ^= v9 + v5 = bits.RotateLeft64(v5, -63) + v2 += m[s[6]] + v2 += v6 + v14 ^= v2 + v14 = bits.RotateLeft64(v14, -16) + v10 += v14 + v6 ^= v10 + v6 = bits.RotateLeft64(v6, -63) + v3 += m[s[7]] + v3 += v7 + v15 ^= v3 + v15 = bits.RotateLeft64(v15, -16) + v11 += v15 + v7 ^= v11 + v7 = bits.RotateLeft64(v7, -63) + + v0 += m[s[8]] + v0 += v5 + v15 ^= v0 + v15 = bits.RotateLeft64(v15, -32) + v10 += v15 + v5 ^= v10 + v5 = bits.RotateLeft64(v5, -24) + v1 += m[s[9]] + v1 += v6 + v12 ^= v1 + v12 = bits.RotateLeft64(v12, -32) + v11 += v12 + v6 ^= v11 + v6 = bits.RotateLeft64(v6, -24) + v2 += m[s[10]] + v2 += v7 + v13 ^= v2 + v13 = bits.RotateLeft64(v13, -32) + v8 += v13 + v7 ^= v8 + v7 = bits.RotateLeft64(v7, -24) + v3 += m[s[11]] + v3 += v4 + v14 ^= v3 + v14 = bits.RotateLeft64(v14, -32) + v9 += v14 + v4 ^= v9 + v4 = bits.RotateLeft64(v4, -24) + + v0 += m[s[12]] + v0 += v5 + v15 ^= v0 + v15 = bits.RotateLeft64(v15, -16) + v10 += v15 + v5 ^= v10 + v5 = bits.RotateLeft64(v5, -63) + v1 += m[s[13]] + v1 += v6 + v12 ^= v1 + v12 = bits.RotateLeft64(v12, -16) + v11 += v12 + v6 ^= v11 + v6 = bits.RotateLeft64(v6, -63) + v2 += m[s[14]] + v2 += v7 + v13 ^= v2 + v13 = bits.RotateLeft64(v13, -16) + v8 += v13 + v7 ^= v8 + v7 = bits.RotateLeft64(v7, -63) + v3 += m[s[15]] + v3 += v4 + v14 ^= v3 + v14 = bits.RotateLeft64(v14, -16) + v9 += v14 + v4 ^= v9 + v4 = bits.RotateLeft64(v4, -63) + + } + + h[0] ^= v0 ^ v8 + h[1] ^= v1 ^ v9 + h[2] ^= v2 ^ v10 + h[3] ^= v3 ^ v11 + h[4] ^= v4 ^ v12 + h[5] ^= v5 ^ v13 + h[6] ^= v6 ^ v14 + h[7] ^= v7 ^ v15 + } + c[0], c[1] = c0, c1 +} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b_ref.go b/vendor/golang.org/x/crypto/blake2b/blake2b_ref.go new file mode 100644 index 0000000..b0137cd --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2b_ref.go @@ -0,0 +1,12 @@ +// 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 || purego || !gc +// +build !amd64 purego !gc + +package blake2b + +func hashBlocks(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) { + hashBlocksGeneric(h, c, flag, blocks) +} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2x.go b/vendor/golang.org/x/crypto/blake2b/blake2x.go new file mode 100644 index 0000000..52c414d --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2x.go @@ -0,0 +1,177 @@ +// 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 blake2b + +import ( + "encoding/binary" + "errors" + "io" +) + +// XOF defines the interface to hash functions that +// support arbitrary-length output. +type XOF interface { + // Write absorbs more data into the hash's state. It panics if called + // after Read. + io.Writer + + // Read reads more output from the hash. It returns io.EOF if the limit + // has been reached. + io.Reader + + // Clone returns a copy of the XOF in its current state. + Clone() XOF + + // Reset resets the XOF to its initial state. + Reset() +} + +// OutputLengthUnknown can be used as the size argument to NewXOF to indicate +// the length of the output is not known in advance. +const OutputLengthUnknown = 0 + +// magicUnknownOutputLength is a magic value for the output size that indicates +// an unknown number of output bytes. +const magicUnknownOutputLength = (1 << 32) - 1 + +// maxOutputLength is the absolute maximum number of bytes to produce when the +// number of output bytes is unknown. +const maxOutputLength = (1 << 32) * 64 + +// NewXOF creates a new variable-output-length hash. The hash either produce a +// known number of bytes (1 <= size < 2**32-1), or an unknown number of bytes +// (size == OutputLengthUnknown). In the latter case, an absolute limit of +// 256GiB applies. +// +// A non-nil key turns the hash into a MAC. The key must between +// zero and 32 bytes long. +func NewXOF(size uint32, key []byte) (XOF, error) { + if len(key) > Size { + return nil, errKeySize + } + if size == magicUnknownOutputLength { + // 2^32-1 indicates an unknown number of bytes and thus isn't a + // valid length. + return nil, errors.New("blake2b: XOF length too large") + } + if size == OutputLengthUnknown { + size = magicUnknownOutputLength + } + x := &xof{ + d: digest{ + size: Size, + keyLen: len(key), + }, + length: size, + } + copy(x.d.key[:], key) + x.Reset() + return x, nil +} + +type xof struct { + d digest + length uint32 + remaining uint64 + cfg, root, block [Size]byte + offset int + nodeOffset uint32 + readMode bool +} + +func (x *xof) Write(p []byte) (n int, err error) { + if x.readMode { + panic("blake2b: write to XOF after read") + } + return x.d.Write(p) +} + +func (x *xof) Clone() XOF { + clone := *x + return &clone +} + +func (x *xof) Reset() { + x.cfg[0] = byte(Size) + binary.LittleEndian.PutUint32(x.cfg[4:], uint32(Size)) // leaf length + binary.LittleEndian.PutUint32(x.cfg[12:], x.length) // XOF length + x.cfg[17] = byte(Size) // inner hash size + + x.d.Reset() + x.d.h[1] ^= uint64(x.length) << 32 + + x.remaining = uint64(x.length) + if x.remaining == magicUnknownOutputLength { + x.remaining = maxOutputLength + } + x.offset, x.nodeOffset = 0, 0 + x.readMode = false +} + +func (x *xof) Read(p []byte) (n int, err error) { + if !x.readMode { + x.d.finalize(&x.root) + x.readMode = true + } + + if x.remaining == 0 { + return 0, io.EOF + } + + n = len(p) + if uint64(n) > x.remaining { + n = int(x.remaining) + p = p[:n] + } + + if x.offset > 0 { + blockRemaining := Size - x.offset + if n < blockRemaining { + x.offset += copy(p, x.block[x.offset:]) + x.remaining -= uint64(n) + return + } + copy(p, x.block[x.offset:]) + p = p[blockRemaining:] + x.offset = 0 + x.remaining -= uint64(blockRemaining) + } + + for len(p) >= Size { + binary.LittleEndian.PutUint32(x.cfg[8:], x.nodeOffset) + x.nodeOffset++ + + x.d.initConfig(&x.cfg) + x.d.Write(x.root[:]) + x.d.finalize(&x.block) + + copy(p, x.block[:]) + p = p[Size:] + x.remaining -= uint64(Size) + } + + if todo := len(p); todo > 0 { + if x.remaining < uint64(Size) { + x.cfg[0] = byte(x.remaining) + } + binary.LittleEndian.PutUint32(x.cfg[8:], x.nodeOffset) + x.nodeOffset++ + + x.d.initConfig(&x.cfg) + x.d.Write(x.root[:]) + x.d.finalize(&x.block) + + x.offset = copy(p, x.block[:todo]) + x.remaining -= uint64(todo) + } + return +} + +func (d *digest) initConfig(cfg *[Size]byte) { + d.offset, d.c[0], d.c[1] = 0, 0, 0 + for i := range d.h { + d.h[i] = iv[i] ^ binary.LittleEndian.Uint64(cfg[i*8:]) + } +} diff --git a/vendor/golang.org/x/crypto/blake2b/register.go b/vendor/golang.org/x/crypto/blake2b/register.go new file mode 100644 index 0000000..9d86339 --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/register.go @@ -0,0 +1,33 @@ +// 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 go1.9 +// +build go1.9 + +package blake2b + +import ( + "crypto" + "hash" +) + +func init() { + newHash256 := func() hash.Hash { + h, _ := New256(nil) + return h + } + newHash384 := func() hash.Hash { + h, _ := New384(nil) + return h + } + + newHash512 := func() hash.Hash { + h, _ := New512(nil) + return h + } + + crypto.RegisterHash(crypto.BLAKE2b_256, newHash256) + crypto.RegisterHash(crypto.BLAKE2b_384, newHash384) + crypto.RegisterHash(crypto.BLAKE2b_512, newHash512) +} diff --git a/vendor/golang.org/x/crypto/blowfish/block.go b/vendor/golang.org/x/crypto/blowfish/block.go new file mode 100644 index 0000000..9d80f19 --- /dev/null +++ b/vendor/golang.org/x/crypto/blowfish/block.go @@ -0,0 +1,159 @@ +// 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. + +package blowfish + +// getNextWord returns the next big-endian uint32 value from the byte slice +// at the given position in a circular manner, updating the position. +func getNextWord(b []byte, pos *int) uint32 { + var w uint32 + j := *pos + for i := 0; i < 4; i++ { + w = w<<8 | uint32(b[j]) + j++ + if j >= len(b) { + j = 0 + } + } + *pos = j + return w +} + +// ExpandKey performs a key expansion on the given *Cipher. Specifically, it +// performs the Blowfish algorithm's key schedule which sets up the *Cipher's +// pi and substitution tables for calls to Encrypt. This is used, primarily, +// by the bcrypt package to reuse the Blowfish key schedule during its +// set up. It's unlikely that you need to use this directly. +func ExpandKey(key []byte, c *Cipher) { + j := 0 + for i := 0; i < 18; i++ { + // Using inlined getNextWord for performance. + var d uint32 + for k := 0; k < 4; k++ { + d = d<<8 | uint32(key[j]) + j++ + if j >= len(key) { + j = 0 + } + } + c.p[i] ^= d + } + + var l, r uint32 + for i := 0; i < 18; i += 2 { + l, r = encryptBlock(l, r, c) + c.p[i], c.p[i+1] = l, r + } + + for i := 0; i < 256; i += 2 { + l, r = encryptBlock(l, r, c) + c.s0[i], c.s0[i+1] = l, r + } + for i := 0; i < 256; i += 2 { + l, r = encryptBlock(l, r, c) + c.s1[i], c.s1[i+1] = l, r + } + for i := 0; i < 256; i += 2 { + l, r = encryptBlock(l, r, c) + c.s2[i], c.s2[i+1] = l, r + } + for i := 0; i < 256; i += 2 { + l, r = encryptBlock(l, r, c) + c.s3[i], c.s3[i+1] = l, r + } +} + +// This is similar to ExpandKey, but folds the salt during the key +// schedule. While ExpandKey is essentially expandKeyWithSalt with an all-zero +// salt passed in, reusing ExpandKey turns out to be a place of inefficiency +// and specializing it here is useful. +func expandKeyWithSalt(key []byte, salt []byte, c *Cipher) { + j := 0 + for i := 0; i < 18; i++ { + c.p[i] ^= getNextWord(key, &j) + } + + j = 0 + var l, r uint32 + for i := 0; i < 18; i += 2 { + l ^= getNextWord(salt, &j) + r ^= getNextWord(salt, &j) + l, r = encryptBlock(l, r, c) + c.p[i], c.p[i+1] = l, r + } + + for i := 0; i < 256; i += 2 { + l ^= getNextWord(salt, &j) + r ^= getNextWord(salt, &j) + l, r = encryptBlock(l, r, c) + c.s0[i], c.s0[i+1] = l, r + } + + for i := 0; i < 256; i += 2 { + l ^= getNextWord(salt, &j) + r ^= getNextWord(salt, &j) + l, r = encryptBlock(l, r, c) + c.s1[i], c.s1[i+1] = l, r + } + + for i := 0; i < 256; i += 2 { + l ^= getNextWord(salt, &j) + r ^= getNextWord(salt, &j) + l, r = encryptBlock(l, r, c) + c.s2[i], c.s2[i+1] = l, r + } + + for i := 0; i < 256; i += 2 { + l ^= getNextWord(salt, &j) + r ^= getNextWord(salt, &j) + l, r = encryptBlock(l, r, c) + c.s3[i], c.s3[i+1] = l, r + } +} + +func encryptBlock(l, r uint32, c *Cipher) (uint32, uint32) { + xl, xr := l, r + xl ^= c.p[0] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[1] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[2] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[3] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[4] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[5] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[6] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[7] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[8] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[9] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[10] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[11] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[12] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[13] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[14] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[15] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[16] + xr ^= c.p[17] + return xr, xl +} + +func decryptBlock(l, r uint32, c *Cipher) (uint32, uint32) { + xl, xr := l, r + xl ^= c.p[17] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[16] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[15] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[14] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[13] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[12] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[11] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[10] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[9] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[8] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[7] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[6] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[5] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[4] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[3] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[2] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[1] + xr ^= c.p[0] + return xr, xl +} diff --git a/vendor/golang.org/x/crypto/blowfish/cipher.go b/vendor/golang.org/x/crypto/blowfish/cipher.go new file mode 100644 index 0000000..213bf20 --- /dev/null +++ b/vendor/golang.org/x/crypto/blowfish/cipher.go @@ -0,0 +1,99 @@ +// 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. + +// Package blowfish implements Bruce Schneier's Blowfish encryption algorithm. +// +// Blowfish is a legacy cipher and its short block size makes it vulnerable to +// birthday bound attacks (see https://sweet32.info). It should only be used +// where compatibility with legacy systems, not security, is the goal. +// +// Deprecated: any new system should use AES (from crypto/aes, if necessary in +// an AEAD mode like crypto/cipher.NewGCM) or XChaCha20-Poly1305 (from +// golang.org/x/crypto/chacha20poly1305). +package blowfish // import "golang.org/x/crypto/blowfish" + +// The code is a port of Bruce Schneier's C implementation. +// See https://www.schneier.com/blowfish.html. + +import "strconv" + +// The Blowfish block size in bytes. +const BlockSize = 8 + +// A Cipher is an instance of Blowfish encryption using a particular key. +type Cipher struct { + p [18]uint32 + s0, s1, s2, s3 [256]uint32 +} + +type KeySizeError int + +func (k KeySizeError) Error() string { + return "crypto/blowfish: invalid key size " + strconv.Itoa(int(k)) +} + +// NewCipher creates and returns a Cipher. +// The key argument should be the Blowfish key, from 1 to 56 bytes. +func NewCipher(key []byte) (*Cipher, error) { + var result Cipher + if k := len(key); k < 1 || k > 56 { + return nil, KeySizeError(k) + } + initCipher(&result) + ExpandKey(key, &result) + return &result, nil +} + +// NewSaltedCipher creates a returns a Cipher that folds a salt into its key +// schedule. For most purposes, NewCipher, instead of NewSaltedCipher, is +// sufficient and desirable. For bcrypt compatibility, the key can be over 56 +// bytes. +func NewSaltedCipher(key, salt []byte) (*Cipher, error) { + if len(salt) == 0 { + return NewCipher(key) + } + var result Cipher + if k := len(key); k < 1 { + return nil, KeySizeError(k) + } + initCipher(&result) + expandKeyWithSalt(key, salt, &result) + return &result, nil +} + +// BlockSize returns the Blowfish block size, 8 bytes. +// It is necessary to satisfy the Block interface in the +// package "crypto/cipher". +func (c *Cipher) BlockSize() int { return BlockSize } + +// Encrypt encrypts the 8-byte buffer src using the key k +// and stores the result in dst. +// Note that for amounts of data larger than a block, +// it is not safe to just call Encrypt on successive blocks; +// instead, use an encryption mode like CBC (see crypto/cipher/cbc.go). +func (c *Cipher) Encrypt(dst, src []byte) { + l := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3]) + r := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7]) + l, r = encryptBlock(l, r, c) + dst[0], dst[1], dst[2], dst[3] = byte(l>>24), byte(l>>16), byte(l>>8), byte(l) + dst[4], dst[5], dst[6], dst[7] = byte(r>>24), byte(r>>16), byte(r>>8), byte(r) +} + +// Decrypt decrypts the 8-byte buffer src using the key k +// and stores the result in dst. +func (c *Cipher) Decrypt(dst, src []byte) { + l := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3]) + r := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7]) + l, r = decryptBlock(l, r, c) + dst[0], dst[1], dst[2], dst[3] = byte(l>>24), byte(l>>16), byte(l>>8), byte(l) + dst[4], dst[5], dst[6], dst[7] = byte(r>>24), byte(r>>16), byte(r>>8), byte(r) +} + +func initCipher(c *Cipher) { + copy(c.p[0:], p[0:]) + copy(c.s0[0:], s0[0:]) + copy(c.s1[0:], s1[0:]) + copy(c.s2[0:], s2[0:]) + copy(c.s3[0:], s3[0:]) +} diff --git a/vendor/golang.org/x/crypto/blowfish/const.go b/vendor/golang.org/x/crypto/blowfish/const.go new file mode 100644 index 0000000..d040775 --- /dev/null +++ b/vendor/golang.org/x/crypto/blowfish/const.go @@ -0,0 +1,199 @@ +// 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. + +// The startup permutation array and substitution boxes. +// They are the hexadecimal digits of PI; see: +// https://www.schneier.com/code/constants.txt. + +package blowfish + +var s0 = [256]uint32{ + 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, + 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, + 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, 0x0d95748f, 0x728eb658, + 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, + 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, + 0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, + 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, 0x55ca396a, 0x2aab10b6, + 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, + 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, + 0x7a325381, 0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, + 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d, 0xe98575b1, + 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, + 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, + 0x670c9c61, 0xabd388f0, 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, + 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, 0xa1f1651d, 0x39af0176, + 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, + 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, + 0x1bfedf72, 0x429b023d, 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, + 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b, + 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, + 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, + 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, + 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a, + 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, + 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, + 0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, + 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, 0x695b27b0, 0xbbca58c8, + 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, + 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, + 0x62fb1341, 0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, + 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0, 0xafc725e0, + 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, + 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, + 0xea752dfe, 0x8b021fa1, 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, + 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705, + 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, + 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e, + 0x226800bb, 0x57b8e0af, 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, + 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9, + 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, + 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f, + 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, + 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a, +} + +var s1 = [256]uint32{ + 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, + 0x9cee60b8, 0x8fedb266, 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, + 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65, + 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, + 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, + 0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, + 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, 0xb03ada37, 0xf0500c0d, + 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, + 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, + 0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, + 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, 0x4e548b38, 0x4f6db908, + 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, + 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, + 0x501adde6, 0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, + 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 0xef1c1847, 0x3215d908, + 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, + 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, + 0x3c11183b, 0x5924a509, 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, + 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa, + 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, + 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, + 0x1939260f, 0x19c27960, 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, + 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5, + 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, + 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, + 0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, + 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca, + 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, + 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, + 0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, + 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, 0xcdb30aeb, 0x532e3054, + 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, + 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, + 0xdb6c4f15, 0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, + 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2, 0x5b8d2646, + 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, + 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, + 0x1dadf43e, 0x233f7061, 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, + 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e, + 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, + 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, + 0x675fda79, 0xe3674340, 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, + 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7, +} + +var s2 = [256]uint32{ + 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, + 0xbcf46b2e, 0xd4a20068, 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, + 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af, + 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, + 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, + 0x0a2c86da, 0xe9b66dfb, 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, + 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec, + 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, + 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, + 0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, + 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, 0x55a867bc, 0xa1159a58, + 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, + 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, + 0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, + 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, 0x257b7834, 0x602a9c60, + 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, + 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, + 0xde720c8c, 0x2da2f728, 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, + 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0x0a476341, 0x992eff74, + 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, + 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, + 0xb5390f92, 0x690fed0b, 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, + 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979, + 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, + 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, + 0x3d25bdd8, 0xe2e1c3c9, 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, + 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086, + 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, + 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, + 0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, + 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84, + 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, + 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, + 0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, + 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, 0xdcb7da83, 0x573906fe, + 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, + 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, + 0x006058aa, 0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, + 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, 0x6f05e409, 0x4b7c0188, + 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, + 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, + 0xa28514d9, 0x6c51133c, 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, + 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0, +} + +var s3 = [256]uint32{ + 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, + 0xd3822740, 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, + 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f, 0xbc946e79, + 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, + 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, + 0x63ef8ce2, 0x9a86ee22, 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, + 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1, + 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, + 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797, + 0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, + 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6, + 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, + 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba, + 0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, + 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, 0x7533d928, 0xb155fdf5, + 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, + 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, + 0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, + 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, 0xb39a460a, 0x6445c0dd, + 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, + 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, + 0x8d6612ae, 0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, + 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08, 0x4eb4e2cc, + 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, + 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, + 0xbb3a792b, 0x344525bd, 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, + 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a, + 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, + 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, + 0x0f91fc71, 0x9b941525, 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, + 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b, + 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, + 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e, + 0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, + 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, 0xf523f357, 0xa6327623, + 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, + 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, + 0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, + 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, 0x53113ec0, 0x1640e3d3, + 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, + 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, + 0x01c36ae4, 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, + 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6, +} + +var p = [18]uint32{ + 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0, + 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, + 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b, +} diff --git a/vendor/golang.org/x/crypto/cast5/cast5.go b/vendor/golang.org/x/crypto/cast5/cast5.go new file mode 100644 index 0000000..ddcbeb6 --- /dev/null +++ b/vendor/golang.org/x/crypto/cast5/cast5.go @@ -0,0 +1,533 @@ +// 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. + +// Package cast5 implements CAST5, as defined in RFC 2144. +// +// CAST5 is a legacy cipher and its short block size makes it vulnerable to +// birthday bound attacks (see https://sweet32.info). It should only be used +// where compatibility with legacy systems, not security, is the goal. +// +// Deprecated: any new system should use AES (from crypto/aes, if necessary in +// an AEAD mode like crypto/cipher.NewGCM) or XChaCha20-Poly1305 (from +// golang.org/x/crypto/chacha20poly1305). +package cast5 // import "golang.org/x/crypto/cast5" + +import "errors" + +const BlockSize = 8 +const KeySize = 16 + +type Cipher struct { + masking [16]uint32 + rotate [16]uint8 +} + +func NewCipher(key []byte) (c *Cipher, err error) { + if len(key) != KeySize { + return nil, errors.New("CAST5: keys must be 16 bytes") + } + + c = new(Cipher) + c.keySchedule(key) + return +} + +func (c *Cipher) BlockSize() int { + return BlockSize +} + +func (c *Cipher) Encrypt(dst, src []byte) { + l := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3]) + r := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7]) + + l, r = r, l^f1(r, c.masking[0], c.rotate[0]) + l, r = r, l^f2(r, c.masking[1], c.rotate[1]) + l, r = r, l^f3(r, c.masking[2], c.rotate[2]) + l, r = r, l^f1(r, c.masking[3], c.rotate[3]) + + l, r = r, l^f2(r, c.masking[4], c.rotate[4]) + l, r = r, l^f3(r, c.masking[5], c.rotate[5]) + l, r = r, l^f1(r, c.masking[6], c.rotate[6]) + l, r = r, l^f2(r, c.masking[7], c.rotate[7]) + + l, r = r, l^f3(r, c.masking[8], c.rotate[8]) + l, r = r, l^f1(r, c.masking[9], c.rotate[9]) + l, r = r, l^f2(r, c.masking[10], c.rotate[10]) + l, r = r, l^f3(r, c.masking[11], c.rotate[11]) + + l, r = r, l^f1(r, c.masking[12], c.rotate[12]) + l, r = r, l^f2(r, c.masking[13], c.rotate[13]) + l, r = r, l^f3(r, c.masking[14], c.rotate[14]) + l, r = r, l^f1(r, c.masking[15], c.rotate[15]) + + dst[0] = uint8(r >> 24) + dst[1] = uint8(r >> 16) + dst[2] = uint8(r >> 8) + dst[3] = uint8(r) + dst[4] = uint8(l >> 24) + dst[5] = uint8(l >> 16) + dst[6] = uint8(l >> 8) + dst[7] = uint8(l) +} + +func (c *Cipher) Decrypt(dst, src []byte) { + l := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3]) + r := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7]) + + l, r = r, l^f1(r, c.masking[15], c.rotate[15]) + l, r = r, l^f3(r, c.masking[14], c.rotate[14]) + l, r = r, l^f2(r, c.masking[13], c.rotate[13]) + l, r = r, l^f1(r, c.masking[12], c.rotate[12]) + + l, r = r, l^f3(r, c.masking[11], c.rotate[11]) + l, r = r, l^f2(r, c.masking[10], c.rotate[10]) + l, r = r, l^f1(r, c.masking[9], c.rotate[9]) + l, r = r, l^f3(r, c.masking[8], c.rotate[8]) + + l, r = r, l^f2(r, c.masking[7], c.rotate[7]) + l, r = r, l^f1(r, c.masking[6], c.rotate[6]) + l, r = r, l^f3(r, c.masking[5], c.rotate[5]) + l, r = r, l^f2(r, c.masking[4], c.rotate[4]) + + l, r = r, l^f1(r, c.masking[3], c.rotate[3]) + l, r = r, l^f3(r, c.masking[2], c.rotate[2]) + l, r = r, l^f2(r, c.masking[1], c.rotate[1]) + l, r = r, l^f1(r, c.masking[0], c.rotate[0]) + + dst[0] = uint8(r >> 24) + dst[1] = uint8(r >> 16) + dst[2] = uint8(r >> 8) + dst[3] = uint8(r) + dst[4] = uint8(l >> 24) + dst[5] = uint8(l >> 16) + dst[6] = uint8(l >> 8) + dst[7] = uint8(l) +} + +type keyScheduleA [4][7]uint8 +type keyScheduleB [4][5]uint8 + +// keyScheduleRound contains the magic values for a round of the key schedule. +// The keyScheduleA deals with the lines like: +// z0z1z2z3 = x0x1x2x3 ^ S5[xD] ^ S6[xF] ^ S7[xC] ^ S8[xE] ^ S7[x8] +// Conceptually, both x and z are in the same array, x first. The first +// element describes which word of this array gets written to and the +// second, which word gets read. So, for the line above, it's "4, 0", because +// it's writing to the first word of z, which, being after x, is word 4, and +// reading from the first word of x: word 0. +// +// Next are the indexes into the S-boxes. Now the array is treated as bytes. So +// "xD" is 0xd. The first byte of z is written as "16 + 0", just to be clear +// that it's z that we're indexing. +// +// keyScheduleB deals with lines like: +// K1 = S5[z8] ^ S6[z9] ^ S7[z7] ^ S8[z6] ^ S5[z2] +// "K1" is ignored because key words are always written in order. So the five +// elements are the S-box indexes. They use the same form as in keyScheduleA, +// above. + +type keyScheduleRound struct{} +type keySchedule []keyScheduleRound + +var schedule = []struct { + a keyScheduleA + b keyScheduleB +}{ + { + keyScheduleA{ + {4, 0, 0xd, 0xf, 0xc, 0xe, 0x8}, + {5, 2, 16 + 0, 16 + 2, 16 + 1, 16 + 3, 0xa}, + {6, 3, 16 + 7, 16 + 6, 16 + 5, 16 + 4, 9}, + {7, 1, 16 + 0xa, 16 + 9, 16 + 0xb, 16 + 8, 0xb}, + }, + keyScheduleB{ + {16 + 8, 16 + 9, 16 + 7, 16 + 6, 16 + 2}, + {16 + 0xa, 16 + 0xb, 16 + 5, 16 + 4, 16 + 6}, + {16 + 0xc, 16 + 0xd, 16 + 3, 16 + 2, 16 + 9}, + {16 + 0xe, 16 + 0xf, 16 + 1, 16 + 0, 16 + 0xc}, + }, + }, + { + keyScheduleA{ + {0, 6, 16 + 5, 16 + 7, 16 + 4, 16 + 6, 16 + 0}, + {1, 4, 0, 2, 1, 3, 16 + 2}, + {2, 5, 7, 6, 5, 4, 16 + 1}, + {3, 7, 0xa, 9, 0xb, 8, 16 + 3}, + }, + keyScheduleB{ + {3, 2, 0xc, 0xd, 8}, + {1, 0, 0xe, 0xf, 0xd}, + {7, 6, 8, 9, 3}, + {5, 4, 0xa, 0xb, 7}, + }, + }, + { + keyScheduleA{ + {4, 0, 0xd, 0xf, 0xc, 0xe, 8}, + {5, 2, 16 + 0, 16 + 2, 16 + 1, 16 + 3, 0xa}, + {6, 3, 16 + 7, 16 + 6, 16 + 5, 16 + 4, 9}, + {7, 1, 16 + 0xa, 16 + 9, 16 + 0xb, 16 + 8, 0xb}, + }, + keyScheduleB{ + {16 + 3, 16 + 2, 16 + 0xc, 16 + 0xd, 16 + 9}, + {16 + 1, 16 + 0, 16 + 0xe, 16 + 0xf, 16 + 0xc}, + {16 + 7, 16 + 6, 16 + 8, 16 + 9, 16 + 2}, + {16 + 5, 16 + 4, 16 + 0xa, 16 + 0xb, 16 + 6}, + }, + }, + { + keyScheduleA{ + {0, 6, 16 + 5, 16 + 7, 16 + 4, 16 + 6, 16 + 0}, + {1, 4, 0, 2, 1, 3, 16 + 2}, + {2, 5, 7, 6, 5, 4, 16 + 1}, + {3, 7, 0xa, 9, 0xb, 8, 16 + 3}, + }, + keyScheduleB{ + {8, 9, 7, 6, 3}, + {0xa, 0xb, 5, 4, 7}, + {0xc, 0xd, 3, 2, 8}, + {0xe, 0xf, 1, 0, 0xd}, + }, + }, +} + +func (c *Cipher) keySchedule(in []byte) { + var t [8]uint32 + var k [32]uint32 + + for i := 0; i < 4; i++ { + j := i * 4 + t[i] = uint32(in[j])<<24 | uint32(in[j+1])<<16 | uint32(in[j+2])<<8 | uint32(in[j+3]) + } + + x := []byte{6, 7, 4, 5} + ki := 0 + + for half := 0; half < 2; half++ { + for _, round := range schedule { + for j := 0; j < 4; j++ { + var a [7]uint8 + copy(a[:], round.a[j][:]) + w := t[a[1]] + w ^= sBox[4][(t[a[2]>>2]>>(24-8*(a[2]&3)))&0xff] + w ^= sBox[5][(t[a[3]>>2]>>(24-8*(a[3]&3)))&0xff] + w ^= sBox[6][(t[a[4]>>2]>>(24-8*(a[4]&3)))&0xff] + w ^= sBox[7][(t[a[5]>>2]>>(24-8*(a[5]&3)))&0xff] + w ^= sBox[x[j]][(t[a[6]>>2]>>(24-8*(a[6]&3)))&0xff] + t[a[0]] = w + } + + for j := 0; j < 4; j++ { + var b [5]uint8 + copy(b[:], round.b[j][:]) + w := sBox[4][(t[b[0]>>2]>>(24-8*(b[0]&3)))&0xff] + w ^= sBox[5][(t[b[1]>>2]>>(24-8*(b[1]&3)))&0xff] + w ^= sBox[6][(t[b[2]>>2]>>(24-8*(b[2]&3)))&0xff] + w ^= sBox[7][(t[b[3]>>2]>>(24-8*(b[3]&3)))&0xff] + w ^= sBox[4+j][(t[b[4]>>2]>>(24-8*(b[4]&3)))&0xff] + k[ki] = w + ki++ + } + } + } + + for i := 0; i < 16; i++ { + c.masking[i] = k[i] + c.rotate[i] = uint8(k[16+i] & 0x1f) + } +} + +// These are the three 'f' functions. See RFC 2144, section 2.2. +func f1(d, m uint32, r uint8) uint32 { + t := m + d + I := (t << r) | (t >> (32 - r)) + return ((sBox[0][I>>24] ^ sBox[1][(I>>16)&0xff]) - sBox[2][(I>>8)&0xff]) + sBox[3][I&0xff] +} + +func f2(d, m uint32, r uint8) uint32 { + t := m ^ d + I := (t << r) | (t >> (32 - r)) + return ((sBox[0][I>>24] - sBox[1][(I>>16)&0xff]) + sBox[2][(I>>8)&0xff]) ^ sBox[3][I&0xff] +} + +func f3(d, m uint32, r uint8) uint32 { + t := m - d + I := (t << r) | (t >> (32 - r)) + return ((sBox[0][I>>24] + sBox[1][(I>>16)&0xff]) ^ sBox[2][(I>>8)&0xff]) - sBox[3][I&0xff] +} + +var sBox = [8][256]uint32{ + { + 0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f, 0x9c004dd3, 0x6003e540, 0xcf9fc949, + 0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, 0x6e63a0e0, 0x15c361d2, 0xc2e7661d, 0x22d4ff8e, + 0x28683b6f, 0xc07fd059, 0xff2379c8, 0x775f50e2, 0x43c340d3, 0xdf2f8656, 0x887ca41a, 0xa2d2bd2d, + 0xa1c9e0d6, 0x346c4819, 0x61b76d87, 0x22540f2f, 0x2abe32e1, 0xaa54166b, 0x22568e3a, 0xa2d341d0, + 0x66db40c8, 0xa784392f, 0x004dff2f, 0x2db9d2de, 0x97943fac, 0x4a97c1d8, 0x527644b7, 0xb5f437a7, + 0xb82cbaef, 0xd751d159, 0x6ff7f0ed, 0x5a097a1f, 0x827b68d0, 0x90ecf52e, 0x22b0c054, 0xbc8e5935, + 0x4b6d2f7f, 0x50bb64a2, 0xd2664910, 0xbee5812d, 0xb7332290, 0xe93b159f, 0xb48ee411, 0x4bff345d, + 0xfd45c240, 0xad31973f, 0xc4f6d02e, 0x55fc8165, 0xd5b1caad, 0xa1ac2dae, 0xa2d4b76d, 0xc19b0c50, + 0x882240f2, 0x0c6e4f38, 0xa4e4bfd7, 0x4f5ba272, 0x564c1d2f, 0xc59c5319, 0xb949e354, 0xb04669fe, + 0xb1b6ab8a, 0xc71358dd, 0x6385c545, 0x110f935d, 0x57538ad5, 0x6a390493, 0xe63d37e0, 0x2a54f6b3, + 0x3a787d5f, 0x6276a0b5, 0x19a6fcdf, 0x7a42206a, 0x29f9d4d5, 0xf61b1891, 0xbb72275e, 0xaa508167, + 0x38901091, 0xc6b505eb, 0x84c7cb8c, 0x2ad75a0f, 0x874a1427, 0xa2d1936b, 0x2ad286af, 0xaa56d291, + 0xd7894360, 0x425c750d, 0x93b39e26, 0x187184c9, 0x6c00b32d, 0x73e2bb14, 0xa0bebc3c, 0x54623779, + 0x64459eab, 0x3f328b82, 0x7718cf82, 0x59a2cea6, 0x04ee002e, 0x89fe78e6, 0x3fab0950, 0x325ff6c2, + 0x81383f05, 0x6963c5c8, 0x76cb5ad6, 0xd49974c9, 0xca180dcf, 0x380782d5, 0xc7fa5cf6, 0x8ac31511, + 0x35e79e13, 0x47da91d0, 0xf40f9086, 0xa7e2419e, 0x31366241, 0x051ef495, 0xaa573b04, 0x4a805d8d, + 0x548300d0, 0x00322a3c, 0xbf64cddf, 0xba57a68e, 0x75c6372b, 0x50afd341, 0xa7c13275, 0x915a0bf5, + 0x6b54bfab, 0x2b0b1426, 0xab4cc9d7, 0x449ccd82, 0xf7fbf265, 0xab85c5f3, 0x1b55db94, 0xaad4e324, + 0xcfa4bd3f, 0x2deaa3e2, 0x9e204d02, 0xc8bd25ac, 0xeadf55b3, 0xd5bd9e98, 0xe31231b2, 0x2ad5ad6c, + 0x954329de, 0xadbe4528, 0xd8710f69, 0xaa51c90f, 0xaa786bf6, 0x22513f1e, 0xaa51a79b, 0x2ad344cc, + 0x7b5a41f0, 0xd37cfbad, 0x1b069505, 0x41ece491, 0xb4c332e6, 0x032268d4, 0xc9600acc, 0xce387e6d, + 0xbf6bb16c, 0x6a70fb78, 0x0d03d9c9, 0xd4df39de, 0xe01063da, 0x4736f464, 0x5ad328d8, 0xb347cc96, + 0x75bb0fc3, 0x98511bfb, 0x4ffbcc35, 0xb58bcf6a, 0xe11f0abc, 0xbfc5fe4a, 0xa70aec10, 0xac39570a, + 0x3f04442f, 0x6188b153, 0xe0397a2e, 0x5727cb79, 0x9ceb418f, 0x1cacd68d, 0x2ad37c96, 0x0175cb9d, + 0xc69dff09, 0xc75b65f0, 0xd9db40d8, 0xec0e7779, 0x4744ead4, 0xb11c3274, 0xdd24cb9e, 0x7e1c54bd, + 0xf01144f9, 0xd2240eb1, 0x9675b3fd, 0xa3ac3755, 0xd47c27af, 0x51c85f4d, 0x56907596, 0xa5bb15e6, + 0x580304f0, 0xca042cf1, 0x011a37ea, 0x8dbfaadb, 0x35ba3e4a, 0x3526ffa0, 0xc37b4d09, 0xbc306ed9, + 0x98a52666, 0x5648f725, 0xff5e569d, 0x0ced63d0, 0x7c63b2cf, 0x700b45e1, 0xd5ea50f1, 0x85a92872, + 0xaf1fbda7, 0xd4234870, 0xa7870bf3, 0x2d3b4d79, 0x42e04198, 0x0cd0ede7, 0x26470db8, 0xf881814c, + 0x474d6ad7, 0x7c0c5e5c, 0xd1231959, 0x381b7298, 0xf5d2f4db, 0xab838653, 0x6e2f1e23, 0x83719c9e, + 0xbd91e046, 0x9a56456e, 0xdc39200c, 0x20c8c571, 0x962bda1c, 0xe1e696ff, 0xb141ab08, 0x7cca89b9, + 0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, 0x427b169c, 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf, + }, + { + 0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a, 0xeec5207a, 0x55889c94, 0x72fc0651, + 0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, 0x99c430ef, 0x5f0c0794, 0x18dcdb7d, 0xa1d6eff3, + 0xa0b52f7b, 0x59e83605, 0xee15b094, 0xe9ffd909, 0xdc440086, 0xef944459, 0xba83ccb3, 0xe0c3cdfb, + 0xd1da4181, 0x3b092ab1, 0xf997f1c1, 0xa5e6cf7b, 0x01420ddb, 0xe4e7ef5b, 0x25a1ff41, 0xe180f806, + 0x1fc41080, 0x179bee7a, 0xd37ac6a9, 0xfe5830a4, 0x98de8b7f, 0x77e83f4e, 0x79929269, 0x24fa9f7b, + 0xe113c85b, 0xacc40083, 0xd7503525, 0xf7ea615f, 0x62143154, 0x0d554b63, 0x5d681121, 0xc866c359, + 0x3d63cf73, 0xcee234c0, 0xd4d87e87, 0x5c672b21, 0x071f6181, 0x39f7627f, 0x361e3084, 0xe4eb573b, + 0x602f64a4, 0xd63acd9c, 0x1bbc4635, 0x9e81032d, 0x2701f50c, 0x99847ab4, 0xa0e3df79, 0xba6cf38c, + 0x10843094, 0x2537a95e, 0xf46f6ffe, 0xa1ff3b1f, 0x208cfb6a, 0x8f458c74, 0xd9e0a227, 0x4ec73a34, + 0xfc884f69, 0x3e4de8df, 0xef0e0088, 0x3559648d, 0x8a45388c, 0x1d804366, 0x721d9bfd, 0xa58684bb, + 0xe8256333, 0x844e8212, 0x128d8098, 0xfed33fb4, 0xce280ae1, 0x27e19ba5, 0xd5a6c252, 0xe49754bd, + 0xc5d655dd, 0xeb667064, 0x77840b4d, 0xa1b6a801, 0x84db26a9, 0xe0b56714, 0x21f043b7, 0xe5d05860, + 0x54f03084, 0x066ff472, 0xa31aa153, 0xdadc4755, 0xb5625dbf, 0x68561be6, 0x83ca6b94, 0x2d6ed23b, + 0xeccf01db, 0xa6d3d0ba, 0xb6803d5c, 0xaf77a709, 0x33b4a34c, 0x397bc8d6, 0x5ee22b95, 0x5f0e5304, + 0x81ed6f61, 0x20e74364, 0xb45e1378, 0xde18639b, 0x881ca122, 0xb96726d1, 0x8049a7e8, 0x22b7da7b, + 0x5e552d25, 0x5272d237, 0x79d2951c, 0xc60d894c, 0x488cb402, 0x1ba4fe5b, 0xa4b09f6b, 0x1ca815cf, + 0xa20c3005, 0x8871df63, 0xb9de2fcb, 0x0cc6c9e9, 0x0beeff53, 0xe3214517, 0xb4542835, 0x9f63293c, + 0xee41e729, 0x6e1d2d7c, 0x50045286, 0x1e6685f3, 0xf33401c6, 0x30a22c95, 0x31a70850, 0x60930f13, + 0x73f98417, 0xa1269859, 0xec645c44, 0x52c877a9, 0xcdff33a6, 0xa02b1741, 0x7cbad9a2, 0x2180036f, + 0x50d99c08, 0xcb3f4861, 0xc26bd765, 0x64a3f6ab, 0x80342676, 0x25a75e7b, 0xe4e6d1fc, 0x20c710e6, + 0xcdf0b680, 0x17844d3b, 0x31eef84d, 0x7e0824e4, 0x2ccb49eb, 0x846a3bae, 0x8ff77888, 0xee5d60f6, + 0x7af75673, 0x2fdd5cdb, 0xa11631c1, 0x30f66f43, 0xb3faec54, 0x157fd7fa, 0xef8579cc, 0xd152de58, + 0xdb2ffd5e, 0x8f32ce19, 0x306af97a, 0x02f03ef8, 0x99319ad5, 0xc242fa0f, 0xa7e3ebb0, 0xc68e4906, + 0xb8da230c, 0x80823028, 0xdcdef3c8, 0xd35fb171, 0x088a1bc8, 0xbec0c560, 0x61a3c9e8, 0xbca8f54d, + 0xc72feffa, 0x22822e99, 0x82c570b4, 0xd8d94e89, 0x8b1c34bc, 0x301e16e6, 0x273be979, 0xb0ffeaa6, + 0x61d9b8c6, 0x00b24869, 0xb7ffce3f, 0x08dc283b, 0x43daf65a, 0xf7e19798, 0x7619b72f, 0x8f1c9ba4, + 0xdc8637a0, 0x16a7d3b1, 0x9fc393b7, 0xa7136eeb, 0xc6bcc63e, 0x1a513742, 0xef6828bc, 0x520365d6, + 0x2d6a77ab, 0x3527ed4b, 0x821fd216, 0x095c6e2e, 0xdb92f2fb, 0x5eea29cb, 0x145892f5, 0x91584f7f, + 0x5483697b, 0x2667a8cc, 0x85196048, 0x8c4bacea, 0x833860d4, 0x0d23e0f9, 0x6c387e8a, 0x0ae6d249, + 0xb284600c, 0xd835731d, 0xdcb1c647, 0xac4c56ea, 0x3ebd81b3, 0x230eabb0, 0x6438bc87, 0xf0b5b1fa, + 0x8f5ea2b3, 0xfc184642, 0x0a036b7a, 0x4fb089bd, 0x649da589, 0xa345415e, 0x5c038323, 0x3e5d3bb9, + 0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, 0x7160a539, 0x73bfbe70, 0x83877605, 0x4523ecf1, + }, + { + 0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff, 0x369fe44b, 0x8c1fc644, 0xaececa90, + 0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, 0x920e8806, 0xf0ad0548, 0xe13c8d83, 0x927010d5, + 0x11107d9f, 0x07647db9, 0xb2e3e4d4, 0x3d4f285e, 0xb9afa820, 0xfade82e0, 0xa067268b, 0x8272792e, + 0x553fb2c0, 0x489ae22b, 0xd4ef9794, 0x125e3fbc, 0x21fffcee, 0x825b1bfd, 0x9255c5ed, 0x1257a240, + 0x4e1a8302, 0xbae07fff, 0x528246e7, 0x8e57140e, 0x3373f7bf, 0x8c9f8188, 0xa6fc4ee8, 0xc982b5a5, + 0xa8c01db7, 0x579fc264, 0x67094f31, 0xf2bd3f5f, 0x40fff7c1, 0x1fb78dfc, 0x8e6bd2c1, 0x437be59b, + 0x99b03dbf, 0xb5dbc64b, 0x638dc0e6, 0x55819d99, 0xa197c81c, 0x4a012d6e, 0xc5884a28, 0xccc36f71, + 0xb843c213, 0x6c0743f1, 0x8309893c, 0x0feddd5f, 0x2f7fe850, 0xd7c07f7e, 0x02507fbf, 0x5afb9a04, + 0xa747d2d0, 0x1651192e, 0xaf70bf3e, 0x58c31380, 0x5f98302e, 0x727cc3c4, 0x0a0fb402, 0x0f7fef82, + 0x8c96fdad, 0x5d2c2aae, 0x8ee99a49, 0x50da88b8, 0x8427f4a0, 0x1eac5790, 0x796fb449, 0x8252dc15, + 0xefbd7d9b, 0xa672597d, 0xada840d8, 0x45f54504, 0xfa5d7403, 0xe83ec305, 0x4f91751a, 0x925669c2, + 0x23efe941, 0xa903f12e, 0x60270df2, 0x0276e4b6, 0x94fd6574, 0x927985b2, 0x8276dbcb, 0x02778176, + 0xf8af918d, 0x4e48f79e, 0x8f616ddf, 0xe29d840e, 0x842f7d83, 0x340ce5c8, 0x96bbb682, 0x93b4b148, + 0xef303cab, 0x984faf28, 0x779faf9b, 0x92dc560d, 0x224d1e20, 0x8437aa88, 0x7d29dc96, 0x2756d3dc, + 0x8b907cee, 0xb51fd240, 0xe7c07ce3, 0xe566b4a1, 0xc3e9615e, 0x3cf8209d, 0x6094d1e3, 0xcd9ca341, + 0x5c76460e, 0x00ea983b, 0xd4d67881, 0xfd47572c, 0xf76cedd9, 0xbda8229c, 0x127dadaa, 0x438a074e, + 0x1f97c090, 0x081bdb8a, 0x93a07ebe, 0xb938ca15, 0x97b03cff, 0x3dc2c0f8, 0x8d1ab2ec, 0x64380e51, + 0x68cc7bfb, 0xd90f2788, 0x12490181, 0x5de5ffd4, 0xdd7ef86a, 0x76a2e214, 0xb9a40368, 0x925d958f, + 0x4b39fffa, 0xba39aee9, 0xa4ffd30b, 0xfaf7933b, 0x6d498623, 0x193cbcfa, 0x27627545, 0x825cf47a, + 0x61bd8ba0, 0xd11e42d1, 0xcead04f4, 0x127ea392, 0x10428db7, 0x8272a972, 0x9270c4a8, 0x127de50b, + 0x285ba1c8, 0x3c62f44f, 0x35c0eaa5, 0xe805d231, 0x428929fb, 0xb4fcdf82, 0x4fb66a53, 0x0e7dc15b, + 0x1f081fab, 0x108618ae, 0xfcfd086d, 0xf9ff2889, 0x694bcc11, 0x236a5cae, 0x12deca4d, 0x2c3f8cc5, + 0xd2d02dfe, 0xf8ef5896, 0xe4cf52da, 0x95155b67, 0x494a488c, 0xb9b6a80c, 0x5c8f82bc, 0x89d36b45, + 0x3a609437, 0xec00c9a9, 0x44715253, 0x0a874b49, 0xd773bc40, 0x7c34671c, 0x02717ef6, 0x4feb5536, + 0xa2d02fff, 0xd2bf60c4, 0xd43f03c0, 0x50b4ef6d, 0x07478cd1, 0x006e1888, 0xa2e53f55, 0xb9e6d4bc, + 0xa2048016, 0x97573833, 0xd7207d67, 0xde0f8f3d, 0x72f87b33, 0xabcc4f33, 0x7688c55d, 0x7b00a6b0, + 0x947b0001, 0x570075d2, 0xf9bb88f8, 0x8942019e, 0x4264a5ff, 0x856302e0, 0x72dbd92b, 0xee971b69, + 0x6ea22fde, 0x5f08ae2b, 0xaf7a616d, 0xe5c98767, 0xcf1febd2, 0x61efc8c2, 0xf1ac2571, 0xcc8239c2, + 0x67214cb8, 0xb1e583d1, 0xb7dc3e62, 0x7f10bdce, 0xf90a5c38, 0x0ff0443d, 0x606e6dc6, 0x60543a49, + 0x5727c148, 0x2be98a1d, 0x8ab41738, 0x20e1be24, 0xaf96da0f, 0x68458425, 0x99833be5, 0x600d457d, + 0x282f9350, 0x8334b362, 0xd91d1120, 0x2b6d8da0, 0x642b1e31, 0x9c305a00, 0x52bce688, 0x1b03588a, + 0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, 0xdfef4636, 0xa133c501, 0xe9d3531c, 0xee353783, + }, + { + 0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb, 0x64ad8c57, 0x85510443, 0xfa020ed1, + 0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, 0xfd059d43, 0x6497b7b1, 0xf3641f63, 0x241e4adf, + 0x28147f5f, 0x4fa2b8cd, 0xc9430040, 0x0cc32220, 0xfdd30b30, 0xc0a5374f, 0x1d2d00d9, 0x24147b15, + 0xee4d111a, 0x0fca5167, 0x71ff904c, 0x2d195ffe, 0x1a05645f, 0x0c13fefe, 0x081b08ca, 0x05170121, + 0x80530100, 0xe83e5efe, 0xac9af4f8, 0x7fe72701, 0xd2b8ee5f, 0x06df4261, 0xbb9e9b8a, 0x7293ea25, + 0xce84ffdf, 0xf5718801, 0x3dd64b04, 0xa26f263b, 0x7ed48400, 0x547eebe6, 0x446d4ca0, 0x6cf3d6f5, + 0x2649abdf, 0xaea0c7f5, 0x36338cc1, 0x503f7e93, 0xd3772061, 0x11b638e1, 0x72500e03, 0xf80eb2bb, + 0xabe0502e, 0xec8d77de, 0x57971e81, 0xe14f6746, 0xc9335400, 0x6920318f, 0x081dbb99, 0xffc304a5, + 0x4d351805, 0x7f3d5ce3, 0xa6c866c6, 0x5d5bcca9, 0xdaec6fea, 0x9f926f91, 0x9f46222f, 0x3991467d, + 0xa5bf6d8e, 0x1143c44f, 0x43958302, 0xd0214eeb, 0x022083b8, 0x3fb6180c, 0x18f8931e, 0x281658e6, + 0x26486e3e, 0x8bd78a70, 0x7477e4c1, 0xb506e07c, 0xf32d0a25, 0x79098b02, 0xe4eabb81, 0x28123b23, + 0x69dead38, 0x1574ca16, 0xdf871b62, 0x211c40b7, 0xa51a9ef9, 0x0014377b, 0x041e8ac8, 0x09114003, + 0xbd59e4d2, 0xe3d156d5, 0x4fe876d5, 0x2f91a340, 0x557be8de, 0x00eae4a7, 0x0ce5c2ec, 0x4db4bba6, + 0xe756bdff, 0xdd3369ac, 0xec17b035, 0x06572327, 0x99afc8b0, 0x56c8c391, 0x6b65811c, 0x5e146119, + 0x6e85cb75, 0xbe07c002, 0xc2325577, 0x893ff4ec, 0x5bbfc92d, 0xd0ec3b25, 0xb7801ab7, 0x8d6d3b24, + 0x20c763ef, 0xc366a5fc, 0x9c382880, 0x0ace3205, 0xaac9548a, 0xeca1d7c7, 0x041afa32, 0x1d16625a, + 0x6701902c, 0x9b757a54, 0x31d477f7, 0x9126b031, 0x36cc6fdb, 0xc70b8b46, 0xd9e66a48, 0x56e55a79, + 0x026a4ceb, 0x52437eff, 0x2f8f76b4, 0x0df980a5, 0x8674cde3, 0xedda04eb, 0x17a9be04, 0x2c18f4df, + 0xb7747f9d, 0xab2af7b4, 0xefc34d20, 0x2e096b7c, 0x1741a254, 0xe5b6a035, 0x213d42f6, 0x2c1c7c26, + 0x61c2f50f, 0x6552daf9, 0xd2c231f8, 0x25130f69, 0xd8167fa2, 0x0418f2c8, 0x001a96a6, 0x0d1526ab, + 0x63315c21, 0x5e0a72ec, 0x49bafefd, 0x187908d9, 0x8d0dbd86, 0x311170a7, 0x3e9b640c, 0xcc3e10d7, + 0xd5cad3b6, 0x0caec388, 0xf73001e1, 0x6c728aff, 0x71eae2a1, 0x1f9af36e, 0xcfcbd12f, 0xc1de8417, + 0xac07be6b, 0xcb44a1d8, 0x8b9b0f56, 0x013988c3, 0xb1c52fca, 0xb4be31cd, 0xd8782806, 0x12a3a4e2, + 0x6f7de532, 0x58fd7eb6, 0xd01ee900, 0x24adffc2, 0xf4990fc5, 0x9711aac5, 0x001d7b95, 0x82e5e7d2, + 0x109873f6, 0x00613096, 0xc32d9521, 0xada121ff, 0x29908415, 0x7fbb977f, 0xaf9eb3db, 0x29c9ed2a, + 0x5ce2a465, 0xa730f32c, 0xd0aa3fe8, 0x8a5cc091, 0xd49e2ce7, 0x0ce454a9, 0xd60acd86, 0x015f1919, + 0x77079103, 0xdea03af6, 0x78a8565e, 0xdee356df, 0x21f05cbe, 0x8b75e387, 0xb3c50651, 0xb8a5c3ef, + 0xd8eeb6d2, 0xe523be77, 0xc2154529, 0x2f69efdf, 0xafe67afb, 0xf470c4b2, 0xf3e0eb5b, 0xd6cc9876, + 0x39e4460c, 0x1fda8538, 0x1987832f, 0xca007367, 0xa99144f8, 0x296b299e, 0x492fc295, 0x9266beab, + 0xb5676e69, 0x9bd3ddda, 0xdf7e052f, 0xdb25701c, 0x1b5e51ee, 0xf65324e6, 0x6afce36c, 0x0316cc04, + 0x8644213e, 0xb7dc59d0, 0x7965291f, 0xccd6fd43, 0x41823979, 0x932bcdf6, 0xb657c34d, 0x4edfd282, + 0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2, + }, + { + 0x7ec90c04, 0x2c6e74b9, 0x9b0e66df, 0xa6337911, 0xb86a7fff, 0x1dd358f5, 0x44dd9d44, 0x1731167f, + 0x08fbf1fa, 0xe7f511cc, 0xd2051b00, 0x735aba00, 0x2ab722d8, 0x386381cb, 0xacf6243a, 0x69befd7a, + 0xe6a2e77f, 0xf0c720cd, 0xc4494816, 0xccf5c180, 0x38851640, 0x15b0a848, 0xe68b18cb, 0x4caadeff, + 0x5f480a01, 0x0412b2aa, 0x259814fc, 0x41d0efe2, 0x4e40b48d, 0x248eb6fb, 0x8dba1cfe, 0x41a99b02, + 0x1a550a04, 0xba8f65cb, 0x7251f4e7, 0x95a51725, 0xc106ecd7, 0x97a5980a, 0xc539b9aa, 0x4d79fe6a, + 0xf2f3f763, 0x68af8040, 0xed0c9e56, 0x11b4958b, 0xe1eb5a88, 0x8709e6b0, 0xd7e07156, 0x4e29fea7, + 0x6366e52d, 0x02d1c000, 0xc4ac8e05, 0x9377f571, 0x0c05372a, 0x578535f2, 0x2261be02, 0xd642a0c9, + 0xdf13a280, 0x74b55bd2, 0x682199c0, 0xd421e5ec, 0x53fb3ce8, 0xc8adedb3, 0x28a87fc9, 0x3d959981, + 0x5c1ff900, 0xfe38d399, 0x0c4eff0b, 0x062407ea, 0xaa2f4fb1, 0x4fb96976, 0x90c79505, 0xb0a8a774, + 0xef55a1ff, 0xe59ca2c2, 0xa6b62d27, 0xe66a4263, 0xdf65001f, 0x0ec50966, 0xdfdd55bc, 0x29de0655, + 0x911e739a, 0x17af8975, 0x32c7911c, 0x89f89468, 0x0d01e980, 0x524755f4, 0x03b63cc9, 0x0cc844b2, + 0xbcf3f0aa, 0x87ac36e9, 0xe53a7426, 0x01b3d82b, 0x1a9e7449, 0x64ee2d7e, 0xcddbb1da, 0x01c94910, + 0xb868bf80, 0x0d26f3fd, 0x9342ede7, 0x04a5c284, 0x636737b6, 0x50f5b616, 0xf24766e3, 0x8eca36c1, + 0x136e05db, 0xfef18391, 0xfb887a37, 0xd6e7f7d4, 0xc7fb7dc9, 0x3063fcdf, 0xb6f589de, 0xec2941da, + 0x26e46695, 0xb7566419, 0xf654efc5, 0xd08d58b7, 0x48925401, 0xc1bacb7f, 0xe5ff550f, 0xb6083049, + 0x5bb5d0e8, 0x87d72e5a, 0xab6a6ee1, 0x223a66ce, 0xc62bf3cd, 0x9e0885f9, 0x68cb3e47, 0x086c010f, + 0xa21de820, 0xd18b69de, 0xf3f65777, 0xfa02c3f6, 0x407edac3, 0xcbb3d550, 0x1793084d, 0xb0d70eba, + 0x0ab378d5, 0xd951fb0c, 0xded7da56, 0x4124bbe4, 0x94ca0b56, 0x0f5755d1, 0xe0e1e56e, 0x6184b5be, + 0x580a249f, 0x94f74bc0, 0xe327888e, 0x9f7b5561, 0xc3dc0280, 0x05687715, 0x646c6bd7, 0x44904db3, + 0x66b4f0a3, 0xc0f1648a, 0x697ed5af, 0x49e92ff6, 0x309e374f, 0x2cb6356a, 0x85808573, 0x4991f840, + 0x76f0ae02, 0x083be84d, 0x28421c9a, 0x44489406, 0x736e4cb8, 0xc1092910, 0x8bc95fc6, 0x7d869cf4, + 0x134f616f, 0x2e77118d, 0xb31b2be1, 0xaa90b472, 0x3ca5d717, 0x7d161bba, 0x9cad9010, 0xaf462ba2, + 0x9fe459d2, 0x45d34559, 0xd9f2da13, 0xdbc65487, 0xf3e4f94e, 0x176d486f, 0x097c13ea, 0x631da5c7, + 0x445f7382, 0x175683f4, 0xcdc66a97, 0x70be0288, 0xb3cdcf72, 0x6e5dd2f3, 0x20936079, 0x459b80a5, + 0xbe60e2db, 0xa9c23101, 0xeba5315c, 0x224e42f2, 0x1c5c1572, 0xf6721b2c, 0x1ad2fff3, 0x8c25404e, + 0x324ed72f, 0x4067b7fd, 0x0523138e, 0x5ca3bc78, 0xdc0fd66e, 0x75922283, 0x784d6b17, 0x58ebb16e, + 0x44094f85, 0x3f481d87, 0xfcfeae7b, 0x77b5ff76, 0x8c2302bf, 0xaaf47556, 0x5f46b02a, 0x2b092801, + 0x3d38f5f7, 0x0ca81f36, 0x52af4a8a, 0x66d5e7c0, 0xdf3b0874, 0x95055110, 0x1b5ad7a8, 0xf61ed5ad, + 0x6cf6e479, 0x20758184, 0xd0cefa65, 0x88f7be58, 0x4a046826, 0x0ff6f8f3, 0xa09c7f70, 0x5346aba0, + 0x5ce96c28, 0xe176eda3, 0x6bac307f, 0x376829d2, 0x85360fa9, 0x17e3fe2a, 0x24b79767, 0xf5a96b20, + 0xd6cd2595, 0x68ff1ebf, 0x7555442c, 0xf19f06be, 0xf9e0659a, 0xeeb9491d, 0x34010718, 0xbb30cab8, + 0xe822fe15, 0x88570983, 0x750e6249, 0xda627e55, 0x5e76ffa8, 0xb1534546, 0x6d47de08, 0xefe9e7d4, + }, + { + 0xf6fa8f9d, 0x2cac6ce1, 0x4ca34867, 0xe2337f7c, 0x95db08e7, 0x016843b4, 0xeced5cbc, 0x325553ac, + 0xbf9f0960, 0xdfa1e2ed, 0x83f0579d, 0x63ed86b9, 0x1ab6a6b8, 0xde5ebe39, 0xf38ff732, 0x8989b138, + 0x33f14961, 0xc01937bd, 0xf506c6da, 0xe4625e7e, 0xa308ea99, 0x4e23e33c, 0x79cbd7cc, 0x48a14367, + 0xa3149619, 0xfec94bd5, 0xa114174a, 0xeaa01866, 0xa084db2d, 0x09a8486f, 0xa888614a, 0x2900af98, + 0x01665991, 0xe1992863, 0xc8f30c60, 0x2e78ef3c, 0xd0d51932, 0xcf0fec14, 0xf7ca07d2, 0xd0a82072, + 0xfd41197e, 0x9305a6b0, 0xe86be3da, 0x74bed3cd, 0x372da53c, 0x4c7f4448, 0xdab5d440, 0x6dba0ec3, + 0x083919a7, 0x9fbaeed9, 0x49dbcfb0, 0x4e670c53, 0x5c3d9c01, 0x64bdb941, 0x2c0e636a, 0xba7dd9cd, + 0xea6f7388, 0xe70bc762, 0x35f29adb, 0x5c4cdd8d, 0xf0d48d8c, 0xb88153e2, 0x08a19866, 0x1ae2eac8, + 0x284caf89, 0xaa928223, 0x9334be53, 0x3b3a21bf, 0x16434be3, 0x9aea3906, 0xefe8c36e, 0xf890cdd9, + 0x80226dae, 0xc340a4a3, 0xdf7e9c09, 0xa694a807, 0x5b7c5ecc, 0x221db3a6, 0x9a69a02f, 0x68818a54, + 0xceb2296f, 0x53c0843a, 0xfe893655, 0x25bfe68a, 0xb4628abc, 0xcf222ebf, 0x25ac6f48, 0xa9a99387, + 0x53bddb65, 0xe76ffbe7, 0xe967fd78, 0x0ba93563, 0x8e342bc1, 0xe8a11be9, 0x4980740d, 0xc8087dfc, + 0x8de4bf99, 0xa11101a0, 0x7fd37975, 0xda5a26c0, 0xe81f994f, 0x9528cd89, 0xfd339fed, 0xb87834bf, + 0x5f04456d, 0x22258698, 0xc9c4c83b, 0x2dc156be, 0x4f628daa, 0x57f55ec5, 0xe2220abe, 0xd2916ebf, + 0x4ec75b95, 0x24f2c3c0, 0x42d15d99, 0xcd0d7fa0, 0x7b6e27ff, 0xa8dc8af0, 0x7345c106, 0xf41e232f, + 0x35162386, 0xe6ea8926, 0x3333b094, 0x157ec6f2, 0x372b74af, 0x692573e4, 0xe9a9d848, 0xf3160289, + 0x3a62ef1d, 0xa787e238, 0xf3a5f676, 0x74364853, 0x20951063, 0x4576698d, 0xb6fad407, 0x592af950, + 0x36f73523, 0x4cfb6e87, 0x7da4cec0, 0x6c152daa, 0xcb0396a8, 0xc50dfe5d, 0xfcd707ab, 0x0921c42f, + 0x89dff0bb, 0x5fe2be78, 0x448f4f33, 0x754613c9, 0x2b05d08d, 0x48b9d585, 0xdc049441, 0xc8098f9b, + 0x7dede786, 0xc39a3373, 0x42410005, 0x6a091751, 0x0ef3c8a6, 0x890072d6, 0x28207682, 0xa9a9f7be, + 0xbf32679d, 0xd45b5b75, 0xb353fd00, 0xcbb0e358, 0x830f220a, 0x1f8fb214, 0xd372cf08, 0xcc3c4a13, + 0x8cf63166, 0x061c87be, 0x88c98f88, 0x6062e397, 0x47cf8e7a, 0xb6c85283, 0x3cc2acfb, 0x3fc06976, + 0x4e8f0252, 0x64d8314d, 0xda3870e3, 0x1e665459, 0xc10908f0, 0x513021a5, 0x6c5b68b7, 0x822f8aa0, + 0x3007cd3e, 0x74719eef, 0xdc872681, 0x073340d4, 0x7e432fd9, 0x0c5ec241, 0x8809286c, 0xf592d891, + 0x08a930f6, 0x957ef305, 0xb7fbffbd, 0xc266e96f, 0x6fe4ac98, 0xb173ecc0, 0xbc60b42a, 0x953498da, + 0xfba1ae12, 0x2d4bd736, 0x0f25faab, 0xa4f3fceb, 0xe2969123, 0x257f0c3d, 0x9348af49, 0x361400bc, + 0xe8816f4a, 0x3814f200, 0xa3f94043, 0x9c7a54c2, 0xbc704f57, 0xda41e7f9, 0xc25ad33a, 0x54f4a084, + 0xb17f5505, 0x59357cbe, 0xedbd15c8, 0x7f97c5ab, 0xba5ac7b5, 0xb6f6deaf, 0x3a479c3a, 0x5302da25, + 0x653d7e6a, 0x54268d49, 0x51a477ea, 0x5017d55b, 0xd7d25d88, 0x44136c76, 0x0404a8c8, 0xb8e5a121, + 0xb81a928a, 0x60ed5869, 0x97c55b96, 0xeaec991b, 0x29935913, 0x01fdb7f1, 0x088e8dfa, 0x9ab6f6f5, + 0x3b4cbf9f, 0x4a5de3ab, 0xe6051d35, 0xa0e1d855, 0xd36b4cf1, 0xf544edeb, 0xb0e93524, 0xbebb8fbd, + 0xa2d762cf, 0x49c92f54, 0x38b5f331, 0x7128a454, 0x48392905, 0xa65b1db8, 0x851c97bd, 0xd675cf2f, + }, + { + 0x85e04019, 0x332bf567, 0x662dbfff, 0xcfc65693, 0x2a8d7f6f, 0xab9bc912, 0xde6008a1, 0x2028da1f, + 0x0227bce7, 0x4d642916, 0x18fac300, 0x50f18b82, 0x2cb2cb11, 0xb232e75c, 0x4b3695f2, 0xb28707de, + 0xa05fbcf6, 0xcd4181e9, 0xe150210c, 0xe24ef1bd, 0xb168c381, 0xfde4e789, 0x5c79b0d8, 0x1e8bfd43, + 0x4d495001, 0x38be4341, 0x913cee1d, 0x92a79c3f, 0x089766be, 0xbaeeadf4, 0x1286becf, 0xb6eacb19, + 0x2660c200, 0x7565bde4, 0x64241f7a, 0x8248dca9, 0xc3b3ad66, 0x28136086, 0x0bd8dfa8, 0x356d1cf2, + 0x107789be, 0xb3b2e9ce, 0x0502aa8f, 0x0bc0351e, 0x166bf52a, 0xeb12ff82, 0xe3486911, 0xd34d7516, + 0x4e7b3aff, 0x5f43671b, 0x9cf6e037, 0x4981ac83, 0x334266ce, 0x8c9341b7, 0xd0d854c0, 0xcb3a6c88, + 0x47bc2829, 0x4725ba37, 0xa66ad22b, 0x7ad61f1e, 0x0c5cbafa, 0x4437f107, 0xb6e79962, 0x42d2d816, + 0x0a961288, 0xe1a5c06e, 0x13749e67, 0x72fc081a, 0xb1d139f7, 0xf9583745, 0xcf19df58, 0xbec3f756, + 0xc06eba30, 0x07211b24, 0x45c28829, 0xc95e317f, 0xbc8ec511, 0x38bc46e9, 0xc6e6fa14, 0xbae8584a, + 0xad4ebc46, 0x468f508b, 0x7829435f, 0xf124183b, 0x821dba9f, 0xaff60ff4, 0xea2c4e6d, 0x16e39264, + 0x92544a8b, 0x009b4fc3, 0xaba68ced, 0x9ac96f78, 0x06a5b79a, 0xb2856e6e, 0x1aec3ca9, 0xbe838688, + 0x0e0804e9, 0x55f1be56, 0xe7e5363b, 0xb3a1f25d, 0xf7debb85, 0x61fe033c, 0x16746233, 0x3c034c28, + 0xda6d0c74, 0x79aac56c, 0x3ce4e1ad, 0x51f0c802, 0x98f8f35a, 0x1626a49f, 0xeed82b29, 0x1d382fe3, + 0x0c4fb99a, 0xbb325778, 0x3ec6d97b, 0x6e77a6a9, 0xcb658b5c, 0xd45230c7, 0x2bd1408b, 0x60c03eb7, + 0xb9068d78, 0xa33754f4, 0xf430c87d, 0xc8a71302, 0xb96d8c32, 0xebd4e7be, 0xbe8b9d2d, 0x7979fb06, + 0xe7225308, 0x8b75cf77, 0x11ef8da4, 0xe083c858, 0x8d6b786f, 0x5a6317a6, 0xfa5cf7a0, 0x5dda0033, + 0xf28ebfb0, 0xf5b9c310, 0xa0eac280, 0x08b9767a, 0xa3d9d2b0, 0x79d34217, 0x021a718d, 0x9ac6336a, + 0x2711fd60, 0x438050e3, 0x069908a8, 0x3d7fedc4, 0x826d2bef, 0x4eeb8476, 0x488dcf25, 0x36c9d566, + 0x28e74e41, 0xc2610aca, 0x3d49a9cf, 0xbae3b9df, 0xb65f8de6, 0x92aeaf64, 0x3ac7d5e6, 0x9ea80509, + 0xf22b017d, 0xa4173f70, 0xdd1e16c3, 0x15e0d7f9, 0x50b1b887, 0x2b9f4fd5, 0x625aba82, 0x6a017962, + 0x2ec01b9c, 0x15488aa9, 0xd716e740, 0x40055a2c, 0x93d29a22, 0xe32dbf9a, 0x058745b9, 0x3453dc1e, + 0xd699296e, 0x496cff6f, 0x1c9f4986, 0xdfe2ed07, 0xb87242d1, 0x19de7eae, 0x053e561a, 0x15ad6f8c, + 0x66626c1c, 0x7154c24c, 0xea082b2a, 0x93eb2939, 0x17dcb0f0, 0x58d4f2ae, 0x9ea294fb, 0x52cf564c, + 0x9883fe66, 0x2ec40581, 0x763953c3, 0x01d6692e, 0xd3a0c108, 0xa1e7160e, 0xe4f2dfa6, 0x693ed285, + 0x74904698, 0x4c2b0edd, 0x4f757656, 0x5d393378, 0xa132234f, 0x3d321c5d, 0xc3f5e194, 0x4b269301, + 0xc79f022f, 0x3c997e7e, 0x5e4f9504, 0x3ffafbbd, 0x76f7ad0e, 0x296693f4, 0x3d1fce6f, 0xc61e45be, + 0xd3b5ab34, 0xf72bf9b7, 0x1b0434c0, 0x4e72b567, 0x5592a33d, 0xb5229301, 0xcfd2a87f, 0x60aeb767, + 0x1814386b, 0x30bcc33d, 0x38a0c07d, 0xfd1606f2, 0xc363519b, 0x589dd390, 0x5479f8e6, 0x1cb8d647, + 0x97fd61a9, 0xea7759f4, 0x2d57539d, 0x569a58cf, 0xe84e63ad, 0x462e1b78, 0x6580f87e, 0xf3817914, + 0x91da55f4, 0x40a230f3, 0xd1988f35, 0xb6e318d2, 0x3ffa50bc, 0x3d40f021, 0xc3c0bdae, 0x4958c24c, + 0x518f36b2, 0x84b1d370, 0x0fedce83, 0x878ddada, 0xf2a279c7, 0x94e01be8, 0x90716f4b, 0x954b8aa3, + }, + { + 0xe216300d, 0xbbddfffc, 0xa7ebdabd, 0x35648095, 0x7789f8b7, 0xe6c1121b, 0x0e241600, 0x052ce8b5, + 0x11a9cfb0, 0xe5952f11, 0xece7990a, 0x9386d174, 0x2a42931c, 0x76e38111, 0xb12def3a, 0x37ddddfc, + 0xde9adeb1, 0x0a0cc32c, 0xbe197029, 0x84a00940, 0xbb243a0f, 0xb4d137cf, 0xb44e79f0, 0x049eedfd, + 0x0b15a15d, 0x480d3168, 0x8bbbde5a, 0x669ded42, 0xc7ece831, 0x3f8f95e7, 0x72df191b, 0x7580330d, + 0x94074251, 0x5c7dcdfa, 0xabbe6d63, 0xaa402164, 0xb301d40a, 0x02e7d1ca, 0x53571dae, 0x7a3182a2, + 0x12a8ddec, 0xfdaa335d, 0x176f43e8, 0x71fb46d4, 0x38129022, 0xce949ad4, 0xb84769ad, 0x965bd862, + 0x82f3d055, 0x66fb9767, 0x15b80b4e, 0x1d5b47a0, 0x4cfde06f, 0xc28ec4b8, 0x57e8726e, 0x647a78fc, + 0x99865d44, 0x608bd593, 0x6c200e03, 0x39dc5ff6, 0x5d0b00a3, 0xae63aff2, 0x7e8bd632, 0x70108c0c, + 0xbbd35049, 0x2998df04, 0x980cf42a, 0x9b6df491, 0x9e7edd53, 0x06918548, 0x58cb7e07, 0x3b74ef2e, + 0x522fffb1, 0xd24708cc, 0x1c7e27cd, 0xa4eb215b, 0x3cf1d2e2, 0x19b47a38, 0x424f7618, 0x35856039, + 0x9d17dee7, 0x27eb35e6, 0xc9aff67b, 0x36baf5b8, 0x09c467cd, 0xc18910b1, 0xe11dbf7b, 0x06cd1af8, + 0x7170c608, 0x2d5e3354, 0xd4de495a, 0x64c6d006, 0xbcc0c62c, 0x3dd00db3, 0x708f8f34, 0x77d51b42, + 0x264f620f, 0x24b8d2bf, 0x15c1b79e, 0x46a52564, 0xf8d7e54e, 0x3e378160, 0x7895cda5, 0x859c15a5, + 0xe6459788, 0xc37bc75f, 0xdb07ba0c, 0x0676a3ab, 0x7f229b1e, 0x31842e7b, 0x24259fd7, 0xf8bef472, + 0x835ffcb8, 0x6df4c1f2, 0x96f5b195, 0xfd0af0fc, 0xb0fe134c, 0xe2506d3d, 0x4f9b12ea, 0xf215f225, + 0xa223736f, 0x9fb4c428, 0x25d04979, 0x34c713f8, 0xc4618187, 0xea7a6e98, 0x7cd16efc, 0x1436876c, + 0xf1544107, 0xbedeee14, 0x56e9af27, 0xa04aa441, 0x3cf7c899, 0x92ecbae6, 0xdd67016d, 0x151682eb, + 0xa842eedf, 0xfdba60b4, 0xf1907b75, 0x20e3030f, 0x24d8c29e, 0xe139673b, 0xefa63fb8, 0x71873054, + 0xb6f2cf3b, 0x9f326442, 0xcb15a4cc, 0xb01a4504, 0xf1e47d8d, 0x844a1be5, 0xbae7dfdc, 0x42cbda70, + 0xcd7dae0a, 0x57e85b7a, 0xd53f5af6, 0x20cf4d8c, 0xcea4d428, 0x79d130a4, 0x3486ebfb, 0x33d3cddc, + 0x77853b53, 0x37effcb5, 0xc5068778, 0xe580b3e6, 0x4e68b8f4, 0xc5c8b37e, 0x0d809ea2, 0x398feb7c, + 0x132a4f94, 0x43b7950e, 0x2fee7d1c, 0x223613bd, 0xdd06caa2, 0x37df932b, 0xc4248289, 0xacf3ebc3, + 0x5715f6b7, 0xef3478dd, 0xf267616f, 0xc148cbe4, 0x9052815e, 0x5e410fab, 0xb48a2465, 0x2eda7fa4, + 0xe87b40e4, 0xe98ea084, 0x5889e9e1, 0xefd390fc, 0xdd07d35b, 0xdb485694, 0x38d7e5b2, 0x57720101, + 0x730edebc, 0x5b643113, 0x94917e4f, 0x503c2fba, 0x646f1282, 0x7523d24a, 0xe0779695, 0xf9c17a8f, + 0x7a5b2121, 0xd187b896, 0x29263a4d, 0xba510cdf, 0x81f47c9f, 0xad1163ed, 0xea7b5965, 0x1a00726e, + 0x11403092, 0x00da6d77, 0x4a0cdd61, 0xad1f4603, 0x605bdfb0, 0x9eedc364, 0x22ebe6a8, 0xcee7d28a, + 0xa0e736a0, 0x5564a6b9, 0x10853209, 0xc7eb8f37, 0x2de705ca, 0x8951570f, 0xdf09822b, 0xbd691a6c, + 0xaa12e4f2, 0x87451c0f, 0xe0f6a27a, 0x3ada4819, 0x4cf1764f, 0x0d771c2b, 0x67cdb156, 0x350d8384, + 0x5938fa0f, 0x42399ef3, 0x36997b07, 0x0e84093d, 0x4aa93e61, 0x8360d87b, 0x1fa98b0c, 0x1149382c, + 0xe97625a5, 0x0614d1b7, 0x0e25244b, 0x0c768347, 0x589e8d82, 0x0d2059d1, 0xa466bb1e, 0xf8da0a82, + 0x04f19130, 0xba6e4ec0, 0x99265164, 0x1ee7230d, 0x50b2ad80, 0xeaee6801, 0x8db2a283, 0xea8bf59e, + }, +} diff --git a/vendor/golang.org/x/crypto/internal/subtle/aliasing.go b/vendor/golang.org/x/crypto/internal/subtle/aliasing.go new file mode 100644 index 0000000..4fad24f --- /dev/null +++ b/vendor/golang.org/x/crypto/internal/subtle/aliasing.go @@ -0,0 +1,33 @@ +// 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 +// +build !purego + +// Package subtle implements functions that are often useful in cryptographic +// code but require careful thought to use correctly. +package subtle // import "golang.org/x/crypto/internal/subtle" + +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/subtle/aliasing_purego.go b/vendor/golang.org/x/crypto/internal/subtle/aliasing_purego.go new file mode 100644 index 0000000..80ccbed --- /dev/null +++ b/vendor/golang.org/x/crypto/internal/subtle/aliasing_purego.go @@ -0,0 +1,36 @@ +// 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 +// +build purego + +// Package subtle implements functions that are often useful in cryptographic +// code but require careful thought to use correctly. +package subtle // import "golang.org/x/crypto/internal/subtle" + +// 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/pbkdf2/pbkdf2.go b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go new file mode 100644 index 0000000..593f653 --- /dev/null +++ b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.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 pbkdf2 implements the key derivation function PBKDF2 as defined in RFC +2898 / PKCS #5 v2.0. + +A key derivation function is useful when encrypting data based on a password +or any other not-fully-random data. It uses a pseudorandom function to derive +a secure encryption key based on the password. + +While v2.0 of the standard defines only one pseudorandom function to use, +HMAC-SHA1, the drafted v2.1 specification allows use of all five FIPS Approved +Hash Functions SHA-1, SHA-224, SHA-256, SHA-384 and SHA-512 for HMAC. To +choose, you can pass the `New` functions from the different SHA packages to +pbkdf2.Key. +*/ +package pbkdf2 // import "golang.org/x/crypto/pbkdf2" + +import ( + "crypto/hmac" + "hash" +) + +// Key derives a key from the password, salt and iteration count, returning a +// []byte of length keylen that can be used as cryptographic key. The key is +// derived based on the method described as PBKDF2 with the HMAC variant using +// the supplied hash function. +// +// For example, to use a HMAC-SHA-1 based PBKDF2 key derivation function, you +// can get a derived key for e.g. AES-256 (which needs a 32-byte key) by +// doing: +// +// dk := pbkdf2.Key([]byte("some password"), salt, 4096, 32, sha1.New) +// +// Remember to get a good random salt. At least 8 bytes is recommended by the +// RFC. +// +// Using a higher iteration count will increase the cost of an exhaustive +// search but will also make derivation proportionally slower. +func Key(password, salt []byte, iter, keyLen int, h func() hash.Hash) []byte { + prf := hmac.New(h, password) + hashLen := prf.Size() + numBlocks := (keyLen + hashLen - 1) / hashLen + + var buf [4]byte + dk := make([]byte, 0, numBlocks*hashLen) + U := make([]byte, hashLen) + for block := 1; block <= numBlocks; block++ { + // N.B.: || means concatenation, ^ means XOR + // for each block T_i = U_1 ^ U_2 ^ ... ^ U_iter + // U_1 = PRF(password, salt || uint(i)) + prf.Reset() + prf.Write(salt) + buf[0] = byte(block >> 24) + buf[1] = byte(block >> 16) + buf[2] = byte(block >> 8) + buf[3] = byte(block) + prf.Write(buf[:4]) + dk = prf.Sum(dk) + T := dk[len(dk)-hashLen:] + copy(U, T) + + // U_n = PRF(password, U_(n-1)) + for n := 2; n <= iter; n++ { + prf.Reset() + prf.Write(U) + U = U[:0] + U = prf.Sum(U) + for x := range U { + T[x] ^= U[x] + } + } + } + return dk[:keyLen] +} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/hsalsa20.go b/vendor/golang.org/x/crypto/salsa20/salsa/hsalsa20.go new file mode 100644 index 0000000..4c96147 --- /dev/null +++ b/vendor/golang.org/x/crypto/salsa20/salsa/hsalsa20.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 salsa provides low-level access to functions in the Salsa family. +package salsa // import "golang.org/x/crypto/salsa20/salsa" + +// Sigma is the Salsa20 constant for 256-bit keys. +var Sigma = [16]byte{'e', 'x', 'p', 'a', 'n', 'd', ' ', '3', '2', '-', 'b', 'y', 't', 'e', ' ', 'k'} + +// HSalsa20 applies the HSalsa20 core function to a 16-byte input in, 32-byte +// key k, and 16-byte constant c, and puts the result into the 32-byte array +// out. +func HSalsa20(out *[32]byte, in *[16]byte, k *[32]byte, c *[16]byte) { + x0 := uint32(c[0]) | uint32(c[1])<<8 | uint32(c[2])<<16 | uint32(c[3])<<24 + x1 := uint32(k[0]) | uint32(k[1])<<8 | uint32(k[2])<<16 | uint32(k[3])<<24 + x2 := uint32(k[4]) | uint32(k[5])<<8 | uint32(k[6])<<16 | uint32(k[7])<<24 + x3 := uint32(k[8]) | uint32(k[9])<<8 | uint32(k[10])<<16 | uint32(k[11])<<24 + x4 := uint32(k[12]) | uint32(k[13])<<8 | uint32(k[14])<<16 | uint32(k[15])<<24 + x5 := uint32(c[4]) | uint32(c[5])<<8 | uint32(c[6])<<16 | uint32(c[7])<<24 + x6 := uint32(in[0]) | uint32(in[1])<<8 | uint32(in[2])<<16 | uint32(in[3])<<24 + x7 := uint32(in[4]) | uint32(in[5])<<8 | uint32(in[6])<<16 | uint32(in[7])<<24 + x8 := uint32(in[8]) | uint32(in[9])<<8 | uint32(in[10])<<16 | uint32(in[11])<<24 + x9 := uint32(in[12]) | uint32(in[13])<<8 | uint32(in[14])<<16 | uint32(in[15])<<24 + x10 := uint32(c[8]) | uint32(c[9])<<8 | uint32(c[10])<<16 | uint32(c[11])<<24 + x11 := uint32(k[16]) | uint32(k[17])<<8 | uint32(k[18])<<16 | uint32(k[19])<<24 + x12 := uint32(k[20]) | uint32(k[21])<<8 | uint32(k[22])<<16 | uint32(k[23])<<24 + x13 := uint32(k[24]) | uint32(k[25])<<8 | uint32(k[26])<<16 | uint32(k[27])<<24 + x14 := uint32(k[28]) | uint32(k[29])<<8 | uint32(k[30])<<16 | uint32(k[31])<<24 + x15 := uint32(c[12]) | uint32(c[13])<<8 | uint32(c[14])<<16 | uint32(c[15])<<24 + + for i := 0; i < 20; i += 2 { + u := x0 + x12 + x4 ^= u<<7 | u>>(32-7) + u = x4 + x0 + x8 ^= u<<9 | u>>(32-9) + u = x8 + x4 + x12 ^= u<<13 | u>>(32-13) + u = x12 + x8 + x0 ^= u<<18 | u>>(32-18) + + u = x5 + x1 + x9 ^= u<<7 | u>>(32-7) + u = x9 + x5 + x13 ^= u<<9 | u>>(32-9) + u = x13 + x9 + x1 ^= u<<13 | u>>(32-13) + u = x1 + x13 + x5 ^= u<<18 | u>>(32-18) + + u = x10 + x6 + x14 ^= u<<7 | u>>(32-7) + u = x14 + x10 + x2 ^= u<<9 | u>>(32-9) + u = x2 + x14 + x6 ^= u<<13 | u>>(32-13) + u = x6 + x2 + x10 ^= u<<18 | u>>(32-18) + + u = x15 + x11 + x3 ^= u<<7 | u>>(32-7) + u = x3 + x15 + x7 ^= u<<9 | u>>(32-9) + u = x7 + x3 + x11 ^= u<<13 | u>>(32-13) + u = x11 + x7 + x15 ^= u<<18 | u>>(32-18) + + u = x0 + x3 + x1 ^= u<<7 | u>>(32-7) + u = x1 + x0 + x2 ^= u<<9 | u>>(32-9) + u = x2 + x1 + x3 ^= u<<13 | u>>(32-13) + u = x3 + x2 + x0 ^= u<<18 | u>>(32-18) + + u = x5 + x4 + x6 ^= u<<7 | u>>(32-7) + u = x6 + x5 + x7 ^= u<<9 | u>>(32-9) + u = x7 + x6 + x4 ^= u<<13 | u>>(32-13) + u = x4 + x7 + x5 ^= u<<18 | u>>(32-18) + + u = x10 + x9 + x11 ^= u<<7 | u>>(32-7) + u = x11 + x10 + x8 ^= u<<9 | u>>(32-9) + u = x8 + x11 + x9 ^= u<<13 | u>>(32-13) + u = x9 + x8 + x10 ^= u<<18 | u>>(32-18) + + u = x15 + x14 + x12 ^= u<<7 | u>>(32-7) + u = x12 + x15 + x13 ^= u<<9 | u>>(32-9) + u = x13 + x12 + x14 ^= u<<13 | u>>(32-13) + u = x14 + x13 + x15 ^= u<<18 | u>>(32-18) + } + out[0] = byte(x0) + out[1] = byte(x0 >> 8) + out[2] = byte(x0 >> 16) + out[3] = byte(x0 >> 24) + + out[4] = byte(x5) + out[5] = byte(x5 >> 8) + out[6] = byte(x5 >> 16) + out[7] = byte(x5 >> 24) + + out[8] = byte(x10) + out[9] = byte(x10 >> 8) + out[10] = byte(x10 >> 16) + out[11] = byte(x10 >> 24) + + out[12] = byte(x15) + out[13] = byte(x15 >> 8) + out[14] = byte(x15 >> 16) + out[15] = byte(x15 >> 24) + + out[16] = byte(x6) + out[17] = byte(x6 >> 8) + out[18] = byte(x6 >> 16) + out[19] = byte(x6 >> 24) + + out[20] = byte(x7) + out[21] = byte(x7 >> 8) + out[22] = byte(x7 >> 16) + out[23] = byte(x7 >> 24) + + out[24] = byte(x8) + out[25] = byte(x8 >> 8) + out[26] = byte(x8 >> 16) + out[27] = byte(x8 >> 24) + + out[28] = byte(x9) + out[29] = byte(x9 >> 8) + out[30] = byte(x9 >> 16) + out[31] = byte(x9 >> 24) +} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/salsa208.go b/vendor/golang.org/x/crypto/salsa20/salsa/salsa208.go new file mode 100644 index 0000000..9bfc092 --- /dev/null +++ b/vendor/golang.org/x/crypto/salsa20/salsa/salsa208.go @@ -0,0 +1,199 @@ +// 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 salsa + +// Core208 applies the Salsa20/8 core function to the 64-byte array in and puts +// the result into the 64-byte array out. The input and output may be the same array. +func Core208(out *[64]byte, in *[64]byte) { + j0 := uint32(in[0]) | uint32(in[1])<<8 | uint32(in[2])<<16 | uint32(in[3])<<24 + j1 := uint32(in[4]) | uint32(in[5])<<8 | uint32(in[6])<<16 | uint32(in[7])<<24 + j2 := uint32(in[8]) | uint32(in[9])<<8 | uint32(in[10])<<16 | uint32(in[11])<<24 + j3 := uint32(in[12]) | uint32(in[13])<<8 | uint32(in[14])<<16 | uint32(in[15])<<24 + j4 := uint32(in[16]) | uint32(in[17])<<8 | uint32(in[18])<<16 | uint32(in[19])<<24 + j5 := uint32(in[20]) | uint32(in[21])<<8 | uint32(in[22])<<16 | uint32(in[23])<<24 + j6 := uint32(in[24]) | uint32(in[25])<<8 | uint32(in[26])<<16 | uint32(in[27])<<24 + j7 := uint32(in[28]) | uint32(in[29])<<8 | uint32(in[30])<<16 | uint32(in[31])<<24 + j8 := uint32(in[32]) | uint32(in[33])<<8 | uint32(in[34])<<16 | uint32(in[35])<<24 + j9 := uint32(in[36]) | uint32(in[37])<<8 | uint32(in[38])<<16 | uint32(in[39])<<24 + j10 := uint32(in[40]) | uint32(in[41])<<8 | uint32(in[42])<<16 | uint32(in[43])<<24 + j11 := uint32(in[44]) | uint32(in[45])<<8 | uint32(in[46])<<16 | uint32(in[47])<<24 + j12 := uint32(in[48]) | uint32(in[49])<<8 | uint32(in[50])<<16 | uint32(in[51])<<24 + j13 := uint32(in[52]) | uint32(in[53])<<8 | uint32(in[54])<<16 | uint32(in[55])<<24 + j14 := uint32(in[56]) | uint32(in[57])<<8 | uint32(in[58])<<16 | uint32(in[59])<<24 + j15 := uint32(in[60]) | uint32(in[61])<<8 | uint32(in[62])<<16 | uint32(in[63])<<24 + + x0, x1, x2, x3, x4, x5, x6, x7, x8 := j0, j1, j2, j3, j4, j5, j6, j7, j8 + x9, x10, x11, x12, x13, x14, x15 := j9, j10, j11, j12, j13, j14, j15 + + for i := 0; i < 8; i += 2 { + u := x0 + x12 + x4 ^= u<<7 | u>>(32-7) + u = x4 + x0 + x8 ^= u<<9 | u>>(32-9) + u = x8 + x4 + x12 ^= u<<13 | u>>(32-13) + u = x12 + x8 + x0 ^= u<<18 | u>>(32-18) + + u = x5 + x1 + x9 ^= u<<7 | u>>(32-7) + u = x9 + x5 + x13 ^= u<<9 | u>>(32-9) + u = x13 + x9 + x1 ^= u<<13 | u>>(32-13) + u = x1 + x13 + x5 ^= u<<18 | u>>(32-18) + + u = x10 + x6 + x14 ^= u<<7 | u>>(32-7) + u = x14 + x10 + x2 ^= u<<9 | u>>(32-9) + u = x2 + x14 + x6 ^= u<<13 | u>>(32-13) + u = x6 + x2 + x10 ^= u<<18 | u>>(32-18) + + u = x15 + x11 + x3 ^= u<<7 | u>>(32-7) + u = x3 + x15 + x7 ^= u<<9 | u>>(32-9) + u = x7 + x3 + x11 ^= u<<13 | u>>(32-13) + u = x11 + x7 + x15 ^= u<<18 | u>>(32-18) + + u = x0 + x3 + x1 ^= u<<7 | u>>(32-7) + u = x1 + x0 + x2 ^= u<<9 | u>>(32-9) + u = x2 + x1 + x3 ^= u<<13 | u>>(32-13) + u = x3 + x2 + x0 ^= u<<18 | u>>(32-18) + + u = x5 + x4 + x6 ^= u<<7 | u>>(32-7) + u = x6 + x5 + x7 ^= u<<9 | u>>(32-9) + u = x7 + x6 + x4 ^= u<<13 | u>>(32-13) + u = x4 + x7 + x5 ^= u<<18 | u>>(32-18) + + u = x10 + x9 + x11 ^= u<<7 | u>>(32-7) + u = x11 + x10 + x8 ^= u<<9 | u>>(32-9) + u = x8 + x11 + x9 ^= u<<13 | u>>(32-13) + u = x9 + x8 + x10 ^= u<<18 | u>>(32-18) + + u = x15 + x14 + x12 ^= u<<7 | u>>(32-7) + u = x12 + x15 + x13 ^= u<<9 | u>>(32-9) + u = x13 + x12 + x14 ^= u<<13 | u>>(32-13) + u = x14 + x13 + x15 ^= u<<18 | u>>(32-18) + } + x0 += j0 + x1 += j1 + x2 += j2 + x3 += j3 + x4 += j4 + x5 += j5 + x6 += j6 + x7 += j7 + x8 += j8 + x9 += j9 + x10 += j10 + x11 += j11 + x12 += j12 + x13 += j13 + x14 += j14 + x15 += j15 + + out[0] = byte(x0) + out[1] = byte(x0 >> 8) + out[2] = byte(x0 >> 16) + out[3] = byte(x0 >> 24) + + out[4] = byte(x1) + out[5] = byte(x1 >> 8) + out[6] = byte(x1 >> 16) + out[7] = byte(x1 >> 24) + + out[8] = byte(x2) + out[9] = byte(x2 >> 8) + out[10] = byte(x2 >> 16) + out[11] = byte(x2 >> 24) + + out[12] = byte(x3) + out[13] = byte(x3 >> 8) + out[14] = byte(x3 >> 16) + out[15] = byte(x3 >> 24) + + out[16] = byte(x4) + out[17] = byte(x4 >> 8) + out[18] = byte(x4 >> 16) + out[19] = byte(x4 >> 24) + + out[20] = byte(x5) + out[21] = byte(x5 >> 8) + out[22] = byte(x5 >> 16) + out[23] = byte(x5 >> 24) + + out[24] = byte(x6) + out[25] = byte(x6 >> 8) + out[26] = byte(x6 >> 16) + out[27] = byte(x6 >> 24) + + out[28] = byte(x7) + out[29] = byte(x7 >> 8) + out[30] = byte(x7 >> 16) + out[31] = byte(x7 >> 24) + + out[32] = byte(x8) + out[33] = byte(x8 >> 8) + out[34] = byte(x8 >> 16) + out[35] = byte(x8 >> 24) + + out[36] = byte(x9) + out[37] = byte(x9 >> 8) + out[38] = byte(x9 >> 16) + out[39] = byte(x9 >> 24) + + out[40] = byte(x10) + out[41] = byte(x10 >> 8) + out[42] = byte(x10 >> 16) + out[43] = byte(x10 >> 24) + + out[44] = byte(x11) + out[45] = byte(x11 >> 8) + out[46] = byte(x11 >> 16) + out[47] = byte(x11 >> 24) + + out[48] = byte(x12) + out[49] = byte(x12 >> 8) + out[50] = byte(x12 >> 16) + out[51] = byte(x12 >> 24) + + out[52] = byte(x13) + out[53] = byte(x13 >> 8) + out[54] = byte(x13 >> 16) + out[55] = byte(x13 >> 24) + + out[56] = byte(x14) + out[57] = byte(x14 >> 8) + out[58] = byte(x14 >> 16) + out[59] = byte(x14 >> 24) + + out[60] = byte(x15) + out[61] = byte(x15 >> 8) + out[62] = byte(x15 >> 16) + out[63] = byte(x15 >> 24) +} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.go b/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.go new file mode 100644 index 0000000..c400dfc --- /dev/null +++ b/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.go @@ -0,0 +1,24 @@ +// 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 amd64 && !purego && gc +// +build amd64,!purego,gc + +package salsa + +//go:noescape + +// salsa2020XORKeyStream is implemented in salsa20_amd64.s. +func salsa2020XORKeyStream(out, in *byte, n uint64, nonce, key *byte) + +// XORKeyStream crypts bytes from in to out using the given key and counters. +// In and out must overlap entirely or not at all. Counter +// contains the raw salsa20 counter bytes (both nonce and block counter). +func XORKeyStream(out, in []byte, counter *[16]byte, key *[32]byte) { + if len(in) == 0 { + return + } + _ = out[len(in)-1] + salsa2020XORKeyStream(&out[0], &in[0], uint64(len(in)), &counter[0], &key[0]) +} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.s b/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.s new file mode 100644 index 0000000..c089277 --- /dev/null +++ b/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.s @@ -0,0 +1,881 @@ +// 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 amd64 && !purego && gc +// +build amd64,!purego,gc + +// This code was translated into a form compatible with 6a from the public +// domain sources in SUPERCOP: https://bench.cr.yp.to/supercop.html + +// func salsa2020XORKeyStream(out, in *byte, n uint64, nonce, key *byte) +// This needs up to 64 bytes at 360(R12); hence the non-obvious frame size. +TEXT ·salsa2020XORKeyStream(SB),0,$456-40 // frame = 424 + 32 byte alignment + MOVQ out+0(FP),DI + MOVQ in+8(FP),SI + MOVQ n+16(FP),DX + MOVQ nonce+24(FP),CX + MOVQ key+32(FP),R8 + + MOVQ SP,R12 + ADDQ $31, R12 + ANDQ $~31, R12 + + MOVQ DX,R9 + MOVQ CX,DX + MOVQ R8,R10 + CMPQ R9,$0 + JBE DONE + START: + MOVL 20(R10),CX + MOVL 0(R10),R8 + MOVL 0(DX),AX + MOVL 16(R10),R11 + MOVL CX,0(R12) + MOVL R8, 4 (R12) + MOVL AX, 8 (R12) + MOVL R11, 12 (R12) + MOVL 8(DX),CX + MOVL 24(R10),R8 + MOVL 4(R10),AX + MOVL 4(DX),R11 + MOVL CX,16(R12) + MOVL R8, 20 (R12) + MOVL AX, 24 (R12) + MOVL R11, 28 (R12) + MOVL 12(DX),CX + MOVL 12(R10),DX + MOVL 28(R10),R8 + MOVL 8(R10),AX + MOVL DX,32(R12) + MOVL CX, 36 (R12) + MOVL R8, 40 (R12) + MOVL AX, 44 (R12) + MOVQ $1634760805,DX + MOVQ $857760878,CX + MOVQ $2036477234,R8 + MOVQ $1797285236,AX + MOVL DX,48(R12) + MOVL CX, 52 (R12) + MOVL R8, 56 (R12) + MOVL AX, 60 (R12) + CMPQ R9,$256 + JB BYTESBETWEEN1AND255 + MOVOA 48(R12),X0 + PSHUFL $0X55,X0,X1 + PSHUFL $0XAA,X0,X2 + PSHUFL $0XFF,X0,X3 + PSHUFL $0X00,X0,X0 + MOVOA X1,64(R12) + MOVOA X2,80(R12) + MOVOA X3,96(R12) + MOVOA X0,112(R12) + MOVOA 0(R12),X0 + PSHUFL $0XAA,X0,X1 + PSHUFL $0XFF,X0,X2 + PSHUFL $0X00,X0,X3 + PSHUFL $0X55,X0,X0 + MOVOA X1,128(R12) + MOVOA X2,144(R12) + MOVOA X3,160(R12) + MOVOA X0,176(R12) + MOVOA 16(R12),X0 + PSHUFL $0XFF,X0,X1 + PSHUFL $0X55,X0,X2 + PSHUFL $0XAA,X0,X0 + MOVOA X1,192(R12) + MOVOA X2,208(R12) + MOVOA X0,224(R12) + MOVOA 32(R12),X0 + PSHUFL $0X00,X0,X1 + PSHUFL $0XAA,X0,X2 + PSHUFL $0XFF,X0,X0 + MOVOA X1,240(R12) + MOVOA X2,256(R12) + MOVOA X0,272(R12) + BYTESATLEAST256: + MOVL 16(R12),DX + MOVL 36 (R12),CX + MOVL DX,288(R12) + MOVL CX,304(R12) + SHLQ $32,CX + ADDQ CX,DX + ADDQ $1,DX + MOVQ DX,CX + SHRQ $32,CX + MOVL DX, 292 (R12) + MOVL CX, 308 (R12) + ADDQ $1,DX + MOVQ DX,CX + SHRQ $32,CX + MOVL DX, 296 (R12) + MOVL CX, 312 (R12) + ADDQ $1,DX + MOVQ DX,CX + SHRQ $32,CX + MOVL DX, 300 (R12) + MOVL CX, 316 (R12) + ADDQ $1,DX + MOVQ DX,CX + SHRQ $32,CX + MOVL DX,16(R12) + MOVL CX, 36 (R12) + MOVQ R9,352(R12) + MOVQ $20,DX + MOVOA 64(R12),X0 + MOVOA 80(R12),X1 + MOVOA 96(R12),X2 + MOVOA 256(R12),X3 + MOVOA 272(R12),X4 + MOVOA 128(R12),X5 + MOVOA 144(R12),X6 + MOVOA 176(R12),X7 + MOVOA 192(R12),X8 + MOVOA 208(R12),X9 + MOVOA 224(R12),X10 + MOVOA 304(R12),X11 + MOVOA 112(R12),X12 + MOVOA 160(R12),X13 + MOVOA 240(R12),X14 + MOVOA 288(R12),X15 + MAINLOOP1: + MOVOA X1,320(R12) + MOVOA X2,336(R12) + MOVOA X13,X1 + PADDL X12,X1 + MOVOA X1,X2 + PSLLL $7,X1 + PXOR X1,X14 + PSRLL $25,X2 + PXOR X2,X14 + MOVOA X7,X1 + PADDL X0,X1 + MOVOA X1,X2 + PSLLL $7,X1 + PXOR X1,X11 + PSRLL $25,X2 + PXOR X2,X11 + MOVOA X12,X1 + PADDL X14,X1 + MOVOA X1,X2 + PSLLL $9,X1 + PXOR X1,X15 + PSRLL $23,X2 + PXOR X2,X15 + MOVOA X0,X1 + PADDL X11,X1 + MOVOA X1,X2 + PSLLL $9,X1 + PXOR X1,X9 + PSRLL $23,X2 + PXOR X2,X9 + MOVOA X14,X1 + PADDL X15,X1 + MOVOA X1,X2 + PSLLL $13,X1 + PXOR X1,X13 + PSRLL $19,X2 + PXOR X2,X13 + MOVOA X11,X1 + PADDL X9,X1 + MOVOA X1,X2 + PSLLL $13,X1 + PXOR X1,X7 + PSRLL $19,X2 + PXOR X2,X7 + MOVOA X15,X1 + PADDL X13,X1 + MOVOA X1,X2 + PSLLL $18,X1 + PXOR X1,X12 + PSRLL $14,X2 + PXOR X2,X12 + MOVOA 320(R12),X1 + MOVOA X12,320(R12) + MOVOA X9,X2 + PADDL X7,X2 + MOVOA X2,X12 + PSLLL $18,X2 + PXOR X2,X0 + PSRLL $14,X12 + PXOR X12,X0 + MOVOA X5,X2 + PADDL X1,X2 + MOVOA X2,X12 + PSLLL $7,X2 + PXOR X2,X3 + PSRLL $25,X12 + PXOR X12,X3 + MOVOA 336(R12),X2 + MOVOA X0,336(R12) + MOVOA X6,X0 + PADDL X2,X0 + MOVOA X0,X12 + PSLLL $7,X0 + PXOR X0,X4 + PSRLL $25,X12 + PXOR X12,X4 + MOVOA X1,X0 + PADDL X3,X0 + MOVOA X0,X12 + PSLLL $9,X0 + PXOR X0,X10 + PSRLL $23,X12 + PXOR X12,X10 + MOVOA X2,X0 + PADDL X4,X0 + MOVOA X0,X12 + PSLLL $9,X0 + PXOR X0,X8 + PSRLL $23,X12 + PXOR X12,X8 + MOVOA X3,X0 + PADDL X10,X0 + MOVOA X0,X12 + PSLLL $13,X0 + PXOR X0,X5 + PSRLL $19,X12 + PXOR X12,X5 + MOVOA X4,X0 + PADDL X8,X0 + MOVOA X0,X12 + PSLLL $13,X0 + PXOR X0,X6 + PSRLL $19,X12 + PXOR X12,X6 + MOVOA X10,X0 + PADDL X5,X0 + MOVOA X0,X12 + PSLLL $18,X0 + PXOR X0,X1 + PSRLL $14,X12 + PXOR X12,X1 + MOVOA 320(R12),X0 + MOVOA X1,320(R12) + MOVOA X4,X1 + PADDL X0,X1 + MOVOA X1,X12 + PSLLL $7,X1 + PXOR X1,X7 + PSRLL $25,X12 + PXOR X12,X7 + MOVOA X8,X1 + PADDL X6,X1 + MOVOA X1,X12 + PSLLL $18,X1 + PXOR X1,X2 + PSRLL $14,X12 + PXOR X12,X2 + MOVOA 336(R12),X12 + MOVOA X2,336(R12) + MOVOA X14,X1 + PADDL X12,X1 + MOVOA X1,X2 + PSLLL $7,X1 + PXOR X1,X5 + PSRLL $25,X2 + PXOR X2,X5 + MOVOA X0,X1 + PADDL X7,X1 + MOVOA X1,X2 + PSLLL $9,X1 + PXOR X1,X10 + PSRLL $23,X2 + PXOR X2,X10 + MOVOA X12,X1 + PADDL X5,X1 + MOVOA X1,X2 + PSLLL $9,X1 + PXOR X1,X8 + PSRLL $23,X2 + PXOR X2,X8 + MOVOA X7,X1 + PADDL X10,X1 + MOVOA X1,X2 + PSLLL $13,X1 + PXOR X1,X4 + PSRLL $19,X2 + PXOR X2,X4 + MOVOA X5,X1 + PADDL X8,X1 + MOVOA X1,X2 + PSLLL $13,X1 + PXOR X1,X14 + PSRLL $19,X2 + PXOR X2,X14 + MOVOA X10,X1 + PADDL X4,X1 + MOVOA X1,X2 + PSLLL $18,X1 + PXOR X1,X0 + PSRLL $14,X2 + PXOR X2,X0 + MOVOA 320(R12),X1 + MOVOA X0,320(R12) + MOVOA X8,X0 + PADDL X14,X0 + MOVOA X0,X2 + PSLLL $18,X0 + PXOR X0,X12 + PSRLL $14,X2 + PXOR X2,X12 + MOVOA X11,X0 + PADDL X1,X0 + MOVOA X0,X2 + PSLLL $7,X0 + PXOR X0,X6 + PSRLL $25,X2 + PXOR X2,X6 + MOVOA 336(R12),X2 + MOVOA X12,336(R12) + MOVOA X3,X0 + PADDL X2,X0 + MOVOA X0,X12 + PSLLL $7,X0 + PXOR X0,X13 + PSRLL $25,X12 + PXOR X12,X13 + MOVOA X1,X0 + PADDL X6,X0 + MOVOA X0,X12 + PSLLL $9,X0 + PXOR X0,X15 + PSRLL $23,X12 + PXOR X12,X15 + MOVOA X2,X0 + PADDL X13,X0 + MOVOA X0,X12 + PSLLL $9,X0 + PXOR X0,X9 + PSRLL $23,X12 + PXOR X12,X9 + MOVOA X6,X0 + PADDL X15,X0 + MOVOA X0,X12 + PSLLL $13,X0 + PXOR X0,X11 + PSRLL $19,X12 + PXOR X12,X11 + MOVOA X13,X0 + PADDL X9,X0 + MOVOA X0,X12 + PSLLL $13,X0 + PXOR X0,X3 + PSRLL $19,X12 + PXOR X12,X3 + MOVOA X15,X0 + PADDL X11,X0 + MOVOA X0,X12 + PSLLL $18,X0 + PXOR X0,X1 + PSRLL $14,X12 + PXOR X12,X1 + MOVOA X9,X0 + PADDL X3,X0 + MOVOA X0,X12 + PSLLL $18,X0 + PXOR X0,X2 + PSRLL $14,X12 + PXOR X12,X2 + MOVOA 320(R12),X12 + MOVOA 336(R12),X0 + SUBQ $2,DX + JA MAINLOOP1 + PADDL 112(R12),X12 + PADDL 176(R12),X7 + PADDL 224(R12),X10 + PADDL 272(R12),X4 + MOVD X12,DX + MOVD X7,CX + MOVD X10,R8 + MOVD X4,R9 + PSHUFL $0X39,X12,X12 + PSHUFL $0X39,X7,X7 + PSHUFL $0X39,X10,X10 + PSHUFL $0X39,X4,X4 + XORL 0(SI),DX + XORL 4(SI),CX + XORL 8(SI),R8 + XORL 12(SI),R9 + MOVL DX,0(DI) + MOVL CX,4(DI) + MOVL R8,8(DI) + MOVL R9,12(DI) + MOVD X12,DX + MOVD X7,CX + MOVD X10,R8 + MOVD X4,R9 + PSHUFL $0X39,X12,X12 + PSHUFL $0X39,X7,X7 + PSHUFL $0X39,X10,X10 + PSHUFL $0X39,X4,X4 + XORL 64(SI),DX + XORL 68(SI),CX + XORL 72(SI),R8 + XORL 76(SI),R9 + MOVL DX,64(DI) + MOVL CX,68(DI) + MOVL R8,72(DI) + MOVL R9,76(DI) + MOVD X12,DX + MOVD X7,CX + MOVD X10,R8 + MOVD X4,R9 + PSHUFL $0X39,X12,X12 + PSHUFL $0X39,X7,X7 + PSHUFL $0X39,X10,X10 + PSHUFL $0X39,X4,X4 + XORL 128(SI),DX + XORL 132(SI),CX + XORL 136(SI),R8 + XORL 140(SI),R9 + MOVL DX,128(DI) + MOVL CX,132(DI) + MOVL R8,136(DI) + MOVL R9,140(DI) + MOVD X12,DX + MOVD X7,CX + MOVD X10,R8 + MOVD X4,R9 + XORL 192(SI),DX + XORL 196(SI),CX + XORL 200(SI),R8 + XORL 204(SI),R9 + MOVL DX,192(DI) + MOVL CX,196(DI) + MOVL R8,200(DI) + MOVL R9,204(DI) + PADDL 240(R12),X14 + PADDL 64(R12),X0 + PADDL 128(R12),X5 + PADDL 192(R12),X8 + MOVD X14,DX + MOVD X0,CX + MOVD X5,R8 + MOVD X8,R9 + PSHUFL $0X39,X14,X14 + PSHUFL $0X39,X0,X0 + PSHUFL $0X39,X5,X5 + PSHUFL $0X39,X8,X8 + XORL 16(SI),DX + XORL 20(SI),CX + XORL 24(SI),R8 + XORL 28(SI),R9 + MOVL DX,16(DI) + MOVL CX,20(DI) + MOVL R8,24(DI) + MOVL R9,28(DI) + MOVD X14,DX + MOVD X0,CX + MOVD X5,R8 + MOVD X8,R9 + PSHUFL $0X39,X14,X14 + PSHUFL $0X39,X0,X0 + PSHUFL $0X39,X5,X5 + PSHUFL $0X39,X8,X8 + XORL 80(SI),DX + XORL 84(SI),CX + XORL 88(SI),R8 + XORL 92(SI),R9 + MOVL DX,80(DI) + MOVL CX,84(DI) + MOVL R8,88(DI) + MOVL R9,92(DI) + MOVD X14,DX + MOVD X0,CX + MOVD X5,R8 + MOVD X8,R9 + PSHUFL $0X39,X14,X14 + PSHUFL $0X39,X0,X0 + PSHUFL $0X39,X5,X5 + PSHUFL $0X39,X8,X8 + XORL 144(SI),DX + XORL 148(SI),CX + XORL 152(SI),R8 + XORL 156(SI),R9 + MOVL DX,144(DI) + MOVL CX,148(DI) + MOVL R8,152(DI) + MOVL R9,156(DI) + MOVD X14,DX + MOVD X0,CX + MOVD X5,R8 + MOVD X8,R9 + XORL 208(SI),DX + XORL 212(SI),CX + XORL 216(SI),R8 + XORL 220(SI),R9 + MOVL DX,208(DI) + MOVL CX,212(DI) + MOVL R8,216(DI) + MOVL R9,220(DI) + PADDL 288(R12),X15 + PADDL 304(R12),X11 + PADDL 80(R12),X1 + PADDL 144(R12),X6 + MOVD X15,DX + MOVD X11,CX + MOVD X1,R8 + MOVD X6,R9 + PSHUFL $0X39,X15,X15 + PSHUFL $0X39,X11,X11 + PSHUFL $0X39,X1,X1 + PSHUFL $0X39,X6,X6 + XORL 32(SI),DX + XORL 36(SI),CX + XORL 40(SI),R8 + XORL 44(SI),R9 + MOVL DX,32(DI) + MOVL CX,36(DI) + MOVL R8,40(DI) + MOVL R9,44(DI) + MOVD X15,DX + MOVD X11,CX + MOVD X1,R8 + MOVD X6,R9 + PSHUFL $0X39,X15,X15 + PSHUFL $0X39,X11,X11 + PSHUFL $0X39,X1,X1 + PSHUFL $0X39,X6,X6 + XORL 96(SI),DX + XORL 100(SI),CX + XORL 104(SI),R8 + XORL 108(SI),R9 + MOVL DX,96(DI) + MOVL CX,100(DI) + MOVL R8,104(DI) + MOVL R9,108(DI) + MOVD X15,DX + MOVD X11,CX + MOVD X1,R8 + MOVD X6,R9 + PSHUFL $0X39,X15,X15 + PSHUFL $0X39,X11,X11 + PSHUFL $0X39,X1,X1 + PSHUFL $0X39,X6,X6 + XORL 160(SI),DX + XORL 164(SI),CX + XORL 168(SI),R8 + XORL 172(SI),R9 + MOVL DX,160(DI) + MOVL CX,164(DI) + MOVL R8,168(DI) + MOVL R9,172(DI) + MOVD X15,DX + MOVD X11,CX + MOVD X1,R8 + MOVD X6,R9 + XORL 224(SI),DX + XORL 228(SI),CX + XORL 232(SI),R8 + XORL 236(SI),R9 + MOVL DX,224(DI) + MOVL CX,228(DI) + MOVL R8,232(DI) + MOVL R9,236(DI) + PADDL 160(R12),X13 + PADDL 208(R12),X9 + PADDL 256(R12),X3 + PADDL 96(R12),X2 + MOVD X13,DX + MOVD X9,CX + MOVD X3,R8 + MOVD X2,R9 + PSHUFL $0X39,X13,X13 + PSHUFL $0X39,X9,X9 + PSHUFL $0X39,X3,X3 + PSHUFL $0X39,X2,X2 + XORL 48(SI),DX + XORL 52(SI),CX + XORL 56(SI),R8 + XORL 60(SI),R9 + MOVL DX,48(DI) + MOVL CX,52(DI) + MOVL R8,56(DI) + MOVL R9,60(DI) + MOVD X13,DX + MOVD X9,CX + MOVD X3,R8 + MOVD X2,R9 + PSHUFL $0X39,X13,X13 + PSHUFL $0X39,X9,X9 + PSHUFL $0X39,X3,X3 + PSHUFL $0X39,X2,X2 + XORL 112(SI),DX + XORL 116(SI),CX + XORL 120(SI),R8 + XORL 124(SI),R9 + MOVL DX,112(DI) + MOVL CX,116(DI) + MOVL R8,120(DI) + MOVL R9,124(DI) + MOVD X13,DX + MOVD X9,CX + MOVD X3,R8 + MOVD X2,R9 + PSHUFL $0X39,X13,X13 + PSHUFL $0X39,X9,X9 + PSHUFL $0X39,X3,X3 + PSHUFL $0X39,X2,X2 + XORL 176(SI),DX + XORL 180(SI),CX + XORL 184(SI),R8 + XORL 188(SI),R9 + MOVL DX,176(DI) + MOVL CX,180(DI) + MOVL R8,184(DI) + MOVL R9,188(DI) + MOVD X13,DX + MOVD X9,CX + MOVD X3,R8 + MOVD X2,R9 + XORL 240(SI),DX + XORL 244(SI),CX + XORL 248(SI),R8 + XORL 252(SI),R9 + MOVL DX,240(DI) + MOVL CX,244(DI) + MOVL R8,248(DI) + MOVL R9,252(DI) + MOVQ 352(R12),R9 + SUBQ $256,R9 + ADDQ $256,SI + ADDQ $256,DI + CMPQ R9,$256 + JAE BYTESATLEAST256 + CMPQ R9,$0 + JBE DONE + BYTESBETWEEN1AND255: + CMPQ R9,$64 + JAE NOCOPY + MOVQ DI,DX + LEAQ 360(R12),DI + MOVQ R9,CX + REP; MOVSB + LEAQ 360(R12),DI + LEAQ 360(R12),SI + NOCOPY: + MOVQ R9,352(R12) + MOVOA 48(R12),X0 + MOVOA 0(R12),X1 + MOVOA 16(R12),X2 + MOVOA 32(R12),X3 + MOVOA X1,X4 + MOVQ $20,CX + MAINLOOP2: + PADDL X0,X4 + MOVOA X0,X5 + MOVOA X4,X6 + PSLLL $7,X4 + PSRLL $25,X6 + PXOR X4,X3 + PXOR X6,X3 + PADDL X3,X5 + MOVOA X3,X4 + MOVOA X5,X6 + PSLLL $9,X5 + PSRLL $23,X6 + PXOR X5,X2 + PSHUFL $0X93,X3,X3 + PXOR X6,X2 + PADDL X2,X4 + MOVOA X2,X5 + MOVOA X4,X6 + PSLLL $13,X4 + PSRLL $19,X6 + PXOR X4,X1 + PSHUFL $0X4E,X2,X2 + PXOR X6,X1 + PADDL X1,X5 + MOVOA X3,X4 + MOVOA X5,X6 + PSLLL $18,X5 + PSRLL $14,X6 + PXOR X5,X0 + PSHUFL $0X39,X1,X1 + PXOR X6,X0 + PADDL X0,X4 + MOVOA X0,X5 + MOVOA X4,X6 + PSLLL $7,X4 + PSRLL $25,X6 + PXOR X4,X1 + PXOR X6,X1 + PADDL X1,X5 + MOVOA X1,X4 + MOVOA X5,X6 + PSLLL $9,X5 + PSRLL $23,X6 + PXOR X5,X2 + PSHUFL $0X93,X1,X1 + PXOR X6,X2 + PADDL X2,X4 + MOVOA X2,X5 + MOVOA X4,X6 + PSLLL $13,X4 + PSRLL $19,X6 + PXOR X4,X3 + PSHUFL $0X4E,X2,X2 + PXOR X6,X3 + PADDL X3,X5 + MOVOA X1,X4 + MOVOA X5,X6 + PSLLL $18,X5 + PSRLL $14,X6 + PXOR X5,X0 + PSHUFL $0X39,X3,X3 + PXOR X6,X0 + PADDL X0,X4 + MOVOA X0,X5 + MOVOA X4,X6 + PSLLL $7,X4 + PSRLL $25,X6 + PXOR X4,X3 + PXOR X6,X3 + PADDL X3,X5 + MOVOA X3,X4 + MOVOA X5,X6 + PSLLL $9,X5 + PSRLL $23,X6 + PXOR X5,X2 + PSHUFL $0X93,X3,X3 + PXOR X6,X2 + PADDL X2,X4 + MOVOA X2,X5 + MOVOA X4,X6 + PSLLL $13,X4 + PSRLL $19,X6 + PXOR X4,X1 + PSHUFL $0X4E,X2,X2 + PXOR X6,X1 + PADDL X1,X5 + MOVOA X3,X4 + MOVOA X5,X6 + PSLLL $18,X5 + PSRLL $14,X6 + PXOR X5,X0 + PSHUFL $0X39,X1,X1 + PXOR X6,X0 + PADDL X0,X4 + MOVOA X0,X5 + MOVOA X4,X6 + PSLLL $7,X4 + PSRLL $25,X6 + PXOR X4,X1 + PXOR X6,X1 + PADDL X1,X5 + MOVOA X1,X4 + MOVOA X5,X6 + PSLLL $9,X5 + PSRLL $23,X6 + PXOR X5,X2 + PSHUFL $0X93,X1,X1 + PXOR X6,X2 + PADDL X2,X4 + MOVOA X2,X5 + MOVOA X4,X6 + PSLLL $13,X4 + PSRLL $19,X6 + PXOR X4,X3 + PSHUFL $0X4E,X2,X2 + PXOR X6,X3 + SUBQ $4,CX + PADDL X3,X5 + MOVOA X1,X4 + MOVOA X5,X6 + PSLLL $18,X5 + PXOR X7,X7 + PSRLL $14,X6 + PXOR X5,X0 + PSHUFL $0X39,X3,X3 + PXOR X6,X0 + JA MAINLOOP2 + PADDL 48(R12),X0 + PADDL 0(R12),X1 + PADDL 16(R12),X2 + PADDL 32(R12),X3 + MOVD X0,CX + MOVD X1,R8 + MOVD X2,R9 + MOVD X3,AX + PSHUFL $0X39,X0,X0 + PSHUFL $0X39,X1,X1 + PSHUFL $0X39,X2,X2 + PSHUFL $0X39,X3,X3 + XORL 0(SI),CX + XORL 48(SI),R8 + XORL 32(SI),R9 + XORL 16(SI),AX + MOVL CX,0(DI) + MOVL R8,48(DI) + MOVL R9,32(DI) + MOVL AX,16(DI) + MOVD X0,CX + MOVD X1,R8 + MOVD X2,R9 + MOVD X3,AX + PSHUFL $0X39,X0,X0 + PSHUFL $0X39,X1,X1 + PSHUFL $0X39,X2,X2 + PSHUFL $0X39,X3,X3 + XORL 20(SI),CX + XORL 4(SI),R8 + XORL 52(SI),R9 + XORL 36(SI),AX + MOVL CX,20(DI) + MOVL R8,4(DI) + MOVL R9,52(DI) + MOVL AX,36(DI) + MOVD X0,CX + MOVD X1,R8 + MOVD X2,R9 + MOVD X3,AX + PSHUFL $0X39,X0,X0 + PSHUFL $0X39,X1,X1 + PSHUFL $0X39,X2,X2 + PSHUFL $0X39,X3,X3 + XORL 40(SI),CX + XORL 24(SI),R8 + XORL 8(SI),R9 + XORL 56(SI),AX + MOVL CX,40(DI) + MOVL R8,24(DI) + MOVL R9,8(DI) + MOVL AX,56(DI) + MOVD X0,CX + MOVD X1,R8 + MOVD X2,R9 + MOVD X3,AX + XORL 60(SI),CX + XORL 44(SI),R8 + XORL 28(SI),R9 + XORL 12(SI),AX + MOVL CX,60(DI) + MOVL R8,44(DI) + MOVL R9,28(DI) + MOVL AX,12(DI) + MOVQ 352(R12),R9 + MOVL 16(R12),CX + MOVL 36 (R12),R8 + ADDQ $1,CX + SHLQ $32,R8 + ADDQ R8,CX + MOVQ CX,R8 + SHRQ $32,R8 + MOVL CX,16(R12) + MOVL R8, 36 (R12) + CMPQ R9,$64 + JA BYTESATLEAST65 + JAE BYTESATLEAST64 + MOVQ DI,SI + MOVQ DX,DI + MOVQ R9,CX + REP; MOVSB + BYTESATLEAST64: + DONE: + RET + BYTESATLEAST65: + SUBQ $64,R9 + ADDQ $64,DI + ADDQ $64,SI + JMP BYTESBETWEEN1AND255 diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_noasm.go b/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_noasm.go new file mode 100644 index 0000000..4392cc1 --- /dev/null +++ b/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_noasm.go @@ -0,0 +1,15 @@ +// 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 !amd64 || purego || !gc +// +build !amd64 purego !gc + +package salsa + +// XORKeyStream crypts bytes from in to out using the given key and counters. +// In and out must overlap entirely or not at all. Counter +// contains the raw salsa20 counter bytes (both nonce and block counter). +func XORKeyStream(out, in []byte, counter *[16]byte, key *[32]byte) { + genericXORKeyStream(out, in, counter, key) +} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_ref.go b/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_ref.go new file mode 100644 index 0000000..68169c6 --- /dev/null +++ b/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_ref.go @@ -0,0 +1,231 @@ +// 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 salsa + +const rounds = 20 + +// core applies the Salsa20 core function to 16-byte input in, 32-byte key k, +// and 16-byte constant c, and puts the result into 64-byte array out. +func core(out *[64]byte, in *[16]byte, k *[32]byte, c *[16]byte) { + j0 := uint32(c[0]) | uint32(c[1])<<8 | uint32(c[2])<<16 | uint32(c[3])<<24 + j1 := uint32(k[0]) | uint32(k[1])<<8 | uint32(k[2])<<16 | uint32(k[3])<<24 + j2 := uint32(k[4]) | uint32(k[5])<<8 | uint32(k[6])<<16 | uint32(k[7])<<24 + j3 := uint32(k[8]) | uint32(k[9])<<8 | uint32(k[10])<<16 | uint32(k[11])<<24 + j4 := uint32(k[12]) | uint32(k[13])<<8 | uint32(k[14])<<16 | uint32(k[15])<<24 + j5 := uint32(c[4]) | uint32(c[5])<<8 | uint32(c[6])<<16 | uint32(c[7])<<24 + j6 := uint32(in[0]) | uint32(in[1])<<8 | uint32(in[2])<<16 | uint32(in[3])<<24 + j7 := uint32(in[4]) | uint32(in[5])<<8 | uint32(in[6])<<16 | uint32(in[7])<<24 + j8 := uint32(in[8]) | uint32(in[9])<<8 | uint32(in[10])<<16 | uint32(in[11])<<24 + j9 := uint32(in[12]) | uint32(in[13])<<8 | uint32(in[14])<<16 | uint32(in[15])<<24 + j10 := uint32(c[8]) | uint32(c[9])<<8 | uint32(c[10])<<16 | uint32(c[11])<<24 + j11 := uint32(k[16]) | uint32(k[17])<<8 | uint32(k[18])<<16 | uint32(k[19])<<24 + j12 := uint32(k[20]) | uint32(k[21])<<8 | uint32(k[22])<<16 | uint32(k[23])<<24 + j13 := uint32(k[24]) | uint32(k[25])<<8 | uint32(k[26])<<16 | uint32(k[27])<<24 + j14 := uint32(k[28]) | uint32(k[29])<<8 | uint32(k[30])<<16 | uint32(k[31])<<24 + j15 := uint32(c[12]) | uint32(c[13])<<8 | uint32(c[14])<<16 | uint32(c[15])<<24 + + x0, x1, x2, x3, x4, x5, x6, x7, x8 := j0, j1, j2, j3, j4, j5, j6, j7, j8 + x9, x10, x11, x12, x13, x14, x15 := j9, j10, j11, j12, j13, j14, j15 + + for i := 0; i < rounds; i += 2 { + u := x0 + x12 + x4 ^= u<<7 | u>>(32-7) + u = x4 + x0 + x8 ^= u<<9 | u>>(32-9) + u = x8 + x4 + x12 ^= u<<13 | u>>(32-13) + u = x12 + x8 + x0 ^= u<<18 | u>>(32-18) + + u = x5 + x1 + x9 ^= u<<7 | u>>(32-7) + u = x9 + x5 + x13 ^= u<<9 | u>>(32-9) + u = x13 + x9 + x1 ^= u<<13 | u>>(32-13) + u = x1 + x13 + x5 ^= u<<18 | u>>(32-18) + + u = x10 + x6 + x14 ^= u<<7 | u>>(32-7) + u = x14 + x10 + x2 ^= u<<9 | u>>(32-9) + u = x2 + x14 + x6 ^= u<<13 | u>>(32-13) + u = x6 + x2 + x10 ^= u<<18 | u>>(32-18) + + u = x15 + x11 + x3 ^= u<<7 | u>>(32-7) + u = x3 + x15 + x7 ^= u<<9 | u>>(32-9) + u = x7 + x3 + x11 ^= u<<13 | u>>(32-13) + u = x11 + x7 + x15 ^= u<<18 | u>>(32-18) + + u = x0 + x3 + x1 ^= u<<7 | u>>(32-7) + u = x1 + x0 + x2 ^= u<<9 | u>>(32-9) + u = x2 + x1 + x3 ^= u<<13 | u>>(32-13) + u = x3 + x2 + x0 ^= u<<18 | u>>(32-18) + + u = x5 + x4 + x6 ^= u<<7 | u>>(32-7) + u = x6 + x5 + x7 ^= u<<9 | u>>(32-9) + u = x7 + x6 + x4 ^= u<<13 | u>>(32-13) + u = x4 + x7 + x5 ^= u<<18 | u>>(32-18) + + u = x10 + x9 + x11 ^= u<<7 | u>>(32-7) + u = x11 + x10 + x8 ^= u<<9 | u>>(32-9) + u = x8 + x11 + x9 ^= u<<13 | u>>(32-13) + u = x9 + x8 + x10 ^= u<<18 | u>>(32-18) + + u = x15 + x14 + x12 ^= u<<7 | u>>(32-7) + u = x12 + x15 + x13 ^= u<<9 | u>>(32-9) + u = x13 + x12 + x14 ^= u<<13 | u>>(32-13) + u = x14 + x13 + x15 ^= u<<18 | u>>(32-18) + } + x0 += j0 + x1 += j1 + x2 += j2 + x3 += j3 + x4 += j4 + x5 += j5 + x6 += j6 + x7 += j7 + x8 += j8 + x9 += j9 + x10 += j10 + x11 += j11 + x12 += j12 + x13 += j13 + x14 += j14 + x15 += j15 + + out[0] = byte(x0) + out[1] = byte(x0 >> 8) + out[2] = byte(x0 >> 16) + out[3] = byte(x0 >> 24) + + out[4] = byte(x1) + out[5] = byte(x1 >> 8) + out[6] = byte(x1 >> 16) + out[7] = byte(x1 >> 24) + + out[8] = byte(x2) + out[9] = byte(x2 >> 8) + out[10] = byte(x2 >> 16) + out[11] = byte(x2 >> 24) + + out[12] = byte(x3) + out[13] = byte(x3 >> 8) + out[14] = byte(x3 >> 16) + out[15] = byte(x3 >> 24) + + out[16] = byte(x4) + out[17] = byte(x4 >> 8) + out[18] = byte(x4 >> 16) + out[19] = byte(x4 >> 24) + + out[20] = byte(x5) + out[21] = byte(x5 >> 8) + out[22] = byte(x5 >> 16) + out[23] = byte(x5 >> 24) + + out[24] = byte(x6) + out[25] = byte(x6 >> 8) + out[26] = byte(x6 >> 16) + out[27] = byte(x6 >> 24) + + out[28] = byte(x7) + out[29] = byte(x7 >> 8) + out[30] = byte(x7 >> 16) + out[31] = byte(x7 >> 24) + + out[32] = byte(x8) + out[33] = byte(x8 >> 8) + out[34] = byte(x8 >> 16) + out[35] = byte(x8 >> 24) + + out[36] = byte(x9) + out[37] = byte(x9 >> 8) + out[38] = byte(x9 >> 16) + out[39] = byte(x9 >> 24) + + out[40] = byte(x10) + out[41] = byte(x10 >> 8) + out[42] = byte(x10 >> 16) + out[43] = byte(x10 >> 24) + + out[44] = byte(x11) + out[45] = byte(x11 >> 8) + out[46] = byte(x11 >> 16) + out[47] = byte(x11 >> 24) + + out[48] = byte(x12) + out[49] = byte(x12 >> 8) + out[50] = byte(x12 >> 16) + out[51] = byte(x12 >> 24) + + out[52] = byte(x13) + out[53] = byte(x13 >> 8) + out[54] = byte(x13 >> 16) + out[55] = byte(x13 >> 24) + + out[56] = byte(x14) + out[57] = byte(x14 >> 8) + out[58] = byte(x14 >> 16) + out[59] = byte(x14 >> 24) + + out[60] = byte(x15) + out[61] = byte(x15 >> 8) + out[62] = byte(x15 >> 16) + out[63] = byte(x15 >> 24) +} + +// genericXORKeyStream is the generic implementation of XORKeyStream to be used +// when no assembly implementation is available. +func genericXORKeyStream(out, in []byte, counter *[16]byte, key *[32]byte) { + var block [64]byte + var counterCopy [16]byte + copy(counterCopy[:], counter[:]) + + for len(in) >= 64 { + core(&block, &counterCopy, key, &Sigma) + for i, x := range block { + out[i] = in[i] ^ x + } + u := uint32(1) + for i := 8; i < 16; i++ { + u += uint32(counterCopy[i]) + counterCopy[i] = byte(u) + u >>= 8 + } + in = in[64:] + out = out[64:] + } + + if len(in) > 0 { + core(&block, &counterCopy, key, &Sigma) + for i, v := range in { + out[i] = v ^ block[i] + } + } +} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa20.go b/vendor/golang.org/x/crypto/salsa20/salsa20.go new file mode 100644 index 0000000..6f9bb10 --- /dev/null +++ b/vendor/golang.org/x/crypto/salsa20/salsa20.go @@ -0,0 +1,58 @@ +// 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 salsa20 implements the Salsa20 stream cipher as specified in https://cr.yp.to/snuffle/spec.pdf. + +Salsa20 differs from many other stream ciphers in that it is message orientated +rather than byte orientated. Keystream blocks are not preserved between calls, +therefore each side must encrypt/decrypt data with the same segmentation. + +Another aspect of this difference is that part of the counter is exposed as +a nonce in each call. Encrypting two different messages with the same (key, +nonce) pair leads to trivial plaintext recovery. This is analogous to +encrypting two different messages with the same key with a traditional stream +cipher. + +This package also implements XSalsa20: a version of Salsa20 with a 24-byte +nonce as specified in https://cr.yp.to/snuffle/xsalsa-20081128.pdf. Simply +passing a 24-byte slice as the nonce triggers XSalsa20. +*/ +package salsa20 // import "golang.org/x/crypto/salsa20" + +// TODO(agl): implement XORKeyStream12 and XORKeyStream8 - the reduced round variants of Salsa20. + +import ( + "golang.org/x/crypto/internal/subtle" + "golang.org/x/crypto/salsa20/salsa" +) + +// XORKeyStream crypts bytes from in to out using the given key and nonce. +// In and out must overlap entirely or not at all. Nonce must +// be either 8 or 24 bytes long. +func XORKeyStream(out, in []byte, nonce []byte, key *[32]byte) { + if len(out) < len(in) { + panic("salsa20: output smaller than input") + } + if subtle.InexactOverlap(out[:len(in)], in) { + panic("salsa20: invalid buffer overlap") + } + + var subNonce [16]byte + + if len(nonce) == 24 { + var subKey [32]byte + var hNonce [16]byte + copy(hNonce[:], nonce[:16]) + salsa.HSalsa20(&subKey, &hNonce, key, &salsa.Sigma) + copy(subNonce[:], nonce[16:]) + key = &subKey + } else if len(nonce) == 8 { + copy(subNonce[:], nonce[:]) + } else { + panic("salsa20: nonce must be 8 or 24 bytes") + } + + salsa.XORKeyStream(out, in, &subNonce, key) +} diff --git a/vendor/golang.org/x/crypto/scrypt/scrypt.go b/vendor/golang.org/x/crypto/scrypt/scrypt.go new file mode 100644 index 0000000..bbe4494 --- /dev/null +++ b/vendor/golang.org/x/crypto/scrypt/scrypt.go @@ -0,0 +1,212 @@ +// 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 scrypt implements the scrypt key derivation function as defined in +// Colin Percival's paper "Stronger Key Derivation via Sequential Memory-Hard +// Functions" (https://www.tarsnap.com/scrypt/scrypt.pdf). +package scrypt // import "golang.org/x/crypto/scrypt" + +import ( + "crypto/sha256" + "encoding/binary" + "errors" + "math/bits" + + "golang.org/x/crypto/pbkdf2" +) + +const maxInt = int(^uint(0) >> 1) + +// blockCopy copies n numbers from src into dst. +func blockCopy(dst, src []uint32, n int) { + copy(dst, src[:n]) +} + +// blockXOR XORs numbers from dst with n numbers from src. +func blockXOR(dst, src []uint32, n int) { + for i, v := range src[:n] { + dst[i] ^= v + } +} + +// salsaXOR applies Salsa20/8 to the XOR of 16 numbers from tmp and in, +// and puts the result into both tmp and out. +func salsaXOR(tmp *[16]uint32, in, out []uint32) { + w0 := tmp[0] ^ in[0] + w1 := tmp[1] ^ in[1] + w2 := tmp[2] ^ in[2] + w3 := tmp[3] ^ in[3] + w4 := tmp[4] ^ in[4] + w5 := tmp[5] ^ in[5] + w6 := tmp[6] ^ in[6] + w7 := tmp[7] ^ in[7] + w8 := tmp[8] ^ in[8] + w9 := tmp[9] ^ in[9] + w10 := tmp[10] ^ in[10] + w11 := tmp[11] ^ in[11] + w12 := tmp[12] ^ in[12] + w13 := tmp[13] ^ in[13] + w14 := tmp[14] ^ in[14] + w15 := tmp[15] ^ in[15] + + x0, x1, x2, x3, x4, x5, x6, x7, x8 := w0, w1, w2, w3, w4, w5, w6, w7, w8 + x9, x10, x11, x12, x13, x14, x15 := w9, w10, w11, w12, w13, w14, w15 + + for i := 0; i < 8; i += 2 { + x4 ^= bits.RotateLeft32(x0+x12, 7) + x8 ^= bits.RotateLeft32(x4+x0, 9) + x12 ^= bits.RotateLeft32(x8+x4, 13) + x0 ^= bits.RotateLeft32(x12+x8, 18) + + x9 ^= bits.RotateLeft32(x5+x1, 7) + x13 ^= bits.RotateLeft32(x9+x5, 9) + x1 ^= bits.RotateLeft32(x13+x9, 13) + x5 ^= bits.RotateLeft32(x1+x13, 18) + + x14 ^= bits.RotateLeft32(x10+x6, 7) + x2 ^= bits.RotateLeft32(x14+x10, 9) + x6 ^= bits.RotateLeft32(x2+x14, 13) + x10 ^= bits.RotateLeft32(x6+x2, 18) + + x3 ^= bits.RotateLeft32(x15+x11, 7) + x7 ^= bits.RotateLeft32(x3+x15, 9) + x11 ^= bits.RotateLeft32(x7+x3, 13) + x15 ^= bits.RotateLeft32(x11+x7, 18) + + x1 ^= bits.RotateLeft32(x0+x3, 7) + x2 ^= bits.RotateLeft32(x1+x0, 9) + x3 ^= bits.RotateLeft32(x2+x1, 13) + x0 ^= bits.RotateLeft32(x3+x2, 18) + + x6 ^= bits.RotateLeft32(x5+x4, 7) + x7 ^= bits.RotateLeft32(x6+x5, 9) + x4 ^= bits.RotateLeft32(x7+x6, 13) + x5 ^= bits.RotateLeft32(x4+x7, 18) + + x11 ^= bits.RotateLeft32(x10+x9, 7) + x8 ^= bits.RotateLeft32(x11+x10, 9) + x9 ^= bits.RotateLeft32(x8+x11, 13) + x10 ^= bits.RotateLeft32(x9+x8, 18) + + x12 ^= bits.RotateLeft32(x15+x14, 7) + x13 ^= bits.RotateLeft32(x12+x15, 9) + x14 ^= bits.RotateLeft32(x13+x12, 13) + x15 ^= bits.RotateLeft32(x14+x13, 18) + } + x0 += w0 + x1 += w1 + x2 += w2 + x3 += w3 + x4 += w4 + x5 += w5 + x6 += w6 + x7 += w7 + x8 += w8 + x9 += w9 + x10 += w10 + x11 += w11 + x12 += w12 + x13 += w13 + x14 += w14 + x15 += w15 + + out[0], tmp[0] = x0, x0 + out[1], tmp[1] = x1, x1 + out[2], tmp[2] = x2, x2 + out[3], tmp[3] = x3, x3 + out[4], tmp[4] = x4, x4 + out[5], tmp[5] = x5, x5 + out[6], tmp[6] = x6, x6 + out[7], tmp[7] = x7, x7 + out[8], tmp[8] = x8, x8 + out[9], tmp[9] = x9, x9 + out[10], tmp[10] = x10, x10 + out[11], tmp[11] = x11, x11 + out[12], tmp[12] = x12, x12 + out[13], tmp[13] = x13, x13 + out[14], tmp[14] = x14, x14 + out[15], tmp[15] = x15, x15 +} + +func blockMix(tmp *[16]uint32, in, out []uint32, r int) { + blockCopy(tmp[:], in[(2*r-1)*16:], 16) + for i := 0; i < 2*r; i += 2 { + salsaXOR(tmp, in[i*16:], out[i*8:]) + salsaXOR(tmp, in[i*16+16:], out[i*8+r*16:]) + } +} + +func integer(b []uint32, r int) uint64 { + j := (2*r - 1) * 16 + return uint64(b[j]) | uint64(b[j+1])<<32 +} + +func smix(b []byte, r, N int, v, xy []uint32) { + var tmp [16]uint32 + R := 32 * r + x := xy + y := xy[R:] + + j := 0 + for i := 0; i < R; i++ { + x[i] = binary.LittleEndian.Uint32(b[j:]) + j += 4 + } + for i := 0; i < N; i += 2 { + blockCopy(v[i*R:], x, R) + blockMix(&tmp, x, y, r) + + blockCopy(v[(i+1)*R:], y, R) + blockMix(&tmp, y, x, r) + } + for i := 0; i < N; i += 2 { + j := int(integer(x, r) & uint64(N-1)) + blockXOR(x, v[j*R:], R) + blockMix(&tmp, x, y, r) + + j = int(integer(y, r) & uint64(N-1)) + blockXOR(y, v[j*R:], R) + blockMix(&tmp, y, x, r) + } + j = 0 + for _, v := range x[:R] { + binary.LittleEndian.PutUint32(b[j:], v) + j += 4 + } +} + +// Key derives a key from the password, salt, and cost parameters, returning +// a byte slice of length keyLen that can be used as cryptographic key. +// +// N is a CPU/memory cost parameter, which must be a power of two greater than 1. +// r and p must satisfy r * p < 2³⁰. If the parameters do not satisfy the +// limits, the function returns a nil byte slice and an error. +// +// For example, you can get a derived key for e.g. AES-256 (which needs a +// 32-byte key) by doing: +// +// dk, err := scrypt.Key([]byte("some password"), salt, 32768, 8, 1, 32) +// +// The recommended parameters for interactive logins as of 2017 are N=32768, r=8 +// and p=1. The parameters N, r, and p should be increased as memory latency and +// CPU parallelism increases; consider setting N to the highest power of 2 you +// can derive within 100 milliseconds. Remember to get a good random salt. +func Key(password, salt []byte, N, r, p, keyLen int) ([]byte, error) { + if N <= 1 || N&(N-1) != 0 { + return nil, errors.New("scrypt: N must be > 1 and a power of 2") + } + if uint64(r)*uint64(p) >= 1<<30 || r > maxInt/128/p || r > maxInt/256 || N > maxInt/128/r { + return nil, errors.New("scrypt: parameters are too large") + } + + xy := make([]uint32, 64*r) + v := make([]uint32, 32*N*r) + b := pbkdf2.Key(password, salt, 1, p*128*r, sha256.New) + + for i := 0; i < p; i++ { + smix(b[i*128*r:], r, N, v, xy) + } + + return pbkdf2.Key(password, b, 1, keyLen, sha256.New), nil +} diff --git a/vendor/golang.org/x/crypto/sha3/doc.go b/vendor/golang.org/x/crypto/sha3/doc.go new file mode 100644 index 0000000..c2fef30 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/doc.go @@ -0,0 +1,66 @@ +// 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 sha3 implements the SHA-3 fixed-output-length hash functions and +// the SHAKE variable-output-length hash functions defined by FIPS-202. +// +// Both types of hash function use the "sponge" construction and the Keccak +// permutation. For a detailed specification see http://keccak.noekeon.org/ +// +// +// Guidance +// +// If you aren't sure what function you need, use SHAKE256 with at least 64 +// bytes of output. The SHAKE instances are faster than the SHA3 instances; +// the latter have to allocate memory to conform to the hash.Hash interface. +// +// If you need a secret-key MAC (message authentication code), prepend the +// secret key to the input, hash with SHAKE256 and read at least 32 bytes of +// output. +// +// +// Security strengths +// +// The SHA3-x (x equals 224, 256, 384, or 512) functions have a security +// strength against preimage attacks of x bits. Since they only produce "x" +// bits of output, their collision-resistance is only "x/2" bits. +// +// The SHAKE-256 and -128 functions have a generic security strength of 256 and +// 128 bits against all attacks, provided that at least 2x bits of their output +// is used. Requesting more than 64 or 32 bytes of output, respectively, does +// not increase the collision-resistance of the SHAKE functions. +// +// +// The sponge construction +// +// A sponge builds a pseudo-random function from a public pseudo-random +// permutation, by applying the permutation to a state of "rate + capacity" +// bytes, but hiding "capacity" of the bytes. +// +// A sponge starts out with a zero state. To hash an input using a sponge, up +// to "rate" bytes of the input are XORed into the sponge's state. The sponge +// is then "full" and the permutation is applied to "empty" it. This process is +// repeated until all the input has been "absorbed". The input is then padded. +// The digest is "squeezed" from the sponge in the same way, except that output +// is copied out instead of input being XORed in. +// +// A sponge is parameterized by its generic security strength, which is equal +// to half its capacity; capacity + rate is equal to the permutation's width. +// Since the KeccakF-1600 permutation is 1600 bits (200 bytes) wide, this means +// that the security strength of a sponge instance is equal to (1600 - bitrate) / 2. +// +// +// Recommendations +// +// The SHAKE functions are recommended for most new uses. They can produce +// output of arbitrary length. SHAKE256, with an output length of at least +// 64 bytes, provides 256-bit security against all attacks. The Keccak team +// recommends it for most applications upgrading from SHA2-512. (NIST chose a +// much stronger, but much slower, sponge instance for SHA3-512.) +// +// The SHA-3 functions are "drop-in" replacements for the SHA-2 functions. +// They produce output of the same length, with the same security strengths +// against all attacks. This means, in particular, that SHA3-256 only has +// 128-bit collision resistance, because its output length is 32 bytes. +package sha3 // import "golang.org/x/crypto/sha3" diff --git a/vendor/golang.org/x/crypto/sha3/hashes.go b/vendor/golang.org/x/crypto/sha3/hashes.go new file mode 100644 index 0000000..0d8043f --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/hashes.go @@ -0,0 +1,97 @@ +// 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 sha3 + +// This file provides functions for creating instances of the SHA-3 +// and SHAKE hash functions, as well as utility functions for hashing +// bytes. + +import ( + "hash" +) + +// New224 creates a new SHA3-224 hash. +// Its generic security strength is 224 bits against preimage attacks, +// and 112 bits against collision attacks. +func New224() hash.Hash { + if h := new224Asm(); h != nil { + return h + } + return &state{rate: 144, outputLen: 28, dsbyte: 0x06} +} + +// New256 creates a new SHA3-256 hash. +// Its generic security strength is 256 bits against preimage attacks, +// and 128 bits against collision attacks. +func New256() hash.Hash { + if h := new256Asm(); h != nil { + return h + } + return &state{rate: 136, outputLen: 32, dsbyte: 0x06} +} + +// New384 creates a new SHA3-384 hash. +// Its generic security strength is 384 bits against preimage attacks, +// and 192 bits against collision attacks. +func New384() hash.Hash { + if h := new384Asm(); h != nil { + return h + } + return &state{rate: 104, outputLen: 48, dsbyte: 0x06} +} + +// New512 creates a new SHA3-512 hash. +// Its generic security strength is 512 bits against preimage attacks, +// and 256 bits against collision attacks. +func New512() hash.Hash { + if h := new512Asm(); h != nil { + return h + } + return &state{rate: 72, outputLen: 64, dsbyte: 0x06} +} + +// NewLegacyKeccak256 creates a new Keccak-256 hash. +// +// Only use this function if you require compatibility with an existing cryptosystem +// that uses non-standard padding. All other users should use New256 instead. +func NewLegacyKeccak256() hash.Hash { return &state{rate: 136, outputLen: 32, dsbyte: 0x01} } + +// NewLegacyKeccak512 creates a new Keccak-512 hash. +// +// Only use this function if you require compatibility with an existing cryptosystem +// that uses non-standard padding. All other users should use New512 instead. +func NewLegacyKeccak512() hash.Hash { return &state{rate: 72, outputLen: 64, dsbyte: 0x01} } + +// Sum224 returns the SHA3-224 digest of the data. +func Sum224(data []byte) (digest [28]byte) { + h := New224() + h.Write(data) + h.Sum(digest[:0]) + return +} + +// Sum256 returns the SHA3-256 digest of the data. +func Sum256(data []byte) (digest [32]byte) { + h := New256() + h.Write(data) + h.Sum(digest[:0]) + return +} + +// Sum384 returns the SHA3-384 digest of the data. +func Sum384(data []byte) (digest [48]byte) { + h := New384() + h.Write(data) + h.Sum(digest[:0]) + return +} + +// Sum512 returns the SHA3-512 digest of the data. +func Sum512(data []byte) (digest [64]byte) { + h := New512() + h.Write(data) + h.Sum(digest[:0]) + return +} diff --git a/vendor/golang.org/x/crypto/sha3/hashes_generic.go b/vendor/golang.org/x/crypto/sha3/hashes_generic.go new file mode 100644 index 0000000..c74fc20 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/hashes_generic.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. + +//go:build !gc || purego || !s390x +// +build !gc purego !s390x + +package sha3 + +import ( + "hash" +) + +// new224Asm returns an assembly implementation of SHA3-224 if available, +// otherwise it returns nil. +func new224Asm() hash.Hash { return nil } + +// new256Asm returns an assembly implementation of SHA3-256 if available, +// otherwise it returns nil. +func new256Asm() hash.Hash { return nil } + +// new384Asm returns an assembly implementation of SHA3-384 if available, +// otherwise it returns nil. +func new384Asm() hash.Hash { return nil } + +// new512Asm returns an assembly implementation of SHA3-512 if available, +// otherwise it returns nil. +func new512Asm() hash.Hash { return nil } diff --git a/vendor/golang.org/x/crypto/sha3/keccakf.go b/vendor/golang.org/x/crypto/sha3/keccakf.go new file mode 100644 index 0000000..0f4ae8b --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/keccakf.go @@ -0,0 +1,413 @@ +// 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 !amd64 || purego || !gc +// +build !amd64 purego !gc + +package sha3 + +// rc stores the round constants for use in the ι step. +var rc = [24]uint64{ + 0x0000000000000001, + 0x0000000000008082, + 0x800000000000808A, + 0x8000000080008000, + 0x000000000000808B, + 0x0000000080000001, + 0x8000000080008081, + 0x8000000000008009, + 0x000000000000008A, + 0x0000000000000088, + 0x0000000080008009, + 0x000000008000000A, + 0x000000008000808B, + 0x800000000000008B, + 0x8000000000008089, + 0x8000000000008003, + 0x8000000000008002, + 0x8000000000000080, + 0x000000000000800A, + 0x800000008000000A, + 0x8000000080008081, + 0x8000000000008080, + 0x0000000080000001, + 0x8000000080008008, +} + +// keccakF1600 applies the Keccak permutation to a 1600b-wide +// state represented as a slice of 25 uint64s. +func keccakF1600(a *[25]uint64) { + // Implementation translated from Keccak-inplace.c + // in the keccak reference code. + var t, bc0, bc1, bc2, bc3, bc4, d0, d1, d2, d3, d4 uint64 + + for i := 0; i < 24; i += 4 { + // Combines the 5 steps in each round into 2 steps. + // Unrolls 4 rounds per loop and spreads some steps across rounds. + + // Round 1 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[6] ^ d1 + bc1 = t<<44 | t>>(64-44) + t = a[12] ^ d2 + bc2 = t<<43 | t>>(64-43) + t = a[18] ^ d3 + bc3 = t<<21 | t>>(64-21) + t = a[24] ^ d4 + bc4 = t<<14 | t>>(64-14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i] + a[6] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc2 = t<<3 | t>>(64-3) + t = a[16] ^ d1 + bc3 = t<<45 | t>>(64-45) + t = a[22] ^ d2 + bc4 = t<<61 | t>>(64-61) + t = a[3] ^ d3 + bc0 = t<<28 | t>>(64-28) + t = a[9] ^ d4 + bc1 = t<<20 | t>>(64-20) + a[10] = bc0 ^ (bc2 &^ bc1) + a[16] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc4 = t<<18 | t>>(64-18) + t = a[1] ^ d1 + bc0 = t<<1 | t>>(64-1) + t = a[7] ^ d2 + bc1 = t<<6 | t>>(64-6) + t = a[13] ^ d3 + bc2 = t<<25 | t>>(64-25) + t = a[19] ^ d4 + bc3 = t<<8 | t>>(64-8) + a[20] = bc0 ^ (bc2 &^ bc1) + a[1] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc1 = t<<36 | t>>(64-36) + t = a[11] ^ d1 + bc2 = t<<10 | t>>(64-10) + t = a[17] ^ d2 + bc3 = t<<15 | t>>(64-15) + t = a[23] ^ d3 + bc4 = t<<56 | t>>(64-56) + t = a[4] ^ d4 + bc0 = t<<27 | t>>(64-27) + a[5] = bc0 ^ (bc2 &^ bc1) + a[11] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc3 = t<<41 | t>>(64-41) + t = a[21] ^ d1 + bc4 = t<<2 | t>>(64-2) + t = a[2] ^ d2 + bc0 = t<<62 | t>>(64-62) + t = a[8] ^ d3 + bc1 = t<<55 | t>>(64-55) + t = a[14] ^ d4 + bc2 = t<<39 | t>>(64-39) + a[15] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + // Round 2 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[16] ^ d1 + bc1 = t<<44 | t>>(64-44) + t = a[7] ^ d2 + bc2 = t<<43 | t>>(64-43) + t = a[23] ^ d3 + bc3 = t<<21 | t>>(64-21) + t = a[14] ^ d4 + bc4 = t<<14 | t>>(64-14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+1] + a[16] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc2 = t<<3 | t>>(64-3) + t = a[11] ^ d1 + bc3 = t<<45 | t>>(64-45) + t = a[2] ^ d2 + bc4 = t<<61 | t>>(64-61) + t = a[18] ^ d3 + bc0 = t<<28 | t>>(64-28) + t = a[9] ^ d4 + bc1 = t<<20 | t>>(64-20) + a[20] = bc0 ^ (bc2 &^ bc1) + a[11] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc4 = t<<18 | t>>(64-18) + t = a[6] ^ d1 + bc0 = t<<1 | t>>(64-1) + t = a[22] ^ d2 + bc1 = t<<6 | t>>(64-6) + t = a[13] ^ d3 + bc2 = t<<25 | t>>(64-25) + t = a[4] ^ d4 + bc3 = t<<8 | t>>(64-8) + a[15] = bc0 ^ (bc2 &^ bc1) + a[6] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc1 = t<<36 | t>>(64-36) + t = a[1] ^ d1 + bc2 = t<<10 | t>>(64-10) + t = a[17] ^ d2 + bc3 = t<<15 | t>>(64-15) + t = a[8] ^ d3 + bc4 = t<<56 | t>>(64-56) + t = a[24] ^ d4 + bc0 = t<<27 | t>>(64-27) + a[10] = bc0 ^ (bc2 &^ bc1) + a[1] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc3 = t<<41 | t>>(64-41) + t = a[21] ^ d1 + bc4 = t<<2 | t>>(64-2) + t = a[12] ^ d2 + bc0 = t<<62 | t>>(64-62) + t = a[3] ^ d3 + bc1 = t<<55 | t>>(64-55) + t = a[19] ^ d4 + bc2 = t<<39 | t>>(64-39) + a[5] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + // Round 3 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[11] ^ d1 + bc1 = t<<44 | t>>(64-44) + t = a[22] ^ d2 + bc2 = t<<43 | t>>(64-43) + t = a[8] ^ d3 + bc3 = t<<21 | t>>(64-21) + t = a[19] ^ d4 + bc4 = t<<14 | t>>(64-14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+2] + a[11] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc2 = t<<3 | t>>(64-3) + t = a[1] ^ d1 + bc3 = t<<45 | t>>(64-45) + t = a[12] ^ d2 + bc4 = t<<61 | t>>(64-61) + t = a[23] ^ d3 + bc0 = t<<28 | t>>(64-28) + t = a[9] ^ d4 + bc1 = t<<20 | t>>(64-20) + a[15] = bc0 ^ (bc2 &^ bc1) + a[1] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc4 = t<<18 | t>>(64-18) + t = a[16] ^ d1 + bc0 = t<<1 | t>>(64-1) + t = a[2] ^ d2 + bc1 = t<<6 | t>>(64-6) + t = a[13] ^ d3 + bc2 = t<<25 | t>>(64-25) + t = a[24] ^ d4 + bc3 = t<<8 | t>>(64-8) + a[5] = bc0 ^ (bc2 &^ bc1) + a[16] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc1 = t<<36 | t>>(64-36) + t = a[6] ^ d1 + bc2 = t<<10 | t>>(64-10) + t = a[17] ^ d2 + bc3 = t<<15 | t>>(64-15) + t = a[3] ^ d3 + bc4 = t<<56 | t>>(64-56) + t = a[14] ^ d4 + bc0 = t<<27 | t>>(64-27) + a[20] = bc0 ^ (bc2 &^ bc1) + a[6] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc3 = t<<41 | t>>(64-41) + t = a[21] ^ d1 + bc4 = t<<2 | t>>(64-2) + t = a[7] ^ d2 + bc0 = t<<62 | t>>(64-62) + t = a[18] ^ d3 + bc1 = t<<55 | t>>(64-55) + t = a[4] ^ d4 + bc2 = t<<39 | t>>(64-39) + a[10] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + // Round 4 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[1] ^ d1 + bc1 = t<<44 | t>>(64-44) + t = a[2] ^ d2 + bc2 = t<<43 | t>>(64-43) + t = a[3] ^ d3 + bc3 = t<<21 | t>>(64-21) + t = a[4] ^ d4 + bc4 = t<<14 | t>>(64-14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+3] + a[1] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc2 = t<<3 | t>>(64-3) + t = a[6] ^ d1 + bc3 = t<<45 | t>>(64-45) + t = a[7] ^ d2 + bc4 = t<<61 | t>>(64-61) + t = a[8] ^ d3 + bc0 = t<<28 | t>>(64-28) + t = a[9] ^ d4 + bc1 = t<<20 | t>>(64-20) + a[5] = bc0 ^ (bc2 &^ bc1) + a[6] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc4 = t<<18 | t>>(64-18) + t = a[11] ^ d1 + bc0 = t<<1 | t>>(64-1) + t = a[12] ^ d2 + bc1 = t<<6 | t>>(64-6) + t = a[13] ^ d3 + bc2 = t<<25 | t>>(64-25) + t = a[14] ^ d4 + bc3 = t<<8 | t>>(64-8) + a[10] = bc0 ^ (bc2 &^ bc1) + a[11] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc1 = t<<36 | t>>(64-36) + t = a[16] ^ d1 + bc2 = t<<10 | t>>(64-10) + t = a[17] ^ d2 + bc3 = t<<15 | t>>(64-15) + t = a[18] ^ d3 + bc4 = t<<56 | t>>(64-56) + t = a[19] ^ d4 + bc0 = t<<27 | t>>(64-27) + a[15] = bc0 ^ (bc2 &^ bc1) + a[16] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc3 = t<<41 | t>>(64-41) + t = a[21] ^ d1 + bc4 = t<<2 | t>>(64-2) + t = a[22] ^ d2 + bc0 = t<<62 | t>>(64-62) + t = a[23] ^ d3 + bc1 = t<<55 | t>>(64-55) + t = a[24] ^ d4 + bc2 = t<<39 | t>>(64-39) + a[20] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + } +} diff --git a/vendor/golang.org/x/crypto/sha3/keccakf_amd64.go b/vendor/golang.org/x/crypto/sha3/keccakf_amd64.go new file mode 100644 index 0000000..248a382 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/keccakf_amd64.go @@ -0,0 +1,14 @@ +// 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. + +//go:build amd64 && !purego && gc +// +build amd64,!purego,gc + +package sha3 + +// This function is implemented in keccakf_amd64.s. + +//go:noescape + +func keccakF1600(a *[25]uint64) diff --git a/vendor/golang.org/x/crypto/sha3/keccakf_amd64.s b/vendor/golang.org/x/crypto/sha3/keccakf_amd64.s new file mode 100644 index 0000000..4cfa543 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/keccakf_amd64.s @@ -0,0 +1,391 @@ +// 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. + +//go:build amd64 && !purego && gc +// +build amd64,!purego,gc + +// This code was translated into a form compatible with 6a from the public +// domain sources at https://github.com/gvanas/KeccakCodePackage + +// Offsets in state +#define _ba (0*8) +#define _be (1*8) +#define _bi (2*8) +#define _bo (3*8) +#define _bu (4*8) +#define _ga (5*8) +#define _ge (6*8) +#define _gi (7*8) +#define _go (8*8) +#define _gu (9*8) +#define _ka (10*8) +#define _ke (11*8) +#define _ki (12*8) +#define _ko (13*8) +#define _ku (14*8) +#define _ma (15*8) +#define _me (16*8) +#define _mi (17*8) +#define _mo (18*8) +#define _mu (19*8) +#define _sa (20*8) +#define _se (21*8) +#define _si (22*8) +#define _so (23*8) +#define _su (24*8) + +// Temporary registers +#define rT1 AX + +// Round vars +#define rpState DI +#define rpStack SP + +#define rDa BX +#define rDe CX +#define rDi DX +#define rDo R8 +#define rDu R9 + +#define rBa R10 +#define rBe R11 +#define rBi R12 +#define rBo R13 +#define rBu R14 + +#define rCa SI +#define rCe BP +#define rCi rBi +#define rCo rBo +#define rCu R15 + +#define MOVQ_RBI_RCE MOVQ rBi, rCe +#define XORQ_RT1_RCA XORQ rT1, rCa +#define XORQ_RT1_RCE XORQ rT1, rCe +#define XORQ_RBA_RCU XORQ rBa, rCu +#define XORQ_RBE_RCU XORQ rBe, rCu +#define XORQ_RDU_RCU XORQ rDu, rCu +#define XORQ_RDA_RCA XORQ rDa, rCa +#define XORQ_RDE_RCE XORQ rDe, rCe + +#define mKeccakRound(iState, oState, rc, B_RBI_RCE, G_RT1_RCA, G_RT1_RCE, G_RBA_RCU, K_RT1_RCA, K_RT1_RCE, K_RBA_RCU, M_RT1_RCA, M_RT1_RCE, M_RBE_RCU, S_RDU_RCU, S_RDA_RCA, S_RDE_RCE) \ + /* Prepare round */ \ + MOVQ rCe, rDa; \ + ROLQ $1, rDa; \ + \ + MOVQ _bi(iState), rCi; \ + XORQ _gi(iState), rDi; \ + XORQ rCu, rDa; \ + XORQ _ki(iState), rCi; \ + XORQ _mi(iState), rDi; \ + XORQ rDi, rCi; \ + \ + MOVQ rCi, rDe; \ + ROLQ $1, rDe; \ + \ + MOVQ _bo(iState), rCo; \ + XORQ _go(iState), rDo; \ + XORQ rCa, rDe; \ + XORQ _ko(iState), rCo; \ + XORQ _mo(iState), rDo; \ + XORQ rDo, rCo; \ + \ + MOVQ rCo, rDi; \ + ROLQ $1, rDi; \ + \ + MOVQ rCu, rDo; \ + XORQ rCe, rDi; \ + ROLQ $1, rDo; \ + \ + MOVQ rCa, rDu; \ + XORQ rCi, rDo; \ + ROLQ $1, rDu; \ + \ + /* Result b */ \ + MOVQ _ba(iState), rBa; \ + MOVQ _ge(iState), rBe; \ + XORQ rCo, rDu; \ + MOVQ _ki(iState), rBi; \ + MOVQ _mo(iState), rBo; \ + MOVQ _su(iState), rBu; \ + XORQ rDe, rBe; \ + ROLQ $44, rBe; \ + XORQ rDi, rBi; \ + XORQ rDa, rBa; \ + ROLQ $43, rBi; \ + \ + MOVQ rBe, rCa; \ + MOVQ rc, rT1; \ + ORQ rBi, rCa; \ + XORQ rBa, rT1; \ + XORQ rT1, rCa; \ + MOVQ rCa, _ba(oState); \ + \ + XORQ rDu, rBu; \ + ROLQ $14, rBu; \ + MOVQ rBa, rCu; \ + ANDQ rBe, rCu; \ + XORQ rBu, rCu; \ + MOVQ rCu, _bu(oState); \ + \ + XORQ rDo, rBo; \ + ROLQ $21, rBo; \ + MOVQ rBo, rT1; \ + ANDQ rBu, rT1; \ + XORQ rBi, rT1; \ + MOVQ rT1, _bi(oState); \ + \ + NOTQ rBi; \ + ORQ rBa, rBu; \ + ORQ rBo, rBi; \ + XORQ rBo, rBu; \ + XORQ rBe, rBi; \ + MOVQ rBu, _bo(oState); \ + MOVQ rBi, _be(oState); \ + B_RBI_RCE; \ + \ + /* Result g */ \ + MOVQ _gu(iState), rBe; \ + XORQ rDu, rBe; \ + MOVQ _ka(iState), rBi; \ + ROLQ $20, rBe; \ + XORQ rDa, rBi; \ + ROLQ $3, rBi; \ + MOVQ _bo(iState), rBa; \ + MOVQ rBe, rT1; \ + ORQ rBi, rT1; \ + XORQ rDo, rBa; \ + MOVQ _me(iState), rBo; \ + MOVQ _si(iState), rBu; \ + ROLQ $28, rBa; \ + XORQ rBa, rT1; \ + MOVQ rT1, _ga(oState); \ + G_RT1_RCA; \ + \ + XORQ rDe, rBo; \ + ROLQ $45, rBo; \ + MOVQ rBi, rT1; \ + ANDQ rBo, rT1; \ + XORQ rBe, rT1; \ + MOVQ rT1, _ge(oState); \ + G_RT1_RCE; \ + \ + XORQ rDi, rBu; \ + ROLQ $61, rBu; \ + MOVQ rBu, rT1; \ + ORQ rBa, rT1; \ + XORQ rBo, rT1; \ + MOVQ rT1, _go(oState); \ + \ + ANDQ rBe, rBa; \ + XORQ rBu, rBa; \ + MOVQ rBa, _gu(oState); \ + NOTQ rBu; \ + G_RBA_RCU; \ + \ + ORQ rBu, rBo; \ + XORQ rBi, rBo; \ + MOVQ rBo, _gi(oState); \ + \ + /* Result k */ \ + MOVQ _be(iState), rBa; \ + MOVQ _gi(iState), rBe; \ + MOVQ _ko(iState), rBi; \ + MOVQ _mu(iState), rBo; \ + MOVQ _sa(iState), rBu; \ + XORQ rDi, rBe; \ + ROLQ $6, rBe; \ + XORQ rDo, rBi; \ + ROLQ $25, rBi; \ + MOVQ rBe, rT1; \ + ORQ rBi, rT1; \ + XORQ rDe, rBa; \ + ROLQ $1, rBa; \ + XORQ rBa, rT1; \ + MOVQ rT1, _ka(oState); \ + K_RT1_RCA; \ + \ + XORQ rDu, rBo; \ + ROLQ $8, rBo; \ + MOVQ rBi, rT1; \ + ANDQ rBo, rT1; \ + XORQ rBe, rT1; \ + MOVQ rT1, _ke(oState); \ + K_RT1_RCE; \ + \ + XORQ rDa, rBu; \ + ROLQ $18, rBu; \ + NOTQ rBo; \ + MOVQ rBo, rT1; \ + ANDQ rBu, rT1; \ + XORQ rBi, rT1; \ + MOVQ rT1, _ki(oState); \ + \ + MOVQ rBu, rT1; \ + ORQ rBa, rT1; \ + XORQ rBo, rT1; \ + MOVQ rT1, _ko(oState); \ + \ + ANDQ rBe, rBa; \ + XORQ rBu, rBa; \ + MOVQ rBa, _ku(oState); \ + K_RBA_RCU; \ + \ + /* Result m */ \ + MOVQ _ga(iState), rBe; \ + XORQ rDa, rBe; \ + MOVQ _ke(iState), rBi; \ + ROLQ $36, rBe; \ + XORQ rDe, rBi; \ + MOVQ _bu(iState), rBa; \ + ROLQ $10, rBi; \ + MOVQ rBe, rT1; \ + MOVQ _mi(iState), rBo; \ + ANDQ rBi, rT1; \ + XORQ rDu, rBa; \ + MOVQ _so(iState), rBu; \ + ROLQ $27, rBa; \ + XORQ rBa, rT1; \ + MOVQ rT1, _ma(oState); \ + M_RT1_RCA; \ + \ + XORQ rDi, rBo; \ + ROLQ $15, rBo; \ + MOVQ rBi, rT1; \ + ORQ rBo, rT1; \ + XORQ rBe, rT1; \ + MOVQ rT1, _me(oState); \ + M_RT1_RCE; \ + \ + XORQ rDo, rBu; \ + ROLQ $56, rBu; \ + NOTQ rBo; \ + MOVQ rBo, rT1; \ + ORQ rBu, rT1; \ + XORQ rBi, rT1; \ + MOVQ rT1, _mi(oState); \ + \ + ORQ rBa, rBe; \ + XORQ rBu, rBe; \ + MOVQ rBe, _mu(oState); \ + \ + ANDQ rBa, rBu; \ + XORQ rBo, rBu; \ + MOVQ rBu, _mo(oState); \ + M_RBE_RCU; \ + \ + /* Result s */ \ + MOVQ _bi(iState), rBa; \ + MOVQ _go(iState), rBe; \ + MOVQ _ku(iState), rBi; \ + XORQ rDi, rBa; \ + MOVQ _ma(iState), rBo; \ + ROLQ $62, rBa; \ + XORQ rDo, rBe; \ + MOVQ _se(iState), rBu; \ + ROLQ $55, rBe; \ + \ + XORQ rDu, rBi; \ + MOVQ rBa, rDu; \ + XORQ rDe, rBu; \ + ROLQ $2, rBu; \ + ANDQ rBe, rDu; \ + XORQ rBu, rDu; \ + MOVQ rDu, _su(oState); \ + \ + ROLQ $39, rBi; \ + S_RDU_RCU; \ + NOTQ rBe; \ + XORQ rDa, rBo; \ + MOVQ rBe, rDa; \ + ANDQ rBi, rDa; \ + XORQ rBa, rDa; \ + MOVQ rDa, _sa(oState); \ + S_RDA_RCA; \ + \ + ROLQ $41, rBo; \ + MOVQ rBi, rDe; \ + ORQ rBo, rDe; \ + XORQ rBe, rDe; \ + MOVQ rDe, _se(oState); \ + S_RDE_RCE; \ + \ + MOVQ rBo, rDi; \ + MOVQ rBu, rDo; \ + ANDQ rBu, rDi; \ + ORQ rBa, rDo; \ + XORQ rBi, rDi; \ + XORQ rBo, rDo; \ + MOVQ rDi, _si(oState); \ + MOVQ rDo, _so(oState) \ + +// func keccakF1600(state *[25]uint64) +TEXT ·keccakF1600(SB), 0, $200-8 + MOVQ state+0(FP), rpState + + // Convert the user state into an internal state + NOTQ _be(rpState) + NOTQ _bi(rpState) + NOTQ _go(rpState) + NOTQ _ki(rpState) + NOTQ _mi(rpState) + NOTQ _sa(rpState) + + // Execute the KeccakF permutation + MOVQ _ba(rpState), rCa + MOVQ _be(rpState), rCe + MOVQ _bu(rpState), rCu + + XORQ _ga(rpState), rCa + XORQ _ge(rpState), rCe + XORQ _gu(rpState), rCu + + XORQ _ka(rpState), rCa + XORQ _ke(rpState), rCe + XORQ _ku(rpState), rCu + + XORQ _ma(rpState), rCa + XORQ _me(rpState), rCe + XORQ _mu(rpState), rCu + + XORQ _sa(rpState), rCa + XORQ _se(rpState), rCe + MOVQ _si(rpState), rDi + MOVQ _so(rpState), rDo + XORQ _su(rpState), rCu + + mKeccakRound(rpState, rpStack, $0x0000000000000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x0000000000008082, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x800000000000808a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000080008000, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x000000000000808b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x0000000080000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x8000000080008081, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000000008009, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x000000000000008a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x0000000000000088, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x0000000080008009, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x000000008000000a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x000000008000808b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x800000000000008b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x8000000000008089, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000000008003, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x8000000000008002, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000000000080, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x000000000000800a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x800000008000000a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x8000000080008081, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000000008080, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x0000000080000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000080008008, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP) + + // Revert the internal state to the user state + NOTQ _be(rpState) + NOTQ _bi(rpState) + NOTQ _go(rpState) + NOTQ _ki(rpState) + NOTQ _mi(rpState) + NOTQ _sa(rpState) + + RET diff --git a/vendor/golang.org/x/crypto/sha3/register.go b/vendor/golang.org/x/crypto/sha3/register.go new file mode 100644 index 0000000..8b4453a --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/register.go @@ -0,0 +1,19 @@ +// 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 go1.4 +// +build go1.4 + +package sha3 + +import ( + "crypto" +) + +func init() { + crypto.RegisterHash(crypto.SHA3_224, New224) + crypto.RegisterHash(crypto.SHA3_256, New256) + crypto.RegisterHash(crypto.SHA3_384, New384) + crypto.RegisterHash(crypto.SHA3_512, New512) +} diff --git a/vendor/golang.org/x/crypto/sha3/sha3.go b/vendor/golang.org/x/crypto/sha3/sha3.go new file mode 100644 index 0000000..fa182be --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/sha3.go @@ -0,0 +1,193 @@ +// 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 sha3 + +// spongeDirection indicates the direction bytes are flowing through the sponge. +type spongeDirection int + +const ( + // spongeAbsorbing indicates that the sponge is absorbing input. + spongeAbsorbing spongeDirection = iota + // spongeSqueezing indicates that the sponge is being squeezed. + spongeSqueezing +) + +const ( + // maxRate is the maximum size of the internal buffer. SHAKE-256 + // currently needs the largest buffer. + maxRate = 168 +) + +type state struct { + // Generic sponge components. + a [25]uint64 // main state of the hash + buf []byte // points into storage + rate int // the number of bytes of state to use + + // dsbyte contains the "domain separation" bits and the first bit of + // the padding. Sections 6.1 and 6.2 of [1] separate the outputs of the + // SHA-3 and SHAKE functions by appending bitstrings to the message. + // Using a little-endian bit-ordering convention, these are "01" for SHA-3 + // and "1111" for SHAKE, or 00000010b and 00001111b, respectively. Then the + // padding rule from section 5.1 is applied to pad the message to a multiple + // of the rate, which involves adding a "1" bit, zero or more "0" bits, and + // a final "1" bit. We merge the first "1" bit from the padding into dsbyte, + // giving 00000110b (0x06) and 00011111b (0x1f). + // [1] http://csrc.nist.gov/publications/drafts/fips-202/fips_202_draft.pdf + // "Draft FIPS 202: SHA-3 Standard: Permutation-Based Hash and + // Extendable-Output Functions (May 2014)" + dsbyte byte + + storage storageBuf + + // Specific to SHA-3 and SHAKE. + outputLen int // the default output size in bytes + state spongeDirection // whether the sponge is absorbing or squeezing +} + +// BlockSize returns the rate of sponge underlying this hash function. +func (d *state) BlockSize() int { return d.rate } + +// Size returns the output size of the hash function in bytes. +func (d *state) Size() int { return d.outputLen } + +// Reset clears the internal state by zeroing the sponge state and +// the byte buffer, and setting Sponge.state to absorbing. +func (d *state) Reset() { + // Zero the permutation's state. + for i := range d.a { + d.a[i] = 0 + } + d.state = spongeAbsorbing + d.buf = d.storage.asBytes()[:0] +} + +func (d *state) clone() *state { + ret := *d + if ret.state == spongeAbsorbing { + ret.buf = ret.storage.asBytes()[:len(ret.buf)] + } else { + ret.buf = ret.storage.asBytes()[d.rate-cap(d.buf) : d.rate] + } + + return &ret +} + +// permute applies the KeccakF-1600 permutation. It handles +// any input-output buffering. +func (d *state) permute() { + switch d.state { + case spongeAbsorbing: + // If we're absorbing, we need to xor the input into the state + // before applying the permutation. + xorIn(d, d.buf) + d.buf = d.storage.asBytes()[:0] + keccakF1600(&d.a) + case spongeSqueezing: + // If we're squeezing, we need to apply the permutation before + // copying more output. + keccakF1600(&d.a) + d.buf = d.storage.asBytes()[:d.rate] + copyOut(d, d.buf) + } +} + +// pads appends the domain separation bits in dsbyte, applies +// the multi-bitrate 10..1 padding rule, and permutes the state. +func (d *state) padAndPermute(dsbyte byte) { + if d.buf == nil { + d.buf = d.storage.asBytes()[:0] + } + // Pad with this instance's domain-separator bits. We know that there's + // at least one byte of space in d.buf because, if it were full, + // permute would have been called to empty it. dsbyte also contains the + // first one bit for the padding. See the comment in the state struct. + d.buf = append(d.buf, dsbyte) + zerosStart := len(d.buf) + d.buf = d.storage.asBytes()[:d.rate] + for i := zerosStart; i < d.rate; i++ { + d.buf[i] = 0 + } + // This adds the final one bit for the padding. Because of the way that + // bits are numbered from the LSB upwards, the final bit is the MSB of + // the last byte. + d.buf[d.rate-1] ^= 0x80 + // Apply the permutation + d.permute() + d.state = spongeSqueezing + d.buf = d.storage.asBytes()[:d.rate] + copyOut(d, d.buf) +} + +// Write absorbs more data into the hash's state. It produces an error +// if more data is written to the ShakeHash after writing +func (d *state) Write(p []byte) (written int, err error) { + if d.state != spongeAbsorbing { + panic("sha3: write to sponge after read") + } + if d.buf == nil { + d.buf = d.storage.asBytes()[:0] + } + written = len(p) + + for len(p) > 0 { + if len(d.buf) == 0 && len(p) >= d.rate { + // The fast path; absorb a full "rate" bytes of input and apply the permutation. + xorIn(d, p[:d.rate]) + p = p[d.rate:] + keccakF1600(&d.a) + } else { + // The slow path; buffer the input until we can fill the sponge, and then xor it in. + todo := d.rate - len(d.buf) + if todo > len(p) { + todo = len(p) + } + d.buf = append(d.buf, p[:todo]...) + p = p[todo:] + + // If the sponge is full, apply the permutation. + if len(d.buf) == d.rate { + d.permute() + } + } + } + + return +} + +// Read squeezes an arbitrary number of bytes from the sponge. +func (d *state) Read(out []byte) (n int, err error) { + // If we're still absorbing, pad and apply the permutation. + if d.state == spongeAbsorbing { + d.padAndPermute(d.dsbyte) + } + + n = len(out) + + // Now, do the squeezing. + for len(out) > 0 { + n := copy(out, d.buf) + d.buf = d.buf[n:] + out = out[n:] + + // Apply the permutation if we've squeezed the sponge dry. + if len(d.buf) == 0 { + d.permute() + } + } + + return +} + +// Sum applies padding to the hash state and then squeezes out the desired +// number of output bytes. +func (d *state) Sum(in []byte) []byte { + // Make a copy of the original hash so that caller can keep writing + // and summing. + dup := d.clone() + hash := make([]byte, dup.outputLen) + dup.Read(hash) + return append(in, hash...) +} diff --git a/vendor/golang.org/x/crypto/sha3/sha3_s390x.go b/vendor/golang.org/x/crypto/sha3/sha3_s390x.go new file mode 100644 index 0000000..4fcfc92 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/sha3_s390x.go @@ -0,0 +1,285 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build gc && !purego +// +build gc,!purego + +package sha3 + +// This file contains code for using the 'compute intermediate +// message digest' (KIMD) and 'compute last message digest' (KLMD) +// instructions to compute SHA-3 and SHAKE hashes on IBM Z. + +import ( + "hash" + + "golang.org/x/sys/cpu" +) + +// codes represent 7-bit KIMD/KLMD function codes as defined in +// the Principles of Operation. +type code uint64 + +const ( + // function codes for KIMD/KLMD + sha3_224 code = 32 + sha3_256 = 33 + sha3_384 = 34 + sha3_512 = 35 + shake_128 = 36 + shake_256 = 37 + nopad = 0x100 +) + +// kimd is a wrapper for the 'compute intermediate message digest' instruction. +// src must be a multiple of the rate for the given function code. +//go:noescape +func kimd(function code, chain *[200]byte, src []byte) + +// klmd is a wrapper for the 'compute last message digest' instruction. +// src padding is handled by the instruction. +//go:noescape +func klmd(function code, chain *[200]byte, dst, src []byte) + +type asmState struct { + a [200]byte // 1600 bit state + buf []byte // care must be taken to ensure cap(buf) is a multiple of rate + rate int // equivalent to block size + storage [3072]byte // underlying storage for buf + outputLen int // output length if fixed, 0 if not + function code // KIMD/KLMD function code + state spongeDirection // whether the sponge is absorbing or squeezing +} + +func newAsmState(function code) *asmState { + var s asmState + s.function = function + switch function { + case sha3_224: + s.rate = 144 + s.outputLen = 28 + case sha3_256: + s.rate = 136 + s.outputLen = 32 + case sha3_384: + s.rate = 104 + s.outputLen = 48 + case sha3_512: + s.rate = 72 + s.outputLen = 64 + case shake_128: + s.rate = 168 + case shake_256: + s.rate = 136 + default: + panic("sha3: unrecognized function code") + } + + // limit s.buf size to a multiple of s.rate + s.resetBuf() + return &s +} + +func (s *asmState) clone() *asmState { + c := *s + c.buf = c.storage[:len(s.buf):cap(s.buf)] + return &c +} + +// copyIntoBuf copies b into buf. It will panic if there is not enough space to +// store all of b. +func (s *asmState) copyIntoBuf(b []byte) { + bufLen := len(s.buf) + s.buf = s.buf[:len(s.buf)+len(b)] + copy(s.buf[bufLen:], b) +} + +// resetBuf points buf at storage, sets the length to 0 and sets cap to be a +// multiple of the rate. +func (s *asmState) resetBuf() { + max := (cap(s.storage) / s.rate) * s.rate + s.buf = s.storage[:0:max] +} + +// Write (via the embedded io.Writer interface) adds more data to the running hash. +// It never returns an error. +func (s *asmState) Write(b []byte) (int, error) { + if s.state != spongeAbsorbing { + panic("sha3: write to sponge after read") + } + length := len(b) + for len(b) > 0 { + if len(s.buf) == 0 && len(b) >= cap(s.buf) { + // Hash the data directly and push any remaining bytes + // into the buffer. + remainder := len(b) % s.rate + kimd(s.function, &s.a, b[:len(b)-remainder]) + if remainder != 0 { + s.copyIntoBuf(b[len(b)-remainder:]) + } + return length, nil + } + + if len(s.buf) == cap(s.buf) { + // flush the buffer + kimd(s.function, &s.a, s.buf) + s.buf = s.buf[:0] + } + + // copy as much as we can into the buffer + n := len(b) + if len(b) > cap(s.buf)-len(s.buf) { + n = cap(s.buf) - len(s.buf) + } + s.copyIntoBuf(b[:n]) + b = b[n:] + } + return length, nil +} + +// Read squeezes an arbitrary number of bytes from the sponge. +func (s *asmState) Read(out []byte) (n int, err error) { + n = len(out) + + // need to pad if we were absorbing + if s.state == spongeAbsorbing { + s.state = spongeSqueezing + + // write hash directly into out if possible + if len(out)%s.rate == 0 { + klmd(s.function, &s.a, out, s.buf) // len(out) may be 0 + s.buf = s.buf[:0] + return + } + + // write hash into buffer + max := cap(s.buf) + if max > len(out) { + max = (len(out)/s.rate)*s.rate + s.rate + } + klmd(s.function, &s.a, s.buf[:max], s.buf) + s.buf = s.buf[:max] + } + + for len(out) > 0 { + // flush the buffer + if len(s.buf) != 0 { + c := copy(out, s.buf) + out = out[c:] + s.buf = s.buf[c:] + continue + } + + // write hash directly into out if possible + if len(out)%s.rate == 0 { + klmd(s.function|nopad, &s.a, out, nil) + return + } + + // write hash into buffer + s.resetBuf() + if cap(s.buf) > len(out) { + s.buf = s.buf[:(len(out)/s.rate)*s.rate+s.rate] + } + klmd(s.function|nopad, &s.a, s.buf, nil) + } + return +} + +// Sum appends the current hash to b and returns the resulting slice. +// It does not change the underlying hash state. +func (s *asmState) Sum(b []byte) []byte { + if s.outputLen == 0 { + panic("sha3: cannot call Sum on SHAKE functions") + } + + // Copy the state to preserve the original. + a := s.a + + // Hash the buffer. Note that we don't clear it because we + // aren't updating the state. + klmd(s.function, &a, nil, s.buf) + return append(b, a[:s.outputLen]...) +} + +// Reset resets the Hash to its initial state. +func (s *asmState) Reset() { + for i := range s.a { + s.a[i] = 0 + } + s.resetBuf() + s.state = spongeAbsorbing +} + +// Size returns the number of bytes Sum will return. +func (s *asmState) Size() int { + return s.outputLen +} + +// BlockSize returns the hash's underlying block size. +// The Write method must be able to accept any amount +// of data, but it may operate more efficiently if all writes +// are a multiple of the block size. +func (s *asmState) BlockSize() int { + return s.rate +} + +// Clone returns a copy of the ShakeHash in its current state. +func (s *asmState) Clone() ShakeHash { + return s.clone() +} + +// new224Asm returns an assembly implementation of SHA3-224 if available, +// otherwise it returns nil. +func new224Asm() hash.Hash { + if cpu.S390X.HasSHA3 { + return newAsmState(sha3_224) + } + return nil +} + +// new256Asm returns an assembly implementation of SHA3-256 if available, +// otherwise it returns nil. +func new256Asm() hash.Hash { + if cpu.S390X.HasSHA3 { + return newAsmState(sha3_256) + } + return nil +} + +// new384Asm returns an assembly implementation of SHA3-384 if available, +// otherwise it returns nil. +func new384Asm() hash.Hash { + if cpu.S390X.HasSHA3 { + return newAsmState(sha3_384) + } + return nil +} + +// new512Asm returns an assembly implementation of SHA3-512 if available, +// otherwise it returns nil. +func new512Asm() hash.Hash { + if cpu.S390X.HasSHA3 { + return newAsmState(sha3_512) + } + return nil +} + +// newShake128Asm returns an assembly implementation of SHAKE-128 if available, +// otherwise it returns nil. +func newShake128Asm() ShakeHash { + if cpu.S390X.HasSHA3 { + return newAsmState(shake_128) + } + return nil +} + +// newShake256Asm returns an assembly implementation of SHAKE-256 if available, +// otherwise it returns nil. +func newShake256Asm() ShakeHash { + if cpu.S390X.HasSHA3 { + return newAsmState(shake_256) + } + return nil +} diff --git a/vendor/golang.org/x/crypto/sha3/sha3_s390x.s b/vendor/golang.org/x/crypto/sha3/sha3_s390x.s new file mode 100644 index 0000000..a0e051b --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/sha3_s390x.s @@ -0,0 +1,34 @@ +// 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 gc && !purego +// +build gc,!purego + +#include "textflag.h" + +// func kimd(function code, chain *[200]byte, src []byte) +TEXT ·kimd(SB), NOFRAME|NOSPLIT, $0-40 + MOVD function+0(FP), R0 + MOVD chain+8(FP), R1 + LMG src+16(FP), R2, R3 // R2=base, R3=len + +continue: + WORD $0xB93E0002 // KIMD --, R2 + BVS continue // continue if interrupted + MOVD $0, R0 // reset R0 for pre-go1.8 compilers + RET + +// func klmd(function code, chain *[200]byte, dst, src []byte) +TEXT ·klmd(SB), NOFRAME|NOSPLIT, $0-64 + // TODO: SHAKE support + MOVD function+0(FP), R0 + MOVD chain+8(FP), R1 + LMG dst+16(FP), R2, R3 // R2=base, R3=len + LMG src+40(FP), R4, R5 // R4=base, R5=len + +continue: + WORD $0xB93F0024 // KLMD R2, R4 + BVS continue // continue if interrupted + MOVD $0, R0 // reset R0 for pre-go1.8 compilers + RET diff --git a/vendor/golang.org/x/crypto/sha3/shake.go b/vendor/golang.org/x/crypto/sha3/shake.go new file mode 100644 index 0000000..d7be295 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/shake.go @@ -0,0 +1,173 @@ +// 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 sha3 + +// This file defines the ShakeHash interface, and provides +// functions for creating SHAKE and cSHAKE instances, as well as utility +// functions for hashing bytes to arbitrary-length output. +// +// +// SHAKE implementation is based on FIPS PUB 202 [1] +// cSHAKE implementations is based on NIST SP 800-185 [2] +// +// [1] https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf +// [2] https://doi.org/10.6028/NIST.SP.800-185 + +import ( + "encoding/binary" + "io" +) + +// ShakeHash defines the interface to hash functions that +// support arbitrary-length output. +type ShakeHash interface { + // Write absorbs more data into the hash's state. It panics if input is + // written to it after output has been read from it. + io.Writer + + // Read reads more output from the hash; reading affects the hash's + // state. (ShakeHash.Read is thus very different from Hash.Sum) + // It never returns an error. + io.Reader + + // Clone returns a copy of the ShakeHash in its current state. + Clone() ShakeHash + + // Reset resets the ShakeHash to its initial state. + Reset() +} + +// cSHAKE specific context +type cshakeState struct { + *state // SHA-3 state context and Read/Write operations + + // initBlock is the cSHAKE specific initialization set of bytes. It is initialized + // by newCShake function and stores concatenation of N followed by S, encoded + // by the method specified in 3.3 of [1]. + // It is stored here in order for Reset() to be able to put context into + // initial state. + initBlock []byte +} + +// Consts for configuring initial SHA-3 state +const ( + dsbyteShake = 0x1f + dsbyteCShake = 0x04 + rate128 = 168 + rate256 = 136 +) + +func bytepad(input []byte, w int) []byte { + // leftEncode always returns max 9 bytes + buf := make([]byte, 0, 9+len(input)+w) + buf = append(buf, leftEncode(uint64(w))...) + buf = append(buf, input...) + padlen := w - (len(buf) % w) + return append(buf, make([]byte, padlen)...) +} + +func leftEncode(value uint64) []byte { + var b [9]byte + binary.BigEndian.PutUint64(b[1:], value) + // Trim all but last leading zero bytes + i := byte(1) + for i < 8 && b[i] == 0 { + i++ + } + // Prepend number of encoded bytes + b[i-1] = 9 - i + return b[i-1:] +} + +func newCShake(N, S []byte, rate int, dsbyte byte) ShakeHash { + c := cshakeState{state: &state{rate: rate, dsbyte: dsbyte}} + + // leftEncode returns max 9 bytes + c.initBlock = make([]byte, 0, 9*2+len(N)+len(S)) + c.initBlock = append(c.initBlock, leftEncode(uint64(len(N)*8))...) + c.initBlock = append(c.initBlock, N...) + c.initBlock = append(c.initBlock, leftEncode(uint64(len(S)*8))...) + c.initBlock = append(c.initBlock, S...) + c.Write(bytepad(c.initBlock, c.rate)) + return &c +} + +// Reset resets the hash to initial state. +func (c *cshakeState) Reset() { + c.state.Reset() + c.Write(bytepad(c.initBlock, c.rate)) +} + +// Clone returns copy of a cSHAKE context within its current state. +func (c *cshakeState) Clone() ShakeHash { + b := make([]byte, len(c.initBlock)) + copy(b, c.initBlock) + return &cshakeState{state: c.clone(), initBlock: b} +} + +// Clone returns copy of SHAKE context within its current state. +func (c *state) Clone() ShakeHash { + return c.clone() +} + +// NewShake128 creates a new SHAKE128 variable-output-length ShakeHash. +// Its generic security strength is 128 bits against all attacks if at +// least 32 bytes of its output are used. +func NewShake128() ShakeHash { + if h := newShake128Asm(); h != nil { + return h + } + return &state{rate: rate128, dsbyte: dsbyteShake} +} + +// NewShake256 creates a new SHAKE256 variable-output-length ShakeHash. +// Its generic security strength is 256 bits against all attacks if +// at least 64 bytes of its output are used. +func NewShake256() ShakeHash { + if h := newShake256Asm(); h != nil { + return h + } + return &state{rate: rate256, dsbyte: dsbyteShake} +} + +// NewCShake128 creates a new instance of cSHAKE128 variable-output-length ShakeHash, +// a customizable variant of SHAKE128. +// N is used to define functions based on cSHAKE, it can be empty when plain cSHAKE is +// desired. S is a customization byte string used for domain separation - two cSHAKE +// computations on same input with different S yield unrelated outputs. +// When N and S are both empty, this is equivalent to NewShake128. +func NewCShake128(N, S []byte) ShakeHash { + if len(N) == 0 && len(S) == 0 { + return NewShake128() + } + return newCShake(N, S, rate128, dsbyteCShake) +} + +// NewCShake256 creates a new instance of cSHAKE256 variable-output-length ShakeHash, +// a customizable variant of SHAKE256. +// N is used to define functions based on cSHAKE, it can be empty when plain cSHAKE is +// desired. S is a customization byte string used for domain separation - two cSHAKE +// computations on same input with different S yield unrelated outputs. +// When N and S are both empty, this is equivalent to NewShake256. +func NewCShake256(N, S []byte) ShakeHash { + if len(N) == 0 && len(S) == 0 { + return NewShake256() + } + return newCShake(N, S, rate256, dsbyteCShake) +} + +// ShakeSum128 writes an arbitrary-length digest of data into hash. +func ShakeSum128(hash, data []byte) { + h := NewShake128() + h.Write(data) + h.Read(hash) +} + +// ShakeSum256 writes an arbitrary-length digest of data into hash. +func ShakeSum256(hash, data []byte) { + h := NewShake256() + h.Write(data) + h.Read(hash) +} diff --git a/vendor/golang.org/x/crypto/sha3/shake_generic.go b/vendor/golang.org/x/crypto/sha3/shake_generic.go new file mode 100644 index 0000000..5c0710e --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/shake_generic.go @@ -0,0 +1,20 @@ +// 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 !gc || purego || !s390x +// +build !gc purego !s390x + +package sha3 + +// newShake128Asm returns an assembly implementation of SHAKE-128 if available, +// otherwise it returns nil. +func newShake128Asm() ShakeHash { + return nil +} + +// newShake256Asm returns an assembly implementation of SHAKE-256 if available, +// otherwise it returns nil. +func newShake256Asm() ShakeHash { + return nil +} diff --git a/vendor/golang.org/x/crypto/sha3/xor.go b/vendor/golang.org/x/crypto/sha3/xor.go new file mode 100644 index 0000000..59c8eb9 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/xor.go @@ -0,0 +1,24 @@ +// 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. + +//go:build (!amd64 && !386 && !ppc64le) || purego +// +build !amd64,!386,!ppc64le purego + +package sha3 + +// A storageBuf is an aligned array of maxRate bytes. +type storageBuf [maxRate]byte + +func (b *storageBuf) asBytes() *[maxRate]byte { + return (*[maxRate]byte)(b) +} + +var ( + xorIn = xorInGeneric + copyOut = copyOutGeneric + xorInUnaligned = xorInGeneric + copyOutUnaligned = copyOutGeneric +) + +const xorImplementationUnaligned = "generic" diff --git a/vendor/golang.org/x/crypto/sha3/xor_generic.go b/vendor/golang.org/x/crypto/sha3/xor_generic.go new file mode 100644 index 0000000..8d94771 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/xor_generic.go @@ -0,0 +1,28 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sha3 + +import "encoding/binary" + +// xorInGeneric xors the bytes in buf into the state; it +// makes no non-portable assumptions about memory layout +// or alignment. +func xorInGeneric(d *state, buf []byte) { + n := len(buf) / 8 + + for i := 0; i < n; i++ { + a := binary.LittleEndian.Uint64(buf) + d.a[i] ^= a + buf = buf[8:] + } +} + +// copyOutGeneric copies uint64s to a byte buffer. +func copyOutGeneric(d *state, b []byte) { + for i := 0; len(b) >= 8; i++ { + binary.LittleEndian.PutUint64(b, d.a[i]) + b = b[8:] + } +} diff --git a/vendor/golang.org/x/crypto/sha3/xor_unaligned.go b/vendor/golang.org/x/crypto/sha3/xor_unaligned.go new file mode 100644 index 0000000..1ce6062 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/xor_unaligned.go @@ -0,0 +1,68 @@ +// 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. + +//go:build (amd64 || 386 || ppc64le) && !purego +// +build amd64 386 ppc64le +// +build !purego + +package sha3 + +import "unsafe" + +// A storageBuf is an aligned array of maxRate bytes. +type storageBuf [maxRate / 8]uint64 + +func (b *storageBuf) asBytes() *[maxRate]byte { + return (*[maxRate]byte)(unsafe.Pointer(b)) +} + +// xorInUnaligned uses unaligned reads and writes to update d.a to contain d.a +// XOR buf. +func xorInUnaligned(d *state, buf []byte) { + n := len(buf) + bw := (*[maxRate / 8]uint64)(unsafe.Pointer(&buf[0]))[: n/8 : n/8] + if n >= 72 { + d.a[0] ^= bw[0] + d.a[1] ^= bw[1] + d.a[2] ^= bw[2] + d.a[3] ^= bw[3] + d.a[4] ^= bw[4] + d.a[5] ^= bw[5] + d.a[6] ^= bw[6] + d.a[7] ^= bw[7] + d.a[8] ^= bw[8] + } + if n >= 104 { + d.a[9] ^= bw[9] + d.a[10] ^= bw[10] + d.a[11] ^= bw[11] + d.a[12] ^= bw[12] + } + if n >= 136 { + d.a[13] ^= bw[13] + d.a[14] ^= bw[14] + d.a[15] ^= bw[15] + d.a[16] ^= bw[16] + } + if n >= 144 { + d.a[17] ^= bw[17] + } + if n >= 168 { + d.a[18] ^= bw[18] + d.a[19] ^= bw[19] + d.a[20] ^= bw[20] + } +} + +func copyOutUnaligned(d *state, buf []byte) { + ab := (*[maxRate]uint8)(unsafe.Pointer(&d.a[0])) + copy(buf, ab[:]) +} + +var ( + xorIn = xorInUnaligned + copyOut = copyOutUnaligned +) + +const xorImplementationUnaligned = "unaligned" diff --git a/vendor/golang.org/x/crypto/tea/cipher.go b/vendor/golang.org/x/crypto/tea/cipher.go new file mode 100644 index 0000000..c1ff90e --- /dev/null +++ b/vendor/golang.org/x/crypto/tea/cipher.go @@ -0,0 +1,116 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package tea implements the TEA algorithm, as defined in Needham and +// Wheeler's 1994 technical report, “TEA, a Tiny Encryption Algorithm”. See +// http://www.cix.co.uk/~klockstone/tea.pdf for details. +// +// TEA is a legacy cipher and its short block size makes it vulnerable to +// birthday bound attacks (see https://sweet32.info). It should only be used +// where compatibility with legacy systems, not security, is the goal. +// +// Deprecated: any new system should use AES (from crypto/aes, if necessary in +// an AEAD mode like crypto/cipher.NewGCM) or XChaCha20-Poly1305 (from +// golang.org/x/crypto/chacha20poly1305). +package tea + +import ( + "crypto/cipher" + "encoding/binary" + "errors" +) + +const ( + // BlockSize is the size of a TEA block, in bytes. + BlockSize = 8 + + // KeySize is the size of a TEA key, in bytes. + KeySize = 16 + + // delta is the TEA key schedule constant. + delta = 0x9e3779b9 + + // numRounds is the standard number of rounds in TEA. + numRounds = 64 +) + +// tea is an instance of the TEA cipher with a particular key. +type tea struct { + key [16]byte + rounds int +} + +// NewCipher returns an instance of the TEA cipher with the standard number of +// rounds. The key argument must be 16 bytes long. +func NewCipher(key []byte) (cipher.Block, error) { + return NewCipherWithRounds(key, numRounds) +} + +// NewCipherWithRounds returns an instance of the TEA cipher with a given +// number of rounds, which must be even. The key argument must be 16 bytes +// long. +func NewCipherWithRounds(key []byte, rounds int) (cipher.Block, error) { + if len(key) != 16 { + return nil, errors.New("tea: incorrect key size") + } + + if rounds&1 != 0 { + return nil, errors.New("tea: odd number of rounds specified") + } + + c := &tea{ + rounds: rounds, + } + copy(c.key[:], key) + + return c, nil +} + +// BlockSize returns the TEA block size, which is eight bytes. It is necessary +// to satisfy the Block interface in the package "crypto/cipher". +func (*tea) BlockSize() int { + return BlockSize +} + +// Encrypt encrypts the 8 byte buffer src using the key in t and stores the +// result in dst. Note that for amounts of data larger than a block, it is not +// safe to just call Encrypt on successive blocks; instead, use an encryption +// mode like CBC (see crypto/cipher/cbc.go). +func (t *tea) Encrypt(dst, src []byte) { + e := binary.BigEndian + v0, v1 := e.Uint32(src), e.Uint32(src[4:]) + k0, k1, k2, k3 := e.Uint32(t.key[0:]), e.Uint32(t.key[4:]), e.Uint32(t.key[8:]), e.Uint32(t.key[12:]) + + sum := uint32(0) + delta := uint32(delta) + + for i := 0; i < t.rounds/2; i++ { + sum += delta + v0 += ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1) + v1 += ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3) + } + + e.PutUint32(dst, v0) + e.PutUint32(dst[4:], v1) +} + +// Decrypt decrypts the 8 byte buffer src using the key in t and stores the +// result in dst. +func (t *tea) Decrypt(dst, src []byte) { + e := binary.BigEndian + v0, v1 := e.Uint32(src), e.Uint32(src[4:]) + k0, k1, k2, k3 := e.Uint32(t.key[0:]), e.Uint32(t.key[4:]), e.Uint32(t.key[8:]), e.Uint32(t.key[12:]) + + delta := uint32(delta) + sum := delta * uint32(t.rounds/2) // in general, sum = delta * n + + for i := 0; i < t.rounds/2; i++ { + v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3) + v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1) + sum -= delta + } + + e.PutUint32(dst, v0) + e.PutUint32(dst[4:], v1) +} diff --git a/vendor/golang.org/x/crypto/twofish/twofish.go b/vendor/golang.org/x/crypto/twofish/twofish.go new file mode 100644 index 0000000..1197d75 --- /dev/null +++ b/vendor/golang.org/x/crypto/twofish/twofish.go @@ -0,0 +1,348 @@ +// 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 twofish implements Bruce Schneier's Twofish encryption algorithm. +// +// Deprecated: Twofish is a legacy cipher and should not be used for new +// applications. Also, this package does not and will not provide an optimized +// implementation. Instead, use AES (from crypto/aes, if necessary in an AEAD +// mode like crypto/cipher.NewGCM) or XChaCha20-Poly1305 (from +// golang.org/x/crypto/chacha20poly1305). +package twofish // import "golang.org/x/crypto/twofish" + +// Twofish is defined in https://www.schneier.com/paper-twofish-paper.pdf [TWOFISH] + +// This code is a port of the LibTom C implementation. +// See http://libtom.org/?page=features&newsitems=5&whatfile=crypt. +// LibTomCrypt is free for all purposes under the public domain. +// It was heavily inspired by the go blowfish package. + +import "strconv" + +// BlockSize is the constant block size of Twofish. +const BlockSize = 16 + +const mdsPolynomial = 0x169 // x^8 + x^6 + x^5 + x^3 + 1, see [TWOFISH] 4.2 +const rsPolynomial = 0x14d // x^8 + x^6 + x^3 + x^2 + 1, see [TWOFISH] 4.3 + +// A Cipher is an instance of Twofish encryption using a particular key. +type Cipher struct { + s [4][256]uint32 + k [40]uint32 +} + +type KeySizeError int + +func (k KeySizeError) Error() string { + return "crypto/twofish: invalid key size " + strconv.Itoa(int(k)) +} + +// NewCipher creates and returns a Cipher. +// The key argument should be the Twofish key, 16, 24 or 32 bytes. +func NewCipher(key []byte) (*Cipher, error) { + keylen := len(key) + + if keylen != 16 && keylen != 24 && keylen != 32 { + return nil, KeySizeError(keylen) + } + + // k is the number of 64 bit words in key + k := keylen / 8 + + // Create the S[..] words + var S [4 * 4]byte + for i := 0; i < k; i++ { + // Computes [y0 y1 y2 y3] = rs . [x0 x1 x2 x3 x4 x5 x6 x7] + for j, rsRow := range rs { + for k, rsVal := range rsRow { + S[4*i+j] ^= gfMult(key[8*i+k], rsVal, rsPolynomial) + } + } + } + + // Calculate subkeys + c := new(Cipher) + var tmp [4]byte + for i := byte(0); i < 20; i++ { + // A = h(p * 2x, Me) + for j := range tmp { + tmp[j] = 2 * i + } + A := h(tmp[:], key, 0) + + // B = rolc(h(p * (2x + 1), Mo), 8) + for j := range tmp { + tmp[j] = 2*i + 1 + } + B := h(tmp[:], key, 1) + B = rol(B, 8) + + c.k[2*i] = A + B + + // K[2i+1] = (A + 2B) <<< 9 + c.k[2*i+1] = rol(2*B+A, 9) + } + + // Calculate sboxes + switch k { + case 2: + for i := range c.s[0] { + c.s[0][i] = mdsColumnMult(sbox[1][sbox[0][sbox[0][byte(i)]^S[0]]^S[4]], 0) + c.s[1][i] = mdsColumnMult(sbox[0][sbox[0][sbox[1][byte(i)]^S[1]]^S[5]], 1) + c.s[2][i] = mdsColumnMult(sbox[1][sbox[1][sbox[0][byte(i)]^S[2]]^S[6]], 2) + c.s[3][i] = mdsColumnMult(sbox[0][sbox[1][sbox[1][byte(i)]^S[3]]^S[7]], 3) + } + case 3: + for i := range c.s[0] { + c.s[0][i] = mdsColumnMult(sbox[1][sbox[0][sbox[0][sbox[1][byte(i)]^S[0]]^S[4]]^S[8]], 0) + c.s[1][i] = mdsColumnMult(sbox[0][sbox[0][sbox[1][sbox[1][byte(i)]^S[1]]^S[5]]^S[9]], 1) + c.s[2][i] = mdsColumnMult(sbox[1][sbox[1][sbox[0][sbox[0][byte(i)]^S[2]]^S[6]]^S[10]], 2) + c.s[3][i] = mdsColumnMult(sbox[0][sbox[1][sbox[1][sbox[0][byte(i)]^S[3]]^S[7]]^S[11]], 3) + } + default: + for i := range c.s[0] { + c.s[0][i] = mdsColumnMult(sbox[1][sbox[0][sbox[0][sbox[1][sbox[1][byte(i)]^S[0]]^S[4]]^S[8]]^S[12]], 0) + c.s[1][i] = mdsColumnMult(sbox[0][sbox[0][sbox[1][sbox[1][sbox[0][byte(i)]^S[1]]^S[5]]^S[9]]^S[13]], 1) + c.s[2][i] = mdsColumnMult(sbox[1][sbox[1][sbox[0][sbox[0][sbox[0][byte(i)]^S[2]]^S[6]]^S[10]]^S[14]], 2) + c.s[3][i] = mdsColumnMult(sbox[0][sbox[1][sbox[1][sbox[0][sbox[1][byte(i)]^S[3]]^S[7]]^S[11]]^S[15]], 3) + } + } + + return c, nil +} + +// BlockSize returns the Twofish block size, 16 bytes. +func (c *Cipher) BlockSize() int { return BlockSize } + +// store32l stores src in dst in little-endian form. +func store32l(dst []byte, src uint32) { + dst[0] = byte(src) + dst[1] = byte(src >> 8) + dst[2] = byte(src >> 16) + dst[3] = byte(src >> 24) + return +} + +// load32l reads a little-endian uint32 from src. +func load32l(src []byte) uint32 { + return uint32(src[0]) | uint32(src[1])<<8 | uint32(src[2])<<16 | uint32(src[3])<<24 +} + +// rol returns x after a left circular rotation of y bits. +func rol(x, y uint32) uint32 { + return (x << (y & 31)) | (x >> (32 - (y & 31))) +} + +// ror returns x after a right circular rotation of y bits. +func ror(x, y uint32) uint32 { + return (x >> (y & 31)) | (x << (32 - (y & 31))) +} + +// The RS matrix. See [TWOFISH] 4.3 +var rs = [4][8]byte{ + {0x01, 0xA4, 0x55, 0x87, 0x5A, 0x58, 0xDB, 0x9E}, + {0xA4, 0x56, 0x82, 0xF3, 0x1E, 0xC6, 0x68, 0xE5}, + {0x02, 0xA1, 0xFC, 0xC1, 0x47, 0xAE, 0x3D, 0x19}, + {0xA4, 0x55, 0x87, 0x5A, 0x58, 0xDB, 0x9E, 0x03}, +} + +// sbox tables +var sbox = [2][256]byte{ + { + 0xa9, 0x67, 0xb3, 0xe8, 0x04, 0xfd, 0xa3, 0x76, 0x9a, 0x92, 0x80, 0x78, 0xe4, 0xdd, 0xd1, 0x38, + 0x0d, 0xc6, 0x35, 0x98, 0x18, 0xf7, 0xec, 0x6c, 0x43, 0x75, 0x37, 0x26, 0xfa, 0x13, 0x94, 0x48, + 0xf2, 0xd0, 0x8b, 0x30, 0x84, 0x54, 0xdf, 0x23, 0x19, 0x5b, 0x3d, 0x59, 0xf3, 0xae, 0xa2, 0x82, + 0x63, 0x01, 0x83, 0x2e, 0xd9, 0x51, 0x9b, 0x7c, 0xa6, 0xeb, 0xa5, 0xbe, 0x16, 0x0c, 0xe3, 0x61, + 0xc0, 0x8c, 0x3a, 0xf5, 0x73, 0x2c, 0x25, 0x0b, 0xbb, 0x4e, 0x89, 0x6b, 0x53, 0x6a, 0xb4, 0xf1, + 0xe1, 0xe6, 0xbd, 0x45, 0xe2, 0xf4, 0xb6, 0x66, 0xcc, 0x95, 0x03, 0x56, 0xd4, 0x1c, 0x1e, 0xd7, + 0xfb, 0xc3, 0x8e, 0xb5, 0xe9, 0xcf, 0xbf, 0xba, 0xea, 0x77, 0x39, 0xaf, 0x33, 0xc9, 0x62, 0x71, + 0x81, 0x79, 0x09, 0xad, 0x24, 0xcd, 0xf9, 0xd8, 0xe5, 0xc5, 0xb9, 0x4d, 0x44, 0x08, 0x86, 0xe7, + 0xa1, 0x1d, 0xaa, 0xed, 0x06, 0x70, 0xb2, 0xd2, 0x41, 0x7b, 0xa0, 0x11, 0x31, 0xc2, 0x27, 0x90, + 0x20, 0xf6, 0x60, 0xff, 0x96, 0x5c, 0xb1, 0xab, 0x9e, 0x9c, 0x52, 0x1b, 0x5f, 0x93, 0x0a, 0xef, + 0x91, 0x85, 0x49, 0xee, 0x2d, 0x4f, 0x8f, 0x3b, 0x47, 0x87, 0x6d, 0x46, 0xd6, 0x3e, 0x69, 0x64, + 0x2a, 0xce, 0xcb, 0x2f, 0xfc, 0x97, 0x05, 0x7a, 0xac, 0x7f, 0xd5, 0x1a, 0x4b, 0x0e, 0xa7, 0x5a, + 0x28, 0x14, 0x3f, 0x29, 0x88, 0x3c, 0x4c, 0x02, 0xb8, 0xda, 0xb0, 0x17, 0x55, 0x1f, 0x8a, 0x7d, + 0x57, 0xc7, 0x8d, 0x74, 0xb7, 0xc4, 0x9f, 0x72, 0x7e, 0x15, 0x22, 0x12, 0x58, 0x07, 0x99, 0x34, + 0x6e, 0x50, 0xde, 0x68, 0x65, 0xbc, 0xdb, 0xf8, 0xc8, 0xa8, 0x2b, 0x40, 0xdc, 0xfe, 0x32, 0xa4, + 0xca, 0x10, 0x21, 0xf0, 0xd3, 0x5d, 0x0f, 0x00, 0x6f, 0x9d, 0x36, 0x42, 0x4a, 0x5e, 0xc1, 0xe0, + }, + { + 0x75, 0xf3, 0xc6, 0xf4, 0xdb, 0x7b, 0xfb, 0xc8, 0x4a, 0xd3, 0xe6, 0x6b, 0x45, 0x7d, 0xe8, 0x4b, + 0xd6, 0x32, 0xd8, 0xfd, 0x37, 0x71, 0xf1, 0xe1, 0x30, 0x0f, 0xf8, 0x1b, 0x87, 0xfa, 0x06, 0x3f, + 0x5e, 0xba, 0xae, 0x5b, 0x8a, 0x00, 0xbc, 0x9d, 0x6d, 0xc1, 0xb1, 0x0e, 0x80, 0x5d, 0xd2, 0xd5, + 0xa0, 0x84, 0x07, 0x14, 0xb5, 0x90, 0x2c, 0xa3, 0xb2, 0x73, 0x4c, 0x54, 0x92, 0x74, 0x36, 0x51, + 0x38, 0xb0, 0xbd, 0x5a, 0xfc, 0x60, 0x62, 0x96, 0x6c, 0x42, 0xf7, 0x10, 0x7c, 0x28, 0x27, 0x8c, + 0x13, 0x95, 0x9c, 0xc7, 0x24, 0x46, 0x3b, 0x70, 0xca, 0xe3, 0x85, 0xcb, 0x11, 0xd0, 0x93, 0xb8, + 0xa6, 0x83, 0x20, 0xff, 0x9f, 0x77, 0xc3, 0xcc, 0x03, 0x6f, 0x08, 0xbf, 0x40, 0xe7, 0x2b, 0xe2, + 0x79, 0x0c, 0xaa, 0x82, 0x41, 0x3a, 0xea, 0xb9, 0xe4, 0x9a, 0xa4, 0x97, 0x7e, 0xda, 0x7a, 0x17, + 0x66, 0x94, 0xa1, 0x1d, 0x3d, 0xf0, 0xde, 0xb3, 0x0b, 0x72, 0xa7, 0x1c, 0xef, 0xd1, 0x53, 0x3e, + 0x8f, 0x33, 0x26, 0x5f, 0xec, 0x76, 0x2a, 0x49, 0x81, 0x88, 0xee, 0x21, 0xc4, 0x1a, 0xeb, 0xd9, + 0xc5, 0x39, 0x99, 0xcd, 0xad, 0x31, 0x8b, 0x01, 0x18, 0x23, 0xdd, 0x1f, 0x4e, 0x2d, 0xf9, 0x48, + 0x4f, 0xf2, 0x65, 0x8e, 0x78, 0x5c, 0x58, 0x19, 0x8d, 0xe5, 0x98, 0x57, 0x67, 0x7f, 0x05, 0x64, + 0xaf, 0x63, 0xb6, 0xfe, 0xf5, 0xb7, 0x3c, 0xa5, 0xce, 0xe9, 0x68, 0x44, 0xe0, 0x4d, 0x43, 0x69, + 0x29, 0x2e, 0xac, 0x15, 0x59, 0xa8, 0x0a, 0x9e, 0x6e, 0x47, 0xdf, 0x34, 0x35, 0x6a, 0xcf, 0xdc, + 0x22, 0xc9, 0xc0, 0x9b, 0x89, 0xd4, 0xed, 0xab, 0x12, 0xa2, 0x0d, 0x52, 0xbb, 0x02, 0x2f, 0xa9, + 0xd7, 0x61, 0x1e, 0xb4, 0x50, 0x04, 0xf6, 0xc2, 0x16, 0x25, 0x86, 0x56, 0x55, 0x09, 0xbe, 0x91, + }, +} + +// gfMult returns a·b in GF(2^8)/p +func gfMult(a, b byte, p uint32) byte { + B := [2]uint32{0, uint32(b)} + P := [2]uint32{0, p} + var result uint32 + + // branchless GF multiplier + for i := 0; i < 7; i++ { + result ^= B[a&1] + a >>= 1 + B[1] = P[B[1]>>7] ^ (B[1] << 1) + } + result ^= B[a&1] + return byte(result) +} + +// mdsColumnMult calculates y{col} where [y0 y1 y2 y3] = MDS · [x0] +func mdsColumnMult(in byte, col int) uint32 { + mul01 := in + mul5B := gfMult(in, 0x5B, mdsPolynomial) + mulEF := gfMult(in, 0xEF, mdsPolynomial) + + switch col { + case 0: + return uint32(mul01) | uint32(mul5B)<<8 | uint32(mulEF)<<16 | uint32(mulEF)<<24 + case 1: + return uint32(mulEF) | uint32(mulEF)<<8 | uint32(mul5B)<<16 | uint32(mul01)<<24 + case 2: + return uint32(mul5B) | uint32(mulEF)<<8 | uint32(mul01)<<16 | uint32(mulEF)<<24 + case 3: + return uint32(mul5B) | uint32(mul01)<<8 | uint32(mulEF)<<16 | uint32(mul5B)<<24 + } + + panic("unreachable") +} + +// h implements the S-box generation function. See [TWOFISH] 4.3.5 +func h(in, key []byte, offset int) uint32 { + var y [4]byte + for x := range y { + y[x] = in[x] + } + switch len(key) / 8 { + case 4: + y[0] = sbox[1][y[0]] ^ key[4*(6+offset)+0] + y[1] = sbox[0][y[1]] ^ key[4*(6+offset)+1] + y[2] = sbox[0][y[2]] ^ key[4*(6+offset)+2] + y[3] = sbox[1][y[3]] ^ key[4*(6+offset)+3] + fallthrough + case 3: + y[0] = sbox[1][y[0]] ^ key[4*(4+offset)+0] + y[1] = sbox[1][y[1]] ^ key[4*(4+offset)+1] + y[2] = sbox[0][y[2]] ^ key[4*(4+offset)+2] + y[3] = sbox[0][y[3]] ^ key[4*(4+offset)+3] + fallthrough + case 2: + y[0] = sbox[1][sbox[0][sbox[0][y[0]]^key[4*(2+offset)+0]]^key[4*(0+offset)+0]] + y[1] = sbox[0][sbox[0][sbox[1][y[1]]^key[4*(2+offset)+1]]^key[4*(0+offset)+1]] + y[2] = sbox[1][sbox[1][sbox[0][y[2]]^key[4*(2+offset)+2]]^key[4*(0+offset)+2]] + y[3] = sbox[0][sbox[1][sbox[1][y[3]]^key[4*(2+offset)+3]]^key[4*(0+offset)+3]] + } + // [y0 y1 y2 y3] = MDS . [x0 x1 x2 x3] + var mdsMult uint32 + for i := range y { + mdsMult ^= mdsColumnMult(y[i], i) + } + return mdsMult +} + +// Encrypt encrypts a 16-byte block from src to dst, which may overlap. +// Note that for amounts of data larger than a block, +// it is not safe to just call Encrypt on successive blocks; +// instead, use an encryption mode like CBC (see crypto/cipher/cbc.go). +func (c *Cipher) Encrypt(dst, src []byte) { + S1 := c.s[0] + S2 := c.s[1] + S3 := c.s[2] + S4 := c.s[3] + + // Load input + ia := load32l(src[0:4]) + ib := load32l(src[4:8]) + ic := load32l(src[8:12]) + id := load32l(src[12:16]) + + // Pre-whitening + ia ^= c.k[0] + ib ^= c.k[1] + ic ^= c.k[2] + id ^= c.k[3] + + for i := 0; i < 8; i++ { + k := c.k[8+i*4 : 12+i*4] + t2 := S2[byte(ib)] ^ S3[byte(ib>>8)] ^ S4[byte(ib>>16)] ^ S1[byte(ib>>24)] + t1 := S1[byte(ia)] ^ S2[byte(ia>>8)] ^ S3[byte(ia>>16)] ^ S4[byte(ia>>24)] + t2 + ic = ror(ic^(t1+k[0]), 1) + id = rol(id, 1) ^ (t2 + t1 + k[1]) + + t2 = S2[byte(id)] ^ S3[byte(id>>8)] ^ S4[byte(id>>16)] ^ S1[byte(id>>24)] + t1 = S1[byte(ic)] ^ S2[byte(ic>>8)] ^ S3[byte(ic>>16)] ^ S4[byte(ic>>24)] + t2 + ia = ror(ia^(t1+k[2]), 1) + ib = rol(ib, 1) ^ (t2 + t1 + k[3]) + } + + // Output with "undo last swap" + ta := ic ^ c.k[4] + tb := id ^ c.k[5] + tc := ia ^ c.k[6] + td := ib ^ c.k[7] + + store32l(dst[0:4], ta) + store32l(dst[4:8], tb) + store32l(dst[8:12], tc) + store32l(dst[12:16], td) +} + +// Decrypt decrypts a 16-byte block from src to dst, which may overlap. +func (c *Cipher) Decrypt(dst, src []byte) { + S1 := c.s[0] + S2 := c.s[1] + S3 := c.s[2] + S4 := c.s[3] + + // Load input + ta := load32l(src[0:4]) + tb := load32l(src[4:8]) + tc := load32l(src[8:12]) + td := load32l(src[12:16]) + + // Undo undo final swap + ia := tc ^ c.k[6] + ib := td ^ c.k[7] + ic := ta ^ c.k[4] + id := tb ^ c.k[5] + + for i := 8; i > 0; i-- { + k := c.k[4+i*4 : 8+i*4] + t2 := S2[byte(id)] ^ S3[byte(id>>8)] ^ S4[byte(id>>16)] ^ S1[byte(id>>24)] + t1 := S1[byte(ic)] ^ S2[byte(ic>>8)] ^ S3[byte(ic>>16)] ^ S4[byte(ic>>24)] + t2 + ia = rol(ia, 1) ^ (t1 + k[2]) + ib = ror(ib^(t2+t1+k[3]), 1) + + t2 = S2[byte(ib)] ^ S3[byte(ib>>8)] ^ S4[byte(ib>>16)] ^ S1[byte(ib>>24)] + t1 = S1[byte(ia)] ^ S2[byte(ia>>8)] ^ S3[byte(ia>>16)] ^ S4[byte(ia>>24)] + t2 + ic = rol(ic, 1) ^ (t1 + k[0]) + id = ror(id^(t2+t1+k[1]), 1) + } + + // Undo pre-whitening + ia ^= c.k[0] + ib ^= c.k[1] + ic ^= c.k[2] + id ^= c.k[3] + + store32l(dst[0:4], ia) + store32l(dst[4:8], ib) + store32l(dst[8:12], ic) + store32l(dst[12:16], id) +} diff --git a/vendor/golang.org/x/crypto/xtea/block.go b/vendor/golang.org/x/crypto/xtea/block.go new file mode 100644 index 0000000..fcb4e4d --- /dev/null +++ b/vendor/golang.org/x/crypto/xtea/block.go @@ -0,0 +1,66 @@ +// 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. + +/* + Implementation adapted from Needham and Wheeler's paper: + http://www.cix.co.uk/~klockstone/xtea.pdf + + A precalculated look up table is used during encryption/decryption for values that are based purely on the key. +*/ + +package xtea + +// XTEA is based on 64 rounds. +const numRounds = 64 + +// blockToUint32 reads an 8 byte slice into two uint32s. +// The block is treated as big endian. +func blockToUint32(src []byte) (uint32, uint32) { + r0 := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3]) + r1 := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7]) + return r0, r1 +} + +// uint32ToBlock writes two uint32s into an 8 byte data block. +// Values are written as big endian. +func uint32ToBlock(v0, v1 uint32, dst []byte) { + dst[0] = byte(v0 >> 24) + dst[1] = byte(v0 >> 16) + dst[2] = byte(v0 >> 8) + dst[3] = byte(v0) + dst[4] = byte(v1 >> 24) + dst[5] = byte(v1 >> 16) + dst[6] = byte(v1 >> 8) + dst[7] = byte(v1 >> 0) +} + +// encryptBlock encrypts a single 8 byte block using XTEA. +func encryptBlock(c *Cipher, dst, src []byte) { + v0, v1 := blockToUint32(src) + + // Two rounds of XTEA applied per loop + for i := 0; i < numRounds; { + v0 += ((v1<<4 ^ v1>>5) + v1) ^ c.table[i] + i++ + v1 += ((v0<<4 ^ v0>>5) + v0) ^ c.table[i] + i++ + } + + uint32ToBlock(v0, v1, dst) +} + +// decryptBlock decrypts a single 8 byte block using XTEA. +func decryptBlock(c *Cipher, dst, src []byte) { + v0, v1 := blockToUint32(src) + + // Two rounds of XTEA applied per loop + for i := numRounds; i > 0; { + i-- + v1 -= ((v0<<4 ^ v0>>5) + v0) ^ c.table[i] + i-- + v0 -= ((v1<<4 ^ v1>>5) + v1) ^ c.table[i] + } + + uint32ToBlock(v0, v1, dst) +} diff --git a/vendor/golang.org/x/crypto/xtea/cipher.go b/vendor/golang.org/x/crypto/xtea/cipher.go new file mode 100644 index 0000000..a4c2fd0 --- /dev/null +++ b/vendor/golang.org/x/crypto/xtea/cipher.go @@ -0,0 +1,90 @@ +// 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 xtea implements XTEA encryption, as defined in Needham and Wheeler's +// 1997 technical report, "Tea extensions." +// +// XTEA is a legacy cipher and its short block size makes it vulnerable to +// birthday bound attacks (see https://sweet32.info). It should only be used +// where compatibility with legacy systems, not security, is the goal. +// +// Deprecated: any new system should use AES (from crypto/aes, if necessary in +// an AEAD mode like crypto/cipher.NewGCM) or XChaCha20-Poly1305 (from +// golang.org/x/crypto/chacha20poly1305). +package xtea // import "golang.org/x/crypto/xtea" + +// For details, see http://www.cix.co.uk/~klockstone/xtea.pdf + +import "strconv" + +// The XTEA block size in bytes. +const BlockSize = 8 + +// A Cipher is an instance of an XTEA cipher using a particular key. +type Cipher struct { + // table contains a series of precalculated values that are used each round. + table [64]uint32 +} + +type KeySizeError int + +func (k KeySizeError) Error() string { + return "crypto/xtea: invalid key size " + strconv.Itoa(int(k)) +} + +// NewCipher creates and returns a new Cipher. +// The key argument should be the XTEA key. +// XTEA only supports 128 bit (16 byte) keys. +func NewCipher(key []byte) (*Cipher, error) { + k := len(key) + switch k { + default: + return nil, KeySizeError(k) + case 16: + break + } + + c := new(Cipher) + initCipher(c, key) + + return c, nil +} + +// BlockSize returns the XTEA block size, 8 bytes. +// It is necessary to satisfy the Block interface in the +// package "crypto/cipher". +func (c *Cipher) BlockSize() int { return BlockSize } + +// Encrypt encrypts the 8 byte buffer src using the key and stores the result in dst. +// Note that for amounts of data larger than a block, +// it is not safe to just call Encrypt on successive blocks; +// instead, use an encryption mode like CBC (see crypto/cipher/cbc.go). +func (c *Cipher) Encrypt(dst, src []byte) { encryptBlock(c, dst, src) } + +// Decrypt decrypts the 8 byte buffer src using the key and stores the result in dst. +func (c *Cipher) Decrypt(dst, src []byte) { decryptBlock(c, dst, src) } + +// initCipher initializes the cipher context by creating a look up table +// of precalculated values that are based on the key. +func initCipher(c *Cipher, key []byte) { + // Load the key into four uint32s + var k [4]uint32 + for i := 0; i < len(k); i++ { + j := i << 2 // Multiply by 4 + k[i] = uint32(key[j+0])<<24 | uint32(key[j+1])<<16 | uint32(key[j+2])<<8 | uint32(key[j+3]) + } + + // Precalculate the table + const delta = 0x9E3779B9 + var sum uint32 + + // Two rounds of XTEA applied per loop + for i := 0; i < numRounds; { + c.table[i] = sum + k[sum&3] + i++ + sum += delta + c.table[i] = sum + k[(sum>>11)&3] + i++ + } +} diff --git a/vendor/golang.org/x/net/AUTHORS b/vendor/golang.org/x/net/AUTHORS new file mode 100644 index 0000000..15167cd --- /dev/null +++ b/vendor/golang.org/x/net/AUTHORS @@ -0,0 +1,3 @@ +# This source code refers to The Go Authors for copyright purposes. +# The master list of authors is in the main Go distribution, +# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/net/CONTRIBUTORS b/vendor/golang.org/x/net/CONTRIBUTORS new file mode 100644 index 0000000..1c4577e --- /dev/null +++ b/vendor/golang.org/x/net/CONTRIBUTORS @@ -0,0 +1,3 @@ +# This source code was written by the Go contributors. +# The master list of contributors is in the main Go distribution, +# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/net/LICENSE b/vendor/golang.org/x/net/LICENSE new file mode 100644 index 0000000..6a66aea --- /dev/null +++ b/vendor/golang.org/x/net/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +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 Inc. 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/net/PATENTS b/vendor/golang.org/x/net/PATENTS new file mode 100644 index 0000000..7330990 --- /dev/null +++ b/vendor/golang.org/x/net/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/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..ae62feb --- /dev/null +++ b/vendor/golang.org/x/net/bpf/doc.go @@ -0,0 +1,82 @@ +// 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..cf8947c --- /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 := int(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 := int(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/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..4bdaaaf --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/cmsghdr.go @@ -0,0 +1,12 @@ +// 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 +// +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..0d30e0a --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_bsd.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 || netbsd || openbsd +// +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..4936e8a --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_32bit.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 (arm || mips || mipsle || 386 || ppc) && linux +// +build arm mips mipsle 386 ppc +// +build 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..1ba4310 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_64bit.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 (arm64 || amd64 || ppc64 || ppc64le || mips64 || mips64le || riscv64 || s390x) && linux +// +build arm64 amd64 ppc64 ppc64le mips64 mips64le riscv64 s390x +// +build 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..d3dbe1b --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_solaris_64bit.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 amd64 && solaris +// +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..1d9f2ed --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_stub.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. + +//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !zos +// +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..aa1b062 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_unix.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. + +//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris + +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..98be146 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_zos_s390x.go @@ -0,0 +1,25 @@ +// 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 "syscall" + +func (h *cmsghdr) set(l, lvl, typ int) { + h.Len = int32(l) + h.Level = int32(lvl) + h.Type = int32(typ) +} + +func controlHeaderLen() int { + return syscall.CmsgLen(0) +} + +func controlMessageLen(dataLen int) int { + return syscall.CmsgLen(dataLen) +} + +func controlMessageSpace(dataLen int) int { + return syscall.CmsgSpace(dataLen) +} 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..5b1d50a --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/complete_dontwait.go @@ -0,0 +1,26 @@ +// 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 +// +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..be63409 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/complete_nodontwait.go @@ -0,0 +1,22 @@ +// 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 +// +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..90ab4ca --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/empty.s @@ -0,0 +1,8 @@ +// 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 +// +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..78f4129 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/error_unix.go @@ -0,0 +1,32 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos +// +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..2b8fbb3 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/iovec_32bit.go @@ -0,0 +1,20 @@ +// 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) +// +build arm mips mipsle 386 ppc +// +build 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..3dc5def --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/iovec_64bit.go @@ -0,0 +1,20 @@ +// 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 || ppc64 || ppc64le || mips64 || mips64le || riscv64 || s390x) && (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || zos) +// +build arm64 amd64 ppc64 ppc64le mips64 mips64le riscv64 s390x +// +build 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..f7da2bc --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/iovec_solaris_64bit.go @@ -0,0 +1,19 @@ +// 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 +// +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..14caf52 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/iovec_stub.go @@ -0,0 +1,12 @@ +// 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 +// +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..113e773 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/mmsghdr_stub.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 !aix && !linux && !netbsd +// +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..40ebeda --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/mmsghdr_unix.go @@ -0,0 +1,114 @@ +// 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 +// +build aix linux netbsd + +package socket + +import ( + "net" + "sync" +) + +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 +} + +var defaultMmsghdrsPool = mmsghdrsPool{ + p: sync.Pool{ + New: func() interface{} { + return new(mmsghdrsPacker) + }, + }, +} + +type mmsghdrsPool struct { + p sync.Pool +} + +func (p *mmsghdrsPool) Get() *mmsghdrsPacker { + return p.p.Get().(*mmsghdrsPacker) +} + +func (p *mmsghdrsPool) Put(packer *mmsghdrsPacker) { + p.p.Put(packer) +} 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..25f6847 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_bsd.go @@ -0,0 +1,40 @@ +// 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 +// +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..5b8e00f --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_bsdvar.go @@ -0,0 +1,17 @@ +// 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 +// +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..c3c7cc4 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_linux.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 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)) + } else { + h.Name = nil + h.Namelen = 0 + } +} + +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..b4658fb --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_linux_32bit.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 (arm || mips || mipsle || 386 || ppc) && linux +// +build arm mips mipsle 386 ppc +// +build 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..c9c592d --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_linux_64bit.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 (arm64 || amd64 || ppc64 || ppc64le || mips64 || mips64le || riscv64 || s390x) && linux +// +build arm64 amd64 ppc64 ppc64le mips64 mips64le riscv64 s390x +// +build 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..3098f5d --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_solaris_64bit.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. + +//go:build amd64 && solaris +// +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..eb79151 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_stub.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 && !zos +// +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..324e9ee --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_zos_s390x.go @@ -0,0 +1,36 @@ +// 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 +// +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..de0ad42 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/norace.go @@ -0,0 +1,13 @@ +// 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 +// +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..f0a28a6 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/race.go @@ -0,0 +1,38 @@ +// 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 +// +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..3fcb51b --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go @@ -0,0 +1,71 @@ +// 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 +// +build linux + +package socket + +import ( + "net" + "os" +) + +func (c *Conn) recvMsgs(ms []Message, flags int) (int, error) { + for i := range ms { + ms[i].raceWrite() + } + packer := defaultMmsghdrsPool.Get() + defer defaultMmsghdrsPool.Put(packer) + var parseFn func([]byte, string) (net.Addr, error) + if c.network != "tcp" { + parseFn = parseInetAddr + } + hs := packer.pack(ms, parseFn, nil) + var operr error + var n int + fn := func(s uintptr) bool { + n, operr = recvmmsg(s, hs, flags) + return ioComplete(flags, operr) + } + if err := c.c.Read(fn); err != nil { + return n, err + } + if operr != nil { + return n, os.NewSyscallError("recvmmsg", operr) + } + 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() + } + packer := defaultMmsghdrsPool.Get() + defer defaultMmsghdrsPool.Put(packer) + var marshalFn func(net.Addr, []byte) int + if c.network != "tcp" { + marshalFn = marshalInetAddr + } + hs := packer.pack(ms, nil, marshalFn) + var operr error + var n int + fn := func(s uintptr) bool { + n, operr = sendmmsg(s, hs, flags) + return ioComplete(flags, operr) + } + if err := c.c.Write(fn); err != nil { + return n, err + } + if operr != nil { + return n, os.NewSyscallError("sendmmsg", operr) + } + 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..ba53f56 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/rawconn_msg.go @@ -0,0 +1,74 @@ +// 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 +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris windows zos + +package socket + +import ( + "os" +) + +func (c *Conn) recvMsg(m *Message, flags int) error { + m.raceWrite() + var h msghdr + vs := make([]iovec, len(m.Buffers)) + var sa []byte + if c.network != "tcp" { + sa = make([]byte, sizeofSockaddrInet6) + } + h.pack(vs, m.Buffers, m.OOB, sa) + var operr error + var n int + fn := func(s uintptr) bool { + n, operr = recvmsg(s, &h, flags) + return ioComplete(flags, operr) + } + if err := c.c.Read(fn); err != nil { + return err + } + if operr != nil { + return os.NewSyscallError("recvmsg", operr) + } + if c.network != "tcp" { + var err error + m.Addr, err = parseInetAddr(sa[:], c.network) + if err != nil { + return err + } + } + m.N = n + m.NN = h.controllen() + m.Flags = h.flags() + return nil +} + +func (c *Conn) sendMsg(m *Message, flags int) error { + m.raceRead() + var h msghdr + vs := make([]iovec, len(m.Buffers)) + var sa []byte + if m.Addr != nil { + var a [sizeofSockaddrInet6]byte + n := marshalInetAddr(m.Addr, a[:]) + sa = a[:n] + } + h.pack(vs, m.Buffers, m.OOB, sa) + var operr error + var n int + fn := func(s uintptr) bool { + n, operr = sendmsg(s, &h, 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..02f3285 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/rawconn_nommsg.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 +// +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..dd78587 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/rawconn_nomsg.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 && !linux && !netbsd && !openbsd && !solaris && !windows && !zos +// +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..b6cd770 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_bsd.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 || openbsd +// +build aix darwin dragonfly freebsd openbsd + +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..5d99f23 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_const_unix.go @@ -0,0 +1,21 @@ +// 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 +// +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_linkname.go b/vendor/golang.org/x/net/internal/socket/sys_linkname.go new file mode 100644 index 0000000..21734af --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linkname.go @@ -0,0 +1,43 @@ +// 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 aix || (go1.12 && darwin) +// +build aix go1.12,darwin + +package socket + +import ( + "syscall" + "unsafe" +) + +//go:linkname syscall_getsockopt syscall.getsockopt +func syscall_getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *uint32) 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 +} + +//go:linkname syscall_setsockopt syscall.setsockopt +func syscall_setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) error + +func setsockopt(s uintptr, level, name int, b []byte) error { + return syscall_setsockopt(int(s), level, name, unsafe.Pointer(&b[0]), uintptr(len(b))) +} + +//go:linkname syscall_recvmsg syscall.recvmsg +func syscall_recvmsg(s int, msg *syscall.Msghdr, flags int) (n int, err error) + +func recvmsg(s uintptr, h *msghdr, flags int) (int, error) { + return syscall_recvmsg(int(s), (*syscall.Msghdr)(unsafe.Pointer(h)), flags) +} + +//go:linkname syscall_sendmsg syscall.sendmsg +func syscall_sendmsg(s int, msg *syscall.Msghdr, flags int) (n int, err error) + +func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { + return syscall_sendmsg(int(s), (*syscall.Msghdr)(unsafe.Pointer(h)), flags) +} 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..76f5b8a --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux.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 linux && !s390x && !386 +// +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..6512153 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_386.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. + +package socket + +import ( + "syscall" + "unsafe" +) + +const ( + sysSETSOCKOPT = 0xe + sysGETSOCKOPT = 0xf + sysSENDMSG = 0x10 + sysRECVMSG = 0x11 + 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 getsockopt(s uintptr, level, name int, b []byte) (int, error) { + l := uint32(len(b)) + _, errno := socketcall(sysGETSOCKOPT, 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 := socketcall(sysSETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)), 0) + return errnoErr(errno) +} + +func recvmsg(s uintptr, h *msghdr, flags int) (int, error) { + n, errno := socketcall(sysRECVMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) + return int(n), errnoErr(errno) +} + +func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { + n, errno := socketcall(sysSENDMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) + return int(n), errnoErr(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_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..5b128fb --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_riscv64.go @@ -0,0 +1,13 @@ +// 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 +// +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..6512153 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.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. + +package socket + +import ( + "syscall" + "unsafe" +) + +const ( + sysSETSOCKOPT = 0xe + sysGETSOCKOPT = 0xf + sysSENDMSG = 0x10 + sysRECVMSG = 0x11 + 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 getsockopt(s uintptr, level, name int, b []byte) (int, error) { + l := uint32(len(b)) + _, errno := socketcall(sysGETSOCKOPT, 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 := socketcall(sysSETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)), 0) + return errnoErr(errno) +} + +func recvmsg(s uintptr, h *msghdr, flags int) (int, error) { + n, errno := socketcall(sysRECVMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) + return int(n), errnoErr(errno) +} + +func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { + n, errno := socketcall(sysSENDMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) + return int(n), errnoErr(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..42b8f23 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_posix.go @@ -0,0 +1,185 @@ +// 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 +// +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_solaris.go b/vendor/golang.org/x/net/internal/socket/sys_solaris.go new file mode 100644 index 0000000..e79ca95 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_solaris.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. + +package socket + +import ( + "syscall" + "unsafe" +) + +//go:cgo_import_dynamic libc___xnet_getsockopt __xnet_getsockopt "libsocket.so" +//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so" +//go:cgo_import_dynamic libc___xnet_recvmsg __xnet_recvmsg "libsocket.so" +//go:cgo_import_dynamic libc___xnet_sendmsg __xnet_sendmsg "libsocket.so" + +//go:linkname procGetsockopt libc___xnet_getsockopt +//go:linkname procSetsockopt libc_setsockopt +//go:linkname procRecvmsg libc___xnet_recvmsg +//go:linkname procSendmsg libc___xnet_sendmsg + +var ( + procGetsockopt uintptr + procSetsockopt uintptr + procRecvmsg uintptr + procSendmsg uintptr +) + +func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (uintptr, uintptr, syscall.Errno) +func rawSysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (uintptr, uintptr, syscall.Errno) + +func getsockopt(s uintptr, level, name int, b []byte) (int, error) { + l := uint32(len(b)) + _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procGetsockopt)), 5, 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 := sysvicall6(uintptr(unsafe.Pointer(&procSetsockopt)), 5, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)), 0) + return errnoErr(errno) +} + +func recvmsg(s uintptr, h *msghdr, flags int) (int, error) { + n, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procRecvmsg)), 3, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) + return int(n), errnoErr(errno) +} + +func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { + n, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procSendmsg)), 3, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) + return int(n), errnoErr(errno) +} + +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_solaris_amd64.s b/vendor/golang.org/x/net/internal/socket/sys_solaris_amd64.s new file mode 100644 index 0000000..a18ac5e --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_solaris_amd64.s @@ -0,0 +1,11 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "textflag.h" + +TEXT ·sysvicall6(SB),NOSPLIT,$0-88 + JMP syscall·sysvicall6(SB) + +TEXT ·rawSysvicall6(SB),NOSPLIT,$0-88 + JMP syscall·rawSysvicall6(SB) 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..381e45e --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_stub.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 !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !windows && !zos +// +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, h *msghdr, flags int) (int, error) { + return 0, errNotImplemented +} + +func sendmsg(s uintptr, h *msghdr, 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..c98ebae --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_unix.go @@ -0,0 +1,34 @@ +// 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 dragonfly || freebsd || (linux && !s390x && !386) || netbsd || openbsd +// +build dragonfly freebsd linux,!s390x,!386 netbsd openbsd + +package socket + +import ( + "syscall" + "unsafe" +) + +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, h *msghdr, flags int) (int, error) { + n, _, errno := syscall.Syscall(syscall.SYS_RECVMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags)) + return int(n), errnoErr(errno) +} + +func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { + n, _, errno := syscall.Syscall(syscall.SYS_SENDMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags)) + return int(n), errnoErr(errno) +} 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..2de0d68 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_windows.go @@ -0,0 +1,54 @@ +// 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" + + "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, h *msghdr, flags int) (int, error) { + return 0, errNotImplemented +} + +func sendmsg(s uintptr, h *msghdr, 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..1e38b92 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_zos_s390x.go @@ -0,0 +1,38 @@ +// 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 ( + "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, h *msghdr, flags int) (int, error) { + n, _, errno := syscall_syscall(syscall.SYS___RECVMSG_A, s, uintptr(unsafe.Pointer(h)), uintptr(flags)) + return int(n), errnoErr(errno) +} + +func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { + 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..00691bd --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_aix_ppc64.go @@ -0,0 +1,40 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_aix.go + +// Added for go1.11 compatibility +//go:build aix +// +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_386.go b/vendor/golang.org/x/net/internal/socket/zsys_darwin_386.go new file mode 100644 index 0000000..5acf6db --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_darwin_386.go @@ -0,0 +1,30 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_darwin.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_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_arm.go b/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm.go new file mode 100644 index 0000000..5acf6db --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm.go @@ -0,0 +1,30 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_darwin.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_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_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_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..59b71da --- /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..c066272 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_riscv64.go @@ -0,0 +1,40 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +//go:build riscv64 +// +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_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..b7385df --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/control_bsd.go @@ -0,0 +1,44 @@ +// 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 +// +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..0e748db --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/control_pktinfo.go @@ -0,0 +1,42 @@ +// 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 +// +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..f27322c --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/control_stub.go @@ -0,0 +1,14 @@ +// 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 +// +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..2413e02 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/control_unix.go @@ -0,0 +1,76 @@ +// 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 +// +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..2458349 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/doc.go @@ -0,0 +1,244 @@ +// 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..cd4ee6e --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/icmp_stub.go @@ -0,0 +1,26 @@ +// 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 +// +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..1bb370e --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/payload_cmsg.go @@ -0,0 +1,85 @@ +// 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 +// +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..53f0794 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/payload_nocmsg.go @@ -0,0 +1,40 @@ +// 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 +// +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..eb07c1c --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sockopt_posix.go @@ -0,0 +1,72 @@ +// 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 +// +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..cf03689 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sockopt_stub.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 && !linux && !netbsd && !openbsd && !solaris && !windows && !zos +// +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..02730cd --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_aix.go @@ -0,0 +1,44 @@ +// 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 +// +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..22322b3 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_asmreq.go @@ -0,0 +1,123 @@ +// 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 +// +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..fde6401 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_asmreq_stub.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. + +//go:build !aix && !darwin && !dragonfly && !freebsd && !netbsd && !openbsd && !solaris && !windows +// +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..54eb990 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_asmreqn.go @@ -0,0 +1,45 @@ +// 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 +// +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..dcb15f2 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_asmreqn_stub.go @@ -0,0 +1,22 @@ +// 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 +// +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..fb11e32 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_bpf.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 linux +// +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..fc53a0d --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_bpf_stub.go @@ -0,0 +1,17 @@ +// 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 +// +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..e191b2f --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_bsd.go @@ -0,0 +1,42 @@ +// 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 +// +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..6a4e7ab --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_ssmreq.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. + +//go:build darwin || freebsd || linux || solaris +// +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..157159f --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_ssmreq_stub.go @@ -0,0 +1,22 @@ +// 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 +// +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..d550851 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_stub.go @@ -0,0 +1,14 @@ +// 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 +// +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..b7f2d6e --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_aix_ppc64.go @@ -0,0 +1,17 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_aix.go + +// Added for go1.11 compatibility +//go:build aix +// +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_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_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..e2edebd --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_riscv64.go @@ -0,0 +1,77 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +//go:build riscv64 +// +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..2733ddb --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go @@ -0,0 +1,51 @@ +// 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 +// +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..9c90844 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go @@ -0,0 +1,97 @@ +// 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 +// +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..b7e8643 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/control_stub.go @@ -0,0 +1,14 @@ +// 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 +// +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..63e475d --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/control_unix.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. + +//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos +// +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..1f422e7 --- /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 ture, +// the offset should be an offset in bytes into the data of where the +// checksum field is located. +func (c *dgramOpt) SetChecksum(on bool, offset int) error { + 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..e0be9d5 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/doc.go @@ -0,0 +1,243 @@ +// 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..120bf87 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/icmp_bsd.go @@ -0,0 +1,30 @@ +// 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 +// +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..d60136a --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/icmp_stub.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 && !zos +// +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..b0692e4 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/payload_cmsg.go @@ -0,0 +1,71 @@ +// 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 +// +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..cd0ff50 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/payload_nocmsg.go @@ -0,0 +1,39 @@ +// 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 +// +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..37c6287 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sockopt_posix.go @@ -0,0 +1,90 @@ +// 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 +// +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..32fd866 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sockopt_stub.go @@ -0,0 +1,47 @@ +// 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 +// +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..a47182a --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_aix.go @@ -0,0 +1,80 @@ +// 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 +// +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..6ff9950 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_asmreq.go @@ -0,0 +1,25 @@ +// 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 +// +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..485290c --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_asmreq_stub.go @@ -0,0 +1,18 @@ +// 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 +// +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..b5661fb --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_bpf.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 linux +// +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..cb00661 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_bpf_stub.go @@ -0,0 +1,17 @@ +// 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 +// +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..bde41a6 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_bsd.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. + +//go:build dragonfly || netbsd || openbsd +// +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..023488a --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_ssmreq.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. + +//go:build aix || darwin || freebsd || linux || solaris || zos +// +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..acdf2e5 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_ssmreq_stub.go @@ -0,0 +1,22 @@ +// 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 +// +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..5807bba --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_stub.go @@ -0,0 +1,14 @@ +// 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 +// +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..f604b0f --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_aix_ppc64.go @@ -0,0 +1,69 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_aix.go + +// Added for go1.11 compatibility +//go:build aix +// +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_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_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..d4f78e4 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_riscv64.go @@ -0,0 +1,77 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +//go:build riscv64 +// +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/sys/AUTHORS b/vendor/golang.org/x/sys/AUTHORS new file mode 100644 index 0000000..15167cd --- /dev/null +++ b/vendor/golang.org/x/sys/AUTHORS @@ -0,0 +1,3 @@ +# This source code refers to The Go Authors for copyright purposes. +# The master list of authors is in the main Go distribution, +# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/sys/CONTRIBUTORS b/vendor/golang.org/x/sys/CONTRIBUTORS new file mode 100644 index 0000000..1c4577e --- /dev/null +++ b/vendor/golang.org/x/sys/CONTRIBUTORS @@ -0,0 +1,3 @@ +# This source code was written by the Go contributors. +# The master list of contributors is in the main Go distribution, +# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/sys/LICENSE b/vendor/golang.org/x/sys/LICENSE new file mode 100644 index 0000000..6a66aea --- /dev/null +++ b/vendor/golang.org/x/sys/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +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 Inc. 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/sys/PATENTS b/vendor/golang.org/x/sys/PATENTS new file mode 100644 index 0000000..7330990 --- /dev/null +++ b/vendor/golang.org/x/sys/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/sys/cpu/asm_aix_ppc64.s b/vendor/golang.org/x/sys/cpu/asm_aix_ppc64.s new file mode 100644 index 0000000..db9171c --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/asm_aix_ppc64.s @@ -0,0 +1,18 @@ +// 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 +// +build gc + +#include "textflag.h" + +// +// System calls for ppc64, AIX are implemented in runtime/syscall_aix.go +// + +TEXT ·syscall6(SB),NOSPLIT,$0-88 + JMP syscall·syscall6(SB) + +TEXT ·rawSyscall6(SB),NOSPLIT,$0-88 + JMP syscall·rawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/cpu/byteorder.go b/vendor/golang.org/x/sys/cpu/byteorder.go new file mode 100644 index 0000000..dcbb14e --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/byteorder.go @@ -0,0 +1,65 @@ +// 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 cpu + +import ( + "runtime" +) + +// byteOrder is a subset of encoding/binary.ByteOrder. +type byteOrder interface { + Uint32([]byte) uint32 + Uint64([]byte) uint64 +} + +type littleEndian struct{} +type bigEndian struct{} + +func (littleEndian) Uint32(b []byte) uint32 { + _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 + return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 +} + +func (littleEndian) Uint64(b []byte) uint64 { + _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | + uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 +} + +func (bigEndian) Uint32(b []byte) uint32 { + _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 + return uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24 +} + +func (bigEndian) Uint64(b []byte) uint64 { + _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | + uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56 +} + +// hostByteOrder returns littleEndian on little-endian machines and +// bigEndian on big-endian machines. +func hostByteOrder() byteOrder { + switch runtime.GOARCH { + case "386", "amd64", "amd64p32", + "alpha", + "arm", "arm64", + "mipsle", "mips64le", "mips64p32le", + "nios2", + "ppc64le", + "riscv", "riscv64", + "sh": + return littleEndian{} + case "armbe", "arm64be", + "m68k", + "mips", "mips64", "mips64p32", + "ppc", "ppc64", + "s390", "s390x", + "shbe", + "sparc", "sparc64": + return bigEndian{} + } + panic("unknown architecture") +} diff --git a/vendor/golang.org/x/sys/cpu/cpu.go b/vendor/golang.org/x/sys/cpu/cpu.go new file mode 100644 index 0000000..b56886f --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu.go @@ -0,0 +1,287 @@ +// 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 cpu implements processor feature detection for +// various CPU architectures. +package cpu + +import ( + "os" + "strings" +) + +// Initialized reports whether the CPU features were initialized. +// +// For some GOOS/GOARCH combinations initialization of the CPU features depends +// on reading an operating specific file, e.g. /proc/self/auxv on linux/arm +// Initialized will report false if reading the file fails. +var Initialized bool + +// CacheLinePad is used to pad structs to avoid false sharing. +type CacheLinePad struct{ _ [cacheLineSize]byte } + +// X86 contains the supported CPU features of the +// current X86/AMD64 platform. If the current platform +// is not X86/AMD64 then all feature flags are false. +// +// X86 is padded to avoid false sharing. Further the HasAVX +// and HasAVX2 are only set if the OS supports XMM and YMM +// registers in addition to the CPUID feature bit being set. +var X86 struct { + _ CacheLinePad + HasAES bool // AES hardware implementation (AES NI) + HasADX bool // Multi-precision add-carry instruction extensions + HasAVX bool // Advanced vector extension + HasAVX2 bool // Advanced vector extension 2 + HasAVX512 bool // Advanced vector extension 512 + HasAVX512F bool // Advanced vector extension 512 Foundation Instructions + HasAVX512CD bool // Advanced vector extension 512 Conflict Detection Instructions + HasAVX512ER bool // Advanced vector extension 512 Exponential and Reciprocal Instructions + HasAVX512PF bool // Advanced vector extension 512 Prefetch Instructions Instructions + HasAVX512VL bool // Advanced vector extension 512 Vector Length Extensions + HasAVX512BW bool // Advanced vector extension 512 Byte and Word Instructions + HasAVX512DQ bool // Advanced vector extension 512 Doubleword and Quadword Instructions + HasAVX512IFMA bool // Advanced vector extension 512 Integer Fused Multiply Add + HasAVX512VBMI bool // Advanced vector extension 512 Vector Byte Manipulation Instructions + HasAVX5124VNNIW bool // Advanced vector extension 512 Vector Neural Network Instructions Word variable precision + HasAVX5124FMAPS bool // Advanced vector extension 512 Fused Multiply Accumulation Packed Single precision + HasAVX512VPOPCNTDQ bool // Advanced vector extension 512 Double and quad word population count instructions + HasAVX512VPCLMULQDQ bool // Advanced vector extension 512 Vector carry-less multiply operations + HasAVX512VNNI bool // Advanced vector extension 512 Vector Neural Network Instructions + HasAVX512GFNI bool // Advanced vector extension 512 Galois field New Instructions + HasAVX512VAES bool // Advanced vector extension 512 Vector AES instructions + HasAVX512VBMI2 bool // Advanced vector extension 512 Vector Byte Manipulation Instructions 2 + HasAVX512BITALG bool // Advanced vector extension 512 Bit Algorithms + HasAVX512BF16 bool // Advanced vector extension 512 BFloat16 Instructions + HasBMI1 bool // Bit manipulation instruction set 1 + HasBMI2 bool // Bit manipulation instruction set 2 + HasCX16 bool // Compare and exchange 16 Bytes + HasERMS bool // Enhanced REP for MOVSB and STOSB + HasFMA bool // Fused-multiply-add instructions + HasOSXSAVE bool // OS supports XSAVE/XRESTOR for saving/restoring XMM registers. + HasPCLMULQDQ bool // PCLMULQDQ instruction - most often used for AES-GCM + HasPOPCNT bool // Hamming weight instruction POPCNT. + HasRDRAND bool // RDRAND instruction (on-chip random number generator) + HasRDSEED bool // RDSEED instruction (on-chip random number generator) + HasSSE2 bool // Streaming SIMD extension 2 (always available on amd64) + HasSSE3 bool // Streaming SIMD extension 3 + HasSSSE3 bool // Supplemental streaming SIMD extension 3 + HasSSE41 bool // Streaming SIMD extension 4 and 4.1 + HasSSE42 bool // Streaming SIMD extension 4 and 4.2 + _ CacheLinePad +} + +// ARM64 contains the supported CPU features of the +// current ARMv8(aarch64) platform. If the current platform +// is not arm64 then all feature flags are false. +var ARM64 struct { + _ CacheLinePad + HasFP bool // Floating-point instruction set (always available) + HasASIMD bool // Advanced SIMD (always available) + HasEVTSTRM bool // Event stream support + HasAES bool // AES hardware implementation + HasPMULL bool // Polynomial multiplication instruction set + HasSHA1 bool // SHA1 hardware implementation + HasSHA2 bool // SHA2 hardware implementation + HasCRC32 bool // CRC32 hardware implementation + HasATOMICS bool // Atomic memory operation instruction set + HasFPHP bool // Half precision floating-point instruction set + HasASIMDHP bool // Advanced SIMD half precision instruction set + HasCPUID bool // CPUID identification scheme registers + HasASIMDRDM bool // Rounding double multiply add/subtract instruction set + HasJSCVT bool // Javascript conversion from floating-point to integer + HasFCMA bool // Floating-point multiplication and addition of complex numbers + HasLRCPC bool // Release Consistent processor consistent support + HasDCPOP bool // Persistent memory support + HasSHA3 bool // SHA3 hardware implementation + HasSM3 bool // SM3 hardware implementation + HasSM4 bool // SM4 hardware implementation + HasASIMDDP bool // Advanced SIMD double precision instruction set + HasSHA512 bool // SHA512 hardware implementation + HasSVE bool // Scalable Vector Extensions + HasASIMDFHM bool // Advanced SIMD multiplication FP16 to FP32 + _ CacheLinePad +} + +// ARM contains the supported CPU features of the current ARM (32-bit) platform. +// All feature flags are false if: +// 1. the current platform is not arm, or +// 2. the current operating system is not Linux. +var ARM struct { + _ CacheLinePad + HasSWP bool // SWP instruction support + HasHALF bool // Half-word load and store support + HasTHUMB bool // ARM Thumb instruction set + Has26BIT bool // Address space limited to 26-bits + HasFASTMUL bool // 32-bit operand, 64-bit result multiplication support + HasFPA bool // Floating point arithmetic support + HasVFP bool // Vector floating point support + HasEDSP bool // DSP Extensions support + HasJAVA bool // Java instruction set + HasIWMMXT bool // Intel Wireless MMX technology support + HasCRUNCH bool // MaverickCrunch context switching and handling + HasTHUMBEE bool // Thumb EE instruction set + HasNEON bool // NEON instruction set + HasVFPv3 bool // Vector floating point version 3 support + HasVFPv3D16 bool // Vector floating point version 3 D8-D15 + HasTLS bool // Thread local storage support + HasVFPv4 bool // Vector floating point version 4 support + HasIDIVA bool // Integer divide instruction support in ARM mode + HasIDIVT bool // Integer divide instruction support in Thumb mode + HasVFPD32 bool // Vector floating point version 3 D15-D31 + HasLPAE bool // Large Physical Address Extensions + HasEVTSTRM bool // Event stream support + HasAES bool // AES hardware implementation + HasPMULL bool // Polynomial multiplication instruction set + HasSHA1 bool // SHA1 hardware implementation + HasSHA2 bool // SHA2 hardware implementation + HasCRC32 bool // CRC32 hardware implementation + _ 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. +var MIPS64X struct { + _ CacheLinePad + HasMSA bool // MIPS SIMD architecture + _ CacheLinePad +} + +// PPC64 contains the supported CPU features of the current ppc64/ppc64le platforms. +// If the current platform is not ppc64/ppc64le then all feature flags are false. +// +// For ppc64/ppc64le, it is safe to check only for ISA level starting on ISA v3.00, +// since there are no optional categories. There are some exceptions that also +// require kernel support to work (DARN, SCV), so there are feature bits for +// those as well. The struct is padded to avoid false sharing. +var PPC64 struct { + _ CacheLinePad + HasDARN bool // Hardware random number generator (requires kernel enablement) + HasSCV bool // Syscall vectored (requires kernel enablement) + IsPOWER8 bool // ISA v2.07 (POWER8) + IsPOWER9 bool // ISA v3.00 (POWER9), implies IsPOWER8 + _ CacheLinePad +} + +// S390X contains the supported CPU features of the current IBM Z +// (s390x) platform. If the current platform is not IBM Z then all +// feature flags are false. +// +// S390X is padded to avoid false sharing. Further HasVX is only set +// if the OS supports vector registers in addition to the STFLE +// feature bit being set. +var S390X struct { + _ CacheLinePad + HasZARCH bool // z/Architecture mode is active [mandatory] + HasSTFLE bool // store facility list extended + HasLDISP bool // long (20-bit) displacements + HasEIMM bool // 32-bit immediates + HasDFP bool // decimal floating point + HasETF3EH bool // ETF-3 enhanced + HasMSA bool // message security assist (CPACF) + HasAES bool // KM-AES{128,192,256} functions + HasAESCBC bool // KMC-AES{128,192,256} functions + HasAESCTR bool // KMCTR-AES{128,192,256} functions + HasAESGCM bool // KMA-GCM-AES{128,192,256} functions + HasGHASH bool // KIMD-GHASH function + HasSHA1 bool // K{I,L}MD-SHA-1 functions + HasSHA256 bool // K{I,L}MD-SHA-256 functions + HasSHA512 bool // K{I,L}MD-SHA-512 functions + HasSHA3 bool // K{I,L}MD-SHA3-{224,256,384,512} and K{I,L}MD-SHAKE-{128,256} functions + HasVX bool // vector facility + HasVXE bool // vector-enhancements facility 1 + _ CacheLinePad +} + +func init() { + archInit() + initOptions() + processOptions() +} + +// options contains the cpu debug options that can be used in GODEBUG. +// Options are arch dependent and are added by the arch specific initOptions functions. +// Features that are mandatory for the specific GOARCH should have the Required field set +// (e.g. SSE2 on amd64). +var options []option + +// Option names should be lower case. e.g. avx instead of AVX. +type option struct { + Name string + Feature *bool + Specified bool // whether feature value was specified in GODEBUG + Enable bool // whether feature should be enabled + Required bool // whether feature is mandatory and can not be disabled +} + +func processOptions() { + env := os.Getenv("GODEBUG") +field: + for env != "" { + field := "" + i := strings.IndexByte(env, ',') + if i < 0 { + field, env = env, "" + } else { + field, env = env[:i], env[i+1:] + } + if len(field) < 4 || field[:4] != "cpu." { + continue + } + i = strings.IndexByte(field, '=') + if i < 0 { + print("GODEBUG sys/cpu: no value specified for \"", field, "\"\n") + continue + } + key, value := field[4:i], field[i+1:] // e.g. "SSE2", "on" + + var enable bool + switch value { + case "on": + enable = true + case "off": + enable = false + default: + print("GODEBUG sys/cpu: value \"", value, "\" not supported for cpu option \"", key, "\"\n") + continue field + } + + if key == "all" { + for i := range options { + options[i].Specified = true + options[i].Enable = enable || options[i].Required + } + continue field + } + + for i := range options { + if options[i].Name == key { + options[i].Specified = true + options[i].Enable = enable + continue field + } + } + + print("GODEBUG sys/cpu: unknown cpu feature \"", key, "\"\n") + } + + for _, o := range options { + if !o.Specified { + continue + } + + if o.Enable && !*o.Feature { + print("GODEBUG sys/cpu: can not enable \"", o.Name, "\", missing CPU support\n") + continue + } + + if !o.Enable && o.Required { + print("GODEBUG sys/cpu: can not disable \"", o.Name, "\", required CPU feature\n") + continue + } + + *o.Feature = o.Enable + } +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_aix.go b/vendor/golang.org/x/sys/cpu/cpu_aix.go new file mode 100644 index 0000000..8aaeef5 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_aix.go @@ -0,0 +1,34 @@ +// 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 +// +build aix + +package cpu + +const ( + // getsystemcfg constants + _SC_IMPL = 2 + _IMPL_POWER8 = 0x10000 + _IMPL_POWER9 = 0x20000 +) + +func archInit() { + impl := getsystemcfg(_SC_IMPL) + if impl&_IMPL_POWER8 != 0 { + PPC64.IsPOWER8 = true + } + if impl&_IMPL_POWER9 != 0 { + PPC64.IsPOWER8 = true + PPC64.IsPOWER9 = true + } + + Initialized = true +} + +func getsystemcfg(label int) (n uint64) { + r0, _ := callgetsystemcfg(label) + n = uint64(r0) + return +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_arm.go b/vendor/golang.org/x/sys/cpu/cpu_arm.go new file mode 100644 index 0000000..301b752 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_arm.go @@ -0,0 +1,73 @@ +// 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 cpu + +const cacheLineSize = 32 + +// HWCAP/HWCAP2 bits. +// These are specific to Linux. +const ( + hwcap_SWP = 1 << 0 + hwcap_HALF = 1 << 1 + hwcap_THUMB = 1 << 2 + hwcap_26BIT = 1 << 3 + hwcap_FAST_MULT = 1 << 4 + hwcap_FPA = 1 << 5 + hwcap_VFP = 1 << 6 + hwcap_EDSP = 1 << 7 + hwcap_JAVA = 1 << 8 + hwcap_IWMMXT = 1 << 9 + hwcap_CRUNCH = 1 << 10 + hwcap_THUMBEE = 1 << 11 + hwcap_NEON = 1 << 12 + hwcap_VFPv3 = 1 << 13 + hwcap_VFPv3D16 = 1 << 14 + hwcap_TLS = 1 << 15 + hwcap_VFPv4 = 1 << 16 + hwcap_IDIVA = 1 << 17 + hwcap_IDIVT = 1 << 18 + hwcap_VFPD32 = 1 << 19 + hwcap_LPAE = 1 << 20 + hwcap_EVTSTRM = 1 << 21 + + hwcap2_AES = 1 << 0 + hwcap2_PMULL = 1 << 1 + hwcap2_SHA1 = 1 << 2 + hwcap2_SHA2 = 1 << 3 + hwcap2_CRC32 = 1 << 4 +) + +func initOptions() { + options = []option{ + {Name: "pmull", Feature: &ARM.HasPMULL}, + {Name: "sha1", Feature: &ARM.HasSHA1}, + {Name: "sha2", Feature: &ARM.HasSHA2}, + {Name: "swp", Feature: &ARM.HasSWP}, + {Name: "thumb", Feature: &ARM.HasTHUMB}, + {Name: "thumbee", Feature: &ARM.HasTHUMBEE}, + {Name: "tls", Feature: &ARM.HasTLS}, + {Name: "vfp", Feature: &ARM.HasVFP}, + {Name: "vfpd32", Feature: &ARM.HasVFPD32}, + {Name: "vfpv3", Feature: &ARM.HasVFPv3}, + {Name: "vfpv3d16", Feature: &ARM.HasVFPv3D16}, + {Name: "vfpv4", Feature: &ARM.HasVFPv4}, + {Name: "half", Feature: &ARM.HasHALF}, + {Name: "26bit", Feature: &ARM.Has26BIT}, + {Name: "fastmul", Feature: &ARM.HasFASTMUL}, + {Name: "fpa", Feature: &ARM.HasFPA}, + {Name: "edsp", Feature: &ARM.HasEDSP}, + {Name: "java", Feature: &ARM.HasJAVA}, + {Name: "iwmmxt", Feature: &ARM.HasIWMMXT}, + {Name: "crunch", Feature: &ARM.HasCRUNCH}, + {Name: "neon", Feature: &ARM.HasNEON}, + {Name: "idivt", Feature: &ARM.HasIDIVT}, + {Name: "idiva", Feature: &ARM.HasIDIVA}, + {Name: "lpae", Feature: &ARM.HasLPAE}, + {Name: "evtstrm", Feature: &ARM.HasEVTSTRM}, + {Name: "aes", Feature: &ARM.HasAES}, + {Name: "crc32", Feature: &ARM.HasCRC32}, + } + +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_arm64.go new file mode 100644 index 0000000..87dd5e3 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_arm64.go @@ -0,0 +1,172 @@ +// 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 cpu + +import "runtime" + +const cacheLineSize = 64 + +func initOptions() { + options = []option{ + {Name: "fp", Feature: &ARM64.HasFP}, + {Name: "asimd", Feature: &ARM64.HasASIMD}, + {Name: "evstrm", Feature: &ARM64.HasEVTSTRM}, + {Name: "aes", Feature: &ARM64.HasAES}, + {Name: "fphp", Feature: &ARM64.HasFPHP}, + {Name: "jscvt", Feature: &ARM64.HasJSCVT}, + {Name: "lrcpc", Feature: &ARM64.HasLRCPC}, + {Name: "pmull", Feature: &ARM64.HasPMULL}, + {Name: "sha1", Feature: &ARM64.HasSHA1}, + {Name: "sha2", Feature: &ARM64.HasSHA2}, + {Name: "sha3", Feature: &ARM64.HasSHA3}, + {Name: "sha512", Feature: &ARM64.HasSHA512}, + {Name: "sm3", Feature: &ARM64.HasSM3}, + {Name: "sm4", Feature: &ARM64.HasSM4}, + {Name: "sve", Feature: &ARM64.HasSVE}, + {Name: "crc32", Feature: &ARM64.HasCRC32}, + {Name: "atomics", Feature: &ARM64.HasATOMICS}, + {Name: "asimdhp", Feature: &ARM64.HasASIMDHP}, + {Name: "cpuid", Feature: &ARM64.HasCPUID}, + {Name: "asimrdm", Feature: &ARM64.HasASIMDRDM}, + {Name: "fcma", Feature: &ARM64.HasFCMA}, + {Name: "dcpop", Feature: &ARM64.HasDCPOP}, + {Name: "asimddp", Feature: &ARM64.HasASIMDDP}, + {Name: "asimdfhm", Feature: &ARM64.HasASIMDFHM}, + } +} + +func archInit() { + switch runtime.GOOS { + case "freebsd": + readARM64Registers() + case "linux", "netbsd": + doinit() + default: + // Most platforms don't seem to allow reading these registers. + // + // OpenBSD: + // See https://golang.org/issue/31746 + setMinimalFeatures() + } +} + +// setMinimalFeatures fakes the minimal ARM64 features expected by +// TestARM64minimalFeatures. +func setMinimalFeatures() { + ARM64.HasASIMD = true + ARM64.HasFP = true +} + +func readARM64Registers() { + Initialized = true + + parseARM64SystemRegisters(getisar0(), getisar1(), getpfr0()) +} + +func parseARM64SystemRegisters(isar0, isar1, pfr0 uint64) { + // ID_AA64ISAR0_EL1 + switch extractBits(isar0, 4, 7) { + case 1: + ARM64.HasAES = true + case 2: + ARM64.HasAES = true + ARM64.HasPMULL = true + } + + switch extractBits(isar0, 8, 11) { + case 1: + ARM64.HasSHA1 = true + } + + switch extractBits(isar0, 12, 15) { + case 1: + ARM64.HasSHA2 = true + case 2: + ARM64.HasSHA2 = true + ARM64.HasSHA512 = true + } + + switch extractBits(isar0, 16, 19) { + case 1: + ARM64.HasCRC32 = true + } + + switch extractBits(isar0, 20, 23) { + case 2: + ARM64.HasATOMICS = true + } + + switch extractBits(isar0, 28, 31) { + case 1: + ARM64.HasASIMDRDM = true + } + + switch extractBits(isar0, 32, 35) { + case 1: + ARM64.HasSHA3 = true + } + + switch extractBits(isar0, 36, 39) { + case 1: + ARM64.HasSM3 = true + } + + switch extractBits(isar0, 40, 43) { + case 1: + ARM64.HasSM4 = true + } + + switch extractBits(isar0, 44, 47) { + case 1: + ARM64.HasASIMDDP = true + } + + // ID_AA64ISAR1_EL1 + switch extractBits(isar1, 0, 3) { + case 1: + ARM64.HasDCPOP = true + } + + switch extractBits(isar1, 12, 15) { + case 1: + ARM64.HasJSCVT = true + } + + switch extractBits(isar1, 16, 19) { + case 1: + ARM64.HasFCMA = true + } + + switch extractBits(isar1, 20, 23) { + case 1: + ARM64.HasLRCPC = true + } + + // ID_AA64PFR0_EL1 + switch extractBits(pfr0, 16, 19) { + case 0: + ARM64.HasFP = true + case 1: + ARM64.HasFP = true + ARM64.HasFPHP = true + } + + switch extractBits(pfr0, 20, 23) { + case 0: + ARM64.HasASIMD = true + case 1: + ARM64.HasASIMD = true + ARM64.HasASIMDHP = true + } + + switch extractBits(pfr0, 32, 35) { + case 1: + ARM64.HasSVE = true + } +} + +func extractBits(data uint64, start, end uint) uint { + return (uint)(data>>start) & ((1 << (end - start + 1)) - 1) +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_arm64.s b/vendor/golang.org/x/sys/cpu/cpu_arm64.s new file mode 100644 index 0000000..c61f95a --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_arm64.s @@ -0,0 +1,32 @@ +// 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 +// +build gc + +#include "textflag.h" + +// func getisar0() uint64 +TEXT ·getisar0(SB),NOSPLIT,$0-8 + // get Instruction Set Attributes 0 into x0 + // mrs x0, ID_AA64ISAR0_EL1 = d5380600 + WORD $0xd5380600 + MOVD R0, ret+0(FP) + RET + +// func getisar1() uint64 +TEXT ·getisar1(SB),NOSPLIT,$0-8 + // get Instruction Set Attributes 1 into x0 + // mrs x0, ID_AA64ISAR1_EL1 = d5380620 + WORD $0xd5380620 + MOVD R0, ret+0(FP) + RET + +// func getpfr0() uint64 +TEXT ·getpfr0(SB),NOSPLIT,$0-8 + // get Processor Feature Register 0 into x0 + // mrs x0, ID_AA64PFR0_EL1 = d5380400 + WORD $0xd5380400 + MOVD R0, ret+0(FP) + RET diff --git a/vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go new file mode 100644 index 0000000..ccf542a --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_gc_arm64.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 gc +// +build gc + +package cpu + +func getisar0() uint64 +func getisar1() uint64 +func getpfr0() uint64 diff --git a/vendor/golang.org/x/sys/cpu/cpu_gc_s390x.go b/vendor/golang.org/x/sys/cpu/cpu_gc_s390x.go new file mode 100644 index 0000000..0af2f24 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_gc_s390x.go @@ -0,0 +1,22 @@ +// 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 +// +build gc + +package cpu + +// haveAsmFunctions reports whether the other functions in this file can +// be safely called. +func haveAsmFunctions() bool { return true } + +// The following feature detection functions are defined in cpu_s390x.s. +// They are likely to be expensive to call so the results should be cached. +func stfle() facilityList +func kmQuery() queryResult +func kmcQuery() queryResult +func kmctrQuery() queryResult +func kmaQuery() queryResult +func kimdQuery() queryResult +func klmdQuery() queryResult diff --git a/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go b/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go new file mode 100644 index 0000000..fa7cdb9 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go @@ -0,0 +1,17 @@ +// 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 (386 || amd64 || amd64p32) && gc +// +build 386 amd64 amd64p32 +// +build gc + +package cpu + +// cpuid is implemented in cpu_x86.s for gc compiler +// and in cpu_gccgo.c for gccgo. +func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) + +// xgetbv with ecx = 0 is implemented in cpu_x86.s for gc compiler +// and in cpu_gccgo.c for gccgo. +func xgetbv() (eax, edx uint32) diff --git a/vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go new file mode 100644 index 0000000..2aff318 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.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 gccgo +// +build gccgo + +package cpu + +func getisar0() uint64 { return 0 } +func getisar1() uint64 { return 0 } +func getpfr0() uint64 { return 0 } diff --git a/vendor/golang.org/x/sys/cpu/cpu_gccgo_s390x.go b/vendor/golang.org/x/sys/cpu/cpu_gccgo_s390x.go new file mode 100644 index 0000000..4bfbda6 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_gccgo_s390x.go @@ -0,0 +1,23 @@ +// 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 gccgo +// +build gccgo + +package cpu + +// haveAsmFunctions reports whether the other functions in this file can +// be safely called. +func haveAsmFunctions() bool { return false } + +// TODO(mundaym): the following feature detection functions are currently +// stubs. See https://golang.org/cl/162887 for how to fix this. +// They are likely to be expensive to call so the results should be cached. +func stfle() facilityList { panic("not implemented for gccgo") } +func kmQuery() queryResult { panic("not implemented for gccgo") } +func kmcQuery() queryResult { panic("not implemented for gccgo") } +func kmctrQuery() queryResult { panic("not implemented for gccgo") } +func kmaQuery() queryResult { panic("not implemented for gccgo") } +func kimdQuery() queryResult { panic("not implemented for gccgo") } +func klmdQuery() queryResult { panic("not implemented for gccgo") } diff --git a/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c b/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c new file mode 100644 index 0000000..e363c7d --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c @@ -0,0 +1,43 @@ +// 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. + +// +build 386 amd64 amd64p32 +// +build gccgo + +#include +#include + +// Need to wrap __get_cpuid_count because it's declared as static. +int +gccgoGetCpuidCount(uint32_t leaf, uint32_t subleaf, + uint32_t *eax, uint32_t *ebx, + uint32_t *ecx, uint32_t *edx) +{ + return __get_cpuid_count(leaf, subleaf, eax, ebx, ecx, edx); +} + +// xgetbv reads the contents of an XCR (Extended Control Register) +// specified in the ECX register into registers EDX:EAX. +// Currently, the only supported value for XCR is 0. +// +// TODO: Replace with a better alternative: +// +// #include +// +// #pragma GCC target("xsave") +// +// void gccgoXgetbv(uint32_t *eax, uint32_t *edx) { +// unsigned long long x = _xgetbv(0); +// *eax = x & 0xffffffff; +// *edx = (x >> 32) & 0xffffffff; +// } +// +// Note that _xgetbv is defined starting with GCC 8. +void +gccgoXgetbv(uint32_t *eax, uint32_t *edx) +{ + __asm(" xorl %%ecx, %%ecx\n" + " xgetbv" + : "=a"(*eax), "=d"(*edx)); +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go b/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go new file mode 100644 index 0000000..863d415 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go @@ -0,0 +1,33 @@ +// 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 (386 || amd64 || amd64p32) && gccgo +// +build 386 amd64 amd64p32 +// +build gccgo + +package cpu + +//extern gccgoGetCpuidCount +func gccgoGetCpuidCount(eaxArg, ecxArg uint32, eax, ebx, ecx, edx *uint32) + +func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) { + var a, b, c, d uint32 + gccgoGetCpuidCount(eaxArg, ecxArg, &a, &b, &c, &d) + return a, b, c, d +} + +//extern gccgoXgetbv +func gccgoXgetbv(eax, edx *uint32) + +func xgetbv() (eax, edx uint32) { + var a, d uint32 + gccgoXgetbv(&a, &d) + return a, d +} + +// gccgo doesn't build on Darwin, per: +// https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/gcc.rb#L76 +func darwinSupportsAVX512() bool { + return false +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux.go b/vendor/golang.org/x/sys/cpu/cpu_linux.go new file mode 100644 index 0000000..159a686 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_linux.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 !386 && !amd64 && !amd64p32 && !arm64 +// +build !386,!amd64,!amd64p32,!arm64 + +package cpu + +func archInit() { + if err := readHWCAP(); err != nil { + return + } + doinit() + Initialized = true +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_arm.go b/vendor/golang.org/x/sys/cpu/cpu_linux_arm.go new file mode 100644 index 0000000..2057006 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_arm.go @@ -0,0 +1,39 @@ +// 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 cpu + +func doinit() { + ARM.HasSWP = isSet(hwCap, hwcap_SWP) + ARM.HasHALF = isSet(hwCap, hwcap_HALF) + ARM.HasTHUMB = isSet(hwCap, hwcap_THUMB) + ARM.Has26BIT = isSet(hwCap, hwcap_26BIT) + ARM.HasFASTMUL = isSet(hwCap, hwcap_FAST_MULT) + ARM.HasFPA = isSet(hwCap, hwcap_FPA) + ARM.HasVFP = isSet(hwCap, hwcap_VFP) + ARM.HasEDSP = isSet(hwCap, hwcap_EDSP) + ARM.HasJAVA = isSet(hwCap, hwcap_JAVA) + ARM.HasIWMMXT = isSet(hwCap, hwcap_IWMMXT) + ARM.HasCRUNCH = isSet(hwCap, hwcap_CRUNCH) + ARM.HasTHUMBEE = isSet(hwCap, hwcap_THUMBEE) + ARM.HasNEON = isSet(hwCap, hwcap_NEON) + ARM.HasVFPv3 = isSet(hwCap, hwcap_VFPv3) + ARM.HasVFPv3D16 = isSet(hwCap, hwcap_VFPv3D16) + ARM.HasTLS = isSet(hwCap, hwcap_TLS) + ARM.HasVFPv4 = isSet(hwCap, hwcap_VFPv4) + ARM.HasIDIVA = isSet(hwCap, hwcap_IDIVA) + ARM.HasIDIVT = isSet(hwCap, hwcap_IDIVT) + ARM.HasVFPD32 = isSet(hwCap, hwcap_VFPD32) + ARM.HasLPAE = isSet(hwCap, hwcap_LPAE) + ARM.HasEVTSTRM = isSet(hwCap, hwcap_EVTSTRM) + ARM.HasAES = isSet(hwCap2, hwcap2_AES) + ARM.HasPMULL = isSet(hwCap2, hwcap2_PMULL) + ARM.HasSHA1 = isSet(hwCap2, hwcap2_SHA1) + ARM.HasSHA2 = isSet(hwCap2, hwcap2_SHA2) + ARM.HasCRC32 = isSet(hwCap2, hwcap2_CRC32) +} + +func isSet(hwc uint, value uint) bool { + return hwc&value != 0 +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go new file mode 100644 index 0000000..79a38a0 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go @@ -0,0 +1,71 @@ +// 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 cpu + +// HWCAP/HWCAP2 bits. These are exposed by Linux. +const ( + hwcap_FP = 1 << 0 + hwcap_ASIMD = 1 << 1 + hwcap_EVTSTRM = 1 << 2 + hwcap_AES = 1 << 3 + hwcap_PMULL = 1 << 4 + hwcap_SHA1 = 1 << 5 + hwcap_SHA2 = 1 << 6 + hwcap_CRC32 = 1 << 7 + hwcap_ATOMICS = 1 << 8 + hwcap_FPHP = 1 << 9 + hwcap_ASIMDHP = 1 << 10 + hwcap_CPUID = 1 << 11 + hwcap_ASIMDRDM = 1 << 12 + hwcap_JSCVT = 1 << 13 + hwcap_FCMA = 1 << 14 + hwcap_LRCPC = 1 << 15 + hwcap_DCPOP = 1 << 16 + hwcap_SHA3 = 1 << 17 + hwcap_SM3 = 1 << 18 + hwcap_SM4 = 1 << 19 + hwcap_ASIMDDP = 1 << 20 + hwcap_SHA512 = 1 << 21 + hwcap_SVE = 1 << 22 + hwcap_ASIMDFHM = 1 << 23 +) + +func doinit() { + if err := readHWCAP(); err != nil { + // failed to read /proc/self/auxv, try reading registers directly + readARM64Registers() + return + } + + // HWCAP feature bits + ARM64.HasFP = isSet(hwCap, hwcap_FP) + ARM64.HasASIMD = isSet(hwCap, hwcap_ASIMD) + ARM64.HasEVTSTRM = isSet(hwCap, hwcap_EVTSTRM) + ARM64.HasAES = isSet(hwCap, hwcap_AES) + ARM64.HasPMULL = isSet(hwCap, hwcap_PMULL) + ARM64.HasSHA1 = isSet(hwCap, hwcap_SHA1) + ARM64.HasSHA2 = isSet(hwCap, hwcap_SHA2) + ARM64.HasCRC32 = isSet(hwCap, hwcap_CRC32) + ARM64.HasATOMICS = isSet(hwCap, hwcap_ATOMICS) + ARM64.HasFPHP = isSet(hwCap, hwcap_FPHP) + ARM64.HasASIMDHP = isSet(hwCap, hwcap_ASIMDHP) + ARM64.HasCPUID = isSet(hwCap, hwcap_CPUID) + ARM64.HasASIMDRDM = isSet(hwCap, hwcap_ASIMDRDM) + ARM64.HasJSCVT = isSet(hwCap, hwcap_JSCVT) + ARM64.HasFCMA = isSet(hwCap, hwcap_FCMA) + ARM64.HasLRCPC = isSet(hwCap, hwcap_LRCPC) + ARM64.HasDCPOP = isSet(hwCap, hwcap_DCPOP) + ARM64.HasSHA3 = isSet(hwCap, hwcap_SHA3) + ARM64.HasSM3 = isSet(hwCap, hwcap_SM3) + ARM64.HasSM4 = isSet(hwCap, hwcap_SM4) + ARM64.HasASIMDDP = isSet(hwCap, hwcap_ASIMDDP) + ARM64.HasSHA512 = isSet(hwCap, hwcap_SHA512) + ARM64.HasSVE = isSet(hwCap, hwcap_SVE) + ARM64.HasASIMDFHM = isSet(hwCap, hwcap_ASIMDFHM) +} + +func isSet(hwc uint, value uint) bool { + return hwc&value != 0 +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_mips64x.go b/vendor/golang.org/x/sys/cpu/cpu_linux_mips64x.go new file mode 100644 index 0000000..6000db4 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_mips64x.go @@ -0,0 +1,24 @@ +// 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 linux && (mips64 || mips64le) +// +build linux +// +build mips64 mips64le + +package cpu + +// HWCAP bits. These are exposed by the Linux kernel 5.4. +const ( + // CPU features + hwcap_MIPS_MSA = 1 << 1 +) + +func doinit() { + // HWCAP feature bits + MIPS64X.HasMSA = isSet(hwCap, hwcap_MIPS_MSA) +} + +func isSet(hwc uint, value uint) bool { + return hwc&value != 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 new file mode 100644 index 0000000..f4992b1 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go @@ -0,0 +1,10 @@ +// 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 linux && !arm && !arm64 && !mips64 && !mips64le && !ppc64 && !ppc64le && !s390x +// +build linux,!arm,!arm64,!mips64,!mips64le,!ppc64,!ppc64le,!s390x + +package cpu + +func doinit() {} diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go b/vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go new file mode 100644 index 0000000..021356d --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go @@ -0,0 +1,32 @@ +// 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 linux && (ppc64 || ppc64le) +// +build linux +// +build ppc64 ppc64le + +package cpu + +// HWCAP/HWCAP2 bits. These are exposed by the kernel. +const ( + // ISA Level + _PPC_FEATURE2_ARCH_2_07 = 0x80000000 + _PPC_FEATURE2_ARCH_3_00 = 0x00800000 + + // CPU features + _PPC_FEATURE2_DARN = 0x00200000 + _PPC_FEATURE2_SCV = 0x00100000 +) + +func doinit() { + // HWCAP2 feature bits + PPC64.IsPOWER8 = isSet(hwCap2, _PPC_FEATURE2_ARCH_2_07) + PPC64.IsPOWER9 = isSet(hwCap2, _PPC_FEATURE2_ARCH_3_00) + PPC64.HasDARN = isSet(hwCap2, _PPC_FEATURE2_DARN) + PPC64.HasSCV = isSet(hwCap2, _PPC_FEATURE2_SCV) +} + +func isSet(hwc uint, value uint) bool { + return hwc&value != 0 +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_s390x.go b/vendor/golang.org/x/sys/cpu/cpu_linux_s390x.go new file mode 100644 index 0000000..1517ac6 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_s390x.go @@ -0,0 +1,40 @@ +// 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 cpu + +const ( + // bit mask values from /usr/include/bits/hwcap.h + hwcap_ZARCH = 2 + hwcap_STFLE = 4 + hwcap_MSA = 8 + hwcap_LDISP = 16 + hwcap_EIMM = 32 + hwcap_DFP = 64 + hwcap_ETF3EH = 256 + hwcap_VX = 2048 + hwcap_VXE = 8192 +) + +func initS390Xbase() { + // test HWCAP bit vector + has := func(featureMask uint) bool { + return hwCap&featureMask == featureMask + } + + // mandatory + S390X.HasZARCH = has(hwcap_ZARCH) + + // optional + S390X.HasSTFLE = has(hwcap_STFLE) + S390X.HasLDISP = has(hwcap_LDISP) + S390X.HasEIMM = has(hwcap_EIMM) + S390X.HasETF3EH = has(hwcap_ETF3EH) + S390X.HasDFP = has(hwcap_DFP) + S390X.HasMSA = has(hwcap_MSA) + S390X.HasVX = has(hwcap_VX) + if S390X.HasVX { + S390X.HasVXE = has(hwcap_VXE) + } +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_mips64x.go b/vendor/golang.org/x/sys/cpu/cpu_mips64x.go new file mode 100644 index 0000000..f4063c6 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_mips64x.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 mips64 || mips64le +// +build mips64 mips64le + +package cpu + +const cacheLineSize = 32 + +func initOptions() { + options = []option{ + {Name: "msa", Feature: &MIPS64X.HasMSA}, + } +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_mipsx.go b/vendor/golang.org/x/sys/cpu/cpu_mipsx.go new file mode 100644 index 0000000..07c4e36 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_mipsx.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 mips || mipsle +// +build mips mipsle + +package cpu + +const cacheLineSize = 32 + +func initOptions() {} diff --git a/vendor/golang.org/x/sys/cpu/cpu_netbsd_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_netbsd_arm64.go new file mode 100644 index 0000000..ebfb3fc --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_netbsd_arm64.go @@ -0,0 +1,173 @@ +// 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 cpu + +import ( + "syscall" + "unsafe" +) + +// Minimal copy of functionality from x/sys/unix so the cpu package can call +// sysctl without depending on x/sys/unix. + +const ( + _CTL_QUERY = -2 + + _SYSCTL_VERS_1 = 0x1000000 +) + +var _zero uintptr + +func sysctl(mib []int32, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, errno := syscall.Syscall6( + syscall.SYS___SYSCTL, + uintptr(_p0), + uintptr(len(mib)), + uintptr(unsafe.Pointer(old)), + uintptr(unsafe.Pointer(oldlen)), + uintptr(unsafe.Pointer(new)), + uintptr(newlen)) + if errno != 0 { + return errno + } + return nil +} + +type sysctlNode struct { + Flags uint32 + Num int32 + Name [32]int8 + Ver uint32 + __rsvd uint32 + Un [16]byte + _sysctl_size [8]byte + _sysctl_func [8]byte + _sysctl_parent [8]byte + _sysctl_desc [8]byte +} + +func sysctlNodes(mib []int32) ([]sysctlNode, error) { + var olen uintptr + + // Get a list of all sysctl nodes below the given MIB by performing + // a sysctl for the given MIB with CTL_QUERY appended. + mib = append(mib, _CTL_QUERY) + qnode := sysctlNode{Flags: _SYSCTL_VERS_1} + qp := (*byte)(unsafe.Pointer(&qnode)) + sz := unsafe.Sizeof(qnode) + if err := sysctl(mib, nil, &olen, qp, sz); err != nil { + return nil, err + } + + // Now that we know the size, get the actual nodes. + nodes := make([]sysctlNode, olen/sz) + np := (*byte)(unsafe.Pointer(&nodes[0])) + if err := sysctl(mib, np, &olen, qp, sz); err != nil { + return nil, err + } + + return nodes, nil +} + +func nametomib(name string) ([]int32, error) { + // Split name into components. + var parts []string + last := 0 + for i := 0; i < len(name); i++ { + if name[i] == '.' { + parts = append(parts, name[last:i]) + last = i + 1 + } + } + parts = append(parts, name[last:]) + + mib := []int32{} + // Discover the nodes and construct the MIB OID. + for partno, part := range parts { + nodes, err := sysctlNodes(mib) + if err != nil { + return nil, err + } + for _, node := range nodes { + n := make([]byte, 0) + for i := range node.Name { + if node.Name[i] != 0 { + n = append(n, byte(node.Name[i])) + } + } + if string(n) == part { + mib = append(mib, int32(node.Num)) + break + } + } + if len(mib) != partno+1 { + return nil, err + } + } + + return mib, nil +} + +// aarch64SysctlCPUID is struct aarch64_sysctl_cpu_id from NetBSD's +type aarch64SysctlCPUID struct { + midr uint64 /* Main ID Register */ + revidr uint64 /* Revision ID Register */ + mpidr uint64 /* Multiprocessor Affinity Register */ + aa64dfr0 uint64 /* A64 Debug Feature Register 0 */ + aa64dfr1 uint64 /* A64 Debug Feature Register 1 */ + aa64isar0 uint64 /* A64 Instruction Set Attribute Register 0 */ + aa64isar1 uint64 /* A64 Instruction Set Attribute Register 1 */ + aa64mmfr0 uint64 /* A64 Memory Model Feature Register 0 */ + aa64mmfr1 uint64 /* A64 Memory Model Feature Register 1 */ + aa64mmfr2 uint64 /* A64 Memory Model Feature Register 2 */ + aa64pfr0 uint64 /* A64 Processor Feature Register 0 */ + aa64pfr1 uint64 /* A64 Processor Feature Register 1 */ + aa64zfr0 uint64 /* A64 SVE Feature ID Register 0 */ + mvfr0 uint32 /* Media and VFP Feature Register 0 */ + mvfr1 uint32 /* Media and VFP Feature Register 1 */ + mvfr2 uint32 /* Media and VFP Feature Register 2 */ + pad uint32 + clidr uint64 /* Cache Level ID Register */ + ctr uint64 /* Cache Type Register */ +} + +func sysctlCPUID(name string) (*aarch64SysctlCPUID, error) { + mib, err := nametomib(name) + if err != nil { + return nil, err + } + + out := aarch64SysctlCPUID{} + n := unsafe.Sizeof(out) + _, _, errno := syscall.Syscall6( + syscall.SYS___SYSCTL, + uintptr(unsafe.Pointer(&mib[0])), + uintptr(len(mib)), + uintptr(unsafe.Pointer(&out)), + uintptr(unsafe.Pointer(&n)), + uintptr(0), + uintptr(0)) + if errno != 0 { + return nil, errno + } + return &out, nil +} + +func doinit() { + cpuid, err := sysctlCPUID("machdep.cpu0.cpu_id") + if err != nil { + setMinimalFeatures() + return + } + parseARM64SystemRegisters(cpuid.aa64isar0, cpuid.aa64isar1, cpuid.aa64pfr0) + + Initialized = true +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_other_arm.go b/vendor/golang.org/x/sys/cpu/cpu_other_arm.go new file mode 100644 index 0000000..d7b4fb4 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_other_arm.go @@ -0,0 +1,10 @@ +// 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 !linux && arm +// +build !linux,arm + +package cpu + +func archInit() {} diff --git a/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go new file mode 100644 index 0000000..f8c484f --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go @@ -0,0 +1,10 @@ +// 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 !linux && !netbsd && arm64 +// +build !linux,!netbsd,arm64 + +package cpu + +func doinit() {} diff --git a/vendor/golang.org/x/sys/cpu/cpu_other_mips64x.go b/vendor/golang.org/x/sys/cpu/cpu_other_mips64x.go new file mode 100644 index 0000000..0dafe96 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_other_mips64x.go @@ -0,0 +1,13 @@ +// 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 !linux && (mips64 || mips64le) +// +build !linux +// +build mips64 mips64le + +package cpu + +func archInit() { + Initialized = true +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_ppc64x.go b/vendor/golang.org/x/sys/cpu/cpu_ppc64x.go new file mode 100644 index 0000000..4e8acd1 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_ppc64x.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. + +//go:build ppc64 || ppc64le +// +build ppc64 ppc64le + +package cpu + +const cacheLineSize = 128 + +func initOptions() { + options = []option{ + {Name: "darn", Feature: &PPC64.HasDARN}, + {Name: "scv", Feature: &PPC64.HasSCV}, + } +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_riscv64.go b/vendor/golang.org/x/sys/cpu/cpu_riscv64.go new file mode 100644 index 0000000..bd6c128 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_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 +// +build riscv64 + +package cpu + +const cacheLineSize = 32 + +func initOptions() {} diff --git a/vendor/golang.org/x/sys/cpu/cpu_s390x.go b/vendor/golang.org/x/sys/cpu/cpu_s390x.go new file mode 100644 index 0000000..5881b88 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_s390x.go @@ -0,0 +1,172 @@ +// 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 cpu + +const cacheLineSize = 256 + +func initOptions() { + options = []option{ + {Name: "zarch", Feature: &S390X.HasZARCH, Required: true}, + {Name: "stfle", Feature: &S390X.HasSTFLE, Required: true}, + {Name: "ldisp", Feature: &S390X.HasLDISP, Required: true}, + {Name: "eimm", Feature: &S390X.HasEIMM, Required: true}, + {Name: "dfp", Feature: &S390X.HasDFP}, + {Name: "etf3eh", Feature: &S390X.HasETF3EH}, + {Name: "msa", Feature: &S390X.HasMSA}, + {Name: "aes", Feature: &S390X.HasAES}, + {Name: "aescbc", Feature: &S390X.HasAESCBC}, + {Name: "aesctr", Feature: &S390X.HasAESCTR}, + {Name: "aesgcm", Feature: &S390X.HasAESGCM}, + {Name: "ghash", Feature: &S390X.HasGHASH}, + {Name: "sha1", Feature: &S390X.HasSHA1}, + {Name: "sha256", Feature: &S390X.HasSHA256}, + {Name: "sha3", Feature: &S390X.HasSHA3}, + {Name: "sha512", Feature: &S390X.HasSHA512}, + {Name: "vx", Feature: &S390X.HasVX}, + {Name: "vxe", Feature: &S390X.HasVXE}, + } +} + +// bitIsSet reports whether the bit at index is set. The bit index +// is in big endian order, so bit index 0 is the leftmost bit. +func bitIsSet(bits []uint64, index uint) bool { + return bits[index/64]&((1<<63)>>(index%64)) != 0 +} + +// facility is a bit index for the named facility. +type facility uint8 + +const ( + // mandatory facilities + zarch facility = 1 // z architecture mode is active + stflef facility = 7 // store-facility-list-extended + ldisp facility = 18 // long-displacement + eimm facility = 21 // extended-immediate + + // miscellaneous facilities + dfp facility = 42 // decimal-floating-point + etf3eh facility = 30 // extended-translation 3 enhancement + + // cryptography facilities + msa facility = 17 // message-security-assist + msa3 facility = 76 // message-security-assist extension 3 + msa4 facility = 77 // message-security-assist extension 4 + msa5 facility = 57 // message-security-assist extension 5 + msa8 facility = 146 // message-security-assist extension 8 + msa9 facility = 155 // message-security-assist extension 9 + + // vector facilities + vx facility = 129 // vector facility + vxe facility = 135 // vector-enhancements 1 + vxe2 facility = 148 // vector-enhancements 2 +) + +// facilityList contains the result of an STFLE call. +// Bits are numbered in big endian order so the +// leftmost bit (the MSB) is at index 0. +type facilityList struct { + bits [4]uint64 +} + +// Has reports whether the given facilities are present. +func (s *facilityList) Has(fs ...facility) bool { + if len(fs) == 0 { + panic("no facility bits provided") + } + for _, f := range fs { + if !bitIsSet(s.bits[:], uint(f)) { + return false + } + } + return true +} + +// function is the code for the named cryptographic function. +type function uint8 + +const ( + // KM{,A,C,CTR} function codes + aes128 function = 18 // AES-128 + aes192 function = 19 // AES-192 + aes256 function = 20 // AES-256 + + // K{I,L}MD function codes + sha1 function = 1 // SHA-1 + sha256 function = 2 // SHA-256 + sha512 function = 3 // SHA-512 + sha3_224 function = 32 // SHA3-224 + sha3_256 function = 33 // SHA3-256 + sha3_384 function = 34 // SHA3-384 + sha3_512 function = 35 // SHA3-512 + shake128 function = 36 // SHAKE-128 + shake256 function = 37 // SHAKE-256 + + // KLMD function codes + ghash function = 65 // GHASH +) + +// queryResult contains the result of a Query function +// call. Bits are numbered in big endian order so the +// leftmost bit (the MSB) is at index 0. +type queryResult struct { + bits [2]uint64 +} + +// Has reports whether the given functions are present. +func (q *queryResult) Has(fns ...function) bool { + if len(fns) == 0 { + panic("no function codes provided") + } + for _, f := range fns { + if !bitIsSet(q.bits[:], uint(f)) { + return false + } + } + return true +} + +func doinit() { + initS390Xbase() + + // We need implementations of stfle, km and so on + // to detect cryptographic features. + if !haveAsmFunctions() { + return + } + + // optional cryptographic functions + if S390X.HasMSA { + aes := []function{aes128, aes192, aes256} + + // cipher message + km, kmc := kmQuery(), kmcQuery() + S390X.HasAES = km.Has(aes...) + S390X.HasAESCBC = kmc.Has(aes...) + if S390X.HasSTFLE { + facilities := stfle() + if facilities.Has(msa4) { + kmctr := kmctrQuery() + S390X.HasAESCTR = kmctr.Has(aes...) + } + if facilities.Has(msa8) { + kma := kmaQuery() + S390X.HasAESGCM = kma.Has(aes...) + } + } + + // compute message digest + kimd := kimdQuery() // intermediate (no padding) + klmd := klmdQuery() // last (padding) + S390X.HasSHA1 = kimd.Has(sha1) && klmd.Has(sha1) + S390X.HasSHA256 = kimd.Has(sha256) && klmd.Has(sha256) + S390X.HasSHA512 = kimd.Has(sha512) && klmd.Has(sha512) + S390X.HasGHASH = kimd.Has(ghash) // KLMD-GHASH does not exist + sha3 := []function{ + sha3_224, sha3_256, sha3_384, sha3_512, + shake128, shake256, + } + S390X.HasSHA3 = kimd.Has(sha3...) && klmd.Has(sha3...) + } +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_s390x.s b/vendor/golang.org/x/sys/cpu/cpu_s390x.s new file mode 100644 index 0000000..96f81e2 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_s390x.s @@ -0,0 +1,58 @@ +// 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 +// +build gc + +#include "textflag.h" + +// func stfle() facilityList +TEXT ·stfle(SB), NOSPLIT|NOFRAME, $0-32 + MOVD $ret+0(FP), R1 + MOVD $3, R0 // last doubleword index to store + XC $32, (R1), (R1) // clear 4 doublewords (32 bytes) + WORD $0xb2b01000 // store facility list extended (STFLE) + RET + +// func kmQuery() queryResult +TEXT ·kmQuery(SB), NOSPLIT|NOFRAME, $0-16 + MOVD $0, R0 // set function code to 0 (KM-Query) + MOVD $ret+0(FP), R1 // address of 16-byte return value + WORD $0xB92E0024 // cipher message (KM) + RET + +// func kmcQuery() queryResult +TEXT ·kmcQuery(SB), NOSPLIT|NOFRAME, $0-16 + MOVD $0, R0 // set function code to 0 (KMC-Query) + MOVD $ret+0(FP), R1 // address of 16-byte return value + WORD $0xB92F0024 // cipher message with chaining (KMC) + RET + +// func kmctrQuery() queryResult +TEXT ·kmctrQuery(SB), NOSPLIT|NOFRAME, $0-16 + MOVD $0, R0 // set function code to 0 (KMCTR-Query) + MOVD $ret+0(FP), R1 // address of 16-byte return value + WORD $0xB92D4024 // cipher message with counter (KMCTR) + RET + +// func kmaQuery() queryResult +TEXT ·kmaQuery(SB), NOSPLIT|NOFRAME, $0-16 + MOVD $0, R0 // set function code to 0 (KMA-Query) + MOVD $ret+0(FP), R1 // address of 16-byte return value + WORD $0xb9296024 // cipher message with authentication (KMA) + RET + +// func kimdQuery() queryResult +TEXT ·kimdQuery(SB), NOSPLIT|NOFRAME, $0-16 + MOVD $0, R0 // set function code to 0 (KIMD-Query) + MOVD $ret+0(FP), R1 // address of 16-byte return value + WORD $0xB93E0024 // compute intermediate message digest (KIMD) + RET + +// func klmdQuery() queryResult +TEXT ·klmdQuery(SB), NOSPLIT|NOFRAME, $0-16 + MOVD $0, R0 // set function code to 0 (KLMD-Query) + MOVD $ret+0(FP), R1 // address of 16-byte return value + WORD $0xB93F0024 // compute last message digest (KLMD) + RET diff --git a/vendor/golang.org/x/sys/cpu/cpu_wasm.go b/vendor/golang.org/x/sys/cpu/cpu_wasm.go new file mode 100644 index 0000000..7747d88 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_wasm.go @@ -0,0 +1,18 @@ +// 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 wasm +// +build wasm + +package cpu + +// We're compiling the cpu package for an unknown (software-abstracted) CPU. +// Make CacheLinePad an empty struct and hope that the usual struct alignment +// rules are good enough. + +const cacheLineSize = 0 + +func initOptions() {} + +func archInit() {} diff --git a/vendor/golang.org/x/sys/cpu/cpu_x86.go b/vendor/golang.org/x/sys/cpu/cpu_x86.go new file mode 100644 index 0000000..f5aacfc --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_x86.go @@ -0,0 +1,145 @@ +// 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 386 || amd64 || amd64p32 +// +build 386 amd64 amd64p32 + +package cpu + +import "runtime" + +const cacheLineSize = 64 + +func initOptions() { + options = []option{ + {Name: "adx", Feature: &X86.HasADX}, + {Name: "aes", Feature: &X86.HasAES}, + {Name: "avx", Feature: &X86.HasAVX}, + {Name: "avx2", Feature: &X86.HasAVX2}, + {Name: "avx512", Feature: &X86.HasAVX512}, + {Name: "avx512f", Feature: &X86.HasAVX512F}, + {Name: "avx512cd", Feature: &X86.HasAVX512CD}, + {Name: "avx512er", Feature: &X86.HasAVX512ER}, + {Name: "avx512pf", Feature: &X86.HasAVX512PF}, + {Name: "avx512vl", Feature: &X86.HasAVX512VL}, + {Name: "avx512bw", Feature: &X86.HasAVX512BW}, + {Name: "avx512dq", Feature: &X86.HasAVX512DQ}, + {Name: "avx512ifma", Feature: &X86.HasAVX512IFMA}, + {Name: "avx512vbmi", Feature: &X86.HasAVX512VBMI}, + {Name: "avx512vnniw", Feature: &X86.HasAVX5124VNNIW}, + {Name: "avx5124fmaps", Feature: &X86.HasAVX5124FMAPS}, + {Name: "avx512vpopcntdq", Feature: &X86.HasAVX512VPOPCNTDQ}, + {Name: "avx512vpclmulqdq", Feature: &X86.HasAVX512VPCLMULQDQ}, + {Name: "avx512vnni", Feature: &X86.HasAVX512VNNI}, + {Name: "avx512gfni", Feature: &X86.HasAVX512GFNI}, + {Name: "avx512vaes", Feature: &X86.HasAVX512VAES}, + {Name: "avx512vbmi2", Feature: &X86.HasAVX512VBMI2}, + {Name: "avx512bitalg", Feature: &X86.HasAVX512BITALG}, + {Name: "avx512bf16", Feature: &X86.HasAVX512BF16}, + {Name: "bmi1", Feature: &X86.HasBMI1}, + {Name: "bmi2", Feature: &X86.HasBMI2}, + {Name: "cx16", Feature: &X86.HasCX16}, + {Name: "erms", Feature: &X86.HasERMS}, + {Name: "fma", Feature: &X86.HasFMA}, + {Name: "osxsave", Feature: &X86.HasOSXSAVE}, + {Name: "pclmulqdq", Feature: &X86.HasPCLMULQDQ}, + {Name: "popcnt", Feature: &X86.HasPOPCNT}, + {Name: "rdrand", Feature: &X86.HasRDRAND}, + {Name: "rdseed", Feature: &X86.HasRDSEED}, + {Name: "sse3", Feature: &X86.HasSSE3}, + {Name: "sse41", Feature: &X86.HasSSE41}, + {Name: "sse42", Feature: &X86.HasSSE42}, + {Name: "ssse3", Feature: &X86.HasSSSE3}, + + // These capabilities should always be enabled on amd64: + {Name: "sse2", Feature: &X86.HasSSE2, Required: runtime.GOARCH == "amd64"}, + } +} + +func archInit() { + + Initialized = true + + maxID, _, _, _ := cpuid(0, 0) + + if maxID < 1 { + return + } + + _, _, ecx1, edx1 := cpuid(1, 0) + X86.HasSSE2 = isSet(26, edx1) + + X86.HasSSE3 = isSet(0, ecx1) + X86.HasPCLMULQDQ = isSet(1, ecx1) + X86.HasSSSE3 = isSet(9, ecx1) + X86.HasFMA = isSet(12, ecx1) + X86.HasCX16 = isSet(13, ecx1) + X86.HasSSE41 = isSet(19, ecx1) + X86.HasSSE42 = isSet(20, ecx1) + X86.HasPOPCNT = isSet(23, ecx1) + X86.HasAES = isSet(25, ecx1) + X86.HasOSXSAVE = isSet(27, ecx1) + X86.HasRDRAND = isSet(30, ecx1) + + var osSupportsAVX, osSupportsAVX512 bool + // For XGETBV, OSXSAVE bit is required and sufficient. + if X86.HasOSXSAVE { + eax, _ := xgetbv() + // Check if XMM and YMM registers have OS support. + osSupportsAVX = isSet(1, eax) && isSet(2, eax) + + if runtime.GOOS == "darwin" { + // Darwin doesn't save/restore AVX-512 mask registers correctly across signal handlers. + // Since users can't rely on mask register contents, let's not advertise AVX-512 support. + // See issue 49233. + osSupportsAVX512 = false + } else { + // Check if OPMASK and ZMM registers have OS support. + osSupportsAVX512 = osSupportsAVX && isSet(5, eax) && isSet(6, eax) && isSet(7, eax) + } + } + + X86.HasAVX = isSet(28, ecx1) && osSupportsAVX + + if maxID < 7 { + return + } + + _, ebx7, ecx7, edx7 := cpuid(7, 0) + X86.HasBMI1 = isSet(3, ebx7) + X86.HasAVX2 = isSet(5, ebx7) && osSupportsAVX + X86.HasBMI2 = isSet(8, ebx7) + X86.HasERMS = isSet(9, ebx7) + X86.HasRDSEED = isSet(18, ebx7) + X86.HasADX = isSet(19, ebx7) + + X86.HasAVX512 = isSet(16, ebx7) && osSupportsAVX512 // Because avx-512 foundation is the core required extension + if X86.HasAVX512 { + X86.HasAVX512F = true + X86.HasAVX512CD = isSet(28, ebx7) + X86.HasAVX512ER = isSet(27, ebx7) + X86.HasAVX512PF = isSet(26, ebx7) + X86.HasAVX512VL = isSet(31, ebx7) + X86.HasAVX512BW = isSet(30, ebx7) + X86.HasAVX512DQ = isSet(17, ebx7) + X86.HasAVX512IFMA = isSet(21, ebx7) + X86.HasAVX512VBMI = isSet(1, ecx7) + X86.HasAVX5124VNNIW = isSet(2, edx7) + X86.HasAVX5124FMAPS = isSet(3, edx7) + X86.HasAVX512VPOPCNTDQ = isSet(14, ecx7) + X86.HasAVX512VPCLMULQDQ = isSet(10, ecx7) + X86.HasAVX512VNNI = isSet(11, ecx7) + X86.HasAVX512GFNI = isSet(8, ecx7) + X86.HasAVX512VAES = isSet(9, ecx7) + X86.HasAVX512VBMI2 = isSet(6, ecx7) + X86.HasAVX512BITALG = isSet(12, ecx7) + + eax71, _, _, _ := cpuid(7, 1) + X86.HasAVX512BF16 = isSet(5, eax71) + } +} + +func isSet(bitpos uint, value uint32) bool { + return value&(1<> 63)) +) + +// For those platforms don't have a 'cpuid' equivalent we use HWCAP/HWCAP2 +// These are initialized in cpu_$GOARCH.go +// and should not be changed after they are initialized. +var hwCap uint +var hwCap2 uint + +func readHWCAP() error { + buf, err := ioutil.ReadFile(procAuxv) + if err != nil { + // e.g. on android /proc/self/auxv is not accessible, so silently + // ignore the error and leave Initialized = false. On some + // architectures (e.g. arm64) doinit() implements a fallback + // readout and will set Initialized = true again. + return err + } + bo := hostByteOrder() + for len(buf) >= 2*(uintSize/8) { + var tag, val uint + switch uintSize { + case 32: + tag = uint(bo.Uint32(buf[0:])) + val = uint(bo.Uint32(buf[4:])) + buf = buf[8:] + case 64: + tag = uint(bo.Uint64(buf[0:])) + val = uint(bo.Uint64(buf[8:])) + buf = buf[16:] + } + switch tag { + case _AT_HWCAP: + hwCap = val + case _AT_HWCAP2: + hwCap2 = val + } + } + return nil +} diff --git a/vendor/golang.org/x/sys/cpu/syscall_aix_gccgo.go b/vendor/golang.org/x/sys/cpu/syscall_aix_gccgo.go new file mode 100644 index 0000000..9613415 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/syscall_aix_gccgo.go @@ -0,0 +1,27 @@ +// 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. + +// Recreate a getsystemcfg syscall handler instead of +// using the one provided by x/sys/unix to avoid having +// the dependency between them. (See golang.org/issue/32102) +// Moreover, this file will be used during the building of +// gccgo's libgo and thus must not used a CGo method. + +//go:build aix && gccgo +// +build aix,gccgo + +package cpu + +import ( + "syscall" +) + +//extern getsystemcfg +func gccgoGetsystemcfg(label uint32) (r uint64) + +func callgetsystemcfg(label int) (r1 uintptr, e1 syscall.Errno) { + r1 = uintptr(gccgoGetsystemcfg(uint32(label))) + e1 = syscall.GetErrno() + return +} diff --git a/vendor/golang.org/x/sys/cpu/syscall_aix_ppc64_gc.go b/vendor/golang.org/x/sys/cpu/syscall_aix_ppc64_gc.go new file mode 100644 index 0000000..904be42 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/syscall_aix_ppc64_gc.go @@ -0,0 +1,36 @@ +// 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. + +// Minimal copy of x/sys/unix so the cpu package can make a +// system call on AIX without depending on x/sys/unix. +// (See golang.org/issue/32102) + +//go:build aix && ppc64 && gc +// +build aix,ppc64,gc + +package cpu + +import ( + "syscall" + "unsafe" +) + +//go:cgo_import_dynamic libc_getsystemcfg getsystemcfg "libc.a/shr_64.o" + +//go:linkname libc_getsystemcfg libc_getsystemcfg + +type syscallFunc uintptr + +var libc_getsystemcfg syscallFunc + +type errno = syscall.Errno + +// Implemented in runtime/syscall_aix.go. +func rawSyscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err errno) +func syscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err errno) + +func callgetsystemcfg(label int) (r1 uintptr, e1 errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getsystemcfg)), 1, uintptr(label), 0, 0, 0, 0, 0) + return +} diff --git a/vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go b/vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go new file mode 100644 index 0000000..e07899b --- /dev/null +++ b/vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go @@ -0,0 +1,30 @@ +// 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 unsafeheader contains header declarations for the Go runtime's +// slice and string implementations. +// +// This package allows x/sys to use types equivalent to +// reflect.SliceHeader and reflect.StringHeader without introducing +// a dependency on the (relatively heavy) "reflect" package. +package unsafeheader + +import ( + "unsafe" +) + +// Slice is the runtime representation of a slice. +// It cannot be used safely or portably and its representation may change in a later release. +type Slice struct { + Data unsafe.Pointer + Len int + Cap int +} + +// String is the runtime representation of a string. +// It cannot be used safely or portably and its representation may change in a later release. +type String struct { + Data unsafe.Pointer + Len int +} diff --git a/vendor/golang.org/x/sys/unix/.gitignore b/vendor/golang.org/x/sys/unix/.gitignore new file mode 100644 index 0000000..e3e0fc6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/.gitignore @@ -0,0 +1,2 @@ +_obj/ +unix.test diff --git a/vendor/golang.org/x/sys/unix/README.md b/vendor/golang.org/x/sys/unix/README.md new file mode 100644 index 0000000..7d3c060 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/README.md @@ -0,0 +1,184 @@ +# Building `sys/unix` + +The sys/unix package provides access to the raw system call interface of the +underlying operating system. See: https://godoc.org/golang.org/x/sys/unix + +Porting Go to a new architecture/OS combination or adding syscalls, types, or +constants to an existing architecture/OS pair requires some manual effort; +however, there are tools that automate much of the process. + +## Build Systems + +There are currently two ways we generate the necessary files. We are currently +migrating the build system to use containers so the builds are reproducible. +This is being done on an OS-by-OS basis. Please update this documentation as +components of the build system change. + +### Old Build System (currently for `GOOS != "linux"`) + +The old build system generates the Go files based on the C header files +present on your system. This means that files +for a given GOOS/GOARCH pair must be generated on a system with that OS and +architecture. This also means that the generated code can differ from system +to system, based on differences in the header files. + +To avoid this, if you are using the old build system, only generate the Go +files on an installation with unmodified header files. It is also important to +keep track of which version of the OS the files were generated from (ex. +Darwin 14 vs Darwin 15). This makes it easier to track the progress of changes +and have each OS upgrade correspond to a single change. + +To build the files for your current OS and architecture, make sure GOOS and +GOARCH are set correctly and run `mkall.sh`. This will generate the files for +your specific system. Running `mkall.sh -n` shows the commands that will be run. + +Requirements: bash, go + +### New Build System (currently for `GOOS == "linux"`) + +The new build system uses a Docker container to generate the go files directly +from source checkouts of the kernel and various system libraries. This means +that on any platform that supports Docker, all the files using the new build +system can be generated at once, and generated files will not change based on +what the person running the scripts has installed on their computer. + +The OS specific files for the new build system are located in the `${GOOS}` +directory, and the build is coordinated by the `${GOOS}/mkall.go` program. When +the kernel or system library updates, modify the Dockerfile at +`${GOOS}/Dockerfile` to checkout the new release of the source. + +To build all the files under the new build system, you must be on an amd64/Linux +system and have your GOOS and GOARCH set accordingly. Running `mkall.sh` will +then generate all of the files for all of the GOOS/GOARCH pairs in the new build +system. Running `mkall.sh -n` shows the commands that will be run. + +Requirements: bash, go, docker + +## Component files + +This section describes the various files used in the code generation process. +It also contains instructions on how to modify these files to add a new +architecture/OS or to add additional syscalls, types, or constants. Note that +if you are using the new build system, the scripts/programs cannot be called normally. +They must be called from within the docker container. + +### asm files + +The hand-written assembly file at `asm_${GOOS}_${GOARCH}.s` implements system +call dispatch. There are three entry points: +``` + func Syscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr) + func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) + func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr) +``` +The first and second are the standard ones; they differ only in how many +arguments can be passed to the kernel. The third is for low-level use by the +ForkExec wrapper. Unlike the first two, it does not call into the scheduler to +let it know that a system call is running. + +When porting Go to a new architecture/OS, this file must be implemented for +each GOOS/GOARCH pair. + +### mksysnum + +Mksysnum is a Go program located at `${GOOS}/mksysnum.go` (or `mksysnum_${GOOS}.go` +for the old system). This program takes in a list of header files containing the +syscall number declarations and parses them to produce the corresponding list of +Go numeric constants. See `zsysnum_${GOOS}_${GOARCH}.go` for the generated +constants. + +Adding new syscall numbers is mostly done by running the build on a sufficiently +new installation of the target OS (or updating the source checkouts for the +new build system). However, depending on the OS, you may need to update the +parsing in mksysnum. + +### mksyscall.go + +The `syscall.go`, `syscall_${GOOS}.go`, `syscall_${GOOS}_${GOARCH}.go` are +hand-written Go files which implement system calls (for unix, the specific OS, +or the specific OS/Architecture pair respectively) that need special handling +and list `//sys` comments giving prototypes for ones that can be generated. + +The mksyscall.go program takes the `//sys` and `//sysnb` comments and converts +them into syscalls. This requires the name of the prototype in the comment to +match a syscall number in the `zsysnum_${GOOS}_${GOARCH}.go` file. The function +prototype can be exported (capitalized) or not. + +Adding a new syscall often just requires adding a new `//sys` function prototype +with the desired arguments and a capitalized name so it is exported. However, if +you want the interface to the syscall to be different, often one will make an +unexported `//sys` prototype, and then write a custom wrapper in +`syscall_${GOOS}.go`. + +### types files + +For each OS, there is a hand-written Go file at `${GOOS}/types.go` (or +`types_${GOOS}.go` on the old system). This file includes standard C headers and +creates Go type aliases to the corresponding C types. The file is then fed +through godef to get the Go compatible definitions. Finally, the generated code +is fed though mkpost.go to format the code correctly and remove any hidden or +private identifiers. This cleaned-up code is written to +`ztypes_${GOOS}_${GOARCH}.go`. + +The hardest part about preparing this file is figuring out which headers to +include and which symbols need to be `#define`d to get the actual data +structures that pass through to the kernel system calls. Some C libraries +preset alternate versions for binary compatibility and translate them on the +way in and out of system calls, but there is almost always a `#define` that can +get the real ones. +See `types_darwin.go` and `linux/types.go` for examples. + +To add a new type, add in the necessary include statement at the top of the +file (if it is not already there) and add in a type alias line. Note that if +your type is significantly different on different architectures, you may need +some `#if/#elif` macros in your include statements. + +### mkerrors.sh + +This script is used to generate the system's various constants. This doesn't +just include the error numbers and error strings, but also the signal numbers +and a wide variety of miscellaneous constants. The constants come from the list +of include files in the `includes_${uname}` variable. A regex then picks out +the desired `#define` statements, and generates the corresponding Go constants. +The error numbers and strings are generated from `#include `, and the +signal numbers and strings are generated from `#include `. All of +these constants are written to `zerrors_${GOOS}_${GOARCH}.go` via a C program, +`_errors.c`, which prints out all the constants. + +To add a constant, add the header that includes it to the appropriate variable. +Then, edit the regex (if necessary) to match the desired constant. Avoid making +the regex too broad to avoid matching unintended constants. + +### internal/mkmerge + +This program is used to extract duplicate const, func, and type declarations +from the generated architecture-specific files listed below, and merge these +into a common file for each OS. + +The merge is performed in the following steps: +1. Construct the set of common code that is idential in all architecture-specific files. +2. Write this common code to the merged file. +3. Remove the common code from all architecture-specific files. + + +## Generated files + +### `zerrors_${GOOS}_${GOARCH}.go` + +A file containing all of the system's generated error numbers, error strings, +signal numbers, and constants. Generated by `mkerrors.sh` (see above). + +### `zsyscall_${GOOS}_${GOARCH}.go` + +A file containing all the generated syscalls for a specific GOOS and GOARCH. +Generated by `mksyscall.go` (see above). + +### `zsysnum_${GOOS}_${GOARCH}.go` + +A list of numeric constants for all the syscall number of the specific GOOS +and GOARCH. Generated by mksysnum (see above). + +### `ztypes_${GOOS}_${GOARCH}.go` + +A file containing Go types for passing into (or returning from) syscalls. +Generated by godefs and the types file (see above). diff --git a/vendor/golang.org/x/sys/unix/affinity_linux.go b/vendor/golang.org/x/sys/unix/affinity_linux.go new file mode 100644 index 0000000..6e5c81a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/affinity_linux.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. + +// CPU affinity functions + +package unix + +import ( + "math/bits" + "unsafe" +) + +const cpuSetSize = _CPU_SETSIZE / _NCPUBITS + +// CPUSet represents a CPU affinity mask. +type CPUSet [cpuSetSize]cpuMask + +func schedAffinity(trap uintptr, pid int, set *CPUSet) error { + _, _, e := RawSyscall(trap, uintptr(pid), uintptr(unsafe.Sizeof(*set)), uintptr(unsafe.Pointer(set))) + if e != 0 { + return errnoErr(e) + } + return nil +} + +// SchedGetaffinity gets the CPU affinity mask of the thread specified by pid. +// If pid is 0 the calling thread is used. +func SchedGetaffinity(pid int, set *CPUSet) error { + return schedAffinity(SYS_SCHED_GETAFFINITY, pid, set) +} + +// SchedSetaffinity sets the CPU affinity mask of the thread specified by pid. +// If pid is 0 the calling thread is used. +func SchedSetaffinity(pid int, set *CPUSet) error { + return schedAffinity(SYS_SCHED_SETAFFINITY, pid, set) +} + +// Zero clears the set s, so that it contains no CPUs. +func (s *CPUSet) Zero() { + for i := range s { + s[i] = 0 + } +} + +func cpuBitsIndex(cpu int) int { + return cpu / _NCPUBITS +} + +func cpuBitsMask(cpu int) cpuMask { + return cpuMask(1 << (uint(cpu) % _NCPUBITS)) +} + +// Set adds cpu to the set s. +func (s *CPUSet) Set(cpu int) { + i := cpuBitsIndex(cpu) + if i < len(s) { + s[i] |= cpuBitsMask(cpu) + } +} + +// Clear removes cpu from the set s. +func (s *CPUSet) Clear(cpu int) { + i := cpuBitsIndex(cpu) + if i < len(s) { + s[i] &^= cpuBitsMask(cpu) + } +} + +// IsSet reports whether cpu is in the set s. +func (s *CPUSet) IsSet(cpu int) bool { + i := cpuBitsIndex(cpu) + if i < len(s) { + return s[i]&cpuBitsMask(cpu) != 0 + } + return false +} + +// Count returns the number of CPUs in the set s. +func (s *CPUSet) Count() int { + c := 0 + for _, b := range s { + c += bits.OnesCount64(uint64(b)) + } + return c +} diff --git a/vendor/golang.org/x/sys/unix/aliases.go b/vendor/golang.org/x/sys/unix/aliases.go new file mode 100644 index 0000000..abc89c1 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/aliases.go @@ -0,0 +1,15 @@ +// 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 (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos) && go1.9 +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos +// +build go1.9 + +package unix + +import "syscall" + +type Signal = syscall.Signal +type Errno = syscall.Errno +type SysProcAttr = syscall.SysProcAttr diff --git a/vendor/golang.org/x/sys/unix/asm_aix_ppc64.s b/vendor/golang.org/x/sys/unix/asm_aix_ppc64.s new file mode 100644 index 0000000..db9171c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_aix_ppc64.s @@ -0,0 +1,18 @@ +// 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 +// +build gc + +#include "textflag.h" + +// +// System calls for ppc64, AIX are implemented in runtime/syscall_aix.go +// + +TEXT ·syscall6(SB),NOSPLIT,$0-88 + JMP syscall·syscall6(SB) + +TEXT ·rawSyscall6(SB),NOSPLIT,$0-88 + JMP syscall·rawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_bsd_386.s b/vendor/golang.org/x/sys/unix/asm_bsd_386.s new file mode 100644 index 0000000..e0fcd9b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_bsd_386.s @@ -0,0 +1,29 @@ +// 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 (freebsd || netbsd || openbsd) && gc +// +build freebsd netbsd openbsd +// +build gc + +#include "textflag.h" + +// System call support for 386 BSD + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_bsd_amd64.s b/vendor/golang.org/x/sys/unix/asm_bsd_amd64.s new file mode 100644 index 0000000..2b99c34 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_bsd_amd64.s @@ -0,0 +1,29 @@ +// 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 || netbsd || openbsd) && gc +// +build darwin dragonfly freebsd netbsd openbsd +// +build gc + +#include "textflag.h" + +// System call support for AMD64 BSD + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_bsd_arm.s b/vendor/golang.org/x/sys/unix/asm_bsd_arm.s new file mode 100644 index 0000000..d702d4a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_bsd_arm.s @@ -0,0 +1,29 @@ +// 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 (freebsd || netbsd || openbsd) && gc +// +build freebsd netbsd openbsd +// +build gc + +#include "textflag.h" + +// System call support for ARM BSD + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + B syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + B syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + B syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_bsd_arm64.s b/vendor/golang.org/x/sys/unix/asm_bsd_arm64.s new file mode 100644 index 0000000..fe36a73 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_bsd_arm64.s @@ -0,0 +1,29 @@ +// 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 || freebsd || netbsd || openbsd) && gc +// +build darwin freebsd netbsd openbsd +// +build gc + +#include "textflag.h" + +// System call support for ARM64 BSD + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_386.s b/vendor/golang.org/x/sys/unix/asm_linux_386.s new file mode 100644 index 0000000..8fd101d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_386.s @@ -0,0 +1,66 @@ +// 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 gc +// +build gc + +#include "textflag.h" + +// +// System calls for 386, Linux +// + +// See ../runtime/sys_linux_386.s for the reason why we always use int 0x80 +// instead of the glibc-specific "CALL 0x10(GS)". +#define INVOKE_SYSCALL INT $0x80 + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·SyscallNoError(SB),NOSPLIT,$0-24 + CALL runtime·entersyscall(SB) + MOVL trap+0(FP), AX // syscall entry + MOVL a1+4(FP), BX + MOVL a2+8(FP), CX + MOVL a3+12(FP), DX + MOVL $0, SI + MOVL $0, DI + INVOKE_SYSCALL + MOVL AX, r1+16(FP) + MOVL DX, r2+20(FP) + CALL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24 + MOVL trap+0(FP), AX // syscall entry + MOVL a1+4(FP), BX + MOVL a2+8(FP), CX + MOVL a3+12(FP), DX + MOVL $0, SI + MOVL $0, DI + INVOKE_SYSCALL + MOVL AX, r1+16(FP) + MOVL DX, r2+20(FP) + RET + +TEXT ·socketcall(SB),NOSPLIT,$0-36 + JMP syscall·socketcall(SB) + +TEXT ·rawsocketcall(SB),NOSPLIT,$0-36 + JMP syscall·rawsocketcall(SB) + +TEXT ·seek(SB),NOSPLIT,$0-28 + JMP syscall·seek(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_amd64.s b/vendor/golang.org/x/sys/unix/asm_linux_amd64.s new file mode 100644 index 0000000..7ed38e4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_amd64.s @@ -0,0 +1,58 @@ +// 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 gc +// +build gc + +#include "textflag.h" + +// +// System calls for AMD64, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 + CALL runtime·entersyscall(SB) + MOVQ a1+8(FP), DI + MOVQ a2+16(FP), SI + MOVQ a3+24(FP), DX + MOVQ $0, R10 + MOVQ $0, R8 + MOVQ $0, R9 + MOVQ trap+0(FP), AX // syscall entry + SYSCALL + MOVQ AX, r1+32(FP) + MOVQ DX, r2+40(FP) + CALL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 + MOVQ a1+8(FP), DI + MOVQ a2+16(FP), SI + MOVQ a3+24(FP), DX + MOVQ $0, R10 + MOVQ $0, R8 + MOVQ $0, R9 + MOVQ trap+0(FP), AX // syscall entry + SYSCALL + MOVQ AX, r1+32(FP) + MOVQ DX, r2+40(FP) + RET + +TEXT ·gettimeofday(SB),NOSPLIT,$0-16 + JMP syscall·gettimeofday(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_arm.s b/vendor/golang.org/x/sys/unix/asm_linux_arm.s new file mode 100644 index 0000000..8ef1d51 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_arm.s @@ -0,0 +1,57 @@ +// 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 gc +// +build gc + +#include "textflag.h" + +// +// System calls for arm, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + B syscall·Syscall6(SB) + +TEXT ·SyscallNoError(SB),NOSPLIT,$0-24 + BL runtime·entersyscall(SB) + MOVW trap+0(FP), R7 + MOVW a1+4(FP), R0 + MOVW a2+8(FP), R1 + MOVW a3+12(FP), R2 + MOVW $0, R3 + MOVW $0, R4 + MOVW $0, R5 + SWI $0 + MOVW R0, r1+16(FP) + MOVW $0, R0 + MOVW R0, r2+20(FP) + BL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + B syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24 + MOVW trap+0(FP), R7 // syscall entry + MOVW a1+4(FP), R0 + MOVW a2+8(FP), R1 + MOVW a3+12(FP), R2 + SWI $0 + MOVW R0, r1+16(FP) + MOVW $0, R0 + MOVW R0, r2+20(FP) + RET + +TEXT ·seek(SB),NOSPLIT,$0-28 + B syscall·seek(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_arm64.s b/vendor/golang.org/x/sys/unix/asm_linux_arm64.s new file mode 100644 index 0000000..98ae027 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_arm64.s @@ -0,0 +1,53 @@ +// 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. + +//go:build linux && arm64 && gc +// +build linux +// +build arm64 +// +build gc + +#include "textflag.h" + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + B syscall·Syscall6(SB) + +TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 + BL runtime·entersyscall(SB) + MOVD a1+8(FP), R0 + MOVD a2+16(FP), R1 + MOVD a3+24(FP), R2 + MOVD $0, R3 + MOVD $0, R4 + MOVD $0, R5 + MOVD trap+0(FP), R8 // syscall entry + SVC + MOVD R0, r1+32(FP) // r1 + MOVD R1, r2+40(FP) // r2 + BL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + B syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 + MOVD a1+8(FP), R0 + MOVD a2+16(FP), R1 + MOVD a3+24(FP), R2 + MOVD $0, R3 + MOVD $0, R4 + MOVD $0, R5 + MOVD trap+0(FP), R8 // syscall entry + SVC + MOVD R0, r1+32(FP) + MOVD R1, r2+40(FP) + RET diff --git a/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s b/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s new file mode 100644 index 0000000..21231d2 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s @@ -0,0 +1,57 @@ +// 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. + +//go:build linux && (mips64 || mips64le) && gc +// +build linux +// +build mips64 mips64le +// +build gc + +#include "textflag.h" + +// +// System calls for mips64, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 + JAL runtime·entersyscall(SB) + MOVV a1+8(FP), R4 + MOVV a2+16(FP), R5 + MOVV a3+24(FP), R6 + MOVV R0, R7 + MOVV R0, R8 + MOVV R0, R9 + MOVV trap+0(FP), R2 // syscall entry + SYSCALL + MOVV R2, r1+32(FP) + MOVV R3, r2+40(FP) + JAL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 + MOVV a1+8(FP), R4 + MOVV a2+16(FP), R5 + MOVV a3+24(FP), R6 + MOVV R0, R7 + MOVV R0, R8 + MOVV R0, R9 + MOVV trap+0(FP), R2 // syscall entry + SYSCALL + MOVV R2, r1+32(FP) + MOVV R3, r2+40(FP) + RET diff --git a/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s b/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s new file mode 100644 index 0000000..6783b26 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s @@ -0,0 +1,55 @@ +// 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 linux && (mips || mipsle) && gc +// +build linux +// +build mips mipsle +// +build gc + +#include "textflag.h" + +// +// System calls for mips, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + JMP syscall·Syscall9(SB) + +TEXT ·SyscallNoError(SB),NOSPLIT,$0-24 + JAL runtime·entersyscall(SB) + MOVW a1+4(FP), R4 + MOVW a2+8(FP), R5 + MOVW a3+12(FP), R6 + MOVW R0, R7 + MOVW trap+0(FP), R2 // syscall entry + SYSCALL + MOVW R2, r1+16(FP) // r1 + MOVW R3, r2+20(FP) // r2 + JAL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24 + MOVW a1+4(FP), R4 + MOVW a2+8(FP), R5 + MOVW a3+12(FP), R6 + MOVW trap+0(FP), R2 // syscall entry + SYSCALL + MOVW R2, r1+16(FP) + MOVW R3, r2+20(FP) + RET diff --git a/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s b/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s new file mode 100644 index 0000000..19d4989 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s @@ -0,0 +1,45 @@ +// 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 && (ppc64 || ppc64le) && gc +// +build linux +// +build ppc64 ppc64le +// +build gc + +#include "textflag.h" + +// +// System calls for ppc64, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 + BL runtime·entersyscall(SB) + MOVD a1+8(FP), R3 + MOVD a2+16(FP), R4 + MOVD a3+24(FP), R5 + MOVD R0, R6 + MOVD R0, R7 + MOVD R0, R8 + MOVD trap+0(FP), R9 // syscall entry + SYSCALL R9 + MOVD R3, r1+32(FP) + MOVD R4, r2+40(FP) + BL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 + MOVD a1+8(FP), R3 + MOVD a2+16(FP), R4 + MOVD a3+24(FP), R5 + MOVD R0, R6 + MOVD R0, R7 + MOVD R0, R8 + MOVD trap+0(FP), R9 // syscall entry + SYSCALL R9 + MOVD R3, r1+32(FP) + MOVD R4, r2+40(FP) + RET diff --git a/vendor/golang.org/x/sys/unix/asm_linux_riscv64.s b/vendor/golang.org/x/sys/unix/asm_linux_riscv64.s new file mode 100644 index 0000000..e42eb81 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_riscv64.s @@ -0,0 +1,49 @@ +// 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 && gc +// +build riscv64 +// +build gc + +#include "textflag.h" + +// +// System calls for linux/riscv64. +// +// Where available, just jump to package syscall's implementation of +// these functions. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 + CALL runtime·entersyscall(SB) + MOV a1+8(FP), A0 + MOV a2+16(FP), A1 + MOV a3+24(FP), A2 + MOV trap+0(FP), A7 // syscall entry + ECALL + MOV A0, r1+32(FP) // r1 + MOV A1, r2+40(FP) // r2 + CALL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 + MOV a1+8(FP), A0 + MOV a2+16(FP), A1 + MOV a3+24(FP), A2 + MOV trap+0(FP), A7 // syscall entry + ECALL + MOV A0, r1+32(FP) + MOV A1, r2+40(FP) + RET diff --git a/vendor/golang.org/x/sys/unix/asm_linux_s390x.s b/vendor/golang.org/x/sys/unix/asm_linux_s390x.s new file mode 100644 index 0000000..c46aab3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_s390x.s @@ -0,0 +1,57 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build linux && s390x && gc +// +build linux +// +build s390x +// +build gc + +#include "textflag.h" + +// +// System calls for s390x, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + BR syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + BR syscall·Syscall6(SB) + +TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 + BL runtime·entersyscall(SB) + MOVD a1+8(FP), R2 + MOVD a2+16(FP), R3 + MOVD a3+24(FP), R4 + MOVD $0, R5 + MOVD $0, R6 + MOVD $0, R7 + MOVD trap+0(FP), R1 // syscall entry + SYSCALL + MOVD R2, r1+32(FP) + MOVD R3, r2+40(FP) + BL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + BR syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + BR syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 + MOVD a1+8(FP), R2 + MOVD a2+16(FP), R3 + MOVD a3+24(FP), R4 + MOVD $0, R5 + MOVD $0, R6 + MOVD $0, R7 + MOVD trap+0(FP), R1 // syscall entry + SYSCALL + MOVD R2, r1+32(FP) + MOVD R3, r2+40(FP) + RET diff --git a/vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s b/vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s new file mode 100644 index 0000000..5e7a116 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s @@ -0,0 +1,30 @@ +// 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 +// +build gc + +#include "textflag.h" + +// +// System call support for mips64, OpenBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s b/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s new file mode 100644 index 0000000..f8c5394 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s @@ -0,0 +1,18 @@ +// 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 gc +// +build gc + +#include "textflag.h" + +// +// System calls for amd64, Solaris are implemented in runtime/syscall_solaris.go +// + +TEXT ·sysvicall6(SB),NOSPLIT,$0-88 + JMP syscall·sysvicall6(SB) + +TEXT ·rawSysvicall6(SB),NOSPLIT,$0-88 + JMP syscall·rawSysvicall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_zos_s390x.s b/vendor/golang.org/x/sys/unix/asm_zos_s390x.s new file mode 100644 index 0000000..3b54e18 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_zos_s390x.s @@ -0,0 +1,426 @@ +// 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 zos && s390x && gc +// +build zos +// +build s390x +// +build gc + +#include "textflag.h" + +#define PSALAA 1208(R0) +#define GTAB64(x) 80(x) +#define LCA64(x) 88(x) +#define CAA(x) 8(x) +#define EDCHPXV(x) 1016(x) // in the CAA +#define SAVSTACK_ASYNC(x) 336(x) // in the LCA + +// SS_*, where x=SAVSTACK_ASYNC +#define SS_LE(x) 0(x) +#define SS_GO(x) 8(x) +#define SS_ERRNO(x) 16(x) +#define SS_ERRNOJR(x) 20(x) + +#define LE_CALL BYTE $0x0D; BYTE $0x76; // BL R7, R6 + +TEXT ·clearErrno(SB),NOSPLIT,$0-0 + BL addrerrno<>(SB) + MOVD $0, 0(R3) + RET + +// Returns the address of errno in R3. +TEXT addrerrno<>(SB),NOSPLIT|NOFRAME,$0-0 + // Get library control area (LCA). + MOVW PSALAA, R8 + MOVD LCA64(R8), R8 + + // Get __errno FuncDesc. + MOVD CAA(R8), R9 + MOVD EDCHPXV(R9), R9 + ADD $(0x156*16), R9 + LMG 0(R9), R5, R6 + + // Switch to saved LE stack. + MOVD SAVSTACK_ASYNC(R8), R9 + MOVD 0(R9), R4 + MOVD $0, 0(R9) + + // Call __errno function. + LE_CALL + NOPH + + // Switch back to Go stack. + XOR R0, R0 // Restore R0 to $0. + MOVD R4, 0(R9) // Save stack pointer. + RET + +TEXT ·syscall_syscall(SB),NOSPLIT,$0-56 + BL runtime·entersyscall(SB) + MOVD a1+8(FP), R1 + MOVD a2+16(FP), R2 + MOVD a3+24(FP), R3 + + // Get library control area (LCA). + MOVW PSALAA, R8 + MOVD LCA64(R8), R8 + + // Get function. + MOVD CAA(R8), R9 + MOVD EDCHPXV(R9), R9 + MOVD trap+0(FP), R5 + SLD $4, R5 + ADD R5, R9 + LMG 0(R9), R5, R6 + + // Restore LE stack. + MOVD SAVSTACK_ASYNC(R8), R9 + MOVD 0(R9), R4 + MOVD $0, 0(R9) + + // Call function. + LE_CALL + NOPH + XOR R0, R0 // Restore R0 to $0. + MOVD R4, 0(R9) // Save stack pointer. + + MOVD R3, r1+32(FP) + MOVD R0, r2+40(FP) + MOVD R0, err+48(FP) + MOVW R3, R4 + CMP R4, $-1 + BNE done + BL addrerrno<>(SB) + MOVWZ 0(R3), R3 + MOVD R3, err+48(FP) +done: + BL runtime·exitsyscall(SB) + RET + +TEXT ·syscall_rawsyscall(SB),NOSPLIT,$0-56 + MOVD a1+8(FP), R1 + MOVD a2+16(FP), R2 + MOVD a3+24(FP), R3 + + // Get library control area (LCA). + MOVW PSALAA, R8 + MOVD LCA64(R8), R8 + + // Get function. + MOVD CAA(R8), R9 + MOVD EDCHPXV(R9), R9 + MOVD trap+0(FP), R5 + SLD $4, R5 + ADD R5, R9 + LMG 0(R9), R5, R6 + + // Restore LE stack. + MOVD SAVSTACK_ASYNC(R8), R9 + MOVD 0(R9), R4 + MOVD $0, 0(R9) + + // Call function. + LE_CALL + NOPH + XOR R0, R0 // Restore R0 to $0. + MOVD R4, 0(R9) // Save stack pointer. + + MOVD R3, r1+32(FP) + MOVD R0, r2+40(FP) + MOVD R0, err+48(FP) + MOVW R3, R4 + CMP R4, $-1 + BNE done + BL addrerrno<>(SB) + MOVWZ 0(R3), R3 + MOVD R3, err+48(FP) +done: + RET + +TEXT ·syscall_syscall6(SB),NOSPLIT,$0-80 + BL runtime·entersyscall(SB) + MOVD a1+8(FP), R1 + MOVD a2+16(FP), R2 + MOVD a3+24(FP), R3 + + // Get library control area (LCA). + MOVW PSALAA, R8 + MOVD LCA64(R8), R8 + + // Get function. + MOVD CAA(R8), R9 + MOVD EDCHPXV(R9), R9 + MOVD trap+0(FP), R5 + SLD $4, R5 + ADD R5, R9 + LMG 0(R9), R5, R6 + + // Restore LE stack. + MOVD SAVSTACK_ASYNC(R8), R9 + MOVD 0(R9), R4 + MOVD $0, 0(R9) + + // Fill in parameter list. + MOVD a4+32(FP), R12 + MOVD R12, (2176+24)(R4) + MOVD a5+40(FP), R12 + MOVD R12, (2176+32)(R4) + MOVD a6+48(FP), R12 + MOVD R12, (2176+40)(R4) + + // Call function. + LE_CALL + NOPH + XOR R0, R0 // Restore R0 to $0. + MOVD R4, 0(R9) // Save stack pointer. + + MOVD R3, r1+56(FP) + MOVD R0, r2+64(FP) + MOVD R0, err+72(FP) + MOVW R3, R4 + CMP R4, $-1 + BNE done + BL addrerrno<>(SB) + MOVWZ 0(R3), R3 + MOVD R3, err+72(FP) +done: + BL runtime·exitsyscall(SB) + RET + +TEXT ·syscall_rawsyscall6(SB),NOSPLIT,$0-80 + MOVD a1+8(FP), R1 + MOVD a2+16(FP), R2 + MOVD a3+24(FP), R3 + + // Get library control area (LCA). + MOVW PSALAA, R8 + MOVD LCA64(R8), R8 + + // Get function. + MOVD CAA(R8), R9 + MOVD EDCHPXV(R9), R9 + MOVD trap+0(FP), R5 + SLD $4, R5 + ADD R5, R9 + LMG 0(R9), R5, R6 + + // Restore LE stack. + MOVD SAVSTACK_ASYNC(R8), R9 + MOVD 0(R9), R4 + MOVD $0, 0(R9) + + // Fill in parameter list. + MOVD a4+32(FP), R12 + MOVD R12, (2176+24)(R4) + MOVD a5+40(FP), R12 + MOVD R12, (2176+32)(R4) + MOVD a6+48(FP), R12 + MOVD R12, (2176+40)(R4) + + // Call function. + LE_CALL + NOPH + XOR R0, R0 // Restore R0 to $0. + MOVD R4, 0(R9) // Save stack pointer. + + MOVD R3, r1+56(FP) + MOVD R0, r2+64(FP) + MOVD R0, err+72(FP) + MOVW R3, R4 + CMP R4, $-1 + BNE done + BL ·rrno<>(SB) + MOVWZ 0(R3), R3 + MOVD R3, err+72(FP) +done: + RET + +TEXT ·syscall_syscall9(SB),NOSPLIT,$0 + BL runtime·entersyscall(SB) + MOVD a1+8(FP), R1 + MOVD a2+16(FP), R2 + MOVD a3+24(FP), R3 + + // Get library control area (LCA). + MOVW PSALAA, R8 + MOVD LCA64(R8), R8 + + // Get function. + MOVD CAA(R8), R9 + MOVD EDCHPXV(R9), R9 + MOVD trap+0(FP), R5 + SLD $4, R5 + ADD R5, R9 + LMG 0(R9), R5, R6 + + // Restore LE stack. + MOVD SAVSTACK_ASYNC(R8), R9 + MOVD 0(R9), R4 + MOVD $0, 0(R9) + + // Fill in parameter list. + MOVD a4+32(FP), R12 + MOVD R12, (2176+24)(R4) + MOVD a5+40(FP), R12 + MOVD R12, (2176+32)(R4) + MOVD a6+48(FP), R12 + MOVD R12, (2176+40)(R4) + MOVD a7+56(FP), R12 + MOVD R12, (2176+48)(R4) + MOVD a8+64(FP), R12 + MOVD R12, (2176+56)(R4) + MOVD a9+72(FP), R12 + MOVD R12, (2176+64)(R4) + + // Call function. + LE_CALL + NOPH + XOR R0, R0 // Restore R0 to $0. + MOVD R4, 0(R9) // Save stack pointer. + + MOVD R3, r1+80(FP) + MOVD R0, r2+88(FP) + MOVD R0, err+96(FP) + MOVW R3, R4 + CMP R4, $-1 + BNE done + BL addrerrno<>(SB) + MOVWZ 0(R3), R3 + MOVD R3, err+96(FP) +done: + BL runtime·exitsyscall(SB) + RET + +TEXT ·syscall_rawsyscall9(SB),NOSPLIT,$0 + MOVD a1+8(FP), R1 + MOVD a2+16(FP), R2 + MOVD a3+24(FP), R3 + + // Get library control area (LCA). + MOVW PSALAA, R8 + MOVD LCA64(R8), R8 + + // Get function. + MOVD CAA(R8), R9 + MOVD EDCHPXV(R9), R9 + MOVD trap+0(FP), R5 + SLD $4, R5 + ADD R5, R9 + LMG 0(R9), R5, R6 + + // Restore LE stack. + MOVD SAVSTACK_ASYNC(R8), R9 + MOVD 0(R9), R4 + MOVD $0, 0(R9) + + // Fill in parameter list. + MOVD a4+32(FP), R12 + MOVD R12, (2176+24)(R4) + MOVD a5+40(FP), R12 + MOVD R12, (2176+32)(R4) + MOVD a6+48(FP), R12 + MOVD R12, (2176+40)(R4) + MOVD a7+56(FP), R12 + MOVD R12, (2176+48)(R4) + MOVD a8+64(FP), R12 + MOVD R12, (2176+56)(R4) + MOVD a9+72(FP), R12 + MOVD R12, (2176+64)(R4) + + // Call function. + LE_CALL + NOPH + XOR R0, R0 // Restore R0 to $0. + MOVD R4, 0(R9) // Save stack pointer. + + MOVD R3, r1+80(FP) + MOVD R0, r2+88(FP) + MOVD R0, err+96(FP) + MOVW R3, R4 + CMP R4, $-1 + BNE done + BL addrerrno<>(SB) + MOVWZ 0(R3), R3 + MOVD R3, err+96(FP) +done: + RET + +// func svcCall(fnptr unsafe.Pointer, argv *unsafe.Pointer, dsa *uint64) +TEXT ·svcCall(SB),NOSPLIT,$0 + BL runtime·save_g(SB) // Save g and stack pointer + MOVW PSALAA, R8 + MOVD LCA64(R8), R8 + MOVD SAVSTACK_ASYNC(R8), R9 + MOVD R15, 0(R9) + + MOVD argv+8(FP), R1 // Move function arguments into registers + MOVD dsa+16(FP), g + MOVD fnptr+0(FP), R15 + + BYTE $0x0D // Branch to function + BYTE $0xEF + + BL runtime·load_g(SB) // Restore g and stack pointer + MOVW PSALAA, R8 + MOVD LCA64(R8), R8 + MOVD SAVSTACK_ASYNC(R8), R9 + MOVD 0(R9), R15 + + RET + +// func svcLoad(name *byte) unsafe.Pointer +TEXT ·svcLoad(SB),NOSPLIT,$0 + MOVD R15, R2 // Save go stack pointer + MOVD name+0(FP), R0 // Move SVC args into registers + MOVD $0x80000000, R1 + MOVD $0, R15 + BYTE $0x0A // SVC 08 LOAD + BYTE $0x08 + MOVW R15, R3 // Save return code from SVC + MOVD R2, R15 // Restore go stack pointer + CMP R3, $0 // Check SVC return code + BNE error + + MOVD $-2, R3 // Reset last bit of entry point to zero + AND R0, R3 + MOVD R3, addr+8(FP) // Return entry point returned by SVC + CMP R0, R3 // Check if last bit of entry point was set + BNE done + + MOVD R15, R2 // Save go stack pointer + MOVD $0, R15 // Move SVC args into registers (entry point still in r0 from SVC 08) + BYTE $0x0A // SVC 09 DELETE + BYTE $0x09 + MOVD R2, R15 // Restore go stack pointer + +error: + MOVD $0, addr+8(FP) // Return 0 on failure +done: + XOR R0, R0 // Reset r0 to 0 + RET + +// func svcUnload(name *byte, fnptr unsafe.Pointer) int64 +TEXT ·svcUnload(SB),NOSPLIT,$0 + MOVD R15, R2 // Save go stack pointer + MOVD name+0(FP), R0 // Move SVC args into registers + MOVD addr+8(FP), R15 + BYTE $0x0A // SVC 09 + BYTE $0x09 + XOR R0, R0 // Reset r0 to 0 + MOVD R15, R1 // Save SVC return code + MOVD R2, R15 // Restore go stack pointer + MOVD R1, rc+0(FP) // Return SVC return code + RET + +// func gettid() uint64 +TEXT ·gettid(SB), NOSPLIT, $0 + // Get library control area (LCA). + MOVW PSALAA, R8 + MOVD LCA64(R8), R8 + + // Get CEECAATHDID + MOVD CAA(R8), R9 + MOVD 0x3D0(R9), R9 + MOVD R9, ret+0(FP) + + RET diff --git a/vendor/golang.org/x/sys/unix/bluetooth_linux.go b/vendor/golang.org/x/sys/unix/bluetooth_linux.go new file mode 100644 index 0000000..a178a61 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/bluetooth_linux.go @@ -0,0 +1,36 @@ +// 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. + +// Bluetooth sockets and messages + +package unix + +// Bluetooth Protocols +const ( + BTPROTO_L2CAP = 0 + BTPROTO_HCI = 1 + BTPROTO_SCO = 2 + BTPROTO_RFCOMM = 3 + BTPROTO_BNEP = 4 + BTPROTO_CMTP = 5 + BTPROTO_HIDP = 6 + BTPROTO_AVDTP = 7 +) + +const ( + HCI_CHANNEL_RAW = 0 + HCI_CHANNEL_USER = 1 + HCI_CHANNEL_MONITOR = 2 + HCI_CHANNEL_CONTROL = 3 + HCI_CHANNEL_LOGGING = 4 +) + +// Socketoption Level +const ( + SOL_BLUETOOTH = 0x112 + SOL_HCI = 0x0 + SOL_L2CAP = 0x6 + SOL_RFCOMM = 0x12 + SOL_SCO = 0x11 +) diff --git a/vendor/golang.org/x/sys/unix/cap_freebsd.go b/vendor/golang.org/x/sys/unix/cap_freebsd.go new file mode 100644 index 0000000..0b7c6ad --- /dev/null +++ b/vendor/golang.org/x/sys/unix/cap_freebsd.go @@ -0,0 +1,196 @@ +// 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 freebsd +// +build freebsd + +package unix + +import ( + "errors" + "fmt" +) + +// Go implementation of C mostly found in /usr/src/sys/kern/subr_capability.c + +const ( + // This is the version of CapRights this package understands. See C implementation for parallels. + capRightsGoVersion = CAP_RIGHTS_VERSION_00 + capArSizeMin = CAP_RIGHTS_VERSION_00 + 2 + capArSizeMax = capRightsGoVersion + 2 +) + +var ( + bit2idx = []int{ + -1, 0, 1, -1, 2, -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, + 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + } +) + +func capidxbit(right uint64) int { + return int((right >> 57) & 0x1f) +} + +func rightToIndex(right uint64) (int, error) { + idx := capidxbit(right) + if idx < 0 || idx >= len(bit2idx) { + return -2, fmt.Errorf("index for right 0x%x out of range", right) + } + return bit2idx[idx], nil +} + +func caprver(right uint64) int { + return int(right >> 62) +} + +func capver(rights *CapRights) int { + return caprver(rights.Rights[0]) +} + +func caparsize(rights *CapRights) int { + return capver(rights) + 2 +} + +// CapRightsSet sets the permissions in setrights in rights. +func CapRightsSet(rights *CapRights, setrights []uint64) error { + // This is essentially a copy of cap_rights_vset() + if capver(rights) != CAP_RIGHTS_VERSION_00 { + return fmt.Errorf("bad rights version %d", capver(rights)) + } + + n := caparsize(rights) + if n < capArSizeMin || n > capArSizeMax { + return errors.New("bad rights size") + } + + for _, right := range setrights { + if caprver(right) != CAP_RIGHTS_VERSION_00 { + return errors.New("bad right version") + } + i, err := rightToIndex(right) + if err != nil { + return err + } + if i >= n { + return errors.New("index overflow") + } + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return errors.New("index mismatch") + } + rights.Rights[i] |= right + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return errors.New("index mismatch (after assign)") + } + } + + return nil +} + +// CapRightsClear clears the permissions in clearrights from rights. +func CapRightsClear(rights *CapRights, clearrights []uint64) error { + // This is essentially a copy of cap_rights_vclear() + if capver(rights) != CAP_RIGHTS_VERSION_00 { + return fmt.Errorf("bad rights version %d", capver(rights)) + } + + n := caparsize(rights) + if n < capArSizeMin || n > capArSizeMax { + return errors.New("bad rights size") + } + + for _, right := range clearrights { + if caprver(right) != CAP_RIGHTS_VERSION_00 { + return errors.New("bad right version") + } + i, err := rightToIndex(right) + if err != nil { + return err + } + if i >= n { + return errors.New("index overflow") + } + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return errors.New("index mismatch") + } + rights.Rights[i] &= ^(right & 0x01FFFFFFFFFFFFFF) + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return errors.New("index mismatch (after assign)") + } + } + + return nil +} + +// CapRightsIsSet checks whether all the permissions in setrights are present in rights. +func CapRightsIsSet(rights *CapRights, setrights []uint64) (bool, error) { + // This is essentially a copy of cap_rights_is_vset() + if capver(rights) != CAP_RIGHTS_VERSION_00 { + return false, fmt.Errorf("bad rights version %d", capver(rights)) + } + + n := caparsize(rights) + if n < capArSizeMin || n > capArSizeMax { + return false, errors.New("bad rights size") + } + + for _, right := range setrights { + if caprver(right) != CAP_RIGHTS_VERSION_00 { + return false, errors.New("bad right version") + } + i, err := rightToIndex(right) + if err != nil { + return false, err + } + if i >= n { + return false, errors.New("index overflow") + } + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return false, errors.New("index mismatch") + } + if (rights.Rights[i] & right) != right { + return false, nil + } + } + + return true, nil +} + +func capright(idx uint64, bit uint64) uint64 { + return ((1 << (57 + idx)) | bit) +} + +// CapRightsInit returns a pointer to an initialised CapRights structure filled with rights. +// See man cap_rights_init(3) and rights(4). +func CapRightsInit(rights []uint64) (*CapRights, error) { + var r CapRights + r.Rights[0] = (capRightsGoVersion << 62) | capright(0, 0) + r.Rights[1] = capright(1, 0) + + err := CapRightsSet(&r, rights) + if err != nil { + return nil, err + } + return &r, nil +} + +// CapRightsLimit reduces the operations permitted on fd to at most those contained in rights. +// The capability rights on fd can never be increased by CapRightsLimit. +// See man cap_rights_limit(2) and rights(4). +func CapRightsLimit(fd uintptr, rights *CapRights) error { + return capRightsLimit(int(fd), rights) +} + +// CapRightsGet returns a CapRights structure containing the operations permitted on fd. +// See man cap_rights_get(3) and rights(4). +func CapRightsGet(fd uintptr) (*CapRights, error) { + r, err := CapRightsInit(nil) + if err != nil { + return nil, err + } + err = capRightsGet(capRightsGoVersion, int(fd), r) + if err != nil { + return nil, err + } + return r, nil +} diff --git a/vendor/golang.org/x/sys/unix/constants.go b/vendor/golang.org/x/sys/unix/constants.go new file mode 100644 index 0000000..394a396 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/constants.go @@ -0,0 +1,14 @@ +// 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. + +//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos + +package unix + +const ( + R_OK = 0x4 + W_OK = 0x2 + X_OK = 0x1 +) diff --git a/vendor/golang.org/x/sys/unix/dev_aix_ppc.go b/vendor/golang.org/x/sys/unix/dev_aix_ppc.go new file mode 100644 index 0000000..65a9985 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_aix_ppc.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 aix && ppc +// +build aix,ppc + +// Functions to access/create device major and minor numbers matching the +// encoding used by AIX. + +package unix + +// Major returns the major component of a Linux device number. +func Major(dev uint64) uint32 { + return uint32((dev >> 16) & 0xffff) +} + +// Minor returns the minor component of a Linux device number. +func Minor(dev uint64) uint32 { + return uint32(dev & 0xffff) +} + +// Mkdev returns a Linux device number generated from the given major and minor +// components. +func Mkdev(major, minor uint32) uint64 { + return uint64(((major) << 16) | (minor)) +} diff --git a/vendor/golang.org/x/sys/unix/dev_aix_ppc64.go b/vendor/golang.org/x/sys/unix/dev_aix_ppc64.go new file mode 100644 index 0000000..8fc08ad --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_aix_ppc64.go @@ -0,0 +1,29 @@ +// 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 aix && ppc64 +// +build aix,ppc64 + +// Functions to access/create device major and minor numbers matching the +// encoding used AIX. + +package unix + +// Major returns the major component of a Linux device number. +func Major(dev uint64) uint32 { + return uint32((dev & 0x3fffffff00000000) >> 32) +} + +// Minor returns the minor component of a Linux device number. +func Minor(dev uint64) uint32 { + return uint32((dev & 0x00000000ffffffff) >> 0) +} + +// Mkdev returns a Linux device number generated from the given major and minor +// components. +func Mkdev(major, minor uint32) uint64 { + var DEVNO64 uint64 + DEVNO64 = 0x8000000000000000 + return ((uint64(major) << 32) | (uint64(minor) & 0x00000000FFFFFFFF) | DEVNO64) +} diff --git a/vendor/golang.org/x/sys/unix/dev_darwin.go b/vendor/golang.org/x/sys/unix/dev_darwin.go new file mode 100644 index 0000000..8d1dc0f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_darwin.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. + +// Functions to access/create device major and minor numbers matching the +// encoding used in Darwin's sys/types.h header. + +package unix + +// Major returns the major component of a Darwin device number. +func Major(dev uint64) uint32 { + return uint32((dev >> 24) & 0xff) +} + +// Minor returns the minor component of a Darwin device number. +func Minor(dev uint64) uint32 { + return uint32(dev & 0xffffff) +} + +// Mkdev returns a Darwin device number generated from the given major and minor +// components. +func Mkdev(major, minor uint32) uint64 { + return (uint64(major) << 24) | uint64(minor) +} diff --git a/vendor/golang.org/x/sys/unix/dev_dragonfly.go b/vendor/golang.org/x/sys/unix/dev_dragonfly.go new file mode 100644 index 0000000..8502f20 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_dragonfly.go @@ -0,0 +1,30 @@ +// 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. + +// Functions to access/create device major and minor numbers matching the +// encoding used in Dragonfly's sys/types.h header. +// +// The information below is extracted and adapted from sys/types.h: +// +// Minor gives a cookie instead of an index since in order to avoid changing the +// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for +// devices that don't use them. + +package unix + +// Major returns the major component of a DragonFlyBSD device number. +func Major(dev uint64) uint32 { + return uint32((dev >> 8) & 0xff) +} + +// Minor returns the minor component of a DragonFlyBSD device number. +func Minor(dev uint64) uint32 { + return uint32(dev & 0xffff00ff) +} + +// Mkdev returns a DragonFlyBSD device number generated from the given major and +// minor components. +func Mkdev(major, minor uint32) uint64 { + return (uint64(major) << 8) | uint64(minor) +} diff --git a/vendor/golang.org/x/sys/unix/dev_freebsd.go b/vendor/golang.org/x/sys/unix/dev_freebsd.go new file mode 100644 index 0000000..eba3b4b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_freebsd.go @@ -0,0 +1,30 @@ +// 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. + +// Functions to access/create device major and minor numbers matching the +// encoding used in FreeBSD's sys/types.h header. +// +// The information below is extracted and adapted from sys/types.h: +// +// Minor gives a cookie instead of an index since in order to avoid changing the +// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for +// devices that don't use them. + +package unix + +// Major returns the major component of a FreeBSD device number. +func Major(dev uint64) uint32 { + return uint32((dev >> 8) & 0xff) +} + +// Minor returns the minor component of a FreeBSD device number. +func Minor(dev uint64) uint32 { + return uint32(dev & 0xffff00ff) +} + +// Mkdev returns a FreeBSD device number generated from the given major and +// minor components. +func Mkdev(major, minor uint32) uint64 { + return (uint64(major) << 8) | uint64(minor) +} diff --git a/vendor/golang.org/x/sys/unix/dev_linux.go b/vendor/golang.org/x/sys/unix/dev_linux.go new file mode 100644 index 0000000..d165d6f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_linux.go @@ -0,0 +1,42 @@ +// 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. + +// Functions to access/create device major and minor numbers matching the +// encoding used by the Linux kernel and glibc. +// +// The information below is extracted and adapted from bits/sysmacros.h in the +// glibc sources: +// +// dev_t in glibc is 64-bit, with 32-bit major and minor numbers. glibc's +// default encoding is MMMM Mmmm mmmM MMmm, where M is a hex digit of the major +// number and m is a hex digit of the minor number. This is backward compatible +// with legacy systems where dev_t is 16 bits wide, encoded as MMmm. It is also +// backward compatible with the Linux kernel, which for some architectures uses +// 32-bit dev_t, encoded as mmmM MMmm. + +package unix + +// Major returns the major component of a Linux device number. +func Major(dev uint64) uint32 { + major := uint32((dev & 0x00000000000fff00) >> 8) + major |= uint32((dev & 0xfffff00000000000) >> 32) + return major +} + +// Minor returns the minor component of a Linux device number. +func Minor(dev uint64) uint32 { + minor := uint32((dev & 0x00000000000000ff) >> 0) + minor |= uint32((dev & 0x00000ffffff00000) >> 12) + return minor +} + +// Mkdev returns a Linux device number generated from the given major and minor +// components. +func Mkdev(major, minor uint32) uint64 { + dev := (uint64(major) & 0x00000fff) << 8 + dev |= (uint64(major) & 0xfffff000) << 32 + dev |= (uint64(minor) & 0x000000ff) << 0 + dev |= (uint64(minor) & 0xffffff00) << 12 + return dev +} diff --git a/vendor/golang.org/x/sys/unix/dev_netbsd.go b/vendor/golang.org/x/sys/unix/dev_netbsd.go new file mode 100644 index 0000000..b4a203d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_netbsd.go @@ -0,0 +1,29 @@ +// 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. + +// Functions to access/create device major and minor numbers matching the +// encoding used in NetBSD's sys/types.h header. + +package unix + +// Major returns the major component of a NetBSD device number. +func Major(dev uint64) uint32 { + return uint32((dev & 0x000fff00) >> 8) +} + +// Minor returns the minor component of a NetBSD device number. +func Minor(dev uint64) uint32 { + minor := uint32((dev & 0x000000ff) >> 0) + minor |= uint32((dev & 0xfff00000) >> 12) + return minor +} + +// Mkdev returns a NetBSD device number generated from the given major and minor +// components. +func Mkdev(major, minor uint32) uint64 { + dev := (uint64(major) << 8) & 0x000fff00 + dev |= (uint64(minor) << 12) & 0xfff00000 + dev |= (uint64(minor) << 0) & 0x000000ff + return dev +} diff --git a/vendor/golang.org/x/sys/unix/dev_openbsd.go b/vendor/golang.org/x/sys/unix/dev_openbsd.go new file mode 100644 index 0000000..f3430c4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_openbsd.go @@ -0,0 +1,29 @@ +// 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. + +// Functions to access/create device major and minor numbers matching the +// encoding used in OpenBSD's sys/types.h header. + +package unix + +// Major returns the major component of an OpenBSD device number. +func Major(dev uint64) uint32 { + return uint32((dev & 0x0000ff00) >> 8) +} + +// Minor returns the minor component of an OpenBSD device number. +func Minor(dev uint64) uint32 { + minor := uint32((dev & 0x000000ff) >> 0) + minor |= uint32((dev & 0xffff0000) >> 8) + return minor +} + +// Mkdev returns an OpenBSD device number generated from the given major and minor +// components. +func Mkdev(major, minor uint32) uint64 { + dev := (uint64(major) << 8) & 0x0000ff00 + dev |= (uint64(minor) << 8) & 0xffff0000 + dev |= (uint64(minor) << 0) & 0x000000ff + return dev +} diff --git a/vendor/golang.org/x/sys/unix/dev_zos.go b/vendor/golang.org/x/sys/unix/dev_zos.go new file mode 100644 index 0000000..a388e59 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_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. + +//go:build zos && s390x +// +build zos,s390x + +// Functions to access/create device major and minor numbers matching the +// encoding used by z/OS. +// +// The information below is extracted and adapted from macros. + +package unix + +// Major returns the major component of a z/OS device number. +func Major(dev uint64) uint32 { + return uint32((dev >> 16) & 0x0000FFFF) +} + +// Minor returns the minor component of a z/OS device number. +func Minor(dev uint64) uint32 { + return uint32(dev & 0x0000FFFF) +} + +// Mkdev returns a z/OS device number generated from the given major and minor +// components. +func Mkdev(major, minor uint32) uint64 { + return (uint64(major) << 16) | uint64(minor) +} diff --git a/vendor/golang.org/x/sys/unix/dirent.go b/vendor/golang.org/x/sys/unix/dirent.go new file mode 100644 index 0000000..e74e5ea --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dirent.go @@ -0,0 +1,103 @@ +// 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 aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix + +import "unsafe" + +// readInt returns the size-bytes unsigned integer in native byte order at offset off. +func readInt(b []byte, off, size uintptr) (u uint64, ok bool) { + if len(b) < int(off+size) { + return 0, false + } + if isBigEndian { + return readIntBE(b[off:], size), true + } + return readIntLE(b[off:], size), true +} + +func readIntBE(b []byte, size uintptr) uint64 { + switch size { + case 1: + return uint64(b[0]) + case 2: + _ = b[1] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[1]) | uint64(b[0])<<8 + case 4: + _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[3]) | uint64(b[2])<<8 | uint64(b[1])<<16 | uint64(b[0])<<24 + case 8: + _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | + uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56 + default: + panic("syscall: readInt with unsupported size") + } +} + +func readIntLE(b []byte, size uintptr) uint64 { + switch size { + case 1: + return uint64(b[0]) + case 2: + _ = b[1] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[0]) | uint64(b[1])<<8 + case 4: + _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 + case 8: + _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | + uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 + default: + panic("syscall: readInt with unsupported size") + } +} + +// ParseDirent parses up to max directory entries in buf, +// appending the names to names. It returns the number of +// bytes consumed from buf, the number of entries added +// to names, and the new names slice. +func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) { + origlen := len(buf) + count = 0 + for max != 0 && len(buf) > 0 { + reclen, ok := direntReclen(buf) + if !ok || reclen > uint64(len(buf)) { + return origlen, count, names + } + rec := buf[:reclen] + buf = buf[reclen:] + ino, ok := direntIno(rec) + if !ok { + break + } + if ino == 0 { // File absent in directory. + continue + } + const namoff = uint64(unsafe.Offsetof(Dirent{}.Name)) + namlen, ok := direntNamlen(rec) + if !ok || namoff+namlen > uint64(len(rec)) { + break + } + name := rec[namoff : namoff+namlen] + for i, c := range name { + if c == 0 { + name = name[:i] + break + } + } + // Check for useless names before allocating a string. + if string(name) == "." || string(name) == ".." { + continue + } + max-- + count++ + names = append(names, string(name)) + } + return origlen - len(buf), count, names +} diff --git a/vendor/golang.org/x/sys/unix/endian_big.go b/vendor/golang.org/x/sys/unix/endian_big.go new file mode 100644 index 0000000..a520265 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/endian_big.go @@ -0,0 +1,10 @@ +// 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 armbe || arm64be || m68k || mips || mips64 || mips64p32 || ppc || ppc64 || s390 || s390x || shbe || sparc || sparc64 +// +build armbe arm64be m68k mips mips64 mips64p32 ppc ppc64 s390 s390x shbe sparc sparc64 + +package unix + +const isBigEndian = true diff --git a/vendor/golang.org/x/sys/unix/endian_little.go b/vendor/golang.org/x/sys/unix/endian_little.go new file mode 100644 index 0000000..4362f47 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/endian_little.go @@ -0,0 +1,10 @@ +// 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 386 || amd64 || amd64p32 || alpha || arm || arm64 || mipsle || mips64le || mips64p32le || nios2 || ppc64le || riscv || riscv64 || sh +// +build 386 amd64 amd64p32 alpha arm arm64 mipsle mips64le mips64p32le nios2 ppc64le riscv riscv64 sh + +package unix + +const isBigEndian = false diff --git a/vendor/golang.org/x/sys/unix/env_unix.go b/vendor/golang.org/x/sys/unix/env_unix.go new file mode 100644 index 0000000..29ccc4d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/env_unix.go @@ -0,0 +1,32 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos + +// Unix environment variables. + +package unix + +import "syscall" + +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() +} + +func Unsetenv(key string) error { + return syscall.Unsetenv(key) +} diff --git a/vendor/golang.org/x/sys/unix/epoll_zos.go b/vendor/golang.org/x/sys/unix/epoll_zos.go new file mode 100644 index 0000000..cedaf7e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/epoll_zos.go @@ -0,0 +1,221 @@ +// 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 zos && s390x +// +build zos,s390x + +package unix + +import ( + "sync" +) + +// This file simulates epoll on z/OS using poll. + +// Analogous to epoll_event on Linux. +// TODO(neeilan): Pad is because the Linux kernel expects a 96-bit struct. We never pass this to the kernel; remove? +type EpollEvent struct { + Events uint32 + Fd int32 + Pad int32 +} + +const ( + EPOLLERR = 0x8 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDNORM = 0x40 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + // The following constants are part of the epoll API, but represent + // currently unsupported functionality on z/OS. + // EPOLL_CLOEXEC = 0x80000 + // EPOLLET = 0x80000000 + // EPOLLONESHOT = 0x40000000 + // EPOLLRDHUP = 0x2000 // Typically used with edge-triggered notis + // EPOLLEXCLUSIVE = 0x10000000 // Exclusive wake-up mode + // EPOLLWAKEUP = 0x20000000 // Relies on Linux's BLOCK_SUSPEND capability +) + +// TODO(neeilan): We can eliminate these epToPoll / pToEpoll calls by using identical mask values for POLL/EPOLL +// constants where possible The lower 16 bits of epoll events (uint32) can fit any system poll event (int16). + +// epToPollEvt converts epoll event field to poll equivalent. +// In epoll, Events is a 32-bit field, while poll uses 16 bits. +func epToPollEvt(events uint32) int16 { + var ep2p = map[uint32]int16{ + EPOLLIN: POLLIN, + EPOLLOUT: POLLOUT, + EPOLLHUP: POLLHUP, + EPOLLPRI: POLLPRI, + EPOLLERR: POLLERR, + } + + var pollEvts int16 = 0 + for epEvt, pEvt := range ep2p { + if (events & epEvt) != 0 { + pollEvts |= pEvt + } + } + + return pollEvts +} + +// pToEpollEvt converts 16 bit poll event bitfields to 32-bit epoll event fields. +func pToEpollEvt(revents int16) uint32 { + var p2ep = map[int16]uint32{ + POLLIN: EPOLLIN, + POLLOUT: EPOLLOUT, + POLLHUP: EPOLLHUP, + POLLPRI: EPOLLPRI, + POLLERR: EPOLLERR, + } + + var epollEvts uint32 = 0 + for pEvt, epEvt := range p2ep { + if (revents & pEvt) != 0 { + epollEvts |= epEvt + } + } + + return epollEvts +} + +// Per-process epoll implementation. +type epollImpl struct { + mu sync.Mutex + epfd2ep map[int]*eventPoll + nextEpfd int +} + +// eventPoll holds a set of file descriptors being watched by the process. A process can have multiple epoll instances. +// On Linux, this is an in-kernel data structure accessed through a fd. +type eventPoll struct { + mu sync.Mutex + fds map[int]*EpollEvent +} + +// epoll impl for this process. +var impl epollImpl = epollImpl{ + epfd2ep: make(map[int]*eventPoll), + nextEpfd: 0, +} + +func (e *epollImpl) epollcreate(size int) (epfd int, err error) { + e.mu.Lock() + defer e.mu.Unlock() + epfd = e.nextEpfd + e.nextEpfd++ + + e.epfd2ep[epfd] = &eventPoll{ + fds: make(map[int]*EpollEvent), + } + return epfd, nil +} + +func (e *epollImpl) epollcreate1(flag int) (fd int, err error) { + return e.epollcreate(4) +} + +func (e *epollImpl) epollctl(epfd int, op int, fd int, event *EpollEvent) (err error) { + e.mu.Lock() + defer e.mu.Unlock() + + ep, ok := e.epfd2ep[epfd] + if !ok { + + return EBADF + } + + switch op { + case EPOLL_CTL_ADD: + // TODO(neeilan): When we make epfds and fds disjoint, detect epoll + // loops here (instances watching each other) and return ELOOP. + if _, ok := ep.fds[fd]; ok { + return EEXIST + } + ep.fds[fd] = event + case EPOLL_CTL_MOD: + if _, ok := ep.fds[fd]; !ok { + return ENOENT + } + ep.fds[fd] = event + case EPOLL_CTL_DEL: + if _, ok := ep.fds[fd]; !ok { + return ENOENT + } + delete(ep.fds, fd) + + } + return nil +} + +// Must be called while holding ep.mu +func (ep *eventPoll) getFds() []int { + fds := make([]int, len(ep.fds)) + for fd := range ep.fds { + fds = append(fds, fd) + } + return fds +} + +func (e *epollImpl) epollwait(epfd int, events []EpollEvent, msec int) (n int, err error) { + e.mu.Lock() // in [rare] case of concurrent epollcreate + epollwait + ep, ok := e.epfd2ep[epfd] + + if !ok { + e.mu.Unlock() + return 0, EBADF + } + + pollfds := make([]PollFd, 4) + for fd, epollevt := range ep.fds { + pollfds = append(pollfds, PollFd{Fd: int32(fd), Events: epToPollEvt(epollevt.Events)}) + } + e.mu.Unlock() + + n, err = Poll(pollfds, msec) + if err != nil { + return n, err + } + + i := 0 + for _, pFd := range pollfds { + if pFd.Revents != 0 { + events[i] = EpollEvent{Fd: pFd.Fd, Events: pToEpollEvt(pFd.Revents)} + i++ + } + + if i == n { + break + } + } + + return n, nil +} + +func EpollCreate(size int) (fd int, err error) { + return impl.epollcreate(size) +} + +func EpollCreate1(flag int) (fd int, err error) { + return impl.epollcreate1(flag) +} + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + return impl.epollctl(epfd, op, fd, event) +} + +// Because EpollWait mutates events, the caller is expected to coordinate +// concurrent access if calling with the same epfd from multiple goroutines. +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + return impl.epollwait(epfd, events, msec) +} diff --git a/vendor/golang.org/x/sys/unix/errors_freebsd_386.go b/vendor/golang.org/x/sys/unix/errors_freebsd_386.go new file mode 100644 index 0000000..761db66 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/errors_freebsd_386.go @@ -0,0 +1,233 @@ +// 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. + +// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep +// them here for backwards compatibility. + +package unix + +const ( + DLT_HHDLC = 0x79 + IFF_SMART = 0x20 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BSC = 0x53 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_IPXIP = 0xf9 + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf6 + IFT_PFSYNC = 0xf7 + IFT_PLC = 0xae + IFT_POS = 0xab + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VOICEEM = 0x64 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IPPROTO_MAXID = 0x34 + IPV6_FAITH = 0x1d + IPV6_MIN_MEMBERSHIPS = 0x1f + IP_FAITH = 0x16 + IP_MAX_SOURCE_FILTER = 0x400 + IP_MIN_MEMBERSHIPS = 0x1f + MAP_NORESERVE = 0x40 + MAP_RENAME = 0x20 + NET_RT_MAXID = 0x6 + RTF_PRCLONING = 0x10000 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RT_CACHING_CONTEXT = 0x1 + RT_NORTREF = 0x2 + SIOCADDRT = 0x8030720a + SIOCALIFADDR = 0x8118691b + SIOCDELRT = 0x8030720b + SIOCDLIFADDR = 0x8118691d + SIOCGLIFADDR = 0xc118691c + SIOCGLIFPHYADDR = 0xc118694b + SIOCSLIFPHYADDR = 0x8118694a +) diff --git a/vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go new file mode 100644 index 0000000..070f44b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go @@ -0,0 +1,233 @@ +// 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. + +// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep +// them here for backwards compatibility. + +package unix + +const ( + DLT_HHDLC = 0x79 + IFF_SMART = 0x20 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BSC = 0x53 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_IPXIP = 0xf9 + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf6 + IFT_PFSYNC = 0xf7 + IFT_PLC = 0xae + IFT_POS = 0xab + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VOICEEM = 0x64 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IPPROTO_MAXID = 0x34 + IPV6_FAITH = 0x1d + IPV6_MIN_MEMBERSHIPS = 0x1f + IP_FAITH = 0x16 + IP_MAX_SOURCE_FILTER = 0x400 + IP_MIN_MEMBERSHIPS = 0x1f + MAP_NORESERVE = 0x40 + MAP_RENAME = 0x20 + NET_RT_MAXID = 0x6 + RTF_PRCLONING = 0x10000 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RT_CACHING_CONTEXT = 0x1 + RT_NORTREF = 0x2 + SIOCADDRT = 0x8040720a + SIOCALIFADDR = 0x8118691b + SIOCDELRT = 0x8040720b + SIOCDLIFADDR = 0x8118691d + SIOCGLIFADDR = 0xc118691c + SIOCGLIFPHYADDR = 0xc118694b + SIOCSLIFPHYADDR = 0x8118694a +) diff --git a/vendor/golang.org/x/sys/unix/errors_freebsd_arm.go b/vendor/golang.org/x/sys/unix/errors_freebsd_arm.go new file mode 100644 index 0000000..856dca3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/errors_freebsd_arm.go @@ -0,0 +1,226 @@ +// 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 unix + +const ( + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BSC = 0x53 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf6 + IFT_PFSYNC = 0xf7 + IFT_PLC = 0xae + IFT_POS = 0xab + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VOICEEM = 0x64 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + + // missing constants on FreeBSD-11.1-RELEASE, copied from old values in ztypes_freebsd_arm.go + IFF_SMART = 0x20 + IFT_FAITH = 0xf2 + IFT_IPXIP = 0xf9 + IPPROTO_MAXID = 0x34 + IPV6_FAITH = 0x1d + IP_FAITH = 0x16 + MAP_NORESERVE = 0x40 + MAP_RENAME = 0x20 + NET_RT_MAXID = 0x6 + RTF_PRCLONING = 0x10000 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + SIOCADDRT = 0x8030720a + SIOCALIFADDR = 0x8118691b + SIOCDELRT = 0x8030720b + SIOCDLIFADDR = 0x8118691d + SIOCGLIFADDR = 0xc118691c + SIOCGLIFPHYADDR = 0xc118694b + SIOCSLIFPHYADDR = 0x8118694a +) diff --git a/vendor/golang.org/x/sys/unix/errors_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/errors_freebsd_arm64.go new file mode 100644 index 0000000..946dcf3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/errors_freebsd_arm64.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. + +// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep +// them here for backwards compatibility. + +package unix + +const ( + DLT_HHDLC = 0x79 + IPV6_MIN_MEMBERSHIPS = 0x1f + IP_MAX_SOURCE_FILTER = 0x400 + IP_MIN_MEMBERSHIPS = 0x1f + RT_CACHING_CONTEXT = 0x1 + RT_NORTREF = 0x2 +) diff --git a/vendor/golang.org/x/sys/unix/fcntl.go b/vendor/golang.org/x/sys/unix/fcntl.go new file mode 100644 index 0000000..e9b9912 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/fcntl.go @@ -0,0 +1,37 @@ +// 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 dragonfly || freebsd || linux || netbsd || openbsd +// +build dragonfly freebsd linux netbsd openbsd + +package unix + +import "unsafe" + +// fcntl64Syscall is usually SYS_FCNTL, but is overridden on 32-bit Linux +// systems by fcntl_linux_32bit.go to be SYS_FCNTL64. +var fcntl64Syscall uintptr = SYS_FCNTL + +func fcntl(fd int, cmd, arg int) (int, error) { + valptr, _, errno := Syscall(fcntl64Syscall, uintptr(fd), uintptr(cmd), uintptr(arg)) + var err error + if errno != 0 { + err = errno + } + return int(valptr), err +} + +// FcntlInt performs a fcntl syscall on fd with the provided command and argument. +func FcntlInt(fd uintptr, cmd, arg int) (int, error) { + return fcntl(int(fd), cmd, arg) +} + +// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command. +func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error { + _, _, errno := Syscall(fcntl64Syscall, fd, uintptr(cmd), uintptr(unsafe.Pointer(lk))) + if errno == 0 { + return nil + } + return errno +} diff --git a/vendor/golang.org/x/sys/unix/fcntl_darwin.go b/vendor/golang.org/x/sys/unix/fcntl_darwin.go new file mode 100644 index 0000000..a9911c7 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/fcntl_darwin.go @@ -0,0 +1,24 @@ +// 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 unix + +import "unsafe" + +// FcntlInt performs a fcntl syscall on fd with the provided command and argument. +func FcntlInt(fd uintptr, cmd, arg int) (int, error) { + return fcntl(int(fd), cmd, arg) +} + +// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command. +func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error { + _, err := fcntl(int(fd), cmd, int(uintptr(unsafe.Pointer(lk)))) + return err +} + +// FcntlFstore performs a fcntl syscall for the F_PREALLOCATE command. +func FcntlFstore(fd uintptr, cmd int, fstore *Fstore_t) error { + _, err := fcntl(int(fd), cmd, int(uintptr(unsafe.Pointer(fstore)))) + return err +} diff --git a/vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go b/vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go new file mode 100644 index 0000000..29d4480 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go @@ -0,0 +1,14 @@ +// 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 && 386) || (linux && arm) || (linux && mips) || (linux && mipsle) || (linux && ppc) +// +build linux,386 linux,arm linux,mips linux,mipsle linux,ppc + +package unix + +func init() { + // On 32-bit Linux systems, the fcntl syscall that matches Go's + // Flock_t type is SYS_FCNTL64, not SYS_FCNTL. + fcntl64Syscall = SYS_FCNTL64 +} diff --git a/vendor/golang.org/x/sys/unix/fdset.go b/vendor/golang.org/x/sys/unix/fdset.go new file mode 100644 index 0000000..a8068f9 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/fdset.go @@ -0,0 +1,30 @@ +// 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 +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos + +package unix + +// Set adds fd to the set fds. +func (fds *FdSet) Set(fd int) { + fds.Bits[fd/NFDBITS] |= (1 << (uintptr(fd) % NFDBITS)) +} + +// Clear removes fd from the set fds. +func (fds *FdSet) Clear(fd int) { + fds.Bits[fd/NFDBITS] &^= (1 << (uintptr(fd) % NFDBITS)) +} + +// IsSet returns whether fd is in the set fds. +func (fds *FdSet) IsSet(fd int) bool { + return fds.Bits[fd/NFDBITS]&(1<<(uintptr(fd)%NFDBITS)) != 0 +} + +// Zero clears the set fds. +func (fds *FdSet) Zero() { + for i := range fds.Bits { + fds.Bits[i] = 0 + } +} diff --git a/vendor/golang.org/x/sys/unix/fstatfs_zos.go b/vendor/golang.org/x/sys/unix/fstatfs_zos.go new file mode 100644 index 0000000..e377cc9 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/fstatfs_zos.go @@ -0,0 +1,164 @@ +// 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 zos && s390x +// +build zos,s390x + +package unix + +import ( + "unsafe" +) + +// This file simulates fstatfs on z/OS using fstatvfs and w_getmntent. + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + var stat_v Statvfs_t + err = Fstatvfs(fd, &stat_v) + if err == nil { + // populate stat + stat.Type = 0 + stat.Bsize = stat_v.Bsize + stat.Blocks = stat_v.Blocks + stat.Bfree = stat_v.Bfree + stat.Bavail = stat_v.Bavail + stat.Files = stat_v.Files + stat.Ffree = stat_v.Ffree + stat.Fsid = stat_v.Fsid + stat.Namelen = stat_v.Namemax + stat.Frsize = stat_v.Frsize + stat.Flags = stat_v.Flag + for passn := 0; passn < 5; passn++ { + switch passn { + case 0: + err = tryGetmntent64(stat) + break + case 1: + err = tryGetmntent128(stat) + break + case 2: + err = tryGetmntent256(stat) + break + case 3: + err = tryGetmntent512(stat) + break + case 4: + err = tryGetmntent1024(stat) + break + default: + break + } + //proceed to return if: err is nil (found), err is nonnil but not ERANGE (another error occurred) + if err == nil || err != nil && err != ERANGE { + break + } + } + } + return err +} + +func tryGetmntent64(stat *Statfs_t) (err error) { + var mnt_ent_buffer struct { + header W_Mnth + filesys_info [64]W_Mntent + } + var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer)) + fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size) + if err != nil { + return err + } + err = ERANGE //return ERANGE if no match is found in this batch + for i := 0; i < fs_count; i++ { + if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) { + stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0]) + err = nil + break + } + } + return err +} + +func tryGetmntent128(stat *Statfs_t) (err error) { + var mnt_ent_buffer struct { + header W_Mnth + filesys_info [128]W_Mntent + } + var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer)) + fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size) + if err != nil { + return err + } + err = ERANGE //return ERANGE if no match is found in this batch + for i := 0; i < fs_count; i++ { + if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) { + stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0]) + err = nil + break + } + } + return err +} + +func tryGetmntent256(stat *Statfs_t) (err error) { + var mnt_ent_buffer struct { + header W_Mnth + filesys_info [256]W_Mntent + } + var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer)) + fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size) + if err != nil { + return err + } + err = ERANGE //return ERANGE if no match is found in this batch + for i := 0; i < fs_count; i++ { + if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) { + stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0]) + err = nil + break + } + } + return err +} + +func tryGetmntent512(stat *Statfs_t) (err error) { + var mnt_ent_buffer struct { + header W_Mnth + filesys_info [512]W_Mntent + } + var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer)) + fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size) + if err != nil { + return err + } + err = ERANGE //return ERANGE if no match is found in this batch + for i := 0; i < fs_count; i++ { + if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) { + stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0]) + err = nil + break + } + } + return err +} + +func tryGetmntent1024(stat *Statfs_t) (err error) { + var mnt_ent_buffer struct { + header W_Mnth + filesys_info [1024]W_Mntent + } + var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer)) + fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size) + if err != nil { + return err + } + err = ERANGE //return ERANGE if no match is found in this batch + for i := 0; i < fs_count; i++ { + if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) { + stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0]) + err = nil + break + } + } + return err +} diff --git a/vendor/golang.org/x/sys/unix/gccgo.go b/vendor/golang.org/x/sys/unix/gccgo.go new file mode 100644 index 0000000..0dee232 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/gccgo.go @@ -0,0 +1,60 @@ +// 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. + +//go:build gccgo && !aix +// +build gccgo,!aix + +package unix + +import "syscall" + +// We can't use the gc-syntax .s files for gccgo. On the plus side +// much of the functionality can be written directly in Go. + +func realSyscallNoError(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r uintptr) + +func realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r, errno uintptr) + +func SyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) { + syscall.Entersyscall() + r := realSyscallNoError(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0) + syscall.Exitsyscall() + return r, 0 +} + +func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { + syscall.Entersyscall() + r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0) + syscall.Exitsyscall() + return r, 0, syscall.Errno(errno) +} + +func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) { + syscall.Entersyscall() + r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0) + syscall.Exitsyscall() + return r, 0, syscall.Errno(errno) +} + +func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) { + syscall.Entersyscall() + r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9) + syscall.Exitsyscall() + return r, 0, syscall.Errno(errno) +} + +func RawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) { + r := realSyscallNoError(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0) + return r, 0 +} + +func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { + r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0) + return r, 0, syscall.Errno(errno) +} + +func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) { + r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0) + return r, 0, syscall.Errno(errno) +} diff --git a/vendor/golang.org/x/sys/unix/gccgo_c.c b/vendor/golang.org/x/sys/unix/gccgo_c.c new file mode 100644 index 0000000..2cb1fef --- /dev/null +++ b/vendor/golang.org/x/sys/unix/gccgo_c.c @@ -0,0 +1,45 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build gccgo +// +build !aix + +#include +#include +#include + +#define _STRINGIFY2_(x) #x +#define _STRINGIFY_(x) _STRINGIFY2_(x) +#define GOSYM_PREFIX _STRINGIFY_(__USER_LABEL_PREFIX__) + +// Call syscall from C code because the gccgo support for calling from +// Go to C does not support varargs functions. + +struct ret { + uintptr_t r; + uintptr_t err; +}; + +struct ret gccgoRealSyscall(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9) + __asm__(GOSYM_PREFIX GOPKGPATH ".realSyscall"); + +struct ret +gccgoRealSyscall(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9) +{ + struct ret r; + + errno = 0; + r.r = syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9); + r.err = errno; + return r; +} + +uintptr_t gccgoRealSyscallNoError(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9) + __asm__(GOSYM_PREFIX GOPKGPATH ".realSyscallNoError"); + +uintptr_t +gccgoRealSyscallNoError(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9) +{ + return syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9); +} diff --git a/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go b/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go new file mode 100644 index 0000000..e60e49a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go @@ -0,0 +1,21 @@ +// 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. + +//go:build gccgo && linux && amd64 +// +build gccgo,linux,amd64 + +package unix + +import "syscall" + +//extern gettimeofday +func realGettimeofday(*Timeval, *byte) int32 + +func gettimeofday(tv *Timeval) (err syscall.Errno) { + r := realGettimeofday(tv, nil) + if r < 0 { + return syscall.GetErrno() + } + return 0 +} diff --git a/vendor/golang.org/x/sys/unix/ifreq_linux.go b/vendor/golang.org/x/sys/unix/ifreq_linux.go new file mode 100644 index 0000000..934af31 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ifreq_linux.go @@ -0,0 +1,149 @@ +// 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 linux +// +build linux + +package unix + +import ( + "bytes" + "unsafe" +) + +// Helpers for dealing with ifreq since it contains a union and thus requires a +// lot of unsafe.Pointer casts to use properly. + +// An Ifreq is a type-safe wrapper around the raw ifreq struct. An Ifreq +// contains an interface name and a union of arbitrary data which can be +// accessed using the Ifreq's methods. To create an Ifreq, use the NewIfreq +// function. +// +// Use the Name method to access the stored interface name. The union data +// fields can be get and set using the following methods: +// - Uint16/SetUint16: flags +// - Uint32/SetUint32: ifindex, metric, mtu +type Ifreq struct{ raw ifreq } + +// NewIfreq creates an Ifreq with the input network interface name after +// validating the name does not exceed IFNAMSIZ-1 (trailing NULL required) +// bytes. +func NewIfreq(name string) (*Ifreq, error) { + // Leave room for terminating NULL byte. + if len(name) >= IFNAMSIZ { + return nil, EINVAL + } + + var ifr ifreq + copy(ifr.Ifrn[:], name) + + return &Ifreq{raw: ifr}, nil +} + +// TODO(mdlayher): get/set methods for hardware address sockaddr, char array, etc. + +// Name returns the interface name associated with the Ifreq. +func (ifr *Ifreq) Name() string { + // BytePtrToString requires a NULL terminator or the program may crash. If + // one is not present, just return the empty string. + if !bytes.Contains(ifr.raw.Ifrn[:], []byte{0x00}) { + return "" + } + + return BytePtrToString(&ifr.raw.Ifrn[0]) +} + +// According to netdevice(7), only AF_INET addresses are returned for numerous +// sockaddr ioctls. For convenience, we expose these as Inet4Addr since the Port +// field and other data is always empty. + +// Inet4Addr returns the Ifreq union data from an embedded sockaddr as a C +// in_addr/Go []byte (4-byte IPv4 address) value. If the sockaddr family is not +// AF_INET, an error is returned. +func (ifr *Ifreq) Inet4Addr() ([]byte, error) { + raw := *(*RawSockaddrInet4)(unsafe.Pointer(&ifr.raw.Ifru[:SizeofSockaddrInet4][0])) + if raw.Family != AF_INET { + // Cannot safely interpret raw.Addr bytes as an IPv4 address. + return nil, EINVAL + } + + return raw.Addr[:], nil +} + +// SetInet4Addr sets a C in_addr/Go []byte (4-byte IPv4 address) value in an +// embedded sockaddr within the Ifreq's union data. v must be 4 bytes in length +// or an error will be returned. +func (ifr *Ifreq) SetInet4Addr(v []byte) error { + if len(v) != 4 { + return EINVAL + } + + var addr [4]byte + copy(addr[:], v) + + ifr.clear() + *(*RawSockaddrInet4)( + unsafe.Pointer(&ifr.raw.Ifru[:SizeofSockaddrInet4][0]), + ) = RawSockaddrInet4{ + // Always set IP family as ioctls would require it anyway. + Family: AF_INET, + Addr: addr, + } + + return nil +} + +// Uint16 returns the Ifreq union data as a C short/Go uint16 value. +func (ifr *Ifreq) Uint16() uint16 { + return *(*uint16)(unsafe.Pointer(&ifr.raw.Ifru[:2][0])) +} + +// SetUint16 sets a C short/Go uint16 value as the Ifreq's union data. +func (ifr *Ifreq) SetUint16(v uint16) { + ifr.clear() + *(*uint16)(unsafe.Pointer(&ifr.raw.Ifru[:2][0])) = v +} + +// Uint32 returns the Ifreq union data as a C int/Go uint32 value. +func (ifr *Ifreq) Uint32() uint32 { + return *(*uint32)(unsafe.Pointer(&ifr.raw.Ifru[:4][0])) +} + +// SetUint32 sets a C int/Go uint32 value as the Ifreq's union data. +func (ifr *Ifreq) SetUint32(v uint32) { + ifr.clear() + *(*uint32)(unsafe.Pointer(&ifr.raw.Ifru[:4][0])) = v +} + +// clear zeroes the ifreq's union field to prevent trailing garbage data from +// being sent to the kernel if an ifreq is reused. +func (ifr *Ifreq) clear() { + for i := range ifr.raw.Ifru { + ifr.raw.Ifru[i] = 0 + } +} + +// TODO(mdlayher): export as IfreqData? For now we can provide helpers such as +// IoctlGetEthtoolDrvinfo which use these APIs under the hood. + +// An ifreqData is an Ifreq which carries pointer data. To produce an ifreqData, +// use the Ifreq.withData method. +type ifreqData struct { + name [IFNAMSIZ]byte + // A type separate from ifreq is required in order to comply with the + // unsafe.Pointer rules since the "pointer-ness" of data would not be + // preserved if it were cast into the byte array of a raw ifreq. + data unsafe.Pointer + // Pad to the same size as ifreq. + _ [len(ifreq{}.Ifru) - SizeofPtr]byte +} + +// withData produces an ifreqData with the pointer p set for ioctls which require +// arbitrary pointer data. +func (ifr Ifreq) withData(p unsafe.Pointer) ifreqData { + return ifreqData{ + name: ifr.raw.Ifrn, + data: p, + } +} diff --git a/vendor/golang.org/x/sys/unix/ioctl.go b/vendor/golang.org/x/sys/unix/ioctl.go new file mode 100644 index 0000000..6c7ad05 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ioctl.go @@ -0,0 +1,75 @@ +// 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 aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix + +import ( + "runtime" + "unsafe" +) + +// ioctl itself should not be exposed directly, but additional get/set +// functions for specific types are permissible. + +// IoctlSetInt performs an ioctl operation which sets an integer value +// on fd, using the specified request number. +func IoctlSetInt(fd int, req uint, value int) error { + return ioctl(fd, req, uintptr(value)) +} + +// IoctlSetPointerInt performs an ioctl operation which sets an +// integer value on fd, using the specified request number. The ioctl +// argument is called with a pointer to the integer value, rather than +// passing the integer value directly. +func IoctlSetPointerInt(fd int, req uint, value int) error { + v := int32(value) + return ioctl(fd, req, uintptr(unsafe.Pointer(&v))) +} + +// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument. +// +// To change fd's window size, the req argument should be TIOCSWINSZ. +func IoctlSetWinsize(fd int, req uint, value *Winsize) error { + // TODO: if we get the chance, remove the req parameter and + // hardcode TIOCSWINSZ. + err := ioctl(fd, req, uintptr(unsafe.Pointer(value))) + runtime.KeepAlive(value) + return err +} + +// IoctlSetTermios performs an ioctl on fd with a *Termios. +// +// The req value will usually be TCSETA or TIOCSETA. +func IoctlSetTermios(fd int, req uint, value *Termios) error { + // TODO: if we get the chance, remove the req parameter. + err := ioctl(fd, req, uintptr(unsafe.Pointer(value))) + runtime.KeepAlive(value) + return err +} + +// IoctlGetInt performs an ioctl operation which gets an integer value +// from fd, using the specified request number. +// +// A few ioctl requests use the return value as an output parameter; +// for those, IoctlRetInt should be used instead of this function. +func IoctlGetInt(fd int, req uint) (int, error) { + var value int + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return value, err +} + +func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { + var value Winsize + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermios(fd int, req uint) (*Termios, error) { + var value Termios + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} diff --git a/vendor/golang.org/x/sys/unix/ioctl_linux.go b/vendor/golang.org/x/sys/unix/ioctl_linux.go new file mode 100644 index 0000000..884430b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ioctl_linux.go @@ -0,0 +1,219 @@ +// 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 unix + +import ( + "unsafe" +) + +// IoctlRetInt performs an ioctl operation specified by req on a device +// associated with opened file descriptor fd, and returns a non-negative +// integer that is returned by the ioctl syscall. +func IoctlRetInt(fd int, req uint) (int, error) { + ret, _, err := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), 0) + if err != 0 { + return 0, err + } + return int(ret), nil +} + +func IoctlGetUint32(fd int, req uint) (uint32, error) { + var value uint32 + err := ioctlPtr(fd, req, unsafe.Pointer(&value)) + return value, err +} + +func IoctlGetRTCTime(fd int) (*RTCTime, error) { + var value RTCTime + err := ioctlPtr(fd, RTC_RD_TIME, unsafe.Pointer(&value)) + return &value, err +} + +func IoctlSetRTCTime(fd int, value *RTCTime) error { + return ioctlPtr(fd, RTC_SET_TIME, unsafe.Pointer(value)) +} + +func IoctlGetRTCWkAlrm(fd int) (*RTCWkAlrm, error) { + var value RTCWkAlrm + err := ioctlPtr(fd, RTC_WKALM_RD, unsafe.Pointer(&value)) + return &value, err +} + +func IoctlSetRTCWkAlrm(fd int, value *RTCWkAlrm) error { + return ioctlPtr(fd, RTC_WKALM_SET, unsafe.Pointer(value)) +} + +// IoctlGetEthtoolDrvinfo fetches ethtool driver information for the network +// device specified by ifname. +func IoctlGetEthtoolDrvinfo(fd int, ifname string) (*EthtoolDrvinfo, error) { + ifr, err := NewIfreq(ifname) + if err != nil { + return nil, err + } + + value := EthtoolDrvinfo{Cmd: ETHTOOL_GDRVINFO} + ifrd := ifr.withData(unsafe.Pointer(&value)) + + err = ioctlIfreqData(fd, SIOCETHTOOL, &ifrd) + return &value, err +} + +// IoctlGetWatchdogInfo fetches information about a watchdog device from the +// Linux watchdog API. For more information, see: +// https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html. +func IoctlGetWatchdogInfo(fd int) (*WatchdogInfo, error) { + var value WatchdogInfo + err := ioctlPtr(fd, WDIOC_GETSUPPORT, unsafe.Pointer(&value)) + return &value, err +} + +// IoctlWatchdogKeepalive issues a keepalive ioctl to a watchdog device. For +// more information, see: +// https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html. +func IoctlWatchdogKeepalive(fd int) error { + // arg is ignored and not a pointer, so ioctl is fine instead of ioctlPtr. + return ioctl(fd, WDIOC_KEEPALIVE, 0) +} + +// IoctlFileCloneRange performs an FICLONERANGE ioctl operation to clone the +// range of data conveyed in value to the file associated with the file +// descriptor destFd. See the ioctl_ficlonerange(2) man page for details. +func IoctlFileCloneRange(destFd int, value *FileCloneRange) error { + return ioctlPtr(destFd, FICLONERANGE, unsafe.Pointer(value)) +} + +// IoctlFileClone performs an FICLONE ioctl operation to clone the entire file +// associated with the file description srcFd to the file associated with the +// file descriptor destFd. See the ioctl_ficlone(2) man page for details. +func IoctlFileClone(destFd, srcFd int) error { + return ioctl(destFd, FICLONE, uintptr(srcFd)) +} + +type FileDedupeRange struct { + Src_offset uint64 + Src_length uint64 + Reserved1 uint16 + Reserved2 uint32 + Info []FileDedupeRangeInfo +} + +type FileDedupeRangeInfo struct { + Dest_fd int64 + Dest_offset uint64 + Bytes_deduped uint64 + Status int32 + Reserved uint32 +} + +// IoctlFileDedupeRange performs an FIDEDUPERANGE ioctl operation to share the +// range of data conveyed in value from the file associated with the file +// descriptor srcFd to the value.Info destinations. See the +// ioctl_fideduperange(2) man page for details. +func IoctlFileDedupeRange(srcFd int, value *FileDedupeRange) error { + buf := make([]byte, SizeofRawFileDedupeRange+ + len(value.Info)*SizeofRawFileDedupeRangeInfo) + rawrange := (*RawFileDedupeRange)(unsafe.Pointer(&buf[0])) + rawrange.Src_offset = value.Src_offset + rawrange.Src_length = value.Src_length + rawrange.Dest_count = uint16(len(value.Info)) + rawrange.Reserved1 = value.Reserved1 + rawrange.Reserved2 = value.Reserved2 + + for i := range value.Info { + rawinfo := (*RawFileDedupeRangeInfo)(unsafe.Pointer( + uintptr(unsafe.Pointer(&buf[0])) + uintptr(SizeofRawFileDedupeRange) + + uintptr(i*SizeofRawFileDedupeRangeInfo))) + rawinfo.Dest_fd = value.Info[i].Dest_fd + rawinfo.Dest_offset = value.Info[i].Dest_offset + rawinfo.Bytes_deduped = value.Info[i].Bytes_deduped + rawinfo.Status = value.Info[i].Status + rawinfo.Reserved = value.Info[i].Reserved + } + + err := ioctlPtr(srcFd, FIDEDUPERANGE, unsafe.Pointer(&buf[0])) + + // Output + for i := range value.Info { + rawinfo := (*RawFileDedupeRangeInfo)(unsafe.Pointer( + uintptr(unsafe.Pointer(&buf[0])) + uintptr(SizeofRawFileDedupeRange) + + uintptr(i*SizeofRawFileDedupeRangeInfo))) + value.Info[i].Dest_fd = rawinfo.Dest_fd + value.Info[i].Dest_offset = rawinfo.Dest_offset + value.Info[i].Bytes_deduped = rawinfo.Bytes_deduped + value.Info[i].Status = rawinfo.Status + value.Info[i].Reserved = rawinfo.Reserved + } + + return err +} + +func IoctlHIDGetDesc(fd int, value *HIDRawReportDescriptor) error { + return ioctlPtr(fd, HIDIOCGRDESC, unsafe.Pointer(value)) +} + +func IoctlHIDGetRawInfo(fd int) (*HIDRawDevInfo, error) { + var value HIDRawDevInfo + err := ioctlPtr(fd, HIDIOCGRAWINFO, unsafe.Pointer(&value)) + return &value, err +} + +func IoctlHIDGetRawName(fd int) (string, error) { + var value [_HIDIOCGRAWNAME_LEN]byte + err := ioctlPtr(fd, _HIDIOCGRAWNAME, unsafe.Pointer(&value[0])) + return ByteSliceToString(value[:]), err +} + +func IoctlHIDGetRawPhys(fd int) (string, error) { + var value [_HIDIOCGRAWPHYS_LEN]byte + err := ioctlPtr(fd, _HIDIOCGRAWPHYS, unsafe.Pointer(&value[0])) + return ByteSliceToString(value[:]), err +} + +func IoctlHIDGetRawUniq(fd int) (string, error) { + var value [_HIDIOCGRAWUNIQ_LEN]byte + err := ioctlPtr(fd, _HIDIOCGRAWUNIQ, unsafe.Pointer(&value[0])) + return ByteSliceToString(value[:]), err +} + +// IoctlIfreq performs an ioctl using an Ifreq structure for input and/or +// output. See the netdevice(7) man page for details. +func IoctlIfreq(fd int, req uint, value *Ifreq) error { + // It is possible we will add more fields to *Ifreq itself later to prevent + // misuse, so pass the raw *ifreq directly. + return ioctlPtr(fd, req, unsafe.Pointer(&value.raw)) +} + +// TODO(mdlayher): export if and when IfreqData is exported. + +// ioctlIfreqData performs an ioctl using an ifreqData structure for input +// and/or output. See the netdevice(7) man page for details. +func ioctlIfreqData(fd int, req uint, value *ifreqData) error { + // The memory layout of IfreqData (type-safe) and ifreq (not type-safe) are + // identical so pass *IfreqData directly. + return ioctlPtr(fd, req, unsafe.Pointer(value)) +} + +// IoctlKCMClone attaches a new file descriptor to a multiplexor by cloning an +// existing KCM socket, returning a structure containing the file descriptor of +// the new socket. +func IoctlKCMClone(fd int) (*KCMClone, error) { + var info KCMClone + if err := ioctlPtr(fd, SIOCKCMCLONE, unsafe.Pointer(&info)); err != nil { + return nil, err + } + + return &info, nil +} + +// IoctlKCMAttach attaches a TCP socket and associated BPF program file +// descriptor to a multiplexor. +func IoctlKCMAttach(fd int, info KCMAttach) error { + return ioctlPtr(fd, SIOCKCMATTACH, unsafe.Pointer(&info)) +} + +// IoctlKCMUnattach unattaches a TCP socket file descriptor from a multiplexor. +func IoctlKCMUnattach(fd int, info KCMUnattach) error { + return ioctlPtr(fd, SIOCKCMUNATTACH, unsafe.Pointer(&info)) +} diff --git a/vendor/golang.org/x/sys/unix/ioctl_zos.go b/vendor/golang.org/x/sys/unix/ioctl_zos.go new file mode 100644 index 0000000..5384e7d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ioctl_zos.go @@ -0,0 +1,74 @@ +// 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 zos && s390x +// +build zos,s390x + +package unix + +import ( + "runtime" + "unsafe" +) + +// ioctl itself should not be exposed directly, but additional get/set +// functions for specific types are permissible. + +// IoctlSetInt performs an ioctl operation which sets an integer value +// on fd, using the specified request number. +func IoctlSetInt(fd int, req uint, value int) error { + return ioctl(fd, req, uintptr(value)) +} + +// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument. +// +// To change fd's window size, the req argument should be TIOCSWINSZ. +func IoctlSetWinsize(fd int, req uint, value *Winsize) error { + // TODO: if we get the chance, remove the req parameter and + // hardcode TIOCSWINSZ. + err := ioctl(fd, req, uintptr(unsafe.Pointer(value))) + runtime.KeepAlive(value) + return err +} + +// IoctlSetTermios performs an ioctl on fd with a *Termios. +// +// The req value is expected to be TCSETS, TCSETSW, or TCSETSF +func IoctlSetTermios(fd int, req uint, value *Termios) error { + if (req != TCSETS) && (req != TCSETSW) && (req != TCSETSF) { + return ENOSYS + } + err := Tcsetattr(fd, int(req), value) + runtime.KeepAlive(value) + return err +} + +// IoctlGetInt performs an ioctl operation which gets an integer value +// from fd, using the specified request number. +// +// A few ioctl requests use the return value as an output parameter; +// for those, IoctlRetInt should be used instead of this function. +func IoctlGetInt(fd int, req uint) (int, error) { + var value int + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return value, err +} + +func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { + var value Winsize + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +// IoctlGetTermios performs an ioctl on fd with a *Termios. +// +// The req value is expected to be TCGETS +func IoctlGetTermios(fd int, req uint) (*Termios, error) { + var value Termios + if req != TCGETS { + return &value, ENOSYS + } + err := Tcgetattr(fd, &value) + return &value, err +} diff --git a/vendor/golang.org/x/sys/unix/mkall.sh b/vendor/golang.org/x/sys/unix/mkall.sh new file mode 100644 index 0000000..ee73623 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/mkall.sh @@ -0,0 +1,231 @@ +#!/usr/bin/env bash +# 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. + +# This script runs or (given -n) prints suggested commands to generate files for +# the Architecture/OS specified by the GOARCH and GOOS environment variables. +# See README.md for more information about how the build system works. + +GOOSARCH="${GOOS}_${GOARCH}" + +# defaults +mksyscall="go run mksyscall.go" +mkerrors="./mkerrors.sh" +zerrors="zerrors_$GOOSARCH.go" +mksysctl="" +zsysctl="zsysctl_$GOOSARCH.go" +mksysnum= +mktypes= +mkasm= +run="sh" +cmd="" + +case "$1" in +-syscalls) + for i in zsyscall*go + do + # Run the command line that appears in the first line + # of the generated file to regenerate it. + sed 1q $i | sed 's;^// ;;' | sh > _$i && gofmt < _$i > $i + rm _$i + done + exit 0 + ;; +-n) + run="cat" + cmd="echo" + shift +esac + +case "$#" in +0) + ;; +*) + echo 'usage: mkall.sh [-n]' 1>&2 + exit 2 +esac + +if [[ "$GOOS" = "linux" ]]; then + # Use the Docker-based build system + # Files generated through docker (use $cmd so you can Ctl-C the build or run) + $cmd docker build --tag generate:$GOOS $GOOS + $cmd docker run --interactive --tty --volume $(cd -- "$(dirname -- "$0")/.." && /bin/pwd):/build generate:$GOOS + exit +fi + +GOOSARCH_in=syscall_$GOOSARCH.go +case "$GOOSARCH" in +_* | *_ | _) + echo 'undefined $GOOS_$GOARCH:' "$GOOSARCH" 1>&2 + exit 1 + ;; +aix_ppc) + mkerrors="$mkerrors -maix32" + mksyscall="go run mksyscall_aix_ppc.go -aix" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +aix_ppc64) + mkerrors="$mkerrors -maix64" + mksyscall="go run mksyscall_aix_ppc64.go -aix" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +darwin_amd64) + mkerrors="$mkerrors -m64" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + mkasm="go run mkasm_darwin.go" + ;; +darwin_arm64) + mkerrors="$mkerrors -m64" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + mkasm="go run mkasm_darwin.go" + ;; +dragonfly_amd64) + mkerrors="$mkerrors -m64" + mksyscall="go run mksyscall.go -dragonfly" + mksysnum="go run mksysnum.go 'https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master'" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +freebsd_386) + mkerrors="$mkerrors -m32" + mksyscall="go run mksyscall.go -l32" + mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +freebsd_amd64) + mkerrors="$mkerrors -m64" + mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +freebsd_arm) + mkerrors="$mkerrors" + mksyscall="go run mksyscall.go -l32 -arm" + mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'" + # Let the type of C char be signed for making the bare syscall + # API consistent across platforms. + mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" + ;; +freebsd_arm64) + mkerrors="$mkerrors -m64" + mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'" + mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" + ;; +netbsd_386) + mkerrors="$mkerrors -m32" + mksyscall="go run mksyscall.go -l32 -netbsd" + mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +netbsd_amd64) + mkerrors="$mkerrors -m64" + mksyscall="go run mksyscall.go -netbsd" + mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +netbsd_arm) + mkerrors="$mkerrors" + mksyscall="go run mksyscall.go -l32 -netbsd -arm" + mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'" + # Let the type of C char be signed for making the bare syscall + # API consistent across platforms. + mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" + ;; +netbsd_arm64) + mkerrors="$mkerrors -m64" + mksyscall="go run mksyscall.go -netbsd" + mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +openbsd_386) + mkerrors="$mkerrors -m32" + mksyscall="go run mksyscall.go -l32 -openbsd" + mksysctl="go run mksysctl_openbsd.go" + mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +openbsd_amd64) + mkerrors="$mkerrors -m64" + mksyscall="go run mksyscall.go -openbsd" + mksysctl="go run mksysctl_openbsd.go" + mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +openbsd_arm) + mkerrors="$mkerrors" + mksyscall="go run mksyscall.go -l32 -openbsd -arm" + mksysctl="go run mksysctl_openbsd.go" + mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'" + # Let the type of C char be signed for making the bare syscall + # API consistent across platforms. + mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" + ;; +openbsd_arm64) + mkerrors="$mkerrors -m64" + mksyscall="go run mksyscall.go -openbsd" + mksysctl="go run mksysctl_openbsd.go" + mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'" + # Let the type of C char be signed for making the bare syscall + # API consistent across platforms. + mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" + ;; +openbsd_mips64) + mkerrors="$mkerrors -m64" + mksyscall="go run mksyscall.go -openbsd" + mksysctl="go run mksysctl_openbsd.go" + mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'" + # Let the type of C char be signed for making the bare syscall + # API consistent across platforms. + mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" + ;; +solaris_amd64) + mksyscall="go run mksyscall_solaris.go" + mkerrors="$mkerrors -m64" + mksysnum= + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +illumos_amd64) + mksyscall="go run mksyscall_solaris.go" + mkerrors= + mksysnum= + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +*) + echo 'unrecognized $GOOS_$GOARCH: ' "$GOOSARCH" 1>&2 + exit 1 + ;; +esac + +( + if [ -n "$mkerrors" ]; then echo "$mkerrors |gofmt >$zerrors"; fi + case "$GOOS" in + *) + syscall_goos="syscall_$GOOS.go" + case "$GOOS" in + darwin | dragonfly | freebsd | netbsd | openbsd) + syscall_goos="syscall_bsd.go $syscall_goos" + ;; + esac + if [ -n "$mksyscall" ]; then + if [ "$GOOSARCH" == "aix_ppc64" ]; then + # aix/ppc64 script generates files instead of writing to stdin. + echo "$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in && gofmt -w zsyscall_$GOOSARCH.go && gofmt -w zsyscall_"$GOOSARCH"_gccgo.go && gofmt -w zsyscall_"$GOOSARCH"_gc.go " ; + elif [ "$GOOS" == "darwin" ]; then + # 1.12 and later, syscalls via libSystem + echo "$mksyscall -tags $GOOS,$GOARCH,go1.12 $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go"; + # 1.13 and later, syscalls via libSystem (including syscallPtr) + echo "$mksyscall -tags $GOOS,$GOARCH,go1.13 syscall_darwin.1_13.go |gofmt >zsyscall_$GOOSARCH.1_13.go"; + elif [ "$GOOS" == "illumos" ]; then + # illumos code generation requires a --illumos switch + echo "$mksyscall -illumos -tags illumos,$GOARCH syscall_illumos.go |gofmt > zsyscall_illumos_$GOARCH.go"; + # illumos implies solaris, so solaris code generation is also required + echo "$mksyscall -tags solaris,$GOARCH syscall_solaris.go syscall_solaris_$GOARCH.go |gofmt >zsyscall_solaris_$GOARCH.go"; + else + echo "$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go"; + fi + fi + esac + if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi + if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi + if [ -n "$mktypes" ]; then echo "$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go"; fi + if [ -n "$mkasm" ]; then echo "$mkasm $GOARCH"; fi +) | $run diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh new file mode 100644 index 0000000..d888fb7 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -0,0 +1,772 @@ +#!/usr/bin/env bash +# 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. + +# Generate Go code listing errors and other #defined constant +# values (ENAMETOOLONG etc.), by asking the preprocessor +# about the definitions. + +unset LANG +export LC_ALL=C +export LC_CTYPE=C + +if test -z "$GOARCH" -o -z "$GOOS"; then + echo 1>&2 "GOARCH or GOOS not defined in environment" + exit 1 +fi + +# Check that we are using the new build system if we should +if [[ "$GOOS" = "linux" ]] && [[ "$GOLANG_SYS_BUILD" != "docker" ]]; then + echo 1>&2 "In the Docker based build system, mkerrors should not be called directly." + echo 1>&2 "See README.md" + exit 1 +fi + +if [[ "$GOOS" = "aix" ]]; then + CC=${CC:-gcc} +else + CC=${CC:-cc} +fi + +if [[ "$GOOS" = "solaris" ]]; then + # Assumes GNU versions of utilities in PATH. + export PATH=/usr/gnu/bin:$PATH +fi + +uname=$(uname) + +includes_AIX=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define AF_LOCAL AF_UNIX +' + +includes_Darwin=' +#define _DARWIN_C_SOURCE +#define KERNEL 1 +#define _DARWIN_USE_64_BIT_INODE +#define __APPLE_USE_RFC_3542 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// for backwards compatibility because moved TIOCREMOTE to Kernel.framework after MacOSX12.0.sdk. +#define TIOCREMOTE 0x80047469 +' + +includes_DragonFly=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +' + +includes_FreeBSD=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if __FreeBSD__ >= 10 +#define IFT_CARP 0xf8 // IFT_CARP is deprecated in FreeBSD 10 +#undef SIOCAIFADDR +#define SIOCAIFADDR _IOW(105, 26, struct oifaliasreq) // ifaliasreq contains if_data +#undef SIOCSIFPHYADDR +#define SIOCSIFPHYADDR _IOW(105, 70, struct oifaliasreq) // ifaliasreq contains if_data +#endif +' + +includes_Linux=' +#define _LARGEFILE_SOURCE +#define _LARGEFILE64_SOURCE +#ifndef __LP64__ +#define _FILE_OFFSET_BITS 64 +#endif +#define _GNU_SOURCE + +// is broken on powerpc64, as it fails to include definitions of +// these structures. We just include them copied from . +#if defined(__powerpc__) +struct sgttyb { + char sg_ispeed; + char sg_ospeed; + char sg_erase; + char sg_kill; + short sg_flags; +}; + +struct tchars { + char t_intrc; + char t_quitc; + char t_startc; + char t_stopc; + char t_eofc; + char t_brkc; +}; + +struct ltchars { + char t_suspc; + char t_dsuspc; + char t_rprntc; + char t_flushc; + char t_werasc; + char t_lnextc; +}; +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#if defined(__sparc__) +// On sparc{,64}, the kernel defines struct termios2 itself which clashes with the +// definition in glibc. As only the error constants are needed here, include the +// generic termibits.h (which is included by termbits.h on sparc). +#include +#else +#include +#endif + +#ifndef MSG_FASTOPEN +#define MSG_FASTOPEN 0x20000000 +#endif + +#ifndef PTRACE_GETREGS +#define PTRACE_GETREGS 0xc +#endif + +#ifndef PTRACE_SETREGS +#define PTRACE_SETREGS 0xd +#endif + +#ifndef SOL_NETLINK +#define SOL_NETLINK 270 +#endif + +#ifdef SOL_BLUETOOTH +// SPARC includes this in /usr/include/sparc64-linux-gnu/bits/socket.h +// but it is already in bluetooth_linux.go +#undef SOL_BLUETOOTH +#endif + +// Certain constants are missing from the fs/crypto UAPI +#define FS_KEY_DESC_PREFIX "fscrypt:" +#define FS_KEY_DESC_PREFIX_SIZE 8 +#define FS_MAX_KEY_SIZE 64 + +// The code generator produces -0x1 for (~0), but an unsigned value is necessary +// for the tipc_subscr timeout __u32 field. +#undef TIPC_WAIT_FOREVER +#define TIPC_WAIT_FOREVER 0xffffffff + +// Copied from linux/l2tp.h +// Including linux/l2tp.h here causes conflicts between linux/in.h +// and netinet/in.h included via net/route.h above. +#define IPPROTO_L2TP 115 + +// Copied from linux/hid.h. +// Keep in sync with the size of the referenced fields. +#define _HIDIOCGRAWNAME_LEN 128 // sizeof_field(struct hid_device, name) +#define _HIDIOCGRAWPHYS_LEN 64 // sizeof_field(struct hid_device, phys) +#define _HIDIOCGRAWUNIQ_LEN 64 // sizeof_field(struct hid_device, uniq) + +#define _HIDIOCGRAWNAME HIDIOCGRAWNAME(_HIDIOCGRAWNAME_LEN) +#define _HIDIOCGRAWPHYS HIDIOCGRAWPHYS(_HIDIOCGRAWPHYS_LEN) +#define _HIDIOCGRAWUNIQ HIDIOCGRAWUNIQ(_HIDIOCGRAWUNIQ_LEN) + +' + +includes_NetBSD=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Needed since refers to it... +#define schedppq 1 +' + +includes_OpenBSD=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// We keep some constants not supported in OpenBSD 5.5 and beyond for +// the promise of compatibility. +#define EMUL_ENABLED 0x1 +#define EMUL_NATIVE 0x2 +#define IPV6_FAITH 0x1d +#define IPV6_OPTIONS 0x1 +#define IPV6_RTHDR_STRICT 0x1 +#define IPV6_SOCKOPT_RESERVED1 0x3 +#define SIOCGIFGENERIC 0xc020693a +#define SIOCSIFGENERIC 0x80206939 +#define WALTSIG 0x4 +' + +includes_SunOS=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +' + + +includes=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +' +ccflags="$@" + +# Write go tool cgo -godefs input. +( + echo package unix + echo + echo '/*' + indirect="includes_$(uname)" + echo "${!indirect} $includes" + echo '*/' + echo 'import "C"' + echo 'import "syscall"' + echo + echo 'const (' + + # The gcc command line prints all the #defines + # it encounters while processing the input + echo "${!indirect} $includes" | $CC -x c - -E -dM $ccflags | + awk ' + $1 != "#define" || $2 ~ /\(/ || $3 == "" {next} + + $2 ~ /^E([ABCD]X|[BIS]P|[SD]I|S|FL)$/ {next} # 386 registers + $2 ~ /^(SIGEV_|SIGSTKSZ|SIGRT(MIN|MAX))/ {next} + $2 ~ /^(SCM_SRCRT)$/ {next} + $2 ~ /^(MAP_FAILED)$/ {next} + $2 ~ /^ELF_.*$/ {next}# contains ELF_ARCH, etc. + + $2 ~ /^EXTATTR_NAMESPACE_NAMES/ || + $2 ~ /^EXTATTR_NAMESPACE_[A-Z]+_STRING/ {next} + + $2 !~ /^ECCAPBITS/ && + $2 !~ /^ETH_/ && + $2 !~ /^EPROC_/ && + $2 !~ /^EQUIV_/ && + $2 !~ /^EXPR_/ && + $2 !~ /^EVIOC/ && + $2 ~ /^E[A-Z0-9_]+$/ || + $2 ~ /^B[0-9_]+$/ || + $2 ~ /^(OLD|NEW)DEV$/ || + $2 == "BOTHER" || + $2 ~ /^CI?BAUD(EX)?$/ || + $2 == "IBSHIFT" || + $2 ~ /^V[A-Z0-9]+$/ || + $2 ~ /^CS[A-Z0-9]/ || + $2 ~ /^I(SIG|CANON|CRNL|UCLC|EXTEN|MAXBEL|STRIP|UTF8)$/ || + $2 ~ /^IGN/ || + $2 ~ /^IX(ON|ANY|OFF)$/ || + $2 ~ /^IN(LCR|PCK)$/ || + $2 !~ "X86_CR3_PCID_NOFLUSH" && + $2 ~ /(^FLU?SH)|(FLU?SH$)/ || + $2 ~ /^C(LOCAL|READ|MSPAR|RTSCTS)$/ || + $2 == "BRKINT" || + $2 == "HUPCL" || + $2 == "PENDIN" || + $2 == "TOSTOP" || + $2 == "XCASE" || + $2 == "ALTWERASE" || + $2 == "NOKERNINFO" || + $2 == "NFDBITS" || + $2 ~ /^PAR/ || + $2 ~ /^SIG[^_]/ || + $2 ~ /^O[CNPFPL][A-Z]+[^_][A-Z]+$/ || + $2 ~ /^(NL|CR|TAB|BS|VT|FF)DLY$/ || + $2 ~ /^(NL|CR|TAB|BS|VT|FF)[0-9]$/ || + $2 ~ /^O?XTABS$/ || + $2 ~ /^TC[IO](ON|OFF)$/ || + $2 ~ /^IN_/ || + $2 ~ /^KCM/ || + $2 ~ /^LANDLOCK_/ || + $2 ~ /^LOCK_(SH|EX|NB|UN)$/ || + $2 ~ /^LO_(KEY|NAME)_SIZE$/ || + $2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ || + $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT)_/ || + $2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ || + $2 ~ /^NFC_.*_(MAX)?SIZE$/ || + $2 ~ /^RAW_PAYLOAD_/ || + $2 ~ /^TP_STATUS_/ || + $2 ~ /^FALLOC_/ || + $2 ~ /^ICMPV?6?_(FILTER|SEC)/ || + $2 == "SOMAXCONN" || + $2 == "NAME_MAX" || + $2 == "IFNAMSIZ" || + $2 ~ /^CTL_(HW|KERN|MAXNAME|NET|QUERY)$/ || + $2 ~ /^KERN_(HOSTNAME|OS(RELEASE|TYPE)|VERSION)$/ || + $2 ~ /^HW_MACHINE$/ || + $2 ~ /^SYSCTL_VERS/ || + $2 !~ "MNT_BITS" && + $2 ~ /^(MS|MNT|MOUNT|UMOUNT)_/ || + $2 ~ /^NS_GET_/ || + $2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ || + $2 ~ /^(O|F|[ES]?FD|NAME|S|PTRACE|PT|TFD)_/ || + $2 ~ /^KEXEC_/ || + $2 ~ /^LINUX_REBOOT_CMD_/ || + $2 ~ /^LINUX_REBOOT_MAGIC[12]$/ || + $2 ~ /^MODULE_INIT_/ || + $2 !~ "NLA_TYPE_MASK" && + $2 !~ /^RTC_VL_(ACCURACY|BACKUP|DATA)/ && + $2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTC|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P|NETNSA)_/ || + $2 ~ /^FIORDCHK$/ || + $2 ~ /^SIOC/ || + $2 ~ /^TIOC/ || + $2 ~ /^TCGET/ || + $2 ~ /^TCSET/ || + $2 ~ /^TC(FLSH|SBRKP?|XONC)$/ || + $2 !~ "RTF_BITS" && + $2 ~ /^(IFF|IFT|NET_RT|RTM(GRP)?|RTF|RTV|RTA|RTAX)_/ || + $2 ~ /^BIOC/ || + $2 ~ /^DIOC/ || + $2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ || + $2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|LOCKS|MEMLOCK|MSGQUEUE|NICE|NOFILE|NPROC|RSS|RTPRIO|RTTIME|SIGPENDING|STACK)|RLIM_INFINITY/ || + $2 ~ /^PRIO_(PROCESS|PGRP|USER)/ || + $2 ~ /^CLONE_[A-Z_]+/ || + $2 !~ /^(BPF_TIMEVAL|BPF_FIB_LOOKUP_[A-Z]+)$/ && + $2 ~ /^(BPF|DLT)_/ || + $2 ~ /^(CLOCK|TIMER)_/ || + $2 ~ /^CAN_/ || + $2 ~ /^CAP_/ || + $2 ~ /^CP_/ || + $2 ~ /^CPUSTATES$/ || + $2 ~ /^CTLIOCGINFO$/ || + $2 ~ /^ALG_/ || + $2 ~ /^FI(CLONE|DEDUPERANGE)/ || + $2 ~ /^FS_(POLICY_FLAGS|KEY_DESC|ENCRYPTION_MODE|[A-Z0-9_]+_KEY_SIZE)/ || + $2 ~ /^FS_IOC_.*(ENCRYPTION|VERITY|[GS]ETFLAGS)/ || + $2 ~ /^FS_VERITY_/ || + $2 ~ /^FSCRYPT_/ || + $2 ~ /^DM_/ || + $2 ~ /^GRND_/ || + $2 ~ /^RND/ || + $2 ~ /^KEY_(SPEC|REQKEY_DEFL)_/ || + $2 ~ /^KEYCTL_/ || + $2 ~ /^PERF_/ || + $2 ~ /^SECCOMP_MODE_/ || + $2 ~ /^SEEK_/ || + $2 ~ /^SPLICE_/ || + $2 ~ /^SYNC_FILE_RANGE_/ || + $2 !~ /^AUDIT_RECORD_MAGIC/ && + $2 !~ /IOC_MAGIC/ && + $2 ~ /^[A-Z][A-Z0-9_]+_MAGIC2?$/ || + $2 ~ /^(VM|VMADDR)_/ || + $2 ~ /^IOCTL_VM_SOCKETS_/ || + $2 ~ /^(TASKSTATS|TS)_/ || + $2 ~ /^CGROUPSTATS_/ || + $2 ~ /^GENL_/ || + $2 ~ /^STATX_/ || + $2 ~ /^RENAME/ || + $2 ~ /^UBI_IOC[A-Z]/ || + $2 ~ /^UTIME_/ || + $2 ~ /^XATTR_(CREATE|REPLACE|NO(DEFAULT|FOLLOW|SECURITY)|SHOWCOMPRESSION)/ || + $2 ~ /^ATTR_(BIT_MAP_COUNT|(CMN|VOL|FILE)_)/ || + $2 ~ /^FSOPT_/ || + $2 ~ /^WDIO[CFS]_/ || + $2 ~ /^NFN/ || + $2 ~ /^XDP_/ || + $2 ~ /^RWF_/ || + $2 ~ /^(HDIO|WIN|SMART)_/ || + $2 ~ /^CRYPTO_/ || + $2 ~ /^TIPC_/ || + $2 !~ "DEVLINK_RELOAD_LIMITS_VALID_MASK" && + $2 ~ /^DEVLINK_/ || + $2 ~ /^ETHTOOL_/ || + $2 ~ /^LWTUNNEL_IP/ || + $2 ~ /^ITIMER_/ || + $2 !~ "WMESGLEN" && + $2 ~ /^W[A-Z0-9]+$/ || + $2 ~ /^P_/ || + $2 ~/^PPPIOC/ || + $2 ~ /^FAN_|FANOTIFY_/ || + $2 == "HID_MAX_DESCRIPTOR_SIZE" || + $2 ~ /^_?HIDIOC/ || + $2 ~ /^BUS_(USB|HIL|BLUETOOTH|VIRTUAL)$/ || + $2 ~ /^MTD/ || + $2 ~ /^OTP/ || + $2 ~ /^MEM/ || + $2 ~ /^WG/ || + $2 ~ /^FIB_RULE_/ || + $2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {printf("\t%s = C.%s\n", $2, $2)} + $2 ~ /^__WCOREFLAG$/ {next} + $2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)} + + {next} + ' | sort + + echo ')' +) >_const.go + +# Pull out the error names for later. +errors=$( + echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print $2 }' | + sort +) + +# Pull out the signal names for later. +signals=$( + echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' | + egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' | + sort +) + +# Again, writing regexps to a file. +echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print "^\t" $2 "[ \t]*=" }' | + sort >_error.grep +echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print "^\t" $2 "[ \t]*=" }' | + egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' | + sort >_signal.grep + +echo '// mkerrors.sh' "$@" +echo '// Code generated by the command above; see README.md. DO NOT EDIT.' +echo +echo "//go:build ${GOARCH} && ${GOOS}" +echo "// +build ${GOARCH},${GOOS}" +echo +go tool cgo -godefs -- "$@" _const.go >_error.out +cat _error.out | grep -vf _error.grep | grep -vf _signal.grep +echo +echo '// Errors' +echo 'const (' +cat _error.out | grep -f _error.grep | sed 's/=\(.*\)/= syscall.Errno(\1)/' +echo ')' + +echo +echo '// Signals' +echo 'const (' +cat _error.out | grep -f _signal.grep | sed 's/=\(.*\)/= syscall.Signal(\1)/' +echo ')' + +# Run C program to print error and syscall strings. +( + echo -E " +#include +#include +#include +#include +#include +#include + +#define nelem(x) (sizeof(x)/sizeof((x)[0])) + +enum { A = 'A', Z = 'Z', a = 'a', z = 'z' }; // avoid need for single quotes below + +struct tuple { + int num; + const char *name; +}; + +struct tuple errors[] = { +" + for i in $errors + do + echo -E ' {'$i', "'$i'" },' + done + + echo -E " +}; + +struct tuple signals[] = { +" + for i in $signals + do + echo -E ' {'$i', "'$i'" },' + done + + # Use -E because on some systems bash builtin interprets \n itself. + echo -E ' +}; + +static int +tuplecmp(const void *a, const void *b) +{ + return ((struct tuple *)a)->num - ((struct tuple *)b)->num; +} + +int +main(void) +{ + int i, e; + char buf[1024], *p; + + printf("\n\n// Error table\n"); + printf("var errorList = [...]struct {\n"); + printf("\tnum syscall.Errno\n"); + printf("\tname string\n"); + printf("\tdesc string\n"); + printf("} {\n"); + qsort(errors, nelem(errors), sizeof errors[0], tuplecmp); + for(i=0; i 0 && errors[i-1].num == e) + continue; + strcpy(buf, strerror(e)); + // lowercase first letter: Bad -> bad, but STREAM -> STREAM. + if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z) + buf[0] += a - A; + printf("\t{ %d, \"%s\", \"%s\" },\n", e, errors[i].name, buf); + } + printf("}\n\n"); + + printf("\n\n// Signal table\n"); + printf("var signalList = [...]struct {\n"); + printf("\tnum syscall.Signal\n"); + printf("\tname string\n"); + printf("\tdesc string\n"); + printf("} {\n"); + qsort(signals, nelem(signals), sizeof signals[0], tuplecmp); + for(i=0; i 0 && signals[i-1].num == e) + continue; + strcpy(buf, strsignal(e)); + // lowercase first letter: Bad -> bad, but STREAM -> STREAM. + if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z) + buf[0] += a - A; + // cut trailing : number. + p = strrchr(buf, ":"[0]); + if(p) + *p = '\0'; + printf("\t{ %d, \"%s\", \"%s\" },\n", e, signals[i].name, buf); + } + printf("}\n\n"); + + return 0; +} + +' +) >_errors.c + +$CC $ccflags -o _errors _errors.c && $GORUN ./_errors && rm -f _errors.c _errors _const.go _error.grep _signal.grep _error.out diff --git a/vendor/golang.org/x/sys/unix/pagesize_unix.go b/vendor/golang.org/x/sys/unix/pagesize_unix.go new file mode 100644 index 0000000..53f1b4c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/pagesize_unix.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 || linux || netbsd || openbsd || solaris +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris + +// For Unix, get the pagesize from the runtime. + +package unix + +import "syscall" + +func Getpagesize() int { + return syscall.Getpagesize() +} diff --git a/vendor/golang.org/x/sys/unix/pledge_openbsd.go b/vendor/golang.org/x/sys/unix/pledge_openbsd.go new file mode 100644 index 0000000..eb48294 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/pledge_openbsd.go @@ -0,0 +1,163 @@ +// 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 unix + +import ( + "errors" + "fmt" + "strconv" + "syscall" + "unsafe" +) + +// Pledge implements the pledge syscall. +// +// The pledge syscall does not accept execpromises on OpenBSD releases +// before 6.3. +// +// execpromises must be empty when Pledge is called on OpenBSD +// releases predating 6.3, otherwise an error will be returned. +// +// For more information see pledge(2). +func Pledge(promises, execpromises string) error { + maj, min, err := majmin() + if err != nil { + return err + } + + err = pledgeAvailable(maj, min, execpromises) + if err != nil { + return err + } + + pptr, err := syscall.BytePtrFromString(promises) + if err != nil { + return err + } + + // This variable will hold either a nil unsafe.Pointer or + // an unsafe.Pointer to a string (execpromises). + var expr unsafe.Pointer + + // If we're running on OpenBSD > 6.2, pass execpromises to the syscall. + if maj > 6 || (maj == 6 && min > 2) { + exptr, err := syscall.BytePtrFromString(execpromises) + if err != nil { + return err + } + expr = unsafe.Pointer(exptr) + } + + _, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(unsafe.Pointer(pptr)), uintptr(expr), 0) + if e != 0 { + return e + } + + return nil +} + +// PledgePromises implements the pledge syscall. +// +// This changes the promises and leaves the execpromises untouched. +// +// For more information see pledge(2). +func PledgePromises(promises string) error { + maj, min, err := majmin() + if err != nil { + return err + } + + err = pledgeAvailable(maj, min, "") + if err != nil { + return err + } + + // This variable holds the execpromises and is always nil. + var expr unsafe.Pointer + + pptr, err := syscall.BytePtrFromString(promises) + if err != nil { + return err + } + + _, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(unsafe.Pointer(pptr)), uintptr(expr), 0) + if e != 0 { + return e + } + + return nil +} + +// PledgeExecpromises implements the pledge syscall. +// +// This changes the execpromises and leaves the promises untouched. +// +// For more information see pledge(2). +func PledgeExecpromises(execpromises string) error { + maj, min, err := majmin() + if err != nil { + return err + } + + err = pledgeAvailable(maj, min, execpromises) + if err != nil { + return err + } + + // This variable holds the promises and is always nil. + var pptr unsafe.Pointer + + exptr, err := syscall.BytePtrFromString(execpromises) + if err != nil { + return err + } + + _, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(pptr), uintptr(unsafe.Pointer(exptr)), 0) + if e != 0 { + return e + } + + return nil +} + +// majmin returns major and minor version number for an OpenBSD system. +func majmin() (major int, minor int, err error) { + var v Utsname + err = Uname(&v) + if err != nil { + return + } + + major, err = strconv.Atoi(string(v.Release[0])) + if err != nil { + err = errors.New("cannot parse major version number returned by uname") + return + } + + minor, err = strconv.Atoi(string(v.Release[2])) + if err != nil { + err = errors.New("cannot parse minor version number returned by uname") + return + } + + return +} + +// pledgeAvailable checks for availability of the pledge(2) syscall +// based on the running OpenBSD version. +func pledgeAvailable(maj, min int, execpromises string) error { + // If OpenBSD <= 5.9, pledge is not available. + if (maj == 5 && min != 9) || maj < 5 { + return fmt.Errorf("pledge syscall is not available on OpenBSD %d.%d", maj, min) + } + + // If OpenBSD <= 6.2 and execpromises is not empty, + // return an error - execpromises is not available before 6.3 + if (maj < 6 || (maj == 6 && min <= 2)) && execpromises != "" { + return fmt.Errorf("cannot use execpromises on OpenBSD %d.%d", maj, min) + } + + return nil +} diff --git a/vendor/golang.org/x/sys/unix/ptrace_darwin.go b/vendor/golang.org/x/sys/unix/ptrace_darwin.go new file mode 100644 index 0000000..463c3ef --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ptrace_darwin.go @@ -0,0 +1,12 @@ +// 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 darwin && !ios +// +build darwin,!ios + +package unix + +func ptrace(request int, pid int, addr uintptr, data uintptr) error { + return ptrace1(request, pid, addr, data) +} diff --git a/vendor/golang.org/x/sys/unix/ptrace_ios.go b/vendor/golang.org/x/sys/unix/ptrace_ios.go new file mode 100644 index 0000000..ed0509a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ptrace_ios.go @@ -0,0 +1,12 @@ +// 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 ios +// +build ios + +package unix + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + return ENOTSUP +} diff --git a/vendor/golang.org/x/sys/unix/race.go b/vendor/golang.org/x/sys/unix/race.go new file mode 100644 index 0000000..6f6c5fe --- /dev/null +++ b/vendor/golang.org/x/sys/unix/race.go @@ -0,0 +1,31 @@ +// 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 (darwin && race) || (linux && race) || (freebsd && race) +// +build darwin,race linux,race freebsd,race + +package unix + +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/unix/race0.go b/vendor/golang.org/x/sys/unix/race0.go new file mode 100644 index 0000000..706e132 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/race0.go @@ -0,0 +1,26 @@ +// 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 && !race) || (linux && !race) || (freebsd && !race) || netbsd || openbsd || solaris || dragonfly || zos +// +build aix darwin,!race linux,!race freebsd,!race netbsd openbsd solaris dragonfly zos + +package unix + +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/unix/readdirent_getdents.go b/vendor/golang.org/x/sys/unix/readdirent_getdents.go new file mode 100644 index 0000000..4d62575 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/readdirent_getdents.go @@ -0,0 +1,13 @@ +// 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 || dragonfly || freebsd || linux || netbsd || openbsd +// +build aix dragonfly freebsd linux netbsd openbsd + +package unix + +// ReadDirent reads directory entries from fd and writes them into buf. +func ReadDirent(fd int, buf []byte) (n int, err error) { + return Getdents(fd, buf) +} diff --git a/vendor/golang.org/x/sys/unix/readdirent_getdirentries.go b/vendor/golang.org/x/sys/unix/readdirent_getdirentries.go new file mode 100644 index 0000000..2a4ba47 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/readdirent_getdirentries.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 darwin +// +build darwin + +package unix + +import "unsafe" + +// ReadDirent reads directory entries from fd and writes them into buf. +func ReadDirent(fd int, buf []byte) (n int, err error) { + // Final argument is (basep *uintptr) and the syscall doesn't take nil. + // 64 bits should be enough. (32 bits isn't even on 386). Since the + // actual system call is getdirentries64, 64 is a good guess. + // TODO(rsc): Can we use a single global basep for all calls? + var base = (*uintptr)(unsafe.Pointer(new(uint64))) + return Getdirentries(fd, buf, base) +} diff --git a/vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go b/vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go new file mode 100644 index 0000000..5144dee --- /dev/null +++ b/vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.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. + +package unix + +// Round the length of a raw sockaddr up to align it properly. +func cmsgAlignOf(salen int) int { + salign := SizeofPtr + if SizeofPtr == 8 && !supportsABI(_dragonflyABIChangeVersion) { + // 64-bit Dragonfly before the September 2019 ABI changes still requires + // 32-bit aligned access to network subsystem. + salign = 4 + } + return (salen + salign - 1) & ^(salign - 1) +} diff --git a/vendor/golang.org/x/sys/unix/sockcmsg_linux.go b/vendor/golang.org/x/sys/unix/sockcmsg_linux.go new file mode 100644 index 0000000..5f63147 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/sockcmsg_linux.go @@ -0,0 +1,85 @@ +// 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. + +// Socket control messages + +package unix + +import "unsafe" + +// UnixCredentials encodes credentials into a socket control message +// for sending to another process. This can be used for +// authentication. +func UnixCredentials(ucred *Ucred) []byte { + b := make([]byte, CmsgSpace(SizeofUcred)) + h := (*Cmsghdr)(unsafe.Pointer(&b[0])) + h.Level = SOL_SOCKET + h.Type = SCM_CREDENTIALS + h.SetLen(CmsgLen(SizeofUcred)) + *(*Ucred)(h.data(0)) = *ucred + return b +} + +// ParseUnixCredentials decodes a socket control message that contains +// credentials in a Ucred structure. To receive such a message, the +// SO_PASSCRED option must be enabled on the socket. +func ParseUnixCredentials(m *SocketControlMessage) (*Ucred, error) { + if m.Header.Level != SOL_SOCKET { + return nil, EINVAL + } + if m.Header.Type != SCM_CREDENTIALS { + return nil, EINVAL + } + ucred := *(*Ucred)(unsafe.Pointer(&m.Data[0])) + return &ucred, nil +} + +// PktInfo4 encodes Inet4Pktinfo into a socket control message of type IP_PKTINFO. +func PktInfo4(info *Inet4Pktinfo) []byte { + b := make([]byte, CmsgSpace(SizeofInet4Pktinfo)) + h := (*Cmsghdr)(unsafe.Pointer(&b[0])) + h.Level = SOL_IP + h.Type = IP_PKTINFO + h.SetLen(CmsgLen(SizeofInet4Pktinfo)) + *(*Inet4Pktinfo)(h.data(0)) = *info + return b +} + +// PktInfo6 encodes Inet6Pktinfo into a socket control message of type IPV6_PKTINFO. +func PktInfo6(info *Inet6Pktinfo) []byte { + b := make([]byte, CmsgSpace(SizeofInet6Pktinfo)) + h := (*Cmsghdr)(unsafe.Pointer(&b[0])) + h.Level = SOL_IPV6 + h.Type = IPV6_PKTINFO + h.SetLen(CmsgLen(SizeofInet6Pktinfo)) + *(*Inet6Pktinfo)(h.data(0)) = *info + return b +} + +// ParseOrigDstAddr decodes a socket control message containing the original +// destination address. To receive such a message the IP_RECVORIGDSTADDR or +// IPV6_RECVORIGDSTADDR option must be enabled on the socket. +func ParseOrigDstAddr(m *SocketControlMessage) (Sockaddr, error) { + switch { + case m.Header.Level == SOL_IP && m.Header.Type == IP_ORIGDSTADDR: + pp := (*RawSockaddrInet4)(unsafe.Pointer(&m.Data[0])) + 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 m.Header.Level == SOL_IPV6 && m.Header.Type == IPV6_ORIGDSTADDR: + pp := (*RawSockaddrInet6)(unsafe.Pointer(&m.Data[0])) + 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 + + default: + return nil, EINVAL + } +} diff --git a/vendor/golang.org/x/sys/unix/sockcmsg_unix.go b/vendor/golang.org/x/sys/unix/sockcmsg_unix.go new file mode 100644 index 0000000..453a942 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/sockcmsg_unix.go @@ -0,0 +1,93 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos + +// Socket control messages + +package unix + +import ( + "unsafe" +) + +// CmsgLen returns the value to store in the Len field of the Cmsghdr +// structure, taking into account any necessary alignment. +func CmsgLen(datalen int) int { + return cmsgAlignOf(SizeofCmsghdr) + datalen +} + +// CmsgSpace returns the number of bytes an ancillary element with +// payload of the passed data length occupies. +func CmsgSpace(datalen int) int { + return cmsgAlignOf(SizeofCmsghdr) + cmsgAlignOf(datalen) +} + +func (h *Cmsghdr) data(offset uintptr) unsafe.Pointer { + return unsafe.Pointer(uintptr(unsafe.Pointer(h)) + uintptr(cmsgAlignOf(SizeofCmsghdr)) + offset) +} + +// SocketControlMessage represents a socket control message. +type SocketControlMessage struct { + Header Cmsghdr + Data []byte +} + +// ParseSocketControlMessage parses b as an array of socket control +// messages. +func ParseSocketControlMessage(b []byte) ([]SocketControlMessage, error) { + var msgs []SocketControlMessage + i := 0 + for i+CmsgLen(0) <= len(b) { + h, dbuf, err := socketControlMessageHeaderAndData(b[i:]) + if err != nil { + return nil, err + } + m := SocketControlMessage{Header: *h, Data: dbuf} + msgs = append(msgs, m) + i += cmsgAlignOf(int(h.Len)) + } + return msgs, nil +} + +func socketControlMessageHeaderAndData(b []byte) (*Cmsghdr, []byte, error) { + h := (*Cmsghdr)(unsafe.Pointer(&b[0])) + if h.Len < SizeofCmsghdr || uint64(h.Len) > uint64(len(b)) { + return nil, nil, EINVAL + } + return h, b[cmsgAlignOf(SizeofCmsghdr):h.Len], nil +} + +// UnixRights encodes a set of open file descriptors into a socket +// control message for sending to another process. +func UnixRights(fds ...int) []byte { + datalen := len(fds) * 4 + b := make([]byte, CmsgSpace(datalen)) + h := (*Cmsghdr)(unsafe.Pointer(&b[0])) + h.Level = SOL_SOCKET + h.Type = SCM_RIGHTS + h.SetLen(CmsgLen(datalen)) + for i, fd := range fds { + *(*int32)(h.data(4 * uintptr(i))) = int32(fd) + } + return b +} + +// ParseUnixRights decodes a socket control message that contains an +// integer array of open file descriptors from another process. +func ParseUnixRights(m *SocketControlMessage) ([]int, error) { + if m.Header.Level != SOL_SOCKET { + return nil, EINVAL + } + if m.Header.Type != SCM_RIGHTS { + return nil, EINVAL + } + fds := make([]int, len(m.Data)>>2) + for i, j := 0, 0; i < len(m.Data); i += 4 { + fds[j] = int(*(*int32)(unsafe.Pointer(&m.Data[i]))) + j++ + } + return fds, nil +} diff --git a/vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go b/vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go new file mode 100644 index 0000000..0840fe4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go @@ -0,0 +1,47 @@ +// 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 || freebsd || linux || netbsd || openbsd || solaris || zos +// +build aix darwin freebsd linux netbsd openbsd solaris zos + +package unix + +import ( + "runtime" +) + +// Round the length of a raw sockaddr up to align it properly. +func cmsgAlignOf(salen int) int { + salign := SizeofPtr + + // dragonfly needs to check ABI version at runtime, see cmsgAlignOf in + // sockcmsg_dragonfly.go + switch runtime.GOOS { + case "aix": + // There is no alignment on AIX. + salign = 1 + case "darwin", "ios", "illumos", "solaris": + // NOTE: It seems like 64-bit Darwin, Illumos and Solaris + // kernels still require 32-bit aligned access to network + // subsystem. + if SizeofPtr == 8 { + salign = 4 + } + case "netbsd", "openbsd": + // NetBSD and OpenBSD armv7 require 64-bit alignment. + if runtime.GOARCH == "arm" { + salign = 8 + } + // NetBSD aarch64 requires 128-bit alignment. + if runtime.GOOS == "netbsd" && runtime.GOARCH == "arm64" { + salign = 16 + } + case "zos": + // z/OS socket macros use [32-bit] sizeof(int) alignment, + // not pointer width. + salign = SizeofInt + } + + return (salen + salign - 1) & ^(salign - 1) +} diff --git a/vendor/golang.org/x/sys/unix/str.go b/vendor/golang.org/x/sys/unix/str.go new file mode 100644 index 0000000..8ba89ed --- /dev/null +++ b/vendor/golang.org/x/sys/unix/str.go @@ -0,0 +1,27 @@ +// 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 aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix + +func itoa(val int) string { // do it here rather than with fmt to avoid dependency + if val < 0 { + return "-" + uitoa(uint(-val)) + } + return uitoa(uint(val)) +} + +func uitoa(val uint) string { + 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/unix/syscall.go b/vendor/golang.org/x/sys/unix/syscall.go new file mode 100644 index 0000000..649fa87 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall.go @@ -0,0 +1,95 @@ +// 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 aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos + +// Package unix contains an interface to the low-level operating system +// primitives. OS details vary depending on the underlying system, and +// by default, godoc will display OS-specific documentation for the current +// system. If you want godoc to display OS 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 unix // import "golang.org/x/sys/unix" + +import ( + "bytes" + "strings" + "unsafe" + + "golang.org/x/sys/internal/unsafeheader" +) + +// ByteSliceFromString returns a NUL-terminated slice of bytes +// containing the text of s. If s contains a NUL byte at any +// location, it returns (nil, EINVAL). +func ByteSliceFromString(s string) ([]byte, error) { + if strings.IndexByte(s, 0) != -1 { + return nil, 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, 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) + } + + var s []byte + h := (*unsafeheader.Slice)(unsafe.Pointer(&s)) + h.Data = unsafe.Pointer(p) + h.Len = n + h.Cap = n + + return string(s) +} + +// Single-word zero for use when we need a valid pointer to 0 bytes. +var _zero uintptr diff --git a/vendor/golang.org/x/sys/unix/syscall_aix.go b/vendor/golang.org/x/sys/unix/syscall_aix.go new file mode 100644 index 0000000..f2a114f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_aix.go @@ -0,0 +1,545 @@ +// 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 aix +// +build aix + +// Aix system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and +// wrap it in our own nicer implementation. + +package unix + +import "unsafe" + +/* + * Wrapped + */ + +func Access(path string, mode uint32) (err error) { + return Faccessat(AT_FDCWD, path, mode, 0) +} + +func Chmod(path string, mode uint32) (err error) { + return Fchmodat(AT_FDCWD, path, mode, 0) +} + +func Chown(path string, uid int, gid int) (err error) { + return Fchownat(AT_FDCWD, path, uid, gid, 0) +} + +func Creat(path string, mode uint32) (fd int, err error) { + return Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode) +} + +//sys utimes(path string, times *[2]Timeval) (err error) +func Utimes(path string, tv []Timeval) error { + if len(tv) != 2 { + return EINVAL + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +//sys utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) +func UtimesNano(path string, ts []Timespec) error { + if len(ts) != 2 { + return EINVAL + } + return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) +} + +func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { + if ts == nil { + return utimensat(dirfd, path, nil, flags) + } + if len(ts) != 2 { + return EINVAL + } + return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) +} + +func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, 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), SizeofSockaddrInet4, nil +} + +func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, 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), SizeofSockaddrInet6, nil +} + +func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { + name := sa.Name + n := len(name) + if n > len(sa.raw.Path) { + return nil, 0, EINVAL + } + if n == len(sa.raw.Path) && name[0] != '@' { + return nil, 0, EINVAL + } + sa.raw.Family = AF_UNIX + for i := 0; i < n; i++ { + sa.raw.Path[i] = uint8(name[i]) + } + // length is family (uint16), name, NUL. + sl := _Socklen(2) + if n > 0 { + sl += _Socklen(n) + 1 + } + if sa.raw.Path[0] == '@' { + sa.raw.Path[0] = 0 + // Don't count trailing NUL for abstract address. + sl-- + } + + return unsafe.Pointer(&sa.raw), sl, nil +} + +func Getsockname(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getsockname(fd, &rsa, &len); err != nil { + return + } + return anyToSockaddr(fd, &rsa) +} + +//sys getcwd(buf []byte) (err error) + +const ImplementsGetwd = true + +func Getwd() (ret string, err error) { + for len := uint64(4096); ; len *= 2 { + b := make([]byte, len) + err := getcwd(b) + if err == nil { + i := 0 + for b[i] != 0 { + i++ + } + return string(b[0:i]), nil + } + if err != ERANGE { + return "", err + } + } +} + +func Getcwd(buf []byte) (n int, err error) { + err = getcwd(buf) + if err == nil { + i := 0 + for buf[i] != 0 { + i++ + } + n = i + 1 + } + return +} + +func Getgroups() (gids []int, err error) { + n, err := getgroups(0, nil) + if err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + + // Sanity check group count. Max is 16 on BSD. + if n < 0 || n > 1000 { + return nil, EINVAL + } + + a := make([]_Gid_t, n) + n, err = getgroups(n, &a[0]) + if err != nil { + return nil, err + } + gids = make([]int, n) + for i, v := range a[0:n] { + gids[i] = int(v) + } + return +} + +func Setgroups(gids []int) (err error) { + if len(gids) == 0 { + return setgroups(0, nil) + } + + a := make([]_Gid_t, len(gids)) + for i, v := range gids { + a[i] = _Gid_t(v) + } + return setgroups(len(a), &a[0]) +} + +/* + * Socket + */ + +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) + +func Accept(fd int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept(fd, &rsa, &len) + if nfd == -1 { + return + } + sa, err = anyToSockaddr(fd, &rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { + // Recvmsg not implemented on AIX + return -1, -1, -1, ENOSYS +} + +func sendmsgN(fd int, p, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { + // SendmsgN not implemented on AIX + return -1, ENOSYS +} + +func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { + switch rsa.Addr.Family { + + case AF_UNIX: + pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) + sa := new(SockaddrUnix) + + // Some versions of AIX have a bug in getsockname (see IV78655). + // We can't rely on sa.Len being set correctly. + n := SizeofSockaddrUnix - 3 // subtract leading Family, Len, terminating NUL. + for i := 0; i < n; i++ { + if pp.Path[i] == 0 { + n = i + break + } + } + + bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] + sa.Name = string(bytes) + 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, EAFNOSUPPORT +} + +func Gettimeofday(tv *Timeval) (err error) { + err = gettimeofday(tv, nil) + return +} + +func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + return sendfile(outfd, infd, offset, count) +} + +// TODO +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + return -1, ENOSYS +} + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) +} + +func direntReclen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) +} + +func direntNamlen(buf []byte) (uint64, bool) { + reclen, ok := direntReclen(buf) + if !ok { + return 0, false + } + return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true +} + +//sys getdirent(fd int, buf []byte) (n int, err error) +func Getdents(fd int, buf []byte) (n int, err error) { + return getdirent(fd, buf) +} + +//sys wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error) +func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { + var status _C_int + var r Pid_t + err = ERESTART + // AIX wait4 may return with ERESTART errno, while the processus is still + // active. + for err == ERESTART { + r, err = wait4(Pid_t(pid), &status, options, rusage) + } + wpid = int(r) + if wstatus != nil { + *wstatus = WaitStatus(status) + } + return +} + +/* + * Wait + */ + +type WaitStatus uint32 + +func (w WaitStatus) Stopped() bool { return w&0x40 != 0 } +func (w WaitStatus) StopSignal() Signal { + if !w.Stopped() { + return -1 + } + return Signal(w>>8) & 0xFF +} + +func (w WaitStatus) Exited() bool { return w&0xFF == 0 } +func (w WaitStatus) ExitStatus() int { + if !w.Exited() { + return -1 + } + return int((w >> 8) & 0xFF) +} + +func (w WaitStatus) Signaled() bool { return w&0x40 == 0 && w&0xFF != 0 } +func (w WaitStatus) Signal() Signal { + if !w.Signaled() { + return -1 + } + return Signal(w>>16) & 0xFF +} + +func (w WaitStatus) Continued() bool { return w&0x01000000 != 0 } + +func (w WaitStatus) CoreDump() bool { return w&0x80 == 0x80 } + +func (w WaitStatus) TrapCause() int { return -1 } + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +// fcntl must never be called with cmd=F_DUP2FD because it doesn't work on AIX +// There is no way to create a custom fcntl and to keep //sys fcntl easily, +// Therefore, the programmer must call dup2 instead of fcntl in this case. + +// FcntlInt performs a fcntl syscall on fd with the provided command and argument. +//sys FcntlInt(fd uintptr, cmd int, arg int) (r int,err error) = fcntl + +// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command. +//sys FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) = fcntl + +//sys fcntl(fd int, cmd int, arg int) (val int, err error) + +//sys fsyncRange(fd int, how int, start int64, length int64) (err error) = fsync_range +func Fsync(fd int) error { + return fsyncRange(fd, O_SYNC, 0, 0) +} + +/* + * Direct access + */ + +//sys Acct(path string) (err error) +//sys Chdir(path string) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(oldfd int) (fd int, err error) +//sys Exit(code int) +//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchdir(fd int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) +//sys Fdatasync(fd int) (err error) +// readdir_r +//sysnb Getpgid(pid int) (pgid int, err error) + +//sys Getpgrp() (pid int) + +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Kill(pid int, sig Signal) (err error) +//sys Klogctl(typ int, buf []byte) (n int, err error) = syslog +//sys Mkdir(dirfd int, path string, mode uint32) (err error) +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) = open64 +//sys Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) +//sys Setdomainname(p []byte) (err error) +//sys Sethostname(p []byte) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tv *Timeval) (err error) + +//sys Setuid(uid int) (err error) +//sys Setgid(uid int) (err error) + +//sys Setpriority(which int, who int, prio int) (err error) +//sys Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) +//sys Sync() +//sysnb Times(tms *Tms) (ticks uintptr, err error) +//sysnb Umask(mask int) (oldmask int) +//sysnb Uname(buf *Utsname) (err error) +//sys Unlink(path string) (err error) +//sys Unlinkat(dirfd int, path string, flags int) (err error) +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys readlen(fd int, p *byte, np int) (n int, err error) = read +//sys writelen(fd int, p *byte, np int) (n int, err error) = write + +//sys Dup2(oldfd int, newfd int) (err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = posix_fadvise64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys fstat(fd int, stat *Stat_t) (err error) +//sys fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = fstatat +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getuid() (uid int) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys lstat(path string, stat *Stat_t) (err error) +//sys Pause() (err error) +//sys pread(fd int, p []byte, offset int64) (n int, err error) = pread64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = pwrite64 +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys stat(path string, statptr *Stat_t) (err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys Truncate(path string, length int64) (err error) + +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) + +// In order to use msghdr structure with Control, Controllen, nrecvmsg and nsendmsg must be used. +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = nrecvmsg +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = nsendmsg + +//sys munmap(addr uintptr, length uintptr) (err error) + +var mapper = &mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, +} + +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (err error) { + return mapper.Munmap(b) +} + +//sys Madvise(b []byte, advice int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Msync(b []byte, flags int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) + +//sysnb pipe(p *[2]_C_int) (err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe(&pp) + if err == nil { + p[0] = int(pp[0]) + p[1] = int(pp[1]) + } + return +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} + +//sys gettimeofday(tv *Timeval, tzp *Timezone) (err error) +//sysnb Time(t *Time_t) (tt Time_t, err error) +//sys Utime(path string, buf *Utimbuf) (err error) + +//sys Getsystemcfg(label int) (n uint64) + +//sys umount(target string) (err error) +func Unmount(target string, flags int) (err error) { + if flags != 0 { + // AIX doesn't have any flags for umount. + return ENOSYS + } + return umount(target) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go b/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go new file mode 100644 index 0000000..e92a0be --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go @@ -0,0 +1,54 @@ +// 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 aix && ppc +// +build aix,ppc + +package unix + +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) = getrlimit64 +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) = setrlimit64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = lseek64 + +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = int32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func Fstat(fd int, stat *Stat_t) error { + return fstat(fd, stat) +} + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) error { + return fstatat(dirfd, path, stat, flags) +} + +func Lstat(path string, stat *Stat_t) error { + return lstat(path, stat) +} + +func Stat(path string, statptr *Stat_t) error { + return stat(path, statptr) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go b/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go new file mode 100644 index 0000000..16eed17 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.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. + +//go:build aix && ppc64 +// +build aix,ppc64 + +package unix + +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = lseek + +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) = mmap64 + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int64(sec), Usec: int32(usec)} +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = int32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +// In order to only have Timespec structure, type of Stat_t's fields +// Atim, Mtim and Ctim is changed from StTimespec to Timespec during +// ztypes generation. +// On ppc64, Timespec.Nsec is an int64 while StTimespec.Nsec is an +// int32, so the fields' value must be modified. +func fixStatTimFields(stat *Stat_t) { + stat.Atim.Nsec >>= 32 + stat.Mtim.Nsec >>= 32 + stat.Ctim.Nsec >>= 32 +} + +func Fstat(fd int, stat *Stat_t) error { + err := fstat(fd, stat) + if err != nil { + return err + } + fixStatTimFields(stat) + return nil +} + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) error { + err := fstatat(dirfd, path, stat, flags) + if err != nil { + return err + } + fixStatTimFields(stat) + return nil +} + +func Lstat(path string, stat *Stat_t) error { + err := lstat(path, stat) + if err != nil { + return err + } + fixStatTimFields(stat) + return nil +} + +func Stat(path string, statptr *Stat_t) error { + err := stat(path, statptr) + if err != nil { + return err + } + fixStatTimFields(statptr) + return nil +} diff --git a/vendor/golang.org/x/sys/unix/syscall_bsd.go b/vendor/golang.org/x/sys/unix/syscall_bsd.go new file mode 100644 index 0000000..9c87c5f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_bsd.go @@ -0,0 +1,625 @@ +// 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 darwin || dragonfly || freebsd || netbsd || openbsd +// +build darwin dragonfly freebsd netbsd openbsd + +// BSD system call wrappers shared by *BSD based systems +// including OS X (Darwin) and FreeBSD. Like the other +// syscall_*.go files it is compiled as Go code but also +// used as input to mksyscall which parses the //sys +// lines and generates system call stubs. + +package unix + +import ( + "runtime" + "syscall" + "unsafe" +) + +const ImplementsGetwd = true + +func Getwd() (string, error) { + var buf [PathMax]byte + _, err := Getcwd(buf[0:]) + if err != nil { + return "", err + } + n := clen(buf[:]) + if n < 1 { + return "", EINVAL + } + return string(buf[:n]), nil +} + +/* + * Wrapped + */ + +//sysnb getgroups(ngid int, gid *_Gid_t) (n int, err error) +//sysnb setgroups(ngid int, gid *_Gid_t) (err error) + +func Getgroups() (gids []int, err error) { + n, err := getgroups(0, nil) + if err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + + // Sanity check group count. Max is 16 on BSD. + if n < 0 || n > 1000 { + return nil, EINVAL + } + + a := make([]_Gid_t, n) + n, err = getgroups(n, &a[0]) + if err != nil { + return nil, err + } + gids = make([]int, n) + for i, v := range a[0:n] { + gids[i] = int(v) + } + return +} + +func Setgroups(gids []int) (err error) { + if len(gids) == 0 { + return setgroups(0, nil) + } + + a := make([]_Gid_t, len(gids)) + for i, v := range gids { + a[i] = _Gid_t(v) + } + return setgroups(len(a), &a[0]) +} + +// Wait status is 7 bits at bottom, either 0 (exited), +// 0x7F (stopped), or a signal number that caused an exit. +// The 0x80 bit is whether there was a core dump. +// An extra number (exit code, signal causing a stop) +// is in the high bits. + +type WaitStatus uint32 + +const ( + mask = 0x7F + core = 0x80 + shift = 8 + + exited = 0 + killed = 9 + stopped = 0x7F +) + +func (w WaitStatus) Exited() bool { return w&mask == exited } + +func (w WaitStatus) ExitStatus() int { + if w&mask != exited { + return -1 + } + return int(w >> shift) +} + +func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != 0 } + +func (w WaitStatus) Signal() syscall.Signal { + sig := syscall.Signal(w & mask) + if sig == stopped || sig == 0 { + return -1 + } + return sig +} + +func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 } + +func (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP } + +func (w WaitStatus) Killed() bool { return w&mask == killed && syscall.Signal(w>>shift) != SIGKILL } + +func (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP } + +func (w WaitStatus) StopSignal() syscall.Signal { + if !w.Stopped() { + return -1 + } + return syscall.Signal(w>>shift) & 0xFF +} + +func (w WaitStatus) TrapCause() int { return -1 } + +//sys wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) + +func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { + var status _C_int + wpid, err = wait4(pid, &status, options, rusage) + if wstatus != nil { + *wstatus = WaitStatus(status) + } + return +} + +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys Shutdown(s int, how int) (err error) + +func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Len = SizeofSockaddrInet4 + 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), _Socklen(sa.raw.Len), nil +} + +func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Len = SizeofSockaddrInet6 + 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), _Socklen(sa.raw.Len), nil +} + +func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { + name := sa.Name + n := len(name) + if n >= len(sa.raw.Path) || n == 0 { + return nil, 0, EINVAL + } + sa.raw.Len = byte(3 + n) // 2 for Family, Len; 1 for NUL + sa.raw.Family = AF_UNIX + for i := 0; i < n; i++ { + sa.raw.Path[i] = int8(name[i]) + } + return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil +} + +func (sa *SockaddrDatalink) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Index == 0 { + return nil, 0, EINVAL + } + sa.raw.Len = sa.Len + sa.raw.Family = AF_LINK + sa.raw.Index = sa.Index + sa.raw.Type = sa.Type + sa.raw.Nlen = sa.Nlen + sa.raw.Alen = sa.Alen + sa.raw.Slen = sa.Slen + sa.raw.Data = sa.Data + return unsafe.Pointer(&sa.raw), SizeofSockaddrDatalink, nil +} + +func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { + switch rsa.Addr.Family { + case AF_LINK: + pp := (*RawSockaddrDatalink)(unsafe.Pointer(rsa)) + sa := new(SockaddrDatalink) + sa.Len = pp.Len + sa.Family = pp.Family + sa.Index = pp.Index + sa.Type = pp.Type + sa.Nlen = pp.Nlen + sa.Alen = pp.Alen + sa.Slen = pp.Slen + sa.Data = pp.Data + return sa, nil + + case AF_UNIX: + pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) + if pp.Len < 2 || pp.Len > SizeofSockaddrUnix { + return nil, EINVAL + } + sa := new(SockaddrUnix) + + // Some BSDs include the trailing NUL in the length, whereas + // others do not. Work around this by subtracting the leading + // family and len. The path is then scanned to see if a NUL + // terminator still exists within the length. + n := int(pp.Len) - 2 // subtract leading Family, Len + for i := 0; i < n; i++ { + if pp.Path[i] == 0 { + // found early NUL; assume Len included the NUL + // or was overestimating. + n = i + break + } + } + bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] + sa.Name = string(bytes) + 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 anyToSockaddrGOOS(fd, rsa) +} + +func Accept(fd int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept(fd, &rsa, &len) + if err != nil { + return + } + if (runtime.GOOS == "darwin" || runtime.GOOS == "ios") && len == 0 { + // Accepted socket has no address. + // This is likely due to a bug in xnu kernels, + // where instead of ECONNABORTED error socket + // is accepted, but has no address. + Close(nfd) + return 0, nil, ECONNABORTED + } + sa, err = anyToSockaddr(fd, &rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func Getsockname(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getsockname(fd, &rsa, &len); err != nil { + return + } + // TODO(jsing): DragonFly has a "bug" (see issue 3349), which should be + // reported upstream. + if runtime.GOOS == "dragonfly" && rsa.Addr.Family == AF_UNSPEC && rsa.Addr.Len == 0 { + rsa.Addr.Family = AF_UNIX + rsa.Addr.Len = SizeofSockaddrUnix + } + return anyToSockaddr(fd, &rsa) +} + +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) + +// GetsockoptString returns the string value of the socket option opt for the +// socket associated with fd at the given socket level. +func GetsockoptString(fd, level, opt int) (string, error) { + buf := make([]byte, 256) + vallen := _Socklen(len(buf)) + err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen) + if err != nil { + return "", err + } + return string(buf[:vallen-1]), nil +} + +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) + +func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { + var msg Msghdr + msg.Name = (*byte)(unsafe.Pointer(rsa)) + msg.Namelen = uint32(SizeofSockaddrAny) + var iov Iovec + if len(p) > 0 { + iov.Base = (*byte)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy byte + if len(oob) > 0 { + // receive at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Control = (*byte)(unsafe.Pointer(&oob[0])) + msg.SetControllen(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = recvmsg(fd, &msg, flags); err != nil { + return + } + oobn = int(msg.Controllen) + recvflags = int(msg.Flags) + return +} + +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) + +func sendmsgN(fd int, p, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { + var msg Msghdr + msg.Name = (*byte)(unsafe.Pointer(ptr)) + msg.Namelen = uint32(salen) + var iov Iovec + if len(p) > 0 { + iov.Base = (*byte)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy byte + if len(oob) > 0 { + // send at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Control = (*byte)(unsafe.Pointer(&oob[0])) + msg.SetControllen(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = sendmsg(fd, &msg, flags); err != nil { + return 0, err + } + if len(oob) > 0 && len(p) == 0 { + n = 0 + } + return n, nil +} + +//sys kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) + +func Kevent(kq int, changes, events []Kevent_t, timeout *Timespec) (n int, err error) { + var change, event unsafe.Pointer + if len(changes) > 0 { + change = unsafe.Pointer(&changes[0]) + } + if len(events) > 0 { + event = unsafe.Pointer(&events[0]) + } + return kevent(kq, change, len(changes), event, len(events), timeout) +} + +// sysctlmib translates name to mib number and appends any additional args. +func sysctlmib(name string, args ...int) ([]_C_int, error) { + // Translate name to mib number. + mib, err := nametomib(name) + if err != nil { + return nil, err + } + + for _, a := range args { + mib = append(mib, _C_int(a)) + } + + return mib, nil +} + +func Sysctl(name string) (string, error) { + return SysctlArgs(name) +} + +func SysctlArgs(name string, args ...int) (string, error) { + buf, err := SysctlRaw(name, args...) + if err != nil { + return "", err + } + n := len(buf) + + // Throw away terminating NUL. + if n > 0 && buf[n-1] == '\x00' { + n-- + } + return string(buf[0:n]), nil +} + +func SysctlUint32(name string) (uint32, error) { + return SysctlUint32Args(name) +} + +func SysctlUint32Args(name string, args ...int) (uint32, error) { + mib, err := sysctlmib(name, args...) + if err != nil { + return 0, err + } + + n := uintptr(4) + buf := make([]byte, 4) + if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil { + return 0, err + } + if n != 4 { + return 0, EIO + } + return *(*uint32)(unsafe.Pointer(&buf[0])), nil +} + +func SysctlUint64(name string, args ...int) (uint64, error) { + mib, err := sysctlmib(name, args...) + if err != nil { + return 0, err + } + + n := uintptr(8) + buf := make([]byte, 8) + if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil { + return 0, err + } + if n != 8 { + return 0, EIO + } + return *(*uint64)(unsafe.Pointer(&buf[0])), nil +} + +func SysctlRaw(name string, args ...int) ([]byte, error) { + mib, err := sysctlmib(name, args...) + if err != nil { + return nil, err + } + + // Find size. + n := uintptr(0) + if err := sysctl(mib, nil, &n, nil, 0); err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + + // Read into buffer of that size. + buf := make([]byte, n) + if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil { + return nil, err + } + + // The actual call may return less than the original reported required + // size so ensure we deal with that. + return buf[:n], nil +} + +func SysctlClockinfo(name string) (*Clockinfo, error) { + mib, err := sysctlmib(name) + if err != nil { + return nil, err + } + + n := uintptr(SizeofClockinfo) + var ci Clockinfo + if err := sysctl(mib, (*byte)(unsafe.Pointer(&ci)), &n, nil, 0); err != nil { + return nil, err + } + if n != SizeofClockinfo { + return nil, EIO + } + return &ci, nil +} + +func SysctlTimeval(name string) (*Timeval, error) { + mib, err := sysctlmib(name) + if err != nil { + return nil, err + } + + var tv Timeval + n := uintptr(unsafe.Sizeof(tv)) + if err := sysctl(mib, (*byte)(unsafe.Pointer(&tv)), &n, nil, 0); err != nil { + return nil, err + } + if n != unsafe.Sizeof(tv) { + return nil, EIO + } + return &tv, nil +} + +//sys utimes(path string, timeval *[2]Timeval) (err error) + +func Utimes(path string, tv []Timeval) error { + if tv == nil { + return utimes(path, nil) + } + if len(tv) != 2 { + return EINVAL + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func UtimesNano(path string, ts []Timespec) error { + if ts == nil { + err := utimensat(AT_FDCWD, path, nil, 0) + if err != ENOSYS { + return err + } + return utimes(path, nil) + } + if len(ts) != 2 { + return EINVAL + } + err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) + if err != ENOSYS { + return err + } + // Not as efficient as it could be because Timespec and + // Timeval have different types in the different OSes + tv := [2]Timeval{ + NsecToTimeval(TimespecToNsec(ts[0])), + NsecToTimeval(TimespecToNsec(ts[1])), + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { + if ts == nil { + return utimensat(dirfd, path, nil, flags) + } + if len(ts) != 2 { + return EINVAL + } + return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) +} + +//sys futimes(fd int, timeval *[2]Timeval) (err error) + +func Futimes(fd int, tv []Timeval) error { + if tv == nil { + return futimes(fd, nil) + } + if len(tv) != 2 { + return EINVAL + } + return futimes(fd, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} + +// TODO: wrap +// Acct(name nil-string) (err error) +// Gethostuuid(uuid *byte, timeout *Timespec) (err error) +// Ptrace(req int, pid int, addr uintptr, data int) (ret uintptr, err error) + +var mapper = &mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, +} + +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (err error) { + return mapper.Munmap(b) +} + +//sys Madvise(b []byte, behav int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Msync(b []byte, flags int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.1_12.go b/vendor/golang.org/x/sys/unix/syscall_darwin.1_12.go new file mode 100644 index 0000000..b009860 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.1_12.go @@ -0,0 +1,32 @@ +// 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 darwin && go1.12 && !go1.13 +// +build darwin,go1.12,!go1.13 + +package unix + +import ( + "unsafe" +) + +const _SYS_GETDIRENTRIES64 = 344 + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + // To implement this using libSystem we'd need syscall_syscallPtr for + // fdopendir. However, syscallPtr was only added in Go 1.13, so we fall + // back to raw syscalls for this func on Go 1.12. + var p unsafe.Pointer + if len(buf) > 0 { + p = unsafe.Pointer(&buf[0]) + } else { + p = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(_SYS_GETDIRENTRIES64, uintptr(fd), uintptr(p), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + return n, errnoErr(e1) + } + return n, nil +} diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go b/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go new file mode 100644 index 0000000..1596426 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go @@ -0,0 +1,108 @@ +// 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 darwin && go1.13 +// +build darwin,go1.13 + +package unix + +import ( + "unsafe" + + "golang.org/x/sys/internal/unsafeheader" +) + +//sys closedir(dir uintptr) (err error) +//sys readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) + +func fdopendir(fd int) (dir uintptr, err error) { + r0, _, e1 := syscall_syscallPtr(libc_fdopendir_trampoline_addr, uintptr(fd), 0, 0) + dir = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fdopendir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fdopendir fdopendir "/usr/lib/libSystem.B.dylib" + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + // Simulate Getdirentries using fdopendir/readdir_r/closedir. + // We store the number of entries to skip in the seek + // offset of fd. See issue #31368. + // It's not the full required semantics, but should handle the case + // of calling Getdirentries or ReadDirent repeatedly. + // It won't handle assigning the results of lseek to *basep, or handle + // the directory being edited underfoot. + skip, err := Seek(fd, 0, 1 /* SEEK_CUR */) + if err != nil { + return 0, err + } + + // We need to duplicate the incoming file descriptor + // because the caller expects to retain control of it, but + // fdopendir expects to take control of its argument. + // Just Dup'ing the file descriptor is not enough, as the + // result shares underlying state. Use Openat to make a really + // new file descriptor referring to the same directory. + fd2, err := Openat(fd, ".", O_RDONLY, 0) + if err != nil { + return 0, err + } + d, err := fdopendir(fd2) + if err != nil { + Close(fd2) + return 0, err + } + defer closedir(d) + + var cnt int64 + for { + var entry Dirent + var entryp *Dirent + e := readdir_r(d, &entry, &entryp) + if e != 0 { + return n, errnoErr(e) + } + if entryp == nil { + break + } + if skip > 0 { + skip-- + cnt++ + continue + } + + reclen := int(entry.Reclen) + if reclen > len(buf) { + // Not enough room. Return for now. + // The counter will let us know where we should start up again. + // Note: this strategy for suspending in the middle and + // restarting is O(n^2) in the length of the directory. Oh well. + break + } + + // Copy entry into return buffer. + var s []byte + hdr := (*unsafeheader.Slice)(unsafe.Pointer(&s)) + hdr.Data = unsafe.Pointer(&entry) + hdr.Cap = reclen + hdr.Len = reclen + copy(buf, s) + + buf = buf[reclen:] + n += reclen + cnt++ + } + // Set the seek offset of the input fd to record + // how many files we've already returned. + _, err = Seek(fd, cnt, 0 /* SEEK_SET */) + if err != nil { + return n, err + } + + return n, nil +} diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go new file mode 100644 index 0000000..09a25c6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -0,0 +1,733 @@ +// Copyright 2009,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. + +// Darwin system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import ( + "fmt" + "runtime" + "syscall" + "unsafe" +) + +// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 + raw RawSockaddrDatalink +} + +// SockaddrCtl implements the Sockaddr interface for AF_SYSTEM type sockets. +type SockaddrCtl struct { + ID uint32 + Unit uint32 + raw RawSockaddrCtl +} + +func (sa *SockaddrCtl) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Sc_len = SizeofSockaddrCtl + sa.raw.Sc_family = AF_SYSTEM + sa.raw.Ss_sysaddr = AF_SYS_CONTROL + sa.raw.Sc_id = sa.ID + sa.raw.Sc_unit = sa.Unit + return unsafe.Pointer(&sa.raw), SizeofSockaddrCtl, nil +} + +// SockaddrVM implements the Sockaddr interface for AF_VSOCK type sockets. +// SockaddrVM provides access to Darwin VM sockets: a mechanism that enables +// bidirectional communication between a hypervisor and its guest virtual +// machines. +type SockaddrVM struct { + // CID and Port specify a context ID and port address for a VM socket. + // Guests have a unique CID, and hosts may have a well-known CID of: + // - VMADDR_CID_HYPERVISOR: refers to the hypervisor process. + // - VMADDR_CID_LOCAL: refers to local communication (loopback). + // - VMADDR_CID_HOST: refers to other processes on the host. + CID uint32 + Port uint32 + raw RawSockaddrVM +} + +func (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Len = SizeofSockaddrVM + sa.raw.Family = AF_VSOCK + sa.raw.Port = sa.Port + sa.raw.Cid = sa.CID + + return unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil +} + +func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { + switch rsa.Addr.Family { + case AF_SYSTEM: + pp := (*RawSockaddrCtl)(unsafe.Pointer(rsa)) + if pp.Ss_sysaddr == AF_SYS_CONTROL { + sa := new(SockaddrCtl) + sa.ID = pp.Sc_id + sa.Unit = pp.Sc_unit + return sa, nil + } + case AF_VSOCK: + pp := (*RawSockaddrVM)(unsafe.Pointer(rsa)) + sa := &SockaddrVM{ + CID: pp.Cid, + Port: pp.Port, + } + return sa, nil + } + return nil, EAFNOSUPPORT +} + +// Some external packages rely on SYS___SYSCTL being defined to implement their +// own sysctl wrappers. Provide it here, even though direct syscalls are no +// longer supported on darwin. +const SYS___SYSCTL = SYS_SYSCTL + +// Translate "kern.hostname" to []_C_int{0,1,2,3}. +func nametomib(name string) (mib []_C_int, err error) { + const siz = unsafe.Sizeof(mib[0]) + + // NOTE(rsc): It seems strange to set the buffer to have + // size CTL_MAXNAME+2 but use only CTL_MAXNAME + // as the size. I don't know why the +2 is here, but the + // kernel uses +2 for its own implementation of this function. + // I am scared that if we don't include the +2 here, the kernel + // will silently write 2 words farther than we specify + // and we'll get memory corruption. + var buf [CTL_MAXNAME + 2]_C_int + n := uintptr(CTL_MAXNAME) * siz + + p := (*byte)(unsafe.Pointer(&buf[0])) + bytes, err := ByteSliceFromString(name) + if err != nil { + return nil, err + } + + // Magic sysctl: "setting" 0.3 to a string name + // lets you read back the array of integers form. + if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil { + return nil, err + } + return buf[0 : n/siz], nil +} + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) +} + +func direntReclen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) +} + +func direntNamlen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) +} + +func PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) } +func PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) } + +//sysnb pipe(p *[2]int32) (err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var x [2]int32 + err = pipe(&x) + if err == nil { + p[0] = int(x[0]) + p[1] = int(x[1]) + } + return +} + +func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { + var _p0 unsafe.Pointer + var bufsize uintptr + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) + } + return getfsstat(_p0, bufsize, flags) +} + +func xattrPointer(dest []byte) *byte { + // It's only when dest is set to NULL that the OS X implementations of + // getxattr() and listxattr() return the current sizes of the named attributes. + // An empty byte array is not sufficient. To maintain the same behaviour as the + // linux implementation, we wrap around the system calls and pass in NULL when + // dest is empty. + var destp *byte + if len(dest) > 0 { + destp = &dest[0] + } + return destp +} + +//sys getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + return getxattr(path, attr, xattrPointer(dest), len(dest), 0, 0) +} + +func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) { + return getxattr(link, attr, xattrPointer(dest), len(dest), 0, XATTR_NOFOLLOW) +} + +//sys fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) + +func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { + return fgetxattr(fd, attr, xattrPointer(dest), len(dest), 0, 0) +} + +//sys setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + // The parameters for the OS X implementation vary slightly compared to the + // linux system call, specifically the position parameter: + // + // linux: + // int setxattr( + // const char *path, + // const char *name, + // const void *value, + // size_t size, + // int flags + // ); + // + // darwin: + // int setxattr( + // const char *path, + // const char *name, + // void *value, + // size_t size, + // u_int32_t position, + // int options + // ); + // + // position specifies the offset within the extended attribute. In the + // current implementation, only the resource fork extended attribute makes + // use of this argument. For all others, position is reserved. We simply + // default to setting it to zero. + return setxattr(path, attr, xattrPointer(data), len(data), 0, flags) +} + +func Lsetxattr(link string, attr string, data []byte, flags int) (err error) { + return setxattr(link, attr, xattrPointer(data), len(data), 0, flags|XATTR_NOFOLLOW) +} + +//sys fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) + +func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) { + return fsetxattr(fd, attr, xattrPointer(data), len(data), 0, 0) +} + +//sys removexattr(path string, attr string, options int) (err error) + +func Removexattr(path string, attr string) (err error) { + // We wrap around and explicitly zero out the options provided to the OS X + // implementation of removexattr, we do so for interoperability with the + // linux variant. + return removexattr(path, attr, 0) +} + +func Lremovexattr(link string, attr string) (err error) { + return removexattr(link, attr, XATTR_NOFOLLOW) +} + +//sys fremovexattr(fd int, attr string, options int) (err error) + +func Fremovexattr(fd int, attr string) (err error) { + return fremovexattr(fd, attr, 0) +} + +//sys listxattr(path string, dest *byte, size int, options int) (sz int, err error) + +func Listxattr(path string, dest []byte) (sz int, err error) { + return listxattr(path, xattrPointer(dest), len(dest), 0) +} + +func Llistxattr(link string, dest []byte) (sz int, err error) { + return listxattr(link, xattrPointer(dest), len(dest), XATTR_NOFOLLOW) +} + +//sys flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) + +func Flistxattr(fd int, dest []byte) (sz int, err error) { + return flistxattr(fd, xattrPointer(dest), len(dest), 0) +} + +//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) + +/* + * Wrapped + */ + +//sys fcntl(fd int, cmd int, arg int) (val int, err error) + +//sys kill(pid int, signum int, posix int) (err error) + +func Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(signum), 1) } + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +func IoctlCtlInfo(fd int, ctlInfo *CtlInfo) error { + err := ioctl(fd, CTLIOCGINFO, uintptr(unsafe.Pointer(ctlInfo))) + runtime.KeepAlive(ctlInfo) + return err +} + +// IfreqMTU is struct ifreq used to get or set a network device's MTU. +type IfreqMTU struct { + Name [IFNAMSIZ]byte + MTU int32 +} + +// IoctlGetIfreqMTU performs the SIOCGIFMTU ioctl operation on fd to get the MTU +// of the network device specified by ifname. +func IoctlGetIfreqMTU(fd int, ifname string) (*IfreqMTU, error) { + var ifreq IfreqMTU + copy(ifreq.Name[:], ifname) + err := ioctl(fd, SIOCGIFMTU, uintptr(unsafe.Pointer(&ifreq))) + return &ifreq, err +} + +// IoctlSetIfreqMTU performs the SIOCSIFMTU ioctl operation on fd to set the MTU +// of the network device specified by ifreq.Name. +func IoctlSetIfreqMTU(fd int, ifreq *IfreqMTU) error { + err := ioctl(fd, SIOCSIFMTU, uintptr(unsafe.Pointer(ifreq))) + runtime.KeepAlive(ifreq) + return err +} + +//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS_SYSCTL + +func Uname(uname *Utsname) error { + mib := []_C_int{CTL_KERN, KERN_OSTYPE} + n := unsafe.Sizeof(uname.Sysname) + if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_HOSTNAME} + n = unsafe.Sizeof(uname.Nodename) + if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_OSRELEASE} + n = unsafe.Sizeof(uname.Release) + if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_VERSION} + n = unsafe.Sizeof(uname.Version) + if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil { + return err + } + + // The version might have newlines or tabs in it, convert them to + // spaces. + for i, b := range uname.Version { + if b == '\n' || b == '\t' { + if i == len(uname.Version)-1 { + uname.Version[i] = 0 + } else { + uname.Version[i] = ' ' + } + } + } + + mib = []_C_int{CTL_HW, HW_MACHINE} + n = unsafe.Sizeof(uname.Machine) + if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil { + return err + } + + return nil +} + +func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + var length = int64(count) + err = sendfile(infd, outfd, *offset, &length, nil, 0) + written = int(length) + return +} + +func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) { + var value IPMreqn + vallen := _Socklen(SizeofIPMreqn) + errno := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, errno +} + +func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) +} + +// GetsockoptXucred is a getsockopt wrapper that returns an Xucred struct. +// The usual level and opt are SOL_LOCAL and LOCAL_PEERCRED, respectively. +func GetsockoptXucred(fd, level, opt int) (*Xucred, error) { + x := new(Xucred) + vallen := _Socklen(SizeofXucred) + err := getsockopt(fd, level, opt, unsafe.Pointer(x), &vallen) + return x, err +} + +func SysctlKinfoProc(name string, args ...int) (*KinfoProc, error) { + mib, err := sysctlmib(name, args...) + if err != nil { + return nil, err + } + + var kinfo KinfoProc + n := uintptr(SizeofKinfoProc) + if err := sysctl(mib, (*byte)(unsafe.Pointer(&kinfo)), &n, nil, 0); err != nil { + return nil, err + } + if n != SizeofKinfoProc { + return nil, EIO + } + return &kinfo, nil +} + +func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { + mib, err := sysctlmib(name, args...) + if err != nil { + return nil, err + } + + // Find size. + n := uintptr(0) + if err := sysctl(mib, nil, &n, nil, 0); err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + if n%SizeofKinfoProc != 0 { + return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc) + } + + // Read into buffer of that size. + buf := make([]KinfoProc, n/SizeofKinfoProc) + if err := sysctl(mib, (*byte)(unsafe.Pointer(&buf[0])), &n, nil, 0); err != nil { + return nil, err + } + if n%SizeofKinfoProc != 0 { + return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc) + } + + // The actual call may return less than the original reported required + // size so ensure we deal with that. + return buf[:n/SizeofKinfoProc], nil +} + +//sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) + +//sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error) +//sys shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) +//sys shmdt(addr uintptr) (err error) +//sys shmget(key int, size int, flag int) (id int, err error) + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys ClockGettime(clockid int32, time *Timespec) (err error) +//sys Close(fd int) (err error) +//sys Clonefile(src string, dst string, flags int) (err error) +//sys Clonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Exchangedata(path1 string, path2 string, options int) (err error) +//sys Exit(code int) +//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) +//sys Fclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sys Getcwd(buf []byte) (n int, err error) +//sys Getdtablesize() (size int) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettimeofday(tp *Timeval) (err error) +//sysnb Getuid() (uid int) +//sysnb Issetugid() (tainted bool) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) +//sys Listen(s int, backlog int) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys pread(fd int, p []byte, offset int64) (n int, err error) +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Renameat(fromfd int, from string, tofd int, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sys Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Setlogin(name string) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sys Setprivexec(flag int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys Symlink(path string, link string) (err error) +//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Undelete(path string) (err error) +//sys Unlink(path string) (err error) +//sys Unlinkat(dirfd int, path string, flags int) (err error) +//sys Unmount(path string, flags int) (err error) +//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 readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE + +/* + * Unimplemented + */ +// Profil +// Sigaction +// Sigprocmask +// Getlogin +// Sigpending +// Sigaltstack +// Ioctl +// Reboot +// Execve +// Vfork +// Sbrk +// Sstk +// Ovadvise +// Mincore +// Setitimer +// Swapon +// Select +// Sigsuspend +// Readv +// Writev +// Nfssvc +// Getfh +// Quotactl +// Mount +// Csops +// Waitid +// Add_profil +// Kdebug_trace +// Sigreturn +// Atsocket +// Kqueue_from_portset_np +// Kqueue_portset +// Getattrlist +// Setattrlist +// Getdirentriesattr +// Searchfs +// Delete +// Copyfile +// Watchevent +// Waitevent +// Modwatch +// Fsctl +// Initgroups +// Posix_spawn +// Nfsclnt +// Fhopen +// Minherit +// Semsys +// Msgsys +// Shmsys +// Semctl +// Semget +// Semop +// Msgctl +// Msgget +// Msgsnd +// Msgrcv +// Shm_open +// Shm_unlink +// Sem_open +// Sem_close +// Sem_unlink +// Sem_wait +// Sem_trywait +// Sem_post +// Sem_getvalue +// Sem_init +// Sem_destroy +// Open_extended +// Umask_extended +// Stat_extended +// Lstat_extended +// Fstat_extended +// Chmod_extended +// Fchmod_extended +// Access_extended +// Settid +// Gettid +// Setsgroups +// Getsgroups +// Setwgroups +// Getwgroups +// Mkfifo_extended +// Mkdir_extended +// Identitysvc +// Shared_region_check_np +// Shared_region_map_np +// __pthread_mutex_destroy +// __pthread_mutex_init +// __pthread_mutex_lock +// __pthread_mutex_trylock +// __pthread_mutex_unlock +// __pthread_cond_init +// __pthread_cond_destroy +// __pthread_cond_broadcast +// __pthread_cond_signal +// Setsid_with_pid +// __pthread_cond_timedwait +// Aio_fsync +// Aio_return +// Aio_suspend +// Aio_cancel +// Aio_error +// Aio_read +// Aio_write +// Lio_listio +// __pthread_cond_wait +// Iopolicysys +// __pthread_kill +// __pthread_sigmask +// __sigwait +// __disable_threadsignal +// __pthread_markcancel +// __pthread_canceled +// __semwait_signal +// Proc_info +// sendfile +// Stat64_extended +// Lstat64_extended +// Fstat64_extended +// __pthread_chdir +// __pthread_fchdir +// Audit +// Auditon +// Getauid +// Setauid +// Getaudit +// Setaudit +// Getaudit_addr +// Setaudit_addr +// Auditctl +// Bsdthread_create +// Bsdthread_terminate +// Stack_snapshot +// Bsdthread_register +// Workq_open +// Workq_ops +// __mac_execve +// __mac_syscall +// __mac_get_file +// __mac_set_file +// __mac_get_link +// __mac_set_link +// __mac_get_proc +// __mac_set_proc +// __mac_get_fd +// __mac_set_fd +// __mac_get_pid +// __mac_get_lcid +// __mac_get_lctx +// __mac_set_lctx +// Setlcid +// Read_nocancel +// Write_nocancel +// Open_nocancel +// Close_nocancel +// Wait4_nocancel +// Recvmsg_nocancel +// Sendmsg_nocancel +// Recvfrom_nocancel +// Accept_nocancel +// Fcntl_nocancel +// Select_nocancel +// Fsync_nocancel +// Connect_nocancel +// Sigsuspend_nocancel +// Readv_nocancel +// Writev_nocancel +// Sendto_nocancel +// Pread_nocancel +// Pwrite_nocancel +// Waitid_nocancel +// Poll_nocancel +// Msgsnd_nocancel +// Msgrcv_nocancel +// Sem_wait_nocancel +// Aio_suspend_nocancel +// __sigwait_nocancel +// __semwait_signal_nocancel +// __mac_mount +// __mac_get_mount +// __mac_getfsstat diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go new file mode 100644 index 0000000..b37310c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go @@ -0,0 +1,51 @@ +// 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 amd64 && darwin +// +build amd64,darwin + +package unix + +import "syscall" + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = int32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 +//sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64 +//sys getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT64 +//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 +//sys ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) = SYS_ptrace +//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 +//sys Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64 diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go new file mode 100644 index 0000000..d51ec99 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go @@ -0,0 +1,51 @@ +// 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. + +//go:build arm64 && darwin +// +build arm64,darwin + +package unix + +import "syscall" + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = int32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic + +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) +//sys Fstatfs(fd int, stat *Statfs_t) (err error) +//sys getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT +//sys Lstat(path string, stat *Stat_t) (err error) +//sys ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) = SYS_ptrace +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, stat *Statfs_t) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go b/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go new file mode 100644 index 0000000..53c9664 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.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 darwin && go1.12 +// +build darwin,go1.12 + +package unix + +import _ "unsafe" + +// Implemented in the runtime package (runtime/sys_darwin.go) +func syscall_syscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) +func syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) +func syscall_syscall6X(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) +func syscall_syscall9(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) // 32-bit only +func syscall_rawSyscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) +func syscall_rawSyscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) +func syscall_syscallPtr(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) + +//go:linkname syscall_syscall syscall.syscall +//go:linkname syscall_syscall6 syscall.syscall6 +//go:linkname syscall_syscall6X syscall.syscall6X +//go:linkname syscall_syscall9 syscall.syscall9 +//go:linkname syscall_rawSyscall syscall.rawSyscall +//go:linkname syscall_rawSyscall6 syscall.rawSyscall6 +//go:linkname syscall_syscallPtr syscall.syscallPtr diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go new file mode 100644 index 0000000..c61e274 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go @@ -0,0 +1,542 @@ +// 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. + +// DragonFly BSD system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import ( + "sync" + "unsafe" +) + +// See version list in https://github.com/DragonFlyBSD/DragonFlyBSD/blob/master/sys/sys/param.h +var ( + osreldateOnce sync.Once + osreldate uint32 +) + +// First __DragonFly_version after September 2019 ABI changes +// http://lists.dragonflybsd.org/pipermail/users/2019-September/358280.html +const _dragonflyABIChangeVersion = 500705 + +func supportsABI(ver uint32) bool { + osreldateOnce.Do(func() { osreldate, _ = SysctlUint32("kern.osreldate") }) + return osreldate >= ver +} + +// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 + Rcf uint16 + Route [16]uint16 + raw RawSockaddrDatalink +} + +func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { + return nil, EAFNOSUPPORT +} + +// Translate "kern.hostname" to []_C_int{0,1,2,3}. +func nametomib(name string) (mib []_C_int, err error) { + const siz = unsafe.Sizeof(mib[0]) + + // NOTE(rsc): It seems strange to set the buffer to have + // size CTL_MAXNAME+2 but use only CTL_MAXNAME + // as the size. I don't know why the +2 is here, but the + // kernel uses +2 for its own implementation of this function. + // I am scared that if we don't include the +2 here, the kernel + // will silently write 2 words farther than we specify + // and we'll get memory corruption. + var buf [CTL_MAXNAME + 2]_C_int + n := uintptr(CTL_MAXNAME) * siz + + p := (*byte)(unsafe.Pointer(&buf[0])) + bytes, err := ByteSliceFromString(name) + if err != nil { + return nil, err + } + + // Magic sysctl: "setting" 0.3 to a string name + // lets you read back the array of integers form. + if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil { + return nil, err + } + return buf[0 : n/siz], nil +} + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) +} + +func direntReclen(buf []byte) (uint64, bool) { + namlen, ok := direntNamlen(buf) + if !ok { + return 0, false + } + return (16 + namlen + 1 + 7) &^ 7, true +} + +func direntNamlen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) +} + +//sysnb pipe() (r int, w int, err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + r, w, err := pipe() + if err == nil { + p[0], p[1] = r, w + } + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (r int, w int, err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + // pipe2 on dragonfly takes an fds array as an argument, but still + // returns the file descriptors. + r, w, err := pipe2(&pp, flags) + if err == nil { + p[0], p[1] = r, w + } + return err +} + +//sys extpread(fd int, p []byte, flags int, offset int64) (n int, err error) +func pread(fd int, p []byte, offset int64) (n int, err error) { + return extpread(fd, p, 0, offset) +} + +//sys extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + return extpwrite(fd, p, 0, offset) +} + +func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept4(fd, &rsa, &len, flags) + if err != nil { + return + } + if len > SizeofSockaddrAny { + panic("RawSockaddrAny too small") + } + sa, err = anyToSockaddr(fd, &rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +//sys Getcwd(buf []byte) (n int, err error) = SYS___GETCWD + +func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { + var _p0 unsafe.Pointer + var bufsize uintptr + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) + } + r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL + +func sysctlUname(mib []_C_int, old *byte, oldlen *uintptr) error { + err := sysctl(mib, old, oldlen, nil, 0) + if err != nil { + // Utsname members on Dragonfly are only 32 bytes and + // the syscall returns ENOMEM in case the actual value + // is longer. + if err == ENOMEM { + err = nil + } + } + return err +} + +func Uname(uname *Utsname) error { + mib := []_C_int{CTL_KERN, KERN_OSTYPE} + n := unsafe.Sizeof(uname.Sysname) + if err := sysctlUname(mib, &uname.Sysname[0], &n); err != nil { + return err + } + uname.Sysname[unsafe.Sizeof(uname.Sysname)-1] = 0 + + mib = []_C_int{CTL_KERN, KERN_HOSTNAME} + n = unsafe.Sizeof(uname.Nodename) + if err := sysctlUname(mib, &uname.Nodename[0], &n); err != nil { + return err + } + uname.Nodename[unsafe.Sizeof(uname.Nodename)-1] = 0 + + mib = []_C_int{CTL_KERN, KERN_OSRELEASE} + n = unsafe.Sizeof(uname.Release) + if err := sysctlUname(mib, &uname.Release[0], &n); err != nil { + return err + } + uname.Release[unsafe.Sizeof(uname.Release)-1] = 0 + + mib = []_C_int{CTL_KERN, KERN_VERSION} + n = unsafe.Sizeof(uname.Version) + if err := sysctlUname(mib, &uname.Version[0], &n); err != nil { + return err + } + + // The version might have newlines or tabs in it, convert them to + // spaces. + for i, b := range uname.Version { + if b == '\n' || b == '\t' { + if i == len(uname.Version)-1 { + uname.Version[i] = 0 + } else { + uname.Version[i] = ' ' + } + } + } + + mib = []_C_int{CTL_HW, HW_MACHINE} + n = unsafe.Sizeof(uname.Machine) + if err := sysctlUname(mib, &uname.Machine[0], &n); err != nil { + return err + } + uname.Machine[unsafe.Sizeof(uname.Machine)-1] = 0 + + return nil +} + +func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + return sendfile(outfd, infd, offset, count) +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Exit(code int) +//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) +//sys Fstatfs(fd int, stat *Statfs_t) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sys Getdents(fd int, buf []byte) (n int, err error) +//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) +//sys Getdtablesize() (size int) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Issetugid() (tainted bool) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) +//sys Listen(s int, backlog int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Mknodat(fd int, path string, mode uint32, dev int) (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Renameat(fromfd int, from string, tofd int, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Setlogin(name string) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, stat *Statfs_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Undelete(path string) (err error) +//sys Unlink(path string) (err error) +//sys Unlinkat(dirfd int, path string, flags int) (err error) +//sys Unmount(path string, flags int) (err error) +//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 readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE +//sys accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) +//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) + +/* + * Unimplemented + * TODO(jsing): Update this list for DragonFly. + */ +// Profil +// Sigaction +// Sigprocmask +// Getlogin +// Sigpending +// Sigaltstack +// Reboot +// Execve +// Vfork +// Sbrk +// Sstk +// Ovadvise +// Mincore +// Setitimer +// Swapon +// Select +// Sigsuspend +// Readv +// Writev +// Nfssvc +// Getfh +// Quotactl +// Mount +// Csops +// Waitid +// Add_profil +// Kdebug_trace +// Sigreturn +// Atsocket +// Kqueue_from_portset_np +// Kqueue_portset +// Getattrlist +// Setattrlist +// Getdirentriesattr +// Searchfs +// Delete +// Copyfile +// Watchevent +// Waitevent +// Modwatch +// Getxattr +// Fgetxattr +// Setxattr +// Fsetxattr +// Removexattr +// Fremovexattr +// Listxattr +// Flistxattr +// Fsctl +// Initgroups +// Posix_spawn +// Nfsclnt +// Fhopen +// Minherit +// Semsys +// Msgsys +// Shmsys +// Semctl +// Semget +// Semop +// Msgctl +// Msgget +// Msgsnd +// Msgrcv +// Shmat +// Shmctl +// Shmdt +// Shmget +// Shm_open +// Shm_unlink +// Sem_open +// Sem_close +// Sem_unlink +// Sem_wait +// Sem_trywait +// Sem_post +// Sem_getvalue +// Sem_init +// Sem_destroy +// Open_extended +// Umask_extended +// Stat_extended +// Lstat_extended +// Fstat_extended +// Chmod_extended +// Fchmod_extended +// Access_extended +// Settid +// Gettid +// Setsgroups +// Getsgroups +// Setwgroups +// Getwgroups +// Mkfifo_extended +// Mkdir_extended +// Identitysvc +// Shared_region_check_np +// Shared_region_map_np +// __pthread_mutex_destroy +// __pthread_mutex_init +// __pthread_mutex_lock +// __pthread_mutex_trylock +// __pthread_mutex_unlock +// __pthread_cond_init +// __pthread_cond_destroy +// __pthread_cond_broadcast +// __pthread_cond_signal +// Setsid_with_pid +// __pthread_cond_timedwait +// Aio_fsync +// Aio_return +// Aio_suspend +// Aio_cancel +// Aio_error +// Aio_read +// Aio_write +// Lio_listio +// __pthread_cond_wait +// Iopolicysys +// __pthread_kill +// __pthread_sigmask +// __sigwait +// __disable_threadsignal +// __pthread_markcancel +// __pthread_canceled +// __semwait_signal +// Proc_info +// Stat64_extended +// Lstat64_extended +// Fstat64_extended +// __pthread_chdir +// __pthread_fchdir +// Audit +// Auditon +// Getauid +// Setauid +// Getaudit +// Setaudit +// Getaudit_addr +// Setaudit_addr +// Auditctl +// Bsdthread_create +// Bsdthread_terminate +// Stack_snapshot +// Bsdthread_register +// Workq_open +// Workq_ops +// __mac_execve +// __mac_syscall +// __mac_get_file +// __mac_set_file +// __mac_get_link +// __mac_set_link +// __mac_get_proc +// __mac_set_proc +// __mac_get_fd +// __mac_set_fd +// __mac_get_pid +// __mac_get_lcid +// __mac_get_lctx +// __mac_set_lctx +// Setlcid +// Read_nocancel +// Write_nocancel +// Open_nocancel +// Close_nocancel +// Wait4_nocancel +// Recvmsg_nocancel +// Sendmsg_nocancel +// Recvfrom_nocancel +// Accept_nocancel +// Fcntl_nocancel +// Select_nocancel +// Fsync_nocancel +// Connect_nocancel +// Sigsuspend_nocancel +// Readv_nocancel +// Writev_nocancel +// Sendto_nocancel +// Pread_nocancel +// Pwrite_nocancel +// Waitid_nocancel +// Msgsnd_nocancel +// Msgrcv_nocancel +// Sem_wait_nocancel +// Aio_suspend_nocancel +// __sigwait_nocancel +// __semwait_signal_nocancel +// __mac_mount +// __mac_get_mount +// __mac_getfsstat diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go new file mode 100644 index 0000000..4e2d321 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go @@ -0,0 +1,57 @@ +// 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 amd64 && dragonfly +// +build amd64,dragonfly + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = int32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var writtenOut uint64 = 0 + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0) + + written = int(writtenOut) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd.go b/vendor/golang.org/x/sys/unix/syscall_freebsd.go new file mode 100644 index 0000000..6f6c510 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd.go @@ -0,0 +1,869 @@ +// Copyright 2009,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. + +// FreeBSD system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import ( + "sync" + "unsafe" +) + +const ( + SYS_FSTAT_FREEBSD12 = 551 // { int fstat(int fd, _Out_ struct stat *sb); } + SYS_FSTATAT_FREEBSD12 = 552 // { int fstatat(int fd, _In_z_ char *path, \ + SYS_GETDIRENTRIES_FREEBSD12 = 554 // { ssize_t getdirentries(int fd, \ + SYS_STATFS_FREEBSD12 = 555 // { int statfs(_In_z_ char *path, \ + SYS_FSTATFS_FREEBSD12 = 556 // { int fstatfs(int fd, \ + SYS_GETFSSTAT_FREEBSD12 = 557 // { int getfsstat( \ + SYS_MKNODAT_FREEBSD12 = 559 // { int mknodat(int fd, _In_z_ char *path, \ +) + +// See https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/versions.html. +var ( + osreldateOnce sync.Once + osreldate uint32 +) + +// INO64_FIRST from /usr/src/lib/libc/sys/compat-ino64.h +const _ino64First = 1200031 + +func supportsABI(ver uint32) bool { + osreldateOnce.Do(func() { osreldate, _ = SysctlUint32("kern.osreldate") }) + return osreldate >= ver +} + +// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [46]int8 + raw RawSockaddrDatalink +} + +func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { + return nil, EAFNOSUPPORT +} + +// Translate "kern.hostname" to []_C_int{0,1,2,3}. +func nametomib(name string) (mib []_C_int, err error) { + const siz = unsafe.Sizeof(mib[0]) + + // NOTE(rsc): It seems strange to set the buffer to have + // size CTL_MAXNAME+2 but use only CTL_MAXNAME + // as the size. I don't know why the +2 is here, but the + // kernel uses +2 for its own implementation of this function. + // I am scared that if we don't include the +2 here, the kernel + // will silently write 2 words farther than we specify + // and we'll get memory corruption. + var buf [CTL_MAXNAME + 2]_C_int + n := uintptr(CTL_MAXNAME) * siz + + p := (*byte)(unsafe.Pointer(&buf[0])) + bytes, err := ByteSliceFromString(name) + if err != nil { + return nil, err + } + + // Magic sysctl: "setting" 0.3 to a string name + // lets you read back the array of integers form. + if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil { + return nil, err + } + return buf[0 : n/siz], nil +} + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) +} + +func direntReclen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) +} + +func direntNamlen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) +} + +func Pipe(p []int) (err error) { + return Pipe2(p, 0) +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) error { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err := pipe2(&pp, flags) + if err == nil { + p[0] = int(pp[0]) + p[1] = int(pp[1]) + } + return err +} + +func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) { + var value IPMreqn + vallen := _Socklen(SizeofIPMreqn) + errno := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, errno +} + +func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) +} + +// GetsockoptXucred is a getsockopt wrapper that returns an Xucred struct. +// The usual level and opt are SOL_LOCAL and LOCAL_PEERCRED, respectively. +func GetsockoptXucred(fd, level, opt int) (*Xucred, error) { + x := new(Xucred) + vallen := _Socklen(SizeofXucred) + err := getsockopt(fd, level, opt, unsafe.Pointer(x), &vallen) + return x, err +} + +func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept4(fd, &rsa, &len, flags) + if err != nil { + return + } + if len > SizeofSockaddrAny { + panic("RawSockaddrAny too small") + } + sa, err = anyToSockaddr(fd, &rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +//sys Getcwd(buf []byte) (n int, err error) = SYS___GETCWD + +func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { + var ( + _p0 unsafe.Pointer + bufsize uintptr + oldBuf []statfs_freebsd11_t + needsConvert bool + ) + + if len(buf) > 0 { + if supportsABI(_ino64First) { + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) + } else { + n := len(buf) + oldBuf = make([]statfs_freebsd11_t, n) + _p0 = unsafe.Pointer(&oldBuf[0]) + bufsize = unsafe.Sizeof(statfs_freebsd11_t{}) * uintptr(n) + needsConvert = true + } + } + var sysno uintptr = SYS_GETFSSTAT + if supportsABI(_ino64First) { + sysno = SYS_GETFSSTAT_FREEBSD12 + } + r0, _, e1 := Syscall(sysno, uintptr(_p0), bufsize, uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = e1 + } + if e1 == 0 && needsConvert { + for i := range oldBuf { + buf[i].convertFrom(&oldBuf[i]) + } + } + return +} + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL + +func Uname(uname *Utsname) error { + mib := []_C_int{CTL_KERN, KERN_OSTYPE} + n := unsafe.Sizeof(uname.Sysname) + if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_HOSTNAME} + n = unsafe.Sizeof(uname.Nodename) + if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_OSRELEASE} + n = unsafe.Sizeof(uname.Release) + if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_VERSION} + n = unsafe.Sizeof(uname.Version) + if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil { + return err + } + + // The version might have newlines or tabs in it, convert them to + // spaces. + for i, b := range uname.Version { + if b == '\n' || b == '\t' { + if i == len(uname.Version)-1 { + uname.Version[i] = 0 + } else { + uname.Version[i] = ' ' + } + } + } + + mib = []_C_int{CTL_HW, HW_MACHINE} + n = unsafe.Sizeof(uname.Machine) + if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil { + return err + } + + return nil +} + +func Stat(path string, st *Stat_t) (err error) { + var oldStat stat_freebsd11_t + if supportsABI(_ino64First) { + return fstatat_freebsd12(AT_FDCWD, path, st, 0) + } + err = stat(path, &oldStat) + if err != nil { + return err + } + + st.convertFrom(&oldStat) + return nil +} + +func Lstat(path string, st *Stat_t) (err error) { + var oldStat stat_freebsd11_t + if supportsABI(_ino64First) { + return fstatat_freebsd12(AT_FDCWD, path, st, AT_SYMLINK_NOFOLLOW) + } + err = lstat(path, &oldStat) + if err != nil { + return err + } + + st.convertFrom(&oldStat) + return nil +} + +func Fstat(fd int, st *Stat_t) (err error) { + var oldStat stat_freebsd11_t + if supportsABI(_ino64First) { + return fstat_freebsd12(fd, st) + } + err = fstat(fd, &oldStat) + if err != nil { + return err + } + + st.convertFrom(&oldStat) + return nil +} + +func Fstatat(fd int, path string, st *Stat_t, flags int) (err error) { + var oldStat stat_freebsd11_t + if supportsABI(_ino64First) { + return fstatat_freebsd12(fd, path, st, flags) + } + err = fstatat(fd, path, &oldStat, flags) + if err != nil { + return err + } + + st.convertFrom(&oldStat) + return nil +} + +func Statfs(path string, st *Statfs_t) (err error) { + var oldStatfs statfs_freebsd11_t + if supportsABI(_ino64First) { + return statfs_freebsd12(path, st) + } + err = statfs(path, &oldStatfs) + if err != nil { + return err + } + + st.convertFrom(&oldStatfs) + return nil +} + +func Fstatfs(fd int, st *Statfs_t) (err error) { + var oldStatfs statfs_freebsd11_t + if supportsABI(_ino64First) { + return fstatfs_freebsd12(fd, st) + } + err = fstatfs(fd, &oldStatfs) + if err != nil { + return err + } + + st.convertFrom(&oldStatfs) + return nil +} + +func Getdents(fd int, buf []byte) (n int, err error) { + return Getdirentries(fd, buf, nil) +} + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + if supportsABI(_ino64First) { + if basep == nil || unsafe.Sizeof(*basep) == 8 { + return getdirentries_freebsd12(fd, buf, (*uint64)(unsafe.Pointer(basep))) + } + // The freebsd12 syscall needs a 64-bit base. On 32-bit machines + // we can't just use the basep passed in. See #32498. + var base uint64 = uint64(*basep) + n, err = getdirentries_freebsd12(fd, buf, &base) + *basep = uintptr(base) + if base>>32 != 0 { + // We can't stuff the base back into a uintptr, so any + // future calls would be suspect. Generate an error. + // EIO is allowed by getdirentries. + err = EIO + } + return + } + + // The old syscall entries are smaller than the new. Use 1/4 of the original + // buffer size rounded up to DIRBLKSIZ (see /usr/src/lib/libc/sys/getdirentries.c). + oldBufLen := roundup(len(buf)/4, _dirblksiz) + oldBuf := make([]byte, oldBufLen) + n, err = getdirentries(fd, oldBuf, basep) + if err == nil && n > 0 { + n = convertFromDirents11(buf, oldBuf[:n]) + } + return +} + +func Mknod(path string, mode uint32, dev uint64) (err error) { + var oldDev int + if supportsABI(_ino64First) { + return mknodat_freebsd12(AT_FDCWD, path, mode, dev) + } + oldDev = int(dev) + return mknod(path, mode, oldDev) +} + +func Mknodat(fd int, path string, mode uint32, dev uint64) (err error) { + var oldDev int + if supportsABI(_ino64First) { + return mknodat_freebsd12(fd, path, mode, dev) + } + oldDev = int(dev) + return mknodat(fd, path, mode, oldDev) +} + +// round x to the nearest multiple of y, larger or equal to x. +// +// from /usr/include/sys/param.h Macros for counting and rounding. +// #define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) +func roundup(x, y int) int { + return ((x + y - 1) / y) * y +} + +func (s *Stat_t) convertFrom(old *stat_freebsd11_t) { + *s = Stat_t{ + Dev: uint64(old.Dev), + Ino: uint64(old.Ino), + Nlink: uint64(old.Nlink), + Mode: old.Mode, + Uid: old.Uid, + Gid: old.Gid, + Rdev: uint64(old.Rdev), + Atim: old.Atim, + Mtim: old.Mtim, + Ctim: old.Ctim, + Btim: old.Btim, + Size: old.Size, + Blocks: old.Blocks, + Blksize: old.Blksize, + Flags: old.Flags, + Gen: uint64(old.Gen), + } +} + +func (s *Statfs_t) convertFrom(old *statfs_freebsd11_t) { + *s = Statfs_t{ + Version: _statfsVersion, + Type: old.Type, + Flags: old.Flags, + Bsize: old.Bsize, + Iosize: old.Iosize, + Blocks: old.Blocks, + Bfree: old.Bfree, + Bavail: old.Bavail, + Files: old.Files, + Ffree: old.Ffree, + Syncwrites: old.Syncwrites, + Asyncwrites: old.Asyncwrites, + Syncreads: old.Syncreads, + Asyncreads: old.Asyncreads, + // Spare + Namemax: old.Namemax, + Owner: old.Owner, + Fsid: old.Fsid, + // Charspare + // Fstypename + // Mntfromname + // Mntonname + } + + sl := old.Fstypename[:] + n := clen(*(*[]byte)(unsafe.Pointer(&sl))) + copy(s.Fstypename[:], old.Fstypename[:n]) + + sl = old.Mntfromname[:] + n = clen(*(*[]byte)(unsafe.Pointer(&sl))) + copy(s.Mntfromname[:], old.Mntfromname[:n]) + + sl = old.Mntonname[:] + n = clen(*(*[]byte)(unsafe.Pointer(&sl))) + copy(s.Mntonname[:], old.Mntonname[:n]) +} + +func convertFromDirents11(buf []byte, old []byte) int { + const ( + fixedSize = int(unsafe.Offsetof(Dirent{}.Name)) + oldFixedSize = int(unsafe.Offsetof(dirent_freebsd11{}.Name)) + ) + + dstPos := 0 + srcPos := 0 + for dstPos+fixedSize < len(buf) && srcPos+oldFixedSize < len(old) { + var dstDirent Dirent + var srcDirent dirent_freebsd11 + + // If multiple direntries are written, sometimes when we reach the final one, + // we may have cap of old less than size of dirent_freebsd11. + copy((*[unsafe.Sizeof(srcDirent)]byte)(unsafe.Pointer(&srcDirent))[:], old[srcPos:]) + + reclen := roundup(fixedSize+int(srcDirent.Namlen)+1, 8) + if dstPos+reclen > len(buf) { + break + } + + dstDirent.Fileno = uint64(srcDirent.Fileno) + dstDirent.Off = 0 + dstDirent.Reclen = uint16(reclen) + dstDirent.Type = srcDirent.Type + dstDirent.Pad0 = 0 + dstDirent.Namlen = uint16(srcDirent.Namlen) + dstDirent.Pad1 = 0 + + copy(dstDirent.Name[:], srcDirent.Name[:srcDirent.Namlen]) + copy(buf[dstPos:], (*[unsafe.Sizeof(dstDirent)]byte)(unsafe.Pointer(&dstDirent))[:]) + padding := buf[dstPos+fixedSize+int(dstDirent.Namlen) : dstPos+reclen] + for i := range padding { + padding[i] = 0 + } + + dstPos += int(dstDirent.Reclen) + srcPos += int(srcDirent.Reclen) + } + + return dstPos +} + +func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + return sendfile(outfd, infd, offset, count) +} + +//sys ptrace(request int, pid int, addr uintptr, data int) (err error) + +func PtraceAttach(pid int) (err error) { + return ptrace(PTRACE_ATTACH, pid, 0, 0) +} + +func PtraceCont(pid int, signal int) (err error) { + return ptrace(PTRACE_CONT, pid, 1, signal) +} + +func PtraceDetach(pid int) (err error) { + return ptrace(PTRACE_DETACH, pid, 1, 0) +} + +func PtraceGetFpRegs(pid int, fpregsout *FpReg) (err error) { + return ptrace(PTRACE_GETFPREGS, pid, uintptr(unsafe.Pointer(fpregsout)), 0) +} + +func PtraceGetRegs(pid int, regsout *Reg) (err error) { + return ptrace(PTRACE_GETREGS, pid, uintptr(unsafe.Pointer(regsout)), 0) +} + +func PtraceLwpEvents(pid int, enable int) (err error) { + return ptrace(PTRACE_LWPEVENTS, pid, 0, enable) +} + +func PtraceLwpInfo(pid int, info uintptr) (err error) { + return ptrace(PTRACE_LWPINFO, pid, info, int(unsafe.Sizeof(PtraceLwpInfoStruct{}))) +} + +func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) { + return PtraceIO(PIOD_READ_D, pid, addr, out, SizeofLong) +} + +func PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) { + return PtraceIO(PIOD_READ_I, pid, addr, out, SizeofLong) +} + +func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) { + return PtraceIO(PIOD_WRITE_D, pid, addr, data, SizeofLong) +} + +func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) { + return PtraceIO(PIOD_WRITE_I, pid, addr, data, SizeofLong) +} + +func PtraceSetRegs(pid int, regs *Reg) (err error) { + return ptrace(PTRACE_SETREGS, pid, uintptr(unsafe.Pointer(regs)), 0) +} + +func PtraceSingleStep(pid int) (err error) { + return ptrace(PTRACE_SINGLESTEP, pid, 1, 0) +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys CapEnter() (err error) +//sys capRightsGet(version int, fd int, rightsp *CapRights) (err error) = SYS___CAP_RIGHTS_GET +//sys capRightsLimit(fd int, rightsp *CapRights) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Exit(code int) +//sys ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) +//sys ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) +//sys ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) +//sys ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE +//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys fstat(fd int, stat *stat_freebsd11_t) (err error) +//sys fstat_freebsd12(fd int, stat *Stat_t) (err error) +//sys fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) +//sys fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) +//sys fstatfs(fd int, stat *statfs_freebsd11_t) (err error) +//sys fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sys getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) +//sys getdirentries_freebsd12(fd int, buf []byte, basep *uint64) (n int, err error) +//sys Getdtablesize() (size int) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Issetugid() (tainted bool) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) +//sys Listen(s int, backlog int) (err error) +//sys lstat(path string, stat *stat_freebsd11_t) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys mknod(path string, mode uint32, dev int) (err error) +//sys mknodat(fd int, path string, mode uint32, dev int) (err error) +//sys mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys pread(fd int, p []byte, offset int64) (n int, err error) +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Renameat(fromfd int, from string, tofd int, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Setlogin(name string) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys stat(path string, stat *stat_freebsd11_t) (err error) +//sys statfs(path string, stat *statfs_freebsd11_t) (err error) +//sys statfs_freebsd12(path string, stat *Statfs_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Undelete(path string) (err error) +//sys Unlink(path string) (err error) +//sys Unlinkat(dirfd int, path string, flags int) (err error) +//sys Unmount(path string, flags int) (err error) +//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 readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE +//sys accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) +//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) + +/* + * Unimplemented + */ +// Profil +// Sigaction +// Sigprocmask +// Getlogin +// Sigpending +// Sigaltstack +// Ioctl +// Reboot +// Execve +// Vfork +// Sbrk +// Sstk +// Ovadvise +// Mincore +// Setitimer +// Swapon +// Select +// Sigsuspend +// Readv +// Writev +// Nfssvc +// Getfh +// Quotactl +// Mount +// Csops +// Waitid +// Add_profil +// Kdebug_trace +// Sigreturn +// Atsocket +// Kqueue_from_portset_np +// Kqueue_portset +// Getattrlist +// Setattrlist +// Getdents +// Getdirentriesattr +// Searchfs +// Delete +// Copyfile +// Watchevent +// Waitevent +// Modwatch +// Fsctl +// Initgroups +// Posix_spawn +// Nfsclnt +// Fhopen +// Minherit +// Semsys +// Msgsys +// Shmsys +// Semctl +// Semget +// Semop +// Msgctl +// Msgget +// Msgsnd +// Msgrcv +// Shmat +// Shmctl +// Shmdt +// Shmget +// Shm_open +// Shm_unlink +// Sem_open +// Sem_close +// Sem_unlink +// Sem_wait +// Sem_trywait +// Sem_post +// Sem_getvalue +// Sem_init +// Sem_destroy +// Open_extended +// Umask_extended +// Stat_extended +// Lstat_extended +// Fstat_extended +// Chmod_extended +// Fchmod_extended +// Access_extended +// Settid +// Gettid +// Setsgroups +// Getsgroups +// Setwgroups +// Getwgroups +// Mkfifo_extended +// Mkdir_extended +// Identitysvc +// Shared_region_check_np +// Shared_region_map_np +// __pthread_mutex_destroy +// __pthread_mutex_init +// __pthread_mutex_lock +// __pthread_mutex_trylock +// __pthread_mutex_unlock +// __pthread_cond_init +// __pthread_cond_destroy +// __pthread_cond_broadcast +// __pthread_cond_signal +// Setsid_with_pid +// __pthread_cond_timedwait +// Aio_fsync +// Aio_return +// Aio_suspend +// Aio_cancel +// Aio_error +// Aio_read +// Aio_write +// Lio_listio +// __pthread_cond_wait +// Iopolicysys +// __pthread_kill +// __pthread_sigmask +// __sigwait +// __disable_threadsignal +// __pthread_markcancel +// __pthread_canceled +// __semwait_signal +// Proc_info +// Stat64_extended +// Lstat64_extended +// Fstat64_extended +// __pthread_chdir +// __pthread_fchdir +// Audit +// Auditon +// Getauid +// Setauid +// Getaudit +// Setaudit +// Getaudit_addr +// Setaudit_addr +// Auditctl +// Bsdthread_create +// Bsdthread_terminate +// Stack_snapshot +// Bsdthread_register +// Workq_open +// Workq_ops +// __mac_execve +// __mac_syscall +// __mac_get_file +// __mac_set_file +// __mac_get_link +// __mac_set_link +// __mac_get_proc +// __mac_set_proc +// __mac_get_fd +// __mac_set_fd +// __mac_get_pid +// __mac_get_lcid +// __mac_get_lctx +// __mac_set_lctx +// Setlcid +// Read_nocancel +// Write_nocancel +// Open_nocancel +// Close_nocancel +// Wait4_nocancel +// Recvmsg_nocancel +// Sendmsg_nocancel +// Recvfrom_nocancel +// Accept_nocancel +// Fcntl_nocancel +// Select_nocancel +// Fsync_nocancel +// Connect_nocancel +// Sigsuspend_nocancel +// Readv_nocancel +// Writev_nocancel +// Sendto_nocancel +// Pread_nocancel +// Pwrite_nocancel +// Waitid_nocancel +// Poll_nocancel +// Msgsnd_nocancel +// Msgrcv_nocancel +// Sem_wait_nocancel +// Aio_suspend_nocancel +// __sigwait_nocancel +// __semwait_signal_nocancel +// __mac_mount +// __mac_get_mount +// __mac_getfsstat diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go new file mode 100644 index 0000000..342fc32 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go @@ -0,0 +1,67 @@ +// 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 386 && freebsd +// +build 386,freebsd + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = int32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var writtenOut uint64 = 0 + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0) + + written = int(writtenOut) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +func PtraceGetFsBase(pid int, fsbase *int64) (err error) { + return ptrace(PTRACE_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0) +} + +func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) { + ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint32(countin)} + err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0) + return int(ioDesc.Len), err +} diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go new file mode 100644 index 0000000..a32d5aa --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go @@ -0,0 +1,67 @@ +// 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 amd64 && freebsd +// +build amd64,freebsd + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = int32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var writtenOut uint64 = 0 + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0) + + written = int(writtenOut) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +func PtraceGetFsBase(pid int, fsbase *int64) (err error) { + return ptrace(PTRACE_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0) +} + +func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) { + ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint64(countin)} + err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0) + return int(ioDesc.Len), err +} diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go new file mode 100644 index 0000000..1e36d39 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go @@ -0,0 +1,63 @@ +// 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 arm && freebsd +// +build arm,freebsd + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = int32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var writtenOut uint64 = 0 + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0) + + written = int(writtenOut) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) { + ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint32(countin)} + err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0) + return int(ioDesc.Len), err +} diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go new file mode 100644 index 0000000..a09a153 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go @@ -0,0 +1,63 @@ +// 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 && freebsd +// +build arm64,freebsd + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = int32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var writtenOut uint64 = 0 + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0) + + written = int(writtenOut) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) { + ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint64(countin)} + err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0) + return int(ioDesc.Len), err +} diff --git a/vendor/golang.org/x/sys/unix/syscall_illumos.go b/vendor/golang.org/x/sys/unix/syscall_illumos.go new file mode 100644 index 0000000..8d5f294 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_illumos.go @@ -0,0 +1,186 @@ +// 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. + +// illumos system calls not present on Solaris. + +//go:build amd64 && illumos +// +build amd64,illumos + +package unix + +import ( + "fmt" + "runtime" + "unsafe" +) + +func bytes2iovec(bs [][]byte) []Iovec { + iovecs := make([]Iovec, len(bs)) + for i, b := range bs { + iovecs[i].SetLen(len(b)) + if len(b) > 0 { + // somehow Iovec.Base on illumos is (*int8), not (*byte) + iovecs[i].Base = (*int8)(unsafe.Pointer(&b[0])) + } else { + iovecs[i].Base = (*int8)(unsafe.Pointer(&_zero)) + } + } + return iovecs +} + +//sys readv(fd int, iovs []Iovec) (n int, err error) + +func Readv(fd int, iovs [][]byte) (n int, err error) { + iovecs := bytes2iovec(iovs) + n, err = readv(fd, iovecs) + return n, err +} + +//sys preadv(fd int, iovs []Iovec, off int64) (n int, err error) + +func Preadv(fd int, iovs [][]byte, off int64) (n int, err error) { + iovecs := bytes2iovec(iovs) + n, err = preadv(fd, iovecs, off) + return n, err +} + +//sys writev(fd int, iovs []Iovec) (n int, err error) + +func Writev(fd int, iovs [][]byte) (n int, err error) { + iovecs := bytes2iovec(iovs) + n, err = writev(fd, iovecs) + return n, err +} + +//sys pwritev(fd int, iovs []Iovec, off int64) (n int, err error) + +func Pwritev(fd int, iovs [][]byte, off int64) (n int, err error) { + iovecs := bytes2iovec(iovs) + n, err = pwritev(fd, iovecs, off) + return n, err +} + +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) = libsocket.accept4 + +func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept4(fd, &rsa, &len, flags) + if err != nil { + return + } + if len > SizeofSockaddrAny { + panic("RawSockaddrAny too small") + } + sa, err = anyToSockaddr(fd, &rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +//sys putmsg(fd int, clptr *strbuf, dataptr *strbuf, flags int) (err error) + +func Putmsg(fd int, cl []byte, data []byte, flags int) (err error) { + var clp, datap *strbuf + if len(cl) > 0 { + clp = &strbuf{ + Len: int32(len(cl)), + Buf: (*int8)(unsafe.Pointer(&cl[0])), + } + } + if len(data) > 0 { + datap = &strbuf{ + Len: int32(len(data)), + Buf: (*int8)(unsafe.Pointer(&data[0])), + } + } + return putmsg(fd, clp, datap, flags) +} + +//sys getmsg(fd int, clptr *strbuf, dataptr *strbuf, flags *int) (err error) + +func Getmsg(fd int, cl []byte, data []byte) (retCl []byte, retData []byte, flags int, err error) { + var clp, datap *strbuf + if len(cl) > 0 { + clp = &strbuf{ + Maxlen: int32(len(cl)), + Buf: (*int8)(unsafe.Pointer(&cl[0])), + } + } + if len(data) > 0 { + datap = &strbuf{ + Maxlen: int32(len(data)), + Buf: (*int8)(unsafe.Pointer(&data[0])), + } + } + + if err = getmsg(fd, clp, datap, &flags); err != nil { + return nil, nil, 0, err + } + + if len(cl) > 0 { + retCl = cl[:clp.Len] + } + if len(data) > 0 { + retData = data[:datap.Len] + } + return retCl, retData, flags, nil +} + +func IoctlSetIntRetInt(fd int, req uint, arg int) (int, error) { + return ioctlRet(fd, req, uintptr(arg)) +} + +func IoctlSetString(fd int, req uint, val string) error { + bs := make([]byte, len(val)+1) + copy(bs[:len(bs)-1], val) + err := ioctl(fd, req, uintptr(unsafe.Pointer(&bs[0]))) + runtime.KeepAlive(&bs[0]) + return err +} + +// Lifreq Helpers + +func (l *Lifreq) SetName(name string) error { + if len(name) >= len(l.Name) { + return fmt.Errorf("name cannot be more than %d characters", len(l.Name)-1) + } + for i := range name { + l.Name[i] = int8(name[i]) + } + return nil +} + +func (l *Lifreq) SetLifruInt(d int) { + *(*int)(unsafe.Pointer(&l.Lifru[0])) = d +} + +func (l *Lifreq) GetLifruInt() int { + return *(*int)(unsafe.Pointer(&l.Lifru[0])) +} + +func (l *Lifreq) SetLifruUint(d uint) { + *(*uint)(unsafe.Pointer(&l.Lifru[0])) = d +} + +func (l *Lifreq) GetLifruUint() uint { + return *(*uint)(unsafe.Pointer(&l.Lifru[0])) +} + +func IoctlLifreq(fd int, req uint, l *Lifreq) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(l))) +} + +// Strioctl Helpers + +func (s *Strioctl) SetInt(i int) { + s.Len = int32(unsafe.Sizeof(i)) + s.Dp = (*int8)(unsafe.Pointer(&i)) +} + +func IoctlSetStrioctlRetInt(fd int, req uint, s *Strioctl) (int, error) { + return ioctlRet(fd, req, uintptr(unsafe.Pointer(s))) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go new file mode 100644 index 0000000..eeae6db --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -0,0 +1,2453 @@ +// 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. + +// Linux system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and +// wrap it in our own nicer implementation. + +package unix + +import ( + "encoding/binary" + "syscall" + "time" + "unsafe" +) + +/* + * Wrapped + */ + +func Access(path string, mode uint32) (err error) { + return Faccessat(AT_FDCWD, path, mode, 0) +} + +func Chmod(path string, mode uint32) (err error) { + return Fchmodat(AT_FDCWD, path, mode, 0) +} + +func Chown(path string, uid int, gid int) (err error) { + return Fchownat(AT_FDCWD, path, uid, gid, 0) +} + +func Creat(path string, mode uint32) (fd int, err error) { + return Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode) +} + +func EpollCreate(size int) (fd int, err error) { + if size <= 0 { + return -1, EINVAL + } + return EpollCreate1(0) +} + +//sys FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) +//sys fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) + +func FanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname string) (err error) { + if pathname == "" { + return fanotifyMark(fd, flags, mask, dirFd, nil) + } + p, err := BytePtrFromString(pathname) + if err != nil { + return err + } + return fanotifyMark(fd, flags, mask, dirFd, p) +} + +//sys fchmodat(dirfd int, path string, mode uint32) (err error) + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + // Linux fchmodat doesn't support the flags parameter. Mimick glibc's behavior + // and check the flags. Otherwise the mode would be applied to the symlink + // destination which is not what the user expects. + if flags&^AT_SYMLINK_NOFOLLOW != 0 { + return EINVAL + } else if flags&AT_SYMLINK_NOFOLLOW != 0 { + return EOPNOTSUPP + } + return fchmodat(dirfd, path, mode) +} + +func InotifyInit() (fd int, err error) { + return InotifyInit1(0) +} + +//sys ioctl(fd int, req uint, arg uintptr) (err error) = SYS_IOCTL +//sys ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL + +// ioctl itself should not be exposed directly, but additional get/set functions +// for specific types are permissible. These are defined in ioctl.go and +// ioctl_linux.go. +// +// The third argument to ioctl is often a pointer but sometimes an integer. +// Callers should use ioctlPtr when the third argument is a pointer and ioctl +// when the third argument is an integer. +// +// TODO: some existing code incorrectly uses ioctl when it should use ioctlPtr. + +//sys Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) + +func Link(oldpath string, newpath string) (err error) { + return Linkat(AT_FDCWD, oldpath, AT_FDCWD, newpath, 0) +} + +func Mkdir(path string, mode uint32) (err error) { + return Mkdirat(AT_FDCWD, path, mode) +} + +func Mknod(path string, mode uint32, dev int) (err error) { + return Mknodat(AT_FDCWD, path, mode, dev) +} + +func Open(path string, mode int, perm uint32) (fd int, err error) { + return openat(AT_FDCWD, path, mode|O_LARGEFILE, perm) +} + +//sys openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) + +func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + return openat(dirfd, path, flags|O_LARGEFILE, mode) +} + +//sys openat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error) + +func Openat2(dirfd int, path string, how *OpenHow) (fd int, err error) { + return openat2(dirfd, path, how, SizeofOpenHow) +} + +func Pipe(p []int) error { + return Pipe2(p, 0) +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) error { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err := pipe2(&pp, flags) + if err == nil { + p[0] = int(pp[0]) + p[1] = int(pp[1]) + } + return err +} + +//sys ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) + +func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + if len(fds) == 0 { + return ppoll(nil, 0, timeout, sigmask) + } + return ppoll(&fds[0], len(fds), timeout, sigmask) +} + +func Poll(fds []PollFd, timeout int) (n int, err error) { + var ts *Timespec + if timeout >= 0 { + ts = new(Timespec) + *ts = NsecToTimespec(int64(timeout) * 1e6) + } + return Ppoll(fds, ts, nil) +} + +//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) + +func Readlink(path string, buf []byte) (n int, err error) { + return Readlinkat(AT_FDCWD, path, buf) +} + +func Rename(oldpath string, newpath string) (err error) { + return Renameat(AT_FDCWD, oldpath, AT_FDCWD, newpath) +} + +func Rmdir(path string) error { + return Unlinkat(AT_FDCWD, path, AT_REMOVEDIR) +} + +//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) + +func Symlink(oldpath string, newpath string) (err error) { + return Symlinkat(oldpath, AT_FDCWD, newpath) +} + +func Unlink(path string) error { + return Unlinkat(AT_FDCWD, path, 0) +} + +//sys Unlinkat(dirfd int, path string, flags int) (err error) + +func Utimes(path string, tv []Timeval) error { + if tv == nil { + err := utimensat(AT_FDCWD, path, nil, 0) + if err != ENOSYS { + return err + } + return utimes(path, nil) + } + if len(tv) != 2 { + return EINVAL + } + var ts [2]Timespec + ts[0] = NsecToTimespec(TimevalToNsec(tv[0])) + ts[1] = NsecToTimespec(TimevalToNsec(tv[1])) + err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) + if err != ENOSYS { + return err + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) + +func UtimesNano(path string, ts []Timespec) error { + return UtimesNanoAt(AT_FDCWD, path, ts, 0) +} + +func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { + if ts == nil { + return utimensat(dirfd, path, nil, flags) + } + if len(ts) != 2 { + return EINVAL + } + return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) +} + +func Futimesat(dirfd int, path string, tv []Timeval) error { + if tv == nil { + return futimesat(dirfd, path, nil) + } + if len(tv) != 2 { + return EINVAL + } + return futimesat(dirfd, path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func Futimes(fd int, tv []Timeval) (err error) { + // Believe it or not, this is the best we can do on Linux + // (and is what glibc does). + return Utimes("/proc/self/fd/"+itoa(fd), tv) +} + +const ImplementsGetwd = true + +//sys Getcwd(buf []byte) (n int, err error) + +func Getwd() (wd string, err error) { + var buf [PathMax]byte + n, err := Getcwd(buf[0:]) + if err != nil { + return "", err + } + // Getcwd returns the number of bytes written to buf, including the NUL. + if n < 1 || n > len(buf) || buf[n-1] != 0 { + return "", EINVAL + } + // In some cases, Linux can return a path that starts with the + // "(unreachable)" prefix, which can potentially be a valid relative + // path. To work around that, return ENOENT if path is not absolute. + if buf[0] != '/' { + return "", ENOENT + } + + return string(buf[0 : n-1]), nil +} + +func Getgroups() (gids []int, err error) { + n, err := getgroups(0, nil) + if err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + + // Sanity check group count. Max is 1<<16 on Linux. + if n < 0 || n > 1<<20 { + return nil, EINVAL + } + + a := make([]_Gid_t, n) + n, err = getgroups(n, &a[0]) + if err != nil { + return nil, err + } + gids = make([]int, n) + for i, v := range a[0:n] { + gids[i] = int(v) + } + return +} + +func Setgroups(gids []int) (err error) { + if len(gids) == 0 { + return setgroups(0, nil) + } + + a := make([]_Gid_t, len(gids)) + for i, v := range gids { + a[i] = _Gid_t(v) + } + return setgroups(len(a), &a[0]) +} + +type WaitStatus uint32 + +// Wait status is 7 bits at bottom, either 0 (exited), +// 0x7F (stopped), or a signal number that caused an exit. +// The 0x80 bit is whether there was a core dump. +// An extra number (exit code, signal causing a stop) +// is in the high bits. At least that's the idea. +// There are various irregularities. For example, the +// "continued" status is 0xFFFF, distinguishing itself +// from stopped via the core dump bit. + +const ( + mask = 0x7F + core = 0x80 + exited = 0x00 + stopped = 0x7F + shift = 8 +) + +func (w WaitStatus) Exited() bool { return w&mask == exited } + +func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != exited } + +func (w WaitStatus) Stopped() bool { return w&0xFF == stopped } + +func (w WaitStatus) Continued() bool { return w == 0xFFFF } + +func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 } + +func (w WaitStatus) ExitStatus() int { + if !w.Exited() { + return -1 + } + return int(w>>shift) & 0xFF +} + +func (w WaitStatus) Signal() syscall.Signal { + if !w.Signaled() { + return -1 + } + return syscall.Signal(w & mask) +} + +func (w WaitStatus) StopSignal() syscall.Signal { + if !w.Stopped() { + return -1 + } + return syscall.Signal(w>>shift) & 0xFF +} + +func (w WaitStatus) TrapCause() int { + if w.StopSignal() != SIGTRAP { + return -1 + } + return int(w>>shift) >> 8 +} + +//sys wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) + +func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { + var status _C_int + wpid, err = wait4(pid, &status, options, rusage) + if wstatus != nil { + *wstatus = WaitStatus(status) + } + return +} + +//sys Waitid(idType int, id int, info *Siginfo, options int, rusage *Rusage) (err error) + +func Mkfifo(path string, mode uint32) error { + return Mknod(path, mode|S_IFIFO, 0) +} + +func Mkfifoat(dirfd int, path string, mode uint32) error { + return Mknodat(dirfd, path, mode|S_IFIFO, 0) +} + +func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, 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), SizeofSockaddrInet4, nil +} + +func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, 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), SizeofSockaddrInet6, nil +} + +func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { + name := sa.Name + n := len(name) + if n >= len(sa.raw.Path) { + return nil, 0, 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 := _Socklen(2) + if n > 0 { + sl += _Socklen(n) + 1 + } + if sa.raw.Path[0] == '@' { + sa.raw.Path[0] = 0 + // Don't count trailing NUL for abstract address. + sl-- + } + + return unsafe.Pointer(&sa.raw), sl, nil +} + +// SockaddrLinklayer implements the Sockaddr interface for AF_PACKET type sockets. +type SockaddrLinklayer struct { + Protocol uint16 + Ifindex int + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]byte + raw RawSockaddrLinklayer +} + +func (sa *SockaddrLinklayer) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff { + return nil, 0, EINVAL + } + sa.raw.Family = AF_PACKET + sa.raw.Protocol = sa.Protocol + sa.raw.Ifindex = int32(sa.Ifindex) + sa.raw.Hatype = sa.Hatype + sa.raw.Pkttype = sa.Pkttype + sa.raw.Halen = sa.Halen + sa.raw.Addr = sa.Addr + return unsafe.Pointer(&sa.raw), SizeofSockaddrLinklayer, nil +} + +// SockaddrNetlink implements the Sockaddr interface for AF_NETLINK type sockets. +type SockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 + raw RawSockaddrNetlink +} + +func (sa *SockaddrNetlink) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_NETLINK + sa.raw.Pad = sa.Pad + sa.raw.Pid = sa.Pid + sa.raw.Groups = sa.Groups + return unsafe.Pointer(&sa.raw), SizeofSockaddrNetlink, nil +} + +// SockaddrHCI implements the Sockaddr interface for AF_BLUETOOTH type sockets +// using the HCI protocol. +type SockaddrHCI struct { + Dev uint16 + Channel uint16 + raw RawSockaddrHCI +} + +func (sa *SockaddrHCI) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_BLUETOOTH + sa.raw.Dev = sa.Dev + sa.raw.Channel = sa.Channel + return unsafe.Pointer(&sa.raw), SizeofSockaddrHCI, nil +} + +// SockaddrL2 implements the Sockaddr interface for AF_BLUETOOTH type sockets +// using the L2CAP protocol. +type SockaddrL2 struct { + PSM uint16 + CID uint16 + Addr [6]uint8 + AddrType uint8 + raw RawSockaddrL2 +} + +func (sa *SockaddrL2) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_BLUETOOTH + 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++ { + sa.raw.Bdaddr[i] = sa.Addr[len(sa.Addr)-1-i] + } + cid := (*[2]byte)(unsafe.Pointer(&sa.raw.Cid)) + cid[0] = byte(sa.CID) + cid[1] = byte(sa.CID >> 8) + sa.raw.Bdaddr_type = sa.AddrType + return unsafe.Pointer(&sa.raw), SizeofSockaddrL2, nil +} + +// SockaddrRFCOMM implements the Sockaddr interface for AF_BLUETOOTH type sockets +// using the RFCOMM protocol. +// +// Server example: +// +// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM) +// _ = unix.Bind(fd, &unix.SockaddrRFCOMM{ +// Channel: 1, +// Addr: [6]uint8{0, 0, 0, 0, 0, 0}, // BDADDR_ANY or 00:00:00:00:00:00 +// }) +// _ = Listen(fd, 1) +// nfd, sa, _ := Accept(fd) +// fmt.Printf("conn addr=%v fd=%d", sa.(*unix.SockaddrRFCOMM).Addr, nfd) +// Read(nfd, buf) +// +// Client example: +// +// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM) +// _ = Connect(fd, &SockaddrRFCOMM{ +// Channel: 1, +// Addr: [6]byte{0x11, 0x22, 0x33, 0xaa, 0xbb, 0xcc}, // CC:BB:AA:33:22:11 +// }) +// Write(fd, []byte(`hello`)) +type SockaddrRFCOMM struct { + // Addr represents a bluetooth address, byte ordering is little-endian. + Addr [6]uint8 + + // Channel is a designated bluetooth channel, only 1-30 are available for use. + // Since Linux 2.6.7 and further zero value is the first available channel. + Channel uint8 + + raw RawSockaddrRFCOMM +} + +func (sa *SockaddrRFCOMM) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_BLUETOOTH + sa.raw.Channel = sa.Channel + sa.raw.Bdaddr = sa.Addr + return unsafe.Pointer(&sa.raw), SizeofSockaddrRFCOMM, nil +} + +// SockaddrCAN implements the Sockaddr interface for AF_CAN type sockets. +// The RxID and TxID fields are used for transport protocol addressing in +// (CAN_TP16, CAN_TP20, CAN_MCNET, and CAN_ISOTP), they can be left with +// zero values for CAN_RAW and CAN_BCM sockets as they have no meaning. +// +// The SockaddrCAN struct must be bound to the socket file descriptor +// using Bind before the CAN socket can be used. +// +// // Read one raw CAN frame +// fd, _ := Socket(AF_CAN, SOCK_RAW, CAN_RAW) +// addr := &SockaddrCAN{Ifindex: index} +// Bind(fd, addr) +// frame := make([]byte, 16) +// Read(fd, frame) +// +// The full SocketCAN documentation can be found in the linux kernel +// archives at: https://www.kernel.org/doc/Documentation/networking/can.txt +type SockaddrCAN struct { + Ifindex int + RxID uint32 + TxID uint32 + raw RawSockaddrCAN +} + +func (sa *SockaddrCAN) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff { + return nil, 0, EINVAL + } + sa.raw.Family = AF_CAN + sa.raw.Ifindex = int32(sa.Ifindex) + rx := (*[4]byte)(unsafe.Pointer(&sa.RxID)) + for i := 0; i < 4; i++ { + sa.raw.Addr[i] = rx[i] + } + tx := (*[4]byte)(unsafe.Pointer(&sa.TxID)) + for i := 0; i < 4; i++ { + sa.raw.Addr[i+4] = tx[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil +} + +// SockaddrCANJ1939 implements the Sockaddr interface for AF_CAN using J1939 +// protocol (https://en.wikipedia.org/wiki/SAE_J1939). For more information +// on the purposes of the fields, check the official linux kernel documentation +// available here: https://www.kernel.org/doc/Documentation/networking/j1939.rst +type SockaddrCANJ1939 struct { + Ifindex int + Name uint64 + PGN uint32 + Addr uint8 + raw RawSockaddrCAN +} + +func (sa *SockaddrCANJ1939) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff { + return nil, 0, EINVAL + } + sa.raw.Family = AF_CAN + sa.raw.Ifindex = int32(sa.Ifindex) + n := (*[8]byte)(unsafe.Pointer(&sa.Name)) + for i := 0; i < 8; i++ { + sa.raw.Addr[i] = n[i] + } + p := (*[4]byte)(unsafe.Pointer(&sa.PGN)) + for i := 0; i < 4; i++ { + sa.raw.Addr[i+8] = p[i] + } + sa.raw.Addr[12] = sa.Addr + return unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil +} + +// SockaddrALG implements the Sockaddr interface for AF_ALG type sockets. +// SockaddrALG enables userspace access to the Linux kernel's cryptography +// subsystem. The Type and Name fields specify which type of hash or cipher +// should be used with a given socket. +// +// To create a file descriptor that provides access to a hash or cipher, both +// Bind and Accept must be used. Once the setup process is complete, input +// data can be written to the socket, processed by the kernel, and then read +// back as hash output or ciphertext. +// +// Here is an example of using an AF_ALG socket with SHA1 hashing. +// The initial socket setup process is as follows: +// +// // Open a socket to perform SHA1 hashing. +// fd, _ := unix.Socket(unix.AF_ALG, unix.SOCK_SEQPACKET, 0) +// addr := &unix.SockaddrALG{Type: "hash", Name: "sha1"} +// unix.Bind(fd, addr) +// // Note: unix.Accept does not work at this time; must invoke accept() +// // manually using unix.Syscall. +// hashfd, _, _ := unix.Syscall(unix.SYS_ACCEPT, uintptr(fd), 0, 0) +// +// Once a file descriptor has been returned from Accept, it may be used to +// perform SHA1 hashing. The descriptor is not safe for concurrent use, but +// may be re-used repeatedly with subsequent Write and Read operations. +// +// When hashing a small byte slice or string, a single Write and Read may +// be used: +// +// // Assume hashfd is already configured using the setup process. +// hash := os.NewFile(hashfd, "sha1") +// // Hash an input string and read the results. Each Write discards +// // previous hash state. Read always reads the current state. +// b := make([]byte, 20) +// for i := 0; i < 2; i++ { +// io.WriteString(hash, "Hello, world.") +// hash.Read(b) +// fmt.Println(hex.EncodeToString(b)) +// } +// // Output: +// // 2ae01472317d1935a84797ec1983ae243fc6aa28 +// // 2ae01472317d1935a84797ec1983ae243fc6aa28 +// +// For hashing larger byte slices, or byte streams such as those read from +// a file or socket, use Sendto with MSG_MORE to instruct the kernel to update +// the hash digest instead of creating a new one for a given chunk and finalizing it. +// +// // Assume hashfd and addr are already configured using the setup process. +// hash := os.NewFile(hashfd, "sha1") +// // Hash the contents of a file. +// f, _ := os.Open("/tmp/linux-4.10-rc7.tar.xz") +// b := make([]byte, 4096) +// for { +// n, err := f.Read(b) +// if err == io.EOF { +// break +// } +// unix.Sendto(hashfd, b[:n], unix.MSG_MORE, addr) +// } +// hash.Read(b) +// fmt.Println(hex.EncodeToString(b)) +// // Output: 85cdcad0c06eef66f805ecce353bec9accbeecc5 +// +// For more information, see: http://www.chronox.de/crypto-API/crypto/userspace-if.html. +type SockaddrALG struct { + Type string + Name string + Feature uint32 + Mask uint32 + raw RawSockaddrALG +} + +func (sa *SockaddrALG) sockaddr() (unsafe.Pointer, _Socklen, error) { + // Leave room for NUL byte terminator. + if len(sa.Type) > 13 { + return nil, 0, EINVAL + } + if len(sa.Name) > 63 { + return nil, 0, EINVAL + } + + sa.raw.Family = AF_ALG + sa.raw.Feat = sa.Feature + sa.raw.Mask = sa.Mask + + typ, err := ByteSliceFromString(sa.Type) + if err != nil { + return nil, 0, err + } + name, err := ByteSliceFromString(sa.Name) + if err != nil { + return nil, 0, err + } + + copy(sa.raw.Type[:], typ) + copy(sa.raw.Name[:], name) + + return unsafe.Pointer(&sa.raw), SizeofSockaddrALG, nil +} + +// SockaddrVM implements the Sockaddr interface for AF_VSOCK type sockets. +// SockaddrVM provides access to Linux VM sockets: a mechanism that enables +// bidirectional communication between a hypervisor and its guest virtual +// machines. +type SockaddrVM struct { + // CID and Port specify a context ID and port address for a VM socket. + // Guests have a unique CID, and hosts may have a well-known CID of: + // - VMADDR_CID_HYPERVISOR: refers to the hypervisor process. + // - VMADDR_CID_LOCAL: refers to local communication (loopback). + // - VMADDR_CID_HOST: refers to other processes on the host. + CID uint32 + Port uint32 + Flags uint8 + raw RawSockaddrVM +} + +func (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_VSOCK + sa.raw.Port = sa.Port + sa.raw.Cid = sa.CID + sa.raw.Flags = sa.Flags + + return unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil +} + +type SockaddrXDP struct { + Flags uint16 + Ifindex uint32 + QueueID uint32 + SharedUmemFD uint32 + raw RawSockaddrXDP +} + +func (sa *SockaddrXDP) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_XDP + sa.raw.Flags = sa.Flags + sa.raw.Ifindex = sa.Ifindex + sa.raw.Queue_id = sa.QueueID + sa.raw.Shared_umem_fd = sa.SharedUmemFD + + return unsafe.Pointer(&sa.raw), SizeofSockaddrXDP, nil +} + +// This constant mirrors the #define of PX_PROTO_OE in +// linux/if_pppox.h. We're defining this by hand here instead of +// autogenerating through mkerrors.sh because including +// linux/if_pppox.h causes some declaration conflicts with other +// includes (linux/if_pppox.h includes linux/in.h, which conflicts +// with netinet/in.h). Given that we only need a single zero constant +// out of that file, it's cleaner to just define it by hand here. +const px_proto_oe = 0 + +type SockaddrPPPoE struct { + SID uint16 + Remote []byte + Dev string + raw RawSockaddrPPPoX +} + +func (sa *SockaddrPPPoE) sockaddr() (unsafe.Pointer, _Socklen, error) { + if len(sa.Remote) != 6 { + return nil, 0, EINVAL + } + if len(sa.Dev) > IFNAMSIZ-1 { + return nil, 0, EINVAL + } + + *(*uint16)(unsafe.Pointer(&sa.raw[0])) = AF_PPPOX + // This next field is in host-endian byte order. We can't use the + // same unsafe pointer cast as above, because this value is not + // 32-bit aligned and some architectures don't allow unaligned + // access. + // + // However, the value of px_proto_oe is 0, so we can use + // encoding/binary helpers to write the bytes without worrying + // about the ordering. + binary.BigEndian.PutUint32(sa.raw[2:6], px_proto_oe) + // This field is deliberately big-endian, unlike the previous + // one. The kernel expects SID to be in network byte order. + binary.BigEndian.PutUint16(sa.raw[6:8], sa.SID) + copy(sa.raw[8:14], sa.Remote) + for i := 14; i < 14+IFNAMSIZ; i++ { + sa.raw[i] = 0 + } + copy(sa.raw[14:], sa.Dev) + return unsafe.Pointer(&sa.raw), SizeofSockaddrPPPoX, nil +} + +// SockaddrTIPC implements the Sockaddr interface for AF_TIPC type sockets. +// For more information on TIPC, see: http://tipc.sourceforge.net/. +type SockaddrTIPC struct { + // Scope is the publication scopes when binding service/service range. + // Should be set to TIPC_CLUSTER_SCOPE or TIPC_NODE_SCOPE. + Scope int + + // Addr is the type of address used to manipulate a socket. Addr must be + // one of: + // - *TIPCSocketAddr: "id" variant in the C addr union + // - *TIPCServiceRange: "nameseq" variant in the C addr union + // - *TIPCServiceName: "name" variant in the C addr union + // + // If nil, EINVAL will be returned when the structure is used. + Addr TIPCAddr + + raw RawSockaddrTIPC +} + +// TIPCAddr is implemented by types that can be used as an address for +// SockaddrTIPC. It is only implemented by *TIPCSocketAddr, *TIPCServiceRange, +// and *TIPCServiceName. +type TIPCAddr interface { + tipcAddrtype() uint8 + tipcAddr() [12]byte +} + +func (sa *TIPCSocketAddr) tipcAddr() [12]byte { + var out [12]byte + copy(out[:], (*(*[unsafe.Sizeof(TIPCSocketAddr{})]byte)(unsafe.Pointer(sa)))[:]) + return out +} + +func (sa *TIPCSocketAddr) tipcAddrtype() uint8 { return TIPC_SOCKET_ADDR } + +func (sa *TIPCServiceRange) tipcAddr() [12]byte { + var out [12]byte + copy(out[:], (*(*[unsafe.Sizeof(TIPCServiceRange{})]byte)(unsafe.Pointer(sa)))[:]) + return out +} + +func (sa *TIPCServiceRange) tipcAddrtype() uint8 { return TIPC_SERVICE_RANGE } + +func (sa *TIPCServiceName) tipcAddr() [12]byte { + var out [12]byte + copy(out[:], (*(*[unsafe.Sizeof(TIPCServiceName{})]byte)(unsafe.Pointer(sa)))[:]) + return out +} + +func (sa *TIPCServiceName) tipcAddrtype() uint8 { return TIPC_SERVICE_ADDR } + +func (sa *SockaddrTIPC) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Addr == nil { + return nil, 0, EINVAL + } + sa.raw.Family = AF_TIPC + sa.raw.Scope = int8(sa.Scope) + sa.raw.Addrtype = sa.Addr.tipcAddrtype() + sa.raw.Addr = sa.Addr.tipcAddr() + return unsafe.Pointer(&sa.raw), SizeofSockaddrTIPC, nil +} + +// SockaddrL2TPIP implements the Sockaddr interface for IPPROTO_L2TP/AF_INET sockets. +type SockaddrL2TPIP struct { + Addr [4]byte + ConnId uint32 + raw RawSockaddrL2TPIP +} + +func (sa *SockaddrL2TPIP) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_INET + sa.raw.Conn_id = sa.ConnId + sa.raw.Addr = sa.Addr + return unsafe.Pointer(&sa.raw), SizeofSockaddrL2TPIP, nil +} + +// SockaddrL2TPIP6 implements the Sockaddr interface for IPPROTO_L2TP/AF_INET6 sockets. +type SockaddrL2TPIP6 struct { + Addr [16]byte + ZoneId uint32 + ConnId uint32 + raw RawSockaddrL2TPIP6 +} + +func (sa *SockaddrL2TPIP6) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_INET6 + sa.raw.Conn_id = sa.ConnId + sa.raw.Scope_id = sa.ZoneId + sa.raw.Addr = sa.Addr + return unsafe.Pointer(&sa.raw), SizeofSockaddrL2TPIP6, nil +} + +// SockaddrIUCV implements the Sockaddr interface for AF_IUCV sockets. +type SockaddrIUCV struct { + UserID string + Name string + raw RawSockaddrIUCV +} + +func (sa *SockaddrIUCV) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_IUCV + // 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++ { + sa.raw.Nodeid[i] = ' ' + sa.raw.User_id[i] = ' ' + sa.raw.Name[i] = ' ' + } + if len(sa.UserID) > 8 || len(sa.Name) > 8 { + return nil, 0, EINVAL + } + for i, b := range []byte(sa.UserID[:]) { + sa.raw.User_id[i] = int8(b) + } + for i, b := range []byte(sa.Name[:]) { + sa.raw.Name[i] = int8(b) + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrIUCV, nil +} + +type SockaddrNFC struct { + DeviceIdx uint32 + TargetIdx uint32 + NFCProtocol uint32 + raw RawSockaddrNFC +} + +func (sa *SockaddrNFC) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Sa_family = AF_NFC + sa.raw.Dev_idx = sa.DeviceIdx + sa.raw.Target_idx = sa.TargetIdx + sa.raw.Nfc_protocol = sa.NFCProtocol + return unsafe.Pointer(&sa.raw), SizeofSockaddrNFC, nil +} + +type SockaddrNFCLLCP struct { + DeviceIdx uint32 + TargetIdx uint32 + NFCProtocol uint32 + DestinationSAP uint8 + SourceSAP uint8 + ServiceName string + raw RawSockaddrNFCLLCP +} + +func (sa *SockaddrNFCLLCP) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Sa_family = AF_NFC + sa.raw.Dev_idx = sa.DeviceIdx + sa.raw.Target_idx = sa.TargetIdx + sa.raw.Nfc_protocol = sa.NFCProtocol + sa.raw.Dsap = sa.DestinationSAP + sa.raw.Ssap = sa.SourceSAP + if len(sa.ServiceName) > len(sa.raw.Service_name) { + return nil, 0, EINVAL + } + copy(sa.raw.Service_name[:], sa.ServiceName) + sa.raw.SetServiceNameLen(len(sa.ServiceName)) + return unsafe.Pointer(&sa.raw), SizeofSockaddrNFCLLCP, nil +} + +var socketProtocol = func(fd int) (int, error) { + return GetsockoptInt(fd, SOL_SOCKET, SO_PROTOCOL) +} + +func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { + switch rsa.Addr.Family { + case AF_NETLINK: + pp := (*RawSockaddrNetlink)(unsafe.Pointer(rsa)) + sa := new(SockaddrNetlink) + sa.Family = pp.Family + sa.Pad = pp.Pad + sa.Pid = pp.Pid + sa.Groups = pp.Groups + return sa, nil + + case AF_PACKET: + pp := (*RawSockaddrLinklayer)(unsafe.Pointer(rsa)) + sa := new(SockaddrLinklayer) + sa.Protocol = pp.Protocol + sa.Ifindex = int(pp.Ifindex) + sa.Hatype = pp.Hatype + sa.Pkttype = pp.Pkttype + sa.Halen = pp.Halen + sa.Addr = pp.Addr + return sa, nil + + 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++ + } + bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] + sa.Name = string(bytes) + return sa, nil + + case AF_INET: + proto, err := socketProtocol(fd) + if err != nil { + return nil, err + } + + switch proto { + case IPPROTO_L2TP: + pp := (*RawSockaddrL2TPIP)(unsafe.Pointer(rsa)) + sa := new(SockaddrL2TPIP) + sa.ConnId = pp.Conn_id + sa.Addr = pp.Addr + return sa, nil + default: + 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: + proto, err := socketProtocol(fd) + if err != nil { + return nil, err + } + + switch proto { + case IPPROTO_L2TP: + pp := (*RawSockaddrL2TPIP6)(unsafe.Pointer(rsa)) + sa := new(SockaddrL2TPIP6) + sa.ConnId = pp.Conn_id + sa.ZoneId = pp.Scope_id + sa.Addr = pp.Addr + return sa, nil + default: + 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 + } + + case AF_VSOCK: + pp := (*RawSockaddrVM)(unsafe.Pointer(rsa)) + sa := &SockaddrVM{ + CID: pp.Cid, + Port: pp.Port, + Flags: pp.Flags, + } + return sa, nil + case AF_BLUETOOTH: + proto, err := socketProtocol(fd) + if err != nil { + return nil, err + } + // only BTPROTO_L2CAP and BTPROTO_RFCOMM can accept connections + switch proto { + case BTPROTO_L2CAP: + pp := (*RawSockaddrL2)(unsafe.Pointer(rsa)) + sa := &SockaddrL2{ + PSM: pp.Psm, + CID: pp.Cid, + Addr: pp.Bdaddr, + AddrType: pp.Bdaddr_type, + } + return sa, nil + case BTPROTO_RFCOMM: + pp := (*RawSockaddrRFCOMM)(unsafe.Pointer(rsa)) + sa := &SockaddrRFCOMM{ + Channel: pp.Channel, + Addr: pp.Bdaddr, + } + return sa, nil + } + case AF_XDP: + pp := (*RawSockaddrXDP)(unsafe.Pointer(rsa)) + sa := &SockaddrXDP{ + Flags: pp.Flags, + Ifindex: pp.Ifindex, + QueueID: pp.Queue_id, + SharedUmemFD: pp.Shared_umem_fd, + } + return sa, nil + case AF_PPPOX: + pp := (*RawSockaddrPPPoX)(unsafe.Pointer(rsa)) + if binary.BigEndian.Uint32(pp[2:6]) != px_proto_oe { + return nil, EINVAL + } + sa := &SockaddrPPPoE{ + SID: binary.BigEndian.Uint16(pp[6:8]), + Remote: pp[8:14], + } + for i := 14; i < 14+IFNAMSIZ; i++ { + if pp[i] == 0 { + sa.Dev = string(pp[14:i]) + break + } + } + return sa, nil + case AF_TIPC: + pp := (*RawSockaddrTIPC)(unsafe.Pointer(rsa)) + + sa := &SockaddrTIPC{ + Scope: int(pp.Scope), + } + + // Determine which union variant is present in pp.Addr by checking + // pp.Addrtype. + switch pp.Addrtype { + case TIPC_SERVICE_RANGE: + sa.Addr = (*TIPCServiceRange)(unsafe.Pointer(&pp.Addr)) + case TIPC_SERVICE_ADDR: + sa.Addr = (*TIPCServiceName)(unsafe.Pointer(&pp.Addr)) + case TIPC_SOCKET_ADDR: + sa.Addr = (*TIPCSocketAddr)(unsafe.Pointer(&pp.Addr)) + default: + return nil, EINVAL + } + + return sa, nil + case AF_IUCV: + pp := (*RawSockaddrIUCV)(unsafe.Pointer(rsa)) + + var user [8]byte + var name [8]byte + + for i := 0; i < 8; i++ { + user[i] = byte(pp.User_id[i]) + name[i] = byte(pp.Name[i]) + } + + sa := &SockaddrIUCV{ + UserID: string(user[:]), + Name: string(name[:]), + } + return sa, nil + + case AF_CAN: + proto, err := socketProtocol(fd) + if err != nil { + return nil, err + } + + pp := (*RawSockaddrCAN)(unsafe.Pointer(rsa)) + + switch proto { + case CAN_J1939: + sa := &SockaddrCANJ1939{ + Ifindex: int(pp.Ifindex), + } + name := (*[8]byte)(unsafe.Pointer(&sa.Name)) + for i := 0; i < 8; i++ { + name[i] = pp.Addr[i] + } + pgn := (*[4]byte)(unsafe.Pointer(&sa.PGN)) + for i := 0; i < 4; i++ { + pgn[i] = pp.Addr[i+8] + } + addr := (*[1]byte)(unsafe.Pointer(&sa.Addr)) + addr[0] = pp.Addr[12] + return sa, nil + default: + sa := &SockaddrCAN{ + Ifindex: int(pp.Ifindex), + } + rx := (*[4]byte)(unsafe.Pointer(&sa.RxID)) + for i := 0; i < 4; i++ { + rx[i] = pp.Addr[i] + } + tx := (*[4]byte)(unsafe.Pointer(&sa.TxID)) + for i := 0; i < 4; i++ { + tx[i] = pp.Addr[i+4] + } + return sa, nil + } + case AF_NFC: + proto, err := socketProtocol(fd) + if err != nil { + return nil, err + } + switch proto { + case NFC_SOCKPROTO_RAW: + pp := (*RawSockaddrNFC)(unsafe.Pointer(rsa)) + sa := &SockaddrNFC{ + DeviceIdx: pp.Dev_idx, + TargetIdx: pp.Target_idx, + NFCProtocol: pp.Nfc_protocol, + } + return sa, nil + case NFC_SOCKPROTO_LLCP: + pp := (*RawSockaddrNFCLLCP)(unsafe.Pointer(rsa)) + if uint64(pp.Service_name_len) > uint64(len(pp.Service_name)) { + return nil, EINVAL + } + sa := &SockaddrNFCLLCP{ + DeviceIdx: pp.Dev_idx, + TargetIdx: pp.Target_idx, + NFCProtocol: pp.Nfc_protocol, + DestinationSAP: pp.Dsap, + SourceSAP: pp.Ssap, + ServiceName: string(pp.Service_name[:pp.Service_name_len]), + } + return sa, nil + default: + return nil, EINVAL + } + } + return nil, EAFNOSUPPORT +} + +func Accept(fd int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept4(fd, &rsa, &len, 0) + if err != nil { + return + } + sa, err = anyToSockaddr(fd, &rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept4(fd, &rsa, &len, flags) + if err != nil { + return + } + if len > SizeofSockaddrAny { + panic("RawSockaddrAny too small") + } + sa, err = anyToSockaddr(fd, &rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func Getsockname(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getsockname(fd, &rsa, &len); err != nil { + return + } + return anyToSockaddr(fd, &rsa) +} + +func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) { + var value IPMreqn + vallen := _Socklen(SizeofIPMreqn) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptUcred(fd, level, opt int) (*Ucred, error) { + var value Ucred + vallen := _Socklen(SizeofUcred) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) { + var value TCPInfo + vallen := _Socklen(SizeofTCPInfo) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +// GetsockoptString returns the string value of the socket option opt for the +// socket associated with fd at the given socket level. +func GetsockoptString(fd, level, opt int) (string, error) { + buf := make([]byte, 256) + vallen := _Socklen(len(buf)) + err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen) + if err != nil { + if err == ERANGE { + buf = make([]byte, vallen) + err = getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen) + } + if err != nil { + return "", err + } + } + return string(buf[:vallen-1]), nil +} + +func GetsockoptTpacketStats(fd, level, opt int) (*TpacketStats, error) { + var value TpacketStats + vallen := _Socklen(SizeofTpacketStats) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptTpacketStatsV3(fd, level, opt int) (*TpacketStatsV3, error) { + var value TpacketStatsV3 + vallen := _Socklen(SizeofTpacketStatsV3) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) +} + +func SetsockoptPacketMreq(fd, level, opt int, mreq *PacketMreq) error { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) +} + +// SetsockoptSockFprog attaches a classic BPF or an extended BPF program to a +// socket to filter incoming packets. See 'man 7 socket' for usage information. +func SetsockoptSockFprog(fd, level, opt int, fprog *SockFprog) error { + return setsockopt(fd, level, opt, unsafe.Pointer(fprog), unsafe.Sizeof(*fprog)) +} + +func SetsockoptCanRawFilter(fd, level, opt int, filter []CanFilter) error { + var p unsafe.Pointer + if len(filter) > 0 { + p = unsafe.Pointer(&filter[0]) + } + return setsockopt(fd, level, opt, p, uintptr(len(filter)*SizeofCanFilter)) +} + +func SetsockoptTpacketReq(fd, level, opt int, tp *TpacketReq) error { + return setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp)) +} + +func SetsockoptTpacketReq3(fd, level, opt int, tp *TpacketReq3) error { + return setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp)) +} + +func SetsockoptTCPRepairOpt(fd, level, opt int, o []TCPRepairOpt) (err error) { + if len(o) == 0 { + return EINVAL + } + return setsockopt(fd, level, opt, unsafe.Pointer(&o[0]), uintptr(SizeofTCPRepairOpt*len(o))) +} + +// Keyctl Commands (http://man7.org/linux/man-pages/man2/keyctl.2.html) + +// KeyctlInt calls keyctl commands in which each argument is an int. +// These commands are KEYCTL_REVOKE, KEYCTL_CHOWN, KEYCTL_CLEAR, KEYCTL_LINK, +// KEYCTL_UNLINK, KEYCTL_NEGATE, KEYCTL_SET_REQKEY_KEYRING, KEYCTL_SET_TIMEOUT, +// KEYCTL_ASSUME_AUTHORITY, KEYCTL_SESSION_TO_PARENT, KEYCTL_REJECT, +// KEYCTL_INVALIDATE, and KEYCTL_GET_PERSISTENT. +//sys KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) = SYS_KEYCTL + +// KeyctlBuffer calls keyctl commands in which the third and fourth +// arguments are a buffer and its length, respectively. +// These commands are KEYCTL_UPDATE, KEYCTL_READ, and KEYCTL_INSTANTIATE. +//sys KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) = SYS_KEYCTL + +// KeyctlString calls keyctl commands which return a string. +// These commands are KEYCTL_DESCRIBE and KEYCTL_GET_SECURITY. +func KeyctlString(cmd int, id int) (string, error) { + // We must loop as the string data may change in between the syscalls. + // We could allocate a large buffer here to reduce the chance that the + // syscall needs to be called twice; however, this is unnecessary as + // the performance loss is negligible. + var buffer []byte + for { + // Try to fill the buffer with data + length, err := KeyctlBuffer(cmd, id, buffer, 0) + if err != nil { + return "", err + } + + // Check if the data was written + if length <= len(buffer) { + // Exclude the null terminator + return string(buffer[:length-1]), nil + } + + // Make a bigger buffer if needed + buffer = make([]byte, length) + } +} + +// Keyctl commands with special signatures. + +// KeyctlGetKeyringID implements the KEYCTL_GET_KEYRING_ID command. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_get_keyring_ID.3.html +func KeyctlGetKeyringID(id int, create bool) (ringid int, err error) { + createInt := 0 + if create { + createInt = 1 + } + return KeyctlInt(KEYCTL_GET_KEYRING_ID, id, createInt, 0, 0) +} + +// KeyctlSetperm implements the KEYCTL_SETPERM command. The perm value is the +// key handle permission mask as described in the "keyctl setperm" section of +// http://man7.org/linux/man-pages/man1/keyctl.1.html. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_setperm.3.html +func KeyctlSetperm(id int, perm uint32) error { + _, err := KeyctlInt(KEYCTL_SETPERM, id, int(perm), 0, 0) + return err +} + +//sys keyctlJoin(cmd int, arg2 string) (ret int, err error) = SYS_KEYCTL + +// KeyctlJoinSessionKeyring implements the KEYCTL_JOIN_SESSION_KEYRING command. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_join_session_keyring.3.html +func KeyctlJoinSessionKeyring(name string) (ringid int, err error) { + return keyctlJoin(KEYCTL_JOIN_SESSION_KEYRING, name) +} + +//sys keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) = SYS_KEYCTL + +// KeyctlSearch implements the KEYCTL_SEARCH command. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_search.3.html +func KeyctlSearch(ringid int, keyType, description string, destRingid int) (id int, err error) { + return keyctlSearch(KEYCTL_SEARCH, ringid, keyType, description, destRingid) +} + +//sys keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) = SYS_KEYCTL + +// KeyctlInstantiateIOV implements the KEYCTL_INSTANTIATE_IOV command. This +// command is similar to KEYCTL_INSTANTIATE, except that the payload is a slice +// of Iovec (each of which represents a buffer) instead of a single buffer. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_instantiate_iov.3.html +func KeyctlInstantiateIOV(id int, payload []Iovec, ringid int) error { + return keyctlIOV(KEYCTL_INSTANTIATE_IOV, id, payload, ringid) +} + +//sys keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) = SYS_KEYCTL + +// KeyctlDHCompute implements the KEYCTL_DH_COMPUTE command. This command +// computes a Diffie-Hellman shared secret based on the provide params. The +// secret is written to the provided buffer and the returned size is the number +// of bytes written (returning an error if there is insufficient space in the +// buffer). If a nil buffer is passed in, this function returns the minimum +// buffer length needed to store the appropriate data. Note that this differs +// from KEYCTL_READ's behavior which always returns the requested payload size. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_dh_compute.3.html +func KeyctlDHCompute(params *KeyctlDHParams, buffer []byte) (size int, err error) { + return keyctlDH(KEYCTL_DH_COMPUTE, params, buffer) +} + +// KeyctlRestrictKeyring implements the KEYCTL_RESTRICT_KEYRING command. This +// command limits the set of keys that can be linked to the keyring, regardless +// of keyring permissions. The command requires the "setattr" permission. +// +// When called with an empty keyType the command locks the keyring, preventing +// any further keys from being linked to the keyring. +// +// The "asymmetric" keyType defines restrictions requiring key payloads to be +// DER encoded X.509 certificates signed by keys in another keyring. Restrictions +// for "asymmetric" include "builtin_trusted", "builtin_and_secondary_trusted", +// "key_or_keyring:", and "key_or_keyring::chain". +// +// As of Linux 4.12, only the "asymmetric" keyType defines type-specific +// restrictions. +// +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_restrict_keyring.3.html +// http://man7.org/linux/man-pages/man2/keyctl.2.html +func KeyctlRestrictKeyring(ringid int, keyType string, restriction string) error { + if keyType == "" { + return keyctlRestrictKeyring(KEYCTL_RESTRICT_KEYRING, ringid) + } + return keyctlRestrictKeyringByType(KEYCTL_RESTRICT_KEYRING, ringid, keyType, restriction) +} + +//sys keyctlRestrictKeyringByType(cmd int, arg2 int, keyType string, restriction string) (err error) = SYS_KEYCTL +//sys keyctlRestrictKeyring(cmd int, arg2 int) (err error) = SYS_KEYCTL + +func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { + var msg Msghdr + msg.Name = (*byte)(unsafe.Pointer(rsa)) + msg.Namelen = uint32(SizeofSockaddrAny) + var iov Iovec + if len(p) > 0 { + iov.Base = &p[0] + iov.SetLen(len(p)) + } + var dummy byte + if len(oob) > 0 { + if len(p) == 0 { + var sockType int + sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE) + if err != nil { + return + } + // receive at least one normal byte + if sockType != SOCK_DGRAM { + iov.Base = &dummy + iov.SetLen(1) + } + } + msg.Control = &oob[0] + msg.SetControllen(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = recvmsg(fd, &msg, flags); err != nil { + return + } + oobn = int(msg.Controllen) + recvflags = int(msg.Flags) + return +} + +func sendmsgN(fd int, p, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { + var msg Msghdr + msg.Name = (*byte)(ptr) + msg.Namelen = uint32(salen) + var iov Iovec + if len(p) > 0 { + iov.Base = &p[0] + iov.SetLen(len(p)) + } + var dummy byte + if len(oob) > 0 { + if len(p) == 0 { + var sockType int + sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE) + if err != nil { + return 0, err + } + // send at least one normal byte + if sockType != SOCK_DGRAM { + iov.Base = &dummy + iov.SetLen(1) + } + } + msg.Control = &oob[0] + msg.SetControllen(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = sendmsg(fd, &msg, flags); err != nil { + return 0, err + } + if len(oob) > 0 && len(p) == 0 { + n = 0 + } + return n, nil +} + +// BindToDevice binds the socket associated with fd to device. +func BindToDevice(fd int, device string) (err error) { + return SetsockoptString(fd, SOL_SOCKET, SO_BINDTODEVICE, device) +} + +//sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error) + +func ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err error) { + // The peek requests are machine-size oriented, so we wrap it + // to retrieve arbitrary-length data. + + // The ptrace syscall differs from glibc's ptrace. + // Peeks returns the word in *data, not as the return value. + + var buf [SizeofPtr]byte + + // Leading edge. PEEKTEXT/PEEKDATA don't require aligned + // access (PEEKUSER warns that it might), but if we don't + // align our reads, we might straddle an unmapped page + // boundary and not get the bytes leading up to the page + // boundary. + n := 0 + if addr%SizeofPtr != 0 { + err = ptrace(req, pid, addr-addr%SizeofPtr, uintptr(unsafe.Pointer(&buf[0]))) + if err != nil { + return 0, err + } + n += copy(out, buf[addr%SizeofPtr:]) + out = out[n:] + } + + // Remainder. + for len(out) > 0 { + // We use an internal buffer to guarantee alignment. + // It's not documented if this is necessary, but we're paranoid. + err = ptrace(req, pid, addr+uintptr(n), uintptr(unsafe.Pointer(&buf[0]))) + if err != nil { + return n, err + } + copied := copy(out, buf[0:]) + n += copied + out = out[copied:] + } + + return n, nil +} + +func PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) { + return ptracePeek(PTRACE_PEEKTEXT, pid, addr, out) +} + +func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) { + return ptracePeek(PTRACE_PEEKDATA, pid, addr, out) +} + +func PtracePeekUser(pid int, addr uintptr, out []byte) (count int, err error) { + return ptracePeek(PTRACE_PEEKUSR, pid, addr, out) +} + +func ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (count int, err error) { + // As for ptracePeek, we need to align our accesses to deal + // with the possibility of straddling an invalid page. + + // Leading edge. + n := 0 + if addr%SizeofPtr != 0 { + var buf [SizeofPtr]byte + err = ptrace(peekReq, pid, addr-addr%SizeofPtr, uintptr(unsafe.Pointer(&buf[0]))) + if err != nil { + return 0, err + } + n += copy(buf[addr%SizeofPtr:], data) + word := *((*uintptr)(unsafe.Pointer(&buf[0]))) + err = ptrace(pokeReq, pid, addr-addr%SizeofPtr, word) + if err != nil { + return 0, err + } + data = data[n:] + } + + // Interior. + for len(data) > SizeofPtr { + word := *((*uintptr)(unsafe.Pointer(&data[0]))) + err = ptrace(pokeReq, pid, addr+uintptr(n), word) + if err != nil { + return n, err + } + n += SizeofPtr + data = data[SizeofPtr:] + } + + // Trailing edge. + if len(data) > 0 { + var buf [SizeofPtr]byte + err = ptrace(peekReq, pid, addr+uintptr(n), uintptr(unsafe.Pointer(&buf[0]))) + if err != nil { + return n, err + } + copy(buf[0:], data) + word := *((*uintptr)(unsafe.Pointer(&buf[0]))) + err = ptrace(pokeReq, pid, addr+uintptr(n), word) + if err != nil { + return n, err + } + n += len(data) + } + + return n, nil +} + +func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) { + return ptracePoke(PTRACE_POKETEXT, PTRACE_PEEKTEXT, pid, addr, data) +} + +func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) { + return ptracePoke(PTRACE_POKEDATA, PTRACE_PEEKDATA, pid, addr, data) +} + +func PtracePokeUser(pid int, addr uintptr, data []byte) (count int, err error) { + return ptracePoke(PTRACE_POKEUSR, PTRACE_PEEKUSR, pid, addr, data) +} + +func PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +func PtraceSetRegs(pid int, regs *PtraceRegs) (err error) { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} + +func PtraceSetOptions(pid int, options int) (err error) { + return ptrace(PTRACE_SETOPTIONS, pid, 0, uintptr(options)) +} + +func PtraceGetEventMsg(pid int) (msg uint, err error) { + var data _C_long + err = ptrace(PTRACE_GETEVENTMSG, pid, 0, uintptr(unsafe.Pointer(&data))) + msg = uint(data) + return +} + +func PtraceCont(pid int, signal int) (err error) { + return ptrace(PTRACE_CONT, pid, 0, uintptr(signal)) +} + +func PtraceSyscall(pid int, signal int) (err error) { + return ptrace(PTRACE_SYSCALL, pid, 0, uintptr(signal)) +} + +func PtraceSingleStep(pid int) (err error) { return ptrace(PTRACE_SINGLESTEP, pid, 0, 0) } + +func PtraceInterrupt(pid int) (err error) { return ptrace(PTRACE_INTERRUPT, pid, 0, 0) } + +func PtraceAttach(pid int) (err error) { return ptrace(PTRACE_ATTACH, pid, 0, 0) } + +func PtraceSeize(pid int) (err error) { return ptrace(PTRACE_SEIZE, pid, 0, 0) } + +func PtraceDetach(pid int) (err error) { return ptrace(PTRACE_DETACH, pid, 0, 0) } + +//sys reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) + +func Reboot(cmd int) (err error) { + return reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, "") +} + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) +} + +func direntReclen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) +} + +func direntNamlen(buf []byte) (uint64, bool) { + reclen, ok := direntReclen(buf) + if !ok { + return 0, false + } + return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true +} + +//sys mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) + +func Mount(source string, target string, fstype string, flags uintptr, data string) (err error) { + // Certain file systems get rather angry and EINVAL if you give + // them an empty string of data, rather than NULL. + if data == "" { + return mount(source, target, fstype, flags, nil) + } + datap, err := BytePtrFromString(data) + if err != nil { + return err + } + return mount(source, target, fstype, flags, datap) +} + +//sys mountSetattr(dirfd int, pathname string, flags uint, attr *MountAttr, size uintptr) (err error) = SYS_MOUNT_SETATTR + +// MountSetattr is a wrapper for mount_setattr(2). +// https://man7.org/linux/man-pages/man2/mount_setattr.2.html +// +// Requires kernel >= 5.12. +func MountSetattr(dirfd int, pathname string, flags uint, attr *MountAttr) error { + return mountSetattr(dirfd, pathname, flags, attr, unsafe.Sizeof(*attr)) +} + +func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + return sendfile(outfd, infd, offset, count) +} + +// Sendto +// Recvfrom +// Socketpair + +/* + * Direct access + */ +//sys Acct(path string) (err error) +//sys AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) +//sys Adjtimex(buf *Timex) (state int, err error) +//sysnb Capget(hdr *CapUserHeader, data *CapUserData) (err error) +//sysnb Capset(hdr *CapUserHeader, data *CapUserData) (err error) +//sys Chdir(path string) (err error) +//sys Chroot(path string) (err error) +//sys ClockGetres(clockid int32, res *Timespec) (err error) +//sys ClockGettime(clockid int32, time *Timespec) (err error) +//sys ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) +//sys Close(fd int) (err error) +//sys CloseRange(first uint, last uint, flags uint) (err error) +//sys CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) +//sys DeleteModule(name string, flags int) (err error) +//sys Dup(oldfd int) (fd int, err error) + +func Dup2(oldfd, newfd int) error { + return Dup3(oldfd, newfd, 0) +} + +//sys Dup3(oldfd int, newfd int, flags int) (err error) +//sysnb EpollCreate1(flag int) (fd int, err error) +//sysnb EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) +//sys Eventfd(initval uint, flags int) (fd int, err error) = SYS_EVENTFD2 +//sys Exit(code int) = SYS_EXIT_GROUP +//sys Fallocate(fd int, mode uint32, off int64, len int64) (err error) +//sys Fchdir(fd int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) +//sys Fdatasync(fd int) (err error) +//sys Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) +//sys FinitModule(fd int, params string, flags int) (err error) +//sys Flistxattr(fd int, dest []byte) (sz int, err error) +//sys Flock(fd int, how int) (err error) +//sys Fremovexattr(fd int, attr string) (err error) +//sys Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) +//sys Fsync(fd int) (err error) +//sys Getdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64 +//sysnb Getpgid(pid int) (pgid int, err error) + +func Getpgrp() (pid int) { + pid, _ = Getpgid(0) + return +} + +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sys Getrandom(buf []byte, flags int) (n int, err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettid() (tid int) +//sys Getxattr(path string, attr string, dest []byte) (sz int, err error) +//sys InitModule(moduleImage []byte, params string) (err error) +//sys InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) +//sysnb InotifyInit1(flags int) (fd int, err error) +//sysnb InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) +//sysnb Kill(pid int, sig syscall.Signal) (err error) +//sys Klogctl(typ int, buf []byte) (n int, err error) = SYS_SYSLOG +//sys Lgetxattr(path string, attr string, dest []byte) (sz int, err error) +//sys Listxattr(path string, dest []byte) (sz int, err error) +//sys Llistxattr(path string, dest []byte) (sz int, err error) +//sys Lremovexattr(path string, attr string) (err error) +//sys Lsetxattr(path string, attr string, data []byte, flags int) (err error) +//sys MemfdCreate(name string, flags int) (fd int, err error) +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) +//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) +//sys MoveMount(fromDirfd int, fromPathName string, toDirfd int, toPathName string, flags int) (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys OpenTree(dfd int, fileName string, flags uint) (r int, err error) +//sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) +//sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT +//sysnb Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64 +//sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) +//sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) = SYS_PSELECT6 +//sys read(fd int, p []byte) (n int, err error) +//sys Removexattr(path string, attr string) (err error) +//sys Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) +//sys RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) +//sys Setdomainname(p []byte) (err error) +//sys Sethostname(p []byte) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tv *Timeval) (err error) +//sys Setns(fd int, nstype int) (err error) + +// PrctlRetInt performs a prctl operation specified by option and further +// optional arguments arg2 through arg5 depending on option. It returns a +// non-negative integer that is returned by the prctl syscall. +func PrctlRetInt(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (int, error) { + ret, _, err := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if err != 0 { + return 0, err + } + return int(ret), nil +} + +// issue 1435. +// On linux Setuid and Setgid only affects the current thread, not the process. +// This does not match what most callers expect so we must return an error +// here rather than letting the caller think that the call succeeded. + +func Setuid(uid int) (err error) { + return EOPNOTSUPP +} + +func Setgid(uid int) (err error) { + return EOPNOTSUPP +} + +// SetfsgidRetGid sets fsgid for current thread and returns previous fsgid set. +// setfsgid(2) will return a non-nil error only if its caller lacks CAP_SETUID capability. +// If the call fails due to other reasons, current fsgid will be returned. +func SetfsgidRetGid(gid int) (int, error) { + return setfsgid(gid) +} + +// SetfsuidRetUid sets fsuid for current thread and returns previous fsuid set. +// setfsgid(2) will return a non-nil error only if its caller lacks CAP_SETUID capability +// If the call fails due to other reasons, current fsuid will be returned. +func SetfsuidRetUid(uid int) (int, error) { + return setfsuid(uid) +} + +func Setfsgid(gid int) error { + _, err := setfsgid(gid) + return err +} + +func Setfsuid(uid int) error { + _, err := setfsuid(uid) + return err +} + +func Signalfd(fd int, sigmask *Sigset_t, flags int) (newfd int, err error) { + return signalfd(fd, sigmask, _C__NSIG/8, flags) +} + +//sys Setpriority(which int, who int, prio int) (err error) +//sys Setxattr(path string, attr string, data []byte, flags int) (err error) +//sys signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) = SYS_SIGNALFD4 +//sys Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) +//sys Sync() +//sys Syncfs(fd int) (err error) +//sysnb Sysinfo(info *Sysinfo_t) (err error) +//sys Tee(rfd int, wfd int, len int, flags int) (n int64, err error) +//sysnb TimerfdCreate(clockid int, flags int) (fd int, err error) +//sysnb TimerfdGettime(fd int, currValue *ItimerSpec) (err error) +//sysnb TimerfdSettime(fd int, flags int, newValue *ItimerSpec, oldValue *ItimerSpec) (err error) +//sysnb Tgkill(tgid int, tid int, sig syscall.Signal) (err error) +//sysnb Times(tms *Tms) (ticks uintptr, err error) +//sysnb Umask(mask int) (oldmask int) +//sysnb Uname(buf *Utsname) (err error) +//sys Unmount(target string, flags int) (err error) = SYS_UMOUNT2 +//sys Unshare(flags int) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys exitThread(code int) (err error) = SYS_EXIT +//sys readlen(fd int, p *byte, np int) (n int, err error) = SYS_READ +//sys writelen(fd int, p *byte, np int) (n int, err error) = SYS_WRITE +//sys readv(fd int, iovs []Iovec) (n int, err error) = SYS_READV +//sys writev(fd int, iovs []Iovec) (n int, err error) = SYS_WRITEV +//sys preadv(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) = SYS_PREADV +//sys pwritev(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) = SYS_PWRITEV +//sys preadv2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PREADV2 +//sys pwritev2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PWRITEV2 + +func bytes2iovec(bs [][]byte) []Iovec { + iovecs := make([]Iovec, len(bs)) + for i, b := range bs { + iovecs[i].SetLen(len(b)) + if len(b) > 0 { + iovecs[i].Base = &b[0] + } else { + iovecs[i].Base = (*byte)(unsafe.Pointer(&_zero)) + } + } + return iovecs +} + +// offs2lohi splits offs into its lower and upper unsigned long. On 64-bit +// systems, hi will always be 0. On 32-bit systems, offs will be split in half. +// preadv/pwritev chose this calling convention so they don't need to add a +// padding-register for alignment on ARM. +func offs2lohi(offs int64) (lo, hi uintptr) { + return uintptr(offs), uintptr(uint64(offs) >> SizeofLong) +} + +func Readv(fd int, iovs [][]byte) (n int, err error) { + iovecs := bytes2iovec(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 := bytes2iovec(iovs) + lo, hi := offs2lohi(offset) + n, err = preadv(fd, iovecs, lo, hi) + readvRacedetect(iovecs, n, err) + return n, err +} + +func Preadv2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) { + iovecs := bytes2iovec(iovs) + lo, hi := offs2lohi(offset) + n, err = preadv2(fd, iovecs, lo, hi, flags) + readvRacedetect(iovecs, n, err) + return n, err +} + +func readvRacedetect(iovecs []Iovec, n int, err error) { + if !raceenabled { + return + } + for i := 0; n > 0 && i < len(iovecs); i++ { + m := int(iovecs[i].Len) + if m > n { + m = n + } + n -= m + if m > 0 { + raceWriteRange(unsafe.Pointer(iovecs[i].Base), m) + } + } + if err == nil { + raceAcquire(unsafe.Pointer(&ioSync)) + } +} + +func Writev(fd int, iovs [][]byte) (n int, err error) { + iovecs := bytes2iovec(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 := bytes2iovec(iovs) + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + lo, hi := offs2lohi(offset) + n, err = pwritev(fd, iovecs, lo, hi) + writevRacedetect(iovecs, n) + return n, err +} + +func Pwritev2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) { + iovecs := bytes2iovec(iovs) + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + lo, hi := offs2lohi(offset) + n, err = pwritev2(fd, iovecs, lo, hi, flags) + writevRacedetect(iovecs, n) + return n, err +} + +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) + } + } +} + +// mmap varies by architecture; see syscall_linux_*.go. +//sys munmap(addr uintptr, length uintptr) (err error) + +var mapper = &mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, +} + +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (err error) { + return mapper.Munmap(b) +} + +//sys Madvise(b []byte, advice int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Msync(b []byte, flags int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) + +// Vmsplice splices user pages from a slice of Iovecs into a pipe specified by fd, +// using the specified flags. +func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) { + var p unsafe.Pointer + if len(iovs) > 0 { + p = unsafe.Pointer(&iovs[0]) + } + + n, _, errno := Syscall6(SYS_VMSPLICE, uintptr(fd), uintptr(p), uintptr(len(iovs)), uintptr(flags), 0, 0) + if errno != 0 { + return 0, syscall.Errno(errno) + } + + return int(n), nil +} + +func isGroupMember(gid int) bool { + groups, err := Getgroups() + if err != nil { + return false + } + + for _, g := range groups { + if g == gid { + return true + } + } + return false +} + +//sys faccessat(dirfd int, path string, mode uint32) (err error) +//sys Faccessat2(dirfd int, path string, mode uint32, flags int) (err error) + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + if flags == 0 { + return faccessat(dirfd, path, mode) + } + + if err := Faccessat2(dirfd, path, mode, flags); err != ENOSYS && err != EPERM { + return err + } + + // The Linux kernel faccessat system call does not take any flags. + // The glibc faccessat implements the flags itself; see + // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/faccessat.c;hb=HEAD + // Because people naturally expect syscall.Faccessat to act + // like C faccessat, we do the same. + + if flags & ^(AT_SYMLINK_NOFOLLOW|AT_EACCESS) != 0 { + return EINVAL + } + + var st Stat_t + if err := Fstatat(dirfd, path, &st, flags&AT_SYMLINK_NOFOLLOW); err != nil { + return err + } + + mode &= 7 + if mode == 0 { + return nil + } + + var uid int + if flags&AT_EACCESS != 0 { + uid = Geteuid() + } else { + uid = Getuid() + } + + if uid == 0 { + if mode&1 == 0 { + // Root can read and write any file. + return nil + } + if st.Mode&0111 != 0 { + // Root can execute any file that anybody can execute. + return nil + } + return EACCES + } + + var fmode uint32 + if uint32(uid) == st.Uid { + fmode = (st.Mode >> 6) & 7 + } else { + var gid int + if flags&AT_EACCESS != 0 { + gid = Getegid() + } else { + gid = Getgid() + } + + if uint32(gid) == st.Gid || isGroupMember(gid) { + fmode = (st.Mode >> 3) & 7 + } else { + fmode = st.Mode & 7 + } + } + + if fmode&mode == mode { + return nil + } + + return EACCES +} + +//sys nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) = SYS_NAME_TO_HANDLE_AT +//sys openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) = SYS_OPEN_BY_HANDLE_AT + +// fileHandle is the argument to nameToHandleAt and openByHandleAt. We +// originally tried to generate it via unix/linux/types.go with "type +// fileHandle C.struct_file_handle" but that generated empty structs +// for mips64 and mips64le. Instead, hard code it for now (it's the +// same everywhere else) until the mips64 generator issue is fixed. +type fileHandle struct { + Bytes uint32 + Type int32 +} + +// FileHandle represents the C struct file_handle used by +// name_to_handle_at (see NameToHandleAt) and open_by_handle_at (see +// OpenByHandleAt). +type FileHandle struct { + *fileHandle +} + +// NewFileHandle constructs a FileHandle. +func NewFileHandle(handleType int32, handle []byte) FileHandle { + const hdrSize = unsafe.Sizeof(fileHandle{}) + buf := make([]byte, hdrSize+uintptr(len(handle))) + copy(buf[hdrSize:], handle) + fh := (*fileHandle)(unsafe.Pointer(&buf[0])) + fh.Type = handleType + fh.Bytes = uint32(len(handle)) + return FileHandle{fh} +} + +func (fh *FileHandle) Size() int { return int(fh.fileHandle.Bytes) } +func (fh *FileHandle) Type() int32 { return fh.fileHandle.Type } +func (fh *FileHandle) Bytes() []byte { + n := fh.Size() + if n == 0 { + return nil + } + return (*[1 << 30]byte)(unsafe.Pointer(uintptr(unsafe.Pointer(&fh.fileHandle.Type)) + 4))[:n:n] +} + +// NameToHandleAt wraps the name_to_handle_at system call; it obtains +// a handle for a path name. +func NameToHandleAt(dirfd int, path string, flags int) (handle FileHandle, mountID int, err error) { + var mid _C_int + // Try first with a small buffer, assuming the handle will + // only be 32 bytes. + size := uint32(32 + unsafe.Sizeof(fileHandle{})) + didResize := false + for { + buf := make([]byte, size) + fh := (*fileHandle)(unsafe.Pointer(&buf[0])) + fh.Bytes = size - uint32(unsafe.Sizeof(fileHandle{})) + err = nameToHandleAt(dirfd, path, fh, &mid, flags) + if err == EOVERFLOW { + if didResize { + // We shouldn't need to resize more than once + return + } + didResize = true + size = fh.Bytes + uint32(unsafe.Sizeof(fileHandle{})) + continue + } + if err != nil { + return + } + return FileHandle{fh}, int(mid), nil + } +} + +// OpenByHandleAt wraps the open_by_handle_at system call; it opens a +// file via a handle as previously returned by NameToHandleAt. +func OpenByHandleAt(mountFD int, handle FileHandle, flags int) (fd int, err error) { + return openByHandleAt(mountFD, handle.fileHandle, flags) +} + +// Klogset wraps the sys_syslog system call; it sets console_loglevel to +// the value specified by arg and passes a dummy pointer to bufp. +func Klogset(typ int, arg int) (err error) { + var p unsafe.Pointer + _, _, errno := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(p), uintptr(arg)) + if errno != 0 { + return errnoErr(errno) + } + return nil +} + +// RemoteIovec is Iovec with the pointer replaced with an integer. +// It is used for ProcessVMReadv and ProcessVMWritev, where the pointer +// refers to a location in a different process' address space, which +// would confuse the Go garbage collector. +type RemoteIovec struct { + Base uintptr + Len int +} + +//sys ProcessVMReadv(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) = SYS_PROCESS_VM_READV +//sys ProcessVMWritev(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) = SYS_PROCESS_VM_WRITEV + +//sys PidfdOpen(pid int, flags int) (fd int, err error) = SYS_PIDFD_OPEN +//sys PidfdGetfd(pidfd int, targetfd int, flags int) (fd int, err error) = SYS_PIDFD_GETFD +//sys PidfdSendSignal(pidfd int, sig Signal, info *Siginfo, flags int) (err error) = SYS_PIDFD_SEND_SIGNAL + +//sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error) +//sys shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) +//sys shmdt(addr uintptr) (err error) +//sys shmget(key int, size int, flag int) (id int, err error) + +//sys getitimer(which int, currValue *Itimerval) (err error) +//sys setitimer(which int, newValue *Itimerval, oldValue *Itimerval) (err error) + +// MakeItimerval creates an Itimerval from interval and value durations. +func MakeItimerval(interval, value time.Duration) Itimerval { + return Itimerval{ + Interval: NsecToTimeval(interval.Nanoseconds()), + Value: NsecToTimeval(value.Nanoseconds()), + } +} + +// A value which may be passed to the which parameter for Getitimer and +// Setitimer. +type ItimerWhich int + +// Possible which values for Getitimer and Setitimer. +const ( + ItimerReal ItimerWhich = ITIMER_REAL + ItimerVirtual ItimerWhich = ITIMER_VIRTUAL + ItimerProf ItimerWhich = ITIMER_PROF +) + +// Getitimer wraps getitimer(2) to return the current value of the timer +// specified by which. +func Getitimer(which ItimerWhich) (Itimerval, error) { + var it Itimerval + if err := getitimer(int(which), &it); err != nil { + return Itimerval{}, err + } + + return it, nil +} + +// Setitimer wraps setitimer(2) to arm or disarm the timer specified by which. +// It returns the previous value of the timer. +// +// If the Itimerval argument is the zero value, the timer will be disarmed. +func Setitimer(which ItimerWhich, it Itimerval) (Itimerval, error) { + var prev Itimerval + if err := setitimer(int(which), &it, &prev); err != nil { + return Itimerval{}, err + } + + return prev, nil +} + +/* + * Unimplemented + */ +// AfsSyscall +// ArchPrctl +// Brk +// ClockNanosleep +// ClockSettime +// Clone +// EpollCtlOld +// EpollPwait +// EpollWaitOld +// Execve +// Fork +// Futex +// GetKernelSyms +// GetMempolicy +// GetRobustList +// GetThreadArea +// Getpmsg +// IoCancel +// IoDestroy +// IoGetevents +// IoSetup +// IoSubmit +// IoprioGet +// IoprioSet +// KexecLoad +// LookupDcookie +// Mbind +// MigratePages +// Mincore +// ModifyLdt +// Mount +// MovePages +// MqGetsetattr +// MqNotify +// MqOpen +// MqTimedreceive +// MqTimedsend +// MqUnlink +// Mremap +// Msgctl +// Msgget +// Msgrcv +// Msgsnd +// Nfsservctl +// Personality +// Pselect6 +// Ptrace +// Putpmsg +// Quotactl +// Readahead +// Readv +// RemapFilePages +// RestartSyscall +// RtSigaction +// RtSigpending +// RtSigprocmask +// RtSigqueueinfo +// RtSigreturn +// RtSigsuspend +// RtSigtimedwait +// SchedGetPriorityMax +// SchedGetPriorityMin +// SchedGetparam +// SchedGetscheduler +// SchedRrGetInterval +// SchedSetparam +// SchedYield +// Security +// Semctl +// Semget +// Semop +// Semtimedop +// SetMempolicy +// SetRobustList +// SetThreadArea +// SetTidAddress +// Sigaltstack +// Swapoff +// Swapon +// Sysfs +// TimerCreate +// TimerDelete +// TimerGetoverrun +// TimerGettime +// TimerSettime +// Tkill (obsolete) +// Tuxcall +// Umount2 +// Uselib +// Utimensat +// Vfork +// Vhangup +// Vserver +// _Sysctl diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_386.go b/vendor/golang.org/x/sys/unix/syscall_linux_386.go new file mode 100644 index 0000000..518e476 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_386.go @@ -0,0 +1,346 @@ +// 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 386 && linux +// +build 386,linux + +package unix + +import ( + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} +} + +// 64-bit file system and 32-bit uid calls +// (386 default is 32-bit file system and 16-bit uid). +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64_64 +//sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32 +//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 +//sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 +//sysnb Getegid() (egid int) = SYS_GETEGID32 +//sysnb Geteuid() (euid int) = SYS_GETEUID32 +//sysnb Getgid() (gid int) = SYS_GETGID32 +//sysnb Getuid() (uid int) = SYS_GETUID32 +//sys Ioperm(from int, num int, on int) (err error) +//sys Iopl(level int) (err error) +//sys Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32 +//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 +//sys setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32 +//sys setfsuid(uid int) (prev int, err error) = SYS_SETFSUID32 +//sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID32 +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32 +//sysnb Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32 +//sysnb Setreuid(ruid int, euid int) (err error) = SYS_SETREUID32 +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) +//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) = SYS_GETGROUPS32 +//sysnb setgroups(n int, list *_Gid_t) (err error) = SYS_SETGROUPS32 +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT + +//sys mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) +//sys Pause() (err error) + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + page := uintptr(offset / 4096) + if offset != int64(page)*4096 { + return 0, EINVAL + } + return mmap2(addr, length, prot, flags, fd, page) +} + +type rlimit32 struct { + Cur uint32 + Max uint32 +} + +//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT + +const rlimInf32 = ^uint32(0) +const rlimInf64 = ^uint64(0) + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + err = Prlimit(0, resource, nil, rlim) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + err = getrlimit(resource, &rl) + if err != nil { + return + } + + if rl.Cur == rlimInf32 { + rlim.Cur = rlimInf64 + } else { + rlim.Cur = uint64(rl.Cur) + } + + if rl.Max == rlimInf32 { + rlim.Max = rlimInf64 + } else { + rlim.Max = uint64(rl.Max) + } + return +} + +//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + err = Prlimit(0, resource, rlim, nil) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + if rlim.Cur == rlimInf64 { + rl.Cur = rlimInf32 + } else if rlim.Cur < uint64(rlimInf32) { + rl.Cur = uint32(rlim.Cur) + } else { + return EINVAL + } + if rlim.Max == rlimInf64 { + rl.Max = rlimInf32 + } else if rlim.Max < uint64(rlimInf32) { + rl.Max = uint32(rlim.Max) + } else { + return EINVAL + } + + return setrlimit(resource, &rl) +} + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + newoffset, errno := seek(fd, offset, whence) + if errno != 0 { + return 0, errno + } + return newoffset, nil +} + +//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Time(t *Time_t) (tt Time_t, err error) +//sys Utime(path string, buf *Utimbuf) (err error) +//sys utimes(path string, times *[2]Timeval) (err error) + +// On x86 Linux, all the socket calls go through an extra indirection, +// I think because the 5-register system call interface can't handle +// the 6-argument calls like sendto and recvfrom. Instead the +// arguments to the underlying system call are the number below +// and a pointer to an array of uintptr. We hide the pointer in the +// socketcall assembly to avoid allocation on every system call. + +const ( + // see linux/net.h + _SOCKET = 1 + _BIND = 2 + _CONNECT = 3 + _LISTEN = 4 + _ACCEPT = 5 + _GETSOCKNAME = 6 + _GETPEERNAME = 7 + _SOCKETPAIR = 8 + _SEND = 9 + _RECV = 10 + _SENDTO = 11 + _RECVFROM = 12 + _SHUTDOWN = 13 + _SETSOCKOPT = 14 + _GETSOCKOPT = 15 + _SENDMSG = 16 + _RECVMSG = 17 + _ACCEPT4 = 18 + _RECVMMSG = 19 + _SENDMMSG = 20 +) + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + fd, e := socketcall(_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + if e != 0 { + err = e + } + return +} + +func getsockname(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, e := rawsocketcall(_GETSOCKNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func getpeername(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, e := rawsocketcall(_GETPEERNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) { + _, e := rawsocketcall(_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0) + if e != 0 { + err = e + } + return +} + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, e := socketcall(_BIND, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, e := socketcall(_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func socket(domain int, typ int, proto int) (fd int, err error) { + fd, e := rawsocketcall(_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, e := socketcall(_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e != 0 { + err = e + } + return +} + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, e := socketcall(_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), vallen, 0) + if e != 0 { + err = e + } + return +} + +func recvfrom(s int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var base uintptr + if len(p) > 0 { + base = uintptr(unsafe.Pointer(&p[0])) + } + n, e := socketcall(_RECVFROM, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + if e != 0 { + err = e + } + return +} + +func sendto(s int, p []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var base uintptr + if len(p) > 0 { + base = uintptr(unsafe.Pointer(&p[0])) + } + _, e := socketcall(_SENDTO, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e != 0 { + err = e + } + return +} + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + n, e := socketcall(_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + n, e := socketcall(_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func Listen(s int, n int) (err error) { + _, e := socketcall(_LISTEN, uintptr(s), uintptr(n), 0, 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func Shutdown(s, how int) (err error) { + _, e := socketcall(_SHUTDOWN, uintptr(s), uintptr(how), 0, 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = e + } + return +} + +func Statfs(path string, buf *Statfs_t) (err error) { + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + _, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = e + } + return +} + +func (r *PtraceRegs) PC() uint64 { return uint64(uint32(r.Eip)) } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Eip = int32(pc) } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_alarm.go b/vendor/golang.org/x/sys/unix/syscall_linux_alarm.go new file mode 100644 index 0000000..08086ac --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_alarm.go @@ -0,0 +1,14 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build linux && (386 || amd64 || mips || mipsle || mips64 || mipsle || ppc64 || ppc64le || ppc || s390x || sparc64) +// +build linux +// +build 386 amd64 mips mipsle mips64 mipsle ppc64 ppc64le ppc s390x sparc64 + +package unix + +// SYS_ALARM is not defined on arm or riscv, but is available for other GOARCH +// values. + +//sys Alarm(seconds uint) (remaining uint, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go new file mode 100644 index 0000000..f5e9d6b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go @@ -0,0 +1,151 @@ +// 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 amd64 && linux +// +build amd64,linux + +package unix + +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sys Ioperm(from int, num int, on int) (err error) +//sys Iopl(level int) (err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) + +func Lstat(path string, stat *Stat_t) (err error) { + return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW) +} + +//sys MemfdSecret(flags int) (fd int, err error) +//sys Pause() (err error) +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + var ts *Timespec + if timeout != nil { + ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} + } + return Pselect(nfd, r, w, e, ts, nil) +} + +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys setfsgid(gid int) (prev int, err error) +//sys setfsuid(uid int) (prev int, err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) + +func Stat(path string, stat *Stat_t) (err error) { + // Use fstatat, because Android's seccomp policy blocks stat. + return Fstatat(AT_FDCWD, path, stat, 0) +} + +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) + +func Gettimeofday(tv *Timeval) (err error) { + errno := gettimeofday(tv) + if errno != 0 { + return errno + } + return nil +} + +func Time(t *Time_t) (tt Time_t, err error) { + var tv Timeval + errno := gettimeofday(&tv) + if errno != 0 { + return 0, errno + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +//sys Utime(path string, buf *Utimbuf) (err error) +//sys utimes(path string, times *[2]Timeval) (err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func (r *PtraceRegs) PC() uint64 { return r.Rip } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Rip = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint64(length) +} + +//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) + +func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { + cmdlineLen := len(cmdline) + if cmdlineLen > 0 { + // Account for the additional NULL byte added by + // BytePtrFromString in kexecFileLoad. The kexec_file_load + // syscall expects a NULL-terminated string. + cmdlineLen++ + } + return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go new file mode 100644 index 0000000..8b0f0f3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go @@ -0,0 +1,13 @@ +// 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 && linux && gc +// +build amd64,linux,gc + +package unix + +import "syscall" + +//go:noescape +func gettimeofday(tv *Timeval) (err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go new file mode 100644 index 0000000..c1a7778 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm.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. + +//go:build arm && linux +// +build arm,linux + +package unix + +import ( + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} +} + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + newoffset, errno := seek(fd, offset, whence) + if errno != 0 { + return 0, errno + } + return newoffset, nil +} + +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) = SYS_GETGROUPS32 +//sysnb setgroups(n int, list *_Gid_t) (err error) = SYS_SETGROUPS32 +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) + +// 64-bit file system and 32-bit uid calls +// (16-bit uid calls are not always supported in newer kernels) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32 +//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 +//sysnb Getegid() (egid int) = SYS_GETEGID32 +//sysnb Geteuid() (euid int) = SYS_GETEUID32 +//sysnb Getgid() (gid int) = SYS_GETGID32 +//sysnb Getuid() (uid int) = SYS_GETUID32 +//sys Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32 +//sys Listen(s int, n int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 +//sys Pause() (err error) +//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT +//sys setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32 +//sys setfsuid(uid int) (prev int, err error) = SYS_SETFSUID32 +//sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID32 +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32 +//sysnb Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32 +//sysnb Setreuid(ruid int, euid int) (err error) = SYS_SETREUID32 +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) +//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 +//sys Ustat(dev int, ubuf *Ustat_t) (err error) + +//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) +//sysnb Gettimeofday(tv *Timeval) (err error) + +func Time(t *Time_t) (Time_t, error) { + var tv Timeval + err := Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +func Utime(path string, buf *Utimbuf) error { + tv := []Timeval{ + {Sec: buf.Actime}, + {Sec: buf.Modtime}, + } + return Utimes(path, tv) +} + +//sys utimes(path string, times *[2]Timeval) (err error) + +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 +//sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_ARM_FADVISE64_64, uintptr(fd), uintptr(advice), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +//sys mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = e + } + return +} + +func Statfs(path string, buf *Statfs_t) (err error) { + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + _, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = e + } + return +} + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + page := uintptr(offset / 4096) + if offset != int64(page)*4096 { + return 0, EINVAL + } + return mmap2(addr, length, prot, flags, fd, page) +} + +type rlimit32 struct { + Cur uint32 + Max uint32 +} + +//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_UGETRLIMIT + +const rlimInf32 = ^uint32(0) +const rlimInf64 = ^uint64(0) + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + err = Prlimit(0, resource, nil, rlim) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + err = getrlimit(resource, &rl) + if err != nil { + return + } + + if rl.Cur == rlimInf32 { + rlim.Cur = rlimInf64 + } else { + rlim.Cur = uint64(rl.Cur) + } + + if rl.Max == rlimInf32 { + rlim.Max = rlimInf64 + } else { + rlim.Max = uint64(rl.Max) + } + return +} + +//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + err = Prlimit(0, resource, rlim, nil) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + if rlim.Cur == rlimInf64 { + rl.Cur = rlimInf32 + } else if rlim.Cur < uint64(rlimInf32) { + rl.Cur = uint32(rlim.Cur) + } else { + return EINVAL + } + if rlim.Max == rlimInf64 { + rl.Max = rlimInf32 + } else if rlim.Max < uint64(rlimInf32) { + rl.Max = uint32(rlim.Max) + } else { + return EINVAL + } + + return setrlimit(resource, &rl) +} + +func (r *PtraceRegs) PC() uint64 { return uint64(r.Uregs[15]) } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Uregs[15] = uint32(pc) } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint32(length) +} + +//sys armSyncFileRange(fd int, flags int, off int64, n int64) (err error) = SYS_ARM_SYNC_FILE_RANGE + +func SyncFileRange(fd int, off int64, n int64, flags int) error { + // The sync_file_range and arm_sync_file_range syscalls differ only in the + // order of their arguments. + return armSyncFileRange(fd, flags, off, n) +} + +//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) + +func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { + cmdlineLen := len(cmdline) + if cmdlineLen > 0 { + // Account for the additional NULL byte added by + // BytePtrFromString in kexecFileLoad. The kexec_file_load + // syscall expects a NULL-terminated string. + cmdlineLen++ + } + return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go new file mode 100644 index 0000000..d83e2c6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go @@ -0,0 +1,199 @@ +// 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. + +//go:build arm64 && linux +// +build arm64,linux + +package unix + +import "unsafe" + +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sys Listen(s int, n int) (err error) +//sys MemfdSecret(flags int) (fd int, err error) +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + var ts *Timespec + if timeout != nil { + ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} + } + return Pselect(nfd, r, w, e, ts, nil) +} + +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys setfsgid(gid int) (prev int, err error) +//sys setfsuid(uid int) (prev int, err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) + +func Stat(path string, stat *Stat_t) (err error) { + return Fstatat(AT_FDCWD, path, stat, 0) +} + +func Lchown(path string, uid int, gid int) (err error) { + return Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW) +} + +func Lstat(path string, stat *Stat_t) (err error) { + return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW) +} + +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + return ENOSYS +} + +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +//sysnb Gettimeofday(tv *Timeval) (err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func futimesat(dirfd int, path string, tv *[2]Timeval) (err error) { + if tv == nil { + return utimensat(dirfd, path, nil, 0) + } + + ts := []Timespec{ + NsecToTimespec(TimevalToNsec(tv[0])), + NsecToTimespec(TimevalToNsec(tv[1])), + } + return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) +} + +func Time(t *Time_t) (Time_t, error) { + var tv Timeval + err := Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +func Utime(path string, buf *Utimbuf) error { + tv := []Timeval{ + {Sec: buf.Actime}, + {Sec: buf.Modtime}, + } + return Utimes(path, tv) +} + +func utimes(path string, tv *[2]Timeval) (err error) { + if tv == nil { + return utimensat(AT_FDCWD, path, nil, 0) + } + + ts := []Timespec{ + NsecToTimespec(TimevalToNsec(tv[0])), + NsecToTimespec(TimevalToNsec(tv[1])), + } + return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) +} + +// Getrlimit prefers the prlimit64 system call. See issue 38604. +func Getrlimit(resource int, rlim *Rlimit) error { + err := Prlimit(0, resource, nil, rlim) + if err != ENOSYS { + return err + } + return getrlimit(resource, rlim) +} + +// Setrlimit prefers the prlimit64 system call. See issue 38604. +func Setrlimit(resource int, rlim *Rlimit) error { + err := Prlimit(0, resource, rlim, nil) + if err != ENOSYS { + return err + } + return setrlimit(resource, rlim) +} + +func (r *PtraceRegs) PC() uint64 { return r.Pc } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint64(length) +} + +func Pause() error { + _, err := ppoll(nil, 0, nil, nil) + return err +} + +//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) + +func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { + cmdlineLen := len(cmdline) + if cmdlineLen > 0 { + // Account for the additional NULL byte added by + // BytePtrFromString in kexecFileLoad. The kexec_file_load + // syscall expects a NULL-terminated string. + cmdlineLen++ + } + return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_gc.go b/vendor/golang.org/x/sys/unix/syscall_linux_gc.go new file mode 100644 index 0000000..2b1168d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_gc.go @@ -0,0 +1,15 @@ +// 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 linux && gc +// +build linux,gc + +package unix + +// SyscallNoError may be used instead of Syscall for syscalls that don't fail. +func SyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) + +// RawSyscallNoError may be used instead of RawSyscall for syscalls that don't +// fail. +func RawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go b/vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go new file mode 100644 index 0000000..9843fb4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go @@ -0,0 +1,17 @@ +// 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 linux && gc && 386 +// +build linux,gc,386 + +package unix + +import "syscall" + +// Underlying system call writes to newoffset via pointer. +// Implemented in assembly to avoid allocation. +func seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno) + +func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno) +func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go new file mode 100644 index 0000000..a6008fc --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go @@ -0,0 +1,14 @@ +// 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 arm && gc && linux +// +build arm,gc,linux + +package unix + +import "syscall" + +// Underlying system call writes to newoffset via pointer. +// Implemented in assembly to avoid allocation. +func seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go b/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go new file mode 100644 index 0000000..7740af2 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.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 linux && gccgo && 386 +// +build linux,gccgo,386 + +package unix + +import ( + "syscall" + "unsafe" +) + +func seek(fd int, offset int64, whence int) (int64, syscall.Errno) { + var newoffset int64 + offsetLow := uint32(offset & 0xffffffff) + offsetHigh := uint32((offset >> 32) & 0xffffffff) + _, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0) + return newoffset, err +} + +func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno) { + fd, _, err := Syscall(SYS_SOCKETCALL, uintptr(call), uintptr(unsafe.Pointer(&a0)), 0) + return int(fd), err +} + +func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno) { + fd, _, err := RawSyscall(SYS_SOCKETCALL, uintptr(call), uintptr(unsafe.Pointer(&a0)), 0) + return int(fd), err +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go new file mode 100644 index 0000000..e16a122 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go @@ -0,0 +1,21 @@ +// 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 linux && gccgo && arm +// +build linux,gccgo,arm + +package unix + +import ( + "syscall" + "unsafe" +) + +func seek(fd int, offset int64, whence int) (int64, syscall.Errno) { + var newoffset int64 + offsetLow := uint32(offset & 0xffffffff) + offsetHigh := uint32((offset >> 32) & 0xffffffff) + _, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0) + return newoffset, err +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go new file mode 100644 index 0000000..98a2660 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go @@ -0,0 +1,195 @@ +// 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. + +//go:build linux && (mips64 || mips64le) +// +build linux +// +build mips64 mips64le + +package unix + +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys Pause() (err error) +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + var ts *Timespec + if timeout != nil { + ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} + } + return Pselect(nfd, r, w, e, ts, nil) +} + +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys setfsgid(gid int) (prev int, err error) +//sys setfsuid(uid int) (prev int, err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) +//sysnb Gettimeofday(tv *Timeval) (err error) + +func Time(t *Time_t) (tt Time_t, err error) { + var tv Timeval + err = Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +//sys Utime(path string, buf *Utimbuf) (err error) +//sys utimes(path string, times *[2]Timeval) (err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func Ioperm(from int, num int, on int) (err error) { + return ENOSYS +} + +func Iopl(level int) (err error) { + return ENOSYS +} + +type stat_t struct { + Dev uint32 + Pad0 [3]int32 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint32 + Pad1 [3]uint32 + Size int64 + Atime uint32 + Atime_nsec uint32 + Mtime uint32 + Mtime_nsec uint32 + Ctime uint32 + Ctime_nsec uint32 + Blksize uint32 + Pad2 uint32 + Blocks int64 +} + +//sys fstat(fd int, st *stat_t) (err error) +//sys fstatat(dirfd int, path string, st *stat_t, flags int) (err error) = SYS_NEWFSTATAT +//sys lstat(path string, st *stat_t) (err error) +//sys stat(path string, st *stat_t) (err error) + +func Fstat(fd int, s *Stat_t) (err error) { + st := &stat_t{} + err = fstat(fd, st) + fillStat_t(s, st) + return +} + +func Fstatat(dirfd int, path string, s *Stat_t, flags int) (err error) { + st := &stat_t{} + err = fstatat(dirfd, path, st, flags) + fillStat_t(s, st) + return +} + +func Lstat(path string, s *Stat_t) (err error) { + st := &stat_t{} + err = lstat(path, st) + fillStat_t(s, st) + return +} + +func Stat(path string, s *Stat_t) (err error) { + st := &stat_t{} + err = stat(path, st) + fillStat_t(s, st) + return +} + +func fillStat_t(s *Stat_t, st *stat_t) { + s.Dev = st.Dev + s.Ino = st.Ino + s.Mode = st.Mode + s.Nlink = st.Nlink + s.Uid = st.Uid + s.Gid = st.Gid + s.Rdev = st.Rdev + s.Size = st.Size + s.Atim = Timespec{int64(st.Atime), int64(st.Atime_nsec)} + s.Mtim = Timespec{int64(st.Mtime), int64(st.Mtime_nsec)} + s.Ctim = Timespec{int64(st.Ctime), int64(st.Ctime_nsec)} + s.Blksize = st.Blksize + s.Blocks = st.Blocks +} + +func (r *PtraceRegs) PC() uint64 { return r.Epc } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint64(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go new file mode 100644 index 0000000..b8a18c0 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go @@ -0,0 +1,207 @@ +// 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 linux && (mips || mipsle) +// +build linux +// +build mips mipsle + +package unix + +import ( + "syscall" + "unsafe" +) + +func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getuid() (uid int) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 +//sys setfsgid(gid int) (prev int, err error) +//sys setfsuid(uid int) (prev int, err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) + +//sys Ioperm(from int, num int, on int) (err error) +//sys Iopl(level int) (err error) + +//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Time(t *Time_t) (tt Time_t, err error) +//sys Utime(path string, buf *Utimbuf) (err error) +//sys utimes(path string, times *[2]Timeval) (err error) + +//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 +//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 +//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 + +//sys Pause() (err error) + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = errnoErr(e) + } + return +} + +func Statfs(path string, buf *Statfs_t) (err error) { + p, err := BytePtrFromString(path) + if err != nil { + return err + } + _, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(p)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = errnoErr(e) + } + return +} + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + _, _, e := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offset>>32), uintptr(offset), uintptr(unsafe.Pointer(&off)), uintptr(whence), 0) + if e != 0 { + err = errnoErr(e) + } + return +} + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} +} + +//sys mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + page := uintptr(offset / 4096) + if offset != int64(page)*4096 { + return 0, EINVAL + } + return mmap2(addr, length, prot, flags, fd, page) +} + +const rlimInf32 = ^uint32(0) +const rlimInf64 = ^uint64(0) + +type rlimit32 struct { + Cur uint32 + Max uint32 +} + +//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + err = Prlimit(0, resource, nil, rlim) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + err = getrlimit(resource, &rl) + if err != nil { + return + } + + if rl.Cur == rlimInf32 { + rlim.Cur = rlimInf64 + } else { + rlim.Cur = uint64(rl.Cur) + } + + if rl.Max == rlimInf32 { + rlim.Max = rlimInf64 + } else { + rlim.Max = uint64(rl.Max) + } + return +} + +//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + err = Prlimit(0, resource, rlim, nil) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + if rlim.Cur == rlimInf64 { + rl.Cur = rlimInf32 + } else if rlim.Cur < uint64(rlimInf32) { + rl.Cur = uint32(rlim.Cur) + } else { + return EINVAL + } + if rlim.Max == rlimInf64 { + rl.Max = rlimInf32 + } else if rlim.Max < uint64(rlimInf32) { + rl.Max = uint32(rlim.Max) + } else { + return EINVAL + } + + return setrlimit(resource, &rl) +} + +func (r *PtraceRegs) PC() uint64 { return r.Epc } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go new file mode 100644 index 0000000..4ed9e67 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go @@ -0,0 +1,236 @@ +// 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 linux && ppc +// +build linux,ppc + +package unix + +import ( + "syscall" + "unsafe" +) + +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 +//sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getuid() (uid int) +//sys Ioperm(from int, num int, on int) (err error) +//sys Iopl(level int) (err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 +//sys Pause() (err error) +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 +//sys setfsgid(gid int) (prev int, err error) +//sys setfsuid(uid int) (prev int, err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) +//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 +//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) + +//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Time(t *Time_t) (tt Time_t, err error) +//sys Utime(path string, buf *Utimbuf) (err error) +//sys utimes(path string, times *[2]Timeval) (err error) + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64_64, uintptr(fd), uintptr(advice), uintptr(offset>>32), uintptr(offset), uintptr(length>>32), uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +func seek(fd int, offset int64, whence int) (int64, syscall.Errno) { + var newoffset int64 + offsetLow := uint32(offset & 0xffffffff) + offsetHigh := uint32((offset >> 32) & 0xffffffff) + _, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0) + return newoffset, err +} + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + newoffset, errno := seek(fd, offset, whence) + if errno != 0 { + return 0, errno + } + return newoffset, nil +} + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = e + } + return +} + +func Statfs(path string, buf *Statfs_t) (err error) { + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + _, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = e + } + return +} + +//sys mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + page := uintptr(offset / 4096) + if offset != int64(page)*4096 { + return 0, EINVAL + } + return mmap2(addr, length, prot, flags, fd, page) +} + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} +} + +type rlimit32 struct { + Cur uint32 + Max uint32 +} + +//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_UGETRLIMIT + +const rlimInf32 = ^uint32(0) +const rlimInf64 = ^uint64(0) + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + err = Prlimit(0, resource, nil, rlim) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + err = getrlimit(resource, &rl) + if err != nil { + return + } + + if rl.Cur == rlimInf32 { + rlim.Cur = rlimInf64 + } else { + rlim.Cur = uint64(rl.Cur) + } + + if rl.Max == rlimInf32 { + rlim.Max = rlimInf64 + } else { + rlim.Max = uint64(rl.Max) + } + return +} + +//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + err = Prlimit(0, resource, rlim, nil) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + if rlim.Cur == rlimInf64 { + rl.Cur = rlimInf32 + } else if rlim.Cur < uint64(rlimInf32) { + rl.Cur = uint32(rlim.Cur) + } else { + return EINVAL + } + if rlim.Max == rlimInf64 { + rl.Max = rlimInf32 + } else if rlim.Max < uint64(rlimInf32) { + rl.Max = uint32(rlim.Max) + } else { + return EINVAL + } + + return setrlimit(resource, &rl) +} + +func (r *PtraceRegs) PC() uint32 { return r.Nip } + +func (r *PtraceRegs) SetPC(pc uint32) { r.Nip = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint32(length) +} + +//sys syncFileRange2(fd int, flags int, off int64, n int64) (err error) = SYS_SYNC_FILE_RANGE2 + +func SyncFileRange(fd int, off int64, n int64, flags int) error { + // The sync_file_range and sync_file_range2 syscalls differ only in the + // order of their arguments. + return syncFileRange2(fd, flags, off, n) +} + +//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) + +func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { + cmdlineLen := len(cmdline) + if cmdlineLen > 0 { + // Account for the additional NULL byte added by + // BytePtrFromString in kexecFileLoad. The kexec_file_load + // syscall expects a NULL-terminated string. + cmdlineLen++ + } + return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go new file mode 100644 index 0000000..db63d38 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go @@ -0,0 +1,122 @@ +// 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 linux && (ppc64 || ppc64le) +// +build linux +// +build ppc64 ppc64le + +package unix + +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) = SYS_UGETRLIMIT +//sysnb Getuid() (uid int) +//sys Ioperm(from int, num int, on int) (err error) +//sys Iopl(level int) (err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Pause() (err error) +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys setfsgid(gid int) (prev int, err error) +//sys setfsuid(uid int) (prev int, err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys Truncate(path string, length int64) (err error) +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Time(t *Time_t) (tt Time_t, err error) +//sys Utime(path string, buf *Utimbuf) (err error) +//sys utimes(path string, times *[2]Timeval) (err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func (r *PtraceRegs) PC() uint64 { return r.Nip } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Nip = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint64(length) +} + +//sys syncFileRange2(fd int, flags int, off int64, n int64) (err error) = SYS_SYNC_FILE_RANGE2 + +func SyncFileRange(fd int, off int64, n int64, flags int) error { + // The sync_file_range and sync_file_range2 syscalls differ only in the + // order of their arguments. + return syncFileRange2(fd, flags, off, n) +} + +//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) + +func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { + cmdlineLen := len(cmdline) + if cmdlineLen > 0 { + // Account for the additional NULL byte added by + // BytePtrFromString in kexecFileLoad. The kexec_file_load + // syscall expects a NULL-terminated string. + cmdlineLen++ + } + return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go new file mode 100644 index 0000000..8ff7adb --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go @@ -0,0 +1,183 @@ +// 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 riscv64 && linux +// +build riscv64,linux + +package unix + +import "unsafe" + +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sys Listen(s int, n int) (err error) +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + var ts *Timespec + if timeout != nil { + ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} + } + return Pselect(nfd, r, w, e, ts, nil) +} + +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys setfsgid(gid int) (prev int, err error) +//sys setfsuid(uid int) (prev int, err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) + +func Stat(path string, stat *Stat_t) (err error) { + return Fstatat(AT_FDCWD, path, stat, 0) +} + +func Lchown(path string, uid int, gid int) (err error) { + return Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW) +} + +func Lstat(path string, stat *Stat_t) (err error) { + return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW) +} + +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + return ENOSYS +} + +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +//sysnb Gettimeofday(tv *Timeval) (err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func futimesat(dirfd int, path string, tv *[2]Timeval) (err error) { + if tv == nil { + return utimensat(dirfd, path, nil, 0) + } + + ts := []Timespec{ + NsecToTimespec(TimevalToNsec(tv[0])), + NsecToTimespec(TimevalToNsec(tv[1])), + } + return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) +} + +func Time(t *Time_t) (Time_t, error) { + var tv Timeval + err := Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +func Utime(path string, buf *Utimbuf) error { + tv := []Timeval{ + {Sec: buf.Actime}, + {Sec: buf.Modtime}, + } + return Utimes(path, tv) +} + +func utimes(path string, tv *[2]Timeval) (err error) { + if tv == nil { + return utimensat(AT_FDCWD, path, nil, 0) + } + + ts := []Timespec{ + NsecToTimespec(TimevalToNsec(tv[0])), + NsecToTimespec(TimevalToNsec(tv[1])), + } + return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) +} + +func (r *PtraceRegs) PC() uint64 { return r.Pc } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint64(length) +} + +func Pause() error { + _, err := ppoll(nil, 0, nil, nil) + return err +} + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + return Renameat2(olddirfd, oldpath, newdirfd, newpath, 0) +} + +//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) + +func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { + cmdlineLen := len(cmdline) + if cmdlineLen > 0 { + // Account for the additional NULL byte added by + // BytePtrFromString in kexecFileLoad. The kexec_file_load + // syscall expects a NULL-terminated string. + cmdlineLen++ + } + return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go new file mode 100644 index 0000000..6fcf277 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go @@ -0,0 +1,302 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build s390x && linux +// +build s390x,linux + +package unix + +import ( + "unsafe" +) + +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Pause() (err error) +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys setfsgid(gid int) (prev int, err error) +//sys setfsuid(uid int) (prev int, err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) + +//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) +//sysnb Gettimeofday(tv *Timeval) (err error) + +func Time(t *Time_t) (tt Time_t, err error) { + var tv Timeval + err = Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +//sys Utime(path string, buf *Utimbuf) (err error) +//sys utimes(path string, times *[2]Timeval) (err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func Ioperm(from int, num int, on int) (err error) { + return ENOSYS +} + +func Iopl(level int) (err error) { + return ENOSYS +} + +func (r *PtraceRegs) PC() uint64 { return r.Psw.Addr } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Psw.Addr = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint64(length) +} + +// Linux on s390x uses the old mmap interface, which requires arguments to be passed in a struct. +// mmap2 also requires arguments to be passed in a struct; it is currently not exposed in . +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + mmap_args := [6]uintptr{addr, length, uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)} + r0, _, e1 := Syscall(SYS_MMAP, uintptr(unsafe.Pointer(&mmap_args[0])), 0, 0) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// On s390x Linux, all the socket calls go through an extra indirection. +// The arguments to the underlying system call (SYS_SOCKETCALL) are the +// number below and a pointer to an array of uintptr. +const ( + // see linux/net.h + netSocket = 1 + netBind = 2 + netConnect = 3 + netListen = 4 + netAccept = 5 + netGetSockName = 6 + netGetPeerName = 7 + netSocketPair = 8 + netSend = 9 + netRecv = 10 + netSendTo = 11 + netRecvFrom = 12 + netShutdown = 13 + netSetSockOpt = 14 + netGetSockOpt = 15 + netSendMsg = 16 + netRecvMsg = 17 + netAccept4 = 18 + netRecvMMsg = 19 + netSendMMsg = 20 +) + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (int, error) { + args := [4]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags)} + fd, _, err := Syscall(SYS_SOCKETCALL, netAccept4, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(fd), nil +} + +func getsockname(s int, rsa *RawSockaddrAny, addrlen *_Socklen) error { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))} + _, _, err := RawSyscall(SYS_SOCKETCALL, netGetSockName, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func getpeername(s int, rsa *RawSockaddrAny, addrlen *_Socklen) error { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))} + _, _, err := RawSyscall(SYS_SOCKETCALL, netGetPeerName, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func socketpair(domain int, typ int, flags int, fd *[2]int32) error { + args := [4]uintptr{uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd))} + _, _, err := RawSyscall(SYS_SOCKETCALL, netSocketPair, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) error { + args := [3]uintptr{uintptr(s), uintptr(addr), uintptr(addrlen)} + _, _, err := Syscall(SYS_SOCKETCALL, netBind, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) error { + args := [3]uintptr{uintptr(s), uintptr(addr), uintptr(addrlen)} + _, _, err := Syscall(SYS_SOCKETCALL, netConnect, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func socket(domain int, typ int, proto int) (int, error) { + args := [3]uintptr{uintptr(domain), uintptr(typ), uintptr(proto)} + fd, _, err := RawSyscall(SYS_SOCKETCALL, netSocket, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(fd), nil +} + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) error { + args := [5]uintptr{uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen))} + _, _, err := Syscall(SYS_SOCKETCALL, netGetSockOpt, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) error { + args := [5]uintptr{uintptr(s), uintptr(level), uintptr(name), uintptr(val), vallen} + _, _, err := Syscall(SYS_SOCKETCALL, netSetSockOpt, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func recvfrom(s int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (int, error) { + var base uintptr + if len(p) > 0 { + base = uintptr(unsafe.Pointer(&p[0])) + } + args := [6]uintptr{uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))} + n, _, err := Syscall(SYS_SOCKETCALL, netRecvFrom, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(n), nil +} + +func sendto(s int, p []byte, flags int, to unsafe.Pointer, addrlen _Socklen) error { + var base uintptr + if len(p) > 0 { + base = uintptr(unsafe.Pointer(&p[0])) + } + args := [6]uintptr{uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(to), uintptr(addrlen)} + _, _, err := Syscall(SYS_SOCKETCALL, netSendTo, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func recvmsg(s int, msg *Msghdr, flags int) (int, error) { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)} + n, _, err := Syscall(SYS_SOCKETCALL, netRecvMsg, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(n), nil +} + +func sendmsg(s int, msg *Msghdr, flags int) (int, error) { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)} + n, _, err := Syscall(SYS_SOCKETCALL, netSendMsg, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(n), nil +} + +func Listen(s int, n int) error { + args := [2]uintptr{uintptr(s), uintptr(n)} + _, _, err := Syscall(SYS_SOCKETCALL, netListen, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func Shutdown(s, how int) error { + args := [2]uintptr{uintptr(s), uintptr(how)} + _, _, err := Syscall(SYS_SOCKETCALL, netShutdown, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) + +func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { + cmdlineLen := len(cmdline) + if cmdlineLen > 0 { + // Account for the additional NULL byte added by + // BytePtrFromString in kexecFileLoad. The kexec_file_load + // syscall expects a NULL-terminated string. + cmdlineLen++ + } + return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go new file mode 100644 index 0000000..02a45d9 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go @@ -0,0 +1,118 @@ +// 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 sparc64 && linux +// +build sparc64,linux + +package unix + +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Pause() (err error) +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys setfsgid(gid int) (prev int, err error) +//sys setfsuid(uid int) (prev int, err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +func Ioperm(from int, num int, on int) (err error) { + return ENOSYS +} + +func Iopl(level int) (err error) { + return ENOSYS +} + +//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) +//sysnb Gettimeofday(tv *Timeval) (err error) + +func Time(t *Time_t) (tt Time_t, err error) { + var tv Timeval + err = Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +//sys Utime(path string, buf *Utimbuf) (err error) +//sys utimes(path string, times *[2]Timeval) (err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func (r *PtraceRegs) PC() uint64 { return r.Tpc } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Tpc = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint64(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd.go b/vendor/golang.org/x/sys/unix/syscall_netbsd.go new file mode 100644 index 0000000..666f0a1 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd.go @@ -0,0 +1,609 @@ +// Copyright 2009,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. + +// NetBSD system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import ( + "runtime" + "syscall" + "unsafe" +) + +// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 + raw RawSockaddrDatalink +} + +func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { + return nil, EAFNOSUPPORT +} + +func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +func sysctlNodes(mib []_C_int) (nodes []Sysctlnode, err error) { + var olen uintptr + + // Get a list of all sysctl nodes below the given MIB by performing + // a sysctl for the given MIB with CTL_QUERY appended. + mib = append(mib, CTL_QUERY) + qnode := Sysctlnode{Flags: SYSCTL_VERS_1} + qp := (*byte)(unsafe.Pointer(&qnode)) + sz := unsafe.Sizeof(qnode) + if err = sysctl(mib, nil, &olen, qp, sz); err != nil { + return nil, err + } + + // Now that we know the size, get the actual nodes. + nodes = make([]Sysctlnode, olen/sz) + np := (*byte)(unsafe.Pointer(&nodes[0])) + if err = sysctl(mib, np, &olen, qp, sz); err != nil { + return nil, err + } + + return nodes, nil +} + +func nametomib(name string) (mib []_C_int, err error) { + // Split name into components. + var parts []string + last := 0 + for i := 0; i < len(name); i++ { + if name[i] == '.' { + parts = append(parts, name[last:i]) + last = i + 1 + } + } + parts = append(parts, name[last:]) + + // Discover the nodes and construct the MIB OID. + for partno, part := range parts { + nodes, err := sysctlNodes(mib) + if err != nil { + return nil, err + } + for _, node := range nodes { + n := make([]byte, 0) + for i := range node.Name { + if node.Name[i] != 0 { + n = append(n, byte(node.Name[i])) + } + } + if string(n) == part { + mib = append(mib, _C_int(node.Num)) + break + } + } + if len(mib) != partno+1 { + return nil, EINVAL + } + } + + return mib, nil +} + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) +} + +func direntReclen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) +} + +func direntNamlen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) +} + +func Pipe(p []int) (err error) { + return Pipe2(p, 0) +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) error { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err := pipe2(&pp, flags) + if err == nil { + p[0] = int(pp[0]) + p[1] = int(pp[1]) + } + return err +} + +//sys Getdents(fd int, buf []byte) (n int, err error) + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + n, err = Getdents(fd, buf) + if err != nil || basep == nil { + return + } + + var off int64 + off, err = Seek(fd, 0, 1 /* SEEK_CUR */) + if err != nil { + *basep = ^uintptr(0) + return + } + *basep = uintptr(off) + if unsafe.Sizeof(*basep) == 8 { + return + } + if off>>32 != 0 { + // We can't stuff the offset back into a uintptr, so any + // future calls would be suspect. Generate an error. + // EIO is allowed by getdirentries. + err = EIO + } + return +} + +//sys Getcwd(buf []byte) (n int, err error) = SYS___GETCWD + +// TODO +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + return -1, ENOSYS +} + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL + +func IoctlGetPtmget(fd int, req uint) (*Ptmget, error) { + var value Ptmget + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + runtime.KeepAlive(value) + return &value, err +} + +func Uname(uname *Utsname) error { + mib := []_C_int{CTL_KERN, KERN_OSTYPE} + n := unsafe.Sizeof(uname.Sysname) + if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_HOSTNAME} + n = unsafe.Sizeof(uname.Nodename) + if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_OSRELEASE} + n = unsafe.Sizeof(uname.Release) + if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_VERSION} + n = unsafe.Sizeof(uname.Version) + if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil { + return err + } + + // The version might have newlines or tabs in it, convert them to + // spaces. + for i, b := range uname.Version { + if b == '\n' || b == '\t' { + if i == len(uname.Version)-1 { + uname.Version[i] = 0 + } else { + uname.Version[i] = ' ' + } + } + } + + mib = []_C_int{CTL_HW, HW_MACHINE} + n = unsafe.Sizeof(uname.Machine) + if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil { + return err + } + + return nil +} + +func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + return sendfile(outfd, infd, offset, count) +} + +func Fstatvfs(fd int, buf *Statvfs_t) (err error) { + return Fstatvfs1(fd, buf, ST_WAIT) +} + +func Statvfs(path string, buf *Statvfs_t) (err error) { + return Statvfs1(path, buf, ST_WAIT) +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Dup3(from int, to int, flags int) (err error) +//sys Exit(code int) +//sys ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) +//sys ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) +//sys ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) +//sys ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) +//sys Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) = SYS_FSTATVFS1 +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Issetugid() (tainted bool) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) +//sys Listen(s int, backlog int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mkfifoat(dirfd int, path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys pread(fd int, p []byte, offset int64) (n int, err error) +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Renameat(fromfd int, from string, tofd int, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statvfs1(path string, buf *Statvfs_t, flags int) (err error) = SYS_STATVFS1 +//sys Symlink(path string, link string) (err error) +//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Unlink(path string) (err error) +//sys Unlinkat(dirfd int, path string, flags int) (err error) +//sys Unmount(path string, flags int) (err error) +//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 readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE +//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) + +/* + * Unimplemented + */ +// ____semctl13 +// __clone +// __fhopen40 +// __fhstat40 +// __fhstatvfs140 +// __fstat30 +// __getcwd +// __getfh30 +// __getlogin +// __lstat30 +// __mount50 +// __msgctl13 +// __msync13 +// __ntp_gettime30 +// __posix_chown +// __posix_fchown +// __posix_lchown +// __posix_rename +// __setlogin +// __shmctl13 +// __sigaction_sigtramp +// __sigaltstack14 +// __sigpending14 +// __sigprocmask14 +// __sigsuspend14 +// __sigtimedwait +// __stat30 +// __syscall +// __vfork14 +// _ksem_close +// _ksem_destroy +// _ksem_getvalue +// _ksem_init +// _ksem_open +// _ksem_post +// _ksem_trywait +// _ksem_unlink +// _ksem_wait +// _lwp_continue +// _lwp_create +// _lwp_ctl +// _lwp_detach +// _lwp_exit +// _lwp_getname +// _lwp_getprivate +// _lwp_kill +// _lwp_park +// _lwp_self +// _lwp_setname +// _lwp_setprivate +// _lwp_suspend +// _lwp_unpark +// _lwp_unpark_all +// _lwp_wait +// _lwp_wakeup +// _pset_bind +// _sched_getaffinity +// _sched_getparam +// _sched_setaffinity +// _sched_setparam +// acct +// aio_cancel +// aio_error +// aio_fsync +// aio_read +// aio_return +// aio_suspend +// aio_write +// break +// clock_getres +// clock_gettime +// clock_settime +// compat_09_ogetdomainname +// compat_09_osetdomainname +// compat_09_ouname +// compat_10_omsgsys +// compat_10_osemsys +// compat_10_oshmsys +// compat_12_fstat12 +// compat_12_getdirentries +// compat_12_lstat12 +// compat_12_msync +// compat_12_oreboot +// compat_12_oswapon +// compat_12_stat12 +// compat_13_sigaction13 +// compat_13_sigaltstack13 +// compat_13_sigpending13 +// compat_13_sigprocmask13 +// compat_13_sigreturn13 +// compat_13_sigsuspend13 +// compat_14___semctl +// compat_14_msgctl +// compat_14_shmctl +// compat_16___sigaction14 +// compat_16___sigreturn14 +// compat_20_fhstatfs +// compat_20_fstatfs +// compat_20_getfsstat +// compat_20_statfs +// compat_30___fhstat30 +// compat_30___fstat13 +// compat_30___lstat13 +// compat_30___stat13 +// compat_30_fhopen +// compat_30_fhstat +// compat_30_fhstatvfs1 +// compat_30_getdents +// compat_30_getfh +// compat_30_ntp_gettime +// compat_30_socket +// compat_40_mount +// compat_43_fstat43 +// compat_43_lstat43 +// compat_43_oaccept +// compat_43_ocreat +// compat_43_oftruncate +// compat_43_ogetdirentries +// compat_43_ogetdtablesize +// compat_43_ogethostid +// compat_43_ogethostname +// compat_43_ogetkerninfo +// compat_43_ogetpagesize +// compat_43_ogetpeername +// compat_43_ogetrlimit +// compat_43_ogetsockname +// compat_43_okillpg +// compat_43_olseek +// compat_43_ommap +// compat_43_oquota +// compat_43_orecv +// compat_43_orecvfrom +// compat_43_orecvmsg +// compat_43_osend +// compat_43_osendmsg +// compat_43_osethostid +// compat_43_osethostname +// compat_43_osetrlimit +// compat_43_osigblock +// compat_43_osigsetmask +// compat_43_osigstack +// compat_43_osigvec +// compat_43_otruncate +// compat_43_owait +// compat_43_stat43 +// execve +// extattr_delete_fd +// extattr_delete_file +// extattr_delete_link +// extattr_get_fd +// extattr_get_file +// extattr_get_link +// extattr_list_fd +// extattr_list_file +// extattr_list_link +// extattr_set_fd +// extattr_set_file +// extattr_set_link +// extattrctl +// fchroot +// fdatasync +// fgetxattr +// fktrace +// flistxattr +// fork +// fremovexattr +// fsetxattr +// fstatvfs1 +// fsync_range +// getcontext +// getitimer +// getvfsstat +// getxattr +// ktrace +// lchflags +// lchmod +// lfs_bmapv +// lfs_markv +// lfs_segclean +// lfs_segwait +// lgetxattr +// lio_listio +// listxattr +// llistxattr +// lremovexattr +// lseek +// lsetxattr +// lutimes +// madvise +// mincore +// minherit +// modctl +// mq_close +// mq_getattr +// mq_notify +// mq_open +// mq_receive +// mq_send +// mq_setattr +// mq_timedreceive +// mq_timedsend +// mq_unlink +// mremap +// msgget +// msgrcv +// msgsnd +// nfssvc +// ntp_adjtime +// pmc_control +// pmc_get_info +// pollts +// preadv +// profil +// pselect +// pset_assign +// pset_create +// pset_destroy +// ptrace +// pwritev +// quotactl +// rasctl +// readv +// reboot +// removexattr +// sa_enable +// sa_preempt +// sa_register +// sa_setconcurrency +// sa_stacks +// sa_yield +// sbrk +// sched_yield +// semconfig +// semget +// semop +// setcontext +// setitimer +// setxattr +// shmat +// shmdt +// shmget +// sstk +// statvfs1 +// swapctl +// sysarch +// syscall +// timer_create +// timer_delete +// timer_getoverrun +// timer_gettime +// timer_settime +// undelete +// utrace +// uuidgen +// vadvise +// vfork +// writev diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go new file mode 100644 index 0000000..5199d28 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go @@ -0,0 +1,38 @@ +// 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 386 && netbsd +// +build 386,netbsd + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = uint32(mode) + k.Flags = uint32(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = int32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go new file mode 100644 index 0000000..70a9c52 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go @@ -0,0 +1,38 @@ +// 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 amd64 && netbsd +// +build amd64,netbsd + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = uint32(mode) + k.Flags = uint32(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = int32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go new file mode 100644 index 0000000..3eb5942 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.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 arm && netbsd +// +build arm,netbsd + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = uint32(mode) + k.Flags = uint32(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = int32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go new file mode 100644 index 0000000..fc6ccfd --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go @@ -0,0 +1,38 @@ +// 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 arm64 && netbsd +// +build arm64,netbsd + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = uint32(mode) + k.Flags = uint32(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = int32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/vendor/golang.org/x/sys/unix/syscall_openbsd.go new file mode 100644 index 0000000..15d637d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd.go @@ -0,0 +1,387 @@ +// Copyright 2009,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. + +// OpenBSD system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import ( + "sort" + "syscall" + "unsafe" +) + +// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [24]int8 + raw RawSockaddrDatalink +} + +func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { + return nil, EAFNOSUPPORT +} + +func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +func nametomib(name string) (mib []_C_int, err error) { + i := sort.Search(len(sysctlMib), func(i int) bool { + return sysctlMib[i].ctlname >= name + }) + if i < len(sysctlMib) && sysctlMib[i].ctlname == name { + return sysctlMib[i].ctloid, nil + } + return nil, EINVAL +} + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) +} + +func direntReclen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) +} + +func direntNamlen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) +} + +func SysctlUvmexp(name string) (*Uvmexp, error) { + mib, err := sysctlmib(name) + if err != nil { + return nil, err + } + + n := uintptr(SizeofUvmexp) + var u Uvmexp + if err := sysctl(mib, (*byte)(unsafe.Pointer(&u)), &n, nil, 0); err != nil { + return nil, err + } + if n != SizeofUvmexp { + return nil, EIO + } + return &u, nil +} + +func Pipe(p []int) (err error) { + return Pipe2(p, 0) +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) +func Pipe2(p []int, flags int) error { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err := pipe2(&pp, flags) + if err == nil { + p[0] = int(pp[0]) + p[1] = int(pp[1]) + } + return err +} + +//sys Getdents(fd int, buf []byte) (n int, err error) +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + n, err = Getdents(fd, buf) + if err != nil || basep == nil { + return + } + + var off int64 + off, err = Seek(fd, 0, 1 /* SEEK_CUR */) + if err != nil { + *basep = ^uintptr(0) + return + } + *basep = uintptr(off) + if unsafe.Sizeof(*basep) == 8 { + return + } + if off>>32 != 0 { + // We can't stuff the offset back into a uintptr, so any + // future calls would be suspect. Generate an error. + // EIO was allowed by getdirentries. + err = EIO + } + return +} + +//sys Getcwd(buf []byte) (n int, err error) = SYS___GETCWD + +func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + return sendfile(outfd, infd, offset, count) +} + +// TODO +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + return -1, ENOSYS +} + +func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { + var _p0 unsafe.Pointer + var bufsize uintptr + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) + } + r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL + +//sys ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) + +func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + if len(fds) == 0 { + return ppoll(nil, 0, timeout, sigmask) + } + return ppoll(&fds[0], len(fds), timeout, sigmask) +} + +func Uname(uname *Utsname) error { + mib := []_C_int{CTL_KERN, KERN_OSTYPE} + n := unsafe.Sizeof(uname.Sysname) + if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_HOSTNAME} + n = unsafe.Sizeof(uname.Nodename) + if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_OSRELEASE} + n = unsafe.Sizeof(uname.Release) + if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_VERSION} + n = unsafe.Sizeof(uname.Version) + if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil { + return err + } + + // The version might have newlines or tabs in it, convert them to + // spaces. + for i, b := range uname.Version { + if b == '\n' || b == '\t' { + if i == len(uname.Version)-1 { + uname.Version[i] = 0 + } else { + uname.Version[i] = ' ' + } + } + } + + mib = []_C_int{CTL_HW, HW_MACHINE} + n = unsafe.Sizeof(uname.Machine) + if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil { + return err + } + + return nil +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Dup3(from int, to int, flags int) (err error) +//sys Exit(code int) +//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) +//sys Fstatfs(fd int, stat *Statfs_t) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrtable() (rtable int, err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Issetugid() (tainted bool) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) +//sys Listen(s int, backlog int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mkfifoat(dirfd int, path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys pread(fd int, p []byte, offset int64) (n int, err error) +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Renameat(fromfd int, from string, tofd int, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Setlogin(name string) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setrtable(rtable int) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, stat *Statfs_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Unlink(path string) (err error) +//sys Unlinkat(dirfd int, path string, flags int) (err error) +//sys Unmount(path string, flags int) (err error) +//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 readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE +//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) + +/* + * Unimplemented + */ +// __getcwd +// __semctl +// __syscall +// __sysctl +// adjfreq +// break +// clock_getres +// clock_gettime +// clock_settime +// closefrom +// execve +// fhopen +// fhstat +// fhstatfs +// fork +// futimens +// getfh +// getgid +// getitimer +// getlogin +// getresgid +// getresuid +// getthrid +// ktrace +// lfs_bmapv +// lfs_markv +// lfs_segclean +// lfs_segwait +// mincore +// minherit +// mount +// mquery +// msgctl +// msgget +// msgrcv +// msgsnd +// nfssvc +// nnpfspioctl +// preadv +// profil +// pwritev +// quotactl +// readv +// reboot +// renameat +// rfork +// sched_yield +// semget +// semop +// setgroups +// setitimer +// setsockopt +// shmat +// shmctl +// shmdt +// shmget +// sigaction +// sigaltstack +// sigpending +// sigprocmask +// sigreturn +// sigsuspend +// sysarch +// syscall +// threxit +// thrsigdivert +// thrsleep +// thrwakeup +// vfork +// writev diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go new file mode 100644 index 0000000..6baabcd --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go @@ -0,0 +1,42 @@ +// 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 386 && openbsd +// +build 386,openbsd + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions +// of openbsd/386 the syscall is called sysctl instead of __sysctl. +const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go new file mode 100644 index 0000000..bab2536 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go @@ -0,0 +1,42 @@ +// 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 amd64 && openbsd +// +build amd64,openbsd + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions +// of openbsd/amd64 the syscall is called sysctl instead of __sysctl. +const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go new file mode 100644 index 0000000..8eed3c4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go @@ -0,0 +1,42 @@ +// 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 && openbsd +// +build arm,openbsd + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions +// of openbsd/arm the syscall is called sysctl instead of __sysctl. +const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go new file mode 100644 index 0000000..483dde9 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go @@ -0,0 +1,42 @@ +// 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 arm64 && openbsd +// +build arm64,openbsd + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions +// of openbsd/amd64 the syscall is called sysctl instead of __sysctl. +const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go new file mode 100644 index 0000000..30f2853 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go @@ -0,0 +1,35 @@ +// 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 unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions +// of OpenBSD the syscall is called sysctl instead of __sysctl. +const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go new file mode 100644 index 0000000..5c2003c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go @@ -0,0 +1,1004 @@ +// 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. + +// Solaris system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_solaris.go or syscall_unix.go. + +package unix + +import ( + "fmt" + "os" + "runtime" + "sync" + "syscall" + "unsafe" +) + +// Implemented in runtime/syscall_solaris.go. +type syscallFunc uintptr + +func rawSysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) +func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) + +// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. +type SockaddrDatalink struct { + Family uint16 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [244]int8 + raw RawSockaddrDatalink +} + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) +} + +func direntReclen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) +} + +func direntNamlen(buf []byte) (uint64, bool) { + reclen, ok := direntReclen(buf) + if !ok { + return 0, false + } + return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true +} + +//sysnb pipe(p *[2]_C_int) (n int, err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + n, err := pipe(&pp) + if n != 0 { + return err + } + if err == nil { + p[0] = int(pp[0]) + p[1] = int(pp[1]) + } + return nil +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) error { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err := pipe2(&pp, flags) + if err == nil { + p[0] = int(pp[0]) + p[1] = int(pp[1]) + } + return err +} + +func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, 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), SizeofSockaddrInet4, nil +} + +func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, 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), SizeofSockaddrInet6, nil +} + +func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { + name := sa.Name + n := len(name) + if n >= len(sa.raw.Path) { + return nil, 0, 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 := _Socklen(2) + if n > 0 { + sl += _Socklen(n) + 1 + } + if sa.raw.Path[0] == '@' { + sa.raw.Path[0] = 0 + // Don't count trailing NUL for abstract address. + sl-- + } + + return unsafe.Pointer(&sa.raw), sl, nil +} + +//sys getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getsockname + +func Getsockname(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getsockname(fd, &rsa, &len); err != nil { + return + } + return anyToSockaddr(fd, &rsa) +} + +// GetsockoptString returns the string value of the socket option opt for the +// socket associated with fd at the given socket level. +func GetsockoptString(fd, level, opt int) (string, error) { + buf := make([]byte, 256) + vallen := _Socklen(len(buf)) + err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen) + if err != nil { + return "", err + } + return string(buf[:vallen-1]), nil +} + +const ImplementsGetwd = true + +//sys Getcwd(buf []byte) (n int, err error) + +func Getwd() (wd string, err error) { + var buf [PathMax]byte + // Getcwd will return an error if it failed for any reason. + _, err = Getcwd(buf[0:]) + if err != nil { + return "", err + } + n := clen(buf[:]) + if n < 1 { + return "", EINVAL + } + return string(buf[:n]), nil +} + +/* + * Wrapped + */ + +//sysnb getgroups(ngid int, gid *_Gid_t) (n int, err error) +//sysnb setgroups(ngid int, gid *_Gid_t) (err error) + +func Getgroups() (gids []int, err error) { + n, err := getgroups(0, nil) + // Check for error and sanity check group count. Newer versions of + // Solaris allow up to 1024 (NGROUPS_MAX). + if n < 0 || n > 1024 { + if err != nil { + return nil, err + } + return nil, EINVAL + } else if n == 0 { + return nil, nil + } + + a := make([]_Gid_t, n) + n, err = getgroups(n, &a[0]) + if n == -1 { + return nil, err + } + gids = make([]int, n) + for i, v := range a[0:n] { + gids[i] = int(v) + } + return +} + +func Setgroups(gids []int) (err error) { + if len(gids) == 0 { + return setgroups(0, nil) + } + + a := make([]_Gid_t, len(gids)) + for i, v := range gids { + a[i] = _Gid_t(v) + } + return setgroups(len(a), &a[0]) +} + +// ReadDirent reads directory entries from fd and writes them into buf. +func ReadDirent(fd int, buf []byte) (n int, err error) { + // Final argument is (basep *uintptr) and the syscall doesn't take nil. + // TODO(rsc): Can we use a single global basep for all calls? + return Getdents(fd, buf, new(uintptr)) +} + +// Wait status is 7 bits at bottom, either 0 (exited), +// 0x7F (stopped), or a signal number that caused an exit. +// The 0x80 bit is whether there was a core dump. +// An extra number (exit code, signal causing a stop) +// is in the high bits. + +type WaitStatus uint32 + +const ( + mask = 0x7F + core = 0x80 + shift = 8 + + exited = 0 + stopped = 0x7F +) + +func (w WaitStatus) Exited() bool { return w&mask == exited } + +func (w WaitStatus) ExitStatus() int { + if w&mask != exited { + return -1 + } + return int(w >> shift) +} + +func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != 0 } + +func (w WaitStatus) Signal() syscall.Signal { + sig := syscall.Signal(w & mask) + if sig == stopped || sig == 0 { + return -1 + } + return sig +} + +func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 } + +func (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP } + +func (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP } + +func (w WaitStatus) StopSignal() syscall.Signal { + if !w.Stopped() { + return -1 + } + return syscall.Signal(w>>shift) & 0xFF +} + +func (w WaitStatus) TrapCause() int { return -1 } + +//sys wait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32, err error) + +func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (int, error) { + var status _C_int + rpid, err := wait4(int32(pid), &status, options, rusage) + wpid := int(rpid) + if wpid == -1 { + return wpid, err + } + if wstatus != nil { + *wstatus = WaitStatus(status) + } + return wpid, nil +} + +//sys gethostname(buf []byte) (n int, err error) + +func Gethostname() (name string, err error) { + var buf [MaxHostNameLen]byte + n, err := gethostname(buf[:]) + if n != 0 { + return "", err + } + n = clen(buf[:]) + if n < 1 { + return "", EFAULT + } + return string(buf[:n]), nil +} + +//sys utimes(path string, times *[2]Timeval) (err error) + +func Utimes(path string, tv []Timeval) (err error) { + if tv == nil { + return utimes(path, nil) + } + if len(tv) != 2 { + return EINVAL + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +//sys utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) + +func UtimesNano(path string, ts []Timespec) error { + if ts == nil { + return utimensat(AT_FDCWD, path, nil, 0) + } + if len(ts) != 2 { + return EINVAL + } + return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) +} + +func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { + if ts == nil { + return utimensat(dirfd, path, nil, flags) + } + if len(ts) != 2 { + return EINVAL + } + return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) +} + +//sys fcntl(fd int, cmd int, arg int) (val int, err error) + +// FcntlInt performs a fcntl syscall on fd with the provided command and argument. +func FcntlInt(fd uintptr, cmd, arg int) (int, error) { + valptr, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0) + var err error + if errno != 0 { + err = errno + } + return int(valptr), err +} + +// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command. +func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(unsafe.Pointer(lk)), 0, 0, 0) + if e1 != 0 { + return e1 + } + return nil +} + +//sys futimesat(fildes int, path *byte, times *[2]Timeval) (err error) + +func Futimesat(dirfd int, path string, tv []Timeval) error { + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + if tv == nil { + return futimesat(dirfd, pathp, nil) + } + if len(tv) != 2 { + return EINVAL + } + return futimesat(dirfd, pathp, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +// Solaris doesn't have an futimes function because it allows NULL to be +// specified as the path for futimesat. However, Go doesn't like +// NULL-style string interfaces, so this simple wrapper is provided. +func Futimes(fd int, tv []Timeval) error { + if tv == nil { + return futimesat(fd, nil, nil) + } + if len(tv) != 2 { + return EINVAL + } + return futimesat(fd, nil, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { + switch rsa.Addr.Family { + case AF_UNIX: + pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) + sa := new(SockaddrUnix) + // Assume path ends at NUL. + // This is not technically the Solaris 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++ + } + bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] + sa.Name = string(bytes) + 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, EAFNOSUPPORT +} + +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) = libsocket.accept + +func Accept(fd int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept(fd, &rsa, &len) + if nfd == -1 { + return + } + sa, err = anyToSockaddr(fd, &rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_recvmsg + +func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { + var msg Msghdr + msg.Name = (*byte)(unsafe.Pointer(rsa)) + msg.Namelen = uint32(SizeofSockaddrAny) + var iov Iovec + if len(p) > 0 { + iov.Base = (*int8)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy int8 + if len(oob) > 0 { + // receive at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Accrightslen = int32(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = recvmsg(fd, &msg, flags); n == -1 { + return + } + oobn = int(msg.Accrightslen) + return +} + +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_sendmsg + +func sendmsgN(fd int, p, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { + var msg Msghdr + msg.Name = (*byte)(unsafe.Pointer(ptr)) + msg.Namelen = uint32(salen) + var iov Iovec + if len(p) > 0 { + iov.Base = (*int8)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy int8 + if len(oob) > 0 { + // send at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Accrightslen = int32(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = sendmsg(fd, &msg, flags); err != nil { + return 0, err + } + if len(oob) > 0 && len(p) == 0 { + n = 0 + } + return n, nil +} + +//sys acct(path *byte) (err error) + +func Acct(path string) (err error) { + if len(path) == 0 { + // Assume caller wants to disable accounting. + return acct(nil) + } + + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + return acct(pathp) +} + +//sys __makedev(version int, major uint, minor uint) (val uint64) + +func Mkdev(major, minor uint32) uint64 { + return __makedev(NEWDEV, uint(major), uint(minor)) +} + +//sys __major(version int, dev uint64) (val uint) + +func Major(dev uint64) uint32 { + return uint32(__major(NEWDEV, dev)) +} + +//sys __minor(version int, dev uint64) (val uint) + +func Minor(dev uint64) uint32 { + return uint32(__minor(NEWDEV, dev)) +} + +/* + * Expose the ioctl function + */ + +//sys ioctlRet(fd int, req uint, arg uintptr) (ret int, err error) = libc.ioctl + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, err = ioctlRet(fd, req, arg) + return err +} + +func IoctlSetTermio(fd int, req uint, value *Termio) error { + err := ioctl(fd, req, uintptr(unsafe.Pointer(value))) + runtime.KeepAlive(value) + return err +} + +func IoctlGetTermio(fd int, req uint) (*Termio, error) { + var value Termio + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} + +func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + return sendfile(outfd, infd, offset, count) +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Creat(path string, mode uint32) (fd int, err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(oldfd int, newfd int) (err error) +//sys Exit(code int) +//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchdir(fd int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) +//sys Fdatasync(fd int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) +//sys Fstatvfs(fd int, vfsstat *Statvfs_t) (err error) +//sys Getdents(fd int, buf []byte, basep *uintptr) (n int, err error) +//sysnb Getgid() (gid int) +//sysnb Getpid() (pid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgid int, err error) +//sys Geteuid() (euid int) +//sys Getegid() (egid int) +//sys Getppid() (ppid int) +//sys Getpriority(which int, who int) (n int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Listen(s int, backlog int) (err error) = libsocket.__xnet_llisten +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Madvise(b []byte, advice int) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mkfifoat(dirfd int, path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Msync(b []byte, flags int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys Pause() (err error) +//sys pread(fd int, p []byte, offset int64) (n int, err error) +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = lseek +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Sethostname(p []byte) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Setuid(uid int) (err error) +//sys Shutdown(s int, how int) (err error) = libsocket.shutdown +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statvfs(path string, vfsstat *Statvfs_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Sync() (err error) +//sys Sysconf(which int) (n int64, err error) +//sysnb Times(tms *Tms) (ticks uintptr, err error) +//sys Truncate(path string, length int64) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sys Umask(mask int) (oldmask int) +//sysnb Uname(buf *Utsname) (err error) +//sys Unmount(target string, flags int) (err error) = libc.umount +//sys Unlink(path string) (err error) +//sys Unlinkat(dirfd int, path string, flags int) (err error) +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys Utime(path string, buf *Utimbuf) (err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_bind +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_connect +//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 sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = libsendfile.sendfile +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_sendto +//sys socket(domain int, typ int, proto int) (fd int, err error) = libsocket.__xnet_socket +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) = libsocket.__xnet_socketpair +//sys write(fd int, p []byte) (n int, err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) = libsocket.__xnet_getsockopt +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getpeername +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) = libsocket.setsockopt +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) = libsocket.recvfrom + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procread)), 3, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwrite)), 3, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +var mapper = &mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, +} + +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (err error) { + return mapper.Munmap(b) +} + +// Event Ports + +type fileObjCookie struct { + fobj *fileObj + cookie interface{} +} + +// EventPort provides a safe abstraction on top of Solaris/illumos Event Ports. +type EventPort struct { + port int + mu sync.Mutex + fds map[uintptr]*fileObjCookie + paths map[string]*fileObjCookie + // The user cookie presents an interesting challenge from a memory management perspective. + // There are two paths by which we can discover that it is no longer in use: + // 1. The user calls port_dissociate before any events fire + // 2. An event fires and we return it to the user + // The tricky situation is if the event has fired in the kernel but + // the user hasn't requested/received it yet. + // If the user wants to port_dissociate before the event has been processed, + // we should handle things gracefully. To do so, we need to keep an extra + // reference to the cookie around until the event is processed + // thus the otherwise seemingly extraneous "cookies" map + // The key of this map is a pointer to the corresponding &fCookie.cookie + cookies map[*interface{}]*fileObjCookie +} + +// PortEvent is an abstraction of the port_event C struct. +// Compare Source against PORT_SOURCE_FILE or PORT_SOURCE_FD +// to see if Path or Fd was the event source. The other will be +// uninitialized. +type PortEvent struct { + Cookie interface{} + Events int32 + Fd uintptr + Path string + Source uint16 + fobj *fileObj +} + +// NewEventPort creates a new EventPort including the +// underlying call to port_create(3c). +func NewEventPort() (*EventPort, error) { + port, err := port_create() + if err != nil { + return nil, err + } + e := &EventPort{ + port: port, + fds: make(map[uintptr]*fileObjCookie), + paths: make(map[string]*fileObjCookie), + cookies: make(map[*interface{}]*fileObjCookie), + } + return e, nil +} + +//sys port_create() (n int, err error) +//sys port_associate(port int, source int, object uintptr, events int, user *byte) (n int, err error) +//sys port_dissociate(port int, source int, object uintptr) (n int, err error) +//sys port_get(port int, pe *portEvent, timeout *Timespec) (n int, err error) +//sys port_getn(port int, pe *portEvent, max uint32, nget *uint32, timeout *Timespec) (n int, err error) + +// Close closes the event port. +func (e *EventPort) Close() error { + e.mu.Lock() + defer e.mu.Unlock() + err := Close(e.port) + if err != nil { + return err + } + e.fds = nil + e.paths = nil + return nil +} + +// PathIsWatched checks to see if path is associated with this EventPort. +func (e *EventPort) PathIsWatched(path string) bool { + e.mu.Lock() + defer e.mu.Unlock() + _, found := e.paths[path] + return found +} + +// FdIsWatched checks to see if fd is associated with this EventPort. +func (e *EventPort) FdIsWatched(fd uintptr) bool { + e.mu.Lock() + defer e.mu.Unlock() + _, found := e.fds[fd] + return found +} + +// AssociatePath wraps port_associate(3c) for a filesystem path including +// creating the necessary file_obj from the provided stat information. +func (e *EventPort) AssociatePath(path string, stat os.FileInfo, events int, cookie interface{}) error { + e.mu.Lock() + defer e.mu.Unlock() + if _, found := e.paths[path]; found { + return fmt.Errorf("%v is already associated with this Event Port", path) + } + fobj, err := createFileObj(path, stat) + if err != nil { + return err + } + fCookie := &fileObjCookie{fobj, cookie} + _, err = port_associate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(fobj)), events, (*byte)(unsafe.Pointer(&fCookie.cookie))) + if err != nil { + return err + } + e.paths[path] = fCookie + e.cookies[&fCookie.cookie] = fCookie + return nil +} + +// DissociatePath wraps port_dissociate(3c) for a filesystem path. +func (e *EventPort) DissociatePath(path string) error { + e.mu.Lock() + defer e.mu.Unlock() + f, ok := e.paths[path] + if !ok { + return fmt.Errorf("%v is not associated with this Event Port", path) + } + _, err := port_dissociate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(f.fobj))) + // If the path is no longer associated with this event port (ENOENT) + // we should delete it from our map. We can still return ENOENT to the caller. + // But we need to save the cookie + if err != nil && err != ENOENT { + return err + } + if err == nil { + // dissociate was successful, safe to delete the cookie + fCookie := e.paths[path] + delete(e.cookies, &fCookie.cookie) + } + delete(e.paths, path) + return err +} + +// AssociateFd wraps calls to port_associate(3c) on file descriptors. +func (e *EventPort) AssociateFd(fd uintptr, events int, cookie interface{}) error { + e.mu.Lock() + defer e.mu.Unlock() + if _, found := e.fds[fd]; found { + return fmt.Errorf("%v is already associated with this Event Port", fd) + } + fCookie := &fileObjCookie{nil, cookie} + _, err := port_associate(e.port, PORT_SOURCE_FD, fd, events, (*byte)(unsafe.Pointer(&fCookie.cookie))) + if err != nil { + return err + } + e.fds[fd] = fCookie + e.cookies[&fCookie.cookie] = fCookie + return nil +} + +// DissociateFd wraps calls to port_dissociate(3c) on file descriptors. +func (e *EventPort) DissociateFd(fd uintptr) error { + e.mu.Lock() + defer e.mu.Unlock() + _, ok := e.fds[fd] + if !ok { + return fmt.Errorf("%v is not associated with this Event Port", fd) + } + _, err := port_dissociate(e.port, PORT_SOURCE_FD, fd) + if err != nil && err != ENOENT { + return err + } + if err == nil { + // dissociate was successful, safe to delete the cookie + fCookie := e.fds[fd] + delete(e.cookies, &fCookie.cookie) + } + delete(e.fds, fd) + return err +} + +func createFileObj(name string, stat os.FileInfo) (*fileObj, error) { + fobj := new(fileObj) + bs, err := ByteSliceFromString(name) + if err != nil { + return nil, err + } + fobj.Name = (*int8)(unsafe.Pointer(&bs[0])) + s := stat.Sys().(*syscall.Stat_t) + fobj.Atim.Sec = s.Atim.Sec + fobj.Atim.Nsec = s.Atim.Nsec + fobj.Mtim.Sec = s.Mtim.Sec + fobj.Mtim.Nsec = s.Mtim.Nsec + fobj.Ctim.Sec = s.Ctim.Sec + fobj.Ctim.Nsec = s.Ctim.Nsec + return fobj, nil +} + +// GetOne wraps port_get(3c) and returns a single PortEvent. +func (e *EventPort) GetOne(t *Timespec) (*PortEvent, error) { + pe := new(portEvent) + _, err := port_get(e.port, pe, t) + if err != nil { + return nil, err + } + p := new(PortEvent) + e.mu.Lock() + defer e.mu.Unlock() + e.peIntToExt(pe, p) + return p, nil +} + +// peIntToExt converts a cgo portEvent struct into the friendlier PortEvent +// NOTE: Always call this function while holding the e.mu mutex +func (e *EventPort) peIntToExt(peInt *portEvent, peExt *PortEvent) { + peExt.Events = peInt.Events + peExt.Source = peInt.Source + cookie := (*interface{})(unsafe.Pointer(peInt.User)) + peExt.Cookie = *cookie + switch peInt.Source { + case PORT_SOURCE_FD: + delete(e.cookies, cookie) + peExt.Fd = uintptr(peInt.Object) + // Only remove the fds entry if it exists and this cookie matches + if fobj, ok := e.fds[peExt.Fd]; ok { + if &fobj.cookie == cookie { + delete(e.fds, peExt.Fd) + } + } + case PORT_SOURCE_FILE: + if fCookie, ok := e.cookies[cookie]; ok && uintptr(unsafe.Pointer(fCookie.fobj)) == uintptr(peInt.Object) { + // Use our stashed reference rather than using unsafe on what we got back + // the unsafe version would be (*fileObj)(unsafe.Pointer(uintptr(peInt.Object))) + peExt.fobj = fCookie.fobj + } else { + panic("mismanaged memory") + } + delete(e.cookies, cookie) + peExt.Path = BytePtrToString((*byte)(unsafe.Pointer(peExt.fobj.Name))) + // Only remove the paths entry if it exists and this cookie matches + if fobj, ok := e.paths[peExt.Path]; ok { + if &fobj.cookie == cookie { + delete(e.paths, peExt.Path) + } + } + } +} + +// Pending wraps port_getn(3c) and returns how many events are pending. +func (e *EventPort) Pending() (int, error) { + var n uint32 = 0 + _, err := port_getn(e.port, nil, 0, &n, nil) + return int(n), err +} + +// Get wraps port_getn(3c) and fills a slice of PortEvent. +// It will block until either min events have been received +// or the timeout has been exceeded. It will return how many +// events were actually received along with any error information. +func (e *EventPort) Get(s []PortEvent, min int, timeout *Timespec) (int, error) { + if min == 0 { + return 0, fmt.Errorf("need to request at least one event or use Pending() instead") + } + if len(s) < min { + return 0, fmt.Errorf("len(s) (%d) is less than min events requested (%d)", len(s), min) + } + got := uint32(min) + max := uint32(len(s)) + var err error + ps := make([]portEvent, max, max) + _, err = port_getn(e.port, &ps[0], max, &got, timeout) + // got will be trustworthy with ETIME, but not any other error. + if err != nil && err != ETIME { + return 0, err + } + e.mu.Lock() + defer e.mu.Unlock() + for i := 0; i < int(got); i++ { + e.peIntToExt(&ps[i], &s[i]) + } + return int(got), err +} diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go new file mode 100644 index 0000000..0bd25ef --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go @@ -0,0 +1,28 @@ +// 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 amd64 && solaris +// +build amd64,solaris + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = int32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_unix.go b/vendor/golang.org/x/sys/unix/syscall_unix.go new file mode 100644 index 0000000..70508af --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_unix.go @@ -0,0 +1,486 @@ +// 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 aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix + +import ( + "bytes" + "sort" + "sync" + "syscall" + "unsafe" + + "golang.org/x/sys/internal/unsafeheader" +) + +var ( + Stdin = 0 + Stdout = 1 + Stderr = 2 +) + +// Do the interface allocations only once for common +// Errno values. +var ( + errEAGAIN error = syscall.EAGAIN + errEINVAL error = syscall.EINVAL + errENOENT error = syscall.ENOENT +) + +var ( + signalNameMapOnce sync.Once + signalNameMap map[string]syscall.Signal +) + +// errnoErr returns common boxed Errno values, to prevent +// allocations at runtime. +func errnoErr(e syscall.Errno) error { + switch e { + case 0: + return nil + case EAGAIN: + return errEAGAIN + case EINVAL: + return errEINVAL + case ENOENT: + return errENOENT + } + return e +} + +// ErrnoName returns the error name for error number e. +func ErrnoName(e syscall.Errno) string { + i := sort.Search(len(errorList), func(i int) bool { + return errorList[i].num >= e + }) + if i < len(errorList) && errorList[i].num == e { + return errorList[i].name + } + return "" +} + +// SignalName returns the signal name for signal number s. +func SignalName(s syscall.Signal) string { + i := sort.Search(len(signalList), func(i int) bool { + return signalList[i].num >= s + }) + if i < len(signalList) && signalList[i].num == s { + return signalList[i].name + } + return "" +} + +// SignalNum returns the syscall.Signal for signal named s, +// or 0 if a signal with such name is not found. +// The signal name should start with "SIG". +func SignalNum(s string) syscall.Signal { + signalNameMapOnce.Do(func() { + signalNameMap = make(map[string]syscall.Signal, len(signalList)) + for _, signal := range signalList { + signalNameMap[signal.name] = signal.num + } + }) + return signalNameMap[s] +} + +// clen returns the index of the first NULL byte in n or len(n) if n contains no NULL byte. +func clen(n []byte) int { + i := bytes.IndexByte(n, 0) + if i == -1 { + i = len(n) + } + return i +} + +// Mmap manager, for use by operating system-specific implementations. + +type mmapper struct { + sync.Mutex + active map[*byte][]byte // active mappings; key is last byte in mapping + mmap func(addr, length uintptr, prot, flags, fd int, offset int64) (uintptr, error) + munmap func(addr uintptr, length uintptr) error +} + +func (m *mmapper) Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + if length <= 0 { + return nil, EINVAL + } + + // Map the requested memory. + addr, errno := m.mmap(0, uintptr(length), prot, flags, fd, offset) + if errno != nil { + return nil, errno + } + + // Use unsafe to convert addr into a []byte. + var b []byte + hdr := (*unsafeheader.Slice)(unsafe.Pointer(&b)) + hdr.Data = unsafe.Pointer(addr) + hdr.Cap = length + hdr.Len = length + + // Register mapping in m and return it. + p := &b[cap(b)-1] + m.Lock() + defer m.Unlock() + m.active[p] = b + return b, nil +} + +func (m *mmapper) Munmap(data []byte) (err error) { + if len(data) == 0 || len(data) != cap(data) { + return EINVAL + } + + // Find the base of the mapping. + p := &data[cap(data)-1] + m.Lock() + defer m.Unlock() + b := m.active[p] + if b == nil || &b[0] != &data[0] { + return EINVAL + } + + // Unmap the memory and update m. + if errno := m.munmap(uintptr(unsafe.Pointer(&b[0])), uintptr(len(b))); errno != nil { + return errno + } + delete(m.active, p) + return nil +} + +func Read(fd int, p []byte) (n int, err error) { + n, err = read(fd, p) + if raceenabled { + if n > 0 { + raceWriteRange(unsafe.Pointer(&p[0]), n) + } + if err == nil { + raceAcquire(unsafe.Pointer(&ioSync)) + } + } + return +} + +func Write(fd int, p []byte) (n int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + n, err = write(fd, p) + if raceenabled && n > 0 { + raceReadRange(unsafe.Pointer(&p[0]), n) + } + return +} + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + n, err = pread(fd, p, offset) + if raceenabled { + if n > 0 { + raceWriteRange(unsafe.Pointer(&p[0]), n) + } + if err == nil { + raceAcquire(unsafe.Pointer(&ioSync)) + } + } + return +} + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + n, err = pwrite(fd, p, offset) + if raceenabled && n > 0 { + raceReadRange(unsafe.Pointer(&p[0]), n) + } + return +} + +// For testing: clients can set this flag to force +// creation of IPv6 sockets to return EAFNOSUPPORT. +var SocketDisableIPv6 bool + +// Sockaddr represents a socket address. +type Sockaddr interface { + sockaddr() (ptr unsafe.Pointer, len _Socklen, err error) // lowercase; only we can define Sockaddrs +} + +// SockaddrInet4 implements the Sockaddr interface for AF_INET type sockets. +type SockaddrInet4 struct { + Port int + Addr [4]byte + raw RawSockaddrInet4 +} + +// SockaddrInet6 implements the Sockaddr interface for AF_INET6 type sockets. +type SockaddrInet6 struct { + Port int + ZoneId uint32 + Addr [16]byte + raw RawSockaddrInet6 +} + +// SockaddrUnix implements the Sockaddr interface for AF_UNIX type sockets. +type SockaddrUnix struct { + Name string + raw RawSockaddrUnix +} + +func Bind(fd int, sa Sockaddr) (err error) { + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return bind(fd, ptr, n) +} + +func Connect(fd int, sa Sockaddr) (err error) { + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return connect(fd, ptr, n) +} + +func Getpeername(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getpeername(fd, &rsa, &len); err != nil { + return + } + return anyToSockaddr(fd, &rsa) +} + +func GetsockoptByte(fd, level, opt int) (value byte, err error) { + var n byte + vallen := _Socklen(1) + err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen) + return n, err +} + +func GetsockoptInt(fd, level, opt int) (value int, err error) { + var n int32 + vallen := _Socklen(4) + err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen) + return int(n), err +} + +func GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, err error) { + vallen := _Socklen(4) + err = getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen) + return value, err +} + +func GetsockoptIPMreq(fd, level, opt int) (*IPMreq, error) { + var value IPMreq + vallen := _Socklen(SizeofIPMreq) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) { + var value IPv6Mreq + vallen := _Socklen(SizeofIPv6Mreq) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) { + var value IPv6MTUInfo + vallen := _Socklen(SizeofIPv6MTUInfo) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) { + var value ICMPv6Filter + vallen := _Socklen(SizeofICMPv6Filter) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptLinger(fd, level, opt int) (*Linger, error) { + var linger Linger + vallen := _Socklen(SizeofLinger) + err := getsockopt(fd, level, opt, unsafe.Pointer(&linger), &vallen) + return &linger, err +} + +func GetsockoptTimeval(fd, level, opt int) (*Timeval, error) { + var tv Timeval + vallen := _Socklen(unsafe.Sizeof(tv)) + err := getsockopt(fd, level, opt, unsafe.Pointer(&tv), &vallen) + return &tv, err +} + +func GetsockoptUint64(fd, level, opt int) (value uint64, err error) { + var n uint64 + vallen := _Socklen(8) + err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen) + return n, err +} + +func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if n, err = recvfrom(fd, p, flags, &rsa, &len); err != nil { + return + } + if rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(fd, &rsa) + } + return +} + +func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { + var rsa RawSockaddrAny + n, oobn, recvflags, err = recvmsgRaw(fd, p, oob, flags, &rsa) + // source address is only specified if the socket is unconnected + if rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(fd, &rsa) + } + return +} + +func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { + _, err = SendmsgN(fd, p, oob, to, flags) + return +} + +func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { + var ptr unsafe.Pointer + var salen _Socklen + if to != nil { + ptr, salen, err = to.sockaddr() + if err != nil { + return 0, err + } + } + return sendmsgN(fd, p, oob, ptr, salen, flags) +} + +func Send(s int, buf []byte, flags int) (err error) { + return sendto(s, buf, flags, nil, 0) +} + +func Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) { + ptr, n, err := to.sockaddr() + if err != nil { + return err + } + return sendto(fd, p, flags, ptr, n) +} + +func SetsockoptByte(fd, level, opt int, value byte) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(&value), 1) +} + +func SetsockoptInt(fd, level, opt int, value int) (err error) { + var n = int32(value) + return setsockopt(fd, level, opt, unsafe.Pointer(&n), 4) +} + +func SetsockoptInet4Addr(fd, level, opt int, value [4]byte) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(&value[0]), 4) +} + +func SetsockoptIPMreq(fd, level, opt int, mreq *IPMreq) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPMreq) +} + +func SetsockoptIPv6Mreq(fd, level, opt int, mreq *IPv6Mreq) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPv6Mreq) +} + +func SetsockoptICMPv6Filter(fd, level, opt int, filter *ICMPv6Filter) error { + return setsockopt(fd, level, opt, unsafe.Pointer(filter), SizeofICMPv6Filter) +} + +func SetsockoptLinger(fd, level, opt int, l *Linger) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(l), SizeofLinger) +} + +func SetsockoptString(fd, level, opt int, s string) (err error) { + var p unsafe.Pointer + if len(s) > 0 { + p = unsafe.Pointer(&[]byte(s)[0]) + } + return setsockopt(fd, level, opt, p, uintptr(len(s))) +} + +func SetsockoptTimeval(fd, level, opt int, tv *Timeval) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(tv), unsafe.Sizeof(*tv)) +} + +func SetsockoptUint64(fd, level, opt int, value uint64) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(&value), 8) +} + +func Socket(domain, typ, proto int) (fd int, err error) { + if domain == AF_INET6 && SocketDisableIPv6 { + return -1, EAFNOSUPPORT + } + fd, err = socket(domain, typ, proto) + return +} + +func Socketpair(domain, typ, proto int) (fd [2]int, err error) { + var fdx [2]int32 + err = socketpair(domain, typ, proto, &fdx) + if err == nil { + fd[0] = int(fdx[0]) + fd[1] = int(fdx[1]) + } + return +} + +var ioSync int64 + +func CloseOnExec(fd int) { fcntl(fd, F_SETFD, FD_CLOEXEC) } + +func SetNonblock(fd int, nonblocking bool) (err error) { + flag, err := fcntl(fd, F_GETFL, 0) + if err != nil { + return err + } + if nonblocking { + flag |= O_NONBLOCK + } else { + flag &= ^O_NONBLOCK + } + _, err = fcntl(fd, F_SETFL, flag) + return err +} + +// Exec calls execve(2), which replaces the calling executable in the process +// tree. argv0 should be the full path to an executable ("/bin/ls") and the +// executable name should also be the first argument in argv (["ls", "-l"]). +// envv are the environment variables that should be passed to the new +// process (["USER=go", "PWD=/tmp"]). +func Exec(argv0 string, argv []string, envv []string) error { + return syscall.Exec(argv0, argv, envv) +} + +// Lutimes sets the access and modification times tv on path. If path refers to +// a symlink, it is not dereferenced and the timestamps are set on the symlink. +// If tv is nil, the access and modification times are set to the current time. +// Otherwise tv must contain exactly 2 elements, with access time as the first +// element and modification time as the second element. +func Lutimes(path string, tv []Timeval) error { + if tv == nil { + return UtimesNanoAt(AT_FDCWD, path, nil, AT_SYMLINK_NOFOLLOW) + } + if len(tv) != 2 { + return EINVAL + } + ts := []Timespec{ + NsecToTimespec(TimevalToNsec(tv[0])), + NsecToTimespec(TimevalToNsec(tv[1])), + } + return UtimesNanoAt(AT_FDCWD, path, ts, AT_SYMLINK_NOFOLLOW) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_unix_gc.go b/vendor/golang.org/x/sys/unix/syscall_unix_gc.go new file mode 100644 index 0000000..5898e9a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_unix_gc.go @@ -0,0 +1,18 @@ +// 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 (darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris) && gc && !ppc64le && !ppc64 +// +build darwin dragonfly freebsd linux netbsd openbsd solaris +// +build gc +// +build !ppc64le +// +build !ppc64 + +package unix + +import "syscall" + +func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) +func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) +func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) +func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go b/vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go new file mode 100644 index 0000000..f6f707a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go @@ -0,0 +1,25 @@ +// 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 linux && (ppc64le || ppc64) && gc +// +build linux +// +build ppc64le ppc64 +// +build gc + +package unix + +import "syscall" + +func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { + return syscall.Syscall(trap, a1, a2, a3) +} +func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) { + return syscall.Syscall6(trap, a1, a2, a3, a4, a5, a6) +} +func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { + return syscall.RawSyscall(trap, a1, a2, a3) +} +func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) { + return syscall.RawSyscall6(trap, a1, a2, a3, a4, a5, a6) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go new file mode 100644 index 0000000..f8616f4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go @@ -0,0 +1,1823 @@ +// 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 zos && s390x +// +build zos,s390x + +package unix + +import ( + "bytes" + "runtime" + "sort" + "sync" + "syscall" + "unsafe" +) + +const ( + O_CLOEXEC = 0 // Dummy value (not supported). + AF_LOCAL = AF_UNIX // AF_LOCAL is an alias for AF_UNIX +) + +func syscall_syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) +func syscall_rawsyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) +func syscall_syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) +func syscall_rawsyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) +func syscall_syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) +func syscall_rawsyscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) + +func copyStat(stat *Stat_t, statLE *Stat_LE_t) { + stat.Dev = uint64(statLE.Dev) + stat.Ino = uint64(statLE.Ino) + stat.Nlink = uint64(statLE.Nlink) + stat.Mode = uint32(statLE.Mode) + stat.Uid = uint32(statLE.Uid) + stat.Gid = uint32(statLE.Gid) + stat.Rdev = uint64(statLE.Rdev) + stat.Size = statLE.Size + stat.Atim.Sec = int64(statLE.Atim) + stat.Atim.Nsec = 0 //zos doesn't return nanoseconds + stat.Mtim.Sec = int64(statLE.Mtim) + stat.Mtim.Nsec = 0 //zos doesn't return nanoseconds + stat.Ctim.Sec = int64(statLE.Ctim) + stat.Ctim.Nsec = 0 //zos doesn't return nanoseconds + stat.Blksize = int64(statLE.Blksize) + stat.Blocks = statLE.Blocks +} + +func svcCall(fnptr unsafe.Pointer, argv *unsafe.Pointer, dsa *uint64) +func svcLoad(name *byte) unsafe.Pointer +func svcUnload(name *byte, fnptr unsafe.Pointer) int64 + +func (d *Dirent) NameString() string { + if d == nil { + return "" + } + return string(d.Name[:d.Namlen]) +} + +func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Len = SizeofSockaddrInet4 + 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), _Socklen(sa.raw.Len), nil +} + +func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Len = SizeofSockaddrInet6 + 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), _Socklen(sa.raw.Len), nil +} + +func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { + name := sa.Name + n := len(name) + if n >= len(sa.raw.Path) || n == 0 { + return nil, 0, EINVAL + } + sa.raw.Len = byte(3 + n) // 2 for Family, Len; 1 for NUL + sa.raw.Family = AF_UNIX + for i := 0; i < n; i++ { + sa.raw.Path[i] = int8(name[i]) + } + return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil +} + +func anyToSockaddr(_ int, rsa *RawSockaddrAny) (Sockaddr, error) { + // TODO(neeilan): Implement use of first param (fd) + switch rsa.Addr.Family { + case AF_UNIX: + pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) + sa := new(SockaddrUnix) + // For z/OS, only replace NUL with @ when the + // length is not zero. + if pp.Len != 0 && 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. + // + // For z/OS, the length of the name is a field + // in the structure. To be on the safe side, we + // will still scan the name for a NUL but only + // to the length provided in the structure. + // + // 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 < int(pp.Len) && pp.Path[n] != 0 { + n++ + } + bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] + sa.Name = string(bytes) + 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, EAFNOSUPPORT +} + +func Accept(fd int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept(fd, &rsa, &len) + if err != nil { + return + } + // TODO(neeilan): Remove 0 in call + sa, err = anyToSockaddr(0, &rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = int32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = int32(length) +} + +//sys fcntl(fd int, cmd int, arg int) (val int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys write(fd int, p []byte) (n int, err error) + +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) = SYS___ACCEPT_A +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = SYS___BIND_A +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = SYS___CONNECT_A +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = SYS___GETPEERNAME_A +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = SYS___GETSOCKNAME_A +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) = SYS___RECVFROM_A +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) = SYS___SENDTO_A +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = SYS___RECVMSG_A +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = SYS___SENDMSG_A +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) = SYS_MMAP +//sys munmap(addr uintptr, length uintptr) (err error) = SYS_MUNMAP +//sys ioctl(fd int, req uint, arg uintptr) (err error) = SYS_IOCTL + +//sys Access(path string, mode uint32) (err error) = SYS___ACCESS_A +//sys Chdir(path string) (err error) = SYS___CHDIR_A +//sys Chown(path string, uid int, gid int) (err error) = SYS___CHOWN_A +//sys Chmod(path string, mode uint32) (err error) = SYS___CHMOD_A +//sys Creat(path string, mode uint32) (fd int, err error) = SYS___CREAT_A +//sys Dup(oldfd int) (fd int, err error) +//sys Dup2(oldfd int, newfd int) (err error) +//sys Errno2() (er2 int) = SYS___ERRNO2 +//sys Err2ad() (eadd *int) = SYS___ERR2AD +//sys Exit(code int) +//sys Fchdir(fd int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys FcntlInt(fd uintptr, cmd int, arg int) (retval int, err error) = SYS_FCNTL +//sys fstat(fd int, stat *Stat_LE_t) (err error) + +func Fstat(fd int, stat *Stat_t) (err error) { + var statLE Stat_LE_t + err = fstat(fd, &statLE) + copyStat(stat, &statLE) + return +} + +//sys Fstatvfs(fd int, stat *Statvfs_t) (err error) = SYS_FSTATVFS +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sys Getpagesize() (pgsize int) = SYS_GETPAGESIZE +//sys Mprotect(b []byte, prot int) (err error) = SYS_MPROTECT +//sys Msync(b []byte, flags int) (err error) = SYS_MSYNC +//sys Poll(fds []PollFd, timeout int) (n int, err error) = SYS_POLL +//sys Times(tms *Tms) (ticks uintptr, err error) = SYS_TIMES +//sys W_Getmntent(buff *byte, size int) (lastsys int, err error) = SYS_W_GETMNTENT +//sys W_Getmntent_A(buff *byte, size int) (lastsys int, err error) = SYS___W_GETMNTENT_A + +//sys mount_LE(path string, filesystem string, fstype string, mtm uint32, parmlen int32, parm string) (err error) = SYS___MOUNT_A +//sys unmount(filesystem string, mtm int) (err error) = SYS___UMOUNT_A +//sys Chroot(path string) (err error) = SYS___CHROOT_A +//sys Select(nmsgsfds int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (ret int, err error) = SYS_SELECT +//sysnb Uname(buf *Utsname) (err error) = SYS___UNAME_A + +func Ptsname(fd int) (name string, err error) { + r0, _, e1 := syscall_syscall(SYS___PTSNAME_A, uintptr(fd), 0, 0) + name = u2s(unsafe.Pointer(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +func u2s(cstr unsafe.Pointer) string { + str := (*[1024]uint8)(cstr) + i := 0 + for str[i] != 0 { + i++ + } + return string(str[:i]) +} + +func Close(fd int) (err error) { + _, _, e1 := syscall_syscall(SYS_CLOSE, uintptr(fd), 0, 0) + for i := 0; e1 == EAGAIN && i < 10; i++ { + _, _, _ = syscall_syscall(SYS_USLEEP, uintptr(10), 0, 0) + _, _, e1 = syscall_syscall(SYS_CLOSE, uintptr(fd), 0, 0) + } + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var mapper = &mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, +} + +// Dummy function: there are no semantics for Madvise on z/OS +func Madvise(b []byte, advice int) (err error) { + return +} + +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (err error) { + return mapper.Munmap(b) +} + +//sys Gethostname(buf []byte) (err error) = SYS___GETHOSTNAME_A +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpid() (pid int) +//sysnb Getpgid(pid int) (pgid int, err error) = SYS_GETPGID + +func Getpgrp() (pid int) { + pid, _ = Getpgid(0) + return +} + +//sysnb Getppid() (pid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) = SYS_GETRLIMIT + +//sysnb getrusage(who int, rusage *rusage_zos) (err error) = SYS_GETRUSAGE + +func Getrusage(who int, rusage *Rusage) (err error) { + var ruz rusage_zos + err = getrusage(who, &ruz) + //Only the first two fields of Rusage are set + rusage.Utime.Sec = ruz.Utime.Sec + rusage.Utime.Usec = int64(ruz.Utime.Usec) + rusage.Stime.Sec = ruz.Stime.Sec + rusage.Stime.Usec = int64(ruz.Stime.Usec) + return +} + +//sysnb Getsid(pid int) (sid int, err error) = SYS_GETSID +//sysnb Getuid() (uid int) +//sysnb Kill(pid int, sig Signal) (err error) +//sys Lchown(path string, uid int, gid int) (err error) = SYS___LCHOWN_A +//sys Link(path string, link string) (err error) = SYS___LINK_A +//sys Listen(s int, n int) (err error) +//sys lstat(path string, stat *Stat_LE_t) (err error) = SYS___LSTAT_A + +func Lstat(path string, stat *Stat_t) (err error) { + var statLE Stat_LE_t + err = lstat(path, &statLE) + copyStat(stat, &statLE) + return +} + +//sys Mkdir(path string, mode uint32) (err error) = SYS___MKDIR_A +//sys Mkfifo(path string, mode uint32) (err error) = SYS___MKFIFO_A +//sys Mknod(path string, mode uint32, dev int) (err error) = SYS___MKNOD_A +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) = SYS___READLINK_A +//sys Rename(from string, to string) (err error) = SYS___RENAME_A +//sys Rmdir(path string) (err error) = SYS___RMDIR_A +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) = SYS_SETPGID +//sysnb Setrlimit(resource int, lim *Rlimit) (err error) +//sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID +//sysnb Setreuid(ruid int, euid int) (err error) = SYS_SETREUID +//sysnb Setsid() (pid int, err error) = SYS_SETSID +//sys Setuid(uid int) (err error) = SYS_SETUID +//sys Setgid(uid int) (err error) = SYS_SETGID +//sys Shutdown(fd int, how int) (err error) +//sys stat(path string, statLE *Stat_LE_t) (err error) = SYS___STAT_A + +func Stat(path string, sta *Stat_t) (err error) { + var statLE Stat_LE_t + err = stat(path, &statLE) + copyStat(sta, &statLE) + return +} + +//sys Symlink(path string, link string) (err error) = SYS___SYMLINK_A +//sys Sync() = SYS_SYNC +//sys Truncate(path string, length int64) (err error) = SYS___TRUNCATE_A +//sys Tcgetattr(fildes int, termptr *Termios) (err error) = SYS_TCGETATTR +//sys Tcsetattr(fildes int, when int, termptr *Termios) (err error) = SYS_TCSETATTR +//sys Umask(mask int) (oldmask int) +//sys Unlink(path string) (err error) = SYS___UNLINK_A +//sys Utime(path string, utim *Utimbuf) (err error) = SYS___UTIME_A + +//sys open(path string, mode int, perm uint32) (fd int, err error) = SYS___OPEN_A + +func Open(path string, mode int, perm uint32) (fd int, err error) { + return open(path, mode, perm) +} + +func Mkfifoat(dirfd int, path string, mode uint32) (err error) { + wd, err := Getwd() + if err != nil { + return err + } + + if err := Fchdir(dirfd); err != nil { + return err + } + defer Chdir(wd) + + return Mkfifo(path, mode) +} + +//sys remove(path string) (err error) + +func Remove(path string) error { + return remove(path) +} + +const ImplementsGetwd = true + +func Getcwd(buf []byte) (n int, err error) { + var p unsafe.Pointer + if len(buf) > 0 { + p = unsafe.Pointer(&buf[0]) + } else { + p = unsafe.Pointer(&_zero) + } + _, _, e := syscall_syscall(SYS___GETCWD_A, uintptr(p), uintptr(len(buf)), 0) + n = clen(buf) + 1 + if e != 0 { + err = errnoErr(e) + } + return +} + +func Getwd() (wd string, err error) { + var buf [PathMax]byte + n, err := Getcwd(buf[0:]) + if err != nil { + return "", err + } + // Getcwd returns the number of bytes written to buf, including the NUL. + if n < 1 || n > len(buf) || buf[n-1] != 0 { + return "", EINVAL + } + return string(buf[0 : n-1]), nil +} + +func Getgroups() (gids []int, err error) { + n, err := getgroups(0, nil) + if err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + + // Sanity check group count. Max is 1<<16 on Linux. + if n < 0 || n > 1<<20 { + return nil, EINVAL + } + + a := make([]_Gid_t, n) + n, err = getgroups(n, &a[0]) + if err != nil { + return nil, err + } + gids = make([]int, n) + for i, v := range a[0:n] { + gids[i] = int(v) + } + return +} + +func Setgroups(gids []int) (err error) { + if len(gids) == 0 { + return setgroups(0, nil) + } + + a := make([]_Gid_t, len(gids)) + for i, v := range gids { + a[i] = _Gid_t(v) + } + return setgroups(len(a), &a[0]) +} + +func gettid() uint64 + +func Gettid() (tid int) { + return int(gettid()) +} + +type WaitStatus uint32 + +// Wait status is 7 bits at bottom, either 0 (exited), +// 0x7F (stopped), or a signal number that caused an exit. +// The 0x80 bit is whether there was a core dump. +// An extra number (exit code, signal causing a stop) +// is in the high bits. At least that's the idea. +// There are various irregularities. For example, the +// "continued" status is 0xFFFF, distinguishing itself +// from stopped via the core dump bit. + +const ( + mask = 0x7F + core = 0x80 + exited = 0x00 + stopped = 0x7F + shift = 8 +) + +func (w WaitStatus) Exited() bool { return w&mask == exited } + +func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != exited } + +func (w WaitStatus) Stopped() bool { return w&0xFF == stopped } + +func (w WaitStatus) Continued() bool { return w == 0xFFFF } + +func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 } + +func (w WaitStatus) ExitStatus() int { + if !w.Exited() { + return -1 + } + return int(w>>shift) & 0xFF +} + +func (w WaitStatus) Signal() Signal { + if !w.Signaled() { + return -1 + } + return Signal(w & mask) +} + +func (w WaitStatus) StopSignal() Signal { + if !w.Stopped() { + return -1 + } + return Signal(w>>shift) & 0xFF +} + +func (w WaitStatus) TrapCause() int { return -1 } + +//sys waitpid(pid int, wstatus *_C_int, options int) (wpid int, err error) + +func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { + // TODO(mundaym): z/OS doesn't have wait4. I don't think getrusage does what we want. + // At the moment rusage will not be touched. + var status _C_int + wpid, err = waitpid(pid, &status, options) + if wstatus != nil { + *wstatus = WaitStatus(status) + } + return +} + +//sysnb gettimeofday(tv *timeval_zos) (err error) + +func Gettimeofday(tv *Timeval) (err error) { + var tvz timeval_zos + err = gettimeofday(&tvz) + tv.Sec = tvz.Sec + tv.Usec = int64(tvz.Usec) + return +} + +func Time(t *Time_t) (tt Time_t, err error) { + var tv Timeval + err = Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { //fix + return Timeval{Sec: sec, Usec: usec} +} + +//sysnb pipe(p *[2]_C_int) (err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe(&pp) + if err == nil { + p[0] = int(pp[0]) + p[1] = int(pp[1]) + } + return +} + +//sys utimes(path string, timeval *[2]Timeval) (err error) = SYS___UTIMES_A + +func Utimes(path string, tv []Timeval) (err error) { + if len(tv) != 2 { + return EINVAL + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func UtimesNano(path string, ts []Timespec) error { + if len(ts) != 2 { + return EINVAL + } + // Not as efficient as it could be because Timespec and + // Timeval have different types in the different OSes + tv := [2]Timeval{ + NsecToTimeval(TimespecToNsec(ts[0])), + NsecToTimeval(TimespecToNsec(ts[1])), + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func Getsockname(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getsockname(fd, &rsa, &len); err != nil { + return + } + // TODO(neeilan) : Remove this 0 ( added to get sys/unix compiling on z/OS ) + return anyToSockaddr(0, &rsa) +} + +const ( + // identifier constants + nwmHeaderIdentifier = 0xd5e6d4c8 + nwmFilterIdentifier = 0xd5e6d4c6 + nwmTCPConnIdentifier = 0xd5e6d4c3 + nwmRecHeaderIdentifier = 0xd5e6d4d9 + nwmIPStatsIdentifier = 0xd5e6d4c9d7e2e340 + nwmIPGStatsIdentifier = 0xd5e6d4c9d7c7e2e3 + nwmTCPStatsIdentifier = 0xd5e6d4e3c3d7e2e3 + nwmUDPStatsIdentifier = 0xd5e6d4e4c4d7e2e3 + nwmICMPGStatsEntry = 0xd5e6d4c9c3d4d7c7 + nwmICMPTStatsEntry = 0xd5e6d4c9c3d4d7e3 + + // nwmHeader constants + nwmVersion1 = 1 + nwmVersion2 = 2 + nwmCurrentVer = 2 + + nwmTCPConnType = 1 + nwmGlobalStatsType = 14 + + // nwmFilter constants + nwmFilterLclAddrMask = 0x20000000 // Local address + nwmFilterSrcAddrMask = 0x20000000 // Source address + nwmFilterLclPortMask = 0x10000000 // Local port + nwmFilterSrcPortMask = 0x10000000 // Source port + + // nwmConnEntry constants + nwmTCPStateClosed = 1 + nwmTCPStateListen = 2 + nwmTCPStateSynSent = 3 + nwmTCPStateSynRcvd = 4 + nwmTCPStateEstab = 5 + nwmTCPStateFinWait1 = 6 + nwmTCPStateFinWait2 = 7 + nwmTCPStateClosWait = 8 + nwmTCPStateLastAck = 9 + nwmTCPStateClosing = 10 + nwmTCPStateTimeWait = 11 + nwmTCPStateDeletTCB = 12 + + // Existing constants on linux + BPF_TCP_CLOSE = 1 + BPF_TCP_LISTEN = 2 + BPF_TCP_SYN_SENT = 3 + BPF_TCP_SYN_RECV = 4 + BPF_TCP_ESTABLISHED = 5 + BPF_TCP_FIN_WAIT1 = 6 + BPF_TCP_FIN_WAIT2 = 7 + BPF_TCP_CLOSE_WAIT = 8 + BPF_TCP_LAST_ACK = 9 + BPF_TCP_CLOSING = 10 + BPF_TCP_TIME_WAIT = 11 + BPF_TCP_NEW_SYN_RECV = -1 + BPF_TCP_MAX_STATES = -2 +) + +type nwmTriplet struct { + offset uint32 + length uint32 + number uint32 +} + +type nwmQuadruplet struct { + offset uint32 + length uint32 + number uint32 + match uint32 +} + +type nwmHeader struct { + ident uint32 + length uint32 + version uint16 + nwmType uint16 + bytesNeeded uint32 + options uint32 + _ [16]byte + inputDesc nwmTriplet + outputDesc nwmQuadruplet +} + +type nwmFilter struct { + ident uint32 + flags uint32 + resourceName [8]byte + resourceId uint32 + listenerId uint32 + local [28]byte // union of sockaddr4 and sockaddr6 + remote [28]byte // union of sockaddr4 and sockaddr6 + _ uint16 + _ uint16 + asid uint16 + _ [2]byte + tnLuName [8]byte + tnMonGrp uint32 + tnAppl [8]byte + applData [40]byte + nInterface [16]byte + dVipa [16]byte + dVipaPfx uint16 + dVipaPort uint16 + dVipaFamily byte + _ [3]byte + destXCF [16]byte + destXCFPfx uint16 + destXCFFamily byte + _ [1]byte + targIP [16]byte + targIPPfx uint16 + targIPFamily byte + _ [1]byte + _ [20]byte +} + +type nwmRecHeader struct { + ident uint32 + length uint32 + number byte + _ [3]byte +} + +type nwmTCPStatsEntry struct { + ident uint64 + currEstab uint32 + activeOpened uint32 + passiveOpened uint32 + connClosed uint32 + estabResets uint32 + attemptFails uint32 + passiveDrops uint32 + timeWaitReused uint32 + inSegs uint64 + predictAck uint32 + predictData uint32 + inDupAck uint32 + inBadSum uint32 + inBadLen uint32 + inShort uint32 + inDiscOldTime uint32 + inAllBeforeWin uint32 + inSomeBeforeWin uint32 + inAllAfterWin uint32 + inSomeAfterWin uint32 + inOutOfOrder uint32 + inAfterClose uint32 + inWinProbes uint32 + inWinUpdates uint32 + outWinUpdates uint32 + outSegs uint64 + outDelayAcks uint32 + outRsts uint32 + retransSegs uint32 + retransTimeouts uint32 + retransDrops uint32 + pmtuRetrans uint32 + pmtuErrors uint32 + outWinProbes uint32 + probeDrops uint32 + keepAliveProbes uint32 + keepAliveDrops uint32 + finwait2Drops uint32 + acceptCount uint64 + inBulkQSegs uint64 + inDiscards uint64 + connFloods uint32 + connStalls uint32 + cfgEphemDef uint16 + ephemInUse uint16 + ephemHiWater uint16 + flags byte + _ [1]byte + ephemExhaust uint32 + smcRCurrEstabLnks uint32 + smcRLnkActTimeOut uint32 + smcRActLnkOpened uint32 + smcRPasLnkOpened uint32 + smcRLnksClosed uint32 + smcRCurrEstab uint32 + smcRActiveOpened uint32 + smcRPassiveOpened uint32 + smcRConnClosed uint32 + smcRInSegs uint64 + smcROutSegs uint64 + smcRInRsts uint32 + smcROutRsts uint32 + smcDCurrEstabLnks uint32 + smcDActLnkOpened uint32 + smcDPasLnkOpened uint32 + smcDLnksClosed uint32 + smcDCurrEstab uint32 + smcDActiveOpened uint32 + smcDPassiveOpened uint32 + smcDConnClosed uint32 + smcDInSegs uint64 + smcDOutSegs uint64 + smcDInRsts uint32 + smcDOutRsts uint32 +} + +type nwmConnEntry struct { + ident uint32 + local [28]byte // union of sockaddr4 and sockaddr6 + remote [28]byte // union of sockaddr4 and sockaddr6 + startTime [8]byte // uint64, changed to prevent padding from being inserted + lastActivity [8]byte // uint64 + bytesIn [8]byte // uint64 + bytesOut [8]byte // uint64 + inSegs [8]byte // uint64 + outSegs [8]byte // uint64 + state uint16 + activeOpen byte + flag01 byte + outBuffered uint32 + inBuffered uint32 + maxSndWnd uint32 + reXmtCount uint32 + congestionWnd uint32 + ssThresh uint32 + roundTripTime uint32 + roundTripVar uint32 + sendMSS uint32 + sndWnd uint32 + rcvBufSize uint32 + sndBufSize uint32 + outOfOrderCount uint32 + lcl0WindowCount uint32 + rmt0WindowCount uint32 + dupacks uint32 + flag02 byte + sockOpt6Cont byte + asid uint16 + resourceName [8]byte + resourceId uint32 + subtask uint32 + sockOpt byte + sockOpt6 byte + clusterConnFlag byte + proto byte + targetAppl [8]byte + luName [8]byte + clientUserId [8]byte + logMode [8]byte + timeStamp uint32 + timeStampAge uint32 + serverResourceId uint32 + intfName [16]byte + ttlsStatPol byte + ttlsStatConn byte + ttlsSSLProt uint16 + ttlsNegCiph [2]byte + ttlsSecType byte + ttlsFIPS140Mode byte + ttlsUserID [8]byte + applData [40]byte + inOldestTime [8]byte // uint64 + outOldestTime [8]byte // uint64 + tcpTrustedPartner byte + _ [3]byte + bulkDataIntfName [16]byte + ttlsNegCiph4 [4]byte + smcReason uint32 + lclSMCLinkId uint32 + rmtSMCLinkId uint32 + smcStatus byte + smcFlags byte + _ [2]byte + rcvWnd uint32 + lclSMCBufSz uint32 + rmtSMCBufSz uint32 + ttlsSessID [32]byte + ttlsSessIDLen int16 + _ [1]byte + smcDStatus byte + smcDReason uint32 +} + +var svcNameTable [][]byte = [][]byte{ + []byte("\xc5\xe9\xc2\xd5\xd4\xc9\xc6\xf4"), // svc_EZBNMIF4 +} + +const ( + svc_EZBNMIF4 = 0 +) + +func GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) { + jobname := []byte("\x5c\x40\x40\x40\x40\x40\x40\x40") // "*" + responseBuffer := [4096]byte{0} + var bufferAlet, reasonCode uint32 = 0, 0 + var bufferLen, returnValue, returnCode int32 = 4096, 0, 0 + + dsa := [18]uint64{0} + var argv [7]unsafe.Pointer + argv[0] = unsafe.Pointer(&jobname[0]) + argv[1] = unsafe.Pointer(&responseBuffer[0]) + argv[2] = unsafe.Pointer(&bufferAlet) + argv[3] = unsafe.Pointer(&bufferLen) + argv[4] = unsafe.Pointer(&returnValue) + argv[5] = unsafe.Pointer(&returnCode) + argv[6] = unsafe.Pointer(&reasonCode) + + request := (*struct { + header nwmHeader + filter nwmFilter + })(unsafe.Pointer(&responseBuffer[0])) + + EZBNMIF4 := svcLoad(&svcNameTable[svc_EZBNMIF4][0]) + if EZBNMIF4 == nil { + return nil, errnoErr(EINVAL) + } + + // GetGlobalStats EZBNMIF4 call + request.header.ident = nwmHeaderIdentifier + request.header.length = uint32(unsafe.Sizeof(request.header)) + request.header.version = nwmCurrentVer + request.header.nwmType = nwmGlobalStatsType + request.header.options = 0x80000000 + + svcCall(EZBNMIF4, &argv[0], &dsa[0]) + + // outputDesc field is filled by EZBNMIF4 on success + if returnCode != 0 || request.header.outputDesc.offset == 0 { + return nil, errnoErr(EINVAL) + } + + // Check that EZBNMIF4 returned a nwmRecHeader + recHeader := (*nwmRecHeader)(unsafe.Pointer(&responseBuffer[request.header.outputDesc.offset])) + if recHeader.ident != nwmRecHeaderIdentifier { + return nil, errnoErr(EINVAL) + } + + // Parse nwmTriplets to get offsets of returned entries + var sections []*uint64 + var sectionDesc *nwmTriplet = (*nwmTriplet)(unsafe.Pointer(&responseBuffer[0])) + for i := uint32(0); i < uint32(recHeader.number); i++ { + offset := request.header.outputDesc.offset + uint32(unsafe.Sizeof(*recHeader)) + i*uint32(unsafe.Sizeof(*sectionDesc)) + sectionDesc = (*nwmTriplet)(unsafe.Pointer(&responseBuffer[offset])) + for j := uint32(0); j < sectionDesc.number; j++ { + offset = request.header.outputDesc.offset + sectionDesc.offset + j*sectionDesc.length + sections = append(sections, (*uint64)(unsafe.Pointer(&responseBuffer[offset]))) + } + } + + // Find nwmTCPStatsEntry in returned entries + var tcpStats *nwmTCPStatsEntry = nil + for _, ptr := range sections { + switch *ptr { + case nwmTCPStatsIdentifier: + if tcpStats != nil { + return nil, errnoErr(EINVAL) + } + tcpStats = (*nwmTCPStatsEntry)(unsafe.Pointer(ptr)) + case nwmIPStatsIdentifier: + case nwmIPGStatsIdentifier: + case nwmUDPStatsIdentifier: + case nwmICMPGStatsEntry: + case nwmICMPTStatsEntry: + default: + return nil, errnoErr(EINVAL) + } + } + if tcpStats == nil { + return nil, errnoErr(EINVAL) + } + + // GetConnectionDetail EZBNMIF4 call + responseBuffer = [4096]byte{0} + dsa = [18]uint64{0} + bufferAlet, reasonCode = 0, 0 + bufferLen, returnValue, returnCode = 4096, 0, 0 + nameptr := (*uint32)(unsafe.Pointer(uintptr(0x21c))) // Get jobname of current process + nameptr = (*uint32)(unsafe.Pointer(uintptr(*nameptr + 12))) + argv[0] = unsafe.Pointer(uintptr(*nameptr)) + + request.header.ident = nwmHeaderIdentifier + request.header.length = uint32(unsafe.Sizeof(request.header)) + request.header.version = nwmCurrentVer + request.header.nwmType = nwmTCPConnType + request.header.options = 0x80000000 + + request.filter.ident = nwmFilterIdentifier + + var localSockaddr RawSockaddrAny + socklen := _Socklen(SizeofSockaddrAny) + err := getsockname(fd, &localSockaddr, &socklen) + if err != nil { + return nil, errnoErr(EINVAL) + } + if localSockaddr.Addr.Family == AF_INET { + localSockaddr := (*RawSockaddrInet4)(unsafe.Pointer(&localSockaddr.Addr)) + localSockFilter := (*RawSockaddrInet4)(unsafe.Pointer(&request.filter.local[0])) + localSockFilter.Family = AF_INET + var i int + for i = 0; i < 4; i++ { + if localSockaddr.Addr[i] != 0 { + break + } + } + if i != 4 { + request.filter.flags |= nwmFilterLclAddrMask + for i = 0; i < 4; i++ { + localSockFilter.Addr[i] = localSockaddr.Addr[i] + } + } + if localSockaddr.Port != 0 { + request.filter.flags |= nwmFilterLclPortMask + localSockFilter.Port = localSockaddr.Port + } + } else if localSockaddr.Addr.Family == AF_INET6 { + localSockaddr := (*RawSockaddrInet6)(unsafe.Pointer(&localSockaddr.Addr)) + localSockFilter := (*RawSockaddrInet6)(unsafe.Pointer(&request.filter.local[0])) + localSockFilter.Family = AF_INET6 + var i int + for i = 0; i < 16; i++ { + if localSockaddr.Addr[i] != 0 { + break + } + } + if i != 16 { + request.filter.flags |= nwmFilterLclAddrMask + for i = 0; i < 16; i++ { + localSockFilter.Addr[i] = localSockaddr.Addr[i] + } + } + if localSockaddr.Port != 0 { + request.filter.flags |= nwmFilterLclPortMask + localSockFilter.Port = localSockaddr.Port + } + } + + svcCall(EZBNMIF4, &argv[0], &dsa[0]) + + // outputDesc field is filled by EZBNMIF4 on success + if returnCode != 0 || request.header.outputDesc.offset == 0 { + return nil, errnoErr(EINVAL) + } + + // Check that EZBNMIF4 returned a nwmConnEntry + conn := (*nwmConnEntry)(unsafe.Pointer(&responseBuffer[request.header.outputDesc.offset])) + if conn.ident != nwmTCPConnIdentifier { + return nil, errnoErr(EINVAL) + } + + // Copy data from the returned data structures into tcpInfo + // Stats from nwmConnEntry are specific to that connection. + // Stats from nwmTCPStatsEntry are global (to the interface?) + // Fields may not be an exact match. Some fields have no equivalent. + var tcpinfo TCPInfo + tcpinfo.State = uint8(conn.state) + tcpinfo.Ca_state = 0 // dummy + tcpinfo.Retransmits = uint8(tcpStats.retransSegs) + tcpinfo.Probes = uint8(tcpStats.outWinProbes) + tcpinfo.Backoff = 0 // dummy + tcpinfo.Options = 0 // dummy + tcpinfo.Rto = tcpStats.retransTimeouts + tcpinfo.Ato = tcpStats.outDelayAcks + tcpinfo.Snd_mss = conn.sendMSS + tcpinfo.Rcv_mss = conn.sendMSS // dummy + tcpinfo.Unacked = 0 // dummy + tcpinfo.Sacked = 0 // dummy + tcpinfo.Lost = 0 // dummy + tcpinfo.Retrans = conn.reXmtCount + tcpinfo.Fackets = 0 // dummy + tcpinfo.Last_data_sent = uint32(*(*uint64)(unsafe.Pointer(&conn.lastActivity[0]))) + tcpinfo.Last_ack_sent = uint32(*(*uint64)(unsafe.Pointer(&conn.outOldestTime[0]))) + tcpinfo.Last_data_recv = uint32(*(*uint64)(unsafe.Pointer(&conn.inOldestTime[0]))) + tcpinfo.Last_ack_recv = uint32(*(*uint64)(unsafe.Pointer(&conn.inOldestTime[0]))) + tcpinfo.Pmtu = conn.sendMSS // dummy, NWMIfRouteMtu is a candidate + tcpinfo.Rcv_ssthresh = conn.ssThresh + tcpinfo.Rtt = conn.roundTripTime + tcpinfo.Rttvar = conn.roundTripVar + tcpinfo.Snd_ssthresh = conn.ssThresh // dummy + tcpinfo.Snd_cwnd = conn.congestionWnd + tcpinfo.Advmss = conn.sendMSS // dummy + tcpinfo.Reordering = 0 // dummy + tcpinfo.Rcv_rtt = conn.roundTripTime // dummy + tcpinfo.Rcv_space = conn.sendMSS // dummy + tcpinfo.Total_retrans = conn.reXmtCount + + svcUnload(&svcNameTable[svc_EZBNMIF4][0], EZBNMIF4) + + return &tcpinfo, nil +} + +// GetsockoptString returns the string value of the socket option opt for the +// socket associated with fd at the given socket level. +func GetsockoptString(fd, level, opt int) (string, error) { + buf := make([]byte, 256) + vallen := _Socklen(len(buf)) + err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen) + if err != nil { + return "", err + } + + return string(buf[:vallen-1]), nil +} + +func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { + var msg Msghdr + var rsa RawSockaddrAny + msg.Name = (*byte)(unsafe.Pointer(&rsa)) + msg.Namelen = SizeofSockaddrAny + var iov Iovec + if len(p) > 0 { + iov.Base = (*byte)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy byte + if len(oob) > 0 { + // receive at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Control = (*byte)(unsafe.Pointer(&oob[0])) + msg.SetControllen(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = recvmsg(fd, &msg, flags); err != nil { + return + } + oobn = int(msg.Controllen) + recvflags = int(msg.Flags) + // source address is only specified if the socket is unconnected + if rsa.Addr.Family != AF_UNSPEC { + // TODO(neeilan): Remove 0 arg added to get this compiling on z/OS + from, err = anyToSockaddr(0, &rsa) + } + return +} + +func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { + _, err = SendmsgN(fd, p, oob, to, flags) + return +} + +func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { + var ptr unsafe.Pointer + var salen _Socklen + if to != nil { + var err error + ptr, salen, err = to.sockaddr() + if err != nil { + return 0, err + } + } + var msg Msghdr + msg.Name = (*byte)(unsafe.Pointer(ptr)) + msg.Namelen = int32(salen) + var iov Iovec + if len(p) > 0 { + iov.Base = (*byte)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy byte + if len(oob) > 0 { + // send at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Control = (*byte)(unsafe.Pointer(&oob[0])) + msg.SetControllen(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = sendmsg(fd, &msg, flags); err != nil { + return 0, err + } + if len(oob) > 0 && len(p) == 0 { + n = 0 + } + return n, nil +} + +func Opendir(name string) (uintptr, error) { + p, err := BytePtrFromString(name) + if err != nil { + return 0, err + } + dir, _, e := syscall_syscall(SYS___OPENDIR_A, uintptr(unsafe.Pointer(p)), 0, 0) + runtime.KeepAlive(unsafe.Pointer(p)) + if e != 0 { + err = errnoErr(e) + } + return dir, err +} + +// clearsyscall.Errno resets the errno value to 0. +func clearErrno() + +func Readdir(dir uintptr) (*Dirent, error) { + var ent Dirent + var res uintptr + // __readdir_r_a returns errno at the end of the directory stream, rather than 0. + // Therefore to avoid false positives we clear errno before calling it. + + // TODO(neeilan): Commented this out to get sys/unix compiling on z/OS. Uncomment and fix. Error: "undefined: clearsyscall" + //clearsyscall.Errno() // TODO(mundaym): check pre-emption rules. + + e, _, _ := syscall_syscall(SYS___READDIR_R_A, dir, uintptr(unsafe.Pointer(&ent)), uintptr(unsafe.Pointer(&res))) + var err error + if e != 0 { + err = errnoErr(Errno(e)) + } + if res == 0 { + return nil, err + } + return &ent, err +} + +func Closedir(dir uintptr) error { + _, _, e := syscall_syscall(SYS_CLOSEDIR, dir, 0, 0) + if e != 0 { + return errnoErr(e) + } + return nil +} + +func Seekdir(dir uintptr, pos int) { + _, _, _ = syscall_syscall(SYS_SEEKDIR, dir, uintptr(pos), 0) +} + +func Telldir(dir uintptr) (int, error) { + p, _, e := syscall_syscall(SYS_TELLDIR, dir, 0, 0) + pos := int(p) + if pos == -1 { + return pos, errnoErr(e) + } + return pos, nil +} + +// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command. +func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error { + // struct flock is packed on z/OS. We can't emulate that in Go so + // instead we pack it here. + var flock [24]byte + *(*int16)(unsafe.Pointer(&flock[0])) = lk.Type + *(*int16)(unsafe.Pointer(&flock[2])) = lk.Whence + *(*int64)(unsafe.Pointer(&flock[4])) = lk.Start + *(*int64)(unsafe.Pointer(&flock[12])) = lk.Len + *(*int32)(unsafe.Pointer(&flock[20])) = lk.Pid + _, _, errno := syscall_syscall(SYS_FCNTL, fd, uintptr(cmd), uintptr(unsafe.Pointer(&flock))) + lk.Type = *(*int16)(unsafe.Pointer(&flock[0])) + lk.Whence = *(*int16)(unsafe.Pointer(&flock[2])) + lk.Start = *(*int64)(unsafe.Pointer(&flock[4])) + lk.Len = *(*int64)(unsafe.Pointer(&flock[12])) + lk.Pid = *(*int32)(unsafe.Pointer(&flock[20])) + if errno == 0 { + return nil + } + return errno +} + +func Flock(fd int, how int) error { + + var flock_type int16 + var fcntl_cmd int + + switch how { + case LOCK_SH | LOCK_NB: + flock_type = F_RDLCK + fcntl_cmd = F_SETLK + case LOCK_EX | LOCK_NB: + flock_type = F_WRLCK + fcntl_cmd = F_SETLK + case LOCK_EX: + flock_type = F_WRLCK + fcntl_cmd = F_SETLKW + case LOCK_UN: + flock_type = F_UNLCK + fcntl_cmd = F_SETLKW + default: + } + + flock := Flock_t{ + Type: int16(flock_type), + Whence: int16(0), + Start: int64(0), + Len: int64(0), + Pid: int32(Getppid()), + } + + err := FcntlFlock(uintptr(fd), fcntl_cmd, &flock) + return err +} + +func Mlock(b []byte) (err error) { + _, _, e1 := syscall_syscall(SYS___MLOCKALL, _BPX_NONSWAP, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +func Mlock2(b []byte, flags int) (err error) { + _, _, e1 := syscall_syscall(SYS___MLOCKALL, _BPX_NONSWAP, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +func Mlockall(flags int) (err error) { + _, _, e1 := syscall_syscall(SYS___MLOCKALL, _BPX_NONSWAP, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +func Munlock(b []byte) (err error) { + _, _, e1 := syscall_syscall(SYS___MLOCKALL, _BPX_SWAP, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +func Munlockall() (err error) { + _, _, e1 := syscall_syscall(SYS___MLOCKALL, _BPX_SWAP, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +func ClockGettime(clockid int32, ts *Timespec) error { + + var ticks_per_sec uint32 = 100 //TODO(kenan): value is currently hardcoded; need sysconf() call otherwise + var nsec_per_sec int64 = 1000000000 + + if ts == nil { + return EFAULT + } + if clockid == CLOCK_REALTIME || clockid == CLOCK_MONOTONIC { + var nanotime int64 = runtime.Nanotime1() + ts.Sec = nanotime / nsec_per_sec + ts.Nsec = nanotime % nsec_per_sec + } else if clockid == CLOCK_PROCESS_CPUTIME_ID || clockid == CLOCK_THREAD_CPUTIME_ID { + var tm Tms + _, err := Times(&tm) + if err != nil { + return EFAULT + } + ts.Sec = int64(tm.Utime / ticks_per_sec) + ts.Nsec = int64(tm.Utime) * nsec_per_sec / int64(ticks_per_sec) + } else { + return EINVAL + } + return nil +} + +func Statfs(path string, stat *Statfs_t) (err error) { + fd, err := open(path, O_RDONLY, 0) + defer Close(fd) + if err != nil { + return err + } + return Fstatfs(fd, stat) +} + +var ( + Stdin = 0 + Stdout = 1 + Stderr = 2 +) + +// Do the interface allocations only once for common +// Errno values. +var ( + errEAGAIN error = syscall.EAGAIN + errEINVAL error = syscall.EINVAL + errENOENT error = syscall.ENOENT +) + +var ( + signalNameMapOnce sync.Once + signalNameMap map[string]syscall.Signal +) + +// errnoErr returns common boxed Errno values, to prevent +// allocations at runtime. +func errnoErr(e Errno) error { + switch e { + case 0: + return nil + case EAGAIN: + return errEAGAIN + case EINVAL: + return errEINVAL + case ENOENT: + return errENOENT + } + return e +} + +// ErrnoName returns the error name for error number e. +func ErrnoName(e Errno) string { + i := sort.Search(len(errorList), func(i int) bool { + return errorList[i].num >= e + }) + if i < len(errorList) && errorList[i].num == e { + return errorList[i].name + } + return "" +} + +// SignalName returns the signal name for signal number s. +func SignalName(s syscall.Signal) string { + i := sort.Search(len(signalList), func(i int) bool { + return signalList[i].num >= s + }) + if i < len(signalList) && signalList[i].num == s { + return signalList[i].name + } + return "" +} + +// SignalNum returns the syscall.Signal for signal named s, +// or 0 if a signal with such name is not found. +// The signal name should start with "SIG". +func SignalNum(s string) syscall.Signal { + signalNameMapOnce.Do(func() { + signalNameMap = make(map[string]syscall.Signal, len(signalList)) + for _, signal := range signalList { + signalNameMap[signal.name] = signal.num + } + }) + return signalNameMap[s] +} + +// clen returns the index of the first NULL byte in n or len(n) if n contains no NULL byte. +func clen(n []byte) int { + i := bytes.IndexByte(n, 0) + if i == -1 { + i = len(n) + } + return i +} + +// Mmap manager, for use by operating system-specific implementations. + +type mmapper struct { + sync.Mutex + active map[*byte][]byte // active mappings; key is last byte in mapping + mmap func(addr, length uintptr, prot, flags, fd int, offset int64) (uintptr, error) + munmap func(addr uintptr, length uintptr) error +} + +func (m *mmapper) Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + if length <= 0 { + return nil, EINVAL + } + + // Map the requested memory. + addr, errno := m.mmap(0, uintptr(length), prot, flags, fd, offset) + if errno != nil { + return nil, errno + } + + // Slice memory layout + var sl = struct { + addr uintptr + len int + cap int + }{addr, length, length} + + // Use unsafe to turn sl into a []byte. + b := *(*[]byte)(unsafe.Pointer(&sl)) + + // Register mapping in m and return it. + p := &b[cap(b)-1] + m.Lock() + defer m.Unlock() + m.active[p] = b + return b, nil +} + +func (m *mmapper) Munmap(data []byte) (err error) { + if len(data) == 0 || len(data) != cap(data) { + return EINVAL + } + + // Find the base of the mapping. + p := &data[cap(data)-1] + m.Lock() + defer m.Unlock() + b := m.active[p] + if b == nil || &b[0] != &data[0] { + return EINVAL + } + + // Unmap the memory and update m. + if errno := m.munmap(uintptr(unsafe.Pointer(&b[0])), uintptr(len(b))); errno != nil { + return errno + } + delete(m.active, p) + return nil +} + +func Read(fd int, p []byte) (n int, err error) { + n, err = read(fd, p) + if raceenabled { + if n > 0 { + raceWriteRange(unsafe.Pointer(&p[0]), n) + } + if err == nil { + raceAcquire(unsafe.Pointer(&ioSync)) + } + } + return +} + +func Write(fd int, p []byte) (n int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + n, err = write(fd, p) + if raceenabled && n > 0 { + raceReadRange(unsafe.Pointer(&p[0]), n) + } + return +} + +// For testing: clients can set this flag to force +// creation of IPv6 sockets to return EAFNOSUPPORT. +var SocketDisableIPv6 bool + +// Sockaddr represents a socket address. +type Sockaddr interface { + sockaddr() (ptr unsafe.Pointer, len _Socklen, err error) // lowercase; only we can define Sockaddrs +} + +// SockaddrInet4 implements the Sockaddr interface for AF_INET type sockets. +type SockaddrInet4 struct { + Port int + Addr [4]byte + raw RawSockaddrInet4 +} + +// SockaddrInet6 implements the Sockaddr interface for AF_INET6 type sockets. +type SockaddrInet6 struct { + Port int + ZoneId uint32 + Addr [16]byte + raw RawSockaddrInet6 +} + +// SockaddrUnix implements the Sockaddr interface for AF_UNIX type sockets. +type SockaddrUnix struct { + Name string + raw RawSockaddrUnix +} + +func Bind(fd int, sa Sockaddr) (err error) { + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return bind(fd, ptr, n) +} + +func Connect(fd int, sa Sockaddr) (err error) { + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return connect(fd, ptr, n) +} + +func Getpeername(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getpeername(fd, &rsa, &len); err != nil { + return + } + return anyToSockaddr(fd, &rsa) +} + +func GetsockoptByte(fd, level, opt int) (value byte, err error) { + var n byte + vallen := _Socklen(1) + err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen) + return n, err +} + +func GetsockoptInt(fd, level, opt int) (value int, err error) { + var n int32 + vallen := _Socklen(4) + err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen) + return int(n), err +} + +func GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, err error) { + vallen := _Socklen(4) + err = getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen) + return value, err +} + +func GetsockoptIPMreq(fd, level, opt int) (*IPMreq, error) { + var value IPMreq + vallen := _Socklen(SizeofIPMreq) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) { + var value IPv6Mreq + vallen := _Socklen(SizeofIPv6Mreq) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) { + var value IPv6MTUInfo + vallen := _Socklen(SizeofIPv6MTUInfo) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) { + var value ICMPv6Filter + vallen := _Socklen(SizeofICMPv6Filter) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptLinger(fd, level, opt int) (*Linger, error) { + var linger Linger + vallen := _Socklen(SizeofLinger) + err := getsockopt(fd, level, opt, unsafe.Pointer(&linger), &vallen) + return &linger, err +} + +func GetsockoptTimeval(fd, level, opt int) (*Timeval, error) { + var tv Timeval + vallen := _Socklen(unsafe.Sizeof(tv)) + err := getsockopt(fd, level, opt, unsafe.Pointer(&tv), &vallen) + return &tv, err +} + +func GetsockoptUint64(fd, level, opt int) (value uint64, err error) { + var n uint64 + vallen := _Socklen(8) + err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen) + return n, err +} + +func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if n, err = recvfrom(fd, p, flags, &rsa, &len); err != nil { + return + } + if rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(fd, &rsa) + } + return +} + +func Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) { + ptr, n, err := to.sockaddr() + if err != nil { + return err + } + return sendto(fd, p, flags, ptr, n) +} + +func SetsockoptByte(fd, level, opt int, value byte) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(&value), 1) +} + +func SetsockoptInt(fd, level, opt int, value int) (err error) { + var n = int32(value) + return setsockopt(fd, level, opt, unsafe.Pointer(&n), 4) +} + +func SetsockoptInet4Addr(fd, level, opt int, value [4]byte) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(&value[0]), 4) +} + +func SetsockoptIPMreq(fd, level, opt int, mreq *IPMreq) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPMreq) +} + +func SetsockoptIPv6Mreq(fd, level, opt int, mreq *IPv6Mreq) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPv6Mreq) +} + +func SetsockoptICMPv6Filter(fd, level, opt int, filter *ICMPv6Filter) error { + return setsockopt(fd, level, opt, unsafe.Pointer(filter), SizeofICMPv6Filter) +} + +func SetsockoptLinger(fd, level, opt int, l *Linger) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(l), SizeofLinger) +} + +func SetsockoptString(fd, level, opt int, s string) (err error) { + var p unsafe.Pointer + if len(s) > 0 { + p = unsafe.Pointer(&[]byte(s)[0]) + } + return setsockopt(fd, level, opt, p, uintptr(len(s))) +} + +func SetsockoptTimeval(fd, level, opt int, tv *Timeval) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(tv), unsafe.Sizeof(*tv)) +} + +func SetsockoptUint64(fd, level, opt int, value uint64) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(&value), 8) +} + +func Socket(domain, typ, proto int) (fd int, err error) { + if domain == AF_INET6 && SocketDisableIPv6 { + return -1, EAFNOSUPPORT + } + fd, err = socket(domain, typ, proto) + return +} + +func Socketpair(domain, typ, proto int) (fd [2]int, err error) { + var fdx [2]int32 + err = socketpair(domain, typ, proto, &fdx) + if err == nil { + fd[0] = int(fdx[0]) + fd[1] = int(fdx[1]) + } + return +} + +var ioSync int64 + +func CloseOnExec(fd int) { fcntl(fd, F_SETFD, FD_CLOEXEC) } + +func SetNonblock(fd int, nonblocking bool) (err error) { + flag, err := fcntl(fd, F_GETFL, 0) + if err != nil { + return err + } + if nonblocking { + flag |= O_NONBLOCK + } else { + flag &= ^O_NONBLOCK + } + _, err = fcntl(fd, F_SETFL, flag) + return err +} + +// Exec calls execve(2), which replaces the calling executable in the process +// tree. argv0 should be the full path to an executable ("/bin/ls") and the +// executable name should also be the first argument in argv (["ls", "-l"]). +// envv are the environment variables that should be passed to the new +// process (["USER=go", "PWD=/tmp"]). +func Exec(argv0 string, argv []string, envv []string) error { + return syscall.Exec(argv0, argv, envv) +} + +func Mount(source string, target string, fstype string, flags uintptr, data string) (err error) { + if needspace := 8 - len(fstype); needspace <= 0 { + fstype = fstype[:8] + } else { + fstype += " "[:needspace] + } + return mount_LE(target, source, fstype, uint32(flags), int32(len(data)), data) +} + +func Unmount(name string, mtm int) (err error) { + // mountpoint is always a full path and starts with a '/' + // check if input string is not a mountpoint but a filesystem name + if name[0] != '/' { + return unmount(name, mtm) + } + // treat name as mountpoint + b2s := func(arr []byte) string { + nulli := bytes.IndexByte(arr, 0) + if nulli == -1 { + return string(arr) + } else { + return string(arr[:nulli]) + } + } + var buffer struct { + header W_Mnth + fsinfo [64]W_Mntent + } + fsCount, err := W_Getmntent_A((*byte)(unsafe.Pointer(&buffer)), int(unsafe.Sizeof(buffer))) + if err != nil { + return err + } + if fsCount == 0 { + return EINVAL + } + for i := 0; i < fsCount; i++ { + if b2s(buffer.fsinfo[i].Mountpoint[:]) == name { + err = unmount(b2s(buffer.fsinfo[i].Fsname[:]), mtm) + break + } + } + return err +} diff --git a/vendor/golang.org/x/sys/unix/sysvshm_linux.go b/vendor/golang.org/x/sys/unix/sysvshm_linux.go new file mode 100644 index 0000000..2c3a443 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/sysvshm_linux.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 linux +// +build linux + +package unix + +import "runtime" + +// SysvShmCtl performs control operations on the shared memory segment +// specified by id. +func SysvShmCtl(id, cmd int, desc *SysvShmDesc) (result int, err error) { + if runtime.GOARCH == "arm" || + runtime.GOARCH == "mips64" || runtime.GOARCH == "mips64le" { + cmd |= ipc_64 + } + + return shmctl(id, cmd, desc) +} diff --git a/vendor/golang.org/x/sys/unix/sysvshm_unix.go b/vendor/golang.org/x/sys/unix/sysvshm_unix.go new file mode 100644 index 0000000..0bb4c8d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/sysvshm_unix.go @@ -0,0 +1,61 @@ +// 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 && !ios) || linux +// +build darwin,!ios linux + +package unix + +import ( + "unsafe" + + "golang.org/x/sys/internal/unsafeheader" +) + +// SysvShmAttach attaches the Sysv shared memory segment associated with the +// shared memory identifier id. +func SysvShmAttach(id int, addr uintptr, flag int) ([]byte, error) { + addr, errno := shmat(id, addr, flag) + if errno != nil { + return nil, errno + } + + // Retrieve the size of the shared memory to enable slice creation + var info SysvShmDesc + + _, err := SysvShmCtl(id, IPC_STAT, &info) + if err != nil { + // release the shared memory if we can't find the size + + // ignoring error from shmdt as there's nothing sensible to return here + shmdt(addr) + return nil, err + } + + // Use unsafe to convert addr into a []byte. + // TODO: convert to unsafe.Slice once we can assume Go 1.17 + var b []byte + hdr := (*unsafeheader.Slice)(unsafe.Pointer(&b)) + hdr.Data = unsafe.Pointer(addr) + hdr.Cap = int(info.Segsz) + hdr.Len = int(info.Segsz) + return b, nil +} + +// SysvShmDetach unmaps the shared memory slice returned from SysvShmAttach. +// +// It is not safe to use the slice after calling this function. +func SysvShmDetach(data []byte) error { + if len(data) == 0 { + return EINVAL + } + + return shmdt(uintptr(unsafe.Pointer(&data[0]))) +} + +// SysvShmGet returns the Sysv shared memory identifier associated with key. +// If the IPC_CREAT flag is specified a new segment is created. +func SysvShmGet(key, size, flag int) (id int, err error) { + return shmget(key, size, flag) +} diff --git a/vendor/golang.org/x/sys/unix/sysvshm_unix_other.go b/vendor/golang.org/x/sys/unix/sysvshm_unix_other.go new file mode 100644 index 0000000..71bddef --- /dev/null +++ b/vendor/golang.org/x/sys/unix/sysvshm_unix_other.go @@ -0,0 +1,14 @@ +// 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 && !ios +// +build darwin,!ios + +package unix + +// SysvShmCtl performs control operations on the shared memory segment +// specified by id. +func SysvShmCtl(id, cmd int, desc *SysvShmDesc) (result int, err error) { + return shmctl(id, cmd, desc) +} diff --git a/vendor/golang.org/x/sys/unix/timestruct.go b/vendor/golang.org/x/sys/unix/timestruct.go new file mode 100644 index 0000000..3d89304 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/timestruct.go @@ -0,0 +1,77 @@ +// 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 +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos + +package unix + +import "time" + +// TimespecToNSec returns the time stored in ts as nanoseconds. +func TimespecToNsec(ts Timespec) int64 { return ts.Nano() } + +// NsecToTimespec converts a number of nanoseconds into a Timespec. +func NsecToTimespec(nsec int64) Timespec { + sec := nsec / 1e9 + nsec = nsec % 1e9 + if nsec < 0 { + nsec += 1e9 + sec-- + } + return setTimespec(sec, nsec) +} + +// TimeToTimespec converts t into a Timespec. +// On some 32-bit systems the range of valid Timespec values are smaller +// than that of time.Time values. So if t is out of the valid range of +// Timespec, it returns a zero Timespec and ERANGE. +func TimeToTimespec(t time.Time) (Timespec, error) { + sec := t.Unix() + nsec := int64(t.Nanosecond()) + ts := setTimespec(sec, nsec) + + // Currently all targets have either int32 or int64 for Timespec.Sec. + // If there were a new target with floating point type for it, we have + // to consider the rounding error. + if int64(ts.Sec) != sec { + return Timespec{}, ERANGE + } + return ts, nil +} + +// TimevalToNsec returns the time stored in tv as nanoseconds. +func TimevalToNsec(tv Timeval) int64 { return tv.Nano() } + +// NsecToTimeval converts a number of nanoseconds into a Timeval. +func NsecToTimeval(nsec int64) Timeval { + nsec += 999 // round up to microsecond + usec := nsec % 1e9 / 1e3 + sec := nsec / 1e9 + if usec < 0 { + usec += 1e6 + sec-- + } + return setTimeval(sec, usec) +} + +// Unix returns the time stored in ts as seconds plus nanoseconds. +func (ts *Timespec) Unix() (sec int64, nsec int64) { + return int64(ts.Sec), int64(ts.Nsec) +} + +// Unix returns the time stored in tv as seconds plus nanoseconds. +func (tv *Timeval) Unix() (sec int64, nsec int64) { + return int64(tv.Sec), int64(tv.Usec) * 1000 +} + +// Nano returns the time stored in ts as nanoseconds. +func (ts *Timespec) Nano() int64 { + return int64(ts.Sec)*1e9 + int64(ts.Nsec) +} + +// Nano returns the time stored in tv as nanoseconds. +func (tv *Timeval) Nano() int64 { + return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000 +} diff --git a/vendor/golang.org/x/sys/unix/unveil_openbsd.go b/vendor/golang.org/x/sys/unix/unveil_openbsd.go new file mode 100644 index 0000000..168d5ae --- /dev/null +++ b/vendor/golang.org/x/sys/unix/unveil_openbsd.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 in the LICENSE file. + +package unix + +import ( + "syscall" + "unsafe" +) + +// Unveil implements the unveil syscall. +// For more information see unveil(2). +// Note that the special case of blocking further +// unveil calls is handled by UnveilBlock. +func Unveil(path string, flags string) error { + pathPtr, err := syscall.BytePtrFromString(path) + if err != nil { + return err + } + flagsPtr, err := syscall.BytePtrFromString(flags) + if err != nil { + return err + } + _, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(unsafe.Pointer(pathPtr)), uintptr(unsafe.Pointer(flagsPtr)), 0) + if e != 0 { + return e + } + return nil +} + +// UnveilBlock blocks future unveil calls. +// For more information see unveil(2). +func UnveilBlock() error { + // Both pointers must be nil. + var pathUnsafe, flagsUnsafe unsafe.Pointer + _, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(pathUnsafe), uintptr(flagsUnsafe), 0) + if e != 0 { + return e + } + return nil +} diff --git a/vendor/golang.org/x/sys/unix/xattr_bsd.go b/vendor/golang.org/x/sys/unix/xattr_bsd.go new file mode 100644 index 0000000..25df1e3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/xattr_bsd.go @@ -0,0 +1,241 @@ +// 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 freebsd || netbsd +// +build freebsd netbsd + +package unix + +import ( + "strings" + "unsafe" +) + +// Derive extattr namespace and attribute name + +func xattrnamespace(fullattr string) (ns int, attr string, err error) { + s := strings.IndexByte(fullattr, '.') + if s == -1 { + return -1, "", ENOATTR + } + + namespace := fullattr[0:s] + attr = fullattr[s+1:] + + switch namespace { + case "user": + return EXTATTR_NAMESPACE_USER, attr, nil + case "system": + return EXTATTR_NAMESPACE_SYSTEM, attr, nil + default: + return -1, "", ENOATTR + } +} + +func initxattrdest(dest []byte, idx int) (d unsafe.Pointer) { + if len(dest) > idx { + return unsafe.Pointer(&dest[idx]) + } else { + return unsafe.Pointer(_zero) + } +} + +// FreeBSD and NetBSD implement their own syscalls to handle extended attributes + +func Getxattr(file string, attr string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsize := len(dest) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return -1, err + } + + return ExtattrGetFile(file, nsid, a, uintptr(d), destsize) +} + +func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsize := len(dest) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return -1, err + } + + return ExtattrGetFd(fd, nsid, a, uintptr(d), destsize) +} + +func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsize := len(dest) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return -1, err + } + + return ExtattrGetLink(link, nsid, a, uintptr(d), destsize) +} + +// flags are unused on FreeBSD + +func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) { + var d unsafe.Pointer + if len(data) > 0 { + d = unsafe.Pointer(&data[0]) + } + datasiz := len(data) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + _, err = ExtattrSetFd(fd, nsid, a, uintptr(d), datasiz) + return +} + +func Setxattr(file string, attr string, data []byte, flags int) (err error) { + var d unsafe.Pointer + if len(data) > 0 { + d = unsafe.Pointer(&data[0]) + } + datasiz := len(data) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + _, err = ExtattrSetFile(file, nsid, a, uintptr(d), datasiz) + return +} + +func Lsetxattr(link string, attr string, data []byte, flags int) (err error) { + var d unsafe.Pointer + if len(data) > 0 { + d = unsafe.Pointer(&data[0]) + } + datasiz := len(data) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + _, err = ExtattrSetLink(link, nsid, a, uintptr(d), datasiz) + return +} + +func Removexattr(file string, attr string) (err error) { + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + err = ExtattrDeleteFile(file, nsid, a) + return +} + +func Fremovexattr(fd int, attr string) (err error) { + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + err = ExtattrDeleteFd(fd, nsid, a) + return +} + +func Lremovexattr(link string, attr string) (err error) { + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + err = ExtattrDeleteLink(link, nsid, a) + return +} + +func Listxattr(file string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsiz := len(dest) + + // FreeBSD won't allow you to list xattrs from multiple namespaces + s := 0 + for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { + stmp, e := ExtattrListFile(file, nsid, uintptr(d), destsiz) + + /* Errors accessing system attrs are ignored so that + * we can implement the Linux-like behavior of omitting errors that + * we don't have read permissions on + * + * Linux will still error if we ask for user attributes on a file that + * we don't have read permissions on, so don't ignore those errors + */ + if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { + continue + } else if e != nil { + return s, e + } + + s += stmp + destsiz -= s + if destsiz < 0 { + destsiz = 0 + } + d = initxattrdest(dest, s) + } + + return s, nil +} + +func Flistxattr(fd int, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsiz := len(dest) + + s := 0 + for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { + stmp, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz) + if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { + continue + } else if e != nil { + return s, e + } + + s += stmp + destsiz -= s + if destsiz < 0 { + destsiz = 0 + } + d = initxattrdest(dest, s) + } + + return s, nil +} + +func Llistxattr(link string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsiz := len(dest) + + s := 0 + for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { + stmp, e := ExtattrListLink(link, nsid, uintptr(d), destsiz) + if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { + continue + } else if e != nil { + return s, e + } + + s += stmp + destsiz -= s + if destsiz < 0 { + destsiz = 0 + } + d = initxattrdest(dest, s) + } + + return s, nil +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go b/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go new file mode 100644 index 0000000..ca9799b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go @@ -0,0 +1,1385 @@ +// mkerrors.sh -maix32 +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build ppc && aix +// +build ppc,aix + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -maix32 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_BYPASS = 0x19 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_INTF = 0x14 + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x1e + AF_NDD = 0x17 + AF_NETWARE = 0x16 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_RIF = 0x15 + AF_ROUTE = 0x11 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ALTWERASE = 0x400000 + ARPHRD_802_3 = 0x6 + ARPHRD_802_5 = 0x6 + ARPHRD_ETHER = 0x1 + ARPHRD_FDDI = 0x1 + B0 = 0x0 + B110 = 0x3 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2400 = 0xb + B300 = 0x7 + B38400 = 0xf + B4800 = 0xc + B50 = 0x1 + B600 = 0x8 + B75 = 0x2 + B9600 = 0xd + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x1000 + BSDLY = 0x1000 + CAP_AACCT = 0x6 + CAP_ARM_APPLICATION = 0x5 + CAP_BYPASS_RAC_VMM = 0x3 + CAP_CLEAR = 0x0 + CAP_CREDENTIALS = 0x7 + CAP_EFFECTIVE = 0x1 + CAP_EWLM_AGENT = 0x4 + CAP_INHERITABLE = 0x2 + CAP_MAXIMUM = 0x7 + CAP_NUMA_ATTACH = 0x2 + CAP_PERMITTED = 0x3 + CAP_PROPAGATE = 0x1 + CAP_PROPOGATE = 0x1 + CAP_SET = 0x1 + CBAUD = 0xf + CFLUSH = 0xf + CIBAUD = 0xf0000 + CLOCAL = 0x800 + CLOCK_MONOTONIC = 0xa + CLOCK_PROCESS_CPUTIME_ID = 0xb + CLOCK_REALTIME = 0x9 + CLOCK_THREAD_CPUTIME_ID = 0xc + CR0 = 0x0 + CR1 = 0x100 + CR2 = 0x200 + CR3 = 0x300 + CRDLY = 0x300 + CREAD = 0x80 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIOCGIFCONF = -0x3ff796dc + CSIZE = 0x30 + CSMAP_DIR = "/usr/lib/nls/csmap/" + CSTART = '\021' + CSTOP = '\023' + CSTOPB = 0x40 + CSUSP = 0x1a + ECHO = 0x8 + ECHOCTL = 0x20000 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x80000 + ECHONL = 0x40 + ECHOPRT = 0x40000 + ECH_ICMPID = 0x2 + ETHERNET_CSMACD = 0x6 + EVENP = 0x80 + EXCONTINUE = 0x0 + EXDLOK = 0x3 + EXIO = 0x2 + EXPGIO = 0x0 + EXRESUME = 0x2 + EXRETURN = 0x1 + EXSIG = 0x4 + EXTA = 0xe + EXTB = 0xf + EXTRAP = 0x1 + EYEC_RTENTRYA = 0x257274656e747241 + EYEC_RTENTRYF = 0x257274656e747246 + E_ACC = 0x0 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0xfffe + FF0 = 0x0 + FF1 = 0x2000 + FFDLY = 0x2000 + FLUSHBAND = 0x40 + FLUSHLOW = 0x8 + FLUSHO = 0x100000 + FLUSHR = 0x1 + FLUSHRW = 0x3 + FLUSHW = 0x2 + F_CLOSEM = 0xa + F_DUP2FD = 0xe + F_DUPFD = 0x0 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x5 + F_GETLK64 = 0xb + F_GETOWN = 0x8 + F_LOCK = 0x1 + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x6 + F_SETLK64 = 0xc + F_SETLKW = 0x7 + F_SETLKW64 = 0xd + F_SETOWN = 0x9 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_TSTLK = 0xf + F_ULOCK = 0x0 + F_UNLCK = 0x3 + F_WRLCK = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMP6_FILTER = 0x26 + ICMP6_SEC_SEND_DEL = 0x46 + ICMP6_SEC_SEND_GET = 0x47 + ICMP6_SEC_SEND_SET = 0x44 + ICMP6_SEC_SEND_SET_CGA_ADDR = 0x45 + ICRNL = 0x100 + IEXTEN = 0x200000 + IFA_FIRSTALIAS = 0x2000 + IFA_ROUTE = 0x1 + IFF_64BIT = 0x4000000 + IFF_ALLCAST = 0x20000 + IFF_ALLMULTI = 0x200 + IFF_BPF = 0x8000000 + IFF_BRIDGE = 0x40000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x80c52 + IFF_CHECKSUM_OFFLOAD = 0x10000000 + IFF_D1 = 0x8000 + IFF_D2 = 0x4000 + IFF_D3 = 0x2000 + IFF_D4 = 0x1000 + IFF_DEBUG = 0x4 + IFF_DEVHEALTH = 0x4000 + IFF_DO_HW_LOOPBACK = 0x10000 + IFF_GROUP_ROUTING = 0x2000000 + IFF_IFBUFMGT = 0x800000 + IFF_LINK0 = 0x100000 + IFF_LINK1 = 0x200000 + IFF_LINK2 = 0x400000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x80000 + IFF_NOARP = 0x80 + IFF_NOECHO = 0x800 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_PSEG = 0x40000000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_SNAP = 0x8000 + IFF_TCP_DISABLE_CKSUM = 0x20000000 + IFF_TCP_NOCKSUM = 0x1000000 + IFF_UP = 0x1 + IFF_VIPA = 0x80000000 + IFNAMSIZ = 0x10 + IFO_FLUSH = 0x1 + IFT_1822 = 0x2 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_CEPT = 0x13 + IFT_CLUSTER = 0x3e + IFT_DS3 = 0x1e + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FCS = 0x3a + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIFTUNNEL = 0x3c + IFT_HDH1822 = 0x3 + IFT_HF = 0x3d + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IB = 0xc7 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SN = 0x38 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SP = 0x39 + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_TUNNEL = 0x3b + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_VIPA = 0x37 + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x10000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_USE = 0x1 + IPPROTO_AH = 0x33 + IPPROTO_BIP = 0x53 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GIF = 0x8c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_LOCAL = 0x3f + IPPROTO_MAX = 0x100 + IPPROTO_MH = 0x87 + IPPROTO_NONE = 0x3b + IPPROTO_PUP = 0xc + IPPROTO_QOS = 0x2d + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPV6_ADDRFORM = 0x16 + IPV6_ADDR_PREFERENCES = 0x4a + IPV6_ADD_MEMBERSHIP = 0xc + IPV6_AIXRAWSOCKET = 0x39 + IPV6_CHECKSUM = 0x27 + IPV6_DONTFRAG = 0x2d + IPV6_DROP_MEMBERSHIP = 0xd + IPV6_DSTOPTS = 0x36 + IPV6_FLOWINFO_FLOWLABEL = 0xffffff + IPV6_FLOWINFO_PRIFLOW = 0xfffffff + IPV6_FLOWINFO_PRIORITY = 0xf000000 + IPV6_FLOWINFO_SRFLAG = 0x10000000 + IPV6_FLOWINFO_VERSION = 0xf0000000 + IPV6_HOPLIMIT = 0x28 + IPV6_HOPOPTS = 0x34 + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MIPDSTOPTS = 0x36 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_NOPROBE = 0x1c + IPV6_PATHMTU = 0x2e + IPV6_PKTINFO = 0x21 + IPV6_PKTOPTIONS = 0x24 + IPV6_PRIORITY_10 = 0xa000000 + IPV6_PRIORITY_11 = 0xb000000 + IPV6_PRIORITY_12 = 0xc000000 + IPV6_PRIORITY_13 = 0xd000000 + IPV6_PRIORITY_14 = 0xe000000 + IPV6_PRIORITY_15 = 0xf000000 + IPV6_PRIORITY_8 = 0x8000000 + IPV6_PRIORITY_9 = 0x9000000 + IPV6_PRIORITY_BULK = 0x4000000 + IPV6_PRIORITY_CONTROL = 0x7000000 + IPV6_PRIORITY_FILLER = 0x1000000 + IPV6_PRIORITY_INTERACTIVE = 0x6000000 + IPV6_PRIORITY_RESERVED1 = 0x3000000 + IPV6_PRIORITY_RESERVED2 = 0x5000000 + IPV6_PRIORITY_UNATTENDED = 0x2000000 + IPV6_PRIORITY_UNCHARACTERIZED = 0x0 + IPV6_RECVDSTOPTS = 0x38 + IPV6_RECVHOPLIMIT = 0x29 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVHOPS = 0x22 + IPV6_RECVIF = 0x1e + IPV6_RECVPATHMTU = 0x2f + IPV6_RECVPKTINFO = 0x23 + IPV6_RECVRTHDR = 0x33 + IPV6_RECVSRCRT = 0x1d + IPV6_RECVTCLASS = 0x2a + IPV6_RTHDR = 0x32 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RTHDR_TYPE_2 = 0x2 + IPV6_SENDIF = 0x1f + IPV6_SRFLAG_LOOSE = 0x0 + IPV6_SRFLAG_STRICT = 0x10000000 + IPV6_TCLASS = 0x2b + IPV6_TOKEN_LENGTH = 0x40 + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2c + IPV6_V6ONLY = 0x25 + IPV6_VERSION = 0x60000000 + IP_ADDRFORM = 0x16 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x3c + IP_BLOCK_SOURCE = 0x3a + IP_BROADCAST_IF = 0x10 + IP_CACHE_LINE_SIZE = 0x80 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DHCPMODE = 0x11 + IP_DONTFRAG = 0x19 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x3d + IP_FINDPMTU = 0x1a + IP_HDRINCL = 0x2 + IP_INC_MEMBERSHIPS = 0x14 + IP_INIT_MEMBERSHIP = 0x14 + IP_MAXPACKET = 0xffff + IP_MF = 0x2000 + IP_MSS = 0x240 + IP_MULTICAST_HOPS = 0xa + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OPT = 0x1b + IP_OPTIONS = 0x1 + IP_PMTUAGE = 0x1b + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVIFINFO = 0xf + IP_RECVINTERFACE = 0x20 + IP_RECVMACHDR = 0xe + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x22 + IP_RETOPTS = 0x8 + IP_SOURCE_FILTER = 0x48 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x3b + IP_UNICAST_HOPS = 0x4 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x800 + IXANY = 0x1000 + IXOFF = 0x400 + IXON = 0x200 + I_FLUSH = 0x20005305 + LNOFLSH = 0x8000 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ANON = 0x10 + MAP_ANONYMOUS = 0x10 + MAP_FILE = 0x0 + MAP_FIXED = 0x100 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_TYPE = 0xf0 + MAP_VARIABLE = 0x0 + MCAST_BLOCK_SOURCE = 0x40 + MCAST_EXCLUDE = 0x2 + MCAST_INCLUDE = 0x1 + MCAST_JOIN_GROUP = 0x3e + MCAST_JOIN_SOURCE_GROUP = 0x42 + MCAST_LEAVE_GROUP = 0x3f + MCAST_LEAVE_SOURCE_GROUP = 0x43 + MCAST_SOURCE_FILTER = 0x49 + MCAST_UNBLOCK_SOURCE = 0x41 + MCL_CURRENT = 0x100 + MCL_FUTURE = 0x200 + MSG_ANY = 0x4 + MSG_ARGEXT = 0x400 + MSG_BAND = 0x2 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_EOR = 0x8 + MSG_HIPRI = 0x1 + MSG_MAXIOVLEN = 0x10 + MSG_MPEG2 = 0x80 + MSG_NONBLOCK = 0x4000 + MSG_NOSIGNAL = 0x100 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITFORONE = 0x200 + MS_ASYNC = 0x10 + MS_EINTR = 0x80 + MS_INVALIDATE = 0x40 + MS_PER_SEC = 0x3e8 + MS_SYNC = 0x20 + NFDBITS = 0x20 + NL0 = 0x0 + NL1 = 0x4000 + NL2 = 0x8000 + NL3 = 0xc000 + NLDLY = 0x4000 + NOFLSH = 0x80 + NOFLUSH = 0x80000000 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + ONOEOT = 0x80000 + OPOST = 0x1 + OXTABS = 0x40000 + O_ACCMODE = 0x23 + O_APPEND = 0x8 + O_CIO = 0x80 + O_CIOR = 0x800000000 + O_CLOEXEC = 0x800000 + O_CREAT = 0x100 + O_DEFER = 0x2000 + O_DELAY = 0x4000 + O_DIRECT = 0x8000000 + O_DIRECTORY = 0x80000 + O_DSYNC = 0x400000 + O_EFSOFF = 0x400000000 + O_EFSON = 0x200000000 + O_EXCL = 0x400 + O_EXEC = 0x20 + O_LARGEFILE = 0x4000000 + O_NDELAY = 0x8000 + O_NOCACHE = 0x100000 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x1000000 + O_NONBLOCK = 0x4 + O_NONE = 0x3 + O_NSHARE = 0x10000 + O_RAW = 0x100000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSHARE = 0x1000 + O_RSYNC = 0x200000 + O_SEARCH = 0x20 + O_SNAPSHOT = 0x40 + O_SYNC = 0x10 + O_TRUNC = 0x200 + O_TTY_INIT = 0x0 + O_WRONLY = 0x1 + PARENB = 0x100 + PAREXT = 0x100000 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_64BIT = 0x20 + PR_ADDR = 0x2 + PR_ARGEXT = 0x400 + PR_ATOMIC = 0x1 + PR_CONNREQUIRED = 0x4 + PR_FASTHZ = 0x5 + PR_INP = 0x40 + PR_INTRLEVEL = 0x8000 + PR_MLS = 0x100 + PR_MLS_1_LABEL = 0x200 + PR_NOEOR = 0x4000 + PR_RIGHTS = 0x10 + PR_SLOWHZ = 0x2 + PR_WANTRCVD = 0x8 + RLIMIT_AS = 0x6 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x9 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DOWNSTREAM = 0x100 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTC_IA64 = 0x3 + RTC_POWER = 0x1 + RTC_POWER_PC = 0x2 + RTF_ACTIVE_DGD = 0x1000000 + RTF_BCE = 0x80000 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_BUL = 0x2000 + RTF_CLONE = 0x10000 + RTF_CLONED = 0x20000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FREE_IN_PROG = 0x4000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PERMANENT6 = 0x8000000 + RTF_PINNED = 0x100000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_SMALLMTU = 0x40000 + RTF_STATIC = 0x800 + RTF_STOPSRCH = 0x2000000 + RTF_UNREACHABLE = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_EXPIRE = 0xf + RTM_GET = 0x4 + RTM_GETNEXT = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTLOST = 0x10 + RTM_RTTUNIT = 0xf4240 + RTM_SAMEADDR = 0x12 + RTM_SET = 0x13 + RTM_VERSION = 0x2 + RTM_VERSION_GR = 0x4 + RTM_VERSION_GR_COMPAT = 0x3 + RTM_VERSION_POLICY = 0x5 + RTM_VERSION_POLICY_EXT = 0x6 + RTM_VERSION_POLICY_PRFN = 0x7 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_RIGHTS = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIGMAX64 = 0xff + SIGQUEUE_MAX = 0x20 + SIOCADDIFVIPA = 0x20006942 + SIOCADDMTU = -0x7ffb9690 + SIOCADDMULTI = -0x7fdf96cf + SIOCADDNETID = -0x7fd796a9 + SIOCADDRT = -0x7fcf8df6 + SIOCAIFADDR = -0x7fbf96e6 + SIOCATMARK = 0x40047307 + SIOCDARP = -0x7fb396e0 + SIOCDELIFVIPA = 0x20006943 + SIOCDELMTU = -0x7ffb968f + SIOCDELMULTI = -0x7fdf96ce + SIOCDELPMTU = -0x7fd78ff6 + SIOCDELRT = -0x7fcf8df5 + SIOCDIFADDR = -0x7fd796e7 + SIOCDNETOPT = -0x3ffe9680 + SIOCDX25XLATE = -0x7fd7969b + SIOCFIFADDR = -0x7fdf966d + SIOCGARP = -0x3fb396da + SIOCGETMTUS = 0x2000696f + SIOCGETSGCNT = -0x3feb8acc + SIOCGETVIFCNT = -0x3feb8acd + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = -0x3fd796df + SIOCGIFADDRS = 0x2000698c + SIOCGIFBAUDRATE = -0x3fdf9669 + SIOCGIFBRDADDR = -0x3fd796dd + SIOCGIFCONF = -0x3ff796bb + SIOCGIFCONFGLOB = -0x3ff79670 + SIOCGIFDSTADDR = -0x3fd796de + SIOCGIFFLAGS = -0x3fd796ef + SIOCGIFGIDLIST = 0x20006968 + SIOCGIFHWADDR = -0x3fab966b + SIOCGIFMETRIC = -0x3fd796e9 + SIOCGIFMTU = -0x3fd796aa + SIOCGIFNETMASK = -0x3fd796db + SIOCGIFOPTIONS = -0x3fd796d6 + SIOCGISNO = -0x3fd79695 + SIOCGLOADF = -0x3ffb967e + SIOCGLOWAT = 0x40047303 + SIOCGNETOPT = -0x3ffe96a5 + SIOCGNETOPT1 = -0x3fdf967f + SIOCGNMTUS = 0x2000696e + SIOCGPGRP = 0x40047309 + SIOCGSIZIFCONF = 0x4004696a + SIOCGSRCFILTER = -0x3fe796cb + SIOCGTUNEPHASE = -0x3ffb9676 + SIOCGX25XLATE = -0x3fd7969c + SIOCIFATTACH = -0x7fdf9699 + SIOCIFDETACH = -0x7fdf969a + SIOCIFGETPKEY = -0x7fdf969b + SIOCIF_ATM_DARP = -0x7fdf9683 + SIOCIF_ATM_DUMPARP = -0x7fdf9685 + SIOCIF_ATM_GARP = -0x7fdf9682 + SIOCIF_ATM_IDLE = -0x7fdf9686 + SIOCIF_ATM_SARP = -0x7fdf9681 + SIOCIF_ATM_SNMPARP = -0x7fdf9687 + SIOCIF_ATM_SVC = -0x7fdf9684 + SIOCIF_ATM_UBR = -0x7fdf9688 + SIOCIF_DEVHEALTH = -0x7ffb966c + SIOCIF_IB_ARP_INCOMP = -0x7fdf9677 + SIOCIF_IB_ARP_TIMER = -0x7fdf9678 + SIOCIF_IB_CLEAR_PINFO = -0x3fdf966f + SIOCIF_IB_DEL_ARP = -0x7fdf967f + SIOCIF_IB_DEL_PINFO = -0x3fdf9670 + SIOCIF_IB_DUMP_ARP = -0x7fdf9680 + SIOCIF_IB_GET_ARP = -0x7fdf967e + SIOCIF_IB_GET_INFO = -0x3f879675 + SIOCIF_IB_GET_STATS = -0x3f879672 + SIOCIF_IB_NOTIFY_ADDR_REM = -0x3f87966a + SIOCIF_IB_RESET_STATS = -0x3f879671 + SIOCIF_IB_RESIZE_CQ = -0x7fdf9679 + SIOCIF_IB_SET_ARP = -0x7fdf967d + SIOCIF_IB_SET_PKEY = -0x7fdf967c + SIOCIF_IB_SET_PORT = -0x7fdf967b + SIOCIF_IB_SET_QKEY = -0x7fdf9676 + SIOCIF_IB_SET_QSIZE = -0x7fdf967a + SIOCLISTIFVIPA = 0x20006944 + SIOCSARP = -0x7fb396e2 + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = -0x7fd796f4 + SIOCSIFADDRORI = -0x7fdb9673 + SIOCSIFBRDADDR = -0x7fd796ed + SIOCSIFDSTADDR = -0x7fd796f2 + SIOCSIFFLAGS = -0x7fd796f0 + SIOCSIFGIDLIST = 0x20006969 + SIOCSIFMETRIC = -0x7fd796e8 + SIOCSIFMTU = -0x7fd796a8 + SIOCSIFNETDUMP = -0x7fd796e4 + SIOCSIFNETMASK = -0x7fd796ea + SIOCSIFOPTIONS = -0x7fd796d7 + SIOCSIFSUBCHAN = -0x7fd796e5 + SIOCSISNO = -0x7fd79694 + SIOCSLOADF = -0x3ffb967d + SIOCSLOWAT = 0x80047302 + SIOCSNETOPT = -0x7ffe96a6 + SIOCSPGRP = 0x80047308 + SIOCSX25XLATE = -0x7fd7969d + SOCK_CONN_DGRAM = 0x6 + SOCK_DGRAM = 0x2 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x400 + SO_ACCEPTCONN = 0x2 + SO_AUDIT = 0x8000 + SO_BROADCAST = 0x20 + SO_CKSUMRECV = 0x800 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_KERNACCEPT = 0x2000 + SO_LINGER = 0x80 + SO_NOMULTIPATH = 0x4000 + SO_NOREUSEADDR = 0x1000 + SO_OOBINLINE = 0x100 + SO_PEERID = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMPNS = 0x100a + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USE_IFBUFS = 0x400 + S_BANDURG = 0x400 + S_EMODFMT = 0x3c000000 + S_ENFMT = 0x400 + S_ERROR = 0x100 + S_HANGUP = 0x200 + S_HIPRI = 0x2 + S_ICRYPTO = 0x80000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFJOURNAL = 0x10000 + S_IFLNK = 0xa000 + S_IFMPX = 0x2200 + S_IFMT = 0xf000 + S_IFPDIR = 0x4000000 + S_IFPSDIR = 0x8000000 + S_IFPSSDIR = 0xc000000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFSYSEA = 0x30000000 + S_INPUT = 0x1 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_ITCB = 0x1000000 + S_ITP = 0x800000 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXACL = 0x2000000 + S_IXATTR = 0x40000 + S_IXGRP = 0x8 + S_IXINTERFACE = 0x100000 + S_IXMOD = 0x40000000 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + S_MSG = 0x8 + S_OUTPUT = 0x4 + S_RDBAND = 0x20 + S_RDNORM = 0x10 + S_RESERVED1 = 0x20000 + S_RESERVED2 = 0x200000 + S_RESERVED3 = 0x400000 + S_RESERVED4 = 0x80000000 + S_RESFMT1 = 0x10000000 + S_RESFMT10 = 0x34000000 + S_RESFMT11 = 0x38000000 + S_RESFMT12 = 0x3c000000 + S_RESFMT2 = 0x14000000 + S_RESFMT3 = 0x18000000 + S_RESFMT4 = 0x1c000000 + S_RESFMT5 = 0x20000000 + S_RESFMT6 = 0x24000000 + S_RESFMT7 = 0x28000000 + S_RESFMT8 = 0x2c000000 + S_WRBAND = 0x80 + S_WRNORM = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0xc00 + TABDLY = 0xc00 + TCFLSH = 0x540c + TCGETA = 0x5405 + TCGETS = 0x5401 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_24DAYS_WORTH_OF_SLOWTICKS = 0x3f4800 + TCP_ACLADD = 0x23 + TCP_ACLBIND = 0x26 + TCP_ACLCLEAR = 0x22 + TCP_ACLDEL = 0x24 + TCP_ACLDENY = 0x8 + TCP_ACLFLUSH = 0x21 + TCP_ACLGID = 0x1 + TCP_ACLLS = 0x25 + TCP_ACLSUBNET = 0x4 + TCP_ACLUID = 0x2 + TCP_CWND_DF = 0x16 + TCP_CWND_IF = 0x15 + TCP_DELAY_ACK_FIN = 0x2 + TCP_DELAY_ACK_SYN = 0x1 + TCP_FASTNAME = 0x101080a + TCP_KEEPCNT = 0x13 + TCP_KEEPIDLE = 0x11 + TCP_KEEPINTVL = 0x12 + TCP_LSPRIV = 0x29 + TCP_LUID = 0x20 + TCP_MAXBURST = 0x8 + TCP_MAXDF = 0x64 + TCP_MAXIF = 0x64 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAXWINDOWSCALE = 0xe + TCP_MAX_SACK = 0x4 + TCP_MSS = 0x5b4 + TCP_NODELAY = 0x1 + TCP_NODELAYACK = 0x14 + TCP_NOREDUCE_CWND_EXIT_FRXMT = 0x19 + TCP_NOREDUCE_CWND_IN_FRXMT = 0x18 + TCP_NOTENTER_SSTART = 0x17 + TCP_OPT = 0x19 + TCP_RFC1323 = 0x4 + TCP_SETPRIV = 0x27 + TCP_STDURG = 0x10 + TCP_TIMESTAMP_OPTLEN = 0xc + TCP_UNSETPRIV = 0x28 + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETSF = 0x5404 + TCSETSW = 0x5403 + TCXONC = 0x540b + TIMER_ABSTIME = 0x3e7 + TIMER_MAX = 0x20 + TIOC = 0x5400 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCEXCL = 0x2000740d + TIOCFLUSH = 0x80047410 + TIOCGETC = 0x40067412 + TIOCGETD = 0x40047400 + TIOCGETP = 0x40067408 + TIOCGLTC = 0x40067474 + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047448 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCHPCL = 0x20007402 + TIOCLBIC = 0x8004747e + TIOCLBIS = 0x8004747f + TIOCLGET = 0x4004747c + TIOCLSET = 0x8004747d + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMIWAIT = 0x80047464 + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSDTR = 0x20007479 + TIOCSETC = 0x80067411 + TIOCSETD = 0x80047401 + TIOCSETN = 0x8006740a + TIOCSETP = 0x80067409 + TIOCSLTC = 0x80067475 + TIOCSPGRP = 0x80047476 + TIOCSSIZE = 0x80087467 + TIOCSTART = 0x2000746e + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x10000 + UTIME_NOW = -0x2 + UTIME_OMIT = -0x3 + VDISCRD = 0xc + VDSUSP = 0xa + VEOF = 0x4 + VEOL = 0x5 + VEOL2 = 0x6 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xe + VMIN = 0x4 + VQUIT = 0x1 + VREPRINT = 0xb + VSTART = 0x7 + VSTOP = 0x8 + VSTRT = 0x7 + VSUSP = 0x9 + VT0 = 0x0 + VT1 = 0x8000 + VTDELAY = 0x2000 + VTDLY = 0x8000 + VTIME = 0x5 + VWERSE = 0xd + WPARSTART = 0x1 + WPARSTOP = 0x2 + WPARTTYNAME = "Global" + XCASE = 0x4 + XTABS = 0xc00 + _FDATAFLUSH = 0x2000000000 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x43) + EADDRNOTAVAIL = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x42) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x38) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x78) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x75) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x25) + ECLONEME = syscall.Errno(0x52) + ECONNABORTED = syscall.Errno(0x48) + ECONNREFUSED = syscall.Errno(0x4f) + ECONNRESET = syscall.Errno(0x49) + ECORRUPT = syscall.Errno(0x59) + EDEADLK = syscall.Errno(0x2d) + EDESTADDREQ = syscall.Errno(0x3a) + EDESTADDRREQ = syscall.Errno(0x3a) + EDIST = syscall.Errno(0x35) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x58) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFORMAT = syscall.Errno(0x30) + EHOSTDOWN = syscall.Errno(0x50) + EHOSTUNREACH = syscall.Errno(0x51) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x74) + EINPROGRESS = syscall.Errno(0x37) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x4b) + EISDIR = syscall.Errno(0x15) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELNRNG = syscall.Errno(0x29) + ELOOP = syscall.Errno(0x55) + EMEDIA = syscall.Errno(0x6e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x3b) + EMULTIHOP = syscall.Errno(0x7d) + ENAMETOOLONG = syscall.Errno(0x56) + ENETDOWN = syscall.Errno(0x45) + ENETRESET = syscall.Errno(0x47) + ENETUNREACH = syscall.Errno(0x46) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x70) + ENOBUFS = syscall.Errno(0x4a) + ENOCONNECT = syscall.Errno(0x32) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x7a) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x31) + ENOLINK = syscall.Errno(0x7e) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x23) + ENOPROTOOPT = syscall.Errno(0x3d) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x76) + ENOSTR = syscall.Errno(0x7b) + ENOSYS = syscall.Errno(0x6d) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x4c) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x11) + ENOTREADY = syscall.Errno(0x2e) + ENOTRECOVERABLE = syscall.Errno(0x5e) + ENOTRUST = syscall.Errno(0x72) + ENOTSOCK = syscall.Errno(0x39) + ENOTSUP = syscall.Errno(0x7c) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x40) + EOVERFLOW = syscall.Errno(0x7f) + EOWNERDEAD = syscall.Errno(0x5f) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x41) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x53) + EPROTO = syscall.Errno(0x79) + EPROTONOSUPPORT = syscall.Errno(0x3e) + EPROTOTYPE = syscall.Errno(0x3c) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x5d) + ERESTART = syscall.Errno(0x52) + EROFS = syscall.Errno(0x1e) + ESAD = syscall.Errno(0x71) + ESHUTDOWN = syscall.Errno(0x4d) + ESOCKTNOSUPPORT = syscall.Errno(0x3f) + ESOFT = syscall.Errno(0x6f) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x34) + ESYSERROR = syscall.Errno(0x5a) + ETIME = syscall.Errno(0x77) + ETIMEDOUT = syscall.Errno(0x4e) + ETOOMANYREFS = syscall.Errno(0x73) + ETXTBSY = syscall.Errno(0x1a) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x54) + EWOULDBLOCK = syscall.Errno(0xb) + EWRPROTECT = syscall.Errno(0x2f) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGAIO = syscall.Signal(0x17) + SIGALRM = syscall.Signal(0xe) + SIGALRM1 = syscall.Signal(0x26) + SIGBUS = syscall.Signal(0xa) + SIGCAPI = syscall.Signal(0x31) + SIGCHLD = syscall.Signal(0x14) + SIGCLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGCPUFAIL = syscall.Signal(0x3b) + SIGDANGER = syscall.Signal(0x21) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGGRANT = syscall.Signal(0x3c) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOINT = syscall.Signal(0x10) + SIGIOT = syscall.Signal(0x6) + SIGKAP = syscall.Signal(0x3c) + SIGKILL = syscall.Signal(0x9) + SIGLOST = syscall.Signal(0x6) + SIGMAX = syscall.Signal(0x3f) + SIGMAX32 = syscall.Signal(0x3f) + SIGMIGRATE = syscall.Signal(0x23) + SIGMSG = syscall.Signal(0x1b) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x17) + SIGPRE = syscall.Signal(0x24) + SIGPROF = syscall.Signal(0x20) + SIGPTY = syscall.Signal(0x17) + SIGPWR = syscall.Signal(0x1d) + SIGQUIT = syscall.Signal(0x3) + SIGRECONFIG = syscall.Signal(0x3a) + SIGRETRACT = syscall.Signal(0x3d) + SIGSAK = syscall.Signal(0x3f) + SIGSEGV = syscall.Signal(0xb) + SIGSOUND = syscall.Signal(0x3e) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGSYSERROR = syscall.Signal(0x30) + SIGTALRM = syscall.Signal(0x26) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVIRT = syscall.Signal(0x25) + SIGVTALRM = syscall.Signal(0x22) + SIGWAITING = syscall.Signal(0x27) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "not owner"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "I/O error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "arg list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file number"}, + {10, "ECHILD", "no child processes"}, + {11, "EWOULDBLOCK", "resource temporarily unavailable"}, + {12, "ENOMEM", "not enough space"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "ENOTEMPTY", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "file table overflow"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "not a typewriter"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "ENOMSG", "no message of desired type"}, + {36, "EIDRM", "identifier removed"}, + {37, "ECHRNG", "channel number out of range"}, + {38, "EL2NSYNC", "level 2 not synchronized"}, + {39, "EL3HLT", "level 3 halted"}, + {40, "EL3RST", "level 3 reset"}, + {41, "ELNRNG", "link number out of range"}, + {42, "EUNATCH", "protocol driver not attached"}, + {43, "ENOCSI", "no CSI structure available"}, + {44, "EL2HLT", "level 2 halted"}, + {45, "EDEADLK", "deadlock condition if locked"}, + {46, "ENOTREADY", "device not ready"}, + {47, "EWRPROTECT", "write-protected media"}, + {48, "EFORMAT", "unformatted or incompatible media"}, + {49, "ENOLCK", "no locks available"}, + {50, "ENOCONNECT", "cannot Establish Connection"}, + {52, "ESTALE", "missing file or filesystem"}, + {53, "EDIST", "requests blocked by Administrator"}, + {55, "EINPROGRESS", "operation now in progress"}, + {56, "EALREADY", "operation already in progress"}, + {57, "ENOTSOCK", "socket operation on non-socket"}, + {58, "EDESTADDREQ", "destination address required"}, + {59, "EMSGSIZE", "message too long"}, + {60, "EPROTOTYPE", "protocol wrong type for socket"}, + {61, "ENOPROTOOPT", "protocol not available"}, + {62, "EPROTONOSUPPORT", "protocol not supported"}, + {63, "ESOCKTNOSUPPORT", "socket type not supported"}, + {64, "EOPNOTSUPP", "operation not supported on socket"}, + {65, "EPFNOSUPPORT", "protocol family not supported"}, + {66, "EAFNOSUPPORT", "addr family not supported by protocol"}, + {67, "EADDRINUSE", "address already in use"}, + {68, "EADDRNOTAVAIL", "can't assign requested address"}, + {69, "ENETDOWN", "network is down"}, + {70, "ENETUNREACH", "network is unreachable"}, + {71, "ENETRESET", "network dropped connection on reset"}, + {72, "ECONNABORTED", "software caused connection abort"}, + {73, "ECONNRESET", "connection reset by peer"}, + {74, "ENOBUFS", "no buffer space available"}, + {75, "EISCONN", "socket is already connected"}, + {76, "ENOTCONN", "socket is not connected"}, + {77, "ESHUTDOWN", "can't send after socket shutdown"}, + {78, "ETIMEDOUT", "connection timed out"}, + {79, "ECONNREFUSED", "connection refused"}, + {80, "EHOSTDOWN", "host is down"}, + {81, "EHOSTUNREACH", "no route to host"}, + {82, "ERESTART", "restart the system call"}, + {83, "EPROCLIM", "too many processes"}, + {84, "EUSERS", "too many users"}, + {85, "ELOOP", "too many levels of symbolic links"}, + {86, "ENAMETOOLONG", "file name too long"}, + {88, "EDQUOT", "disk quota exceeded"}, + {89, "ECORRUPT", "invalid file system control data detected"}, + {90, "ESYSERROR", "for future use "}, + {93, "EREMOTE", "item is not local to host"}, + {94, "ENOTRECOVERABLE", "state not recoverable "}, + {95, "EOWNERDEAD", "previous owner died "}, + {109, "ENOSYS", "function not implemented"}, + {110, "EMEDIA", "media surface error"}, + {111, "ESOFT", "I/O completed, but needs relocation"}, + {112, "ENOATTR", "no attribute found"}, + {113, "ESAD", "security Authentication Denied"}, + {114, "ENOTRUST", "not a Trusted Program"}, + {115, "ETOOMANYREFS", "too many references: can't splice"}, + {116, "EILSEQ", "invalid wide character"}, + {117, "ECANCELED", "asynchronous I/O cancelled"}, + {118, "ENOSR", "out of STREAMS resources"}, + {119, "ETIME", "system call timed out"}, + {120, "EBADMSG", "next message has wrong type"}, + {121, "EPROTO", "error in protocol"}, + {122, "ENODATA", "no message on stream head read q"}, + {123, "ENOSTR", "fd not associated with a stream"}, + {124, "ENOTSUP", "unsupported attribute value"}, + {125, "EMULTIHOP", "multihop is not allowed"}, + {126, "ENOLINK", "the server link has been severed"}, + {127, "EOVERFLOW", "value too large to be stored in data type"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGIOT", "IOT/Abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "stopped (signal)"}, + {18, "SIGTSTP", "stopped"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible/complete"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {27, "SIGMSG", "input device data"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGPWR", "power-failure"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGPROF", "profiling timer expired"}, + {33, "SIGDANGER", "paging space low"}, + {34, "SIGVTALRM", "virtual timer expired"}, + {35, "SIGMIGRATE", "signal 35"}, + {36, "SIGPRE", "signal 36"}, + {37, "SIGVIRT", "signal 37"}, + {38, "SIGTALRM", "signal 38"}, + {39, "SIGWAITING", "signal 39"}, + {48, "SIGSYSERROR", "signal 48"}, + {49, "SIGCAPI", "signal 49"}, + {58, "SIGRECONFIG", "signal 58"}, + {59, "SIGCPUFAIL", "CPU Failure Predicted"}, + {60, "SIGKAP", "monitor mode granted"}, + {61, "SIGRETRACT", "monitor mode retracted"}, + {62, "SIGSOUND", "sound completed"}, + {63, "SIGSAK", "secure attention"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go new file mode 100644 index 0000000..200c8c2 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go @@ -0,0 +1,1386 @@ +// mkerrors.sh -maix64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build ppc64 && aix +// +build ppc64,aix + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -maix64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_BYPASS = 0x19 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_INTF = 0x14 + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x1e + AF_NDD = 0x17 + AF_NETWARE = 0x16 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_RIF = 0x15 + AF_ROUTE = 0x11 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ALTWERASE = 0x400000 + ARPHRD_802_3 = 0x6 + ARPHRD_802_5 = 0x6 + ARPHRD_ETHER = 0x1 + ARPHRD_FDDI = 0x1 + B0 = 0x0 + B110 = 0x3 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2400 = 0xb + B300 = 0x7 + B38400 = 0xf + B4800 = 0xc + B50 = 0x1 + B600 = 0x8 + B75 = 0x2 + B9600 = 0xd + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x1000 + BSDLY = 0x1000 + CAP_AACCT = 0x6 + CAP_ARM_APPLICATION = 0x5 + CAP_BYPASS_RAC_VMM = 0x3 + CAP_CLEAR = 0x0 + CAP_CREDENTIALS = 0x7 + CAP_EFFECTIVE = 0x1 + CAP_EWLM_AGENT = 0x4 + CAP_INHERITABLE = 0x2 + CAP_MAXIMUM = 0x7 + CAP_NUMA_ATTACH = 0x2 + CAP_PERMITTED = 0x3 + CAP_PROPAGATE = 0x1 + CAP_PROPOGATE = 0x1 + CAP_SET = 0x1 + CBAUD = 0xf + CFLUSH = 0xf + CIBAUD = 0xf0000 + CLOCAL = 0x800 + CLOCK_MONOTONIC = 0xa + CLOCK_PROCESS_CPUTIME_ID = 0xb + CLOCK_REALTIME = 0x9 + CLOCK_THREAD_CPUTIME_ID = 0xc + CR0 = 0x0 + CR1 = 0x100 + CR2 = 0x200 + CR3 = 0x300 + CRDLY = 0x300 + CREAD = 0x80 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIOCGIFCONF = -0x3fef96dc + CSIZE = 0x30 + CSMAP_DIR = "/usr/lib/nls/csmap/" + CSTART = '\021' + CSTOP = '\023' + CSTOPB = 0x40 + CSUSP = 0x1a + ECHO = 0x8 + ECHOCTL = 0x20000 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x80000 + ECHONL = 0x40 + ECHOPRT = 0x40000 + ECH_ICMPID = 0x2 + ETHERNET_CSMACD = 0x6 + EVENP = 0x80 + EXCONTINUE = 0x0 + EXDLOK = 0x3 + EXIO = 0x2 + EXPGIO = 0x0 + EXRESUME = 0x2 + EXRETURN = 0x1 + EXSIG = 0x4 + EXTA = 0xe + EXTB = 0xf + EXTRAP = 0x1 + EYEC_RTENTRYA = 0x257274656e747241 + EYEC_RTENTRYF = 0x257274656e747246 + E_ACC = 0x0 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0xfffe + FF0 = 0x0 + FF1 = 0x2000 + FFDLY = 0x2000 + FLUSHBAND = 0x40 + FLUSHLOW = 0x8 + FLUSHO = 0x100000 + FLUSHR = 0x1 + FLUSHRW = 0x3 + FLUSHW = 0x2 + F_CLOSEM = 0xa + F_DUP2FD = 0xe + F_DUPFD = 0x0 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xb + F_GETLK64 = 0xb + F_GETOWN = 0x8 + F_LOCK = 0x1 + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0xc + F_SETLK64 = 0xc + F_SETLKW = 0xd + F_SETLKW64 = 0xd + F_SETOWN = 0x9 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_TSTLK = 0xf + F_ULOCK = 0x0 + F_UNLCK = 0x3 + F_WRLCK = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMP6_FILTER = 0x26 + ICMP6_SEC_SEND_DEL = 0x46 + ICMP6_SEC_SEND_GET = 0x47 + ICMP6_SEC_SEND_SET = 0x44 + ICMP6_SEC_SEND_SET_CGA_ADDR = 0x45 + ICRNL = 0x100 + IEXTEN = 0x200000 + IFA_FIRSTALIAS = 0x2000 + IFA_ROUTE = 0x1 + IFF_64BIT = 0x4000000 + IFF_ALLCAST = 0x20000 + IFF_ALLMULTI = 0x200 + IFF_BPF = 0x8000000 + IFF_BRIDGE = 0x40000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x80c52 + IFF_CHECKSUM_OFFLOAD = 0x10000000 + IFF_D1 = 0x8000 + IFF_D2 = 0x4000 + IFF_D3 = 0x2000 + IFF_D4 = 0x1000 + IFF_DEBUG = 0x4 + IFF_DEVHEALTH = 0x4000 + IFF_DO_HW_LOOPBACK = 0x10000 + IFF_GROUP_ROUTING = 0x2000000 + IFF_IFBUFMGT = 0x800000 + IFF_LINK0 = 0x100000 + IFF_LINK1 = 0x200000 + IFF_LINK2 = 0x400000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x80000 + IFF_NOARP = 0x80 + IFF_NOECHO = 0x800 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_PSEG = 0x40000000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_SNAP = 0x8000 + IFF_TCP_DISABLE_CKSUM = 0x20000000 + IFF_TCP_NOCKSUM = 0x1000000 + IFF_UP = 0x1 + IFF_VIPA = 0x80000000 + IFNAMSIZ = 0x10 + IFO_FLUSH = 0x1 + IFT_1822 = 0x2 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_CEPT = 0x13 + IFT_CLUSTER = 0x3e + IFT_DS3 = 0x1e + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FCS = 0x3a + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIFTUNNEL = 0x3c + IFT_HDH1822 = 0x3 + IFT_HF = 0x3d + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IB = 0xc7 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SN = 0x38 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SP = 0x39 + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_TUNNEL = 0x3b + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_VIPA = 0x37 + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x10000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_USE = 0x1 + IPPROTO_AH = 0x33 + IPPROTO_BIP = 0x53 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GIF = 0x8c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_LOCAL = 0x3f + IPPROTO_MAX = 0x100 + IPPROTO_MH = 0x87 + IPPROTO_NONE = 0x3b + IPPROTO_PUP = 0xc + IPPROTO_QOS = 0x2d + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPV6_ADDRFORM = 0x16 + IPV6_ADDR_PREFERENCES = 0x4a + IPV6_ADD_MEMBERSHIP = 0xc + IPV6_AIXRAWSOCKET = 0x39 + IPV6_CHECKSUM = 0x27 + IPV6_DONTFRAG = 0x2d + IPV6_DROP_MEMBERSHIP = 0xd + IPV6_DSTOPTS = 0x36 + IPV6_FLOWINFO_FLOWLABEL = 0xffffff + IPV6_FLOWINFO_PRIFLOW = 0xfffffff + IPV6_FLOWINFO_PRIORITY = 0xf000000 + IPV6_FLOWINFO_SRFLAG = 0x10000000 + IPV6_FLOWINFO_VERSION = 0xf0000000 + IPV6_HOPLIMIT = 0x28 + IPV6_HOPOPTS = 0x34 + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MIPDSTOPTS = 0x36 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_NOPROBE = 0x1c + IPV6_PATHMTU = 0x2e + IPV6_PKTINFO = 0x21 + IPV6_PKTOPTIONS = 0x24 + IPV6_PRIORITY_10 = 0xa000000 + IPV6_PRIORITY_11 = 0xb000000 + IPV6_PRIORITY_12 = 0xc000000 + IPV6_PRIORITY_13 = 0xd000000 + IPV6_PRIORITY_14 = 0xe000000 + IPV6_PRIORITY_15 = 0xf000000 + IPV6_PRIORITY_8 = 0x8000000 + IPV6_PRIORITY_9 = 0x9000000 + IPV6_PRIORITY_BULK = 0x4000000 + IPV6_PRIORITY_CONTROL = 0x7000000 + IPV6_PRIORITY_FILLER = 0x1000000 + IPV6_PRIORITY_INTERACTIVE = 0x6000000 + IPV6_PRIORITY_RESERVED1 = 0x3000000 + IPV6_PRIORITY_RESERVED2 = 0x5000000 + IPV6_PRIORITY_UNATTENDED = 0x2000000 + IPV6_PRIORITY_UNCHARACTERIZED = 0x0 + IPV6_RECVDSTOPTS = 0x38 + IPV6_RECVHOPLIMIT = 0x29 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVHOPS = 0x22 + IPV6_RECVIF = 0x1e + IPV6_RECVPATHMTU = 0x2f + IPV6_RECVPKTINFO = 0x23 + IPV6_RECVRTHDR = 0x33 + IPV6_RECVSRCRT = 0x1d + IPV6_RECVTCLASS = 0x2a + IPV6_RTHDR = 0x32 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RTHDR_TYPE_2 = 0x2 + IPV6_SENDIF = 0x1f + IPV6_SRFLAG_LOOSE = 0x0 + IPV6_SRFLAG_STRICT = 0x10000000 + IPV6_TCLASS = 0x2b + IPV6_TOKEN_LENGTH = 0x40 + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2c + IPV6_V6ONLY = 0x25 + IPV6_VERSION = 0x60000000 + IP_ADDRFORM = 0x16 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x3c + IP_BLOCK_SOURCE = 0x3a + IP_BROADCAST_IF = 0x10 + IP_CACHE_LINE_SIZE = 0x80 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DHCPMODE = 0x11 + IP_DONTFRAG = 0x19 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x3d + IP_FINDPMTU = 0x1a + IP_HDRINCL = 0x2 + IP_INC_MEMBERSHIPS = 0x14 + IP_INIT_MEMBERSHIP = 0x14 + IP_MAXPACKET = 0xffff + IP_MF = 0x2000 + IP_MSS = 0x240 + IP_MULTICAST_HOPS = 0xa + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OPT = 0x1b + IP_OPTIONS = 0x1 + IP_PMTUAGE = 0x1b + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVIFINFO = 0xf + IP_RECVINTERFACE = 0x20 + IP_RECVMACHDR = 0xe + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x22 + IP_RETOPTS = 0x8 + IP_SOURCE_FILTER = 0x48 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x3b + IP_UNICAST_HOPS = 0x4 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x800 + IXANY = 0x1000 + IXOFF = 0x400 + IXON = 0x200 + I_FLUSH = 0x20005305 + LNOFLSH = 0x8000 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ANON = 0x10 + MAP_ANONYMOUS = 0x10 + MAP_FILE = 0x0 + MAP_FIXED = 0x100 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_TYPE = 0xf0 + MAP_VARIABLE = 0x0 + MCAST_BLOCK_SOURCE = 0x40 + MCAST_EXCLUDE = 0x2 + MCAST_INCLUDE = 0x1 + MCAST_JOIN_GROUP = 0x3e + MCAST_JOIN_SOURCE_GROUP = 0x42 + MCAST_LEAVE_GROUP = 0x3f + MCAST_LEAVE_SOURCE_GROUP = 0x43 + MCAST_SOURCE_FILTER = 0x49 + MCAST_UNBLOCK_SOURCE = 0x41 + MCL_CURRENT = 0x100 + MCL_FUTURE = 0x200 + MSG_ANY = 0x4 + MSG_ARGEXT = 0x400 + MSG_BAND = 0x2 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_EOR = 0x8 + MSG_HIPRI = 0x1 + MSG_MAXIOVLEN = 0x10 + MSG_MPEG2 = 0x80 + MSG_NONBLOCK = 0x4000 + MSG_NOSIGNAL = 0x100 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITFORONE = 0x200 + MS_ASYNC = 0x10 + MS_EINTR = 0x80 + MS_INVALIDATE = 0x40 + MS_PER_SEC = 0x3e8 + MS_SYNC = 0x20 + NFDBITS = 0x40 + NL0 = 0x0 + NL1 = 0x4000 + NL2 = 0x8000 + NL3 = 0xc000 + NLDLY = 0x4000 + NOFLSH = 0x80 + NOFLUSH = 0x80000000 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + ONOEOT = 0x80000 + OPOST = 0x1 + OXTABS = 0x40000 + O_ACCMODE = 0x23 + O_APPEND = 0x8 + O_CIO = 0x80 + O_CIOR = 0x800000000 + O_CLOEXEC = 0x800000 + O_CREAT = 0x100 + O_DEFER = 0x2000 + O_DELAY = 0x4000 + O_DIRECT = 0x8000000 + O_DIRECTORY = 0x80000 + O_DSYNC = 0x400000 + O_EFSOFF = 0x400000000 + O_EFSON = 0x200000000 + O_EXCL = 0x400 + O_EXEC = 0x20 + O_LARGEFILE = 0x4000000 + O_NDELAY = 0x8000 + O_NOCACHE = 0x100000 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x1000000 + O_NONBLOCK = 0x4 + O_NONE = 0x3 + O_NSHARE = 0x10000 + O_RAW = 0x100000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSHARE = 0x1000 + O_RSYNC = 0x200000 + O_SEARCH = 0x20 + O_SNAPSHOT = 0x40 + O_SYNC = 0x10 + O_TRUNC = 0x200 + O_TTY_INIT = 0x0 + O_WRONLY = 0x1 + PARENB = 0x100 + PAREXT = 0x100000 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_64BIT = 0x20 + PR_ADDR = 0x2 + PR_ARGEXT = 0x400 + PR_ATOMIC = 0x1 + PR_CONNREQUIRED = 0x4 + PR_FASTHZ = 0x5 + PR_INP = 0x40 + PR_INTRLEVEL = 0x8000 + PR_MLS = 0x100 + PR_MLS_1_LABEL = 0x200 + PR_NOEOR = 0x4000 + PR_RIGHTS = 0x10 + PR_SLOWHZ = 0x2 + PR_WANTRCVD = 0x8 + RLIMIT_AS = 0x6 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x9 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DOWNSTREAM = 0x100 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTC_IA64 = 0x3 + RTC_POWER = 0x1 + RTC_POWER_PC = 0x2 + RTF_ACTIVE_DGD = 0x1000000 + RTF_BCE = 0x80000 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_BUL = 0x2000 + RTF_CLONE = 0x10000 + RTF_CLONED = 0x20000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FREE_IN_PROG = 0x4000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PERMANENT6 = 0x8000000 + RTF_PINNED = 0x100000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_SMALLMTU = 0x40000 + RTF_STATIC = 0x800 + RTF_STOPSRCH = 0x2000000 + RTF_UNREACHABLE = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_EXPIRE = 0xf + RTM_GET = 0x4 + RTM_GETNEXT = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTLOST = 0x10 + RTM_RTTUNIT = 0xf4240 + RTM_SAMEADDR = 0x12 + RTM_SET = 0x13 + RTM_VERSION = 0x2 + RTM_VERSION_GR = 0x4 + RTM_VERSION_GR_COMPAT = 0x3 + RTM_VERSION_POLICY = 0x5 + RTM_VERSION_POLICY_EXT = 0x6 + RTM_VERSION_POLICY_PRFN = 0x7 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_RIGHTS = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIGMAX64 = 0xff + SIGQUEUE_MAX = 0x20 + SIOCADDIFVIPA = 0x20006942 + SIOCADDMTU = -0x7ffb9690 + SIOCADDMULTI = -0x7fdf96cf + SIOCADDNETID = -0x7fd796a9 + SIOCADDRT = -0x7fc78df6 + SIOCAIFADDR = -0x7fbf96e6 + SIOCATMARK = 0x40047307 + SIOCDARP = -0x7fb396e0 + SIOCDELIFVIPA = 0x20006943 + SIOCDELMTU = -0x7ffb968f + SIOCDELMULTI = -0x7fdf96ce + SIOCDELPMTU = -0x7fd78ff6 + SIOCDELRT = -0x7fc78df5 + SIOCDIFADDR = -0x7fd796e7 + SIOCDNETOPT = -0x3ffe9680 + SIOCDX25XLATE = -0x7fd7969b + SIOCFIFADDR = -0x7fdf966d + SIOCGARP = -0x3fb396da + SIOCGETMTUS = 0x2000696f + SIOCGETSGCNT = -0x3feb8acc + SIOCGETVIFCNT = -0x3feb8acd + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = -0x3fd796df + SIOCGIFADDRS = 0x2000698c + SIOCGIFBAUDRATE = -0x3fdf9669 + SIOCGIFBRDADDR = -0x3fd796dd + SIOCGIFCONF = -0x3fef96bb + SIOCGIFCONFGLOB = -0x3fef9670 + SIOCGIFDSTADDR = -0x3fd796de + SIOCGIFFLAGS = -0x3fd796ef + SIOCGIFGIDLIST = 0x20006968 + SIOCGIFHWADDR = -0x3fab966b + SIOCGIFMETRIC = -0x3fd796e9 + SIOCGIFMTU = -0x3fd796aa + SIOCGIFNETMASK = -0x3fd796db + SIOCGIFOPTIONS = -0x3fd796d6 + SIOCGISNO = -0x3fd79695 + SIOCGLOADF = -0x3ffb967e + SIOCGLOWAT = 0x40047303 + SIOCGNETOPT = -0x3ffe96a5 + SIOCGNETOPT1 = -0x3fdf967f + SIOCGNMTUS = 0x2000696e + SIOCGPGRP = 0x40047309 + SIOCGSIZIFCONF = 0x4004696a + SIOCGSRCFILTER = -0x3fe796cb + SIOCGTUNEPHASE = -0x3ffb9676 + SIOCGX25XLATE = -0x3fd7969c + SIOCIFATTACH = -0x7fdf9699 + SIOCIFDETACH = -0x7fdf969a + SIOCIFGETPKEY = -0x7fdf969b + SIOCIF_ATM_DARP = -0x7fdf9683 + SIOCIF_ATM_DUMPARP = -0x7fdf9685 + SIOCIF_ATM_GARP = -0x7fdf9682 + SIOCIF_ATM_IDLE = -0x7fdf9686 + SIOCIF_ATM_SARP = -0x7fdf9681 + SIOCIF_ATM_SNMPARP = -0x7fdf9687 + SIOCIF_ATM_SVC = -0x7fdf9684 + SIOCIF_ATM_UBR = -0x7fdf9688 + SIOCIF_DEVHEALTH = -0x7ffb966c + SIOCIF_IB_ARP_INCOMP = -0x7fdf9677 + SIOCIF_IB_ARP_TIMER = -0x7fdf9678 + SIOCIF_IB_CLEAR_PINFO = -0x3fdf966f + SIOCIF_IB_DEL_ARP = -0x7fdf967f + SIOCIF_IB_DEL_PINFO = -0x3fdf9670 + SIOCIF_IB_DUMP_ARP = -0x7fdf9680 + SIOCIF_IB_GET_ARP = -0x7fdf967e + SIOCIF_IB_GET_INFO = -0x3f879675 + SIOCIF_IB_GET_STATS = -0x3f879672 + SIOCIF_IB_NOTIFY_ADDR_REM = -0x3f87966a + SIOCIF_IB_RESET_STATS = -0x3f879671 + SIOCIF_IB_RESIZE_CQ = -0x7fdf9679 + SIOCIF_IB_SET_ARP = -0x7fdf967d + SIOCIF_IB_SET_PKEY = -0x7fdf967c + SIOCIF_IB_SET_PORT = -0x7fdf967b + SIOCIF_IB_SET_QKEY = -0x7fdf9676 + SIOCIF_IB_SET_QSIZE = -0x7fdf967a + SIOCLISTIFVIPA = 0x20006944 + SIOCSARP = -0x7fb396e2 + SIOCSHIWAT = 0xffffffff80047300 + SIOCSIFADDR = -0x7fd796f4 + SIOCSIFADDRORI = -0x7fdb9673 + SIOCSIFBRDADDR = -0x7fd796ed + SIOCSIFDSTADDR = -0x7fd796f2 + SIOCSIFFLAGS = -0x7fd796f0 + SIOCSIFGIDLIST = 0x20006969 + SIOCSIFMETRIC = -0x7fd796e8 + SIOCSIFMTU = -0x7fd796a8 + SIOCSIFNETDUMP = -0x7fd796e4 + SIOCSIFNETMASK = -0x7fd796ea + SIOCSIFOPTIONS = -0x7fd796d7 + SIOCSIFSUBCHAN = -0x7fd796e5 + SIOCSISNO = -0x7fd79694 + SIOCSLOADF = -0x3ffb967d + SIOCSLOWAT = 0xffffffff80047302 + SIOCSNETOPT = -0x7ffe96a6 + SIOCSPGRP = 0xffffffff80047308 + SIOCSX25XLATE = -0x7fd7969d + SOCK_CONN_DGRAM = 0x6 + SOCK_DGRAM = 0x2 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x400 + SO_ACCEPTCONN = 0x2 + SO_AUDIT = 0x8000 + SO_BROADCAST = 0x20 + SO_CKSUMRECV = 0x800 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_KERNACCEPT = 0x2000 + SO_LINGER = 0x80 + SO_NOMULTIPATH = 0x4000 + SO_NOREUSEADDR = 0x1000 + SO_OOBINLINE = 0x100 + SO_PEERID = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMPNS = 0x100a + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USE_IFBUFS = 0x400 + S_BANDURG = 0x400 + S_EMODFMT = 0x3c000000 + S_ENFMT = 0x400 + S_ERROR = 0x100 + S_HANGUP = 0x200 + S_HIPRI = 0x2 + S_ICRYPTO = 0x80000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFJOURNAL = 0x10000 + S_IFLNK = 0xa000 + S_IFMPX = 0x2200 + S_IFMT = 0xf000 + S_IFPDIR = 0x4000000 + S_IFPSDIR = 0x8000000 + S_IFPSSDIR = 0xc000000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFSYSEA = 0x30000000 + S_INPUT = 0x1 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_ITCB = 0x1000000 + S_ITP = 0x800000 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXACL = 0x2000000 + S_IXATTR = 0x40000 + S_IXGRP = 0x8 + S_IXINTERFACE = 0x100000 + S_IXMOD = 0x40000000 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + S_MSG = 0x8 + S_OUTPUT = 0x4 + S_RDBAND = 0x20 + S_RDNORM = 0x10 + S_RESERVED1 = 0x20000 + S_RESERVED2 = 0x200000 + S_RESERVED3 = 0x400000 + S_RESERVED4 = 0x80000000 + S_RESFMT1 = 0x10000000 + S_RESFMT10 = 0x34000000 + S_RESFMT11 = 0x38000000 + S_RESFMT12 = 0x3c000000 + S_RESFMT2 = 0x14000000 + S_RESFMT3 = 0x18000000 + S_RESFMT4 = 0x1c000000 + S_RESFMT5 = 0x20000000 + S_RESFMT6 = 0x24000000 + S_RESFMT7 = 0x28000000 + S_RESFMT8 = 0x2c000000 + S_WRBAND = 0x80 + S_WRNORM = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0xc00 + TABDLY = 0xc00 + TCFLSH = 0x540c + TCGETA = 0x5405 + TCGETS = 0x5401 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_24DAYS_WORTH_OF_SLOWTICKS = 0x3f4800 + TCP_ACLADD = 0x23 + TCP_ACLBIND = 0x26 + TCP_ACLCLEAR = 0x22 + TCP_ACLDEL = 0x24 + TCP_ACLDENY = 0x8 + TCP_ACLFLUSH = 0x21 + TCP_ACLGID = 0x1 + TCP_ACLLS = 0x25 + TCP_ACLSUBNET = 0x4 + TCP_ACLUID = 0x2 + TCP_CWND_DF = 0x16 + TCP_CWND_IF = 0x15 + TCP_DELAY_ACK_FIN = 0x2 + TCP_DELAY_ACK_SYN = 0x1 + TCP_FASTNAME = 0x101080a + TCP_KEEPCNT = 0x13 + TCP_KEEPIDLE = 0x11 + TCP_KEEPINTVL = 0x12 + TCP_LSPRIV = 0x29 + TCP_LUID = 0x20 + TCP_MAXBURST = 0x8 + TCP_MAXDF = 0x64 + TCP_MAXIF = 0x64 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAXWINDOWSCALE = 0xe + TCP_MAX_SACK = 0x4 + TCP_MSS = 0x5b4 + TCP_NODELAY = 0x1 + TCP_NODELAYACK = 0x14 + TCP_NOREDUCE_CWND_EXIT_FRXMT = 0x19 + TCP_NOREDUCE_CWND_IN_FRXMT = 0x18 + TCP_NOTENTER_SSTART = 0x17 + TCP_OPT = 0x19 + TCP_RFC1323 = 0x4 + TCP_SETPRIV = 0x27 + TCP_STDURG = 0x10 + TCP_TIMESTAMP_OPTLEN = 0xc + TCP_UNSETPRIV = 0x28 + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETSF = 0x5404 + TCSETSW = 0x5403 + TCXONC = 0x540b + TIMER_ABSTIME = 0x3e7 + TIMER_MAX = 0x20 + TIOC = 0x5400 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0xffffffff80047462 + TIOCEXCL = 0x2000740d + TIOCFLUSH = 0xffffffff80047410 + TIOCGETC = 0x40067412 + TIOCGETD = 0x40047400 + TIOCGETP = 0x40067408 + TIOCGLTC = 0x40067474 + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047448 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCHPCL = 0x20007402 + TIOCLBIC = 0xffffffff8004747e + TIOCLBIS = 0xffffffff8004747f + TIOCLGET = 0x4004747c + TIOCLSET = 0xffffffff8004747d + TIOCMBIC = 0xffffffff8004746b + TIOCMBIS = 0xffffffff8004746c + TIOCMGET = 0x4004746a + TIOCMIWAIT = 0xffffffff80047464 + TIOCMODG = 0x40047403 + TIOCMODS = 0xffffffff80047404 + TIOCMSET = 0xffffffff8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0xffffffff80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0xffffffff80047469 + TIOCSBRK = 0x2000747b + TIOCSDTR = 0x20007479 + TIOCSETC = 0xffffffff80067411 + TIOCSETD = 0xffffffff80047401 + TIOCSETN = 0xffffffff8006740a + TIOCSETP = 0xffffffff80067409 + TIOCSLTC = 0xffffffff80067475 + TIOCSPGRP = 0xffffffff80047476 + TIOCSSIZE = 0xffffffff80087467 + TIOCSTART = 0x2000746e + TIOCSTI = 0xffffffff80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0xffffffff80087467 + TIOCUCNTL = 0xffffffff80047466 + TOSTOP = 0x10000 + UTIME_NOW = -0x2 + UTIME_OMIT = -0x3 + VDISCRD = 0xc + VDSUSP = 0xa + VEOF = 0x4 + VEOL = 0x5 + VEOL2 = 0x6 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xe + VMIN = 0x4 + VQUIT = 0x1 + VREPRINT = 0xb + VSTART = 0x7 + VSTOP = 0x8 + VSTRT = 0x7 + VSUSP = 0x9 + VT0 = 0x0 + VT1 = 0x8000 + VTDELAY = 0x2000 + VTDLY = 0x8000 + VTIME = 0x5 + VWERSE = 0xd + WPARSTART = 0x1 + WPARSTOP = 0x2 + WPARTTYNAME = "Global" + XCASE = 0x4 + XTABS = 0xc00 + _FDATAFLUSH = 0x2000000000 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x43) + EADDRNOTAVAIL = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x42) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x38) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x78) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x75) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x25) + ECLONEME = syscall.Errno(0x52) + ECONNABORTED = syscall.Errno(0x48) + ECONNREFUSED = syscall.Errno(0x4f) + ECONNRESET = syscall.Errno(0x49) + ECORRUPT = syscall.Errno(0x59) + EDEADLK = syscall.Errno(0x2d) + EDESTADDREQ = syscall.Errno(0x3a) + EDESTADDRREQ = syscall.Errno(0x3a) + EDIST = syscall.Errno(0x35) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x58) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFORMAT = syscall.Errno(0x30) + EHOSTDOWN = syscall.Errno(0x50) + EHOSTUNREACH = syscall.Errno(0x51) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x74) + EINPROGRESS = syscall.Errno(0x37) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x4b) + EISDIR = syscall.Errno(0x15) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELNRNG = syscall.Errno(0x29) + ELOOP = syscall.Errno(0x55) + EMEDIA = syscall.Errno(0x6e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x3b) + EMULTIHOP = syscall.Errno(0x7d) + ENAMETOOLONG = syscall.Errno(0x56) + ENETDOWN = syscall.Errno(0x45) + ENETRESET = syscall.Errno(0x47) + ENETUNREACH = syscall.Errno(0x46) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x70) + ENOBUFS = syscall.Errno(0x4a) + ENOCONNECT = syscall.Errno(0x32) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x7a) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x31) + ENOLINK = syscall.Errno(0x7e) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x23) + ENOPROTOOPT = syscall.Errno(0x3d) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x76) + ENOSTR = syscall.Errno(0x7b) + ENOSYS = syscall.Errno(0x6d) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x4c) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x11) + ENOTREADY = syscall.Errno(0x2e) + ENOTRECOVERABLE = syscall.Errno(0x5e) + ENOTRUST = syscall.Errno(0x72) + ENOTSOCK = syscall.Errno(0x39) + ENOTSUP = syscall.Errno(0x7c) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x40) + EOVERFLOW = syscall.Errno(0x7f) + EOWNERDEAD = syscall.Errno(0x5f) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x41) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x53) + EPROTO = syscall.Errno(0x79) + EPROTONOSUPPORT = syscall.Errno(0x3e) + EPROTOTYPE = syscall.Errno(0x3c) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x5d) + ERESTART = syscall.Errno(0x52) + EROFS = syscall.Errno(0x1e) + ESAD = syscall.Errno(0x71) + ESHUTDOWN = syscall.Errno(0x4d) + ESOCKTNOSUPPORT = syscall.Errno(0x3f) + ESOFT = syscall.Errno(0x6f) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x34) + ESYSERROR = syscall.Errno(0x5a) + ETIME = syscall.Errno(0x77) + ETIMEDOUT = syscall.Errno(0x4e) + ETOOMANYREFS = syscall.Errno(0x73) + ETXTBSY = syscall.Errno(0x1a) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x54) + EWOULDBLOCK = syscall.Errno(0xb) + EWRPROTECT = syscall.Errno(0x2f) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGAIO = syscall.Signal(0x17) + SIGALRM = syscall.Signal(0xe) + SIGALRM1 = syscall.Signal(0x26) + SIGBUS = syscall.Signal(0xa) + SIGCAPI = syscall.Signal(0x31) + SIGCHLD = syscall.Signal(0x14) + SIGCLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGCPUFAIL = syscall.Signal(0x3b) + SIGDANGER = syscall.Signal(0x21) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGGRANT = syscall.Signal(0x3c) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOINT = syscall.Signal(0x10) + SIGIOT = syscall.Signal(0x6) + SIGKAP = syscall.Signal(0x3c) + SIGKILL = syscall.Signal(0x9) + SIGLOST = syscall.Signal(0x6) + SIGMAX = syscall.Signal(0xff) + SIGMAX32 = syscall.Signal(0x3f) + SIGMIGRATE = syscall.Signal(0x23) + SIGMSG = syscall.Signal(0x1b) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x17) + SIGPRE = syscall.Signal(0x24) + SIGPROF = syscall.Signal(0x20) + SIGPTY = syscall.Signal(0x17) + SIGPWR = syscall.Signal(0x1d) + SIGQUIT = syscall.Signal(0x3) + SIGRECONFIG = syscall.Signal(0x3a) + SIGRETRACT = syscall.Signal(0x3d) + SIGSAK = syscall.Signal(0x3f) + SIGSEGV = syscall.Signal(0xb) + SIGSOUND = syscall.Signal(0x3e) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGSYSERROR = syscall.Signal(0x30) + SIGTALRM = syscall.Signal(0x26) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVIRT = syscall.Signal(0x25) + SIGVTALRM = syscall.Signal(0x22) + SIGWAITING = syscall.Signal(0x27) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "not owner"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "I/O error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "arg list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file number"}, + {10, "ECHILD", "no child processes"}, + {11, "EWOULDBLOCK", "resource temporarily unavailable"}, + {12, "ENOMEM", "not enough space"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "ENOTEMPTY", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "file table overflow"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "not a typewriter"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "ENOMSG", "no message of desired type"}, + {36, "EIDRM", "identifier removed"}, + {37, "ECHRNG", "channel number out of range"}, + {38, "EL2NSYNC", "level 2 not synchronized"}, + {39, "EL3HLT", "level 3 halted"}, + {40, "EL3RST", "level 3 reset"}, + {41, "ELNRNG", "link number out of range"}, + {42, "EUNATCH", "protocol driver not attached"}, + {43, "ENOCSI", "no CSI structure available"}, + {44, "EL2HLT", "level 2 halted"}, + {45, "EDEADLK", "deadlock condition if locked"}, + {46, "ENOTREADY", "device not ready"}, + {47, "EWRPROTECT", "write-protected media"}, + {48, "EFORMAT", "unformatted or incompatible media"}, + {49, "ENOLCK", "no locks available"}, + {50, "ENOCONNECT", "cannot Establish Connection"}, + {52, "ESTALE", "missing file or filesystem"}, + {53, "EDIST", "requests blocked by Administrator"}, + {55, "EINPROGRESS", "operation now in progress"}, + {56, "EALREADY", "operation already in progress"}, + {57, "ENOTSOCK", "socket operation on non-socket"}, + {58, "EDESTADDREQ", "destination address required"}, + {59, "EMSGSIZE", "message too long"}, + {60, "EPROTOTYPE", "protocol wrong type for socket"}, + {61, "ENOPROTOOPT", "protocol not available"}, + {62, "EPROTONOSUPPORT", "protocol not supported"}, + {63, "ESOCKTNOSUPPORT", "socket type not supported"}, + {64, "EOPNOTSUPP", "operation not supported on socket"}, + {65, "EPFNOSUPPORT", "protocol family not supported"}, + {66, "EAFNOSUPPORT", "addr family not supported by protocol"}, + {67, "EADDRINUSE", "address already in use"}, + {68, "EADDRNOTAVAIL", "can't assign requested address"}, + {69, "ENETDOWN", "network is down"}, + {70, "ENETUNREACH", "network is unreachable"}, + {71, "ENETRESET", "network dropped connection on reset"}, + {72, "ECONNABORTED", "software caused connection abort"}, + {73, "ECONNRESET", "connection reset by peer"}, + {74, "ENOBUFS", "no buffer space available"}, + {75, "EISCONN", "socket is already connected"}, + {76, "ENOTCONN", "socket is not connected"}, + {77, "ESHUTDOWN", "can't send after socket shutdown"}, + {78, "ETIMEDOUT", "connection timed out"}, + {79, "ECONNREFUSED", "connection refused"}, + {80, "EHOSTDOWN", "host is down"}, + {81, "EHOSTUNREACH", "no route to host"}, + {82, "ERESTART", "restart the system call"}, + {83, "EPROCLIM", "too many processes"}, + {84, "EUSERS", "too many users"}, + {85, "ELOOP", "too many levels of symbolic links"}, + {86, "ENAMETOOLONG", "file name too long"}, + {88, "EDQUOT", "disk quota exceeded"}, + {89, "ECORRUPT", "invalid file system control data detected"}, + {90, "ESYSERROR", "for future use "}, + {93, "EREMOTE", "item is not local to host"}, + {94, "ENOTRECOVERABLE", "state not recoverable "}, + {95, "EOWNERDEAD", "previous owner died "}, + {109, "ENOSYS", "function not implemented"}, + {110, "EMEDIA", "media surface error"}, + {111, "ESOFT", "I/O completed, but needs relocation"}, + {112, "ENOATTR", "no attribute found"}, + {113, "ESAD", "security Authentication Denied"}, + {114, "ENOTRUST", "not a Trusted Program"}, + {115, "ETOOMANYREFS", "too many references: can't splice"}, + {116, "EILSEQ", "invalid wide character"}, + {117, "ECANCELED", "asynchronous I/O cancelled"}, + {118, "ENOSR", "out of STREAMS resources"}, + {119, "ETIME", "system call timed out"}, + {120, "EBADMSG", "next message has wrong type"}, + {121, "EPROTO", "error in protocol"}, + {122, "ENODATA", "no message on stream head read q"}, + {123, "ENOSTR", "fd not associated with a stream"}, + {124, "ENOTSUP", "unsupported attribute value"}, + {125, "EMULTIHOP", "multihop is not allowed"}, + {126, "ENOLINK", "the server link has been severed"}, + {127, "EOVERFLOW", "value too large to be stored in data type"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGIOT", "IOT/Abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "stopped (signal)"}, + {18, "SIGTSTP", "stopped"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible/complete"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {27, "SIGMSG", "input device data"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGPWR", "power-failure"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGPROF", "profiling timer expired"}, + {33, "SIGDANGER", "paging space low"}, + {34, "SIGVTALRM", "virtual timer expired"}, + {35, "SIGMIGRATE", "signal 35"}, + {36, "SIGPRE", "signal 36"}, + {37, "SIGVIRT", "signal 37"}, + {38, "SIGTALRM", "signal 38"}, + {39, "SIGWAITING", "signal 39"}, + {48, "SIGSYSERROR", "signal 48"}, + {49, "SIGCAPI", "signal 49"}, + {58, "SIGRECONFIG", "signal 58"}, + {59, "SIGCPUFAIL", "CPU Failure Predicted"}, + {60, "SIGGRANT", "monitor mode granted"}, + {61, "SIGRETRACT", "monitor mode retracted"}, + {62, "SIGSOUND", "sound completed"}, + {63, "SIGMAX32", "secure attention"}, + {255, "SIGMAX", "signal 255"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go new file mode 100644 index 0000000..476a1c7 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go @@ -0,0 +1,1892 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build amd64 && darwin +// +build amd64,darwin + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1c + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1e + AF_IPX = 0x17 + AF_ISDN = 0x1c + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x29 + AF_NATM = 0x1f + AF_NDRV = 0x1b + AF_NETBIOS = 0x21 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PPP = 0x22 + AF_PUP = 0x4 + AF_RESERVED_36 = 0x24 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_SYSTEM = 0x20 + AF_SYS_CONTROL = 0x2 + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_UTUN = 0x26 + AF_VSOCK = 0x28 + ALTWERASE = 0x200 + ATTR_BIT_MAP_COUNT = 0x5 + ATTR_CMN_ACCESSMASK = 0x20000 + ATTR_CMN_ACCTIME = 0x1000 + ATTR_CMN_ADDEDTIME = 0x10000000 + ATTR_CMN_BKUPTIME = 0x2000 + ATTR_CMN_CHGTIME = 0x800 + ATTR_CMN_CRTIME = 0x200 + ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000 + ATTR_CMN_DEVID = 0x2 + ATTR_CMN_DOCUMENT_ID = 0x100000 + ATTR_CMN_ERROR = 0x20000000 + ATTR_CMN_EXTENDED_SECURITY = 0x400000 + ATTR_CMN_FILEID = 0x2000000 + ATTR_CMN_FLAGS = 0x40000 + ATTR_CMN_FNDRINFO = 0x4000 + ATTR_CMN_FSID = 0x4 + ATTR_CMN_FULLPATH = 0x8000000 + ATTR_CMN_GEN_COUNT = 0x80000 + ATTR_CMN_GRPID = 0x10000 + ATTR_CMN_GRPUUID = 0x1000000 + ATTR_CMN_MODTIME = 0x400 + ATTR_CMN_NAME = 0x1 + ATTR_CMN_NAMEDATTRCOUNT = 0x80000 + ATTR_CMN_NAMEDATTRLIST = 0x100000 + ATTR_CMN_OBJID = 0x20 + ATTR_CMN_OBJPERMANENTID = 0x40 + ATTR_CMN_OBJTAG = 0x10 + ATTR_CMN_OBJTYPE = 0x8 + ATTR_CMN_OWNERID = 0x8000 + ATTR_CMN_PARENTID = 0x4000000 + ATTR_CMN_PAROBJID = 0x80 + ATTR_CMN_RETURNED_ATTRS = 0x80000000 + ATTR_CMN_SCRIPT = 0x100 + ATTR_CMN_SETMASK = 0x51c7ff00 + ATTR_CMN_USERACCESS = 0x200000 + ATTR_CMN_UUID = 0x800000 + ATTR_CMN_VALIDMASK = 0xffffffff + ATTR_CMN_VOLSETMASK = 0x6700 + ATTR_FILE_ALLOCSIZE = 0x4 + ATTR_FILE_CLUMPSIZE = 0x10 + ATTR_FILE_DATAALLOCSIZE = 0x400 + ATTR_FILE_DATAEXTENTS = 0x800 + ATTR_FILE_DATALENGTH = 0x200 + ATTR_FILE_DEVTYPE = 0x20 + ATTR_FILE_FILETYPE = 0x40 + ATTR_FILE_FORKCOUNT = 0x80 + ATTR_FILE_FORKLIST = 0x100 + ATTR_FILE_IOBLOCKSIZE = 0x8 + ATTR_FILE_LINKCOUNT = 0x1 + ATTR_FILE_RSRCALLOCSIZE = 0x2000 + ATTR_FILE_RSRCEXTENTS = 0x4000 + ATTR_FILE_RSRCLENGTH = 0x1000 + ATTR_FILE_SETMASK = 0x20 + ATTR_FILE_TOTALSIZE = 0x2 + ATTR_FILE_VALIDMASK = 0x37ff + ATTR_VOL_ALLOCATIONCLUMP = 0x40 + ATTR_VOL_ATTRIBUTES = 0x40000000 + ATTR_VOL_CAPABILITIES = 0x20000 + ATTR_VOL_DIRCOUNT = 0x400 + ATTR_VOL_ENCODINGSUSED = 0x10000 + ATTR_VOL_FILECOUNT = 0x200 + ATTR_VOL_FSTYPE = 0x1 + ATTR_VOL_INFO = 0x80000000 + ATTR_VOL_IOBLOCKSIZE = 0x80 + ATTR_VOL_MAXOBJCOUNT = 0x800 + ATTR_VOL_MINALLOCATION = 0x20 + ATTR_VOL_MOUNTEDDEVICE = 0x8000 + ATTR_VOL_MOUNTFLAGS = 0x4000 + ATTR_VOL_MOUNTPOINT = 0x1000 + ATTR_VOL_NAME = 0x2000 + ATTR_VOL_OBJCOUNT = 0x100 + ATTR_VOL_QUOTA_SIZE = 0x10000000 + ATTR_VOL_RESERVED_SIZE = 0x20000000 + ATTR_VOL_SETMASK = 0x80002000 + ATTR_VOL_SIGNATURE = 0x2 + ATTR_VOL_SIZE = 0x4 + ATTR_VOL_SPACEAVAIL = 0x10 + ATTR_VOL_SPACEFREE = 0x8 + ATTR_VOL_SPACEUSED = 0x800000 + ATTR_VOL_UUID = 0x40000 + ATTR_VOL_VALIDMASK = 0xf087ffff + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc00c4279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80104267 + BIOCSETFNR = 0x8010427e + BIOCSETIF = 0x8020426c + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_MONOTONIC_RAW_APPROX = 0x5 + CLOCK_PROCESS_CPUTIME_ID = 0xc + CLOCK_REALTIME = 0x0 + CLOCK_THREAD_CPUTIME_ID = 0x10 + CLOCK_UPTIME_RAW = 0x8 + CLOCK_UPTIME_RAW_APPROX = 0x9 + CLONE_NOFOLLOW = 0x1 + CLONE_NOOWNERCOPY = 0x2 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTLIOCGINFO = 0xc0644e03 + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0x10a + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_DARWIN = 0x10a + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_EXCEPT = -0xf + EVFILT_FS = -0x9 + EVFILT_MACHPORT = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0x11 + EVFILT_THREADMARKER = 0x11 + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xa + EVFILT_VM = -0xc + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DISPATCH2 = 0x180 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG0 = 0x1000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_OOBAND = 0x2000 + EV_POLL = 0x1000 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EV_UDATA_SPECIFIC = 0x100 + EV_VANISHED = 0x200 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 + FLUSHO = 0x800000 + FSOPT_ATTR_CMN_EXTENDED = 0x20 + FSOPT_NOFOLLOW = 0x1 + FSOPT_NOINMEMUPDATE = 0x2 + FSOPT_PACK_INVAL_ATTRS = 0x8 + FSOPT_REPORT_FULLSIZE = 0x4 + FSOPT_RETURN_REALDEV = 0x200 + F_ADDFILESIGS = 0x3d + F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 + F_ADDFILESIGS_INFO = 0x67 + F_ADDFILESIGS_RETURN = 0x61 + F_ADDFILESUPPL = 0x68 + F_ADDSIGS = 0x3b + F_ALLOCATEALL = 0x4 + F_ALLOCATECONTIG = 0x2 + F_BARRIERFSYNC = 0x55 + F_CHECK_LV = 0x62 + F_CHKCLEAN = 0x29 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x43 + F_FINDSIGS = 0x4e + F_FLUSH_DATA = 0x28 + F_FREEZE_FS = 0x35 + F_FULLFSYNC = 0x33 + F_GETCODEDIR = 0x48 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETLKPID = 0x42 + F_GETNOSIGPIPE = 0x4a + F_GETOWN = 0x5 + F_GETPATH = 0x32 + F_GETPATH_MTMINFO = 0x47 + F_GETPATH_NOFIRMLINK = 0x66 + F_GETPROTECTIONCLASS = 0x3f + F_GETPROTECTIONLEVEL = 0x4d + F_GETSIGSINFO = 0x69 + F_GLOBAL_NOCACHE = 0x37 + F_LOG2PHYS = 0x31 + F_LOG2PHYS_EXT = 0x41 + F_NOCACHE = 0x30 + F_NODIRECT = 0x3e + F_OK = 0x0 + F_PATHPKG_CHECK = 0x34 + F_PEOFPOSMODE = 0x3 + F_PREALLOCATE = 0x2a + F_PUNCHHOLE = 0x63 + F_RDADVISE = 0x2c + F_RDAHEAD = 0x2d + F_RDLCK = 0x1 + F_SETBACKINGSTORE = 0x46 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETLKWTIMEOUT = 0xa + F_SETNOSIGPIPE = 0x49 + F_SETOWN = 0x6 + F_SETPROTECTIONCLASS = 0x40 + F_SETSIZE = 0x2b + F_SINGLE_WRITER = 0x4c + F_SPECULATIVE_READ = 0x65 + F_THAW_FS = 0x36 + F_TRANSCODEKEY = 0x4b + F_TRIM_ACTIVE_FILE = 0x64 + F_UNLCK = 0x2 + F_VOLPOSMODE = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_6LOWPAN = 0x40 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_CELLULAR = 0xff + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FAITH = 0x38 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIF = 0x37 + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IEEE1394 = 0x90 + IFT_IEEE8023ADLAG = 0x88 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_L2VLAN = 0x87 + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PDP = 0xff + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PKTAP = 0xfe + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_STF = 0x39 + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LINKLOCALNETNUM = 0xa9fe0000 + IN_LOOPBACKNET = 0x7f + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x400473d1 + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_2292DSTOPTS = 0x17 + IPV6_2292HOPLIMIT = 0x14 + IPV6_2292HOPOPTS = 0x16 + IPV6_2292NEXTHOP = 0x15 + IPV6_2292PKTINFO = 0x13 + IPV6_2292PKTOPTIONS = 0x19 + IPV6_2292RTHDR = 0x18 + IPV6_3542DSTOPTS = 0x32 + IPV6_3542HOPLIMIT = 0x2f + IPV6_3542HOPOPTS = 0x31 + IPV6_3542NEXTHOP = 0x30 + IPV6_3542PKTINFO = 0x2e + IPV6_3542RTHDR = 0x33 + IPV6_ADDR_MC_FLAGS_PREFIX = 0x20 + IPV6_ADDR_MC_FLAGS_TRANSIENT = 0x10 + IPV6_ADDR_MC_FLAGS_UNICAST_BASED = 0x30 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDV6ONLY = 0x1b + IPV6_BOUND_IF = 0x7d + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOW_ECN_MASK = 0x3000 + IPV6_FRAGTTL = 0x3c + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x3d + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x23 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x39 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x24 + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BLOCK_SOURCE = 0x48 + IP_BOUND_IF = 0x19 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x1c + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x28 + IP_FW_DEL = 0x29 + IP_FW_FLUSH = 0x2a + IP_FW_GET = 0x2c + IP_FW_RESETLOG = 0x2d + IP_FW_ZERO = 0x2b + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_IFINDEX = 0x42 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_NAT__XXX = 0x37 + IP_OFFMASK = 0x1fff + IP_OLD_FW_ADD = 0x32 + IP_OLD_FW_DEL = 0x33 + IP_OLD_FW_FLUSH = 0x34 + IP_OLD_FW_GET = 0x36 + IP_OLD_FW_RESETLOG = 0x38 + IP_OLD_FW_ZERO = 0x35 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVTOS = 0x1b + IP_RECVTTL = 0x18 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_STRIPHDR = 0x17 + IP_TOS = 0x3 + IP_TRAFFIC_MGT_BACKGROUND = 0x41 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCAL_PEERCRED = 0x1 + LOCAL_PEEREPID = 0x3 + LOCAL_PEEREUUID = 0x5 + LOCAL_PEERPID = 0x2 + LOCAL_PEERTOKEN = 0x6 + LOCAL_PEERUUID = 0x4 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_CAN_REUSE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_FREE_REUSABLE = 0x7 + MADV_FREE_REUSE = 0x8 + MADV_NORMAL = 0x0 + MADV_PAGEOUT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MADV_ZERO_WIRED_PAGES = 0x6 + MAP_32BIT = 0x8000 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_JIT = 0x800 + MAP_NOCACHE = 0x400 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_RESILIENT_CODESIGN = 0x2000 + MAP_RESILIENT_MEDIA = 0x4000 + MAP_SHARED = 0x1 + MAP_TRANSLATED_ALLOW_EXECUTE = 0x20000 + MAP_UNIX03 = 0x40000 + MCAST_BLOCK_SOURCE = 0x54 + MCAST_EXCLUDE = 0x2 + MCAST_INCLUDE = 0x1 + MCAST_JOIN_GROUP = 0x50 + MCAST_JOIN_SOURCE_GROUP = 0x52 + MCAST_LEAVE_GROUP = 0x51 + MCAST_LEAVE_SOURCE_GROUP = 0x53 + MCAST_UNBLOCK_SOURCE = 0x55 + MCAST_UNDEFINED = 0x0 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x400000 + MNT_CMDFLAGS = 0xf0000 + MNT_CPROTECT = 0x80 + MNT_DEFWRITE = 0x2000000 + MNT_DONTBROWSE = 0x100000 + MNT_DOVOLFS = 0x8000 + MNT_DWAIT = 0x4 + MNT_EXPORTED = 0x100 + MNT_EXT_ROOT_DATA_VOL = 0x1 + MNT_FORCE = 0x80000 + MNT_IGNORE_OWNERSHIP = 0x200000 + MNT_JOURNALED = 0x800000 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NOATIME = 0x10000000 + MNT_NOBLOCK = 0x20000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOUSERXATTR = 0x1000000 + MNT_NOWAIT = 0x2 + MNT_QUARANTINE = 0x400 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_REMOVABLE = 0x200 + MNT_ROOTFS = 0x4000 + MNT_SNAPSHOT = 0x40000000 + MNT_STRICTATIME = 0x80000000 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UNKNOWNPERMISSIONS = 0x200000 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0xd7f0f7ff + MNT_WAIT = 0x1 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FLUSH = 0x400 + MSG_HAVEMORE = 0x2000 + MSG_HOLD = 0x800 + MSG_NEEDSA = 0x10000 + MSG_NOSIGNAL = 0x80000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_RCVMORE = 0x4000 + MSG_SEND = 0x1000 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITSTREAM = 0x200 + MS_ASYNC = 0x1 + MS_DEACTIVATE = 0x8 + MS_INVALIDATE = 0x2 + MS_KILLPAGES = 0x4 + MS_SYNC = 0x10 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_DUMP2 = 0x7 + NET_RT_FLAGS = 0x2 + NET_RT_FLAGS_PRIV = 0xa + NET_RT_IFLIST = 0x3 + NET_RT_IFLIST2 = 0x6 + NET_RT_MAXID = 0xb + NET_RT_STAT = 0x4 + NET_RT_TRASH = 0x5 + NFDBITS = 0x20 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLDLY = 0x300 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ABSOLUTE = 0x8 + NOTE_ATTRIB = 0x8 + NOTE_BACKGROUND = 0x40 + NOTE_CHILD = 0x4 + NOTE_CRITICAL = 0x20 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXITSTATUS = 0x4000000 + NOTE_EXIT_CSERROR = 0x40000 + NOTE_EXIT_DECRYPTFAIL = 0x10000 + NOTE_EXIT_DETAIL = 0x2000000 + NOTE_EXIT_DETAIL_MASK = 0x70000 + NOTE_EXIT_MEMORY = 0x20000 + NOTE_EXIT_REPARENTED = 0x80000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_FUNLOCK = 0x100 + NOTE_LEEWAY = 0x10 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MACHTIME = 0x100 + NOTE_MACH_CONTINUOUS_TIME = 0x80 + NOTE_NONE = 0x80 + NOTE_NSECONDS = 0x4 + NOTE_OOB = 0x2 + NOTE_PCTRLMASK = -0x100000 + NOTE_PDATAMASK = 0xfffff + NOTE_REAP = 0x10000000 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_SIGNAL = 0x8000000 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x2 + NOTE_VM_ERROR = 0x10000000 + NOTE_VM_PRESSURE = 0x80000000 + NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 + NOTE_VM_PRESSURE_TERMINATE = 0x40000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFDEL = 0x20000 + OFILL = 0x80 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_ALERT = 0x20000000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x1000000 + O_CREAT = 0x200 + O_DIRECTORY = 0x100000 + O_DP_GETRAWENCRYPTED = 0x1 + O_DP_GETRAWUNENCRYPTED = 0x2 + O_DSYNC = 0x400000 + O_EVTONLY = 0x8000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x20000 + O_NOFOLLOW = 0x100 + O_NOFOLLOW_ANY = 0x20000000 + O_NONBLOCK = 0x4 + O_POPUP = 0x80000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYMLINK = 0x200000 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_ATTACH = 0xa + PT_ATTACHEXC = 0xe + PT_CONTINUE = 0x7 + PT_DENY_ATTACH = 0x1f + PT_DETACH = 0xb + PT_FIRSTMACH = 0x20 + PT_FORCEQUOTA = 0x1e + PT_KILL = 0x8 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_READ_U = 0x3 + PT_SIGEXC = 0xc + PT_STEP = 0x9 + PT_THUPDATE = 0xd + PT_TRACE_ME = 0x0 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + PT_WRITE_U = 0x6 + RLIMIT_AS = 0x5 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_CPU_USAGE_MONITOR = 0x2 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_CONDEMNED = 0x2000000 + RTF_DEAD = 0x20000000 + RTF_DELCLONE = 0x80 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_GLOBAL = 0x40000000 + RTF_HOST = 0x4 + RTF_IFREF = 0x4000000 + RTF_IFSCOPE = 0x1000000 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_NOIFREF = 0x2000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_PROXY = 0x8000000 + RTF_REJECT = 0x8 + RTF_ROUTER = 0x10000000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_GET2 = 0x14 + RTM_IFINFO = 0xe + RTM_IFINFO2 = 0x12 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_NEWMADDR2 = 0x13 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIMESTAMP_MONOTONIC = 0x4 + SEEK_CUR = 0x1 + SEEK_DATA = 0x4 + SEEK_END = 0x2 + SEEK_HOLE = 0x3 + SEEK_SET = 0x0 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCARPIPLL = 0xc0206928 + SIOCATMARK = 0x40047307 + SIOCAUTOADDR = 0xc0206926 + SIOCAUTONETMASK = 0x80206927 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206941 + SIOCGDRVSPEC = 0xc028697b + SIOCGETVLAN = 0xc020697f + SIOCGHIWAT = 0x40047301 + SIOCGIF6LOWPAN = 0xc02069c5 + SIOCGIFADDR = 0xc0206921 + SIOCGIFALTMTU = 0xc0206948 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBOND = 0xc0206947 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020695b + SIOCGIFCONF = 0xc00c6924 + SIOCGIFDEVMTU = 0xc0206944 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFFUNCTIONALTYPE = 0xc02069ad + SIOCGIFGENERIC = 0xc020693a + SIOCGIFKPI = 0xc0206987 + SIOCGIFMAC = 0xc0206982 + SIOCGIFMEDIA = 0xc02c6938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206940 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc020693f + SIOCGIFSTATUS = 0xc331693d + SIOCGIFVLAN = 0xc020697f + SIOCGIFWAKEFLAGS = 0xc0206988 + SIOCGIFXMEDIA = 0xc02c6948 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCIFCREATE = 0xc0206978 + SIOCIFCREATE2 = 0xc020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106981 + SIOCRSLVMULTI = 0xc010693b + SIOCSDRVSPEC = 0x8028697b + SIOCSETVLAN = 0x8020697e + SIOCSHIWAT = 0x80047300 + SIOCSIF6LOWPAN = 0x802069c4 + SIOCSIFADDR = 0x8020690c + SIOCSIFALTMTU = 0x80206945 + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBOND = 0x80206946 + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020695a + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFKPI = 0x80206986 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206983 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x8040693e + SIOCSIFPHYS = 0x80206936 + SIOCSIFVLAN = 0x8020697e + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_LOCAL = 0x0 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_DONTTRUNC = 0x2000 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1010 + SO_LINGER = 0x80 + SO_LINGER_SEC = 0x1080 + SO_NETSVC_MARKING_LEVEL = 0x1119 + SO_NET_SERVICE_TYPE = 0x1116 + SO_NKE = 0x1021 + SO_NOADDRERR = 0x1023 + SO_NOSIGPIPE = 0x1022 + SO_NOTIFYCONFLICT = 0x1026 + SO_NP_EXTENSIONS = 0x1083 + SO_NREAD = 0x1020 + SO_NUMRCVPKT = 0x1112 + SO_NWRITE = 0x1024 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1011 + SO_RANDOMPORT = 0x1082 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSESHAREUID = 0x1025 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TIMESTAMP_MONOTONIC = 0x800 + SO_TRACKER_ATTRIBUTE_FLAGS_APP_APPROVED = 0x1 + SO_TRACKER_ATTRIBUTE_FLAGS_DOMAIN_SHORT = 0x4 + SO_TRACKER_ATTRIBUTE_FLAGS_TRACKER = 0x2 + SO_TRACKER_TRANSPARENCY_VERSION = 0x3 + SO_TYPE = 0x1008 + SO_UPCALLCLOSEWAIT = 0x1027 + SO_USELOOPBACK = 0x40 + SO_WANTMORE = 0x4000 + SO_WANTOOBFLAG = 0x8000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0x4 + TABDLY = 0xc04 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCPOPT_CC = 0xb + TCPOPT_CCECHO = 0xd + TCPOPT_CCNEW = 0xc + TCPOPT_EOL = 0x0 + TCPOPT_FASTOPEN = 0x22 + TCPOPT_MAXSEG = 0x2 + TCPOPT_NOP = 0x1 + TCPOPT_SACK = 0x5 + TCPOPT_SACK_HDR = 0x1010500 + TCPOPT_SACK_PERMITTED = 0x4 + TCPOPT_SACK_PERMIT_HDR = 0x1010402 + TCPOPT_SIGNATURE = 0x13 + TCPOPT_TIMESTAMP = 0x8 + TCPOPT_TSTAMP_HDR = 0x101080a + TCPOPT_WINDOW = 0x3 + TCP_CONNECTIONTIMEOUT = 0x20 + TCP_CONNECTION_INFO = 0x106 + TCP_ENABLE_ECN = 0x104 + TCP_FASTOPEN = 0x105 + TCP_KEEPALIVE = 0x10 + TCP_KEEPCNT = 0x102 + TCP_KEEPINTVL = 0x101 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0xd8 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_NOTSENT_LOWAT = 0x201 + TCP_RXT_CONNDROPTIME = 0x80 + TCP_RXT_FINDROP = 0x100 + TCP_SENDMOREACKS = 0x103 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCDSIMICROCODE = 0x20007455 + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x40487413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGWINSZ = 0x40087468 + TIOCIXOFF = 0x20007480 + TIOCIXON = 0x20007481 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTYGNAME = 0x40807453 + TIOCPTYGRANT = 0x20007454 + TIOCPTYUNLK = 0x20007452 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCONS = 0x20007463 + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x80487414 + TIOCSETAF = 0x80487416 + TIOCSETAW = 0x80487415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x10 + VM_LOADAVG = 0x2 + VM_MACHFACTOR = 0x4 + VM_MAXID = 0x6 + VM_METER = 0x1 + VM_SWAPUSAGE = 0x5 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x10 + WCOREFLAG = 0x80 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOWAIT = 0x20 + WORDSIZE = 0x40 + WSTOPPED = 0x8 + WUNTRACED = 0x2 + XATTR_CREATE = 0x2 + XATTR_NODEFAULT = 0x10 + XATTR_NOFOLLOW = 0x1 + XATTR_NOSECURITY = 0x8 + XATTR_REPLACE = 0x4 + XATTR_SHOWCOMPRESSION = 0x20 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADARCH = syscall.Errno(0x56) + EBADEXEC = syscall.Errno(0x55) + EBADF = syscall.Errno(0x9) + EBADMACHO = syscall.Errno(0x58) + EBADMSG = syscall.Errno(0x5e) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x59) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDEVERR = syscall.Errno(0x53) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x5a) + EILSEQ = syscall.Errno(0x5c) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x6a) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5f) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x60) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x61) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5b) + ENOPOLICY = syscall.Errno(0x67) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x62) + ENOSTR = syscall.Errno(0x63) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x68) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x66) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x69) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x64) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + EPWROFF = syscall.Errno(0x52) + EQFULL = syscall.Errno(0x6a) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHLIBVERS = syscall.Errno(0x57) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x65) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "ENOTSUP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disc quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC prog. not avail"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EPWROFF", "device power is off"}, + {83, "EDEVERR", "device error"}, + {84, "EOVERFLOW", "value too large to be stored in data type"}, + {85, "EBADEXEC", "bad executable (or shared library)"}, + {86, "EBADARCH", "bad CPU type in executable"}, + {87, "ESHLIBVERS", "shared library version mismatch"}, + {88, "EBADMACHO", "malformed Mach-o file"}, + {89, "ECANCELED", "operation canceled"}, + {90, "EIDRM", "identifier removed"}, + {91, "ENOMSG", "no message of desired type"}, + {92, "EILSEQ", "illegal byte sequence"}, + {93, "ENOATTR", "attribute not found"}, + {94, "EBADMSG", "bad message"}, + {95, "EMULTIHOP", "EMULTIHOP (Reserved)"}, + {96, "ENODATA", "no message available on STREAM"}, + {97, "ENOLINK", "ENOLINK (Reserved)"}, + {98, "ENOSR", "no STREAM resources"}, + {99, "ENOSTR", "not a STREAM"}, + {100, "EPROTO", "protocol error"}, + {101, "ETIME", "STREAM ioctl timeout"}, + {102, "EOPNOTSUPP", "operation not supported on socket"}, + {103, "ENOPOLICY", "policy not found"}, + {104, "ENOTRECOVERABLE", "state not recoverable"}, + {105, "EOWNERDEAD", "previous owner died"}, + {106, "EQFULL", "interface output queue is full"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGABRT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go new file mode 100644 index 0000000..e36f517 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go @@ -0,0 +1,1892 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm64 && darwin +// +build arm64,darwin + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1c + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1e + AF_IPX = 0x17 + AF_ISDN = 0x1c + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x29 + AF_NATM = 0x1f + AF_NDRV = 0x1b + AF_NETBIOS = 0x21 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PPP = 0x22 + AF_PUP = 0x4 + AF_RESERVED_36 = 0x24 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_SYSTEM = 0x20 + AF_SYS_CONTROL = 0x2 + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_UTUN = 0x26 + AF_VSOCK = 0x28 + ALTWERASE = 0x200 + ATTR_BIT_MAP_COUNT = 0x5 + ATTR_CMN_ACCESSMASK = 0x20000 + ATTR_CMN_ACCTIME = 0x1000 + ATTR_CMN_ADDEDTIME = 0x10000000 + ATTR_CMN_BKUPTIME = 0x2000 + ATTR_CMN_CHGTIME = 0x800 + ATTR_CMN_CRTIME = 0x200 + ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000 + ATTR_CMN_DEVID = 0x2 + ATTR_CMN_DOCUMENT_ID = 0x100000 + ATTR_CMN_ERROR = 0x20000000 + ATTR_CMN_EXTENDED_SECURITY = 0x400000 + ATTR_CMN_FILEID = 0x2000000 + ATTR_CMN_FLAGS = 0x40000 + ATTR_CMN_FNDRINFO = 0x4000 + ATTR_CMN_FSID = 0x4 + ATTR_CMN_FULLPATH = 0x8000000 + ATTR_CMN_GEN_COUNT = 0x80000 + ATTR_CMN_GRPID = 0x10000 + ATTR_CMN_GRPUUID = 0x1000000 + ATTR_CMN_MODTIME = 0x400 + ATTR_CMN_NAME = 0x1 + ATTR_CMN_NAMEDATTRCOUNT = 0x80000 + ATTR_CMN_NAMEDATTRLIST = 0x100000 + ATTR_CMN_OBJID = 0x20 + ATTR_CMN_OBJPERMANENTID = 0x40 + ATTR_CMN_OBJTAG = 0x10 + ATTR_CMN_OBJTYPE = 0x8 + ATTR_CMN_OWNERID = 0x8000 + ATTR_CMN_PARENTID = 0x4000000 + ATTR_CMN_PAROBJID = 0x80 + ATTR_CMN_RETURNED_ATTRS = 0x80000000 + ATTR_CMN_SCRIPT = 0x100 + ATTR_CMN_SETMASK = 0x51c7ff00 + ATTR_CMN_USERACCESS = 0x200000 + ATTR_CMN_UUID = 0x800000 + ATTR_CMN_VALIDMASK = 0xffffffff + ATTR_CMN_VOLSETMASK = 0x6700 + ATTR_FILE_ALLOCSIZE = 0x4 + ATTR_FILE_CLUMPSIZE = 0x10 + ATTR_FILE_DATAALLOCSIZE = 0x400 + ATTR_FILE_DATAEXTENTS = 0x800 + ATTR_FILE_DATALENGTH = 0x200 + ATTR_FILE_DEVTYPE = 0x20 + ATTR_FILE_FILETYPE = 0x40 + ATTR_FILE_FORKCOUNT = 0x80 + ATTR_FILE_FORKLIST = 0x100 + ATTR_FILE_IOBLOCKSIZE = 0x8 + ATTR_FILE_LINKCOUNT = 0x1 + ATTR_FILE_RSRCALLOCSIZE = 0x2000 + ATTR_FILE_RSRCEXTENTS = 0x4000 + ATTR_FILE_RSRCLENGTH = 0x1000 + ATTR_FILE_SETMASK = 0x20 + ATTR_FILE_TOTALSIZE = 0x2 + ATTR_FILE_VALIDMASK = 0x37ff + ATTR_VOL_ALLOCATIONCLUMP = 0x40 + ATTR_VOL_ATTRIBUTES = 0x40000000 + ATTR_VOL_CAPABILITIES = 0x20000 + ATTR_VOL_DIRCOUNT = 0x400 + ATTR_VOL_ENCODINGSUSED = 0x10000 + ATTR_VOL_FILECOUNT = 0x200 + ATTR_VOL_FSTYPE = 0x1 + ATTR_VOL_INFO = 0x80000000 + ATTR_VOL_IOBLOCKSIZE = 0x80 + ATTR_VOL_MAXOBJCOUNT = 0x800 + ATTR_VOL_MINALLOCATION = 0x20 + ATTR_VOL_MOUNTEDDEVICE = 0x8000 + ATTR_VOL_MOUNTFLAGS = 0x4000 + ATTR_VOL_MOUNTPOINT = 0x1000 + ATTR_VOL_NAME = 0x2000 + ATTR_VOL_OBJCOUNT = 0x100 + ATTR_VOL_QUOTA_SIZE = 0x10000000 + ATTR_VOL_RESERVED_SIZE = 0x20000000 + ATTR_VOL_SETMASK = 0x80002000 + ATTR_VOL_SIGNATURE = 0x2 + ATTR_VOL_SIZE = 0x4 + ATTR_VOL_SPACEAVAIL = 0x10 + ATTR_VOL_SPACEFREE = 0x8 + ATTR_VOL_SPACEUSED = 0x800000 + ATTR_VOL_UUID = 0x40000 + ATTR_VOL_VALIDMASK = 0xf087ffff + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc00c4279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80104267 + BIOCSETFNR = 0x8010427e + BIOCSETIF = 0x8020426c + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_MONOTONIC_RAW_APPROX = 0x5 + CLOCK_PROCESS_CPUTIME_ID = 0xc + CLOCK_REALTIME = 0x0 + CLOCK_THREAD_CPUTIME_ID = 0x10 + CLOCK_UPTIME_RAW = 0x8 + CLOCK_UPTIME_RAW_APPROX = 0x9 + CLONE_NOFOLLOW = 0x1 + CLONE_NOOWNERCOPY = 0x2 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTLIOCGINFO = 0xc0644e03 + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0x10a + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_DARWIN = 0x10a + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_EXCEPT = -0xf + EVFILT_FS = -0x9 + EVFILT_MACHPORT = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0x11 + EVFILT_THREADMARKER = 0x11 + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xa + EVFILT_VM = -0xc + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DISPATCH2 = 0x180 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG0 = 0x1000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_OOBAND = 0x2000 + EV_POLL = 0x1000 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EV_UDATA_SPECIFIC = 0x100 + EV_VANISHED = 0x200 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 + FLUSHO = 0x800000 + FSOPT_ATTR_CMN_EXTENDED = 0x20 + FSOPT_NOFOLLOW = 0x1 + FSOPT_NOINMEMUPDATE = 0x2 + FSOPT_PACK_INVAL_ATTRS = 0x8 + FSOPT_REPORT_FULLSIZE = 0x4 + FSOPT_RETURN_REALDEV = 0x200 + F_ADDFILESIGS = 0x3d + F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 + F_ADDFILESIGS_INFO = 0x67 + F_ADDFILESIGS_RETURN = 0x61 + F_ADDFILESUPPL = 0x68 + F_ADDSIGS = 0x3b + F_ALLOCATEALL = 0x4 + F_ALLOCATECONTIG = 0x2 + F_BARRIERFSYNC = 0x55 + F_CHECK_LV = 0x62 + F_CHKCLEAN = 0x29 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x43 + F_FINDSIGS = 0x4e + F_FLUSH_DATA = 0x28 + F_FREEZE_FS = 0x35 + F_FULLFSYNC = 0x33 + F_GETCODEDIR = 0x48 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETLKPID = 0x42 + F_GETNOSIGPIPE = 0x4a + F_GETOWN = 0x5 + F_GETPATH = 0x32 + F_GETPATH_MTMINFO = 0x47 + F_GETPATH_NOFIRMLINK = 0x66 + F_GETPROTECTIONCLASS = 0x3f + F_GETPROTECTIONLEVEL = 0x4d + F_GETSIGSINFO = 0x69 + F_GLOBAL_NOCACHE = 0x37 + F_LOG2PHYS = 0x31 + F_LOG2PHYS_EXT = 0x41 + F_NOCACHE = 0x30 + F_NODIRECT = 0x3e + F_OK = 0x0 + F_PATHPKG_CHECK = 0x34 + F_PEOFPOSMODE = 0x3 + F_PREALLOCATE = 0x2a + F_PUNCHHOLE = 0x63 + F_RDADVISE = 0x2c + F_RDAHEAD = 0x2d + F_RDLCK = 0x1 + F_SETBACKINGSTORE = 0x46 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETLKWTIMEOUT = 0xa + F_SETNOSIGPIPE = 0x49 + F_SETOWN = 0x6 + F_SETPROTECTIONCLASS = 0x40 + F_SETSIZE = 0x2b + F_SINGLE_WRITER = 0x4c + F_SPECULATIVE_READ = 0x65 + F_THAW_FS = 0x36 + F_TRANSCODEKEY = 0x4b + F_TRIM_ACTIVE_FILE = 0x64 + F_UNLCK = 0x2 + F_VOLPOSMODE = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_6LOWPAN = 0x40 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_CELLULAR = 0xff + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FAITH = 0x38 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIF = 0x37 + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IEEE1394 = 0x90 + IFT_IEEE8023ADLAG = 0x88 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_L2VLAN = 0x87 + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PDP = 0xff + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PKTAP = 0xfe + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_STF = 0x39 + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LINKLOCALNETNUM = 0xa9fe0000 + IN_LOOPBACKNET = 0x7f + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x400473d1 + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_2292DSTOPTS = 0x17 + IPV6_2292HOPLIMIT = 0x14 + IPV6_2292HOPOPTS = 0x16 + IPV6_2292NEXTHOP = 0x15 + IPV6_2292PKTINFO = 0x13 + IPV6_2292PKTOPTIONS = 0x19 + IPV6_2292RTHDR = 0x18 + IPV6_3542DSTOPTS = 0x32 + IPV6_3542HOPLIMIT = 0x2f + IPV6_3542HOPOPTS = 0x31 + IPV6_3542NEXTHOP = 0x30 + IPV6_3542PKTINFO = 0x2e + IPV6_3542RTHDR = 0x33 + IPV6_ADDR_MC_FLAGS_PREFIX = 0x20 + IPV6_ADDR_MC_FLAGS_TRANSIENT = 0x10 + IPV6_ADDR_MC_FLAGS_UNICAST_BASED = 0x30 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDV6ONLY = 0x1b + IPV6_BOUND_IF = 0x7d + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOW_ECN_MASK = 0x3000 + IPV6_FRAGTTL = 0x3c + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x3d + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x23 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x39 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x24 + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BLOCK_SOURCE = 0x48 + IP_BOUND_IF = 0x19 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x1c + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x28 + IP_FW_DEL = 0x29 + IP_FW_FLUSH = 0x2a + IP_FW_GET = 0x2c + IP_FW_RESETLOG = 0x2d + IP_FW_ZERO = 0x2b + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_IFINDEX = 0x42 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_NAT__XXX = 0x37 + IP_OFFMASK = 0x1fff + IP_OLD_FW_ADD = 0x32 + IP_OLD_FW_DEL = 0x33 + IP_OLD_FW_FLUSH = 0x34 + IP_OLD_FW_GET = 0x36 + IP_OLD_FW_RESETLOG = 0x38 + IP_OLD_FW_ZERO = 0x35 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVTOS = 0x1b + IP_RECVTTL = 0x18 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_STRIPHDR = 0x17 + IP_TOS = 0x3 + IP_TRAFFIC_MGT_BACKGROUND = 0x41 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCAL_PEERCRED = 0x1 + LOCAL_PEEREPID = 0x3 + LOCAL_PEEREUUID = 0x5 + LOCAL_PEERPID = 0x2 + LOCAL_PEERTOKEN = 0x6 + LOCAL_PEERUUID = 0x4 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_CAN_REUSE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_FREE_REUSABLE = 0x7 + MADV_FREE_REUSE = 0x8 + MADV_NORMAL = 0x0 + MADV_PAGEOUT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MADV_ZERO_WIRED_PAGES = 0x6 + MAP_32BIT = 0x8000 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_JIT = 0x800 + MAP_NOCACHE = 0x400 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_RESILIENT_CODESIGN = 0x2000 + MAP_RESILIENT_MEDIA = 0x4000 + MAP_SHARED = 0x1 + MAP_TRANSLATED_ALLOW_EXECUTE = 0x20000 + MAP_UNIX03 = 0x40000 + MCAST_BLOCK_SOURCE = 0x54 + MCAST_EXCLUDE = 0x2 + MCAST_INCLUDE = 0x1 + MCAST_JOIN_GROUP = 0x50 + MCAST_JOIN_SOURCE_GROUP = 0x52 + MCAST_LEAVE_GROUP = 0x51 + MCAST_LEAVE_SOURCE_GROUP = 0x53 + MCAST_UNBLOCK_SOURCE = 0x55 + MCAST_UNDEFINED = 0x0 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x400000 + MNT_CMDFLAGS = 0xf0000 + MNT_CPROTECT = 0x80 + MNT_DEFWRITE = 0x2000000 + MNT_DONTBROWSE = 0x100000 + MNT_DOVOLFS = 0x8000 + MNT_DWAIT = 0x4 + MNT_EXPORTED = 0x100 + MNT_EXT_ROOT_DATA_VOL = 0x1 + MNT_FORCE = 0x80000 + MNT_IGNORE_OWNERSHIP = 0x200000 + MNT_JOURNALED = 0x800000 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NOATIME = 0x10000000 + MNT_NOBLOCK = 0x20000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOUSERXATTR = 0x1000000 + MNT_NOWAIT = 0x2 + MNT_QUARANTINE = 0x400 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_REMOVABLE = 0x200 + MNT_ROOTFS = 0x4000 + MNT_SNAPSHOT = 0x40000000 + MNT_STRICTATIME = 0x80000000 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UNKNOWNPERMISSIONS = 0x200000 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0xd7f0f7ff + MNT_WAIT = 0x1 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FLUSH = 0x400 + MSG_HAVEMORE = 0x2000 + MSG_HOLD = 0x800 + MSG_NEEDSA = 0x10000 + MSG_NOSIGNAL = 0x80000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_RCVMORE = 0x4000 + MSG_SEND = 0x1000 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITSTREAM = 0x200 + MS_ASYNC = 0x1 + MS_DEACTIVATE = 0x8 + MS_INVALIDATE = 0x2 + MS_KILLPAGES = 0x4 + MS_SYNC = 0x10 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_DUMP2 = 0x7 + NET_RT_FLAGS = 0x2 + NET_RT_FLAGS_PRIV = 0xa + NET_RT_IFLIST = 0x3 + NET_RT_IFLIST2 = 0x6 + NET_RT_MAXID = 0xb + NET_RT_STAT = 0x4 + NET_RT_TRASH = 0x5 + NFDBITS = 0x20 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLDLY = 0x300 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ABSOLUTE = 0x8 + NOTE_ATTRIB = 0x8 + NOTE_BACKGROUND = 0x40 + NOTE_CHILD = 0x4 + NOTE_CRITICAL = 0x20 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXITSTATUS = 0x4000000 + NOTE_EXIT_CSERROR = 0x40000 + NOTE_EXIT_DECRYPTFAIL = 0x10000 + NOTE_EXIT_DETAIL = 0x2000000 + NOTE_EXIT_DETAIL_MASK = 0x70000 + NOTE_EXIT_MEMORY = 0x20000 + NOTE_EXIT_REPARENTED = 0x80000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_FUNLOCK = 0x100 + NOTE_LEEWAY = 0x10 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MACHTIME = 0x100 + NOTE_MACH_CONTINUOUS_TIME = 0x80 + NOTE_NONE = 0x80 + NOTE_NSECONDS = 0x4 + NOTE_OOB = 0x2 + NOTE_PCTRLMASK = -0x100000 + NOTE_PDATAMASK = 0xfffff + NOTE_REAP = 0x10000000 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_SIGNAL = 0x8000000 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x2 + NOTE_VM_ERROR = 0x10000000 + NOTE_VM_PRESSURE = 0x80000000 + NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 + NOTE_VM_PRESSURE_TERMINATE = 0x40000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFDEL = 0x20000 + OFILL = 0x80 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_ALERT = 0x20000000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x1000000 + O_CREAT = 0x200 + O_DIRECTORY = 0x100000 + O_DP_GETRAWENCRYPTED = 0x1 + O_DP_GETRAWUNENCRYPTED = 0x2 + O_DSYNC = 0x400000 + O_EVTONLY = 0x8000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x20000 + O_NOFOLLOW = 0x100 + O_NOFOLLOW_ANY = 0x20000000 + O_NONBLOCK = 0x4 + O_POPUP = 0x80000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYMLINK = 0x200000 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_ATTACH = 0xa + PT_ATTACHEXC = 0xe + PT_CONTINUE = 0x7 + PT_DENY_ATTACH = 0x1f + PT_DETACH = 0xb + PT_FIRSTMACH = 0x20 + PT_FORCEQUOTA = 0x1e + PT_KILL = 0x8 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_READ_U = 0x3 + PT_SIGEXC = 0xc + PT_STEP = 0x9 + PT_THUPDATE = 0xd + PT_TRACE_ME = 0x0 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + PT_WRITE_U = 0x6 + RLIMIT_AS = 0x5 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_CPU_USAGE_MONITOR = 0x2 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_CONDEMNED = 0x2000000 + RTF_DEAD = 0x20000000 + RTF_DELCLONE = 0x80 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_GLOBAL = 0x40000000 + RTF_HOST = 0x4 + RTF_IFREF = 0x4000000 + RTF_IFSCOPE = 0x1000000 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_NOIFREF = 0x2000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_PROXY = 0x8000000 + RTF_REJECT = 0x8 + RTF_ROUTER = 0x10000000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_GET2 = 0x14 + RTM_IFINFO = 0xe + RTM_IFINFO2 = 0x12 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_NEWMADDR2 = 0x13 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIMESTAMP_MONOTONIC = 0x4 + SEEK_CUR = 0x1 + SEEK_DATA = 0x4 + SEEK_END = 0x2 + SEEK_HOLE = 0x3 + SEEK_SET = 0x0 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCARPIPLL = 0xc0206928 + SIOCATMARK = 0x40047307 + SIOCAUTOADDR = 0xc0206926 + SIOCAUTONETMASK = 0x80206927 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206941 + SIOCGDRVSPEC = 0xc028697b + SIOCGETVLAN = 0xc020697f + SIOCGHIWAT = 0x40047301 + SIOCGIF6LOWPAN = 0xc02069c5 + SIOCGIFADDR = 0xc0206921 + SIOCGIFALTMTU = 0xc0206948 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBOND = 0xc0206947 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020695b + SIOCGIFCONF = 0xc00c6924 + SIOCGIFDEVMTU = 0xc0206944 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFFUNCTIONALTYPE = 0xc02069ad + SIOCGIFGENERIC = 0xc020693a + SIOCGIFKPI = 0xc0206987 + SIOCGIFMAC = 0xc0206982 + SIOCGIFMEDIA = 0xc02c6938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206940 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc020693f + SIOCGIFSTATUS = 0xc331693d + SIOCGIFVLAN = 0xc020697f + SIOCGIFWAKEFLAGS = 0xc0206988 + SIOCGIFXMEDIA = 0xc02c6948 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCIFCREATE = 0xc0206978 + SIOCIFCREATE2 = 0xc020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106981 + SIOCRSLVMULTI = 0xc010693b + SIOCSDRVSPEC = 0x8028697b + SIOCSETVLAN = 0x8020697e + SIOCSHIWAT = 0x80047300 + SIOCSIF6LOWPAN = 0x802069c4 + SIOCSIFADDR = 0x8020690c + SIOCSIFALTMTU = 0x80206945 + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBOND = 0x80206946 + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020695a + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFKPI = 0x80206986 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206983 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x8040693e + SIOCSIFPHYS = 0x80206936 + SIOCSIFVLAN = 0x8020697e + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_LOCAL = 0x0 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_DONTTRUNC = 0x2000 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1010 + SO_LINGER = 0x80 + SO_LINGER_SEC = 0x1080 + SO_NETSVC_MARKING_LEVEL = 0x1119 + SO_NET_SERVICE_TYPE = 0x1116 + SO_NKE = 0x1021 + SO_NOADDRERR = 0x1023 + SO_NOSIGPIPE = 0x1022 + SO_NOTIFYCONFLICT = 0x1026 + SO_NP_EXTENSIONS = 0x1083 + SO_NREAD = 0x1020 + SO_NUMRCVPKT = 0x1112 + SO_NWRITE = 0x1024 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1011 + SO_RANDOMPORT = 0x1082 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSESHAREUID = 0x1025 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TIMESTAMP_MONOTONIC = 0x800 + SO_TRACKER_ATTRIBUTE_FLAGS_APP_APPROVED = 0x1 + SO_TRACKER_ATTRIBUTE_FLAGS_DOMAIN_SHORT = 0x4 + SO_TRACKER_ATTRIBUTE_FLAGS_TRACKER = 0x2 + SO_TRACKER_TRANSPARENCY_VERSION = 0x3 + SO_TYPE = 0x1008 + SO_UPCALLCLOSEWAIT = 0x1027 + SO_USELOOPBACK = 0x40 + SO_WANTMORE = 0x4000 + SO_WANTOOBFLAG = 0x8000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0x4 + TABDLY = 0xc04 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCPOPT_CC = 0xb + TCPOPT_CCECHO = 0xd + TCPOPT_CCNEW = 0xc + TCPOPT_EOL = 0x0 + TCPOPT_FASTOPEN = 0x22 + TCPOPT_MAXSEG = 0x2 + TCPOPT_NOP = 0x1 + TCPOPT_SACK = 0x5 + TCPOPT_SACK_HDR = 0x1010500 + TCPOPT_SACK_PERMITTED = 0x4 + TCPOPT_SACK_PERMIT_HDR = 0x1010402 + TCPOPT_SIGNATURE = 0x13 + TCPOPT_TIMESTAMP = 0x8 + TCPOPT_TSTAMP_HDR = 0x101080a + TCPOPT_WINDOW = 0x3 + TCP_CONNECTIONTIMEOUT = 0x20 + TCP_CONNECTION_INFO = 0x106 + TCP_ENABLE_ECN = 0x104 + TCP_FASTOPEN = 0x105 + TCP_KEEPALIVE = 0x10 + TCP_KEEPCNT = 0x102 + TCP_KEEPINTVL = 0x101 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0xd8 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_NOTSENT_LOWAT = 0x201 + TCP_RXT_CONNDROPTIME = 0x80 + TCP_RXT_FINDROP = 0x100 + TCP_SENDMOREACKS = 0x103 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCDSIMICROCODE = 0x20007455 + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x40487413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGWINSZ = 0x40087468 + TIOCIXOFF = 0x20007480 + TIOCIXON = 0x20007481 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTYGNAME = 0x40807453 + TIOCPTYGRANT = 0x20007454 + TIOCPTYUNLK = 0x20007452 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCONS = 0x20007463 + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x80487414 + TIOCSETAF = 0x80487416 + TIOCSETAW = 0x80487415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x10 + VM_LOADAVG = 0x2 + VM_MACHFACTOR = 0x4 + VM_MAXID = 0x6 + VM_METER = 0x1 + VM_SWAPUSAGE = 0x5 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x10 + WCOREFLAG = 0x80 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOWAIT = 0x20 + WORDSIZE = 0x40 + WSTOPPED = 0x8 + WUNTRACED = 0x2 + XATTR_CREATE = 0x2 + XATTR_NODEFAULT = 0x10 + XATTR_NOFOLLOW = 0x1 + XATTR_NOSECURITY = 0x8 + XATTR_REPLACE = 0x4 + XATTR_SHOWCOMPRESSION = 0x20 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADARCH = syscall.Errno(0x56) + EBADEXEC = syscall.Errno(0x55) + EBADF = syscall.Errno(0x9) + EBADMACHO = syscall.Errno(0x58) + EBADMSG = syscall.Errno(0x5e) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x59) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDEVERR = syscall.Errno(0x53) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x5a) + EILSEQ = syscall.Errno(0x5c) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x6a) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5f) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x60) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x61) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5b) + ENOPOLICY = syscall.Errno(0x67) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x62) + ENOSTR = syscall.Errno(0x63) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x68) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x66) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x69) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x64) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + EPWROFF = syscall.Errno(0x52) + EQFULL = syscall.Errno(0x6a) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHLIBVERS = syscall.Errno(0x57) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x65) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "ENOTSUP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disc quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC prog. not avail"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EPWROFF", "device power is off"}, + {83, "EDEVERR", "device error"}, + {84, "EOVERFLOW", "value too large to be stored in data type"}, + {85, "EBADEXEC", "bad executable (or shared library)"}, + {86, "EBADARCH", "bad CPU type in executable"}, + {87, "ESHLIBVERS", "shared library version mismatch"}, + {88, "EBADMACHO", "malformed Mach-o file"}, + {89, "ECANCELED", "operation canceled"}, + {90, "EIDRM", "identifier removed"}, + {91, "ENOMSG", "no message of desired type"}, + {92, "EILSEQ", "illegal byte sequence"}, + {93, "ENOATTR", "attribute not found"}, + {94, "EBADMSG", "bad message"}, + {95, "EMULTIHOP", "EMULTIHOP (Reserved)"}, + {96, "ENODATA", "no message available on STREAM"}, + {97, "ENOLINK", "ENOLINK (Reserved)"}, + {98, "ENOSR", "no STREAM resources"}, + {99, "ENOSTR", "not a STREAM"}, + {100, "EPROTO", "protocol error"}, + {101, "ETIME", "STREAM ioctl timeout"}, + {102, "EOPNOTSUPP", "operation not supported on socket"}, + {103, "ENOPOLICY", "policy not found"}, + {104, "ENOTRECOVERABLE", "state not recoverable"}, + {105, "EOWNERDEAD", "previous owner died"}, + {106, "EQFULL", "interface output queue is full"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGABRT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go new file mode 100644 index 0000000..17bba0e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go @@ -0,0 +1,1738 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build amd64 && dragonfly +// +build amd64,dragonfly + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x21 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x23 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x24 + AF_MPLS = 0x22 + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ALTWERASE = 0x200 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427d + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0104279 + BIOCGETIF = 0x4020426b + BIOCGFEEDBACK = 0x4004427c + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80104267 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8010427b + BIOCSFEEDBACK = 0x8004427d + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x8 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DEFAULTBUFSIZE = 0x1000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MAX_CLONES = 0x80 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x4 + CLOCK_MONOTONIC_FAST = 0xc + CLOCK_MONOTONIC_PRECISE = 0xb + CLOCK_PROCESS_CPUTIME_ID = 0xf + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_FAST = 0xa + CLOCK_REALTIME_PRECISE = 0x9 + CLOCK_SECOND = 0xd + CLOCK_THREAD_CPUTIME_ID = 0xe + CLOCK_UPTIME = 0x5 + CLOCK_UPTIME_FAST = 0x8 + CLOCK_UPTIME_PRECISE = 0x7 + CLOCK_VIRTUAL = 0x1 + CPUSTATES = 0x5 + CP_IDLE = 0x4 + CP_INTR = 0x3 + CP_NICE = 0x1 + CP_SYS = 0x2 + CP_USER = 0x0 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_BREDR_BB = 0xff + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_BLUETOOTH_LE_LL = 0xfb + DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 + DLT_BLUETOOTH_LINUX_MONITOR = 0xfe + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_EPON = 0x103 + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_INFINIBAND = 0xf7 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPMI_HPM_2 = 0x104 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_ISO_14443 = 0x108 + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0x109 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NETLINK = 0xfd + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PKTAP = 0x102 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PRISM_HEADER = 0x77 + DLT_PROFIBUS_DL = 0x101 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RDS = 0x109 + DLT_REDBACK_SMARTEDGE = 0x20 + DLT_RIO = 0x7c + DLT_RTAC_SERIAL = 0xfa + DLT_SCCP = 0x8e + DLT_SCTP = 0xf8 + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USBPCAP = 0xf9 + DLT_USB_FREEBSD = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WATTSTOPPER_DLM = 0x107 + DLT_WIHART = 0xdf + DLT_WIRESHARK_UPPER_PDU = 0xfc + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DLT_ZWAVE_R1_R2 = 0x105 + DLT_ZWAVE_R3 = 0x106 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DBF = 0xf + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_EXCEPT = -0x8 + EVFILT_FS = -0xa + EVFILT_MARKER = 0xf + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xa + EVFILT_TIMER = -0x7 + EVFILT_USER = -0x9 + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_HUP = 0x800 + EV_NODATA = 0x1000 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf800 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTEXIT_LWP = 0x10000 + EXTEXIT_PROC = 0x0 + EXTEXIT_SETINT = 0x1 + EXTEXIT_SIMPLE = 0x0 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETOWN = 0x5 + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x318e72 + IFF_DEBUG = 0x4 + IFF_IDIRECT = 0x200000 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NPOLLING = 0x100000 + IFF_OACTIVE = 0x400 + IFF_OACTIVE_COMPAT = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_POLLING = 0x10000 + IFF_POLLING_COMPAT = 0x10000 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_SMART = 0x20 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xf3 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VOICEEM = 0x64 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_MASK = 0xfffffffe + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SKIP = 0x39 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UNKNOWN = 0x102 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MINHLIM = 0x28 + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PKTOPTIONS = 0x34 + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_RESETLOG = 0x37 + IP_FW_TBL_ADD = 0x2a + IP_FW_TBL_CREATE = 0x28 + IP_FW_TBL_DEL = 0x2b + IP_FW_TBL_DESTROY = 0x29 + IP_FW_TBL_EXPIRE = 0x2f + IP_FW_TBL_FLUSH = 0x2c + IP_FW_TBL_GET = 0x2d + IP_FW_TBL_ZERO = 0x2e + IP_FW_X = 0x31 + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CONTROL_END = 0xb + MADV_CONTROL_START = 0xa + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_INVAL = 0xa + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SETMAP = 0xb + MADV_WILLNEED = 0x3 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_NOCORE = 0x20000 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_NOSYNC = 0x800 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_SIZEALIGN = 0x40000 + MAP_STACK = 0x400 + MAP_TRYFIXED = 0x10000 + MAP_VPAGETABLE = 0x2000 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x20 + MNT_CMDFLAGS = 0xf0000 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_EXKERB = 0x800 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXPUBLIC = 0x20000000 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_IGNORE = 0x800000 + MNT_LAZY = 0x4 + MNT_LOCAL = 0x1000 + MNT_NOATIME = 0x10000000 + MNT_NOCLUSTERR = 0x40000000 + MNT_NOCLUSTERW = 0x80000000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOSYMFOLLOW = 0x400000 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SOFTDEP = 0x200000 + MNT_SUIDDIR = 0x100000 + MNT_SYNCHRONOUS = 0x2 + MNT_TRIM = 0x1000000 + MNT_UPDATE = 0x10000 + MNT_USER = 0x8000 + MNT_VISFLAGMASK = 0xf1f0ffff + MNT_WAIT = 0x1 + MSG_CMSG_CLOEXEC = 0x1000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FBLOCKING = 0x10000 + MSG_FMASK = 0xffff0000 + MSG_FNONBLOCKING = 0x20000 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_SYNC = 0x800 + MSG_TRUNC = 0x10 + MSG_UNUSED09 = 0x200 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_MAXID = 0x4 + NFDBITS = 0x40 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_OOB = 0x2 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x20000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x8000000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FAPPEND = 0x100000 + O_FASYNCWRITE = 0x800000 + O_FBLOCKING = 0x40000 + O_FMASK = 0xfc0000 + O_FNONBLOCKING = 0x80000 + O_FOFFSET = 0x200000 + O_FSYNC = 0x80 + O_FSYNCWRITE = 0x400000 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0xb + RTAX_MPLS1 = 0x8 + RTAX_MPLS2 = 0x9 + RTAX_MPLS3 = 0xa + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_MPLS1 = 0x100 + RTA_MPLS2 = 0x200 + RTA_MPLS3 = 0x400 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MPLSOPS = 0x1000000 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x7 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_IWCAPSEGS = 0x400 + RTV_IWMAXSEGS = 0x200 + RTV_MSL = 0x100 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80286987 + SIOCALIFADDR = 0x8118691b + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80286989 + SIOCDIFPHYADDR = 0x80206949 + SIOCDLIFADDR = 0x8118691d + SIOCGDRVSPEC = 0xc028697b + SIOCGETSGCNT = 0xc0207210 + SIOCGETVIFCNT = 0xc028720f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFALIAS = 0xc0406929 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0106924 + SIOCGIFDATA = 0xc0206926 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc028698a + SIOCGIFGROUP = 0xc0286988 + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMEDIA = 0xc0306938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPOLLCPU = 0xc020697e + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFSTATUS = 0xc331693b + SIOCGIFTSOLEN = 0xc0206980 + SIOCGLIFADDR = 0xc118691c + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106978 + SIOCSDRVSPEC = 0x8028697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFPOLLCPU = 0x8020697d + SIOCSIFTSOLEN = 0x8020697f + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BROADCAST = 0x20 + SO_CPUHINT = 0x1030 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NOSIGPIPE = 0x800 + SO_OOBINLINE = 0x100 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_RERROR = 0x2000 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDSPACE = 0x100a + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDB = 0x9000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB3 = 0x4 + TABDLY = 0x4 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_FASTKEEP = 0x80 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x20 + TCP_KEEPINTVL = 0x200 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0x100 + TCP_MIN_WINSHIFT = 0x5 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_SIGNATURE_ENABLE = 0x10 + TCSAFLUSH = 0x2 + TIMER_ABSTIME = 0x1 + TIMER_RELTIME = 0x0 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047463 + TIOCGWINSZ = 0x40087468 + TIOCISPTMASTER = 0x20007455 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + UTIME_NOW = -0x1 + UTIME_OMIT = -0x2 + VCHECKPT = 0x13 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VM_BCACHE_SIZE_MAX = 0x0 + VM_SWZONE_SIZE_MAX = 0x4000000000 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WEXITED = 0x10 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WNOWAIT = 0x8 + WSTOPPED = 0x2 + WTRAPPED = 0x20 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EASYNC = syscall.Errno(0x63) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x59) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x55) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOOFUS = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x56) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x63) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5a) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x57) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5b) + ENOMEDIUM = syscall.Errno(0x5d) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5c) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCKPT = syscall.Signal(0x21) + SIGCKPTEXIT = syscall.Signal(0x22) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EWOULDBLOCK", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disc quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC prog. not avail"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIDRM", "identifier removed"}, + {83, "ENOMSG", "no message of desired type"}, + {84, "EOVERFLOW", "value too large to be stored in data type"}, + {85, "ECANCELED", "operation canceled"}, + {86, "EILSEQ", "illegal byte sequence"}, + {87, "ENOATTR", "attribute not found"}, + {88, "EDOOFUS", "programming error"}, + {89, "EBADMSG", "bad message"}, + {90, "EMULTIHOP", "multihop attempted"}, + {91, "ENOLINK", "link has been severed"}, + {92, "EPROTO", "protocol error"}, + {93, "ENOMEDIUM", "no medium found"}, + {99, "EASYNC", "unknown error: 99"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGIOT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGTHR", "thread Scheduler"}, + {33, "SIGCKPT", "checkPoint"}, + {34, "SIGCKPTEXIT", "checkPointExit"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go new file mode 100644 index 0000000..4409001 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go @@ -0,0 +1,1948 @@ +// mkerrors.sh -m32 +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build 386 && freebsd +// +build 386,freebsd + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -m32 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x23 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x24 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_INET6_SDP = 0x2a + AF_INET_SDP = 0x28 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x2a + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SCLUSTER = 0x22 + AF_SIP = 0x18 + AF_SLOW = 0x21 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VENDOR00 = 0x27 + AF_VENDOR01 = 0x29 + AF_VENDOR02 = 0x2b + AF_VENDOR03 = 0x2d + AF_VENDOR04 = 0x2f + AF_VENDOR05 = 0x31 + AF_VENDOR06 = 0x33 + AF_VENDOR07 = 0x35 + AF_VENDOR08 = 0x37 + AF_VENDOR09 = 0x39 + AF_VENDOR10 = 0x3b + AF_VENDOR11 = 0x3d + AF_VENDOR12 = 0x3f + AF_VENDOR13 = 0x41 + AF_VENDOR14 = 0x43 + AF_VENDOR15 = 0x45 + AF_VENDOR16 = 0x47 + AF_VENDOR17 = 0x49 + AF_VENDOR18 = 0x4b + AF_VENDOR19 = 0x4d + AF_VENDOR20 = 0x4f + AF_VENDOR21 = 0x51 + AF_VENDOR22 = 0x53 + AF_VENDOR23 = 0x55 + AF_VENDOR24 = 0x57 + AF_VENDOR25 = 0x59 + AF_VENDOR26 = 0x5b + AF_VENDOR27 = 0x5d + AF_VENDOR28 = 0x5f + AF_VENDOR29 = 0x61 + AF_VENDOR30 = 0x63 + AF_VENDOR31 = 0x65 + AF_VENDOR32 = 0x67 + AF_VENDOR33 = 0x69 + AF_VENDOR34 = 0x6b + AF_VENDOR35 = 0x6d + AF_VENDOR36 = 0x6f + AF_VENDOR37 = 0x71 + AF_VENDOR38 = 0x73 + AF_VENDOR39 = 0x75 + AF_VENDOR40 = 0x77 + AF_VENDOR41 = 0x79 + AF_VENDOR42 = 0x7b + AF_VENDOR43 = 0x7d + AF_VENDOR44 = 0x7f + AF_VENDOR45 = 0x81 + AF_VENDOR46 = 0x83 + AF_VENDOR47 = 0x85 + ALTWERASE = 0x200 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427c + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRECTION = 0x40044276 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0084279 + BIOCGETBUFMODE = 0x4004427d + BIOCGETIF = 0x4020426b + BIOCGETZMAX = 0x4004427f + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4008426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCGTSTAMP = 0x40044283 + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCROTZBUF = 0x400c4280 + BIOCSBLEN = 0xc0044266 + BIOCSDIRECTION = 0x80044277 + BIOCSDLT = 0x80044278 + BIOCSETBUFMODE = 0x8004427e + BIOCSETF = 0x80084267 + BIOCSETFNR = 0x80084282 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8008427b + BIOCSETZBUF = 0x800c4281 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8008426d + BIOCSSEESENT = 0x80044277 + BIOCSTSTAMP = 0x80044284 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_BUFMODE_BUFFER = 0x1 + BPF_BUFMODE_ZBUF = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_T_BINTIME = 0x2 + BPF_T_BINTIME_FAST = 0x102 + BPF_T_BINTIME_MONOTONIC = 0x202 + BPF_T_BINTIME_MONOTONIC_FAST = 0x302 + BPF_T_FAST = 0x100 + BPF_T_FLAG_MASK = 0x300 + BPF_T_FORMAT_MASK = 0x3 + BPF_T_MICROTIME = 0x0 + BPF_T_MICROTIME_FAST = 0x100 + BPF_T_MICROTIME_MONOTONIC = 0x200 + BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 + BPF_T_MONOTONIC = 0x200 + BPF_T_MONOTONIC_FAST = 0x300 + BPF_T_NANOTIME = 0x1 + BPF_T_NANOTIME_FAST = 0x101 + BPF_T_NANOTIME_MONOTONIC = 0x201 + BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 + BPF_T_NONE = 0x3 + BPF_T_NORMAL = 0x0 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + CAP_ACCEPT = 0x200000020000000 + CAP_ACL_CHECK = 0x400000000010000 + CAP_ACL_DELETE = 0x400000000020000 + CAP_ACL_GET = 0x400000000040000 + CAP_ACL_SET = 0x400000000080000 + CAP_ALL0 = 0x20007ffffffffff + CAP_ALL1 = 0x4000000001fffff + CAP_BIND = 0x200000040000000 + CAP_BINDAT = 0x200008000000400 + CAP_CHFLAGSAT = 0x200000000001400 + CAP_CONNECT = 0x200000080000000 + CAP_CONNECTAT = 0x200010000000400 + CAP_CREATE = 0x200000000000040 + CAP_EVENT = 0x400000000000020 + CAP_EXTATTR_DELETE = 0x400000000001000 + CAP_EXTATTR_GET = 0x400000000002000 + CAP_EXTATTR_LIST = 0x400000000004000 + CAP_EXTATTR_SET = 0x400000000008000 + CAP_FCHDIR = 0x200000000000800 + CAP_FCHFLAGS = 0x200000000001000 + CAP_FCHMOD = 0x200000000002000 + CAP_FCHMODAT = 0x200000000002400 + CAP_FCHOWN = 0x200000000004000 + CAP_FCHOWNAT = 0x200000000004400 + CAP_FCNTL = 0x200000000008000 + CAP_FCNTL_ALL = 0x78 + CAP_FCNTL_GETFL = 0x8 + CAP_FCNTL_GETOWN = 0x20 + CAP_FCNTL_SETFL = 0x10 + CAP_FCNTL_SETOWN = 0x40 + CAP_FEXECVE = 0x200000000000080 + CAP_FLOCK = 0x200000000010000 + CAP_FPATHCONF = 0x200000000020000 + CAP_FSCK = 0x200000000040000 + CAP_FSTAT = 0x200000000080000 + CAP_FSTATAT = 0x200000000080400 + CAP_FSTATFS = 0x200000000100000 + CAP_FSYNC = 0x200000000000100 + CAP_FTRUNCATE = 0x200000000000200 + CAP_FUTIMES = 0x200000000200000 + CAP_FUTIMESAT = 0x200000000200400 + CAP_GETPEERNAME = 0x200000100000000 + CAP_GETSOCKNAME = 0x200000200000000 + CAP_GETSOCKOPT = 0x200000400000000 + CAP_IOCTL = 0x400000000000080 + CAP_IOCTLS_ALL = 0x7fffffff + CAP_KQUEUE = 0x400000000100040 + CAP_KQUEUE_CHANGE = 0x400000000100000 + CAP_KQUEUE_EVENT = 0x400000000000040 + CAP_LINKAT_SOURCE = 0x200020000000400 + CAP_LINKAT_TARGET = 0x200000000400400 + CAP_LISTEN = 0x200000800000000 + CAP_LOOKUP = 0x200000000000400 + CAP_MAC_GET = 0x400000000000001 + CAP_MAC_SET = 0x400000000000002 + CAP_MKDIRAT = 0x200000000800400 + CAP_MKFIFOAT = 0x200000001000400 + CAP_MKNODAT = 0x200000002000400 + CAP_MMAP = 0x200000000000010 + CAP_MMAP_R = 0x20000000000001d + CAP_MMAP_RW = 0x20000000000001f + CAP_MMAP_RWX = 0x20000000000003f + CAP_MMAP_RX = 0x20000000000003d + CAP_MMAP_W = 0x20000000000001e + CAP_MMAP_WX = 0x20000000000003e + CAP_MMAP_X = 0x20000000000003c + CAP_PDGETPID = 0x400000000000200 + CAP_PDKILL = 0x400000000000800 + CAP_PDWAIT = 0x400000000000400 + CAP_PEELOFF = 0x200001000000000 + CAP_POLL_EVENT = 0x400000000000020 + CAP_PREAD = 0x20000000000000d + CAP_PWRITE = 0x20000000000000e + CAP_READ = 0x200000000000001 + CAP_RECV = 0x200000000000001 + CAP_RENAMEAT_SOURCE = 0x200000004000400 + CAP_RENAMEAT_TARGET = 0x200040000000400 + CAP_RIGHTS_VERSION = 0x0 + CAP_RIGHTS_VERSION_00 = 0x0 + CAP_SEEK = 0x20000000000000c + CAP_SEEK_TELL = 0x200000000000004 + CAP_SEM_GETVALUE = 0x400000000000004 + CAP_SEM_POST = 0x400000000000008 + CAP_SEM_WAIT = 0x400000000000010 + CAP_SEND = 0x200000000000002 + CAP_SETSOCKOPT = 0x200002000000000 + CAP_SHUTDOWN = 0x200004000000000 + CAP_SOCK_CLIENT = 0x200007780000003 + CAP_SOCK_SERVER = 0x200007f60000003 + CAP_SYMLINKAT = 0x200000008000400 + CAP_TTYHOOK = 0x400000000000100 + CAP_UNLINKAT = 0x200000010000400 + CAP_UNUSED0_44 = 0x200080000000000 + CAP_UNUSED0_57 = 0x300000000000000 + CAP_UNUSED1_22 = 0x400000000200000 + CAP_UNUSED1_57 = 0x500000000000000 + CAP_WRITE = 0x200000000000002 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x4 + CLOCK_MONOTONIC_FAST = 0xc + CLOCK_MONOTONIC_PRECISE = 0xb + CLOCK_PROCESS_CPUTIME_ID = 0xf + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_FAST = 0xa + CLOCK_REALTIME_PRECISE = 0x9 + CLOCK_SECOND = 0xd + CLOCK_THREAD_CPUTIME_ID = 0xe + CLOCK_UPTIME = 0x5 + CLOCK_UPTIME_FAST = 0x8 + CLOCK_UPTIME_PRECISE = 0x7 + CLOCK_VIRTUAL = 0x1 + CPUSTATES = 0x5 + CP_IDLE = 0x4 + CP_INTR = 0x3 + CP_NICE = 0x1 + CP_SYS = 0x2 + CP_USER = 0x0 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0x18 + CTL_NET = 0x4 + DIOCGATTR = 0xc144648e + DIOCGDELETE = 0x80106488 + DIOCGFLUSH = 0x20006487 + DIOCGFRONTSTUFF = 0x40086486 + DIOCGFWHEADS = 0x40046483 + DIOCGFWSECTORS = 0x40046482 + DIOCGIDENT = 0x41006489 + DIOCGMEDIASIZE = 0x40086481 + DIOCGPHYSPATH = 0x4400648d + DIOCGPROVIDERNAME = 0x4400648a + DIOCGSECTORSIZE = 0x40046480 + DIOCGSTRIPEOFFSET = 0x4008648c + DIOCGSTRIPESIZE = 0x4008648b + DIOCSKERNELDUMP = 0x804c6490 + DIOCSKERNELDUMP_FREEBSD11 = 0x80046485 + DIOCZONECMD = 0xc06c648f + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_BREDR_BB = 0xff + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_BLUETOOTH_LE_LL = 0xfb + DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 + DLT_BLUETOOTH_LINUX_MONITOR = 0xfe + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_CLASS_NETBSD_RAWAF = 0x2240000 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DISPLAYPORT_AUX = 0x113 + DLT_DOCSIS = 0x8f + DLT_DOCSIS31_XRA31 = 0x111 + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_EPON = 0x103 + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_ETHERNET_MPACKET = 0x112 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_INFINIBAND = 0xf7 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPMI_HPM_2 = 0x104 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_ISO_14443 = 0x108 + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LORATAP = 0x10e + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0x113 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NETLINK = 0xfd + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NORDIC_BLE = 0x110 + DLT_NULL = 0x0 + DLT_OPENFLOW = 0x10b + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x79 + DLT_PKTAP = 0x102 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PROFIBUS_DL = 0x101 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RDS = 0x109 + DLT_REDBACK_SMARTEDGE = 0x20 + DLT_RIO = 0x7c + DLT_RTAC_SERIAL = 0xfa + DLT_SCCP = 0x8e + DLT_SCTP = 0xf8 + DLT_SDLC = 0x10c + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TI_LLN_SNIFFER = 0x10d + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USBPCAP = 0xf9 + DLT_USB_DARWIN = 0x10a + DLT_USB_FREEBSD = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_VSOCK = 0x10f + DLT_WATTSTOPPER_DLM = 0x107 + DLT_WIHART = 0xdf + DLT_WIRESHARK_UPPER_PDU = 0xfc + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DLT_ZWAVE_R1_R2 = 0x105 + DLT_ZWAVE_R3 = 0x106 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_EMPTY = -0xd + EVFILT_FS = -0x9 + EVFILT_LIO = -0xa + EVFILT_PROC = -0x5 + EVFILT_PROCDESC = -0x8 + EVFILT_READ = -0x1 + EVFILT_SENDFILE = -0xc + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xd + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xb + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EVNAMEMAP_NAME_SIZE = 0x40 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DROP = 0x1000 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_FLAG2 = 0x4000 + EV_FORCEONESHOT = 0x100 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_MAXNAMELEN = 0xff + EXTATTR_NAMESPACE_EMPTY = 0x0 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_CANCEL = 0x5 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xb + F_GETOWN = 0x5 + F_OGETLK = 0x7 + F_OK = 0x0 + F_OSETLK = 0x8 + F_OSETLKW = 0x9 + F_RDAHEAD = 0x10 + F_RDLCK = 0x1 + F_READAHEAD = 0xf + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0xc + F_SETLKW = 0xd + F_SETLK_REMOTE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_UNLCKSYS = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFCAP_WOL_MAGIC = 0x2000 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x218f52 + IFF_CANTCONFIG = 0x10000 + IFF_DEBUG = 0x4 + IFF_DRV_OACTIVE = 0x400 + IFF_DRV_RUNNING = 0x40 + IFF_DYING = 0x200000 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOGROUP = 0x800000 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RENAMING = 0x400000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_IEEE1394 = 0x90 + IFT_INFINIBAND = 0xc7 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_PPP = 0x17 + IFT_PROPVIRTUAL = 0x35 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_MASK = 0xfffffffe + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HIP = 0x8b + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MEAS = 0x13 + IPPROTO_MH = 0x87 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OLD_DIVERT = 0xfe + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_RESERVED_253 = 0xfd + IPPROTO_RESERVED_254 = 0xfe + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEND = 0x103 + IPPROTO_SEP = 0x21 + IPPROTO_SHIM6 = 0x8c + IPPROTO_SKIP = 0x39 + IPPROTO_SPACER = 0x7fff + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDANY = 0x40 + IPV6_BINDMULTI = 0x41 + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FLOWID = 0x43 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_LEN = 0x14 + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOWTYPE = 0x44 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_ORIGDSTADDR = 0x48 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVFLOWID = 0x46 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVORIGDSTADDR = 0x48 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRSSBUCKETID = 0x47 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RSSBUCKETID = 0x45 + IPV6_RSS_LISTEN_BUCKET = 0x42 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BINDANY = 0x18 + IP_BINDMULTI = 0x19 + IP_BLOCK_SOURCE = 0x48 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x43 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET3 = 0x31 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FLOWID = 0x5a + IP_FLOWTYPE = 0x5b + IP_FW3 = 0x30 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_NAT_CFG = 0x38 + IP_FW_NAT_DEL = 0x39 + IP_FW_NAT_GET_CONFIG = 0x3a + IP_FW_NAT_GET_LOG = 0x3b + IP_FW_RESETLOG = 0x37 + IP_FW_TABLE_ADD = 0x28 + IP_FW_TABLE_DEL = 0x29 + IP_FW_TABLE_FLUSH = 0x2a + IP_FW_TABLE_GETSIZE = 0x2b + IP_FW_TABLE_LIST = 0x2c + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_ONESBCAST = 0x17 + IP_OPTIONS = 0x1 + IP_ORIGDSTADDR = 0x1b + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVFLOWID = 0x5d + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVORIGDSTADDR = 0x1b + IP_RECVRETOPTS = 0x6 + IP_RECVRSSBUCKETID = 0x5e + IP_RECVTOS = 0x44 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSSBUCKETID = 0x5c + IP_RSS_LISTEN_BUCKET = 0x1a + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCAL_CONNWAIT = 0x4 + LOCAL_CREDS = 0x2 + LOCAL_CREDS_PERSISTENT = 0x3 + LOCAL_PEERCRED = 0x1 + LOCAL_VENDOR = 0x80000000 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_PROTECT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_ALIGNED_SUPER = 0x1000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_EXCL = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GUARD = 0x2000 + MAP_HASSEMAPHORE = 0x200 + MAP_NOCORE = 0x20000 + MAP_NOSYNC = 0x800 + MAP_PREFAULT_READ = 0x40000 + MAP_PRIVATE = 0x2 + MAP_RESERVED0020 = 0x20 + MAP_RESERVED0040 = 0x40 + MAP_RESERVED0080 = 0x80 + MAP_RESERVED0100 = 0x100 + MAP_SHARED = 0x1 + MAP_STACK = 0x400 + MCAST_BLOCK_SOURCE = 0x54 + MCAST_EXCLUDE = 0x2 + MCAST_INCLUDE = 0x1 + MCAST_JOIN_GROUP = 0x50 + MCAST_JOIN_SOURCE_GROUP = 0x52 + MCAST_LEAVE_GROUP = 0x51 + MCAST_LEAVE_SOURCE_GROUP = 0x53 + MCAST_UNBLOCK_SOURCE = 0x55 + MCAST_UNDEFINED = 0x0 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ACLS = 0x8000000 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x200000000 + MNT_BYFSID = 0x8000000 + MNT_CMDFLAGS = 0xd0f0000 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_EXKERB = 0x800 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXPUBLIC = 0x20000000 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_GJOURNAL = 0x2000000 + MNT_IGNORE = 0x800000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NFS4ACLS = 0x10 + MNT_NOATIME = 0x10000000 + MNT_NOCLUSTERR = 0x40000000 + MNT_NOCLUSTERW = 0x80000000 + MNT_NOEXEC = 0x4 + MNT_NONBUSY = 0x4000000 + MNT_NOSUID = 0x8 + MNT_NOSYMFOLLOW = 0x400000 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SNAPSHOT = 0x1000000 + MNT_SOFTDEP = 0x200000 + MNT_SUIDDIR = 0x100000 + MNT_SUJ = 0x100000000 + MNT_SUSPEND = 0x4 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UNTRUSTED = 0x800000000 + MNT_UPDATE = 0x10000 + MNT_UPDATEMASK = 0xad8d0807e + MNT_USER = 0x8000 + MNT_VERIFIED = 0x400000000 + MNT_VISFLAGMASK = 0xffef0ffff + MNT_WAIT = 0x1 + MSG_CMSG_CLOEXEC = 0x40000 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_NBIO = 0x4000 + MSG_NOSIGNAL = 0x20000 + MSG_NOTIFICATION = 0x2000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITFORONE = 0x80000 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLISTL = 0x5 + NET_RT_IFMALIST = 0x4 + NFDBITS = 0x20 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ABSTIME = 0x10 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_CLOSE = 0x100 + NOTE_CLOSE_WRITE = 0x200 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FILE_POLL = 0x2 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MSECONDS = 0x2 + NOTE_NSECONDS = 0x8 + NOTE_OPEN = 0x80 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_READ = 0x400 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x4 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x100000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x20000 + O_EXCL = 0x800 + O_EXEC = 0x40000 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_TTY_INIT = 0x80000 + O_VERIFY = 0x200000 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FIXEDMTU = 0x80000 + RTF_FMASK = 0x1004d808 + RTF_GATEWAY = 0x2 + RTF_GWFLAG_COMPAT = 0x80000000 + RTF_HOST = 0x4 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_RNH_LOCKED = 0x40000000 + RTF_STATIC = 0x800 + RTF_STICKY = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RTV_WEIGHT = 0x100 + RT_ALL_FIBS = -0x1 + RT_BLACKHOLE = 0x40 + RT_DEFAULT_FIB = 0x0 + RT_HAS_GW = 0x80 + RT_HAS_HEADER = 0x10 + RT_HAS_HEADER_BIT = 0x4 + RT_L2_ME = 0x4 + RT_L2_ME_BIT = 0x2 + RT_LLE_CACHE = 0x100 + RT_MAY_LOOP = 0x8 + RT_MAY_LOOP_BIT = 0x3 + RT_REJECT = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_BINTIME = 0x4 + SCM_CREDS = 0x3 + SCM_MONOTONIC = 0x6 + SCM_REALTIME = 0x5 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIME_INFO = 0x7 + SEEK_CUR = 0x1 + SEEK_DATA = 0x3 + SEEK_END = 0x2 + SEEK_HOLE = 0x4 + SEEK_SET = 0x0 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80246987 + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80246989 + SIOCDIFPHYADDR = 0x80206949 + SIOCGDRVSPEC = 0xc01c697b + SIOCGETSGCNT = 0xc0147210 + SIOCGETVIFCNT = 0xc014720f + SIOCGHIWAT = 0x40047301 + SIOCGHWADDR = 0xc020693e + SIOCGI2C = 0xc020693d + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0086924 + SIOCGIFDESCR = 0xc020692a + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFIB = 0xc020695c + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc024698a + SIOCGIFGROUP = 0xc0246988 + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMAC = 0xc0206926 + SIOCGIFMEDIA = 0xc0286938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFRSSHASH = 0xc0186997 + SIOCGIFRSSKEY = 0xc0946996 + SIOCGIFSTATUS = 0xc331693b + SIOCGIFXMEDIA = 0xc028698b + SIOCGLANPCP = 0xc0206998 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCGTUNFIB = 0xc020695e + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCSDRVSPEC = 0x801c697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDESCR = 0x80206929 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFIB = 0x8020695d + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206927 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFRVNET = 0xc020695b + SIOCSIFVNET = 0xc020695a + SIOCSLANPCP = 0x80206999 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSTUNFIB = 0x8020695f + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_LOCAL = 0x0 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BINTIME = 0x2000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DOMAIN = 0x1019 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1009 + SO_LINGER = 0x80 + SO_LISTENINCQLEN = 0x1013 + SO_LISTENQLEN = 0x1012 + SO_LISTENQLIMIT = 0x1011 + SO_MAX_PACING_RATE = 0x1018 + SO_NOSIGPIPE = 0x800 + SO_NO_DDP = 0x8000 + SO_NO_OFFLOAD = 0x4000 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1010 + SO_PROTOCOL = 0x1016 + SO_PROTOTYPE = 0x1016 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSEPORT_LB = 0x10000 + SO_SETFIB = 0x1014 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TS_BINTIME = 0x1 + SO_TS_CLOCK = 0x1017 + SO_TS_CLOCK_MAX = 0x3 + SO_TS_DEFAULT = 0x0 + SO_TS_MONOTONIC = 0x3 + SO_TS_REALTIME = 0x2 + SO_TS_REALTIME_MICRO = 0x0 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USER_COOKIE = 0x1015 + SO_VENDOR = 0x80000000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB3 = 0x4 + TABDLY = 0x4 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_BBR_ACK_COMP_ALG = 0x448 + TCP_BBR_DRAIN_INC_EXTRA = 0x43c + TCP_BBR_DRAIN_PG = 0x42e + TCP_BBR_EXTRA_GAIN = 0x449 + TCP_BBR_IWINTSO = 0x42b + TCP_BBR_LOWGAIN_FD = 0x436 + TCP_BBR_LOWGAIN_HALF = 0x435 + TCP_BBR_LOWGAIN_THRESH = 0x434 + TCP_BBR_MAX_RTO = 0x439 + TCP_BBR_MIN_RTO = 0x438 + TCP_BBR_ONE_RETRAN = 0x431 + TCP_BBR_PACE_CROSS = 0x442 + TCP_BBR_PACE_DEL_TAR = 0x43f + TCP_BBR_PACE_PER_SEC = 0x43e + TCP_BBR_PACE_SEG_MAX = 0x440 + TCP_BBR_PACE_SEG_MIN = 0x441 + TCP_BBR_PROBE_RTT_GAIN = 0x44d + TCP_BBR_PROBE_RTT_INT = 0x430 + TCP_BBR_PROBE_RTT_LEN = 0x44e + TCP_BBR_RACK_RTT_USE = 0x44a + TCP_BBR_RECFORCE = 0x42c + TCP_BBR_REC_OVER_HPTS = 0x43a + TCP_BBR_RETRAN_WTSO = 0x44b + TCP_BBR_RWND_IS_APP = 0x42f + TCP_BBR_STARTUP_EXIT_EPOCH = 0x43d + TCP_BBR_STARTUP_LOSS_EXIT = 0x432 + TCP_BBR_STARTUP_PG = 0x42d + TCP_BBR_UNLIMITED = 0x43b + TCP_BBR_USEDEL_RATE = 0x437 + TCP_BBR_USE_LOWGAIN = 0x433 + TCP_CA_NAME_MAX = 0x10 + TCP_CCALGOOPT = 0x41 + TCP_CONGESTION = 0x40 + TCP_DATA_AFTER_CLOSE = 0x44c + TCP_DELACK = 0x48 + TCP_FASTOPEN = 0x401 + TCP_FASTOPEN_MAX_COOKIE_LEN = 0x10 + TCP_FASTOPEN_MIN_COOKIE_LEN = 0x4 + TCP_FASTOPEN_PSK_LEN = 0x10 + TCP_FUNCTION_BLK = 0x2000 + TCP_FUNCTION_NAME_LEN_MAX = 0x20 + TCP_INFO = 0x20 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x80 + TCP_KEEPINTVL = 0x200 + TCP_LOG = 0x22 + TCP_LOGBUF = 0x23 + TCP_LOGDUMP = 0x25 + TCP_LOGDUMPID = 0x26 + TCP_LOGID = 0x24 + TCP_LOG_ID_LEN = 0x40 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_PCAP_IN = 0x1000 + TCP_PCAP_OUT = 0x800 + TCP_RACK_EARLY_RECOV = 0x423 + TCP_RACK_EARLY_SEG = 0x424 + TCP_RACK_IDLE_REDUCE_HIGH = 0x444 + TCP_RACK_MIN_PACE = 0x445 + TCP_RACK_MIN_PACE_SEG = 0x446 + TCP_RACK_MIN_TO = 0x422 + TCP_RACK_PACE_ALWAYS = 0x41f + TCP_RACK_PACE_MAX_SEG = 0x41e + TCP_RACK_PACE_REDUCE = 0x41d + TCP_RACK_PKT_DELAY = 0x428 + TCP_RACK_PROP = 0x41b + TCP_RACK_PROP_RATE = 0x420 + TCP_RACK_PRR_SENDALOT = 0x421 + TCP_RACK_REORD_FADE = 0x426 + TCP_RACK_REORD_THRESH = 0x425 + TCP_RACK_SESS_CWV = 0x42a + TCP_RACK_TLP_INC_VAR = 0x429 + TCP_RACK_TLP_REDUCE = 0x41c + TCP_RACK_TLP_THRESH = 0x427 + TCP_RACK_TLP_USE = 0x447 + TCP_VENDOR = 0x80000000 + TCSAFLUSH = 0x2 + TIMER_ABSTIME = 0x1 + TIMER_RELTIME = 0x0 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGPTN = 0x4004740f + TIOCGSID = 0x40047463 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DCD = 0x40 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMASTER = 0x2000741c + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40087459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + UTIME_NOW = -0x1 + UTIME_OMIT = -0x2 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VM_BCACHE_SIZE_MAX = 0x70e0000 + VM_SWZONE_SIZE_MAX = 0x2280000 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WEXITED = 0x10 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WNOWAIT = 0x8 + WSTOPPED = 0x2 + WTRAPPED = 0x20 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x59) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x55) + ECAPMODE = syscall.Errno(0x5e) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOOFUS = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x56) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5a) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x57) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCAPABLE = syscall.Errno(0x5d) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x5f) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x60) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5c) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGLIBRT = syscall.Signal(0x21) + SIGLWP = syscall.Signal(0x20) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disc quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC prog. not avail"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIDRM", "identifier removed"}, + {83, "ENOMSG", "no message of desired type"}, + {84, "EOVERFLOW", "value too large to be stored in data type"}, + {85, "ECANCELED", "operation canceled"}, + {86, "EILSEQ", "illegal byte sequence"}, + {87, "ENOATTR", "attribute not found"}, + {88, "EDOOFUS", "programming error"}, + {89, "EBADMSG", "bad message"}, + {90, "EMULTIHOP", "multihop attempted"}, + {91, "ENOLINK", "link has been severed"}, + {92, "EPROTO", "protocol error"}, + {93, "ENOTCAPABLE", "capabilities insufficient"}, + {94, "ECAPMODE", "not permitted in capability mode"}, + {95, "ENOTRECOVERABLE", "state not recoverable"}, + {96, "EOWNERDEAD", "previous owner died"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGIOT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGTHR", "unknown signal"}, + {33, "SIGLIBRT", "unknown signal"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go new file mode 100644 index 0000000..64520d3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go @@ -0,0 +1,1947 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build amd64 && freebsd +// +build amd64,freebsd + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x23 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x24 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_INET6_SDP = 0x2a + AF_INET_SDP = 0x28 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x2a + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SCLUSTER = 0x22 + AF_SIP = 0x18 + AF_SLOW = 0x21 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VENDOR00 = 0x27 + AF_VENDOR01 = 0x29 + AF_VENDOR02 = 0x2b + AF_VENDOR03 = 0x2d + AF_VENDOR04 = 0x2f + AF_VENDOR05 = 0x31 + AF_VENDOR06 = 0x33 + AF_VENDOR07 = 0x35 + AF_VENDOR08 = 0x37 + AF_VENDOR09 = 0x39 + AF_VENDOR10 = 0x3b + AF_VENDOR11 = 0x3d + AF_VENDOR12 = 0x3f + AF_VENDOR13 = 0x41 + AF_VENDOR14 = 0x43 + AF_VENDOR15 = 0x45 + AF_VENDOR16 = 0x47 + AF_VENDOR17 = 0x49 + AF_VENDOR18 = 0x4b + AF_VENDOR19 = 0x4d + AF_VENDOR20 = 0x4f + AF_VENDOR21 = 0x51 + AF_VENDOR22 = 0x53 + AF_VENDOR23 = 0x55 + AF_VENDOR24 = 0x57 + AF_VENDOR25 = 0x59 + AF_VENDOR26 = 0x5b + AF_VENDOR27 = 0x5d + AF_VENDOR28 = 0x5f + AF_VENDOR29 = 0x61 + AF_VENDOR30 = 0x63 + AF_VENDOR31 = 0x65 + AF_VENDOR32 = 0x67 + AF_VENDOR33 = 0x69 + AF_VENDOR34 = 0x6b + AF_VENDOR35 = 0x6d + AF_VENDOR36 = 0x6f + AF_VENDOR37 = 0x71 + AF_VENDOR38 = 0x73 + AF_VENDOR39 = 0x75 + AF_VENDOR40 = 0x77 + AF_VENDOR41 = 0x79 + AF_VENDOR42 = 0x7b + AF_VENDOR43 = 0x7d + AF_VENDOR44 = 0x7f + AF_VENDOR45 = 0x81 + AF_VENDOR46 = 0x83 + AF_VENDOR47 = 0x85 + ALTWERASE = 0x200 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427c + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRECTION = 0x40044276 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0104279 + BIOCGETBUFMODE = 0x4004427d + BIOCGETIF = 0x4020426b + BIOCGETZMAX = 0x4008427f + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCGTSTAMP = 0x40044283 + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCROTZBUF = 0x40184280 + BIOCSBLEN = 0xc0044266 + BIOCSDIRECTION = 0x80044277 + BIOCSDLT = 0x80044278 + BIOCSETBUFMODE = 0x8004427e + BIOCSETF = 0x80104267 + BIOCSETFNR = 0x80104282 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8010427b + BIOCSETZBUF = 0x80184281 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCSTSTAMP = 0x80044284 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x8 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_BUFMODE_BUFFER = 0x1 + BPF_BUFMODE_ZBUF = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_T_BINTIME = 0x2 + BPF_T_BINTIME_FAST = 0x102 + BPF_T_BINTIME_MONOTONIC = 0x202 + BPF_T_BINTIME_MONOTONIC_FAST = 0x302 + BPF_T_FAST = 0x100 + BPF_T_FLAG_MASK = 0x300 + BPF_T_FORMAT_MASK = 0x3 + BPF_T_MICROTIME = 0x0 + BPF_T_MICROTIME_FAST = 0x100 + BPF_T_MICROTIME_MONOTONIC = 0x200 + BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 + BPF_T_MONOTONIC = 0x200 + BPF_T_MONOTONIC_FAST = 0x300 + BPF_T_NANOTIME = 0x1 + BPF_T_NANOTIME_FAST = 0x101 + BPF_T_NANOTIME_MONOTONIC = 0x201 + BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 + BPF_T_NONE = 0x3 + BPF_T_NORMAL = 0x0 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + CAP_ACCEPT = 0x200000020000000 + CAP_ACL_CHECK = 0x400000000010000 + CAP_ACL_DELETE = 0x400000000020000 + CAP_ACL_GET = 0x400000000040000 + CAP_ACL_SET = 0x400000000080000 + CAP_ALL0 = 0x20007ffffffffff + CAP_ALL1 = 0x4000000001fffff + CAP_BIND = 0x200000040000000 + CAP_BINDAT = 0x200008000000400 + CAP_CHFLAGSAT = 0x200000000001400 + CAP_CONNECT = 0x200000080000000 + CAP_CONNECTAT = 0x200010000000400 + CAP_CREATE = 0x200000000000040 + CAP_EVENT = 0x400000000000020 + CAP_EXTATTR_DELETE = 0x400000000001000 + CAP_EXTATTR_GET = 0x400000000002000 + CAP_EXTATTR_LIST = 0x400000000004000 + CAP_EXTATTR_SET = 0x400000000008000 + CAP_FCHDIR = 0x200000000000800 + CAP_FCHFLAGS = 0x200000000001000 + CAP_FCHMOD = 0x200000000002000 + CAP_FCHMODAT = 0x200000000002400 + CAP_FCHOWN = 0x200000000004000 + CAP_FCHOWNAT = 0x200000000004400 + CAP_FCNTL = 0x200000000008000 + CAP_FCNTL_ALL = 0x78 + CAP_FCNTL_GETFL = 0x8 + CAP_FCNTL_GETOWN = 0x20 + CAP_FCNTL_SETFL = 0x10 + CAP_FCNTL_SETOWN = 0x40 + CAP_FEXECVE = 0x200000000000080 + CAP_FLOCK = 0x200000000010000 + CAP_FPATHCONF = 0x200000000020000 + CAP_FSCK = 0x200000000040000 + CAP_FSTAT = 0x200000000080000 + CAP_FSTATAT = 0x200000000080400 + CAP_FSTATFS = 0x200000000100000 + CAP_FSYNC = 0x200000000000100 + CAP_FTRUNCATE = 0x200000000000200 + CAP_FUTIMES = 0x200000000200000 + CAP_FUTIMESAT = 0x200000000200400 + CAP_GETPEERNAME = 0x200000100000000 + CAP_GETSOCKNAME = 0x200000200000000 + CAP_GETSOCKOPT = 0x200000400000000 + CAP_IOCTL = 0x400000000000080 + CAP_IOCTLS_ALL = 0x7fffffffffffffff + CAP_KQUEUE = 0x400000000100040 + CAP_KQUEUE_CHANGE = 0x400000000100000 + CAP_KQUEUE_EVENT = 0x400000000000040 + CAP_LINKAT_SOURCE = 0x200020000000400 + CAP_LINKAT_TARGET = 0x200000000400400 + CAP_LISTEN = 0x200000800000000 + CAP_LOOKUP = 0x200000000000400 + CAP_MAC_GET = 0x400000000000001 + CAP_MAC_SET = 0x400000000000002 + CAP_MKDIRAT = 0x200000000800400 + CAP_MKFIFOAT = 0x200000001000400 + CAP_MKNODAT = 0x200000002000400 + CAP_MMAP = 0x200000000000010 + CAP_MMAP_R = 0x20000000000001d + CAP_MMAP_RW = 0x20000000000001f + CAP_MMAP_RWX = 0x20000000000003f + CAP_MMAP_RX = 0x20000000000003d + CAP_MMAP_W = 0x20000000000001e + CAP_MMAP_WX = 0x20000000000003e + CAP_MMAP_X = 0x20000000000003c + CAP_PDGETPID = 0x400000000000200 + CAP_PDKILL = 0x400000000000800 + CAP_PDWAIT = 0x400000000000400 + CAP_PEELOFF = 0x200001000000000 + CAP_POLL_EVENT = 0x400000000000020 + CAP_PREAD = 0x20000000000000d + CAP_PWRITE = 0x20000000000000e + CAP_READ = 0x200000000000001 + CAP_RECV = 0x200000000000001 + CAP_RENAMEAT_SOURCE = 0x200000004000400 + CAP_RENAMEAT_TARGET = 0x200040000000400 + CAP_RIGHTS_VERSION = 0x0 + CAP_RIGHTS_VERSION_00 = 0x0 + CAP_SEEK = 0x20000000000000c + CAP_SEEK_TELL = 0x200000000000004 + CAP_SEM_GETVALUE = 0x400000000000004 + CAP_SEM_POST = 0x400000000000008 + CAP_SEM_WAIT = 0x400000000000010 + CAP_SEND = 0x200000000000002 + CAP_SETSOCKOPT = 0x200002000000000 + CAP_SHUTDOWN = 0x200004000000000 + CAP_SOCK_CLIENT = 0x200007780000003 + CAP_SOCK_SERVER = 0x200007f60000003 + CAP_SYMLINKAT = 0x200000008000400 + CAP_TTYHOOK = 0x400000000000100 + CAP_UNLINKAT = 0x200000010000400 + CAP_UNUSED0_44 = 0x200080000000000 + CAP_UNUSED0_57 = 0x300000000000000 + CAP_UNUSED1_22 = 0x400000000200000 + CAP_UNUSED1_57 = 0x500000000000000 + CAP_WRITE = 0x200000000000002 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x4 + CLOCK_MONOTONIC_FAST = 0xc + CLOCK_MONOTONIC_PRECISE = 0xb + CLOCK_PROCESS_CPUTIME_ID = 0xf + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_FAST = 0xa + CLOCK_REALTIME_PRECISE = 0x9 + CLOCK_SECOND = 0xd + CLOCK_THREAD_CPUTIME_ID = 0xe + CLOCK_UPTIME = 0x5 + CLOCK_UPTIME_FAST = 0x8 + CLOCK_UPTIME_PRECISE = 0x7 + CLOCK_VIRTUAL = 0x1 + CPUSTATES = 0x5 + CP_IDLE = 0x4 + CP_INTR = 0x3 + CP_NICE = 0x1 + CP_SYS = 0x2 + CP_USER = 0x0 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0x18 + CTL_NET = 0x4 + DIOCGATTR = 0xc148648e + DIOCGDELETE = 0x80106488 + DIOCGFLUSH = 0x20006487 + DIOCGFRONTSTUFF = 0x40086486 + DIOCGFWHEADS = 0x40046483 + DIOCGFWSECTORS = 0x40046482 + DIOCGIDENT = 0x41006489 + DIOCGMEDIASIZE = 0x40086481 + DIOCGPHYSPATH = 0x4400648d + DIOCGPROVIDERNAME = 0x4400648a + DIOCGSECTORSIZE = 0x40046480 + DIOCGSTRIPEOFFSET = 0x4008648c + DIOCGSTRIPESIZE = 0x4008648b + DIOCSKERNELDUMP = 0x80506490 + DIOCSKERNELDUMP_FREEBSD11 = 0x80046485 + DIOCZONECMD = 0xc080648f + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_BREDR_BB = 0xff + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_BLUETOOTH_LE_LL = 0xfb + DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 + DLT_BLUETOOTH_LINUX_MONITOR = 0xfe + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_CLASS_NETBSD_RAWAF = 0x2240000 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DISPLAYPORT_AUX = 0x113 + DLT_DOCSIS = 0x8f + DLT_DOCSIS31_XRA31 = 0x111 + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_EPON = 0x103 + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_ETHERNET_MPACKET = 0x112 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_INFINIBAND = 0xf7 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPMI_HPM_2 = 0x104 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_ISO_14443 = 0x108 + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LORATAP = 0x10e + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0x113 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NETLINK = 0xfd + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NORDIC_BLE = 0x110 + DLT_NULL = 0x0 + DLT_OPENFLOW = 0x10b + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x79 + DLT_PKTAP = 0x102 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PROFIBUS_DL = 0x101 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RDS = 0x109 + DLT_REDBACK_SMARTEDGE = 0x20 + DLT_RIO = 0x7c + DLT_RTAC_SERIAL = 0xfa + DLT_SCCP = 0x8e + DLT_SCTP = 0xf8 + DLT_SDLC = 0x10c + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TI_LLN_SNIFFER = 0x10d + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USBPCAP = 0xf9 + DLT_USB_DARWIN = 0x10a + DLT_USB_FREEBSD = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_VSOCK = 0x10f + DLT_WATTSTOPPER_DLM = 0x107 + DLT_WIHART = 0xdf + DLT_WIRESHARK_UPPER_PDU = 0xfc + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DLT_ZWAVE_R1_R2 = 0x105 + DLT_ZWAVE_R3 = 0x106 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_EMPTY = -0xd + EVFILT_FS = -0x9 + EVFILT_LIO = -0xa + EVFILT_PROC = -0x5 + EVFILT_PROCDESC = -0x8 + EVFILT_READ = -0x1 + EVFILT_SENDFILE = -0xc + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xd + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xb + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EVNAMEMAP_NAME_SIZE = 0x40 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DROP = 0x1000 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_FLAG2 = 0x4000 + EV_FORCEONESHOT = 0x100 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_MAXNAMELEN = 0xff + EXTATTR_NAMESPACE_EMPTY = 0x0 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_CANCEL = 0x5 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xb + F_GETOWN = 0x5 + F_OGETLK = 0x7 + F_OK = 0x0 + F_OSETLK = 0x8 + F_OSETLKW = 0x9 + F_RDAHEAD = 0x10 + F_RDLCK = 0x1 + F_READAHEAD = 0xf + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0xc + F_SETLKW = 0xd + F_SETLK_REMOTE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_UNLCKSYS = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFCAP_WOL_MAGIC = 0x2000 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x218f52 + IFF_CANTCONFIG = 0x10000 + IFF_DEBUG = 0x4 + IFF_DRV_OACTIVE = 0x400 + IFF_DRV_RUNNING = 0x40 + IFF_DYING = 0x200000 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOGROUP = 0x800000 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RENAMING = 0x400000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_IEEE1394 = 0x90 + IFT_INFINIBAND = 0xc7 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_PPP = 0x17 + IFT_PROPVIRTUAL = 0x35 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_MASK = 0xfffffffe + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HIP = 0x8b + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MEAS = 0x13 + IPPROTO_MH = 0x87 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OLD_DIVERT = 0xfe + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_RESERVED_253 = 0xfd + IPPROTO_RESERVED_254 = 0xfe + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEND = 0x103 + IPPROTO_SEP = 0x21 + IPPROTO_SHIM6 = 0x8c + IPPROTO_SKIP = 0x39 + IPPROTO_SPACER = 0x7fff + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDANY = 0x40 + IPV6_BINDMULTI = 0x41 + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FLOWID = 0x43 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_LEN = 0x14 + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOWTYPE = 0x44 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_ORIGDSTADDR = 0x48 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVFLOWID = 0x46 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVORIGDSTADDR = 0x48 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRSSBUCKETID = 0x47 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RSSBUCKETID = 0x45 + IPV6_RSS_LISTEN_BUCKET = 0x42 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BINDANY = 0x18 + IP_BINDMULTI = 0x19 + IP_BLOCK_SOURCE = 0x48 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x43 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET3 = 0x31 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FLOWID = 0x5a + IP_FLOWTYPE = 0x5b + IP_FW3 = 0x30 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_NAT_CFG = 0x38 + IP_FW_NAT_DEL = 0x39 + IP_FW_NAT_GET_CONFIG = 0x3a + IP_FW_NAT_GET_LOG = 0x3b + IP_FW_RESETLOG = 0x37 + IP_FW_TABLE_ADD = 0x28 + IP_FW_TABLE_DEL = 0x29 + IP_FW_TABLE_FLUSH = 0x2a + IP_FW_TABLE_GETSIZE = 0x2b + IP_FW_TABLE_LIST = 0x2c + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_ONESBCAST = 0x17 + IP_OPTIONS = 0x1 + IP_ORIGDSTADDR = 0x1b + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVFLOWID = 0x5d + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVORIGDSTADDR = 0x1b + IP_RECVRETOPTS = 0x6 + IP_RECVRSSBUCKETID = 0x5e + IP_RECVTOS = 0x44 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSSBUCKETID = 0x5c + IP_RSS_LISTEN_BUCKET = 0x1a + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCAL_CONNWAIT = 0x4 + LOCAL_CREDS = 0x2 + LOCAL_CREDS_PERSISTENT = 0x3 + LOCAL_PEERCRED = 0x1 + LOCAL_VENDOR = 0x80000000 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_PROTECT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_32BIT = 0x80000 + MAP_ALIGNED_SUPER = 0x1000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_EXCL = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GUARD = 0x2000 + MAP_HASSEMAPHORE = 0x200 + MAP_NOCORE = 0x20000 + MAP_NOSYNC = 0x800 + MAP_PREFAULT_READ = 0x40000 + MAP_PRIVATE = 0x2 + MAP_RESERVED0020 = 0x20 + MAP_RESERVED0040 = 0x40 + MAP_RESERVED0080 = 0x80 + MAP_RESERVED0100 = 0x100 + MAP_SHARED = 0x1 + MAP_STACK = 0x400 + MCAST_BLOCK_SOURCE = 0x54 + MCAST_EXCLUDE = 0x2 + MCAST_INCLUDE = 0x1 + MCAST_JOIN_GROUP = 0x50 + MCAST_JOIN_SOURCE_GROUP = 0x52 + MCAST_LEAVE_GROUP = 0x51 + MCAST_LEAVE_SOURCE_GROUP = 0x53 + MCAST_UNBLOCK_SOURCE = 0x55 + MCAST_UNDEFINED = 0x0 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ACLS = 0x8000000 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x200000000 + MNT_BYFSID = 0x8000000 + MNT_CMDFLAGS = 0xd0f0000 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_EXKERB = 0x800 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXPUBLIC = 0x20000000 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_GJOURNAL = 0x2000000 + MNT_IGNORE = 0x800000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NFS4ACLS = 0x10 + MNT_NOATIME = 0x10000000 + MNT_NOCLUSTERR = 0x40000000 + MNT_NOCLUSTERW = 0x80000000 + MNT_NOEXEC = 0x4 + MNT_NONBUSY = 0x4000000 + MNT_NOSUID = 0x8 + MNT_NOSYMFOLLOW = 0x400000 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SNAPSHOT = 0x1000000 + MNT_SOFTDEP = 0x200000 + MNT_SUIDDIR = 0x100000 + MNT_SUJ = 0x100000000 + MNT_SUSPEND = 0x4 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UNTRUSTED = 0x800000000 + MNT_UPDATE = 0x10000 + MNT_UPDATEMASK = 0xad8d0807e + MNT_USER = 0x8000 + MNT_VERIFIED = 0x400000000 + MNT_VISFLAGMASK = 0xffef0ffff + MNT_WAIT = 0x1 + MSG_CMSG_CLOEXEC = 0x40000 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_NBIO = 0x4000 + MSG_NOSIGNAL = 0x20000 + MSG_NOTIFICATION = 0x2000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITFORONE = 0x80000 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLISTL = 0x5 + NET_RT_IFMALIST = 0x4 + NFDBITS = 0x40 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ABSTIME = 0x10 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_CLOSE = 0x100 + NOTE_CLOSE_WRITE = 0x200 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FILE_POLL = 0x2 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MSECONDS = 0x2 + NOTE_NSECONDS = 0x8 + NOTE_OPEN = 0x80 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_READ = 0x400 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x4 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x100000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x20000 + O_EXCL = 0x800 + O_EXEC = 0x40000 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_TTY_INIT = 0x80000 + O_VERIFY = 0x200000 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FIXEDMTU = 0x80000 + RTF_FMASK = 0x1004d808 + RTF_GATEWAY = 0x2 + RTF_GWFLAG_COMPAT = 0x80000000 + RTF_HOST = 0x4 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_RNH_LOCKED = 0x40000000 + RTF_STATIC = 0x800 + RTF_STICKY = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RTV_WEIGHT = 0x100 + RT_ALL_FIBS = -0x1 + RT_BLACKHOLE = 0x40 + RT_DEFAULT_FIB = 0x0 + RT_HAS_GW = 0x80 + RT_HAS_HEADER = 0x10 + RT_HAS_HEADER_BIT = 0x4 + RT_L2_ME = 0x4 + RT_L2_ME_BIT = 0x2 + RT_LLE_CACHE = 0x100 + RT_MAY_LOOP = 0x8 + RT_MAY_LOOP_BIT = 0x3 + RT_REJECT = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_BINTIME = 0x4 + SCM_CREDS = 0x3 + SCM_MONOTONIC = 0x6 + SCM_REALTIME = 0x5 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIME_INFO = 0x7 + SEEK_CUR = 0x1 + SEEK_DATA = 0x3 + SEEK_END = 0x2 + SEEK_HOLE = 0x4 + SEEK_SET = 0x0 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80286987 + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80286989 + SIOCDIFPHYADDR = 0x80206949 + SIOCGDRVSPEC = 0xc028697b + SIOCGETSGCNT = 0xc0207210 + SIOCGETVIFCNT = 0xc028720f + SIOCGHIWAT = 0x40047301 + SIOCGHWADDR = 0xc020693e + SIOCGI2C = 0xc020693d + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0106924 + SIOCGIFDESCR = 0xc020692a + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFIB = 0xc020695c + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc028698a + SIOCGIFGROUP = 0xc0286988 + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMAC = 0xc0206926 + SIOCGIFMEDIA = 0xc0306938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFRSSHASH = 0xc0186997 + SIOCGIFRSSKEY = 0xc0946996 + SIOCGIFSTATUS = 0xc331693b + SIOCGIFXMEDIA = 0xc030698b + SIOCGLANPCP = 0xc0206998 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCGTUNFIB = 0xc020695e + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106978 + SIOCSDRVSPEC = 0x8028697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDESCR = 0x80206929 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFIB = 0x8020695d + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206927 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFRVNET = 0xc020695b + SIOCSIFVNET = 0xc020695a + SIOCSLANPCP = 0x80206999 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSTUNFIB = 0x8020695f + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_LOCAL = 0x0 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BINTIME = 0x2000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DOMAIN = 0x1019 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1009 + SO_LINGER = 0x80 + SO_LISTENINCQLEN = 0x1013 + SO_LISTENQLEN = 0x1012 + SO_LISTENQLIMIT = 0x1011 + SO_MAX_PACING_RATE = 0x1018 + SO_NOSIGPIPE = 0x800 + SO_NO_DDP = 0x8000 + SO_NO_OFFLOAD = 0x4000 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1010 + SO_PROTOCOL = 0x1016 + SO_PROTOTYPE = 0x1016 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSEPORT_LB = 0x10000 + SO_SETFIB = 0x1014 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TS_BINTIME = 0x1 + SO_TS_CLOCK = 0x1017 + SO_TS_CLOCK_MAX = 0x3 + SO_TS_DEFAULT = 0x0 + SO_TS_MONOTONIC = 0x3 + SO_TS_REALTIME = 0x2 + SO_TS_REALTIME_MICRO = 0x0 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USER_COOKIE = 0x1015 + SO_VENDOR = 0x80000000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB3 = 0x4 + TABDLY = 0x4 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_BBR_ACK_COMP_ALG = 0x448 + TCP_BBR_DRAIN_INC_EXTRA = 0x43c + TCP_BBR_DRAIN_PG = 0x42e + TCP_BBR_EXTRA_GAIN = 0x449 + TCP_BBR_IWINTSO = 0x42b + TCP_BBR_LOWGAIN_FD = 0x436 + TCP_BBR_LOWGAIN_HALF = 0x435 + TCP_BBR_LOWGAIN_THRESH = 0x434 + TCP_BBR_MAX_RTO = 0x439 + TCP_BBR_MIN_RTO = 0x438 + TCP_BBR_ONE_RETRAN = 0x431 + TCP_BBR_PACE_CROSS = 0x442 + TCP_BBR_PACE_DEL_TAR = 0x43f + TCP_BBR_PACE_PER_SEC = 0x43e + TCP_BBR_PACE_SEG_MAX = 0x440 + TCP_BBR_PACE_SEG_MIN = 0x441 + TCP_BBR_PROBE_RTT_GAIN = 0x44d + TCP_BBR_PROBE_RTT_INT = 0x430 + TCP_BBR_PROBE_RTT_LEN = 0x44e + TCP_BBR_RACK_RTT_USE = 0x44a + TCP_BBR_RECFORCE = 0x42c + TCP_BBR_REC_OVER_HPTS = 0x43a + TCP_BBR_RETRAN_WTSO = 0x44b + TCP_BBR_RWND_IS_APP = 0x42f + TCP_BBR_STARTUP_EXIT_EPOCH = 0x43d + TCP_BBR_STARTUP_LOSS_EXIT = 0x432 + TCP_BBR_STARTUP_PG = 0x42d + TCP_BBR_UNLIMITED = 0x43b + TCP_BBR_USEDEL_RATE = 0x437 + TCP_BBR_USE_LOWGAIN = 0x433 + TCP_CA_NAME_MAX = 0x10 + TCP_CCALGOOPT = 0x41 + TCP_CONGESTION = 0x40 + TCP_DATA_AFTER_CLOSE = 0x44c + TCP_DELACK = 0x48 + TCP_FASTOPEN = 0x401 + TCP_FASTOPEN_MAX_COOKIE_LEN = 0x10 + TCP_FASTOPEN_MIN_COOKIE_LEN = 0x4 + TCP_FASTOPEN_PSK_LEN = 0x10 + TCP_FUNCTION_BLK = 0x2000 + TCP_FUNCTION_NAME_LEN_MAX = 0x20 + TCP_INFO = 0x20 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x80 + TCP_KEEPINTVL = 0x200 + TCP_LOG = 0x22 + TCP_LOGBUF = 0x23 + TCP_LOGDUMP = 0x25 + TCP_LOGDUMPID = 0x26 + TCP_LOGID = 0x24 + TCP_LOG_ID_LEN = 0x40 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_PCAP_IN = 0x1000 + TCP_PCAP_OUT = 0x800 + TCP_RACK_EARLY_RECOV = 0x423 + TCP_RACK_EARLY_SEG = 0x424 + TCP_RACK_IDLE_REDUCE_HIGH = 0x444 + TCP_RACK_MIN_PACE = 0x445 + TCP_RACK_MIN_PACE_SEG = 0x446 + TCP_RACK_MIN_TO = 0x422 + TCP_RACK_PACE_ALWAYS = 0x41f + TCP_RACK_PACE_MAX_SEG = 0x41e + TCP_RACK_PACE_REDUCE = 0x41d + TCP_RACK_PKT_DELAY = 0x428 + TCP_RACK_PROP = 0x41b + TCP_RACK_PROP_RATE = 0x420 + TCP_RACK_PRR_SENDALOT = 0x421 + TCP_RACK_REORD_FADE = 0x426 + TCP_RACK_REORD_THRESH = 0x425 + TCP_RACK_SESS_CWV = 0x42a + TCP_RACK_TLP_INC_VAR = 0x429 + TCP_RACK_TLP_REDUCE = 0x41c + TCP_RACK_TLP_THRESH = 0x427 + TCP_RACK_TLP_USE = 0x447 + TCP_VENDOR = 0x80000000 + TCSAFLUSH = 0x2 + TIMER_ABSTIME = 0x1 + TIMER_RELTIME = 0x0 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGPTN = 0x4004740f + TIOCGSID = 0x40047463 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DCD = 0x40 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMASTER = 0x2000741c + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + UTIME_NOW = -0x1 + UTIME_OMIT = -0x2 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WEXITED = 0x10 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WNOWAIT = 0x8 + WSTOPPED = 0x2 + WTRAPPED = 0x20 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x59) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x55) + ECAPMODE = syscall.Errno(0x5e) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOOFUS = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x56) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5a) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x57) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCAPABLE = syscall.Errno(0x5d) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x5f) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x60) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5c) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGLIBRT = syscall.Signal(0x21) + SIGLWP = syscall.Signal(0x20) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disc quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC prog. not avail"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIDRM", "identifier removed"}, + {83, "ENOMSG", "no message of desired type"}, + {84, "EOVERFLOW", "value too large to be stored in data type"}, + {85, "ECANCELED", "operation canceled"}, + {86, "EILSEQ", "illegal byte sequence"}, + {87, "ENOATTR", "attribute not found"}, + {88, "EDOOFUS", "programming error"}, + {89, "EBADMSG", "bad message"}, + {90, "EMULTIHOP", "multihop attempted"}, + {91, "ENOLINK", "link has been severed"}, + {92, "EPROTO", "protocol error"}, + {93, "ENOTCAPABLE", "capabilities insufficient"}, + {94, "ECAPMODE", "not permitted in capability mode"}, + {95, "ENOTRECOVERABLE", "state not recoverable"}, + {96, "EOWNERDEAD", "previous owner died"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGIOT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGTHR", "unknown signal"}, + {33, "SIGLIBRT", "unknown signal"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go new file mode 100644 index 0000000..99e9a0e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go @@ -0,0 +1,1846 @@ +// mkerrors.sh +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm && freebsd +// +build arm,freebsd + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x23 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x24 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_INET6_SDP = 0x2a + AF_INET_SDP = 0x28 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x2a + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SCLUSTER = 0x22 + AF_SIP = 0x18 + AF_SLOW = 0x21 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VENDOR00 = 0x27 + AF_VENDOR01 = 0x29 + AF_VENDOR02 = 0x2b + AF_VENDOR03 = 0x2d + AF_VENDOR04 = 0x2f + AF_VENDOR05 = 0x31 + AF_VENDOR06 = 0x33 + AF_VENDOR07 = 0x35 + AF_VENDOR08 = 0x37 + AF_VENDOR09 = 0x39 + AF_VENDOR10 = 0x3b + AF_VENDOR11 = 0x3d + AF_VENDOR12 = 0x3f + AF_VENDOR13 = 0x41 + AF_VENDOR14 = 0x43 + AF_VENDOR15 = 0x45 + AF_VENDOR16 = 0x47 + AF_VENDOR17 = 0x49 + AF_VENDOR18 = 0x4b + AF_VENDOR19 = 0x4d + AF_VENDOR20 = 0x4f + AF_VENDOR21 = 0x51 + AF_VENDOR22 = 0x53 + AF_VENDOR23 = 0x55 + AF_VENDOR24 = 0x57 + AF_VENDOR25 = 0x59 + AF_VENDOR26 = 0x5b + AF_VENDOR27 = 0x5d + AF_VENDOR28 = 0x5f + AF_VENDOR29 = 0x61 + AF_VENDOR30 = 0x63 + AF_VENDOR31 = 0x65 + AF_VENDOR32 = 0x67 + AF_VENDOR33 = 0x69 + AF_VENDOR34 = 0x6b + AF_VENDOR35 = 0x6d + AF_VENDOR36 = 0x6f + AF_VENDOR37 = 0x71 + AF_VENDOR38 = 0x73 + AF_VENDOR39 = 0x75 + AF_VENDOR40 = 0x77 + AF_VENDOR41 = 0x79 + AF_VENDOR42 = 0x7b + AF_VENDOR43 = 0x7d + AF_VENDOR44 = 0x7f + AF_VENDOR45 = 0x81 + AF_VENDOR46 = 0x83 + AF_VENDOR47 = 0x85 + ALTWERASE = 0x200 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427c + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRECTION = 0x40044276 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0084279 + BIOCGETBUFMODE = 0x4004427d + BIOCGETIF = 0x4020426b + BIOCGETZMAX = 0x4004427f + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCGTSTAMP = 0x40044283 + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCROTZBUF = 0x400c4280 + BIOCSBLEN = 0xc0044266 + BIOCSDIRECTION = 0x80044277 + BIOCSDLT = 0x80044278 + BIOCSETBUFMODE = 0x8004427e + BIOCSETF = 0x80084267 + BIOCSETFNR = 0x80084282 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8008427b + BIOCSETZBUF = 0x800c4281 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCSTSTAMP = 0x80044284 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_BUFMODE_BUFFER = 0x1 + BPF_BUFMODE_ZBUF = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_T_BINTIME = 0x2 + BPF_T_BINTIME_FAST = 0x102 + BPF_T_BINTIME_MONOTONIC = 0x202 + BPF_T_BINTIME_MONOTONIC_FAST = 0x302 + BPF_T_FAST = 0x100 + BPF_T_FLAG_MASK = 0x300 + BPF_T_FORMAT_MASK = 0x3 + BPF_T_MICROTIME = 0x0 + BPF_T_MICROTIME_FAST = 0x100 + BPF_T_MICROTIME_MONOTONIC = 0x200 + BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 + BPF_T_MONOTONIC = 0x200 + BPF_T_MONOTONIC_FAST = 0x300 + BPF_T_NANOTIME = 0x1 + BPF_T_NANOTIME_FAST = 0x101 + BPF_T_NANOTIME_MONOTONIC = 0x201 + BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 + BPF_T_NONE = 0x3 + BPF_T_NORMAL = 0x0 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + CAP_ACCEPT = 0x200000020000000 + CAP_ACL_CHECK = 0x400000000010000 + CAP_ACL_DELETE = 0x400000000020000 + CAP_ACL_GET = 0x400000000040000 + CAP_ACL_SET = 0x400000000080000 + CAP_ALL0 = 0x20007ffffffffff + CAP_ALL1 = 0x4000000001fffff + CAP_BIND = 0x200000040000000 + CAP_BINDAT = 0x200008000000400 + CAP_CHFLAGSAT = 0x200000000001400 + CAP_CONNECT = 0x200000080000000 + CAP_CONNECTAT = 0x200010000000400 + CAP_CREATE = 0x200000000000040 + CAP_EVENT = 0x400000000000020 + CAP_EXTATTR_DELETE = 0x400000000001000 + CAP_EXTATTR_GET = 0x400000000002000 + CAP_EXTATTR_LIST = 0x400000000004000 + CAP_EXTATTR_SET = 0x400000000008000 + CAP_FCHDIR = 0x200000000000800 + CAP_FCHFLAGS = 0x200000000001000 + CAP_FCHMOD = 0x200000000002000 + CAP_FCHMODAT = 0x200000000002400 + CAP_FCHOWN = 0x200000000004000 + CAP_FCHOWNAT = 0x200000000004400 + CAP_FCNTL = 0x200000000008000 + CAP_FCNTL_ALL = 0x78 + CAP_FCNTL_GETFL = 0x8 + CAP_FCNTL_GETOWN = 0x20 + CAP_FCNTL_SETFL = 0x10 + CAP_FCNTL_SETOWN = 0x40 + CAP_FEXECVE = 0x200000000000080 + CAP_FLOCK = 0x200000000010000 + CAP_FPATHCONF = 0x200000000020000 + CAP_FSCK = 0x200000000040000 + CAP_FSTAT = 0x200000000080000 + CAP_FSTATAT = 0x200000000080400 + CAP_FSTATFS = 0x200000000100000 + CAP_FSYNC = 0x200000000000100 + CAP_FTRUNCATE = 0x200000000000200 + CAP_FUTIMES = 0x200000000200000 + CAP_FUTIMESAT = 0x200000000200400 + CAP_GETPEERNAME = 0x200000100000000 + CAP_GETSOCKNAME = 0x200000200000000 + CAP_GETSOCKOPT = 0x200000400000000 + CAP_IOCTL = 0x400000000000080 + CAP_IOCTLS_ALL = 0x7fffffff + CAP_KQUEUE = 0x400000000100040 + CAP_KQUEUE_CHANGE = 0x400000000100000 + CAP_KQUEUE_EVENT = 0x400000000000040 + CAP_LINKAT_SOURCE = 0x200020000000400 + CAP_LINKAT_TARGET = 0x200000000400400 + CAP_LISTEN = 0x200000800000000 + CAP_LOOKUP = 0x200000000000400 + CAP_MAC_GET = 0x400000000000001 + CAP_MAC_SET = 0x400000000000002 + CAP_MKDIRAT = 0x200000000800400 + CAP_MKFIFOAT = 0x200000001000400 + CAP_MKNODAT = 0x200000002000400 + CAP_MMAP = 0x200000000000010 + CAP_MMAP_R = 0x20000000000001d + CAP_MMAP_RW = 0x20000000000001f + CAP_MMAP_RWX = 0x20000000000003f + CAP_MMAP_RX = 0x20000000000003d + CAP_MMAP_W = 0x20000000000001e + CAP_MMAP_WX = 0x20000000000003e + CAP_MMAP_X = 0x20000000000003c + CAP_PDGETPID = 0x400000000000200 + CAP_PDKILL = 0x400000000000800 + CAP_PDWAIT = 0x400000000000400 + CAP_PEELOFF = 0x200001000000000 + CAP_POLL_EVENT = 0x400000000000020 + CAP_PREAD = 0x20000000000000d + CAP_PWRITE = 0x20000000000000e + CAP_READ = 0x200000000000001 + CAP_RECV = 0x200000000000001 + CAP_RENAMEAT_SOURCE = 0x200000004000400 + CAP_RENAMEAT_TARGET = 0x200040000000400 + CAP_RIGHTS_VERSION = 0x0 + CAP_RIGHTS_VERSION_00 = 0x0 + CAP_SEEK = 0x20000000000000c + CAP_SEEK_TELL = 0x200000000000004 + CAP_SEM_GETVALUE = 0x400000000000004 + CAP_SEM_POST = 0x400000000000008 + CAP_SEM_WAIT = 0x400000000000010 + CAP_SEND = 0x200000000000002 + CAP_SETSOCKOPT = 0x200002000000000 + CAP_SHUTDOWN = 0x200004000000000 + CAP_SOCK_CLIENT = 0x200007780000003 + CAP_SOCK_SERVER = 0x200007f60000003 + CAP_SYMLINKAT = 0x200000008000400 + CAP_TTYHOOK = 0x400000000000100 + CAP_UNLINKAT = 0x200000010000400 + CAP_UNUSED0_44 = 0x200080000000000 + CAP_UNUSED0_57 = 0x300000000000000 + CAP_UNUSED1_22 = 0x400000000200000 + CAP_UNUSED1_57 = 0x500000000000000 + CAP_WRITE = 0x200000000000002 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x4 + CLOCK_MONOTONIC_FAST = 0xc + CLOCK_MONOTONIC_PRECISE = 0xb + CLOCK_PROCESS_CPUTIME_ID = 0xf + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_FAST = 0xa + CLOCK_REALTIME_PRECISE = 0x9 + CLOCK_SECOND = 0xd + CLOCK_THREAD_CPUTIME_ID = 0xe + CLOCK_UPTIME = 0x5 + CLOCK_UPTIME_FAST = 0x8 + CLOCK_UPTIME_PRECISE = 0x7 + CLOCK_VIRTUAL = 0x1 + CPUSTATES = 0x5 + CP_IDLE = 0x4 + CP_INTR = 0x3 + CP_NICE = 0x1 + CP_SYS = 0x2 + CP_USER = 0x0 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0x18 + CTL_NET = 0x4 + DIOCGATTR = 0xc144648e + DIOCGDELETE = 0x80106488 + DIOCGFLUSH = 0x20006487 + DIOCGFRONTSTUFF = 0x40086486 + DIOCGFWHEADS = 0x40046483 + DIOCGFWSECTORS = 0x40046482 + DIOCGIDENT = 0x41006489 + DIOCGMEDIASIZE = 0x40086481 + DIOCGPHYSPATH = 0x4400648d + DIOCGPROVIDERNAME = 0x4400648a + DIOCGSECTORSIZE = 0x40046480 + DIOCGSTRIPEOFFSET = 0x4008648c + DIOCGSTRIPESIZE = 0x4008648b + DIOCSKERNELDUMP = 0x804c6490 + DIOCSKERNELDUMP_FREEBSD11 = 0x80046485 + DIOCZONECMD = 0xc06c648f + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_BREDR_BB = 0xff + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_BLUETOOTH_LE_LL = 0xfb + DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 + DLT_BLUETOOTH_LINUX_MONITOR = 0xfe + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_CLASS_NETBSD_RAWAF = 0x2240000 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_EPON = 0x103 + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_INFINIBAND = 0xf7 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPMI_HPM_2 = 0x104 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_ISO_14443 = 0x108 + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0x109 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NETLINK = 0xfd + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x79 + DLT_PKTAP = 0x102 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PROFIBUS_DL = 0x101 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RDS = 0x109 + DLT_REDBACK_SMARTEDGE = 0x20 + DLT_RIO = 0x7c + DLT_RTAC_SERIAL = 0xfa + DLT_SCCP = 0x8e + DLT_SCTP = 0xf8 + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USBPCAP = 0xf9 + DLT_USB_FREEBSD = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WATTSTOPPER_DLM = 0x107 + DLT_WIHART = 0xdf + DLT_WIRESHARK_UPPER_PDU = 0xfc + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DLT_ZWAVE_R1_R2 = 0x105 + DLT_ZWAVE_R3 = 0x106 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_LIO = -0xa + EVFILT_PROC = -0x5 + EVFILT_PROCDESC = -0x8 + EVFILT_READ = -0x1 + EVFILT_SENDFILE = -0xc + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xc + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xb + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DROP = 0x1000 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_FLAG2 = 0x4000 + EV_FORCEONESHOT = 0x100 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_NAMESPACE_EMPTY = 0x0 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_CANCEL = 0x5 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xb + F_GETOWN = 0x5 + F_OGETLK = 0x7 + F_OK = 0x0 + F_OSETLK = 0x8 + F_OSETLKW = 0x9 + F_RDAHEAD = 0x10 + F_RDLCK = 0x1 + F_READAHEAD = 0xf + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0xc + F_SETLKW = 0xd + F_SETLK_REMOTE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_UNLCKSYS = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x218f52 + IFF_CANTCONFIG = 0x10000 + IFF_DEBUG = 0x4 + IFF_DRV_OACTIVE = 0x400 + IFF_DRV_RUNNING = 0x40 + IFF_DYING = 0x200000 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RENAMING = 0x400000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_IEEE1394 = 0x90 + IFT_INFINIBAND = 0xc7 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_PPP = 0x17 + IFT_PROPVIRTUAL = 0x35 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_MASK = 0xfffffffe + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HIP = 0x8b + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MEAS = 0x13 + IPPROTO_MH = 0x87 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OLD_DIVERT = 0xfe + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_RESERVED_253 = 0xfd + IPPROTO_RESERVED_254 = 0xfe + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEND = 0x103 + IPPROTO_SEP = 0x21 + IPPROTO_SHIM6 = 0x8c + IPPROTO_SKIP = 0x39 + IPPROTO_SPACER = 0x7fff + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDANY = 0x40 + IPV6_BINDMULTI = 0x41 + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FLOWID = 0x43 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOWTYPE = 0x44 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVFLOWID = 0x46 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRSSBUCKETID = 0x47 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RSSBUCKETID = 0x45 + IPV6_RSS_LISTEN_BUCKET = 0x42 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BINDANY = 0x18 + IP_BINDMULTI = 0x19 + IP_BLOCK_SOURCE = 0x48 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x43 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET3 = 0x31 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FLOWID = 0x5a + IP_FLOWTYPE = 0x5b + IP_FW3 = 0x30 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_NAT_CFG = 0x38 + IP_FW_NAT_DEL = 0x39 + IP_FW_NAT_GET_CONFIG = 0x3a + IP_FW_NAT_GET_LOG = 0x3b + IP_FW_RESETLOG = 0x37 + IP_FW_TABLE_ADD = 0x28 + IP_FW_TABLE_DEL = 0x29 + IP_FW_TABLE_FLUSH = 0x2a + IP_FW_TABLE_GETSIZE = 0x2b + IP_FW_TABLE_LIST = 0x2c + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MAX_SOURCE_FILTER = 0x400 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_ONESBCAST = 0x17 + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVFLOWID = 0x5d + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRSSBUCKETID = 0x5e + IP_RECVTOS = 0x44 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSSBUCKETID = 0x5c + IP_RSS_LISTEN_BUCKET = 0x1a + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCAL_CONNWAIT = 0x4 + LOCAL_CREDS = 0x2 + LOCAL_CREDS_PERSISTENT = 0x3 + LOCAL_PEERCRED = 0x1 + LOCAL_VENDOR = 0x80000000 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_PROTECT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_ALIGNED_SUPER = 0x1000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_EXCL = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GUARD = 0x2000 + MAP_HASSEMAPHORE = 0x200 + MAP_NOCORE = 0x20000 + MAP_NOSYNC = 0x800 + MAP_PREFAULT_READ = 0x40000 + MAP_PRIVATE = 0x2 + MAP_RESERVED0020 = 0x20 + MAP_RESERVED0040 = 0x40 + MAP_RESERVED0080 = 0x80 + MAP_RESERVED0100 = 0x100 + MAP_SHARED = 0x1 + MAP_STACK = 0x400 + MCAST_BLOCK_SOURCE = 0x54 + MCAST_EXCLUDE = 0x2 + MCAST_INCLUDE = 0x1 + MCAST_JOIN_GROUP = 0x50 + MCAST_JOIN_SOURCE_GROUP = 0x52 + MCAST_LEAVE_GROUP = 0x51 + MCAST_LEAVE_SOURCE_GROUP = 0x53 + MCAST_UNBLOCK_SOURCE = 0x55 + MCAST_UNDEFINED = 0x0 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ACLS = 0x8000000 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x200000000 + MNT_BYFSID = 0x8000000 + MNT_CMDFLAGS = 0xd0f0000 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_EXKERB = 0x800 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXPUBLIC = 0x20000000 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_GJOURNAL = 0x2000000 + MNT_IGNORE = 0x800000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NFS4ACLS = 0x10 + MNT_NOATIME = 0x10000000 + MNT_NOCLUSTERR = 0x40000000 + MNT_NOCLUSTERW = 0x80000000 + MNT_NOEXEC = 0x4 + MNT_NONBUSY = 0x4000000 + MNT_NOSUID = 0x8 + MNT_NOSYMFOLLOW = 0x400000 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SNAPSHOT = 0x1000000 + MNT_SOFTDEP = 0x200000 + MNT_SUIDDIR = 0x100000 + MNT_SUJ = 0x100000000 + MNT_SUSPEND = 0x4 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UPDATE = 0x10000 + MNT_UPDATEMASK = 0x2d8d0807e + MNT_USER = 0x8000 + MNT_VISFLAGMASK = 0x3fef0ffff + MNT_WAIT = 0x1 + MSG_CMSG_CLOEXEC = 0x40000 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_NBIO = 0x4000 + MSG_NOSIGNAL = 0x20000 + MSG_NOTIFICATION = 0x2000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITFORONE = 0x80000 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLISTL = 0x5 + NET_RT_IFMALIST = 0x4 + NFDBITS = 0x20 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_CLOSE = 0x100 + NOTE_CLOSE_WRITE = 0x200 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FILE_POLL = 0x2 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MSECONDS = 0x2 + NOTE_NSECONDS = 0x8 + NOTE_OPEN = 0x80 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_READ = 0x400 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x4 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x100000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x20000 + O_EXCL = 0x800 + O_EXEC = 0x40000 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_TTY_INIT = 0x80000 + O_VERIFY = 0x200000 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FIXEDMTU = 0x80000 + RTF_FMASK = 0x1004d808 + RTF_GATEWAY = 0x2 + RTF_GWFLAG_COMPAT = 0x80000000 + RTF_HOST = 0x4 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_RNH_LOCKED = 0x40000000 + RTF_STATIC = 0x800 + RTF_STICKY = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RTV_WEIGHT = 0x100 + RT_ALL_FIBS = -0x1 + RT_BLACKHOLE = 0x40 + RT_CACHING_CONTEXT = 0x1 + RT_DEFAULT_FIB = 0x0 + RT_HAS_GW = 0x80 + RT_HAS_HEADER = 0x10 + RT_HAS_HEADER_BIT = 0x4 + RT_L2_ME = 0x4 + RT_L2_ME_BIT = 0x2 + RT_LLE_CACHE = 0x100 + RT_MAY_LOOP = 0x8 + RT_MAY_LOOP_BIT = 0x3 + RT_NORTREF = 0x2 + RT_REJECT = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_BINTIME = 0x4 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SEEK_CUR = 0x1 + SEEK_DATA = 0x3 + SEEK_END = 0x2 + SEEK_HOLE = 0x4 + SEEK_SET = 0x0 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80246987 + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80246989 + SIOCDIFPHYADDR = 0x80206949 + SIOCGDRVSPEC = 0xc01c697b + SIOCGETSGCNT = 0xc0147210 + SIOCGETVIFCNT = 0xc014720f + SIOCGHIWAT = 0x40047301 + SIOCGHWADDR = 0xc020693e + SIOCGI2C = 0xc020693d + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0086924 + SIOCGIFDESCR = 0xc020692a + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFIB = 0xc020695c + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc024698a + SIOCGIFGROUP = 0xc0246988 + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMAC = 0xc0206926 + SIOCGIFMEDIA = 0xc0286938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFSTATUS = 0xc331693b + SIOCGIFXMEDIA = 0xc028698b + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCGTUNFIB = 0xc020695e + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCSDRVSPEC = 0x801c697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDESCR = 0x80206929 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFIB = 0x8020695d + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206927 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFRVNET = 0xc020695b + SIOCSIFVNET = 0xc020695a + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSTUNFIB = 0x8020695f + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_LOCAL = 0x0 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BINTIME = 0x2000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1009 + SO_LINGER = 0x80 + SO_LISTENINCQLEN = 0x1013 + SO_LISTENQLEN = 0x1012 + SO_LISTENQLIMIT = 0x1011 + SO_NOSIGPIPE = 0x800 + SO_NO_DDP = 0x8000 + SO_NO_OFFLOAD = 0x4000 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1010 + SO_PROTOCOL = 0x1016 + SO_PROTOTYPE = 0x1016 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SETFIB = 0x1014 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USER_COOKIE = 0x1015 + SO_VENDOR = 0x80000000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB3 = 0x4 + TABDLY = 0x4 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_CA_NAME_MAX = 0x10 + TCP_CCALGOOPT = 0x41 + TCP_CONGESTION = 0x40 + TCP_FASTOPEN = 0x401 + TCP_FUNCTION_BLK = 0x2000 + TCP_FUNCTION_NAME_LEN_MAX = 0x20 + TCP_INFO = 0x20 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x80 + TCP_KEEPINTVL = 0x200 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_PCAP_IN = 0x1000 + TCP_PCAP_OUT = 0x800 + TCP_VENDOR = 0x80000000 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGPTN = 0x4004740f + TIOCGSID = 0x40047463 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DCD = 0x40 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMASTER = 0x2000741c + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WEXITED = 0x10 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WNOWAIT = 0x8 + WSTOPPED = 0x2 + WTRAPPED = 0x20 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x59) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x55) + ECAPMODE = syscall.Errno(0x5e) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOOFUS = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x56) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5a) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x57) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCAPABLE = syscall.Errno(0x5d) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x5f) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x60) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5c) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGLIBRT = syscall.Signal(0x21) + SIGLWP = syscall.Signal(0x20) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disc quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC prog. not avail"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIDRM", "identifier removed"}, + {83, "ENOMSG", "no message of desired type"}, + {84, "EOVERFLOW", "value too large to be stored in data type"}, + {85, "ECANCELED", "operation canceled"}, + {86, "EILSEQ", "illegal byte sequence"}, + {87, "ENOATTR", "attribute not found"}, + {88, "EDOOFUS", "programming error"}, + {89, "EBADMSG", "bad message"}, + {90, "EMULTIHOP", "multihop attempted"}, + {91, "ENOLINK", "link has been severed"}, + {92, "EPROTO", "protocol error"}, + {93, "ENOTCAPABLE", "capabilities insufficient"}, + {94, "ECAPMODE", "not permitted in capability mode"}, + {95, "ENOTRECOVERABLE", "state not recoverable"}, + {96, "EOWNERDEAD", "previous owner died"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGIOT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGTHR", "unknown signal"}, + {33, "SIGLIBRT", "unknown signal"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go new file mode 100644 index 0000000..4c83771 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go @@ -0,0 +1,1948 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm64 && freebsd +// +build arm64,freebsd + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x23 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x24 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_INET6_SDP = 0x2a + AF_INET_SDP = 0x28 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x2a + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SCLUSTER = 0x22 + AF_SIP = 0x18 + AF_SLOW = 0x21 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VENDOR00 = 0x27 + AF_VENDOR01 = 0x29 + AF_VENDOR02 = 0x2b + AF_VENDOR03 = 0x2d + AF_VENDOR04 = 0x2f + AF_VENDOR05 = 0x31 + AF_VENDOR06 = 0x33 + AF_VENDOR07 = 0x35 + AF_VENDOR08 = 0x37 + AF_VENDOR09 = 0x39 + AF_VENDOR10 = 0x3b + AF_VENDOR11 = 0x3d + AF_VENDOR12 = 0x3f + AF_VENDOR13 = 0x41 + AF_VENDOR14 = 0x43 + AF_VENDOR15 = 0x45 + AF_VENDOR16 = 0x47 + AF_VENDOR17 = 0x49 + AF_VENDOR18 = 0x4b + AF_VENDOR19 = 0x4d + AF_VENDOR20 = 0x4f + AF_VENDOR21 = 0x51 + AF_VENDOR22 = 0x53 + AF_VENDOR23 = 0x55 + AF_VENDOR24 = 0x57 + AF_VENDOR25 = 0x59 + AF_VENDOR26 = 0x5b + AF_VENDOR27 = 0x5d + AF_VENDOR28 = 0x5f + AF_VENDOR29 = 0x61 + AF_VENDOR30 = 0x63 + AF_VENDOR31 = 0x65 + AF_VENDOR32 = 0x67 + AF_VENDOR33 = 0x69 + AF_VENDOR34 = 0x6b + AF_VENDOR35 = 0x6d + AF_VENDOR36 = 0x6f + AF_VENDOR37 = 0x71 + AF_VENDOR38 = 0x73 + AF_VENDOR39 = 0x75 + AF_VENDOR40 = 0x77 + AF_VENDOR41 = 0x79 + AF_VENDOR42 = 0x7b + AF_VENDOR43 = 0x7d + AF_VENDOR44 = 0x7f + AF_VENDOR45 = 0x81 + AF_VENDOR46 = 0x83 + AF_VENDOR47 = 0x85 + ALTWERASE = 0x200 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427c + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRECTION = 0x40044276 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0104279 + BIOCGETBUFMODE = 0x4004427d + BIOCGETIF = 0x4020426b + BIOCGETZMAX = 0x4008427f + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCGTSTAMP = 0x40044283 + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCROTZBUF = 0x40184280 + BIOCSBLEN = 0xc0044266 + BIOCSDIRECTION = 0x80044277 + BIOCSDLT = 0x80044278 + BIOCSETBUFMODE = 0x8004427e + BIOCSETF = 0x80104267 + BIOCSETFNR = 0x80104282 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8010427b + BIOCSETZBUF = 0x80184281 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCSTSTAMP = 0x80044284 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x8 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_BUFMODE_BUFFER = 0x1 + BPF_BUFMODE_ZBUF = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_T_BINTIME = 0x2 + BPF_T_BINTIME_FAST = 0x102 + BPF_T_BINTIME_MONOTONIC = 0x202 + BPF_T_BINTIME_MONOTONIC_FAST = 0x302 + BPF_T_FAST = 0x100 + BPF_T_FLAG_MASK = 0x300 + BPF_T_FORMAT_MASK = 0x3 + BPF_T_MICROTIME = 0x0 + BPF_T_MICROTIME_FAST = 0x100 + BPF_T_MICROTIME_MONOTONIC = 0x200 + BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 + BPF_T_MONOTONIC = 0x200 + BPF_T_MONOTONIC_FAST = 0x300 + BPF_T_NANOTIME = 0x1 + BPF_T_NANOTIME_FAST = 0x101 + BPF_T_NANOTIME_MONOTONIC = 0x201 + BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 + BPF_T_NONE = 0x3 + BPF_T_NORMAL = 0x0 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + CAP_ACCEPT = 0x200000020000000 + CAP_ACL_CHECK = 0x400000000010000 + CAP_ACL_DELETE = 0x400000000020000 + CAP_ACL_GET = 0x400000000040000 + CAP_ACL_SET = 0x400000000080000 + CAP_ALL0 = 0x20007ffffffffff + CAP_ALL1 = 0x4000000001fffff + CAP_BIND = 0x200000040000000 + CAP_BINDAT = 0x200008000000400 + CAP_CHFLAGSAT = 0x200000000001400 + CAP_CONNECT = 0x200000080000000 + CAP_CONNECTAT = 0x200010000000400 + CAP_CREATE = 0x200000000000040 + CAP_EVENT = 0x400000000000020 + CAP_EXTATTR_DELETE = 0x400000000001000 + CAP_EXTATTR_GET = 0x400000000002000 + CAP_EXTATTR_LIST = 0x400000000004000 + CAP_EXTATTR_SET = 0x400000000008000 + CAP_FCHDIR = 0x200000000000800 + CAP_FCHFLAGS = 0x200000000001000 + CAP_FCHMOD = 0x200000000002000 + CAP_FCHMODAT = 0x200000000002400 + CAP_FCHOWN = 0x200000000004000 + CAP_FCHOWNAT = 0x200000000004400 + CAP_FCNTL = 0x200000000008000 + CAP_FCNTL_ALL = 0x78 + CAP_FCNTL_GETFL = 0x8 + CAP_FCNTL_GETOWN = 0x20 + CAP_FCNTL_SETFL = 0x10 + CAP_FCNTL_SETOWN = 0x40 + CAP_FEXECVE = 0x200000000000080 + CAP_FLOCK = 0x200000000010000 + CAP_FPATHCONF = 0x200000000020000 + CAP_FSCK = 0x200000000040000 + CAP_FSTAT = 0x200000000080000 + CAP_FSTATAT = 0x200000000080400 + CAP_FSTATFS = 0x200000000100000 + CAP_FSYNC = 0x200000000000100 + CAP_FTRUNCATE = 0x200000000000200 + CAP_FUTIMES = 0x200000000200000 + CAP_FUTIMESAT = 0x200000000200400 + CAP_GETPEERNAME = 0x200000100000000 + CAP_GETSOCKNAME = 0x200000200000000 + CAP_GETSOCKOPT = 0x200000400000000 + CAP_IOCTL = 0x400000000000080 + CAP_IOCTLS_ALL = 0x7fffffffffffffff + CAP_KQUEUE = 0x400000000100040 + CAP_KQUEUE_CHANGE = 0x400000000100000 + CAP_KQUEUE_EVENT = 0x400000000000040 + CAP_LINKAT_SOURCE = 0x200020000000400 + CAP_LINKAT_TARGET = 0x200000000400400 + CAP_LISTEN = 0x200000800000000 + CAP_LOOKUP = 0x200000000000400 + CAP_MAC_GET = 0x400000000000001 + CAP_MAC_SET = 0x400000000000002 + CAP_MKDIRAT = 0x200000000800400 + CAP_MKFIFOAT = 0x200000001000400 + CAP_MKNODAT = 0x200000002000400 + CAP_MMAP = 0x200000000000010 + CAP_MMAP_R = 0x20000000000001d + CAP_MMAP_RW = 0x20000000000001f + CAP_MMAP_RWX = 0x20000000000003f + CAP_MMAP_RX = 0x20000000000003d + CAP_MMAP_W = 0x20000000000001e + CAP_MMAP_WX = 0x20000000000003e + CAP_MMAP_X = 0x20000000000003c + CAP_PDGETPID = 0x400000000000200 + CAP_PDKILL = 0x400000000000800 + CAP_PDWAIT = 0x400000000000400 + CAP_PEELOFF = 0x200001000000000 + CAP_POLL_EVENT = 0x400000000000020 + CAP_PREAD = 0x20000000000000d + CAP_PWRITE = 0x20000000000000e + CAP_READ = 0x200000000000001 + CAP_RECV = 0x200000000000001 + CAP_RENAMEAT_SOURCE = 0x200000004000400 + CAP_RENAMEAT_TARGET = 0x200040000000400 + CAP_RIGHTS_VERSION = 0x0 + CAP_RIGHTS_VERSION_00 = 0x0 + CAP_SEEK = 0x20000000000000c + CAP_SEEK_TELL = 0x200000000000004 + CAP_SEM_GETVALUE = 0x400000000000004 + CAP_SEM_POST = 0x400000000000008 + CAP_SEM_WAIT = 0x400000000000010 + CAP_SEND = 0x200000000000002 + CAP_SETSOCKOPT = 0x200002000000000 + CAP_SHUTDOWN = 0x200004000000000 + CAP_SOCK_CLIENT = 0x200007780000003 + CAP_SOCK_SERVER = 0x200007f60000003 + CAP_SYMLINKAT = 0x200000008000400 + CAP_TTYHOOK = 0x400000000000100 + CAP_UNLINKAT = 0x200000010000400 + CAP_UNUSED0_44 = 0x200080000000000 + CAP_UNUSED0_57 = 0x300000000000000 + CAP_UNUSED1_22 = 0x400000000200000 + CAP_UNUSED1_57 = 0x500000000000000 + CAP_WRITE = 0x200000000000002 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x4 + CLOCK_MONOTONIC_FAST = 0xc + CLOCK_MONOTONIC_PRECISE = 0xb + CLOCK_PROCESS_CPUTIME_ID = 0xf + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_FAST = 0xa + CLOCK_REALTIME_PRECISE = 0x9 + CLOCK_SECOND = 0xd + CLOCK_THREAD_CPUTIME_ID = 0xe + CLOCK_UPTIME = 0x5 + CLOCK_UPTIME_FAST = 0x8 + CLOCK_UPTIME_PRECISE = 0x7 + CLOCK_VIRTUAL = 0x1 + CPUSTATES = 0x5 + CP_IDLE = 0x4 + CP_INTR = 0x3 + CP_NICE = 0x1 + CP_SYS = 0x2 + CP_USER = 0x0 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0x18 + CTL_NET = 0x4 + DIOCGATTR = 0xc148648e + DIOCGDELETE = 0x80106488 + DIOCGFLUSH = 0x20006487 + DIOCGFRONTSTUFF = 0x40086486 + DIOCGFWHEADS = 0x40046483 + DIOCGFWSECTORS = 0x40046482 + DIOCGIDENT = 0x41006489 + DIOCGMEDIASIZE = 0x40086481 + DIOCGPHYSPATH = 0x4400648d + DIOCGPROVIDERNAME = 0x4400648a + DIOCGSECTORSIZE = 0x40046480 + DIOCGSTRIPEOFFSET = 0x4008648c + DIOCGSTRIPESIZE = 0x4008648b + DIOCSKERNELDUMP = 0x80506490 + DIOCSKERNELDUMP_FREEBSD11 = 0x80046485 + DIOCZONECMD = 0xc080648f + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_BREDR_BB = 0xff + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_BLUETOOTH_LE_LL = 0xfb + DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 + DLT_BLUETOOTH_LINUX_MONITOR = 0xfe + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_CLASS_NETBSD_RAWAF = 0x2240000 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DISPLAYPORT_AUX = 0x113 + DLT_DOCSIS = 0x8f + DLT_DOCSIS31_XRA31 = 0x111 + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_EPON = 0x103 + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_ETHERNET_MPACKET = 0x112 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_INFINIBAND = 0xf7 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPMI_HPM_2 = 0x104 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_ISO_14443 = 0x108 + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LORATAP = 0x10e + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0x113 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NETLINK = 0xfd + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NORDIC_BLE = 0x110 + DLT_NULL = 0x0 + DLT_OPENFLOW = 0x10b + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x79 + DLT_PKTAP = 0x102 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PROFIBUS_DL = 0x101 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RDS = 0x109 + DLT_REDBACK_SMARTEDGE = 0x20 + DLT_RIO = 0x7c + DLT_RTAC_SERIAL = 0xfa + DLT_SCCP = 0x8e + DLT_SCTP = 0xf8 + DLT_SDLC = 0x10c + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TI_LLN_SNIFFER = 0x10d + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USBPCAP = 0xf9 + DLT_USB_DARWIN = 0x10a + DLT_USB_FREEBSD = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_VSOCK = 0x10f + DLT_WATTSTOPPER_DLM = 0x107 + DLT_WIHART = 0xdf + DLT_WIRESHARK_UPPER_PDU = 0xfc + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DLT_ZWAVE_R1_R2 = 0x105 + DLT_ZWAVE_R3 = 0x106 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_EMPTY = -0xd + EVFILT_FS = -0x9 + EVFILT_LIO = -0xa + EVFILT_PROC = -0x5 + EVFILT_PROCDESC = -0x8 + EVFILT_READ = -0x1 + EVFILT_SENDFILE = -0xc + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xd + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xb + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EVNAMEMAP_NAME_SIZE = 0x40 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DROP = 0x1000 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_FLAG2 = 0x4000 + EV_FORCEONESHOT = 0x100 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_MAXNAMELEN = 0xff + EXTATTR_NAMESPACE_EMPTY = 0x0 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_CANCEL = 0x5 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xb + F_GETOWN = 0x5 + F_OGETLK = 0x7 + F_OK = 0x0 + F_OSETLK = 0x8 + F_OSETLKW = 0x9 + F_RDAHEAD = 0x10 + F_RDLCK = 0x1 + F_READAHEAD = 0xf + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0xc + F_SETLKW = 0xd + F_SETLK_REMOTE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_UNLCKSYS = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFCAP_WOL_MAGIC = 0x2000 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x218f52 + IFF_CANTCONFIG = 0x10000 + IFF_DEBUG = 0x4 + IFF_DRV_OACTIVE = 0x400 + IFF_DRV_RUNNING = 0x40 + IFF_DYING = 0x200000 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOGROUP = 0x800000 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RENAMING = 0x400000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_IEEE1394 = 0x90 + IFT_INFINIBAND = 0xc7 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_PPP = 0x17 + IFT_PROPVIRTUAL = 0x35 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_MASK = 0xfffffffe + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HIP = 0x8b + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MEAS = 0x13 + IPPROTO_MH = 0x87 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OLD_DIVERT = 0xfe + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_RESERVED_253 = 0xfd + IPPROTO_RESERVED_254 = 0xfe + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEND = 0x103 + IPPROTO_SEP = 0x21 + IPPROTO_SHIM6 = 0x8c + IPPROTO_SKIP = 0x39 + IPPROTO_SPACER = 0x7fff + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDANY = 0x40 + IPV6_BINDMULTI = 0x41 + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FLOWID = 0x43 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_LEN = 0x14 + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOWTYPE = 0x44 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_ORIGDSTADDR = 0x48 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVFLOWID = 0x46 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVORIGDSTADDR = 0x48 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRSSBUCKETID = 0x47 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RSSBUCKETID = 0x45 + IPV6_RSS_LISTEN_BUCKET = 0x42 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BINDANY = 0x18 + IP_BINDMULTI = 0x19 + IP_BLOCK_SOURCE = 0x48 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x43 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET3 = 0x31 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FLOWID = 0x5a + IP_FLOWTYPE = 0x5b + IP_FW3 = 0x30 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_NAT_CFG = 0x38 + IP_FW_NAT_DEL = 0x39 + IP_FW_NAT_GET_CONFIG = 0x3a + IP_FW_NAT_GET_LOG = 0x3b + IP_FW_RESETLOG = 0x37 + IP_FW_TABLE_ADD = 0x28 + IP_FW_TABLE_DEL = 0x29 + IP_FW_TABLE_FLUSH = 0x2a + IP_FW_TABLE_GETSIZE = 0x2b + IP_FW_TABLE_LIST = 0x2c + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_ONESBCAST = 0x17 + IP_OPTIONS = 0x1 + IP_ORIGDSTADDR = 0x1b + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVFLOWID = 0x5d + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVORIGDSTADDR = 0x1b + IP_RECVRETOPTS = 0x6 + IP_RECVRSSBUCKETID = 0x5e + IP_RECVTOS = 0x44 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSSBUCKETID = 0x5c + IP_RSS_LISTEN_BUCKET = 0x1a + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCAL_CONNWAIT = 0x4 + LOCAL_CREDS = 0x2 + LOCAL_CREDS_PERSISTENT = 0x3 + LOCAL_PEERCRED = 0x1 + LOCAL_VENDOR = 0x80000000 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_PROTECT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_32BIT = 0x80000 + MAP_ALIGNED_SUPER = 0x1000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_EXCL = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GUARD = 0x2000 + MAP_HASSEMAPHORE = 0x200 + MAP_NOCORE = 0x20000 + MAP_NOSYNC = 0x800 + MAP_PREFAULT_READ = 0x40000 + MAP_PRIVATE = 0x2 + MAP_RESERVED0020 = 0x20 + MAP_RESERVED0040 = 0x40 + MAP_RESERVED0080 = 0x80 + MAP_RESERVED0100 = 0x100 + MAP_SHARED = 0x1 + MAP_STACK = 0x400 + MCAST_BLOCK_SOURCE = 0x54 + MCAST_EXCLUDE = 0x2 + MCAST_INCLUDE = 0x1 + MCAST_JOIN_GROUP = 0x50 + MCAST_JOIN_SOURCE_GROUP = 0x52 + MCAST_LEAVE_GROUP = 0x51 + MCAST_LEAVE_SOURCE_GROUP = 0x53 + MCAST_UNBLOCK_SOURCE = 0x55 + MCAST_UNDEFINED = 0x0 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ACLS = 0x8000000 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x200000000 + MNT_BYFSID = 0x8000000 + MNT_CMDFLAGS = 0xd0f0000 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_EXKERB = 0x800 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXPUBLIC = 0x20000000 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_GJOURNAL = 0x2000000 + MNT_IGNORE = 0x800000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NFS4ACLS = 0x10 + MNT_NOATIME = 0x10000000 + MNT_NOCLUSTERR = 0x40000000 + MNT_NOCLUSTERW = 0x80000000 + MNT_NOEXEC = 0x4 + MNT_NONBUSY = 0x4000000 + MNT_NOSUID = 0x8 + MNT_NOSYMFOLLOW = 0x400000 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SNAPSHOT = 0x1000000 + MNT_SOFTDEP = 0x200000 + MNT_SUIDDIR = 0x100000 + MNT_SUJ = 0x100000000 + MNT_SUSPEND = 0x4 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UNTRUSTED = 0x800000000 + MNT_UPDATE = 0x10000 + MNT_UPDATEMASK = 0xad8d0807e + MNT_USER = 0x8000 + MNT_VERIFIED = 0x400000000 + MNT_VISFLAGMASK = 0xffef0ffff + MNT_WAIT = 0x1 + MSG_CMSG_CLOEXEC = 0x40000 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_NBIO = 0x4000 + MSG_NOSIGNAL = 0x20000 + MSG_NOTIFICATION = 0x2000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITFORONE = 0x80000 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLISTL = 0x5 + NET_RT_IFMALIST = 0x4 + NFDBITS = 0x40 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ABSTIME = 0x10 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_CLOSE = 0x100 + NOTE_CLOSE_WRITE = 0x200 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FILE_POLL = 0x2 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MSECONDS = 0x2 + NOTE_NSECONDS = 0x8 + NOTE_OPEN = 0x80 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_READ = 0x400 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x4 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x100000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x20000 + O_EXCL = 0x800 + O_EXEC = 0x40000 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_TTY_INIT = 0x80000 + O_VERIFY = 0x200000 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FIXEDMTU = 0x80000 + RTF_FMASK = 0x1004d808 + RTF_GATEWAY = 0x2 + RTF_GWFLAG_COMPAT = 0x80000000 + RTF_HOST = 0x4 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_RNH_LOCKED = 0x40000000 + RTF_STATIC = 0x800 + RTF_STICKY = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RTV_WEIGHT = 0x100 + RT_ALL_FIBS = -0x1 + RT_BLACKHOLE = 0x40 + RT_DEFAULT_FIB = 0x0 + RT_HAS_GW = 0x80 + RT_HAS_HEADER = 0x10 + RT_HAS_HEADER_BIT = 0x4 + RT_L2_ME = 0x4 + RT_L2_ME_BIT = 0x2 + RT_LLE_CACHE = 0x100 + RT_MAY_LOOP = 0x8 + RT_MAY_LOOP_BIT = 0x3 + RT_REJECT = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_BINTIME = 0x4 + SCM_CREDS = 0x3 + SCM_MONOTONIC = 0x6 + SCM_REALTIME = 0x5 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIME_INFO = 0x7 + SEEK_CUR = 0x1 + SEEK_DATA = 0x3 + SEEK_END = 0x2 + SEEK_HOLE = 0x4 + SEEK_SET = 0x0 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80286987 + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80286989 + SIOCDIFPHYADDR = 0x80206949 + SIOCGDRVSPEC = 0xc028697b + SIOCGETSGCNT = 0xc0207210 + SIOCGETVIFCNT = 0xc028720f + SIOCGHIWAT = 0x40047301 + SIOCGHWADDR = 0xc020693e + SIOCGI2C = 0xc020693d + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0106924 + SIOCGIFDESCR = 0xc020692a + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFIB = 0xc020695c + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc028698a + SIOCGIFGROUP = 0xc0286988 + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMAC = 0xc0206926 + SIOCGIFMEDIA = 0xc0306938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFRSSHASH = 0xc0186997 + SIOCGIFRSSKEY = 0xc0946996 + SIOCGIFSTATUS = 0xc331693b + SIOCGIFXMEDIA = 0xc030698b + SIOCGLANPCP = 0xc0206998 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCGTUNFIB = 0xc020695e + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106978 + SIOCSDRVSPEC = 0x8028697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDESCR = 0x80206929 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFIB = 0x8020695d + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206927 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFRVNET = 0xc020695b + SIOCSIFVNET = 0xc020695a + SIOCSLANPCP = 0x80206999 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSTUNFIB = 0x8020695f + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_LOCAL = 0x0 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BINTIME = 0x2000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DOMAIN = 0x1019 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1009 + SO_LINGER = 0x80 + SO_LISTENINCQLEN = 0x1013 + SO_LISTENQLEN = 0x1012 + SO_LISTENQLIMIT = 0x1011 + SO_MAX_PACING_RATE = 0x1018 + SO_NOSIGPIPE = 0x800 + SO_NO_DDP = 0x8000 + SO_NO_OFFLOAD = 0x4000 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1010 + SO_PROTOCOL = 0x1016 + SO_PROTOTYPE = 0x1016 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSEPORT_LB = 0x10000 + SO_SETFIB = 0x1014 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TS_BINTIME = 0x1 + SO_TS_CLOCK = 0x1017 + SO_TS_CLOCK_MAX = 0x3 + SO_TS_DEFAULT = 0x0 + SO_TS_MONOTONIC = 0x3 + SO_TS_REALTIME = 0x2 + SO_TS_REALTIME_MICRO = 0x0 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USER_COOKIE = 0x1015 + SO_VENDOR = 0x80000000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB3 = 0x4 + TABDLY = 0x4 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_BBR_ACK_COMP_ALG = 0x448 + TCP_BBR_DRAIN_INC_EXTRA = 0x43c + TCP_BBR_DRAIN_PG = 0x42e + TCP_BBR_EXTRA_GAIN = 0x449 + TCP_BBR_IWINTSO = 0x42b + TCP_BBR_LOWGAIN_FD = 0x436 + TCP_BBR_LOWGAIN_HALF = 0x435 + TCP_BBR_LOWGAIN_THRESH = 0x434 + TCP_BBR_MAX_RTO = 0x439 + TCP_BBR_MIN_RTO = 0x438 + TCP_BBR_ONE_RETRAN = 0x431 + TCP_BBR_PACE_CROSS = 0x442 + TCP_BBR_PACE_DEL_TAR = 0x43f + TCP_BBR_PACE_PER_SEC = 0x43e + TCP_BBR_PACE_SEG_MAX = 0x440 + TCP_BBR_PACE_SEG_MIN = 0x441 + TCP_BBR_PROBE_RTT_GAIN = 0x44d + TCP_BBR_PROBE_RTT_INT = 0x430 + TCP_BBR_PROBE_RTT_LEN = 0x44e + TCP_BBR_RACK_RTT_USE = 0x44a + TCP_BBR_RECFORCE = 0x42c + TCP_BBR_REC_OVER_HPTS = 0x43a + TCP_BBR_RETRAN_WTSO = 0x44b + TCP_BBR_RWND_IS_APP = 0x42f + TCP_BBR_STARTUP_EXIT_EPOCH = 0x43d + TCP_BBR_STARTUP_LOSS_EXIT = 0x432 + TCP_BBR_STARTUP_PG = 0x42d + TCP_BBR_UNLIMITED = 0x43b + TCP_BBR_USEDEL_RATE = 0x437 + TCP_BBR_USE_LOWGAIN = 0x433 + TCP_CA_NAME_MAX = 0x10 + TCP_CCALGOOPT = 0x41 + TCP_CONGESTION = 0x40 + TCP_DATA_AFTER_CLOSE = 0x44c + TCP_DELACK = 0x48 + TCP_FASTOPEN = 0x401 + TCP_FASTOPEN_MAX_COOKIE_LEN = 0x10 + TCP_FASTOPEN_MIN_COOKIE_LEN = 0x4 + TCP_FASTOPEN_PSK_LEN = 0x10 + TCP_FUNCTION_BLK = 0x2000 + TCP_FUNCTION_NAME_LEN_MAX = 0x20 + TCP_INFO = 0x20 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x80 + TCP_KEEPINTVL = 0x200 + TCP_LOG = 0x22 + TCP_LOGBUF = 0x23 + TCP_LOGDUMP = 0x25 + TCP_LOGDUMPID = 0x26 + TCP_LOGID = 0x24 + TCP_LOG_ID_LEN = 0x40 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_PCAP_IN = 0x1000 + TCP_PCAP_OUT = 0x800 + TCP_RACK_EARLY_RECOV = 0x423 + TCP_RACK_EARLY_SEG = 0x424 + TCP_RACK_IDLE_REDUCE_HIGH = 0x444 + TCP_RACK_MIN_PACE = 0x445 + TCP_RACK_MIN_PACE_SEG = 0x446 + TCP_RACK_MIN_TO = 0x422 + TCP_RACK_PACE_ALWAYS = 0x41f + TCP_RACK_PACE_MAX_SEG = 0x41e + TCP_RACK_PACE_REDUCE = 0x41d + TCP_RACK_PKT_DELAY = 0x428 + TCP_RACK_PROP = 0x41b + TCP_RACK_PROP_RATE = 0x420 + TCP_RACK_PRR_SENDALOT = 0x421 + TCP_RACK_REORD_FADE = 0x426 + TCP_RACK_REORD_THRESH = 0x425 + TCP_RACK_SESS_CWV = 0x42a + TCP_RACK_TLP_INC_VAR = 0x429 + TCP_RACK_TLP_REDUCE = 0x41c + TCP_RACK_TLP_THRESH = 0x427 + TCP_RACK_TLP_USE = 0x447 + TCP_VENDOR = 0x80000000 + TCSAFLUSH = 0x2 + TIMER_ABSTIME = 0x1 + TIMER_RELTIME = 0x0 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGPTN = 0x4004740f + TIOCGSID = 0x40047463 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DCD = 0x40 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMASTER = 0x2000741c + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + UTIME_NOW = -0x1 + UTIME_OMIT = -0x2 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VM_BCACHE_SIZE_MAX = 0x19000000 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WEXITED = 0x10 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WNOWAIT = 0x8 + WSTOPPED = 0x2 + WTRAPPED = 0x20 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x59) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x55) + ECAPMODE = syscall.Errno(0x5e) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOOFUS = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x56) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5a) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x57) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCAPABLE = syscall.Errno(0x5d) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x5f) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x60) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5c) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGLIBRT = syscall.Signal(0x21) + SIGLWP = syscall.Signal(0x20) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disc quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC prog. not avail"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIDRM", "identifier removed"}, + {83, "ENOMSG", "no message of desired type"}, + {84, "EOVERFLOW", "value too large to be stored in data type"}, + {85, "ECANCELED", "operation canceled"}, + {86, "EILSEQ", "illegal byte sequence"}, + {87, "ENOATTR", "attribute not found"}, + {88, "EDOOFUS", "programming error"}, + {89, "EBADMSG", "bad message"}, + {90, "EMULTIHOP", "multihop attempted"}, + {91, "ENOLINK", "link has been severed"}, + {92, "EPROTO", "protocol error"}, + {93, "ENOTCAPABLE", "capabilities insufficient"}, + {94, "ECAPMODE", "not permitted in capability mode"}, + {95, "ENOTRECOVERABLE", "state not recoverable"}, + {96, "EOWNERDEAD", "previous owner died"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGIOT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGTHR", "unknown signal"}, + {33, "SIGLIBRT", "unknown signal"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go new file mode 100644 index 0000000..3de79fa --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -0,0 +1,3083 @@ +// Code generated by mkmerge; DO NOT EDIT. + +//go:build linux +// +build linux + +package unix + +import "syscall" + +const ( + AAFS_MAGIC = 0x5a3c69f0 + ADFS_SUPER_MAGIC = 0xadf5 + AFFS_SUPER_MAGIC = 0xadff + AFS_FS_MAGIC = 0x6b414653 + AFS_SUPER_MAGIC = 0x5346414f + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2e + AF_MCTP = 0x2d + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + AF_XDP = 0x2c + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_DRBG_ENTROPY = 0x6 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ANON_INODE_FS_MAGIC = 0x9041934 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_MCTP = 0x122 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + AUTOFS_SUPER_MAGIC = 0x187 + B0 = 0x0 + B110 = 0x3 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2400 = 0xb + B300 = 0x7 + B38400 = 0xf + B4800 = 0xc + B50 = 0x1 + B600 = 0x8 + B75 = 0x2 + B9600 = 0xd + BALLOON_KVM_MAGIC = 0x13661366 + BDEVFS_MAGIC = 0x62646576 + BINDERFS_SUPER_MAGIC = 0x6c6f6f70 + BINFMTFS_MAGIC = 0x42494e4d + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_ALU64 = 0x7 + BPF_AND = 0x50 + BPF_ARSH = 0xc0 + BPF_ATOMIC = 0xc0 + BPF_B = 0x10 + BPF_BUILD_ID_SIZE = 0x14 + BPF_CALL = 0x80 + BPF_CMPXCHG = 0xf1 + BPF_DIV = 0x30 + BPF_DW = 0x18 + BPF_END = 0xd0 + BPF_EXIT = 0x90 + BPF_FETCH = 0x1 + BPF_FROM_BE = 0x8 + BPF_FROM_LE = 0x0 + BPF_FS_MAGIC = 0xcafe4a11 + BPF_F_ALLOW_MULTI = 0x2 + BPF_F_ALLOW_OVERRIDE = 0x1 + BPF_F_ANY_ALIGNMENT = 0x2 + BPF_F_QUERY_EFFECTIVE = 0x1 + BPF_F_REPLACE = 0x4 + BPF_F_SLEEPABLE = 0x10 + BPF_F_STRICT_ALIGNMENT = 0x1 + BPF_F_TEST_RND_HI32 = 0x4 + BPF_F_TEST_RUN_ON_CPU = 0x1 + BPF_F_TEST_STATE_FREQ = 0x8 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JLE = 0xb0 + BPF_JLT = 0xa0 + BPF_JMP = 0x5 + BPF_JMP32 = 0x6 + BPF_JNE = 0x50 + BPF_JSET = 0x40 + BPF_JSGE = 0x70 + BPF_JSGT = 0x60 + BPF_JSLE = 0xd0 + BPF_JSLT = 0xc0 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MOV = 0xb0 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OBJ_NAME_LEN = 0x10 + BPF_OR = 0x40 + BPF_PSEUDO_BTF_ID = 0x3 + BPF_PSEUDO_CALL = 0x1 + BPF_PSEUDO_FUNC = 0x4 + BPF_PSEUDO_KFUNC_CALL = 0x2 + BPF_PSEUDO_MAP_FD = 0x1 + BPF_PSEUDO_MAP_IDX = 0x5 + BPF_PSEUDO_MAP_IDX_VALUE = 0x6 + BPF_PSEUDO_MAP_VALUE = 0x2 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAG_SIZE = 0x8 + BPF_TAX = 0x0 + BPF_TO_BE = 0x8 + BPF_TO_LE = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XADD = 0xc0 + BPF_XCHG = 0xe1 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BTRFS_SUPER_MAGIC = 0x9123683e + BTRFS_TEST_MAGIC = 0x73727279 + BUS_BLUETOOTH = 0x5 + BUS_HIL = 0x4 + BUS_USB = 0x3 + BUS_VIRTUAL = 0x6 + CAN_BCM = 0x2 + CAN_CTRLMODE_3_SAMPLES = 0x4 + CAN_CTRLMODE_BERR_REPORTING = 0x10 + CAN_CTRLMODE_CC_LEN8_DLC = 0x100 + CAN_CTRLMODE_FD = 0x20 + CAN_CTRLMODE_FD_NON_ISO = 0x80 + CAN_CTRLMODE_LISTENONLY = 0x2 + CAN_CTRLMODE_LOOPBACK = 0x1 + CAN_CTRLMODE_ONE_SHOT = 0x8 + CAN_CTRLMODE_PRESUME_ACK = 0x40 + CAN_CTRLMODE_TDC_AUTO = 0x200 + CAN_CTRLMODE_TDC_MANUAL = 0x400 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_ACK = 0x20 + CAN_ERR_BUSERROR = 0x80 + CAN_ERR_BUSOFF = 0x40 + CAN_ERR_CRTL = 0x4 + CAN_ERR_CRTL_ACTIVE = 0x40 + CAN_ERR_CRTL_RX_OVERFLOW = 0x1 + CAN_ERR_CRTL_RX_PASSIVE = 0x10 + CAN_ERR_CRTL_RX_WARNING = 0x4 + CAN_ERR_CRTL_TX_OVERFLOW = 0x2 + CAN_ERR_CRTL_TX_PASSIVE = 0x20 + CAN_ERR_CRTL_TX_WARNING = 0x8 + CAN_ERR_CRTL_UNSPEC = 0x0 + CAN_ERR_DLC = 0x8 + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_LOSTARB = 0x2 + CAN_ERR_LOSTARB_UNSPEC = 0x0 + CAN_ERR_MASK = 0x1fffffff + CAN_ERR_PROT = 0x8 + CAN_ERR_PROT_ACTIVE = 0x40 + CAN_ERR_PROT_BIT = 0x1 + CAN_ERR_PROT_BIT0 = 0x8 + CAN_ERR_PROT_BIT1 = 0x10 + CAN_ERR_PROT_FORM = 0x2 + CAN_ERR_PROT_LOC_ACK = 0x19 + CAN_ERR_PROT_LOC_ACK_DEL = 0x1b + CAN_ERR_PROT_LOC_CRC_DEL = 0x18 + CAN_ERR_PROT_LOC_CRC_SEQ = 0x8 + CAN_ERR_PROT_LOC_DATA = 0xa + CAN_ERR_PROT_LOC_DLC = 0xb + CAN_ERR_PROT_LOC_EOF = 0x1a + CAN_ERR_PROT_LOC_ID04_00 = 0xe + CAN_ERR_PROT_LOC_ID12_05 = 0xf + CAN_ERR_PROT_LOC_ID17_13 = 0x7 + CAN_ERR_PROT_LOC_ID20_18 = 0x6 + CAN_ERR_PROT_LOC_ID28_21 = 0x2 + CAN_ERR_PROT_LOC_IDE = 0x5 + CAN_ERR_PROT_LOC_INTERM = 0x12 + CAN_ERR_PROT_LOC_RES0 = 0x9 + CAN_ERR_PROT_LOC_RES1 = 0xd + CAN_ERR_PROT_LOC_RTR = 0xc + CAN_ERR_PROT_LOC_SOF = 0x3 + CAN_ERR_PROT_LOC_SRTR = 0x4 + CAN_ERR_PROT_LOC_UNSPEC = 0x0 + CAN_ERR_PROT_OVERLOAD = 0x20 + CAN_ERR_PROT_STUFF = 0x4 + CAN_ERR_PROT_TX = 0x80 + CAN_ERR_PROT_UNSPEC = 0x0 + CAN_ERR_RESTARTED = 0x100 + CAN_ERR_TRX = 0x10 + CAN_ERR_TRX_CANH_NO_WIRE = 0x4 + CAN_ERR_TRX_CANH_SHORT_TO_BAT = 0x5 + CAN_ERR_TRX_CANH_SHORT_TO_GND = 0x7 + CAN_ERR_TRX_CANH_SHORT_TO_VCC = 0x6 + CAN_ERR_TRX_CANL_NO_WIRE = 0x40 + CAN_ERR_TRX_CANL_SHORT_TO_BAT = 0x50 + CAN_ERR_TRX_CANL_SHORT_TO_CANH = 0x80 + CAN_ERR_TRX_CANL_SHORT_TO_GND = 0x70 + CAN_ERR_TRX_CANL_SHORT_TO_VCC = 0x60 + CAN_ERR_TRX_UNSPEC = 0x0 + CAN_ERR_TX_TIMEOUT = 0x1 + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_J1939 = 0x7 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MAX_RAW_DLC = 0xf + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x8 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TERMINATION_DISABLED = 0x0 + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CAP_AUDIT_CONTROL = 0x1e + CAP_AUDIT_READ = 0x25 + CAP_AUDIT_WRITE = 0x1d + CAP_BLOCK_SUSPEND = 0x24 + CAP_BPF = 0x27 + CAP_CHECKPOINT_RESTORE = 0x28 + CAP_CHOWN = 0x0 + CAP_DAC_OVERRIDE = 0x1 + CAP_DAC_READ_SEARCH = 0x2 + CAP_FOWNER = 0x3 + CAP_FSETID = 0x4 + CAP_IPC_LOCK = 0xe + CAP_IPC_OWNER = 0xf + CAP_KILL = 0x5 + CAP_LAST_CAP = 0x28 + CAP_LEASE = 0x1c + CAP_LINUX_IMMUTABLE = 0x9 + CAP_MAC_ADMIN = 0x21 + CAP_MAC_OVERRIDE = 0x20 + CAP_MKNOD = 0x1b + CAP_NET_ADMIN = 0xc + CAP_NET_BIND_SERVICE = 0xa + CAP_NET_BROADCAST = 0xb + CAP_NET_RAW = 0xd + CAP_PERFMON = 0x26 + CAP_SETFCAP = 0x1f + CAP_SETGID = 0x6 + CAP_SETPCAP = 0x8 + CAP_SETUID = 0x7 + CAP_SYSLOG = 0x22 + CAP_SYS_ADMIN = 0x15 + CAP_SYS_BOOT = 0x16 + CAP_SYS_CHROOT = 0x12 + CAP_SYS_MODULE = 0x10 + CAP_SYS_NICE = 0x17 + CAP_SYS_PACCT = 0x14 + CAP_SYS_PTRACE = 0x13 + CAP_SYS_RAWIO = 0x11 + CAP_SYS_RESOURCE = 0x18 + CAP_SYS_TIME = 0x19 + CAP_SYS_TTY_CONFIG = 0x1a + CAP_WAKE_ALARM = 0x23 + CEPH_SUPER_MAGIC = 0xc36400 + CFLUSH = 0xf + CGROUP2_SUPER_MAGIC = 0x63677270 + CGROUP_SUPER_MAGIC = 0x27e0eb + CIFS_SUPER_MAGIC = 0xff534d42 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_ARGS_SIZE_VER0 = 0x40 + CLONE_ARGS_SIZE_VER1 = 0x50 + CLONE_ARGS_SIZE_VER2 = 0x58 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_CLEAR_SIGHAND = 0x100000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_INTO_CGROUP = 0x200000000 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWTIME = 0x80 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PIDFD = 0x1000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CODA_SUPER_MAGIC = 0x73757245 + CR0 = 0x0 + CRAMFS_MAGIC = 0x28cd3d45 + CRTSCTS = 0x80000000 + CRYPTO_MAX_NAME = 0x40 + CRYPTO_MSG_MAX = 0x15 + CRYPTO_NR_MSGTYPES = 0x6 + CRYPTO_REPORT_MAXSIZE = 0x160 + CS5 = 0x0 + CSIGNAL = 0xff + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSUSP = 0x1a + DAXFS_MAGIC = 0x64646178 + DEBUGFS_MAGIC = 0x64626720 + DEVLINK_CMD_ESWITCH_MODE_GET = 0x1d + DEVLINK_CMD_ESWITCH_MODE_SET = 0x1e + DEVLINK_FLASH_OVERWRITE_IDENTIFIERS = 0x2 + DEVLINK_FLASH_OVERWRITE_SETTINGS = 0x1 + DEVLINK_GENL_MCGRP_CONFIG_NAME = "config" + DEVLINK_GENL_NAME = "devlink" + DEVLINK_GENL_VERSION = 0x1 + DEVLINK_SB_THRESHOLD_TO_ALPHA_MAX = 0x14 + DEVLINK_SUPPORTED_FLASH_OVERWRITE_SECTIONS = 0x3 + DEVMEM_MAGIC = 0x454d444d + DEVPTS_SUPER_MAGIC = 0x1cd1 + DMA_BUF_MAGIC = 0x444d4142 + DM_ACTIVE_PRESENT_FLAG = 0x20 + DM_BUFFER_FULL_FLAG = 0x100 + DM_CONTROL_NODE = "control" + DM_DATA_OUT_FLAG = 0x10000 + DM_DEFERRED_REMOVE = 0x20000 + DM_DEV_ARM_POLL = 0xc138fd10 + DM_DEV_CREATE = 0xc138fd03 + DM_DEV_REMOVE = 0xc138fd04 + DM_DEV_RENAME = 0xc138fd05 + DM_DEV_SET_GEOMETRY = 0xc138fd0f + DM_DEV_STATUS = 0xc138fd07 + DM_DEV_SUSPEND = 0xc138fd06 + DM_DEV_WAIT = 0xc138fd08 + DM_DIR = "mapper" + DM_GET_TARGET_VERSION = 0xc138fd11 + DM_IMA_MEASUREMENT_FLAG = 0x80000 + DM_INACTIVE_PRESENT_FLAG = 0x40 + DM_INTERNAL_SUSPEND_FLAG = 0x40000 + DM_IOCTL = 0xfd + DM_LIST_DEVICES = 0xc138fd02 + DM_LIST_VERSIONS = 0xc138fd0d + DM_MAX_TYPE_NAME = 0x10 + DM_NAME_LEN = 0x80 + DM_NAME_LIST_FLAG_DOESNT_HAVE_UUID = 0x2 + DM_NAME_LIST_FLAG_HAS_UUID = 0x1 + DM_NOFLUSH_FLAG = 0x800 + DM_PERSISTENT_DEV_FLAG = 0x8 + DM_QUERY_INACTIVE_TABLE_FLAG = 0x1000 + DM_READONLY_FLAG = 0x1 + DM_REMOVE_ALL = 0xc138fd01 + DM_SECURE_DATA_FLAG = 0x8000 + DM_SKIP_BDGET_FLAG = 0x200 + DM_SKIP_LOCKFS_FLAG = 0x400 + DM_STATUS_TABLE_FLAG = 0x10 + DM_SUSPEND_FLAG = 0x2 + DM_TABLE_CLEAR = 0xc138fd0a + DM_TABLE_DEPS = 0xc138fd0b + DM_TABLE_LOAD = 0xc138fd09 + DM_TABLE_STATUS = 0xc138fd0c + DM_TARGET_MSG = 0xc138fd0e + DM_UEVENT_GENERATED_FLAG = 0x2000 + DM_UUID_FLAG = 0x4000 + DM_UUID_LEN = 0x81 + DM_VERSION = 0xc138fd00 + DM_VERSION_EXTRA = "-ioctl (2021-03-22)" + DM_VERSION_MAJOR = 0x4 + DM_VERSION_MINOR = 0x2d + DM_VERSION_PATCHLEVEL = 0x0 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECRYPTFS_SUPER_MAGIC = 0xf15f + EFD_SEMAPHORE = 0x1 + EFIVARFS_MAGIC = 0xde5e81e4 + EFS_SUPER_MAGIC = 0x414a53 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + 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_FEC_AUTO = 0x2 + ETHTOOL_FEC_BASER = 0x10 + ETHTOOL_FEC_LLRS = 0x20 + ETHTOOL_FEC_NONE = 0x1 + ETHTOOL_FEC_OFF = 0x4 + ETHTOOL_FEC_RS = 0x8 + ETHTOOL_FLAG_ALL = 0x7 + ETHTOOL_FLAG_COMPACT_BITSETS = 0x1 + ETHTOOL_FLAG_OMIT_REPLY = 0x2 + ETHTOOL_FLAG_STATS = 0x4 + ETHTOOL_FLASHDEV = 0x33 + ETHTOOL_FLASH_MAX_FILENAME = 0x80 + ETHTOOL_FWVERS_LEN = 0x20 + ETHTOOL_F_COMPAT = 0x4 + ETHTOOL_F_UNSUPPORTED = 0x1 + ETHTOOL_F_WISH = 0x2 + ETHTOOL_GCHANNELS = 0x3c + ETHTOOL_GCOALESCE = 0xe + ETHTOOL_GDRVINFO = 0x3 + ETHTOOL_GEEE = 0x44 + ETHTOOL_GEEPROM = 0xb + ETHTOOL_GENL_NAME = "ethtool" + ETHTOOL_GENL_VERSION = 0x1 + ETHTOOL_GET_DUMP_DATA = 0x40 + ETHTOOL_GET_DUMP_FLAG = 0x3f + ETHTOOL_GET_TS_INFO = 0x41 + ETHTOOL_GFEATURES = 0x3a + ETHTOOL_GFECPARAM = 0x50 + ETHTOOL_GFLAGS = 0x25 + ETHTOOL_GGRO = 0x2b + ETHTOOL_GGSO = 0x23 + ETHTOOL_GLINK = 0xa + ETHTOOL_GLINKSETTINGS = 0x4c + ETHTOOL_GMODULEEEPROM = 0x43 + ETHTOOL_GMODULEINFO = 0x42 + ETHTOOL_GMSGLVL = 0x7 + ETHTOOL_GPAUSEPARAM = 0x12 + ETHTOOL_GPERMADDR = 0x20 + ETHTOOL_GPFLAGS = 0x27 + ETHTOOL_GPHYSTATS = 0x4a + ETHTOOL_GREGS = 0x4 + ETHTOOL_GRINGPARAM = 0x10 + ETHTOOL_GRSSH = 0x46 + ETHTOOL_GRXCLSRLALL = 0x30 + ETHTOOL_GRXCLSRLCNT = 0x2e + ETHTOOL_GRXCLSRULE = 0x2f + ETHTOOL_GRXCSUM = 0x14 + ETHTOOL_GRXFH = 0x29 + ETHTOOL_GRXFHINDIR = 0x38 + ETHTOOL_GRXNTUPLE = 0x36 + ETHTOOL_GRXRINGS = 0x2d + ETHTOOL_GSET = 0x1 + ETHTOOL_GSG = 0x18 + ETHTOOL_GSSET_INFO = 0x37 + ETHTOOL_GSTATS = 0x1d + ETHTOOL_GSTRINGS = 0x1b + ETHTOOL_GTSO = 0x1e + ETHTOOL_GTUNABLE = 0x48 + ETHTOOL_GTXCSUM = 0x16 + ETHTOOL_GUFO = 0x21 + ETHTOOL_GWOL = 0x5 + ETHTOOL_MCGRP_MONITOR_NAME = "monitor" + ETHTOOL_NWAY_RST = 0x9 + ETHTOOL_PERQUEUE = 0x4b + ETHTOOL_PHYS_ID = 0x1c + ETHTOOL_PHY_EDPD_DFLT_TX_MSECS = 0xffff + ETHTOOL_PHY_EDPD_DISABLE = 0x0 + ETHTOOL_PHY_EDPD_NO_TX = 0xfffe + ETHTOOL_PHY_FAST_LINK_DOWN_OFF = 0xff + ETHTOOL_PHY_FAST_LINK_DOWN_ON = 0x0 + ETHTOOL_PHY_GTUNABLE = 0x4e + ETHTOOL_PHY_STUNABLE = 0x4f + ETHTOOL_RESET = 0x34 + ETHTOOL_RXNTUPLE_ACTION_CLEAR = -0x2 + ETHTOOL_RXNTUPLE_ACTION_DROP = -0x1 + ETHTOOL_RX_FLOW_SPEC_RING = 0xffffffff + ETHTOOL_RX_FLOW_SPEC_RING_VF = 0xff00000000 + ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF = 0x20 + ETHTOOL_SCHANNELS = 0x3d + ETHTOOL_SCOALESCE = 0xf + ETHTOOL_SEEE = 0x45 + ETHTOOL_SEEPROM = 0xc + ETHTOOL_SET_DUMP = 0x3e + ETHTOOL_SFEATURES = 0x3b + ETHTOOL_SFECPARAM = 0x51 + ETHTOOL_SFLAGS = 0x26 + ETHTOOL_SGRO = 0x2c + ETHTOOL_SGSO = 0x24 + ETHTOOL_SLINKSETTINGS = 0x4d + ETHTOOL_SMSGLVL = 0x8 + ETHTOOL_SPAUSEPARAM = 0x13 + ETHTOOL_SPFLAGS = 0x28 + ETHTOOL_SRINGPARAM = 0x11 + ETHTOOL_SRSSH = 0x47 + ETHTOOL_SRXCLSRLDEL = 0x31 + ETHTOOL_SRXCLSRLINS = 0x32 + ETHTOOL_SRXCSUM = 0x15 + ETHTOOL_SRXFH = 0x2a + ETHTOOL_SRXFHINDIR = 0x39 + ETHTOOL_SRXNTUPLE = 0x35 + ETHTOOL_SSET = 0x2 + ETHTOOL_SSG = 0x19 + ETHTOOL_STSO = 0x1f + ETHTOOL_STUNABLE = 0x49 + ETHTOOL_STXCSUM = 0x17 + ETHTOOL_SUFO = 0x22 + ETHTOOL_SWOL = 0x6 + ETHTOOL_TEST = 0x1a + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CFM = 0x8902 + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_DSA_8021Q = 0xdadb + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be + ETH_P_ERSPAN2 = 0x22eb + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LLDP = 0x88cc + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 + ETH_P_MCTP = 0xfa + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MRP = 0x88e3 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PREAUTH = 0x88c7 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_REALTEK = 0x8899 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EV_ABS = 0x3 + EV_CNT = 0x20 + EV_FF = 0x15 + EV_FF_STATUS = 0x17 + EV_KEY = 0x1 + EV_LED = 0x11 + EV_MAX = 0x1f + EV_MSC = 0x4 + EV_PWR = 0x16 + EV_REL = 0x2 + EV_REP = 0x14 + EV_SND = 0x12 + EV_SW = 0x5 + EV_SYN = 0x0 + EV_VERSION = 0x10001 + EXABYTE_ENABLE_NEST = 0xf0 + EXFAT_SUPER_MAGIC = 0x2011bab0 + EXT2_SUPER_MAGIC = 0xef53 + EXT3_SUPER_MAGIC = 0xef53 + EXT4_SUPER_MAGIC = 0xef53 + EXTA = 0xe + EXTB = 0xf + F2FS_SUPER_MAGIC = 0xf2f52010 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FANOTIFY_METADATA_VERSION = 0x3 + FAN_ACCESS = 0x1 + FAN_ACCESS_PERM = 0x20000 + FAN_ALLOW = 0x1 + FAN_ALL_CLASS_BITS = 0xc + FAN_ALL_EVENTS = 0x3b + FAN_ALL_INIT_FLAGS = 0x3f + FAN_ALL_MARK_FLAGS = 0xff + FAN_ALL_OUTGOING_EVENTS = 0x3403b + FAN_ALL_PERM_EVENTS = 0x30000 + FAN_ATTRIB = 0x4 + FAN_AUDIT = 0x10 + FAN_CLASS_CONTENT = 0x4 + FAN_CLASS_NOTIF = 0x0 + FAN_CLASS_PRE_CONTENT = 0x8 + FAN_CLOEXEC = 0x1 + FAN_CLOSE = 0x18 + FAN_CLOSE_NOWRITE = 0x10 + FAN_CLOSE_WRITE = 0x8 + FAN_CREATE = 0x100 + FAN_DELETE = 0x200 + FAN_DELETE_SELF = 0x400 + FAN_DENY = 0x2 + FAN_ENABLE_AUDIT = 0x40 + FAN_EPIDFD = -0x2 + 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_NEW_DFID_NAME = 0xc + FAN_EVENT_INFO_TYPE_OLD_DFID_NAME = 0xa + FAN_EVENT_INFO_TYPE_PIDFD = 0x4 + FAN_EVENT_METADATA_LEN = 0x18 + FAN_EVENT_ON_CHILD = 0x8000000 + FAN_FS_ERROR = 0x8000 + FAN_MARK_ADD = 0x1 + FAN_MARK_DONT_FOLLOW = 0x4 + FAN_MARK_FILESYSTEM = 0x100 + FAN_MARK_FLUSH = 0x80 + FAN_MARK_IGNORED_MASK = 0x20 + FAN_MARK_IGNORED_SURV_MODIFY = 0x40 + FAN_MARK_INODE = 0x0 + FAN_MARK_MOUNT = 0x10 + FAN_MARK_ONLYDIR = 0x8 + FAN_MARK_REMOVE = 0x2 + FAN_MODIFY = 0x2 + FAN_MOVE = 0xc0 + FAN_MOVED_FROM = 0x40 + FAN_MOVED_TO = 0x80 + FAN_MOVE_SELF = 0x800 + FAN_NOFD = -0x1 + FAN_NONBLOCK = 0x2 + FAN_NOPIDFD = -0x1 + FAN_ONDIR = 0x40000000 + FAN_OPEN = 0x20 + FAN_OPEN_EXEC = 0x1000 + FAN_OPEN_EXEC_PERM = 0x40000 + FAN_OPEN_PERM = 0x10000 + FAN_Q_OVERFLOW = 0x4000 + FAN_RENAME = 0x10000000 + FAN_REPORT_DFID_NAME = 0xc00 + FAN_REPORT_DFID_NAME_TARGET = 0x1e00 + FAN_REPORT_DIR_FID = 0x400 + FAN_REPORT_FID = 0x200 + FAN_REPORT_NAME = 0x800 + FAN_REPORT_PIDFD = 0x80 + FAN_REPORT_TARGET_FID = 0x1000 + FAN_REPORT_TID = 0x100 + FAN_UNLIMITED_MARKS = 0x20 + FAN_UNLIMITED_QUEUE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FIB_RULE_DEV_DETACHED = 0x8 + FIB_RULE_FIND_SADDR = 0x10000 + FIB_RULE_IIF_DETACHED = 0x8 + FIB_RULE_INVERT = 0x2 + FIB_RULE_OIF_DETACHED = 0x10 + FIB_RULE_PERMANENT = 0x1 + FIB_RULE_UNRESOLVED = 0x4 + FIDEDUPERANGE = 0xc0189436 + FSCRYPT_KEY_DESCRIPTOR_SIZE = 0x8 + FSCRYPT_KEY_DESC_PREFIX = "fscrypt:" + FSCRYPT_KEY_DESC_PREFIX_SIZE = 0x8 + FSCRYPT_KEY_IDENTIFIER_SIZE = 0x10 + FSCRYPT_KEY_REMOVAL_STATUS_FLAG_FILES_BUSY = 0x1 + FSCRYPT_KEY_REMOVAL_STATUS_FLAG_OTHER_USERS = 0x2 + FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR = 0x1 + FSCRYPT_KEY_SPEC_TYPE_IDENTIFIER = 0x2 + FSCRYPT_KEY_STATUS_ABSENT = 0x1 + FSCRYPT_KEY_STATUS_FLAG_ADDED_BY_SELF = 0x1 + FSCRYPT_KEY_STATUS_INCOMPLETELY_REMOVED = 0x3 + FSCRYPT_KEY_STATUS_PRESENT = 0x2 + FSCRYPT_MAX_KEY_SIZE = 0x40 + FSCRYPT_MODE_ADIANTUM = 0x9 + FSCRYPT_MODE_AES_128_CBC = 0x5 + FSCRYPT_MODE_AES_128_CTS = 0x6 + FSCRYPT_MODE_AES_256_CTS = 0x4 + FSCRYPT_MODE_AES_256_XTS = 0x1 + FSCRYPT_POLICY_FLAGS_PAD_16 = 0x2 + FSCRYPT_POLICY_FLAGS_PAD_32 = 0x3 + FSCRYPT_POLICY_FLAGS_PAD_4 = 0x0 + FSCRYPT_POLICY_FLAGS_PAD_8 = 0x1 + FSCRYPT_POLICY_FLAGS_PAD_MASK = 0x3 + FSCRYPT_POLICY_FLAG_DIRECT_KEY = 0x4 + FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32 = 0x10 + FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64 = 0x8 + FSCRYPT_POLICY_V1 = 0x0 + FSCRYPT_POLICY_V2 = 0x2 + FS_ENCRYPTION_MODE_ADIANTUM = 0x9 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8 + FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7 + FS_IOC_ADD_ENCRYPTION_KEY = 0xc0506617 + FS_IOC_GET_ENCRYPTION_KEY_STATUS = 0xc080661a + FS_IOC_GET_ENCRYPTION_POLICY_EX = 0xc0096616 + FS_IOC_MEASURE_VERITY = 0xc0046686 + FS_IOC_READ_VERITY_METADATA = 0xc0286687 + FS_IOC_REMOVE_ENCRYPTION_KEY = 0xc0406618 + FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS = 0xc0406619 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x7 + FS_VERITY_FL = 0x100000 + FS_VERITY_HASH_ALG_SHA256 = 0x1 + FS_VERITY_HASH_ALG_SHA512 = 0x2 + FS_VERITY_METADATA_TYPE_DESCRIPTOR = 0x2 + FS_VERITY_METADATA_TYPE_MERKLE_TREE = 0x1 + FS_VERITY_METADATA_TYPE_SIGNATURE = 0x3 + FUSE_SUPER_MAGIC = 0x65735546 + FUTEXFS_SUPER_MAGIC = 0xbad1dea + F_ADD_SEALS = 0x409 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_SEAL_FUTURE_WRITE = 0x10 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_INSECURE = 0x4 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HDIO_DRIVE_CMD = 0x31f + HDIO_DRIVE_CMD_AEB = 0x31e + HDIO_DRIVE_CMD_HDR_SIZE = 0x4 + HDIO_DRIVE_HOB_HDR_SIZE = 0x8 + HDIO_DRIVE_RESET = 0x31c + HDIO_DRIVE_TASK = 0x31e + HDIO_DRIVE_TASKFILE = 0x31d + HDIO_DRIVE_TASK_HDR_SIZE = 0x8 + HDIO_GETGEO = 0x301 + HDIO_GET_32BIT = 0x309 + HDIO_GET_ACOUSTIC = 0x30f + HDIO_GET_ADDRESS = 0x310 + HDIO_GET_BUSSTATE = 0x31a + HDIO_GET_DMA = 0x30b + HDIO_GET_IDENTITY = 0x30d + HDIO_GET_KEEPSETTINGS = 0x308 + HDIO_GET_MULTCOUNT = 0x304 + HDIO_GET_NICE = 0x30c + HDIO_GET_NOWERR = 0x30a + HDIO_GET_QDMA = 0x305 + HDIO_GET_UNMASKINTR = 0x302 + HDIO_GET_WCACHE = 0x30e + HDIO_OBSOLETE_IDENTITY = 0x307 + HDIO_SCAN_HWIF = 0x328 + HDIO_SET_32BIT = 0x324 + HDIO_SET_ACOUSTIC = 0x32c + HDIO_SET_ADDRESS = 0x32f + HDIO_SET_BUSSTATE = 0x32d + HDIO_SET_DMA = 0x326 + HDIO_SET_KEEPSETTINGS = 0x323 + HDIO_SET_MULTCOUNT = 0x321 + HDIO_SET_NICE = 0x329 + HDIO_SET_NOWERR = 0x325 + HDIO_SET_PIO_MODE = 0x327 + HDIO_SET_QDMA = 0x32e + HDIO_SET_UNMASKINTR = 0x322 + HDIO_SET_WCACHE = 0x32b + HDIO_SET_XFER = 0x306 + HDIO_TRISTATE_HWIF = 0x31b + HDIO_UNREGISTER_HWIF = 0x32a + HID_MAX_DESCRIPTOR_SIZE = 0x1000 + HOSTFS_SUPER_MAGIC = 0xc0ffee + HPFS_SUPER_MAGIC = 0xf995e849 + HUGETLBFS_MAGIC = 0x958458f6 + IBSHIFT = 0x10 + ICRNL = 0x100 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0xa + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MASK_CREATE = 0x10000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERNET = 0x8f + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_L2TP = 0x73 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MPTCP = 0x106 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_FLOW = 0x11 + IPV6_FREEBIND = 0x4e + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_ALL = 0x1d + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVERR_RFC4884 = 0x1f + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_ROUTER_ALERT_ISOLATE = 0x1e + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_USER_FLOW = 0xe + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVERR_RFC4884 = 0x1a + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + 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 + ITIMER_PROF = 0x2 + ITIMER_REAL = 0x0 + ITIMER_VIRTUAL = 0x1 + IUTF8 = 0x4000 + IXANY = 0x800 + JFFS2_SUPER_MAGIC = 0x72b6 + KCMPROTO_CONNECTED = 0x0 + KCM_RECV_DISABLE = 0x1 + KEXEC_ARCH_386 = 0x30000 + KEXEC_ARCH_68K = 0x40000 + KEXEC_ARCH_AARCH64 = 0xb70000 + KEXEC_ARCH_ARM = 0x280000 + KEXEC_ARCH_DEFAULT = 0x0 + KEXEC_ARCH_IA_64 = 0x320000 + KEXEC_ARCH_MASK = 0xffff0000 + KEXEC_ARCH_MIPS = 0x80000 + KEXEC_ARCH_MIPS_LE = 0xa0000 + KEXEC_ARCH_PARISC = 0xf0000 + KEXEC_ARCH_PPC = 0x140000 + KEXEC_ARCH_PPC64 = 0x150000 + KEXEC_ARCH_RISCV = 0xf30000 + KEXEC_ARCH_S390 = 0x160000 + KEXEC_ARCH_SH = 0x2a0000 + KEXEC_ARCH_X86_64 = 0x3e0000 + KEXEC_FILE_NO_INITRAMFS = 0x4 + KEXEC_FILE_ON_CRASH = 0x2 + KEXEC_FILE_UNLOAD = 0x1 + KEXEC_ON_CRASH = 0x1 + KEXEC_PRESERVE_CONTEXT = 0x2 + KEXEC_SEGMENT_MAX = 0x10 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CAPABILITIES = 0x1f + KEYCTL_CAPS0_BIG_KEY = 0x10 + KEYCTL_CAPS0_CAPABILITIES = 0x1 + KEYCTL_CAPS0_DIFFIE_HELLMAN = 0x4 + KEYCTL_CAPS0_INVALIDATE = 0x20 + KEYCTL_CAPS0_MOVE = 0x80 + KEYCTL_CAPS0_PERSISTENT_KEYRINGS = 0x2 + KEYCTL_CAPS0_PUBLIC_KEY = 0x8 + KEYCTL_CAPS0_RESTRICT_KEYRING = 0x40 + KEYCTL_CAPS1_NOTIFICATIONS = 0x4 + KEYCTL_CAPS1_NS_KEYRING_NAME = 0x1 + KEYCTL_CAPS1_NS_KEY_TAG = 0x2 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_MOVE = 0x1e + KEYCTL_MOVE_EXCL = 0x1 + KEYCTL_NEGATE = 0xd + KEYCTL_PKEY_DECRYPT = 0x1a + KEYCTL_PKEY_ENCRYPT = 0x19 + KEYCTL_PKEY_QUERY = 0x18 + KEYCTL_PKEY_SIGN = 0x1b + KEYCTL_PKEY_VERIFY = 0x1c + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_SUPPORTS_DECRYPT = 0x2 + KEYCTL_SUPPORTS_ENCRYPT = 0x1 + KEYCTL_SUPPORTS_SIGN = 0x4 + KEYCTL_SUPPORTS_VERIFY = 0x8 + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEYCTL_WATCH_KEY = 0x20 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LANDLOCK_ACCESS_FS_EXECUTE = 0x1 + LANDLOCK_ACCESS_FS_MAKE_BLOCK = 0x800 + LANDLOCK_ACCESS_FS_MAKE_CHAR = 0x40 + LANDLOCK_ACCESS_FS_MAKE_DIR = 0x80 + LANDLOCK_ACCESS_FS_MAKE_FIFO = 0x400 + LANDLOCK_ACCESS_FS_MAKE_REG = 0x100 + LANDLOCK_ACCESS_FS_MAKE_SOCK = 0x200 + LANDLOCK_ACCESS_FS_MAKE_SYM = 0x1000 + LANDLOCK_ACCESS_FS_READ_DIR = 0x8 + LANDLOCK_ACCESS_FS_READ_FILE = 0x4 + LANDLOCK_ACCESS_FS_REMOVE_DIR = 0x10 + LANDLOCK_ACCESS_FS_REMOVE_FILE = 0x20 + LANDLOCK_ACCESS_FS_WRITE_FILE = 0x2 + LANDLOCK_CREATE_RULESET_VERSION = 0x1 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + LOOP_CLR_FD = 0x4c01 + LOOP_CTL_ADD = 0x4c80 + LOOP_CTL_GET_FREE = 0x4c82 + LOOP_CTL_REMOVE = 0x4c81 + LOOP_GET_STATUS = 0x4c03 + LOOP_GET_STATUS64 = 0x4c05 + LOOP_SET_BLOCK_SIZE = 0x4c09 + LOOP_SET_CAPACITY = 0x4c07 + LOOP_SET_DIRECT_IO = 0x4c08 + LOOP_SET_FD = 0x4c00 + LOOP_SET_STATUS = 0x4c02 + LOOP_SET_STATUS64 = 0x4c04 + LOOP_SET_STATUS_CLEARABLE_FLAGS = 0x4 + LOOP_SET_STATUS_SETTABLE_FLAGS = 0xc + LO_KEY_SIZE = 0x20 + LO_NAME_SIZE = 0x40 + LWTUNNEL_IP6_MAX = 0x8 + LWTUNNEL_IP_MAX = 0x8 + LWTUNNEL_IP_OPTS_MAX = 0x3 + LWTUNNEL_IP_OPT_ERSPAN_MAX = 0x4 + LWTUNNEL_IP_OPT_GENEVE_MAX = 0x3 + LWTUNNEL_IP_OPT_VXLAN_MAX = 0x1 + MADV_COLD = 0x14 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_PAGEOUT = 0x15 + MADV_POPULATE_READ = 0x16 + MADV_POPULATE_WRITE = 0x17 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FIXED_NOREPLACE = 0x100000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_SHARED_VALIDATE = 0x3 + MAP_TYPE = 0xf + MCAST_BLOCK_SOURCE = 0x2b + MCAST_EXCLUDE = 0x0 + MCAST_INCLUDE = 0x1 + MCAST_JOIN_GROUP = 0x2a + MCAST_JOIN_SOURCE_GROUP = 0x2e + MCAST_LEAVE_GROUP = 0x2d + MCAST_LEAVE_SOURCE_GROUP = 0x2f + MCAST_MSFILTER = 0x30 + MCAST_UNBLOCK_SOURCE = 0x2c + MEMGETREGIONINFO = 0xc0104d08 + MEMREADOOB64 = 0xc0184d16 + MEMWRITE = 0xc0304d18 + MEMWRITEOOB64 = 0xc0184d15 + MFD_ALLOW_SEALING = 0x2 + MFD_CLOEXEC = 0x1 + MFD_HUGETLB = 0x4 + MFD_HUGE_16GB = -0x78000000 + MFD_HUGE_16MB = 0x60000000 + MFD_HUGE_1GB = 0x78000000 + MFD_HUGE_1MB = 0x50000000 + MFD_HUGE_256MB = 0x70000000 + MFD_HUGE_2GB = 0x7c000000 + MFD_HUGE_2MB = 0x54000000 + MFD_HUGE_32MB = 0x64000000 + MFD_HUGE_512KB = 0x4c000000 + MFD_HUGE_512MB = 0x74000000 + MFD_HUGE_64KB = 0x40000000 + MFD_HUGE_8MB = 0x5c000000 + MFD_HUGE_MASK = 0x3f + MFD_HUGE_SHIFT = 0x1a + MINIX2_SUPER_MAGIC = 0x2468 + MINIX2_SUPER_MAGIC2 = 0x2478 + MINIX3_SUPER_MAGIC = 0x4d5a + MINIX_SUPER_MAGIC = 0x137f + MINIX_SUPER_MAGIC2 = 0x138f + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MODULE_INIT_COMPRESSED_FILE = 0x4 + MODULE_INIT_IGNORE_MODVERSIONS = 0x1 + MODULE_INIT_IGNORE_VERMAGIC = 0x2 + MOUNT_ATTR_IDMAP = 0x100000 + MOUNT_ATTR_NOATIME = 0x10 + MOUNT_ATTR_NODEV = 0x4 + MOUNT_ATTR_NODIRATIME = 0x80 + MOUNT_ATTR_NOEXEC = 0x8 + MOUNT_ATTR_NOSUID = 0x2 + MOUNT_ATTR_NOSYMFOLLOW = 0x200000 + MOUNT_ATTR_RDONLY = 0x1 + MOUNT_ATTR_RELATIME = 0x0 + MOUNT_ATTR_SIZE_VER0 = 0x20 + MOUNT_ATTR_STRICTATIME = 0x20 + MOUNT_ATTR__ATIME = 0x70 + MSDOS_SUPER_MAGIC = 0x4d44 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOSYMFOLLOW = 0x100 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + MTD_ABSENT = 0x0 + MTD_BIT_WRITEABLE = 0x800 + MTD_CAP_NANDFLASH = 0x400 + MTD_CAP_NORFLASH = 0xc00 + MTD_CAP_NVRAM = 0x1c00 + MTD_CAP_RAM = 0x1c00 + MTD_CAP_ROM = 0x0 + MTD_DATAFLASH = 0x6 + MTD_INODE_FS_MAGIC = 0x11307854 + MTD_MAX_ECCPOS_ENTRIES = 0x40 + MTD_MAX_OOBFREE_ENTRIES = 0x8 + MTD_MLCNANDFLASH = 0x8 + MTD_NANDECC_AUTOPLACE = 0x2 + MTD_NANDECC_AUTOPL_USR = 0x4 + MTD_NANDECC_OFF = 0x0 + MTD_NANDECC_PLACE = 0x1 + MTD_NANDECC_PLACEONLY = 0x3 + MTD_NANDFLASH = 0x4 + MTD_NORFLASH = 0x3 + MTD_NO_ERASE = 0x1000 + MTD_OTP_FACTORY = 0x1 + MTD_OTP_OFF = 0x0 + MTD_OTP_USER = 0x2 + MTD_POWERUP_LOCK = 0x2000 + MTD_RAM = 0x1 + MTD_ROM = 0x2 + MTD_SLC_ON_MLC_EMULATION = 0x4000 + MTD_UBIVOLUME = 0x7 + MTD_WRITEABLE = 0x400 + NAME_MAX = 0xff + NCP_SUPER_MAGIC = 0x564c + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_GET_STRICT_CHK = 0xc + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NETNSA_MAX = 0x5 + NETNSA_NSID_NOT_ASSIGNED = -0x1 + NFC_ATR_REQ_GB_MAXSIZE = 0x30 + NFC_ATR_REQ_MAXSIZE = 0x40 + NFC_ATR_RES_GB_MAXSIZE = 0x2f + NFC_ATR_RES_MAXSIZE = 0x40 + NFC_COMM_ACTIVE = 0x0 + NFC_COMM_PASSIVE = 0x1 + NFC_DEVICE_NAME_MAXSIZE = 0x8 + NFC_DIRECTION_RX = 0x0 + NFC_DIRECTION_TX = 0x1 + NFC_FIRMWARE_NAME_MAXSIZE = 0x20 + NFC_GB_MAXSIZE = 0x30 + NFC_GENL_MCAST_EVENT_NAME = "events" + NFC_GENL_NAME = "nfc" + NFC_GENL_VERSION = 0x1 + NFC_HEADER_SIZE = 0x1 + NFC_ISO15693_UID_MAXSIZE = 0x8 + NFC_LLCP_MAX_SERVICE_NAME = 0x3f + NFC_LLCP_MIUX = 0x1 + NFC_LLCP_REMOTE_LTO = 0x3 + NFC_LLCP_REMOTE_MIU = 0x2 + NFC_LLCP_REMOTE_RW = 0x4 + NFC_LLCP_RW = 0x0 + NFC_NFCID1_MAXSIZE = 0xa + NFC_NFCID2_MAXSIZE = 0x8 + NFC_NFCID3_MAXSIZE = 0xa + NFC_PROTO_FELICA = 0x3 + NFC_PROTO_FELICA_MASK = 0x8 + NFC_PROTO_ISO14443 = 0x4 + NFC_PROTO_ISO14443_B = 0x6 + NFC_PROTO_ISO14443_B_MASK = 0x40 + NFC_PROTO_ISO14443_MASK = 0x10 + NFC_PROTO_ISO15693 = 0x7 + NFC_PROTO_ISO15693_MASK = 0x80 + NFC_PROTO_JEWEL = 0x1 + NFC_PROTO_JEWEL_MASK = 0x2 + NFC_PROTO_MAX = 0x8 + NFC_PROTO_MIFARE = 0x2 + NFC_PROTO_MIFARE_MASK = 0x4 + NFC_PROTO_NFC_DEP = 0x5 + NFC_PROTO_NFC_DEP_MASK = 0x20 + NFC_RAW_HEADER_SIZE = 0x2 + NFC_RF_INITIATOR = 0x0 + NFC_RF_NONE = 0x2 + NFC_RF_TARGET = 0x1 + NFC_SENSB_RES_MAXSIZE = 0xc + NFC_SENSF_RES_MAXSIZE = 0x12 + NFC_SE_DISABLED = 0x0 + NFC_SE_EMBEDDED = 0x2 + NFC_SE_ENABLED = 0x1 + NFC_SE_UICC = 0x1 + NFC_SOCKPROTO_LLCP = 0x1 + NFC_SOCKPROTO_MAX = 0x2 + NFC_SOCKPROTO_RAW = 0x0 + NFNETLINK_V0 = 0x0 + NFNLGRP_ACCT_QUOTA = 0x8 + NFNLGRP_CONNTRACK_DESTROY = 0x3 + NFNLGRP_CONNTRACK_EXP_DESTROY = 0x6 + NFNLGRP_CONNTRACK_EXP_NEW = 0x4 + NFNLGRP_CONNTRACK_EXP_UPDATE = 0x5 + NFNLGRP_CONNTRACK_NEW = 0x1 + NFNLGRP_CONNTRACK_UPDATE = 0x2 + NFNLGRP_MAX = 0x9 + NFNLGRP_NFTABLES = 0x7 + NFNLGRP_NFTRACE = 0x9 + NFNLGRP_NONE = 0x0 + NFNL_BATCH_MAX = 0x1 + NFNL_MSG_BATCH_BEGIN = 0x10 + NFNL_MSG_BATCH_END = 0x11 + NFNL_NFA_NEST = 0x8000 + NFNL_SUBSYS_ACCT = 0x7 + NFNL_SUBSYS_COUNT = 0xd + NFNL_SUBSYS_CTHELPER = 0x9 + NFNL_SUBSYS_CTNETLINK = 0x1 + NFNL_SUBSYS_CTNETLINK_EXP = 0x2 + NFNL_SUBSYS_CTNETLINK_TIMEOUT = 0x8 + NFNL_SUBSYS_HOOK = 0xc + NFNL_SUBSYS_IPSET = 0x6 + NFNL_SUBSYS_NFTABLES = 0xa + NFNL_SUBSYS_NFT_COMPAT = 0xb + NFNL_SUBSYS_NONE = 0x0 + NFNL_SUBSYS_OSF = 0x5 + NFNL_SUBSYS_QUEUE = 0x3 + NFNL_SUBSYS_ULOG = 0x4 + NFS_SUPER_MAGIC = 0x6969 + NILFS_SUPER_MAGIC = 0x3434 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NSFS_MAGIC = 0x6e736673 + OCFS2_SUPER_MAGIC = 0x7461636f + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + ONLRET = 0x20 + ONOCR = 0x10 + OPENPROM_SUPER_MAGIC = 0x9fa1 + OPOST = 0x1 + OVERLAYFS_SUPER_MAGIC = 0x794c7630 + O_ACCMODE = 0x3 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_IGNORE_OUTGOING = 0x17 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PERF_ATTR_SIZE_VER0 = 0x40 + PERF_ATTR_SIZE_VER1 = 0x48 + PERF_ATTR_SIZE_VER2 = 0x50 + PERF_ATTR_SIZE_VER3 = 0x60 + PERF_ATTR_SIZE_VER4 = 0x68 + PERF_ATTR_SIZE_VER5 = 0x70 + PERF_ATTR_SIZE_VER6 = 0x78 + PERF_ATTR_SIZE_VER7 = 0x80 + PERF_AUX_FLAG_COLLISION = 0x8 + PERF_AUX_FLAG_CORESIGHT_FORMAT_CORESIGHT = 0x0 + PERF_AUX_FLAG_CORESIGHT_FORMAT_RAW = 0x100 + PERF_AUX_FLAG_OVERWRITE = 0x2 + PERF_AUX_FLAG_PARTIAL = 0x4 + PERF_AUX_FLAG_PMU_FORMAT_TYPE_MASK = 0xff00 + PERF_AUX_FLAG_TRUNCATED = 0x1 + PERF_FLAG_FD_CLOEXEC = 0x8 + PERF_FLAG_FD_NO_GROUP = 0x1 + PERF_FLAG_FD_OUTPUT = 0x2 + PERF_FLAG_PID_CGROUP = 0x4 + PERF_HW_EVENT_MASK = 0xffffffff + PERF_MAX_CONTEXTS_PER_STACK = 0x8 + PERF_MAX_STACK_DEPTH = 0x7f + PERF_MEM_BLK_ADDR = 0x4 + PERF_MEM_BLK_DATA = 0x2 + PERF_MEM_BLK_NA = 0x1 + PERF_MEM_BLK_SHIFT = 0x28 + PERF_MEM_HOPS_0 = 0x1 + PERF_MEM_HOPS_1 = 0x2 + PERF_MEM_HOPS_2 = 0x3 + PERF_MEM_HOPS_3 = 0x4 + PERF_MEM_HOPS_SHIFT = 0x2b + PERF_MEM_LOCK_LOCKED = 0x2 + PERF_MEM_LOCK_NA = 0x1 + PERF_MEM_LOCK_SHIFT = 0x18 + PERF_MEM_LVLNUM_ANY_CACHE = 0xb + PERF_MEM_LVLNUM_L1 = 0x1 + PERF_MEM_LVLNUM_L2 = 0x2 + PERF_MEM_LVLNUM_L3 = 0x3 + PERF_MEM_LVLNUM_L4 = 0x4 + PERF_MEM_LVLNUM_LFB = 0xc + PERF_MEM_LVLNUM_NA = 0xf + PERF_MEM_LVLNUM_PMEM = 0xe + PERF_MEM_LVLNUM_RAM = 0xd + PERF_MEM_LVLNUM_SHIFT = 0x21 + PERF_MEM_LVL_HIT = 0x2 + PERF_MEM_LVL_IO = 0x1000 + PERF_MEM_LVL_L1 = 0x8 + PERF_MEM_LVL_L2 = 0x20 + PERF_MEM_LVL_L3 = 0x40 + PERF_MEM_LVL_LFB = 0x10 + PERF_MEM_LVL_LOC_RAM = 0x80 + PERF_MEM_LVL_MISS = 0x4 + PERF_MEM_LVL_NA = 0x1 + PERF_MEM_LVL_REM_CCE1 = 0x400 + PERF_MEM_LVL_REM_CCE2 = 0x800 + PERF_MEM_LVL_REM_RAM1 = 0x100 + PERF_MEM_LVL_REM_RAM2 = 0x200 + PERF_MEM_LVL_SHIFT = 0x5 + PERF_MEM_LVL_UNC = 0x2000 + PERF_MEM_OP_EXEC = 0x10 + PERF_MEM_OP_LOAD = 0x2 + PERF_MEM_OP_NA = 0x1 + PERF_MEM_OP_PFETCH = 0x8 + PERF_MEM_OP_SHIFT = 0x0 + PERF_MEM_OP_STORE = 0x4 + PERF_MEM_REMOTE_REMOTE = 0x1 + PERF_MEM_REMOTE_SHIFT = 0x25 + PERF_MEM_SNOOPX_FWD = 0x1 + PERF_MEM_SNOOPX_SHIFT = 0x26 + PERF_MEM_SNOOP_HIT = 0x4 + PERF_MEM_SNOOP_HITM = 0x10 + PERF_MEM_SNOOP_MISS = 0x8 + PERF_MEM_SNOOP_NA = 0x1 + PERF_MEM_SNOOP_NONE = 0x2 + PERF_MEM_SNOOP_SHIFT = 0x13 + PERF_MEM_TLB_HIT = 0x2 + PERF_MEM_TLB_L1 = 0x8 + PERF_MEM_TLB_L2 = 0x10 + PERF_MEM_TLB_MISS = 0x4 + PERF_MEM_TLB_NA = 0x1 + PERF_MEM_TLB_OS = 0x40 + PERF_MEM_TLB_SHIFT = 0x1a + PERF_MEM_TLB_WK = 0x20 + PERF_PMU_TYPE_SHIFT = 0x20 + PERF_RECORD_KSYMBOL_FLAGS_UNREGISTER = 0x1 + PERF_RECORD_MISC_COMM_EXEC = 0x2000 + PERF_RECORD_MISC_CPUMODE_MASK = 0x7 + PERF_RECORD_MISC_CPUMODE_UNKNOWN = 0x0 + PERF_RECORD_MISC_EXACT_IP = 0x4000 + PERF_RECORD_MISC_EXT_RESERVED = 0x8000 + PERF_RECORD_MISC_FORK_EXEC = 0x2000 + PERF_RECORD_MISC_GUEST_KERNEL = 0x4 + PERF_RECORD_MISC_GUEST_USER = 0x5 + PERF_RECORD_MISC_HYPERVISOR = 0x3 + PERF_RECORD_MISC_KERNEL = 0x1 + PERF_RECORD_MISC_MMAP_BUILD_ID = 0x4000 + PERF_RECORD_MISC_MMAP_DATA = 0x2000 + PERF_RECORD_MISC_PROC_MAP_PARSE_TIMEOUT = 0x1000 + PERF_RECORD_MISC_SWITCH_OUT = 0x2000 + PERF_RECORD_MISC_SWITCH_OUT_PREEMPT = 0x4000 + PERF_RECORD_MISC_USER = 0x2 + PERF_SAMPLE_BRANCH_PLM_ALL = 0x7 + PERF_SAMPLE_WEIGHT_TYPE = 0x1004000 + PIPEFS_MAGIC = 0x50495045 + PPC_CMM_MAGIC = 0xc7571590 + PPPIOCGNPMODE = 0xc008744c + PPPIOCNEWUNIT = 0xc004743e + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROC_SUPER_MAGIC = 0x9fa0 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_IO_FLUSHER = 0x3a + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_SPECULATION_CTRL = 0x34 + PR_GET_TAGGED_ADDR_CTRL = 0x38 + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_MTE_TAG_MASK = 0x7fff8 + PR_MTE_TAG_SHIFT = 0x3 + PR_MTE_TCF_ASYNC = 0x4 + PR_MTE_TCF_MASK = 0x6 + PR_MTE_TCF_NONE = 0x0 + PR_MTE_TCF_SHIFT = 0x1 + PR_MTE_TCF_SYNC = 0x2 + PR_PAC_APDAKEY = 0x4 + PR_PAC_APDBKEY = 0x8 + PR_PAC_APGAKEY = 0x10 + PR_PAC_APIAKEY = 0x1 + PR_PAC_APIBKEY = 0x2 + PR_PAC_GET_ENABLED_KEYS = 0x3d + PR_PAC_RESET_KEYS = 0x36 + PR_PAC_SET_ENABLED_KEYS = 0x3c + PR_SCHED_CORE = 0x3e + PR_SCHED_CORE_CREATE = 0x1 + PR_SCHED_CORE_GET = 0x0 + PR_SCHED_CORE_MAX = 0x4 + PR_SCHED_CORE_SCOPE_PROCESS_GROUP = 0x2 + PR_SCHED_CORE_SCOPE_THREAD = 0x0 + PR_SCHED_CORE_SCOPE_THREAD_GROUP = 0x1 + PR_SCHED_CORE_SHARE_FROM = 0x3 + PR_SCHED_CORE_SHARE_TO = 0x2 + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_IO_FLUSHER = 0x39 + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_SPECULATION_CTRL = 0x35 + PR_SET_SYSCALL_USER_DISPATCH = 0x3b + PR_SET_TAGGED_ADDR_CTRL = 0x37 + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_SET_VMA = 0x53564d41 + PR_SET_VMA_ANON_NAME = 0x0 + PR_SPEC_DISABLE = 0x4 + PR_SPEC_DISABLE_NOEXEC = 0x10 + PR_SPEC_ENABLE = 0x2 + PR_SPEC_FORCE_DISABLE = 0x8 + PR_SPEC_INDIRECT_BRANCH = 0x1 + PR_SPEC_L1D_FLUSH = 0x2 + PR_SPEC_NOT_AFFECTED = 0x0 + PR_SPEC_PRCTL = 0x1 + PR_SPEC_STORE_BYPASS = 0x0 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff + PR_SYS_DISPATCH_OFF = 0x0 + PR_SYS_DISPATCH_ON = 0x1 + PR_TAGGED_ADDR_ENABLE = 0x1 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PSTOREFS_MAGIC = 0x6165676c + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENTMSG_SYSCALL_ENTRY = 0x1 + PTRACE_EVENTMSG_SYSCALL_EXIT = 0x2 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_RSEQ_CONFIGURATION = 0x420f + PTRACE_GET_SYSCALL_INFO = 0x420e + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SEIZE = 0x4206 + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_SYSCALL_INFO_ENTRY = 0x1 + PTRACE_SYSCALL_INFO_EXIT = 0x2 + PTRACE_SYSCALL_INFO_NONE = 0x0 + PTRACE_SYSCALL_INFO_SECCOMP = 0x3 + PTRACE_TRACEME = 0x0 + P_ALL = 0x0 + P_PGID = 0x2 + P_PID = 0x1 + P_PIDFD = 0x3 + QNX4_SUPER_MAGIC = 0x2f + QNX6_SUPER_MAGIC = 0x68191122 + RAMFS_MAGIC = 0x858458f6 + RAW_PAYLOAD_DIGITAL = 0x3 + RAW_PAYLOAD_HCI = 0x2 + RAW_PAYLOAD_LLCP = 0x0 + RAW_PAYLOAD_NCI = 0x1 + RAW_PAYLOAD_PROPRIETARY = 0x4 + RDTGROUP_SUPER_MAGIC = 0x7655821 + REISERFS_SUPER_MAGIC = 0x52654973 + RENAME_EXCHANGE = 0x2 + RENAME_NOREPLACE = 0x1 + RENAME_WHITEOUT = 0x4 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x11 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1e + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTC_AF = 0x20 + RTC_BSM_DIRECT = 0x1 + RTC_BSM_DISABLED = 0x0 + RTC_BSM_LEVEL = 0x2 + RTC_BSM_STANDBY = 0x3 + RTC_FEATURE_ALARM = 0x0 + RTC_FEATURE_ALARM_RES_2S = 0x3 + RTC_FEATURE_ALARM_RES_MINUTE = 0x1 + RTC_FEATURE_BACKUP_SWITCH_MODE = 0x6 + RTC_FEATURE_CNT = 0x7 + RTC_FEATURE_CORRECTION = 0x5 + RTC_FEATURE_NEED_WEEK_DAY = 0x2 + RTC_FEATURE_UPDATE_INTERRUPT = 0x4 + RTC_IRQF = 0x80 + RTC_MAX_FREQ = 0x2000 + RTC_PARAM_BACKUP_SWITCH_MODE = 0x2 + RTC_PARAM_CORRECTION = 0x1 + RTC_PARAM_FEATURES = 0x0 + RTC_PF = 0x40 + RTC_UF = 0x10 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTMGRP_DECnet_IFADDR = 0x1000 + RTMGRP_DECnet_ROUTE = 0x4000 + RTMGRP_IPV4_IFADDR = 0x10 + RTMGRP_IPV4_MROUTE = 0x20 + RTMGRP_IPV4_ROUTE = 0x40 + RTMGRP_IPV4_RULE = 0x80 + RTMGRP_IPV6_IFADDR = 0x100 + RTMGRP_IPV6_IFINFO = 0x800 + RTMGRP_IPV6_MROUTE = 0x200 + RTMGRP_IPV6_PREFIX = 0x20000 + RTMGRP_IPV6_ROUTE = 0x400 + RTMGRP_LINK = 0x1 + RTMGRP_NEIGH = 0x4 + RTMGRP_NOTIFY = 0x2 + RTMGRP_TC = 0x8 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELCHAIN = 0x65 + RTM_DELLINK = 0x11 + RTM_DELLINKPROP = 0x6d + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNEXTHOP = 0x69 + RTM_DELNEXTHOPBUCKET = 0x75 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_DELVLAN = 0x71 + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_OFFLOAD = 0x4000 + RTM_F_OFFLOAD_FAILED = 0x20000000 + RTM_F_PREFIX = 0x800 + RTM_F_TRAP = 0x8000 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETCHAIN = 0x66 + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETLINKPROP = 0x6e + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNEXTHOP = 0x6a + RTM_GETNEXTHOPBUCKET = 0x76 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_GETVLAN = 0x72 + RTM_MAX = 0x77 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWCHAIN = 0x64 + RTM_NEWLINK = 0x10 + RTM_NEWLINKPROP = 0x6c + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNEXTHOP = 0x68 + RTM_NEWNEXTHOPBUCKET = 0x74 + RTM_NEWNSID = 0x58 + RTM_NEWNVLAN = 0x70 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x1a + RTM_NR_MSGTYPES = 0x68 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x59 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_TRAP = 0x40 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BGP = 0xba + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_EIGRP = 0xc0 + RTPROT_GATED = 0x8 + RTPROT_ISIS = 0xbb + RTPROT_KEEPALIVED = 0x12 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_OPENR = 0x63 + RTPROT_OSPF = 0xbc + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_RIP = 0xbd + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + RWF_APPEND = 0x10 + RWF_DSYNC = 0x2 + RWF_HIPRI = 0x1 + RWF_NOWAIT = 0x8 + RWF_SUPPORTED = 0x1f + RWF_SYNC = 0x4 + RWF_WRITE_LIFE_NOT_SET = 0x0 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SC_LOG_FLUSH = 0x100000 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SECRETMEM_MAGIC = 0x5345434d + SECURITYFS_MAGIC = 0x73636673 + SEEK_CUR = 0x1 + SEEK_DATA = 0x3 + SEEK_END = 0x2 + SEEK_HOLE = 0x4 + SEEK_MAX = 0x4 + SEEK_SET = 0x0 + SELINUX_MAGIC = 0xf97cff8c + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGETLINKNAME = 0x89e0 + SIOCGETNODEID = 0x89e1 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPPPCSTATS = 0x89f2 + SIOCGPPPSTATS = 0x89f0 + SIOCGPPPVER = 0x89f1 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCGSTAMPNS_OLD = 0x8907 + SIOCGSTAMP_OLD = 0x8906 + SIOCKCMATTACH = 0x89e0 + SIOCKCMCLONE = 0x89e2 + SIOCKCMUNATTACH = 0x89e1 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SMACK_MAGIC = 0x43415d53 + SMART_AUTOSAVE = 0xd2 + SMART_AUTO_OFFLINE = 0xdb + SMART_DISABLE = 0xd9 + SMART_ENABLE = 0xd8 + SMART_HCYL_PASS = 0xc2 + SMART_IMMEDIATE_OFFLINE = 0xd4 + SMART_LCYL_PASS = 0x4f + SMART_READ_LOG_SECTOR = 0xd5 + SMART_READ_THRESHOLDS = 0xd1 + SMART_READ_VALUES = 0xd0 + SMART_SAVE = 0xd3 + SMART_STATUS = 0xda + SMART_WRITE_LOG_SECTOR = 0xd6 + SMART_WRITE_THRESHOLDS = 0xd7 + SMB2_SUPER_MAGIC = 0xfe534d42 + SMB_SUPER_MAGIC = 0x517b + SOCKFS_MAGIC = 0x534f434b + SOCK_BUF_LOCK_MASK = 0x3 + SOCK_DCCP = 0x6 + SOCK_IOC_TYPE = 0x89 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RCVBUF_LOCK = 0x2 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_SNDBUF_LOCK = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_CAN_RAW = 0x65 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_TLS = 0x11a + SOL_X25 = 0x106 + SOL_XDP = 0x11b + SOMAXCONN = 0x1000 + SO_ATTACH_FILTER = 0x1a + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_EE_CODE_TXTIME_INVALID_PARAM = 0x1 + SO_EE_CODE_TXTIME_MISSED = 0x2 + SO_EE_CODE_ZEROCOPY_COPIED = 0x1 + SO_EE_ORIGIN_ICMP = 0x2 + SO_EE_ORIGIN_ICMP6 = 0x3 + SO_EE_ORIGIN_LOCAL = 0x1 + SO_EE_ORIGIN_NONE = 0x0 + SO_EE_ORIGIN_TIMESTAMPING = 0x4 + SO_EE_ORIGIN_TXSTATUS = 0x4 + SO_EE_ORIGIN_TXTIME = 0x6 + SO_EE_ORIGIN_ZEROCOPY = 0x5 + SO_EE_RFC4884_FLAG_INVALID = 0x1 + SO_GET_FILTER = 0x1a + SO_NO_CHECK = 0xb + SO_PEERNAME = 0x1c + SO_PRIORITY = 0xc + SO_TIMESTAMP = 0x1d + SO_TIMESTAMP_OLD = 0x1d + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_CONNECT_TIMEOUT_NEW = 0x8 + SO_VM_SOCKETS_CONNECT_TIMEOUT_OLD = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + SQUASHFS_MAGIC = 0x73717368 + STACK_END_MAGIC = 0x57ac6e9d + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_DAX = 0x200000 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_MOUNT_ROOT = 0x2000 + STATX_ATTR_NODUMP = 0x40 + STATX_ATTR_VERITY = 0x100000 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MNT_ID = 0x1000 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 + SYNC_FILE_RANGE_WAIT_AFTER = 0x4 + SYNC_FILE_RANGE_WAIT_BEFORE = 0x1 + SYNC_FILE_RANGE_WRITE = 0x2 + SYNC_FILE_RANGE_WRITE_AND_WAIT = 0x7 + SYSFS_MAGIC = 0x62656572 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0xb + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCPOPT_EOL = 0x0 + TCPOPT_MAXSEG = 0x2 + TCPOPT_NOP = 0x1 + TCPOPT_SACK = 0x5 + TCPOPT_SACK_PERMITTED = 0x4 + TCPOPT_TIMESTAMP = 0x8 + TCPOPT_TSTAMP_HDR = 0x101080a + TCPOPT_WINDOW = 0x3 + TCP_CC_INFO = 0x1a + TCP_CM_INQ = 0x24 + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_FASTOPEN_KEY = 0x21 + TCP_FASTOPEN_NO_COOKIE = 0x22 + TCP_INFO = 0xb + TCP_INQ = 0x24 + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OFF = 0x0 + TCP_REPAIR_OFF_NO_WP = -0x1 + TCP_REPAIR_ON = 0x1 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + 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 + TFD_TIMER_CANCEL_ON_SET = 0x2 + TIMER_ABSTIME = 0x1 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RTS = 0x4 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIPC_ADDR_ID = 0x3 + TIPC_ADDR_MCAST = 0x1 + TIPC_ADDR_NAME = 0x2 + TIPC_ADDR_NAMESEQ = 0x1 + TIPC_AEAD_ALG_NAME = 0x20 + TIPC_AEAD_KEYLEN_MAX = 0x24 + TIPC_AEAD_KEYLEN_MIN = 0x14 + TIPC_AEAD_KEY_SIZE_MAX = 0x48 + TIPC_CFG_SRV = 0x0 + TIPC_CLUSTER_BITS = 0xc + TIPC_CLUSTER_MASK = 0xfff000 + TIPC_CLUSTER_OFFSET = 0xc + TIPC_CLUSTER_SIZE = 0xfff + TIPC_CONN_SHUTDOWN = 0x5 + TIPC_CONN_TIMEOUT = 0x82 + TIPC_CRITICAL_IMPORTANCE = 0x3 + TIPC_DESTNAME = 0x3 + TIPC_DEST_DROPPABLE = 0x81 + TIPC_ERRINFO = 0x1 + TIPC_ERR_NO_NAME = 0x1 + TIPC_ERR_NO_NODE = 0x3 + TIPC_ERR_NO_PORT = 0x2 + TIPC_ERR_OVERLOAD = 0x4 + TIPC_GROUP_JOIN = 0x87 + TIPC_GROUP_LEAVE = 0x88 + TIPC_GROUP_LOOPBACK = 0x1 + TIPC_GROUP_MEMBER_EVTS = 0x2 + TIPC_HIGH_IMPORTANCE = 0x2 + TIPC_IMPORTANCE = 0x7f + TIPC_LINK_STATE = 0x2 + TIPC_LOW_IMPORTANCE = 0x0 + TIPC_MAX_BEARER_NAME = 0x20 + TIPC_MAX_IF_NAME = 0x10 + TIPC_MAX_LINK_NAME = 0x44 + TIPC_MAX_MEDIA_NAME = 0x10 + TIPC_MAX_USER_MSG_SIZE = 0x101d0 + TIPC_MCAST_BROADCAST = 0x85 + TIPC_MCAST_REPLICAST = 0x86 + TIPC_MEDIUM_IMPORTANCE = 0x1 + TIPC_NODEID_LEN = 0x10 + TIPC_NODELAY = 0x8a + TIPC_NODE_BITS = 0xc + TIPC_NODE_MASK = 0xfff + TIPC_NODE_OFFSET = 0x0 + TIPC_NODE_RECVQ_DEPTH = 0x83 + TIPC_NODE_SIZE = 0xfff + TIPC_NODE_STATE = 0x0 + TIPC_OK = 0x0 + TIPC_PUBLISHED = 0x1 + TIPC_REKEYING_NOW = 0xffffffff + TIPC_RESERVED_TYPES = 0x40 + TIPC_RETDATA = 0x2 + TIPC_SERVICE_ADDR = 0x2 + TIPC_SERVICE_RANGE = 0x1 + TIPC_SOCKET_ADDR = 0x3 + TIPC_SOCK_RECVQ_DEPTH = 0x84 + TIPC_SOCK_RECVQ_USED = 0x89 + TIPC_SRC_DROPPABLE = 0x80 + TIPC_SUBSCR_TIMEOUT = 0x3 + TIPC_SUB_CANCEL = 0x4 + TIPC_SUB_PORTS = 0x1 + TIPC_SUB_SERVICE = 0x2 + TIPC_TOP_SRV = 0x1 + TIPC_WAIT_FOREVER = 0xffffffff + TIPC_WITHDRAWN = 0x2 + TIPC_ZONE_BITS = 0x8 + TIPC_ZONE_CLUSTER_MASK = 0xfffff000 + TIPC_ZONE_MASK = 0xff000000 + TIPC_ZONE_OFFSET = 0x18 + TIPC_ZONE_SCOPE = 0x1 + TIPC_ZONE_SIZE = 0xff + TMPFS_MAGIC = 0x1021994 + TPACKET_ALIGNMENT = 0x10 + TPACKET_HDRLEN = 0x34 + TP_STATUS_AVAILABLE = 0x0 + TP_STATUS_BLK_TMO = 0x20 + TP_STATUS_COPY = 0x2 + TP_STATUS_CSUMNOTREADY = 0x8 + TP_STATUS_CSUM_VALID = 0x80 + TP_STATUS_KERNEL = 0x0 + TP_STATUS_LOSING = 0x4 + TP_STATUS_SENDING = 0x2 + TP_STATUS_SEND_REQUEST = 0x1 + TP_STATUS_TS_RAW_HARDWARE = 0x80000000 + TP_STATUS_TS_SOFTWARE = 0x20000000 + TP_STATUS_TS_SYS_HARDWARE = 0x40000000 + TP_STATUS_USER = 0x1 + TP_STATUS_VLAN_TPID_VALID = 0x40 + TP_STATUS_VLAN_VALID = 0x10 + TP_STATUS_WRONG_FORMAT = 0x4 + TRACEFS_MAGIC = 0x74726163 + TS_COMM_LEN = 0x20 + UDF_SUPER_MAGIC = 0x15013346 + UMOUNT_NOFOLLOW = 0x8 + USBDEVICE_SUPER_MAGIC = 0x9fa2 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + V9FS_MAGIC = 0x1021997 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_LOCAL = 0x1 + VMADDR_FLAG_TO_HOST = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VT0 = 0x0 + WAKE_MAGIC = 0x20 + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WDIOF_ALARMONLY = 0x400 + WDIOF_CARDRESET = 0x20 + WDIOF_EXTERN1 = 0x4 + WDIOF_EXTERN2 = 0x8 + WDIOF_FANFAULT = 0x2 + WDIOF_KEEPALIVEPING = 0x8000 + WDIOF_MAGICCLOSE = 0x100 + WDIOF_OVERHEAT = 0x1 + WDIOF_POWEROVER = 0x40 + WDIOF_POWERUNDER = 0x10 + WDIOF_PRETIMEOUT = 0x200 + WDIOF_SETTIMEOUT = 0x80 + WDIOF_UNKNOWN = -0x1 + WDIOS_DISABLECARD = 0x1 + WDIOS_ENABLECARD = 0x2 + WDIOS_TEMPPANIC = 0x4 + WDIOS_UNKNOWN = -0x1 + WEXITED = 0x4 + WGALLOWEDIP_A_MAX = 0x3 + WGDEVICE_A_MAX = 0x8 + WGPEER_A_MAX = 0xa + WG_CMD_MAX = 0x1 + WG_GENL_NAME = "wireguard" + WG_GENL_VERSION = 0x1 + WG_KEY_LEN = 0x20 + WIN_ACKMEDIACHANGE = 0xdb + WIN_CHECKPOWERMODE1 = 0xe5 + WIN_CHECKPOWERMODE2 = 0x98 + WIN_DEVICE_RESET = 0x8 + WIN_DIAGNOSE = 0x90 + WIN_DOORLOCK = 0xde + WIN_DOORUNLOCK = 0xdf + WIN_DOWNLOAD_MICROCODE = 0x92 + WIN_FLUSH_CACHE = 0xe7 + WIN_FLUSH_CACHE_EXT = 0xea + WIN_FORMAT = 0x50 + WIN_GETMEDIASTATUS = 0xda + WIN_IDENTIFY = 0xec + WIN_IDENTIFY_DMA = 0xee + WIN_IDLEIMMEDIATE = 0xe1 + WIN_INIT = 0x60 + WIN_MEDIAEJECT = 0xed + WIN_MULTREAD = 0xc4 + WIN_MULTREAD_EXT = 0x29 + WIN_MULTWRITE = 0xc5 + WIN_MULTWRITE_EXT = 0x39 + WIN_NOP = 0x0 + WIN_PACKETCMD = 0xa0 + WIN_PIDENTIFY = 0xa1 + WIN_POSTBOOT = 0xdc + WIN_PREBOOT = 0xdd + WIN_QUEUED_SERVICE = 0xa2 + WIN_READ = 0x20 + WIN_READDMA = 0xc8 + WIN_READDMA_EXT = 0x25 + WIN_READDMA_ONCE = 0xc9 + WIN_READDMA_QUEUED = 0xc7 + WIN_READDMA_QUEUED_EXT = 0x26 + WIN_READ_BUFFER = 0xe4 + WIN_READ_EXT = 0x24 + WIN_READ_LONG = 0x22 + WIN_READ_LONG_ONCE = 0x23 + WIN_READ_NATIVE_MAX = 0xf8 + WIN_READ_NATIVE_MAX_EXT = 0x27 + WIN_READ_ONCE = 0x21 + WIN_RECAL = 0x10 + WIN_RESTORE = 0x10 + WIN_SECURITY_DISABLE = 0xf6 + WIN_SECURITY_ERASE_PREPARE = 0xf3 + WIN_SECURITY_ERASE_UNIT = 0xf4 + WIN_SECURITY_FREEZE_LOCK = 0xf5 + WIN_SECURITY_SET_PASS = 0xf1 + WIN_SECURITY_UNLOCK = 0xf2 + WIN_SEEK = 0x70 + WIN_SETFEATURES = 0xef + WIN_SETIDLE1 = 0xe3 + WIN_SETIDLE2 = 0x97 + WIN_SETMULT = 0xc6 + WIN_SET_MAX = 0xf9 + WIN_SET_MAX_EXT = 0x37 + WIN_SLEEPNOW1 = 0xe6 + WIN_SLEEPNOW2 = 0x99 + WIN_SMART = 0xb0 + WIN_SPECIFY = 0x91 + WIN_SRST = 0x8 + WIN_STANDBY = 0xe2 + WIN_STANDBY2 = 0x96 + WIN_STANDBYNOW1 = 0xe0 + WIN_STANDBYNOW2 = 0x94 + WIN_VERIFY = 0x40 + WIN_VERIFY_EXT = 0x42 + WIN_VERIFY_ONCE = 0x41 + WIN_WRITE = 0x30 + WIN_WRITEDMA = 0xca + WIN_WRITEDMA_EXT = 0x35 + WIN_WRITEDMA_ONCE = 0xcb + WIN_WRITEDMA_QUEUED = 0xcc + WIN_WRITEDMA_QUEUED_EXT = 0x36 + WIN_WRITE_BUFFER = 0xe8 + WIN_WRITE_EXT = 0x34 + WIN_WRITE_LONG = 0x32 + WIN_WRITE_LONG_ONCE = 0x33 + WIN_WRITE_ONCE = 0x31 + WIN_WRITE_SAME = 0xe9 + WIN_WRITE_VERIFY = 0x3c + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XDP_COPY = 0x2 + XDP_FLAGS_DRV_MODE = 0x4 + XDP_FLAGS_HW_MODE = 0x8 + XDP_FLAGS_MASK = 0x1f + XDP_FLAGS_MODES = 0xe + XDP_FLAGS_REPLACE = 0x10 + XDP_FLAGS_SKB_MODE = 0x2 + XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1 + XDP_MMAP_OFFSETS = 0x1 + XDP_OPTIONS = 0x8 + XDP_OPTIONS_ZEROCOPY = 0x1 + XDP_PACKET_HEADROOM = 0x100 + XDP_PGOFF_RX_RING = 0x0 + XDP_PGOFF_TX_RING = 0x80000000 + XDP_RING_NEED_WAKEUP = 0x1 + XDP_RX_RING = 0x2 + XDP_SHARED_UMEM = 0x1 + XDP_STATISTICS = 0x7 + XDP_TX_RING = 0x3 + XDP_UMEM_COMPLETION_RING = 0x6 + XDP_UMEM_FILL_RING = 0x5 + XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000 + XDP_UMEM_PGOFF_FILL_RING = 0x100000000 + XDP_UMEM_REG = 0x4 + XDP_UMEM_UNALIGNED_CHUNK_FLAG = 0x1 + XDP_USE_NEED_WAKEUP = 0x8 + XDP_ZEROCOPY = 0x4 + XENFS_SUPER_MAGIC = 0xabba1974 + XFS_SUPER_MAGIC = 0x58465342 + Z3FOLD_MAGIC = 0x33 + ZONEFS_MAGIC = 0x5a4f4653 + ZSMALLOC_MAGIC = 0x58295829 + _HIDIOCGRAWNAME_LEN = 0x80 + _HIDIOCGRAWPHYS_LEN = 0x40 + _HIDIOCGRAWUNIQ_LEN = 0x40 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EAGAIN = syscall.Errno(0xb) + EBADF = syscall.Errno(0x9) + EBUSY = syscall.Errno(0x10) + ECHILD = syscall.Errno(0xa) + EDOM = syscall.Errno(0x21) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISDIR = syscall.Errno(0x15) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + ENFILE = syscall.Errno(0x17) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOMEM = syscall.Errno(0xc) + ENOSPC = syscall.Errno(0x1c) + ENOTBLK = syscall.Errno(0xf) + ENOTDIR = syscall.Errno(0x14) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EPERM = syscall.Errno(0x1) + EPIPE = syscall.Errno(0x20) + ERANGE = syscall.Errno(0x22) + EROFS = syscall.Errno(0x1e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ETXTBSY = syscall.Errno(0x1a) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) +) diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go new file mode 100644 index 0000000..234fd4a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -0,0 +1,826 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include -m32 +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build 386 && linux +// +build 386,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 /build/unix/_const.go + +package unix + +import "syscall" + +const ( + B1000000 = 0x1008 + B115200 = 0x1002 + B1152000 = 0x1009 + B1500000 = 0x100a + B2000000 = 0x100b + B230400 = 0x1003 + B2500000 = 0x100c + B3000000 = 0x100d + B3500000 = 0x100e + B4000000 = 0x100f + B460800 = 0x1004 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B921600 = 0x1007 + BLKBSZGET = 0x80041270 + BLKBSZSET = 0x40041271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80041272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BS1 = 0x2000 + BSDLY = 0x2000 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIZE = 0x30 + CSTOPB = 0x40 + ECCGETLAYOUT = 0x81484d11 + ECCGETSTATS = 0x80104d12 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EPOLL_CLOEXEC = 0x80000 + EXTPROC = 0x10000 + FF1 = 0x8000 + FFDLY = 0x8000 + FICLONE = 0x40049409 + FICLONERANGE = 0x4020940d + FLUSHO = 0x1000 + FP_XSTATE_MAGIC2 = 0x46505845 + FS_IOC_ENABLE_VERITY = 0x40806685 + FS_IOC_GETFLAGS = 0x80046601 + FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SETFLAGS = 0x40046602 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + F_GETLK = 0xc + F_GETLK64 = 0xc + F_GETOWN = 0x9 + F_RDLCK = 0x0 + F_SETLK = 0xd + F_SETLK64 = 0xd + F_SETLKW = 0xe + F_SETLKW64 = 0xe + F_SETOWN = 0x8 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HIDIOCGRAWINFO = 0x80084803 + HIDIOCGRDESC = 0x90044802 + HIDIOCGRDESCSIZE = 0x80044801 + HUPCL = 0x400 + ICANON = 0x2 + IEXTEN = 0x8000 + IN_CLOEXEC = 0x80000 + IN_NONBLOCK = 0x800 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + ISIG = 0x1 + IUCLC = 0x200 + IXOFF = 0x1000 + IXON = 0x400 + MAP_32BIT = 0x40 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_STACK = 0x20000 + MAP_SYNC = 0x80000 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MEMERASE = 0x40084d02 + MEMERASE64 = 0x40104d14 + MEMGETBADBLOCK = 0x40084d0b + MEMGETINFO = 0x80204d01 + MEMGETOOBSEL = 0x80c84d0a + MEMGETREGIONCOUNT = 0x80044d07 + MEMISLOCKED = 0x80084d17 + MEMLOCK = 0x40084d05 + MEMREADOOB = 0xc00c4d04 + MEMSETBADBLOCK = 0x40084d0c + MEMUNLOCK = 0x40084d06 + MEMWRITEOOB = 0xc00c4d03 + MTDFILEMODE = 0x4d13 + NFDBITS = 0x20 + NLDLY = 0x100 + NOFLSH = 0x80 + NS_GET_NSTYPE = 0xb703 + NS_GET_OWNER_UID = 0xb704 + NS_GET_PARENT = 0xb702 + NS_GET_USERNS = 0xb701 + OLCUC = 0x2 + ONLCR = 0x4 + OTPERASE = 0x400c4d19 + OTPGETREGIONCOUNT = 0x40044d0e + OTPGETREGIONINFO = 0x400c4d0f + OTPLOCK = 0x800c4d10 + OTPSELECT = 0x80044d0d + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x4000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x8000 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + PARENB = 0x100 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80042407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4004240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc004240a + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40042406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PPPIOCATTACH = 0x4004743d + PPPIOCATTCHAN = 0x40047438 + PPPIOCBRIDGECHAN = 0x40047435 + PPPIOCCONNECT = 0x4004743a + PPPIOCDETACH = 0x4004743c + PPPIOCDISCONN = 0x7439 + PPPIOCGASYNCMAP = 0x80047458 + PPPIOCGCHAN = 0x80047437 + PPPIOCGDEBUG = 0x80047441 + PPPIOCGFLAGS = 0x8004745a + PPPIOCGIDLE = 0x8008743f + PPPIOCGIDLE32 = 0x8008743f + PPPIOCGIDLE64 = 0x8010743f + PPPIOCGL2TPSTATS = 0x80487436 + PPPIOCGMRU = 0x80047453 + PPPIOCGRASYNCMAP = 0x80047455 + PPPIOCGUNIT = 0x80047456 + PPPIOCGXASYNCMAP = 0x80207450 + PPPIOCSACTIVE = 0x40087446 + PPPIOCSASYNCMAP = 0x40047457 + PPPIOCSCOMPRESS = 0x400c744d + PPPIOCSDEBUG = 0x40047440 + PPPIOCSFLAGS = 0x40047459 + PPPIOCSMAXCID = 0x40047451 + PPPIOCSMRRU = 0x4004743b + PPPIOCSMRU = 0x40047452 + PPPIOCSNPMODE = 0x4008744b + PPPIOCSPASS = 0x40087447 + PPPIOCSRASYNCMAP = 0x40047454 + PPPIOCSXASYNCMAP = 0x4020744f + PPPIOCUNBRIDGECHAN = 0x7434 + PPPIOCXFERUNIT = 0x744e + PR_SET_PTRACER_ANY = 0xffffffff + PTRACE_GETFPREGS = 0xe + PTRACE_GETFPXREGS = 0x12 + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_SETFPREGS = 0xf + PTRACE_SETFPXREGS = 0x13 + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SINGLEBLOCK = 0x21 + PTRACE_SYSEMU = 0x1f + PTRACE_SYSEMU_SINGLESTEP = 0x20 + RLIMIT_AS = 0x9 + RLIMIT_MEMLOCK = 0x8 + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RNDADDENTROPY = 0x40085203 + RNDADDTOENTCNT = 0x40045201 + RNDCLEARPOOL = 0x5206 + RNDGETENTCNT = 0x80045200 + RNDGETPOOL = 0x80085202 + RNDRESEEDCRNG = 0x5207 + RNDZAPENTCNT = 0x5204 + RTC_AIE_OFF = 0x7002 + RTC_AIE_ON = 0x7001 + RTC_ALM_READ = 0x80247008 + RTC_ALM_SET = 0x40247007 + RTC_EPOCH_READ = 0x8004700d + RTC_EPOCH_SET = 0x4004700e + RTC_IRQP_READ = 0x8004700b + RTC_IRQP_SET = 0x4004700c + RTC_PARAM_GET = 0x40187013 + RTC_PARAM_SET = 0x40187014 + RTC_PIE_OFF = 0x7006 + RTC_PIE_ON = 0x7005 + RTC_PLL_GET = 0x801c7011 + RTC_PLL_SET = 0x401c7012 + RTC_RD_TIME = 0x80247009 + RTC_SET_TIME = 0x4024700a + RTC_UIE_OFF = 0x7004 + RTC_UIE_ON = 0x7003 + RTC_VL_CLR = 0x7014 + RTC_VL_READ = 0x80047013 + RTC_WIE_OFF = 0x7010 + RTC_WIE_ON = 0x700f + RTC_WKALM_RD = 0x80287010 + RTC_WKALM_SET = 0x4028700f + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SFD_CLOEXEC = 0x80000 + SFD_NONBLOCK = 0x800 + SIOCATMARK = 0x8905 + SIOCGPGRP = 0x8904 + SIOCGSTAMPNS_NEW = 0x80108907 + SIOCGSTAMP_NEW = 0x80108906 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCSPGRP = 0x8902 + SOCK_CLOEXEC = 0x80000 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x800 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0x1 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BINDTOIFINDEX = 0x3e + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 + SO_BUSY_POLL = 0x2e + SO_BUSY_POLL_BUDGET = 0x46 + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 + SO_NOFCS = 0x2b + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b + SO_PEERSEC = 0x1f + SO_PREFER_BUSY_POLL = 0x45 + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_RCVTIMEO_NEW = 0x42 + SO_RCVTIMEO_OLD = 0x14 + SO_RESERVE_MEM = 0x49 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_SNDTIMEO_NEW = 0x43 + SO_SNDTIMEO_OLD = 0x15 + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPING_NEW = 0x41 + SO_TIMESTAMPING_OLD = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TIMESTAMPNS_NEW = 0x40 + SO_TIMESTAMPNS_OLD = 0x23 + SO_TIMESTAMP_NEW = 0x3f + SO_TXTIME = 0x3d + SO_TYPE = 0x3 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TFD_CLOEXEC = 0x80000 + TFD_NONBLOCK = 0x800 + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGISO7816 = 0x80285442 + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSISO7816 = 0xc0285443 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TUNATTACHFILTER = 0x400854d5 + TUNDETACHFILTER = 0x400854d6 + TUNGETDEVNETNS = 0x54e3 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x800854db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETCARRIER = 0x400454e2 + TUNSETDEBUG = 0x400454c9 + TUNSETFILTEREBPF = 0x800454e1 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETSTEERINGEBPF = 0x800454e0 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UBI_IOCATT = 0x40186f40 + UBI_IOCDET = 0x40046f41 + UBI_IOCEBCH = 0x40044f02 + UBI_IOCEBER = 0x40044f01 + UBI_IOCEBISMAP = 0x80044f05 + UBI_IOCEBMAP = 0x40084f03 + UBI_IOCEBUNMAP = 0x40044f04 + UBI_IOCMKVOL = 0x40986f00 + UBI_IOCRMVOL = 0x40046f01 + UBI_IOCRNVOL = 0x51106f03 + UBI_IOCRPEB = 0x40046f04 + UBI_IOCRSVOL = 0x400c6f02 + UBI_IOCSETVOLPROP = 0x40104f06 + UBI_IOCSPEB = 0x40046f05 + UBI_IOCVOLCRBLK = 0x40804f07 + UBI_IOCVOLRMBLK = 0x4f08 + UBI_IOCVOLUP = 0x40084f00 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VMIN = 0x6 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WORDSIZE = 0x20 + X86_FXSR_MAGIC = 0x0 + XCASE = 0x4 + XTABS = 0x1800 + _HIDIOCGRAWNAME = 0x80804804 + _HIDIOCGRAWPHYS = 0x80404805 + _HIDIOCGRAWUNIQ = 0x80404808 +) + +// Errors +const ( + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + ECANCELED = syscall.Errno(0x7d) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EISCONN = syscall.Errno(0x6a) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTCONN = syscall.Errno(0x6b) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTUNIQ = syscall.Errno(0x4c) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPFNOSUPPORT = syscall.Errno(0x60) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGIO = syscall.Signal(0x1d) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "EDEADLK", "resource deadlock avoided"}, + {36, "ENAMETOOLONG", "file name too long"}, + {37, "ENOLCK", "no locks available"}, + {38, "ENOSYS", "function not implemented"}, + {39, "ENOTEMPTY", "directory not empty"}, + {40, "ELOOP", "too many levels of symbolic links"}, + {42, "ENOMSG", "no message of desired type"}, + {43, "EIDRM", "identifier removed"}, + {44, "ECHRNG", "channel number out of range"}, + {45, "EL2NSYNC", "level 2 not synchronized"}, + {46, "EL3HLT", "level 3 halted"}, + {47, "EL3RST", "level 3 reset"}, + {48, "ELNRNG", "link number out of range"}, + {49, "EUNATCH", "protocol driver not attached"}, + {50, "ENOCSI", "no CSI structure available"}, + {51, "EL2HLT", "level 2 halted"}, + {52, "EBADE", "invalid exchange"}, + {53, "EBADR", "invalid request descriptor"}, + {54, "EXFULL", "exchange full"}, + {55, "ENOANO", "no anode"}, + {56, "EBADRQC", "invalid request code"}, + {57, "EBADSLT", "invalid slot"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {72, "EMULTIHOP", "multihop attempted"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EBADMSG", "bad message"}, + {75, "EOVERFLOW", "value too large for defined data type"}, + {76, "ENOTUNIQ", "name not unique on network"}, + {77, "EBADFD", "file descriptor in bad state"}, + {78, "EREMCHG", "remote address changed"}, + {79, "ELIBACC", "can not access a needed shared library"}, + {80, "ELIBBAD", "accessing a corrupted shared library"}, + {81, "ELIBSCN", ".lib section in a.out corrupted"}, + {82, "ELIBMAX", "attempting to link in too many shared libraries"}, + {83, "ELIBEXEC", "cannot exec a shared library directly"}, + {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {85, "ERESTART", "interrupted system call should be restarted"}, + {86, "ESTRPIPE", "streams pipe error"}, + {87, "EUSERS", "too many users"}, + {88, "ENOTSOCK", "socket operation on non-socket"}, + {89, "EDESTADDRREQ", "destination address required"}, + {90, "EMSGSIZE", "message too long"}, + {91, "EPROTOTYPE", "protocol wrong type for socket"}, + {92, "ENOPROTOOPT", "protocol not available"}, + {93, "EPROTONOSUPPORT", "protocol not supported"}, + {94, "ESOCKTNOSUPPORT", "socket type not supported"}, + {95, "ENOTSUP", "operation not supported"}, + {96, "EPFNOSUPPORT", "protocol family not supported"}, + {97, "EAFNOSUPPORT", "address family not supported by protocol"}, + {98, "EADDRINUSE", "address already in use"}, + {99, "EADDRNOTAVAIL", "cannot assign requested address"}, + {100, "ENETDOWN", "network is down"}, + {101, "ENETUNREACH", "network is unreachable"}, + {102, "ENETRESET", "network dropped connection on reset"}, + {103, "ECONNABORTED", "software caused connection abort"}, + {104, "ECONNRESET", "connection reset by peer"}, + {105, "ENOBUFS", "no buffer space available"}, + {106, "EISCONN", "transport endpoint is already connected"}, + {107, "ENOTCONN", "transport endpoint is not connected"}, + {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {109, "ETOOMANYREFS", "too many references: cannot splice"}, + {110, "ETIMEDOUT", "connection timed out"}, + {111, "ECONNREFUSED", "connection refused"}, + {112, "EHOSTDOWN", "host is down"}, + {113, "EHOSTUNREACH", "no route to host"}, + {114, "EALREADY", "operation already in progress"}, + {115, "EINPROGRESS", "operation now in progress"}, + {116, "ESTALE", "stale file handle"}, + {117, "EUCLEAN", "structure needs cleaning"}, + {118, "ENOTNAM", "not a XENIX named type file"}, + {119, "ENAVAIL", "no XENIX semaphores available"}, + {120, "EISNAM", "is a named type file"}, + {121, "EREMOTEIO", "remote I/O error"}, + {122, "EDQUOT", "disk quota exceeded"}, + {123, "ENOMEDIUM", "no medium found"}, + {124, "EMEDIUMTYPE", "wrong medium type"}, + {125, "ECANCELED", "operation canceled"}, + {126, "ENOKEY", "required key not available"}, + {127, "EKEYEXPIRED", "key has expired"}, + {128, "EKEYREVOKED", "key has been revoked"}, + {129, "EKEYREJECTED", "key was rejected by service"}, + {130, "EOWNERDEAD", "owner died"}, + {131, "ENOTRECOVERABLE", "state not recoverable"}, + {132, "ERFKILL", "operation not possible due to RF-kill"}, + {133, "EHWPOISON", "memory page has hardware error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGBUS", "bus error"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGUSR1", "user defined signal 1"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGUSR2", "user defined signal 2"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGSTKFLT", "stack fault"}, + {17, "SIGCHLD", "child exited"}, + {18, "SIGCONT", "continued"}, + {19, "SIGSTOP", "stopped (signal)"}, + {20, "SIGTSTP", "stopped"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGURG", "urgent I/O condition"}, + {24, "SIGXCPU", "CPU time limit exceeded"}, + {25, "SIGXFSZ", "file size limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window changed"}, + {29, "SIGIO", "I/O possible"}, + {30, "SIGPWR", "power failure"}, + {31, "SIGSYS", "bad system call"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go new file mode 100644 index 0000000..58619b7 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -0,0 +1,826 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build amd64 && linux +// +build amd64,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 /build/unix/_const.go + +package unix + +import "syscall" + +const ( + B1000000 = 0x1008 + B115200 = 0x1002 + B1152000 = 0x1009 + B1500000 = 0x100a + B2000000 = 0x100b + B230400 = 0x1003 + B2500000 = 0x100c + B3000000 = 0x100d + B3500000 = 0x100e + B4000000 = 0x100f + B460800 = 0x1004 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B921600 = 0x1007 + BLKBSZGET = 0x80081270 + BLKBSZSET = 0x40081271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80081272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BS1 = 0x2000 + BSDLY = 0x2000 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIZE = 0x30 + CSTOPB = 0x40 + ECCGETLAYOUT = 0x81484d11 + ECCGETSTATS = 0x80104d12 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EPOLL_CLOEXEC = 0x80000 + EXTPROC = 0x10000 + FF1 = 0x8000 + FFDLY = 0x8000 + FICLONE = 0x40049409 + FICLONERANGE = 0x4020940d + FLUSHO = 0x1000 + FP_XSTATE_MAGIC2 = 0x46505845 + FS_IOC_ENABLE_VERITY = 0x40806685 + FS_IOC_GETFLAGS = 0x80086601 + FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SETFLAGS = 0x40086602 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + F_GETLK = 0x5 + F_GETLK64 = 0x5 + F_GETOWN = 0x9 + F_RDLCK = 0x0 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x8 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HIDIOCGRAWINFO = 0x80084803 + HIDIOCGRDESC = 0x90044802 + HIDIOCGRDESCSIZE = 0x80044801 + HUPCL = 0x400 + ICANON = 0x2 + IEXTEN = 0x8000 + IN_CLOEXEC = 0x80000 + IN_NONBLOCK = 0x800 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + ISIG = 0x1 + IUCLC = 0x200 + IXOFF = 0x1000 + IXON = 0x400 + MAP_32BIT = 0x40 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_STACK = 0x20000 + MAP_SYNC = 0x80000 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MEMERASE = 0x40084d02 + MEMERASE64 = 0x40104d14 + MEMGETBADBLOCK = 0x40084d0b + MEMGETINFO = 0x80204d01 + MEMGETOOBSEL = 0x80c84d0a + MEMGETREGIONCOUNT = 0x80044d07 + MEMISLOCKED = 0x80084d17 + MEMLOCK = 0x40084d05 + MEMREADOOB = 0xc0104d04 + MEMSETBADBLOCK = 0x40084d0c + MEMUNLOCK = 0x40084d06 + MEMWRITEOOB = 0xc0104d03 + MTDFILEMODE = 0x4d13 + NFDBITS = 0x40 + NLDLY = 0x100 + NOFLSH = 0x80 + NS_GET_NSTYPE = 0xb703 + NS_GET_OWNER_UID = 0xb704 + NS_GET_PARENT = 0xb702 + NS_GET_USERNS = 0xb701 + OLCUC = 0x2 + ONLCR = 0x4 + OTPERASE = 0x400c4d19 + OTPGETREGIONCOUNT = 0x40044d0e + OTPGETREGIONINFO = 0x400c4d0f + OTPLOCK = 0x800c4d10 + OTPSELECT = 0x80044d0d + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x4000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + PARENB = 0x100 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80082407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc008240a + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PPPIOCATTACH = 0x4004743d + PPPIOCATTCHAN = 0x40047438 + PPPIOCBRIDGECHAN = 0x40047435 + PPPIOCCONNECT = 0x4004743a + PPPIOCDETACH = 0x4004743c + PPPIOCDISCONN = 0x7439 + PPPIOCGASYNCMAP = 0x80047458 + PPPIOCGCHAN = 0x80047437 + PPPIOCGDEBUG = 0x80047441 + PPPIOCGFLAGS = 0x8004745a + PPPIOCGIDLE = 0x8010743f + PPPIOCGIDLE32 = 0x8008743f + PPPIOCGIDLE64 = 0x8010743f + PPPIOCGL2TPSTATS = 0x80487436 + PPPIOCGMRU = 0x80047453 + PPPIOCGRASYNCMAP = 0x80047455 + PPPIOCGUNIT = 0x80047456 + PPPIOCGXASYNCMAP = 0x80207450 + PPPIOCSACTIVE = 0x40107446 + PPPIOCSASYNCMAP = 0x40047457 + PPPIOCSCOMPRESS = 0x4010744d + PPPIOCSDEBUG = 0x40047440 + PPPIOCSFLAGS = 0x40047459 + PPPIOCSMAXCID = 0x40047451 + PPPIOCSMRRU = 0x4004743b + PPPIOCSMRU = 0x40047452 + PPPIOCSNPMODE = 0x4008744b + PPPIOCSPASS = 0x40107447 + PPPIOCSRASYNCMAP = 0x40047454 + PPPIOCSXASYNCMAP = 0x4020744f + PPPIOCUNBRIDGECHAN = 0x7434 + PPPIOCXFERUNIT = 0x744e + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTRACE_ARCH_PRCTL = 0x1e + PTRACE_GETFPREGS = 0xe + PTRACE_GETFPXREGS = 0x12 + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_SETFPREGS = 0xf + PTRACE_SETFPXREGS = 0x13 + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SINGLEBLOCK = 0x21 + PTRACE_SYSEMU = 0x1f + PTRACE_SYSEMU_SINGLESTEP = 0x20 + RLIMIT_AS = 0x9 + RLIMIT_MEMLOCK = 0x8 + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RNDADDENTROPY = 0x40085203 + RNDADDTOENTCNT = 0x40045201 + RNDCLEARPOOL = 0x5206 + RNDGETENTCNT = 0x80045200 + RNDGETPOOL = 0x80085202 + RNDRESEEDCRNG = 0x5207 + RNDZAPENTCNT = 0x5204 + RTC_AIE_OFF = 0x7002 + RTC_AIE_ON = 0x7001 + RTC_ALM_READ = 0x80247008 + RTC_ALM_SET = 0x40247007 + RTC_EPOCH_READ = 0x8008700d + RTC_EPOCH_SET = 0x4008700e + RTC_IRQP_READ = 0x8008700b + RTC_IRQP_SET = 0x4008700c + RTC_PARAM_GET = 0x40187013 + RTC_PARAM_SET = 0x40187014 + RTC_PIE_OFF = 0x7006 + RTC_PIE_ON = 0x7005 + RTC_PLL_GET = 0x80207011 + RTC_PLL_SET = 0x40207012 + RTC_RD_TIME = 0x80247009 + RTC_SET_TIME = 0x4024700a + RTC_UIE_OFF = 0x7004 + RTC_UIE_ON = 0x7003 + RTC_VL_CLR = 0x7014 + RTC_VL_READ = 0x80047013 + RTC_WIE_OFF = 0x7010 + RTC_WIE_ON = 0x700f + RTC_WKALM_RD = 0x80287010 + RTC_WKALM_SET = 0x4028700f + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SFD_CLOEXEC = 0x80000 + SFD_NONBLOCK = 0x800 + SIOCATMARK = 0x8905 + SIOCGPGRP = 0x8904 + SIOCGSTAMPNS_NEW = 0x80108907 + SIOCGSTAMP_NEW = 0x80108906 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCSPGRP = 0x8902 + SOCK_CLOEXEC = 0x80000 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x800 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0x1 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BINDTOIFINDEX = 0x3e + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 + SO_BUSY_POLL = 0x2e + SO_BUSY_POLL_BUDGET = 0x46 + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 + SO_NOFCS = 0x2b + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b + SO_PEERSEC = 0x1f + SO_PREFER_BUSY_POLL = 0x45 + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_RCVTIMEO_NEW = 0x42 + SO_RCVTIMEO_OLD = 0x14 + SO_RESERVE_MEM = 0x49 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_SNDTIMEO_NEW = 0x43 + SO_SNDTIMEO_OLD = 0x15 + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPING_NEW = 0x41 + SO_TIMESTAMPING_OLD = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TIMESTAMPNS_NEW = 0x40 + SO_TIMESTAMPNS_OLD = 0x23 + SO_TIMESTAMP_NEW = 0x3f + SO_TXTIME = 0x3d + SO_TYPE = 0x3 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TFD_CLOEXEC = 0x80000 + TFD_NONBLOCK = 0x800 + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGISO7816 = 0x80285442 + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSISO7816 = 0xc0285443 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TUNATTACHFILTER = 0x401054d5 + TUNDETACHFILTER = 0x401054d6 + TUNGETDEVNETNS = 0x54e3 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x801054db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETCARRIER = 0x400454e2 + TUNSETDEBUG = 0x400454c9 + TUNSETFILTEREBPF = 0x800454e1 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETSTEERINGEBPF = 0x800454e0 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UBI_IOCATT = 0x40186f40 + UBI_IOCDET = 0x40046f41 + UBI_IOCEBCH = 0x40044f02 + UBI_IOCEBER = 0x40044f01 + UBI_IOCEBISMAP = 0x80044f05 + UBI_IOCEBMAP = 0x40084f03 + UBI_IOCEBUNMAP = 0x40044f04 + UBI_IOCMKVOL = 0x40986f00 + UBI_IOCRMVOL = 0x40046f01 + UBI_IOCRNVOL = 0x51106f03 + UBI_IOCRPEB = 0x40046f04 + UBI_IOCRSVOL = 0x400c6f02 + UBI_IOCSETVOLPROP = 0x40104f06 + UBI_IOCSPEB = 0x40046f05 + UBI_IOCVOLCRBLK = 0x40804f07 + UBI_IOCVOLRMBLK = 0x4f08 + UBI_IOCVOLUP = 0x40084f00 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VMIN = 0x6 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WORDSIZE = 0x40 + XCASE = 0x4 + XTABS = 0x1800 + _HIDIOCGRAWNAME = 0x80804804 + _HIDIOCGRAWPHYS = 0x80404805 + _HIDIOCGRAWUNIQ = 0x80404808 +) + +// Errors +const ( + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + ECANCELED = syscall.Errno(0x7d) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EISCONN = syscall.Errno(0x6a) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTCONN = syscall.Errno(0x6b) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTUNIQ = syscall.Errno(0x4c) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPFNOSUPPORT = syscall.Errno(0x60) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGIO = syscall.Signal(0x1d) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "EDEADLK", "resource deadlock avoided"}, + {36, "ENAMETOOLONG", "file name too long"}, + {37, "ENOLCK", "no locks available"}, + {38, "ENOSYS", "function not implemented"}, + {39, "ENOTEMPTY", "directory not empty"}, + {40, "ELOOP", "too many levels of symbolic links"}, + {42, "ENOMSG", "no message of desired type"}, + {43, "EIDRM", "identifier removed"}, + {44, "ECHRNG", "channel number out of range"}, + {45, "EL2NSYNC", "level 2 not synchronized"}, + {46, "EL3HLT", "level 3 halted"}, + {47, "EL3RST", "level 3 reset"}, + {48, "ELNRNG", "link number out of range"}, + {49, "EUNATCH", "protocol driver not attached"}, + {50, "ENOCSI", "no CSI structure available"}, + {51, "EL2HLT", "level 2 halted"}, + {52, "EBADE", "invalid exchange"}, + {53, "EBADR", "invalid request descriptor"}, + {54, "EXFULL", "exchange full"}, + {55, "ENOANO", "no anode"}, + {56, "EBADRQC", "invalid request code"}, + {57, "EBADSLT", "invalid slot"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {72, "EMULTIHOP", "multihop attempted"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EBADMSG", "bad message"}, + {75, "EOVERFLOW", "value too large for defined data type"}, + {76, "ENOTUNIQ", "name not unique on network"}, + {77, "EBADFD", "file descriptor in bad state"}, + {78, "EREMCHG", "remote address changed"}, + {79, "ELIBACC", "can not access a needed shared library"}, + {80, "ELIBBAD", "accessing a corrupted shared library"}, + {81, "ELIBSCN", ".lib section in a.out corrupted"}, + {82, "ELIBMAX", "attempting to link in too many shared libraries"}, + {83, "ELIBEXEC", "cannot exec a shared library directly"}, + {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {85, "ERESTART", "interrupted system call should be restarted"}, + {86, "ESTRPIPE", "streams pipe error"}, + {87, "EUSERS", "too many users"}, + {88, "ENOTSOCK", "socket operation on non-socket"}, + {89, "EDESTADDRREQ", "destination address required"}, + {90, "EMSGSIZE", "message too long"}, + {91, "EPROTOTYPE", "protocol wrong type for socket"}, + {92, "ENOPROTOOPT", "protocol not available"}, + {93, "EPROTONOSUPPORT", "protocol not supported"}, + {94, "ESOCKTNOSUPPORT", "socket type not supported"}, + {95, "ENOTSUP", "operation not supported"}, + {96, "EPFNOSUPPORT", "protocol family not supported"}, + {97, "EAFNOSUPPORT", "address family not supported by protocol"}, + {98, "EADDRINUSE", "address already in use"}, + {99, "EADDRNOTAVAIL", "cannot assign requested address"}, + {100, "ENETDOWN", "network is down"}, + {101, "ENETUNREACH", "network is unreachable"}, + {102, "ENETRESET", "network dropped connection on reset"}, + {103, "ECONNABORTED", "software caused connection abort"}, + {104, "ECONNRESET", "connection reset by peer"}, + {105, "ENOBUFS", "no buffer space available"}, + {106, "EISCONN", "transport endpoint is already connected"}, + {107, "ENOTCONN", "transport endpoint is not connected"}, + {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {109, "ETOOMANYREFS", "too many references: cannot splice"}, + {110, "ETIMEDOUT", "connection timed out"}, + {111, "ECONNREFUSED", "connection refused"}, + {112, "EHOSTDOWN", "host is down"}, + {113, "EHOSTUNREACH", "no route to host"}, + {114, "EALREADY", "operation already in progress"}, + {115, "EINPROGRESS", "operation now in progress"}, + {116, "ESTALE", "stale file handle"}, + {117, "EUCLEAN", "structure needs cleaning"}, + {118, "ENOTNAM", "not a XENIX named type file"}, + {119, "ENAVAIL", "no XENIX semaphores available"}, + {120, "EISNAM", "is a named type file"}, + {121, "EREMOTEIO", "remote I/O error"}, + {122, "EDQUOT", "disk quota exceeded"}, + {123, "ENOMEDIUM", "no medium found"}, + {124, "EMEDIUMTYPE", "wrong medium type"}, + {125, "ECANCELED", "operation canceled"}, + {126, "ENOKEY", "required key not available"}, + {127, "EKEYEXPIRED", "key has expired"}, + {128, "EKEYREVOKED", "key has been revoked"}, + {129, "EKEYREJECTED", "key was rejected by service"}, + {130, "EOWNERDEAD", "owner died"}, + {131, "ENOTRECOVERABLE", "state not recoverable"}, + {132, "ERFKILL", "operation not possible due to RF-kill"}, + {133, "EHWPOISON", "memory page has hardware error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGBUS", "bus error"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGUSR1", "user defined signal 1"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGUSR2", "user defined signal 2"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGSTKFLT", "stack fault"}, + {17, "SIGCHLD", "child exited"}, + {18, "SIGCONT", "continued"}, + {19, "SIGSTOP", "stopped (signal)"}, + {20, "SIGTSTP", "stopped"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGURG", "urgent I/O condition"}, + {24, "SIGXCPU", "CPU time limit exceeded"}, + {25, "SIGXFSZ", "file size limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window changed"}, + {29, "SIGIO", "I/O possible"}, + {30, "SIGPWR", "power failure"}, + {31, "SIGSYS", "bad system call"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go new file mode 100644 index 0000000..3a64ff5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -0,0 +1,832 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm && linux +// +build arm,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go + +package unix + +import "syscall" + +const ( + B1000000 = 0x1008 + B115200 = 0x1002 + B1152000 = 0x1009 + B1500000 = 0x100a + B2000000 = 0x100b + B230400 = 0x1003 + B2500000 = 0x100c + B3000000 = 0x100d + B3500000 = 0x100e + B4000000 = 0x100f + B460800 = 0x1004 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B921600 = 0x1007 + BLKBSZGET = 0x80041270 + BLKBSZSET = 0x40041271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80041272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BS1 = 0x2000 + BSDLY = 0x2000 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIZE = 0x30 + CSTOPB = 0x40 + ECCGETLAYOUT = 0x81484d11 + ECCGETSTATS = 0x80104d12 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EPOLL_CLOEXEC = 0x80000 + EXTPROC = 0x10000 + FF1 = 0x8000 + FFDLY = 0x8000 + FICLONE = 0x40049409 + FICLONERANGE = 0x4020940d + FLUSHO = 0x1000 + FS_IOC_ENABLE_VERITY = 0x40806685 + FS_IOC_GETFLAGS = 0x80046601 + FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SETFLAGS = 0x40046602 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + F_GETLK = 0xc + F_GETLK64 = 0xc + F_GETOWN = 0x9 + F_RDLCK = 0x0 + F_SETLK = 0xd + F_SETLK64 = 0xd + F_SETLKW = 0xe + F_SETLKW64 = 0xe + F_SETOWN = 0x8 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HIDIOCGRAWINFO = 0x80084803 + HIDIOCGRDESC = 0x90044802 + HIDIOCGRDESCSIZE = 0x80044801 + HUPCL = 0x400 + ICANON = 0x2 + IEXTEN = 0x8000 + IN_CLOEXEC = 0x80000 + IN_NONBLOCK = 0x800 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + ISIG = 0x1 + IUCLC = 0x200 + IXOFF = 0x1000 + IXON = 0x400 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_STACK = 0x20000 + MAP_SYNC = 0x80000 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MEMERASE = 0x40084d02 + MEMERASE64 = 0x40104d14 + MEMGETBADBLOCK = 0x40084d0b + MEMGETINFO = 0x80204d01 + MEMGETOOBSEL = 0x80c84d0a + MEMGETREGIONCOUNT = 0x80044d07 + MEMISLOCKED = 0x80084d17 + MEMLOCK = 0x40084d05 + MEMREADOOB = 0xc00c4d04 + MEMSETBADBLOCK = 0x40084d0c + MEMUNLOCK = 0x40084d06 + MEMWRITEOOB = 0xc00c4d03 + MTDFILEMODE = 0x4d13 + NFDBITS = 0x20 + NLDLY = 0x100 + NOFLSH = 0x80 + NS_GET_NSTYPE = 0xb703 + NS_GET_OWNER_UID = 0xb704 + NS_GET_PARENT = 0xb702 + NS_GET_USERNS = 0xb701 + OLCUC = 0x2 + ONLCR = 0x4 + OTPERASE = 0x400c4d19 + OTPGETREGIONCOUNT = 0x40044d0e + OTPGETREGIONINFO = 0x400c4d0f + OTPLOCK = 0x800c4d10 + OTPSELECT = 0x80044d0d + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x4000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x20000 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x8000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x404000 + O_TRUNC = 0x200 + PARENB = 0x100 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80042407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4004240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc004240a + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40042406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PPPIOCATTACH = 0x4004743d + PPPIOCATTCHAN = 0x40047438 + PPPIOCBRIDGECHAN = 0x40047435 + PPPIOCCONNECT = 0x4004743a + PPPIOCDETACH = 0x4004743c + PPPIOCDISCONN = 0x7439 + PPPIOCGASYNCMAP = 0x80047458 + PPPIOCGCHAN = 0x80047437 + PPPIOCGDEBUG = 0x80047441 + PPPIOCGFLAGS = 0x8004745a + PPPIOCGIDLE = 0x8008743f + PPPIOCGIDLE32 = 0x8008743f + PPPIOCGIDLE64 = 0x8010743f + PPPIOCGL2TPSTATS = 0x80487436 + PPPIOCGMRU = 0x80047453 + PPPIOCGRASYNCMAP = 0x80047455 + PPPIOCGUNIT = 0x80047456 + PPPIOCGXASYNCMAP = 0x80207450 + PPPIOCSACTIVE = 0x40087446 + PPPIOCSASYNCMAP = 0x40047457 + PPPIOCSCOMPRESS = 0x400c744d + PPPIOCSDEBUG = 0x40047440 + PPPIOCSFLAGS = 0x40047459 + PPPIOCSMAXCID = 0x40047451 + PPPIOCSMRRU = 0x4004743b + PPPIOCSMRU = 0x40047452 + PPPIOCSNPMODE = 0x4008744b + PPPIOCSPASS = 0x40087447 + PPPIOCSRASYNCMAP = 0x40047454 + PPPIOCSXASYNCMAP = 0x4020744f + PPPIOCUNBRIDGECHAN = 0x7434 + PPPIOCXFERUNIT = 0x744e + PR_SET_PTRACER_ANY = 0xffffffff + PTRACE_GETCRUNCHREGS = 0x19 + PTRACE_GETFDPIC = 0x1f + PTRACE_GETFDPIC_EXEC = 0x0 + PTRACE_GETFDPIC_INTERP = 0x1 + PTRACE_GETFPREGS = 0xe + PTRACE_GETHBPREGS = 0x1d + PTRACE_GETVFPREGS = 0x1b + PTRACE_GETWMMXREGS = 0x12 + PTRACE_GET_THREAD_AREA = 0x16 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_SETCRUNCHREGS = 0x1a + PTRACE_SETFPREGS = 0xf + PTRACE_SETHBPREGS = 0x1e + PTRACE_SETVFPREGS = 0x1c + PTRACE_SETWMMXREGS = 0x13 + PTRACE_SET_SYSCALL = 0x17 + PT_DATA_ADDR = 0x10004 + PT_TEXT_ADDR = 0x10000 + PT_TEXT_END_ADDR = 0x10008 + RLIMIT_AS = 0x9 + RLIMIT_MEMLOCK = 0x8 + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RNDADDENTROPY = 0x40085203 + RNDADDTOENTCNT = 0x40045201 + RNDCLEARPOOL = 0x5206 + RNDGETENTCNT = 0x80045200 + RNDGETPOOL = 0x80085202 + RNDRESEEDCRNG = 0x5207 + RNDZAPENTCNT = 0x5204 + RTC_AIE_OFF = 0x7002 + RTC_AIE_ON = 0x7001 + RTC_ALM_READ = 0x80247008 + RTC_ALM_SET = 0x40247007 + RTC_EPOCH_READ = 0x8004700d + RTC_EPOCH_SET = 0x4004700e + RTC_IRQP_READ = 0x8004700b + RTC_IRQP_SET = 0x4004700c + RTC_PARAM_GET = 0x40187013 + RTC_PARAM_SET = 0x40187014 + RTC_PIE_OFF = 0x7006 + RTC_PIE_ON = 0x7005 + RTC_PLL_GET = 0x801c7011 + RTC_PLL_SET = 0x401c7012 + RTC_RD_TIME = 0x80247009 + RTC_SET_TIME = 0x4024700a + RTC_UIE_OFF = 0x7004 + RTC_UIE_ON = 0x7003 + RTC_VL_CLR = 0x7014 + RTC_VL_READ = 0x80047013 + RTC_WIE_OFF = 0x7010 + RTC_WIE_ON = 0x700f + RTC_WKALM_RD = 0x80287010 + RTC_WKALM_SET = 0x4028700f + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SFD_CLOEXEC = 0x80000 + SFD_NONBLOCK = 0x800 + SIOCATMARK = 0x8905 + SIOCGPGRP = 0x8904 + SIOCGSTAMPNS_NEW = 0x80108907 + SIOCGSTAMP_NEW = 0x80108906 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCSPGRP = 0x8902 + SOCK_CLOEXEC = 0x80000 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x800 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0x1 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BINDTOIFINDEX = 0x3e + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 + SO_BUSY_POLL = 0x2e + SO_BUSY_POLL_BUDGET = 0x46 + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 + SO_NOFCS = 0x2b + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b + SO_PEERSEC = 0x1f + SO_PREFER_BUSY_POLL = 0x45 + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_RCVTIMEO_NEW = 0x42 + SO_RCVTIMEO_OLD = 0x14 + SO_RESERVE_MEM = 0x49 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_SNDTIMEO_NEW = 0x43 + SO_SNDTIMEO_OLD = 0x15 + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPING_NEW = 0x41 + SO_TIMESTAMPING_OLD = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TIMESTAMPNS_NEW = 0x40 + SO_TIMESTAMPNS_OLD = 0x23 + SO_TIMESTAMP_NEW = 0x3f + SO_TXTIME = 0x3d + SO_TYPE = 0x3 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TFD_CLOEXEC = 0x80000 + TFD_NONBLOCK = 0x800 + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGISO7816 = 0x80285442 + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSISO7816 = 0xc0285443 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TUNATTACHFILTER = 0x400854d5 + TUNDETACHFILTER = 0x400854d6 + TUNGETDEVNETNS = 0x54e3 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x800854db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETCARRIER = 0x400454e2 + TUNSETDEBUG = 0x400454c9 + TUNSETFILTEREBPF = 0x800454e1 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETSTEERINGEBPF = 0x800454e0 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UBI_IOCATT = 0x40186f40 + UBI_IOCDET = 0x40046f41 + UBI_IOCEBCH = 0x40044f02 + UBI_IOCEBER = 0x40044f01 + UBI_IOCEBISMAP = 0x80044f05 + UBI_IOCEBMAP = 0x40084f03 + UBI_IOCEBUNMAP = 0x40044f04 + UBI_IOCMKVOL = 0x40986f00 + UBI_IOCRMVOL = 0x40046f01 + UBI_IOCRNVOL = 0x51106f03 + UBI_IOCRPEB = 0x40046f04 + UBI_IOCRSVOL = 0x400c6f02 + UBI_IOCSETVOLPROP = 0x40104f06 + UBI_IOCSPEB = 0x40046f05 + UBI_IOCVOLCRBLK = 0x40804f07 + UBI_IOCVOLRMBLK = 0x4f08 + UBI_IOCVOLUP = 0x40084f00 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VMIN = 0x6 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WORDSIZE = 0x20 + XCASE = 0x4 + XTABS = 0x1800 + _HIDIOCGRAWNAME = 0x80804804 + _HIDIOCGRAWPHYS = 0x80404805 + _HIDIOCGRAWUNIQ = 0x80404808 +) + +// Errors +const ( + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + ECANCELED = syscall.Errno(0x7d) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EISCONN = syscall.Errno(0x6a) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTCONN = syscall.Errno(0x6b) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTUNIQ = syscall.Errno(0x4c) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPFNOSUPPORT = syscall.Errno(0x60) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGIO = syscall.Signal(0x1d) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "EDEADLK", "resource deadlock avoided"}, + {36, "ENAMETOOLONG", "file name too long"}, + {37, "ENOLCK", "no locks available"}, + {38, "ENOSYS", "function not implemented"}, + {39, "ENOTEMPTY", "directory not empty"}, + {40, "ELOOP", "too many levels of symbolic links"}, + {42, "ENOMSG", "no message of desired type"}, + {43, "EIDRM", "identifier removed"}, + {44, "ECHRNG", "channel number out of range"}, + {45, "EL2NSYNC", "level 2 not synchronized"}, + {46, "EL3HLT", "level 3 halted"}, + {47, "EL3RST", "level 3 reset"}, + {48, "ELNRNG", "link number out of range"}, + {49, "EUNATCH", "protocol driver not attached"}, + {50, "ENOCSI", "no CSI structure available"}, + {51, "EL2HLT", "level 2 halted"}, + {52, "EBADE", "invalid exchange"}, + {53, "EBADR", "invalid request descriptor"}, + {54, "EXFULL", "exchange full"}, + {55, "ENOANO", "no anode"}, + {56, "EBADRQC", "invalid request code"}, + {57, "EBADSLT", "invalid slot"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {72, "EMULTIHOP", "multihop attempted"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EBADMSG", "bad message"}, + {75, "EOVERFLOW", "value too large for defined data type"}, + {76, "ENOTUNIQ", "name not unique on network"}, + {77, "EBADFD", "file descriptor in bad state"}, + {78, "EREMCHG", "remote address changed"}, + {79, "ELIBACC", "can not access a needed shared library"}, + {80, "ELIBBAD", "accessing a corrupted shared library"}, + {81, "ELIBSCN", ".lib section in a.out corrupted"}, + {82, "ELIBMAX", "attempting to link in too many shared libraries"}, + {83, "ELIBEXEC", "cannot exec a shared library directly"}, + {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {85, "ERESTART", "interrupted system call should be restarted"}, + {86, "ESTRPIPE", "streams pipe error"}, + {87, "EUSERS", "too many users"}, + {88, "ENOTSOCK", "socket operation on non-socket"}, + {89, "EDESTADDRREQ", "destination address required"}, + {90, "EMSGSIZE", "message too long"}, + {91, "EPROTOTYPE", "protocol wrong type for socket"}, + {92, "ENOPROTOOPT", "protocol not available"}, + {93, "EPROTONOSUPPORT", "protocol not supported"}, + {94, "ESOCKTNOSUPPORT", "socket type not supported"}, + {95, "ENOTSUP", "operation not supported"}, + {96, "EPFNOSUPPORT", "protocol family not supported"}, + {97, "EAFNOSUPPORT", "address family not supported by protocol"}, + {98, "EADDRINUSE", "address already in use"}, + {99, "EADDRNOTAVAIL", "cannot assign requested address"}, + {100, "ENETDOWN", "network is down"}, + {101, "ENETUNREACH", "network is unreachable"}, + {102, "ENETRESET", "network dropped connection on reset"}, + {103, "ECONNABORTED", "software caused connection abort"}, + {104, "ECONNRESET", "connection reset by peer"}, + {105, "ENOBUFS", "no buffer space available"}, + {106, "EISCONN", "transport endpoint is already connected"}, + {107, "ENOTCONN", "transport endpoint is not connected"}, + {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {109, "ETOOMANYREFS", "too many references: cannot splice"}, + {110, "ETIMEDOUT", "connection timed out"}, + {111, "ECONNREFUSED", "connection refused"}, + {112, "EHOSTDOWN", "host is down"}, + {113, "EHOSTUNREACH", "no route to host"}, + {114, "EALREADY", "operation already in progress"}, + {115, "EINPROGRESS", "operation now in progress"}, + {116, "ESTALE", "stale file handle"}, + {117, "EUCLEAN", "structure needs cleaning"}, + {118, "ENOTNAM", "not a XENIX named type file"}, + {119, "ENAVAIL", "no XENIX semaphores available"}, + {120, "EISNAM", "is a named type file"}, + {121, "EREMOTEIO", "remote I/O error"}, + {122, "EDQUOT", "disk quota exceeded"}, + {123, "ENOMEDIUM", "no medium found"}, + {124, "EMEDIUMTYPE", "wrong medium type"}, + {125, "ECANCELED", "operation canceled"}, + {126, "ENOKEY", "required key not available"}, + {127, "EKEYEXPIRED", "key has expired"}, + {128, "EKEYREVOKED", "key has been revoked"}, + {129, "EKEYREJECTED", "key was rejected by service"}, + {130, "EOWNERDEAD", "owner died"}, + {131, "ENOTRECOVERABLE", "state not recoverable"}, + {132, "ERFKILL", "operation not possible due to RF-kill"}, + {133, "EHWPOISON", "memory page has hardware error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGBUS", "bus error"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGUSR1", "user defined signal 1"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGUSR2", "user defined signal 2"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGSTKFLT", "stack fault"}, + {17, "SIGCHLD", "child exited"}, + {18, "SIGCONT", "continued"}, + {19, "SIGSTOP", "stopped (signal)"}, + {20, "SIGTSTP", "stopped"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGURG", "urgent I/O condition"}, + {24, "SIGXCPU", "CPU time limit exceeded"}, + {25, "SIGXFSZ", "file size limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window changed"}, + {29, "SIGIO", "I/O possible"}, + {30, "SIGPWR", "power failure"}, + {31, "SIGSYS", "bad system call"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go new file mode 100644 index 0000000..abe0b92 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -0,0 +1,823 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include -fsigned-char +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm64 && linux +// +build arm64,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/_const.go + +package unix + +import "syscall" + +const ( + B1000000 = 0x1008 + B115200 = 0x1002 + B1152000 = 0x1009 + B1500000 = 0x100a + B2000000 = 0x100b + B230400 = 0x1003 + B2500000 = 0x100c + B3000000 = 0x100d + B3500000 = 0x100e + B4000000 = 0x100f + B460800 = 0x1004 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B921600 = 0x1007 + BLKBSZGET = 0x80081270 + BLKBSZSET = 0x40081271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80081272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BS1 = 0x2000 + BSDLY = 0x2000 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIZE = 0x30 + CSTOPB = 0x40 + ECCGETLAYOUT = 0x81484d11 + ECCGETSTATS = 0x80104d12 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EPOLL_CLOEXEC = 0x80000 + ESR_MAGIC = 0x45535201 + EXTPROC = 0x10000 + EXTRA_MAGIC = 0x45585401 + FF1 = 0x8000 + FFDLY = 0x8000 + FICLONE = 0x40049409 + FICLONERANGE = 0x4020940d + FLUSHO = 0x1000 + FPSIMD_MAGIC = 0x46508001 + FS_IOC_ENABLE_VERITY = 0x40806685 + FS_IOC_GETFLAGS = 0x80086601 + FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SETFLAGS = 0x40086602 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + F_GETLK = 0x5 + F_GETLK64 = 0x5 + F_GETOWN = 0x9 + F_RDLCK = 0x0 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x8 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HIDIOCGRAWINFO = 0x80084803 + HIDIOCGRDESC = 0x90044802 + HIDIOCGRDESCSIZE = 0x80044801 + HUPCL = 0x400 + ICANON = 0x2 + IEXTEN = 0x8000 + IN_CLOEXEC = 0x80000 + IN_NONBLOCK = 0x800 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + ISIG = 0x1 + IUCLC = 0x200 + IXOFF = 0x1000 + IXON = 0x400 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_STACK = 0x20000 + MAP_SYNC = 0x80000 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MEMERASE = 0x40084d02 + MEMERASE64 = 0x40104d14 + MEMGETBADBLOCK = 0x40084d0b + MEMGETINFO = 0x80204d01 + MEMGETOOBSEL = 0x80c84d0a + MEMGETREGIONCOUNT = 0x80044d07 + MEMISLOCKED = 0x80084d17 + MEMLOCK = 0x40084d05 + MEMREADOOB = 0xc0104d04 + MEMSETBADBLOCK = 0x40084d0c + MEMUNLOCK = 0x40084d06 + MEMWRITEOOB = 0xc0104d03 + MTDFILEMODE = 0x4d13 + NFDBITS = 0x40 + NLDLY = 0x100 + NOFLSH = 0x80 + NS_GET_NSTYPE = 0xb703 + NS_GET_OWNER_UID = 0xb704 + NS_GET_PARENT = 0xb702 + NS_GET_USERNS = 0xb701 + OLCUC = 0x2 + ONLCR = 0x4 + OTPERASE = 0x400c4d19 + OTPGETREGIONCOUNT = 0x40044d0e + OTPGETREGIONINFO = 0x400c4d0f + OTPLOCK = 0x800c4d10 + OTPSELECT = 0x80044d0d + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x4000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x8000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x404000 + O_TRUNC = 0x200 + PARENB = 0x100 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80082407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc008240a + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PPPIOCATTACH = 0x4004743d + PPPIOCATTCHAN = 0x40047438 + PPPIOCBRIDGECHAN = 0x40047435 + PPPIOCCONNECT = 0x4004743a + PPPIOCDETACH = 0x4004743c + PPPIOCDISCONN = 0x7439 + PPPIOCGASYNCMAP = 0x80047458 + PPPIOCGCHAN = 0x80047437 + PPPIOCGDEBUG = 0x80047441 + PPPIOCGFLAGS = 0x8004745a + PPPIOCGIDLE = 0x8010743f + PPPIOCGIDLE32 = 0x8008743f + PPPIOCGIDLE64 = 0x8010743f + PPPIOCGL2TPSTATS = 0x80487436 + PPPIOCGMRU = 0x80047453 + PPPIOCGRASYNCMAP = 0x80047455 + PPPIOCGUNIT = 0x80047456 + PPPIOCGXASYNCMAP = 0x80207450 + PPPIOCSACTIVE = 0x40107446 + PPPIOCSASYNCMAP = 0x40047457 + PPPIOCSCOMPRESS = 0x4010744d + PPPIOCSDEBUG = 0x40047440 + PPPIOCSFLAGS = 0x40047459 + PPPIOCSMAXCID = 0x40047451 + PPPIOCSMRRU = 0x4004743b + PPPIOCSMRU = 0x40047452 + PPPIOCSNPMODE = 0x4008744b + PPPIOCSPASS = 0x40107447 + PPPIOCSRASYNCMAP = 0x40047454 + PPPIOCSXASYNCMAP = 0x4020744f + PPPIOCUNBRIDGECHAN = 0x7434 + PPPIOCXFERUNIT = 0x744e + PROT_BTI = 0x10 + PROT_MTE = 0x20 + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTRACE_PEEKMTETAGS = 0x21 + PTRACE_POKEMTETAGS = 0x22 + PTRACE_SYSEMU = 0x1f + PTRACE_SYSEMU_SINGLESTEP = 0x20 + RLIMIT_AS = 0x9 + RLIMIT_MEMLOCK = 0x8 + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RNDADDENTROPY = 0x40085203 + RNDADDTOENTCNT = 0x40045201 + RNDCLEARPOOL = 0x5206 + RNDGETENTCNT = 0x80045200 + RNDGETPOOL = 0x80085202 + RNDRESEEDCRNG = 0x5207 + RNDZAPENTCNT = 0x5204 + RTC_AIE_OFF = 0x7002 + RTC_AIE_ON = 0x7001 + RTC_ALM_READ = 0x80247008 + RTC_ALM_SET = 0x40247007 + RTC_EPOCH_READ = 0x8008700d + RTC_EPOCH_SET = 0x4008700e + RTC_IRQP_READ = 0x8008700b + RTC_IRQP_SET = 0x4008700c + RTC_PARAM_GET = 0x40187013 + RTC_PARAM_SET = 0x40187014 + RTC_PIE_OFF = 0x7006 + RTC_PIE_ON = 0x7005 + RTC_PLL_GET = 0x80207011 + RTC_PLL_SET = 0x40207012 + RTC_RD_TIME = 0x80247009 + RTC_SET_TIME = 0x4024700a + RTC_UIE_OFF = 0x7004 + RTC_UIE_ON = 0x7003 + RTC_VL_CLR = 0x7014 + RTC_VL_READ = 0x80047013 + RTC_WIE_OFF = 0x7010 + RTC_WIE_ON = 0x700f + RTC_WKALM_RD = 0x80287010 + RTC_WKALM_SET = 0x4028700f + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SFD_CLOEXEC = 0x80000 + SFD_NONBLOCK = 0x800 + SIOCATMARK = 0x8905 + SIOCGPGRP = 0x8904 + SIOCGSTAMPNS_NEW = 0x80108907 + SIOCGSTAMP_NEW = 0x80108906 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCSPGRP = 0x8902 + SOCK_CLOEXEC = 0x80000 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x800 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0x1 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BINDTOIFINDEX = 0x3e + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 + SO_BUSY_POLL = 0x2e + SO_BUSY_POLL_BUDGET = 0x46 + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 + SO_NOFCS = 0x2b + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b + SO_PEERSEC = 0x1f + SO_PREFER_BUSY_POLL = 0x45 + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_RCVTIMEO_NEW = 0x42 + SO_RCVTIMEO_OLD = 0x14 + SO_RESERVE_MEM = 0x49 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_SNDTIMEO_NEW = 0x43 + SO_SNDTIMEO_OLD = 0x15 + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPING_NEW = 0x41 + SO_TIMESTAMPING_OLD = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TIMESTAMPNS_NEW = 0x40 + SO_TIMESTAMPNS_OLD = 0x23 + SO_TIMESTAMP_NEW = 0x3f + SO_TXTIME = 0x3d + SO_TYPE = 0x3 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + SVE_MAGIC = 0x53564501 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TFD_CLOEXEC = 0x80000 + TFD_NONBLOCK = 0x800 + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGISO7816 = 0x80285442 + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSISO7816 = 0xc0285443 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TUNATTACHFILTER = 0x401054d5 + TUNDETACHFILTER = 0x401054d6 + TUNGETDEVNETNS = 0x54e3 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x801054db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETCARRIER = 0x400454e2 + TUNSETDEBUG = 0x400454c9 + TUNSETFILTEREBPF = 0x800454e1 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETSTEERINGEBPF = 0x800454e0 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UBI_IOCATT = 0x40186f40 + UBI_IOCDET = 0x40046f41 + UBI_IOCEBCH = 0x40044f02 + UBI_IOCEBER = 0x40044f01 + UBI_IOCEBISMAP = 0x80044f05 + UBI_IOCEBMAP = 0x40084f03 + UBI_IOCEBUNMAP = 0x40044f04 + UBI_IOCMKVOL = 0x40986f00 + UBI_IOCRMVOL = 0x40046f01 + UBI_IOCRNVOL = 0x51106f03 + UBI_IOCRPEB = 0x40046f04 + UBI_IOCRSVOL = 0x400c6f02 + UBI_IOCSETVOLPROP = 0x40104f06 + UBI_IOCSPEB = 0x40046f05 + UBI_IOCVOLCRBLK = 0x40804f07 + UBI_IOCVOLRMBLK = 0x4f08 + UBI_IOCVOLUP = 0x40084f00 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VMIN = 0x6 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WORDSIZE = 0x40 + XCASE = 0x4 + XTABS = 0x1800 + _HIDIOCGRAWNAME = 0x80804804 + _HIDIOCGRAWPHYS = 0x80404805 + _HIDIOCGRAWUNIQ = 0x80404808 +) + +// Errors +const ( + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + ECANCELED = syscall.Errno(0x7d) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EISCONN = syscall.Errno(0x6a) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTCONN = syscall.Errno(0x6b) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTUNIQ = syscall.Errno(0x4c) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPFNOSUPPORT = syscall.Errno(0x60) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGIO = syscall.Signal(0x1d) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "EDEADLK", "resource deadlock avoided"}, + {36, "ENAMETOOLONG", "file name too long"}, + {37, "ENOLCK", "no locks available"}, + {38, "ENOSYS", "function not implemented"}, + {39, "ENOTEMPTY", "directory not empty"}, + {40, "ELOOP", "too many levels of symbolic links"}, + {42, "ENOMSG", "no message of desired type"}, + {43, "EIDRM", "identifier removed"}, + {44, "ECHRNG", "channel number out of range"}, + {45, "EL2NSYNC", "level 2 not synchronized"}, + {46, "EL3HLT", "level 3 halted"}, + {47, "EL3RST", "level 3 reset"}, + {48, "ELNRNG", "link number out of range"}, + {49, "EUNATCH", "protocol driver not attached"}, + {50, "ENOCSI", "no CSI structure available"}, + {51, "EL2HLT", "level 2 halted"}, + {52, "EBADE", "invalid exchange"}, + {53, "EBADR", "invalid request descriptor"}, + {54, "EXFULL", "exchange full"}, + {55, "ENOANO", "no anode"}, + {56, "EBADRQC", "invalid request code"}, + {57, "EBADSLT", "invalid slot"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {72, "EMULTIHOP", "multihop attempted"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EBADMSG", "bad message"}, + {75, "EOVERFLOW", "value too large for defined data type"}, + {76, "ENOTUNIQ", "name not unique on network"}, + {77, "EBADFD", "file descriptor in bad state"}, + {78, "EREMCHG", "remote address changed"}, + {79, "ELIBACC", "can not access a needed shared library"}, + {80, "ELIBBAD", "accessing a corrupted shared library"}, + {81, "ELIBSCN", ".lib section in a.out corrupted"}, + {82, "ELIBMAX", "attempting to link in too many shared libraries"}, + {83, "ELIBEXEC", "cannot exec a shared library directly"}, + {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {85, "ERESTART", "interrupted system call should be restarted"}, + {86, "ESTRPIPE", "streams pipe error"}, + {87, "EUSERS", "too many users"}, + {88, "ENOTSOCK", "socket operation on non-socket"}, + {89, "EDESTADDRREQ", "destination address required"}, + {90, "EMSGSIZE", "message too long"}, + {91, "EPROTOTYPE", "protocol wrong type for socket"}, + {92, "ENOPROTOOPT", "protocol not available"}, + {93, "EPROTONOSUPPORT", "protocol not supported"}, + {94, "ESOCKTNOSUPPORT", "socket type not supported"}, + {95, "ENOTSUP", "operation not supported"}, + {96, "EPFNOSUPPORT", "protocol family not supported"}, + {97, "EAFNOSUPPORT", "address family not supported by protocol"}, + {98, "EADDRINUSE", "address already in use"}, + {99, "EADDRNOTAVAIL", "cannot assign requested address"}, + {100, "ENETDOWN", "network is down"}, + {101, "ENETUNREACH", "network is unreachable"}, + {102, "ENETRESET", "network dropped connection on reset"}, + {103, "ECONNABORTED", "software caused connection abort"}, + {104, "ECONNRESET", "connection reset by peer"}, + {105, "ENOBUFS", "no buffer space available"}, + {106, "EISCONN", "transport endpoint is already connected"}, + {107, "ENOTCONN", "transport endpoint is not connected"}, + {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {109, "ETOOMANYREFS", "too many references: cannot splice"}, + {110, "ETIMEDOUT", "connection timed out"}, + {111, "ECONNREFUSED", "connection refused"}, + {112, "EHOSTDOWN", "host is down"}, + {113, "EHOSTUNREACH", "no route to host"}, + {114, "EALREADY", "operation already in progress"}, + {115, "EINPROGRESS", "operation now in progress"}, + {116, "ESTALE", "stale file handle"}, + {117, "EUCLEAN", "structure needs cleaning"}, + {118, "ENOTNAM", "not a XENIX named type file"}, + {119, "ENAVAIL", "no XENIX semaphores available"}, + {120, "EISNAM", "is a named type file"}, + {121, "EREMOTEIO", "remote I/O error"}, + {122, "EDQUOT", "disk quota exceeded"}, + {123, "ENOMEDIUM", "no medium found"}, + {124, "EMEDIUMTYPE", "wrong medium type"}, + {125, "ECANCELED", "operation canceled"}, + {126, "ENOKEY", "required key not available"}, + {127, "EKEYEXPIRED", "key has expired"}, + {128, "EKEYREVOKED", "key has been revoked"}, + {129, "EKEYREJECTED", "key was rejected by service"}, + {130, "EOWNERDEAD", "owner died"}, + {131, "ENOTRECOVERABLE", "state not recoverable"}, + {132, "ERFKILL", "operation not possible due to RF-kill"}, + {133, "EHWPOISON", "memory page has hardware error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGBUS", "bus error"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGUSR1", "user defined signal 1"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGUSR2", "user defined signal 2"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGSTKFLT", "stack fault"}, + {17, "SIGCHLD", "child exited"}, + {18, "SIGCONT", "continued"}, + {19, "SIGSTOP", "stopped (signal)"}, + {20, "SIGTSTP", "stopped"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGURG", "urgent I/O condition"}, + {24, "SIGXCPU", "CPU time limit exceeded"}, + {25, "SIGXFSZ", "file size limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window changed"}, + {29, "SIGIO", "I/O possible"}, + {30, "SIGPWR", "power failure"}, + {31, "SIGSYS", "bad system call"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go new file mode 100644 index 0000000..14d7a84 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -0,0 +1,833 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build mips && linux +// +build mips,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go + +package unix + +import "syscall" + +const ( + B1000000 = 0x1008 + B115200 = 0x1002 + B1152000 = 0x1009 + B1500000 = 0x100a + B2000000 = 0x100b + B230400 = 0x1003 + B2500000 = 0x100c + B3000000 = 0x100d + B3500000 = 0x100e + B4000000 = 0x100f + B460800 = 0x1004 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B921600 = 0x1007 + BLKBSZGET = 0x40041270 + BLKBSZSET = 0x80041271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40041272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1000 + BS1 = 0x2000 + BSDLY = 0x2000 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIZE = 0x30 + CSTOPB = 0x40 + ECCGETLAYOUT = 0x41484d11 + ECCGETSTATS = 0x40104d12 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x80 + EPOLL_CLOEXEC = 0x80000 + EXTPROC = 0x10000 + FF1 = 0x8000 + FFDLY = 0x8000 + FICLONE = 0x80049409 + FICLONERANGE = 0x8020940d + FLUSHO = 0x2000 + FS_IOC_ENABLE_VERITY = 0x80806685 + FS_IOC_GETFLAGS = 0x40046601 + FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SETFLAGS = 0x80046602 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + F_GETLK = 0x21 + F_GETLK64 = 0x21 + F_GETOWN = 0x17 + F_RDLCK = 0x0 + F_SETLK = 0x22 + F_SETLK64 = 0x22 + F_SETLKW = 0x23 + F_SETLKW64 = 0x23 + F_SETOWN = 0x18 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HIDIOCGRAWINFO = 0x40084803 + HIDIOCGRDESC = 0x50044802 + HIDIOCGRDESCSIZE = 0x40044801 + HUPCL = 0x400 + ICANON = 0x2 + IEXTEN = 0x100 + IN_CLOEXEC = 0x80000 + IN_NONBLOCK = 0x80 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + ISIG = 0x1 + IUCLC = 0x200 + IXOFF = 0x1000 + IXON = 0x400 + MAP_ANON = 0x800 + MAP_ANONYMOUS = 0x800 + MAP_DENYWRITE = 0x2000 + MAP_EXECUTABLE = 0x4000 + MAP_GROWSDOWN = 0x1000 + MAP_HUGETLB = 0x80000 + MAP_LOCKED = 0x8000 + MAP_NONBLOCK = 0x20000 + MAP_NORESERVE = 0x400 + MAP_POPULATE = 0x10000 + MAP_RENAME = 0x800 + MAP_STACK = 0x40000 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MEMERASE = 0x80084d02 + MEMERASE64 = 0x80104d14 + MEMGETBADBLOCK = 0x80084d0b + MEMGETINFO = 0x40204d01 + MEMGETOOBSEL = 0x40c84d0a + MEMGETREGIONCOUNT = 0x40044d07 + MEMISLOCKED = 0x40084d17 + MEMLOCK = 0x80084d05 + MEMREADOOB = 0xc00c4d04 + MEMSETBADBLOCK = 0x80084d0c + MEMUNLOCK = 0x80084d06 + MEMWRITEOOB = 0xc00c4d03 + MTDFILEMODE = 0x20004d13 + NFDBITS = 0x20 + NLDLY = 0x100 + NOFLSH = 0x80 + NS_GET_NSTYPE = 0x2000b703 + NS_GET_OWNER_UID = 0x2000b704 + NS_GET_PARENT = 0x2000b702 + NS_GET_USERNS = 0x2000b701 + OLCUC = 0x2 + ONLCR = 0x4 + OTPERASE = 0x800c4d19 + OTPGETREGIONCOUNT = 0x80044d0e + OTPGETREGIONINFO = 0x800c4d0f + OTPLOCK = 0x400c4d10 + OTPSELECT = 0x40044d0d + O_APPEND = 0x8 + O_ASYNC = 0x1000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x100 + O_DIRECT = 0x8000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x10 + O_EXCL = 0x400 + O_FSYNC = 0x4010 + O_LARGEFILE = 0x2000 + O_NDELAY = 0x80 + O_NOATIME = 0x40000 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x80 + O_PATH = 0x200000 + O_RSYNC = 0x4010 + O_SYNC = 0x4010 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + PARENB = 0x100 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40042407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8004240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc004240a + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80042406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PPPIOCATTACH = 0x8004743d + PPPIOCATTCHAN = 0x80047438 + PPPIOCBRIDGECHAN = 0x80047435 + PPPIOCCONNECT = 0x8004743a + PPPIOCDETACH = 0x8004743c + PPPIOCDISCONN = 0x20007439 + PPPIOCGASYNCMAP = 0x40047458 + PPPIOCGCHAN = 0x40047437 + PPPIOCGDEBUG = 0x40047441 + PPPIOCGFLAGS = 0x4004745a + PPPIOCGIDLE = 0x4008743f + PPPIOCGIDLE32 = 0x4008743f + PPPIOCGIDLE64 = 0x4010743f + PPPIOCGL2TPSTATS = 0x40487436 + PPPIOCGMRU = 0x40047453 + PPPIOCGRASYNCMAP = 0x40047455 + PPPIOCGUNIT = 0x40047456 + PPPIOCGXASYNCMAP = 0x40207450 + PPPIOCSACTIVE = 0x80087446 + PPPIOCSASYNCMAP = 0x80047457 + PPPIOCSCOMPRESS = 0x800c744d + PPPIOCSDEBUG = 0x80047440 + PPPIOCSFLAGS = 0x80047459 + PPPIOCSMAXCID = 0x80047451 + PPPIOCSMRRU = 0x8004743b + PPPIOCSMRU = 0x80047452 + PPPIOCSNPMODE = 0x8008744b + PPPIOCSPASS = 0x80087447 + PPPIOCSRASYNCMAP = 0x80047454 + PPPIOCSXASYNCMAP = 0x8020744f + PPPIOCUNBRIDGECHAN = 0x20007434 + PPPIOCXFERUNIT = 0x2000744e + PR_SET_PTRACER_ANY = 0xffffffff + PTRACE_GETFPREGS = 0xe + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_GET_THREAD_AREA_3264 = 0xc4 + PTRACE_GET_WATCH_REGS = 0xd0 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_PEEKDATA_3264 = 0xc1 + PTRACE_PEEKTEXT_3264 = 0xc0 + PTRACE_POKEDATA_3264 = 0xc3 + PTRACE_POKETEXT_3264 = 0xc2 + PTRACE_SETFPREGS = 0xf + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SET_WATCH_REGS = 0xd1 + RLIMIT_AS = 0x6 + RLIMIT_MEMLOCK = 0x9 + RLIMIT_NOFILE = 0x5 + RLIMIT_NPROC = 0x8 + RLIMIT_RSS = 0x7 + RNDADDENTROPY = 0x80085203 + RNDADDTOENTCNT = 0x80045201 + RNDCLEARPOOL = 0x20005206 + RNDGETENTCNT = 0x40045200 + RNDGETPOOL = 0x40085202 + RNDRESEEDCRNG = 0x20005207 + RNDZAPENTCNT = 0x20005204 + RTC_AIE_OFF = 0x20007002 + RTC_AIE_ON = 0x20007001 + RTC_ALM_READ = 0x40247008 + RTC_ALM_SET = 0x80247007 + RTC_EPOCH_READ = 0x4004700d + RTC_EPOCH_SET = 0x8004700e + RTC_IRQP_READ = 0x4004700b + RTC_IRQP_SET = 0x8004700c + RTC_PARAM_GET = 0x80187013 + RTC_PARAM_SET = 0x80187014 + RTC_PIE_OFF = 0x20007006 + RTC_PIE_ON = 0x20007005 + RTC_PLL_GET = 0x401c7011 + RTC_PLL_SET = 0x801c7012 + RTC_RD_TIME = 0x40247009 + RTC_SET_TIME = 0x8024700a + RTC_UIE_OFF = 0x20007004 + RTC_UIE_ON = 0x20007003 + RTC_VL_CLR = 0x20007014 + RTC_VL_READ = 0x40047013 + RTC_WIE_OFF = 0x20007010 + RTC_WIE_ON = 0x2000700f + RTC_WKALM_RD = 0x40287010 + RTC_WKALM_SET = 0x8028700f + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SFD_CLOEXEC = 0x80000 + SFD_NONBLOCK = 0x80 + SIOCATMARK = 0x40047307 + SIOCGPGRP = 0x40047309 + SIOCGSTAMPNS_NEW = 0x40108907 + SIOCGSTAMP_NEW = 0x40108906 + SIOCINQ = 0x467f + SIOCOUTQ = 0x7472 + SIOCSPGRP = 0x80047308 + SOCK_CLOEXEC = 0x80000 + SOCK_DGRAM = 0x1 + SOCK_NONBLOCK = 0x80 + SOCK_STREAM = 0x2 + SOL_SOCKET = 0xffff + SO_ACCEPTCONN = 0x1009 + SO_ATTACH_BPF = 0x32 + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BINDTOIFINDEX = 0x3e + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x20 + SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 + SO_BUSY_POLL = 0x2e + SO_BUSY_POLL_BUDGET = 0x46 + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DOMAIN = 0x1029 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 + SO_NOFCS = 0x2b + SO_OOBINLINE = 0x100 + SO_PASSCRED = 0x11 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x12 + SO_PEERGROUPS = 0x3b + SO_PEERSEC = 0x1e + SO_PREFER_BUSY_POLL = 0x45 + SO_PROTOCOL = 0x1028 + SO_RCVBUF = 0x1002 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_RCVTIMEO_NEW = 0x42 + SO_RCVTIMEO_OLD = 0x1006 + SO_RESERVE_MEM = 0x49 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x1001 + SO_SNDBUFFORCE = 0x1f + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_SNDTIMEO_NEW = 0x43 + SO_SNDTIMEO_OLD = 0x1005 + SO_STYLE = 0x1008 + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPING_NEW = 0x41 + SO_TIMESTAMPING_OLD = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TIMESTAMPNS_NEW = 0x40 + SO_TIMESTAMPNS_OLD = 0x23 + SO_TIMESTAMP_NEW = 0x3f + SO_TXTIME = 0x3d + SO_TYPE = 0x1008 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x5407 + TCGETA = 0x5401 + TCGETS = 0x540d + TCGETS2 = 0x4030542a + TCSAFLUSH = 0x5410 + TCSBRK = 0x5405 + TCSBRKP = 0x5486 + TCSETA = 0x5402 + TCSETAF = 0x5404 + TCSETAW = 0x5403 + TCSETS = 0x540e + TCSETS2 = 0x8030542b + TCSETSF = 0x5410 + TCSETSF2 = 0x8030542d + TCSETSW = 0x540f + TCSETSW2 = 0x8030542c + TCXONC = 0x5406 + TFD_CLOEXEC = 0x80000 + TFD_NONBLOCK = 0x80 + TIOCCBRK = 0x5428 + TIOCCONS = 0x80047478 + TIOCEXCL = 0x740d + TIOCGDEV = 0x40045432 + TIOCGETD = 0x7400 + TIOCGETP = 0x7408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x5492 + TIOCGISO7816 = 0x40285442 + TIOCGLCKTRMIOS = 0x548b + TIOCGLTC = 0x7474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 + TIOCGRS485 = 0x4020542e + TIOCGSERIAL = 0x5484 + TIOCGSID = 0x7416 + TIOCGSOFTCAR = 0x5481 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x467f + TIOCLINUX = 0x5483 + TIOCMBIC = 0x741c + TIOCMBIS = 0x741b + TIOCMGET = 0x741d + TIOCMIWAIT = 0x5491 + TIOCMSET = 0x741a + TIOCM_CAR = 0x100 + TIOCM_CD = 0x100 + TIOCM_CTS = 0x40 + TIOCM_DSR = 0x400 + TIOCM_RI = 0x200 + TIOCM_RNG = 0x200 + TIOCM_SR = 0x20 + TIOCM_ST = 0x10 + TIOCNOTTY = 0x5471 + TIOCNXCL = 0x740e + TIOCOUTQ = 0x7472 + TIOCPKT = 0x5470 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x5480 + TIOCSERCONFIG = 0x5488 + TIOCSERGETLSR = 0x548e + TIOCSERGETMULTI = 0x548f + TIOCSERGSTRUCT = 0x548d + TIOCSERGWILD = 0x5489 + TIOCSERSETMULTI = 0x5490 + TIOCSERSWILD = 0x548a + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x7401 + TIOCSETN = 0x740a + TIOCSETP = 0x7409 + TIOCSIG = 0x80045436 + TIOCSISO7816 = 0xc0285443 + TIOCSLCKTRMIOS = 0x548c + TIOCSLTC = 0x7475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0xc020542f + TIOCSSERIAL = 0x5485 + TIOCSSOFTCAR = 0x5482 + TIOCSTI = 0x5472 + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x8000 + TUNATTACHFILTER = 0x800854d5 + TUNDETACHFILTER = 0x800854d6 + TUNGETDEVNETNS = 0x200054e3 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x400854db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETCARRIER = 0x800454e2 + TUNSETDEBUG = 0x800454c9 + TUNSETFILTEREBPF = 0x400454e1 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETSTEERINGEBPF = 0x400454e0 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UBI_IOCATT = 0x80186f40 + UBI_IOCDET = 0x80046f41 + UBI_IOCEBCH = 0x80044f02 + UBI_IOCEBER = 0x80044f01 + UBI_IOCEBISMAP = 0x40044f05 + UBI_IOCEBMAP = 0x80084f03 + UBI_IOCEBUNMAP = 0x80044f04 + UBI_IOCMKVOL = 0x80986f00 + UBI_IOCRMVOL = 0x80046f01 + UBI_IOCRNVOL = 0x91106f03 + UBI_IOCRPEB = 0x80046f04 + UBI_IOCRSVOL = 0x800c6f02 + UBI_IOCSETVOLPROP = 0x80104f06 + UBI_IOCSPEB = 0x80046f05 + UBI_IOCVOLCRBLK = 0x80804f07 + UBI_IOCVOLRMBLK = 0x20004f08 + UBI_IOCVOLUP = 0x80084f00 + VDISCARD = 0xd + VEOF = 0x10 + VEOL = 0x11 + VEOL2 = 0x6 + VMIN = 0x4 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VSWTCH = 0x7 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WORDSIZE = 0x20 + XCASE = 0x4 + XTABS = 0x1800 + _HIDIOCGRAWNAME = 0x40804804 + _HIDIOCGRAWPHYS = 0x40404805 + _HIDIOCGRAWUNIQ = 0x40404808 +) + +// Errors +const ( + EADDRINUSE = syscall.Errno(0x7d) + EADDRNOTAVAIL = syscall.Errno(0x7e) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x7c) + EALREADY = syscall.Errno(0x95) + EBADE = syscall.Errno(0x32) + EBADFD = syscall.Errno(0x51) + EBADMSG = syscall.Errno(0x4d) + EBADR = syscall.Errno(0x33) + EBADRQC = syscall.Errno(0x36) + EBADSLT = syscall.Errno(0x37) + EBFONT = syscall.Errno(0x3b) + ECANCELED = syscall.Errno(0x9e) + ECHRNG = syscall.Errno(0x25) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x82) + ECONNREFUSED = syscall.Errno(0x92) + ECONNRESET = syscall.Errno(0x83) + EDEADLK = syscall.Errno(0x2d) + EDEADLOCK = syscall.Errno(0x38) + EDESTADDRREQ = syscall.Errno(0x60) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x46d) + EHOSTDOWN = syscall.Errno(0x93) + EHOSTUNREACH = syscall.Errno(0x94) + EHWPOISON = syscall.Errno(0xa8) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x58) + EINIT = syscall.Errno(0x8d) + EINPROGRESS = syscall.Errno(0x96) + EISCONN = syscall.Errno(0x85) + EISNAM = syscall.Errno(0x8b) + EKEYEXPIRED = syscall.Errno(0xa2) + EKEYREJECTED = syscall.Errno(0xa4) + EKEYREVOKED = syscall.Errno(0xa3) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELIBACC = syscall.Errno(0x53) + ELIBBAD = syscall.Errno(0x54) + ELIBEXEC = syscall.Errno(0x57) + ELIBMAX = syscall.Errno(0x56) + ELIBSCN = syscall.Errno(0x55) + ELNRNG = syscall.Errno(0x29) + ELOOP = syscall.Errno(0x5a) + EMEDIUMTYPE = syscall.Errno(0xa0) + EMSGSIZE = syscall.Errno(0x61) + EMULTIHOP = syscall.Errno(0x4a) + ENAMETOOLONG = syscall.Errno(0x4e) + ENAVAIL = syscall.Errno(0x8a) + ENETDOWN = syscall.Errno(0x7f) + ENETRESET = syscall.Errno(0x81) + ENETUNREACH = syscall.Errno(0x80) + ENOANO = syscall.Errno(0x35) + ENOBUFS = syscall.Errno(0x84) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x3d) + ENOKEY = syscall.Errno(0xa1) + ENOLCK = syscall.Errno(0x2e) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x9f) + ENOMSG = syscall.Errno(0x23) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x63) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x59) + ENOTCONN = syscall.Errno(0x86) + ENOTEMPTY = syscall.Errno(0x5d) + ENOTNAM = syscall.Errno(0x89) + ENOTRECOVERABLE = syscall.Errno(0xa6) + ENOTSOCK = syscall.Errno(0x5f) + ENOTSUP = syscall.Errno(0x7a) + ENOTUNIQ = syscall.Errno(0x50) + EOPNOTSUPP = syscall.Errno(0x7a) + EOVERFLOW = syscall.Errno(0x4f) + EOWNERDEAD = syscall.Errno(0xa5) + EPFNOSUPPORT = syscall.Errno(0x7b) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x78) + EPROTOTYPE = syscall.Errno(0x62) + EREMCHG = syscall.Errno(0x52) + EREMDEV = syscall.Errno(0x8e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x8c) + ERESTART = syscall.Errno(0x5b) + ERFKILL = syscall.Errno(0xa7) + ESHUTDOWN = syscall.Errno(0x8f) + ESOCKTNOSUPPORT = syscall.Errno(0x79) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x97) + ESTRPIPE = syscall.Errno(0x5c) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x91) + ETOOMANYREFS = syscall.Errno(0x90) + EUCLEAN = syscall.Errno(0x87) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x5e) + EXFULL = syscall.Errno(0x34) +) + +// Signals +const ( + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x12) + SIGCLD = syscall.Signal(0x12) + SIGCONT = syscall.Signal(0x19) + SIGEMT = syscall.Signal(0x7) + SIGIO = syscall.Signal(0x16) + SIGPOLL = syscall.Signal(0x16) + SIGPROF = syscall.Signal(0x1d) + SIGPWR = syscall.Signal(0x13) + SIGSTOP = syscall.Signal(0x17) + SIGSYS = syscall.Signal(0xc) + SIGTSTP = syscall.Signal(0x18) + SIGTTIN = syscall.Signal(0x1a) + SIGTTOU = syscall.Signal(0x1b) + SIGURG = syscall.Signal(0x15) + SIGUSR1 = syscall.Signal(0x10) + SIGUSR2 = syscall.Signal(0x11) + SIGVTALRM = syscall.Signal(0x1c) + SIGWINCH = syscall.Signal(0x14) + SIGXCPU = syscall.Signal(0x1e) + SIGXFSZ = syscall.Signal(0x1f) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "ENOMSG", "no message of desired type"}, + {36, "EIDRM", "identifier removed"}, + {37, "ECHRNG", "channel number out of range"}, + {38, "EL2NSYNC", "level 2 not synchronized"}, + {39, "EL3HLT", "level 3 halted"}, + {40, "EL3RST", "level 3 reset"}, + {41, "ELNRNG", "link number out of range"}, + {42, "EUNATCH", "protocol driver not attached"}, + {43, "ENOCSI", "no CSI structure available"}, + {44, "EL2HLT", "level 2 halted"}, + {45, "EDEADLK", "resource deadlock avoided"}, + {46, "ENOLCK", "no locks available"}, + {50, "EBADE", "invalid exchange"}, + {51, "EBADR", "invalid request descriptor"}, + {52, "EXFULL", "exchange full"}, + {53, "ENOANO", "no anode"}, + {54, "EBADRQC", "invalid request code"}, + {55, "EBADSLT", "invalid slot"}, + {56, "EDEADLOCK", "file locking deadlock error"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EMULTIHOP", "multihop attempted"}, + {77, "EBADMSG", "bad message"}, + {78, "ENAMETOOLONG", "file name too long"}, + {79, "EOVERFLOW", "value too large for defined data type"}, + {80, "ENOTUNIQ", "name not unique on network"}, + {81, "EBADFD", "file descriptor in bad state"}, + {82, "EREMCHG", "remote address changed"}, + {83, "ELIBACC", "can not access a needed shared library"}, + {84, "ELIBBAD", "accessing a corrupted shared library"}, + {85, "ELIBSCN", ".lib section in a.out corrupted"}, + {86, "ELIBMAX", "attempting to link in too many shared libraries"}, + {87, "ELIBEXEC", "cannot exec a shared library directly"}, + {88, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {89, "ENOSYS", "function not implemented"}, + {90, "ELOOP", "too many levels of symbolic links"}, + {91, "ERESTART", "interrupted system call should be restarted"}, + {92, "ESTRPIPE", "streams pipe error"}, + {93, "ENOTEMPTY", "directory not empty"}, + {94, "EUSERS", "too many users"}, + {95, "ENOTSOCK", "socket operation on non-socket"}, + {96, "EDESTADDRREQ", "destination address required"}, + {97, "EMSGSIZE", "message too long"}, + {98, "EPROTOTYPE", "protocol wrong type for socket"}, + {99, "ENOPROTOOPT", "protocol not available"}, + {120, "EPROTONOSUPPORT", "protocol not supported"}, + {121, "ESOCKTNOSUPPORT", "socket type not supported"}, + {122, "ENOTSUP", "operation not supported"}, + {123, "EPFNOSUPPORT", "protocol family not supported"}, + {124, "EAFNOSUPPORT", "address family not supported by protocol"}, + {125, "EADDRINUSE", "address already in use"}, + {126, "EADDRNOTAVAIL", "cannot assign requested address"}, + {127, "ENETDOWN", "network is down"}, + {128, "ENETUNREACH", "network is unreachable"}, + {129, "ENETRESET", "network dropped connection on reset"}, + {130, "ECONNABORTED", "software caused connection abort"}, + {131, "ECONNRESET", "connection reset by peer"}, + {132, "ENOBUFS", "no buffer space available"}, + {133, "EISCONN", "transport endpoint is already connected"}, + {134, "ENOTCONN", "transport endpoint is not connected"}, + {135, "EUCLEAN", "structure needs cleaning"}, + {137, "ENOTNAM", "not a XENIX named type file"}, + {138, "ENAVAIL", "no XENIX semaphores available"}, + {139, "EISNAM", "is a named type file"}, + {140, "EREMOTEIO", "remote I/O error"}, + {141, "EINIT", "unknown error 141"}, + {142, "EREMDEV", "unknown error 142"}, + {143, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {144, "ETOOMANYREFS", "too many references: cannot splice"}, + {145, "ETIMEDOUT", "connection timed out"}, + {146, "ECONNREFUSED", "connection refused"}, + {147, "EHOSTDOWN", "host is down"}, + {148, "EHOSTUNREACH", "no route to host"}, + {149, "EALREADY", "operation already in progress"}, + {150, "EINPROGRESS", "operation now in progress"}, + {151, "ESTALE", "stale file handle"}, + {158, "ECANCELED", "operation canceled"}, + {159, "ENOMEDIUM", "no medium found"}, + {160, "EMEDIUMTYPE", "wrong medium type"}, + {161, "ENOKEY", "required key not available"}, + {162, "EKEYEXPIRED", "key has expired"}, + {163, "EKEYREVOKED", "key has been revoked"}, + {164, "EKEYREJECTED", "key was rejected by service"}, + {165, "EOWNERDEAD", "owner died"}, + {166, "ENOTRECOVERABLE", "state not recoverable"}, + {167, "ERFKILL", "operation not possible due to RF-kill"}, + {168, "EHWPOISON", "memory page has hardware error"}, + {1133, "EDQUOT", "disk quota exceeded"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGUSR1", "user defined signal 1"}, + {17, "SIGUSR2", "user defined signal 2"}, + {18, "SIGCHLD", "child exited"}, + {19, "SIGPWR", "power failure"}, + {20, "SIGWINCH", "window changed"}, + {21, "SIGURG", "urgent I/O condition"}, + {22, "SIGIO", "I/O possible"}, + {23, "SIGSTOP", "stopped (signal)"}, + {24, "SIGTSTP", "stopped"}, + {25, "SIGCONT", "continued"}, + {26, "SIGTTIN", "stopped (tty input)"}, + {27, "SIGTTOU", "stopped (tty output)"}, + {28, "SIGVTALRM", "virtual timer expired"}, + {29, "SIGPROF", "profiling timer expired"}, + {30, "SIGXCPU", "CPU time limit exceeded"}, + {31, "SIGXFSZ", "file size limit exceeded"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go new file mode 100644 index 0000000..99e7c4a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -0,0 +1,833 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build mips64 && linux +// +build mips64,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go + +package unix + +import "syscall" + +const ( + B1000000 = 0x1008 + B115200 = 0x1002 + B1152000 = 0x1009 + B1500000 = 0x100a + B2000000 = 0x100b + B230400 = 0x1003 + B2500000 = 0x100c + B3000000 = 0x100d + B3500000 = 0x100e + B4000000 = 0x100f + B460800 = 0x1004 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B921600 = 0x1007 + BLKBSZGET = 0x40081270 + BLKBSZSET = 0x80081271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40081272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1000 + BS1 = 0x2000 + BSDLY = 0x2000 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIZE = 0x30 + CSTOPB = 0x40 + ECCGETLAYOUT = 0x41484d11 + ECCGETSTATS = 0x40104d12 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x80 + EPOLL_CLOEXEC = 0x80000 + EXTPROC = 0x10000 + FF1 = 0x8000 + FFDLY = 0x8000 + FICLONE = 0x80049409 + FICLONERANGE = 0x8020940d + FLUSHO = 0x2000 + FS_IOC_ENABLE_VERITY = 0x80806685 + FS_IOC_GETFLAGS = 0x40086601 + FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SETFLAGS = 0x80086602 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + F_GETLK = 0xe + F_GETLK64 = 0xe + F_GETOWN = 0x17 + F_RDLCK = 0x0 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x18 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HIDIOCGRAWINFO = 0x40084803 + HIDIOCGRDESC = 0x50044802 + HIDIOCGRDESCSIZE = 0x40044801 + HUPCL = 0x400 + ICANON = 0x2 + IEXTEN = 0x100 + IN_CLOEXEC = 0x80000 + IN_NONBLOCK = 0x80 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + ISIG = 0x1 + IUCLC = 0x200 + IXOFF = 0x1000 + IXON = 0x400 + MAP_ANON = 0x800 + MAP_ANONYMOUS = 0x800 + MAP_DENYWRITE = 0x2000 + MAP_EXECUTABLE = 0x4000 + MAP_GROWSDOWN = 0x1000 + MAP_HUGETLB = 0x80000 + MAP_LOCKED = 0x8000 + MAP_NONBLOCK = 0x20000 + MAP_NORESERVE = 0x400 + MAP_POPULATE = 0x10000 + MAP_RENAME = 0x800 + MAP_STACK = 0x40000 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MEMERASE = 0x80084d02 + MEMERASE64 = 0x80104d14 + MEMGETBADBLOCK = 0x80084d0b + MEMGETINFO = 0x40204d01 + MEMGETOOBSEL = 0x40c84d0a + MEMGETREGIONCOUNT = 0x40044d07 + MEMISLOCKED = 0x40084d17 + MEMLOCK = 0x80084d05 + MEMREADOOB = 0xc0104d04 + MEMSETBADBLOCK = 0x80084d0c + MEMUNLOCK = 0x80084d06 + MEMWRITEOOB = 0xc0104d03 + MTDFILEMODE = 0x20004d13 + NFDBITS = 0x40 + NLDLY = 0x100 + NOFLSH = 0x80 + NS_GET_NSTYPE = 0x2000b703 + NS_GET_OWNER_UID = 0x2000b704 + NS_GET_PARENT = 0x2000b702 + NS_GET_USERNS = 0x2000b701 + OLCUC = 0x2 + ONLCR = 0x4 + OTPERASE = 0x800c4d19 + OTPGETREGIONCOUNT = 0x80044d0e + OTPGETREGIONINFO = 0x800c4d0f + OTPLOCK = 0x400c4d10 + OTPSELECT = 0x40044d0d + O_APPEND = 0x8 + O_ASYNC = 0x1000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x100 + O_DIRECT = 0x8000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x10 + O_EXCL = 0x400 + O_FSYNC = 0x4010 + O_LARGEFILE = 0x0 + O_NDELAY = 0x80 + O_NOATIME = 0x40000 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x80 + O_PATH = 0x200000 + O_RSYNC = 0x4010 + O_SYNC = 0x4010 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + PARENB = 0x100 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40082407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc008240a + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PPPIOCATTACH = 0x8004743d + PPPIOCATTCHAN = 0x80047438 + PPPIOCBRIDGECHAN = 0x80047435 + PPPIOCCONNECT = 0x8004743a + PPPIOCDETACH = 0x8004743c + PPPIOCDISCONN = 0x20007439 + PPPIOCGASYNCMAP = 0x40047458 + PPPIOCGCHAN = 0x40047437 + PPPIOCGDEBUG = 0x40047441 + PPPIOCGFLAGS = 0x4004745a + PPPIOCGIDLE = 0x4010743f + PPPIOCGIDLE32 = 0x4008743f + PPPIOCGIDLE64 = 0x4010743f + PPPIOCGL2TPSTATS = 0x40487436 + PPPIOCGMRU = 0x40047453 + PPPIOCGRASYNCMAP = 0x40047455 + PPPIOCGUNIT = 0x40047456 + PPPIOCGXASYNCMAP = 0x40207450 + PPPIOCSACTIVE = 0x80107446 + PPPIOCSASYNCMAP = 0x80047457 + PPPIOCSCOMPRESS = 0x8010744d + PPPIOCSDEBUG = 0x80047440 + PPPIOCSFLAGS = 0x80047459 + PPPIOCSMAXCID = 0x80047451 + PPPIOCSMRRU = 0x8004743b + PPPIOCSMRU = 0x80047452 + PPPIOCSNPMODE = 0x8008744b + PPPIOCSPASS = 0x80107447 + PPPIOCSRASYNCMAP = 0x80047454 + PPPIOCSXASYNCMAP = 0x8020744f + PPPIOCUNBRIDGECHAN = 0x20007434 + PPPIOCXFERUNIT = 0x2000744e + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTRACE_GETFPREGS = 0xe + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_GET_THREAD_AREA_3264 = 0xc4 + PTRACE_GET_WATCH_REGS = 0xd0 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_PEEKDATA_3264 = 0xc1 + PTRACE_PEEKTEXT_3264 = 0xc0 + PTRACE_POKEDATA_3264 = 0xc3 + PTRACE_POKETEXT_3264 = 0xc2 + PTRACE_SETFPREGS = 0xf + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SET_WATCH_REGS = 0xd1 + RLIMIT_AS = 0x6 + RLIMIT_MEMLOCK = 0x9 + RLIMIT_NOFILE = 0x5 + RLIMIT_NPROC = 0x8 + RLIMIT_RSS = 0x7 + RNDADDENTROPY = 0x80085203 + RNDADDTOENTCNT = 0x80045201 + RNDCLEARPOOL = 0x20005206 + RNDGETENTCNT = 0x40045200 + RNDGETPOOL = 0x40085202 + RNDRESEEDCRNG = 0x20005207 + RNDZAPENTCNT = 0x20005204 + RTC_AIE_OFF = 0x20007002 + RTC_AIE_ON = 0x20007001 + RTC_ALM_READ = 0x40247008 + RTC_ALM_SET = 0x80247007 + RTC_EPOCH_READ = 0x4008700d + RTC_EPOCH_SET = 0x8008700e + RTC_IRQP_READ = 0x4008700b + RTC_IRQP_SET = 0x8008700c + RTC_PARAM_GET = 0x80187013 + RTC_PARAM_SET = 0x80187014 + RTC_PIE_OFF = 0x20007006 + RTC_PIE_ON = 0x20007005 + RTC_PLL_GET = 0x40207011 + RTC_PLL_SET = 0x80207012 + RTC_RD_TIME = 0x40247009 + RTC_SET_TIME = 0x8024700a + RTC_UIE_OFF = 0x20007004 + RTC_UIE_ON = 0x20007003 + RTC_VL_CLR = 0x20007014 + RTC_VL_READ = 0x40047013 + RTC_WIE_OFF = 0x20007010 + RTC_WIE_ON = 0x2000700f + RTC_WKALM_RD = 0x40287010 + RTC_WKALM_SET = 0x8028700f + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SFD_CLOEXEC = 0x80000 + SFD_NONBLOCK = 0x80 + SIOCATMARK = 0x40047307 + SIOCGPGRP = 0x40047309 + SIOCGSTAMPNS_NEW = 0x40108907 + SIOCGSTAMP_NEW = 0x40108906 + SIOCINQ = 0x467f + SIOCOUTQ = 0x7472 + SIOCSPGRP = 0x80047308 + SOCK_CLOEXEC = 0x80000 + SOCK_DGRAM = 0x1 + SOCK_NONBLOCK = 0x80 + SOCK_STREAM = 0x2 + SOL_SOCKET = 0xffff + SO_ACCEPTCONN = 0x1009 + SO_ATTACH_BPF = 0x32 + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BINDTOIFINDEX = 0x3e + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x20 + SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 + SO_BUSY_POLL = 0x2e + SO_BUSY_POLL_BUDGET = 0x46 + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DOMAIN = 0x1029 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 + SO_NOFCS = 0x2b + SO_OOBINLINE = 0x100 + SO_PASSCRED = 0x11 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x12 + SO_PEERGROUPS = 0x3b + SO_PEERSEC = 0x1e + SO_PREFER_BUSY_POLL = 0x45 + SO_PROTOCOL = 0x1028 + SO_RCVBUF = 0x1002 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_RCVTIMEO_NEW = 0x42 + SO_RCVTIMEO_OLD = 0x1006 + SO_RESERVE_MEM = 0x49 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x1001 + SO_SNDBUFFORCE = 0x1f + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_SNDTIMEO_NEW = 0x43 + SO_SNDTIMEO_OLD = 0x1005 + SO_STYLE = 0x1008 + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPING_NEW = 0x41 + SO_TIMESTAMPING_OLD = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TIMESTAMPNS_NEW = 0x40 + SO_TIMESTAMPNS_OLD = 0x23 + SO_TIMESTAMP_NEW = 0x3f + SO_TXTIME = 0x3d + SO_TYPE = 0x1008 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x5407 + TCGETA = 0x5401 + TCGETS = 0x540d + TCGETS2 = 0x4030542a + TCSAFLUSH = 0x5410 + TCSBRK = 0x5405 + TCSBRKP = 0x5486 + TCSETA = 0x5402 + TCSETAF = 0x5404 + TCSETAW = 0x5403 + TCSETS = 0x540e + TCSETS2 = 0x8030542b + TCSETSF = 0x5410 + TCSETSF2 = 0x8030542d + TCSETSW = 0x540f + TCSETSW2 = 0x8030542c + TCXONC = 0x5406 + TFD_CLOEXEC = 0x80000 + TFD_NONBLOCK = 0x80 + TIOCCBRK = 0x5428 + TIOCCONS = 0x80047478 + TIOCEXCL = 0x740d + TIOCGDEV = 0x40045432 + TIOCGETD = 0x7400 + TIOCGETP = 0x7408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x5492 + TIOCGISO7816 = 0x40285442 + TIOCGLCKTRMIOS = 0x548b + TIOCGLTC = 0x7474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 + TIOCGRS485 = 0x4020542e + TIOCGSERIAL = 0x5484 + TIOCGSID = 0x7416 + TIOCGSOFTCAR = 0x5481 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x467f + TIOCLINUX = 0x5483 + TIOCMBIC = 0x741c + TIOCMBIS = 0x741b + TIOCMGET = 0x741d + TIOCMIWAIT = 0x5491 + TIOCMSET = 0x741a + TIOCM_CAR = 0x100 + TIOCM_CD = 0x100 + TIOCM_CTS = 0x40 + TIOCM_DSR = 0x400 + TIOCM_RI = 0x200 + TIOCM_RNG = 0x200 + TIOCM_SR = 0x20 + TIOCM_ST = 0x10 + TIOCNOTTY = 0x5471 + TIOCNXCL = 0x740e + TIOCOUTQ = 0x7472 + TIOCPKT = 0x5470 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x5480 + TIOCSERCONFIG = 0x5488 + TIOCSERGETLSR = 0x548e + TIOCSERGETMULTI = 0x548f + TIOCSERGSTRUCT = 0x548d + TIOCSERGWILD = 0x5489 + TIOCSERSETMULTI = 0x5490 + TIOCSERSWILD = 0x548a + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x7401 + TIOCSETN = 0x740a + TIOCSETP = 0x7409 + TIOCSIG = 0x80045436 + TIOCSISO7816 = 0xc0285443 + TIOCSLCKTRMIOS = 0x548c + TIOCSLTC = 0x7475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0xc020542f + TIOCSSERIAL = 0x5485 + TIOCSSOFTCAR = 0x5482 + TIOCSTI = 0x5472 + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x8000 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETDEVNETNS = 0x200054e3 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETCARRIER = 0x800454e2 + TUNSETDEBUG = 0x800454c9 + TUNSETFILTEREBPF = 0x400454e1 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETSTEERINGEBPF = 0x400454e0 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UBI_IOCATT = 0x80186f40 + UBI_IOCDET = 0x80046f41 + UBI_IOCEBCH = 0x80044f02 + UBI_IOCEBER = 0x80044f01 + UBI_IOCEBISMAP = 0x40044f05 + UBI_IOCEBMAP = 0x80084f03 + UBI_IOCEBUNMAP = 0x80044f04 + UBI_IOCMKVOL = 0x80986f00 + UBI_IOCRMVOL = 0x80046f01 + UBI_IOCRNVOL = 0x91106f03 + UBI_IOCRPEB = 0x80046f04 + UBI_IOCRSVOL = 0x800c6f02 + UBI_IOCSETVOLPROP = 0x80104f06 + UBI_IOCSPEB = 0x80046f05 + UBI_IOCVOLCRBLK = 0x80804f07 + UBI_IOCVOLRMBLK = 0x20004f08 + UBI_IOCVOLUP = 0x80084f00 + VDISCARD = 0xd + VEOF = 0x10 + VEOL = 0x11 + VEOL2 = 0x6 + VMIN = 0x4 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VSWTCH = 0x7 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WORDSIZE = 0x40 + XCASE = 0x4 + XTABS = 0x1800 + _HIDIOCGRAWNAME = 0x40804804 + _HIDIOCGRAWPHYS = 0x40404805 + _HIDIOCGRAWUNIQ = 0x40404808 +) + +// Errors +const ( + EADDRINUSE = syscall.Errno(0x7d) + EADDRNOTAVAIL = syscall.Errno(0x7e) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x7c) + EALREADY = syscall.Errno(0x95) + EBADE = syscall.Errno(0x32) + EBADFD = syscall.Errno(0x51) + EBADMSG = syscall.Errno(0x4d) + EBADR = syscall.Errno(0x33) + EBADRQC = syscall.Errno(0x36) + EBADSLT = syscall.Errno(0x37) + EBFONT = syscall.Errno(0x3b) + ECANCELED = syscall.Errno(0x9e) + ECHRNG = syscall.Errno(0x25) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x82) + ECONNREFUSED = syscall.Errno(0x92) + ECONNRESET = syscall.Errno(0x83) + EDEADLK = syscall.Errno(0x2d) + EDEADLOCK = syscall.Errno(0x38) + EDESTADDRREQ = syscall.Errno(0x60) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x46d) + EHOSTDOWN = syscall.Errno(0x93) + EHOSTUNREACH = syscall.Errno(0x94) + EHWPOISON = syscall.Errno(0xa8) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x58) + EINIT = syscall.Errno(0x8d) + EINPROGRESS = syscall.Errno(0x96) + EISCONN = syscall.Errno(0x85) + EISNAM = syscall.Errno(0x8b) + EKEYEXPIRED = syscall.Errno(0xa2) + EKEYREJECTED = syscall.Errno(0xa4) + EKEYREVOKED = syscall.Errno(0xa3) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELIBACC = syscall.Errno(0x53) + ELIBBAD = syscall.Errno(0x54) + ELIBEXEC = syscall.Errno(0x57) + ELIBMAX = syscall.Errno(0x56) + ELIBSCN = syscall.Errno(0x55) + ELNRNG = syscall.Errno(0x29) + ELOOP = syscall.Errno(0x5a) + EMEDIUMTYPE = syscall.Errno(0xa0) + EMSGSIZE = syscall.Errno(0x61) + EMULTIHOP = syscall.Errno(0x4a) + ENAMETOOLONG = syscall.Errno(0x4e) + ENAVAIL = syscall.Errno(0x8a) + ENETDOWN = syscall.Errno(0x7f) + ENETRESET = syscall.Errno(0x81) + ENETUNREACH = syscall.Errno(0x80) + ENOANO = syscall.Errno(0x35) + ENOBUFS = syscall.Errno(0x84) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x3d) + ENOKEY = syscall.Errno(0xa1) + ENOLCK = syscall.Errno(0x2e) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x9f) + ENOMSG = syscall.Errno(0x23) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x63) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x59) + ENOTCONN = syscall.Errno(0x86) + ENOTEMPTY = syscall.Errno(0x5d) + ENOTNAM = syscall.Errno(0x89) + ENOTRECOVERABLE = syscall.Errno(0xa6) + ENOTSOCK = syscall.Errno(0x5f) + ENOTSUP = syscall.Errno(0x7a) + ENOTUNIQ = syscall.Errno(0x50) + EOPNOTSUPP = syscall.Errno(0x7a) + EOVERFLOW = syscall.Errno(0x4f) + EOWNERDEAD = syscall.Errno(0xa5) + EPFNOSUPPORT = syscall.Errno(0x7b) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x78) + EPROTOTYPE = syscall.Errno(0x62) + EREMCHG = syscall.Errno(0x52) + EREMDEV = syscall.Errno(0x8e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x8c) + ERESTART = syscall.Errno(0x5b) + ERFKILL = syscall.Errno(0xa7) + ESHUTDOWN = syscall.Errno(0x8f) + ESOCKTNOSUPPORT = syscall.Errno(0x79) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x97) + ESTRPIPE = syscall.Errno(0x5c) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x91) + ETOOMANYREFS = syscall.Errno(0x90) + EUCLEAN = syscall.Errno(0x87) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x5e) + EXFULL = syscall.Errno(0x34) +) + +// Signals +const ( + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x12) + SIGCLD = syscall.Signal(0x12) + SIGCONT = syscall.Signal(0x19) + SIGEMT = syscall.Signal(0x7) + SIGIO = syscall.Signal(0x16) + SIGPOLL = syscall.Signal(0x16) + SIGPROF = syscall.Signal(0x1d) + SIGPWR = syscall.Signal(0x13) + SIGSTOP = syscall.Signal(0x17) + SIGSYS = syscall.Signal(0xc) + SIGTSTP = syscall.Signal(0x18) + SIGTTIN = syscall.Signal(0x1a) + SIGTTOU = syscall.Signal(0x1b) + SIGURG = syscall.Signal(0x15) + SIGUSR1 = syscall.Signal(0x10) + SIGUSR2 = syscall.Signal(0x11) + SIGVTALRM = syscall.Signal(0x1c) + SIGWINCH = syscall.Signal(0x14) + SIGXCPU = syscall.Signal(0x1e) + SIGXFSZ = syscall.Signal(0x1f) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "ENOMSG", "no message of desired type"}, + {36, "EIDRM", "identifier removed"}, + {37, "ECHRNG", "channel number out of range"}, + {38, "EL2NSYNC", "level 2 not synchronized"}, + {39, "EL3HLT", "level 3 halted"}, + {40, "EL3RST", "level 3 reset"}, + {41, "ELNRNG", "link number out of range"}, + {42, "EUNATCH", "protocol driver not attached"}, + {43, "ENOCSI", "no CSI structure available"}, + {44, "EL2HLT", "level 2 halted"}, + {45, "EDEADLK", "resource deadlock avoided"}, + {46, "ENOLCK", "no locks available"}, + {50, "EBADE", "invalid exchange"}, + {51, "EBADR", "invalid request descriptor"}, + {52, "EXFULL", "exchange full"}, + {53, "ENOANO", "no anode"}, + {54, "EBADRQC", "invalid request code"}, + {55, "EBADSLT", "invalid slot"}, + {56, "EDEADLOCK", "file locking deadlock error"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EMULTIHOP", "multihop attempted"}, + {77, "EBADMSG", "bad message"}, + {78, "ENAMETOOLONG", "file name too long"}, + {79, "EOVERFLOW", "value too large for defined data type"}, + {80, "ENOTUNIQ", "name not unique on network"}, + {81, "EBADFD", "file descriptor in bad state"}, + {82, "EREMCHG", "remote address changed"}, + {83, "ELIBACC", "can not access a needed shared library"}, + {84, "ELIBBAD", "accessing a corrupted shared library"}, + {85, "ELIBSCN", ".lib section in a.out corrupted"}, + {86, "ELIBMAX", "attempting to link in too many shared libraries"}, + {87, "ELIBEXEC", "cannot exec a shared library directly"}, + {88, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {89, "ENOSYS", "function not implemented"}, + {90, "ELOOP", "too many levels of symbolic links"}, + {91, "ERESTART", "interrupted system call should be restarted"}, + {92, "ESTRPIPE", "streams pipe error"}, + {93, "ENOTEMPTY", "directory not empty"}, + {94, "EUSERS", "too many users"}, + {95, "ENOTSOCK", "socket operation on non-socket"}, + {96, "EDESTADDRREQ", "destination address required"}, + {97, "EMSGSIZE", "message too long"}, + {98, "EPROTOTYPE", "protocol wrong type for socket"}, + {99, "ENOPROTOOPT", "protocol not available"}, + {120, "EPROTONOSUPPORT", "protocol not supported"}, + {121, "ESOCKTNOSUPPORT", "socket type not supported"}, + {122, "ENOTSUP", "operation not supported"}, + {123, "EPFNOSUPPORT", "protocol family not supported"}, + {124, "EAFNOSUPPORT", "address family not supported by protocol"}, + {125, "EADDRINUSE", "address already in use"}, + {126, "EADDRNOTAVAIL", "cannot assign requested address"}, + {127, "ENETDOWN", "network is down"}, + {128, "ENETUNREACH", "network is unreachable"}, + {129, "ENETRESET", "network dropped connection on reset"}, + {130, "ECONNABORTED", "software caused connection abort"}, + {131, "ECONNRESET", "connection reset by peer"}, + {132, "ENOBUFS", "no buffer space available"}, + {133, "EISCONN", "transport endpoint is already connected"}, + {134, "ENOTCONN", "transport endpoint is not connected"}, + {135, "EUCLEAN", "structure needs cleaning"}, + {137, "ENOTNAM", "not a XENIX named type file"}, + {138, "ENAVAIL", "no XENIX semaphores available"}, + {139, "EISNAM", "is a named type file"}, + {140, "EREMOTEIO", "remote I/O error"}, + {141, "EINIT", "unknown error 141"}, + {142, "EREMDEV", "unknown error 142"}, + {143, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {144, "ETOOMANYREFS", "too many references: cannot splice"}, + {145, "ETIMEDOUT", "connection timed out"}, + {146, "ECONNREFUSED", "connection refused"}, + {147, "EHOSTDOWN", "host is down"}, + {148, "EHOSTUNREACH", "no route to host"}, + {149, "EALREADY", "operation already in progress"}, + {150, "EINPROGRESS", "operation now in progress"}, + {151, "ESTALE", "stale file handle"}, + {158, "ECANCELED", "operation canceled"}, + {159, "ENOMEDIUM", "no medium found"}, + {160, "EMEDIUMTYPE", "wrong medium type"}, + {161, "ENOKEY", "required key not available"}, + {162, "EKEYEXPIRED", "key has expired"}, + {163, "EKEYREVOKED", "key has been revoked"}, + {164, "EKEYREJECTED", "key was rejected by service"}, + {165, "EOWNERDEAD", "owner died"}, + {166, "ENOTRECOVERABLE", "state not recoverable"}, + {167, "ERFKILL", "operation not possible due to RF-kill"}, + {168, "EHWPOISON", "memory page has hardware error"}, + {1133, "EDQUOT", "disk quota exceeded"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGUSR1", "user defined signal 1"}, + {17, "SIGUSR2", "user defined signal 2"}, + {18, "SIGCHLD", "child exited"}, + {19, "SIGPWR", "power failure"}, + {20, "SIGWINCH", "window changed"}, + {21, "SIGURG", "urgent I/O condition"}, + {22, "SIGIO", "I/O possible"}, + {23, "SIGSTOP", "stopped (signal)"}, + {24, "SIGTSTP", "stopped"}, + {25, "SIGCONT", "continued"}, + {26, "SIGTTIN", "stopped (tty input)"}, + {27, "SIGTTOU", "stopped (tty output)"}, + {28, "SIGVTALRM", "virtual timer expired"}, + {29, "SIGPROF", "profiling timer expired"}, + {30, "SIGXCPU", "CPU time limit exceeded"}, + {31, "SIGXFSZ", "file size limit exceeded"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go new file mode 100644 index 0000000..496364c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -0,0 +1,833 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build mips64le && linux +// +build mips64le,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go + +package unix + +import "syscall" + +const ( + B1000000 = 0x1008 + B115200 = 0x1002 + B1152000 = 0x1009 + B1500000 = 0x100a + B2000000 = 0x100b + B230400 = 0x1003 + B2500000 = 0x100c + B3000000 = 0x100d + B3500000 = 0x100e + B4000000 = 0x100f + B460800 = 0x1004 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B921600 = 0x1007 + BLKBSZGET = 0x40081270 + BLKBSZSET = 0x80081271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40081272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1000 + BS1 = 0x2000 + BSDLY = 0x2000 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIZE = 0x30 + CSTOPB = 0x40 + ECCGETLAYOUT = 0x41484d11 + ECCGETSTATS = 0x40104d12 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x80 + EPOLL_CLOEXEC = 0x80000 + EXTPROC = 0x10000 + FF1 = 0x8000 + FFDLY = 0x8000 + FICLONE = 0x80049409 + FICLONERANGE = 0x8020940d + FLUSHO = 0x2000 + FS_IOC_ENABLE_VERITY = 0x80806685 + FS_IOC_GETFLAGS = 0x40086601 + FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SETFLAGS = 0x80086602 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + F_GETLK = 0xe + F_GETLK64 = 0xe + F_GETOWN = 0x17 + F_RDLCK = 0x0 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x18 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HIDIOCGRAWINFO = 0x40084803 + HIDIOCGRDESC = 0x50044802 + HIDIOCGRDESCSIZE = 0x40044801 + HUPCL = 0x400 + ICANON = 0x2 + IEXTEN = 0x100 + IN_CLOEXEC = 0x80000 + IN_NONBLOCK = 0x80 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + ISIG = 0x1 + IUCLC = 0x200 + IXOFF = 0x1000 + IXON = 0x400 + MAP_ANON = 0x800 + MAP_ANONYMOUS = 0x800 + MAP_DENYWRITE = 0x2000 + MAP_EXECUTABLE = 0x4000 + MAP_GROWSDOWN = 0x1000 + MAP_HUGETLB = 0x80000 + MAP_LOCKED = 0x8000 + MAP_NONBLOCK = 0x20000 + MAP_NORESERVE = 0x400 + MAP_POPULATE = 0x10000 + MAP_RENAME = 0x800 + MAP_STACK = 0x40000 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MEMERASE = 0x80084d02 + MEMERASE64 = 0x80104d14 + MEMGETBADBLOCK = 0x80084d0b + MEMGETINFO = 0x40204d01 + MEMGETOOBSEL = 0x40c84d0a + MEMGETREGIONCOUNT = 0x40044d07 + MEMISLOCKED = 0x40084d17 + MEMLOCK = 0x80084d05 + MEMREADOOB = 0xc0104d04 + MEMSETBADBLOCK = 0x80084d0c + MEMUNLOCK = 0x80084d06 + MEMWRITEOOB = 0xc0104d03 + MTDFILEMODE = 0x20004d13 + NFDBITS = 0x40 + NLDLY = 0x100 + NOFLSH = 0x80 + NS_GET_NSTYPE = 0x2000b703 + NS_GET_OWNER_UID = 0x2000b704 + NS_GET_PARENT = 0x2000b702 + NS_GET_USERNS = 0x2000b701 + OLCUC = 0x2 + ONLCR = 0x4 + OTPERASE = 0x800c4d19 + OTPGETREGIONCOUNT = 0x80044d0e + OTPGETREGIONINFO = 0x800c4d0f + OTPLOCK = 0x400c4d10 + OTPSELECT = 0x40044d0d + O_APPEND = 0x8 + O_ASYNC = 0x1000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x100 + O_DIRECT = 0x8000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x10 + O_EXCL = 0x400 + O_FSYNC = 0x4010 + O_LARGEFILE = 0x0 + O_NDELAY = 0x80 + O_NOATIME = 0x40000 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x80 + O_PATH = 0x200000 + O_RSYNC = 0x4010 + O_SYNC = 0x4010 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + PARENB = 0x100 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40082407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc008240a + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PPPIOCATTACH = 0x8004743d + PPPIOCATTCHAN = 0x80047438 + PPPIOCBRIDGECHAN = 0x80047435 + PPPIOCCONNECT = 0x8004743a + PPPIOCDETACH = 0x8004743c + PPPIOCDISCONN = 0x20007439 + PPPIOCGASYNCMAP = 0x40047458 + PPPIOCGCHAN = 0x40047437 + PPPIOCGDEBUG = 0x40047441 + PPPIOCGFLAGS = 0x4004745a + PPPIOCGIDLE = 0x4010743f + PPPIOCGIDLE32 = 0x4008743f + PPPIOCGIDLE64 = 0x4010743f + PPPIOCGL2TPSTATS = 0x40487436 + PPPIOCGMRU = 0x40047453 + PPPIOCGRASYNCMAP = 0x40047455 + PPPIOCGUNIT = 0x40047456 + PPPIOCGXASYNCMAP = 0x40207450 + PPPIOCSACTIVE = 0x80107446 + PPPIOCSASYNCMAP = 0x80047457 + PPPIOCSCOMPRESS = 0x8010744d + PPPIOCSDEBUG = 0x80047440 + PPPIOCSFLAGS = 0x80047459 + PPPIOCSMAXCID = 0x80047451 + PPPIOCSMRRU = 0x8004743b + PPPIOCSMRU = 0x80047452 + PPPIOCSNPMODE = 0x8008744b + PPPIOCSPASS = 0x80107447 + PPPIOCSRASYNCMAP = 0x80047454 + PPPIOCSXASYNCMAP = 0x8020744f + PPPIOCUNBRIDGECHAN = 0x20007434 + PPPIOCXFERUNIT = 0x2000744e + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTRACE_GETFPREGS = 0xe + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_GET_THREAD_AREA_3264 = 0xc4 + PTRACE_GET_WATCH_REGS = 0xd0 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_PEEKDATA_3264 = 0xc1 + PTRACE_PEEKTEXT_3264 = 0xc0 + PTRACE_POKEDATA_3264 = 0xc3 + PTRACE_POKETEXT_3264 = 0xc2 + PTRACE_SETFPREGS = 0xf + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SET_WATCH_REGS = 0xd1 + RLIMIT_AS = 0x6 + RLIMIT_MEMLOCK = 0x9 + RLIMIT_NOFILE = 0x5 + RLIMIT_NPROC = 0x8 + RLIMIT_RSS = 0x7 + RNDADDENTROPY = 0x80085203 + RNDADDTOENTCNT = 0x80045201 + RNDCLEARPOOL = 0x20005206 + RNDGETENTCNT = 0x40045200 + RNDGETPOOL = 0x40085202 + RNDRESEEDCRNG = 0x20005207 + RNDZAPENTCNT = 0x20005204 + RTC_AIE_OFF = 0x20007002 + RTC_AIE_ON = 0x20007001 + RTC_ALM_READ = 0x40247008 + RTC_ALM_SET = 0x80247007 + RTC_EPOCH_READ = 0x4008700d + RTC_EPOCH_SET = 0x8008700e + RTC_IRQP_READ = 0x4008700b + RTC_IRQP_SET = 0x8008700c + RTC_PARAM_GET = 0x80187013 + RTC_PARAM_SET = 0x80187014 + RTC_PIE_OFF = 0x20007006 + RTC_PIE_ON = 0x20007005 + RTC_PLL_GET = 0x40207011 + RTC_PLL_SET = 0x80207012 + RTC_RD_TIME = 0x40247009 + RTC_SET_TIME = 0x8024700a + RTC_UIE_OFF = 0x20007004 + RTC_UIE_ON = 0x20007003 + RTC_VL_CLR = 0x20007014 + RTC_VL_READ = 0x40047013 + RTC_WIE_OFF = 0x20007010 + RTC_WIE_ON = 0x2000700f + RTC_WKALM_RD = 0x40287010 + RTC_WKALM_SET = 0x8028700f + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SFD_CLOEXEC = 0x80000 + SFD_NONBLOCK = 0x80 + SIOCATMARK = 0x40047307 + SIOCGPGRP = 0x40047309 + SIOCGSTAMPNS_NEW = 0x40108907 + SIOCGSTAMP_NEW = 0x40108906 + SIOCINQ = 0x467f + SIOCOUTQ = 0x7472 + SIOCSPGRP = 0x80047308 + SOCK_CLOEXEC = 0x80000 + SOCK_DGRAM = 0x1 + SOCK_NONBLOCK = 0x80 + SOCK_STREAM = 0x2 + SOL_SOCKET = 0xffff + SO_ACCEPTCONN = 0x1009 + SO_ATTACH_BPF = 0x32 + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BINDTOIFINDEX = 0x3e + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x20 + SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 + SO_BUSY_POLL = 0x2e + SO_BUSY_POLL_BUDGET = 0x46 + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DOMAIN = 0x1029 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 + SO_NOFCS = 0x2b + SO_OOBINLINE = 0x100 + SO_PASSCRED = 0x11 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x12 + SO_PEERGROUPS = 0x3b + SO_PEERSEC = 0x1e + SO_PREFER_BUSY_POLL = 0x45 + SO_PROTOCOL = 0x1028 + SO_RCVBUF = 0x1002 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_RCVTIMEO_NEW = 0x42 + SO_RCVTIMEO_OLD = 0x1006 + SO_RESERVE_MEM = 0x49 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x1001 + SO_SNDBUFFORCE = 0x1f + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_SNDTIMEO_NEW = 0x43 + SO_SNDTIMEO_OLD = 0x1005 + SO_STYLE = 0x1008 + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPING_NEW = 0x41 + SO_TIMESTAMPING_OLD = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TIMESTAMPNS_NEW = 0x40 + SO_TIMESTAMPNS_OLD = 0x23 + SO_TIMESTAMP_NEW = 0x3f + SO_TXTIME = 0x3d + SO_TYPE = 0x1008 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x5407 + TCGETA = 0x5401 + TCGETS = 0x540d + TCGETS2 = 0x4030542a + TCSAFLUSH = 0x5410 + TCSBRK = 0x5405 + TCSBRKP = 0x5486 + TCSETA = 0x5402 + TCSETAF = 0x5404 + TCSETAW = 0x5403 + TCSETS = 0x540e + TCSETS2 = 0x8030542b + TCSETSF = 0x5410 + TCSETSF2 = 0x8030542d + TCSETSW = 0x540f + TCSETSW2 = 0x8030542c + TCXONC = 0x5406 + TFD_CLOEXEC = 0x80000 + TFD_NONBLOCK = 0x80 + TIOCCBRK = 0x5428 + TIOCCONS = 0x80047478 + TIOCEXCL = 0x740d + TIOCGDEV = 0x40045432 + TIOCGETD = 0x7400 + TIOCGETP = 0x7408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x5492 + TIOCGISO7816 = 0x40285442 + TIOCGLCKTRMIOS = 0x548b + TIOCGLTC = 0x7474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 + TIOCGRS485 = 0x4020542e + TIOCGSERIAL = 0x5484 + TIOCGSID = 0x7416 + TIOCGSOFTCAR = 0x5481 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x467f + TIOCLINUX = 0x5483 + TIOCMBIC = 0x741c + TIOCMBIS = 0x741b + TIOCMGET = 0x741d + TIOCMIWAIT = 0x5491 + TIOCMSET = 0x741a + TIOCM_CAR = 0x100 + TIOCM_CD = 0x100 + TIOCM_CTS = 0x40 + TIOCM_DSR = 0x400 + TIOCM_RI = 0x200 + TIOCM_RNG = 0x200 + TIOCM_SR = 0x20 + TIOCM_ST = 0x10 + TIOCNOTTY = 0x5471 + TIOCNXCL = 0x740e + TIOCOUTQ = 0x7472 + TIOCPKT = 0x5470 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x5480 + TIOCSERCONFIG = 0x5488 + TIOCSERGETLSR = 0x548e + TIOCSERGETMULTI = 0x548f + TIOCSERGSTRUCT = 0x548d + TIOCSERGWILD = 0x5489 + TIOCSERSETMULTI = 0x5490 + TIOCSERSWILD = 0x548a + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x7401 + TIOCSETN = 0x740a + TIOCSETP = 0x7409 + TIOCSIG = 0x80045436 + TIOCSISO7816 = 0xc0285443 + TIOCSLCKTRMIOS = 0x548c + TIOCSLTC = 0x7475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0xc020542f + TIOCSSERIAL = 0x5485 + TIOCSSOFTCAR = 0x5482 + TIOCSTI = 0x5472 + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x8000 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETDEVNETNS = 0x200054e3 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETCARRIER = 0x800454e2 + TUNSETDEBUG = 0x800454c9 + TUNSETFILTEREBPF = 0x400454e1 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETSTEERINGEBPF = 0x400454e0 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UBI_IOCATT = 0x80186f40 + UBI_IOCDET = 0x80046f41 + UBI_IOCEBCH = 0x80044f02 + UBI_IOCEBER = 0x80044f01 + UBI_IOCEBISMAP = 0x40044f05 + UBI_IOCEBMAP = 0x80084f03 + UBI_IOCEBUNMAP = 0x80044f04 + UBI_IOCMKVOL = 0x80986f00 + UBI_IOCRMVOL = 0x80046f01 + UBI_IOCRNVOL = 0x91106f03 + UBI_IOCRPEB = 0x80046f04 + UBI_IOCRSVOL = 0x800c6f02 + UBI_IOCSETVOLPROP = 0x80104f06 + UBI_IOCSPEB = 0x80046f05 + UBI_IOCVOLCRBLK = 0x80804f07 + UBI_IOCVOLRMBLK = 0x20004f08 + UBI_IOCVOLUP = 0x80084f00 + VDISCARD = 0xd + VEOF = 0x10 + VEOL = 0x11 + VEOL2 = 0x6 + VMIN = 0x4 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VSWTCH = 0x7 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WORDSIZE = 0x40 + XCASE = 0x4 + XTABS = 0x1800 + _HIDIOCGRAWNAME = 0x40804804 + _HIDIOCGRAWPHYS = 0x40404805 + _HIDIOCGRAWUNIQ = 0x40404808 +) + +// Errors +const ( + EADDRINUSE = syscall.Errno(0x7d) + EADDRNOTAVAIL = syscall.Errno(0x7e) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x7c) + EALREADY = syscall.Errno(0x95) + EBADE = syscall.Errno(0x32) + EBADFD = syscall.Errno(0x51) + EBADMSG = syscall.Errno(0x4d) + EBADR = syscall.Errno(0x33) + EBADRQC = syscall.Errno(0x36) + EBADSLT = syscall.Errno(0x37) + EBFONT = syscall.Errno(0x3b) + ECANCELED = syscall.Errno(0x9e) + ECHRNG = syscall.Errno(0x25) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x82) + ECONNREFUSED = syscall.Errno(0x92) + ECONNRESET = syscall.Errno(0x83) + EDEADLK = syscall.Errno(0x2d) + EDEADLOCK = syscall.Errno(0x38) + EDESTADDRREQ = syscall.Errno(0x60) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x46d) + EHOSTDOWN = syscall.Errno(0x93) + EHOSTUNREACH = syscall.Errno(0x94) + EHWPOISON = syscall.Errno(0xa8) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x58) + EINIT = syscall.Errno(0x8d) + EINPROGRESS = syscall.Errno(0x96) + EISCONN = syscall.Errno(0x85) + EISNAM = syscall.Errno(0x8b) + EKEYEXPIRED = syscall.Errno(0xa2) + EKEYREJECTED = syscall.Errno(0xa4) + EKEYREVOKED = syscall.Errno(0xa3) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELIBACC = syscall.Errno(0x53) + ELIBBAD = syscall.Errno(0x54) + ELIBEXEC = syscall.Errno(0x57) + ELIBMAX = syscall.Errno(0x56) + ELIBSCN = syscall.Errno(0x55) + ELNRNG = syscall.Errno(0x29) + ELOOP = syscall.Errno(0x5a) + EMEDIUMTYPE = syscall.Errno(0xa0) + EMSGSIZE = syscall.Errno(0x61) + EMULTIHOP = syscall.Errno(0x4a) + ENAMETOOLONG = syscall.Errno(0x4e) + ENAVAIL = syscall.Errno(0x8a) + ENETDOWN = syscall.Errno(0x7f) + ENETRESET = syscall.Errno(0x81) + ENETUNREACH = syscall.Errno(0x80) + ENOANO = syscall.Errno(0x35) + ENOBUFS = syscall.Errno(0x84) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x3d) + ENOKEY = syscall.Errno(0xa1) + ENOLCK = syscall.Errno(0x2e) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x9f) + ENOMSG = syscall.Errno(0x23) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x63) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x59) + ENOTCONN = syscall.Errno(0x86) + ENOTEMPTY = syscall.Errno(0x5d) + ENOTNAM = syscall.Errno(0x89) + ENOTRECOVERABLE = syscall.Errno(0xa6) + ENOTSOCK = syscall.Errno(0x5f) + ENOTSUP = syscall.Errno(0x7a) + ENOTUNIQ = syscall.Errno(0x50) + EOPNOTSUPP = syscall.Errno(0x7a) + EOVERFLOW = syscall.Errno(0x4f) + EOWNERDEAD = syscall.Errno(0xa5) + EPFNOSUPPORT = syscall.Errno(0x7b) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x78) + EPROTOTYPE = syscall.Errno(0x62) + EREMCHG = syscall.Errno(0x52) + EREMDEV = syscall.Errno(0x8e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x8c) + ERESTART = syscall.Errno(0x5b) + ERFKILL = syscall.Errno(0xa7) + ESHUTDOWN = syscall.Errno(0x8f) + ESOCKTNOSUPPORT = syscall.Errno(0x79) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x97) + ESTRPIPE = syscall.Errno(0x5c) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x91) + ETOOMANYREFS = syscall.Errno(0x90) + EUCLEAN = syscall.Errno(0x87) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x5e) + EXFULL = syscall.Errno(0x34) +) + +// Signals +const ( + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x12) + SIGCLD = syscall.Signal(0x12) + SIGCONT = syscall.Signal(0x19) + SIGEMT = syscall.Signal(0x7) + SIGIO = syscall.Signal(0x16) + SIGPOLL = syscall.Signal(0x16) + SIGPROF = syscall.Signal(0x1d) + SIGPWR = syscall.Signal(0x13) + SIGSTOP = syscall.Signal(0x17) + SIGSYS = syscall.Signal(0xc) + SIGTSTP = syscall.Signal(0x18) + SIGTTIN = syscall.Signal(0x1a) + SIGTTOU = syscall.Signal(0x1b) + SIGURG = syscall.Signal(0x15) + SIGUSR1 = syscall.Signal(0x10) + SIGUSR2 = syscall.Signal(0x11) + SIGVTALRM = syscall.Signal(0x1c) + SIGWINCH = syscall.Signal(0x14) + SIGXCPU = syscall.Signal(0x1e) + SIGXFSZ = syscall.Signal(0x1f) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "ENOMSG", "no message of desired type"}, + {36, "EIDRM", "identifier removed"}, + {37, "ECHRNG", "channel number out of range"}, + {38, "EL2NSYNC", "level 2 not synchronized"}, + {39, "EL3HLT", "level 3 halted"}, + {40, "EL3RST", "level 3 reset"}, + {41, "ELNRNG", "link number out of range"}, + {42, "EUNATCH", "protocol driver not attached"}, + {43, "ENOCSI", "no CSI structure available"}, + {44, "EL2HLT", "level 2 halted"}, + {45, "EDEADLK", "resource deadlock avoided"}, + {46, "ENOLCK", "no locks available"}, + {50, "EBADE", "invalid exchange"}, + {51, "EBADR", "invalid request descriptor"}, + {52, "EXFULL", "exchange full"}, + {53, "ENOANO", "no anode"}, + {54, "EBADRQC", "invalid request code"}, + {55, "EBADSLT", "invalid slot"}, + {56, "EDEADLOCK", "file locking deadlock error"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EMULTIHOP", "multihop attempted"}, + {77, "EBADMSG", "bad message"}, + {78, "ENAMETOOLONG", "file name too long"}, + {79, "EOVERFLOW", "value too large for defined data type"}, + {80, "ENOTUNIQ", "name not unique on network"}, + {81, "EBADFD", "file descriptor in bad state"}, + {82, "EREMCHG", "remote address changed"}, + {83, "ELIBACC", "can not access a needed shared library"}, + {84, "ELIBBAD", "accessing a corrupted shared library"}, + {85, "ELIBSCN", ".lib section in a.out corrupted"}, + {86, "ELIBMAX", "attempting to link in too many shared libraries"}, + {87, "ELIBEXEC", "cannot exec a shared library directly"}, + {88, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {89, "ENOSYS", "function not implemented"}, + {90, "ELOOP", "too many levels of symbolic links"}, + {91, "ERESTART", "interrupted system call should be restarted"}, + {92, "ESTRPIPE", "streams pipe error"}, + {93, "ENOTEMPTY", "directory not empty"}, + {94, "EUSERS", "too many users"}, + {95, "ENOTSOCK", "socket operation on non-socket"}, + {96, "EDESTADDRREQ", "destination address required"}, + {97, "EMSGSIZE", "message too long"}, + {98, "EPROTOTYPE", "protocol wrong type for socket"}, + {99, "ENOPROTOOPT", "protocol not available"}, + {120, "EPROTONOSUPPORT", "protocol not supported"}, + {121, "ESOCKTNOSUPPORT", "socket type not supported"}, + {122, "ENOTSUP", "operation not supported"}, + {123, "EPFNOSUPPORT", "protocol family not supported"}, + {124, "EAFNOSUPPORT", "address family not supported by protocol"}, + {125, "EADDRINUSE", "address already in use"}, + {126, "EADDRNOTAVAIL", "cannot assign requested address"}, + {127, "ENETDOWN", "network is down"}, + {128, "ENETUNREACH", "network is unreachable"}, + {129, "ENETRESET", "network dropped connection on reset"}, + {130, "ECONNABORTED", "software caused connection abort"}, + {131, "ECONNRESET", "connection reset by peer"}, + {132, "ENOBUFS", "no buffer space available"}, + {133, "EISCONN", "transport endpoint is already connected"}, + {134, "ENOTCONN", "transport endpoint is not connected"}, + {135, "EUCLEAN", "structure needs cleaning"}, + {137, "ENOTNAM", "not a XENIX named type file"}, + {138, "ENAVAIL", "no XENIX semaphores available"}, + {139, "EISNAM", "is a named type file"}, + {140, "EREMOTEIO", "remote I/O error"}, + {141, "EINIT", "unknown error 141"}, + {142, "EREMDEV", "unknown error 142"}, + {143, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {144, "ETOOMANYREFS", "too many references: cannot splice"}, + {145, "ETIMEDOUT", "connection timed out"}, + {146, "ECONNREFUSED", "connection refused"}, + {147, "EHOSTDOWN", "host is down"}, + {148, "EHOSTUNREACH", "no route to host"}, + {149, "EALREADY", "operation already in progress"}, + {150, "EINPROGRESS", "operation now in progress"}, + {151, "ESTALE", "stale file handle"}, + {158, "ECANCELED", "operation canceled"}, + {159, "ENOMEDIUM", "no medium found"}, + {160, "EMEDIUMTYPE", "wrong medium type"}, + {161, "ENOKEY", "required key not available"}, + {162, "EKEYEXPIRED", "key has expired"}, + {163, "EKEYREVOKED", "key has been revoked"}, + {164, "EKEYREJECTED", "key was rejected by service"}, + {165, "EOWNERDEAD", "owner died"}, + {166, "ENOTRECOVERABLE", "state not recoverable"}, + {167, "ERFKILL", "operation not possible due to RF-kill"}, + {168, "EHWPOISON", "memory page has hardware error"}, + {1133, "EDQUOT", "disk quota exceeded"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGUSR1", "user defined signal 1"}, + {17, "SIGUSR2", "user defined signal 2"}, + {18, "SIGCHLD", "child exited"}, + {19, "SIGPWR", "power failure"}, + {20, "SIGWINCH", "window changed"}, + {21, "SIGURG", "urgent I/O condition"}, + {22, "SIGIO", "I/O possible"}, + {23, "SIGSTOP", "stopped (signal)"}, + {24, "SIGTSTP", "stopped"}, + {25, "SIGCONT", "continued"}, + {26, "SIGTTIN", "stopped (tty input)"}, + {27, "SIGTTOU", "stopped (tty output)"}, + {28, "SIGVTALRM", "virtual timer expired"}, + {29, "SIGPROF", "profiling timer expired"}, + {30, "SIGXCPU", "CPU time limit exceeded"}, + {31, "SIGXFSZ", "file size limit exceeded"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go new file mode 100644 index 0000000..3e40830 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -0,0 +1,833 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build mipsle && linux +// +build mipsle,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go + +package unix + +import "syscall" + +const ( + B1000000 = 0x1008 + B115200 = 0x1002 + B1152000 = 0x1009 + B1500000 = 0x100a + B2000000 = 0x100b + B230400 = 0x1003 + B2500000 = 0x100c + B3000000 = 0x100d + B3500000 = 0x100e + B4000000 = 0x100f + B460800 = 0x1004 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B921600 = 0x1007 + BLKBSZGET = 0x40041270 + BLKBSZSET = 0x80041271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40041272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1000 + BS1 = 0x2000 + BSDLY = 0x2000 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIZE = 0x30 + CSTOPB = 0x40 + ECCGETLAYOUT = 0x41484d11 + ECCGETSTATS = 0x40104d12 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x80 + EPOLL_CLOEXEC = 0x80000 + EXTPROC = 0x10000 + FF1 = 0x8000 + FFDLY = 0x8000 + FICLONE = 0x80049409 + FICLONERANGE = 0x8020940d + FLUSHO = 0x2000 + FS_IOC_ENABLE_VERITY = 0x80806685 + FS_IOC_GETFLAGS = 0x40046601 + FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SETFLAGS = 0x80046602 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + F_GETLK = 0x21 + F_GETLK64 = 0x21 + F_GETOWN = 0x17 + F_RDLCK = 0x0 + F_SETLK = 0x22 + F_SETLK64 = 0x22 + F_SETLKW = 0x23 + F_SETLKW64 = 0x23 + F_SETOWN = 0x18 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HIDIOCGRAWINFO = 0x40084803 + HIDIOCGRDESC = 0x50044802 + HIDIOCGRDESCSIZE = 0x40044801 + HUPCL = 0x400 + ICANON = 0x2 + IEXTEN = 0x100 + IN_CLOEXEC = 0x80000 + IN_NONBLOCK = 0x80 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + ISIG = 0x1 + IUCLC = 0x200 + IXOFF = 0x1000 + IXON = 0x400 + MAP_ANON = 0x800 + MAP_ANONYMOUS = 0x800 + MAP_DENYWRITE = 0x2000 + MAP_EXECUTABLE = 0x4000 + MAP_GROWSDOWN = 0x1000 + MAP_HUGETLB = 0x80000 + MAP_LOCKED = 0x8000 + MAP_NONBLOCK = 0x20000 + MAP_NORESERVE = 0x400 + MAP_POPULATE = 0x10000 + MAP_RENAME = 0x800 + MAP_STACK = 0x40000 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MEMERASE = 0x80084d02 + MEMERASE64 = 0x80104d14 + MEMGETBADBLOCK = 0x80084d0b + MEMGETINFO = 0x40204d01 + MEMGETOOBSEL = 0x40c84d0a + MEMGETREGIONCOUNT = 0x40044d07 + MEMISLOCKED = 0x40084d17 + MEMLOCK = 0x80084d05 + MEMREADOOB = 0xc00c4d04 + MEMSETBADBLOCK = 0x80084d0c + MEMUNLOCK = 0x80084d06 + MEMWRITEOOB = 0xc00c4d03 + MTDFILEMODE = 0x20004d13 + NFDBITS = 0x20 + NLDLY = 0x100 + NOFLSH = 0x80 + NS_GET_NSTYPE = 0x2000b703 + NS_GET_OWNER_UID = 0x2000b704 + NS_GET_PARENT = 0x2000b702 + NS_GET_USERNS = 0x2000b701 + OLCUC = 0x2 + ONLCR = 0x4 + OTPERASE = 0x800c4d19 + OTPGETREGIONCOUNT = 0x80044d0e + OTPGETREGIONINFO = 0x800c4d0f + OTPLOCK = 0x400c4d10 + OTPSELECT = 0x40044d0d + O_APPEND = 0x8 + O_ASYNC = 0x1000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x100 + O_DIRECT = 0x8000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x10 + O_EXCL = 0x400 + O_FSYNC = 0x4010 + O_LARGEFILE = 0x2000 + O_NDELAY = 0x80 + O_NOATIME = 0x40000 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x80 + O_PATH = 0x200000 + O_RSYNC = 0x4010 + O_SYNC = 0x4010 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + PARENB = 0x100 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40042407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8004240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc004240a + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80042406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PPPIOCATTACH = 0x8004743d + PPPIOCATTCHAN = 0x80047438 + PPPIOCBRIDGECHAN = 0x80047435 + PPPIOCCONNECT = 0x8004743a + PPPIOCDETACH = 0x8004743c + PPPIOCDISCONN = 0x20007439 + PPPIOCGASYNCMAP = 0x40047458 + PPPIOCGCHAN = 0x40047437 + PPPIOCGDEBUG = 0x40047441 + PPPIOCGFLAGS = 0x4004745a + PPPIOCGIDLE = 0x4008743f + PPPIOCGIDLE32 = 0x4008743f + PPPIOCGIDLE64 = 0x4010743f + PPPIOCGL2TPSTATS = 0x40487436 + PPPIOCGMRU = 0x40047453 + PPPIOCGRASYNCMAP = 0x40047455 + PPPIOCGUNIT = 0x40047456 + PPPIOCGXASYNCMAP = 0x40207450 + PPPIOCSACTIVE = 0x80087446 + PPPIOCSASYNCMAP = 0x80047457 + PPPIOCSCOMPRESS = 0x800c744d + PPPIOCSDEBUG = 0x80047440 + PPPIOCSFLAGS = 0x80047459 + PPPIOCSMAXCID = 0x80047451 + PPPIOCSMRRU = 0x8004743b + PPPIOCSMRU = 0x80047452 + PPPIOCSNPMODE = 0x8008744b + PPPIOCSPASS = 0x80087447 + PPPIOCSRASYNCMAP = 0x80047454 + PPPIOCSXASYNCMAP = 0x8020744f + PPPIOCUNBRIDGECHAN = 0x20007434 + PPPIOCXFERUNIT = 0x2000744e + PR_SET_PTRACER_ANY = 0xffffffff + PTRACE_GETFPREGS = 0xe + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_GET_THREAD_AREA_3264 = 0xc4 + PTRACE_GET_WATCH_REGS = 0xd0 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_PEEKDATA_3264 = 0xc1 + PTRACE_PEEKTEXT_3264 = 0xc0 + PTRACE_POKEDATA_3264 = 0xc3 + PTRACE_POKETEXT_3264 = 0xc2 + PTRACE_SETFPREGS = 0xf + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SET_WATCH_REGS = 0xd1 + RLIMIT_AS = 0x6 + RLIMIT_MEMLOCK = 0x9 + RLIMIT_NOFILE = 0x5 + RLIMIT_NPROC = 0x8 + RLIMIT_RSS = 0x7 + RNDADDENTROPY = 0x80085203 + RNDADDTOENTCNT = 0x80045201 + RNDCLEARPOOL = 0x20005206 + RNDGETENTCNT = 0x40045200 + RNDGETPOOL = 0x40085202 + RNDRESEEDCRNG = 0x20005207 + RNDZAPENTCNT = 0x20005204 + RTC_AIE_OFF = 0x20007002 + RTC_AIE_ON = 0x20007001 + RTC_ALM_READ = 0x40247008 + RTC_ALM_SET = 0x80247007 + RTC_EPOCH_READ = 0x4004700d + RTC_EPOCH_SET = 0x8004700e + RTC_IRQP_READ = 0x4004700b + RTC_IRQP_SET = 0x8004700c + RTC_PARAM_GET = 0x80187013 + RTC_PARAM_SET = 0x80187014 + RTC_PIE_OFF = 0x20007006 + RTC_PIE_ON = 0x20007005 + RTC_PLL_GET = 0x401c7011 + RTC_PLL_SET = 0x801c7012 + RTC_RD_TIME = 0x40247009 + RTC_SET_TIME = 0x8024700a + RTC_UIE_OFF = 0x20007004 + RTC_UIE_ON = 0x20007003 + RTC_VL_CLR = 0x20007014 + RTC_VL_READ = 0x40047013 + RTC_WIE_OFF = 0x20007010 + RTC_WIE_ON = 0x2000700f + RTC_WKALM_RD = 0x40287010 + RTC_WKALM_SET = 0x8028700f + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SFD_CLOEXEC = 0x80000 + SFD_NONBLOCK = 0x80 + SIOCATMARK = 0x40047307 + SIOCGPGRP = 0x40047309 + SIOCGSTAMPNS_NEW = 0x40108907 + SIOCGSTAMP_NEW = 0x40108906 + SIOCINQ = 0x467f + SIOCOUTQ = 0x7472 + SIOCSPGRP = 0x80047308 + SOCK_CLOEXEC = 0x80000 + SOCK_DGRAM = 0x1 + SOCK_NONBLOCK = 0x80 + SOCK_STREAM = 0x2 + SOL_SOCKET = 0xffff + SO_ACCEPTCONN = 0x1009 + SO_ATTACH_BPF = 0x32 + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BINDTOIFINDEX = 0x3e + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x20 + SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 + SO_BUSY_POLL = 0x2e + SO_BUSY_POLL_BUDGET = 0x46 + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DOMAIN = 0x1029 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 + SO_NOFCS = 0x2b + SO_OOBINLINE = 0x100 + SO_PASSCRED = 0x11 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x12 + SO_PEERGROUPS = 0x3b + SO_PEERSEC = 0x1e + SO_PREFER_BUSY_POLL = 0x45 + SO_PROTOCOL = 0x1028 + SO_RCVBUF = 0x1002 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_RCVTIMEO_NEW = 0x42 + SO_RCVTIMEO_OLD = 0x1006 + SO_RESERVE_MEM = 0x49 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x1001 + SO_SNDBUFFORCE = 0x1f + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_SNDTIMEO_NEW = 0x43 + SO_SNDTIMEO_OLD = 0x1005 + SO_STYLE = 0x1008 + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPING_NEW = 0x41 + SO_TIMESTAMPING_OLD = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TIMESTAMPNS_NEW = 0x40 + SO_TIMESTAMPNS_OLD = 0x23 + SO_TIMESTAMP_NEW = 0x3f + SO_TXTIME = 0x3d + SO_TYPE = 0x1008 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x5407 + TCGETA = 0x5401 + TCGETS = 0x540d + TCGETS2 = 0x4030542a + TCSAFLUSH = 0x5410 + TCSBRK = 0x5405 + TCSBRKP = 0x5486 + TCSETA = 0x5402 + TCSETAF = 0x5404 + TCSETAW = 0x5403 + TCSETS = 0x540e + TCSETS2 = 0x8030542b + TCSETSF = 0x5410 + TCSETSF2 = 0x8030542d + TCSETSW = 0x540f + TCSETSW2 = 0x8030542c + TCXONC = 0x5406 + TFD_CLOEXEC = 0x80000 + TFD_NONBLOCK = 0x80 + TIOCCBRK = 0x5428 + TIOCCONS = 0x80047478 + TIOCEXCL = 0x740d + TIOCGDEV = 0x40045432 + TIOCGETD = 0x7400 + TIOCGETP = 0x7408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x5492 + TIOCGISO7816 = 0x40285442 + TIOCGLCKTRMIOS = 0x548b + TIOCGLTC = 0x7474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 + TIOCGRS485 = 0x4020542e + TIOCGSERIAL = 0x5484 + TIOCGSID = 0x7416 + TIOCGSOFTCAR = 0x5481 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x467f + TIOCLINUX = 0x5483 + TIOCMBIC = 0x741c + TIOCMBIS = 0x741b + TIOCMGET = 0x741d + TIOCMIWAIT = 0x5491 + TIOCMSET = 0x741a + TIOCM_CAR = 0x100 + TIOCM_CD = 0x100 + TIOCM_CTS = 0x40 + TIOCM_DSR = 0x400 + TIOCM_RI = 0x200 + TIOCM_RNG = 0x200 + TIOCM_SR = 0x20 + TIOCM_ST = 0x10 + TIOCNOTTY = 0x5471 + TIOCNXCL = 0x740e + TIOCOUTQ = 0x7472 + TIOCPKT = 0x5470 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x5480 + TIOCSERCONFIG = 0x5488 + TIOCSERGETLSR = 0x548e + TIOCSERGETMULTI = 0x548f + TIOCSERGSTRUCT = 0x548d + TIOCSERGWILD = 0x5489 + TIOCSERSETMULTI = 0x5490 + TIOCSERSWILD = 0x548a + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x7401 + TIOCSETN = 0x740a + TIOCSETP = 0x7409 + TIOCSIG = 0x80045436 + TIOCSISO7816 = 0xc0285443 + TIOCSLCKTRMIOS = 0x548c + TIOCSLTC = 0x7475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0xc020542f + TIOCSSERIAL = 0x5485 + TIOCSSOFTCAR = 0x5482 + TIOCSTI = 0x5472 + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x8000 + TUNATTACHFILTER = 0x800854d5 + TUNDETACHFILTER = 0x800854d6 + TUNGETDEVNETNS = 0x200054e3 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x400854db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETCARRIER = 0x800454e2 + TUNSETDEBUG = 0x800454c9 + TUNSETFILTEREBPF = 0x400454e1 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETSTEERINGEBPF = 0x400454e0 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UBI_IOCATT = 0x80186f40 + UBI_IOCDET = 0x80046f41 + UBI_IOCEBCH = 0x80044f02 + UBI_IOCEBER = 0x80044f01 + UBI_IOCEBISMAP = 0x40044f05 + UBI_IOCEBMAP = 0x80084f03 + UBI_IOCEBUNMAP = 0x80044f04 + UBI_IOCMKVOL = 0x80986f00 + UBI_IOCRMVOL = 0x80046f01 + UBI_IOCRNVOL = 0x91106f03 + UBI_IOCRPEB = 0x80046f04 + UBI_IOCRSVOL = 0x800c6f02 + UBI_IOCSETVOLPROP = 0x80104f06 + UBI_IOCSPEB = 0x80046f05 + UBI_IOCVOLCRBLK = 0x80804f07 + UBI_IOCVOLRMBLK = 0x20004f08 + UBI_IOCVOLUP = 0x80084f00 + VDISCARD = 0xd + VEOF = 0x10 + VEOL = 0x11 + VEOL2 = 0x6 + VMIN = 0x4 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VSWTCH = 0x7 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WORDSIZE = 0x20 + XCASE = 0x4 + XTABS = 0x1800 + _HIDIOCGRAWNAME = 0x40804804 + _HIDIOCGRAWPHYS = 0x40404805 + _HIDIOCGRAWUNIQ = 0x40404808 +) + +// Errors +const ( + EADDRINUSE = syscall.Errno(0x7d) + EADDRNOTAVAIL = syscall.Errno(0x7e) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x7c) + EALREADY = syscall.Errno(0x95) + EBADE = syscall.Errno(0x32) + EBADFD = syscall.Errno(0x51) + EBADMSG = syscall.Errno(0x4d) + EBADR = syscall.Errno(0x33) + EBADRQC = syscall.Errno(0x36) + EBADSLT = syscall.Errno(0x37) + EBFONT = syscall.Errno(0x3b) + ECANCELED = syscall.Errno(0x9e) + ECHRNG = syscall.Errno(0x25) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x82) + ECONNREFUSED = syscall.Errno(0x92) + ECONNRESET = syscall.Errno(0x83) + EDEADLK = syscall.Errno(0x2d) + EDEADLOCK = syscall.Errno(0x38) + EDESTADDRREQ = syscall.Errno(0x60) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x46d) + EHOSTDOWN = syscall.Errno(0x93) + EHOSTUNREACH = syscall.Errno(0x94) + EHWPOISON = syscall.Errno(0xa8) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x58) + EINIT = syscall.Errno(0x8d) + EINPROGRESS = syscall.Errno(0x96) + EISCONN = syscall.Errno(0x85) + EISNAM = syscall.Errno(0x8b) + EKEYEXPIRED = syscall.Errno(0xa2) + EKEYREJECTED = syscall.Errno(0xa4) + EKEYREVOKED = syscall.Errno(0xa3) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELIBACC = syscall.Errno(0x53) + ELIBBAD = syscall.Errno(0x54) + ELIBEXEC = syscall.Errno(0x57) + ELIBMAX = syscall.Errno(0x56) + ELIBSCN = syscall.Errno(0x55) + ELNRNG = syscall.Errno(0x29) + ELOOP = syscall.Errno(0x5a) + EMEDIUMTYPE = syscall.Errno(0xa0) + EMSGSIZE = syscall.Errno(0x61) + EMULTIHOP = syscall.Errno(0x4a) + ENAMETOOLONG = syscall.Errno(0x4e) + ENAVAIL = syscall.Errno(0x8a) + ENETDOWN = syscall.Errno(0x7f) + ENETRESET = syscall.Errno(0x81) + ENETUNREACH = syscall.Errno(0x80) + ENOANO = syscall.Errno(0x35) + ENOBUFS = syscall.Errno(0x84) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x3d) + ENOKEY = syscall.Errno(0xa1) + ENOLCK = syscall.Errno(0x2e) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x9f) + ENOMSG = syscall.Errno(0x23) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x63) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x59) + ENOTCONN = syscall.Errno(0x86) + ENOTEMPTY = syscall.Errno(0x5d) + ENOTNAM = syscall.Errno(0x89) + ENOTRECOVERABLE = syscall.Errno(0xa6) + ENOTSOCK = syscall.Errno(0x5f) + ENOTSUP = syscall.Errno(0x7a) + ENOTUNIQ = syscall.Errno(0x50) + EOPNOTSUPP = syscall.Errno(0x7a) + EOVERFLOW = syscall.Errno(0x4f) + EOWNERDEAD = syscall.Errno(0xa5) + EPFNOSUPPORT = syscall.Errno(0x7b) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x78) + EPROTOTYPE = syscall.Errno(0x62) + EREMCHG = syscall.Errno(0x52) + EREMDEV = syscall.Errno(0x8e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x8c) + ERESTART = syscall.Errno(0x5b) + ERFKILL = syscall.Errno(0xa7) + ESHUTDOWN = syscall.Errno(0x8f) + ESOCKTNOSUPPORT = syscall.Errno(0x79) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x97) + ESTRPIPE = syscall.Errno(0x5c) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x91) + ETOOMANYREFS = syscall.Errno(0x90) + EUCLEAN = syscall.Errno(0x87) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x5e) + EXFULL = syscall.Errno(0x34) +) + +// Signals +const ( + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x12) + SIGCLD = syscall.Signal(0x12) + SIGCONT = syscall.Signal(0x19) + SIGEMT = syscall.Signal(0x7) + SIGIO = syscall.Signal(0x16) + SIGPOLL = syscall.Signal(0x16) + SIGPROF = syscall.Signal(0x1d) + SIGPWR = syscall.Signal(0x13) + SIGSTOP = syscall.Signal(0x17) + SIGSYS = syscall.Signal(0xc) + SIGTSTP = syscall.Signal(0x18) + SIGTTIN = syscall.Signal(0x1a) + SIGTTOU = syscall.Signal(0x1b) + SIGURG = syscall.Signal(0x15) + SIGUSR1 = syscall.Signal(0x10) + SIGUSR2 = syscall.Signal(0x11) + SIGVTALRM = syscall.Signal(0x1c) + SIGWINCH = syscall.Signal(0x14) + SIGXCPU = syscall.Signal(0x1e) + SIGXFSZ = syscall.Signal(0x1f) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "ENOMSG", "no message of desired type"}, + {36, "EIDRM", "identifier removed"}, + {37, "ECHRNG", "channel number out of range"}, + {38, "EL2NSYNC", "level 2 not synchronized"}, + {39, "EL3HLT", "level 3 halted"}, + {40, "EL3RST", "level 3 reset"}, + {41, "ELNRNG", "link number out of range"}, + {42, "EUNATCH", "protocol driver not attached"}, + {43, "ENOCSI", "no CSI structure available"}, + {44, "EL2HLT", "level 2 halted"}, + {45, "EDEADLK", "resource deadlock avoided"}, + {46, "ENOLCK", "no locks available"}, + {50, "EBADE", "invalid exchange"}, + {51, "EBADR", "invalid request descriptor"}, + {52, "EXFULL", "exchange full"}, + {53, "ENOANO", "no anode"}, + {54, "EBADRQC", "invalid request code"}, + {55, "EBADSLT", "invalid slot"}, + {56, "EDEADLOCK", "file locking deadlock error"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EMULTIHOP", "multihop attempted"}, + {77, "EBADMSG", "bad message"}, + {78, "ENAMETOOLONG", "file name too long"}, + {79, "EOVERFLOW", "value too large for defined data type"}, + {80, "ENOTUNIQ", "name not unique on network"}, + {81, "EBADFD", "file descriptor in bad state"}, + {82, "EREMCHG", "remote address changed"}, + {83, "ELIBACC", "can not access a needed shared library"}, + {84, "ELIBBAD", "accessing a corrupted shared library"}, + {85, "ELIBSCN", ".lib section in a.out corrupted"}, + {86, "ELIBMAX", "attempting to link in too many shared libraries"}, + {87, "ELIBEXEC", "cannot exec a shared library directly"}, + {88, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {89, "ENOSYS", "function not implemented"}, + {90, "ELOOP", "too many levels of symbolic links"}, + {91, "ERESTART", "interrupted system call should be restarted"}, + {92, "ESTRPIPE", "streams pipe error"}, + {93, "ENOTEMPTY", "directory not empty"}, + {94, "EUSERS", "too many users"}, + {95, "ENOTSOCK", "socket operation on non-socket"}, + {96, "EDESTADDRREQ", "destination address required"}, + {97, "EMSGSIZE", "message too long"}, + {98, "EPROTOTYPE", "protocol wrong type for socket"}, + {99, "ENOPROTOOPT", "protocol not available"}, + {120, "EPROTONOSUPPORT", "protocol not supported"}, + {121, "ESOCKTNOSUPPORT", "socket type not supported"}, + {122, "ENOTSUP", "operation not supported"}, + {123, "EPFNOSUPPORT", "protocol family not supported"}, + {124, "EAFNOSUPPORT", "address family not supported by protocol"}, + {125, "EADDRINUSE", "address already in use"}, + {126, "EADDRNOTAVAIL", "cannot assign requested address"}, + {127, "ENETDOWN", "network is down"}, + {128, "ENETUNREACH", "network is unreachable"}, + {129, "ENETRESET", "network dropped connection on reset"}, + {130, "ECONNABORTED", "software caused connection abort"}, + {131, "ECONNRESET", "connection reset by peer"}, + {132, "ENOBUFS", "no buffer space available"}, + {133, "EISCONN", "transport endpoint is already connected"}, + {134, "ENOTCONN", "transport endpoint is not connected"}, + {135, "EUCLEAN", "structure needs cleaning"}, + {137, "ENOTNAM", "not a XENIX named type file"}, + {138, "ENAVAIL", "no XENIX semaphores available"}, + {139, "EISNAM", "is a named type file"}, + {140, "EREMOTEIO", "remote I/O error"}, + {141, "EINIT", "unknown error 141"}, + {142, "EREMDEV", "unknown error 142"}, + {143, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {144, "ETOOMANYREFS", "too many references: cannot splice"}, + {145, "ETIMEDOUT", "connection timed out"}, + {146, "ECONNREFUSED", "connection refused"}, + {147, "EHOSTDOWN", "host is down"}, + {148, "EHOSTUNREACH", "no route to host"}, + {149, "EALREADY", "operation already in progress"}, + {150, "EINPROGRESS", "operation now in progress"}, + {151, "ESTALE", "stale file handle"}, + {158, "ECANCELED", "operation canceled"}, + {159, "ENOMEDIUM", "no medium found"}, + {160, "EMEDIUMTYPE", "wrong medium type"}, + {161, "ENOKEY", "required key not available"}, + {162, "EKEYEXPIRED", "key has expired"}, + {163, "EKEYREVOKED", "key has been revoked"}, + {164, "EKEYREJECTED", "key was rejected by service"}, + {165, "EOWNERDEAD", "owner died"}, + {166, "ENOTRECOVERABLE", "state not recoverable"}, + {167, "ERFKILL", "operation not possible due to RF-kill"}, + {168, "EHWPOISON", "memory page has hardware error"}, + {1133, "EDQUOT", "disk quota exceeded"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGUSR1", "user defined signal 1"}, + {17, "SIGUSR2", "user defined signal 2"}, + {18, "SIGCHLD", "child exited"}, + {19, "SIGPWR", "power failure"}, + {20, "SIGWINCH", "window changed"}, + {21, "SIGURG", "urgent I/O condition"}, + {22, "SIGIO", "I/O possible"}, + {23, "SIGSTOP", "stopped (signal)"}, + {24, "SIGTSTP", "stopped"}, + {25, "SIGCONT", "continued"}, + {26, "SIGTTIN", "stopped (tty input)"}, + {27, "SIGTTOU", "stopped (tty output)"}, + {28, "SIGVTALRM", "virtual timer expired"}, + {29, "SIGPROF", "profiling timer expired"}, + {30, "SIGXCPU", "CPU time limit exceeded"}, + {31, "SIGXFSZ", "file size limit exceeded"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go new file mode 100644 index 0000000..1151a7d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go @@ -0,0 +1,885 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build ppc && linux +// +build ppc,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go + +package unix + +import "syscall" + +const ( + B1000000 = 0x17 + B115200 = 0x11 + B1152000 = 0x18 + B1500000 = 0x19 + B2000000 = 0x1a + B230400 = 0x12 + B2500000 = 0x1b + B3000000 = 0x1c + B3500000 = 0x1d + B4000000 = 0x1e + B460800 = 0x13 + B500000 = 0x14 + B57600 = 0x10 + B576000 = 0x15 + B921600 = 0x16 + BLKBSZGET = 0x40041270 + BLKBSZSET = 0x80041271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40041272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1f + BS1 = 0x8000 + BSDLY = 0x8000 + CBAUD = 0xff + CBAUDEX = 0x0 + CIBAUD = 0xff0000 + CLOCAL = 0x8000 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 + CREAD = 0x800 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTOPB = 0x400 + ECCGETLAYOUT = 0x41484d11 + ECCGETSTATS = 0x40104d12 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EPOLL_CLOEXEC = 0x80000 + EXTPROC = 0x10000000 + FF1 = 0x4000 + FFDLY = 0x4000 + FICLONE = 0x80049409 + FICLONERANGE = 0x8020940d + FLUSHO = 0x800000 + FS_IOC_ENABLE_VERITY = 0x80806685 + FS_IOC_GETFLAGS = 0x40046601 + FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SETFLAGS = 0x80046602 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + F_GETLK = 0xc + F_GETLK64 = 0xc + F_GETOWN = 0x9 + F_RDLCK = 0x0 + F_SETLK = 0xd + F_SETLK64 = 0xd + F_SETLKW = 0xe + F_SETLKW64 = 0xe + F_SETOWN = 0x8 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HIDIOCGRAWINFO = 0x40084803 + HIDIOCGRDESC = 0x50044802 + HIDIOCGRDESCSIZE = 0x40044801 + HUPCL = 0x4000 + ICANON = 0x100 + IEXTEN = 0x400 + IN_CLOEXEC = 0x80000 + IN_NONBLOCK = 0x800 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + ISIG = 0x80 + IUCLC = 0x1000 + IXOFF = 0x400 + IXON = 0x200 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_LOCKED = 0x80 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x40 + MAP_POPULATE = 0x8000 + MAP_STACK = 0x20000 + MAP_SYNC = 0x80000 + MCL_CURRENT = 0x2000 + MCL_FUTURE = 0x4000 + MCL_ONFAULT = 0x8000 + MEMERASE = 0x80084d02 + MEMERASE64 = 0x80104d14 + MEMGETBADBLOCK = 0x80084d0b + MEMGETINFO = 0x40204d01 + MEMGETOOBSEL = 0x40c84d0a + MEMGETREGIONCOUNT = 0x40044d07 + MEMISLOCKED = 0x40084d17 + MEMLOCK = 0x80084d05 + MEMREADOOB = 0xc00c4d04 + MEMSETBADBLOCK = 0x80084d0c + MEMUNLOCK = 0x80084d06 + MEMWRITEOOB = 0xc00c4d03 + MTDFILEMODE = 0x20004d13 + NFDBITS = 0x20 + NL2 = 0x200 + NL3 = 0x300 + NLDLY = 0x300 + NOFLSH = 0x80000000 + NS_GET_NSTYPE = 0x2000b703 + NS_GET_OWNER_UID = 0x2000b704 + NS_GET_PARENT = 0x2000b702 + NS_GET_USERNS = 0x2000b701 + OLCUC = 0x4 + ONLCR = 0x2 + OTPERASE = 0x800c4d19 + OTPGETREGIONCOUNT = 0x80044d0e + OTPGETREGIONINFO = 0x800c4d0f + OTPLOCK = 0x400c4d10 + OTPSELECT = 0x40044d0d + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x20000 + O_DIRECTORY = 0x4000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x10000 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x8000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x404000 + O_TRUNC = 0x200 + PARENB = 0x1000 + PARODD = 0x2000 + PENDIN = 0x20000000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40042407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8004240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc004240a + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80042406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PPPIOCATTACH = 0x8004743d + PPPIOCATTCHAN = 0x80047438 + PPPIOCBRIDGECHAN = 0x80047435 + PPPIOCCONNECT = 0x8004743a + PPPIOCDETACH = 0x8004743c + PPPIOCDISCONN = 0x20007439 + PPPIOCGASYNCMAP = 0x40047458 + PPPIOCGCHAN = 0x40047437 + PPPIOCGDEBUG = 0x40047441 + PPPIOCGFLAGS = 0x4004745a + PPPIOCGIDLE = 0x4008743f + PPPIOCGIDLE32 = 0x4008743f + PPPIOCGIDLE64 = 0x4010743f + PPPIOCGL2TPSTATS = 0x40487436 + PPPIOCGMRU = 0x40047453 + PPPIOCGRASYNCMAP = 0x40047455 + PPPIOCGUNIT = 0x40047456 + PPPIOCGXASYNCMAP = 0x40207450 + PPPIOCSACTIVE = 0x80087446 + PPPIOCSASYNCMAP = 0x80047457 + PPPIOCSCOMPRESS = 0x800c744d + PPPIOCSDEBUG = 0x80047440 + PPPIOCSFLAGS = 0x80047459 + PPPIOCSMAXCID = 0x80047451 + PPPIOCSMRRU = 0x8004743b + PPPIOCSMRU = 0x80047452 + PPPIOCSNPMODE = 0x8008744b + PPPIOCSPASS = 0x80087447 + PPPIOCSRASYNCMAP = 0x80047454 + PPPIOCSXASYNCMAP = 0x8020744f + PPPIOCUNBRIDGECHAN = 0x20007434 + PPPIOCXFERUNIT = 0x2000744e + PROT_SAO = 0x10 + PR_SET_PTRACER_ANY = 0xffffffff + PTRACE_GETEVRREGS = 0x14 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS64 = 0x16 + PTRACE_GETVRREGS = 0x12 + PTRACE_GETVSRREGS = 0x1b + PTRACE_GET_DEBUGREG = 0x19 + PTRACE_SETEVRREGS = 0x15 + PTRACE_SETFPREGS = 0xf + PTRACE_SETREGS64 = 0x17 + PTRACE_SETVRREGS = 0x13 + PTRACE_SETVSRREGS = 0x1c + PTRACE_SET_DEBUGREG = 0x1a + PTRACE_SINGLEBLOCK = 0x100 + PTRACE_SYSEMU = 0x1d + PTRACE_SYSEMU_SINGLESTEP = 0x1e + PT_CCR = 0x26 + PT_CTR = 0x23 + PT_DAR = 0x29 + PT_DSCR = 0x2c + PT_DSISR = 0x2a + PT_FPR0 = 0x30 + PT_FPR31 = 0x6e + PT_FPSCR = 0x71 + PT_LNK = 0x24 + PT_MQ = 0x27 + PT_MSR = 0x21 + PT_NIP = 0x20 + PT_ORIG_R3 = 0x22 + PT_R0 = 0x0 + PT_R1 = 0x1 + PT_R10 = 0xa + PT_R11 = 0xb + PT_R12 = 0xc + PT_R13 = 0xd + PT_R14 = 0xe + PT_R15 = 0xf + PT_R16 = 0x10 + PT_R17 = 0x11 + PT_R18 = 0x12 + PT_R19 = 0x13 + PT_R2 = 0x2 + PT_R20 = 0x14 + PT_R21 = 0x15 + PT_R22 = 0x16 + PT_R23 = 0x17 + PT_R24 = 0x18 + PT_R25 = 0x19 + PT_R26 = 0x1a + PT_R27 = 0x1b + PT_R28 = 0x1c + PT_R29 = 0x1d + PT_R3 = 0x3 + PT_R30 = 0x1e + PT_R31 = 0x1f + PT_R4 = 0x4 + PT_R5 = 0x5 + PT_R6 = 0x6 + PT_R7 = 0x7 + PT_R8 = 0x8 + PT_R9 = 0x9 + PT_REGS_COUNT = 0x2c + PT_RESULT = 0x2b + PT_TRAP = 0x28 + PT_XER = 0x25 + RLIMIT_AS = 0x9 + RLIMIT_MEMLOCK = 0x8 + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RNDADDENTROPY = 0x80085203 + RNDADDTOENTCNT = 0x80045201 + RNDCLEARPOOL = 0x20005206 + RNDGETENTCNT = 0x40045200 + RNDGETPOOL = 0x40085202 + RNDRESEEDCRNG = 0x20005207 + RNDZAPENTCNT = 0x20005204 + RTC_AIE_OFF = 0x20007002 + RTC_AIE_ON = 0x20007001 + RTC_ALM_READ = 0x40247008 + RTC_ALM_SET = 0x80247007 + RTC_EPOCH_READ = 0x4004700d + RTC_EPOCH_SET = 0x8004700e + RTC_IRQP_READ = 0x4004700b + RTC_IRQP_SET = 0x8004700c + RTC_PARAM_GET = 0x80187013 + RTC_PARAM_SET = 0x80187014 + RTC_PIE_OFF = 0x20007006 + RTC_PIE_ON = 0x20007005 + RTC_PLL_GET = 0x401c7011 + RTC_PLL_SET = 0x801c7012 + RTC_RD_TIME = 0x40247009 + RTC_SET_TIME = 0x8024700a + RTC_UIE_OFF = 0x20007004 + RTC_UIE_ON = 0x20007003 + RTC_VL_CLR = 0x20007014 + RTC_VL_READ = 0x40047013 + RTC_WIE_OFF = 0x20007010 + RTC_WIE_ON = 0x2000700f + RTC_WKALM_RD = 0x40287010 + RTC_WKALM_SET = 0x8028700f + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SFD_CLOEXEC = 0x80000 + SFD_NONBLOCK = 0x800 + SIOCATMARK = 0x8905 + SIOCGPGRP = 0x8904 + SIOCGSTAMPNS_NEW = 0x40108907 + SIOCGSTAMP_NEW = 0x40108906 + SIOCINQ = 0x4004667f + SIOCOUTQ = 0x40047473 + SIOCSPGRP = 0x8902 + SOCK_CLOEXEC = 0x80000 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x800 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0x1 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BINDTOIFINDEX = 0x3e + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 + SO_BUSY_POLL = 0x2e + SO_BUSY_POLL_BUDGET = 0x46 + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 + SO_NOFCS = 0x2b + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x14 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x15 + SO_PEERGROUPS = 0x3b + SO_PEERSEC = 0x1f + SO_PREFER_BUSY_POLL = 0x45 + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x10 + SO_RCVTIMEO = 0x12 + SO_RCVTIMEO_NEW = 0x42 + SO_RCVTIMEO_OLD = 0x12 + SO_RESERVE_MEM = 0x49 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x11 + SO_SNDTIMEO = 0x13 + SO_SNDTIMEO_NEW = 0x43 + SO_SNDTIMEO_OLD = 0x13 + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPING_NEW = 0x41 + SO_TIMESTAMPING_OLD = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TIMESTAMPNS_NEW = 0x40 + SO_TIMESTAMPNS_OLD = 0x23 + SO_TIMESTAMP_NEW = 0x3f + SO_TXTIME = 0x3d + SO_TYPE = 0x3 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0xc00 + TABDLY = 0xc00 + TCFLSH = 0x2000741f + TCGETA = 0x40147417 + TCGETS = 0x402c7413 + TCSAFLUSH = 0x2 + TCSBRK = 0x2000741d + TCSBRKP = 0x5425 + TCSETA = 0x80147418 + TCSETAF = 0x8014741c + TCSETAW = 0x80147419 + TCSETS = 0x802c7414 + TCSETSF = 0x802c7416 + TCSETSW = 0x802c7415 + TCXONC = 0x2000741e + TFD_CLOEXEC = 0x80000 + TFD_NONBLOCK = 0x800 + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x40045432 + TIOCGETC = 0x40067412 + TIOCGETD = 0x5424 + TIOCGETP = 0x40067408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x545d + TIOCGISO7816 = 0x40285442 + TIOCGLCKTRMIOS = 0x5456 + TIOCGLTC = 0x40067474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x4004667f + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_LOOP = 0x8000 + TIOCM_OUT1 = 0x2000 + TIOCM_OUT2 = 0x4000 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x5420 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETC = 0x80067411 + TIOCSETD = 0x5423 + TIOCSETN = 0x8006740a + TIOCSETP = 0x80067409 + TIOCSIG = 0x80045436 + TIOCSISO7816 = 0xc0285443 + TIOCSLCKTRMIOS = 0x5457 + TIOCSLTC = 0x80067475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTART = 0x2000746e + TIOCSTI = 0x5412 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x400000 + TUNATTACHFILTER = 0x800854d5 + TUNDETACHFILTER = 0x800854d6 + TUNGETDEVNETNS = 0x200054e3 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x400854db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETCARRIER = 0x800454e2 + TUNSETDEBUG = 0x800454c9 + TUNSETFILTEREBPF = 0x400454e1 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETSTEERINGEBPF = 0x400454e0 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UBI_IOCATT = 0x80186f40 + UBI_IOCDET = 0x80046f41 + UBI_IOCEBCH = 0x80044f02 + UBI_IOCEBER = 0x80044f01 + UBI_IOCEBISMAP = 0x40044f05 + UBI_IOCEBMAP = 0x80084f03 + UBI_IOCEBUNMAP = 0x80044f04 + UBI_IOCMKVOL = 0x80986f00 + UBI_IOCRMVOL = 0x80046f01 + UBI_IOCRNVOL = 0x91106f03 + UBI_IOCRPEB = 0x80046f04 + UBI_IOCRSVOL = 0x800c6f02 + UBI_IOCSETVOLPROP = 0x80104f06 + UBI_IOCSPEB = 0x80046f05 + UBI_IOCVOLCRBLK = 0x80804f07 + UBI_IOCVOLRMBLK = 0x20004f08 + UBI_IOCVOLUP = 0x80084f00 + VDISCARD = 0x10 + VEOF = 0x4 + VEOL = 0x6 + VEOL2 = 0x8 + VMIN = 0x5 + VREPRINT = 0xb + VSTART = 0xd + VSTOP = 0xe + VSUSP = 0xc + VSWTC = 0x9 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x7 + VWERASE = 0xa + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WORDSIZE = 0x20 + XCASE = 0x4000 + XTABS = 0xc00 + _HIDIOCGRAWNAME = 0x40804804 + _HIDIOCGRAWPHYS = 0x40404805 + _HIDIOCGRAWUNIQ = 0x40404808 +) + +// Errors +const ( + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + ECANCELED = syscall.Errno(0x7d) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x3a) + EDESTADDRREQ = syscall.Errno(0x59) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EISCONN = syscall.Errno(0x6a) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTCONN = syscall.Errno(0x6b) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTUNIQ = syscall.Errno(0x4c) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPFNOSUPPORT = syscall.Errno(0x60) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGIO = syscall.Signal(0x1d) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "EDEADLK", "resource deadlock avoided"}, + {36, "ENAMETOOLONG", "file name too long"}, + {37, "ENOLCK", "no locks available"}, + {38, "ENOSYS", "function not implemented"}, + {39, "ENOTEMPTY", "directory not empty"}, + {40, "ELOOP", "too many levels of symbolic links"}, + {42, "ENOMSG", "no message of desired type"}, + {43, "EIDRM", "identifier removed"}, + {44, "ECHRNG", "channel number out of range"}, + {45, "EL2NSYNC", "level 2 not synchronized"}, + {46, "EL3HLT", "level 3 halted"}, + {47, "EL3RST", "level 3 reset"}, + {48, "ELNRNG", "link number out of range"}, + {49, "EUNATCH", "protocol driver not attached"}, + {50, "ENOCSI", "no CSI structure available"}, + {51, "EL2HLT", "level 2 halted"}, + {52, "EBADE", "invalid exchange"}, + {53, "EBADR", "invalid request descriptor"}, + {54, "EXFULL", "exchange full"}, + {55, "ENOANO", "no anode"}, + {56, "EBADRQC", "invalid request code"}, + {57, "EBADSLT", "invalid slot"}, + {58, "EDEADLOCK", "file locking deadlock error"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {72, "EMULTIHOP", "multihop attempted"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EBADMSG", "bad message"}, + {75, "EOVERFLOW", "value too large for defined data type"}, + {76, "ENOTUNIQ", "name not unique on network"}, + {77, "EBADFD", "file descriptor in bad state"}, + {78, "EREMCHG", "remote address changed"}, + {79, "ELIBACC", "can not access a needed shared library"}, + {80, "ELIBBAD", "accessing a corrupted shared library"}, + {81, "ELIBSCN", ".lib section in a.out corrupted"}, + {82, "ELIBMAX", "attempting to link in too many shared libraries"}, + {83, "ELIBEXEC", "cannot exec a shared library directly"}, + {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {85, "ERESTART", "interrupted system call should be restarted"}, + {86, "ESTRPIPE", "streams pipe error"}, + {87, "EUSERS", "too many users"}, + {88, "ENOTSOCK", "socket operation on non-socket"}, + {89, "EDESTADDRREQ", "destination address required"}, + {90, "EMSGSIZE", "message too long"}, + {91, "EPROTOTYPE", "protocol wrong type for socket"}, + {92, "ENOPROTOOPT", "protocol not available"}, + {93, "EPROTONOSUPPORT", "protocol not supported"}, + {94, "ESOCKTNOSUPPORT", "socket type not supported"}, + {95, "ENOTSUP", "operation not supported"}, + {96, "EPFNOSUPPORT", "protocol family not supported"}, + {97, "EAFNOSUPPORT", "address family not supported by protocol"}, + {98, "EADDRINUSE", "address already in use"}, + {99, "EADDRNOTAVAIL", "cannot assign requested address"}, + {100, "ENETDOWN", "network is down"}, + {101, "ENETUNREACH", "network is unreachable"}, + {102, "ENETRESET", "network dropped connection on reset"}, + {103, "ECONNABORTED", "software caused connection abort"}, + {104, "ECONNRESET", "connection reset by peer"}, + {105, "ENOBUFS", "no buffer space available"}, + {106, "EISCONN", "transport endpoint is already connected"}, + {107, "ENOTCONN", "transport endpoint is not connected"}, + {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {109, "ETOOMANYREFS", "too many references: cannot splice"}, + {110, "ETIMEDOUT", "connection timed out"}, + {111, "ECONNREFUSED", "connection refused"}, + {112, "EHOSTDOWN", "host is down"}, + {113, "EHOSTUNREACH", "no route to host"}, + {114, "EALREADY", "operation already in progress"}, + {115, "EINPROGRESS", "operation now in progress"}, + {116, "ESTALE", "stale file handle"}, + {117, "EUCLEAN", "structure needs cleaning"}, + {118, "ENOTNAM", "not a XENIX named type file"}, + {119, "ENAVAIL", "no XENIX semaphores available"}, + {120, "EISNAM", "is a named type file"}, + {121, "EREMOTEIO", "remote I/O error"}, + {122, "EDQUOT", "disk quota exceeded"}, + {123, "ENOMEDIUM", "no medium found"}, + {124, "EMEDIUMTYPE", "wrong medium type"}, + {125, "ECANCELED", "operation canceled"}, + {126, "ENOKEY", "required key not available"}, + {127, "EKEYEXPIRED", "key has expired"}, + {128, "EKEYREVOKED", "key has been revoked"}, + {129, "EKEYREJECTED", "key was rejected by service"}, + {130, "EOWNERDEAD", "owner died"}, + {131, "ENOTRECOVERABLE", "state not recoverable"}, + {132, "ERFKILL", "operation not possible due to RF-kill"}, + {133, "EHWPOISON", "memory page has hardware error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGBUS", "bus error"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGUSR1", "user defined signal 1"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGUSR2", "user defined signal 2"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGSTKFLT", "stack fault"}, + {17, "SIGCHLD", "child exited"}, + {18, "SIGCONT", "continued"}, + {19, "SIGSTOP", "stopped (signal)"}, + {20, "SIGTSTP", "stopped"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGURG", "urgent I/O condition"}, + {24, "SIGXCPU", "CPU time limit exceeded"}, + {25, "SIGXFSZ", "file size limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window changed"}, + {29, "SIGIO", "I/O possible"}, + {30, "SIGPWR", "power failure"}, + {31, "SIGSYS", "bad system call"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go new file mode 100644 index 0000000..ed17f24 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -0,0 +1,889 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build ppc64 && linux +// +build ppc64,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go + +package unix + +import "syscall" + +const ( + B1000000 = 0x17 + B115200 = 0x11 + B1152000 = 0x18 + B1500000 = 0x19 + B2000000 = 0x1a + B230400 = 0x12 + B2500000 = 0x1b + B3000000 = 0x1c + B3500000 = 0x1d + B4000000 = 0x1e + B460800 = 0x13 + B500000 = 0x14 + B57600 = 0x10 + B576000 = 0x15 + B921600 = 0x16 + BLKBSZGET = 0x40081270 + BLKBSZSET = 0x80081271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40081272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1f + BS1 = 0x8000 + BSDLY = 0x8000 + CBAUD = 0xff + CBAUDEX = 0x0 + CIBAUD = 0xff0000 + CLOCAL = 0x8000 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 + CREAD = 0x800 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTOPB = 0x400 + ECCGETLAYOUT = 0x41484d11 + ECCGETSTATS = 0x40104d12 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EPOLL_CLOEXEC = 0x80000 + EXTPROC = 0x10000000 + FF1 = 0x4000 + FFDLY = 0x4000 + FICLONE = 0x80049409 + FICLONERANGE = 0x8020940d + FLUSHO = 0x800000 + FS_IOC_ENABLE_VERITY = 0x80806685 + FS_IOC_GETFLAGS = 0x40086601 + FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SETFLAGS = 0x80086602 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + F_GETLK = 0x5 + F_GETLK64 = 0xc + F_GETOWN = 0x9 + F_RDLCK = 0x0 + F_SETLK = 0x6 + F_SETLK64 = 0xd + F_SETLKW = 0x7 + F_SETLKW64 = 0xe + F_SETOWN = 0x8 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HIDIOCGRAWINFO = 0x40084803 + HIDIOCGRDESC = 0x50044802 + HIDIOCGRDESCSIZE = 0x40044801 + HUPCL = 0x4000 + ICANON = 0x100 + IEXTEN = 0x400 + IN_CLOEXEC = 0x80000 + IN_NONBLOCK = 0x800 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + ISIG = 0x80 + IUCLC = 0x1000 + IXOFF = 0x400 + IXON = 0x200 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_LOCKED = 0x80 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x40 + MAP_POPULATE = 0x8000 + MAP_STACK = 0x20000 + MAP_SYNC = 0x80000 + MCL_CURRENT = 0x2000 + MCL_FUTURE = 0x4000 + MCL_ONFAULT = 0x8000 + MEMERASE = 0x80084d02 + MEMERASE64 = 0x80104d14 + MEMGETBADBLOCK = 0x80084d0b + MEMGETINFO = 0x40204d01 + MEMGETOOBSEL = 0x40c84d0a + MEMGETREGIONCOUNT = 0x40044d07 + MEMISLOCKED = 0x40084d17 + MEMLOCK = 0x80084d05 + MEMREADOOB = 0xc0104d04 + MEMSETBADBLOCK = 0x80084d0c + MEMUNLOCK = 0x80084d06 + MEMWRITEOOB = 0xc0104d03 + MTDFILEMODE = 0x20004d13 + NFDBITS = 0x40 + NL2 = 0x200 + NL3 = 0x300 + NLDLY = 0x300 + NOFLSH = 0x80000000 + NS_GET_NSTYPE = 0x2000b703 + NS_GET_OWNER_UID = 0x2000b704 + NS_GET_PARENT = 0x2000b702 + NS_GET_USERNS = 0x2000b701 + OLCUC = 0x4 + ONLCR = 0x2 + OTPERASE = 0x800c4d19 + OTPGETREGIONCOUNT = 0x80044d0e + OTPGETREGIONINFO = 0x800c4d0f + OTPLOCK = 0x400c4d10 + OTPSELECT = 0x40044d0d + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x20000 + O_DIRECTORY = 0x4000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x8000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x404000 + O_TRUNC = 0x200 + PARENB = 0x1000 + PARODD = 0x2000 + PENDIN = 0x20000000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40082407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc008240a + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PPPIOCATTACH = 0x8004743d + PPPIOCATTCHAN = 0x80047438 + PPPIOCBRIDGECHAN = 0x80047435 + PPPIOCCONNECT = 0x8004743a + PPPIOCDETACH = 0x8004743c + PPPIOCDISCONN = 0x20007439 + PPPIOCGASYNCMAP = 0x40047458 + PPPIOCGCHAN = 0x40047437 + PPPIOCGDEBUG = 0x40047441 + PPPIOCGFLAGS = 0x4004745a + PPPIOCGIDLE = 0x4010743f + PPPIOCGIDLE32 = 0x4008743f + PPPIOCGIDLE64 = 0x4010743f + PPPIOCGL2TPSTATS = 0x40487436 + PPPIOCGMRU = 0x40047453 + PPPIOCGRASYNCMAP = 0x40047455 + PPPIOCGUNIT = 0x40047456 + PPPIOCGXASYNCMAP = 0x40207450 + PPPIOCSACTIVE = 0x80107446 + PPPIOCSASYNCMAP = 0x80047457 + PPPIOCSCOMPRESS = 0x8010744d + PPPIOCSDEBUG = 0x80047440 + PPPIOCSFLAGS = 0x80047459 + PPPIOCSMAXCID = 0x80047451 + PPPIOCSMRRU = 0x8004743b + PPPIOCSMRU = 0x80047452 + PPPIOCSNPMODE = 0x8008744b + PPPIOCSPASS = 0x80107447 + PPPIOCSRASYNCMAP = 0x80047454 + PPPIOCSXASYNCMAP = 0x8020744f + PPPIOCUNBRIDGECHAN = 0x20007434 + PPPIOCXFERUNIT = 0x2000744e + PROT_SAO = 0x10 + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTRACE_GETEVRREGS = 0x14 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS64 = 0x16 + PTRACE_GETVRREGS = 0x12 + PTRACE_GETVSRREGS = 0x1b + PTRACE_GET_DEBUGREG = 0x19 + PTRACE_SETEVRREGS = 0x15 + PTRACE_SETFPREGS = 0xf + PTRACE_SETREGS64 = 0x17 + PTRACE_SETVRREGS = 0x13 + PTRACE_SETVSRREGS = 0x1c + PTRACE_SET_DEBUGREG = 0x1a + PTRACE_SINGLEBLOCK = 0x100 + PTRACE_SYSEMU = 0x1d + PTRACE_SYSEMU_SINGLESTEP = 0x1e + PT_CCR = 0x26 + PT_CTR = 0x23 + PT_DAR = 0x29 + PT_DSCR = 0x2c + PT_DSISR = 0x2a + PT_FPR0 = 0x30 + PT_FPSCR = 0x50 + PT_LNK = 0x24 + PT_MSR = 0x21 + PT_NIP = 0x20 + PT_ORIG_R3 = 0x22 + PT_R0 = 0x0 + PT_R1 = 0x1 + PT_R10 = 0xa + PT_R11 = 0xb + PT_R12 = 0xc + PT_R13 = 0xd + PT_R14 = 0xe + PT_R15 = 0xf + PT_R16 = 0x10 + PT_R17 = 0x11 + PT_R18 = 0x12 + PT_R19 = 0x13 + PT_R2 = 0x2 + PT_R20 = 0x14 + PT_R21 = 0x15 + PT_R22 = 0x16 + PT_R23 = 0x17 + PT_R24 = 0x18 + PT_R25 = 0x19 + PT_R26 = 0x1a + PT_R27 = 0x1b + PT_R28 = 0x1c + PT_R29 = 0x1d + PT_R3 = 0x3 + PT_R30 = 0x1e + PT_R31 = 0x1f + PT_R4 = 0x4 + PT_R5 = 0x5 + PT_R6 = 0x6 + PT_R7 = 0x7 + PT_R8 = 0x8 + PT_R9 = 0x9 + PT_REGS_COUNT = 0x2c + PT_RESULT = 0x2b + PT_SOFTE = 0x27 + PT_TRAP = 0x28 + PT_VR0 = 0x52 + PT_VRSAVE = 0x94 + PT_VSCR = 0x93 + PT_VSR0 = 0x96 + PT_VSR31 = 0xd4 + PT_XER = 0x25 + RLIMIT_AS = 0x9 + RLIMIT_MEMLOCK = 0x8 + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RNDADDENTROPY = 0x80085203 + RNDADDTOENTCNT = 0x80045201 + RNDCLEARPOOL = 0x20005206 + RNDGETENTCNT = 0x40045200 + RNDGETPOOL = 0x40085202 + RNDRESEEDCRNG = 0x20005207 + RNDZAPENTCNT = 0x20005204 + RTC_AIE_OFF = 0x20007002 + RTC_AIE_ON = 0x20007001 + RTC_ALM_READ = 0x40247008 + RTC_ALM_SET = 0x80247007 + RTC_EPOCH_READ = 0x4008700d + RTC_EPOCH_SET = 0x8008700e + RTC_IRQP_READ = 0x4008700b + RTC_IRQP_SET = 0x8008700c + RTC_PARAM_GET = 0x80187013 + RTC_PARAM_SET = 0x80187014 + RTC_PIE_OFF = 0x20007006 + RTC_PIE_ON = 0x20007005 + RTC_PLL_GET = 0x40207011 + RTC_PLL_SET = 0x80207012 + RTC_RD_TIME = 0x40247009 + RTC_SET_TIME = 0x8024700a + RTC_UIE_OFF = 0x20007004 + RTC_UIE_ON = 0x20007003 + RTC_VL_CLR = 0x20007014 + RTC_VL_READ = 0x40047013 + RTC_WIE_OFF = 0x20007010 + RTC_WIE_ON = 0x2000700f + RTC_WKALM_RD = 0x40287010 + RTC_WKALM_SET = 0x8028700f + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SFD_CLOEXEC = 0x80000 + SFD_NONBLOCK = 0x800 + SIOCATMARK = 0x8905 + SIOCGPGRP = 0x8904 + SIOCGSTAMPNS_NEW = 0x40108907 + SIOCGSTAMP_NEW = 0x40108906 + SIOCINQ = 0x4004667f + SIOCOUTQ = 0x40047473 + SIOCSPGRP = 0x8902 + SOCK_CLOEXEC = 0x80000 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x800 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0x1 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BINDTOIFINDEX = 0x3e + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 + SO_BUSY_POLL = 0x2e + SO_BUSY_POLL_BUDGET = 0x46 + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 + SO_NOFCS = 0x2b + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x14 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x15 + SO_PEERGROUPS = 0x3b + SO_PEERSEC = 0x1f + SO_PREFER_BUSY_POLL = 0x45 + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x10 + SO_RCVTIMEO = 0x12 + SO_RCVTIMEO_NEW = 0x42 + SO_RCVTIMEO_OLD = 0x12 + SO_RESERVE_MEM = 0x49 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x11 + SO_SNDTIMEO = 0x13 + SO_SNDTIMEO_NEW = 0x43 + SO_SNDTIMEO_OLD = 0x13 + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPING_NEW = 0x41 + SO_TIMESTAMPING_OLD = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TIMESTAMPNS_NEW = 0x40 + SO_TIMESTAMPNS_OLD = 0x23 + SO_TIMESTAMP_NEW = 0x3f + SO_TXTIME = 0x3d + SO_TYPE = 0x3 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0xc00 + TABDLY = 0xc00 + TCFLSH = 0x2000741f + TCGETA = 0x40147417 + TCGETS = 0x402c7413 + TCSAFLUSH = 0x2 + TCSBRK = 0x2000741d + TCSBRKP = 0x5425 + TCSETA = 0x80147418 + TCSETAF = 0x8014741c + TCSETAW = 0x80147419 + TCSETS = 0x802c7414 + TCSETSF = 0x802c7416 + TCSETSW = 0x802c7415 + TCXONC = 0x2000741e + TFD_CLOEXEC = 0x80000 + TFD_NONBLOCK = 0x800 + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x40045432 + TIOCGETC = 0x40067412 + TIOCGETD = 0x5424 + TIOCGETP = 0x40067408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x545d + TIOCGISO7816 = 0x40285442 + TIOCGLCKTRMIOS = 0x5456 + TIOCGLTC = 0x40067474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x4004667f + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_LOOP = 0x8000 + TIOCM_OUT1 = 0x2000 + TIOCM_OUT2 = 0x4000 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x5420 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETC = 0x80067411 + TIOCSETD = 0x5423 + TIOCSETN = 0x8006740a + TIOCSETP = 0x80067409 + TIOCSIG = 0x80045436 + TIOCSISO7816 = 0xc0285443 + TIOCSLCKTRMIOS = 0x5457 + TIOCSLTC = 0x80067475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTART = 0x2000746e + TIOCSTI = 0x5412 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x400000 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETDEVNETNS = 0x200054e3 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETCARRIER = 0x800454e2 + TUNSETDEBUG = 0x800454c9 + TUNSETFILTEREBPF = 0x400454e1 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETSTEERINGEBPF = 0x400454e0 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UBI_IOCATT = 0x80186f40 + UBI_IOCDET = 0x80046f41 + UBI_IOCEBCH = 0x80044f02 + UBI_IOCEBER = 0x80044f01 + UBI_IOCEBISMAP = 0x40044f05 + UBI_IOCEBMAP = 0x80084f03 + UBI_IOCEBUNMAP = 0x80044f04 + UBI_IOCMKVOL = 0x80986f00 + UBI_IOCRMVOL = 0x80046f01 + UBI_IOCRNVOL = 0x91106f03 + UBI_IOCRPEB = 0x80046f04 + UBI_IOCRSVOL = 0x800c6f02 + UBI_IOCSETVOLPROP = 0x80104f06 + UBI_IOCSPEB = 0x80046f05 + UBI_IOCVOLCRBLK = 0x80804f07 + UBI_IOCVOLRMBLK = 0x20004f08 + UBI_IOCVOLUP = 0x80084f00 + VDISCARD = 0x10 + VEOF = 0x4 + VEOL = 0x6 + VEOL2 = 0x8 + VMIN = 0x5 + VREPRINT = 0xb + VSTART = 0xd + VSTOP = 0xe + VSUSP = 0xc + VSWTC = 0x9 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x7 + VWERASE = 0xa + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WORDSIZE = 0x40 + XCASE = 0x4000 + XTABS = 0xc00 + _HIDIOCGRAWNAME = 0x40804804 + _HIDIOCGRAWPHYS = 0x40404805 + _HIDIOCGRAWUNIQ = 0x40404808 +) + +// Errors +const ( + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + ECANCELED = syscall.Errno(0x7d) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x3a) + EDESTADDRREQ = syscall.Errno(0x59) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EISCONN = syscall.Errno(0x6a) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTCONN = syscall.Errno(0x6b) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTUNIQ = syscall.Errno(0x4c) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPFNOSUPPORT = syscall.Errno(0x60) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGIO = syscall.Signal(0x1d) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "EDEADLK", "resource deadlock avoided"}, + {36, "ENAMETOOLONG", "file name too long"}, + {37, "ENOLCK", "no locks available"}, + {38, "ENOSYS", "function not implemented"}, + {39, "ENOTEMPTY", "directory not empty"}, + {40, "ELOOP", "too many levels of symbolic links"}, + {42, "ENOMSG", "no message of desired type"}, + {43, "EIDRM", "identifier removed"}, + {44, "ECHRNG", "channel number out of range"}, + {45, "EL2NSYNC", "level 2 not synchronized"}, + {46, "EL3HLT", "level 3 halted"}, + {47, "EL3RST", "level 3 reset"}, + {48, "ELNRNG", "link number out of range"}, + {49, "EUNATCH", "protocol driver not attached"}, + {50, "ENOCSI", "no CSI structure available"}, + {51, "EL2HLT", "level 2 halted"}, + {52, "EBADE", "invalid exchange"}, + {53, "EBADR", "invalid request descriptor"}, + {54, "EXFULL", "exchange full"}, + {55, "ENOANO", "no anode"}, + {56, "EBADRQC", "invalid request code"}, + {57, "EBADSLT", "invalid slot"}, + {58, "EDEADLOCK", "file locking deadlock error"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {72, "EMULTIHOP", "multihop attempted"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EBADMSG", "bad message"}, + {75, "EOVERFLOW", "value too large for defined data type"}, + {76, "ENOTUNIQ", "name not unique on network"}, + {77, "EBADFD", "file descriptor in bad state"}, + {78, "EREMCHG", "remote address changed"}, + {79, "ELIBACC", "can not access a needed shared library"}, + {80, "ELIBBAD", "accessing a corrupted shared library"}, + {81, "ELIBSCN", ".lib section in a.out corrupted"}, + {82, "ELIBMAX", "attempting to link in too many shared libraries"}, + {83, "ELIBEXEC", "cannot exec a shared library directly"}, + {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {85, "ERESTART", "interrupted system call should be restarted"}, + {86, "ESTRPIPE", "streams pipe error"}, + {87, "EUSERS", "too many users"}, + {88, "ENOTSOCK", "socket operation on non-socket"}, + {89, "EDESTADDRREQ", "destination address required"}, + {90, "EMSGSIZE", "message too long"}, + {91, "EPROTOTYPE", "protocol wrong type for socket"}, + {92, "ENOPROTOOPT", "protocol not available"}, + {93, "EPROTONOSUPPORT", "protocol not supported"}, + {94, "ESOCKTNOSUPPORT", "socket type not supported"}, + {95, "ENOTSUP", "operation not supported"}, + {96, "EPFNOSUPPORT", "protocol family not supported"}, + {97, "EAFNOSUPPORT", "address family not supported by protocol"}, + {98, "EADDRINUSE", "address already in use"}, + {99, "EADDRNOTAVAIL", "cannot assign requested address"}, + {100, "ENETDOWN", "network is down"}, + {101, "ENETUNREACH", "network is unreachable"}, + {102, "ENETRESET", "network dropped connection on reset"}, + {103, "ECONNABORTED", "software caused connection abort"}, + {104, "ECONNRESET", "connection reset by peer"}, + {105, "ENOBUFS", "no buffer space available"}, + {106, "EISCONN", "transport endpoint is already connected"}, + {107, "ENOTCONN", "transport endpoint is not connected"}, + {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {109, "ETOOMANYREFS", "too many references: cannot splice"}, + {110, "ETIMEDOUT", "connection timed out"}, + {111, "ECONNREFUSED", "connection refused"}, + {112, "EHOSTDOWN", "host is down"}, + {113, "EHOSTUNREACH", "no route to host"}, + {114, "EALREADY", "operation already in progress"}, + {115, "EINPROGRESS", "operation now in progress"}, + {116, "ESTALE", "stale file handle"}, + {117, "EUCLEAN", "structure needs cleaning"}, + {118, "ENOTNAM", "not a XENIX named type file"}, + {119, "ENAVAIL", "no XENIX semaphores available"}, + {120, "EISNAM", "is a named type file"}, + {121, "EREMOTEIO", "remote I/O error"}, + {122, "EDQUOT", "disk quota exceeded"}, + {123, "ENOMEDIUM", "no medium found"}, + {124, "EMEDIUMTYPE", "wrong medium type"}, + {125, "ECANCELED", "operation canceled"}, + {126, "ENOKEY", "required key not available"}, + {127, "EKEYEXPIRED", "key has expired"}, + {128, "EKEYREVOKED", "key has been revoked"}, + {129, "EKEYREJECTED", "key was rejected by service"}, + {130, "EOWNERDEAD", "owner died"}, + {131, "ENOTRECOVERABLE", "state not recoverable"}, + {132, "ERFKILL", "operation not possible due to RF-kill"}, + {133, "EHWPOISON", "memory page has hardware error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGBUS", "bus error"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGUSR1", "user defined signal 1"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGUSR2", "user defined signal 2"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGSTKFLT", "stack fault"}, + {17, "SIGCHLD", "child exited"}, + {18, "SIGCONT", "continued"}, + {19, "SIGSTOP", "stopped (signal)"}, + {20, "SIGTSTP", "stopped"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGURG", "urgent I/O condition"}, + {24, "SIGXCPU", "CPU time limit exceeded"}, + {25, "SIGXFSZ", "file size limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window changed"}, + {29, "SIGIO", "I/O possible"}, + {30, "SIGPWR", "power failure"}, + {31, "SIGSYS", "bad system call"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go new file mode 100644 index 0000000..d84a37c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -0,0 +1,889 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build ppc64le && linux +// +build ppc64le,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go + +package unix + +import "syscall" + +const ( + B1000000 = 0x17 + B115200 = 0x11 + B1152000 = 0x18 + B1500000 = 0x19 + B2000000 = 0x1a + B230400 = 0x12 + B2500000 = 0x1b + B3000000 = 0x1c + B3500000 = 0x1d + B4000000 = 0x1e + B460800 = 0x13 + B500000 = 0x14 + B57600 = 0x10 + B576000 = 0x15 + B921600 = 0x16 + BLKBSZGET = 0x40081270 + BLKBSZSET = 0x80081271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40081272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1f + BS1 = 0x8000 + BSDLY = 0x8000 + CBAUD = 0xff + CBAUDEX = 0x0 + CIBAUD = 0xff0000 + CLOCAL = 0x8000 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 + CREAD = 0x800 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTOPB = 0x400 + ECCGETLAYOUT = 0x41484d11 + ECCGETSTATS = 0x40104d12 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EPOLL_CLOEXEC = 0x80000 + EXTPROC = 0x10000000 + FF1 = 0x4000 + FFDLY = 0x4000 + FICLONE = 0x80049409 + FICLONERANGE = 0x8020940d + FLUSHO = 0x800000 + FS_IOC_ENABLE_VERITY = 0x80806685 + FS_IOC_GETFLAGS = 0x40086601 + FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SETFLAGS = 0x80086602 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + F_GETLK = 0x5 + F_GETLK64 = 0xc + F_GETOWN = 0x9 + F_RDLCK = 0x0 + F_SETLK = 0x6 + F_SETLK64 = 0xd + F_SETLKW = 0x7 + F_SETLKW64 = 0xe + F_SETOWN = 0x8 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HIDIOCGRAWINFO = 0x40084803 + HIDIOCGRDESC = 0x50044802 + HIDIOCGRDESCSIZE = 0x40044801 + HUPCL = 0x4000 + ICANON = 0x100 + IEXTEN = 0x400 + IN_CLOEXEC = 0x80000 + IN_NONBLOCK = 0x800 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + ISIG = 0x80 + IUCLC = 0x1000 + IXOFF = 0x400 + IXON = 0x200 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_LOCKED = 0x80 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x40 + MAP_POPULATE = 0x8000 + MAP_STACK = 0x20000 + MAP_SYNC = 0x80000 + MCL_CURRENT = 0x2000 + MCL_FUTURE = 0x4000 + MCL_ONFAULT = 0x8000 + MEMERASE = 0x80084d02 + MEMERASE64 = 0x80104d14 + MEMGETBADBLOCK = 0x80084d0b + MEMGETINFO = 0x40204d01 + MEMGETOOBSEL = 0x40c84d0a + MEMGETREGIONCOUNT = 0x40044d07 + MEMISLOCKED = 0x40084d17 + MEMLOCK = 0x80084d05 + MEMREADOOB = 0xc0104d04 + MEMSETBADBLOCK = 0x80084d0c + MEMUNLOCK = 0x80084d06 + MEMWRITEOOB = 0xc0104d03 + MTDFILEMODE = 0x20004d13 + NFDBITS = 0x40 + NL2 = 0x200 + NL3 = 0x300 + NLDLY = 0x300 + NOFLSH = 0x80000000 + NS_GET_NSTYPE = 0x2000b703 + NS_GET_OWNER_UID = 0x2000b704 + NS_GET_PARENT = 0x2000b702 + NS_GET_USERNS = 0x2000b701 + OLCUC = 0x4 + ONLCR = 0x2 + OTPERASE = 0x800c4d19 + OTPGETREGIONCOUNT = 0x80044d0e + OTPGETREGIONINFO = 0x800c4d0f + OTPLOCK = 0x400c4d10 + OTPSELECT = 0x40044d0d + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x20000 + O_DIRECTORY = 0x4000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x8000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x404000 + O_TRUNC = 0x200 + PARENB = 0x1000 + PARODD = 0x2000 + PENDIN = 0x20000000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40082407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc008240a + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PPPIOCATTACH = 0x8004743d + PPPIOCATTCHAN = 0x80047438 + PPPIOCBRIDGECHAN = 0x80047435 + PPPIOCCONNECT = 0x8004743a + PPPIOCDETACH = 0x8004743c + PPPIOCDISCONN = 0x20007439 + PPPIOCGASYNCMAP = 0x40047458 + PPPIOCGCHAN = 0x40047437 + PPPIOCGDEBUG = 0x40047441 + PPPIOCGFLAGS = 0x4004745a + PPPIOCGIDLE = 0x4010743f + PPPIOCGIDLE32 = 0x4008743f + PPPIOCGIDLE64 = 0x4010743f + PPPIOCGL2TPSTATS = 0x40487436 + PPPIOCGMRU = 0x40047453 + PPPIOCGRASYNCMAP = 0x40047455 + PPPIOCGUNIT = 0x40047456 + PPPIOCGXASYNCMAP = 0x40207450 + PPPIOCSACTIVE = 0x80107446 + PPPIOCSASYNCMAP = 0x80047457 + PPPIOCSCOMPRESS = 0x8010744d + PPPIOCSDEBUG = 0x80047440 + PPPIOCSFLAGS = 0x80047459 + PPPIOCSMAXCID = 0x80047451 + PPPIOCSMRRU = 0x8004743b + PPPIOCSMRU = 0x80047452 + PPPIOCSNPMODE = 0x8008744b + PPPIOCSPASS = 0x80107447 + PPPIOCSRASYNCMAP = 0x80047454 + PPPIOCSXASYNCMAP = 0x8020744f + PPPIOCUNBRIDGECHAN = 0x20007434 + PPPIOCXFERUNIT = 0x2000744e + PROT_SAO = 0x10 + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTRACE_GETEVRREGS = 0x14 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS64 = 0x16 + PTRACE_GETVRREGS = 0x12 + PTRACE_GETVSRREGS = 0x1b + PTRACE_GET_DEBUGREG = 0x19 + PTRACE_SETEVRREGS = 0x15 + PTRACE_SETFPREGS = 0xf + PTRACE_SETREGS64 = 0x17 + PTRACE_SETVRREGS = 0x13 + PTRACE_SETVSRREGS = 0x1c + PTRACE_SET_DEBUGREG = 0x1a + PTRACE_SINGLEBLOCK = 0x100 + PTRACE_SYSEMU = 0x1d + PTRACE_SYSEMU_SINGLESTEP = 0x1e + PT_CCR = 0x26 + PT_CTR = 0x23 + PT_DAR = 0x29 + PT_DSCR = 0x2c + PT_DSISR = 0x2a + PT_FPR0 = 0x30 + PT_FPSCR = 0x50 + PT_LNK = 0x24 + PT_MSR = 0x21 + PT_NIP = 0x20 + PT_ORIG_R3 = 0x22 + PT_R0 = 0x0 + PT_R1 = 0x1 + PT_R10 = 0xa + PT_R11 = 0xb + PT_R12 = 0xc + PT_R13 = 0xd + PT_R14 = 0xe + PT_R15 = 0xf + PT_R16 = 0x10 + PT_R17 = 0x11 + PT_R18 = 0x12 + PT_R19 = 0x13 + PT_R2 = 0x2 + PT_R20 = 0x14 + PT_R21 = 0x15 + PT_R22 = 0x16 + PT_R23 = 0x17 + PT_R24 = 0x18 + PT_R25 = 0x19 + PT_R26 = 0x1a + PT_R27 = 0x1b + PT_R28 = 0x1c + PT_R29 = 0x1d + PT_R3 = 0x3 + PT_R30 = 0x1e + PT_R31 = 0x1f + PT_R4 = 0x4 + PT_R5 = 0x5 + PT_R6 = 0x6 + PT_R7 = 0x7 + PT_R8 = 0x8 + PT_R9 = 0x9 + PT_REGS_COUNT = 0x2c + PT_RESULT = 0x2b + PT_SOFTE = 0x27 + PT_TRAP = 0x28 + PT_VR0 = 0x52 + PT_VRSAVE = 0x94 + PT_VSCR = 0x93 + PT_VSR0 = 0x96 + PT_VSR31 = 0xd4 + PT_XER = 0x25 + RLIMIT_AS = 0x9 + RLIMIT_MEMLOCK = 0x8 + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RNDADDENTROPY = 0x80085203 + RNDADDTOENTCNT = 0x80045201 + RNDCLEARPOOL = 0x20005206 + RNDGETENTCNT = 0x40045200 + RNDGETPOOL = 0x40085202 + RNDRESEEDCRNG = 0x20005207 + RNDZAPENTCNT = 0x20005204 + RTC_AIE_OFF = 0x20007002 + RTC_AIE_ON = 0x20007001 + RTC_ALM_READ = 0x40247008 + RTC_ALM_SET = 0x80247007 + RTC_EPOCH_READ = 0x4008700d + RTC_EPOCH_SET = 0x8008700e + RTC_IRQP_READ = 0x4008700b + RTC_IRQP_SET = 0x8008700c + RTC_PARAM_GET = 0x80187013 + RTC_PARAM_SET = 0x80187014 + RTC_PIE_OFF = 0x20007006 + RTC_PIE_ON = 0x20007005 + RTC_PLL_GET = 0x40207011 + RTC_PLL_SET = 0x80207012 + RTC_RD_TIME = 0x40247009 + RTC_SET_TIME = 0x8024700a + RTC_UIE_OFF = 0x20007004 + RTC_UIE_ON = 0x20007003 + RTC_VL_CLR = 0x20007014 + RTC_VL_READ = 0x40047013 + RTC_WIE_OFF = 0x20007010 + RTC_WIE_ON = 0x2000700f + RTC_WKALM_RD = 0x40287010 + RTC_WKALM_SET = 0x8028700f + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SFD_CLOEXEC = 0x80000 + SFD_NONBLOCK = 0x800 + SIOCATMARK = 0x8905 + SIOCGPGRP = 0x8904 + SIOCGSTAMPNS_NEW = 0x40108907 + SIOCGSTAMP_NEW = 0x40108906 + SIOCINQ = 0x4004667f + SIOCOUTQ = 0x40047473 + SIOCSPGRP = 0x8902 + SOCK_CLOEXEC = 0x80000 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x800 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0x1 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BINDTOIFINDEX = 0x3e + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 + SO_BUSY_POLL = 0x2e + SO_BUSY_POLL_BUDGET = 0x46 + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 + SO_NOFCS = 0x2b + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x14 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x15 + SO_PEERGROUPS = 0x3b + SO_PEERSEC = 0x1f + SO_PREFER_BUSY_POLL = 0x45 + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x10 + SO_RCVTIMEO = 0x12 + SO_RCVTIMEO_NEW = 0x42 + SO_RCVTIMEO_OLD = 0x12 + SO_RESERVE_MEM = 0x49 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x11 + SO_SNDTIMEO = 0x13 + SO_SNDTIMEO_NEW = 0x43 + SO_SNDTIMEO_OLD = 0x13 + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPING_NEW = 0x41 + SO_TIMESTAMPING_OLD = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TIMESTAMPNS_NEW = 0x40 + SO_TIMESTAMPNS_OLD = 0x23 + SO_TIMESTAMP_NEW = 0x3f + SO_TXTIME = 0x3d + SO_TYPE = 0x3 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0xc00 + TABDLY = 0xc00 + TCFLSH = 0x2000741f + TCGETA = 0x40147417 + TCGETS = 0x402c7413 + TCSAFLUSH = 0x2 + TCSBRK = 0x2000741d + TCSBRKP = 0x5425 + TCSETA = 0x80147418 + TCSETAF = 0x8014741c + TCSETAW = 0x80147419 + TCSETS = 0x802c7414 + TCSETSF = 0x802c7416 + TCSETSW = 0x802c7415 + TCXONC = 0x2000741e + TFD_CLOEXEC = 0x80000 + TFD_NONBLOCK = 0x800 + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x40045432 + TIOCGETC = 0x40067412 + TIOCGETD = 0x5424 + TIOCGETP = 0x40067408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x545d + TIOCGISO7816 = 0x40285442 + TIOCGLCKTRMIOS = 0x5456 + TIOCGLTC = 0x40067474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x4004667f + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_LOOP = 0x8000 + TIOCM_OUT1 = 0x2000 + TIOCM_OUT2 = 0x4000 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x5420 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETC = 0x80067411 + TIOCSETD = 0x5423 + TIOCSETN = 0x8006740a + TIOCSETP = 0x80067409 + TIOCSIG = 0x80045436 + TIOCSISO7816 = 0xc0285443 + TIOCSLCKTRMIOS = 0x5457 + TIOCSLTC = 0x80067475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTART = 0x2000746e + TIOCSTI = 0x5412 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x400000 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETDEVNETNS = 0x200054e3 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETCARRIER = 0x800454e2 + TUNSETDEBUG = 0x800454c9 + TUNSETFILTEREBPF = 0x400454e1 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETSTEERINGEBPF = 0x400454e0 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UBI_IOCATT = 0x80186f40 + UBI_IOCDET = 0x80046f41 + UBI_IOCEBCH = 0x80044f02 + UBI_IOCEBER = 0x80044f01 + UBI_IOCEBISMAP = 0x40044f05 + UBI_IOCEBMAP = 0x80084f03 + UBI_IOCEBUNMAP = 0x80044f04 + UBI_IOCMKVOL = 0x80986f00 + UBI_IOCRMVOL = 0x80046f01 + UBI_IOCRNVOL = 0x91106f03 + UBI_IOCRPEB = 0x80046f04 + UBI_IOCRSVOL = 0x800c6f02 + UBI_IOCSETVOLPROP = 0x80104f06 + UBI_IOCSPEB = 0x80046f05 + UBI_IOCVOLCRBLK = 0x80804f07 + UBI_IOCVOLRMBLK = 0x20004f08 + UBI_IOCVOLUP = 0x80084f00 + VDISCARD = 0x10 + VEOF = 0x4 + VEOL = 0x6 + VEOL2 = 0x8 + VMIN = 0x5 + VREPRINT = 0xb + VSTART = 0xd + VSTOP = 0xe + VSUSP = 0xc + VSWTC = 0x9 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x7 + VWERASE = 0xa + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WORDSIZE = 0x40 + XCASE = 0x4000 + XTABS = 0xc00 + _HIDIOCGRAWNAME = 0x40804804 + _HIDIOCGRAWPHYS = 0x40404805 + _HIDIOCGRAWUNIQ = 0x40404808 +) + +// Errors +const ( + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + ECANCELED = syscall.Errno(0x7d) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x3a) + EDESTADDRREQ = syscall.Errno(0x59) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EISCONN = syscall.Errno(0x6a) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTCONN = syscall.Errno(0x6b) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTUNIQ = syscall.Errno(0x4c) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPFNOSUPPORT = syscall.Errno(0x60) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGIO = syscall.Signal(0x1d) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "EDEADLK", "resource deadlock avoided"}, + {36, "ENAMETOOLONG", "file name too long"}, + {37, "ENOLCK", "no locks available"}, + {38, "ENOSYS", "function not implemented"}, + {39, "ENOTEMPTY", "directory not empty"}, + {40, "ELOOP", "too many levels of symbolic links"}, + {42, "ENOMSG", "no message of desired type"}, + {43, "EIDRM", "identifier removed"}, + {44, "ECHRNG", "channel number out of range"}, + {45, "EL2NSYNC", "level 2 not synchronized"}, + {46, "EL3HLT", "level 3 halted"}, + {47, "EL3RST", "level 3 reset"}, + {48, "ELNRNG", "link number out of range"}, + {49, "EUNATCH", "protocol driver not attached"}, + {50, "ENOCSI", "no CSI structure available"}, + {51, "EL2HLT", "level 2 halted"}, + {52, "EBADE", "invalid exchange"}, + {53, "EBADR", "invalid request descriptor"}, + {54, "EXFULL", "exchange full"}, + {55, "ENOANO", "no anode"}, + {56, "EBADRQC", "invalid request code"}, + {57, "EBADSLT", "invalid slot"}, + {58, "EDEADLOCK", "file locking deadlock error"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {72, "EMULTIHOP", "multihop attempted"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EBADMSG", "bad message"}, + {75, "EOVERFLOW", "value too large for defined data type"}, + {76, "ENOTUNIQ", "name not unique on network"}, + {77, "EBADFD", "file descriptor in bad state"}, + {78, "EREMCHG", "remote address changed"}, + {79, "ELIBACC", "can not access a needed shared library"}, + {80, "ELIBBAD", "accessing a corrupted shared library"}, + {81, "ELIBSCN", ".lib section in a.out corrupted"}, + {82, "ELIBMAX", "attempting to link in too many shared libraries"}, + {83, "ELIBEXEC", "cannot exec a shared library directly"}, + {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {85, "ERESTART", "interrupted system call should be restarted"}, + {86, "ESTRPIPE", "streams pipe error"}, + {87, "EUSERS", "too many users"}, + {88, "ENOTSOCK", "socket operation on non-socket"}, + {89, "EDESTADDRREQ", "destination address required"}, + {90, "EMSGSIZE", "message too long"}, + {91, "EPROTOTYPE", "protocol wrong type for socket"}, + {92, "ENOPROTOOPT", "protocol not available"}, + {93, "EPROTONOSUPPORT", "protocol not supported"}, + {94, "ESOCKTNOSUPPORT", "socket type not supported"}, + {95, "ENOTSUP", "operation not supported"}, + {96, "EPFNOSUPPORT", "protocol family not supported"}, + {97, "EAFNOSUPPORT", "address family not supported by protocol"}, + {98, "EADDRINUSE", "address already in use"}, + {99, "EADDRNOTAVAIL", "cannot assign requested address"}, + {100, "ENETDOWN", "network is down"}, + {101, "ENETUNREACH", "network is unreachable"}, + {102, "ENETRESET", "network dropped connection on reset"}, + {103, "ECONNABORTED", "software caused connection abort"}, + {104, "ECONNRESET", "connection reset by peer"}, + {105, "ENOBUFS", "no buffer space available"}, + {106, "EISCONN", "transport endpoint is already connected"}, + {107, "ENOTCONN", "transport endpoint is not connected"}, + {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {109, "ETOOMANYREFS", "too many references: cannot splice"}, + {110, "ETIMEDOUT", "connection timed out"}, + {111, "ECONNREFUSED", "connection refused"}, + {112, "EHOSTDOWN", "host is down"}, + {113, "EHOSTUNREACH", "no route to host"}, + {114, "EALREADY", "operation already in progress"}, + {115, "EINPROGRESS", "operation now in progress"}, + {116, "ESTALE", "stale file handle"}, + {117, "EUCLEAN", "structure needs cleaning"}, + {118, "ENOTNAM", "not a XENIX named type file"}, + {119, "ENAVAIL", "no XENIX semaphores available"}, + {120, "EISNAM", "is a named type file"}, + {121, "EREMOTEIO", "remote I/O error"}, + {122, "EDQUOT", "disk quota exceeded"}, + {123, "ENOMEDIUM", "no medium found"}, + {124, "EMEDIUMTYPE", "wrong medium type"}, + {125, "ECANCELED", "operation canceled"}, + {126, "ENOKEY", "required key not available"}, + {127, "EKEYEXPIRED", "key has expired"}, + {128, "EKEYREVOKED", "key has been revoked"}, + {129, "EKEYREJECTED", "key was rejected by service"}, + {130, "EOWNERDEAD", "owner died"}, + {131, "ENOTRECOVERABLE", "state not recoverable"}, + {132, "ERFKILL", "operation not possible due to RF-kill"}, + {133, "EHWPOISON", "memory page has hardware error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGBUS", "bus error"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGUSR1", "user defined signal 1"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGUSR2", "user defined signal 2"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGSTKFLT", "stack fault"}, + {17, "SIGCHLD", "child exited"}, + {18, "SIGCONT", "continued"}, + {19, "SIGSTOP", "stopped (signal)"}, + {20, "SIGTSTP", "stopped"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGURG", "urgent I/O condition"}, + {24, "SIGXCPU", "CPU time limit exceeded"}, + {25, "SIGXFSZ", "file size limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window changed"}, + {29, "SIGIO", "I/O possible"}, + {30, "SIGPWR", "power failure"}, + {31, "SIGSYS", "bad system call"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go new file mode 100644 index 0000000..5cafba8 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -0,0 +1,813 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build riscv64 && linux +// +build riscv64,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go + +package unix + +import "syscall" + +const ( + B1000000 = 0x1008 + B115200 = 0x1002 + B1152000 = 0x1009 + B1500000 = 0x100a + B2000000 = 0x100b + B230400 = 0x1003 + B2500000 = 0x100c + B3000000 = 0x100d + B3500000 = 0x100e + B4000000 = 0x100f + B460800 = 0x1004 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B921600 = 0x1007 + BLKBSZGET = 0x80081270 + BLKBSZSET = 0x40081271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80081272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BS1 = 0x2000 + BSDLY = 0x2000 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIZE = 0x30 + CSTOPB = 0x40 + ECCGETLAYOUT = 0x81484d11 + ECCGETSTATS = 0x80104d12 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EPOLL_CLOEXEC = 0x80000 + EXTPROC = 0x10000 + FF1 = 0x8000 + FFDLY = 0x8000 + FICLONE = 0x40049409 + FICLONERANGE = 0x4020940d + FLUSHO = 0x1000 + FS_IOC_ENABLE_VERITY = 0x40806685 + FS_IOC_GETFLAGS = 0x80086601 + FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SETFLAGS = 0x40086602 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + F_GETLK = 0x5 + F_GETLK64 = 0x5 + F_GETOWN = 0x9 + F_RDLCK = 0x0 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x8 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HIDIOCGRAWINFO = 0x80084803 + HIDIOCGRDESC = 0x90044802 + HIDIOCGRDESCSIZE = 0x80044801 + HUPCL = 0x400 + ICANON = 0x2 + IEXTEN = 0x8000 + IN_CLOEXEC = 0x80000 + IN_NONBLOCK = 0x800 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + ISIG = 0x1 + IUCLC = 0x200 + IXOFF = 0x1000 + IXON = 0x400 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_STACK = 0x20000 + MAP_SYNC = 0x80000 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MEMERASE = 0x40084d02 + MEMERASE64 = 0x40104d14 + MEMGETBADBLOCK = 0x40084d0b + MEMGETINFO = 0x80204d01 + MEMGETOOBSEL = 0x80c84d0a + MEMGETREGIONCOUNT = 0x80044d07 + MEMISLOCKED = 0x80084d17 + MEMLOCK = 0x40084d05 + MEMREADOOB = 0xc0104d04 + MEMSETBADBLOCK = 0x40084d0c + MEMUNLOCK = 0x40084d06 + MEMWRITEOOB = 0xc0104d03 + MTDFILEMODE = 0x4d13 + NFDBITS = 0x40 + NLDLY = 0x100 + NOFLSH = 0x80 + NS_GET_NSTYPE = 0xb703 + NS_GET_OWNER_UID = 0xb704 + NS_GET_PARENT = 0xb702 + NS_GET_USERNS = 0xb701 + OLCUC = 0x2 + ONLCR = 0x4 + OTPERASE = 0x400c4d19 + OTPGETREGIONCOUNT = 0x40044d0e + OTPGETREGIONINFO = 0x400c4d0f + OTPLOCK = 0x800c4d10 + OTPSELECT = 0x80044d0d + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x4000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + PARENB = 0x100 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80082407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc008240a + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PPPIOCATTACH = 0x4004743d + PPPIOCATTCHAN = 0x40047438 + PPPIOCBRIDGECHAN = 0x40047435 + PPPIOCCONNECT = 0x4004743a + PPPIOCDETACH = 0x4004743c + PPPIOCDISCONN = 0x7439 + PPPIOCGASYNCMAP = 0x80047458 + PPPIOCGCHAN = 0x80047437 + PPPIOCGDEBUG = 0x80047441 + PPPIOCGFLAGS = 0x8004745a + PPPIOCGIDLE = 0x8010743f + PPPIOCGIDLE32 = 0x8008743f + PPPIOCGIDLE64 = 0x8010743f + PPPIOCGL2TPSTATS = 0x80487436 + PPPIOCGMRU = 0x80047453 + PPPIOCGRASYNCMAP = 0x80047455 + PPPIOCGUNIT = 0x80047456 + PPPIOCGXASYNCMAP = 0x80207450 + PPPIOCSACTIVE = 0x40107446 + PPPIOCSASYNCMAP = 0x40047457 + PPPIOCSCOMPRESS = 0x4010744d + PPPIOCSDEBUG = 0x40047440 + PPPIOCSFLAGS = 0x40047459 + PPPIOCSMAXCID = 0x40047451 + PPPIOCSMRRU = 0x4004743b + PPPIOCSMRU = 0x40047452 + PPPIOCSNPMODE = 0x4008744b + PPPIOCSPASS = 0x40107447 + PPPIOCSRASYNCMAP = 0x40047454 + PPPIOCSXASYNCMAP = 0x4020744f + PPPIOCUNBRIDGECHAN = 0x7434 + PPPIOCXFERUNIT = 0x744e + PR_SET_PTRACER_ANY = 0xffffffffffffffff + RLIMIT_AS = 0x9 + RLIMIT_MEMLOCK = 0x8 + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RNDADDENTROPY = 0x40085203 + RNDADDTOENTCNT = 0x40045201 + RNDCLEARPOOL = 0x5206 + RNDGETENTCNT = 0x80045200 + RNDGETPOOL = 0x80085202 + RNDRESEEDCRNG = 0x5207 + RNDZAPENTCNT = 0x5204 + RTC_AIE_OFF = 0x7002 + RTC_AIE_ON = 0x7001 + RTC_ALM_READ = 0x80247008 + RTC_ALM_SET = 0x40247007 + RTC_EPOCH_READ = 0x8008700d + RTC_EPOCH_SET = 0x4008700e + RTC_IRQP_READ = 0x8008700b + RTC_IRQP_SET = 0x4008700c + RTC_PARAM_GET = 0x40187013 + RTC_PARAM_SET = 0x40187014 + RTC_PIE_OFF = 0x7006 + RTC_PIE_ON = 0x7005 + RTC_PLL_GET = 0x80207011 + RTC_PLL_SET = 0x40207012 + RTC_RD_TIME = 0x80247009 + RTC_SET_TIME = 0x4024700a + RTC_UIE_OFF = 0x7004 + RTC_UIE_ON = 0x7003 + RTC_VL_CLR = 0x7014 + RTC_VL_READ = 0x80047013 + RTC_WIE_OFF = 0x7010 + RTC_WIE_ON = 0x700f + RTC_WKALM_RD = 0x80287010 + RTC_WKALM_SET = 0x4028700f + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SFD_CLOEXEC = 0x80000 + SFD_NONBLOCK = 0x800 + SIOCATMARK = 0x8905 + SIOCGPGRP = 0x8904 + SIOCGSTAMPNS_NEW = 0x80108907 + SIOCGSTAMP_NEW = 0x80108906 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCSPGRP = 0x8902 + SOCK_CLOEXEC = 0x80000 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x800 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0x1 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BINDTOIFINDEX = 0x3e + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 + SO_BUSY_POLL = 0x2e + SO_BUSY_POLL_BUDGET = 0x46 + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 + SO_NOFCS = 0x2b + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b + SO_PEERSEC = 0x1f + SO_PREFER_BUSY_POLL = 0x45 + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_RCVTIMEO_NEW = 0x42 + SO_RCVTIMEO_OLD = 0x14 + SO_RESERVE_MEM = 0x49 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_SNDTIMEO_NEW = 0x43 + SO_SNDTIMEO_OLD = 0x15 + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPING_NEW = 0x41 + SO_TIMESTAMPING_OLD = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TIMESTAMPNS_NEW = 0x40 + SO_TIMESTAMPNS_OLD = 0x23 + SO_TIMESTAMP_NEW = 0x3f + SO_TXTIME = 0x3d + SO_TYPE = 0x3 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TFD_CLOEXEC = 0x80000 + TFD_NONBLOCK = 0x800 + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGISO7816 = 0x80285442 + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSISO7816 = 0xc0285443 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TUNATTACHFILTER = 0x401054d5 + TUNDETACHFILTER = 0x401054d6 + TUNGETDEVNETNS = 0x54e3 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x801054db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETCARRIER = 0x400454e2 + TUNSETDEBUG = 0x400454c9 + TUNSETFILTEREBPF = 0x800454e1 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETSTEERINGEBPF = 0x800454e0 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UBI_IOCATT = 0x40186f40 + UBI_IOCDET = 0x40046f41 + UBI_IOCEBCH = 0x40044f02 + UBI_IOCEBER = 0x40044f01 + UBI_IOCEBISMAP = 0x80044f05 + UBI_IOCEBMAP = 0x40084f03 + UBI_IOCEBUNMAP = 0x40044f04 + UBI_IOCMKVOL = 0x40986f00 + UBI_IOCRMVOL = 0x40046f01 + UBI_IOCRNVOL = 0x51106f03 + UBI_IOCRPEB = 0x40046f04 + UBI_IOCRSVOL = 0x400c6f02 + UBI_IOCSETVOLPROP = 0x40104f06 + UBI_IOCSPEB = 0x40046f05 + UBI_IOCVOLCRBLK = 0x40804f07 + UBI_IOCVOLRMBLK = 0x4f08 + UBI_IOCVOLUP = 0x40084f00 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VMIN = 0x6 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WORDSIZE = 0x40 + XCASE = 0x4 + XTABS = 0x1800 + _HIDIOCGRAWNAME = 0x80804804 + _HIDIOCGRAWPHYS = 0x80404805 + _HIDIOCGRAWUNIQ = 0x80404808 +) + +// Errors +const ( + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + ECANCELED = syscall.Errno(0x7d) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EISCONN = syscall.Errno(0x6a) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTCONN = syscall.Errno(0x6b) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTUNIQ = syscall.Errno(0x4c) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPFNOSUPPORT = syscall.Errno(0x60) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGIO = syscall.Signal(0x1d) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "EDEADLK", "resource deadlock avoided"}, + {36, "ENAMETOOLONG", "file name too long"}, + {37, "ENOLCK", "no locks available"}, + {38, "ENOSYS", "function not implemented"}, + {39, "ENOTEMPTY", "directory not empty"}, + {40, "ELOOP", "too many levels of symbolic links"}, + {42, "ENOMSG", "no message of desired type"}, + {43, "EIDRM", "identifier removed"}, + {44, "ECHRNG", "channel number out of range"}, + {45, "EL2NSYNC", "level 2 not synchronized"}, + {46, "EL3HLT", "level 3 halted"}, + {47, "EL3RST", "level 3 reset"}, + {48, "ELNRNG", "link number out of range"}, + {49, "EUNATCH", "protocol driver not attached"}, + {50, "ENOCSI", "no CSI structure available"}, + {51, "EL2HLT", "level 2 halted"}, + {52, "EBADE", "invalid exchange"}, + {53, "EBADR", "invalid request descriptor"}, + {54, "EXFULL", "exchange full"}, + {55, "ENOANO", "no anode"}, + {56, "EBADRQC", "invalid request code"}, + {57, "EBADSLT", "invalid slot"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {72, "EMULTIHOP", "multihop attempted"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EBADMSG", "bad message"}, + {75, "EOVERFLOW", "value too large for defined data type"}, + {76, "ENOTUNIQ", "name not unique on network"}, + {77, "EBADFD", "file descriptor in bad state"}, + {78, "EREMCHG", "remote address changed"}, + {79, "ELIBACC", "can not access a needed shared library"}, + {80, "ELIBBAD", "accessing a corrupted shared library"}, + {81, "ELIBSCN", ".lib section in a.out corrupted"}, + {82, "ELIBMAX", "attempting to link in too many shared libraries"}, + {83, "ELIBEXEC", "cannot exec a shared library directly"}, + {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {85, "ERESTART", "interrupted system call should be restarted"}, + {86, "ESTRPIPE", "streams pipe error"}, + {87, "EUSERS", "too many users"}, + {88, "ENOTSOCK", "socket operation on non-socket"}, + {89, "EDESTADDRREQ", "destination address required"}, + {90, "EMSGSIZE", "message too long"}, + {91, "EPROTOTYPE", "protocol wrong type for socket"}, + {92, "ENOPROTOOPT", "protocol not available"}, + {93, "EPROTONOSUPPORT", "protocol not supported"}, + {94, "ESOCKTNOSUPPORT", "socket type not supported"}, + {95, "ENOTSUP", "operation not supported"}, + {96, "EPFNOSUPPORT", "protocol family not supported"}, + {97, "EAFNOSUPPORT", "address family not supported by protocol"}, + {98, "EADDRINUSE", "address already in use"}, + {99, "EADDRNOTAVAIL", "cannot assign requested address"}, + {100, "ENETDOWN", "network is down"}, + {101, "ENETUNREACH", "network is unreachable"}, + {102, "ENETRESET", "network dropped connection on reset"}, + {103, "ECONNABORTED", "software caused connection abort"}, + {104, "ECONNRESET", "connection reset by peer"}, + {105, "ENOBUFS", "no buffer space available"}, + {106, "EISCONN", "transport endpoint is already connected"}, + {107, "ENOTCONN", "transport endpoint is not connected"}, + {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {109, "ETOOMANYREFS", "too many references: cannot splice"}, + {110, "ETIMEDOUT", "connection timed out"}, + {111, "ECONNREFUSED", "connection refused"}, + {112, "EHOSTDOWN", "host is down"}, + {113, "EHOSTUNREACH", "no route to host"}, + {114, "EALREADY", "operation already in progress"}, + {115, "EINPROGRESS", "operation now in progress"}, + {116, "ESTALE", "stale file handle"}, + {117, "EUCLEAN", "structure needs cleaning"}, + {118, "ENOTNAM", "not a XENIX named type file"}, + {119, "ENAVAIL", "no XENIX semaphores available"}, + {120, "EISNAM", "is a named type file"}, + {121, "EREMOTEIO", "remote I/O error"}, + {122, "EDQUOT", "disk quota exceeded"}, + {123, "ENOMEDIUM", "no medium found"}, + {124, "EMEDIUMTYPE", "wrong medium type"}, + {125, "ECANCELED", "operation canceled"}, + {126, "ENOKEY", "required key not available"}, + {127, "EKEYEXPIRED", "key has expired"}, + {128, "EKEYREVOKED", "key has been revoked"}, + {129, "EKEYREJECTED", "key was rejected by service"}, + {130, "EOWNERDEAD", "owner died"}, + {131, "ENOTRECOVERABLE", "state not recoverable"}, + {132, "ERFKILL", "operation not possible due to RF-kill"}, + {133, "EHWPOISON", "memory page has hardware error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGBUS", "bus error"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGUSR1", "user defined signal 1"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGUSR2", "user defined signal 2"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGSTKFLT", "stack fault"}, + {17, "SIGCHLD", "child exited"}, + {18, "SIGCONT", "continued"}, + {19, "SIGSTOP", "stopped (signal)"}, + {20, "SIGTSTP", "stopped"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGURG", "urgent I/O condition"}, + {24, "SIGXCPU", "CPU time limit exceeded"}, + {25, "SIGXFSZ", "file size limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window changed"}, + {29, "SIGIO", "I/O possible"}, + {30, "SIGPWR", "power failure"}, + {31, "SIGSYS", "bad system call"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go new file mode 100644 index 0000000..6d122da --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -0,0 +1,888 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include -fsigned-char +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build s390x && linux +// +build s390x,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/_const.go + +package unix + +import "syscall" + +const ( + B1000000 = 0x1008 + B115200 = 0x1002 + B1152000 = 0x1009 + B1500000 = 0x100a + B2000000 = 0x100b + B230400 = 0x1003 + B2500000 = 0x100c + B3000000 = 0x100d + B3500000 = 0x100e + B4000000 = 0x100f + B460800 = 0x1004 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B921600 = 0x1007 + BLKBSZGET = 0x80081270 + BLKBSZSET = 0x40081271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80081272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BS1 = 0x2000 + BSDLY = 0x2000 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIZE = 0x30 + CSTOPB = 0x40 + ECCGETLAYOUT = 0x81484d11 + ECCGETSTATS = 0x80104d12 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EPOLL_CLOEXEC = 0x80000 + EXTPROC = 0x10000 + FF1 = 0x8000 + FFDLY = 0x8000 + FICLONE = 0x40049409 + FICLONERANGE = 0x4020940d + FLUSHO = 0x1000 + FS_IOC_ENABLE_VERITY = 0x40806685 + FS_IOC_GETFLAGS = 0x80086601 + FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SETFLAGS = 0x40086602 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + F_GETLK = 0x5 + F_GETLK64 = 0x5 + F_GETOWN = 0x9 + F_RDLCK = 0x0 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x8 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HIDIOCGRAWINFO = 0x80084803 + HIDIOCGRDESC = 0x90044802 + HIDIOCGRDESCSIZE = 0x80044801 + HUPCL = 0x400 + ICANON = 0x2 + IEXTEN = 0x8000 + IN_CLOEXEC = 0x80000 + IN_NONBLOCK = 0x800 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + ISIG = 0x1 + IUCLC = 0x200 + IXOFF = 0x1000 + IXON = 0x400 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_STACK = 0x20000 + MAP_SYNC = 0x80000 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MEMERASE = 0x40084d02 + MEMERASE64 = 0x40104d14 + MEMGETBADBLOCK = 0x40084d0b + MEMGETINFO = 0x80204d01 + MEMGETOOBSEL = 0x80c84d0a + MEMGETREGIONCOUNT = 0x80044d07 + MEMISLOCKED = 0x80084d17 + MEMLOCK = 0x40084d05 + MEMREADOOB = 0xc0104d04 + MEMSETBADBLOCK = 0x40084d0c + MEMUNLOCK = 0x40084d06 + MEMWRITEOOB = 0xc0104d03 + MTDFILEMODE = 0x4d13 + NFDBITS = 0x40 + NLDLY = 0x100 + NOFLSH = 0x80 + NS_GET_NSTYPE = 0xb703 + NS_GET_OWNER_UID = 0xb704 + NS_GET_PARENT = 0xb702 + NS_GET_USERNS = 0xb701 + OLCUC = 0x2 + ONLCR = 0x4 + OTPERASE = 0x400c4d19 + OTPGETREGIONCOUNT = 0x40044d0e + OTPGETREGIONINFO = 0x400c4d0f + OTPLOCK = 0x800c4d10 + OTPSELECT = 0x80044d0d + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x4000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + PARENB = 0x100 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80082407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc008240a + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PPPIOCATTACH = 0x4004743d + PPPIOCATTCHAN = 0x40047438 + PPPIOCBRIDGECHAN = 0x40047435 + PPPIOCCONNECT = 0x4004743a + PPPIOCDETACH = 0x4004743c + PPPIOCDISCONN = 0x7439 + PPPIOCGASYNCMAP = 0x80047458 + PPPIOCGCHAN = 0x80047437 + PPPIOCGDEBUG = 0x80047441 + PPPIOCGFLAGS = 0x8004745a + PPPIOCGIDLE = 0x8010743f + PPPIOCGIDLE32 = 0x8008743f + PPPIOCGIDLE64 = 0x8010743f + PPPIOCGL2TPSTATS = 0x80487436 + PPPIOCGMRU = 0x80047453 + PPPIOCGRASYNCMAP = 0x80047455 + PPPIOCGUNIT = 0x80047456 + PPPIOCGXASYNCMAP = 0x80207450 + PPPIOCSACTIVE = 0x40107446 + PPPIOCSASYNCMAP = 0x40047457 + PPPIOCSCOMPRESS = 0x4010744d + PPPIOCSDEBUG = 0x40047440 + PPPIOCSFLAGS = 0x40047459 + PPPIOCSMAXCID = 0x40047451 + PPPIOCSMRRU = 0x4004743b + PPPIOCSMRU = 0x40047452 + PPPIOCSNPMODE = 0x4008744b + PPPIOCSPASS = 0x40107447 + PPPIOCSRASYNCMAP = 0x40047454 + PPPIOCSXASYNCMAP = 0x4020744f + PPPIOCUNBRIDGECHAN = 0x7434 + PPPIOCXFERUNIT = 0x744e + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTRACE_DISABLE_TE = 0x5010 + PTRACE_ENABLE_TE = 0x5009 + PTRACE_GET_LAST_BREAK = 0x5006 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_PEEKDATA_AREA = 0x5003 + PTRACE_PEEKTEXT_AREA = 0x5002 + PTRACE_PEEKUSR_AREA = 0x5000 + PTRACE_PEEK_SYSTEM_CALL = 0x5007 + PTRACE_POKEDATA_AREA = 0x5005 + PTRACE_POKETEXT_AREA = 0x5004 + PTRACE_POKEUSR_AREA = 0x5001 + PTRACE_POKE_SYSTEM_CALL = 0x5008 + PTRACE_PROT = 0x15 + PTRACE_SINGLEBLOCK = 0xc + PTRACE_SYSEMU = 0x1f + PTRACE_SYSEMU_SINGLESTEP = 0x20 + PTRACE_TE_ABORT_RAND = 0x5011 + PT_ACR0 = 0x90 + PT_ACR1 = 0x94 + PT_ACR10 = 0xb8 + PT_ACR11 = 0xbc + PT_ACR12 = 0xc0 + PT_ACR13 = 0xc4 + PT_ACR14 = 0xc8 + PT_ACR15 = 0xcc + PT_ACR2 = 0x98 + PT_ACR3 = 0x9c + PT_ACR4 = 0xa0 + PT_ACR5 = 0xa4 + PT_ACR6 = 0xa8 + PT_ACR7 = 0xac + PT_ACR8 = 0xb0 + PT_ACR9 = 0xb4 + PT_CR_10 = 0x168 + PT_CR_11 = 0x170 + PT_CR_9 = 0x160 + PT_ENDREGS = 0x1af + PT_FPC = 0xd8 + PT_FPR0 = 0xe0 + PT_FPR1 = 0xe8 + PT_FPR10 = 0x130 + PT_FPR11 = 0x138 + PT_FPR12 = 0x140 + PT_FPR13 = 0x148 + PT_FPR14 = 0x150 + PT_FPR15 = 0x158 + PT_FPR2 = 0xf0 + PT_FPR3 = 0xf8 + PT_FPR4 = 0x100 + PT_FPR5 = 0x108 + PT_FPR6 = 0x110 + PT_FPR7 = 0x118 + PT_FPR8 = 0x120 + PT_FPR9 = 0x128 + PT_GPR0 = 0x10 + PT_GPR1 = 0x18 + PT_GPR10 = 0x60 + PT_GPR11 = 0x68 + PT_GPR12 = 0x70 + PT_GPR13 = 0x78 + PT_GPR14 = 0x80 + PT_GPR15 = 0x88 + PT_GPR2 = 0x20 + PT_GPR3 = 0x28 + PT_GPR4 = 0x30 + PT_GPR5 = 0x38 + PT_GPR6 = 0x40 + PT_GPR7 = 0x48 + PT_GPR8 = 0x50 + PT_GPR9 = 0x58 + PT_IEEE_IP = 0x1a8 + PT_LASTOFF = 0x1a8 + PT_ORIGGPR2 = 0xd0 + PT_PSWADDR = 0x8 + PT_PSWMASK = 0x0 + RLIMIT_AS = 0x9 + RLIMIT_MEMLOCK = 0x8 + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RNDADDENTROPY = 0x40085203 + RNDADDTOENTCNT = 0x40045201 + RNDCLEARPOOL = 0x5206 + RNDGETENTCNT = 0x80045200 + RNDGETPOOL = 0x80085202 + RNDRESEEDCRNG = 0x5207 + RNDZAPENTCNT = 0x5204 + RTC_AIE_OFF = 0x7002 + RTC_AIE_ON = 0x7001 + RTC_ALM_READ = 0x80247008 + RTC_ALM_SET = 0x40247007 + RTC_EPOCH_READ = 0x8008700d + RTC_EPOCH_SET = 0x4008700e + RTC_IRQP_READ = 0x8008700b + RTC_IRQP_SET = 0x4008700c + RTC_PARAM_GET = 0x40187013 + RTC_PARAM_SET = 0x40187014 + RTC_PIE_OFF = 0x7006 + RTC_PIE_ON = 0x7005 + RTC_PLL_GET = 0x80207011 + RTC_PLL_SET = 0x40207012 + RTC_RD_TIME = 0x80247009 + RTC_SET_TIME = 0x4024700a + RTC_UIE_OFF = 0x7004 + RTC_UIE_ON = 0x7003 + RTC_VL_CLR = 0x7014 + RTC_VL_READ = 0x80047013 + RTC_WIE_OFF = 0x7010 + RTC_WIE_ON = 0x700f + RTC_WKALM_RD = 0x80287010 + RTC_WKALM_SET = 0x4028700f + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SFD_CLOEXEC = 0x80000 + SFD_NONBLOCK = 0x800 + SIOCATMARK = 0x8905 + SIOCGPGRP = 0x8904 + SIOCGSTAMPNS_NEW = 0x80108907 + SIOCGSTAMP_NEW = 0x80108906 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCSPGRP = 0x8902 + SOCK_CLOEXEC = 0x80000 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x800 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0x1 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BINDTOIFINDEX = 0x3e + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 + SO_BUSY_POLL = 0x2e + SO_BUSY_POLL_BUDGET = 0x46 + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 + SO_NOFCS = 0x2b + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b + SO_PEERSEC = 0x1f + SO_PREFER_BUSY_POLL = 0x45 + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_RCVTIMEO_NEW = 0x42 + SO_RCVTIMEO_OLD = 0x14 + SO_RESERVE_MEM = 0x49 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_SNDTIMEO_NEW = 0x43 + SO_SNDTIMEO_OLD = 0x15 + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPING_NEW = 0x41 + SO_TIMESTAMPING_OLD = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TIMESTAMPNS_NEW = 0x40 + SO_TIMESTAMPNS_OLD = 0x23 + SO_TIMESTAMP_NEW = 0x3f + SO_TXTIME = 0x3d + SO_TYPE = 0x3 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TFD_CLOEXEC = 0x80000 + TFD_NONBLOCK = 0x800 + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGISO7816 = 0x80285442 + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSISO7816 = 0xc0285443 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TUNATTACHFILTER = 0x401054d5 + TUNDETACHFILTER = 0x401054d6 + TUNGETDEVNETNS = 0x54e3 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x801054db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETCARRIER = 0x400454e2 + TUNSETDEBUG = 0x400454c9 + TUNSETFILTEREBPF = 0x800454e1 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETSTEERINGEBPF = 0x800454e0 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UBI_IOCATT = 0x40186f40 + UBI_IOCDET = 0x40046f41 + UBI_IOCEBCH = 0x40044f02 + UBI_IOCEBER = 0x40044f01 + UBI_IOCEBISMAP = 0x80044f05 + UBI_IOCEBMAP = 0x40084f03 + UBI_IOCEBUNMAP = 0x40044f04 + UBI_IOCMKVOL = 0x40986f00 + UBI_IOCRMVOL = 0x40046f01 + UBI_IOCRNVOL = 0x51106f03 + UBI_IOCRPEB = 0x40046f04 + UBI_IOCRSVOL = 0x400c6f02 + UBI_IOCSETVOLPROP = 0x40104f06 + UBI_IOCSPEB = 0x40046f05 + UBI_IOCVOLCRBLK = 0x40804f07 + UBI_IOCVOLRMBLK = 0x4f08 + UBI_IOCVOLUP = 0x40084f00 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VMIN = 0x6 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WORDSIZE = 0x40 + XCASE = 0x4 + XTABS = 0x1800 + _HIDIOCGRAWNAME = 0x80804804 + _HIDIOCGRAWPHYS = 0x80404805 + _HIDIOCGRAWUNIQ = 0x80404808 +) + +// Errors +const ( + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + ECANCELED = syscall.Errno(0x7d) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EISCONN = syscall.Errno(0x6a) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTCONN = syscall.Errno(0x6b) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTUNIQ = syscall.Errno(0x4c) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPFNOSUPPORT = syscall.Errno(0x60) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGIO = syscall.Signal(0x1d) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "EDEADLK", "resource deadlock avoided"}, + {36, "ENAMETOOLONG", "file name too long"}, + {37, "ENOLCK", "no locks available"}, + {38, "ENOSYS", "function not implemented"}, + {39, "ENOTEMPTY", "directory not empty"}, + {40, "ELOOP", "too many levels of symbolic links"}, + {42, "ENOMSG", "no message of desired type"}, + {43, "EIDRM", "identifier removed"}, + {44, "ECHRNG", "channel number out of range"}, + {45, "EL2NSYNC", "level 2 not synchronized"}, + {46, "EL3HLT", "level 3 halted"}, + {47, "EL3RST", "level 3 reset"}, + {48, "ELNRNG", "link number out of range"}, + {49, "EUNATCH", "protocol driver not attached"}, + {50, "ENOCSI", "no CSI structure available"}, + {51, "EL2HLT", "level 2 halted"}, + {52, "EBADE", "invalid exchange"}, + {53, "EBADR", "invalid request descriptor"}, + {54, "EXFULL", "exchange full"}, + {55, "ENOANO", "no anode"}, + {56, "EBADRQC", "invalid request code"}, + {57, "EBADSLT", "invalid slot"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {72, "EMULTIHOP", "multihop attempted"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EBADMSG", "bad message"}, + {75, "EOVERFLOW", "value too large for defined data type"}, + {76, "ENOTUNIQ", "name not unique on network"}, + {77, "EBADFD", "file descriptor in bad state"}, + {78, "EREMCHG", "remote address changed"}, + {79, "ELIBACC", "can not access a needed shared library"}, + {80, "ELIBBAD", "accessing a corrupted shared library"}, + {81, "ELIBSCN", ".lib section in a.out corrupted"}, + {82, "ELIBMAX", "attempting to link in too many shared libraries"}, + {83, "ELIBEXEC", "cannot exec a shared library directly"}, + {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {85, "ERESTART", "interrupted system call should be restarted"}, + {86, "ESTRPIPE", "streams pipe error"}, + {87, "EUSERS", "too many users"}, + {88, "ENOTSOCK", "socket operation on non-socket"}, + {89, "EDESTADDRREQ", "destination address required"}, + {90, "EMSGSIZE", "message too long"}, + {91, "EPROTOTYPE", "protocol wrong type for socket"}, + {92, "ENOPROTOOPT", "protocol not available"}, + {93, "EPROTONOSUPPORT", "protocol not supported"}, + {94, "ESOCKTNOSUPPORT", "socket type not supported"}, + {95, "ENOTSUP", "operation not supported"}, + {96, "EPFNOSUPPORT", "protocol family not supported"}, + {97, "EAFNOSUPPORT", "address family not supported by protocol"}, + {98, "EADDRINUSE", "address already in use"}, + {99, "EADDRNOTAVAIL", "cannot assign requested address"}, + {100, "ENETDOWN", "network is down"}, + {101, "ENETUNREACH", "network is unreachable"}, + {102, "ENETRESET", "network dropped connection on reset"}, + {103, "ECONNABORTED", "software caused connection abort"}, + {104, "ECONNRESET", "connection reset by peer"}, + {105, "ENOBUFS", "no buffer space available"}, + {106, "EISCONN", "transport endpoint is already connected"}, + {107, "ENOTCONN", "transport endpoint is not connected"}, + {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {109, "ETOOMANYREFS", "too many references: cannot splice"}, + {110, "ETIMEDOUT", "connection timed out"}, + {111, "ECONNREFUSED", "connection refused"}, + {112, "EHOSTDOWN", "host is down"}, + {113, "EHOSTUNREACH", "no route to host"}, + {114, "EALREADY", "operation already in progress"}, + {115, "EINPROGRESS", "operation now in progress"}, + {116, "ESTALE", "stale file handle"}, + {117, "EUCLEAN", "structure needs cleaning"}, + {118, "ENOTNAM", "not a XENIX named type file"}, + {119, "ENAVAIL", "no XENIX semaphores available"}, + {120, "EISNAM", "is a named type file"}, + {121, "EREMOTEIO", "remote I/O error"}, + {122, "EDQUOT", "disk quota exceeded"}, + {123, "ENOMEDIUM", "no medium found"}, + {124, "EMEDIUMTYPE", "wrong medium type"}, + {125, "ECANCELED", "operation canceled"}, + {126, "ENOKEY", "required key not available"}, + {127, "EKEYEXPIRED", "key has expired"}, + {128, "EKEYREVOKED", "key has been revoked"}, + {129, "EKEYREJECTED", "key was rejected by service"}, + {130, "EOWNERDEAD", "owner died"}, + {131, "ENOTRECOVERABLE", "state not recoverable"}, + {132, "ERFKILL", "operation not possible due to RF-kill"}, + {133, "EHWPOISON", "memory page has hardware error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGBUS", "bus error"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGUSR1", "user defined signal 1"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGUSR2", "user defined signal 2"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGSTKFLT", "stack fault"}, + {17, "SIGCHLD", "child exited"}, + {18, "SIGCONT", "continued"}, + {19, "SIGSTOP", "stopped (signal)"}, + {20, "SIGTSTP", "stopped"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGURG", "urgent I/O condition"}, + {24, "SIGXCPU", "CPU time limit exceeded"}, + {25, "SIGXFSZ", "file size limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window changed"}, + {29, "SIGIO", "I/O possible"}, + {30, "SIGPWR", "power failure"}, + {31, "SIGSYS", "bad system call"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go new file mode 100644 index 0000000..6bd19e5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -0,0 +1,883 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build sparc64 && linux +// +build sparc64,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go + +package unix + +import "syscall" + +const ( + ASI_LEON_DFLUSH = 0x11 + ASI_LEON_IFLUSH = 0x10 + ASI_LEON_MMUFLUSH = 0x18 + B1000000 = 0x1008 + B115200 = 0x1002 + B1152000 = 0x1009 + B1500000 = 0x100a + B2000000 = 0x100b + B230400 = 0x1003 + B2500000 = 0x100c + B3000000 = 0x100d + B3500000 = 0x100e + B4000000 = 0x100f + B460800 = 0x1004 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B921600 = 0x1007 + BLKBSZGET = 0x40081270 + BLKBSZSET = 0x80081271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40081272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1000 + BS1 = 0x2000 + BSDLY = 0x2000 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIZE = 0x30 + CSTOPB = 0x40 + ECCGETLAYOUT = 0x41484d11 + ECCGETSTATS = 0x40104d12 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x400000 + EFD_NONBLOCK = 0x4000 + EMT_TAGOVF = 0x1 + EPOLL_CLOEXEC = 0x400000 + EXTPROC = 0x10000 + FF1 = 0x8000 + FFDLY = 0x8000 + FICLONE = 0x80049409 + FICLONERANGE = 0x8020940d + FLUSHO = 0x1000 + FS_IOC_ENABLE_VERITY = 0x80806685 + FS_IOC_GETFLAGS = 0x40086601 + FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SETFLAGS = 0x80086602 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + F_GETLK = 0x7 + F_GETLK64 = 0x7 + F_GETOWN = 0x5 + F_RDLCK = 0x1 + F_SETLK = 0x8 + F_SETLK64 = 0x8 + F_SETLKW = 0x9 + F_SETLKW64 = 0x9 + F_SETOWN = 0x6 + F_UNLCK = 0x3 + F_WRLCK = 0x2 + HIDIOCGRAWINFO = 0x40084803 + HIDIOCGRDESC = 0x50044802 + HIDIOCGRDESCSIZE = 0x40044801 + HUPCL = 0x400 + ICANON = 0x2 + IEXTEN = 0x8000 + IN_CLOEXEC = 0x400000 + IN_NONBLOCK = 0x4000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + ISIG = 0x1 + IUCLC = 0x200 + IXOFF = 0x1000 + IXON = 0x400 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_GROWSDOWN = 0x200 + MAP_HUGETLB = 0x40000 + MAP_LOCKED = 0x100 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x40 + MAP_POPULATE = 0x8000 + MAP_RENAME = 0x20 + MAP_STACK = 0x20000 + MAP_SYNC = 0x80000 + MCL_CURRENT = 0x2000 + MCL_FUTURE = 0x4000 + MCL_ONFAULT = 0x8000 + MEMERASE = 0x80084d02 + MEMERASE64 = 0x80104d14 + MEMGETBADBLOCK = 0x80084d0b + MEMGETINFO = 0x40204d01 + MEMGETOOBSEL = 0x40c84d0a + MEMGETREGIONCOUNT = 0x40044d07 + MEMISLOCKED = 0x40084d17 + MEMLOCK = 0x80084d05 + MEMREADOOB = 0xc0104d04 + MEMSETBADBLOCK = 0x80084d0c + MEMUNLOCK = 0x80084d06 + MEMWRITEOOB = 0xc0104d03 + MTDFILEMODE = 0x20004d13 + NFDBITS = 0x40 + NLDLY = 0x100 + NOFLSH = 0x80 + NS_GET_NSTYPE = 0x2000b703 + NS_GET_OWNER_UID = 0x2000b704 + NS_GET_PARENT = 0x2000b702 + NS_GET_USERNS = 0x2000b701 + OLCUC = 0x2 + ONLCR = 0x4 + OTPERASE = 0x800c4d19 + OTPGETREGIONCOUNT = 0x80044d0e + OTPGETREGIONINFO = 0x800c4d0f + OTPLOCK = 0x400c4d10 + OTPSELECT = 0x40044d0d + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x400000 + O_CREAT = 0x200 + O_DIRECT = 0x100000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x2000 + O_EXCL = 0x800 + O_FSYNC = 0x802000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x4004 + O_NOATIME = 0x200000 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x4000 + O_PATH = 0x1000000 + O_RSYNC = 0x802000 + O_SYNC = 0x802000 + O_TMPFILE = 0x2010000 + O_TRUNC = 0x400 + PARENB = 0x100 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40082407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc008240a + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PPPIOCATTACH = 0x8004743d + PPPIOCATTCHAN = 0x80047438 + PPPIOCBRIDGECHAN = 0x80047435 + PPPIOCCONNECT = 0x8004743a + PPPIOCDETACH = 0x8004743c + PPPIOCDISCONN = 0x20007439 + PPPIOCGASYNCMAP = 0x40047458 + PPPIOCGCHAN = 0x40047437 + PPPIOCGDEBUG = 0x40047441 + PPPIOCGFLAGS = 0x4004745a + PPPIOCGIDLE = 0x4010743f + PPPIOCGIDLE32 = 0x4008743f + PPPIOCGIDLE64 = 0x4010743f + PPPIOCGL2TPSTATS = 0x40487436 + PPPIOCGMRU = 0x40047453 + PPPIOCGRASYNCMAP = 0x40047455 + PPPIOCGUNIT = 0x40047456 + PPPIOCGXASYNCMAP = 0x40207450 + PPPIOCSACTIVE = 0x80107446 + PPPIOCSASYNCMAP = 0x80047457 + PPPIOCSCOMPRESS = 0x8010744d + PPPIOCSDEBUG = 0x80047440 + PPPIOCSFLAGS = 0x80047459 + PPPIOCSMAXCID = 0x80047451 + PPPIOCSMRRU = 0x8004743b + PPPIOCSMRU = 0x80047452 + PPPIOCSNPMODE = 0x8008744b + PPPIOCSPASS = 0x80107447 + PPPIOCSRASYNCMAP = 0x80047454 + PPPIOCSXASYNCMAP = 0x8020744f + PPPIOCUNBRIDGECHAN = 0x20007434 + PPPIOCXFERUNIT = 0x2000744e + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTRACE_GETFPAREGS = 0x14 + PTRACE_GETFPREGS = 0xe + PTRACE_GETFPREGS64 = 0x19 + PTRACE_GETREGS64 = 0x16 + PTRACE_READDATA = 0x10 + PTRACE_READTEXT = 0x12 + PTRACE_SETFPAREGS = 0x15 + PTRACE_SETFPREGS = 0xf + PTRACE_SETFPREGS64 = 0x1a + PTRACE_SETREGS64 = 0x17 + PTRACE_SPARC_DETACH = 0xb + PTRACE_WRITEDATA = 0x11 + PTRACE_WRITETEXT = 0x13 + PT_FP = 0x48 + PT_G0 = 0x10 + PT_G1 = 0x14 + PT_G2 = 0x18 + PT_G3 = 0x1c + PT_G4 = 0x20 + PT_G5 = 0x24 + PT_G6 = 0x28 + PT_G7 = 0x2c + PT_I0 = 0x30 + PT_I1 = 0x34 + PT_I2 = 0x38 + PT_I3 = 0x3c + PT_I4 = 0x40 + PT_I5 = 0x44 + PT_I6 = 0x48 + PT_I7 = 0x4c + PT_NPC = 0x8 + PT_PC = 0x4 + PT_PSR = 0x0 + PT_REGS_MAGIC = 0x57ac6c00 + PT_TNPC = 0x90 + PT_TPC = 0x88 + PT_TSTATE = 0x80 + PT_V9_FP = 0x70 + PT_V9_G0 = 0x0 + PT_V9_G1 = 0x8 + PT_V9_G2 = 0x10 + PT_V9_G3 = 0x18 + PT_V9_G4 = 0x20 + PT_V9_G5 = 0x28 + PT_V9_G6 = 0x30 + PT_V9_G7 = 0x38 + PT_V9_I0 = 0x40 + PT_V9_I1 = 0x48 + PT_V9_I2 = 0x50 + PT_V9_I3 = 0x58 + PT_V9_I4 = 0x60 + PT_V9_I5 = 0x68 + PT_V9_I6 = 0x70 + PT_V9_I7 = 0x78 + PT_V9_MAGIC = 0x9c + PT_V9_TNPC = 0x90 + PT_V9_TPC = 0x88 + PT_V9_TSTATE = 0x80 + PT_V9_Y = 0x98 + PT_WIM = 0x10 + PT_Y = 0xc + RLIMIT_AS = 0x9 + RLIMIT_MEMLOCK = 0x8 + RLIMIT_NOFILE = 0x6 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RNDADDENTROPY = 0x80085203 + RNDADDTOENTCNT = 0x80045201 + RNDCLEARPOOL = 0x20005206 + RNDGETENTCNT = 0x40045200 + RNDGETPOOL = 0x40085202 + RNDRESEEDCRNG = 0x20005207 + RNDZAPENTCNT = 0x20005204 + RTC_AIE_OFF = 0x20007002 + RTC_AIE_ON = 0x20007001 + RTC_ALM_READ = 0x40247008 + RTC_ALM_SET = 0x80247007 + RTC_EPOCH_READ = 0x4008700d + RTC_EPOCH_SET = 0x8008700e + RTC_IRQP_READ = 0x4008700b + RTC_IRQP_SET = 0x8008700c + RTC_PARAM_GET = 0x80187013 + RTC_PARAM_SET = 0x80187014 + RTC_PIE_OFF = 0x20007006 + RTC_PIE_ON = 0x20007005 + RTC_PLL_GET = 0x40207011 + RTC_PLL_SET = 0x80207012 + RTC_RD_TIME = 0x40247009 + RTC_SET_TIME = 0x8024700a + RTC_UIE_OFF = 0x20007004 + RTC_UIE_ON = 0x20007003 + RTC_VL_CLR = 0x20007014 + RTC_VL_READ = 0x40047013 + RTC_WIE_OFF = 0x20007010 + RTC_WIE_ON = 0x2000700f + RTC_WKALM_RD = 0x40287010 + RTC_WKALM_SET = 0x8028700f + SCM_TIMESTAMPING = 0x23 + SCM_TIMESTAMPING_OPT_STATS = 0x38 + SCM_TIMESTAMPING_PKTINFO = 0x3c + SCM_TIMESTAMPNS = 0x21 + SCM_TXTIME = 0x3f + SCM_WIFI_STATUS = 0x25 + SFD_CLOEXEC = 0x400000 + SFD_NONBLOCK = 0x4000 + SIOCATMARK = 0x8905 + SIOCGPGRP = 0x8904 + SIOCGSTAMPNS_NEW = 0x40108907 + SIOCGSTAMP_NEW = 0x40108906 + SIOCINQ = 0x4004667f + SIOCOUTQ = 0x40047473 + SIOCSPGRP = 0x8902 + SOCK_CLOEXEC = 0x400000 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x4000 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SO_ACCEPTCONN = 0x8000 + SO_ATTACH_BPF = 0x34 + SO_ATTACH_REUSEPORT_CBPF = 0x35 + SO_ATTACH_REUSEPORT_EBPF = 0x36 + SO_BINDTODEVICE = 0xd + SO_BINDTOIFINDEX = 0x41 + SO_BPF_EXTENSIONS = 0x32 + SO_BROADCAST = 0x20 + SO_BSDCOMPAT = 0x400 + SO_BUF_LOCK = 0x51 + SO_BUSY_POLL = 0x30 + SO_BUSY_POLL_BUDGET = 0x49 + SO_CNX_ADVICE = 0x37 + SO_COOKIE = 0x3b + SO_DETACH_REUSEPORT_BPF = 0x47 + SO_DOMAIN = 0x1029 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_INCOMING_CPU = 0x33 + SO_INCOMING_NAPI_ID = 0x3a + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOCK_FILTER = 0x28 + SO_MARK = 0x22 + SO_MAX_PACING_RATE = 0x31 + SO_MEMINFO = 0x39 + SO_NETNS_COOKIE = 0x50 + SO_NOFCS = 0x27 + SO_OOBINLINE = 0x100 + SO_PASSCRED = 0x2 + SO_PASSSEC = 0x1f + SO_PEEK_OFF = 0x26 + SO_PEERCRED = 0x40 + SO_PEERGROUPS = 0x3d + SO_PEERSEC = 0x1e + SO_PREFER_BUSY_POLL = 0x48 + SO_PROTOCOL = 0x1028 + SO_RCVBUF = 0x1002 + SO_RCVBUFFORCE = 0x100b + SO_RCVLOWAT = 0x800 + SO_RCVTIMEO = 0x2000 + SO_RCVTIMEO_NEW = 0x44 + SO_RCVTIMEO_OLD = 0x2000 + SO_RESERVE_MEM = 0x52 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RXQ_OVFL = 0x24 + SO_SECURITY_AUTHENTICATION = 0x5001 + SO_SECURITY_ENCRYPTION_NETWORK = 0x5004 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x5002 + SO_SELECT_ERR_QUEUE = 0x29 + SO_SNDBUF = 0x1001 + SO_SNDBUFFORCE = 0x100a + SO_SNDLOWAT = 0x1000 + SO_SNDTIMEO = 0x4000 + SO_SNDTIMEO_NEW = 0x45 + SO_SNDTIMEO_OLD = 0x4000 + SO_TIMESTAMPING = 0x23 + SO_TIMESTAMPING_NEW = 0x43 + SO_TIMESTAMPING_OLD = 0x23 + SO_TIMESTAMPNS = 0x21 + SO_TIMESTAMPNS_NEW = 0x42 + SO_TIMESTAMPNS_OLD = 0x21 + SO_TIMESTAMP_NEW = 0x46 + SO_TXTIME = 0x3f + SO_TYPE = 0x1008 + SO_WIFI_STATUS = 0x25 + SO_ZEROCOPY = 0x3e + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x20005407 + TCGETA = 0x40125401 + TCGETS = 0x40245408 + TCGETS2 = 0x402c540c + TCSAFLUSH = 0x2 + TCSBRK = 0x20005405 + TCSBRKP = 0x5425 + TCSETA = 0x80125402 + TCSETAF = 0x80125404 + TCSETAW = 0x80125403 + TCSETS = 0x80245409 + TCSETS2 = 0x802c540d + TCSETSF = 0x8024540b + TCSETSF2 = 0x802c540f + TCSETSW = 0x8024540a + TCSETSW2 = 0x802c540e + TCXONC = 0x20005406 + TFD_CLOEXEC = 0x400000 + TFD_NONBLOCK = 0x4000 + TIOCCBRK = 0x2000747a + TIOCCONS = 0x20007424 + TIOCEXCL = 0x2000740d + TIOCGDEV = 0x40045432 + TIOCGETD = 0x40047400 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x545d + TIOCGISO7816 = 0x40285443 + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x40047483 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40047486 + TIOCGPTPEER = 0x20007489 + TIOCGRS485 = 0x40205441 + TIOCGSERIAL = 0x541e + TIOCGSID = 0x40047485 + TIOCGSOFTCAR = 0x40047464 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x4004667f + TIOCLINUX = 0x541c + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMIWAIT = 0x545c + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007484 + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSETD = 0x80047401 + TIOCSIG = 0x80047488 + TIOCSISO7816 = 0xc0285444 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x80047482 + TIOCSPTLCK = 0x80047487 + TIOCSRS485 = 0xc0205442 + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x80047465 + TIOCSTART = 0x2000746e + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x20005437 + TOSTOP = 0x100 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETDEVNETNS = 0x200054e3 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETCARRIER = 0x800454e2 + TUNSETDEBUG = 0x800454c9 + TUNSETFILTEREBPF = 0x400454e1 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETSTEERINGEBPF = 0x400454e0 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UBI_IOCATT = 0x80186f40 + UBI_IOCDET = 0x80046f41 + UBI_IOCEBCH = 0x80044f02 + UBI_IOCEBER = 0x80044f01 + UBI_IOCEBISMAP = 0x40044f05 + UBI_IOCEBMAP = 0x80084f03 + UBI_IOCEBUNMAP = 0x80044f04 + UBI_IOCMKVOL = 0x80986f00 + UBI_IOCRMVOL = 0x80046f01 + UBI_IOCRNVOL = 0x91106f03 + UBI_IOCRPEB = 0x80046f04 + UBI_IOCRSVOL = 0x800c6f02 + UBI_IOCSETVOLPROP = 0x80104f06 + UBI_IOCSPEB = 0x80046f05 + UBI_IOCVOLCRBLK = 0x80804f07 + UBI_IOCVOLRMBLK = 0x20004f08 + UBI_IOCVOLUP = 0x80084f00 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VMIN = 0x6 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WORDSIZE = 0x40 + XCASE = 0x4 + XTABS = 0x1800 + _HIDIOCGRAWNAME = 0x40804804 + _HIDIOCGRAWPHYS = 0x40404805 + _HIDIOCGRAWUNIQ = 0x40404808 + __TIOCFLUSH = 0x80047410 +) + +// Errors +const ( + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EADV = syscall.Errno(0x53) + EAFNOSUPPORT = syscall.Errno(0x2f) + EALREADY = syscall.Errno(0x25) + EBADE = syscall.Errno(0x66) + EBADFD = syscall.Errno(0x5d) + EBADMSG = syscall.Errno(0x4c) + EBADR = syscall.Errno(0x67) + EBADRQC = syscall.Errno(0x6a) + EBADSLT = syscall.Errno(0x6b) + EBFONT = syscall.Errno(0x6d) + ECANCELED = syscall.Errno(0x7f) + ECHRNG = syscall.Errno(0x5e) + ECOMM = syscall.Errno(0x55) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0x4e) + EDEADLOCK = syscall.Errno(0x6c) + EDESTADDRREQ = syscall.Errno(0x27) + EDOTDOT = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EHWPOISON = syscall.Errno(0x87) + EIDRM = syscall.Errno(0x4d) + EILSEQ = syscall.Errno(0x7a) + EINPROGRESS = syscall.Errno(0x24) + EISCONN = syscall.Errno(0x38) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x81) + EKEYREJECTED = syscall.Errno(0x83) + EKEYREVOKED = syscall.Errno(0x82) + EL2HLT = syscall.Errno(0x65) + EL2NSYNC = syscall.Errno(0x5f) + EL3HLT = syscall.Errno(0x60) + EL3RST = syscall.Errno(0x61) + ELIBACC = syscall.Errno(0x72) + ELIBBAD = syscall.Errno(0x70) + ELIBEXEC = syscall.Errno(0x6e) + ELIBMAX = syscall.Errno(0x7b) + ELIBSCN = syscall.Errno(0x7c) + ELNRNG = syscall.Errno(0x62) + ELOOP = syscall.Errno(0x3e) + EMEDIUMTYPE = syscall.Errno(0x7e) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x57) + ENAMETOOLONG = syscall.Errno(0x3f) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENOANO = syscall.Errno(0x69) + ENOBUFS = syscall.Errno(0x37) + ENOCSI = syscall.Errno(0x64) + ENODATA = syscall.Errno(0x6f) + ENOKEY = syscall.Errno(0x80) + ENOLCK = syscall.Errno(0x4f) + ENOLINK = syscall.Errno(0x52) + ENOMEDIUM = syscall.Errno(0x7d) + ENOMSG = syscall.Errno(0x4b) + ENONET = syscall.Errno(0x50) + ENOPKG = syscall.Errno(0x71) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSR = syscall.Errno(0x4a) + ENOSTR = syscall.Errno(0x48) + ENOSYS = syscall.Errno(0x5a) + ENOTCONN = syscall.Errno(0x39) + ENOTEMPTY = syscall.Errno(0x42) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x85) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTUNIQ = syscall.Errno(0x73) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x5c) + EOWNERDEAD = syscall.Errno(0x84) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPROCLIM = syscall.Errno(0x43) + EPROTO = syscall.Errno(0x56) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + EREMCHG = syscall.Errno(0x59) + EREMOTE = syscall.Errno(0x47) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x74) + ERFKILL = syscall.Errno(0x86) + ERREMOTE = syscall.Errno(0x51) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESRMNT = syscall.Errno(0x54) + ESTALE = syscall.Errno(0x46) + ESTRPIPE = syscall.Errno(0x5b) + ETIME = syscall.Errno(0x49) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x63) + EUSERS = syscall.Errno(0x44) + EXFULL = syscall.Errno(0x68) +) + +// Signals +const ( + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGIO = syscall.Signal(0x17) + SIGLOST = syscall.Signal(0x1d) + SIGPOLL = syscall.Signal(0x17) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1d) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "ENOTSUP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "cannot assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "transport endpoint is already connected"}, + {57, "ENOTCONN", "transport endpoint is not connected"}, + {58, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {59, "ETOOMANYREFS", "too many references: cannot splice"}, + {60, "ETIMEDOUT", "connection timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disk quota exceeded"}, + {70, "ESTALE", "stale file handle"}, + {71, "EREMOTE", "object is remote"}, + {72, "ENOSTR", "device not a stream"}, + {73, "ETIME", "timer expired"}, + {74, "ENOSR", "out of streams resources"}, + {75, "ENOMSG", "no message of desired type"}, + {76, "EBADMSG", "bad message"}, + {77, "EIDRM", "identifier removed"}, + {78, "EDEADLK", "resource deadlock avoided"}, + {79, "ENOLCK", "no locks available"}, + {80, "ENONET", "machine is not on the network"}, + {81, "ERREMOTE", "unknown error 81"}, + {82, "ENOLINK", "link has been severed"}, + {83, "EADV", "advertise error"}, + {84, "ESRMNT", "srmount error"}, + {85, "ECOMM", "communication error on send"}, + {86, "EPROTO", "protocol error"}, + {87, "EMULTIHOP", "multihop attempted"}, + {88, "EDOTDOT", "RFS specific error"}, + {89, "EREMCHG", "remote address changed"}, + {90, "ENOSYS", "function not implemented"}, + {91, "ESTRPIPE", "streams pipe error"}, + {92, "EOVERFLOW", "value too large for defined data type"}, + {93, "EBADFD", "file descriptor in bad state"}, + {94, "ECHRNG", "channel number out of range"}, + {95, "EL2NSYNC", "level 2 not synchronized"}, + {96, "EL3HLT", "level 3 halted"}, + {97, "EL3RST", "level 3 reset"}, + {98, "ELNRNG", "link number out of range"}, + {99, "EUNATCH", "protocol driver not attached"}, + {100, "ENOCSI", "no CSI structure available"}, + {101, "EL2HLT", "level 2 halted"}, + {102, "EBADE", "invalid exchange"}, + {103, "EBADR", "invalid request descriptor"}, + {104, "EXFULL", "exchange full"}, + {105, "ENOANO", "no anode"}, + {106, "EBADRQC", "invalid request code"}, + {107, "EBADSLT", "invalid slot"}, + {108, "EDEADLOCK", "file locking deadlock error"}, + {109, "EBFONT", "bad font file format"}, + {110, "ELIBEXEC", "cannot exec a shared library directly"}, + {111, "ENODATA", "no data available"}, + {112, "ELIBBAD", "accessing a corrupted shared library"}, + {113, "ENOPKG", "package not installed"}, + {114, "ELIBACC", "can not access a needed shared library"}, + {115, "ENOTUNIQ", "name not unique on network"}, + {116, "ERESTART", "interrupted system call should be restarted"}, + {117, "EUCLEAN", "structure needs cleaning"}, + {118, "ENOTNAM", "not a XENIX named type file"}, + {119, "ENAVAIL", "no XENIX semaphores available"}, + {120, "EISNAM", "is a named type file"}, + {121, "EREMOTEIO", "remote I/O error"}, + {122, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {123, "ELIBMAX", "attempting to link in too many shared libraries"}, + {124, "ELIBSCN", ".lib section in a.out corrupted"}, + {125, "ENOMEDIUM", "no medium found"}, + {126, "EMEDIUMTYPE", "wrong medium type"}, + {127, "ECANCELED", "operation canceled"}, + {128, "ENOKEY", "required key not available"}, + {129, "EKEYEXPIRED", "key has expired"}, + {130, "EKEYREVOKED", "key has been revoked"}, + {131, "EKEYREJECTED", "key was rejected by service"}, + {132, "EOWNERDEAD", "owner died"}, + {133, "ENOTRECOVERABLE", "state not recoverable"}, + {134, "ERFKILL", "operation not possible due to RF-kill"}, + {135, "EHWPOISON", "memory page has hardware error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "stopped (signal)"}, + {18, "SIGTSTP", "stopped"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "CPU time limit exceeded"}, + {25, "SIGXFSZ", "file size limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window changed"}, + {29, "SIGLOST", "power failure"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go new file mode 100644 index 0000000..72f7420 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go @@ -0,0 +1,1780 @@ +// mkerrors.sh -m32 +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build 386 && netbsd +// +build 386,netbsd + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -m32 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x1c + AF_BLUETOOTH = 0x1f + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x20 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x23 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OROUTE = 0x11 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x22 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ARCNET = 0x7 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_STRIP = 0x17 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427d + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0084277 + BIOCGETIF = 0x4090426b + BIOCGFEEDBACK = 0x4004427c + BIOCGHDRCMPLT = 0x40044274 + BIOCGRTIMEOUT = 0x400c427b + BIOCGSEESENT = 0x40044278 + BIOCGSTATS = 0x4080426f + BIOCGSTATSOLD = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044276 + BIOCSETF = 0x80084267 + BIOCSETIF = 0x8090426c + BIOCSFEEDBACK = 0x8004427d + BIOCSHDRCMPLT = 0x80044275 + BIOCSRTIMEOUT = 0x800c427a + BIOCSSEESENT = 0x80044279 + BIOCSTCPF = 0x80084272 + BIOCSUDPF = 0x80084273 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALIGNMENT32 = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DFLTBUFSIZE = 0x100000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x1000000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLONE_CSIGNAL = 0xff + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_PID = 0x1000 + CLONE_PTRACE = 0x2000 + CLONE_SIGHAND = 0x800 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CPUSTATES = 0x5 + CP_IDLE = 0x4 + CP_INTR = 0x3 + CP_NICE = 0x1 + CP_SYS = 0x2 + CP_USER = 0x0 + CREAD = 0x800 + CRTSCTS = 0x10000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + CTL_QUERY = -0x2 + DIOCBSFLUSH = 0x20006478 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HDLC = 0x10 + DLT_HHDLC = 0x79 + DLT_HIPPI = 0xf + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RAWAF_MASK = 0x2240000 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMUL_LINUX = 0x1 + EMUL_LINUX32 = 0x5 + EMUL_MAXID = 0x6 + EN_SW_CTL_INF = 0x1000 + EN_SW_CTL_PREC = 0x300 + EN_SW_CTL_ROUND = 0xc00 + EN_SW_DATACHAIN = 0x80 + EN_SW_DENORM = 0x2 + EN_SW_INVOP = 0x1 + EN_SW_OVERFLOW = 0x8 + EN_SW_PRECLOSS = 0x20 + EN_SW_UNDERFLOW = 0x10 + EN_SW_ZERODIV = 0x4 + ETHERCAP_JUMBO_MTU = 0x4 + ETHERCAP_VLAN_HWTAGGING = 0x2 + ETHERCAP_VLAN_MTU = 0x1 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERMTU_JUMBO = 0x2328 + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOWPROTOCOLS = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_LEN = 0x5ee + ETHER_MAX_LEN_JUMBO = 0x233a + ETHER_MIN_LEN = 0x40 + ETHER_PPPOE_ENCAP_LEN = 0x8 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = 0x2 + EVFILT_PROC = 0x4 + EVFILT_READ = 0x0 + EVFILT_SIGNAL = 0x5 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = 0x6 + EVFILT_VNODE = 0x3 + EVFILT_WRITE = 0x1 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_CMD_START = 0x1 + EXTATTR_CMD_STOP = 0x2 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x100 + FLUSHO = 0x800000 + F_CLOSEM = 0xa + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xc + F_FSCTL = -0x80000000 + F_FSDIRMASK = 0x70000000 + F_FSIN = 0x10000000 + F_FSINOUT = 0x30000000 + F_FSOUT = 0x20000000 + F_FSPRIV = 0x8000 + F_FSVOID = 0x40000000 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETNOSIGPIPE = 0xd + F_GETOWN = 0x5 + F_MAXFD = 0xb + F_OK = 0x0 + F_PARAM_MASK = 0xfff + F_PARAM_MAX = 0xfff + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETNOSIGPIPE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8f52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IPV6_ICMP = 0x3a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MOBILE = 0x37 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_VRRP = 0x70 + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_EF = 0x8000 + IP_ERRORMTU = 0x15 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x16 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINFRAGSIZE = 0x45 + IP_MINTTL = 0x18 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x17 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ALIGNMENT_16MB = 0x18000000 + MAP_ALIGNMENT_1TB = 0x28000000 + MAP_ALIGNMENT_256TB = 0x30000000 + MAP_ALIGNMENT_4GB = 0x20000000 + MAP_ALIGNMENT_64KB = 0x10000000 + MAP_ALIGNMENT_64PB = 0x38000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_DEFAULT = 0x1 + MAP_INHERIT_DONATE_COPY = 0x3 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_STACK = 0x2000 + MAP_TRYFIXED = 0x400 + MAP_WIRED = 0x800 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_BASIC_FLAGS = 0xe782807f + MNT_DEFEXPORTED = 0x200 + MNT_DISCARD = 0x800000 + MNT_EXKERB = 0x800 + MNT_EXNORESPORT = 0x8000000 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXPUBLIC = 0x10000000 + MNT_EXRDONLY = 0x80 + MNT_EXTATTR = 0x1000000 + MNT_FORCE = 0x80000 + MNT_GETARGS = 0x400000 + MNT_IGNORE = 0x100000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_LOG = 0x2000000 + MNT_NOATIME = 0x4000000 + MNT_NOCOREDUMP = 0x8000 + MNT_NODEV = 0x10 + MNT_NODEVMTIME = 0x40000000 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOWAIT = 0x2 + MNT_OP_FLAGS = 0x4d0000 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELATIME = 0x20000 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SOFTDEP = 0x80000000 + MNT_SYMPERM = 0x20000000 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0xff90ffff + MNT_WAIT = 0x1 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CONTROLMBUF = 0x2000000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_IOVUSRSPACE = 0x4000000 + MSG_LENUSRSPACE = 0x8000000 + MSG_MCAST = 0x200 + MSG_NAMEMBUF = 0x1000000 + MSG_NBIO = 0x1000 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_USERFLAGS = 0xffffff + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x4 + NAME_MAX = 0x1ff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x5 + NET_RT_MAXID = 0x6 + NET_RT_OIFLIST = 0x4 + NET_RT_OOIFLIST = 0x3 + NFDBITS = 0x20 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFIOGETBMAP = 0xc004667a + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALT_IO = 0x40000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x400000 + O_CREAT = 0x200 + O_DIRECT = 0x80000 + O_DIRECTORY = 0x200000 + O_DSYNC = 0x10000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_NOSIGPIPE = 0x1000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x20000 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PRI_IOFLUSH = 0x7c + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x9 + RTAX_NETMASK = 0x2 + RTAX_TAG = 0x8 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTA_TAG = 0x100 + RTF_ANNOUNCE = 0x20000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x2000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_REJECT = 0x8 + RTF_SRC = 0x10000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_CHGADDR = 0x15 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x11 + RTM_IFANNOUNCE = 0x10 + RTM_IFINFO = 0x14 + RTM_LLINFO_UPD = 0x13 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OIFINFO = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_OOIFINFO = 0xe + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_SETGATE = 0x12 + RTM_VERSION = 0x4 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x4 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x8 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80906931 + SIOCADDRT = 0x8030720a + SIOCAIFADDR = 0x8040691a + SIOCALIFADDR = 0x8118691c + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80906932 + SIOCDELRT = 0x8030720b + SIOCDIFADDR = 0x80906919 + SIOCDIFPHYADDR = 0x80906949 + SIOCDLIFADDR = 0x8118691e + SIOCGDRVSPEC = 0xc01c697b + SIOCGETPFSYNC = 0xc09069f8 + SIOCGETSGCNT = 0xc0147534 + SIOCGETVIFCNT = 0xc0147533 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0906921 + SIOCGIFADDRPREF = 0xc0946920 + SIOCGIFALIAS = 0xc040691b + SIOCGIFBRDADDR = 0xc0906923 + SIOCGIFCAP = 0xc0206976 + SIOCGIFCONF = 0xc0086926 + SIOCGIFDATA = 0xc0946985 + SIOCGIFDLT = 0xc0906977 + SIOCGIFDSTADDR = 0xc0906922 + SIOCGIFFLAGS = 0xc0906911 + SIOCGIFGENERIC = 0xc090693a + SIOCGIFMEDIA = 0xc0286936 + SIOCGIFMETRIC = 0xc0906917 + SIOCGIFMTU = 0xc090697e + SIOCGIFNETMASK = 0xc0906925 + SIOCGIFPDSTADDR = 0xc0906948 + SIOCGIFPSRCADDR = 0xc0906947 + SIOCGLIFADDR = 0xc118691d + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLINKSTR = 0xc01c6987 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGVH = 0xc0906983 + SIOCIFCREATE = 0x8090697a + SIOCIFDESTROY = 0x80906979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCINITIFADDR = 0xc0446984 + SIOCSDRVSPEC = 0x801c697b + SIOCSETPFSYNC = 0x809069f7 + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8090690c + SIOCSIFADDRPREF = 0x8094691f + SIOCSIFBRDADDR = 0x80906913 + SIOCSIFCAP = 0x80206975 + SIOCSIFDSTADDR = 0x8090690e + SIOCSIFFLAGS = 0x80906910 + SIOCSIFGENERIC = 0x80906939 + SIOCSIFMEDIA = 0xc0906935 + SIOCSIFMETRIC = 0x80906918 + SIOCSIFMTU = 0x8090697f + SIOCSIFNETMASK = 0x80906916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLINKSTR = 0x801c6988 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSVH = 0xc0906982 + SIOCZIFDATA = 0xc0946986 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_FLAGS_MASK = 0xf0000000 + SOCK_NONBLOCK = 0x20000000 + SOCK_NOSIGPIPE = 0x40000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NOHEADER = 0x100a + SO_NOSIGPIPE = 0x800 + SO_OOBINLINE = 0x100 + SO_OVERFLOWED = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x100c + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x100b + SO_TIMESTAMP = 0x2000 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SYSCTL_VERSION = 0x1000000 + SYSCTL_VERS_0 = 0x0 + SYSCTL_VERS_1 = 0x1000000 + SYSCTL_VERS_MASK = 0xff000000 + S_ARCH1 = 0x10000 + S_ARCH2 = 0x20000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + S_LOGIN_SET = 0x1 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONGCTL = 0x20 + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x3 + TCP_KEEPINIT = 0x7 + TCP_KEEPINTVL = 0x5 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x400c7458 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CDTRCTS = 0x10 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGLINED = 0x40207442 + TIOCGPGRP = 0x40047477 + TIOCGQSIZE = 0x40047481 + TIOCGRANTPT = 0x20007447 + TIOCGSID = 0x40047463 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMGET = 0x40287446 + TIOCPTSNAME = 0x40287448 + TIOCRCVFRAME = 0x80047445 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x2000745f + TIOCSLINED = 0x80207443 + TIOCSPGRP = 0x80047476 + TIOCSQSIZE = 0x80047480 + TIOCSSIZE = 0x80087467 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TIOCXMTFRAME = 0x80047444 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALL = 0x8 + WALLSIG = 0x8 + WALTSIG = 0x4 + WCLONE = 0x4 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WNOWAIT = 0x10000 + WNOZOMBIE = 0x20000 + WOPTSCHECKED = 0x40000 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x58) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x57) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x55) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5e) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x59) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x5a) + ENOSTR = syscall.Errno(0x5b) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x56) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x60) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x5c) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x20) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large or too small"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol option not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "connection timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disc quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC prog. not avail"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIDRM", "identifier removed"}, + {83, "ENOMSG", "no message of desired type"}, + {84, "EOVERFLOW", "value too large to be stored in data type"}, + {85, "EILSEQ", "illegal byte sequence"}, + {86, "ENOTSUP", "not supported"}, + {87, "ECANCELED", "operation Canceled"}, + {88, "EBADMSG", "bad or Corrupt message"}, + {89, "ENODATA", "no message available"}, + {90, "ENOSR", "no STREAM resources"}, + {91, "ENOSTR", "not a STREAM"}, + {92, "ETIME", "STREAM ioctl timeout"}, + {93, "ENOATTR", "attribute not found"}, + {94, "EMULTIHOP", "multihop attempted"}, + {95, "ENOLINK", "link has been severed"}, + {96, "ELAST", "protocol error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGIOT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "stopped (signal)"}, + {18, "SIGTSTP", "stopped"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGPWR", "power fail/restart"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go new file mode 100644 index 0000000..8d4eb0c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go @@ -0,0 +1,1770 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build amd64 && netbsd +// +build amd64,netbsd + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x1c + AF_BLUETOOTH = 0x1f + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x20 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x23 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OROUTE = 0x11 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x22 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ARCNET = 0x7 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_STRIP = 0x17 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427d + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0104277 + BIOCGETIF = 0x4090426b + BIOCGFEEDBACK = 0x4004427c + BIOCGHDRCMPLT = 0x40044274 + BIOCGRTIMEOUT = 0x4010427b + BIOCGSEESENT = 0x40044278 + BIOCGSTATS = 0x4080426f + BIOCGSTATSOLD = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044276 + BIOCSETF = 0x80104267 + BIOCSETIF = 0x8090426c + BIOCSFEEDBACK = 0x8004427d + BIOCSHDRCMPLT = 0x80044275 + BIOCSRTIMEOUT = 0x8010427a + BIOCSSEESENT = 0x80044279 + BIOCSTCPF = 0x80104272 + BIOCSUDPF = 0x80104273 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x8 + BPF_ALIGNMENT32 = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DFLTBUFSIZE = 0x100000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x1000000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLONE_CSIGNAL = 0xff + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_PID = 0x1000 + CLONE_PTRACE = 0x2000 + CLONE_SIGHAND = 0x800 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CPUSTATES = 0x5 + CP_IDLE = 0x4 + CP_INTR = 0x3 + CP_NICE = 0x1 + CP_SYS = 0x2 + CP_USER = 0x0 + CREAD = 0x800 + CRTSCTS = 0x10000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + CTL_QUERY = -0x2 + DIOCBSFLUSH = 0x20006478 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HDLC = 0x10 + DLT_HHDLC = 0x79 + DLT_HIPPI = 0xf + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RAWAF_MASK = 0x2240000 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMUL_LINUX = 0x1 + EMUL_LINUX32 = 0x5 + EMUL_MAXID = 0x6 + ETHERCAP_JUMBO_MTU = 0x4 + ETHERCAP_VLAN_HWTAGGING = 0x2 + ETHERCAP_VLAN_MTU = 0x1 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERMTU_JUMBO = 0x2328 + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOWPROTOCOLS = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_LEN = 0x5ee + ETHER_MAX_LEN_JUMBO = 0x233a + ETHER_MIN_LEN = 0x40 + ETHER_PPPOE_ENCAP_LEN = 0x8 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = 0x2 + EVFILT_PROC = 0x4 + EVFILT_READ = 0x0 + EVFILT_SIGNAL = 0x5 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = 0x6 + EVFILT_VNODE = 0x3 + EVFILT_WRITE = 0x1 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_CMD_START = 0x1 + EXTATTR_CMD_STOP = 0x2 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x100 + FLUSHO = 0x800000 + F_CLOSEM = 0xa + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xc + F_FSCTL = -0x80000000 + F_FSDIRMASK = 0x70000000 + F_FSIN = 0x10000000 + F_FSINOUT = 0x30000000 + F_FSOUT = 0x20000000 + F_FSPRIV = 0x8000 + F_FSVOID = 0x40000000 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETNOSIGPIPE = 0xd + F_GETOWN = 0x5 + F_MAXFD = 0xb + F_OK = 0x0 + F_PARAM_MASK = 0xfff + F_PARAM_MAX = 0xfff + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETNOSIGPIPE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8f52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IPV6_ICMP = 0x3a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MOBILE = 0x37 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_VRRP = 0x70 + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_EF = 0x8000 + IP_ERRORMTU = 0x15 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x16 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINFRAGSIZE = 0x45 + IP_MINTTL = 0x18 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x17 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ALIGNMENT_16MB = 0x18000000 + MAP_ALIGNMENT_1TB = 0x28000000 + MAP_ALIGNMENT_256TB = 0x30000000 + MAP_ALIGNMENT_4GB = 0x20000000 + MAP_ALIGNMENT_64KB = 0x10000000 + MAP_ALIGNMENT_64PB = 0x38000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_DEFAULT = 0x1 + MAP_INHERIT_DONATE_COPY = 0x3 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_STACK = 0x2000 + MAP_TRYFIXED = 0x400 + MAP_WIRED = 0x800 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_BASIC_FLAGS = 0xe782807f + MNT_DEFEXPORTED = 0x200 + MNT_DISCARD = 0x800000 + MNT_EXKERB = 0x800 + MNT_EXNORESPORT = 0x8000000 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXPUBLIC = 0x10000000 + MNT_EXRDONLY = 0x80 + MNT_EXTATTR = 0x1000000 + MNT_FORCE = 0x80000 + MNT_GETARGS = 0x400000 + MNT_IGNORE = 0x100000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_LOG = 0x2000000 + MNT_NOATIME = 0x4000000 + MNT_NOCOREDUMP = 0x8000 + MNT_NODEV = 0x10 + MNT_NODEVMTIME = 0x40000000 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOWAIT = 0x2 + MNT_OP_FLAGS = 0x4d0000 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELATIME = 0x20000 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SOFTDEP = 0x80000000 + MNT_SYMPERM = 0x20000000 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0xff90ffff + MNT_WAIT = 0x1 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CONTROLMBUF = 0x2000000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_IOVUSRSPACE = 0x4000000 + MSG_LENUSRSPACE = 0x8000000 + MSG_MCAST = 0x200 + MSG_NAMEMBUF = 0x1000000 + MSG_NBIO = 0x1000 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_USERFLAGS = 0xffffff + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x4 + NAME_MAX = 0x1ff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x5 + NET_RT_MAXID = 0x6 + NET_RT_OIFLIST = 0x4 + NET_RT_OOIFLIST = 0x3 + NFDBITS = 0x20 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFIOGETBMAP = 0xc004667a + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALT_IO = 0x40000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x400000 + O_CREAT = 0x200 + O_DIRECT = 0x80000 + O_DIRECTORY = 0x200000 + O_DSYNC = 0x10000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_NOSIGPIPE = 0x1000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x20000 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PRI_IOFLUSH = 0x7c + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x9 + RTAX_NETMASK = 0x2 + RTAX_TAG = 0x8 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTA_TAG = 0x100 + RTF_ANNOUNCE = 0x20000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x2000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_REJECT = 0x8 + RTF_SRC = 0x10000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_CHGADDR = 0x15 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x11 + RTM_IFANNOUNCE = 0x10 + RTM_IFINFO = 0x14 + RTM_LLINFO_UPD = 0x13 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OIFINFO = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_OOIFINFO = 0xe + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_SETGATE = 0x12 + RTM_VERSION = 0x4 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x4 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x8 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80906931 + SIOCADDRT = 0x8038720a + SIOCAIFADDR = 0x8040691a + SIOCALIFADDR = 0x8118691c + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80906932 + SIOCDELRT = 0x8038720b + SIOCDIFADDR = 0x80906919 + SIOCDIFPHYADDR = 0x80906949 + SIOCDLIFADDR = 0x8118691e + SIOCGDRVSPEC = 0xc028697b + SIOCGETPFSYNC = 0xc09069f8 + SIOCGETSGCNT = 0xc0207534 + SIOCGETVIFCNT = 0xc0287533 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0906921 + SIOCGIFADDRPREF = 0xc0986920 + SIOCGIFALIAS = 0xc040691b + SIOCGIFBRDADDR = 0xc0906923 + SIOCGIFCAP = 0xc0206976 + SIOCGIFCONF = 0xc0106926 + SIOCGIFDATA = 0xc0986985 + SIOCGIFDLT = 0xc0906977 + SIOCGIFDSTADDR = 0xc0906922 + SIOCGIFFLAGS = 0xc0906911 + SIOCGIFGENERIC = 0xc090693a + SIOCGIFMEDIA = 0xc0306936 + SIOCGIFMETRIC = 0xc0906917 + SIOCGIFMTU = 0xc090697e + SIOCGIFNETMASK = 0xc0906925 + SIOCGIFPDSTADDR = 0xc0906948 + SIOCGIFPSRCADDR = 0xc0906947 + SIOCGLIFADDR = 0xc118691d + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLINKSTR = 0xc0286987 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGVH = 0xc0906983 + SIOCIFCREATE = 0x8090697a + SIOCIFDESTROY = 0x80906979 + SIOCIFGCLONERS = 0xc0106978 + SIOCINITIFADDR = 0xc0706984 + SIOCSDRVSPEC = 0x8028697b + SIOCSETPFSYNC = 0x809069f7 + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8090690c + SIOCSIFADDRPREF = 0x8098691f + SIOCSIFBRDADDR = 0x80906913 + SIOCSIFCAP = 0x80206975 + SIOCSIFDSTADDR = 0x8090690e + SIOCSIFFLAGS = 0x80906910 + SIOCSIFGENERIC = 0x80906939 + SIOCSIFMEDIA = 0xc0906935 + SIOCSIFMETRIC = 0x80906918 + SIOCSIFMTU = 0x8090697f + SIOCSIFNETMASK = 0x80906916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLINKSTR = 0x80286988 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSVH = 0xc0906982 + SIOCZIFDATA = 0xc0986986 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_FLAGS_MASK = 0xf0000000 + SOCK_NONBLOCK = 0x20000000 + SOCK_NOSIGPIPE = 0x40000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NOHEADER = 0x100a + SO_NOSIGPIPE = 0x800 + SO_OOBINLINE = 0x100 + SO_OVERFLOWED = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x100c + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x100b + SO_TIMESTAMP = 0x2000 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SYSCTL_VERSION = 0x1000000 + SYSCTL_VERS_0 = 0x0 + SYSCTL_VERS_1 = 0x1000000 + SYSCTL_VERS_MASK = 0xff000000 + S_ARCH1 = 0x10000 + S_ARCH2 = 0x20000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + S_LOGIN_SET = 0x1 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONGCTL = 0x20 + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x3 + TCP_KEEPINIT = 0x7 + TCP_KEEPINTVL = 0x5 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CDTRCTS = 0x10 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGLINED = 0x40207442 + TIOCGPGRP = 0x40047477 + TIOCGQSIZE = 0x40047481 + TIOCGRANTPT = 0x20007447 + TIOCGSID = 0x40047463 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMGET = 0x40287446 + TIOCPTSNAME = 0x40287448 + TIOCRCVFRAME = 0x80087445 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x2000745f + TIOCSLINED = 0x80207443 + TIOCSPGRP = 0x80047476 + TIOCSQSIZE = 0x80047480 + TIOCSSIZE = 0x80087467 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TIOCXMTFRAME = 0x80087444 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALL = 0x8 + WALLSIG = 0x8 + WALTSIG = 0x4 + WCLONE = 0x4 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WNOWAIT = 0x10000 + WNOZOMBIE = 0x20000 + WOPTSCHECKED = 0x40000 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x58) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x57) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x55) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5e) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x59) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x5a) + ENOSTR = syscall.Errno(0x5b) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x56) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x60) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x5c) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x20) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large or too small"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol option not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "connection timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disc quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC prog. not avail"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIDRM", "identifier removed"}, + {83, "ENOMSG", "no message of desired type"}, + {84, "EOVERFLOW", "value too large to be stored in data type"}, + {85, "EILSEQ", "illegal byte sequence"}, + {86, "ENOTSUP", "not supported"}, + {87, "ECANCELED", "operation Canceled"}, + {88, "EBADMSG", "bad or Corrupt message"}, + {89, "ENODATA", "no message available"}, + {90, "ENOSR", "no STREAM resources"}, + {91, "ENOSTR", "not a STREAM"}, + {92, "ETIME", "STREAM ioctl timeout"}, + {93, "ENOATTR", "attribute not found"}, + {94, "EMULTIHOP", "multihop attempted"}, + {95, "ENOLINK", "link has been severed"}, + {96, "ELAST", "protocol error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGIOT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "stopped (signal)"}, + {18, "SIGTSTP", "stopped"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGPWR", "power fail/restart"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go new file mode 100644 index 0000000..9eef974 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go @@ -0,0 +1,1759 @@ +// mkerrors.sh -marm +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm && netbsd +// +build arm,netbsd + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -marm _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x1c + AF_BLUETOOTH = 0x1f + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x20 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x23 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OROUTE = 0x11 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x22 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ARCNET = 0x7 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_STRIP = 0x17 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427d + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0084277 + BIOCGETIF = 0x4090426b + BIOCGFEEDBACK = 0x4004427c + BIOCGHDRCMPLT = 0x40044274 + BIOCGRTIMEOUT = 0x400c427b + BIOCGSEESENT = 0x40044278 + BIOCGSTATS = 0x4080426f + BIOCGSTATSOLD = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044276 + BIOCSETF = 0x80084267 + BIOCSETIF = 0x8090426c + BIOCSFEEDBACK = 0x8004427d + BIOCSHDRCMPLT = 0x80044275 + BIOCSRTIMEOUT = 0x800c427a + BIOCSSEESENT = 0x80044279 + BIOCSTCPF = 0x80084272 + BIOCSUDPF = 0x80084273 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALIGNMENT32 = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DFLTBUFSIZE = 0x100000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x1000000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CPUSTATES = 0x5 + CP_IDLE = 0x4 + CP_INTR = 0x3 + CP_NICE = 0x1 + CP_SYS = 0x2 + CP_USER = 0x0 + CREAD = 0x800 + CRTSCTS = 0x10000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + CTL_QUERY = -0x2 + DIOCBSFLUSH = 0x20006478 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HDLC = 0x10 + DLT_HHDLC = 0x79 + DLT_HIPPI = 0xf + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RAWAF_MASK = 0x2240000 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMUL_LINUX = 0x1 + EMUL_LINUX32 = 0x5 + EMUL_MAXID = 0x6 + ETHERCAP_JUMBO_MTU = 0x4 + ETHERCAP_VLAN_HWTAGGING = 0x2 + ETHERCAP_VLAN_MTU = 0x1 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERMTU_JUMBO = 0x2328 + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOWPROTOCOLS = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_LEN = 0x5ee + ETHER_MAX_LEN_JUMBO = 0x233a + ETHER_MIN_LEN = 0x40 + ETHER_PPPOE_ENCAP_LEN = 0x8 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = 0x2 + EVFILT_PROC = 0x4 + EVFILT_READ = 0x0 + EVFILT_SIGNAL = 0x5 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = 0x6 + EVFILT_VNODE = 0x3 + EVFILT_WRITE = 0x1 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_CMD_START = 0x1 + EXTATTR_CMD_STOP = 0x2 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x100 + FLUSHO = 0x800000 + F_CLOSEM = 0xa + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xc + F_FSCTL = -0x80000000 + F_FSDIRMASK = 0x70000000 + F_FSIN = 0x10000000 + F_FSINOUT = 0x30000000 + F_FSOUT = 0x20000000 + F_FSPRIV = 0x8000 + F_FSVOID = 0x40000000 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETNOSIGPIPE = 0xd + F_GETOWN = 0x5 + F_MAXFD = 0xb + F_OK = 0x0 + F_PARAM_MASK = 0xfff + F_PARAM_MAX = 0xfff + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETNOSIGPIPE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8f52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IPV6_ICMP = 0x3a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MOBILE = 0x37 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_VRRP = 0x70 + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_EF = 0x8000 + IP_ERRORMTU = 0x15 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x16 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINFRAGSIZE = 0x45 + IP_MINTTL = 0x18 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x17 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ALIGNMENT_16MB = 0x18000000 + MAP_ALIGNMENT_1TB = 0x28000000 + MAP_ALIGNMENT_256TB = 0x30000000 + MAP_ALIGNMENT_4GB = 0x20000000 + MAP_ALIGNMENT_64KB = 0x10000000 + MAP_ALIGNMENT_64PB = 0x38000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_DEFAULT = 0x1 + MAP_INHERIT_DONATE_COPY = 0x3 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_STACK = 0x2000 + MAP_TRYFIXED = 0x400 + MAP_WIRED = 0x800 + MNT_ASYNC = 0x40 + MNT_BASIC_FLAGS = 0xe782807f + MNT_DEFEXPORTED = 0x200 + MNT_DISCARD = 0x800000 + MNT_EXKERB = 0x800 + MNT_EXNORESPORT = 0x8000000 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXPUBLIC = 0x10000000 + MNT_EXRDONLY = 0x80 + MNT_EXTATTR = 0x1000000 + MNT_FORCE = 0x80000 + MNT_GETARGS = 0x400000 + MNT_IGNORE = 0x100000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_LOG = 0x2000000 + MNT_NOATIME = 0x4000000 + MNT_NOCOREDUMP = 0x8000 + MNT_NODEV = 0x10 + MNT_NODEVMTIME = 0x40000000 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOWAIT = 0x2 + MNT_OP_FLAGS = 0x4d0000 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELATIME = 0x20000 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SOFTDEP = 0x80000000 + MNT_SYMPERM = 0x20000000 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0xff90ffff + MNT_WAIT = 0x1 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CONTROLMBUF = 0x2000000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_IOVUSRSPACE = 0x4000000 + MSG_LENUSRSPACE = 0x8000000 + MSG_MCAST = 0x200 + MSG_NAMEMBUF = 0x1000000 + MSG_NBIO = 0x1000 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_USERFLAGS = 0xffffff + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x4 + NAME_MAX = 0x1ff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x5 + NET_RT_MAXID = 0x6 + NET_RT_OIFLIST = 0x4 + NET_RT_OOIFLIST = 0x3 + NFDBITS = 0x20 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFIOGETBMAP = 0xc004667a + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALT_IO = 0x40000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x400000 + O_CREAT = 0x200 + O_DIRECT = 0x80000 + O_DIRECTORY = 0x200000 + O_DSYNC = 0x10000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_NOSIGPIPE = 0x1000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x20000 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PRI_IOFLUSH = 0x7c + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x9 + RTAX_NETMASK = 0x2 + RTAX_TAG = 0x8 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTA_TAG = 0x100 + RTF_ANNOUNCE = 0x20000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x2000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_REJECT = 0x8 + RTF_SRC = 0x10000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_CHGADDR = 0x15 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x11 + RTM_IFANNOUNCE = 0x10 + RTM_IFINFO = 0x14 + RTM_LLINFO_UPD = 0x13 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OIFINFO = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_OOIFINFO = 0xe + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_SETGATE = 0x12 + RTM_VERSION = 0x4 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x4 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x8 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80906931 + SIOCADDRT = 0x8030720a + SIOCAIFADDR = 0x8040691a + SIOCALIFADDR = 0x8118691c + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80906932 + SIOCDELRT = 0x8030720b + SIOCDIFADDR = 0x80906919 + SIOCDIFPHYADDR = 0x80906949 + SIOCDLIFADDR = 0x8118691e + SIOCGDRVSPEC = 0xc01c697b + SIOCGETPFSYNC = 0xc09069f8 + SIOCGETSGCNT = 0xc0147534 + SIOCGETVIFCNT = 0xc0147533 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0906921 + SIOCGIFADDRPREF = 0xc0946920 + SIOCGIFALIAS = 0xc040691b + SIOCGIFBRDADDR = 0xc0906923 + SIOCGIFCAP = 0xc0206976 + SIOCGIFCONF = 0xc0086926 + SIOCGIFDATA = 0xc0946985 + SIOCGIFDLT = 0xc0906977 + SIOCGIFDSTADDR = 0xc0906922 + SIOCGIFFLAGS = 0xc0906911 + SIOCGIFGENERIC = 0xc090693a + SIOCGIFMEDIA = 0xc0286936 + SIOCGIFMETRIC = 0xc0906917 + SIOCGIFMTU = 0xc090697e + SIOCGIFNETMASK = 0xc0906925 + SIOCGIFPDSTADDR = 0xc0906948 + SIOCGIFPSRCADDR = 0xc0906947 + SIOCGLIFADDR = 0xc118691d + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLINKSTR = 0xc01c6987 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGVH = 0xc0906983 + SIOCIFCREATE = 0x8090697a + SIOCIFDESTROY = 0x80906979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCINITIFADDR = 0xc0446984 + SIOCSDRVSPEC = 0x801c697b + SIOCSETPFSYNC = 0x809069f7 + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8090690c + SIOCSIFADDRPREF = 0x8094691f + SIOCSIFBRDADDR = 0x80906913 + SIOCSIFCAP = 0x80206975 + SIOCSIFDSTADDR = 0x8090690e + SIOCSIFFLAGS = 0x80906910 + SIOCSIFGENERIC = 0x80906939 + SIOCSIFMEDIA = 0xc0906935 + SIOCSIFMETRIC = 0x80906918 + SIOCSIFMTU = 0x8090697f + SIOCSIFNETMASK = 0x80906916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLINKSTR = 0x801c6988 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSVH = 0xc0906982 + SIOCZIFDATA = 0xc0946986 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_FLAGS_MASK = 0xf0000000 + SOCK_NONBLOCK = 0x20000000 + SOCK_NOSIGPIPE = 0x40000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NOHEADER = 0x100a + SO_NOSIGPIPE = 0x800 + SO_OOBINLINE = 0x100 + SO_OVERFLOWED = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x100c + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x100b + SO_TIMESTAMP = 0x2000 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SYSCTL_VERSION = 0x1000000 + SYSCTL_VERS_0 = 0x0 + SYSCTL_VERS_1 = 0x1000000 + SYSCTL_VERS_MASK = 0xff000000 + S_ARCH1 = 0x10000 + S_ARCH2 = 0x20000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONGCTL = 0x20 + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x3 + TCP_KEEPINIT = 0x7 + TCP_KEEPINTVL = 0x5 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x400c7458 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CDTRCTS = 0x10 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGLINED = 0x40207442 + TIOCGPGRP = 0x40047477 + TIOCGQSIZE = 0x40047481 + TIOCGRANTPT = 0x20007447 + TIOCGSID = 0x40047463 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMGET = 0x48087446 + TIOCPTSNAME = 0x48087448 + TIOCRCVFRAME = 0x80047445 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x2000745f + TIOCSLINED = 0x80207443 + TIOCSPGRP = 0x80047476 + TIOCSQSIZE = 0x80047480 + TIOCSSIZE = 0x80087467 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TIOCXMTFRAME = 0x80047444 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALL = 0x8 + WALLSIG = 0x8 + WALTSIG = 0x4 + WCLONE = 0x4 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WNOWAIT = 0x10000 + WNOZOMBIE = 0x20000 + WOPTSCHECKED = 0x40000 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x58) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x57) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x55) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5e) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x59) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x5a) + ENOSTR = syscall.Errno(0x5b) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x56) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x60) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x5c) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x20) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large or too small"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol option not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "connection timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disc quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC prog. not avail"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIDRM", "identifier removed"}, + {83, "ENOMSG", "no message of desired type"}, + {84, "EOVERFLOW", "value too large to be stored in data type"}, + {85, "EILSEQ", "illegal byte sequence"}, + {86, "ENOTSUP", "not supported"}, + {87, "ECANCELED", "operation Canceled"}, + {88, "EBADMSG", "bad or Corrupt message"}, + {89, "ENODATA", "no message available"}, + {90, "ENOSR", "no STREAM resources"}, + {91, "ENOSTR", "not a STREAM"}, + {92, "ETIME", "STREAM ioctl timeout"}, + {93, "ENOATTR", "attribute not found"}, + {94, "EMULTIHOP", "multihop attempted"}, + {95, "ENOLINK", "link has been severed"}, + {96, "ELAST", "protocol error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGIOT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "stopped (signal)"}, + {18, "SIGTSTP", "stopped"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGPWR", "power fail/restart"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go new file mode 100644 index 0000000..3b62ba1 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go @@ -0,0 +1,1770 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm64 && netbsd +// +build arm64,netbsd + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x1c + AF_BLUETOOTH = 0x1f + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x20 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x23 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OROUTE = 0x11 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x22 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ARCNET = 0x7 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_STRIP = 0x17 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427d + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0104277 + BIOCGETIF = 0x4090426b + BIOCGFEEDBACK = 0x4004427c + BIOCGHDRCMPLT = 0x40044274 + BIOCGRTIMEOUT = 0x4010427b + BIOCGSEESENT = 0x40044278 + BIOCGSTATS = 0x4080426f + BIOCGSTATSOLD = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044276 + BIOCSETF = 0x80104267 + BIOCSETIF = 0x8090426c + BIOCSFEEDBACK = 0x8004427d + BIOCSHDRCMPLT = 0x80044275 + BIOCSRTIMEOUT = 0x8010427a + BIOCSSEESENT = 0x80044279 + BIOCSTCPF = 0x80104272 + BIOCSUDPF = 0x80104273 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x8 + BPF_ALIGNMENT32 = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DFLTBUFSIZE = 0x100000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x1000000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLONE_CSIGNAL = 0xff + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_PID = 0x1000 + CLONE_PTRACE = 0x2000 + CLONE_SIGHAND = 0x800 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CPUSTATES = 0x5 + CP_IDLE = 0x4 + CP_INTR = 0x3 + CP_NICE = 0x1 + CP_SYS = 0x2 + CP_USER = 0x0 + CREAD = 0x800 + CRTSCTS = 0x10000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + CTL_QUERY = -0x2 + DIOCBSFLUSH = 0x20006478 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HDLC = 0x10 + DLT_HHDLC = 0x79 + DLT_HIPPI = 0xf + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RAWAF_MASK = 0x2240000 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMUL_LINUX = 0x1 + EMUL_LINUX32 = 0x5 + EMUL_MAXID = 0x6 + ETHERCAP_JUMBO_MTU = 0x4 + ETHERCAP_VLAN_HWTAGGING = 0x2 + ETHERCAP_VLAN_MTU = 0x1 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERMTU_JUMBO = 0x2328 + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOWPROTOCOLS = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_LEN = 0x5ee + ETHER_MAX_LEN_JUMBO = 0x233a + ETHER_MIN_LEN = 0x40 + ETHER_PPPOE_ENCAP_LEN = 0x8 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = 0x2 + EVFILT_PROC = 0x4 + EVFILT_READ = 0x0 + EVFILT_SIGNAL = 0x5 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = 0x6 + EVFILT_VNODE = 0x3 + EVFILT_WRITE = 0x1 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_CMD_START = 0x1 + EXTATTR_CMD_STOP = 0x2 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x100 + FLUSHO = 0x800000 + F_CLOSEM = 0xa + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xc + F_FSCTL = -0x80000000 + F_FSDIRMASK = 0x70000000 + F_FSIN = 0x10000000 + F_FSINOUT = 0x30000000 + F_FSOUT = 0x20000000 + F_FSPRIV = 0x8000 + F_FSVOID = 0x40000000 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETNOSIGPIPE = 0xd + F_GETOWN = 0x5 + F_MAXFD = 0xb + F_OK = 0x0 + F_PARAM_MASK = 0xfff + F_PARAM_MAX = 0xfff + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETNOSIGPIPE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8f52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IPV6_ICMP = 0x3a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MOBILE = 0x37 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_VRRP = 0x70 + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_EF = 0x8000 + IP_ERRORMTU = 0x15 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x16 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINFRAGSIZE = 0x45 + IP_MINTTL = 0x18 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x17 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ALIGNMENT_16MB = 0x18000000 + MAP_ALIGNMENT_1TB = 0x28000000 + MAP_ALIGNMENT_256TB = 0x30000000 + MAP_ALIGNMENT_4GB = 0x20000000 + MAP_ALIGNMENT_64KB = 0x10000000 + MAP_ALIGNMENT_64PB = 0x38000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_DEFAULT = 0x1 + MAP_INHERIT_DONATE_COPY = 0x3 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_STACK = 0x2000 + MAP_TRYFIXED = 0x400 + MAP_WIRED = 0x800 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_BASIC_FLAGS = 0xe782807f + MNT_DEFEXPORTED = 0x200 + MNT_DISCARD = 0x800000 + MNT_EXKERB = 0x800 + MNT_EXNORESPORT = 0x8000000 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXPUBLIC = 0x10000000 + MNT_EXRDONLY = 0x80 + MNT_EXTATTR = 0x1000000 + MNT_FORCE = 0x80000 + MNT_GETARGS = 0x400000 + MNT_IGNORE = 0x100000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_LOG = 0x2000000 + MNT_NOATIME = 0x4000000 + MNT_NOCOREDUMP = 0x8000 + MNT_NODEV = 0x10 + MNT_NODEVMTIME = 0x40000000 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOWAIT = 0x2 + MNT_OP_FLAGS = 0x4d0000 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELATIME = 0x20000 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SOFTDEP = 0x80000000 + MNT_SYMPERM = 0x20000000 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0xff90ffff + MNT_WAIT = 0x1 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CONTROLMBUF = 0x2000000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_IOVUSRSPACE = 0x4000000 + MSG_LENUSRSPACE = 0x8000000 + MSG_MCAST = 0x200 + MSG_NAMEMBUF = 0x1000000 + MSG_NBIO = 0x1000 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_USERFLAGS = 0xffffff + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x4 + NAME_MAX = 0x1ff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x5 + NET_RT_MAXID = 0x6 + NET_RT_OIFLIST = 0x4 + NET_RT_OOIFLIST = 0x3 + NFDBITS = 0x20 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFIOGETBMAP = 0xc004667a + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALT_IO = 0x40000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x400000 + O_CREAT = 0x200 + O_DIRECT = 0x80000 + O_DIRECTORY = 0x200000 + O_DSYNC = 0x10000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_NOSIGPIPE = 0x1000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x20000 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PRI_IOFLUSH = 0x7c + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x9 + RTAX_NETMASK = 0x2 + RTAX_TAG = 0x8 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTA_TAG = 0x100 + RTF_ANNOUNCE = 0x20000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x2000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_REJECT = 0x8 + RTF_SRC = 0x10000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_CHGADDR = 0x15 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x11 + RTM_IFANNOUNCE = 0x10 + RTM_IFINFO = 0x14 + RTM_LLINFO_UPD = 0x13 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OIFINFO = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_OOIFINFO = 0xe + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_SETGATE = 0x12 + RTM_VERSION = 0x4 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x4 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x8 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80906931 + SIOCADDRT = 0x8038720a + SIOCAIFADDR = 0x8040691a + SIOCALIFADDR = 0x8118691c + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80906932 + SIOCDELRT = 0x8038720b + SIOCDIFADDR = 0x80906919 + SIOCDIFPHYADDR = 0x80906949 + SIOCDLIFADDR = 0x8118691e + SIOCGDRVSPEC = 0xc028697b + SIOCGETPFSYNC = 0xc09069f8 + SIOCGETSGCNT = 0xc0207534 + SIOCGETVIFCNT = 0xc0287533 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0906921 + SIOCGIFADDRPREF = 0xc0986920 + SIOCGIFALIAS = 0xc040691b + SIOCGIFBRDADDR = 0xc0906923 + SIOCGIFCAP = 0xc0206976 + SIOCGIFCONF = 0xc0106926 + SIOCGIFDATA = 0xc0986985 + SIOCGIFDLT = 0xc0906977 + SIOCGIFDSTADDR = 0xc0906922 + SIOCGIFFLAGS = 0xc0906911 + SIOCGIFGENERIC = 0xc090693a + SIOCGIFMEDIA = 0xc0306936 + SIOCGIFMETRIC = 0xc0906917 + SIOCGIFMTU = 0xc090697e + SIOCGIFNETMASK = 0xc0906925 + SIOCGIFPDSTADDR = 0xc0906948 + SIOCGIFPSRCADDR = 0xc0906947 + SIOCGLIFADDR = 0xc118691d + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLINKSTR = 0xc0286987 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGVH = 0xc0906983 + SIOCIFCREATE = 0x8090697a + SIOCIFDESTROY = 0x80906979 + SIOCIFGCLONERS = 0xc0106978 + SIOCINITIFADDR = 0xc0706984 + SIOCSDRVSPEC = 0x8028697b + SIOCSETPFSYNC = 0x809069f7 + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8090690c + SIOCSIFADDRPREF = 0x8098691f + SIOCSIFBRDADDR = 0x80906913 + SIOCSIFCAP = 0x80206975 + SIOCSIFDSTADDR = 0x8090690e + SIOCSIFFLAGS = 0x80906910 + SIOCSIFGENERIC = 0x80906939 + SIOCSIFMEDIA = 0xc0906935 + SIOCSIFMETRIC = 0x80906918 + SIOCSIFMTU = 0x8090697f + SIOCSIFNETMASK = 0x80906916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLINKSTR = 0x80286988 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSVH = 0xc0906982 + SIOCZIFDATA = 0xc0986986 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_FLAGS_MASK = 0xf0000000 + SOCK_NONBLOCK = 0x20000000 + SOCK_NOSIGPIPE = 0x40000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NOHEADER = 0x100a + SO_NOSIGPIPE = 0x800 + SO_OOBINLINE = 0x100 + SO_OVERFLOWED = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x100c + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x100b + SO_TIMESTAMP = 0x2000 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SYSCTL_VERSION = 0x1000000 + SYSCTL_VERS_0 = 0x0 + SYSCTL_VERS_1 = 0x1000000 + SYSCTL_VERS_MASK = 0xff000000 + S_ARCH1 = 0x10000 + S_ARCH2 = 0x20000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + S_LOGIN_SET = 0x1 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONGCTL = 0x20 + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x3 + TCP_KEEPINIT = 0x7 + TCP_KEEPINTVL = 0x5 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CDTRCTS = 0x10 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGLINED = 0x40207442 + TIOCGPGRP = 0x40047477 + TIOCGQSIZE = 0x40047481 + TIOCGRANTPT = 0x20007447 + TIOCGSID = 0x40047463 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMGET = 0x40287446 + TIOCPTSNAME = 0x40287448 + TIOCRCVFRAME = 0x80087445 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x2000745f + TIOCSLINED = 0x80207443 + TIOCSPGRP = 0x80047476 + TIOCSQSIZE = 0x80047480 + TIOCSSIZE = 0x80087467 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TIOCXMTFRAME = 0x80087444 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALL = 0x8 + WALLSIG = 0x8 + WALTSIG = 0x4 + WCLONE = 0x4 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WNOWAIT = 0x10000 + WNOZOMBIE = 0x20000 + WOPTSCHECKED = 0x40000 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x58) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x57) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x55) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5e) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x59) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x5a) + ENOSTR = syscall.Errno(0x5b) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x56) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x60) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x5c) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x20) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large or too small"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol option not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "connection timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disc quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC prog. not avail"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIDRM", "identifier removed"}, + {83, "ENOMSG", "no message of desired type"}, + {84, "EOVERFLOW", "value too large to be stored in data type"}, + {85, "EILSEQ", "illegal byte sequence"}, + {86, "ENOTSUP", "not supported"}, + {87, "ECANCELED", "operation Canceled"}, + {88, "EBADMSG", "bad or Corrupt message"}, + {89, "ENODATA", "no message available"}, + {90, "ENOSR", "no STREAM resources"}, + {91, "ENOSTR", "not a STREAM"}, + {92, "ETIME", "STREAM ioctl timeout"}, + {93, "ENOATTR", "attribute not found"}, + {94, "EMULTIHOP", "multihop attempted"}, + {95, "ENOLINK", "link has been severed"}, + {96, "ELAST", "protocol error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGIOT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "stopped (signal)"}, + {18, "SIGTSTP", "stopped"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGPWR", "power fail/restart"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go new file mode 100644 index 0000000..6d56edc --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go @@ -0,0 +1,1668 @@ +// mkerrors.sh -m32 +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build 386 && openbsd +// +build 386,openbsd + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -m32 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_BLUETOOTH = 0x20 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_ENCAP = 0x1c + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_KEY = 0x1e + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x24 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SIP = 0x1d + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRFILT = 0x4004427c + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc008427b + BIOCGETIF = 0x4020426b + BIOCGFILDROP = 0x40044278 + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044273 + BIOCGRTIMEOUT = 0x400c426e + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x20004276 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDIRFILT = 0x8004427d + BIOCSDLT = 0x8004427a + BIOCSETF = 0x80084267 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x80084277 + BIOCSFILDROP = 0x80044279 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044272 + BIOCSRTIMEOUT = 0x800c426d + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIRECTION_IN = 0x1 + BPF_DIRECTION_OUT = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x200000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CPUSTATES = 0x6 + CP_IDLE = 0x5 + CP_INTR = 0x4 + CP_NICE = 0x1 + CP_SPIN = 0x3 + CP_SYS = 0x2 + CP_USER = 0x0 + CREAD = 0x800 + CRTSCTS = 0x10000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0xff + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DIOCOSFPFLUSH = 0x2000444e + DLT_ARCNET = 0x7 + DLT_ATM_RFC1483 = 0xb + DLT_AX25 = 0x3 + DLT_CHAOS = 0x5 + DLT_C_HDLC = 0x68 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0xd + DLT_FDDI = 0xa + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_LOOP = 0xc + DLT_MPLS = 0xdb + DLT_NULL = 0x0 + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_SERIAL = 0x32 + DLT_PRONET = 0x4 + DLT_RAW = 0xe + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMT_TAGOVF = 0x1 + EMUL_ENABLED = 0x1 + EMUL_NATIVE = 0x2 + ENDRUNDISC = 0x9 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_AOE = 0x88a2 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LLDP = 0x88cc + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_QINQ = 0x88a8 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOW = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_ALIGN = 0x2 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_DIX_LEN = 0x600 + ETHER_MAX_LEN = 0x5ee + ETHER_MIN_LEN = 0x40 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = -0x3 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = -0x7 + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xa + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETOWN = 0x5 + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8e52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BLUETOOTH = 0xf8 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf7 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DUMMY = 0xf1 + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf3 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFLOW = 0xf9 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf2 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_HOST = 0x1 + IN_RFC3021_NET = 0xfffffffe + IN_RFC3021_NSHIFT = 0x1f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DIVERT = 0x102 + IPPROTO_DIVERT_INIT = 0x2 + IPPROTO_DIVERT_RESP = 0x1 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x103 + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPV6_AUTH_LEVEL = 0x35 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_ESP_NETWORK_LEVEL = 0x37 + IPV6_ESP_TRANS_LEVEL = 0x36 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPCOMP_LEVEL = 0x3c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_OPTIONS = 0x1 + IPV6_PATHMTU = 0x2c + IPV6_PIPEX = 0x3f + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVDSTPORT = 0x40 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTABLE = 0x1021 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_AUTH_LEVEL = 0x14 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DIVERTFL = 0x1022 + IP_DROP_MEMBERSHIP = 0xd + IP_ESP_NETWORK_LEVEL = 0x16 + IP_ESP_TRANS_LEVEL = 0x15 + IP_HDRINCL = 0x2 + IP_IPCOMP_LEVEL = 0x1d + IP_IPSECFLOWINFO = 0x24 + IP_IPSEC_LOCAL_AUTH = 0x1b + IP_IPSEC_LOCAL_CRED = 0x19 + IP_IPSEC_LOCAL_ID = 0x17 + IP_IPSEC_REMOTE_AUTH = 0x1c + IP_IPSEC_REMOTE_CRED = 0x1a + IP_IPSEC_REMOTE_ID = 0x18 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0xfff + IP_MF = 0x2000 + IP_MINTTL = 0x20 + IP_MIN_MEMBERSHIPS = 0xf + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PIPEX = 0x22 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVDSTPORT = 0x21 + IP_RECVIF = 0x1e + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRTABLE = 0x23 + IP_RECVTTL = 0x1f + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RTABLE = 0x1021 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LCNT_OVERLOAD_FLUSH = 0x6 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_CONCEAL = 0x8000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FLAGMASK = 0xfff7 + MAP_HASSEMAPHORE = 0x0 + MAP_INHERIT = 0x0 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_STACK = 0x4000 + MAP_TRYFIXED = 0x0 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_DOOMED = 0x8000000 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_NOATIME = 0x8000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SOFTDEP = 0x4000000 + MNT_SYNCHRONOUS = 0x2 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0x400ffff + MNT_WAIT = 0x1 + MNT_WANTRDWR = 0x2000000 + MNT_WXALLOWED = 0x800 + MSG_BCAST = 0x100 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_MCAST = 0x200 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x4 + MS_SYNC = 0x2 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_MAXID = 0x6 + NET_RT_STATS = 0x4 + NET_RT_TABLE = 0x5 + NFDBITS = 0x20 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EOF = 0x2 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRUNCATE = 0x80 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x80 + ONOCR = 0x40 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x10000 + O_CREAT = 0x200 + O_DIRECTORY = 0x20000 + O_DSYNC = 0x80 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x80 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PF_FLUSH = 0x1 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_MASK = 0x3ff000 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_LABEL = 0xa + RTAX_MAX = 0xb + RTAX_NETMASK = 0x2 + RTAX_SRC = 0x8 + RTAX_SRCMASK = 0x9 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_LABEL = 0x400 + RTA_NETMASK = 0x4 + RTA_SRC = 0x100 + RTA_SRCMASK = 0x200 + RTF_ANNOUNCE = 0x4000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x10000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FMASK = 0x10f808 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_MPATH = 0x40000 + RTF_MPLS = 0x100000 + RTF_PERMANENT_ARP = 0x2000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x2000 + RTF_REJECT = 0x8 + RTF_SOURCE = 0x20000 + RTF_STATIC = 0x800 + RTF_TUNNEL = 0x100000 + RTF_UP = 0x1 + RTF_USETRAILERS = 0x8000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DESYNC = 0x10 + RTM_GET = 0x4 + RTM_IFANNOUNCE = 0xf + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MAXSIZE = 0x800 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RT_TABLEID_MAX = 0xff + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80246987 + SIOCALIFADDR = 0x8218691c + SIOCATMARK = 0x40047307 + SIOCBRDGADD = 0x8054693c + SIOCBRDGADDS = 0x80546941 + SIOCBRDGARL = 0x806e694d + SIOCBRDGDADDR = 0x81286947 + SIOCBRDGDEL = 0x8054693d + SIOCBRDGDELS = 0x80546942 + SIOCBRDGFLUSH = 0x80546948 + SIOCBRDGFRL = 0x806e694e + SIOCBRDGGCACHE = 0xc0146941 + SIOCBRDGGFD = 0xc0146952 + SIOCBRDGGHT = 0xc0146951 + SIOCBRDGGIFFLGS = 0xc054693e + SIOCBRDGGMA = 0xc0146953 + SIOCBRDGGPARAM = 0xc03c6958 + SIOCBRDGGPRI = 0xc0146950 + SIOCBRDGGRL = 0xc028694f + SIOCBRDGGSIFS = 0xc054693c + SIOCBRDGGTO = 0xc0146946 + SIOCBRDGIFS = 0xc0546942 + SIOCBRDGRTS = 0xc0186943 + SIOCBRDGSADDR = 0xc1286944 + SIOCBRDGSCACHE = 0x80146940 + SIOCBRDGSFD = 0x80146952 + SIOCBRDGSHT = 0x80146951 + SIOCBRDGSIFCOST = 0x80546955 + SIOCBRDGSIFFLGS = 0x8054693f + SIOCBRDGSIFPRIO = 0x80546954 + SIOCBRDGSMA = 0x80146953 + SIOCBRDGSPRI = 0x80146950 + SIOCBRDGSPROTO = 0x8014695a + SIOCBRDGSTO = 0x80146945 + SIOCBRDGSTXHC = 0x80146959 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80246989 + SIOCDIFPHYADDR = 0x80206949 + SIOCDLIFADDR = 0x8218691e + SIOCGETKALIVE = 0xc01869a4 + SIOCGETLABEL = 0x8020699a + SIOCGETPFLOW = 0xc02069fe + SIOCGETPFSYNC = 0xc02069f8 + SIOCGETSGCNT = 0xc0147534 + SIOCGETVIFCNT = 0xc0147533 + SIOCGETVLAN = 0xc0206990 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCONF = 0xc0086924 + SIOCGIFDATA = 0xc020691b + SIOCGIFDESCR = 0xc0206981 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGATTR = 0xc024698b + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc024698a + SIOCGIFGROUP = 0xc0246988 + SIOCGIFHARDMTU = 0xc02069a5 + SIOCGIFMEDIA = 0xc0286936 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc020697e + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPRIORITY = 0xc020699c + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFRDOMAIN = 0xc02069a0 + SIOCGIFRTLABEL = 0xc0206983 + SIOCGIFTIMESLOT = 0xc0206986 + SIOCGIFXFLAGS = 0xc020699e + SIOCGLIFADDR = 0xc218691d + SIOCGLIFPHYADDR = 0xc218694b + SIOCGLIFPHYRTABLE = 0xc02069a2 + SIOCGLIFPHYTTL = 0xc02069a9 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGSPPPPARAMS = 0xc0206994 + SIOCGVH = 0xc02069f6 + SIOCGVNETID = 0xc02069a7 + SIOCIFCREATE = 0x8020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCSETKALIVE = 0x801869a3 + SIOCSETLABEL = 0x80206999 + SIOCSETPFLOW = 0x802069fd + SIOCSETPFSYNC = 0x802069f7 + SIOCSETVLAN = 0x8020698f + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFDESCR = 0x80206980 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGATTR = 0x8024698c + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020691f + SIOCSIFMEDIA = 0xc0206935 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x8020697f + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPRIORITY = 0x8020699b + SIOCSIFRDOMAIN = 0x8020699f + SIOCSIFRTLABEL = 0x80206982 + SIOCSIFTIMESLOT = 0x80206985 + SIOCSIFXFLAGS = 0x8020699d + SIOCSLIFPHYADDR = 0x8218694a + SIOCSLIFPHYRTABLE = 0x802069a1 + SIOCSLIFPHYTTL = 0x802069a8 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSSPPPPARAMS = 0x80206993 + SIOCSVH = 0xc02069f5 + SIOCSVNETID = 0x802069a6 + SOCK_DGRAM = 0x2 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BINDANY = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NETPROC = 0x1020 + SO_OOBINLINE = 0x100 + SO_PEERCRED = 0x1022 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RTABLE = 0x1021 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_SPLICE = 0x1023 + SO_TIMESTAMP = 0x800 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x3 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x4 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOPUSH = 0x10 + TCP_NSTATES = 0xb + TCP_SACK_ENABLE = 0x8 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_PPS = 0x10 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047463 + TIOCGTSTAMP = 0x400c745b + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMODG = 0x4004746a + TIOCMODS = 0x8004746d + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x8004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSTSTAMP = 0x8008745a + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALTSIG = 0x4 + WCONTINUED = 0x8 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x58) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x59) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EIPSEC = syscall.Errno(0x52) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x5b) + ELOOP = syscall.Errno(0x3e) + EMEDIUMTYPE = syscall.Errno(0x56) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x53) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOMEDIUM = syscall.Errno(0x55) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5a) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x5b) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x57) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EWOULDBLOCK", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disk quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC program not available"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIPSEC", "IPsec processing failure"}, + {83, "ENOATTR", "attribute not found"}, + {84, "EILSEQ", "illegal byte sequence"}, + {85, "ENOMEDIUM", "no medium found"}, + {86, "EMEDIUMTYPE", "wrong medium type"}, + {87, "EOVERFLOW", "value too large to be stored in data type"}, + {88, "ECANCELED", "operation canceled"}, + {89, "EIDRM", "identifier removed"}, + {90, "ENOMSG", "no message of desired type"}, + {91, "ELAST", "not supported"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGABRT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGTHR", "thread AST"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go new file mode 100644 index 0000000..25cb609 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go @@ -0,0 +1,1775 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build amd64 && openbsd +// +build amd64,openbsd + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_BLUETOOTH = 0x20 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_ENCAP = 0x1c + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_KEY = 0x1e + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x24 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SIP = 0x1d + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ALTWERASE = 0x200 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRFILT = 0x4004427c + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc010427b + BIOCGETIF = 0x4020426b + BIOCGFILDROP = 0x40044278 + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044273 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x20004276 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDIRFILT = 0x8004427d + BIOCSDLT = 0x8004427a + BIOCSETF = 0x80104267 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x80104277 + BIOCSFILDROP = 0x80044279 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044272 + BIOCSRTIMEOUT = 0x8010426d + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIRECTION_IN = 0x1 + BPF_DIRECTION_OUT = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x200000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_BOOTTIME = 0x6 + CLOCK_MONOTONIC = 0x3 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_THREAD_CPUTIME_ID = 0x4 + CLOCK_UPTIME = 0x5 + CPUSTATES = 0x6 + CP_IDLE = 0x5 + CP_INTR = 0x4 + CP_NICE = 0x1 + CP_SPIN = 0x3 + CP_SYS = 0x2 + CP_USER = 0x0 + CREAD = 0x800 + CRTSCTS = 0x10000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0xff + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DIOCOSFPFLUSH = 0x2000444e + DLT_ARCNET = 0x7 + DLT_ATM_RFC1483 = 0xb + DLT_AX25 = 0x3 + DLT_CHAOS = 0x5 + DLT_C_HDLC = 0x68 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0xd + DLT_FDDI = 0xa + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_LOOP = 0xc + DLT_MPLS = 0xdb + DLT_NULL = 0x0 + DLT_OPENFLOW = 0x10b + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_SERIAL = 0x32 + DLT_PRONET = 0x4 + DLT_RAW = 0xe + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_USBPCAP = 0xf9 + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMT_TAGOVF = 0x1 + EMUL_ENABLED = 0x1 + EMUL_NATIVE = 0x2 + ENDRUNDISC = 0x9 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_AOE = 0x88a2 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LLDP = 0x88cc + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_QINQ = 0x88a8 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOW = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_ALIGN = 0x2 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_DIX_LEN = 0x600 + ETHER_MAX_HARDMTU_LEN = 0xff9b + ETHER_MAX_LEN = 0x5ee + ETHER_MIN_LEN = 0x40 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = -0x3 + EVFILT_DEVICE = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0x8 + EVFILT_TIMER = -0x7 + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EVL_ENCAPLEN = 0x4 + EVL_PRIO_BITS = 0xd + EVL_PRIO_MAX = 0x7 + EVL_VLID_MASK = 0xfff + EVL_VLID_MAX = 0xffe + EVL_VLID_MIN = 0x1 + EVL_VLID_NULL = 0x0 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xa + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETOWN = 0x5 + F_ISATTY = 0xb + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8e52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_STATICARP = 0x20 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BLUETOOTH = 0xf8 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf7 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DUMMY = 0xf1 + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf3 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MBIM = 0xfa + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFLOW = 0xf9 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf2 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_HOST = 0x1 + IN_RFC3021_NET = 0xfffffffe + IN_RFC3021_NSHIFT = 0x1f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x103 + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPV6_AUTH_LEVEL = 0x35 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_ESP_NETWORK_LEVEL = 0x37 + IPV6_ESP_TRANS_LEVEL = 0x36 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPCOMP_LEVEL = 0x3c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MINHOPCOUNT = 0x41 + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_OPTIONS = 0x1 + IPV6_PATHMTU = 0x2c + IPV6_PIPEX = 0x3f + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVDSTPORT = 0x40 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTABLE = 0x1021 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_AUTH_LEVEL = 0x14 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_ESP_NETWORK_LEVEL = 0x16 + IP_ESP_TRANS_LEVEL = 0x15 + IP_HDRINCL = 0x2 + IP_IPCOMP_LEVEL = 0x1d + IP_IPDEFTTL = 0x25 + IP_IPSECFLOWINFO = 0x24 + IP_IPSEC_LOCAL_AUTH = 0x1b + IP_IPSEC_LOCAL_CRED = 0x19 + IP_IPSEC_LOCAL_ID = 0x17 + IP_IPSEC_REMOTE_AUTH = 0x1c + IP_IPSEC_REMOTE_CRED = 0x1a + IP_IPSEC_REMOTE_ID = 0x18 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0xfff + IP_MF = 0x2000 + IP_MINTTL = 0x20 + IP_MIN_MEMBERSHIPS = 0xf + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PIPEX = 0x22 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVDSTPORT = 0x21 + IP_RECVIF = 0x1e + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRTABLE = 0x23 + IP_RECVTTL = 0x1f + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RTABLE = 0x1021 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IUCLC = 0x1000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LCNT_OVERLOAD_FLUSH = 0x6 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_CONCEAL = 0x8000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FLAGMASK = 0xfff7 + MAP_HASSEMAPHORE = 0x0 + MAP_INHERIT = 0x0 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_INHERIT_ZERO = 0x3 + MAP_NOEXTEND = 0x0 + MAP_NORESERVE = 0x0 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x0 + MAP_SHARED = 0x1 + MAP_STACK = 0x4000 + MAP_TRYFIXED = 0x0 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_DOOMED = 0x8000000 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_NOATIME = 0x8000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOPERM = 0x20 + MNT_NOSUID = 0x8 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SOFTDEP = 0x4000000 + MNT_STALLED = 0x100000 + MNT_SYNCHRONOUS = 0x2 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0x400ffff + MNT_WAIT = 0x1 + MNT_WANTRDWR = 0x2000000 + MNT_WXALLOWED = 0x800 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_MCAST = 0x200 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x4 + MS_SYNC = 0x2 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFNAMES = 0x6 + NET_RT_MAXID = 0x7 + NET_RT_STATS = 0x4 + NET_RT_TABLE = 0x5 + NFDBITS = 0x20 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ATTRIB = 0x8 + NOTE_CHANGE = 0x1 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EOF = 0x2 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRUNCATE = 0x80 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OLCUC = 0x20 + ONLCR = 0x2 + ONLRET = 0x80 + ONOCR = 0x40 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x10000 + O_CREAT = 0x200 + O_DIRECTORY = 0x20000 + O_DSYNC = 0x80 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x80 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PF_FLUSH = 0x1 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BFD = 0xb + RTAX_BRD = 0x7 + RTAX_DNS = 0xc + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_LABEL = 0xa + RTAX_MAX = 0xf + RTAX_NETMASK = 0x2 + RTAX_SEARCH = 0xe + RTAX_SRC = 0x8 + RTAX_SRCMASK = 0x9 + RTAX_STATIC = 0xd + RTA_AUTHOR = 0x40 + RTA_BFD = 0x800 + RTA_BRD = 0x80 + RTA_DNS = 0x1000 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_LABEL = 0x400 + RTA_NETMASK = 0x4 + RTA_SEARCH = 0x4000 + RTA_SRC = 0x100 + RTA_SRCMASK = 0x200 + RTA_STATIC = 0x2000 + RTF_ANNOUNCE = 0x4000 + RTF_BFD = 0x1000000 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CACHED = 0x20000 + RTF_CLONED = 0x10000 + RTF_CLONING = 0x100 + RTF_CONNECTED = 0x800000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FMASK = 0x110fc08 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MPATH = 0x40000 + RTF_MPLS = 0x100000 + RTF_MULTICAST = 0x200 + RTF_PERMANENT_ARP = 0x2000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x2000 + RTF_REJECT = 0x8 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_USETRAILERS = 0x8000 + RTM_ADD = 0x1 + RTM_BFD = 0x12 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DESYNC = 0x10 + RTM_GET = 0x4 + RTM_IFANNOUNCE = 0xf + RTM_IFINFO = 0xe + RTM_INVALIDATE = 0x11 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MAXSIZE = 0x800 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_PROPOSAL = 0x13 + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RT_TABLEID_BITS = 0x8 + RT_TABLEID_MASK = 0xff + RT_TABLEID_MAX = 0xff + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80286987 + SIOCATMARK = 0x40047307 + SIOCBRDGADD = 0x8060693c + SIOCBRDGADDL = 0x80606949 + SIOCBRDGADDS = 0x80606941 + SIOCBRDGARL = 0x808c694d + SIOCBRDGDADDR = 0x81286947 + SIOCBRDGDEL = 0x8060693d + SIOCBRDGDELS = 0x80606942 + SIOCBRDGFLUSH = 0x80606948 + SIOCBRDGFRL = 0x808c694e + SIOCBRDGGCACHE = 0xc0186941 + SIOCBRDGGFD = 0xc0186952 + SIOCBRDGGHT = 0xc0186951 + SIOCBRDGGIFFLGS = 0xc060693e + SIOCBRDGGMA = 0xc0186953 + SIOCBRDGGPARAM = 0xc0406958 + SIOCBRDGGPRI = 0xc0186950 + SIOCBRDGGRL = 0xc030694f + SIOCBRDGGTO = 0xc0186946 + SIOCBRDGIFS = 0xc0606942 + SIOCBRDGRTS = 0xc0206943 + SIOCBRDGSADDR = 0xc1286944 + SIOCBRDGSCACHE = 0x80186940 + SIOCBRDGSFD = 0x80186952 + SIOCBRDGSHT = 0x80186951 + SIOCBRDGSIFCOST = 0x80606955 + SIOCBRDGSIFFLGS = 0x8060693f + SIOCBRDGSIFPRIO = 0x80606954 + SIOCBRDGSIFPROT = 0x8060694a + SIOCBRDGSMA = 0x80186953 + SIOCBRDGSPRI = 0x80186950 + SIOCBRDGSPROTO = 0x8018695a + SIOCBRDGSTO = 0x80186945 + SIOCBRDGSTXHC = 0x80186959 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80286989 + SIOCDIFPARENT = 0x802069b4 + SIOCDIFPHYADDR = 0x80206949 + SIOCDVNETID = 0x802069af + SIOCGETKALIVE = 0xc01869a4 + SIOCGETLABEL = 0x8020699a + SIOCGETMPWCFG = 0xc02069ae + SIOCGETPFLOW = 0xc02069fe + SIOCGETPFSYNC = 0xc02069f8 + SIOCGETSGCNT = 0xc0207534 + SIOCGETVIFCNT = 0xc0287533 + SIOCGETVLAN = 0xc0206990 + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCONF = 0xc0106924 + SIOCGIFDATA = 0xc020691b + SIOCGIFDESCR = 0xc0206981 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGATTR = 0xc028698b + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc028698a + SIOCGIFGROUP = 0xc0286988 + SIOCGIFHARDMTU = 0xc02069a5 + SIOCGIFLLPRIO = 0xc02069b6 + SIOCGIFMEDIA = 0xc0406938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc020697e + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPAIR = 0xc02069b1 + SIOCGIFPARENT = 0xc02069b3 + SIOCGIFPRIORITY = 0xc020699c + SIOCGIFRDOMAIN = 0xc02069a0 + SIOCGIFRTLABEL = 0xc0206983 + SIOCGIFRXR = 0x802069aa + SIOCGIFXFLAGS = 0xc020699e + SIOCGLIFPHYADDR = 0xc218694b + SIOCGLIFPHYDF = 0xc02069c2 + SIOCGLIFPHYRTABLE = 0xc02069a2 + SIOCGLIFPHYTTL = 0xc02069a9 + SIOCGPGRP = 0x40047309 + SIOCGSPPPPARAMS = 0xc0206994 + SIOCGUMBINFO = 0xc02069be + SIOCGUMBPARAM = 0xc02069c0 + SIOCGVH = 0xc02069f6 + SIOCGVNETFLOWID = 0xc02069c4 + SIOCGVNETID = 0xc02069a7 + SIOCIFAFATTACH = 0x801169ab + SIOCIFAFDETACH = 0x801169ac + SIOCIFCREATE = 0x8020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106978 + SIOCSETKALIVE = 0x801869a3 + SIOCSETLABEL = 0x80206999 + SIOCSETMPWCFG = 0x802069ad + SIOCSETPFLOW = 0x802069fd + SIOCSETPFSYNC = 0x802069f7 + SIOCSETVLAN = 0x8020698f + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFDESCR = 0x80206980 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGATTR = 0x8028698c + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020691f + SIOCSIFLLPRIO = 0x802069b5 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x8020697f + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPAIR = 0x802069b0 + SIOCSIFPARENT = 0x802069b2 + SIOCSIFPRIORITY = 0x8020699b + SIOCSIFRDOMAIN = 0x8020699f + SIOCSIFRTLABEL = 0x80206982 + SIOCSIFXFLAGS = 0x8020699d + SIOCSLIFPHYADDR = 0x8218694a + SIOCSLIFPHYDF = 0x802069c1 + SIOCSLIFPHYRTABLE = 0x802069a1 + SIOCSLIFPHYTTL = 0x802069a8 + SIOCSPGRP = 0x80047308 + SIOCSSPPPPARAMS = 0x80206993 + SIOCSUMBPARAM = 0x802069bf + SIOCSVH = 0xc02069f5 + SIOCSVNETFLOWID = 0x802069c3 + SIOCSVNETID = 0x802069a6 + SIOCSWGDPID = 0xc018695b + SIOCSWGMAXFLOW = 0xc0186960 + SIOCSWGMAXGROUP = 0xc018695d + SIOCSWSDPID = 0x8018695c + SIOCSWSPORTNO = 0xc060695f + SOCK_CLOEXEC = 0x8000 + SOCK_DGRAM = 0x2 + SOCK_DNS = 0x1000 + SOCK_NONBLOCK = 0x4000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BINDANY = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NETPROC = 0x1020 + SO_OOBINLINE = 0x100 + SO_PEERCRED = 0x1022 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RTABLE = 0x1021 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_SPLICE = 0x1023 + SO_TIMESTAMP = 0x800 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_ZEROIZE = 0x2000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x3 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x4 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOPUSH = 0x10 + TCP_SACK_ENABLE = 0x8 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCHKVERAUTH = 0x2000741e + TIOCCLRVERAUTH = 0x2000741d + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_PPS = 0x10 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047463 + TIOCGTSTAMP = 0x4010745b + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMODG = 0x4004746a + TIOCMODS = 0x8004746d + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSETVERAUTH = 0x8004741c + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x8004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSTSTAMP = 0x8008745a + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TIOCUCNTL_CBRK = 0x7a + TIOCUCNTL_SBRK = 0x7b + TOSTOP = 0x400000 + UTIME_NOW = -0x2 + UTIME_OMIT = -0x1 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VM_ANONMIN = 0x7 + VM_LOADAVG = 0x2 + VM_MAXID = 0xc + VM_MAXSLP = 0xa + VM_METER = 0x1 + VM_NKMEMPAGES = 0x6 + VM_PSSTRINGS = 0x3 + VM_SWAPENCRYPT = 0x5 + VM_USPACE = 0xb + VM_UVMEXP = 0x4 + VM_VNODEMIN = 0x9 + VM_VTEXTMIN = 0x8 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALTSIG = 0x4 + WCONTINUED = 0x8 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WUNTRACED = 0x2 + XCASE = 0x1000000 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x5c) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x58) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x59) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EIPSEC = syscall.Errno(0x52) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x5f) + ELOOP = syscall.Errno(0x3e) + EMEDIUMTYPE = syscall.Errno(0x56) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x53) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOMEDIUM = syscall.Errno(0x55) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5a) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x5d) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x5b) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x57) + EOWNERDEAD = syscall.Errno(0x5e) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5f) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disk quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC program not available"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIPSEC", "IPsec processing failure"}, + {83, "ENOATTR", "attribute not found"}, + {84, "EILSEQ", "illegal byte sequence"}, + {85, "ENOMEDIUM", "no medium found"}, + {86, "EMEDIUMTYPE", "wrong medium type"}, + {87, "EOVERFLOW", "value too large to be stored in data type"}, + {88, "ECANCELED", "operation canceled"}, + {89, "EIDRM", "identifier removed"}, + {90, "ENOMSG", "no message of desired type"}, + {91, "ENOTSUP", "not supported"}, + {92, "EBADMSG", "bad message"}, + {93, "ENOTRECOVERABLE", "state not recoverable"}, + {94, "EOWNERDEAD", "previous owner died"}, + {95, "ELAST", "protocol error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGABRT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGTHR", "thread AST"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go new file mode 100644 index 0000000..aef6c08 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go @@ -0,0 +1,1670 @@ +// mkerrors.sh +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm && openbsd +// +build arm,openbsd + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_BLUETOOTH = 0x20 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_ENCAP = 0x1c + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_KEY = 0x1e + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x24 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SIP = 0x1d + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRFILT = 0x4004427c + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc008427b + BIOCGETIF = 0x4020426b + BIOCGFILDROP = 0x40044278 + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044273 + BIOCGRTIMEOUT = 0x400c426e + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x20004276 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDIRFILT = 0x8004427d + BIOCSDLT = 0x8004427a + BIOCSETF = 0x80084267 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x80084277 + BIOCSFILDROP = 0x80044279 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044272 + BIOCSRTIMEOUT = 0x800c426d + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIRECTION_IN = 0x1 + BPF_DIRECTION_OUT = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x200000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CPUSTATES = 0x6 + CP_IDLE = 0x5 + CP_INTR = 0x4 + CP_NICE = 0x1 + CP_SPIN = 0x3 + CP_SYS = 0x2 + CP_USER = 0x0 + CREAD = 0x800 + CRTSCTS = 0x10000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0xff + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DIOCOSFPFLUSH = 0x2000444e + DLT_ARCNET = 0x7 + DLT_ATM_RFC1483 = 0xb + DLT_AX25 = 0x3 + DLT_CHAOS = 0x5 + DLT_C_HDLC = 0x68 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0xd + DLT_FDDI = 0xa + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_LOOP = 0xc + DLT_MPLS = 0xdb + DLT_NULL = 0x0 + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_SERIAL = 0x32 + DLT_PRONET = 0x4 + DLT_RAW = 0xe + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMT_TAGOVF = 0x1 + EMUL_ENABLED = 0x1 + EMUL_NATIVE = 0x2 + ENDRUNDISC = 0x9 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_AOE = 0x88a2 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LLDP = 0x88cc + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_QINQ = 0x88a8 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOW = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_ALIGN = 0x2 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_DIX_LEN = 0x600 + ETHER_MAX_LEN = 0x5ee + ETHER_MIN_LEN = 0x40 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = -0x3 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = -0x7 + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xa + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETOWN = 0x5 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8e52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BLUETOOTH = 0xf8 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf7 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DUMMY = 0xf1 + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf3 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFLOW = 0xf9 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf2 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_HOST = 0x1 + IN_RFC3021_NET = 0xfffffffe + IN_RFC3021_NSHIFT = 0x1f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DIVERT = 0x102 + IPPROTO_DIVERT_INIT = 0x2 + IPPROTO_DIVERT_RESP = 0x1 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x103 + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPV6_AUTH_LEVEL = 0x35 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_ESP_NETWORK_LEVEL = 0x37 + IPV6_ESP_TRANS_LEVEL = 0x36 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPCOMP_LEVEL = 0x3c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_OPTIONS = 0x1 + IPV6_PATHMTU = 0x2c + IPV6_PIPEX = 0x3f + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVDSTPORT = 0x40 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTABLE = 0x1021 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_AUTH_LEVEL = 0x14 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DIVERTFL = 0x1022 + IP_DROP_MEMBERSHIP = 0xd + IP_ESP_NETWORK_LEVEL = 0x16 + IP_ESP_TRANS_LEVEL = 0x15 + IP_HDRINCL = 0x2 + IP_IPCOMP_LEVEL = 0x1d + IP_IPSECFLOWINFO = 0x24 + IP_IPSEC_LOCAL_AUTH = 0x1b + IP_IPSEC_LOCAL_CRED = 0x19 + IP_IPSEC_LOCAL_ID = 0x17 + IP_IPSEC_REMOTE_AUTH = 0x1c + IP_IPSEC_REMOTE_CRED = 0x1a + IP_IPSEC_REMOTE_ID = 0x18 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0xfff + IP_MF = 0x2000 + IP_MINTTL = 0x20 + IP_MIN_MEMBERSHIPS = 0xf + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PIPEX = 0x22 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVDSTPORT = 0x21 + IP_RECVIF = 0x1e + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRTABLE = 0x23 + IP_RECVTTL = 0x1f + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RTABLE = 0x1021 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LCNT_OVERLOAD_FLUSH = 0x6 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_CONCEAL = 0x8000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FLAGMASK = 0xfff7 + MAP_HASSEMAPHORE = 0x0 + MAP_INHERIT = 0x0 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_INHERIT_ZERO = 0x3 + MAP_NOEXTEND = 0x0 + MAP_NORESERVE = 0x0 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x0 + MAP_SHARED = 0x1 + MAP_STACK = 0x4000 + MAP_TRYFIXED = 0x0 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_DOOMED = 0x8000000 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_NOATIME = 0x8000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SOFTDEP = 0x4000000 + MNT_SYNCHRONOUS = 0x2 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0x400ffff + MNT_WAIT = 0x1 + MNT_WANTRDWR = 0x2000000 + MNT_WXALLOWED = 0x800 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_MCAST = 0x200 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x4 + MS_SYNC = 0x2 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_MAXID = 0x6 + NET_RT_STATS = 0x4 + NET_RT_TABLE = 0x5 + NFDBITS = 0x20 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EOF = 0x2 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRUNCATE = 0x80 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x80 + ONOCR = 0x40 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x10000 + O_CREAT = 0x200 + O_DIRECTORY = 0x20000 + O_DSYNC = 0x80 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x80 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PF_FLUSH = 0x1 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_LABEL = 0xa + RTAX_MAX = 0xb + RTAX_NETMASK = 0x2 + RTAX_SRC = 0x8 + RTAX_SRCMASK = 0x9 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_LABEL = 0x400 + RTA_NETMASK = 0x4 + RTA_SRC = 0x100 + RTA_SRCMASK = 0x200 + RTF_ANNOUNCE = 0x4000 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONED = 0x10000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FMASK = 0x70f808 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_MPATH = 0x40000 + RTF_MPLS = 0x100000 + RTF_PERMANENT_ARP = 0x2000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x2000 + RTF_REJECT = 0x8 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_USETRAILERS = 0x8000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DESYNC = 0x10 + RTM_GET = 0x4 + RTM_IFANNOUNCE = 0xf + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MAXSIZE = 0x800 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RT_TABLEID_MAX = 0xff + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80246987 + SIOCALIFADDR = 0x8218691c + SIOCATMARK = 0x40047307 + SIOCBRDGADD = 0x8054693c + SIOCBRDGADDS = 0x80546941 + SIOCBRDGARL = 0x806e694d + SIOCBRDGDADDR = 0x81286947 + SIOCBRDGDEL = 0x8054693d + SIOCBRDGDELS = 0x80546942 + SIOCBRDGFLUSH = 0x80546948 + SIOCBRDGFRL = 0x806e694e + SIOCBRDGGCACHE = 0xc0146941 + SIOCBRDGGFD = 0xc0146952 + SIOCBRDGGHT = 0xc0146951 + SIOCBRDGGIFFLGS = 0xc054693e + SIOCBRDGGMA = 0xc0146953 + SIOCBRDGGPARAM = 0xc03c6958 + SIOCBRDGGPRI = 0xc0146950 + SIOCBRDGGRL = 0xc028694f + SIOCBRDGGSIFS = 0xc054693c + SIOCBRDGGTO = 0xc0146946 + SIOCBRDGIFS = 0xc0546942 + SIOCBRDGRTS = 0xc0186943 + SIOCBRDGSADDR = 0xc1286944 + SIOCBRDGSCACHE = 0x80146940 + SIOCBRDGSFD = 0x80146952 + SIOCBRDGSHT = 0x80146951 + SIOCBRDGSIFCOST = 0x80546955 + SIOCBRDGSIFFLGS = 0x8054693f + SIOCBRDGSIFPRIO = 0x80546954 + SIOCBRDGSMA = 0x80146953 + SIOCBRDGSPRI = 0x80146950 + SIOCBRDGSPROTO = 0x8014695a + SIOCBRDGSTO = 0x80146945 + SIOCBRDGSTXHC = 0x80146959 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80246989 + SIOCDIFPHYADDR = 0x80206949 + SIOCDLIFADDR = 0x8218691e + SIOCGETKALIVE = 0xc01869a4 + SIOCGETLABEL = 0x8020699a + SIOCGETPFLOW = 0xc02069fe + SIOCGETPFSYNC = 0xc02069f8 + SIOCGETSGCNT = 0xc0147534 + SIOCGETVIFCNT = 0xc0147533 + SIOCGETVLAN = 0xc0206990 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCONF = 0xc0086924 + SIOCGIFDATA = 0xc020691b + SIOCGIFDESCR = 0xc0206981 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGATTR = 0xc024698b + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc024698a + SIOCGIFGROUP = 0xc0246988 + SIOCGIFHARDMTU = 0xc02069a5 + SIOCGIFMEDIA = 0xc0286936 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc020697e + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPRIORITY = 0xc020699c + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFRDOMAIN = 0xc02069a0 + SIOCGIFRTLABEL = 0xc0206983 + SIOCGIFRXR = 0x802069aa + SIOCGIFTIMESLOT = 0xc0206986 + SIOCGIFXFLAGS = 0xc020699e + SIOCGLIFADDR = 0xc218691d + SIOCGLIFPHYADDR = 0xc218694b + SIOCGLIFPHYRTABLE = 0xc02069a2 + SIOCGLIFPHYTTL = 0xc02069a9 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGSPPPPARAMS = 0xc0206994 + SIOCGVH = 0xc02069f6 + SIOCGVNETID = 0xc02069a7 + SIOCIFCREATE = 0x8020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCSETKALIVE = 0x801869a3 + SIOCSETLABEL = 0x80206999 + SIOCSETPFLOW = 0x802069fd + SIOCSETPFSYNC = 0x802069f7 + SIOCSETVLAN = 0x8020698f + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFDESCR = 0x80206980 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGATTR = 0x8024698c + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020691f + SIOCSIFMEDIA = 0xc0206935 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x8020697f + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPRIORITY = 0x8020699b + SIOCSIFRDOMAIN = 0x8020699f + SIOCSIFRTLABEL = 0x80206982 + SIOCSIFTIMESLOT = 0x80206985 + SIOCSIFXFLAGS = 0x8020699d + SIOCSLIFPHYADDR = 0x8218694a + SIOCSLIFPHYRTABLE = 0x802069a1 + SIOCSLIFPHYTTL = 0x802069a8 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSSPPPPARAMS = 0x80206993 + SIOCSVH = 0xc02069f5 + SIOCSVNETID = 0x802069a6 + SOCK_CLOEXEC = 0x8000 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x4000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BINDANY = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NETPROC = 0x1020 + SO_OOBINLINE = 0x100 + SO_PEERCRED = 0x1022 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RTABLE = 0x1021 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_SPLICE = 0x1023 + SO_TIMESTAMP = 0x800 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x3 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x4 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOPUSH = 0x10 + TCP_NSTATES = 0xb + TCP_SACK_ENABLE = 0x8 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_PPS = 0x10 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047463 + TIOCGTSTAMP = 0x400c745b + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMODG = 0x4004746a + TIOCMODS = 0x8004746d + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x8004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSTSTAMP = 0x8008745a + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALTSIG = 0x4 + WCONTINUED = 0x8 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x58) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x59) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EIPSEC = syscall.Errno(0x52) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x5b) + ELOOP = syscall.Errno(0x3e) + EMEDIUMTYPE = syscall.Errno(0x56) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x53) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOMEDIUM = syscall.Errno(0x55) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5a) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x5b) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x57) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EWOULDBLOCK", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disk quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC program not available"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIPSEC", "IPsec processing failure"}, + {83, "ENOATTR", "attribute not found"}, + {84, "EILSEQ", "illegal byte sequence"}, + {85, "ENOMEDIUM", "no medium found"}, + {86, "EMEDIUMTYPE", "wrong medium type"}, + {87, "EOVERFLOW", "value too large to be stored in data type"}, + {88, "ECANCELED", "operation canceled"}, + {89, "EIDRM", "identifier removed"}, + {90, "ENOMSG", "no message of desired type"}, + {91, "ELAST", "not supported"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGABRT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGTHR", "thread AST"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go new file mode 100644 index 0000000..90de7df --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go @@ -0,0 +1,1798 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm64 && openbsd +// +build arm64,openbsd + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_BLUETOOTH = 0x20 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_ENCAP = 0x1c + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_KEY = 0x1e + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x24 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SIP = 0x1d + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ALTWERASE = 0x200 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRFILT = 0x4004427c + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc010427b + BIOCGETIF = 0x4020426b + BIOCGFILDROP = 0x40044278 + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044273 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x20004276 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDIRFILT = 0x8004427d + BIOCSDLT = 0x8004427a + BIOCSETF = 0x80104267 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x80104277 + BIOCSFILDROP = 0x80044279 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044272 + BIOCSRTIMEOUT = 0x8010426d + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIRECTION_IN = 0x1 + BPF_DIRECTION_OUT = 0x2 + BPF_DIV = 0x30 + BPF_FILDROP_CAPTURE = 0x1 + BPF_FILDROP_DROP = 0x2 + BPF_FILDROP_PASS = 0x0 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x200000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_BOOTTIME = 0x6 + CLOCK_MONOTONIC = 0x3 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_THREAD_CPUTIME_ID = 0x4 + CLOCK_UPTIME = 0x5 + CPUSTATES = 0x6 + CP_IDLE = 0x5 + CP_INTR = 0x4 + CP_NICE = 0x1 + CP_SPIN = 0x3 + CP_SYS = 0x2 + CP_USER = 0x0 + CREAD = 0x800 + CRTSCTS = 0x10000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0xff + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DIOCOSFPFLUSH = 0x2000444e + DLT_ARCNET = 0x7 + DLT_ATM_RFC1483 = 0xb + DLT_AX25 = 0x3 + DLT_CHAOS = 0x5 + DLT_C_HDLC = 0x68 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0xd + DLT_FDDI = 0xa + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_LOOP = 0xc + DLT_MPLS = 0xdb + DLT_NULL = 0x0 + DLT_OPENFLOW = 0x10b + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_SERIAL = 0x32 + DLT_PRONET = 0x4 + DLT_RAW = 0xe + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_USBPCAP = 0xf9 + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMT_TAGOVF = 0x1 + EMUL_ENABLED = 0x1 + EMUL_NATIVE = 0x2 + ENDRUNDISC = 0x9 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_AOE = 0x88a2 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LLDP = 0x88cc + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PBB = 0x88e7 + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_QINQ = 0x88a8 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOW = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_ALIGN = 0x2 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_DIX_LEN = 0x600 + ETHER_MAX_HARDMTU_LEN = 0xff9b + ETHER_MAX_LEN = 0x5ee + ETHER_MIN_LEN = 0x40 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = -0x3 + EVFILT_DEVICE = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0x8 + EVFILT_TIMER = -0x7 + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EVL_ENCAPLEN = 0x4 + EVL_PRIO_BITS = 0xd + EVL_PRIO_MAX = 0x7 + EVL_VLID_MASK = 0xfff + EVL_VLID_MAX = 0xffe + EVL_VLID_MIN = 0x1 + EVL_VLID_NULL = 0x0 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xa + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETOWN = 0x5 + F_ISATTY = 0xb + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8e52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_STATICARP = 0x20 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BLUETOOTH = 0xf8 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf7 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DUMMY = 0xf1 + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf3 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MBIM = 0xfa + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFLOW = 0xf9 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf2 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_HOST = 0x1 + IN_RFC3021_NET = 0xfffffffe + IN_RFC3021_NSHIFT = 0x1f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x103 + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPV6_AUTH_LEVEL = 0x35 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_ESP_NETWORK_LEVEL = 0x37 + IPV6_ESP_TRANS_LEVEL = 0x36 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPCOMP_LEVEL = 0x3c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MINHOPCOUNT = 0x41 + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_OPTIONS = 0x1 + IPV6_PATHMTU = 0x2c + IPV6_PIPEX = 0x3f + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVDSTPORT = 0x40 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTABLE = 0x1021 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_AUTH_LEVEL = 0x14 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_ESP_NETWORK_LEVEL = 0x16 + IP_ESP_TRANS_LEVEL = 0x15 + IP_HDRINCL = 0x2 + IP_IPCOMP_LEVEL = 0x1d + IP_IPDEFTTL = 0x25 + IP_IPSECFLOWINFO = 0x24 + IP_IPSEC_LOCAL_AUTH = 0x1b + IP_IPSEC_LOCAL_CRED = 0x19 + IP_IPSEC_LOCAL_ID = 0x17 + IP_IPSEC_REMOTE_AUTH = 0x1c + IP_IPSEC_REMOTE_CRED = 0x1a + IP_IPSEC_REMOTE_ID = 0x18 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0xfff + IP_MF = 0x2000 + IP_MINTTL = 0x20 + IP_MIN_MEMBERSHIPS = 0xf + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PIPEX = 0x22 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVDSTPORT = 0x21 + IP_RECVIF = 0x1e + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRTABLE = 0x23 + IP_RECVTTL = 0x1f + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RTABLE = 0x1021 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IUCLC = 0x1000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LCNT_OVERLOAD_FLUSH = 0x6 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_CONCEAL = 0x8000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FLAGMASK = 0xfff7 + MAP_HASSEMAPHORE = 0x0 + MAP_INHERIT = 0x0 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_INHERIT_ZERO = 0x3 + MAP_NOEXTEND = 0x0 + MAP_NORESERVE = 0x0 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x0 + MAP_SHARED = 0x1 + MAP_STACK = 0x4000 + MAP_TRYFIXED = 0x0 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_DOOMED = 0x8000000 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_NOATIME = 0x8000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOPERM = 0x20 + MNT_NOSUID = 0x8 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SOFTDEP = 0x4000000 + MNT_STALLED = 0x100000 + MNT_SWAPPABLE = 0x200000 + MNT_SYNCHRONOUS = 0x2 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0x400ffff + MNT_WAIT = 0x1 + MNT_WANTRDWR = 0x2000000 + MNT_WXALLOWED = 0x800 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_MCAST = 0x200 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x4 + MS_SYNC = 0x2 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFNAMES = 0x6 + NET_RT_MAXID = 0x7 + NET_RT_STATS = 0x4 + NET_RT_TABLE = 0x5 + NFDBITS = 0x20 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ATTRIB = 0x8 + NOTE_CHANGE = 0x1 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EOF = 0x2 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRUNCATE = 0x80 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OLCUC = 0x20 + ONLCR = 0x2 + ONLRET = 0x80 + ONOCR = 0x40 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x10000 + O_CREAT = 0x200 + O_DIRECTORY = 0x20000 + O_DSYNC = 0x80 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x80 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PF_FLUSH = 0x1 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BFD = 0xb + RTAX_BRD = 0x7 + RTAX_DNS = 0xc + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_LABEL = 0xa + RTAX_MAX = 0xf + RTAX_NETMASK = 0x2 + RTAX_SEARCH = 0xe + RTAX_SRC = 0x8 + RTAX_SRCMASK = 0x9 + RTAX_STATIC = 0xd + RTA_AUTHOR = 0x40 + RTA_BFD = 0x800 + RTA_BRD = 0x80 + RTA_DNS = 0x1000 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_LABEL = 0x400 + RTA_NETMASK = 0x4 + RTA_SEARCH = 0x4000 + RTA_SRC = 0x100 + RTA_SRCMASK = 0x200 + RTA_STATIC = 0x2000 + RTF_ANNOUNCE = 0x4000 + RTF_BFD = 0x1000000 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CACHED = 0x20000 + RTF_CLONED = 0x10000 + RTF_CLONING = 0x100 + RTF_CONNECTED = 0x800000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FMASK = 0x110fc08 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MPATH = 0x40000 + RTF_MPLS = 0x100000 + RTF_MULTICAST = 0x200 + RTF_PERMANENT_ARP = 0x2000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x2000 + RTF_REJECT = 0x8 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_USETRAILERS = 0x8000 + RTM_80211INFO = 0x15 + RTM_ADD = 0x1 + RTM_BFD = 0x12 + RTM_CHANGE = 0x3 + RTM_CHGADDRATTR = 0x14 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DESYNC = 0x10 + RTM_GET = 0x4 + RTM_IFANNOUNCE = 0xf + RTM_IFINFO = 0xe + RTM_INVALIDATE = 0x11 + RTM_LOSING = 0x5 + RTM_MAXSIZE = 0x800 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_PROPOSAL = 0x13 + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RT_TABLEID_BITS = 0x8 + RT_TABLEID_MASK = 0xff + RT_TABLEID_MAX = 0xff + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80286987 + SIOCATMARK = 0x40047307 + SIOCBRDGADD = 0x8060693c + SIOCBRDGADDL = 0x80606949 + SIOCBRDGADDS = 0x80606941 + SIOCBRDGARL = 0x808c694d + SIOCBRDGDADDR = 0x81286947 + SIOCBRDGDEL = 0x8060693d + SIOCBRDGDELS = 0x80606942 + SIOCBRDGFLUSH = 0x80606948 + SIOCBRDGFRL = 0x808c694e + SIOCBRDGGCACHE = 0xc0186941 + SIOCBRDGGFD = 0xc0186952 + SIOCBRDGGHT = 0xc0186951 + SIOCBRDGGIFFLGS = 0xc060693e + SIOCBRDGGMA = 0xc0186953 + SIOCBRDGGPARAM = 0xc0406958 + SIOCBRDGGPRI = 0xc0186950 + SIOCBRDGGRL = 0xc030694f + SIOCBRDGGTO = 0xc0186946 + SIOCBRDGIFS = 0xc0606942 + SIOCBRDGRTS = 0xc0206943 + SIOCBRDGSADDR = 0xc1286944 + SIOCBRDGSCACHE = 0x80186940 + SIOCBRDGSFD = 0x80186952 + SIOCBRDGSHT = 0x80186951 + SIOCBRDGSIFCOST = 0x80606955 + SIOCBRDGSIFFLGS = 0x8060693f + SIOCBRDGSIFPRIO = 0x80606954 + SIOCBRDGSIFPROT = 0x8060694a + SIOCBRDGSMA = 0x80186953 + SIOCBRDGSPRI = 0x80186950 + SIOCBRDGSPROTO = 0x8018695a + SIOCBRDGSTO = 0x80186945 + SIOCBRDGSTXHC = 0x80186959 + SIOCDELLABEL = 0x80206997 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80286989 + SIOCDIFPARENT = 0x802069b4 + SIOCDIFPHYADDR = 0x80206949 + SIOCDPWE3NEIGHBOR = 0x802069de + SIOCDVNETID = 0x802069af + SIOCGETKALIVE = 0xc01869a4 + SIOCGETLABEL = 0x8020699a + SIOCGETMPWCFG = 0xc02069ae + SIOCGETPFLOW = 0xc02069fe + SIOCGETPFSYNC = 0xc02069f8 + SIOCGETSGCNT = 0xc0207534 + SIOCGETVIFCNT = 0xc0287533 + SIOCGETVLAN = 0xc0206990 + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCONF = 0xc0106924 + SIOCGIFDATA = 0xc020691b + SIOCGIFDESCR = 0xc0206981 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGATTR = 0xc028698b + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGLIST = 0xc028698d + SIOCGIFGMEMB = 0xc028698a + SIOCGIFGROUP = 0xc0286988 + SIOCGIFHARDMTU = 0xc02069a5 + SIOCGIFLLPRIO = 0xc02069b6 + SIOCGIFMEDIA = 0xc0406938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc020697e + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPAIR = 0xc02069b1 + SIOCGIFPARENT = 0xc02069b3 + SIOCGIFPRIORITY = 0xc020699c + SIOCGIFRDOMAIN = 0xc02069a0 + SIOCGIFRTLABEL = 0xc0206983 + SIOCGIFRXR = 0x802069aa + SIOCGIFSFFPAGE = 0xc1126939 + SIOCGIFXFLAGS = 0xc020699e + SIOCGLIFPHYADDR = 0xc218694b + SIOCGLIFPHYDF = 0xc02069c2 + SIOCGLIFPHYECN = 0xc02069c8 + SIOCGLIFPHYRTABLE = 0xc02069a2 + SIOCGLIFPHYTTL = 0xc02069a9 + SIOCGPGRP = 0x40047309 + SIOCGPWE3 = 0xc0206998 + SIOCGPWE3CTRLWORD = 0xc02069dc + SIOCGPWE3FAT = 0xc02069dd + SIOCGPWE3NEIGHBOR = 0xc21869de + SIOCGSPPPPARAMS = 0xc0206994 + SIOCGTXHPRIO = 0xc02069c6 + SIOCGUMBINFO = 0xc02069be + SIOCGUMBPARAM = 0xc02069c0 + SIOCGVH = 0xc02069f6 + SIOCGVNETFLOWID = 0xc02069c4 + SIOCGVNETID = 0xc02069a7 + SIOCIFAFATTACH = 0x801169ab + SIOCIFAFDETACH = 0x801169ac + SIOCIFCREATE = 0x8020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106978 + SIOCSETKALIVE = 0x801869a3 + SIOCSETLABEL = 0x80206999 + SIOCSETMPWCFG = 0x802069ad + SIOCSETPFLOW = 0x802069fd + SIOCSETPFSYNC = 0x802069f7 + SIOCSETVLAN = 0x8020698f + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFDESCR = 0x80206980 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGATTR = 0x8028698c + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020691f + SIOCSIFLLPRIO = 0x802069b5 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x8020697f + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPAIR = 0x802069b0 + SIOCSIFPARENT = 0x802069b2 + SIOCSIFPRIORITY = 0x8020699b + SIOCSIFRDOMAIN = 0x8020699f + SIOCSIFRTLABEL = 0x80206982 + SIOCSIFXFLAGS = 0x8020699d + SIOCSLIFPHYADDR = 0x8218694a + SIOCSLIFPHYDF = 0x802069c1 + SIOCSLIFPHYECN = 0x802069c7 + SIOCSLIFPHYRTABLE = 0x802069a1 + SIOCSLIFPHYTTL = 0x802069a8 + SIOCSPGRP = 0x80047308 + SIOCSPWE3CTRLWORD = 0x802069dc + SIOCSPWE3FAT = 0x802069dd + SIOCSPWE3NEIGHBOR = 0x821869de + SIOCSSPPPPARAMS = 0x80206993 + SIOCSTXHPRIO = 0x802069c5 + SIOCSUMBPARAM = 0x802069bf + SIOCSVH = 0xc02069f5 + SIOCSVNETFLOWID = 0x802069c3 + SIOCSVNETID = 0x802069a6 + SIOCSWGDPID = 0xc018695b + SIOCSWGMAXFLOW = 0xc0186960 + SIOCSWGMAXGROUP = 0xc018695d + SIOCSWSDPID = 0x8018695c + SIOCSWSPORTNO = 0xc060695f + SOCK_CLOEXEC = 0x8000 + SOCK_DGRAM = 0x2 + SOCK_DNS = 0x1000 + SOCK_NONBLOCK = 0x4000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BINDANY = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NETPROC = 0x1020 + SO_OOBINLINE = 0x100 + SO_PEERCRED = 0x1022 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RTABLE = 0x1021 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_SPLICE = 0x1023 + SO_TIMESTAMP = 0x800 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_ZEROIZE = 0x2000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x3 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x4 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOPUSH = 0x10 + TCP_SACK_ENABLE = 0x8 + TCSAFLUSH = 0x2 + TIMER_ABSTIME = 0x1 + TIMER_RELTIME = 0x0 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCHKVERAUTH = 0x2000741e + TIOCCLRVERAUTH = 0x2000741d + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_PPS = 0x10 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047463 + TIOCGTSTAMP = 0x4010745b + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMODG = 0x4004746a + TIOCMODS = 0x8004746d + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSETVERAUTH = 0x8004741c + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x8004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTOP = 0x2000746f + TIOCSTSTAMP = 0x8008745a + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TIOCUCNTL_CBRK = 0x7a + TIOCUCNTL_SBRK = 0x7b + TOSTOP = 0x400000 + UTIME_NOW = -0x2 + UTIME_OMIT = -0x1 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VM_ANONMIN = 0x7 + VM_LOADAVG = 0x2 + VM_MALLOC_CONF = 0xc + VM_MAXID = 0xd + VM_MAXSLP = 0xa + VM_METER = 0x1 + VM_NKMEMPAGES = 0x6 + VM_PSSTRINGS = 0x3 + VM_SWAPENCRYPT = 0x5 + VM_USPACE = 0xb + VM_UVMEXP = 0x4 + VM_VNODEMIN = 0x9 + VM_VTEXTMIN = 0x8 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALTSIG = 0x4 + WCONTINUED = 0x8 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WUNTRACED = 0x2 + XCASE = 0x1000000 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x5c) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x58) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x59) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EIPSEC = syscall.Errno(0x52) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x5f) + ELOOP = syscall.Errno(0x3e) + EMEDIUMTYPE = syscall.Errno(0x56) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x53) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOMEDIUM = syscall.Errno(0x55) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5a) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x5d) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x5b) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x57) + EOWNERDEAD = syscall.Errno(0x5e) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5f) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disk quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC program not available"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIPSEC", "IPsec processing failure"}, + {83, "ENOATTR", "attribute not found"}, + {84, "EILSEQ", "illegal byte sequence"}, + {85, "ENOMEDIUM", "no medium found"}, + {86, "EMEDIUMTYPE", "wrong medium type"}, + {87, "EOVERFLOW", "value too large to be stored in data type"}, + {88, "ECANCELED", "operation canceled"}, + {89, "EIDRM", "identifier removed"}, + {90, "ENOMSG", "no message of desired type"}, + {91, "ENOTSUP", "not supported"}, + {92, "EBADMSG", "bad message"}, + {93, "ENOTRECOVERABLE", "state not recoverable"}, + {94, "EOWNERDEAD", "previous owner died"}, + {95, "ELAST", "protocol error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGABRT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGTHR", "thread AST"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go new file mode 100644 index 0000000..f1154ff --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go @@ -0,0 +1,1863 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build mips64 && openbsd +// +build mips64,openbsd + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_BLUETOOTH = 0x20 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_ENCAP = 0x1c + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_KEY = 0x1e + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x24 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SIP = 0x1d + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ALTWERASE = 0x200 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRFILT = 0x4004427c + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc010427b + BIOCGETIF = 0x4020426b + BIOCGFILDROP = 0x40044278 + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044273 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x20004276 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDIRFILT = 0x8004427d + BIOCSDLT = 0x8004427a + BIOCSETF = 0x80104267 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x80104277 + BIOCSFILDROP = 0x80044279 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044272 + BIOCSRTIMEOUT = 0x8010426d + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIRECTION_IN = 0x1 + BPF_DIRECTION_OUT = 0x2 + BPF_DIV = 0x30 + BPF_FILDROP_CAPTURE = 0x1 + BPF_FILDROP_DROP = 0x2 + BPF_FILDROP_PASS = 0x0 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x200000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_BOOTTIME = 0x6 + CLOCK_MONOTONIC = 0x3 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_THREAD_CPUTIME_ID = 0x4 + CLOCK_UPTIME = 0x5 + CPUSTATES = 0x6 + CP_IDLE = 0x5 + CP_INTR = 0x4 + CP_NICE = 0x1 + CP_SPIN = 0x3 + CP_SYS = 0x2 + CP_USER = 0x0 + CREAD = 0x800 + CRTSCTS = 0x10000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0xff + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DIOCADDQUEUE = 0xc110445d + DIOCADDRULE = 0xcd604404 + DIOCADDSTATE = 0xc1084425 + DIOCCHANGERULE = 0xcd60441a + DIOCCLRIFFLAG = 0xc028445a + DIOCCLRSRCNODES = 0x20004455 + DIOCCLRSTATES = 0xc0e04412 + DIOCCLRSTATUS = 0xc0284416 + DIOCGETLIMIT = 0xc0084427 + DIOCGETQSTATS = 0xc1204460 + DIOCGETQUEUE = 0xc110445f + DIOCGETQUEUES = 0xc110445e + DIOCGETRULE = 0xcd604407 + DIOCGETRULES = 0xcd604406 + DIOCGETRULESET = 0xc444443b + DIOCGETRULESETS = 0xc444443a + DIOCGETSRCNODES = 0xc0104454 + DIOCGETSTATE = 0xc1084413 + DIOCGETSTATES = 0xc0104419 + DIOCGETSTATUS = 0xc1e84415 + DIOCGETSYNFLWATS = 0xc0084463 + DIOCGETTIMEOUT = 0xc008441e + DIOCIGETIFACES = 0xc0284457 + DIOCKILLSRCNODES = 0xc080445b + DIOCKILLSTATES = 0xc0e04429 + DIOCNATLOOK = 0xc0504417 + DIOCOSFPADD = 0xc088444f + DIOCOSFPFLUSH = 0x2000444e + DIOCOSFPGET = 0xc0884450 + DIOCRADDADDRS = 0xc4504443 + DIOCRADDTABLES = 0xc450443d + DIOCRCLRADDRS = 0xc4504442 + DIOCRCLRASTATS = 0xc4504448 + DIOCRCLRTABLES = 0xc450443c + DIOCRCLRTSTATS = 0xc4504441 + DIOCRDELADDRS = 0xc4504444 + DIOCRDELTABLES = 0xc450443e + DIOCRGETADDRS = 0xc4504446 + DIOCRGETASTATS = 0xc4504447 + DIOCRGETTABLES = 0xc450443f + DIOCRGETTSTATS = 0xc4504440 + DIOCRINADEFINE = 0xc450444d + DIOCRSETADDRS = 0xc4504445 + DIOCRSETTFLAGS = 0xc450444a + DIOCRTSTADDRS = 0xc4504449 + DIOCSETDEBUG = 0xc0044418 + DIOCSETHOSTID = 0xc0044456 + DIOCSETIFFLAG = 0xc0284459 + DIOCSETLIMIT = 0xc0084428 + DIOCSETREASS = 0xc004445c + DIOCSETSTATUSIF = 0xc0284414 + DIOCSETSYNCOOKIES = 0xc0014462 + DIOCSETSYNFLWATS = 0xc0084461 + DIOCSETTIMEOUT = 0xc008441d + DIOCSTART = 0x20004401 + DIOCSTOP = 0x20004402 + DIOCXBEGIN = 0xc0104451 + DIOCXCOMMIT = 0xc0104452 + DIOCXROLLBACK = 0xc0104453 + DLT_ARCNET = 0x7 + DLT_ATM_RFC1483 = 0xb + DLT_AX25 = 0x3 + DLT_CHAOS = 0x5 + DLT_C_HDLC = 0x68 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0xd + DLT_FDDI = 0xa + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_LOOP = 0xc + DLT_MPLS = 0xdb + DLT_NULL = 0x0 + DLT_OPENFLOW = 0x10b + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_SERIAL = 0x32 + DLT_PRONET = 0x4 + DLT_RAW = 0xe + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_USBPCAP = 0xf9 + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMT_TAGOVF = 0x1 + EMUL_ENABLED = 0x1 + EMUL_NATIVE = 0x2 + ENDRUNDISC = 0x9 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_AOE = 0x88a2 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LLDP = 0x88cc + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MACSEC = 0x88e5 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PBB = 0x88e7 + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_QINQ = 0x88a8 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOW = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_ALIGN = 0x2 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_DIX_LEN = 0x600 + ETHER_MAX_HARDMTU_LEN = 0xff9b + ETHER_MAX_LEN = 0x5ee + ETHER_MIN_LEN = 0x40 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = -0x3 + EVFILT_DEVICE = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0x8 + EVFILT_TIMER = -0x7 + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EVL_ENCAPLEN = 0x4 + EVL_PRIO_BITS = 0xd + EVL_PRIO_MAX = 0x7 + EVL_VLID_MASK = 0xfff + EVL_VLID_MAX = 0xffe + EVL_VLID_MIN = 0x1 + EVL_VLID_NULL = 0x0 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xa + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETOWN = 0x5 + F_ISATTY = 0xb + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8e52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_STATICARP = 0x20 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BLUETOOTH = 0xf8 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf7 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DUMMY = 0xf1 + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf3 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MBIM = 0xfa + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFLOW = 0xf9 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf2 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_HOST = 0x1 + IN_RFC3021_NET = 0xfffffffe + IN_RFC3021_NSHIFT = 0x1f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x103 + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_AUTH_LEVEL = 0x35 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_ESP_NETWORK_LEVEL = 0x37 + IPV6_ESP_TRANS_LEVEL = 0x36 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xfffffff + IPV6_FLOWLABEL_MASK = 0xfffff + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPCOMP_LEVEL = 0x3c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MINHOPCOUNT = 0x41 + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_OPTIONS = 0x1 + IPV6_PATHMTU = 0x2c + IPV6_PIPEX = 0x3f + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVDSTPORT = 0x40 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTABLE = 0x1021 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_AUTH_LEVEL = 0x14 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_ESP_NETWORK_LEVEL = 0x16 + IP_ESP_TRANS_LEVEL = 0x15 + IP_HDRINCL = 0x2 + IP_IPCOMP_LEVEL = 0x1d + IP_IPDEFTTL = 0x25 + IP_IPSECFLOWINFO = 0x24 + IP_IPSEC_LOCAL_AUTH = 0x1b + IP_IPSEC_LOCAL_CRED = 0x19 + IP_IPSEC_LOCAL_ID = 0x17 + IP_IPSEC_REMOTE_AUTH = 0x1c + IP_IPSEC_REMOTE_CRED = 0x1a + IP_IPSEC_REMOTE_ID = 0x18 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0xfff + IP_MF = 0x2000 + IP_MINTTL = 0x20 + IP_MIN_MEMBERSHIPS = 0xf + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PIPEX = 0x22 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVDSTPORT = 0x21 + IP_RECVIF = 0x1e + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRTABLE = 0x23 + IP_RECVTTL = 0x1f + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RTABLE = 0x1021 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IUCLC = 0x1000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LCNT_OVERLOAD_FLUSH = 0x6 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_CONCEAL = 0x8000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FLAGMASK = 0xfff7 + MAP_HASSEMAPHORE = 0x0 + MAP_INHERIT = 0x0 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_INHERIT_ZERO = 0x3 + MAP_NOEXTEND = 0x0 + MAP_NORESERVE = 0x0 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x0 + MAP_SHARED = 0x1 + MAP_STACK = 0x4000 + MAP_TRYFIXED = 0x0 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_DOOMED = 0x8000000 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_NOATIME = 0x8000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOPERM = 0x20 + MNT_NOSUID = 0x8 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SOFTDEP = 0x4000000 + MNT_STALLED = 0x100000 + MNT_SWAPPABLE = 0x200000 + MNT_SYNCHRONOUS = 0x2 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0x400ffff + MNT_WAIT = 0x1 + MNT_WANTRDWR = 0x2000000 + MNT_WXALLOWED = 0x800 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_MCAST = 0x200 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x4 + MS_SYNC = 0x2 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFNAMES = 0x6 + NET_RT_MAXID = 0x7 + NET_RT_STATS = 0x4 + NET_RT_TABLE = 0x5 + NFDBITS = 0x20 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ATTRIB = 0x8 + NOTE_CHANGE = 0x1 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EOF = 0x2 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRUNCATE = 0x80 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OLCUC = 0x20 + ONLCR = 0x2 + ONLRET = 0x80 + ONOCR = 0x40 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x10000 + O_CREAT = 0x200 + O_DIRECTORY = 0x20000 + O_DSYNC = 0x80 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x80 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PF_FLUSH = 0x1 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BFD = 0xb + RTAX_BRD = 0x7 + RTAX_DNS = 0xc + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_LABEL = 0xa + RTAX_MAX = 0xf + RTAX_NETMASK = 0x2 + RTAX_SEARCH = 0xe + RTAX_SRC = 0x8 + RTAX_SRCMASK = 0x9 + RTAX_STATIC = 0xd + RTA_AUTHOR = 0x40 + RTA_BFD = 0x800 + RTA_BRD = 0x80 + RTA_DNS = 0x1000 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_LABEL = 0x400 + RTA_NETMASK = 0x4 + RTA_SEARCH = 0x4000 + RTA_SRC = 0x100 + RTA_SRCMASK = 0x200 + RTA_STATIC = 0x2000 + RTF_ANNOUNCE = 0x4000 + RTF_BFD = 0x1000000 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CACHED = 0x20000 + RTF_CLONED = 0x10000 + RTF_CLONING = 0x100 + RTF_CONNECTED = 0x800000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FMASK = 0x110fc08 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MPATH = 0x40000 + RTF_MPLS = 0x100000 + RTF_MULTICAST = 0x200 + RTF_PERMANENT_ARP = 0x2000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x2000 + RTF_REJECT = 0x8 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_USETRAILERS = 0x8000 + RTM_80211INFO = 0x15 + RTM_ADD = 0x1 + RTM_BFD = 0x12 + RTM_CHANGE = 0x3 + RTM_CHGADDRATTR = 0x14 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DESYNC = 0x10 + RTM_GET = 0x4 + RTM_IFANNOUNCE = 0xf + RTM_IFINFO = 0xe + RTM_INVALIDATE = 0x11 + RTM_LOSING = 0x5 + RTM_MAXSIZE = 0x800 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_PROPOSAL = 0x13 + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RT_TABLEID_BITS = 0x8 + RT_TABLEID_MASK = 0xff + RT_TABLEID_MAX = 0xff + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80286987 + SIOCATMARK = 0x40047307 + SIOCBRDGADD = 0x8060693c + SIOCBRDGADDL = 0x80606949 + SIOCBRDGADDS = 0x80606941 + SIOCBRDGARL = 0x808c694d + SIOCBRDGDADDR = 0x81286947 + SIOCBRDGDEL = 0x8060693d + SIOCBRDGDELS = 0x80606942 + SIOCBRDGFLUSH = 0x80606948 + SIOCBRDGFRL = 0x808c694e + SIOCBRDGGCACHE = 0xc0186941 + SIOCBRDGGFD = 0xc0186952 + SIOCBRDGGHT = 0xc0186951 + SIOCBRDGGIFFLGS = 0xc060693e + SIOCBRDGGMA = 0xc0186953 + SIOCBRDGGPARAM = 0xc0406958 + SIOCBRDGGPRI = 0xc0186950 + SIOCBRDGGRL = 0xc030694f + SIOCBRDGGTO = 0xc0186946 + SIOCBRDGIFS = 0xc0606942 + SIOCBRDGRTS = 0xc0206943 + SIOCBRDGSADDR = 0xc1286944 + SIOCBRDGSCACHE = 0x80186940 + SIOCBRDGSFD = 0x80186952 + SIOCBRDGSHT = 0x80186951 + SIOCBRDGSIFCOST = 0x80606955 + SIOCBRDGSIFFLGS = 0x8060693f + SIOCBRDGSIFPRIO = 0x80606954 + SIOCBRDGSIFPROT = 0x8060694a + SIOCBRDGSMA = 0x80186953 + SIOCBRDGSPRI = 0x80186950 + SIOCBRDGSPROTO = 0x8018695a + SIOCBRDGSTO = 0x80186945 + SIOCBRDGSTXHC = 0x80186959 + SIOCDELLABEL = 0x80206997 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80286989 + SIOCDIFPARENT = 0x802069b4 + SIOCDIFPHYADDR = 0x80206949 + SIOCDPWE3NEIGHBOR = 0x802069de + SIOCDVNETID = 0x802069af + SIOCGETKALIVE = 0xc01869a4 + SIOCGETLABEL = 0x8020699a + SIOCGETMPWCFG = 0xc02069ae + SIOCGETPFLOW = 0xc02069fe + SIOCGETPFSYNC = 0xc02069f8 + SIOCGETSGCNT = 0xc0207534 + SIOCGETVIFCNT = 0xc0287533 + SIOCGETVLAN = 0xc0206990 + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCONF = 0xc0106924 + SIOCGIFDATA = 0xc020691b + SIOCGIFDESCR = 0xc0206981 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGATTR = 0xc028698b + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGLIST = 0xc028698d + SIOCGIFGMEMB = 0xc028698a + SIOCGIFGROUP = 0xc0286988 + SIOCGIFHARDMTU = 0xc02069a5 + SIOCGIFLLPRIO = 0xc02069b6 + SIOCGIFMEDIA = 0xc0406938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc020697e + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPAIR = 0xc02069b1 + SIOCGIFPARENT = 0xc02069b3 + SIOCGIFPRIORITY = 0xc020699c + SIOCGIFRDOMAIN = 0xc02069a0 + SIOCGIFRTLABEL = 0xc0206983 + SIOCGIFRXR = 0x802069aa + SIOCGIFSFFPAGE = 0xc1126939 + SIOCGIFXFLAGS = 0xc020699e + SIOCGLIFPHYADDR = 0xc218694b + SIOCGLIFPHYDF = 0xc02069c2 + SIOCGLIFPHYECN = 0xc02069c8 + SIOCGLIFPHYRTABLE = 0xc02069a2 + SIOCGLIFPHYTTL = 0xc02069a9 + SIOCGPGRP = 0x40047309 + SIOCGPWE3 = 0xc0206998 + SIOCGPWE3CTRLWORD = 0xc02069dc + SIOCGPWE3FAT = 0xc02069dd + SIOCGPWE3NEIGHBOR = 0xc21869de + SIOCGRXHPRIO = 0xc02069db + SIOCGSPPPPARAMS = 0xc0206994 + SIOCGTXHPRIO = 0xc02069c6 + SIOCGUMBINFO = 0xc02069be + SIOCGUMBPARAM = 0xc02069c0 + SIOCGVH = 0xc02069f6 + SIOCGVNETFLOWID = 0xc02069c4 + SIOCGVNETID = 0xc02069a7 + SIOCIFAFATTACH = 0x801169ab + SIOCIFAFDETACH = 0x801169ac + SIOCIFCREATE = 0x8020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106978 + SIOCSETKALIVE = 0x801869a3 + SIOCSETLABEL = 0x80206999 + SIOCSETMPWCFG = 0x802069ad + SIOCSETPFLOW = 0x802069fd + SIOCSETPFSYNC = 0x802069f7 + SIOCSETVLAN = 0x8020698f + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFDESCR = 0x80206980 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGATTR = 0x8028698c + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020691f + SIOCSIFLLPRIO = 0x802069b5 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x8020697f + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPAIR = 0x802069b0 + SIOCSIFPARENT = 0x802069b2 + SIOCSIFPRIORITY = 0x8020699b + SIOCSIFRDOMAIN = 0x8020699f + SIOCSIFRTLABEL = 0x80206982 + SIOCSIFXFLAGS = 0x8020699d + SIOCSLIFPHYADDR = 0x8218694a + SIOCSLIFPHYDF = 0x802069c1 + SIOCSLIFPHYECN = 0x802069c7 + SIOCSLIFPHYRTABLE = 0x802069a1 + SIOCSLIFPHYTTL = 0x802069a8 + SIOCSPGRP = 0x80047308 + SIOCSPWE3CTRLWORD = 0x802069dc + SIOCSPWE3FAT = 0x802069dd + SIOCSPWE3NEIGHBOR = 0x821869de + SIOCSRXHPRIO = 0x802069db + SIOCSSPPPPARAMS = 0x80206993 + SIOCSTXHPRIO = 0x802069c5 + SIOCSUMBPARAM = 0x802069bf + SIOCSVH = 0xc02069f5 + SIOCSVNETFLOWID = 0x802069c3 + SIOCSVNETID = 0x802069a6 + SIOCSWGDPID = 0xc018695b + SIOCSWGMAXFLOW = 0xc0186960 + SIOCSWGMAXGROUP = 0xc018695d + SIOCSWSDPID = 0x8018695c + SIOCSWSPORTNO = 0xc060695f + SOCK_CLOEXEC = 0x8000 + SOCK_DGRAM = 0x2 + SOCK_DNS = 0x1000 + SOCK_NONBLOCK = 0x4000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BINDANY = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DOMAIN = 0x1024 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NETPROC = 0x1020 + SO_OOBINLINE = 0x100 + SO_PEERCRED = 0x1022 + SO_PROTOCOL = 0x1025 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RTABLE = 0x1021 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_SPLICE = 0x1023 + SO_TIMESTAMP = 0x800 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_ZEROIZE = 0x2000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x3 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x4 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOPUSH = 0x10 + TCP_SACKHOLE_LIMIT = 0x80 + TCP_SACK_ENABLE = 0x8 + TCSAFLUSH = 0x2 + TIMER_ABSTIME = 0x1 + TIMER_RELTIME = 0x0 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCHKVERAUTH = 0x2000741e + TIOCCLRVERAUTH = 0x2000741d + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_PPS = 0x10 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047463 + TIOCGTSTAMP = 0x4010745b + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMODG = 0x4004746a + TIOCMODS = 0x8004746d + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSETVERAUTH = 0x8004741c + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x8004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTOP = 0x2000746f + TIOCSTSTAMP = 0x8008745a + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TIOCUCNTL_CBRK = 0x7a + TIOCUCNTL_SBRK = 0x7b + TOSTOP = 0x400000 + UTIME_NOW = -0x2 + UTIME_OMIT = -0x1 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VM_ANONMIN = 0x7 + VM_LOADAVG = 0x2 + VM_MALLOC_CONF = 0xc + VM_MAXID = 0xd + VM_MAXSLP = 0xa + VM_METER = 0x1 + VM_NKMEMPAGES = 0x6 + VM_PSSTRINGS = 0x3 + VM_SWAPENCRYPT = 0x5 + VM_USPACE = 0xb + VM_UVMEXP = 0x4 + VM_VNODEMIN = 0x9 + VM_VTEXTMIN = 0x8 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALTSIG = 0x4 + WCONTINUED = 0x8 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WUNTRACED = 0x2 + XCASE = 0x1000000 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x5c) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x58) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x59) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EIPSEC = syscall.Errno(0x52) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x5f) + ELOOP = syscall.Errno(0x3e) + EMEDIUMTYPE = syscall.Errno(0x56) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x53) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOMEDIUM = syscall.Errno(0x55) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5a) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x5d) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x5b) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x57) + EOWNERDEAD = syscall.Errno(0x5e) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5f) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disk quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC program not available"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIPSEC", "IPsec processing failure"}, + {83, "ENOATTR", "attribute not found"}, + {84, "EILSEQ", "illegal byte sequence"}, + {85, "ENOMEDIUM", "no medium found"}, + {86, "EMEDIUMTYPE", "wrong medium type"}, + {87, "EOVERFLOW", "value too large to be stored in data type"}, + {88, "ECANCELED", "operation canceled"}, + {89, "EIDRM", "identifier removed"}, + {90, "ENOMSG", "no message of desired type"}, + {91, "ENOTSUP", "not supported"}, + {92, "EBADMSG", "bad message"}, + {93, "ENOTRECOVERABLE", "state not recoverable"}, + {94, "EOWNERDEAD", "previous owner died"}, + {95, "ELAST", "protocol error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGABRT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGTHR", "thread AST"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go new file mode 100644 index 0000000..1afee6a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go @@ -0,0 +1,1557 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build amd64 && solaris +// +build amd64,solaris + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_802 = 0x12 + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_ECMA = 0x8 + AF_FILE = 0x1 + AF_GOSIP = 0x16 + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1a + AF_INET_OFFLOAD = 0x1e + AF_IPX = 0x17 + AF_KEY = 0x1b + AF_LAT = 0xe + AF_LINK = 0x19 + AF_LOCAL = 0x1 + AF_MAX = 0x20 + AF_NBS = 0x7 + AF_NCA = 0x1c + AF_NIT = 0x11 + AF_NS = 0x6 + AF_OSI = 0x13 + AF_OSINET = 0x15 + AF_PACKET = 0x20 + AF_POLICY = 0x1d + AF_PUP = 0x4 + AF_ROUTE = 0x18 + AF_SNA = 0xb + AF_TRILL = 0x1f + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_X25 = 0x14 + ARPHRD_ARCNET = 0x7 + ARPHRD_ATM = 0x10 + ARPHRD_AX25 = 0x3 + ARPHRD_CHAOS = 0x5 + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_FC = 0x12 + ARPHRD_FRAME = 0xf + ARPHRD_HDLC = 0x11 + ARPHRD_IB = 0x20 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IPATM = 0x13 + ARPHRD_METRICOM = 0x17 + ARPHRD_TUNNEL = 0x1f + B0 = 0x0 + B110 = 0x3 + B115200 = 0x12 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B153600 = 0x13 + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B230400 = 0x14 + B2400 = 0xb + B300 = 0x7 + B307200 = 0x15 + B38400 = 0xf + B460800 = 0x16 + B4800 = 0xc + B50 = 0x1 + B57600 = 0x10 + B600 = 0x8 + B75 = 0x2 + B76800 = 0x11 + B921600 = 0x17 + B9600 = 0xd + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = -0x3fefbd89 + BIOCGDLTLIST32 = -0x3ff7bd89 + BIOCGETIF = 0x4020426b + BIOCGETLIF = 0x4078426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRTIMEOUT = 0x4010427b + BIOCGRTIMEOUT32 = 0x4008427b + BIOCGSEESENT = 0x40044278 + BIOCGSTATS = 0x4080426f + BIOCGSTATSOLD = 0x4008426f + BIOCIMMEDIATE = -0x7ffbbd90 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = -0x3ffbbd9a + BIOCSDLT = -0x7ffbbd8a + BIOCSETF = -0x7fefbd99 + BIOCSETF32 = -0x7ff7bd99 + BIOCSETIF = -0x7fdfbd94 + BIOCSETLIF = -0x7f87bd94 + BIOCSHDRCMPLT = -0x7ffbbd8b + BIOCSRTIMEOUT = -0x7fefbd86 + BIOCSRTIMEOUT32 = -0x7ff7bd86 + BIOCSSEESENT = -0x7ffbbd87 + BIOCSTCPF = -0x7fefbd8e + BIOCSUDPF = -0x7fefbd8d + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DFLTBUFSIZE = 0x100000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x1000000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CBAUD = 0xf + CFLUSH = 0xf + CIBAUD = 0xf0000 + CLOCAL = 0x800 + CLOCK_HIGHRES = 0x4 + CLOCK_LEVEL = 0xa + CLOCK_MONOTONIC = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x5 + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x3 + CLOCK_THREAD_CPUTIME_ID = 0x2 + CLOCK_VIRTUAL = 0x1 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + CSWTCH = 0x1a + DIOC = 0x6400 + DIOCGETB = 0x6402 + DIOCGETC = 0x6401 + DIOCGETP = 0x6408 + DIOCSETE = 0x6403 + DIOCSETP = 0x6409 + DLT_AIRONET_HEADER = 0x78 + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_BACNET_MS_TP = 0xa5 + DLT_CHAOS = 0x5 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FDDI = 0xa + DLT_FRELAY = 0x6b + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_HDLC = 0x10 + DLT_HHDLC = 0x79 + DLT_HIPPI = 0xf + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xa2 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_PPPD = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAW = 0xc + DLT_RAWAF_MASK = 0x2240000 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EMPTY_SET = 0x0 + EMT_CPCOVF = 0x1 + EQUALITY_CHECK = 0x0 + EXTA = 0xe + EXTB = 0xf + FD_CLOEXEC = 0x1 + FD_NFDBITS = 0x40 + FD_SETSIZE = 0x10000 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FIORDCHK = 0x6603 + FLUSHALL = 0x1 + FLUSHDATA = 0x0 + FLUSHO = 0x2000 + F_ALLOCSP = 0xa + F_ALLOCSP64 = 0xa + F_BADFD = 0x2e + F_BLKSIZE = 0x13 + F_BLOCKS = 0x12 + F_CHKFL = 0x8 + F_COMPAT = 0x8 + F_DUP2FD = 0x9 + F_DUP2FD_CLOEXEC = 0x24 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x25 + F_FLOCK = 0x35 + F_FLOCK64 = 0x35 + F_FLOCKW = 0x36 + F_FLOCKW64 = 0x36 + F_FREESP = 0xb + F_FREESP64 = 0xb + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xe + F_GETLK64 = 0xe + F_GETOWN = 0x17 + F_GETXFL = 0x2d + F_HASREMOTELOCKS = 0x1a + F_ISSTREAM = 0xd + F_MANDDNY = 0x10 + F_MDACC = 0x20 + F_NODNY = 0x0 + F_NPRIV = 0x10 + F_OFD_GETLK = 0x2f + F_OFD_GETLK64 = 0x2f + F_OFD_SETLK = 0x30 + F_OFD_SETLK64 = 0x30 + F_OFD_SETLKW = 0x31 + F_OFD_SETLKW64 = 0x31 + F_PRIV = 0xf + F_QUOTACTL = 0x11 + F_RDACC = 0x1 + F_RDDNY = 0x1 + F_RDLCK = 0x1 + F_REVOKE = 0x19 + F_RMACC = 0x4 + F_RMDNY = 0x4 + F_RWACC = 0x3 + F_RWDNY = 0x3 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLK64_NBMAND = 0x2a + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETLK_NBMAND = 0x2a + F_SETOWN = 0x18 + F_SHARE = 0x28 + F_SHARE_NBMAND = 0x2b + F_UNLCK = 0x3 + F_UNLKSYS = 0x4 + F_UNSHARE = 0x29 + F_WRACC = 0x2 + F_WRDNY = 0x2 + F_WRLCK = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMP6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFF_ADDRCONF = 0x80000 + IFF_ALLMULTI = 0x200 + IFF_ANYCAST = 0x400000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x7f203003b5a + IFF_COS_ENABLED = 0x200000000 + IFF_DEBUG = 0x4 + IFF_DEPRECATED = 0x40000 + IFF_DHCPRUNNING = 0x4000 + IFF_DUPLICATE = 0x4000000000 + IFF_FAILED = 0x10000000 + IFF_FIXEDMTU = 0x1000000000 + IFF_INACTIVE = 0x40000000 + IFF_INTELLIGENT = 0x400 + IFF_IPMP = 0x8000000000 + IFF_IPMP_CANTCHANGE = 0x10000000 + IFF_IPMP_INVALID = 0x1ec200080 + IFF_IPV4 = 0x1000000 + IFF_IPV6 = 0x2000000 + IFF_L3PROTECT = 0x40000000000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x800 + IFF_MULTI_BCAST = 0x1000 + IFF_NOACCEPT = 0x4000000 + IFF_NOARP = 0x80 + IFF_NOFAILOVER = 0x8000000 + IFF_NOLINKLOCAL = 0x20000000000 + IFF_NOLOCAL = 0x20000 + IFF_NONUD = 0x200000 + IFF_NORTEXCH = 0x800000 + IFF_NOTRAILERS = 0x20 + IFF_NOXMIT = 0x10000 + IFF_OFFLINE = 0x80000000 + IFF_POINTOPOINT = 0x10 + IFF_PREFERRED = 0x400000000 + IFF_PRIVATE = 0x8000 + IFF_PROMISC = 0x100 + IFF_ROUTER = 0x100000 + IFF_RUNNING = 0x40 + IFF_STANDBY = 0x20000000 + IFF_TEMPORARY = 0x800000000 + IFF_UNNUMBERED = 0x2000 + IFF_UP = 0x1 + IFF_VIRTUAL = 0x2000000000 + IFF_VRRP = 0x10000000000 + IFF_XRESOLV = 0x100000000 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_6TO4 = 0xca + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IB = 0xc7 + IFT_IPV4 = 0xc8 + IFT_IPV6 = 0xc9 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_AUTOCONF_MASK = 0xffff0000 + IN_AUTOCONF_NET = 0xa9fe0000 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_CLASSE_NET = 0xffffffff + IN_LOOPBACKNET = 0x7f + IN_PRIVATE12_MASK = 0xfff00000 + IN_PRIVATE12_NET = 0xac100000 + IN_PRIVATE16_MASK = 0xffff0000 + IN_PRIVATE16_NET = 0xc0a80000 + IN_PRIVATE8_MASK = 0xff000000 + IN_PRIVATE8_NET = 0xa000000 + IPPROTO_AH = 0x33 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x4 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_HELLO = 0x3f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPV6 = 0x29 + IPPROTO_MAX = 0x100 + IPPROTO_ND = 0x4d + IPPROTO_NONE = 0x3b + IPPROTO_OSPF = 0x59 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_UDP = 0x11 + IPV6_ADD_MEMBERSHIP = 0x9 + IPV6_BOUND_IF = 0x41 + IPV6_CHECKSUM = 0x18 + IPV6_DONTFRAG = 0x21 + IPV6_DROP_MEMBERSHIP = 0xa + IPV6_DSTOPTS = 0xf + IPV6_FLOWINFO_FLOWLABEL = 0xffff0f00 + IPV6_FLOWINFO_TCLASS = 0xf00f + IPV6_HOPLIMIT = 0xc + IPV6_HOPOPTS = 0xe + IPV6_JOIN_GROUP = 0x9 + IPV6_LEAVE_GROUP = 0xa + IPV6_MULTICAST_HOPS = 0x7 + IPV6_MULTICAST_IF = 0x6 + IPV6_MULTICAST_LOOP = 0x8 + IPV6_NEXTHOP = 0xd + IPV6_PAD1_OPT = 0x0 + IPV6_PATHMTU = 0x25 + IPV6_PKTINFO = 0xb + IPV6_PREFER_SRC_CGA = 0x20 + IPV6_PREFER_SRC_CGADEFAULT = 0x10 + IPV6_PREFER_SRC_CGAMASK = 0x30 + IPV6_PREFER_SRC_COA = 0x2 + IPV6_PREFER_SRC_DEFAULT = 0x15 + IPV6_PREFER_SRC_HOME = 0x1 + IPV6_PREFER_SRC_MASK = 0x3f + IPV6_PREFER_SRC_MIPDEFAULT = 0x1 + IPV6_PREFER_SRC_MIPMASK = 0x3 + IPV6_PREFER_SRC_NONCGA = 0x10 + IPV6_PREFER_SRC_PUBLIC = 0x4 + IPV6_PREFER_SRC_TMP = 0x8 + IPV6_PREFER_SRC_TMPDEFAULT = 0x4 + IPV6_PREFER_SRC_TMPMASK = 0xc + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x13 + IPV6_RECVHOPOPTS = 0x14 + IPV6_RECVPATHMTU = 0x24 + IPV6_RECVPKTINFO = 0x12 + IPV6_RECVRTHDR = 0x16 + IPV6_RECVRTHDRDSTOPTS = 0x17 + IPV6_RECVTCLASS = 0x19 + IPV6_RTHDR = 0x10 + IPV6_RTHDRDSTOPTS = 0x11 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SEC_OPT = 0x22 + IPV6_SRC_PREFERENCES = 0x23 + IPV6_TCLASS = 0x26 + IPV6_UNICAST_HOPS = 0x5 + IPV6_UNSPEC_SRC = 0x42 + IPV6_USE_MIN_MTU = 0x20 + IPV6_V6ONLY = 0x27 + IP_ADD_MEMBERSHIP = 0x13 + IP_ADD_SOURCE_MEMBERSHIP = 0x17 + IP_BLOCK_SOURCE = 0x15 + IP_BOUND_IF = 0x41 + IP_BROADCAST = 0x106 + IP_BROADCAST_TTL = 0x43 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DHCPINIT_IF = 0x45 + IP_DONTFRAG = 0x1b + IP_DONTROUTE = 0x105 + IP_DROP_MEMBERSHIP = 0x14 + IP_DROP_SOURCE_MEMBERSHIP = 0x18 + IP_HDRINCL = 0x2 + IP_MAXPACKET = 0xffff + IP_MF = 0x2000 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x10 + IP_MULTICAST_LOOP = 0x12 + IP_MULTICAST_TTL = 0x11 + IP_NEXTHOP = 0x19 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x9 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVSLLA = 0xa + IP_RECVTOS = 0xc + IP_RECVTTL = 0xb + IP_RETOPTS = 0x8 + IP_REUSEADDR = 0x104 + IP_SEC_OPT = 0x22 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x16 + IP_UNSPEC_SRC = 0x42 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_ACCESS_DEFAULT = 0x6 + MADV_ACCESS_LWP = 0x7 + MADV_ACCESS_MANY = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NORMAL = 0x0 + MADV_PURGE = 0x9 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_32BIT = 0x80 + MAP_ALIGN = 0x200 + MAP_ANON = 0x100 + MAP_ANONYMOUS = 0x100 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_INITDATA = 0x800 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_TEXT = 0x400 + MAP_TYPE = 0xf + MCAST_BLOCK_SOURCE = 0x2b + MCAST_EXCLUDE = 0x2 + MCAST_INCLUDE = 0x1 + MCAST_JOIN_GROUP = 0x29 + MCAST_JOIN_SOURCE_GROUP = 0x2d + MCAST_LEAVE_GROUP = 0x2a + MCAST_LEAVE_SOURCE_GROUP = 0x2e + MCAST_UNBLOCK_SOURCE = 0x2c + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_CTRUNC = 0x10 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_DUPCTRL = 0x800 + MSG_EOR = 0x8 + MSG_MAXIOVLEN = 0x10 + MSG_NOSIGNAL = 0x200 + MSG_NOTIFICATION = 0x100 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x20 + MSG_WAITALL = 0x40 + MSG_XPG4_2 = 0x8000 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_OLDSYNC = 0x0 + MS_SYNC = 0x4 + M_FLUSH = 0x86 + NAME_MAX = 0xff + NEWDEV = 0x1 + NFDBITS = 0x40 + NL0 = 0x0 + NL1 = 0x100 + NLDLY = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + OLDDEV = 0x0 + ONBITSMAJOR = 0x7 + ONBITSMINOR = 0x8 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPENFAIL = -0x1 + OPOST = 0x1 + O_ACCMODE = 0x600003 + O_APPEND = 0x8 + O_CLOEXEC = 0x800000 + O_CREAT = 0x100 + O_DIRECT = 0x2000000 + O_DIRECTORY = 0x1000000 + O_DSYNC = 0x40 + O_EXCL = 0x400 + O_EXEC = 0x400000 + O_LARGEFILE = 0x2000 + O_NDELAY = 0x4 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x20000 + O_NOLINKS = 0x40000 + O_NONBLOCK = 0x80 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x8000 + O_SEARCH = 0x200000 + O_SIOCGIFCONF = -0x3ff796ec + O_SIOCGLIFCONF = -0x3fef9688 + O_SYNC = 0x10 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + O_XATTR = 0x4000 + PARENB = 0x100 + PAREXT = 0x100000 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0x6 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xfffffffffffffffd + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x9 + RTAX_NETMASK = 0x2 + RTAX_SRC = 0x8 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTA_NUMBITS = 0x9 + RTA_SRC = 0x100 + RTF_BLACKHOLE = 0x1000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INDIRECT = 0x40000 + RTF_KERNEL = 0x80000 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_MULTIRT = 0x10000 + RTF_PRIVATE = 0x2000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_REJECT = 0x8 + RTF_SETSRC = 0x20000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTF_ZONE = 0x100000 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_CHGADDR = 0xf + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_FREEADDR = 0x10 + RTM_GET = 0x4 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_VERSION = 0x3 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RT_AWARE = 0x1 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_RIGHTS = 0x1010 + SCM_TIMESTAMP = 0x1013 + SCM_UCRED = 0x1012 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIG2STR_MAX = 0x20 + SIOCADDMULTI = -0x7fdf96cf + SIOCADDRT = -0x7fcf8df6 + SIOCATMARK = 0x40047307 + SIOCDARP = -0x7fdb96e0 + SIOCDELMULTI = -0x7fdf96ce + SIOCDELRT = -0x7fcf8df5 + SIOCDXARP = -0x7fff9658 + SIOCGARP = -0x3fdb96e1 + SIOCGDSTINFO = -0x3fff965c + SIOCGENADDR = -0x3fdf96ab + SIOCGENPSTATS = -0x3fdf96c7 + SIOCGETLSGCNT = -0x3fef8deb + SIOCGETNAME = 0x40107334 + SIOCGETPEER = 0x40107335 + SIOCGETPROP = -0x3fff8f44 + SIOCGETSGCNT = -0x3feb8deb + SIOCGETSYNC = -0x3fdf96d3 + SIOCGETVIFCNT = -0x3feb8dec + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = -0x3fdf96f3 + SIOCGIFBRDADDR = -0x3fdf96e9 + SIOCGIFCONF = -0x3ff796a4 + SIOCGIFDSTADDR = -0x3fdf96f1 + SIOCGIFFLAGS = -0x3fdf96ef + SIOCGIFHWADDR = -0x3fdf9647 + SIOCGIFINDEX = -0x3fdf96a6 + SIOCGIFMEM = -0x3fdf96ed + SIOCGIFMETRIC = -0x3fdf96e5 + SIOCGIFMTU = -0x3fdf96ea + SIOCGIFMUXID = -0x3fdf96a8 + SIOCGIFNETMASK = -0x3fdf96e7 + SIOCGIFNUM = 0x40046957 + SIOCGIP6ADDRPOLICY = -0x3fff965e + SIOCGIPMSFILTER = -0x3ffb964c + SIOCGLIFADDR = -0x3f87968f + SIOCGLIFBINDING = -0x3f879666 + SIOCGLIFBRDADDR = -0x3f879685 + SIOCGLIFCONF = -0x3fef965b + SIOCGLIFDADSTATE = -0x3f879642 + SIOCGLIFDSTADDR = -0x3f87968d + SIOCGLIFFLAGS = -0x3f87968b + SIOCGLIFGROUPINFO = -0x3f4b9663 + SIOCGLIFGROUPNAME = -0x3f879664 + SIOCGLIFHWADDR = -0x3f879640 + SIOCGLIFINDEX = -0x3f87967b + SIOCGLIFLNKINFO = -0x3f879674 + SIOCGLIFMETRIC = -0x3f879681 + SIOCGLIFMTU = -0x3f879686 + SIOCGLIFMUXID = -0x3f87967d + SIOCGLIFNETMASK = -0x3f879683 + SIOCGLIFNUM = -0x3ff3967e + SIOCGLIFSRCOF = -0x3fef964f + SIOCGLIFSUBNET = -0x3f879676 + SIOCGLIFTOKEN = -0x3f879678 + SIOCGLIFUSESRC = -0x3f879651 + SIOCGLIFZONE = -0x3f879656 + SIOCGLOWAT = 0x40047303 + SIOCGMSFILTER = -0x3ffb964e + SIOCGPGRP = 0x40047309 + SIOCGSTAMP = -0x3fef9646 + SIOCGXARP = -0x3fff9659 + SIOCIFDETACH = -0x7fdf96c8 + SIOCILB = -0x3ffb9645 + SIOCLIFADDIF = -0x3f879691 + SIOCLIFDELND = -0x7f879673 + SIOCLIFGETND = -0x3f879672 + SIOCLIFREMOVEIF = -0x7f879692 + SIOCLIFSETND = -0x7f879671 + SIOCLOWER = -0x7fdf96d7 + SIOCSARP = -0x7fdb96e2 + SIOCSCTPGOPT = -0x3fef9653 + SIOCSCTPPEELOFF = -0x3ffb9652 + SIOCSCTPSOPT = -0x7fef9654 + SIOCSENABLESDP = -0x3ffb9649 + SIOCSETPROP = -0x7ffb8f43 + SIOCSETSYNC = -0x7fdf96d4 + SIOCSHIWAT = -0x7ffb8d00 + SIOCSIFADDR = -0x7fdf96f4 + SIOCSIFBRDADDR = -0x7fdf96e8 + SIOCSIFDSTADDR = -0x7fdf96f2 + SIOCSIFFLAGS = -0x7fdf96f0 + SIOCSIFINDEX = -0x7fdf96a5 + SIOCSIFMEM = -0x7fdf96ee + SIOCSIFMETRIC = -0x7fdf96e4 + SIOCSIFMTU = -0x7fdf96eb + SIOCSIFMUXID = -0x7fdf96a7 + SIOCSIFNAME = -0x7fdf96b7 + SIOCSIFNETMASK = -0x7fdf96e6 + SIOCSIP6ADDRPOLICY = -0x7fff965d + SIOCSIPMSFILTER = -0x7ffb964b + SIOCSLGETREQ = -0x3fdf96b9 + SIOCSLIFADDR = -0x7f879690 + SIOCSLIFBRDADDR = -0x7f879684 + SIOCSLIFDSTADDR = -0x7f87968e + SIOCSLIFFLAGS = -0x7f87968c + SIOCSLIFGROUPNAME = -0x7f879665 + SIOCSLIFINDEX = -0x7f87967a + SIOCSLIFLNKINFO = -0x7f879675 + SIOCSLIFMETRIC = -0x7f879680 + SIOCSLIFMTU = -0x7f879687 + SIOCSLIFMUXID = -0x7f87967c + SIOCSLIFNAME = -0x3f87967f + SIOCSLIFNETMASK = -0x7f879682 + SIOCSLIFPREFIX = -0x3f879641 + SIOCSLIFSUBNET = -0x7f879677 + SIOCSLIFTOKEN = -0x7f879679 + SIOCSLIFUSESRC = -0x7f879650 + SIOCSLIFZONE = -0x7f879655 + SIOCSLOWAT = -0x7ffb8cfe + SIOCSLSTAT = -0x7fdf96b8 + SIOCSMSFILTER = -0x7ffb964d + SIOCSPGRP = -0x7ffb8cf8 + SIOCSPROMISC = -0x7ffb96d0 + SIOCSQPTR = -0x3ffb9648 + SIOCSSDSTATS = -0x3fdf96d2 + SIOCSSESTATS = -0x3fdf96d1 + SIOCSXARP = -0x7fff965a + SIOCTMYADDR = -0x3ff79670 + SIOCTMYSITE = -0x3ff7966e + SIOCTONLINK = -0x3ff7966f + SIOCUPPER = -0x7fdf96d8 + SIOCX25RCV = -0x3fdf96c4 + SIOCX25TBL = -0x3fdf96c3 + SIOCX25XMT = -0x3fdf96c5 + SIOCXPROTO = 0x20007337 + SOCK_CLOEXEC = 0x80000 + SOCK_DGRAM = 0x1 + SOCK_NDELAY = 0x200000 + SOCK_NONBLOCK = 0x100000 + SOCK_RAW = 0x4 + SOCK_RDM = 0x5 + SOCK_SEQPACKET = 0x6 + SOCK_STREAM = 0x2 + SOCK_TYPE_MASK = 0xffff + SOL_FILTER = 0xfffc + SOL_PACKET = 0xfffd + SOL_ROUTE = 0xfffe + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ALL = 0x3f + SO_ALLZONES = 0x1014 + SO_ANON_MLP = 0x100a + SO_ATTACH_FILTER = 0x40000001 + SO_BAND = 0x4000 + SO_BROADCAST = 0x20 + SO_COPYOPT = 0x80000 + SO_DEBUG = 0x1 + SO_DELIM = 0x8000 + SO_DETACH_FILTER = 0x40000002 + SO_DGRAM_ERRIND = 0x200 + SO_DOMAIN = 0x100c + SO_DONTLINGER = -0x81 + SO_DONTROUTE = 0x10 + SO_ERROPT = 0x40000 + SO_ERROR = 0x1007 + SO_EXCLBIND = 0x1015 + SO_HIWAT = 0x10 + SO_ISNTTY = 0x800 + SO_ISTTY = 0x400 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOWAT = 0x20 + SO_MAC_EXEMPT = 0x100b + SO_MAC_IMPLICIT = 0x1016 + SO_MAXBLK = 0x100000 + SO_MAXPSZ = 0x8 + SO_MINPSZ = 0x4 + SO_MREADOFF = 0x80 + SO_MREADON = 0x40 + SO_NDELOFF = 0x200 + SO_NDELON = 0x100 + SO_NODELIM = 0x10000 + SO_OOBINLINE = 0x100 + SO_PROTOTYPE = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVPSH = 0x100d + SO_RCVTIMEO = 0x1006 + SO_READOPT = 0x1 + SO_RECVUCRED = 0x400 + SO_REUSEADDR = 0x4 + SO_SECATTR = 0x1011 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_STRHOLD = 0x20000 + SO_TAIL = 0x200000 + SO_TIMESTAMP = 0x1013 + SO_TONSTOP = 0x2000 + SO_TOSTOP = 0x1000 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_VRRP = 0x1017 + SO_WROFF = 0x2 + S_ENFMT = 0x400 + S_IAMB = 0x1ff + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFDOOR = 0xd000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFNAM = 0x5000 + S_IFPORT = 0xe000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_INSEM = 0x1 + S_INSHD = 0x2 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x5407 + TCGETA = 0x5401 + TCGETS = 0x540d + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_ABORT_THRESHOLD = 0x11 + TCP_ANONPRIVBIND = 0x20 + TCP_CONGESTION = 0x25 + TCP_CONN_ABORT_THRESHOLD = 0x13 + TCP_CONN_NOTIFY_THRESHOLD = 0x12 + TCP_CORK = 0x18 + TCP_EXCLBIND = 0x21 + TCP_INIT_CWND = 0x15 + TCP_KEEPALIVE = 0x8 + TCP_KEEPALIVE_ABORT_THRESHOLD = 0x17 + TCP_KEEPALIVE_THRESHOLD = 0x16 + TCP_KEEPCNT = 0x23 + TCP_KEEPIDLE = 0x22 + TCP_KEEPINTVL = 0x24 + TCP_LINGER2 = 0x1c + TCP_MAXSEG = 0x2 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOTIFY_THRESHOLD = 0x10 + TCP_RECVDSTADDR = 0x14 + TCP_RTO_INITIAL = 0x19 + TCP_RTO_MAX = 0x1b + TCP_RTO_MIN = 0x1a + TCSAFLUSH = 0x5410 + TCSBRK = 0x5405 + TCSETA = 0x5402 + TCSETAF = 0x5404 + TCSETAW = 0x5403 + TCSETS = 0x540e + TCSETSF = 0x5410 + TCSETSW = 0x540f + TCXONC = 0x5406 + TIMER_ABSTIME = 0x1 + TIMER_RELTIME = 0x0 + TIOC = 0x5400 + TIOCCBRK = 0x747a + TIOCCDTR = 0x7478 + TIOCCILOOP = 0x746c + TIOCEXCL = 0x740d + TIOCFLUSH = 0x7410 + TIOCGETC = 0x7412 + TIOCGETD = 0x7400 + TIOCGETP = 0x7408 + TIOCGLTC = 0x7474 + TIOCGPGRP = 0x7414 + TIOCGPPS = 0x547d + TIOCGPPSEV = 0x547f + TIOCGSID = 0x7416 + TIOCGSOFTCAR = 0x5469 + TIOCGWINSZ = 0x5468 + TIOCHPCL = 0x7402 + TIOCKBOF = 0x5409 + TIOCKBON = 0x5408 + TIOCLBIC = 0x747e + TIOCLBIS = 0x747f + TIOCLGET = 0x747c + TIOCLSET = 0x747d + TIOCMBIC = 0x741c + TIOCMBIS = 0x741b + TIOCMGET = 0x741d + TIOCMSET = 0x741a + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x7471 + TIOCNXCL = 0x740e + TIOCOUTQ = 0x7473 + TIOCREMOTE = 0x741e + TIOCSBRK = 0x747b + TIOCSCTTY = 0x7484 + TIOCSDTR = 0x7479 + TIOCSETC = 0x7411 + TIOCSETD = 0x7401 + TIOCSETN = 0x740a + TIOCSETP = 0x7409 + TIOCSIGNAL = 0x741f + TIOCSILOOP = 0x746d + TIOCSLTC = 0x7475 + TIOCSPGRP = 0x7415 + TIOCSPPS = 0x547e + TIOCSSOFTCAR = 0x546a + TIOCSTART = 0x746e + TIOCSTI = 0x7417 + TIOCSTOP = 0x746f + TIOCSWINSZ = 0x5467 + TOSTOP = 0x100 + UTIME_NOW = -0x1 + UTIME_OMIT = -0x2 + VCEOF = 0x8 + VCEOL = 0x9 + VDISCARD = 0xd + VDSUSP = 0xb + VEOF = 0x4 + VEOL = 0x5 + VEOL2 = 0x6 + VERASE = 0x2 + VERASE2 = 0x11 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMIN = 0x4 + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTATUS = 0x10 + VSTOP = 0x9 + VSUSP = 0xa + VSWTCH = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WCONTFLG = 0xffff + WCONTINUED = 0x8 + WCOREFLG = 0x80 + WEXITED = 0x1 + WNOHANG = 0x40 + WNOWAIT = 0x80 + WOPTMASK = 0xcf + WRAP = 0x20000 + WSIGMASK = 0x7f + WSTOPFLG = 0x7f + WSTOPPED = 0x4 + WTRAPPED = 0x2 + WUNTRACED = 0x4 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x7d) + EADDRNOTAVAIL = syscall.Errno(0x7e) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x7c) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x95) + EBADE = syscall.Errno(0x32) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x51) + EBADMSG = syscall.Errno(0x4d) + EBADR = syscall.Errno(0x33) + EBADRQC = syscall.Errno(0x36) + EBADSLT = syscall.Errno(0x37) + EBFONT = syscall.Errno(0x39) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x2f) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x25) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x82) + ECONNREFUSED = syscall.Errno(0x92) + ECONNRESET = syscall.Errno(0x83) + EDEADLK = syscall.Errno(0x2d) + EDEADLOCK = syscall.Errno(0x38) + EDESTADDRREQ = syscall.Errno(0x60) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x31) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x93) + EHOSTUNREACH = syscall.Errno(0x94) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x58) + EINPROGRESS = syscall.Errno(0x96) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x85) + EISDIR = syscall.Errno(0x15) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELIBACC = syscall.Errno(0x53) + ELIBBAD = syscall.Errno(0x54) + ELIBEXEC = syscall.Errno(0x57) + ELIBMAX = syscall.Errno(0x56) + ELIBSCN = syscall.Errno(0x55) + ELNRNG = syscall.Errno(0x29) + ELOCKUNMAPPED = syscall.Errno(0x48) + ELOOP = syscall.Errno(0x5a) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x61) + EMULTIHOP = syscall.Errno(0x4a) + ENAMETOOLONG = syscall.Errno(0x4e) + ENETDOWN = syscall.Errno(0x7f) + ENETRESET = syscall.Errno(0x81) + ENETUNREACH = syscall.Errno(0x80) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x35) + ENOBUFS = syscall.Errno(0x84) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x2e) + ENOLINK = syscall.Errno(0x43) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x23) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x63) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x59) + ENOTACTIVE = syscall.Errno(0x49) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x86) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x5d) + ENOTRECOVERABLE = syscall.Errno(0x3b) + ENOTSOCK = syscall.Errno(0x5f) + ENOTSUP = syscall.Errno(0x30) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x50) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x7a) + EOVERFLOW = syscall.Errno(0x4f) + EOWNERDEAD = syscall.Errno(0x3a) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x7b) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x78) + EPROTOTYPE = syscall.Errno(0x62) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x52) + EREMOTE = syscall.Errno(0x42) + ERESTART = syscall.Errno(0x5b) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x8f) + ESOCKTNOSUPPORT = syscall.Errno(0x79) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x97) + ESTRPIPE = syscall.Errno(0x5c) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x91) + ETOOMANYREFS = syscall.Errno(0x90) + ETXTBSY = syscall.Errno(0x1a) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x5e) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x34) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCANCEL = syscall.Signal(0x24) + SIGCHLD = syscall.Signal(0x12) + SIGCLD = syscall.Signal(0x12) + SIGCONT = syscall.Signal(0x19) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGFREEZE = syscall.Signal(0x22) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x29) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x16) + SIGIOT = syscall.Signal(0x6) + SIGJVM1 = syscall.Signal(0x27) + SIGJVM2 = syscall.Signal(0x28) + SIGKILL = syscall.Signal(0x9) + SIGLOST = syscall.Signal(0x25) + SIGLWP = syscall.Signal(0x21) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x16) + SIGPROF = syscall.Signal(0x1d) + SIGPWR = syscall.Signal(0x13) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x17) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHAW = syscall.Signal(0x23) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x18) + SIGTTIN = syscall.Signal(0x1a) + SIGTTOU = syscall.Signal(0x1b) + SIGURG = syscall.Signal(0x15) + SIGUSR1 = syscall.Signal(0x10) + SIGUSR2 = syscall.Signal(0x11) + SIGVTALRM = syscall.Signal(0x1c) + SIGWAITING = syscall.Signal(0x20) + SIGWINCH = syscall.Signal(0x14) + SIGXCPU = syscall.Signal(0x1e) + SIGXFSZ = syscall.Signal(0x1f) + SIGXRES = syscall.Signal(0x26) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "not owner"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "I/O error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "arg list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file number"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "not enough space"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "file table overflow"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "ENOMSG", "no message of desired type"}, + {36, "EIDRM", "identifier removed"}, + {37, "ECHRNG", "channel number out of range"}, + {38, "EL2NSYNC", "level 2 not synchronized"}, + {39, "EL3HLT", "level 3 halted"}, + {40, "EL3RST", "level 3 reset"}, + {41, "ELNRNG", "link number out of range"}, + {42, "EUNATCH", "protocol driver not attached"}, + {43, "ENOCSI", "no CSI structure available"}, + {44, "EL2HLT", "level 2 halted"}, + {45, "EDEADLK", "deadlock situation detected/avoided"}, + {46, "ENOLCK", "no record locks available"}, + {47, "ECANCELED", "operation canceled"}, + {48, "ENOTSUP", "operation not supported"}, + {49, "EDQUOT", "disc quota exceeded"}, + {50, "EBADE", "bad exchange descriptor"}, + {51, "EBADR", "bad request descriptor"}, + {52, "EXFULL", "message tables full"}, + {53, "ENOANO", "anode table overflow"}, + {54, "EBADRQC", "bad request code"}, + {55, "EBADSLT", "invalid slot"}, + {56, "EDEADLOCK", "file locking deadlock"}, + {57, "EBFONT", "bad font file format"}, + {58, "EOWNERDEAD", "owner of the lock died"}, + {59, "ENOTRECOVERABLE", "lock is not recoverable"}, + {60, "ENOSTR", "not a stream device"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of stream resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {72, "ELOCKUNMAPPED", "locked lock was unmapped "}, + {73, "ENOTACTIVE", "facility is not active"}, + {74, "EMULTIHOP", "multihop attempted"}, + {77, "EBADMSG", "not a data message"}, + {78, "ENAMETOOLONG", "file name too long"}, + {79, "EOVERFLOW", "value too large for defined data type"}, + {80, "ENOTUNIQ", "name not unique on network"}, + {81, "EBADFD", "file descriptor in bad state"}, + {82, "EREMCHG", "remote address changed"}, + {83, "ELIBACC", "can not access a needed shared library"}, + {84, "ELIBBAD", "accessing a corrupted shared library"}, + {85, "ELIBSCN", ".lib section in a.out corrupted"}, + {86, "ELIBMAX", "attempting to link in more shared libraries than system limit"}, + {87, "ELIBEXEC", "can not exec a shared library directly"}, + {88, "EILSEQ", "illegal byte sequence"}, + {89, "ENOSYS", "operation not applicable"}, + {90, "ELOOP", "number of symbolic links encountered during path name traversal exceeds MAXSYMLINKS"}, + {91, "ERESTART", "error 91"}, + {92, "ESTRPIPE", "error 92"}, + {93, "ENOTEMPTY", "directory not empty"}, + {94, "EUSERS", "too many users"}, + {95, "ENOTSOCK", "socket operation on non-socket"}, + {96, "EDESTADDRREQ", "destination address required"}, + {97, "EMSGSIZE", "message too long"}, + {98, "EPROTOTYPE", "protocol wrong type for socket"}, + {99, "ENOPROTOOPT", "option not supported by protocol"}, + {120, "EPROTONOSUPPORT", "protocol not supported"}, + {121, "ESOCKTNOSUPPORT", "socket type not supported"}, + {122, "EOPNOTSUPP", "operation not supported on transport endpoint"}, + {123, "EPFNOSUPPORT", "protocol family not supported"}, + {124, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {125, "EADDRINUSE", "address already in use"}, + {126, "EADDRNOTAVAIL", "cannot assign requested address"}, + {127, "ENETDOWN", "network is down"}, + {128, "ENETUNREACH", "network is unreachable"}, + {129, "ENETRESET", "network dropped connection because of reset"}, + {130, "ECONNABORTED", "software caused connection abort"}, + {131, "ECONNRESET", "connection reset by peer"}, + {132, "ENOBUFS", "no buffer space available"}, + {133, "EISCONN", "transport endpoint is already connected"}, + {134, "ENOTCONN", "transport endpoint is not connected"}, + {143, "ESHUTDOWN", "cannot send after socket shutdown"}, + {144, "ETOOMANYREFS", "too many references: cannot splice"}, + {145, "ETIMEDOUT", "connection timed out"}, + {146, "ECONNREFUSED", "connection refused"}, + {147, "EHOSTDOWN", "host is down"}, + {148, "EHOSTUNREACH", "no route to host"}, + {149, "EALREADY", "operation already in progress"}, + {150, "EINPROGRESS", "operation now in progress"}, + {151, "ESTALE", "stale NFS file handle"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal Instruction"}, + {5, "SIGTRAP", "trace/Breakpoint Trap"}, + {6, "SIGABRT", "abort"}, + {7, "SIGEMT", "emulation Trap"}, + {8, "SIGFPE", "arithmetic Exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus Error"}, + {11, "SIGSEGV", "segmentation Fault"}, + {12, "SIGSYS", "bad System Call"}, + {13, "SIGPIPE", "broken Pipe"}, + {14, "SIGALRM", "alarm Clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGUSR1", "user Signal 1"}, + {17, "SIGUSR2", "user Signal 2"}, + {18, "SIGCHLD", "child Status Changed"}, + {19, "SIGPWR", "power-Fail/Restart"}, + {20, "SIGWINCH", "window Size Change"}, + {21, "SIGURG", "urgent Socket Condition"}, + {22, "SIGIO", "pollable Event"}, + {23, "SIGSTOP", "stopped (signal)"}, + {24, "SIGTSTP", "stopped (user)"}, + {25, "SIGCONT", "continued"}, + {26, "SIGTTIN", "stopped (tty input)"}, + {27, "SIGTTOU", "stopped (tty output)"}, + {28, "SIGVTALRM", "virtual Timer Expired"}, + {29, "SIGPROF", "profiling Timer Expired"}, + {30, "SIGXCPU", "cpu Limit Exceeded"}, + {31, "SIGXFSZ", "file Size Limit Exceeded"}, + {32, "SIGWAITING", "no runnable lwp"}, + {33, "SIGLWP", "inter-lwp signal"}, + {34, "SIGFREEZE", "checkpoint Freeze"}, + {35, "SIGTHAW", "checkpoint Thaw"}, + {36, "SIGCANCEL", "thread Cancellation"}, + {37, "SIGLOST", "resource Lost"}, + {38, "SIGXRES", "resource Control Exceeded"}, + {39, "SIGJVM1", "reserved for JVM 1"}, + {40, "SIGJVM2", "reserved for JVM 2"}, + {41, "SIGINFO", "information Request"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go new file mode 100644 index 0000000..fc7d050 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go @@ -0,0 +1,860 @@ +// 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 zos && s390x +// +build zos,s390x + +// Hand edited based on zerrors_linux_s390x.go +// TODO: auto-generate. + +package unix + +const ( + BRKINT = 0x0001 + CLOCK_MONOTONIC = 0x1 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_THREAD_CPUTIME_ID = 0x3 + CS8 = 0x0030 + CSIZE = 0x0030 + ECHO = 0x00000008 + ECHONL = 0x00000001 + FD_CLOEXEC = 0x01 + FD_CLOFORK = 0x02 + FNDELAY = 0x04 + F_CLOSFD = 9 + F_CONTROL_CVT = 13 + F_DUPFD = 0 + F_DUPFD2 = 8 + F_GETFD = 1 + F_GETFL = 259 + F_GETLK = 5 + F_GETOWN = 10 + F_OK = 0x0 + F_RDLCK = 1 + F_SETFD = 2 + F_SETFL = 4 + F_SETLK = 6 + F_SETLKW = 7 + F_SETOWN = 11 + F_SETTAG = 12 + F_UNLCK = 3 + F_WRLCK = 2 + FSTYPE_ZFS = 0xe9 //"Z" + FSTYPE_HFS = 0xc8 //"H" + FSTYPE_NFS = 0xd5 //"N" + FSTYPE_TFS = 0xe3 //"T" + FSTYPE_AUTOMOUNT = 0xc1 //"A" + IP6F_MORE_FRAG = 0x0001 + IP6F_OFF_MASK = 0xfff8 + IP6F_RESERVED_MASK = 0x0006 + IP6OPT_JUMBO = 0xc2 + IP6OPT_JUMBO_LEN = 6 + IP6OPT_MUTABLE = 0x20 + IP6OPT_NSAP_ADDR = 0xc3 + IP6OPT_PAD1 = 0x00 + IP6OPT_PADN = 0x01 + IP6OPT_ROUTER_ALERT = 0x05 + IP6OPT_TUNNEL_LIMIT = 0x04 + IP6OPT_TYPE_DISCARD = 0x40 + IP6OPT_TYPE_FORCEICMP = 0x80 + IP6OPT_TYPE_ICMP = 0xc0 + IP6OPT_TYPE_SKIP = 0x00 + IP6_ALERT_AN = 0x0002 + IP6_ALERT_MLD = 0x0000 + IP6_ALERT_RSVP = 0x0001 + IPPORT_RESERVED = 1024 + IPPORT_USERRESERVED = 5000 + IPPROTO_AH = 51 + SOL_AH = 51 + IPPROTO_DSTOPTS = 60 + SOL_DSTOPTS = 60 + IPPROTO_EGP = 8 + SOL_EGP = 8 + IPPROTO_ESP = 50 + SOL_ESP = 50 + IPPROTO_FRAGMENT = 44 + SOL_FRAGMENT = 44 + IPPROTO_GGP = 2 + SOL_GGP = 2 + IPPROTO_HOPOPTS = 0 + SOL_HOPOPTS = 0 + IPPROTO_ICMP = 1 + SOL_ICMP = 1 + IPPROTO_ICMPV6 = 58 + SOL_ICMPV6 = 58 + IPPROTO_IDP = 22 + SOL_IDP = 22 + IPPROTO_IP = 0 + SOL_IP = 0 + IPPROTO_IPV6 = 41 + SOL_IPV6 = 41 + IPPROTO_MAX = 256 + SOL_MAX = 256 + IPPROTO_NONE = 59 + SOL_NONE = 59 + IPPROTO_PUP = 12 + SOL_PUP = 12 + IPPROTO_RAW = 255 + SOL_RAW = 255 + IPPROTO_ROUTING = 43 + SOL_ROUTING = 43 + IPPROTO_TCP = 6 + SOL_TCP = 6 + IPPROTO_UDP = 17 + SOL_UDP = 17 + IPV6_ADDR_PREFERENCES = 32 + IPV6_CHECKSUM = 19 + IPV6_DONTFRAG = 29 + IPV6_DSTOPTS = 23 + IPV6_HOPLIMIT = 11 + IPV6_HOPOPTS = 22 + IPV6_JOIN_GROUP = 5 + IPV6_LEAVE_GROUP = 6 + IPV6_MULTICAST_HOPS = 9 + IPV6_MULTICAST_IF = 7 + IPV6_MULTICAST_LOOP = 4 + IPV6_NEXTHOP = 20 + IPV6_PATHMTU = 12 + IPV6_PKTINFO = 13 + IPV6_PREFER_SRC_CGA = 0x10 + IPV6_PREFER_SRC_COA = 0x02 + IPV6_PREFER_SRC_HOME = 0x01 + IPV6_PREFER_SRC_NONCGA = 0x20 + IPV6_PREFER_SRC_PUBLIC = 0x08 + IPV6_PREFER_SRC_TMP = 0x04 + IPV6_RECVDSTOPTS = 28 + IPV6_RECVHOPLIMIT = 14 + IPV6_RECVHOPOPTS = 26 + IPV6_RECVPATHMTU = 16 + IPV6_RECVPKTINFO = 15 + IPV6_RECVRTHDR = 25 + IPV6_RECVTCLASS = 31 + IPV6_RTHDR = 21 + IPV6_RTHDRDSTOPTS = 24 + IPV6_RTHDR_TYPE_0 = 0 + IPV6_TCLASS = 30 + IPV6_UNICAST_HOPS = 3 + IPV6_USE_MIN_MTU = 18 + IPV6_V6ONLY = 10 + IP_ADD_MEMBERSHIP = 5 + IP_ADD_SOURCE_MEMBERSHIP = 12 + IP_BLOCK_SOURCE = 10 + IP_DEFAULT_MULTICAST_LOOP = 1 + IP_DEFAULT_MULTICAST_TTL = 1 + IP_DROP_MEMBERSHIP = 6 + IP_DROP_SOURCE_MEMBERSHIP = 13 + IP_MAX_MEMBERSHIPS = 20 + IP_MULTICAST_IF = 7 + IP_MULTICAST_LOOP = 4 + IP_MULTICAST_TTL = 3 + IP_OPTIONS = 1 + IP_PKTINFO = 101 + IP_RECVPKTINFO = 102 + IP_TOS = 2 + IP_TTL = 3 + IP_UNBLOCK_SOURCE = 11 + ICANON = 0x0010 + ICMP6_FILTER = 0x26 + ICRNL = 0x0002 + IEXTEN = 0x0020 + IGNBRK = 0x0004 + IGNCR = 0x0008 + INLCR = 0x0020 + ISIG = 0x0040 + ISTRIP = 0x0080 + IXON = 0x0200 + IXOFF = 0x0100 + LOCK_SH = 0x1 // Not exist on zOS + LOCK_EX = 0x2 // Not exist on zOS + LOCK_NB = 0x4 // Not exist on zOS + LOCK_UN = 0x8 // Not exist on zOS + POLLIN = 0x0003 + POLLOUT = 0x0004 + POLLPRI = 0x0010 + POLLERR = 0x0020 + POLLHUP = 0x0040 + POLLNVAL = 0x0080 + PROT_READ = 0x1 // mmap - page can be read + PROT_WRITE = 0x2 // page can be written + PROT_NONE = 0x4 // can't be accessed + PROT_EXEC = 0x8 // can be executed + MAP_PRIVATE = 0x1 // changes are private + MAP_SHARED = 0x2 // changes are shared + MAP_FIXED = 0x4 // place exactly + MCAST_JOIN_GROUP = 40 + MCAST_LEAVE_GROUP = 41 + MCAST_JOIN_SOURCE_GROUP = 42 + MCAST_LEAVE_SOURCE_GROUP = 43 + MCAST_BLOCK_SOURCE = 44 + MCAST_UNBLOCK_SOURCE = 45 + MS_SYNC = 0x1 // msync - synchronous writes + MS_ASYNC = 0x2 // asynchronous writes + MS_INVALIDATE = 0x4 // invalidate mappings + MTM_RDONLY = 0x80000000 + MTM_RDWR = 0x40000000 + MTM_UMOUNT = 0x10000000 + MTM_IMMED = 0x08000000 + MTM_FORCE = 0x04000000 + MTM_DRAIN = 0x02000000 + MTM_RESET = 0x01000000 + MTM_SAMEMODE = 0x00100000 + MTM_UNQSEFORCE = 0x00040000 + MTM_NOSUID = 0x00000400 + MTM_SYNCHONLY = 0x00000200 + MTM_REMOUNT = 0x00000100 + MTM_NOSECURITY = 0x00000080 + NFDBITS = 0x20 + O_ACCMODE = 0x03 + O_APPEND = 0x08 + O_ASYNCSIG = 0x0200 + O_CREAT = 0x80 + O_EXCL = 0x40 + O_GETFL = 0x0F + O_LARGEFILE = 0x0400 + O_NONBLOCK = 0x04 + O_RDONLY = 0x02 + O_RDWR = 0x03 + O_SYNC = 0x0100 + O_TRUNC = 0x10 + O_WRONLY = 0x01 + O_NOCTTY = 0x20 + OPOST = 0x0001 + ONLCR = 0x0004 + PARENB = 0x0200 + PARMRK = 0x0400 + QUERYCVT = 3 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 // RUSAGE_THREAD unsupported on z/OS + SEEK_CUR = 1 + SEEK_END = 2 + SEEK_SET = 0 + SETAUTOCVTALL = 5 + SETAUTOCVTON = 2 + SETCVTALL = 4 + SETCVTOFF = 0 + SETCVTON = 1 + AF_APPLETALK = 16 + AF_CCITT = 10 + AF_CHAOS = 5 + AF_DATAKIT = 9 + AF_DLI = 13 + AF_ECMA = 8 + AF_HYLINK = 15 + AF_IMPLINK = 3 + AF_INET = 2 + AF_INET6 = 19 + AF_INTF = 20 + AF_IUCV = 17 + AF_LAT = 14 + AF_LINK = 18 + AF_MAX = 30 + AF_NBS = 7 + AF_NDD = 23 + AF_NETWARE = 22 + AF_NS = 6 + AF_PUP = 4 + AF_RIF = 21 + AF_ROUTE = 20 + AF_SNA = 11 + AF_UNIX = 1 + AF_UNSPEC = 0 + IBMTCP_IMAGE = 1 + MSG_ACK_EXPECTED = 0x10 + MSG_ACK_GEN = 0x40 + MSG_ACK_TIMEOUT = 0x20 + MSG_CONNTERM = 0x80 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_EOF = 0x8000 + MSG_EOR = 0x8 + MSG_MAXIOVLEN = 16 + MSG_NONBLOCK = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + PRIO_PROCESS = 1 + PRIO_PGRP = 2 + PRIO_USER = 3 + RLIMIT_CPU = 0 + RLIMIT_FSIZE = 1 + RLIMIT_DATA = 2 + RLIMIT_STACK = 3 + RLIMIT_CORE = 4 + RLIMIT_AS = 5 + RLIMIT_NOFILE = 6 + RLIMIT_MEMLIMIT = 7 + RLIM_INFINITY = 2147483647 + SCM_RIGHTS = 0x01 + SF_CLOSE = 0x00000002 + SF_REUSE = 0x00000001 + SHUT_RD = 0 + SHUT_RDWR = 2 + SHUT_WR = 1 + SOCK_CONN_DGRAM = 6 + SOCK_DGRAM = 2 + SOCK_RAW = 3 + SOCK_RDM = 4 + SOCK_SEQPACKET = 5 + SOCK_STREAM = 1 + SOL_SOCKET = 0xffff + SOMAXCONN = 10 + SO_ACCEPTCONN = 0x0002 + SO_ACCEPTECONNABORTED = 0x0006 + SO_ACKNOW = 0x7700 + SO_BROADCAST = 0x0020 + SO_BULKMODE = 0x8000 + SO_CKSUMRECV = 0x0800 + SO_CLOSE = 0x01 + SO_CLUSTERCONNTYPE = 0x00004001 + SO_CLUSTERCONNTYPE_INTERNAL = 8 + SO_CLUSTERCONNTYPE_NOCONN = 0 + SO_CLUSTERCONNTYPE_NONE = 1 + SO_CLUSTERCONNTYPE_SAME_CLUSTER = 2 + SO_CLUSTERCONNTYPE_SAME_IMAGE = 4 + SO_DEBUG = 0x0001 + SO_DONTROUTE = 0x0010 + SO_ERROR = 0x1007 + SO_IGNOREINCOMINGPUSH = 0x1 + SO_IGNORESOURCEVIPA = 0x0002 + SO_KEEPALIVE = 0x0008 + SO_LINGER = 0x0080 + SO_NONBLOCKLOCAL = 0x8001 + SO_NOREUSEADDR = 0x1000 + SO_OOBINLINE = 0x0100 + SO_OPTACK = 0x8004 + SO_OPTMSS = 0x8003 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x0004 + SO_REUSEPORT = 0x0200 + SO_SECINFO = 0x00004002 + SO_SET = 0x0200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TYPE = 0x1008 + SO_UNSET = 0x0400 + SO_USELOOPBACK = 0x0040 + SO_USE_IFBUFS = 0x0400 + S_ISUID = 0x0800 + S_ISGID = 0x0400 + S_ISVTX = 0x0200 + S_IRUSR = 0x0100 + S_IWUSR = 0x0080 + S_IXUSR = 0x0040 + S_IRWXU = 0x01C0 + S_IRGRP = 0x0020 + S_IWGRP = 0x0010 + S_IXGRP = 0x0008 + S_IRWXG = 0x0038 + S_IROTH = 0x0004 + S_IWOTH = 0x0002 + S_IXOTH = 0x0001 + S_IRWXO = 0x0007 + S_IREAD = S_IRUSR + S_IWRITE = S_IWUSR + S_IEXEC = S_IXUSR + S_IFDIR = 0x01000000 + S_IFCHR = 0x02000000 + S_IFREG = 0x03000000 + S_IFFIFO = 0x04000000 + S_IFIFO = 0x04000000 + S_IFLNK = 0x05000000 + S_IFBLK = 0x06000000 + S_IFSOCK = 0x07000000 + S_IFVMEXTL = 0xFE000000 + S_IFVMEXTL_EXEC = 0x00010000 + S_IFVMEXTL_DATA = 0x00020000 + S_IFVMEXTL_MEL = 0x00030000 + S_IFEXTL = 0x00000001 + S_IFPROGCTL = 0x00000002 + S_IFAPFCTL = 0x00000004 + S_IFNOSHARE = 0x00000008 + S_IFSHARELIB = 0x00000010 + S_IFMT = 0xFF000000 + S_IFMST = 0x00FF0000 + TCP_KEEPALIVE = 0x8 + TCP_NODELAY = 0x1 + TCP_INFO = 0xb + TCP_USER_TIMEOUT = 0x1 + TIOCGWINSZ = 0x4008a368 + TIOCSWINSZ = 0x8008a367 + TIOCSBRK = 0x2000a77b + TIOCCBRK = 0x2000a77a + TIOCSTI = 0x8001a772 + TIOCGPGRP = 0x4004a777 // _IOR(167, 119, int) + TCSANOW = 0 + TCSETS = 0 // equivalent to TCSANOW for tcsetattr + TCSADRAIN = 1 + TCSETSW = 1 // equivalent to TCSADRAIN for tcsetattr + TCSAFLUSH = 2 + TCSETSF = 2 // equivalent to TCSAFLUSH for tcsetattr + TCGETS = 3 // not defined in ioctl.h -- zos golang only + TCIFLUSH = 0 + TCOFLUSH = 1 + TCIOFLUSH = 2 + TCOOFF = 0 + TCOON = 1 + TCIOFF = 2 + TCION = 3 + TIOCSPGRP = 0x8004a776 + TIOCNOTTY = 0x2000a771 + TIOCEXCL = 0x2000a70d + TIOCNXCL = 0x2000a70e + TIOCGETD = 0x4004a700 + TIOCSETD = 0x8004a701 + TIOCPKT = 0x8004a770 + TIOCSTOP = 0x2000a76f + TIOCSTART = 0x2000a76e + TIOCUCNTL = 0x8004a766 + TIOCREMOTE = 0x8004a769 + TIOCMGET = 0x4004a76a + TIOCMSET = 0x8004a76d + TIOCMBIC = 0x8004a76b + TIOCMBIS = 0x8004a76c + VINTR = 0 + VQUIT = 1 + VERASE = 2 + VKILL = 3 + VEOF = 4 + VEOL = 5 + VMIN = 6 + VSTART = 7 + VSTOP = 8 + VSUSP = 9 + VTIME = 10 + WCONTINUED = 0x4 + WNOHANG = 0x1 + WUNTRACED = 0x2 + _BPX_SWAP = 1 + _BPX_NONSWAP = 2 + MCL_CURRENT = 1 // for Linux compatibility -- no zos semantics + MCL_FUTURE = 2 // for Linux compatibility -- no zos semantics + MCL_ONFAULT = 3 // for Linux compatibility -- no zos semantics + MADV_NORMAL = 0 // for Linux compatibility -- no zos semantics + MADV_RANDOM = 1 // for Linux compatibility -- no zos semantics + MADV_SEQUENTIAL = 2 // for Linux compatibility -- no zos semantics + MADV_WILLNEED = 3 // for Linux compatibility -- no zos semantics + MADV_REMOVE = 4 // for Linux compatibility -- no zos semantics + MADV_DONTFORK = 5 // for Linux compatibility -- no zos semantics + MADV_DOFORK = 6 // for Linux compatibility -- no zos semantics + MADV_HWPOISON = 7 // for Linux compatibility -- no zos semantics + MADV_MERGEABLE = 8 // for Linux compatibility -- no zos semantics + MADV_UNMERGEABLE = 9 // for Linux compatibility -- no zos semantics + MADV_SOFT_OFFLINE = 10 // for Linux compatibility -- no zos semantics + MADV_HUGEPAGE = 11 // for Linux compatibility -- no zos semantics + MADV_NOHUGEPAGE = 12 // for Linux compatibility -- no zos semantics + MADV_DONTDUMP = 13 // for Linux compatibility -- no zos semantics + MADV_DODUMP = 14 // for Linux compatibility -- no zos semantics + MADV_FREE = 15 // for Linux compatibility -- no zos semantics + MADV_WIPEONFORK = 16 // for Linux compatibility -- no zos semantics + MADV_KEEPONFORK = 17 // for Linux compatibility -- no zos semantics + AT_SYMLINK_NOFOLLOW = 1 // for Unix compatibility -- no zos semantics + AT_FDCWD = 2 // for Unix compatibility -- no zos semantics +) + +const ( + EDOM = Errno(1) + ERANGE = Errno(2) + EACCES = Errno(111) + EAGAIN = Errno(112) + EBADF = Errno(113) + EBUSY = Errno(114) + ECHILD = Errno(115) + EDEADLK = Errno(116) + EEXIST = Errno(117) + EFAULT = Errno(118) + EFBIG = Errno(119) + EINTR = Errno(120) + EINVAL = Errno(121) + EIO = Errno(122) + EISDIR = Errno(123) + EMFILE = Errno(124) + EMLINK = Errno(125) + ENAMETOOLONG = Errno(126) + ENFILE = Errno(127) + ENODEV = Errno(128) + ENOENT = Errno(129) + ENOEXEC = Errno(130) + ENOLCK = Errno(131) + ENOMEM = Errno(132) + ENOSPC = Errno(133) + ENOSYS = Errno(134) + ENOTDIR = Errno(135) + ENOTEMPTY = Errno(136) + ENOTTY = Errno(137) + ENXIO = Errno(138) + EPERM = Errno(139) + EPIPE = Errno(140) + EROFS = Errno(141) + ESPIPE = Errno(142) + ESRCH = Errno(143) + EXDEV = Errno(144) + E2BIG = Errno(145) + ELOOP = Errno(146) + EILSEQ = Errno(147) + ENODATA = Errno(148) + EOVERFLOW = Errno(149) + EMVSNOTUP = Errno(150) + ECMSSTORAGE = Errno(151) + EMVSDYNALC = Errno(151) + EMVSCVAF = Errno(152) + EMVSCATLG = Errno(153) + ECMSINITIAL = Errno(156) + EMVSINITIAL = Errno(156) + ECMSERR = Errno(157) + EMVSERR = Errno(157) + EMVSPARM = Errno(158) + ECMSPFSFILE = Errno(159) + EMVSPFSFILE = Errno(159) + EMVSBADCHAR = Errno(160) + ECMSPFSPERM = Errno(162) + EMVSPFSPERM = Errno(162) + EMVSSAFEXTRERR = Errno(163) + EMVSSAF2ERR = Errno(164) + EMVSTODNOTSET = Errno(165) + EMVSPATHOPTS = Errno(166) + EMVSNORTL = Errno(167) + EMVSEXPIRE = Errno(168) + EMVSPASSWORD = Errno(169) + EMVSWLMERROR = Errno(170) + EMVSCPLERROR = Errno(171) + EMVSARMERROR = Errno(172) + ELENOFORK = Errno(200) + ELEMSGERR = Errno(201) + EFPMASKINV = Errno(202) + EFPMODEINV = Errno(203) + EBUFLEN = Errno(227) + EEXTLINK = Errno(228) + ENODD = Errno(229) + ECMSESMERR = Errno(230) + ECPERR = Errno(231) + ELEMULTITHREAD = Errno(232) + ELEFENCE = Errno(244) + EBADDATA = Errno(245) + EUNKNOWN = Errno(246) + ENOTSUP = Errno(247) + EBADNAME = Errno(248) + ENOTSAFE = Errno(249) + ELEMULTITHREADFORK = Errno(257) + ECUNNOENV = Errno(258) + ECUNNOCONV = Errno(259) + ECUNNOTALIGNED = Errno(260) + ECUNERR = Errno(262) + EIBMBADCALL = Errno(1000) + EIBMBADPARM = Errno(1001) + EIBMSOCKOUTOFRANGE = Errno(1002) + EIBMSOCKINUSE = Errno(1003) + EIBMIUCVERR = Errno(1004) + EOFFLOADboxERROR = Errno(1005) + EOFFLOADboxRESTART = Errno(1006) + EOFFLOADboxDOWN = Errno(1007) + EIBMCONFLICT = Errno(1008) + EIBMCANCELLED = Errno(1009) + EIBMBADTCPNAME = Errno(1011) + ENOTBLK = Errno(1100) + ETXTBSY = Errno(1101) + EWOULDBLOCK = Errno(1102) + EINPROGRESS = Errno(1103) + EALREADY = Errno(1104) + ENOTSOCK = Errno(1105) + EDESTADDRREQ = Errno(1106) + EMSGSIZE = Errno(1107) + EPROTOTYPE = Errno(1108) + ENOPROTOOPT = Errno(1109) + EPROTONOSUPPORT = Errno(1110) + ESOCKTNOSUPPORT = Errno(1111) + EOPNOTSUPP = Errno(1112) + EPFNOSUPPORT = Errno(1113) + EAFNOSUPPORT = Errno(1114) + EADDRINUSE = Errno(1115) + EADDRNOTAVAIL = Errno(1116) + ENETDOWN = Errno(1117) + ENETUNREACH = Errno(1118) + ENETRESET = Errno(1119) + ECONNABORTED = Errno(1120) + ECONNRESET = Errno(1121) + ENOBUFS = Errno(1122) + EISCONN = Errno(1123) + ENOTCONN = Errno(1124) + ESHUTDOWN = Errno(1125) + ETOOMANYREFS = Errno(1126) + ETIMEDOUT = Errno(1127) + ECONNREFUSED = Errno(1128) + EHOSTDOWN = Errno(1129) + EHOSTUNREACH = Errno(1130) + EPROCLIM = Errno(1131) + EUSERS = Errno(1132) + EDQUOT = Errno(1133) + ESTALE = Errno(1134) + EREMOTE = Errno(1135) + ENOSTR = Errno(1136) + ETIME = Errno(1137) + ENOSR = Errno(1138) + ENOMSG = Errno(1139) + EBADMSG = Errno(1140) + EIDRM = Errno(1141) + ENONET = Errno(1142) + ERREMOTE = Errno(1143) + ENOLINK = Errno(1144) + EADV = Errno(1145) + ESRMNT = Errno(1146) + ECOMM = Errno(1147) + EPROTO = Errno(1148) + EMULTIHOP = Errno(1149) + EDOTDOT = Errno(1150) + EREMCHG = Errno(1151) + ECANCELED = Errno(1152) + EINTRNODATA = Errno(1159) + ENOREUSE = Errno(1160) + ENOMOVE = Errno(1161) +) + +// Signals +const ( + SIGHUP = Signal(1) + SIGINT = Signal(2) + SIGABRT = Signal(3) + SIGILL = Signal(4) + SIGPOLL = Signal(5) + SIGURG = Signal(6) + SIGSTOP = Signal(7) + SIGFPE = Signal(8) + SIGKILL = Signal(9) + SIGBUS = Signal(10) + SIGSEGV = Signal(11) + SIGSYS = Signal(12) + SIGPIPE = Signal(13) + SIGALRM = Signal(14) + SIGTERM = Signal(15) + SIGUSR1 = Signal(16) + SIGUSR2 = Signal(17) + SIGABND = Signal(18) + SIGCONT = Signal(19) + SIGCHLD = Signal(20) + SIGTTIN = Signal(21) + SIGTTOU = Signal(22) + SIGIO = Signal(23) + SIGQUIT = Signal(24) + SIGTSTP = Signal(25) + SIGTRAP = Signal(26) + SIGIOERR = Signal(27) + SIGWINCH = Signal(28) + SIGXCPU = Signal(29) + SIGXFSZ = Signal(30) + SIGVTALRM = Signal(31) + SIGPROF = Signal(32) + SIGDANGER = Signal(33) + SIGTHSTOP = Signal(34) + SIGTHCONT = Signal(35) + SIGTRACE = Signal(37) + SIGDCE = Signal(38) + SIGDUMP = Signal(39) +) + +// Error table +var errorList = [...]struct { + num Errno + name string + desc string +}{ + {1, "EDC5001I", "A domain error occurred."}, + {2, "EDC5002I", "A range error occurred."}, + {111, "EDC5111I", "Permission denied."}, + {112, "EDC5112I", "Resource temporarily unavailable."}, + {113, "EDC5113I", "Bad file descriptor."}, + {114, "EDC5114I", "Resource busy."}, + {115, "EDC5115I", "No child processes."}, + {116, "EDC5116I", "Resource deadlock avoided."}, + {117, "EDC5117I", "File exists."}, + {118, "EDC5118I", "Incorrect address."}, + {119, "EDC5119I", "File too large."}, + {120, "EDC5120I", "Interrupted function call."}, + {121, "EDC5121I", "Invalid argument."}, + {122, "EDC5122I", "Input/output error."}, + {123, "EDC5123I", "Is a directory."}, + {124, "EDC5124I", "Too many open files."}, + {125, "EDC5125I", "Too many links."}, + {126, "EDC5126I", "Filename too long."}, + {127, "EDC5127I", "Too many open files in system."}, + {128, "EDC5128I", "No such device."}, + {129, "EDC5129I", "No such file or directory."}, + {130, "EDC5130I", "Exec format error."}, + {131, "EDC5131I", "No locks available."}, + {132, "EDC5132I", "Not enough memory."}, + {133, "EDC5133I", "No space left on device."}, + {134, "EDC5134I", "Function not implemented."}, + {135, "EDC5135I", "Not a directory."}, + {136, "EDC5136I", "Directory not empty."}, + {137, "EDC5137I", "Inappropriate I/O control operation."}, + {138, "EDC5138I", "No such device or address."}, + {139, "EDC5139I", "Operation not permitted."}, + {140, "EDC5140I", "Broken pipe."}, + {141, "EDC5141I", "Read-only file system."}, + {142, "EDC5142I", "Invalid seek."}, + {143, "EDC5143I", "No such process."}, + {144, "EDC5144I", "Improper link."}, + {145, "EDC5145I", "The parameter list is too long, or the message to receive was too large for the buffer."}, + {146, "EDC5146I", "Too many levels of symbolic links."}, + {147, "EDC5147I", "Illegal byte sequence."}, + {148, "", ""}, + {149, "EDC5149I", "Value Overflow Error."}, + {150, "EDC5150I", "UNIX System Services is not active."}, + {151, "EDC5151I", "Dynamic allocation error."}, + {152, "EDC5152I", "Common VTOC access facility (CVAF) error."}, + {153, "EDC5153I", "Catalog obtain error."}, + {156, "EDC5156I", "Process initialization error."}, + {157, "EDC5157I", "An internal error has occurred."}, + {158, "EDC5158I", "Bad parameters were passed to the service."}, + {159, "EDC5159I", "The Physical File System encountered a permanent file error."}, + {160, "EDC5160I", "Bad character in environment variable name."}, + {162, "EDC5162I", "The Physical File System encountered a system error."}, + {163, "EDC5163I", "SAF/RACF extract error."}, + {164, "EDC5164I", "SAF/RACF error."}, + {165, "EDC5165I", "System TOD clock not set."}, + {166, "EDC5166I", "Access mode argument on function call conflicts with PATHOPTS parameter on JCL DD statement."}, + {167, "EDC5167I", "Access to the UNIX System Services version of the C RTL is denied."}, + {168, "EDC5168I", "Password has expired."}, + {169, "EDC5169I", "Password is invalid."}, + {170, "EDC5170I", "An error was encountered with WLM."}, + {171, "EDC5171I", "An error was encountered with CPL."}, + {172, "EDC5172I", "An error was encountered with Application Response Measurement (ARM) component."}, + {200, "EDC5200I", "The application contains a Language Environment member language that cannot tolerate a fork()."}, + {201, "EDC5201I", "The Language Environment message file was not found in the hierarchical file system."}, + {202, "EDC5202E", "DLL facilities are not supported under SPC environment."}, + {203, "EDC5203E", "DLL facilities are not supported under POSIX environment."}, + {227, "EDC5227I", "Buffer is not long enough to contain a path definition"}, + {228, "EDC5228I", "The file referred to is an external link"}, + {229, "EDC5229I", "No path definition for ddname in effect"}, + {230, "EDC5230I", "ESM error."}, + {231, "EDC5231I", "CP or the external security manager had an error"}, + {232, "EDC5232I", "The function failed because it was invoked from a multithread environment."}, + {244, "EDC5244I", "The program, module or DLL is not supported in this environment."}, + {245, "EDC5245I", "Data is not valid."}, + {246, "EDC5246I", "Unknown system state."}, + {247, "EDC5247I", "Operation not supported."}, + {248, "EDC5248I", "The object name specified is not correct."}, + {249, "EDC5249I", "The function is not allowed."}, + {257, "EDC5257I", "Function cannot be called in the child process of a fork() from a multithreaded process until exec() is called."}, + {258, "EDC5258I", "A CUN_RS_NO_UNI_ENV error was issued by Unicode Services."}, + {259, "EDC5259I", "A CUN_RS_NO_CONVERSION error was issued by Unicode Services."}, + {260, "EDC5260I", "A CUN_RS_TABLE_NOT_ALIGNED error was issued by Unicode Services."}, + {262, "EDC5262I", "An iconv() function encountered an unexpected error while using Unicode Services."}, + {1000, "EDC8000I", "A bad socket-call constant was found in the IUCV header."}, + {1001, "EDC8001I", "An error was found in the IUCV header."}, + {1002, "EDC8002I", "A socket descriptor is out of range."}, + {1003, "EDC8003I", "A socket descriptor is in use."}, + {1004, "EDC8004I", "Request failed because of an IUCV error."}, + {1005, "EDC8005I", "Offload box error."}, + {1006, "EDC8006I", "Offload box restarted."}, + {1007, "EDC8007I", "Offload box down."}, + {1008, "EDC8008I", "Already a conflicting call outstanding on socket."}, + {1009, "EDC8009I", "Request cancelled using a SOCKcallCANCEL request."}, + {1011, "EDC8011I", "A name of a PFS was specified that either is not configured or is not a Sockets PFS."}, + {1100, "EDC8100I", "Block device required."}, + {1101, "EDC8101I", "Text file busy."}, + {1102, "EDC8102I", "Operation would block."}, + {1103, "EDC8103I", "Operation now in progress."}, + {1104, "EDC8104I", "Connection already in progress."}, + {1105, "EDC8105I", "Socket operation on non-socket."}, + {1106, "EDC8106I", "Destination address required."}, + {1107, "EDC8107I", "Message too long."}, + {1108, "EDC8108I", "Protocol wrong type for socket."}, + {1109, "EDC8109I", "Protocol not available."}, + {1110, "EDC8110I", "Protocol not supported."}, + {1111, "EDC8111I", "Socket type not supported."}, + {1112, "EDC8112I", "Operation not supported on socket."}, + {1113, "EDC8113I", "Protocol family not supported."}, + {1114, "EDC8114I", "Address family not supported."}, + {1115, "EDC8115I", "Address already in use."}, + {1116, "EDC8116I", "Address not available."}, + {1117, "EDC8117I", "Network is down."}, + {1118, "EDC8118I", "Network is unreachable."}, + {1119, "EDC8119I", "Network dropped connection on reset."}, + {1120, "EDC8120I", "Connection ended abnormally."}, + {1121, "EDC8121I", "Connection reset."}, + {1122, "EDC8122I", "No buffer space available."}, + {1123, "EDC8123I", "Socket already connected."}, + {1124, "EDC8124I", "Socket not connected."}, + {1125, "EDC8125I", "Can't send after socket shutdown."}, + {1126, "EDC8126I", "Too many references; can't splice."}, + {1127, "EDC8127I", "Connection timed out."}, + {1128, "EDC8128I", "Connection refused."}, + {1129, "EDC8129I", "Host is not available."}, + {1130, "EDC8130I", "Host cannot be reached."}, + {1131, "EDC8131I", "Too many processes."}, + {1132, "EDC8132I", "Too many users."}, + {1133, "EDC8133I", "Disk quota exceeded."}, + {1134, "EDC8134I", "Stale file handle."}, + {1135, "", ""}, + {1136, "EDC8136I", "File is not a STREAM."}, + {1137, "EDC8137I", "STREAMS ioctl() timeout."}, + {1138, "EDC8138I", "No STREAMS resources."}, + {1139, "EDC8139I", "The message identified by set_id and msg_id is not in the message catalog."}, + {1140, "EDC8140I", "Bad message."}, + {1141, "EDC8141I", "Identifier removed."}, + {1142, "", ""}, + {1143, "", ""}, + {1144, "EDC8144I", "The link has been severed."}, + {1145, "", ""}, + {1146, "", ""}, + {1147, "", ""}, + {1148, "EDC8148I", "Protocol error."}, + {1149, "EDC8149I", "Multihop not allowed."}, + {1150, "", ""}, + {1151, "", ""}, + {1152, "EDC8152I", "The asynchronous I/O request has been canceled."}, + {1159, "EDC8159I", "Function call was interrupted before any data was received."}, + {1160, "EDC8160I", "Socket reuse is not supported."}, + {1161, "EDC8161I", "The file system cannot currently be moved."}, +} + +// Signal table +var signalList = [...]struct { + num Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGABT", "aborted"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGPOLL", "pollable event"}, + {6, "SIGURG", "urgent I/O condition"}, + {7, "SIGSTOP", "stop process"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad argument to routine"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGUSR1", "user defined signal 1"}, + {17, "SIGUSR2", "user defined signal 2"}, + {18, "SIGABND", "abend"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGQUIT", "quit"}, + {25, "SIGTSTP", "stopped"}, + {26, "SIGTRAP", "trace/breakpoint trap"}, + {27, "SIGIOER", "I/O error"}, + {28, "SIGWINCH", "window changed"}, + {29, "SIGXCPU", "CPU time limit exceeded"}, + {30, "SIGXFSZ", "file size limit exceeded"}, + {31, "SIGVTALRM", "virtual timer expired"}, + {32, "SIGPROF", "profiling timer expired"}, + {33, "SIGDANGER", "danger"}, + {34, "SIGTHSTOP", "stop thread"}, + {35, "SIGTHCONT", "continue thread"}, + {37, "SIGTRACE", "trace"}, + {38, "", "DCE"}, + {39, "SIGDUMP", "dump"}, +} diff --git a/vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go b/vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go new file mode 100644 index 0000000..bd001a6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go @@ -0,0 +1,42 @@ +// Code generated by linux/mkall.go generatePtracePair("arm", "arm64"). DO NOT EDIT. + +//go:build linux && (arm || arm64) +// +build linux +// +build arm arm64 + +package unix + +import "unsafe" + +// PtraceRegsArm is the registers used by arm binaries. +type PtraceRegsArm struct { + Uregs [18]uint32 +} + +// PtraceGetRegsArm fetches the registers used by arm binaries. +func PtraceGetRegsArm(pid int, regsout *PtraceRegsArm) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsArm sets the registers used by arm binaries. +func PtraceSetRegsArm(pid int, regs *PtraceRegsArm) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} + +// PtraceRegsArm64 is the registers used by arm64 binaries. +type PtraceRegsArm64 struct { + Regs [31]uint64 + Sp uint64 + Pc uint64 + Pstate uint64 +} + +// PtraceGetRegsArm64 fetches the registers used by arm64 binaries. +func PtraceGetRegsArm64(pid int, regsout *PtraceRegsArm64) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsArm64 sets the registers used by arm64 binaries. +func PtraceSetRegsArm64(pid int, regs *PtraceRegsArm64) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} diff --git a/vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go b/vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go new file mode 100644 index 0000000..6cb6d68 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go @@ -0,0 +1,17 @@ +// Code generated by linux/mkall.go generatePtraceRegSet("arm64"). DO NOT EDIT. + +package unix + +import "unsafe" + +// PtraceGetRegSetArm64 fetches the registers used by arm64 binaries. +func PtraceGetRegSetArm64(pid, addr int, regsout *PtraceRegsArm64) error { + iovec := Iovec{(*byte)(unsafe.Pointer(regsout)), uint64(unsafe.Sizeof(*regsout))} + return ptrace(PTRACE_GETREGSET, pid, uintptr(addr), uintptr(unsafe.Pointer(&iovec))) +} + +// PtraceSetRegSetArm64 sets the registers used by arm64 binaries. +func PtraceSetRegSetArm64(pid, addr int, regs *PtraceRegsArm64) error { + iovec := Iovec{(*byte)(unsafe.Pointer(regs)), uint64(unsafe.Sizeof(*regs))} + return ptrace(PTRACE_SETREGSET, pid, uintptr(addr), uintptr(unsafe.Pointer(&iovec))) +} diff --git a/vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go b/vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go new file mode 100644 index 0000000..c34d063 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go @@ -0,0 +1,51 @@ +// Code generated by linux/mkall.go generatePtracePair("mips", "mips64"). DO NOT EDIT. + +//go:build linux && (mips || mips64) +// +build linux +// +build mips mips64 + +package unix + +import "unsafe" + +// PtraceRegsMips is the registers used by mips binaries. +type PtraceRegsMips struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +// PtraceGetRegsMips fetches the registers used by mips binaries. +func PtraceGetRegsMips(pid int, regsout *PtraceRegsMips) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsMips sets the registers used by mips binaries. +func PtraceSetRegsMips(pid int, regs *PtraceRegsMips) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} + +// PtraceRegsMips64 is the registers used by mips64 binaries. +type PtraceRegsMips64 struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +// PtraceGetRegsMips64 fetches the registers used by mips64 binaries. +func PtraceGetRegsMips64(pid int, regsout *PtraceRegsMips64) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsMips64 sets the registers used by mips64 binaries. +func PtraceSetRegsMips64(pid int, regs *PtraceRegsMips64) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} diff --git a/vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go b/vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go new file mode 100644 index 0000000..3ccf0c0 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go @@ -0,0 +1,51 @@ +// Code generated by linux/mkall.go generatePtracePair("mipsle", "mips64le"). DO NOT EDIT. + +//go:build linux && (mipsle || mips64le) +// +build linux +// +build mipsle mips64le + +package unix + +import "unsafe" + +// PtraceRegsMipsle is the registers used by mipsle binaries. +type PtraceRegsMipsle struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +// PtraceGetRegsMipsle fetches the registers used by mipsle binaries. +func PtraceGetRegsMipsle(pid int, regsout *PtraceRegsMipsle) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsMipsle sets the registers used by mipsle binaries. +func PtraceSetRegsMipsle(pid int, regs *PtraceRegsMipsle) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} + +// PtraceRegsMips64le is the registers used by mips64le binaries. +type PtraceRegsMips64le struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +// PtraceGetRegsMips64le fetches the registers used by mips64le binaries. +func PtraceGetRegsMips64le(pid int, regsout *PtraceRegsMips64le) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsMips64le sets the registers used by mips64le binaries. +func PtraceSetRegsMips64le(pid int, regs *PtraceRegsMips64le) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} diff --git a/vendor/golang.org/x/sys/unix/zptrace_x86_linux.go b/vendor/golang.org/x/sys/unix/zptrace_x86_linux.go new file mode 100644 index 0000000..7d65857 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zptrace_x86_linux.go @@ -0,0 +1,81 @@ +// Code generated by linux/mkall.go generatePtracePair("386", "amd64"). DO NOT EDIT. + +//go:build linux && (386 || amd64) +// +build linux +// +build 386 amd64 + +package unix + +import "unsafe" + +// PtraceRegs386 is the registers used by 386 binaries. +type PtraceRegs386 struct { + Ebx int32 + Ecx int32 + Edx int32 + Esi int32 + Edi int32 + Ebp int32 + Eax int32 + Xds int32 + Xes int32 + Xfs int32 + Xgs int32 + Orig_eax int32 + Eip int32 + Xcs int32 + Eflags int32 + Esp int32 + Xss int32 +} + +// PtraceGetRegs386 fetches the registers used by 386 binaries. +func PtraceGetRegs386(pid int, regsout *PtraceRegs386) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegs386 sets the registers used by 386 binaries. +func PtraceSetRegs386(pid int, regs *PtraceRegs386) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} + +// PtraceRegsAmd64 is the registers used by amd64 binaries. +type PtraceRegsAmd64 struct { + R15 uint64 + R14 uint64 + R13 uint64 + R12 uint64 + Rbp uint64 + Rbx uint64 + R11 uint64 + R10 uint64 + R9 uint64 + R8 uint64 + Rax uint64 + Rcx uint64 + Rdx uint64 + Rsi uint64 + Rdi uint64 + Orig_rax uint64 + Rip uint64 + Cs uint64 + Eflags uint64 + Rsp uint64 + Ss uint64 + Fs_base uint64 + Gs_base uint64 + Ds uint64 + Es uint64 + Fs uint64 + Gs uint64 +} + +// PtraceGetRegsAmd64 fetches the registers used by amd64 binaries. +func PtraceGetRegsAmd64(pid int, regsout *PtraceRegsAmd64) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsAmd64 sets the registers used by amd64 binaries. +func PtraceSetRegsAmd64(pid int, regs *PtraceRegsAmd64) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go new file mode 100644 index 0000000..870215d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go @@ -0,0 +1,1485 @@ +// go run mksyscall_aix_ppc.go -aix -tags aix,ppc syscall_aix.go syscall_aix_ppc.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build aix && ppc +// +build aix,ppc + +package unix + +/* +#include +#include +int utimes(uintptr_t, uintptr_t); +int utimensat(int, uintptr_t, uintptr_t, int); +int getcwd(uintptr_t, size_t); +int accept(int, uintptr_t, uintptr_t); +int getdirent(int, uintptr_t, size_t); +int wait4(int, uintptr_t, int, uintptr_t); +int ioctl(int, int, uintptr_t); +int fcntl(uintptr_t, int, uintptr_t); +int fsync_range(int, int, long long, long long); +int acct(uintptr_t); +int chdir(uintptr_t); +int chroot(uintptr_t); +int close(int); +int dup(int); +void exit(int); +int faccessat(int, uintptr_t, unsigned int, int); +int fchdir(int); +int fchmod(int, unsigned int); +int fchmodat(int, uintptr_t, unsigned int, int); +int fchownat(int, uintptr_t, int, int, int); +int fdatasync(int); +int getpgid(int); +int getpgrp(); +int getpid(); +int getppid(); +int getpriority(int, int); +int getrusage(int, uintptr_t); +int getsid(int); +int kill(int, int); +int syslog(int, uintptr_t, size_t); +int mkdir(int, uintptr_t, unsigned int); +int mkdirat(int, uintptr_t, unsigned int); +int mkfifo(uintptr_t, unsigned int); +int mknod(uintptr_t, unsigned int, int); +int mknodat(int, uintptr_t, unsigned int, int); +int nanosleep(uintptr_t, uintptr_t); +int open64(uintptr_t, int, unsigned int); +int openat(int, uintptr_t, int, unsigned int); +int read(int, uintptr_t, size_t); +int readlink(uintptr_t, uintptr_t, size_t); +int renameat(int, uintptr_t, int, uintptr_t); +int setdomainname(uintptr_t, size_t); +int sethostname(uintptr_t, size_t); +int setpgid(int, int); +int setsid(); +int settimeofday(uintptr_t); +int setuid(int); +int setgid(int); +int setpriority(int, int, int); +int statx(int, uintptr_t, int, int, uintptr_t); +int sync(); +uintptr_t times(uintptr_t); +int umask(int); +int uname(uintptr_t); +int unlink(uintptr_t); +int unlinkat(int, uintptr_t, int); +int ustat(int, uintptr_t); +int write(int, uintptr_t, size_t); +int dup2(int, int); +int posix_fadvise64(int, long long, long long, int); +int fchown(int, int, int); +int fstat(int, uintptr_t); +int fstatat(int, uintptr_t, uintptr_t, int); +int fstatfs(int, uintptr_t); +int ftruncate(int, long long); +int getegid(); +int geteuid(); +int getgid(); +int getuid(); +int lchown(uintptr_t, int, int); +int listen(int, int); +int lstat(uintptr_t, uintptr_t); +int pause(); +int pread64(int, uintptr_t, size_t, long long); +int pwrite64(int, uintptr_t, size_t, long long); +#define c_select select +int select(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t); +int pselect(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t); +int setregid(int, int); +int setreuid(int, int); +int shutdown(int, int); +long long splice(int, uintptr_t, int, uintptr_t, int, int); +int stat(uintptr_t, uintptr_t); +int statfs(uintptr_t, uintptr_t); +int truncate(uintptr_t, long long); +int bind(int, uintptr_t, uintptr_t); +int connect(int, uintptr_t, uintptr_t); +int getgroups(int, uintptr_t); +int setgroups(int, uintptr_t); +int getsockopt(int, int, int, uintptr_t, uintptr_t); +int setsockopt(int, int, int, uintptr_t, uintptr_t); +int socket(int, int, int); +int socketpair(int, int, int, uintptr_t); +int getpeername(int, uintptr_t, uintptr_t); +int getsockname(int, uintptr_t, uintptr_t); +int recvfrom(int, uintptr_t, size_t, int, uintptr_t, uintptr_t); +int sendto(int, uintptr_t, size_t, int, uintptr_t, uintptr_t); +int nrecvmsg(int, uintptr_t, int); +int nsendmsg(int, uintptr_t, int); +int munmap(uintptr_t, uintptr_t); +int madvise(uintptr_t, size_t, int); +int mprotect(uintptr_t, size_t, int); +int mlock(uintptr_t, size_t); +int mlockall(int); +int msync(uintptr_t, size_t, int); +int munlock(uintptr_t, size_t); +int munlockall(); +int pipe(uintptr_t); +int poll(uintptr_t, int, int); +int gettimeofday(uintptr_t, uintptr_t); +int time(uintptr_t); +int utime(uintptr_t, uintptr_t); +unsigned long long getsystemcfg(int); +int umount(uintptr_t); +int getrlimit64(int, uintptr_t); +int setrlimit64(int, uintptr_t); +long long lseek64(int, long long, int); +uintptr_t mmap(uintptr_t, uintptr_t, int, int, int, long long); + +*/ +import "C" +import ( + "unsafe" +) + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.utimes(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(times)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.utimensat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(times))), C.int(flag)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getcwd(buf []byte) (err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + var _p1 int + _p1 = len(buf) + r0, er := C.getcwd(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, er := C.accept(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen)))) + fd = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdirent(fd int, buf []byte) (n int, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + var _p1 int + _p1 = len(buf) + r0, er := C.getdirent(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error) { + r0, er := C.wait4(C.int(pid), C.uintptr_t(uintptr(unsafe.Pointer(status))), C.int(options), C.uintptr_t(uintptr(unsafe.Pointer(rusage)))) + wpid = Pid_t(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + r0, er := C.ioctl(C.int(fd), C.int(req), C.uintptr_t(arg)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func FcntlInt(fd uintptr, cmd int, arg int) (r int, err error) { + r0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg)) + r = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) { + r0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(uintptr(unsafe.Pointer(lk)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg)) + val = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fsyncRange(fd int, how int, start int64, length int64) (err error) { + r0, er := C.fsync_range(C.int(fd), C.int(how), C.longlong(start), C.longlong(length)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.acct(C.uintptr_t(_p0)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.chdir(C.uintptr_t(_p0)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.chroot(C.uintptr_t(_p0)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + r0, er := C.close(C.int(fd)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, er := C.dup(C.int(oldfd)) + fd = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + C.exit(C.int(code)) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.faccessat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + r0, er := C.fchdir(C.int(fd)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + r0, er := C.fchmod(C.int(fd), C.uint(mode)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.fchmodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.fchownat(C.int(dirfd), C.uintptr_t(_p0), C.int(uid), C.int(gid), C.int(flags)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + r0, er := C.fdatasync(C.int(fd)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, er := C.getpgid(C.int(pid)) + pgid = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pid int) { + r0, _ := C.getpgrp() + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _ := C.getpid() + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _ := C.getppid() + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, er := C.getpriority(C.int(which), C.int(who)) + prio = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + r0, er := C.getrusage(C.int(who), C.uintptr_t(uintptr(unsafe.Pointer(rusage)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, er := C.getsid(C.int(pid)) + sid = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig Signal) (err error) { + r0, er := C.kill(C.int(pid), C.int(sig)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + var _p1 int + _p1 = len(buf) + r0, er := C.syslog(C.int(typ), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(dirfd int, path string, mode uint32) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.mkdir(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.mkdirat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.mkfifo(C.uintptr_t(_p0), C.uint(mode)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.mknod(C.uintptr_t(_p0), C.uint(mode), C.int(dev)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.mknodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(dev)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + r0, er := C.nanosleep(C.uintptr_t(uintptr(unsafe.Pointer(time))), C.uintptr_t(uintptr(unsafe.Pointer(leftover)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.open64(C.uintptr_t(_p0), C.int(mode), C.uint(perm)) + fd = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.openat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.uint(mode)) + fd = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + var _p1 int + _p1 = len(p) + r0, er := C.read(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + var _p1 *byte + if len(buf) > 0 { + _p1 = &buf[0] + } + var _p2 int + _p2 = len(buf) + r0, er := C.readlink(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(_p1))), C.size_t(_p2)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(oldpath))) + _p1 := uintptr(unsafe.Pointer(C.CString(newpath))) + r0, er := C.renameat(C.int(olddirfd), C.uintptr_t(_p0), C.int(newdirfd), C.uintptr_t(_p1)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + var _p1 int + _p1 = len(p) + r0, er := C.setdomainname(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + var _p1 int + _p1 = len(p) + r0, er := C.sethostname(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + r0, er := C.setpgid(C.int(pid), C.int(pgid)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, er := C.setsid() + pid = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + r0, er := C.settimeofday(C.uintptr_t(uintptr(unsafe.Pointer(tv)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + r0, er := C.setuid(C.int(uid)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(uid int) (err error) { + r0, er := C.setgid(C.int(uid)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + r0, er := C.setpriority(C.int(which), C.int(who), C.int(prio)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.statx(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.int(mask), C.uintptr_t(uintptr(unsafe.Pointer(stat)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + C.sync() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, er := C.times(C.uintptr_t(uintptr(unsafe.Pointer(tms)))) + ticks = uintptr(r0) + if uintptr(r0) == ^uintptr(0) && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _ := C.umask(C.int(mask)) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + r0, er := C.uname(C.uintptr_t(uintptr(unsafe.Pointer(buf)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.unlink(C.uintptr_t(_p0)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.unlinkat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + r0, er := C.ustat(C.int(dev), C.uintptr_t(uintptr(unsafe.Pointer(ubuf)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + var _p1 int + _p1 = len(p) + r0, er := C.write(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, er := C.read(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(p))), C.size_t(np)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, er := C.write(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(p))), C.size_t(np)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + r0, er := C.dup2(C.int(oldfd), C.int(newfd)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + r0, er := C.posix_fadvise64(C.int(fd), C.longlong(offset), C.longlong(length), C.int(advice)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + r0, er := C.fchown(C.int(fd), C.int(uid), C.int(gid)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat(fd int, stat *Stat_t) (err error) { + r0, er := C.fstat(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(stat)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.fstatat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(stat))), C.int(flags)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + r0, er := C.fstatfs(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(buf)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + r0, er := C.ftruncate(C.int(fd), C.longlong(length)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := C.getegid() + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := C.geteuid() + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := C.getgid() + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := C.getuid() + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.lchown(C.uintptr_t(_p0), C.int(uid), C.int(gid)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + r0, er := C.listen(C.int(s), C.int(n)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func lstat(path string, stat *Stat_t) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.lstat(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(stat)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + r0, er := C.pause() + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + var _p1 int + _p1 = len(p) + r0, er := C.pread64(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.longlong(offset)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + var _p1 int + _p1 = len(p) + r0, er := C.pwrite64(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.longlong(offset)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, er := C.c_select(C.int(nfd), C.uintptr_t(uintptr(unsafe.Pointer(r))), C.uintptr_t(uintptr(unsafe.Pointer(w))), C.uintptr_t(uintptr(unsafe.Pointer(e))), C.uintptr_t(uintptr(unsafe.Pointer(timeout)))) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, er := C.pselect(C.int(nfd), C.uintptr_t(uintptr(unsafe.Pointer(r))), C.uintptr_t(uintptr(unsafe.Pointer(w))), C.uintptr_t(uintptr(unsafe.Pointer(e))), C.uintptr_t(uintptr(unsafe.Pointer(timeout))), C.uintptr_t(uintptr(unsafe.Pointer(sigmask)))) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + r0, er := C.setregid(C.int(rgid), C.int(egid)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + r0, er := C.setreuid(C.int(ruid), C.int(euid)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + r0, er := C.shutdown(C.int(fd), C.int(how)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, er := C.splice(C.int(rfd), C.uintptr_t(uintptr(unsafe.Pointer(roff))), C.int(wfd), C.uintptr_t(uintptr(unsafe.Pointer(woff))), C.int(len), C.int(flags)) + n = int64(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, statptr *Stat_t) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.stat(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(statptr)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.statfs(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(buf)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.truncate(C.uintptr_t(_p0), C.longlong(length)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + r0, er := C.bind(C.int(s), C.uintptr_t(uintptr(addr)), C.uintptr_t(uintptr(addrlen))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + r0, er := C.connect(C.int(s), C.uintptr_t(uintptr(addr)), C.uintptr_t(uintptr(addrlen))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, er := C.getgroups(C.int(n), C.uintptr_t(uintptr(unsafe.Pointer(list)))) + nn = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + r0, er := C.setgroups(C.int(n), C.uintptr_t(uintptr(unsafe.Pointer(list)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + r0, er := C.getsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(uintptr(val)), C.uintptr_t(uintptr(unsafe.Pointer(vallen)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + r0, er := C.setsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(uintptr(val)), C.uintptr_t(vallen)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, er := C.socket(C.int(domain), C.int(typ), C.int(proto)) + fd = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + r0, er := C.socketpair(C.int(domain), C.int(typ), C.int(proto), C.uintptr_t(uintptr(unsafe.Pointer(fd)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + r0, er := C.getpeername(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + r0, er := C.getsockname(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + var _p1 int + _p1 = len(p) + r0, er := C.recvfrom(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(flags), C.uintptr_t(uintptr(unsafe.Pointer(from))), C.uintptr_t(uintptr(unsafe.Pointer(fromlen)))) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + var _p1 int + _p1 = len(buf) + r0, er := C.sendto(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(flags), C.uintptr_t(uintptr(to)), C.uintptr_t(uintptr(addrlen))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, er := C.nrecvmsg(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(msg))), C.int(flags)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, er := C.nsendmsg(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(msg))), C.int(flags)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + r0, er := C.munmap(C.uintptr_t(addr), C.uintptr_t(length)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + var _p1 int + _p1 = len(b) + r0, er := C.madvise(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(advice)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + var _p1 int + _p1 = len(b) + r0, er := C.mprotect(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(prot)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + var _p1 int + _p1 = len(b) + r0, er := C.mlock(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + r0, er := C.mlockall(C.int(flags)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + var _p1 int + _p1 = len(b) + r0, er := C.msync(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(flags)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + var _p1 int + _p1 = len(b) + r0, er := C.munlock(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + r0, er := C.munlockall() + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + r0, er := C.pipe(C.uintptr_t(uintptr(unsafe.Pointer(p)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, er := C.poll(C.uintptr_t(uintptr(unsafe.Pointer(fds))), C.int(nfds), C.int(timeout)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func gettimeofday(tv *Timeval, tzp *Timezone) (err error) { + r0, er := C.gettimeofday(C.uintptr_t(uintptr(unsafe.Pointer(tv))), C.uintptr_t(uintptr(unsafe.Pointer(tzp)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, er := C.time(C.uintptr_t(uintptr(unsafe.Pointer(t)))) + tt = Time_t(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.utime(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(buf)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsystemcfg(label int) (n uint64) { + r0, _ := C.getsystemcfg(C.int(label)) + n = uint64(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func umount(target string) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(target))) + r0, er := C.umount(C.uintptr_t(_p0)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + r0, er := C.getrlimit64(C.int(resource), C.uintptr_t(uintptr(unsafe.Pointer(rlim)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + r0, er := C.setrlimit64(C.int(resource), C.uintptr_t(uintptr(unsafe.Pointer(rlim)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, er := C.lseek64(C.int(fd), C.longlong(offset), C.int(whence)) + off = int64(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, er := C.mmap(C.uintptr_t(addr), C.uintptr_t(length), C.int(prot), C.int(flags), C.int(fd), C.longlong(offset)) + xaddr = uintptr(r0) + if uintptr(r0) == ^uintptr(0) && er != nil { + err = er + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go new file mode 100644 index 0000000..a89b0bf --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go @@ -0,0 +1,1443 @@ +// go run mksyscall_aix_ppc64.go -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build aix && ppc64 +// +build aix,ppc64 + +package unix + +import ( + "unsafe" +) + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callutimes(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callutimensat(dirfd, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), flag) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getcwd(buf []byte) (err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + _, e1 := callgetcwd(uintptr(unsafe.Pointer(_p0)), len(buf)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, e1 := callaccept(s, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdirent(fd int, buf []byte) (n int, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, e1 := callgetdirent(fd, uintptr(unsafe.Pointer(_p0)), len(buf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error) { + r0, e1 := callwait4(int(pid), uintptr(unsafe.Pointer(status)), options, uintptr(unsafe.Pointer(rusage))) + wpid = Pid_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, e1 := callioctl(fd, int(req), arg) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func FcntlInt(fd uintptr, cmd int, arg int) (r int, err error) { + r0, e1 := callfcntl(fd, cmd, uintptr(arg)) + r = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) { + _, e1 := callfcntl(fd, cmd, uintptr(unsafe.Pointer(lk))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, e1 := callfcntl(uintptr(fd), cmd, uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fsyncRange(fd int, how int, start int64, length int64) (err error) { + _, e1 := callfsync_range(fd, how, start, length) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callacct(uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callchdir(uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callchroot(uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, e1 := callclose(fd) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, e1 := calldup(oldfd) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + callexit(code) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callfaccessat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, flags) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, e1 := callfchdir(fd) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, e1 := callfchmod(fd, mode) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callfchmodat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, flags) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callfchownat(dirfd, uintptr(unsafe.Pointer(_p0)), uid, gid, flags) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, e1 := callfdatasync(fd) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, e1 := callgetpgid(pid) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pid int) { + r0, _ := callgetpgrp() + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _ := callgetpid() + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _ := callgetppid() + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, e1 := callgetpriority(which, who) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, e1 := callgetrusage(who, uintptr(unsafe.Pointer(rusage))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, e1 := callgetsid(pid) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig Signal) (err error) { + _, e1 := callkill(pid, int(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, e1 := callsyslog(typ, uintptr(unsafe.Pointer(_p0)), len(buf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callmkdir(dirfd, uintptr(unsafe.Pointer(_p0)), mode) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callmkdirat(dirfd, uintptr(unsafe.Pointer(_p0)), mode) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callmkfifo(uintptr(unsafe.Pointer(_p0)), mode) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callmknod(uintptr(unsafe.Pointer(_p0)), mode, dev) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callmknodat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, dev) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, e1 := callnanosleep(uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, e1 := callopen64(uintptr(unsafe.Pointer(_p0)), mode, perm) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, e1 := callopenat(dirfd, uintptr(unsafe.Pointer(_p0)), flags, mode) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, e1 := callread(fd, uintptr(unsafe.Pointer(_p0)), len(p)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + if len(buf) > 0 { + _p1 = &buf[0] + } + r0, e1 := callreadlink(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), len(buf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, e1 := callrenameat(olddirfd, uintptr(unsafe.Pointer(_p0)), newdirfd, uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + _, e1 := callsetdomainname(uintptr(unsafe.Pointer(_p0)), len(p)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + _, e1 := callsethostname(uintptr(unsafe.Pointer(_p0)), len(p)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, e1 := callsetpgid(pid, pgid) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, e1 := callsetsid() + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, e1 := callsettimeofday(uintptr(unsafe.Pointer(tv))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, e1 := callsetuid(uid) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(uid int) (err error) { + _, e1 := callsetgid(uid) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, e1 := callsetpriority(which, who, prio) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callstatx(dirfd, uintptr(unsafe.Pointer(_p0)), flags, mask, uintptr(unsafe.Pointer(stat))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + callsync() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, e1 := calltimes(uintptr(unsafe.Pointer(tms))) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _ := callumask(mask) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, e1 := calluname(uintptr(unsafe.Pointer(buf))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callunlink(uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callunlinkat(dirfd, uintptr(unsafe.Pointer(_p0)), flags) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, e1 := callustat(dev, uintptr(unsafe.Pointer(ubuf))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, e1 := callwrite(fd, uintptr(unsafe.Pointer(_p0)), len(p)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, e1 := callread(fd, uintptr(unsafe.Pointer(p)), np) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, e1 := callwrite(fd, uintptr(unsafe.Pointer(p)), np) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, e1 := calldup2(oldfd, newfd) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, e1 := callposix_fadvise64(fd, offset, length, advice) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, e1 := callfchown(fd, uid, gid) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat(fd int, stat *Stat_t) (err error) { + _, e1 := callfstat(fd, uintptr(unsafe.Pointer(stat))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callfstatat(dirfd, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), flags) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, e1 := callfstatfs(fd, uintptr(unsafe.Pointer(buf))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, e1 := callftruncate(fd, length) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := callgetegid() + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := callgeteuid() + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := callgetgid() + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := callgetuid() + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := calllchown(uintptr(unsafe.Pointer(_p0)), uid, gid) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, e1 := calllisten(s, n) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := calllstat(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, e1 := callpause() + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, e1 := callpread64(fd, uintptr(unsafe.Pointer(_p0)), len(p), offset) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, e1 := callpwrite64(fd, uintptr(unsafe.Pointer(_p0)), len(p), offset) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, e1 := callselect(nfd, uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, e1 := callpselect(nfd, uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, e1 := callsetregid(rgid, egid) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, e1 := callsetreuid(ruid, euid) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, e1 := callshutdown(fd, how) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, e1 := callsplice(rfd, uintptr(unsafe.Pointer(roff)), wfd, uintptr(unsafe.Pointer(woff)), len, flags) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, statptr *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callstat(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(statptr))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callstatfs(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := calltruncate(uintptr(unsafe.Pointer(_p0)), length) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, e1 := callbind(s, uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, e1 := callconnect(s, uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, e1 := callgetgroups(n, uintptr(unsafe.Pointer(list))) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, e1 := callsetgroups(n, uintptr(unsafe.Pointer(list))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, e1 := callgetsockopt(s, level, name, uintptr(val), uintptr(unsafe.Pointer(vallen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, e1 := callsetsockopt(s, level, name, uintptr(val), vallen) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, e1 := callsocket(domain, typ, proto) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, e1 := callsocketpair(domain, typ, proto, uintptr(unsafe.Pointer(fd))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, e1 := callgetpeername(fd, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, e1 := callgetsockname(fd, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, e1 := callrecvfrom(fd, uintptr(unsafe.Pointer(_p0)), len(p), flags, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + _, e1 := callsendto(s, uintptr(unsafe.Pointer(_p0)), len(buf), flags, uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, e1 := callnrecvmsg(s, uintptr(unsafe.Pointer(msg)), flags) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, e1 := callnsendmsg(s, uintptr(unsafe.Pointer(msg)), flags) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, e1 := callmunmap(addr, length) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, e1 := callmadvise(uintptr(unsafe.Pointer(_p0)), len(b), advice) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, e1 := callmprotect(uintptr(unsafe.Pointer(_p0)), len(b), prot) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, e1 := callmlock(uintptr(unsafe.Pointer(_p0)), len(b)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, e1 := callmlockall(flags) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, e1 := callmsync(uintptr(unsafe.Pointer(_p0)), len(b), flags) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, e1 := callmunlock(uintptr(unsafe.Pointer(_p0)), len(b)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, e1 := callmunlockall() + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, e1 := callpipe(uintptr(unsafe.Pointer(p))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, e1 := callpoll(uintptr(unsafe.Pointer(fds)), nfds, timeout) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func gettimeofday(tv *Timeval, tzp *Timezone) (err error) { + _, e1 := callgettimeofday(uintptr(unsafe.Pointer(tv)), uintptr(unsafe.Pointer(tzp))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, e1 := calltime(uintptr(unsafe.Pointer(t))) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callutime(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsystemcfg(label int) (n uint64) { + r0, _ := callgetsystemcfg(label) + n = uint64(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func umount(target string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, e1 := callumount(uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, e1 := callgetrlimit(resource, uintptr(unsafe.Pointer(rlim))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, e1 := callsetrlimit(resource, uintptr(unsafe.Pointer(rlim))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, e1 := calllseek(fd, offset, whence) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, e1 := callmmap64(addr, length, prot, flags, fd, offset) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go new file mode 100644 index 0000000..2caa5ad --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go @@ -0,0 +1,1192 @@ +// go run mksyscall_aix_ppc64.go -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build aix && ppc64 && gc +// +build aix,ppc64,gc + +package unix + +import ( + "unsafe" +) + +//go:cgo_import_dynamic libc_utimes utimes "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_utimensat utimensat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getcwd getcwd "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_accept accept "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getdirent getdirent "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_wait4 wait4 "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_ioctl ioctl "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_fcntl fcntl "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_fsync_range fsync_range "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_acct acct "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_chdir chdir "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_chroot chroot "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_close close "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_dup dup "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_exit exit "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_faccessat faccessat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_fchdir fchdir "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_fchmod fchmod "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_fchownat fchownat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_fdatasync fdatasync "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getpgid getpgid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getpid getpid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getppid getppid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getpriority getpriority "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getrusage getrusage "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getsid getsid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_kill kill "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_syslog syslog "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_mkdir mkdir "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_mknod mknod "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_mknodat mknodat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_open64 open64 "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_openat openat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_read read "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_readlink readlink "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_renameat renameat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_setdomainname setdomainname "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_sethostname sethostname "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_setpgid setpgid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_setsid setsid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_settimeofday settimeofday "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_setuid setuid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_setgid setgid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_setpriority setpriority "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_statx statx "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_sync sync "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_times times "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_umask umask "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_uname uname "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_unlink unlink "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_ustat ustat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_write write "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_dup2 dup2 "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_posix_fadvise64 posix_fadvise64 "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_fchown fchown "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_fstat fstat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_fstatat fstatat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_fstatfs fstatfs "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getegid getegid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_geteuid geteuid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getgid getgid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getuid getuid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_lchown lchown "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_listen listen "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_lstat lstat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_pause pause "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_pread64 pread64 "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_pwrite64 pwrite64 "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_select select "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_pselect pselect "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_setregid setregid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_setreuid setreuid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_shutdown shutdown "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_splice splice "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_stat stat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_statfs statfs "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_truncate truncate "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_bind bind "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_connect connect "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getgroups getgroups "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_setgroups setgroups "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getsockopt getsockopt "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_setsockopt setsockopt "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_socket socket "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_socketpair socketpair "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getpeername getpeername "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getsockname getsockname "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_recvfrom recvfrom "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_sendto sendto "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_nrecvmsg nrecvmsg "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_nsendmsg nsendmsg "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_munmap munmap "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_madvise madvise "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_mprotect mprotect "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_mlock mlock "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_mlockall mlockall "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_msync msync "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_munlock munlock "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_munlockall munlockall "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_pipe pipe "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_poll poll "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_time time "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_utime utime "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getsystemcfg getsystemcfg "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_umount umount "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_lseek lseek "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_mmap64 mmap64 "libc.a/shr_64.o" + +//go:linkname libc_utimes libc_utimes +//go:linkname libc_utimensat libc_utimensat +//go:linkname libc_getcwd libc_getcwd +//go:linkname libc_accept libc_accept +//go:linkname libc_getdirent libc_getdirent +//go:linkname libc_wait4 libc_wait4 +//go:linkname libc_ioctl libc_ioctl +//go:linkname libc_fcntl libc_fcntl +//go:linkname libc_fsync_range libc_fsync_range +//go:linkname libc_acct libc_acct +//go:linkname libc_chdir libc_chdir +//go:linkname libc_chroot libc_chroot +//go:linkname libc_close libc_close +//go:linkname libc_dup libc_dup +//go:linkname libc_exit libc_exit +//go:linkname libc_faccessat libc_faccessat +//go:linkname libc_fchdir libc_fchdir +//go:linkname libc_fchmod libc_fchmod +//go:linkname libc_fchmodat libc_fchmodat +//go:linkname libc_fchownat libc_fchownat +//go:linkname libc_fdatasync libc_fdatasync +//go:linkname libc_getpgid libc_getpgid +//go:linkname libc_getpgrp libc_getpgrp +//go:linkname libc_getpid libc_getpid +//go:linkname libc_getppid libc_getppid +//go:linkname libc_getpriority libc_getpriority +//go:linkname libc_getrusage libc_getrusage +//go:linkname libc_getsid libc_getsid +//go:linkname libc_kill libc_kill +//go:linkname libc_syslog libc_syslog +//go:linkname libc_mkdir libc_mkdir +//go:linkname libc_mkdirat libc_mkdirat +//go:linkname libc_mkfifo libc_mkfifo +//go:linkname libc_mknod libc_mknod +//go:linkname libc_mknodat libc_mknodat +//go:linkname libc_nanosleep libc_nanosleep +//go:linkname libc_open64 libc_open64 +//go:linkname libc_openat libc_openat +//go:linkname libc_read libc_read +//go:linkname libc_readlink libc_readlink +//go:linkname libc_renameat libc_renameat +//go:linkname libc_setdomainname libc_setdomainname +//go:linkname libc_sethostname libc_sethostname +//go:linkname libc_setpgid libc_setpgid +//go:linkname libc_setsid libc_setsid +//go:linkname libc_settimeofday libc_settimeofday +//go:linkname libc_setuid libc_setuid +//go:linkname libc_setgid libc_setgid +//go:linkname libc_setpriority libc_setpriority +//go:linkname libc_statx libc_statx +//go:linkname libc_sync libc_sync +//go:linkname libc_times libc_times +//go:linkname libc_umask libc_umask +//go:linkname libc_uname libc_uname +//go:linkname libc_unlink libc_unlink +//go:linkname libc_unlinkat libc_unlinkat +//go:linkname libc_ustat libc_ustat +//go:linkname libc_write libc_write +//go:linkname libc_dup2 libc_dup2 +//go:linkname libc_posix_fadvise64 libc_posix_fadvise64 +//go:linkname libc_fchown libc_fchown +//go:linkname libc_fstat libc_fstat +//go:linkname libc_fstatat libc_fstatat +//go:linkname libc_fstatfs libc_fstatfs +//go:linkname libc_ftruncate libc_ftruncate +//go:linkname libc_getegid libc_getegid +//go:linkname libc_geteuid libc_geteuid +//go:linkname libc_getgid libc_getgid +//go:linkname libc_getuid libc_getuid +//go:linkname libc_lchown libc_lchown +//go:linkname libc_listen libc_listen +//go:linkname libc_lstat libc_lstat +//go:linkname libc_pause libc_pause +//go:linkname libc_pread64 libc_pread64 +//go:linkname libc_pwrite64 libc_pwrite64 +//go:linkname libc_select libc_select +//go:linkname libc_pselect libc_pselect +//go:linkname libc_setregid libc_setregid +//go:linkname libc_setreuid libc_setreuid +//go:linkname libc_shutdown libc_shutdown +//go:linkname libc_splice libc_splice +//go:linkname libc_stat libc_stat +//go:linkname libc_statfs libc_statfs +//go:linkname libc_truncate libc_truncate +//go:linkname libc_bind libc_bind +//go:linkname libc_connect libc_connect +//go:linkname libc_getgroups libc_getgroups +//go:linkname libc_setgroups libc_setgroups +//go:linkname libc_getsockopt libc_getsockopt +//go:linkname libc_setsockopt libc_setsockopt +//go:linkname libc_socket libc_socket +//go:linkname libc_socketpair libc_socketpair +//go:linkname libc_getpeername libc_getpeername +//go:linkname libc_getsockname libc_getsockname +//go:linkname libc_recvfrom libc_recvfrom +//go:linkname libc_sendto libc_sendto +//go:linkname libc_nrecvmsg libc_nrecvmsg +//go:linkname libc_nsendmsg libc_nsendmsg +//go:linkname libc_munmap libc_munmap +//go:linkname libc_madvise libc_madvise +//go:linkname libc_mprotect libc_mprotect +//go:linkname libc_mlock libc_mlock +//go:linkname libc_mlockall libc_mlockall +//go:linkname libc_msync libc_msync +//go:linkname libc_munlock libc_munlock +//go:linkname libc_munlockall libc_munlockall +//go:linkname libc_pipe libc_pipe +//go:linkname libc_poll libc_poll +//go:linkname libc_gettimeofday libc_gettimeofday +//go:linkname libc_time libc_time +//go:linkname libc_utime libc_utime +//go:linkname libc_getsystemcfg libc_getsystemcfg +//go:linkname libc_umount libc_umount +//go:linkname libc_getrlimit libc_getrlimit +//go:linkname libc_setrlimit libc_setrlimit +//go:linkname libc_lseek libc_lseek +//go:linkname libc_mmap64 libc_mmap64 + +type syscallFunc uintptr + +var ( + libc_utimes, + libc_utimensat, + libc_getcwd, + libc_accept, + libc_getdirent, + libc_wait4, + libc_ioctl, + libc_fcntl, + libc_fsync_range, + libc_acct, + libc_chdir, + libc_chroot, + libc_close, + libc_dup, + libc_exit, + libc_faccessat, + libc_fchdir, + libc_fchmod, + libc_fchmodat, + libc_fchownat, + libc_fdatasync, + libc_getpgid, + libc_getpgrp, + libc_getpid, + libc_getppid, + libc_getpriority, + libc_getrusage, + libc_getsid, + libc_kill, + libc_syslog, + libc_mkdir, + libc_mkdirat, + libc_mkfifo, + libc_mknod, + libc_mknodat, + libc_nanosleep, + libc_open64, + libc_openat, + libc_read, + libc_readlink, + libc_renameat, + libc_setdomainname, + libc_sethostname, + libc_setpgid, + libc_setsid, + libc_settimeofday, + libc_setuid, + libc_setgid, + libc_setpriority, + libc_statx, + libc_sync, + libc_times, + libc_umask, + libc_uname, + libc_unlink, + libc_unlinkat, + libc_ustat, + libc_write, + libc_dup2, + libc_posix_fadvise64, + libc_fchown, + libc_fstat, + libc_fstatat, + libc_fstatfs, + libc_ftruncate, + libc_getegid, + libc_geteuid, + libc_getgid, + libc_getuid, + libc_lchown, + libc_listen, + libc_lstat, + libc_pause, + libc_pread64, + libc_pwrite64, + libc_select, + libc_pselect, + libc_setregid, + libc_setreuid, + libc_shutdown, + libc_splice, + libc_stat, + libc_statfs, + libc_truncate, + libc_bind, + libc_connect, + libc_getgroups, + libc_setgroups, + libc_getsockopt, + libc_setsockopt, + libc_socket, + libc_socketpair, + libc_getpeername, + libc_getsockname, + libc_recvfrom, + libc_sendto, + libc_nrecvmsg, + libc_nsendmsg, + libc_munmap, + libc_madvise, + libc_mprotect, + libc_mlock, + libc_mlockall, + libc_msync, + libc_munlock, + libc_munlockall, + libc_pipe, + libc_poll, + libc_gettimeofday, + libc_time, + libc_utime, + libc_getsystemcfg, + libc_umount, + libc_getrlimit, + libc_setrlimit, + libc_lseek, + libc_mmap64 syscallFunc +) + +// Implemented in runtime/syscall_aix.go. +func rawSyscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) +func syscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callutimes(_p0 uintptr, times uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utimes)), 2, _p0, times, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callutimensat(dirfd int, _p0 uintptr, times uintptr, flag int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utimensat)), 4, uintptr(dirfd), _p0, times, uintptr(flag), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetcwd(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getcwd)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callaccept(s int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_accept)), 3, uintptr(s), rsa, addrlen, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetdirent(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getdirent)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callwait4(pid int, status uintptr, options int, rusage uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_wait4)), 4, uintptr(pid), status, uintptr(options), rusage, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callioctl(fd int, req int, arg uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ioctl)), 3, uintptr(fd), uintptr(req), arg, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fcntl)), 3, fd, uintptr(cmd), arg, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfsync_range(fd int, how int, start int64, length int64) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fsync_range)), 4, uintptr(fd), uintptr(how), uintptr(start), uintptr(length), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callacct(_p0 uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_acct)), 1, _p0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callchdir(_p0 uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_chdir)), 1, _p0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callchroot(_p0 uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_chroot)), 1, _p0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callclose(fd int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_close)), 1, uintptr(fd), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calldup(oldfd int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_dup)), 1, uintptr(oldfd), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callexit(code int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_exit)), 1, uintptr(code), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfaccessat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_faccessat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(flags), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfchdir(fd int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchdir)), 1, uintptr(fd), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfchmod(fd int, mode uint32) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchmod)), 2, uintptr(fd), uintptr(mode), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfchmodat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchmodat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(flags), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfchownat(dirfd int, _p0 uintptr, uid int, gid int, flags int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchownat)), 5, uintptr(dirfd), _p0, uintptr(uid), uintptr(gid), uintptr(flags), 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfdatasync(fd int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetpgid(pid int) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetpgrp() (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getpgrp)), 0, 0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetpid() (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpid)), 0, 0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetppid() (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getppid)), 0, 0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetpriority(which int, who int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getpriority)), 2, uintptr(which), uintptr(who), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetrusage(who int, rusage uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getrusage)), 2, uintptr(who), rusage, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetsid(pid int) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getsid)), 1, uintptr(pid), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callkill(pid int, sig int) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_kill)), 2, uintptr(pid), uintptr(sig), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsyslog(typ int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_syslog)), 3, uintptr(typ), _p0, uintptr(_lenp0), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmkdir(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkdir)), 3, uintptr(dirfd), _p0, uintptr(mode), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmkdirat(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkdirat)), 3, uintptr(dirfd), _p0, uintptr(mode), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmkfifo(_p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkfifo)), 2, _p0, uintptr(mode), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmknod(_p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mknod)), 3, _p0, uintptr(mode), uintptr(dev), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmknodat(dirfd int, _p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mknodat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(dev), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callnanosleep(time uintptr, leftover uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nanosleep)), 2, time, leftover, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callopen64(_p0 uintptr, mode int, perm uint32) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_open64)), 3, _p0, uintptr(mode), uintptr(perm), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callopenat(dirfd int, _p0 uintptr, flags int, mode uint32) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_openat)), 4, uintptr(dirfd), _p0, uintptr(flags), uintptr(mode), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callread(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_read)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callreadlink(_p0 uintptr, _p1 uintptr, _lenp1 int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_readlink)), 3, _p0, _p1, uintptr(_lenp1), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callrenameat(olddirfd int, _p0 uintptr, newdirfd int, _p1 uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_renameat)), 4, uintptr(olddirfd), _p0, uintptr(newdirfd), _p1, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetdomainname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setdomainname)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsethostname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sethostname)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetpgid(pid int, pgid int) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetsid() (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setsid)), 0, 0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsettimeofday(tv uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_settimeofday)), 1, tv, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetuid(uid int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setuid)), 1, uintptr(uid), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetgid(uid int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setgid)), 1, uintptr(uid), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetpriority(which int, who int, prio int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setpriority)), 3, uintptr(which), uintptr(who), uintptr(prio), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callstatx(dirfd int, _p0 uintptr, flags int, mask int, stat uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_statx)), 5, uintptr(dirfd), _p0, uintptr(flags), uintptr(mask), stat, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsync() (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sync)), 0, 0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calltimes(tms uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_times)), 1, tms, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callumask(mask int) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_umask)), 1, uintptr(mask), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calluname(buf uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_uname)), 1, buf, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callunlink(_p0 uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_unlink)), 1, _p0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callunlinkat(dirfd int, _p0 uintptr, flags int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_unlinkat)), 3, uintptr(dirfd), _p0, uintptr(flags), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callustat(dev int, ubuf uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ustat)), 2, uintptr(dev), ubuf, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callwrite(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_write)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calldup2(oldfd int, newfd int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_dup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callposix_fadvise64(fd int, offset int64, length int64, advice int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_posix_fadvise64)), 4, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfchown(fd int, uid int, gid int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfstat(fd int, stat uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstat)), 2, uintptr(fd), stat, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfstatat(dirfd int, _p0 uintptr, stat uintptr, flags int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstatat)), 4, uintptr(dirfd), _p0, stat, uintptr(flags), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfstatfs(fd int, buf uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstatfs)), 2, uintptr(fd), buf, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callftruncate(fd int, length int64) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ftruncate)), 2, uintptr(fd), uintptr(length), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetegid() (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getegid)), 0, 0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgeteuid() (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_geteuid)), 0, 0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetgid() (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getgid)), 0, 0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetuid() (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getuid)), 0, 0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calllchown(_p0 uintptr, uid int, gid int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lchown)), 3, _p0, uintptr(uid), uintptr(gid), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calllisten(s int, n int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_listen)), 2, uintptr(s), uintptr(n), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calllstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lstat)), 2, _p0, stat, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpause() (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pause)), 0, 0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpread64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pread64)), 4, uintptr(fd), _p0, uintptr(_lenp0), uintptr(offset), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpwrite64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pwrite64)), 4, uintptr(fd), _p0, uintptr(_lenp0), uintptr(offset), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_select)), 5, uintptr(nfd), r, w, e, timeout, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr, sigmask uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pselect)), 6, uintptr(nfd), r, w, e, timeout, sigmask) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetregid(rgid int, egid int) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setregid)), 2, uintptr(rgid), uintptr(egid), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetreuid(ruid int, euid int) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setreuid)), 2, uintptr(ruid), uintptr(euid), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callshutdown(fd int, how int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_shutdown)), 2, uintptr(fd), uintptr(how), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsplice(rfd int, roff uintptr, wfd int, woff uintptr, len int, flags int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_splice)), 6, uintptr(rfd), roff, uintptr(wfd), woff, uintptr(len), uintptr(flags)) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callstat(_p0 uintptr, statptr uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_stat)), 2, _p0, statptr, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callstatfs(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_statfs)), 2, _p0, buf, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calltruncate(_p0 uintptr, length int64) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_truncate)), 2, _p0, uintptr(length), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callbind(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_bind)), 3, uintptr(s), addr, addrlen, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callconnect(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_connect)), 3, uintptr(s), addr, addrlen, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getgroups)), 2, uintptr(n), list, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setgroups)), 2, uintptr(n), list, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), val, vallen, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), val, vallen, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsocket(domain int, typ int, proto int) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_socket)), 3, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsocketpair(domain int, typ int, proto int, fd uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_socketpair)), 4, uintptr(domain), uintptr(typ), uintptr(proto), fd, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetpeername(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpeername)), 3, uintptr(fd), rsa, addrlen, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetsockname(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getsockname)), 3, uintptr(fd), rsa, addrlen, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callrecvfrom(fd int, _p0 uintptr, _lenp0 int, flags int, from uintptr, fromlen uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_recvfrom)), 6, uintptr(fd), _p0, uintptr(_lenp0), uintptr(flags), from, fromlen) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsendto(s int, _p0 uintptr, _lenp0 int, flags int, to uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sendto)), 6, uintptr(s), _p0, uintptr(_lenp0), uintptr(flags), to, addrlen) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callnrecvmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nrecvmsg)), 3, uintptr(s), msg, uintptr(flags), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callnsendmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nsendmsg)), 3, uintptr(s), msg, uintptr(flags), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmunmap(addr uintptr, length uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munmap)), 2, addr, length, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmadvise(_p0 uintptr, _lenp0 int, advice int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_madvise)), 3, _p0, uintptr(_lenp0), uintptr(advice), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmprotect(_p0 uintptr, _lenp0 int, prot int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mprotect)), 3, _p0, uintptr(_lenp0), uintptr(prot), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mlock)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmlockall(flags int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmsync(_p0 uintptr, _lenp0 int, flags int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_msync)), 3, _p0, uintptr(_lenp0), uintptr(flags), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmunlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munlock)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmunlockall() (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munlockall)), 0, 0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpipe(p uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_pipe)), 1, p, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpoll(fds uintptr, nfds int, timeout int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_poll)), 3, fds, uintptr(nfds), uintptr(timeout), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgettimeofday(tv uintptr, tzp uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_gettimeofday)), 2, tv, tzp, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calltime(t uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_time)), 1, t, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callutime(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utime)), 2, _p0, buf, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetsystemcfg(label int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getsystemcfg)), 1, uintptr(label), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callumount(_p0 uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_umount)), 1, _p0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getrlimit)), 2, uintptr(resource), rlim, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setrlimit)), 2, uintptr(resource), rlim, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmmap64(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mmap64)), 6, addr, length, uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go new file mode 100644 index 0000000..944a714 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go @@ -0,0 +1,1070 @@ +// go run mksyscall_aix_ppc64.go -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build aix && ppc64 && gccgo +// +build aix,ppc64,gccgo + +package unix + +/* +#include +int utimes(uintptr_t, uintptr_t); +int utimensat(int, uintptr_t, uintptr_t, int); +int getcwd(uintptr_t, size_t); +int accept(int, uintptr_t, uintptr_t); +int getdirent(int, uintptr_t, size_t); +int wait4(int, uintptr_t, int, uintptr_t); +int ioctl(int, int, uintptr_t); +int fcntl(uintptr_t, int, uintptr_t); +int fsync_range(int, int, long long, long long); +int acct(uintptr_t); +int chdir(uintptr_t); +int chroot(uintptr_t); +int close(int); +int dup(int); +void exit(int); +int faccessat(int, uintptr_t, unsigned int, int); +int fchdir(int); +int fchmod(int, unsigned int); +int fchmodat(int, uintptr_t, unsigned int, int); +int fchownat(int, uintptr_t, int, int, int); +int fdatasync(int); +int getpgid(int); +int getpgrp(); +int getpid(); +int getppid(); +int getpriority(int, int); +int getrusage(int, uintptr_t); +int getsid(int); +int kill(int, int); +int syslog(int, uintptr_t, size_t); +int mkdir(int, uintptr_t, unsigned int); +int mkdirat(int, uintptr_t, unsigned int); +int mkfifo(uintptr_t, unsigned int); +int mknod(uintptr_t, unsigned int, int); +int mknodat(int, uintptr_t, unsigned int, int); +int nanosleep(uintptr_t, uintptr_t); +int open64(uintptr_t, int, unsigned int); +int openat(int, uintptr_t, int, unsigned int); +int read(int, uintptr_t, size_t); +int readlink(uintptr_t, uintptr_t, size_t); +int renameat(int, uintptr_t, int, uintptr_t); +int setdomainname(uintptr_t, size_t); +int sethostname(uintptr_t, size_t); +int setpgid(int, int); +int setsid(); +int settimeofday(uintptr_t); +int setuid(int); +int setgid(int); +int setpriority(int, int, int); +int statx(int, uintptr_t, int, int, uintptr_t); +int sync(); +uintptr_t times(uintptr_t); +int umask(int); +int uname(uintptr_t); +int unlink(uintptr_t); +int unlinkat(int, uintptr_t, int); +int ustat(int, uintptr_t); +int write(int, uintptr_t, size_t); +int dup2(int, int); +int posix_fadvise64(int, long long, long long, int); +int fchown(int, int, int); +int fstat(int, uintptr_t); +int fstatat(int, uintptr_t, uintptr_t, int); +int fstatfs(int, uintptr_t); +int ftruncate(int, long long); +int getegid(); +int geteuid(); +int getgid(); +int getuid(); +int lchown(uintptr_t, int, int); +int listen(int, int); +int lstat(uintptr_t, uintptr_t); +int pause(); +int pread64(int, uintptr_t, size_t, long long); +int pwrite64(int, uintptr_t, size_t, long long); +#define c_select select +int select(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t); +int pselect(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t); +int setregid(int, int); +int setreuid(int, int); +int shutdown(int, int); +long long splice(int, uintptr_t, int, uintptr_t, int, int); +int stat(uintptr_t, uintptr_t); +int statfs(uintptr_t, uintptr_t); +int truncate(uintptr_t, long long); +int bind(int, uintptr_t, uintptr_t); +int connect(int, uintptr_t, uintptr_t); +int getgroups(int, uintptr_t); +int setgroups(int, uintptr_t); +int getsockopt(int, int, int, uintptr_t, uintptr_t); +int setsockopt(int, int, int, uintptr_t, uintptr_t); +int socket(int, int, int); +int socketpair(int, int, int, uintptr_t); +int getpeername(int, uintptr_t, uintptr_t); +int getsockname(int, uintptr_t, uintptr_t); +int recvfrom(int, uintptr_t, size_t, int, uintptr_t, uintptr_t); +int sendto(int, uintptr_t, size_t, int, uintptr_t, uintptr_t); +int nrecvmsg(int, uintptr_t, int); +int nsendmsg(int, uintptr_t, int); +int munmap(uintptr_t, uintptr_t); +int madvise(uintptr_t, size_t, int); +int mprotect(uintptr_t, size_t, int); +int mlock(uintptr_t, size_t); +int mlockall(int); +int msync(uintptr_t, size_t, int); +int munlock(uintptr_t, size_t); +int munlockall(); +int pipe(uintptr_t); +int poll(uintptr_t, int, int); +int gettimeofday(uintptr_t, uintptr_t); +int time(uintptr_t); +int utime(uintptr_t, uintptr_t); +unsigned long long getsystemcfg(int); +int umount(uintptr_t); +int getrlimit(int, uintptr_t); +int setrlimit(int, uintptr_t); +long long lseek(int, long long, int); +uintptr_t mmap64(uintptr_t, uintptr_t, int, int, int, long long); + +*/ +import "C" +import ( + "syscall" +) + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callutimes(_p0 uintptr, times uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.utimes(C.uintptr_t(_p0), C.uintptr_t(times))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callutimensat(dirfd int, _p0 uintptr, times uintptr, flag int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.utimensat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(times), C.int(flag))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetcwd(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getcwd(C.uintptr_t(_p0), C.size_t(_lenp0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callaccept(s int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.accept(C.int(s), C.uintptr_t(rsa), C.uintptr_t(addrlen))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetdirent(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getdirent(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callwait4(pid int, status uintptr, options int, rusage uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.wait4(C.int(pid), C.uintptr_t(status), C.int(options), C.uintptr_t(rusage))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callioctl(fd int, req int, arg uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.ioctl(C.int(fd), C.int(req), C.uintptr_t(arg))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfsync_range(fd int, how int, start int64, length int64) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.fsync_range(C.int(fd), C.int(how), C.longlong(start), C.longlong(length))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callacct(_p0 uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.acct(C.uintptr_t(_p0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callchdir(_p0 uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.chdir(C.uintptr_t(_p0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callchroot(_p0 uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.chroot(C.uintptr_t(_p0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callclose(fd int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.close(C.int(fd))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calldup(oldfd int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.dup(C.int(oldfd))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callexit(code int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.exit(C.int(code))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfaccessat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.faccessat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfchdir(fd int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.fchdir(C.int(fd))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfchmod(fd int, mode uint32) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.fchmod(C.int(fd), C.uint(mode))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfchmodat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.fchmodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfchownat(dirfd int, _p0 uintptr, uid int, gid int, flags int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.fchownat(C.int(dirfd), C.uintptr_t(_p0), C.int(uid), C.int(gid), C.int(flags))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfdatasync(fd int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.fdatasync(C.int(fd))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetpgid(pid int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getpgid(C.int(pid))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetpgrp() (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getpgrp()) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetpid() (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getpid()) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetppid() (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getppid()) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetpriority(which int, who int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getpriority(C.int(which), C.int(who))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetrusage(who int, rusage uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getrusage(C.int(who), C.uintptr_t(rusage))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetsid(pid int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getsid(C.int(pid))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callkill(pid int, sig int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.kill(C.int(pid), C.int(sig))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsyslog(typ int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.syslog(C.int(typ), C.uintptr_t(_p0), C.size_t(_lenp0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmkdir(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.mkdir(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmkdirat(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.mkdirat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmkfifo(_p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.mkfifo(C.uintptr_t(_p0), C.uint(mode))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmknod(_p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.mknod(C.uintptr_t(_p0), C.uint(mode), C.int(dev))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmknodat(dirfd int, _p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.mknodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(dev))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callnanosleep(time uintptr, leftover uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.nanosleep(C.uintptr_t(time), C.uintptr_t(leftover))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callopen64(_p0 uintptr, mode int, perm uint32) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.open64(C.uintptr_t(_p0), C.int(mode), C.uint(perm))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callopenat(dirfd int, _p0 uintptr, flags int, mode uint32) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.openat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.uint(mode))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callread(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.read(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callreadlink(_p0 uintptr, _p1 uintptr, _lenp1 int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.readlink(C.uintptr_t(_p0), C.uintptr_t(_p1), C.size_t(_lenp1))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callrenameat(olddirfd int, _p0 uintptr, newdirfd int, _p1 uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.renameat(C.int(olddirfd), C.uintptr_t(_p0), C.int(newdirfd), C.uintptr_t(_p1))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetdomainname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.setdomainname(C.uintptr_t(_p0), C.size_t(_lenp0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsethostname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.sethostname(C.uintptr_t(_p0), C.size_t(_lenp0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetpgid(pid int, pgid int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.setpgid(C.int(pid), C.int(pgid))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetsid() (r1 uintptr, e1 Errno) { + r1 = uintptr(C.setsid()) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsettimeofday(tv uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.settimeofday(C.uintptr_t(tv))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetuid(uid int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.setuid(C.int(uid))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetgid(uid int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.setgid(C.int(uid))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetpriority(which int, who int, prio int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.setpriority(C.int(which), C.int(who), C.int(prio))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callstatx(dirfd int, _p0 uintptr, flags int, mask int, stat uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.statx(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.int(mask), C.uintptr_t(stat))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsync() (r1 uintptr, e1 Errno) { + r1 = uintptr(C.sync()) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calltimes(tms uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.times(C.uintptr_t(tms))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callumask(mask int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.umask(C.int(mask))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calluname(buf uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.uname(C.uintptr_t(buf))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callunlink(_p0 uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.unlink(C.uintptr_t(_p0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callunlinkat(dirfd int, _p0 uintptr, flags int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.unlinkat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callustat(dev int, ubuf uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.ustat(C.int(dev), C.uintptr_t(ubuf))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callwrite(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.write(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calldup2(oldfd int, newfd int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.dup2(C.int(oldfd), C.int(newfd))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callposix_fadvise64(fd int, offset int64, length int64, advice int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.posix_fadvise64(C.int(fd), C.longlong(offset), C.longlong(length), C.int(advice))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfchown(fd int, uid int, gid int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.fchown(C.int(fd), C.int(uid), C.int(gid))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfstat(fd int, stat uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.fstat(C.int(fd), C.uintptr_t(stat))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfstatat(dirfd int, _p0 uintptr, stat uintptr, flags int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.fstatat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(stat), C.int(flags))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfstatfs(fd int, buf uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.fstatfs(C.int(fd), C.uintptr_t(buf))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callftruncate(fd int, length int64) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.ftruncate(C.int(fd), C.longlong(length))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetegid() (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getegid()) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgeteuid() (r1 uintptr, e1 Errno) { + r1 = uintptr(C.geteuid()) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetgid() (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getgid()) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetuid() (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getuid()) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calllchown(_p0 uintptr, uid int, gid int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.lchown(C.uintptr_t(_p0), C.int(uid), C.int(gid))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calllisten(s int, n int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.listen(C.int(s), C.int(n))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calllstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.lstat(C.uintptr_t(_p0), C.uintptr_t(stat))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpause() (r1 uintptr, e1 Errno) { + r1 = uintptr(C.pause()) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpread64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.pread64(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.longlong(offset))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpwrite64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.pwrite64(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.longlong(offset))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.c_select(C.int(nfd), C.uintptr_t(r), C.uintptr_t(w), C.uintptr_t(e), C.uintptr_t(timeout))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr, sigmask uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.pselect(C.int(nfd), C.uintptr_t(r), C.uintptr_t(w), C.uintptr_t(e), C.uintptr_t(timeout), C.uintptr_t(sigmask))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetregid(rgid int, egid int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.setregid(C.int(rgid), C.int(egid))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetreuid(ruid int, euid int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.setreuid(C.int(ruid), C.int(euid))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callshutdown(fd int, how int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.shutdown(C.int(fd), C.int(how))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsplice(rfd int, roff uintptr, wfd int, woff uintptr, len int, flags int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.splice(C.int(rfd), C.uintptr_t(roff), C.int(wfd), C.uintptr_t(woff), C.int(len), C.int(flags))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callstat(_p0 uintptr, statptr uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.stat(C.uintptr_t(_p0), C.uintptr_t(statptr))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callstatfs(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.statfs(C.uintptr_t(_p0), C.uintptr_t(buf))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calltruncate(_p0 uintptr, length int64) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.truncate(C.uintptr_t(_p0), C.longlong(length))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callbind(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.bind(C.int(s), C.uintptr_t(addr), C.uintptr_t(addrlen))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callconnect(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.connect(C.int(s), C.uintptr_t(addr), C.uintptr_t(addrlen))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getgroups(C.int(n), C.uintptr_t(list))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.setgroups(C.int(n), C.uintptr_t(list))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(val), C.uintptr_t(vallen))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.setsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(val), C.uintptr_t(vallen))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsocket(domain int, typ int, proto int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.socket(C.int(domain), C.int(typ), C.int(proto))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsocketpair(domain int, typ int, proto int, fd uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.socketpair(C.int(domain), C.int(typ), C.int(proto), C.uintptr_t(fd))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetpeername(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getpeername(C.int(fd), C.uintptr_t(rsa), C.uintptr_t(addrlen))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetsockname(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getsockname(C.int(fd), C.uintptr_t(rsa), C.uintptr_t(addrlen))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callrecvfrom(fd int, _p0 uintptr, _lenp0 int, flags int, from uintptr, fromlen uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.recvfrom(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.int(flags), C.uintptr_t(from), C.uintptr_t(fromlen))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsendto(s int, _p0 uintptr, _lenp0 int, flags int, to uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.sendto(C.int(s), C.uintptr_t(_p0), C.size_t(_lenp0), C.int(flags), C.uintptr_t(to), C.uintptr_t(addrlen))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callnrecvmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.nrecvmsg(C.int(s), C.uintptr_t(msg), C.int(flags))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callnsendmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.nsendmsg(C.int(s), C.uintptr_t(msg), C.int(flags))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmunmap(addr uintptr, length uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.munmap(C.uintptr_t(addr), C.uintptr_t(length))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmadvise(_p0 uintptr, _lenp0 int, advice int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.madvise(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(advice))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmprotect(_p0 uintptr, _lenp0 int, prot int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.mprotect(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(prot))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.mlock(C.uintptr_t(_p0), C.size_t(_lenp0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmlockall(flags int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.mlockall(C.int(flags))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmsync(_p0 uintptr, _lenp0 int, flags int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.msync(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(flags))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmunlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.munlock(C.uintptr_t(_p0), C.size_t(_lenp0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmunlockall() (r1 uintptr, e1 Errno) { + r1 = uintptr(C.munlockall()) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpipe(p uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.pipe(C.uintptr_t(p))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpoll(fds uintptr, nfds int, timeout int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.poll(C.uintptr_t(fds), C.int(nfds), C.int(timeout))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgettimeofday(tv uintptr, tzp uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.gettimeofday(C.uintptr_t(tv), C.uintptr_t(tzp))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calltime(t uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.time(C.uintptr_t(t))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callutime(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.utime(C.uintptr_t(_p0), C.uintptr_t(buf))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetsystemcfg(label int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getsystemcfg(C.int(label))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callumount(_p0 uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.umount(C.uintptr_t(_p0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getrlimit(C.int(resource), C.uintptr_t(rlim))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.setrlimit(C.int(resource), C.uintptr_t(rlim))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.lseek(C.int(fd), C.longlong(offset), C.int(whence))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmmap64(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.mmap64(C.uintptr_t(addr), C.uintptr_t(length), C.int(prot), C.int(flags), C.int(fd), C.longlong(offset))) + e1 = syscall.GetErrno() + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go new file mode 100644 index 0000000..a06eb09 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go @@ -0,0 +1,40 @@ +// go run mksyscall.go -tags darwin,amd64,go1.13 syscall_darwin.1_13.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build darwin && amd64 && go1.13 +// +build darwin,amd64,go1.13 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func closedir(dir uintptr) (err error) { + _, _, e1 := syscall_syscall(libc_closedir_trampoline_addr, uintptr(dir), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_closedir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) { + r0, _, _ := syscall_syscall(libc_readdir_r_trampoline_addr, uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result))) + res = Errno(r0) + return +} + +var libc_readdir_r_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s new file mode 100644 index 0000000..d6c3e25 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s @@ -0,0 +1,25 @@ +// go run mkasm_darwin.go amd64 +// Code generated by the command above; DO NOT EDIT. + +//go:build go1.13 +// +build go1.13 + +#include "textflag.h" + +TEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fdopendir(SB) + +GLOBL ·libc_fdopendir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB) + +TEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_closedir(SB) + +GLOBL ·libc_closedir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB) + +TEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readdir_r(SB) + +GLOBL ·libc_readdir_r_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go new file mode 100644 index 0000000..8793765 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -0,0 +1,2495 @@ +// go run mksyscall.go -tags darwin,amd64,go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build darwin && amd64 && go1.12 +// +build darwin,amd64,go1.12 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getgroups_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getgroups getgroups "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setgroups_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setgroups setgroups "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_wait4_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_wait4 wait4 "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_accept_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_accept accept "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_bind_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_bind bind "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_connect_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_connect connect "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_socket_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_socket socket "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getsockopt_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getsockopt getsockopt "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setsockopt_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setsockopt setsockopt "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getpeername_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpeername getpeername "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getsockname_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getsockname getsockname "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_shutdown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_shutdown shutdown "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_socketpair_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_socketpair socketpair "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_recvfrom_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_recvfrom recvfrom "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_sendto_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sendto sendto "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_recvmsg_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_recvmsg recvmsg "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_sendmsg_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sendmsg sendmsg "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_kevent_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_kevent kevent "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_utimes_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_utimes utimes "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_futimes_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_futimes futimes "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_poll_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_poll poll "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_madvise_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_madvise madvise "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mlock_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mlock mlock "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mlockall_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mlockall mlockall "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mprotect_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mprotect mprotect "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_msync_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_msync msync "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_munlock_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_munlock munlock "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_munlockall_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_munlockall munlockall "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]int32) (err error) { + _, _, e1 := syscall_rawSyscall(libc_pipe_trampoline_addr, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pipe_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pipe pipe "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + r0, _, e1 := syscall_syscall6(libc_getxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getxattr_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getxattr getxattr "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + r0, _, e1 := syscall_syscall6(libc_fgetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fgetxattr_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fgetxattr fgetxattr "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_setxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setxattr_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setxattr setxattr "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_fsetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fsetxattr_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fsetxattr fsetxattr "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func removexattr(path string, attr string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_removexattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_removexattr_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_removexattr removexattr "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fremovexattr(fd int, attr string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_fremovexattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fremovexattr_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fremovexattr fremovexattr "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func listxattr(path string, dest *byte, size int, options int) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := syscall_syscall6(libc_listxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_listxattr_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_listxattr listxattr "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) { + r0, _, e1 := syscall_syscall6(libc_flistxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_flistxattr_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_flistxattr flistxattr "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_utimensat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_utimensat utimensat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fcntl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fcntl fcntl "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kill(pid int, signum int, posix int) (err error) { + _, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), uintptr(posix)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_kill_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_kill kill "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_ioctl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_ioctl ioctl "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_sysctl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sysctl sysctl "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) { + _, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_sendfile_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmat(id int, addr uintptr, flag int) (ret uintptr, err error) { + r0, _, e1 := syscall_syscall(libc_shmat_trampoline_addr, uintptr(id), uintptr(addr), uintptr(flag)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_shmat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_shmat shmat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) { + r0, _, e1 := syscall_syscall(libc_shmctl_trampoline_addr, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf))) + result = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_shmctl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_shmctl shmctl "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmdt(addr uintptr) (err error) { + _, _, e1 := syscall_syscall(libc_shmdt_trampoline_addr, uintptr(addr), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_shmdt_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_shmdt shmdt "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmget(key int, size int, flag int) (id int, err error) { + r0, _, e1 := syscall_syscall(libc_shmget_trampoline_addr, uintptr(key), uintptr(size), uintptr(flag)) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_shmget_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_shmget shmget "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_access_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_access access "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_adjtime_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_adjtime adjtime "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_chdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chdir chdir "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_chflags_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chflags chflags "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_chmod_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chmod chmod "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_chown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chown chown "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_chroot_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chroot chroot "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_clock_gettime_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_clock_gettime clock_gettime "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_close_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Clonefile(src string, dst string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(src) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dst) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_clonefile_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_clonefile_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_clonefile clonefile "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Clonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(src) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dst) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_clonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_clonefileat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_clonefileat clonefileat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_dup_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_dup dup "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_dup2_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_dup2 dup2 "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exchangedata(path1 string, path2 string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path1) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(path2) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_exchangedata_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_exchangedata_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_exchangedata exchangedata "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0) + return +} + +var libc_exit_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_exit exit "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_faccessat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_faccessat faccessat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fchdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchdir fchdir "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fchflags_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchflags fchflags "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fchmod_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchmod fchmod "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fchmodat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchmodat fchmodat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fchown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchown fchown "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fchownat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchownat fchownat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(dst) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_fclonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fclonefileat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fclonefileat fclonefileat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_flock_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_flock flock "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fpathconf_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fpathconf fpathconf "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fsync_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fsync fsync "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_ftruncate_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_ftruncate ftruncate "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getcwd_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getcwd getcwd "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := syscall_syscall(libc_getdtablesize_trampoline_addr, 0, 0, 0) + size = int(r0) + return +} + +var libc_getdtablesize_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getdtablesize getdtablesize "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0) + egid = int(r0) + return +} + +var libc_getegid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getegid getegid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0) + uid = int(r0) + return +} + +var libc_geteuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_geteuid geteuid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0) + gid = int(r0) + return +} + +var libc_getgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getgid getgid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getpgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpgid getpgid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0) + pgrp = int(r0) + return +} + +var libc_getpgrp_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpgrp getpgrp "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0) + pid = int(r0) + return +} + +var libc_getpid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpid getpid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0) + ppid = int(r0) + return +} + +var libc_getppid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getppid getppid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getpriority_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpriority getpriority "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getrlimit_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getrlimit getrlimit "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getrusage_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getrusage getrusage "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getsid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getsid getsid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tp *Timeval) (err error) { + _, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_gettimeofday_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0) + uid = int(r0) + return +} + +var libc_getuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getuid getuid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := syscall_rawSyscall(libc_issetugid_trampoline_addr, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +var libc_issetugid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_issetugid issetugid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_kqueue_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_kqueue kqueue "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_lchown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_lchown lchown "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_link_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_link link "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_linkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_linkat linkat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_listen_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_listen listen "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mkdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mkdir mkdir "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mkdirat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mkdirat mkdirat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mkfifo_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mkfifo mkfifo "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mknod_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mknod mknod "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_open_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_open open "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_openat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pathconf_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pathconf pathconf "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pread_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pread pread "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pwrite_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pwrite pwrite "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_read_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_readlink_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readlink readlink "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_readlinkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readlinkat readlinkat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_rename_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_rename rename "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_renameat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_renameat renameat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_revoke_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_revoke revoke "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_rmdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_rmdir rmdir "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence)) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_lseek_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_lseek lseek "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_select_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_select select "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := syscall_syscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setegid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setegid setegid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_seteuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_seteuid seteuid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setgid setgid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setlogin_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setlogin setlogin "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setpgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setpgid setpgid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setpriority_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setpriority setpriority "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setprivexec(flag int) (err error) { + _, _, e1 := syscall_syscall(libc_setprivexec_trampoline_addr, uintptr(flag), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setprivexec_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setprivexec setprivexec "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setregid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setregid setregid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setreuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setreuid setreuid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setrlimit_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setsid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setsid setsid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_settimeofday_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_settimeofday settimeofday "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setuid setuid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_symlink_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_symlink symlink "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_symlinkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_symlinkat symlinkat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_sync_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sync sync "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_truncate_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_truncate truncate "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +var libc_umask_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_umask umask "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_undelete_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_undelete_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_undelete undelete "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_unlink_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unlink unlink "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_unlinkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unlinkat unlinkat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_unmount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unmount unmount "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_write_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_write write "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mmap_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mmap mmap "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_munmap_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_munmap munmap "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// 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 { + err = errnoErr(e1) + } + return +} + +var libc_fstat64_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fstat64 fstat64 "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_fstatat64_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fstatat64_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fstatat64 fstatat64 "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := syscall_syscall(libc_fstatfs64_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fstatfs64_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fstatfs64 fstatfs64 "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_getfsstat64_trampoline_addr, uintptr(buf), uintptr(size), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getfsstat64_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getfsstat64 getfsstat64 "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_lstat64_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_lstat64_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_lstat64 lstat64 "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := syscall_syscall6(libc_ptrace_trampoline_addr, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_ptrace_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_ptrace ptrace "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_stat64_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_stat64_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_stat64 stat64 "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_statfs64_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_statfs64_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_statfs64 statfs64 "/usr/lib/libSystem.B.dylib" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s new file mode 100644 index 0000000..8da90cf --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s @@ -0,0 +1,883 @@ +// go run mkasm_darwin.go amd64 +// Code generated by the command above; DO NOT EDIT. + +//go:build go1.12 +// +build go1.12 + +#include "textflag.h" + +TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getgroups(SB) + +GLOBL ·libc_getgroups_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB) + +TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setgroups(SB) + +GLOBL ·libc_setgroups_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB) + +TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_wait4(SB) + +GLOBL ·libc_wait4_trampoline_addr(SB), RODATA, $8 +DATA ·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB) + +TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_accept(SB) + +GLOBL ·libc_accept_trampoline_addr(SB), RODATA, $8 +DATA ·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB) + +TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_bind(SB) + +GLOBL ·libc_bind_trampoline_addr(SB), RODATA, $8 +DATA ·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB) + +TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_connect(SB) + +GLOBL ·libc_connect_trampoline_addr(SB), RODATA, $8 +DATA ·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB) + +TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_socket(SB) + +GLOBL ·libc_socket_trampoline_addr(SB), RODATA, $8 +DATA ·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB) + +TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getsockopt(SB) + +GLOBL ·libc_getsockopt_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB) + +TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setsockopt(SB) + +GLOBL ·libc_setsockopt_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB) + +TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpeername(SB) + +GLOBL ·libc_getpeername_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB) + +TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getsockname(SB) + +GLOBL ·libc_getsockname_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB) + +TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_shutdown(SB) + +GLOBL ·libc_shutdown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB) + +TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_socketpair(SB) + +GLOBL ·libc_socketpair_trampoline_addr(SB), RODATA, $8 +DATA ·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB) + +TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_recvfrom(SB) + +GLOBL ·libc_recvfrom_trampoline_addr(SB), RODATA, $8 +DATA ·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB) + +TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sendto(SB) + +GLOBL ·libc_sendto_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB) + +TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_recvmsg(SB) + +GLOBL ·libc_recvmsg_trampoline_addr(SB), RODATA, $8 +DATA ·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB) + +TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sendmsg(SB) + +GLOBL ·libc_sendmsg_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB) + +TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_kevent(SB) + +GLOBL ·libc_kevent_trampoline_addr(SB), RODATA, $8 +DATA ·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB) + +TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_utimes(SB) + +GLOBL ·libc_utimes_trampoline_addr(SB), RODATA, $8 +DATA ·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB) + +TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_futimes(SB) + +GLOBL ·libc_futimes_trampoline_addr(SB), RODATA, $8 +DATA ·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB) + +TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_poll(SB) + +GLOBL ·libc_poll_trampoline_addr(SB), RODATA, $8 +DATA ·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB) + +TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_madvise(SB) + +GLOBL ·libc_madvise_trampoline_addr(SB), RODATA, $8 +DATA ·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB) + +TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mlock(SB) + +GLOBL ·libc_mlock_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB) + +TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mlockall(SB) + +GLOBL ·libc_mlockall_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB) + +TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mprotect(SB) + +GLOBL ·libc_mprotect_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB) + +TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_msync(SB) + +GLOBL ·libc_msync_trampoline_addr(SB), RODATA, $8 +DATA ·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB) + +TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_munlock(SB) + +GLOBL ·libc_munlock_trampoline_addr(SB), RODATA, $8 +DATA ·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB) + +TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_munlockall(SB) + +GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $8 +DATA ·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB) + +TEXT libc_pipe_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pipe(SB) + +GLOBL ·libc_pipe_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pipe_trampoline_addr(SB)/8, $libc_pipe_trampoline<>(SB) + +TEXT libc_getxattr_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getxattr(SB) + +GLOBL ·libc_getxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getxattr_trampoline_addr(SB)/8, $libc_getxattr_trampoline<>(SB) + +TEXT libc_fgetxattr_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fgetxattr(SB) + +GLOBL ·libc_fgetxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fgetxattr_trampoline_addr(SB)/8, $libc_fgetxattr_trampoline<>(SB) + +TEXT libc_setxattr_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setxattr(SB) + +GLOBL ·libc_setxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setxattr_trampoline_addr(SB)/8, $libc_setxattr_trampoline<>(SB) + +TEXT libc_fsetxattr_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fsetxattr(SB) + +GLOBL ·libc_fsetxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fsetxattr_trampoline_addr(SB)/8, $libc_fsetxattr_trampoline<>(SB) + +TEXT libc_removexattr_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_removexattr(SB) + +GLOBL ·libc_removexattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_removexattr_trampoline_addr(SB)/8, $libc_removexattr_trampoline<>(SB) + +TEXT libc_fremovexattr_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fremovexattr(SB) + +GLOBL ·libc_fremovexattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fremovexattr_trampoline_addr(SB)/8, $libc_fremovexattr_trampoline<>(SB) + +TEXT libc_listxattr_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_listxattr(SB) + +GLOBL ·libc_listxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_listxattr_trampoline_addr(SB)/8, $libc_listxattr_trampoline<>(SB) + +TEXT libc_flistxattr_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_flistxattr(SB) + +GLOBL ·libc_flistxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_flistxattr_trampoline_addr(SB)/8, $libc_flistxattr_trampoline<>(SB) + +TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_utimensat(SB) + +GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB) + +TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fcntl(SB) + +GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB) + +TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_kill(SB) + +GLOBL ·libc_kill_trampoline_addr(SB), RODATA, $8 +DATA ·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB) + +TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_ioctl(SB) + +GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB) + +TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sysctl(SB) + +GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) + +TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sendfile(SB) + +GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sendfile_trampoline_addr(SB)/8, $libc_sendfile_trampoline<>(SB) + +TEXT libc_shmat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_shmat(SB) + +GLOBL ·libc_shmat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_shmat_trampoline_addr(SB)/8, $libc_shmat_trampoline<>(SB) + +TEXT libc_shmctl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_shmctl(SB) + +GLOBL ·libc_shmctl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_shmctl_trampoline_addr(SB)/8, $libc_shmctl_trampoline<>(SB) + +TEXT libc_shmdt_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_shmdt(SB) + +GLOBL ·libc_shmdt_trampoline_addr(SB), RODATA, $8 +DATA ·libc_shmdt_trampoline_addr(SB)/8, $libc_shmdt_trampoline<>(SB) + +TEXT libc_shmget_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_shmget(SB) + +GLOBL ·libc_shmget_trampoline_addr(SB), RODATA, $8 +DATA ·libc_shmget_trampoline_addr(SB)/8, $libc_shmget_trampoline<>(SB) + +TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_access(SB) + +GLOBL ·libc_access_trampoline_addr(SB), RODATA, $8 +DATA ·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB) + +TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_adjtime(SB) + +GLOBL ·libc_adjtime_trampoline_addr(SB), RODATA, $8 +DATA ·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB) + +TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chdir(SB) + +GLOBL ·libc_chdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB) + +TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chflags(SB) + +GLOBL ·libc_chflags_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB) + +TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chmod(SB) + +GLOBL ·libc_chmod_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB) + +TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chown(SB) + +GLOBL ·libc_chown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB) + +TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chroot(SB) + +GLOBL ·libc_chroot_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB) + +TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_clock_gettime(SB) + +GLOBL ·libc_clock_gettime_trampoline_addr(SB), RODATA, $8 +DATA ·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB) + +TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_close(SB) + +GLOBL ·libc_close_trampoline_addr(SB), RODATA, $8 +DATA ·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB) + +TEXT libc_clonefile_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_clonefile(SB) + +GLOBL ·libc_clonefile_trampoline_addr(SB), RODATA, $8 +DATA ·libc_clonefile_trampoline_addr(SB)/8, $libc_clonefile_trampoline<>(SB) + +TEXT libc_clonefileat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_clonefileat(SB) + +GLOBL ·libc_clonefileat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_clonefileat_trampoline_addr(SB)/8, $libc_clonefileat_trampoline<>(SB) + +TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_dup(SB) + +GLOBL ·libc_dup_trampoline_addr(SB), RODATA, $8 +DATA ·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB) + +TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_dup2(SB) + +GLOBL ·libc_dup2_trampoline_addr(SB), RODATA, $8 +DATA ·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB) + +TEXT libc_exchangedata_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_exchangedata(SB) + +GLOBL ·libc_exchangedata_trampoline_addr(SB), RODATA, $8 +DATA ·libc_exchangedata_trampoline_addr(SB)/8, $libc_exchangedata_trampoline<>(SB) + +TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_exit(SB) + +GLOBL ·libc_exit_trampoline_addr(SB), RODATA, $8 +DATA ·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB) + +TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_faccessat(SB) + +GLOBL ·libc_faccessat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB) + +TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchdir(SB) + +GLOBL ·libc_fchdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB) + +TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchflags(SB) + +GLOBL ·libc_fchflags_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB) + +TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchmod(SB) + +GLOBL ·libc_fchmod_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB) + +TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchmodat(SB) + +GLOBL ·libc_fchmodat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB) + +TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchown(SB) + +GLOBL ·libc_fchown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB) + +TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchownat(SB) + +GLOBL ·libc_fchownat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB) + +TEXT libc_fclonefileat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fclonefileat(SB) + +GLOBL ·libc_fclonefileat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fclonefileat_trampoline_addr(SB)/8, $libc_fclonefileat_trampoline<>(SB) + +TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_flock(SB) + +GLOBL ·libc_flock_trampoline_addr(SB), RODATA, $8 +DATA ·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB) + +TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fpathconf(SB) + +GLOBL ·libc_fpathconf_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB) + +TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fsync(SB) + +GLOBL ·libc_fsync_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB) + +TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_ftruncate(SB) + +GLOBL ·libc_ftruncate_trampoline_addr(SB), RODATA, $8 +DATA ·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB) + +TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getcwd(SB) + +GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB) + +TEXT libc_getdtablesize_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getdtablesize(SB) + +GLOBL ·libc_getdtablesize_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getdtablesize_trampoline_addr(SB)/8, $libc_getdtablesize_trampoline<>(SB) + +TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getegid(SB) + +GLOBL ·libc_getegid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB) + +TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_geteuid(SB) + +GLOBL ·libc_geteuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB) + +TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getgid(SB) + +GLOBL ·libc_getgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB) + +TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpgid(SB) + +GLOBL ·libc_getpgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB) + +TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpgrp(SB) + +GLOBL ·libc_getpgrp_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB) + +TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpid(SB) + +GLOBL ·libc_getpid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB) + +TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getppid(SB) + +GLOBL ·libc_getppid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB) + +TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpriority(SB) + +GLOBL ·libc_getpriority_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB) + +TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getrlimit(SB) + +GLOBL ·libc_getrlimit_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB) + +TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getrusage(SB) + +GLOBL ·libc_getrusage_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB) + +TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getsid(SB) + +GLOBL ·libc_getsid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB) + +TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_gettimeofday(SB) + +GLOBL ·libc_gettimeofday_trampoline_addr(SB), RODATA, $8 +DATA ·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB) + +TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getuid(SB) + +GLOBL ·libc_getuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB) + +TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_issetugid(SB) + +GLOBL ·libc_issetugid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB) + +TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_kqueue(SB) + +GLOBL ·libc_kqueue_trampoline_addr(SB), RODATA, $8 +DATA ·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB) + +TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_lchown(SB) + +GLOBL ·libc_lchown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB) + +TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_link(SB) + +GLOBL ·libc_link_trampoline_addr(SB), RODATA, $8 +DATA ·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB) + +TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_linkat(SB) + +GLOBL ·libc_linkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB) + +TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_listen(SB) + +GLOBL ·libc_listen_trampoline_addr(SB), RODATA, $8 +DATA ·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB) + +TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mkdir(SB) + +GLOBL ·libc_mkdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB) + +TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mkdirat(SB) + +GLOBL ·libc_mkdirat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB) + +TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mkfifo(SB) + +GLOBL ·libc_mkfifo_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB) + +TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mknod(SB) + +GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB) + +TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_open(SB) + +GLOBL ·libc_open_trampoline_addr(SB), RODATA, $8 +DATA ·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB) + +TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_openat(SB) + +GLOBL ·libc_openat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB) + +TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pathconf(SB) + +GLOBL ·libc_pathconf_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB) + +TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pread(SB) + +GLOBL ·libc_pread_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB) + +TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pwrite(SB) + +GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB) + +TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_read(SB) + +GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8 +DATA ·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB) + +TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readlink(SB) + +GLOBL ·libc_readlink_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB) + +TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readlinkat(SB) + +GLOBL ·libc_readlinkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB) + +TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_rename(SB) + +GLOBL ·libc_rename_trampoline_addr(SB), RODATA, $8 +DATA ·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB) + +TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_renameat(SB) + +GLOBL ·libc_renameat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB) + +TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_revoke(SB) + +GLOBL ·libc_revoke_trampoline_addr(SB), RODATA, $8 +DATA ·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB) + +TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_rmdir(SB) + +GLOBL ·libc_rmdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB) + +TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_lseek(SB) + +GLOBL ·libc_lseek_trampoline_addr(SB), RODATA, $8 +DATA ·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB) + +TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_select(SB) + +GLOBL ·libc_select_trampoline_addr(SB), RODATA, $8 +DATA ·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB) + +TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setegid(SB) + +GLOBL ·libc_setegid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB) + +TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_seteuid(SB) + +GLOBL ·libc_seteuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB) + +TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setgid(SB) + +GLOBL ·libc_setgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB) + +TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setlogin(SB) + +GLOBL ·libc_setlogin_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB) + +TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setpgid(SB) + +GLOBL ·libc_setpgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB) + +TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setpriority(SB) + +GLOBL ·libc_setpriority_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB) + +TEXT libc_setprivexec_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setprivexec(SB) + +GLOBL ·libc_setprivexec_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setprivexec_trampoline_addr(SB)/8, $libc_setprivexec_trampoline<>(SB) + +TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setregid(SB) + +GLOBL ·libc_setregid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB) + +TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setreuid(SB) + +GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB) + +TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setrlimit(SB) + +GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) + +TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setsid(SB) + +GLOBL ·libc_setsid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB) + +TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_settimeofday(SB) + +GLOBL ·libc_settimeofday_trampoline_addr(SB), RODATA, $8 +DATA ·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB) + +TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setuid(SB) + +GLOBL ·libc_setuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB) + +TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_symlink(SB) + +GLOBL ·libc_symlink_trampoline_addr(SB), RODATA, $8 +DATA ·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB) + +TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_symlinkat(SB) + +GLOBL ·libc_symlinkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB) + +TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sync(SB) + +GLOBL ·libc_sync_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB) + +TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_truncate(SB) + +GLOBL ·libc_truncate_trampoline_addr(SB), RODATA, $8 +DATA ·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB) + +TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_umask(SB) + +GLOBL ·libc_umask_trampoline_addr(SB), RODATA, $8 +DATA ·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB) + +TEXT libc_undelete_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_undelete(SB) + +GLOBL ·libc_undelete_trampoline_addr(SB), RODATA, $8 +DATA ·libc_undelete_trampoline_addr(SB)/8, $libc_undelete_trampoline<>(SB) + +TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unlink(SB) + +GLOBL ·libc_unlink_trampoline_addr(SB), RODATA, $8 +DATA ·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB) + +TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unlinkat(SB) + +GLOBL ·libc_unlinkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB) + +TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unmount(SB) + +GLOBL ·libc_unmount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB) + +TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_write(SB) + +GLOBL ·libc_write_trampoline_addr(SB), RODATA, $8 +DATA ·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB) + +TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mmap(SB) + +GLOBL ·libc_mmap_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB) + +TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_munmap(SB) + +GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 +DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) + +TEXT libc_fstat64_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fstat64(SB) + +GLOBL ·libc_fstat64_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fstat64_trampoline_addr(SB)/8, $libc_fstat64_trampoline<>(SB) + +TEXT libc_fstatat64_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fstatat64(SB) + +GLOBL ·libc_fstatat64_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fstatat64_trampoline_addr(SB)/8, $libc_fstatat64_trampoline<>(SB) + +TEXT libc_fstatfs64_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fstatfs64(SB) + +GLOBL ·libc_fstatfs64_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fstatfs64_trampoline_addr(SB)/8, $libc_fstatfs64_trampoline<>(SB) + +TEXT libc_getfsstat64_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getfsstat64(SB) + +GLOBL ·libc_getfsstat64_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getfsstat64_trampoline_addr(SB)/8, $libc_getfsstat64_trampoline<>(SB) + +TEXT libc_lstat64_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_lstat64(SB) + +GLOBL ·libc_lstat64_trampoline_addr(SB), RODATA, $8 +DATA ·libc_lstat64_trampoline_addr(SB)/8, $libc_lstat64_trampoline<>(SB) + +TEXT libc_ptrace_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_ptrace(SB) + +GLOBL ·libc_ptrace_trampoline_addr(SB), RODATA, $8 +DATA ·libc_ptrace_trampoline_addr(SB)/8, $libc_ptrace_trampoline<>(SB) + +TEXT libc_stat64_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_stat64(SB) + +GLOBL ·libc_stat64_trampoline_addr(SB), RODATA, $8 +DATA ·libc_stat64_trampoline_addr(SB)/8, $libc_stat64_trampoline<>(SB) + +TEXT libc_statfs64_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_statfs64(SB) + +GLOBL ·libc_statfs64_trampoline_addr(SB), RODATA, $8 +DATA ·libc_statfs64_trampoline_addr(SB)/8, $libc_statfs64_trampoline<>(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go new file mode 100644 index 0000000..cec595d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go @@ -0,0 +1,40 @@ +// go run mksyscall.go -tags darwin,arm64,go1.13 syscall_darwin.1_13.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build darwin && arm64 && go1.13 +// +build darwin,arm64,go1.13 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func closedir(dir uintptr) (err error) { + _, _, e1 := syscall_syscall(libc_closedir_trampoline_addr, uintptr(dir), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_closedir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) { + r0, _, _ := syscall_syscall(libc_readdir_r_trampoline_addr, uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result))) + res = Errno(r0) + return +} + +var libc_readdir_r_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s new file mode 100644 index 0000000..3579897 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s @@ -0,0 +1,25 @@ +// go run mkasm_darwin.go arm64 +// Code generated by the command above; DO NOT EDIT. + +//go:build go1.13 +// +build go1.13 + +#include "textflag.h" + +TEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fdopendir(SB) + +GLOBL ·libc_fdopendir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB) + +TEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_closedir(SB) + +GLOBL ·libc_closedir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB) + +TEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readdir_r(SB) + +GLOBL ·libc_readdir_r_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go new file mode 100644 index 0000000..f47eedd --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -0,0 +1,2495 @@ +// go run mksyscall.go -tags darwin,arm64,go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build darwin && arm64 && go1.12 +// +build darwin,arm64,go1.12 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getgroups_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getgroups getgroups "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setgroups_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setgroups setgroups "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_wait4_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_wait4 wait4 "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_accept_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_accept accept "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_bind_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_bind bind "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_connect_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_connect connect "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_socket_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_socket socket "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getsockopt_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getsockopt getsockopt "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setsockopt_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setsockopt setsockopt "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getpeername_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpeername getpeername "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getsockname_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getsockname getsockname "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_shutdown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_shutdown shutdown "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_socketpair_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_socketpair socketpair "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_recvfrom_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_recvfrom recvfrom "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_sendto_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sendto sendto "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_recvmsg_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_recvmsg recvmsg "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_sendmsg_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sendmsg sendmsg "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_kevent_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_kevent kevent "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_utimes_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_utimes utimes "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_futimes_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_futimes futimes "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_poll_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_poll poll "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_madvise_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_madvise madvise "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mlock_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mlock mlock "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mlockall_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mlockall mlockall "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mprotect_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mprotect mprotect "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_msync_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_msync msync "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_munlock_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_munlock munlock "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_munlockall_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_munlockall munlockall "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]int32) (err error) { + _, _, e1 := syscall_rawSyscall(libc_pipe_trampoline_addr, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pipe_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pipe pipe "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + r0, _, e1 := syscall_syscall6(libc_getxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getxattr_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getxattr getxattr "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + r0, _, e1 := syscall_syscall6(libc_fgetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fgetxattr_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fgetxattr fgetxattr "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_setxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setxattr_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setxattr setxattr "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_fsetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fsetxattr_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fsetxattr fsetxattr "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func removexattr(path string, attr string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_removexattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_removexattr_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_removexattr removexattr "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fremovexattr(fd int, attr string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_fremovexattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fremovexattr_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fremovexattr fremovexattr "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func listxattr(path string, dest *byte, size int, options int) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := syscall_syscall6(libc_listxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_listxattr_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_listxattr listxattr "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) { + r0, _, e1 := syscall_syscall6(libc_flistxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_flistxattr_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_flistxattr flistxattr "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_utimensat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_utimensat utimensat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fcntl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fcntl fcntl "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kill(pid int, signum int, posix int) (err error) { + _, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), uintptr(posix)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_kill_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_kill kill "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_ioctl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_ioctl ioctl "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_sysctl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sysctl sysctl "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) { + _, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_sendfile_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmat(id int, addr uintptr, flag int) (ret uintptr, err error) { + r0, _, e1 := syscall_syscall(libc_shmat_trampoline_addr, uintptr(id), uintptr(addr), uintptr(flag)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_shmat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_shmat shmat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) { + r0, _, e1 := syscall_syscall(libc_shmctl_trampoline_addr, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf))) + result = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_shmctl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_shmctl shmctl "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmdt(addr uintptr) (err error) { + _, _, e1 := syscall_syscall(libc_shmdt_trampoline_addr, uintptr(addr), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_shmdt_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_shmdt shmdt "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmget(key int, size int, flag int) (id int, err error) { + r0, _, e1 := syscall_syscall(libc_shmget_trampoline_addr, uintptr(key), uintptr(size), uintptr(flag)) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_shmget_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_shmget shmget "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_access_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_access access "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_adjtime_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_adjtime adjtime "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_chdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chdir chdir "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_chflags_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chflags chflags "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_chmod_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chmod chmod "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_chown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chown chown "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_chroot_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chroot chroot "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_clock_gettime_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_clock_gettime clock_gettime "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_close_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Clonefile(src string, dst string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(src) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dst) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_clonefile_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_clonefile_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_clonefile clonefile "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Clonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(src) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dst) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_clonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_clonefileat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_clonefileat clonefileat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_dup_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_dup dup "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_dup2_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_dup2 dup2 "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exchangedata(path1 string, path2 string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path1) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(path2) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_exchangedata_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_exchangedata_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_exchangedata exchangedata "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0) + return +} + +var libc_exit_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_exit exit "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_faccessat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_faccessat faccessat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fchdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchdir fchdir "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fchflags_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchflags fchflags "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fchmod_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchmod fchmod "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fchmodat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchmodat fchmodat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fchown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchown fchown "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fchownat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchownat fchownat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(dst) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_fclonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fclonefileat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fclonefileat fclonefileat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_flock_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_flock flock "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fpathconf_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fpathconf fpathconf "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fsync_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fsync fsync "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_ftruncate_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_ftruncate ftruncate "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getcwd_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getcwd getcwd "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := syscall_syscall(libc_getdtablesize_trampoline_addr, 0, 0, 0) + size = int(r0) + return +} + +var libc_getdtablesize_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getdtablesize getdtablesize "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0) + egid = int(r0) + return +} + +var libc_getegid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getegid getegid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0) + uid = int(r0) + return +} + +var libc_geteuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_geteuid geteuid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0) + gid = int(r0) + return +} + +var libc_getgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getgid getgid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getpgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpgid getpgid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0) + pgrp = int(r0) + return +} + +var libc_getpgrp_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpgrp getpgrp "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0) + pid = int(r0) + return +} + +var libc_getpid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpid getpid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0) + ppid = int(r0) + return +} + +var libc_getppid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getppid getppid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getpriority_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpriority getpriority "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getrlimit_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getrlimit getrlimit "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getrusage_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getrusage getrusage "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getsid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getsid getsid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tp *Timeval) (err error) { + _, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_gettimeofday_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0) + uid = int(r0) + return +} + +var libc_getuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getuid getuid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := syscall_rawSyscall(libc_issetugid_trampoline_addr, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +var libc_issetugid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_issetugid issetugid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_kqueue_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_kqueue kqueue "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_lchown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_lchown lchown "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_link_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_link link "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_linkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_linkat linkat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_listen_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_listen listen "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mkdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mkdir mkdir "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mkdirat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mkdirat mkdirat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mkfifo_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mkfifo mkfifo "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mknod_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mknod mknod "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_open_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_open open "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_openat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pathconf_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pathconf pathconf "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pread_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pread pread "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pwrite_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pwrite pwrite "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_read_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_readlink_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readlink readlink "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_readlinkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readlinkat readlinkat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_rename_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_rename rename "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_renameat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_renameat renameat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_revoke_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_revoke revoke "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_rmdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_rmdir rmdir "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence)) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_lseek_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_lseek lseek "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_select_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_select select "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := syscall_syscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setegid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setegid setegid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_seteuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_seteuid seteuid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setgid setgid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setlogin_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setlogin setlogin "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setpgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setpgid setpgid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setpriority_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setpriority setpriority "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setprivexec(flag int) (err error) { + _, _, e1 := syscall_syscall(libc_setprivexec_trampoline_addr, uintptr(flag), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setprivexec_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setprivexec setprivexec "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setregid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setregid setregid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setreuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setreuid setreuid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setrlimit_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setsid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setsid setsid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_settimeofday_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_settimeofday settimeofday "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setuid setuid "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_symlink_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_symlink symlink "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_symlinkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_symlinkat symlinkat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_sync_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sync sync "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_truncate_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_truncate truncate "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +var libc_umask_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_umask umask "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_undelete_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_undelete_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_undelete undelete "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_unlink_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unlink unlink "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_unlinkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unlinkat unlinkat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_unmount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unmount unmount "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_write_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_write write "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mmap_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mmap mmap "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_munmap_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_munmap munmap "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// 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 { + err = errnoErr(e1) + } + return +} + +var libc_fstat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fstat fstat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fstatat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fstatat fstatat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fstatfs_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fstatfs fstatfs "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(buf), uintptr(size), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getfsstat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getfsstat getfsstat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_lstat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_lstat lstat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := syscall_syscall6(libc_ptrace_trampoline_addr, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_ptrace_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_ptrace ptrace "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_stat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_stat stat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_statfs_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_statfs statfs "/usr/lib/libSystem.B.dylib" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s new file mode 100644 index 0000000..4d26f7d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s @@ -0,0 +1,883 @@ +// go run mkasm_darwin.go arm64 +// Code generated by the command above; DO NOT EDIT. + +//go:build go1.12 +// +build go1.12 + +#include "textflag.h" + +TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getgroups(SB) + +GLOBL ·libc_getgroups_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB) + +TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setgroups(SB) + +GLOBL ·libc_setgroups_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB) + +TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_wait4(SB) + +GLOBL ·libc_wait4_trampoline_addr(SB), RODATA, $8 +DATA ·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB) + +TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_accept(SB) + +GLOBL ·libc_accept_trampoline_addr(SB), RODATA, $8 +DATA ·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB) + +TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_bind(SB) + +GLOBL ·libc_bind_trampoline_addr(SB), RODATA, $8 +DATA ·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB) + +TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_connect(SB) + +GLOBL ·libc_connect_trampoline_addr(SB), RODATA, $8 +DATA ·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB) + +TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_socket(SB) + +GLOBL ·libc_socket_trampoline_addr(SB), RODATA, $8 +DATA ·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB) + +TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getsockopt(SB) + +GLOBL ·libc_getsockopt_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB) + +TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setsockopt(SB) + +GLOBL ·libc_setsockopt_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB) + +TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpeername(SB) + +GLOBL ·libc_getpeername_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB) + +TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getsockname(SB) + +GLOBL ·libc_getsockname_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB) + +TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_shutdown(SB) + +GLOBL ·libc_shutdown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB) + +TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_socketpair(SB) + +GLOBL ·libc_socketpair_trampoline_addr(SB), RODATA, $8 +DATA ·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB) + +TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_recvfrom(SB) + +GLOBL ·libc_recvfrom_trampoline_addr(SB), RODATA, $8 +DATA ·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB) + +TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sendto(SB) + +GLOBL ·libc_sendto_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB) + +TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_recvmsg(SB) + +GLOBL ·libc_recvmsg_trampoline_addr(SB), RODATA, $8 +DATA ·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB) + +TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sendmsg(SB) + +GLOBL ·libc_sendmsg_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB) + +TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_kevent(SB) + +GLOBL ·libc_kevent_trampoline_addr(SB), RODATA, $8 +DATA ·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB) + +TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_utimes(SB) + +GLOBL ·libc_utimes_trampoline_addr(SB), RODATA, $8 +DATA ·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB) + +TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_futimes(SB) + +GLOBL ·libc_futimes_trampoline_addr(SB), RODATA, $8 +DATA ·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB) + +TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_poll(SB) + +GLOBL ·libc_poll_trampoline_addr(SB), RODATA, $8 +DATA ·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB) + +TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_madvise(SB) + +GLOBL ·libc_madvise_trampoline_addr(SB), RODATA, $8 +DATA ·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB) + +TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mlock(SB) + +GLOBL ·libc_mlock_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB) + +TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mlockall(SB) + +GLOBL ·libc_mlockall_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB) + +TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mprotect(SB) + +GLOBL ·libc_mprotect_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB) + +TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_msync(SB) + +GLOBL ·libc_msync_trampoline_addr(SB), RODATA, $8 +DATA ·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB) + +TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_munlock(SB) + +GLOBL ·libc_munlock_trampoline_addr(SB), RODATA, $8 +DATA ·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB) + +TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_munlockall(SB) + +GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $8 +DATA ·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB) + +TEXT libc_pipe_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pipe(SB) + +GLOBL ·libc_pipe_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pipe_trampoline_addr(SB)/8, $libc_pipe_trampoline<>(SB) + +TEXT libc_getxattr_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getxattr(SB) + +GLOBL ·libc_getxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getxattr_trampoline_addr(SB)/8, $libc_getxattr_trampoline<>(SB) + +TEXT libc_fgetxattr_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fgetxattr(SB) + +GLOBL ·libc_fgetxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fgetxattr_trampoline_addr(SB)/8, $libc_fgetxattr_trampoline<>(SB) + +TEXT libc_setxattr_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setxattr(SB) + +GLOBL ·libc_setxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setxattr_trampoline_addr(SB)/8, $libc_setxattr_trampoline<>(SB) + +TEXT libc_fsetxattr_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fsetxattr(SB) + +GLOBL ·libc_fsetxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fsetxattr_trampoline_addr(SB)/8, $libc_fsetxattr_trampoline<>(SB) + +TEXT libc_removexattr_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_removexattr(SB) + +GLOBL ·libc_removexattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_removexattr_trampoline_addr(SB)/8, $libc_removexattr_trampoline<>(SB) + +TEXT libc_fremovexattr_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fremovexattr(SB) + +GLOBL ·libc_fremovexattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fremovexattr_trampoline_addr(SB)/8, $libc_fremovexattr_trampoline<>(SB) + +TEXT libc_listxattr_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_listxattr(SB) + +GLOBL ·libc_listxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_listxattr_trampoline_addr(SB)/8, $libc_listxattr_trampoline<>(SB) + +TEXT libc_flistxattr_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_flistxattr(SB) + +GLOBL ·libc_flistxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_flistxattr_trampoline_addr(SB)/8, $libc_flistxattr_trampoline<>(SB) + +TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_utimensat(SB) + +GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB) + +TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fcntl(SB) + +GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB) + +TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_kill(SB) + +GLOBL ·libc_kill_trampoline_addr(SB), RODATA, $8 +DATA ·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB) + +TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_ioctl(SB) + +GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB) + +TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sysctl(SB) + +GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) + +TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sendfile(SB) + +GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sendfile_trampoline_addr(SB)/8, $libc_sendfile_trampoline<>(SB) + +TEXT libc_shmat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_shmat(SB) + +GLOBL ·libc_shmat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_shmat_trampoline_addr(SB)/8, $libc_shmat_trampoline<>(SB) + +TEXT libc_shmctl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_shmctl(SB) + +GLOBL ·libc_shmctl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_shmctl_trampoline_addr(SB)/8, $libc_shmctl_trampoline<>(SB) + +TEXT libc_shmdt_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_shmdt(SB) + +GLOBL ·libc_shmdt_trampoline_addr(SB), RODATA, $8 +DATA ·libc_shmdt_trampoline_addr(SB)/8, $libc_shmdt_trampoline<>(SB) + +TEXT libc_shmget_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_shmget(SB) + +GLOBL ·libc_shmget_trampoline_addr(SB), RODATA, $8 +DATA ·libc_shmget_trampoline_addr(SB)/8, $libc_shmget_trampoline<>(SB) + +TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_access(SB) + +GLOBL ·libc_access_trampoline_addr(SB), RODATA, $8 +DATA ·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB) + +TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_adjtime(SB) + +GLOBL ·libc_adjtime_trampoline_addr(SB), RODATA, $8 +DATA ·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB) + +TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chdir(SB) + +GLOBL ·libc_chdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB) + +TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chflags(SB) + +GLOBL ·libc_chflags_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB) + +TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chmod(SB) + +GLOBL ·libc_chmod_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB) + +TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chown(SB) + +GLOBL ·libc_chown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB) + +TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chroot(SB) + +GLOBL ·libc_chroot_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB) + +TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_clock_gettime(SB) + +GLOBL ·libc_clock_gettime_trampoline_addr(SB), RODATA, $8 +DATA ·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB) + +TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_close(SB) + +GLOBL ·libc_close_trampoline_addr(SB), RODATA, $8 +DATA ·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB) + +TEXT libc_clonefile_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_clonefile(SB) + +GLOBL ·libc_clonefile_trampoline_addr(SB), RODATA, $8 +DATA ·libc_clonefile_trampoline_addr(SB)/8, $libc_clonefile_trampoline<>(SB) + +TEXT libc_clonefileat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_clonefileat(SB) + +GLOBL ·libc_clonefileat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_clonefileat_trampoline_addr(SB)/8, $libc_clonefileat_trampoline<>(SB) + +TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_dup(SB) + +GLOBL ·libc_dup_trampoline_addr(SB), RODATA, $8 +DATA ·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB) + +TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_dup2(SB) + +GLOBL ·libc_dup2_trampoline_addr(SB), RODATA, $8 +DATA ·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB) + +TEXT libc_exchangedata_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_exchangedata(SB) + +GLOBL ·libc_exchangedata_trampoline_addr(SB), RODATA, $8 +DATA ·libc_exchangedata_trampoline_addr(SB)/8, $libc_exchangedata_trampoline<>(SB) + +TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_exit(SB) + +GLOBL ·libc_exit_trampoline_addr(SB), RODATA, $8 +DATA ·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB) + +TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_faccessat(SB) + +GLOBL ·libc_faccessat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB) + +TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchdir(SB) + +GLOBL ·libc_fchdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB) + +TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchflags(SB) + +GLOBL ·libc_fchflags_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB) + +TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchmod(SB) + +GLOBL ·libc_fchmod_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB) + +TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchmodat(SB) + +GLOBL ·libc_fchmodat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB) + +TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchown(SB) + +GLOBL ·libc_fchown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB) + +TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchownat(SB) + +GLOBL ·libc_fchownat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB) + +TEXT libc_fclonefileat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fclonefileat(SB) + +GLOBL ·libc_fclonefileat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fclonefileat_trampoline_addr(SB)/8, $libc_fclonefileat_trampoline<>(SB) + +TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_flock(SB) + +GLOBL ·libc_flock_trampoline_addr(SB), RODATA, $8 +DATA ·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB) + +TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fpathconf(SB) + +GLOBL ·libc_fpathconf_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB) + +TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fsync(SB) + +GLOBL ·libc_fsync_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB) + +TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_ftruncate(SB) + +GLOBL ·libc_ftruncate_trampoline_addr(SB), RODATA, $8 +DATA ·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB) + +TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getcwd(SB) + +GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB) + +TEXT libc_getdtablesize_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getdtablesize(SB) + +GLOBL ·libc_getdtablesize_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getdtablesize_trampoline_addr(SB)/8, $libc_getdtablesize_trampoline<>(SB) + +TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getegid(SB) + +GLOBL ·libc_getegid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB) + +TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_geteuid(SB) + +GLOBL ·libc_geteuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB) + +TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getgid(SB) + +GLOBL ·libc_getgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB) + +TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpgid(SB) + +GLOBL ·libc_getpgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB) + +TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpgrp(SB) + +GLOBL ·libc_getpgrp_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB) + +TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpid(SB) + +GLOBL ·libc_getpid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB) + +TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getppid(SB) + +GLOBL ·libc_getppid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB) + +TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpriority(SB) + +GLOBL ·libc_getpriority_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB) + +TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getrlimit(SB) + +GLOBL ·libc_getrlimit_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB) + +TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getrusage(SB) + +GLOBL ·libc_getrusage_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB) + +TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getsid(SB) + +GLOBL ·libc_getsid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB) + +TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_gettimeofday(SB) + +GLOBL ·libc_gettimeofday_trampoline_addr(SB), RODATA, $8 +DATA ·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB) + +TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getuid(SB) + +GLOBL ·libc_getuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB) + +TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_issetugid(SB) + +GLOBL ·libc_issetugid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB) + +TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_kqueue(SB) + +GLOBL ·libc_kqueue_trampoline_addr(SB), RODATA, $8 +DATA ·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB) + +TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_lchown(SB) + +GLOBL ·libc_lchown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB) + +TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_link(SB) + +GLOBL ·libc_link_trampoline_addr(SB), RODATA, $8 +DATA ·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB) + +TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_linkat(SB) + +GLOBL ·libc_linkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB) + +TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_listen(SB) + +GLOBL ·libc_listen_trampoline_addr(SB), RODATA, $8 +DATA ·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB) + +TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mkdir(SB) + +GLOBL ·libc_mkdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB) + +TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mkdirat(SB) + +GLOBL ·libc_mkdirat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB) + +TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mkfifo(SB) + +GLOBL ·libc_mkfifo_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB) + +TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mknod(SB) + +GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB) + +TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_open(SB) + +GLOBL ·libc_open_trampoline_addr(SB), RODATA, $8 +DATA ·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB) + +TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_openat(SB) + +GLOBL ·libc_openat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB) + +TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pathconf(SB) + +GLOBL ·libc_pathconf_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB) + +TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pread(SB) + +GLOBL ·libc_pread_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB) + +TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pwrite(SB) + +GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB) + +TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_read(SB) + +GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8 +DATA ·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB) + +TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readlink(SB) + +GLOBL ·libc_readlink_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB) + +TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readlinkat(SB) + +GLOBL ·libc_readlinkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB) + +TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_rename(SB) + +GLOBL ·libc_rename_trampoline_addr(SB), RODATA, $8 +DATA ·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB) + +TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_renameat(SB) + +GLOBL ·libc_renameat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB) + +TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_revoke(SB) + +GLOBL ·libc_revoke_trampoline_addr(SB), RODATA, $8 +DATA ·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB) + +TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_rmdir(SB) + +GLOBL ·libc_rmdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB) + +TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_lseek(SB) + +GLOBL ·libc_lseek_trampoline_addr(SB), RODATA, $8 +DATA ·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB) + +TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_select(SB) + +GLOBL ·libc_select_trampoline_addr(SB), RODATA, $8 +DATA ·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB) + +TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setegid(SB) + +GLOBL ·libc_setegid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB) + +TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_seteuid(SB) + +GLOBL ·libc_seteuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB) + +TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setgid(SB) + +GLOBL ·libc_setgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB) + +TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setlogin(SB) + +GLOBL ·libc_setlogin_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB) + +TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setpgid(SB) + +GLOBL ·libc_setpgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB) + +TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setpriority(SB) + +GLOBL ·libc_setpriority_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB) + +TEXT libc_setprivexec_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setprivexec(SB) + +GLOBL ·libc_setprivexec_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setprivexec_trampoline_addr(SB)/8, $libc_setprivexec_trampoline<>(SB) + +TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setregid(SB) + +GLOBL ·libc_setregid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB) + +TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setreuid(SB) + +GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB) + +TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setrlimit(SB) + +GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) + +TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setsid(SB) + +GLOBL ·libc_setsid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB) + +TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_settimeofday(SB) + +GLOBL ·libc_settimeofday_trampoline_addr(SB), RODATA, $8 +DATA ·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB) + +TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setuid(SB) + +GLOBL ·libc_setuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB) + +TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_symlink(SB) + +GLOBL ·libc_symlink_trampoline_addr(SB), RODATA, $8 +DATA ·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB) + +TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_symlinkat(SB) + +GLOBL ·libc_symlinkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB) + +TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sync(SB) + +GLOBL ·libc_sync_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB) + +TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_truncate(SB) + +GLOBL ·libc_truncate_trampoline_addr(SB), RODATA, $8 +DATA ·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB) + +TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_umask(SB) + +GLOBL ·libc_umask_trampoline_addr(SB), RODATA, $8 +DATA ·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB) + +TEXT libc_undelete_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_undelete(SB) + +GLOBL ·libc_undelete_trampoline_addr(SB), RODATA, $8 +DATA ·libc_undelete_trampoline_addr(SB)/8, $libc_undelete_trampoline<>(SB) + +TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unlink(SB) + +GLOBL ·libc_unlink_trampoline_addr(SB), RODATA, $8 +DATA ·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB) + +TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unlinkat(SB) + +GLOBL ·libc_unlinkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB) + +TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unmount(SB) + +GLOBL ·libc_unmount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB) + +TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_write(SB) + +GLOBL ·libc_write_trampoline_addr(SB), RODATA, $8 +DATA ·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB) + +TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mmap(SB) + +GLOBL ·libc_mmap_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB) + +TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_munmap(SB) + +GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 +DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) + +TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fstat(SB) + +GLOBL ·libc_fstat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB) + +TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fstatat(SB) + +GLOBL ·libc_fstatat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB) + +TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fstatfs(SB) + +GLOBL ·libc_fstatfs_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB) + +TEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getfsstat(SB) + +GLOBL ·libc_getfsstat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getfsstat_trampoline_addr(SB)/8, $libc_getfsstat_trampoline<>(SB) + +TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_lstat(SB) + +GLOBL ·libc_lstat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB) + +TEXT libc_ptrace_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_ptrace(SB) + +GLOBL ·libc_ptrace_trampoline_addr(SB), RODATA, $8 +DATA ·libc_ptrace_trampoline_addr(SB)/8, $libc_ptrace_trampoline<>(SB) + +TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_stat(SB) + +GLOBL ·libc_stat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB) + +TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_statfs(SB) + +GLOBL ·libc_statfs_trampoline_addr(SB), RODATA, $8 +DATA ·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go new file mode 100644 index 0000000..1b6eedf --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go @@ -0,0 +1,1679 @@ +// go run mksyscall.go -dragonfly -tags dragonfly,amd64 syscall_bsd.go syscall_dragonfly.go syscall_dragonfly_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build dragonfly && amd64 +// +build dragonfly,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extpread(fd int, p []byte, flags int, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EXTPREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EXTPWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(fd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go new file mode 100644 index 0000000..e9d9997 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go @@ -0,0 +1,2016 @@ +// go run mksyscall.go -l32 -tags freebsd,386 syscall_bsd.go syscall_freebsd.go syscall_freebsd_386.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build freebsd && 386 +// +build freebsd,386 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data int) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CapEnter() (err error) { + _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsGet(version int, fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsLimit(fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat(fd int, stat *stat_freebsd11_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat_freebsd12(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatfs(fd int, stat *statfs_freebsd11_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdirentries_freebsd12(fd int, buf []byte, basep *uint64) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES_FREEBSD12, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func lstat(path string, stat *stat_freebsd11_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mknodat(fd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), uintptr(dev>>32), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, stat *stat_freebsd11_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func statfs(path string, stat *statfs_freebsd11_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func statfs_freebsd12(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS_FREEBSD12, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go new file mode 100644 index 0000000..edd373b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go @@ -0,0 +1,2016 @@ +// go run mksyscall.go -tags freebsd,amd64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build freebsd && amd64 +// +build freebsd,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data int) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CapEnter() (err error) { + _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsGet(version int, fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsLimit(fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat(fd int, stat *stat_freebsd11_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat_freebsd12(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatfs(fd int, stat *statfs_freebsd11_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdirentries_freebsd12(fd int, buf []byte, basep *uint64) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES_FREEBSD12, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func lstat(path string, stat *stat_freebsd11_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mknodat(fd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, stat *stat_freebsd11_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func statfs(path string, stat *statfs_freebsd11_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func statfs_freebsd12(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS_FREEBSD12, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go new file mode 100644 index 0000000..82e9764 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go @@ -0,0 +1,2016 @@ +// go run mksyscall.go -l32 -arm -tags freebsd,arm syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build freebsd && arm +// +build freebsd,arm + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data int) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CapEnter() (err error) { + _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsGet(version int, fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsLimit(fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat(fd int, stat *stat_freebsd11_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat_freebsd12(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatfs(fd int, stat *statfs_freebsd11_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdirentries_freebsd12(fd int, buf []byte, basep *uint64) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES_FREEBSD12, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func lstat(path string, stat *stat_freebsd11_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mknodat(fd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, stat *stat_freebsd11_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func statfs(path string, stat *statfs_freebsd11_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func statfs_freebsd12(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS_FREEBSD12, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go new file mode 100644 index 0000000..a6479ac --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go @@ -0,0 +1,2016 @@ +// go run mksyscall.go -tags freebsd,arm64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build freebsd && arm64 +// +build freebsd,arm64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data int) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CapEnter() (err error) { + _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsGet(version int, fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsLimit(fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat(fd int, stat *stat_freebsd11_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat_freebsd12(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatfs(fd int, stat *statfs_freebsd11_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdirentries_freebsd12(fd int, buf []byte, basep *uint64) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES_FREEBSD12, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func lstat(path string, stat *stat_freebsd11_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mknodat(fd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, stat *stat_freebsd11_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func statfs(path string, stat *statfs_freebsd11_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func statfs_freebsd12(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS_FREEBSD12, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go new file mode 100644 index 0000000..af5cb06 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go @@ -0,0 +1,128 @@ +// go run mksyscall_solaris.go -illumos -tags illumos,amd64 syscall_illumos.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build illumos && amd64 +// +build illumos,amd64 + +package unix + +import ( + "unsafe" +) + +//go:cgo_import_dynamic libc_readv readv "libc.so" +//go:cgo_import_dynamic libc_preadv preadv "libc.so" +//go:cgo_import_dynamic libc_writev writev "libc.so" +//go:cgo_import_dynamic libc_pwritev pwritev "libc.so" +//go:cgo_import_dynamic libc_accept4 accept4 "libsocket.so" +//go:cgo_import_dynamic libc_putmsg putmsg "libc.so" +//go:cgo_import_dynamic libc_getmsg getmsg "libc.so" + +//go:linkname procreadv libc_readv +//go:linkname procpreadv libc_preadv +//go:linkname procwritev libc_writev +//go:linkname procpwritev libc_pwritev +//go:linkname procaccept4 libc_accept4 +//go:linkname procputmsg libc_putmsg +//go:linkname procgetmsg libc_getmsg + +var ( + procreadv, + procpreadv, + procwritev, + procpwritev, + procaccept4, + procputmsg, + procgetmsg syscallFunc +) + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readv(fd int, iovs []Iovec) (n int, err error) { + var _p0 *Iovec + if len(iovs) > 0 { + _p0 = &iovs[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procreadv)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func preadv(fd int, iovs []Iovec, off int64) (n int, err error) { + var _p0 *Iovec + if len(iovs) > 0 { + _p0 = &iovs[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpreadv)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), uintptr(off), 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writev(fd int, iovs []Iovec) (n int, err error) { + var _p0 *Iovec + if len(iovs) > 0 { + _p0 = &iovs[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwritev)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwritev(fd int, iovs []Iovec, off int64) (n int, err error) { + var _p0 *Iovec + if len(iovs) > 0 { + _p0 = &iovs[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpwritev)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), uintptr(off), 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procaccept4)), 4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func putmsg(fd int, clptr *strbuf, dataptr *strbuf, flags int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procputmsg)), 4, uintptr(fd), uintptr(unsafe.Pointer(clptr)), uintptr(unsafe.Pointer(dataptr)), uintptr(flags), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getmsg(fd int, clptr *strbuf, dataptr *strbuf, flags *int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetmsg)), 4, uintptr(fd), uintptr(unsafe.Pointer(clptr)), uintptr(unsafe.Pointer(dataptr)), uintptr(unsafe.Pointer(flags)), 0, 0) + if e1 != 0 { + err = e1 + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/vendor/golang.org/x/sys/unix/zsyscall_linux.go new file mode 100644 index 0000000..198b4ac --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux.go @@ -0,0 +1,2110 @@ +// Code generated by mkmerge; DO NOT EDIT. + +//go:build linux +// +build linux + +package unix + +import ( + "syscall" + "unsafe" +) + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) { + r0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(open_how)), uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Waitid(idType int, id int, info *Siginfo, options int, rusage *Rusage) (err error) { + _, _, e1 := Syscall6(SYS_WAITID, uintptr(idType), uintptr(id), uintptr(unsafe.Pointer(info)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlRestrictKeyringByType(cmd int, arg2 int, keyType string, restriction string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(restriction) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlRestrictKeyring(cmd int, arg2 int) (err error) { + _, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mountSetattr(dirfd int, pathname string, flags uint, attr *MountAttr, size uintptr) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT_SETATTR, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(unsafe.Pointer(attr)), uintptr(size), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Capget(hdr *CapUserHeader, data *CapUserData) (err error) { + _, _, e1 := RawSyscall(SYS_CAPGET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Capset(hdr *CapUserHeader, data *CapUserData) (err error) { + _, _, e1 := RawSyscall(SYS_CAPSET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGetres(clockid int32, res *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) { + _, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CloseRange(first uint, last uint, flags uint) (err error) { + _, _, e1 := Syscall(SYS_CLOSE_RANGE, uintptr(first), uintptr(last), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func DeleteModule(name string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func FinitModule(fd int, params string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flistxattr(fd int, dest []byte) (sz int, err error) { + var _p0 unsafe.Pointer + if len(dest) > 0 { + _p0 = unsafe.Pointer(&dest[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fremovexattr(fd int, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InitModule(moduleImage []byte, params string) (err error) { + var _p0 unsafe.Pointer + if len(moduleImage) > 0 { + _p0 = unsafe.Pointer(&moduleImage[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + var _p1 *byte + _p1, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func MemfdCreate(name string, flags int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func MoveMount(fromDirfd int, fromPathName string, toDirfd int, toPathName string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fromPathName) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(toPathName) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOVE_MOUNT, uintptr(fromDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(toDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func OpenTree(dfd int, fileName string, flags uint) (r int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fileName) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN_TREE, uintptr(dfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + r = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) { + r0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0) + newfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func TimerfdCreate(clockid int, flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_TIMERFD_CREATE, uintptr(clockid), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func TimerfdGettime(fd int, currValue *ItimerSpec) (err error) { + _, _, e1 := RawSyscall(SYS_TIMERFD_GETTIME, uintptr(fd), uintptr(unsafe.Pointer(currValue)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func TimerfdSettime(fd int, flags int, newValue *ItimerSpec, oldValue *ItimerSpec) (err error) { + _, _, e1 := RawSyscall6(SYS_TIMERFD_SETTIME, uintptr(fd), uintptr(flags), uintptr(unsafe.Pointer(newValue)), uintptr(unsafe.Pointer(oldValue)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readv(fd int, iovs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovs) > 0 { + _p0 = unsafe.Pointer(&iovs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READV, uintptr(fd), uintptr(_p0), uintptr(len(iovs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writev(fd int, iovs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovs) > 0 { + _p0 = unsafe.Pointer(&iovs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITEV, uintptr(fd), uintptr(_p0), uintptr(len(iovs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func preadv(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovs) > 0 { + _p0 = unsafe.Pointer(&iovs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREADV, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwritev(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovs) > 0 { + _p0 = unsafe.Pointer(&iovs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITEV, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func preadv2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovs) > 0 { + _p0 = unsafe.Pointer(&iovs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREADV2, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwritev2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovs) > 0 { + _p0 = unsafe.Pointer(&iovs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITEV2, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func faccessat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat2(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ProcessVMReadv(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) { + var _p0 unsafe.Pointer + if len(localIov) > 0 { + _p0 = unsafe.Pointer(&localIov[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + var _p1 unsafe.Pointer + if len(remoteIov) > 0 { + _p1 = unsafe.Pointer(&remoteIov[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PROCESS_VM_READV, uintptr(pid), uintptr(_p0), uintptr(len(localIov)), uintptr(_p1), uintptr(len(remoteIov)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ProcessVMWritev(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) { + var _p0 unsafe.Pointer + if len(localIov) > 0 { + _p0 = unsafe.Pointer(&localIov[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + var _p1 unsafe.Pointer + if len(remoteIov) > 0 { + _p1 = unsafe.Pointer(&remoteIov[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PROCESS_VM_WRITEV, uintptr(pid), uintptr(_p0), uintptr(len(localIov)), uintptr(_p1), uintptr(len(remoteIov)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PidfdOpen(pid int, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_PIDFD_OPEN, uintptr(pid), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PidfdGetfd(pidfd int, targetfd int, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_PIDFD_GETFD, uintptr(pidfd), uintptr(targetfd), uintptr(flags)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PidfdSendSignal(pidfd int, sig Signal, info *Siginfo, flags int) (err error) { + _, _, e1 := Syscall6(SYS_PIDFD_SEND_SIGNAL, uintptr(pidfd), uintptr(sig), uintptr(unsafe.Pointer(info)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmat(id int, addr uintptr, flag int) (ret uintptr, err error) { + r0, _, e1 := Syscall(SYS_SHMAT, uintptr(id), uintptr(addr), uintptr(flag)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) { + r0, _, e1 := Syscall(SYS_SHMCTL, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf))) + result = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmdt(addr uintptr) (err error) { + _, _, e1 := Syscall(SYS_SHMDT, uintptr(addr), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmget(key int, size int, flag int) (id int, err error) { + r0, _, e1 := Syscall(SYS_SHMGET, uintptr(key), uintptr(size), uintptr(flag)) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getitimer(which int, currValue *Itimerval) (err error) { + _, _, e1 := Syscall(SYS_GETITIMER, uintptr(which), uintptr(unsafe.Pointer(currValue)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setitimer(which int, newValue *Itimerval, oldValue *Itimerval) (err error) { + _, _, e1 := Syscall(SYS_SETITIMER, uintptr(which), uintptr(unsafe.Pointer(newValue)), uintptr(unsafe.Pointer(oldValue))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go new file mode 100644 index 0000000..88af526 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go @@ -0,0 +1,537 @@ +// go run mksyscall.go -l32 -tags linux,386 syscall_linux.go syscall_linux_386.go syscall_linux_alarm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build linux && 386 +// +build linux,386 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64_64, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE64, uintptr(fd), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID32, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID32, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID32, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID32, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN32, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsgid(gid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsuid(uid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID32, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID32, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID32, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID32, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Alarm(seconds uint) (remaining uint, err error) { + r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) + remaining = uint(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go new file mode 100644 index 0000000..2a0c4aa --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go @@ -0,0 +1,704 @@ +// go run mksyscall.go -tags linux,amd64 syscall_linux.go syscall_linux_amd64.go syscall_linux_alarm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build linux && amd64 +// +build linux,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func MemfdSecret(flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_MEMFD_SECRET, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsgid(gid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsuid(uid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(cmdline) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Alarm(seconds uint) (remaining uint, err error) { + r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) + remaining = uint(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go new file mode 100644 index 0000000..4882bde --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go @@ -0,0 +1,652 @@ +// go run mksyscall.go -l32 -arm -tags linux,arm syscall_linux.go syscall_linux_arm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build linux && arm +// +build linux,arm + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID32, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID32, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID32, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID32, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN32, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsgid(gid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsuid(uid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID32, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID32, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID32, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID32, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func armSyncFileRange(fd int, flags int, off int64, n int64) (err error) { + _, _, e1 := Syscall6(SYS_ARM_SYNC_FILE_RANGE, uintptr(fd), uintptr(flags), uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(cmdline) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go new file mode 100644 index 0000000..9f8c24e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go @@ -0,0 +1,603 @@ +// go run mksyscall.go -tags linux,arm64 syscall_linux.go syscall_linux_arm64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build linux && arm64 +// +build linux,arm64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func MemfdSecret(flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_MEMFD_SECRET, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsgid(gid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsuid(uid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(cmdline) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go new file mode 100644 index 0000000..d7d6f42 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go @@ -0,0 +1,704 @@ +// go run mksyscall.go -b32 -arm -tags linux,mips syscall_linux.go syscall_linux_mipsx.go syscall_linux_alarm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build linux && mips +// +build linux,mips + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask>>32), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off>>32), uintptr(off), uintptr(len>>32), uintptr(len)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(int64(r0)<<32 | int64(r1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset>>32), uintptr(offset), uintptr(length>>32), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length>>32), uintptr(length), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset>>32), uintptr(offset)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset>>32), uintptr(offset)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsgid(gid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsuid(uid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall9(SYS_SYNC_FILE_RANGE, uintptr(fd), 0, uintptr(off>>32), uintptr(off), uintptr(n>>32), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length>>32), uintptr(length), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Alarm(seconds uint) (remaining uint, err error) { + r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) + remaining = uint(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go new file mode 100644 index 0000000..7f1f8e6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go @@ -0,0 +1,698 @@ +// go run mksyscall.go -tags linux,mips64 syscall_linux.go syscall_linux_mips64x.go syscall_linux_alarm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build linux && mips64 +// +build linux,mips64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsgid(gid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsuid(uid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat(fd int, st *stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatat(dirfd int, path string, st *stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func lstat(path string, st *stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, st *stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Alarm(seconds uint) (remaining uint, err error) { + r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) + remaining = uint(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go new file mode 100644 index 0000000..f933d0f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go @@ -0,0 +1,687 @@ +// go run mksyscall.go -tags linux,mips64le syscall_linux.go syscall_linux_mips64x.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build linux && mips64le +// +build linux,mips64le + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsgid(gid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsuid(uid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat(fd int, st *stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatat(dirfd int, path string, st *stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func lstat(path string, st *stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, st *stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go new file mode 100644 index 0000000..297d0a9 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go @@ -0,0 +1,704 @@ +// go run mksyscall.go -l32 -arm -tags linux,mipsle syscall_linux.go syscall_linux_mipsx.go syscall_linux_alarm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build linux && mipsle +// +build linux,mipsle + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsgid(gid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsuid(uid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall9(SYS_SYNC_FILE_RANGE, uintptr(fd), 0, uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Alarm(seconds uint) (remaining uint, err error) { + r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) + remaining = uint(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go new file mode 100644 index 0000000..2e32e7a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go @@ -0,0 +1,709 @@ +// go run mksyscall.go -b32 -tags linux,ppc syscall_linux.go syscall_linux_ppc.go syscall_linux_alarm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build linux && ppc +// +build linux,ppc + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask>>32), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off>>32), uintptr(off), uintptr(len>>32), uintptr(len)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(int64(r0)<<32 | int64(r1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE64, uintptr(fd), uintptr(length>>32), uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset>>32), uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset>>32), uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsgid(gid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsuid(uid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), uintptr(length>>32), uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func syncFileRange2(fd int, flags int, off int64, n int64) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off>>32), uintptr(off), uintptr(n>>32), uintptr(n)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(cmdline) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Alarm(seconds uint) (remaining uint, err error) { + r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) + remaining = uint(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go new file mode 100644 index 0000000..3c53170 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go @@ -0,0 +1,755 @@ +// go run mksyscall.go -tags linux,ppc64 syscall_linux.go syscall_linux_ppc64x.go syscall_linux_alarm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build linux && ppc64 +// +build linux,ppc64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsgid(gid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsuid(uid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func syncFileRange2(fd int, flags int, off int64, n int64) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off), uintptr(n), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(cmdline) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Alarm(seconds uint) (remaining uint, err error) { + r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) + remaining = uint(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go new file mode 100644 index 0000000..a00c674 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go @@ -0,0 +1,755 @@ +// go run mksyscall.go -tags linux,ppc64le syscall_linux.go syscall_linux_ppc64x.go syscall_linux_alarm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build linux && ppc64le +// +build linux,ppc64le + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsgid(gid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsuid(uid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func syncFileRange2(fd int, flags int, off int64, n int64) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off), uintptr(n), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(cmdline) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Alarm(seconds uint) (remaining uint, err error) { + r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) + remaining = uint(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go new file mode 100644 index 0000000..a1a9bcb --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go @@ -0,0 +1,572 @@ +// go run mksyscall.go -tags linux,riscv64 syscall_linux.go syscall_linux_riscv64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build linux && riscv64 +// +build linux,riscv64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsgid(gid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsuid(uid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(cmdline) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go new file mode 100644 index 0000000..e0dabc6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go @@ -0,0 +1,546 @@ +// go run mksyscall.go -tags linux,s390x syscall_linux.go syscall_linux_s390x.go syscall_linux_alarm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build linux && s390x +// +build linux,s390x + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsgid(gid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsuid(uid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(cmdline) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Alarm(seconds uint) (remaining uint, err error) { + r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) + remaining = uint(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go new file mode 100644 index 0000000..368623c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go @@ -0,0 +1,699 @@ +// go run mksyscall.go -tags linux,sparc64 syscall_linux.go syscall_linux_sparc64.go syscall_linux_alarm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build linux && sparc64 +// +build linux,sparc64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsgid(gid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsuid(uid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Alarm(seconds uint) (remaining uint, err error) { + r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) + remaining = uint(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go new file mode 100644 index 0000000..4af561a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go @@ -0,0 +1,1850 @@ +// go run mksyscall.go -l32 -netbsd -tags netbsd,386 syscall_bsd.go syscall_netbsd.go syscall_netbsd_386.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build netbsd && 386 +// +build netbsd,386 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(from int, to int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), 0, uintptr(length), uintptr(length>>32), uintptr(advice), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) { + _, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifoat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statvfs1(path string, buf *Statvfs_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go new file mode 100644 index 0000000..3b90e94 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go @@ -0,0 +1,1850 @@ +// go run mksyscall.go -netbsd -tags netbsd,amd64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build netbsd && amd64 +// +build netbsd,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(from int, to int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), 0, uintptr(length), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) { + _, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifoat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statvfs1(path string, buf *Statvfs_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go new file mode 100644 index 0000000..890f4cc --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go @@ -0,0 +1,1850 @@ +// go run mksyscall.go -l32 -netbsd -arm -tags netbsd,arm syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build netbsd && arm +// +build netbsd,arm + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(from int, to int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), 0, uintptr(length), uintptr(length>>32), uintptr(advice), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) { + _, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifoat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statvfs1(path string, buf *Statvfs_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go new file mode 100644 index 0000000..c79f071 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go @@ -0,0 +1,1850 @@ +// go run mksyscall.go -netbsd -tags netbsd,arm64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build netbsd && arm64 +// +build netbsd,arm64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(from int, to int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), 0, uintptr(length), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) { + _, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifoat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statvfs1(path string, buf *Statvfs_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go new file mode 100644 index 0000000..a057fc5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go @@ -0,0 +1,1693 @@ +// go run mksyscall.go -l32 -openbsd -tags openbsd,386 syscall_bsd.go syscall_openbsd.go syscall_openbsd_386.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build openbsd && 386 +// +build openbsd,386 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(from int, to int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrtable() (rtable int, err error) { + r0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0) + rtable = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifoat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrtable(rtable int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go new file mode 100644 index 0000000..04db8fa --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go @@ -0,0 +1,1693 @@ +// go run mksyscall.go -openbsd -tags openbsd,amd64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build openbsd && amd64 +// +build openbsd,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(from int, to int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrtable() (rtable int, err error) { + r0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0) + rtable = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifoat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrtable(rtable int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go new file mode 100644 index 0000000..69f8030 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go @@ -0,0 +1,1693 @@ +// go run mksyscall.go -l32 -openbsd -arm -tags openbsd,arm syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build openbsd && arm +// +build openbsd,arm + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(from int, to int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrtable() (rtable int, err error) { + r0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0) + rtable = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifoat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrtable(rtable int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go new file mode 100644 index 0000000..c96a505 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go @@ -0,0 +1,1693 @@ +// go run mksyscall.go -openbsd -tags openbsd,arm64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build openbsd && arm64 +// +build openbsd,arm64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(from int, to int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrtable() (rtable int, err error) { + r0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0) + rtable = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifoat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrtable(rtable int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go new file mode 100644 index 0000000..016d959 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go @@ -0,0 +1,1693 @@ +// go run mksyscall.go -openbsd -tags openbsd,mips64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_mips64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build openbsd && mips64 +// +build openbsd,mips64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(from int, to int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrtable() (rtable int, err error) { + r0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0) + rtable = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifoat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrtable(rtable int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go new file mode 100644 index 0000000..d12f4fb --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go @@ -0,0 +1,2053 @@ +// go run mksyscall_solaris.go -tags solaris,amd64 syscall_solaris.go syscall_solaris_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build solaris && amd64 +// +build solaris,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +//go:cgo_import_dynamic libc_pipe pipe "libc.so" +//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so" +//go:cgo_import_dynamic libc_getsockname getsockname "libsocket.so" +//go:cgo_import_dynamic libc_getcwd getcwd "libc.so" +//go:cgo_import_dynamic libc_getgroups getgroups "libc.so" +//go:cgo_import_dynamic libc_setgroups setgroups "libc.so" +//go:cgo_import_dynamic libc_wait4 wait4 "libc.so" +//go:cgo_import_dynamic libc_gethostname gethostname "libc.so" +//go:cgo_import_dynamic libc_utimes utimes "libc.so" +//go:cgo_import_dynamic libc_utimensat utimensat "libc.so" +//go:cgo_import_dynamic libc_fcntl fcntl "libc.so" +//go:cgo_import_dynamic libc_futimesat futimesat "libc.so" +//go:cgo_import_dynamic libc_accept accept "libsocket.so" +//go:cgo_import_dynamic libc___xnet_recvmsg __xnet_recvmsg "libsocket.so" +//go:cgo_import_dynamic libc___xnet_sendmsg __xnet_sendmsg "libsocket.so" +//go:cgo_import_dynamic libc_acct acct "libc.so" +//go:cgo_import_dynamic libc___makedev __makedev "libc.so" +//go:cgo_import_dynamic libc___major __major "libc.so" +//go:cgo_import_dynamic libc___minor __minor "libc.so" +//go:cgo_import_dynamic libc_ioctl ioctl "libc.so" +//go:cgo_import_dynamic libc_poll poll "libc.so" +//go:cgo_import_dynamic libc_access access "libc.so" +//go:cgo_import_dynamic libc_adjtime adjtime "libc.so" +//go:cgo_import_dynamic libc_chdir chdir "libc.so" +//go:cgo_import_dynamic libc_chmod chmod "libc.so" +//go:cgo_import_dynamic libc_chown chown "libc.so" +//go:cgo_import_dynamic libc_chroot chroot "libc.so" +//go:cgo_import_dynamic libc_close close "libc.so" +//go:cgo_import_dynamic libc_creat creat "libc.so" +//go:cgo_import_dynamic libc_dup dup "libc.so" +//go:cgo_import_dynamic libc_dup2 dup2 "libc.so" +//go:cgo_import_dynamic libc_exit exit "libc.so" +//go:cgo_import_dynamic libc_faccessat faccessat "libc.so" +//go:cgo_import_dynamic libc_fchdir fchdir "libc.so" +//go:cgo_import_dynamic libc_fchmod fchmod "libc.so" +//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so" +//go:cgo_import_dynamic libc_fchown fchown "libc.so" +//go:cgo_import_dynamic libc_fchownat fchownat "libc.so" +//go:cgo_import_dynamic libc_fdatasync fdatasync "libc.so" +//go:cgo_import_dynamic libc_flock flock "libc.so" +//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so" +//go:cgo_import_dynamic libc_fstat fstat "libc.so" +//go:cgo_import_dynamic libc_fstatat fstatat "libc.so" +//go:cgo_import_dynamic libc_fstatvfs fstatvfs "libc.so" +//go:cgo_import_dynamic libc_getdents getdents "libc.so" +//go:cgo_import_dynamic libc_getgid getgid "libc.so" +//go:cgo_import_dynamic libc_getpid getpid "libc.so" +//go:cgo_import_dynamic libc_getpgid getpgid "libc.so" +//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so" +//go:cgo_import_dynamic libc_geteuid geteuid "libc.so" +//go:cgo_import_dynamic libc_getegid getegid "libc.so" +//go:cgo_import_dynamic libc_getppid getppid "libc.so" +//go:cgo_import_dynamic libc_getpriority getpriority "libc.so" +//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so" +//go:cgo_import_dynamic libc_getrusage getrusage "libc.so" +//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so" +//go:cgo_import_dynamic libc_getuid getuid "libc.so" +//go:cgo_import_dynamic libc_kill kill "libc.so" +//go:cgo_import_dynamic libc_lchown lchown "libc.so" +//go:cgo_import_dynamic libc_link link "libc.so" +//go:cgo_import_dynamic libc___xnet_llisten __xnet_llisten "libsocket.so" +//go:cgo_import_dynamic libc_lstat lstat "libc.so" +//go:cgo_import_dynamic libc_madvise madvise "libc.so" +//go:cgo_import_dynamic libc_mkdir mkdir "libc.so" +//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so" +//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so" +//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so" +//go:cgo_import_dynamic libc_mknod mknod "libc.so" +//go:cgo_import_dynamic libc_mknodat mknodat "libc.so" +//go:cgo_import_dynamic libc_mlock mlock "libc.so" +//go:cgo_import_dynamic libc_mlockall mlockall "libc.so" +//go:cgo_import_dynamic libc_mprotect mprotect "libc.so" +//go:cgo_import_dynamic libc_msync msync "libc.so" +//go:cgo_import_dynamic libc_munlock munlock "libc.so" +//go:cgo_import_dynamic libc_munlockall munlockall "libc.so" +//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so" +//go:cgo_import_dynamic libc_open open "libc.so" +//go:cgo_import_dynamic libc_openat openat "libc.so" +//go:cgo_import_dynamic libc_pathconf pathconf "libc.so" +//go:cgo_import_dynamic libc_pause pause "libc.so" +//go:cgo_import_dynamic libc_pread pread "libc.so" +//go:cgo_import_dynamic libc_pwrite pwrite "libc.so" +//go:cgo_import_dynamic libc_read read "libc.so" +//go:cgo_import_dynamic libc_readlink readlink "libc.so" +//go:cgo_import_dynamic libc_rename rename "libc.so" +//go:cgo_import_dynamic libc_renameat renameat "libc.so" +//go:cgo_import_dynamic libc_rmdir rmdir "libc.so" +//go:cgo_import_dynamic libc_lseek lseek "libc.so" +//go:cgo_import_dynamic libc_select select "libc.so" +//go:cgo_import_dynamic libc_setegid setegid "libc.so" +//go:cgo_import_dynamic libc_seteuid seteuid "libc.so" +//go:cgo_import_dynamic libc_setgid setgid "libc.so" +//go:cgo_import_dynamic libc_sethostname sethostname "libc.so" +//go:cgo_import_dynamic libc_setpgid setpgid "libc.so" +//go:cgo_import_dynamic libc_setpriority setpriority "libc.so" +//go:cgo_import_dynamic libc_setregid setregid "libc.so" +//go:cgo_import_dynamic libc_setreuid setreuid "libc.so" +//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" +//go:cgo_import_dynamic libc_setsid setsid "libc.so" +//go:cgo_import_dynamic libc_setuid setuid "libc.so" +//go:cgo_import_dynamic libc_shutdown shutdown "libsocket.so" +//go:cgo_import_dynamic libc_stat stat "libc.so" +//go:cgo_import_dynamic libc_statvfs statvfs "libc.so" +//go:cgo_import_dynamic libc_symlink symlink "libc.so" +//go:cgo_import_dynamic libc_sync sync "libc.so" +//go:cgo_import_dynamic libc_sysconf sysconf "libc.so" +//go:cgo_import_dynamic libc_times times "libc.so" +//go:cgo_import_dynamic libc_truncate truncate "libc.so" +//go:cgo_import_dynamic libc_fsync fsync "libc.so" +//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so" +//go:cgo_import_dynamic libc_umask umask "libc.so" +//go:cgo_import_dynamic libc_uname uname "libc.so" +//go:cgo_import_dynamic libc_umount umount "libc.so" +//go:cgo_import_dynamic libc_unlink unlink "libc.so" +//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so" +//go:cgo_import_dynamic libc_ustat ustat "libc.so" +//go:cgo_import_dynamic libc_utime utime "libc.so" +//go:cgo_import_dynamic libc___xnet_bind __xnet_bind "libsocket.so" +//go:cgo_import_dynamic libc___xnet_connect __xnet_connect "libsocket.so" +//go:cgo_import_dynamic libc_mmap mmap "libc.so" +//go:cgo_import_dynamic libc_munmap munmap "libc.so" +//go:cgo_import_dynamic libc_sendfile sendfile "libsendfile.so" +//go:cgo_import_dynamic libc___xnet_sendto __xnet_sendto "libsocket.so" +//go:cgo_import_dynamic libc___xnet_socket __xnet_socket "libsocket.so" +//go:cgo_import_dynamic libc___xnet_socketpair __xnet_socketpair "libsocket.so" +//go:cgo_import_dynamic libc_write write "libc.so" +//go:cgo_import_dynamic libc___xnet_getsockopt __xnet_getsockopt "libsocket.so" +//go:cgo_import_dynamic libc_getpeername getpeername "libsocket.so" +//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so" +//go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so" +//go:cgo_import_dynamic libc_port_create port_create "libc.so" +//go:cgo_import_dynamic libc_port_associate port_associate "libc.so" +//go:cgo_import_dynamic libc_port_dissociate port_dissociate "libc.so" +//go:cgo_import_dynamic libc_port_get port_get "libc.so" +//go:cgo_import_dynamic libc_port_getn port_getn "libc.so" + +//go:linkname procpipe libc_pipe +//go:linkname procpipe2 libc_pipe2 +//go:linkname procgetsockname libc_getsockname +//go:linkname procGetcwd libc_getcwd +//go:linkname procgetgroups libc_getgroups +//go:linkname procsetgroups libc_setgroups +//go:linkname procwait4 libc_wait4 +//go:linkname procgethostname libc_gethostname +//go:linkname procutimes libc_utimes +//go:linkname procutimensat libc_utimensat +//go:linkname procfcntl libc_fcntl +//go:linkname procfutimesat libc_futimesat +//go:linkname procaccept libc_accept +//go:linkname proc__xnet_recvmsg libc___xnet_recvmsg +//go:linkname proc__xnet_sendmsg libc___xnet_sendmsg +//go:linkname procacct libc_acct +//go:linkname proc__makedev libc___makedev +//go:linkname proc__major libc___major +//go:linkname proc__minor libc___minor +//go:linkname procioctl libc_ioctl +//go:linkname procpoll libc_poll +//go:linkname procAccess libc_access +//go:linkname procAdjtime libc_adjtime +//go:linkname procChdir libc_chdir +//go:linkname procChmod libc_chmod +//go:linkname procChown libc_chown +//go:linkname procChroot libc_chroot +//go:linkname procClose libc_close +//go:linkname procCreat libc_creat +//go:linkname procDup libc_dup +//go:linkname procDup2 libc_dup2 +//go:linkname procExit libc_exit +//go:linkname procFaccessat libc_faccessat +//go:linkname procFchdir libc_fchdir +//go:linkname procFchmod libc_fchmod +//go:linkname procFchmodat libc_fchmodat +//go:linkname procFchown libc_fchown +//go:linkname procFchownat libc_fchownat +//go:linkname procFdatasync libc_fdatasync +//go:linkname procFlock libc_flock +//go:linkname procFpathconf libc_fpathconf +//go:linkname procFstat libc_fstat +//go:linkname procFstatat libc_fstatat +//go:linkname procFstatvfs libc_fstatvfs +//go:linkname procGetdents libc_getdents +//go:linkname procGetgid libc_getgid +//go:linkname procGetpid libc_getpid +//go:linkname procGetpgid libc_getpgid +//go:linkname procGetpgrp libc_getpgrp +//go:linkname procGeteuid libc_geteuid +//go:linkname procGetegid libc_getegid +//go:linkname procGetppid libc_getppid +//go:linkname procGetpriority libc_getpriority +//go:linkname procGetrlimit libc_getrlimit +//go:linkname procGetrusage libc_getrusage +//go:linkname procGettimeofday libc_gettimeofday +//go:linkname procGetuid libc_getuid +//go:linkname procKill libc_kill +//go:linkname procLchown libc_lchown +//go:linkname procLink libc_link +//go:linkname proc__xnet_llisten libc___xnet_llisten +//go:linkname procLstat libc_lstat +//go:linkname procMadvise libc_madvise +//go:linkname procMkdir libc_mkdir +//go:linkname procMkdirat libc_mkdirat +//go:linkname procMkfifo libc_mkfifo +//go:linkname procMkfifoat libc_mkfifoat +//go:linkname procMknod libc_mknod +//go:linkname procMknodat libc_mknodat +//go:linkname procMlock libc_mlock +//go:linkname procMlockall libc_mlockall +//go:linkname procMprotect libc_mprotect +//go:linkname procMsync libc_msync +//go:linkname procMunlock libc_munlock +//go:linkname procMunlockall libc_munlockall +//go:linkname procNanosleep libc_nanosleep +//go:linkname procOpen libc_open +//go:linkname procOpenat libc_openat +//go:linkname procPathconf libc_pathconf +//go:linkname procPause libc_pause +//go:linkname procpread libc_pread +//go:linkname procpwrite libc_pwrite +//go:linkname procread libc_read +//go:linkname procReadlink libc_readlink +//go:linkname procRename libc_rename +//go:linkname procRenameat libc_renameat +//go:linkname procRmdir libc_rmdir +//go:linkname proclseek libc_lseek +//go:linkname procSelect libc_select +//go:linkname procSetegid libc_setegid +//go:linkname procSeteuid libc_seteuid +//go:linkname procSetgid libc_setgid +//go:linkname procSethostname libc_sethostname +//go:linkname procSetpgid libc_setpgid +//go:linkname procSetpriority libc_setpriority +//go:linkname procSetregid libc_setregid +//go:linkname procSetreuid libc_setreuid +//go:linkname procSetrlimit libc_setrlimit +//go:linkname procSetsid libc_setsid +//go:linkname procSetuid libc_setuid +//go:linkname procshutdown libc_shutdown +//go:linkname procStat libc_stat +//go:linkname procStatvfs libc_statvfs +//go:linkname procSymlink libc_symlink +//go:linkname procSync libc_sync +//go:linkname procSysconf libc_sysconf +//go:linkname procTimes libc_times +//go:linkname procTruncate libc_truncate +//go:linkname procFsync libc_fsync +//go:linkname procFtruncate libc_ftruncate +//go:linkname procUmask libc_umask +//go:linkname procUname libc_uname +//go:linkname procumount libc_umount +//go:linkname procUnlink libc_unlink +//go:linkname procUnlinkat libc_unlinkat +//go:linkname procUstat libc_ustat +//go:linkname procUtime libc_utime +//go:linkname proc__xnet_bind libc___xnet_bind +//go:linkname proc__xnet_connect libc___xnet_connect +//go:linkname procmmap libc_mmap +//go:linkname procmunmap libc_munmap +//go:linkname procsendfile libc_sendfile +//go:linkname proc__xnet_sendto libc___xnet_sendto +//go:linkname proc__xnet_socket libc___xnet_socket +//go:linkname proc__xnet_socketpair libc___xnet_socketpair +//go:linkname procwrite libc_write +//go:linkname proc__xnet_getsockopt libc___xnet_getsockopt +//go:linkname procgetpeername libc_getpeername +//go:linkname procsetsockopt libc_setsockopt +//go:linkname procrecvfrom libc_recvfrom +//go:linkname procport_create libc_port_create +//go:linkname procport_associate libc_port_associate +//go:linkname procport_dissociate libc_port_dissociate +//go:linkname procport_get libc_port_get +//go:linkname procport_getn libc_port_getn + +var ( + procpipe, + procpipe2, + procgetsockname, + procGetcwd, + procgetgroups, + procsetgroups, + procwait4, + procgethostname, + procutimes, + procutimensat, + procfcntl, + procfutimesat, + procaccept, + proc__xnet_recvmsg, + proc__xnet_sendmsg, + procacct, + proc__makedev, + proc__major, + proc__minor, + procioctl, + procpoll, + procAccess, + procAdjtime, + procChdir, + procChmod, + procChown, + procChroot, + procClose, + procCreat, + procDup, + procDup2, + procExit, + procFaccessat, + procFchdir, + procFchmod, + procFchmodat, + procFchown, + procFchownat, + procFdatasync, + procFlock, + procFpathconf, + procFstat, + procFstatat, + procFstatvfs, + procGetdents, + procGetgid, + procGetpid, + procGetpgid, + procGetpgrp, + procGeteuid, + procGetegid, + procGetppid, + procGetpriority, + procGetrlimit, + procGetrusage, + procGettimeofday, + procGetuid, + procKill, + procLchown, + procLink, + proc__xnet_llisten, + procLstat, + procMadvise, + procMkdir, + procMkdirat, + procMkfifo, + procMkfifoat, + procMknod, + procMknodat, + procMlock, + procMlockall, + procMprotect, + procMsync, + procMunlock, + procMunlockall, + procNanosleep, + procOpen, + procOpenat, + procPathconf, + procPause, + procpread, + procpwrite, + procread, + procReadlink, + procRename, + procRenameat, + procRmdir, + proclseek, + procSelect, + procSetegid, + procSeteuid, + procSetgid, + procSethostname, + procSetpgid, + procSetpriority, + procSetregid, + procSetreuid, + procSetrlimit, + procSetsid, + procSetuid, + procshutdown, + procStat, + procStatvfs, + procSymlink, + procSync, + procSysconf, + procTimes, + procTruncate, + procFsync, + procFtruncate, + procUmask, + procUname, + procumount, + procUnlink, + procUnlinkat, + procUstat, + procUtime, + proc__xnet_bind, + proc__xnet_connect, + procmmap, + procmunmap, + procsendfile, + proc__xnet_sendto, + proc__xnet_socket, + proc__xnet_socketpair, + procwrite, + proc__xnet_getsockopt, + procgetpeername, + procsetsockopt, + procrecvfrom, + procport_create, + procport_associate, + procport_dissociate, + procport_get, + procport_getn syscallFunc +) + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (n int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procpipe)), 1, uintptr(unsafe.Pointer(p)), 0, 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procpipe2)), 2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetsockname)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetcwd)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procsetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwait4)), 4, uintptr(pid), uintptr(unsafe.Pointer(statusp)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int32(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func gethostname(buf []byte) (n int, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimes)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimensat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flag), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0) + val = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(fildes int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfutimesat)), 3, uintptr(fildes), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procaccept)), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_recvmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_sendmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func acct(path *byte) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procacct)), 1, uintptr(unsafe.Pointer(path)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func __makedev(version int, major uint, minor uint) (val uint64) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__makedev)), 3, uintptr(version), uintptr(major), uintptr(minor), 0, 0, 0) + val = uint64(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func __major(version int, dev uint64) (val uint) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__major)), 2, uintptr(version), uintptr(dev), 0, 0, 0, 0) + val = uint(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func __minor(version int, dev uint64) (val uint) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__minor)), 2, uintptr(version), uintptr(dev), 0, 0, 0, 0) + val = uint(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctlRet(fd int, req uint, arg uintptr) (ret int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0) + ret = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpoll)), 3, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAccess)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAdjtime)), 2, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChmod)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChroot)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procClose)), 1, uintptr(fd), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Creat(path string, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procCreat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup)), 1, uintptr(fd), 0, 0, 0, 0, 0) + nfd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + sysvicall6(uintptr(unsafe.Pointer(&procExit)), 1, uintptr(code), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFaccessat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchdir)), 1, uintptr(fd), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmod)), 2, uintptr(fd), uintptr(mode), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchownat)), 5, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFlock)), 2, uintptr(fd), uintptr(how), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFpathconf)), 2, uintptr(fd), uintptr(name), 0, 0, 0, 0) + val = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstat)), 2, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatvfs(fd int, vfsstat *Statvfs_t) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatvfs)), 2, uintptr(fd), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetdents)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetgid)), 0, 0, 0, 0, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpid)), 0, 0, 0, 0, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0) + pgid = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgid int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgrp)), 0, 0, 0, 0, 0, 0, 0) + pgid = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGeteuid)), 0, 0, 0, 0, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetegid)), 0, 0, 0, 0, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetppid)), 0, 0, 0, 0, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetpriority)), 2, uintptr(which), uintptr(who), 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrusage)), 2, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGettimeofday)), 1, uintptr(unsafe.Pointer(tv)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetuid)), 0, 0, 0, 0, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procKill)), 2, uintptr(pid), uintptr(signum), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLchown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_llisten)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLstat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMadvise)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(advice), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdir)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdirat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifo)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifoat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifoat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknod)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMprotect)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(prot), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMsync)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(flags), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlockall)), 0, 0, 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procNanosleep)), 2, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpen)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpenat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPathconf)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0, 0, 0, 0) + val = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPause)), 0, 0, 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpread)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpwrite)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procread)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + if len(buf) > 0 { + _p1 = &buf[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procReadlink)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(len(buf)), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRename)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRenameat)), 4, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRmdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proclseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSelect)), 5, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetegid)), 1, uintptr(egid), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSeteuid)), 1, uintptr(euid), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetgid)), 1, uintptr(gid), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSetpriority)), 3, uintptr(which), uintptr(who), uintptr(prio), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetregid)), 2, uintptr(rgid), uintptr(egid), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetreuid)), 2, uintptr(ruid), uintptr(euid), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetsid)), 0, 0, 0, 0, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetuid)), 1, uintptr(uid), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procshutdown)), 2, uintptr(s), uintptr(how), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statvfs(path string, vfsstat *Statvfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStatvfs)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSymlink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSync)), 0, 0, 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysconf(which int) (n int64, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSysconf)), 1, uintptr(which), 0, 0, 0, 0, 0) + n = int64(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procTimes)), 1, uintptr(unsafe.Pointer(tms)), 0, 0, 0, 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procTruncate)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFsync)), 1, uintptr(fd), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFtruncate)), 2, uintptr(fd), uintptr(length), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procUmask)), 1, uintptr(mask), 0, 0, 0, 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procUname)), 1, uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procumount)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlink)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlinkat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUstat)), 2, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUtime)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_bind)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_connect)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmmap)), 6, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmunmap)), 2, uintptr(addr), uintptr(length), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsendfile)), 4, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_sendto)), 6, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socket)), 3, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socketpair)), 4, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwrite)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_getsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetpeername)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsetsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procrecvfrom)), 6, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func port_create() (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_create)), 0, 0, 0, 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func port_associate(port int, source int, object uintptr, events int, user *byte) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_associate)), 5, uintptr(port), uintptr(source), uintptr(object), uintptr(events), uintptr(unsafe.Pointer(user)), 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func port_dissociate(port int, source int, object uintptr) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_dissociate)), 3, uintptr(port), uintptr(source), uintptr(object), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func port_get(port int, pe *portEvent, timeout *Timespec) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_get)), 3, uintptr(port), uintptr(unsafe.Pointer(pe)), uintptr(unsafe.Pointer(timeout)), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func port_getn(port int, pe *portEvent, max uint32, nget *uint32, timeout *Timespec) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_getn)), 5, uintptr(port), uintptr(unsafe.Pointer(pe)), uintptr(max), uintptr(unsafe.Pointer(nget)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go new file mode 100644 index 0000000..f207945 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go @@ -0,0 +1,1255 @@ +// go run mksyscall.go -tags zos,s390x syscall_zos_s390x.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build zos && s390x +// +build zos,s390x + +package unix + +import ( + "unsafe" +) + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := syscall_syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := syscall_syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := syscall_syscall(SYS___ACCEPT_A, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := syscall_syscall(SYS___BIND_A, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := syscall_syscall(SYS___CONNECT_A, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := syscall_rawsyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := syscall_rawsyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := syscall_syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := syscall_syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := syscall_rawsyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := syscall_rawsyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := syscall_rawsyscall(SYS___GETPEERNAME_A, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := syscall_rawsyscall(SYS___GETSOCKNAME_A, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(SYS___RECVFROM_A, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall6(SYS___SENDTO_A, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := syscall_syscall(SYS___RECVMSG_A, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := syscall_syscall(SYS___SENDMSG_A, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := syscall_syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := syscall_syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := syscall_syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(SYS___ACCESS_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(SYS___CHDIR_A, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(SYS___CHOWN_A, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(SYS___CHMOD_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Creat(path string, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := syscall_syscall(SYS___CREAT_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := syscall_syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := syscall_syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Errno2() (er2 int) { + uer2, _, _ := syscall_syscall(SYS___ERRNO2, 0, 0, 0) + er2 = int(uer2) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Err2ad() (eadd *int) { + ueadd, _, _ := syscall_syscall(SYS___ERR2AD, 0, 0, 0) + eadd = (*int)(unsafe.Pointer(ueadd)) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + syscall_syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := syscall_syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := syscall_syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := syscall_syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func FcntlInt(fd uintptr, cmd int, arg int) (retval int, err error) { + r0, _, e1 := syscall_syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + retval = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat(fd int, stat *Stat_LE_t) (err error) { + _, _, e1 := syscall_syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatvfs(fd int, stat *Statvfs_t) (err error) { + _, _, e1 := syscall_syscall(SYS_FSTATVFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := syscall_syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := syscall_syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpagesize() (pgsize int) { + r0, _, _ := syscall_syscall(SYS_GETPAGESIZE, 0, 0, 0) + pgsize = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Poll(fds []PollFd, timeout int) (n int, err error) { + var _p0 unsafe.Pointer + if len(fds) > 0 { + _p0 = unsafe.Pointer(&fds[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(SYS_POLL, uintptr(_p0), uintptr(len(fds)), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := syscall_syscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func W_Getmntent(buff *byte, size int) (lastsys int, err error) { + r0, _, e1 := syscall_syscall(SYS_W_GETMNTENT, uintptr(unsafe.Pointer(buff)), uintptr(size), 0) + lastsys = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func W_Getmntent_A(buff *byte, size int) (lastsys int, err error) { + r0, _, e1 := syscall_syscall(SYS___W_GETMNTENT_A, uintptr(unsafe.Pointer(buff)), uintptr(size), 0) + lastsys = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount_LE(path string, filesystem string, fstype string, mtm uint32, parmlen int32, parm string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(filesystem) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + var _p3 *byte + _p3, err = BytePtrFromString(parm) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(SYS___MOUNT_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(mtm), uintptr(parmlen), uintptr(unsafe.Pointer(_p3))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func unmount(filesystem string, mtm int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(filesystem) + if err != nil { + return + } + _, _, e1 := syscall_syscall(SYS___UMOUNT_A, uintptr(unsafe.Pointer(_p0)), uintptr(mtm), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(SYS___CHROOT_A, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := syscall_rawsyscall(SYS___UNAME_A, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gethostname(buf []byte) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall(SYS___GETHOSTNAME_A, uintptr(_p0), uintptr(len(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := syscall_rawsyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := syscall_rawsyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := syscall_rawsyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := syscall_rawsyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := syscall_rawsyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (pid int) { + r0, _, _ := syscall_rawsyscall(SYS_GETPPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := syscall_syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := syscall_rawsyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getrusage(who int, rusage *rusage_zos) (err error) { + _, _, e1 := syscall_rawsyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := syscall_rawsyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := syscall_rawsyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig Signal) (err error) { + _, _, e1 := syscall_rawsyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(SYS___LCHOWN_A, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := syscall_syscall(SYS___LINK_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := syscall_syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func lstat(path string, stat *Stat_LE_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(SYS___LSTAT_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(SYS___MKDIR_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(SYS___MKFIFO_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(SYS___MKNOD_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(SYS___READLINK_A, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := syscall_syscall(SYS___RENAME_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(SYS___RMDIR_A, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := syscall_syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := syscall_syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := syscall_rawsyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, lim *Rlimit) (err error) { + _, _, e1 := syscall_rawsyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := syscall_rawsyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := syscall_rawsyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := syscall_rawsyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := syscall_syscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(uid int) (err error) { + _, _, e1 := syscall_syscall(SYS_SETGID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := syscall_syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, statLE *Stat_LE_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(SYS___STAT_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(statLE)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := syscall_syscall(SYS___SYMLINK_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + syscall_syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(SYS___TRUNCATE_A, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tcgetattr(fildes int, termptr *Termios) (err error) { + _, _, e1 := syscall_syscall(SYS_TCGETATTR, uintptr(fildes), uintptr(unsafe.Pointer(termptr)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tcsetattr(fildes int, when int, termptr *Termios) (err error) { + _, _, e1 := syscall_syscall(SYS_TCSETATTR, uintptr(fildes), uintptr(when), uintptr(unsafe.Pointer(termptr))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := syscall_syscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(SYS___UNLINK_A, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, utim *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(SYS___UTIME_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(utim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := syscall_syscall(SYS___OPEN_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func remove(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(SYS_REMOVE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func waitpid(pid int, wstatus *_C_int, options int) (wpid int, err error) { + r0, _, e1 := syscall_syscall(SYS_WAITPID, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options)) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func gettimeofday(tv *timeval_zos) (err error) { + _, _, e1 := syscall_rawsyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := syscall_rawsyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(SYS___UTIMES_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nmsgsfds int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (ret int, err error) { + r0, _, e1 := syscall_syscall6(SYS_SELECT, uintptr(nmsgsfds), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go new file mode 100644 index 0000000..9e9d0b2 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go @@ -0,0 +1,274 @@ +// go run mksysctl_openbsd.go +// Code generated by the command above; DO NOT EDIT. + +//go:build 386 && openbsd +// +build 386,openbsd + +package unix + +type mibentry struct { + ctlname string + ctloid []_C_int +} + +var sysctlMib = []mibentry{ + {"ddb.console", []_C_int{9, 6}}, + {"ddb.log", []_C_int{9, 7}}, + {"ddb.max_line", []_C_int{9, 3}}, + {"ddb.max_width", []_C_int{9, 2}}, + {"ddb.panic", []_C_int{9, 5}}, + {"ddb.radix", []_C_int{9, 1}}, + {"ddb.tab_stop_width", []_C_int{9, 4}}, + {"ddb.trigger", []_C_int{9, 8}}, + {"fs.posix.setuid", []_C_int{3, 1, 1}}, + {"hw.allowpowerdown", []_C_int{6, 22}}, + {"hw.byteorder", []_C_int{6, 4}}, + {"hw.cpuspeed", []_C_int{6, 12}}, + {"hw.diskcount", []_C_int{6, 10}}, + {"hw.disknames", []_C_int{6, 8}}, + {"hw.diskstats", []_C_int{6, 9}}, + {"hw.machine", []_C_int{6, 1}}, + {"hw.model", []_C_int{6, 2}}, + {"hw.ncpu", []_C_int{6, 3}}, + {"hw.ncpufound", []_C_int{6, 21}}, + {"hw.ncpuonline", []_C_int{6, 25}}, + {"hw.pagesize", []_C_int{6, 7}}, + {"hw.physmem", []_C_int{6, 19}}, + {"hw.product", []_C_int{6, 15}}, + {"hw.serialno", []_C_int{6, 17}}, + {"hw.setperf", []_C_int{6, 13}}, + {"hw.usermem", []_C_int{6, 20}}, + {"hw.uuid", []_C_int{6, 18}}, + {"hw.vendor", []_C_int{6, 14}}, + {"hw.version", []_C_int{6, 16}}, + {"kern.arandom", []_C_int{1, 37}}, + {"kern.argmax", []_C_int{1, 8}}, + {"kern.boottime", []_C_int{1, 21}}, + {"kern.bufcachepercent", []_C_int{1, 72}}, + {"kern.ccpu", []_C_int{1, 45}}, + {"kern.clockrate", []_C_int{1, 12}}, + {"kern.consdev", []_C_int{1, 75}}, + {"kern.cp_time", []_C_int{1, 40}}, + {"kern.cp_time2", []_C_int{1, 71}}, + {"kern.cryptodevallowsoft", []_C_int{1, 53}}, + {"kern.domainname", []_C_int{1, 22}}, + {"kern.file", []_C_int{1, 73}}, + {"kern.forkstat", []_C_int{1, 42}}, + {"kern.fscale", []_C_int{1, 46}}, + {"kern.fsync", []_C_int{1, 33}}, + {"kern.hostid", []_C_int{1, 11}}, + {"kern.hostname", []_C_int{1, 10}}, + {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}}, + {"kern.job_control", []_C_int{1, 19}}, + {"kern.malloc.buckets", []_C_int{1, 39, 1}}, + {"kern.malloc.kmemnames", []_C_int{1, 39, 3}}, + {"kern.maxclusters", []_C_int{1, 67}}, + {"kern.maxfiles", []_C_int{1, 7}}, + {"kern.maxlocksperuid", []_C_int{1, 70}}, + {"kern.maxpartitions", []_C_int{1, 23}}, + {"kern.maxproc", []_C_int{1, 6}}, + {"kern.maxthread", []_C_int{1, 25}}, + {"kern.maxvnodes", []_C_int{1, 5}}, + {"kern.mbstat", []_C_int{1, 59}}, + {"kern.msgbuf", []_C_int{1, 48}}, + {"kern.msgbufsize", []_C_int{1, 38}}, + {"kern.nchstats", []_C_int{1, 41}}, + {"kern.netlivelocks", []_C_int{1, 76}}, + {"kern.nfiles", []_C_int{1, 56}}, + {"kern.ngroups", []_C_int{1, 18}}, + {"kern.nosuidcoredump", []_C_int{1, 32}}, + {"kern.nprocs", []_C_int{1, 47}}, + {"kern.nselcoll", []_C_int{1, 43}}, + {"kern.nthreads", []_C_int{1, 26}}, + {"kern.numvnodes", []_C_int{1, 58}}, + {"kern.osrelease", []_C_int{1, 2}}, + {"kern.osrevision", []_C_int{1, 3}}, + {"kern.ostype", []_C_int{1, 1}}, + {"kern.osversion", []_C_int{1, 27}}, + {"kern.pool_debug", []_C_int{1, 77}}, + {"kern.posix1version", []_C_int{1, 17}}, + {"kern.proc", []_C_int{1, 66}}, + {"kern.random", []_C_int{1, 31}}, + {"kern.rawpartition", []_C_int{1, 24}}, + {"kern.saved_ids", []_C_int{1, 20}}, + {"kern.securelevel", []_C_int{1, 9}}, + {"kern.seminfo", []_C_int{1, 61}}, + {"kern.shminfo", []_C_int{1, 62}}, + {"kern.somaxconn", []_C_int{1, 28}}, + {"kern.sominconn", []_C_int{1, 29}}, + {"kern.splassert", []_C_int{1, 54}}, + {"kern.stackgap_random", []_C_int{1, 50}}, + {"kern.sysvipc_info", []_C_int{1, 51}}, + {"kern.sysvmsg", []_C_int{1, 34}}, + {"kern.sysvsem", []_C_int{1, 35}}, + {"kern.sysvshm", []_C_int{1, 36}}, + {"kern.timecounter.choice", []_C_int{1, 69, 4}}, + {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, + {"kern.timecounter.tick", []_C_int{1, 69, 1}}, + {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, + {"kern.tty.maxptys", []_C_int{1, 44, 6}}, + {"kern.tty.nptys", []_C_int{1, 44, 7}}, + {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, + {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, + {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, + {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, + {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, + {"kern.ttycount", []_C_int{1, 57}}, + {"kern.userasymcrypto", []_C_int{1, 60}}, + {"kern.usercrypto", []_C_int{1, 52}}, + {"kern.usermount", []_C_int{1, 30}}, + {"kern.version", []_C_int{1, 4}}, + {"kern.vnode", []_C_int{1, 13}}, + {"kern.watchdog.auto", []_C_int{1, 64, 2}}, + {"kern.watchdog.period", []_C_int{1, 64, 1}}, + {"net.bpf.bufsize", []_C_int{4, 31, 1}}, + {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, + {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}}, + {"net.inet.ah.stats", []_C_int{4, 2, 51, 2}}, + {"net.inet.carp.allow", []_C_int{4, 2, 112, 1}}, + {"net.inet.carp.log", []_C_int{4, 2, 112, 3}}, + {"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}}, + {"net.inet.carp.stats", []_C_int{4, 2, 112, 4}}, + {"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}}, + {"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}}, + {"net.inet.divert.stats", []_C_int{4, 2, 258, 3}}, + {"net.inet.esp.enable", []_C_int{4, 2, 50, 1}}, + {"net.inet.esp.stats", []_C_int{4, 2, 50, 4}}, + {"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}}, + {"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}}, + {"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}}, + {"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}}, + {"net.inet.gre.allow", []_C_int{4, 2, 47, 1}}, + {"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}}, + {"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}}, + {"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}}, + {"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}}, + {"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}}, + {"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}}, + {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}}, + {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}}, + {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}}, + {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}}, + {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}}, + {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}}, + {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}}, + {"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}}, + {"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}}, + {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}}, + {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}}, + {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}}, + {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}}, + {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}}, + {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}}, + {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}}, + {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}}, + {"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}}, + {"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}}, + {"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}}, + {"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}}, + {"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}}, + {"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}}, + {"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}}, + {"net.inet.ip.stats", []_C_int{4, 2, 0, 33}}, + {"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}}, + {"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}}, + {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, + {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, + {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, + {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}}, + {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, + {"net.inet.pim.stats", []_C_int{4, 2, 103, 1}}, + {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, + {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, + {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}}, + {"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}}, + {"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}}, + {"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}}, + {"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}}, + {"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}}, + {"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}}, + {"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}}, + {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}}, + {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}}, + {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}}, + {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}}, + {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}}, + {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}}, + {"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}}, + {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}}, + {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}}, + {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}}, + {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}}, + {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}}, + {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}}, + {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}}, + {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}}, + {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}}, + {"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}}, + {"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}}, + {"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}}, + {"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}}, + {"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}}, + {"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}}, + {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}}, + {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}}, + {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}}, + {"net.inet6.icmp6.nd6_prune", []_C_int{4, 24, 30, 6}}, + {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}}, + {"net.inet6.icmp6.nd6_useloopback", []_C_int{4, 24, 30, 11}}, + {"net.inet6.icmp6.nodeinfo", []_C_int{4, 24, 30, 13}}, + {"net.inet6.icmp6.rediraccept", []_C_int{4, 24, 30, 2}}, + {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}}, + {"net.inet6.ip6.accept_rtadv", []_C_int{4, 24, 17, 12}}, + {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}}, + {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}}, + {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}}, + {"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}}, + {"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}}, + {"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}}, + {"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}}, + {"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}}, + {"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}}, + {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}}, + {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}}, + {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}}, + {"net.inet6.ip6.maxifdefrouters", []_C_int{4, 24, 17, 47}}, + {"net.inet6.ip6.maxifprefixes", []_C_int{4, 24, 17, 46}}, + {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}}, + {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}}, + {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}}, + {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}}, + {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}}, + {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}}, + {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}}, + {"net.inet6.ip6.rr_prune", []_C_int{4, 24, 17, 22}}, + {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}}, + {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}}, + {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}}, + {"net.inet6.ip6.v6only", []_C_int{4, 24, 17, 24}}, + {"net.key.sadb_dump", []_C_int{4, 30, 1}}, + {"net.key.spd_dump", []_C_int{4, 30, 2}}, + {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}}, + {"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}}, + {"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}}, + {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, + {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, + {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, + {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}}, + {"net.mpls.ttl", []_C_int{4, 33, 2}}, + {"net.pflow.stats", []_C_int{4, 34, 1}}, + {"net.pipex.enable", []_C_int{4, 35, 1}}, + {"vm.anonmin", []_C_int{2, 7}}, + {"vm.loadavg", []_C_int{2, 2}}, + {"vm.maxslp", []_C_int{2, 10}}, + {"vm.nkmempages", []_C_int{2, 6}}, + {"vm.psstrings", []_C_int{2, 3}}, + {"vm.swapencrypt.enable", []_C_int{2, 5, 0}}, + {"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}}, + {"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}}, + {"vm.uspace", []_C_int{2, 11}}, + {"vm.uvmexp", []_C_int{2, 4}}, + {"vm.vmmeter", []_C_int{2, 1}}, + {"vm.vnodemin", []_C_int{2, 9}}, + {"vm.vtextmin", []_C_int{2, 8}}, +} diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go new file mode 100644 index 0000000..adecd09 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go @@ -0,0 +1,272 @@ +// go run mksysctl_openbsd.go +// Code generated by the command above; DO NOT EDIT. + +//go:build amd64 && openbsd +// +build amd64,openbsd + +package unix + +type mibentry struct { + ctlname string + ctloid []_C_int +} + +var sysctlMib = []mibentry{ + {"ddb.console", []_C_int{9, 6}}, + {"ddb.log", []_C_int{9, 7}}, + {"ddb.max_line", []_C_int{9, 3}}, + {"ddb.max_width", []_C_int{9, 2}}, + {"ddb.panic", []_C_int{9, 5}}, + {"ddb.profile", []_C_int{9, 9}}, + {"ddb.radix", []_C_int{9, 1}}, + {"ddb.tab_stop_width", []_C_int{9, 4}}, + {"ddb.trigger", []_C_int{9, 8}}, + {"fs.posix.setuid", []_C_int{3, 1, 1}}, + {"hw.allowpowerdown", []_C_int{6, 22}}, + {"hw.byteorder", []_C_int{6, 4}}, + {"hw.cpuspeed", []_C_int{6, 12}}, + {"hw.diskcount", []_C_int{6, 10}}, + {"hw.disknames", []_C_int{6, 8}}, + {"hw.diskstats", []_C_int{6, 9}}, + {"hw.machine", []_C_int{6, 1}}, + {"hw.model", []_C_int{6, 2}}, + {"hw.ncpu", []_C_int{6, 3}}, + {"hw.ncpufound", []_C_int{6, 21}}, + {"hw.ncpuonline", []_C_int{6, 25}}, + {"hw.pagesize", []_C_int{6, 7}}, + {"hw.perfpolicy", []_C_int{6, 23}}, + {"hw.physmem", []_C_int{6, 19}}, + {"hw.product", []_C_int{6, 15}}, + {"hw.serialno", []_C_int{6, 17}}, + {"hw.setperf", []_C_int{6, 13}}, + {"hw.usermem", []_C_int{6, 20}}, + {"hw.uuid", []_C_int{6, 18}}, + {"hw.vendor", []_C_int{6, 14}}, + {"hw.version", []_C_int{6, 16}}, + {"kern.allowkmem", []_C_int{1, 52}}, + {"kern.argmax", []_C_int{1, 8}}, + {"kern.boottime", []_C_int{1, 21}}, + {"kern.bufcachepercent", []_C_int{1, 72}}, + {"kern.ccpu", []_C_int{1, 45}}, + {"kern.clockrate", []_C_int{1, 12}}, + {"kern.consdev", []_C_int{1, 75}}, + {"kern.cp_time", []_C_int{1, 40}}, + {"kern.cp_time2", []_C_int{1, 71}}, + {"kern.dnsjackport", []_C_int{1, 13}}, + {"kern.domainname", []_C_int{1, 22}}, + {"kern.file", []_C_int{1, 73}}, + {"kern.forkstat", []_C_int{1, 42}}, + {"kern.fscale", []_C_int{1, 46}}, + {"kern.fsync", []_C_int{1, 33}}, + {"kern.global_ptrace", []_C_int{1, 81}}, + {"kern.hostid", []_C_int{1, 11}}, + {"kern.hostname", []_C_int{1, 10}}, + {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}}, + {"kern.job_control", []_C_int{1, 19}}, + {"kern.malloc.buckets", []_C_int{1, 39, 1}}, + {"kern.malloc.kmemnames", []_C_int{1, 39, 3}}, + {"kern.maxclusters", []_C_int{1, 67}}, + {"kern.maxfiles", []_C_int{1, 7}}, + {"kern.maxlocksperuid", []_C_int{1, 70}}, + {"kern.maxpartitions", []_C_int{1, 23}}, + {"kern.maxproc", []_C_int{1, 6}}, + {"kern.maxthread", []_C_int{1, 25}}, + {"kern.maxvnodes", []_C_int{1, 5}}, + {"kern.mbstat", []_C_int{1, 59}}, + {"kern.msgbuf", []_C_int{1, 48}}, + {"kern.msgbufsize", []_C_int{1, 38}}, + {"kern.nchstats", []_C_int{1, 41}}, + {"kern.netlivelocks", []_C_int{1, 76}}, + {"kern.nfiles", []_C_int{1, 56}}, + {"kern.ngroups", []_C_int{1, 18}}, + {"kern.nosuidcoredump", []_C_int{1, 32}}, + {"kern.nprocs", []_C_int{1, 47}}, + {"kern.nselcoll", []_C_int{1, 43}}, + {"kern.nthreads", []_C_int{1, 26}}, + {"kern.numvnodes", []_C_int{1, 58}}, + {"kern.osrelease", []_C_int{1, 2}}, + {"kern.osrevision", []_C_int{1, 3}}, + {"kern.ostype", []_C_int{1, 1}}, + {"kern.osversion", []_C_int{1, 27}}, + {"kern.pool_debug", []_C_int{1, 77}}, + {"kern.posix1version", []_C_int{1, 17}}, + {"kern.proc", []_C_int{1, 66}}, + {"kern.rawpartition", []_C_int{1, 24}}, + {"kern.saved_ids", []_C_int{1, 20}}, + {"kern.securelevel", []_C_int{1, 9}}, + {"kern.seminfo", []_C_int{1, 61}}, + {"kern.shminfo", []_C_int{1, 62}}, + {"kern.somaxconn", []_C_int{1, 28}}, + {"kern.sominconn", []_C_int{1, 29}}, + {"kern.splassert", []_C_int{1, 54}}, + {"kern.stackgap_random", []_C_int{1, 50}}, + {"kern.sysvipc_info", []_C_int{1, 51}}, + {"kern.sysvmsg", []_C_int{1, 34}}, + {"kern.sysvsem", []_C_int{1, 35}}, + {"kern.sysvshm", []_C_int{1, 36}}, + {"kern.timecounter.choice", []_C_int{1, 69, 4}}, + {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, + {"kern.timecounter.tick", []_C_int{1, 69, 1}}, + {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, + {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, + {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, + {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, + {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, + {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, + {"kern.ttycount", []_C_int{1, 57}}, + {"kern.version", []_C_int{1, 4}}, + {"kern.watchdog.auto", []_C_int{1, 64, 2}}, + {"kern.watchdog.period", []_C_int{1, 64, 1}}, + {"kern.wxabort", []_C_int{1, 74}}, + {"net.bpf.bufsize", []_C_int{4, 31, 1}}, + {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, + {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}}, + {"net.inet.ah.stats", []_C_int{4, 2, 51, 2}}, + {"net.inet.carp.allow", []_C_int{4, 2, 112, 1}}, + {"net.inet.carp.log", []_C_int{4, 2, 112, 3}}, + {"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}}, + {"net.inet.carp.stats", []_C_int{4, 2, 112, 4}}, + {"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}}, + {"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}}, + {"net.inet.divert.stats", []_C_int{4, 2, 258, 3}}, + {"net.inet.esp.enable", []_C_int{4, 2, 50, 1}}, + {"net.inet.esp.stats", []_C_int{4, 2, 50, 4}}, + {"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}}, + {"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}}, + {"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}}, + {"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}}, + {"net.inet.gre.allow", []_C_int{4, 2, 47, 1}}, + {"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}}, + {"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}}, + {"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}}, + {"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}}, + {"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}}, + {"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}}, + {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}}, + {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}}, + {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}}, + {"net.inet.ip.arpdown", []_C_int{4, 2, 0, 40}}, + {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}}, + {"net.inet.ip.arptimeout", []_C_int{4, 2, 0, 39}}, + {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}}, + {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}}, + {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}}, + {"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}}, + {"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}}, + {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}}, + {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}}, + {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}}, + {"net.inet.ip.mrtmfc", []_C_int{4, 2, 0, 37}}, + {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}}, + {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}}, + {"net.inet.ip.mrtvif", []_C_int{4, 2, 0, 38}}, + {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}}, + {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}}, + {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}}, + {"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}}, + {"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}}, + {"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}}, + {"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}}, + {"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}}, + {"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}}, + {"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}}, + {"net.inet.ip.stats", []_C_int{4, 2, 0, 33}}, + {"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}}, + {"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}}, + {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, + {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, + {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, + {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}}, + {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, + {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, + {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, + {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}}, + {"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}}, + {"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}}, + {"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}}, + {"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}}, + {"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}}, + {"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}}, + {"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}}, + {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}}, + {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}}, + {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}}, + {"net.inet.tcp.rootonly", []_C_int{4, 2, 6, 24}}, + {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}}, + {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}}, + {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}}, + {"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}}, + {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}}, + {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}}, + {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}}, + {"net.inet.tcp.synhashsize", []_C_int{4, 2, 6, 25}}, + {"net.inet.tcp.synuselimit", []_C_int{4, 2, 6, 23}}, + {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}}, + {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}}, + {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}}, + {"net.inet.udp.rootonly", []_C_int{4, 2, 17, 6}}, + {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}}, + {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}}, + {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}}, + {"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}}, + {"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}}, + {"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}}, + {"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}}, + {"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}}, + {"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}}, + {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}}, + {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}}, + {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}}, + {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}}, + {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}}, + {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}}, + {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}}, + {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}}, + {"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}}, + {"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}}, + {"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}}, + {"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}}, + {"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}}, + {"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}}, + {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}}, + {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}}, + {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}}, + {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}}, + {"net.inet6.ip6.mrtmfc", []_C_int{4, 24, 17, 53}}, + {"net.inet6.ip6.mrtmif", []_C_int{4, 24, 17, 52}}, + {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}}, + {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}}, + {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}}, + {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}}, + {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}}, + {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}}, + {"net.inet6.ip6.soiikey", []_C_int{4, 24, 17, 54}}, + {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}}, + {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}}, + {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}}, + {"net.key.sadb_dump", []_C_int{4, 30, 1}}, + {"net.key.spd_dump", []_C_int{4, 30, 2}}, + {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}}, + {"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}}, + {"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}}, + {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, + {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, + {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, + {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}}, + {"net.mpls.ttl", []_C_int{4, 33, 2}}, + {"net.pflow.stats", []_C_int{4, 34, 1}}, + {"net.pipex.enable", []_C_int{4, 35, 1}}, + {"vm.anonmin", []_C_int{2, 7}}, + {"vm.loadavg", []_C_int{2, 2}}, + {"vm.maxslp", []_C_int{2, 10}}, + {"vm.nkmempages", []_C_int{2, 6}}, + {"vm.psstrings", []_C_int{2, 3}}, + {"vm.swapencrypt.enable", []_C_int{2, 5, 0}}, + {"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}}, + {"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}}, + {"vm.uspace", []_C_int{2, 11}}, + {"vm.uvmexp", []_C_int{2, 4}}, + {"vm.vmmeter", []_C_int{2, 1}}, + {"vm.vnodemin", []_C_int{2, 9}}, + {"vm.vtextmin", []_C_int{2, 8}}, +} diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go new file mode 100644 index 0000000..8ea52a4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go @@ -0,0 +1,274 @@ +// go run mksysctl_openbsd.go +// Code generated by the command above; DO NOT EDIT. + +//go:build arm && openbsd +// +build arm,openbsd + +package unix + +type mibentry struct { + ctlname string + ctloid []_C_int +} + +var sysctlMib = []mibentry{ + {"ddb.console", []_C_int{9, 6}}, + {"ddb.log", []_C_int{9, 7}}, + {"ddb.max_line", []_C_int{9, 3}}, + {"ddb.max_width", []_C_int{9, 2}}, + {"ddb.panic", []_C_int{9, 5}}, + {"ddb.radix", []_C_int{9, 1}}, + {"ddb.tab_stop_width", []_C_int{9, 4}}, + {"ddb.trigger", []_C_int{9, 8}}, + {"fs.posix.setuid", []_C_int{3, 1, 1}}, + {"hw.allowpowerdown", []_C_int{6, 22}}, + {"hw.byteorder", []_C_int{6, 4}}, + {"hw.cpuspeed", []_C_int{6, 12}}, + {"hw.diskcount", []_C_int{6, 10}}, + {"hw.disknames", []_C_int{6, 8}}, + {"hw.diskstats", []_C_int{6, 9}}, + {"hw.machine", []_C_int{6, 1}}, + {"hw.model", []_C_int{6, 2}}, + {"hw.ncpu", []_C_int{6, 3}}, + {"hw.ncpufound", []_C_int{6, 21}}, + {"hw.ncpuonline", []_C_int{6, 25}}, + {"hw.pagesize", []_C_int{6, 7}}, + {"hw.physmem", []_C_int{6, 19}}, + {"hw.product", []_C_int{6, 15}}, + {"hw.serialno", []_C_int{6, 17}}, + {"hw.setperf", []_C_int{6, 13}}, + {"hw.usermem", []_C_int{6, 20}}, + {"hw.uuid", []_C_int{6, 18}}, + {"hw.vendor", []_C_int{6, 14}}, + {"hw.version", []_C_int{6, 16}}, + {"kern.arandom", []_C_int{1, 37}}, + {"kern.argmax", []_C_int{1, 8}}, + {"kern.boottime", []_C_int{1, 21}}, + {"kern.bufcachepercent", []_C_int{1, 72}}, + {"kern.ccpu", []_C_int{1, 45}}, + {"kern.clockrate", []_C_int{1, 12}}, + {"kern.consdev", []_C_int{1, 75}}, + {"kern.cp_time", []_C_int{1, 40}}, + {"kern.cp_time2", []_C_int{1, 71}}, + {"kern.cryptodevallowsoft", []_C_int{1, 53}}, + {"kern.domainname", []_C_int{1, 22}}, + {"kern.file", []_C_int{1, 73}}, + {"kern.forkstat", []_C_int{1, 42}}, + {"kern.fscale", []_C_int{1, 46}}, + {"kern.fsync", []_C_int{1, 33}}, + {"kern.hostid", []_C_int{1, 11}}, + {"kern.hostname", []_C_int{1, 10}}, + {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}}, + {"kern.job_control", []_C_int{1, 19}}, + {"kern.malloc.buckets", []_C_int{1, 39, 1}}, + {"kern.malloc.kmemnames", []_C_int{1, 39, 3}}, + {"kern.maxclusters", []_C_int{1, 67}}, + {"kern.maxfiles", []_C_int{1, 7}}, + {"kern.maxlocksperuid", []_C_int{1, 70}}, + {"kern.maxpartitions", []_C_int{1, 23}}, + {"kern.maxproc", []_C_int{1, 6}}, + {"kern.maxthread", []_C_int{1, 25}}, + {"kern.maxvnodes", []_C_int{1, 5}}, + {"kern.mbstat", []_C_int{1, 59}}, + {"kern.msgbuf", []_C_int{1, 48}}, + {"kern.msgbufsize", []_C_int{1, 38}}, + {"kern.nchstats", []_C_int{1, 41}}, + {"kern.netlivelocks", []_C_int{1, 76}}, + {"kern.nfiles", []_C_int{1, 56}}, + {"kern.ngroups", []_C_int{1, 18}}, + {"kern.nosuidcoredump", []_C_int{1, 32}}, + {"kern.nprocs", []_C_int{1, 47}}, + {"kern.nselcoll", []_C_int{1, 43}}, + {"kern.nthreads", []_C_int{1, 26}}, + {"kern.numvnodes", []_C_int{1, 58}}, + {"kern.osrelease", []_C_int{1, 2}}, + {"kern.osrevision", []_C_int{1, 3}}, + {"kern.ostype", []_C_int{1, 1}}, + {"kern.osversion", []_C_int{1, 27}}, + {"kern.pool_debug", []_C_int{1, 77}}, + {"kern.posix1version", []_C_int{1, 17}}, + {"kern.proc", []_C_int{1, 66}}, + {"kern.random", []_C_int{1, 31}}, + {"kern.rawpartition", []_C_int{1, 24}}, + {"kern.saved_ids", []_C_int{1, 20}}, + {"kern.securelevel", []_C_int{1, 9}}, + {"kern.seminfo", []_C_int{1, 61}}, + {"kern.shminfo", []_C_int{1, 62}}, + {"kern.somaxconn", []_C_int{1, 28}}, + {"kern.sominconn", []_C_int{1, 29}}, + {"kern.splassert", []_C_int{1, 54}}, + {"kern.stackgap_random", []_C_int{1, 50}}, + {"kern.sysvipc_info", []_C_int{1, 51}}, + {"kern.sysvmsg", []_C_int{1, 34}}, + {"kern.sysvsem", []_C_int{1, 35}}, + {"kern.sysvshm", []_C_int{1, 36}}, + {"kern.timecounter.choice", []_C_int{1, 69, 4}}, + {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, + {"kern.timecounter.tick", []_C_int{1, 69, 1}}, + {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, + {"kern.tty.maxptys", []_C_int{1, 44, 6}}, + {"kern.tty.nptys", []_C_int{1, 44, 7}}, + {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, + {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, + {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, + {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, + {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, + {"kern.ttycount", []_C_int{1, 57}}, + {"kern.userasymcrypto", []_C_int{1, 60}}, + {"kern.usercrypto", []_C_int{1, 52}}, + {"kern.usermount", []_C_int{1, 30}}, + {"kern.version", []_C_int{1, 4}}, + {"kern.vnode", []_C_int{1, 13}}, + {"kern.watchdog.auto", []_C_int{1, 64, 2}}, + {"kern.watchdog.period", []_C_int{1, 64, 1}}, + {"net.bpf.bufsize", []_C_int{4, 31, 1}}, + {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, + {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}}, + {"net.inet.ah.stats", []_C_int{4, 2, 51, 2}}, + {"net.inet.carp.allow", []_C_int{4, 2, 112, 1}}, + {"net.inet.carp.log", []_C_int{4, 2, 112, 3}}, + {"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}}, + {"net.inet.carp.stats", []_C_int{4, 2, 112, 4}}, + {"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}}, + {"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}}, + {"net.inet.divert.stats", []_C_int{4, 2, 258, 3}}, + {"net.inet.esp.enable", []_C_int{4, 2, 50, 1}}, + {"net.inet.esp.stats", []_C_int{4, 2, 50, 4}}, + {"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}}, + {"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}}, + {"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}}, + {"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}}, + {"net.inet.gre.allow", []_C_int{4, 2, 47, 1}}, + {"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}}, + {"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}}, + {"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}}, + {"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}}, + {"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}}, + {"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}}, + {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}}, + {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}}, + {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}}, + {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}}, + {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}}, + {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}}, + {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}}, + {"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}}, + {"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}}, + {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}}, + {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}}, + {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}}, + {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}}, + {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}}, + {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}}, + {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}}, + {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}}, + {"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}}, + {"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}}, + {"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}}, + {"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}}, + {"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}}, + {"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}}, + {"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}}, + {"net.inet.ip.stats", []_C_int{4, 2, 0, 33}}, + {"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}}, + {"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}}, + {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, + {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, + {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, + {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}}, + {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, + {"net.inet.pim.stats", []_C_int{4, 2, 103, 1}}, + {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, + {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, + {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}}, + {"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}}, + {"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}}, + {"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}}, + {"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}}, + {"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}}, + {"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}}, + {"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}}, + {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}}, + {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}}, + {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}}, + {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}}, + {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}}, + {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}}, + {"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}}, + {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}}, + {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}}, + {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}}, + {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}}, + {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}}, + {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}}, + {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}}, + {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}}, + {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}}, + {"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}}, + {"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}}, + {"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}}, + {"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}}, + {"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}}, + {"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}}, + {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}}, + {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}}, + {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}}, + {"net.inet6.icmp6.nd6_prune", []_C_int{4, 24, 30, 6}}, + {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}}, + {"net.inet6.icmp6.nd6_useloopback", []_C_int{4, 24, 30, 11}}, + {"net.inet6.icmp6.nodeinfo", []_C_int{4, 24, 30, 13}}, + {"net.inet6.icmp6.rediraccept", []_C_int{4, 24, 30, 2}}, + {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}}, + {"net.inet6.ip6.accept_rtadv", []_C_int{4, 24, 17, 12}}, + {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}}, + {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}}, + {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}}, + {"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}}, + {"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}}, + {"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}}, + {"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}}, + {"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}}, + {"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}}, + {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}}, + {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}}, + {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}}, + {"net.inet6.ip6.maxifdefrouters", []_C_int{4, 24, 17, 47}}, + {"net.inet6.ip6.maxifprefixes", []_C_int{4, 24, 17, 46}}, + {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}}, + {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}}, + {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}}, + {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}}, + {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}}, + {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}}, + {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}}, + {"net.inet6.ip6.rr_prune", []_C_int{4, 24, 17, 22}}, + {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}}, + {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}}, + {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}}, + {"net.inet6.ip6.v6only", []_C_int{4, 24, 17, 24}}, + {"net.key.sadb_dump", []_C_int{4, 30, 1}}, + {"net.key.spd_dump", []_C_int{4, 30, 2}}, + {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}}, + {"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}}, + {"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}}, + {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, + {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, + {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, + {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}}, + {"net.mpls.ttl", []_C_int{4, 33, 2}}, + {"net.pflow.stats", []_C_int{4, 34, 1}}, + {"net.pipex.enable", []_C_int{4, 35, 1}}, + {"vm.anonmin", []_C_int{2, 7}}, + {"vm.loadavg", []_C_int{2, 2}}, + {"vm.maxslp", []_C_int{2, 10}}, + {"vm.nkmempages", []_C_int{2, 6}}, + {"vm.psstrings", []_C_int{2, 3}}, + {"vm.swapencrypt.enable", []_C_int{2, 5, 0}}, + {"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}}, + {"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}}, + {"vm.uspace", []_C_int{2, 11}}, + {"vm.uvmexp", []_C_int{2, 4}}, + {"vm.vmmeter", []_C_int{2, 1}}, + {"vm.vnodemin", []_C_int{2, 9}}, + {"vm.vtextmin", []_C_int{2, 8}}, +} diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go new file mode 100644 index 0000000..154b57a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go @@ -0,0 +1,276 @@ +// go run mksysctl_openbsd.go +// Code generated by the command above; DO NOT EDIT. + +//go:build arm64 && openbsd +// +build arm64,openbsd + +package unix + +type mibentry struct { + ctlname string + ctloid []_C_int +} + +var sysctlMib = []mibentry{ + {"ddb.console", []_C_int{9, 6}}, + {"ddb.log", []_C_int{9, 7}}, + {"ddb.max_line", []_C_int{9, 3}}, + {"ddb.max_width", []_C_int{9, 2}}, + {"ddb.panic", []_C_int{9, 5}}, + {"ddb.profile", []_C_int{9, 9}}, + {"ddb.radix", []_C_int{9, 1}}, + {"ddb.tab_stop_width", []_C_int{9, 4}}, + {"ddb.trigger", []_C_int{9, 8}}, + {"fs.posix.setuid", []_C_int{3, 1, 1}}, + {"hw.allowpowerdown", []_C_int{6, 22}}, + {"hw.byteorder", []_C_int{6, 4}}, + {"hw.cpuspeed", []_C_int{6, 12}}, + {"hw.diskcount", []_C_int{6, 10}}, + {"hw.disknames", []_C_int{6, 8}}, + {"hw.diskstats", []_C_int{6, 9}}, + {"hw.machine", []_C_int{6, 1}}, + {"hw.model", []_C_int{6, 2}}, + {"hw.ncpu", []_C_int{6, 3}}, + {"hw.ncpufound", []_C_int{6, 21}}, + {"hw.ncpuonline", []_C_int{6, 25}}, + {"hw.pagesize", []_C_int{6, 7}}, + {"hw.perfpolicy", []_C_int{6, 23}}, + {"hw.physmem", []_C_int{6, 19}}, + {"hw.product", []_C_int{6, 15}}, + {"hw.serialno", []_C_int{6, 17}}, + {"hw.setperf", []_C_int{6, 13}}, + {"hw.smt", []_C_int{6, 24}}, + {"hw.usermem", []_C_int{6, 20}}, + {"hw.uuid", []_C_int{6, 18}}, + {"hw.vendor", []_C_int{6, 14}}, + {"hw.version", []_C_int{6, 16}}, + {"kern.allowkmem", []_C_int{1, 52}}, + {"kern.argmax", []_C_int{1, 8}}, + {"kern.audio", []_C_int{1, 84}}, + {"kern.boottime", []_C_int{1, 21}}, + {"kern.bufcachepercent", []_C_int{1, 72}}, + {"kern.ccpu", []_C_int{1, 45}}, + {"kern.clockrate", []_C_int{1, 12}}, + {"kern.consdev", []_C_int{1, 75}}, + {"kern.cp_time", []_C_int{1, 40}}, + {"kern.cp_time2", []_C_int{1, 71}}, + {"kern.cpustats", []_C_int{1, 85}}, + {"kern.domainname", []_C_int{1, 22}}, + {"kern.file", []_C_int{1, 73}}, + {"kern.forkstat", []_C_int{1, 42}}, + {"kern.fscale", []_C_int{1, 46}}, + {"kern.fsync", []_C_int{1, 33}}, + {"kern.global_ptrace", []_C_int{1, 81}}, + {"kern.hostid", []_C_int{1, 11}}, + {"kern.hostname", []_C_int{1, 10}}, + {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}}, + {"kern.job_control", []_C_int{1, 19}}, + {"kern.malloc.buckets", []_C_int{1, 39, 1}}, + {"kern.malloc.kmemnames", []_C_int{1, 39, 3}}, + {"kern.maxclusters", []_C_int{1, 67}}, + {"kern.maxfiles", []_C_int{1, 7}}, + {"kern.maxlocksperuid", []_C_int{1, 70}}, + {"kern.maxpartitions", []_C_int{1, 23}}, + {"kern.maxproc", []_C_int{1, 6}}, + {"kern.maxthread", []_C_int{1, 25}}, + {"kern.maxvnodes", []_C_int{1, 5}}, + {"kern.mbstat", []_C_int{1, 59}}, + {"kern.msgbuf", []_C_int{1, 48}}, + {"kern.msgbufsize", []_C_int{1, 38}}, + {"kern.nchstats", []_C_int{1, 41}}, + {"kern.netlivelocks", []_C_int{1, 76}}, + {"kern.nfiles", []_C_int{1, 56}}, + {"kern.ngroups", []_C_int{1, 18}}, + {"kern.nosuidcoredump", []_C_int{1, 32}}, + {"kern.nprocs", []_C_int{1, 47}}, + {"kern.nselcoll", []_C_int{1, 43}}, + {"kern.nthreads", []_C_int{1, 26}}, + {"kern.numvnodes", []_C_int{1, 58}}, + {"kern.osrelease", []_C_int{1, 2}}, + {"kern.osrevision", []_C_int{1, 3}}, + {"kern.ostype", []_C_int{1, 1}}, + {"kern.osversion", []_C_int{1, 27}}, + {"kern.pool_debug", []_C_int{1, 77}}, + {"kern.posix1version", []_C_int{1, 17}}, + {"kern.proc", []_C_int{1, 66}}, + {"kern.rawpartition", []_C_int{1, 24}}, + {"kern.saved_ids", []_C_int{1, 20}}, + {"kern.securelevel", []_C_int{1, 9}}, + {"kern.seminfo", []_C_int{1, 61}}, + {"kern.shminfo", []_C_int{1, 62}}, + {"kern.somaxconn", []_C_int{1, 28}}, + {"kern.sominconn", []_C_int{1, 29}}, + {"kern.splassert", []_C_int{1, 54}}, + {"kern.stackgap_random", []_C_int{1, 50}}, + {"kern.sysvipc_info", []_C_int{1, 51}}, + {"kern.sysvmsg", []_C_int{1, 34}}, + {"kern.sysvsem", []_C_int{1, 35}}, + {"kern.sysvshm", []_C_int{1, 36}}, + {"kern.timecounter.choice", []_C_int{1, 69, 4}}, + {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, + {"kern.timecounter.tick", []_C_int{1, 69, 1}}, + {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, + {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, + {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, + {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, + {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, + {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, + {"kern.ttycount", []_C_int{1, 57}}, + {"kern.version", []_C_int{1, 4}}, + {"kern.watchdog.auto", []_C_int{1, 64, 2}}, + {"kern.watchdog.period", []_C_int{1, 64, 1}}, + {"kern.witnesswatch", []_C_int{1, 53}}, + {"kern.wxabort", []_C_int{1, 74}}, + {"net.bpf.bufsize", []_C_int{4, 31, 1}}, + {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, + {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}}, + {"net.inet.ah.stats", []_C_int{4, 2, 51, 2}}, + {"net.inet.carp.allow", []_C_int{4, 2, 112, 1}}, + {"net.inet.carp.log", []_C_int{4, 2, 112, 3}}, + {"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}}, + {"net.inet.carp.stats", []_C_int{4, 2, 112, 4}}, + {"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}}, + {"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}}, + {"net.inet.divert.stats", []_C_int{4, 2, 258, 3}}, + {"net.inet.esp.enable", []_C_int{4, 2, 50, 1}}, + {"net.inet.esp.stats", []_C_int{4, 2, 50, 4}}, + {"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}}, + {"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}}, + {"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}}, + {"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}}, + {"net.inet.gre.allow", []_C_int{4, 2, 47, 1}}, + {"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}}, + {"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}}, + {"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}}, + {"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}}, + {"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}}, + {"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}}, + {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}}, + {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}}, + {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}}, + {"net.inet.ip.arpdown", []_C_int{4, 2, 0, 40}}, + {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}}, + {"net.inet.ip.arptimeout", []_C_int{4, 2, 0, 39}}, + {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}}, + {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}}, + {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}}, + {"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}}, + {"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}}, + {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}}, + {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}}, + {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}}, + {"net.inet.ip.mrtmfc", []_C_int{4, 2, 0, 37}}, + {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}}, + {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}}, + {"net.inet.ip.mrtvif", []_C_int{4, 2, 0, 38}}, + {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}}, + {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}}, + {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}}, + {"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}}, + {"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}}, + {"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}}, + {"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}}, + {"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}}, + {"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}}, + {"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}}, + {"net.inet.ip.stats", []_C_int{4, 2, 0, 33}}, + {"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}}, + {"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}}, + {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, + {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, + {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, + {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}}, + {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, + {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, + {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, + {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}}, + {"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}}, + {"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}}, + {"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}}, + {"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}}, + {"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}}, + {"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}}, + {"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}}, + {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}}, + {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}}, + {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}}, + {"net.inet.tcp.rootonly", []_C_int{4, 2, 6, 24}}, + {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}}, + {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}}, + {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}}, + {"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}}, + {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}}, + {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}}, + {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}}, + {"net.inet.tcp.synhashsize", []_C_int{4, 2, 6, 25}}, + {"net.inet.tcp.synuselimit", []_C_int{4, 2, 6, 23}}, + {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}}, + {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}}, + {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}}, + {"net.inet.udp.rootonly", []_C_int{4, 2, 17, 6}}, + {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}}, + {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}}, + {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}}, + {"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}}, + {"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}}, + {"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}}, + {"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}}, + {"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}}, + {"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}}, + {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}}, + {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}}, + {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}}, + {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}}, + {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}}, + {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}}, + {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}}, + {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}}, + {"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}}, + {"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}}, + {"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}}, + {"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}}, + {"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}}, + {"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}}, + {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}}, + {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}}, + {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}}, + {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}}, + {"net.inet6.ip6.mrtmfc", []_C_int{4, 24, 17, 53}}, + {"net.inet6.ip6.mrtmif", []_C_int{4, 24, 17, 52}}, + {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}}, + {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}}, + {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}}, + {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}}, + {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}}, + {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}}, + {"net.inet6.ip6.soiikey", []_C_int{4, 24, 17, 54}}, + {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}}, + {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}}, + {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}}, + {"net.key.sadb_dump", []_C_int{4, 30, 1}}, + {"net.key.spd_dump", []_C_int{4, 30, 2}}, + {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}}, + {"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}}, + {"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}}, + {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, + {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, + {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, + {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}}, + {"net.mpls.ttl", []_C_int{4, 33, 2}}, + {"net.pflow.stats", []_C_int{4, 34, 1}}, + {"net.pipex.enable", []_C_int{4, 35, 1}}, + {"vm.anonmin", []_C_int{2, 7}}, + {"vm.loadavg", []_C_int{2, 2}}, + {"vm.malloc_conf", []_C_int{2, 12}}, + {"vm.maxslp", []_C_int{2, 10}}, + {"vm.nkmempages", []_C_int{2, 6}}, + {"vm.psstrings", []_C_int{2, 3}}, + {"vm.swapencrypt.enable", []_C_int{2, 5, 0}}, + {"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}}, + {"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}}, + {"vm.uspace", []_C_int{2, 11}}, + {"vm.uvmexp", []_C_int{2, 4}}, + {"vm.vmmeter", []_C_int{2, 1}}, + {"vm.vnodemin", []_C_int{2, 9}}, + {"vm.vtextmin", []_C_int{2, 8}}, +} diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go new file mode 100644 index 0000000..d96bb2b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go @@ -0,0 +1,280 @@ +// go run mksysctl_openbsd.go +// Code generated by the command above; DO NOT EDIT. + +//go:build mips64 && openbsd +// +build mips64,openbsd + +package unix + +type mibentry struct { + ctlname string + ctloid []_C_int +} + +var sysctlMib = []mibentry{ + {"ddb.console", []_C_int{9, 6}}, + {"ddb.log", []_C_int{9, 7}}, + {"ddb.max_line", []_C_int{9, 3}}, + {"ddb.max_width", []_C_int{9, 2}}, + {"ddb.panic", []_C_int{9, 5}}, + {"ddb.profile", []_C_int{9, 9}}, + {"ddb.radix", []_C_int{9, 1}}, + {"ddb.tab_stop_width", []_C_int{9, 4}}, + {"ddb.trigger", []_C_int{9, 8}}, + {"fs.posix.setuid", []_C_int{3, 1, 1}}, + {"hw.allowpowerdown", []_C_int{6, 22}}, + {"hw.byteorder", []_C_int{6, 4}}, + {"hw.cpuspeed", []_C_int{6, 12}}, + {"hw.diskcount", []_C_int{6, 10}}, + {"hw.disknames", []_C_int{6, 8}}, + {"hw.diskstats", []_C_int{6, 9}}, + {"hw.machine", []_C_int{6, 1}}, + {"hw.model", []_C_int{6, 2}}, + {"hw.ncpu", []_C_int{6, 3}}, + {"hw.ncpufound", []_C_int{6, 21}}, + {"hw.ncpuonline", []_C_int{6, 25}}, + {"hw.pagesize", []_C_int{6, 7}}, + {"hw.perfpolicy", []_C_int{6, 23}}, + {"hw.physmem", []_C_int{6, 19}}, + {"hw.product", []_C_int{6, 15}}, + {"hw.serialno", []_C_int{6, 17}}, + {"hw.setperf", []_C_int{6, 13}}, + {"hw.smt", []_C_int{6, 24}}, + {"hw.usermem", []_C_int{6, 20}}, + {"hw.uuid", []_C_int{6, 18}}, + {"hw.vendor", []_C_int{6, 14}}, + {"hw.version", []_C_int{6, 16}}, + {"kern.allowdt", []_C_int{1, 65}}, + {"kern.allowkmem", []_C_int{1, 52}}, + {"kern.argmax", []_C_int{1, 8}}, + {"kern.audio", []_C_int{1, 84}}, + {"kern.boottime", []_C_int{1, 21}}, + {"kern.bufcachepercent", []_C_int{1, 72}}, + {"kern.ccpu", []_C_int{1, 45}}, + {"kern.clockrate", []_C_int{1, 12}}, + {"kern.consbuf", []_C_int{1, 83}}, + {"kern.consbufsize", []_C_int{1, 82}}, + {"kern.consdev", []_C_int{1, 75}}, + {"kern.cp_time", []_C_int{1, 40}}, + {"kern.cp_time2", []_C_int{1, 71}}, + {"kern.cpustats", []_C_int{1, 85}}, + {"kern.domainname", []_C_int{1, 22}}, + {"kern.file", []_C_int{1, 73}}, + {"kern.forkstat", []_C_int{1, 42}}, + {"kern.fscale", []_C_int{1, 46}}, + {"kern.fsync", []_C_int{1, 33}}, + {"kern.global_ptrace", []_C_int{1, 81}}, + {"kern.hostid", []_C_int{1, 11}}, + {"kern.hostname", []_C_int{1, 10}}, + {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}}, + {"kern.job_control", []_C_int{1, 19}}, + {"kern.malloc.buckets", []_C_int{1, 39, 1}}, + {"kern.malloc.kmemnames", []_C_int{1, 39, 3}}, + {"kern.maxclusters", []_C_int{1, 67}}, + {"kern.maxfiles", []_C_int{1, 7}}, + {"kern.maxlocksperuid", []_C_int{1, 70}}, + {"kern.maxpartitions", []_C_int{1, 23}}, + {"kern.maxproc", []_C_int{1, 6}}, + {"kern.maxthread", []_C_int{1, 25}}, + {"kern.maxvnodes", []_C_int{1, 5}}, + {"kern.mbstat", []_C_int{1, 59}}, + {"kern.msgbuf", []_C_int{1, 48}}, + {"kern.msgbufsize", []_C_int{1, 38}}, + {"kern.nchstats", []_C_int{1, 41}}, + {"kern.netlivelocks", []_C_int{1, 76}}, + {"kern.nfiles", []_C_int{1, 56}}, + {"kern.ngroups", []_C_int{1, 18}}, + {"kern.nosuidcoredump", []_C_int{1, 32}}, + {"kern.nprocs", []_C_int{1, 47}}, + {"kern.nselcoll", []_C_int{1, 43}}, + {"kern.nthreads", []_C_int{1, 26}}, + {"kern.numvnodes", []_C_int{1, 58}}, + {"kern.osrelease", []_C_int{1, 2}}, + {"kern.osrevision", []_C_int{1, 3}}, + {"kern.ostype", []_C_int{1, 1}}, + {"kern.osversion", []_C_int{1, 27}}, + {"kern.pfstatus", []_C_int{1, 86}}, + {"kern.pool_debug", []_C_int{1, 77}}, + {"kern.posix1version", []_C_int{1, 17}}, + {"kern.proc", []_C_int{1, 66}}, + {"kern.rawpartition", []_C_int{1, 24}}, + {"kern.saved_ids", []_C_int{1, 20}}, + {"kern.securelevel", []_C_int{1, 9}}, + {"kern.seminfo", []_C_int{1, 61}}, + {"kern.shminfo", []_C_int{1, 62}}, + {"kern.somaxconn", []_C_int{1, 28}}, + {"kern.sominconn", []_C_int{1, 29}}, + {"kern.splassert", []_C_int{1, 54}}, + {"kern.stackgap_random", []_C_int{1, 50}}, + {"kern.sysvipc_info", []_C_int{1, 51}}, + {"kern.sysvmsg", []_C_int{1, 34}}, + {"kern.sysvsem", []_C_int{1, 35}}, + {"kern.sysvshm", []_C_int{1, 36}}, + {"kern.timecounter.choice", []_C_int{1, 69, 4}}, + {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, + {"kern.timecounter.tick", []_C_int{1, 69, 1}}, + {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, + {"kern.timeout_stats", []_C_int{1, 87}}, + {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, + {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, + {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, + {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, + {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, + {"kern.ttycount", []_C_int{1, 57}}, + {"kern.utc_offset", []_C_int{1, 88}}, + {"kern.version", []_C_int{1, 4}}, + {"kern.watchdog.auto", []_C_int{1, 64, 2}}, + {"kern.watchdog.period", []_C_int{1, 64, 1}}, + {"kern.witnesswatch", []_C_int{1, 53}}, + {"kern.wxabort", []_C_int{1, 74}}, + {"net.bpf.bufsize", []_C_int{4, 31, 1}}, + {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, + {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}}, + {"net.inet.ah.stats", []_C_int{4, 2, 51, 2}}, + {"net.inet.carp.allow", []_C_int{4, 2, 112, 1}}, + {"net.inet.carp.log", []_C_int{4, 2, 112, 3}}, + {"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}}, + {"net.inet.carp.stats", []_C_int{4, 2, 112, 4}}, + {"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}}, + {"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}}, + {"net.inet.divert.stats", []_C_int{4, 2, 258, 3}}, + {"net.inet.esp.enable", []_C_int{4, 2, 50, 1}}, + {"net.inet.esp.stats", []_C_int{4, 2, 50, 4}}, + {"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}}, + {"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}}, + {"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}}, + {"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}}, + {"net.inet.gre.allow", []_C_int{4, 2, 47, 1}}, + {"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}}, + {"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}}, + {"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}}, + {"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}}, + {"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}}, + {"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}}, + {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}}, + {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}}, + {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}}, + {"net.inet.ip.arpdown", []_C_int{4, 2, 0, 40}}, + {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}}, + {"net.inet.ip.arptimeout", []_C_int{4, 2, 0, 39}}, + {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}}, + {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}}, + {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}}, + {"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}}, + {"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}}, + {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}}, + {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}}, + {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}}, + {"net.inet.ip.mrtmfc", []_C_int{4, 2, 0, 37}}, + {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}}, + {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}}, + {"net.inet.ip.mrtvif", []_C_int{4, 2, 0, 38}}, + {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}}, + {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}}, + {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}}, + {"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}}, + {"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}}, + {"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}}, + {"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}}, + {"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}}, + {"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}}, + {"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}}, + {"net.inet.ip.stats", []_C_int{4, 2, 0, 33}}, + {"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}}, + {"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}}, + {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, + {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, + {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, + {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, + {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, + {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, + {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}}, + {"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}}, + {"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}}, + {"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}}, + {"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}}, + {"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}}, + {"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}}, + {"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}}, + {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}}, + {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}}, + {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}}, + {"net.inet.tcp.rootonly", []_C_int{4, 2, 6, 24}}, + {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}}, + {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}}, + {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}}, + {"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}}, + {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}}, + {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}}, + {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}}, + {"net.inet.tcp.synhashsize", []_C_int{4, 2, 6, 25}}, + {"net.inet.tcp.synuselimit", []_C_int{4, 2, 6, 23}}, + {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}}, + {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}}, + {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}}, + {"net.inet.udp.rootonly", []_C_int{4, 2, 17, 6}}, + {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}}, + {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}}, + {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}}, + {"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}}, + {"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}}, + {"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}}, + {"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}}, + {"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}}, + {"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}}, + {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}}, + {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}}, + {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}}, + {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}}, + {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}}, + {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}}, + {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}}, + {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}}, + {"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}}, + {"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}}, + {"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}}, + {"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}}, + {"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}}, + {"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}}, + {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}}, + {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}}, + {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}}, + {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}}, + {"net.inet6.ip6.mrtmfc", []_C_int{4, 24, 17, 53}}, + {"net.inet6.ip6.mrtmif", []_C_int{4, 24, 17, 52}}, + {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}}, + {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}}, + {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}}, + {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}}, + {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}}, + {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}}, + {"net.inet6.ip6.soiikey", []_C_int{4, 24, 17, 54}}, + {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}}, + {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}}, + {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}}, + {"net.key.sadb_dump", []_C_int{4, 30, 1}}, + {"net.key.spd_dump", []_C_int{4, 30, 2}}, + {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}}, + {"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}}, + {"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}}, + {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, + {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, + {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, + {"net.mpls.ttl", []_C_int{4, 33, 2}}, + {"net.pflow.stats", []_C_int{4, 34, 1}}, + {"net.pipex.enable", []_C_int{4, 35, 1}}, + {"vm.anonmin", []_C_int{2, 7}}, + {"vm.loadavg", []_C_int{2, 2}}, + {"vm.malloc_conf", []_C_int{2, 12}}, + {"vm.maxslp", []_C_int{2, 10}}, + {"vm.nkmempages", []_C_int{2, 6}}, + {"vm.psstrings", []_C_int{2, 3}}, + {"vm.swapencrypt.enable", []_C_int{2, 5, 0}}, + {"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}}, + {"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}}, + {"vm.uspace", []_C_int{2, 11}}, + {"vm.uvmexp", []_C_int{2, 4}}, + {"vm.vmmeter", []_C_int{2, 1}}, + {"vm.vnodemin", []_C_int{2, 9}}, + {"vm.vtextmin", []_C_int{2, 8}}, +} diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go new file mode 100644 index 0000000..f8298ff --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go @@ -0,0 +1,440 @@ +// go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/sys/syscall.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build amd64 && darwin +// +build amd64,darwin + +package unix + +// Deprecated: Use libSystem wrappers instead of direct syscalls. +const ( + SYS_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAIT4 = 7 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_CHDIR = 12 + SYS_FCHDIR = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_CHOWN = 16 + SYS_GETFSSTAT = 18 + SYS_GETPID = 20 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_GETEUID = 25 + SYS_PTRACE = 26 + SYS_RECVMSG = 27 + SYS_SENDMSG = 28 + SYS_RECVFROM = 29 + SYS_ACCEPT = 30 + SYS_GETPEERNAME = 31 + SYS_GETSOCKNAME = 32 + SYS_ACCESS = 33 + SYS_CHFLAGS = 34 + SYS_FCHFLAGS = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_GETPPID = 39 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_GETEGID = 43 + SYS_SIGACTION = 46 + SYS_GETGID = 47 + SYS_SIGPROCMASK = 48 + SYS_GETLOGIN = 49 + SYS_SETLOGIN = 50 + SYS_ACCT = 51 + SYS_SIGPENDING = 52 + SYS_SIGALTSTACK = 53 + SYS_IOCTL = 54 + SYS_REBOOT = 55 + SYS_REVOKE = 56 + SYS_SYMLINK = 57 + SYS_READLINK = 58 + SYS_EXECVE = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_MSYNC = 65 + SYS_VFORK = 66 + SYS_MUNMAP = 73 + SYS_MPROTECT = 74 + SYS_MADVISE = 75 + SYS_MINCORE = 78 + SYS_GETGROUPS = 79 + SYS_SETGROUPS = 80 + SYS_GETPGRP = 81 + SYS_SETPGID = 82 + SYS_SETITIMER = 83 + SYS_SWAPON = 85 + SYS_GETITIMER = 86 + SYS_GETDTABLESIZE = 89 + SYS_DUP2 = 90 + SYS_FCNTL = 92 + SYS_SELECT = 93 + SYS_FSYNC = 95 + SYS_SETPRIORITY = 96 + SYS_SOCKET = 97 + SYS_CONNECT = 98 + SYS_GETPRIORITY = 100 + SYS_BIND = 104 + SYS_SETSOCKOPT = 105 + SYS_LISTEN = 106 + SYS_SIGSUSPEND = 111 + SYS_GETTIMEOFDAY = 116 + SYS_GETRUSAGE = 117 + SYS_GETSOCKOPT = 118 + SYS_READV = 120 + SYS_WRITEV = 121 + SYS_SETTIMEOFDAY = 122 + SYS_FCHOWN = 123 + SYS_FCHMOD = 124 + SYS_SETREUID = 126 + SYS_SETREGID = 127 + SYS_RENAME = 128 + SYS_FLOCK = 131 + SYS_MKFIFO = 132 + SYS_SENDTO = 133 + SYS_SHUTDOWN = 134 + SYS_SOCKETPAIR = 135 + SYS_MKDIR = 136 + SYS_RMDIR = 137 + SYS_UTIMES = 138 + SYS_FUTIMES = 139 + SYS_ADJTIME = 140 + SYS_GETHOSTUUID = 142 + SYS_SETSID = 147 + SYS_GETPGID = 151 + SYS_SETPRIVEXEC = 152 + SYS_PREAD = 153 + SYS_PWRITE = 154 + SYS_NFSSVC = 155 + SYS_STATFS = 157 + SYS_FSTATFS = 158 + SYS_UNMOUNT = 159 + SYS_GETFH = 161 + SYS_QUOTACTL = 165 + SYS_MOUNT = 167 + SYS_CSOPS = 169 + SYS_CSOPS_AUDITTOKEN = 170 + SYS_WAITID = 173 + SYS_KDEBUG_TYPEFILTER = 177 + SYS_KDEBUG_TRACE_STRING = 178 + SYS_KDEBUG_TRACE64 = 179 + SYS_KDEBUG_TRACE = 180 + SYS_SETGID = 181 + SYS_SETEGID = 182 + SYS_SETEUID = 183 + SYS_SIGRETURN = 184 + SYS_THREAD_SELFCOUNTS = 186 + SYS_FDATASYNC = 187 + SYS_STAT = 188 + SYS_FSTAT = 189 + SYS_LSTAT = 190 + SYS_PATHCONF = 191 + SYS_FPATHCONF = 192 + SYS_GETRLIMIT = 194 + SYS_SETRLIMIT = 195 + SYS_GETDIRENTRIES = 196 + SYS_MMAP = 197 + SYS_LSEEK = 199 + SYS_TRUNCATE = 200 + SYS_FTRUNCATE = 201 + SYS_SYSCTL = 202 + SYS_MLOCK = 203 + SYS_MUNLOCK = 204 + SYS_UNDELETE = 205 + SYS_OPEN_DPROTECTED_NP = 216 + SYS_GETATTRLIST = 220 + SYS_SETATTRLIST = 221 + SYS_GETDIRENTRIESATTR = 222 + SYS_EXCHANGEDATA = 223 + SYS_SEARCHFS = 225 + SYS_DELETE = 226 + SYS_COPYFILE = 227 + SYS_FGETATTRLIST = 228 + SYS_FSETATTRLIST = 229 + SYS_POLL = 230 + SYS_WATCHEVENT = 231 + SYS_WAITEVENT = 232 + SYS_MODWATCH = 233 + SYS_GETXATTR = 234 + SYS_FGETXATTR = 235 + SYS_SETXATTR = 236 + SYS_FSETXATTR = 237 + SYS_REMOVEXATTR = 238 + SYS_FREMOVEXATTR = 239 + SYS_LISTXATTR = 240 + SYS_FLISTXATTR = 241 + SYS_FSCTL = 242 + SYS_INITGROUPS = 243 + SYS_POSIX_SPAWN = 244 + SYS_FFSCTL = 245 + SYS_NFSCLNT = 247 + SYS_FHOPEN = 248 + SYS_MINHERIT = 250 + SYS_SEMSYS = 251 + SYS_MSGSYS = 252 + SYS_SHMSYS = 253 + SYS_SEMCTL = 254 + SYS_SEMGET = 255 + SYS_SEMOP = 256 + SYS_MSGCTL = 258 + SYS_MSGGET = 259 + SYS_MSGSND = 260 + SYS_MSGRCV = 261 + SYS_SHMAT = 262 + SYS_SHMCTL = 263 + SYS_SHMDT = 264 + SYS_SHMGET = 265 + SYS_SHM_OPEN = 266 + SYS_SHM_UNLINK = 267 + SYS_SEM_OPEN = 268 + SYS_SEM_CLOSE = 269 + SYS_SEM_UNLINK = 270 + SYS_SEM_WAIT = 271 + SYS_SEM_TRYWAIT = 272 + SYS_SEM_POST = 273 + SYS_SYSCTLBYNAME = 274 + SYS_OPEN_EXTENDED = 277 + SYS_UMASK_EXTENDED = 278 + SYS_STAT_EXTENDED = 279 + SYS_LSTAT_EXTENDED = 280 + SYS_FSTAT_EXTENDED = 281 + SYS_CHMOD_EXTENDED = 282 + SYS_FCHMOD_EXTENDED = 283 + SYS_ACCESS_EXTENDED = 284 + SYS_SETTID = 285 + SYS_GETTID = 286 + SYS_SETSGROUPS = 287 + SYS_GETSGROUPS = 288 + SYS_SETWGROUPS = 289 + SYS_GETWGROUPS = 290 + SYS_MKFIFO_EXTENDED = 291 + SYS_MKDIR_EXTENDED = 292 + SYS_IDENTITYSVC = 293 + SYS_SHARED_REGION_CHECK_NP = 294 + SYS_VM_PRESSURE_MONITOR = 296 + SYS_PSYNCH_RW_LONGRDLOCK = 297 + SYS_PSYNCH_RW_YIELDWRLOCK = 298 + SYS_PSYNCH_RW_DOWNGRADE = 299 + SYS_PSYNCH_RW_UPGRADE = 300 + SYS_PSYNCH_MUTEXWAIT = 301 + SYS_PSYNCH_MUTEXDROP = 302 + SYS_PSYNCH_CVBROAD = 303 + SYS_PSYNCH_CVSIGNAL = 304 + SYS_PSYNCH_CVWAIT = 305 + SYS_PSYNCH_RW_RDLOCK = 306 + SYS_PSYNCH_RW_WRLOCK = 307 + SYS_PSYNCH_RW_UNLOCK = 308 + SYS_PSYNCH_RW_UNLOCK2 = 309 + SYS_GETSID = 310 + SYS_SETTID_WITH_PID = 311 + SYS_PSYNCH_CVCLRPREPOST = 312 + SYS_AIO_FSYNC = 313 + SYS_AIO_RETURN = 314 + SYS_AIO_SUSPEND = 315 + SYS_AIO_CANCEL = 316 + SYS_AIO_ERROR = 317 + SYS_AIO_READ = 318 + SYS_AIO_WRITE = 319 + SYS_LIO_LISTIO = 320 + SYS_IOPOLICYSYS = 322 + SYS_PROCESS_POLICY = 323 + SYS_MLOCKALL = 324 + SYS_MUNLOCKALL = 325 + SYS_ISSETUGID = 327 + SYS___PTHREAD_KILL = 328 + SYS___PTHREAD_SIGMASK = 329 + SYS___SIGWAIT = 330 + SYS___DISABLE_THREADSIGNAL = 331 + SYS___PTHREAD_MARKCANCEL = 332 + SYS___PTHREAD_CANCELED = 333 + SYS___SEMWAIT_SIGNAL = 334 + SYS_PROC_INFO = 336 + SYS_SENDFILE = 337 + SYS_STAT64 = 338 + SYS_FSTAT64 = 339 + SYS_LSTAT64 = 340 + SYS_STAT64_EXTENDED = 341 + SYS_LSTAT64_EXTENDED = 342 + SYS_FSTAT64_EXTENDED = 343 + SYS_GETDIRENTRIES64 = 344 + SYS_STATFS64 = 345 + SYS_FSTATFS64 = 346 + SYS_GETFSSTAT64 = 347 + SYS___PTHREAD_CHDIR = 348 + SYS___PTHREAD_FCHDIR = 349 + SYS_AUDIT = 350 + SYS_AUDITON = 351 + SYS_GETAUID = 353 + SYS_SETAUID = 354 + SYS_GETAUDIT_ADDR = 357 + SYS_SETAUDIT_ADDR = 358 + SYS_AUDITCTL = 359 + SYS_BSDTHREAD_CREATE = 360 + SYS_BSDTHREAD_TERMINATE = 361 + SYS_KQUEUE = 362 + SYS_KEVENT = 363 + SYS_LCHOWN = 364 + SYS_BSDTHREAD_REGISTER = 366 + SYS_WORKQ_OPEN = 367 + SYS_WORKQ_KERNRETURN = 368 + SYS_KEVENT64 = 369 + SYS___OLD_SEMWAIT_SIGNAL = 370 + SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 + SYS_THREAD_SELFID = 372 + SYS_LEDGER = 373 + SYS_KEVENT_QOS = 374 + SYS_KEVENT_ID = 375 + SYS___MAC_EXECVE = 380 + SYS___MAC_SYSCALL = 381 + SYS___MAC_GET_FILE = 382 + SYS___MAC_SET_FILE = 383 + SYS___MAC_GET_LINK = 384 + SYS___MAC_SET_LINK = 385 + SYS___MAC_GET_PROC = 386 + SYS___MAC_SET_PROC = 387 + SYS___MAC_GET_FD = 388 + SYS___MAC_SET_FD = 389 + SYS___MAC_GET_PID = 390 + SYS_PSELECT = 394 + SYS_PSELECT_NOCANCEL = 395 + SYS_READ_NOCANCEL = 396 + SYS_WRITE_NOCANCEL = 397 + SYS_OPEN_NOCANCEL = 398 + SYS_CLOSE_NOCANCEL = 399 + SYS_WAIT4_NOCANCEL = 400 + SYS_RECVMSG_NOCANCEL = 401 + SYS_SENDMSG_NOCANCEL = 402 + SYS_RECVFROM_NOCANCEL = 403 + SYS_ACCEPT_NOCANCEL = 404 + SYS_MSYNC_NOCANCEL = 405 + SYS_FCNTL_NOCANCEL = 406 + SYS_SELECT_NOCANCEL = 407 + SYS_FSYNC_NOCANCEL = 408 + SYS_CONNECT_NOCANCEL = 409 + SYS_SIGSUSPEND_NOCANCEL = 410 + SYS_READV_NOCANCEL = 411 + SYS_WRITEV_NOCANCEL = 412 + SYS_SENDTO_NOCANCEL = 413 + SYS_PREAD_NOCANCEL = 414 + SYS_PWRITE_NOCANCEL = 415 + SYS_WAITID_NOCANCEL = 416 + SYS_POLL_NOCANCEL = 417 + SYS_MSGSND_NOCANCEL = 418 + SYS_MSGRCV_NOCANCEL = 419 + SYS_SEM_WAIT_NOCANCEL = 420 + SYS_AIO_SUSPEND_NOCANCEL = 421 + SYS___SIGWAIT_NOCANCEL = 422 + SYS___SEMWAIT_SIGNAL_NOCANCEL = 423 + SYS___MAC_MOUNT = 424 + SYS___MAC_GET_MOUNT = 425 + SYS___MAC_GETFSSTAT = 426 + SYS_FSGETPATH = 427 + SYS_AUDIT_SESSION_SELF = 428 + SYS_AUDIT_SESSION_JOIN = 429 + SYS_FILEPORT_MAKEPORT = 430 + SYS_FILEPORT_MAKEFD = 431 + SYS_AUDIT_SESSION_PORT = 432 + SYS_PID_SUSPEND = 433 + SYS_PID_RESUME = 434 + SYS_PID_HIBERNATE = 435 + SYS_PID_SHUTDOWN_SOCKETS = 436 + SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438 + SYS_KAS_INFO = 439 + SYS_MEMORYSTATUS_CONTROL = 440 + SYS_GUARDED_OPEN_NP = 441 + SYS_GUARDED_CLOSE_NP = 442 + SYS_GUARDED_KQUEUE_NP = 443 + SYS_CHANGE_FDGUARD_NP = 444 + SYS_USRCTL = 445 + SYS_PROC_RLIMIT_CONTROL = 446 + SYS_CONNECTX = 447 + SYS_DISCONNECTX = 448 + SYS_PEELOFF = 449 + SYS_SOCKET_DELEGATE = 450 + SYS_TELEMETRY = 451 + SYS_PROC_UUID_POLICY = 452 + SYS_MEMORYSTATUS_GET_LEVEL = 453 + SYS_SYSTEM_OVERRIDE = 454 + SYS_VFS_PURGE = 455 + SYS_SFI_CTL = 456 + SYS_SFI_PIDCTL = 457 + SYS_COALITION = 458 + SYS_COALITION_INFO = 459 + SYS_NECP_MATCH_POLICY = 460 + SYS_GETATTRLISTBULK = 461 + SYS_CLONEFILEAT = 462 + SYS_OPENAT = 463 + SYS_OPENAT_NOCANCEL = 464 + SYS_RENAMEAT = 465 + SYS_FACCESSAT = 466 + SYS_FCHMODAT = 467 + SYS_FCHOWNAT = 468 + SYS_FSTATAT = 469 + SYS_FSTATAT64 = 470 + SYS_LINKAT = 471 + SYS_UNLINKAT = 472 + SYS_READLINKAT = 473 + SYS_SYMLINKAT = 474 + SYS_MKDIRAT = 475 + SYS_GETATTRLISTAT = 476 + SYS_PROC_TRACE_LOG = 477 + SYS_BSDTHREAD_CTL = 478 + SYS_OPENBYID_NP = 479 + SYS_RECVMSG_X = 480 + SYS_SENDMSG_X = 481 + SYS_THREAD_SELFUSAGE = 482 + SYS_CSRCTL = 483 + SYS_GUARDED_OPEN_DPROTECTED_NP = 484 + SYS_GUARDED_WRITE_NP = 485 + SYS_GUARDED_PWRITE_NP = 486 + SYS_GUARDED_WRITEV_NP = 487 + SYS_RENAMEATX_NP = 488 + SYS_MREMAP_ENCRYPTED = 489 + SYS_NETAGENT_TRIGGER = 490 + SYS_STACK_SNAPSHOT_WITH_CONFIG = 491 + SYS_MICROSTACKSHOT = 492 + SYS_GRAB_PGO_DATA = 493 + SYS_PERSONA = 494 + SYS_WORK_INTERVAL_CTL = 499 + SYS_GETENTROPY = 500 + SYS_NECP_OPEN = 501 + SYS_NECP_CLIENT_ACTION = 502 + SYS___NEXUS_OPEN = 503 + SYS___NEXUS_REGISTER = 504 + SYS___NEXUS_DEREGISTER = 505 + SYS___NEXUS_CREATE = 506 + SYS___NEXUS_DESTROY = 507 + SYS___NEXUS_GET_OPT = 508 + SYS___NEXUS_SET_OPT = 509 + SYS___CHANNEL_OPEN = 510 + SYS___CHANNEL_GET_INFO = 511 + SYS___CHANNEL_SYNC = 512 + SYS___CHANNEL_GET_OPT = 513 + SYS___CHANNEL_SET_OPT = 514 + SYS_ULOCK_WAIT = 515 + SYS_ULOCK_WAKE = 516 + SYS_FCLONEFILEAT = 517 + SYS_FS_SNAPSHOT = 518 + SYS_TERMINATE_WITH_PAYLOAD = 520 + SYS_ABORT_WITH_PAYLOAD = 521 + SYS_NECP_SESSION_OPEN = 522 + SYS_NECP_SESSION_ACTION = 523 + SYS_SETATTRLISTAT = 524 + SYS_NET_QOS_GUIDELINE = 525 + SYS_FMOUNT = 526 + SYS_NTP_ADJTIME = 527 + SYS_NTP_GETTIME = 528 + SYS_OS_FAULT_WITH_PAYLOAD = 529 + SYS_KQUEUE_WORKLOOP_CTL = 530 + SYS___MACH_BRIDGE_REMOTE_TIME = 531 + SYS_MAXSYSCALL = 532 + SYS_INVALID = 63 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go new file mode 100644 index 0000000..5eb433b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go @@ -0,0 +1,438 @@ +// go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.1.sdk/usr/include/sys/syscall.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm64 && darwin +// +build arm64,darwin + +package unix + +// Deprecated: Use libSystem wrappers instead of direct syscalls. +const ( + SYS_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAIT4 = 7 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_CHDIR = 12 + SYS_FCHDIR = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_CHOWN = 16 + SYS_GETFSSTAT = 18 + SYS_GETPID = 20 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_GETEUID = 25 + SYS_PTRACE = 26 + SYS_RECVMSG = 27 + SYS_SENDMSG = 28 + SYS_RECVFROM = 29 + SYS_ACCEPT = 30 + SYS_GETPEERNAME = 31 + SYS_GETSOCKNAME = 32 + SYS_ACCESS = 33 + SYS_CHFLAGS = 34 + SYS_FCHFLAGS = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_GETPPID = 39 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_GETEGID = 43 + SYS_SIGACTION = 46 + SYS_GETGID = 47 + SYS_SIGPROCMASK = 48 + SYS_GETLOGIN = 49 + SYS_SETLOGIN = 50 + SYS_ACCT = 51 + SYS_SIGPENDING = 52 + SYS_SIGALTSTACK = 53 + SYS_IOCTL = 54 + SYS_REBOOT = 55 + SYS_REVOKE = 56 + SYS_SYMLINK = 57 + SYS_READLINK = 58 + SYS_EXECVE = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_MSYNC = 65 + SYS_VFORK = 66 + SYS_MUNMAP = 73 + SYS_MPROTECT = 74 + SYS_MADVISE = 75 + SYS_MINCORE = 78 + SYS_GETGROUPS = 79 + SYS_SETGROUPS = 80 + SYS_GETPGRP = 81 + SYS_SETPGID = 82 + SYS_SETITIMER = 83 + SYS_SWAPON = 85 + SYS_GETITIMER = 86 + SYS_GETDTABLESIZE = 89 + SYS_DUP2 = 90 + SYS_FCNTL = 92 + SYS_SELECT = 93 + SYS_FSYNC = 95 + SYS_SETPRIORITY = 96 + SYS_SOCKET = 97 + SYS_CONNECT = 98 + SYS_GETPRIORITY = 100 + SYS_BIND = 104 + SYS_SETSOCKOPT = 105 + SYS_LISTEN = 106 + SYS_SIGSUSPEND = 111 + SYS_GETTIMEOFDAY = 116 + SYS_GETRUSAGE = 117 + SYS_GETSOCKOPT = 118 + SYS_READV = 120 + SYS_WRITEV = 121 + SYS_SETTIMEOFDAY = 122 + SYS_FCHOWN = 123 + SYS_FCHMOD = 124 + SYS_SETREUID = 126 + SYS_SETREGID = 127 + SYS_RENAME = 128 + SYS_FLOCK = 131 + SYS_MKFIFO = 132 + SYS_SENDTO = 133 + SYS_SHUTDOWN = 134 + SYS_SOCKETPAIR = 135 + SYS_MKDIR = 136 + SYS_RMDIR = 137 + SYS_UTIMES = 138 + SYS_FUTIMES = 139 + SYS_ADJTIME = 140 + SYS_GETHOSTUUID = 142 + SYS_SETSID = 147 + SYS_GETPGID = 151 + SYS_SETPRIVEXEC = 152 + SYS_PREAD = 153 + SYS_PWRITE = 154 + SYS_NFSSVC = 155 + SYS_STATFS = 157 + SYS_FSTATFS = 158 + SYS_UNMOUNT = 159 + SYS_GETFH = 161 + SYS_QUOTACTL = 165 + SYS_MOUNT = 167 + SYS_CSOPS = 169 + SYS_CSOPS_AUDITTOKEN = 170 + SYS_WAITID = 173 + SYS_KDEBUG_TYPEFILTER = 177 + SYS_KDEBUG_TRACE_STRING = 178 + SYS_KDEBUG_TRACE64 = 179 + SYS_KDEBUG_TRACE = 180 + SYS_SETGID = 181 + SYS_SETEGID = 182 + SYS_SETEUID = 183 + SYS_SIGRETURN = 184 + SYS_THREAD_SELFCOUNTS = 186 + SYS_FDATASYNC = 187 + SYS_STAT = 188 + SYS_FSTAT = 189 + SYS_LSTAT = 190 + SYS_PATHCONF = 191 + SYS_FPATHCONF = 192 + SYS_GETRLIMIT = 194 + SYS_SETRLIMIT = 195 + SYS_GETDIRENTRIES = 196 + SYS_MMAP = 197 + SYS_LSEEK = 199 + SYS_TRUNCATE = 200 + SYS_FTRUNCATE = 201 + SYS_SYSCTL = 202 + SYS_MLOCK = 203 + SYS_MUNLOCK = 204 + SYS_UNDELETE = 205 + SYS_OPEN_DPROTECTED_NP = 216 + SYS_GETATTRLIST = 220 + SYS_SETATTRLIST = 221 + SYS_GETDIRENTRIESATTR = 222 + SYS_EXCHANGEDATA = 223 + SYS_SEARCHFS = 225 + SYS_DELETE = 226 + SYS_COPYFILE = 227 + SYS_FGETATTRLIST = 228 + SYS_FSETATTRLIST = 229 + SYS_POLL = 230 + SYS_WATCHEVENT = 231 + SYS_WAITEVENT = 232 + SYS_MODWATCH = 233 + SYS_GETXATTR = 234 + SYS_FGETXATTR = 235 + SYS_SETXATTR = 236 + SYS_FSETXATTR = 237 + SYS_REMOVEXATTR = 238 + SYS_FREMOVEXATTR = 239 + SYS_LISTXATTR = 240 + SYS_FLISTXATTR = 241 + SYS_FSCTL = 242 + SYS_INITGROUPS = 243 + SYS_POSIX_SPAWN = 244 + SYS_FFSCTL = 245 + SYS_NFSCLNT = 247 + SYS_FHOPEN = 248 + SYS_MINHERIT = 250 + SYS_SEMSYS = 251 + SYS_MSGSYS = 252 + SYS_SHMSYS = 253 + SYS_SEMCTL = 254 + SYS_SEMGET = 255 + SYS_SEMOP = 256 + SYS_MSGCTL = 258 + SYS_MSGGET = 259 + SYS_MSGSND = 260 + SYS_MSGRCV = 261 + SYS_SHMAT = 262 + SYS_SHMCTL = 263 + SYS_SHMDT = 264 + SYS_SHMGET = 265 + SYS_SHM_OPEN = 266 + SYS_SHM_UNLINK = 267 + SYS_SEM_OPEN = 268 + SYS_SEM_CLOSE = 269 + SYS_SEM_UNLINK = 270 + SYS_SEM_WAIT = 271 + SYS_SEM_TRYWAIT = 272 + SYS_SEM_POST = 273 + SYS_SYSCTLBYNAME = 274 + SYS_OPEN_EXTENDED = 277 + SYS_UMASK_EXTENDED = 278 + SYS_STAT_EXTENDED = 279 + SYS_LSTAT_EXTENDED = 280 + SYS_FSTAT_EXTENDED = 281 + SYS_CHMOD_EXTENDED = 282 + SYS_FCHMOD_EXTENDED = 283 + SYS_ACCESS_EXTENDED = 284 + SYS_SETTID = 285 + SYS_GETTID = 286 + SYS_SETSGROUPS = 287 + SYS_GETSGROUPS = 288 + SYS_SETWGROUPS = 289 + SYS_GETWGROUPS = 290 + SYS_MKFIFO_EXTENDED = 291 + SYS_MKDIR_EXTENDED = 292 + SYS_IDENTITYSVC = 293 + SYS_SHARED_REGION_CHECK_NP = 294 + SYS_VM_PRESSURE_MONITOR = 296 + SYS_PSYNCH_RW_LONGRDLOCK = 297 + SYS_PSYNCH_RW_YIELDWRLOCK = 298 + SYS_PSYNCH_RW_DOWNGRADE = 299 + SYS_PSYNCH_RW_UPGRADE = 300 + SYS_PSYNCH_MUTEXWAIT = 301 + SYS_PSYNCH_MUTEXDROP = 302 + SYS_PSYNCH_CVBROAD = 303 + SYS_PSYNCH_CVSIGNAL = 304 + SYS_PSYNCH_CVWAIT = 305 + SYS_PSYNCH_RW_RDLOCK = 306 + SYS_PSYNCH_RW_WRLOCK = 307 + SYS_PSYNCH_RW_UNLOCK = 308 + SYS_PSYNCH_RW_UNLOCK2 = 309 + SYS_GETSID = 310 + SYS_SETTID_WITH_PID = 311 + SYS_PSYNCH_CVCLRPREPOST = 312 + SYS_AIO_FSYNC = 313 + SYS_AIO_RETURN = 314 + SYS_AIO_SUSPEND = 315 + SYS_AIO_CANCEL = 316 + SYS_AIO_ERROR = 317 + SYS_AIO_READ = 318 + SYS_AIO_WRITE = 319 + SYS_LIO_LISTIO = 320 + SYS_IOPOLICYSYS = 322 + SYS_PROCESS_POLICY = 323 + SYS_MLOCKALL = 324 + SYS_MUNLOCKALL = 325 + SYS_ISSETUGID = 327 + SYS___PTHREAD_KILL = 328 + SYS___PTHREAD_SIGMASK = 329 + SYS___SIGWAIT = 330 + SYS___DISABLE_THREADSIGNAL = 331 + SYS___PTHREAD_MARKCANCEL = 332 + SYS___PTHREAD_CANCELED = 333 + SYS___SEMWAIT_SIGNAL = 334 + SYS_PROC_INFO = 336 + SYS_SENDFILE = 337 + SYS_STAT64 = 338 + SYS_FSTAT64 = 339 + SYS_LSTAT64 = 340 + SYS_STAT64_EXTENDED = 341 + SYS_LSTAT64_EXTENDED = 342 + SYS_FSTAT64_EXTENDED = 343 + SYS_GETDIRENTRIES64 = 344 + SYS_STATFS64 = 345 + SYS_FSTATFS64 = 346 + SYS_GETFSSTAT64 = 347 + SYS___PTHREAD_CHDIR = 348 + SYS___PTHREAD_FCHDIR = 349 + SYS_AUDIT = 350 + SYS_AUDITON = 351 + SYS_GETAUID = 353 + SYS_SETAUID = 354 + SYS_GETAUDIT_ADDR = 357 + SYS_SETAUDIT_ADDR = 358 + SYS_AUDITCTL = 359 + SYS_BSDTHREAD_CREATE = 360 + SYS_BSDTHREAD_TERMINATE = 361 + SYS_KQUEUE = 362 + SYS_KEVENT = 363 + SYS_LCHOWN = 364 + SYS_BSDTHREAD_REGISTER = 366 + SYS_WORKQ_OPEN = 367 + SYS_WORKQ_KERNRETURN = 368 + SYS_KEVENT64 = 369 + SYS___OLD_SEMWAIT_SIGNAL = 370 + SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 + SYS_THREAD_SELFID = 372 + SYS_LEDGER = 373 + SYS_KEVENT_QOS = 374 + SYS_KEVENT_ID = 375 + SYS___MAC_EXECVE = 380 + SYS___MAC_SYSCALL = 381 + SYS___MAC_GET_FILE = 382 + SYS___MAC_SET_FILE = 383 + SYS___MAC_GET_LINK = 384 + SYS___MAC_SET_LINK = 385 + SYS___MAC_GET_PROC = 386 + SYS___MAC_SET_PROC = 387 + SYS___MAC_GET_FD = 388 + SYS___MAC_SET_FD = 389 + SYS___MAC_GET_PID = 390 + SYS_PSELECT = 394 + SYS_PSELECT_NOCANCEL = 395 + SYS_READ_NOCANCEL = 396 + SYS_WRITE_NOCANCEL = 397 + SYS_OPEN_NOCANCEL = 398 + SYS_CLOSE_NOCANCEL = 399 + SYS_WAIT4_NOCANCEL = 400 + SYS_RECVMSG_NOCANCEL = 401 + SYS_SENDMSG_NOCANCEL = 402 + SYS_RECVFROM_NOCANCEL = 403 + SYS_ACCEPT_NOCANCEL = 404 + SYS_MSYNC_NOCANCEL = 405 + SYS_FCNTL_NOCANCEL = 406 + SYS_SELECT_NOCANCEL = 407 + SYS_FSYNC_NOCANCEL = 408 + SYS_CONNECT_NOCANCEL = 409 + SYS_SIGSUSPEND_NOCANCEL = 410 + SYS_READV_NOCANCEL = 411 + SYS_WRITEV_NOCANCEL = 412 + SYS_SENDTO_NOCANCEL = 413 + SYS_PREAD_NOCANCEL = 414 + SYS_PWRITE_NOCANCEL = 415 + SYS_WAITID_NOCANCEL = 416 + SYS_POLL_NOCANCEL = 417 + SYS_MSGSND_NOCANCEL = 418 + SYS_MSGRCV_NOCANCEL = 419 + SYS_SEM_WAIT_NOCANCEL = 420 + SYS_AIO_SUSPEND_NOCANCEL = 421 + SYS___SIGWAIT_NOCANCEL = 422 + SYS___SEMWAIT_SIGNAL_NOCANCEL = 423 + SYS___MAC_MOUNT = 424 + SYS___MAC_GET_MOUNT = 425 + SYS___MAC_GETFSSTAT = 426 + SYS_FSGETPATH = 427 + SYS_AUDIT_SESSION_SELF = 428 + SYS_AUDIT_SESSION_JOIN = 429 + SYS_FILEPORT_MAKEPORT = 430 + SYS_FILEPORT_MAKEFD = 431 + SYS_AUDIT_SESSION_PORT = 432 + SYS_PID_SUSPEND = 433 + SYS_PID_RESUME = 434 + SYS_PID_HIBERNATE = 435 + SYS_PID_SHUTDOWN_SOCKETS = 436 + SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438 + SYS_KAS_INFO = 439 + SYS_MEMORYSTATUS_CONTROL = 440 + SYS_GUARDED_OPEN_NP = 441 + SYS_GUARDED_CLOSE_NP = 442 + SYS_GUARDED_KQUEUE_NP = 443 + SYS_CHANGE_FDGUARD_NP = 444 + SYS_USRCTL = 445 + SYS_PROC_RLIMIT_CONTROL = 446 + SYS_CONNECTX = 447 + SYS_DISCONNECTX = 448 + SYS_PEELOFF = 449 + SYS_SOCKET_DELEGATE = 450 + SYS_TELEMETRY = 451 + SYS_PROC_UUID_POLICY = 452 + SYS_MEMORYSTATUS_GET_LEVEL = 453 + SYS_SYSTEM_OVERRIDE = 454 + SYS_VFS_PURGE = 455 + SYS_SFI_CTL = 456 + SYS_SFI_PIDCTL = 457 + SYS_COALITION = 458 + SYS_COALITION_INFO = 459 + SYS_NECP_MATCH_POLICY = 460 + SYS_GETATTRLISTBULK = 461 + SYS_CLONEFILEAT = 462 + SYS_OPENAT = 463 + SYS_OPENAT_NOCANCEL = 464 + SYS_RENAMEAT = 465 + SYS_FACCESSAT = 466 + SYS_FCHMODAT = 467 + SYS_FCHOWNAT = 468 + SYS_FSTATAT = 469 + SYS_FSTATAT64 = 470 + SYS_LINKAT = 471 + SYS_UNLINKAT = 472 + SYS_READLINKAT = 473 + SYS_SYMLINKAT = 474 + SYS_MKDIRAT = 475 + SYS_GETATTRLISTAT = 476 + SYS_PROC_TRACE_LOG = 477 + SYS_BSDTHREAD_CTL = 478 + SYS_OPENBYID_NP = 479 + SYS_RECVMSG_X = 480 + SYS_SENDMSG_X = 481 + SYS_THREAD_SELFUSAGE = 482 + SYS_CSRCTL = 483 + SYS_GUARDED_OPEN_DPROTECTED_NP = 484 + SYS_GUARDED_WRITE_NP = 485 + SYS_GUARDED_PWRITE_NP = 486 + SYS_GUARDED_WRITEV_NP = 487 + SYS_RENAMEATX_NP = 488 + SYS_MREMAP_ENCRYPTED = 489 + SYS_NETAGENT_TRIGGER = 490 + SYS_STACK_SNAPSHOT_WITH_CONFIG = 491 + SYS_MICROSTACKSHOT = 492 + SYS_GRAB_PGO_DATA = 493 + SYS_PERSONA = 494 + SYS_WORK_INTERVAL_CTL = 499 + SYS_GETENTROPY = 500 + SYS_NECP_OPEN = 501 + SYS_NECP_CLIENT_ACTION = 502 + SYS___NEXUS_OPEN = 503 + SYS___NEXUS_REGISTER = 504 + SYS___NEXUS_DEREGISTER = 505 + SYS___NEXUS_CREATE = 506 + SYS___NEXUS_DESTROY = 507 + SYS___NEXUS_GET_OPT = 508 + SYS___NEXUS_SET_OPT = 509 + SYS___CHANNEL_OPEN = 510 + SYS___CHANNEL_GET_INFO = 511 + SYS___CHANNEL_SYNC = 512 + SYS___CHANNEL_GET_OPT = 513 + SYS___CHANNEL_SET_OPT = 514 + SYS_ULOCK_WAIT = 515 + SYS_ULOCK_WAKE = 516 + SYS_FCLONEFILEAT = 517 + SYS_FS_SNAPSHOT = 518 + SYS_TERMINATE_WITH_PAYLOAD = 520 + SYS_ABORT_WITH_PAYLOAD = 521 + SYS_NECP_SESSION_OPEN = 522 + SYS_NECP_SESSION_ACTION = 523 + SYS_SETATTRLISTAT = 524 + SYS_NET_QOS_GUIDELINE = 525 + SYS_FMOUNT = 526 + SYS_NTP_ADJTIME = 527 + SYS_NTP_GETTIME = 528 + SYS_OS_FAULT_WITH_PAYLOAD = 529 + SYS_MAXSYSCALL = 530 + SYS_INVALID = 63 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go new file mode 100644 index 0000000..703675c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go @@ -0,0 +1,317 @@ +// go run mksysnum.go https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build amd64 && dragonfly +// +build amd64,dragonfly + +package unix + +const ( + SYS_EXIT = 1 // { void exit(int rval); } + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); } wait4 wait_args int + // SYS_NOSYS = 8; // { int nosys(void); } __nosys nosys_args int + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int + SYS_GETFSSTAT = 18 // { int getfsstat(struct statfs *buf, long bufsize, int flags); } + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); } + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, int data); } + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { int sendmsg(int s, caddr_t msg, int flags); } + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, int flags, caddr_t from, int *fromlenaddr); } + SYS_ACCEPT = 30 // { int accept(int s, caddr_t name, int *anamelen); } + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, caddr_t asa, int *alen); } + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, caddr_t asa, int *alen); } + SYS_ACCESS = 33 // { int access(char *path, int flags); } + SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, u_long offset, u_int scale); } + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); } + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, size_t namelen); } + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); } + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); } + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { int readlink(char *path, char *buf, int count); } + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); } + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args int + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); } + SYS_VFORK = 66 // { pid_t vfork(void); } + SYS_SBRK = 69 // { caddr_t sbrk(size_t incr); } + SYS_SSTK = 70 // { int sstk(size_t incr); } + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); } + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); } + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); } + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(int from, int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); } + SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); } + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); } + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); } + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); } + SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); } + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); } + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); } + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); } + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); } + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); } + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); } + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); } + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); } + SYS_STATFS = 157 // { int statfs(char *path, struct statfs *buf); } + SYS_FSTATFS = 158 // { int fstatfs(int fd, struct statfs *buf); } + SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); } + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); } + SYS_EXTPREAD = 173 // { ssize_t extpread(int fd, void *buf, size_t nbyte, int flags, off_t offset); } + SYS_EXTPWRITE = 174 // { ssize_t extpwrite(int fd, const void *buf, size_t nbyte, int flags, off_t offset); } + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int + SYS_MMAP = 197 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, int pad, off_t pos); } + SYS_LSEEK = 199 // { off_t lseek(int fd, int pad, off_t offset, int whence); } + SYS_TRUNCATE = 200 // { int truncate(char *path, int pad, off_t length); } + SYS_FTRUNCATE = 201 // { int ftruncate(int fd, int pad, off_t length); } + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS___SEMCTL = 220 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); } + SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, u_int nsops); } + SYS_MSGCTL = 224 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { caddr_t shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMCTL = 229 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); } + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); } + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); } + SYS_EXTPREADV = 289 // { ssize_t extpreadv(int fd, const struct iovec *iovp, int iovcnt, int flags, off_t offset); } + SYS_EXTPWRITEV = 290 // { ssize_t extpwritev(int fd, const struct iovec *iovp, int iovcnt, int flags, off_t offset); } + SYS_FHSTATFS = 297 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); } + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat* stat); } + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); } + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); } + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); } + SYS_AIO_RETURN = 314 // { int aio_return(struct aiocb *aiocbp); } + SYS_AIO_SUSPEND = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } + SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); } + SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); } + SYS_AIO_READ = 318 // { int aio_read(struct aiocb *aiocbp); } + SYS_AIO_WRITE = 319 // { int aio_write(struct aiocb *aiocbp); } + SYS_LIO_LISTIO = 320 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); } + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(u_char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); } + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); } + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); } + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); } + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); } + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); } + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGACTION = 342 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); } + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGRETURN = 344 // { int sigreturn(ucontext_t *sigcntxp); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set,siginfo_t *info, const struct timespec *timeout); } + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set,siginfo_t *info); } + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); } + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); } + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, acl_type_t type); } + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); } + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); } + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FILE = 356 // { int extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 357 // { int extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } + SYS_AIO_WAITCOMPLETE = 359 // { int aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); } + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } + SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); } + SYS_LCHFLAGS = 391 // { int lchflags(const char *path, u_long flags); } + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); } + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); } + SYS_VARSYM_SET = 450 // { int varsym_set(int level, const char *name, const char *data); } + SYS_VARSYM_GET = 451 // { int varsym_get(int mask, const char *wild, char *buf, int bufsize); } + SYS_VARSYM_LIST = 452 // { int varsym_list(int level, char *buf, int maxsize, int *marker); } + SYS_EXEC_SYS_REGISTER = 465 // { int exec_sys_register(void *entry); } + SYS_EXEC_SYS_UNREGISTER = 466 // { int exec_sys_unregister(int id); } + SYS_SYS_CHECKPOINT = 467 // { int sys_checkpoint(int type, int fd, pid_t pid, int retval); } + SYS_MOUNTCTL = 468 // { int mountctl(const char *path, int op, int fd, const void *ctl, int ctllen, void *buf, int buflen); } + SYS_UMTX_SLEEP = 469 // { int umtx_sleep(volatile const int *ptr, int value, int timeout); } + SYS_UMTX_WAKEUP = 470 // { int umtx_wakeup(volatile const int *ptr, int count); } + SYS_JAIL_ATTACH = 471 // { int jail_attach(int jid); } + SYS_SET_TLS_AREA = 472 // { int set_tls_area(int which, struct tls_info *info, size_t infosize); } + SYS_GET_TLS_AREA = 473 // { int get_tls_area(int which, struct tls_info *info, size_t infosize); } + SYS_CLOSEFROM = 474 // { int closefrom(int fd); } + SYS_STAT = 475 // { int stat(const char *path, struct stat *ub); } + SYS_FSTAT = 476 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 477 // { int lstat(const char *path, struct stat *ub); } + SYS_FHSTAT = 478 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } + SYS_GETDIRENTRIES = 479 // { int getdirentries(int fd, char *buf, u_int count, long *basep); } + SYS_GETDENTS = 480 // { int getdents(int fd, char *buf, size_t count); } + SYS_USCHED_SET = 481 // { int usched_set(pid_t pid, int cmd, void *data, int bytes); } + SYS_EXTACCEPT = 482 // { int extaccept(int s, int flags, caddr_t name, int *anamelen); } + SYS_EXTCONNECT = 483 // { int extconnect(int s, int flags, caddr_t name, int namelen); } + SYS_MCONTROL = 485 // { int mcontrol(void *addr, size_t len, int behav, off_t value); } + SYS_VMSPACE_CREATE = 486 // { int vmspace_create(void *id, int type, void *data); } + SYS_VMSPACE_DESTROY = 487 // { int vmspace_destroy(void *id); } + SYS_VMSPACE_CTL = 488 // { int vmspace_ctl(void *id, int cmd, struct trapframe *tframe, struct vextframe *vframe); } + SYS_VMSPACE_MMAP = 489 // { int vmspace_mmap(void *id, void *addr, size_t len, int prot, int flags, int fd, off_t offset); } + SYS_VMSPACE_MUNMAP = 490 // { int vmspace_munmap(void *id, void *addr, size_t len); } + SYS_VMSPACE_MCONTROL = 491 // { int vmspace_mcontrol(void *id, void *addr, size_t len, int behav, off_t value); } + SYS_VMSPACE_PREAD = 492 // { ssize_t vmspace_pread(void *id, void *buf, size_t nbyte, int flags, off_t offset); } + SYS_VMSPACE_PWRITE = 493 // { ssize_t vmspace_pwrite(void *id, const void *buf, size_t nbyte, int flags, off_t offset); } + SYS_EXTEXIT = 494 // { void extexit(int how, int status, void *addr); } + SYS_LWP_CREATE = 495 // { int lwp_create(struct lwp_params *params); } + SYS_LWP_GETTID = 496 // { lwpid_t lwp_gettid(void); } + SYS_LWP_KILL = 497 // { int lwp_kill(pid_t pid, lwpid_t tid, int signum); } + SYS_LWP_RTPRIO = 498 // { int lwp_rtprio(int function, pid_t pid, lwpid_t tid, struct rtprio *rtp); } + SYS_PSELECT = 499 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sigmask); } + SYS_STATVFS = 500 // { int statvfs(const char *path, struct statvfs *buf); } + SYS_FSTATVFS = 501 // { int fstatvfs(int fd, struct statvfs *buf); } + SYS_FHSTATVFS = 502 // { int fhstatvfs(const struct fhandle *u_fhp, struct statvfs *buf); } + SYS_GETVFSSTAT = 503 // { int getvfsstat(struct statfs *buf, struct statvfs *vbuf, long vbufsize, int flags); } + SYS_OPENAT = 504 // { int openat(int fd, char *path, int flags, int mode); } + SYS_FSTATAT = 505 // { int fstatat(int fd, char *path, struct stat *sb, int flags); } + SYS_FCHMODAT = 506 // { int fchmodat(int fd, char *path, int mode, int flags); } + SYS_FCHOWNAT = 507 // { int fchownat(int fd, char *path, int uid, int gid, int flags); } + SYS_UNLINKAT = 508 // { int unlinkat(int fd, char *path, int flags); } + SYS_FACCESSAT = 509 // { int faccessat(int fd, char *path, int amode, int flags); } + SYS_MQ_OPEN = 510 // { mqd_t mq_open(const char * name, int oflag, mode_t mode, struct mq_attr *attr); } + SYS_MQ_CLOSE = 511 // { int mq_close(mqd_t mqdes); } + SYS_MQ_UNLINK = 512 // { int mq_unlink(const char *name); } + SYS_MQ_GETATTR = 513 // { int mq_getattr(mqd_t mqdes, struct mq_attr *mqstat); } + SYS_MQ_SETATTR = 514 // { int mq_setattr(mqd_t mqdes, const struct mq_attr *mqstat, struct mq_attr *omqstat); } + SYS_MQ_NOTIFY = 515 // { int mq_notify(mqd_t mqdes, const struct sigevent *notification); } + SYS_MQ_SEND = 516 // { int mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio); } + SYS_MQ_RECEIVE = 517 // { ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio); } + SYS_MQ_TIMEDSEND = 518 // { int mq_timedsend(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); } + SYS_MQ_TIMEDRECEIVE = 519 // { ssize_t mq_timedreceive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); } + SYS_IOPRIO_SET = 520 // { int ioprio_set(int which, int who, int prio); } + SYS_IOPRIO_GET = 521 // { int ioprio_get(int which, int who); } + SYS_CHROOT_KERNEL = 522 // { int chroot_kernel(char *path); } + SYS_RENAMEAT = 523 // { int renameat(int oldfd, char *old, int newfd, char *new); } + SYS_MKDIRAT = 524 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 525 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 526 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); } + SYS_READLINKAT = 527 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); } + SYS_SYMLINKAT = 528 // { int symlinkat(char *path1, int fd, char *path2); } + SYS_SWAPOFF = 529 // { int swapoff(char *name); } + SYS_VQUOTACTL = 530 // { int vquotactl(const char *path, struct plistref *pref); } + SYS_LINKAT = 531 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flags); } + SYS_EACCESS = 532 // { int eaccess(char *path, int flags); } + SYS_LPATHCONF = 533 // { int lpathconf(char *path, int name); } + SYS_VMM_GUEST_CTL = 534 // { int vmm_guest_ctl(int op, struct vmm_guest_options *options); } + SYS_VMM_GUEST_SYNC_ADDR = 535 // { int vmm_guest_sync_addr(long *dstaddr, long *srcaddr); } + SYS_PROCCTL = 536 // { int procctl(idtype_t idtype, id_t id, int cmd, void *data); } + SYS_CHFLAGSAT = 537 // { int chflagsat(int fd, const char *path, u_long flags, int atflags);} + SYS_PIPE2 = 538 // { int pipe2(int *fildes, int flags); } + SYS_UTIMENSAT = 539 // { int utimensat(int fd, const char *path, const struct timespec *ts, int flags); } + SYS_FUTIMENS = 540 // { int futimens(int fd, const struct timespec *ts); } + SYS_ACCEPT4 = 541 // { int accept4(int s, caddr_t name, int *anamelen, int flags); } + SYS_LWP_SETNAME = 542 // { int lwp_setname(lwpid_t tid, const char *name); } + SYS_PPOLL = 543 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *sigmask); } + SYS_LWP_SETAFFINITY = 544 // { int lwp_setaffinity(pid_t pid, lwpid_t tid, const cpumask_t *mask); } + SYS_LWP_GETAFFINITY = 545 // { int lwp_getaffinity(pid_t pid, lwpid_t tid, cpumask_t *mask); } + SYS_LWP_CREATE2 = 546 // { int lwp_create2(struct lwp_params *params, const cpumask_t *mask); } + SYS_GETCPUCLOCKID = 547 // { int getcpuclockid(pid_t pid, lwpid_t lwp_id, clockid_t *clock_id); } + SYS_WAIT6 = 548 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); } + SYS_LWP_GETNAME = 549 // { int lwp_getname(lwpid_t tid, char *name, size_t len); } + SYS_GETRANDOM = 550 // { ssize_t getrandom(void *buf, size_t len, unsigned flags); } + SYS___REALPATH = 551 // { ssize_t __realpath(const char *path, char *buf, size_t len); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go new file mode 100644 index 0000000..59d5dfc --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go @@ -0,0 +1,397 @@ +// go run mksysnum.go https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build 386 && freebsd +// +build 386,freebsd + +package unix + +const ( + // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int + SYS_EXIT = 1 // { void sys_exit(int rval); } exit sys_exit_args void + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); } + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); } + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, int data); } + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); } + SYS_ACCEPT = 30 // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); } + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); } + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); } + SYS_ACCESS = 33 // { int access(char *path, int amode); } + SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(u_int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); } + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); } + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); } + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); } + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); } + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); } + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args int + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); } + SYS_VFORK = 66 // { int vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise ovadvise_args int + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); } + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); } + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); } + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); } + SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); } + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); } + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); } + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); } + SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); } + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); } + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); } + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); } + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); } + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); } + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); } + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); } + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); } + SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); } + SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); } + SYS_LGETFH = 160 // { int lgetfh(char *fname, struct fhandle *fhp); } + SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); } + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); } + SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); } + SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); } + SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, int a4); } + SYS_SETFIB = 175 // { int setfib(int fibnum); } + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } + SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int + SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, u_int count, long *basep); } + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); } + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 233 // { int clock_settime( clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); } + SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } + SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } + SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); } + SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( struct ffclock_estimate *cest); } + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( struct ffclock_estimate *cest); } + SYS_CLOCK_NANOSLEEP = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); } + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,int which, clockid_t *clock_id); } + SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); } + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); } + SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); } + SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); } + SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, size_t count); } + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); } + SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } + SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } + SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } + SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } + SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); } + SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat *stat); } + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); } + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); } + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); } + SYS_AIO_RETURN = 314 // { ssize_t aio_return(struct aiocb *aiocbp); } + SYS_AIO_SUSPEND = 315 // { int aio_suspend( struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } + SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); } + SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); } + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); } + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); } + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); } + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); } + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); } + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); } + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); } + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); } + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); } + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); } + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, acl_type_t type); } + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); } + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); } + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } + SYS_AIO_WAITCOMPLETE = 359 // { ssize_t aio_waitcomplete( struct aiocb **aiocbp, struct timespec *timeout); } + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } + SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } + SYS___SETUGID = 374 // { int __setugid(int flag); } + SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } + SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); } + SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } + SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } + SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); } + SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); } + SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); } + SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); } + SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); } + SYS_LCHFLAGS = 391 // { int lchflags(const char *path, u_long flags); } + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); } + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); } + SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, int call, void *arg); } + SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, long bufsize, int mode); } + SYS_STATFS = 396 // { int statfs(char *path, struct statfs *buf); } + SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } + SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); } + SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); } + SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); } + SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); } + SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, unsigned int value); } + SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); } + SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); } + SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); } + SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); } + SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); } + SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); } + SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); } + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( const char *path, int attrnamespace, const char *attrname); } + SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); } + SYS_SIGACTION = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); } + SYS_SIGRETURN = 417 // { int sigreturn( const struct __ucontext *sigcntxp); } + SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext( const struct __ucontext *ucp); } + SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); } + SYS_SWAPOFF = 424 // { int swapoff(const char *name); } + SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, acl_type_t type); } + SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); } + SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, int *sig); } + SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); } + SYS_THR_EXIT = 431 // { void thr_exit(long *state); } + SYS_THR_SELF = 432 // { int thr_self(long *id); } + SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } + SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } + SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); } + SYS_THR_SUSPEND = 442 // { int thr_suspend( const struct timespec *timeout); } + SYS_THR_WAKE = 443 // { int thr_wake(long id); } + SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } + SYS_AUDIT = 445 // { int audit(const void *record, u_int length); } + SYS_AUDITON = 446 // { int auditon(int cmd, void *data, u_int length); } + SYS_GETAUID = 447 // { int getauid(uid_t *auid); } + SYS_SETAUID = 448 // { int setauid(uid_t *auid); } + SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } + SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); } + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); } + SYS_AUDITCTL = 453 // { int auditctl(char *path); } + SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); } + SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, int param_size); } + SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } + SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); } + SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); } + SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); } + SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len,unsigned msg_prio, const struct timespec *abs_timeout);} + SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); } + SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); } + SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } + SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } + SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); } + SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); } + SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } + SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } + SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } + SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr * from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); } + SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); } + SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); } + SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); } + SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, int whence); } + SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } + SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } + SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } + SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, mode_t mode); } + SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } + SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } + SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); } + SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); } + SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); } + SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); } + SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, int flag); } + SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); } + SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, char **envv); } + SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, struct stat *buf, int flag); } + SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, struct timeval *times); } + SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); } + SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); } + SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, mode_t mode); } + SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); } + SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); } + SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, char *path2); } + SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } + SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } + SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); } + SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); } + SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); } + SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } + SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } + SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); } + SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } + SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); } + SYS_CAP_ENTER = 516 // { int cap_enter(void); } + SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } + SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } + SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } + SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } + SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); } + SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, size_t namelen); } + SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } + SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); } + SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); } + SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); } + SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); } + SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); } + SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); } + SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); } + SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); } + SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); } + SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); } + SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); } + SYS_ACCEPT4 = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); } + SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } + SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); } + SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); } + SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); } + SYS_FUTIMENS = 546 // { int futimens(int fd, struct timespec *times); } + SYS_UTIMENSAT = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); } + SYS_NUMA_GETAFFINITY = 548 // { int numa_getaffinity(cpuwhich_t which, id_t id, struct vm_domain_policy_entry *policy); } + SYS_NUMA_SETAFFINITY = 549 // { int numa_setaffinity(cpuwhich_t which, id_t id, const struct vm_domain_policy_entry *policy); } + SYS_FDATASYNC = 550 // { int fdatasync(int fd); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go new file mode 100644 index 0000000..342d471 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go @@ -0,0 +1,397 @@ +// go run mksysnum.go https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build amd64 && freebsd +// +build amd64,freebsd + +package unix + +const ( + // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int + SYS_EXIT = 1 // { void sys_exit(int rval); } exit sys_exit_args void + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); } + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); } + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, int data); } + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); } + SYS_ACCEPT = 30 // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); } + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); } + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); } + SYS_ACCESS = 33 // { int access(char *path, int amode); } + SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(u_int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); } + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); } + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); } + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); } + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); } + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); } + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args int + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); } + SYS_VFORK = 66 // { int vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise ovadvise_args int + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); } + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); } + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); } + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); } + SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); } + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); } + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); } + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); } + SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); } + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); } + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); } + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); } + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); } + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); } + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); } + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); } + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); } + SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); } + SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); } + SYS_LGETFH = 160 // { int lgetfh(char *fname, struct fhandle *fhp); } + SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); } + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); } + SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); } + SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); } + SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, int a4); } + SYS_SETFIB = 175 // { int setfib(int fibnum); } + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } + SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int + SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, u_int count, long *basep); } + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); } + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 233 // { int clock_settime( clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); } + SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } + SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } + SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); } + SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( struct ffclock_estimate *cest); } + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( struct ffclock_estimate *cest); } + SYS_CLOCK_NANOSLEEP = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); } + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,int which, clockid_t *clock_id); } + SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); } + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); } + SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); } + SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); } + SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, size_t count); } + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); } + SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } + SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } + SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } + SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } + SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); } + SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat *stat); } + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); } + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); } + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); } + SYS_AIO_RETURN = 314 // { ssize_t aio_return(struct aiocb *aiocbp); } + SYS_AIO_SUSPEND = 315 // { int aio_suspend( struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } + SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); } + SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); } + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); } + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); } + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); } + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); } + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); } + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); } + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); } + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); } + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); } + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); } + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, acl_type_t type); } + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); } + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); } + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } + SYS_AIO_WAITCOMPLETE = 359 // { ssize_t aio_waitcomplete( struct aiocb **aiocbp, struct timespec *timeout); } + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } + SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } + SYS___SETUGID = 374 // { int __setugid(int flag); } + SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } + SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); } + SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } + SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } + SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); } + SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); } + SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); } + SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); } + SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); } + SYS_LCHFLAGS = 391 // { int lchflags(const char *path, u_long flags); } + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); } + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); } + SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, int call, void *arg); } + SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, long bufsize, int mode); } + SYS_STATFS = 396 // { int statfs(char *path, struct statfs *buf); } + SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } + SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); } + SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); } + SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); } + SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); } + SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, unsigned int value); } + SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); } + SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); } + SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); } + SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); } + SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); } + SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); } + SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); } + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( const char *path, int attrnamespace, const char *attrname); } + SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); } + SYS_SIGACTION = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); } + SYS_SIGRETURN = 417 // { int sigreturn( const struct __ucontext *sigcntxp); } + SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext( const struct __ucontext *ucp); } + SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); } + SYS_SWAPOFF = 424 // { int swapoff(const char *name); } + SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, acl_type_t type); } + SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); } + SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, int *sig); } + SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); } + SYS_THR_EXIT = 431 // { void thr_exit(long *state); } + SYS_THR_SELF = 432 // { int thr_self(long *id); } + SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } + SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } + SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); } + SYS_THR_SUSPEND = 442 // { int thr_suspend( const struct timespec *timeout); } + SYS_THR_WAKE = 443 // { int thr_wake(long id); } + SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } + SYS_AUDIT = 445 // { int audit(const void *record, u_int length); } + SYS_AUDITON = 446 // { int auditon(int cmd, void *data, u_int length); } + SYS_GETAUID = 447 // { int getauid(uid_t *auid); } + SYS_SETAUID = 448 // { int setauid(uid_t *auid); } + SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } + SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); } + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); } + SYS_AUDITCTL = 453 // { int auditctl(char *path); } + SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); } + SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, int param_size); } + SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } + SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); } + SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); } + SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); } + SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len,unsigned msg_prio, const struct timespec *abs_timeout);} + SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); } + SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); } + SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } + SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } + SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); } + SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); } + SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } + SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } + SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } + SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr * from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); } + SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); } + SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); } + SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); } + SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, int whence); } + SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } + SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } + SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } + SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, mode_t mode); } + SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } + SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } + SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); } + SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); } + SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); } + SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); } + SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, int flag); } + SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); } + SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, char **envv); } + SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, struct stat *buf, int flag); } + SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, struct timeval *times); } + SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); } + SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); } + SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, mode_t mode); } + SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); } + SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); } + SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, char *path2); } + SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } + SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } + SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); } + SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); } + SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); } + SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } + SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } + SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); } + SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } + SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); } + SYS_CAP_ENTER = 516 // { int cap_enter(void); } + SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } + SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } + SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } + SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } + SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); } + SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, size_t namelen); } + SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } + SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); } + SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); } + SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); } + SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); } + SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); } + SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); } + SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); } + SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); } + SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); } + SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); } + SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); } + SYS_ACCEPT4 = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); } + SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } + SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); } + SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); } + SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); } + SYS_FUTIMENS = 546 // { int futimens(int fd, struct timespec *times); } + SYS_UTIMENSAT = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); } + SYS_NUMA_GETAFFINITY = 548 // { int numa_getaffinity(cpuwhich_t which, id_t id, struct vm_domain_policy_entry *policy); } + SYS_NUMA_SETAFFINITY = 549 // { int numa_setaffinity(cpuwhich_t which, id_t id, const struct vm_domain_policy_entry *policy); } + SYS_FDATASYNC = 550 // { int fdatasync(int fd); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go new file mode 100644 index 0000000..e2e3d72 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go @@ -0,0 +1,397 @@ +// go run mksysnum.go https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm && freebsd +// +build arm,freebsd + +package unix + +const ( + // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int + SYS_EXIT = 1 // { void sys_exit(int rval); } exit sys_exit_args void + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); } + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); } + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, int data); } + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); } + SYS_ACCEPT = 30 // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); } + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); } + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); } + SYS_ACCESS = 33 // { int access(char *path, int amode); } + SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(u_int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); } + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); } + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); } + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); } + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); } + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); } + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args int + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); } + SYS_VFORK = 66 // { int vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise ovadvise_args int + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); } + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); } + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); } + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); } + SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); } + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); } + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); } + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); } + SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); } + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); } + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); } + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); } + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); } + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); } + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); } + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); } + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); } + SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); } + SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); } + SYS_LGETFH = 160 // { int lgetfh(char *fname, struct fhandle *fhp); } + SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); } + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); } + SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); } + SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); } + SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, int a4); } + SYS_SETFIB = 175 // { int setfib(int fibnum); } + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } + SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int + SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, u_int count, long *basep); } + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); } + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 233 // { int clock_settime( clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); } + SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } + SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } + SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); } + SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( struct ffclock_estimate *cest); } + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( struct ffclock_estimate *cest); } + SYS_CLOCK_NANOSLEEP = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); } + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,int which, clockid_t *clock_id); } + SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); } + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); } + SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); } + SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); } + SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, size_t count); } + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); } + SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } + SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } + SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } + SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } + SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); } + SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat *stat); } + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); } + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); } + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); } + SYS_AIO_RETURN = 314 // { ssize_t aio_return(struct aiocb *aiocbp); } + SYS_AIO_SUSPEND = 315 // { int aio_suspend( struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } + SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); } + SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); } + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); } + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); } + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); } + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); } + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); } + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); } + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); } + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); } + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); } + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); } + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, acl_type_t type); } + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); } + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); } + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } + SYS_AIO_WAITCOMPLETE = 359 // { ssize_t aio_waitcomplete( struct aiocb **aiocbp, struct timespec *timeout); } + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } + SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } + SYS___SETUGID = 374 // { int __setugid(int flag); } + SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } + SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); } + SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } + SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } + SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); } + SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); } + SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); } + SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); } + SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); } + SYS_LCHFLAGS = 391 // { int lchflags(const char *path, u_long flags); } + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); } + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); } + SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, int call, void *arg); } + SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, long bufsize, int mode); } + SYS_STATFS = 396 // { int statfs(char *path, struct statfs *buf); } + SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } + SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); } + SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); } + SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); } + SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); } + SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, unsigned int value); } + SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); } + SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); } + SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); } + SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); } + SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); } + SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); } + SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); } + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( const char *path, int attrnamespace, const char *attrname); } + SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); } + SYS_SIGACTION = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); } + SYS_SIGRETURN = 417 // { int sigreturn( const struct __ucontext *sigcntxp); } + SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext( const struct __ucontext *ucp); } + SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); } + SYS_SWAPOFF = 424 // { int swapoff(const char *name); } + SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, acl_type_t type); } + SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); } + SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, int *sig); } + SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); } + SYS_THR_EXIT = 431 // { void thr_exit(long *state); } + SYS_THR_SELF = 432 // { int thr_self(long *id); } + SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } + SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } + SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); } + SYS_THR_SUSPEND = 442 // { int thr_suspend( const struct timespec *timeout); } + SYS_THR_WAKE = 443 // { int thr_wake(long id); } + SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } + SYS_AUDIT = 445 // { int audit(const void *record, u_int length); } + SYS_AUDITON = 446 // { int auditon(int cmd, void *data, u_int length); } + SYS_GETAUID = 447 // { int getauid(uid_t *auid); } + SYS_SETAUID = 448 // { int setauid(uid_t *auid); } + SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } + SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); } + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); } + SYS_AUDITCTL = 453 // { int auditctl(char *path); } + SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); } + SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, int param_size); } + SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } + SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); } + SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); } + SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); } + SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len,unsigned msg_prio, const struct timespec *abs_timeout);} + SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); } + SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); } + SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } + SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } + SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); } + SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); } + SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } + SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } + SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } + SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr * from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); } + SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); } + SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); } + SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); } + SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, int whence); } + SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } + SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } + SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } + SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, mode_t mode); } + SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } + SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } + SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); } + SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); } + SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); } + SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); } + SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, int flag); } + SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); } + SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, char **envv); } + SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, struct stat *buf, int flag); } + SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, struct timeval *times); } + SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); } + SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); } + SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, mode_t mode); } + SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); } + SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); } + SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, char *path2); } + SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } + SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } + SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); } + SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); } + SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); } + SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } + SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } + SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); } + SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } + SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); } + SYS_CAP_ENTER = 516 // { int cap_enter(void); } + SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } + SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } + SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } + SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } + SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); } + SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, size_t namelen); } + SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } + SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); } + SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); } + SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); } + SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); } + SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); } + SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); } + SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); } + SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); } + SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); } + SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); } + SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); } + SYS_ACCEPT4 = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); } + SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } + SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); } + SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); } + SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); } + SYS_FUTIMENS = 546 // { int futimens(int fd, struct timespec *times); } + SYS_UTIMENSAT = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); } + SYS_NUMA_GETAFFINITY = 548 // { int numa_getaffinity(cpuwhich_t which, id_t id, struct vm_domain_policy_entry *policy); } + SYS_NUMA_SETAFFINITY = 549 // { int numa_setaffinity(cpuwhich_t which, id_t id, const struct vm_domain_policy_entry *policy); } + SYS_FDATASYNC = 550 // { int fdatasync(int fd); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go new file mode 100644 index 0000000..61ad5ca --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go @@ -0,0 +1,397 @@ +// go run mksysnum.go https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm64 && freebsd +// +build arm64,freebsd + +package unix + +const ( + // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int + SYS_EXIT = 1 // { void sys_exit(int rval); } exit sys_exit_args void + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); } + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); } + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, int data); } + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); } + SYS_ACCEPT = 30 // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); } + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); } + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); } + SYS_ACCESS = 33 // { int access(char *path, int amode); } + SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(u_int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); } + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); } + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); } + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); } + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); } + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); } + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args int + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); } + SYS_VFORK = 66 // { int vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise ovadvise_args int + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); } + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); } + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); } + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); } + SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); } + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); } + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); } + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); } + SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); } + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); } + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); } + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); } + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); } + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); } + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); } + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); } + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); } + SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); } + SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); } + SYS_LGETFH = 160 // { int lgetfh(char *fname, struct fhandle *fhp); } + SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); } + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); } + SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); } + SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); } + SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, int a4); } + SYS_SETFIB = 175 // { int setfib(int fibnum); } + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } + SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int + SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, u_int count, long *basep); } + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); } + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 233 // { int clock_settime( clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); } + SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } + SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } + SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); } + SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( struct ffclock_estimate *cest); } + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( struct ffclock_estimate *cest); } + SYS_CLOCK_NANOSLEEP = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); } + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,int which, clockid_t *clock_id); } + SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); } + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); } + SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); } + SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); } + SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, size_t count); } + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); } + SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } + SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } + SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } + SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } + SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); } + SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat *stat); } + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); } + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); } + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); } + SYS_AIO_RETURN = 314 // { ssize_t aio_return(struct aiocb *aiocbp); } + SYS_AIO_SUSPEND = 315 // { int aio_suspend( struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } + SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); } + SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); } + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); } + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); } + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); } + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); } + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); } + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); } + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); } + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); } + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); } + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); } + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, acl_type_t type); } + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); } + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); } + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } + SYS_AIO_WAITCOMPLETE = 359 // { ssize_t aio_waitcomplete( struct aiocb **aiocbp, struct timespec *timeout); } + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } + SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } + SYS___SETUGID = 374 // { int __setugid(int flag); } + SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } + SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); } + SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } + SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } + SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); } + SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); } + SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); } + SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); } + SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); } + SYS_LCHFLAGS = 391 // { int lchflags(const char *path, u_long flags); } + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); } + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); } + SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, int call, void *arg); } + SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, long bufsize, int mode); } + SYS_STATFS = 396 // { int statfs(char *path, struct statfs *buf); } + SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } + SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); } + SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); } + SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); } + SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); } + SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, unsigned int value); } + SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); } + SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); } + SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); } + SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); } + SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); } + SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); } + SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); } + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( const char *path, int attrnamespace, const char *attrname); } + SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); } + SYS_SIGACTION = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); } + SYS_SIGRETURN = 417 // { int sigreturn( const struct __ucontext *sigcntxp); } + SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext( const struct __ucontext *ucp); } + SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); } + SYS_SWAPOFF = 424 // { int swapoff(const char *name); } + SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, acl_type_t type); } + SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); } + SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, int *sig); } + SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); } + SYS_THR_EXIT = 431 // { void thr_exit(long *state); } + SYS_THR_SELF = 432 // { int thr_self(long *id); } + SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } + SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } + SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); } + SYS_THR_SUSPEND = 442 // { int thr_suspend( const struct timespec *timeout); } + SYS_THR_WAKE = 443 // { int thr_wake(long id); } + SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } + SYS_AUDIT = 445 // { int audit(const void *record, u_int length); } + SYS_AUDITON = 446 // { int auditon(int cmd, void *data, u_int length); } + SYS_GETAUID = 447 // { int getauid(uid_t *auid); } + SYS_SETAUID = 448 // { int setauid(uid_t *auid); } + SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } + SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); } + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); } + SYS_AUDITCTL = 453 // { int auditctl(char *path); } + SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); } + SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, int param_size); } + SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } + SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); } + SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); } + SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); } + SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len,unsigned msg_prio, const struct timespec *abs_timeout);} + SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); } + SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); } + SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } + SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } + SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); } + SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); } + SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } + SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } + SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } + SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr * from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); } + SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); } + SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); } + SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); } + SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, int whence); } + SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } + SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } + SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } + SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, mode_t mode); } + SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } + SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } + SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); } + SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); } + SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); } + SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); } + SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, int flag); } + SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); } + SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, char **envv); } + SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, struct stat *buf, int flag); } + SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, struct timeval *times); } + SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); } + SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); } + SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, mode_t mode); } + SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); } + SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); } + SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, char *path2); } + SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } + SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } + SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); } + SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); } + SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); } + SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } + SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } + SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); } + SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } + SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); } + SYS_CAP_ENTER = 516 // { int cap_enter(void); } + SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } + SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } + SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } + SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } + SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); } + SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, size_t namelen); } + SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } + SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); } + SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); } + SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); } + SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); } + SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); } + SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); } + SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); } + SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); } + SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); } + SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); } + SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); } + SYS_ACCEPT4 = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); } + SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } + SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); } + SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); } + SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); } + SYS_FUTIMENS = 546 // { int futimens(int fd, struct timespec *times); } + SYS_UTIMENSAT = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); } + SYS_NUMA_GETAFFINITY = 548 // { int numa_getaffinity(cpuwhich_t which, id_t id, struct vm_domain_policy_entry *policy); } + SYS_NUMA_SETAFFINITY = 549 // { int numa_setaffinity(cpuwhich_t which, id_t id, const struct vm_domain_policy_entry *policy); } + SYS_FDATASYNC = 550 // { int fdatasync(int fd); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go new file mode 100644 index 0000000..62192e1 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go @@ -0,0 +1,450 @@ +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include -m32 /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build 386 && linux +// +build 386,linux + +package unix + +const ( + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAITPID = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_TIME = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_BREAK = 17 + SYS_OLDSTAT = 18 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_STIME = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_OLDFSTAT = 28 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_STTY = 31 + SYS_GTTY = 32 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_FTIME = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_PROF = 44 + SYS_BRK = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_SIGNAL = 48 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_LOCK = 53 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_MPX = 56 + SYS_SETPGID = 57 + SYS_ULIMIT = 58 + SYS_OLDOLDUNAME = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SGETMASK = 68 + SYS_SSETMASK = 69 + SYS_SETREUID = 70 + SYS_SETREGID = 71 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRLIMIT = 76 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_GETGROUPS = 80 + SYS_SETGROUPS = 81 + SYS_SELECT = 82 + SYS_SYMLINK = 83 + SYS_OLDLSTAT = 84 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_FCHOWN = 95 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_PROFIL = 98 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_IOPERM = 101 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_OLDUNAME = 109 + SYS_IOPL = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_VM86OLD = 113 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_MODIFY_LDT = 123 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_SETFSUID = 138 + SYS_SETFSGID = 139 + SYS__LLSEEK = 140 + SYS_GETDENTS = 141 + SYS__NEWSELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_SETRESUID = 164 + SYS_GETRESUID = 165 + SYS_VM86 = 166 + SYS_QUERY_MODULE = 167 + SYS_POLL = 168 + SYS_NFSSERVCTL = 169 + SYS_SETRESGID = 170 + SYS_GETRESGID = 171 + SYS_PRCTL = 172 + SYS_RT_SIGRETURN = 173 + SYS_RT_SIGACTION = 174 + SYS_RT_SIGPROCMASK = 175 + SYS_RT_SIGPENDING = 176 + SYS_RT_SIGTIMEDWAIT = 177 + SYS_RT_SIGQUEUEINFO = 178 + SYS_RT_SIGSUSPEND = 179 + SYS_PREAD64 = 180 + SYS_PWRITE64 = 181 + SYS_CHOWN = 182 + SYS_GETCWD = 183 + SYS_CAPGET = 184 + SYS_CAPSET = 185 + SYS_SIGALTSTACK = 186 + SYS_SENDFILE = 187 + SYS_GETPMSG = 188 + SYS_PUTPMSG = 189 + SYS_VFORK = 190 + SYS_UGETRLIMIT = 191 + SYS_MMAP2 = 192 + SYS_TRUNCATE64 = 193 + SYS_FTRUNCATE64 = 194 + SYS_STAT64 = 195 + SYS_LSTAT64 = 196 + SYS_FSTAT64 = 197 + SYS_LCHOWN32 = 198 + SYS_GETUID32 = 199 + SYS_GETGID32 = 200 + SYS_GETEUID32 = 201 + SYS_GETEGID32 = 202 + SYS_SETREUID32 = 203 + SYS_SETREGID32 = 204 + SYS_GETGROUPS32 = 205 + SYS_SETGROUPS32 = 206 + SYS_FCHOWN32 = 207 + SYS_SETRESUID32 = 208 + SYS_GETRESUID32 = 209 + SYS_SETRESGID32 = 210 + SYS_GETRESGID32 = 211 + SYS_CHOWN32 = 212 + SYS_SETUID32 = 213 + SYS_SETGID32 = 214 + SYS_SETFSUID32 = 215 + SYS_SETFSGID32 = 216 + SYS_PIVOT_ROOT = 217 + SYS_MINCORE = 218 + SYS_MADVISE = 219 + SYS_GETDENTS64 = 220 + SYS_FCNTL64 = 221 + SYS_GETTID = 224 + SYS_READAHEAD = 225 + SYS_SETXATTR = 226 + SYS_LSETXATTR = 227 + SYS_FSETXATTR = 228 + SYS_GETXATTR = 229 + SYS_LGETXATTR = 230 + SYS_FGETXATTR = 231 + SYS_LISTXATTR = 232 + SYS_LLISTXATTR = 233 + SYS_FLISTXATTR = 234 + SYS_REMOVEXATTR = 235 + SYS_LREMOVEXATTR = 236 + SYS_FREMOVEXATTR = 237 + SYS_TKILL = 238 + SYS_SENDFILE64 = 239 + SYS_FUTEX = 240 + SYS_SCHED_SETAFFINITY = 241 + SYS_SCHED_GETAFFINITY = 242 + SYS_SET_THREAD_AREA = 243 + SYS_GET_THREAD_AREA = 244 + SYS_IO_SETUP = 245 + SYS_IO_DESTROY = 246 + SYS_IO_GETEVENTS = 247 + SYS_IO_SUBMIT = 248 + SYS_IO_CANCEL = 249 + SYS_FADVISE64 = 250 + SYS_EXIT_GROUP = 252 + SYS_LOOKUP_DCOOKIE = 253 + SYS_EPOLL_CREATE = 254 + SYS_EPOLL_CTL = 255 + SYS_EPOLL_WAIT = 256 + SYS_REMAP_FILE_PAGES = 257 + SYS_SET_TID_ADDRESS = 258 + SYS_TIMER_CREATE = 259 + SYS_TIMER_SETTIME = 260 + SYS_TIMER_GETTIME = 261 + SYS_TIMER_GETOVERRUN = 262 + SYS_TIMER_DELETE = 263 + SYS_CLOCK_SETTIME = 264 + SYS_CLOCK_GETTIME = 265 + SYS_CLOCK_GETRES = 266 + SYS_CLOCK_NANOSLEEP = 267 + SYS_STATFS64 = 268 + SYS_FSTATFS64 = 269 + SYS_TGKILL = 270 + SYS_UTIMES = 271 + SYS_FADVISE64_64 = 272 + SYS_VSERVER = 273 + SYS_MBIND = 274 + SYS_GET_MEMPOLICY = 275 + SYS_SET_MEMPOLICY = 276 + SYS_MQ_OPEN = 277 + SYS_MQ_UNLINK = 278 + SYS_MQ_TIMEDSEND = 279 + SYS_MQ_TIMEDRECEIVE = 280 + SYS_MQ_NOTIFY = 281 + SYS_MQ_GETSETATTR = 282 + SYS_KEXEC_LOAD = 283 + SYS_WAITID = 284 + SYS_ADD_KEY = 286 + SYS_REQUEST_KEY = 287 + SYS_KEYCTL = 288 + SYS_IOPRIO_SET = 289 + SYS_IOPRIO_GET = 290 + SYS_INOTIFY_INIT = 291 + SYS_INOTIFY_ADD_WATCH = 292 + SYS_INOTIFY_RM_WATCH = 293 + SYS_MIGRATE_PAGES = 294 + SYS_OPENAT = 295 + SYS_MKDIRAT = 296 + SYS_MKNODAT = 297 + SYS_FCHOWNAT = 298 + SYS_FUTIMESAT = 299 + SYS_FSTATAT64 = 300 + SYS_UNLINKAT = 301 + SYS_RENAMEAT = 302 + SYS_LINKAT = 303 + SYS_SYMLINKAT = 304 + SYS_READLINKAT = 305 + SYS_FCHMODAT = 306 + SYS_FACCESSAT = 307 + SYS_PSELECT6 = 308 + SYS_PPOLL = 309 + SYS_UNSHARE = 310 + SYS_SET_ROBUST_LIST = 311 + SYS_GET_ROBUST_LIST = 312 + SYS_SPLICE = 313 + SYS_SYNC_FILE_RANGE = 314 + SYS_TEE = 315 + SYS_VMSPLICE = 316 + SYS_MOVE_PAGES = 317 + SYS_GETCPU = 318 + SYS_EPOLL_PWAIT = 319 + SYS_UTIMENSAT = 320 + SYS_SIGNALFD = 321 + SYS_TIMERFD_CREATE = 322 + SYS_EVENTFD = 323 + SYS_FALLOCATE = 324 + SYS_TIMERFD_SETTIME = 325 + SYS_TIMERFD_GETTIME = 326 + SYS_SIGNALFD4 = 327 + SYS_EVENTFD2 = 328 + SYS_EPOLL_CREATE1 = 329 + SYS_DUP3 = 330 + SYS_PIPE2 = 331 + SYS_INOTIFY_INIT1 = 332 + SYS_PREADV = 333 + SYS_PWRITEV = 334 + SYS_RT_TGSIGQUEUEINFO = 335 + SYS_PERF_EVENT_OPEN = 336 + SYS_RECVMMSG = 337 + SYS_FANOTIFY_INIT = 338 + SYS_FANOTIFY_MARK = 339 + SYS_PRLIMIT64 = 340 + SYS_NAME_TO_HANDLE_AT = 341 + SYS_OPEN_BY_HANDLE_AT = 342 + SYS_CLOCK_ADJTIME = 343 + SYS_SYNCFS = 344 + SYS_SENDMMSG = 345 + SYS_SETNS = 346 + SYS_PROCESS_VM_READV = 347 + SYS_PROCESS_VM_WRITEV = 348 + SYS_KCMP = 349 + SYS_FINIT_MODULE = 350 + SYS_SCHED_SETATTR = 351 + SYS_SCHED_GETATTR = 352 + SYS_RENAMEAT2 = 353 + SYS_SECCOMP = 354 + SYS_GETRANDOM = 355 + SYS_MEMFD_CREATE = 356 + SYS_BPF = 357 + SYS_EXECVEAT = 358 + SYS_SOCKET = 359 + SYS_SOCKETPAIR = 360 + SYS_BIND = 361 + SYS_CONNECT = 362 + SYS_LISTEN = 363 + SYS_ACCEPT4 = 364 + SYS_GETSOCKOPT = 365 + SYS_SETSOCKOPT = 366 + SYS_GETSOCKNAME = 367 + SYS_GETPEERNAME = 368 + SYS_SENDTO = 369 + SYS_SENDMSG = 370 + SYS_RECVFROM = 371 + SYS_RECVMSG = 372 + SYS_SHUTDOWN = 373 + SYS_USERFAULTFD = 374 + SYS_MEMBARRIER = 375 + SYS_MLOCK2 = 376 + SYS_COPY_FILE_RANGE = 377 + SYS_PREADV2 = 378 + SYS_PWRITEV2 = 379 + SYS_PKEY_MPROTECT = 380 + SYS_PKEY_ALLOC = 381 + SYS_PKEY_FREE = 382 + SYS_STATX = 383 + SYS_ARCH_PRCTL = 384 + SYS_IO_PGETEVENTS = 385 + SYS_RSEQ = 386 + SYS_SEMGET = 393 + SYS_SEMCTL = 394 + SYS_SHMGET = 395 + SYS_SHMCTL = 396 + SYS_SHMAT = 397 + SYS_SHMDT = 398 + SYS_MSGGET = 399 + SYS_MSGSND = 400 + SYS_MSGRCV = 401 + SYS_MSGCTL = 402 + SYS_CLOCK_GETTIME64 = 403 + SYS_CLOCK_SETTIME64 = 404 + SYS_CLOCK_ADJTIME64 = 405 + SYS_CLOCK_GETRES_TIME64 = 406 + SYS_CLOCK_NANOSLEEP_TIME64 = 407 + SYS_TIMER_GETTIME64 = 408 + SYS_TIMER_SETTIME64 = 409 + SYS_TIMERFD_GETTIME64 = 410 + SYS_TIMERFD_SETTIME64 = 411 + SYS_UTIMENSAT_TIME64 = 412 + SYS_PSELECT6_TIME64 = 413 + SYS_PPOLL_TIME64 = 414 + SYS_IO_PGETEVENTS_TIME64 = 416 + SYS_RECVMMSG_TIME64 = 417 + SYS_MQ_TIMEDSEND_TIME64 = 418 + SYS_MQ_TIMEDRECEIVE_TIME64 = 419 + SYS_SEMTIMEDOP_TIME64 = 420 + SYS_RT_SIGTIMEDWAIT_TIME64 = 421 + SYS_FUTEX_TIME64 = 422 + SYS_SCHED_RR_GET_INTERVAL_TIME64 = 423 + SYS_PIDFD_SEND_SIGNAL = 424 + SYS_IO_URING_SETUP = 425 + SYS_IO_URING_ENTER = 426 + SYS_IO_URING_REGISTER = 427 + SYS_OPEN_TREE = 428 + SYS_MOVE_MOUNT = 429 + SYS_FSOPEN = 430 + SYS_FSCONFIG = 431 + SYS_FSMOUNT = 432 + SYS_FSPICK = 433 + SYS_PIDFD_OPEN = 434 + SYS_CLONE3 = 435 + SYS_CLOSE_RANGE = 436 + SYS_OPENAT2 = 437 + SYS_PIDFD_GETFD = 438 + SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 + SYS_EPOLL_PWAIT2 = 441 + SYS_MOUNT_SETATTR = 442 + SYS_QUOTACTL_FD = 443 + SYS_LANDLOCK_CREATE_RULESET = 444 + SYS_LANDLOCK_ADD_RULE = 445 + SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_MEMFD_SECRET = 447 + SYS_PROCESS_MRELEASE = 448 + SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go new file mode 100644 index 0000000..490aab5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go @@ -0,0 +1,372 @@ +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include -m64 /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build amd64 && linux +// +build amd64,linux + +package unix + +const ( + SYS_READ = 0 + SYS_WRITE = 1 + SYS_OPEN = 2 + SYS_CLOSE = 3 + SYS_STAT = 4 + SYS_FSTAT = 5 + SYS_LSTAT = 6 + SYS_POLL = 7 + SYS_LSEEK = 8 + SYS_MMAP = 9 + SYS_MPROTECT = 10 + SYS_MUNMAP = 11 + SYS_BRK = 12 + SYS_RT_SIGACTION = 13 + SYS_RT_SIGPROCMASK = 14 + SYS_RT_SIGRETURN = 15 + SYS_IOCTL = 16 + SYS_PREAD64 = 17 + SYS_PWRITE64 = 18 + SYS_READV = 19 + SYS_WRITEV = 20 + SYS_ACCESS = 21 + SYS_PIPE = 22 + SYS_SELECT = 23 + SYS_SCHED_YIELD = 24 + SYS_MREMAP = 25 + SYS_MSYNC = 26 + SYS_MINCORE = 27 + SYS_MADVISE = 28 + SYS_SHMGET = 29 + SYS_SHMAT = 30 + SYS_SHMCTL = 31 + SYS_DUP = 32 + SYS_DUP2 = 33 + SYS_PAUSE = 34 + SYS_NANOSLEEP = 35 + SYS_GETITIMER = 36 + SYS_ALARM = 37 + SYS_SETITIMER = 38 + SYS_GETPID = 39 + SYS_SENDFILE = 40 + SYS_SOCKET = 41 + SYS_CONNECT = 42 + SYS_ACCEPT = 43 + SYS_SENDTO = 44 + SYS_RECVFROM = 45 + SYS_SENDMSG = 46 + SYS_RECVMSG = 47 + SYS_SHUTDOWN = 48 + SYS_BIND = 49 + SYS_LISTEN = 50 + SYS_GETSOCKNAME = 51 + SYS_GETPEERNAME = 52 + SYS_SOCKETPAIR = 53 + SYS_SETSOCKOPT = 54 + SYS_GETSOCKOPT = 55 + SYS_CLONE = 56 + SYS_FORK = 57 + SYS_VFORK = 58 + SYS_EXECVE = 59 + SYS_EXIT = 60 + SYS_WAIT4 = 61 + SYS_KILL = 62 + SYS_UNAME = 63 + SYS_SEMGET = 64 + SYS_SEMOP = 65 + SYS_SEMCTL = 66 + SYS_SHMDT = 67 + SYS_MSGGET = 68 + SYS_MSGSND = 69 + SYS_MSGRCV = 70 + SYS_MSGCTL = 71 + SYS_FCNTL = 72 + SYS_FLOCK = 73 + SYS_FSYNC = 74 + SYS_FDATASYNC = 75 + SYS_TRUNCATE = 76 + SYS_FTRUNCATE = 77 + SYS_GETDENTS = 78 + SYS_GETCWD = 79 + SYS_CHDIR = 80 + SYS_FCHDIR = 81 + SYS_RENAME = 82 + SYS_MKDIR = 83 + SYS_RMDIR = 84 + SYS_CREAT = 85 + SYS_LINK = 86 + SYS_UNLINK = 87 + SYS_SYMLINK = 88 + SYS_READLINK = 89 + SYS_CHMOD = 90 + SYS_FCHMOD = 91 + SYS_CHOWN = 92 + SYS_FCHOWN = 93 + SYS_LCHOWN = 94 + SYS_UMASK = 95 + SYS_GETTIMEOFDAY = 96 + SYS_GETRLIMIT = 97 + SYS_GETRUSAGE = 98 + SYS_SYSINFO = 99 + SYS_TIMES = 100 + SYS_PTRACE = 101 + SYS_GETUID = 102 + SYS_SYSLOG = 103 + SYS_GETGID = 104 + SYS_SETUID = 105 + SYS_SETGID = 106 + SYS_GETEUID = 107 + SYS_GETEGID = 108 + SYS_SETPGID = 109 + SYS_GETPPID = 110 + SYS_GETPGRP = 111 + SYS_SETSID = 112 + SYS_SETREUID = 113 + SYS_SETREGID = 114 + SYS_GETGROUPS = 115 + SYS_SETGROUPS = 116 + SYS_SETRESUID = 117 + SYS_GETRESUID = 118 + SYS_SETRESGID = 119 + SYS_GETRESGID = 120 + SYS_GETPGID = 121 + SYS_SETFSUID = 122 + SYS_SETFSGID = 123 + SYS_GETSID = 124 + SYS_CAPGET = 125 + SYS_CAPSET = 126 + SYS_RT_SIGPENDING = 127 + SYS_RT_SIGTIMEDWAIT = 128 + SYS_RT_SIGQUEUEINFO = 129 + SYS_RT_SIGSUSPEND = 130 + SYS_SIGALTSTACK = 131 + SYS_UTIME = 132 + SYS_MKNOD = 133 + SYS_USELIB = 134 + SYS_PERSONALITY = 135 + SYS_USTAT = 136 + SYS_STATFS = 137 + SYS_FSTATFS = 138 + SYS_SYSFS = 139 + SYS_GETPRIORITY = 140 + SYS_SETPRIORITY = 141 + SYS_SCHED_SETPARAM = 142 + SYS_SCHED_GETPARAM = 143 + SYS_SCHED_SETSCHEDULER = 144 + SYS_SCHED_GETSCHEDULER = 145 + SYS_SCHED_GET_PRIORITY_MAX = 146 + SYS_SCHED_GET_PRIORITY_MIN = 147 + SYS_SCHED_RR_GET_INTERVAL = 148 + SYS_MLOCK = 149 + SYS_MUNLOCK = 150 + SYS_MLOCKALL = 151 + SYS_MUNLOCKALL = 152 + SYS_VHANGUP = 153 + SYS_MODIFY_LDT = 154 + SYS_PIVOT_ROOT = 155 + SYS__SYSCTL = 156 + SYS_PRCTL = 157 + SYS_ARCH_PRCTL = 158 + SYS_ADJTIMEX = 159 + SYS_SETRLIMIT = 160 + SYS_CHROOT = 161 + SYS_SYNC = 162 + SYS_ACCT = 163 + SYS_SETTIMEOFDAY = 164 + SYS_MOUNT = 165 + SYS_UMOUNT2 = 166 + SYS_SWAPON = 167 + SYS_SWAPOFF = 168 + SYS_REBOOT = 169 + SYS_SETHOSTNAME = 170 + SYS_SETDOMAINNAME = 171 + SYS_IOPL = 172 + SYS_IOPERM = 173 + SYS_CREATE_MODULE = 174 + SYS_INIT_MODULE = 175 + SYS_DELETE_MODULE = 176 + SYS_GET_KERNEL_SYMS = 177 + SYS_QUERY_MODULE = 178 + SYS_QUOTACTL = 179 + SYS_NFSSERVCTL = 180 + SYS_GETPMSG = 181 + SYS_PUTPMSG = 182 + SYS_AFS_SYSCALL = 183 + SYS_TUXCALL = 184 + SYS_SECURITY = 185 + SYS_GETTID = 186 + SYS_READAHEAD = 187 + SYS_SETXATTR = 188 + SYS_LSETXATTR = 189 + SYS_FSETXATTR = 190 + SYS_GETXATTR = 191 + SYS_LGETXATTR = 192 + SYS_FGETXATTR = 193 + SYS_LISTXATTR = 194 + SYS_LLISTXATTR = 195 + SYS_FLISTXATTR = 196 + SYS_REMOVEXATTR = 197 + SYS_LREMOVEXATTR = 198 + SYS_FREMOVEXATTR = 199 + SYS_TKILL = 200 + SYS_TIME = 201 + SYS_FUTEX = 202 + SYS_SCHED_SETAFFINITY = 203 + SYS_SCHED_GETAFFINITY = 204 + SYS_SET_THREAD_AREA = 205 + SYS_IO_SETUP = 206 + SYS_IO_DESTROY = 207 + SYS_IO_GETEVENTS = 208 + SYS_IO_SUBMIT = 209 + SYS_IO_CANCEL = 210 + SYS_GET_THREAD_AREA = 211 + SYS_LOOKUP_DCOOKIE = 212 + SYS_EPOLL_CREATE = 213 + SYS_EPOLL_CTL_OLD = 214 + SYS_EPOLL_WAIT_OLD = 215 + SYS_REMAP_FILE_PAGES = 216 + SYS_GETDENTS64 = 217 + SYS_SET_TID_ADDRESS = 218 + SYS_RESTART_SYSCALL = 219 + SYS_SEMTIMEDOP = 220 + SYS_FADVISE64 = 221 + SYS_TIMER_CREATE = 222 + SYS_TIMER_SETTIME = 223 + SYS_TIMER_GETTIME = 224 + SYS_TIMER_GETOVERRUN = 225 + SYS_TIMER_DELETE = 226 + SYS_CLOCK_SETTIME = 227 + SYS_CLOCK_GETTIME = 228 + SYS_CLOCK_GETRES = 229 + SYS_CLOCK_NANOSLEEP = 230 + SYS_EXIT_GROUP = 231 + SYS_EPOLL_WAIT = 232 + SYS_EPOLL_CTL = 233 + SYS_TGKILL = 234 + SYS_UTIMES = 235 + SYS_VSERVER = 236 + SYS_MBIND = 237 + SYS_SET_MEMPOLICY = 238 + SYS_GET_MEMPOLICY = 239 + SYS_MQ_OPEN = 240 + SYS_MQ_UNLINK = 241 + SYS_MQ_TIMEDSEND = 242 + SYS_MQ_TIMEDRECEIVE = 243 + SYS_MQ_NOTIFY = 244 + SYS_MQ_GETSETATTR = 245 + SYS_KEXEC_LOAD = 246 + SYS_WAITID = 247 + SYS_ADD_KEY = 248 + SYS_REQUEST_KEY = 249 + SYS_KEYCTL = 250 + SYS_IOPRIO_SET = 251 + SYS_IOPRIO_GET = 252 + SYS_INOTIFY_INIT = 253 + SYS_INOTIFY_ADD_WATCH = 254 + SYS_INOTIFY_RM_WATCH = 255 + SYS_MIGRATE_PAGES = 256 + SYS_OPENAT = 257 + SYS_MKDIRAT = 258 + SYS_MKNODAT = 259 + SYS_FCHOWNAT = 260 + SYS_FUTIMESAT = 261 + SYS_NEWFSTATAT = 262 + SYS_UNLINKAT = 263 + SYS_RENAMEAT = 264 + SYS_LINKAT = 265 + SYS_SYMLINKAT = 266 + SYS_READLINKAT = 267 + SYS_FCHMODAT = 268 + SYS_FACCESSAT = 269 + SYS_PSELECT6 = 270 + SYS_PPOLL = 271 + SYS_UNSHARE = 272 + SYS_SET_ROBUST_LIST = 273 + SYS_GET_ROBUST_LIST = 274 + SYS_SPLICE = 275 + SYS_TEE = 276 + SYS_SYNC_FILE_RANGE = 277 + SYS_VMSPLICE = 278 + SYS_MOVE_PAGES = 279 + SYS_UTIMENSAT = 280 + SYS_EPOLL_PWAIT = 281 + SYS_SIGNALFD = 282 + SYS_TIMERFD_CREATE = 283 + SYS_EVENTFD = 284 + SYS_FALLOCATE = 285 + SYS_TIMERFD_SETTIME = 286 + SYS_TIMERFD_GETTIME = 287 + SYS_ACCEPT4 = 288 + SYS_SIGNALFD4 = 289 + SYS_EVENTFD2 = 290 + SYS_EPOLL_CREATE1 = 291 + SYS_DUP3 = 292 + SYS_PIPE2 = 293 + SYS_INOTIFY_INIT1 = 294 + SYS_PREADV = 295 + SYS_PWRITEV = 296 + SYS_RT_TGSIGQUEUEINFO = 297 + SYS_PERF_EVENT_OPEN = 298 + SYS_RECVMMSG = 299 + SYS_FANOTIFY_INIT = 300 + SYS_FANOTIFY_MARK = 301 + SYS_PRLIMIT64 = 302 + SYS_NAME_TO_HANDLE_AT = 303 + SYS_OPEN_BY_HANDLE_AT = 304 + SYS_CLOCK_ADJTIME = 305 + SYS_SYNCFS = 306 + SYS_SENDMMSG = 307 + SYS_SETNS = 308 + SYS_GETCPU = 309 + SYS_PROCESS_VM_READV = 310 + SYS_PROCESS_VM_WRITEV = 311 + SYS_KCMP = 312 + SYS_FINIT_MODULE = 313 + SYS_SCHED_SETATTR = 314 + SYS_SCHED_GETATTR = 315 + SYS_RENAMEAT2 = 316 + SYS_SECCOMP = 317 + SYS_GETRANDOM = 318 + SYS_MEMFD_CREATE = 319 + SYS_KEXEC_FILE_LOAD = 320 + SYS_BPF = 321 + SYS_EXECVEAT = 322 + SYS_USERFAULTFD = 323 + SYS_MEMBARRIER = 324 + SYS_MLOCK2 = 325 + SYS_COPY_FILE_RANGE = 326 + SYS_PREADV2 = 327 + SYS_PWRITEV2 = 328 + SYS_PKEY_MPROTECT = 329 + SYS_PKEY_ALLOC = 330 + SYS_PKEY_FREE = 331 + SYS_STATX = 332 + SYS_IO_PGETEVENTS = 333 + SYS_RSEQ = 334 + SYS_PIDFD_SEND_SIGNAL = 424 + SYS_IO_URING_SETUP = 425 + SYS_IO_URING_ENTER = 426 + SYS_IO_URING_REGISTER = 427 + SYS_OPEN_TREE = 428 + SYS_MOVE_MOUNT = 429 + SYS_FSOPEN = 430 + SYS_FSCONFIG = 431 + SYS_FSMOUNT = 432 + SYS_FSPICK = 433 + SYS_PIDFD_OPEN = 434 + SYS_CLONE3 = 435 + SYS_CLOSE_RANGE = 436 + SYS_OPENAT2 = 437 + SYS_PIDFD_GETFD = 438 + SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 + SYS_EPOLL_PWAIT2 = 441 + SYS_MOUNT_SETATTR = 442 + SYS_QUOTACTL_FD = 443 + SYS_LANDLOCK_CREATE_RULESET = 444 + SYS_LANDLOCK_ADD_RULE = 445 + SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_MEMFD_SECRET = 447 + SYS_PROCESS_MRELEASE = 448 + SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go new file mode 100644 index 0000000..aca17b6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go @@ -0,0 +1,414 @@ +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm && linux +// +build arm,linux + +package unix + +const ( + SYS_SYSCALL_MASK = 0 + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_PTRACE = 26 + SYS_PAUSE = 29 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_BRK = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_SETPGID = 57 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SETREUID = 70 + SYS_SETREGID = 71 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_GETGROUPS = 80 + SYS_SETGROUPS = 81 + SYS_SYMLINK = 83 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_FCHOWN = 95 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_VHANGUP = 111 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_SETFSUID = 138 + SYS_SETFSGID = 139 + SYS__LLSEEK = 140 + SYS_GETDENTS = 141 + SYS__NEWSELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_SETRESUID = 164 + SYS_GETRESUID = 165 + SYS_POLL = 168 + SYS_NFSSERVCTL = 169 + SYS_SETRESGID = 170 + SYS_GETRESGID = 171 + SYS_PRCTL = 172 + SYS_RT_SIGRETURN = 173 + SYS_RT_SIGACTION = 174 + SYS_RT_SIGPROCMASK = 175 + SYS_RT_SIGPENDING = 176 + SYS_RT_SIGTIMEDWAIT = 177 + SYS_RT_SIGQUEUEINFO = 178 + SYS_RT_SIGSUSPEND = 179 + SYS_PREAD64 = 180 + SYS_PWRITE64 = 181 + SYS_CHOWN = 182 + SYS_GETCWD = 183 + SYS_CAPGET = 184 + SYS_CAPSET = 185 + SYS_SIGALTSTACK = 186 + SYS_SENDFILE = 187 + SYS_VFORK = 190 + SYS_UGETRLIMIT = 191 + SYS_MMAP2 = 192 + SYS_TRUNCATE64 = 193 + SYS_FTRUNCATE64 = 194 + SYS_STAT64 = 195 + SYS_LSTAT64 = 196 + SYS_FSTAT64 = 197 + SYS_LCHOWN32 = 198 + SYS_GETUID32 = 199 + SYS_GETGID32 = 200 + SYS_GETEUID32 = 201 + SYS_GETEGID32 = 202 + SYS_SETREUID32 = 203 + SYS_SETREGID32 = 204 + SYS_GETGROUPS32 = 205 + SYS_SETGROUPS32 = 206 + SYS_FCHOWN32 = 207 + SYS_SETRESUID32 = 208 + SYS_GETRESUID32 = 209 + SYS_SETRESGID32 = 210 + SYS_GETRESGID32 = 211 + SYS_CHOWN32 = 212 + SYS_SETUID32 = 213 + SYS_SETGID32 = 214 + SYS_SETFSUID32 = 215 + SYS_SETFSGID32 = 216 + SYS_GETDENTS64 = 217 + SYS_PIVOT_ROOT = 218 + SYS_MINCORE = 219 + SYS_MADVISE = 220 + SYS_FCNTL64 = 221 + SYS_GETTID = 224 + SYS_READAHEAD = 225 + SYS_SETXATTR = 226 + SYS_LSETXATTR = 227 + SYS_FSETXATTR = 228 + SYS_GETXATTR = 229 + SYS_LGETXATTR = 230 + SYS_FGETXATTR = 231 + SYS_LISTXATTR = 232 + SYS_LLISTXATTR = 233 + SYS_FLISTXATTR = 234 + SYS_REMOVEXATTR = 235 + SYS_LREMOVEXATTR = 236 + SYS_FREMOVEXATTR = 237 + SYS_TKILL = 238 + SYS_SENDFILE64 = 239 + SYS_FUTEX = 240 + SYS_SCHED_SETAFFINITY = 241 + SYS_SCHED_GETAFFINITY = 242 + SYS_IO_SETUP = 243 + SYS_IO_DESTROY = 244 + SYS_IO_GETEVENTS = 245 + SYS_IO_SUBMIT = 246 + SYS_IO_CANCEL = 247 + SYS_EXIT_GROUP = 248 + SYS_LOOKUP_DCOOKIE = 249 + SYS_EPOLL_CREATE = 250 + SYS_EPOLL_CTL = 251 + SYS_EPOLL_WAIT = 252 + SYS_REMAP_FILE_PAGES = 253 + SYS_SET_TID_ADDRESS = 256 + SYS_TIMER_CREATE = 257 + SYS_TIMER_SETTIME = 258 + SYS_TIMER_GETTIME = 259 + SYS_TIMER_GETOVERRUN = 260 + SYS_TIMER_DELETE = 261 + SYS_CLOCK_SETTIME = 262 + SYS_CLOCK_GETTIME = 263 + SYS_CLOCK_GETRES = 264 + SYS_CLOCK_NANOSLEEP = 265 + SYS_STATFS64 = 266 + SYS_FSTATFS64 = 267 + SYS_TGKILL = 268 + SYS_UTIMES = 269 + SYS_ARM_FADVISE64_64 = 270 + SYS_PCICONFIG_IOBASE = 271 + SYS_PCICONFIG_READ = 272 + SYS_PCICONFIG_WRITE = 273 + SYS_MQ_OPEN = 274 + SYS_MQ_UNLINK = 275 + SYS_MQ_TIMEDSEND = 276 + SYS_MQ_TIMEDRECEIVE = 277 + SYS_MQ_NOTIFY = 278 + SYS_MQ_GETSETATTR = 279 + SYS_WAITID = 280 + SYS_SOCKET = 281 + SYS_BIND = 282 + SYS_CONNECT = 283 + SYS_LISTEN = 284 + SYS_ACCEPT = 285 + SYS_GETSOCKNAME = 286 + SYS_GETPEERNAME = 287 + SYS_SOCKETPAIR = 288 + SYS_SEND = 289 + SYS_SENDTO = 290 + SYS_RECV = 291 + SYS_RECVFROM = 292 + SYS_SHUTDOWN = 293 + SYS_SETSOCKOPT = 294 + SYS_GETSOCKOPT = 295 + SYS_SENDMSG = 296 + SYS_RECVMSG = 297 + SYS_SEMOP = 298 + SYS_SEMGET = 299 + SYS_SEMCTL = 300 + SYS_MSGSND = 301 + SYS_MSGRCV = 302 + SYS_MSGGET = 303 + SYS_MSGCTL = 304 + SYS_SHMAT = 305 + SYS_SHMDT = 306 + SYS_SHMGET = 307 + SYS_SHMCTL = 308 + SYS_ADD_KEY = 309 + SYS_REQUEST_KEY = 310 + SYS_KEYCTL = 311 + SYS_SEMTIMEDOP = 312 + SYS_VSERVER = 313 + SYS_IOPRIO_SET = 314 + SYS_IOPRIO_GET = 315 + SYS_INOTIFY_INIT = 316 + SYS_INOTIFY_ADD_WATCH = 317 + SYS_INOTIFY_RM_WATCH = 318 + SYS_MBIND = 319 + SYS_GET_MEMPOLICY = 320 + SYS_SET_MEMPOLICY = 321 + SYS_OPENAT = 322 + SYS_MKDIRAT = 323 + SYS_MKNODAT = 324 + SYS_FCHOWNAT = 325 + SYS_FUTIMESAT = 326 + SYS_FSTATAT64 = 327 + SYS_UNLINKAT = 328 + SYS_RENAMEAT = 329 + SYS_LINKAT = 330 + SYS_SYMLINKAT = 331 + SYS_READLINKAT = 332 + SYS_FCHMODAT = 333 + SYS_FACCESSAT = 334 + SYS_PSELECT6 = 335 + SYS_PPOLL = 336 + SYS_UNSHARE = 337 + SYS_SET_ROBUST_LIST = 338 + SYS_GET_ROBUST_LIST = 339 + SYS_SPLICE = 340 + SYS_ARM_SYNC_FILE_RANGE = 341 + SYS_TEE = 342 + SYS_VMSPLICE = 343 + SYS_MOVE_PAGES = 344 + SYS_GETCPU = 345 + SYS_EPOLL_PWAIT = 346 + SYS_KEXEC_LOAD = 347 + SYS_UTIMENSAT = 348 + SYS_SIGNALFD = 349 + SYS_TIMERFD_CREATE = 350 + SYS_EVENTFD = 351 + SYS_FALLOCATE = 352 + SYS_TIMERFD_SETTIME = 353 + SYS_TIMERFD_GETTIME = 354 + SYS_SIGNALFD4 = 355 + SYS_EVENTFD2 = 356 + SYS_EPOLL_CREATE1 = 357 + SYS_DUP3 = 358 + SYS_PIPE2 = 359 + SYS_INOTIFY_INIT1 = 360 + SYS_PREADV = 361 + SYS_PWRITEV = 362 + SYS_RT_TGSIGQUEUEINFO = 363 + SYS_PERF_EVENT_OPEN = 364 + SYS_RECVMMSG = 365 + SYS_ACCEPT4 = 366 + SYS_FANOTIFY_INIT = 367 + SYS_FANOTIFY_MARK = 368 + SYS_PRLIMIT64 = 369 + SYS_NAME_TO_HANDLE_AT = 370 + SYS_OPEN_BY_HANDLE_AT = 371 + SYS_CLOCK_ADJTIME = 372 + SYS_SYNCFS = 373 + SYS_SENDMMSG = 374 + SYS_SETNS = 375 + SYS_PROCESS_VM_READV = 376 + SYS_PROCESS_VM_WRITEV = 377 + SYS_KCMP = 378 + SYS_FINIT_MODULE = 379 + SYS_SCHED_SETATTR = 380 + SYS_SCHED_GETATTR = 381 + SYS_RENAMEAT2 = 382 + SYS_SECCOMP = 383 + SYS_GETRANDOM = 384 + SYS_MEMFD_CREATE = 385 + SYS_BPF = 386 + SYS_EXECVEAT = 387 + SYS_USERFAULTFD = 388 + SYS_MEMBARRIER = 389 + SYS_MLOCK2 = 390 + SYS_COPY_FILE_RANGE = 391 + SYS_PREADV2 = 392 + SYS_PWRITEV2 = 393 + SYS_PKEY_MPROTECT = 394 + SYS_PKEY_ALLOC = 395 + SYS_PKEY_FREE = 396 + SYS_STATX = 397 + SYS_RSEQ = 398 + SYS_IO_PGETEVENTS = 399 + SYS_MIGRATE_PAGES = 400 + SYS_KEXEC_FILE_LOAD = 401 + SYS_CLOCK_GETTIME64 = 403 + SYS_CLOCK_SETTIME64 = 404 + SYS_CLOCK_ADJTIME64 = 405 + SYS_CLOCK_GETRES_TIME64 = 406 + SYS_CLOCK_NANOSLEEP_TIME64 = 407 + SYS_TIMER_GETTIME64 = 408 + SYS_TIMER_SETTIME64 = 409 + SYS_TIMERFD_GETTIME64 = 410 + SYS_TIMERFD_SETTIME64 = 411 + SYS_UTIMENSAT_TIME64 = 412 + SYS_PSELECT6_TIME64 = 413 + SYS_PPOLL_TIME64 = 414 + SYS_IO_PGETEVENTS_TIME64 = 416 + SYS_RECVMMSG_TIME64 = 417 + SYS_MQ_TIMEDSEND_TIME64 = 418 + SYS_MQ_TIMEDRECEIVE_TIME64 = 419 + SYS_SEMTIMEDOP_TIME64 = 420 + SYS_RT_SIGTIMEDWAIT_TIME64 = 421 + SYS_FUTEX_TIME64 = 422 + SYS_SCHED_RR_GET_INTERVAL_TIME64 = 423 + SYS_PIDFD_SEND_SIGNAL = 424 + SYS_IO_URING_SETUP = 425 + SYS_IO_URING_ENTER = 426 + SYS_IO_URING_REGISTER = 427 + SYS_OPEN_TREE = 428 + SYS_MOVE_MOUNT = 429 + SYS_FSOPEN = 430 + SYS_FSCONFIG = 431 + SYS_FSMOUNT = 432 + SYS_FSPICK = 433 + SYS_PIDFD_OPEN = 434 + SYS_CLONE3 = 435 + SYS_CLOSE_RANGE = 436 + SYS_OPENAT2 = 437 + SYS_PIDFD_GETFD = 438 + SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 + SYS_EPOLL_PWAIT2 = 441 + SYS_MOUNT_SETATTR = 442 + SYS_QUOTACTL_FD = 443 + SYS_LANDLOCK_CREATE_RULESET = 444 + SYS_LANDLOCK_ADD_RULE = 445 + SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_PROCESS_MRELEASE = 448 + SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go new file mode 100644 index 0000000..54b4dfa --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -0,0 +1,317 @@ +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm64 && linux +// +build arm64,linux + +package unix + +const ( + SYS_IO_SETUP = 0 + SYS_IO_DESTROY = 1 + SYS_IO_SUBMIT = 2 + SYS_IO_CANCEL = 3 + SYS_IO_GETEVENTS = 4 + SYS_SETXATTR = 5 + SYS_LSETXATTR = 6 + SYS_FSETXATTR = 7 + SYS_GETXATTR = 8 + SYS_LGETXATTR = 9 + SYS_FGETXATTR = 10 + SYS_LISTXATTR = 11 + SYS_LLISTXATTR = 12 + SYS_FLISTXATTR = 13 + SYS_REMOVEXATTR = 14 + SYS_LREMOVEXATTR = 15 + SYS_FREMOVEXATTR = 16 + SYS_GETCWD = 17 + SYS_LOOKUP_DCOOKIE = 18 + SYS_EVENTFD2 = 19 + SYS_EPOLL_CREATE1 = 20 + SYS_EPOLL_CTL = 21 + SYS_EPOLL_PWAIT = 22 + SYS_DUP = 23 + SYS_DUP3 = 24 + SYS_FCNTL = 25 + SYS_INOTIFY_INIT1 = 26 + SYS_INOTIFY_ADD_WATCH = 27 + SYS_INOTIFY_RM_WATCH = 28 + SYS_IOCTL = 29 + SYS_IOPRIO_SET = 30 + SYS_IOPRIO_GET = 31 + SYS_FLOCK = 32 + SYS_MKNODAT = 33 + SYS_MKDIRAT = 34 + SYS_UNLINKAT = 35 + SYS_SYMLINKAT = 36 + SYS_LINKAT = 37 + SYS_RENAMEAT = 38 + SYS_UMOUNT2 = 39 + SYS_MOUNT = 40 + SYS_PIVOT_ROOT = 41 + SYS_NFSSERVCTL = 42 + SYS_STATFS = 43 + SYS_FSTATFS = 44 + SYS_TRUNCATE = 45 + SYS_FTRUNCATE = 46 + SYS_FALLOCATE = 47 + SYS_FACCESSAT = 48 + SYS_CHDIR = 49 + SYS_FCHDIR = 50 + SYS_CHROOT = 51 + SYS_FCHMOD = 52 + SYS_FCHMODAT = 53 + SYS_FCHOWNAT = 54 + SYS_FCHOWN = 55 + SYS_OPENAT = 56 + SYS_CLOSE = 57 + SYS_VHANGUP = 58 + SYS_PIPE2 = 59 + SYS_QUOTACTL = 60 + SYS_GETDENTS64 = 61 + SYS_LSEEK = 62 + SYS_READ = 63 + SYS_WRITE = 64 + SYS_READV = 65 + SYS_WRITEV = 66 + SYS_PREAD64 = 67 + SYS_PWRITE64 = 68 + SYS_PREADV = 69 + SYS_PWRITEV = 70 + SYS_SENDFILE = 71 + SYS_PSELECT6 = 72 + SYS_PPOLL = 73 + SYS_SIGNALFD4 = 74 + SYS_VMSPLICE = 75 + SYS_SPLICE = 76 + SYS_TEE = 77 + SYS_READLINKAT = 78 + SYS_FSTATAT = 79 + SYS_FSTAT = 80 + SYS_SYNC = 81 + SYS_FSYNC = 82 + SYS_FDATASYNC = 83 + SYS_SYNC_FILE_RANGE = 84 + SYS_TIMERFD_CREATE = 85 + SYS_TIMERFD_SETTIME = 86 + SYS_TIMERFD_GETTIME = 87 + SYS_UTIMENSAT = 88 + SYS_ACCT = 89 + SYS_CAPGET = 90 + SYS_CAPSET = 91 + SYS_PERSONALITY = 92 + SYS_EXIT = 93 + SYS_EXIT_GROUP = 94 + SYS_WAITID = 95 + SYS_SET_TID_ADDRESS = 96 + SYS_UNSHARE = 97 + SYS_FUTEX = 98 + SYS_SET_ROBUST_LIST = 99 + SYS_GET_ROBUST_LIST = 100 + SYS_NANOSLEEP = 101 + SYS_GETITIMER = 102 + SYS_SETITIMER = 103 + SYS_KEXEC_LOAD = 104 + SYS_INIT_MODULE = 105 + SYS_DELETE_MODULE = 106 + SYS_TIMER_CREATE = 107 + SYS_TIMER_GETTIME = 108 + SYS_TIMER_GETOVERRUN = 109 + SYS_TIMER_SETTIME = 110 + SYS_TIMER_DELETE = 111 + SYS_CLOCK_SETTIME = 112 + SYS_CLOCK_GETTIME = 113 + SYS_CLOCK_GETRES = 114 + SYS_CLOCK_NANOSLEEP = 115 + SYS_SYSLOG = 116 + SYS_PTRACE = 117 + SYS_SCHED_SETPARAM = 118 + SYS_SCHED_SETSCHEDULER = 119 + SYS_SCHED_GETSCHEDULER = 120 + SYS_SCHED_GETPARAM = 121 + SYS_SCHED_SETAFFINITY = 122 + SYS_SCHED_GETAFFINITY = 123 + SYS_SCHED_YIELD = 124 + SYS_SCHED_GET_PRIORITY_MAX = 125 + SYS_SCHED_GET_PRIORITY_MIN = 126 + SYS_SCHED_RR_GET_INTERVAL = 127 + SYS_RESTART_SYSCALL = 128 + SYS_KILL = 129 + SYS_TKILL = 130 + SYS_TGKILL = 131 + SYS_SIGALTSTACK = 132 + SYS_RT_SIGSUSPEND = 133 + SYS_RT_SIGACTION = 134 + SYS_RT_SIGPROCMASK = 135 + SYS_RT_SIGPENDING = 136 + SYS_RT_SIGTIMEDWAIT = 137 + SYS_RT_SIGQUEUEINFO = 138 + SYS_RT_SIGRETURN = 139 + SYS_SETPRIORITY = 140 + SYS_GETPRIORITY = 141 + SYS_REBOOT = 142 + SYS_SETREGID = 143 + SYS_SETGID = 144 + SYS_SETREUID = 145 + SYS_SETUID = 146 + SYS_SETRESUID = 147 + SYS_GETRESUID = 148 + SYS_SETRESGID = 149 + SYS_GETRESGID = 150 + SYS_SETFSUID = 151 + SYS_SETFSGID = 152 + SYS_TIMES = 153 + SYS_SETPGID = 154 + SYS_GETPGID = 155 + SYS_GETSID = 156 + SYS_SETSID = 157 + SYS_GETGROUPS = 158 + SYS_SETGROUPS = 159 + SYS_UNAME = 160 + SYS_SETHOSTNAME = 161 + SYS_SETDOMAINNAME = 162 + SYS_GETRLIMIT = 163 + SYS_SETRLIMIT = 164 + SYS_GETRUSAGE = 165 + SYS_UMASK = 166 + SYS_PRCTL = 167 + SYS_GETCPU = 168 + SYS_GETTIMEOFDAY = 169 + SYS_SETTIMEOFDAY = 170 + SYS_ADJTIMEX = 171 + SYS_GETPID = 172 + SYS_GETPPID = 173 + SYS_GETUID = 174 + SYS_GETEUID = 175 + SYS_GETGID = 176 + SYS_GETEGID = 177 + SYS_GETTID = 178 + SYS_SYSINFO = 179 + SYS_MQ_OPEN = 180 + SYS_MQ_UNLINK = 181 + SYS_MQ_TIMEDSEND = 182 + SYS_MQ_TIMEDRECEIVE = 183 + SYS_MQ_NOTIFY = 184 + SYS_MQ_GETSETATTR = 185 + SYS_MSGGET = 186 + SYS_MSGCTL = 187 + SYS_MSGRCV = 188 + SYS_MSGSND = 189 + SYS_SEMGET = 190 + SYS_SEMCTL = 191 + SYS_SEMTIMEDOP = 192 + SYS_SEMOP = 193 + SYS_SHMGET = 194 + SYS_SHMCTL = 195 + SYS_SHMAT = 196 + SYS_SHMDT = 197 + SYS_SOCKET = 198 + SYS_SOCKETPAIR = 199 + SYS_BIND = 200 + SYS_LISTEN = 201 + SYS_ACCEPT = 202 + SYS_CONNECT = 203 + SYS_GETSOCKNAME = 204 + SYS_GETPEERNAME = 205 + SYS_SENDTO = 206 + SYS_RECVFROM = 207 + SYS_SETSOCKOPT = 208 + SYS_GETSOCKOPT = 209 + SYS_SHUTDOWN = 210 + SYS_SENDMSG = 211 + SYS_RECVMSG = 212 + SYS_READAHEAD = 213 + SYS_BRK = 214 + SYS_MUNMAP = 215 + SYS_MREMAP = 216 + SYS_ADD_KEY = 217 + SYS_REQUEST_KEY = 218 + SYS_KEYCTL = 219 + SYS_CLONE = 220 + SYS_EXECVE = 221 + SYS_MMAP = 222 + SYS_FADVISE64 = 223 + SYS_SWAPON = 224 + SYS_SWAPOFF = 225 + SYS_MPROTECT = 226 + SYS_MSYNC = 227 + SYS_MLOCK = 228 + SYS_MUNLOCK = 229 + SYS_MLOCKALL = 230 + SYS_MUNLOCKALL = 231 + SYS_MINCORE = 232 + SYS_MADVISE = 233 + SYS_REMAP_FILE_PAGES = 234 + SYS_MBIND = 235 + SYS_GET_MEMPOLICY = 236 + SYS_SET_MEMPOLICY = 237 + SYS_MIGRATE_PAGES = 238 + SYS_MOVE_PAGES = 239 + SYS_RT_TGSIGQUEUEINFO = 240 + SYS_PERF_EVENT_OPEN = 241 + SYS_ACCEPT4 = 242 + SYS_RECVMMSG = 243 + SYS_ARCH_SPECIFIC_SYSCALL = 244 + SYS_WAIT4 = 260 + SYS_PRLIMIT64 = 261 + SYS_FANOTIFY_INIT = 262 + SYS_FANOTIFY_MARK = 263 + SYS_NAME_TO_HANDLE_AT = 264 + SYS_OPEN_BY_HANDLE_AT = 265 + SYS_CLOCK_ADJTIME = 266 + SYS_SYNCFS = 267 + SYS_SETNS = 268 + SYS_SENDMMSG = 269 + SYS_PROCESS_VM_READV = 270 + SYS_PROCESS_VM_WRITEV = 271 + SYS_KCMP = 272 + SYS_FINIT_MODULE = 273 + SYS_SCHED_SETATTR = 274 + SYS_SCHED_GETATTR = 275 + SYS_RENAMEAT2 = 276 + SYS_SECCOMP = 277 + SYS_GETRANDOM = 278 + SYS_MEMFD_CREATE = 279 + SYS_BPF = 280 + SYS_EXECVEAT = 281 + SYS_USERFAULTFD = 282 + SYS_MEMBARRIER = 283 + SYS_MLOCK2 = 284 + SYS_COPY_FILE_RANGE = 285 + SYS_PREADV2 = 286 + SYS_PWRITEV2 = 287 + SYS_PKEY_MPROTECT = 288 + SYS_PKEY_ALLOC = 289 + SYS_PKEY_FREE = 290 + SYS_STATX = 291 + SYS_IO_PGETEVENTS = 292 + SYS_RSEQ = 293 + SYS_KEXEC_FILE_LOAD = 294 + SYS_PIDFD_SEND_SIGNAL = 424 + SYS_IO_URING_SETUP = 425 + SYS_IO_URING_ENTER = 426 + SYS_IO_URING_REGISTER = 427 + SYS_OPEN_TREE = 428 + SYS_MOVE_MOUNT = 429 + SYS_FSOPEN = 430 + SYS_FSCONFIG = 431 + SYS_FSMOUNT = 432 + SYS_FSPICK = 433 + SYS_PIDFD_OPEN = 434 + SYS_CLONE3 = 435 + SYS_CLOSE_RANGE = 436 + SYS_OPENAT2 = 437 + SYS_PIDFD_GETFD = 438 + SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 + SYS_EPOLL_PWAIT2 = 441 + SYS_MOUNT_SETATTR = 442 + SYS_QUOTACTL_FD = 443 + SYS_LANDLOCK_CREATE_RULESET = 444 + SYS_LANDLOCK_ADD_RULE = 445 + SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_MEMFD_SECRET = 447 + SYS_PROCESS_MRELEASE = 448 + SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go new file mode 100644 index 0000000..65a99ef --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go @@ -0,0 +1,434 @@ +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build mips && linux +// +build mips,linux + +package unix + +const ( + SYS_SYSCALL = 4000 + SYS_EXIT = 4001 + SYS_FORK = 4002 + SYS_READ = 4003 + SYS_WRITE = 4004 + SYS_OPEN = 4005 + SYS_CLOSE = 4006 + SYS_WAITPID = 4007 + SYS_CREAT = 4008 + SYS_LINK = 4009 + SYS_UNLINK = 4010 + SYS_EXECVE = 4011 + SYS_CHDIR = 4012 + SYS_TIME = 4013 + SYS_MKNOD = 4014 + SYS_CHMOD = 4015 + SYS_LCHOWN = 4016 + SYS_BREAK = 4017 + SYS_UNUSED18 = 4018 + SYS_LSEEK = 4019 + SYS_GETPID = 4020 + SYS_MOUNT = 4021 + SYS_UMOUNT = 4022 + SYS_SETUID = 4023 + SYS_GETUID = 4024 + SYS_STIME = 4025 + SYS_PTRACE = 4026 + SYS_ALARM = 4027 + SYS_UNUSED28 = 4028 + SYS_PAUSE = 4029 + SYS_UTIME = 4030 + SYS_STTY = 4031 + SYS_GTTY = 4032 + SYS_ACCESS = 4033 + SYS_NICE = 4034 + SYS_FTIME = 4035 + SYS_SYNC = 4036 + SYS_KILL = 4037 + SYS_RENAME = 4038 + SYS_MKDIR = 4039 + SYS_RMDIR = 4040 + SYS_DUP = 4041 + SYS_PIPE = 4042 + SYS_TIMES = 4043 + SYS_PROF = 4044 + SYS_BRK = 4045 + SYS_SETGID = 4046 + SYS_GETGID = 4047 + SYS_SIGNAL = 4048 + SYS_GETEUID = 4049 + SYS_GETEGID = 4050 + SYS_ACCT = 4051 + SYS_UMOUNT2 = 4052 + SYS_LOCK = 4053 + SYS_IOCTL = 4054 + SYS_FCNTL = 4055 + SYS_MPX = 4056 + SYS_SETPGID = 4057 + SYS_ULIMIT = 4058 + SYS_UNUSED59 = 4059 + SYS_UMASK = 4060 + SYS_CHROOT = 4061 + SYS_USTAT = 4062 + SYS_DUP2 = 4063 + SYS_GETPPID = 4064 + SYS_GETPGRP = 4065 + SYS_SETSID = 4066 + SYS_SIGACTION = 4067 + SYS_SGETMASK = 4068 + SYS_SSETMASK = 4069 + SYS_SETREUID = 4070 + SYS_SETREGID = 4071 + SYS_SIGSUSPEND = 4072 + SYS_SIGPENDING = 4073 + SYS_SETHOSTNAME = 4074 + SYS_SETRLIMIT = 4075 + SYS_GETRLIMIT = 4076 + SYS_GETRUSAGE = 4077 + SYS_GETTIMEOFDAY = 4078 + SYS_SETTIMEOFDAY = 4079 + SYS_GETGROUPS = 4080 + SYS_SETGROUPS = 4081 + SYS_RESERVED82 = 4082 + SYS_SYMLINK = 4083 + SYS_UNUSED84 = 4084 + SYS_READLINK = 4085 + SYS_USELIB = 4086 + SYS_SWAPON = 4087 + SYS_REBOOT = 4088 + SYS_READDIR = 4089 + SYS_MMAP = 4090 + SYS_MUNMAP = 4091 + SYS_TRUNCATE = 4092 + SYS_FTRUNCATE = 4093 + SYS_FCHMOD = 4094 + SYS_FCHOWN = 4095 + SYS_GETPRIORITY = 4096 + SYS_SETPRIORITY = 4097 + SYS_PROFIL = 4098 + SYS_STATFS = 4099 + SYS_FSTATFS = 4100 + SYS_IOPERM = 4101 + SYS_SOCKETCALL = 4102 + SYS_SYSLOG = 4103 + SYS_SETITIMER = 4104 + SYS_GETITIMER = 4105 + SYS_STAT = 4106 + SYS_LSTAT = 4107 + SYS_FSTAT = 4108 + SYS_UNUSED109 = 4109 + SYS_IOPL = 4110 + SYS_VHANGUP = 4111 + SYS_IDLE = 4112 + SYS_VM86 = 4113 + SYS_WAIT4 = 4114 + SYS_SWAPOFF = 4115 + SYS_SYSINFO = 4116 + SYS_IPC = 4117 + SYS_FSYNC = 4118 + SYS_SIGRETURN = 4119 + SYS_CLONE = 4120 + SYS_SETDOMAINNAME = 4121 + SYS_UNAME = 4122 + SYS_MODIFY_LDT = 4123 + SYS_ADJTIMEX = 4124 + SYS_MPROTECT = 4125 + SYS_SIGPROCMASK = 4126 + SYS_CREATE_MODULE = 4127 + SYS_INIT_MODULE = 4128 + SYS_DELETE_MODULE = 4129 + SYS_GET_KERNEL_SYMS = 4130 + SYS_QUOTACTL = 4131 + SYS_GETPGID = 4132 + SYS_FCHDIR = 4133 + SYS_BDFLUSH = 4134 + SYS_SYSFS = 4135 + SYS_PERSONALITY = 4136 + SYS_AFS_SYSCALL = 4137 + SYS_SETFSUID = 4138 + SYS_SETFSGID = 4139 + SYS__LLSEEK = 4140 + SYS_GETDENTS = 4141 + SYS__NEWSELECT = 4142 + SYS_FLOCK = 4143 + SYS_MSYNC = 4144 + SYS_READV = 4145 + SYS_WRITEV = 4146 + SYS_CACHEFLUSH = 4147 + SYS_CACHECTL = 4148 + SYS_SYSMIPS = 4149 + SYS_UNUSED150 = 4150 + SYS_GETSID = 4151 + SYS_FDATASYNC = 4152 + SYS__SYSCTL = 4153 + SYS_MLOCK = 4154 + SYS_MUNLOCK = 4155 + SYS_MLOCKALL = 4156 + SYS_MUNLOCKALL = 4157 + SYS_SCHED_SETPARAM = 4158 + SYS_SCHED_GETPARAM = 4159 + SYS_SCHED_SETSCHEDULER = 4160 + SYS_SCHED_GETSCHEDULER = 4161 + SYS_SCHED_YIELD = 4162 + SYS_SCHED_GET_PRIORITY_MAX = 4163 + SYS_SCHED_GET_PRIORITY_MIN = 4164 + SYS_SCHED_RR_GET_INTERVAL = 4165 + SYS_NANOSLEEP = 4166 + SYS_MREMAP = 4167 + SYS_ACCEPT = 4168 + SYS_BIND = 4169 + SYS_CONNECT = 4170 + SYS_GETPEERNAME = 4171 + SYS_GETSOCKNAME = 4172 + SYS_GETSOCKOPT = 4173 + SYS_LISTEN = 4174 + SYS_RECV = 4175 + SYS_RECVFROM = 4176 + SYS_RECVMSG = 4177 + SYS_SEND = 4178 + SYS_SENDMSG = 4179 + SYS_SENDTO = 4180 + SYS_SETSOCKOPT = 4181 + SYS_SHUTDOWN = 4182 + SYS_SOCKET = 4183 + SYS_SOCKETPAIR = 4184 + SYS_SETRESUID = 4185 + SYS_GETRESUID = 4186 + SYS_QUERY_MODULE = 4187 + SYS_POLL = 4188 + SYS_NFSSERVCTL = 4189 + SYS_SETRESGID = 4190 + SYS_GETRESGID = 4191 + SYS_PRCTL = 4192 + SYS_RT_SIGRETURN = 4193 + SYS_RT_SIGACTION = 4194 + SYS_RT_SIGPROCMASK = 4195 + SYS_RT_SIGPENDING = 4196 + SYS_RT_SIGTIMEDWAIT = 4197 + SYS_RT_SIGQUEUEINFO = 4198 + SYS_RT_SIGSUSPEND = 4199 + SYS_PREAD64 = 4200 + SYS_PWRITE64 = 4201 + SYS_CHOWN = 4202 + SYS_GETCWD = 4203 + SYS_CAPGET = 4204 + SYS_CAPSET = 4205 + SYS_SIGALTSTACK = 4206 + SYS_SENDFILE = 4207 + SYS_GETPMSG = 4208 + SYS_PUTPMSG = 4209 + SYS_MMAP2 = 4210 + SYS_TRUNCATE64 = 4211 + SYS_FTRUNCATE64 = 4212 + SYS_STAT64 = 4213 + SYS_LSTAT64 = 4214 + SYS_FSTAT64 = 4215 + SYS_PIVOT_ROOT = 4216 + SYS_MINCORE = 4217 + SYS_MADVISE = 4218 + SYS_GETDENTS64 = 4219 + SYS_FCNTL64 = 4220 + SYS_RESERVED221 = 4221 + SYS_GETTID = 4222 + SYS_READAHEAD = 4223 + SYS_SETXATTR = 4224 + SYS_LSETXATTR = 4225 + SYS_FSETXATTR = 4226 + SYS_GETXATTR = 4227 + SYS_LGETXATTR = 4228 + SYS_FGETXATTR = 4229 + SYS_LISTXATTR = 4230 + SYS_LLISTXATTR = 4231 + SYS_FLISTXATTR = 4232 + SYS_REMOVEXATTR = 4233 + SYS_LREMOVEXATTR = 4234 + SYS_FREMOVEXATTR = 4235 + SYS_TKILL = 4236 + SYS_SENDFILE64 = 4237 + SYS_FUTEX = 4238 + SYS_SCHED_SETAFFINITY = 4239 + SYS_SCHED_GETAFFINITY = 4240 + SYS_IO_SETUP = 4241 + SYS_IO_DESTROY = 4242 + SYS_IO_GETEVENTS = 4243 + SYS_IO_SUBMIT = 4244 + SYS_IO_CANCEL = 4245 + SYS_EXIT_GROUP = 4246 + SYS_LOOKUP_DCOOKIE = 4247 + SYS_EPOLL_CREATE = 4248 + SYS_EPOLL_CTL = 4249 + SYS_EPOLL_WAIT = 4250 + SYS_REMAP_FILE_PAGES = 4251 + SYS_SET_TID_ADDRESS = 4252 + SYS_RESTART_SYSCALL = 4253 + SYS_FADVISE64 = 4254 + SYS_STATFS64 = 4255 + SYS_FSTATFS64 = 4256 + SYS_TIMER_CREATE = 4257 + SYS_TIMER_SETTIME = 4258 + SYS_TIMER_GETTIME = 4259 + SYS_TIMER_GETOVERRUN = 4260 + SYS_TIMER_DELETE = 4261 + SYS_CLOCK_SETTIME = 4262 + SYS_CLOCK_GETTIME = 4263 + SYS_CLOCK_GETRES = 4264 + SYS_CLOCK_NANOSLEEP = 4265 + SYS_TGKILL = 4266 + SYS_UTIMES = 4267 + SYS_MBIND = 4268 + SYS_GET_MEMPOLICY = 4269 + SYS_SET_MEMPOLICY = 4270 + SYS_MQ_OPEN = 4271 + SYS_MQ_UNLINK = 4272 + SYS_MQ_TIMEDSEND = 4273 + SYS_MQ_TIMEDRECEIVE = 4274 + SYS_MQ_NOTIFY = 4275 + SYS_MQ_GETSETATTR = 4276 + SYS_VSERVER = 4277 + SYS_WAITID = 4278 + SYS_ADD_KEY = 4280 + SYS_REQUEST_KEY = 4281 + SYS_KEYCTL = 4282 + SYS_SET_THREAD_AREA = 4283 + SYS_INOTIFY_INIT = 4284 + SYS_INOTIFY_ADD_WATCH = 4285 + SYS_INOTIFY_RM_WATCH = 4286 + SYS_MIGRATE_PAGES = 4287 + SYS_OPENAT = 4288 + SYS_MKDIRAT = 4289 + SYS_MKNODAT = 4290 + SYS_FCHOWNAT = 4291 + SYS_FUTIMESAT = 4292 + SYS_FSTATAT64 = 4293 + SYS_UNLINKAT = 4294 + SYS_RENAMEAT = 4295 + SYS_LINKAT = 4296 + SYS_SYMLINKAT = 4297 + SYS_READLINKAT = 4298 + SYS_FCHMODAT = 4299 + SYS_FACCESSAT = 4300 + SYS_PSELECT6 = 4301 + SYS_PPOLL = 4302 + SYS_UNSHARE = 4303 + SYS_SPLICE = 4304 + SYS_SYNC_FILE_RANGE = 4305 + SYS_TEE = 4306 + SYS_VMSPLICE = 4307 + SYS_MOVE_PAGES = 4308 + SYS_SET_ROBUST_LIST = 4309 + SYS_GET_ROBUST_LIST = 4310 + SYS_KEXEC_LOAD = 4311 + SYS_GETCPU = 4312 + SYS_EPOLL_PWAIT = 4313 + SYS_IOPRIO_SET = 4314 + SYS_IOPRIO_GET = 4315 + SYS_UTIMENSAT = 4316 + SYS_SIGNALFD = 4317 + SYS_TIMERFD = 4318 + SYS_EVENTFD = 4319 + SYS_FALLOCATE = 4320 + SYS_TIMERFD_CREATE = 4321 + SYS_TIMERFD_GETTIME = 4322 + SYS_TIMERFD_SETTIME = 4323 + SYS_SIGNALFD4 = 4324 + SYS_EVENTFD2 = 4325 + SYS_EPOLL_CREATE1 = 4326 + SYS_DUP3 = 4327 + SYS_PIPE2 = 4328 + SYS_INOTIFY_INIT1 = 4329 + SYS_PREADV = 4330 + SYS_PWRITEV = 4331 + SYS_RT_TGSIGQUEUEINFO = 4332 + SYS_PERF_EVENT_OPEN = 4333 + SYS_ACCEPT4 = 4334 + SYS_RECVMMSG = 4335 + SYS_FANOTIFY_INIT = 4336 + SYS_FANOTIFY_MARK = 4337 + SYS_PRLIMIT64 = 4338 + SYS_NAME_TO_HANDLE_AT = 4339 + SYS_OPEN_BY_HANDLE_AT = 4340 + SYS_CLOCK_ADJTIME = 4341 + SYS_SYNCFS = 4342 + SYS_SENDMMSG = 4343 + SYS_SETNS = 4344 + SYS_PROCESS_VM_READV = 4345 + SYS_PROCESS_VM_WRITEV = 4346 + SYS_KCMP = 4347 + SYS_FINIT_MODULE = 4348 + SYS_SCHED_SETATTR = 4349 + SYS_SCHED_GETATTR = 4350 + SYS_RENAMEAT2 = 4351 + SYS_SECCOMP = 4352 + SYS_GETRANDOM = 4353 + SYS_MEMFD_CREATE = 4354 + SYS_BPF = 4355 + SYS_EXECVEAT = 4356 + SYS_USERFAULTFD = 4357 + SYS_MEMBARRIER = 4358 + SYS_MLOCK2 = 4359 + SYS_COPY_FILE_RANGE = 4360 + SYS_PREADV2 = 4361 + SYS_PWRITEV2 = 4362 + SYS_PKEY_MPROTECT = 4363 + SYS_PKEY_ALLOC = 4364 + SYS_PKEY_FREE = 4365 + SYS_STATX = 4366 + SYS_RSEQ = 4367 + SYS_IO_PGETEVENTS = 4368 + SYS_SEMGET = 4393 + SYS_SEMCTL = 4394 + SYS_SHMGET = 4395 + SYS_SHMCTL = 4396 + SYS_SHMAT = 4397 + SYS_SHMDT = 4398 + SYS_MSGGET = 4399 + SYS_MSGSND = 4400 + SYS_MSGRCV = 4401 + SYS_MSGCTL = 4402 + SYS_CLOCK_GETTIME64 = 4403 + SYS_CLOCK_SETTIME64 = 4404 + SYS_CLOCK_ADJTIME64 = 4405 + SYS_CLOCK_GETRES_TIME64 = 4406 + SYS_CLOCK_NANOSLEEP_TIME64 = 4407 + SYS_TIMER_GETTIME64 = 4408 + SYS_TIMER_SETTIME64 = 4409 + SYS_TIMERFD_GETTIME64 = 4410 + SYS_TIMERFD_SETTIME64 = 4411 + SYS_UTIMENSAT_TIME64 = 4412 + SYS_PSELECT6_TIME64 = 4413 + SYS_PPOLL_TIME64 = 4414 + SYS_IO_PGETEVENTS_TIME64 = 4416 + SYS_RECVMMSG_TIME64 = 4417 + SYS_MQ_TIMEDSEND_TIME64 = 4418 + SYS_MQ_TIMEDRECEIVE_TIME64 = 4419 + SYS_SEMTIMEDOP_TIME64 = 4420 + SYS_RT_SIGTIMEDWAIT_TIME64 = 4421 + SYS_FUTEX_TIME64 = 4422 + SYS_SCHED_RR_GET_INTERVAL_TIME64 = 4423 + SYS_PIDFD_SEND_SIGNAL = 4424 + SYS_IO_URING_SETUP = 4425 + SYS_IO_URING_ENTER = 4426 + SYS_IO_URING_REGISTER = 4427 + SYS_OPEN_TREE = 4428 + SYS_MOVE_MOUNT = 4429 + SYS_FSOPEN = 4430 + SYS_FSCONFIG = 4431 + SYS_FSMOUNT = 4432 + SYS_FSPICK = 4433 + SYS_PIDFD_OPEN = 4434 + SYS_CLONE3 = 4435 + SYS_CLOSE_RANGE = 4436 + SYS_OPENAT2 = 4437 + SYS_PIDFD_GETFD = 4438 + SYS_FACCESSAT2 = 4439 + SYS_PROCESS_MADVISE = 4440 + SYS_EPOLL_PWAIT2 = 4441 + SYS_MOUNT_SETATTR = 4442 + SYS_QUOTACTL_FD = 4443 + SYS_LANDLOCK_CREATE_RULESET = 4444 + SYS_LANDLOCK_ADD_RULE = 4445 + SYS_LANDLOCK_RESTRICT_SELF = 4446 + SYS_PROCESS_MRELEASE = 4448 + SYS_FUTEX_WAITV = 4449 + SYS_SET_MEMPOLICY_HOME_NODE = 4450 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go new file mode 100644 index 0000000..841c8a6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go @@ -0,0 +1,364 @@ +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build mips64 && linux +// +build mips64,linux + +package unix + +const ( + SYS_READ = 5000 + SYS_WRITE = 5001 + SYS_OPEN = 5002 + SYS_CLOSE = 5003 + SYS_STAT = 5004 + SYS_FSTAT = 5005 + SYS_LSTAT = 5006 + SYS_POLL = 5007 + SYS_LSEEK = 5008 + SYS_MMAP = 5009 + SYS_MPROTECT = 5010 + SYS_MUNMAP = 5011 + SYS_BRK = 5012 + SYS_RT_SIGACTION = 5013 + SYS_RT_SIGPROCMASK = 5014 + SYS_IOCTL = 5015 + SYS_PREAD64 = 5016 + SYS_PWRITE64 = 5017 + SYS_READV = 5018 + SYS_WRITEV = 5019 + SYS_ACCESS = 5020 + SYS_PIPE = 5021 + SYS__NEWSELECT = 5022 + SYS_SCHED_YIELD = 5023 + SYS_MREMAP = 5024 + SYS_MSYNC = 5025 + SYS_MINCORE = 5026 + SYS_MADVISE = 5027 + SYS_SHMGET = 5028 + SYS_SHMAT = 5029 + SYS_SHMCTL = 5030 + SYS_DUP = 5031 + SYS_DUP2 = 5032 + SYS_PAUSE = 5033 + SYS_NANOSLEEP = 5034 + SYS_GETITIMER = 5035 + SYS_SETITIMER = 5036 + SYS_ALARM = 5037 + SYS_GETPID = 5038 + SYS_SENDFILE = 5039 + SYS_SOCKET = 5040 + SYS_CONNECT = 5041 + SYS_ACCEPT = 5042 + SYS_SENDTO = 5043 + SYS_RECVFROM = 5044 + SYS_SENDMSG = 5045 + SYS_RECVMSG = 5046 + SYS_SHUTDOWN = 5047 + SYS_BIND = 5048 + SYS_LISTEN = 5049 + SYS_GETSOCKNAME = 5050 + SYS_GETPEERNAME = 5051 + SYS_SOCKETPAIR = 5052 + SYS_SETSOCKOPT = 5053 + SYS_GETSOCKOPT = 5054 + SYS_CLONE = 5055 + SYS_FORK = 5056 + SYS_EXECVE = 5057 + SYS_EXIT = 5058 + SYS_WAIT4 = 5059 + SYS_KILL = 5060 + SYS_UNAME = 5061 + SYS_SEMGET = 5062 + SYS_SEMOP = 5063 + SYS_SEMCTL = 5064 + SYS_SHMDT = 5065 + SYS_MSGGET = 5066 + SYS_MSGSND = 5067 + SYS_MSGRCV = 5068 + SYS_MSGCTL = 5069 + SYS_FCNTL = 5070 + SYS_FLOCK = 5071 + SYS_FSYNC = 5072 + SYS_FDATASYNC = 5073 + SYS_TRUNCATE = 5074 + SYS_FTRUNCATE = 5075 + SYS_GETDENTS = 5076 + SYS_GETCWD = 5077 + SYS_CHDIR = 5078 + SYS_FCHDIR = 5079 + SYS_RENAME = 5080 + SYS_MKDIR = 5081 + SYS_RMDIR = 5082 + SYS_CREAT = 5083 + SYS_LINK = 5084 + SYS_UNLINK = 5085 + SYS_SYMLINK = 5086 + SYS_READLINK = 5087 + SYS_CHMOD = 5088 + SYS_FCHMOD = 5089 + SYS_CHOWN = 5090 + SYS_FCHOWN = 5091 + SYS_LCHOWN = 5092 + SYS_UMASK = 5093 + SYS_GETTIMEOFDAY = 5094 + SYS_GETRLIMIT = 5095 + SYS_GETRUSAGE = 5096 + SYS_SYSINFO = 5097 + SYS_TIMES = 5098 + SYS_PTRACE = 5099 + SYS_GETUID = 5100 + SYS_SYSLOG = 5101 + SYS_GETGID = 5102 + SYS_SETUID = 5103 + SYS_SETGID = 5104 + SYS_GETEUID = 5105 + SYS_GETEGID = 5106 + SYS_SETPGID = 5107 + SYS_GETPPID = 5108 + SYS_GETPGRP = 5109 + SYS_SETSID = 5110 + SYS_SETREUID = 5111 + SYS_SETREGID = 5112 + SYS_GETGROUPS = 5113 + SYS_SETGROUPS = 5114 + SYS_SETRESUID = 5115 + SYS_GETRESUID = 5116 + SYS_SETRESGID = 5117 + SYS_GETRESGID = 5118 + SYS_GETPGID = 5119 + SYS_SETFSUID = 5120 + SYS_SETFSGID = 5121 + SYS_GETSID = 5122 + SYS_CAPGET = 5123 + SYS_CAPSET = 5124 + SYS_RT_SIGPENDING = 5125 + SYS_RT_SIGTIMEDWAIT = 5126 + SYS_RT_SIGQUEUEINFO = 5127 + SYS_RT_SIGSUSPEND = 5128 + SYS_SIGALTSTACK = 5129 + SYS_UTIME = 5130 + SYS_MKNOD = 5131 + SYS_PERSONALITY = 5132 + SYS_USTAT = 5133 + SYS_STATFS = 5134 + SYS_FSTATFS = 5135 + SYS_SYSFS = 5136 + SYS_GETPRIORITY = 5137 + SYS_SETPRIORITY = 5138 + SYS_SCHED_SETPARAM = 5139 + SYS_SCHED_GETPARAM = 5140 + SYS_SCHED_SETSCHEDULER = 5141 + SYS_SCHED_GETSCHEDULER = 5142 + SYS_SCHED_GET_PRIORITY_MAX = 5143 + SYS_SCHED_GET_PRIORITY_MIN = 5144 + SYS_SCHED_RR_GET_INTERVAL = 5145 + SYS_MLOCK = 5146 + SYS_MUNLOCK = 5147 + SYS_MLOCKALL = 5148 + SYS_MUNLOCKALL = 5149 + SYS_VHANGUP = 5150 + SYS_PIVOT_ROOT = 5151 + SYS__SYSCTL = 5152 + SYS_PRCTL = 5153 + SYS_ADJTIMEX = 5154 + SYS_SETRLIMIT = 5155 + SYS_CHROOT = 5156 + SYS_SYNC = 5157 + SYS_ACCT = 5158 + SYS_SETTIMEOFDAY = 5159 + SYS_MOUNT = 5160 + SYS_UMOUNT2 = 5161 + SYS_SWAPON = 5162 + SYS_SWAPOFF = 5163 + SYS_REBOOT = 5164 + SYS_SETHOSTNAME = 5165 + SYS_SETDOMAINNAME = 5166 + SYS_CREATE_MODULE = 5167 + SYS_INIT_MODULE = 5168 + SYS_DELETE_MODULE = 5169 + SYS_GET_KERNEL_SYMS = 5170 + SYS_QUERY_MODULE = 5171 + SYS_QUOTACTL = 5172 + SYS_NFSSERVCTL = 5173 + SYS_GETPMSG = 5174 + SYS_PUTPMSG = 5175 + SYS_AFS_SYSCALL = 5176 + SYS_RESERVED177 = 5177 + SYS_GETTID = 5178 + SYS_READAHEAD = 5179 + SYS_SETXATTR = 5180 + SYS_LSETXATTR = 5181 + SYS_FSETXATTR = 5182 + SYS_GETXATTR = 5183 + SYS_LGETXATTR = 5184 + SYS_FGETXATTR = 5185 + SYS_LISTXATTR = 5186 + SYS_LLISTXATTR = 5187 + SYS_FLISTXATTR = 5188 + SYS_REMOVEXATTR = 5189 + SYS_LREMOVEXATTR = 5190 + SYS_FREMOVEXATTR = 5191 + SYS_TKILL = 5192 + SYS_RESERVED193 = 5193 + SYS_FUTEX = 5194 + SYS_SCHED_SETAFFINITY = 5195 + SYS_SCHED_GETAFFINITY = 5196 + SYS_CACHEFLUSH = 5197 + SYS_CACHECTL = 5198 + SYS_SYSMIPS = 5199 + SYS_IO_SETUP = 5200 + SYS_IO_DESTROY = 5201 + SYS_IO_GETEVENTS = 5202 + SYS_IO_SUBMIT = 5203 + SYS_IO_CANCEL = 5204 + SYS_EXIT_GROUP = 5205 + SYS_LOOKUP_DCOOKIE = 5206 + SYS_EPOLL_CREATE = 5207 + SYS_EPOLL_CTL = 5208 + SYS_EPOLL_WAIT = 5209 + SYS_REMAP_FILE_PAGES = 5210 + SYS_RT_SIGRETURN = 5211 + SYS_SET_TID_ADDRESS = 5212 + SYS_RESTART_SYSCALL = 5213 + SYS_SEMTIMEDOP = 5214 + SYS_FADVISE64 = 5215 + SYS_TIMER_CREATE = 5216 + SYS_TIMER_SETTIME = 5217 + SYS_TIMER_GETTIME = 5218 + SYS_TIMER_GETOVERRUN = 5219 + SYS_TIMER_DELETE = 5220 + SYS_CLOCK_SETTIME = 5221 + SYS_CLOCK_GETTIME = 5222 + SYS_CLOCK_GETRES = 5223 + SYS_CLOCK_NANOSLEEP = 5224 + SYS_TGKILL = 5225 + SYS_UTIMES = 5226 + SYS_MBIND = 5227 + SYS_GET_MEMPOLICY = 5228 + SYS_SET_MEMPOLICY = 5229 + SYS_MQ_OPEN = 5230 + SYS_MQ_UNLINK = 5231 + SYS_MQ_TIMEDSEND = 5232 + SYS_MQ_TIMEDRECEIVE = 5233 + SYS_MQ_NOTIFY = 5234 + SYS_MQ_GETSETATTR = 5235 + SYS_VSERVER = 5236 + SYS_WAITID = 5237 + SYS_ADD_KEY = 5239 + SYS_REQUEST_KEY = 5240 + SYS_KEYCTL = 5241 + SYS_SET_THREAD_AREA = 5242 + SYS_INOTIFY_INIT = 5243 + SYS_INOTIFY_ADD_WATCH = 5244 + SYS_INOTIFY_RM_WATCH = 5245 + SYS_MIGRATE_PAGES = 5246 + SYS_OPENAT = 5247 + SYS_MKDIRAT = 5248 + SYS_MKNODAT = 5249 + SYS_FCHOWNAT = 5250 + SYS_FUTIMESAT = 5251 + SYS_NEWFSTATAT = 5252 + SYS_UNLINKAT = 5253 + SYS_RENAMEAT = 5254 + SYS_LINKAT = 5255 + SYS_SYMLINKAT = 5256 + SYS_READLINKAT = 5257 + SYS_FCHMODAT = 5258 + SYS_FACCESSAT = 5259 + SYS_PSELECT6 = 5260 + SYS_PPOLL = 5261 + SYS_UNSHARE = 5262 + SYS_SPLICE = 5263 + SYS_SYNC_FILE_RANGE = 5264 + SYS_TEE = 5265 + SYS_VMSPLICE = 5266 + SYS_MOVE_PAGES = 5267 + SYS_SET_ROBUST_LIST = 5268 + SYS_GET_ROBUST_LIST = 5269 + SYS_KEXEC_LOAD = 5270 + SYS_GETCPU = 5271 + SYS_EPOLL_PWAIT = 5272 + SYS_IOPRIO_SET = 5273 + SYS_IOPRIO_GET = 5274 + SYS_UTIMENSAT = 5275 + SYS_SIGNALFD = 5276 + SYS_TIMERFD = 5277 + SYS_EVENTFD = 5278 + SYS_FALLOCATE = 5279 + SYS_TIMERFD_CREATE = 5280 + SYS_TIMERFD_GETTIME = 5281 + SYS_TIMERFD_SETTIME = 5282 + SYS_SIGNALFD4 = 5283 + SYS_EVENTFD2 = 5284 + SYS_EPOLL_CREATE1 = 5285 + SYS_DUP3 = 5286 + SYS_PIPE2 = 5287 + SYS_INOTIFY_INIT1 = 5288 + SYS_PREADV = 5289 + SYS_PWRITEV = 5290 + SYS_RT_TGSIGQUEUEINFO = 5291 + SYS_PERF_EVENT_OPEN = 5292 + SYS_ACCEPT4 = 5293 + SYS_RECVMMSG = 5294 + SYS_FANOTIFY_INIT = 5295 + SYS_FANOTIFY_MARK = 5296 + SYS_PRLIMIT64 = 5297 + SYS_NAME_TO_HANDLE_AT = 5298 + SYS_OPEN_BY_HANDLE_AT = 5299 + SYS_CLOCK_ADJTIME = 5300 + SYS_SYNCFS = 5301 + SYS_SENDMMSG = 5302 + SYS_SETNS = 5303 + SYS_PROCESS_VM_READV = 5304 + SYS_PROCESS_VM_WRITEV = 5305 + SYS_KCMP = 5306 + SYS_FINIT_MODULE = 5307 + SYS_GETDENTS64 = 5308 + SYS_SCHED_SETATTR = 5309 + SYS_SCHED_GETATTR = 5310 + SYS_RENAMEAT2 = 5311 + SYS_SECCOMP = 5312 + SYS_GETRANDOM = 5313 + SYS_MEMFD_CREATE = 5314 + SYS_BPF = 5315 + SYS_EXECVEAT = 5316 + SYS_USERFAULTFD = 5317 + SYS_MEMBARRIER = 5318 + SYS_MLOCK2 = 5319 + SYS_COPY_FILE_RANGE = 5320 + SYS_PREADV2 = 5321 + SYS_PWRITEV2 = 5322 + SYS_PKEY_MPROTECT = 5323 + SYS_PKEY_ALLOC = 5324 + SYS_PKEY_FREE = 5325 + SYS_STATX = 5326 + SYS_RSEQ = 5327 + SYS_IO_PGETEVENTS = 5328 + SYS_PIDFD_SEND_SIGNAL = 5424 + SYS_IO_URING_SETUP = 5425 + SYS_IO_URING_ENTER = 5426 + SYS_IO_URING_REGISTER = 5427 + SYS_OPEN_TREE = 5428 + SYS_MOVE_MOUNT = 5429 + SYS_FSOPEN = 5430 + SYS_FSCONFIG = 5431 + SYS_FSMOUNT = 5432 + SYS_FSPICK = 5433 + SYS_PIDFD_OPEN = 5434 + SYS_CLONE3 = 5435 + SYS_CLOSE_RANGE = 5436 + SYS_OPENAT2 = 5437 + SYS_PIDFD_GETFD = 5438 + SYS_FACCESSAT2 = 5439 + SYS_PROCESS_MADVISE = 5440 + SYS_EPOLL_PWAIT2 = 5441 + SYS_MOUNT_SETATTR = 5442 + SYS_QUOTACTL_FD = 5443 + SYS_LANDLOCK_CREATE_RULESET = 5444 + SYS_LANDLOCK_ADD_RULE = 5445 + SYS_LANDLOCK_RESTRICT_SELF = 5446 + SYS_PROCESS_MRELEASE = 5448 + SYS_FUTEX_WAITV = 5449 + SYS_SET_MEMPOLICY_HOME_NODE = 5450 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go new file mode 100644 index 0000000..e26a7c7 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go @@ -0,0 +1,364 @@ +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build mips64le && linux +// +build mips64le,linux + +package unix + +const ( + SYS_READ = 5000 + SYS_WRITE = 5001 + SYS_OPEN = 5002 + SYS_CLOSE = 5003 + SYS_STAT = 5004 + SYS_FSTAT = 5005 + SYS_LSTAT = 5006 + SYS_POLL = 5007 + SYS_LSEEK = 5008 + SYS_MMAP = 5009 + SYS_MPROTECT = 5010 + SYS_MUNMAP = 5011 + SYS_BRK = 5012 + SYS_RT_SIGACTION = 5013 + SYS_RT_SIGPROCMASK = 5014 + SYS_IOCTL = 5015 + SYS_PREAD64 = 5016 + SYS_PWRITE64 = 5017 + SYS_READV = 5018 + SYS_WRITEV = 5019 + SYS_ACCESS = 5020 + SYS_PIPE = 5021 + SYS__NEWSELECT = 5022 + SYS_SCHED_YIELD = 5023 + SYS_MREMAP = 5024 + SYS_MSYNC = 5025 + SYS_MINCORE = 5026 + SYS_MADVISE = 5027 + SYS_SHMGET = 5028 + SYS_SHMAT = 5029 + SYS_SHMCTL = 5030 + SYS_DUP = 5031 + SYS_DUP2 = 5032 + SYS_PAUSE = 5033 + SYS_NANOSLEEP = 5034 + SYS_GETITIMER = 5035 + SYS_SETITIMER = 5036 + SYS_ALARM = 5037 + SYS_GETPID = 5038 + SYS_SENDFILE = 5039 + SYS_SOCKET = 5040 + SYS_CONNECT = 5041 + SYS_ACCEPT = 5042 + SYS_SENDTO = 5043 + SYS_RECVFROM = 5044 + SYS_SENDMSG = 5045 + SYS_RECVMSG = 5046 + SYS_SHUTDOWN = 5047 + SYS_BIND = 5048 + SYS_LISTEN = 5049 + SYS_GETSOCKNAME = 5050 + SYS_GETPEERNAME = 5051 + SYS_SOCKETPAIR = 5052 + SYS_SETSOCKOPT = 5053 + SYS_GETSOCKOPT = 5054 + SYS_CLONE = 5055 + SYS_FORK = 5056 + SYS_EXECVE = 5057 + SYS_EXIT = 5058 + SYS_WAIT4 = 5059 + SYS_KILL = 5060 + SYS_UNAME = 5061 + SYS_SEMGET = 5062 + SYS_SEMOP = 5063 + SYS_SEMCTL = 5064 + SYS_SHMDT = 5065 + SYS_MSGGET = 5066 + SYS_MSGSND = 5067 + SYS_MSGRCV = 5068 + SYS_MSGCTL = 5069 + SYS_FCNTL = 5070 + SYS_FLOCK = 5071 + SYS_FSYNC = 5072 + SYS_FDATASYNC = 5073 + SYS_TRUNCATE = 5074 + SYS_FTRUNCATE = 5075 + SYS_GETDENTS = 5076 + SYS_GETCWD = 5077 + SYS_CHDIR = 5078 + SYS_FCHDIR = 5079 + SYS_RENAME = 5080 + SYS_MKDIR = 5081 + SYS_RMDIR = 5082 + SYS_CREAT = 5083 + SYS_LINK = 5084 + SYS_UNLINK = 5085 + SYS_SYMLINK = 5086 + SYS_READLINK = 5087 + SYS_CHMOD = 5088 + SYS_FCHMOD = 5089 + SYS_CHOWN = 5090 + SYS_FCHOWN = 5091 + SYS_LCHOWN = 5092 + SYS_UMASK = 5093 + SYS_GETTIMEOFDAY = 5094 + SYS_GETRLIMIT = 5095 + SYS_GETRUSAGE = 5096 + SYS_SYSINFO = 5097 + SYS_TIMES = 5098 + SYS_PTRACE = 5099 + SYS_GETUID = 5100 + SYS_SYSLOG = 5101 + SYS_GETGID = 5102 + SYS_SETUID = 5103 + SYS_SETGID = 5104 + SYS_GETEUID = 5105 + SYS_GETEGID = 5106 + SYS_SETPGID = 5107 + SYS_GETPPID = 5108 + SYS_GETPGRP = 5109 + SYS_SETSID = 5110 + SYS_SETREUID = 5111 + SYS_SETREGID = 5112 + SYS_GETGROUPS = 5113 + SYS_SETGROUPS = 5114 + SYS_SETRESUID = 5115 + SYS_GETRESUID = 5116 + SYS_SETRESGID = 5117 + SYS_GETRESGID = 5118 + SYS_GETPGID = 5119 + SYS_SETFSUID = 5120 + SYS_SETFSGID = 5121 + SYS_GETSID = 5122 + SYS_CAPGET = 5123 + SYS_CAPSET = 5124 + SYS_RT_SIGPENDING = 5125 + SYS_RT_SIGTIMEDWAIT = 5126 + SYS_RT_SIGQUEUEINFO = 5127 + SYS_RT_SIGSUSPEND = 5128 + SYS_SIGALTSTACK = 5129 + SYS_UTIME = 5130 + SYS_MKNOD = 5131 + SYS_PERSONALITY = 5132 + SYS_USTAT = 5133 + SYS_STATFS = 5134 + SYS_FSTATFS = 5135 + SYS_SYSFS = 5136 + SYS_GETPRIORITY = 5137 + SYS_SETPRIORITY = 5138 + SYS_SCHED_SETPARAM = 5139 + SYS_SCHED_GETPARAM = 5140 + SYS_SCHED_SETSCHEDULER = 5141 + SYS_SCHED_GETSCHEDULER = 5142 + SYS_SCHED_GET_PRIORITY_MAX = 5143 + SYS_SCHED_GET_PRIORITY_MIN = 5144 + SYS_SCHED_RR_GET_INTERVAL = 5145 + SYS_MLOCK = 5146 + SYS_MUNLOCK = 5147 + SYS_MLOCKALL = 5148 + SYS_MUNLOCKALL = 5149 + SYS_VHANGUP = 5150 + SYS_PIVOT_ROOT = 5151 + SYS__SYSCTL = 5152 + SYS_PRCTL = 5153 + SYS_ADJTIMEX = 5154 + SYS_SETRLIMIT = 5155 + SYS_CHROOT = 5156 + SYS_SYNC = 5157 + SYS_ACCT = 5158 + SYS_SETTIMEOFDAY = 5159 + SYS_MOUNT = 5160 + SYS_UMOUNT2 = 5161 + SYS_SWAPON = 5162 + SYS_SWAPOFF = 5163 + SYS_REBOOT = 5164 + SYS_SETHOSTNAME = 5165 + SYS_SETDOMAINNAME = 5166 + SYS_CREATE_MODULE = 5167 + SYS_INIT_MODULE = 5168 + SYS_DELETE_MODULE = 5169 + SYS_GET_KERNEL_SYMS = 5170 + SYS_QUERY_MODULE = 5171 + SYS_QUOTACTL = 5172 + SYS_NFSSERVCTL = 5173 + SYS_GETPMSG = 5174 + SYS_PUTPMSG = 5175 + SYS_AFS_SYSCALL = 5176 + SYS_RESERVED177 = 5177 + SYS_GETTID = 5178 + SYS_READAHEAD = 5179 + SYS_SETXATTR = 5180 + SYS_LSETXATTR = 5181 + SYS_FSETXATTR = 5182 + SYS_GETXATTR = 5183 + SYS_LGETXATTR = 5184 + SYS_FGETXATTR = 5185 + SYS_LISTXATTR = 5186 + SYS_LLISTXATTR = 5187 + SYS_FLISTXATTR = 5188 + SYS_REMOVEXATTR = 5189 + SYS_LREMOVEXATTR = 5190 + SYS_FREMOVEXATTR = 5191 + SYS_TKILL = 5192 + SYS_RESERVED193 = 5193 + SYS_FUTEX = 5194 + SYS_SCHED_SETAFFINITY = 5195 + SYS_SCHED_GETAFFINITY = 5196 + SYS_CACHEFLUSH = 5197 + SYS_CACHECTL = 5198 + SYS_SYSMIPS = 5199 + SYS_IO_SETUP = 5200 + SYS_IO_DESTROY = 5201 + SYS_IO_GETEVENTS = 5202 + SYS_IO_SUBMIT = 5203 + SYS_IO_CANCEL = 5204 + SYS_EXIT_GROUP = 5205 + SYS_LOOKUP_DCOOKIE = 5206 + SYS_EPOLL_CREATE = 5207 + SYS_EPOLL_CTL = 5208 + SYS_EPOLL_WAIT = 5209 + SYS_REMAP_FILE_PAGES = 5210 + SYS_RT_SIGRETURN = 5211 + SYS_SET_TID_ADDRESS = 5212 + SYS_RESTART_SYSCALL = 5213 + SYS_SEMTIMEDOP = 5214 + SYS_FADVISE64 = 5215 + SYS_TIMER_CREATE = 5216 + SYS_TIMER_SETTIME = 5217 + SYS_TIMER_GETTIME = 5218 + SYS_TIMER_GETOVERRUN = 5219 + SYS_TIMER_DELETE = 5220 + SYS_CLOCK_SETTIME = 5221 + SYS_CLOCK_GETTIME = 5222 + SYS_CLOCK_GETRES = 5223 + SYS_CLOCK_NANOSLEEP = 5224 + SYS_TGKILL = 5225 + SYS_UTIMES = 5226 + SYS_MBIND = 5227 + SYS_GET_MEMPOLICY = 5228 + SYS_SET_MEMPOLICY = 5229 + SYS_MQ_OPEN = 5230 + SYS_MQ_UNLINK = 5231 + SYS_MQ_TIMEDSEND = 5232 + SYS_MQ_TIMEDRECEIVE = 5233 + SYS_MQ_NOTIFY = 5234 + SYS_MQ_GETSETATTR = 5235 + SYS_VSERVER = 5236 + SYS_WAITID = 5237 + SYS_ADD_KEY = 5239 + SYS_REQUEST_KEY = 5240 + SYS_KEYCTL = 5241 + SYS_SET_THREAD_AREA = 5242 + SYS_INOTIFY_INIT = 5243 + SYS_INOTIFY_ADD_WATCH = 5244 + SYS_INOTIFY_RM_WATCH = 5245 + SYS_MIGRATE_PAGES = 5246 + SYS_OPENAT = 5247 + SYS_MKDIRAT = 5248 + SYS_MKNODAT = 5249 + SYS_FCHOWNAT = 5250 + SYS_FUTIMESAT = 5251 + SYS_NEWFSTATAT = 5252 + SYS_UNLINKAT = 5253 + SYS_RENAMEAT = 5254 + SYS_LINKAT = 5255 + SYS_SYMLINKAT = 5256 + SYS_READLINKAT = 5257 + SYS_FCHMODAT = 5258 + SYS_FACCESSAT = 5259 + SYS_PSELECT6 = 5260 + SYS_PPOLL = 5261 + SYS_UNSHARE = 5262 + SYS_SPLICE = 5263 + SYS_SYNC_FILE_RANGE = 5264 + SYS_TEE = 5265 + SYS_VMSPLICE = 5266 + SYS_MOVE_PAGES = 5267 + SYS_SET_ROBUST_LIST = 5268 + SYS_GET_ROBUST_LIST = 5269 + SYS_KEXEC_LOAD = 5270 + SYS_GETCPU = 5271 + SYS_EPOLL_PWAIT = 5272 + SYS_IOPRIO_SET = 5273 + SYS_IOPRIO_GET = 5274 + SYS_UTIMENSAT = 5275 + SYS_SIGNALFD = 5276 + SYS_TIMERFD = 5277 + SYS_EVENTFD = 5278 + SYS_FALLOCATE = 5279 + SYS_TIMERFD_CREATE = 5280 + SYS_TIMERFD_GETTIME = 5281 + SYS_TIMERFD_SETTIME = 5282 + SYS_SIGNALFD4 = 5283 + SYS_EVENTFD2 = 5284 + SYS_EPOLL_CREATE1 = 5285 + SYS_DUP3 = 5286 + SYS_PIPE2 = 5287 + SYS_INOTIFY_INIT1 = 5288 + SYS_PREADV = 5289 + SYS_PWRITEV = 5290 + SYS_RT_TGSIGQUEUEINFO = 5291 + SYS_PERF_EVENT_OPEN = 5292 + SYS_ACCEPT4 = 5293 + SYS_RECVMMSG = 5294 + SYS_FANOTIFY_INIT = 5295 + SYS_FANOTIFY_MARK = 5296 + SYS_PRLIMIT64 = 5297 + SYS_NAME_TO_HANDLE_AT = 5298 + SYS_OPEN_BY_HANDLE_AT = 5299 + SYS_CLOCK_ADJTIME = 5300 + SYS_SYNCFS = 5301 + SYS_SENDMMSG = 5302 + SYS_SETNS = 5303 + SYS_PROCESS_VM_READV = 5304 + SYS_PROCESS_VM_WRITEV = 5305 + SYS_KCMP = 5306 + SYS_FINIT_MODULE = 5307 + SYS_GETDENTS64 = 5308 + SYS_SCHED_SETATTR = 5309 + SYS_SCHED_GETATTR = 5310 + SYS_RENAMEAT2 = 5311 + SYS_SECCOMP = 5312 + SYS_GETRANDOM = 5313 + SYS_MEMFD_CREATE = 5314 + SYS_BPF = 5315 + SYS_EXECVEAT = 5316 + SYS_USERFAULTFD = 5317 + SYS_MEMBARRIER = 5318 + SYS_MLOCK2 = 5319 + SYS_COPY_FILE_RANGE = 5320 + SYS_PREADV2 = 5321 + SYS_PWRITEV2 = 5322 + SYS_PKEY_MPROTECT = 5323 + SYS_PKEY_ALLOC = 5324 + SYS_PKEY_FREE = 5325 + SYS_STATX = 5326 + SYS_RSEQ = 5327 + SYS_IO_PGETEVENTS = 5328 + SYS_PIDFD_SEND_SIGNAL = 5424 + SYS_IO_URING_SETUP = 5425 + SYS_IO_URING_ENTER = 5426 + SYS_IO_URING_REGISTER = 5427 + SYS_OPEN_TREE = 5428 + SYS_MOVE_MOUNT = 5429 + SYS_FSOPEN = 5430 + SYS_FSCONFIG = 5431 + SYS_FSMOUNT = 5432 + SYS_FSPICK = 5433 + SYS_PIDFD_OPEN = 5434 + SYS_CLONE3 = 5435 + SYS_CLOSE_RANGE = 5436 + SYS_OPENAT2 = 5437 + SYS_PIDFD_GETFD = 5438 + SYS_FACCESSAT2 = 5439 + SYS_PROCESS_MADVISE = 5440 + SYS_EPOLL_PWAIT2 = 5441 + SYS_MOUNT_SETATTR = 5442 + SYS_QUOTACTL_FD = 5443 + SYS_LANDLOCK_CREATE_RULESET = 5444 + SYS_LANDLOCK_ADD_RULE = 5445 + SYS_LANDLOCK_RESTRICT_SELF = 5446 + SYS_PROCESS_MRELEASE = 5448 + SYS_FUTEX_WAITV = 5449 + SYS_SET_MEMPOLICY_HOME_NODE = 5450 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go new file mode 100644 index 0000000..2644726 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go @@ -0,0 +1,434 @@ +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build mipsle && linux +// +build mipsle,linux + +package unix + +const ( + SYS_SYSCALL = 4000 + SYS_EXIT = 4001 + SYS_FORK = 4002 + SYS_READ = 4003 + SYS_WRITE = 4004 + SYS_OPEN = 4005 + SYS_CLOSE = 4006 + SYS_WAITPID = 4007 + SYS_CREAT = 4008 + SYS_LINK = 4009 + SYS_UNLINK = 4010 + SYS_EXECVE = 4011 + SYS_CHDIR = 4012 + SYS_TIME = 4013 + SYS_MKNOD = 4014 + SYS_CHMOD = 4015 + SYS_LCHOWN = 4016 + SYS_BREAK = 4017 + SYS_UNUSED18 = 4018 + SYS_LSEEK = 4019 + SYS_GETPID = 4020 + SYS_MOUNT = 4021 + SYS_UMOUNT = 4022 + SYS_SETUID = 4023 + SYS_GETUID = 4024 + SYS_STIME = 4025 + SYS_PTRACE = 4026 + SYS_ALARM = 4027 + SYS_UNUSED28 = 4028 + SYS_PAUSE = 4029 + SYS_UTIME = 4030 + SYS_STTY = 4031 + SYS_GTTY = 4032 + SYS_ACCESS = 4033 + SYS_NICE = 4034 + SYS_FTIME = 4035 + SYS_SYNC = 4036 + SYS_KILL = 4037 + SYS_RENAME = 4038 + SYS_MKDIR = 4039 + SYS_RMDIR = 4040 + SYS_DUP = 4041 + SYS_PIPE = 4042 + SYS_TIMES = 4043 + SYS_PROF = 4044 + SYS_BRK = 4045 + SYS_SETGID = 4046 + SYS_GETGID = 4047 + SYS_SIGNAL = 4048 + SYS_GETEUID = 4049 + SYS_GETEGID = 4050 + SYS_ACCT = 4051 + SYS_UMOUNT2 = 4052 + SYS_LOCK = 4053 + SYS_IOCTL = 4054 + SYS_FCNTL = 4055 + SYS_MPX = 4056 + SYS_SETPGID = 4057 + SYS_ULIMIT = 4058 + SYS_UNUSED59 = 4059 + SYS_UMASK = 4060 + SYS_CHROOT = 4061 + SYS_USTAT = 4062 + SYS_DUP2 = 4063 + SYS_GETPPID = 4064 + SYS_GETPGRP = 4065 + SYS_SETSID = 4066 + SYS_SIGACTION = 4067 + SYS_SGETMASK = 4068 + SYS_SSETMASK = 4069 + SYS_SETREUID = 4070 + SYS_SETREGID = 4071 + SYS_SIGSUSPEND = 4072 + SYS_SIGPENDING = 4073 + SYS_SETHOSTNAME = 4074 + SYS_SETRLIMIT = 4075 + SYS_GETRLIMIT = 4076 + SYS_GETRUSAGE = 4077 + SYS_GETTIMEOFDAY = 4078 + SYS_SETTIMEOFDAY = 4079 + SYS_GETGROUPS = 4080 + SYS_SETGROUPS = 4081 + SYS_RESERVED82 = 4082 + SYS_SYMLINK = 4083 + SYS_UNUSED84 = 4084 + SYS_READLINK = 4085 + SYS_USELIB = 4086 + SYS_SWAPON = 4087 + SYS_REBOOT = 4088 + SYS_READDIR = 4089 + SYS_MMAP = 4090 + SYS_MUNMAP = 4091 + SYS_TRUNCATE = 4092 + SYS_FTRUNCATE = 4093 + SYS_FCHMOD = 4094 + SYS_FCHOWN = 4095 + SYS_GETPRIORITY = 4096 + SYS_SETPRIORITY = 4097 + SYS_PROFIL = 4098 + SYS_STATFS = 4099 + SYS_FSTATFS = 4100 + SYS_IOPERM = 4101 + SYS_SOCKETCALL = 4102 + SYS_SYSLOG = 4103 + SYS_SETITIMER = 4104 + SYS_GETITIMER = 4105 + SYS_STAT = 4106 + SYS_LSTAT = 4107 + SYS_FSTAT = 4108 + SYS_UNUSED109 = 4109 + SYS_IOPL = 4110 + SYS_VHANGUP = 4111 + SYS_IDLE = 4112 + SYS_VM86 = 4113 + SYS_WAIT4 = 4114 + SYS_SWAPOFF = 4115 + SYS_SYSINFO = 4116 + SYS_IPC = 4117 + SYS_FSYNC = 4118 + SYS_SIGRETURN = 4119 + SYS_CLONE = 4120 + SYS_SETDOMAINNAME = 4121 + SYS_UNAME = 4122 + SYS_MODIFY_LDT = 4123 + SYS_ADJTIMEX = 4124 + SYS_MPROTECT = 4125 + SYS_SIGPROCMASK = 4126 + SYS_CREATE_MODULE = 4127 + SYS_INIT_MODULE = 4128 + SYS_DELETE_MODULE = 4129 + SYS_GET_KERNEL_SYMS = 4130 + SYS_QUOTACTL = 4131 + SYS_GETPGID = 4132 + SYS_FCHDIR = 4133 + SYS_BDFLUSH = 4134 + SYS_SYSFS = 4135 + SYS_PERSONALITY = 4136 + SYS_AFS_SYSCALL = 4137 + SYS_SETFSUID = 4138 + SYS_SETFSGID = 4139 + SYS__LLSEEK = 4140 + SYS_GETDENTS = 4141 + SYS__NEWSELECT = 4142 + SYS_FLOCK = 4143 + SYS_MSYNC = 4144 + SYS_READV = 4145 + SYS_WRITEV = 4146 + SYS_CACHEFLUSH = 4147 + SYS_CACHECTL = 4148 + SYS_SYSMIPS = 4149 + SYS_UNUSED150 = 4150 + SYS_GETSID = 4151 + SYS_FDATASYNC = 4152 + SYS__SYSCTL = 4153 + SYS_MLOCK = 4154 + SYS_MUNLOCK = 4155 + SYS_MLOCKALL = 4156 + SYS_MUNLOCKALL = 4157 + SYS_SCHED_SETPARAM = 4158 + SYS_SCHED_GETPARAM = 4159 + SYS_SCHED_SETSCHEDULER = 4160 + SYS_SCHED_GETSCHEDULER = 4161 + SYS_SCHED_YIELD = 4162 + SYS_SCHED_GET_PRIORITY_MAX = 4163 + SYS_SCHED_GET_PRIORITY_MIN = 4164 + SYS_SCHED_RR_GET_INTERVAL = 4165 + SYS_NANOSLEEP = 4166 + SYS_MREMAP = 4167 + SYS_ACCEPT = 4168 + SYS_BIND = 4169 + SYS_CONNECT = 4170 + SYS_GETPEERNAME = 4171 + SYS_GETSOCKNAME = 4172 + SYS_GETSOCKOPT = 4173 + SYS_LISTEN = 4174 + SYS_RECV = 4175 + SYS_RECVFROM = 4176 + SYS_RECVMSG = 4177 + SYS_SEND = 4178 + SYS_SENDMSG = 4179 + SYS_SENDTO = 4180 + SYS_SETSOCKOPT = 4181 + SYS_SHUTDOWN = 4182 + SYS_SOCKET = 4183 + SYS_SOCKETPAIR = 4184 + SYS_SETRESUID = 4185 + SYS_GETRESUID = 4186 + SYS_QUERY_MODULE = 4187 + SYS_POLL = 4188 + SYS_NFSSERVCTL = 4189 + SYS_SETRESGID = 4190 + SYS_GETRESGID = 4191 + SYS_PRCTL = 4192 + SYS_RT_SIGRETURN = 4193 + SYS_RT_SIGACTION = 4194 + SYS_RT_SIGPROCMASK = 4195 + SYS_RT_SIGPENDING = 4196 + SYS_RT_SIGTIMEDWAIT = 4197 + SYS_RT_SIGQUEUEINFO = 4198 + SYS_RT_SIGSUSPEND = 4199 + SYS_PREAD64 = 4200 + SYS_PWRITE64 = 4201 + SYS_CHOWN = 4202 + SYS_GETCWD = 4203 + SYS_CAPGET = 4204 + SYS_CAPSET = 4205 + SYS_SIGALTSTACK = 4206 + SYS_SENDFILE = 4207 + SYS_GETPMSG = 4208 + SYS_PUTPMSG = 4209 + SYS_MMAP2 = 4210 + SYS_TRUNCATE64 = 4211 + SYS_FTRUNCATE64 = 4212 + SYS_STAT64 = 4213 + SYS_LSTAT64 = 4214 + SYS_FSTAT64 = 4215 + SYS_PIVOT_ROOT = 4216 + SYS_MINCORE = 4217 + SYS_MADVISE = 4218 + SYS_GETDENTS64 = 4219 + SYS_FCNTL64 = 4220 + SYS_RESERVED221 = 4221 + SYS_GETTID = 4222 + SYS_READAHEAD = 4223 + SYS_SETXATTR = 4224 + SYS_LSETXATTR = 4225 + SYS_FSETXATTR = 4226 + SYS_GETXATTR = 4227 + SYS_LGETXATTR = 4228 + SYS_FGETXATTR = 4229 + SYS_LISTXATTR = 4230 + SYS_LLISTXATTR = 4231 + SYS_FLISTXATTR = 4232 + SYS_REMOVEXATTR = 4233 + SYS_LREMOVEXATTR = 4234 + SYS_FREMOVEXATTR = 4235 + SYS_TKILL = 4236 + SYS_SENDFILE64 = 4237 + SYS_FUTEX = 4238 + SYS_SCHED_SETAFFINITY = 4239 + SYS_SCHED_GETAFFINITY = 4240 + SYS_IO_SETUP = 4241 + SYS_IO_DESTROY = 4242 + SYS_IO_GETEVENTS = 4243 + SYS_IO_SUBMIT = 4244 + SYS_IO_CANCEL = 4245 + SYS_EXIT_GROUP = 4246 + SYS_LOOKUP_DCOOKIE = 4247 + SYS_EPOLL_CREATE = 4248 + SYS_EPOLL_CTL = 4249 + SYS_EPOLL_WAIT = 4250 + SYS_REMAP_FILE_PAGES = 4251 + SYS_SET_TID_ADDRESS = 4252 + SYS_RESTART_SYSCALL = 4253 + SYS_FADVISE64 = 4254 + SYS_STATFS64 = 4255 + SYS_FSTATFS64 = 4256 + SYS_TIMER_CREATE = 4257 + SYS_TIMER_SETTIME = 4258 + SYS_TIMER_GETTIME = 4259 + SYS_TIMER_GETOVERRUN = 4260 + SYS_TIMER_DELETE = 4261 + SYS_CLOCK_SETTIME = 4262 + SYS_CLOCK_GETTIME = 4263 + SYS_CLOCK_GETRES = 4264 + SYS_CLOCK_NANOSLEEP = 4265 + SYS_TGKILL = 4266 + SYS_UTIMES = 4267 + SYS_MBIND = 4268 + SYS_GET_MEMPOLICY = 4269 + SYS_SET_MEMPOLICY = 4270 + SYS_MQ_OPEN = 4271 + SYS_MQ_UNLINK = 4272 + SYS_MQ_TIMEDSEND = 4273 + SYS_MQ_TIMEDRECEIVE = 4274 + SYS_MQ_NOTIFY = 4275 + SYS_MQ_GETSETATTR = 4276 + SYS_VSERVER = 4277 + SYS_WAITID = 4278 + SYS_ADD_KEY = 4280 + SYS_REQUEST_KEY = 4281 + SYS_KEYCTL = 4282 + SYS_SET_THREAD_AREA = 4283 + SYS_INOTIFY_INIT = 4284 + SYS_INOTIFY_ADD_WATCH = 4285 + SYS_INOTIFY_RM_WATCH = 4286 + SYS_MIGRATE_PAGES = 4287 + SYS_OPENAT = 4288 + SYS_MKDIRAT = 4289 + SYS_MKNODAT = 4290 + SYS_FCHOWNAT = 4291 + SYS_FUTIMESAT = 4292 + SYS_FSTATAT64 = 4293 + SYS_UNLINKAT = 4294 + SYS_RENAMEAT = 4295 + SYS_LINKAT = 4296 + SYS_SYMLINKAT = 4297 + SYS_READLINKAT = 4298 + SYS_FCHMODAT = 4299 + SYS_FACCESSAT = 4300 + SYS_PSELECT6 = 4301 + SYS_PPOLL = 4302 + SYS_UNSHARE = 4303 + SYS_SPLICE = 4304 + SYS_SYNC_FILE_RANGE = 4305 + SYS_TEE = 4306 + SYS_VMSPLICE = 4307 + SYS_MOVE_PAGES = 4308 + SYS_SET_ROBUST_LIST = 4309 + SYS_GET_ROBUST_LIST = 4310 + SYS_KEXEC_LOAD = 4311 + SYS_GETCPU = 4312 + SYS_EPOLL_PWAIT = 4313 + SYS_IOPRIO_SET = 4314 + SYS_IOPRIO_GET = 4315 + SYS_UTIMENSAT = 4316 + SYS_SIGNALFD = 4317 + SYS_TIMERFD = 4318 + SYS_EVENTFD = 4319 + SYS_FALLOCATE = 4320 + SYS_TIMERFD_CREATE = 4321 + SYS_TIMERFD_GETTIME = 4322 + SYS_TIMERFD_SETTIME = 4323 + SYS_SIGNALFD4 = 4324 + SYS_EVENTFD2 = 4325 + SYS_EPOLL_CREATE1 = 4326 + SYS_DUP3 = 4327 + SYS_PIPE2 = 4328 + SYS_INOTIFY_INIT1 = 4329 + SYS_PREADV = 4330 + SYS_PWRITEV = 4331 + SYS_RT_TGSIGQUEUEINFO = 4332 + SYS_PERF_EVENT_OPEN = 4333 + SYS_ACCEPT4 = 4334 + SYS_RECVMMSG = 4335 + SYS_FANOTIFY_INIT = 4336 + SYS_FANOTIFY_MARK = 4337 + SYS_PRLIMIT64 = 4338 + SYS_NAME_TO_HANDLE_AT = 4339 + SYS_OPEN_BY_HANDLE_AT = 4340 + SYS_CLOCK_ADJTIME = 4341 + SYS_SYNCFS = 4342 + SYS_SENDMMSG = 4343 + SYS_SETNS = 4344 + SYS_PROCESS_VM_READV = 4345 + SYS_PROCESS_VM_WRITEV = 4346 + SYS_KCMP = 4347 + SYS_FINIT_MODULE = 4348 + SYS_SCHED_SETATTR = 4349 + SYS_SCHED_GETATTR = 4350 + SYS_RENAMEAT2 = 4351 + SYS_SECCOMP = 4352 + SYS_GETRANDOM = 4353 + SYS_MEMFD_CREATE = 4354 + SYS_BPF = 4355 + SYS_EXECVEAT = 4356 + SYS_USERFAULTFD = 4357 + SYS_MEMBARRIER = 4358 + SYS_MLOCK2 = 4359 + SYS_COPY_FILE_RANGE = 4360 + SYS_PREADV2 = 4361 + SYS_PWRITEV2 = 4362 + SYS_PKEY_MPROTECT = 4363 + SYS_PKEY_ALLOC = 4364 + SYS_PKEY_FREE = 4365 + SYS_STATX = 4366 + SYS_RSEQ = 4367 + SYS_IO_PGETEVENTS = 4368 + SYS_SEMGET = 4393 + SYS_SEMCTL = 4394 + SYS_SHMGET = 4395 + SYS_SHMCTL = 4396 + SYS_SHMAT = 4397 + SYS_SHMDT = 4398 + SYS_MSGGET = 4399 + SYS_MSGSND = 4400 + SYS_MSGRCV = 4401 + SYS_MSGCTL = 4402 + SYS_CLOCK_GETTIME64 = 4403 + SYS_CLOCK_SETTIME64 = 4404 + SYS_CLOCK_ADJTIME64 = 4405 + SYS_CLOCK_GETRES_TIME64 = 4406 + SYS_CLOCK_NANOSLEEP_TIME64 = 4407 + SYS_TIMER_GETTIME64 = 4408 + SYS_TIMER_SETTIME64 = 4409 + SYS_TIMERFD_GETTIME64 = 4410 + SYS_TIMERFD_SETTIME64 = 4411 + SYS_UTIMENSAT_TIME64 = 4412 + SYS_PSELECT6_TIME64 = 4413 + SYS_PPOLL_TIME64 = 4414 + SYS_IO_PGETEVENTS_TIME64 = 4416 + SYS_RECVMMSG_TIME64 = 4417 + SYS_MQ_TIMEDSEND_TIME64 = 4418 + SYS_MQ_TIMEDRECEIVE_TIME64 = 4419 + SYS_SEMTIMEDOP_TIME64 = 4420 + SYS_RT_SIGTIMEDWAIT_TIME64 = 4421 + SYS_FUTEX_TIME64 = 4422 + SYS_SCHED_RR_GET_INTERVAL_TIME64 = 4423 + SYS_PIDFD_SEND_SIGNAL = 4424 + SYS_IO_URING_SETUP = 4425 + SYS_IO_URING_ENTER = 4426 + SYS_IO_URING_REGISTER = 4427 + SYS_OPEN_TREE = 4428 + SYS_MOVE_MOUNT = 4429 + SYS_FSOPEN = 4430 + SYS_FSCONFIG = 4431 + SYS_FSMOUNT = 4432 + SYS_FSPICK = 4433 + SYS_PIDFD_OPEN = 4434 + SYS_CLONE3 = 4435 + SYS_CLOSE_RANGE = 4436 + SYS_OPENAT2 = 4437 + SYS_PIDFD_GETFD = 4438 + SYS_FACCESSAT2 = 4439 + SYS_PROCESS_MADVISE = 4440 + SYS_EPOLL_PWAIT2 = 4441 + SYS_MOUNT_SETATTR = 4442 + SYS_QUOTACTL_FD = 4443 + SYS_LANDLOCK_CREATE_RULESET = 4444 + SYS_LANDLOCK_ADD_RULE = 4445 + SYS_LANDLOCK_RESTRICT_SELF = 4446 + SYS_PROCESS_MRELEASE = 4448 + SYS_FUTEX_WAITV = 4449 + SYS_SET_MEMPOLICY_HOME_NODE = 4450 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go new file mode 100644 index 0000000..26aefc1 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go @@ -0,0 +1,441 @@ +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build ppc && linux +// +build ppc,linux + +package unix + +const ( + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAITPID = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_TIME = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_BREAK = 17 + SYS_OLDSTAT = 18 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_STIME = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_OLDFSTAT = 28 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_STTY = 31 + SYS_GTTY = 32 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_FTIME = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_PROF = 44 + SYS_BRK = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_SIGNAL = 48 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_LOCK = 53 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_MPX = 56 + SYS_SETPGID = 57 + SYS_ULIMIT = 58 + SYS_OLDOLDUNAME = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SGETMASK = 68 + SYS_SSETMASK = 69 + SYS_SETREUID = 70 + SYS_SETREGID = 71 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRLIMIT = 76 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_GETGROUPS = 80 + SYS_SETGROUPS = 81 + SYS_SELECT = 82 + SYS_SYMLINK = 83 + SYS_OLDLSTAT = 84 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_FCHOWN = 95 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_PROFIL = 98 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_IOPERM = 101 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_OLDUNAME = 109 + SYS_IOPL = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_VM86 = 113 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_MODIFY_LDT = 123 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_SETFSUID = 138 + SYS_SETFSGID = 139 + SYS__LLSEEK = 140 + SYS_GETDENTS = 141 + SYS__NEWSELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_SETRESUID = 164 + SYS_GETRESUID = 165 + SYS_QUERY_MODULE = 166 + SYS_POLL = 167 + SYS_NFSSERVCTL = 168 + SYS_SETRESGID = 169 + SYS_GETRESGID = 170 + SYS_PRCTL = 171 + SYS_RT_SIGRETURN = 172 + SYS_RT_SIGACTION = 173 + SYS_RT_SIGPROCMASK = 174 + SYS_RT_SIGPENDING = 175 + SYS_RT_SIGTIMEDWAIT = 176 + SYS_RT_SIGQUEUEINFO = 177 + SYS_RT_SIGSUSPEND = 178 + SYS_PREAD64 = 179 + SYS_PWRITE64 = 180 + SYS_CHOWN = 181 + SYS_GETCWD = 182 + SYS_CAPGET = 183 + SYS_CAPSET = 184 + SYS_SIGALTSTACK = 185 + SYS_SENDFILE = 186 + SYS_GETPMSG = 187 + SYS_PUTPMSG = 188 + SYS_VFORK = 189 + SYS_UGETRLIMIT = 190 + SYS_READAHEAD = 191 + SYS_MMAP2 = 192 + SYS_TRUNCATE64 = 193 + SYS_FTRUNCATE64 = 194 + SYS_STAT64 = 195 + SYS_LSTAT64 = 196 + SYS_FSTAT64 = 197 + SYS_PCICONFIG_READ = 198 + SYS_PCICONFIG_WRITE = 199 + SYS_PCICONFIG_IOBASE = 200 + SYS_MULTIPLEXER = 201 + SYS_GETDENTS64 = 202 + SYS_PIVOT_ROOT = 203 + SYS_FCNTL64 = 204 + SYS_MADVISE = 205 + SYS_MINCORE = 206 + SYS_GETTID = 207 + SYS_TKILL = 208 + SYS_SETXATTR = 209 + SYS_LSETXATTR = 210 + SYS_FSETXATTR = 211 + SYS_GETXATTR = 212 + SYS_LGETXATTR = 213 + SYS_FGETXATTR = 214 + SYS_LISTXATTR = 215 + SYS_LLISTXATTR = 216 + SYS_FLISTXATTR = 217 + SYS_REMOVEXATTR = 218 + SYS_LREMOVEXATTR = 219 + SYS_FREMOVEXATTR = 220 + SYS_FUTEX = 221 + SYS_SCHED_SETAFFINITY = 222 + SYS_SCHED_GETAFFINITY = 223 + SYS_TUXCALL = 225 + SYS_SENDFILE64 = 226 + SYS_IO_SETUP = 227 + SYS_IO_DESTROY = 228 + SYS_IO_GETEVENTS = 229 + SYS_IO_SUBMIT = 230 + SYS_IO_CANCEL = 231 + SYS_SET_TID_ADDRESS = 232 + SYS_FADVISE64 = 233 + SYS_EXIT_GROUP = 234 + SYS_LOOKUP_DCOOKIE = 235 + SYS_EPOLL_CREATE = 236 + SYS_EPOLL_CTL = 237 + SYS_EPOLL_WAIT = 238 + SYS_REMAP_FILE_PAGES = 239 + SYS_TIMER_CREATE = 240 + SYS_TIMER_SETTIME = 241 + SYS_TIMER_GETTIME = 242 + SYS_TIMER_GETOVERRUN = 243 + SYS_TIMER_DELETE = 244 + SYS_CLOCK_SETTIME = 245 + SYS_CLOCK_GETTIME = 246 + SYS_CLOCK_GETRES = 247 + SYS_CLOCK_NANOSLEEP = 248 + SYS_SWAPCONTEXT = 249 + SYS_TGKILL = 250 + SYS_UTIMES = 251 + SYS_STATFS64 = 252 + SYS_FSTATFS64 = 253 + SYS_FADVISE64_64 = 254 + SYS_RTAS = 255 + SYS_SYS_DEBUG_SETCONTEXT = 256 + SYS_MIGRATE_PAGES = 258 + SYS_MBIND = 259 + SYS_GET_MEMPOLICY = 260 + SYS_SET_MEMPOLICY = 261 + SYS_MQ_OPEN = 262 + SYS_MQ_UNLINK = 263 + SYS_MQ_TIMEDSEND = 264 + SYS_MQ_TIMEDRECEIVE = 265 + SYS_MQ_NOTIFY = 266 + SYS_MQ_GETSETATTR = 267 + SYS_KEXEC_LOAD = 268 + SYS_ADD_KEY = 269 + SYS_REQUEST_KEY = 270 + SYS_KEYCTL = 271 + SYS_WAITID = 272 + SYS_IOPRIO_SET = 273 + SYS_IOPRIO_GET = 274 + SYS_INOTIFY_INIT = 275 + SYS_INOTIFY_ADD_WATCH = 276 + SYS_INOTIFY_RM_WATCH = 277 + SYS_SPU_RUN = 278 + SYS_SPU_CREATE = 279 + SYS_PSELECT6 = 280 + SYS_PPOLL = 281 + SYS_UNSHARE = 282 + SYS_SPLICE = 283 + SYS_TEE = 284 + SYS_VMSPLICE = 285 + SYS_OPENAT = 286 + SYS_MKDIRAT = 287 + SYS_MKNODAT = 288 + SYS_FCHOWNAT = 289 + SYS_FUTIMESAT = 290 + SYS_FSTATAT64 = 291 + SYS_UNLINKAT = 292 + SYS_RENAMEAT = 293 + SYS_LINKAT = 294 + SYS_SYMLINKAT = 295 + SYS_READLINKAT = 296 + SYS_FCHMODAT = 297 + SYS_FACCESSAT = 298 + SYS_GET_ROBUST_LIST = 299 + SYS_SET_ROBUST_LIST = 300 + SYS_MOVE_PAGES = 301 + SYS_GETCPU = 302 + SYS_EPOLL_PWAIT = 303 + SYS_UTIMENSAT = 304 + SYS_SIGNALFD = 305 + SYS_TIMERFD_CREATE = 306 + SYS_EVENTFD = 307 + SYS_SYNC_FILE_RANGE2 = 308 + SYS_FALLOCATE = 309 + SYS_SUBPAGE_PROT = 310 + SYS_TIMERFD_SETTIME = 311 + SYS_TIMERFD_GETTIME = 312 + SYS_SIGNALFD4 = 313 + SYS_EVENTFD2 = 314 + SYS_EPOLL_CREATE1 = 315 + SYS_DUP3 = 316 + SYS_PIPE2 = 317 + SYS_INOTIFY_INIT1 = 318 + SYS_PERF_EVENT_OPEN = 319 + SYS_PREADV = 320 + SYS_PWRITEV = 321 + SYS_RT_TGSIGQUEUEINFO = 322 + SYS_FANOTIFY_INIT = 323 + SYS_FANOTIFY_MARK = 324 + SYS_PRLIMIT64 = 325 + SYS_SOCKET = 326 + SYS_BIND = 327 + SYS_CONNECT = 328 + SYS_LISTEN = 329 + SYS_ACCEPT = 330 + SYS_GETSOCKNAME = 331 + SYS_GETPEERNAME = 332 + SYS_SOCKETPAIR = 333 + SYS_SEND = 334 + SYS_SENDTO = 335 + SYS_RECV = 336 + SYS_RECVFROM = 337 + SYS_SHUTDOWN = 338 + SYS_SETSOCKOPT = 339 + SYS_GETSOCKOPT = 340 + SYS_SENDMSG = 341 + SYS_RECVMSG = 342 + SYS_RECVMMSG = 343 + SYS_ACCEPT4 = 344 + SYS_NAME_TO_HANDLE_AT = 345 + SYS_OPEN_BY_HANDLE_AT = 346 + SYS_CLOCK_ADJTIME = 347 + SYS_SYNCFS = 348 + SYS_SENDMMSG = 349 + SYS_SETNS = 350 + SYS_PROCESS_VM_READV = 351 + SYS_PROCESS_VM_WRITEV = 352 + SYS_FINIT_MODULE = 353 + SYS_KCMP = 354 + SYS_SCHED_SETATTR = 355 + SYS_SCHED_GETATTR = 356 + SYS_RENAMEAT2 = 357 + SYS_SECCOMP = 358 + SYS_GETRANDOM = 359 + SYS_MEMFD_CREATE = 360 + SYS_BPF = 361 + SYS_EXECVEAT = 362 + SYS_SWITCH_ENDIAN = 363 + SYS_USERFAULTFD = 364 + SYS_MEMBARRIER = 365 + SYS_MLOCK2 = 378 + SYS_COPY_FILE_RANGE = 379 + SYS_PREADV2 = 380 + SYS_PWRITEV2 = 381 + SYS_KEXEC_FILE_LOAD = 382 + SYS_STATX = 383 + SYS_PKEY_ALLOC = 384 + SYS_PKEY_FREE = 385 + SYS_PKEY_MPROTECT = 386 + SYS_RSEQ = 387 + SYS_IO_PGETEVENTS = 388 + SYS_SEMGET = 393 + SYS_SEMCTL = 394 + SYS_SHMGET = 395 + SYS_SHMCTL = 396 + SYS_SHMAT = 397 + SYS_SHMDT = 398 + SYS_MSGGET = 399 + SYS_MSGSND = 400 + SYS_MSGRCV = 401 + SYS_MSGCTL = 402 + SYS_CLOCK_GETTIME64 = 403 + SYS_CLOCK_SETTIME64 = 404 + SYS_CLOCK_ADJTIME64 = 405 + SYS_CLOCK_GETRES_TIME64 = 406 + SYS_CLOCK_NANOSLEEP_TIME64 = 407 + SYS_TIMER_GETTIME64 = 408 + SYS_TIMER_SETTIME64 = 409 + SYS_TIMERFD_GETTIME64 = 410 + SYS_TIMERFD_SETTIME64 = 411 + SYS_UTIMENSAT_TIME64 = 412 + SYS_PSELECT6_TIME64 = 413 + SYS_PPOLL_TIME64 = 414 + SYS_IO_PGETEVENTS_TIME64 = 416 + SYS_RECVMMSG_TIME64 = 417 + SYS_MQ_TIMEDSEND_TIME64 = 418 + SYS_MQ_TIMEDRECEIVE_TIME64 = 419 + SYS_SEMTIMEDOP_TIME64 = 420 + SYS_RT_SIGTIMEDWAIT_TIME64 = 421 + SYS_FUTEX_TIME64 = 422 + SYS_SCHED_RR_GET_INTERVAL_TIME64 = 423 + SYS_PIDFD_SEND_SIGNAL = 424 + SYS_IO_URING_SETUP = 425 + SYS_IO_URING_ENTER = 426 + SYS_IO_URING_REGISTER = 427 + SYS_OPEN_TREE = 428 + SYS_MOVE_MOUNT = 429 + SYS_FSOPEN = 430 + SYS_FSCONFIG = 431 + SYS_FSMOUNT = 432 + SYS_FSPICK = 433 + SYS_PIDFD_OPEN = 434 + SYS_CLONE3 = 435 + SYS_CLOSE_RANGE = 436 + SYS_OPENAT2 = 437 + SYS_PIDFD_GETFD = 438 + SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 + SYS_EPOLL_PWAIT2 = 441 + SYS_MOUNT_SETATTR = 442 + SYS_QUOTACTL_FD = 443 + SYS_LANDLOCK_CREATE_RULESET = 444 + SYS_LANDLOCK_ADD_RULE = 445 + SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_PROCESS_MRELEASE = 448 + SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go new file mode 100644 index 0000000..8d4cd9d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go @@ -0,0 +1,413 @@ +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build ppc64 && linux +// +build ppc64,linux + +package unix + +const ( + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAITPID = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_TIME = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_BREAK = 17 + SYS_OLDSTAT = 18 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_STIME = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_OLDFSTAT = 28 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_STTY = 31 + SYS_GTTY = 32 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_FTIME = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_PROF = 44 + SYS_BRK = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_SIGNAL = 48 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_LOCK = 53 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_MPX = 56 + SYS_SETPGID = 57 + SYS_ULIMIT = 58 + SYS_OLDOLDUNAME = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SGETMASK = 68 + SYS_SSETMASK = 69 + SYS_SETREUID = 70 + SYS_SETREGID = 71 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRLIMIT = 76 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_GETGROUPS = 80 + SYS_SETGROUPS = 81 + SYS_SELECT = 82 + SYS_SYMLINK = 83 + SYS_OLDLSTAT = 84 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_FCHOWN = 95 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_PROFIL = 98 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_IOPERM = 101 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_OLDUNAME = 109 + SYS_IOPL = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_VM86 = 113 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_MODIFY_LDT = 123 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_SETFSUID = 138 + SYS_SETFSGID = 139 + SYS__LLSEEK = 140 + SYS_GETDENTS = 141 + SYS__NEWSELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_SETRESUID = 164 + SYS_GETRESUID = 165 + SYS_QUERY_MODULE = 166 + SYS_POLL = 167 + SYS_NFSSERVCTL = 168 + SYS_SETRESGID = 169 + SYS_GETRESGID = 170 + SYS_PRCTL = 171 + SYS_RT_SIGRETURN = 172 + SYS_RT_SIGACTION = 173 + SYS_RT_SIGPROCMASK = 174 + SYS_RT_SIGPENDING = 175 + SYS_RT_SIGTIMEDWAIT = 176 + SYS_RT_SIGQUEUEINFO = 177 + SYS_RT_SIGSUSPEND = 178 + SYS_PREAD64 = 179 + SYS_PWRITE64 = 180 + SYS_CHOWN = 181 + SYS_GETCWD = 182 + SYS_CAPGET = 183 + SYS_CAPSET = 184 + SYS_SIGALTSTACK = 185 + SYS_SENDFILE = 186 + SYS_GETPMSG = 187 + SYS_PUTPMSG = 188 + SYS_VFORK = 189 + SYS_UGETRLIMIT = 190 + SYS_READAHEAD = 191 + SYS_PCICONFIG_READ = 198 + SYS_PCICONFIG_WRITE = 199 + SYS_PCICONFIG_IOBASE = 200 + SYS_MULTIPLEXER = 201 + SYS_GETDENTS64 = 202 + SYS_PIVOT_ROOT = 203 + SYS_MADVISE = 205 + SYS_MINCORE = 206 + SYS_GETTID = 207 + SYS_TKILL = 208 + SYS_SETXATTR = 209 + SYS_LSETXATTR = 210 + SYS_FSETXATTR = 211 + SYS_GETXATTR = 212 + SYS_LGETXATTR = 213 + SYS_FGETXATTR = 214 + SYS_LISTXATTR = 215 + SYS_LLISTXATTR = 216 + SYS_FLISTXATTR = 217 + SYS_REMOVEXATTR = 218 + SYS_LREMOVEXATTR = 219 + SYS_FREMOVEXATTR = 220 + SYS_FUTEX = 221 + SYS_SCHED_SETAFFINITY = 222 + SYS_SCHED_GETAFFINITY = 223 + SYS_TUXCALL = 225 + SYS_IO_SETUP = 227 + SYS_IO_DESTROY = 228 + SYS_IO_GETEVENTS = 229 + SYS_IO_SUBMIT = 230 + SYS_IO_CANCEL = 231 + SYS_SET_TID_ADDRESS = 232 + SYS_FADVISE64 = 233 + SYS_EXIT_GROUP = 234 + SYS_LOOKUP_DCOOKIE = 235 + SYS_EPOLL_CREATE = 236 + SYS_EPOLL_CTL = 237 + SYS_EPOLL_WAIT = 238 + SYS_REMAP_FILE_PAGES = 239 + SYS_TIMER_CREATE = 240 + SYS_TIMER_SETTIME = 241 + SYS_TIMER_GETTIME = 242 + SYS_TIMER_GETOVERRUN = 243 + SYS_TIMER_DELETE = 244 + SYS_CLOCK_SETTIME = 245 + SYS_CLOCK_GETTIME = 246 + SYS_CLOCK_GETRES = 247 + SYS_CLOCK_NANOSLEEP = 248 + SYS_SWAPCONTEXT = 249 + SYS_TGKILL = 250 + SYS_UTIMES = 251 + SYS_STATFS64 = 252 + SYS_FSTATFS64 = 253 + SYS_RTAS = 255 + SYS_SYS_DEBUG_SETCONTEXT = 256 + SYS_MIGRATE_PAGES = 258 + SYS_MBIND = 259 + SYS_GET_MEMPOLICY = 260 + SYS_SET_MEMPOLICY = 261 + SYS_MQ_OPEN = 262 + SYS_MQ_UNLINK = 263 + SYS_MQ_TIMEDSEND = 264 + SYS_MQ_TIMEDRECEIVE = 265 + SYS_MQ_NOTIFY = 266 + SYS_MQ_GETSETATTR = 267 + SYS_KEXEC_LOAD = 268 + SYS_ADD_KEY = 269 + SYS_REQUEST_KEY = 270 + SYS_KEYCTL = 271 + SYS_WAITID = 272 + SYS_IOPRIO_SET = 273 + SYS_IOPRIO_GET = 274 + SYS_INOTIFY_INIT = 275 + SYS_INOTIFY_ADD_WATCH = 276 + SYS_INOTIFY_RM_WATCH = 277 + SYS_SPU_RUN = 278 + SYS_SPU_CREATE = 279 + SYS_PSELECT6 = 280 + SYS_PPOLL = 281 + SYS_UNSHARE = 282 + SYS_SPLICE = 283 + SYS_TEE = 284 + SYS_VMSPLICE = 285 + SYS_OPENAT = 286 + SYS_MKDIRAT = 287 + SYS_MKNODAT = 288 + SYS_FCHOWNAT = 289 + SYS_FUTIMESAT = 290 + SYS_NEWFSTATAT = 291 + SYS_UNLINKAT = 292 + SYS_RENAMEAT = 293 + SYS_LINKAT = 294 + SYS_SYMLINKAT = 295 + SYS_READLINKAT = 296 + SYS_FCHMODAT = 297 + SYS_FACCESSAT = 298 + SYS_GET_ROBUST_LIST = 299 + SYS_SET_ROBUST_LIST = 300 + SYS_MOVE_PAGES = 301 + SYS_GETCPU = 302 + SYS_EPOLL_PWAIT = 303 + SYS_UTIMENSAT = 304 + SYS_SIGNALFD = 305 + SYS_TIMERFD_CREATE = 306 + SYS_EVENTFD = 307 + SYS_SYNC_FILE_RANGE2 = 308 + SYS_FALLOCATE = 309 + SYS_SUBPAGE_PROT = 310 + SYS_TIMERFD_SETTIME = 311 + SYS_TIMERFD_GETTIME = 312 + SYS_SIGNALFD4 = 313 + SYS_EVENTFD2 = 314 + SYS_EPOLL_CREATE1 = 315 + SYS_DUP3 = 316 + SYS_PIPE2 = 317 + SYS_INOTIFY_INIT1 = 318 + SYS_PERF_EVENT_OPEN = 319 + SYS_PREADV = 320 + SYS_PWRITEV = 321 + SYS_RT_TGSIGQUEUEINFO = 322 + SYS_FANOTIFY_INIT = 323 + SYS_FANOTIFY_MARK = 324 + SYS_PRLIMIT64 = 325 + SYS_SOCKET = 326 + SYS_BIND = 327 + SYS_CONNECT = 328 + SYS_LISTEN = 329 + SYS_ACCEPT = 330 + SYS_GETSOCKNAME = 331 + SYS_GETPEERNAME = 332 + SYS_SOCKETPAIR = 333 + SYS_SEND = 334 + SYS_SENDTO = 335 + SYS_RECV = 336 + SYS_RECVFROM = 337 + SYS_SHUTDOWN = 338 + SYS_SETSOCKOPT = 339 + SYS_GETSOCKOPT = 340 + SYS_SENDMSG = 341 + SYS_RECVMSG = 342 + SYS_RECVMMSG = 343 + SYS_ACCEPT4 = 344 + SYS_NAME_TO_HANDLE_AT = 345 + SYS_OPEN_BY_HANDLE_AT = 346 + SYS_CLOCK_ADJTIME = 347 + SYS_SYNCFS = 348 + SYS_SENDMMSG = 349 + SYS_SETNS = 350 + SYS_PROCESS_VM_READV = 351 + SYS_PROCESS_VM_WRITEV = 352 + SYS_FINIT_MODULE = 353 + SYS_KCMP = 354 + SYS_SCHED_SETATTR = 355 + SYS_SCHED_GETATTR = 356 + SYS_RENAMEAT2 = 357 + SYS_SECCOMP = 358 + SYS_GETRANDOM = 359 + SYS_MEMFD_CREATE = 360 + SYS_BPF = 361 + SYS_EXECVEAT = 362 + SYS_SWITCH_ENDIAN = 363 + SYS_USERFAULTFD = 364 + SYS_MEMBARRIER = 365 + SYS_MLOCK2 = 378 + SYS_COPY_FILE_RANGE = 379 + SYS_PREADV2 = 380 + SYS_PWRITEV2 = 381 + SYS_KEXEC_FILE_LOAD = 382 + SYS_STATX = 383 + SYS_PKEY_ALLOC = 384 + SYS_PKEY_FREE = 385 + SYS_PKEY_MPROTECT = 386 + SYS_RSEQ = 387 + SYS_IO_PGETEVENTS = 388 + SYS_SEMTIMEDOP = 392 + SYS_SEMGET = 393 + SYS_SEMCTL = 394 + SYS_SHMGET = 395 + SYS_SHMCTL = 396 + SYS_SHMAT = 397 + SYS_SHMDT = 398 + SYS_MSGGET = 399 + SYS_MSGSND = 400 + SYS_MSGRCV = 401 + SYS_MSGCTL = 402 + SYS_PIDFD_SEND_SIGNAL = 424 + SYS_IO_URING_SETUP = 425 + SYS_IO_URING_ENTER = 426 + SYS_IO_URING_REGISTER = 427 + SYS_OPEN_TREE = 428 + SYS_MOVE_MOUNT = 429 + SYS_FSOPEN = 430 + SYS_FSCONFIG = 431 + SYS_FSMOUNT = 432 + SYS_FSPICK = 433 + SYS_PIDFD_OPEN = 434 + SYS_CLONE3 = 435 + SYS_CLOSE_RANGE = 436 + SYS_OPENAT2 = 437 + SYS_PIDFD_GETFD = 438 + SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 + SYS_EPOLL_PWAIT2 = 441 + SYS_MOUNT_SETATTR = 442 + SYS_QUOTACTL_FD = 443 + SYS_LANDLOCK_CREATE_RULESET = 444 + SYS_LANDLOCK_ADD_RULE = 445 + SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_PROCESS_MRELEASE = 448 + SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go new file mode 100644 index 0000000..3b405d1 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go @@ -0,0 +1,413 @@ +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build ppc64le && linux +// +build ppc64le,linux + +package unix + +const ( + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAITPID = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_TIME = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_BREAK = 17 + SYS_OLDSTAT = 18 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_STIME = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_OLDFSTAT = 28 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_STTY = 31 + SYS_GTTY = 32 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_FTIME = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_PROF = 44 + SYS_BRK = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_SIGNAL = 48 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_LOCK = 53 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_MPX = 56 + SYS_SETPGID = 57 + SYS_ULIMIT = 58 + SYS_OLDOLDUNAME = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SGETMASK = 68 + SYS_SSETMASK = 69 + SYS_SETREUID = 70 + SYS_SETREGID = 71 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRLIMIT = 76 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_GETGROUPS = 80 + SYS_SETGROUPS = 81 + SYS_SELECT = 82 + SYS_SYMLINK = 83 + SYS_OLDLSTAT = 84 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_FCHOWN = 95 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_PROFIL = 98 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_IOPERM = 101 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_OLDUNAME = 109 + SYS_IOPL = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_VM86 = 113 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_MODIFY_LDT = 123 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_SETFSUID = 138 + SYS_SETFSGID = 139 + SYS__LLSEEK = 140 + SYS_GETDENTS = 141 + SYS__NEWSELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_SETRESUID = 164 + SYS_GETRESUID = 165 + SYS_QUERY_MODULE = 166 + SYS_POLL = 167 + SYS_NFSSERVCTL = 168 + SYS_SETRESGID = 169 + SYS_GETRESGID = 170 + SYS_PRCTL = 171 + SYS_RT_SIGRETURN = 172 + SYS_RT_SIGACTION = 173 + SYS_RT_SIGPROCMASK = 174 + SYS_RT_SIGPENDING = 175 + SYS_RT_SIGTIMEDWAIT = 176 + SYS_RT_SIGQUEUEINFO = 177 + SYS_RT_SIGSUSPEND = 178 + SYS_PREAD64 = 179 + SYS_PWRITE64 = 180 + SYS_CHOWN = 181 + SYS_GETCWD = 182 + SYS_CAPGET = 183 + SYS_CAPSET = 184 + SYS_SIGALTSTACK = 185 + SYS_SENDFILE = 186 + SYS_GETPMSG = 187 + SYS_PUTPMSG = 188 + SYS_VFORK = 189 + SYS_UGETRLIMIT = 190 + SYS_READAHEAD = 191 + SYS_PCICONFIG_READ = 198 + SYS_PCICONFIG_WRITE = 199 + SYS_PCICONFIG_IOBASE = 200 + SYS_MULTIPLEXER = 201 + SYS_GETDENTS64 = 202 + SYS_PIVOT_ROOT = 203 + SYS_MADVISE = 205 + SYS_MINCORE = 206 + SYS_GETTID = 207 + SYS_TKILL = 208 + SYS_SETXATTR = 209 + SYS_LSETXATTR = 210 + SYS_FSETXATTR = 211 + SYS_GETXATTR = 212 + SYS_LGETXATTR = 213 + SYS_FGETXATTR = 214 + SYS_LISTXATTR = 215 + SYS_LLISTXATTR = 216 + SYS_FLISTXATTR = 217 + SYS_REMOVEXATTR = 218 + SYS_LREMOVEXATTR = 219 + SYS_FREMOVEXATTR = 220 + SYS_FUTEX = 221 + SYS_SCHED_SETAFFINITY = 222 + SYS_SCHED_GETAFFINITY = 223 + SYS_TUXCALL = 225 + SYS_IO_SETUP = 227 + SYS_IO_DESTROY = 228 + SYS_IO_GETEVENTS = 229 + SYS_IO_SUBMIT = 230 + SYS_IO_CANCEL = 231 + SYS_SET_TID_ADDRESS = 232 + SYS_FADVISE64 = 233 + SYS_EXIT_GROUP = 234 + SYS_LOOKUP_DCOOKIE = 235 + SYS_EPOLL_CREATE = 236 + SYS_EPOLL_CTL = 237 + SYS_EPOLL_WAIT = 238 + SYS_REMAP_FILE_PAGES = 239 + SYS_TIMER_CREATE = 240 + SYS_TIMER_SETTIME = 241 + SYS_TIMER_GETTIME = 242 + SYS_TIMER_GETOVERRUN = 243 + SYS_TIMER_DELETE = 244 + SYS_CLOCK_SETTIME = 245 + SYS_CLOCK_GETTIME = 246 + SYS_CLOCK_GETRES = 247 + SYS_CLOCK_NANOSLEEP = 248 + SYS_SWAPCONTEXT = 249 + SYS_TGKILL = 250 + SYS_UTIMES = 251 + SYS_STATFS64 = 252 + SYS_FSTATFS64 = 253 + SYS_RTAS = 255 + SYS_SYS_DEBUG_SETCONTEXT = 256 + SYS_MIGRATE_PAGES = 258 + SYS_MBIND = 259 + SYS_GET_MEMPOLICY = 260 + SYS_SET_MEMPOLICY = 261 + SYS_MQ_OPEN = 262 + SYS_MQ_UNLINK = 263 + SYS_MQ_TIMEDSEND = 264 + SYS_MQ_TIMEDRECEIVE = 265 + SYS_MQ_NOTIFY = 266 + SYS_MQ_GETSETATTR = 267 + SYS_KEXEC_LOAD = 268 + SYS_ADD_KEY = 269 + SYS_REQUEST_KEY = 270 + SYS_KEYCTL = 271 + SYS_WAITID = 272 + SYS_IOPRIO_SET = 273 + SYS_IOPRIO_GET = 274 + SYS_INOTIFY_INIT = 275 + SYS_INOTIFY_ADD_WATCH = 276 + SYS_INOTIFY_RM_WATCH = 277 + SYS_SPU_RUN = 278 + SYS_SPU_CREATE = 279 + SYS_PSELECT6 = 280 + SYS_PPOLL = 281 + SYS_UNSHARE = 282 + SYS_SPLICE = 283 + SYS_TEE = 284 + SYS_VMSPLICE = 285 + SYS_OPENAT = 286 + SYS_MKDIRAT = 287 + SYS_MKNODAT = 288 + SYS_FCHOWNAT = 289 + SYS_FUTIMESAT = 290 + SYS_NEWFSTATAT = 291 + SYS_UNLINKAT = 292 + SYS_RENAMEAT = 293 + SYS_LINKAT = 294 + SYS_SYMLINKAT = 295 + SYS_READLINKAT = 296 + SYS_FCHMODAT = 297 + SYS_FACCESSAT = 298 + SYS_GET_ROBUST_LIST = 299 + SYS_SET_ROBUST_LIST = 300 + SYS_MOVE_PAGES = 301 + SYS_GETCPU = 302 + SYS_EPOLL_PWAIT = 303 + SYS_UTIMENSAT = 304 + SYS_SIGNALFD = 305 + SYS_TIMERFD_CREATE = 306 + SYS_EVENTFD = 307 + SYS_SYNC_FILE_RANGE2 = 308 + SYS_FALLOCATE = 309 + SYS_SUBPAGE_PROT = 310 + SYS_TIMERFD_SETTIME = 311 + SYS_TIMERFD_GETTIME = 312 + SYS_SIGNALFD4 = 313 + SYS_EVENTFD2 = 314 + SYS_EPOLL_CREATE1 = 315 + SYS_DUP3 = 316 + SYS_PIPE2 = 317 + SYS_INOTIFY_INIT1 = 318 + SYS_PERF_EVENT_OPEN = 319 + SYS_PREADV = 320 + SYS_PWRITEV = 321 + SYS_RT_TGSIGQUEUEINFO = 322 + SYS_FANOTIFY_INIT = 323 + SYS_FANOTIFY_MARK = 324 + SYS_PRLIMIT64 = 325 + SYS_SOCKET = 326 + SYS_BIND = 327 + SYS_CONNECT = 328 + SYS_LISTEN = 329 + SYS_ACCEPT = 330 + SYS_GETSOCKNAME = 331 + SYS_GETPEERNAME = 332 + SYS_SOCKETPAIR = 333 + SYS_SEND = 334 + SYS_SENDTO = 335 + SYS_RECV = 336 + SYS_RECVFROM = 337 + SYS_SHUTDOWN = 338 + SYS_SETSOCKOPT = 339 + SYS_GETSOCKOPT = 340 + SYS_SENDMSG = 341 + SYS_RECVMSG = 342 + SYS_RECVMMSG = 343 + SYS_ACCEPT4 = 344 + SYS_NAME_TO_HANDLE_AT = 345 + SYS_OPEN_BY_HANDLE_AT = 346 + SYS_CLOCK_ADJTIME = 347 + SYS_SYNCFS = 348 + SYS_SENDMMSG = 349 + SYS_SETNS = 350 + SYS_PROCESS_VM_READV = 351 + SYS_PROCESS_VM_WRITEV = 352 + SYS_FINIT_MODULE = 353 + SYS_KCMP = 354 + SYS_SCHED_SETATTR = 355 + SYS_SCHED_GETATTR = 356 + SYS_RENAMEAT2 = 357 + SYS_SECCOMP = 358 + SYS_GETRANDOM = 359 + SYS_MEMFD_CREATE = 360 + SYS_BPF = 361 + SYS_EXECVEAT = 362 + SYS_SWITCH_ENDIAN = 363 + SYS_USERFAULTFD = 364 + SYS_MEMBARRIER = 365 + SYS_MLOCK2 = 378 + SYS_COPY_FILE_RANGE = 379 + SYS_PREADV2 = 380 + SYS_PWRITEV2 = 381 + SYS_KEXEC_FILE_LOAD = 382 + SYS_STATX = 383 + SYS_PKEY_ALLOC = 384 + SYS_PKEY_FREE = 385 + SYS_PKEY_MPROTECT = 386 + SYS_RSEQ = 387 + SYS_IO_PGETEVENTS = 388 + SYS_SEMTIMEDOP = 392 + SYS_SEMGET = 393 + SYS_SEMCTL = 394 + SYS_SHMGET = 395 + SYS_SHMCTL = 396 + SYS_SHMAT = 397 + SYS_SHMDT = 398 + SYS_MSGGET = 399 + SYS_MSGSND = 400 + SYS_MSGRCV = 401 + SYS_MSGCTL = 402 + SYS_PIDFD_SEND_SIGNAL = 424 + SYS_IO_URING_SETUP = 425 + SYS_IO_URING_ENTER = 426 + SYS_IO_URING_REGISTER = 427 + SYS_OPEN_TREE = 428 + SYS_MOVE_MOUNT = 429 + SYS_FSOPEN = 430 + SYS_FSCONFIG = 431 + SYS_FSMOUNT = 432 + SYS_FSPICK = 433 + SYS_PIDFD_OPEN = 434 + SYS_CLONE3 = 435 + SYS_CLOSE_RANGE = 436 + SYS_OPENAT2 = 437 + SYS_PIDFD_GETFD = 438 + SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 + SYS_EPOLL_PWAIT2 = 441 + SYS_MOUNT_SETATTR = 442 + SYS_QUOTACTL_FD = 443 + SYS_LANDLOCK_CREATE_RULESET = 444 + SYS_LANDLOCK_ADD_RULE = 445 + SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_PROCESS_MRELEASE = 448 + SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go new file mode 100644 index 0000000..c3a5af8 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go @@ -0,0 +1,315 @@ +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build riscv64 && linux +// +build riscv64,linux + +package unix + +const ( + SYS_IO_SETUP = 0 + SYS_IO_DESTROY = 1 + SYS_IO_SUBMIT = 2 + SYS_IO_CANCEL = 3 + SYS_IO_GETEVENTS = 4 + SYS_SETXATTR = 5 + SYS_LSETXATTR = 6 + SYS_FSETXATTR = 7 + SYS_GETXATTR = 8 + SYS_LGETXATTR = 9 + SYS_FGETXATTR = 10 + SYS_LISTXATTR = 11 + SYS_LLISTXATTR = 12 + SYS_FLISTXATTR = 13 + SYS_REMOVEXATTR = 14 + SYS_LREMOVEXATTR = 15 + SYS_FREMOVEXATTR = 16 + SYS_GETCWD = 17 + SYS_LOOKUP_DCOOKIE = 18 + SYS_EVENTFD2 = 19 + SYS_EPOLL_CREATE1 = 20 + SYS_EPOLL_CTL = 21 + SYS_EPOLL_PWAIT = 22 + SYS_DUP = 23 + SYS_DUP3 = 24 + SYS_FCNTL = 25 + SYS_INOTIFY_INIT1 = 26 + SYS_INOTIFY_ADD_WATCH = 27 + SYS_INOTIFY_RM_WATCH = 28 + SYS_IOCTL = 29 + SYS_IOPRIO_SET = 30 + SYS_IOPRIO_GET = 31 + SYS_FLOCK = 32 + SYS_MKNODAT = 33 + SYS_MKDIRAT = 34 + SYS_UNLINKAT = 35 + SYS_SYMLINKAT = 36 + SYS_LINKAT = 37 + SYS_UMOUNT2 = 39 + SYS_MOUNT = 40 + SYS_PIVOT_ROOT = 41 + SYS_NFSSERVCTL = 42 + SYS_STATFS = 43 + SYS_FSTATFS = 44 + SYS_TRUNCATE = 45 + SYS_FTRUNCATE = 46 + SYS_FALLOCATE = 47 + SYS_FACCESSAT = 48 + SYS_CHDIR = 49 + SYS_FCHDIR = 50 + SYS_CHROOT = 51 + SYS_FCHMOD = 52 + SYS_FCHMODAT = 53 + SYS_FCHOWNAT = 54 + SYS_FCHOWN = 55 + SYS_OPENAT = 56 + SYS_CLOSE = 57 + SYS_VHANGUP = 58 + SYS_PIPE2 = 59 + SYS_QUOTACTL = 60 + SYS_GETDENTS64 = 61 + SYS_LSEEK = 62 + SYS_READ = 63 + SYS_WRITE = 64 + SYS_READV = 65 + SYS_WRITEV = 66 + SYS_PREAD64 = 67 + SYS_PWRITE64 = 68 + SYS_PREADV = 69 + SYS_PWRITEV = 70 + SYS_SENDFILE = 71 + SYS_PSELECT6 = 72 + SYS_PPOLL = 73 + SYS_SIGNALFD4 = 74 + SYS_VMSPLICE = 75 + SYS_SPLICE = 76 + SYS_TEE = 77 + SYS_READLINKAT = 78 + SYS_FSTATAT = 79 + SYS_FSTAT = 80 + SYS_SYNC = 81 + SYS_FSYNC = 82 + SYS_FDATASYNC = 83 + SYS_SYNC_FILE_RANGE = 84 + SYS_TIMERFD_CREATE = 85 + SYS_TIMERFD_SETTIME = 86 + SYS_TIMERFD_GETTIME = 87 + SYS_UTIMENSAT = 88 + SYS_ACCT = 89 + SYS_CAPGET = 90 + SYS_CAPSET = 91 + SYS_PERSONALITY = 92 + SYS_EXIT = 93 + SYS_EXIT_GROUP = 94 + SYS_WAITID = 95 + SYS_SET_TID_ADDRESS = 96 + SYS_UNSHARE = 97 + SYS_FUTEX = 98 + SYS_SET_ROBUST_LIST = 99 + SYS_GET_ROBUST_LIST = 100 + SYS_NANOSLEEP = 101 + SYS_GETITIMER = 102 + SYS_SETITIMER = 103 + SYS_KEXEC_LOAD = 104 + SYS_INIT_MODULE = 105 + SYS_DELETE_MODULE = 106 + SYS_TIMER_CREATE = 107 + SYS_TIMER_GETTIME = 108 + SYS_TIMER_GETOVERRUN = 109 + SYS_TIMER_SETTIME = 110 + SYS_TIMER_DELETE = 111 + SYS_CLOCK_SETTIME = 112 + SYS_CLOCK_GETTIME = 113 + SYS_CLOCK_GETRES = 114 + SYS_CLOCK_NANOSLEEP = 115 + SYS_SYSLOG = 116 + SYS_PTRACE = 117 + SYS_SCHED_SETPARAM = 118 + SYS_SCHED_SETSCHEDULER = 119 + SYS_SCHED_GETSCHEDULER = 120 + SYS_SCHED_GETPARAM = 121 + SYS_SCHED_SETAFFINITY = 122 + SYS_SCHED_GETAFFINITY = 123 + SYS_SCHED_YIELD = 124 + SYS_SCHED_GET_PRIORITY_MAX = 125 + SYS_SCHED_GET_PRIORITY_MIN = 126 + SYS_SCHED_RR_GET_INTERVAL = 127 + SYS_RESTART_SYSCALL = 128 + SYS_KILL = 129 + SYS_TKILL = 130 + SYS_TGKILL = 131 + SYS_SIGALTSTACK = 132 + SYS_RT_SIGSUSPEND = 133 + SYS_RT_SIGACTION = 134 + SYS_RT_SIGPROCMASK = 135 + SYS_RT_SIGPENDING = 136 + SYS_RT_SIGTIMEDWAIT = 137 + SYS_RT_SIGQUEUEINFO = 138 + SYS_RT_SIGRETURN = 139 + SYS_SETPRIORITY = 140 + SYS_GETPRIORITY = 141 + SYS_REBOOT = 142 + SYS_SETREGID = 143 + SYS_SETGID = 144 + SYS_SETREUID = 145 + SYS_SETUID = 146 + SYS_SETRESUID = 147 + SYS_GETRESUID = 148 + SYS_SETRESGID = 149 + SYS_GETRESGID = 150 + SYS_SETFSUID = 151 + SYS_SETFSGID = 152 + SYS_TIMES = 153 + SYS_SETPGID = 154 + SYS_GETPGID = 155 + SYS_GETSID = 156 + SYS_SETSID = 157 + SYS_GETGROUPS = 158 + SYS_SETGROUPS = 159 + SYS_UNAME = 160 + SYS_SETHOSTNAME = 161 + SYS_SETDOMAINNAME = 162 + SYS_GETRLIMIT = 163 + SYS_SETRLIMIT = 164 + SYS_GETRUSAGE = 165 + SYS_UMASK = 166 + SYS_PRCTL = 167 + SYS_GETCPU = 168 + SYS_GETTIMEOFDAY = 169 + SYS_SETTIMEOFDAY = 170 + SYS_ADJTIMEX = 171 + SYS_GETPID = 172 + SYS_GETPPID = 173 + SYS_GETUID = 174 + SYS_GETEUID = 175 + SYS_GETGID = 176 + SYS_GETEGID = 177 + SYS_GETTID = 178 + SYS_SYSINFO = 179 + SYS_MQ_OPEN = 180 + SYS_MQ_UNLINK = 181 + SYS_MQ_TIMEDSEND = 182 + SYS_MQ_TIMEDRECEIVE = 183 + SYS_MQ_NOTIFY = 184 + SYS_MQ_GETSETATTR = 185 + SYS_MSGGET = 186 + SYS_MSGCTL = 187 + SYS_MSGRCV = 188 + SYS_MSGSND = 189 + SYS_SEMGET = 190 + SYS_SEMCTL = 191 + SYS_SEMTIMEDOP = 192 + SYS_SEMOP = 193 + SYS_SHMGET = 194 + SYS_SHMCTL = 195 + SYS_SHMAT = 196 + SYS_SHMDT = 197 + SYS_SOCKET = 198 + SYS_SOCKETPAIR = 199 + SYS_BIND = 200 + SYS_LISTEN = 201 + SYS_ACCEPT = 202 + SYS_CONNECT = 203 + SYS_GETSOCKNAME = 204 + SYS_GETPEERNAME = 205 + SYS_SENDTO = 206 + SYS_RECVFROM = 207 + SYS_SETSOCKOPT = 208 + SYS_GETSOCKOPT = 209 + SYS_SHUTDOWN = 210 + SYS_SENDMSG = 211 + SYS_RECVMSG = 212 + SYS_READAHEAD = 213 + SYS_BRK = 214 + SYS_MUNMAP = 215 + SYS_MREMAP = 216 + SYS_ADD_KEY = 217 + SYS_REQUEST_KEY = 218 + SYS_KEYCTL = 219 + SYS_CLONE = 220 + SYS_EXECVE = 221 + SYS_MMAP = 222 + SYS_FADVISE64 = 223 + SYS_SWAPON = 224 + SYS_SWAPOFF = 225 + SYS_MPROTECT = 226 + SYS_MSYNC = 227 + SYS_MLOCK = 228 + SYS_MUNLOCK = 229 + SYS_MLOCKALL = 230 + SYS_MUNLOCKALL = 231 + SYS_MINCORE = 232 + SYS_MADVISE = 233 + SYS_REMAP_FILE_PAGES = 234 + SYS_MBIND = 235 + SYS_GET_MEMPOLICY = 236 + SYS_SET_MEMPOLICY = 237 + SYS_MIGRATE_PAGES = 238 + SYS_MOVE_PAGES = 239 + SYS_RT_TGSIGQUEUEINFO = 240 + SYS_PERF_EVENT_OPEN = 241 + SYS_ACCEPT4 = 242 + SYS_RECVMMSG = 243 + SYS_ARCH_SPECIFIC_SYSCALL = 244 + SYS_WAIT4 = 260 + SYS_PRLIMIT64 = 261 + SYS_FANOTIFY_INIT = 262 + SYS_FANOTIFY_MARK = 263 + SYS_NAME_TO_HANDLE_AT = 264 + SYS_OPEN_BY_HANDLE_AT = 265 + SYS_CLOCK_ADJTIME = 266 + SYS_SYNCFS = 267 + SYS_SETNS = 268 + SYS_SENDMMSG = 269 + SYS_PROCESS_VM_READV = 270 + SYS_PROCESS_VM_WRITEV = 271 + SYS_KCMP = 272 + SYS_FINIT_MODULE = 273 + SYS_SCHED_SETATTR = 274 + SYS_SCHED_GETATTR = 275 + SYS_RENAMEAT2 = 276 + SYS_SECCOMP = 277 + SYS_GETRANDOM = 278 + SYS_MEMFD_CREATE = 279 + SYS_BPF = 280 + SYS_EXECVEAT = 281 + SYS_USERFAULTFD = 282 + SYS_MEMBARRIER = 283 + SYS_MLOCK2 = 284 + SYS_COPY_FILE_RANGE = 285 + SYS_PREADV2 = 286 + SYS_PWRITEV2 = 287 + SYS_PKEY_MPROTECT = 288 + SYS_PKEY_ALLOC = 289 + SYS_PKEY_FREE = 290 + SYS_STATX = 291 + SYS_IO_PGETEVENTS = 292 + SYS_RSEQ = 293 + SYS_KEXEC_FILE_LOAD = 294 + SYS_PIDFD_SEND_SIGNAL = 424 + SYS_IO_URING_SETUP = 425 + SYS_IO_URING_ENTER = 426 + SYS_IO_URING_REGISTER = 427 + SYS_OPEN_TREE = 428 + SYS_MOVE_MOUNT = 429 + SYS_FSOPEN = 430 + SYS_FSCONFIG = 431 + SYS_FSMOUNT = 432 + SYS_FSPICK = 433 + SYS_PIDFD_OPEN = 434 + SYS_CLONE3 = 435 + SYS_CLOSE_RANGE = 436 + SYS_OPENAT2 = 437 + SYS_PIDFD_GETFD = 438 + SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 + SYS_EPOLL_PWAIT2 = 441 + SYS_MOUNT_SETATTR = 442 + SYS_QUOTACTL_FD = 443 + SYS_LANDLOCK_CREATE_RULESET = 444 + SYS_LANDLOCK_ADD_RULE = 445 + SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_PROCESS_MRELEASE = 448 + SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go new file mode 100644 index 0000000..8ffa664 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -0,0 +1,378 @@ +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build s390x && linux +// +build s390x,linux + +package unix + +const ( + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_RESTART_SYSCALL = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_BRK = 45 + SYS_SIGNAL = 48 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_SETPGID = 57 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_SYMLINK = 83 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_LOOKUP_DCOOKIE = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_GETDENTS = 141 + SYS_SELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_QUERY_MODULE = 167 + SYS_POLL = 168 + SYS_NFSSERVCTL = 169 + SYS_PRCTL = 172 + SYS_RT_SIGRETURN = 173 + SYS_RT_SIGACTION = 174 + SYS_RT_SIGPROCMASK = 175 + SYS_RT_SIGPENDING = 176 + SYS_RT_SIGTIMEDWAIT = 177 + SYS_RT_SIGQUEUEINFO = 178 + SYS_RT_SIGSUSPEND = 179 + SYS_PREAD64 = 180 + SYS_PWRITE64 = 181 + SYS_GETCWD = 183 + SYS_CAPGET = 184 + SYS_CAPSET = 185 + SYS_SIGALTSTACK = 186 + SYS_SENDFILE = 187 + SYS_GETPMSG = 188 + SYS_PUTPMSG = 189 + SYS_VFORK = 190 + SYS_GETRLIMIT = 191 + SYS_LCHOWN = 198 + SYS_GETUID = 199 + SYS_GETGID = 200 + SYS_GETEUID = 201 + SYS_GETEGID = 202 + SYS_SETREUID = 203 + SYS_SETREGID = 204 + SYS_GETGROUPS = 205 + SYS_SETGROUPS = 206 + SYS_FCHOWN = 207 + SYS_SETRESUID = 208 + SYS_GETRESUID = 209 + SYS_SETRESGID = 210 + SYS_GETRESGID = 211 + SYS_CHOWN = 212 + SYS_SETUID = 213 + SYS_SETGID = 214 + SYS_SETFSUID = 215 + SYS_SETFSGID = 216 + SYS_PIVOT_ROOT = 217 + SYS_MINCORE = 218 + SYS_MADVISE = 219 + SYS_GETDENTS64 = 220 + SYS_READAHEAD = 222 + SYS_SETXATTR = 224 + SYS_LSETXATTR = 225 + SYS_FSETXATTR = 226 + SYS_GETXATTR = 227 + SYS_LGETXATTR = 228 + SYS_FGETXATTR = 229 + SYS_LISTXATTR = 230 + SYS_LLISTXATTR = 231 + SYS_FLISTXATTR = 232 + SYS_REMOVEXATTR = 233 + SYS_LREMOVEXATTR = 234 + SYS_FREMOVEXATTR = 235 + SYS_GETTID = 236 + SYS_TKILL = 237 + SYS_FUTEX = 238 + SYS_SCHED_SETAFFINITY = 239 + SYS_SCHED_GETAFFINITY = 240 + SYS_TGKILL = 241 + SYS_IO_SETUP = 243 + SYS_IO_DESTROY = 244 + SYS_IO_GETEVENTS = 245 + SYS_IO_SUBMIT = 246 + SYS_IO_CANCEL = 247 + SYS_EXIT_GROUP = 248 + SYS_EPOLL_CREATE = 249 + SYS_EPOLL_CTL = 250 + SYS_EPOLL_WAIT = 251 + SYS_SET_TID_ADDRESS = 252 + SYS_FADVISE64 = 253 + SYS_TIMER_CREATE = 254 + SYS_TIMER_SETTIME = 255 + SYS_TIMER_GETTIME = 256 + SYS_TIMER_GETOVERRUN = 257 + SYS_TIMER_DELETE = 258 + SYS_CLOCK_SETTIME = 259 + SYS_CLOCK_GETTIME = 260 + SYS_CLOCK_GETRES = 261 + SYS_CLOCK_NANOSLEEP = 262 + SYS_STATFS64 = 265 + SYS_FSTATFS64 = 266 + SYS_REMAP_FILE_PAGES = 267 + SYS_MBIND = 268 + SYS_GET_MEMPOLICY = 269 + SYS_SET_MEMPOLICY = 270 + SYS_MQ_OPEN = 271 + SYS_MQ_UNLINK = 272 + SYS_MQ_TIMEDSEND = 273 + SYS_MQ_TIMEDRECEIVE = 274 + SYS_MQ_NOTIFY = 275 + SYS_MQ_GETSETATTR = 276 + SYS_KEXEC_LOAD = 277 + SYS_ADD_KEY = 278 + SYS_REQUEST_KEY = 279 + SYS_KEYCTL = 280 + SYS_WAITID = 281 + SYS_IOPRIO_SET = 282 + SYS_IOPRIO_GET = 283 + SYS_INOTIFY_INIT = 284 + SYS_INOTIFY_ADD_WATCH = 285 + SYS_INOTIFY_RM_WATCH = 286 + SYS_MIGRATE_PAGES = 287 + SYS_OPENAT = 288 + SYS_MKDIRAT = 289 + SYS_MKNODAT = 290 + SYS_FCHOWNAT = 291 + SYS_FUTIMESAT = 292 + SYS_NEWFSTATAT = 293 + SYS_UNLINKAT = 294 + SYS_RENAMEAT = 295 + SYS_LINKAT = 296 + SYS_SYMLINKAT = 297 + SYS_READLINKAT = 298 + SYS_FCHMODAT = 299 + SYS_FACCESSAT = 300 + SYS_PSELECT6 = 301 + SYS_PPOLL = 302 + SYS_UNSHARE = 303 + SYS_SET_ROBUST_LIST = 304 + SYS_GET_ROBUST_LIST = 305 + SYS_SPLICE = 306 + SYS_SYNC_FILE_RANGE = 307 + SYS_TEE = 308 + SYS_VMSPLICE = 309 + SYS_MOVE_PAGES = 310 + SYS_GETCPU = 311 + SYS_EPOLL_PWAIT = 312 + SYS_UTIMES = 313 + SYS_FALLOCATE = 314 + SYS_UTIMENSAT = 315 + SYS_SIGNALFD = 316 + SYS_TIMERFD = 317 + SYS_EVENTFD = 318 + SYS_TIMERFD_CREATE = 319 + SYS_TIMERFD_SETTIME = 320 + SYS_TIMERFD_GETTIME = 321 + SYS_SIGNALFD4 = 322 + SYS_EVENTFD2 = 323 + SYS_INOTIFY_INIT1 = 324 + SYS_PIPE2 = 325 + SYS_DUP3 = 326 + SYS_EPOLL_CREATE1 = 327 + SYS_PREADV = 328 + SYS_PWRITEV = 329 + SYS_RT_TGSIGQUEUEINFO = 330 + SYS_PERF_EVENT_OPEN = 331 + SYS_FANOTIFY_INIT = 332 + SYS_FANOTIFY_MARK = 333 + SYS_PRLIMIT64 = 334 + SYS_NAME_TO_HANDLE_AT = 335 + SYS_OPEN_BY_HANDLE_AT = 336 + SYS_CLOCK_ADJTIME = 337 + SYS_SYNCFS = 338 + SYS_SETNS = 339 + SYS_PROCESS_VM_READV = 340 + SYS_PROCESS_VM_WRITEV = 341 + SYS_S390_RUNTIME_INSTR = 342 + SYS_KCMP = 343 + SYS_FINIT_MODULE = 344 + SYS_SCHED_SETATTR = 345 + SYS_SCHED_GETATTR = 346 + SYS_RENAMEAT2 = 347 + SYS_SECCOMP = 348 + SYS_GETRANDOM = 349 + SYS_MEMFD_CREATE = 350 + SYS_BPF = 351 + SYS_S390_PCI_MMIO_WRITE = 352 + SYS_S390_PCI_MMIO_READ = 353 + SYS_EXECVEAT = 354 + SYS_USERFAULTFD = 355 + SYS_MEMBARRIER = 356 + SYS_RECVMMSG = 357 + SYS_SENDMMSG = 358 + SYS_SOCKET = 359 + SYS_SOCKETPAIR = 360 + SYS_BIND = 361 + SYS_CONNECT = 362 + SYS_LISTEN = 363 + SYS_ACCEPT4 = 364 + SYS_GETSOCKOPT = 365 + SYS_SETSOCKOPT = 366 + SYS_GETSOCKNAME = 367 + SYS_GETPEERNAME = 368 + SYS_SENDTO = 369 + SYS_SENDMSG = 370 + SYS_RECVFROM = 371 + SYS_RECVMSG = 372 + SYS_SHUTDOWN = 373 + SYS_MLOCK2 = 374 + SYS_COPY_FILE_RANGE = 375 + SYS_PREADV2 = 376 + SYS_PWRITEV2 = 377 + SYS_S390_GUARDED_STORAGE = 378 + SYS_STATX = 379 + SYS_S390_STHYI = 380 + SYS_KEXEC_FILE_LOAD = 381 + SYS_IO_PGETEVENTS = 382 + SYS_RSEQ = 383 + SYS_PKEY_MPROTECT = 384 + SYS_PKEY_ALLOC = 385 + SYS_PKEY_FREE = 386 + SYS_SEMTIMEDOP = 392 + SYS_SEMGET = 393 + SYS_SEMCTL = 394 + SYS_SHMGET = 395 + SYS_SHMCTL = 396 + SYS_SHMAT = 397 + SYS_SHMDT = 398 + SYS_MSGGET = 399 + SYS_MSGSND = 400 + SYS_MSGRCV = 401 + SYS_MSGCTL = 402 + SYS_PIDFD_SEND_SIGNAL = 424 + SYS_IO_URING_SETUP = 425 + SYS_IO_URING_ENTER = 426 + SYS_IO_URING_REGISTER = 427 + SYS_OPEN_TREE = 428 + SYS_MOVE_MOUNT = 429 + SYS_FSOPEN = 430 + SYS_FSCONFIG = 431 + SYS_FSMOUNT = 432 + SYS_FSPICK = 433 + SYS_PIDFD_OPEN = 434 + SYS_CLONE3 = 435 + SYS_CLOSE_RANGE = 436 + SYS_OPENAT2 = 437 + SYS_PIDFD_GETFD = 438 + SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 + SYS_EPOLL_PWAIT2 = 441 + SYS_MOUNT_SETATTR = 442 + SYS_QUOTACTL_FD = 443 + SYS_LANDLOCK_CREATE_RULESET = 444 + SYS_LANDLOCK_ADD_RULE = 445 + SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_PROCESS_MRELEASE = 448 + SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go new file mode 100644 index 0000000..6a39640 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go @@ -0,0 +1,392 @@ +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build sparc64 && linux +// +build sparc64,linux + +package unix + +const ( + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAIT4 = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECV = 11 + SYS_CHDIR = 12 + SYS_CHOWN = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_BRK = 17 + SYS_PERFCTR = 18 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_CAPGET = 21 + SYS_CAPSET = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_VMSPLICE = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_SIGALTSTACK = 28 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_STAT = 38 + SYS_SENDFILE = 39 + SYS_LSTAT = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_UMOUNT2 = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_SIGNAL = 48 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_MEMORY_ORDERING = 52 + SYS_IOCTL = 54 + SYS_REBOOT = 55 + SYS_SYMLINK = 57 + SYS_READLINK = 58 + SYS_EXECVE = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_FSTAT = 62 + SYS_FSTAT64 = 63 + SYS_GETPAGESIZE = 64 + SYS_MSYNC = 65 + SYS_VFORK = 66 + SYS_PREAD64 = 67 + SYS_PWRITE64 = 68 + SYS_MMAP = 71 + SYS_MUNMAP = 73 + SYS_MPROTECT = 74 + SYS_MADVISE = 75 + SYS_VHANGUP = 76 + SYS_MINCORE = 78 + SYS_GETGROUPS = 79 + SYS_SETGROUPS = 80 + SYS_GETPGRP = 81 + SYS_SETITIMER = 83 + SYS_SWAPON = 85 + SYS_GETITIMER = 86 + SYS_SETHOSTNAME = 88 + SYS_DUP2 = 90 + SYS_FCNTL = 92 + SYS_SELECT = 93 + SYS_FSYNC = 95 + SYS_SETPRIORITY = 96 + SYS_SOCKET = 97 + SYS_CONNECT = 98 + SYS_ACCEPT = 99 + SYS_GETPRIORITY = 100 + SYS_RT_SIGRETURN = 101 + SYS_RT_SIGACTION = 102 + SYS_RT_SIGPROCMASK = 103 + SYS_RT_SIGPENDING = 104 + SYS_RT_SIGTIMEDWAIT = 105 + SYS_RT_SIGQUEUEINFO = 106 + SYS_RT_SIGSUSPEND = 107 + SYS_SETRESUID = 108 + SYS_GETRESUID = 109 + SYS_SETRESGID = 110 + SYS_GETRESGID = 111 + SYS_RECVMSG = 113 + SYS_SENDMSG = 114 + SYS_GETTIMEOFDAY = 116 + SYS_GETRUSAGE = 117 + SYS_GETSOCKOPT = 118 + SYS_GETCWD = 119 + SYS_READV = 120 + SYS_WRITEV = 121 + SYS_SETTIMEOFDAY = 122 + SYS_FCHOWN = 123 + SYS_FCHMOD = 124 + SYS_RECVFROM = 125 + SYS_SETREUID = 126 + SYS_SETREGID = 127 + SYS_RENAME = 128 + SYS_TRUNCATE = 129 + SYS_FTRUNCATE = 130 + SYS_FLOCK = 131 + SYS_LSTAT64 = 132 + SYS_SENDTO = 133 + SYS_SHUTDOWN = 134 + SYS_SOCKETPAIR = 135 + SYS_MKDIR = 136 + SYS_RMDIR = 137 + SYS_UTIMES = 138 + SYS_STAT64 = 139 + SYS_SENDFILE64 = 140 + SYS_GETPEERNAME = 141 + SYS_FUTEX = 142 + SYS_GETTID = 143 + SYS_GETRLIMIT = 144 + SYS_SETRLIMIT = 145 + SYS_PIVOT_ROOT = 146 + SYS_PRCTL = 147 + SYS_PCICONFIG_READ = 148 + SYS_PCICONFIG_WRITE = 149 + SYS_GETSOCKNAME = 150 + SYS_INOTIFY_INIT = 151 + SYS_INOTIFY_ADD_WATCH = 152 + SYS_POLL = 153 + SYS_GETDENTS64 = 154 + SYS_INOTIFY_RM_WATCH = 156 + SYS_STATFS = 157 + SYS_FSTATFS = 158 + SYS_UMOUNT = 159 + SYS_SCHED_SET_AFFINITY = 160 + SYS_SCHED_GET_AFFINITY = 161 + SYS_GETDOMAINNAME = 162 + SYS_SETDOMAINNAME = 163 + SYS_UTRAP_INSTALL = 164 + SYS_QUOTACTL = 165 + SYS_SET_TID_ADDRESS = 166 + SYS_MOUNT = 167 + SYS_USTAT = 168 + SYS_SETXATTR = 169 + SYS_LSETXATTR = 170 + SYS_FSETXATTR = 171 + SYS_GETXATTR = 172 + SYS_LGETXATTR = 173 + SYS_GETDENTS = 174 + SYS_SETSID = 175 + SYS_FCHDIR = 176 + SYS_FGETXATTR = 177 + SYS_LISTXATTR = 178 + SYS_LLISTXATTR = 179 + SYS_FLISTXATTR = 180 + SYS_REMOVEXATTR = 181 + SYS_LREMOVEXATTR = 182 + SYS_SIGPENDING = 183 + SYS_QUERY_MODULE = 184 + SYS_SETPGID = 185 + SYS_FREMOVEXATTR = 186 + SYS_TKILL = 187 + SYS_EXIT_GROUP = 188 + SYS_UNAME = 189 + SYS_INIT_MODULE = 190 + SYS_PERSONALITY = 191 + SYS_REMAP_FILE_PAGES = 192 + SYS_EPOLL_CREATE = 193 + SYS_EPOLL_CTL = 194 + SYS_EPOLL_WAIT = 195 + SYS_IOPRIO_SET = 196 + SYS_GETPPID = 197 + SYS_SIGACTION = 198 + SYS_SGETMASK = 199 + SYS_SSETMASK = 200 + SYS_SIGSUSPEND = 201 + SYS_OLDLSTAT = 202 + SYS_USELIB = 203 + SYS_READDIR = 204 + SYS_READAHEAD = 205 + SYS_SOCKETCALL = 206 + SYS_SYSLOG = 207 + SYS_LOOKUP_DCOOKIE = 208 + SYS_FADVISE64 = 209 + SYS_FADVISE64_64 = 210 + SYS_TGKILL = 211 + SYS_WAITPID = 212 + SYS_SWAPOFF = 213 + SYS_SYSINFO = 214 + SYS_IPC = 215 + SYS_SIGRETURN = 216 + SYS_CLONE = 217 + SYS_IOPRIO_GET = 218 + SYS_ADJTIMEX = 219 + SYS_SIGPROCMASK = 220 + SYS_CREATE_MODULE = 221 + SYS_DELETE_MODULE = 222 + SYS_GET_KERNEL_SYMS = 223 + SYS_GETPGID = 224 + SYS_BDFLUSH = 225 + SYS_SYSFS = 226 + SYS_AFS_SYSCALL = 227 + SYS_SETFSUID = 228 + SYS_SETFSGID = 229 + SYS__NEWSELECT = 230 + SYS_SPLICE = 232 + SYS_STIME = 233 + SYS_STATFS64 = 234 + SYS_FSTATFS64 = 235 + SYS__LLSEEK = 236 + SYS_MLOCK = 237 + SYS_MUNLOCK = 238 + SYS_MLOCKALL = 239 + SYS_MUNLOCKALL = 240 + SYS_SCHED_SETPARAM = 241 + SYS_SCHED_GETPARAM = 242 + SYS_SCHED_SETSCHEDULER = 243 + SYS_SCHED_GETSCHEDULER = 244 + SYS_SCHED_YIELD = 245 + SYS_SCHED_GET_PRIORITY_MAX = 246 + SYS_SCHED_GET_PRIORITY_MIN = 247 + SYS_SCHED_RR_GET_INTERVAL = 248 + SYS_NANOSLEEP = 249 + SYS_MREMAP = 250 + SYS__SYSCTL = 251 + SYS_GETSID = 252 + SYS_FDATASYNC = 253 + SYS_NFSSERVCTL = 254 + SYS_SYNC_FILE_RANGE = 255 + SYS_CLOCK_SETTIME = 256 + SYS_CLOCK_GETTIME = 257 + SYS_CLOCK_GETRES = 258 + SYS_CLOCK_NANOSLEEP = 259 + SYS_SCHED_GETAFFINITY = 260 + SYS_SCHED_SETAFFINITY = 261 + SYS_TIMER_SETTIME = 262 + SYS_TIMER_GETTIME = 263 + SYS_TIMER_GETOVERRUN = 264 + SYS_TIMER_DELETE = 265 + SYS_TIMER_CREATE = 266 + SYS_VSERVER = 267 + SYS_IO_SETUP = 268 + SYS_IO_DESTROY = 269 + SYS_IO_SUBMIT = 270 + SYS_IO_CANCEL = 271 + SYS_IO_GETEVENTS = 272 + SYS_MQ_OPEN = 273 + SYS_MQ_UNLINK = 274 + SYS_MQ_TIMEDSEND = 275 + SYS_MQ_TIMEDRECEIVE = 276 + SYS_MQ_NOTIFY = 277 + SYS_MQ_GETSETATTR = 278 + SYS_WAITID = 279 + SYS_TEE = 280 + SYS_ADD_KEY = 281 + SYS_REQUEST_KEY = 282 + SYS_KEYCTL = 283 + SYS_OPENAT = 284 + SYS_MKDIRAT = 285 + SYS_MKNODAT = 286 + SYS_FCHOWNAT = 287 + SYS_FUTIMESAT = 288 + SYS_FSTATAT64 = 289 + SYS_UNLINKAT = 290 + SYS_RENAMEAT = 291 + SYS_LINKAT = 292 + SYS_SYMLINKAT = 293 + SYS_READLINKAT = 294 + SYS_FCHMODAT = 295 + SYS_FACCESSAT = 296 + SYS_PSELECT6 = 297 + SYS_PPOLL = 298 + SYS_UNSHARE = 299 + SYS_SET_ROBUST_LIST = 300 + SYS_GET_ROBUST_LIST = 301 + SYS_MIGRATE_PAGES = 302 + SYS_MBIND = 303 + SYS_GET_MEMPOLICY = 304 + SYS_SET_MEMPOLICY = 305 + SYS_KEXEC_LOAD = 306 + SYS_MOVE_PAGES = 307 + SYS_GETCPU = 308 + SYS_EPOLL_PWAIT = 309 + SYS_UTIMENSAT = 310 + SYS_SIGNALFD = 311 + SYS_TIMERFD_CREATE = 312 + SYS_EVENTFD = 313 + SYS_FALLOCATE = 314 + SYS_TIMERFD_SETTIME = 315 + SYS_TIMERFD_GETTIME = 316 + SYS_SIGNALFD4 = 317 + SYS_EVENTFD2 = 318 + SYS_EPOLL_CREATE1 = 319 + SYS_DUP3 = 320 + SYS_PIPE2 = 321 + SYS_INOTIFY_INIT1 = 322 + SYS_ACCEPT4 = 323 + SYS_PREADV = 324 + SYS_PWRITEV = 325 + SYS_RT_TGSIGQUEUEINFO = 326 + SYS_PERF_EVENT_OPEN = 327 + SYS_RECVMMSG = 328 + SYS_FANOTIFY_INIT = 329 + SYS_FANOTIFY_MARK = 330 + SYS_PRLIMIT64 = 331 + SYS_NAME_TO_HANDLE_AT = 332 + SYS_OPEN_BY_HANDLE_AT = 333 + SYS_CLOCK_ADJTIME = 334 + SYS_SYNCFS = 335 + SYS_SENDMMSG = 336 + SYS_SETNS = 337 + SYS_PROCESS_VM_READV = 338 + SYS_PROCESS_VM_WRITEV = 339 + SYS_KERN_FEATURES = 340 + SYS_KCMP = 341 + SYS_FINIT_MODULE = 342 + SYS_SCHED_SETATTR = 343 + SYS_SCHED_GETATTR = 344 + SYS_RENAMEAT2 = 345 + SYS_SECCOMP = 346 + SYS_GETRANDOM = 347 + SYS_MEMFD_CREATE = 348 + SYS_BPF = 349 + SYS_EXECVEAT = 350 + SYS_MEMBARRIER = 351 + SYS_USERFAULTFD = 352 + SYS_BIND = 353 + SYS_LISTEN = 354 + SYS_SETSOCKOPT = 355 + SYS_MLOCK2 = 356 + SYS_COPY_FILE_RANGE = 357 + SYS_PREADV2 = 358 + SYS_PWRITEV2 = 359 + SYS_STATX = 360 + SYS_IO_PGETEVENTS = 361 + SYS_PKEY_MPROTECT = 362 + SYS_PKEY_ALLOC = 363 + SYS_PKEY_FREE = 364 + SYS_RSEQ = 365 + SYS_SEMTIMEDOP = 392 + SYS_SEMGET = 393 + SYS_SEMCTL = 394 + SYS_SHMGET = 395 + SYS_SHMCTL = 396 + SYS_SHMAT = 397 + SYS_SHMDT = 398 + SYS_MSGGET = 399 + SYS_MSGSND = 400 + SYS_MSGRCV = 401 + SYS_MSGCTL = 402 + SYS_PIDFD_SEND_SIGNAL = 424 + SYS_IO_URING_SETUP = 425 + SYS_IO_URING_ENTER = 426 + SYS_IO_URING_REGISTER = 427 + SYS_OPEN_TREE = 428 + SYS_MOVE_MOUNT = 429 + SYS_FSOPEN = 430 + SYS_FSCONFIG = 431 + SYS_FSMOUNT = 432 + SYS_FSPICK = 433 + SYS_PIDFD_OPEN = 434 + SYS_CLOSE_RANGE = 436 + SYS_OPENAT2 = 437 + SYS_PIDFD_GETFD = 438 + SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 + SYS_EPOLL_PWAIT2 = 441 + SYS_MOUNT_SETATTR = 442 + SYS_QUOTACTL_FD = 443 + SYS_LANDLOCK_CREATE_RULESET = 444 + SYS_LANDLOCK_ADD_RULE = 445 + SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_PROCESS_MRELEASE = 448 + SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go new file mode 100644 index 0000000..3a6699e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go @@ -0,0 +1,275 @@ +// go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build 386 && netbsd +// +build 386,netbsd + +package unix + +const ( + SYS_EXIT = 1 // { void|sys||exit(int rval); } + SYS_FORK = 2 // { int|sys||fork(void); } + SYS_READ = 3 // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int|sys||open(const char *path, int flags, ... mode_t mode); } + SYS_CLOSE = 6 // { int|sys||close(int fd); } + SYS_LINK = 9 // { int|sys||link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int|sys||unlink(const char *path); } + SYS_CHDIR = 12 // { int|sys||chdir(const char *path); } + SYS_FCHDIR = 13 // { int|sys||fchdir(int fd); } + SYS_CHMOD = 15 // { int|sys||chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int|sys||chown(const char *path, uid_t uid, gid_t gid); } + SYS_BREAK = 17 // { int|sys||obreak(char *nsize); } + SYS_GETPID = 20 // { pid_t|sys||getpid_with_ppid(void); } + SYS_UNMOUNT = 22 // { int|sys||unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int|sys||setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t|sys||getuid_with_euid(void); } + SYS_GETEUID = 25 // { uid_t|sys||geteuid(void); } + SYS_PTRACE = 26 // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); } + SYS_RECVMSG = 27 // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } + SYS_ACCEPT = 30 // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); } + SYS_GETPEERNAME = 31 // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_GETSOCKNAME = 32 // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_ACCESS = 33 // { int|sys||access(const char *path, int flags); } + SYS_CHFLAGS = 34 // { int|sys||chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int|sys||fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { void|sys||sync(void); } + SYS_KILL = 37 // { int|sys||kill(pid_t pid, int signum); } + SYS_GETPPID = 39 // { pid_t|sys||getppid(void); } + SYS_DUP = 41 // { int|sys||dup(int fd); } + SYS_PIPE = 42 // { int|sys||pipe(void); } + SYS_GETEGID = 43 // { gid_t|sys||getegid(void); } + SYS_PROFIL = 44 // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); } + SYS_KTRACE = 45 // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); } + SYS_GETGID = 47 // { gid_t|sys||getgid_with_egid(void); } + SYS___GETLOGIN = 49 // { int|sys||__getlogin(char *namebuf, size_t namelen); } + SYS___SETLOGIN = 50 // { int|sys||__setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int|sys||acct(const char *path); } + SYS_IOCTL = 54 // { int|sys||ioctl(int fd, u_long com, ... void *data); } + SYS_REVOKE = 56 // { int|sys||revoke(const char *path); } + SYS_SYMLINK = 57 // { int|sys||symlink(const char *path, const char *link); } + SYS_READLINK = 58 // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int|sys||execve(const char *path, char * const *argp, char * const *envp); } + SYS_UMASK = 60 // { mode_t|sys||umask(mode_t newmask); } + SYS_CHROOT = 61 // { int|sys||chroot(const char *path); } + SYS_VFORK = 66 // { int|sys||vfork(void); } + SYS_SBRK = 69 // { int|sys||sbrk(intptr_t incr); } + SYS_SSTK = 70 // { int|sys||sstk(int incr); } + SYS_VADVISE = 72 // { int|sys||ovadvise(int anom); } + SYS_MUNMAP = 73 // { int|sys||munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int|sys||mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int|sys||madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int|sys||mincore(void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int|sys||getgroups(int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); } + SYS_GETPGRP = 81 // { int|sys||getpgrp(void); } + SYS_SETPGID = 82 // { int|sys||setpgid(pid_t pid, pid_t pgid); } + SYS_DUP2 = 90 // { int|sys||dup2(int from, int to); } + SYS_FCNTL = 92 // { int|sys||fcntl(int fd, int cmd, ... void *arg); } + SYS_FSYNC = 95 // { int|sys||fsync(int fd); } + SYS_SETPRIORITY = 96 // { int|sys||setpriority(int which, id_t who, int prio); } + SYS_CONNECT = 98 // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_GETPRIORITY = 100 // { int|sys||getpriority(int which, id_t who); } + SYS_BIND = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_SETSOCKOPT = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } + SYS_LISTEN = 106 // { int|sys||listen(int s, int backlog); } + SYS_GETSOCKOPT = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } + SYS_READV = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); } + SYS_WRITEV = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); } + SYS_FCHOWN = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int|sys||fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int|sys||rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int|sys||flock(int fd, int how); } + SYS_MKFIFO = 132 // { int|sys||mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } + SYS_SHUTDOWN = 134 // { int|sys||shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int|sys||mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int|sys||rmdir(const char *path); } + SYS_SETSID = 147 // { int|sys||setsid(void); } + SYS_SYSARCH = 165 // { int|sys||sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_PWRITE = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_NTP_ADJTIME = 176 // { int|sys||ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int|sys||setgid(gid_t gid); } + SYS_SETEGID = 182 // { int|sys||setegid(gid_t egid); } + SYS_SETEUID = 183 // { int|sys||seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long|sys||pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long|sys||fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); } + SYS_SETRLIMIT = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); } + SYS_MMAP = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); } + SYS_LSEEK = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); } + SYS_TRUNCATE = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); } + SYS_FTRUNCATE = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); } + SYS___SYSCTL = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); } + SYS_MLOCK = 203 // { int|sys||mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int|sys||munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int|sys||undelete(const char *path); } + SYS_GETPGID = 207 // { pid_t|sys||getpgid(pid_t pid); } + SYS_REBOOT = 208 // { int|sys||reboot(int opt, char *bootstr); } + SYS_POLL = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_SEMGET = 221 // { int|sys||semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_SEMCONFIG = 223 // { int|sys||semconfig(int flag); } + SYS_MSGGET = 225 // { int|sys||msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int|sys||shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); } + SYS_TIMER_CREATE = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); } + SYS_TIMER_DELETE = 236 // { int|sys||timer_delete(timer_t timerid); } + SYS_TIMER_GETOVERRUN = 239 // { int|sys||timer_getoverrun(timer_t timerid); } + SYS_FDATASYNC = 241 // { int|sys||fdatasync(int fd); } + SYS_MLOCKALL = 242 // { int|sys||mlockall(int flags); } + SYS_MUNLOCKALL = 243 // { int|sys||munlockall(void); } + SYS_SIGQUEUEINFO = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); } + SYS_MODCTL = 246 // { int|sys||modctl(int cmd, void *arg); } + SYS___POSIX_RENAME = 270 // { int|sys||__posix_rename(const char *from, const char *to); } + SYS_SWAPCTL = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); } + SYS_MINHERIT = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); } + SYS_LCHMOD = 274 // { int|sys||lchmod(const char *path, mode_t mode); } + SYS_LCHOWN = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); } + SYS_MSYNC = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); } + SYS___POSIX_CHOWN = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); } + SYS___POSIX_FCHOWN = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); } + SYS___POSIX_LCHOWN = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 286 // { pid_t|sys||getsid(pid_t pid); } + SYS___CLONE = 287 // { pid_t|sys||__clone(int flags, void *stack); } + SYS_FKTRACE = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); } + SYS_PREADV = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS_PWRITEV = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS___GETCWD = 296 // { int|sys||__getcwd(char *bufp, size_t length); } + SYS_FCHROOT = 297 // { int|sys||fchroot(int fd); } + SYS_LCHFLAGS = 304 // { int|sys||lchflags(const char *path, u_long flags); } + SYS_ISSETUGID = 305 // { int|sys||issetugid(void); } + SYS_UTRACE = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); } + SYS_GETCONTEXT = 307 // { int|sys||getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 308 // { int|sys||setcontext(const struct __ucontext *ucp); } + SYS__LWP_CREATE = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); } + SYS__LWP_EXIT = 310 // { int|sys||_lwp_exit(void); } + SYS__LWP_SELF = 311 // { lwpid_t|sys||_lwp_self(void); } + SYS__LWP_WAIT = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); } + SYS__LWP_SUSPEND = 313 // { int|sys||_lwp_suspend(lwpid_t target); } + SYS__LWP_CONTINUE = 314 // { int|sys||_lwp_continue(lwpid_t target); } + SYS__LWP_WAKEUP = 315 // { int|sys||_lwp_wakeup(lwpid_t target); } + SYS__LWP_GETPRIVATE = 316 // { void *|sys||_lwp_getprivate(void); } + SYS__LWP_SETPRIVATE = 317 // { void|sys||_lwp_setprivate(void *ptr); } + SYS__LWP_KILL = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); } + SYS__LWP_DETACH = 319 // { int|sys||_lwp_detach(lwpid_t target); } + SYS__LWP_UNPARK = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); } + SYS__LWP_UNPARK_ALL = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); } + SYS__LWP_SETNAME = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); } + SYS__LWP_GETNAME = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); } + SYS__LWP_CTL = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); } + SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); } + SYS_PMC_GET_INFO = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); } + SYS_PMC_CONTROL = 342 // { int|sys||pmc_control(int ctr, int op, void *args); } + SYS_RASCTL = 343 // { int|sys||rasctl(void *addr, size_t len, int op); } + SYS_KQUEUE = 344 // { int|sys||kqueue(void); } + SYS__SCHED_SETPARAM = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); } + SYS__SCHED_GETPARAM = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); } + SYS__SCHED_SETAFFINITY = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); } + SYS__SCHED_GETAFFINITY = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); } + SYS_SCHED_YIELD = 350 // { int|sys||sched_yield(void); } + SYS_FSYNC_RANGE = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); } + SYS_UUIDGEN = 355 // { int|sys||uuidgen(struct uuid *store, int count); } + SYS_GETVFSSTAT = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); } + SYS_STATVFS1 = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); } + SYS_FSTATVFS1 = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); } + SYS_EXTATTRCTL = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FILE = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FILE = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FD = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FD = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FD = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_LINK = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_LIST_FD = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_SETXATTR = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_LSETXATTR = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_FSETXATTR = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); } + SYS_GETXATTR = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); } + SYS_LGETXATTR = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); } + SYS_FGETXATTR = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); } + SYS_LISTXATTR = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); } + SYS_LLISTXATTR = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); } + SYS_FLISTXATTR = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); } + SYS_REMOVEXATTR = 384 // { int|sys||removexattr(const char *path, const char *name); } + SYS_LREMOVEXATTR = 385 // { int|sys||lremovexattr(const char *path, const char *name); } + SYS_FREMOVEXATTR = 386 // { int|sys||fremovexattr(int fd, const char *name); } + SYS_GETDENTS = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); } + SYS_SOCKET = 394 // { int|sys|30|socket(int domain, int type, int protocol); } + SYS_GETFH = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); } + SYS_MOUNT = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); } + SYS_MREMAP = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); } + SYS_PSET_CREATE = 412 // { int|sys||pset_create(psetid_t *psid); } + SYS_PSET_DESTROY = 413 // { int|sys||pset_destroy(psetid_t psid); } + SYS_PSET_ASSIGN = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); } + SYS__PSET_BIND = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); } + SYS_POSIX_FADVISE = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); } + SYS_SELECT = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_GETTIMEOFDAY = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); } + SYS_SETTIMEOFDAY = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); } + SYS_UTIMES = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); } + SYS_ADJTIME = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); } + SYS_FUTIMES = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); } + SYS_LUTIMES = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); } + SYS_SETITIMER = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } + SYS_GETITIMER = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); } + SYS_CLOCK_GETTIME = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_NANOSLEEP = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS___SIGTIMEDWAIT = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); } + SYS__LWP_PARK = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); } + SYS_KEVENT = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); } + SYS_PSELECT = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } + SYS_POLLTS = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } + SYS_STAT = 439 // { int|sys|50|stat(const char *path, struct stat *ub); } + SYS_FSTAT = 440 // { int|sys|50|fstat(int fd, struct stat *sb); } + SYS_LSTAT = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); } + SYS___SEMCTL = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); } + SYS_SHMCTL = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_MSGCTL = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_GETRUSAGE = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); } + SYS_TIMER_SETTIME = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } + SYS_TIMER_GETTIME = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); } + SYS_NTP_GETTIME = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); } + SYS_WAIT4 = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); } + SYS_MKNOD = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); } + SYS_FHSTAT = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); } + SYS_PIPE2 = 453 // { int|sys||pipe2(int *fildes, int flags); } + SYS_DUP3 = 454 // { int|sys||dup3(int from, int to, int flags); } + SYS_KQUEUE1 = 455 // { int|sys||kqueue1(int flags); } + SYS_PACCEPT = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); } + SYS_LINKAT = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); } + SYS_RENAMEAT = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); } + SYS_MKFIFOAT = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); } + SYS_MKNODAT = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); } + SYS_MKDIRAT = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); } + SYS_FACCESSAT = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); } + SYS_FCHMODAT = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); } + SYS_FEXECVE = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); } + SYS_FSTATAT = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); } + SYS_UTIMENSAT = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); } + SYS_OPENAT = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); } + SYS_READLINKAT = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); } + SYS_SYMLINKAT = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); } + SYS_UNLINKAT = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); } + SYS_FUTIMENS = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); } + SYS___QUOTACTL = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); } + SYS_POSIX_SPAWN = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); } + SYS_RECVMMSG = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); } + SYS_SENDMMSG = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go new file mode 100644 index 0000000..5677cd4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go @@ -0,0 +1,275 @@ +// go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build amd64 && netbsd +// +build amd64,netbsd + +package unix + +const ( + SYS_EXIT = 1 // { void|sys||exit(int rval); } + SYS_FORK = 2 // { int|sys||fork(void); } + SYS_READ = 3 // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int|sys||open(const char *path, int flags, ... mode_t mode); } + SYS_CLOSE = 6 // { int|sys||close(int fd); } + SYS_LINK = 9 // { int|sys||link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int|sys||unlink(const char *path); } + SYS_CHDIR = 12 // { int|sys||chdir(const char *path); } + SYS_FCHDIR = 13 // { int|sys||fchdir(int fd); } + SYS_CHMOD = 15 // { int|sys||chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int|sys||chown(const char *path, uid_t uid, gid_t gid); } + SYS_BREAK = 17 // { int|sys||obreak(char *nsize); } + SYS_GETPID = 20 // { pid_t|sys||getpid_with_ppid(void); } + SYS_UNMOUNT = 22 // { int|sys||unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int|sys||setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t|sys||getuid_with_euid(void); } + SYS_GETEUID = 25 // { uid_t|sys||geteuid(void); } + SYS_PTRACE = 26 // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); } + SYS_RECVMSG = 27 // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } + SYS_ACCEPT = 30 // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); } + SYS_GETPEERNAME = 31 // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_GETSOCKNAME = 32 // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_ACCESS = 33 // { int|sys||access(const char *path, int flags); } + SYS_CHFLAGS = 34 // { int|sys||chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int|sys||fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { void|sys||sync(void); } + SYS_KILL = 37 // { int|sys||kill(pid_t pid, int signum); } + SYS_GETPPID = 39 // { pid_t|sys||getppid(void); } + SYS_DUP = 41 // { int|sys||dup(int fd); } + SYS_PIPE = 42 // { int|sys||pipe(void); } + SYS_GETEGID = 43 // { gid_t|sys||getegid(void); } + SYS_PROFIL = 44 // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); } + SYS_KTRACE = 45 // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); } + SYS_GETGID = 47 // { gid_t|sys||getgid_with_egid(void); } + SYS___GETLOGIN = 49 // { int|sys||__getlogin(char *namebuf, size_t namelen); } + SYS___SETLOGIN = 50 // { int|sys||__setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int|sys||acct(const char *path); } + SYS_IOCTL = 54 // { int|sys||ioctl(int fd, u_long com, ... void *data); } + SYS_REVOKE = 56 // { int|sys||revoke(const char *path); } + SYS_SYMLINK = 57 // { int|sys||symlink(const char *path, const char *link); } + SYS_READLINK = 58 // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int|sys||execve(const char *path, char * const *argp, char * const *envp); } + SYS_UMASK = 60 // { mode_t|sys||umask(mode_t newmask); } + SYS_CHROOT = 61 // { int|sys||chroot(const char *path); } + SYS_VFORK = 66 // { int|sys||vfork(void); } + SYS_SBRK = 69 // { int|sys||sbrk(intptr_t incr); } + SYS_SSTK = 70 // { int|sys||sstk(int incr); } + SYS_VADVISE = 72 // { int|sys||ovadvise(int anom); } + SYS_MUNMAP = 73 // { int|sys||munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int|sys||mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int|sys||madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int|sys||mincore(void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int|sys||getgroups(int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); } + SYS_GETPGRP = 81 // { int|sys||getpgrp(void); } + SYS_SETPGID = 82 // { int|sys||setpgid(pid_t pid, pid_t pgid); } + SYS_DUP2 = 90 // { int|sys||dup2(int from, int to); } + SYS_FCNTL = 92 // { int|sys||fcntl(int fd, int cmd, ... void *arg); } + SYS_FSYNC = 95 // { int|sys||fsync(int fd); } + SYS_SETPRIORITY = 96 // { int|sys||setpriority(int which, id_t who, int prio); } + SYS_CONNECT = 98 // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_GETPRIORITY = 100 // { int|sys||getpriority(int which, id_t who); } + SYS_BIND = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_SETSOCKOPT = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } + SYS_LISTEN = 106 // { int|sys||listen(int s, int backlog); } + SYS_GETSOCKOPT = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } + SYS_READV = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); } + SYS_WRITEV = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); } + SYS_FCHOWN = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int|sys||fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int|sys||rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int|sys||flock(int fd, int how); } + SYS_MKFIFO = 132 // { int|sys||mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } + SYS_SHUTDOWN = 134 // { int|sys||shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int|sys||mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int|sys||rmdir(const char *path); } + SYS_SETSID = 147 // { int|sys||setsid(void); } + SYS_SYSARCH = 165 // { int|sys||sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_PWRITE = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_NTP_ADJTIME = 176 // { int|sys||ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int|sys||setgid(gid_t gid); } + SYS_SETEGID = 182 // { int|sys||setegid(gid_t egid); } + SYS_SETEUID = 183 // { int|sys||seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long|sys||pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long|sys||fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); } + SYS_SETRLIMIT = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); } + SYS_MMAP = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); } + SYS_LSEEK = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); } + SYS_TRUNCATE = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); } + SYS_FTRUNCATE = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); } + SYS___SYSCTL = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); } + SYS_MLOCK = 203 // { int|sys||mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int|sys||munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int|sys||undelete(const char *path); } + SYS_GETPGID = 207 // { pid_t|sys||getpgid(pid_t pid); } + SYS_REBOOT = 208 // { int|sys||reboot(int opt, char *bootstr); } + SYS_POLL = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_SEMGET = 221 // { int|sys||semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_SEMCONFIG = 223 // { int|sys||semconfig(int flag); } + SYS_MSGGET = 225 // { int|sys||msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int|sys||shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); } + SYS_TIMER_CREATE = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); } + SYS_TIMER_DELETE = 236 // { int|sys||timer_delete(timer_t timerid); } + SYS_TIMER_GETOVERRUN = 239 // { int|sys||timer_getoverrun(timer_t timerid); } + SYS_FDATASYNC = 241 // { int|sys||fdatasync(int fd); } + SYS_MLOCKALL = 242 // { int|sys||mlockall(int flags); } + SYS_MUNLOCKALL = 243 // { int|sys||munlockall(void); } + SYS_SIGQUEUEINFO = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); } + SYS_MODCTL = 246 // { int|sys||modctl(int cmd, void *arg); } + SYS___POSIX_RENAME = 270 // { int|sys||__posix_rename(const char *from, const char *to); } + SYS_SWAPCTL = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); } + SYS_MINHERIT = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); } + SYS_LCHMOD = 274 // { int|sys||lchmod(const char *path, mode_t mode); } + SYS_LCHOWN = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); } + SYS_MSYNC = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); } + SYS___POSIX_CHOWN = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); } + SYS___POSIX_FCHOWN = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); } + SYS___POSIX_LCHOWN = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 286 // { pid_t|sys||getsid(pid_t pid); } + SYS___CLONE = 287 // { pid_t|sys||__clone(int flags, void *stack); } + SYS_FKTRACE = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); } + SYS_PREADV = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS_PWRITEV = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS___GETCWD = 296 // { int|sys||__getcwd(char *bufp, size_t length); } + SYS_FCHROOT = 297 // { int|sys||fchroot(int fd); } + SYS_LCHFLAGS = 304 // { int|sys||lchflags(const char *path, u_long flags); } + SYS_ISSETUGID = 305 // { int|sys||issetugid(void); } + SYS_UTRACE = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); } + SYS_GETCONTEXT = 307 // { int|sys||getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 308 // { int|sys||setcontext(const struct __ucontext *ucp); } + SYS__LWP_CREATE = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); } + SYS__LWP_EXIT = 310 // { int|sys||_lwp_exit(void); } + SYS__LWP_SELF = 311 // { lwpid_t|sys||_lwp_self(void); } + SYS__LWP_WAIT = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); } + SYS__LWP_SUSPEND = 313 // { int|sys||_lwp_suspend(lwpid_t target); } + SYS__LWP_CONTINUE = 314 // { int|sys||_lwp_continue(lwpid_t target); } + SYS__LWP_WAKEUP = 315 // { int|sys||_lwp_wakeup(lwpid_t target); } + SYS__LWP_GETPRIVATE = 316 // { void *|sys||_lwp_getprivate(void); } + SYS__LWP_SETPRIVATE = 317 // { void|sys||_lwp_setprivate(void *ptr); } + SYS__LWP_KILL = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); } + SYS__LWP_DETACH = 319 // { int|sys||_lwp_detach(lwpid_t target); } + SYS__LWP_UNPARK = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); } + SYS__LWP_UNPARK_ALL = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); } + SYS__LWP_SETNAME = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); } + SYS__LWP_GETNAME = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); } + SYS__LWP_CTL = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); } + SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); } + SYS_PMC_GET_INFO = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); } + SYS_PMC_CONTROL = 342 // { int|sys||pmc_control(int ctr, int op, void *args); } + SYS_RASCTL = 343 // { int|sys||rasctl(void *addr, size_t len, int op); } + SYS_KQUEUE = 344 // { int|sys||kqueue(void); } + SYS__SCHED_SETPARAM = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); } + SYS__SCHED_GETPARAM = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); } + SYS__SCHED_SETAFFINITY = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); } + SYS__SCHED_GETAFFINITY = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); } + SYS_SCHED_YIELD = 350 // { int|sys||sched_yield(void); } + SYS_FSYNC_RANGE = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); } + SYS_UUIDGEN = 355 // { int|sys||uuidgen(struct uuid *store, int count); } + SYS_GETVFSSTAT = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); } + SYS_STATVFS1 = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); } + SYS_FSTATVFS1 = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); } + SYS_EXTATTRCTL = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FILE = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FILE = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FD = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FD = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FD = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_LINK = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_LIST_FD = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_SETXATTR = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_LSETXATTR = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_FSETXATTR = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); } + SYS_GETXATTR = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); } + SYS_LGETXATTR = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); } + SYS_FGETXATTR = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); } + SYS_LISTXATTR = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); } + SYS_LLISTXATTR = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); } + SYS_FLISTXATTR = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); } + SYS_REMOVEXATTR = 384 // { int|sys||removexattr(const char *path, const char *name); } + SYS_LREMOVEXATTR = 385 // { int|sys||lremovexattr(const char *path, const char *name); } + SYS_FREMOVEXATTR = 386 // { int|sys||fremovexattr(int fd, const char *name); } + SYS_GETDENTS = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); } + SYS_SOCKET = 394 // { int|sys|30|socket(int domain, int type, int protocol); } + SYS_GETFH = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); } + SYS_MOUNT = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); } + SYS_MREMAP = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); } + SYS_PSET_CREATE = 412 // { int|sys||pset_create(psetid_t *psid); } + SYS_PSET_DESTROY = 413 // { int|sys||pset_destroy(psetid_t psid); } + SYS_PSET_ASSIGN = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); } + SYS__PSET_BIND = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); } + SYS_POSIX_FADVISE = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); } + SYS_SELECT = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_GETTIMEOFDAY = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); } + SYS_SETTIMEOFDAY = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); } + SYS_UTIMES = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); } + SYS_ADJTIME = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); } + SYS_FUTIMES = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); } + SYS_LUTIMES = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); } + SYS_SETITIMER = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } + SYS_GETITIMER = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); } + SYS_CLOCK_GETTIME = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_NANOSLEEP = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS___SIGTIMEDWAIT = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); } + SYS__LWP_PARK = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); } + SYS_KEVENT = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); } + SYS_PSELECT = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } + SYS_POLLTS = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } + SYS_STAT = 439 // { int|sys|50|stat(const char *path, struct stat *ub); } + SYS_FSTAT = 440 // { int|sys|50|fstat(int fd, struct stat *sb); } + SYS_LSTAT = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); } + SYS___SEMCTL = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); } + SYS_SHMCTL = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_MSGCTL = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_GETRUSAGE = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); } + SYS_TIMER_SETTIME = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } + SYS_TIMER_GETTIME = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); } + SYS_NTP_GETTIME = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); } + SYS_WAIT4 = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); } + SYS_MKNOD = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); } + SYS_FHSTAT = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); } + SYS_PIPE2 = 453 // { int|sys||pipe2(int *fildes, int flags); } + SYS_DUP3 = 454 // { int|sys||dup3(int from, int to, int flags); } + SYS_KQUEUE1 = 455 // { int|sys||kqueue1(int flags); } + SYS_PACCEPT = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); } + SYS_LINKAT = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); } + SYS_RENAMEAT = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); } + SYS_MKFIFOAT = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); } + SYS_MKNODAT = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); } + SYS_MKDIRAT = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); } + SYS_FACCESSAT = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); } + SYS_FCHMODAT = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); } + SYS_FEXECVE = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); } + SYS_FSTATAT = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); } + SYS_UTIMENSAT = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); } + SYS_OPENAT = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); } + SYS_READLINKAT = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); } + SYS_SYMLINKAT = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); } + SYS_UNLINKAT = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); } + SYS_FUTIMENS = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); } + SYS___QUOTACTL = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); } + SYS_POSIX_SPAWN = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); } + SYS_RECVMMSG = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); } + SYS_SENDMMSG = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go new file mode 100644 index 0000000..e784cb6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go @@ -0,0 +1,275 @@ +// go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm && netbsd +// +build arm,netbsd + +package unix + +const ( + SYS_EXIT = 1 // { void|sys||exit(int rval); } + SYS_FORK = 2 // { int|sys||fork(void); } + SYS_READ = 3 // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int|sys||open(const char *path, int flags, ... mode_t mode); } + SYS_CLOSE = 6 // { int|sys||close(int fd); } + SYS_LINK = 9 // { int|sys||link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int|sys||unlink(const char *path); } + SYS_CHDIR = 12 // { int|sys||chdir(const char *path); } + SYS_FCHDIR = 13 // { int|sys||fchdir(int fd); } + SYS_CHMOD = 15 // { int|sys||chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int|sys||chown(const char *path, uid_t uid, gid_t gid); } + SYS_BREAK = 17 // { int|sys||obreak(char *nsize); } + SYS_GETPID = 20 // { pid_t|sys||getpid_with_ppid(void); } + SYS_UNMOUNT = 22 // { int|sys||unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int|sys||setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t|sys||getuid_with_euid(void); } + SYS_GETEUID = 25 // { uid_t|sys||geteuid(void); } + SYS_PTRACE = 26 // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); } + SYS_RECVMSG = 27 // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } + SYS_ACCEPT = 30 // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); } + SYS_GETPEERNAME = 31 // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_GETSOCKNAME = 32 // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_ACCESS = 33 // { int|sys||access(const char *path, int flags); } + SYS_CHFLAGS = 34 // { int|sys||chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int|sys||fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { void|sys||sync(void); } + SYS_KILL = 37 // { int|sys||kill(pid_t pid, int signum); } + SYS_GETPPID = 39 // { pid_t|sys||getppid(void); } + SYS_DUP = 41 // { int|sys||dup(int fd); } + SYS_PIPE = 42 // { int|sys||pipe(void); } + SYS_GETEGID = 43 // { gid_t|sys||getegid(void); } + SYS_PROFIL = 44 // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); } + SYS_KTRACE = 45 // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); } + SYS_GETGID = 47 // { gid_t|sys||getgid_with_egid(void); } + SYS___GETLOGIN = 49 // { int|sys||__getlogin(char *namebuf, size_t namelen); } + SYS___SETLOGIN = 50 // { int|sys||__setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int|sys||acct(const char *path); } + SYS_IOCTL = 54 // { int|sys||ioctl(int fd, u_long com, ... void *data); } + SYS_REVOKE = 56 // { int|sys||revoke(const char *path); } + SYS_SYMLINK = 57 // { int|sys||symlink(const char *path, const char *link); } + SYS_READLINK = 58 // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int|sys||execve(const char *path, char * const *argp, char * const *envp); } + SYS_UMASK = 60 // { mode_t|sys||umask(mode_t newmask); } + SYS_CHROOT = 61 // { int|sys||chroot(const char *path); } + SYS_VFORK = 66 // { int|sys||vfork(void); } + SYS_SBRK = 69 // { int|sys||sbrk(intptr_t incr); } + SYS_SSTK = 70 // { int|sys||sstk(int incr); } + SYS_VADVISE = 72 // { int|sys||ovadvise(int anom); } + SYS_MUNMAP = 73 // { int|sys||munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int|sys||mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int|sys||madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int|sys||mincore(void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int|sys||getgroups(int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); } + SYS_GETPGRP = 81 // { int|sys||getpgrp(void); } + SYS_SETPGID = 82 // { int|sys||setpgid(pid_t pid, pid_t pgid); } + SYS_DUP2 = 90 // { int|sys||dup2(int from, int to); } + SYS_FCNTL = 92 // { int|sys||fcntl(int fd, int cmd, ... void *arg); } + SYS_FSYNC = 95 // { int|sys||fsync(int fd); } + SYS_SETPRIORITY = 96 // { int|sys||setpriority(int which, id_t who, int prio); } + SYS_CONNECT = 98 // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_GETPRIORITY = 100 // { int|sys||getpriority(int which, id_t who); } + SYS_BIND = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_SETSOCKOPT = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } + SYS_LISTEN = 106 // { int|sys||listen(int s, int backlog); } + SYS_GETSOCKOPT = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } + SYS_READV = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); } + SYS_WRITEV = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); } + SYS_FCHOWN = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int|sys||fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int|sys||rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int|sys||flock(int fd, int how); } + SYS_MKFIFO = 132 // { int|sys||mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } + SYS_SHUTDOWN = 134 // { int|sys||shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int|sys||mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int|sys||rmdir(const char *path); } + SYS_SETSID = 147 // { int|sys||setsid(void); } + SYS_SYSARCH = 165 // { int|sys||sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_PWRITE = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_NTP_ADJTIME = 176 // { int|sys||ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int|sys||setgid(gid_t gid); } + SYS_SETEGID = 182 // { int|sys||setegid(gid_t egid); } + SYS_SETEUID = 183 // { int|sys||seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long|sys||pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long|sys||fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); } + SYS_SETRLIMIT = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); } + SYS_MMAP = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); } + SYS_LSEEK = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); } + SYS_TRUNCATE = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); } + SYS_FTRUNCATE = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); } + SYS___SYSCTL = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); } + SYS_MLOCK = 203 // { int|sys||mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int|sys||munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int|sys||undelete(const char *path); } + SYS_GETPGID = 207 // { pid_t|sys||getpgid(pid_t pid); } + SYS_REBOOT = 208 // { int|sys||reboot(int opt, char *bootstr); } + SYS_POLL = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_SEMGET = 221 // { int|sys||semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_SEMCONFIG = 223 // { int|sys||semconfig(int flag); } + SYS_MSGGET = 225 // { int|sys||msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int|sys||shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); } + SYS_TIMER_CREATE = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); } + SYS_TIMER_DELETE = 236 // { int|sys||timer_delete(timer_t timerid); } + SYS_TIMER_GETOVERRUN = 239 // { int|sys||timer_getoverrun(timer_t timerid); } + SYS_FDATASYNC = 241 // { int|sys||fdatasync(int fd); } + SYS_MLOCKALL = 242 // { int|sys||mlockall(int flags); } + SYS_MUNLOCKALL = 243 // { int|sys||munlockall(void); } + SYS_SIGQUEUEINFO = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); } + SYS_MODCTL = 246 // { int|sys||modctl(int cmd, void *arg); } + SYS___POSIX_RENAME = 270 // { int|sys||__posix_rename(const char *from, const char *to); } + SYS_SWAPCTL = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); } + SYS_MINHERIT = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); } + SYS_LCHMOD = 274 // { int|sys||lchmod(const char *path, mode_t mode); } + SYS_LCHOWN = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); } + SYS_MSYNC = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); } + SYS___POSIX_CHOWN = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); } + SYS___POSIX_FCHOWN = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); } + SYS___POSIX_LCHOWN = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 286 // { pid_t|sys||getsid(pid_t pid); } + SYS___CLONE = 287 // { pid_t|sys||__clone(int flags, void *stack); } + SYS_FKTRACE = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); } + SYS_PREADV = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS_PWRITEV = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS___GETCWD = 296 // { int|sys||__getcwd(char *bufp, size_t length); } + SYS_FCHROOT = 297 // { int|sys||fchroot(int fd); } + SYS_LCHFLAGS = 304 // { int|sys||lchflags(const char *path, u_long flags); } + SYS_ISSETUGID = 305 // { int|sys||issetugid(void); } + SYS_UTRACE = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); } + SYS_GETCONTEXT = 307 // { int|sys||getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 308 // { int|sys||setcontext(const struct __ucontext *ucp); } + SYS__LWP_CREATE = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); } + SYS__LWP_EXIT = 310 // { int|sys||_lwp_exit(void); } + SYS__LWP_SELF = 311 // { lwpid_t|sys||_lwp_self(void); } + SYS__LWP_WAIT = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); } + SYS__LWP_SUSPEND = 313 // { int|sys||_lwp_suspend(lwpid_t target); } + SYS__LWP_CONTINUE = 314 // { int|sys||_lwp_continue(lwpid_t target); } + SYS__LWP_WAKEUP = 315 // { int|sys||_lwp_wakeup(lwpid_t target); } + SYS__LWP_GETPRIVATE = 316 // { void *|sys||_lwp_getprivate(void); } + SYS__LWP_SETPRIVATE = 317 // { void|sys||_lwp_setprivate(void *ptr); } + SYS__LWP_KILL = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); } + SYS__LWP_DETACH = 319 // { int|sys||_lwp_detach(lwpid_t target); } + SYS__LWP_UNPARK = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); } + SYS__LWP_UNPARK_ALL = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); } + SYS__LWP_SETNAME = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); } + SYS__LWP_GETNAME = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); } + SYS__LWP_CTL = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); } + SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); } + SYS_PMC_GET_INFO = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); } + SYS_PMC_CONTROL = 342 // { int|sys||pmc_control(int ctr, int op, void *args); } + SYS_RASCTL = 343 // { int|sys||rasctl(void *addr, size_t len, int op); } + SYS_KQUEUE = 344 // { int|sys||kqueue(void); } + SYS__SCHED_SETPARAM = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); } + SYS__SCHED_GETPARAM = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); } + SYS__SCHED_SETAFFINITY = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); } + SYS__SCHED_GETAFFINITY = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); } + SYS_SCHED_YIELD = 350 // { int|sys||sched_yield(void); } + SYS_FSYNC_RANGE = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); } + SYS_UUIDGEN = 355 // { int|sys||uuidgen(struct uuid *store, int count); } + SYS_GETVFSSTAT = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); } + SYS_STATVFS1 = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); } + SYS_FSTATVFS1 = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); } + SYS_EXTATTRCTL = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FILE = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FILE = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FD = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FD = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FD = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_LINK = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_LIST_FD = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_SETXATTR = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_LSETXATTR = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_FSETXATTR = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); } + SYS_GETXATTR = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); } + SYS_LGETXATTR = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); } + SYS_FGETXATTR = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); } + SYS_LISTXATTR = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); } + SYS_LLISTXATTR = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); } + SYS_FLISTXATTR = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); } + SYS_REMOVEXATTR = 384 // { int|sys||removexattr(const char *path, const char *name); } + SYS_LREMOVEXATTR = 385 // { int|sys||lremovexattr(const char *path, const char *name); } + SYS_FREMOVEXATTR = 386 // { int|sys||fremovexattr(int fd, const char *name); } + SYS_GETDENTS = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); } + SYS_SOCKET = 394 // { int|sys|30|socket(int domain, int type, int protocol); } + SYS_GETFH = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); } + SYS_MOUNT = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); } + SYS_MREMAP = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); } + SYS_PSET_CREATE = 412 // { int|sys||pset_create(psetid_t *psid); } + SYS_PSET_DESTROY = 413 // { int|sys||pset_destroy(psetid_t psid); } + SYS_PSET_ASSIGN = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); } + SYS__PSET_BIND = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); } + SYS_POSIX_FADVISE = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); } + SYS_SELECT = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_GETTIMEOFDAY = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); } + SYS_SETTIMEOFDAY = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); } + SYS_UTIMES = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); } + SYS_ADJTIME = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); } + SYS_FUTIMES = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); } + SYS_LUTIMES = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); } + SYS_SETITIMER = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } + SYS_GETITIMER = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); } + SYS_CLOCK_GETTIME = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_NANOSLEEP = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS___SIGTIMEDWAIT = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); } + SYS__LWP_PARK = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); } + SYS_KEVENT = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); } + SYS_PSELECT = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } + SYS_POLLTS = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } + SYS_STAT = 439 // { int|sys|50|stat(const char *path, struct stat *ub); } + SYS_FSTAT = 440 // { int|sys|50|fstat(int fd, struct stat *sb); } + SYS_LSTAT = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); } + SYS___SEMCTL = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); } + SYS_SHMCTL = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_MSGCTL = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_GETRUSAGE = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); } + SYS_TIMER_SETTIME = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } + SYS_TIMER_GETTIME = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); } + SYS_NTP_GETTIME = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); } + SYS_WAIT4 = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); } + SYS_MKNOD = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); } + SYS_FHSTAT = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); } + SYS_PIPE2 = 453 // { int|sys||pipe2(int *fildes, int flags); } + SYS_DUP3 = 454 // { int|sys||dup3(int from, int to, int flags); } + SYS_KQUEUE1 = 455 // { int|sys||kqueue1(int flags); } + SYS_PACCEPT = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); } + SYS_LINKAT = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); } + SYS_RENAMEAT = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); } + SYS_MKFIFOAT = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); } + SYS_MKNODAT = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); } + SYS_MKDIRAT = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); } + SYS_FACCESSAT = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); } + SYS_FCHMODAT = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); } + SYS_FEXECVE = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); } + SYS_FSTATAT = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); } + SYS_UTIMENSAT = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); } + SYS_OPENAT = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); } + SYS_READLINKAT = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); } + SYS_SYMLINKAT = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); } + SYS_UNLINKAT = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); } + SYS_FUTIMENS = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); } + SYS___QUOTACTL = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); } + SYS_POSIX_SPAWN = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); } + SYS_RECVMMSG = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); } + SYS_SENDMMSG = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go new file mode 100644 index 0000000..bd4952e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go @@ -0,0 +1,275 @@ +// go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master +// Code generated by the command above; DO NOT EDIT. + +//go:build arm64 && netbsd +// +build arm64,netbsd + +package unix + +const ( + SYS_EXIT = 1 // { void|sys||exit(int rval); } + SYS_FORK = 2 // { int|sys||fork(void); } + SYS_READ = 3 // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int|sys||open(const char *path, int flags, ... mode_t mode); } + SYS_CLOSE = 6 // { int|sys||close(int fd); } + SYS_LINK = 9 // { int|sys||link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int|sys||unlink(const char *path); } + SYS_CHDIR = 12 // { int|sys||chdir(const char *path); } + SYS_FCHDIR = 13 // { int|sys||fchdir(int fd); } + SYS_CHMOD = 15 // { int|sys||chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int|sys||chown(const char *path, uid_t uid, gid_t gid); } + SYS_BREAK = 17 // { int|sys||obreak(char *nsize); } + SYS_GETPID = 20 // { pid_t|sys||getpid_with_ppid(void); } + SYS_UNMOUNT = 22 // { int|sys||unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int|sys||setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t|sys||getuid_with_euid(void); } + SYS_GETEUID = 25 // { uid_t|sys||geteuid(void); } + SYS_PTRACE = 26 // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); } + SYS_RECVMSG = 27 // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } + SYS_ACCEPT = 30 // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); } + SYS_GETPEERNAME = 31 // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_GETSOCKNAME = 32 // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_ACCESS = 33 // { int|sys||access(const char *path, int flags); } + SYS_CHFLAGS = 34 // { int|sys||chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int|sys||fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { void|sys||sync(void); } + SYS_KILL = 37 // { int|sys||kill(pid_t pid, int signum); } + SYS_GETPPID = 39 // { pid_t|sys||getppid(void); } + SYS_DUP = 41 // { int|sys||dup(int fd); } + SYS_PIPE = 42 // { int|sys||pipe(void); } + SYS_GETEGID = 43 // { gid_t|sys||getegid(void); } + SYS_PROFIL = 44 // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); } + SYS_KTRACE = 45 // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); } + SYS_GETGID = 47 // { gid_t|sys||getgid_with_egid(void); } + SYS___GETLOGIN = 49 // { int|sys||__getlogin(char *namebuf, size_t namelen); } + SYS___SETLOGIN = 50 // { int|sys||__setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int|sys||acct(const char *path); } + SYS_IOCTL = 54 // { int|sys||ioctl(int fd, u_long com, ... void *data); } + SYS_REVOKE = 56 // { int|sys||revoke(const char *path); } + SYS_SYMLINK = 57 // { int|sys||symlink(const char *path, const char *link); } + SYS_READLINK = 58 // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int|sys||execve(const char *path, char * const *argp, char * const *envp); } + SYS_UMASK = 60 // { mode_t|sys||umask(mode_t newmask); } + SYS_CHROOT = 61 // { int|sys||chroot(const char *path); } + SYS_VFORK = 66 // { int|sys||vfork(void); } + SYS_SBRK = 69 // { int|sys||sbrk(intptr_t incr); } + SYS_SSTK = 70 // { int|sys||sstk(int incr); } + SYS_VADVISE = 72 // { int|sys||ovadvise(int anom); } + SYS_MUNMAP = 73 // { int|sys||munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int|sys||mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int|sys||madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int|sys||mincore(void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int|sys||getgroups(int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); } + SYS_GETPGRP = 81 // { int|sys||getpgrp(void); } + SYS_SETPGID = 82 // { int|sys||setpgid(pid_t pid, pid_t pgid); } + SYS_DUP2 = 90 // { int|sys||dup2(int from, int to); } + SYS_FCNTL = 92 // { int|sys||fcntl(int fd, int cmd, ... void *arg); } + SYS_FSYNC = 95 // { int|sys||fsync(int fd); } + SYS_SETPRIORITY = 96 // { int|sys||setpriority(int which, id_t who, int prio); } + SYS_CONNECT = 98 // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_GETPRIORITY = 100 // { int|sys||getpriority(int which, id_t who); } + SYS_BIND = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_SETSOCKOPT = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } + SYS_LISTEN = 106 // { int|sys||listen(int s, int backlog); } + SYS_GETSOCKOPT = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } + SYS_READV = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); } + SYS_WRITEV = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); } + SYS_FCHOWN = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int|sys||fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int|sys||rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int|sys||flock(int fd, int how); } + SYS_MKFIFO = 132 // { int|sys||mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } + SYS_SHUTDOWN = 134 // { int|sys||shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int|sys||mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int|sys||rmdir(const char *path); } + SYS_SETSID = 147 // { int|sys||setsid(void); } + SYS_SYSARCH = 165 // { int|sys||sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_PWRITE = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_NTP_ADJTIME = 176 // { int|sys||ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int|sys||setgid(gid_t gid); } + SYS_SETEGID = 182 // { int|sys||setegid(gid_t egid); } + SYS_SETEUID = 183 // { int|sys||seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long|sys||pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long|sys||fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); } + SYS_SETRLIMIT = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); } + SYS_MMAP = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); } + SYS_LSEEK = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); } + SYS_TRUNCATE = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); } + SYS_FTRUNCATE = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); } + SYS___SYSCTL = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); } + SYS_MLOCK = 203 // { int|sys||mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int|sys||munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int|sys||undelete(const char *path); } + SYS_GETPGID = 207 // { pid_t|sys||getpgid(pid_t pid); } + SYS_REBOOT = 208 // { int|sys||reboot(int opt, char *bootstr); } + SYS_POLL = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_SEMGET = 221 // { int|sys||semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_SEMCONFIG = 223 // { int|sys||semconfig(int flag); } + SYS_MSGGET = 225 // { int|sys||msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int|sys||shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); } + SYS_TIMER_CREATE = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); } + SYS_TIMER_DELETE = 236 // { int|sys||timer_delete(timer_t timerid); } + SYS_TIMER_GETOVERRUN = 239 // { int|sys||timer_getoverrun(timer_t timerid); } + SYS_FDATASYNC = 241 // { int|sys||fdatasync(int fd); } + SYS_MLOCKALL = 242 // { int|sys||mlockall(int flags); } + SYS_MUNLOCKALL = 243 // { int|sys||munlockall(void); } + SYS_SIGQUEUEINFO = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); } + SYS_MODCTL = 246 // { int|sys||modctl(int cmd, void *arg); } + SYS___POSIX_RENAME = 270 // { int|sys||__posix_rename(const char *from, const char *to); } + SYS_SWAPCTL = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); } + SYS_MINHERIT = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); } + SYS_LCHMOD = 274 // { int|sys||lchmod(const char *path, mode_t mode); } + SYS_LCHOWN = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); } + SYS_MSYNC = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); } + SYS___POSIX_CHOWN = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); } + SYS___POSIX_FCHOWN = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); } + SYS___POSIX_LCHOWN = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 286 // { pid_t|sys||getsid(pid_t pid); } + SYS___CLONE = 287 // { pid_t|sys||__clone(int flags, void *stack); } + SYS_FKTRACE = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); } + SYS_PREADV = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS_PWRITEV = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS___GETCWD = 296 // { int|sys||__getcwd(char *bufp, size_t length); } + SYS_FCHROOT = 297 // { int|sys||fchroot(int fd); } + SYS_LCHFLAGS = 304 // { int|sys||lchflags(const char *path, u_long flags); } + SYS_ISSETUGID = 305 // { int|sys||issetugid(void); } + SYS_UTRACE = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); } + SYS_GETCONTEXT = 307 // { int|sys||getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 308 // { int|sys||setcontext(const struct __ucontext *ucp); } + SYS__LWP_CREATE = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); } + SYS__LWP_EXIT = 310 // { int|sys||_lwp_exit(void); } + SYS__LWP_SELF = 311 // { lwpid_t|sys||_lwp_self(void); } + SYS__LWP_WAIT = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); } + SYS__LWP_SUSPEND = 313 // { int|sys||_lwp_suspend(lwpid_t target); } + SYS__LWP_CONTINUE = 314 // { int|sys||_lwp_continue(lwpid_t target); } + SYS__LWP_WAKEUP = 315 // { int|sys||_lwp_wakeup(lwpid_t target); } + SYS__LWP_GETPRIVATE = 316 // { void *|sys||_lwp_getprivate(void); } + SYS__LWP_SETPRIVATE = 317 // { void|sys||_lwp_setprivate(void *ptr); } + SYS__LWP_KILL = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); } + SYS__LWP_DETACH = 319 // { int|sys||_lwp_detach(lwpid_t target); } + SYS__LWP_UNPARK = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); } + SYS__LWP_UNPARK_ALL = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); } + SYS__LWP_SETNAME = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); } + SYS__LWP_GETNAME = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); } + SYS__LWP_CTL = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); } + SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); } + SYS_PMC_GET_INFO = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); } + SYS_PMC_CONTROL = 342 // { int|sys||pmc_control(int ctr, int op, void *args); } + SYS_RASCTL = 343 // { int|sys||rasctl(void *addr, size_t len, int op); } + SYS_KQUEUE = 344 // { int|sys||kqueue(void); } + SYS__SCHED_SETPARAM = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); } + SYS__SCHED_GETPARAM = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); } + SYS__SCHED_SETAFFINITY = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); } + SYS__SCHED_GETAFFINITY = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); } + SYS_SCHED_YIELD = 350 // { int|sys||sched_yield(void); } + SYS_FSYNC_RANGE = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); } + SYS_UUIDGEN = 355 // { int|sys||uuidgen(struct uuid *store, int count); } + SYS_GETVFSSTAT = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); } + SYS_STATVFS1 = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); } + SYS_FSTATVFS1 = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); } + SYS_EXTATTRCTL = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FILE = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FILE = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FD = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FD = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FD = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_LINK = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_LIST_FD = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_SETXATTR = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_LSETXATTR = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_FSETXATTR = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); } + SYS_GETXATTR = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); } + SYS_LGETXATTR = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); } + SYS_FGETXATTR = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); } + SYS_LISTXATTR = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); } + SYS_LLISTXATTR = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); } + SYS_FLISTXATTR = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); } + SYS_REMOVEXATTR = 384 // { int|sys||removexattr(const char *path, const char *name); } + SYS_LREMOVEXATTR = 385 // { int|sys||lremovexattr(const char *path, const char *name); } + SYS_FREMOVEXATTR = 386 // { int|sys||fremovexattr(int fd, const char *name); } + SYS_GETDENTS = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); } + SYS_SOCKET = 394 // { int|sys|30|socket(int domain, int type, int protocol); } + SYS_GETFH = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); } + SYS_MOUNT = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); } + SYS_MREMAP = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); } + SYS_PSET_CREATE = 412 // { int|sys||pset_create(psetid_t *psid); } + SYS_PSET_DESTROY = 413 // { int|sys||pset_destroy(psetid_t psid); } + SYS_PSET_ASSIGN = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); } + SYS__PSET_BIND = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); } + SYS_POSIX_FADVISE = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); } + SYS_SELECT = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_GETTIMEOFDAY = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); } + SYS_SETTIMEOFDAY = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); } + SYS_UTIMES = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); } + SYS_ADJTIME = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); } + SYS_FUTIMES = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); } + SYS_LUTIMES = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); } + SYS_SETITIMER = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } + SYS_GETITIMER = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); } + SYS_CLOCK_GETTIME = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_NANOSLEEP = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS___SIGTIMEDWAIT = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); } + SYS__LWP_PARK = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); } + SYS_KEVENT = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); } + SYS_PSELECT = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } + SYS_POLLTS = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } + SYS_STAT = 439 // { int|sys|50|stat(const char *path, struct stat *ub); } + SYS_FSTAT = 440 // { int|sys|50|fstat(int fd, struct stat *sb); } + SYS_LSTAT = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); } + SYS___SEMCTL = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); } + SYS_SHMCTL = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_MSGCTL = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_GETRUSAGE = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); } + SYS_TIMER_SETTIME = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } + SYS_TIMER_GETTIME = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); } + SYS_NTP_GETTIME = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); } + SYS_WAIT4 = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); } + SYS_MKNOD = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); } + SYS_FHSTAT = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); } + SYS_PIPE2 = 453 // { int|sys||pipe2(int *fildes, int flags); } + SYS_DUP3 = 454 // { int|sys||dup3(int from, int to, int flags); } + SYS_KQUEUE1 = 455 // { int|sys||kqueue1(int flags); } + SYS_PACCEPT = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); } + SYS_LINKAT = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); } + SYS_RENAMEAT = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); } + SYS_MKFIFOAT = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); } + SYS_MKNODAT = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); } + SYS_MKDIRAT = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); } + SYS_FACCESSAT = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); } + SYS_FCHMODAT = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); } + SYS_FEXECVE = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); } + SYS_FSTATAT = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); } + SYS_UTIMENSAT = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); } + SYS_OPENAT = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); } + SYS_READLINKAT = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); } + SYS_SYMLINKAT = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); } + SYS_UNLINKAT = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); } + SYS_FUTIMENS = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); } + SYS___QUOTACTL = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); } + SYS_POSIX_SPAWN = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); } + SYS_RECVMMSG = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); } + SYS_SENDMMSG = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go new file mode 100644 index 0000000..817edbf --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go @@ -0,0 +1,219 @@ +// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build 386 && openbsd +// +build 386,openbsd + +package unix + +const ( + SYS_EXIT = 1 // { void sys_exit(int rval); } + SYS_FORK = 2 // { int sys_fork(void); } + SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int sys_open(const char *path, int flags, ... mode_t mode); } + SYS_CLOSE = 6 // { int sys_close(int fd); } + SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); } + SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, size_t psize); } + SYS_LINK = 9 // { int sys_link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int sys_unlink(const char *path); } + SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); } + SYS_CHDIR = 12 // { int sys_chdir(const char *path); } + SYS_FCHDIR = 13 // { int sys_fchdir(int fd); } + SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, dev_t dev); } + SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, gid_t gid); } + SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break + SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); } + SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, struct rusage *rusage); } + SYS_GETPID = 20 // { pid_t sys_getpid(void); } + SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, int flags, void *data); } + SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int sys_setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t sys_getuid(void); } + SYS_GETEUID = 25 // { uid_t sys_geteuid(void); } + SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); } + SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } + SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); } + SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); } + SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); } + SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); } + SYS_SYNC = 36 // { void sys_sync(void); } + SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); } + SYS_GETPPID = 39 // { pid_t sys_getppid(void); } + SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); } + SYS_DUP = 41 // { int sys_dup(int fd); } + SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); } + SYS_GETEGID = 43 // { gid_t sys_getegid(void); } + SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); } + SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); } + SYS_SIGACTION = 46 // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); } + SYS_GETGID = 47 // { gid_t sys_getgid(void); } + SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); } + SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int sys_acct(const char *path); } + SYS_SIGPENDING = 52 // { int sys_sigpending(void); } + SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); } + SYS_IOCTL = 54 // { int sys_ioctl(int fd, u_long com, ... void *data); } + SYS_REBOOT = 55 // { int sys_reboot(int opt); } + SYS_REVOKE = 56 // { int sys_revoke(const char *path); } + SYS_SYMLINK = 57 // { int sys_symlink(const char *path, const char *link); } + SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int sys_execve(const char *path, char * const *argp, char * const *envp); } + SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); } + SYS_CHROOT = 61 // { int sys_chroot(const char *path); } + SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); } + SYS_STATFS = 63 // { int sys_statfs(const char *path, struct statfs *buf); } + SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); } + SYS_VFORK = 66 // { int sys_vfork(void); } + SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); } + SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); } + SYS_SETITIMER = 69 // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } + SYS_GETITIMER = 70 // { int sys_getitimer(int which, struct itimerval *itv); } + SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_KEVENT = 72 // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } + SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, int behav); } + SYS_UTIMES = 76 // { int sys_utimes(const char *path, const struct timeval *tptr); } + SYS_FUTIMES = 77 // { int sys_futimes(int fd, const struct timeval *tptr); } + SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, const gid_t *gidset); } + SYS_GETPGRP = 81 // { int sys_getpgrp(void); } + SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); } + SYS_FUTEX = 83 // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); } + SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); } + SYS_FUTIMENS = 85 // { int sys_futimens(int fd, const struct timespec *times); } + SYS_KBIND = 86 // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); } + SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_DUP2 = 90 // { int sys_dup2(int from, int to); } + SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); } + SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); } + SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); } + SYS_FSYNC = 95 // { int sys_fsync(int fd); } + SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); } + SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); } + SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); } + SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); } + SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); } + SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); } + SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } + SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); } + SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); } + SYS_PLEDGE = 108 // { int sys_pledge(const char *promises, const char *execpromises); } + SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } + SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } + SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); } + SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); } + SYS_UNVEIL = 114 // { int sys_unveil(const char *path, const char *permissions); } + SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } + SYS_THRKILL = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); } + SYS_READV = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); } + SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); } + SYS_KILL = 122 // { int sys_kill(int pid, int signum); } + SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int sys_setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int sys_flock(int fd, int how); } + SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } + SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int sys_rmdir(const char *path); } + SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); } + SYS_GETLOGIN_R = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); } + SYS_SETSID = 147 // { int sys_setsid(void); } + SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); } + SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); } + SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); } + SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); } + SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); } + SYS_SETGID = 181 // { int sys_setgid(gid_t gid); } + SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); } + SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); } + SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); } + SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); } + SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); } + SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); } + SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); } + SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, off_t length); } + SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); } + SYS_SYSCTL = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } + SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); } + SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); } + SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); } + SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); } + SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); } + SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, int inherit); } + SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_ISSETUGID = 253 // { int sys_issetugid(void); } + SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); } + SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); } + SYS_PIPE = 263 // { int sys_pipe(int *fdp); } + SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); } + SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); } + SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); } + SYS_KQUEUE = 269 // { int sys_kqueue(void); } + SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); } + SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); } + SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } + SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); } + SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } + SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); } + SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); } + SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); } + SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); } + SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); } + SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); } + SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); } + SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); } + SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); } + SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, int n); } + SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); } + SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); } + SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); } + SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); } + SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); } + SYS_GETRTABLE = 311 // { int sys_getrtable(void); } + SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); } + SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); } + SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); } + SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); } + SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); } + SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); } + SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); } + SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); } + SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); } + SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); } + SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, int flag); } + SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); } + SYS___GET_TCB = 330 // { void *sys___get_tcb(void); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go new file mode 100644 index 0000000..ea45361 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go @@ -0,0 +1,219 @@ +// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build amd64 && openbsd +// +build amd64,openbsd + +package unix + +const ( + SYS_EXIT = 1 // { void sys_exit(int rval); } + SYS_FORK = 2 // { int sys_fork(void); } + SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int sys_open(const char *path, int flags, ... mode_t mode); } + SYS_CLOSE = 6 // { int sys_close(int fd); } + SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); } + SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, size_t psize); } + SYS_LINK = 9 // { int sys_link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int sys_unlink(const char *path); } + SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); } + SYS_CHDIR = 12 // { int sys_chdir(const char *path); } + SYS_FCHDIR = 13 // { int sys_fchdir(int fd); } + SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, dev_t dev); } + SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, gid_t gid); } + SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break + SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); } + SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, struct rusage *rusage); } + SYS_GETPID = 20 // { pid_t sys_getpid(void); } + SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, int flags, void *data); } + SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int sys_setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t sys_getuid(void); } + SYS_GETEUID = 25 // { uid_t sys_geteuid(void); } + SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); } + SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } + SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); } + SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); } + SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); } + SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); } + SYS_SYNC = 36 // { void sys_sync(void); } + SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); } + SYS_GETPPID = 39 // { pid_t sys_getppid(void); } + SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); } + SYS_DUP = 41 // { int sys_dup(int fd); } + SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); } + SYS_GETEGID = 43 // { gid_t sys_getegid(void); } + SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); } + SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); } + SYS_SIGACTION = 46 // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); } + SYS_GETGID = 47 // { gid_t sys_getgid(void); } + SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); } + SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int sys_acct(const char *path); } + SYS_SIGPENDING = 52 // { int sys_sigpending(void); } + SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); } + SYS_IOCTL = 54 // { int sys_ioctl(int fd, u_long com, ... void *data); } + SYS_REBOOT = 55 // { int sys_reboot(int opt); } + SYS_REVOKE = 56 // { int sys_revoke(const char *path); } + SYS_SYMLINK = 57 // { int sys_symlink(const char *path, const char *link); } + SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int sys_execve(const char *path, char * const *argp, char * const *envp); } + SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); } + SYS_CHROOT = 61 // { int sys_chroot(const char *path); } + SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); } + SYS_STATFS = 63 // { int sys_statfs(const char *path, struct statfs *buf); } + SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); } + SYS_VFORK = 66 // { int sys_vfork(void); } + SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); } + SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); } + SYS_SETITIMER = 69 // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } + SYS_GETITIMER = 70 // { int sys_getitimer(int which, struct itimerval *itv); } + SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_KEVENT = 72 // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } + SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, int behav); } + SYS_UTIMES = 76 // { int sys_utimes(const char *path, const struct timeval *tptr); } + SYS_FUTIMES = 77 // { int sys_futimes(int fd, const struct timeval *tptr); } + SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, const gid_t *gidset); } + SYS_GETPGRP = 81 // { int sys_getpgrp(void); } + SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); } + SYS_FUTEX = 83 // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); } + SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); } + SYS_FUTIMENS = 85 // { int sys_futimens(int fd, const struct timespec *times); } + SYS_KBIND = 86 // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); } + SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_DUP2 = 90 // { int sys_dup2(int from, int to); } + SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); } + SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); } + SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); } + SYS_FSYNC = 95 // { int sys_fsync(int fd); } + SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); } + SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); } + SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); } + SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); } + SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); } + SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); } + SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } + SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); } + SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); } + SYS_PLEDGE = 108 // { int sys_pledge(const char *promises, const char *execpromises); } + SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } + SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } + SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); } + SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); } + SYS_UNVEIL = 114 // { int sys_unveil(const char *path, const char *permissions); } + SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } + SYS_THRKILL = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); } + SYS_READV = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); } + SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); } + SYS_KILL = 122 // { int sys_kill(int pid, int signum); } + SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int sys_setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int sys_flock(int fd, int how); } + SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } + SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int sys_rmdir(const char *path); } + SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); } + SYS_GETLOGIN_R = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); } + SYS_SETSID = 147 // { int sys_setsid(void); } + SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); } + SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); } + SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); } + SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); } + SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); } + SYS_SETGID = 181 // { int sys_setgid(gid_t gid); } + SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); } + SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); } + SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); } + SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); } + SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); } + SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); } + SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); } + SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, off_t length); } + SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); } + SYS_SYSCTL = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } + SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); } + SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); } + SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); } + SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); } + SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); } + SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, int inherit); } + SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_ISSETUGID = 253 // { int sys_issetugid(void); } + SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); } + SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); } + SYS_PIPE = 263 // { int sys_pipe(int *fdp); } + SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); } + SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); } + SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); } + SYS_KQUEUE = 269 // { int sys_kqueue(void); } + SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); } + SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); } + SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } + SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); } + SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } + SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); } + SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); } + SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); } + SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); } + SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); } + SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); } + SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); } + SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); } + SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); } + SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, int n); } + SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); } + SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); } + SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); } + SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); } + SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); } + SYS_GETRTABLE = 311 // { int sys_getrtable(void); } + SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); } + SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); } + SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); } + SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); } + SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); } + SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); } + SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); } + SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); } + SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); } + SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); } + SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, int flag); } + SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); } + SYS___GET_TCB = 330 // { void *sys___get_tcb(void); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go new file mode 100644 index 0000000..467971e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go @@ -0,0 +1,219 @@ +// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm && openbsd +// +build arm,openbsd + +package unix + +const ( + SYS_EXIT = 1 // { void sys_exit(int rval); } + SYS_FORK = 2 // { int sys_fork(void); } + SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int sys_open(const char *path, int flags, ... mode_t mode); } + SYS_CLOSE = 6 // { int sys_close(int fd); } + SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); } + SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, size_t psize); } + SYS_LINK = 9 // { int sys_link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int sys_unlink(const char *path); } + SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); } + SYS_CHDIR = 12 // { int sys_chdir(const char *path); } + SYS_FCHDIR = 13 // { int sys_fchdir(int fd); } + SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, dev_t dev); } + SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, gid_t gid); } + SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break + SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); } + SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, struct rusage *rusage); } + SYS_GETPID = 20 // { pid_t sys_getpid(void); } + SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, int flags, void *data); } + SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int sys_setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t sys_getuid(void); } + SYS_GETEUID = 25 // { uid_t sys_geteuid(void); } + SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); } + SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } + SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); } + SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); } + SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); } + SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); } + SYS_SYNC = 36 // { void sys_sync(void); } + SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); } + SYS_GETPPID = 39 // { pid_t sys_getppid(void); } + SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); } + SYS_DUP = 41 // { int sys_dup(int fd); } + SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); } + SYS_GETEGID = 43 // { gid_t sys_getegid(void); } + SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); } + SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); } + SYS_SIGACTION = 46 // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); } + SYS_GETGID = 47 // { gid_t sys_getgid(void); } + SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); } + SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int sys_acct(const char *path); } + SYS_SIGPENDING = 52 // { int sys_sigpending(void); } + SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); } + SYS_IOCTL = 54 // { int sys_ioctl(int fd, u_long com, ... void *data); } + SYS_REBOOT = 55 // { int sys_reboot(int opt); } + SYS_REVOKE = 56 // { int sys_revoke(const char *path); } + SYS_SYMLINK = 57 // { int sys_symlink(const char *path, const char *link); } + SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int sys_execve(const char *path, char * const *argp, char * const *envp); } + SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); } + SYS_CHROOT = 61 // { int sys_chroot(const char *path); } + SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); } + SYS_STATFS = 63 // { int sys_statfs(const char *path, struct statfs *buf); } + SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); } + SYS_VFORK = 66 // { int sys_vfork(void); } + SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); } + SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); } + SYS_SETITIMER = 69 // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } + SYS_GETITIMER = 70 // { int sys_getitimer(int which, struct itimerval *itv); } + SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_KEVENT = 72 // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } + SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, int behav); } + SYS_UTIMES = 76 // { int sys_utimes(const char *path, const struct timeval *tptr); } + SYS_FUTIMES = 77 // { int sys_futimes(int fd, const struct timeval *tptr); } + SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, const gid_t *gidset); } + SYS_GETPGRP = 81 // { int sys_getpgrp(void); } + SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); } + SYS_FUTEX = 83 // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); } + SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); } + SYS_FUTIMENS = 85 // { int sys_futimens(int fd, const struct timespec *times); } + SYS_KBIND = 86 // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); } + SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_DUP2 = 90 // { int sys_dup2(int from, int to); } + SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); } + SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); } + SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); } + SYS_FSYNC = 95 // { int sys_fsync(int fd); } + SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); } + SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); } + SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); } + SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); } + SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); } + SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); } + SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } + SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); } + SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); } + SYS_PLEDGE = 108 // { int sys_pledge(const char *promises, const char *execpromises); } + SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } + SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } + SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); } + SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); } + SYS_UNVEIL = 114 // { int sys_unveil(const char *path, const char *permissions); } + SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } + SYS_THRKILL = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); } + SYS_READV = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); } + SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); } + SYS_KILL = 122 // { int sys_kill(int pid, int signum); } + SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int sys_setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int sys_flock(int fd, int how); } + SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } + SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int sys_rmdir(const char *path); } + SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); } + SYS_GETLOGIN_R = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); } + SYS_SETSID = 147 // { int sys_setsid(void); } + SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); } + SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); } + SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); } + SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); } + SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); } + SYS_SETGID = 181 // { int sys_setgid(gid_t gid); } + SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); } + SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); } + SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); } + SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); } + SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); } + SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); } + SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); } + SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, off_t length); } + SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); } + SYS_SYSCTL = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } + SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); } + SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); } + SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); } + SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); } + SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); } + SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, int inherit); } + SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_ISSETUGID = 253 // { int sys_issetugid(void); } + SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); } + SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); } + SYS_PIPE = 263 // { int sys_pipe(int *fdp); } + SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); } + SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); } + SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); } + SYS_KQUEUE = 269 // { int sys_kqueue(void); } + SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); } + SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); } + SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } + SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); } + SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } + SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); } + SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); } + SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); } + SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); } + SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); } + SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); } + SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); } + SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); } + SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); } + SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, int n); } + SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); } + SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); } + SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); } + SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); } + SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); } + SYS_GETRTABLE = 311 // { int sys_getrtable(void); } + SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); } + SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); } + SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); } + SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); } + SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); } + SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); } + SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); } + SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); } + SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); } + SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); } + SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, int flag); } + SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); } + SYS___GET_TCB = 330 // { void *sys___get_tcb(void); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go new file mode 100644 index 0000000..32eec5e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go @@ -0,0 +1,218 @@ +// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm64 && openbsd +// +build arm64,openbsd + +package unix + +const ( + SYS_EXIT = 1 // { void sys_exit(int rval); } + SYS_FORK = 2 // { int sys_fork(void); } + SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int sys_open(const char *path, int flags, ... mode_t mode); } + SYS_CLOSE = 6 // { int sys_close(int fd); } + SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); } + SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, size_t psize); } + SYS_LINK = 9 // { int sys_link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int sys_unlink(const char *path); } + SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); } + SYS_CHDIR = 12 // { int sys_chdir(const char *path); } + SYS_FCHDIR = 13 // { int sys_fchdir(int fd); } + SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, dev_t dev); } + SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, gid_t gid); } + SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break + SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); } + SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, struct rusage *rusage); } + SYS_GETPID = 20 // { pid_t sys_getpid(void); } + SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, int flags, void *data); } + SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int sys_setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t sys_getuid(void); } + SYS_GETEUID = 25 // { uid_t sys_geteuid(void); } + SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); } + SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } + SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); } + SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); } + SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); } + SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); } + SYS_SYNC = 36 // { void sys_sync(void); } + SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); } + SYS_GETPPID = 39 // { pid_t sys_getppid(void); } + SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); } + SYS_DUP = 41 // { int sys_dup(int fd); } + SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); } + SYS_GETEGID = 43 // { gid_t sys_getegid(void); } + SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); } + SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); } + SYS_SIGACTION = 46 // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); } + SYS_GETGID = 47 // { gid_t sys_getgid(void); } + SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); } + SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int sys_acct(const char *path); } + SYS_SIGPENDING = 52 // { int sys_sigpending(void); } + SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); } + SYS_IOCTL = 54 // { int sys_ioctl(int fd, u_long com, ... void *data); } + SYS_REBOOT = 55 // { int sys_reboot(int opt); } + SYS_REVOKE = 56 // { int sys_revoke(const char *path); } + SYS_SYMLINK = 57 // { int sys_symlink(const char *path, const char *link); } + SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int sys_execve(const char *path, char * const *argp, char * const *envp); } + SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); } + SYS_CHROOT = 61 // { int sys_chroot(const char *path); } + SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); } + SYS_STATFS = 63 // { int sys_statfs(const char *path, struct statfs *buf); } + SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); } + SYS_VFORK = 66 // { int sys_vfork(void); } + SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); } + SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); } + SYS_SETITIMER = 69 // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } + SYS_GETITIMER = 70 // { int sys_getitimer(int which, struct itimerval *itv); } + SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_KEVENT = 72 // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } + SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, int behav); } + SYS_UTIMES = 76 // { int sys_utimes(const char *path, const struct timeval *tptr); } + SYS_FUTIMES = 77 // { int sys_futimes(int fd, const struct timeval *tptr); } + SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, const gid_t *gidset); } + SYS_GETPGRP = 81 // { int sys_getpgrp(void); } + SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); } + SYS_FUTEX = 83 // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); } + SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); } + SYS_FUTIMENS = 85 // { int sys_futimens(int fd, const struct timespec *times); } + SYS_KBIND = 86 // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); } + SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_DUP2 = 90 // { int sys_dup2(int from, int to); } + SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); } + SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); } + SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); } + SYS_FSYNC = 95 // { int sys_fsync(int fd); } + SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); } + SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); } + SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); } + SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); } + SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); } + SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); } + SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } + SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); } + SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); } + SYS_PLEDGE = 108 // { int sys_pledge(const char *promises, const char *execpromises); } + SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } + SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } + SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); } + SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); } + SYS_UNVEIL = 114 // { int sys_unveil(const char *path, const char *permissions); } + SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } + SYS_THRKILL = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); } + SYS_READV = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); } + SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); } + SYS_KILL = 122 // { int sys_kill(int pid, int signum); } + SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int sys_setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int sys_flock(int fd, int how); } + SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } + SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int sys_rmdir(const char *path); } + SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); } + SYS_GETLOGIN_R = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); } + SYS_SETSID = 147 // { int sys_setsid(void); } + SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); } + SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); } + SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); } + SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); } + SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); } + SYS_SETGID = 181 // { int sys_setgid(gid_t gid); } + SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); } + SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); } + SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); } + SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); } + SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); } + SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); } + SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); } + SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, off_t length); } + SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); } + SYS_SYSCTL = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } + SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); } + SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); } + SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); } + SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); } + SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); } + SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, int inherit); } + SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_ISSETUGID = 253 // { int sys_issetugid(void); } + SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); } + SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); } + SYS_PIPE = 263 // { int sys_pipe(int *fdp); } + SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); } + SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); } + SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); } + SYS_KQUEUE = 269 // { int sys_kqueue(void); } + SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); } + SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); } + SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } + SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); } + SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } + SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); } + SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); } + SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); } + SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); } + SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); } + SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); } + SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); } + SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); } + SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); } + SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, int n); } + SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); } + SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); } + SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); } + SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); } + SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); } + SYS_GETRTABLE = 311 // { int sys_getrtable(void); } + SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); } + SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); } + SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); } + SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); } + SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); } + SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); } + SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); } + SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); } + SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); } + SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); } + SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, int flag); } + SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); } + SYS___GET_TCB = 330 // { void *sys___get_tcb(void); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go new file mode 100644 index 0000000..a37f773 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go @@ -0,0 +1,221 @@ +// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build mips64 && openbsd +// +build mips64,openbsd + +package unix + +const ( + SYS_EXIT = 1 // { void sys_exit(int rval); } + SYS_FORK = 2 // { int sys_fork(void); } + SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int sys_open(const char *path, int flags, ... mode_t mode); } + SYS_CLOSE = 6 // { int sys_close(int fd); } + SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); } + SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, size_t psize); } + SYS_LINK = 9 // { int sys_link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int sys_unlink(const char *path); } + SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); } + SYS_CHDIR = 12 // { int sys_chdir(const char *path); } + SYS_FCHDIR = 13 // { int sys_fchdir(int fd); } + SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, dev_t dev); } + SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, gid_t gid); } + SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break + SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); } + SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, struct rusage *rusage); } + SYS_GETPID = 20 // { pid_t sys_getpid(void); } + SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, int flags, void *data); } + SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int sys_setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t sys_getuid(void); } + SYS_GETEUID = 25 // { uid_t sys_geteuid(void); } + SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); } + SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } + SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); } + SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); } + SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); } + SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); } + SYS_SYNC = 36 // { void sys_sync(void); } + SYS_MSYSCALL = 37 // { int sys_msyscall(void *addr, size_t len); } + SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); } + SYS_GETPPID = 39 // { pid_t sys_getppid(void); } + SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); } + SYS_DUP = 41 // { int sys_dup(int fd); } + SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); } + SYS_GETEGID = 43 // { gid_t sys_getegid(void); } + SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); } + SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); } + SYS_SIGACTION = 46 // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); } + SYS_GETGID = 47 // { gid_t sys_getgid(void); } + SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); } + SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int sys_acct(const char *path); } + SYS_SIGPENDING = 52 // { int sys_sigpending(void); } + SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); } + SYS_IOCTL = 54 // { int sys_ioctl(int fd, u_long com, ... void *data); } + SYS_REBOOT = 55 // { int sys_reboot(int opt); } + SYS_REVOKE = 56 // { int sys_revoke(const char *path); } + SYS_SYMLINK = 57 // { int sys_symlink(const char *path, const char *link); } + SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int sys_execve(const char *path, char * const *argp, char * const *envp); } + SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); } + SYS_CHROOT = 61 // { int sys_chroot(const char *path); } + SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); } + SYS_STATFS = 63 // { int sys_statfs(const char *path, struct statfs *buf); } + SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); } + SYS_VFORK = 66 // { int sys_vfork(void); } + SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); } + SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); } + SYS_SETITIMER = 69 // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } + SYS_GETITIMER = 70 // { int sys_getitimer(int which, struct itimerval *itv); } + SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_KEVENT = 72 // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } + SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, int behav); } + SYS_UTIMES = 76 // { int sys_utimes(const char *path, const struct timeval *tptr); } + SYS_FUTIMES = 77 // { int sys_futimes(int fd, const struct timeval *tptr); } + SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, const gid_t *gidset); } + SYS_GETPGRP = 81 // { int sys_getpgrp(void); } + SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); } + SYS_FUTEX = 83 // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); } + SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); } + SYS_FUTIMENS = 85 // { int sys_futimens(int fd, const struct timespec *times); } + SYS_KBIND = 86 // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); } + SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_DUP2 = 90 // { int sys_dup2(int from, int to); } + SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); } + SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); } + SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); } + SYS_FSYNC = 95 // { int sys_fsync(int fd); } + SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); } + SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); } + SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); } + SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); } + SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); } + SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); } + SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } + SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); } + SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); } + SYS_PLEDGE = 108 // { int sys_pledge(const char *promises, const char *execpromises); } + SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } + SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } + SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); } + SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); } + SYS_UNVEIL = 114 // { int sys_unveil(const char *path, const char *permissions); } + SYS___REALPATH = 115 // { int sys___realpath(const char *pathname, char *resolved); } + SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } + SYS_THRKILL = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); } + SYS_READV = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); } + SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); } + SYS_KILL = 122 // { int sys_kill(int pid, int signum); } + SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int sys_setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int sys_flock(int fd, int how); } + SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } + SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int sys_rmdir(const char *path); } + SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); } + SYS_GETLOGIN_R = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); } + SYS_SETSID = 147 // { int sys_setsid(void); } + SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); } + SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); } + SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); } + SYS___TMPFD = 164 // { int sys___tmpfd(int flags); } + SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); } + SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); } + SYS_SETGID = 181 // { int sys_setgid(gid_t gid); } + SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); } + SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); } + SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); } + SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); } + SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); } + SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); } + SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); } + SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, off_t length); } + SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); } + SYS_SYSCTL = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } + SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); } + SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); } + SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); } + SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); } + SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); } + SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, int inherit); } + SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_ISSETUGID = 253 // { int sys_issetugid(void); } + SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); } + SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); } + SYS_PIPE = 263 // { int sys_pipe(int *fdp); } + SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); } + SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); } + SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); } + SYS_KQUEUE = 269 // { int sys_kqueue(void); } + SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); } + SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); } + SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } + SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); } + SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } + SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); } + SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); } + SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); } + SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); } + SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); } + SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); } + SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); } + SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); } + SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); } + SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, int n); } + SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); } + SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); } + SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); } + SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); } + SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); } + SYS_GETRTABLE = 311 // { int sys_getrtable(void); } + SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); } + SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); } + SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); } + SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); } + SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); } + SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); } + SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); } + SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); } + SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); } + SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); } + SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, int flag); } + SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); } + SYS___GET_TCB = 330 // { void *sys___get_tcb(void); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go new file mode 100644 index 0000000..073daad --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go @@ -0,0 +1,2670 @@ +// 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 zos && s390x +// +build zos,s390x + +package unix + +// TODO: auto-generate. + +const ( + SYS_ACOSD128 = 0xB80 + SYS_ACOSD32 = 0xB7E + SYS_ACOSD64 = 0xB7F + SYS_ACOSHD128 = 0xB83 + SYS_ACOSHD32 = 0xB81 + SYS_ACOSHD64 = 0xB82 + SYS_AIO_FSYNC = 0xC69 + SYS_ASCTIME = 0x0AE + SYS_ASCTIME64 = 0xCD7 + SYS_ASCTIME64_R = 0xCD8 + SYS_ASIND128 = 0xB86 + SYS_ASIND32 = 0xB84 + SYS_ASIND64 = 0xB85 + SYS_ASINHD128 = 0xB89 + SYS_ASINHD32 = 0xB87 + SYS_ASINHD64 = 0xB88 + SYS_ATAN2D128 = 0xB8F + SYS_ATAN2D32 = 0xB8D + SYS_ATAN2D64 = 0xB8E + SYS_ATAND128 = 0xB8C + SYS_ATAND32 = 0xB8A + SYS_ATAND64 = 0xB8B + SYS_ATANHD128 = 0xB92 + SYS_ATANHD32 = 0xB90 + SYS_ATANHD64 = 0xB91 + SYS_BIND2ADDRSEL = 0xD59 + SYS_C16RTOMB = 0xD40 + SYS_C32RTOMB = 0xD41 + SYS_CBRTD128 = 0xB95 + SYS_CBRTD32 = 0xB93 + SYS_CBRTD64 = 0xB94 + SYS_CEILD128 = 0xB98 + SYS_CEILD32 = 0xB96 + SYS_CEILD64 = 0xB97 + SYS_CLEARENV = 0x0C9 + SYS_CLEARERR_UNLOCKED = 0xCA1 + SYS_CLOCK = 0x0AA + SYS_CLOGL = 0xA00 + SYS_CLRMEMF = 0x0BD + SYS_CONJ = 0xA03 + SYS_CONJF = 0xA06 + SYS_CONJL = 0xA09 + SYS_COPYSIGND128 = 0xB9E + SYS_COPYSIGND32 = 0xB9C + SYS_COPYSIGND64 = 0xB9D + SYS_COSD128 = 0xBA1 + SYS_COSD32 = 0xB9F + SYS_COSD64 = 0xBA0 + SYS_COSHD128 = 0xBA4 + SYS_COSHD32 = 0xBA2 + SYS_COSHD64 = 0xBA3 + SYS_CPOW = 0xA0C + SYS_CPOWF = 0xA0F + SYS_CPOWL = 0xA12 + SYS_CPROJ = 0xA15 + SYS_CPROJF = 0xA18 + SYS_CPROJL = 0xA1B + SYS_CREAL = 0xA1E + SYS_CREALF = 0xA21 + SYS_CREALL = 0xA24 + SYS_CSIN = 0xA27 + SYS_CSINF = 0xA2A + SYS_CSINH = 0xA30 + SYS_CSINHF = 0xA33 + SYS_CSINHL = 0xA36 + SYS_CSINL = 0xA2D + SYS_CSNAP = 0x0C5 + SYS_CSQRT = 0xA39 + SYS_CSQRTF = 0xA3C + SYS_CSQRTL = 0xA3F + SYS_CTAN = 0xA42 + SYS_CTANF = 0xA45 + SYS_CTANH = 0xA4B + SYS_CTANHF = 0xA4E + SYS_CTANHL = 0xA51 + SYS_CTANL = 0xA48 + SYS_CTIME = 0x0AB + SYS_CTIME64 = 0xCD9 + SYS_CTIME64_R = 0xCDA + SYS_CTRACE = 0x0C6 + SYS_DIFFTIME = 0x0A7 + SYS_DIFFTIME64 = 0xCDB + SYS_DLADDR = 0xC82 + SYS_DYNALLOC = 0x0C3 + SYS_DYNFREE = 0x0C2 + SYS_ERFCD128 = 0xBAA + SYS_ERFCD32 = 0xBA8 + SYS_ERFCD64 = 0xBA9 + SYS_ERFD128 = 0xBA7 + SYS_ERFD32 = 0xBA5 + SYS_ERFD64 = 0xBA6 + SYS_EXP2D128 = 0xBB0 + SYS_EXP2D32 = 0xBAE + SYS_EXP2D64 = 0xBAF + SYS_EXPD128 = 0xBAD + SYS_EXPD32 = 0xBAB + SYS_EXPD64 = 0xBAC + SYS_EXPM1D128 = 0xBB3 + SYS_EXPM1D32 = 0xBB1 + SYS_EXPM1D64 = 0xBB2 + SYS_FABSD128 = 0xBB6 + SYS_FABSD32 = 0xBB4 + SYS_FABSD64 = 0xBB5 + SYS_FDELREC_UNLOCKED = 0xCA2 + SYS_FDIMD128 = 0xBB9 + SYS_FDIMD32 = 0xBB7 + SYS_FDIMD64 = 0xBB8 + SYS_FDOPEN_UNLOCKED = 0xCFC + SYS_FECLEAREXCEPT = 0xAEA + SYS_FEGETENV = 0xAEB + SYS_FEGETEXCEPTFLAG = 0xAEC + SYS_FEGETROUND = 0xAED + SYS_FEHOLDEXCEPT = 0xAEE + SYS_FEOF_UNLOCKED = 0xCA3 + SYS_FERAISEEXCEPT = 0xAEF + SYS_FERROR_UNLOCKED = 0xCA4 + SYS_FESETENV = 0xAF0 + SYS_FESETEXCEPTFLAG = 0xAF1 + SYS_FESETROUND = 0xAF2 + SYS_FETCHEP = 0x0BF + SYS_FETESTEXCEPT = 0xAF3 + SYS_FEUPDATEENV = 0xAF4 + SYS_FE_DEC_GETROUND = 0xBBA + SYS_FE_DEC_SETROUND = 0xBBB + SYS_FFLUSH_UNLOCKED = 0xCA5 + SYS_FGETC_UNLOCKED = 0xC80 + SYS_FGETPOS64 = 0xCEE + SYS_FGETPOS64_UNLOCKED = 0xCF4 + SYS_FGETPOS_UNLOCKED = 0xCA6 + SYS_FGETS_UNLOCKED = 0xC7C + SYS_FGETWC_UNLOCKED = 0xCA7 + SYS_FGETWS_UNLOCKED = 0xCA8 + SYS_FILENO_UNLOCKED = 0xCA9 + SYS_FLDATA = 0x0C1 + SYS_FLDATA_UNLOCKED = 0xCAA + SYS_FLOCATE_UNLOCKED = 0xCAB + SYS_FLOORD128 = 0xBBE + SYS_FLOORD32 = 0xBBC + SYS_FLOORD64 = 0xBBD + SYS_FMA = 0xA63 + SYS_FMAD128 = 0xBC1 + SYS_FMAD32 = 0xBBF + SYS_FMAD64 = 0xBC0 + SYS_FMAF = 0xA66 + SYS_FMAL = 0xA69 + SYS_FMAX = 0xA6C + SYS_FMAXD128 = 0xBC4 + SYS_FMAXD32 = 0xBC2 + SYS_FMAXD64 = 0xBC3 + SYS_FMAXF = 0xA6F + SYS_FMAXL = 0xA72 + SYS_FMIN = 0xA75 + SYS_FMIND128 = 0xBC7 + SYS_FMIND32 = 0xBC5 + SYS_FMIND64 = 0xBC6 + SYS_FMINF = 0xA78 + SYS_FMINL = 0xA7B + SYS_FMODD128 = 0xBCA + SYS_FMODD32 = 0xBC8 + SYS_FMODD64 = 0xBC9 + SYS_FOPEN64 = 0xD49 + SYS_FOPEN64_UNLOCKED = 0xD4A + SYS_FOPEN_UNLOCKED = 0xCFA + SYS_FPRINTF_UNLOCKED = 0xCAC + SYS_FPUTC_UNLOCKED = 0xC81 + SYS_FPUTS_UNLOCKED = 0xC7E + SYS_FPUTWC_UNLOCKED = 0xCAD + SYS_FPUTWS_UNLOCKED = 0xCAE + SYS_FREAD_NOUPDATE = 0xCEC + SYS_FREAD_NOUPDATE_UNLOCKED = 0xCED + SYS_FREAD_UNLOCKED = 0xC7B + SYS_FREEIFADDRS = 0xCE6 + SYS_FREOPEN64 = 0xD4B + SYS_FREOPEN64_UNLOCKED = 0xD4C + SYS_FREOPEN_UNLOCKED = 0xCFB + SYS_FREXPD128 = 0xBCE + SYS_FREXPD32 = 0xBCC + SYS_FREXPD64 = 0xBCD + SYS_FSCANF_UNLOCKED = 0xCAF + SYS_FSEEK64 = 0xCEF + SYS_FSEEK64_UNLOCKED = 0xCF5 + SYS_FSEEKO64 = 0xCF0 + SYS_FSEEKO64_UNLOCKED = 0xCF6 + SYS_FSEEKO_UNLOCKED = 0xCB1 + SYS_FSEEK_UNLOCKED = 0xCB0 + SYS_FSETPOS64 = 0xCF1 + SYS_FSETPOS64_UNLOCKED = 0xCF7 + SYS_FSETPOS_UNLOCKED = 0xCB3 + SYS_FTELL64 = 0xCF2 + SYS_FTELL64_UNLOCKED = 0xCF8 + SYS_FTELLO64 = 0xCF3 + SYS_FTELLO64_UNLOCKED = 0xCF9 + SYS_FTELLO_UNLOCKED = 0xCB5 + SYS_FTELL_UNLOCKED = 0xCB4 + SYS_FUPDATE = 0x0B5 + SYS_FUPDATE_UNLOCKED = 0xCB7 + SYS_FWIDE_UNLOCKED = 0xCB8 + SYS_FWPRINTF_UNLOCKED = 0xCB9 + SYS_FWRITE_UNLOCKED = 0xC7A + SYS_FWSCANF_UNLOCKED = 0xCBA + SYS_GETDATE64 = 0xD4F + SYS_GETIFADDRS = 0xCE7 + SYS_GETIPV4SOURCEFILTER = 0xC77 + SYS_GETSOURCEFILTER = 0xC79 + SYS_GETSYNTX = 0x0FD + SYS_GETS_UNLOCKED = 0xC7D + SYS_GETTIMEOFDAY64 = 0xD50 + SYS_GETWCHAR_UNLOCKED = 0xCBC + SYS_GETWC_UNLOCKED = 0xCBB + SYS_GMTIME = 0x0B0 + SYS_GMTIME64 = 0xCDC + SYS_GMTIME64_R = 0xCDD + SYS_HYPOTD128 = 0xBD1 + SYS_HYPOTD32 = 0xBCF + SYS_HYPOTD64 = 0xBD0 + SYS_ILOGBD128 = 0xBD4 + SYS_ILOGBD32 = 0xBD2 + SYS_ILOGBD64 = 0xBD3 + SYS_ILOGBF = 0xA7E + SYS_ILOGBL = 0xA81 + SYS_INET6_IS_SRCADDR = 0xD5A + SYS_ISBLANK = 0x0FE + SYS_ISWALNUM = 0x0FF + SYS_LDEXPD128 = 0xBD7 + SYS_LDEXPD32 = 0xBD5 + SYS_LDEXPD64 = 0xBD6 + SYS_LGAMMAD128 = 0xBDA + SYS_LGAMMAD32 = 0xBD8 + SYS_LGAMMAD64 = 0xBD9 + SYS_LIO_LISTIO = 0xC6A + SYS_LLRINT = 0xA84 + SYS_LLRINTD128 = 0xBDD + SYS_LLRINTD32 = 0xBDB + SYS_LLRINTD64 = 0xBDC + SYS_LLRINTF = 0xA87 + SYS_LLRINTL = 0xA8A + SYS_LLROUND = 0xA8D + SYS_LLROUNDD128 = 0xBE0 + SYS_LLROUNDD32 = 0xBDE + SYS_LLROUNDD64 = 0xBDF + SYS_LLROUNDF = 0xA90 + SYS_LLROUNDL = 0xA93 + SYS_LOCALTIM = 0x0B1 + SYS_LOCALTIME = 0x0B1 + SYS_LOCALTIME64 = 0xCDE + SYS_LOCALTIME64_R = 0xCDF + SYS_LOG10D128 = 0xBE6 + SYS_LOG10D32 = 0xBE4 + SYS_LOG10D64 = 0xBE5 + SYS_LOG1PD128 = 0xBE9 + SYS_LOG1PD32 = 0xBE7 + SYS_LOG1PD64 = 0xBE8 + SYS_LOG2D128 = 0xBEC + SYS_LOG2D32 = 0xBEA + SYS_LOG2D64 = 0xBEB + SYS_LOGBD128 = 0xBEF + SYS_LOGBD32 = 0xBED + SYS_LOGBD64 = 0xBEE + SYS_LOGBF = 0xA96 + SYS_LOGBL = 0xA99 + SYS_LOGD128 = 0xBE3 + SYS_LOGD32 = 0xBE1 + SYS_LOGD64 = 0xBE2 + SYS_LRINT = 0xA9C + SYS_LRINTD128 = 0xBF2 + SYS_LRINTD32 = 0xBF0 + SYS_LRINTD64 = 0xBF1 + SYS_LRINTF = 0xA9F + SYS_LRINTL = 0xAA2 + SYS_LROUNDD128 = 0xBF5 + SYS_LROUNDD32 = 0xBF3 + SYS_LROUNDD64 = 0xBF4 + SYS_LROUNDL = 0xAA5 + SYS_MBLEN = 0x0AF + SYS_MBRTOC16 = 0xD42 + SYS_MBRTOC32 = 0xD43 + SYS_MEMSET = 0x0A3 + SYS_MKTIME = 0x0AC + SYS_MKTIME64 = 0xCE0 + SYS_MODFD128 = 0xBF8 + SYS_MODFD32 = 0xBF6 + SYS_MODFD64 = 0xBF7 + SYS_NAN = 0xAA8 + SYS_NAND128 = 0xBFB + SYS_NAND32 = 0xBF9 + SYS_NAND64 = 0xBFA + SYS_NANF = 0xAAA + SYS_NANL = 0xAAC + SYS_NEARBYINT = 0xAAE + SYS_NEARBYINTD128 = 0xBFE + SYS_NEARBYINTD32 = 0xBFC + SYS_NEARBYINTD64 = 0xBFD + SYS_NEARBYINTF = 0xAB1 + SYS_NEARBYINTL = 0xAB4 + SYS_NEXTAFTERD128 = 0xC01 + SYS_NEXTAFTERD32 = 0xBFF + SYS_NEXTAFTERD64 = 0xC00 + SYS_NEXTAFTERF = 0xAB7 + SYS_NEXTAFTERL = 0xABA + SYS_NEXTTOWARD = 0xABD + SYS_NEXTTOWARDD128 = 0xC04 + SYS_NEXTTOWARDD32 = 0xC02 + SYS_NEXTTOWARDD64 = 0xC03 + SYS_NEXTTOWARDF = 0xAC0 + SYS_NEXTTOWARDL = 0xAC3 + SYS_NL_LANGINFO = 0x0FC + SYS_PERROR_UNLOCKED = 0xCBD + SYS_POSIX_FALLOCATE = 0xCE8 + SYS_POSIX_MEMALIGN = 0xCE9 + SYS_POSIX_OPENPT = 0xC66 + SYS_POWD128 = 0xC07 + SYS_POWD32 = 0xC05 + SYS_POWD64 = 0xC06 + SYS_PRINTF_UNLOCKED = 0xCBE + SYS_PSELECT = 0xC67 + SYS_PTHREAD_ATTR_GETSTACK = 0xB3E + SYS_PTHREAD_ATTR_SETSTACK = 0xB3F + SYS_PTHREAD_SECURITY_APPLID_NP = 0xCE4 + SYS_PUTS_UNLOCKED = 0xC7F + SYS_PUTWCHAR_UNLOCKED = 0xCC0 + SYS_PUTWC_UNLOCKED = 0xCBF + SYS_QUANTEXPD128 = 0xD46 + SYS_QUANTEXPD32 = 0xD44 + SYS_QUANTEXPD64 = 0xD45 + SYS_QUANTIZED128 = 0xC0A + SYS_QUANTIZED32 = 0xC08 + SYS_QUANTIZED64 = 0xC09 + SYS_REMAINDERD128 = 0xC0D + SYS_REMAINDERD32 = 0xC0B + SYS_REMAINDERD64 = 0xC0C + SYS_RESIZE_ALLOC = 0xCEB + SYS_REWIND_UNLOCKED = 0xCC1 + SYS_RINTD128 = 0xC13 + SYS_RINTD32 = 0xC11 + SYS_RINTD64 = 0xC12 + SYS_RINTF = 0xACB + SYS_RINTL = 0xACD + SYS_ROUND = 0xACF + SYS_ROUNDD128 = 0xC16 + SYS_ROUNDD32 = 0xC14 + SYS_ROUNDD64 = 0xC15 + SYS_ROUNDF = 0xAD2 + SYS_ROUNDL = 0xAD5 + SYS_SAMEQUANTUMD128 = 0xC19 + SYS_SAMEQUANTUMD32 = 0xC17 + SYS_SAMEQUANTUMD64 = 0xC18 + SYS_SCALBLN = 0xAD8 + SYS_SCALBLND128 = 0xC1C + SYS_SCALBLND32 = 0xC1A + SYS_SCALBLND64 = 0xC1B + SYS_SCALBLNF = 0xADB + SYS_SCALBLNL = 0xADE + SYS_SCALBND128 = 0xC1F + SYS_SCALBND32 = 0xC1D + SYS_SCALBND64 = 0xC1E + SYS_SCALBNF = 0xAE3 + SYS_SCALBNL = 0xAE6 + SYS_SCANF_UNLOCKED = 0xCC2 + SYS_SCHED_YIELD = 0xB32 + SYS_SETENV = 0x0C8 + SYS_SETIPV4SOURCEFILTER = 0xC76 + SYS_SETSOURCEFILTER = 0xC78 + SYS_SHM_OPEN = 0xC8C + SYS_SHM_UNLINK = 0xC8D + SYS_SIND128 = 0xC22 + SYS_SIND32 = 0xC20 + SYS_SIND64 = 0xC21 + SYS_SINHD128 = 0xC25 + SYS_SINHD32 = 0xC23 + SYS_SINHD64 = 0xC24 + SYS_SIZEOF_ALLOC = 0xCEA + SYS_SOCKATMARK = 0xC68 + SYS_SQRTD128 = 0xC28 + SYS_SQRTD32 = 0xC26 + SYS_SQRTD64 = 0xC27 + SYS_STRCHR = 0x0A0 + SYS_STRCSPN = 0x0A1 + SYS_STRERROR = 0x0A8 + SYS_STRERROR_R = 0xB33 + SYS_STRFTIME = 0x0B2 + SYS_STRLEN = 0x0A9 + SYS_STRPBRK = 0x0A2 + SYS_STRSPN = 0x0A4 + SYS_STRSTR = 0x0A5 + SYS_STRTOD128 = 0xC2B + SYS_STRTOD32 = 0xC29 + SYS_STRTOD64 = 0xC2A + SYS_STRTOK = 0x0A6 + SYS_TAND128 = 0xC2E + SYS_TAND32 = 0xC2C + SYS_TAND64 = 0xC2D + SYS_TANHD128 = 0xC31 + SYS_TANHD32 = 0xC2F + SYS_TANHD64 = 0xC30 + SYS_TGAMMAD128 = 0xC34 + SYS_TGAMMAD32 = 0xC32 + SYS_TGAMMAD64 = 0xC33 + SYS_TIME = 0x0AD + SYS_TIME64 = 0xCE1 + SYS_TMPFILE64 = 0xD4D + SYS_TMPFILE64_UNLOCKED = 0xD4E + SYS_TMPFILE_UNLOCKED = 0xCFD + SYS_TRUNCD128 = 0xC40 + SYS_TRUNCD32 = 0xC3E + SYS_TRUNCD64 = 0xC3F + SYS_UNGETC_UNLOCKED = 0xCC3 + SYS_UNGETWC_UNLOCKED = 0xCC4 + SYS_UNSETENV = 0xB34 + SYS_VFPRINTF_UNLOCKED = 0xCC5 + SYS_VFSCANF_UNLOCKED = 0xCC7 + SYS_VFWPRINTF_UNLOCKED = 0xCC9 + SYS_VFWSCANF_UNLOCKED = 0xCCB + SYS_VPRINTF_UNLOCKED = 0xCCD + SYS_VSCANF_UNLOCKED = 0xCCF + SYS_VWPRINTF_UNLOCKED = 0xCD1 + SYS_VWSCANF_UNLOCKED = 0xCD3 + SYS_WCSTOD128 = 0xC43 + SYS_WCSTOD32 = 0xC41 + SYS_WCSTOD64 = 0xC42 + SYS_WPRINTF_UNLOCKED = 0xCD5 + SYS_WSCANF_UNLOCKED = 0xCD6 + SYS__FLUSHLBF = 0xD68 + SYS__FLUSHLBF_UNLOCKED = 0xD6F + SYS___ACOSHF_H = 0xA54 + SYS___ACOSHL_H = 0xA55 + SYS___ASINHF_H = 0xA56 + SYS___ASINHL_H = 0xA57 + SYS___ATANPID128 = 0xC6D + SYS___ATANPID32 = 0xC6B + SYS___ATANPID64 = 0xC6C + SYS___CBRTF_H = 0xA58 + SYS___CBRTL_H = 0xA59 + SYS___CDUMP = 0x0C4 + SYS___CLASS = 0xAFA + SYS___CLASS2 = 0xB99 + SYS___CLASS2D128 = 0xC99 + SYS___CLASS2D32 = 0xC97 + SYS___CLASS2D64 = 0xC98 + SYS___CLASS2F = 0xC91 + SYS___CLASS2F_B = 0xC93 + SYS___CLASS2F_H = 0xC94 + SYS___CLASS2L = 0xC92 + SYS___CLASS2L_B = 0xC95 + SYS___CLASS2L_H = 0xC96 + SYS___CLASS2_B = 0xB9A + SYS___CLASS2_H = 0xB9B + SYS___CLASS_B = 0xAFB + SYS___CLASS_H = 0xAFC + SYS___CLOGL_B = 0xA01 + SYS___CLOGL_H = 0xA02 + SYS___CLRENV = 0x0C9 + SYS___CLRMF = 0x0BD + SYS___CODEPAGE_INFO = 0xC64 + SYS___CONJF_B = 0xA07 + SYS___CONJF_H = 0xA08 + SYS___CONJL_B = 0xA0A + SYS___CONJL_H = 0xA0B + SYS___CONJ_B = 0xA04 + SYS___CONJ_H = 0xA05 + SYS___COPYSIGN_B = 0xA5A + SYS___COPYSIGN_H = 0xAF5 + SYS___COSPID128 = 0xC70 + SYS___COSPID32 = 0xC6E + SYS___COSPID64 = 0xC6F + SYS___CPOWF_B = 0xA10 + SYS___CPOWF_H = 0xA11 + SYS___CPOWL_B = 0xA13 + SYS___CPOWL_H = 0xA14 + SYS___CPOW_B = 0xA0D + SYS___CPOW_H = 0xA0E + SYS___CPROJF_B = 0xA19 + SYS___CPROJF_H = 0xA1A + SYS___CPROJL_B = 0xA1C + SYS___CPROJL_H = 0xA1D + SYS___CPROJ_B = 0xA16 + SYS___CPROJ_H = 0xA17 + SYS___CREALF_B = 0xA22 + SYS___CREALF_H = 0xA23 + SYS___CREALL_B = 0xA25 + SYS___CREALL_H = 0xA26 + SYS___CREAL_B = 0xA1F + SYS___CREAL_H = 0xA20 + SYS___CSINF_B = 0xA2B + SYS___CSINF_H = 0xA2C + SYS___CSINHF_B = 0xA34 + SYS___CSINHF_H = 0xA35 + SYS___CSINHL_B = 0xA37 + SYS___CSINHL_H = 0xA38 + SYS___CSINH_B = 0xA31 + SYS___CSINH_H = 0xA32 + SYS___CSINL_B = 0xA2E + SYS___CSINL_H = 0xA2F + SYS___CSIN_B = 0xA28 + SYS___CSIN_H = 0xA29 + SYS___CSNAP = 0x0C5 + SYS___CSQRTF_B = 0xA3D + SYS___CSQRTF_H = 0xA3E + SYS___CSQRTL_B = 0xA40 + SYS___CSQRTL_H = 0xA41 + SYS___CSQRT_B = 0xA3A + SYS___CSQRT_H = 0xA3B + SYS___CTANF_B = 0xA46 + SYS___CTANF_H = 0xA47 + SYS___CTANHF_B = 0xA4F + SYS___CTANHF_H = 0xA50 + SYS___CTANHL_B = 0xA52 + SYS___CTANHL_H = 0xA53 + SYS___CTANH_B = 0xA4C + SYS___CTANH_H = 0xA4D + SYS___CTANL_B = 0xA49 + SYS___CTANL_H = 0xA4A + SYS___CTAN_B = 0xA43 + SYS___CTAN_H = 0xA44 + SYS___CTEST = 0x0C7 + SYS___CTRACE = 0x0C6 + SYS___D1TOP = 0xC9B + SYS___D2TOP = 0xC9C + SYS___D4TOP = 0xC9D + SYS___DYNALL = 0x0C3 + SYS___DYNFRE = 0x0C2 + SYS___EXP2F_H = 0xA5E + SYS___EXP2L_H = 0xA5F + SYS___EXP2_H = 0xA5D + SYS___EXPM1F_H = 0xA5B + SYS___EXPM1L_H = 0xA5C + SYS___FBUFSIZE = 0xD60 + SYS___FLBF = 0xD62 + SYS___FLDATA = 0x0C1 + SYS___FMAF_B = 0xA67 + SYS___FMAF_H = 0xA68 + SYS___FMAL_B = 0xA6A + SYS___FMAL_H = 0xA6B + SYS___FMAXF_B = 0xA70 + SYS___FMAXF_H = 0xA71 + SYS___FMAXL_B = 0xA73 + SYS___FMAXL_H = 0xA74 + SYS___FMAX_B = 0xA6D + SYS___FMAX_H = 0xA6E + SYS___FMA_B = 0xA64 + SYS___FMA_H = 0xA65 + SYS___FMINF_B = 0xA79 + SYS___FMINF_H = 0xA7A + SYS___FMINL_B = 0xA7C + SYS___FMINL_H = 0xA7D + SYS___FMIN_B = 0xA76 + SYS___FMIN_H = 0xA77 + SYS___FPENDING = 0xD61 + SYS___FPENDING_UNLOCKED = 0xD6C + SYS___FPURGE = 0xD69 + SYS___FPURGE_UNLOCKED = 0xD70 + SYS___FP_CAST_D = 0xBCB + SYS___FREADABLE = 0xD63 + SYS___FREADAHEAD = 0xD6A + SYS___FREADAHEAD_UNLOCKED = 0xD71 + SYS___FREADING = 0xD65 + SYS___FREADING_UNLOCKED = 0xD6D + SYS___FSEEK2 = 0xB3C + SYS___FSETERR = 0xD6B + SYS___FSETLOCKING = 0xD67 + SYS___FTCHEP = 0x0BF + SYS___FTELL2 = 0xB3B + SYS___FUPDT = 0x0B5 + SYS___FWRITABLE = 0xD64 + SYS___FWRITING = 0xD66 + SYS___FWRITING_UNLOCKED = 0xD6E + SYS___GETCB = 0x0B4 + SYS___GETGRGID1 = 0xD5B + SYS___GETGRNAM1 = 0xD5C + SYS___GETTHENT = 0xCE5 + SYS___GETTOD = 0xD3E + SYS___HYPOTF_H = 0xAF6 + SYS___HYPOTL_H = 0xAF7 + SYS___ILOGBF_B = 0xA7F + SYS___ILOGBF_H = 0xA80 + SYS___ILOGBL_B = 0xA82 + SYS___ILOGBL_H = 0xA83 + SYS___ISBLANK_A = 0xB2E + SYS___ISBLNK = 0x0FE + SYS___ISWBLANK_A = 0xB2F + SYS___LE_CEEGTJS = 0xD72 + SYS___LE_TRACEBACK = 0xB7A + SYS___LGAMMAL_H = 0xA62 + SYS___LGAMMA_B_C99 = 0xB39 + SYS___LGAMMA_H_C99 = 0xB38 + SYS___LGAMMA_R_C99 = 0xB3A + SYS___LLRINTF_B = 0xA88 + SYS___LLRINTF_H = 0xA89 + SYS___LLRINTL_B = 0xA8B + SYS___LLRINTL_H = 0xA8C + SYS___LLRINT_B = 0xA85 + SYS___LLRINT_H = 0xA86 + SYS___LLROUNDF_B = 0xA91 + SYS___LLROUNDF_H = 0xA92 + SYS___LLROUNDL_B = 0xA94 + SYS___LLROUNDL_H = 0xA95 + SYS___LLROUND_B = 0xA8E + SYS___LLROUND_H = 0xA8F + SYS___LOCALE_CTL = 0xD47 + SYS___LOG1PF_H = 0xA60 + SYS___LOG1PL_H = 0xA61 + SYS___LOGBF_B = 0xA97 + SYS___LOGBF_H = 0xA98 + SYS___LOGBL_B = 0xA9A + SYS___LOGBL_H = 0xA9B + SYS___LOGIN_APPLID = 0xCE2 + SYS___LRINTF_B = 0xAA0 + SYS___LRINTF_H = 0xAA1 + SYS___LRINTL_B = 0xAA3 + SYS___LRINTL_H = 0xAA4 + SYS___LRINT_B = 0xA9D + SYS___LRINT_H = 0xA9E + SYS___LROUNDF_FIXUP = 0xB31 + SYS___LROUNDL_B = 0xAA6 + SYS___LROUNDL_H = 0xAA7 + SYS___LROUND_FIXUP = 0xB30 + SYS___MOSERVICES = 0xD3D + SYS___MUST_STAY_CLEAN = 0xB7C + SYS___NANF_B = 0xAAB + SYS___NANL_B = 0xAAD + SYS___NAN_B = 0xAA9 + SYS___NEARBYINTF_B = 0xAB2 + SYS___NEARBYINTF_H = 0xAB3 + SYS___NEARBYINTL_B = 0xAB5 + SYS___NEARBYINTL_H = 0xAB6 + SYS___NEARBYINT_B = 0xAAF + SYS___NEARBYINT_H = 0xAB0 + SYS___NEXTAFTERF_B = 0xAB8 + SYS___NEXTAFTERF_H = 0xAB9 + SYS___NEXTAFTERL_B = 0xABB + SYS___NEXTAFTERL_H = 0xABC + SYS___NEXTTOWARDF_B = 0xAC1 + SYS___NEXTTOWARDF_H = 0xAC2 + SYS___NEXTTOWARDL_B = 0xAC4 + SYS___NEXTTOWARDL_H = 0xAC5 + SYS___NEXTTOWARD_B = 0xABE + SYS___NEXTTOWARD_H = 0xABF + SYS___O_ENV = 0xB7D + SYS___PASSWD_APPLID = 0xCE3 + SYS___PTOD1 = 0xC9E + SYS___PTOD2 = 0xC9F + SYS___PTOD4 = 0xCA0 + SYS___REGCOMP_STD = 0x0EA + SYS___REMAINDERF_H = 0xAC6 + SYS___REMAINDERL_H = 0xAC7 + SYS___REMQUOD128 = 0xC10 + SYS___REMQUOD32 = 0xC0E + SYS___REMQUOD64 = 0xC0F + SYS___REMQUOF_H = 0xAC9 + SYS___REMQUOL_H = 0xACA + SYS___REMQUO_H = 0xAC8 + SYS___RINTF_B = 0xACC + SYS___RINTL_B = 0xACE + SYS___ROUNDF_B = 0xAD3 + SYS___ROUNDF_H = 0xAD4 + SYS___ROUNDL_B = 0xAD6 + SYS___ROUNDL_H = 0xAD7 + SYS___ROUND_B = 0xAD0 + SYS___ROUND_H = 0xAD1 + SYS___SCALBLNF_B = 0xADC + SYS___SCALBLNF_H = 0xADD + SYS___SCALBLNL_B = 0xADF + SYS___SCALBLNL_H = 0xAE0 + SYS___SCALBLN_B = 0xAD9 + SYS___SCALBLN_H = 0xADA + SYS___SCALBNF_B = 0xAE4 + SYS___SCALBNF_H = 0xAE5 + SYS___SCALBNL_B = 0xAE7 + SYS___SCALBNL_H = 0xAE8 + SYS___SCALBN_B = 0xAE1 + SYS___SCALBN_H = 0xAE2 + SYS___SETENV = 0x0C8 + SYS___SINPID128 = 0xC73 + SYS___SINPID32 = 0xC71 + SYS___SINPID64 = 0xC72 + SYS___SMF_RECORD2 = 0xD48 + SYS___STATIC_REINIT = 0xB3D + SYS___TGAMMAF_H_C99 = 0xB79 + SYS___TGAMMAL_H = 0xAE9 + SYS___TGAMMA_H_C99 = 0xB78 + SYS___TOCSNAME2 = 0xC9A + SYS_CEIL = 0x01F + SYS_CHAUDIT = 0x1E0 + SYS_EXP = 0x01A + SYS_FCHAUDIT = 0x1E1 + SYS_FREXP = 0x01D + SYS_GETGROUPSBYNAME = 0x1E2 + SYS_GETPWUID = 0x1A0 + SYS_GETUID = 0x1A1 + SYS_ISATTY = 0x1A3 + SYS_KILL = 0x1A4 + SYS_LDEXP = 0x01E + SYS_LINK = 0x1A5 + SYS_LOG10 = 0x01C + SYS_LSEEK = 0x1A6 + SYS_LSTAT = 0x1A7 + SYS_MKDIR = 0x1A8 + SYS_MKFIFO = 0x1A9 + SYS_MKNOD = 0x1AA + SYS_MODF = 0x01B + SYS_MOUNT = 0x1AB + SYS_OPEN = 0x1AC + SYS_OPENDIR = 0x1AD + SYS_PATHCONF = 0x1AE + SYS_PAUSE = 0x1AF + SYS_PIPE = 0x1B0 + SYS_PTHREAD_ATTR_DESTROY = 0x1E7 + SYS_PTHREAD_ATTR_GETDETACHSTATE = 0x1EB + SYS_PTHREAD_ATTR_GETSTACKSIZE = 0x1E9 + SYS_PTHREAD_ATTR_GETWEIGHT_NP = 0x1ED + SYS_PTHREAD_ATTR_INIT = 0x1E6 + SYS_PTHREAD_ATTR_SETDETACHSTATE = 0x1EA + SYS_PTHREAD_ATTR_SETSTACKSIZE = 0x1E8 + SYS_PTHREAD_ATTR_SETWEIGHT_NP = 0x1EC + SYS_PTHREAD_CANCEL = 0x1EE + SYS_PTHREAD_CLEANUP_POP = 0x1F0 + SYS_PTHREAD_CLEANUP_PUSH = 0x1EF + SYS_PTHREAD_CONDATTR_DESTROY = 0x1F2 + SYS_PTHREAD_CONDATTR_INIT = 0x1F1 + SYS_PTHREAD_COND_BROADCAST = 0x1F6 + SYS_PTHREAD_COND_DESTROY = 0x1F4 + SYS_PTHREAD_COND_INIT = 0x1F3 + SYS_PTHREAD_COND_SIGNAL = 0x1F5 + SYS_PTHREAD_COND_TIMEDWAIT = 0x1F8 + SYS_PTHREAD_COND_WAIT = 0x1F7 + SYS_PTHREAD_CREATE = 0x1F9 + SYS_PTHREAD_DETACH = 0x1FA + SYS_PTHREAD_EQUAL = 0x1FB + SYS_PTHREAD_EXIT = 0x1E4 + SYS_PTHREAD_GETSPECIFIC = 0x1FC + SYS_PTHREAD_JOIN = 0x1FD + SYS_PTHREAD_KEY_CREATE = 0x1FE + SYS_PTHREAD_KILL = 0x1E5 + SYS_PTHREAD_MUTEXATTR_INIT = 0x1FF + SYS_READ = 0x1B2 + SYS_READDIR = 0x1B3 + SYS_READLINK = 0x1B4 + SYS_REWINDDIR = 0x1B5 + SYS_RMDIR = 0x1B6 + SYS_SETEGID = 0x1B7 + SYS_SETEUID = 0x1B8 + SYS_SETGID = 0x1B9 + SYS_SETPGID = 0x1BA + SYS_SETSID = 0x1BB + SYS_SETUID = 0x1BC + SYS_SIGACTION = 0x1BD + SYS_SIGADDSET = 0x1BE + SYS_SIGDELSET = 0x1BF + SYS_SIGEMPTYSET = 0x1C0 + SYS_SIGFILLSET = 0x1C1 + SYS_SIGISMEMBER = 0x1C2 + SYS_SIGLONGJMP = 0x1C3 + SYS_SIGPENDING = 0x1C4 + SYS_SIGPROCMASK = 0x1C5 + SYS_SIGSETJMP = 0x1C6 + SYS_SIGSUSPEND = 0x1C7 + SYS_SIGWAIT = 0x1E3 + SYS_SLEEP = 0x1C8 + SYS_STAT = 0x1C9 + SYS_SYMLINK = 0x1CB + SYS_SYSCONF = 0x1CC + SYS_TCDRAIN = 0x1CD + SYS_TCFLOW = 0x1CE + SYS_TCFLUSH = 0x1CF + SYS_TCGETATTR = 0x1D0 + SYS_TCGETPGRP = 0x1D1 + SYS_TCSENDBREAK = 0x1D2 + SYS_TCSETATTR = 0x1D3 + SYS_TCSETPGRP = 0x1D4 + SYS_TIMES = 0x1D5 + SYS_TTYNAME = 0x1D6 + SYS_TZSET = 0x1D7 + SYS_UMASK = 0x1D8 + SYS_UMOUNT = 0x1D9 + SYS_UNAME = 0x1DA + SYS_UNLINK = 0x1DB + SYS_UTIME = 0x1DC + SYS_WAIT = 0x1DD + SYS_WAITPID = 0x1DE + SYS_WRITE = 0x1DF + SYS_W_GETPSENT = 0x1B1 + SYS_W_IOCTL = 0x1A2 + SYS_W_STATFS = 0x1CA + SYS_A64L = 0x2EF + SYS_BCMP = 0x2B9 + SYS_BCOPY = 0x2BA + SYS_BZERO = 0x2BB + SYS_CATCLOSE = 0x2B6 + SYS_CATGETS = 0x2B7 + SYS_CATOPEN = 0x2B8 + SYS_CRYPT = 0x2AC + SYS_DBM_CLEARERR = 0x2F7 + SYS_DBM_CLOSE = 0x2F8 + SYS_DBM_DELETE = 0x2F9 + SYS_DBM_ERROR = 0x2FA + SYS_DBM_FETCH = 0x2FB + SYS_DBM_FIRSTKEY = 0x2FC + SYS_DBM_NEXTKEY = 0x2FD + SYS_DBM_OPEN = 0x2FE + SYS_DBM_STORE = 0x2FF + SYS_DRAND48 = 0x2B2 + SYS_ENCRYPT = 0x2AD + SYS_ENDUTXENT = 0x2E1 + SYS_ERAND48 = 0x2B3 + SYS_ERF = 0x02C + SYS_ERFC = 0x02D + SYS_FCHDIR = 0x2D9 + SYS_FFS = 0x2BC + SYS_FMTMSG = 0x2E5 + SYS_FSTATVFS = 0x2B4 + SYS_FTIME = 0x2F5 + SYS_GAMMA = 0x02E + SYS_GETDATE = 0x2A6 + SYS_GETPAGESIZE = 0x2D8 + SYS_GETTIMEOFDAY = 0x2F6 + SYS_GETUTXENT = 0x2E0 + SYS_GETUTXID = 0x2E2 + SYS_GETUTXLINE = 0x2E3 + SYS_HCREATE = 0x2C6 + SYS_HDESTROY = 0x2C7 + SYS_HSEARCH = 0x2C8 + SYS_HYPOT = 0x02B + SYS_INDEX = 0x2BD + SYS_INITSTATE = 0x2C2 + SYS_INSQUE = 0x2CF + SYS_ISASCII = 0x2ED + SYS_JRAND48 = 0x2E6 + SYS_L64A = 0x2F0 + SYS_LCONG48 = 0x2EA + SYS_LFIND = 0x2C9 + SYS_LRAND48 = 0x2E7 + SYS_LSEARCH = 0x2CA + SYS_MEMCCPY = 0x2D4 + SYS_MRAND48 = 0x2E8 + SYS_NRAND48 = 0x2E9 + SYS_PCLOSE = 0x2D2 + SYS_POPEN = 0x2D1 + SYS_PUTUTXLINE = 0x2E4 + SYS_RANDOM = 0x2C4 + SYS_REMQUE = 0x2D0 + SYS_RINDEX = 0x2BE + SYS_SEED48 = 0x2EC + SYS_SETKEY = 0x2AE + SYS_SETSTATE = 0x2C3 + SYS_SETUTXENT = 0x2DF + SYS_SRAND48 = 0x2EB + SYS_SRANDOM = 0x2C5 + SYS_STATVFS = 0x2B5 + SYS_STRCASECMP = 0x2BF + SYS_STRDUP = 0x2C0 + SYS_STRNCASECMP = 0x2C1 + SYS_SWAB = 0x2D3 + SYS_TDELETE = 0x2CB + SYS_TFIND = 0x2CC + SYS_TOASCII = 0x2EE + SYS_TSEARCH = 0x2CD + SYS_TWALK = 0x2CE + SYS_UALARM = 0x2F1 + SYS_USLEEP = 0x2F2 + SYS_WAIT3 = 0x2A7 + SYS_WAITID = 0x2A8 + SYS_Y1 = 0x02A + SYS___ATOE = 0x2DB + SYS___ATOE_L = 0x2DC + SYS___CATTRM = 0x2A9 + SYS___CNVBLK = 0x2AF + SYS___CRYTRM = 0x2B0 + SYS___DLGHT = 0x2A1 + SYS___ECRTRM = 0x2B1 + SYS___ETOA = 0x2DD + SYS___ETOA_L = 0x2DE + SYS___GDTRM = 0x2AA + SYS___OCLCK = 0x2DA + SYS___OPARGF = 0x2A2 + SYS___OPERRF = 0x2A5 + SYS___OPINDF = 0x2A4 + SYS___OPOPTF = 0x2A3 + SYS___RNDTRM = 0x2AB + SYS___SRCTRM = 0x2F4 + SYS___TZONE = 0x2A0 + SYS___UTXTRM = 0x2F3 + SYS_ASIN = 0x03E + SYS_ISXDIGIT = 0x03B + SYS_SETLOCAL = 0x03A + SYS_SETLOCALE = 0x03A + SYS_SIN = 0x03F + SYS_TOLOWER = 0x03C + SYS_TOUPPER = 0x03D + SYS_ACCEPT_AND_RECV = 0x4F7 + SYS_ATOL = 0x04E + SYS_CHECKSCH = 0x4BC + SYS_CHECKSCHENV = 0x4BC + SYS_CLEARERR = 0x04C + SYS_CONNECTS = 0x4B5 + SYS_CONNECTSERVER = 0x4B5 + SYS_CONNECTW = 0x4B4 + SYS_CONNECTWORKMGR = 0x4B4 + SYS_CONTINUE = 0x4B3 + SYS_CONTINUEWORKUNIT = 0x4B3 + SYS_COPYSIGN = 0x4C2 + SYS_CREATEWO = 0x4B2 + SYS_CREATEWORKUNIT = 0x4B2 + SYS_DELETEWO = 0x4B9 + SYS_DELETEWORKUNIT = 0x4B9 + SYS_DISCONNE = 0x4B6 + SYS_DISCONNECTSERVER = 0x4B6 + SYS_FEOF = 0x04D + SYS_FERROR = 0x04A + SYS_FINITE = 0x4C8 + SYS_GAMMA_R = 0x4E2 + SYS_JOINWORK = 0x4B7 + SYS_JOINWORKUNIT = 0x4B7 + SYS_LEAVEWOR = 0x4B8 + SYS_LEAVEWORKUNIT = 0x4B8 + SYS_LGAMMA_R = 0x4EB + SYS_MATHERR = 0x4D0 + SYS_PERROR = 0x04F + SYS_QUERYMET = 0x4BA + SYS_QUERYMETRICS = 0x4BA + SYS_QUERYSCH = 0x4BB + SYS_QUERYSCHENV = 0x4BB + SYS_REWIND = 0x04B + SYS_SCALBN = 0x4D4 + SYS_SIGNIFIC = 0x4D5 + SYS_SIGNIFICAND = 0x4D5 + SYS___ACOSH_B = 0x4DA + SYS___ACOS_B = 0x4D9 + SYS___ASINH_B = 0x4BE + SYS___ASIN_B = 0x4DB + SYS___ATAN2_B = 0x4DC + SYS___ATANH_B = 0x4DD + SYS___ATAN_B = 0x4BF + SYS___CBRT_B = 0x4C0 + SYS___CEIL_B = 0x4C1 + SYS___COSH_B = 0x4DE + SYS___COS_B = 0x4C3 + SYS___DGHT = 0x4A8 + SYS___ENVN = 0x4B0 + SYS___ERFC_B = 0x4C5 + SYS___ERF_B = 0x4C4 + SYS___EXPM1_B = 0x4C6 + SYS___EXP_B = 0x4DF + SYS___FABS_B = 0x4C7 + SYS___FLOOR_B = 0x4C9 + SYS___FMOD_B = 0x4E0 + SYS___FP_SETMODE = 0x4F8 + SYS___FREXP_B = 0x4CA + SYS___GAMMA_B = 0x4E1 + SYS___GDRR = 0x4A1 + SYS___HRRNO = 0x4A2 + SYS___HYPOT_B = 0x4E3 + SYS___ILOGB_B = 0x4CB + SYS___ISNAN_B = 0x4CC + SYS___J0_B = 0x4E4 + SYS___J1_B = 0x4E6 + SYS___JN_B = 0x4E8 + SYS___LDEXP_B = 0x4CD + SYS___LGAMMA_B = 0x4EA + SYS___LOG10_B = 0x4ED + SYS___LOG1P_B = 0x4CE + SYS___LOGB_B = 0x4CF + SYS___LOGIN = 0x4F5 + SYS___LOG_B = 0x4EC + SYS___MLOCKALL = 0x4B1 + SYS___MODF_B = 0x4D1 + SYS___NEXTAFTER_B = 0x4D2 + SYS___OPENDIR2 = 0x4F3 + SYS___OPEN_STAT = 0x4F6 + SYS___OPND = 0x4A5 + SYS___OPPT = 0x4A6 + SYS___OPRG = 0x4A3 + SYS___OPRR = 0x4A4 + SYS___PID_AFFINITY = 0x4BD + SYS___POW_B = 0x4EE + SYS___READDIR2 = 0x4F4 + SYS___REMAINDER_B = 0x4EF + SYS___RINT_B = 0x4D3 + SYS___SCALB_B = 0x4F0 + SYS___SIGACTIONSET = 0x4FB + SYS___SIGGM = 0x4A7 + SYS___SINH_B = 0x4F1 + SYS___SIN_B = 0x4D6 + SYS___SQRT_B = 0x4F2 + SYS___TANH_B = 0x4D8 + SYS___TAN_B = 0x4D7 + SYS___TRRNO = 0x4AF + SYS___TZNE = 0x4A9 + SYS___TZZN = 0x4AA + SYS___UCREATE = 0x4FC + SYS___UFREE = 0x4FE + SYS___UHEAPREPORT = 0x4FF + SYS___UMALLOC = 0x4FD + SYS___Y0_B = 0x4E5 + SYS___Y1_B = 0x4E7 + SYS___YN_B = 0x4E9 + SYS_ABORT = 0x05C + SYS_ASCTIME_R = 0x5E0 + SYS_ATEXIT = 0x05D + SYS_CONNECTE = 0x5AE + SYS_CONNECTEXPORTIMPORT = 0x5AE + SYS_CTIME_R = 0x5E1 + SYS_DN_COMP = 0x5DF + SYS_DN_EXPAND = 0x5DD + SYS_DN_SKIPNAME = 0x5DE + SYS_EXIT = 0x05A + SYS_EXPORTWO = 0x5A1 + SYS_EXPORTWORKUNIT = 0x5A1 + SYS_EXTRACTW = 0x5A5 + SYS_EXTRACTWORKUNIT = 0x5A5 + SYS_FSEEKO = 0x5C9 + SYS_FTELLO = 0x5C8 + SYS_GETGRGID_R = 0x5E7 + SYS_GETGRNAM_R = 0x5E8 + SYS_GETLOGIN_R = 0x5E9 + SYS_GETPWNAM_R = 0x5EA + SYS_GETPWUID_R = 0x5EB + SYS_GMTIME_R = 0x5E2 + SYS_IMPORTWO = 0x5A3 + SYS_IMPORTWORKUNIT = 0x5A3 + SYS_INET_NTOP = 0x5D3 + SYS_INET_PTON = 0x5D4 + SYS_LLABS = 0x5CE + SYS_LLDIV = 0x5CB + SYS_LOCALTIME_R = 0x5E3 + SYS_PTHREAD_ATFORK = 0x5ED + SYS_PTHREAD_ATTR_GETDETACHSTATE_U98 = 0x5FB + SYS_PTHREAD_ATTR_GETGUARDSIZE = 0x5EE + SYS_PTHREAD_ATTR_GETSCHEDPARAM = 0x5F9 + SYS_PTHREAD_ATTR_GETSTACKADDR = 0x5EF + SYS_PTHREAD_ATTR_SETDETACHSTATE_U98 = 0x5FC + SYS_PTHREAD_ATTR_SETGUARDSIZE = 0x5F0 + SYS_PTHREAD_ATTR_SETSCHEDPARAM = 0x5FA + SYS_PTHREAD_ATTR_SETSTACKADDR = 0x5F1 + SYS_PTHREAD_CONDATTR_GETPSHARED = 0x5F2 + SYS_PTHREAD_CONDATTR_SETPSHARED = 0x5F3 + SYS_PTHREAD_DETACH_U98 = 0x5FD + SYS_PTHREAD_GETCONCURRENCY = 0x5F4 + SYS_PTHREAD_GETSPECIFIC_U98 = 0x5FE + SYS_PTHREAD_KEY_DELETE = 0x5F5 + SYS_PTHREAD_SETCANCELSTATE = 0x5FF + SYS_PTHREAD_SETCONCURRENCY = 0x5F6 + SYS_PTHREAD_SIGMASK = 0x5F7 + SYS_QUERYENC = 0x5AD + SYS_QUERYWORKUNITCLASSIFICATION = 0x5AD + SYS_RAISE = 0x05E + SYS_RAND_R = 0x5E4 + SYS_READDIR_R = 0x5E6 + SYS_REALLOC = 0x05B + SYS_RES_INIT = 0x5D8 + SYS_RES_MKQUERY = 0x5D7 + SYS_RES_QUERY = 0x5D9 + SYS_RES_QUERYDOMAIN = 0x5DC + SYS_RES_SEARCH = 0x5DA + SYS_RES_SEND = 0x5DB + SYS_SETJMP = 0x05F + SYS_SIGQUEUE = 0x5A9 + SYS_STRTOK_R = 0x5E5 + SYS_STRTOLL = 0x5B0 + SYS_STRTOULL = 0x5B1 + SYS_TTYNAME_R = 0x5EC + SYS_UNDOEXPO = 0x5A2 + SYS_UNDOEXPORTWORKUNIT = 0x5A2 + SYS_UNDOIMPO = 0x5A4 + SYS_UNDOIMPORTWORKUNIT = 0x5A4 + SYS_WCSTOLL = 0x5CC + SYS_WCSTOULL = 0x5CD + SYS___ABORT = 0x05C + SYS___CONSOLE2 = 0x5D2 + SYS___CPL = 0x5A6 + SYS___DISCARDDATA = 0x5F8 + SYS___DSA_PREV = 0x5B2 + SYS___EP_FIND = 0x5B3 + SYS___FP_SWAPMODE = 0x5AF + SYS___GETUSERID = 0x5AB + SYS___GET_CPUID = 0x5B9 + SYS___GET_SYSTEM_SETTINGS = 0x5BA + SYS___IPDOMAINNAME = 0x5AC + SYS___MAP_INIT = 0x5A7 + SYS___MAP_SERVICE = 0x5A8 + SYS___MOUNT = 0x5AA + SYS___MSGRCV_TIMED = 0x5B7 + SYS___RES = 0x5D6 + SYS___SEMOP_TIMED = 0x5B8 + SYS___SERVER_THREADS_QUERY = 0x5B4 + SYS_FPRINTF = 0x06D + SYS_FSCANF = 0x06A + SYS_PRINTF = 0x06F + SYS_SETBUF = 0x06B + SYS_SETVBUF = 0x06C + SYS_SSCANF = 0x06E + SYS___CATGETS_A = 0x6C0 + SYS___CHAUDIT_A = 0x6F4 + SYS___CHMOD_A = 0x6E8 + SYS___COLLATE_INIT_A = 0x6AC + SYS___CREAT_A = 0x6F6 + SYS___CTYPE_INIT_A = 0x6AF + SYS___DLLLOAD_A = 0x6DF + SYS___DLLQUERYFN_A = 0x6E0 + SYS___DLLQUERYVAR_A = 0x6E1 + SYS___E2A_L = 0x6E3 + SYS___EXECLE_A = 0x6A0 + SYS___EXECLP_A = 0x6A4 + SYS___EXECVE_A = 0x6C1 + SYS___EXECVP_A = 0x6C2 + SYS___EXECV_A = 0x6B1 + SYS___FPRINTF_A = 0x6FA + SYS___GETADDRINFO_A = 0x6BF + SYS___GETNAMEINFO_A = 0x6C4 + SYS___GET_WCTYPE_STD_A = 0x6AE + SYS___ICONV_OPEN_A = 0x6DE + SYS___IF_INDEXTONAME_A = 0x6DC + SYS___IF_NAMETOINDEX_A = 0x6DB + SYS___ISWCTYPE_A = 0x6B0 + SYS___IS_WCTYPE_STD_A = 0x6B2 + SYS___LOCALECONV_A = 0x6B8 + SYS___LOCALECONV_STD_A = 0x6B9 + SYS___LOCALE_INIT_A = 0x6B7 + SYS___LSTAT_A = 0x6EE + SYS___LSTAT_O_A = 0x6EF + SYS___MKDIR_A = 0x6E9 + SYS___MKFIFO_A = 0x6EC + SYS___MKNOD_A = 0x6F0 + SYS___MONETARY_INIT_A = 0x6BC + SYS___MOUNT_A = 0x6F1 + SYS___NL_CSINFO_A = 0x6D6 + SYS___NL_LANGINFO_A = 0x6BA + SYS___NL_LNAGINFO_STD_A = 0x6BB + SYS___NL_MONINFO_A = 0x6D7 + SYS___NL_NUMINFO_A = 0x6D8 + SYS___NL_RESPINFO_A = 0x6D9 + SYS___NL_TIMINFO_A = 0x6DA + SYS___NUMERIC_INIT_A = 0x6C6 + SYS___OPEN_A = 0x6F7 + SYS___PRINTF_A = 0x6DD + SYS___RESP_INIT_A = 0x6C7 + SYS___RPMATCH_A = 0x6C8 + SYS___RPMATCH_C_A = 0x6C9 + SYS___RPMATCH_STD_A = 0x6CA + SYS___SETLOCALE_A = 0x6F9 + SYS___SPAWNP_A = 0x6C5 + SYS___SPAWN_A = 0x6C3 + SYS___SPRINTF_A = 0x6FB + SYS___STAT_A = 0x6EA + SYS___STAT_O_A = 0x6EB + SYS___STRCOLL_STD_A = 0x6A1 + SYS___STRFMON_A = 0x6BD + SYS___STRFMON_STD_A = 0x6BE + SYS___STRFTIME_A = 0x6CC + SYS___STRFTIME_STD_A = 0x6CD + SYS___STRPTIME_A = 0x6CE + SYS___STRPTIME_STD_A = 0x6CF + SYS___STRXFRM_A = 0x6A2 + SYS___STRXFRM_C_A = 0x6A3 + SYS___STRXFRM_STD_A = 0x6A5 + SYS___SYNTAX_INIT_A = 0x6D4 + SYS___TIME_INIT_A = 0x6CB + SYS___TOD_INIT_A = 0x6D5 + SYS___TOWLOWER_A = 0x6B3 + SYS___TOWLOWER_STD_A = 0x6B4 + SYS___TOWUPPER_A = 0x6B5 + SYS___TOWUPPER_STD_A = 0x6B6 + SYS___UMOUNT_A = 0x6F2 + SYS___VFPRINTF_A = 0x6FC + SYS___VPRINTF_A = 0x6FD + SYS___VSPRINTF_A = 0x6FE + SYS___VSWPRINTF_A = 0x6FF + SYS___WCSCOLL_A = 0x6A6 + SYS___WCSCOLL_C_A = 0x6A7 + SYS___WCSCOLL_STD_A = 0x6A8 + SYS___WCSFTIME_A = 0x6D0 + SYS___WCSFTIME_STD_A = 0x6D1 + SYS___WCSXFRM_A = 0x6A9 + SYS___WCSXFRM_C_A = 0x6AA + SYS___WCSXFRM_STD_A = 0x6AB + SYS___WCTYPE_A = 0x6AD + SYS___W_GETMNTENT_A = 0x6F5 + SYS_____CCSIDTYPE_A = 0x6E6 + SYS_____CHATTR_A = 0x6E2 + SYS_____CSNAMETYPE_A = 0x6E7 + SYS_____OPEN_STAT_A = 0x6ED + SYS_____SPAWN2_A = 0x6D2 + SYS_____SPAWNP2_A = 0x6D3 + SYS_____TOCCSID_A = 0x6E4 + SYS_____TOCSNAME_A = 0x6E5 + SYS_ACL_FREE = 0x7FF + SYS_ACL_INIT = 0x7FE + SYS_FWIDE = 0x7DF + SYS_FWPRINTF = 0x7D1 + SYS_FWRITE = 0x07E + SYS_FWSCANF = 0x7D5 + SYS_GETCHAR = 0x07B + SYS_GETS = 0x07C + SYS_M_CREATE_LAYOUT = 0x7C9 + SYS_M_DESTROY_LAYOUT = 0x7CA + SYS_M_GETVALUES_LAYOUT = 0x7CB + SYS_M_SETVALUES_LAYOUT = 0x7CC + SYS_M_TRANSFORM_LAYOUT = 0x7CD + SYS_M_WTRANSFORM_LAYOUT = 0x7CE + SYS_PREAD = 0x7C7 + SYS_PUTC = 0x07D + SYS_PUTCHAR = 0x07A + SYS_PUTS = 0x07F + SYS_PWRITE = 0x7C8 + SYS_TOWCTRAN = 0x7D8 + SYS_TOWCTRANS = 0x7D8 + SYS_UNATEXIT = 0x7B5 + SYS_VFWPRINT = 0x7D3 + SYS_VFWPRINTF = 0x7D3 + SYS_VWPRINTF = 0x7D4 + SYS_WCTRANS = 0x7D7 + SYS_WPRINTF = 0x7D2 + SYS_WSCANF = 0x7D6 + SYS___ASCTIME_R_A = 0x7A1 + SYS___BASENAME_A = 0x7DC + SYS___BTOWC_A = 0x7E4 + SYS___CDUMP_A = 0x7B7 + SYS___CEE3DMP_A = 0x7B6 + SYS___CEILF_H = 0x7F4 + SYS___CEILL_H = 0x7F5 + SYS___CEIL_H = 0x7EA + SYS___CRYPT_A = 0x7BE + SYS___CSNAP_A = 0x7B8 + SYS___CTEST_A = 0x7B9 + SYS___CTIME_R_A = 0x7A2 + SYS___CTRACE_A = 0x7BA + SYS___DBM_OPEN_A = 0x7E6 + SYS___DIRNAME_A = 0x7DD + SYS___FABSF_H = 0x7FA + SYS___FABSL_H = 0x7FB + SYS___FABS_H = 0x7ED + SYS___FGETWC_A = 0x7AA + SYS___FGETWS_A = 0x7AD + SYS___FLOORF_H = 0x7F6 + SYS___FLOORL_H = 0x7F7 + SYS___FLOOR_H = 0x7EB + SYS___FPUTWC_A = 0x7A5 + SYS___FPUTWS_A = 0x7A8 + SYS___GETTIMEOFDAY_A = 0x7AE + SYS___GETWCHAR_A = 0x7AC + SYS___GETWC_A = 0x7AB + SYS___GLOB_A = 0x7DE + SYS___GMTIME_A = 0x7AF + SYS___GMTIME_R_A = 0x7B0 + SYS___INET_PTON_A = 0x7BC + SYS___J0_H = 0x7EE + SYS___J1_H = 0x7EF + SYS___JN_H = 0x7F0 + SYS___LOCALTIME_A = 0x7B1 + SYS___LOCALTIME_R_A = 0x7B2 + SYS___MALLOC24 = 0x7FC + SYS___MALLOC31 = 0x7FD + SYS___MKTIME_A = 0x7B3 + SYS___MODFF_H = 0x7F8 + SYS___MODFL_H = 0x7F9 + SYS___MODF_H = 0x7EC + SYS___OPENDIR_A = 0x7C2 + SYS___OSNAME = 0x7E0 + SYS___PUTWCHAR_A = 0x7A7 + SYS___PUTWC_A = 0x7A6 + SYS___READDIR_A = 0x7C3 + SYS___STRTOLL_A = 0x7A3 + SYS___STRTOULL_A = 0x7A4 + SYS___SYSLOG_A = 0x7BD + SYS___TZZNA = 0x7B4 + SYS___UNGETWC_A = 0x7A9 + SYS___UTIME_A = 0x7A0 + SYS___VFPRINTF2_A = 0x7E7 + SYS___VPRINTF2_A = 0x7E8 + SYS___VSPRINTF2_A = 0x7E9 + SYS___VSWPRNTF2_A = 0x7BB + SYS___WCSTOD_A = 0x7D9 + SYS___WCSTOL_A = 0x7DA + SYS___WCSTOUL_A = 0x7DB + SYS___WCTOB_A = 0x7E5 + SYS___Y0_H = 0x7F1 + SYS___Y1_H = 0x7F2 + SYS___YN_H = 0x7F3 + SYS_____OPENDIR2_A = 0x7BF + SYS_____OSNAME_A = 0x7E1 + SYS_____READDIR2_A = 0x7C0 + SYS_DLCLOSE = 0x8DF + SYS_DLERROR = 0x8E0 + SYS_DLOPEN = 0x8DD + SYS_DLSYM = 0x8DE + SYS_FLOCKFILE = 0x8D3 + SYS_FTRYLOCKFILE = 0x8D4 + SYS_FUNLOCKFILE = 0x8D5 + SYS_GETCHAR_UNLOCKED = 0x8D7 + SYS_GETC_UNLOCKED = 0x8D6 + SYS_PUTCHAR_UNLOCKED = 0x8D9 + SYS_PUTC_UNLOCKED = 0x8D8 + SYS_SNPRINTF = 0x8DA + SYS_VSNPRINTF = 0x8DB + SYS_WCSCSPN = 0x08B + SYS_WCSLEN = 0x08C + SYS_WCSNCAT = 0x08D + SYS_WCSNCMP = 0x08A + SYS_WCSNCPY = 0x08F + SYS_WCSSPN = 0x08E + SYS___ABSF_H = 0x8E7 + SYS___ABSL_H = 0x8E8 + SYS___ABS_H = 0x8E6 + SYS___ACOSF_H = 0x8EA + SYS___ACOSH_H = 0x8EC + SYS___ACOSL_H = 0x8EB + SYS___ACOS_H = 0x8E9 + SYS___ASINF_H = 0x8EE + SYS___ASINH_H = 0x8F0 + SYS___ASINL_H = 0x8EF + SYS___ASIN_H = 0x8ED + SYS___ATAN2F_H = 0x8F8 + SYS___ATAN2L_H = 0x8F9 + SYS___ATAN2_H = 0x8F7 + SYS___ATANF_H = 0x8F2 + SYS___ATANHF_H = 0x8F5 + SYS___ATANHL_H = 0x8F6 + SYS___ATANH_H = 0x8F4 + SYS___ATANL_H = 0x8F3 + SYS___ATAN_H = 0x8F1 + SYS___CBRT_H = 0x8FA + SYS___COPYSIGNF_H = 0x8FB + SYS___COPYSIGNL_H = 0x8FC + SYS___COSF_H = 0x8FE + SYS___COSL_H = 0x8FF + SYS___COS_H = 0x8FD + SYS___DLERROR_A = 0x8D2 + SYS___DLOPEN_A = 0x8D0 + SYS___DLSYM_A = 0x8D1 + SYS___GETUTXENT_A = 0x8C6 + SYS___GETUTXID_A = 0x8C7 + SYS___GETUTXLINE_A = 0x8C8 + SYS___ITOA = 0x8AA + SYS___ITOA_A = 0x8B0 + SYS___LE_CONDITION_TOKEN_BUILD = 0x8A5 + SYS___LE_MSG_ADD_INSERT = 0x8A6 + SYS___LE_MSG_GET = 0x8A7 + SYS___LE_MSG_GET_AND_WRITE = 0x8A8 + SYS___LE_MSG_WRITE = 0x8A9 + SYS___LLTOA = 0x8AE + SYS___LLTOA_A = 0x8B4 + SYS___LTOA = 0x8AC + SYS___LTOA_A = 0x8B2 + SYS___PUTCHAR_UNLOCKED_A = 0x8CC + SYS___PUTC_UNLOCKED_A = 0x8CB + SYS___PUTUTXLINE_A = 0x8C9 + SYS___RESET_EXCEPTION_HANDLER = 0x8E3 + SYS___REXEC_A = 0x8C4 + SYS___REXEC_AF_A = 0x8C5 + SYS___SET_EXCEPTION_HANDLER = 0x8E2 + SYS___SNPRINTF_A = 0x8CD + SYS___SUPERKILL = 0x8A4 + SYS___TCGETATTR_A = 0x8A1 + SYS___TCSETATTR_A = 0x8A2 + SYS___ULLTOA = 0x8AF + SYS___ULLTOA_A = 0x8B5 + SYS___ULTOA = 0x8AD + SYS___ULTOA_A = 0x8B3 + SYS___UTOA = 0x8AB + SYS___UTOA_A = 0x8B1 + SYS___VHM_EVENT = 0x8E4 + SYS___VSNPRINTF_A = 0x8CE + SYS_____GETENV_A = 0x8C3 + SYS_____UTMPXNAME_A = 0x8CA + SYS_CACOSH = 0x9A0 + SYS_CACOSHF = 0x9A3 + SYS_CACOSHL = 0x9A6 + SYS_CARG = 0x9A9 + SYS_CARGF = 0x9AC + SYS_CARGL = 0x9AF + SYS_CASIN = 0x9B2 + SYS_CASINF = 0x9B5 + SYS_CASINH = 0x9BB + SYS_CASINHF = 0x9BE + SYS_CASINHL = 0x9C1 + SYS_CASINL = 0x9B8 + SYS_CATAN = 0x9C4 + SYS_CATANF = 0x9C7 + SYS_CATANH = 0x9CD + SYS_CATANHF = 0x9D0 + SYS_CATANHL = 0x9D3 + SYS_CATANL = 0x9CA + SYS_CCOS = 0x9D6 + SYS_CCOSF = 0x9D9 + SYS_CCOSH = 0x9DF + SYS_CCOSHF = 0x9E2 + SYS_CCOSHL = 0x9E5 + SYS_CCOSL = 0x9DC + SYS_CEXP = 0x9E8 + SYS_CEXPF = 0x9EB + SYS_CEXPL = 0x9EE + SYS_CIMAG = 0x9F1 + SYS_CIMAGF = 0x9F4 + SYS_CIMAGL = 0x9F7 + SYS_CLOGF = 0x9FD + SYS_MEMCHR = 0x09B + SYS_MEMCMP = 0x09A + SYS_STRCOLL = 0x09C + SYS_STRNCMP = 0x09D + SYS_STRRCHR = 0x09F + SYS_STRXFRM = 0x09E + SYS___CACOSHF_B = 0x9A4 + SYS___CACOSHF_H = 0x9A5 + SYS___CACOSHL_B = 0x9A7 + SYS___CACOSHL_H = 0x9A8 + SYS___CACOSH_B = 0x9A1 + SYS___CACOSH_H = 0x9A2 + SYS___CARGF_B = 0x9AD + SYS___CARGF_H = 0x9AE + SYS___CARGL_B = 0x9B0 + SYS___CARGL_H = 0x9B1 + SYS___CARG_B = 0x9AA + SYS___CARG_H = 0x9AB + SYS___CASINF_B = 0x9B6 + SYS___CASINF_H = 0x9B7 + SYS___CASINHF_B = 0x9BF + SYS___CASINHF_H = 0x9C0 + SYS___CASINHL_B = 0x9C2 + SYS___CASINHL_H = 0x9C3 + SYS___CASINH_B = 0x9BC + SYS___CASINH_H = 0x9BD + SYS___CASINL_B = 0x9B9 + SYS___CASINL_H = 0x9BA + SYS___CASIN_B = 0x9B3 + SYS___CASIN_H = 0x9B4 + SYS___CATANF_B = 0x9C8 + SYS___CATANF_H = 0x9C9 + SYS___CATANHF_B = 0x9D1 + SYS___CATANHF_H = 0x9D2 + SYS___CATANHL_B = 0x9D4 + SYS___CATANHL_H = 0x9D5 + SYS___CATANH_B = 0x9CE + SYS___CATANH_H = 0x9CF + SYS___CATANL_B = 0x9CB + SYS___CATANL_H = 0x9CC + SYS___CATAN_B = 0x9C5 + SYS___CATAN_H = 0x9C6 + SYS___CCOSF_B = 0x9DA + SYS___CCOSF_H = 0x9DB + SYS___CCOSHF_B = 0x9E3 + SYS___CCOSHF_H = 0x9E4 + SYS___CCOSHL_B = 0x9E6 + SYS___CCOSHL_H = 0x9E7 + SYS___CCOSH_B = 0x9E0 + SYS___CCOSH_H = 0x9E1 + SYS___CCOSL_B = 0x9DD + SYS___CCOSL_H = 0x9DE + SYS___CCOS_B = 0x9D7 + SYS___CCOS_H = 0x9D8 + SYS___CEXPF_B = 0x9EC + SYS___CEXPF_H = 0x9ED + SYS___CEXPL_B = 0x9EF + SYS___CEXPL_H = 0x9F0 + SYS___CEXP_B = 0x9E9 + SYS___CEXP_H = 0x9EA + SYS___CIMAGF_B = 0x9F5 + SYS___CIMAGF_H = 0x9F6 + SYS___CIMAGL_B = 0x9F8 + SYS___CIMAGL_H = 0x9F9 + SYS___CIMAG_B = 0x9F2 + SYS___CIMAG_H = 0x9F3 + SYS___CLOG = 0x9FA + SYS___CLOGF_B = 0x9FE + SYS___CLOGF_H = 0x9FF + SYS___CLOG_B = 0x9FB + SYS___CLOG_H = 0x9FC + SYS_ISWCTYPE = 0x10C + SYS_ISWXDIGI = 0x10A + SYS_ISWXDIGIT = 0x10A + SYS_MBSINIT = 0x10F + SYS_TOWLOWER = 0x10D + SYS_TOWUPPER = 0x10E + SYS_WCTYPE = 0x10B + SYS_WCSSTR = 0x11B + SYS___RPMTCH = 0x11A + SYS_WCSTOD = 0x12E + SYS_WCSTOK = 0x12C + SYS_WCSTOL = 0x12D + SYS_WCSTOUL = 0x12F + SYS_FGETWC = 0x13C + SYS_FGETWS = 0x13D + SYS_FPUTWC = 0x13E + SYS_FPUTWS = 0x13F + SYS_REGERROR = 0x13B + SYS_REGFREE = 0x13A + SYS_COLLEQUIV = 0x14F + SYS_COLLTOSTR = 0x14E + SYS_ISMCCOLLEL = 0x14C + SYS_STRTOCOLL = 0x14D + SYS_DLLFREE = 0x16F + SYS_DLLQUERYFN = 0x16D + SYS_DLLQUERYVAR = 0x16E + SYS_GETMCCOLL = 0x16A + SYS_GETWMCCOLL = 0x16B + SYS___ERR2AD = 0x16C + SYS_CFSETOSPEED = 0x17A + SYS_CHDIR = 0x17B + SYS_CHMOD = 0x17C + SYS_CHOWN = 0x17D + SYS_CLOSE = 0x17E + SYS_CLOSEDIR = 0x17F + SYS_LOG = 0x017 + SYS_COSH = 0x018 + SYS_FCHMOD = 0x18A + SYS_FCHOWN = 0x18B + SYS_FCNTL = 0x18C + SYS_FILENO = 0x18D + SYS_FORK = 0x18E + SYS_FPATHCONF = 0x18F + SYS_GETLOGIN = 0x19A + SYS_GETPGRP = 0x19C + SYS_GETPID = 0x19D + SYS_GETPPID = 0x19E + SYS_GETPWNAM = 0x19F + SYS_TANH = 0x019 + SYS_W_GETMNTENT = 0x19B + SYS_POW = 0x020 + SYS_PTHREAD_SELF = 0x20A + SYS_PTHREAD_SETINTR = 0x20B + SYS_PTHREAD_SETINTRTYPE = 0x20C + SYS_PTHREAD_SETSPECIFIC = 0x20D + SYS_PTHREAD_TESTINTR = 0x20E + SYS_PTHREAD_YIELD = 0x20F + SYS_SQRT = 0x021 + SYS_FLOOR = 0x022 + SYS_J1 = 0x023 + SYS_WCSPBRK = 0x23F + SYS_BSEARCH = 0x24C + SYS_FABS = 0x024 + SYS_GETENV = 0x24A + SYS_LDIV = 0x24D + SYS_SYSTEM = 0x24B + SYS_FMOD = 0x025 + SYS___RETHROW = 0x25F + SYS___THROW = 0x25E + SYS_J0 = 0x026 + SYS_PUTENV = 0x26A + SYS___GETENV = 0x26F + SYS_SEMCTL = 0x27A + SYS_SEMGET = 0x27B + SYS_SEMOP = 0x27C + SYS_SHMAT = 0x27D + SYS_SHMCTL = 0x27E + SYS_SHMDT = 0x27F + SYS_YN = 0x027 + SYS_JN = 0x028 + SYS_SIGALTSTACK = 0x28A + SYS_SIGHOLD = 0x28B + SYS_SIGIGNORE = 0x28C + SYS_SIGINTERRUPT = 0x28D + SYS_SIGPAUSE = 0x28E + SYS_SIGRELSE = 0x28F + SYS_GETOPT = 0x29A + SYS_GETSUBOPT = 0x29D + SYS_LCHOWN = 0x29B + SYS_SETPGRP = 0x29E + SYS_TRUNCATE = 0x29C + SYS_Y0 = 0x029 + SYS___GDERR = 0x29F + SYS_ISALPHA = 0x030 + SYS_VFORK = 0x30F + SYS__LONGJMP = 0x30D + SYS__SETJMP = 0x30E + SYS_GLOB = 0x31A + SYS_GLOBFREE = 0x31B + SYS_ISALNUM = 0x031 + SYS_PUTW = 0x31C + SYS_SEEKDIR = 0x31D + SYS_TELLDIR = 0x31E + SYS_TEMPNAM = 0x31F + SYS_GETTIMEOFDAY_R = 0x32E + SYS_ISLOWER = 0x032 + SYS_LGAMMA = 0x32C + SYS_REMAINDER = 0x32A + SYS_SCALB = 0x32B + SYS_SYNC = 0x32F + SYS_TTYSLOT = 0x32D + SYS_ENDPROTOENT = 0x33A + SYS_ENDSERVENT = 0x33B + SYS_GETHOSTBYADDR = 0x33D + SYS_GETHOSTBYADDR_R = 0x33C + SYS_GETHOSTBYNAME = 0x33F + SYS_GETHOSTBYNAME_R = 0x33E + SYS_ISCNTRL = 0x033 + SYS_GETSERVBYNAME = 0x34A + SYS_GETSERVBYPORT = 0x34B + SYS_GETSERVENT = 0x34C + SYS_GETSOCKNAME = 0x34D + SYS_GETSOCKOPT = 0x34E + SYS_INET_ADDR = 0x34F + SYS_ISDIGIT = 0x034 + SYS_ISGRAPH = 0x035 + SYS_SELECT = 0x35B + SYS_SELECTEX = 0x35C + SYS_SEND = 0x35D + SYS_SENDTO = 0x35F + SYS_CHROOT = 0x36A + SYS_ISNAN = 0x36D + SYS_ISUPPER = 0x036 + SYS_ULIMIT = 0x36C + SYS_UTIMES = 0x36E + SYS_W_STATVFS = 0x36B + SYS___H_ERRNO = 0x36F + SYS_GRANTPT = 0x37A + SYS_ISPRINT = 0x037 + SYS_TCGETSID = 0x37C + SYS_UNLOCKPT = 0x37B + SYS___TCGETCP = 0x37D + SYS___TCSETCP = 0x37E + SYS___TCSETTABLES = 0x37F + SYS_ISPUNCT = 0x038 + SYS_NLIST = 0x38C + SYS___IPDBCS = 0x38D + SYS___IPDSPX = 0x38E + SYS___IPMSGC = 0x38F + SYS___STHOSTENT = 0x38B + SYS___STSERVENT = 0x38A + SYS_ISSPACE = 0x039 + SYS_COS = 0x040 + SYS_T_ALLOC = 0x40A + SYS_T_BIND = 0x40B + SYS_T_CLOSE = 0x40C + SYS_T_CONNECT = 0x40D + SYS_T_ERROR = 0x40E + SYS_T_FREE = 0x40F + SYS_TAN = 0x041 + SYS_T_RCVREL = 0x41A + SYS_T_RCVUDATA = 0x41B + SYS_T_RCVUDERR = 0x41C + SYS_T_SND = 0x41D + SYS_T_SNDDIS = 0x41E + SYS_T_SNDREL = 0x41F + SYS_GETPMSG = 0x42A + SYS_ISASTREAM = 0x42B + SYS_PUTMSG = 0x42C + SYS_PUTPMSG = 0x42D + SYS_SINH = 0x042 + SYS___ISPOSIXON = 0x42E + SYS___OPENMVSREL = 0x42F + SYS_ACOS = 0x043 + SYS_ATAN = 0x044 + SYS_ATAN2 = 0x045 + SYS_FTELL = 0x046 + SYS_FGETPOS = 0x047 + SYS_SOCK_DEBUG = 0x47A + SYS_SOCK_DO_TESTSTOR = 0x47D + SYS_TAKESOCKET = 0x47E + SYS___SERVER_INIT = 0x47F + SYS_FSEEK = 0x048 + SYS___IPHOST = 0x48B + SYS___IPNODE = 0x48C + SYS___SERVER_CLASSIFY_CREATE = 0x48D + SYS___SERVER_CLASSIFY_DESTROY = 0x48E + SYS___SERVER_CLASSIFY_RESET = 0x48F + SYS___SMF_RECORD = 0x48A + SYS_FSETPOS = 0x049 + SYS___FNWSA = 0x49B + SYS___SPAWN2 = 0x49D + SYS___SPAWNP2 = 0x49E + SYS_ATOF = 0x050 + SYS_PTHREAD_MUTEXATTR_GETPSHARED = 0x50A + SYS_PTHREAD_MUTEXATTR_SETPSHARED = 0x50B + SYS_PTHREAD_RWLOCK_DESTROY = 0x50C + SYS_PTHREAD_RWLOCK_INIT = 0x50D + SYS_PTHREAD_RWLOCK_RDLOCK = 0x50E + SYS_PTHREAD_RWLOCK_TRYRDLOCK = 0x50F + SYS_ATOI = 0x051 + SYS___FP_CLASS = 0x51D + SYS___FP_CLR_FLAG = 0x51A + SYS___FP_FINITE = 0x51E + SYS___FP_ISNAN = 0x51F + SYS___FP_RAISE_XCP = 0x51C + SYS___FP_READ_FLAG = 0x51B + SYS_RAND = 0x052 + SYS_SIGTIMEDWAIT = 0x52D + SYS_SIGWAITINFO = 0x52E + SYS___CHKBFP = 0x52F + SYS___FPC_RS = 0x52C + SYS___FPC_RW = 0x52A + SYS___FPC_SM = 0x52B + SYS_STRTOD = 0x053 + SYS_STRTOL = 0x054 + SYS_STRTOUL = 0x055 + SYS_MALLOC = 0x056 + SYS_SRAND = 0x057 + SYS_CALLOC = 0x058 + SYS_FREE = 0x059 + SYS___OSENV = 0x59F + SYS___W_PIOCTL = 0x59E + SYS_LONGJMP = 0x060 + SYS___FLOORF_B = 0x60A + SYS___FLOORL_B = 0x60B + SYS___FREXPF_B = 0x60C + SYS___FREXPL_B = 0x60D + SYS___LDEXPF_B = 0x60E + SYS___LDEXPL_B = 0x60F + SYS_SIGNAL = 0x061 + SYS___ATAN2F_B = 0x61A + SYS___ATAN2L_B = 0x61B + SYS___COSHF_B = 0x61C + SYS___COSHL_B = 0x61D + SYS___EXPF_B = 0x61E + SYS___EXPL_B = 0x61F + SYS_TMPNAM = 0x062 + SYS___ABSF_B = 0x62A + SYS___ABSL_B = 0x62C + SYS___ABS_B = 0x62B + SYS___FMODF_B = 0x62D + SYS___FMODL_B = 0x62E + SYS___MODFF_B = 0x62F + SYS_ATANL = 0x63A + SYS_CEILF = 0x63B + SYS_CEILL = 0x63C + SYS_COSF = 0x63D + SYS_COSHF = 0x63F + SYS_COSL = 0x63E + SYS_REMOVE = 0x063 + SYS_POWL = 0x64A + SYS_RENAME = 0x064 + SYS_SINF = 0x64B + SYS_SINHF = 0x64F + SYS_SINL = 0x64C + SYS_SQRTF = 0x64D + SYS_SQRTL = 0x64E + SYS_BTOWC = 0x65F + SYS_FREXPL = 0x65A + SYS_LDEXPF = 0x65B + SYS_LDEXPL = 0x65C + SYS_MODFF = 0x65D + SYS_MODFL = 0x65E + SYS_TMPFILE = 0x065 + SYS_FREOPEN = 0x066 + SYS___CHARMAP_INIT_A = 0x66E + SYS___GETHOSTBYADDR_R_A = 0x66C + SYS___GETHOSTBYNAME_A = 0x66A + SYS___GETHOSTBYNAME_R_A = 0x66D + SYS___MBLEN_A = 0x66F + SYS___RES_INIT_A = 0x66B + SYS_FCLOSE = 0x067 + SYS___GETGRGID_R_A = 0x67D + SYS___WCSTOMBS_A = 0x67A + SYS___WCSTOMBS_STD_A = 0x67B + SYS___WCSWIDTH_A = 0x67C + SYS___WCSWIDTH_ASIA = 0x67F + SYS___WCSWIDTH_STD_A = 0x67E + SYS_FFLUSH = 0x068 + SYS___GETLOGIN_R_A = 0x68E + SYS___GETPWNAM_R_A = 0x68C + SYS___GETPWUID_R_A = 0x68D + SYS___TTYNAME_R_A = 0x68F + SYS___WCWIDTH_ASIA = 0x68B + SYS___WCWIDTH_STD_A = 0x68A + SYS_FOPEN = 0x069 + SYS___REGEXEC_A = 0x69A + SYS___REGEXEC_STD_A = 0x69B + SYS___REGFREE_A = 0x69C + SYS___REGFREE_STD_A = 0x69D + SYS___STRCOLL_A = 0x69E + SYS___STRCOLL_C_A = 0x69F + SYS_SCANF = 0x070 + SYS___A64L_A = 0x70C + SYS___ECVT_A = 0x70D + SYS___FCVT_A = 0x70E + SYS___GCVT_A = 0x70F + SYS___STRTOUL_A = 0x70A + SYS_____AE_CORRESTBL_QUERY_A = 0x70B + SYS_SPRINTF = 0x071 + SYS___ACCESS_A = 0x71F + SYS___CATOPEN_A = 0x71E + SYS___GETOPT_A = 0x71D + SYS___REALPATH_A = 0x71A + SYS___SETENV_A = 0x71B + SYS___SYSTEM_A = 0x71C + SYS_FGETC = 0x072 + SYS___GAI_STRERROR_A = 0x72F + SYS___RMDIR_A = 0x72A + SYS___STATVFS_A = 0x72B + SYS___SYMLINK_A = 0x72C + SYS___TRUNCATE_A = 0x72D + SYS___UNLINK_A = 0x72E + SYS_VFPRINTF = 0x073 + SYS___ISSPACE_A = 0x73A + SYS___ISUPPER_A = 0x73B + SYS___ISWALNUM_A = 0x73F + SYS___ISXDIGIT_A = 0x73C + SYS___TOLOWER_A = 0x73D + SYS___TOUPPER_A = 0x73E + SYS_VPRINTF = 0x074 + SYS___CONFSTR_A = 0x74B + SYS___FDOPEN_A = 0x74E + SYS___FLDATA_A = 0x74F + SYS___FTOK_A = 0x74C + SYS___ISWXDIGIT_A = 0x74A + SYS___MKTEMP_A = 0x74D + SYS_VSPRINTF = 0x075 + SYS___GETGRGID_A = 0x75A + SYS___GETGRNAM_A = 0x75B + SYS___GETGROUPSBYNAME_A = 0x75C + SYS___GETHOSTENT_A = 0x75D + SYS___GETHOSTNAME_A = 0x75E + SYS___GETLOGIN_A = 0x75F + SYS_GETC = 0x076 + SYS___CREATEWORKUNIT_A = 0x76A + SYS___CTERMID_A = 0x76B + SYS___FMTMSG_A = 0x76C + SYS___INITGROUPS_A = 0x76D + SYS___MSGRCV_A = 0x76F + SYS_____LOGIN_A = 0x76E + SYS_FGETS = 0x077 + SYS___STRCASECMP_A = 0x77B + SYS___STRNCASECMP_A = 0x77C + SYS___TTYNAME_A = 0x77D + SYS___UNAME_A = 0x77E + SYS___UTIMES_A = 0x77F + SYS_____SERVER_PWU_A = 0x77A + SYS_FPUTC = 0x078 + SYS___CREAT_O_A = 0x78E + SYS___ENVNA = 0x78F + SYS___FREAD_A = 0x78A + SYS___FWRITE_A = 0x78B + SYS___ISASCII = 0x78D + SYS___OPEN_O_A = 0x78C + SYS_FPUTS = 0x079 + SYS___ASCTIME_A = 0x79C + SYS___CTIME_A = 0x79D + SYS___GETDATE_A = 0x79E + SYS___GETSERVBYPORT_A = 0x79A + SYS___GETSERVENT_A = 0x79B + SYS___TZSET_A = 0x79F + SYS_ACL_FROM_TEXT = 0x80C + SYS_ACL_SET_FD = 0x80A + SYS_ACL_SET_FILE = 0x80B + SYS_ACL_SORT = 0x80E + SYS_ACL_TO_TEXT = 0x80D + SYS_UNGETC = 0x080 + SYS___SHUTDOWN_REGISTRATION = 0x80F + SYS_FREAD = 0x081 + SYS_FREEADDRINFO = 0x81A + SYS_GAI_STRERROR = 0x81B + SYS_REXEC_AF = 0x81C + SYS___DYNALLOC_A = 0x81F + SYS___POE = 0x81D + SYS_WCSTOMBS = 0x082 + SYS___INET_ADDR_A = 0x82F + SYS___NLIST_A = 0x82A + SYS_____TCGETCP_A = 0x82B + SYS_____TCSETCP_A = 0x82C + SYS_____W_PIOCTL_A = 0x82E + SYS_MBTOWC = 0x083 + SYS___CABEND = 0x83D + SYS___LE_CIB_GET = 0x83E + SYS___RECVMSG_A = 0x83B + SYS___SENDMSG_A = 0x83A + SYS___SET_LAA_FOR_JIT = 0x83F + SYS_____LCHATTR_A = 0x83C + SYS_WCTOMB = 0x084 + SYS___CBRTL_B = 0x84A + SYS___COPYSIGNF_B = 0x84B + SYS___COPYSIGNL_B = 0x84C + SYS___COTANF_B = 0x84D + SYS___COTANL_B = 0x84F + SYS___COTAN_B = 0x84E + SYS_MBSTOWCS = 0x085 + SYS___LOG1PL_B = 0x85A + SYS___LOG2F_B = 0x85B + SYS___LOG2L_B = 0x85D + SYS___LOG2_B = 0x85C + SYS___REMAINDERF_B = 0x85E + SYS___REMAINDERL_B = 0x85F + SYS_ACOSHF = 0x86E + SYS_ACOSHL = 0x86F + SYS_WCSCPY = 0x086 + SYS___ERFCF_B = 0x86D + SYS___ERFF_B = 0x86C + SYS___LROUNDF_B = 0x86A + SYS___LROUND_B = 0x86B + SYS_COTANL = 0x87A + SYS_EXP2F = 0x87B + SYS_EXP2L = 0x87C + SYS_EXPM1F = 0x87D + SYS_EXPM1L = 0x87E + SYS_FDIMF = 0x87F + SYS_WCSCAT = 0x087 + SYS___COTANL = 0x87A + SYS_REMAINDERF = 0x88A + SYS_REMAINDERL = 0x88B + SYS_REMAINDF = 0x88A + SYS_REMAINDL = 0x88B + SYS_REMQUO = 0x88D + SYS_REMQUOF = 0x88C + SYS_REMQUOL = 0x88E + SYS_TGAMMAF = 0x88F + SYS_WCSCHR = 0x088 + SYS_ERFCF = 0x89B + SYS_ERFCL = 0x89C + SYS_ERFL = 0x89A + SYS_EXP2 = 0x89E + SYS_WCSCMP = 0x089 + SYS___EXP2_B = 0x89D + SYS___FAR_JUMP = 0x89F + SYS_ABS = 0x090 + SYS___ERFCL_H = 0x90A + SYS___EXPF_H = 0x90C + SYS___EXPL_H = 0x90D + SYS___EXPM1_H = 0x90E + SYS___EXP_H = 0x90B + SYS___FDIM_H = 0x90F + SYS_DIV = 0x091 + SYS___LOG2F_H = 0x91F + SYS___LOG2_H = 0x91E + SYS___LOGB_H = 0x91D + SYS___LOGF_H = 0x91B + SYS___LOGL_H = 0x91C + SYS___LOG_H = 0x91A + SYS_LABS = 0x092 + SYS___POWL_H = 0x92A + SYS___REMAINDER_H = 0x92B + SYS___RINT_H = 0x92C + SYS___SCALB_H = 0x92D + SYS___SINF_H = 0x92F + SYS___SIN_H = 0x92E + SYS_STRNCPY = 0x093 + SYS___TANHF_H = 0x93B + SYS___TANHL_H = 0x93C + SYS___TANH_H = 0x93A + SYS___TGAMMAF_H = 0x93E + SYS___TGAMMA_H = 0x93D + SYS___TRUNC_H = 0x93F + SYS_MEMCPY = 0x094 + SYS_VFWSCANF = 0x94A + SYS_VSWSCANF = 0x94E + SYS_VWSCANF = 0x94C + SYS_INET6_RTH_ADD = 0x95D + SYS_INET6_RTH_INIT = 0x95C + SYS_INET6_RTH_REVERSE = 0x95E + SYS_INET6_RTH_SEGMENTS = 0x95F + SYS_INET6_RTH_SPACE = 0x95B + SYS_MEMMOVE = 0x095 + SYS_WCSTOLD = 0x95A + SYS_STRCPY = 0x096 + SYS_STRCMP = 0x097 + SYS_CABS = 0x98E + SYS_STRCAT = 0x098 + SYS___CABS_B = 0x98F + SYS___POW_II = 0x98A + SYS___POW_II_B = 0x98B + SYS___POW_II_H = 0x98C + SYS_CACOSF = 0x99A + SYS_CACOSL = 0x99D + SYS_STRNCAT = 0x099 + SYS___CACOSF_B = 0x99B + SYS___CACOSF_H = 0x99C + SYS___CACOSL_B = 0x99E + SYS___CACOSL_H = 0x99F + SYS_ISWALPHA = 0x100 + SYS_ISWBLANK = 0x101 + SYS___ISWBLK = 0x101 + SYS_ISWCNTRL = 0x102 + SYS_ISWDIGIT = 0x103 + SYS_ISWGRAPH = 0x104 + SYS_ISWLOWER = 0x105 + SYS_ISWPRINT = 0x106 + SYS_ISWPUNCT = 0x107 + SYS_ISWSPACE = 0x108 + SYS_ISWUPPER = 0x109 + SYS_WCTOB = 0x110 + SYS_MBRLEN = 0x111 + SYS_MBRTOWC = 0x112 + SYS_MBSRTOWC = 0x113 + SYS_MBSRTOWCS = 0x113 + SYS_WCRTOMB = 0x114 + SYS_WCSRTOMB = 0x115 + SYS_WCSRTOMBS = 0x115 + SYS___CSID = 0x116 + SYS___WCSID = 0x117 + SYS_STRPTIME = 0x118 + SYS___STRPTM = 0x118 + SYS_STRFMON = 0x119 + SYS_WCSCOLL = 0x130 + SYS_WCSXFRM = 0x131 + SYS_WCSWIDTH = 0x132 + SYS_WCWIDTH = 0x133 + SYS_WCSFTIME = 0x134 + SYS_SWPRINTF = 0x135 + SYS_VSWPRINT = 0x136 + SYS_VSWPRINTF = 0x136 + SYS_SWSCANF = 0x137 + SYS_REGCOMP = 0x138 + SYS_REGEXEC = 0x139 + SYS_GETWC = 0x140 + SYS_GETWCHAR = 0x141 + SYS_PUTWC = 0x142 + SYS_PUTWCHAR = 0x143 + SYS_UNGETWC = 0x144 + SYS_ICONV_OPEN = 0x145 + SYS_ICONV = 0x146 + SYS_ICONV_CLOSE = 0x147 + SYS_COLLRANGE = 0x150 + SYS_CCLASS = 0x151 + SYS_COLLORDER = 0x152 + SYS___DEMANGLE = 0x154 + SYS_FDOPEN = 0x155 + SYS___ERRNO = 0x156 + SYS___ERRNO2 = 0x157 + SYS___TERROR = 0x158 + SYS_MAXCOLL = 0x169 + SYS_DLLLOAD = 0x170 + SYS__EXIT = 0x174 + SYS_ACCESS = 0x175 + SYS_ALARM = 0x176 + SYS_CFGETISPEED = 0x177 + SYS_CFGETOSPEED = 0x178 + SYS_CFSETISPEED = 0x179 + SYS_CREAT = 0x180 + SYS_CTERMID = 0x181 + SYS_DUP = 0x182 + SYS_DUP2 = 0x183 + SYS_EXECL = 0x184 + SYS_EXECLE = 0x185 + SYS_EXECLP = 0x186 + SYS_EXECV = 0x187 + SYS_EXECVE = 0x188 + SYS_EXECVP = 0x189 + SYS_FSTAT = 0x190 + SYS_FSYNC = 0x191 + SYS_FTRUNCATE = 0x192 + SYS_GETCWD = 0x193 + SYS_GETEGID = 0x194 + SYS_GETEUID = 0x195 + SYS_GETGID = 0x196 + SYS_GETGRGID = 0x197 + SYS_GETGRNAM = 0x198 + SYS_GETGROUPS = 0x199 + SYS_PTHREAD_MUTEXATTR_DESTROY = 0x200 + SYS_PTHREAD_MUTEXATTR_SETKIND_NP = 0x201 + SYS_PTHREAD_MUTEXATTR_GETKIND_NP = 0x202 + SYS_PTHREAD_MUTEX_INIT = 0x203 + SYS_PTHREAD_MUTEX_DESTROY = 0x204 + SYS_PTHREAD_MUTEX_LOCK = 0x205 + SYS_PTHREAD_MUTEX_TRYLOCK = 0x206 + SYS_PTHREAD_MUTEX_UNLOCK = 0x207 + SYS_PTHREAD_ONCE = 0x209 + SYS_TW_OPEN = 0x210 + SYS_TW_FCNTL = 0x211 + SYS_PTHREAD_JOIN_D4_NP = 0x212 + SYS_PTHREAD_CONDATTR_SETKIND_NP = 0x213 + SYS_PTHREAD_CONDATTR_GETKIND_NP = 0x214 + SYS_EXTLINK_NP = 0x215 + SYS___PASSWD = 0x216 + SYS_SETGROUPS = 0x217 + SYS_INITGROUPS = 0x218 + SYS_WCSRCHR = 0x240 + SYS_SVC99 = 0x241 + SYS___SVC99 = 0x241 + SYS_WCSWCS = 0x242 + SYS_LOCALECO = 0x243 + SYS_LOCALECONV = 0x243 + SYS___LIBREL = 0x244 + SYS_RELEASE = 0x245 + SYS___RLSE = 0x245 + SYS_FLOCATE = 0x246 + SYS___FLOCT = 0x246 + SYS_FDELREC = 0x247 + SYS___FDLREC = 0x247 + SYS_FETCH = 0x248 + SYS___FETCH = 0x248 + SYS_QSORT = 0x249 + SYS___CLEANUPCATCH = 0x260 + SYS___CATCHMATCH = 0x261 + SYS___CLEAN2UPCATCH = 0x262 + SYS_GETPRIORITY = 0x270 + SYS_NICE = 0x271 + SYS_SETPRIORITY = 0x272 + SYS_GETITIMER = 0x273 + SYS_SETITIMER = 0x274 + SYS_MSGCTL = 0x275 + SYS_MSGGET = 0x276 + SYS_MSGRCV = 0x277 + SYS_MSGSND = 0x278 + SYS_MSGXRCV = 0x279 + SYS___MSGXR = 0x279 + SYS_SHMGET = 0x280 + SYS___GETIPC = 0x281 + SYS_SETGRENT = 0x282 + SYS_GETGRENT = 0x283 + SYS_ENDGRENT = 0x284 + SYS_SETPWENT = 0x285 + SYS_GETPWENT = 0x286 + SYS_ENDPWENT = 0x287 + SYS_BSD_SIGNAL = 0x288 + SYS_KILLPG = 0x289 + SYS_SIGSET = 0x290 + SYS_SIGSTACK = 0x291 + SYS_GETRLIMIT = 0x292 + SYS_SETRLIMIT = 0x293 + SYS_GETRUSAGE = 0x294 + SYS_MMAP = 0x295 + SYS_MPROTECT = 0x296 + SYS_MSYNC = 0x297 + SYS_MUNMAP = 0x298 + SYS_CONFSTR = 0x299 + SYS___NDMTRM = 0x300 + SYS_FTOK = 0x301 + SYS_BASENAME = 0x302 + SYS_DIRNAME = 0x303 + SYS_GETDTABLESIZE = 0x304 + SYS_MKSTEMP = 0x305 + SYS_MKTEMP = 0x306 + SYS_NFTW = 0x307 + SYS_GETWD = 0x308 + SYS_LOCKF = 0x309 + SYS_WORDEXP = 0x310 + SYS_WORDFREE = 0x311 + SYS_GETPGID = 0x312 + SYS_GETSID = 0x313 + SYS___UTMPXNAME = 0x314 + SYS_CUSERID = 0x315 + SYS_GETPASS = 0x316 + SYS_FNMATCH = 0x317 + SYS_FTW = 0x318 + SYS_GETW = 0x319 + SYS_ACOSH = 0x320 + SYS_ASINH = 0x321 + SYS_ATANH = 0x322 + SYS_CBRT = 0x323 + SYS_EXPM1 = 0x324 + SYS_ILOGB = 0x325 + SYS_LOGB = 0x326 + SYS_LOG1P = 0x327 + SYS_NEXTAFTER = 0x328 + SYS_RINT = 0x329 + SYS_SPAWN = 0x330 + SYS_SPAWNP = 0x331 + SYS_GETLOGIN_UU = 0x332 + SYS_ECVT = 0x333 + SYS_FCVT = 0x334 + SYS_GCVT = 0x335 + SYS_ACCEPT = 0x336 + SYS_BIND = 0x337 + SYS_CONNECT = 0x338 + SYS_ENDHOSTENT = 0x339 + SYS_GETHOSTENT = 0x340 + SYS_GETHOSTID = 0x341 + SYS_GETHOSTNAME = 0x342 + SYS_GETNETBYADDR = 0x343 + SYS_GETNETBYNAME = 0x344 + SYS_GETNETENT = 0x345 + SYS_GETPEERNAME = 0x346 + SYS_GETPROTOBYNAME = 0x347 + SYS_GETPROTOBYNUMBER = 0x348 + SYS_GETPROTOENT = 0x349 + SYS_INET_LNAOF = 0x350 + SYS_INET_MAKEADDR = 0x351 + SYS_INET_NETOF = 0x352 + SYS_INET_NETWORK = 0x353 + SYS_INET_NTOA = 0x354 + SYS_IOCTL = 0x355 + SYS_LISTEN = 0x356 + SYS_READV = 0x357 + SYS_RECV = 0x358 + SYS_RECVFROM = 0x359 + SYS_SETHOSTENT = 0x360 + SYS_SETNETENT = 0x361 + SYS_SETPEER = 0x362 + SYS_SETPROTOENT = 0x363 + SYS_SETSERVENT = 0x364 + SYS_SETSOCKOPT = 0x365 + SYS_SHUTDOWN = 0x366 + SYS_SOCKET = 0x367 + SYS_SOCKETPAIR = 0x368 + SYS_WRITEV = 0x369 + SYS_ENDNETENT = 0x370 + SYS_CLOSELOG = 0x371 + SYS_OPENLOG = 0x372 + SYS_SETLOGMASK = 0x373 + SYS_SYSLOG = 0x374 + SYS_PTSNAME = 0x375 + SYS_SETREUID = 0x376 + SYS_SETREGID = 0x377 + SYS_REALPATH = 0x378 + SYS___SIGNGAM = 0x379 + SYS_POLL = 0x380 + SYS_REXEC = 0x381 + SYS___ISASCII2 = 0x382 + SYS___TOASCII2 = 0x383 + SYS_CHPRIORITY = 0x384 + SYS_PTHREAD_ATTR_SETSYNCTYPE_NP = 0x385 + SYS_PTHREAD_ATTR_GETSYNCTYPE_NP = 0x386 + SYS_PTHREAD_SET_LIMIT_NP = 0x387 + SYS___STNETENT = 0x388 + SYS___STPROTOENT = 0x389 + SYS___SELECT1 = 0x390 + SYS_PTHREAD_SECURITY_NP = 0x391 + SYS___CHECK_RESOURCE_AUTH_NP = 0x392 + SYS___CONVERT_ID_NP = 0x393 + SYS___OPENVMREL = 0x394 + SYS_WMEMCHR = 0x395 + SYS_WMEMCMP = 0x396 + SYS_WMEMCPY = 0x397 + SYS_WMEMMOVE = 0x398 + SYS_WMEMSET = 0x399 + SYS___FPUTWC = 0x400 + SYS___PUTWC = 0x401 + SYS___PWCHAR = 0x402 + SYS___WCSFTM = 0x403 + SYS___WCSTOK = 0x404 + SYS___WCWDTH = 0x405 + SYS_T_ACCEPT = 0x409 + SYS_T_GETINFO = 0x410 + SYS_T_GETPROTADDR = 0x411 + SYS_T_GETSTATE = 0x412 + SYS_T_LISTEN = 0x413 + SYS_T_LOOK = 0x414 + SYS_T_OPEN = 0x415 + SYS_T_OPTMGMT = 0x416 + SYS_T_RCV = 0x417 + SYS_T_RCVCONNECT = 0x418 + SYS_T_RCVDIS = 0x419 + SYS_T_SNDUDATA = 0x420 + SYS_T_STRERROR = 0x421 + SYS_T_SYNC = 0x422 + SYS_T_UNBIND = 0x423 + SYS___T_ERRNO = 0x424 + SYS___RECVMSG2 = 0x425 + SYS___SENDMSG2 = 0x426 + SYS_FATTACH = 0x427 + SYS_FDETACH = 0x428 + SYS_GETMSG = 0x429 + SYS_GETCONTEXT = 0x430 + SYS_SETCONTEXT = 0x431 + SYS_MAKECONTEXT = 0x432 + SYS_SWAPCONTEXT = 0x433 + SYS_PTHREAD_GETSPECIFIC_D8_NP = 0x434 + SYS_GETCLIENTID = 0x470 + SYS___GETCLIENTID = 0x471 + SYS_GETSTABLESIZE = 0x472 + SYS_GETIBMOPT = 0x473 + SYS_GETIBMSOCKOPT = 0x474 + SYS_GIVESOCKET = 0x475 + SYS_IBMSFLUSH = 0x476 + SYS_MAXDESC = 0x477 + SYS_SETIBMOPT = 0x478 + SYS_SETIBMSOCKOPT = 0x479 + SYS___SERVER_PWU = 0x480 + SYS_PTHREAD_TAG_NP = 0x481 + SYS___CONSOLE = 0x482 + SYS___WSINIT = 0x483 + SYS___IPTCPN = 0x489 + SYS___SERVER_CLASSIFY = 0x490 + SYS___HEAPRPT = 0x496 + SYS___ISBFP = 0x500 + SYS___FP_CAST = 0x501 + SYS___CERTIFICATE = 0x502 + SYS_SEND_FILE = 0x503 + SYS_AIO_CANCEL = 0x504 + SYS_AIO_ERROR = 0x505 + SYS_AIO_READ = 0x506 + SYS_AIO_RETURN = 0x507 + SYS_AIO_SUSPEND = 0x508 + SYS_AIO_WRITE = 0x509 + SYS_PTHREAD_RWLOCK_TRYWRLOCK = 0x510 + SYS_PTHREAD_RWLOCK_UNLOCK = 0x511 + SYS_PTHREAD_RWLOCK_WRLOCK = 0x512 + SYS_PTHREAD_RWLOCKATTR_GETPSHARED = 0x513 + SYS_PTHREAD_RWLOCKATTR_SETPSHARED = 0x514 + SYS_PTHREAD_RWLOCKATTR_INIT = 0x515 + SYS_PTHREAD_RWLOCKATTR_DESTROY = 0x516 + SYS___CTTBL = 0x517 + SYS_PTHREAD_MUTEXATTR_SETTYPE = 0x518 + SYS_PTHREAD_MUTEXATTR_GETTYPE = 0x519 + SYS___FP_UNORDERED = 0x520 + SYS___FP_READ_RND = 0x521 + SYS___FP_READ_RND_B = 0x522 + SYS___FP_SWAP_RND = 0x523 + SYS___FP_SWAP_RND_B = 0x524 + SYS___FP_LEVEL = 0x525 + SYS___FP_BTOH = 0x526 + SYS___FP_HTOB = 0x527 + SYS___FPC_RD = 0x528 + SYS___FPC_WR = 0x529 + SYS_PTHREAD_SETCANCELTYPE = 0x600 + SYS_PTHREAD_TESTCANCEL = 0x601 + SYS___ATANF_B = 0x602 + SYS___ATANL_B = 0x603 + SYS___CEILF_B = 0x604 + SYS___CEILL_B = 0x605 + SYS___COSF_B = 0x606 + SYS___COSL_B = 0x607 + SYS___FABSF_B = 0x608 + SYS___FABSL_B = 0x609 + SYS___SINF_B = 0x610 + SYS___SINL_B = 0x611 + SYS___TANF_B = 0x612 + SYS___TANL_B = 0x613 + SYS___TANHF_B = 0x614 + SYS___TANHL_B = 0x615 + SYS___ACOSF_B = 0x616 + SYS___ACOSL_B = 0x617 + SYS___ASINF_B = 0x618 + SYS___ASINL_B = 0x619 + SYS___LOGF_B = 0x620 + SYS___LOGL_B = 0x621 + SYS___LOG10F_B = 0x622 + SYS___LOG10L_B = 0x623 + SYS___POWF_B = 0x624 + SYS___POWL_B = 0x625 + SYS___SINHF_B = 0x626 + SYS___SINHL_B = 0x627 + SYS___SQRTF_B = 0x628 + SYS___SQRTL_B = 0x629 + SYS___MODFL_B = 0x630 + SYS_ABSF = 0x631 + SYS_ABSL = 0x632 + SYS_ACOSF = 0x633 + SYS_ACOSL = 0x634 + SYS_ASINF = 0x635 + SYS_ASINL = 0x636 + SYS_ATAN2F = 0x637 + SYS_ATAN2L = 0x638 + SYS_ATANF = 0x639 + SYS_COSHL = 0x640 + SYS_EXPF = 0x641 + SYS_EXPL = 0x642 + SYS_TANHF = 0x643 + SYS_TANHL = 0x644 + SYS_LOG10F = 0x645 + SYS_LOG10L = 0x646 + SYS_LOGF = 0x647 + SYS_LOGL = 0x648 + SYS_POWF = 0x649 + SYS_SINHL = 0x650 + SYS_TANF = 0x651 + SYS_TANL = 0x652 + SYS_FABSF = 0x653 + SYS_FABSL = 0x654 + SYS_FLOORF = 0x655 + SYS_FLOORL = 0x656 + SYS_FMODF = 0x657 + SYS_FMODL = 0x658 + SYS_FREXPF = 0x659 + SYS___CHATTR = 0x660 + SYS___FCHATTR = 0x661 + SYS___TOCCSID = 0x662 + SYS___CSNAMETYPE = 0x663 + SYS___TOCSNAME = 0x664 + SYS___CCSIDTYPE = 0x665 + SYS___AE_CORRESTBL_QUERY = 0x666 + SYS___AE_AUTOCONVERT_STATE = 0x667 + SYS_DN_FIND = 0x668 + SYS___GETHOSTBYADDR_A = 0x669 + SYS___MBLEN_SB_A = 0x670 + SYS___MBLEN_STD_A = 0x671 + SYS___MBLEN_UTF = 0x672 + SYS___MBSTOWCS_A = 0x673 + SYS___MBSTOWCS_STD_A = 0x674 + SYS___MBTOWC_A = 0x675 + SYS___MBTOWC_ISO1 = 0x676 + SYS___MBTOWC_SBCS = 0x677 + SYS___MBTOWC_MBCS = 0x678 + SYS___MBTOWC_UTF = 0x679 + SYS___CSID_A = 0x680 + SYS___CSID_STD_A = 0x681 + SYS___WCSID_A = 0x682 + SYS___WCSID_STD_A = 0x683 + SYS___WCTOMB_A = 0x684 + SYS___WCTOMB_ISO1 = 0x685 + SYS___WCTOMB_STD_A = 0x686 + SYS___WCTOMB_UTF = 0x687 + SYS___WCWIDTH_A = 0x688 + SYS___GETGRNAM_R_A = 0x689 + SYS___READDIR_R_A = 0x690 + SYS___E2A_S = 0x691 + SYS___FNMATCH_A = 0x692 + SYS___FNMATCH_C_A = 0x693 + SYS___EXECL_A = 0x694 + SYS___FNMATCH_STD_A = 0x695 + SYS___REGCOMP_A = 0x696 + SYS___REGCOMP_STD_A = 0x697 + SYS___REGERROR_A = 0x698 + SYS___REGERROR_STD_A = 0x699 + SYS___SWPRINTF_A = 0x700 + SYS___FSCANF_A = 0x701 + SYS___SCANF_A = 0x702 + SYS___SSCANF_A = 0x703 + SYS___SWSCANF_A = 0x704 + SYS___ATOF_A = 0x705 + SYS___ATOI_A = 0x706 + SYS___ATOL_A = 0x707 + SYS___STRTOD_A = 0x708 + SYS___STRTOL_A = 0x709 + SYS___L64A_A = 0x710 + SYS___STRERROR_A = 0x711 + SYS___PERROR_A = 0x712 + SYS___FETCH_A = 0x713 + SYS___GETENV_A = 0x714 + SYS___MKSTEMP_A = 0x717 + SYS___PTSNAME_A = 0x718 + SYS___PUTENV_A = 0x719 + SYS___CHDIR_A = 0x720 + SYS___CHOWN_A = 0x721 + SYS___CHROOT_A = 0x722 + SYS___GETCWD_A = 0x723 + SYS___GETWD_A = 0x724 + SYS___LCHOWN_A = 0x725 + SYS___LINK_A = 0x726 + SYS___PATHCONF_A = 0x727 + SYS___IF_NAMEINDEX_A = 0x728 + SYS___READLINK_A = 0x729 + SYS___EXTLINK_NP_A = 0x730 + SYS___ISALNUM_A = 0x731 + SYS___ISALPHA_A = 0x732 + SYS___A2E_S = 0x733 + SYS___ISCNTRL_A = 0x734 + SYS___ISDIGIT_A = 0x735 + SYS___ISGRAPH_A = 0x736 + SYS___ISLOWER_A = 0x737 + SYS___ISPRINT_A = 0x738 + SYS___ISPUNCT_A = 0x739 + SYS___ISWALPHA_A = 0x740 + SYS___A2E_L = 0x741 + SYS___ISWCNTRL_A = 0x742 + SYS___ISWDIGIT_A = 0x743 + SYS___ISWGRAPH_A = 0x744 + SYS___ISWLOWER_A = 0x745 + SYS___ISWPRINT_A = 0x746 + SYS___ISWPUNCT_A = 0x747 + SYS___ISWSPACE_A = 0x748 + SYS___ISWUPPER_A = 0x749 + SYS___REMOVE_A = 0x750 + SYS___RENAME_A = 0x751 + SYS___TMPNAM_A = 0x752 + SYS___FOPEN_A = 0x753 + SYS___FREOPEN_A = 0x754 + SYS___CUSERID_A = 0x755 + SYS___POPEN_A = 0x756 + SYS___TEMPNAM_A = 0x757 + SYS___FTW_A = 0x758 + SYS___GETGRENT_A = 0x759 + SYS___INET_NTOP_A = 0x760 + SYS___GETPASS_A = 0x761 + SYS___GETPWENT_A = 0x762 + SYS___GETPWNAM_A = 0x763 + SYS___GETPWUID_A = 0x764 + SYS_____CHECK_RESOURCE_AUTH_NP_A = 0x765 + SYS___CHECKSCHENV_A = 0x766 + SYS___CONNECTSERVER_A = 0x767 + SYS___CONNECTWORKMGR_A = 0x768 + SYS_____CONSOLE_A = 0x769 + SYS___MSGSND_A = 0x770 + SYS___MSGXRCV_A = 0x771 + SYS___NFTW_A = 0x772 + SYS_____PASSWD_A = 0x773 + SYS___PTHREAD_SECURITY_NP_A = 0x774 + SYS___QUERYMETRICS_A = 0x775 + SYS___QUERYSCHENV = 0x776 + SYS___READV_A = 0x777 + SYS_____SERVER_CLASSIFY_A = 0x778 + SYS_____SERVER_INIT_A = 0x779 + SYS___W_GETPSENT_A = 0x780 + SYS___WRITEV_A = 0x781 + SYS___W_STATFS_A = 0x782 + SYS___W_STATVFS_A = 0x783 + SYS___FPUTC_A = 0x784 + SYS___PUTCHAR_A = 0x785 + SYS___PUTS_A = 0x786 + SYS___FGETS_A = 0x787 + SYS___GETS_A = 0x788 + SYS___FPUTS_A = 0x789 + SYS___PUTC_A = 0x790 + SYS___AE_THREAD_SETMODE = 0x791 + SYS___AE_THREAD_SWAPMODE = 0x792 + SYS___GETNETBYADDR_A = 0x793 + SYS___GETNETBYNAME_A = 0x794 + SYS___GETNETENT_A = 0x795 + SYS___GETPROTOBYNAME_A = 0x796 + SYS___GETPROTOBYNUMBER_A = 0x797 + SYS___GETPROTOENT_A = 0x798 + SYS___GETSERVBYNAME_A = 0x799 + SYS_ACL_FIRST_ENTRY = 0x800 + SYS_ACL_GET_ENTRY = 0x801 + SYS_ACL_VALID = 0x802 + SYS_ACL_CREATE_ENTRY = 0x803 + SYS_ACL_DELETE_ENTRY = 0x804 + SYS_ACL_UPDATE_ENTRY = 0x805 + SYS_ACL_DELETE_FD = 0x806 + SYS_ACL_DELETE_FILE = 0x807 + SYS_ACL_GET_FD = 0x808 + SYS_ACL_GET_FILE = 0x809 + SYS___ERFL_B = 0x810 + SYS___ERFCL_B = 0x811 + SYS___LGAMMAL_B = 0x812 + SYS___SETHOOKEVENTS = 0x813 + SYS_IF_NAMETOINDEX = 0x814 + SYS_IF_INDEXTONAME = 0x815 + SYS_IF_NAMEINDEX = 0x816 + SYS_IF_FREENAMEINDEX = 0x817 + SYS_GETADDRINFO = 0x818 + SYS_GETNAMEINFO = 0x819 + SYS___DYNFREE_A = 0x820 + SYS___RES_QUERY_A = 0x821 + SYS___RES_SEARCH_A = 0x822 + SYS___RES_QUERYDOMAIN_A = 0x823 + SYS___RES_MKQUERY_A = 0x824 + SYS___RES_SEND_A = 0x825 + SYS___DN_EXPAND_A = 0x826 + SYS___DN_SKIPNAME_A = 0x827 + SYS___DN_COMP_A = 0x828 + SYS___DN_FIND_A = 0x829 + SYS___INET_NTOA_A = 0x830 + SYS___INET_NETWORK_A = 0x831 + SYS___ACCEPT_A = 0x832 + SYS___ACCEPT_AND_RECV_A = 0x833 + SYS___BIND_A = 0x834 + SYS___CONNECT_A = 0x835 + SYS___GETPEERNAME_A = 0x836 + SYS___GETSOCKNAME_A = 0x837 + SYS___RECVFROM_A = 0x838 + SYS___SENDTO_A = 0x839 + SYS___LCHATTR = 0x840 + SYS___WRITEDOWN = 0x841 + SYS_PTHREAD_MUTEX_INIT2 = 0x842 + SYS___ACOSHF_B = 0x843 + SYS___ACOSHL_B = 0x844 + SYS___ASINHF_B = 0x845 + SYS___ASINHL_B = 0x846 + SYS___ATANHF_B = 0x847 + SYS___ATANHL_B = 0x848 + SYS___CBRTF_B = 0x849 + SYS___EXP2F_B = 0x850 + SYS___EXP2L_B = 0x851 + SYS___EXPM1F_B = 0x852 + SYS___EXPM1L_B = 0x853 + SYS___FDIMF_B = 0x854 + SYS___FDIM_B = 0x855 + SYS___FDIML_B = 0x856 + SYS___HYPOTF_B = 0x857 + SYS___HYPOTL_B = 0x858 + SYS___LOG1PF_B = 0x859 + SYS___REMQUOF_B = 0x860 + SYS___REMQUO_B = 0x861 + SYS___REMQUOL_B = 0x862 + SYS___TGAMMAF_B = 0x863 + SYS___TGAMMA_B = 0x864 + SYS___TGAMMAL_B = 0x865 + SYS___TRUNCF_B = 0x866 + SYS___TRUNC_B = 0x867 + SYS___TRUNCL_B = 0x868 + SYS___LGAMMAF_B = 0x869 + SYS_ASINHF = 0x870 + SYS_ASINHL = 0x871 + SYS_ATANHF = 0x872 + SYS_ATANHL = 0x873 + SYS_CBRTF = 0x874 + SYS_CBRTL = 0x875 + SYS_COPYSIGNF = 0x876 + SYS_CPYSIGNF = 0x876 + SYS_COPYSIGNL = 0x877 + SYS_CPYSIGNL = 0x877 + SYS_COTANF = 0x878 + SYS___COTANF = 0x878 + SYS_COTAN = 0x879 + SYS___COTAN = 0x879 + SYS_FDIM = 0x881 + SYS_FDIML = 0x882 + SYS_HYPOTF = 0x883 + SYS_HYPOTL = 0x884 + SYS_LOG1PF = 0x885 + SYS_LOG1PL = 0x886 + SYS_LOG2F = 0x887 + SYS_LOG2 = 0x888 + SYS_LOG2L = 0x889 + SYS_TGAMMA = 0x890 + SYS_TGAMMAL = 0x891 + SYS_TRUNCF = 0x892 + SYS_TRUNC = 0x893 + SYS_TRUNCL = 0x894 + SYS_LGAMMAF = 0x895 + SYS_LGAMMAL = 0x896 + SYS_LROUNDF = 0x897 + SYS_LROUND = 0x898 + SYS_ERFF = 0x899 + SYS___COSHF_H = 0x900 + SYS___COSHL_H = 0x901 + SYS___COTAN_H = 0x902 + SYS___COTANF_H = 0x903 + SYS___COTANL_H = 0x904 + SYS___ERF_H = 0x905 + SYS___ERFF_H = 0x906 + SYS___ERFL_H = 0x907 + SYS___ERFC_H = 0x908 + SYS___ERFCF_H = 0x909 + SYS___FDIMF_H = 0x910 + SYS___FDIML_H = 0x911 + SYS___FMOD_H = 0x912 + SYS___FMODF_H = 0x913 + SYS___FMODL_H = 0x914 + SYS___GAMMA_H = 0x915 + SYS___HYPOT_H = 0x916 + SYS___ILOGB_H = 0x917 + SYS___LGAMMA_H = 0x918 + SYS___LGAMMAF_H = 0x919 + SYS___LOG2L_H = 0x920 + SYS___LOG1P_H = 0x921 + SYS___LOG10_H = 0x922 + SYS___LOG10F_H = 0x923 + SYS___LOG10L_H = 0x924 + SYS___LROUND_H = 0x925 + SYS___LROUNDF_H = 0x926 + SYS___NEXTAFTER_H = 0x927 + SYS___POW_H = 0x928 + SYS___POWF_H = 0x929 + SYS___SINL_H = 0x930 + SYS___SINH_H = 0x931 + SYS___SINHF_H = 0x932 + SYS___SINHL_H = 0x933 + SYS___SQRT_H = 0x934 + SYS___SQRTF_H = 0x935 + SYS___SQRTL_H = 0x936 + SYS___TAN_H = 0x937 + SYS___TANF_H = 0x938 + SYS___TANL_H = 0x939 + SYS___TRUNCF_H = 0x940 + SYS___TRUNCL_H = 0x941 + SYS___COSH_H = 0x942 + SYS___LE_DEBUG_SET_RESUME_MCH = 0x943 + SYS_VFSCANF = 0x944 + SYS_VSCANF = 0x946 + SYS_VSSCANF = 0x948 + SYS_IMAXABS = 0x950 + SYS_IMAXDIV = 0x951 + SYS_STRTOIMAX = 0x952 + SYS_STRTOUMAX = 0x953 + SYS_WCSTOIMAX = 0x954 + SYS_WCSTOUMAX = 0x955 + SYS_ATOLL = 0x956 + SYS_STRTOF = 0x957 + SYS_STRTOLD = 0x958 + SYS_WCSTOF = 0x959 + SYS_INET6_RTH_GETADDR = 0x960 + SYS_INET6_OPT_INIT = 0x961 + SYS_INET6_OPT_APPEND = 0x962 + SYS_INET6_OPT_FINISH = 0x963 + SYS_INET6_OPT_SET_VAL = 0x964 + SYS_INET6_OPT_NEXT = 0x965 + SYS_INET6_OPT_FIND = 0x966 + SYS_INET6_OPT_GET_VAL = 0x967 + SYS___POW_I = 0x987 + SYS___POW_I_B = 0x988 + SYS___POW_I_H = 0x989 + SYS___CABS_H = 0x990 + SYS_CABSF = 0x991 + SYS___CABSF_B = 0x992 + SYS___CABSF_H = 0x993 + SYS_CABSL = 0x994 + SYS___CABSL_B = 0x995 + SYS___CABSL_H = 0x996 + SYS_CACOS = 0x997 + SYS___CACOS_B = 0x998 + SYS___CACOS_H = 0x999 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go b/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go new file mode 100644 index 0000000..7a8161c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go @@ -0,0 +1,354 @@ +// cgo -godefs types_aix.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build ppc && aix +// +build ppc,aix + +package unix + +const ( + SizeofPtr = 0x4 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x4 + SizeofLongLong = 0x8 + PathMax = 0x3ff +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type off64 int64 +type off int32 +type Mode_t uint32 + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timeval32 struct { + Sec int32 + Usec int32 +} + +type Timex struct{} + +type Time_t int32 + +type Tms struct{} + +type Utimbuf struct { + Actime int32 + Modtime int32 +} + +type Timezone struct { + Minuteswest int32 + Dsttime int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type Pid_t int32 + +type _Gid_t uint32 + +type dev_t uint32 + +type Stat_t struct { + Dev uint32 + Ino uint32 + Mode uint32 + Nlink int16 + Flag uint16 + Uid uint32 + Gid uint32 + Rdev uint32 + Size int32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize int32 + Blocks int32 + Vfstype int32 + Vfs uint32 + Type uint32 + Gen uint32 + Reserved [9]uint32 +} + +type StatxTimestamp struct{} + +type Statx_t struct{} + +type Dirent struct { + Offset uint32 + Ino uint32 + Reclen uint16 + Namlen uint16 + Name [256]uint8 +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [1023]uint8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [120]uint8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]uint8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [1012]uint8 +} + +type _Socklen uint32 + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x404 + SizeofSockaddrUnix = 0x401 + SizeofSockaddrDatalink = 0x80 + SizeofLinger = 0x8 + SizeofIovec = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofICMPv6Filter = 0x20 +) + +const ( + SizeofIfMsghdr = 0x10 +) + +type IfMsgHdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Addrlen uint8 + _ [1]byte +} + +type FdSet struct { + Bits [2048]int32 +} + +type Utsname struct { + Sysname [32]byte + Nodename [32]byte + Release [32]byte + Version [32]byte + Machine [32]byte +} + +type Ustat_t struct{} + +type Sigset_t struct { + Losigs uint32 + Hisigs uint32 +} + +const ( + AT_FDCWD = -0x2 + AT_REMOVEDIR = 0x1 + AT_SYMLINK_NOFOLLOW = 0x1 +) + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [16]uint8 +} + +type Termio struct { + Iflag uint16 + Oflag uint16 + Cflag uint16 + Lflag uint16 + Line uint8 + Cc [8]uint8 + _ [1]byte +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type PollFd struct { + Fd int32 + Events uint16 + Revents uint16 +} + +const ( + POLLERR = 0x4000 + POLLHUP = 0x2000 + POLLIN = 0x1 + POLLNVAL = 0x8000 + POLLOUT = 0x2 + POLLPRI = 0x4 + POLLRDBAND = 0x20 + POLLRDNORM = 0x10 + POLLWRBAND = 0x40 + POLLWRNORM = 0x2 +) + +type Flock_t struct { + Type int16 + Whence int16 + Sysid uint32 + Pid int32 + Vfs int32 + Start int64 + Len int64 +} + +type Fsid_t struct { + Val [2]uint32 +} +type Fsid64_t struct { + Val [2]uint64 +} + +type Statfs_t struct { + Version int32 + Type int32 + Bsize uint32 + Blocks uint32 + Bfree uint32 + Bavail uint32 + Files uint32 + Ffree uint32 + Fsid Fsid_t + Vfstype int32 + Fsize uint32 + Vfsnumber int32 + Vfsoff int32 + Vfslen int32 + Vfsvers int32 + Fname [32]uint8 + Fpack [32]uint8 + Name_max int32 +} + +const RNDGETENTCNT = 0x80045200 diff --git a/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go new file mode 100644 index 0000000..07ed733 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go @@ -0,0 +1,358 @@ +// cgo -godefs types_aix.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build ppc64 && aix +// +build ppc64,aix + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 + PathMax = 0x3ff +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type off64 int64 +type off int64 +type Mode_t uint32 + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int32 + _ [4]byte +} + +type Timeval32 struct { + Sec int32 + Usec int32 +} + +type Timex struct{} + +type Time_t int64 + +type Tms struct{} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Timezone struct { + Minuteswest int32 + Dsttime int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type Pid_t int32 + +type _Gid_t uint32 + +type dev_t uint64 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Mode uint32 + Nlink int16 + Flag uint16 + Uid uint32 + Gid uint32 + Rdev uint64 + Ssize int32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize int64 + Blocks int64 + Vfstype int32 + Vfs uint32 + Type uint32 + Gen uint32 + Reserved [9]uint32 + Padto_ll uint32 + Size int64 +} + +type StatxTimestamp struct{} + +type Statx_t struct{} + +type Dirent struct { + Offset uint64 + Ino uint64 + Reclen uint16 + Namlen uint16 + Name [256]uint8 + _ [4]byte +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [1023]uint8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [120]uint8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]uint8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [1012]uint8 +} + +type _Socklen uint32 + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x404 + SizeofSockaddrUnix = 0x401 + SizeofSockaddrDatalink = 0x80 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofICMPv6Filter = 0x20 +) + +const ( + SizeofIfMsghdr = 0x10 +) + +type IfMsgHdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Addrlen uint8 + _ [1]byte +} + +type FdSet struct { + Bits [1024]int64 +} + +type Utsname struct { + Sysname [32]byte + Nodename [32]byte + Release [32]byte + Version [32]byte + Machine [32]byte +} + +type Ustat_t struct{} + +type Sigset_t struct { + Set [4]uint64 +} + +const ( + AT_FDCWD = -0x2 + AT_REMOVEDIR = 0x1 + AT_SYMLINK_NOFOLLOW = 0x1 +) + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [16]uint8 +} + +type Termio struct { + Iflag uint16 + Oflag uint16 + Cflag uint16 + Lflag uint16 + Line uint8 + Cc [8]uint8 + _ [1]byte +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type PollFd struct { + Fd int32 + Events uint16 + Revents uint16 +} + +const ( + POLLERR = 0x4000 + POLLHUP = 0x2000 + POLLIN = 0x1 + POLLNVAL = 0x8000 + POLLOUT = 0x2 + POLLPRI = 0x4 + POLLRDBAND = 0x20 + POLLRDNORM = 0x10 + POLLWRBAND = 0x40 + POLLWRNORM = 0x2 +) + +type Flock_t struct { + Type int16 + Whence int16 + Sysid uint32 + Pid int32 + Vfs int32 + Start int64 + Len int64 +} + +type Fsid_t struct { + Val [2]uint32 +} +type Fsid64_t struct { + Val [2]uint64 +} + +type Statfs_t struct { + Version int32 + Type int32 + Bsize uint64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid64_t + Vfstype int32 + Fsize uint64 + Vfsnumber int32 + Vfsoff int32 + Vfslen int32 + Vfsvers int32 + Fname [32]uint8 + Fpack [32]uint8 + Name_max int32 + _ [4]byte +} + +const RNDGETENTCNT = 0x80045200 diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go new file mode 100644 index 0000000..885842c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go @@ -0,0 +1,768 @@ +// cgo -godefs types_darwin.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build amd64 && darwin +// +build amd64,darwin + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int32 + _ [4]byte +} + +type Timeval32 struct { + Sec int32 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev int32 + Mode uint16 + Nlink uint16 + Ino uint64 + Uid uint32 + Gid uint32 + Rdev int32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Btim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Qspare [2]int64 +} + +type Statfs_t struct { + Bsize uint32 + Iosize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Owner uint32 + Type uint32 + Flags uint32 + Fssubtype uint32 + Fstypename [16]byte + Mntonname [1024]byte + Mntfromname [1024]byte + Flags_ext uint32 + Reserved [7]uint32 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Fstore_t struct { + Flags uint32 + Posmode int32 + Offset int64 + Length int64 + Bytesalloc int64 +} + +type Radvisory_t struct { + Offset int64 + Count int32 + _ [4]byte +} + +type Fbootstraptransfer_t struct { + Offset int64 + Length uint64 + Buffer *byte +} + +type Log2phys_t struct { + Flags uint32 + _ [16]byte +} + +type Fsid struct { + Val [2]int32 +} + +type Dirent struct { + Ino uint64 + Seekoff uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [1024]int8 + _ [3]byte +} + +const ( + PathMax = 0x400 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type RawSockaddrCtl struct { + Sc_len uint8 + Sc_family uint8 + Ss_sysaddr uint16 + Sc_id uint32 + Sc_unit uint32 + Sc_reserved [5]uint32 +} + +type RawSockaddrVM struct { + Len uint8 + Family uint8 + Reserved1 uint16 + Port uint32 + Cid uint32 +} + +type XVSockPCB struct { + Xv_len uint32 + Xv_vsockpp uint64 + Xvp_local_cid uint32 + Xvp_local_port uint32 + Xvp_remote_cid uint32 + Xvp_remote_port uint32 + Xvp_rxcnt uint32 + Xvp_txcnt uint32 + Xvp_peer_rxhiwat uint32 + Xvp_peer_rxcnt uint32 + Xvp_last_pid int32 + Xvp_gencnt uint64 + Xv_socket XSocket + _ [4]byte +} + +type XSocket struct { + Xso_len uint32 + Xso_so uint32 + So_type int16 + So_options int16 + So_linger int16 + So_state int16 + So_pcb uint32 + Xso_protocol int32 + Xso_family int32 + So_qlen int16 + So_incqlen int16 + So_qlimit int16 + So_timeo int16 + So_error uint16 + So_pgid int32 + So_oobmark uint32 + So_rcv XSockbuf + So_snd XSockbuf + So_uid uint32 +} + +type XSocket64 struct { + Xso_len uint32 + _ [8]byte + So_type int16 + So_options int16 + So_linger int16 + So_state int16 + _ [8]byte + Xso_protocol int32 + Xso_family int32 + So_qlen int16 + So_incqlen int16 + So_qlimit int16 + So_timeo int16 + So_error uint16 + So_pgid int32 + So_oobmark uint32 + So_rcv XSockbuf + So_snd XSockbuf + So_uid uint32 +} + +type XSockbuf struct { + Cc uint32 + Hiwat uint32 + Mbcnt uint32 + Mbmax uint32 + Lowat int32 + Flags int16 + Timeo int16 +} + +type XVSockPgen struct { + Len uint32 + Count uint64 + Gen uint64 + Sogen uint64 +} + +type _Socklen uint32 + +type Xucred struct { + Version uint32 + Uid uint32 + Ngroups int16 + Groups [16]uint32 +} + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface 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 +} + +type Inet4Pktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofSockaddrCtl = 0x20 + SizeofSockaddrVM = 0xc + SizeofXvsockpcb = 0xa8 + SizeofXSocket = 0x64 + SizeofXSockbuf = 0x18 + SizeofXVSockPgen = 0x20 + SizeofXucred = 0x4c + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]int32 +} + +const ( + SizeofIfMsghdr = 0x70 + SizeofIfData = 0x60 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfmaMsghdr2 = 0x14 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Data IfData +} + +type IfData struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval32 + Unused2 uint32 + Hwassist uint32 + Reserved1 uint32 + Reserved2 uint32 +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte +} + +type IfmaMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Refcount int32 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire int32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + State uint32 + Filler [3]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval32 + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [2]byte +} + +type Termios struct { + Iflag uint64 + Oflag uint64 + Cflag uint64 + Lflag uint64 + Cc [20]uint8 + Ispeed uint64 + Ospeed uint64 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x2 + AT_REMOVEDIR = 0x80 + AT_SYMLINK_FOLLOW = 0x40 + AT_SYMLINK_NOFOLLOW = 0x20 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} + +const SizeofClockinfo = 0x14 + +type Clockinfo struct { + Hz int32 + Tick int32 + Tickadj int32 + Stathz int32 + Profhz int32 +} + +type CtlInfo struct { + Id uint32 + Name [96]byte +} + +const SizeofKinfoProc = 0x288 + +type Eproc struct { + Paddr uintptr + Sess uintptr + Pcred Pcred + Ucred Ucred + Vm Vmspace + Ppid int32 + Pgid int32 + Jobc int16 + Tdev int32 + Tpgid int32 + Tsess uintptr + Wmesg [8]byte + Xsize int32 + Xrssize int16 + Xccount int16 + Xswrss int16 + Flag int32 + Login [12]byte + Spare [4]int32 + _ [4]byte +} + +type ExternProc struct { + P_starttime Timeval + P_vmspace *Vmspace + P_sigacts uintptr + P_flag int32 + P_stat int8 + P_pid int32 + P_oppid int32 + P_dupfd int32 + User_stack *int8 + Exit_thread *byte + P_debugger int32 + Sigwait int32 + P_estcpu uint32 + P_cpticks int32 + P_pctcpu uint32 + P_wchan *byte + P_wmesg *int8 + P_swtime uint32 + P_slptime uint32 + P_realtimer Itimerval + P_rtime Timeval + P_uticks uint64 + P_sticks uint64 + P_iticks uint64 + P_traceflag int32 + P_tracep uintptr + P_siglist int32 + P_textvp uintptr + P_holdcnt int32 + P_sigmask uint32 + P_sigignore uint32 + P_sigcatch uint32 + P_priority uint8 + P_usrpri uint8 + P_nice int8 + P_comm [17]byte + P_pgrp uintptr + P_addr uintptr + P_xstat uint16 + P_acflag uint16 + P_ru *Rusage +} + +type Itimerval struct { + Interval Timeval + Value Timeval +} + +type KinfoProc struct { + Proc ExternProc + Eproc Eproc +} + +type Vmspace struct { + Dummy int32 + Dummy2 *int8 + Dummy3 [5]int32 + Dummy4 [3]*int8 +} + +type Pcred struct { + Pc_lock [72]int8 + Pc_ucred uintptr + P_ruid uint32 + P_svuid uint32 + P_rgid uint32 + P_svgid uint32 + P_refcnt int32 + _ [4]byte +} + +type Ucred struct { + Ref int32 + Uid uint32 + Ngroups int16 + Groups [16]uint32 +} + +type SysvIpcPerm struct { + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint16 + _ uint16 + _ int32 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint64 + Lpid int32 + Cpid int32 + Nattch uint16 + _ [34]byte +} + +const ( + IPC_CREAT = 0x200 + IPC_EXCL = 0x400 + IPC_NOWAIT = 0x800 + IPC_PRIVATE = 0x0 +) + +const ( + IPC_RMID = 0x0 + IPC_SET = 0x1 + IPC_STAT = 0x2 +) + +const ( + SHM_RDONLY = 0x1000 + SHM_RND = 0x2000 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go new file mode 100644 index 0000000..b23c023 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go @@ -0,0 +1,768 @@ +// cgo -godefs types_darwin.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm64 && darwin +// +build arm64,darwin + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int32 + _ [4]byte +} + +type Timeval32 struct { + Sec int32 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev int32 + Mode uint16 + Nlink uint16 + Ino uint64 + Uid uint32 + Gid uint32 + Rdev int32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Btim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Qspare [2]int64 +} + +type Statfs_t struct { + Bsize uint32 + Iosize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Owner uint32 + Type uint32 + Flags uint32 + Fssubtype uint32 + Fstypename [16]byte + Mntonname [1024]byte + Mntfromname [1024]byte + Flags_ext uint32 + Reserved [7]uint32 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Fstore_t struct { + Flags uint32 + Posmode int32 + Offset int64 + Length int64 + Bytesalloc int64 +} + +type Radvisory_t struct { + Offset int64 + Count int32 + _ [4]byte +} + +type Fbootstraptransfer_t struct { + Offset int64 + Length uint64 + Buffer *byte +} + +type Log2phys_t struct { + Flags uint32 + _ [16]byte +} + +type Fsid struct { + Val [2]int32 +} + +type Dirent struct { + Ino uint64 + Seekoff uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [1024]int8 + _ [3]byte +} + +const ( + PathMax = 0x400 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type RawSockaddrCtl struct { + Sc_len uint8 + Sc_family uint8 + Ss_sysaddr uint16 + Sc_id uint32 + Sc_unit uint32 + Sc_reserved [5]uint32 +} + +type RawSockaddrVM struct { + Len uint8 + Family uint8 + Reserved1 uint16 + Port uint32 + Cid uint32 +} + +type XVSockPCB struct { + Xv_len uint32 + Xv_vsockpp uint64 + Xvp_local_cid uint32 + Xvp_local_port uint32 + Xvp_remote_cid uint32 + Xvp_remote_port uint32 + Xvp_rxcnt uint32 + Xvp_txcnt uint32 + Xvp_peer_rxhiwat uint32 + Xvp_peer_rxcnt uint32 + Xvp_last_pid int32 + Xvp_gencnt uint64 + Xv_socket XSocket + _ [4]byte +} + +type XSocket struct { + Xso_len uint32 + Xso_so uint32 + So_type int16 + So_options int16 + So_linger int16 + So_state int16 + So_pcb uint32 + Xso_protocol int32 + Xso_family int32 + So_qlen int16 + So_incqlen int16 + So_qlimit int16 + So_timeo int16 + So_error uint16 + So_pgid int32 + So_oobmark uint32 + So_rcv XSockbuf + So_snd XSockbuf + So_uid uint32 +} + +type XSocket64 struct { + Xso_len uint32 + _ [8]byte + So_type int16 + So_options int16 + So_linger int16 + So_state int16 + _ [8]byte + Xso_protocol int32 + Xso_family int32 + So_qlen int16 + So_incqlen int16 + So_qlimit int16 + So_timeo int16 + So_error uint16 + So_pgid int32 + So_oobmark uint32 + So_rcv XSockbuf + So_snd XSockbuf + So_uid uint32 +} + +type XSockbuf struct { + Cc uint32 + Hiwat uint32 + Mbcnt uint32 + Mbmax uint32 + Lowat int32 + Flags int16 + Timeo int16 +} + +type XVSockPgen struct { + Len uint32 + Count uint64 + Gen uint64 + Sogen uint64 +} + +type _Socklen uint32 + +type Xucred struct { + Version uint32 + Uid uint32 + Ngroups int16 + Groups [16]uint32 +} + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface 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 +} + +type Inet4Pktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofSockaddrCtl = 0x20 + SizeofSockaddrVM = 0xc + SizeofXvsockpcb = 0xa8 + SizeofXSocket = 0x64 + SizeofXSockbuf = 0x18 + SizeofXVSockPgen = 0x20 + SizeofXucred = 0x4c + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]int32 +} + +const ( + SizeofIfMsghdr = 0x70 + SizeofIfData = 0x60 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfmaMsghdr2 = 0x14 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Data IfData +} + +type IfData struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval32 + Unused2 uint32 + Hwassist uint32 + Reserved1 uint32 + Reserved2 uint32 +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte +} + +type IfmaMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Refcount int32 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire int32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + State uint32 + Filler [3]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval32 + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [2]byte +} + +type Termios struct { + Iflag uint64 + Oflag uint64 + Cflag uint64 + Lflag uint64 + Cc [20]uint8 + Ispeed uint64 + Ospeed uint64 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x2 + AT_REMOVEDIR = 0x80 + AT_SYMLINK_FOLLOW = 0x40 + AT_SYMLINK_NOFOLLOW = 0x20 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} + +const SizeofClockinfo = 0x14 + +type Clockinfo struct { + Hz int32 + Tick int32 + Tickadj int32 + Stathz int32 + Profhz int32 +} + +type CtlInfo struct { + Id uint32 + Name [96]byte +} + +const SizeofKinfoProc = 0x288 + +type Eproc struct { + Paddr uintptr + Sess uintptr + Pcred Pcred + Ucred Ucred + Vm Vmspace + Ppid int32 + Pgid int32 + Jobc int16 + Tdev int32 + Tpgid int32 + Tsess uintptr + Wmesg [8]byte + Xsize int32 + Xrssize int16 + Xccount int16 + Xswrss int16 + Flag int32 + Login [12]byte + Spare [4]int32 + _ [4]byte +} + +type ExternProc struct { + P_starttime Timeval + P_vmspace *Vmspace + P_sigacts uintptr + P_flag int32 + P_stat int8 + P_pid int32 + P_oppid int32 + P_dupfd int32 + User_stack *int8 + Exit_thread *byte + P_debugger int32 + Sigwait int32 + P_estcpu uint32 + P_cpticks int32 + P_pctcpu uint32 + P_wchan *byte + P_wmesg *int8 + P_swtime uint32 + P_slptime uint32 + P_realtimer Itimerval + P_rtime Timeval + P_uticks uint64 + P_sticks uint64 + P_iticks uint64 + P_traceflag int32 + P_tracep uintptr + P_siglist int32 + P_textvp uintptr + P_holdcnt int32 + P_sigmask uint32 + P_sigignore uint32 + P_sigcatch uint32 + P_priority uint8 + P_usrpri uint8 + P_nice int8 + P_comm [17]byte + P_pgrp uintptr + P_addr uintptr + P_xstat uint16 + P_acflag uint16 + P_ru *Rusage +} + +type Itimerval struct { + Interval Timeval + Value Timeval +} + +type KinfoProc struct { + Proc ExternProc + Eproc Eproc +} + +type Vmspace struct { + Dummy int32 + Dummy2 *int8 + Dummy3 [5]int32 + Dummy4 [3]*int8 +} + +type Pcred struct { + Pc_lock [72]int8 + Pc_ucred uintptr + P_ruid uint32 + P_svuid uint32 + P_rgid uint32 + P_svgid uint32 + P_refcnt int32 + _ [4]byte +} + +type Ucred struct { + Ref int32 + Uid uint32 + Ngroups int16 + Groups [16]uint32 +} + +type SysvIpcPerm struct { + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint16 + _ uint16 + _ int32 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint64 + Lpid int32 + Cpid int32 + Nattch uint16 + _ [34]byte +} + +const ( + IPC_CREAT = 0x200 + IPC_EXCL = 0x400 + IPC_NOWAIT = 0x800 + IPC_PRIVATE = 0x0 +) + +const ( + IPC_RMID = 0x0 + IPC_SET = 0x1 + IPC_STAT = 0x2 +) + +const ( + SHM_RDONLY = 0x1000 + SHM_RND = 0x2000 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go new file mode 100644 index 0000000..d0ba8e9 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go @@ -0,0 +1,474 @@ +// cgo -godefs types_dragonfly.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build amd64 && dragonfly +// +build amd64,dragonfly + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur int64 + Max int64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Ino uint64 + Nlink uint32 + Dev uint32 + Mode uint16 + _1 uint16 + Uid uint32 + Gid uint32 + Rdev uint32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + _ uint32 + Flags uint32 + Gen uint32 + Lspare int32 + Blksize int64 + Qspare2 int64 +} + +type Statfs_t struct { + Spare2 int64 + Bsize int64 + Iosize int64 + Blocks int64 + Bfree int64 + Bavail int64 + Files int64 + Ffree int64 + Fsid Fsid + Owner uint32 + Type int32 + Flags int32 + Syncwrites int64 + Asyncwrites int64 + Fstypename [16]byte + Mntonname [80]byte + Syncreads int64 + Asyncreads int64 + Spares1 int16 + Mntfromname [80]byte + Spares2 int16 + Spare [2]int64 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Namlen uint16 + Type uint8 + Unused1 uint8 + Unused2 uint32 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + PathMax = 0x400 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 + Rcf uint16 + Route [16]uint16 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface 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 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x36 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [16]uint64 +} + +const ( + SizeofIfMsghdr = 0xb0 + SizeofIfData = 0xa0 + SizeofIfaMsghdr = 0x18 + SizeofIfmaMsghdr = 0x10 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x98 + SizeofRtMetrics = 0x70 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Flags int32 + Addrs int32 + Data IfData +} + +type IfData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Mtu uint64 + Metric uint64 + Link_state uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Hwassist uint64 + Oqdrops uint64 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Flags int32 + Addrs int32 + Addrflags int32 + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Flags int32 + Addrs int32 +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint64 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Pksent uint64 + Expire uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Recvpipe uint64 + Hopcount uint64 + Mssopt uint16 + Pad uint16 + Msl uint64 + Iwmaxsegs uint64 + Iwcapsegs uint64 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [6]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = 0xfffafdcd + AT_SYMLINK_NOFOLLOW = 0x1 + AT_REMOVEDIR = 0x2 + AT_EACCESS = 0x4 + AT_SYMLINK_FOLLOW = 0x8 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Utsname struct { + Sysname [32]byte + Nodename [32]byte + Release [32]byte + Version [32]byte + Machine [32]byte +} + +const SizeofClockinfo = 0x14 + +type Clockinfo struct { + Hz int32 + Tick int32 + Tickadj int32 + Stathz int32 + Profhz int32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go new file mode 100644 index 0000000..4eec078 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go @@ -0,0 +1,723 @@ +// cgo -godefs types_freebsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build 386 && freebsd +// +build 386,freebsd + +package unix + +const ( + SizeofPtr = 0x4 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x4 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Time_t int32 + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur int64 + Max int64 +} + +type _Gid_t uint32 + +const ( + _statfsVersion = 0x20140518 + _dirblksiz = 0x400 +) + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint16 + _0 int16 + Uid uint32 + Gid uint32 + _1 int32 + Rdev uint64 + _ int32 + Atim Timespec + _ int32 + Mtim Timespec + _ int32 + Ctim Timespec + _ int32 + Btim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint64 + Spare [10]uint64 +} + +type stat_freebsd11_t struct { + Dev uint32 + Ino uint32 + Mode uint16 + Nlink uint16 + Uid uint32 + Gid uint32 + Rdev uint32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Btim Timespec + _ [8]byte +} + +type Statfs_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]byte + Mntfromname [1024]byte + Mntonname [1024]byte +} + +type statfs_freebsd11_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]byte + Mntfromname [88]byte + Mntonname [88]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 + Sysid int32 +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Pad0 uint8 + Namlen uint16 + Pad1 uint16 + Name [256]int8 +} + +type dirent_freebsd11 struct { + Fileno uint32 + Reclen uint16 + Type uint8 + Namlen uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + PathMax = 0x400 +) + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [46]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Xucred struct { + Version uint32 + Uid uint32 + Ngroups int16 + Groups [16]uint32 + _ *byte +} + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface 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 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x36 + SizeofXucred = 0x50 + SizeofLinger = 0x8 + SizeofIovec = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_ATTACH = 0xa + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0xb + PTRACE_GETFPREGS = 0x23 + PTRACE_GETFSBASE = 0x47 + PTRACE_GETLWPLIST = 0xf + PTRACE_GETNUMLWPS = 0xe + PTRACE_GETREGS = 0x21 + PTRACE_GETXSTATE = 0x45 + PTRACE_IO = 0xc + PTRACE_KILL = 0x8 + PTRACE_LWPEVENTS = 0x18 + PTRACE_LWPINFO = 0xd + PTRACE_SETFPREGS = 0x24 + PTRACE_SETREGS = 0x22 + PTRACE_SINGLESTEP = 0x9 + PTRACE_TRACEME = 0x0 +) + +const ( + PIOD_READ_D = 0x1 + PIOD_WRITE_D = 0x2 + PIOD_READ_I = 0x3 + PIOD_WRITE_I = 0x4 +) + +const ( + PL_FLAG_BORN = 0x100 + PL_FLAG_EXITED = 0x200 + PL_FLAG_SI = 0x20 +) + +const ( + TRAP_BRKPT = 0x1 + TRAP_TRACE = 0x2 +) + +type PtraceLwpInfoStruct struct { + Lwpid int32 + Event int32 + Flags int32 + Sigmask Sigset_t + Siglist Sigset_t + Siginfo __Siginfo + Tdname [20]int8 + Child_pid int32 + Syscall_code uint32 + Syscall_narg uint32 +} + +type __Siginfo struct { + Signo int32 + Errno int32 + Code int32 + Pid int32 + Uid uint32 + Status int32 + Addr *byte + Value [4]byte + _ [32]byte +} + +type Sigset_t struct { + Val [4]uint32 +} + +type Reg struct { + Fs uint32 + Es uint32 + Ds uint32 + Edi uint32 + Esi uint32 + Ebp uint32 + Isp uint32 + Ebx uint32 + Edx uint32 + Ecx uint32 + Eax uint32 + Trapno uint32 + Err uint32 + Eip uint32 + Cs uint32 + Eflags uint32 + Esp uint32 + Ss uint32 + Gs uint32 +} + +type FpReg struct { + Env [7]uint32 + Acc [8][10]uint8 + Ex_sw uint32 + Pad [64]uint8 +} + +type PtraceIoDesc struct { + Op int32 + Offs *byte + Addr *byte + Len uint32 +} + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int32 + Udata *byte +} + +type FdSet struct { + Bits [32]uint32 +} + +const ( + sizeofIfMsghdr = 0xa8 + SizeofIfMsghdr = 0x60 + sizeofIfData = 0x98 + SizeofIfData = 0x50 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type ifMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ uint16 + Data ifData +} + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Data IfData +} + +type ifData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Vhid uint8 + Datalen uint16 + Mtu uint32 + Metric uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Oqdrops uint64 + Noproto uint64 + Hwassist uint64 + _ [8]byte + _ [16]byte +} + +type IfData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Spare_char1 uint8 + Spare_char2 uint8 + Datalen uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Hwassist uint32 + Epoch int32 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ uint16 + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ uint16 +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + _ uint16 + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Fmask int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Weight uint32 + Filler [3]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfZbuf = 0xc + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 + SizeofBpfZbufHeader = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfZbuf struct { + Bufa *byte + Bufb *byte + Buflen uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [2]byte +} + +type BpfZbufHeader struct { + Kernel_gen uint32 + Kernel_len uint32 + User_gen uint32 + _ [5]uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_EACCESS = 0x100 + AT_SYMLINK_NOFOLLOW = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_REMOVEDIR = 0x800 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLINIGNEOF = 0x2000 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type CapRights struct { + Rights [2]uint64 +} + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} + +const SizeofClockinfo = 0x14 + +type Clockinfo struct { + Hz int32 + Tick int32 + Spare int32 + Stathz int32 + Profhz int32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go new file mode 100644 index 0000000..7622904 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go @@ -0,0 +1,726 @@ +// cgo -godefs types_freebsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build amd64 && freebsd +// +build amd64,freebsd + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Time_t int64 + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur int64 + Max int64 +} + +type _Gid_t uint32 + +const ( + _statfsVersion = 0x20140518 + _dirblksiz = 0x400 +) + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint16 + _0 int16 + Uid uint32 + Gid uint32 + _1 int32 + Rdev uint64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Btim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint64 + Spare [10]uint64 +} + +type stat_freebsd11_t struct { + Dev uint32 + Ino uint32 + Mode uint16 + Nlink uint16 + Uid uint32 + Gid uint32 + Rdev uint32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Btim Timespec +} + +type Statfs_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]byte + Mntfromname [1024]byte + Mntonname [1024]byte +} + +type statfs_freebsd11_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]byte + Mntfromname [88]byte + Mntonname [88]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 + Sysid int32 + _ [4]byte +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Pad0 uint8 + Namlen uint16 + Pad1 uint16 + Name [256]int8 +} + +type dirent_freebsd11 struct { + Fileno uint32 + Reclen uint16 + Type uint8 + Namlen uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + PathMax = 0x400 +) + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [46]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Xucred struct { + Version uint32 + Uid uint32 + Ngroups int16 + Groups [16]uint32 + _ *byte +} + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface 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 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x36 + SizeofXucred = 0x58 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_ATTACH = 0xa + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0xb + PTRACE_GETFPREGS = 0x23 + PTRACE_GETFSBASE = 0x47 + PTRACE_GETLWPLIST = 0xf + PTRACE_GETNUMLWPS = 0xe + PTRACE_GETREGS = 0x21 + PTRACE_GETXSTATE = 0x45 + PTRACE_IO = 0xc + PTRACE_KILL = 0x8 + PTRACE_LWPEVENTS = 0x18 + PTRACE_LWPINFO = 0xd + PTRACE_SETFPREGS = 0x24 + PTRACE_SETREGS = 0x22 + PTRACE_SINGLESTEP = 0x9 + PTRACE_TRACEME = 0x0 +) + +const ( + PIOD_READ_D = 0x1 + PIOD_WRITE_D = 0x2 + PIOD_READ_I = 0x3 + PIOD_WRITE_I = 0x4 +) + +const ( + PL_FLAG_BORN = 0x100 + PL_FLAG_EXITED = 0x200 + PL_FLAG_SI = 0x20 +) + +const ( + TRAP_BRKPT = 0x1 + TRAP_TRACE = 0x2 +) + +type PtraceLwpInfoStruct struct { + Lwpid int32 + Event int32 + Flags int32 + Sigmask Sigset_t + Siglist Sigset_t + Siginfo __Siginfo + Tdname [20]int8 + Child_pid int32 + Syscall_code uint32 + Syscall_narg uint32 +} + +type __Siginfo struct { + Signo int32 + Errno int32 + Code int32 + Pid int32 + Uid uint32 + Status int32 + Addr *byte + Value [8]byte + _ [40]byte +} + +type Sigset_t struct { + Val [4]uint32 +} + +type Reg struct { + R15 int64 + R14 int64 + R13 int64 + R12 int64 + R11 int64 + R10 int64 + R9 int64 + R8 int64 + Rdi int64 + Rsi int64 + Rbp int64 + Rbx int64 + Rdx int64 + Rcx int64 + Rax int64 + Trapno uint32 + Fs uint16 + Gs uint16 + Err uint32 + Es uint16 + Ds uint16 + Rip int64 + Cs int64 + Rflags int64 + Rsp int64 + Ss int64 +} + +type FpReg struct { + Env [4]uint64 + Acc [8][16]uint8 + Xacc [16][16]uint8 + Spare [12]uint64 +} + +type PtraceIoDesc struct { + Op int32 + Offs *byte + Addr *byte + Len uint64 +} + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [16]uint64 +} + +const ( + sizeofIfMsghdr = 0xa8 + SizeofIfMsghdr = 0xa8 + sizeofIfData = 0x98 + SizeofIfData = 0x98 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x98 + SizeofRtMetrics = 0x70 +) + +type ifMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ uint16 + Data ifData +} + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Data IfData +} + +type ifData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Vhid uint8 + Datalen uint16 + Mtu uint32 + Metric uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Oqdrops uint64 + Noproto uint64 + Hwassist uint64 + _ [8]byte + _ [16]byte +} + +type IfData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Spare_char1 uint8 + Spare_char2 uint8 + Datalen uint8 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Hwassist uint64 + Epoch int64 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ uint16 + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ uint16 +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + _ uint16 + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Fmask int32 + Inits uint64 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Hopcount uint64 + Expire uint64 + Recvpipe uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Pksent uint64 + Weight uint64 + Filler [3]uint64 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfZbuf = 0x18 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x20 + SizeofBpfZbufHeader = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfZbuf struct { + Bufa *byte + Bufb *byte + Buflen uint64 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [6]byte +} + +type BpfZbufHeader struct { + Kernel_gen uint32 + Kernel_len uint32 + User_gen uint32 + _ [5]uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_EACCESS = 0x100 + AT_SYMLINK_NOFOLLOW = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_REMOVEDIR = 0x800 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLINIGNEOF = 0x2000 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type CapRights struct { + Rights [2]uint64 +} + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} + +const SizeofClockinfo = 0x14 + +type Clockinfo struct { + Hz int32 + Tick int32 + Spare int32 + Stathz int32 + Profhz int32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go new file mode 100644 index 0000000..19223ce --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go @@ -0,0 +1,707 @@ +// cgo -godefs -- -fsigned-char types_freebsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm && freebsd +// +build arm,freebsd + +package unix + +const ( + SizeofPtr = 0x4 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x4 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 + _ [4]byte +} + +type Timeval struct { + Sec int64 + Usec int32 + _ [4]byte +} + +type Time_t int32 + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur int64 + Max int64 +} + +type _Gid_t uint32 + +const ( + _statfsVersion = 0x20140518 + _dirblksiz = 0x400 +) + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint16 + _0 int16 + Uid uint32 + Gid uint32 + _1 int32 + Rdev uint64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Btim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint64 + Spare [10]uint64 +} + +type stat_freebsd11_t struct { + Dev uint32 + Ino uint32 + Mode uint16 + Nlink uint16 + Uid uint32 + Gid uint32 + Rdev uint32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Btim Timespec +} + +type Statfs_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]byte + Mntfromname [1024]byte + Mntonname [1024]byte +} + +type statfs_freebsd11_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]byte + Mntfromname [88]byte + Mntonname [88]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 + Sysid int32 + _ [4]byte +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Pad0 uint8 + Namlen uint16 + Pad1 uint16 + Name [256]int8 +} + +type dirent_freebsd11 struct { + Fileno uint32 + Reclen uint16 + Type uint8 + Namlen uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + PathMax = 0x400 +) + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [46]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Xucred struct { + Version uint32 + Uid uint32 + Ngroups int16 + Groups [16]uint32 + _ *byte +} + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface 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 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x36 + SizeofXucred = 0x50 + SizeofLinger = 0x8 + SizeofIovec = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_ATTACH = 0xa + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0xb + PTRACE_GETFPREGS = 0x23 + PTRACE_GETFSBASE = 0x47 + PTRACE_GETLWPLIST = 0xf + PTRACE_GETNUMLWPS = 0xe + PTRACE_GETREGS = 0x21 + PTRACE_GETXSTATE = 0x45 + PTRACE_IO = 0xc + PTRACE_KILL = 0x8 + PTRACE_LWPEVENTS = 0x18 + PTRACE_LWPINFO = 0xd + PTRACE_SETFPREGS = 0x24 + PTRACE_SETREGS = 0x22 + PTRACE_SINGLESTEP = 0x9 + PTRACE_TRACEME = 0x0 +) + +const ( + PIOD_READ_D = 0x1 + PIOD_WRITE_D = 0x2 + PIOD_READ_I = 0x3 + PIOD_WRITE_I = 0x4 +) + +const ( + PL_FLAG_BORN = 0x100 + PL_FLAG_EXITED = 0x200 + PL_FLAG_SI = 0x20 +) + +const ( + TRAP_BRKPT = 0x1 + TRAP_TRACE = 0x2 +) + +type PtraceLwpInfoStruct struct { + Lwpid int32 + Event int32 + Flags int32 + Sigmask Sigset_t + Siglist Sigset_t + Siginfo __Siginfo + Tdname [20]int8 + Child_pid int32 + Syscall_code uint32 + Syscall_narg uint32 +} + +type __Siginfo struct { + Signo int32 + Errno int32 + Code int32 + Pid int32 + Uid uint32 + Status int32 + Addr *byte + Value [4]byte + X_reason [32]byte +} + +type Sigset_t struct { + Val [4]uint32 +} + +type Reg struct { + R [13]uint32 + R_sp uint32 + R_lr uint32 + R_pc uint32 + R_cpsr uint32 +} + +type FpReg struct { + Fpr_fpsr uint32 + Fpr [8][3]uint32 +} + +type PtraceIoDesc struct { + Op int32 + Offs *byte + Addr *byte + Len uint32 +} + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int32 + Udata *byte +} + +type FdSet struct { + Bits [32]uint32 +} + +const ( + sizeofIfMsghdr = 0xa8 + SizeofIfMsghdr = 0x70 + sizeofIfData = 0x98 + SizeofIfData = 0x60 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type ifMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Data ifData +} + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Data IfData +} + +type ifData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Vhid uint8 + Datalen uint16 + Mtu uint32 + Metric uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Oqdrops uint64 + Noproto uint64 + Hwassist uint64 + _ [8]byte + _ [16]byte +} + +type IfData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Spare_char1 uint8 + Spare_char2 uint8 + Datalen uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Hwassist uint32 + _ [4]byte + Epoch int64 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + _ [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Fmask int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Weight uint32 + Filler [3]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfZbuf = 0xc + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x20 + SizeofBpfZbufHeader = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfZbuf struct { + Bufa *byte + Bufb *byte + Buflen uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [6]byte +} + +type BpfZbufHeader struct { + Kernel_gen uint32 + Kernel_len uint32 + User_gen uint32 + _ [5]uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_EACCESS = 0x100 + AT_SYMLINK_NOFOLLOW = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_REMOVEDIR = 0x800 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLINIGNEOF = 0x2000 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type CapRights struct { + Rights [2]uint64 +} + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} + +const SizeofClockinfo = 0x14 + +type Clockinfo struct { + Hz int32 + Tick int32 + Spare int32 + Stathz int32 + Profhz int32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go new file mode 100644 index 0000000..8e3e33f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go @@ -0,0 +1,704 @@ +// cgo -godefs -- -fsigned-char types_freebsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm64 && freebsd +// +build arm64,freebsd + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Time_t int64 + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur int64 + Max int64 +} + +type _Gid_t uint32 + +const ( + _statfsVersion = 0x20140518 + _dirblksiz = 0x400 +) + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint16 + _0 int16 + Uid uint32 + Gid uint32 + _1 int32 + Rdev uint64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Btim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint64 + Spare [10]uint64 +} + +type stat_freebsd11_t struct { + Dev uint32 + Ino uint32 + Mode uint16 + Nlink uint16 + Uid uint32 + Gid uint32 + Rdev uint32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Btim Timespec +} + +type Statfs_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]byte + Mntfromname [1024]byte + Mntonname [1024]byte +} + +type statfs_freebsd11_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]byte + Mntfromname [88]byte + Mntonname [88]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 + Sysid int32 + _ [4]byte +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Pad0 uint8 + Namlen uint16 + Pad1 uint16 + Name [256]int8 +} + +type dirent_freebsd11 struct { + Fileno uint32 + Reclen uint16 + Type uint8 + Namlen uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + PathMax = 0x400 +) + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [46]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Xucred struct { + Version uint32 + Uid uint32 + Ngroups int16 + Groups [16]uint32 + _ *byte +} + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface 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 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x36 + SizeofXucred = 0x58 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_ATTACH = 0xa + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0xb + PTRACE_GETFPREGS = 0x23 + PTRACE_GETLWPLIST = 0xf + PTRACE_GETNUMLWPS = 0xe + PTRACE_GETREGS = 0x21 + PTRACE_IO = 0xc + PTRACE_KILL = 0x8 + PTRACE_LWPEVENTS = 0x18 + PTRACE_LWPINFO = 0xd + PTRACE_SETFPREGS = 0x24 + PTRACE_SETREGS = 0x22 + PTRACE_SINGLESTEP = 0x9 + PTRACE_TRACEME = 0x0 +) + +const ( + PIOD_READ_D = 0x1 + PIOD_WRITE_D = 0x2 + PIOD_READ_I = 0x3 + PIOD_WRITE_I = 0x4 +) + +const ( + PL_FLAG_BORN = 0x100 + PL_FLAG_EXITED = 0x200 + PL_FLAG_SI = 0x20 +) + +const ( + TRAP_BRKPT = 0x1 + TRAP_TRACE = 0x2 +) + +type PtraceLwpInfoStruct struct { + Lwpid int32 + Event int32 + Flags int32 + Sigmask Sigset_t + Siglist Sigset_t + Siginfo __Siginfo + Tdname [20]int8 + Child_pid int32 + Syscall_code uint32 + Syscall_narg uint32 +} + +type __Siginfo struct { + Signo int32 + Errno int32 + Code int32 + Pid int32 + Uid uint32 + Status int32 + Addr *byte + Value [8]byte + _ [40]byte +} + +type Sigset_t struct { + Val [4]uint32 +} + +type Reg struct { + X [30]uint64 + Lr uint64 + Sp uint64 + Elr uint64 + Spsr uint32 + _ [4]byte +} + +type FpReg struct { + Q [32][16]uint8 + Sr uint32 + Cr uint32 + _ [8]byte +} + +type PtraceIoDesc struct { + Op int32 + Offs *byte + Addr *byte + Len uint64 +} + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [16]uint64 +} + +const ( + sizeofIfMsghdr = 0xa8 + SizeofIfMsghdr = 0xa8 + sizeofIfData = 0x98 + SizeofIfData = 0x98 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x98 + SizeofRtMetrics = 0x70 +) + +type ifMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ uint16 + Data ifData +} + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Data IfData +} + +type ifData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Vhid uint8 + Datalen uint16 + Mtu uint32 + Metric uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Oqdrops uint64 + Noproto uint64 + Hwassist uint64 + _ [8]byte + _ [16]byte +} + +type IfData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Spare_char1 uint8 + Spare_char2 uint8 + Datalen uint8 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Hwassist uint64 + Epoch int64 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ uint16 + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ uint16 +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + _ uint16 + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Fmask int32 + Inits uint64 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Hopcount uint64 + Expire uint64 + Recvpipe uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Pksent uint64 + Weight uint64 + Filler [3]uint64 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfZbuf = 0x18 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x20 + SizeofBpfZbufHeader = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfZbuf struct { + Bufa *byte + Bufb *byte + Buflen uint64 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [6]byte +} + +type BpfZbufHeader struct { + Kernel_gen uint32 + Kernel_len uint32 + User_gen uint32 + _ [5]uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_EACCESS = 0x100 + AT_SYMLINK_NOFOLLOW = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_REMOVEDIR = 0x800 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLINIGNEOF = 0x2000 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type CapRights struct { + Rights [2]uint64 +} + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} + +const SizeofClockinfo = 0x14 + +type Clockinfo struct { + Hz int32 + Tick int32 + Spare int32 + Stathz int32 + Profhz int32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_illumos_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_illumos_amd64.go new file mode 100644 index 0000000..4c48526 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_illumos_amd64.go @@ -0,0 +1,42 @@ +// cgo -godefs types_illumos.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build amd64 && illumos +// +build amd64,illumos + +package unix + +const ( + TUNNEWPPA = 0x540001 + TUNSETPPA = 0x540002 + + I_STR = 0x5308 + I_POP = 0x5303 + I_PUSH = 0x5302 + I_LINK = 0x530c + I_UNLINK = 0x530d + I_PLINK = 0x5316 + I_PUNLINK = 0x5317 + + IF_UNITSEL = -0x7ffb8cca +) + +type strbuf struct { + Maxlen int32 + Len int32 + Buf *int8 +} + +type Strioctl struct { + Cmd int32 + Timout int32 + Len int32 + Dp *int8 +} + +type Lifreq struct { + Name [32]int8 + Lifru1 [4]byte + Type uint32 + Lifru [336]byte +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go new file mode 100644 index 0000000..c55b617 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -0,0 +1,5581 @@ +// Code generated by mkmerge; DO NOT EDIT. + +//go:build linux +// +build linux + +package unix + +const ( + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + + _C_long_long int64 +) + +type ItimerSpec struct { + Interval Timespec + Value Timespec +} + +type Itimerval struct { + Interval Timeval + Value Timeval +} + +const ( + TIME_OK = 0x0 + TIME_INS = 0x1 + TIME_DEL = 0x2 + TIME_OOP = 0x3 + TIME_WAIT = 0x4 + TIME_ERROR = 0x5 + TIME_BAD = 0x5 +) + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + _ int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + Mnt_id uint64 + _ uint64 + _ [12]uint64 +} + +type Fsid struct { + Val [2]int32 +} + +type FileCloneRange struct { + Src_fd int64 + Src_offset uint64 + Src_length uint64 + Dest_offset uint64 +} + +type RawFileDedupeRange struct { + Src_offset uint64 + Src_length uint64 + Dest_count uint16 + Reserved1 uint16 + Reserved2 uint32 +} + +type RawFileDedupeRangeInfo struct { + Dest_fd int64 + Dest_offset uint64 + Bytes_deduped uint64 + Status int32 + Reserved uint32 +} + +const ( + SizeofRawFileDedupeRange = 0x18 + SizeofRawFileDedupeRangeInfo = 0x20 + FILE_DEDUPE_RANGE_SAME = 0x0 + FILE_DEDUPE_RANGE_DIFFERS = 0x1 +) + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type FscryptPolicyV1 struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptPolicyV2 struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + _ [4]uint8 + Master_key_identifier [16]uint8 +} + +type FscryptGetPolicyExArg struct { + Size uint64 + Policy [24]byte +} + +type FscryptKeySpecifier struct { + Type uint32 + _ uint32 + U [32]byte +} + +type FscryptAddKeyArg struct { + Key_spec FscryptKeySpecifier + Raw_size uint32 + Key_id uint32 + _ [8]uint32 +} + +type FscryptRemoveKeyArg struct { + Key_spec FscryptKeySpecifier + Removal_status_flags uint32 + _ [5]uint32 +} + +type FscryptGetKeyStatusArg struct { + Key_spec FscryptKeySpecifier + _ [6]uint32 + Status uint32 + Status_flags uint32 + User_count uint32 + _ [13]uint32 +} + +type DmIoctl struct { + Version [3]uint32 + Data_size uint32 + Data_start uint32 + Target_count uint32 + Open_count int32 + Flags uint32 + Event_nr uint32 + _ uint32 + Dev uint64 + Name [128]byte + Uuid [129]byte + Data [7]byte +} + +type DmTargetSpec struct { + Sector_start uint64 + Length uint64 + Status int32 + Next uint32 + Target_type [16]byte +} + +type DmTargetDeps struct { + Count uint32 + _ uint32 +} + +type DmTargetVersions struct { + Next uint32 + Version [3]uint32 +} + +type DmTargetMsg struct { + Sector uint64 +} + +const ( + SizeofDmIoctl = 0x138 + SizeofDmTargetSpec = 0x28 +) + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 +) + +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 RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + +type RawSockaddrRFCOMM struct { + Family uint16 + Bdaddr [6]uint8 + Channel uint8 + _ [1]byte +} + +type RawSockaddrCAN struct { + Family uint16 + Ifindex int32 + Addr [16]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Flags uint8 + Zero [3]uint8 +} + +type RawSockaddrXDP struct { + Family uint16 + Flags uint16 + Ifindex uint32 + Queue_id uint32 + Shared_umem_fd uint32 +} + +type RawSockaddrPPPoX [0x1e]byte + +type RawSockaddrTIPC struct { + Family uint16 + Addrtype uint8 + Scope int8 + Addr [12]byte +} + +type RawSockaddrL2TPIP struct { + Family uint16 + Unused uint16 + Addr [4]byte /* in_addr */ + Conn_id uint32 + _ [4]uint8 +} + +type RawSockaddrL2TPIP6 struct { + Family uint16 + Unused uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 + Conn_id uint32 +} + +type RawSockaddrIUCV struct { + Family uint16 + Port uint16 + Addr uint32 + Nodeid [8]int8 + User_id [8]int8 + Name [8]int8 +} + +type RawSockaddrNFC struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +type CanFilter struct { + Id uint32 + Mask uint32 +} + +type TCPRepairOpt struct { + Code uint32 + Val uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe + SizeofSockaddrRFCOMM = 0xa + SizeofSockaddrCAN = 0x18 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofSockaddrXDP = 0x10 + SizeofSockaddrPPPoX = 0x1e + SizeofSockaddrTIPC = 0x10 + SizeofSockaddrL2TPIP = 0x10 + SizeofSockaddrL2TPIP6 = 0x20 + SizeofSockaddrIUCV = 0x20 + SizeofSockaddrNFC = 0x10 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 + SizeofCanFilter = 0x8 + SizeofTCPRepairOpt = 0x8 +) + +const ( + NDA_UNSPEC = 0x0 + NDA_DST = 0x1 + NDA_LLADDR = 0x2 + NDA_CACHEINFO = 0x3 + NDA_PROBES = 0x4 + NDA_VLAN = 0x5 + NDA_PORT = 0x6 + NDA_VNI = 0x7 + NDA_IFINDEX = 0x8 + NDA_MASTER = 0x9 + NDA_LINK_NETNSID = 0xa + NDA_SRC_VNI = 0xb + NTF_USE = 0x1 + NTF_SELF = 0x2 + NTF_MASTER = 0x4 + NTF_PROXY = 0x8 + NTF_EXT_LEARNED = 0x10 + NTF_OFFLOADED = 0x20 + NTF_ROUTER = 0x80 + NUD_INCOMPLETE = 0x1 + NUD_REACHABLE = 0x2 + NUD_STALE = 0x4 + NUD_DELAY = 0x8 + NUD_PROBE = 0x10 + NUD_FAILED = 0x20 + NUD_NOARP = 0x40 + NUD_PERMANENT = 0x80 + NUD_NONE = 0x0 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFA_FLAGS = 0x8 + IFA_RT_PRIORITY = 0x9 + IFA_TARGET_NETNSID = 0xa + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofIfaCacheinfo = 0x10 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 + SizeofNdUseroptmsg = 0x10 + SizeofNdMsg = 0xc +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + _ uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type IfaCacheinfo struct { + Prefered uint32 + Valid uint32 + Cstamp uint32 + Tstamp uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +type NdUseroptmsg struct { + Family uint8 + Pad1 uint8 + Opts_len uint16 + Ifindex int32 + Icmp_type uint8 + Icmp_code uint8 + Pad2 uint16 + Pad3 uint32 +} + +type NdMsg struct { + Family uint8 + Pad1 uint8 + Pad2 uint16 + Ifindex int32 + State uint16 + Flags uint8 + Type uint8 +} + +const ( + ICMP_FILTER = 0x1 + + ICMPV6_FILTER = 0x1 + ICMPV6_FILTER_BLOCK = 0x1 + ICMPV6_FILTER_BLOCKOTHERS = 0x3 + ICMPV6_FILTER_PASS = 0x2 + ICMPV6_FILTER_PASSONLY = 0x4 +) + +const ( + SizeofSockFilter = 0x8 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +const SI_LOAD_SHIFT = 0x10 + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +const ( + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + + AT_RECURSIVE = 0x8000 + + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 + + AT_EACCESS = 0x200 + + OPEN_TREE_CLONE = 0x1 + + MOVE_MOUNT_F_SYMLINKS = 0x1 + MOVE_MOUNT_F_AUTOMOUNTS = 0x2 + MOVE_MOUNT_F_EMPTY_PATH = 0x4 + MOVE_MOUNT_T_SYMLINKS = 0x10 + MOVE_MOUNT_T_AUTOMOUNTS = 0x20 + MOVE_MOUNT_T_EMPTY_PATH = 0x40 + MOVE_MOUNT_SET_GROUP = 0x100 +) + +type OpenHow struct { + Flags uint64 + Mode uint64 + Resolve uint64 +} + +const SizeofOpenHow = 0x18 + +const ( + RESOLVE_BENEATH = 0x8 + RESOLVE_IN_ROOT = 0x10 + RESOLVE_NO_MAGICLINKS = 0x2 + RESOLVE_NO_SYMLINKS = 0x4 + RESOLVE_NO_XDEV = 0x1 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type SignalfdSiginfo struct { + Signo uint32 + Errno int32 + Code int32 + Pid uint32 + Uid uint32 + Fd int32 + Tid uint32 + Band uint32 + Overrun uint32 + Trapno uint32 + Status int32 + Int int32 + Ptr uint64 + Utime uint64 + Stime uint64 + Addr uint64 + Addr_lsb uint16 + _ uint16 + Syscall int32 + Call_addr uint64 + Arch uint32 + _ [28]uint8 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_CMD_GETPOLICY = 0xa + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_POLICY = 0x8 + CTRL_ATTR_OP_POLICY = 0x9 + CTRL_ATTR_OP = 0xa + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 + CTRL_ATTR_POLICY_UNSPEC = 0x0 + CTRL_ATTR_POLICY_DO = 0x1 + CTRL_ATTR_POLICY_DUMP = 0x2 + CTRL_ATTR_POLICY_DUMP_MAX = 0x2 +) + +const ( + _CPU_SETSIZE = 0x400 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) + +type PerfEventAttr struct { + Type uint32 + Size uint32 + Config uint64 + Sample uint64 + Sample_type uint64 + Read_format uint64 + Bits uint64 + Wakeup uint32 + Bp_type uint32 + Ext1 uint64 + Ext2 uint64 + Branch_sample_type uint64 + Sample_regs_user uint64 + Sample_stack_user uint32 + Clockid int32 + Sample_regs_intr uint64 + Aux_watermark uint32 + Sample_max_stack uint16 + _ uint16 +} + +type PerfEventMmapPage struct { + Version uint32 + Compat_version uint32 + Lock uint32 + Index uint32 + Offset int64 + Time_enabled uint64 + Time_running uint64 + Capabilities uint64 + Pmc_width uint16 + Time_shift uint16 + Time_mult uint32 + Time_offset uint64 + Time_zero uint64 + Size uint32 + _ uint32 + Time_cycles uint64 + Time_mask uint64 + _ [928]uint8 + Data_head uint64 + Data_tail uint64 + Data_offset uint64 + Data_size uint64 + Aux_head uint64 + Aux_tail uint64 + Aux_offset uint64 + Aux_size uint64 +} + +const ( + PerfBitDisabled uint64 = CBitFieldMaskBit0 + PerfBitInherit = CBitFieldMaskBit1 + PerfBitPinned = CBitFieldMaskBit2 + PerfBitExclusive = CBitFieldMaskBit3 + PerfBitExcludeUser = CBitFieldMaskBit4 + PerfBitExcludeKernel = CBitFieldMaskBit5 + PerfBitExcludeHv = CBitFieldMaskBit6 + PerfBitExcludeIdle = CBitFieldMaskBit7 + PerfBitMmap = CBitFieldMaskBit8 + PerfBitComm = CBitFieldMaskBit9 + PerfBitFreq = CBitFieldMaskBit10 + PerfBitInheritStat = CBitFieldMaskBit11 + PerfBitEnableOnExec = CBitFieldMaskBit12 + PerfBitTask = CBitFieldMaskBit13 + PerfBitWatermark = CBitFieldMaskBit14 + PerfBitPreciseIPBit1 = CBitFieldMaskBit15 + PerfBitPreciseIPBit2 = CBitFieldMaskBit16 + PerfBitMmapData = CBitFieldMaskBit17 + PerfBitSampleIDAll = CBitFieldMaskBit18 + PerfBitExcludeHost = CBitFieldMaskBit19 + PerfBitExcludeGuest = CBitFieldMaskBit20 + PerfBitExcludeCallchainKernel = CBitFieldMaskBit21 + PerfBitExcludeCallchainUser = CBitFieldMaskBit22 + PerfBitMmap2 = CBitFieldMaskBit23 + PerfBitCommExec = CBitFieldMaskBit24 + PerfBitUseClockID = CBitFieldMaskBit25 + PerfBitContextSwitch = CBitFieldMaskBit26 +) + +const ( + PERF_TYPE_HARDWARE = 0x0 + PERF_TYPE_SOFTWARE = 0x1 + PERF_TYPE_TRACEPOINT = 0x2 + PERF_TYPE_HW_CACHE = 0x3 + PERF_TYPE_RAW = 0x4 + PERF_TYPE_BREAKPOINT = 0x5 + PERF_TYPE_MAX = 0x6 + PERF_COUNT_HW_CPU_CYCLES = 0x0 + PERF_COUNT_HW_INSTRUCTIONS = 0x1 + PERF_COUNT_HW_CACHE_REFERENCES = 0x2 + PERF_COUNT_HW_CACHE_MISSES = 0x3 + PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 0x4 + PERF_COUNT_HW_BRANCH_MISSES = 0x5 + PERF_COUNT_HW_BUS_CYCLES = 0x6 + PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7 + PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 0x8 + PERF_COUNT_HW_REF_CPU_CYCLES = 0x9 + PERF_COUNT_HW_MAX = 0xa + PERF_COUNT_HW_CACHE_L1D = 0x0 + PERF_COUNT_HW_CACHE_L1I = 0x1 + PERF_COUNT_HW_CACHE_LL = 0x2 + PERF_COUNT_HW_CACHE_DTLB = 0x3 + PERF_COUNT_HW_CACHE_ITLB = 0x4 + PERF_COUNT_HW_CACHE_BPU = 0x5 + PERF_COUNT_HW_CACHE_NODE = 0x6 + PERF_COUNT_HW_CACHE_MAX = 0x7 + PERF_COUNT_HW_CACHE_OP_READ = 0x0 + PERF_COUNT_HW_CACHE_OP_WRITE = 0x1 + PERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2 + PERF_COUNT_HW_CACHE_OP_MAX = 0x3 + PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0 + PERF_COUNT_HW_CACHE_RESULT_MISS = 0x1 + PERF_COUNT_HW_CACHE_RESULT_MAX = 0x2 + PERF_COUNT_SW_CPU_CLOCK = 0x0 + PERF_COUNT_SW_TASK_CLOCK = 0x1 + PERF_COUNT_SW_PAGE_FAULTS = 0x2 + PERF_COUNT_SW_CONTEXT_SWITCHES = 0x3 + PERF_COUNT_SW_CPU_MIGRATIONS = 0x4 + PERF_COUNT_SW_PAGE_FAULTS_MIN = 0x5 + PERF_COUNT_SW_PAGE_FAULTS_MAJ = 0x6 + PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 + PERF_COUNT_SW_EMULATION_FAULTS = 0x8 + PERF_COUNT_SW_DUMMY = 0x9 + PERF_COUNT_SW_BPF_OUTPUT = 0xa + PERF_COUNT_SW_MAX = 0xc + PERF_SAMPLE_IP = 0x1 + PERF_SAMPLE_TID = 0x2 + PERF_SAMPLE_TIME = 0x4 + PERF_SAMPLE_ADDR = 0x8 + PERF_SAMPLE_READ = 0x10 + PERF_SAMPLE_CALLCHAIN = 0x20 + PERF_SAMPLE_ID = 0x40 + PERF_SAMPLE_CPU = 0x80 + PERF_SAMPLE_PERIOD = 0x100 + PERF_SAMPLE_STREAM_ID = 0x200 + PERF_SAMPLE_RAW = 0x400 + PERF_SAMPLE_BRANCH_STACK = 0x800 + PERF_SAMPLE_REGS_USER = 0x1000 + PERF_SAMPLE_STACK_USER = 0x2000 + PERF_SAMPLE_WEIGHT = 0x4000 + PERF_SAMPLE_DATA_SRC = 0x8000 + PERF_SAMPLE_IDENTIFIER = 0x10000 + PERF_SAMPLE_TRANSACTION = 0x20000 + PERF_SAMPLE_REGS_INTR = 0x40000 + PERF_SAMPLE_PHYS_ADDR = 0x80000 + PERF_SAMPLE_AUX = 0x100000 + PERF_SAMPLE_CGROUP = 0x200000 + PERF_SAMPLE_DATA_PAGE_SIZE = 0x400000 + PERF_SAMPLE_CODE_PAGE_SIZE = 0x800000 + PERF_SAMPLE_WEIGHT_STRUCT = 0x1000000 + PERF_SAMPLE_MAX = 0x2000000 + PERF_SAMPLE_BRANCH_USER_SHIFT = 0x0 + PERF_SAMPLE_BRANCH_KERNEL_SHIFT = 0x1 + PERF_SAMPLE_BRANCH_HV_SHIFT = 0x2 + PERF_SAMPLE_BRANCH_ANY_SHIFT = 0x3 + PERF_SAMPLE_BRANCH_ANY_CALL_SHIFT = 0x4 + PERF_SAMPLE_BRANCH_ANY_RETURN_SHIFT = 0x5 + PERF_SAMPLE_BRANCH_IND_CALL_SHIFT = 0x6 + PERF_SAMPLE_BRANCH_ABORT_TX_SHIFT = 0x7 + PERF_SAMPLE_BRANCH_IN_TX_SHIFT = 0x8 + PERF_SAMPLE_BRANCH_NO_TX_SHIFT = 0x9 + PERF_SAMPLE_BRANCH_COND_SHIFT = 0xa + PERF_SAMPLE_BRANCH_CALL_STACK_SHIFT = 0xb + PERF_SAMPLE_BRANCH_IND_JUMP_SHIFT = 0xc + PERF_SAMPLE_BRANCH_CALL_SHIFT = 0xd + PERF_SAMPLE_BRANCH_NO_FLAGS_SHIFT = 0xe + PERF_SAMPLE_BRANCH_NO_CYCLES_SHIFT = 0xf + PERF_SAMPLE_BRANCH_TYPE_SAVE_SHIFT = 0x10 + PERF_SAMPLE_BRANCH_HW_INDEX_SHIFT = 0x11 + PERF_SAMPLE_BRANCH_MAX_SHIFT = 0x12 + PERF_SAMPLE_BRANCH_USER = 0x1 + PERF_SAMPLE_BRANCH_KERNEL = 0x2 + PERF_SAMPLE_BRANCH_HV = 0x4 + PERF_SAMPLE_BRANCH_ANY = 0x8 + PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 + PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 + PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + PERF_SAMPLE_BRANCH_ABORT_TX = 0x80 + PERF_SAMPLE_BRANCH_IN_TX = 0x100 + PERF_SAMPLE_BRANCH_NO_TX = 0x200 + PERF_SAMPLE_BRANCH_COND = 0x400 + PERF_SAMPLE_BRANCH_CALL_STACK = 0x800 + PERF_SAMPLE_BRANCH_IND_JUMP = 0x1000 + PERF_SAMPLE_BRANCH_CALL = 0x2000 + PERF_SAMPLE_BRANCH_NO_FLAGS = 0x4000 + PERF_SAMPLE_BRANCH_NO_CYCLES = 0x8000 + PERF_SAMPLE_BRANCH_TYPE_SAVE = 0x10000 + PERF_SAMPLE_BRANCH_HW_INDEX = 0x20000 + PERF_SAMPLE_BRANCH_MAX = 0x40000 + PERF_BR_UNKNOWN = 0x0 + PERF_BR_COND = 0x1 + PERF_BR_UNCOND = 0x2 + PERF_BR_IND = 0x3 + PERF_BR_CALL = 0x4 + PERF_BR_IND_CALL = 0x5 + PERF_BR_RET = 0x6 + PERF_BR_SYSCALL = 0x7 + PERF_BR_SYSRET = 0x8 + PERF_BR_COND_CALL = 0x9 + PERF_BR_COND_RET = 0xa + PERF_BR_MAX = 0xb + PERF_SAMPLE_REGS_ABI_NONE = 0x0 + PERF_SAMPLE_REGS_ABI_32 = 0x1 + PERF_SAMPLE_REGS_ABI_64 = 0x2 + PERF_TXN_ELISION = 0x1 + PERF_TXN_TRANSACTION = 0x2 + PERF_TXN_SYNC = 0x4 + PERF_TXN_ASYNC = 0x8 + PERF_TXN_RETRY = 0x10 + PERF_TXN_CONFLICT = 0x20 + PERF_TXN_CAPACITY_WRITE = 0x40 + PERF_TXN_CAPACITY_READ = 0x80 + PERF_TXN_MAX = 0x100 + PERF_TXN_ABORT_MASK = -0x100000000 + PERF_TXN_ABORT_SHIFT = 0x20 + PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 + PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 + PERF_FORMAT_ID = 0x4 + PERF_FORMAT_GROUP = 0x8 + PERF_FORMAT_MAX = 0x10 + PERF_IOC_FLAG_GROUP = 0x1 + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP2 = 0xa + PERF_RECORD_AUX = 0xb + PERF_RECORD_ITRACE_START = 0xc + PERF_RECORD_LOST_SAMPLES = 0xd + PERF_RECORD_SWITCH = 0xe + PERF_RECORD_SWITCH_CPU_WIDE = 0xf + PERF_RECORD_NAMESPACES = 0x10 + PERF_RECORD_KSYMBOL = 0x11 + PERF_RECORD_BPF_EVENT = 0x12 + PERF_RECORD_CGROUP = 0x13 + PERF_RECORD_TEXT_POKE = 0x14 + PERF_RECORD_AUX_OUTPUT_HW_ID = 0x15 + PERF_RECORD_MAX = 0x16 + PERF_RECORD_KSYMBOL_TYPE_UNKNOWN = 0x0 + PERF_RECORD_KSYMBOL_TYPE_BPF = 0x1 + PERF_RECORD_KSYMBOL_TYPE_OOL = 0x2 + PERF_RECORD_KSYMBOL_TYPE_MAX = 0x3 + PERF_BPF_EVENT_UNKNOWN = 0x0 + PERF_BPF_EVENT_PROG_LOAD = 0x1 + PERF_BPF_EVENT_PROG_UNLOAD = 0x2 + PERF_BPF_EVENT_MAX = 0x3 + PERF_CONTEXT_HV = -0x20 + PERF_CONTEXT_KERNEL = -0x80 + PERF_CONTEXT_USER = -0x200 + PERF_CONTEXT_GUEST = -0x800 + PERF_CONTEXT_GUEST_KERNEL = -0x880 + PERF_CONTEXT_GUEST_USER = -0xa00 + PERF_CONTEXT_MAX = -0xfff +) + +type TCPMD5Sig struct { + Addr SockaddrStorage + Flags uint8 + Prefixlen uint8 + Keylen uint16 + _ uint32 + Key [80]uint8 +} + +type HDDriveCmdHdr struct { + Command uint8 + Number uint8 + Feature uint8 + Count uint8 +} + +type HDDriveID struct { + Config uint16 + Cyls uint16 + Reserved2 uint16 + Heads uint16 + Track_bytes uint16 + Sector_bytes uint16 + Sectors uint16 + Vendor0 uint16 + Vendor1 uint16 + Vendor2 uint16 + Serial_no [20]uint8 + Buf_type uint16 + Buf_size uint16 + Ecc_bytes uint16 + Fw_rev [8]uint8 + Model [40]uint8 + Max_multsect uint8 + Vendor3 uint8 + Dword_io uint16 + Vendor4 uint8 + Capability uint8 + Reserved50 uint16 + Vendor5 uint8 + TPIO uint8 + Vendor6 uint8 + TDMA uint8 + Field_valid uint16 + Cur_cyls uint16 + Cur_heads uint16 + Cur_sectors uint16 + Cur_capacity0 uint16 + Cur_capacity1 uint16 + Multsect uint8 + Multsect_valid uint8 + Lba_capacity uint32 + Dma_1word uint16 + Dma_mword uint16 + Eide_pio_modes uint16 + Eide_dma_min uint16 + Eide_dma_time uint16 + Eide_pio uint16 + Eide_pio_iordy uint16 + Words69_70 [2]uint16 + Words71_74 [4]uint16 + Queue_depth uint16 + Words76_79 [4]uint16 + Major_rev_num uint16 + Minor_rev_num uint16 + Command_set_1 uint16 + Command_set_2 uint16 + Cfsse uint16 + Cfs_enable_1 uint16 + Cfs_enable_2 uint16 + Csf_default uint16 + Dma_ultra uint16 + Trseuc uint16 + TrsEuc uint16 + CurAPMvalues uint16 + Mprc uint16 + Hw_config uint16 + Acoustic uint16 + Msrqs uint16 + Sxfert uint16 + Sal uint16 + Spg uint32 + Lba_capacity_2 uint64 + Words104_125 [22]uint16 + Last_lun uint16 + Word127 uint16 + Dlf uint16 + Csfo uint16 + Words130_155 [26]uint16 + Word156 uint16 + Words157_159 [3]uint16 + Cfa_power uint16 + Words161_175 [15]uint16 + Words176_205 [30]uint16 + Words206_254 [49]uint16 + Integrity_word uint16 +} + +const ( + ST_MANDLOCK = 0x40 + ST_NOATIME = 0x400 + ST_NODEV = 0x4 + ST_NODIRATIME = 0x800 + ST_NOEXEC = 0x8 + ST_NOSUID = 0x2 + ST_RDONLY = 0x1 + ST_RELATIME = 0x1000 + ST_SYNCHRONOUS = 0x10 +) + +type Tpacket2Hdr struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Nsec uint32 + Vlan_tci uint16 + Vlan_tpid uint16 + _ [4]uint8 +} + +type Tpacket3Hdr struct { + Next_offset uint32 + Sec uint32 + Nsec uint32 + Snaplen uint32 + Len uint32 + Status uint32 + Mac uint16 + Net uint16 + Hv1 TpacketHdrVariant1 + _ [8]uint8 +} + +type TpacketHdrVariant1 struct { + Rxhash uint32 + Vlan_tci uint32 + Vlan_tpid uint16 + _ uint16 +} + +type TpacketBlockDesc struct { + Version uint32 + To_priv uint32 + Hdr [40]byte +} + +type TpacketBDTS struct { + Sec uint32 + Usec uint32 +} + +type TpacketHdrV1 struct { + Block_status uint32 + Num_pkts uint32 + Offset_to_first_pkt uint32 + Blk_len uint32 + Seq_num uint64 + Ts_first_pkt TpacketBDTS + Ts_last_pkt TpacketBDTS +} + +type TpacketReq struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 +} + +type TpacketReq3 struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 + Retire_blk_tov uint32 + Sizeof_priv uint32 + Feature_req_word uint32 +} + +type TpacketStats struct { + Packets uint32 + Drops uint32 +} + +type TpacketStatsV3 struct { + Packets uint32 + Drops uint32 + Freeze_q_cnt uint32 +} + +type TpacketAuxdata struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Vlan_tci uint16 + Vlan_tpid uint16 +} + +const ( + TPACKET_V1 = 0x0 + TPACKET_V2 = 0x1 + TPACKET_V3 = 0x2 +) + +const ( + SizeofTpacket2Hdr = 0x20 + SizeofTpacket3Hdr = 0x30 + + SizeofTpacketStats = 0x8 + SizeofTpacketStatsV3 = 0xc +) + +const ( + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_TARGET_NETNSID = 0x2e + IFLA_CARRIER_UP_COUNT = 0x2f + IFLA_CARRIER_DOWN_COUNT = 0x30 + IFLA_NEW_IFINDEX = 0x31 + IFLA_MIN_MTU = 0x32 + IFLA_MAX_MTU = 0x33 + IFLA_PROP_LIST = 0x34 + IFLA_ALT_IFNAME = 0x35 + IFLA_PERM_ADDRESS = 0x36 + IFLA_PROTO_DOWN_REASON = 0x37 + IFLA_PROTO_DOWN_REASON_UNSPEC = 0x0 + IFLA_PROTO_DOWN_REASON_MASK = 0x1 + IFLA_PROTO_DOWN_REASON_VALUE = 0x2 + IFLA_PROTO_DOWN_REASON_MAX = 0x2 + IFLA_INET_UNSPEC = 0x0 + IFLA_INET_CONF = 0x1 + IFLA_INET6_UNSPEC = 0x0 + IFLA_INET6_FLAGS = 0x1 + IFLA_INET6_CONF = 0x2 + IFLA_INET6_STATS = 0x3 + IFLA_INET6_MCAST = 0x4 + IFLA_INET6_CACHEINFO = 0x5 + IFLA_INET6_ICMP6STATS = 0x6 + IFLA_INET6_TOKEN = 0x7 + IFLA_INET6_ADDR_GEN_MODE = 0x8 + IFLA_BR_UNSPEC = 0x0 + IFLA_BR_FORWARD_DELAY = 0x1 + IFLA_BR_HELLO_TIME = 0x2 + IFLA_BR_MAX_AGE = 0x3 + IFLA_BR_AGEING_TIME = 0x4 + IFLA_BR_STP_STATE = 0x5 + IFLA_BR_PRIORITY = 0x6 + IFLA_BR_VLAN_FILTERING = 0x7 + IFLA_BR_VLAN_PROTOCOL = 0x8 + IFLA_BR_GROUP_FWD_MASK = 0x9 + IFLA_BR_ROOT_ID = 0xa + IFLA_BR_BRIDGE_ID = 0xb + IFLA_BR_ROOT_PORT = 0xc + IFLA_BR_ROOT_PATH_COST = 0xd + IFLA_BR_TOPOLOGY_CHANGE = 0xe + IFLA_BR_TOPOLOGY_CHANGE_DETECTED = 0xf + IFLA_BR_HELLO_TIMER = 0x10 + IFLA_BR_TCN_TIMER = 0x11 + IFLA_BR_TOPOLOGY_CHANGE_TIMER = 0x12 + IFLA_BR_GC_TIMER = 0x13 + IFLA_BR_GROUP_ADDR = 0x14 + IFLA_BR_FDB_FLUSH = 0x15 + IFLA_BR_MCAST_ROUTER = 0x16 + IFLA_BR_MCAST_SNOOPING = 0x17 + IFLA_BR_MCAST_QUERY_USE_IFADDR = 0x18 + IFLA_BR_MCAST_QUERIER = 0x19 + IFLA_BR_MCAST_HASH_ELASTICITY = 0x1a + IFLA_BR_MCAST_HASH_MAX = 0x1b + IFLA_BR_MCAST_LAST_MEMBER_CNT = 0x1c + IFLA_BR_MCAST_STARTUP_QUERY_CNT = 0x1d + IFLA_BR_MCAST_LAST_MEMBER_INTVL = 0x1e + IFLA_BR_MCAST_MEMBERSHIP_INTVL = 0x1f + IFLA_BR_MCAST_QUERIER_INTVL = 0x20 + IFLA_BR_MCAST_QUERY_INTVL = 0x21 + IFLA_BR_MCAST_QUERY_RESPONSE_INTVL = 0x22 + IFLA_BR_MCAST_STARTUP_QUERY_INTVL = 0x23 + IFLA_BR_NF_CALL_IPTABLES = 0x24 + IFLA_BR_NF_CALL_IP6TABLES = 0x25 + IFLA_BR_NF_CALL_ARPTABLES = 0x26 + IFLA_BR_VLAN_DEFAULT_PVID = 0x27 + IFLA_BR_PAD = 0x28 + IFLA_BR_VLAN_STATS_ENABLED = 0x29 + IFLA_BR_MCAST_STATS_ENABLED = 0x2a + IFLA_BR_MCAST_IGMP_VERSION = 0x2b + IFLA_BR_MCAST_MLD_VERSION = 0x2c + IFLA_BR_VLAN_STATS_PER_PORT = 0x2d + IFLA_BR_MULTI_BOOLOPT = 0x2e + IFLA_BRPORT_UNSPEC = 0x0 + IFLA_BRPORT_STATE = 0x1 + IFLA_BRPORT_PRIORITY = 0x2 + IFLA_BRPORT_COST = 0x3 + IFLA_BRPORT_MODE = 0x4 + IFLA_BRPORT_GUARD = 0x5 + IFLA_BRPORT_PROTECT = 0x6 + IFLA_BRPORT_FAST_LEAVE = 0x7 + IFLA_BRPORT_LEARNING = 0x8 + IFLA_BRPORT_UNICAST_FLOOD = 0x9 + IFLA_BRPORT_PROXYARP = 0xa + IFLA_BRPORT_LEARNING_SYNC = 0xb + IFLA_BRPORT_PROXYARP_WIFI = 0xc + IFLA_BRPORT_ROOT_ID = 0xd + IFLA_BRPORT_BRIDGE_ID = 0xe + IFLA_BRPORT_DESIGNATED_PORT = 0xf + IFLA_BRPORT_DESIGNATED_COST = 0x10 + IFLA_BRPORT_ID = 0x11 + IFLA_BRPORT_NO = 0x12 + IFLA_BRPORT_TOPOLOGY_CHANGE_ACK = 0x13 + IFLA_BRPORT_CONFIG_PENDING = 0x14 + IFLA_BRPORT_MESSAGE_AGE_TIMER = 0x15 + IFLA_BRPORT_FORWARD_DELAY_TIMER = 0x16 + IFLA_BRPORT_HOLD_TIMER = 0x17 + IFLA_BRPORT_FLUSH = 0x18 + IFLA_BRPORT_MULTICAST_ROUTER = 0x19 + IFLA_BRPORT_PAD = 0x1a + IFLA_BRPORT_MCAST_FLOOD = 0x1b + IFLA_BRPORT_MCAST_TO_UCAST = 0x1c + IFLA_BRPORT_VLAN_TUNNEL = 0x1d + IFLA_BRPORT_BCAST_FLOOD = 0x1e + IFLA_BRPORT_GROUP_FWD_MASK = 0x1f + IFLA_BRPORT_NEIGH_SUPPRESS = 0x20 + IFLA_BRPORT_ISOLATED = 0x21 + IFLA_BRPORT_BACKUP_PORT = 0x22 + IFLA_BRPORT_MRP_RING_OPEN = 0x23 + IFLA_BRPORT_MRP_IN_OPEN = 0x24 + IFLA_INFO_UNSPEC = 0x0 + IFLA_INFO_KIND = 0x1 + IFLA_INFO_DATA = 0x2 + IFLA_INFO_XSTATS = 0x3 + IFLA_INFO_SLAVE_KIND = 0x4 + IFLA_INFO_SLAVE_DATA = 0x5 + IFLA_VLAN_UNSPEC = 0x0 + IFLA_VLAN_ID = 0x1 + IFLA_VLAN_FLAGS = 0x2 + IFLA_VLAN_EGRESS_QOS = 0x3 + IFLA_VLAN_INGRESS_QOS = 0x4 + IFLA_VLAN_PROTOCOL = 0x5 + IFLA_VLAN_QOS_UNSPEC = 0x0 + IFLA_VLAN_QOS_MAPPING = 0x1 + IFLA_MACVLAN_UNSPEC = 0x0 + IFLA_MACVLAN_MODE = 0x1 + IFLA_MACVLAN_FLAGS = 0x2 + IFLA_MACVLAN_MACADDR_MODE = 0x3 + IFLA_MACVLAN_MACADDR = 0x4 + IFLA_MACVLAN_MACADDR_DATA = 0x5 + IFLA_MACVLAN_MACADDR_COUNT = 0x6 + IFLA_VRF_UNSPEC = 0x0 + IFLA_VRF_TABLE = 0x1 + IFLA_VRF_PORT_UNSPEC = 0x0 + IFLA_VRF_PORT_TABLE = 0x1 + IFLA_MACSEC_UNSPEC = 0x0 + IFLA_MACSEC_SCI = 0x1 + IFLA_MACSEC_PORT = 0x2 + IFLA_MACSEC_ICV_LEN = 0x3 + IFLA_MACSEC_CIPHER_SUITE = 0x4 + IFLA_MACSEC_WINDOW = 0x5 + IFLA_MACSEC_ENCODING_SA = 0x6 + IFLA_MACSEC_ENCRYPT = 0x7 + IFLA_MACSEC_PROTECT = 0x8 + IFLA_MACSEC_INC_SCI = 0x9 + IFLA_MACSEC_ES = 0xa + IFLA_MACSEC_SCB = 0xb + IFLA_MACSEC_REPLAY_PROTECT = 0xc + IFLA_MACSEC_VALIDATION = 0xd + IFLA_MACSEC_PAD = 0xe + IFLA_MACSEC_OFFLOAD = 0xf + IFLA_XFRM_UNSPEC = 0x0 + IFLA_XFRM_LINK = 0x1 + IFLA_XFRM_IF_ID = 0x2 + IFLA_IPVLAN_UNSPEC = 0x0 + IFLA_IPVLAN_MODE = 0x1 + IFLA_IPVLAN_FLAGS = 0x2 + IFLA_VXLAN_UNSPEC = 0x0 + IFLA_VXLAN_ID = 0x1 + IFLA_VXLAN_GROUP = 0x2 + IFLA_VXLAN_LINK = 0x3 + IFLA_VXLAN_LOCAL = 0x4 + IFLA_VXLAN_TTL = 0x5 + IFLA_VXLAN_TOS = 0x6 + IFLA_VXLAN_LEARNING = 0x7 + IFLA_VXLAN_AGEING = 0x8 + IFLA_VXLAN_LIMIT = 0x9 + IFLA_VXLAN_PORT_RANGE = 0xa + IFLA_VXLAN_PROXY = 0xb + IFLA_VXLAN_RSC = 0xc + IFLA_VXLAN_L2MISS = 0xd + IFLA_VXLAN_L3MISS = 0xe + IFLA_VXLAN_PORT = 0xf + IFLA_VXLAN_GROUP6 = 0x10 + IFLA_VXLAN_LOCAL6 = 0x11 + IFLA_VXLAN_UDP_CSUM = 0x12 + IFLA_VXLAN_UDP_ZERO_CSUM6_TX = 0x13 + IFLA_VXLAN_UDP_ZERO_CSUM6_RX = 0x14 + IFLA_VXLAN_REMCSUM_TX = 0x15 + IFLA_VXLAN_REMCSUM_RX = 0x16 + IFLA_VXLAN_GBP = 0x17 + IFLA_VXLAN_REMCSUM_NOPARTIAL = 0x18 + IFLA_VXLAN_COLLECT_METADATA = 0x19 + IFLA_VXLAN_LABEL = 0x1a + IFLA_VXLAN_GPE = 0x1b + IFLA_VXLAN_TTL_INHERIT = 0x1c + IFLA_VXLAN_DF = 0x1d + IFLA_GENEVE_UNSPEC = 0x0 + IFLA_GENEVE_ID = 0x1 + IFLA_GENEVE_REMOTE = 0x2 + IFLA_GENEVE_TTL = 0x3 + IFLA_GENEVE_TOS = 0x4 + IFLA_GENEVE_PORT = 0x5 + IFLA_GENEVE_COLLECT_METADATA = 0x6 + IFLA_GENEVE_REMOTE6 = 0x7 + IFLA_GENEVE_UDP_CSUM = 0x8 + IFLA_GENEVE_UDP_ZERO_CSUM6_TX = 0x9 + IFLA_GENEVE_UDP_ZERO_CSUM6_RX = 0xa + IFLA_GENEVE_LABEL = 0xb + IFLA_GENEVE_TTL_INHERIT = 0xc + IFLA_GENEVE_DF = 0xd + IFLA_BAREUDP_UNSPEC = 0x0 + IFLA_BAREUDP_PORT = 0x1 + IFLA_BAREUDP_ETHERTYPE = 0x2 + IFLA_BAREUDP_SRCPORT_MIN = 0x3 + IFLA_BAREUDP_MULTIPROTO_MODE = 0x4 + IFLA_PPP_UNSPEC = 0x0 + IFLA_PPP_DEV_FD = 0x1 + IFLA_GTP_UNSPEC = 0x0 + IFLA_GTP_FD0 = 0x1 + IFLA_GTP_FD1 = 0x2 + IFLA_GTP_PDP_HASHSIZE = 0x3 + IFLA_GTP_ROLE = 0x4 + IFLA_BOND_UNSPEC = 0x0 + IFLA_BOND_MODE = 0x1 + IFLA_BOND_ACTIVE_SLAVE = 0x2 + IFLA_BOND_MIIMON = 0x3 + IFLA_BOND_UPDELAY = 0x4 + IFLA_BOND_DOWNDELAY = 0x5 + IFLA_BOND_USE_CARRIER = 0x6 + IFLA_BOND_ARP_INTERVAL = 0x7 + IFLA_BOND_ARP_IP_TARGET = 0x8 + IFLA_BOND_ARP_VALIDATE = 0x9 + IFLA_BOND_ARP_ALL_TARGETS = 0xa + IFLA_BOND_PRIMARY = 0xb + IFLA_BOND_PRIMARY_RESELECT = 0xc + IFLA_BOND_FAIL_OVER_MAC = 0xd + IFLA_BOND_XMIT_HASH_POLICY = 0xe + IFLA_BOND_RESEND_IGMP = 0xf + IFLA_BOND_NUM_PEER_NOTIF = 0x10 + IFLA_BOND_ALL_SLAVES_ACTIVE = 0x11 + IFLA_BOND_MIN_LINKS = 0x12 + IFLA_BOND_LP_INTERVAL = 0x13 + IFLA_BOND_PACKETS_PER_SLAVE = 0x14 + IFLA_BOND_AD_LACP_RATE = 0x15 + IFLA_BOND_AD_SELECT = 0x16 + IFLA_BOND_AD_INFO = 0x17 + IFLA_BOND_AD_ACTOR_SYS_PRIO = 0x18 + IFLA_BOND_AD_USER_PORT_KEY = 0x19 + IFLA_BOND_AD_ACTOR_SYSTEM = 0x1a + IFLA_BOND_TLB_DYNAMIC_LB = 0x1b + IFLA_BOND_PEER_NOTIF_DELAY = 0x1c + IFLA_BOND_AD_INFO_UNSPEC = 0x0 + IFLA_BOND_AD_INFO_AGGREGATOR = 0x1 + IFLA_BOND_AD_INFO_NUM_PORTS = 0x2 + IFLA_BOND_AD_INFO_ACTOR_KEY = 0x3 + IFLA_BOND_AD_INFO_PARTNER_KEY = 0x4 + IFLA_BOND_AD_INFO_PARTNER_MAC = 0x5 + IFLA_BOND_SLAVE_UNSPEC = 0x0 + IFLA_BOND_SLAVE_STATE = 0x1 + IFLA_BOND_SLAVE_MII_STATUS = 0x2 + IFLA_BOND_SLAVE_LINK_FAILURE_COUNT = 0x3 + IFLA_BOND_SLAVE_PERM_HWADDR = 0x4 + IFLA_BOND_SLAVE_QUEUE_ID = 0x5 + IFLA_BOND_SLAVE_AD_AGGREGATOR_ID = 0x6 + IFLA_BOND_SLAVE_AD_ACTOR_OPER_PORT_STATE = 0x7 + IFLA_BOND_SLAVE_AD_PARTNER_OPER_PORT_STATE = 0x8 + IFLA_VF_INFO_UNSPEC = 0x0 + IFLA_VF_INFO = 0x1 + IFLA_VF_UNSPEC = 0x0 + IFLA_VF_MAC = 0x1 + IFLA_VF_VLAN = 0x2 + IFLA_VF_TX_RATE = 0x3 + IFLA_VF_SPOOFCHK = 0x4 + IFLA_VF_LINK_STATE = 0x5 + IFLA_VF_RATE = 0x6 + IFLA_VF_RSS_QUERY_EN = 0x7 + IFLA_VF_STATS = 0x8 + IFLA_VF_TRUST = 0x9 + IFLA_VF_IB_NODE_GUID = 0xa + IFLA_VF_IB_PORT_GUID = 0xb + IFLA_VF_VLAN_LIST = 0xc + IFLA_VF_BROADCAST = 0xd + IFLA_VF_VLAN_INFO_UNSPEC = 0x0 + IFLA_VF_VLAN_INFO = 0x1 + IFLA_VF_LINK_STATE_AUTO = 0x0 + IFLA_VF_LINK_STATE_ENABLE = 0x1 + IFLA_VF_LINK_STATE_DISABLE = 0x2 + IFLA_VF_STATS_RX_PACKETS = 0x0 + IFLA_VF_STATS_TX_PACKETS = 0x1 + IFLA_VF_STATS_RX_BYTES = 0x2 + IFLA_VF_STATS_TX_BYTES = 0x3 + IFLA_VF_STATS_BROADCAST = 0x4 + IFLA_VF_STATS_MULTICAST = 0x5 + IFLA_VF_STATS_PAD = 0x6 + IFLA_VF_STATS_RX_DROPPED = 0x7 + IFLA_VF_STATS_TX_DROPPED = 0x8 + IFLA_VF_PORT_UNSPEC = 0x0 + IFLA_VF_PORT = 0x1 + IFLA_PORT_UNSPEC = 0x0 + IFLA_PORT_VF = 0x1 + IFLA_PORT_PROFILE = 0x2 + IFLA_PORT_VSI_TYPE = 0x3 + IFLA_PORT_INSTANCE_UUID = 0x4 + IFLA_PORT_HOST_UUID = 0x5 + IFLA_PORT_REQUEST = 0x6 + IFLA_PORT_RESPONSE = 0x7 + IFLA_IPOIB_UNSPEC = 0x0 + IFLA_IPOIB_PKEY = 0x1 + IFLA_IPOIB_MODE = 0x2 + IFLA_IPOIB_UMCAST = 0x3 + IFLA_HSR_UNSPEC = 0x0 + IFLA_HSR_SLAVE1 = 0x1 + IFLA_HSR_SLAVE2 = 0x2 + IFLA_HSR_MULTICAST_SPEC = 0x3 + IFLA_HSR_SUPERVISION_ADDR = 0x4 + IFLA_HSR_SEQ_NR = 0x5 + IFLA_HSR_VERSION = 0x6 + IFLA_HSR_PROTOCOL = 0x7 + IFLA_STATS_UNSPEC = 0x0 + IFLA_STATS_LINK_64 = 0x1 + IFLA_STATS_LINK_XSTATS = 0x2 + IFLA_STATS_LINK_XSTATS_SLAVE = 0x3 + IFLA_STATS_LINK_OFFLOAD_XSTATS = 0x4 + IFLA_STATS_AF_SPEC = 0x5 + IFLA_OFFLOAD_XSTATS_UNSPEC = 0x0 + IFLA_OFFLOAD_XSTATS_CPU_HIT = 0x1 + IFLA_XDP_UNSPEC = 0x0 + IFLA_XDP_FD = 0x1 + IFLA_XDP_ATTACHED = 0x2 + IFLA_XDP_FLAGS = 0x3 + IFLA_XDP_PROG_ID = 0x4 + IFLA_XDP_DRV_PROG_ID = 0x5 + IFLA_XDP_SKB_PROG_ID = 0x6 + IFLA_XDP_HW_PROG_ID = 0x7 + IFLA_XDP_EXPECTED_FD = 0x8 + IFLA_EVENT_NONE = 0x0 + IFLA_EVENT_REBOOT = 0x1 + IFLA_EVENT_FEATURES = 0x2 + IFLA_EVENT_BONDING_FAILOVER = 0x3 + IFLA_EVENT_NOTIFY_PEERS = 0x4 + IFLA_EVENT_IGMP_RESEND = 0x5 + IFLA_EVENT_BONDING_OPTIONS = 0x6 + IFLA_TUN_UNSPEC = 0x0 + IFLA_TUN_OWNER = 0x1 + IFLA_TUN_GROUP = 0x2 + IFLA_TUN_TYPE = 0x3 + IFLA_TUN_PI = 0x4 + IFLA_TUN_VNET_HDR = 0x5 + IFLA_TUN_PERSIST = 0x6 + IFLA_TUN_MULTI_QUEUE = 0x7 + IFLA_TUN_NUM_QUEUES = 0x8 + IFLA_TUN_NUM_DISABLED_QUEUES = 0x9 + IFLA_RMNET_UNSPEC = 0x0 + IFLA_RMNET_MUX_ID = 0x1 + IFLA_RMNET_FLAGS = 0x2 +) + +const ( + NF_INET_PRE_ROUTING = 0x0 + NF_INET_LOCAL_IN = 0x1 + NF_INET_FORWARD = 0x2 + NF_INET_LOCAL_OUT = 0x3 + NF_INET_POST_ROUTING = 0x4 + NF_INET_NUMHOOKS = 0x5 +) + +const ( + NF_NETDEV_INGRESS = 0x0 + NF_NETDEV_EGRESS = 0x1 + NF_NETDEV_NUMHOOKS = 0x2 +) + +const ( + NFPROTO_UNSPEC = 0x0 + NFPROTO_INET = 0x1 + NFPROTO_IPV4 = 0x2 + NFPROTO_ARP = 0x3 + NFPROTO_NETDEV = 0x5 + NFPROTO_BRIDGE = 0x7 + NFPROTO_IPV6 = 0xa + NFPROTO_DECNET = 0xc + NFPROTO_NUMPROTO = 0xd +) + +const SO_ORIGINAL_DST = 0x50 + +type Nfgenmsg struct { + Nfgen_family uint8 + Version uint8 + Res_id uint16 +} + +const ( + NFNL_BATCH_UNSPEC = 0x0 + NFNL_BATCH_GENID = 0x1 +) + +const ( + NFT_REG_VERDICT = 0x0 + NFT_REG_1 = 0x1 + NFT_REG_2 = 0x2 + NFT_REG_3 = 0x3 + NFT_REG_4 = 0x4 + NFT_REG32_00 = 0x8 + NFT_REG32_01 = 0x9 + NFT_REG32_02 = 0xa + NFT_REG32_03 = 0xb + NFT_REG32_04 = 0xc + NFT_REG32_05 = 0xd + NFT_REG32_06 = 0xe + NFT_REG32_07 = 0xf + NFT_REG32_08 = 0x10 + NFT_REG32_09 = 0x11 + NFT_REG32_10 = 0x12 + NFT_REG32_11 = 0x13 + NFT_REG32_12 = 0x14 + NFT_REG32_13 = 0x15 + NFT_REG32_14 = 0x16 + NFT_REG32_15 = 0x17 + NFT_CONTINUE = -0x1 + NFT_BREAK = -0x2 + NFT_JUMP = -0x3 + NFT_GOTO = -0x4 + NFT_RETURN = -0x5 + NFT_MSG_NEWTABLE = 0x0 + NFT_MSG_GETTABLE = 0x1 + NFT_MSG_DELTABLE = 0x2 + NFT_MSG_NEWCHAIN = 0x3 + NFT_MSG_GETCHAIN = 0x4 + NFT_MSG_DELCHAIN = 0x5 + NFT_MSG_NEWRULE = 0x6 + NFT_MSG_GETRULE = 0x7 + NFT_MSG_DELRULE = 0x8 + NFT_MSG_NEWSET = 0x9 + NFT_MSG_GETSET = 0xa + NFT_MSG_DELSET = 0xb + NFT_MSG_NEWSETELEM = 0xc + NFT_MSG_GETSETELEM = 0xd + NFT_MSG_DELSETELEM = 0xe + NFT_MSG_NEWGEN = 0xf + NFT_MSG_GETGEN = 0x10 + NFT_MSG_TRACE = 0x11 + NFT_MSG_NEWOBJ = 0x12 + NFT_MSG_GETOBJ = 0x13 + NFT_MSG_DELOBJ = 0x14 + NFT_MSG_GETOBJ_RESET = 0x15 + NFT_MSG_MAX = 0x19 + NFTA_LIST_UNSPEC = 0x0 + NFTA_LIST_ELEM = 0x1 + NFTA_HOOK_UNSPEC = 0x0 + NFTA_HOOK_HOOKNUM = 0x1 + NFTA_HOOK_PRIORITY = 0x2 + NFTA_HOOK_DEV = 0x3 + NFT_TABLE_F_DORMANT = 0x1 + NFTA_TABLE_UNSPEC = 0x0 + NFTA_TABLE_NAME = 0x1 + NFTA_TABLE_FLAGS = 0x2 + NFTA_TABLE_USE = 0x3 + NFTA_CHAIN_UNSPEC = 0x0 + NFTA_CHAIN_TABLE = 0x1 + NFTA_CHAIN_HANDLE = 0x2 + NFTA_CHAIN_NAME = 0x3 + NFTA_CHAIN_HOOK = 0x4 + NFTA_CHAIN_POLICY = 0x5 + NFTA_CHAIN_USE = 0x6 + NFTA_CHAIN_TYPE = 0x7 + NFTA_CHAIN_COUNTERS = 0x8 + NFTA_CHAIN_PAD = 0x9 + NFTA_RULE_UNSPEC = 0x0 + NFTA_RULE_TABLE = 0x1 + NFTA_RULE_CHAIN = 0x2 + NFTA_RULE_HANDLE = 0x3 + NFTA_RULE_EXPRESSIONS = 0x4 + NFTA_RULE_COMPAT = 0x5 + NFTA_RULE_POSITION = 0x6 + NFTA_RULE_USERDATA = 0x7 + NFTA_RULE_PAD = 0x8 + NFTA_RULE_ID = 0x9 + NFT_RULE_COMPAT_F_INV = 0x2 + NFT_RULE_COMPAT_F_MASK = 0x2 + NFTA_RULE_COMPAT_UNSPEC = 0x0 + NFTA_RULE_COMPAT_PROTO = 0x1 + NFTA_RULE_COMPAT_FLAGS = 0x2 + NFT_SET_ANONYMOUS = 0x1 + NFT_SET_CONSTANT = 0x2 + NFT_SET_INTERVAL = 0x4 + NFT_SET_MAP = 0x8 + NFT_SET_TIMEOUT = 0x10 + NFT_SET_EVAL = 0x20 + NFT_SET_OBJECT = 0x40 + NFT_SET_POL_PERFORMANCE = 0x0 + NFT_SET_POL_MEMORY = 0x1 + NFTA_SET_DESC_UNSPEC = 0x0 + NFTA_SET_DESC_SIZE = 0x1 + NFTA_SET_UNSPEC = 0x0 + NFTA_SET_TABLE = 0x1 + NFTA_SET_NAME = 0x2 + NFTA_SET_FLAGS = 0x3 + NFTA_SET_KEY_TYPE = 0x4 + NFTA_SET_KEY_LEN = 0x5 + NFTA_SET_DATA_TYPE = 0x6 + NFTA_SET_DATA_LEN = 0x7 + NFTA_SET_POLICY = 0x8 + NFTA_SET_DESC = 0x9 + NFTA_SET_ID = 0xa + NFTA_SET_TIMEOUT = 0xb + NFTA_SET_GC_INTERVAL = 0xc + NFTA_SET_USERDATA = 0xd + NFTA_SET_PAD = 0xe + NFTA_SET_OBJ_TYPE = 0xf + NFT_SET_ELEM_INTERVAL_END = 0x1 + NFTA_SET_ELEM_UNSPEC = 0x0 + NFTA_SET_ELEM_KEY = 0x1 + NFTA_SET_ELEM_DATA = 0x2 + NFTA_SET_ELEM_FLAGS = 0x3 + NFTA_SET_ELEM_TIMEOUT = 0x4 + NFTA_SET_ELEM_EXPIRATION = 0x5 + NFTA_SET_ELEM_USERDATA = 0x6 + NFTA_SET_ELEM_EXPR = 0x7 + NFTA_SET_ELEM_PAD = 0x8 + NFTA_SET_ELEM_OBJREF = 0x9 + NFTA_SET_ELEM_LIST_UNSPEC = 0x0 + NFTA_SET_ELEM_LIST_TABLE = 0x1 + NFTA_SET_ELEM_LIST_SET = 0x2 + NFTA_SET_ELEM_LIST_ELEMENTS = 0x3 + NFTA_SET_ELEM_LIST_SET_ID = 0x4 + NFT_DATA_VALUE = 0x0 + NFT_DATA_VERDICT = 0xffffff00 + NFTA_DATA_UNSPEC = 0x0 + NFTA_DATA_VALUE = 0x1 + NFTA_DATA_VERDICT = 0x2 + NFTA_VERDICT_UNSPEC = 0x0 + NFTA_VERDICT_CODE = 0x1 + NFTA_VERDICT_CHAIN = 0x2 + NFTA_EXPR_UNSPEC = 0x0 + NFTA_EXPR_NAME = 0x1 + NFTA_EXPR_DATA = 0x2 + NFTA_IMMEDIATE_UNSPEC = 0x0 + NFTA_IMMEDIATE_DREG = 0x1 + NFTA_IMMEDIATE_DATA = 0x2 + NFTA_BITWISE_UNSPEC = 0x0 + NFTA_BITWISE_SREG = 0x1 + NFTA_BITWISE_DREG = 0x2 + NFTA_BITWISE_LEN = 0x3 + NFTA_BITWISE_MASK = 0x4 + NFTA_BITWISE_XOR = 0x5 + NFT_BYTEORDER_NTOH = 0x0 + NFT_BYTEORDER_HTON = 0x1 + NFTA_BYTEORDER_UNSPEC = 0x0 + NFTA_BYTEORDER_SREG = 0x1 + NFTA_BYTEORDER_DREG = 0x2 + NFTA_BYTEORDER_OP = 0x3 + NFTA_BYTEORDER_LEN = 0x4 + NFTA_BYTEORDER_SIZE = 0x5 + NFT_CMP_EQ = 0x0 + NFT_CMP_NEQ = 0x1 + NFT_CMP_LT = 0x2 + NFT_CMP_LTE = 0x3 + NFT_CMP_GT = 0x4 + NFT_CMP_GTE = 0x5 + NFTA_CMP_UNSPEC = 0x0 + NFTA_CMP_SREG = 0x1 + NFTA_CMP_OP = 0x2 + NFTA_CMP_DATA = 0x3 + NFT_RANGE_EQ = 0x0 + NFT_RANGE_NEQ = 0x1 + NFTA_RANGE_UNSPEC = 0x0 + NFTA_RANGE_SREG = 0x1 + NFTA_RANGE_OP = 0x2 + NFTA_RANGE_FROM_DATA = 0x3 + NFTA_RANGE_TO_DATA = 0x4 + NFT_LOOKUP_F_INV = 0x1 + NFTA_LOOKUP_UNSPEC = 0x0 + NFTA_LOOKUP_SET = 0x1 + NFTA_LOOKUP_SREG = 0x2 + NFTA_LOOKUP_DREG = 0x3 + NFTA_LOOKUP_SET_ID = 0x4 + NFTA_LOOKUP_FLAGS = 0x5 + NFT_DYNSET_OP_ADD = 0x0 + NFT_DYNSET_OP_UPDATE = 0x1 + NFT_DYNSET_F_INV = 0x1 + NFTA_DYNSET_UNSPEC = 0x0 + NFTA_DYNSET_SET_NAME = 0x1 + NFTA_DYNSET_SET_ID = 0x2 + NFTA_DYNSET_OP = 0x3 + NFTA_DYNSET_SREG_KEY = 0x4 + NFTA_DYNSET_SREG_DATA = 0x5 + NFTA_DYNSET_TIMEOUT = 0x6 + NFTA_DYNSET_EXPR = 0x7 + NFTA_DYNSET_PAD = 0x8 + NFTA_DYNSET_FLAGS = 0x9 + NFT_PAYLOAD_LL_HEADER = 0x0 + NFT_PAYLOAD_NETWORK_HEADER = 0x1 + NFT_PAYLOAD_TRANSPORT_HEADER = 0x2 + NFT_PAYLOAD_CSUM_NONE = 0x0 + NFT_PAYLOAD_CSUM_INET = 0x1 + NFT_PAYLOAD_L4CSUM_PSEUDOHDR = 0x1 + NFTA_PAYLOAD_UNSPEC = 0x0 + NFTA_PAYLOAD_DREG = 0x1 + NFTA_PAYLOAD_BASE = 0x2 + NFTA_PAYLOAD_OFFSET = 0x3 + NFTA_PAYLOAD_LEN = 0x4 + NFTA_PAYLOAD_SREG = 0x5 + NFTA_PAYLOAD_CSUM_TYPE = 0x6 + NFTA_PAYLOAD_CSUM_OFFSET = 0x7 + NFTA_PAYLOAD_CSUM_FLAGS = 0x8 + NFT_EXTHDR_F_PRESENT = 0x1 + NFT_EXTHDR_OP_IPV6 = 0x0 + NFT_EXTHDR_OP_TCPOPT = 0x1 + NFTA_EXTHDR_UNSPEC = 0x0 + NFTA_EXTHDR_DREG = 0x1 + NFTA_EXTHDR_TYPE = 0x2 + NFTA_EXTHDR_OFFSET = 0x3 + NFTA_EXTHDR_LEN = 0x4 + NFTA_EXTHDR_FLAGS = 0x5 + NFTA_EXTHDR_OP = 0x6 + NFTA_EXTHDR_SREG = 0x7 + NFT_META_LEN = 0x0 + NFT_META_PROTOCOL = 0x1 + NFT_META_PRIORITY = 0x2 + NFT_META_MARK = 0x3 + NFT_META_IIF = 0x4 + NFT_META_OIF = 0x5 + NFT_META_IIFNAME = 0x6 + NFT_META_OIFNAME = 0x7 + NFT_META_IIFTYPE = 0x8 + NFT_META_OIFTYPE = 0x9 + NFT_META_SKUID = 0xa + NFT_META_SKGID = 0xb + NFT_META_NFTRACE = 0xc + NFT_META_RTCLASSID = 0xd + NFT_META_SECMARK = 0xe + NFT_META_NFPROTO = 0xf + NFT_META_L4PROTO = 0x10 + NFT_META_BRI_IIFNAME = 0x11 + NFT_META_BRI_OIFNAME = 0x12 + NFT_META_PKTTYPE = 0x13 + NFT_META_CPU = 0x14 + NFT_META_IIFGROUP = 0x15 + NFT_META_OIFGROUP = 0x16 + NFT_META_CGROUP = 0x17 + NFT_META_PRANDOM = 0x18 + NFT_RT_CLASSID = 0x0 + NFT_RT_NEXTHOP4 = 0x1 + NFT_RT_NEXTHOP6 = 0x2 + NFT_RT_TCPMSS = 0x3 + NFT_HASH_JENKINS = 0x0 + NFT_HASH_SYM = 0x1 + NFTA_HASH_UNSPEC = 0x0 + NFTA_HASH_SREG = 0x1 + NFTA_HASH_DREG = 0x2 + NFTA_HASH_LEN = 0x3 + NFTA_HASH_MODULUS = 0x4 + NFTA_HASH_SEED = 0x5 + NFTA_HASH_OFFSET = 0x6 + NFTA_HASH_TYPE = 0x7 + NFTA_META_UNSPEC = 0x0 + NFTA_META_DREG = 0x1 + NFTA_META_KEY = 0x2 + NFTA_META_SREG = 0x3 + NFTA_RT_UNSPEC = 0x0 + NFTA_RT_DREG = 0x1 + NFTA_RT_KEY = 0x2 + NFT_CT_STATE = 0x0 + NFT_CT_DIRECTION = 0x1 + NFT_CT_STATUS = 0x2 + NFT_CT_MARK = 0x3 + NFT_CT_SECMARK = 0x4 + NFT_CT_EXPIRATION = 0x5 + NFT_CT_HELPER = 0x6 + NFT_CT_L3PROTOCOL = 0x7 + NFT_CT_SRC = 0x8 + NFT_CT_DST = 0x9 + NFT_CT_PROTOCOL = 0xa + NFT_CT_PROTO_SRC = 0xb + NFT_CT_PROTO_DST = 0xc + NFT_CT_LABELS = 0xd + NFT_CT_PKTS = 0xe + NFT_CT_BYTES = 0xf + NFT_CT_AVGPKT = 0x10 + NFT_CT_ZONE = 0x11 + NFT_CT_EVENTMASK = 0x12 + NFTA_CT_UNSPEC = 0x0 + NFTA_CT_DREG = 0x1 + NFTA_CT_KEY = 0x2 + NFTA_CT_DIRECTION = 0x3 + NFTA_CT_SREG = 0x4 + NFT_LIMIT_PKTS = 0x0 + NFT_LIMIT_PKT_BYTES = 0x1 + NFT_LIMIT_F_INV = 0x1 + NFTA_LIMIT_UNSPEC = 0x0 + NFTA_LIMIT_RATE = 0x1 + NFTA_LIMIT_UNIT = 0x2 + NFTA_LIMIT_BURST = 0x3 + NFTA_LIMIT_TYPE = 0x4 + NFTA_LIMIT_FLAGS = 0x5 + NFTA_LIMIT_PAD = 0x6 + NFTA_COUNTER_UNSPEC = 0x0 + NFTA_COUNTER_BYTES = 0x1 + NFTA_COUNTER_PACKETS = 0x2 + NFTA_COUNTER_PAD = 0x3 + NFTA_LOG_UNSPEC = 0x0 + NFTA_LOG_GROUP = 0x1 + NFTA_LOG_PREFIX = 0x2 + NFTA_LOG_SNAPLEN = 0x3 + NFTA_LOG_QTHRESHOLD = 0x4 + NFTA_LOG_LEVEL = 0x5 + NFTA_LOG_FLAGS = 0x6 + NFTA_QUEUE_UNSPEC = 0x0 + NFTA_QUEUE_NUM = 0x1 + NFTA_QUEUE_TOTAL = 0x2 + NFTA_QUEUE_FLAGS = 0x3 + NFTA_QUEUE_SREG_QNUM = 0x4 + NFT_QUOTA_F_INV = 0x1 + NFT_QUOTA_F_DEPLETED = 0x2 + NFTA_QUOTA_UNSPEC = 0x0 + NFTA_QUOTA_BYTES = 0x1 + NFTA_QUOTA_FLAGS = 0x2 + NFTA_QUOTA_PAD = 0x3 + NFTA_QUOTA_CONSUMED = 0x4 + NFT_REJECT_ICMP_UNREACH = 0x0 + NFT_REJECT_TCP_RST = 0x1 + NFT_REJECT_ICMPX_UNREACH = 0x2 + NFT_REJECT_ICMPX_NO_ROUTE = 0x0 + NFT_REJECT_ICMPX_PORT_UNREACH = 0x1 + NFT_REJECT_ICMPX_HOST_UNREACH = 0x2 + NFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3 + NFTA_REJECT_UNSPEC = 0x0 + NFTA_REJECT_TYPE = 0x1 + NFTA_REJECT_ICMP_CODE = 0x2 + NFT_NAT_SNAT = 0x0 + NFT_NAT_DNAT = 0x1 + NFTA_NAT_UNSPEC = 0x0 + NFTA_NAT_TYPE = 0x1 + NFTA_NAT_FAMILY = 0x2 + NFTA_NAT_REG_ADDR_MIN = 0x3 + NFTA_NAT_REG_ADDR_MAX = 0x4 + NFTA_NAT_REG_PROTO_MIN = 0x5 + NFTA_NAT_REG_PROTO_MAX = 0x6 + NFTA_NAT_FLAGS = 0x7 + NFTA_MASQ_UNSPEC = 0x0 + NFTA_MASQ_FLAGS = 0x1 + NFTA_MASQ_REG_PROTO_MIN = 0x2 + NFTA_MASQ_REG_PROTO_MAX = 0x3 + NFTA_REDIR_UNSPEC = 0x0 + NFTA_REDIR_REG_PROTO_MIN = 0x1 + NFTA_REDIR_REG_PROTO_MAX = 0x2 + NFTA_REDIR_FLAGS = 0x3 + NFTA_DUP_UNSPEC = 0x0 + NFTA_DUP_SREG_ADDR = 0x1 + NFTA_DUP_SREG_DEV = 0x2 + NFTA_FWD_UNSPEC = 0x0 + NFTA_FWD_SREG_DEV = 0x1 + NFTA_OBJREF_UNSPEC = 0x0 + NFTA_OBJREF_IMM_TYPE = 0x1 + NFTA_OBJREF_IMM_NAME = 0x2 + NFTA_OBJREF_SET_SREG = 0x3 + NFTA_OBJREF_SET_NAME = 0x4 + NFTA_OBJREF_SET_ID = 0x5 + NFTA_GEN_UNSPEC = 0x0 + NFTA_GEN_ID = 0x1 + NFTA_GEN_PROC_PID = 0x2 + NFTA_GEN_PROC_NAME = 0x3 + NFTA_FIB_UNSPEC = 0x0 + NFTA_FIB_DREG = 0x1 + NFTA_FIB_RESULT = 0x2 + NFTA_FIB_FLAGS = 0x3 + NFT_FIB_RESULT_UNSPEC = 0x0 + NFT_FIB_RESULT_OIF = 0x1 + NFT_FIB_RESULT_OIFNAME = 0x2 + NFT_FIB_RESULT_ADDRTYPE = 0x3 + NFTA_FIB_F_SADDR = 0x1 + NFTA_FIB_F_DADDR = 0x2 + NFTA_FIB_F_MARK = 0x4 + NFTA_FIB_F_IIF = 0x8 + NFTA_FIB_F_OIF = 0x10 + NFTA_FIB_F_PRESENT = 0x20 + NFTA_CT_HELPER_UNSPEC = 0x0 + NFTA_CT_HELPER_NAME = 0x1 + NFTA_CT_HELPER_L3PROTO = 0x2 + NFTA_CT_HELPER_L4PROTO = 0x3 + NFTA_OBJ_UNSPEC = 0x0 + NFTA_OBJ_TABLE = 0x1 + NFTA_OBJ_NAME = 0x2 + NFTA_OBJ_TYPE = 0x3 + NFTA_OBJ_DATA = 0x4 + NFTA_OBJ_USE = 0x5 + NFTA_TRACE_UNSPEC = 0x0 + NFTA_TRACE_TABLE = 0x1 + NFTA_TRACE_CHAIN = 0x2 + NFTA_TRACE_RULE_HANDLE = 0x3 + NFTA_TRACE_TYPE = 0x4 + NFTA_TRACE_VERDICT = 0x5 + NFTA_TRACE_ID = 0x6 + NFTA_TRACE_LL_HEADER = 0x7 + NFTA_TRACE_NETWORK_HEADER = 0x8 + NFTA_TRACE_TRANSPORT_HEADER = 0x9 + NFTA_TRACE_IIF = 0xa + NFTA_TRACE_IIFTYPE = 0xb + NFTA_TRACE_OIF = 0xc + NFTA_TRACE_OIFTYPE = 0xd + NFTA_TRACE_MARK = 0xe + NFTA_TRACE_NFPROTO = 0xf + NFTA_TRACE_POLICY = 0x10 + NFTA_TRACE_PAD = 0x11 + NFT_TRACETYPE_UNSPEC = 0x0 + NFT_TRACETYPE_POLICY = 0x1 + NFT_TRACETYPE_RETURN = 0x2 + NFT_TRACETYPE_RULE = 0x3 + NFTA_NG_UNSPEC = 0x0 + NFTA_NG_DREG = 0x1 + NFTA_NG_MODULUS = 0x2 + NFTA_NG_TYPE = 0x3 + NFTA_NG_OFFSET = 0x4 + NFT_NG_INCREMENTAL = 0x0 + NFT_NG_RANDOM = 0x1 +) + +const ( + NFTA_TARGET_UNSPEC = 0x0 + NFTA_TARGET_NAME = 0x1 + NFTA_TARGET_REV = 0x2 + NFTA_TARGET_INFO = 0x3 + NFTA_MATCH_UNSPEC = 0x0 + NFTA_MATCH_NAME = 0x1 + NFTA_MATCH_REV = 0x2 + NFTA_MATCH_INFO = 0x3 + NFTA_COMPAT_UNSPEC = 0x0 + NFTA_COMPAT_NAME = 0x1 + NFTA_COMPAT_REV = 0x2 + NFTA_COMPAT_TYPE = 0x3 +) + +type RTCTime struct { + Sec int32 + Min int32 + Hour int32 + Mday int32 + Mon int32 + Year int32 + Wday int32 + Yday int32 + Isdst int32 +} + +type RTCWkAlrm struct { + Enabled uint8 + Pending uint8 + Time RTCTime +} + +type BlkpgIoctlArg struct { + Op int32 + Flags int32 + Datalen int32 + Data *byte +} + +const ( + BLKPG_ADD_PARTITION = 0x1 + BLKPG_DEL_PARTITION = 0x2 + BLKPG_RESIZE_PARTITION = 0x3 +) + +const ( + NETNSA_NONE = 0x0 + NETNSA_NSID = 0x1 + NETNSA_PID = 0x2 + NETNSA_FD = 0x3 + NETNSA_TARGET_NSID = 0x4 + NETNSA_CURRENT_NSID = 0x5 +) + +type XDPRingOffset struct { + Producer uint64 + Consumer uint64 + Desc uint64 + Flags uint64 +} + +type XDPMmapOffsets struct { + Rx XDPRingOffset + Tx XDPRingOffset + Fr XDPRingOffset + Cr XDPRingOffset +} + +type XDPStatistics struct { + Rx_dropped uint64 + Rx_invalid_descs uint64 + Tx_invalid_descs uint64 + Rx_ring_full uint64 + Rx_fill_ring_empty_descs uint64 + Tx_ring_empty_descs uint64 +} + +type XDPDesc struct { + Addr uint64 + Len uint32 + Options uint32 +} + +const ( + NCSI_CMD_UNSPEC = 0x0 + NCSI_CMD_PKG_INFO = 0x1 + NCSI_CMD_SET_INTERFACE = 0x2 + NCSI_CMD_CLEAR_INTERFACE = 0x3 + NCSI_ATTR_UNSPEC = 0x0 + NCSI_ATTR_IFINDEX = 0x1 + NCSI_ATTR_PACKAGE_LIST = 0x2 + NCSI_ATTR_PACKAGE_ID = 0x3 + NCSI_ATTR_CHANNEL_ID = 0x4 + NCSI_PKG_ATTR_UNSPEC = 0x0 + NCSI_PKG_ATTR = 0x1 + NCSI_PKG_ATTR_ID = 0x2 + NCSI_PKG_ATTR_FORCED = 0x3 + NCSI_PKG_ATTR_CHANNEL_LIST = 0x4 + NCSI_CHANNEL_ATTR_UNSPEC = 0x0 + NCSI_CHANNEL_ATTR = 0x1 + NCSI_CHANNEL_ATTR_ID = 0x2 + NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3 + NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4 + NCSI_CHANNEL_ATTR_VERSION_STR = 0x5 + NCSI_CHANNEL_ATTR_LINK_STATE = 0x6 + NCSI_CHANNEL_ATTR_ACTIVE = 0x7 + NCSI_CHANNEL_ATTR_FORCED = 0x8 + NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9 + NCSI_CHANNEL_ATTR_VLAN_ID = 0xa +) + +type ScmTimestamping struct { + Ts [3]Timespec +} + +const ( + SOF_TIMESTAMPING_TX_HARDWARE = 0x1 + SOF_TIMESTAMPING_TX_SOFTWARE = 0x2 + SOF_TIMESTAMPING_RX_HARDWARE = 0x4 + SOF_TIMESTAMPING_RX_SOFTWARE = 0x8 + SOF_TIMESTAMPING_SOFTWARE = 0x10 + SOF_TIMESTAMPING_SYS_HARDWARE = 0x20 + SOF_TIMESTAMPING_RAW_HARDWARE = 0x40 + SOF_TIMESTAMPING_OPT_ID = 0x80 + SOF_TIMESTAMPING_TX_SCHED = 0x100 + SOF_TIMESTAMPING_TX_ACK = 0x200 + SOF_TIMESTAMPING_OPT_CMSG = 0x400 + SOF_TIMESTAMPING_OPT_TSONLY = 0x800 + SOF_TIMESTAMPING_OPT_STATS = 0x1000 + SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000 + SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000 + + SOF_TIMESTAMPING_LAST = 0x8000 + SOF_TIMESTAMPING_MASK = 0xffff + + SCM_TSTAMP_SND = 0x0 + SCM_TSTAMP_SCHED = 0x1 + SCM_TSTAMP_ACK = 0x2 +) + +type SockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type FanotifyEventMetadata struct { + Event_len uint32 + Vers uint8 + Reserved uint8 + Metadata_len uint16 + Mask uint64 + Fd int32 + Pid int32 +} + +type FanotifyResponse struct { + Fd int32 + Response uint32 +} + +const ( + CRYPTO_MSG_BASE = 0x10 + CRYPTO_MSG_NEWALG = 0x10 + CRYPTO_MSG_DELALG = 0x11 + CRYPTO_MSG_UPDATEALG = 0x12 + CRYPTO_MSG_GETALG = 0x13 + CRYPTO_MSG_DELRNG = 0x14 + CRYPTO_MSG_GETSTAT = 0x15 +) + +const ( + CRYPTOCFGA_UNSPEC = 0x0 + CRYPTOCFGA_PRIORITY_VAL = 0x1 + CRYPTOCFGA_REPORT_LARVAL = 0x2 + CRYPTOCFGA_REPORT_HASH = 0x3 + CRYPTOCFGA_REPORT_BLKCIPHER = 0x4 + CRYPTOCFGA_REPORT_AEAD = 0x5 + CRYPTOCFGA_REPORT_COMPRESS = 0x6 + CRYPTOCFGA_REPORT_RNG = 0x7 + CRYPTOCFGA_REPORT_CIPHER = 0x8 + CRYPTOCFGA_REPORT_AKCIPHER = 0x9 + CRYPTOCFGA_REPORT_KPP = 0xa + CRYPTOCFGA_REPORT_ACOMP = 0xb + CRYPTOCFGA_STAT_LARVAL = 0xc + CRYPTOCFGA_STAT_HASH = 0xd + CRYPTOCFGA_STAT_BLKCIPHER = 0xe + CRYPTOCFGA_STAT_AEAD = 0xf + CRYPTOCFGA_STAT_COMPRESS = 0x10 + CRYPTOCFGA_STAT_RNG = 0x11 + CRYPTOCFGA_STAT_CIPHER = 0x12 + CRYPTOCFGA_STAT_AKCIPHER = 0x13 + CRYPTOCFGA_STAT_KPP = 0x14 + CRYPTOCFGA_STAT_ACOMP = 0x15 +) + +const ( + BPF_REG_0 = 0x0 + BPF_REG_1 = 0x1 + BPF_REG_2 = 0x2 + BPF_REG_3 = 0x3 + BPF_REG_4 = 0x4 + BPF_REG_5 = 0x5 + BPF_REG_6 = 0x6 + BPF_REG_7 = 0x7 + BPF_REG_8 = 0x8 + BPF_REG_9 = 0x9 + BPF_REG_10 = 0xa + BPF_MAP_CREATE = 0x0 + BPF_MAP_LOOKUP_ELEM = 0x1 + BPF_MAP_UPDATE_ELEM = 0x2 + BPF_MAP_DELETE_ELEM = 0x3 + BPF_MAP_GET_NEXT_KEY = 0x4 + BPF_PROG_LOAD = 0x5 + BPF_OBJ_PIN = 0x6 + BPF_OBJ_GET = 0x7 + BPF_PROG_ATTACH = 0x8 + BPF_PROG_DETACH = 0x9 + BPF_PROG_TEST_RUN = 0xa + BPF_PROG_GET_NEXT_ID = 0xb + BPF_MAP_GET_NEXT_ID = 0xc + BPF_PROG_GET_FD_BY_ID = 0xd + BPF_MAP_GET_FD_BY_ID = 0xe + BPF_OBJ_GET_INFO_BY_FD = 0xf + BPF_PROG_QUERY = 0x10 + BPF_RAW_TRACEPOINT_OPEN = 0x11 + BPF_BTF_LOAD = 0x12 + BPF_BTF_GET_FD_BY_ID = 0x13 + BPF_TASK_FD_QUERY = 0x14 + BPF_MAP_LOOKUP_AND_DELETE_ELEM = 0x15 + BPF_MAP_FREEZE = 0x16 + BPF_BTF_GET_NEXT_ID = 0x17 + BPF_MAP_LOOKUP_BATCH = 0x18 + BPF_MAP_LOOKUP_AND_DELETE_BATCH = 0x19 + BPF_MAP_UPDATE_BATCH = 0x1a + BPF_MAP_DELETE_BATCH = 0x1b + BPF_LINK_CREATE = 0x1c + BPF_LINK_UPDATE = 0x1d + BPF_LINK_GET_FD_BY_ID = 0x1e + BPF_LINK_GET_NEXT_ID = 0x1f + BPF_ENABLE_STATS = 0x20 + BPF_ITER_CREATE = 0x21 + BPF_LINK_DETACH = 0x22 + BPF_PROG_BIND_MAP = 0x23 + BPF_MAP_TYPE_UNSPEC = 0x0 + BPF_MAP_TYPE_HASH = 0x1 + BPF_MAP_TYPE_ARRAY = 0x2 + BPF_MAP_TYPE_PROG_ARRAY = 0x3 + BPF_MAP_TYPE_PERF_EVENT_ARRAY = 0x4 + BPF_MAP_TYPE_PERCPU_HASH = 0x5 + BPF_MAP_TYPE_PERCPU_ARRAY = 0x6 + BPF_MAP_TYPE_STACK_TRACE = 0x7 + BPF_MAP_TYPE_CGROUP_ARRAY = 0x8 + BPF_MAP_TYPE_LRU_HASH = 0x9 + BPF_MAP_TYPE_LRU_PERCPU_HASH = 0xa + BPF_MAP_TYPE_LPM_TRIE = 0xb + BPF_MAP_TYPE_ARRAY_OF_MAPS = 0xc + BPF_MAP_TYPE_HASH_OF_MAPS = 0xd + BPF_MAP_TYPE_DEVMAP = 0xe + BPF_MAP_TYPE_SOCKMAP = 0xf + BPF_MAP_TYPE_CPUMAP = 0x10 + BPF_MAP_TYPE_XSKMAP = 0x11 + BPF_MAP_TYPE_SOCKHASH = 0x12 + BPF_MAP_TYPE_CGROUP_STORAGE = 0x13 + BPF_MAP_TYPE_REUSEPORT_SOCKARRAY = 0x14 + BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE = 0x15 + BPF_MAP_TYPE_QUEUE = 0x16 + BPF_MAP_TYPE_STACK = 0x17 + BPF_MAP_TYPE_SK_STORAGE = 0x18 + BPF_MAP_TYPE_DEVMAP_HASH = 0x19 + BPF_MAP_TYPE_STRUCT_OPS = 0x1a + BPF_MAP_TYPE_RINGBUF = 0x1b + BPF_MAP_TYPE_INODE_STORAGE = 0x1c + BPF_PROG_TYPE_UNSPEC = 0x0 + BPF_PROG_TYPE_SOCKET_FILTER = 0x1 + BPF_PROG_TYPE_KPROBE = 0x2 + BPF_PROG_TYPE_SCHED_CLS = 0x3 + BPF_PROG_TYPE_SCHED_ACT = 0x4 + BPF_PROG_TYPE_TRACEPOINT = 0x5 + BPF_PROG_TYPE_XDP = 0x6 + BPF_PROG_TYPE_PERF_EVENT = 0x7 + BPF_PROG_TYPE_CGROUP_SKB = 0x8 + BPF_PROG_TYPE_CGROUP_SOCK = 0x9 + BPF_PROG_TYPE_LWT_IN = 0xa + BPF_PROG_TYPE_LWT_OUT = 0xb + BPF_PROG_TYPE_LWT_XMIT = 0xc + BPF_PROG_TYPE_SOCK_OPS = 0xd + BPF_PROG_TYPE_SK_SKB = 0xe + BPF_PROG_TYPE_CGROUP_DEVICE = 0xf + BPF_PROG_TYPE_SK_MSG = 0x10 + BPF_PROG_TYPE_RAW_TRACEPOINT = 0x11 + BPF_PROG_TYPE_CGROUP_SOCK_ADDR = 0x12 + BPF_PROG_TYPE_LWT_SEG6LOCAL = 0x13 + BPF_PROG_TYPE_LIRC_MODE2 = 0x14 + BPF_PROG_TYPE_SK_REUSEPORT = 0x15 + BPF_PROG_TYPE_FLOW_DISSECTOR = 0x16 + BPF_PROG_TYPE_CGROUP_SYSCTL = 0x17 + BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 0x18 + BPF_PROG_TYPE_CGROUP_SOCKOPT = 0x19 + BPF_PROG_TYPE_TRACING = 0x1a + BPF_PROG_TYPE_STRUCT_OPS = 0x1b + BPF_PROG_TYPE_EXT = 0x1c + BPF_PROG_TYPE_LSM = 0x1d + BPF_PROG_TYPE_SK_LOOKUP = 0x1e + BPF_CGROUP_INET_INGRESS = 0x0 + BPF_CGROUP_INET_EGRESS = 0x1 + BPF_CGROUP_INET_SOCK_CREATE = 0x2 + BPF_CGROUP_SOCK_OPS = 0x3 + BPF_SK_SKB_STREAM_PARSER = 0x4 + BPF_SK_SKB_STREAM_VERDICT = 0x5 + BPF_CGROUP_DEVICE = 0x6 + BPF_SK_MSG_VERDICT = 0x7 + BPF_CGROUP_INET4_BIND = 0x8 + BPF_CGROUP_INET6_BIND = 0x9 + BPF_CGROUP_INET4_CONNECT = 0xa + BPF_CGROUP_INET6_CONNECT = 0xb + BPF_CGROUP_INET4_POST_BIND = 0xc + BPF_CGROUP_INET6_POST_BIND = 0xd + BPF_CGROUP_UDP4_SENDMSG = 0xe + BPF_CGROUP_UDP6_SENDMSG = 0xf + BPF_LIRC_MODE2 = 0x10 + BPF_FLOW_DISSECTOR = 0x11 + BPF_CGROUP_SYSCTL = 0x12 + BPF_CGROUP_UDP4_RECVMSG = 0x13 + BPF_CGROUP_UDP6_RECVMSG = 0x14 + BPF_CGROUP_GETSOCKOPT = 0x15 + BPF_CGROUP_SETSOCKOPT = 0x16 + BPF_TRACE_RAW_TP = 0x17 + BPF_TRACE_FENTRY = 0x18 + BPF_TRACE_FEXIT = 0x19 + BPF_MODIFY_RETURN = 0x1a + BPF_LSM_MAC = 0x1b + BPF_TRACE_ITER = 0x1c + BPF_CGROUP_INET4_GETPEERNAME = 0x1d + BPF_CGROUP_INET6_GETPEERNAME = 0x1e + BPF_CGROUP_INET4_GETSOCKNAME = 0x1f + BPF_CGROUP_INET6_GETSOCKNAME = 0x20 + BPF_XDP_DEVMAP = 0x21 + BPF_CGROUP_INET_SOCK_RELEASE = 0x22 + BPF_XDP_CPUMAP = 0x23 + BPF_SK_LOOKUP = 0x24 + BPF_XDP = 0x25 + BPF_LINK_TYPE_UNSPEC = 0x0 + BPF_LINK_TYPE_RAW_TRACEPOINT = 0x1 + BPF_LINK_TYPE_TRACING = 0x2 + BPF_LINK_TYPE_CGROUP = 0x3 + BPF_LINK_TYPE_ITER = 0x4 + BPF_LINK_TYPE_NETNS = 0x5 + BPF_LINK_TYPE_XDP = 0x6 + BPF_ANY = 0x0 + BPF_NOEXIST = 0x1 + BPF_EXIST = 0x2 + BPF_F_LOCK = 0x4 + BPF_F_NO_PREALLOC = 0x1 + BPF_F_NO_COMMON_LRU = 0x2 + BPF_F_NUMA_NODE = 0x4 + BPF_F_RDONLY = 0x8 + BPF_F_WRONLY = 0x10 + BPF_F_STACK_BUILD_ID = 0x20 + BPF_F_ZERO_SEED = 0x40 + BPF_F_RDONLY_PROG = 0x80 + BPF_F_WRONLY_PROG = 0x100 + BPF_F_CLONE = 0x200 + BPF_F_MMAPABLE = 0x400 + BPF_F_PRESERVE_ELEMS = 0x800 + BPF_F_INNER_MAP = 0x1000 + BPF_STATS_RUN_TIME = 0x0 + BPF_STACK_BUILD_ID_EMPTY = 0x0 + BPF_STACK_BUILD_ID_VALID = 0x1 + BPF_STACK_BUILD_ID_IP = 0x2 + BPF_F_RECOMPUTE_CSUM = 0x1 + BPF_F_INVALIDATE_HASH = 0x2 + BPF_F_HDR_FIELD_MASK = 0xf + BPF_F_PSEUDO_HDR = 0x10 + BPF_F_MARK_MANGLED_0 = 0x20 + BPF_F_MARK_ENFORCE = 0x40 + BPF_F_INGRESS = 0x1 + BPF_F_TUNINFO_IPV6 = 0x1 + BPF_F_SKIP_FIELD_MASK = 0xff + BPF_F_USER_STACK = 0x100 + BPF_F_FAST_STACK_CMP = 0x200 + BPF_F_REUSE_STACKID = 0x400 + BPF_F_USER_BUILD_ID = 0x800 + BPF_F_ZERO_CSUM_TX = 0x2 + BPF_F_DONT_FRAGMENT = 0x4 + BPF_F_SEQ_NUMBER = 0x8 + BPF_F_INDEX_MASK = 0xffffffff + BPF_F_CURRENT_CPU = 0xffffffff + BPF_F_CTXLEN_MASK = 0xfffff00000000 + BPF_F_CURRENT_NETNS = -0x1 + BPF_CSUM_LEVEL_QUERY = 0x0 + BPF_CSUM_LEVEL_INC = 0x1 + BPF_CSUM_LEVEL_DEC = 0x2 + BPF_CSUM_LEVEL_RESET = 0x3 + BPF_F_ADJ_ROOM_FIXED_GSO = 0x1 + BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 0x2 + BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 0x4 + BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 0x8 + BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10 + BPF_F_ADJ_ROOM_NO_CSUM_RESET = 0x20 + BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff + BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38 + BPF_F_SYSCTL_BASE_NAME = 0x1 + BPF_LOCAL_STORAGE_GET_F_CREATE = 0x1 + BPF_SK_STORAGE_GET_F_CREATE = 0x1 + BPF_F_GET_BRANCH_RECORDS_SIZE = 0x1 + BPF_RB_NO_WAKEUP = 0x1 + BPF_RB_FORCE_WAKEUP = 0x2 + BPF_RB_AVAIL_DATA = 0x0 + BPF_RB_RING_SIZE = 0x1 + BPF_RB_CONS_POS = 0x2 + BPF_RB_PROD_POS = 0x3 + BPF_RINGBUF_BUSY_BIT = 0x80000000 + BPF_RINGBUF_DISCARD_BIT = 0x40000000 + BPF_RINGBUF_HDR_SZ = 0x8 + BPF_SK_LOOKUP_F_REPLACE = 0x1 + BPF_SK_LOOKUP_F_NO_REUSEPORT = 0x2 + BPF_ADJ_ROOM_NET = 0x0 + BPF_ADJ_ROOM_MAC = 0x1 + BPF_HDR_START_MAC = 0x0 + BPF_HDR_START_NET = 0x1 + BPF_LWT_ENCAP_SEG6 = 0x0 + BPF_LWT_ENCAP_SEG6_INLINE = 0x1 + BPF_LWT_ENCAP_IP = 0x2 + BPF_OK = 0x0 + BPF_DROP = 0x2 + BPF_REDIRECT = 0x7 + BPF_LWT_REROUTE = 0x80 + BPF_SOCK_OPS_RTO_CB_FLAG = 0x1 + BPF_SOCK_OPS_RETRANS_CB_FLAG = 0x2 + BPF_SOCK_OPS_STATE_CB_FLAG = 0x4 + BPF_SOCK_OPS_RTT_CB_FLAG = 0x8 + BPF_SOCK_OPS_PARSE_ALL_HDR_OPT_CB_FLAG = 0x10 + BPF_SOCK_OPS_PARSE_UNKNOWN_HDR_OPT_CB_FLAG = 0x20 + BPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG = 0x40 + BPF_SOCK_OPS_ALL_CB_FLAGS = 0x7f + BPF_SOCK_OPS_VOID = 0x0 + BPF_SOCK_OPS_TIMEOUT_INIT = 0x1 + BPF_SOCK_OPS_RWND_INIT = 0x2 + BPF_SOCK_OPS_TCP_CONNECT_CB = 0x3 + BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB = 0x4 + BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 0x5 + BPF_SOCK_OPS_NEEDS_ECN = 0x6 + BPF_SOCK_OPS_BASE_RTT = 0x7 + BPF_SOCK_OPS_RTO_CB = 0x8 + BPF_SOCK_OPS_RETRANS_CB = 0x9 + BPF_SOCK_OPS_STATE_CB = 0xa + BPF_SOCK_OPS_TCP_LISTEN_CB = 0xb + BPF_SOCK_OPS_RTT_CB = 0xc + BPF_SOCK_OPS_PARSE_HDR_OPT_CB = 0xd + BPF_SOCK_OPS_HDR_OPT_LEN_CB = 0xe + BPF_SOCK_OPS_WRITE_HDR_OPT_CB = 0xf + BPF_TCP_ESTABLISHED = 0x1 + BPF_TCP_SYN_SENT = 0x2 + BPF_TCP_SYN_RECV = 0x3 + BPF_TCP_FIN_WAIT1 = 0x4 + BPF_TCP_FIN_WAIT2 = 0x5 + BPF_TCP_TIME_WAIT = 0x6 + BPF_TCP_CLOSE = 0x7 + BPF_TCP_CLOSE_WAIT = 0x8 + BPF_TCP_LAST_ACK = 0x9 + BPF_TCP_LISTEN = 0xa + BPF_TCP_CLOSING = 0xb + BPF_TCP_NEW_SYN_RECV = 0xc + BPF_TCP_MAX_STATES = 0xd + TCP_BPF_IW = 0x3e9 + TCP_BPF_SNDCWND_CLAMP = 0x3ea + TCP_BPF_DELACK_MAX = 0x3eb + TCP_BPF_RTO_MIN = 0x3ec + TCP_BPF_SYN = 0x3ed + TCP_BPF_SYN_IP = 0x3ee + TCP_BPF_SYN_MAC = 0x3ef + BPF_LOAD_HDR_OPT_TCP_SYN = 0x1 + BPF_WRITE_HDR_TCP_CURRENT_MSS = 0x1 + BPF_WRITE_HDR_TCP_SYNACK_COOKIE = 0x2 + BPF_DEVCG_ACC_MKNOD = 0x1 + BPF_DEVCG_ACC_READ = 0x2 + BPF_DEVCG_ACC_WRITE = 0x4 + BPF_DEVCG_DEV_BLOCK = 0x1 + BPF_DEVCG_DEV_CHAR = 0x2 + BPF_FIB_LOOKUP_DIRECT = 0x1 + BPF_FIB_LOOKUP_OUTPUT = 0x2 + BPF_FIB_LKUP_RET_SUCCESS = 0x0 + BPF_FIB_LKUP_RET_BLACKHOLE = 0x1 + BPF_FIB_LKUP_RET_UNREACHABLE = 0x2 + BPF_FIB_LKUP_RET_PROHIBIT = 0x3 + BPF_FIB_LKUP_RET_NOT_FWDED = 0x4 + BPF_FIB_LKUP_RET_FWD_DISABLED = 0x5 + BPF_FIB_LKUP_RET_UNSUPP_LWT = 0x6 + BPF_FIB_LKUP_RET_NO_NEIGH = 0x7 + BPF_FIB_LKUP_RET_FRAG_NEEDED = 0x8 + BPF_FD_TYPE_RAW_TRACEPOINT = 0x0 + BPF_FD_TYPE_TRACEPOINT = 0x1 + BPF_FD_TYPE_KPROBE = 0x2 + BPF_FD_TYPE_KRETPROBE = 0x3 + BPF_FD_TYPE_UPROBE = 0x4 + BPF_FD_TYPE_URETPROBE = 0x5 + BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG = 0x1 + BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL = 0x2 + BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP = 0x4 +) + +const ( + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_DECnet_IFADDR = 0xd + RTNLGRP_NOP2 = 0xe + RTNLGRP_DECnet_ROUTE = 0xf + RTNLGRP_DECnet_RULE = 0x10 + RTNLGRP_NOP4 = 0x11 + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + RTNLGRP_PHONET_IFADDR = 0x15 + RTNLGRP_PHONET_ROUTE = 0x16 + RTNLGRP_DCB = 0x17 + RTNLGRP_IPV4_NETCONF = 0x18 + RTNLGRP_IPV6_NETCONF = 0x19 + RTNLGRP_MDB = 0x1a + RTNLGRP_MPLS_ROUTE = 0x1b + RTNLGRP_NSID = 0x1c + RTNLGRP_MPLS_NETCONF = 0x1d + RTNLGRP_IPV4_MROUTE_R = 0x1e + RTNLGRP_IPV6_MROUTE_R = 0x1f + RTNLGRP_NEXTHOP = 0x20 + RTNLGRP_BRVLAN = 0x21 +) + +type CapUserHeader struct { + Version uint32 + Pid int32 +} + +type CapUserData struct { + Effective uint32 + Permitted uint32 + Inheritable uint32 +} + +const ( + LINUX_CAPABILITY_VERSION_1 = 0x19980330 + LINUX_CAPABILITY_VERSION_2 = 0x20071026 + LINUX_CAPABILITY_VERSION_3 = 0x20080522 +) + +const ( + LO_FLAGS_READ_ONLY = 0x1 + LO_FLAGS_AUTOCLEAR = 0x4 + LO_FLAGS_PARTSCAN = 0x8 + LO_FLAGS_DIRECT_IO = 0x10 +) + +type LoopInfo64 struct { + Device uint64 + Inode uint64 + Rdevice uint64 + Offset uint64 + Sizelimit uint64 + Number uint32 + Encrypt_type uint32 + Encrypt_key_size uint32 + Flags uint32 + File_name [64]uint8 + Crypt_name [64]uint8 + Encrypt_key [32]uint8 + Init [2]uint64 +} + +type TIPCSocketAddr struct { + Ref uint32 + Node uint32 +} + +type TIPCServiceRange struct { + Type uint32 + Lower uint32 + Upper uint32 +} + +type TIPCServiceName struct { + Type uint32 + Instance uint32 + Domain uint32 +} + +type TIPCEvent struct { + Event uint32 + Lower uint32 + Upper uint32 + Port TIPCSocketAddr + S TIPCSubscr +} + +type TIPCGroupReq struct { + Type uint32 + Instance uint32 + Scope uint32 + Flags uint32 +} + +const ( + TIPC_CLUSTER_SCOPE = 0x2 + TIPC_NODE_SCOPE = 0x3 +) + +const ( + SYSLOG_ACTION_CLOSE = 0 + SYSLOG_ACTION_OPEN = 1 + SYSLOG_ACTION_READ = 2 + SYSLOG_ACTION_READ_ALL = 3 + SYSLOG_ACTION_READ_CLEAR = 4 + SYSLOG_ACTION_CLEAR = 5 + SYSLOG_ACTION_CONSOLE_OFF = 6 + SYSLOG_ACTION_CONSOLE_ON = 7 + SYSLOG_ACTION_CONSOLE_LEVEL = 8 + SYSLOG_ACTION_SIZE_UNREAD = 9 + SYSLOG_ACTION_SIZE_BUFFER = 10 +) + +const ( + DEVLINK_CMD_UNSPEC = 0x0 + DEVLINK_CMD_GET = 0x1 + DEVLINK_CMD_SET = 0x2 + DEVLINK_CMD_NEW = 0x3 + DEVLINK_CMD_DEL = 0x4 + DEVLINK_CMD_PORT_GET = 0x5 + DEVLINK_CMD_PORT_SET = 0x6 + DEVLINK_CMD_PORT_NEW = 0x7 + DEVLINK_CMD_PORT_DEL = 0x8 + DEVLINK_CMD_PORT_SPLIT = 0x9 + DEVLINK_CMD_PORT_UNSPLIT = 0xa + DEVLINK_CMD_SB_GET = 0xb + DEVLINK_CMD_SB_SET = 0xc + DEVLINK_CMD_SB_NEW = 0xd + DEVLINK_CMD_SB_DEL = 0xe + DEVLINK_CMD_SB_POOL_GET = 0xf + DEVLINK_CMD_SB_POOL_SET = 0x10 + DEVLINK_CMD_SB_POOL_NEW = 0x11 + DEVLINK_CMD_SB_POOL_DEL = 0x12 + DEVLINK_CMD_SB_PORT_POOL_GET = 0x13 + DEVLINK_CMD_SB_PORT_POOL_SET = 0x14 + DEVLINK_CMD_SB_PORT_POOL_NEW = 0x15 + DEVLINK_CMD_SB_PORT_POOL_DEL = 0x16 + DEVLINK_CMD_SB_TC_POOL_BIND_GET = 0x17 + DEVLINK_CMD_SB_TC_POOL_BIND_SET = 0x18 + DEVLINK_CMD_SB_TC_POOL_BIND_NEW = 0x19 + DEVLINK_CMD_SB_TC_POOL_BIND_DEL = 0x1a + DEVLINK_CMD_SB_OCC_SNAPSHOT = 0x1b + DEVLINK_CMD_SB_OCC_MAX_CLEAR = 0x1c + DEVLINK_CMD_ESWITCH_GET = 0x1d + DEVLINK_CMD_ESWITCH_SET = 0x1e + DEVLINK_CMD_DPIPE_TABLE_GET = 0x1f + DEVLINK_CMD_DPIPE_ENTRIES_GET = 0x20 + DEVLINK_CMD_DPIPE_HEADERS_GET = 0x21 + DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET = 0x22 + DEVLINK_CMD_RESOURCE_SET = 0x23 + DEVLINK_CMD_RESOURCE_DUMP = 0x24 + DEVLINK_CMD_RELOAD = 0x25 + DEVLINK_CMD_PARAM_GET = 0x26 + DEVLINK_CMD_PARAM_SET = 0x27 + DEVLINK_CMD_PARAM_NEW = 0x28 + DEVLINK_CMD_PARAM_DEL = 0x29 + DEVLINK_CMD_REGION_GET = 0x2a + DEVLINK_CMD_REGION_SET = 0x2b + DEVLINK_CMD_REGION_NEW = 0x2c + DEVLINK_CMD_REGION_DEL = 0x2d + DEVLINK_CMD_REGION_READ = 0x2e + DEVLINK_CMD_PORT_PARAM_GET = 0x2f + DEVLINK_CMD_PORT_PARAM_SET = 0x30 + DEVLINK_CMD_PORT_PARAM_NEW = 0x31 + DEVLINK_CMD_PORT_PARAM_DEL = 0x32 + DEVLINK_CMD_INFO_GET = 0x33 + DEVLINK_CMD_HEALTH_REPORTER_GET = 0x34 + DEVLINK_CMD_HEALTH_REPORTER_SET = 0x35 + DEVLINK_CMD_HEALTH_REPORTER_RECOVER = 0x36 + DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE = 0x37 + DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET = 0x38 + DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR = 0x39 + DEVLINK_CMD_FLASH_UPDATE = 0x3a + DEVLINK_CMD_FLASH_UPDATE_END = 0x3b + DEVLINK_CMD_FLASH_UPDATE_STATUS = 0x3c + DEVLINK_CMD_TRAP_GET = 0x3d + DEVLINK_CMD_TRAP_SET = 0x3e + DEVLINK_CMD_TRAP_NEW = 0x3f + DEVLINK_CMD_TRAP_DEL = 0x40 + DEVLINK_CMD_TRAP_GROUP_GET = 0x41 + DEVLINK_CMD_TRAP_GROUP_SET = 0x42 + DEVLINK_CMD_TRAP_GROUP_NEW = 0x43 + DEVLINK_CMD_TRAP_GROUP_DEL = 0x44 + DEVLINK_CMD_TRAP_POLICER_GET = 0x45 + DEVLINK_CMD_TRAP_POLICER_SET = 0x46 + DEVLINK_CMD_TRAP_POLICER_NEW = 0x47 + DEVLINK_CMD_TRAP_POLICER_DEL = 0x48 + DEVLINK_CMD_HEALTH_REPORTER_TEST = 0x49 + DEVLINK_CMD_MAX = 0x4d + DEVLINK_PORT_TYPE_NOTSET = 0x0 + DEVLINK_PORT_TYPE_AUTO = 0x1 + DEVLINK_PORT_TYPE_ETH = 0x2 + DEVLINK_PORT_TYPE_IB = 0x3 + DEVLINK_SB_POOL_TYPE_INGRESS = 0x0 + DEVLINK_SB_POOL_TYPE_EGRESS = 0x1 + DEVLINK_SB_THRESHOLD_TYPE_STATIC = 0x0 + DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC = 0x1 + DEVLINK_ESWITCH_MODE_LEGACY = 0x0 + DEVLINK_ESWITCH_MODE_SWITCHDEV = 0x1 + DEVLINK_ESWITCH_INLINE_MODE_NONE = 0x0 + DEVLINK_ESWITCH_INLINE_MODE_LINK = 0x1 + DEVLINK_ESWITCH_INLINE_MODE_NETWORK = 0x2 + DEVLINK_ESWITCH_INLINE_MODE_TRANSPORT = 0x3 + DEVLINK_ESWITCH_ENCAP_MODE_NONE = 0x0 + DEVLINK_ESWITCH_ENCAP_MODE_BASIC = 0x1 + DEVLINK_PORT_FLAVOUR_PHYSICAL = 0x0 + DEVLINK_PORT_FLAVOUR_CPU = 0x1 + DEVLINK_PORT_FLAVOUR_DSA = 0x2 + DEVLINK_PORT_FLAVOUR_PCI_PF = 0x3 + DEVLINK_PORT_FLAVOUR_PCI_VF = 0x4 + DEVLINK_PORT_FLAVOUR_VIRTUAL = 0x5 + DEVLINK_PORT_FLAVOUR_UNUSED = 0x6 + DEVLINK_PARAM_CMODE_RUNTIME = 0x0 + DEVLINK_PARAM_CMODE_DRIVERINIT = 0x1 + DEVLINK_PARAM_CMODE_PERMANENT = 0x2 + DEVLINK_PARAM_CMODE_MAX = 0x2 + DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DRIVER = 0x0 + DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_FLASH = 0x1 + DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DISK = 0x2 + DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_UNKNOWN = 0x3 + DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_UNKNOWN = 0x0 + DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_ALWAYS = 0x1 + DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_NEVER = 0x2 + DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_DISK = 0x3 + DEVLINK_ATTR_STATS_RX_PACKETS = 0x0 + DEVLINK_ATTR_STATS_RX_BYTES = 0x1 + DEVLINK_ATTR_STATS_RX_DROPPED = 0x2 + DEVLINK_ATTR_STATS_MAX = 0x2 + DEVLINK_FLASH_OVERWRITE_SETTINGS_BIT = 0x0 + DEVLINK_FLASH_OVERWRITE_IDENTIFIERS_BIT = 0x1 + DEVLINK_FLASH_OVERWRITE_MAX_BIT = 0x1 + DEVLINK_TRAP_ACTION_DROP = 0x0 + DEVLINK_TRAP_ACTION_TRAP = 0x1 + DEVLINK_TRAP_ACTION_MIRROR = 0x2 + DEVLINK_TRAP_TYPE_DROP = 0x0 + DEVLINK_TRAP_TYPE_EXCEPTION = 0x1 + DEVLINK_TRAP_TYPE_CONTROL = 0x2 + DEVLINK_ATTR_TRAP_METADATA_TYPE_IN_PORT = 0x0 + DEVLINK_ATTR_TRAP_METADATA_TYPE_FA_COOKIE = 0x1 + DEVLINK_RELOAD_ACTION_UNSPEC = 0x0 + DEVLINK_RELOAD_ACTION_DRIVER_REINIT = 0x1 + DEVLINK_RELOAD_ACTION_FW_ACTIVATE = 0x2 + DEVLINK_RELOAD_ACTION_MAX = 0x2 + DEVLINK_RELOAD_LIMIT_UNSPEC = 0x0 + DEVLINK_RELOAD_LIMIT_NO_RESET = 0x1 + DEVLINK_RELOAD_LIMIT_MAX = 0x1 + DEVLINK_ATTR_UNSPEC = 0x0 + DEVLINK_ATTR_BUS_NAME = 0x1 + DEVLINK_ATTR_DEV_NAME = 0x2 + DEVLINK_ATTR_PORT_INDEX = 0x3 + DEVLINK_ATTR_PORT_TYPE = 0x4 + DEVLINK_ATTR_PORT_DESIRED_TYPE = 0x5 + DEVLINK_ATTR_PORT_NETDEV_IFINDEX = 0x6 + DEVLINK_ATTR_PORT_NETDEV_NAME = 0x7 + DEVLINK_ATTR_PORT_IBDEV_NAME = 0x8 + DEVLINK_ATTR_PORT_SPLIT_COUNT = 0x9 + DEVLINK_ATTR_PORT_SPLIT_GROUP = 0xa + DEVLINK_ATTR_SB_INDEX = 0xb + DEVLINK_ATTR_SB_SIZE = 0xc + DEVLINK_ATTR_SB_INGRESS_POOL_COUNT = 0xd + DEVLINK_ATTR_SB_EGRESS_POOL_COUNT = 0xe + DEVLINK_ATTR_SB_INGRESS_TC_COUNT = 0xf + DEVLINK_ATTR_SB_EGRESS_TC_COUNT = 0x10 + DEVLINK_ATTR_SB_POOL_INDEX = 0x11 + DEVLINK_ATTR_SB_POOL_TYPE = 0x12 + DEVLINK_ATTR_SB_POOL_SIZE = 0x13 + DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE = 0x14 + DEVLINK_ATTR_SB_THRESHOLD = 0x15 + DEVLINK_ATTR_SB_TC_INDEX = 0x16 + DEVLINK_ATTR_SB_OCC_CUR = 0x17 + DEVLINK_ATTR_SB_OCC_MAX = 0x18 + DEVLINK_ATTR_ESWITCH_MODE = 0x19 + DEVLINK_ATTR_ESWITCH_INLINE_MODE = 0x1a + DEVLINK_ATTR_DPIPE_TABLES = 0x1b + DEVLINK_ATTR_DPIPE_TABLE = 0x1c + DEVLINK_ATTR_DPIPE_TABLE_NAME = 0x1d + DEVLINK_ATTR_DPIPE_TABLE_SIZE = 0x1e + DEVLINK_ATTR_DPIPE_TABLE_MATCHES = 0x1f + DEVLINK_ATTR_DPIPE_TABLE_ACTIONS = 0x20 + DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED = 0x21 + DEVLINK_ATTR_DPIPE_ENTRIES = 0x22 + DEVLINK_ATTR_DPIPE_ENTRY = 0x23 + DEVLINK_ATTR_DPIPE_ENTRY_INDEX = 0x24 + DEVLINK_ATTR_DPIPE_ENTRY_MATCH_VALUES = 0x25 + DEVLINK_ATTR_DPIPE_ENTRY_ACTION_VALUES = 0x26 + DEVLINK_ATTR_DPIPE_ENTRY_COUNTER = 0x27 + DEVLINK_ATTR_DPIPE_MATCH = 0x28 + DEVLINK_ATTR_DPIPE_MATCH_VALUE = 0x29 + DEVLINK_ATTR_DPIPE_MATCH_TYPE = 0x2a + DEVLINK_ATTR_DPIPE_ACTION = 0x2b + DEVLINK_ATTR_DPIPE_ACTION_VALUE = 0x2c + DEVLINK_ATTR_DPIPE_ACTION_TYPE = 0x2d + DEVLINK_ATTR_DPIPE_VALUE = 0x2e + DEVLINK_ATTR_DPIPE_VALUE_MASK = 0x2f + DEVLINK_ATTR_DPIPE_VALUE_MAPPING = 0x30 + DEVLINK_ATTR_DPIPE_HEADERS = 0x31 + DEVLINK_ATTR_DPIPE_HEADER = 0x32 + DEVLINK_ATTR_DPIPE_HEADER_NAME = 0x33 + DEVLINK_ATTR_DPIPE_HEADER_ID = 0x34 + DEVLINK_ATTR_DPIPE_HEADER_FIELDS = 0x35 + DEVLINK_ATTR_DPIPE_HEADER_GLOBAL = 0x36 + DEVLINK_ATTR_DPIPE_HEADER_INDEX = 0x37 + DEVLINK_ATTR_DPIPE_FIELD = 0x38 + DEVLINK_ATTR_DPIPE_FIELD_NAME = 0x39 + DEVLINK_ATTR_DPIPE_FIELD_ID = 0x3a + DEVLINK_ATTR_DPIPE_FIELD_BITWIDTH = 0x3b + DEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE = 0x3c + DEVLINK_ATTR_PAD = 0x3d + DEVLINK_ATTR_ESWITCH_ENCAP_MODE = 0x3e + DEVLINK_ATTR_RESOURCE_LIST = 0x3f + DEVLINK_ATTR_RESOURCE = 0x40 + DEVLINK_ATTR_RESOURCE_NAME = 0x41 + DEVLINK_ATTR_RESOURCE_ID = 0x42 + DEVLINK_ATTR_RESOURCE_SIZE = 0x43 + DEVLINK_ATTR_RESOURCE_SIZE_NEW = 0x44 + DEVLINK_ATTR_RESOURCE_SIZE_VALID = 0x45 + DEVLINK_ATTR_RESOURCE_SIZE_MIN = 0x46 + DEVLINK_ATTR_RESOURCE_SIZE_MAX = 0x47 + DEVLINK_ATTR_RESOURCE_SIZE_GRAN = 0x48 + DEVLINK_ATTR_RESOURCE_UNIT = 0x49 + DEVLINK_ATTR_RESOURCE_OCC = 0x4a + DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID = 0x4b + DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS = 0x4c + DEVLINK_ATTR_PORT_FLAVOUR = 0x4d + DEVLINK_ATTR_PORT_NUMBER = 0x4e + DEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER = 0x4f + DEVLINK_ATTR_PARAM = 0x50 + DEVLINK_ATTR_PARAM_NAME = 0x51 + DEVLINK_ATTR_PARAM_GENERIC = 0x52 + DEVLINK_ATTR_PARAM_TYPE = 0x53 + DEVLINK_ATTR_PARAM_VALUES_LIST = 0x54 + DEVLINK_ATTR_PARAM_VALUE = 0x55 + DEVLINK_ATTR_PARAM_VALUE_DATA = 0x56 + DEVLINK_ATTR_PARAM_VALUE_CMODE = 0x57 + DEVLINK_ATTR_REGION_NAME = 0x58 + DEVLINK_ATTR_REGION_SIZE = 0x59 + DEVLINK_ATTR_REGION_SNAPSHOTS = 0x5a + DEVLINK_ATTR_REGION_SNAPSHOT = 0x5b + DEVLINK_ATTR_REGION_SNAPSHOT_ID = 0x5c + DEVLINK_ATTR_REGION_CHUNKS = 0x5d + DEVLINK_ATTR_REGION_CHUNK = 0x5e + DEVLINK_ATTR_REGION_CHUNK_DATA = 0x5f + DEVLINK_ATTR_REGION_CHUNK_ADDR = 0x60 + DEVLINK_ATTR_REGION_CHUNK_LEN = 0x61 + DEVLINK_ATTR_INFO_DRIVER_NAME = 0x62 + DEVLINK_ATTR_INFO_SERIAL_NUMBER = 0x63 + DEVLINK_ATTR_INFO_VERSION_FIXED = 0x64 + DEVLINK_ATTR_INFO_VERSION_RUNNING = 0x65 + DEVLINK_ATTR_INFO_VERSION_STORED = 0x66 + DEVLINK_ATTR_INFO_VERSION_NAME = 0x67 + DEVLINK_ATTR_INFO_VERSION_VALUE = 0x68 + DEVLINK_ATTR_SB_POOL_CELL_SIZE = 0x69 + DEVLINK_ATTR_FMSG = 0x6a + DEVLINK_ATTR_FMSG_OBJ_NEST_START = 0x6b + DEVLINK_ATTR_FMSG_PAIR_NEST_START = 0x6c + DEVLINK_ATTR_FMSG_ARR_NEST_START = 0x6d + DEVLINK_ATTR_FMSG_NEST_END = 0x6e + DEVLINK_ATTR_FMSG_OBJ_NAME = 0x6f + DEVLINK_ATTR_FMSG_OBJ_VALUE_TYPE = 0x70 + DEVLINK_ATTR_FMSG_OBJ_VALUE_DATA = 0x71 + DEVLINK_ATTR_HEALTH_REPORTER = 0x72 + DEVLINK_ATTR_HEALTH_REPORTER_NAME = 0x73 + DEVLINK_ATTR_HEALTH_REPORTER_STATE = 0x74 + DEVLINK_ATTR_HEALTH_REPORTER_ERR_COUNT = 0x75 + DEVLINK_ATTR_HEALTH_REPORTER_RECOVER_COUNT = 0x76 + DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS = 0x77 + DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD = 0x78 + DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER = 0x79 + DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME = 0x7a + DEVLINK_ATTR_FLASH_UPDATE_COMPONENT = 0x7b + DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG = 0x7c + DEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE = 0x7d + DEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL = 0x7e + DEVLINK_ATTR_PORT_PCI_PF_NUMBER = 0x7f + DEVLINK_ATTR_PORT_PCI_VF_NUMBER = 0x80 + DEVLINK_ATTR_STATS = 0x81 + DEVLINK_ATTR_TRAP_NAME = 0x82 + DEVLINK_ATTR_TRAP_ACTION = 0x83 + DEVLINK_ATTR_TRAP_TYPE = 0x84 + DEVLINK_ATTR_TRAP_GENERIC = 0x85 + DEVLINK_ATTR_TRAP_METADATA = 0x86 + DEVLINK_ATTR_TRAP_GROUP_NAME = 0x87 + DEVLINK_ATTR_RELOAD_FAILED = 0x88 + DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS_NS = 0x89 + DEVLINK_ATTR_NETNS_FD = 0x8a + DEVLINK_ATTR_NETNS_PID = 0x8b + DEVLINK_ATTR_NETNS_ID = 0x8c + DEVLINK_ATTR_HEALTH_REPORTER_AUTO_DUMP = 0x8d + DEVLINK_ATTR_TRAP_POLICER_ID = 0x8e + DEVLINK_ATTR_TRAP_POLICER_RATE = 0x8f + DEVLINK_ATTR_TRAP_POLICER_BURST = 0x90 + DEVLINK_ATTR_PORT_FUNCTION = 0x91 + DEVLINK_ATTR_INFO_BOARD_SERIAL_NUMBER = 0x92 + DEVLINK_ATTR_PORT_LANES = 0x93 + DEVLINK_ATTR_PORT_SPLITTABLE = 0x94 + DEVLINK_ATTR_PORT_EXTERNAL = 0x95 + DEVLINK_ATTR_PORT_CONTROLLER_NUMBER = 0x96 + DEVLINK_ATTR_FLASH_UPDATE_STATUS_TIMEOUT = 0x97 + DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK = 0x98 + DEVLINK_ATTR_RELOAD_ACTION = 0x99 + DEVLINK_ATTR_RELOAD_ACTIONS_PERFORMED = 0x9a + DEVLINK_ATTR_RELOAD_LIMITS = 0x9b + DEVLINK_ATTR_DEV_STATS = 0x9c + DEVLINK_ATTR_RELOAD_STATS = 0x9d + DEVLINK_ATTR_RELOAD_STATS_ENTRY = 0x9e + DEVLINK_ATTR_RELOAD_STATS_LIMIT = 0x9f + DEVLINK_ATTR_RELOAD_STATS_VALUE = 0xa0 + DEVLINK_ATTR_REMOTE_RELOAD_STATS = 0xa1 + DEVLINK_ATTR_RELOAD_ACTION_INFO = 0xa2 + DEVLINK_ATTR_RELOAD_ACTION_STATS = 0xa3 + DEVLINK_ATTR_PORT_PCI_SF_NUMBER = 0xa4 + DEVLINK_ATTR_RATE_TYPE = 0xa5 + DEVLINK_ATTR_RATE_TX_SHARE = 0xa6 + DEVLINK_ATTR_RATE_TX_MAX = 0xa7 + DEVLINK_ATTR_RATE_NODE_NAME = 0xa8 + DEVLINK_ATTR_RATE_PARENT_NODE_NAME = 0xa9 + DEVLINK_ATTR_REGION_MAX_SNAPSHOTS = 0xaa + DEVLINK_ATTR_MAX = 0xaa + DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0x0 + DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 0x1 + DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0x0 + DEVLINK_DPIPE_ACTION_TYPE_FIELD_MODIFY = 0x0 + DEVLINK_DPIPE_FIELD_ETHERNET_DST_MAC = 0x0 + DEVLINK_DPIPE_FIELD_IPV4_DST_IP = 0x0 + DEVLINK_DPIPE_FIELD_IPV6_DST_IP = 0x0 + DEVLINK_DPIPE_HEADER_ETHERNET = 0x0 + DEVLINK_DPIPE_HEADER_IPV4 = 0x1 + DEVLINK_DPIPE_HEADER_IPV6 = 0x2 + DEVLINK_RESOURCE_UNIT_ENTRY = 0x0 + DEVLINK_PORT_FUNCTION_ATTR_UNSPEC = 0x0 + DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR = 0x1 + DEVLINK_PORT_FN_ATTR_STATE = 0x2 + DEVLINK_PORT_FN_ATTR_OPSTATE = 0x3 + DEVLINK_PORT_FUNCTION_ATTR_MAX = 0x3 +) + +type FsverityDigest struct { + Algorithm uint16 + Size uint16 +} + +type FsverityEnableArg struct { + Version uint32 + Hash_algorithm uint32 + Block_size uint32 + Salt_size uint32 + Salt_ptr uint64 + Sig_size uint32 + _ uint32 + Sig_ptr uint64 + _ [11]uint64 +} + +type Nhmsg struct { + Family uint8 + Scope uint8 + Protocol uint8 + Resvd uint8 + Flags uint32 +} + +type NexthopGrp struct { + Id uint32 + Weight uint8 + Resvd1 uint8 + Resvd2 uint16 +} + +const ( + NHA_UNSPEC = 0x0 + NHA_ID = 0x1 + NHA_GROUP = 0x2 + NHA_GROUP_TYPE = 0x3 + NHA_BLACKHOLE = 0x4 + NHA_OIF = 0x5 + NHA_GATEWAY = 0x6 + NHA_ENCAP_TYPE = 0x7 + NHA_ENCAP = 0x8 + NHA_GROUPS = 0x9 + NHA_MASTER = 0xa +) + +const ( + CAN_RAW_FILTER = 0x1 + CAN_RAW_ERR_FILTER = 0x2 + CAN_RAW_LOOPBACK = 0x3 + CAN_RAW_RECV_OWN_MSGS = 0x4 + CAN_RAW_FD_FRAMES = 0x5 + CAN_RAW_JOIN_FILTERS = 0x6 +) + +type WatchdogInfo struct { + Options uint32 + Version uint32 + Identity [32]uint8 +} + +type PPSFData struct { + Info PPSKInfo + Timeout PPSKTime +} + +type PPSKParams struct { + Api_version int32 + Mode int32 + Assert_off_tu PPSKTime + Clear_off_tu PPSKTime +} + +type PPSKTime struct { + Sec int64 + Nsec int32 + Flags uint32 +} + +const ( + LWTUNNEL_ENCAP_NONE = 0x0 + LWTUNNEL_ENCAP_MPLS = 0x1 + LWTUNNEL_ENCAP_IP = 0x2 + LWTUNNEL_ENCAP_ILA = 0x3 + LWTUNNEL_ENCAP_IP6 = 0x4 + LWTUNNEL_ENCAP_SEG6 = 0x5 + LWTUNNEL_ENCAP_BPF = 0x6 + LWTUNNEL_ENCAP_SEG6_LOCAL = 0x7 + LWTUNNEL_ENCAP_RPL = 0x8 + LWTUNNEL_ENCAP_IOAM6 = 0x9 + LWTUNNEL_ENCAP_MAX = 0x9 + + MPLS_IPTUNNEL_UNSPEC = 0x0 + MPLS_IPTUNNEL_DST = 0x1 + MPLS_IPTUNNEL_TTL = 0x2 + MPLS_IPTUNNEL_MAX = 0x2 +) + +const ( + ETHTOOL_ID_UNSPEC = 0x0 + ETHTOOL_RX_COPYBREAK = 0x1 + ETHTOOL_TX_COPYBREAK = 0x2 + ETHTOOL_PFC_PREVENTION_TOUT = 0x3 + ETHTOOL_TUNABLE_UNSPEC = 0x0 + ETHTOOL_TUNABLE_U8 = 0x1 + ETHTOOL_TUNABLE_U16 = 0x2 + ETHTOOL_TUNABLE_U32 = 0x3 + ETHTOOL_TUNABLE_U64 = 0x4 + ETHTOOL_TUNABLE_STRING = 0x5 + ETHTOOL_TUNABLE_S8 = 0x6 + ETHTOOL_TUNABLE_S16 = 0x7 + ETHTOOL_TUNABLE_S32 = 0x8 + ETHTOOL_TUNABLE_S64 = 0x9 + ETHTOOL_PHY_ID_UNSPEC = 0x0 + ETHTOOL_PHY_DOWNSHIFT = 0x1 + ETHTOOL_PHY_FAST_LINK_DOWN = 0x2 + ETHTOOL_PHY_EDPD = 0x3 + ETHTOOL_LINK_EXT_STATE_AUTONEG = 0x0 + ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE = 0x1 + ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH = 0x2 + ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY = 0x3 + ETHTOOL_LINK_EXT_STATE_NO_CABLE = 0x4 + ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE = 0x5 + ETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE = 0x6 + ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE = 0x7 + ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED = 0x8 + ETHTOOL_LINK_EXT_STATE_OVERHEAT = 0x9 + ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED = 0x1 + ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED = 0x2 + ETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED = 0x3 + ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE = 0x4 + ETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE = 0x5 + ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD = 0x6 + ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED = 0x1 + ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT = 0x2 + ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY = 0x3 + ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT = 0x4 + ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK = 0x1 + ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK = 0x2 + ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS = 0x3 + ETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED = 0x4 + ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED = 0x5 + ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS = 0x1 + ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE = 0x2 + ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE = 0x1 + ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE = 0x2 + ETHTOOL_FLASH_ALL_REGIONS = 0x0 + ETHTOOL_F_UNSUPPORTED__BIT = 0x0 + ETHTOOL_F_WISH__BIT = 0x1 + ETHTOOL_F_COMPAT__BIT = 0x2 + ETHTOOL_FEC_NONE_BIT = 0x0 + ETHTOOL_FEC_AUTO_BIT = 0x1 + ETHTOOL_FEC_OFF_BIT = 0x2 + ETHTOOL_FEC_RS_BIT = 0x3 + ETHTOOL_FEC_BASER_BIT = 0x4 + ETHTOOL_FEC_LLRS_BIT = 0x5 + ETHTOOL_LINK_MODE_10baseT_Half_BIT = 0x0 + ETHTOOL_LINK_MODE_10baseT_Full_BIT = 0x1 + ETHTOOL_LINK_MODE_100baseT_Half_BIT = 0x2 + ETHTOOL_LINK_MODE_100baseT_Full_BIT = 0x3 + ETHTOOL_LINK_MODE_1000baseT_Half_BIT = 0x4 + ETHTOOL_LINK_MODE_1000baseT_Full_BIT = 0x5 + ETHTOOL_LINK_MODE_Autoneg_BIT = 0x6 + ETHTOOL_LINK_MODE_TP_BIT = 0x7 + ETHTOOL_LINK_MODE_AUI_BIT = 0x8 + ETHTOOL_LINK_MODE_MII_BIT = 0x9 + ETHTOOL_LINK_MODE_FIBRE_BIT = 0xa + ETHTOOL_LINK_MODE_BNC_BIT = 0xb + ETHTOOL_LINK_MODE_10000baseT_Full_BIT = 0xc + ETHTOOL_LINK_MODE_Pause_BIT = 0xd + ETHTOOL_LINK_MODE_Asym_Pause_BIT = 0xe + ETHTOOL_LINK_MODE_2500baseX_Full_BIT = 0xf + ETHTOOL_LINK_MODE_Backplane_BIT = 0x10 + ETHTOOL_LINK_MODE_1000baseKX_Full_BIT = 0x11 + ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT = 0x12 + ETHTOOL_LINK_MODE_10000baseKR_Full_BIT = 0x13 + ETHTOOL_LINK_MODE_10000baseR_FEC_BIT = 0x14 + ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT = 0x15 + ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT = 0x16 + ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT = 0x17 + ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT = 0x18 + ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT = 0x19 + ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT = 0x1a + ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT = 0x1b + ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT = 0x1c + ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT = 0x1d + ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT = 0x1e + ETHTOOL_LINK_MODE_25000baseCR_Full_BIT = 0x1f + ETHTOOL_LINK_MODE_25000baseKR_Full_BIT = 0x20 + ETHTOOL_LINK_MODE_25000baseSR_Full_BIT = 0x21 + ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT = 0x22 + ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT = 0x23 + ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT = 0x24 + ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT = 0x25 + ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT = 0x26 + ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT = 0x27 + ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT = 0x28 + ETHTOOL_LINK_MODE_1000baseX_Full_BIT = 0x29 + ETHTOOL_LINK_MODE_10000baseCR_Full_BIT = 0x2a + ETHTOOL_LINK_MODE_10000baseSR_Full_BIT = 0x2b + ETHTOOL_LINK_MODE_10000baseLR_Full_BIT = 0x2c + ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT = 0x2d + ETHTOOL_LINK_MODE_10000baseER_Full_BIT = 0x2e + ETHTOOL_LINK_MODE_2500baseT_Full_BIT = 0x2f + ETHTOOL_LINK_MODE_5000baseT_Full_BIT = 0x30 + ETHTOOL_LINK_MODE_FEC_NONE_BIT = 0x31 + ETHTOOL_LINK_MODE_FEC_RS_BIT = 0x32 + ETHTOOL_LINK_MODE_FEC_BASER_BIT = 0x33 + ETHTOOL_LINK_MODE_50000baseKR_Full_BIT = 0x34 + ETHTOOL_LINK_MODE_50000baseSR_Full_BIT = 0x35 + ETHTOOL_LINK_MODE_50000baseCR_Full_BIT = 0x36 + ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT = 0x37 + ETHTOOL_LINK_MODE_50000baseDR_Full_BIT = 0x38 + ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT = 0x39 + ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT = 0x3a + ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT = 0x3b + ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT = 0x3c + ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT = 0x3d + ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT = 0x3e + ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT = 0x3f + ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT = 0x40 + ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT = 0x41 + ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT = 0x42 + ETHTOOL_LINK_MODE_100baseT1_Full_BIT = 0x43 + ETHTOOL_LINK_MODE_1000baseT1_Full_BIT = 0x44 + ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT = 0x45 + ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT = 0x46 + ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT = 0x47 + ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT = 0x48 + ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT = 0x49 + ETHTOOL_LINK_MODE_FEC_LLRS_BIT = 0x4a + ETHTOOL_LINK_MODE_100000baseKR_Full_BIT = 0x4b + ETHTOOL_LINK_MODE_100000baseSR_Full_BIT = 0x4c + ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT = 0x4d + ETHTOOL_LINK_MODE_100000baseCR_Full_BIT = 0x4e + ETHTOOL_LINK_MODE_100000baseDR_Full_BIT = 0x4f + ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT = 0x50 + ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT = 0x51 + ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT = 0x52 + ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT = 0x53 + ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT = 0x54 + ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT = 0x55 + ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT = 0x56 + ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT = 0x57 + ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT = 0x58 + ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT = 0x59 + ETHTOOL_LINK_MODE_100baseFX_Half_BIT = 0x5a + ETHTOOL_LINK_MODE_100baseFX_Full_BIT = 0x5b + + ETHTOOL_MSG_USER_NONE = 0x0 + ETHTOOL_MSG_STRSET_GET = 0x1 + ETHTOOL_MSG_LINKINFO_GET = 0x2 + ETHTOOL_MSG_LINKINFO_SET = 0x3 + ETHTOOL_MSG_LINKMODES_GET = 0x4 + ETHTOOL_MSG_LINKMODES_SET = 0x5 + ETHTOOL_MSG_LINKSTATE_GET = 0x6 + ETHTOOL_MSG_DEBUG_GET = 0x7 + ETHTOOL_MSG_DEBUG_SET = 0x8 + ETHTOOL_MSG_WOL_GET = 0x9 + ETHTOOL_MSG_WOL_SET = 0xa + ETHTOOL_MSG_FEATURES_GET = 0xb + ETHTOOL_MSG_FEATURES_SET = 0xc + ETHTOOL_MSG_PRIVFLAGS_GET = 0xd + ETHTOOL_MSG_PRIVFLAGS_SET = 0xe + ETHTOOL_MSG_RINGS_GET = 0xf + ETHTOOL_MSG_RINGS_SET = 0x10 + ETHTOOL_MSG_CHANNELS_GET = 0x11 + ETHTOOL_MSG_CHANNELS_SET = 0x12 + ETHTOOL_MSG_COALESCE_GET = 0x13 + ETHTOOL_MSG_COALESCE_SET = 0x14 + ETHTOOL_MSG_PAUSE_GET = 0x15 + ETHTOOL_MSG_PAUSE_SET = 0x16 + ETHTOOL_MSG_EEE_GET = 0x17 + ETHTOOL_MSG_EEE_SET = 0x18 + ETHTOOL_MSG_TSINFO_GET = 0x19 + ETHTOOL_MSG_CABLE_TEST_ACT = 0x1a + ETHTOOL_MSG_CABLE_TEST_TDR_ACT = 0x1b + ETHTOOL_MSG_TUNNEL_INFO_GET = 0x1c + ETHTOOL_MSG_FEC_GET = 0x1d + ETHTOOL_MSG_FEC_SET = 0x1e + ETHTOOL_MSG_MODULE_EEPROM_GET = 0x1f + ETHTOOL_MSG_STATS_GET = 0x20 + ETHTOOL_MSG_PHC_VCLOCKS_GET = 0x21 + ETHTOOL_MSG_MODULE_GET = 0x22 + ETHTOOL_MSG_MODULE_SET = 0x23 + ETHTOOL_MSG_USER_MAX = 0x23 + ETHTOOL_MSG_KERNEL_NONE = 0x0 + ETHTOOL_MSG_STRSET_GET_REPLY = 0x1 + ETHTOOL_MSG_LINKINFO_GET_REPLY = 0x2 + ETHTOOL_MSG_LINKINFO_NTF = 0x3 + ETHTOOL_MSG_LINKMODES_GET_REPLY = 0x4 + ETHTOOL_MSG_LINKMODES_NTF = 0x5 + ETHTOOL_MSG_LINKSTATE_GET_REPLY = 0x6 + ETHTOOL_MSG_DEBUG_GET_REPLY = 0x7 + ETHTOOL_MSG_DEBUG_NTF = 0x8 + ETHTOOL_MSG_WOL_GET_REPLY = 0x9 + ETHTOOL_MSG_WOL_NTF = 0xa + ETHTOOL_MSG_FEATURES_GET_REPLY = 0xb + ETHTOOL_MSG_FEATURES_SET_REPLY = 0xc + ETHTOOL_MSG_FEATURES_NTF = 0xd + ETHTOOL_MSG_PRIVFLAGS_GET_REPLY = 0xe + ETHTOOL_MSG_PRIVFLAGS_NTF = 0xf + ETHTOOL_MSG_RINGS_GET_REPLY = 0x10 + ETHTOOL_MSG_RINGS_NTF = 0x11 + ETHTOOL_MSG_CHANNELS_GET_REPLY = 0x12 + ETHTOOL_MSG_CHANNELS_NTF = 0x13 + ETHTOOL_MSG_COALESCE_GET_REPLY = 0x14 + ETHTOOL_MSG_COALESCE_NTF = 0x15 + ETHTOOL_MSG_PAUSE_GET_REPLY = 0x16 + ETHTOOL_MSG_PAUSE_NTF = 0x17 + ETHTOOL_MSG_EEE_GET_REPLY = 0x18 + ETHTOOL_MSG_EEE_NTF = 0x19 + ETHTOOL_MSG_TSINFO_GET_REPLY = 0x1a + ETHTOOL_MSG_CABLE_TEST_NTF = 0x1b + ETHTOOL_MSG_CABLE_TEST_TDR_NTF = 0x1c + ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY = 0x1d + ETHTOOL_MSG_FEC_GET_REPLY = 0x1e + ETHTOOL_MSG_FEC_NTF = 0x1f + ETHTOOL_MSG_MODULE_EEPROM_GET_REPLY = 0x20 + ETHTOOL_MSG_STATS_GET_REPLY = 0x21 + ETHTOOL_MSG_PHC_VCLOCKS_GET_REPLY = 0x22 + ETHTOOL_MSG_MODULE_GET_REPLY = 0x23 + ETHTOOL_MSG_MODULE_NTF = 0x24 + ETHTOOL_MSG_KERNEL_MAX = 0x24 + ETHTOOL_A_HEADER_UNSPEC = 0x0 + ETHTOOL_A_HEADER_DEV_INDEX = 0x1 + ETHTOOL_A_HEADER_DEV_NAME = 0x2 + ETHTOOL_A_HEADER_FLAGS = 0x3 + ETHTOOL_A_HEADER_MAX = 0x3 + ETHTOOL_A_BITSET_BIT_UNSPEC = 0x0 + ETHTOOL_A_BITSET_BIT_INDEX = 0x1 + ETHTOOL_A_BITSET_BIT_NAME = 0x2 + ETHTOOL_A_BITSET_BIT_VALUE = 0x3 + ETHTOOL_A_BITSET_BIT_MAX = 0x3 + ETHTOOL_A_BITSET_BITS_UNSPEC = 0x0 + ETHTOOL_A_BITSET_BITS_BIT = 0x1 + ETHTOOL_A_BITSET_BITS_MAX = 0x1 + ETHTOOL_A_BITSET_UNSPEC = 0x0 + ETHTOOL_A_BITSET_NOMASK = 0x1 + ETHTOOL_A_BITSET_SIZE = 0x2 + ETHTOOL_A_BITSET_BITS = 0x3 + ETHTOOL_A_BITSET_VALUE = 0x4 + ETHTOOL_A_BITSET_MASK = 0x5 + ETHTOOL_A_BITSET_MAX = 0x5 + ETHTOOL_A_STRING_UNSPEC = 0x0 + ETHTOOL_A_STRING_INDEX = 0x1 + ETHTOOL_A_STRING_VALUE = 0x2 + ETHTOOL_A_STRING_MAX = 0x2 + ETHTOOL_A_STRINGS_UNSPEC = 0x0 + ETHTOOL_A_STRINGS_STRING = 0x1 + ETHTOOL_A_STRINGS_MAX = 0x1 + ETHTOOL_A_STRINGSET_UNSPEC = 0x0 + ETHTOOL_A_STRINGSET_ID = 0x1 + ETHTOOL_A_STRINGSET_COUNT = 0x2 + ETHTOOL_A_STRINGSET_STRINGS = 0x3 + ETHTOOL_A_STRINGSET_MAX = 0x3 + ETHTOOL_A_STRINGSETS_UNSPEC = 0x0 + ETHTOOL_A_STRINGSETS_STRINGSET = 0x1 + ETHTOOL_A_STRINGSETS_MAX = 0x1 + ETHTOOL_A_STRSET_UNSPEC = 0x0 + ETHTOOL_A_STRSET_HEADER = 0x1 + ETHTOOL_A_STRSET_STRINGSETS = 0x2 + ETHTOOL_A_STRSET_COUNTS_ONLY = 0x3 + ETHTOOL_A_STRSET_MAX = 0x3 + ETHTOOL_A_LINKINFO_UNSPEC = 0x0 + ETHTOOL_A_LINKINFO_HEADER = 0x1 + ETHTOOL_A_LINKINFO_PORT = 0x2 + ETHTOOL_A_LINKINFO_PHYADDR = 0x3 + ETHTOOL_A_LINKINFO_TP_MDIX = 0x4 + ETHTOOL_A_LINKINFO_TP_MDIX_CTRL = 0x5 + ETHTOOL_A_LINKINFO_TRANSCEIVER = 0x6 + ETHTOOL_A_LINKINFO_MAX = 0x6 + ETHTOOL_A_LINKMODES_UNSPEC = 0x0 + ETHTOOL_A_LINKMODES_HEADER = 0x1 + ETHTOOL_A_LINKMODES_AUTONEG = 0x2 + ETHTOOL_A_LINKMODES_OURS = 0x3 + ETHTOOL_A_LINKMODES_PEER = 0x4 + ETHTOOL_A_LINKMODES_SPEED = 0x5 + ETHTOOL_A_LINKMODES_DUPLEX = 0x6 + ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG = 0x7 + ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE = 0x8 + ETHTOOL_A_LINKMODES_LANES = 0x9 + ETHTOOL_A_LINKMODES_MAX = 0x9 + ETHTOOL_A_LINKSTATE_UNSPEC = 0x0 + ETHTOOL_A_LINKSTATE_HEADER = 0x1 + ETHTOOL_A_LINKSTATE_LINK = 0x2 + ETHTOOL_A_LINKSTATE_SQI = 0x3 + ETHTOOL_A_LINKSTATE_SQI_MAX = 0x4 + ETHTOOL_A_LINKSTATE_EXT_STATE = 0x5 + ETHTOOL_A_LINKSTATE_EXT_SUBSTATE = 0x6 + ETHTOOL_A_LINKSTATE_MAX = 0x6 + ETHTOOL_A_DEBUG_UNSPEC = 0x0 + ETHTOOL_A_DEBUG_HEADER = 0x1 + ETHTOOL_A_DEBUG_MSGMASK = 0x2 + ETHTOOL_A_DEBUG_MAX = 0x2 + ETHTOOL_A_WOL_UNSPEC = 0x0 + ETHTOOL_A_WOL_HEADER = 0x1 + ETHTOOL_A_WOL_MODES = 0x2 + ETHTOOL_A_WOL_SOPASS = 0x3 + ETHTOOL_A_WOL_MAX = 0x3 + ETHTOOL_A_FEATURES_UNSPEC = 0x0 + ETHTOOL_A_FEATURES_HEADER = 0x1 + ETHTOOL_A_FEATURES_HW = 0x2 + ETHTOOL_A_FEATURES_WANTED = 0x3 + ETHTOOL_A_FEATURES_ACTIVE = 0x4 + ETHTOOL_A_FEATURES_NOCHANGE = 0x5 + ETHTOOL_A_FEATURES_MAX = 0x5 + ETHTOOL_A_PRIVFLAGS_UNSPEC = 0x0 + ETHTOOL_A_PRIVFLAGS_HEADER = 0x1 + ETHTOOL_A_PRIVFLAGS_FLAGS = 0x2 + ETHTOOL_A_PRIVFLAGS_MAX = 0x2 + ETHTOOL_A_RINGS_UNSPEC = 0x0 + ETHTOOL_A_RINGS_HEADER = 0x1 + ETHTOOL_A_RINGS_RX_MAX = 0x2 + ETHTOOL_A_RINGS_RX_MINI_MAX = 0x3 + ETHTOOL_A_RINGS_RX_JUMBO_MAX = 0x4 + ETHTOOL_A_RINGS_TX_MAX = 0x5 + ETHTOOL_A_RINGS_RX = 0x6 + ETHTOOL_A_RINGS_RX_MINI = 0x7 + ETHTOOL_A_RINGS_RX_JUMBO = 0x8 + ETHTOOL_A_RINGS_TX = 0x9 + ETHTOOL_A_RINGS_MAX = 0xa + ETHTOOL_A_CHANNELS_UNSPEC = 0x0 + ETHTOOL_A_CHANNELS_HEADER = 0x1 + ETHTOOL_A_CHANNELS_RX_MAX = 0x2 + ETHTOOL_A_CHANNELS_TX_MAX = 0x3 + ETHTOOL_A_CHANNELS_OTHER_MAX = 0x4 + ETHTOOL_A_CHANNELS_COMBINED_MAX = 0x5 + ETHTOOL_A_CHANNELS_RX_COUNT = 0x6 + ETHTOOL_A_CHANNELS_TX_COUNT = 0x7 + ETHTOOL_A_CHANNELS_OTHER_COUNT = 0x8 + ETHTOOL_A_CHANNELS_COMBINED_COUNT = 0x9 + ETHTOOL_A_CHANNELS_MAX = 0x9 + ETHTOOL_A_COALESCE_UNSPEC = 0x0 + ETHTOOL_A_COALESCE_HEADER = 0x1 + ETHTOOL_A_COALESCE_RX_USECS = 0x2 + ETHTOOL_A_COALESCE_RX_MAX_FRAMES = 0x3 + ETHTOOL_A_COALESCE_RX_USECS_IRQ = 0x4 + ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ = 0x5 + ETHTOOL_A_COALESCE_TX_USECS = 0x6 + ETHTOOL_A_COALESCE_TX_MAX_FRAMES = 0x7 + ETHTOOL_A_COALESCE_TX_USECS_IRQ = 0x8 + ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ = 0x9 + ETHTOOL_A_COALESCE_STATS_BLOCK_USECS = 0xa + ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX = 0xb + ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX = 0xc + ETHTOOL_A_COALESCE_PKT_RATE_LOW = 0xd + ETHTOOL_A_COALESCE_RX_USECS_LOW = 0xe + ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW = 0xf + ETHTOOL_A_COALESCE_TX_USECS_LOW = 0x10 + ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW = 0x11 + ETHTOOL_A_COALESCE_PKT_RATE_HIGH = 0x12 + ETHTOOL_A_COALESCE_RX_USECS_HIGH = 0x13 + ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH = 0x14 + ETHTOOL_A_COALESCE_TX_USECS_HIGH = 0x15 + ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH = 0x16 + ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 0x17 + ETHTOOL_A_COALESCE_USE_CQE_MODE_TX = 0x18 + ETHTOOL_A_COALESCE_USE_CQE_MODE_RX = 0x19 + ETHTOOL_A_COALESCE_MAX = 0x19 + ETHTOOL_A_PAUSE_UNSPEC = 0x0 + ETHTOOL_A_PAUSE_HEADER = 0x1 + ETHTOOL_A_PAUSE_AUTONEG = 0x2 + ETHTOOL_A_PAUSE_RX = 0x3 + ETHTOOL_A_PAUSE_TX = 0x4 + ETHTOOL_A_PAUSE_STATS = 0x5 + ETHTOOL_A_PAUSE_MAX = 0x5 + ETHTOOL_A_PAUSE_STAT_UNSPEC = 0x0 + ETHTOOL_A_PAUSE_STAT_PAD = 0x1 + ETHTOOL_A_PAUSE_STAT_TX_FRAMES = 0x2 + ETHTOOL_A_PAUSE_STAT_RX_FRAMES = 0x3 + ETHTOOL_A_PAUSE_STAT_MAX = 0x3 + ETHTOOL_A_EEE_UNSPEC = 0x0 + ETHTOOL_A_EEE_HEADER = 0x1 + ETHTOOL_A_EEE_MODES_OURS = 0x2 + ETHTOOL_A_EEE_MODES_PEER = 0x3 + ETHTOOL_A_EEE_ACTIVE = 0x4 + ETHTOOL_A_EEE_ENABLED = 0x5 + ETHTOOL_A_EEE_TX_LPI_ENABLED = 0x6 + ETHTOOL_A_EEE_TX_LPI_TIMER = 0x7 + ETHTOOL_A_EEE_MAX = 0x7 + ETHTOOL_A_TSINFO_UNSPEC = 0x0 + ETHTOOL_A_TSINFO_HEADER = 0x1 + ETHTOOL_A_TSINFO_TIMESTAMPING = 0x2 + ETHTOOL_A_TSINFO_TX_TYPES = 0x3 + ETHTOOL_A_TSINFO_RX_FILTERS = 0x4 + ETHTOOL_A_TSINFO_PHC_INDEX = 0x5 + ETHTOOL_A_TSINFO_MAX = 0x5 + ETHTOOL_A_CABLE_TEST_UNSPEC = 0x0 + ETHTOOL_A_CABLE_TEST_HEADER = 0x1 + ETHTOOL_A_CABLE_TEST_MAX = 0x1 + ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC = 0x0 + ETHTOOL_A_CABLE_RESULT_CODE_OK = 0x1 + ETHTOOL_A_CABLE_RESULT_CODE_OPEN = 0x2 + ETHTOOL_A_CABLE_RESULT_CODE_SAME_SHORT = 0x3 + ETHTOOL_A_CABLE_RESULT_CODE_CROSS_SHORT = 0x4 + ETHTOOL_A_CABLE_PAIR_A = 0x0 + ETHTOOL_A_CABLE_PAIR_B = 0x1 + ETHTOOL_A_CABLE_PAIR_C = 0x2 + ETHTOOL_A_CABLE_PAIR_D = 0x3 + ETHTOOL_A_CABLE_RESULT_UNSPEC = 0x0 + ETHTOOL_A_CABLE_RESULT_PAIR = 0x1 + ETHTOOL_A_CABLE_RESULT_CODE = 0x2 + ETHTOOL_A_CABLE_RESULT_MAX = 0x2 + ETHTOOL_A_CABLE_FAULT_LENGTH_UNSPEC = 0x0 + ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR = 0x1 + ETHTOOL_A_CABLE_FAULT_LENGTH_CM = 0x2 + ETHTOOL_A_CABLE_FAULT_LENGTH_MAX = 0x2 + ETHTOOL_A_CABLE_TEST_NTF_STATUS_UNSPEC = 0x0 + ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED = 0x1 + ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED = 0x2 + ETHTOOL_A_CABLE_NEST_UNSPEC = 0x0 + ETHTOOL_A_CABLE_NEST_RESULT = 0x1 + ETHTOOL_A_CABLE_NEST_FAULT_LENGTH = 0x2 + ETHTOOL_A_CABLE_NEST_MAX = 0x2 + ETHTOOL_A_CABLE_TEST_NTF_UNSPEC = 0x0 + ETHTOOL_A_CABLE_TEST_NTF_HEADER = 0x1 + ETHTOOL_A_CABLE_TEST_NTF_STATUS = 0x2 + ETHTOOL_A_CABLE_TEST_NTF_NEST = 0x3 + ETHTOOL_A_CABLE_TEST_NTF_MAX = 0x3 + ETHTOOL_A_CABLE_TEST_TDR_CFG_UNSPEC = 0x0 + ETHTOOL_A_CABLE_TEST_TDR_CFG_FIRST = 0x1 + ETHTOOL_A_CABLE_TEST_TDR_CFG_LAST = 0x2 + ETHTOOL_A_CABLE_TEST_TDR_CFG_STEP = 0x3 + ETHTOOL_A_CABLE_TEST_TDR_CFG_PAIR = 0x4 + ETHTOOL_A_CABLE_TEST_TDR_CFG_MAX = 0x4 + ETHTOOL_A_CABLE_TEST_TDR_UNSPEC = 0x0 + ETHTOOL_A_CABLE_TEST_TDR_HEADER = 0x1 + ETHTOOL_A_CABLE_TEST_TDR_CFG = 0x2 + ETHTOOL_A_CABLE_TEST_TDR_MAX = 0x2 + ETHTOOL_A_CABLE_AMPLITUDE_UNSPEC = 0x0 + ETHTOOL_A_CABLE_AMPLITUDE_PAIR = 0x1 + ETHTOOL_A_CABLE_AMPLITUDE_mV = 0x2 + ETHTOOL_A_CABLE_AMPLITUDE_MAX = 0x2 + ETHTOOL_A_CABLE_PULSE_UNSPEC = 0x0 + ETHTOOL_A_CABLE_PULSE_mV = 0x1 + ETHTOOL_A_CABLE_PULSE_MAX = 0x1 + ETHTOOL_A_CABLE_STEP_UNSPEC = 0x0 + ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE = 0x1 + ETHTOOL_A_CABLE_STEP_LAST_DISTANCE = 0x2 + ETHTOOL_A_CABLE_STEP_STEP_DISTANCE = 0x3 + ETHTOOL_A_CABLE_STEP_MAX = 0x3 + ETHTOOL_A_CABLE_TDR_NEST_UNSPEC = 0x0 + ETHTOOL_A_CABLE_TDR_NEST_STEP = 0x1 + ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE = 0x2 + ETHTOOL_A_CABLE_TDR_NEST_PULSE = 0x3 + ETHTOOL_A_CABLE_TDR_NEST_MAX = 0x3 + ETHTOOL_A_CABLE_TEST_TDR_NTF_UNSPEC = 0x0 + ETHTOOL_A_CABLE_TEST_TDR_NTF_HEADER = 0x1 + ETHTOOL_A_CABLE_TEST_TDR_NTF_STATUS = 0x2 + ETHTOOL_A_CABLE_TEST_TDR_NTF_NEST = 0x3 + ETHTOOL_A_CABLE_TEST_TDR_NTF_MAX = 0x3 + ETHTOOL_UDP_TUNNEL_TYPE_VXLAN = 0x0 + ETHTOOL_UDP_TUNNEL_TYPE_GENEVE = 0x1 + ETHTOOL_UDP_TUNNEL_TYPE_VXLAN_GPE = 0x2 + ETHTOOL_A_TUNNEL_UDP_ENTRY_UNSPEC = 0x0 + ETHTOOL_A_TUNNEL_UDP_ENTRY_PORT = 0x1 + ETHTOOL_A_TUNNEL_UDP_ENTRY_TYPE = 0x2 + ETHTOOL_A_TUNNEL_UDP_ENTRY_MAX = 0x2 + ETHTOOL_A_TUNNEL_UDP_TABLE_UNSPEC = 0x0 + ETHTOOL_A_TUNNEL_UDP_TABLE_SIZE = 0x1 + ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES = 0x2 + ETHTOOL_A_TUNNEL_UDP_TABLE_ENTRY = 0x3 + ETHTOOL_A_TUNNEL_UDP_TABLE_MAX = 0x3 + ETHTOOL_A_TUNNEL_UDP_UNSPEC = 0x0 + ETHTOOL_A_TUNNEL_UDP_TABLE = 0x1 + ETHTOOL_A_TUNNEL_UDP_MAX = 0x1 + ETHTOOL_A_TUNNEL_INFO_UNSPEC = 0x0 + ETHTOOL_A_TUNNEL_INFO_HEADER = 0x1 + ETHTOOL_A_TUNNEL_INFO_UDP_PORTS = 0x2 + ETHTOOL_A_TUNNEL_INFO_MAX = 0x2 +) + +const SPEED_UNKNOWN = -0x1 + +type EthtoolDrvinfo struct { + Cmd uint32 + Driver [32]byte + Version [32]byte + Fw_version [32]byte + Bus_info [32]byte + Erom_version [32]byte + Reserved2 [12]byte + N_priv_flags uint32 + N_stats uint32 + Testinfo_len uint32 + Eedump_len uint32 + Regdump_len uint32 +} + +type ( + HIDRawReportDescriptor struct { + Size uint32 + Value [4096]uint8 + } + HIDRawDevInfo struct { + Bustype uint32 + Vendor int16 + Product int16 + } +) + +const ( + CLOSE_RANGE_UNSHARE = 0x2 + CLOSE_RANGE_CLOEXEC = 0x4 +) + +const ( + NLMSGERR_ATTR_MSG = 0x1 + NLMSGERR_ATTR_OFFS = 0x2 + NLMSGERR_ATTR_COOKIE = 0x3 +) + +type ( + EraseInfo struct { + Start uint32 + Length uint32 + } + EraseInfo64 struct { + Start uint64 + Length uint64 + } + MtdOobBuf struct { + Start uint32 + Length uint32 + Ptr *uint8 + } + MtdOobBuf64 struct { + Start uint64 + Pad uint32 + Length uint32 + Ptr uint64 + } + MtdWriteReq struct { + Start uint64 + Len uint64 + Ooblen uint64 + Data uint64 + Oob uint64 + Mode uint8 + _ [7]uint8 + } + MtdInfo struct { + Type uint8 + Flags uint32 + Size uint32 + Erasesize uint32 + Writesize uint32 + Oobsize uint32 + _ uint64 + } + RegionInfo struct { + Offset uint32 + Erasesize uint32 + Numblocks uint32 + Regionindex uint32 + } + OtpInfo struct { + Start uint32 + Length uint32 + Locked uint32 + } + NandOobinfo struct { + Useecc uint32 + Eccbytes uint32 + Oobfree [8][2]uint32 + Eccpos [32]uint32 + } + NandOobfree struct { + Offset uint32 + Length uint32 + } + NandEcclayout struct { + Eccbytes uint32 + Eccpos [64]uint32 + Oobavail uint32 + Oobfree [8]NandOobfree + } + MtdEccStats struct { + Corrected uint32 + Failed uint32 + Badblocks uint32 + Bbtblocks uint32 + } +) + +const ( + MTD_OPS_PLACE_OOB = 0x0 + MTD_OPS_AUTO_OOB = 0x1 + MTD_OPS_RAW = 0x2 +) + +const ( + MTD_FILE_MODE_NORMAL = 0x0 + MTD_FILE_MODE_OTP_FACTORY = 0x1 + MTD_FILE_MODE_OTP_USER = 0x2 + MTD_FILE_MODE_RAW = 0x3 +) + +const ( + NFC_CMD_UNSPEC = 0x0 + NFC_CMD_GET_DEVICE = 0x1 + NFC_CMD_DEV_UP = 0x2 + NFC_CMD_DEV_DOWN = 0x3 + NFC_CMD_DEP_LINK_UP = 0x4 + NFC_CMD_DEP_LINK_DOWN = 0x5 + NFC_CMD_START_POLL = 0x6 + NFC_CMD_STOP_POLL = 0x7 + NFC_CMD_GET_TARGET = 0x8 + NFC_EVENT_TARGETS_FOUND = 0x9 + NFC_EVENT_DEVICE_ADDED = 0xa + NFC_EVENT_DEVICE_REMOVED = 0xb + NFC_EVENT_TARGET_LOST = 0xc + NFC_EVENT_TM_ACTIVATED = 0xd + NFC_EVENT_TM_DEACTIVATED = 0xe + NFC_CMD_LLC_GET_PARAMS = 0xf + NFC_CMD_LLC_SET_PARAMS = 0x10 + NFC_CMD_ENABLE_SE = 0x11 + NFC_CMD_DISABLE_SE = 0x12 + NFC_CMD_LLC_SDREQ = 0x13 + NFC_EVENT_LLC_SDRES = 0x14 + NFC_CMD_FW_DOWNLOAD = 0x15 + NFC_EVENT_SE_ADDED = 0x16 + NFC_EVENT_SE_REMOVED = 0x17 + NFC_EVENT_SE_CONNECTIVITY = 0x18 + NFC_EVENT_SE_TRANSACTION = 0x19 + NFC_CMD_GET_SE = 0x1a + NFC_CMD_SE_IO = 0x1b + NFC_CMD_ACTIVATE_TARGET = 0x1c + NFC_CMD_VENDOR = 0x1d + NFC_CMD_DEACTIVATE_TARGET = 0x1e + NFC_ATTR_UNSPEC = 0x0 + NFC_ATTR_DEVICE_INDEX = 0x1 + NFC_ATTR_DEVICE_NAME = 0x2 + NFC_ATTR_PROTOCOLS = 0x3 + NFC_ATTR_TARGET_INDEX = 0x4 + NFC_ATTR_TARGET_SENS_RES = 0x5 + NFC_ATTR_TARGET_SEL_RES = 0x6 + NFC_ATTR_TARGET_NFCID1 = 0x7 + NFC_ATTR_TARGET_SENSB_RES = 0x8 + NFC_ATTR_TARGET_SENSF_RES = 0x9 + NFC_ATTR_COMM_MODE = 0xa + NFC_ATTR_RF_MODE = 0xb + NFC_ATTR_DEVICE_POWERED = 0xc + NFC_ATTR_IM_PROTOCOLS = 0xd + NFC_ATTR_TM_PROTOCOLS = 0xe + NFC_ATTR_LLC_PARAM_LTO = 0xf + NFC_ATTR_LLC_PARAM_RW = 0x10 + NFC_ATTR_LLC_PARAM_MIUX = 0x11 + NFC_ATTR_SE = 0x12 + NFC_ATTR_LLC_SDP = 0x13 + NFC_ATTR_FIRMWARE_NAME = 0x14 + NFC_ATTR_SE_INDEX = 0x15 + NFC_ATTR_SE_TYPE = 0x16 + NFC_ATTR_SE_AID = 0x17 + NFC_ATTR_FIRMWARE_DOWNLOAD_STATUS = 0x18 + NFC_ATTR_SE_APDU = 0x19 + NFC_ATTR_TARGET_ISO15693_DSFID = 0x1a + NFC_ATTR_TARGET_ISO15693_UID = 0x1b + NFC_ATTR_SE_PARAMS = 0x1c + NFC_ATTR_VENDOR_ID = 0x1d + NFC_ATTR_VENDOR_SUBCMD = 0x1e + NFC_ATTR_VENDOR_DATA = 0x1f + NFC_SDP_ATTR_UNSPEC = 0x0 + NFC_SDP_ATTR_URI = 0x1 + NFC_SDP_ATTR_SAP = 0x2 +) + +type LandlockRulesetAttr struct { + Access_fs uint64 +} + +type LandlockPathBeneathAttr struct { + Allowed_access uint64 + Parent_fd int32 +} + +const ( + LANDLOCK_RULE_PATH_BENEATH = 0x1 +) + +const ( + IPC_CREAT = 0x200 + IPC_EXCL = 0x400 + IPC_NOWAIT = 0x800 + IPC_PRIVATE = 0x0 + + ipc_64 = 0x100 +) + +const ( + IPC_RMID = 0x0 + IPC_SET = 0x1 + IPC_STAT = 0x2 +) + +const ( + SHM_RDONLY = 0x1000 + SHM_RND = 0x2000 +) + +type MountAttr struct { + Attr_set uint64 + Attr_clr uint64 + Propagation uint64 + Userns_fd uint64 +} + +const ( + WG_CMD_GET_DEVICE = 0x0 + WG_CMD_SET_DEVICE = 0x1 + WGDEVICE_F_REPLACE_PEERS = 0x1 + WGDEVICE_A_UNSPEC = 0x0 + WGDEVICE_A_IFINDEX = 0x1 + WGDEVICE_A_IFNAME = 0x2 + WGDEVICE_A_PRIVATE_KEY = 0x3 + WGDEVICE_A_PUBLIC_KEY = 0x4 + WGDEVICE_A_FLAGS = 0x5 + WGDEVICE_A_LISTEN_PORT = 0x6 + WGDEVICE_A_FWMARK = 0x7 + WGDEVICE_A_PEERS = 0x8 + WGPEER_F_REMOVE_ME = 0x1 + WGPEER_F_REPLACE_ALLOWEDIPS = 0x2 + WGPEER_F_UPDATE_ONLY = 0x4 + WGPEER_A_UNSPEC = 0x0 + WGPEER_A_PUBLIC_KEY = 0x1 + WGPEER_A_PRESHARED_KEY = 0x2 + WGPEER_A_FLAGS = 0x3 + WGPEER_A_ENDPOINT = 0x4 + WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL = 0x5 + WGPEER_A_LAST_HANDSHAKE_TIME = 0x6 + WGPEER_A_RX_BYTES = 0x7 + WGPEER_A_TX_BYTES = 0x8 + WGPEER_A_ALLOWEDIPS = 0x9 + WGPEER_A_PROTOCOL_VERSION = 0xa + WGALLOWEDIP_A_UNSPEC = 0x0 + WGALLOWEDIP_A_FAMILY = 0x1 + WGALLOWEDIP_A_IPADDR = 0x2 + WGALLOWEDIP_A_CIDR_MASK = 0x3 +) + +const ( + NL_ATTR_TYPE_INVALID = 0x0 + NL_ATTR_TYPE_FLAG = 0x1 + NL_ATTR_TYPE_U8 = 0x2 + NL_ATTR_TYPE_U16 = 0x3 + NL_ATTR_TYPE_U32 = 0x4 + NL_ATTR_TYPE_U64 = 0x5 + NL_ATTR_TYPE_S8 = 0x6 + NL_ATTR_TYPE_S16 = 0x7 + NL_ATTR_TYPE_S32 = 0x8 + NL_ATTR_TYPE_S64 = 0x9 + NL_ATTR_TYPE_BINARY = 0xa + NL_ATTR_TYPE_STRING = 0xb + NL_ATTR_TYPE_NUL_STRING = 0xc + NL_ATTR_TYPE_NESTED = 0xd + NL_ATTR_TYPE_NESTED_ARRAY = 0xe + NL_ATTR_TYPE_BITFIELD32 = 0xf + + NL_POLICY_TYPE_ATTR_UNSPEC = 0x0 + NL_POLICY_TYPE_ATTR_TYPE = 0x1 + NL_POLICY_TYPE_ATTR_MIN_VALUE_S = 0x2 + NL_POLICY_TYPE_ATTR_MAX_VALUE_S = 0x3 + NL_POLICY_TYPE_ATTR_MIN_VALUE_U = 0x4 + NL_POLICY_TYPE_ATTR_MAX_VALUE_U = 0x5 + NL_POLICY_TYPE_ATTR_MIN_LENGTH = 0x6 + NL_POLICY_TYPE_ATTR_MAX_LENGTH = 0x7 + NL_POLICY_TYPE_ATTR_POLICY_IDX = 0x8 + NL_POLICY_TYPE_ATTR_POLICY_MAXTYPE = 0x9 + NL_POLICY_TYPE_ATTR_BITFIELD32_MASK = 0xa + NL_POLICY_TYPE_ATTR_PAD = 0xb + NL_POLICY_TYPE_ATTR_MASK = 0xc + NL_POLICY_TYPE_ATTR_MAX = 0xc +) + +type CANBitTiming struct { + Bitrate uint32 + Sample_point uint32 + Tq uint32 + Prop_seg uint32 + Phase_seg1 uint32 + Phase_seg2 uint32 + Sjw uint32 + Brp uint32 +} + +type CANBitTimingConst struct { + Name [16]uint8 + Tseg1_min uint32 + Tseg1_max uint32 + Tseg2_min uint32 + Tseg2_max uint32 + Sjw_max uint32 + Brp_min uint32 + Brp_max uint32 + Brp_inc uint32 +} + +type CANClock struct { + Freq uint32 +} + +type CANBusErrorCounters struct { + Txerr uint16 + Rxerr uint16 +} + +type CANCtrlMode struct { + Mask uint32 + Flags uint32 +} + +type CANDeviceStats struct { + Bus_error uint32 + Error_warning uint32 + Error_passive uint32 + Bus_off uint32 + Arbitration_lost uint32 + Restarts uint32 +} + +const ( + CAN_STATE_ERROR_ACTIVE = 0x0 + CAN_STATE_ERROR_WARNING = 0x1 + CAN_STATE_ERROR_PASSIVE = 0x2 + CAN_STATE_BUS_OFF = 0x3 + CAN_STATE_STOPPED = 0x4 + CAN_STATE_SLEEPING = 0x5 + CAN_STATE_MAX = 0x6 +) + +const ( + IFLA_CAN_UNSPEC = 0x0 + IFLA_CAN_BITTIMING = 0x1 + IFLA_CAN_BITTIMING_CONST = 0x2 + IFLA_CAN_CLOCK = 0x3 + IFLA_CAN_STATE = 0x4 + IFLA_CAN_CTRLMODE = 0x5 + IFLA_CAN_RESTART_MS = 0x6 + IFLA_CAN_RESTART = 0x7 + IFLA_CAN_BERR_COUNTER = 0x8 + IFLA_CAN_DATA_BITTIMING = 0x9 + IFLA_CAN_DATA_BITTIMING_CONST = 0xa + IFLA_CAN_TERMINATION = 0xb + IFLA_CAN_TERMINATION_CONST = 0xc + IFLA_CAN_BITRATE_CONST = 0xd + IFLA_CAN_DATA_BITRATE_CONST = 0xe + IFLA_CAN_BITRATE_MAX = 0xf +) + +type KCMAttach struct { + Fd int32 + Bpf_fd int32 +} + +type KCMUnattach struct { + Fd int32 +} + +type KCMClone struct { + Fd int32 +} + +const ( + NL80211_AC_BE = 0x2 + NL80211_AC_BK = 0x3 + NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED = 0x0 + NL80211_ACL_POLICY_DENY_UNLESS_LISTED = 0x1 + NL80211_AC_VI = 0x1 + NL80211_AC_VO = 0x0 + NL80211_ATTR_4ADDR = 0x53 + NL80211_ATTR_ACK = 0x5c + NL80211_ATTR_ACK_SIGNAL = 0x107 + NL80211_ATTR_ACL_POLICY = 0xa5 + NL80211_ATTR_ADMITTED_TIME = 0xd4 + NL80211_ATTR_AIRTIME_WEIGHT = 0x112 + NL80211_ATTR_AKM_SUITES = 0x4c + NL80211_ATTR_AP_ISOLATE = 0x60 + NL80211_ATTR_AUTH_DATA = 0x9c + NL80211_ATTR_AUTH_TYPE = 0x35 + NL80211_ATTR_BANDS = 0xef + NL80211_ATTR_BEACON_HEAD = 0xe + NL80211_ATTR_BEACON_INTERVAL = 0xc + NL80211_ATTR_BEACON_TAIL = 0xf + NL80211_ATTR_BG_SCAN_PERIOD = 0x98 + NL80211_ATTR_BSS_BASIC_RATES = 0x24 + NL80211_ATTR_BSS = 0x2f + NL80211_ATTR_BSS_CTS_PROT = 0x1c + NL80211_ATTR_BSS_HT_OPMODE = 0x6d + NL80211_ATTR_BSSID = 0xf5 + NL80211_ATTR_BSS_SELECT = 0xe3 + NL80211_ATTR_BSS_SHORT_PREAMBLE = 0x1d + NL80211_ATTR_BSS_SHORT_SLOT_TIME = 0x1e + NL80211_ATTR_CENTER_FREQ1 = 0xa0 + NL80211_ATTR_CENTER_FREQ1_OFFSET = 0x123 + NL80211_ATTR_CENTER_FREQ2 = 0xa1 + NL80211_ATTR_CHANNEL_WIDTH = 0x9f + NL80211_ATTR_CH_SWITCH_BLOCK_TX = 0xb8 + NL80211_ATTR_CH_SWITCH_COUNT = 0xb7 + NL80211_ATTR_CIPHER_SUITE_GROUP = 0x4a + NL80211_ATTR_CIPHER_SUITES = 0x39 + NL80211_ATTR_CIPHER_SUITES_PAIRWISE = 0x49 + NL80211_ATTR_CNTDWN_OFFS_BEACON = 0xba + NL80211_ATTR_CNTDWN_OFFS_PRESP = 0xbb + NL80211_ATTR_COALESCE_RULE = 0xb6 + NL80211_ATTR_COALESCE_RULE_CONDITION = 0x2 + NL80211_ATTR_COALESCE_RULE_DELAY = 0x1 + NL80211_ATTR_COALESCE_RULE_MAX = 0x3 + NL80211_ATTR_COALESCE_RULE_PKT_PATTERN = 0x3 + NL80211_ATTR_CONN_FAILED_REASON = 0x9b + NL80211_ATTR_CONTROL_PORT = 0x44 + NL80211_ATTR_CONTROL_PORT_ETHERTYPE = 0x66 + NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT = 0x67 + NL80211_ATTR_CONTROL_PORT_NO_PREAUTH = 0x11e + NL80211_ATTR_CONTROL_PORT_OVER_NL80211 = 0x108 + NL80211_ATTR_COOKIE = 0x58 + NL80211_ATTR_CQM_BEACON_LOSS_EVENT = 0x8 + NL80211_ATTR_CQM = 0x5e + NL80211_ATTR_CQM_MAX = 0x9 + NL80211_ATTR_CQM_PKT_LOSS_EVENT = 0x4 + NL80211_ATTR_CQM_RSSI_HYST = 0x2 + NL80211_ATTR_CQM_RSSI_LEVEL = 0x9 + NL80211_ATTR_CQM_RSSI_THOLD = 0x1 + NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT = 0x3 + NL80211_ATTR_CQM_TXE_INTVL = 0x7 + NL80211_ATTR_CQM_TXE_PKTS = 0x6 + NL80211_ATTR_CQM_TXE_RATE = 0x5 + NL80211_ATTR_CRIT_PROT_ID = 0xb3 + NL80211_ATTR_CSA_C_OFF_BEACON = 0xba + NL80211_ATTR_CSA_C_OFF_PRESP = 0xbb + NL80211_ATTR_CSA_C_OFFSETS_TX = 0xcd + NL80211_ATTR_CSA_IES = 0xb9 + NL80211_ATTR_DEVICE_AP_SME = 0x8d + NL80211_ATTR_DFS_CAC_TIME = 0x7 + NL80211_ATTR_DFS_REGION = 0x92 + NL80211_ATTR_DISABLE_HE = 0x12d + NL80211_ATTR_DISABLE_HT = 0x93 + NL80211_ATTR_DISABLE_VHT = 0xaf + NL80211_ATTR_DISCONNECTED_BY_AP = 0x47 + NL80211_ATTR_DONT_WAIT_FOR_ACK = 0x8e + NL80211_ATTR_DTIM_PERIOD = 0xd + NL80211_ATTR_DURATION = 0x57 + NL80211_ATTR_EXT_CAPA = 0xa9 + NL80211_ATTR_EXT_CAPA_MASK = 0xaa + NL80211_ATTR_EXTERNAL_AUTH_ACTION = 0x104 + NL80211_ATTR_EXTERNAL_AUTH_SUPPORT = 0x105 + NL80211_ATTR_EXT_FEATURES = 0xd9 + NL80211_ATTR_FEATURE_FLAGS = 0x8f + NL80211_ATTR_FILS_CACHE_ID = 0xfd + NL80211_ATTR_FILS_DISCOVERY = 0x126 + NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM = 0xfb + NL80211_ATTR_FILS_ERP_REALM = 0xfa + NL80211_ATTR_FILS_ERP_RRK = 0xfc + NL80211_ATTR_FILS_ERP_USERNAME = 0xf9 + NL80211_ATTR_FILS_KEK = 0xf2 + NL80211_ATTR_FILS_NONCES = 0xf3 + NL80211_ATTR_FRAME = 0x33 + NL80211_ATTR_FRAME_MATCH = 0x5b + NL80211_ATTR_FRAME_TYPE = 0x65 + NL80211_ATTR_FREQ_AFTER = 0x3b + NL80211_ATTR_FREQ_BEFORE = 0x3a + NL80211_ATTR_FREQ_FIXED = 0x3c + NL80211_ATTR_FREQ_RANGE_END = 0x3 + NL80211_ATTR_FREQ_RANGE_MAX_BW = 0x4 + NL80211_ATTR_FREQ_RANGE_START = 0x2 + NL80211_ATTR_FTM_RESPONDER = 0x10e + NL80211_ATTR_FTM_RESPONDER_STATS = 0x10f + NL80211_ATTR_GENERATION = 0x2e + NL80211_ATTR_HANDLE_DFS = 0xbf + NL80211_ATTR_HE_6GHZ_CAPABILITY = 0x125 + NL80211_ATTR_HE_BSS_COLOR = 0x11b + NL80211_ATTR_HE_CAPABILITY = 0x10d + NL80211_ATTR_HE_OBSS_PD = 0x117 + NL80211_ATTR_HIDDEN_SSID = 0x7e + NL80211_ATTR_HT_CAPABILITY = 0x1f + NL80211_ATTR_HT_CAPABILITY_MASK = 0x94 + NL80211_ATTR_IE_ASSOC_RESP = 0x80 + NL80211_ATTR_IE = 0x2a + NL80211_ATTR_IE_PROBE_RESP = 0x7f + NL80211_ATTR_IE_RIC = 0xb2 + NL80211_ATTR_IFACE_SOCKET_OWNER = 0xcc + NL80211_ATTR_IFINDEX = 0x3 + NL80211_ATTR_IFNAME = 0x4 + NL80211_ATTR_IFTYPE_AKM_SUITES = 0x11c + NL80211_ATTR_IFTYPE = 0x5 + NL80211_ATTR_IFTYPE_EXT_CAPA = 0xe6 + NL80211_ATTR_INACTIVITY_TIMEOUT = 0x96 + NL80211_ATTR_INTERFACE_COMBINATIONS = 0x78 + NL80211_ATTR_KEY_CIPHER = 0x9 + NL80211_ATTR_KEY = 0x50 + NL80211_ATTR_KEY_DATA = 0x7 + NL80211_ATTR_KEY_DEFAULT = 0xb + NL80211_ATTR_KEY_DEFAULT_MGMT = 0x28 + NL80211_ATTR_KEY_DEFAULT_TYPES = 0x6e + NL80211_ATTR_KEY_IDX = 0x8 + NL80211_ATTR_KEYS = 0x51 + NL80211_ATTR_KEY_SEQ = 0xa + NL80211_ATTR_KEY_TYPE = 0x37 + NL80211_ATTR_LOCAL_MESH_POWER_MODE = 0xa4 + NL80211_ATTR_LOCAL_STATE_CHANGE = 0x5f + NL80211_ATTR_MAC_ACL_MAX = 0xa7 + NL80211_ATTR_MAC_ADDRS = 0xa6 + NL80211_ATTR_MAC = 0x6 + NL80211_ATTR_MAC_HINT = 0xc8 + NL80211_ATTR_MAC_MASK = 0xd7 + NL80211_ATTR_MAX_AP_ASSOC_STA = 0xca + NL80211_ATTR_MAX = 0x135 + NL80211_ATTR_MAX_CRIT_PROT_DURATION = 0xb4 + NL80211_ATTR_MAX_CSA_COUNTERS = 0xce + NL80211_ATTR_MAX_MATCH_SETS = 0x85 + NL80211_ATTR_MAX_NUM_PMKIDS = 0x56 + NL80211_ATTR_MAX_NUM_SCAN_SSIDS = 0x2b + NL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS = 0xde + NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS = 0x7b + NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION = 0x6f + NL80211_ATTR_MAX_SCAN_IE_LEN = 0x38 + NL80211_ATTR_MAX_SCAN_PLAN_INTERVAL = 0xdf + NL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS = 0xe0 + NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN = 0x7c + NL80211_ATTR_MCAST_RATE = 0x6b + NL80211_ATTR_MDID = 0xb1 + NL80211_ATTR_MEASUREMENT_DURATION = 0xeb + NL80211_ATTR_MEASUREMENT_DURATION_MANDATORY = 0xec + NL80211_ATTR_MESH_CONFIG = 0x23 + NL80211_ATTR_MESH_ID = 0x18 + NL80211_ATTR_MESH_PEER_AID = 0xed + NL80211_ATTR_MESH_SETUP = 0x70 + NL80211_ATTR_MGMT_SUBTYPE = 0x29 + NL80211_ATTR_MNTR_FLAGS = 0x17 + NL80211_ATTR_MPATH_INFO = 0x1b + NL80211_ATTR_MPATH_NEXT_HOP = 0x1a + NL80211_ATTR_MULTICAST_TO_UNICAST_ENABLED = 0xf4 + NL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR = 0xe8 + NL80211_ATTR_MU_MIMO_GROUP_DATA = 0xe7 + NL80211_ATTR_NAN_FUNC = 0xf0 + NL80211_ATTR_NAN_MASTER_PREF = 0xee + NL80211_ATTR_NAN_MATCH = 0xf1 + NL80211_ATTR_NETNS_FD = 0xdb + NL80211_ATTR_NOACK_MAP = 0x95 + NL80211_ATTR_NSS = 0x106 + NL80211_ATTR_OFFCHANNEL_TX_OK = 0x6c + NL80211_ATTR_OPER_CLASS = 0xd6 + NL80211_ATTR_OPMODE_NOTIF = 0xc2 + NL80211_ATTR_P2P_CTWINDOW = 0xa2 + NL80211_ATTR_P2P_OPPPS = 0xa3 + NL80211_ATTR_PAD = 0xe5 + NL80211_ATTR_PBSS = 0xe2 + NL80211_ATTR_PEER_AID = 0xb5 + NL80211_ATTR_PEER_MEASUREMENTS = 0x111 + NL80211_ATTR_PID = 0x52 + NL80211_ATTR_PMK = 0xfe + NL80211_ATTR_PMKID = 0x55 + NL80211_ATTR_PMK_LIFETIME = 0x11f + NL80211_ATTR_PMKR0_NAME = 0x102 + NL80211_ATTR_PMK_REAUTH_THRESHOLD = 0x120 + NL80211_ATTR_PMKSA_CANDIDATE = 0x86 + NL80211_ATTR_PORT_AUTHORIZED = 0x103 + NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN = 0x5 + NL80211_ATTR_POWER_RULE_MAX_EIRP = 0x6 + 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_QOS_MAP = 0xc7 + NL80211_ATTR_RADAR_EVENT = 0xa8 + NL80211_ATTR_REASON_CODE = 0x36 + NL80211_ATTR_RECEIVE_MULTICAST = 0x121 + NL80211_ATTR_RECONNECT_REQUESTED = 0x12b + NL80211_ATTR_REG_ALPHA2 = 0x21 + NL80211_ATTR_REG_INDOOR = 0xdd + NL80211_ATTR_REG_INITIATOR = 0x30 + NL80211_ATTR_REG_RULE_FLAGS = 0x1 + NL80211_ATTR_REG_RULES = 0x22 + NL80211_ATTR_REG_TYPE = 0x31 + NL80211_ATTR_REKEY_DATA = 0x7a + NL80211_ATTR_REQ_IE = 0x4d + NL80211_ATTR_RESP_IE = 0x4e + NL80211_ATTR_ROAM_SUPPORT = 0x83 + NL80211_ATTR_RX_FRAME_TYPES = 0x64 + NL80211_ATTR_RXMGMT_FLAGS = 0xbc + NL80211_ATTR_RX_SIGNAL_DBM = 0x97 + NL80211_ATTR_S1G_CAPABILITY = 0x128 + NL80211_ATTR_S1G_CAPABILITY_MASK = 0x129 + NL80211_ATTR_SAE_DATA = 0x9c + NL80211_ATTR_SAE_PASSWORD = 0x115 + NL80211_ATTR_SAE_PWE = 0x12a + NL80211_ATTR_SAR_SPEC = 0x12c + NL80211_ATTR_SCAN_FLAGS = 0x9e + NL80211_ATTR_SCAN_FREQ_KHZ = 0x124 + NL80211_ATTR_SCAN_FREQUENCIES = 0x2c + NL80211_ATTR_SCAN_GENERATION = 0x2e + NL80211_ATTR_SCAN_SSIDS = 0x2d + NL80211_ATTR_SCAN_START_TIME_TSF_BSSID = 0xea + NL80211_ATTR_SCAN_START_TIME_TSF = 0xe9 + NL80211_ATTR_SCAN_SUPP_RATES = 0x7d + NL80211_ATTR_SCHED_SCAN_DELAY = 0xdc + NL80211_ATTR_SCHED_SCAN_INTERVAL = 0x77 + NL80211_ATTR_SCHED_SCAN_MATCH = 0x84 + NL80211_ATTR_SCHED_SCAN_MATCH_SSID = 0x1 + NL80211_ATTR_SCHED_SCAN_MAX_REQS = 0x100 + NL80211_ATTR_SCHED_SCAN_MULTI = 0xff + NL80211_ATTR_SCHED_SCAN_PLANS = 0xe1 + NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI = 0xf6 + NL80211_ATTR_SCHED_SCAN_RSSI_ADJUST = 0xf7 + NL80211_ATTR_SMPS_MODE = 0xd5 + NL80211_ATTR_SOCKET_OWNER = 0xcc + NL80211_ATTR_SOFTWARE_IFTYPES = 0x79 + NL80211_ATTR_SPLIT_WIPHY_DUMP = 0xae + NL80211_ATTR_SSID = 0x34 + NL80211_ATTR_STA_AID = 0x10 + NL80211_ATTR_STA_CAPABILITY = 0xab + NL80211_ATTR_STA_EXT_CAPABILITY = 0xac + NL80211_ATTR_STA_FLAGS2 = 0x43 + NL80211_ATTR_STA_FLAGS = 0x11 + NL80211_ATTR_STA_INFO = 0x15 + NL80211_ATTR_STA_LISTEN_INTERVAL = 0x12 + NL80211_ATTR_STA_PLINK_ACTION = 0x19 + NL80211_ATTR_STA_PLINK_STATE = 0x74 + NL80211_ATTR_STA_SUPPORTED_CHANNELS = 0xbd + NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES = 0xbe + NL80211_ATTR_STA_SUPPORTED_RATES = 0x13 + NL80211_ATTR_STA_SUPPORT_P2P_PS = 0xe4 + NL80211_ATTR_STATUS_CODE = 0x48 + NL80211_ATTR_STA_TX_POWER = 0x114 + NL80211_ATTR_STA_TX_POWER_SETTING = 0x113 + NL80211_ATTR_STA_VLAN = 0x14 + NL80211_ATTR_STA_WME = 0x81 + NL80211_ATTR_SUPPORT_10_MHZ = 0xc1 + NL80211_ATTR_SUPPORT_5_MHZ = 0xc0 + NL80211_ATTR_SUPPORT_AP_UAPSD = 0x82 + NL80211_ATTR_SUPPORTED_COMMANDS = 0x32 + NL80211_ATTR_SUPPORTED_IFTYPES = 0x20 + NL80211_ATTR_SUPPORT_IBSS_RSN = 0x68 + NL80211_ATTR_SUPPORT_MESH_AUTH = 0x73 + NL80211_ATTR_SURVEY_INFO = 0x54 + NL80211_ATTR_SURVEY_RADIO_STATS = 0xda + NL80211_ATTR_TDLS_ACTION = 0x88 + NL80211_ATTR_TDLS_DIALOG_TOKEN = 0x89 + NL80211_ATTR_TDLS_EXTERNAL_SETUP = 0x8c + NL80211_ATTR_TDLS_INITIATOR = 0xcf + NL80211_ATTR_TDLS_OPERATION = 0x8a + NL80211_ATTR_TDLS_PEER_CAPABILITY = 0xcb + NL80211_ATTR_TDLS_SUPPORT = 0x8b + NL80211_ATTR_TESTDATA = 0x45 + NL80211_ATTR_TID_CONFIG = 0x11d + NL80211_ATTR_TIMED_OUT = 0x41 + NL80211_ATTR_TIMEOUT = 0x110 + NL80211_ATTR_TIMEOUT_REASON = 0xf8 + NL80211_ATTR_TSID = 0xd2 + NL80211_ATTR_TWT_RESPONDER = 0x116 + NL80211_ATTR_TX_FRAME_TYPES = 0x63 + NL80211_ATTR_TX_NO_CCK_RATE = 0x87 + NL80211_ATTR_TXQ_LIMIT = 0x10a + NL80211_ATTR_TXQ_MEMORY_LIMIT = 0x10b + NL80211_ATTR_TXQ_QUANTUM = 0x10c + NL80211_ATTR_TXQ_STATS = 0x109 + NL80211_ATTR_TX_RATES = 0x5a + NL80211_ATTR_UNSOL_BCAST_PROBE_RESP = 0x127 + NL80211_ATTR_UNSPEC = 0x0 + NL80211_ATTR_USE_MFP = 0x42 + NL80211_ATTR_USER_PRIO = 0xd3 + NL80211_ATTR_USER_REG_HINT_TYPE = 0x9a + NL80211_ATTR_USE_RRM = 0xd0 + NL80211_ATTR_VENDOR_DATA = 0xc5 + NL80211_ATTR_VENDOR_EVENTS = 0xc6 + NL80211_ATTR_VENDOR_ID = 0xc3 + NL80211_ATTR_VENDOR_SUBCMD = 0xc4 + NL80211_ATTR_VHT_CAPABILITY = 0x9d + NL80211_ATTR_VHT_CAPABILITY_MASK = 0xb0 + NL80211_ATTR_VLAN_ID = 0x11a + NL80211_ATTR_WANT_1X_4WAY_HS = 0x101 + NL80211_ATTR_WDEV = 0x99 + NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX = 0x72 + NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX = 0x71 + NL80211_ATTR_WIPHY_ANTENNA_RX = 0x6a + NL80211_ATTR_WIPHY_ANTENNA_TX = 0x69 + NL80211_ATTR_WIPHY_BANDS = 0x16 + NL80211_ATTR_WIPHY_CHANNEL_TYPE = 0x27 + NL80211_ATTR_WIPHY = 0x1 + NL80211_ATTR_WIPHY_COVERAGE_CLASS = 0x59 + NL80211_ATTR_WIPHY_DYN_ACK = 0xd1 + NL80211_ATTR_WIPHY_EDMG_BW_CONFIG = 0x119 + NL80211_ATTR_WIPHY_EDMG_CHANNELS = 0x118 + NL80211_ATTR_WIPHY_FRAG_THRESHOLD = 0x3f + NL80211_ATTR_WIPHY_FREQ = 0x26 + NL80211_ATTR_WIPHY_FREQ_HINT = 0xc9 + NL80211_ATTR_WIPHY_FREQ_OFFSET = 0x122 + NL80211_ATTR_WIPHY_NAME = 0x2 + NL80211_ATTR_WIPHY_RETRY_LONG = 0x3e + NL80211_ATTR_WIPHY_RETRY_SHORT = 0x3d + NL80211_ATTR_WIPHY_RTS_THRESHOLD = 0x40 + NL80211_ATTR_WIPHY_SELF_MANAGED_REG = 0xd8 + NL80211_ATTR_WIPHY_TX_POWER_LEVEL = 0x62 + NL80211_ATTR_WIPHY_TX_POWER_SETTING = 0x61 + NL80211_ATTR_WIPHY_TXQ_PARAMS = 0x25 + NL80211_ATTR_WOWLAN_TRIGGERS = 0x75 + NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED = 0x76 + NL80211_ATTR_WPA_VERSIONS = 0x4b + NL80211_AUTHTYPE_AUTOMATIC = 0x8 + NL80211_AUTHTYPE_FILS_PK = 0x7 + NL80211_AUTHTYPE_FILS_SK = 0x5 + NL80211_AUTHTYPE_FILS_SK_PFS = 0x6 + NL80211_AUTHTYPE_FT = 0x2 + NL80211_AUTHTYPE_MAX = 0x7 + NL80211_AUTHTYPE_NETWORK_EAP = 0x3 + NL80211_AUTHTYPE_OPEN_SYSTEM = 0x0 + NL80211_AUTHTYPE_SAE = 0x4 + NL80211_AUTHTYPE_SHARED_KEY = 0x1 + NL80211_BAND_2GHZ = 0x0 + NL80211_BAND_5GHZ = 0x1 + NL80211_BAND_60GHZ = 0x2 + NL80211_BAND_6GHZ = 0x3 + NL80211_BAND_ATTR_EDMG_BW_CONFIG = 0xb + NL80211_BAND_ATTR_EDMG_CHANNELS = 0xa + NL80211_BAND_ATTR_FREQS = 0x1 + NL80211_BAND_ATTR_HT_AMPDU_DENSITY = 0x6 + NL80211_BAND_ATTR_HT_AMPDU_FACTOR = 0x5 + NL80211_BAND_ATTR_HT_CAPA = 0x4 + NL80211_BAND_ATTR_HT_MCS_SET = 0x3 + NL80211_BAND_ATTR_IFTYPE_DATA = 0x9 + NL80211_BAND_ATTR_MAX = 0xb + NL80211_BAND_ATTR_RATES = 0x2 + NL80211_BAND_ATTR_VHT_CAPA = 0x8 + NL80211_BAND_ATTR_VHT_MCS_SET = 0x7 + NL80211_BAND_IFTYPE_ATTR_HE_6GHZ_CAPA = 0x6 + NL80211_BAND_IFTYPE_ATTR_HE_CAP_MAC = 0x2 + NL80211_BAND_IFTYPE_ATTR_HE_CAP_MCS_SET = 0x4 + NL80211_BAND_IFTYPE_ATTR_HE_CAP_PHY = 0x3 + NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE = 0x5 + NL80211_BAND_IFTYPE_ATTR_IFTYPES = 0x1 + NL80211_BAND_IFTYPE_ATTR_MAX = 0x7 + NL80211_BAND_S1GHZ = 0x4 + NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE = 0x2 + NL80211_BITRATE_ATTR_MAX = 0x2 + NL80211_BITRATE_ATTR_RATE = 0x1 + NL80211_BSS_BEACON_IES = 0xb + NL80211_BSS_BEACON_INTERVAL = 0x4 + NL80211_BSS_BEACON_TSF = 0xd + NL80211_BSS_BSSID = 0x1 + NL80211_BSS_CAPABILITY = 0x5 + NL80211_BSS_CHAIN_SIGNAL = 0x13 + NL80211_BSS_CHAN_WIDTH_10 = 0x1 + NL80211_BSS_CHAN_WIDTH_1 = 0x3 + NL80211_BSS_CHAN_WIDTH_20 = 0x0 + NL80211_BSS_CHAN_WIDTH_2 = 0x4 + NL80211_BSS_CHAN_WIDTH_5 = 0x2 + NL80211_BSS_CHAN_WIDTH = 0xc + NL80211_BSS_FREQUENCY = 0x2 + NL80211_BSS_FREQUENCY_OFFSET = 0x14 + NL80211_BSS_INFORMATION_ELEMENTS = 0x6 + NL80211_BSS_LAST_SEEN_BOOTTIME = 0xf + NL80211_BSS_MAX = 0x14 + NL80211_BSS_PAD = 0x10 + NL80211_BSS_PARENT_BSSID = 0x12 + NL80211_BSS_PARENT_TSF = 0x11 + NL80211_BSS_PRESP_DATA = 0xe + NL80211_BSS_SEEN_MS_AGO = 0xa + NL80211_BSS_SELECT_ATTR_BAND_PREF = 0x2 + NL80211_BSS_SELECT_ATTR_MAX = 0x3 + NL80211_BSS_SELECT_ATTR_RSSI_ADJUST = 0x3 + NL80211_BSS_SELECT_ATTR_RSSI = 0x1 + NL80211_BSS_SIGNAL_MBM = 0x7 + NL80211_BSS_SIGNAL_UNSPEC = 0x8 + NL80211_BSS_STATUS_ASSOCIATED = 0x1 + NL80211_BSS_STATUS_AUTHENTICATED = 0x0 + NL80211_BSS_STATUS = 0x9 + NL80211_BSS_STATUS_IBSS_JOINED = 0x2 + NL80211_BSS_TSF = 0x3 + NL80211_CHAN_HT20 = 0x1 + NL80211_CHAN_HT40MINUS = 0x2 + NL80211_CHAN_HT40PLUS = 0x3 + NL80211_CHAN_NO_HT = 0x0 + NL80211_CHAN_WIDTH_10 = 0x7 + NL80211_CHAN_WIDTH_160 = 0x5 + NL80211_CHAN_WIDTH_16 = 0xc + NL80211_CHAN_WIDTH_1 = 0x8 + NL80211_CHAN_WIDTH_20 = 0x1 + NL80211_CHAN_WIDTH_20_NOHT = 0x0 + NL80211_CHAN_WIDTH_2 = 0x9 + NL80211_CHAN_WIDTH_40 = 0x2 + NL80211_CHAN_WIDTH_4 = 0xa + NL80211_CHAN_WIDTH_5 = 0x6 + NL80211_CHAN_WIDTH_80 = 0x3 + NL80211_CHAN_WIDTH_80P80 = 0x4 + NL80211_CHAN_WIDTH_8 = 0xb + NL80211_CMD_ABORT_SCAN = 0x72 + NL80211_CMD_ACTION = 0x3b + NL80211_CMD_ACTION_TX_STATUS = 0x3c + NL80211_CMD_ADD_NAN_FUNCTION = 0x75 + NL80211_CMD_ADD_TX_TS = 0x69 + NL80211_CMD_ASSOCIATE = 0x26 + NL80211_CMD_AUTHENTICATE = 0x25 + NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL = 0x38 + NL80211_CMD_CHANGE_NAN_CONFIG = 0x77 + NL80211_CMD_CHANNEL_SWITCH = 0x66 + NL80211_CMD_CH_SWITCH_NOTIFY = 0x58 + NL80211_CMD_CH_SWITCH_STARTED_NOTIFY = 0x6e + NL80211_CMD_CONNECT = 0x2e + NL80211_CMD_CONN_FAILED = 0x5b + NL80211_CMD_CONTROL_PORT_FRAME = 0x81 + NL80211_CMD_CONTROL_PORT_FRAME_TX_STATUS = 0x8b + NL80211_CMD_CRIT_PROTOCOL_START = 0x62 + NL80211_CMD_CRIT_PROTOCOL_STOP = 0x63 + NL80211_CMD_DEAUTHENTICATE = 0x27 + NL80211_CMD_DEL_BEACON = 0x10 + NL80211_CMD_DEL_INTERFACE = 0x8 + NL80211_CMD_DEL_KEY = 0xc + NL80211_CMD_DEL_MPATH = 0x18 + NL80211_CMD_DEL_NAN_FUNCTION = 0x76 + NL80211_CMD_DEL_PMK = 0x7c + NL80211_CMD_DEL_PMKSA = 0x35 + NL80211_CMD_DEL_STATION = 0x14 + NL80211_CMD_DEL_TX_TS = 0x6a + NL80211_CMD_DEL_WIPHY = 0x4 + NL80211_CMD_DISASSOCIATE = 0x28 + NL80211_CMD_DISCONNECT = 0x30 + NL80211_CMD_EXTERNAL_AUTH = 0x7f + NL80211_CMD_FLUSH_PMKSA = 0x36 + NL80211_CMD_FRAME = 0x3b + NL80211_CMD_FRAME_TX_STATUS = 0x3c + NL80211_CMD_FRAME_WAIT_CANCEL = 0x43 + NL80211_CMD_FT_EVENT = 0x61 + NL80211_CMD_GET_BEACON = 0xd + NL80211_CMD_GET_COALESCE = 0x64 + NL80211_CMD_GET_FTM_RESPONDER_STATS = 0x82 + NL80211_CMD_GET_INTERFACE = 0x5 + NL80211_CMD_GET_KEY = 0x9 + NL80211_CMD_GET_MESH_CONFIG = 0x1c + NL80211_CMD_GET_MESH_PARAMS = 0x1c + NL80211_CMD_GET_MPATH = 0x15 + NL80211_CMD_GET_MPP = 0x6b + NL80211_CMD_GET_POWER_SAVE = 0x3e + NL80211_CMD_GET_PROTOCOL_FEATURES = 0x5f + NL80211_CMD_GET_REG = 0x1f + NL80211_CMD_GET_SCAN = 0x20 + NL80211_CMD_GET_STATION = 0x11 + NL80211_CMD_GET_SURVEY = 0x32 + NL80211_CMD_GET_WIPHY = 0x1 + NL80211_CMD_GET_WOWLAN = 0x49 + NL80211_CMD_JOIN_IBSS = 0x2b + NL80211_CMD_JOIN_MESH = 0x44 + NL80211_CMD_JOIN_OCB = 0x6c + NL80211_CMD_LEAVE_IBSS = 0x2c + NL80211_CMD_LEAVE_MESH = 0x45 + NL80211_CMD_LEAVE_OCB = 0x6d + NL80211_CMD_MAX = 0x93 + NL80211_CMD_MICHAEL_MIC_FAILURE = 0x29 + NL80211_CMD_NAN_MATCH = 0x78 + NL80211_CMD_NEW_BEACON = 0xf + NL80211_CMD_NEW_INTERFACE = 0x7 + NL80211_CMD_NEW_KEY = 0xb + NL80211_CMD_NEW_MPATH = 0x17 + NL80211_CMD_NEW_PEER_CANDIDATE = 0x48 + NL80211_CMD_NEW_SCAN_RESULTS = 0x22 + NL80211_CMD_NEW_STATION = 0x13 + NL80211_CMD_NEW_SURVEY_RESULTS = 0x33 + NL80211_CMD_NEW_WIPHY = 0x3 + NL80211_CMD_NOTIFY_CQM = 0x40 + NL80211_CMD_NOTIFY_RADAR = 0x86 + NL80211_CMD_PEER_MEASUREMENT_COMPLETE = 0x85 + NL80211_CMD_PEER_MEASUREMENT_RESULT = 0x84 + NL80211_CMD_PEER_MEASUREMENT_START = 0x83 + NL80211_CMD_PMKSA_CANDIDATE = 0x50 + NL80211_CMD_PORT_AUTHORIZED = 0x7d + NL80211_CMD_PROBE_CLIENT = 0x54 + NL80211_CMD_PROBE_MESH_LINK = 0x88 + NL80211_CMD_RADAR_DETECT = 0x5e + NL80211_CMD_REG_BEACON_HINT = 0x2a + NL80211_CMD_REG_CHANGE = 0x24 + NL80211_CMD_REGISTER_ACTION = 0x3a + NL80211_CMD_REGISTER_BEACONS = 0x55 + NL80211_CMD_REGISTER_FRAME = 0x3a + NL80211_CMD_RELOAD_REGDB = 0x7e + NL80211_CMD_REMAIN_ON_CHANNEL = 0x37 + NL80211_CMD_REQ_SET_REG = 0x1b + NL80211_CMD_ROAM = 0x2f + NL80211_CMD_SCAN_ABORTED = 0x23 + NL80211_CMD_SCHED_SCAN_RESULTS = 0x4d + NL80211_CMD_SCHED_SCAN_STOPPED = 0x4e + NL80211_CMD_SET_BEACON = 0xe + NL80211_CMD_SET_BSS = 0x19 + NL80211_CMD_SET_CHANNEL = 0x41 + NL80211_CMD_SET_COALESCE = 0x65 + NL80211_CMD_SET_CQM = 0x3f + NL80211_CMD_SET_INTERFACE = 0x6 + NL80211_CMD_SET_KEY = 0xa + NL80211_CMD_SET_MAC_ACL = 0x5d + NL80211_CMD_SET_MCAST_RATE = 0x5c + NL80211_CMD_SET_MESH_CONFIG = 0x1d + NL80211_CMD_SET_MESH_PARAMS = 0x1d + NL80211_CMD_SET_MGMT_EXTRA_IE = 0x1e + NL80211_CMD_SET_MPATH = 0x16 + NL80211_CMD_SET_MULTICAST_TO_UNICAST = 0x79 + NL80211_CMD_SET_NOACK_MAP = 0x57 + NL80211_CMD_SET_PMK = 0x7b + NL80211_CMD_SET_PMKSA = 0x34 + NL80211_CMD_SET_POWER_SAVE = 0x3d + NL80211_CMD_SET_QOS_MAP = 0x68 + NL80211_CMD_SET_REG = 0x1a + NL80211_CMD_SET_REKEY_OFFLOAD = 0x4f + NL80211_CMD_SET_SAR_SPECS = 0x8c + NL80211_CMD_SET_STATION = 0x12 + NL80211_CMD_SET_TID_CONFIG = 0x89 + NL80211_CMD_SET_TX_BITRATE_MASK = 0x39 + NL80211_CMD_SET_WDS_PEER = 0x42 + NL80211_CMD_SET_WIPHY = 0x2 + NL80211_CMD_SET_WIPHY_NETNS = 0x31 + NL80211_CMD_SET_WOWLAN = 0x4a + NL80211_CMD_STA_OPMODE_CHANGED = 0x80 + NL80211_CMD_START_AP = 0xf + NL80211_CMD_START_NAN = 0x73 + NL80211_CMD_START_P2P_DEVICE = 0x59 + NL80211_CMD_START_SCHED_SCAN = 0x4b + NL80211_CMD_STOP_AP = 0x10 + NL80211_CMD_STOP_NAN = 0x74 + NL80211_CMD_STOP_P2P_DEVICE = 0x5a + NL80211_CMD_STOP_SCHED_SCAN = 0x4c + NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH = 0x70 + NL80211_CMD_TDLS_CHANNEL_SWITCH = 0x6f + NL80211_CMD_TDLS_MGMT = 0x52 + NL80211_CMD_TDLS_OPER = 0x51 + NL80211_CMD_TESTMODE = 0x2d + NL80211_CMD_TRIGGER_SCAN = 0x21 + NL80211_CMD_UNEXPECTED_4ADDR_FRAME = 0x56 + NL80211_CMD_UNEXPECTED_FRAME = 0x53 + NL80211_CMD_UNPROT_BEACON = 0x8a + NL80211_CMD_UNPROT_DEAUTHENTICATE = 0x46 + NL80211_CMD_UNPROT_DISASSOCIATE = 0x47 + NL80211_CMD_UNSPEC = 0x0 + NL80211_CMD_UPDATE_CONNECT_PARAMS = 0x7a + NL80211_CMD_UPDATE_FT_IES = 0x60 + NL80211_CMD_UPDATE_OWE_INFO = 0x87 + NL80211_CMD_VENDOR = 0x67 + NL80211_CMD_WIPHY_REG_CHANGE = 0x71 + NL80211_COALESCE_CONDITION_MATCH = 0x0 + NL80211_COALESCE_CONDITION_NO_MATCH = 0x1 + NL80211_CONN_FAIL_BLOCKED_CLIENT = 0x1 + NL80211_CONN_FAIL_MAX_CLIENTS = 0x0 + NL80211_CQM_RSSI_BEACON_LOSS_EVENT = 0x2 + NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH = 0x1 + NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW = 0x0 + NL80211_CQM_TXE_MAX_INTVL = 0x708 + NL80211_CRIT_PROTO_APIPA = 0x3 + NL80211_CRIT_PROTO_DHCP = 0x1 + NL80211_CRIT_PROTO_EAPOL = 0x2 + NL80211_CRIT_PROTO_MAX_DURATION = 0x1388 + NL80211_CRIT_PROTO_UNSPEC = 0x0 + NL80211_DFS_AVAILABLE = 0x2 + NL80211_DFS_ETSI = 0x2 + NL80211_DFS_FCC = 0x1 + NL80211_DFS_JP = 0x3 + NL80211_DFS_UNAVAILABLE = 0x1 + NL80211_DFS_UNSET = 0x0 + NL80211_DFS_USABLE = 0x0 + NL80211_EDMG_BW_CONFIG_MAX = 0xf + NL80211_EDMG_BW_CONFIG_MIN = 0x4 + NL80211_EDMG_CHANNELS_MAX = 0x3c + NL80211_EDMG_CHANNELS_MIN = 0x1 + NL80211_EXTERNAL_AUTH_ABORT = 0x1 + NL80211_EXTERNAL_AUTH_START = 0x0 + NL80211_EXT_FEATURE_4WAY_HANDSHAKE_AP_PSK = 0x32 + NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X = 0x10 + NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_PSK = 0xf + NL80211_EXT_FEATURE_ACCEPT_BCAST_PROBE_RESP = 0x12 + NL80211_EXT_FEATURE_ACK_SIGNAL_SUPPORT = 0x1b + NL80211_EXT_FEATURE_AIRTIME_FAIRNESS = 0x21 + NL80211_EXT_FEATURE_AP_PMKSA_CACHING = 0x22 + NL80211_EXT_FEATURE_AQL = 0x28 + NL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT = 0x2e + NL80211_EXT_FEATURE_BEACON_PROTECTION = 0x29 + NL80211_EXT_FEATURE_BEACON_RATE_HE = 0x36 + NL80211_EXT_FEATURE_BEACON_RATE_HT = 0x7 + NL80211_EXT_FEATURE_BEACON_RATE_LEGACY = 0x6 + NL80211_EXT_FEATURE_BEACON_RATE_VHT = 0x8 + NL80211_EXT_FEATURE_BSS_PARENT_TSF = 0x4 + NL80211_EXT_FEATURE_CAN_REPLACE_PTK0 = 0x1f + NL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH = 0x2a + NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211 = 0x1a + NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211_TX_STATUS = 0x30 + 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_OFFLOAD = 0x19 + NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER = 0x20 + NL80211_EXT_FEATURE_EXT_KEY_ID = 0x24 + NL80211_EXT_FEATURE_FILS_DISCOVERY = 0x34 + NL80211_EXT_FEATURE_FILS_MAX_CHANNEL_TIME = 0x11 + NL80211_EXT_FEATURE_FILS_SK_OFFLOAD = 0xe + NL80211_EXT_FEATURE_FILS_STA = 0x9 + NL80211_EXT_FEATURE_HIGH_ACCURACY_SCAN = 0x18 + NL80211_EXT_FEATURE_LOW_POWER_SCAN = 0x17 + NL80211_EXT_FEATURE_LOW_SPAN_SCAN = 0x16 + NL80211_EXT_FEATURE_MFP_OPTIONAL = 0x15 + NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA = 0xa + NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA_CONNECTED = 0xb + NL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS = 0x2d + NL80211_EXT_FEATURE_MU_MIMO_AIR_SNIFFER = 0x2 + 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_PROTECTED_TWT = 0x2b + NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE = 0x39 + NL80211_EXT_FEATURE_RRM = 0x1 + NL80211_EXT_FEATURE_SAE_OFFLOAD_AP = 0x33 + NL80211_EXT_FEATURE_SAE_OFFLOAD = 0x26 + NL80211_EXT_FEATURE_SCAN_FREQ_KHZ = 0x2f + NL80211_EXT_FEATURE_SCAN_MIN_PREQ_CONTENT = 0x1e + NL80211_EXT_FEATURE_SCAN_RANDOM_SN = 0x1d + NL80211_EXT_FEATURE_SCAN_START_TIME = 0x3 + 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_RTT = 0x38 + NL80211_EXT_FEATURE_SET_SCAN_DWELL = 0x5 + NL80211_EXT_FEATURE_STA_TX_PWR = 0x25 + NL80211_EXT_FEATURE_TXQS = 0x1c + NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP = 0x35 + NL80211_EXT_FEATURE_VHT_IBSS = 0x0 + NL80211_EXT_FEATURE_VLAN_OFFLOAD = 0x27 + NL80211_FEATURE_ACKTO_ESTIMATION = 0x800000 + NL80211_FEATURE_ACTIVE_MONITOR = 0x20000 + NL80211_FEATURE_ADVERTISE_CHAN_LIMITS = 0x4000 + NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE = 0x40000 + NL80211_FEATURE_AP_SCAN = 0x100 + NL80211_FEATURE_CELL_BASE_REG_HINTS = 0x8 + NL80211_FEATURE_DS_PARAM_SET_IE_IN_PROBES = 0x80000 + NL80211_FEATURE_DYNAMIC_SMPS = 0x2000000 + NL80211_FEATURE_FULL_AP_CLIENT_STATE = 0x8000 + NL80211_FEATURE_HT_IBSS = 0x2 + NL80211_FEATURE_INACTIVITY_TIMER = 0x4 + NL80211_FEATURE_LOW_PRIORITY_SCAN = 0x40 + NL80211_FEATURE_MAC_ON_CREATE = 0x8000000 + NL80211_FEATURE_ND_RANDOM_MAC_ADDR = 0x80000000 + NL80211_FEATURE_NEED_OBSS_SCAN = 0x400 + NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL = 0x10 + NL80211_FEATURE_P2P_GO_CTWIN = 0x800 + NL80211_FEATURE_P2P_GO_OPPPS = 0x1000 + NL80211_FEATURE_QUIET = 0x200000 + NL80211_FEATURE_SAE = 0x20 + NL80211_FEATURE_SCAN_FLUSH = 0x80 + NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR = 0x20000000 + NL80211_FEATURE_SCHED_SCAN_RANDOM_MAC_ADDR = 0x40000000 + NL80211_FEATURE_SK_TX_STATUS = 0x1 + NL80211_FEATURE_STATIC_SMPS = 0x1000000 + NL80211_FEATURE_SUPPORTS_WMM_ADMISSION = 0x4000000 + NL80211_FEATURE_TDLS_CHANNEL_SWITCH = 0x10000000 + NL80211_FEATURE_TX_POWER_INSERTION = 0x400000 + NL80211_FEATURE_USERSPACE_MPM = 0x10000 + NL80211_FEATURE_VIF_TXPOWER = 0x200 + NL80211_FEATURE_WFA_TPC_IE_IN_PROBES = 0x100000 + NL80211_FILS_DISCOVERY_ATTR_INT_MAX = 0x2 + NL80211_FILS_DISCOVERY_ATTR_INT_MIN = 0x1 + NL80211_FILS_DISCOVERY_ATTR_MAX = 0x3 + NL80211_FILS_DISCOVERY_ATTR_TMPL = 0x3 + NL80211_FILS_DISCOVERY_TMPL_MIN_LEN = 0x2a + NL80211_FREQUENCY_ATTR_16MHZ = 0x19 + NL80211_FREQUENCY_ATTR_1MHZ = 0x15 + NL80211_FREQUENCY_ATTR_2MHZ = 0x16 + NL80211_FREQUENCY_ATTR_4MHZ = 0x17 + NL80211_FREQUENCY_ATTR_8MHZ = 0x18 + NL80211_FREQUENCY_ATTR_DFS_CAC_TIME = 0xd + NL80211_FREQUENCY_ATTR_DFS_STATE = 0x7 + NL80211_FREQUENCY_ATTR_DFS_TIME = 0x8 + NL80211_FREQUENCY_ATTR_DISABLED = 0x2 + NL80211_FREQUENCY_ATTR_FREQ = 0x1 + NL80211_FREQUENCY_ATTR_GO_CONCURRENT = 0xf + NL80211_FREQUENCY_ATTR_INDOOR_ONLY = 0xe + NL80211_FREQUENCY_ATTR_IR_CONCURRENT = 0xf + NL80211_FREQUENCY_ATTR_MAX = 0x19 + 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_80MHZ = 0xb + NL80211_FREQUENCY_ATTR_NO_HE = 0x13 + NL80211_FREQUENCY_ATTR_NO_HT40_MINUS = 0x9 + NL80211_FREQUENCY_ATTR_NO_HT40_PLUS = 0xa + NL80211_FREQUENCY_ATTR_NO_IBSS = 0x3 + NL80211_FREQUENCY_ATTR_NO_IR = 0x3 + NL80211_FREQUENCY_ATTR_OFFSET = 0x14 + NL80211_FREQUENCY_ATTR_PASSIVE_SCAN = 0x3 + NL80211_FREQUENCY_ATTR_RADAR = 0x5 + NL80211_FREQUENCY_ATTR_WMM = 0x12 + NL80211_FTM_RESP_ATTR_CIVICLOC = 0x3 + NL80211_FTM_RESP_ATTR_ENABLED = 0x1 + NL80211_FTM_RESP_ATTR_LCI = 0x2 + NL80211_FTM_RESP_ATTR_MAX = 0x3 + NL80211_FTM_STATS_ASAP_NUM = 0x4 + NL80211_FTM_STATS_FAILED_NUM = 0x3 + NL80211_FTM_STATS_MAX = 0xa + NL80211_FTM_STATS_NON_ASAP_NUM = 0x5 + NL80211_FTM_STATS_OUT_OF_WINDOW_TRIGGERS_NUM = 0x9 + NL80211_FTM_STATS_PAD = 0xa + NL80211_FTM_STATS_PARTIAL_NUM = 0x2 + NL80211_FTM_STATS_RESCHEDULE_REQUESTS_NUM = 0x8 + NL80211_FTM_STATS_SUCCESS_NUM = 0x1 + NL80211_FTM_STATS_TOTAL_DURATION_MSEC = 0x6 + NL80211_FTM_STATS_UNKNOWN_TRIGGERS_NUM = 0x7 + NL80211_GENL_NAME = "nl80211" + NL80211_HE_BSS_COLOR_ATTR_COLOR = 0x1 + NL80211_HE_BSS_COLOR_ATTR_DISABLED = 0x2 + NL80211_HE_BSS_COLOR_ATTR_MAX = 0x3 + NL80211_HE_BSS_COLOR_ATTR_PARTIAL = 0x3 + NL80211_HE_MAX_CAPABILITY_LEN = 0x36 + NL80211_HE_MIN_CAPABILITY_LEN = 0x10 + NL80211_HE_NSS_MAX = 0x8 + NL80211_HE_OBSS_PD_ATTR_BSS_COLOR_BITMAP = 0x4 + NL80211_HE_OBSS_PD_ATTR_MAX = 0x6 + NL80211_HE_OBSS_PD_ATTR_MAX_OFFSET = 0x2 + NL80211_HE_OBSS_PD_ATTR_MIN_OFFSET = 0x1 + NL80211_HE_OBSS_PD_ATTR_NON_SRG_MAX_OFFSET = 0x3 + NL80211_HE_OBSS_PD_ATTR_PARTIAL_BSSID_BITMAP = 0x5 + NL80211_HE_OBSS_PD_ATTR_SR_CTRL = 0x6 + NL80211_HIDDEN_SSID_NOT_IN_USE = 0x0 + NL80211_HIDDEN_SSID_ZERO_CONTENTS = 0x2 + NL80211_HIDDEN_SSID_ZERO_LEN = 0x1 + NL80211_HT_CAPABILITY_LEN = 0x1a + NL80211_IFACE_COMB_BI_MIN_GCD = 0x7 + NL80211_IFACE_COMB_LIMITS = 0x1 + NL80211_IFACE_COMB_MAXNUM = 0x2 + NL80211_IFACE_COMB_NUM_CHANNELS = 0x4 + NL80211_IFACE_COMB_RADAR_DETECT_REGIONS = 0x6 + NL80211_IFACE_COMB_RADAR_DETECT_WIDTHS = 0x5 + NL80211_IFACE_COMB_STA_AP_BI_MATCH = 0x3 + NL80211_IFACE_COMB_UNSPEC = 0x0 + NL80211_IFACE_LIMIT_MAX = 0x1 + NL80211_IFACE_LIMIT_TYPES = 0x2 + NL80211_IFACE_LIMIT_UNSPEC = 0x0 + NL80211_IFTYPE_ADHOC = 0x1 + NL80211_IFTYPE_AKM_ATTR_IFTYPES = 0x1 + NL80211_IFTYPE_AKM_ATTR_MAX = 0x2 + NL80211_IFTYPE_AKM_ATTR_SUITES = 0x2 + NL80211_IFTYPE_AP = 0x3 + NL80211_IFTYPE_AP_VLAN = 0x4 + NL80211_IFTYPE_MAX = 0xc + NL80211_IFTYPE_MESH_POINT = 0x7 + NL80211_IFTYPE_MONITOR = 0x6 + NL80211_IFTYPE_NAN = 0xc + NL80211_IFTYPE_OCB = 0xb + NL80211_IFTYPE_P2P_CLIENT = 0x8 + NL80211_IFTYPE_P2P_DEVICE = 0xa + NL80211_IFTYPE_P2P_GO = 0x9 + NL80211_IFTYPE_STATION = 0x2 + NL80211_IFTYPE_UNSPECIFIED = 0x0 + NL80211_IFTYPE_WDS = 0x5 + NL80211_KCK_EXT_LEN = 0x18 + NL80211_KCK_LEN = 0x10 + NL80211_KEK_EXT_LEN = 0x20 + NL80211_KEK_LEN = 0x10 + NL80211_KEY_CIPHER = 0x3 + NL80211_KEY_DATA = 0x1 + NL80211_KEY_DEFAULT_BEACON = 0xa + NL80211_KEY_DEFAULT = 0x5 + NL80211_KEY_DEFAULT_MGMT = 0x6 + NL80211_KEY_DEFAULT_TYPE_MULTICAST = 0x2 + NL80211_KEY_DEFAULT_TYPES = 0x8 + NL80211_KEY_DEFAULT_TYPE_UNICAST = 0x1 + NL80211_KEY_IDX = 0x2 + NL80211_KEY_MAX = 0xa + NL80211_KEY_MODE = 0x9 + NL80211_KEY_NO_TX = 0x1 + NL80211_KEY_RX_TX = 0x0 + NL80211_KEY_SEQ = 0x4 + NL80211_KEY_SET_TX = 0x2 + NL80211_KEY_TYPE = 0x7 + NL80211_KEYTYPE_GROUP = 0x0 + NL80211_KEYTYPE_PAIRWISE = 0x1 + NL80211_KEYTYPE_PEERKEY = 0x2 + NL80211_MAX_NR_AKM_SUITES = 0x2 + NL80211_MAX_NR_CIPHER_SUITES = 0x5 + NL80211_MAX_SUPP_HT_RATES = 0x4d + NL80211_MAX_SUPP_RATES = 0x20 + NL80211_MAX_SUPP_REG_RULES = 0x80 + NL80211_MESHCONF_ATTR_MAX = 0x1f + NL80211_MESHCONF_AUTO_OPEN_PLINKS = 0x7 + NL80211_MESHCONF_AWAKE_WINDOW = 0x1b + NL80211_MESHCONF_CONFIRM_TIMEOUT = 0x2 + NL80211_MESHCONF_CONNECTED_TO_AS = 0x1f + NL80211_MESHCONF_CONNECTED_TO_GATE = 0x1d + NL80211_MESHCONF_ELEMENT_TTL = 0xf + NL80211_MESHCONF_FORWARDING = 0x13 + NL80211_MESHCONF_GATE_ANNOUNCEMENTS = 0x11 + NL80211_MESHCONF_HOLDING_TIMEOUT = 0x3 + NL80211_MESHCONF_HT_OPMODE = 0x16 + NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT = 0xb + NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL = 0x19 + NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES = 0x8 + NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME = 0xd + NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT = 0x17 + NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL = 0x12 + NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL = 0xc + NL80211_MESHCONF_HWMP_RANN_INTERVAL = 0x10 + NL80211_MESHCONF_HWMP_ROOT_INTERVAL = 0x18 + NL80211_MESHCONF_HWMP_ROOTMODE = 0xe + NL80211_MESHCONF_MAX_PEER_LINKS = 0x4 + NL80211_MESHCONF_MAX_RETRIES = 0x5 + NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT = 0xa + NL80211_MESHCONF_NOLEARN = 0x1e + NL80211_MESHCONF_PATH_REFRESH_TIME = 0x9 + NL80211_MESHCONF_PLINK_TIMEOUT = 0x1c + NL80211_MESHCONF_POWER_MODE = 0x1a + NL80211_MESHCONF_RETRY_TIMEOUT = 0x1 + NL80211_MESHCONF_RSSI_THRESHOLD = 0x14 + NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR = 0x15 + NL80211_MESHCONF_TTL = 0x6 + NL80211_MESH_POWER_ACTIVE = 0x1 + NL80211_MESH_POWER_DEEP_SLEEP = 0x3 + NL80211_MESH_POWER_LIGHT_SLEEP = 0x2 + NL80211_MESH_POWER_MAX = 0x3 + NL80211_MESH_POWER_UNKNOWN = 0x0 + NL80211_MESH_SETUP_ATTR_MAX = 0x8 + NL80211_MESH_SETUP_AUTH_PROTOCOL = 0x8 + NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC = 0x2 + NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL = 0x1 + NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC = 0x6 + NL80211_MESH_SETUP_IE = 0x3 + NL80211_MESH_SETUP_USERSPACE_AMPE = 0x5 + NL80211_MESH_SETUP_USERSPACE_AUTH = 0x4 + NL80211_MESH_SETUP_USERSPACE_MPM = 0x7 + NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE = 0x3 + NL80211_MFP_NO = 0x0 + NL80211_MFP_OPTIONAL = 0x2 + NL80211_MFP_REQUIRED = 0x1 + NL80211_MIN_REMAIN_ON_CHANNEL_TIME = 0xa + NL80211_MNTR_FLAG_ACTIVE = 0x6 + NL80211_MNTR_FLAG_CONTROL = 0x3 + NL80211_MNTR_FLAG_COOK_FRAMES = 0x5 + NL80211_MNTR_FLAG_FCSFAIL = 0x1 + NL80211_MNTR_FLAG_MAX = 0x6 + NL80211_MNTR_FLAG_OTHER_BSS = 0x4 + NL80211_MNTR_FLAG_PLCPFAIL = 0x2 + NL80211_MPATH_FLAG_ACTIVE = 0x1 + NL80211_MPATH_FLAG_FIXED = 0x8 + NL80211_MPATH_FLAG_RESOLVED = 0x10 + NL80211_MPATH_FLAG_RESOLVING = 0x2 + NL80211_MPATH_FLAG_SN_VALID = 0x4 + NL80211_MPATH_INFO_DISCOVERY_RETRIES = 0x7 + NL80211_MPATH_INFO_DISCOVERY_TIMEOUT = 0x6 + NL80211_MPATH_INFO_EXPTIME = 0x4 + NL80211_MPATH_INFO_FLAGS = 0x5 + NL80211_MPATH_INFO_FRAME_QLEN = 0x1 + NL80211_MPATH_INFO_HOP_COUNT = 0x8 + NL80211_MPATH_INFO_MAX = 0x9 + NL80211_MPATH_INFO_METRIC = 0x3 + NL80211_MPATH_INFO_PATH_CHANGE = 0x9 + NL80211_MPATH_INFO_SN = 0x2 + NL80211_MULTICAST_GROUP_CONFIG = "config" + NL80211_MULTICAST_GROUP_MLME = "mlme" + NL80211_MULTICAST_GROUP_NAN = "nan" + NL80211_MULTICAST_GROUP_REG = "regulatory" + NL80211_MULTICAST_GROUP_SCAN = "scan" + NL80211_MULTICAST_GROUP_TESTMODE = "testmode" + NL80211_MULTICAST_GROUP_VENDOR = "vendor" + NL80211_NAN_FUNC_ATTR_MAX = 0x10 + NL80211_NAN_FUNC_CLOSE_RANGE = 0x9 + NL80211_NAN_FUNC_FOLLOW_UP = 0x2 + NL80211_NAN_FUNC_FOLLOW_UP_DEST = 0x8 + NL80211_NAN_FUNC_FOLLOW_UP_ID = 0x6 + NL80211_NAN_FUNC_FOLLOW_UP_REQ_ID = 0x7 + NL80211_NAN_FUNC_INSTANCE_ID = 0xf + NL80211_NAN_FUNC_MAX_TYPE = 0x2 + NL80211_NAN_FUNC_PUBLISH_BCAST = 0x4 + NL80211_NAN_FUNC_PUBLISH = 0x0 + NL80211_NAN_FUNC_PUBLISH_TYPE = 0x3 + NL80211_NAN_FUNC_RX_MATCH_FILTER = 0xd + NL80211_NAN_FUNC_SERVICE_ID = 0x2 + NL80211_NAN_FUNC_SERVICE_ID_LEN = 0x6 + NL80211_NAN_FUNC_SERVICE_INFO = 0xb + NL80211_NAN_FUNC_SERVICE_SPEC_INFO_MAX_LEN = 0xff + NL80211_NAN_FUNC_SRF = 0xc + NL80211_NAN_FUNC_SRF_MAX_LEN = 0xff + NL80211_NAN_FUNC_SUBSCRIBE_ACTIVE = 0x5 + NL80211_NAN_FUNC_SUBSCRIBE = 0x1 + NL80211_NAN_FUNC_TERM_REASON = 0x10 + NL80211_NAN_FUNC_TERM_REASON_ERROR = 0x2 + NL80211_NAN_FUNC_TERM_REASON_TTL_EXPIRED = 0x1 + NL80211_NAN_FUNC_TERM_REASON_USER_REQUEST = 0x0 + NL80211_NAN_FUNC_TTL = 0xa + NL80211_NAN_FUNC_TX_MATCH_FILTER = 0xe + NL80211_NAN_FUNC_TYPE = 0x1 + NL80211_NAN_MATCH_ATTR_MAX = 0x2 + NL80211_NAN_MATCH_FUNC_LOCAL = 0x1 + NL80211_NAN_MATCH_FUNC_PEER = 0x2 + NL80211_NAN_SOLICITED_PUBLISH = 0x1 + NL80211_NAN_SRF_ATTR_MAX = 0x4 + NL80211_NAN_SRF_BF = 0x2 + NL80211_NAN_SRF_BF_IDX = 0x3 + NL80211_NAN_SRF_INCLUDE = 0x1 + NL80211_NAN_SRF_MAC_ADDRS = 0x4 + NL80211_NAN_UNSOLICITED_PUBLISH = 0x2 + NL80211_NUM_ACS = 0x4 + NL80211_P2P_PS_SUPPORTED = 0x1 + NL80211_P2P_PS_UNSUPPORTED = 0x0 + NL80211_PKTPAT_MASK = 0x1 + NL80211_PKTPAT_OFFSET = 0x3 + NL80211_PKTPAT_PATTERN = 0x2 + NL80211_PLINK_ACTION_BLOCK = 0x2 + NL80211_PLINK_ACTION_NO_ACTION = 0x0 + NL80211_PLINK_ACTION_OPEN = 0x1 + NL80211_PLINK_BLOCKED = 0x6 + NL80211_PLINK_CNF_RCVD = 0x3 + NL80211_PLINK_ESTAB = 0x4 + NL80211_PLINK_HOLDING = 0x5 + NL80211_PLINK_LISTEN = 0x0 + NL80211_PLINK_OPN_RCVD = 0x2 + NL80211_PLINK_OPN_SNT = 0x1 + NL80211_PMKSA_CANDIDATE_BSSID = 0x2 + NL80211_PMKSA_CANDIDATE_INDEX = 0x1 + NL80211_PMKSA_CANDIDATE_PREAUTH = 0x3 + NL80211_PMSR_ATTR_MAX = 0x5 + NL80211_PMSR_ATTR_MAX_PEERS = 0x1 + NL80211_PMSR_ATTR_PEERS = 0x5 + NL80211_PMSR_ATTR_RANDOMIZE_MAC_ADDR = 0x3 + NL80211_PMSR_ATTR_REPORT_AP_TSF = 0x2 + NL80211_PMSR_ATTR_TYPE_CAPA = 0x4 + NL80211_PMSR_FTM_CAPA_ATTR_ASAP = 0x1 + NL80211_PMSR_FTM_CAPA_ATTR_BANDWIDTHS = 0x6 + NL80211_PMSR_FTM_CAPA_ATTR_MAX_BURSTS_EXPONENT = 0x7 + NL80211_PMSR_FTM_CAPA_ATTR_MAX = 0xa + NL80211_PMSR_FTM_CAPA_ATTR_MAX_FTMS_PER_BURST = 0x8 + NL80211_PMSR_FTM_CAPA_ATTR_NON_ASAP = 0x2 + NL80211_PMSR_FTM_CAPA_ATTR_NON_TRIGGER_BASED = 0xa + NL80211_PMSR_FTM_CAPA_ATTR_PREAMBLES = 0x5 + NL80211_PMSR_FTM_CAPA_ATTR_REQ_CIVICLOC = 0x4 + NL80211_PMSR_FTM_CAPA_ATTR_REQ_LCI = 0x3 + NL80211_PMSR_FTM_CAPA_ATTR_TRIGGER_BASED = 0x9 + NL80211_PMSR_FTM_FAILURE_BAD_CHANGED_PARAMS = 0x7 + NL80211_PMSR_FTM_FAILURE_INVALID_TIMESTAMP = 0x5 + NL80211_PMSR_FTM_FAILURE_NO_RESPONSE = 0x1 + NL80211_PMSR_FTM_FAILURE_PEER_BUSY = 0x6 + NL80211_PMSR_FTM_FAILURE_PEER_NOT_CAPABLE = 0x4 + NL80211_PMSR_FTM_FAILURE_REJECTED = 0x2 + NL80211_PMSR_FTM_FAILURE_UNSPECIFIED = 0x0 + NL80211_PMSR_FTM_FAILURE_WRONG_CHANNEL = 0x3 + NL80211_PMSR_FTM_REQ_ATTR_ASAP = 0x1 + NL80211_PMSR_FTM_REQ_ATTR_BURST_DURATION = 0x5 + NL80211_PMSR_FTM_REQ_ATTR_BURST_PERIOD = 0x4 + NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST = 0x6 + NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK = 0xc + NL80211_PMSR_FTM_REQ_ATTR_MAX = 0xd + NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED = 0xb + NL80211_PMSR_FTM_REQ_ATTR_NUM_BURSTS_EXP = 0x3 + NL80211_PMSR_FTM_REQ_ATTR_NUM_FTMR_RETRIES = 0x7 + NL80211_PMSR_FTM_REQ_ATTR_PREAMBLE = 0x2 + NL80211_PMSR_FTM_REQ_ATTR_REQUEST_CIVICLOC = 0x9 + NL80211_PMSR_FTM_REQ_ATTR_REQUEST_LCI = 0x8 + NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED = 0xa + NL80211_PMSR_FTM_RESP_ATTR_BURST_DURATION = 0x7 + NL80211_PMSR_FTM_RESP_ATTR_BURST_INDEX = 0x2 + NL80211_PMSR_FTM_RESP_ATTR_BUSY_RETRY_TIME = 0x5 + NL80211_PMSR_FTM_RESP_ATTR_CIVICLOC = 0x14 + NL80211_PMSR_FTM_RESP_ATTR_DIST_AVG = 0x10 + NL80211_PMSR_FTM_RESP_ATTR_DIST_SPREAD = 0x12 + NL80211_PMSR_FTM_RESP_ATTR_DIST_VARIANCE = 0x11 + NL80211_PMSR_FTM_RESP_ATTR_FAIL_REASON = 0x1 + NL80211_PMSR_FTM_RESP_ATTR_FTMS_PER_BURST = 0x8 + NL80211_PMSR_FTM_RESP_ATTR_LCI = 0x13 + NL80211_PMSR_FTM_RESP_ATTR_MAX = 0x15 + NL80211_PMSR_FTM_RESP_ATTR_NUM_BURSTS_EXP = 0x6 + NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_ATTEMPTS = 0x3 + NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_SUCCESSES = 0x4 + NL80211_PMSR_FTM_RESP_ATTR_PAD = 0x15 + NL80211_PMSR_FTM_RESP_ATTR_RSSI_AVG = 0x9 + NL80211_PMSR_FTM_RESP_ATTR_RSSI_SPREAD = 0xa + NL80211_PMSR_FTM_RESP_ATTR_RTT_AVG = 0xd + NL80211_PMSR_FTM_RESP_ATTR_RTT_SPREAD = 0xf + NL80211_PMSR_FTM_RESP_ATTR_RTT_VARIANCE = 0xe + NL80211_PMSR_FTM_RESP_ATTR_RX_RATE = 0xc + NL80211_PMSR_FTM_RESP_ATTR_TX_RATE = 0xb + NL80211_PMSR_PEER_ATTR_ADDR = 0x1 + NL80211_PMSR_PEER_ATTR_CHAN = 0x2 + NL80211_PMSR_PEER_ATTR_MAX = 0x4 + NL80211_PMSR_PEER_ATTR_REQ = 0x3 + NL80211_PMSR_PEER_ATTR_RESP = 0x4 + NL80211_PMSR_REQ_ATTR_DATA = 0x1 + NL80211_PMSR_REQ_ATTR_GET_AP_TSF = 0x2 + NL80211_PMSR_REQ_ATTR_MAX = 0x2 + NL80211_PMSR_RESP_ATTR_AP_TSF = 0x4 + NL80211_PMSR_RESP_ATTR_DATA = 0x1 + NL80211_PMSR_RESP_ATTR_FINAL = 0x5 + NL80211_PMSR_RESP_ATTR_HOST_TIME = 0x3 + NL80211_PMSR_RESP_ATTR_MAX = 0x6 + NL80211_PMSR_RESP_ATTR_PAD = 0x6 + NL80211_PMSR_RESP_ATTR_STATUS = 0x2 + NL80211_PMSR_STATUS_FAILURE = 0x3 + NL80211_PMSR_STATUS_REFUSED = 0x1 + NL80211_PMSR_STATUS_SUCCESS = 0x0 + NL80211_PMSR_STATUS_TIMEOUT = 0x2 + NL80211_PMSR_TYPE_FTM = 0x1 + NL80211_PMSR_TYPE_INVALID = 0x0 + NL80211_PMSR_TYPE_MAX = 0x1 + NL80211_PREAMBLE_DMG = 0x3 + NL80211_PREAMBLE_HE = 0x4 + NL80211_PREAMBLE_HT = 0x1 + NL80211_PREAMBLE_LEGACY = 0x0 + NL80211_PREAMBLE_VHT = 0x2 + NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U = 0x8 + NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P = 0x4 + NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 = 0x2 + NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS = 0x1 + NL80211_PROTOCOL_FEATURE_SPLIT_WIPHY_DUMP = 0x1 + NL80211_PS_DISABLED = 0x0 + NL80211_PS_ENABLED = 0x1 + NL80211_RADAR_CAC_ABORTED = 0x2 + NL80211_RADAR_CAC_FINISHED = 0x1 + NL80211_RADAR_CAC_STARTED = 0x5 + NL80211_RADAR_DETECTED = 0x0 + NL80211_RADAR_NOP_FINISHED = 0x3 + NL80211_RADAR_PRE_CAC_EXPIRED = 0x4 + NL80211_RATE_INFO_10_MHZ_WIDTH = 0xb + NL80211_RATE_INFO_160_MHZ_WIDTH = 0xa + NL80211_RATE_INFO_40_MHZ_WIDTH = 0x3 + NL80211_RATE_INFO_5_MHZ_WIDTH = 0xc + NL80211_RATE_INFO_80_MHZ_WIDTH = 0x8 + NL80211_RATE_INFO_80P80_MHZ_WIDTH = 0x9 + NL80211_RATE_INFO_BITRATE32 = 0x5 + NL80211_RATE_INFO_BITRATE = 0x1 + NL80211_RATE_INFO_HE_1XLTF = 0x0 + NL80211_RATE_INFO_HE_2XLTF = 0x1 + NL80211_RATE_INFO_HE_4XLTF = 0x2 + NL80211_RATE_INFO_HE_DCM = 0x10 + NL80211_RATE_INFO_HE_GI_0_8 = 0x0 + NL80211_RATE_INFO_HE_GI_1_6 = 0x1 + NL80211_RATE_INFO_HE_GI_3_2 = 0x2 + NL80211_RATE_INFO_HE_GI = 0xf + NL80211_RATE_INFO_HE_MCS = 0xd + NL80211_RATE_INFO_HE_NSS = 0xe + NL80211_RATE_INFO_HE_RU_ALLOC_106 = 0x2 + NL80211_RATE_INFO_HE_RU_ALLOC_242 = 0x3 + NL80211_RATE_INFO_HE_RU_ALLOC_26 = 0x0 + NL80211_RATE_INFO_HE_RU_ALLOC_2x996 = 0x6 + NL80211_RATE_INFO_HE_RU_ALLOC_484 = 0x4 + NL80211_RATE_INFO_HE_RU_ALLOC_52 = 0x1 + NL80211_RATE_INFO_HE_RU_ALLOC_996 = 0x5 + NL80211_RATE_INFO_HE_RU_ALLOC = 0x11 + NL80211_RATE_INFO_MAX = 0x11 + NL80211_RATE_INFO_MCS = 0x2 + NL80211_RATE_INFO_SHORT_GI = 0x4 + NL80211_RATE_INFO_VHT_MCS = 0x6 + NL80211_RATE_INFO_VHT_NSS = 0x7 + NL80211_REGDOM_SET_BY_CORE = 0x0 + NL80211_REGDOM_SET_BY_COUNTRY_IE = 0x3 + NL80211_REGDOM_SET_BY_DRIVER = 0x2 + NL80211_REGDOM_SET_BY_USER = 0x1 + NL80211_REGDOM_TYPE_COUNTRY = 0x0 + NL80211_REGDOM_TYPE_CUSTOM_WORLD = 0x2 + NL80211_REGDOM_TYPE_INTERSECTION = 0x3 + NL80211_REGDOM_TYPE_WORLD = 0x1 + NL80211_REG_RULE_ATTR_MAX = 0x7 + NL80211_REKEY_DATA_AKM = 0x4 + NL80211_REKEY_DATA_KCK = 0x2 + NL80211_REKEY_DATA_KEK = 0x1 + NL80211_REKEY_DATA_REPLAY_CTR = 0x3 + NL80211_REPLAY_CTR_LEN = 0x8 + NL80211_RRF_AUTO_BW = 0x800 + NL80211_RRF_DFS = 0x10 + NL80211_RRF_GO_CONCURRENT = 0x1000 + NL80211_RRF_IR_CONCURRENT = 0x1000 + NL80211_RRF_NO_160MHZ = 0x10000 + NL80211_RRF_NO_80MHZ = 0x8000 + NL80211_RRF_NO_CCK = 0x2 + NL80211_RRF_NO_HE = 0x20000 + NL80211_RRF_NO_HT40 = 0x6000 + NL80211_RRF_NO_HT40MINUS = 0x2000 + NL80211_RRF_NO_HT40PLUS = 0x4000 + NL80211_RRF_NO_IBSS = 0x80 + NL80211_RRF_NO_INDOOR = 0x4 + NL80211_RRF_NO_IR_ALL = 0x180 + NL80211_RRF_NO_IR = 0x80 + NL80211_RRF_NO_OFDM = 0x1 + NL80211_RRF_NO_OUTDOOR = 0x8 + NL80211_RRF_PASSIVE_SCAN = 0x80 + NL80211_RRF_PTMP_ONLY = 0x40 + NL80211_RRF_PTP_ONLY = 0x20 + NL80211_RXMGMT_FLAG_ANSWERED = 0x1 + NL80211_RXMGMT_FLAG_EXTERNAL_AUTH = 0x2 + NL80211_SAE_PWE_BOTH = 0x3 + NL80211_SAE_PWE_HASH_TO_ELEMENT = 0x2 + NL80211_SAE_PWE_HUNT_AND_PECK = 0x1 + NL80211_SAE_PWE_UNSPECIFIED = 0x0 + NL80211_SAR_ATTR_MAX = 0x2 + NL80211_SAR_ATTR_SPECS = 0x2 + NL80211_SAR_ATTR_SPECS_END_FREQ = 0x4 + NL80211_SAR_ATTR_SPECS_MAX = 0x4 + NL80211_SAR_ATTR_SPECS_POWER = 0x1 + NL80211_SAR_ATTR_SPECS_RANGE_INDEX = 0x2 + NL80211_SAR_ATTR_SPECS_START_FREQ = 0x3 + NL80211_SAR_ATTR_TYPE = 0x1 + NL80211_SAR_TYPE_POWER = 0x0 + NL80211_SCAN_FLAG_ACCEPT_BCAST_PROBE_RESP = 0x20 + NL80211_SCAN_FLAG_AP = 0x4 + NL80211_SCAN_FLAG_COLOCATED_6GHZ = 0x4000 + NL80211_SCAN_FLAG_FILS_MAX_CHANNEL_TIME = 0x10 + NL80211_SCAN_FLAG_FLUSH = 0x2 + NL80211_SCAN_FLAG_FREQ_KHZ = 0x2000 + NL80211_SCAN_FLAG_HIGH_ACCURACY = 0x400 + NL80211_SCAN_FLAG_LOW_POWER = 0x200 + NL80211_SCAN_FLAG_LOW_PRIORITY = 0x1 + NL80211_SCAN_FLAG_LOW_SPAN = 0x100 + NL80211_SCAN_FLAG_MIN_PREQ_CONTENT = 0x1000 + NL80211_SCAN_FLAG_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION = 0x80 + NL80211_SCAN_FLAG_OCE_PROBE_REQ_HIGH_TX_RATE = 0x40 + NL80211_SCAN_FLAG_RANDOM_ADDR = 0x8 + NL80211_SCAN_FLAG_RANDOM_SN = 0x800 + NL80211_SCAN_RSSI_THOLD_OFF = -0x12c + NL80211_SCHED_SCAN_MATCH_ATTR_BSSID = 0x5 + NL80211_SCHED_SCAN_MATCH_ATTR_MAX = 0x6 + NL80211_SCHED_SCAN_MATCH_ATTR_RELATIVE_RSSI = 0x3 + NL80211_SCHED_SCAN_MATCH_ATTR_RSSI_ADJUST = 0x4 + NL80211_SCHED_SCAN_MATCH_ATTR_RSSI = 0x2 + NL80211_SCHED_SCAN_MATCH_ATTR_SSID = 0x1 + NL80211_SCHED_SCAN_MATCH_PER_BAND_RSSI = 0x6 + NL80211_SCHED_SCAN_PLAN_INTERVAL = 0x1 + NL80211_SCHED_SCAN_PLAN_ITERATIONS = 0x2 + NL80211_SCHED_SCAN_PLAN_MAX = 0x2 + NL80211_SMPS_DYNAMIC = 0x2 + NL80211_SMPS_MAX = 0x2 + NL80211_SMPS_OFF = 0x0 + NL80211_SMPS_STATIC = 0x1 + NL80211_STA_BSS_PARAM_BEACON_INTERVAL = 0x5 + NL80211_STA_BSS_PARAM_CTS_PROT = 0x1 + NL80211_STA_BSS_PARAM_DTIM_PERIOD = 0x4 + NL80211_STA_BSS_PARAM_MAX = 0x5 + NL80211_STA_BSS_PARAM_SHORT_PREAMBLE = 0x2 + NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME = 0x3 + NL80211_STA_FLAG_ASSOCIATED = 0x7 + NL80211_STA_FLAG_AUTHENTICATED = 0x5 + NL80211_STA_FLAG_AUTHORIZED = 0x1 + NL80211_STA_FLAG_MAX = 0x7 + NL80211_STA_FLAG_MAX_OLD_API = 0x6 + NL80211_STA_FLAG_MFP = 0x4 + NL80211_STA_FLAG_SHORT_PREAMBLE = 0x2 + NL80211_STA_FLAG_TDLS_PEER = 0x6 + NL80211_STA_FLAG_WME = 0x3 + NL80211_STA_INFO_ACK_SIGNAL_AVG = 0x23 + NL80211_STA_INFO_ACK_SIGNAL = 0x22 + NL80211_STA_INFO_AIRTIME_LINK_METRIC = 0x29 + NL80211_STA_INFO_AIRTIME_WEIGHT = 0x28 + NL80211_STA_INFO_ASSOC_AT_BOOTTIME = 0x2a + NL80211_STA_INFO_BEACON_LOSS = 0x12 + NL80211_STA_INFO_BEACON_RX = 0x1d + NL80211_STA_INFO_BEACON_SIGNAL_AVG = 0x1e + NL80211_STA_INFO_BSS_PARAM = 0xf + NL80211_STA_INFO_CHAIN_SIGNAL_AVG = 0x1a + NL80211_STA_INFO_CHAIN_SIGNAL = 0x19 + NL80211_STA_INFO_CONNECTED_TIME = 0x10 + NL80211_STA_INFO_CONNECTED_TO_AS = 0x2b + NL80211_STA_INFO_CONNECTED_TO_GATE = 0x26 + NL80211_STA_INFO_DATA_ACK_SIGNAL_AVG = 0x23 + NL80211_STA_INFO_EXPECTED_THROUGHPUT = 0x1b + NL80211_STA_INFO_FCS_ERROR_COUNT = 0x25 + NL80211_STA_INFO_INACTIVE_TIME = 0x1 + NL80211_STA_INFO_LLID = 0x4 + NL80211_STA_INFO_LOCAL_PM = 0x14 + NL80211_STA_INFO_MAX = 0x2b + NL80211_STA_INFO_NONPEER_PM = 0x16 + NL80211_STA_INFO_PAD = 0x21 + NL80211_STA_INFO_PEER_PM = 0x15 + NL80211_STA_INFO_PLID = 0x5 + NL80211_STA_INFO_PLINK_STATE = 0x6 + NL80211_STA_INFO_RX_BITRATE = 0xe + NL80211_STA_INFO_RX_BYTES64 = 0x17 + NL80211_STA_INFO_RX_BYTES = 0x2 + NL80211_STA_INFO_RX_DROP_MISC = 0x1c + NL80211_STA_INFO_RX_DURATION = 0x20 + NL80211_STA_INFO_RX_MPDUS = 0x24 + NL80211_STA_INFO_RX_PACKETS = 0x9 + NL80211_STA_INFO_SIGNAL_AVG = 0xd + NL80211_STA_INFO_SIGNAL = 0x7 + NL80211_STA_INFO_STA_FLAGS = 0x11 + NL80211_STA_INFO_TID_STATS = 0x1f + NL80211_STA_INFO_T_OFFSET = 0x13 + NL80211_STA_INFO_TX_BITRATE = 0x8 + NL80211_STA_INFO_TX_BYTES64 = 0x18 + NL80211_STA_INFO_TX_BYTES = 0x3 + NL80211_STA_INFO_TX_DURATION = 0x27 + NL80211_STA_INFO_TX_FAILED = 0xc + NL80211_STA_INFO_TX_PACKETS = 0xa + NL80211_STA_INFO_TX_RETRIES = 0xb + NL80211_STA_WME_MAX = 0x2 + NL80211_STA_WME_MAX_SP = 0x2 + NL80211_STA_WME_UAPSD_QUEUES = 0x1 + NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY = 0x5 + NL80211_SURVEY_INFO_CHANNEL_TIME = 0x4 + NL80211_SURVEY_INFO_CHANNEL_TIME_EXT_BUSY = 0x6 + NL80211_SURVEY_INFO_CHANNEL_TIME_RX = 0x7 + NL80211_SURVEY_INFO_CHANNEL_TIME_TX = 0x8 + NL80211_SURVEY_INFO_FREQUENCY = 0x1 + NL80211_SURVEY_INFO_FREQUENCY_OFFSET = 0xc + NL80211_SURVEY_INFO_IN_USE = 0x3 + NL80211_SURVEY_INFO_MAX = 0xc + NL80211_SURVEY_INFO_NOISE = 0x2 + NL80211_SURVEY_INFO_PAD = 0xa + NL80211_SURVEY_INFO_TIME_BSS_RX = 0xb + NL80211_SURVEY_INFO_TIME_BUSY = 0x5 + NL80211_SURVEY_INFO_TIME = 0x4 + NL80211_SURVEY_INFO_TIME_EXT_BUSY = 0x6 + NL80211_SURVEY_INFO_TIME_RX = 0x7 + NL80211_SURVEY_INFO_TIME_SCAN = 0x9 + NL80211_SURVEY_INFO_TIME_TX = 0x8 + NL80211_TDLS_DISABLE_LINK = 0x4 + NL80211_TDLS_DISCOVERY_REQ = 0x0 + NL80211_TDLS_ENABLE_LINK = 0x3 + NL80211_TDLS_PEER_HE = 0x8 + NL80211_TDLS_PEER_HT = 0x1 + NL80211_TDLS_PEER_VHT = 0x2 + NL80211_TDLS_PEER_WMM = 0x4 + NL80211_TDLS_SETUP = 0x1 + NL80211_TDLS_TEARDOWN = 0x2 + NL80211_TID_CONFIG_ATTR_AMPDU_CTRL = 0x9 + NL80211_TID_CONFIG_ATTR_AMSDU_CTRL = 0xb + NL80211_TID_CONFIG_ATTR_MAX = 0xd + NL80211_TID_CONFIG_ATTR_NOACK = 0x6 + NL80211_TID_CONFIG_ATTR_OVERRIDE = 0x4 + NL80211_TID_CONFIG_ATTR_PAD = 0x1 + NL80211_TID_CONFIG_ATTR_PEER_SUPP = 0x3 + NL80211_TID_CONFIG_ATTR_RETRY_LONG = 0x8 + NL80211_TID_CONFIG_ATTR_RETRY_SHORT = 0x7 + NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL = 0xa + NL80211_TID_CONFIG_ATTR_TIDS = 0x5 + NL80211_TID_CONFIG_ATTR_TX_RATE = 0xd + NL80211_TID_CONFIG_ATTR_TX_RATE_TYPE = 0xc + NL80211_TID_CONFIG_ATTR_VIF_SUPP = 0x2 + NL80211_TID_CONFIG_DISABLE = 0x1 + NL80211_TID_CONFIG_ENABLE = 0x0 + NL80211_TID_STATS_MAX = 0x6 + NL80211_TID_STATS_PAD = 0x5 + NL80211_TID_STATS_RX_MSDU = 0x1 + NL80211_TID_STATS_TX_MSDU = 0x2 + NL80211_TID_STATS_TX_MSDU_FAILED = 0x4 + NL80211_TID_STATS_TX_MSDU_RETRIES = 0x3 + NL80211_TID_STATS_TXQ_STATS = 0x6 + NL80211_TIMEOUT_ASSOC = 0x3 + NL80211_TIMEOUT_AUTH = 0x2 + NL80211_TIMEOUT_SCAN = 0x1 + NL80211_TIMEOUT_UNSPECIFIED = 0x0 + NL80211_TKIP_DATA_OFFSET_ENCR_KEY = 0x0 + NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY = 0x18 + NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY = 0x10 + NL80211_TX_POWER_AUTOMATIC = 0x0 + NL80211_TX_POWER_FIXED = 0x2 + NL80211_TX_POWER_LIMITED = 0x1 + NL80211_TXQ_ATTR_AC = 0x1 + NL80211_TXQ_ATTR_AIFS = 0x5 + NL80211_TXQ_ATTR_CWMAX = 0x4 + NL80211_TXQ_ATTR_CWMIN = 0x3 + NL80211_TXQ_ATTR_MAX = 0x5 + NL80211_TXQ_ATTR_QUEUE = 0x1 + NL80211_TXQ_ATTR_TXOP = 0x2 + NL80211_TXQ_Q_BE = 0x2 + NL80211_TXQ_Q_BK = 0x3 + NL80211_TXQ_Q_VI = 0x1 + NL80211_TXQ_Q_VO = 0x0 + NL80211_TXQ_STATS_BACKLOG_BYTES = 0x1 + NL80211_TXQ_STATS_BACKLOG_PACKETS = 0x2 + NL80211_TXQ_STATS_COLLISIONS = 0x8 + NL80211_TXQ_STATS_DROPS = 0x4 + NL80211_TXQ_STATS_ECN_MARKS = 0x5 + NL80211_TXQ_STATS_FLOWS = 0x3 + NL80211_TXQ_STATS_MAX = 0xb + NL80211_TXQ_STATS_MAX_FLOWS = 0xb + NL80211_TXQ_STATS_OVERLIMIT = 0x6 + NL80211_TXQ_STATS_OVERMEMORY = 0x7 + NL80211_TXQ_STATS_TX_BYTES = 0x9 + NL80211_TXQ_STATS_TX_PACKETS = 0xa + NL80211_TX_RATE_AUTOMATIC = 0x0 + NL80211_TXRATE_DEFAULT_GI = 0x0 + NL80211_TX_RATE_FIXED = 0x2 + NL80211_TXRATE_FORCE_LGI = 0x2 + NL80211_TXRATE_FORCE_SGI = 0x1 + NL80211_TXRATE_GI = 0x4 + NL80211_TXRATE_HE = 0x5 + NL80211_TXRATE_HE_GI = 0x6 + NL80211_TXRATE_HE_LTF = 0x7 + NL80211_TXRATE_HT = 0x2 + NL80211_TXRATE_LEGACY = 0x1 + NL80211_TX_RATE_LIMITED = 0x1 + NL80211_TXRATE_MAX = 0x7 + NL80211_TXRATE_MCS = 0x2 + NL80211_TXRATE_VHT = 0x3 + NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_INT = 0x1 + NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_MAX = 0x2 + NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_TMPL = 0x2 + NL80211_USER_REG_HINT_CELL_BASE = 0x1 + NL80211_USER_REG_HINT_INDOOR = 0x2 + NL80211_USER_REG_HINT_USER = 0x0 + NL80211_VENDOR_ID_IS_LINUX = 0x80000000 + NL80211_VHT_CAPABILITY_LEN = 0xc + NL80211_VHT_NSS_MAX = 0x8 + NL80211_WIPHY_NAME_MAXLEN = 0x40 + NL80211_WMMR_AIFSN = 0x3 + NL80211_WMMR_CW_MAX = 0x2 + NL80211_WMMR_CW_MIN = 0x1 + NL80211_WMMR_MAX = 0x4 + NL80211_WMMR_TXOP = 0x4 + NL80211_WOWLAN_PKTPAT_MASK = 0x1 + NL80211_WOWLAN_PKTPAT_OFFSET = 0x3 + NL80211_WOWLAN_PKTPAT_PATTERN = 0x2 + NL80211_WOWLAN_TCP_DATA_INTERVAL = 0x9 + NL80211_WOWLAN_TCP_DATA_PAYLOAD = 0x6 + NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ = 0x7 + NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN = 0x8 + NL80211_WOWLAN_TCP_DST_IPV4 = 0x2 + NL80211_WOWLAN_TCP_DST_MAC = 0x3 + NL80211_WOWLAN_TCP_DST_PORT = 0x5 + NL80211_WOWLAN_TCP_SRC_IPV4 = 0x1 + NL80211_WOWLAN_TCP_SRC_PORT = 0x4 + NL80211_WOWLAN_TCP_WAKE_MASK = 0xb + NL80211_WOWLAN_TCP_WAKE_PAYLOAD = 0xa + NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE = 0x8 + NL80211_WOWLAN_TRIG_ANY = 0x1 + NL80211_WOWLAN_TRIG_DISCONNECT = 0x2 + NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST = 0x7 + NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE = 0x6 + NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED = 0x5 + NL80211_WOWLAN_TRIG_MAGIC_PKT = 0x3 + NL80211_WOWLAN_TRIG_NET_DETECT = 0x12 + NL80211_WOWLAN_TRIG_NET_DETECT_RESULTS = 0x13 + NL80211_WOWLAN_TRIG_PKT_PATTERN = 0x4 + NL80211_WOWLAN_TRIG_RFKILL_RELEASE = 0x9 + NL80211_WOWLAN_TRIG_TCP_CONNECTION = 0xe + NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211 = 0xa + NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN = 0xb + NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023 = 0xc + NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023_LEN = 0xd + NL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST = 0x10 + NL80211_WOWLAN_TRIG_WAKEUP_TCP_MATCH = 0xf + NL80211_WOWLAN_TRIG_WAKEUP_TCP_NOMORETOKENS = 0x11 + NL80211_WPA_VERSION_1 = 0x1 + NL80211_WPA_VERSION_2 = 0x2 + NL80211_WPA_VERSION_3 = 0x4 +) + +const ( + FRA_UNSPEC = 0x0 + FRA_DST = 0x1 + FRA_SRC = 0x2 + FRA_IIFNAME = 0x3 + FRA_GOTO = 0x4 + FRA_UNUSED2 = 0x5 + FRA_PRIORITY = 0x6 + FRA_UNUSED3 = 0x7 + FRA_UNUSED4 = 0x8 + FRA_UNUSED5 = 0x9 + FRA_FWMARK = 0xa + FRA_FLOW = 0xb + FRA_TUN_ID = 0xc + FRA_SUPPRESS_IFGROUP = 0xd + FRA_SUPPRESS_PREFIXLEN = 0xe + FRA_TABLE = 0xf + FRA_FWMASK = 0x10 + FRA_OIFNAME = 0x11 + FRA_PAD = 0x12 + FRA_L3MDEV = 0x13 + FRA_UID_RANGE = 0x14 + FRA_PROTOCOL = 0x15 + FRA_IP_PROTO = 0x16 + FRA_SPORT_RANGE = 0x17 + FRA_DPORT_RANGE = 0x18 + FR_ACT_UNSPEC = 0x0 + FR_ACT_TO_TBL = 0x1 + FR_ACT_GOTO = 0x2 + FR_ACT_NOP = 0x3 + FR_ACT_RES3 = 0x4 + FR_ACT_RES4 = 0x5 + FR_ACT_BLACKHOLE = 0x6 + FR_ACT_UNREACHABLE = 0x7 + FR_ACT_PROHIBIT = 0x8 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go new file mode 100644 index 0000000..5314092 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -0,0 +1,683 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 /build/unix/linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build 386 && linux +// +build 386,linux + +package unix + +const ( + SizeofPtr = 0x4 + SizeofLong = 0x4 +) + +type ( + _C_long int32 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timex struct { + Modes uint32 + Offset int32 + Freq int32 + Maxerror int32 + Esterror int32 + Status int32 + Constant int32 + Precision int32 + Tolerance int32 + Time Timeval + Tick int32 + Ppsfreq int32 + Jitter int32 + Shift int32 + Stabil int32 + Jitcnt int32 + Calcnt int32 + Errcnt int32 + Stbcnt int32 + Tai int32 + _ [44]byte +} + +type Time_t int32 + +type Tms struct { + Utime int32 + Stime int32 + Cutime int32 + Cstime int32 +} + +type Utimbuf struct { + Actime int32 + Modtime int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Stat_t struct { + Dev uint64 + _ uint16 + _ uint32 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + _ uint16 + Size int64 + Blksize int32 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Ino uint64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [1]byte +} + +type Flock_t struct { + Type int16 + Whence int16 + Start int64 + Len int64 + Pid int32 +} + +type DmNameList struct { + Dev uint64 + Next uint32 +} + +const ( + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint32 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +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 +} + +type ifreq struct { + Ifrn [16]byte + Ifru [16]byte +} + +const ( + SizeofSockaddrNFCLLCP = 0x58 + SizeofIovec = 0x8 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc +) + +const ( + SizeofSockFprog = 0x8 +) + +type PtraceRegs struct { + Ebx int32 + Ecx int32 + Edx int32 + Esi int32 + Edi int32 + Ebp int32 + Eax int32 + Xds int32 + Xes int32 + Xfs int32 + Xgs int32 + Orig_eax int32 + Eip int32 + Xcs int32 + Eflags int32 + Esp int32 + Xss int32 +} + +type FdSet struct { + Bits [32]int32 +} + +type Sysinfo_t struct { + Uptime int32 + Loads [3]uint32 + Totalram uint32 + Freeram uint32 + Sharedram uint32 + Bufferram uint32 + Totalswap uint32 + Freeswap uint32 + Procs uint16 + Pad uint16 + Totalhigh uint32 + Freehigh uint32 + Unit uint32 + _ [8]int8 +} + +type Ustat_t struct { + Tfree int32 + Tinode uint32 + Fname [6]int8 + Fpack [6]int8 +} + +type EpollEvent struct { + Events uint32 + Fd int32 + Pad int32 +} + +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + +const ( + POLLRDHUP = 0x2000 +) + +type Sigset_t struct { + Val [32]uint32 +} + +const _C__NSIG = 0x41 + +type Siginfo struct { + Signo int32 + Errno int32 + Code int32 + _ [116]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Taskstats struct { + Version uint16 + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [4]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 + Thrashing_count uint64 + Thrashing_delay_total uint64 + Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 +} + +type cpuMask uint32 + +const ( + _NCPUBITS = 0x20 +) + +const ( + CBitFieldMaskBit0 = 0x1 + CBitFieldMaskBit1 = 0x2 + CBitFieldMaskBit2 = 0x4 + CBitFieldMaskBit3 = 0x8 + CBitFieldMaskBit4 = 0x10 + CBitFieldMaskBit5 = 0x20 + CBitFieldMaskBit6 = 0x40 + CBitFieldMaskBit7 = 0x80 + CBitFieldMaskBit8 = 0x100 + CBitFieldMaskBit9 = 0x200 + CBitFieldMaskBit10 = 0x400 + CBitFieldMaskBit11 = 0x800 + CBitFieldMaskBit12 = 0x1000 + CBitFieldMaskBit13 = 0x2000 + CBitFieldMaskBit14 = 0x4000 + CBitFieldMaskBit15 = 0x8000 + CBitFieldMaskBit16 = 0x10000 + CBitFieldMaskBit17 = 0x20000 + CBitFieldMaskBit18 = 0x40000 + CBitFieldMaskBit19 = 0x80000 + CBitFieldMaskBit20 = 0x100000 + CBitFieldMaskBit21 = 0x200000 + CBitFieldMaskBit22 = 0x400000 + CBitFieldMaskBit23 = 0x800000 + CBitFieldMaskBit24 = 0x1000000 + CBitFieldMaskBit25 = 0x2000000 + CBitFieldMaskBit26 = 0x4000000 + CBitFieldMaskBit27 = 0x8000000 + CBitFieldMaskBit28 = 0x10000000 + CBitFieldMaskBit29 = 0x20000000 + CBitFieldMaskBit30 = 0x40000000 + CBitFieldMaskBit31 = 0x80000000 + CBitFieldMaskBit32 = 0x100000000 + CBitFieldMaskBit33 = 0x200000000 + CBitFieldMaskBit34 = 0x400000000 + CBitFieldMaskBit35 = 0x800000000 + CBitFieldMaskBit36 = 0x1000000000 + CBitFieldMaskBit37 = 0x2000000000 + CBitFieldMaskBit38 = 0x4000000000 + CBitFieldMaskBit39 = 0x8000000000 + CBitFieldMaskBit40 = 0x10000000000 + CBitFieldMaskBit41 = 0x20000000000 + CBitFieldMaskBit42 = 0x40000000000 + CBitFieldMaskBit43 = 0x80000000000 + CBitFieldMaskBit44 = 0x100000000000 + CBitFieldMaskBit45 = 0x200000000000 + CBitFieldMaskBit46 = 0x400000000000 + CBitFieldMaskBit47 = 0x800000000000 + CBitFieldMaskBit48 = 0x1000000000000 + CBitFieldMaskBit49 = 0x2000000000000 + CBitFieldMaskBit50 = 0x4000000000000 + CBitFieldMaskBit51 = 0x8000000000000 + CBitFieldMaskBit52 = 0x10000000000000 + CBitFieldMaskBit53 = 0x20000000000000 + CBitFieldMaskBit54 = 0x40000000000000 + CBitFieldMaskBit55 = 0x80000000000000 + CBitFieldMaskBit56 = 0x100000000000000 + CBitFieldMaskBit57 = 0x200000000000000 + CBitFieldMaskBit58 = 0x400000000000000 + CBitFieldMaskBit59 = 0x800000000000000 + CBitFieldMaskBit60 = 0x1000000000000000 + CBitFieldMaskBit61 = 0x2000000000000000 + CBitFieldMaskBit62 = 0x4000000000000000 + CBitFieldMaskBit63 = 0x8000000000000000 +) + +type SockaddrStorage struct { + Family uint16 + _ [122]int8 + _ uint32 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + Start uint32 +} + +type Statfs_t struct { + Type int32 + Bsize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int32 + Frsize int32 + Flags int32 + Spare [4]int32 +} + +type TpacketHdr struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 +} + +const ( + SizeofTpacketHdr = 0x18 +) + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int32 +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 +} + +const ( + BLKPG = 0x1269 +) + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 + Flags uint32 +} + +type CryptoUserAlg struct { + Name [64]int8 + Driver_name [64]int8 + Module_name [64]int8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]int8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]int8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]int8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]int8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]int8 +} + +type CryptoReportLarval struct { + Type [64]int8 +} + +type CryptoReportHash struct { + Type [64]int8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]int8 +} + +type CryptoReportRNG struct { + Type [64]int8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]int8 +} + +type CryptoReportKPP struct { + Type [64]int8 +} + +type CryptoReportAcomp struct { + Type [64]int8 +} + +type LoopInfo struct { + Number int32 + Device uint16 + Inode uint32 + Rdevice uint16 + Offset int32 + Encrypt_type int32 + Encrypt_key_size int32 + Flags int32 + Name [64]int8 + Encrypt_key [32]uint8 + Init [2]uint32 + Reserved [4]int8 +} + +type TIPCSubscr struct { + Seq TIPCServiceRange + Timeout uint32 + Filter uint32 + Handle [8]int8 +} + +type TIPCSIOCLNReq struct { + Peer uint32 + Id uint32 + Linkname [68]int8 +} + +type TIPCSIOCNodeIDReq struct { + Peer uint32 + Id [16]int8 +} + +type PPSKInfo struct { + Assert_sequence uint32 + Clear_sequence uint32 + Assert_tu PPSKTime + Clear_tu PPSKTime + Current_mode int32 +} + +const ( + PPS_GETPARAMS = 0x800470a1 + PPS_SETPARAMS = 0x400470a2 + PPS_GETCAP = 0x800470a3 + PPS_FETCH = 0xc00470a4 +) + +const ( + PIDFD_NONBLOCK = 0x800 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint16 + _ [2]uint8 + Seq uint16 + _ uint16 + _ uint32 + _ uint32 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint32 + Atime uint32 + Atime_high uint32 + Dtime uint32 + Dtime_high uint32 + Ctime uint32 + Ctime_high uint32 + Cpid int32 + Lpid int32 + Nattch uint32 + _ uint32 + _ 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 new file mode 100644 index 0000000..b02ab83 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -0,0 +1,699 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 /build/unix/linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build amd64 && linux +// +build amd64,linux + +package unix + +const ( + SizeofPtr = 0x8 + SizeofLong = 0x8 +) + +type ( + _C_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + _ [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint32 + Uid uint32 + Gid uint32 + _ int32 + Rdev uint64 + Size int64 + Blksize int64 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + _ [3]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte +} + +type Flock_t struct { + Type int16 + Whence int16 + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type DmNameList struct { + Dev uint64 + Next uint32 + Name [0]byte + _ [4]byte +} + +const ( + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint64 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type ifreq struct { + Ifrn [16]byte + Ifru [24]byte +} + +const ( + SizeofSockaddrNFCLLCP = 0x60 + SizeofIovec = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 +) + +const ( + SizeofSockFprog = 0x10 +) + +type PtraceRegs struct { + R15 uint64 + R14 uint64 + R13 uint64 + R12 uint64 + Rbp uint64 + Rbx uint64 + R11 uint64 + R10 uint64 + R9 uint64 + R8 uint64 + Rax uint64 + Rcx uint64 + Rdx uint64 + Rsi uint64 + Rdi uint64 + Orig_rax uint64 + Rip uint64 + Cs uint64 + Eflags uint64 + Rsp uint64 + Ss uint64 + Fs_base uint64 + Gs_base uint64 + Ds uint64 + Es uint64 + Fs uint64 + Gs uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + _ [0]int8 + _ [4]byte +} + +type Ustat_t struct { + Tfree int32 + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + _ [4]byte +} + +type EpollEvent struct { + Events uint32 + Fd int32 + Pad int32 +} + +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + +const ( + POLLRDHUP = 0x2000 +) + +type Sigset_t struct { + Val [16]uint64 +} + +const _C__NSIG = 0x41 + +type Siginfo struct { + Signo int32 + Errno int32 + Code int32 + _ int32 + _ [112]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Taskstats struct { + Version uint16 + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 + Thrashing_count uint64 + Thrashing_delay_total uint64 + Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 +} + +type cpuMask uint64 + +const ( + _NCPUBITS = 0x40 +) + +const ( + CBitFieldMaskBit0 = 0x1 + CBitFieldMaskBit1 = 0x2 + CBitFieldMaskBit2 = 0x4 + CBitFieldMaskBit3 = 0x8 + CBitFieldMaskBit4 = 0x10 + CBitFieldMaskBit5 = 0x20 + CBitFieldMaskBit6 = 0x40 + CBitFieldMaskBit7 = 0x80 + CBitFieldMaskBit8 = 0x100 + CBitFieldMaskBit9 = 0x200 + CBitFieldMaskBit10 = 0x400 + CBitFieldMaskBit11 = 0x800 + CBitFieldMaskBit12 = 0x1000 + CBitFieldMaskBit13 = 0x2000 + CBitFieldMaskBit14 = 0x4000 + CBitFieldMaskBit15 = 0x8000 + CBitFieldMaskBit16 = 0x10000 + CBitFieldMaskBit17 = 0x20000 + CBitFieldMaskBit18 = 0x40000 + CBitFieldMaskBit19 = 0x80000 + CBitFieldMaskBit20 = 0x100000 + CBitFieldMaskBit21 = 0x200000 + CBitFieldMaskBit22 = 0x400000 + CBitFieldMaskBit23 = 0x800000 + CBitFieldMaskBit24 = 0x1000000 + CBitFieldMaskBit25 = 0x2000000 + CBitFieldMaskBit26 = 0x4000000 + CBitFieldMaskBit27 = 0x8000000 + CBitFieldMaskBit28 = 0x10000000 + CBitFieldMaskBit29 = 0x20000000 + CBitFieldMaskBit30 = 0x40000000 + CBitFieldMaskBit31 = 0x80000000 + CBitFieldMaskBit32 = 0x100000000 + CBitFieldMaskBit33 = 0x200000000 + CBitFieldMaskBit34 = 0x400000000 + CBitFieldMaskBit35 = 0x800000000 + CBitFieldMaskBit36 = 0x1000000000 + CBitFieldMaskBit37 = 0x2000000000 + CBitFieldMaskBit38 = 0x4000000000 + CBitFieldMaskBit39 = 0x8000000000 + CBitFieldMaskBit40 = 0x10000000000 + CBitFieldMaskBit41 = 0x20000000000 + CBitFieldMaskBit42 = 0x40000000000 + CBitFieldMaskBit43 = 0x80000000000 + CBitFieldMaskBit44 = 0x100000000000 + CBitFieldMaskBit45 = 0x200000000000 + CBitFieldMaskBit46 = 0x400000000000 + CBitFieldMaskBit47 = 0x800000000000 + CBitFieldMaskBit48 = 0x1000000000000 + CBitFieldMaskBit49 = 0x2000000000000 + CBitFieldMaskBit50 = 0x4000000000000 + CBitFieldMaskBit51 = 0x8000000000000 + CBitFieldMaskBit52 = 0x10000000000000 + CBitFieldMaskBit53 = 0x20000000000000 + CBitFieldMaskBit54 = 0x40000000000000 + CBitFieldMaskBit55 = 0x80000000000000 + CBitFieldMaskBit56 = 0x100000000000000 + CBitFieldMaskBit57 = 0x200000000000000 + CBitFieldMaskBit58 = 0x400000000000000 + CBitFieldMaskBit59 = 0x800000000000000 + CBitFieldMaskBit60 = 0x1000000000000000 + CBitFieldMaskBit61 = 0x2000000000000000 + CBitFieldMaskBit62 = 0x4000000000000000 + CBitFieldMaskBit63 = 0x8000000000000000 +) + +type SockaddrStorage struct { + Family uint16 + _ [118]int8 + _ uint64 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + Start uint64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +type TpacketHdr struct { + Status uint64 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 + _ [4]byte +} + +const ( + SizeofTpacketHdr = 0x20 +) + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int64 +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x1269 +) + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 + Flags uint32 + _ [4]byte +} + +type CryptoUserAlg struct { + Name [64]int8 + Driver_name [64]int8 + Module_name [64]int8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]int8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]int8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]int8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]int8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]int8 +} + +type CryptoReportLarval struct { + Type [64]int8 +} + +type CryptoReportHash struct { + Type [64]int8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]int8 +} + +type CryptoReportRNG struct { + Type [64]int8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]int8 +} + +type CryptoReportKPP struct { + Type [64]int8 +} + +type CryptoReportAcomp struct { + Type [64]int8 +} + +type LoopInfo struct { + Number int32 + Device uint64 + Inode uint64 + Rdevice uint64 + Offset int32 + Encrypt_type int32 + Encrypt_key_size int32 + Flags int32 + Name [64]int8 + Encrypt_key [32]uint8 + Init [2]uint64 + Reserved [4]int8 + _ [4]byte +} + +type TIPCSubscr struct { + Seq TIPCServiceRange + Timeout uint32 + Filter uint32 + Handle [8]int8 +} + +type TIPCSIOCLNReq struct { + Peer uint32 + Id uint32 + Linkname [68]int8 +} + +type TIPCSIOCNodeIDReq struct { + Peer uint32 + Id [16]int8 +} + +type PPSKInfo struct { + Assert_sequence uint32 + Clear_sequence uint32 + Assert_tu PPSKTime + Clear_tu PPSKTime + Current_mode int32 + _ [4]byte +} + +const ( + PPS_GETPARAMS = 0x800870a1 + PPS_SETPARAMS = 0x400870a2 + PPS_GETCAP = 0x800870a3 + PPS_FETCH = 0xc00870a4 +) + +const ( + PIDFD_NONBLOCK = 0x800 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + _ [0]uint8 + Seq uint16 + _ uint16 + _ uint64 + _ uint64 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint64 + Atime int64 + Dtime int64 + Ctime int64 + Cpid int32 + Lpid int32 + Nattch uint64 + _ uint64 + _ 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 new file mode 100644 index 0000000..9e6871d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -0,0 +1,678 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm && linux +// +build arm,linux + +package unix + +const ( + SizeofPtr = 0x4 + SizeofLong = 0x4 +) + +type ( + _C_long int32 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timex struct { + Modes uint32 + Offset int32 + Freq int32 + Maxerror int32 + Esterror int32 + Status int32 + Constant int32 + Precision int32 + Tolerance int32 + Time Timeval + Tick int32 + Ppsfreq int32 + Jitter int32 + Shift int32 + Stabil int32 + Jitcnt int32 + Calcnt int32 + Errcnt int32 + Stbcnt int32 + Tai int32 + _ [44]byte +} + +type Time_t int32 + +type Tms struct { + Utime int32 + Stime int32 + Cutime int32 + Cstime int32 +} + +type Utimbuf struct { + Actime int32 + Modtime int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Stat_t struct { + Dev uint64 + _ uint16 + _ uint32 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + _ uint16 + _ [4]byte + Size int64 + Blksize int32 + _ [4]byte + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Ino uint64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]uint8 + _ [5]byte +} + +type Flock_t struct { + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type DmNameList struct { + Dev uint64 + Next uint32 + Name [0]byte + _ [4]byte +} + +const ( + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint32 +} + +type RawSockaddr struct { + Family uint16 + Data [14]uint8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]uint8 +} + +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 +} + +type ifreq struct { + Ifrn [16]byte + Ifru [16]byte +} + +const ( + SizeofSockaddrNFCLLCP = 0x58 + SizeofIovec = 0x8 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc +) + +const ( + SizeofSockFprog = 0x8 +) + +type PtraceRegs struct { + Uregs [18]uint32 +} + +type FdSet struct { + Bits [32]int32 +} + +type Sysinfo_t struct { + Uptime int32 + Loads [3]uint32 + Totalram uint32 + Freeram uint32 + Sharedram uint32 + Bufferram uint32 + Totalswap uint32 + Freeswap uint32 + Procs uint16 + Pad uint16 + Totalhigh uint32 + Freehigh uint32 + Unit uint32 + _ [8]uint8 +} + +type Ustat_t struct { + Tfree int32 + Tinode uint32 + Fname [6]uint8 + Fpack [6]uint8 +} + +type EpollEvent struct { + Events uint32 + PadFd int32 + Fd int32 + Pad int32 +} + +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + +const ( + POLLRDHUP = 0x2000 +) + +type Sigset_t struct { + Val [32]uint32 +} + +const _C__NSIG = 0x41 + +type Siginfo struct { + Signo int32 + Errno int32 + Code int32 + _ [116]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Taskstats struct { + Version uint16 + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [4]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]uint8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 + Thrashing_count uint64 + Thrashing_delay_total uint64 + Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 +} + +type cpuMask uint32 + +const ( + _NCPUBITS = 0x20 +) + +const ( + CBitFieldMaskBit0 = 0x1 + CBitFieldMaskBit1 = 0x2 + CBitFieldMaskBit2 = 0x4 + CBitFieldMaskBit3 = 0x8 + CBitFieldMaskBit4 = 0x10 + CBitFieldMaskBit5 = 0x20 + CBitFieldMaskBit6 = 0x40 + CBitFieldMaskBit7 = 0x80 + CBitFieldMaskBit8 = 0x100 + CBitFieldMaskBit9 = 0x200 + CBitFieldMaskBit10 = 0x400 + CBitFieldMaskBit11 = 0x800 + CBitFieldMaskBit12 = 0x1000 + CBitFieldMaskBit13 = 0x2000 + CBitFieldMaskBit14 = 0x4000 + CBitFieldMaskBit15 = 0x8000 + CBitFieldMaskBit16 = 0x10000 + CBitFieldMaskBit17 = 0x20000 + CBitFieldMaskBit18 = 0x40000 + CBitFieldMaskBit19 = 0x80000 + CBitFieldMaskBit20 = 0x100000 + CBitFieldMaskBit21 = 0x200000 + CBitFieldMaskBit22 = 0x400000 + CBitFieldMaskBit23 = 0x800000 + CBitFieldMaskBit24 = 0x1000000 + CBitFieldMaskBit25 = 0x2000000 + CBitFieldMaskBit26 = 0x4000000 + CBitFieldMaskBit27 = 0x8000000 + CBitFieldMaskBit28 = 0x10000000 + CBitFieldMaskBit29 = 0x20000000 + CBitFieldMaskBit30 = 0x40000000 + CBitFieldMaskBit31 = 0x80000000 + CBitFieldMaskBit32 = 0x100000000 + CBitFieldMaskBit33 = 0x200000000 + CBitFieldMaskBit34 = 0x400000000 + CBitFieldMaskBit35 = 0x800000000 + CBitFieldMaskBit36 = 0x1000000000 + CBitFieldMaskBit37 = 0x2000000000 + CBitFieldMaskBit38 = 0x4000000000 + CBitFieldMaskBit39 = 0x8000000000 + CBitFieldMaskBit40 = 0x10000000000 + CBitFieldMaskBit41 = 0x20000000000 + CBitFieldMaskBit42 = 0x40000000000 + CBitFieldMaskBit43 = 0x80000000000 + CBitFieldMaskBit44 = 0x100000000000 + CBitFieldMaskBit45 = 0x200000000000 + CBitFieldMaskBit46 = 0x400000000000 + CBitFieldMaskBit47 = 0x800000000000 + CBitFieldMaskBit48 = 0x1000000000000 + CBitFieldMaskBit49 = 0x2000000000000 + CBitFieldMaskBit50 = 0x4000000000000 + CBitFieldMaskBit51 = 0x8000000000000 + CBitFieldMaskBit52 = 0x10000000000000 + CBitFieldMaskBit53 = 0x20000000000000 + CBitFieldMaskBit54 = 0x40000000000000 + CBitFieldMaskBit55 = 0x80000000000000 + CBitFieldMaskBit56 = 0x100000000000000 + CBitFieldMaskBit57 = 0x200000000000000 + CBitFieldMaskBit58 = 0x400000000000000 + CBitFieldMaskBit59 = 0x800000000000000 + CBitFieldMaskBit60 = 0x1000000000000000 + CBitFieldMaskBit61 = 0x2000000000000000 + CBitFieldMaskBit62 = 0x4000000000000000 + CBitFieldMaskBit63 = 0x8000000000000000 +) + +type SockaddrStorage struct { + Family uint16 + _ [122]uint8 + _ uint32 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + Start uint32 +} + +type Statfs_t struct { + Type int32 + Bsize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int32 + Frsize int32 + Flags int32 + Spare [4]int32 + _ [4]byte +} + +type TpacketHdr struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 +} + +const ( + SizeofTpacketHdr = 0x18 +) + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int32 +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x1269 +) + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 + Flags uint32 + _ [4]byte +} + +type CryptoUserAlg struct { + Name [64]uint8 + Driver_name [64]uint8 + Module_name [64]uint8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]uint8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]uint8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]uint8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]uint8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]uint8 +} + +type CryptoReportLarval struct { + Type [64]uint8 +} + +type CryptoReportHash struct { + Type [64]uint8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]uint8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]uint8 + Geniv [64]uint8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]uint8 + Geniv [64]uint8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]uint8 +} + +type CryptoReportRNG struct { + Type [64]uint8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]uint8 +} + +type CryptoReportKPP struct { + Type [64]uint8 +} + +type CryptoReportAcomp struct { + Type [64]uint8 +} + +type LoopInfo struct { + Number int32 + Device uint16 + Inode uint32 + Rdevice uint16 + Offset int32 + Encrypt_type int32 + Encrypt_key_size int32 + Flags int32 + Name [64]uint8 + Encrypt_key [32]uint8 + Init [2]uint32 + Reserved [4]uint8 +} + +type TIPCSubscr struct { + Seq TIPCServiceRange + Timeout uint32 + Filter uint32 + Handle [8]uint8 +} + +type TIPCSIOCLNReq struct { + Peer uint32 + Id uint32 + Linkname [68]uint8 +} + +type TIPCSIOCNodeIDReq struct { + Peer uint32 + Id [16]uint8 +} + +type PPSKInfo struct { + Assert_sequence uint32 + Clear_sequence uint32 + Assert_tu PPSKTime + Clear_tu PPSKTime + Current_mode int32 + _ [4]byte +} + +const ( + PPS_GETPARAMS = 0x800470a1 + PPS_SETPARAMS = 0x400470a2 + PPS_GETCAP = 0x800470a3 + PPS_FETCH = 0xc00470a4 +) + +const ( + PIDFD_NONBLOCK = 0x800 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint16 + _ [2]uint8 + Seq uint16 + _ uint16 + _ uint32 + _ uint32 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint32 + Atime uint32 + Atime_high uint32 + Dtime uint32 + Dtime_high uint32 + Ctime uint32 + Ctime_high uint32 + Cpid int32 + Lpid int32 + Nattch uint32 + _ uint32 + _ 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 new file mode 100644 index 0000000..b732d12 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -0,0 +1,678 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm64 && linux +// +build arm64,linux + +package unix + +const ( + SizeofPtr = 0x8 + SizeofLong = 0x8 +) + +type ( + _C_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + _ [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Stat_t struct { + Dev uint64 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + _ uint64 + Size int64 + Blksize int32 + _ int32 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + _ [2]int32 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte +} + +type Flock_t struct { + Type int16 + Whence int16 + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type DmNameList struct { + Dev uint64 + Next uint32 + Name [0]byte + _ [4]byte +} + +const ( + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint64 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type ifreq struct { + Ifrn [16]byte + Ifru [24]byte +} + +const ( + SizeofSockaddrNFCLLCP = 0x60 + SizeofIovec = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 +) + +const ( + SizeofSockFprog = 0x10 +) + +type PtraceRegs struct { + Regs [31]uint64 + Sp uint64 + Pc uint64 + Pstate uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + _ [0]int8 + _ [4]byte +} + +type Ustat_t struct { + Tfree int32 + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + _ [4]byte +} + +type EpollEvent struct { + Events uint32 + PadFd int32 + Fd int32 + Pad int32 +} + +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + +const ( + POLLRDHUP = 0x2000 +) + +type Sigset_t struct { + Val [16]uint64 +} + +const _C__NSIG = 0x41 + +type Siginfo struct { + Signo int32 + Errno int32 + Code int32 + _ int32 + _ [112]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Taskstats struct { + Version uint16 + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 + Thrashing_count uint64 + Thrashing_delay_total uint64 + Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 +} + +type cpuMask uint64 + +const ( + _NCPUBITS = 0x40 +) + +const ( + CBitFieldMaskBit0 = 0x1 + CBitFieldMaskBit1 = 0x2 + CBitFieldMaskBit2 = 0x4 + CBitFieldMaskBit3 = 0x8 + CBitFieldMaskBit4 = 0x10 + CBitFieldMaskBit5 = 0x20 + CBitFieldMaskBit6 = 0x40 + CBitFieldMaskBit7 = 0x80 + CBitFieldMaskBit8 = 0x100 + CBitFieldMaskBit9 = 0x200 + CBitFieldMaskBit10 = 0x400 + CBitFieldMaskBit11 = 0x800 + CBitFieldMaskBit12 = 0x1000 + CBitFieldMaskBit13 = 0x2000 + CBitFieldMaskBit14 = 0x4000 + CBitFieldMaskBit15 = 0x8000 + CBitFieldMaskBit16 = 0x10000 + CBitFieldMaskBit17 = 0x20000 + CBitFieldMaskBit18 = 0x40000 + CBitFieldMaskBit19 = 0x80000 + CBitFieldMaskBit20 = 0x100000 + CBitFieldMaskBit21 = 0x200000 + CBitFieldMaskBit22 = 0x400000 + CBitFieldMaskBit23 = 0x800000 + CBitFieldMaskBit24 = 0x1000000 + CBitFieldMaskBit25 = 0x2000000 + CBitFieldMaskBit26 = 0x4000000 + CBitFieldMaskBit27 = 0x8000000 + CBitFieldMaskBit28 = 0x10000000 + CBitFieldMaskBit29 = 0x20000000 + CBitFieldMaskBit30 = 0x40000000 + CBitFieldMaskBit31 = 0x80000000 + CBitFieldMaskBit32 = 0x100000000 + CBitFieldMaskBit33 = 0x200000000 + CBitFieldMaskBit34 = 0x400000000 + CBitFieldMaskBit35 = 0x800000000 + CBitFieldMaskBit36 = 0x1000000000 + CBitFieldMaskBit37 = 0x2000000000 + CBitFieldMaskBit38 = 0x4000000000 + CBitFieldMaskBit39 = 0x8000000000 + CBitFieldMaskBit40 = 0x10000000000 + CBitFieldMaskBit41 = 0x20000000000 + CBitFieldMaskBit42 = 0x40000000000 + CBitFieldMaskBit43 = 0x80000000000 + CBitFieldMaskBit44 = 0x100000000000 + CBitFieldMaskBit45 = 0x200000000000 + CBitFieldMaskBit46 = 0x400000000000 + CBitFieldMaskBit47 = 0x800000000000 + CBitFieldMaskBit48 = 0x1000000000000 + CBitFieldMaskBit49 = 0x2000000000000 + CBitFieldMaskBit50 = 0x4000000000000 + CBitFieldMaskBit51 = 0x8000000000000 + CBitFieldMaskBit52 = 0x10000000000000 + CBitFieldMaskBit53 = 0x20000000000000 + CBitFieldMaskBit54 = 0x40000000000000 + CBitFieldMaskBit55 = 0x80000000000000 + CBitFieldMaskBit56 = 0x100000000000000 + CBitFieldMaskBit57 = 0x200000000000000 + CBitFieldMaskBit58 = 0x400000000000000 + CBitFieldMaskBit59 = 0x800000000000000 + CBitFieldMaskBit60 = 0x1000000000000000 + CBitFieldMaskBit61 = 0x2000000000000000 + CBitFieldMaskBit62 = 0x4000000000000000 + CBitFieldMaskBit63 = 0x8000000000000000 +) + +type SockaddrStorage struct { + Family uint16 + _ [118]int8 + _ uint64 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + Start uint64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +type TpacketHdr struct { + Status uint64 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 + _ [4]byte +} + +const ( + SizeofTpacketHdr = 0x20 +) + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int64 +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x1269 +) + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 + Flags uint32 + _ [4]byte +} + +type CryptoUserAlg struct { + Name [64]int8 + Driver_name [64]int8 + Module_name [64]int8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]int8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]int8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]int8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]int8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]int8 +} + +type CryptoReportLarval struct { + Type [64]int8 +} + +type CryptoReportHash struct { + Type [64]int8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]int8 +} + +type CryptoReportRNG struct { + Type [64]int8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]int8 +} + +type CryptoReportKPP struct { + Type [64]int8 +} + +type CryptoReportAcomp struct { + Type [64]int8 +} + +type LoopInfo struct { + Number int32 + Device uint32 + Inode uint64 + Rdevice uint32 + Offset int32 + Encrypt_type int32 + Encrypt_key_size int32 + Flags int32 + Name [64]int8 + Encrypt_key [32]uint8 + Init [2]uint64 + Reserved [4]int8 + _ [4]byte +} + +type TIPCSubscr struct { + Seq TIPCServiceRange + Timeout uint32 + Filter uint32 + Handle [8]int8 +} + +type TIPCSIOCLNReq struct { + Peer uint32 + Id uint32 + Linkname [68]int8 +} + +type TIPCSIOCNodeIDReq struct { + Peer uint32 + Id [16]int8 +} + +type PPSKInfo struct { + Assert_sequence uint32 + Clear_sequence uint32 + Assert_tu PPSKTime + Clear_tu PPSKTime + Current_mode int32 + _ [4]byte +} + +const ( + PPS_GETPARAMS = 0x800870a1 + PPS_SETPARAMS = 0x400870a2 + PPS_GETCAP = 0x800870a3 + PPS_FETCH = 0xc00870a4 +) + +const ( + PIDFD_NONBLOCK = 0x800 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + _ [0]uint8 + Seq uint16 + _ uint16 + _ uint64 + _ uint64 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint64 + Atime int64 + Dtime int64 + Ctime int64 + Cpid int32 + Lpid int32 + Nattch uint64 + _ uint64 + _ 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 new file mode 100644 index 0000000..5310f71 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -0,0 +1,683 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build mips && linux +// +build mips,linux + +package unix + +const ( + SizeofPtr = 0x4 + SizeofLong = 0x4 +) + +type ( + _C_long int32 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timex struct { + Modes uint32 + Offset int32 + Freq int32 + Maxerror int32 + Esterror int32 + Status int32 + Constant int32 + Precision int32 + Tolerance int32 + Time Timeval + Tick int32 + Ppsfreq int32 + Jitter int32 + Shift int32 + Stabil int32 + Jitcnt int32 + Calcnt int32 + Errcnt int32 + Stbcnt int32 + Tai int32 + _ [44]byte +} + +type Time_t int32 + +type Tms struct { + Utime int32 + Stime int32 + Cutime int32 + Cstime int32 +} + +type Utimbuf struct { + Actime int32 + Modtime int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Stat_t struct { + Dev uint32 + Pad1 [3]int32 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint32 + Pad2 [3]int32 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize int32 + Pad4 int32 + Blocks int64 + Pad5 [14]int32 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte +} + +type Flock_t struct { + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type DmNameList struct { + Dev uint64 + Next uint32 + Name [0]byte + _ [4]byte +} + +const ( + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint32 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +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 +} + +type ifreq struct { + Ifrn [16]byte + Ifru [16]byte +} + +const ( + SizeofSockaddrNFCLLCP = 0x58 + SizeofIovec = 0x8 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc +) + +const ( + SizeofSockFprog = 0x8 +) + +type PtraceRegs struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +type FdSet struct { + Bits [32]int32 +} + +type Sysinfo_t struct { + Uptime int32 + Loads [3]uint32 + Totalram uint32 + Freeram uint32 + Sharedram uint32 + Bufferram uint32 + Totalswap uint32 + Freeswap uint32 + Procs uint16 + Pad uint16 + Totalhigh uint32 + Freehigh uint32 + Unit uint32 + _ [8]int8 +} + +type Ustat_t struct { + Tfree int32 + Tinode uint32 + Fname [6]int8 + Fpack [6]int8 +} + +type EpollEvent struct { + Events uint32 + PadFd int32 + Fd int32 + Pad int32 +} + +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + +const ( + POLLRDHUP = 0x2000 +) + +type Sigset_t struct { + Val [32]uint32 +} + +const _C__NSIG = 0x80 + +type Siginfo struct { + Signo int32 + Code int32 + Errno int32 + _ [116]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [23]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Taskstats struct { + Version uint16 + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [4]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 + Thrashing_count uint64 + Thrashing_delay_total uint64 + Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 +} + +type cpuMask uint32 + +const ( + _NCPUBITS = 0x20 +) + +const ( + CBitFieldMaskBit0 = 0x8000000000000000 + CBitFieldMaskBit1 = 0x4000000000000000 + CBitFieldMaskBit2 = 0x2000000000000000 + CBitFieldMaskBit3 = 0x1000000000000000 + CBitFieldMaskBit4 = 0x800000000000000 + CBitFieldMaskBit5 = 0x400000000000000 + CBitFieldMaskBit6 = 0x200000000000000 + CBitFieldMaskBit7 = 0x100000000000000 + CBitFieldMaskBit8 = 0x80000000000000 + CBitFieldMaskBit9 = 0x40000000000000 + CBitFieldMaskBit10 = 0x20000000000000 + CBitFieldMaskBit11 = 0x10000000000000 + CBitFieldMaskBit12 = 0x8000000000000 + CBitFieldMaskBit13 = 0x4000000000000 + CBitFieldMaskBit14 = 0x2000000000000 + CBitFieldMaskBit15 = 0x1000000000000 + CBitFieldMaskBit16 = 0x800000000000 + CBitFieldMaskBit17 = 0x400000000000 + CBitFieldMaskBit18 = 0x200000000000 + CBitFieldMaskBit19 = 0x100000000000 + CBitFieldMaskBit20 = 0x80000000000 + CBitFieldMaskBit21 = 0x40000000000 + CBitFieldMaskBit22 = 0x20000000000 + CBitFieldMaskBit23 = 0x10000000000 + CBitFieldMaskBit24 = 0x8000000000 + CBitFieldMaskBit25 = 0x4000000000 + CBitFieldMaskBit26 = 0x2000000000 + CBitFieldMaskBit27 = 0x1000000000 + CBitFieldMaskBit28 = 0x800000000 + CBitFieldMaskBit29 = 0x400000000 + CBitFieldMaskBit30 = 0x200000000 + CBitFieldMaskBit31 = 0x100000000 + CBitFieldMaskBit32 = 0x80000000 + CBitFieldMaskBit33 = 0x40000000 + CBitFieldMaskBit34 = 0x20000000 + CBitFieldMaskBit35 = 0x10000000 + CBitFieldMaskBit36 = 0x8000000 + CBitFieldMaskBit37 = 0x4000000 + CBitFieldMaskBit38 = 0x2000000 + CBitFieldMaskBit39 = 0x1000000 + CBitFieldMaskBit40 = 0x800000 + CBitFieldMaskBit41 = 0x400000 + CBitFieldMaskBit42 = 0x200000 + CBitFieldMaskBit43 = 0x100000 + CBitFieldMaskBit44 = 0x80000 + CBitFieldMaskBit45 = 0x40000 + CBitFieldMaskBit46 = 0x20000 + CBitFieldMaskBit47 = 0x10000 + CBitFieldMaskBit48 = 0x8000 + CBitFieldMaskBit49 = 0x4000 + CBitFieldMaskBit50 = 0x2000 + CBitFieldMaskBit51 = 0x1000 + CBitFieldMaskBit52 = 0x800 + CBitFieldMaskBit53 = 0x400 + CBitFieldMaskBit54 = 0x200 + CBitFieldMaskBit55 = 0x100 + CBitFieldMaskBit56 = 0x80 + CBitFieldMaskBit57 = 0x40 + CBitFieldMaskBit58 = 0x20 + CBitFieldMaskBit59 = 0x10 + CBitFieldMaskBit60 = 0x8 + CBitFieldMaskBit61 = 0x4 + CBitFieldMaskBit62 = 0x2 + CBitFieldMaskBit63 = 0x1 +) + +type SockaddrStorage struct { + Family uint16 + _ [122]int8 + _ uint32 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + Start uint32 +} + +type Statfs_t struct { + Type int32 + Bsize int32 + Frsize int32 + _ [4]byte + Blocks uint64 + Bfree uint64 + Files uint64 + Ffree uint64 + Bavail uint64 + Fsid Fsid + Namelen int32 + Flags int32 + Spare [5]int32 + _ [4]byte +} + +type TpacketHdr struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 +} + +const ( + SizeofTpacketHdr = 0x18 +) + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int32 +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x20001269 +) + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 + Flags uint32 + _ [4]byte +} + +type CryptoUserAlg struct { + Name [64]int8 + Driver_name [64]int8 + Module_name [64]int8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]int8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]int8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]int8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]int8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]int8 +} + +type CryptoReportLarval struct { + Type [64]int8 +} + +type CryptoReportHash struct { + Type [64]int8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]int8 +} + +type CryptoReportRNG struct { + Type [64]int8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]int8 +} + +type CryptoReportKPP struct { + Type [64]int8 +} + +type CryptoReportAcomp struct { + Type [64]int8 +} + +type LoopInfo struct { + Number int32 + Device uint32 + Inode uint32 + Rdevice uint32 + Offset int32 + Encrypt_type int32 + Encrypt_key_size int32 + Flags int32 + Name [64]int8 + Encrypt_key [32]uint8 + Init [2]uint32 + Reserved [4]int8 +} + +type TIPCSubscr struct { + Seq TIPCServiceRange + Timeout uint32 + Filter uint32 + Handle [8]int8 +} + +type TIPCSIOCLNReq struct { + Peer uint32 + Id uint32 + Linkname [68]int8 +} + +type TIPCSIOCNodeIDReq struct { + Peer uint32 + Id [16]int8 +} + +type PPSKInfo struct { + Assert_sequence uint32 + Clear_sequence uint32 + Assert_tu PPSKTime + Clear_tu PPSKTime + Current_mode int32 + _ [4]byte +} + +const ( + PPS_GETPARAMS = 0x400470a1 + PPS_SETPARAMS = 0x800470a2 + PPS_GETCAP = 0x400470a3 + PPS_FETCH = 0xc00470a4 +) + +const ( + PIDFD_NONBLOCK = 0x80 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + _ [0]uint8 + Seq uint16 + _ uint16 + _ uint32 + _ uint32 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint32 + Atime uint32 + Dtime uint32 + Ctime uint32 + Cpid int32 + Lpid int32 + Nattch uint32 + Atime_high uint16 + Dtime_high uint16 + Ctime_high uint16 + _ uint16 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go new file mode 100644 index 0000000..219bbb1 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -0,0 +1,681 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build mips64 && linux +// +build mips64,linux + +package unix + +const ( + SizeofPtr = 0x8 + SizeofLong = 0x8 +) + +type ( + _C_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + _ [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Stat_t struct { + Dev uint32 + Pad1 [3]uint32 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint32 + Pad2 [3]uint32 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize uint32 + Pad4 uint32 + Blocks int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte +} + +type Flock_t struct { + Type int16 + Whence int16 + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type DmNameList struct { + Dev uint64 + Next uint32 + Name [0]byte + _ [4]byte +} + +const ( + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint64 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type ifreq struct { + Ifrn [16]byte + Ifru [24]byte +} + +const ( + SizeofSockaddrNFCLLCP = 0x60 + SizeofIovec = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 +) + +const ( + SizeofSockFprog = 0x10 +) + +type PtraceRegs struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + _ [0]int8 + _ [4]byte +} + +type Ustat_t struct { + Tfree int32 + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + _ [4]byte +} + +type EpollEvent struct { + Events uint32 + _ int32 + Fd int32 + Pad int32 +} + +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + +const ( + POLLRDHUP = 0x2000 +) + +type Sigset_t struct { + Val [16]uint64 +} + +const _C__NSIG = 0x80 + +type Siginfo struct { + Signo int32 + Code int32 + Errno int32 + _ int32 + _ [112]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [23]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Taskstats struct { + Version uint16 + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 + Thrashing_count uint64 + Thrashing_delay_total uint64 + Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 +} + +type cpuMask uint64 + +const ( + _NCPUBITS = 0x40 +) + +const ( + CBitFieldMaskBit0 = 0x8000000000000000 + CBitFieldMaskBit1 = 0x4000000000000000 + CBitFieldMaskBit2 = 0x2000000000000000 + CBitFieldMaskBit3 = 0x1000000000000000 + CBitFieldMaskBit4 = 0x800000000000000 + CBitFieldMaskBit5 = 0x400000000000000 + CBitFieldMaskBit6 = 0x200000000000000 + CBitFieldMaskBit7 = 0x100000000000000 + CBitFieldMaskBit8 = 0x80000000000000 + CBitFieldMaskBit9 = 0x40000000000000 + CBitFieldMaskBit10 = 0x20000000000000 + CBitFieldMaskBit11 = 0x10000000000000 + CBitFieldMaskBit12 = 0x8000000000000 + CBitFieldMaskBit13 = 0x4000000000000 + CBitFieldMaskBit14 = 0x2000000000000 + CBitFieldMaskBit15 = 0x1000000000000 + CBitFieldMaskBit16 = 0x800000000000 + CBitFieldMaskBit17 = 0x400000000000 + CBitFieldMaskBit18 = 0x200000000000 + CBitFieldMaskBit19 = 0x100000000000 + CBitFieldMaskBit20 = 0x80000000000 + CBitFieldMaskBit21 = 0x40000000000 + CBitFieldMaskBit22 = 0x20000000000 + CBitFieldMaskBit23 = 0x10000000000 + CBitFieldMaskBit24 = 0x8000000000 + CBitFieldMaskBit25 = 0x4000000000 + CBitFieldMaskBit26 = 0x2000000000 + CBitFieldMaskBit27 = 0x1000000000 + CBitFieldMaskBit28 = 0x800000000 + CBitFieldMaskBit29 = 0x400000000 + CBitFieldMaskBit30 = 0x200000000 + CBitFieldMaskBit31 = 0x100000000 + CBitFieldMaskBit32 = 0x80000000 + CBitFieldMaskBit33 = 0x40000000 + CBitFieldMaskBit34 = 0x20000000 + CBitFieldMaskBit35 = 0x10000000 + CBitFieldMaskBit36 = 0x8000000 + CBitFieldMaskBit37 = 0x4000000 + CBitFieldMaskBit38 = 0x2000000 + CBitFieldMaskBit39 = 0x1000000 + CBitFieldMaskBit40 = 0x800000 + CBitFieldMaskBit41 = 0x400000 + CBitFieldMaskBit42 = 0x200000 + CBitFieldMaskBit43 = 0x100000 + CBitFieldMaskBit44 = 0x80000 + CBitFieldMaskBit45 = 0x40000 + CBitFieldMaskBit46 = 0x20000 + CBitFieldMaskBit47 = 0x10000 + CBitFieldMaskBit48 = 0x8000 + CBitFieldMaskBit49 = 0x4000 + CBitFieldMaskBit50 = 0x2000 + CBitFieldMaskBit51 = 0x1000 + CBitFieldMaskBit52 = 0x800 + CBitFieldMaskBit53 = 0x400 + CBitFieldMaskBit54 = 0x200 + CBitFieldMaskBit55 = 0x100 + CBitFieldMaskBit56 = 0x80 + CBitFieldMaskBit57 = 0x40 + CBitFieldMaskBit58 = 0x20 + CBitFieldMaskBit59 = 0x10 + CBitFieldMaskBit60 = 0x8 + CBitFieldMaskBit61 = 0x4 + CBitFieldMaskBit62 = 0x2 + CBitFieldMaskBit63 = 0x1 +) + +type SockaddrStorage struct { + Family uint16 + _ [118]int8 + _ uint64 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + Start uint64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Frsize int64 + Blocks uint64 + Bfree uint64 + Files uint64 + Ffree uint64 + Bavail uint64 + Fsid Fsid + Namelen int64 + Flags int64 + Spare [5]int64 +} + +type TpacketHdr struct { + Status uint64 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 + _ [4]byte +} + +const ( + SizeofTpacketHdr = 0x20 +) + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int64 +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x20001269 +) + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 + Flags uint32 + _ [4]byte +} + +type CryptoUserAlg struct { + Name [64]int8 + Driver_name [64]int8 + Module_name [64]int8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]int8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]int8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]int8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]int8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]int8 +} + +type CryptoReportLarval struct { + Type [64]int8 +} + +type CryptoReportHash struct { + Type [64]int8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]int8 +} + +type CryptoReportRNG struct { + Type [64]int8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]int8 +} + +type CryptoReportKPP struct { + Type [64]int8 +} + +type CryptoReportAcomp struct { + Type [64]int8 +} + +type LoopInfo struct { + Number int32 + Device uint32 + Inode uint64 + Rdevice uint32 + Offset int32 + Encrypt_type int32 + Encrypt_key_size int32 + Flags int32 + Name [64]int8 + Encrypt_key [32]uint8 + Init [2]uint64 + Reserved [4]int8 + _ [4]byte +} + +type TIPCSubscr struct { + Seq TIPCServiceRange + Timeout uint32 + Filter uint32 + Handle [8]int8 +} + +type TIPCSIOCLNReq struct { + Peer uint32 + Id uint32 + Linkname [68]int8 +} + +type TIPCSIOCNodeIDReq struct { + Peer uint32 + Id [16]int8 +} + +type PPSKInfo struct { + Assert_sequence uint32 + Clear_sequence uint32 + Assert_tu PPSKTime + Clear_tu PPSKTime + Current_mode int32 + _ [4]byte +} + +const ( + PPS_GETPARAMS = 0x400870a1 + PPS_SETPARAMS = 0x800870a2 + PPS_GETCAP = 0x400870a3 + PPS_FETCH = 0xc00870a4 +) + +const ( + PIDFD_NONBLOCK = 0x80 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + _ [0]uint8 + Seq uint16 + _ uint16 + _ uint64 + _ uint64 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint64 + Atime int64 + Dtime int64 + Ctime int64 + Cpid int32 + Lpid int32 + Nattch uint64 + _ uint64 + _ 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 new file mode 100644 index 0000000..be9432d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -0,0 +1,681 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build mips64le && linux +// +build mips64le,linux + +package unix + +const ( + SizeofPtr = 0x8 + SizeofLong = 0x8 +) + +type ( + _C_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + _ [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Stat_t struct { + Dev uint32 + Pad1 [3]uint32 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint32 + Pad2 [3]uint32 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize uint32 + Pad4 uint32 + Blocks int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte +} + +type Flock_t struct { + Type int16 + Whence int16 + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type DmNameList struct { + Dev uint64 + Next uint32 + Name [0]byte + _ [4]byte +} + +const ( + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint64 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type ifreq struct { + Ifrn [16]byte + Ifru [24]byte +} + +const ( + SizeofSockaddrNFCLLCP = 0x60 + SizeofIovec = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 +) + +const ( + SizeofSockFprog = 0x10 +) + +type PtraceRegs struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + _ [0]int8 + _ [4]byte +} + +type Ustat_t struct { + Tfree int32 + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + _ [4]byte +} + +type EpollEvent struct { + Events uint32 + _ int32 + Fd int32 + Pad int32 +} + +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + +const ( + POLLRDHUP = 0x2000 +) + +type Sigset_t struct { + Val [16]uint64 +} + +const _C__NSIG = 0x80 + +type Siginfo struct { + Signo int32 + Code int32 + Errno int32 + _ int32 + _ [112]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [23]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Taskstats struct { + Version uint16 + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 + Thrashing_count uint64 + Thrashing_delay_total uint64 + Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 +} + +type cpuMask uint64 + +const ( + _NCPUBITS = 0x40 +) + +const ( + CBitFieldMaskBit0 = 0x1 + CBitFieldMaskBit1 = 0x2 + CBitFieldMaskBit2 = 0x4 + CBitFieldMaskBit3 = 0x8 + CBitFieldMaskBit4 = 0x10 + CBitFieldMaskBit5 = 0x20 + CBitFieldMaskBit6 = 0x40 + CBitFieldMaskBit7 = 0x80 + CBitFieldMaskBit8 = 0x100 + CBitFieldMaskBit9 = 0x200 + CBitFieldMaskBit10 = 0x400 + CBitFieldMaskBit11 = 0x800 + CBitFieldMaskBit12 = 0x1000 + CBitFieldMaskBit13 = 0x2000 + CBitFieldMaskBit14 = 0x4000 + CBitFieldMaskBit15 = 0x8000 + CBitFieldMaskBit16 = 0x10000 + CBitFieldMaskBit17 = 0x20000 + CBitFieldMaskBit18 = 0x40000 + CBitFieldMaskBit19 = 0x80000 + CBitFieldMaskBit20 = 0x100000 + CBitFieldMaskBit21 = 0x200000 + CBitFieldMaskBit22 = 0x400000 + CBitFieldMaskBit23 = 0x800000 + CBitFieldMaskBit24 = 0x1000000 + CBitFieldMaskBit25 = 0x2000000 + CBitFieldMaskBit26 = 0x4000000 + CBitFieldMaskBit27 = 0x8000000 + CBitFieldMaskBit28 = 0x10000000 + CBitFieldMaskBit29 = 0x20000000 + CBitFieldMaskBit30 = 0x40000000 + CBitFieldMaskBit31 = 0x80000000 + CBitFieldMaskBit32 = 0x100000000 + CBitFieldMaskBit33 = 0x200000000 + CBitFieldMaskBit34 = 0x400000000 + CBitFieldMaskBit35 = 0x800000000 + CBitFieldMaskBit36 = 0x1000000000 + CBitFieldMaskBit37 = 0x2000000000 + CBitFieldMaskBit38 = 0x4000000000 + CBitFieldMaskBit39 = 0x8000000000 + CBitFieldMaskBit40 = 0x10000000000 + CBitFieldMaskBit41 = 0x20000000000 + CBitFieldMaskBit42 = 0x40000000000 + CBitFieldMaskBit43 = 0x80000000000 + CBitFieldMaskBit44 = 0x100000000000 + CBitFieldMaskBit45 = 0x200000000000 + CBitFieldMaskBit46 = 0x400000000000 + CBitFieldMaskBit47 = 0x800000000000 + CBitFieldMaskBit48 = 0x1000000000000 + CBitFieldMaskBit49 = 0x2000000000000 + CBitFieldMaskBit50 = 0x4000000000000 + CBitFieldMaskBit51 = 0x8000000000000 + CBitFieldMaskBit52 = 0x10000000000000 + CBitFieldMaskBit53 = 0x20000000000000 + CBitFieldMaskBit54 = 0x40000000000000 + CBitFieldMaskBit55 = 0x80000000000000 + CBitFieldMaskBit56 = 0x100000000000000 + CBitFieldMaskBit57 = 0x200000000000000 + CBitFieldMaskBit58 = 0x400000000000000 + CBitFieldMaskBit59 = 0x800000000000000 + CBitFieldMaskBit60 = 0x1000000000000000 + CBitFieldMaskBit61 = 0x2000000000000000 + CBitFieldMaskBit62 = 0x4000000000000000 + CBitFieldMaskBit63 = 0x8000000000000000 +) + +type SockaddrStorage struct { + Family uint16 + _ [118]int8 + _ uint64 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + Start uint64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Frsize int64 + Blocks uint64 + Bfree uint64 + Files uint64 + Ffree uint64 + Bavail uint64 + Fsid Fsid + Namelen int64 + Flags int64 + Spare [5]int64 +} + +type TpacketHdr struct { + Status uint64 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 + _ [4]byte +} + +const ( + SizeofTpacketHdr = 0x20 +) + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int64 +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x20001269 +) + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 + Flags uint32 + _ [4]byte +} + +type CryptoUserAlg struct { + Name [64]int8 + Driver_name [64]int8 + Module_name [64]int8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]int8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]int8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]int8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]int8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]int8 +} + +type CryptoReportLarval struct { + Type [64]int8 +} + +type CryptoReportHash struct { + Type [64]int8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]int8 +} + +type CryptoReportRNG struct { + Type [64]int8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]int8 +} + +type CryptoReportKPP struct { + Type [64]int8 +} + +type CryptoReportAcomp struct { + Type [64]int8 +} + +type LoopInfo struct { + Number int32 + Device uint32 + Inode uint64 + Rdevice uint32 + Offset int32 + Encrypt_type int32 + Encrypt_key_size int32 + Flags int32 + Name [64]int8 + Encrypt_key [32]uint8 + Init [2]uint64 + Reserved [4]int8 + _ [4]byte +} + +type TIPCSubscr struct { + Seq TIPCServiceRange + Timeout uint32 + Filter uint32 + Handle [8]int8 +} + +type TIPCSIOCLNReq struct { + Peer uint32 + Id uint32 + Linkname [68]int8 +} + +type TIPCSIOCNodeIDReq struct { + Peer uint32 + Id [16]int8 +} + +type PPSKInfo struct { + Assert_sequence uint32 + Clear_sequence uint32 + Assert_tu PPSKTime + Clear_tu PPSKTime + Current_mode int32 + _ [4]byte +} + +const ( + PPS_GETPARAMS = 0x400870a1 + PPS_SETPARAMS = 0x800870a2 + PPS_GETCAP = 0x400870a3 + PPS_FETCH = 0xc00870a4 +) + +const ( + PIDFD_NONBLOCK = 0x80 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + _ [0]uint8 + Seq uint16 + _ uint16 + _ uint64 + _ uint64 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint64 + Atime int64 + Dtime int64 + Ctime int64 + Cpid int32 + Lpid int32 + Nattch uint64 + _ uint64 + _ 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 new file mode 100644 index 0000000..d0155a4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -0,0 +1,683 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build mipsle && linux +// +build mipsle,linux + +package unix + +const ( + SizeofPtr = 0x4 + SizeofLong = 0x4 +) + +type ( + _C_long int32 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timex struct { + Modes uint32 + Offset int32 + Freq int32 + Maxerror int32 + Esterror int32 + Status int32 + Constant int32 + Precision int32 + Tolerance int32 + Time Timeval + Tick int32 + Ppsfreq int32 + Jitter int32 + Shift int32 + Stabil int32 + Jitcnt int32 + Calcnt int32 + Errcnt int32 + Stbcnt int32 + Tai int32 + _ [44]byte +} + +type Time_t int32 + +type Tms struct { + Utime int32 + Stime int32 + Cutime int32 + Cstime int32 +} + +type Utimbuf struct { + Actime int32 + Modtime int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Stat_t struct { + Dev uint32 + Pad1 [3]int32 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint32 + Pad2 [3]int32 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize int32 + Pad4 int32 + Blocks int64 + Pad5 [14]int32 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte +} + +type Flock_t struct { + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type DmNameList struct { + Dev uint64 + Next uint32 + Name [0]byte + _ [4]byte +} + +const ( + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint32 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +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 +} + +type ifreq struct { + Ifrn [16]byte + Ifru [16]byte +} + +const ( + SizeofSockaddrNFCLLCP = 0x58 + SizeofIovec = 0x8 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc +) + +const ( + SizeofSockFprog = 0x8 +) + +type PtraceRegs struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +type FdSet struct { + Bits [32]int32 +} + +type Sysinfo_t struct { + Uptime int32 + Loads [3]uint32 + Totalram uint32 + Freeram uint32 + Sharedram uint32 + Bufferram uint32 + Totalswap uint32 + Freeswap uint32 + Procs uint16 + Pad uint16 + Totalhigh uint32 + Freehigh uint32 + Unit uint32 + _ [8]int8 +} + +type Ustat_t struct { + Tfree int32 + Tinode uint32 + Fname [6]int8 + Fpack [6]int8 +} + +type EpollEvent struct { + Events uint32 + PadFd int32 + Fd int32 + Pad int32 +} + +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + +const ( + POLLRDHUP = 0x2000 +) + +type Sigset_t struct { + Val [32]uint32 +} + +const _C__NSIG = 0x80 + +type Siginfo struct { + Signo int32 + Code int32 + Errno int32 + _ [116]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [23]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Taskstats struct { + Version uint16 + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [4]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 + Thrashing_count uint64 + Thrashing_delay_total uint64 + Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 +} + +type cpuMask uint32 + +const ( + _NCPUBITS = 0x20 +) + +const ( + CBitFieldMaskBit0 = 0x1 + CBitFieldMaskBit1 = 0x2 + CBitFieldMaskBit2 = 0x4 + CBitFieldMaskBit3 = 0x8 + CBitFieldMaskBit4 = 0x10 + CBitFieldMaskBit5 = 0x20 + CBitFieldMaskBit6 = 0x40 + CBitFieldMaskBit7 = 0x80 + CBitFieldMaskBit8 = 0x100 + CBitFieldMaskBit9 = 0x200 + CBitFieldMaskBit10 = 0x400 + CBitFieldMaskBit11 = 0x800 + CBitFieldMaskBit12 = 0x1000 + CBitFieldMaskBit13 = 0x2000 + CBitFieldMaskBit14 = 0x4000 + CBitFieldMaskBit15 = 0x8000 + CBitFieldMaskBit16 = 0x10000 + CBitFieldMaskBit17 = 0x20000 + CBitFieldMaskBit18 = 0x40000 + CBitFieldMaskBit19 = 0x80000 + CBitFieldMaskBit20 = 0x100000 + CBitFieldMaskBit21 = 0x200000 + CBitFieldMaskBit22 = 0x400000 + CBitFieldMaskBit23 = 0x800000 + CBitFieldMaskBit24 = 0x1000000 + CBitFieldMaskBit25 = 0x2000000 + CBitFieldMaskBit26 = 0x4000000 + CBitFieldMaskBit27 = 0x8000000 + CBitFieldMaskBit28 = 0x10000000 + CBitFieldMaskBit29 = 0x20000000 + CBitFieldMaskBit30 = 0x40000000 + CBitFieldMaskBit31 = 0x80000000 + CBitFieldMaskBit32 = 0x100000000 + CBitFieldMaskBit33 = 0x200000000 + CBitFieldMaskBit34 = 0x400000000 + CBitFieldMaskBit35 = 0x800000000 + CBitFieldMaskBit36 = 0x1000000000 + CBitFieldMaskBit37 = 0x2000000000 + CBitFieldMaskBit38 = 0x4000000000 + CBitFieldMaskBit39 = 0x8000000000 + CBitFieldMaskBit40 = 0x10000000000 + CBitFieldMaskBit41 = 0x20000000000 + CBitFieldMaskBit42 = 0x40000000000 + CBitFieldMaskBit43 = 0x80000000000 + CBitFieldMaskBit44 = 0x100000000000 + CBitFieldMaskBit45 = 0x200000000000 + CBitFieldMaskBit46 = 0x400000000000 + CBitFieldMaskBit47 = 0x800000000000 + CBitFieldMaskBit48 = 0x1000000000000 + CBitFieldMaskBit49 = 0x2000000000000 + CBitFieldMaskBit50 = 0x4000000000000 + CBitFieldMaskBit51 = 0x8000000000000 + CBitFieldMaskBit52 = 0x10000000000000 + CBitFieldMaskBit53 = 0x20000000000000 + CBitFieldMaskBit54 = 0x40000000000000 + CBitFieldMaskBit55 = 0x80000000000000 + CBitFieldMaskBit56 = 0x100000000000000 + CBitFieldMaskBit57 = 0x200000000000000 + CBitFieldMaskBit58 = 0x400000000000000 + CBitFieldMaskBit59 = 0x800000000000000 + CBitFieldMaskBit60 = 0x1000000000000000 + CBitFieldMaskBit61 = 0x2000000000000000 + CBitFieldMaskBit62 = 0x4000000000000000 + CBitFieldMaskBit63 = 0x8000000000000000 +) + +type SockaddrStorage struct { + Family uint16 + _ [122]int8 + _ uint32 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + Start uint32 +} + +type Statfs_t struct { + Type int32 + Bsize int32 + Frsize int32 + _ [4]byte + Blocks uint64 + Bfree uint64 + Files uint64 + Ffree uint64 + Bavail uint64 + Fsid Fsid + Namelen int32 + Flags int32 + Spare [5]int32 + _ [4]byte +} + +type TpacketHdr struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 +} + +const ( + SizeofTpacketHdr = 0x18 +) + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int32 +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x20001269 +) + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 + Flags uint32 + _ [4]byte +} + +type CryptoUserAlg struct { + Name [64]int8 + Driver_name [64]int8 + Module_name [64]int8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]int8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]int8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]int8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]int8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]int8 +} + +type CryptoReportLarval struct { + Type [64]int8 +} + +type CryptoReportHash struct { + Type [64]int8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]int8 +} + +type CryptoReportRNG struct { + Type [64]int8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]int8 +} + +type CryptoReportKPP struct { + Type [64]int8 +} + +type CryptoReportAcomp struct { + Type [64]int8 +} + +type LoopInfo struct { + Number int32 + Device uint32 + Inode uint32 + Rdevice uint32 + Offset int32 + Encrypt_type int32 + Encrypt_key_size int32 + Flags int32 + Name [64]int8 + Encrypt_key [32]uint8 + Init [2]uint32 + Reserved [4]int8 +} + +type TIPCSubscr struct { + Seq TIPCServiceRange + Timeout uint32 + Filter uint32 + Handle [8]int8 +} + +type TIPCSIOCLNReq struct { + Peer uint32 + Id uint32 + Linkname [68]int8 +} + +type TIPCSIOCNodeIDReq struct { + Peer uint32 + Id [16]int8 +} + +type PPSKInfo struct { + Assert_sequence uint32 + Clear_sequence uint32 + Assert_tu PPSKTime + Clear_tu PPSKTime + Current_mode int32 + _ [4]byte +} + +const ( + PPS_GETPARAMS = 0x400470a1 + PPS_SETPARAMS = 0x800470a2 + PPS_GETCAP = 0x400470a3 + PPS_FETCH = 0xc00470a4 +) + +const ( + PIDFD_NONBLOCK = 0x80 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + _ [0]uint8 + Seq uint16 + _ uint16 + _ uint32 + _ uint32 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint32 + Atime uint32 + Dtime uint32 + Ctime uint32 + Cpid int32 + Lpid int32 + Nattch uint32 + Atime_high uint16 + Dtime_high uint16 + Ctime_high uint16 + _ uint16 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go new file mode 100644 index 0000000..01c17bc --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go @@ -0,0 +1,691 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build ppc && linux +// +build ppc,linux + +package unix + +const ( + SizeofPtr = 0x4 + SizeofLong = 0x4 +) + +type ( + _C_long int32 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timex struct { + Modes uint32 + Offset int32 + Freq int32 + Maxerror int32 + Esterror int32 + Status int32 + Constant int32 + Precision int32 + Tolerance int32 + Time Timeval + Tick int32 + Ppsfreq int32 + Jitter int32 + Shift int32 + Stabil int32 + Jitcnt int32 + Calcnt int32 + Errcnt int32 + Stbcnt int32 + Tai int32 + _ [44]byte +} + +type Time_t int32 + +type Tms struct { + Utime int32 + Stime int32 + Cutime int32 + Cstime int32 +} + +type Utimbuf struct { + Actime int32 + Modtime int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Stat_t struct { + Dev uint64 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + _ uint16 + _ [4]byte + Size int64 + Blksize int32 + _ [4]byte + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + _ uint32 + _ uint32 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]uint8 + _ [5]byte +} + +type Flock_t struct { + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type DmNameList struct { + Dev uint64 + Next uint32 + Name [0]byte + _ [4]byte +} + +const ( + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint32 +} + +type RawSockaddr struct { + Family uint16 + Data [14]uint8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]uint8 +} + +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 +} + +type ifreq struct { + Ifrn [16]byte + Ifru [16]byte +} + +const ( + SizeofSockaddrNFCLLCP = 0x58 + SizeofIovec = 0x8 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc +) + +const ( + SizeofSockFprog = 0x8 +) + +type PtraceRegs struct { + Gpr [32]uint32 + Nip uint32 + Msr uint32 + Orig_gpr3 uint32 + Ctr uint32 + Link uint32 + Xer uint32 + Ccr uint32 + Mq uint32 + Trap uint32 + Dar uint32 + Dsisr uint32 + Result uint32 +} + +type FdSet struct { + Bits [32]int32 +} + +type Sysinfo_t struct { + Uptime int32 + Loads [3]uint32 + Totalram uint32 + Freeram uint32 + Sharedram uint32 + Bufferram uint32 + Totalswap uint32 + Freeswap uint32 + Procs uint16 + Pad uint16 + Totalhigh uint32 + Freehigh uint32 + Unit uint32 + _ [8]uint8 +} + +type Ustat_t struct { + Tfree int32 + Tinode uint32 + Fname [6]uint8 + Fpack [6]uint8 +} + +type EpollEvent struct { + Events uint32 + _ int32 + Fd int32 + Pad int32 +} + +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + +const ( + POLLRDHUP = 0x2000 +) + +type Sigset_t struct { + Val [32]uint32 +} + +const _C__NSIG = 0x41 + +type Siginfo struct { + Signo int32 + Errno int32 + Code int32 + _ [116]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [19]uint8 + Line uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Taskstats struct { + Version uint16 + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [4]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]uint8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 + Thrashing_count uint64 + Thrashing_delay_total uint64 + Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 +} + +type cpuMask uint32 + +const ( + _NCPUBITS = 0x20 +) + +const ( + CBitFieldMaskBit0 = 0x8000000000000000 + CBitFieldMaskBit1 = 0x4000000000000000 + CBitFieldMaskBit2 = 0x2000000000000000 + CBitFieldMaskBit3 = 0x1000000000000000 + CBitFieldMaskBit4 = 0x800000000000000 + CBitFieldMaskBit5 = 0x400000000000000 + CBitFieldMaskBit6 = 0x200000000000000 + CBitFieldMaskBit7 = 0x100000000000000 + CBitFieldMaskBit8 = 0x80000000000000 + CBitFieldMaskBit9 = 0x40000000000000 + CBitFieldMaskBit10 = 0x20000000000000 + CBitFieldMaskBit11 = 0x10000000000000 + CBitFieldMaskBit12 = 0x8000000000000 + CBitFieldMaskBit13 = 0x4000000000000 + CBitFieldMaskBit14 = 0x2000000000000 + CBitFieldMaskBit15 = 0x1000000000000 + CBitFieldMaskBit16 = 0x800000000000 + CBitFieldMaskBit17 = 0x400000000000 + CBitFieldMaskBit18 = 0x200000000000 + CBitFieldMaskBit19 = 0x100000000000 + CBitFieldMaskBit20 = 0x80000000000 + CBitFieldMaskBit21 = 0x40000000000 + CBitFieldMaskBit22 = 0x20000000000 + CBitFieldMaskBit23 = 0x10000000000 + CBitFieldMaskBit24 = 0x8000000000 + CBitFieldMaskBit25 = 0x4000000000 + CBitFieldMaskBit26 = 0x2000000000 + CBitFieldMaskBit27 = 0x1000000000 + CBitFieldMaskBit28 = 0x800000000 + CBitFieldMaskBit29 = 0x400000000 + CBitFieldMaskBit30 = 0x200000000 + CBitFieldMaskBit31 = 0x100000000 + CBitFieldMaskBit32 = 0x80000000 + CBitFieldMaskBit33 = 0x40000000 + CBitFieldMaskBit34 = 0x20000000 + CBitFieldMaskBit35 = 0x10000000 + CBitFieldMaskBit36 = 0x8000000 + CBitFieldMaskBit37 = 0x4000000 + CBitFieldMaskBit38 = 0x2000000 + CBitFieldMaskBit39 = 0x1000000 + CBitFieldMaskBit40 = 0x800000 + CBitFieldMaskBit41 = 0x400000 + CBitFieldMaskBit42 = 0x200000 + CBitFieldMaskBit43 = 0x100000 + CBitFieldMaskBit44 = 0x80000 + CBitFieldMaskBit45 = 0x40000 + CBitFieldMaskBit46 = 0x20000 + CBitFieldMaskBit47 = 0x10000 + CBitFieldMaskBit48 = 0x8000 + CBitFieldMaskBit49 = 0x4000 + CBitFieldMaskBit50 = 0x2000 + CBitFieldMaskBit51 = 0x1000 + CBitFieldMaskBit52 = 0x800 + CBitFieldMaskBit53 = 0x400 + CBitFieldMaskBit54 = 0x200 + CBitFieldMaskBit55 = 0x100 + CBitFieldMaskBit56 = 0x80 + CBitFieldMaskBit57 = 0x40 + CBitFieldMaskBit58 = 0x20 + CBitFieldMaskBit59 = 0x10 + CBitFieldMaskBit60 = 0x8 + CBitFieldMaskBit61 = 0x4 + CBitFieldMaskBit62 = 0x2 + CBitFieldMaskBit63 = 0x1 +) + +type SockaddrStorage struct { + Family uint16 + _ [122]uint8 + _ uint32 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + Start uint32 +} + +type Statfs_t struct { + Type int32 + Bsize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int32 + Frsize int32 + Flags int32 + Spare [4]int32 + _ [4]byte +} + +type TpacketHdr struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 +} + +const ( + SizeofTpacketHdr = 0x18 +) + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int32 +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x20001269 +) + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 + Flags uint32 + _ [4]byte +} + +type CryptoUserAlg struct { + Name [64]uint8 + Driver_name [64]uint8 + Module_name [64]uint8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]uint8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]uint8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]uint8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]uint8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]uint8 +} + +type CryptoReportLarval struct { + Type [64]uint8 +} + +type CryptoReportHash struct { + Type [64]uint8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]uint8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]uint8 + Geniv [64]uint8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]uint8 + Geniv [64]uint8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]uint8 +} + +type CryptoReportRNG struct { + Type [64]uint8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]uint8 +} + +type CryptoReportKPP struct { + Type [64]uint8 +} + +type CryptoReportAcomp struct { + Type [64]uint8 +} + +type LoopInfo struct { + Number int32 + Device uint32 + Inode uint32 + Rdevice uint32 + Offset int32 + Encrypt_type int32 + Encrypt_key_size int32 + Flags int32 + Name [64]uint8 + Encrypt_key [32]uint8 + Init [2]uint32 + Reserved [4]uint8 +} + +type TIPCSubscr struct { + Seq TIPCServiceRange + Timeout uint32 + Filter uint32 + Handle [8]uint8 +} + +type TIPCSIOCLNReq struct { + Peer uint32 + Id uint32 + Linkname [68]uint8 +} + +type TIPCSIOCNodeIDReq struct { + Peer uint32 + Id [16]uint8 +} + +type PPSKInfo struct { + Assert_sequence uint32 + Clear_sequence uint32 + Assert_tu PPSKTime + Clear_tu PPSKTime + Current_mode int32 + _ [4]byte +} + +const ( + PPS_GETPARAMS = 0x400470a1 + PPS_SETPARAMS = 0x800470a2 + PPS_GETCAP = 0x400470a3 + PPS_FETCH = 0xc00470a4 +) + +const ( + PIDFD_NONBLOCK = 0x800 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + Seq uint32 + _ uint32 + _ uint64 + _ uint64 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Atime_high uint32 + Atime uint32 + Dtime_high uint32 + Dtime uint32 + Ctime_high uint32 + Ctime uint32 + _ uint32 + Segsz uint32 + Cpid int32 + Lpid int32 + Nattch uint32 + _ uint32 + _ uint32 + _ [4]byte +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go new file mode 100644 index 0000000..944a9c3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -0,0 +1,687 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build ppc64 && linux +// +build ppc64,linux + +package unix + +const ( + SizeofPtr = 0x8 + SizeofLong = 0x8 +) + +type ( + _C_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + _ [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint32 + Uid uint32 + Gid uint32 + _ int32 + Rdev uint64 + Size int64 + Blksize int64 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + _ uint64 + _ uint64 + _ uint64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]uint8 + _ [5]byte +} + +type Flock_t struct { + Type int16 + Whence int16 + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type DmNameList struct { + Dev uint64 + Next uint32 + Name [0]byte + _ [4]byte +} + +const ( + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint64 +} + +type RawSockaddr struct { + Family uint16 + Data [14]uint8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]uint8 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type ifreq struct { + Ifrn [16]byte + Ifru [24]byte +} + +const ( + SizeofSockaddrNFCLLCP = 0x60 + SizeofIovec = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 +) + +const ( + SizeofSockFprog = 0x10 +) + +type PtraceRegs struct { + Gpr [32]uint64 + Nip uint64 + Msr uint64 + Orig_gpr3 uint64 + Ctr uint64 + Link uint64 + Xer uint64 + Ccr uint64 + Softe uint64 + Trap uint64 + Dar uint64 + Dsisr uint64 + Result uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + _ [0]uint8 + _ [4]byte +} + +type Ustat_t struct { + Tfree int32 + Tinode uint64 + Fname [6]uint8 + Fpack [6]uint8 + _ [4]byte +} + +type EpollEvent struct { + Events uint32 + _ int32 + Fd int32 + Pad int32 +} + +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + +const ( + POLLRDHUP = 0x2000 +) + +type Sigset_t struct { + Val [16]uint64 +} + +const _C__NSIG = 0x41 + +type Siginfo struct { + Signo int32 + Errno int32 + Code int32 + _ int32 + _ [112]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [19]uint8 + Line uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Taskstats struct { + Version uint16 + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]uint8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 + Thrashing_count uint64 + Thrashing_delay_total uint64 + Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 +} + +type cpuMask uint64 + +const ( + _NCPUBITS = 0x40 +) + +const ( + CBitFieldMaskBit0 = 0x8000000000000000 + CBitFieldMaskBit1 = 0x4000000000000000 + CBitFieldMaskBit2 = 0x2000000000000000 + CBitFieldMaskBit3 = 0x1000000000000000 + CBitFieldMaskBit4 = 0x800000000000000 + CBitFieldMaskBit5 = 0x400000000000000 + CBitFieldMaskBit6 = 0x200000000000000 + CBitFieldMaskBit7 = 0x100000000000000 + CBitFieldMaskBit8 = 0x80000000000000 + CBitFieldMaskBit9 = 0x40000000000000 + CBitFieldMaskBit10 = 0x20000000000000 + CBitFieldMaskBit11 = 0x10000000000000 + CBitFieldMaskBit12 = 0x8000000000000 + CBitFieldMaskBit13 = 0x4000000000000 + CBitFieldMaskBit14 = 0x2000000000000 + CBitFieldMaskBit15 = 0x1000000000000 + CBitFieldMaskBit16 = 0x800000000000 + CBitFieldMaskBit17 = 0x400000000000 + CBitFieldMaskBit18 = 0x200000000000 + CBitFieldMaskBit19 = 0x100000000000 + CBitFieldMaskBit20 = 0x80000000000 + CBitFieldMaskBit21 = 0x40000000000 + CBitFieldMaskBit22 = 0x20000000000 + CBitFieldMaskBit23 = 0x10000000000 + CBitFieldMaskBit24 = 0x8000000000 + CBitFieldMaskBit25 = 0x4000000000 + CBitFieldMaskBit26 = 0x2000000000 + CBitFieldMaskBit27 = 0x1000000000 + CBitFieldMaskBit28 = 0x800000000 + CBitFieldMaskBit29 = 0x400000000 + CBitFieldMaskBit30 = 0x200000000 + CBitFieldMaskBit31 = 0x100000000 + CBitFieldMaskBit32 = 0x80000000 + CBitFieldMaskBit33 = 0x40000000 + CBitFieldMaskBit34 = 0x20000000 + CBitFieldMaskBit35 = 0x10000000 + CBitFieldMaskBit36 = 0x8000000 + CBitFieldMaskBit37 = 0x4000000 + CBitFieldMaskBit38 = 0x2000000 + CBitFieldMaskBit39 = 0x1000000 + CBitFieldMaskBit40 = 0x800000 + CBitFieldMaskBit41 = 0x400000 + CBitFieldMaskBit42 = 0x200000 + CBitFieldMaskBit43 = 0x100000 + CBitFieldMaskBit44 = 0x80000 + CBitFieldMaskBit45 = 0x40000 + CBitFieldMaskBit46 = 0x20000 + CBitFieldMaskBit47 = 0x10000 + CBitFieldMaskBit48 = 0x8000 + CBitFieldMaskBit49 = 0x4000 + CBitFieldMaskBit50 = 0x2000 + CBitFieldMaskBit51 = 0x1000 + CBitFieldMaskBit52 = 0x800 + CBitFieldMaskBit53 = 0x400 + CBitFieldMaskBit54 = 0x200 + CBitFieldMaskBit55 = 0x100 + CBitFieldMaskBit56 = 0x80 + CBitFieldMaskBit57 = 0x40 + CBitFieldMaskBit58 = 0x20 + CBitFieldMaskBit59 = 0x10 + CBitFieldMaskBit60 = 0x8 + CBitFieldMaskBit61 = 0x4 + CBitFieldMaskBit62 = 0x2 + CBitFieldMaskBit63 = 0x1 +) + +type SockaddrStorage struct { + Family uint16 + _ [118]uint8 + _ uint64 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + Start uint64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +type TpacketHdr struct { + Status uint64 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 + _ [4]byte +} + +const ( + SizeofTpacketHdr = 0x20 +) + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int64 +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x20001269 +) + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 + Flags uint32 + _ [4]byte +} + +type CryptoUserAlg struct { + Name [64]uint8 + Driver_name [64]uint8 + Module_name [64]uint8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]uint8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]uint8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]uint8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]uint8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]uint8 +} + +type CryptoReportLarval struct { + Type [64]uint8 +} + +type CryptoReportHash struct { + Type [64]uint8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]uint8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]uint8 + Geniv [64]uint8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]uint8 + Geniv [64]uint8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]uint8 +} + +type CryptoReportRNG struct { + Type [64]uint8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]uint8 +} + +type CryptoReportKPP struct { + Type [64]uint8 +} + +type CryptoReportAcomp struct { + Type [64]uint8 +} + +type LoopInfo struct { + Number int32 + Device uint64 + Inode uint64 + Rdevice uint64 + Offset int32 + Encrypt_type int32 + Encrypt_key_size int32 + Flags int32 + Name [64]uint8 + Encrypt_key [32]uint8 + Init [2]uint64 + Reserved [4]uint8 + _ [4]byte +} + +type TIPCSubscr struct { + Seq TIPCServiceRange + Timeout uint32 + Filter uint32 + Handle [8]uint8 +} + +type TIPCSIOCLNReq struct { + Peer uint32 + Id uint32 + Linkname [68]uint8 +} + +type TIPCSIOCNodeIDReq struct { + Peer uint32 + Id [16]uint8 +} + +type PPSKInfo struct { + Assert_sequence uint32 + Clear_sequence uint32 + Assert_tu PPSKTime + Clear_tu PPSKTime + Current_mode int32 + _ [4]byte +} + +const ( + PPS_GETPARAMS = 0x400870a1 + PPS_SETPARAMS = 0x800870a2 + PPS_GETCAP = 0x400870a3 + PPS_FETCH = 0xc00870a4 +) + +const ( + PIDFD_NONBLOCK = 0x800 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + Seq uint32 + _ uint32 + _ uint64 + _ uint64 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Atime int64 + Dtime int64 + Ctime int64 + Segsz uint64 + Cpid int32 + Lpid int32 + Nattch uint64 + _ uint64 + _ 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 new file mode 100644 index 0000000..5d2c90e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -0,0 +1,687 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build ppc64le && linux +// +build ppc64le,linux + +package unix + +const ( + SizeofPtr = 0x8 + SizeofLong = 0x8 +) + +type ( + _C_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + _ [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint32 + Uid uint32 + Gid uint32 + _ int32 + Rdev uint64 + Size int64 + Blksize int64 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + _ uint64 + _ uint64 + _ uint64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]uint8 + _ [5]byte +} + +type Flock_t struct { + Type int16 + Whence int16 + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type DmNameList struct { + Dev uint64 + Next uint32 + Name [0]byte + _ [4]byte +} + +const ( + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint64 +} + +type RawSockaddr struct { + Family uint16 + Data [14]uint8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]uint8 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type ifreq struct { + Ifrn [16]byte + Ifru [24]byte +} + +const ( + SizeofSockaddrNFCLLCP = 0x60 + SizeofIovec = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 +) + +const ( + SizeofSockFprog = 0x10 +) + +type PtraceRegs struct { + Gpr [32]uint64 + Nip uint64 + Msr uint64 + Orig_gpr3 uint64 + Ctr uint64 + Link uint64 + Xer uint64 + Ccr uint64 + Softe uint64 + Trap uint64 + Dar uint64 + Dsisr uint64 + Result uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + _ [0]uint8 + _ [4]byte +} + +type Ustat_t struct { + Tfree int32 + Tinode uint64 + Fname [6]uint8 + Fpack [6]uint8 + _ [4]byte +} + +type EpollEvent struct { + Events uint32 + _ int32 + Fd int32 + Pad int32 +} + +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + +const ( + POLLRDHUP = 0x2000 +) + +type Sigset_t struct { + Val [16]uint64 +} + +const _C__NSIG = 0x41 + +type Siginfo struct { + Signo int32 + Errno int32 + Code int32 + _ int32 + _ [112]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [19]uint8 + Line uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Taskstats struct { + Version uint16 + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]uint8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 + Thrashing_count uint64 + Thrashing_delay_total uint64 + Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 +} + +type cpuMask uint64 + +const ( + _NCPUBITS = 0x40 +) + +const ( + CBitFieldMaskBit0 = 0x1 + CBitFieldMaskBit1 = 0x2 + CBitFieldMaskBit2 = 0x4 + CBitFieldMaskBit3 = 0x8 + CBitFieldMaskBit4 = 0x10 + CBitFieldMaskBit5 = 0x20 + CBitFieldMaskBit6 = 0x40 + CBitFieldMaskBit7 = 0x80 + CBitFieldMaskBit8 = 0x100 + CBitFieldMaskBit9 = 0x200 + CBitFieldMaskBit10 = 0x400 + CBitFieldMaskBit11 = 0x800 + CBitFieldMaskBit12 = 0x1000 + CBitFieldMaskBit13 = 0x2000 + CBitFieldMaskBit14 = 0x4000 + CBitFieldMaskBit15 = 0x8000 + CBitFieldMaskBit16 = 0x10000 + CBitFieldMaskBit17 = 0x20000 + CBitFieldMaskBit18 = 0x40000 + CBitFieldMaskBit19 = 0x80000 + CBitFieldMaskBit20 = 0x100000 + CBitFieldMaskBit21 = 0x200000 + CBitFieldMaskBit22 = 0x400000 + CBitFieldMaskBit23 = 0x800000 + CBitFieldMaskBit24 = 0x1000000 + CBitFieldMaskBit25 = 0x2000000 + CBitFieldMaskBit26 = 0x4000000 + CBitFieldMaskBit27 = 0x8000000 + CBitFieldMaskBit28 = 0x10000000 + CBitFieldMaskBit29 = 0x20000000 + CBitFieldMaskBit30 = 0x40000000 + CBitFieldMaskBit31 = 0x80000000 + CBitFieldMaskBit32 = 0x100000000 + CBitFieldMaskBit33 = 0x200000000 + CBitFieldMaskBit34 = 0x400000000 + CBitFieldMaskBit35 = 0x800000000 + CBitFieldMaskBit36 = 0x1000000000 + CBitFieldMaskBit37 = 0x2000000000 + CBitFieldMaskBit38 = 0x4000000000 + CBitFieldMaskBit39 = 0x8000000000 + CBitFieldMaskBit40 = 0x10000000000 + CBitFieldMaskBit41 = 0x20000000000 + CBitFieldMaskBit42 = 0x40000000000 + CBitFieldMaskBit43 = 0x80000000000 + CBitFieldMaskBit44 = 0x100000000000 + CBitFieldMaskBit45 = 0x200000000000 + CBitFieldMaskBit46 = 0x400000000000 + CBitFieldMaskBit47 = 0x800000000000 + CBitFieldMaskBit48 = 0x1000000000000 + CBitFieldMaskBit49 = 0x2000000000000 + CBitFieldMaskBit50 = 0x4000000000000 + CBitFieldMaskBit51 = 0x8000000000000 + CBitFieldMaskBit52 = 0x10000000000000 + CBitFieldMaskBit53 = 0x20000000000000 + CBitFieldMaskBit54 = 0x40000000000000 + CBitFieldMaskBit55 = 0x80000000000000 + CBitFieldMaskBit56 = 0x100000000000000 + CBitFieldMaskBit57 = 0x200000000000000 + CBitFieldMaskBit58 = 0x400000000000000 + CBitFieldMaskBit59 = 0x800000000000000 + CBitFieldMaskBit60 = 0x1000000000000000 + CBitFieldMaskBit61 = 0x2000000000000000 + CBitFieldMaskBit62 = 0x4000000000000000 + CBitFieldMaskBit63 = 0x8000000000000000 +) + +type SockaddrStorage struct { + Family uint16 + _ [118]uint8 + _ uint64 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + Start uint64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +type TpacketHdr struct { + Status uint64 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 + _ [4]byte +} + +const ( + SizeofTpacketHdr = 0x20 +) + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int64 +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x20001269 +) + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 + Flags uint32 + _ [4]byte +} + +type CryptoUserAlg struct { + Name [64]uint8 + Driver_name [64]uint8 + Module_name [64]uint8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]uint8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]uint8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]uint8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]uint8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]uint8 +} + +type CryptoReportLarval struct { + Type [64]uint8 +} + +type CryptoReportHash struct { + Type [64]uint8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]uint8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]uint8 + Geniv [64]uint8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]uint8 + Geniv [64]uint8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]uint8 +} + +type CryptoReportRNG struct { + Type [64]uint8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]uint8 +} + +type CryptoReportKPP struct { + Type [64]uint8 +} + +type CryptoReportAcomp struct { + Type [64]uint8 +} + +type LoopInfo struct { + Number int32 + Device uint64 + Inode uint64 + Rdevice uint64 + Offset int32 + Encrypt_type int32 + Encrypt_key_size int32 + Flags int32 + Name [64]uint8 + Encrypt_key [32]uint8 + Init [2]uint64 + Reserved [4]uint8 + _ [4]byte +} + +type TIPCSubscr struct { + Seq TIPCServiceRange + Timeout uint32 + Filter uint32 + Handle [8]uint8 +} + +type TIPCSIOCLNReq struct { + Peer uint32 + Id uint32 + Linkname [68]uint8 +} + +type TIPCSIOCNodeIDReq struct { + Peer uint32 + Id [16]uint8 +} + +type PPSKInfo struct { + Assert_sequence uint32 + Clear_sequence uint32 + Assert_tu PPSKTime + Clear_tu PPSKTime + Current_mode int32 + _ [4]byte +} + +const ( + PPS_GETPARAMS = 0x400870a1 + PPS_SETPARAMS = 0x800870a2 + PPS_GETCAP = 0x400870a3 + PPS_FETCH = 0xc00870a4 +) + +const ( + PIDFD_NONBLOCK = 0x800 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + Seq uint32 + _ uint32 + _ uint64 + _ uint64 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Atime int64 + Dtime int64 + Ctime int64 + Segsz uint64 + Cpid int32 + Lpid int32 + Nattch uint64 + _ uint64 + _ 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 new file mode 100644 index 0000000..e173cb5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go @@ -0,0 +1,706 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build riscv64 && linux +// +build riscv64,linux + +package unix + +const ( + SizeofPtr = 0x8 + SizeofLong = 0x8 +) + +type ( + _C_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + _ [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Stat_t struct { + Dev uint64 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + _ uint64 + Size int64 + Blksize int32 + _ int32 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + _ [2]int32 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]uint8 + _ [5]byte +} + +type Flock_t struct { + Type int16 + Whence int16 + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type DmNameList struct { + Dev uint64 + Next uint32 + Name [0]byte + _ [4]byte +} + +const ( + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint64 +} + +type RawSockaddr struct { + Family uint16 + Data [14]uint8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]uint8 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type ifreq struct { + Ifrn [16]byte + Ifru [24]byte +} + +const ( + SizeofSockaddrNFCLLCP = 0x60 + SizeofIovec = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 +) + +const ( + SizeofSockFprog = 0x10 +) + +type PtraceRegs struct { + Pc uint64 + Ra uint64 + Sp uint64 + Gp uint64 + Tp uint64 + T0 uint64 + T1 uint64 + T2 uint64 + S0 uint64 + S1 uint64 + A0 uint64 + A1 uint64 + A2 uint64 + A3 uint64 + A4 uint64 + A5 uint64 + A6 uint64 + A7 uint64 + S2 uint64 + S3 uint64 + S4 uint64 + S5 uint64 + S6 uint64 + S7 uint64 + S8 uint64 + S9 uint64 + S10 uint64 + S11 uint64 + T3 uint64 + T4 uint64 + T5 uint64 + T6 uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + _ [0]uint8 + _ [4]byte +} + +type Ustat_t struct { + Tfree int32 + Tinode uint64 + Fname [6]uint8 + Fpack [6]uint8 + _ [4]byte +} + +type EpollEvent struct { + Events uint32 + _ int32 + Fd int32 + Pad int32 +} + +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + +const ( + POLLRDHUP = 0x2000 +) + +type Sigset_t struct { + Val [16]uint64 +} + +const _C__NSIG = 0x41 + +type Siginfo struct { + Signo int32 + Errno int32 + Code int32 + _ int32 + _ [112]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Taskstats struct { + Version uint16 + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]uint8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 + Thrashing_count uint64 + Thrashing_delay_total uint64 + Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 +} + +type cpuMask uint64 + +const ( + _NCPUBITS = 0x40 +) + +const ( + CBitFieldMaskBit0 = 0x1 + CBitFieldMaskBit1 = 0x2 + CBitFieldMaskBit2 = 0x4 + CBitFieldMaskBit3 = 0x8 + CBitFieldMaskBit4 = 0x10 + CBitFieldMaskBit5 = 0x20 + CBitFieldMaskBit6 = 0x40 + CBitFieldMaskBit7 = 0x80 + CBitFieldMaskBit8 = 0x100 + CBitFieldMaskBit9 = 0x200 + CBitFieldMaskBit10 = 0x400 + CBitFieldMaskBit11 = 0x800 + CBitFieldMaskBit12 = 0x1000 + CBitFieldMaskBit13 = 0x2000 + CBitFieldMaskBit14 = 0x4000 + CBitFieldMaskBit15 = 0x8000 + CBitFieldMaskBit16 = 0x10000 + CBitFieldMaskBit17 = 0x20000 + CBitFieldMaskBit18 = 0x40000 + CBitFieldMaskBit19 = 0x80000 + CBitFieldMaskBit20 = 0x100000 + CBitFieldMaskBit21 = 0x200000 + CBitFieldMaskBit22 = 0x400000 + CBitFieldMaskBit23 = 0x800000 + CBitFieldMaskBit24 = 0x1000000 + CBitFieldMaskBit25 = 0x2000000 + CBitFieldMaskBit26 = 0x4000000 + CBitFieldMaskBit27 = 0x8000000 + CBitFieldMaskBit28 = 0x10000000 + CBitFieldMaskBit29 = 0x20000000 + CBitFieldMaskBit30 = 0x40000000 + CBitFieldMaskBit31 = 0x80000000 + CBitFieldMaskBit32 = 0x100000000 + CBitFieldMaskBit33 = 0x200000000 + CBitFieldMaskBit34 = 0x400000000 + CBitFieldMaskBit35 = 0x800000000 + CBitFieldMaskBit36 = 0x1000000000 + CBitFieldMaskBit37 = 0x2000000000 + CBitFieldMaskBit38 = 0x4000000000 + CBitFieldMaskBit39 = 0x8000000000 + CBitFieldMaskBit40 = 0x10000000000 + CBitFieldMaskBit41 = 0x20000000000 + CBitFieldMaskBit42 = 0x40000000000 + CBitFieldMaskBit43 = 0x80000000000 + CBitFieldMaskBit44 = 0x100000000000 + CBitFieldMaskBit45 = 0x200000000000 + CBitFieldMaskBit46 = 0x400000000000 + CBitFieldMaskBit47 = 0x800000000000 + CBitFieldMaskBit48 = 0x1000000000000 + CBitFieldMaskBit49 = 0x2000000000000 + CBitFieldMaskBit50 = 0x4000000000000 + CBitFieldMaskBit51 = 0x8000000000000 + CBitFieldMaskBit52 = 0x10000000000000 + CBitFieldMaskBit53 = 0x20000000000000 + CBitFieldMaskBit54 = 0x40000000000000 + CBitFieldMaskBit55 = 0x80000000000000 + CBitFieldMaskBit56 = 0x100000000000000 + CBitFieldMaskBit57 = 0x200000000000000 + CBitFieldMaskBit58 = 0x400000000000000 + CBitFieldMaskBit59 = 0x800000000000000 + CBitFieldMaskBit60 = 0x1000000000000000 + CBitFieldMaskBit61 = 0x2000000000000000 + CBitFieldMaskBit62 = 0x4000000000000000 + CBitFieldMaskBit63 = 0x8000000000000000 +) + +type SockaddrStorage struct { + Family uint16 + _ [118]uint8 + _ uint64 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + Start uint64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +type TpacketHdr struct { + Status uint64 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 + _ [4]byte +} + +const ( + SizeofTpacketHdr = 0x20 +) + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int64 +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x1269 +) + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 + Flags uint32 + _ [4]byte +} + +type CryptoUserAlg struct { + Name [64]uint8 + Driver_name [64]uint8 + Module_name [64]uint8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]uint8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]uint8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]uint8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]uint8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]uint8 +} + +type CryptoReportLarval struct { + Type [64]uint8 +} + +type CryptoReportHash struct { + Type [64]uint8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]uint8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]uint8 + Geniv [64]uint8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]uint8 + Geniv [64]uint8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]uint8 +} + +type CryptoReportRNG struct { + Type [64]uint8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]uint8 +} + +type CryptoReportKPP struct { + Type [64]uint8 +} + +type CryptoReportAcomp struct { + Type [64]uint8 +} + +type LoopInfo struct { + Number int32 + Device uint32 + Inode uint64 + Rdevice uint32 + Offset int32 + Encrypt_type int32 + Encrypt_key_size int32 + Flags int32 + Name [64]uint8 + Encrypt_key [32]uint8 + Init [2]uint64 + Reserved [4]uint8 + _ [4]byte +} + +type TIPCSubscr struct { + Seq TIPCServiceRange + Timeout uint32 + Filter uint32 + Handle [8]uint8 +} + +type TIPCSIOCLNReq struct { + Peer uint32 + Id uint32 + Linkname [68]uint8 +} + +type TIPCSIOCNodeIDReq struct { + Peer uint32 + Id [16]uint8 +} + +type PPSKInfo struct { + Assert_sequence uint32 + Clear_sequence uint32 + Assert_tu PPSKTime + Clear_tu PPSKTime + Current_mode int32 + _ [4]byte +} + +const ( + PPS_GETPARAMS = 0x800870a1 + PPS_SETPARAMS = 0x400870a2 + PPS_GETCAP = 0x800870a3 + PPS_FETCH = 0xc00870a4 +) + +const ( + PIDFD_NONBLOCK = 0x800 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + _ [0]uint8 + Seq uint16 + _ uint16 + _ uint64 + _ uint64 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint64 + Atime int64 + Dtime int64 + Ctime int64 + Cpid int32 + Lpid int32 + Nattch uint64 + _ uint64 + _ 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 new file mode 100644 index 0000000..6106715 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -0,0 +1,701 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build s390x && linux +// +build s390x,linux + +package unix + +const ( + SizeofPtr = 0x8 + SizeofLong = 0x8 +) + +type ( + _C_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + _ [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint32 + Uid uint32 + Gid uint32 + _ int32 + Rdev uint64 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize int64 + Blocks int64 + _ [3]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte +} + +type Flock_t struct { + Type int16 + Whence int16 + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type DmNameList struct { + Dev uint64 + Next uint32 + Name [0]byte + _ [4]byte +} + +const ( + FADV_DONTNEED = 0x6 + FADV_NOREUSE = 0x7 +) + +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint64 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type ifreq struct { + Ifrn [16]byte + Ifru [24]byte +} + +const ( + SizeofSockaddrNFCLLCP = 0x60 + SizeofIovec = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 +) + +const ( + SizeofSockFprog = 0x10 +) + +type PtraceRegs struct { + Psw PtracePsw + Gprs [16]uint64 + Acrs [16]uint32 + Orig_gpr2 uint64 + Fp_regs PtraceFpregs + Per_info PtracePer + Ieee_instruction_pointer uint64 +} + +type PtracePsw struct { + Mask uint64 + Addr uint64 +} + +type PtraceFpregs struct { + Fpc uint32 + Fprs [16]float64 +} + +type PtracePer struct { + Control_regs [3]uint64 + _ [8]byte + Starting_addr uint64 + Ending_addr uint64 + Perc_atmid uint16 + Address uint64 + Access_id uint8 + _ [7]byte +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + _ [0]int8 + _ [4]byte +} + +type Ustat_t struct { + Tfree int32 + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + _ [4]byte +} + +type EpollEvent struct { + Events uint32 + _ int32 + Fd int32 + Pad int32 +} + +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + +const ( + POLLRDHUP = 0x2000 +) + +type Sigset_t struct { + Val [16]uint64 +} + +const _C__NSIG = 0x41 + +type Siginfo struct { + Signo int32 + Errno int32 + Code int32 + _ int32 + _ [112]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Taskstats struct { + Version uint16 + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 + Thrashing_count uint64 + Thrashing_delay_total uint64 + Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 +} + +type cpuMask uint64 + +const ( + _NCPUBITS = 0x40 +) + +const ( + CBitFieldMaskBit0 = 0x8000000000000000 + CBitFieldMaskBit1 = 0x4000000000000000 + CBitFieldMaskBit2 = 0x2000000000000000 + CBitFieldMaskBit3 = 0x1000000000000000 + CBitFieldMaskBit4 = 0x800000000000000 + CBitFieldMaskBit5 = 0x400000000000000 + CBitFieldMaskBit6 = 0x200000000000000 + CBitFieldMaskBit7 = 0x100000000000000 + CBitFieldMaskBit8 = 0x80000000000000 + CBitFieldMaskBit9 = 0x40000000000000 + CBitFieldMaskBit10 = 0x20000000000000 + CBitFieldMaskBit11 = 0x10000000000000 + CBitFieldMaskBit12 = 0x8000000000000 + CBitFieldMaskBit13 = 0x4000000000000 + CBitFieldMaskBit14 = 0x2000000000000 + CBitFieldMaskBit15 = 0x1000000000000 + CBitFieldMaskBit16 = 0x800000000000 + CBitFieldMaskBit17 = 0x400000000000 + CBitFieldMaskBit18 = 0x200000000000 + CBitFieldMaskBit19 = 0x100000000000 + CBitFieldMaskBit20 = 0x80000000000 + CBitFieldMaskBit21 = 0x40000000000 + CBitFieldMaskBit22 = 0x20000000000 + CBitFieldMaskBit23 = 0x10000000000 + CBitFieldMaskBit24 = 0x8000000000 + CBitFieldMaskBit25 = 0x4000000000 + CBitFieldMaskBit26 = 0x2000000000 + CBitFieldMaskBit27 = 0x1000000000 + CBitFieldMaskBit28 = 0x800000000 + CBitFieldMaskBit29 = 0x400000000 + CBitFieldMaskBit30 = 0x200000000 + CBitFieldMaskBit31 = 0x100000000 + CBitFieldMaskBit32 = 0x80000000 + CBitFieldMaskBit33 = 0x40000000 + CBitFieldMaskBit34 = 0x20000000 + CBitFieldMaskBit35 = 0x10000000 + CBitFieldMaskBit36 = 0x8000000 + CBitFieldMaskBit37 = 0x4000000 + CBitFieldMaskBit38 = 0x2000000 + CBitFieldMaskBit39 = 0x1000000 + CBitFieldMaskBit40 = 0x800000 + CBitFieldMaskBit41 = 0x400000 + CBitFieldMaskBit42 = 0x200000 + CBitFieldMaskBit43 = 0x100000 + CBitFieldMaskBit44 = 0x80000 + CBitFieldMaskBit45 = 0x40000 + CBitFieldMaskBit46 = 0x20000 + CBitFieldMaskBit47 = 0x10000 + CBitFieldMaskBit48 = 0x8000 + CBitFieldMaskBit49 = 0x4000 + CBitFieldMaskBit50 = 0x2000 + CBitFieldMaskBit51 = 0x1000 + CBitFieldMaskBit52 = 0x800 + CBitFieldMaskBit53 = 0x400 + CBitFieldMaskBit54 = 0x200 + CBitFieldMaskBit55 = 0x100 + CBitFieldMaskBit56 = 0x80 + CBitFieldMaskBit57 = 0x40 + CBitFieldMaskBit58 = 0x20 + CBitFieldMaskBit59 = 0x10 + CBitFieldMaskBit60 = 0x8 + CBitFieldMaskBit61 = 0x4 + CBitFieldMaskBit62 = 0x2 + CBitFieldMaskBit63 = 0x1 +) + +type SockaddrStorage struct { + Family uint16 + _ [118]int8 + _ uint64 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + Start uint64 +} + +type Statfs_t struct { + Type uint32 + Bsize uint32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen uint32 + Frsize uint32 + Flags uint32 + Spare [4]uint32 + _ [4]byte +} + +type TpacketHdr struct { + Status uint64 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 + _ [4]byte +} + +const ( + SizeofTpacketHdr = 0x20 +) + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int64 +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x1269 +) + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 + Flags uint32 + _ [4]byte +} + +type CryptoUserAlg struct { + Name [64]int8 + Driver_name [64]int8 + Module_name [64]int8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]int8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]int8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]int8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]int8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]int8 +} + +type CryptoReportLarval struct { + Type [64]int8 +} + +type CryptoReportHash struct { + Type [64]int8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]int8 +} + +type CryptoReportRNG struct { + Type [64]int8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]int8 +} + +type CryptoReportKPP struct { + Type [64]int8 +} + +type CryptoReportAcomp struct { + Type [64]int8 +} + +type LoopInfo struct { + Number int32 + Device uint16 + Inode uint64 + Rdevice uint16 + Offset int32 + Encrypt_type int32 + Encrypt_key_size int32 + Flags int32 + Name [64]int8 + Encrypt_key [32]uint8 + Init [2]uint64 + Reserved [4]int8 + _ [4]byte +} + +type TIPCSubscr struct { + Seq TIPCServiceRange + Timeout uint32 + Filter uint32 + Handle [8]int8 +} + +type TIPCSIOCLNReq struct { + Peer uint32 + Id uint32 + Linkname [68]int8 +} + +type TIPCSIOCNodeIDReq struct { + Peer uint32 + Id [16]int8 +} + +type PPSKInfo struct { + Assert_sequence uint32 + Clear_sequence uint32 + Assert_tu PPSKTime + Clear_tu PPSKTime + Current_mode int32 + _ [4]byte +} + +const ( + PPS_GETPARAMS = 0x800870a1 + PPS_SETPARAMS = 0x400870a2 + PPS_GETCAP = 0x800870a3 + PPS_FETCH = 0xc00870a4 +) + +const ( + PIDFD_NONBLOCK = 0x800 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + _ uint16 + Seq uint16 + _ uint64 + _ uint64 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint64 + Atime int64 + Dtime int64 + Ctime int64 + Cpid int32 + Lpid int32 + Nattch uint64 + _ uint64 + _ 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 new file mode 100644 index 0000000..ca7b37b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -0,0 +1,682 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build sparc64 && linux +// +build sparc64,linux + +package unix + +const ( + SizeofPtr = 0x8 + SizeofLong = 0x8 +) + +type ( + _C_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int32 + _ [4]byte +} + +type Timex struct { + Modes uint32 + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + _ [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Stat_t struct { + Dev uint64 + _ uint16 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + _ uint16 + Size int64 + Blksize int64 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + _ uint64 + _ uint64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte +} + +type Flock_t struct { + Type int16 + Whence int16 + Start int64 + Len int64 + Pid int32 + _ int16 + _ [2]byte +} + +type DmNameList struct { + Dev uint64 + Next uint32 + Name [0]byte + _ [4]byte +} + +const ( + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint64 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type ifreq struct { + Ifrn [16]byte + Ifru [24]byte +} + +const ( + SizeofSockaddrNFCLLCP = 0x60 + SizeofIovec = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 +) + +const ( + SizeofSockFprog = 0x10 +) + +type PtraceRegs struct { + Regs [16]uint64 + Tstate uint64 + Tpc uint64 + Tnpc uint64 + Y uint32 + Magic uint32 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + _ [0]int8 + _ [4]byte +} + +type Ustat_t struct { + Tfree int32 + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + _ [4]byte +} + +type EpollEvent struct { + Events uint32 + _ int32 + Fd int32 + Pad int32 +} + +const ( + OPEN_TREE_CLOEXEC = 0x400000 +) + +const ( + POLLRDHUP = 0x800 +) + +type Sigset_t struct { + Val [16]uint64 +} + +const _C__NSIG = 0x41 + +type Siginfo struct { + Signo int32 + Errno int32 + Code int32 + _ int32 + _ [112]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Taskstats struct { + Version uint16 + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 + Thrashing_count uint64 + Thrashing_delay_total uint64 + Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 +} + +type cpuMask uint64 + +const ( + _NCPUBITS = 0x40 +) + +const ( + CBitFieldMaskBit0 = 0x8000000000000000 + CBitFieldMaskBit1 = 0x4000000000000000 + CBitFieldMaskBit2 = 0x2000000000000000 + CBitFieldMaskBit3 = 0x1000000000000000 + CBitFieldMaskBit4 = 0x800000000000000 + CBitFieldMaskBit5 = 0x400000000000000 + CBitFieldMaskBit6 = 0x200000000000000 + CBitFieldMaskBit7 = 0x100000000000000 + CBitFieldMaskBit8 = 0x80000000000000 + CBitFieldMaskBit9 = 0x40000000000000 + CBitFieldMaskBit10 = 0x20000000000000 + CBitFieldMaskBit11 = 0x10000000000000 + CBitFieldMaskBit12 = 0x8000000000000 + CBitFieldMaskBit13 = 0x4000000000000 + CBitFieldMaskBit14 = 0x2000000000000 + CBitFieldMaskBit15 = 0x1000000000000 + CBitFieldMaskBit16 = 0x800000000000 + CBitFieldMaskBit17 = 0x400000000000 + CBitFieldMaskBit18 = 0x200000000000 + CBitFieldMaskBit19 = 0x100000000000 + CBitFieldMaskBit20 = 0x80000000000 + CBitFieldMaskBit21 = 0x40000000000 + CBitFieldMaskBit22 = 0x20000000000 + CBitFieldMaskBit23 = 0x10000000000 + CBitFieldMaskBit24 = 0x8000000000 + CBitFieldMaskBit25 = 0x4000000000 + CBitFieldMaskBit26 = 0x2000000000 + CBitFieldMaskBit27 = 0x1000000000 + CBitFieldMaskBit28 = 0x800000000 + CBitFieldMaskBit29 = 0x400000000 + CBitFieldMaskBit30 = 0x200000000 + CBitFieldMaskBit31 = 0x100000000 + CBitFieldMaskBit32 = 0x80000000 + CBitFieldMaskBit33 = 0x40000000 + CBitFieldMaskBit34 = 0x20000000 + CBitFieldMaskBit35 = 0x10000000 + CBitFieldMaskBit36 = 0x8000000 + CBitFieldMaskBit37 = 0x4000000 + CBitFieldMaskBit38 = 0x2000000 + CBitFieldMaskBit39 = 0x1000000 + CBitFieldMaskBit40 = 0x800000 + CBitFieldMaskBit41 = 0x400000 + CBitFieldMaskBit42 = 0x200000 + CBitFieldMaskBit43 = 0x100000 + CBitFieldMaskBit44 = 0x80000 + CBitFieldMaskBit45 = 0x40000 + CBitFieldMaskBit46 = 0x20000 + CBitFieldMaskBit47 = 0x10000 + CBitFieldMaskBit48 = 0x8000 + CBitFieldMaskBit49 = 0x4000 + CBitFieldMaskBit50 = 0x2000 + CBitFieldMaskBit51 = 0x1000 + CBitFieldMaskBit52 = 0x800 + CBitFieldMaskBit53 = 0x400 + CBitFieldMaskBit54 = 0x200 + CBitFieldMaskBit55 = 0x100 + CBitFieldMaskBit56 = 0x80 + CBitFieldMaskBit57 = 0x40 + CBitFieldMaskBit58 = 0x20 + CBitFieldMaskBit59 = 0x10 + CBitFieldMaskBit60 = 0x8 + CBitFieldMaskBit61 = 0x4 + CBitFieldMaskBit62 = 0x2 + CBitFieldMaskBit63 = 0x1 +) + +type SockaddrStorage struct { + Family uint16 + _ [118]int8 + _ uint64 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + Start uint64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +type TpacketHdr struct { + Status uint64 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 + _ [4]byte +} + +const ( + SizeofTpacketHdr = 0x20 +) + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int64 +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x20001269 +) + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 + Flags uint32 + _ [4]byte +} + +type CryptoUserAlg struct { + Name [64]int8 + Driver_name [64]int8 + Module_name [64]int8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]int8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]int8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]int8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]int8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]int8 +} + +type CryptoReportLarval struct { + Type [64]int8 +} + +type CryptoReportHash struct { + Type [64]int8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]int8 +} + +type CryptoReportRNG struct { + Type [64]int8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]int8 +} + +type CryptoReportKPP struct { + Type [64]int8 +} + +type CryptoReportAcomp struct { + Type [64]int8 +} + +type LoopInfo struct { + Number int32 + Device uint32 + Inode uint64 + Rdevice uint32 + Offset int32 + Encrypt_type int32 + Encrypt_key_size int32 + Flags int32 + Name [64]int8 + Encrypt_key [32]uint8 + Init [2]uint64 + Reserved [4]int8 + _ [4]byte +} + +type TIPCSubscr struct { + Seq TIPCServiceRange + Timeout uint32 + Filter uint32 + Handle [8]int8 +} + +type TIPCSIOCLNReq struct { + Peer uint32 + Id uint32 + Linkname [68]int8 +} + +type TIPCSIOCNodeIDReq struct { + Peer uint32 + Id [16]int8 +} + +type PPSKInfo struct { + Assert_sequence uint32 + Clear_sequence uint32 + Assert_tu PPSKTime + Clear_tu PPSKTime + Current_mode int32 + _ [4]byte +} + +const ( + PPS_GETPARAMS = 0x400870a1 + PPS_SETPARAMS = 0x800870a2 + PPS_GETCAP = 0x400870a3 + PPS_FETCH = 0xc00870a4 +) + +const ( + PIDFD_NONBLOCK = 0x4000 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + _ uint16 + Seq uint16 + _ uint64 + _ uint64 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Atime int64 + Dtime int64 + Ctime int64 + Segsz uint64 + Cpid int32 + Lpid int32 + Nattch uint64 + _ uint64 + _ uint64 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go new file mode 100644 index 0000000..2fd2060 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go @@ -0,0 +1,502 @@ +// cgo -godefs types_netbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build 386 && netbsd +// +build 386,netbsd + +package unix + +const ( + SizeofPtr = 0x4 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x4 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 +} + +type Timeval struct { + Sec int64 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Mode uint32 + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Btim Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Spare [2]uint32 +} + +type Statfs_t [0]byte + +type Statvfs_t struct { + Flag uint32 + Bsize uint32 + Frsize uint32 + Iosize uint32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Bresvd uint64 + Files uint64 + Ffree uint64 + Favail uint64 + Fresvd uint64 + Syncreads uint64 + Syncwrites uint64 + Asyncreads uint64 + Asyncwrites uint64 + Fsidx Fsid + Fsid uint32 + Namemax uint32 + Owner uint32 + Spare [4]uint32 + Fstypename [32]byte + Mntonname [1024]byte + Mntfromname [1024]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [512]int8 + Pad_cgo_0 [3]byte +} + +type Fsid struct { + X__fsid_val [2]int32 +} + +const ( + PathMax = 0x400 +) + +const ( + ST_WAIT = 0x1 + ST_NOWAIT = 0x2 +) + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface 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 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIovec = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter uint32 + Flags uint32 + Fflags uint32 + Data int64 + Udata int32 +} + +type FdSet struct { + Bits [8]uint32 +} + +const ( + SizeofIfMsghdr = 0x98 + SizeofIfData = 0x84 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x78 + SizeofRtMetrics = 0x50 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData + Pad_cgo_1 [4]byte +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Pad_cgo_0 [1]byte + Link_state int32 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Lastchange Timespec +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Metric int32 + Index uint16 + Pad_cgo_0 [6]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits int32 + Pad_cgo_1 [4]byte + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Hopcount uint64 + Recvpipe uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Expire int64 + Pksent int64 +} + +type Mclpool [0]byte + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x80 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint64 + Drop uint64 + Capt uint64 + Padding [13]uint64 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfTimeval struct { + Sec int32 + Usec int32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Ptmget struct { + Cfd int32 + Sfd int32 + Cn [1024]byte + Sn [1024]byte +} + +const ( + AT_FDCWD = -0x64 + AT_EACCESS = 0x100 + AT_SYMLINK_NOFOLLOW = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_REMOVEDIR = 0x800 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Sysctlnode struct { + Flags uint32 + Num int32 + Name [32]int8 + Ver uint32 + X__rsvd uint32 + Un [16]byte + X_sysctl_size [8]byte + X_sysctl_func [8]byte + X_sysctl_parent [8]byte + X_sysctl_desc [8]byte +} + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} + +const SizeofClockinfo = 0x14 + +type Clockinfo struct { + Hz int32 + Tick int32 + Tickadj int32 + Stathz int32 + Profhz int32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go new file mode 100644 index 0000000..6a5a1a8 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go @@ -0,0 +1,510 @@ +// cgo -godefs types_netbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build amd64 && netbsd +// +build amd64,netbsd + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int32 + Pad_cgo_0 [4]byte +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Mode uint32 + _ [4]byte + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + _ [4]byte + Rdev uint64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Btim Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Spare [2]uint32 + _ [4]byte +} + +type Statfs_t [0]byte + +type Statvfs_t struct { + Flag uint64 + Bsize uint64 + Frsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Bresvd uint64 + Files uint64 + Ffree uint64 + Favail uint64 + Fresvd uint64 + Syncreads uint64 + Syncwrites uint64 + Asyncreads uint64 + Asyncwrites uint64 + Fsidx Fsid + Fsid uint64 + Namemax uint64 + Owner uint32 + Spare [4]uint32 + Fstypename [32]byte + Mntonname [1024]byte + Mntfromname [1024]byte + _ [4]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [512]int8 + Pad_cgo_0 [3]byte +} + +type Fsid struct { + X__fsid_val [2]int32 +} + +const ( + PathMax = 0x400 +) + +const ( + ST_WAIT = 0x1 + ST_NOWAIT = 0x2 +) + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +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 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter uint32 + Flags uint32 + Fflags uint32 + Pad_cgo_0 [4]byte + Data int64 + Udata int64 +} + +type FdSet struct { + Bits [8]uint32 +} + +const ( + SizeofIfMsghdr = 0x98 + SizeofIfData = 0x88 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x78 + SizeofRtMetrics = 0x50 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Pad_cgo_0 [1]byte + Link_state int32 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Lastchange Timespec +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Metric int32 + Index uint16 + Pad_cgo_0 [6]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits int32 + Pad_cgo_1 [4]byte + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Hopcount uint64 + Recvpipe uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Expire int64 + Pksent int64 +} + +type Mclpool [0]byte + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x80 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint64 + Drop uint64 + Capt uint64 + Padding [13]uint64 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [6]byte +} + +type BpfTimeval struct { + Sec int64 + Usec int64 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Ptmget struct { + Cfd int32 + Sfd int32 + Cn [1024]byte + Sn [1024]byte +} + +const ( + AT_FDCWD = -0x64 + AT_EACCESS = 0x100 + AT_SYMLINK_NOFOLLOW = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_REMOVEDIR = 0x800 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Sysctlnode struct { + Flags uint32 + Num int32 + Name [32]int8 + Ver uint32 + X__rsvd uint32 + Un [16]byte + X_sysctl_size [8]byte + X_sysctl_func [8]byte + X_sysctl_parent [8]byte + X_sysctl_desc [8]byte +} + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} + +const SizeofClockinfo = 0x14 + +type Clockinfo struct { + Hz int32 + Tick int32 + Tickadj int32 + Stathz int32 + Profhz int32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go new file mode 100644 index 0000000..84cc8d0 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go @@ -0,0 +1,507 @@ +// cgo -godefs types_netbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm && netbsd +// +build arm,netbsd + +package unix + +const ( + SizeofPtr = 0x4 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x4 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 + Pad_cgo_0 [4]byte +} + +type Timeval struct { + Sec int64 + Usec int32 + Pad_cgo_0 [4]byte +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Mode uint32 + _ [4]byte + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + _ [4]byte + Rdev uint64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Btim Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Spare [2]uint32 + _ [4]byte +} + +type Statfs_t [0]byte + +type Statvfs_t struct { + Flag uint32 + Bsize uint32 + Frsize uint32 + Iosize uint32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Bresvd uint64 + Files uint64 + Ffree uint64 + Favail uint64 + Fresvd uint64 + Syncreads uint64 + Syncwrites uint64 + Asyncreads uint64 + Asyncwrites uint64 + Fsidx Fsid + Fsid uint32 + Namemax uint32 + Owner uint32 + Spare [4]uint32 + Fstypename [32]byte + Mntonname [1024]byte + Mntfromname [1024]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [512]int8 + Pad_cgo_0 [3]byte +} + +type Fsid struct { + X__fsid_val [2]int32 +} + +const ( + PathMax = 0x400 +) + +const ( + ST_WAIT = 0x1 + ST_NOWAIT = 0x2 +) + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface 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 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIovec = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter uint32 + Flags uint32 + Fflags uint32 + Data int64 + Udata int32 + Pad_cgo_0 [4]byte +} + +type FdSet struct { + Bits [8]uint32 +} + +const ( + SizeofIfMsghdr = 0x98 + SizeofIfData = 0x88 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x78 + SizeofRtMetrics = 0x50 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Pad_cgo_0 [1]byte + Link_state int32 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Lastchange Timespec +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Metric int32 + Index uint16 + Pad_cgo_0 [6]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits int32 + Pad_cgo_1 [4]byte + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Hopcount uint64 + Recvpipe uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Expire int64 + Pksent int64 +} + +type Mclpool [0]byte + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x80 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint64 + Drop uint64 + Capt uint64 + Padding [13]uint64 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfTimeval struct { + Sec int32 + Usec int32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Ptmget struct { + Cfd int32 + Sfd int32 + Cn [1024]byte + Sn [1024]byte +} + +const ( + AT_FDCWD = -0x64 + AT_EACCESS = 0x100 + AT_SYMLINK_NOFOLLOW = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_REMOVEDIR = 0x800 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Sysctlnode struct { + Flags uint32 + Num int32 + Name [32]int8 + Ver uint32 + X__rsvd uint32 + Un [16]byte + X_sysctl_size [8]byte + X_sysctl_func [8]byte + X_sysctl_parent [8]byte + X_sysctl_desc [8]byte +} + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} + +const SizeofClockinfo = 0x14 + +type Clockinfo struct { + Hz int32 + Tick int32 + Tickadj int32 + Stathz int32 + Profhz int32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go new file mode 100644 index 0000000..c844e70 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go @@ -0,0 +1,510 @@ +// cgo -godefs types_netbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm64 && netbsd +// +build arm64,netbsd + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int32 + Pad_cgo_0 [4]byte +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Mode uint32 + _ [4]byte + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + _ [4]byte + Rdev uint64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Btim Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Spare [2]uint32 + _ [4]byte +} + +type Statfs_t [0]byte + +type Statvfs_t struct { + Flag uint64 + Bsize uint64 + Frsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Bresvd uint64 + Files uint64 + Ffree uint64 + Favail uint64 + Fresvd uint64 + Syncreads uint64 + Syncwrites uint64 + Asyncreads uint64 + Asyncwrites uint64 + Fsidx Fsid + Fsid uint64 + Namemax uint64 + Owner uint32 + Spare [4]uint32 + Fstypename [32]byte + Mntonname [1024]byte + Mntfromname [1024]byte + _ [4]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [512]int8 + Pad_cgo_0 [3]byte +} + +type Fsid struct { + X__fsid_val [2]int32 +} + +const ( + PathMax = 0x400 +) + +const ( + ST_WAIT = 0x1 + ST_NOWAIT = 0x2 +) + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +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 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter uint32 + Flags uint32 + Fflags uint32 + Pad_cgo_0 [4]byte + Data int64 + Udata int64 +} + +type FdSet struct { + Bits [8]uint32 +} + +const ( + SizeofIfMsghdr = 0x98 + SizeofIfData = 0x88 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x78 + SizeofRtMetrics = 0x50 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Pad_cgo_0 [1]byte + Link_state int32 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Lastchange Timespec +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Metric int32 + Index uint16 + Pad_cgo_0 [6]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits int32 + Pad_cgo_1 [4]byte + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Hopcount uint64 + Recvpipe uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Expire int64 + Pksent int64 +} + +type Mclpool [0]byte + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x80 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint64 + Drop uint64 + Capt uint64 + Padding [13]uint64 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [6]byte +} + +type BpfTimeval struct { + Sec int64 + Usec int64 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Ptmget struct { + Cfd int32 + Sfd int32 + Cn [1024]byte + Sn [1024]byte +} + +const ( + AT_FDCWD = -0x64 + AT_EACCESS = 0x100 + AT_SYMLINK_NOFOLLOW = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_REMOVEDIR = 0x800 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Sysctlnode struct { + Flags uint32 + Num int32 + Name [32]int8 + Ver uint32 + X__rsvd uint32 + Un [16]byte + X_sysctl_size [8]byte + X_sysctl_func [8]byte + X_sysctl_parent [8]byte + X_sysctl_desc [8]byte +} + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} + +const SizeofClockinfo = 0x14 + +type Clockinfo struct { + Hz int32 + Tick int32 + Tickadj int32 + Stathz int32 + Profhz int32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go new file mode 100644 index 0000000..baf5fe6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go @@ -0,0 +1,574 @@ +// cgo -godefs types_openbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build 386 && openbsd +// +build 386,openbsd + +package unix + +const ( + SizeofPtr = 0x4 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x4 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 +} + +type Timeval struct { + Sec int64 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Mode uint32 + Dev int32 + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev int32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + X__st_birthtim Timespec +} + +type Statfs_t struct { + F_flags uint32 + F_bsize uint32 + F_iosize uint32 + F_blocks uint64 + F_bfree uint64 + F_bavail int64 + F_files uint64 + F_ffree uint64 + F_favail int64 + F_syncwrites uint64 + F_syncreads uint64 + F_asyncwrites uint64 + F_asyncreads uint64 + F_fsid Fsid + F_namemax uint32 + F_owner uint32 + F_ctime uint64 + F_fstypename [16]int8 + F_mntonname [90]int8 + F_mntfromname [90]int8 + F_mntfromspec [90]int8 + Pad_cgo_0 [2]byte + Mount_info [160]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Namlen uint8 + X__d_padding [4]uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + PathMax = 0x400 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [24]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface 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 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x20 + SizeofLinger = 0x8 + SizeofIovec = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]uint32 +} + +const ( + SizeofIfMsghdr = 0xec + SizeofIfData = 0xd4 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x1a + SizeofRtMsghdr = 0x60 + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Xflags int32 + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Mtu uint32 + Metric uint32 + Pad uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Capabilities uint32 + Lastchange Timeval + Mclpool [7]Mclpool +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Metric int32 +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + What uint16 + Name [16]int8 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Priority uint8 + Mpls uint8 + Addrs int32 + Flags int32 + Fmask int32 + Pid int32 + Seq int32 + Errno int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Pksent uint64 + Expire int64 + Locks uint32 + Mtu uint32 + Refcnt uint32 + Hopcount uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pad uint32 +} + +type Mclpool struct { + Grown int32 + Alive uint16 + Hwm uint16 + Cwm uint16 + Lwm uint16 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfTimeval struct { + Sec uint32 + Usec uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_EACCESS = 0x1 + AT_SYMLINK_NOFOLLOW = 0x2 + AT_SYMLINK_FOLLOW = 0x4 + AT_REMOVEDIR = 0x8 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Sigset_t uint32 + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} + +const SizeofUvmexp = 0x158 + +type Uvmexp struct { + Pagesize int32 + Pagemask int32 + Pageshift int32 + Npages int32 + Free int32 + Active int32 + Inactive int32 + Paging int32 + Wired int32 + Zeropages int32 + Reserve_pagedaemon int32 + Reserve_kernel int32 + Anonpages int32 + Vnodepages int32 + Vtextpages int32 + Freemin int32 + Freetarg int32 + Inactarg int32 + Wiredmax int32 + Anonmin int32 + Vtextmin int32 + Vnodemin int32 + Anonminpct int32 + Vtextminpct int32 + Vnodeminpct int32 + Nswapdev int32 + Swpages int32 + Swpginuse int32 + Swpgonly int32 + Nswget int32 + Nanon int32 + Nanonneeded int32 + Nfreeanon int32 + Faults int32 + Traps int32 + Intrs int32 + Swtch int32 + Softs int32 + Syscalls int32 + Pageins int32 + Obsolete_swapins int32 + Obsolete_swapouts int32 + Pgswapin int32 + Pgswapout int32 + Forks int32 + Forks_ppwait int32 + Forks_sharevm int32 + Pga_zerohit int32 + Pga_zeromiss int32 + Zeroaborts int32 + Fltnoram int32 + Fltnoanon int32 + Fltnoamap int32 + Fltpgwait int32 + Fltpgrele int32 + Fltrelck int32 + Fltrelckok int32 + Fltanget int32 + Fltanretry int32 + Fltamcopy int32 + Fltnamap int32 + Fltnomap int32 + Fltlget int32 + Fltget int32 + Flt_anon int32 + Flt_acow int32 + Flt_obj int32 + Flt_prcopy int32 + Flt_przero int32 + Pdwoke int32 + Pdrevs int32 + Pdswout int32 + Pdfreed int32 + Pdscans int32 + Pdanscan int32 + Pdobscan int32 + Pdreact int32 + Pdbusy int32 + Pdpageouts int32 + Pdpending int32 + Pddeact int32 + Pdreanon int32 + Pdrevnode int32 + Pdrevtext int32 + Fpswtch int32 + Kmapent int32 +} + +const SizeofClockinfo = 0x10 + +type Clockinfo struct { + Hz int32 + Tick int32 + Stathz int32 + Profhz int32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go new file mode 100644 index 0000000..e21ae8e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go @@ -0,0 +1,574 @@ +// cgo -godefs types_openbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build amd64 && openbsd +// +build amd64,openbsd + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Mode uint32 + Dev int32 + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev int32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + _ [4]byte + _ Timespec +} + +type Statfs_t struct { + F_flags uint32 + F_bsize uint32 + F_iosize uint32 + _ [4]byte + F_blocks uint64 + F_bfree uint64 + F_bavail int64 + F_files uint64 + F_ffree uint64 + F_favail int64 + F_syncwrites uint64 + F_syncreads uint64 + F_asyncwrites uint64 + F_asyncreads uint64 + F_fsid Fsid + F_namemax uint32 + F_owner uint32 + F_ctime uint64 + F_fstypename [16]int8 + F_mntonname [90]int8 + F_mntfromname [90]int8 + F_mntfromspec [90]int8 + _ [2]byte + Mount_info [160]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Namlen uint8 + _ [4]uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + PathMax = 0x400 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [24]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + _ [4]byte + Iov *Iovec + Iovlen uint32 + _ [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x20 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]uint32 +} + +const ( + SizeofIfMsghdr = 0xa8 + SizeofIfData = 0x90 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x1a + SizeofRtMsghdr = 0x60 + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Xflags int32 + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Mtu uint32 + Metric uint32 + Rdomain uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Oqdrops uint64 + Noproto uint64 + Capabilities uint32 + _ [4]byte + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Metric int32 +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + What uint16 + Name [16]int8 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Priority uint8 + Mpls uint8 + Addrs int32 + Flags int32 + Fmask int32 + Pid int32 + Seq int32 + Errno int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Pksent uint64 + Expire int64 + Locks uint32 + Mtu uint32 + Refcnt uint32 + Hopcount uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pad uint32 +} + +type Mclpool struct{} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + _ [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [2]byte +} + +type BpfTimeval struct { + Sec uint32 + Usec uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_EACCESS = 0x1 + AT_SYMLINK_NOFOLLOW = 0x2 + AT_SYMLINK_FOLLOW = 0x4 + AT_REMOVEDIR = 0x8 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Sigset_t uint32 + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} + +const SizeofUvmexp = 0x158 + +type Uvmexp struct { + Pagesize int32 + Pagemask int32 + Pageshift int32 + Npages int32 + Free int32 + Active int32 + Inactive int32 + Paging int32 + Wired int32 + Zeropages int32 + Reserve_pagedaemon int32 + Reserve_kernel int32 + Anonpages int32 + Vnodepages int32 + Vtextpages int32 + Freemin int32 + Freetarg int32 + Inactarg int32 + Wiredmax int32 + Anonmin int32 + Vtextmin int32 + Vnodemin int32 + Anonminpct int32 + Vtextminpct int32 + Vnodeminpct int32 + Nswapdev int32 + Swpages int32 + Swpginuse int32 + Swpgonly int32 + Nswget int32 + Nanon int32 + Nanonneeded int32 + Nfreeanon int32 + Faults int32 + Traps int32 + Intrs int32 + Swtch int32 + Softs int32 + Syscalls int32 + Pageins int32 + Obsolete_swapins int32 + Obsolete_swapouts int32 + Pgswapin int32 + Pgswapout int32 + Forks int32 + Forks_ppwait int32 + Forks_sharevm int32 + Pga_zerohit int32 + Pga_zeromiss int32 + Zeroaborts int32 + Fltnoram int32 + Fltnoanon int32 + Fltnoamap int32 + Fltpgwait int32 + Fltpgrele int32 + Fltrelck int32 + Fltrelckok int32 + Fltanget int32 + Fltanretry int32 + Fltamcopy int32 + Fltnamap int32 + Fltnomap int32 + Fltlget int32 + Fltget int32 + Flt_anon int32 + Flt_acow int32 + Flt_obj int32 + Flt_prcopy int32 + Flt_przero int32 + Pdwoke int32 + Pdrevs int32 + Pdswout int32 + Pdfreed int32 + Pdscans int32 + Pdanscan int32 + Pdobscan int32 + Pdreact int32 + Pdbusy int32 + Pdpageouts int32 + Pdpending int32 + Pddeact int32 + Pdreanon int32 + Pdrevnode int32 + Pdrevtext int32 + Fpswtch int32 + Kmapent int32 +} + +const SizeofClockinfo = 0x10 + +type Clockinfo struct { + Hz int32 + Tick int32 + Stathz int32 + Profhz int32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go new file mode 100644 index 0000000..f190651 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go @@ -0,0 +1,575 @@ +// cgo -godefs -- -fsigned-char types_openbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm && openbsd +// +build arm,openbsd + +package unix + +const ( + SizeofPtr = 0x4 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x4 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 + _ [4]byte +} + +type Timeval struct { + Sec int64 + Usec int32 + _ [4]byte +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Mode uint32 + Dev int32 + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev int32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + _ [4]byte + _ Timespec +} + +type Statfs_t struct { + F_flags uint32 + F_bsize uint32 + F_iosize uint32 + _ [4]byte + F_blocks uint64 + F_bfree uint64 + F_bavail int64 + F_files uint64 + F_ffree uint64 + F_favail int64 + F_syncwrites uint64 + F_syncreads uint64 + F_asyncwrites uint64 + F_asyncreads uint64 + F_fsid Fsid + F_namemax uint32 + F_owner uint32 + F_ctime uint64 + F_fstypename [16]int8 + F_mntonname [90]int8 + F_mntfromname [90]int8 + F_mntfromspec [90]int8 + _ [2]byte + Mount_info [160]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Namlen uint8 + _ [4]uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + PathMax = 0x400 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [24]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface 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 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x20 + SizeofLinger = 0x8 + SizeofIovec = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + _ [4]byte + Data int64 + Udata *byte + _ [4]byte +} + +type FdSet struct { + Bits [32]uint32 +} + +const ( + SizeofIfMsghdr = 0xa8 + SizeofIfData = 0x90 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x1a + SizeofRtMsghdr = 0x60 + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Xflags int32 + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Mtu uint32 + Metric uint32 + Rdomain uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Oqdrops uint64 + Noproto uint64 + Capabilities uint32 + _ [4]byte + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Metric int32 +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + What uint16 + Name [16]int8 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Priority uint8 + Mpls uint8 + Addrs int32 + Flags int32 + Fmask int32 + Pid int32 + Seq int32 + Errno int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Pksent uint64 + Expire int64 + Locks uint32 + Mtu uint32 + Refcnt uint32 + Hopcount uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pad uint32 +} + +type Mclpool struct{} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [2]byte +} + +type BpfTimeval struct { + Sec uint32 + Usec uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_EACCESS = 0x1 + AT_SYMLINK_NOFOLLOW = 0x2 + AT_SYMLINK_FOLLOW = 0x4 + AT_REMOVEDIR = 0x8 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Sigset_t uint32 + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} + +const SizeofUvmexp = 0x158 + +type Uvmexp struct { + Pagesize int32 + Pagemask int32 + Pageshift int32 + Npages int32 + Free int32 + Active int32 + Inactive int32 + Paging int32 + Wired int32 + Zeropages int32 + Reserve_pagedaemon int32 + Reserve_kernel int32 + Unused01 int32 + Vnodepages int32 + Vtextpages int32 + Freemin int32 + Freetarg int32 + Inactarg int32 + Wiredmax int32 + Anonmin int32 + Vtextmin int32 + Vnodemin int32 + Anonminpct int32 + Vtextminpct int32 + Vnodeminpct int32 + Nswapdev int32 + Swpages int32 + Swpginuse int32 + Swpgonly int32 + Nswget int32 + Nanon int32 + Unused05 int32 + Unused06 int32 + Faults int32 + Traps int32 + Intrs int32 + Swtch int32 + Softs int32 + Syscalls int32 + Pageins int32 + Unused07 int32 + Unused08 int32 + Pgswapin int32 + Pgswapout int32 + Forks int32 + Forks_ppwait int32 + Forks_sharevm int32 + Pga_zerohit int32 + Pga_zeromiss int32 + Unused09 int32 + Fltnoram int32 + Fltnoanon int32 + Fltnoamap int32 + Fltpgwait int32 + Fltpgrele int32 + Fltrelck int32 + Fltrelckok int32 + Fltanget int32 + Fltanretry int32 + Fltamcopy int32 + Fltnamap int32 + Fltnomap int32 + Fltlget int32 + Fltget int32 + Flt_anon int32 + Flt_acow int32 + Flt_obj int32 + Flt_prcopy int32 + Flt_przero int32 + Pdwoke int32 + Pdrevs int32 + Pdswout int32 + Pdfreed int32 + Pdscans int32 + Pdanscan int32 + Pdobscan int32 + Pdreact int32 + Pdbusy int32 + Pdpageouts int32 + Pdpending int32 + Pddeact int32 + Unused11 int32 + Unused12 int32 + Unused13 int32 + Fpswtch int32 + Kmapent int32 +} + +const SizeofClockinfo = 0x10 + +type Clockinfo struct { + Hz int32 + Tick int32 + Stathz int32 + Profhz int32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go new file mode 100644 index 0000000..84747c5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go @@ -0,0 +1,568 @@ +// cgo -godefs -- -fsigned-char types_openbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build arm64 && openbsd +// +build arm64,openbsd + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Mode uint32 + Dev int32 + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev int32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + _ Timespec +} + +type Statfs_t struct { + F_flags uint32 + F_bsize uint32 + F_iosize uint32 + F_blocks uint64 + F_bfree uint64 + F_bavail int64 + F_files uint64 + F_ffree uint64 + F_favail int64 + F_syncwrites uint64 + F_syncreads uint64 + F_asyncwrites uint64 + F_asyncreads uint64 + F_fsid Fsid + F_namemax uint32 + F_owner uint32 + F_ctime uint64 + F_fstypename [16]int8 + F_mntonname [90]int8 + F_mntfromname [90]int8 + F_mntfromspec [90]int8 + _ [2]byte + Mount_info [160]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Namlen uint8 + _ [4]uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + PathMax = 0x400 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [24]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface 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 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x20 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]uint32 +} + +const ( + SizeofIfMsghdr = 0xa8 + SizeofIfData = 0x90 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x1a + SizeofRtMsghdr = 0x60 + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Xflags int32 + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Mtu uint32 + Metric uint32 + Rdomain uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Oqdrops uint64 + Noproto uint64 + Capabilities uint32 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Metric int32 +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + What uint16 + Name [16]int8 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Priority uint8 + Mpls uint8 + Addrs int32 + Flags int32 + Fmask int32 + Pid int32 + Seq int32 + Errno int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Pksent uint64 + Expire int64 + Locks uint32 + Mtu uint32 + Refcnt uint32 + Hopcount uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pad uint32 +} + +type Mclpool struct{} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [2]byte +} + +type BpfTimeval struct { + Sec uint32 + Usec uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_EACCESS = 0x1 + AT_SYMLINK_NOFOLLOW = 0x2 + AT_SYMLINK_FOLLOW = 0x4 + AT_REMOVEDIR = 0x8 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Sigset_t uint32 + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} + +const SizeofUvmexp = 0x158 + +type Uvmexp struct { + Pagesize int32 + Pagemask int32 + Pageshift int32 + Npages int32 + Free int32 + Active int32 + Inactive int32 + Paging int32 + Wired int32 + Zeropages int32 + Reserve_pagedaemon int32 + Reserve_kernel int32 + Unused01 int32 + Vnodepages int32 + Vtextpages int32 + Freemin int32 + Freetarg int32 + Inactarg int32 + Wiredmax int32 + Anonmin int32 + Vtextmin int32 + Vnodemin int32 + Anonminpct int32 + Vtextminpct int32 + Vnodeminpct int32 + Nswapdev int32 + Swpages int32 + Swpginuse int32 + Swpgonly int32 + Nswget int32 + Nanon int32 + Unused05 int32 + Unused06 int32 + Faults int32 + Traps int32 + Intrs int32 + Swtch int32 + Softs int32 + Syscalls int32 + Pageins int32 + Unused07 int32 + Unused08 int32 + Pgswapin int32 + Pgswapout int32 + Forks int32 + Forks_ppwait int32 + Forks_sharevm int32 + Pga_zerohit int32 + Pga_zeromiss int32 + Unused09 int32 + Fltnoram int32 + Fltnoanon int32 + Fltnoamap int32 + Fltpgwait int32 + Fltpgrele int32 + Fltrelck int32 + Fltrelckok int32 + Fltanget int32 + Fltanretry int32 + Fltamcopy int32 + Fltnamap int32 + Fltnomap int32 + Fltlget int32 + Fltget int32 + Flt_anon int32 + Flt_acow int32 + Flt_obj int32 + Flt_prcopy int32 + Flt_przero int32 + Pdwoke int32 + Pdrevs int32 + Pdswout int32 + Pdfreed int32 + Pdscans int32 + Pdanscan int32 + Pdobscan int32 + Pdreact int32 + Pdbusy int32 + Pdpageouts int32 + Pdpending int32 + Pddeact int32 + Unused11 int32 + Unused12 int32 + Unused13 int32 + Fpswtch int32 + Kmapent int32 +} + +const SizeofClockinfo = 0x10 + +type Clockinfo struct { + Hz int32 + Tick int32 + Stathz int32 + Profhz int32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go new file mode 100644 index 0000000..ac5c8b6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go @@ -0,0 +1,568 @@ +// cgo -godefs -- -fsigned-char types_openbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build mips64 && openbsd +// +build mips64,openbsd + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Mode uint32 + Dev int32 + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev int32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + _ Timespec +} + +type Statfs_t struct { + F_flags uint32 + F_bsize uint32 + F_iosize uint32 + F_blocks uint64 + F_bfree uint64 + F_bavail int64 + F_files uint64 + F_ffree uint64 + F_favail int64 + F_syncwrites uint64 + F_syncreads uint64 + F_asyncwrites uint64 + F_asyncreads uint64 + F_fsid Fsid + F_namemax uint32 + F_owner uint32 + F_ctime uint64 + F_fstypename [16]int8 + F_mntonname [90]int8 + F_mntfromname [90]int8 + F_mntfromspec [90]int8 + _ [2]byte + Mount_info [160]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Namlen uint8 + _ [4]uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + PathMax = 0x400 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [24]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface 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 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x20 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]uint32 +} + +const ( + SizeofIfMsghdr = 0xa8 + SizeofIfData = 0x90 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x1a + SizeofRtMsghdr = 0x60 + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Xflags int32 + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Mtu uint32 + Metric uint32 + Rdomain uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Oqdrops uint64 + Noproto uint64 + Capabilities uint32 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Metric int32 +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + What uint16 + Name [16]int8 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Priority uint8 + Mpls uint8 + Addrs int32 + Flags int32 + Fmask int32 + Pid int32 + Seq int32 + Errno int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Pksent uint64 + Expire int64 + Locks uint32 + Mtu uint32 + Refcnt uint32 + Hopcount uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pad uint32 +} + +type Mclpool struct{} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [2]byte +} + +type BpfTimeval struct { + Sec uint32 + Usec uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_EACCESS = 0x1 + AT_SYMLINK_NOFOLLOW = 0x2 + AT_SYMLINK_FOLLOW = 0x4 + AT_REMOVEDIR = 0x8 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Sigset_t uint32 + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} + +const SizeofUvmexp = 0x158 + +type Uvmexp struct { + Pagesize int32 + Pagemask int32 + Pageshift int32 + Npages int32 + Free int32 + Active int32 + Inactive int32 + Paging int32 + Wired int32 + Zeropages int32 + Reserve_pagedaemon int32 + Reserve_kernel int32 + Unused01 int32 + Vnodepages int32 + Vtextpages int32 + Freemin int32 + Freetarg int32 + Inactarg int32 + Wiredmax int32 + Anonmin int32 + Vtextmin int32 + Vnodemin int32 + Anonminpct int32 + Vtextminpct int32 + Vnodeminpct int32 + Nswapdev int32 + Swpages int32 + Swpginuse int32 + Swpgonly int32 + Nswget int32 + Nanon int32 + Unused05 int32 + Unused06 int32 + Faults int32 + Traps int32 + Intrs int32 + Swtch int32 + Softs int32 + Syscalls int32 + Pageins int32 + Unused07 int32 + Unused08 int32 + Pgswapin int32 + Pgswapout int32 + Forks int32 + Forks_ppwait int32 + Forks_sharevm int32 + Pga_zerohit int32 + Pga_zeromiss int32 + Unused09 int32 + Fltnoram int32 + Fltnoanon int32 + Fltnoamap int32 + Fltpgwait int32 + Fltpgrele int32 + Fltrelck int32 + Fltrelckok int32 + Fltanget int32 + Fltanretry int32 + Fltamcopy int32 + Fltnamap int32 + Fltnomap int32 + Fltlget int32 + Fltget int32 + Flt_anon int32 + Flt_acow int32 + Flt_obj int32 + Flt_prcopy int32 + Flt_przero int32 + Pdwoke int32 + Pdrevs int32 + Pdswout int32 + Pdfreed int32 + Pdscans int32 + Pdanscan int32 + Pdobscan int32 + Pdreact int32 + Pdbusy int32 + Pdpageouts int32 + Pdpending int32 + Pddeact int32 + Unused11 int32 + Unused12 int32 + Unused13 int32 + Fpswtch int32 + Kmapent int32 +} + +const SizeofClockinfo = 0x10 + +type Clockinfo struct { + Hz int32 + Tick int32 + Stathz int32 + Profhz int32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go new file mode 100644 index 0000000..ad4aad2 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go @@ -0,0 +1,482 @@ +// cgo -godefs types_solaris.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build amd64 && solaris +// +build amd64,solaris + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 + PathMax = 0x400 + MaxHostNameLen = 0x100 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timeval32 struct { + Sec int32 + Usec int32 +} + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize int32 + Blocks int64 + Fstype [16]int8 +} + +type Flock_t struct { + Type int16 + Whence int16 + Start int64 + Len int64 + Sysid int32 + Pid int32 + Pad [4]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Name [1]int8 + _ [5]byte +} + +type _Fsblkcnt_t uint64 + +type Statvfs_t struct { + Bsize uint64 + Frsize uint64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Favail uint64 + Fsid uint64 + Basetype [16]int8 + Flag uint64 + Namemax uint64 + Fstr [32]int8 +} + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 + _ uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrDatalink struct { + Family uint16 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [244]int8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [236]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *int8 + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Accrights *int8 + Accrightslen int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x20 + SizeofSockaddrAny = 0xfc + SizeofSockaddrUnix = 0x6e + SizeofSockaddrDatalink = 0xfc + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x24 + SizeofICMPv6Filter = 0x20 +) + +type FdSet struct { + Bits [1024]int64 +} + +type Utsname struct { + Sysname [257]byte + Nodename [257]byte + Release [257]byte + Version [257]byte + Machine [257]byte +} + +type Ustat_t struct { + Tfree int64 + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + _ [4]byte +} + +const ( + AT_FDCWD = 0xffd19553 + AT_SYMLINK_NOFOLLOW = 0x1000 + AT_SYMLINK_FOLLOW = 0x2000 + AT_REMOVEDIR = 0x1 + AT_EACCESS = 0x4 +) + +const ( + SizeofIfMsghdr = 0x54 + SizeofIfData = 0x44 + SizeofIfaMsghdr = 0x14 + SizeofRtMsghdr = 0x4c + SizeofRtMetrics = 0x28 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Lastchange Timeval32 +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Metric int32 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x80 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint64 + Drop uint64 + Capt uint64 + _ [13]uint64 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfTimeval struct { + Sec int32 + Usec int32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [2]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [19]uint8 + _ [1]byte +} + +type Termio struct { + Iflag uint16 + Oflag uint16 + Cflag uint16 + Lflag uint16 + Line int8 + Cc [8]uint8 + _ [1]byte +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type fileObj struct { + Atim Timespec + Mtim Timespec + Ctim Timespec + Pad [3]uint64 + Name *int8 +} + +type portEvent struct { + Events int32 + Source uint16 + Pad uint16 + Object uint64 + User *byte +} + +const ( + PORT_SOURCE_AIO = 0x1 + PORT_SOURCE_TIMER = 0x2 + PORT_SOURCE_USER = 0x3 + PORT_SOURCE_FD = 0x4 + PORT_SOURCE_ALERT = 0x5 + PORT_SOURCE_MQ = 0x6 + PORT_SOURCE_FILE = 0x7 + PORT_ALERT_SET = 0x1 + PORT_ALERT_UPDATE = 0x2 + PORT_ALERT_INVALID = 0x3 + FILE_ACCESS = 0x1 + FILE_MODIFIED = 0x2 + FILE_ATTRIB = 0x4 + FILE_TRUNC = 0x100000 + FILE_NOFOLLOW = 0x10000000 + FILE_DELETE = 0x10 + FILE_RENAME_TO = 0x20 + FILE_RENAME_FROM = 0x40 + UNMOUNTED = 0x20000000 + MOUNTEDOVER = 0x40000000 + FILE_EXCEPTION = 0x60000070 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go new file mode 100644 index 0000000..4ab638c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go @@ -0,0 +1,406 @@ +// 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 zos && s390x +// +build zos,s390x + +// Hand edited based on ztypes_linux_s390x.go +// TODO: auto-generate. + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 + PathMax = 0x1000 +) + +const ( + SizeofSockaddrAny = 128 + SizeofCmsghdr = 12 + SizeofIPMreq = 8 + SizeofIPv6Mreq = 20 + SizeofICMPv6Filter = 32 + SizeofIPv6MTUInfo = 32 + SizeofLinger = 8 + SizeofSockaddrInet4 = 16 + SizeofSockaddrInet6 = 28 + SizeofTCPInfo = 0x68 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type timeval_zos struct { //correct (with padding and all) + Sec int64 + _ [4]byte // pad + Usec int32 +} + +type Tms struct { //clock_t is 4-byte unsigned int in zos + Utime uint32 + Stime uint32 + Cutime uint32 + Cstime uint32 +} + +type Time_t int64 + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [108]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]uint8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + _ [112]uint8 // pad +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Iov *Iovec + Control *byte + Flags int32 + Namelen int32 + Iovlen int32 + Controllen int32 +} + +type Cmsghdr struct { + Len int32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Addr [4]byte /* in_addr */ + Ifindex uint32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +type _Gid_t uint32 + +type rusage_zos struct { + Utime timeval_zos + Stime timeval_zos +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +// { int, short, short } in poll.h +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +type Stat_t struct { //Linux Definition + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint32 + Uid uint32 + Gid uint32 + _ int32 + Rdev uint64 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize int64 + Blocks int64 + _ [3]int64 +} + +type Stat_LE_t struct { + _ [4]byte // eye catcher + Length uint16 + Version uint16 + Mode int32 + Ino uint32 + Dev uint32 + Nlink int32 + Uid int32 + Gid int32 + Size int64 + Atim31 [4]byte + Mtim31 [4]byte + Ctim31 [4]byte + Rdev uint32 + Auditoraudit uint32 + Useraudit uint32 + Blksize int32 + Creatim31 [4]byte + AuditID [16]byte + _ [4]byte // rsrvd1 + File_tag struct { + Ccsid uint16 + Txtflag uint16 // aggregating Txflag:1 deferred:1 rsvflags:14 + } + CharsetID [8]byte + Blocks int64 + Genvalue uint32 + Reftim31 [4]byte + Fid [8]byte + Filefmt byte + Fspflag2 byte + _ [2]byte // rsrvd2 + Ctimemsec int32 + Seclabel [8]byte + _ [4]byte // rsrvd3 + _ [4]byte // rsrvd4 + Atim Time_t + Mtim Time_t + Ctim Time_t + Creatim Time_t + Reftim Time_t + _ [24]byte // rsrvd5 +} + +type Statvfs_t struct { + ID [4]byte + Len int32 + Bsize uint64 + Blocks uint64 + Usedspace uint64 + Bavail uint64 + Flag uint64 + Maxfilesize int64 + _ [16]byte + Frsize uint64 + Bfree uint64 + Files uint32 + Ffree uint32 + Favail uint32 + Namemax31 uint32 + Invarsec uint32 + _ [4]byte + Fsid uint64 + Namemax uint64 +} + +type Statfs_t struct { + Type uint32 + Bsize uint64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint32 + Ffree uint32 + Fsid uint64 + Namelen uint64 + Frsize uint64 + Flags uint64 +} + +type Dirent struct { + Reclen uint16 + Namlen uint16 + Ino uint32 + Extra uintptr + Name [256]byte +} + +type FdSet struct { + Bits [64]int32 +} + +// This struct is packed on z/OS so it can't be used directly. +type Flock_t struct { + Type int16 + Whence int16 + Start int64 + Len int64 + Pid int32 +} + +type Termios struct { + Cflag uint32 + Iflag uint32 + Lflag uint32 + Oflag uint32 + Cc [11]uint8 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type W_Mnth struct { + Hid [4]byte + Size int32 + Cur1 int32 //32bit pointer + Cur2 int32 //^ + Devno uint32 + _ [4]byte +} + +type W_Mntent struct { + Fstype uint32 + Mode uint32 + Dev uint32 + Parentdev uint32 + Rootino uint32 + Status byte + Ddname [9]byte + Fstname [9]byte + Fsname [45]byte + Pathlen uint32 + Mountpoint [1024]byte + Jobname [8]byte + PID int32 + Parmoffset int32 + Parmlen int16 + Owner [8]byte + Quiesceowner [8]byte + _ [38]byte +} 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..a20ebea --- /dev/null +++ b/vendor/golang.org/x/sys/windows/aliases.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 windows && go1.9 +// +build windows,go1.9 + +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..115341f --- /dev/null +++ b/vendor/golang.org/x/sys/windows/dll_windows.go @@ -0,0 +1,416 @@ +// 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 LazyDLL +// with System set to true, 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 failes. +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. +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 +} + +type errString string + +func (s errString) Error() string { return string(s) } diff --git a/vendor/golang.org/x/sys/windows/empty.s b/vendor/golang.org/x/sys/windows/empty.s new file mode 100644 index 0000000..fdbbbcd --- /dev/null +++ b/vendor/golang.org/x/sys/windows/empty.s @@ -0,0 +1,9 @@ +// 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 !go1.12 +// +build !go1.12 + +// This file is here to allow bodyless functions with go:linkname for Go 1.11 +// and earlier (see https://golang.org/issue/23311). 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..92ac05f --- /dev/null +++ b/vendor/golang.org/x/sys/windows/env_windows.go @@ -0,0 +1,54 @@ +// 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) + blockp := uintptr(unsafe.Pointer(block)) + for { + entry := UTF16PtrToString((*uint16)(unsafe.Pointer(blockp))) + if len(entry) == 0 { + break + } + env = append(env, entry) + blockp += 2 * (uintptr(len(entry)) + 1) + } + 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..2cd6064 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/eventlog.go @@ -0,0 +1,21 @@ +// 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 +// +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..855698b --- /dev/null +++ b/vendor/golang.org/x/sys/windows/exec_windows.go @@ -0,0 +1,178 @@ +// 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 + } + 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 { + var commandLine string + for i := range args { + if i > 0 { + commandLine += " " + } + commandLine += EscapeArg(args[i]) + } + return 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. +func DecomposeCommandLine(commandLine string) ([]string, error) { + if len(commandLine) == 0 { + return []string{}, nil + } + var argc int32 + argv, err := CommandLineToArgv(StringToUTF16Ptr(commandLine), &argc) + if err != nil { + return nil, err + } + defer LocalFree(Handle(unsafe.Pointer(argv))) + var args []string + for _, v := range (*argv)[:argc] { + args = append(args, UTF16ToString((*v)[:])) + } + return args, nil +} + +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..8563f79 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/mksyscall.go @@ -0,0 +1,10 @@ +// 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 +// +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..9196b08 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/race.go @@ -0,0 +1,31 @@ +// 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 +// +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..7bae481 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/race0.go @@ -0,0 +1,26 @@ +// 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 +// +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..d414ef1 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/security_windows.go @@ -0,0 +1,1444 @@ +// 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" + + "golang.org/x/sys/internal/unsafeheader" +) + +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 + +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 +} + +// 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 + +// 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 = (*SECURITY_DESCRIPTOR)(unsafe.Pointer(&make([]byte, absoluteSDSize)[0])) + } + var ( + dacl *ACL + sacl *ACL + owner *SID + group *SID + ) + if daclSize > 0 { + dacl = (*ACL)(unsafe.Pointer(&make([]byte, daclSize)[0])) + } + if saclSize > 0 { + sacl = (*ACL)(unsafe.Pointer(&make([]byte, saclSize)[0])) + } + if ownerSize > 0 { + owner = (*SID)(unsafe.Pointer(&make([]byte, ownerSize)[0])) + } + if groupSize > 0 { + group = (*SID)(unsafe.Pointer(&make([]byte, groupSize)[0])) + } + err = makeAbsoluteSD(selfRelativeSD, absoluteSD, &absoluteSDSize, + dacl, &daclSize, sacl, &saclSize, owner, &ownerSize, group, &groupSize) + 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 + } + + var src []byte + h := (*unsafeheader.Slice)(unsafe.Pointer(&src)) + h.Data = unsafe.Pointer(selfRelativeSD) + h.Len = sdLen + h.Cap = sdLen + + const psize = int(unsafe.Sizeof(uintptr(0))) + + var dst []byte + h = (*unsafeheader.Slice)(unsafe.Pointer(&dst)) + alloc := make([]uintptr, (sdLen+psize-1)/psize) + h.Data = (*unsafeheader.Slice)(unsafe.Pointer(&alloc)).Data + h.Len = sdLen + h.Cap = 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..f8deca8 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/service.go @@ -0,0 +1,247 @@ +// 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 +// +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 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 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? 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..14027da --- /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 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..4fc0143 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/str.go @@ -0,0 +1,23 @@ +// 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 +// +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..72074d5 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/syscall.go @@ -0,0 +1,113 @@ +// 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 +// +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" + + "golang.org/x/sys/internal/unsafeheader" +) + +// 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) + } + + var s []byte + h := (*unsafeheader.Slice)(unsafe.Pointer(&s)) + h.Data = unsafe.Pointer(p) + h.Len = n + h.Cap = n + + return string(s) +} + +// 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..ce3075c --- /dev/null +++ b/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -0,0 +1,1701 @@ +// 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" + "strings" + "sync" + "syscall" + "time" + "unicode/utf16" + "unsafe" + + "golang.org/x/sys/internal/unsafeheader" +) + +type Handle uintptr +type 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) { + if strings.IndexByte(s, 0) != -1 { + return nil, syscall.EINVAL + } + return utf16.Encode([]rune(s + "\x00")), nil +} + +// 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 { + for i, v := range s { + if v == 0 { + s = s[:i] + break + } + } + return string(utf16.Decode(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)) + } + + var s []uint16 + h := (*unsafeheader.Slice)(unsafe.Pointer(&s)) + h.Data = unsafe.Pointer(p) + h.Len = n + h.Cap = n + + return string(utf16.Decode(s)) +} + +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 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 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 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 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 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 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) (err error) = 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 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 *[8192]*[8192]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 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 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 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 GetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) +//sys SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) +//sys GetActiveProcessorCount(groupNumber uint16) (ret uint32) +//sys GetMaximumProcessorCount(groupNumber uint16) (ret uint32) + +// 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, 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 + +// 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 + +// 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) + CloseOnExec(r) + 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) { + curoffset, e := Seek(fd, 0, 1) + if e != nil { + return e + } + defer Seek(fd, curoffset, 0) + _, e = Seek(fd, length, 0) + if e != nil { + return e + } + e = SetEndOfFile(fd) + if e != nil { + return e + } + return nil +} + +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 Close(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 Close(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 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 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 + +// 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 + // Don't count trailing NUL for abstract address. + sl-- + } + + return unsafe.Pointer(&sa.raw), sl, 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++ + } + bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] + sa.Name = string(bytes) + 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 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) { + 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 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 (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) { + var u NTUnicodeString + s16, err := UTF16PtrFromString(s) + if err != nil { + return nil, err + } + RtlInitUnicodeString(&u, s16) + return &u, nil +} + +// Slice returns a uint16 slice that aliases the data in the NTUnicodeString. +func (s *NTUnicodeString) Slice() []uint16 { + var slice []uint16 + hdr := (*unsafeheader.Slice)(unsafe.Pointer(&slice)) + hdr.Data = unsafe.Pointer(s.Buffer) + hdr.Len = int(s.Length) + hdr.Cap = int(s.MaximumLength) + return slice +} + +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 { + var slice []byte + hdr := (*unsafeheader.Slice)(unsafe.Pointer(&slice)) + hdr.Data = unsafe.Pointer(s.Buffer) + hdr.Len = int(s.Length) + hdr.Cap = int(s.MaximumLength) + return slice +} + +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 + } + h := (*unsafeheader.Slice)(unsafe.Pointer(&data)) + h.Data = unsafe.Pointer(ptr) + h.Len = int(size) + h.Cap = int(size) + return +} 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..e19471c --- /dev/null +++ b/vendor/golang.org/x/sys/windows/types_windows.go @@ -0,0 +1,3176 @@ +// 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 + + 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_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 +) + +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 + + // 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 + + 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 + + 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 + + SHUT_RD = 0 + SHUT_WR = 1 + SHUT_RDWR = 2 + + WSADESCRIPTION_LEN = 256 + WSASYS_STATUS_LEN = 128 +) + +type WSABuf struct { + Len uint32 + Buf *byte +} + +type WSAMsg struct { + Name *syscall.RawSockaddrAny + Namelen int32 + Buffers *WSABuf + BufferCount uint32 + Control WSABuf + Flags 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 +) + +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 +) + +const GAA_FLAG_INCLUDE_PREFIX = 0x00000010 + +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 +) + +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 + /* more fields might be present here. */ +} + +const ( + IfOperStatusUp = 1 + IfOperStatusDown = 2 + IfOperStatusTesting = 3 + IfOperStatusUnknown = 4 + IfOperStatusDormant = 5 + IfOperStatusNotPresent = 6 + IfOperStatusLowerLayerDown = 7 +) + +// 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 +) + +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 + JobObjectAssociateCompletionPortInformation = 7 + JobObjectBasicLimitInformation = 2 + JobObjectBasicUIRestrictions = 4 + JobObjectCpuRateControlInformation = 15 + JobObjectEndOfJobTimeInformation = 6 + JobObjectExtendedLimitInformation = 9 + JobObjectGroupInformation = 11 + JobObjectGroupInformationEx = 14 + JobObjectLimitViolationInformation2 = 35 + JobObjectNetRateControlInformation = 32 + JobObjectNotificationLimitInformation = 12 + JobObjectNotificationLimitInformation2 = 34 + 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 { + 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 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..68f52c1 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -0,0 +1,4196 @@ +// 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") + 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") + 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") + procEnumServicesStatusExW = modadvapi32.NewProc("EnumServicesStatusExW") + procEqualSid = modadvapi32.NewProc("EqualSid") + procFreeSid = modadvapi32.NewProc("FreeSid") + 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") + procGetAdaptersAddresses = modiphlpapi.NewProc("GetAdaptersAddresses") + procGetAdaptersInfo = modiphlpapi.NewProc("GetAdaptersInfo") + procGetIfEntry = modiphlpapi.NewProc("GetIfEntry") + procAssignProcessToJobObject = modkernel32.NewProc("AssignProcessToJobObject") + procCancelIo = modkernel32.NewProc("CancelIo") + procCancelIoEx = modkernel32.NewProc("CancelIoEx") + procCloseHandle = modkernel32.NewProc("CloseHandle") + 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") + 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") + procDuplicateHandle = modkernel32.NewProc("DuplicateHandle") + 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") + procGetCommTimeouts = modkernel32.NewProc("GetCommTimeouts") + procGetCommandLineW = modkernel32.NewProc("GetCommandLineW") + procGetComputerNameExW = modkernel32.NewProc("GetComputerNameExW") + procGetComputerNameW = modkernel32.NewProc("GetComputerNameW") + procGetConsoleMode = modkernel32.NewProc("GetConsoleMode") + 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") + procGetFileType = modkernel32.NewProc("GetFileType") + procGetFinalPathNameByHandleW = modkernel32.NewProc("GetFinalPathNameByHandleW") + procGetFullPathNameW = modkernel32.NewProc("GetFullPathNameW") + 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") + procGetNamedPipeHandleStateW = modkernel32.NewProc("GetNamedPipeHandleStateW") + procGetNamedPipeInfo = modkernel32.NewProc("GetNamedPipeInfo") + 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") + 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") + procResetEvent = modkernel32.NewProc("ResetEvent") + procResumeThread = modkernel32.NewProc("ResumeThread") + procSetCommTimeouts = modkernel32.NewProc("SetCommTimeouts") + procSetConsoleCursorPosition = modkernel32.NewProc("SetConsoleCursorPosition") + procSetConsoleMode = modkernel32.NewProc("SetConsoleMode") + 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") + 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") + 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") + 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") + 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") + 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") + procExitWindowsEx = moduser32.NewProc("ExitWindowsEx") + procGetShellWindow = moduser32.NewProc("GetShellWindow") + procGetWindowThreadProcessId = moduser32.NewProc("GetWindowThreadProcessId") + procMessageBoxW = moduser32.NewProc("MessageBoxW") + procCreateEnvironmentBlock = moduserenv.NewProc("CreateEnvironmentBlock") + procDestroyEnvironmentBlock = moduserenv.NewProc("DestroyEnvironmentBlock") + procGetUserProfileDirectoryW = moduserenv.NewProc("GetUserProfileDirectoryW") + procGetFileVersionInfoSizeW = modversion.NewProc("GetFileVersionInfoSizeW") + procGetFileVersionInfoW = modversion.NewProc("GetFileVersionInfoW") + procVerQueryValueW = modversion.NewProc("VerQueryValueW") + procWinVerifyTrustEx = modwintrust.NewProc("WinVerifyTrustEx") + procFreeAddrInfoW = modws2_32.NewProc("FreeAddrInfoW") + procGetAddrInfoW = modws2_32.NewProc("GetAddrInfoW") + procWSACleanup = modws2_32.NewProc("WSACleanup") + procWSAEnumProtocolsW = modws2_32.NewProc("WSAEnumProtocolsW") + procWSAGetOverlappedResult = modws2_32.NewProc("WSAGetOverlappedResult") + procWSAIoctl = modws2_32.NewProc("WSAIoctl") + 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 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 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 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 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 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 CloseHandle(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procCloseHandle.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + 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 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 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 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 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 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 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 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 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 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 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) (err error) { + r1, _, e1 := syscall.Syscall(procGetStartupInfoW.Addr(), 1, uintptr(unsafe.Pointer(startupInfo)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + 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 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 ResetEvent(event Handle) (err error) { + r1, _, e1 := syscall.Syscall(procResetEvent.Addr(), 1, uintptr(event), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + 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 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 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 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 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 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 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 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, bytesReturned *uint32) (err error) { + var _p0 *uint32 + if len(processIds) > 0 { + _p0 = &processIds[0] + } + r1, _, e1 := syscall.Syscall(procEnumProcesses.Addr(), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(processIds)), 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 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 *[8192]*[8192]uint16, err error) { + r0, _, e1 := syscall.Syscall(procCommandLineToArgvW.Addr(), 2, uintptr(unsafe.Pointer(cmd)), uintptr(unsafe.Pointer(argc)), 0) + argv = (*[8192]*[8192]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 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 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 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 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 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 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 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/gopkg.in/hlandau/easymetric.v1/cexp/cexp.go b/vendor/gopkg.in/hlandau/easymetric.v1/cexp/cexp.go new file mode 100644 index 0000000..fd6d16a --- /dev/null +++ b/vendor/gopkg.in/hlandau/easymetric.v1/cexp/cexp.go @@ -0,0 +1,97 @@ +package cexp + +import "gopkg.in/hlandau/measurable.v1" +import "sync/atomic" + +// Counter + +type Counter struct { + name string + value int64 +} + +func (c *Counter) MsName() string { + return c.name +} + +func (c *Counter) MsInt64() int64 { + return atomic.LoadInt64(&c.value) +} + +func (c *Counter) Get() int64 { + return c.MsInt64() +} + +// v must be non-negative. +func (c *Counter) Add(v int64) { + atomic.AddInt64(&c.value, v) +} + +func (c *Counter) Inc() { + c.Add(1) +} + +func (c *Counter) MsType() measurable.Type { + return measurable.CounterType +} + +func NewCounter(name string) *Counter { + c := &Counter{ + name: name, + } + + measurable.Register(c) + return c +} + +// Gauge + +type Gauge struct { + name string + value int64 +} + +func (c *Gauge) MsName() string { + return c.name +} + +func (c *Gauge) MsInt64() int64 { + return atomic.LoadInt64(&c.value) +} + +func (c *Gauge) Add(v int64) { + atomic.AddInt64(&c.value, v) +} + +func (c *Gauge) Sub(v int64) { + c.Add(-v) +} + +func (c *Gauge) Set(v int64) { + atomic.StoreInt64(&c.value, v) +} + +func (c *Gauge) Get() int64 { + return c.MsInt64() +} + +func (c *Gauge) Inc() { + c.Add(1) +} + +func (c *Gauge) Dec() { + c.Add(-1) +} + +func (c *Gauge) MsType() measurable.Type { + return measurable.GaugeType +} + +func NewGauge(name string) *Gauge { + c := &Gauge{ + name: name, + } + + measurable.Register(c) + return c +} diff --git a/vendor/gopkg.in/hlandau/measurable.v1/README.md b/vendor/gopkg.in/hlandau/measurable.v1/README.md new file mode 100644 index 0000000..f2d582d --- /dev/null +++ b/vendor/gopkg.in/hlandau/measurable.v1/README.md @@ -0,0 +1,82 @@ +Measurable: The useless Go metric registration package that doesn't do anything +=============================================================================== + +[![GoDoc](https://godoc.org/gopkg.in/hlandau/measurable.v1?status.svg)](https://godoc.org/gopkg.in/hlandau/measurable.v1) + +Measurable is a Go library for managing the registration of metrics such as +counters and gauges, no matter how that metric data is eventually consumed. + +The most noteworthy feature of measurable is that it doesn't do anything. It +contains no functionality for providing metric data to any external service, +and it contains no actual metric implementations. + +The purpose of measurable is to act as an [integration +nexus](https://www.devever.net/~hl/nexuses), essentially a matchmaker between +metric sources and metric consumers. This creates the important feature that +your application's metrics can be expressed completely independently of *how* +those metrics are exported. + +Measurable doesn't implement any metric or metric export logic because it +strives to be a neutral intermediary, which abstracts the interface between +metrics and metric exporters. + +**Import as:** `gopkg.in/hlandau/measurable.v1` + +Measurable +---------- + +A Measurable is an object that represents some metric. It is obliged only to +implement the following interface: + +```go +type Measurable interface { + MsName() string + MsType() Type +} +``` + +Measurable is designed around interface upgrades. If you want to actually +do anything with a Measurable, you must attempt to cast it to an interface +with the methods you need. A Measurable is not obliged to implement any +interface besides Measurable, but almost always will. + +Here are some common interfaces implemented by Measurables, in descending order +of importance: + + - `MsName() string` — get the Measurable name. + - `MsType() Type` — get the Measurable type. + - `MsInt64() int64` — get the Measurable as an int64. + - `String() string` — the standard Go `String()` interface. + +All Measurables should implement `MsName() string` and `MsType() Type`. + +Measurable-specific methods should always be prefixed by `Ms` so it is clear +they are intended for consumption by Measurable consumers. + +`MsName`, `MsType` and `MsInt64` should suffice for most consumers of Counter +and Gauge metric types. + +Metrics should be named in lowercase using dots to create a hierarchy and +dashes to separate words, e.g. `someserver.http.request-count`. These metric +names may be transmuted by consumers as necessary for some graphing systems, +such as Prometheus (which allows only underscores). + +Standard Bindings +----------------- + +For a package which makes it easy to register and consume measurables, see the +[easymetric](https://github.com/hlandau/easymetric) package. + +Of course, nothing requires you to use the easymetric package. You are free to escew it and make your own. + +Background Reading +------------------ + + - [On Nexuses](https://www.devever.net/~hl/nexuses) + - See also: [Configurable](https://github.com/hlandau/configurable) + +Licence +------- + + © 2015 Hugo Landau MIT License + diff --git a/vendor/gopkg.in/hlandau/measurable.v1/measurable.go b/vendor/gopkg.in/hlandau/measurable.v1/measurable.go new file mode 100644 index 0000000..4399d0a --- /dev/null +++ b/vendor/gopkg.in/hlandau/measurable.v1/measurable.go @@ -0,0 +1,189 @@ +// Package measurable provides a functionality-free integration nexus for +// metric registration. +// +// Measurable is a Go package for connecting service metrics and metric consumers. +// +// The most noteworthy feature of measurable is that it doesn't do anything. +// It contains no functionality for defining or exporting metrics. +// +// The purpose of measurable is to act as an integration nexus +// (https://www.devever.net/~hl/nexuses), essentially a matchmaker between +// application metrics and metric consumers. This creates the important feature +// that your application's metrics can be defined completely independently of +// *how* those metrics are defined. +// +// Measurable doesn't implement any metric definition or export logic because it +// strives to be a neutral intermediary, which abstracts the interface between +// measurables and measurable consumers +// +// Pursuant to this, package measurable is this and only this: an interface +// Measurable which all metrics must implement, and a facility for registering +// Measurables and visiting them. +package measurable // import "gopkg.in/hlandau/measurable.v1" + +import "sync" +import "fmt" + +// Measurable is the interface which must be implemented by any metric item to +// be used with package measurable. In the current version, v1, it contains +// only the MsName() and MsType() methods. All other functionality must be +// obtained by interface upgrades. +type Measurable interface { + // Returns the name of the metric. Names should be in the style + // "alpha.beta.gamma-delta", for example "foo.http.requests.count". That is, + // names should be lowercase, should express a hierarchy separated by dots, + // and have words separated by dashes. + // + // Some Measurable consumers may mutate these names to satisfy naming + // restrictions applied by some graphing systems. + MsName() string + + // Return the Measurable type. You can, of course, invent your own Measurable + // types, though consumers won't necessarily know what to do with them. + MsType() Type +} + +var measurablesMutex sync.RWMutex +var measurables = map[string]Measurable{} + +// Registers a top-level Configurable. +func Register(measurable Measurable) { + measurablesMutex.Lock() + defer measurablesMutex.Unlock() + + if measurable == nil { + panic("cannot register nil measurable") + } + + name := measurable.MsName() + if name == "" { + panic("measurable cannot have empty name") + } + + _, exists := measurables[name] + if exists { + panic(fmt.Sprintf("A measurable with the same name already exists: %s", name)) + } + + measurables[name] = measurable + callRegistrationHooks(measurable, RegisterEvent) +} + +func Unregister(measurableName string) { + measurablesMutex.Lock() + defer measurablesMutex.Unlock() + + measurable, ok := measurables[measurableName] + if !ok { + return + } + + callRegistrationHooks(measurable, UnregisterEvent) + delete(measurables, measurableName) +} + +func Get(measurableName string) Measurable { + measurablesMutex.RLock() + defer measurablesMutex.RUnlock() + + return measurables[measurableName] +} + +// Visits all registered top-level Measurables. +// +// Returning a non-nil error short-circuits the iteration process and returns +// that error. +func Visit(do func(measurable Measurable) error) error { + measurablesMutex.Lock() + defer measurablesMutex.Unlock() + + for _, measurable := range measurables { + err := do(measurable) + if err != nil { + return err + } + } + + return nil +} + +// Represents a measurable type. +type Type uint32 + +const ( + // A CounterType Measurable represents a non-negative integral value + // that monotonously increases. It must implement `MsInt64() int64`. + CounterType Type = 0x436E7472 + + // A GaugeType Measurable represents an integral value that varies over + // time. It must implement `MsInt64() int64`. + GaugeType = 0x47617567 +) + +// Registration hooks. +type HookEvent int + +const ( + // This event is issued when a measurable is registered. + RegisterEvent HookEvent = iota + + // This event is issued when a registration hook is registered. It is issued + // for every measurable which has already been registered. + RegisterCatchupEvent + + // This event is issued when a measurable is unregistered. + UnregisterEvent +) + +type HookFunc func(measurable Measurable, hookEvent HookEvent) + +var hooksMutex sync.RWMutex +var hooks = map[interface{}]HookFunc{} + +// Register for notifications on metric registration. The key must be usable as +// a key in a map and identifies the hook. No other hook with the same key must +// already exist. +// +// NOTE: The hook will be called for all registrations which already exist. +// This ensures that no registrations are missed in a threadsafe manner. +// For these calls, the event will be EventRegisterCatchup. +// +// The hook must not register or unregister registration hooks or metrics. +func RegisterHook(key interface{}, hook HookFunc) { + measurablesMutex.RLock() + defer measurablesMutex.RUnlock() + + registerHook(key, hook) + + for _, m := range measurables { + hook(m, RegisterCatchupEvent) + } +} + +func registerHook(key interface{}, hook HookFunc) { + hooksMutex.Lock() + defer hooksMutex.Unlock() + + _, exists := hooks[key] + if exists { + panic(fmt.Sprintf("A metric registration hook with the same key already exists: %+v", key)) + } + + hooks[key] = hook +} + +// Unregister an existing hook. +func UnregisterHook(key interface{}) { + hooksMutex.Lock() + defer hooksMutex.Unlock() + delete(hooks, key) +} + +func callRegistrationHooks(measurable Measurable, event HookEvent) { + hooksMutex.RLock() + defer hooksMutex.RUnlock() + + for _, v := range hooks { + v(measurable, event) + } +} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/COPYING b/vendor/gopkg.in/hlandau/passlib.v1/COPYING new file mode 100644 index 0000000..d2aa62a --- /dev/null +++ b/vendor/gopkg.in/hlandau/passlib.v1/COPYING @@ -0,0 +1,39 @@ +passlib is a Golang password verification library strongly inspired by and +derived from Python passlib (). The BSD +license is preserved and extended to all new code. + +License for Passlib +=================== +Passlib is (c) `Assurance Technologies `_, +and is released under the `BSD license `_:: + + Passlib + Copyright (c) 2008-2012 Assurance Technologies, LLC. + All rights reserved. + + 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 Assurance Technologies, nor the names of the + 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/gopkg.in/hlandau/passlib.v1/abstract/compare.go b/vendor/gopkg.in/hlandau/passlib.v1/abstract/compare.go new file mode 100644 index 0000000..d336f13 --- /dev/null +++ b/vendor/gopkg.in/hlandau/passlib.v1/abstract/compare.go @@ -0,0 +1,11 @@ +package abstract + +import "crypto/subtle" + +// Compares two strings (typicaly password hashes) in a secure, constant-time +// fashion. Returns true iff they are equal. +func SecureCompare(a, b string) bool { + ab := []byte(a) + bb := []byte(b) + return subtle.ConstantTimeCompare(ab, bb) == 1 +} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/abstract/errors.go b/vendor/gopkg.in/hlandau/passlib.v1/abstract/errors.go new file mode 100644 index 0000000..3298f82 --- /dev/null +++ b/vendor/gopkg.in/hlandau/passlib.v1/abstract/errors.go @@ -0,0 +1,15 @@ +// Package abstract contains the abstract description of the Scheme interface, +// plus supporting error definitions. +package abstract + +import "fmt" + +// Indicates that password verification failed because the provided password +// does not match the provided hash. +var ErrInvalidPassword = fmt.Errorf("invalid password") + +// Indicates that password verification is not possible because the hashing +// scheme used by the hash provided is not supported. +var ErrUnsupportedScheme = fmt.Errorf("unsupported scheme") + +// © 2014 Hugo Landau MIT License diff --git a/vendor/gopkg.in/hlandau/passlib.v1/abstract/scheme.go b/vendor/gopkg.in/hlandau/passlib.v1/abstract/scheme.go new file mode 100644 index 0000000..3589022 --- /dev/null +++ b/vendor/gopkg.in/hlandau/passlib.v1/abstract/scheme.go @@ -0,0 +1,34 @@ +package abstract + +// The Scheme interface provides an abstract interface to an implementation +// of a particular password hashing scheme. The Scheme generates password +// hashes from passwords, verifies passwords using password hashes, randomly +// generates new stubs and can determines whether it recognises a given +// stub or hash. It may also decide to issue upgrades. +type Scheme interface { + // Hashes a plaintext UTF-8 password using a modular crypt stub. Returns the + // hashed password in modular crypt format. + // + // A modular crypt stub is a prefix of a hash in modular crypt format which + // expresses all necessary configuration information, such as salt and + // iteration count. For example, for sha256-crypt, a valid stub would be: + // + // $5$rounds=6000$salt + // + // A full modular crypt hash may also be passed as the stub, in which case + // the hash is ignored. + Hash(password string) (string, error) + + // Verifies a plaintext UTF-8 password using a modular crypt hash. Returns + // an error if the inputs are malformed or the password does not match. + Verify(password, hash string) (err error) + + // Returns true iff this crypter supports the given stub. + SupportsStub(stub string) bool + + // Returns true iff this stub needs an update. + NeedsUpdate(stub string) bool + + // Make a stub with the configured defaults. The salt is generated randomly. + //MakeStub() (string, error) +} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/default.go b/vendor/gopkg.in/hlandau/passlib.v1/default.go new file mode 100644 index 0000000..d778584 --- /dev/null +++ b/vendor/gopkg.in/hlandau/passlib.v1/default.go @@ -0,0 +1,141 @@ +package passlib + +import ( + "fmt" + "gopkg.in/hlandau/passlib.v1/abstract" + "gopkg.in/hlandau/passlib.v1/hash/argon2" + "gopkg.in/hlandau/passlib.v1/hash/bcrypt" + "gopkg.in/hlandau/passlib.v1/hash/bcryptsha256" + "gopkg.in/hlandau/passlib.v1/hash/pbkdf2" + "gopkg.in/hlandau/passlib.v1/hash/scrypt" + "gopkg.in/hlandau/passlib.v1/hash/sha2crypt" + "time" +) + +// This is the first and default set of defaults used by passlib. It prefers +// scrypt-sha256. It is now obsolete. +const Defaults20160922 = "20160922" + +// This is the most up-to-date set of defaults preferred by passlib. It prefers +// Argon2i. You must opt into it by calling UseDefaults at startup. +const Defaults20180601 = "20180601" + +// This value, when passed to UseDefaults, causes passlib to always use the +// very latest set of defaults. DO NOT use this unless you are sure that +// opportunistic hash upgrades will not cause breakage for your application +// when future versions of passlib are released. See func UseDefaults. +const DefaultsLatest = "latest" + +// Default schemes as of 2016-09-22. +var defaultSchemes20160922 = []abstract.Scheme{ + scrypt.SHA256Crypter, + argon2.Crypter, + sha2crypt.Crypter512, + sha2crypt.Crypter256, + bcryptsha256.Crypter, + pbkdf2.SHA512Crypter, + pbkdf2.SHA256Crypter, + bcrypt.Crypter, + pbkdf2.SHA1Crypter, +} + +// Default schemes as of 2018-06-01. +var defaultSchemes20180601 = []abstract.Scheme{ + argon2.Crypter, + scrypt.SHA256Crypter, + sha2crypt.Crypter512, + sha2crypt.Crypter256, + bcryptsha256.Crypter, + pbkdf2.SHA512Crypter, + pbkdf2.SHA256Crypter, + bcrypt.Crypter, + pbkdf2.SHA1Crypter, +} + +// The default schemes, most preferred first. The first scheme will be used to +// hash passwords, and any of the schemes may be used to verify existing +// passwords. The contents of this value may change with subsequent releases. +// +// If you want to change this, set DefaultSchemes to a slice to an +// abstract.Scheme array of your own construction, rather than mutating the +// array the slice points to. +// +// To see the default schemes used in the current release of passlib, see +// default.go. See also the UseDefaults function for more information on how +// the list of default schemes is determined. The default value of +// DefaultSchemes (the default defaults) won't change; you need to call +// UseDefaults to allow your application to upgrade to newer hashing schemes +// (or set DefaultSchemes manually, or create a custom context with its own +// schemes set). +var DefaultSchemes []abstract.Scheme + +func init() { + DefaultSchemes = defaultSchemes20160922 +} + +// It is strongly recommended that you call this function like this before using passlib: +// +// passlib.UseDefaults("YYYYMMDD") +// +// where YYYYMMDD is a date. This will be used to select the preferred scheme +// to use. If you do not call UseDefaults, the preferred scheme (the first item +// in the default schemes list) current as of 2016-09-22 will always be used, +// meaning that upgrade will not occur even though better schemes are now +// available. +// +// Note that even if you don't call this function, new schemes will still be +// added to DefaultSchemes over time as non-initial values (items not at index +// 0), so servers will always, by default, be able to validate all schemes +// which passlib supports at any given time. +// +// The reason you must call this function is as follows: If passlib is deployed +// as part of a web application in a multi-server deployment, and passlib is +// updated, and the new version of that application with the updated passlib is +// deployed, that upgrade process is unlikely to be instantaneous. Old versions +// of the web application may continue to run on some servers. If merely +// upgrading passlib caused password hashes to be upgraded to the newer scheme +// on login, the older daemons may not be able to validate these passwords and +// users may have issues logging in. Although this can be ameliorated to some +// extent by introducing a new scheme to passlib, waiting some months, and only +// then making this the default, this could still cause issued if passlib is +// only updated very occasionally. +// +// Thus, you should update your call to UseDefaults only when all servers have +// been upgraded, and it is thus guaranteed that they will all be able to +// verify the new scheme. Making this value loadable from a configuration file +// is recommended. +// +// If you are using a single-server configuration, you can use the special +// value "latest" here (or, equivalently, a date far into the future), which +// will always use the most preferred scheme. This is hazardous in a +// multi-server environment. +// +// The constants beginning 'Defaults' in this package document dates +// which are meaningful to this function. The constant values they are equal to +// will never change, so there is no need to use them instead of string +// literals, although you may if you wish; they are intended mainly as +// documentation as to the significance of various dates. +// +// Example for opting in to the latest set of defaults: +// +// passlib.UseDefaults(passlib.Defaults20180601) +// +func UseDefaults(date string) error { + if date == "latest" { + DefaultSchemes = defaultSchemes20180601 + return nil + } + + t, err := time.ParseInLocation("20060102", date, time.UTC) + if err != nil { + return fmt.Errorf("invalid time string passed to passlib.UseDefaults: %q", date) + } + + if !t.Before(time.Date(2016, 9, 22, 0, 0, 0, 0, time.UTC)) { + DefaultSchemes = defaultSchemes20180601 + return nil + } + + DefaultSchemes = defaultSchemes20160922 + return nil +} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/argon2/argon2.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/argon2/argon2.go new file mode 100644 index 0000000..63629ac --- /dev/null +++ b/vendor/gopkg.in/hlandau/passlib.v1/hash/argon2/argon2.go @@ -0,0 +1,115 @@ +// Package argon2 implements the argon2 password hashing mechanism, wrapped in +// the argon2 encoded format. +package argon2 + +import ( + "crypto/rand" + "encoding/base64" + "fmt" + "strings" + + "golang.org/x/crypto/argon2" + "gopkg.in/hlandau/passlib.v1/abstract" + "gopkg.in/hlandau/passlib.v1/hash/argon2/raw" +) + +// An implementation of Scheme performing argon2 hashing. +// +// Uses the recommended values for time, memory and threads defined in raw. +var Crypter abstract.Scheme + +const saltLength = 16 + +func init() { + Crypter = New( + raw.RecommendedTime, + raw.RecommendedMemory, + raw.RecommendedThreads, + ) +} + +// Returns an implementation of Scheme implementing argon2 +// with the specified parameters. +func New(time, memory uint32, threads uint8) abstract.Scheme { + return &scheme{ + time: time, + memory: memory, + threads: threads, + } +} + +type scheme struct { + time, memory uint32 + threads uint8 +} + +func (c *scheme) SetParams(time, memory uint32, threads uint8) error { + c.time = time + c.memory = memory + c.threads = threads + return nil +} + +func (c *scheme) SupportsStub(stub string) bool { + return strings.HasPrefix(stub, "$argon2i$") +} + +func (c *scheme) Hash(password string) (string, error) { + + stub, err := c.makeStub() + if err != nil { + return "", err + } + + _, newHash, _, _, _, _, _, err := c.hash(password, stub) + return newHash, err +} + +func (c *scheme) Verify(password, hash string) (err error) { + + _, newHash, _, _, _, _, _, err := c.hash(password, hash) + if err == nil && !abstract.SecureCompare(hash, newHash) { + err = abstract.ErrInvalidPassword + } + + return +} + +func (c *scheme) NeedsUpdate(stub string) bool { + salt, _, version, time, memory, threads, err := raw.Parse(stub) + if err != nil { + return false // ... + } + + return c.needsUpdate(salt, version, time, memory, threads) +} + +func (c *scheme) needsUpdate(salt []byte, version int, time, memory uint32, threads uint8) bool { + return len(salt) < saltLength || version < argon2.Version || time < c.time || memory < c.memory || threads < c.threads +} + +func (c *scheme) hash(password, stub string) (oldHashRaw []byte, newHash string, salt []byte, version int, memory, time uint32, threads uint8, err error) { + + salt, oldHashRaw, version, time, memory, threads, err = raw.Parse(stub) + if err != nil { + return + } + + return oldHashRaw, raw.Argon2(password, salt, time, memory, threads), salt, version, memory, time, threads, nil +} + +func (c *scheme) makeStub() (string, error) { + buf := make([]byte, saltLength) + _, err := rand.Read(buf) + if err != nil { + return "", err + } + + salt := base64.RawStdEncoding.EncodeToString(buf) + + return fmt.Sprintf("$argon2i$v=%d$m=%d,t=%d,p=%d$%s$", argon2.Version, c.memory, c.time, c.threads, salt), nil +} + +func (c *scheme) String() string { + return fmt.Sprintf("argon2(%d,%d,%d,%d)", argon2.Version, c.memory, c.time, c.threads) +} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/argon2/raw/argon2.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/argon2/raw/argon2.go new file mode 100644 index 0000000..47a8dde --- /dev/null +++ b/vendor/gopkg.in/hlandau/passlib.v1/hash/argon2/raw/argon2.go @@ -0,0 +1,186 @@ +// Package raw provides a raw implementation of the modular-crypt-wrapped Argon2i primitive. +package raw + +import ( + "encoding/base64" + "fmt" + "golang.org/x/crypto/argon2" + "strconv" + "strings" +) + +// The current recommended time value for interactive logins. +const RecommendedTime uint32 = 4 + +// The current recommended memory for interactive logins. +const RecommendedMemory uint32 = 32 * 1024 + +// The current recommended number of threads for interactive logins. +const RecommendedThreads uint8 = 4 + +// Wrapper for golang.org/x/crypto/argon2 implementing a sensible +// hashing interface. +// +// password should be a UTF-8 plaintext password. +// salt should be a random salt value in binary form. +// +// Time, memory, and threads are parameters to argon2. +// +// Returns an argon2 encoded hash. +func Argon2(password string, salt []byte, time, memory uint32, threads uint8) string { + passwordb := []byte(password) + + hash := argon2.Key(passwordb, salt, time, memory, threads, 32) + + hstr := base64.RawStdEncoding.EncodeToString(hash) + sstr := base64.RawStdEncoding.EncodeToString(salt) + + return fmt.Sprintf("$argon2i$v=%d$m=%d,t=%d,p=%d$%s$%s", argon2.Version, memory, time, threads, sstr, hstr) +} + +// Indicates that a password hash or stub is invalid. +var ErrInvalidStub = fmt.Errorf("invalid argon2 password stub") + +// Indicates that a key-value pair in the configuration part is malformed. +var ErrInvalidKeyValuePair = fmt.Errorf("invalid argon2 key-value pair") + +// Indicates that the version part had the wrong number of parameters. +var ErrParseVersion = fmt.Errorf("version section has wrong number of parameters") + +// Indicates that the hash config part had the wrong number of parameters. +var ErrParseConfig = fmt.Errorf("hash config section has wrong number of parameters") + +// Indicates that the version parameter ("v") was missing in the version part, +// even though it is required. +var ErrMissingVersion = fmt.Errorf("version parameter (v) is missing") + +// Indicates that the memory parameter ("m") was mossing in the hash config +// part, even though it is required. +var ErrMissingMemory = fmt.Errorf("memory parameter (m) is missing") + +// Indicates that the time parameter ("t") was mossing in the hash config part, +// even though it is required. +var ErrMissingTime = fmt.Errorf("time parameter (t) is missing") + +// Indicates that the parallelism parameter ("p") was mossing in the hash config +// part, even though it is required. +var ErrMissingParallelism = fmt.Errorf("parallelism parameter (p) is missing") + +// Parses an argon2 encoded hash. +// +// The format is as follows: +// +// $argon2i$v=version$m=memory,t=time,p=threads$salt$hash // hash +// $argon2i$v=version$m=memory,t=time,p=threads$salt // stub +// +func Parse(stub string) (salt, hash []byte, version int, time, memory uint32, parallelism uint8, err error) { + if len(stub) < 26 || !strings.HasPrefix(stub, "$argon2i$") { + err = ErrInvalidStub + return + } + + // $argon2i$ v=version$m=memory,t=time,p=threads$salt-base64$hash-base64 + parts := strings.Split(stub[9:], "$") + + // version-params$hash-config-params$salt[$hash] + if len(parts) < 3 || len(parts) > 4 { + err = ErrInvalidStub + return + } + + // Parse the first configuration part, the version parameters. + versionParams, err := parseKeyValuePair(parts[0]) + if err != nil { + return + } + + // Must be exactly one parameter in the version part. + if len(versionParams) != 1 { + err = ErrParseVersion + return + } + + // It must be "v". + val, ok := versionParams["v"] + if !ok { + err = ErrMissingVersion + return + } + + version = int(val) + + // Parse the second configuration part, the hash config parameters. + hashParams, err := parseKeyValuePair(parts[1]) + if err != nil { + return + } + + // It must have exactly three parameters. + if len(hashParams) != 3 { + err = ErrParseConfig + return + } + + // Memory parameter. + val, ok = hashParams["m"] + if !ok { + err = ErrMissingMemory + return + } + + memory = uint32(val) + + // Time parameter. + val, ok = hashParams["t"] + if !ok { + err = ErrMissingTime + return + } + + time = uint32(val) + + // Parallelism parameter. + val, ok = hashParams["p"] + if !ok { + err = ErrMissingParallelism + return + } + + parallelism = uint8(val) + + // Decode salt. + salt, err = base64.RawStdEncoding.DecodeString(parts[2]) + if err != nil { + return + } + + // Decode hash if present. + if len(parts) >= 4 { + hash, err = base64.RawStdEncoding.DecodeString(parts[3]) + } + + return +} + +func parseKeyValuePair(pairs string) (result map[string]uint64, err error) { + result = map[string]uint64{} + + parameterParts := strings.Split(pairs, ",") + + for _, parameter := range parameterParts { + parts := strings.SplitN(parameter, "=", 2) + if len(parts) != 2 { + err = ErrInvalidKeyValuePair + return + } + + parsedi, err := strconv.ParseUint(parts[1], 10, 32) + if err != nil { + return result, err + } + + result[parts[0]] = parsedi + } + + return result, nil +} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/bcrypt/bcrypt.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/bcrypt/bcrypt.go new file mode 100644 index 0000000..fbcc38d --- /dev/null +++ b/vendor/gopkg.in/hlandau/passlib.v1/hash/bcrypt/bcrypt.go @@ -0,0 +1,72 @@ +// Package bcrypt implements the bcrypt password hashing mechanism. +// +// Please note that bcrypt truncates passwords to 72 characters in length. Consider using +// a more modern hashing scheme such as scrypt or sha-crypt. If you must use bcrypt, +// consider using bcrypt-sha256 instead. +package bcrypt + +import "golang.org/x/crypto/bcrypt" +import "gopkg.in/hlandau/passlib.v1/abstract" +import "fmt" + +// An implementation of Scheme implementing bcrypt. +// +// Uses RecommendedCost. +var Crypter abstract.Scheme + +// The recommended cost for bcrypt. This may change with subsequent releases. +const RecommendedCost = 12 + +// bcrypt.DefaultCost is a bit low (10), so use 12 instead. + +func init() { + Crypter = New(RecommendedCost) +} + +// Create a new scheme implementing bcrypt. The recommended cost is RecommendedCost. +func New(cost int) abstract.Scheme { + return &scheme{ + Cost: cost, + } +} + +type scheme struct { + Cost int +} + +func (s *scheme) SupportsStub(stub string) bool { + return len(stub) >= 3 && stub[0] == '$' && stub[1] == '2' && + (stub[2] == '$' || (len(stub) >= 4 && stub[3] == '$' && + (stub[2] == 'a' || stub[2] == 'b' || stub[2] == 'y'))) +} + +func (s *scheme) Hash(password string) (string, error) { + h, err := bcrypt.GenerateFromPassword([]byte(password), s.Cost) + if err != nil { + return "", err + } + + return string(h), nil +} + +func (s *scheme) Verify(password, hash string) error { + err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password)) + if err == bcrypt.ErrMismatchedHashAndPassword { + err = abstract.ErrInvalidPassword + } + + return err +} + +func (s *scheme) NeedsUpdate(stub string) bool { + cost, err := bcrypt.Cost([]byte(stub)) + if err != nil { + return false + } + + return cost < s.Cost +} + +func (s *scheme) String() string { + return fmt.Sprintf("bcrypt(%d)", s.Cost) +} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/bcryptsha256/bcryptsha256.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/bcryptsha256/bcryptsha256.go new file mode 100644 index 0000000..e11d083 --- /dev/null +++ b/vendor/gopkg.in/hlandau/passlib.v1/hash/bcryptsha256/bcryptsha256.go @@ -0,0 +1,96 @@ +// Package bcryptsha256 implements bcrypt with a SHA256 prehash in a format that is compatible with Python passlib's equivalent bcrypt-sha256 scheme. +// +// This is preferred over bcrypt because the prehash essentially renders bcrypt's password length +// limitation irrelevant; although of course it is less compatible. +package bcryptsha256 + +import "gopkg.in/hlandau/passlib.v1/abstract" +import "gopkg.in/hlandau/passlib.v1/hash/bcrypt" +import "encoding/base64" +import "crypto/sha256" +import "strings" +import "fmt" + +type scheme struct { + underlying abstract.Scheme + cost int +} + +// An implementation of Scheme implementing Python passlib's `$bcrypt-sha256$` +// bcrypt variant. This is bcrypt with a SHA256 prehash, which removes bcrypt's +// password length limitation. +var Crypter abstract.Scheme + +// The recommended cost for bcrypt-sha256. This may change with subsequent releases. +const RecommendedCost = bcrypt.RecommendedCost + +func init() { + Crypter = New(bcrypt.RecommendedCost) +} + +// Instantiates a new Scheme implementing bcrypt with the given cost. +// +// The recommended cost is RecommendedCost. +func New(cost int) abstract.Scheme { + return &scheme{ + underlying: bcrypt.New(cost), + cost: cost, + } +} + +func (s *scheme) Hash(password string) (string, error) { + p := s.prehash(password) + h, err := s.underlying.Hash(p) + if err != nil { + return "", err + } + + return mangle(h), nil +} + +func (s *scheme) Verify(password, hash string) error { + p := s.prehash(password) + return s.underlying.Verify(p, demangle(hash)) +} + +func (s *scheme) prehash(password string) string { + h := sha256.New() + h.Write([]byte(password)) + v := base64.StdEncoding.EncodeToString(h.Sum(nil)) + return v +} + +func (s *scheme) SupportsStub(stub string) bool { + return strings.HasPrefix(stub, "$bcrypt-sha256$") && s.underlying.SupportsStub(demangle(stub)) +} + +func (s *scheme) NeedsUpdate(stub string) bool { + return s.underlying.NeedsUpdate(demangle(stub)) +} + +func (s *scheme) String() string { + return fmt.Sprintf("bcrypt-sha256(%d)", s.cost) +} + +func demangle(stub string) string { + if strings.HasPrefix(stub, "$bcrypt-sha256$2") { + parts := strings.Split(stub[15:], "$") + // 0: 2a,12 + // 1: salt + // 2: hash + parts0 := strings.Split(parts[0], ",") + return "$" + parts0[0] + "$" + fmt.Sprintf("%02s", parts0[1]) + "$" + parts[1] + parts[2] + } else { + return stub + } +} + +func mangle(hash string) string { + parts := strings.Split(hash[1:], "$") + // 0: 2a + // 1: rounds + // 2: salt + hash + salt := parts[2][0:22] + h := parts[2][22:] + return "$bcrypt-sha256$" + parts[0] + "," + parts[1] + "$" + salt + "$" + h +} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/pbkdf2.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/pbkdf2.go new file mode 100644 index 0000000..8037bb1 --- /dev/null +++ b/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/pbkdf2.go @@ -0,0 +1,94 @@ +// Package pbkdf2 implements a modular crypt format for PBKDF2-SHA1, +// PBKDF2-SHA256 and PBKDF-SHA512. +// +// The format is the same as that used by Python's passlib and is compatible. +package pbkdf2 + +import ( + "crypto/rand" + "crypto/sha1" + "crypto/sha256" + "crypto/sha512" + "fmt" + "gopkg.in/hlandau/passlib.v1/abstract" + "gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw" + "hash" + "strings" +) + +// An implementation of Scheme implementing a number of PBKDF2 modular crypt +// formats used by Python's passlib ($pbkdf2$, $pbkdf2-sha256$, +// $pbkdf2-sha512$). +// +// Uses RecommendedRounds. +// +// WARNING: SHA1 should not be used for new applications under any +// circumstances. It should be used for legacy compatibility only. +var SHA1Crypter abstract.Scheme +var SHA256Crypter abstract.Scheme +var SHA512Crypter abstract.Scheme + +const ( + RecommendedRoundsSHA1 = 131000 + RecommendedRoundsSHA256 = 29000 + RecommendedRoundsSHA512 = 25000 +) + +const SaltLength = 16 + +func init() { + SHA1Crypter = New("$pbkdf2$", sha1.New, RecommendedRoundsSHA1) + SHA256Crypter = New("$pbkdf2-sha256$", sha256.New, RecommendedRoundsSHA256) + SHA512Crypter = New("$pbkdf2-sha512$", sha512.New, RecommendedRoundsSHA512) +} + +type scheme struct { + Ident string + HashFunc func() hash.Hash + Rounds int +} + +func New(ident string, hf func() hash.Hash, rounds int) abstract.Scheme { + return &scheme{ + Ident: ident, + HashFunc: hf, + Rounds: rounds, + } +} + +func (s *scheme) Hash(password string) (string, error) { + salt := make([]byte, SaltLength) + _, err := rand.Read(salt) + if err != nil { + return "", err + } + + hash := raw.Hash([]byte(password), salt, s.Rounds, s.HashFunc) + + newHash := fmt.Sprintf("%s%d$%s$%s", s.Ident, s.Rounds, raw.Base64Encode(salt), hash) + return newHash, nil +} + +func (s *scheme) Verify(password, stub string) (err error) { + _, rounds, salt, oldHash, err := raw.Parse(stub) + if err != nil { + return + } + + newHash := raw.Hash([]byte(password), salt, rounds, s.HashFunc) + + if len(newHash) == 0 || !abstract.SecureCompare(oldHash, newHash) { + err = abstract.ErrInvalidPassword + } + + return +} + +func (s *scheme) SupportsStub(stub string) bool { + return strings.HasPrefix(stub, s.Ident) +} + +func (s *scheme) NeedsUpdate(stub string) bool { + _, rounds, salt, _, err := raw.Parse(stub) + return err == raw.ErrInvalidRounds || rounds < s.Rounds || len(salt) < SaltLength +} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/base64.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/base64.go new file mode 100644 index 0000000..ad57957 --- /dev/null +++ b/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/base64.go @@ -0,0 +1,20 @@ +package raw + +import ( + "encoding/base64" + "strings" +) + +var b64 = base64.RawStdEncoding + +func Base64Encode(src []byte) (dst string) { + dst = b64.EncodeToString(src) + dst = strings.Replace(dst, "+", ".", -1) + return +} + +func Base64Decode(src string) (dst []byte, err error) { + src = strings.Replace(src, ".", "+", -1) + dst, err = b64.DecodeString(src) + return +} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/parse.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/parse.go new file mode 100644 index 0000000..54f7108 --- /dev/null +++ b/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/parse.go @@ -0,0 +1,62 @@ +package raw + +import ( + "crypto/sha1" + "crypto/sha256" + "crypto/sha512" + "fmt" + "hash" + "strconv" + "strings" +) + +// Indicates that a password hash or stub is invalid. +var ErrInvalidStub = fmt.Errorf("invalid stub") + +// Indicates that the number of rounds specified is not in the valid range. +var ErrInvalidRounds = fmt.Errorf("invalid number of rounds") + +var hashMap = map[string]func() hash.Hash{ + "pbkdf2": sha1.New, + "pbkdf2-sha256": sha256.New, + "pbkdf2-sha512": sha512.New, +} + +func Parse(stub string) (hashFunc func() hash.Hash, rounds int, salt []byte, hash string, err error) { + // does not start with $pbkdf2 + if !strings.HasPrefix(stub, "$pbkdf2") { + err = ErrInvalidStub + return + } + + parts := strings.Split(stub, "$") + if f, ok := hashMap[parts[1]]; ok { + hashFunc = f + } else { + err = ErrInvalidStub + return + } + + roundsStr := parts[2] + var n uint64 + n, err = strconv.ParseUint(roundsStr, 10, 31) + if err != nil { + err = ErrInvalidStub + return + } + rounds = int(n) + + if rounds < MinRounds || rounds > MaxRounds { + err = ErrInvalidRounds + return + } + + salt, err = Base64Decode(parts[3]) + if err != nil { + err = fmt.Errorf("could not decode base64 salt") + return + } + hash = parts[4] + + return +} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/pbkdf2.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/pbkdf2.go new file mode 100644 index 0000000..8bd7922 --- /dev/null +++ b/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/pbkdf2.go @@ -0,0 +1,15 @@ +package raw + +import ( + "golang.org/x/crypto/pbkdf2" + "hash" +) + +const ( + MinRounds = 1 + MaxRounds = 0x7fffffff // setting at 32-bit signed integer limit for now +) + +func Hash(password, salt []byte, rounds int, hf func() hash.Hash) (hash string) { + return Base64Encode(pbkdf2.Key(password, salt, rounds, hf().Size(), hf)) +} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/test.py b/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/test.py new file mode 100644 index 0000000..f851848 --- /dev/null +++ b/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/test.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 +import passlib.hash +import base64 +def f(p): + h = passlib.hash.pbkdf2_sha256.hash(p) + print(' {"%s", "%s"},' % (p,h)) + +f('') +f('a') +f('ab') +f('abc') +f('abcd') +f('abcde') +f('abcdef') +f('abcdefg') +f('abcdefgh') +f('abcdefghi') +f('abcdefghij') +f('abcdefghijk') +f('abcdefghijkl') +f('abcdefghijklm') +f('abcdefghijklmn') +f('abcdefghijklmno') +f('abcdefghijklmnop') +f('qrstuvwxyz012345') +f('67890./') +f('ABCDEFGHIJKLMNOP') +f('QRSTUVWXYZ012345') +for i in range(70): + f(('password'*10)[0:i]) diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/scrypt/raw/scrypt.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/scrypt/raw/scrypt.go new file mode 100644 index 0000000..d2718b2 --- /dev/null +++ b/vendor/gopkg.in/hlandau/passlib.v1/hash/scrypt/raw/scrypt.go @@ -0,0 +1,95 @@ +// Package raw provides a raw implementation of the modular-crypt-wrapped scrypt primitive. +package raw + +import "golang.org/x/crypto/scrypt" +import "encoding/base64" +import "strings" +import "strconv" +import "fmt" + +// The current recommended N value for interactive logins. +const RecommendedN = 16384 + +// The current recommended r value for interactive logins. +const Recommendedr = 8 + +// The current recommended p value for interactive logins. +const Recommendedp = 1 + +// Wrapper for golang.org/x/crypto/scrypt implementing a sensible +// modular crypt interface. +// +// password should be a UTF-8 plaintext password. +// salt should be a random salt value in binary form. +// +// N, r and p are parameters to scrypt. +// +// Returns a modular crypt hash. +func ScryptSHA256(password string, salt []byte, N, r, p int) string { + passwordb := []byte(password) + + hash, err := scrypt.Key(passwordb, salt, N, r, p, 32) + if err != nil { + panic(err) + } + + hstr := base64.StdEncoding.EncodeToString(hash) + sstr := base64.StdEncoding.EncodeToString(salt) + + return fmt.Sprintf("$s2$%d$%d$%d$%s$%s", N, r, p, sstr, hstr) +} + +// Indicates that a password hash or stub is invalid. +var ErrInvalidStub = fmt.Errorf("invalid scrypt password stub") + +// Parses an scrypt modular hash or stub string. +// +// The format is as follows: +// +// $s2$N$r$p$salt$hash // hash +// $s2$N$r$p$salt // stub +// +func Parse(stub string) (salt, hash []byte, N, r, p int, err error) { + if len(stub) < 10 || !strings.HasPrefix(stub, "$s2$") { + err = ErrInvalidStub + return + } + + // $s2$ N$r$p$salt-base64$hash-base64 + parts := strings.Split(stub[4:], "$") + + if len(parts) < 4 { + err = ErrInvalidStub + return + } + + var Ni, ri, pi uint64 + + Ni, err = strconv.ParseUint(parts[0], 10, 31) + if err != nil { + return + } + + ri, err = strconv.ParseUint(parts[1], 10, 31) + if err != nil { + return + } + + pi, err = strconv.ParseUint(parts[2], 10, 31) + if err != nil { + return + } + + N, r, p = int(Ni), int(ri), int(pi) + + salt, err = base64.StdEncoding.DecodeString(parts[3]) + if err != nil { + return + } + + if len(parts) >= 5 { + hash, err = base64.StdEncoding.DecodeString(parts[4]) + } + + return +} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/scrypt/scrypt.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/scrypt/scrypt.go new file mode 100644 index 0000000..039182c --- /dev/null +++ b/vendor/gopkg.in/hlandau/passlib.v1/hash/scrypt/scrypt.go @@ -0,0 +1,113 @@ +// Package scrypt implements the scrypt password hashing mechanism, wrapped in +// the modular crypt format. +package scrypt + +import "fmt" +import "expvar" +import "strings" +import "crypto/rand" +import "encoding/base64" +import "gopkg.in/hlandau/passlib.v1/hash/scrypt/raw" +import "gopkg.in/hlandau/passlib.v1/abstract" + +var cScryptSHA256HashCalls = expvar.NewInt("passlib.scryptsha256.hashCalls") +var cScryptSHA256VerifyCalls = expvar.NewInt("passlib.scryptsha256.verifyCalls") + +// An implementation of Scheme performing scrypt-sha256. +// +// Uses the recommended values for N,r,p defined in raw. +var SHA256Crypter abstract.Scheme + +func init() { + SHA256Crypter = NewSHA256( + raw.RecommendedN, + raw.Recommendedr, + raw.Recommendedp, + ) +} + +// Returns an implementation of Scheme implementing scrypt-sha256 +// with the specified parameters. +func NewSHA256(N, r, p int) abstract.Scheme { + return &scryptSHA256Crypter{ + nN: N, + r: r, + p: p, + } +} + +type scryptSHA256Crypter struct { + nN, r, p int +} + +func (c *scryptSHA256Crypter) SetParams(N, r, p int) error { + c.nN = N + c.r = r + c.p = p + return nil +} + +func (c *scryptSHA256Crypter) SupportsStub(stub string) bool { + return strings.HasPrefix(stub, "$s2$") +} + +func (c *scryptSHA256Crypter) Hash(password string) (string, error) { + cScryptSHA256HashCalls.Add(1) + + stub, err := c.makeStub() + if err != nil { + return "", err + } + + _, newHash, _, _, _, _, err := c.hash(password, stub) + return newHash, err +} + +func (c *scryptSHA256Crypter) Verify(password, hash string) (err error) { + cScryptSHA256VerifyCalls.Add(1) + + _, newHash, _, _, _, _, err := c.hash(password, hash) + if err == nil && !abstract.SecureCompare(hash, newHash) { + err = abstract.ErrInvalidPassword + } + + return +} + +func (c *scryptSHA256Crypter) NeedsUpdate(stub string) bool { + salt, _, N, r, p, err := raw.Parse(stub) + if err != nil { + return false // ... + } + + return c.needsUpdate(salt, N, r, p) +} + +func (c *scryptSHA256Crypter) needsUpdate(salt []byte, N, r, p int) bool { + return len(salt) < 18 || N < c.nN || r < c.r || p < c.p +} + +func (c *scryptSHA256Crypter) hash(password, stub string) (oldHashRaw []byte, newHash string, salt []byte, N, r, p int, err error) { + salt, oldHashRaw, N, r, p, err = raw.Parse(stub) + if err != nil { + return + } + + return oldHashRaw, raw.ScryptSHA256(password, salt, N, r, p), salt, N, r, p, nil +} + +func (c *scryptSHA256Crypter) makeStub() (string, error) { + buf := make([]byte, 18) + _, err := rand.Read(buf) + if err != nil { + return "", err + } + + salt := base64.StdEncoding.EncodeToString(buf) + + return fmt.Sprintf("$s2$%d$%d$%d$%s", c.nN, c.r, c.p, salt), nil +} + +func (c *scryptSHA256Crypter) String() string { + return fmt.Sprintf("scrypt-sha256(%d,%d,%d)", c.nN, c.r, c.p) +} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/base64.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/base64.go new file mode 100644 index 0000000..2f96e6e --- /dev/null +++ b/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/base64.go @@ -0,0 +1,34 @@ +package raw + +const bmap = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + +// Encodes a byte string using the sha2-crypt base64 variant. +func EncodeBase64(b []byte) string { + o := make([]byte, len(b)/3*4+4) + + for i, j := 0, 0; i < len(b); { + b1 := b[i] + b2 := byte(0) + b3 := byte(0) + + if (i + 1) < len(b) { + b2 = b[i+1] + } + if (i + 2) < len(b) { + b3 = b[i+2] + } + + o[j] = bmap[(b1 & 0x3F)] + o[j+1] = bmap[((b1&0xC0)>>6)|((b2&0x0F)<<2)] + o[j+2] = bmap[((b2&0xF0)>>4)|((b3&0x03)<<4)] + o[j+3] = bmap[(b3&0xFC)>>2] + i += 3 + j += 4 + } + + s := string(o) + return s[0 : len(b)*4/3-(len(b)%4)+1] +} + +// © 2008-2012 Assurance Technologies LLC. (Python passlib) BSD License +// © 2014 Hugo Landau BSD License diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/parse.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/parse.go new file mode 100644 index 0000000..9e1fcfc --- /dev/null +++ b/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/parse.go @@ -0,0 +1,82 @@ +package raw + +import "fmt" +import "strings" +import "strconv" + +// Indicates that a password hash or stub is invalid. +var ErrInvalidStub = fmt.Errorf("invalid stub") + +// Indicates that the number of rounds specified is not in the valid range. +var ErrInvalidRounds = fmt.Errorf("invalid number of rounds") + +// Scans a sha256-crypt or sha512-crypt modular crypt stub or modular crypt hash +// to determine configuration parameters. +func Parse(stub string) (isSHA512 bool, salt, hash string, rounds int, err error) { + // $5$ + if len(stub) < 3 || stub[0] != '$' || stub[2] != '$' { + err = ErrInvalidStub + return + } + + if stub[1] == '6' { + isSHA512 = true + } else if stub[1] != '5' { + err = ErrInvalidStub + return + } + + rest := stub[3:] + parts := strings.Split(rest, "$") + roundsStr := "" + + switch len(parts) { + case 1: + // $5$ + // $5$salt + salt = parts[0] + case 2: + // $5$salt$hash + // $5$rounds=1000$salt + if strings.HasPrefix(parts[0], "rounds=") { + roundsStr = parts[0] + salt = parts[1] + } else { + salt = parts[0] + hash = parts[1] + } + case 3: + // $5$rounds=1000$salt$hash + roundsStr = parts[0] + salt = parts[1] + hash = parts[2] + default: + err = ErrInvalidStub + } + + if roundsStr != "" { + if !strings.HasPrefix(roundsStr, "rounds=") { + err = ErrInvalidStub + return + } + + roundsStr = roundsStr[7:] + var n uint64 + n, err = strconv.ParseUint(roundsStr, 10, 31) + if err != nil { + err = ErrInvalidStub + return + } + + rounds = int(n) + + if rounds < MinimumRounds || rounds > MaximumRounds { + err = ErrInvalidRounds + return + } + } else { + rounds = DefaultRounds + } + + return +} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/sha2crypt.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/sha2crypt.go new file mode 100644 index 0000000..4b256fd --- /dev/null +++ b/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/sha2crypt.go @@ -0,0 +1,187 @@ +// Package raw provides a raw implementation of the sha256-crypt and sha512-crypt primitives. +package raw + +import "io" +import "fmt" +import "hash" +import "crypto/sha256" +import "crypto/sha512" + +// The minimum number of rounds permissible for sha256-crypt and sha512-crypt. +const MinimumRounds = 1000 + +// The maximum number of rounds permissible for sha256-crypt and sha512-crypt. +// Don't use this! +const MaximumRounds = 999999999 + +// This is the 'default' number of rounds for sha256-crypt and sha512-crypt. If +// this rounds value is used the number of rounds is not explicitly specified +// in the modular crypt format, as it is the default. +const DefaultRounds = 5000 + +// This is the recommended number of rounds for sha256-crypt and sha512-crypt. +// This may change with subsequent releases of this package. It is recommended +// that you invoke sha256-crypt or sha512-crypt with this value, or a value +// proportional to it. +const RecommendedRounds = 10000 + +// Calculates sha256-crypt. The password must be in plaintext and be a UTF-8 +// string. +// +// The salt must be a valid ASCII between 0 and 16 characters in length +// inclusive. +// +// See the constants in this package for suggested values for rounds. +// +// Rounds must be in the range 1000 <= rounds <= 999999999. The function panics +// if this is not the case. +// +// The output is in modular crypt format. +func Crypt256(password, salt string, rounds int) string { + return "$5" + shaCrypt(password, salt, rounds, sha256.New, transpose256) +} + +// Calculates sha256-crypt. The password must be in plaintext and be a UTF-8 +// string. +// +// The salt must be a valid ASCII between 0 and 16 characters in length +// inclusive. +// +// See the constants in this package for suggested values for rounds. +// +// Rounds must be in the range 1000 <= rounds <= 999999999. The function panics +// if this is not the case. +// +// The output is in modular crypt format. +func Crypt512(password, salt string, rounds int) string { + return "$6" + shaCrypt(password, salt, rounds, sha512.New, transpose512) +} + +func shaCrypt(password, salt string, rounds int, newHash func() hash.Hash, transpose func(b []byte)) string { + if rounds < MinimumRounds || rounds > MaximumRounds { + panic("sha256-crypt rounds must be in 1000 <= rounds <= 999999999") + } + + passwordb := []byte(password) + saltb := []byte(salt) + if len(saltb) > 16 { + panic("salt must not exceed 16 bytes") + } + + // B + b := newHash() + b.Write(passwordb) + b.Write(saltb) + b.Write(passwordb) + bsum := b.Sum(nil) + + // A + a := newHash() + a.Write(passwordb) + a.Write(saltb) + repeat(a, bsum, len(passwordb)) + + plen := len(passwordb) + for plen != 0 { + if (plen & 1) != 0 { + a.Write(bsum) + } else { + a.Write(passwordb) + } + plen = plen >> 1 + } + + asum := a.Sum(nil) + + // DP + dp := newHash() + for i := 0; i < len(passwordb); i++ { + dp.Write(passwordb) + } + + dpsum := dp.Sum(nil) + + // P + p := make([]byte, len(passwordb)) + repeatTo(p, dpsum) + + // DS + ds := newHash() + for i := 0; i < (16 + int(asum[0])); i++ { + ds.Write(saltb) + } + + dssum := ds.Sum(nil)[0:len(saltb)] + + // S + s := make([]byte, len(saltb)) + repeatTo(s, dssum) + + // C + cur := asum[:] + for i := 0; i < rounds; i++ { + c := newHash() + if (i & 1) != 0 { + c.Write(p) + } else { + c.Write(cur) + } + if (i % 3) != 0 { + c.Write(s) + } + if (i % 7) != 0 { + c.Write(p) + } + if (i & 1) == 0 { + c.Write(p) + } else { + c.Write(cur) + } + cur = c.Sum(nil)[:] + } + + // Transposition + transpose(cur) + + // Hash + hstr := EncodeBase64(cur) + + if rounds == DefaultRounds { + return fmt.Sprintf("$%s$%s", salt, hstr) + } + + return fmt.Sprintf("$rounds=%d$%s$%s", rounds, salt, hstr) +} + +func repeat(w io.Writer, b []byte, sz int) { + var i int + for i = 0; (i + len(b)) <= sz; i += len(b) { + w.Write(b) + } + w.Write(b[0 : sz-i]) +} + +func repeatTo(out []byte, b []byte) { + if len(b) == 0 { + return + } + + var i int + for i = 0; (i + len(b)) <= len(out); i += len(b) { + copy(out[i:], b) + } + copy(out[i:], b) +} + +func transpose256(b []byte) { + b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8], b[9], b[10], b[11], b[12], b[13], b[14], b[15], b[16], b[17], b[18], b[19], b[20], b[21], b[22], b[23], b[24], b[25], b[26], b[27], b[28], b[29], b[30], b[31] = + b[20], b[10], b[0], b[11], b[1], b[21], b[2], b[22], b[12], b[23], b[13], b[3], b[14], b[4], b[24], b[5], b[25], b[15], b[26], b[16], b[6], b[17], b[7], b[27], b[8], b[28], b[18], b[29], b[19], b[9], b[30], b[31] +} + +func transpose512(b []byte) { + b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8], b[9], b[10], b[11], b[12], b[13], b[14], b[15], b[16], b[17], b[18], b[19], b[20], b[21], b[22], b[23], b[24], b[25], b[26], b[27], b[28], b[29], b[30], b[31], b[32], b[33], b[34], b[35], b[36], b[37], b[38], b[39], b[40], b[41], b[42], b[43], b[44], b[45], b[46], b[47], b[48], b[49], b[50], b[51], b[52], b[53], b[54], b[55], b[56], b[57], b[58], b[59], b[60], b[61], b[62], b[63] = + b[42], b[21], b[0], b[1], b[43], b[22], b[23], b[2], b[44], b[45], b[24], b[3], b[4], b[46], b[25], b[26], b[5], b[47], b[48], b[27], b[6], b[7], b[49], b[28], b[29], b[8], b[50], b[51], b[30], b[9], b[10], b[52], b[31], b[32], b[11], b[53], b[54], b[33], b[12], b[13], b[55], b[34], b[35], b[14], b[56], b[57], b[36], b[15], b[16], b[58], b[37], b[38], b[17], b[59], b[60], b[39], b[18], b[19], b[61], b[40], b[41], b[20], b[62], b[63] +} + +// © 2008-2012 Assurance Technologies LLC. (Python passlib) BSD License +// © 2014 Hugo Landau BSD License diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/sha2crypt.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/sha2crypt.go new file mode 100644 index 0000000..c936469 --- /dev/null +++ b/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/sha2crypt.go @@ -0,0 +1,147 @@ +// Package sha2crypt implements sha256-crypt and sha512-crypt. +package sha2crypt + +import "fmt" +import "expvar" +import "crypto/rand" +import "gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw" +import "gopkg.in/hlandau/passlib.v1/abstract" + +var cSHA2CryptHashCalls = expvar.NewInt("passlib.sha2crypt.hashCalls") +var cSHA2CryptVerifyCalls = expvar.NewInt("passlib.sha2crypt.verifyCalls") + +// An implementation of Scheme performing sha256-crypt. +// +// The number of rounds is raw.RecommendedRounds. +var Crypter256 abstract.Scheme + +// An implementation of Scheme performing sha512-crypt. +// +// The number of rounds is raw.RecommendedRounds. +var Crypter512 abstract.Scheme + +func init() { + Crypter256 = NewCrypter256(raw.RecommendedRounds) + Crypter512 = NewCrypter512(raw.RecommendedRounds) +} + +// Returns a Scheme implementing sha256-crypt using the number of rounds +// specified. +func NewCrypter256(rounds int) abstract.Scheme { + return &sha2Crypter{false, rounds} +} + +// Returns a Scheme implementing sha512-crypt using the number of rounds +// specified. +func NewCrypter512(rounds int) abstract.Scheme { + return &sha2Crypter{true, rounds} +} + +type sha2Crypter struct { + sha512 bool + rounds int +} + +// Changes the default rounds for the crypter. Be warned that this +// is a global setting. The default default value is RecommendedRounds. +func (c *sha2Crypter) SetRounds(rounds int) error { + if rounds < raw.MinimumRounds || rounds > raw.MaximumRounds { + return raw.ErrInvalidRounds + } + + c.rounds = rounds + return nil +} + +func (c *sha2Crypter) SupportsStub(stub string) bool { + if len(stub) < 3 || stub[0] != '$' || stub[2] != '$' { + return false + } + return (stub[1] == '5' && !c.sha512) || (stub[1] == '6' && c.sha512) +} + +func (c *sha2Crypter) Hash(password string) (string, error) { + cSHA2CryptHashCalls.Add(1) + + stub, err := c.makeStub() + if err != nil { + return "", err + } + + _, newHash, _, _, err := c.hash(password, stub) + return newHash, err +} + +func (c *sha2Crypter) Verify(password, hash string) (err error) { + cSHA2CryptVerifyCalls.Add(1) + + _, newHash, _, _, err := c.hash(password, hash) + if err == nil && !abstract.SecureCompare(hash, newHash) { + err = abstract.ErrInvalidPassword + } + + return +} + +func (c *sha2Crypter) NeedsUpdate(stub string) bool { + _, salt, _, rounds, err := raw.Parse(stub) + if err != nil { + return false // ... + } + + return c.needsUpdate(salt, rounds) +} + +func (c *sha2Crypter) needsUpdate(salt string, rounds int) bool { + return rounds < c.rounds || len(salt) < 16 +} + +var errInvalidStub = fmt.Errorf("invalid sha2 password stub") + +func (c *sha2Crypter) hash(password, stub string) (oldHash, newHash, salt string, rounds int, err error) { + isSHA512, salt, oldHash, rounds, err := raw.Parse(stub) + if err != nil { + return "", "", "", 0, err + } + + if isSHA512 != c.sha512 { + return "", "", "", 0, errInvalidStub + } + + if c.sha512 { + return oldHash, raw.Crypt512(password, salt, rounds), salt, rounds, nil + } + + return oldHash, raw.Crypt256(password, salt, rounds), salt, rounds, nil +} + +func (c *sha2Crypter) makeStub() (string, error) { + ch := "5" + if c.sha512 { + ch = "6" + } + + buf := make([]byte, 12) + _, err := rand.Read(buf) + if err != nil { + return "", err + } + + salt := raw.EncodeBase64(buf)[0:16] + + if c.rounds == raw.DefaultRounds { + return fmt.Sprintf("$%s$%s", ch, salt), nil + } + + return fmt.Sprintf("$%s$rounds=%d$%s", ch, c.rounds, salt), nil +} + +func (c *sha2Crypter) String() string { + if c.sha512 { + return fmt.Sprintf("sha512-crypt(%d)", c.rounds) + } else { + return fmt.Sprintf("sha256-crypt(%d)", c.rounds) + } +} + +// © 2014 Hugo Landau BSD License diff --git a/vendor/gopkg.in/hlandau/passlib.v1/passlib.go b/vendor/gopkg.in/hlandau/passlib.v1/passlib.go new file mode 100644 index 0000000..0d13c75 --- /dev/null +++ b/vendor/gopkg.in/hlandau/passlib.v1/passlib.go @@ -0,0 +1,174 @@ +// Package passlib provides a simple password hashing and verification +// interface abstracting multiple password hashing schemes. +// +// After initialisation, most people need concern themselves only with the +// functions Hash and Verify, which uses the default context and sensible +// defaults. +// +// Library Initialization +// +// You should initialise the library before using it with the following line. +// +// // Call this at application startup. +// passlib.UseDefaults(passlib.Defaults20180601) +// +// See func UseDefaults for details. +package passlib // import "gopkg.in/hlandau/passlib.v1" + +import ( + "gopkg.in/hlandau/easymetric.v1/cexp" + "gopkg.in/hlandau/passlib.v1/abstract" +) + +var cHashCalls = cexp.NewCounter("passlib.ctx.hashCalls") +var cVerifyCalls = cexp.NewCounter("passlib.ctx.verifyCalls") +var cSuccessfulVerifyCalls = cexp.NewCounter("passlib.ctx.successfulVerifyCalls") +var cFailedVerifyCalls = cexp.NewCounter("passlib.ctx.failedVerifyCalls") +var cSuccessfulVerifyCallsWithUpgrade = cexp.NewCounter("passlib.ctx.successfulVerifyCallsWithUpgrade") +var cSuccessfulVerifyCallsDeferringUpgrade = cexp.NewCounter("passlib.ctx.successfulVerifyCallsDeferringUpgrade") + +// A password hashing context, that uses a given set of schemes to hash and +// verify passwords. +type Context struct { + // Slice of schemes to use, most preferred first. + // + // If left uninitialized, a sensible default set of schemes will be used. + // + // An upgrade hash (see the newHash return value of the Verify method of the + // abstract.Scheme interface) will be issued whenever a password is validated + // using a scheme which is not the first scheme in this slice. + Schemes []abstract.Scheme +} + +func (ctx *Context) schemes() []abstract.Scheme { + if ctx.Schemes == nil { + return DefaultSchemes + } + + return ctx.Schemes +} + +// Hashes a UTF-8 plaintext password using the context and produces a password hash. +// +// If stub is "", one is generated automaticaly for the preferred password hashing +// scheme; you should specify stub as "" in almost all cases. +// +// The provided or randomly generated stub is used to deterministically hash +// the password. The returned hash is in modular crypt format. +// +// If the context has not been specifically configured, a sensible default policy +// is used. See the fields of Context. +func (ctx *Context) Hash(password string) (hash string, err error) { + cHashCalls.Add(1) + + return ctx.schemes()[0].Hash(password) +} + +// Verifies a UTF-8 plaintext password using a previously derived password hash +// and the default context. Returns nil err only if the password is valid. +// +// If the hash is determined to be deprecated based on the context policy, and +// the password is valid, the password is hashed using the preferred password +// hashing scheme and returned in newHash. You should use this to upgrade any +// stored password hash in your database. +// +// newHash is empty if the password was not valid or if no upgrade is required. +// +// You should treat any non-nil err as a password verification error. +func (ctx *Context) Verify(password, hash string) (newHash string, err error) { + return ctx.verify(password, hash, true) +} + +// Like Verify, but does not hash an upgrade password when upgrade is required. +func (ctx *Context) VerifyNoUpgrade(password, hash string) error { + _, err := ctx.verify(password, hash, false) + return err +} + +func (ctx *Context) verify(password, hash string, canUpgrade bool) (newHash string, err error) { + cVerifyCalls.Add(1) + + for i, scheme := range ctx.schemes() { + if !scheme.SupportsStub(hash) { + continue + } + + err = scheme.Verify(password, hash) + if err != nil { + cFailedVerifyCalls.Add(1) + return "", err + } + + cSuccessfulVerifyCalls.Add(1) + if i != 0 || scheme.NeedsUpdate(hash) { + if canUpgrade { + cSuccessfulVerifyCallsWithUpgrade.Add(1) + + // If the scheme is not the first scheme, try and rehash with the + // preferred scheme. + if newHash, err2 := ctx.Hash(password); err2 == nil { + return newHash, nil + } + } else { + cSuccessfulVerifyCallsDeferringUpgrade.Add(1) + } + } + + return "", nil + } + + return "", abstract.ErrUnsupportedScheme +} + +// Determines whether a stub or hash needs updating according to the policy of +// the context. +func (ctx *Context) NeedsUpdate(stub string) bool { + for i, scheme := range ctx.schemes() { + if scheme.SupportsStub(stub) { + return i != 0 || scheme.NeedsUpdate(stub) + } + } + + return false +} + +// The default context, which uses sensible defaults. Most users should not +// reconfigure this. The defaults may change over time, so you may wish +// to reconfigure the context or use a custom context if you want precise +// control over the hashes used. +var DefaultContext Context + +// Hashes a UTF-8 plaintext password using the default context and produces a +// password hash. Chooses the preferred password hashing scheme based on the +// configured policy. The default policy is sensible. +func Hash(password string) (hash string, err error) { + return DefaultContext.Hash(password) +} + +// Verifies a UTF-8 plaintext password using a previously derived password hash +// and the default context. Returns nil err only if the password is valid. +// +// If the hash is determined to be deprecated based on policy, and the password +// is valid, the password is hashed using the preferred password hashing scheme +// and returned in newHash. You should use this to upgrade any stored password +// hash in your database. +// +// newHash is empty if the password was invalid or no upgrade is required. +// +// You should treat any non-nil err as a password verification error. +func Verify(password, hash string) (newHash string, err error) { + return DefaultContext.Verify(password, hash) +} + +// Like Verify, but never upgrades. +func VerifyNoUpgrade(password, hash string) error { + return DefaultContext.VerifyNoUpgrade(password, hash) +} + +// Uses the default context to determine whether a stub or hash needs updating. +func NeedsUpdate(stub string) bool { + return DefaultContext.NeedsUpdate(stub) +} + +// © 2008-2012 Assurance Technologies LLC. (Python passlib) BSD License +// © 2014 Hugo Landau BSD License diff --git a/vendor/modules.txt b/vendor/modules.txt new file mode 100644 index 0000000..45c07a8 --- /dev/null +++ b/vendor/modules.txt @@ -0,0 +1,114 @@ +# blitter.com/go/chacha20 v0.0.0-20200130200441-214e4085f54c +## explicit; go 1.12 +blitter.com/go/chacha20 +blitter.com/go/chacha20/internal/api +blitter.com/go/chacha20/internal/hardware +blitter.com/go/chacha20/internal/ref +# blitter.com/go/cryptmt v1.0.2 +## explicit +blitter.com/go/cryptmt +# blitter.com/go/goutmp v1.0.6 +## explicit; go 1.17 +blitter.com/go/goutmp +# blitter.com/go/herradurakex v1.0.0 +## explicit +blitter.com/go/herradurakex +# blitter.com/go/hopscotch v0.0.0-20211113042251-b8a306eea4dc +## explicit +blitter.com/go/hopscotch +# blitter.com/go/kyber v0.0.0-20200130200857-6f2021cb88d9 +## explicit; go 1.12 +blitter.com/go/kyber +# blitter.com/go/mtwist v1.0.1 +## explicit +blitter.com/go/mtwist +# blitter.com/go/newhope v0.0.0-20200130200750-192fc08a8aae +## explicit; go 1.12 +blitter.com/go/newhope +# github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da +## explicit +github.com/aead/chacha20/chacha +# github.com/creack/pty v1.1.18 +## explicit; go 1.13 +github.com/creack/pty +# github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f +## explicit +github.com/jameskeane/bcrypt +# github.com/klauspost/cpuid/v2 v2.0.6 +## explicit; go 1.13 +github.com/klauspost/cpuid/v2 +# github.com/klauspost/reedsolomon v1.9.16 +## explicit; go 1.14 +github.com/klauspost/reedsolomon +# github.com/kuking/go-frodokem v1.0.2 +## explicit; go 1.14 +github.com/kuking/go-frodokem +# github.com/mattn/go-isatty v0.0.14 +## explicit; go 1.12 +github.com/mattn/go-isatty +# github.com/pkg/errors v0.9.1 +## explicit +github.com/pkg/errors +# github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 +## explicit +github.com/templexxx/cpufeat +# github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b +## explicit +github.com/templexxx/xor +# github.com/tjfoc/gmsm v1.4.1 +## explicit; go 1.14 +github.com/tjfoc/gmsm/sm4 +# github.com/xtaci/kcp-go v5.4.20+incompatible +## explicit +github.com/xtaci/kcp-go +# github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37 +## explicit; go 1.13 +# golang.org/x/crypto v0.0.0-20220408190544-5352b0902921 +## explicit; go 1.17 +golang.org/x/crypto/argon2 +golang.org/x/crypto/bcrypt +golang.org/x/crypto/blake2b +golang.org/x/crypto/blowfish +golang.org/x/crypto/cast5 +golang.org/x/crypto/internal/subtle +golang.org/x/crypto/pbkdf2 +golang.org/x/crypto/salsa20 +golang.org/x/crypto/salsa20/salsa +golang.org/x/crypto/scrypt +golang.org/x/crypto/sha3 +golang.org/x/crypto/tea +golang.org/x/crypto/twofish +golang.org/x/crypto/xtea +# golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 +## explicit; go 1.17 +golang.org/x/net/bpf +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/sys v0.0.0-20220408201424-a24fb2fb8a0f +## explicit; go 1.17 +golang.org/x/sys/cpu +golang.org/x/sys/internal/unsafeheader +golang.org/x/sys/unix +golang.org/x/sys/windows +# gopkg.in/hlandau/easymetric.v1 v1.0.0 +## explicit +gopkg.in/hlandau/easymetric.v1/cexp +# gopkg.in/hlandau/measurable.v1 v1.0.1 +## explicit +gopkg.in/hlandau/measurable.v1 +# gopkg.in/hlandau/passlib.v1 v1.0.11 +## explicit +gopkg.in/hlandau/passlib.v1 +gopkg.in/hlandau/passlib.v1/abstract +gopkg.in/hlandau/passlib.v1/hash/argon2 +gopkg.in/hlandau/passlib.v1/hash/argon2/raw +gopkg.in/hlandau/passlib.v1/hash/bcrypt +gopkg.in/hlandau/passlib.v1/hash/bcryptsha256 +gopkg.in/hlandau/passlib.v1/hash/pbkdf2 +gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw +gopkg.in/hlandau/passlib.v1/hash/scrypt +gopkg.in/hlandau/passlib.v1/hash/scrypt/raw +gopkg.in/hlandau/passlib.v1/hash/sha2crypt +gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw From 677172dc1f27a23fc950fd2bbe61263196353907 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Fri, 12 Aug 2022 21:56:09 -0700 Subject: [PATCH 45/94] Avoid dependence on goproxy (use vendored deps) --- bacillus/ci_pushbuild.sh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/bacillus/ci_pushbuild.sh b/bacillus/ci_pushbuild.sh index f69ee21..b94f39e 100755 --- a/bacillus/ci_pushbuild.sh +++ b/bacillus/ci_pushbuild.sh @@ -29,15 +29,17 @@ ls stage "Build" ############ echo "Recreating go.mod from scratch ..." -mv go.mod go.mod.git || true -mv go.sum go.sum.git || true -go mod init -go mod tidy +#!mv go.mod go.mod.git || true +#!mv go.sum go.sum.git || true +#!go mod init +#!go mod tidy echo "Cleaning go mod cache ..." go clean -modcache echo "Cleaning go cache ..." go clean -cache +echo "Invoking 'make clean' ..." +make clean echo "Invoking 'make all' ..." make all From 1f9f03dfe34fe5748def3a94618f41250e837efd Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sun, 21 Aug 2022 00:04:06 -0700 Subject: [PATCH 46/94] Update go-callvis graphics for wiki --- xs/xs-vis-fixedup.png | Bin 1274582 -> 1214186 bytes xs/xs-vis.gv | 608 +++++++++++++++++++++------------------ xsd/xsd-vis-fixedup.png | Bin 1142898 -> 1114577 bytes xsd/xsd-vis.gv | 612 +++++++++++++++++++++------------------- 4 files changed, 655 insertions(+), 565 deletions(-) diff --git a/xs/xs-vis-fixedup.png b/xs/xs-vis-fixedup.png index 3307bdd693f39022d9adf22b24887855c5b61c4d..1526a4141c8796a622ee66057067288ae3e3495b 100644 GIT binary patch literal 1214186 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 z zM*pqHC+yc?qS{zIf$n0xo#>*eZFD|k?}L^lBP1G6XUs^-@iJ!*Ie82v5mjgGjL8az zilHBX5@L}lHCNCq$^Ai9r1{c#%!BI^(_Eos6M^4Wx+7&l;T=f|eVWuH>zIj3Sr-Pt z5;zcAf9x6ynqGj8Xyyv5#c1LkSP@W#T{Jj^B_+dD%XNu>nUL@9Y;Ql9yYuIl&_q^7 zpZd+E7Qbz4hIe(#rEOvRLQ_`U9eG6@F+Wltw;Zkd{;R}c7mS~$CwfMen11|m;a;s4 z6z-Wo!34MTLT}5>8Ub`)>-ZWHy`En-^^>)-WvY^i@lNy^>zz)jPoVbBw&ixs;#?|s z%<<`|?rNLSY%`o0CU{N`^=$fnbC}o@hAMny3vEa!otIF8#4kHh{4JWCpRJ*a$fYJ5 z8p3M0-c?xefT;_2<7Umn`sM$i53{jZ9>Ye}9ePDDF!?d!EtG#XfuPe<8i~<;8GL~S4l(kr4s*ksc zEH3G>D77J|AF`^6-%GaQD8}**G<-{pv?j<~-+kK}u%gI3#QhAt*8?ZzFf@Dvdb!^9-TIHv^)5m*glpXln4pNF6IkNFDWNhRaI(y3%H_{(B zl1tEFgOWkyJ{`*S=+jR}bR=$qbDw%>dVjGh=gC?q^yL0Vt6WC{gQTkCr##WKmGyx7 zBIGG$4Yvjhg_sCdsW(RBr+{#1JlZ=vEN!@$6RbI?+Od6MNua2r+O_0F@$)rz#4`XR zK|KR0>=D>ncyGE=DNr-;BwV`a&RoehO^s50UZJMkaUmMk8_Z91^>=fN-VZ4E7weOu zP4g{+_s7I}F>EepwK9l5Hg@IR%k`X&ru1Q9br)x$c5&?bTM0i><0bU;aFKFzsrjzA zHTX^kUj1WhWrGfTmzfzQeI2CLA8~tT;C7K_RmeYO zaX4IF9P0Sa{@LeNepeSt>9io$vA}DP0ER69kZsI4X3qK2!bK-9Z8qJ@9K~?z;w$VT zn-4sAS&GVAHqx(IWL8WAdfe;9Gvm;ye7b%bK=HjIxUH88&lvC}=@Dp1vXSwcUR_@| z6F=p;>|MuuvrnUcEp$ETTHKwg$KbauPzo6zu~>Q3W~Jt%*MgWli%C}9Us+zRJ6qv( zJfVPnaz1UQ+U!Y>f=&L0l6$Z1@aRyeq{^_(&lqqSZ^!eNy~W>val0bP1CJb=9XRW{ zo^%P`uw67EgWg0vka!Ogo7V|k_7S1T-W3T z%~$oZfNzRbdRqYI{N-w()@+3VcJ1RFf=1a%vV6t2q7h;GU17%q8G z;=KF*5WG;iqh&=z#iG6U zVxUe1-QChjzALWP=_Mxh&Em1=r}Vq@t!g-GqrId*cyEsp(l$k}IOJ-H41TW{OihuU zq0sEo(sVyRU`~p&Jyg%h%+`pDihA~sZuL02a7@tH*HGVV#Y8Y>fOB|uw`~MYEiq4Y zjWoc8X>d|*x5TwyT<=v;L7mz$*a`v5dOf7>C)}dF-*DYqdd~PEN1nxODtsW>fy%Wp z{p`$~mDP5{cxZHDLVw#?#lXVCKPHBslJY(=xi7R==nqX`%hL*7Pm6?a9ETqPx{!;v zEfzsY1fz+nvoSU+MnXmcV~nbGul&b?dQzaT^!Hz1xE~7$3Y@=elB25C866J*Gi(tX zx{e!Qv!JR5oSzDgRa@Oq(K0h|xv*o2ChYcdF`xfNv;2Dun7Itdoy6)D5pS>D?|Ju>wiMLs4jqMUo%Y&nyDMLX6>rsA4^G>_vos3q(7702fPvHLhePT%| zsi)Xbvu(mG6cf|@^_gm>=(8JwN0K!uA5Y`Og%#}c1x4GmxHMnW5CIB@UWI}b`4wt| z%>zdPop+|cpSFWO=JL{cWqq8@=?5BR^6-+^%e<*ZVGkvj6q>Je;fgb^{_@eT#Ui|a z<3!)`1xixsEzglJn!|l_d~stk+`s>n!=1TbB`L14Vk`}x+P0UXjS~%sp!qKblpqEO z#uy0@FJw*1OUGn0HIIMx3izfu5u!GG`YqxQnOT|UQ$c4Oub1a4INin_;oh3le()KW zk|EVZYwth&MMMzi$J8%&m8WZyvwjg?G~c{L%ZaubE^g&^HV!PN@~iRuuUl;XZP)nz zoC|Q41Cv7lcRk}fe*k{h-=}2WQRM}h>u8kUGGDqh%SVj5 zwajo#SHdv!XjeakLQjbWLVvxZr|stoPE%>-*xJT&&k|i>dFhh~RgtYX<=$I%4%XpZ z{$3fGk(vEpFKsCb+PAECOrHu^yCw?Phim&omxD{hm?6opTxV;udUyHVtBCgv> zw){ok#Is%H;#7W6_0Nz%ihDn6M9Wnh2ns)1jGjq;X$w$y+?tQjnM`MI{HskuVgW2D z?HuR>wN6G{VZLDY5Lfgh9)FvdS2!c2w$f<>H4we;qoj!Uhlpv z2I4<)Gp_2MMs8D?=UjmpW}^`|4Y<7ADnGh{>hBh&c>5t-yy1H7vZ7e1F7iC^;z z7>C--W*FWl<;l^;g2iL3tt!`)I4nQFNQS$IPJO<oD3-PxT4VUY+S4kplw`K z{9sE^Z5x4(pzo}D>q>h zGGa7!2=D(gcSav?yuxrk=k4;)Gl~l||mqEk`TR}@H0+dIv z#x5<{kl?zLs7U~j~{A1r7VBOUHTDomA}lUWslkR7EdelqI_ z8W81;>^Xov09pd+=GjmXqLzWV)_<`fOl*X|BrXK|Hz6cE#Vf^>PN{3A<|?~a()(E@ z*fTkm1dOfipBKw_>ny5}0jO<{$D9 z`?H;?H5QM5X1g6e-$L>&t{hM*JM~`rmsyc=Nf)L{;qbD8%!rx4UNj!dG8i@ICPKMP z<_UE|LFpoDn$Di~R`Lu6JI8K@bhnd<7+^jrGigrf|gQf`fFrP3<_iB=pz}orwKoF62Hxp@DzfK z!`L-N^(Zcw`;8HHb?q#cHV`^biv5%q_c$%dQ3Tux|M43@F)F85AWFgExEH+*j9BT| z)Cy9oj%RaoV$)v3b4L-&lGXG?``C4yy?=jgCki)su(ayS%MJP0kTO5|SHKxEmhQUk zw~0ZhM!%}~${YC9&Y{|=8TGNrtaENgNR(RSm%M^@NWVJt%$YqWF)RAAc!!+HMs7Lj zqUqWgQ8S#;#;s47E}RRwyzd{4C#cvOtOvr~pldN=s0}q)+a)8}9$0T42$V=}}0! z@bp9wHT`#=7&k_fQr;(`&uw7+2n|H@q7jo!2~a8od5T1Od$^*#v)Kr$bMPEMosDj& z>15+!R1C}giPo>f`}C0%atpio^p=IOXi7UvD*ZFA2&?W`Uzy_C7)*}CT=R(X8C64*uF$JUbzhGcrjY@Q-wG1W{_NGPNy0Z zzkX%g0hcj7@9S~002W81lL&?X|ME+QH>y`F%gcwraR78!Ofr?*X*Z~ce`siSrk*;d zBUGT{XU~*W?oKceJxSsB24fect=z^>Ihz`4+w*XO4?*ZY@61x+z248;K6?-{OrBei zi3M<5s&D|?#(lLlDv{?R^dTPbWAH?HBKL+aFET>*`EIf%@#NIx!jh!=o2r!yC6CCt z11B_=N1ZmaI5H@gW4`ioJ>!Rxx6#OKokduXUfz>LSls%LuyEqM*L^Sg7GGqCF4oW} zz4>FA5flbq+%L&ot_cpnWcruWcw#{ye>N4S=3akubvQ~oxH_)4#w3wiDlc&kPZU;F zez<*};9;GLe@YLI#yg(Cv;BCcV`4{zq9Mj9_96SsnsEtS#pNdm^nN;F`QWE4Ax}k37%$vb z(7?bz(F8MXPIEo#UQL>eoA~u)%jk*Dbu4VX0JJDo=r8M9T#U z1Us^aw>B_f7j0lt8mN3MmrP8n&xylxVgfS}Z<1_303t|CjSIKbIRwmmg%retO^+m{ zEL4Sa^kq&qger>XW7 z$XopMR+{Le?d-<%bW+@+;HVoE(9lXo2& z{e|_sAhw?|YGY~enTMc_?E$MPJ(vW)uH%!(H?oPckac64U;1<9%=2X32^=|2Kmib@ zsI4wI5h7b&p_JZ<>ik`^*iHlo)b%A`GC`(^HF~qM!ueYYB3W|4Qtgn-Q0Xw}xVPj9 zC?spg8vw(b(dga8L>G869^mFZZ+5^%QSl1Z%o8q~hBwonr!L&{I?NFVEVGs=h0izm z$P2(7*_KP@zkHNay>Wk#rK+B~Ut_UJc-VL+>RLZT^6wdS$~sz*Oud1(;is@u)mFxW z?^q9^UW_Kt6t)&4_uEs-9k81=<{I>PfvF@L)^a>p>IJ?Ez#gFK``J0WTf`20QjFhY z;9$;L3M$Fc)(or+hr^BK&XCDc;T`3tX+@=22c2$Lz`gwaS6~T-Iu8WhSRy{kfe-2H z=KyOvw&$Qv{&lz)VkNH>8w~5IJ*LOtN5w zBb?Z`xWZ!i;PAJra=Yo6>jAeg_8`)g+Tcr|{ zdSL;G%v+O)$QQtq2IezKGE9(FiMIAGay`Kijfwfh#H#}EkfMHC>yp>Vn`y&tiw-(k zG&_hwrRnr^DwT0gGyea20rp0i{D$31m1coXi0v=`rRPsGWY-hv%r(NjGWOSC1}tK)>m zhWmSL_nUF7C9iWGQBi+lp5%Wp9_PP}`%`b&YUgzDs z2xXjP=lJ2|j-pdZVdZ!g)@X)wM9xv!Ir_)o@oS4KA0UxxkM-Ae!rHF}Pz2OJ53Mc- zdzy25JXxM82nJ4!ao)QN9z@snRCEI`Di1D*}9B(G<-w4VR0G_=X6I_Kh>4j$L{S1a5o< z2Y@7qv2}&zJH3!uOmDo%dFUHa#&70j^&yy?9j32FWHoBo<(t4LjQL(kd0Ce_ODP6@%x%<|yxckV7*S2sl9;hRRiP(wl< z+MrBdpRew4DF)X~Tr4sv{R{r#(>_6{PAgdq2AK@PQ=@_KQGO_*Yg1pe$rfj??FDLS z%~>e5!&WtDP~r;L%mKqC3qx(#o@*Pw0fh4khp}$uUf%xgi{VvH$S%Xix?qDilbX@3 zRZV3ltnJDs0}vVhn>#V?G0L5Oo z8(+xY4s%Xi-m&-Dpz;yWC zY=)Nf4y6}e9l`jJf+qU4rKYrkFd2}PEDCcjFg{Ly9j;xd%;#5|{&h~_M1!DK=9VTO zg~26KPR{fJB^5JY{d0UT*`X1%>uUoTo*p-t)cm(xhVjY-clTok^e#?U!$^FMM~0fN zwgTb?{lhK<2lQE9NH^2(^m<9OPIqqvPc}j`qGGh##%R95+!0e$aQH(J2?03AYAsGh ztExqT4wraV(bYGa2I9Kk(4OD(<)QyW;O8OGNFl36<%Rw>J}m_z&8dCLi2Aogc89Y(lwN-#-T)k6!Sp6=5;? zVT0B?ygotoT3zql`8LV8mBbOGFbb%KfJvYo7H?_gY>@2XuNNPB+pU;`vOA&A`;iEkk&w1wR|L}~*UP>zV z@86?-wK5i$QQWWj!xTEFts$5V^|wZnVM^}TU9S$4d53VcqH7-J$hXqNYeIi(TOE4d zS}bYYvq@iY+#Ve6{13;69P?kdpaW`D`z}H1QX~+zffo8*GcrxaOWw&7jDwsP$(}!V zCF2&W!eL%z8Z1q#(8D*4)F!=sQpGh5N|EmPJT|B{-`ts8`EBUasXc~Gvk1Jt+x7g8 zp9Wx=5S0Cp2E4v80E$9@brK=O17@(;?M8QttZSuSvjbRMAZkdo8-wnYpLoai==kh@ zRL(b1^ImWcOh})lT`>cO2XZ|_JPMgqG3$w3mKus$25C%6!+wIrkfXTzCw6 z48_%rNb}TJmB6aH=(@hQrbYAxC8fDlg&}pjrn{zvBg*N*YH}Ynq%h|N;fdu=@Hh{e zv9EReX0hUrmpzYOSJGf}j;OpY{X0c83f`}`IYllzS*R#GKDPba#qum5;tir7Mvg|r z*%XbX+GhL591sQp7JJ5VVvtROW9% z08DpYY>jQaj&j&00J-u@(NciG#eu}H{oD9$v4nMw4@>(8PsP@-qEb?jTh5Z~N?i{E z9L$ic?e^M#22rXsFbXmy)XexIefose38|iUfOyJG$*TENufOl?wE^6Zd@QM$2jmG* zlt4#d^S^c&X2g6@L{2%Ag~a9jI=GKQ&}#`9A%Hv#5V*u5mm3HELQFE5Kb3$;2S#bC zn-Qjsw1sfMefq**3grp}Ni-XSgNi{Whd2iO{ttPFn__c1t0lM*|6x#7GHZFT8)^n@ z*Pb_u$p`O#va)yfP2kbjZ}Q*J)4p9VlerB9vRc{gI-|)SCu9)ktsI)I)8Xl+HN=l* zq@dttr_nYTGX!Q`B5K@+l3YSIhwiWnhJG#)@EdJ4Q3Yw$@3#qyNjbg(&bY?yIYggk zd*0eL*sKa+!@3QVo(=*u$Gag1(}NT+GH#WeyS5WXeS7l2h{Ln($e&`3!&oR3O5jy! zZv48rYO|slw&`Y7VYcpyZi%8j@oR?BXpyKS5ceU zD0$*FWj?lf%2#;_J1$TwQX7ICF$ipfCg+KYqYftQ{`%b(uXr~(0oeyv z#ln-Y_L;V>k!OIS3UUP2I?>i0kAJM4a65rb``(|XJ zyX5cHGzYosk}|yjA@y(@Pv=fYu!Jt(Zh@~55Dt0RvTCX!@&;jZ{DgpT08CB?w?3`m z6d7BN@KehB=4(?-U`mMoW5S)B`Wo!Ypqd+lhJaxqgSq~Z<4?SWbc0kN-`GZ2WYex9 zp;6(NdWf+C=xh_2>Q|nWlSu_|9uAq%!84&TsMb$2bK}!ka)=ua1iur=WV(h1%ey>4 zMqVW(?A?J_vF-Mj&BuOGe|zZsT+njHw>AmYO3*1Ib3N#VE6o39wr-0M{B`?n?K%+; zSI5Y|*@!wwW9CqO@Oemy^Ns^U7j1sXT!C15rG=@x(dvK+%xCzFXsPDzhFMOM_dfw> zy3KakWjI*^oIXe0)p;tSg{X`yUIn$*zrk_&H#!%VAhlAWH%q1uQCzTgzZCY5;$=QFX~{ zk7eRm(Js(2wEp&|(5A1Saf=0fEPx|2UEec+uQepN7T*%No9$$D7y$k7sNkgkiQ3Q< z+ao~KZJ~{UUdUYGT?$+Pxv)pNjY0owis^Y;ZIDLUa5j)VfCxFKD51W84)gj@Hhl_1 zF}KzBaW-oqDPO%kS!6$L76y|u;R=sPeI_We!ZuZcxLZ7|%}ZaF@UB&U~0SbD)w z^quAdG?7Xu_^g?8=oLbIaTzXp_f6rcjRE*rgpn+oR7_461DMx3xy7niIjr3)yXwHy zSI|PW(pXB-r~=f90=CD_2)CT5VP{EcwY2@$i#ua zpp08gb=M{&W}R_g-Kwyx^Pk{i?Ve@T1!yiHP%2VyBD9H`h_vO|h6rFT1eU`H@I98= z4OhwdVOcwTS#F@Eq~&YO_|sSf*yv9R9`A-c0&&l$tB-Z<1(|GW!%h2+5D9`1L2c8pB^sqM|U;Pw7@bCcxFo67(< zGVjDKvy{tL8%xcwdE8v~5#!;mBqmiw;gUd$0oH?# zXT%6LOP%RufJ+#Ai{ER;ktB)PW?H^{Qj;PlX@%{8M%3`K2%Te>OV_*=k_e8@%@ytLb^=|u<(L2 zPRHYx2-*$+@@8BwI{(KI0oo49l6{P5&~Mxe0z(++q>@0+FNf3Y7QN>RjCi@*#A#q; zhppgL8Vj}@V7d8$%mdU3T-NiCe1VI8{=(BPa#En3*cJzdLjcc19Sd@RjRyDv=5k(q z*d7p@xtrn#3|jWZ{=B6_nF{I`RV0jEn&IZUdH^6FaK)q=ti1l$j{xS~i52A7P17yM zvUx=NMdX6Aw_-&m8Afs*Poz44 zld9XxJq-{eb%W=nPX2HHA~|2w-on}@*&z%!mo!tB3o_!OS;{qI4J z*Wb~{Y&@?K1}v|p3w)BQt{*X4LcnX(_ly1Ox5U%&T;ztcA=vA@zw#Oi{mlsr{kYfz zb=GBK&{MAf|2N54y$E|lP^lE?Xe8C-B*CQ%$1=54Tff`@9(AFB>|QQJ4_l%_yJb6^ zHO;QUwWm1!Rpvf;@vQkEW3VsliF~S-Q;HSoi%|M?aP^=h_i0`W z?JKAUS!8|z@Olt|cho@{vY2sAU1llml?FW!sIdh%j~>cKrA-Ks2;!kV8FGs_U>eL> z*&tWH=hcw=BOP9a<*m7yn{c~S+ea+AaONaUZK!^>mlw^-9T(ecv~0P#ae$x1G=m4{A=`WX`9fQX4CnyGEy~wa0I%iR-P8Qm}k!KsUmDp^!6NKq@TFm`)T$;f(>3Cv!li8^6X#;<1L5bN*-m=8?yzxudLC3JLFrIhg zn;K%j%PUq^0yt664t(WZ?w6re9^EG9=4%Kv)qz~e%wB6By+Yv?;B}jXXmi)D!CW|L zWuOezh6{t`;IVs}(A53__(J^CjI?BFM>byTEY4%+j9v-ure>=lZtm=Cdk!WmbV%S|9{WG#@^9?|&Uy zC(Fy{%?MvUYW;6qFbS#dEg%k}H`=#I_JJP{_>OXAknYzHJE%;P_qCzl|0D~I!HTI} z=2bv4TYJtEy&5Xe<#7~l8y1W>0$AoZkL1$RX8zSSaD5LVQ6h+u3L_=SAeQKA$^b_y zPs1$q6pNf2z6I~yLr;2dc;v5zec?nivz%6MMP!w4Y~jdt&(Pm|LuSW@>saQJ_EEpDP=20drSS#L!-x zHf%o4&LL}i@zgi4@#zPb>o2K3!;w{`J<<)#V7@nWhJ!C)$Xt0b>`qWeH?s@!*h-Ld zYVrr5UO#d!h4u|(slrI_F5cjYzgey3u=>-8vnU0s#8|8zBAdj!`T$eWuGx@|xnXc4 z`~xsJbr11kroStj0c~P2jC`#Qw!_r(Zu&VS{a2{f)r1?rNQFS2@B1 z&Uz@P0B*2Xn|VAiO*tK&FfUGqnPUz?3pJ11mE*l&yol@nPdJny4@lwFQYpDoQ^7-=w`rS*!VOSiev+{uPKvlv(gy?~9E(yB;{Vr|7#l0ldsQJa0 zF6yJTVzF&b1M2SwJRDB6PLQ?Y*A=fKqsbh?_P6!&<@G+4i5>3yD`*qUg{1{5$g1qS z3yJjdf5bT?6d^kPmAW80x1*siLIzyGdEP^hB3+4xhuX_+Y9XFcZ3j{cnv%Eo=btR@ z;@kdwO+~IByDN}6+U2>;U7|v3TYSmMnSoBAD_ej@$5du~Xnn|)o104;hvx3Ve|&yk z3^A{G`SeNEVaey2=BAIE@~)3KX4I!m*$&@4$Fg{Nl2L|Ac53cB>{Uj>{hMCU>NbI9 z%d2bbYJ7W|AEWmCoWgWu?_APlQ+Ucee+l_+q0@Pj;o7J2*|GcG{eo!t)kyHu&3CF_ z405o%D{R^6y_UMZuM==Jxwt6Z21=_xT4}wpYLaR@W*Z&Qs!K+LJYha-gzMZfK96R* zg27;gT?YDF$7-M}^%FgVMpsjMwKJ(TzNm0OQ2^TdZaB7-=#ZJ$1^w!GO4_roMbdo{bH{Rcm1 zqdPE$%p-NbM^C>y{Z|$(cJKrmZ-%V8@D0wz2%oyI8{xSfyShvX4@+$# zWMfl!c)PGO#^^mNT*u~WU0s;Ih9r1b9>`8|f%9Uc-3{Gn1mf{h9^Fnlp!;ONOzUKD zu4EvQIp~ng_v_jIr)vl7Y?v=oMekx zV81s|ED$MarIBvw1_7l*T1n~d&Q(&nyFt3UySux)yIJDCe82m@Gk1m^hM3*iecw~h z^PF=|o#3|_qkg0sj)vcNAf!%bSh8P;OL5o3RkOJS6ri8Y1meX2Z3Yd ztXcYN$^}Gk9ipuj*>+c2CCHLe+G#TO!UvH0JFsDxvgNn8i6yZr1EjL5TJVuxODJlc4{4-~RNWPTkfB zyQQkqB17Rr-$3!B9h|;?mZ@s}YxeE@RLqGVm~Kkqvj6tWfR5FgeW_IR zYAckG?A2bcYIiNy$Hh)ZkK?)hsZ?+iHq7S|V1MYbpZw+hk+q!nt7tZ4pQo7iyD1ZT z;G~!`ncq;!)>IxYe?i3&rPZ}fJi~(Hb9$MgfwG1(mVe~wm9VyX)KShXa(*x{3PVb2 zaCU&JdAfa-(Qtp2mp68TeSOjh`+r)1^oX2-iPc#roL`hQ#nbYatY73*>@&K!YAk$l zP^501YSC7B&^!Gg03zfCegf!4?sQ& zjF{y7{)KH6&cfV9uFX*54mySb`O5hDiwvMS2qryW(}JbFnaw$somZ08h?Us!9L9A+ z7BCe3CC-TPgRnOPPGLkD~d6ocd>&Uga? z{LZ^UxVUOvGO+6|RkfP2K<$9fCTHlJ*eL2)|(mrWugyKQG`C=|-vXUbCDP?!l zt5!O@xU?7)z|5;tc_P_UiM8*$edv657uZ&^f}?&;-9OfauQZ>1f6?+RK`9(P>q0|U10l>GUehcOQb^XxMF%b(zW5? zw>WJ1trD^D4&+ZGRrdsOO2((VMPIBlWLSFCDtCEwK0=x&Vh|Ge zG6!dzg6s)ezbGomO~$YLr$#3yz6&8coCukj`!UVwo12>!o>^5^*2QNaLI!i%8^?Ne z$me)fXJh_!jbSn9@^9|=sOBGH`nufdb?qIWO_!HI!Hqlf(}O+wy2zDzB;Sq|sDwGF zoX)*_C#y8YB`L`HFuCV_^0}!0Gee^11e%r~JPD=eu@Mr1-Z1O0TkU@P(XY>HXl?M~v>ce{~Fo#^Nt$6i=Wr zSyzp2zxS#G3$d}J2!sT6zg8al$zqEI)`=S5lWE*-B;*~^CoeTrS({as4jm;+##R4~ zEzhpCy#GuUqir}@B^1%Y0Q>{dg|k8~qwY5XVwy9`pV%n!@iD<2V>r_QKs+BosPVaE z<@rakAP@4txNVg8m3m}U2KL(PdlFE;;x+yiR8p+6Eo7PZ@sqjo+aK9XxyZ;epU+6M zIX0xNE3dY_E_A5egFEzF;}E7q z83zmNfZzGg!hO22qFNCT*nyW2WNSt!I(_v=SAY9_cdvP-=JLc&htHloKJNUnKi{T% zeam!s_xw3Y!#1o?=|XOv(@vF7P~u@TdJEEa;bS;W{m1cj$DPOI8|T{Z8foO5biU); z45#bIU_0d+N%e%mQvagg-&j&U)dy_(t|hpZ)^${#r!Dr%q8aS}tUdV&oHOEqJ(5 zNBcw)N)v_X;s}c}5dW%$pTAJMUnajtS^|jLBE*K9Btz0jOa`#6?%&Qs9>QX6vU|m3 zI>pU}zRU;nd^SNAz|UiNQ(R~Otvr2QvEL#?NK3|ckGLgAm2`)q-R05QV-_{JCi6G2 zC13Hq46S>JJk*|~x{|EGghBdnSxUe@dK7}KzvZI|kiB4bylQqnUl?3juu0lwZ`07Dtxe`rpA@Jv~YJdVfm= zf?49r`Votz>zZmp!wI2q56fx^F)=U|CN45E@@%K0)%E<5Ii10UIiA&tvPjyVhh-ms z$<>DQ#S3@I#2@G7K12%$7z8hJ0?w&udh#4FKdBx+7c`N&WW)}qMzJtYG9xA3VjL%M z-AYXZsnbvIkD2$VxMe!C%tQc`HKlSr4{rO(-9X;-co)*jGRdmz^}MvOw5HlVV~7la z%B3C6GFDAJR|$0GCtf?blG${&Y1eRn6rAtnN(i0r4!^nkB%fbLAQj4DcS!Sbk=0ca z*x9M(K$iW>n0#q#v0war%x|vBe@2~OHkYcq_?p9+|EchY5&7Hc5yOf=f(H&Gqd3H! z$zXc&-l%0_^qhIH^{O}UB;{i(J{y;wE7HX+Z^K?#20&A}|UPbb?D+{y*2Z2uh zC4!;nSHm{o{adVjspOQ;@0_glzZIi|4EPeg^$4!d++B=EI$48T`Cg^g0L~QIxl?dTc3K#lv>i5XtV2peP zH4gXKVJx0u9}7NauGyxiVKEK9t8Y|RQ*ZVcoPr-!5#7r+!h}wZFU_LlD zKF(^Z1+0axUEbN33JTbagF+P=*$-ksQH4WJV?y%sQZ*Sn3|=u9D@+50dn+uaku zEs>e^GH&eSc4|=t{u7h5fO_dUyjf&;YFiQo!y{gpY7_D42{~;+)N3S{z~2JnVbpl> z+$;h$hpvyeD2ZHl$IU0##D*^r>NkDcb;y2y`}^K#EmLHx@jmE;y_Ya)>f_u zgG_H;u{(+@L1U6Jl%1PHv^M~cmO+m;(-bjk_0EH6BBt)&?}eH1jgDld`;QJjz!^)D zVF7W+%1GWT;9xtcQkks{WSxX+#IqIAA(pR3Rh!8ei19?8u52OJoEqvPzo<(Mk4|2% zRz*fd^{;jIzqrxuMW31NOW^#p`t)EhnsHzIKnV(=Ux#y2lF2+-wL;Gx$?`Ijk_5n- zW#`D`{8Z@zTXkXf=-8p|_9(thj?pg=+_5${{s$s@)hC0RB&_VEQ1gzD+H5kq8{YEL zIt(SlKpMzuq5Zt8ic~=V|2p)eRj9bs8@joP#bVymon^{K580YqTswC~W5l>Hk(%Qu zR^gzKxhuNlBwxSR0=$QFwceQ)bflCVkt-{oU#j}P$H4ISHCTicYaLl@+}}tzBjVaE zG7=}%PtR;^9KHCi!&;Xc_wkCpD95@y-z`bM4n!Lg!1ZQ52 zr||_P4OLN<+ld#IEiO+Yx{G~@%_0t%1kUMVNQmag$&5u?bd}nIdE`!a%gcnMu15w& z;wRoYU@tdT$Fds)ZZ|`Y0h0Mfzz{>l?&BLj)QzqblH)NWYi()SSX4M?UTXseJQaH) z(}8lZd!>7+I7l@1T_rV5&nNd~i?8O;X#X}I9&V(xhxPzVq<#78Ru9V%7wDl36(yza zMrsk_J_A8X1AcFz9wKnbx&wYA0$hUzZ!ccCfwYe;dB%O0~ zhEQ~yaC>x3R_8~TKf;Cj$4mH$yl&xZYo8L;)po}nVA8Y>i(CSWEhOlL6DiKt-aO7- zxF`y$l9#tND-s>f*^%bhz5P=tWVpzM;R4s4;NPo8U06E!Is*4-eAjle>f!V<8&oY_ z!%ksM83b*uok)J(Z^+5X2k@s7((idP)=NWGrg*lIk^_}zW^I-|(Lq8gpk*M_JgRf+ zeEPD<@qw)2mFoBz7o-}v@EPv<&!8GLoWLwlD+?7;ebOJ$DGv%(eE&L)Z7=-g8QM@p zie+-cjpZ5ouzajN=By(-c-2&k{**J5p(DW4SdTME9 zF0nQoT}Xp(!%wTJ@j7nSL}@8|(*=1%jbDoNJz9UjY_=ih3X@8(KN%5fkLM;8FqC`8 z4havw|F4#LWAhjiGO85$DNKd6CvjTmc;2T3E@k^-_;>|p41IIcn^@2ejhVS3D$1}j zN|aQ85I^`kii#Q8uN!vE|G7XCP%!?ZWE3>7Luv-X)|!Ko|X+vX}L{z<|0iHncqOvb9REK&CkY>+;C z&e(J9%0qw-{iEn2QJ!I&t9?q5G#6@y>ncAk=I4N1jMzmSPLJi#z);fB8y}ni)T1Au z1>ea;0244&V$A!92adW7%E0ub}h zTO@odQ?J>csR4!-_ZOtPent=Bj`mBfpr86(IEht*D?=`$cc4>r;K>8tjVW9E(k%H> z@kE<2J&C4bU|tRe9CyMN@^3%VrRP-C2sr61Bq(@z3LvQY(ApV)Ij*_d4*|t*4G}Dqz2;%Sv~gk`&xp zQo&43lios}_Rz%x-tF?~z6LnMkG_JQ;h~M2Wc>TH#J+{4S^F-`BDgGnc6H|Yon-OhiZ87vl70}c(vpI@f0$H%I;7*^ z{)L^`i{zx^?DaK%E5x0J|E$pjdi4MkNU%^C47j~tfC%Ne?wU4TZbE6)fV5L9gL<#j z>hfE*qI`IQ&q8mxhRsiI7m!(I5$$S6kj_gtXOb8=-^bCvcCq7p4|f`Z8}GPkVMw8i}pWNVhl4bBm){ERP) zi%4EjN(Q|^M;Et|V`OFS=G^IG4+CgPZ#UbxaSKMqFk$&QTti*(=e!BCg-5$z+8!3g zzJbY4=1OX69TLO*oi}3gx0bictXB^EO9?@cW38E%BU&dNz7+RU^&rNkM>@ZNfN$CP z1?R44ey{z$whjEWiQ_ULpc2ND*YqTpT%BlIeD-`%5?D%R*GR~npxC~hjYD!D@;_s` zGQSUM#D%;<)LXTSQZAmH?Dy4Z7g27cr>9&Qp42R}+Vof1-e*1&n7iC_Xt%jKx7+BC zGWp1=Z~DOS<-ON@IN;3MA}Qa=r87`WX8_}rQ~G6yq65moLKhhEkS{#kDD6}EtjJ4g zv8wFqZ%|f`G62NO1NjXYyD(R68Z4$a?f~EWY{)egd}JpBECVTt%Z}i;hPp=rCtB+V zzGQk(4Tr{uNw~T)xw~r&;)fHle8j~jgz;xy1KbNc!25@|z3#nEVE+zqC?V7Bu$aMv z+yr*Igs-L=jPc!WLa%^7T{r!T2l!Hq-Yf2f)rc?{uc|AvEz$o_6+>jeNq+4^C<~os z9q_LLJ`qq^@OWJ1dv>zIJoZaI3E%Q23=8lVd;PhwbXZYAgzC)7RTbXtVx1RDBZ8q+Y3Hk5+dG92-i;)^tk3PD$!~ zAn6K?jQt`hNh*uY@E#psOe^i3jm)Rg(QQ`yNxcyaQ*d1p&0icUs_&eJlksK4JQ3SLYE2??Hu zS34sXL>XDbg8FpDIQ-^UHZ_jUR)+nW|2jIq7szSp8rW#GiXWV=DX(WqnS;sJj(5G- zPXVk`s5=QTObi1uEfCK@*1a~qPyGMle@8feez`CeXP79(3sit96&vg!BPRYvI`8e` zudw>tyE42j@U^~@V1n)mv%r6U@ooaly@S*n9VAN=mqiXN<7XfQh zXLT}r4dw7d#+f>}aH~fckUbaLG;QcS0qznlQzTV(J7o5f1f)TUulDIn3&n$o8Hf|F z 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∋ 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�|XA~M-=Gn;=oT*ahx!RN!7 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


    C2qP0L1Y-B(x#~o)?LP>;QufeWzH3^ZMm;bfp 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ℜ=^FPpeQ~A2;AeX20e&?lEYxp4S;V<7 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

    Jl|+9aR9*hR!9&m_*l9PypZn00tP`_p~4ew6OOB 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%0Ao{I*_I%Uh>a~mJRT5SH)J{Bn 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


    -m&(#-%Q_;H{1eVM}v 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\>waOzC0ax+vXjM;pij%cAe3A}WKQpg>I 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
    Ol2`vf_rdS6a&^UZ@)DZ{3?vhe4eMf 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 z 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
  1. gA)PY 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 literal 1274582 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%0A;gTP=Sf~Im1iS^1rTA@VB;AUE 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

    FkBRA&1Uv+y%ZL;g*-VA08_RcWWFS8fFD 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 +6F#Z5cJ3#Yf#%KCk zc$+@Qu|k<{u{3GQD(S=awArWe_}3%_pmvMgd%@PUVg4XeODg9u-J2v82J zwWaH?CwW;DV3#9-Mi^{Yo>|fIGk_=#>N+9V3nQxXcw~-uy!;gc%?=9D>Atz7YgeZv!>ZC!L!eeJ)Oz5l@wWjG2TM$f@)Rd^9AJB7ljbN%>Ur>xp_MTk zi=EQUM+GFn2wA5xxx@}9f%*5cDA^Q!B-krA(t(`$2d#WGuW~^MM{t{~acp~kGEI1L z1_vIjjKs=M$(7nq{@jE+T4rt(XfVD7K$&w@P zD{XA)O#kp2Vn5`r@R(*-8kJAS(?A)M7V`Vn)Zp@KdS9V3U7AAJOz*{CK=6h&RgTP$ zld@lJ^_mM$?D5?_dp_W6%`@CyfWgzhMKI`DAn$2v#AUaK@qcqgaXp3je6LwCZ+6~r z%g_}E_L1}bcK1eZNVys96wQk8{OYfwH-XAnYKPe$0FyWjexo4~5!qTn*8dwBpIOK+ z@J-~PvYDYzM)UR;oSdAxbwB)4?j|p)v#>e(7)HY_Q~vUGCB)Ze6fF#&g?BI_QB8vU z^UM$uWgykDG20#v=I__^&6h~3-y5u1Qc_L$Q%#}kR>@jIr1Z=s$WLsu=;%9g?4R*GG z)MWs;*D+#~YGAk0J6EE1HYJgxP;Iq%ofi#FGDt8}a~EUX#fpQl(XZl*mea4$Xz5lT zPB1(@zV*3T+kmdH;}k8OB~Q8wn{98*W{+U+a;Li_6lMyMRWELay6TLZybCh%`{-Q-v}Y{dG8$mj z&GHI-J0x#;ARQej(NXN{#n5N&_bwk;-dtu|CY~z6YFa}$XO)-o>8~yNHTzuB!;~1T zf4M3KDE9*zT{4;uit9B&L^0S5kQqkdq#`w?zRG1x(Nl?;)4bh(F{S*}L}6t-IWwHT zx*TD2f3^I%w3HF(rDUhP-OjcQ099-t<&pGR2YEf}5B6jz9&fvmAqL>r?k^_uyu<*W zfYJr=?_kn5R=zF*$KVVlDkdBR(4qmRFIdY<(b8I4Elf~f6T-)E}M7+hT(;z=Gs z|H0atjef(V4DnXmUN8Abtm446${b?=3ooEE`}y4d$9d#ZTXNRP+b+XccGFt$Si+I;j(N z=7o4wy~z`Kj~cjW`6nq|;7f~T*SLp|0}KDx6p544auJ~^f(mZKYg6mD%h@iGmj`nm zevSM$F;(fB4BLPR4M0$%Y!$5NL41x6uP%7@2n{5yK1WmFDhHo;P zB~K-pt?=M~=66E@eL4qrz0I`{U8P&DU(~^G7 zQdU+rkQnC$ub-x@Y?;6wy*jvWcX)0G_LT|}-(TC{<13dewRO?o^+c~f9V|LIj;j!N zpSV=Yj87;8VtwZk{f_w!0k=J)wqahkbhWts8zM17`x^s;uvN$hoDY?pIgq4{o2-%W zpz3T^R{EwA2WKRiVo#xNMyuu)kCGYL-V~)v22SjvfaTqkCN>90M+^{GZXFP4$3n+j zS4z8K3CJo}F9U-Cy)X3pnz=1Z#!31X1Qo0aZ$g#Vb`#Tw4wG{{u29qS*{;uaM89Lv zhuDmB52W%zH)*Hq&*N3?t^K6s;Hj};7j+c8-g(Zj>5gbtb;mM1zTeC&y$dNH=N@%h zV5OwQ9-s)l;;)z@TTv_QcCZj3#DE}s+U0mHPgfZ znFDC}2OO{m`|xRsgMcs<_hiuZCw<~@s*iP|8Lf zbq#4v9A=&UrdY;jkbM4eY-&J`@ljSN%&bIZR#3tg<<+fohF!b5COi_wdy>|L=m0u8 z<&te>S5BArZJ$15Yt{}7(b0b?RKG*l%g8{0EYnY}S(+16MiefevaC}M>aY5#Ra#6& zsgx`|;7WnG&`cu_@45P=4USe=KWbcrH$Uk$dJ1nUc33P(jPgU{gt!FLghX-cb)j=@ zfD!qMHsI?ffkbwk%}Igns6I?n_@6S~bZeW!P=%>yXqWd4&Ja-;A3J1xj&KFmrh=1P$5_mwBArLxT`KBE&A-xlX?egl?s}b{57gh1L))pAp_Z57B~*u(-x!2LTU+NU_rP~yOs8zAVlz587^UgF=~0VQuo7RQk*W341t}bc`N09N zJ%b{RrXrT9RkErg{>u?Fh6#;Bp8ikXh?zV@Ak=jkl`x`ze)?(;j*Bcc4n)|I_Dj4F8 zBm8NQ9DxSP+<#2>a!#NgA}Oq_3l2pfXX5{My>nhtiiiLM^>Kek#8efAy}G)0*v#^W z^6@wE?4tp0156stSV3WNW`jM>6Tx;1WqYnbHul)^iuTdAm#}D%r-%4DgH2BP)z$N& z&B1azQrHH!SJ+Zg9nqX>IvLzrFkYT9e|fM63CR^-cXgh)xN`oiuAVU`9AES~^HaOV z8tg1EksF&F{xw};c@M*_LMM604DD)r=3c)oDoi~gVzN9uP^-G6H1@0s25Af9zeOKvlv}C*M|}D6K{`7m zvJ@pCOhQ^ZTP}TQVs|ci>`Q^kT;n>=%~*k0ol-jSurU}I8$ykgxTMDYj9siQ*)DJtHNojAW#$^*z z-iqx{T^iqJI@tgE`t@}(hzHH4Vq!=dp{!Zrw!wZkwv3EF?HSPI>MLy)()x>%i2-k3 z6M8UK31#f4ds5)@A6t1ErPKeM(f;o*cw%m0XUzaA81~Z>Z&Z?KD(3`Rzxw<5@KddofoRhE?9_KLcL_|1+G+FBhpuHMi6t-(+e zuIq6MNu_hWnR_G7?aL3nwO2Np2Bul+mO9MH;Z3h(8m@8O0Ib#mI7Zz#9Wf}1Vg(>1a~S}vI!V4%Y4(bPJ%i=~Uq1Is&_+o*Uu_Wh z{fIO@YGrDM503(m?1zIqms@QvyVp=H8b0V)7}rB*)7myZkH+!euLk3Yn4(cV=ks59 zOx=IX7&F>sGKSL`R1@m=77huI(C^(TnK@6VUt(ca5xX^xP0eCS6_YdG8ENLaR3#v> zfUoy}ZDK&p6*#3IgTEl7s4n3^ z{sUN*L|`ry{*(In@RyyP>|vV<`VE=YHqdj4xT>1k3u6CmYeUN!^E*C{tgy%an4!e% zGfE?y&YQGeVWtdNg#*-fK1u+!lBEqFW!)aiWJ^4kM&cg{ zQpc{=g`33{62mA*M+3+^d}33!GL?dOnH(hw%BsoFV-quIm>8QvNP$6 z+7zF2KK3(c^SVn6+l}vlpQK8ox_!H!f)z3qlsNC56Q#m+S*Rw~vyWMVn@CIQCDY0l zNr{QaYSikdW;{p&L+y4k>{gh{`fI$RYr*3zOrwriHrO!SC&$! zLr36&-rW=;&=9LvTAKW)>U?GI@D_zRXs(wK3i!)An%)jCBErFSfZwu(1tQSG&dfDE z!2b|4IFkoHct(BhERNTvzoiL8xIKp9)!1-5B#F3)4@YUW~zhzE>YO_2Qz!<7}%Bq)&8T%Eos zfPp>E-L5rry=iO+`~%(u;bx7F=tY4Hnf2eH`zCVb4zof)Tp%W-Nhe#kaFVy2p#0Dx zq!;aI?5z6v-8|OtX5UGB!0YQQ1&x>%5i|9Rr|+4YkBe_c5~j~G>Wr9iTTAZM_>2&I zQu#teUIsSxjT;;&Eu3yiS-U(AFV8kObIBbolJGMisYEtTSj>ko&N%_iaQ5{>>1Q=m zZ1mK%s~s1nL zyK$!49!kq}YLG?PT_zN0dF$%_{p=|qY;@m|;MPGP=y4$uIDmLRbXA&8rm0u$XDF#> zFRGN7jIOyMB(?BrIW!-+yWCvs{l0)m?0;=vrup;eu=(C#jw8qWuK1jQBm5-Q)9vJ% zgf>#kSaSGMlg|yqcL+0dZDpYNs7#%K?uS$vb+QGr?Ba&a# zrl9*U{Z-EnDhi6aU;$Ia`Zmt)f0=0{#c8j*HEUiMWdq8w*tB#jc@0bw| z^DmE6Nd^)lG}syHxQ&|X-ziP6v@b7R|0p5kZ?_jdE^;=zzg5nXyRR%J=T41KA!&V`dxm$jfBVHUg(uvzQ|k0^ ztjZCG{kwsH&Gtg;gH6@lcAsdMlclVy#D`bE2aOK;WR(6qKx?!-MdTQ?y!myMJ?luo z|HhZdAeY(XO7Ikm+FD5mDp2T?r6a3_iR?x{lGZMlH4W4@@{`P^G>%`?|A z>mCW^ty^>vcDLKQ(lK4~cxRw& znLT~I+tDe)Ql?>{&40;qd-R^Pj$DD7<<6-!%U1rIXAR79vv92)1Y;R-FL7aO4FDlT z6R&at$-QztyGw5bqG}|Vlx2wqZSbeFZyyrM4&yOe#Jj#v?!$(Kv($Szj}{wnB(d8J zt~@Tv*e@A&5An_3%`>I(y7z?j8kAL3m~6`>OGhc8JjS6A4?iwnjx{+*eaCh*(rqaw z;61j;*9c4JcM5xtSwOZtppRfs?6R5fBiqEDI#cCIB6mb-6_hU}tvh=iUF)`$dlqbW z6gKbChLF#0`tt8Yctc{TJ1v-J%O@>P_I3@@?)W6EJ?>83^s}<4v@_s3n`j*lC+2Bg zmN7*7rwdcpEF{c|Il}6eu;}6(z3;l}#$k|Qy-hqdib&1zlUcW!w~|toWesr79*qj; z4(rSH+LIhFPy-@+bw|)0kCfR29oJpoy*4*%Llkb~-jZ~2qUbj{Rg$lqy~3Lj}; z03#~plWjc+H;~8|C~uJKdCnz(smzRPADHsuRrA_;NEVLvP0aFK5*R1i(9!J&`j%AW zh}W-%=^OKv#dFGq=;O0~_LoJ|mVW7pZedu{zPl^q+}=W0DU{cN5NP&4WNA<<d#Z6bHIx!iRm6ur z{TLu=h4`^o^2?{-P=n?AIMyRJ--R3awOCrSZWyp4JH@1pE^fBZ`4J!afWzwWf-Sj9 zHtlZr!DE9~`Mnl&$Wx8o5G$+mrSxnqJbWA`R8GDUDHBt)j<@E}qD6eKVl7n-V`{Eo zF42U=ICY&(qB+}*Q@c5u4)##E7awsF4=-o1Y>MU6w0(ArdGVpV zKG6Y7F;~n@3~7Hj5}(tA8g+>kwKRvb<9DIJc`YpvsZH0|FWzJBC(@H1K$|6sIk z4LX6Yinmt@)kesD7{%BOL~dne(=VfPZOb;+OmFb2xEdX3Rb&ZBruX9@Dsn`fW0Ep@ zCFKEcn%5$&@Le6ZvE1OXU;U^yQ&zK3&`M33)6`wKm})TAGOw}h&LGs-(aItK*IRL* z0S){|zBY^lF6Xq#0oP$rmUjCNeDC-d;1a(#YEo;oHmbjcY3s(gyk{i68sr;4&gJ~1}-HTqx^{`2&{Mxk|azyJ?5 zT1ad{)Om>rpn-M>?q46J6IR;r9UUCB6{zg$px%@4o?+^)O&qC~AM?l(38YXvc+&v> ze*MKxcVE@~_2v9Yt*W}h=d29y4sRY1K2Ov^ahPCm$h|z!UF{J(&}@$Ckyed+D5EA* z@Ybk`^>(6R@z8ZqdSv{w^D8I2i2i26yb`N#qmAJmTmzSH-%#L7wz=c0w7~R8hmOz(o$4iG29Kz>4Ox zx~hJG)7rpMi!CU|fYUf>ql||S`U|)#zrb*BKHOgVXo){_rMnuDT${2qV`AR|phjvn zh$(Dl5;e(uvmNZT&NfI_ZpIyl6Nyk^sY~DnAb^shcHXZ3c)!k3ZFxUxXuzP;6zKgb z2rT?1$KSBQz#=jC&iEZa{TQZ>gfZFQa$>bm3O&s^WwJj1V6EBGcZNM|>)3B~?z&s& zt?{Q2hu4CnrbN?leZkC9hdUk1>#gFS^9Bvv+|K@7ZsxkRA_td}G;Xop@BBR*aFSnc z5JHra8r3;K6A07>^1say4edqiw_dIn*FZhw4jG-^5-QoO_4iXo&eR|C0EXnJc*#yR z=3837hw(?R9Rr<;aJMH(uo(6eVGz$9H{wiwm(W(ggZ=pr>x?^w*ZxV5Z?`H}E$Z&k zTVDk$DNT`5)jC>3c#>AZ`*IUXEsyj6Jf6!@!K?XJp2rQvb^AS2>n>y4o43%JURn!? zut>5D=gq)trR^E+Bg{u$3@$O*d;K%*;ulQlGJs_B`@Hg;q&gN8( zdJ2stmNR*#bt@#Z->_Iu;c@{Xh4vsC-ISFVB6yjH7_>;#>A2mVV~@*}4M{ z2BMpocTd;=XZzavQD6W46nph<8VjGbPD77P_oLzF*pa{Cr=Z4F^jX9gmE8nVcdT7bmt+`$U*2ASp{B7B+adHam zWC6qGD=nL4D*4eMG)ynw?BpzKZO-=HWuMjKVk=F4=LF~$BGH&Ww-DmHB&&ft756+V zOJLrJZSoOLP3W({wjG@kQONn>B4g&uH2uRJ!Ryessxzj5j$EIil>+YB+xhBZ@r=(S zm2Uf293YVulxJ5NfC!>gv2%pjjrO+eWQ&`c!VtOfhJ=N^V_>*UjcbUI9ZI<$PQ6If zn_3{BDA7uM;l*8HHGQP-A&hP@*LdOKQztR9A2PkW!|sN$s+XZuaz|dFY(*h&^D&4h z^@Zabz7Y3U&xRn3I=bU+M^MLye8GT|LJ>(GC-Fn2U(#2`A=hEI12vPBRMqGDrG4J( zIwhda0NI-F;w8(XB%@zd*l4!53QF?N zjO322Bcq^Tc9`SDu!klUlMyk`te6I3p1$9R1=LD^s9eC)T4%!p(tO@IhoOvhEB+iJcF9Jg?Y6yZ0A+7#1GReP4{kAg)9$8C)Z~ zyFO^4SFZr~)b-}RAvr*067Rm;nF~M>nmkSj0D=ac%^07Y7$;}L=OR6pd^XFjW+&Pk zyRO#}kjId&MTKT+GM3`mBabJ^;US`^%E^kpzP$%TXcF|-OLZR~@vN5IcxjHQm4}E# z8r=iB*oaq$A(@}&Gs_*=g(U?)q_yhmuGfD78L#pSz6}4!>FW)j z$vw^HgU4=Wb{3r=wlZ+#sbs;)*^YeW%WY^EZUz84^e?dRyye589dcPbH)^F*!9<`0 z@-jCsA5=ud#Zd_f1GCgq-950eAKjY>Q^3K++Br&B9XcF+ul=J0T&q5-S_KM4-(q^0xaVy$EtAa7vU0i?BNoAW;bR4;I=xuuY4Xtp<*-&0`{3DRO~KXnz}iN5k)dO)Y2 zcl=l~&0=x;T1ePWt<-grM?eQw$ed`QrT>~WO@$_|qq{q6l6!2RhCV#`TH)kE#_8eK ziJY7HB`v9di0skD9cZa)?bl#Pv5NFBVwva&S;ER_IdIvgec}qVlbtFk9PY;4{O)yr zIXSgA{cX`GbpKK`G-R~wa5ZOCoX#WqxRz7uaL*Z-(h=}_h+rm2i6+b3pMtuY`U`oU zZrYd!g5iAF2*ZkvSKSlX^3Mu7)mjV9S`O;)uPcn%*TyN(T!>zmT(K zP&i551~1i$>L1=#Acvmo^#|b3^Au5SyVrsG{Bxa7CjaM-WGR+Xm+b#1^~X@SWLP8# zKR2(Im$0x7fQLlBWTv_Z-2vDWb2blGU@eMVhyAYon-kK?=7^= z7Zy%%HgCVGdUl%hSW++^){smrUoxwXOy_yMk(l+nA@`?{4TC{3O{yCi747&Ek#Aa- z*kthhBp~Q@E~mKIZS#p}!w}$X8cml6Qd=Y9;bHt8@YZrWnTcGuS$_B^XJ8`t6)mUE z^8jTO)ushG?PgsCN>Zh0=%M9F|MA$ncb>CFzFgspAv2d=>(^a(KHS07q@C$bsPNQw zjYu8vI^|wLeogxX zvbtr4FNU6aNv8&rq*Ij-^E7LKq4mHZ|2BOjNm)Fz1-cY#t>)vY zd@bKhqo%S-1&7CxBi;s|czd>eoQI@GpW>_N-pzw+y%$p5NZax>;-e|oM%Yo6_Ut)z z{2NIR%PBzL6#xyL`80e}170ssLLE=1yBd9R#8*O1YPlPJ7ev1EqxV&1S4A_soJF^MGuI2zd-@7E5t0;BcFc zH$%}>u`Sc7wGTWls$LK3UfO7f#>+X;eNpDUY8c*KzRDOUXEwZi4;ROfyoN*gEz;P$ z1W9^l?E7!NTZ5cY+nX5@Buh2%LF1xcjar-x!55l*b{L@InN8$y3_*wha^m1R&3^7q z2;REf{fmV6E|LJhTmgF)(uNxOnSz7;mk*zY9_rHfWIVZ=T_{bE4zg-pjIz2}e*ytz z=&*Sv>!@<4+AQ!IoO#+O`i8hWn5Gk%WazOKk?L`}zDEqA={fnoSlF)gJkOfqLG0nU z+@7q$L6KP9GB9Gmn-K@$4N&I(S^h;0LJYFR2J6k1aHebR;N8z5(wn#8VQJk7`>BEe z`TLWhs-`h+WH?s8_Pwg*S08q`Du)Ggj#vKrPmX0C1D;wkOysLVZAtJYqhQ{dT^ljT$HwCVyd z(Zt{=U2k<}Y##CL4gKP&$-zHYj0S{r^vR9RtNPpW7=bw#8j;;%Z?ZxoJJpjz zdweNXd4MDC4wk)}5rqBFFG~Bxi^u!NdF?IlmbQP{MLpkunBr~O22;CT*UCHdmt^BY>l`ccS(Jbi&<(eG*%tXw6Xbefblo zvT~jcA|2S6JkeRDQccwob9ie@fSUe!Hs{ImZ=uNh7jjie8mnDLV~g#pYsv6sOcsM3N;6KA)bsjgvhoTnOi=5sG5N*bEnrFnE&cmu32hEE26 z5SNYJd!U;QpN!+2Zo*X4Hdgi=f`V;+^sD3JC287 z;7eUOY;tsdahf*-E}6c;(Z^N=qoq4;g`|Gf&PG}$lj#@W!yb-97YB7k_w;fKz$95$ z0k{)plSH%om=n|hZw0rsS;u)t60|Mdmk{0IBx2i>9;wi!S0ONnn~&iZWE5m;J3srM zZ)&6Gf%rs0{L!M7I101W-@^({%%bz5^|DrALP16UDJ;BgtTjAgL}jKPv*#cfc=Kwo zKL+^grDl>}x0n`<{BY8o22Kbxc22YeIChoDBS2%XQsQ|`d zBzI$--KYK2>8tAbZ{j=#pE(1r1el!_2?L7^I@jm3G_e>JRf77EcZrslVIhT@)ltIT zjLC-aQS|sefDq$f>-n&%(XI8Ia?Z~;hmJ}#bl*vvr?uUWFih_0u5Vxfn7SYZ^U?nn zh^_0LE&PvEvTU7)4b~imoZ|sx>(|P6qt|P$so5bz;devcAy%Gc!jzA6`;|9tX~}8j zW>T0SaWZ<&pvJ+}oYp*it}Pn((DZsy{$L?Afx7HnwoJ+Nx?%>E4!dPnKySq$q4+;~ zX}T3i>b&KArJuLg9nSc@@sO%L37H~~+dD;76!g=v9sZ1rPbQ|bvpgthXkq^T2Hy`C z_)d?{dktbX?ol8_ZmQMxq#$L{aCYp*xF2|#U6LuPEBqcbB_fy=I&N~|4^vu_tD+FcyV21x&DsowoJ~I9sB%~l z=pf&TVK@iUk*-{Ffx0q8UAPbqdm>(}go;fRphO{#jgN>1J2kY{g-No{ZGR0FNqjT< z|HL~a$-sDsK&)smT!e;{;yiBDOUTb3%C^+y9n}Y@w^n_fTFA(9K!0oaBZW9${bCrG z&6;MMB7EyOy(O6~6!@`6=E|{DLigF4J-kME(^R)^nDE;5b{caF>98Gw846ClrweQ| zoh8XTt*oM@?DfsC0Wb%4=54FOEob|TxXXiG;95H@S6gbf!1=EphC3D(vC(PXl0I*) zrX%Pl3cf_Q*l6}2r}!P~Fce!$<8Z`vw%?%>p;-cNKCEBUyQ(Z^7)}L~f4g(P0Y-{Y zxk}Bj-nufBlt!*gS}3enU``W!bP17O&Y-B_UjrrQp`JJz7BbA&>%fiehk5#BrfszT z{~8s*Z{!LCn@)f2_~y6<5)z>3Dr94S{q}99Oit~78YN>S@m(U-ZqPo5E{@f_OODMj z(!%XsJ^26nMWsrRDeZA3|MiHkz3WzY$Yl!oq`3XTY3rpX8(ub71qG#{uWWoz1ToeJ zmyaB9YIzQpdRO6+aRsA*P}Swl6MKAIiV!&sxWAC)hW5G&N=46R`4}t$Ui%l~;wE@g z1zkS^mouhKp77-Y3bT~*mYD`>fbkRZ7R@&B(|qxk0#Mqg zwsxdaZglH9^mLN^d5P{}rtCusC_~2YJ zd=3Wy=%po+PG@L1EQ)u3(@RHCVhjgi0)<-ph-)%GQ|&Gk;{tXepasJSu`86{pcHEH zakc1k-Y+}n%_hca%6`(|;hi)$>v(%LKL`MPPnceX$LN5=ecVwJY?YOUB zd;~UD7r|xc`(vS)%LrS?5raEUT@TIg3-1g zqXn?uEc1pt*rj8nv*4U}1imGysT9H{2FZmV({Uoz3xQ|#A0Qu5I6HIS=-oH_k2~T3 zs6y=$+007SLr`E^Ej}gaj0%zs7fMN6Zy1DdQxcJ+-bNi%e?TihqqBu(SZ+5-!$ zn>dD2^&unt3)c<;IhIz`W)`7EKp<^8D+ctCW{~-xc`?o8{QL~U22KZKz@+4975G$( zT>*z=Bym~o9FQY@elV8=nw5|*jefmA>@Zh(*wKYJA9B_(yzr>S^)OH5ST6#UAN(Ul z@Fr@f7f=jOjj1;kEhZhoWq*{E0r3pRY>cuC>}=r}L=~2Pa53=0cBU`s|48W5yovS=* z%X9FlFxWnF<(X0ZJBMdcW`7ogb+bnvQ(r~GzJn>Mxmb!Nx`+&tWgTC>dI^GS?7nqT zAAX5o2D`foceDCiGgkKJo8y%1;sA7n{3Y5E!ak7U&sc)jjB$P6Nrc7A-PUC_$f*<4s#VF2=;@@R#8_QsKPr|S#Wphn+7B0O-=V{u^>{2)2fL`&Ayon3Fw z!M#EL@pK3qwk(=T36G8yDe~+e)7I2n{G)Xx^`Gbf{T+YZ;Ma*Ex2UBC5yw(H zS{EQg0*paYsvQ|Sj!mn?7vC}Hho%NCWKhR9Zjo>Ce4gSF@W=2?OtAS2`Ot7UkEq(H%UBW;v~@$woX#q{R6XOXeLrp`cCeC>jrL^_~K!*;*KJm zV6(#dtWQpdNpx2u~`rdvFG$`yind%Glu3 z6mB8G!Vl}ua;?d0*7}+Vk`^AB{yO^f)rMH*zXGmZtF5%f;~`#Ap~pvjW~K z@YIt=_XM-sZ(6&m;#5~Vzkc)j9XJMw%>ganA36Qc!ZiSP%3w}sQ%I)`#sd()z=Own z>AHWx4xA&!sj`{SDr3Ea_XS4)-=Mn2u#falX6ia6<=C>C?*5?&H-GmJzpOFA8s8LR zDuf3<7qC!~I;QoBRiI}0`4gk2s&l^es~;X>H5|Dw)j?9vUlLOA_8Ki6KQgh!2$ATQ3`4A;Txkx6sNBrx~8BESI{CGl1TR4z59{`r`D~ zZb9;k+{MidichREdxz*7gB&MPfVG>8Ur7U(&aNA$Wosc}|NrliKMp|w&9cN{0)7+! zS1M8!h?tnzFJ%pMoNG89k090~=5rcF{#}BWeU<0)14v9@v+QLR*?Ici--Y~asgm~=zfX!x4Os!m&q3A#QW-Ib^oytkHhcmtq&zT zci#f4fLVRV>qmZ{Bt#aE&kwypAe>(NT--$7^v8qzf3jr!dV}Q*9o|)C@w`cm_~T1? zWK}S|9}*HGW>rK2W({%iT-JFWuDX@AwJseWEv7I3hpMjts=E84MNyFuk#3~ByCtMU zLb|)VTcx`@M7q1XyFt3UyXzhN-v7-!hZ$z{ir(KnXUE!Wuca0xM?tMrV~j>D9@AE% z{Gv{x2WpnjdXTbpKTROx5YaH&>rguA(QTGYYR{HpZVWDn3LH~ z-{Lc;rrz!@KU1<;%=9_RwRH4__r@BpE3sv=&Z7-)-6ceI_ITV#!oCK_^GLm=znPi0 z)JREF!JRYuO$$^oHe0Z{>NSJI0djxzr4YfVnzQ$5??C-Nx{qi@F2g*cm>UmFxW1<2bnj>0jIUe$@l_&Fqz4f z^L8J17RynchKCHr}OQ$)BJpl6ln!$Eh$1VSF@5#*1a7?Ho z!b8x6x!)HRkJ`jbIQ^k$WHa6;B(SQ?{>< zK0`J(_K*KjP;c}NK{RB6No$OomevATVN8m6zWJY*s?QPsnjj$Ty*UII&xzN5coY`fhUy<;W!$7}Ow*GY!k7X^_2dWV&WjIAM) zt0ZeQy?ec~eeDI5#H~Df3~;&6IzGp&M3UlJyoHV8^u%8{M-$Z6*4~;-5Y7?reD2dt zU1%B_@cZcGaLjUdPdeMDeHdlmRW)Q_DIgT}SU4h~-DFSS9>FjHG#|O0# z*2rf}6YFfQ#EL?{U3~B;Ug5h07YoUKkbn=?@mj9_Hf|ZIX;(qi3#_nc(6&eyry&ed3S)`v8l6f1T8 zcj`fg6O&(&qp?i(j$uJ_reJ1p%%tiWUivYzKPmk*2WT1K>y#I7hIGd+c%~e_#qT=r z%9%U6ct)g9N;p|V`sdSORWrRzM5mCj_Wp{$Jjp<(;@RmNF6Yin+(W0!1M)?`V6E2D zv0Oa{c?R;c=lhfG{nZSR0U(1=2X%VAjtZ6Qz?3rQThZONff#M3-XK63FHV7k7PH;% zmG-=jt773#kX69TI*Ga#Sphy(YH@BMh0WP{L*J37k%i3d@=>q1)DjRy;>~dRobaSa z9)JL1j`BGR1mJe#^3?Vm&a>9J9}x+&77~!Kp#G8%jB0?IQ#)d--Rx$sff}ykF4tdG z%n>Kr>9T#D%1gX5EB8~AtLr%e@6P)TG6Tl#8QO2bGQ>%X$>{d4&0X#7;|mdQ+X}(c zfA4OSRDRf<2`KvrSuwtyGoB+i9u;y4pY`6lI#`lYP(-pEHvG?VI}IIl+37Ec1okHh zyU}x|pa!sS0Fld#`5IDFCd=gVI`mLIodIweV9|!Z)o2Jr=|3sGti&xhCIQj^@%&q~ zLCwlYusRdZ84G-%)K0r0{ozlyC)Zvn<(gZQ-zL-%>T|**1Oq34a0EPQCqZ4E1^revp*etj{Ymm52p?U3^R?AkqP$OQxLxg(==UY?b_H^HlLBRjBthy>gFKcqd zm=PV0sIx1*((T!AXYAAJo7CP^&s36tumq2nX_4RPx?H;A}M4`h24YsHsV(a;@#^@;>0+pN_OG zv)#;u#m}H4UW!h;1C~2x5o$;iAxmiJ3uF9pAXy$Vq! zD+Dl7_lA0l_zC$-=YGit7j9W-vP~G9O@|&vuy(-3eR@+!l6rdi+Fj-rx9nKW#y6{|>UX+glN^ni2m+dfk(oj{E(jytd+Tz*Bp!UO8OIjP@^C*}6O zTQeA!^}Aay`FsAve#hi5cB71;v^$cE&<$nhWB~Y>jpWaB+m>(yq%j`}@D=#ZXttC* z3kH>dj1J*AFvhy9LfRt9h%P*LI)f2igb6*q<_<~<=Mf1QD8p-B3jk>}SM}#9tS9wP z*q>1QE~gd?k}$-$C2#&QE(J2=*VPs3ve5phFDQ9Aym}Rsn5E5n|Di0V2^y zWJL0s{@9#aVO-GZkVT4pLjRIcrrldAv-@;Up;Gt;AfM@qX^awS46(HP@~ah?RS9g) zEL~#JV%JVTjXz*qQLC~RZGr`>QO}i=kC+*CmRQ-+xE+Ang27{xYz+At#^)zcy;z;k z=RV(((4AS)0Ll!Iat4DrYPW$TY0?Nh-V!9@8k?%rF)VF-Ki<51hk%USO6lqOfXBO$ zCcf?OAN-kt;Ad~|dpNIGknbSTMK}mmbEb*I@MA>Ab}yejsAF{K9`36oCTwjD8)>MQ~J1YW`L)1#L=YcPS)oAPb`5{t={OVy0?ow}oLjAmZVL88$y4|IO6!KOE1;`CvN5msQ^0HAOviF5du3 zn@-Apw&TF>GnWJSFA;eIdRewc;VmYM#c=#7?UVKjd8 zOu-B^{tr1EUIcRBFgXyj&eqKYOpkx-_g^>z#r+>;8O?u;e_>XdFUPDB_9VD!GCK|&aLGy*-sXPm^DBs>MMOhO zS}jZ{a?d$3n<@9p@cTI4eJ%d_^}`U3C{SmS$ga%%n>#eKMc&;;-uz~<1>CXMqO1pC zs+Tt`7R}@y(YUaj+qWfOGbm5~^kpte_sFprG`D zJNg2{%zOf6R<3|aP5ggck+ha9qPmB?l zNT$&T`}AP=$?pDy8U>7x=eO*^{(V0f2YkZ9iXzAOC)NVSVPr*zV_Vl^AkGRRK-AwT zQJGZ=LN$FULTQkCuiR0LqbedI0_-tE|KGI|`}cNpxF7`Yc)?$DQ^OX^`g#Tx6&fmK zTTn)kCw{OP}Sw_hxUqtZKs%d{88@*8PJ^?MeX$}2#4($>#1m|eTY;}W{o zfUE@)`HD1}blT;WRk=X+F|EI$$^y*xA`B0VZxgKW|7#)8c-1 zoShTNG)_~-!9(>{%Ol|7z!p~})!~1TnQbtT72^|`?*{A6z|P*`3jY6p!!b>;h$24)_(`vzjD&ReF022Yq|;{-g{x(JF}|BdakLTZ!##bKs$HX!D5r5=o5wJc5Yn0q?IG165=(bcmQc<4$9OdqDb#PB1U)Y}oYX}VuFBTI1Azzfy z@(PDb6i7u(af`cGKP^@j#2EwcV6XwbOwZ4UFb16>rw+5=*}XQ=9oi z!wPEagi2wBji2p1U?O=x2Li9uxv2plDH>*P8cPqh%wH<6*5>Amqay)BJX$x-Djh9N zO<%a3Hh{${RXfo%IGU|4Bt(gloE3plOXDr9Y@r}IQ5oXyMN{w>P>&# znQUgS+Go*w*qEJ}C0@KUeu&3U=C*yE#v-X)p$%nIxA5f?>`yH+S;Dut?y;1c&`@SL3YQ&RiLB&{hM3U8hsOi#&s!6EAfgKi|mG zFARoKC}4%&)!ntRua$+WKqlTm6Vo>lW`I&9KmQ3a&QE` z;G|m@(8cO?gDIS>K<2xTRa!+(IlnJ~@*@Zbzh$Cg8(nUH28SldlAHY72=UGow7Etz z&`$I5x{vdRb35(ZDBdz3T5R=VotYt`tuxK5{$n+^hRtnrk|T2TnkWO(Pcx>Gb~CX2rnS0LHoebB+hyg}du7r_QQ!9nE_WGo#>y7DBr?F_-a_fb9jhe!x|}(Os5;f2xZc zh#U6&CN>~KLn`+ddxpcHo#GeH-zyAy&^ptx0I%TR-x7aM?D>bn2?I@ETto?@R;-^7 zkMGYshX#Z{zK4b00z)APv!zxDWORuNkvL4ST(C z&F&vr!IXHgcI+2D0|NmM4{njdKrv2BhO9D!@f??cAK*v**vQ=o$*UqH-EzPuSYh9E zr4_I+Fy1Nk)>KPvyj3pOA;jTKGgzx#1#I{Tn@w&EZU+kIb2KLK%uxsl3GY5)ib^j# zTpTdQAF$gHH-rIWItIfny}!j8Vj#CneD2>Eh+^fnMJxW}TJmEsjWGr^kMy>CZ1tCz zU(Qj@yH>JZ9y(P?2_C5wQow}b2@7^^&OStBON(VecL+&ojimKJ!+y+?WmhbIat*k-x#_e8 zMgdzY*?{~E2gK7m{CmIY&kvV`0)9mAA&?y@hpxE&l$$&_Egv-H zsv@z#;B>9)+|U>PFh{n8PtInmKWgn7a%&6KsphD)yz6|_NJo~v-ZF~PQDcintt+5{ zm0WQtDjm{Qwws!EAa0P5ML~DxpTyFDjSwXki+UJ;m||^wid>L8aZ!^q|ExL zi0a+<-!(Pdf2;h0Dins^T7)%CCzp4UJMaJMJhtL$fjZk_QF@*)gG{}MC82!tW~-CN zYwm9-|Iudda$8(_&~*9M;D>Cp+h0N{u4~cUq@al@RBwu=KoR@aprY&mR4$})#C zg`S=_iw3NhJOLlUs|zrP`BKsYR{wN$i46=QqIPKh#|79zrwl2R&nqjJ*VWe#5zFG& z&+8tS4e1|86pz8Iqtslk40slfqs~saVb6$;lz8e=XPSJ4p8*LKD0`8~$!)nfvi^5=`R;gN# zX1>O(bD%*TQ}EV2S-t!v0D^1N`Yos!fc;13r;@~yP9#*9uQV<~jBN>Izk z=gG$_Jv?_z^7|yH3za9Ser9Fq9+U;vXdRt{4-LyBo?XUFMojcZfByIfO(9^Qis>n# zTekC$HoEZ1JE6<0u0lWi`uqtA6ZrWC+9eZ_+`zy9hy-h;wc$3vUCqqSN8$hC23m$n z%A}rM^`G4W1F9gu3m>m71oAy_SE1bQ*=1Nw0Er##?Ap(6l%T0daR~wL%QQ)>#oBip zWiRHy)jaCEQ;u}t()z-m`YGgS=xz-s4i@erDb?Dkm(S00>Sb!{(t^60uL9M4{1D=I zkhntjkc!~3$4mP`Q;{vHb#)Qo>kb?{E28*3P_*D5hkZw+3KmzYo`_rwMQUXXd zG!$@s^DREsW2^E0E)6Y(fC>X-AG+qI#K%mkdP73;#wL^I%sF(nqdk@!^@byot~$EM z%9p=A%{Har3~bpRADP$NTMUhVwT)*o#|0{2takDL63)ZtPNOqg3GIA-5=BIulf9_z zMpf&CaWLpLnX+gFudfAQf8F_pxD4KIf)G+iv}gv8Qp%mCOH-u&&`ZpK6ptH<8ap&=hkFOspphX>z?aG`Ytrx3p9^#T<=?0 z>eNCV_u-k$4!ZI;VG~$gDUw(Uv&Czcz{F1cz$2U=y1>zIZN4uFw+SkORr815^;nUx zCq*>*peEGwZ(9q zZ@aZwA71*3A@7*;=@2xd_FsG@P#1ucp_9R1HW>Yoc-0uf@l)T5m((t@-SMBzipsFAy3v`mf=!_V0a*P6g`7^Gbhq3T$N-y`!^GUtHVX%}O_jz?OF$Lfsz`h4d6^8z&4`VjAAiuMWlWevh!W`yAMh6+ z)b*wklFn9a6J+RSAKOBbcdSGvSm(?(gFE`fj3onjf`swE)1JO_$;Dm;88?2p zO1Z3R)czV`w5#i-vqHl3QrEby43-r!)Y18qK<9u?89NO1+43~f4wD&rJGqb6U7L)7 zkUa*IB|~DU{$+(3M|``?U9SAyxNU*2{eB2*b z+)|{3-Q2J>Bu&Z;8YB%h8*tXxy4>X2Lu-nIsi~1A`V11H4@ZF{C^Fg<7gG!1H^oMiR$L+}p zQ74BRLw|0+VsPki>2p(Ha5Ult0%EuHv$oyU>6*fE+s2S4-K@La;aHrnJy)I85mVQq zSPoybF{rX+vs9?_{%2 zs8uW(Dr|1%s&x&To9d@`ztX{EzP;m^{4eUMyri)lo59fMLq@?jT+c=}Xo!gM5PQfZ zjv(-v_W~5bqrNBssK+E#A3?2vIt}<;#@$~Z+dLncA1yWwEjHAgT#GAVP{)Wx3~Y9G zbs^!R3Ps(0pDDYx{P`M^&G89Nu~>tIi{W(wKVP>QyLEqpA7V&jZcM02=le902$9~E z9l>|Pq%d`H;%6#?N@UU&%PXz76@@dUzB{GgHW+|C##VQcAbB8)V@J0ToX|slaIhr# zqCNc8?SPfXCc=Y7>L2;I*<8kFwu)gNO#zaeLC}36q)9C%u$yB`VkzXPIZOM7C5ixx zst-6zA2SRN?>72Wy=DQ=K(DJ?uZH$}JvP9(b;f=s6k5$kzWbETT_dY+Mfu$qXpEQJ zjbQ^1$>G6WB%`e#|o-6wWvZ|(RxaFE?*!tzRoVY}CSr&RXq7It02!#$6JH15z3Nz>ik zdH9xT+S9|a<E0w~&`ikOg$kwdf-EAQ5nbc9Pd9Jjw0g8r3dA8gb zr$bm;%$j#s8N6>jn|_J9vsBSg;jdp`yj5Oy>wsQSh9RiKTTt}`-eT6@>moY$LGlw#onlb58wo80xSz$EbyF7ok}V+ z%=98`7{qo8`TV9U0~?gug@}ENX^T^oaYnK&6hNsPnMytO$GL)*iG?8jyYZ^a&1|VeWqqf7t(Latqt{?m`Ifmd5L`=}jAU%#e2wRr>u=4PYx* zNK&<2|J-G5ZB2GzBE9^42xu2MhPCN!3qnKnafQSi}E^yZh<2r}@t4 zc+-pjOl~Pdxz!2F|+$neC=6q{06o>X)}LBks8i|S!JyT(6SYza!J`ry3S z|E<84SN<=ag{yfSdBv+g$m5i9wy-b_uHR-BAw_PS>uqnjf~HH>Hh;M)sVd90We|MN zpKP7${@XeRV+=&ZBQqjd;oowxHB{n33I8RLE}}uUV1USr$gQBx`$_UkALLK$NIw4s)H#Hu#=1i29maqb1lHkk4X6t_yeW5yE2+6dA@_g z`05LHWsJOgO&lZk(xd{|z!@~)`wFzW>%QNq)R~e@nD<8O%}M*C3vN38P9lL+8R_C? zgLUOBu4}R$U+7R4k&dpalo0^e*4h7RB}zZr8&4A~yHY3p1xE}|F-+_tmF43sZD~V< z>m>&eMy2x=sIpKWZRe6j3Hhq7%=`h~A`Z8Hjv%;;UYCR9q ziVD~)vAFf?5Yv{rk_*9%fYp&l*WJHEet!>}*c=`yzV0!nZ!c`#1gHLV9jeEZJb-DB z>qUWqiKY^mSo*cYZOQ)O{^NRZU&X&Wl6Z}2S^k3aNS1S}x zxV-j#EYg1mHCmn`3t+J?cxoD$H`EwlWCd+&w=Echrsd_a<||~tgHqfOj3&rUmMfhp zsi>!@l<7EQ2*vT#)XEv$CIx9UT?Ze!Orbw~$TIHOL#9m*f!6gq-RJ|L!oN`bt9HjK zRg*(7w){iXA`1%vx-KKLwTyNEl1DIgXa8c_RQM}yr-vK-*>ki%&kOo3f;!hJFqcWA ze@3(baN%C>*g0|>lP>UIZn>guPkkBpLRQn5X0 zMZ=QMyDxBa@|CRLVSS5cC^xXn23; z7+(L>2&+&%bG!_M{>ZNlE;|FPNeLjhvO8{NrVG5-Lo|=CBhB}1sJyLHJ`-m%0+WpDQW6>t z>?SEng~O*zrbP7aFr3$4=G!tnW<@VR!Z?aD)V0XlI?=pmciH&;zoUkO(5L>2v0-p$ zZQVZv?skPaD*#%h2(>_7>?jdD>DmNV%GjajbcGXab~mqT^CWtQJvIj5Z|>M8#+Br( zOJf2Jv+E^cAh=qNa+1OjR}YNd?q{?UnTm$ix@>{`KS0>|DQtQ*V=<9F$_~0Rg-My| zTDI75vDJTS(lFc^eY2Xuz+s@XH|PV@`x6$N&&IL@VE6t~jm$FY1f4p*`+(I^*7DK% zZj!gp!c<2`?B!$usj?qGEXP0BUx<=K$rLw|0-utNg_djJLyTZ3g_q-T80ZvB+r8#f z;q0n3LOnj7L9>=8LHnMx8V2sQaow1Z90vG&7*#FtGm3S^BDYg z;nMVj@Za5S8x^!s{IVGj>D9|R!s|3NqZ9z}%p$2KzbyEa`g4Fg1FdGpsXGZuPds+- zI7M!FO*Y|udO0Ij6U13qWEMN6pC_UwKxfn8Kq~E)GN7XGO92>lG#bH!1sh*@NfBb% zgim$(RXIxsa(b6W{dFk6W?4%KK0eR>)VN-kNc`kM&2F=0&=(kTaC^=MQ}^>-73El= z%m*NrX0bC0SFD#;9!;+LgB(dXE7yJgN}Z0GS$FqOT^{yqSlbd0A;9F%M|MpQp4QQe zi!BBd*b~509Lx0h?x9)}2{t?aYkC{EpCT^Fs2Ks&#`yJ+`BR$+iWr2Qbs2g=Cyfd( zR*F;)=h9I?U$Fx_^H_Lr8M2EI_5veeI)-jo&xKMrx&lN?m(52 zHkY20utz%#YP8k6|!k3)=^GCo&v6p1^9|-Sz?xz)I-7I>De0jC>L{J8E zQOFx?miy%WH8kOLzk5TiGP%7n8)cWs5I4u8PEXIs`tmfVh-Aru|62O-&+nbH2CWVD zNU^l4U)IYA#~rfPB5!c6@>f~m)R z8`kr*e8EOHn1tQjHZj;4y<;}oK_5YsNyq6lD0rL zrPlU-%PjZCY_JA90)vxz*jZXeJz+Row-q@v?Cf%xW9$_(f0cX_pSN10*6GR0Uh}f-&JGqX4jJ6+m$tV87!F1rE$}AKyp>P+_8$b9Xn^#O1|DpwW z|3KUWTY>a=B)_&qj7e2|gB41gC6_jc7@gf+<28oDYOs3g(qZt}_xIuPC!o&Lf*2Wo z-5c-pFqeQ7Y%z~~yjEwdFzRzO)qgTy*w<;y6tE3vshrkq z&t2zvsOei%C>=yFYrLBn)z@t9e17J<#=g{Ln{nFsaC^Lyu!B~d7LDRq;jj0B3UQW)|KntDOYT2T?T&5n>((#*`E0{ zS7|KvlwV~;uXQ6`BkR~Re#_LqE)s^h>Hpj*(AvKGXrw_Vp4j~fkh3f+NG57hNvQ+3 zev3X0R$31XSRKE^o^8HOy2qQ%|AaHp;9<*))KHoIJ%FpvBx9<3U9S3l$QfI?;Z&q$ zC_XbVyI(N9eOUy4=T|>0jzLS37%}6yMwFc4MV--6dMZ_h zu*l*%rDnY)+S_|$@H=WvHUTa0j}Zse+1Unmdvj4S1E>gy*wOFC9&4$n3mjez<2)hx$llJXG{FxmpX@Os^c2p%s=XNb z)P3jl2?bYZx@-cy*$y%*|F0g9t&!NDqAyE{P~-c(OoX!}e#2?(355)&a%-SO2;B;M@K9e*w zfe;6ZpO60r<*DuRK9jxi{$XYVX8JMV3zB^lks}czM3u(V34nAD;Cv%0xw33avB4zH zl%z1cG23B=jl4!N_NJGfnKO1cL$s!O`Ed?VHQ_8|qgZLv>Ecfxv(D6t9}k zUa1dhKW8sBv7hDL-=9c>WN34>!UFIAm9Ldm22!_uMe3#0f?vO0tU{xB|*@++`^1Ret5uLO`j@dM6I;)xd1CulrtnbrSF z5K)C^8zfi&vCuOp{GpS}s2ubfXMoIR2_>U8r>}76R7!ajt|TJ8Uyt-Nhm%xPtKEk#D%Bg&48#uV zwys1^9Y4-0E6=Yi)ClUG2*! zm9j$0deUHzIg*|vyC7^P$d6;6BIOq`9(>bFw~>vShw>-4-3%Wupp|lq&}%$6yGgPkUN8YLIlC%UX>X#8>s6jXAwu|s`SbV&qt-?K zHDYA(6K!gR#hp`e@`K;_)PAW>y9m7Hyr9pWBvQ%gaX^Nkw~uU|%sKKR+LzQnUCtiQ zG;uV^S-GYG$k+d}XM30=k>gv4=vWp(sFtUd+JHRh@ROD3Ih9J2k%NRNr82Wuz-U(b z@~P$Tjde$WqVl-Q4*IXI6HNec8nfgo<(p7fQzwWgs9ahPMp8=_pOQZx%nk#|sT~Ff zitmXoq|QaYj;_A0tXk9kU6W>0xCL-m0Q(M!J&b&K-tws+4`r=`H&Y493ZcH_yeT*6 zSF%Xu6=+7x;+ZF*ZkbM#D>tD&U^Gk@@B`8p&3r^op8TMVt91$c113IPJXOCMpcJgN z-UVB@$2tz;L@qz*mTIL7sSa&y3s;QpY z%Mhu1O92`WRY6H_Ftn@=vo3)cAjdWn-kwN^)g&UD(2%k&DWSEwrJc=ob53hI1OZ_% zggh*XPLfPzpYS`q-y)z~1hzuO1;C#QBRxI$(TKrf$tT$S0bpf6JygB~dzr&w~_6D3N(%|2Kd{d~Z{^OG_iCpP7P{~}Y!(nqJQlN;JI!?3fu^2@b zRvQ>>0jxa5=iC5nu}J@tP8L6AVAszE=lKOfH6tq5NLsSw!7eAuiAFtbt)YDBuOO2_hSIzb|W~(9zRp@pnt4n`>0ecExZ(Tx=kQ$DobCrC!3u3Jv z7k0fjfbNkPxoovttcs!WJ_uJRjiRcH64c~yJ*WUdN zK}=s{=h31i8BhW?+>LJw*0{V!JH7<9fte~--2HS3LQVkwuMDK4sr}K;8tFBv8T!Md zPpHTu&+G$A?AAmzG|9mJH=?4HlBc65YK&NW|9HiV6=H+zX7zJZgxYYpPXT=-C13;W zC@sZM)t%Fu?cNcUfx095!Qv=by@C1k=F#+-Ay-t=t!HFqrnsol<<4Kfhlajb0QLz; zEqVR5a4xNO)S4|5hge{93>-Q)uzJ2j0WP|rrO0+Jd9^{IMpdSnAR!dqf=Ai?0Z0HK zi4cVsSd|f7UkvZ(gw;9RyKuCcsG|7L^J^}VK5Rm2sNDtaAhdMWn%mauBz2%9VHeNnQF}*>TU~Bd7!0%l ztoQ|=UKje1{eQ9I(ugQ4hd!Os+GamMXB*EIg(V5a6S`Efmm!O+NfLRTKVnoOGtR_#^ECH9>%O6wOEJf#lMNJU^^$P~t7 z0V2$|W*rn5WU8|m}6Jxux~d4QO=;<=3t#^7L{8tueIK=9gYhACfQYoZJbU={|8iTZYr!}D*J z8(fogbEHS@&yw|O+*`T>9b2^7wg-n6J!#9WIw86p&H4rx{UZ8;YppI2pRQRVV@O;W?zsDSAyHY9 zYQFKTA>BYX{3f_R(IwM2QP1nZ-ym(X*7~< zF5g4H*BbUZnmnEf8P3Q#SzF~cxY!-6#KnoPyQhO-he3U(^%x9&k;sBKHE-UsTn1+8 z4~-%TXUROJA5#>P;(s?gY!QK;;^@is2U`fq>5rZ6IynerYQ+fMhNrZPLnaeMECb24 z4ZH@777yVyfl=VfjWNFzr1n*9m&t@cHZORwAdW6y5{cxgI;rp$1_HXmn$*$!m#I&` zyxC+h+Q;Jx>#OLOTb#Z;odK-Jz?5~41hR|5$>t8!Xue@R4^2N-q}@v#OH>B$Fpxm_ z_8vJo1zRnrppQ|SB`(xracMBwG4&vc>|l4)2$aw3`+3W_J67RYJ_o~#JD=QDI;0%z zlt$iIYv)gz<7f>gUc*J`!Mbf{Y;{wg!MFH1qL!zLk$DTa z>i{^XS6-7Mp?Q)dRM_Qz9EOAB0``<<47(PV-ooBffe-CKulen+4kg2uAX`kPdcsV4Pfnw)2LKomv~w`esccS7C2x1I@QWDMa3WpK zvCM__EjA-Naq*5j(1U@xI^F^}^bU|We*7VOgezYn;|IXx5N%eEe}T_XHcz`kZ+YZCIvYBQ4sZgS^YH%h zMLoGfa4#C!5V5)n(P_eDY@=Qk!(24)pmX}5TzS45C~F)^GJPAr z%SbX_C=FxU;PEvC1;G4`E*IgzZGm3vh(TfrUa%pypflt=hrQa=RL5poBz@&_qUR!> zi?a+jh=e0>9&JRXBIe`wq$;sSyNGg>nHr0?rQltMeJbk{$fS4Uu%q9qO^H9-4VgS zyk~87&cXlsL1unVrjZ|o3(M8oXDD;VsEX!%*7*IUj{!oB*A*sC&AF^vy1pvc-5{=Wwqm&MjD%;h zD2eA4C8w)U$;bqx0; zMiD=l41e#8NoDRQPCc*UMe6&W?}D>+aU_^Dicm(di>3`qSn*w#+UR0oH9NKuT5J)K zi((f+}uicI_|=iXTDZq+2~l1Gn(fYo=x%cVLLB zY%m@tMvjI7l`IHUt+5F<+6LRf@>l1L_OkK$R=tYv{M_^r!@j<2{Jio+ytKeRPyu^i zS7-Q2s5^UR+m;mENIfdGSKqr2mZ^mR=JStwl>tu~N2~WYIN*gsi{H^Rk(uBa$yc4` zBOoN~#$j)GH7E+2br{P14fC`mpx+ZqlWKZWj>h{-LMp*{xeV)&(}9qQD4q~JAFXE# z5^3~4Ad^E51aziMCeu|yI5s@*HNL*^slPRn1OoDAM1cvX-Wj+)Z$<^Zwam070j$8V z?rkVvCvudnYEp&5kN{Vt0811s+&GU50(!WxYP4=^wHF$lV%P5-029-2?e8!-3U1^#$GLv7=$V%lU2n~V znO|}ctsJKK5U=snq-;Ra#IM7`!HF@LK3XVZ1=C=&J9EiI_4Sr^@GtCK;t@ect&1}& zK#yjlzKwO( ze3W9hc|m=e3gXB%G~fvd*{v}p*ZfSKr6Gz_d7j2*IKvXefO*?~cG&aIV^hID5Haj; z@~c{pql@SJXc4l5)JliQ%lYp)pYWfT;rkpP;JS+!1BDlb8a=MOfpRu|xxMaO^kC1= zbocjX;<=A%wZTw`dC^$gNX0;FsSWf6WU|$-XU|YX8mkqsMgZ@ZOtyGU_;|gApq>8( zA%lrK6_Gf2oojwLW4HMUM@T}%Mq1xwN_?EBV}7>tQ(Id=&oK7GFVKpBn@x;sORWfP z>IwyKK6^68w)Ct4b=ySJd(7;!I6zF|@alj;KU-uLCgAxwF)bjPLb-zH{%Iy=4N$to zEp+()+JxlMS>Z^=E@z*WE?ZM*q|vx8}tD(8m&^QcL(I*Zr6Fbl%P4Q4&lOg=C3 z?wT$%xG!jEA8kyRb%v?&dRMJOX2*tNhRn-Pdsh0Blc!^#JfDT^{CQc}gJe2Q(NhVl z$F0Ut5@}i_tE}(I7M+2@j6+YJlRXuK!F?WLLz<335_FubJ=u~0m%U+X=F);KvMKkw zJhir%qKTP_8Yfr7=+`+zhTqt#&`+m3Kh&ov3 z0CljzU33{Blom|AP&i&gE)$V3yy5e5^(^{|g(XmI(nslcL7!OaRnxclP0w-wjjXeJ za5q-P{H>b{L#jf7q}u7-*`_Uvh0;(oG~p{Jmuu8lB^sGK^;3;1x@ogMhe6vUvy1yF z;Mz$X&BcO_DvDfHifU3pZ$#4{$n+vzrnRi+d_02u{Vm}+%yH+^g$A2FdZUq&H1t(? zL+`UVcZ_Sp+w(R_(>gH3M8N`1aOz&8t={GZQJk;7{p&c>21ahjls&L!U+?vLOD)C6t9~oZkh4GXiz)x|%Z~}=tZ>ry~$uw3b-9zpS)mD6tCV|;dVvw3A7wg=D zlORPSZo|og)$y#M4iaJGxMv8Y+RJU+P_yO1EM4LFremYEj;RpaoV@vBSk~b*A%Ymt zywRVb&~|}(Fd3)PA8(Gv=cb%rNq-3x z$pFaBr)2eQ&H8%Jex|_y1K7bx%YM9WS>6wC^;YTJgS*1(T#09fvO>722Y0Jqv5^QW zZm?^hKr-+i!NZNAj{fRxzqaOYY^M)|V7;YfpY(mLXTonkMJG2Cs8jj~kq~4h_U$eL zT?cuL3T=zHQtGlg0n})Ud0NdKtewhJK=liNza#~T9#|rd zF3(!#@MSan1FT=69+k@O;r48)Rj*EXk*_Dy76wBUpiZz;IA=_BBRL%tNDm)vKCND= z&9gvO+47XvPIqM4xq~`#f(sW^I6%DNWmzg1m)`5Hic%H~9lE7cB@GPYm|C8$bu29S z0P`1}+vao8yd#NttXZGQGT5e4C{pTdWS>CiG10;Ndb=Olr&k+8@k=$2AvlHZ7Z81T zVKu_z&5c|YQPVR-%GC!$#S~1oR)~El*L(CRSoBn|HI&?1n3V$?b`>TQ7HbzSYxXXc zJHWipf10?F6*laBPDL16w-_<-?dc|x_IM##BUVoaLtR+jH(u2xwG`udo;B%%^%*(^Z4wffq69LTmh|f`85(Iody-!xOOrpiej>jsi zK4y@P0ErTUC=vQdl1k_8z9?ZX4<|go;Dp{tW~}b+T}x9>K9LV#&&J|VRbsfmNJhoY zl|c*%*IQO!z^;_HI~MwwbJIX)(?TUEAb^C4$U8h-3kV}Ye|YTN#>e;eetJIlf_N@j zGX6>t^Jl`itYSpO>KjC2{7xsef7C$dU@{-90>f+#jxE%s-m_%^`N7eT@y=*qpk=i; z(qvS1dXdNxmh6Mr?W=Ny)qfL8jWLxCed*>#Usbv?Ue@3;RGFFoPHwVr3r zagTe1WW+L!mc!QC(xlY0(sTa?WLmlwJf-JV{#J@j!e4HL1*Nrsw^DEvIP!2^qlT$> z*m`J71YjL()&{^L76w(trZ*%6&gX)$*M4yRAmKqE@{=?j@YQZXooJqgAOMO;ja$AD z{uz*6U4EU*-;&$ax9`1J=Xn1vwBbCAaow|^LraKLmH z$yACe6Q;T>(Ui54Mw}i_6EwFF{iq6M(B0>&NJ_8`Blx$G{Wh>DxKV}vVibb>(84d_ z@cd2>d+|MaY)c8C9n}WO(zC<{m6ylZdXU|x#9*=q&U3(mX7x55{!iO07{2KXpY}Jr zKBmt}{CrY$Jb`Pad8XiN%LNN6JJpPXEBr9JFsFLZ$tk5#otYx227zKaT8oCB`{l#@ zSHbB~ZHI^3N z#>JsX{YmmWMae|ipO>sRB9F9FBm6JO_ex7y>MRk6J3Y#k017`cu};jo81slt-79=9 zNR{`v4OsMa=j%V@f6ZkC-(9v#E0KT<-;#<&p!IL^6J&~+11JqeE##d*f=39HhEgPNIJ|OUSyI&{Lc1Qj#F5v<~(+r$6!24}b1ODV@)gWMCt=Jw= zR@0of+h``x=hq`Ooj-W8Ex`Fe_|&Ty?5>oxJ%395gi$t4aiclD+e|lDHe+UX|E=e*KpbKsPe!BbiTSYqMf%3!tBsCOfZ zhG85^xL!uL2QD!kWGgKp@Yu5B5ERU0P(8DZ*GsP&+73U4=+q?AA(&RVuEVSvuyJyl z{%u@l+^vzjJ+mZLWwd*QSCPf<1+8%rk~uNQ#i9Wp*3i0tEEO#Le%%d<2*8_}PLO_s z3;YjYs(Y2829!_&{|N?;EwAmxV1Fu^7FQBcUpqw^;>sWb{YyOItRN>Fmx)7Gs+_8c zOuD#Y*;GPu-a&gJm|DVGyo6E|bPFp`f#bn1J0O1||K=^54)L;$%L5w_5V!@`M?w?u z=-g3Om(j#`JiFgXxrLw{1cXTy z-`we9TG0G^nx|<#YK?~ZcP4;Fcb8inR{a#b#pzAz{lzt1n7ET!QI?ivgVeIVE3o^* zok0EtL*TK8u+bj`17hEipKsoyeF!0^jj(H_Ff+^!^w1n<=O>3xW#9SMD6OBO_G7T8 z1K)4#Wql&NUjaNslVaV(B8D0-#)3zB(wTD7IYDhUc)jGiIH|(^S-oNUaO$cx#Xpw^ zPLy!ljfKKYtvSXx+6~<3DhJC6+4^zTFzQJQ`4$7?IJ&g{1$D)l3TqOQZs{DGhb~>4 zlp!1(9425u;I6e41*w72eBY*r@@R_U7>v5A?FSN?Nkg;HAN!}K!pH}k%*O`sfXOm+ zPnFYAk1zmv-*9%d9wZr`ZZHS~O|okYI6+-d)^%?_ZhCLnEUS;F8%`YW=JK-B1p!DAjDhuO;S3j^Er&-vca0%l zaXNB97micoaE2x46~A8swERT|*D0D$> zh)Z)sLA_j7fqKFI-7>RQcI@!|c_m@1ec=xx^7|c! zZ7Tcp`#Oz{Q)-PWA3Ut551o)c!|h<}Eum1-_`>%w-nx6I`zLw~yKM&jS=dV1a=SmS z3T#11TewN~vWy$k-{u@Bv3?A07R0EoHu~xJD$`O={BM+To%`*pOj}sRl9$bHkF2V4 z4-$~F@7Re+IUKKHHWqikmWo~U7k-G@9ws<6y8DZ2aohj&AzaGa+wT2*`j)lP*RRg$g!ZaTJ9q8aUN`kg z$VbDAgk(RM%YO3cRiyqABP08ZPt?5lWl0#6y5p%|AaN$!d{k?z$BR`zc#-`SF6JN9 zT+QB{H8mg4L(#&Wwa56n+Q_lqbdfLAd%gfZ=E@%&Jx>@MLury+^d!q@%e!3#0tL!d zmmKK~_j9DERJWM5+nT>#zicHgh(pAqP_;_YqFQ#N9)6k|{?T6K>gtGOawGZg-&C6C z(BP;-e%^Y%V5STZ&6-5t46V`D0M#wT87)JYm zz-(liBg1hPUI|k0ML9kx#*R8Qv!YD5aUeV3>cmPVKCXnD(Y}v1WSIeT{CCH1(i9rZ zwVUy7PE3YgTOWK1ZldoU;m&`(BcMh&fh3)P2?v}|8|MLNl{m605Wxjc;Z6)|<{J4b%*SOY4Ug;YDLC$7dEUd7P;*;SUhMQCD3!IQ3 zpTp%G@9vLkbDQKq*Am?bjgE;C-{3}qF%vLCMB}c}lb$DM-J2zZB&Xa%j@WtP=}4i? zu>MEU@w#Ky#V8MaT6M1bdW8h#i91|pY~U`|K{I8ZEFvM{+fyu%^*Y6(3M*}Sp$|H% z1U#rWma{c}agW5PN%Ih zesdqI@pyxJ7v~vkwH0~iD6ZW2tL>3K`>US6OcAI|?_-3K)_wb2ZD z7Tl&I=+*rV%g}Y|Kk%Y>CkvpZOJrA6R%Uv3_9;0P1ZvWu6kCs#MLB>bT(Ibs%!yiT ztaZ5GegSd^QkZMG^OdMS^4A5(3~7P$7%e_Q*huhYBpjSD8D*ffIH`QB@Vx#SIBker zzWWOQj{f$Zxy)`B9-UtE#Wzxnj>4#4q2UxUPjh+Vk;l`S57JkMp&+_)_Lg9xX#Rag zuj)vQurWT=d9d?u3EwT3gYjSnHO7hj(Fi*;1ra?wOrrBtOv97Pa@21mM8r?~+Ga@= zEo@&bP11x)5KdYHdhgat!I1!RP(do(_cR??`?7f$x{~UWQvUL)ez8tT<$AkE*6v#C zo{6n3}Mp5q7ygwge? z{^oRF{`%(Dl23*7&#{Q5+5wBdU;EpPk*ThNAOu4d8*);{Z;kN`l~xOkx7PzQE}m!* zgl9iKLGV_E;iy%ckkAMRbJtJ>W45YQ)^CUt417G*@VZRnjn@h9)L=ryf>0MXMU6&n zwsHCwoLiX4c5$-5K67umsKu=8{1PzS^{hR7|Uxw;F)2n_e=Y4 z+c~xX5){)~;bN6`M=P~8j4;=%Ub3g=iRMnJ+LH{~T0>~a^HOcI?_rk9lGU;^Ml#kJoQk61zrTt9p>8h(rd9RdNaJlBI8|D*_>IQ zb;L&R<+h&{LR@t|902rX`fXjsw~hYCqnPYx7<#@0Z4^pU%uNVHdca3D(TRYR~iiet%D9+(L zARcPp1b1e?H8e4oY286+DXKnytGPM+iJv|UGwqQZ~%&$*I_PhHrgvSCjD1pP;0%19FLv2 zgFBso>9P(%`aInyB3%Jc(!Ih%X-ML>+ZYQThs=<`j-?tT5!`dp;epLP3ZHBa+m{K< z`lR5Q5R5G>l}@er_7Zvb0JazzL=^nVae#Z{9{&62n|>mHt1+5OR(AG`&w7Z46a&0E z1u=07!j>%L_F-sA4CN^MtC?b{Ct0CV$&jzxcwlg-3?xm9UMzFO7i*qAp#0`hJDN4CV&r4RDU5T?e zYc_(UV;^#U?i4Rrnw5W3FY@BlRS75;p5X4@@+d;ik5Z1!zbsM91Rnbc5~P!Sc8FpJ zj>peW(>M$eeB2Obe*QtNbg7YCDCBaj8#7MDV02$BDk|z7ibp^%mWGIzgy!&@>om?F zOEkG#+2r`n(Fa}|ZQlM4`jW3b7%BCxng@6c|H1Aa@9>XHrgxhdt{1zBk?lu8avOs1 zLdo|qKOa3PHtMhI)+-0%RHmBTFNif)&BjX+XyWMg=GI4PHETplAQ*HizJDK@5_zgo z7IO#WrB0>aGp`N_GxX}hd2b=Gm-K1qwws})=2K8Z;9D_SiK?kS7>Si{ zzf~O1LF98s((5^{5STnn(5kK9;nAZ!Gm*=&A6H3i$>gv|LAkI{U73l5O{71dHS^ER z{7|zu0TPmLVG3?9O4Vyf7eOA1LV<9B67xbMN-OBhx)&+xjc@&fwRO8Si}u)H7q?k5 zcP5+o*~}9^^W=oobAn=;H;)d9$F#*F_}EbXg*+VG&+blzMlV$xUEc0lyy^Uf3^)^b zYsZ$a#LDlP*OtELfJ-xIqW^w4l;I%D>tP)kN+`U-Vf{wVMmVFPHT+k;ndqZ_cQVI| zeEyxIhbOhoYg3X~$yTlk1jb%dH5bA!Br&r)$kt+9o%+Nx=7u*uk2b15qt$8vfC07ALdUbz? z!bdJWJXYW4`(uXJkob_zV)T&3>l?TtCq!~f#E8Pv(2Exn^YUEmJcd2fQfDPH-TA1- zGN2mnrz-i|1EbOLYEXA7kU6scuSHurjXyle#;MAa-f3st_8pIlmC5PP6q&*gLh@A8 z|L$C}<8v8&+EbF1x~MGUceLK5~kwDRzNLL3$#u%h&MC=DYa*$fpLNOnkl1RIWuj#`$rUYHcl% zCm)N*_GN)u0rkV%&=E)R{}IWbgw;)mVi%jGvLq#c&sJ)}NMGS}2d)KBX_gXS9WCk) ze~+HUlnR&%y}4R8#TRfQ(^MJk>gr;IbQ$TqYRwspVA|gHYHq_6X1Qa{o--1HMuw1Wc6$L*SJs`fci_KP*>gD-QRLRWyJh~ zh%cHc*GFLsXxEyJSx6X12-5?zXX*`EYAmJ=`_6CHhYa)L>MN7dkL)#|`Q4ibclISa zX$6pUez%`R5Q*Gj4dFfK)JgQr2!gp9i=Kk$Zt+{`;dwdGqXL36dVNJK?P!&Lk}Cb| zqH@E->YvNfly*@2S7ppF<#uYpOWd8cDpne| zljl)S_gjB%1XPM5zecFAJsPqKH6E+3S1Q}@@UQ9LnaeJl+ZrDoHD0(bND%EKb;rl;Z+mzaN0|9Nw4|&CdzoG$xW`I(FMGxtY4@V zzh;Q?oGRrHr+Nk7cx+jH{HQBdK@M91^jE@BHC}tg#a3!{Ms#T)c+347rcl*B%SFKU z775>9Ff%m=V$6m$tx-2^{ikkp>3(NFs(?V^=77L#u@P)Okfve&`U^2 z+&i6E`J)0`_p3x{Sp@}RpXEAH>uHDTBNps%8?T6_<>u5@GdQOJ+WX&GXlQO9F$Pn& zp8j3UTRpE?0ayR4bWtFkA(rb=A&R}3xf=#Z%hlA?^E5ZrXy{XXwm$7k)jz6k z&J5t!uijxld>~pQYkZJMITIuF+S&{Vp@q^Rp6nl+_-E^RDaGm~N z{!aOXC=TJUEy*q9u?INtWo9bZGQ{_ReF@wIK|tMGfW1*kv3;U!K;k>f#46{ul&MGb zyf#Ai4z8~ksqKj3u=RF#Mbg`>hGR8bz?YKRvr2?IU|`k87j;b0?IlhY!A>T*D`Yx1 zJ4QG89%mzXo}`fAsSqi4t+D9iIy>L65=4Qdl?L=%@)!%gBwrhX`kOmM`V!nBv{nM8 zZDsSJq);+~W0E?!aQPd+q41A{_@$)ky4B_%*^XzX@u|3<=A`JXv%3i4c&p8?I; z8YK;8$(k9AZ0!SmN!PE)=CW9!5nsT0oA)rn^y;p4Q&jxjR6~Q>&h94+^Chc`61cgt zSgs)}1`Qg^A`AsVGZp6fi-NQ3fSqFH3qh^cf(BgE{nAreYu)>^&Ufv0Q8h z5)u*!Ii(*|TTaS&s2i|X0mgWi%%`PJ!`nbw!n+@Jzx2RY^(!1%tkhCmP>WSV{T}-L zcx`N&LvOxR2yuHnw%Nm(u_Bscu<6Z6o8_mmr|3SVaN9+_G#A^Kj}LFbFUoGa9AD6S z@gIu2cKVgpC`e5-{J42c>5`&>n5Q=WT{@N5Uy&l*e&7n#?^Kf!pdte9i=L^3%fs0( z>1hNrF4wF%{V~H+^#Z^|W_(1*b7QznKj5(Ow?+idVY6yloYwc43%Gw$xXJ_OO+BeJ z8+cQ>o!jTg^S}|xy1u;i1QM%BoSp002!a5X1-5AjX7O)(MY)>c90jtI4i|)Js4M^p zQnO)-J=&$EbDKQg`=1O&5lMM@Q!3W-MjN!Z2rC`L6ckWFfx@RR1xCv&yOJg)}w5-e@4g! z!o8rxlTndSNwgpig5p{(KSDY1`v4B5VjVh5N=7E%6vd(ga+YJ~WydqUs$S(p38>JS zbg#ORl2cNFuoaqV8wyi;O_>1l|K1t)4}30uM+Ro8T9s_qv&&S&UUdcPfBr^-S;Evq z`uPFv&#gfum3HH7zUOu+t;M?xjpz zT9xfY{Ct9(NJ#L8{rY#_c_w`@9h*bLt^nlaG6Atf;Q2>_gA*)J%EdX-bQ#sqP=AUD z{>8kv>u=xVbV0Q=pjmPz9Pmaj3Ch`*K#AVq-y!-cxN@NNQ-M-neg$YVYbJlrRGjjw zLbUoPxn|>K23!LU*48os2~;lhsivL3<(oY3-vc$_^hYlo4*gq{ns5K#D-!;En>=G< zD#v#|5AR@NcUwajk;DAluK%Tpt|sx>;s8Qz75bV5hgXU3!GpOl!%#mL_%*e(Xj>@4 zA$oriecRh8wOW{s7Z!l3V9d<3?Mc8`3m*{Ts|`m?G4hdhDlXvEBP=fFUxt+eGpT8= zp_wdMncvK`S^tJ|I~U`GpF)Y~idr6?(TR*b0fDw?_*tfeqMSeCu3xeg4!FjQwtv}E zq6-WSw!K6SJ11a_!BOm9+tdkfayv7Bu|1t^T1#9Bf&p_h;K@97Pp`EpL6ebr*X`7+5;tT7qgFdY z%ctZP-q!N?T_Fx5x4WNmB5&`qO-+QZ```9lAO<43Q-Sa?#;wBA`yH3W-ZimuNVkbI zZBl!$wx;=5GXq;P^kyYG8|)jv<6pnPyY-fI*)oY6LKIt6XU56=Ke6ze)?N1gg#q(qS#HirWz zi9ZtEkpFxABCKf%Xn=5%>2ZlGxhR<&)ou@Q!(%{nx`VlYi&~-h)g5xW$>MI#KmvD~ z(A!H!$RTPWr|R%&eaj>$1Lv~8X9U4BCc}@>IHhwSNiu=e3E63px?=B&j@5QnWiS$c z_ne#DA8S;e)Hr`uRs)bDdefD!Y57jD;_8`I`vjPIL%fRO9X2NHUp{(;G4mtydBHkh z(F%v=mgJwv-&__nbK4#5lCkRyB}slpArFDk>rVBlDh|1T>P#o(i$62WXJVIUmlsko_V!?<6j>&2uW>~f^h0qc z#xPx=uKQA?%FXc%SN_8Xwb{)~_q9#e>Z7=*iJk#h7+alYy_ItBg+}*4unSt%DjQWb zWM^eEo>^rB-(~=-DSgye<3g-5?tXl5gn|yr9#g50$w`S1UlClrG2u>_v@}>=HcBG( zDmTPwY)LA0eIUF*=2Nuv{iyvVH(O57DrOF?uPvNT3|R`3R!1oLQX8Aa;Jphd5!?7J zzpq~Zi`$x85pd&O0wboIAf&T2g?DIW(6SyZv0(f~yAZK?eGmEWNaFk1@H78sWJQQv zz!+n!?v-1g_W@-Gg4D552?_5$7cg(YA;E2?o67aXw|=heo@`e2LEc{uz54cXpKtw2 zC^j{g27SV@NJs|C4Z{oW4H7Ywa-#!>Rn!>H7;3Rm$)Oo6y37@EzjP5RNAz$Toi)JA zziRgUf~?45Q8$(K)MN~JZcA=n@Jxq-$vVc04St^aFhzGPT&NuwXYOcg&R1i5jU4x8 z!{?lE84b*IHQ4R*)Pvap3;d%OWhCkgeSDSP3GRZWk{;L`pYI5;wgbh34ybNvV062G zXE9yC;0?Y1IaRC`60NDdiWJJq>?3XTibTWp7<{#b95!E?FBeB9rztr95Vk%vs_|O9 ze|+N2IrtZe8+i2Nl`${|;fu$bJtiy@wvt5mONi%9l#&l@kNX91l#XRUguWgvOfh<@R5y=6P#0M@VX)HHdy=Gyj0`%%nsV^wCObA+B&uS zoPQph8?pI3VJ3@WjLxqMs*kPWHz39;U%J~637EnX$H^74O$gwz=+agoVqu8`e_=h; zI9<36$)yzyV+2*^n;|rYVn`+twe-roxE7@T<99A=Pxm;@Sc5C4J|3jb_!>frh=6DGSYXi|eINAP29`KDN!c4+4%SB;k0Cf5BT|iHAAdvILf0gBL6< z&#SMwv;!*eEVR@VmHRxvH<1sUj4u=bX@+O*K1qO#ER02sRe#K(HJ6W(0Kr3dbVA0! zvFq^RlF4kHel-p!zNW|9TsJQdpNr#HWKi3uL7=;ejxHn5#m1wcFrX_bws)lUtq6nz z4-plQnE(~` z=Vt`=fFM*?zB`*JPxhl>djm!ar*{G*;L;wHnL3`IQynNoD=2F}tKk4OP)HZI{mbr9 zySd|_b?9t5Jpj)0gm;52z}L@gxq^pIvj$5-`@aXMB@sXfb2aX`4dnNy>)fC?fa>8F zI=podCe2^)^q5U$g^C)`0412$Et3B3I@3h)!S_^c{?Lv{9B%H0IwhC(oCZ9YzH8UV zM^MSapbKWO^3oG_f~AHy*giM}q}%+;bOPeq)eG!*RiLA)o%8({P z{M}d9c$?bgx^!(&UBt>_nM}r$rebdmQ6x@>LX_KFJGO zp~tHr6R9R@tV3+#=pbFM?nox1G7VE;jip~HxSc+Iseq_n#|RVut;yvnWm|+h_8A-^ zNan2bLGf8`>bhyaBor9qP&g;$}$SzOs zSNL@J-Fl+uIouwP`6URI$pFip8zv@%%W?MGAg56MG3|eQ$ctZK59uFSLIU$8yfmxi zKwQg8tIsm0FJ@~lwv`nF7Y4Rj%t3FN9@M4|)}{t{Hz+SU`1vv$(|paf@{8Ge344EY zcVxNHa*O4iJoO$8??+rMG8kc_iuCjyc+e#wYogaDB4R(!R!@Xv@ACM3D&?vZ5R^{ zRQ-tQCn3qKB<)+y+Y>(qK~$`J$LHDu-rrr6e#KcYMN4L+9m)IO5iXPm$v`|Qk5mHE z(pY{42bwG=8H2rMF8ATwPPFvdu6T=}$Vn0_0*NAvP1=>=RnYSF)?aO~<%RkDeN`65 zDrv3#n|d(g?QbPF;9nni!IKZx~sbHhQKmVtkelHwzT)245t%KjG4rO0 z$ZFC$m>dYk#*Z?oneAnikUdU4_&|)?Iadvd3r4I}Y6o!$aKD8GlA#u0J}=0lC>V^Q zg3}t?u+-+)pZ8f{fCy1#&;@YYdno;Etqfu7ojY1jr{UZBXUPPl+UcT4KN^ish{W;Y zBC>aVdwVB3BZPvTJPC}o`Nxca@DF-4F|#`{YnVp+)nkQ83@^( zZtFEq2V22Qe?ln4q zkp{rHvQ2TnqYHZeG}kDXZj&yM094Uu-Cgci6w%cBSF1rorfGpXm)mCCiV#soIXEjLGft-lw`vZ^;Y;UsR12q$9&a+^*9Sj6@N-GLU#KtrVbylx~VoE*(Iawsl z*yAz+3S4gUm6-*rw|s8=jci|05Zws$D`2-QTXV+Rh`}Hq^nEG& zIFS_>47Q283|CbnqobYRr=&>6NnA9Mr?3nCpB8|bKW%F`{bc<_=p)DizIgC>hYUw9 zkt0YJsb`=cm?$GVPz*7!iAD=fsZCffzu$4@e4@-EX@i4z9ZXhbcz1HOrTxd!_g*(L zCgR&GjD|UGkW2q{B=ggxrANf_(hCw2Lzw`&cdfrmwfXEJkT-w+5|x?!xRJfP^zxAy z(2Z1*5-pg@uCSx*_se;Jd)UHMep@QIEXZdZ?d0f)!{!Vhnp|zPt;b+7O(_SOuAUo` z;6*N>YGxC^$(})vUaJlMRda~-AukShnU-H4tJQ+%DefBFpBy*yb}v zrbkL%f!bn0pSXvCpXmF#ww&@Vd&b4Ll?1RF2mv+V`3hz7h4yqy@oeFUNFwB_$JtL@XfC_cZ~6;z$Lf41WRb#}6N5zdczJlaTxhc}D@>*q$D7 zbokfq?(Sxmdl|NRpOF!yXlaW(!oa!nyyg)kb@6lD(cB=qUQtF|XI@=3kS|aIs_y;M z&F+bT6id~|F_1~E_vc?^$_Y>6&ZC0>4=47hRtN!mLG;fcQe_7?Zazapu;9|uvk1#fKLR|j~ms`4i&YT zL-0K|zB%0>*KJuyLSAbW5f!yRU3ZfSI8m&k+mlVD3gF@^qY>+#Y&YJ1GjPUJVBJF8 zDOvv1gHvmz(f-@MeHQovS+?l^))yAdZQkRj;~>;|A22sJ)aVbt&|Sw_SmXj?wL%rz zE>MAj&FK0&DI2{-OiN*P8s)a5F@pmJJ5N!hV_=MW!`|+j01Q|0cr7ebmE;l=)-5~Z zao<)Fc5Hff~dWMoFS-_lasrT!Wf+vwbhDA<+>;wKWcaGL+ zK*x5TFYH6>qrbq4QavsZAA)HoG-_xvFf?qnZS)80o%HLB=Q~<=dZ3wMkJrtd!xbH* ze;Vw}5LNFAgtRA5mFrKTuNoMb%}(=7)|(>l>!0L*L8n$sTWKwkg@m&3=%~1(z5nwN z9yQxGER`dxbIICaLITup>Mg6JUENVJ@57bi?(bywu-R`xzCnt3*d=B$RKS4aeXm&~trSPp4ojCM>c9EN46~!WV zbrYH7o&>mYR@~w6&(yI7#@0V#Ymkill<)WLj|7EW?=F%4{^#=gEw zr-#~@Lfmrrf?E!;uHWI>bA{R*9-!~gURT* zgMN1i8!WYAqJ5NA66R!z{2)&Ho793#JVN}>=jHc`EG$-_A)=x@L-?9LZY{ z^50{$Dwh2zzdf2_IFa2NjzTVNYqAK&(aEVNngWYX!*!%gmqJ?lu`zJ0_34%Ooizc> z-BnpvTU$zn;g;Rb7!pvu*g2I9EYus8L!nY!TM$00y9>PGERnqzoL=s4b91{wu$g{9 zwn{UU$p5V>e6NReuWlziC9hd8Ed*;fBE$aMYYg3;e7eJFvY2FVa3Os0=Xga&I{oox zQOd@~n#+Dwt8Y3O%U17X6{)UKb*(2738!`Dr9b;k0iU^m>E_kHVF?-g!`2Y39LoZ0 ze$Xfaq+aH>;NUAYw@1Uw;^3wgt#TiB)KpN4PA}7BzCkR+aro#!nx& z8>-<+|Nh^68SL+t(&e+3b$DwF){EajB^zR~81Vy7B}cOB5tLxeV-982ntC*ZruxS1 z_akt(u%~_U96DG$b3OZq>O@W`Txu9`aMu0vO@?M)==HW83>b`_&p zDIfqizf!hub#!&T$Gi;tb!-RpS-*mUNWT<3?~OV-gqMKOUivF4I);RmG%Wy9GcDO+etde8fL8Hr6)M^Nzre-Mzs*VQ&v?s(*f$ku_q* z0gLS(V+XK;W@Ki^EV6#R^48(*61GsuT-4Ros1I^-B5AYOFkGT}HCwaCm?vv3Cy}tb z^8lq>zrQIONQNfO%se?i?$5iV6sg+UKim@0(hjt6LLbGNA8i)u`e!O2?+}8;-3~{H zbW3$x+nYTo7}?qHb6x!iqqVwWruFgaD{WZ4A>4|!?WFJxF7kURDpTymI!`=zSBD1Y z$1m!*;|>1D1m#V+32dt6zXNM$LjV9Iq|AQOd;Tjdf<1-R(P+=KRiAA5&4%7-L;6?%buBto(#e|3~` zktJMA^(ZL$Xw!+u&kh&TqRBot6vR6GK|urz)T(A72HrtXN%9w(~Z)Z)SG7Nn2glls7uGzRH5B~eoXPEtufDAMcgdJrW4rC_3vE>XDMj%D~eOmp{{NET1 z;NDXzfRH=Py$}35Sf?m3M{P^`21%Z03pM^cBmtLeyRpGa#Y)OTA0G3R=VkE)oFl$_ zH9E8%QHyqwCn4`VMTLdY16D>&J;w)48vHmZlL0mGO_KuZ=wKdeWph(nP>>jpeczzx zJ)zA~Q}^jcG7dlQ&1QAnl+VVB>7d4!JlR1U#tfElLV<2DU%Yr>>vlo?4TmL;+2eAX zVTdmJ0cvKnKf}dp_OB~n-plpz9^+shg_x4^mCqB0)zbajW)J97u4`4_;bQ-6;}tdm zH{zS9yLWQw{P=!?3w8G@V659{knZm3N~789M*Vmk!c0I;9GMS&{pE+~pk0AZG)UTI zDz{Zd-e2sjR&R}DiFdz!@-B3090J9!i7n0CmEcB($DqHRgsj8A2FutC{Y49_<;pbR zXetG)2U17Rd4I6`n4w{O_%q3P`RC)IPJ{UJ&Y6IRm1voeXqlzx z@-!eqW}8-3?r}tG{G8jR7y$MMeX90< zYecPULKuv~6GlD{(VY{k?q~oxnmP$nhp2xy&6HO3@O_Wk24rvQuI z>Hi|Z+bGibAF#xiBKKBSk}8v@<{NpYrZCrg^y3O?PrG^EoNe?E24Rc?pD#MirZ^Bh z4<=JA_bk<)ji^R960&e`7(d){fo&^17X6=pe;2XYEXZNv8J1to`6xE2clPwa2(>>+ z66|i9MU#kaMq>+V0BvNpwb78D@sD3f9#R|p!3vVxg~5>(Z~$>-ng>rI60G|HNtS;Y zw%nFY^SDys*S7$GxdQoq>Kxn3@d*MBHHvnjBUi)ac0W)^7wBZOPqCYOguy3WtUeNK z4xj$DoNHojRu%v$w*N+35HvSsOf80y!JHSA|LYyHm72tm=WAETGmX9q>t->g91l$p zzx5@%w0V?;bv*c6WlpCvtUr7ws zUL9nI_ZiB8yC%`y=O7?NUoa0d#C-mz3E!QeO?0%+;iAb_rQdq3%b#N&Oou76xgelN z2Ix+_Q{$s9@Bcq@NRIlmwXtN6mItesQjg81{Q&3yC=HmJQh@^ovUU2pAv`&Vnkolas)n+InZ&P zZ7~QDVe~@Nl@)xWsu0|X$0zd~%5JF0`l~dp#9?6EbEiNj@T<=+#WAu-tNsV#jxAAv zp+;N7!Fs(xw8P&sX5ryiuqEBSXZUmVDqz&(z>YGmc;T1nICrs5#jjGnTOdz+9$`ts z!fv>H9;xN!M`I}E1IT3-3KVi^CktcqtmnIQd7%<$S4zD)C@9l0-NWgv#Js$yB-tSs z-j-t>1Uq6JiTyEDX{Vf|q_k427~WcLMXVy-9jLA91YC_7Z-*Y@iDCP>b&yIXZDPGbAu`qS)>b_Q7B+1>^yfCSTt<9m-2K=VdQe=Q}fBKVC82fo6eb!iyS!|r9@1ZU~ud9p{&cRRKo{W_i7{no1f zk#kUuARs&&SRKvNhI^cP2Al?a?wG5pv--Dt9dY;)fr&(&&5boUJXOvqq$To0^A#UfQ_LSGpmUx5SXk_D9Y8F5_$0QJ@ACf+O*X_IY?U(u;EG>{ew6n4o2>5 zN53Zs)0+O)am`shaeb%we>aAa0Zz%WdaheAEcK}-4%%(+koJ~EshPRC{pA2vXvZbj z!yDx8dJQCZCtE2q@$%gE=j^7X{&WEps11SfLfs2aE)3b(z~q>ij-B!Nd`&0`9><~V zm6kboqc@mg6h2BZ%M%~3JvQzJT`9uB1?mcj_o!foZP?>AM*pLjK1p5j|2dOymD~u* zdG~odlR$4>rSl}Jg$hkOPAi&4Y89w}7)Yo}$O+yocN(87ONUXiFAXyV6?3>#>E$k& z7NK%IOa502IksE$sQeGFa2sb z!M@a77rtB^28L~u`2}E5JU_<$b~KAOgGKqvw5s8JcPS3W=fbP3+G;WlaDmvHi^+y! z$VS^KaM7kjlTpm}_jWa%WS;4~?(XZ8(_++>W>4|OXX`mSnB<04?oH=vyW3x9X5P^u zU6^3B=&sLWT@UVr$edVk*5K#v*ungIcmEc)pBIKQnPeBCmhg%2wvLIA92yQt-xW3p0sSAqXl+OOLsTY4I*6+(p}QsCEeZK-Q5jmaCZ?)X{-5JZVogA zC2G#%M^WtTk?NNMUfqhzAxy)aQ@K$KrHTBPfgL#ygBwl|@^LmXvRP^Zv(+Z;eHc&f zT+CO_t)Rd4W{453249_nj%DhAc))PGFO3I+WV&X!0r+&BBe9W-^zkN8< zzZ^8{YtU``ZaAVH`S?~pe#&NMGYj~3>@QV|L65j4fvGScH76XZs~~?|F5dY8qSjsc z_SU&SnF}j`zcpQGC`YZ9JS&TYmcizaM#G@DpU|J|?7l=c-BGS40LT`oUU75;PIR`V zqdq=b{#;kDTU=c5@OR|m!qzf1g(i;C2fZ)658TA^)e<6|-L418dsGyZMs|+?6rbU# zDd=!9S;d0s*enSbgOfTmZUYO=a1*|%lhae}q5|B^u#aHh@&u0=eaVKUJ7FqWVSsCU zI_vFYv8MhGr*&=O2h%E@YYQc!R*HwVV;1z_cercK`i5I)wL~ z`3A2+kxCO@|4W5DLsoQl(_k{O<2tEHWacyqTt~;aMMd~QPe}~&XBt875Vd#&Qi1+D z7UK3Ut!wUDY<%3y#w`mR>)P#FutxD*@!iLRIoLHJ-=3?mJjI_SZmFw_+mLvx?Ph!) zHDh2ypH${}0}~t~u|1hfa&q#g;@KTL%XVipoJfdyIMoxInK>G$Nua^8U0&MT?o9^n zO(CxAt5Gl5h{aHMo~$KU*;9i7C$)jW=L++=k33BWfR1#Jbb^JoYje7ezB`fc+1Q8& zZiQz&sy}XtTyv3pqo%t%r+CoZz@Rlt;*4C079Y+BkmGIgT#RI&v~(RDs*7~CuuP|B7t~E192|-k z7I3G%33F`UpWU^oU+oR?3czkSJ&;@_yBuyo*!$yz}45dg^5Ki1`*s@b04$$Z!Sp6N) zF2T4$_rEGcN$}7&*UQQ~M%ukinCbzKhTfj?l#JHn1NHpd_bZwk+= z=FuGqD;8>coWfcJH*qx4!r=K2yl)7+k$NIl!BP2oGwx61Bf>|U-!3}wqu5v8{N5?wSa9#<9>9C9PsST|MUmOo1ZPw4MCCMJWs${$Fu%XPC~{Df#k??S})J$o(f zlM_FZcQDX^61@!c`}Vn94XbY(Ma2}ZS=S?I%KM2@w^Pi*|B_GI$pWAo%Q zXqh@@`sF7l9(*`it2|K|IKr||wCX8H8{&9f5ek;)%UZ@&9Wl`0?9a))R1Z(pbwRmJ7*?@Fo&XyLM#kr%^UBScp z*VBz8#*zc?et$N1HW*SJ?7YZVV)V!=T?1!+%?rc#E13_KP$q+1ImN8ueoquPE!A@n;aWB_OYzx&A&(YD> zD=JAco(>Ny>B+`nS)@OQrKgOpQe}TsY{Jb{w5IUY5hyZteEy zmN6GQhSrL9gz$NwZXStcOD>cupnu^mq89F{2&U zr4B<7%R?5M$$d)I+Bk-6$XM>e5wK5nt1$NwoyeI=C3kbSUB5Z|X~|uEeG*Al!ZNa& zA-(Kz_n9w#isbkZH&V7%?2=O6L^duVqOH>xr>ZI#`vPOm0Y7u+sBpxnvJ*mzGLlbP z&B|IuM_%?JT`Qq!5fUg7sByR0a+|VhVaEUF#ELFJlcYc0H_L9hJyLl$2DY8cx~Mo8L+m@aJ0Zb2<9TZ5oYH?+Cw{tu$Xu5Ihqs)kmJem4W@K$?_ z8O^o|h?cnbX-Fn<3a0;^c!P*|r^WH*3$C0YB5zJ_h^ZX(a zYgZ*J_gvix7g;9x9(A~NLe7#wJe2Bp5dfdp?&odJcpiAvuJ@#rl;`=keQ{rCOqusr zHwR1^ixiWFhkqkh^=X#80VarA?ZfWCsOUtM`Wx}LC-fI`@o_6=P>QM?_SDIJZDU=f z6DA`R8>V`)AJCSigpU(m#;T+>tE9I~%qNPo9xtDF!C zyt*m1^kz}9F%`YgfOL+JPKR;tU5s&%O{h>NaYFguX4jaSJPgIx#b>A|qCbZS(yB|C z<;H5c**yIpX)@XX$Hx(7lgjwN7YSuLJ1=!~bv?BH7Dq5BY8cQcwZwlHyEbhV*6l+6 z_nJgk*%FPS7xx9kCB21r)!An~k|9HLoHFhnk(=5cu7!Qx%Kot^{+#fqV`FI!X;d%O z%x3L>`XRdIsFuH^@#3l9{ISJzC!H!SGh1PFJVID}>sz>X9rtXp-dYhyE72_3Ui; z&|-2w2$F;Z-Smk+w}$Eyk<>*wPjSx5#E3G*&@((`)FyK9z2}-ildYZ8VJPbp>Db$9 zqiOODH&#FrgJlTqgjt8aQjZfY`QG8x!G{M@Ozly(EXBWx;#Z3w+kIIGV=L- zxw($IuW&2l>{Hg)35uv`<4W*bMkr?!H6`H=6{~4&w1)vJf_O9o10~Z6BfW=3%hT4S z7$ACUtuv(n6$uB#Kfw(g-aDW8PJ!KedRmrS4t=)zsP~r2#ds{>|g2b7E7 zB!8N`Y}S*Cc)@-!E_ur@e6<#C2}m`MkPnRZAD0MCd~A~cNiJqREau>F4&$JtzkE>R zc|2(?tn(uUUeww%;Z8ghvn-~g`-ry)A0?j_)&I9%Kq3r~H5MnEbVAS`!nZLVFw*V1 zA;wnaxJAV3IbmQSQ_muNaJI`5Kbbe1D|_M9@_X5RG(%!2%N!Q8PZ=s5I`g$|XAR5{ z$RJoPPdQL!DRb^vZLfQCA{Wo8RhdCfXE{DzO_QoJ2Zx1# zd!0ZUiVy5d0#bEjG~VH``@V2{(rcOD0k<)TNPps93Vp28NA7Udy3G{_by)=XV#S&xmuSJw=0?XdCnY-+E=6yeD`9Bp3x2CrCitt zXNMIaN*Unvc9m4$@X6wZNWT0ZIny8XOaxK2Y%{W18E$?>>wU>VIOOWx+NNR#rnox= z1wX23NqyolFF&h*s_e2ztv{zqB5t;hL7SkM$7#`j7-_ZXN2Ifk^W!-kqJ_rR$$~2W ze6cjyFjO*H~S}(%vA-8B@soqsw1hAA3%u_ z=F1RSPdE~j%+-VVYU(3hEAAB z#L^j(8+V1K+T3k&x-RowX+SR>DpEv&<&VffefZHLJ5+^&8DG)Kd$fS%YL$!YLWPE> z>Wj9gDzMDd*0-#MgM-^+R(NNWGASvkCLZ(RXW}3^+4}KGt_gmf3-923tg2FY-y)ve zSZFBPeAODQ!RF>P2kRe(8^@8Jj){<2J8U=GCZwg+$|Lp5&>SxxuP>Q*1^l|&=KI2$ zB-bt93)Dx`nCU#~sCF;l&1CfnsV^n06!i&-{ShO* ztj>SyRkJy}SE|??@l1Ilm7*Opb%tG}p>kwswnt3A!5E0nX_f4+ow0sg#Q0x9vpy$2HCmQ_S$<+&Zix_S%5JxnlAb}m1jRhc8rLAHz~1Ru$N3` z6MGIN0Z9jz-Cu4F9D&8y+7Dq)v3_?s~(?vx9@i(9a z;EPsNkK4_ynR_#(c0`L4eW#SoPX~>_Nti*e-SIJ=HvHkv{=vTweB=wxI;&p~M7vrC zVR5nzG3j*W^!6FW2DI&GtBV3SqZ`hKF1Et7pA{~*pW>pGGas%aH~(`H-S>h<6QzB2 z0UizR7vcMPw!16Cxu=mTRBi3F0+rJ1I>S3WICP56Xk5QH&d9~X&t>PwXSG664b8tkcJLTc(mudc{^X`h8V zDP$}x-We1pu;6$+=hjqhBnEspc833wgU!5qnHcb~J(FWLF08Cs1k|;?(toeu7_*`~ zA?FerJPmx}(_%OcaPLHyvu-RSKbDQN5!gO&@sQg8zH9`m2}W=lpu4qPB%O!ruKKIq`efL<6oMAAZFHvB!=s1=N8C8+Wmm6wys zb0nxrM51;Ms=5^|-D6^RafXGO;t0eu!&Zy_T~Pm^0F?gD0eH}|>~?GY;q&5|Yvjwu zdj-R7c$QVk^J(EqTR&6xakUcYA|`1p%#Ky+inX@#hTw|*OBdcYo2?mC6Ti!YZc#p9 z>Fu)y5Xx;9h$q$huNhi^#b_qM(2v58i92zu7OX&!>JAfdlmc&prbg?4W*p-7w_=Nf zfRKQ1=_9n3BPM8MMiT{#Qg23qoQZO!5=@uA$EtRGX_?YO;HD8t zaWQ9(+~N-G@v@1zF9*8SGX+f}UH_Z@=88{xH1Cl>eO5yI9o3Q+>Bqyg;apwK-xJk= zzW`JR&XL#nzmM;L1m*cIhj+&p<}!~Xi{6;tAz*JG{NG=UKiL;rCU0C#jk|wZ2IV`2 z1EOzeeEUw2gVB7!hqFy_B9Ef;clh(LJWJV@bL4112I8=1^#k_IUnks&FEPt2(D?iN zxJo5@xX(EdUF7Qw+f23he?0jYd)~C{&%sx2-{((pO43MRHP6<_^{vZxe>CWh+hL~Ee9S@e z>LKcjrjMJ@;L2fGJXVw#ty?cEFxW2DeSV!>!HxiWJTdhTf-E1mZ_abngcBwigs1Vs>k5g=gNq0Cb{`pndD>XcMc9pKQ-?-| zCc3J-7(D+ySAYHg3qIy33>Y_@#}$~DmN-(wbUO@=GGlez>An|tBw1@V_L4olm2*1_ z9v@LV5wZn0Q05!$+NMjNPeohr@O9pDcsiOP#wFnUO-@@i!i$N0nYG*QoDt)uR4PN@ z;nB?dP9X^{7NA+rR$5w`0bnUy5Bzk=htCyv>BxYQpADvW=h%$lXRa{Y0|t=q_s6!J3|-p$p!&__UZw&NCU^3WbY3vB z%<~Ju`zBq^qcH%t)U2gRe}1mO?bJk2q5}@c24< zB$g{b+NkT$8(GMIMO{d)Nr7KDXO{_P6-E^)?$*;BTX4kUY9K+8&LM4954uzyL5fD(Vn6;{oiZ=o|D6w)H1*`JANtS^s##6AVc@?MaB5t1?># z2*x=+<0_)i-c(#Md40ynK8Bj3J_=4341zyFTD=oWcJ7Z$OX#77@{9tEQyn z363HwD=RksvDzS9Fu$X9{$-^~NM_Ur`^hRL6%}n`agZ0lRS^9NpG;g2gT$N}!|sHjxzNhHk7 z?1_mu!eOn*7#N0$iThS|5}pweT*=8684`P*xw#^LQZ$Lx6$bJ2az_I4_d3^PQnAn> z79cAv=nsV@fI-hl{*g5LKuQm=*ob8_C#>9K{sXF?d$;9x2Xl;RqCS7Xnwcm42F0lh zs%6z7r#QgdLvS_U5V*q)StKrZYZeaIW@PGJb$~h}1b3(Iq{%sUykob%8oZdHXv#q^ zKn(Neh7BqGdp3kO;j2a0gy8ZV=DFH3`|*xk>hP1>%n*jdi@&yeZM)yaVwv1f8g3D8 z8VNi;MTrVLQ-GCn*+E~GW>7i$jEDRrNVl>UJ<+%`mg}^B*wt_T`t&W`-F2A;4IRBV zLI~06bRGE$e{l;uNKQmoL2)z66BuYRs7#ckLM{dS%UER2%Dk}#Q6 zVaz3*FzF>8HyTDH^jS7r(npp&U-v$cUh$~=A$_m5#^jX%#}Ko9B7P@T6bG~)Bu%yW zh1qOL{EbaksaX$a*;cm%xI(}}5jqeJ`QzAAR^#G0TI0?H7OaD9;BFoOkdv}%qxISl z{i2OZ$_cJI#djA2uM`XPF(q4}B5{S+E_Z~QFj^LS?|yPq!$c_r*8RT$Fj<8829&L& zVOYNo6I+mqrH0vA*iEt7?RR>vNBE5AD?U&cHBAafgEF_&WC6k6VyXYPCl{FpEw;ML zdAdOUrP0&PsMG#-iw9iY^B@Q?n=#pSevM=sLxO_VPSRoL>z$J394r72S%UBnVF1fV z+RBpFmWlUukru33l0s>OB&BxNyqTi+)d*24UYUcpN#^Wz#V&+g#H{`pFWfm#-CBK! zVBeg&_3mMKk~zu!zB(6{$O4uv+fi|#V=XBuxi?GU^*`FXJh)5bbn*)l}iygt?uTy+>Gm9C6;Gr5eP*Nr)2+agqcm%7@3g7YKCD5Ac$w#Zsmq0w~B zYd?hhfp7tv?UBm&AU}^6E=5L=LXgnTU)tE%>`oQ6cNX52KJ+eKf!zCrp?$Bm!r&cC z)xam4N`&=-B@Ca{DRwOcA2L9M?D1=g-)lURfkane5(}q}VBd}6k(A{nkvjss#b!SQmFw~kFRxrwg-x~Nt$QcY8qlc0aRXVy6wL0fG zc#J{o$5l37UOwrZan{V!Px`axHJeoY$$uplF}3d)MrUTy%gae6HqDL>7}~qe_IGr_ zkYJ;CiQ^=JDJr)64I{;eXJVM;q3e2Yl9UA_{0VMHXQ$Qf_-n~T)}fQNEjFjqmoz{% zaB6U{GjKnSvuAfh#Fw!s<3jkGN@!$;y_BbdZha_i)@K!Qi3(P>>EB?lQD|=G;)L@A zzI`iwLML*0GM0{@t*%j7 z3$@4K`BMdAfk_=TCAwgc`@F*N*Xdz0Wkq(%K9H+d5e~h)S8lRrgWnojSN_REU6gz5 zb{qTq_tbcvhA$NdLRxthoxL7`w=n(cpH?>J2Cl~#M46fed0C8n&?EDBKW*@3bSu2e zR5=^G9Nr3T*80!nmzf@|vNr1fK0#qH9DS~}E26vRTg zy>@0xNjxfc#6h>Z#8zk(8y7d0e}ojzc;{uM>pNU(&X6UJGjK4+vS^Hfk3R&i_P3#L z3}^d0mh>wogD{5J?9Y+9Aov8!aXdK_U`-&A@Uo8nuH$Aax zYabQ)?5&y!t<=Z$#1L`KFl2u=6-1nuW&cQSzA6n~&MfOrhA0O8z{Wb7>+fWW7ToK* zg?@=m)-e%VmR4JhG_Z)t>ww7uWyEL_h}I)^bJ~$BoyJ;gtxtDrhDf+#&4Sfl)VSef zYw`up#{>-dWZ1HWMf?W2j2Eil>m1B=0RVl??Ix~fMhUvZ4A-5PIIPYuY;2rjzr7(K z{Pn=b*hr4t@)(I(f}S1RqYLAIUGwp!Me-+ywU(m;c#p@A%T22m{A5_=>sRUu|4Ki9 zkLRHyvKT31qzM(KEL%A}8O)X(N4HF!%dgPl9rYA822uu~s|>K0OWX)7O@LoM#s{J?6!e?ev%`_ORS)vxjCqY8_!paLLq@mm34Dhex=P> zg{LemSC0^*5YkR%DIkxfj4ho$AzSFnGGXFqvvn!4Ig~UQ9~I;Tc-zVhHMCB*uE0Kr z3Xu*>VG9jeq^$Rgd1%YUzHP{O=vo}2#!?03I!bgd&i$~A*d!}EQl{U z1bzQ7MP%Cj>yr3S0YrZy5J|zrK4qJe?&XwQMlyPYU?sC+*`()o>6jUgoc{C&R4D*q z_XK2%CL5i#@`{SplQmdi`Q!1!!?hj^@R`Tz16bgr3*71iEqPyG-<6t9DInm@hVtf< z*re&88PA7fkw*-L{5?qs6s zd4Kd({A$Z3!;N050_F0MIRMo!SQzRG%;>P?N)xht5Z!EH@)37?d}5nbm1}T)kr(5^ zz`ONbnDs7HU1ul_exJ=XxvSB$KdCOf)<$u4fB);jY?SeED!V}7I+L~a2_4(+h5lZO zPi>_Qg0hJ%C>e-J_&UXd6Ii`~^z~@EsVdl96q{2B*`CU0pi*_naBo`@**QHi9`Zq2 zjnSd~q1#1CU5po^x)_LN!t%N@pte-*L0U@ksJWBtY;L6X=?mpC9l9i*r3WPBotT1; z<-hbn@W=x?QW}GU@Z>2e%eA;_PG8alC-*%xYPLS&>+Ad1LBpw5HZYeD5hx^m_ot=> z193MPqM5tt9qLdG8bfK&9%nA;DwHaXFHj?-ik+}OUI*KmDq5dUYZu_)^eE@y6n2V# zOP}~`?|Q-`K0wv|y`Hf)Fa~CMr4YMdx+*|M*Dq|Ah$#e%nMf5_ZOT!%7lYNP=z)YQ zT9->W1YCBX7A>genGu+yUV$9N23CPn1HsH&y1k$$3Nu@DM@8yi4jY6}Y7G~^E9W3( z_H#0a^H=(v!9XypG?G%8ez?kO;9taD zt*zn8XVGJM5~N^FxvMXx1-NE~2dw$Zfr-1xlsSJT)?#dYJSImT60a*psf>1F`~#`f z(7|V+g+;xhNrIWe2@3$BtJZQf_EVX_F1Ah5f@xK2|;li0}`zRV?D^+0t zJ|&T<67uHFn9bVpCe5L4bE*soSqA&@yS<%zQ4JW_Qk@yF^{m4)r%*g)16*w4nXf}~ za=NcByE@yCuaXY{yDIq5?e8B4(Qke|<;L8O&&L_vT7>NAte<62S7e)1^^*`-VmePT z?~WICM)s_|dFN`d@5t-w@a-E7CZiFcoB8A_788MMx4m^fGWvaQx#fkh>kyT0XZIx< z&F}AUbpf9eVo2Lum{%^tYSpH>q81NKBSw25ds9clxno*t>hQx^5gOgOn>Ps*=9+{@|K_ZlC zaCVJQck4rSyra~IDI&GGfbw{dw)ARZ#RT_Sxk9IEE&67c@R6!Sk& zSL3>5{?2G@kCHcthO7Y@_ zr(>p#u6WZXCwF=5&03vwmXRd+w!2VmS(g6u|FYG2H{=V-R+_mJ5)#I7IFMk{NB*%` zKmaVy=4rausiX1X4U#m6xN1H5T`VEEq#}LcOt1-6xZuZMU5WFpVdVnbr)XqK-fLY5 zGHJFiMA3U%+O680PL=R0q{Bc2e!^c%^5kZg;GEHrABUxqIpUvYZ~e*MYg zIRt%tb=EO;_4eC0Pw#s7he0}kevFZZ%9N`Zmu>bBoGr&h<}GN`RTPy3ZmaS5fe7*+e3oaY zxLm!YF2Ir8;r{Y`)@QwuKIV0yqd6Mi$4x#&sfK_Zl-K{nB}=&}m ziQ5l{>9el(u8w-S>yV&G$3wUKIW~kVxZ9y2G*LQcPgvV@GZii+1ea^o$8;ILe zQx|HC$--C0)tX-3p^+O;>p~%?5$przLG790aQ+sQ^?JAYz7el$sTZu&XjusR6) z6{IoDk$m#k*7}Ur^e4sdjMd_J8sVYq7_~;{CHj>cgKo|g%iSL&ec$bfc0mTDbGf-) zyszES;7Dq*5e=4pSb~%rXfvtP35m?8b#W{M)DkeF=}A_fyEff*oh;Dk{n_Xtn`K5a zX*S(+W;irmrO)N&V*khC3IUBq#&`AtORiLwNjVR6G|k zfNn*gxq@;nkXLKx*rs?9#V*1A-{u#TE!wLv4(UR{!zU(iwmA9PmG~nx`H=N;RcQBUt*^~m{*sxCo1lo)y<36LA*gwuTxylUA zm%Dwf_SKnW;p#*p{Sr{+d@EOGJ>%pl-|} zjS1x)48U76*XG&aN5b> zZuwDB%0hc5cK3j>zjR~;0NDV;`*(0X@n{Ymilz1g&49KhO@+px2SjSIpbyT*Ep*29fWHghHP;wFaE14t|PdNkT&aSWu%vFp#4BjXqs-u}gu#?5= z+WW%1uA_yj+-MZ?5m8^NwJZ!;mo472HM!)8x7{IMo5Q6kmv3`k?l*V z@fe=2kXV)V#F5akS3W0u!@{(TI~*WmQmXw;#%q8*HOy8h(5(A)k#JS!{2+O_&>#`e zI)lkpzyokl?X{|h#Ks>nK(_G5X*;rs0+mGaelF&8F}9&3ZVYcRQmYYO(tK|f9?3Dl z&rlXHVPi|T9@Ro$Z*qmo}b7E{xsqS$ovL9I+>VN5$lVA$g7znaBuj>(% zbdG^(g($S4z1sqowMyYzRMMf9XPy`sX3^bT(^07}L3O-t;K|7S;)LO@^dc zOpi_N?p`t3G8ZFPhL2!YI4_ zf%je-T=G`7)?XkJreeMOBsuJdpDdideB@9FUv;p;mnqi#o#ogNTIF=$0&5D~P=W$N z0MG~m4^)#NkTg3w2ZBnrq=vir!rNw2x((C@2d_7+m;rK0r zwn0N`irT#9j_@~i#Fp0DvfjS%Dy%FSn!MR)I7*1h@SpEQt|`6pxr95@HC8Madk$ci z{#R$EsFhA1|ESa7j~vn0Fp~=CW{FcNJ$$O^vgFUj4d_hi!TFF2H8grR9d~RUo9GJN z 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 OAk=kl7v8$}$NvEhAAivR diff --git a/xs/xs-vis.gv b/xs/xs-vis.gv index 02e3c8d..c470a0e 100755 --- a/xs/xs-vis.gv +++ b/xs/xs-vis.gv @@ -10,207 +10,207 @@ digraph gocallvis { pad="0.0"; nodesep="0.35"; - node [shape="ellipse" style="filled" fillcolor="honeydew" fontname="Verdana" penwidth="1.0" margin="0.05,0.0"]; + node [shape="box" style="filled,rounded" fillcolor="honeydew" fontname="Verdana" penwidth="1.0" margin="0.05,0.0"]; edge [minlen="2"] subgraph "cluster_focus" { - label="main"; + bgcolor="#e6ecfa"; +label="main"; labelloc="t"; labeljust="c"; fontsize="18"; -bgcolor="#e6ecfa"; - "blitter.com/go/xs/xs.restoreTermState" [ fillcolor="lightblue" label="restoreTermState" penwidth="0.5" tooltip="blitter.com/go/xs/xs.restoreTermState | defined in xs.go:1095\nat xs.go:1096: calling [blitter.com/go/xs.Restore]" ] - "blitter.com/go/xs/xs.main$2" [ fillcolor="lightblue" label="deferCloseChaff" style="dotted,filled" tooltip="blitter.com/go/xs/xs.main$2 | defined in xs.go:974\nat xs.go:977: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:975: calling [blitter.com/go/xs/xs.restoreTermState]" ] - "blitter.com/go/xs/xs.exitWithStatus" [ fillcolor="lightblue" label="exitWithStatus" penwidth="0.5" tooltip="blitter.com/go/xs/xs.exitWithStatus | defined in xs.go:1100" ] - "blitter.com/go/xs/xs.handleTermResizes$1" [ label="handleTermResizes$1" style="dotted,filled" tooltip="blitter.com/go/xs/xs.handleTermResizes$1 | defined in termsize_unix.go:21\nat termsize_unix.go:27: calling [blitter.com/go/xs/xs.GetSize]\nat termsize_unix.go:33: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]" fillcolor="lightblue" ] - "blitter.com/go/xs/xs.GetSize" [ tooltip="blitter.com/go/xs/xs.GetSize | defined in xs.go:221" fillcolor="lightblue" label="GetSize" penwidth="1.5" ] - "blitter.com/go/xs/xs.sendSessionParams" [ fillcolor="lightblue" label="sendSessionParams" penwidth="0.5" tooltip="blitter.com/go/xs/xs.sendSessionParams | defined in xs.go:649\nat xs.go:651: calling [(blitter.com/go/xs.Session).Who]\nat xs.go:659: calling [(blitter.com/go/xs.Session).Who]\nat xs.go:651: calling [(blitter.com/go/xs.Session).AuthCookie]\nat xs.go:675: calling [(blitter.com/go/xs.Session).AuthCookie]\nat xs.go:651: calling [(blitter.com/go/xs.Session).ConnHost]\nat xs.go:663: calling [(blitter.com/go/xs.Session).ConnHost]\nat xs.go:651: calling [(blitter.com/go/xs.Session).Op]\nat xs.go:655: calling [(blitter.com/go/xs.Session).Op]\nat xs.go:675: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:671: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:667: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:663: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:659: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:655: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:651: calling [(blitter.com/go/xs.Session).Cmd]\nat xs.go:671: calling [(blitter.com/go/xs.Session).Cmd]\nat xs.go:651: calling [(blitter.com/go/xs.Session).TermType]\nat xs.go:667: calling [(blitter.com/go/xs.Session).TermType]" ] - "blitter.com/go/xs/xs.main$3" [ label="main$3" style="dotted,filled" tooltip="blitter.com/go/xs/xs.main$3 | defined in xs.go:1043\nat xs.go:1046: calling [math/rand.Intn]\nat xs.go:1050: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]" fillcolor="lightblue" ] - "blitter.com/go/xs/xs.handleTermResizes" [ fillcolor="lightblue" label="handleTermResizes" penwidth="0.5" tooltip="blitter.com/go/xs/xs.handleTermResizes | defined in termsize_unix.go:16\nat termsize_unix.go:21: calling [blitter.com/go/xs/xs.handleTermResizes$1]" ] - "blitter.com/go/xs/xs.main" [ penwidth="0.5" tooltip="blitter.com/go/xs/xs.main | defined in xs.go:680\nat xs.go:769: calling [blitter.com/go/xs/xs.main$1]\nat xs.go:782: calling [blitter.com/go/xs/xs.localUserName]\nat xs.go:1024: calling [blitter.com/go/xs/xs.rejectUserMsg]\nat xs.go:843: calling [blitter.com/go/xs/logger.New]\nat xs.go:938: calling [blitter.com/go/xs/xsnet.Dial]\nat xs.go:1003: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:1021: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:1025: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:1064: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:1005: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:1067: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:1069: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:1079: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:1053: calling [blitter.com/go/xs/xs.main$3]\nat xs.go:831: calling [blitter.com/go/xs/xs.usageShell]\nat xs.go:956: calling [blitter.com/go/xs.MakeRaw]\nat xs.go:1017: calling [(blitter.com/go/xs/xsnet.Conn).Read]\nat xs.go:1059: calling [blitter.com/go/xs/xs.launchTuns]\nat xs.go:1063: calling [blitter.com/go/xs/xs.doCopyMode]\nat xs.go:950: calling [(*blitter.com/go/xs/xsnet.Conn).Close]\nat xs.go:775: calling [blitter.com/go/xs/xs.parseNonSwitchArgs]\nat xs.go:962: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:1032: calling [(*blitter.com/go/xs/xsnet.Conn).EnableChaff]\nat xs.go:1002: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:1068: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:1074: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:831: calling [blitter.com/go/xs/xs.usageCp]\nat xs.go:955: calling [github.com/mattn/go-isatty.IsTerminal]\nat xs.go:1000: calling [blitter.com/go/xs/xs.sendSessionParams]\nat xs.go:751: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:832: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:941: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:1005: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:1079: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:844: calling [blitter.com/go/xs/xsnet.Init]\nat xs.go:1028: calling [(*blitter.com/go/xs/xsnet.Conn).SetupChaff]\nat xs.go:983: calling [blitter.com/go/xs.ReadPassword]\nat xs.go:999: calling [blitter.com/go/xs.NewSession]\nat xs.go:1033: calling [(*blitter.com/go/xs/xsnet.Conn).DisableChaff]\nat xs.go:1034: calling [(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff]\nat xs.go:1060: calling [blitter.com/go/xs/xs.doShellMode]" fillcolor="lightblue" label="main" ] - "blitter.com/go/xs/xs.parseNonSwitchArgs" [ tooltip="blitter.com/go/xs/xs.parseNonSwitchArgs | defined in xs.go:599" fillcolor="lightblue" label="parseNonSwitchArgs" penwidth="0.5" ] - "blitter.com/go/xs/xs.main$1" [ fillcolor="lightblue" label="deferRestore" style="dotted,filled" tooltip="blitter.com/go/xs/xs.main$1 | defined in xs.go:769" ] - "blitter.com/go/xs/xs.localUserName" [ fillcolor="lightblue" label="localUserName" penwidth="0.5" tooltip="blitter.com/go/xs/xs.localUserName | defined in xs.go:1084" ] - "blitter.com/go/xs/xs.rejectUserMsg" [ fillcolor="lightblue" label="rejectUserMsg" penwidth="0.5" tooltip="blitter.com/go/xs/xs.rejectUserMsg | defined in xs.go:576\nat xs.go:577: calling [blitter.com/go/xs/spinsult.GetSentence]" ] - "blitter.com/go/xs/xs.reqTunnel" [ penwidth="0.5" tooltip="blitter.com/go/xs/xs.reqTunnel | defined in xs.go:584\nat xs.go:594: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]\nat xs.go:593: calling [blitter.com/go/xs/logger.LogDebug]" fillcolor="lightblue" label="reqTunnel" ] - "blitter.com/go/xs/xs.launchTuns" [ penwidth="0.5" tooltip="blitter.com/go/xs/xs.launchTuns | defined in xs.go:634\nat xs.go:645: calling [blitter.com/go/xs/xs.reqTunnel]" fillcolor="lightblue" label="launchTuns" ] - "blitter.com/go/xs/xs.doShellMode$1" [ tooltip="blitter.com/go/xs/xs.doShellMode$1 | defined in xs.go:490\nat xs.go:507: calling [(crypto/tls.alert).Error]\nat xs.go:503: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:518: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:509: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:519: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:507: calling [(compress/flate.InternalError).Error]\nat xs.go:507: calling [(crypto/aes.KeySizeError).Error]\nat xs.go:507: calling [(context.deadlineExceededError).Error]\nat xs.go:507: calling [(crypto/x509.UnhandledCriticalExtension).Error]\nat xs.go:514: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:519: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:507: calling [(crypto/x509.CertificateInvalidError).Error]\nat xs.go:507: calling [(crypto/tls.RecordHeaderError).Error]\nat xs.go:507: calling [(crypto/x509.HostnameError).Error]\nat xs.go:507: calling [(*github.com/pkg/errors.fundamental).Error]\nat xs.go:491: calling [blitter.com/go/xs/xs.doShellMode$1$1]\nat xs.go:507: calling [(*crypto/tls.permamentError).Error]\nat xs.go:507: calling [(crypto/x509.SystemRootsError).Error]\nat xs.go:507: calling [(compress/flate.CorruptInputError).Error]\nat xs.go:513: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:513: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:507: calling [(crypto/x509.UnknownAuthorityError).Error]" fillcolor="lightblue" label="shellRemoteToStdin" style="dotted,filled" ] - "blitter.com/go/xs/xs.doShellMode$1$1" [ fillcolor="lightblue" label="doShellMode$1$1" style="dotted,filled" tooltip="blitter.com/go/xs/xs.doShellMode$1$1 | defined in xs.go:491" ] - "blitter.com/go/xs/xs.doShellMode" [ fillcolor="lightblue" label="doShellMode" penwidth="0.5" tooltip="blitter.com/go/xs/xs.doShellMode | defined in xs.go:483\nat xs.go:527: calling [blitter.com/go/xs/xs.handleTermResizes]\nat xs.go:551: calling [blitter.com/go/xs/xs.doShellMode$2]\nat xs.go:522: calling [blitter.com/go/xs/xs.doShellMode$1]" ] - "blitter.com/go/xs/xs.copyBuffer" [ tooltip="blitter.com/go/xs/xs.copyBuffer | defined in xs.go:128\nat xs.go:186: calling [blitter.com/go/xs/xs.copyBuffer$2]\nat xs.go:186: calling [blitter.com/go/xs/xs.copyBuffer$3]\nat xs.go:193: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:186: calling [blitter.com/go/xs/xs.copyBuffer$1]" fillcolor="lightblue" label="copyBuffer" penwidth="0.5" ] - "blitter.com/go/xs/xs.copyBuffer$1" [ style="dotted,filled" tooltip="blitter.com/go/xs/xs.copyBuffer$1 | defined in xs.go:144" fillcolor="lightblue" label="copyBuffer$1" ] - "blitter.com/go/xs/xs.copyBuffer$2" [ tooltip="blitter.com/go/xs/xs.copyBuffer$2 | defined in xs.go:145" fillcolor="lightblue" label="copyBuffer$2" style="dotted,filled" ] - "blitter.com/go/xs/xs.copyBuffer$3" [ fillcolor="lightblue" label="copyBuffer$3" style="dotted,filled" tooltip="blitter.com/go/xs/xs.copyBuffer$3 | defined in xs.go:146" ] - "blitter.com/go/xs/xs.Copy" [ fillcolor="lightblue" label="Copy" penwidth="1.5" tooltip="blitter.com/go/xs/xs.Copy | defined in xs.go:115\nat xs.go:116: calling [blitter.com/go/xs/xs.copyBuffer]" ] - "blitter.com/go/xs/xs.doShellMode$2$1" [ tooltip="blitter.com/go/xs/xs.doShellMode$2$1 | defined in xs.go:536\nat xs.go:539: calling [blitter.com/go/xs/xs.Copy]" fillcolor="lightblue" label="doShellMode$2$1" style="dotted,filled" ] - "blitter.com/go/xs/xs.doShellMode$2" [ fillcolor="lightblue" label="shellStdinToRemote" style="dotted,filled" tooltip="blitter.com/go/xs/xs.doShellMode$2 | defined in xs.go:534\nat xs.go:546: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:548: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:541: calling [blitter.com/go/xs/xs.doShellMode$2$1]" ] - "blitter.com/go/xs/xs.doCopyMode" [ penwidth="0.5" tooltip="blitter.com/go/xs/xs.doCopyMode | defined in xs.go:354\nat xs.go:417: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]\nat xs.go:356: calling [(blitter.com/go/xs.Session).Cmd]\nat xs.go:441: calling [(blitter.com/go/xs.Session).Cmd]\nat xs.go:430: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xs.go:424: calling [(blitter.com/go/xs/xsnet.Conn).Read]\nat xs.go:364: calling [blitter.com/go/xs/xs.buildCmdLocalToRemote]\nat xs.go:435: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:438: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:473: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:475: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:444: calling [blitter.com/go/xs/xs.buildCmdRemoteToLocal]" fillcolor="lightblue" label="doCopyMode" ] - "blitter.com/go/xs/xs.buildCmdLocalToRemote" [ fillcolor="lightblue" label="buildCmdLocalToRemote" penwidth="0.5" tooltip="blitter.com/go/xs/xs.buildCmdLocalToRemote | defined in xs.go:270\nat xs.go:335: calling [blitter.com/go/xs/xs.getTreeSizeSubCmd]\nat xs.go:283: calling [blitter.com/go/xs.GetTool]\nat xs.go:311: calling [blitter.com/go/xs.GetTool]\nat xs.go:312: calling [blitter.com/go/xs.GetTool]" ] + "blitter.com/go/xs/xs.restoreTermState" [ fillcolor="lightblue" label="restoreTermState" penwidth="0.5" tooltip="blitter.com/go/xs/xs.restoreTermState | defined in xs.go:1117\nat xs.go:1118: calling [blitter.com/go/xs.Restore]" ] + "blitter.com/go/xs/xs.main$2" [ fillcolor="lightblue" label="deferCloseChaff" style="dotted,filled" tooltip="blitter.com/go/xs/xs.main$2 | defined in xs.go:996\nat xs.go:999: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:997: calling [blitter.com/go/xs/xs.restoreTermState]" ] + "blitter.com/go/xs/xs.exitWithStatus" [ penwidth="0.5" tooltip="blitter.com/go/xs/xs.exitWithStatus | defined in xs.go:1122" fillcolor="lightblue" label="exitWithStatus" ] + "blitter.com/go/xs/xs.doCopyMode" [ fillcolor="lightblue" label="doCopyMode" penwidth="0.5" tooltip="blitter.com/go/xs/xs.doCopyMode | defined in xs.go:354\nat xs.go:435: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:438: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:473: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:475: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:430: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xs.go:444: calling [blitter.com/go/xs/xs.buildCmdRemoteToLocal]\nat xs.go:424: calling [(blitter.com/go/xs/xsnet.Conn).Read]\nat xs.go:356: calling [(blitter.com/go/xs.Session).Cmd]\nat xs.go:441: calling [(blitter.com/go/xs.Session).Cmd]\nat xs.go:417: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]\nat xs.go:364: calling [blitter.com/go/xs/xs.buildCmdLocalToRemote]" ] + "blitter.com/go/xs/xs.buildCmdLocalToRemote" [ tooltip="blitter.com/go/xs/xs.buildCmdLocalToRemote | defined in xs.go:270\nat xs.go:283: calling [blitter.com/go/xs.GetTool]\nat xs.go:311: calling [blitter.com/go/xs.GetTool]\nat xs.go:312: calling [blitter.com/go/xs.GetTool]\nat xs.go:335: calling [blitter.com/go/xs/xs.getTreeSizeSubCmd]" fillcolor="lightblue" label="buildCmdLocalToRemote" penwidth="0.5" ] "blitter.com/go/xs/xs.getTreeSizeSubCmd" [ fillcolor="lightblue" label="getTreeSizeSubCmd" penwidth="0.5" tooltip="blitter.com/go/xs/xs.getTreeSizeSubCmd | defined in xs.go:342" ] "blitter.com/go/xs/xs.buildCmdRemoteToLocal" [ fillcolor="lightblue" label="buildCmdRemoteToLocal" penwidth="0.5" tooltip="blitter.com/go/xs/xs.buildCmdRemoteToLocal | defined in xs.go:244\nat xs.go:256: calling [blitter.com/go/xs.GetTool]\nat xs.go:263: calling [blitter.com/go/xs.GetTool]" ] - "blitter.com/go/xs/xs.usageShell" [ label="usageShell" penwidth="0.5" tooltip="blitter.com/go/xs/xs.usageShell | defined in xs.go:559" fillcolor="lightblue" ] - "blitter.com/go/xs/xs.usageCp" [ fillcolor="lightblue" label="usageCp" penwidth="0.5" tooltip="blitter.com/go/xs/xs.usageCp | defined in xs.go:565" ] + "blitter.com/go/xs/xs.copyBuffer" [ fillcolor="lightblue" label="copyBuffer" penwidth="0.5" tooltip="blitter.com/go/xs/xs.copyBuffer | defined in xs.go:128\nat xs.go:186: calling [blitter.com/go/xs/xs.copyBuffer$2]\nat xs.go:186: calling [blitter.com/go/xs/xs.copyBuffer$3]\nat xs.go:193: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:186: calling [blitter.com/go/xs/xs.copyBuffer$1]" ] + "blitter.com/go/xs/xs.copyBuffer$1" [ fillcolor="lightblue" label="copyBuffer$1" style="dotted,filled" tooltip="blitter.com/go/xs/xs.copyBuffer$1 | defined in xs.go:144" ] + "blitter.com/go/xs/xs.copyBuffer$2" [ fillcolor="lightblue" label="copyBuffer$2" style="dotted,filled" tooltip="blitter.com/go/xs/xs.copyBuffer$2 | defined in xs.go:145" ] + "blitter.com/go/xs/xs.copyBuffer$3" [ fillcolor="lightblue" label="copyBuffer$3" style="dotted,filled" tooltip="blitter.com/go/xs/xs.copyBuffer$3 | defined in xs.go:146" ] + "blitter.com/go/xs/xs.reqTunnel" [ tooltip="blitter.com/go/xs/xs.reqTunnel | defined in xs.go:584\nat xs.go:594: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]\nat xs.go:593: calling [blitter.com/go/xs/logger.LogDebug]" fillcolor="lightblue" label="reqTunnel" penwidth="0.5" ] + "blitter.com/go/xs/xs.main" [ fillcolor="lightblue" label="main" penwidth="0.5" tooltip="blitter.com/go/xs/xs.main | defined in xs.go:680\nat xs.go:1056: calling [(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff]\nat xs.go:1027: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:1089: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:1091: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:1101: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:864: calling [blitter.com/go/xs/logger.New]\nat xs.go:978: calling [blitter.com/go/xs.MakeRaw]\nat xs.go:1075: calling [blitter.com/go/xs/xs.main$3]\nat xs.go:1039: calling [(blitter.com/go/xs/xsnet.Conn).Read]\nat xs.go:960: calling [blitter.com/go/xs/xsnet.Dial]\nat xs.go:1081: calling [blitter.com/go/xs/xs.launchTuns]\nat xs.go:977: calling [github.com/mattn/go-isatty.IsTerminal]\nat xs.go:772: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:853: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:963: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:1027: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:1101: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:1082: calling [blitter.com/go/xs/xs.doShellMode]\nat xs.go:1050: calling [(*blitter.com/go/xs/xsnet.Conn).SetupChaff]\nat xs.go:1022: calling [blitter.com/go/xs/xs.sendSessionParams]\nat xs.go:796: calling [blitter.com/go/xs/xs.parseNonSwitchArgs]\nat xs.go:1024: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:1090: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:1096: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:1055: calling [(*blitter.com/go/xs/xsnet.Conn).DisableChaff]\nat xs.go:1025: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:1043: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:1047: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:1086: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:852: calling [blitter.com/go/xs/xs.usageShell]\nat xs.go:984: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:1005: calling [blitter.com/go/xs.ReadPassword]\nat xs.go:1054: calling [(*blitter.com/go/xs/xsnet.Conn).EnableChaff]\nat xs.go:1085: calling [blitter.com/go/xs/xs.doCopyMode]\nat xs.go:972: calling [(*blitter.com/go/xs/xsnet.Conn).Close]\nat xs.go:1046: calling [blitter.com/go/xs/xs.rejectUserMsg]\nat xs.go:852: calling [blitter.com/go/xs/xs.usageCp]\nat xs.go:790: calling [blitter.com/go/xs/xs.main$1]\nat xs.go:803: calling [blitter.com/go/xs/xs.localUserName]\nat xs.go:865: calling [blitter.com/go/xs/xsnet.Init]\nat xs.go:1021: calling [blitter.com/go/xs.NewSession]" ] + "blitter.com/go/xs/xs.parseNonSwitchArgs" [ label="parseNonSwitchArgs" penwidth="0.5" tooltip="blitter.com/go/xs/xs.parseNonSwitchArgs | defined in xs.go:599" fillcolor="lightblue" ] + "blitter.com/go/xs/xs.main$1" [ fillcolor="lightblue" label="deferRestore" style="dotted,filled" tooltip="blitter.com/go/xs/xs.main$1 | defined in xs.go:790" ] + "blitter.com/go/xs/xs.localUserName" [ fillcolor="lightblue" label="localUserName" penwidth="0.5" tooltip="blitter.com/go/xs/xs.localUserName | defined in xs.go:1106" ] + "blitter.com/go/xs/xs.sendSessionParams" [ fillcolor="lightblue" label="sendSessionParams" penwidth="0.5" tooltip="blitter.com/go/xs/xs.sendSessionParams | defined in xs.go:649\nat xs.go:651: calling [(blitter.com/go/xs.Session).Cmd]\nat xs.go:671: calling [(blitter.com/go/xs.Session).Cmd]\nat xs.go:651: calling [(blitter.com/go/xs.Session).AuthCookie]\nat xs.go:675: calling [(blitter.com/go/xs.Session).AuthCookie]\nat xs.go:651: calling [(blitter.com/go/xs.Session).Who]\nat xs.go:659: calling [(blitter.com/go/xs.Session).Who]\nat xs.go:651: calling [(blitter.com/go/xs.Session).Op]\nat xs.go:655: calling [(blitter.com/go/xs.Session).Op]\nat xs.go:651: calling [(blitter.com/go/xs.Session).TermType]\nat xs.go:667: calling [(blitter.com/go/xs.Session).TermType]\nat xs.go:651: calling [(blitter.com/go/xs.Session).ConnHost]\nat xs.go:663: calling [(blitter.com/go/xs.Session).ConnHost]\nat xs.go:675: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:671: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:667: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:663: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:659: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:655: calling [(blitter.com/go/xs/xsnet.Conn).Write]" ] + "blitter.com/go/xs/xs.rejectUserMsg" [ fillcolor="lightblue" label="rejectUserMsg" penwidth="0.5" tooltip="blitter.com/go/xs/xs.rejectUserMsg | defined in xs.go:576\nat xs.go:577: calling [blitter.com/go/xs/spinsult.GetSentence]" ] + "blitter.com/go/xs/xs.main$3" [ fillcolor="lightblue" label="main$3" style="dotted,filled" tooltip="blitter.com/go/xs/xs.main$3 | defined in xs.go:1065\nat xs.go:1068: calling [math/rand.Intn]\nat xs.go:1072: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]" ] + "blitter.com/go/xs/xs.launchTuns" [ fillcolor="lightblue" label="launchTuns" penwidth="0.5" tooltip="blitter.com/go/xs/xs.launchTuns | defined in xs.go:634\nat xs.go:645: calling [blitter.com/go/xs/xs.reqTunnel]" ] + "blitter.com/go/xs/xs.doShellMode$1" [ tooltip="blitter.com/go/xs/xs.doShellMode$1 | defined in xs.go:490\nat xs.go:509: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:519: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:507: calling [(crypto/x509.SystemRootsError).Error]\nat xs.go:513: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:507: calling [(crypto/x509.CertificateInvalidError).Error]\nat xs.go:507: calling [(vendor/golang.org/x/net/idna.labelError).Error]\nat xs.go:507: calling [(crypto/tls.RecordHeaderError).Error]\nat xs.go:507: calling [(crypto/x509.UnknownAuthorityError).Error]\nat xs.go:513: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:507: calling [(crypto/tls.alert).Error]\nat xs.go:507: calling [(context.deadlineExceededError).Error]\nat xs.go:507: calling [(crypto/aes.KeySizeError).Error]\nat xs.go:507: calling [(crypto/x509.UnhandledCriticalExtension).Error]\nat xs.go:507: calling [(compress/flate.CorruptInputError).Error]\nat xs.go:507: calling [(*github.com/pkg/errors.fundamental).Error]\nat xs.go:491: calling [blitter.com/go/xs/xs.doShellMode$1$1]\nat xs.go:507: calling [(crypto/x509.HostnameError).Error]\nat xs.go:507: calling [(*crypto/tls.permanentError).Error]\nat xs.go:507: calling [(vendor/golang.org/x/net/idna.runeError).Error]\nat xs.go:514: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:519: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:503: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:518: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:507: calling [(compress/flate.InternalError).Error]" fillcolor="lightblue" label="shellRemoteToStdin" style="dotted,filled" ] + "blitter.com/go/xs/xs.doShellMode$1$1" [ fillcolor="lightblue" label="doShellMode$1$1" style="dotted,filled" tooltip="blitter.com/go/xs/xs.doShellMode$1$1 | defined in xs.go:491" ] + "blitter.com/go/xs/xs.doShellMode" [ fillcolor="lightblue" label="doShellMode" penwidth="0.5" tooltip="blitter.com/go/xs/xs.doShellMode | defined in xs.go:483\nat xs.go:522: calling [blitter.com/go/xs/xs.doShellMode$1]\nat xs.go:551: calling [blitter.com/go/xs/xs.doShellMode$2]\nat xs.go:527: calling [blitter.com/go/xs/xs.handleTermResizes]" ] + "blitter.com/go/xs/xs.handleTermResizes$1" [ tooltip="blitter.com/go/xs/xs.handleTermResizes$1 | defined in termsize_unix.go:21\nat termsize_unix.go:33: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]\nat termsize_unix.go:27: calling [blitter.com/go/xs/xs.GetSize]" fillcolor="lightblue" label="handleTermResizes$1" style="dotted,filled" ] + "blitter.com/go/xs/xs.GetSize" [ penwidth="1.5" tooltip="blitter.com/go/xs/xs.GetSize | defined in xs.go:221" fillcolor="lightblue" label="GetSize" ] + "blitter.com/go/xs/xs.handleTermResizes" [ fillcolor="lightblue" label="handleTermResizes" penwidth="0.5" tooltip="blitter.com/go/xs/xs.handleTermResizes | defined in termsize_unix.go:16\nat termsize_unix.go:21: calling [blitter.com/go/xs/xs.handleTermResizes$1]" ] + "blitter.com/go/xs/xs.Copy" [ tooltip="blitter.com/go/xs/xs.Copy | defined in xs.go:115\nat xs.go:116: calling [blitter.com/go/xs/xs.copyBuffer]" fillcolor="lightblue" label="Copy" penwidth="1.5" ] + "blitter.com/go/xs/xs.doShellMode$2$1" [ fillcolor="lightblue" label="doShellMode$2$1" style="dotted,filled" tooltip="blitter.com/go/xs/xs.doShellMode$2$1 | defined in xs.go:536\nat xs.go:539: calling [blitter.com/go/xs/xs.Copy]" ] + "blitter.com/go/xs/xs.doShellMode$2" [ style="dotted,filled" tooltip="blitter.com/go/xs/xs.doShellMode$2 | defined in xs.go:534\nat xs.go:546: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:548: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:541: calling [blitter.com/go/xs/xs.doShellMode$2$1]" fillcolor="lightblue" label="shellStdinToRemote" ] + "blitter.com/go/xs/xs.usageShell" [ fillcolor="lightblue" label="usageShell" penwidth="0.5" tooltip="blitter.com/go/xs/xs.usageShell | defined in xs.go:559" ] + "blitter.com/go/xs/xs.usageCp" [ label="usageCp" penwidth="0.5" tooltip="blitter.com/go/xs/xs.usageCp | defined in xs.go:565" fillcolor="lightblue" ] subgraph "cluster_blitter.com/go/xs" { - tooltip="package: blitter.com/go/xs"; -penwidth="0.8"; -style="filled"; -fillcolor="lightyellow"; + style="filled"; +rank="sink"; +tooltip="package: blitter.com/go/xs"; label="xs"; URL="/?f=blitter.com/go/xs"; +penwidth="0.8"; fontsize="16"; +fillcolor="lightyellow"; fontname="Tahoma bold"; -rank="sink"; - "blitter.com/go/xs.Restore" [ fillcolor="moccasin" label="Restore" penwidth="1.5" tooltip="blitter.com/go/xs.Restore | defined in termmode_linux.go:70" ] - "blitter.com/go/xs.MakeRaw" [ tooltip="blitter.com/go/xs.MakeRaw | defined in termmode_linux.go:33" fillcolor="moccasin" label="MakeRaw" penwidth="1.5" ] - "blitter.com/go/xs.ReadPassword" [ fillcolor="moccasin" label="ReadPassword" penwidth="1.5" tooltip="blitter.com/go/xs.ReadPassword | defined in termmode_linux.go:81" ] - "blitter.com/go/xs.NewSession" [ tooltip="blitter.com/go/xs.NewSession | defined in session.go:130" fillcolor="moccasin" label="NewSession" penwidth="1.5" ] - "blitter.com/go/xs.GetTool" [ fillcolor="moccasin" label="GetTool" penwidth="1.5" tooltip="blitter.com/go/xs.GetTool | defined in auth.go:211" ] + "blitter.com/go/xs.Restore" [ tooltip="blitter.com/go/xs.Restore | defined in termmode_linux.go:70" fillcolor="moccasin" label="Restore" penwidth="1.5" ] + "blitter.com/go/xs.GetTool" [ fillcolor="moccasin" label="GetTool" penwidth="1.5" tooltip="blitter.com/go/xs.GetTool | defined in auth.go:217" ] + "blitter.com/go/xs.MakeRaw" [ fillcolor="moccasin" label="MakeRaw" penwidth="1.5" tooltip="blitter.com/go/xs.MakeRaw | defined in termmode_linux.go:33" ] + "blitter.com/go/xs.ReadPassword" [ tooltip="blitter.com/go/xs.ReadPassword | defined in termmode_linux.go:81" fillcolor="moccasin" label="ReadPassword" penwidth="1.5" ] + "blitter.com/go/xs.NewSession" [ fillcolor="moccasin" label="NewSession" penwidth="1.5" tooltip="blitter.com/go/xs.NewSession | defined in session.go:130" ] subgraph "cluster_*blitter.com/go/xs.Session" { - labelloc="b"; -style="rounded,filled"; -fillcolor="wheat2"; + fillcolor="wheat2"; label="(*Session)"; tooltip="type: *blitter.com/go/xs.Session"; penwidth="0.5"; fontsize="15"; fontcolor="#222222"; +labelloc="b"; +style="rounded,filled"; "(*blitter.com/go/xs.Session).SetStatus" [ fillcolor="moccasin" label="SetStatus" penwidth="1.5" tooltip="(*blitter.com/go/xs.Session).SetStatus | defined in session.go:125" ] } subgraph "cluster_blitter.com/go/xs.Session" { - fontcolor="#222222"; + penwidth="0.5"; +fontsize="15"; +fontcolor="#222222"; labelloc="b"; style="rounded,filled"; fillcolor="wheat2"; label="(Session)"; tooltip="type: blitter.com/go/xs.Session"; -penwidth="0.5"; -fontsize="15"; + "(blitter.com/go/xs.Session).Cmd" [ fillcolor="moccasin" label="Cmd" penwidth="1.5" tooltip="(blitter.com/go/xs.Session).Cmd | defined in session.go:79" ] "(blitter.com/go/xs.Session).Op" [ fillcolor="moccasin" label="Op" penwidth="1.5" tooltip="(blitter.com/go/xs.Session).Op | defined in session.go:36" ] "(blitter.com/go/xs.Session).Who" [ fillcolor="moccasin" label="Who" penwidth="1.5" tooltip="(blitter.com/go/xs.Session).Who | defined in session.go:46" ] - "(blitter.com/go/xs.Session).ConnHost" [ fillcolor="moccasin" label="ConnHost" penwidth="1.5" tooltip="(blitter.com/go/xs.Session).ConnHost | defined in session.go:56" ] - "(blitter.com/go/xs.Session).TermType" [ label="TermType" penwidth="1.5" tooltip="(blitter.com/go/xs.Session).TermType | defined in session.go:67" fillcolor="moccasin" ] - "(blitter.com/go/xs.Session).Cmd" [ fillcolor="moccasin" label="Cmd" penwidth="1.5" tooltip="(blitter.com/go/xs.Session).Cmd | defined in session.go:79" ] - "(blitter.com/go/xs.Session).AuthCookie" [ penwidth="1.5" tooltip="(blitter.com/go/xs.Session).AuthCookie | defined in session.go:92" fillcolor="moccasin" label="AuthCookie" ] - "(blitter.com/go/xs.Session).Status" [ fillcolor="moccasin" label="Status" penwidth="1.5" tooltip="(blitter.com/go/xs.Session).Status | defined in session.go:120" ] + "(blitter.com/go/xs.Session).ConnHost" [ label="ConnHost" penwidth="1.5" tooltip="(blitter.com/go/xs.Session).ConnHost | defined in session.go:56" fillcolor="moccasin" ] + "(blitter.com/go/xs.Session).TermType" [ fillcolor="moccasin" label="TermType" penwidth="1.5" tooltip="(blitter.com/go/xs.Session).TermType | defined in session.go:67" ] + "(blitter.com/go/xs.Session).AuthCookie" [ fillcolor="moccasin" label="AuthCookie" penwidth="1.5" tooltip="(blitter.com/go/xs.Session).AuthCookie | defined in session.go:92" ] + "(blitter.com/go/xs.Session).Status" [ penwidth="1.5" tooltip="(blitter.com/go/xs.Session).Status | defined in session.go:120" fillcolor="moccasin" label="Status" ] } } subgraph "cluster_blitter.com/go/xs/logger" { - fillcolor="lightyellow"; -URL="/?f=blitter.com/go/xs/logger"; -penwidth="0.8"; -style="filled"; + penwidth="0.8"; +fontsize="16"; fontname="Tahoma bold"; +URL="/?f=blitter.com/go/xs/logger"; +tooltip="package: blitter.com/go/xs/logger"; +style="filled"; +fillcolor="lightyellow"; rank="sink"; label="logger"; -tooltip="package: blitter.com/go/xs/logger"; -fontsize="16"; + "blitter.com/go/xs/logger.LogDebug" [ fillcolor="moccasin" label="LogDebug" penwidth="1.5" tooltip="blitter.com/go/xs/logger.LogDebug | defined in logger_linux.go:103" ] "blitter.com/go/xs/logger.New" [ fillcolor="moccasin" label="New" penwidth="1.5" tooltip="blitter.com/go/xs/logger.New | defined in logger_linux.go:71" ] - "blitter.com/go/xs/logger.LogDebug" [ penwidth="1.5" tooltip="blitter.com/go/xs/logger.LogDebug | defined in logger_linux.go:103" fillcolor="moccasin" label="LogDebug" ] } subgraph "cluster_blitter.com/go/xs/spinsult" { - style="filled"; + penwidth="0.8"; +style="filled"; +fontname="Tahoma bold"; rank="sink"; -URL="/?f=blitter.com/go/xs/spinsult"; -tooltip="package: blitter.com/go/xs/spinsult"; -penwidth="0.8"; fontsize="16"; fillcolor="lightyellow"; -fontname="Tahoma bold"; label="spinsult"; +URL="/?f=blitter.com/go/xs/spinsult"; +tooltip="package: blitter.com/go/xs/spinsult"; - "blitter.com/go/xs/spinsult.GetSentence" [ fillcolor="moccasin" label="GetSentence" penwidth="1.5" tooltip="blitter.com/go/xs/spinsult.GetSentence | defined in spinsult.go:43" ] + "blitter.com/go/xs/spinsult.GetSentence" [ label="GetSentence" penwidth="1.5" tooltip="blitter.com/go/xs/spinsult.GetSentence | defined in spinsult.go:43" fillcolor="moccasin" ] } subgraph "cluster_blitter.com/go/xs/xsnet" { - fillcolor="lightyellow"; -fontname="Tahoma bold"; -penwidth="0.8"; -style="filled"; -label="xsnet"; -URL="/?f=blitter.com/go/xs/xsnet"; -tooltip="package: blitter.com/go/xs/xsnet"; -fontsize="16"; + fontname="Tahoma bold"; rank="sink"; +label="xsnet"; +tooltip="package: blitter.com/go/xs/xsnet"; +penwidth="0.8"; +fontsize="16"; +style="filled"; +fillcolor="lightyellow"; +URL="/?f=blitter.com/go/xs/xsnet"; - "blitter.com/go/xs/xsnet.Init" [ fillcolor="moccasin" label="Init" penwidth="1.5" tooltip="blitter.com/go/xs/xsnet.Init | defined in net.go:192" ] - "blitter.com/go/xs/xsnet.Dial" [ fillcolor="moccasin" label="Dial" penwidth="1.5" tooltip="blitter.com/go/xs/xsnet.Dial | defined in net.go:890" ] + "blitter.com/go/xs/xsnet.Init" [ fillcolor="moccasin" label="Init" penwidth="1.5" tooltip="blitter.com/go/xs/xsnet.Init | defined in net.go:198" ] + "blitter.com/go/xs/xsnet.Dial" [ fillcolor="moccasin" label="Dial" penwidth="1.5" tooltip="blitter.com/go/xs/xsnet.Dial | defined in net.go:899" ] subgraph "cluster_*blitter.com/go/xs/xsnet.Conn" { - labelloc="b"; + fontcolor="#222222"; +labelloc="b"; style="rounded,filled"; fillcolor="wheat2"; label="(*Conn)"; tooltip="type: *blitter.com/go/xs/xsnet.Conn"; penwidth="0.5"; fontsize="15"; -fontcolor="#222222"; - "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ fillcolor="moccasin" label="WritePacket" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).WritePacket | defined in net.go:1430" ] - "(*blitter.com/go/xs/xsnet.Conn).Close" [ label="Close" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).Close | defined in net.go:970" fillcolor="moccasin" ] - "(*blitter.com/go/xs/xsnet.Conn).SetupChaff" [ penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).SetupChaff | defined in net.go:1556" fillcolor="moccasin" label="SetupChaff" ] - "(*blitter.com/go/xs/xsnet.Conn).EnableChaff" [ label="EnableChaff" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).EnableChaff | defined in net.go:1539" fillcolor="moccasin" ] - "(*blitter.com/go/xs/xsnet.Conn).DisableChaff" [ label="DisableChaff" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).DisableChaff | defined in net.go:1546" fillcolor="moccasin" ] - "(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff" [ fillcolor="moccasin" label="ShutdownChaff" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff | defined in net.go:1551" ] - "(*blitter.com/go/xs/xsnet.Conn).GetStatus" [ fillcolor="moccasin" label="GetStatus" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).GetStatus | defined in net.go:208" ] - "(*blitter.com/go/xs/xsnet.Conn).SetStatus" [ fillcolor="moccasin" label="SetStatus" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).SetStatus | defined in net.go:212" ] + "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ fillcolor="moccasin" label="WritePacket" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).WritePacket | defined in net.go:1437" ] + "(*blitter.com/go/xs/xsnet.Conn).SetStatus" [ label="SetStatus" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).SetStatus | defined in net.go:218" fillcolor="moccasin" ] + "(*blitter.com/go/xs/xsnet.Conn).GetStatus" [ fillcolor="moccasin" label="GetStatus" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).GetStatus | defined in net.go:214" ] + "(*blitter.com/go/xs/xsnet.Conn).Close" [ fillcolor="moccasin" label="Close" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).Close | defined in net.go:979" ] + "(*blitter.com/go/xs/xsnet.Conn).SetupChaff" [ penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).SetupChaff | defined in net.go:1563" fillcolor="moccasin" label="SetupChaff" ] + "(*blitter.com/go/xs/xsnet.Conn).EnableChaff" [ fillcolor="moccasin" label="EnableChaff" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).EnableChaff | defined in net.go:1546" ] + "(*blitter.com/go/xs/xsnet.Conn).DisableChaff" [ fillcolor="moccasin" label="DisableChaff" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).DisableChaff | defined in net.go:1553" ] + "(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff" [ tooltip="(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff | defined in net.go:1558" fillcolor="moccasin" label="ShutdownChaff" penwidth="1.5" ] } subgraph "cluster_blitter.com/go/xs/xsnet.Conn" { - labelloc="b"; -style="rounded,filled"; -fillcolor="wheat2"; -label="(Conn)"; + label="(Conn)"; tooltip="type: blitter.com/go/xs/xsnet.Conn"; penwidth="0.5"; fontsize="15"; fontcolor="#222222"; +labelloc="b"; +style="rounded,filled"; +fillcolor="wheat2"; - "(blitter.com/go/xs/xsnet.Conn).Write" [ tooltip="(blitter.com/go/xs/xsnet.Conn).Write | defined in net.go:1424" fillcolor="moccasin" label="Write" penwidth="1.5" ] - "(blitter.com/go/xs/xsnet.Conn).Read" [ fillcolor="moccasin" label="Read" penwidth="1.5" tooltip="(blitter.com/go/xs/xsnet.Conn).Read | defined in net.go:1185" ] + "(blitter.com/go/xs/xsnet.Conn).Read" [ penwidth="1.5" tooltip="(blitter.com/go/xs/xsnet.Conn).Read | defined in net.go:1192" fillcolor="moccasin" label="Read" ] + "(blitter.com/go/xs/xsnet.Conn).Write" [ fillcolor="moccasin" label="Write" penwidth="1.5" tooltip="(blitter.com/go/xs/xsnet.Conn).Write | defined in net.go:1431" ] } } subgraph "cluster_compress/flate" { - URL="/?f=compress/flate"; + fontsize="16"; +style="filled"; +fillcolor="lightyellow"; +label="flate"; +URL="/?f=compress/flate"; penwidth="0.8"; -label="compress/flate"; -fillcolor="#E0FFE1"; fontname="Tahoma bold"; rank="sink"; tooltip="package: compress/flate"; -fontsize="16"; -style="filled"; subgraph "cluster_compress/flate.CorruptInputError" { - tooltip="type: compress/flate.CorruptInputError"; -penwidth="0.5"; -fontsize="15"; -fontcolor="#222222"; + fontcolor="#222222"; labelloc="b"; style="rounded,filled"; -fillcolor="#c2e3c2"; +fillcolor="wheat2"; label="(CorruptInputError)"; +tooltip="type: compress/flate.CorruptInputError"; +penwidth="0.5"; +fontsize="15"; - "(compress/flate.CorruptInputError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" tooltip="(compress/flate.CorruptInputError).Error | defined in inflate.go:35" ] + "(compress/flate.CorruptInputError).Error" [ penwidth="1.5" tooltip="(compress/flate.CorruptInputError).Error | defined in inflate.go:35" fillcolor="moccasin" label="Error" ] } @@ -221,10 +221,10 @@ fontsize="15"; fontcolor="#222222"; labelloc="b"; style="rounded,filled"; -fillcolor="#c2e3c2"; +fillcolor="wheat2"; label="(InternalError)"; - "(compress/flate.InternalError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" tooltip="(compress/flate.InternalError).Error | defined in inflate.go:42" ] + "(compress/flate.InternalError).Error" [ tooltip="(compress/flate.InternalError).Error | defined in inflate.go:42" fillcolor="moccasin" label="Error" penwidth="1.5" ] } @@ -233,46 +233,46 @@ label="(InternalError)"; subgraph "cluster_context" { fontsize="16"; style="filled"; -fontname="Tahoma bold"; -penwidth="0.8"; -rank="sink"; label="context"; +penwidth="0.8"; +fillcolor="lightyellow"; +fontname="Tahoma bold"; +rank="sink"; URL="/?f=context"; tooltip="package: context"; -fillcolor="#E0FFE1"; subgraph "cluster_context.deadlineExceededError" { - tooltip="type: context.deadlineExceededError"; + style="rounded,filled"; +fillcolor="wheat2"; +label="(deadlineExceededError)"; +tooltip="type: context.deadlineExceededError"; penwidth="0.5"; fontsize="15"; fontcolor="#222222"; labelloc="b"; -style="rounded,filled"; -fillcolor="#c2e3c2"; -label="(deadlineExceededError)"; - "(context.deadlineExceededError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" tooltip="(context.deadlineExceededError).Error | defined in context.go:165" ] + "(context.deadlineExceededError).Error" [ fillcolor="moccasin" label="Error" penwidth="1.5" tooltip="(context.deadlineExceededError).Error | defined in context.go:165" ] } } subgraph "cluster_crypto/aes" { - label="crypto/aes"; -tooltip="package: crypto/aes"; -penwidth="0.8"; + penwidth="0.8"; style="filled"; -fillcolor="#E0FFE1"; fontname="Tahoma bold"; rank="sink"; -fontsize="16"; +label="aes"; URL="/?f=crypto/aes"; +tooltip="package: crypto/aes"; +fontsize="16"; +fillcolor="lightyellow"; subgraph "cluster_crypto/aes.KeySizeError" { style="rounded,filled"; -fillcolor="#c2e3c2"; +fillcolor="wheat2"; label="(KeySizeError)"; tooltip="type: crypto/aes.KeySizeError"; penwidth="0.5"; @@ -280,7 +280,7 @@ fontsize="15"; fontcolor="#222222"; labelloc="b"; - "(crypto/aes.KeySizeError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" tooltip="(crypto/aes.KeySizeError).Error | defined in cipher.go:24" ] + "(crypto/aes.KeySizeError).Error" [ fillcolor="moccasin" label="Error" penwidth="1.5" tooltip="(crypto/aes.KeySizeError).Error | defined in cipher.go:24" ] } @@ -288,111 +288,111 @@ labelloc="b"; subgraph "cluster_crypto/tls" { penwidth="0.8"; -style="filled"; +fontsize="16"; fontname="Tahoma bold"; -rank="sink"; URL="/?f=crypto/tls"; tooltip="package: crypto/tls"; -fontsize="16"; -fillcolor="#E0FFE1"; -label="crypto/tls"; +style="filled"; +fillcolor="lightyellow"; +rank="sink"; +label="tls"; - subgraph "cluster_*crypto/tls.permamentError" { - tooltip="type: *crypto/tls.permamentError"; + subgraph "cluster_*crypto/tls.permanentError" { + label="(*permanentError)"; +tooltip="type: *crypto/tls.permanentError"; penwidth="0.5"; fontsize="15"; fontcolor="#222222"; labelloc="b"; style="rounded,filled"; -fillcolor="#c2e3c2"; -label="(*permamentError)"; +fillcolor="wheat2"; - "(*crypto/tls.permamentError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" tooltip="(*crypto/tls.permamentError).Error | defined in conn.go:175" ] + "(*crypto/tls.permanentError).Error" [ tooltip="(*crypto/tls.permanentError).Error | defined in conn.go:184" fillcolor="moccasin" label="Error" penwidth="1.5" ] } subgraph "cluster_crypto/tls.RecordHeaderError" { - label="(RecordHeaderError)"; + fillcolor="wheat2"; +label="(RecordHeaderError)"; tooltip="type: crypto/tls.RecordHeaderError"; penwidth="0.5"; fontsize="15"; fontcolor="#222222"; labelloc="b"; style="rounded,filled"; -fillcolor="#c2e3c2"; - "(crypto/tls.RecordHeaderError).Error" [ tooltip="(crypto/tls.RecordHeaderError).Error | defined in conn.go:566" fillcolor="#adedad" label="Error" penwidth="1.5" ] + "(crypto/tls.RecordHeaderError).Error" [ tooltip="(crypto/tls.RecordHeaderError).Error | defined in conn.go:571" fillcolor="moccasin" label="Error" penwidth="1.5" ] } subgraph "cluster_crypto/tls.alert" { - style="rounded,filled"; -fillcolor="#c2e3c2"; + fontcolor="#222222"; +labelloc="b"; +style="rounded,filled"; +fillcolor="wheat2"; label="(alert)"; tooltip="type: crypto/tls.alert"; penwidth="0.5"; fontsize="15"; -fontcolor="#222222"; -labelloc="b"; - "(crypto/tls.alert).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" tooltip="(crypto/tls.alert).Error | defined in alert.go:97" ] + "(crypto/tls.alert).Error" [ fillcolor="moccasin" label="Error" penwidth="1.5" tooltip="(crypto/tls.alert).Error | defined in alert.go:97" ] } } subgraph "cluster_crypto/x509" { - style="filled"; -URL="/?f=crypto/x509"; + URL="/?f=crypto/x509"; +style="filled"; +fillcolor="lightyellow"; +fontname="Tahoma bold"; +rank="sink"; +label="x509"; tooltip="package: crypto/x509"; penwidth="0.8"; fontsize="16"; -fillcolor="#E0FFE1"; -fontname="Tahoma bold"; -rank="sink"; -label="crypto/x509"; subgraph "cluster_crypto/x509.CertificateInvalidError" { - tooltip="type: crypto/x509.CertificateInvalidError"; + label="(CertificateInvalidError)"; +tooltip="type: crypto/x509.CertificateInvalidError"; penwidth="0.5"; fontsize="15"; fontcolor="#222222"; labelloc="b"; style="rounded,filled"; -fillcolor="#c2e3c2"; -label="(CertificateInvalidError)"; +fillcolor="wheat2"; - "(crypto/x509.CertificateInvalidError).Error" [ label="Error" penwidth="1.5" tooltip="(crypto/x509.CertificateInvalidError).Error | defined in verify.go:78" fillcolor="#adedad" ] + "(crypto/x509.CertificateInvalidError).Error" [ fillcolor="moccasin" label="Error" penwidth="1.5" tooltip="(crypto/x509.CertificateInvalidError).Error | defined in verify.go:67" ] } subgraph "cluster_crypto/x509.HostnameError" { - labelloc="b"; -style="rounded,filled"; -fillcolor="#c2e3c2"; -label="(HostnameError)"; -tooltip="type: crypto/x509.HostnameError"; -penwidth="0.5"; -fontsize="15"; -fontcolor="#222222"; - - "(crypto/x509.HostnameError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" tooltip="(crypto/x509.HostnameError).Error | defined in verify.go:109" ] - - } - - subgraph "cluster_crypto/x509.SystemRootsError" { - fillcolor="#c2e3c2"; -label="(SystemRootsError)"; -tooltip="type: crypto/x509.SystemRootsError"; + tooltip="type: crypto/x509.HostnameError"; penwidth="0.5"; fontsize="15"; fontcolor="#222222"; labelloc="b"; style="rounded,filled"; +fillcolor="wheat2"; +label="(HostnameError)"; - "(crypto/x509.SystemRootsError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" tooltip="(crypto/x509.SystemRootsError).Error | defined in verify.go:182" ] + "(crypto/x509.HostnameError).Error" [ fillcolor="moccasin" label="Error" penwidth="1.5" tooltip="(crypto/x509.HostnameError).Error | defined in verify.go:98" ] + + } + + subgraph "cluster_crypto/x509.SystemRootsError" { + tooltip="type: crypto/x509.SystemRootsError"; +penwidth="0.5"; +fontsize="15"; +fontcolor="#222222"; +labelloc="b"; +style="rounded,filled"; +fillcolor="wheat2"; +label="(SystemRootsError)"; + + "(crypto/x509.SystemRootsError).Error" [ label="Error" penwidth="1.5" tooltip="(crypto/x509.SystemRootsError).Error | defined in verify.go:159" fillcolor="moccasin" ] } @@ -404,23 +404,23 @@ fontsize="15"; fontcolor="#222222"; labelloc="b"; style="rounded,filled"; -fillcolor="#c2e3c2"; +fillcolor="wheat2"; - "(crypto/x509.UnhandledCriticalExtension).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" tooltip="(crypto/x509.UnhandledCriticalExtension).Error | defined in x509.go:931" ] + "(crypto/x509.UnhandledCriticalExtension).Error" [ label="Error" penwidth="1.5" tooltip="(crypto/x509.UnhandledCriticalExtension).Error | defined in x509.go:893" fillcolor="moccasin" ] } subgraph "cluster_crypto/x509.UnknownAuthorityError" { - fillcolor="#c2e3c2"; -label="(UnknownAuthorityError)"; -tooltip="type: crypto/x509.UnknownAuthorityError"; -penwidth="0.5"; -fontsize="15"; + fontsize="15"; fontcolor="#222222"; labelloc="b"; style="rounded,filled"; +fillcolor="wheat2"; +label="(UnknownAuthorityError)"; +tooltip="type: crypto/x509.UnknownAuthorityError"; +penwidth="0.5"; - "(crypto/x509.UnknownAuthorityError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" tooltip="(crypto/x509.UnknownAuthorityError).Error | defined in verify.go:161" ] + "(crypto/x509.UnknownAuthorityError).Error" [ tooltip="(crypto/x509.UnknownAuthorityError).Error | defined in verify.go:138" fillcolor="moccasin" label="Error" penwidth="1.5" ] } @@ -428,151 +428,195 @@ style="rounded,filled"; subgraph "cluster_github.com/mattn/go-isatty" { penwidth="0.8"; -style="filled"; -fillcolor="lightyellow"; +fontsize="16"; fontname="Tahoma bold"; rank="sink"; +style="filled"; +fillcolor="lightyellow"; label="isatty"; URL="/?f=github.com/mattn/go-isatty"; -fontsize="16"; tooltip="package: github.com/mattn/go-isatty"; - "github.com/mattn/go-isatty.IsTerminal" [ fillcolor="moccasin" label="IsTerminal" penwidth="1.5" tooltip="github.com/mattn/go-isatty.IsTerminal | defined in isatty_tcgets.go:9" ] + "github.com/mattn/go-isatty.IsTerminal" [ penwidth="1.5" tooltip="github.com/mattn/go-isatty.IsTerminal | defined in isatty_tcgets.go:10" fillcolor="moccasin" label="IsTerminal" ] } subgraph "cluster_github.com/pkg/errors" { - penwidth="0.8"; -fontsize="16"; -fillcolor="lightyellow"; -rank="sink"; + fontname="Tahoma bold"; label="errors"; -style="filled"; -fontname="Tahoma bold"; URL="/?f=github.com/pkg/errors"; tooltip="package: github.com/pkg/errors"; +rank="sink"; +penwidth="0.8"; +fontsize="16"; +style="filled"; +fillcolor="lightyellow"; subgraph "cluster_*github.com/pkg/errors.fundamental" { - fontsize="15"; + label="(*fundamental)"; +tooltip="type: *github.com/pkg/errors.fundamental"; +penwidth="0.5"; +fontsize="15"; fontcolor="#222222"; labelloc="b"; style="rounded,filled"; fillcolor="wheat2"; -label="(*fundamental)"; -tooltip="type: *github.com/pkg/errors.fundamental"; -penwidth="0.5"; - "(*github.com/pkg/errors.fundamental).Error" [ tooltip="(*github.com/pkg/errors.fundamental).Error | defined in errors.go:125" fillcolor="moccasin" label="Error" penwidth="1.5" ] + "(*github.com/pkg/errors.fundamental).Error" [ fillcolor="moccasin" label="Error" penwidth="1.5" tooltip="(*github.com/pkg/errors.fundamental).Error | defined in errors.go:125" ] } } subgraph "cluster_math/rand" { - fontname="Tahoma bold"; -URL="/?f=math/rand"; -penwidth="0.8"; -style="filled"; -fillcolor="#E0FFE1"; -tooltip="package: math/rand"; -fontsize="16"; + style="filled"; +fillcolor="lightyellow"; rank="sink"; -label="math/rand"; +URL="/?f=math/rand"; +tooltip="package: math/rand"; +penwidth="0.8"; +fontsize="16"; +fontname="Tahoma bold"; +label="rand"; - "math/rand.Intn" [ fillcolor="#adedad" label="Intn" penwidth="1.5" tooltip="math/rand.Intn | defined in rand.go:337" ] + "math/rand.Intn" [ fillcolor="moccasin" label="Intn" penwidth="1.5" tooltip="math/rand.Intn | defined in rand.go:337" ] + + } + + subgraph "cluster_vendor/golang.org/x/net/idna" { + URL="/?f=vendor/golang.org/x/net/idna"; +penwidth="0.8"; +fontname="Tahoma bold"; +fillcolor="lightyellow"; +rank="sink"; +label="idna"; +tooltip="package: vendor/golang.org/x/net/idna"; +fontsize="16"; +style="filled"; + + + subgraph "cluster_vendor/golang.org/x/net/idna.labelError" { + style="rounded,filled"; +fillcolor="wheat2"; +label="(labelError)"; +tooltip="type: vendor/golang.org/x/net/idna.labelError"; +penwidth="0.5"; +fontsize="15"; +fontcolor="#222222"; +labelloc="b"; + + "(vendor/golang.org/x/net/idna.labelError).Error" [ fillcolor="moccasin" label="Error" penwidth="1.5" tooltip="(vendor/golang.org/x/net/idna.labelError).Error | defined in idna10.0.0.go:324" ] + + } + + subgraph "cluster_vendor/golang.org/x/net/idna.runeError" { + style="rounded,filled"; +fillcolor="wheat2"; +label="(runeError)"; +tooltip="type: vendor/golang.org/x/net/idna.runeError"; +penwidth="0.5"; +fontsize="15"; +fontcolor="#222222"; +labelloc="b"; + + "(vendor/golang.org/x/net/idna.runeError).Error" [ tooltip="(vendor/golang.org/x/net/idna.runeError).Error | defined in idna10.0.0.go:331" fillcolor="moccasin" label="Error" penwidth="1.5" ] } } - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.main$1" [ arrowhead="normalnoneodot" tooltip="at xs.go:769: calling [blitter.com/go/xs/xs.main$1]" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.localUserName" [ tooltip="at xs.go:782: calling [blitter.com/go/xs/xs.localUserName]" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.rejectUserMsg" [ tooltip="at xs.go:1024: calling [blitter.com/go/xs/xs.rejectUserMsg]" ] + } + + "blitter.com/go/xs/xs.doShellMode$1" -> "blitter.com/go/xs/xs.exitWithStatus" [ tooltip="at xs.go:509: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:519: calling [blitter.com/go/xs/xs.exitWithStatus]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/x509.SystemRootsError).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(crypto/x509.SystemRootsError).Error]" ] + "blitter.com/go/xs/xs.main$2" -> "blitter.com/go/xs/xs.exitWithStatus" [ tooltip="at xs.go:999: calling [blitter.com/go/xs/xs.exitWithStatus]" ] + "blitter.com/go/xs/xs.doCopyMode" -> "(*blitter.com/go/xs/xsnet.Conn).GetStatus" [ color="saddlebrown" tooltip="at xs.go:435: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:438: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:473: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:475: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]" ] + "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" tooltip="at xs.go:1056: calling [(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(*blitter.com/go/xs.Session).SetStatus" [ color="saddlebrown" tooltip="at xs.go:513: calling [(*blitter.com/go/xs.Session).SetStatus]" ] + "blitter.com/go/xs/xs.doShellMode" -> "blitter.com/go/xs/xs.doShellMode$1" [ arrowhead="normalnoneodot" tooltip="at xs.go:522: calling [blitter.com/go/xs/xs.doShellMode$1]" ] + "blitter.com/go/xs/xs.main$2" -> "blitter.com/go/xs/xs.restoreTermState" [ tooltip="at xs.go:997: calling [blitter.com/go/xs/xs.restoreTermState]" ] + "blitter.com/go/xs/xs.doCopyMode" -> "(*blitter.com/go/xs/xsnet.Conn).SetStatus" [ color="saddlebrown" tooltip="at xs.go:430: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]" ] + "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).Cmd" [ tooltip="at xs.go:651: calling [(blitter.com/go/xs.Session).Cmd]\nat xs.go:671: calling [(blitter.com/go/xs.Session).Cmd]" color="saddlebrown" ] + "blitter.com/go/xs/xs.main" -> "(blitter.com/go/xs.Session).Status" [ color="saddlebrown" tooltip="at xs.go:1027: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:1089: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:1091: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:1101: calling [(blitter.com/go/xs.Session).Status]" ] + "blitter.com/go/xs/xs.main$3" -> "math/rand.Intn" [ tooltip="at xs.go:1068: calling [math/rand.Intn]" color="saddlebrown" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/x509.CertificateInvalidError).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(crypto/x509.CertificateInvalidError).Error]" ] + "blitter.com/go/xs/xs.doShellMode$2" -> "blitter.com/go/xs/xs.restoreTermState" [ tooltip="at xs.go:546: calling [blitter.com/go/xs/xs.restoreTermState]" ] + "blitter.com/go/xs/xs.doShellMode$2" -> "blitter.com/go/xs/xs.exitWithStatus" [ tooltip="at xs.go:548: calling [blitter.com/go/xs/xs.exitWithStatus]" ] + "blitter.com/go/xs/xs.restoreTermState" -> "blitter.com/go/xs.Restore" [ color="saddlebrown" tooltip="at xs.go:1118: calling [blitter.com/go/xs.Restore]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/logger.New" [ color="saddlebrown" tooltip="at xs.go:864: calling [blitter.com/go/xs/logger.New]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs.MakeRaw" [ color="saddlebrown" tooltip="at xs.go:978: calling [blitter.com/go/xs.MakeRaw]" ] + "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).AuthCookie" [ color="saddlebrown" tooltip="at xs.go:651: calling [(blitter.com/go/xs.Session).AuthCookie]\nat xs.go:675: calling [(blitter.com/go/xs.Session).AuthCookie]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.main$3" [ arrowhead="normalnoneodot" tooltip="at xs.go:1075: calling [blitter.com/go/xs/xs.main$3]" ] + "blitter.com/go/xs/xs.doCopyMode" -> "blitter.com/go/xs/xs.buildCmdRemoteToLocal" [ tooltip="at xs.go:444: calling [blitter.com/go/xs/xs.buildCmdRemoteToLocal]" ] + "blitter.com/go/xs/xs.doCopyMode" -> "(blitter.com/go/xs/xsnet.Conn).Read" [ color="saddlebrown" tooltip="at xs.go:424: calling [(blitter.com/go/xs/xsnet.Conn).Read]" ] + "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).Who" [ tooltip="at xs.go:651: calling [(blitter.com/go/xs.Session).Who]\nat xs.go:659: calling [(blitter.com/go/xs.Session).Who]" color="saddlebrown" ] + "blitter.com/go/xs/xs.main" -> "(blitter.com/go/xs/xsnet.Conn).Read" [ color="saddlebrown" tooltip="at xs.go:1039: calling [(blitter.com/go/xs/xsnet.Conn).Read]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xsnet.Dial" [ color="saddlebrown" tooltip="at xs.go:960: calling [blitter.com/go/xs/xsnet.Dial]" ] + "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).Op" [ color="saddlebrown" tooltip="at xs.go:651: calling [(blitter.com/go/xs.Session).Op]\nat xs.go:655: calling [(blitter.com/go/xs.Session).Op]" ] + "blitter.com/go/xs/xs.rejectUserMsg" -> "blitter.com/go/xs/spinsult.GetSentence" [ color="saddlebrown" tooltip="at xs.go:577: calling [blitter.com/go/xs/spinsult.GetSentence]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.launchTuns" [ tooltip="at xs.go:1081: calling [blitter.com/go/xs/xs.launchTuns]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(vendor/golang.org/x/net/idna.labelError).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(vendor/golang.org/x/net/idna.labelError).Error]" ] + "blitter.com/go/xs/xs.Copy" -> "blitter.com/go/xs/xs.copyBuffer" [ tooltip="at xs.go:116: calling [blitter.com/go/xs/xs.copyBuffer]" ] + "blitter.com/go/xs/xs.main" -> "github.com/mattn/go-isatty.IsTerminal" [ color="saddlebrown" tooltip="at xs.go:977: calling [github.com/mattn/go-isatty.IsTerminal]" ] + "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).TermType" [ color="saddlebrown" tooltip="at xs.go:651: calling [(blitter.com/go/xs.Session).TermType]\nat xs.go:667: calling [(blitter.com/go/xs.Session).TermType]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/tls.RecordHeaderError).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(crypto/tls.RecordHeaderError).Error]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/x509.UnknownAuthorityError).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(crypto/x509.UnknownAuthorityError).Error]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.exitWithStatus" [ tooltip="at xs.go:772: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:853: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:963: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:1027: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:1101: calling [blitter.com/go/xs/xs.exitWithStatus]" ] + "blitter.com/go/xs/xs.doShellMode$2" -> "blitter.com/go/xs/xs.doShellMode$2$1" [ tooltip="at xs.go:541: calling [blitter.com/go/xs/xs.doShellMode$2$1]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.doShellMode" [ tooltip="at xs.go:1082: calling [blitter.com/go/xs/xs.doShellMode]" ] + "blitter.com/go/xs/xs.doShellMode" -> "blitter.com/go/xs/xs.doShellMode$2" [ arrowhead="normalnoneodot" tooltip="at xs.go:551: calling [blitter.com/go/xs/xs.doShellMode$2]" ] + "blitter.com/go/xs/xs.buildCmdLocalToRemote" -> "blitter.com/go/xs.GetTool" [ color="saddlebrown" tooltip="at xs.go:283: calling [blitter.com/go/xs.GetTool]\nat xs.go:311: calling [blitter.com/go/xs.GetTool]\nat xs.go:312: calling [blitter.com/go/xs.GetTool]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(*blitter.com/go/xs/xsnet.Conn).GetStatus" [ color="saddlebrown" tooltip="at xs.go:513: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]" ] "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/tls.alert).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(crypto/tls.alert).Error]" ] "blitter.com/go/xs/xs.doShellMode" -> "blitter.com/go/xs/xs.handleTermResizes" [ tooltip="at xs.go:527: calling [blitter.com/go/xs/xs.handleTermResizes]" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/logger.New" [ color="saddlebrown" tooltip="at xs.go:843: calling [blitter.com/go/xs/logger.New]" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "blitter.com/go/xs/xs.restoreTermState" [ tooltip="at xs.go:503: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:518: calling [blitter.com/go/xs/xs.restoreTermState]" ] - "blitter.com/go/xs/xs.buildCmdLocalToRemote" -> "blitter.com/go/xs/xs.getTreeSizeSubCmd" [ tooltip="at xs.go:335: calling [blitter.com/go/xs/xs.getTreeSizeSubCmd]" ] - "blitter.com/go/xs/xs.handleTermResizes" -> "blitter.com/go/xs/xs.handleTermResizes$1" [ tooltip="at termsize_unix.go:21: calling [blitter.com/go/xs/xs.handleTermResizes$1]" arrowhead="normalnoneodot" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "blitter.com/go/xs/xs.exitWithStatus" [ tooltip="at xs.go:509: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:519: calling [blitter.com/go/xs/xs.exitWithStatus]" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(compress/flate.InternalError).Error" [ tooltip="at xs.go:507: calling [(compress/flate.InternalError).Error]" style="dashed" color="saddlebrown" ] - "blitter.com/go/xs/xs.buildCmdRemoteToLocal" -> "blitter.com/go/xs.GetTool" [ color="saddlebrown" tooltip="at xs.go:256: calling [blitter.com/go/xs.GetTool]\nat xs.go:263: calling [blitter.com/go/xs.GetTool]" ] - "blitter.com/go/xs/xs.doCopyMode" -> "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ color="saddlebrown" tooltip="at xs.go:417: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]" ] - "blitter.com/go/xs/xs.buildCmdLocalToRemote" -> "blitter.com/go/xs.GetTool" [ color="saddlebrown" tooltip="at xs.go:283: calling [blitter.com/go/xs.GetTool]\nat xs.go:311: calling [blitter.com/go/xs.GetTool]\nat xs.go:312: calling [blitter.com/go/xs.GetTool]" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xsnet.Dial" [ color="saddlebrown" tooltip="at xs.go:938: calling [blitter.com/go/xs/xsnet.Dial]" ] - "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs.Session).SetStatus" [ color="saddlebrown" tooltip="at xs.go:1003: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:1021: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:1025: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:1064: calling [(*blitter.com/go/xs.Session).SetStatus]" ] - "blitter.com/go/xs/xs.main" -> "(blitter.com/go/xs.Session).Status" [ color="saddlebrown" tooltip="at xs.go:1005: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:1067: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:1069: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:1079: calling [(blitter.com/go/xs.Session).Status]" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.main$3" [ arrowhead="normalnoneodot" tooltip="at xs.go:1053: calling [blitter.com/go/xs/xs.main$3]" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/aes.KeySizeError).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(crypto/aes.KeySizeError).Error]" ] - "blitter.com/go/xs/xs.doCopyMode" -> "(blitter.com/go/xs.Session).Cmd" [ color="saddlebrown" tooltip="at xs.go:356: calling [(blitter.com/go/xs.Session).Cmd]\nat xs.go:441: calling [(blitter.com/go/xs.Session).Cmd]" ] - "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).Who" [ color="saddlebrown" tooltip="at xs.go:651: calling [(blitter.com/go/xs.Session).Who]\nat xs.go:659: calling [(blitter.com/go/xs.Session).Who]" ] - "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).AuthCookie" [ color="saddlebrown" tooltip="at xs.go:651: calling [(blitter.com/go/xs.Session).AuthCookie]\nat xs.go:675: calling [(blitter.com/go/xs.Session).AuthCookie]" ] + "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs/xsnet.Conn).SetupChaff" [ color="saddlebrown" tooltip="at xs.go:1050: calling [(*blitter.com/go/xs/xsnet.Conn).SetupChaff]" ] "blitter.com/go/xs/xs.doShellMode$1" -> "(context.deadlineExceededError).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(context.deadlineExceededError).Error]" ] - "blitter.com/go/xs/xs.doShellMode" -> "blitter.com/go/xs/xs.doShellMode$2" [ arrowhead="normalnoneodot" tooltip="at xs.go:551: calling [blitter.com/go/xs/xs.doShellMode$2]" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.usageShell" [ style="dashed" tooltip="at xs.go:831: calling [blitter.com/go/xs/xs.usageShell]" ] - "blitter.com/go/xs/xs.main$3" -> "math/rand.Intn" [ tooltip="at xs.go:1046: calling [math/rand.Intn]" color="saddlebrown" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs.MakeRaw" [ color="saddlebrown" tooltip="at xs.go:956: calling [blitter.com/go/xs.MakeRaw]" ] - "blitter.com/go/xs/xs.main" -> "(blitter.com/go/xs/xsnet.Conn).Read" [ color="saddlebrown" tooltip="at xs.go:1017: calling [(blitter.com/go/xs/xsnet.Conn).Read]" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/x509.UnhandledCriticalExtension).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(crypto/x509.UnhandledCriticalExtension).Error]" ] - "blitter.com/go/xs/xs.doShellMode$2" -> "blitter.com/go/xs/xs.restoreTermState" [ tooltip="at xs.go:546: calling [blitter.com/go/xs/xs.restoreTermState]" ] - "blitter.com/go/xs/xs.doCopyMode" -> "(*blitter.com/go/xs/xsnet.Conn).SetStatus" [ color="saddlebrown" tooltip="at xs.go:430: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]" ] - "blitter.com/go/xs/xs.reqTunnel" -> "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ color="saddlebrown" tooltip="at xs.go:594: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.launchTuns" [ tooltip="at xs.go:1059: calling [blitter.com/go/xs/xs.launchTuns]" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(blitter.com/go/xs.Session).Status" [ tooltip="at xs.go:514: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:519: calling [(blitter.com/go/xs.Session).Status]" color="saddlebrown" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/x509.CertificateInvalidError).Error" [ tooltip="at xs.go:507: calling [(crypto/x509.CertificateInvalidError).Error]" style="dashed" color="saddlebrown" ] - "blitter.com/go/xs/xs.doShellMode" -> "blitter.com/go/xs/xs.doShellMode$1" [ arrowhead="normalnoneodot" tooltip="at xs.go:522: calling [blitter.com/go/xs/xs.doShellMode$1]" ] - "blitter.com/go/xs/xs.copyBuffer" -> "blitter.com/go/xs/xs.copyBuffer$2" [ tooltip="at xs.go:186: calling [blitter.com/go/xs/xs.copyBuffer$2]" style="dashed" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.doCopyMode" [ tooltip="at xs.go:1063: calling [blitter.com/go/xs/xs.doCopyMode]" ] - "blitter.com/go/xs/xs.copyBuffer" -> "blitter.com/go/xs/xs.copyBuffer$3" [ style="dashed" tooltip="at xs.go:186: calling [blitter.com/go/xs/xs.copyBuffer$3]" ] - "blitter.com/go/xs/xs.doCopyMode" -> "(blitter.com/go/xs/xsnet.Conn).Read" [ tooltip="at xs.go:424: calling [(blitter.com/go/xs/xsnet.Conn).Read]" color="saddlebrown" ] - "blitter.com/go/xs/xs.handleTermResizes$1" -> "blitter.com/go/xs/xs.GetSize" [ tooltip="at termsize_unix.go:27: calling [blitter.com/go/xs/xs.GetSize]" ] - "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).ConnHost" [ color="saddlebrown" tooltip="at xs.go:651: calling [(blitter.com/go/xs.Session).ConnHost]\nat xs.go:663: calling [(blitter.com/go/xs.Session).ConnHost]" ] - "blitter.com/go/xs/xs.main$3" -> "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ tooltip="at xs.go:1050: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]" color="saddlebrown" ] - "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs/xsnet.Conn).Close" [ arrowhead="normalnoneodiamond" color="saddlebrown" tooltip="at xs.go:950: calling [(*blitter.com/go/xs/xsnet.Conn).Close]" ] - "blitter.com/go/xs/xs.rejectUserMsg" -> "blitter.com/go/xs/spinsult.GetSentence" [ color="saddlebrown" tooltip="at xs.go:577: calling [blitter.com/go/xs/spinsult.GetSentence]" ] - "blitter.com/go/xs/xs.copyBuffer" -> "(blitter.com/go/xs/xsnet.Conn).Write" [ style="dashed" color="saddlebrown" tooltip="at xs.go:193: calling [(blitter.com/go/xs/xsnet.Conn).Write]" ] - "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).Op" [ tooltip="at xs.go:651: calling [(blitter.com/go/xs.Session).Op]\nat xs.go:655: calling [(blitter.com/go/xs.Session).Op]" color="saddlebrown" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.parseNonSwitchArgs" [ tooltip="at xs.go:775: calling [blitter.com/go/xs/xs.parseNonSwitchArgs]" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.restoreTermState" [ tooltip="at xs.go:962: calling [blitter.com/go/xs/xs.restoreTermState]" arrowhead="normalnoneodiamond" ] - "blitter.com/go/xs/xs.doCopyMode" -> "blitter.com/go/xs/xs.buildCmdLocalToRemote" [ tooltip="at xs.go:364: calling [blitter.com/go/xs/xs.buildCmdLocalToRemote]" ] - "blitter.com/go/xs/xs.main$2" -> "blitter.com/go/xs/xs.exitWithStatus" [ tooltip="at xs.go:977: calling [blitter.com/go/xs/xs.exitWithStatus]" ] - "blitter.com/go/xs/xs.handleTermResizes$1" -> "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ color="saddlebrown" tooltip="at termsize_unix.go:33: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]" ] - "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs/xsnet.Conn).Write" [ style="dashed" color="saddlebrown" tooltip="at xs.go:675: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:671: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:667: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:663: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:659: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:655: calling [(blitter.com/go/xs/xsnet.Conn).Write]" ] - "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs/xsnet.Conn).EnableChaff" [ color="saddlebrown" tooltip="at xs.go:1032: calling [(*blitter.com/go/xs/xsnet.Conn).EnableChaff]" ] - "blitter.com/go/xs/xs.doShellMode$2" -> "blitter.com/go/xs/xs.exitWithStatus" [ tooltip="at xs.go:548: calling [blitter.com/go/xs/xs.exitWithStatus]" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.restoreTermState" [ tooltip="at xs.go:1002: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:1068: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:1074: calling [blitter.com/go/xs/xs.restoreTermState]" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/tls.RecordHeaderError).Error" [ tooltip="at xs.go:507: calling [(crypto/tls.RecordHeaderError).Error]" style="dashed" color="saddlebrown" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/x509.HostnameError).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(crypto/x509.HostnameError).Error]" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.usageCp" [ style="dashed" tooltip="at xs.go:831: calling [blitter.com/go/xs/xs.usageCp]" ] - "blitter.com/go/xs/xs.main" -> "github.com/mattn/go-isatty.IsTerminal" [ color="saddlebrown" tooltip="at xs.go:955: calling [github.com/mattn/go-isatty.IsTerminal]" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(*github.com/pkg/errors.fundamental).Error" [ color="saddlebrown" tooltip="at xs.go:507: calling [(*github.com/pkg/errors.fundamental).Error]" style="dashed" ] - "blitter.com/go/xs/xs.Copy" -> "blitter.com/go/xs/xs.copyBuffer" [ tooltip="at xs.go:116: calling [blitter.com/go/xs/xs.copyBuffer]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/aes.KeySizeError).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(crypto/aes.KeySizeError).Error]" ] "blitter.com/go/xs/xs.doShellMode$2$1" -> "blitter.com/go/xs/xs.Copy" [ tooltip="at xs.go:539: calling [blitter.com/go/xs/xs.Copy]" ] - "blitter.com/go/xs/xs.doShellMode$2" -> "blitter.com/go/xs/xs.doShellMode$2$1" [ tooltip="at xs.go:541: calling [blitter.com/go/xs/xs.doShellMode$2$1]" ] - "blitter.com/go/xs/xs.restoreTermState" -> "blitter.com/go/xs.Restore" [ color="saddlebrown" tooltip="at xs.go:1096: calling [blitter.com/go/xs.Restore]" ] - "blitter.com/go/xs/xs.main$2" -> "blitter.com/go/xs/xs.restoreTermState" [ tooltip="at xs.go:975: calling [blitter.com/go/xs/xs.restoreTermState]" ] - "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).Cmd" [ color="saddlebrown" tooltip="at xs.go:651: calling [(blitter.com/go/xs.Session).Cmd]\nat xs.go:671: calling [(blitter.com/go/xs.Session).Cmd]" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.sendSessionParams" [ tooltip="at xs.go:1000: calling [blitter.com/go/xs/xs.sendSessionParams]" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "blitter.com/go/xs/xs.doShellMode$1$1" [ arrowhead="normalnoneodiamond" tooltip="at xs.go:491: calling [blitter.com/go/xs/xs.doShellMode$1$1]" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(*crypto/tls.permamentError).Error" [ tooltip="at xs.go:507: calling [(*crypto/tls.permamentError).Error]" style="dashed" color="saddlebrown" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/x509.SystemRootsError).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(crypto/x509.SystemRootsError).Error]" ] - "blitter.com/go/xs/xs.doCopyMode" -> "(*blitter.com/go/xs/xsnet.Conn).GetStatus" [ color="saddlebrown" tooltip="at xs.go:435: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:438: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:473: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]\nat xs.go:475: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.exitWithStatus" [ tooltip="at xs.go:751: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:832: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:941: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:1005: calling [blitter.com/go/xs/xs.exitWithStatus]\nat xs.go:1079: calling [blitter.com/go/xs/xs.exitWithStatus]" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xsnet.Init" [ color="saddlebrown" tooltip="at xs.go:844: calling [blitter.com/go/xs/xsnet.Init]" ] - "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs/xsnet.Conn).SetupChaff" [ color="saddlebrown" tooltip="at xs.go:1028: calling [(*blitter.com/go/xs/xsnet.Conn).SetupChaff]" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(compress/flate.CorruptInputError).Error" [ color="saddlebrown" tooltip="at xs.go:507: calling [(compress/flate.CorruptInputError).Error]" style="dashed" ] + "blitter.com/go/xs/xs.doCopyMode" -> "(blitter.com/go/xs.Session).Cmd" [ color="saddlebrown" tooltip="at xs.go:356: calling [(blitter.com/go/xs.Session).Cmd]\nat xs.go:441: calling [(blitter.com/go/xs.Session).Cmd]" ] + "blitter.com/go/xs/xs.doCopyMode" -> "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ tooltip="at xs.go:417: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]" color="saddlebrown" ] + "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).ConnHost" [ color="saddlebrown" tooltip="at xs.go:651: calling [(blitter.com/go/xs.Session).ConnHost]\nat xs.go:663: calling [(blitter.com/go/xs.Session).ConnHost]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.sendSessionParams" [ tooltip="at xs.go:1022: calling [blitter.com/go/xs/xs.sendSessionParams]" ] + "blitter.com/go/xs/xs.doCopyMode" -> "blitter.com/go/xs/xs.buildCmdLocalToRemote" [ tooltip="at xs.go:364: calling [blitter.com/go/xs/xs.buildCmdLocalToRemote]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.parseNonSwitchArgs" [ tooltip="at xs.go:796: calling [blitter.com/go/xs/xs.parseNonSwitchArgs]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.restoreTermState" [ tooltip="at xs.go:1024: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:1090: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:1096: calling [blitter.com/go/xs/xs.restoreTermState]" ] + "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs/xsnet.Conn).DisableChaff" [ color="saddlebrown" tooltip="at xs.go:1055: calling [(*blitter.com/go/xs/xsnet.Conn).DisableChaff]" arrowhead="normalnoneodiamond" ] "blitter.com/go/xs/xs.launchTuns" -> "blitter.com/go/xs/xs.reqTunnel" [ tooltip="at xs.go:645: calling [blitter.com/go/xs/xs.reqTunnel]" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(*blitter.com/go/xs/xsnet.Conn).GetStatus" [ color="saddlebrown" tooltip="at xs.go:513: calling [(*blitter.com/go/xs/xsnet.Conn).GetStatus]" ] - "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs.Session).TermType" [ color="saddlebrown" tooltip="at xs.go:651: calling [(blitter.com/go/xs.Session).TermType]\nat xs.go:667: calling [(blitter.com/go/xs.Session).TermType]" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs.ReadPassword" [ color="saddlebrown" tooltip="at xs.go:983: calling [blitter.com/go/xs.ReadPassword]" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs.NewSession" [ color="saddlebrown" tooltip="at xs.go:999: calling [blitter.com/go/xs.NewSession]" ] - "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs/xsnet.Conn).DisableChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" tooltip="at xs.go:1033: calling [(*blitter.com/go/xs/xsnet.Conn).DisableChaff]" ] - "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff" [ color="saddlebrown" tooltip="at xs.go:1034: calling [(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff]" arrowhead="normalnoneodiamond" ] - "blitter.com/go/xs/xs.reqTunnel" -> "blitter.com/go/xs/logger.LogDebug" [ color="saddlebrown" tooltip="at xs.go:593: calling [blitter.com/go/xs/logger.LogDebug]" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(*blitter.com/go/xs.Session).SetStatus" [ color="saddlebrown" tooltip="at xs.go:513: calling [(*blitter.com/go/xs.Session).SetStatus]" ] - "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/x509.UnknownAuthorityError).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(crypto/x509.UnknownAuthorityError).Error]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/x509.UnhandledCriticalExtension).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(crypto/x509.UnhandledCriticalExtension).Error]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(compress/flate.CorruptInputError).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(compress/flate.CorruptInputError).Error]" ] + "blitter.com/go/xs/xs.buildCmdLocalToRemote" -> "blitter.com/go/xs/xs.getTreeSizeSubCmd" [ tooltip="at xs.go:335: calling [blitter.com/go/xs/xs.getTreeSizeSubCmd]" ] + "blitter.com/go/xs/xs.buildCmdRemoteToLocal" -> "blitter.com/go/xs.GetTool" [ color="saddlebrown" tooltip="at xs.go:256: calling [blitter.com/go/xs.GetTool]\nat xs.go:263: calling [blitter.com/go/xs.GetTool]" ] + "blitter.com/go/xs/xs.sendSessionParams" -> "(blitter.com/go/xs/xsnet.Conn).Write" [ style="dashed" color="saddlebrown" tooltip="at xs.go:675: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:671: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:667: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:663: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:659: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xs.go:655: calling [(blitter.com/go/xs/xsnet.Conn).Write]" ] + "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs.Session).SetStatus" [ color="saddlebrown" tooltip="at xs.go:1025: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:1043: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:1047: calling [(*blitter.com/go/xs.Session).SetStatus]\nat xs.go:1086: calling [(*blitter.com/go/xs.Session).SetStatus]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(*github.com/pkg/errors.fundamental).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(*github.com/pkg/errors.fundamental).Error]" ] + "blitter.com/go/xs/xs.handleTermResizes" -> "blitter.com/go/xs/xs.handleTermResizes$1" [ arrowhead="normalnoneodot" tooltip="at termsize_unix.go:21: calling [blitter.com/go/xs/xs.handleTermResizes$1]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.usageShell" [ style="dashed" tooltip="at xs.go:852: calling [blitter.com/go/xs/xs.usageShell]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.restoreTermState" [ arrowhead="normalnoneodiamond" tooltip="at xs.go:984: calling [blitter.com/go/xs/xs.restoreTermState]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs.ReadPassword" [ color="saddlebrown" tooltip="at xs.go:1005: calling [blitter.com/go/xs.ReadPassword]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "blitter.com/go/xs/xs.doShellMode$1$1" [ arrowhead="normalnoneodiamond" tooltip="at xs.go:491: calling [blitter.com/go/xs/xs.doShellMode$1$1]" ] + "blitter.com/go/xs/xs.handleTermResizes$1" -> "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ color="saddlebrown" tooltip="at termsize_unix.go:33: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]" ] + "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs/xsnet.Conn).EnableChaff" [ color="saddlebrown" tooltip="at xs.go:1054: calling [(*blitter.com/go/xs/xsnet.Conn).EnableChaff]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(crypto/x509.HostnameError).Error" [ style="dashed" color="saddlebrown" tooltip="at xs.go:507: calling [(crypto/x509.HostnameError).Error]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(*crypto/tls.permanentError).Error" [ color="saddlebrown" tooltip="at xs.go:507: calling [(*crypto/tls.permanentError).Error]" style="dashed" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.doCopyMode" [ tooltip="at xs.go:1085: calling [blitter.com/go/xs/xs.doCopyMode]" ] + "blitter.com/go/xs/xs.copyBuffer" -> "blitter.com/go/xs/xs.copyBuffer$2" [ style="dashed" tooltip="at xs.go:186: calling [blitter.com/go/xs/xs.copyBuffer$2]" ] + "blitter.com/go/xs/xs.copyBuffer" -> "blitter.com/go/xs/xs.copyBuffer$3" [ style="dashed" tooltip="at xs.go:186: calling [blitter.com/go/xs/xs.copyBuffer$3]" ] + "blitter.com/go/xs/xs.main" -> "(*blitter.com/go/xs/xsnet.Conn).Close" [ arrowhead="normalnoneodiamond" color="saddlebrown" tooltip="at xs.go:972: calling [(*blitter.com/go/xs/xsnet.Conn).Close]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.rejectUserMsg" [ tooltip="at xs.go:1046: calling [blitter.com/go/xs/xs.rejectUserMsg]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.usageCp" [ tooltip="at xs.go:852: calling [blitter.com/go/xs/xs.usageCp]" style="dashed" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(vendor/golang.org/x/net/idna.runeError).Error" [ color="saddlebrown" tooltip="at xs.go:507: calling [(vendor/golang.org/x/net/idna.runeError).Error]" style="dashed" ] + "blitter.com/go/xs/xs.copyBuffer" -> "(blitter.com/go/xs/xsnet.Conn).Write" [ tooltip="at xs.go:193: calling [(blitter.com/go/xs/xsnet.Conn).Write]" style="dashed" color="saddlebrown" ] "blitter.com/go/xs/xs.copyBuffer" -> "blitter.com/go/xs/xs.copyBuffer$1" [ style="dashed" tooltip="at xs.go:186: calling [blitter.com/go/xs/xs.copyBuffer$1]" ] - "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.doShellMode" [ tooltip="at xs.go:1060: calling [blitter.com/go/xs/xs.doShellMode]" ] - "blitter.com/go/xs/xs.doCopyMode" -> "blitter.com/go/xs/xs.buildCmdRemoteToLocal" [ tooltip="at xs.go:444: calling [blitter.com/go/xs/xs.buildCmdRemoteToLocal]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.main$1" [ tooltip="at xs.go:790: calling [blitter.com/go/xs/xs.main$1]" arrowhead="normalnoneodot" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xs.localUserName" [ tooltip="at xs.go:803: calling [blitter.com/go/xs/xs.localUserName]" ] + "blitter.com/go/xs/xs.reqTunnel" -> "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ color="saddlebrown" tooltip="at xs.go:594: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs/xsnet.Init" [ color="saddlebrown" tooltip="at xs.go:865: calling [blitter.com/go/xs/xsnet.Init]" ] + "blitter.com/go/xs/xs.main" -> "blitter.com/go/xs.NewSession" [ tooltip="at xs.go:1021: calling [blitter.com/go/xs.NewSession]" color="saddlebrown" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(blitter.com/go/xs.Session).Status" [ tooltip="at xs.go:514: calling [(blitter.com/go/xs.Session).Status]\nat xs.go:519: calling [(blitter.com/go/xs.Session).Status]" color="saddlebrown" ] + "blitter.com/go/xs/xs.handleTermResizes$1" -> "blitter.com/go/xs/xs.GetSize" [ tooltip="at termsize_unix.go:27: calling [blitter.com/go/xs/xs.GetSize]" ] + "blitter.com/go/xs/xs.reqTunnel" -> "blitter.com/go/xs/logger.LogDebug" [ color="saddlebrown" tooltip="at xs.go:593: calling [blitter.com/go/xs/logger.LogDebug]" ] + "blitter.com/go/xs/xs.main$3" -> "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ tooltip="at xs.go:1072: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]" color="saddlebrown" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "blitter.com/go/xs/xs.restoreTermState" [ tooltip="at xs.go:503: calling [blitter.com/go/xs/xs.restoreTermState]\nat xs.go:518: calling [blitter.com/go/xs/xs.restoreTermState]" ] + "blitter.com/go/xs/xs.doShellMode$1" -> "(compress/flate.InternalError).Error" [ tooltip="at xs.go:507: calling [(compress/flate.InternalError).Error]" style="dashed" color="saddlebrown" ] } diff --git a/xsd/xsd-vis-fixedup.png b/xsd/xsd-vis-fixedup.png index ffa007def0909024694e51a45635edaa43861cdf..4a16553f8c30d193c858cb873e2a7af56a6a2a39 100644 GIT binary patch literal 1114577 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

    FZ6R#$#Qo1i(OnizKQwsW`l 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 ~!L{IrGDC@=P41cMfyy&)* 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 z­B%(ncbw9H&Bd9;j08CJpF0jV7;XGc6gSlW)1{BAZ8QGJGg)RnFlL9anCx`OK! z6wknBQGYq%f$lk4B?i`q{CZlab(W*8z-w}d2OVQ6?71|kZ1gx91 zvfB=)Y0oR3qehPnaL$I?9FH{bY{@AbZk}#*CVq0;VZ?Te}y=lUoSa!Ph_C@QqTHy0IzXHbvzurJc^k7O5U2@$$Lb z^Zk7yoLA5Hy}i-i;6$Vy)vKS<(Z!GJcQ($umg;K-^S$~~Bp-h#+F!C5pytZtfaj6O zAu-}J=9mV-rf}uKWUtic>^77F;nmf&tf^AuJT35=mhebV1?;N-=1x|Xhdq0A1%3P9 zf#&A^XB%jk)~~XC!SZk*DhWaMbeC1$!HtL>^xHptC+aC#TcH~J#}5(+MNe2P!9b{` z2%57iep3-@+AMyH^!5A5roWWuH*dSh+-IG#*e^@rUCYOR7kT@6HIDXO3525Bv$SoGCk2 zoNg}veIMhxzlG48tV{JBajdUn1rjiansW!gdGqF%M22Apu}039au!7j>32*_Bpr|q zL=d7to`P2%A~4RfxRQYWo}%H?mA(jL<`(Z{Q3)& zg}}(-uF2uA^Gw_C+ERaIzay5|D2BGBF5KgIXY=~A7N=m^5kFuTslqF-{ZVTq07L=) zdT%%CN%ET}r$Dn--0!7mat6Y?>vrlwGYyFhdi2!*`=jKaUanJ6ix0u)PPR`_kS@PcH7*#&c>V!am&^jwqNpLT-ZZyPruC8-n?Vb2Z~0paa6+YEay*|V#xc#mec1gat9aPDf|-boIhpUH3%Y3v6zVEY{djS<7EYgz^UmXhyQE1S!2;W7>nFHn@$Q{6uC zchP-uvlqM36Mas0J&PJb=rVr>TR+eUOwYqlb_ptvjMDfW-7x6*A99gj%64B@hp}bG+McB9w|ziaTH5XOO)*pAvaJ%j-bu)%=tsipw{S;ISP$y>oI*5>h%U zY|O4WFg{?Ob+`toWMp1_JP7cIx+8U@q0r&hRm<9uPC6v%D7ty!qk(9K=PU3xa~sj8}K&7^kO{XQSI zg<21@zzyfa3#bf1B}$sFovB0?%;@=ObNX4^bgWPgD-X7pERE|Xq|VP36?*z-vIg6) z#_b2-6JGK+B=^ijrA!$7m7@YAMsq*S3zq|hNvEjRe(o3CAp(GON3TbNzmJE~_QxOK zCg?=p6EMYFXjk-E4o*Y=4y(Sg z+hgd5u_Q}qQRuF$#~ZCY81@U2q=QH*g`HQod18A#(9*2qubSoRePITs-=^}}++6Go zTVy@{4#jMkNO=nhUL+mJH3%w-gy3}kaI5(?wvM9o0rTK|Pe`{*;S~W-*z3gVR3)s$ zsAW7;#Mz$F_ByFO(GCFG!pIKLu$^NsT~vIL>zeBnxvNfRmPOl4O;s$-{I4J@+D|l4 zJiG?t`8 zGC&KjUhz1Q(2xaz{~ch`&K1g6J_$vx%2dTR$E(xHG}g34QgQ+HP}C1n5*gk5@r5G> zu^i$}5s?{)0vTZ!JrAh@N869oE^6t3UFSK1_B`M1{fw*=TSc80*+Su!-+12+qhag2 zbvo53$`$9E%i|WGg4^p8k@g^>z@Q)$<_-GQ!zQ;t#|B~@h8V^70b{UCrJNFKW2?@$=^8d(<*hDDlbSj{CFWp} zZGZM{q!59G)%0YkN-q$P%@b_<@krEMzIw@JB(*Y(0YrY#y{jO4ESn%H>q~OfM2AK+ z`<~>MLLAis&E1fFg7hFPHtx=l!23x-9nE;52X>*BTe1Cl^Y9dU0fdQ`aCT62YU3mi z-m^~{=xQJZLBaMu>k7)CfdA?j5iGG3-v}M(+&q1>at58ueoWyUIgv6D3hr#)w;J|5 z_af<_8wvx@z;ME+!Is@U`Nk}wr(Ul;Wqw&WUu(4d{@F+*{uF<-hr7&!k7u4sVC0m_ zJyF|a9zHxj5-yss<-aAWuXlH16ZI15yVPAalDc-JC4ch7c(`oMW8w6trq-O=zgxun z*?WA5XkAA=FLx}LEgw9_6|E0A8w8BWLM#BuT!0RQRD9O-WLqTSLwfH;eZny8qE|N= z!^rm0>~9^yQiX;xvUsYML4Y1^LP17!0AD`DRi(G3`U!mmxmx-Y;emfK^)U0k?d|Ws6&z%4952u?SMaCz}zecnBjFN*l z66X_*fn_Kf^&1WTk$2_0VfI0F`rU@Sadcl?Qf6|~o~G?e8s9$sSkx4eARyXh`wB>) z6;?>agHR}0`TQedZbIBcz&J$2rVFUDK^KLS&QJ)?`^`MdLTsFC~8b;#*2oWeczzA=8~KS^)A z9L}OfaSl0O*BhKro6q|NS$4ThFx zGFpu4R+!&;ok6%9wz?KCL|4|eX$Nd;{ed|7TmEi| zwZ~QDB@i8L4u^F~Ns2_r`D!QEt<-8q`_b>g*w4F$4gN~X_LcSu`Kovd!eDh5u*`vO z=hKC_-qH7iJ6&Spjh>ISB%V+YUHHn@i#bd1#CE;>n*RRpgaHpznF280?$^u(C|LIN zs*_y$TXL^#HL`Z?#m+4}VCCFc_Wjwt$M-OoWtfw)Ss(z~^!NWfxegfIkDqw`=%f*a zLN7!?RU6pd`_ofo?uE%cTa*mZ6)^{@uqLNZ?D%>PP2*YhD-4E`FfJPAL@(s$OPe~O z|I87?v9O;B*hs}-nDNH(X|U zh@h|s3~}!sTRpl<`Zv0gK`*6UO&n!$bG5hofPLh=+&K`J$=3-v3fF+BU_9(4v2=>s ziE<#pIepN!vi@mRh*Qmii&PR<^b%P|sm&FsGVNX5SYFhzNEUtVUH`l8=PHa6L`Mq% z1u20s;}WLGH_Kz`Jz{MA#?_j?GFZ~|ED8ez##lWJL5`Wt7Ng>tbJ>@h64}n<%GZaXm&D`6_RiF(G^k; zhHS1Y0i#4qpb0t&>FvKZ48H0KnMC@BhlnbX$bM|xalv#NvH0CmJl?0QOI0%cWH3dDTx=tz73LpQvf_V4DlL-=s9 zSrC*9;&AnBNOv!Rq>*esL21CaGX1T-xTENqT?Serrspa15 z*vYCZG<$t+`0S3|_l}}*{L8VO)8xH8q%=_C9a&DE@ri)=TP;mPWRZ@Em(f~x!yt&p-6J2V49&Tk1++YG>%_L2(h`&!Phb!d_k*j~h!+QjSHs@57Z#|Rnsb{|HT-kV z=WT6kZ2|B|)7p^J+Y6Aov(m0h6j09tJyr3uC1hWFpv z!DK_ZSYLKpTv)^0an#h*vX$EB>gp_EO|!MuL3*F&n`SCGB0s1wZ@aG1D6L-*{#JwT znr6yg`S!(+Gu@mBE9GjUfGQ!;IVfAP=1 ztKJ!ZHg@OWbVtvM6}=lW+7f%wAh_FC`dOP(Vl;yc$hrhllmHVI z{5P|%>h?zArw*~mL#xyD`&(>Oa2=Ah_h7-|za3fEEwH zB*&zMR07?R=PO_=b(4MD*2m)-g)gbF%=~-W` zFN;32e(d?9Dj2aE?2@%>?=+a4~znQ`TDqEJ>Ie^dp;6tK>dtIJdd`jqq0|}-q%^?1#DZUX zn4O3g)S227n|0``ayjYiZ3Jf2;p1^r(wZdt7S|l{ggy8rLMFH~KPwFdpN+k2GZTg8ZjUO>KYhDtbZLooUie;gp$BfOPHA5V3+Jjk0-xXn&swvUw1vhd(?Dr zb%+(TvA%DPMuGyy=4Kpa+`S>JJWquYcCs~^|0RT-%Ra?m=X`RC8;7?Dz~UnvCByYe z=cl?mZx4G-;keZgDhvFa8klXzEG79l9~1C+ENnq_SC;D2h>m?YAO(sB&<_N#jMglX zab)^03$tiixd>?ffM{BtL1$u1XTogTo4+d;YhdY{H_-h#I_h>Z2ABHfCNp!Vlq3Zx zYy;CLca!FhbdlZ{?MgpId+qZ{$vX zsxID%wh<6CGh^jLW=An+UkB-~|Eer08IR+Nlh400Mm-3=3rk;RG5JE%QmGT%ra)77 z57+9-GuELAnB7h3Gc7_1AJsk<7MnTtRJF${}XT3z!!V1PX= zPjLj*g=mdm4gsbo^`@pOAvVsJp7(4>XX6*VxG)a^bsF&b-U7m6>x(qUf^$F|>aQ&a zmFJHnP0ZI|SY(*mINcnRYNg8rR(-Nj!U2<}Nlro9(LaRFPAe;bu#)po*dxI! z7k$=!leuGXnv;KAK?H*i$@?eMfnBDOCp$vBdsFH`#qr5Gnd`@Y_y^yOgB8?RlyP*b zvAT<8qYgXf!v)Si92aH2Zkp9(lfr&Lvu6O!MtWSNj~jf&&H?9eBoS%<@}BRSAeiT? zr`0$kOVqaPFB_mZUg}UhF}F}ralm5GknHGhV6r&X#T(CQ{hch8HWELVT%}x~JW}RF z6USyLtgruMrsBR?7KH4tx|Y3tbl;|HG3hiKWYQ@5O3GZJs3Y)43;rGdR$_nDKHYYc zaWIyVb*oh@BNUx`e?;*|kPA4&^^F3t$X`3EID8UO zZ4OUBuunA%gY7UfNOcBtUqDvfRP-D&Xe95@IYAXMp#5G~??A*^pVnDRBxT=-KB>t3 zB<}K#7|i}_8{D;9-@2L1%?YB21ny&OMMNmS4gDw}_xPEhx}fnh;kTDVT0g%#yf8bh z*2T|PO#*ZOjKU(xdyMuCg{Bkj=nESsyVaBZ`zLPuMbXG)?F@^PTkmpaG4KDU1-SO$ z3y5tnOV#Yv}|hdwC}idrF_ zFQHTlH2VxsV-n8?(&|8$@7Hf{EXODlR^Z0{MXxUZQi8n!bWD*z(L%Z!jmc^!r%xZ25X4*JH0XClG?#eXmjQM^eAI z#Ic!r7bLpg3e=^cBz^6dYFXZHkZG| zDgjLF8Z~U&(qy689=(xnw`iQ)?kf5sWlkWNMMlT;nwfhdx}Q#4Ypv(vyeu5n4+FPK(Rk^Ash%d+(~cI3ljJ*2ejoWD1^pi zZ?ZXifPcMI_F55Yf-+sUCzi)Xh?G823GY-0W)qC7Zc0F3jec z6+7H7hrXoBJJ4Hd2=r#OR7JSCF040GF&*PwET>u1pRC$_{>MBlXB=n?OC&(=O@V%* z8p`Hw!?*LuG>x6+dTe!2c$z^kG5P`1JZ>~yIy`RkJC{&16Q)6BR%mHed;6W#*!uz#-8nB&hP_+-dulOQN#O<77494 znle>M559Nd$5WKtO)7pvA)u^|gg26Kzc2;He_$!ZSg(nc_D=SgbtKKd`nQjUoj#>j z!2W{d{e)O{Lue`*Os0b`VsyDnLhSQ8c4vU*=bz4+Cuz^8XUvh&??*?!v6T@a6 z2@F)u*c@nYEB1Ht8+1n*tyJ8(vf6)axceBg9%O2>y;`zC)X~`)!yaF@T7!GSiH*~q zjzj^{jO#2*4EE!Es5|)3o9Op%)R8T@IGyA9?M)bPVL`o z%h1${$fX=80Qp|TJgoHZ$&n5p<(mD|v)}h|M#9cbhf$o840oOZJwX+XWFs|AD^vi7UrJmv7}hF6nXw$|vqHlHF+!JW3;#>2kA1 z-xLIK85!p#raOrnX0uimvjw{dNLJBD=iT=oOF!b?wPh(4$o(HxZyibV*2eH!9L4-QC??(nubvuC+pH z=?RY3PbHH1?8nkC9;csRIW5)9g9e(HT(z?hg;TMln2!!CdRhqhd}lL*)mRf$TTdzP->*N7VzWJZ93Y2NFxv>n5?^&bfCWnY(Bt_Ls z0-i)|zEcOH5ICKQ;1*d869>s{@Z3~H7~muOCn*L!_EKUji|t-HCn!K{{_ zyw_|<2v*Iy+=+WoXcnRIy7|gapEQvx^alO;>EAy=5A;-28b<1mPj^JvK>xdYOzu+> z9pmkHZkXSL{sCJd^^6eYq?*H6c6Kku<0Cm_wcGS@gprcV5K##rTKAfZG+ zs;pwMuQUCCpRBF*5}m^%0zciT#O;<7in}#*pDKzB#pgzYvz&7@9BF5r$XAa$(AF4l zv*u{25ohM8O9$EGV0^iNt z_RH{~X|e#2?91j|JPu+L(SvGakW$5-|0Gnm21ona(F)yago&K{%<1Xe-uw52dCb z0HiWWbzoQANwwJtj*q~eFtDbVs4s`(%oF0{70W&vhH0uZyU-(I%MwVdVSQfdQ)dS*%d9 z8bx1~Ji(;1w1kONou6&+$kg|7Vp)3anVU0QoRBPYbBx0!W`}J5&m}s+MDDUo7F{Mr z51gS}GG?~GwZS*kO6FurPU52wz_62Q_o=sg=wnM3q=8aat-*uYQez^|fmyuK$)f#2 zsn`C?G6M_CSQ>vhc#E(^oA=77$kdEh#9HRt?-(hM7l@N@3$xgnz4w@nRb@%{E^!J^ z2@y8l6JJ$ITPDMOikkhO&Bg!c*Gx#p56Ed~U@>&?!o$UzIRhLK(b0YGEj-X0i%n?G zs0rTbsLeSccQAO*`x@+Dx**>vC@FDF(CqDzciBt^F9XN9oUUmR!*o{u+A5V-RT=*| zMBbUJcy>>zwLR5<&1x*Y)m71HXk^6i`Q_gOQG9n)IvEC8PeM)E@ZG7N1qU9inbQ-_ zN43%SoWUwyV$zxF%f12<+z=+x+(`cfcitz@L#sWh|K!(zsbm+;{8aL}0J7__U0L<` zws%mEB+Z&BeTa%a;e#cP)dBJIq0RmMVBl6jg8TF> z6?f2jFWTcPVYgK4PEHtSVrI_q5Tq=e&KJIWZY|$pL=+M#gOaEjkok_4+-JQP-F|li z4D4tgUTkuPnAZ4(QR*Nd36{?nn0@(r1wEN`jjmqzZQJ?bl`SKGQ z>ut^v`n3t!_sO2+4)o`Jt-ye0IZDupl@k?V`^nRy>N^E+`JuXAR5bu#pBW3Q=K0r< z{P+mcAG27=0y0fRjr~qhGfYe+Lc-)1=w^v(W(~6?l+?5t2YrV7f$`|>YDid$JfR4*)yGuysN5!z|ih8E#;uN zf^Xg>TY%)rlE(=|^b+A8H?5(dT%_bC``LC*WOTkqVr%P^``|D9PCK_aV|^3d7k7c=l$5Oo(d5}c?)#_)iQ`P9x6 zQSlbMCH>_vsz1YT$2D5|&zY2@HcljhtX*XRwx#t;oV*|c1T%#mc4Ho&i zOu-*iPD-TdEM7TxsL5IZ9gL*>VSl1}>^QhW*|nE@N4pmx5nbkz8K3pPS_a3|(C6IJ zjb$2GTZxJvbqCZcz1-XCF1ax2(F9ix;KvxrbS$!caHCPlYWU zR~h@JfpxR2IXpco=MyB?$h4uh2dyFQ5+>60XR+-IQ!xPcZVCO@Y6tAOl8jkY=Fu9S z9lKa8bdLXxNdu05yCTYDt{9u7c{-FX4gr-28YnF-{f2#wuJ*wZi`>9KgQI9bmE1ov zGSXt(MDFxU?%BkS{jB>oA@#`Om#qcSiIRusxcB@6#%ZT{3X4IXY5&SB^QRJGy7MgoSXIlDve(~w0? zQ=#WZ@UK-1IBUa4zol5v2l;_UG*>+6f9~pb-CX$?D-;V1&u^D$HdX!Vcxv9VkS#zW zQVT=8x!A21doKj;2NRVCT&ldVL1L!2tu`_^wCHnA)Ofs~{l;R^HQqeKd8YO6J0JdQ z6yTF_=#!d8{k*WbVF<1z&wn>4@s__2sIwq^H!-vjdoDT@y7KPOH5XKEL&Z&=dXB&{hASI^gw zitSrP#mnHhlHRGQFk)>@`wQ708RUF1pcUDEI(3iF;jy|OZ;>*;zS!^CpZB%?NERw4 z?E9_1dD;8LV?K46V4mFYsv|k=K3&JBN2}E%a5W9BFU4{(??&@6wj-YJlhN;|W~?LY z+32D?1pJJ)a6`Yv$T^BmZJcs0B%+q7^p4X zHXiU`@af}5_9o|o2Vy!ousFJMo72IQW(UuaY^Ng%Hva2~KdApQL7{+K1&W{vvzo-g zn-u;^RuTqKow~gyaZZ|;z(SyKX9lS9d-c}9>}-*xzl#YWA*Xq1r${z-c6#82-nLp0 z<;fA{S%uoYS8slmB5S;D!npY{_!kT_uS#z~2fnPg+-P0*^zO?mq?{ki-gkkeM4BtA zgAwdQf0>O=jf=JK1WL7ALfFG`J_t3Jdd2fUlM}=bv1;s_@LQQO{<}-N%U9ghrh}7oAN|5|IC681CJMFF+DXD!9#dlytl?G6@6r!2 z<9^lruF+1!ONYLji8AHXv2Ma0NG`KM8$N@tIZR`|*_3`-xYJ~;HYp?P1xzGV!(qei z6JC-|6!D~F&FkT>e_wgIWpL{bi>2u0Xel*Q*t++I;d?nHbv8zBRqCxk5Z;S8s(2jLgl0X#t|} z(}jwUA8(i>7&qb-$zv_Gs?hLq)ceqTgAG#jSP*W^F1o0gx6finH8fk2)*uddv89hH zjmXGJ{GL(t2Jw^*aY8INdm*y*f7#yCnhXT2r{MP7rtVTF9fyr^XGce5yu~&+1yAN$ClmVeZF<75;N9JO7c!0YGE|CO+a6v4q_(qfL?F}Lf6HNS zA;r4&4o#ECUAUKy$rZblm6fI5VdpS8^K5pUP{1vqJJ^eil@${iS*kx4IbEo`KblVW z^+V+*jdCFhJ~=tUa^S0n7f8*Y^d-5wrQ$dout-ybUGT-K8?4Fo< zqsiz^Hhkcg6FiYYU8`>dO;k$vvSy(qxNyrosaAhun3MBGzhHS91xHo~T%;4pfBpvR zXXYauAu%xc9Lt3D5PPL>2|3c_-)~7RY=qIvA3hD_S<~_X8EHZ&6l108SE3x8kGmd ze*a}$Z<~c{|0UF;zOjMeTudZ_&3j2&!+FPi8}Evilp)pt(b*2RAi+|_YG)Kehmt~@ zwk=pRB$maJX(6a=Hevarq$MgtX)}r4`eGfLX2g8we+Asn*a98L=GOO^&+f)QGO{)# zl2SzbMnetrmb2!XqTXE@9UAj<@Xgp*_oYQmL@$or@wBwVK-;L7i~DkMkU(u{a`v3gwOVu$+Dl5pXivM zV7f$qZ6cxJt~0o?8EG0YuOcEpZ7H`gpd%?;{hLxiSogC?^#^3fK}}tKT{ZW;m)Cvt zG2LSbiY}6W&B|)uxfJ43^3}-j6(&J&RFOaUfZ)EPFDmq@J{_NAN^mUkX0i~)sHptH zl;5(9jn&)iF?ru|6KNZi*Vgy7tb_&4pXp z+e;i@Z`A)PxyblMs?0otu{Vq;)8Wd@FD%0uOdKt~S%w!9E*pgoFmpDxq>5frGqW&f z*!gheFRY-h85pR+IzLOZAw1pf)eCS9yHH`lX1m^k?g7UjzBmZ*`@3r(afQKk%HLi$2ET-{n*I+ zFPpxY_cZBij=SyiLYK3)>hAd!5fK&Qbfr@Mo6;U@!(&RlYmy#7+Ea_J^8(`@B@SLj+j;}?wHO8 z=$FhKBQ6!lQpW+BN~2lSkYTVbv$9OBUS~%toIBJtx6}@?)#3VDII$A-#y)|=4v&8R zJY6Ve&Mzz*x0IManX7yf!hG6MBZM%_kaW~Ph=MkE&6*b%mgR7A@p7&f4wPrQCdsGS zE+K=(3WcXPO?_h}oM5U|S3uGK%2Bd3?7;p=jU1}=j}h0*`}}YnokBXnWNhE6g6Y6P zWP1J;Lvd-NZhNnzyp0@4DS2Jt)+rmycozy=_V@#UFgyX<=kyvitPa)FKYV>Dm5Zh` z&CWE?E#;cs{a029w9p#6Vg|nd^jr9H)}N!**_?p?PLKaY3{@EMY4dYmGkat@ z49r7(Za*CWv;GdO23wB3o{P8bJ|B9dV1`TMr6+Zke_;{)h|zp$(cIq*Q3GfN-rt5v z#BXzbSoY%R2Vz=1QMh#JkN7RHom83CQVo9c9FXMIqJ7(|77w0qI!9AeQ^O#}(SVE| zE7P>GfOIxuct457u1j1xg?}0np_2%*YRwU6)6qgA%--;=JLg8o2~H%iSe z5+1>E>7Z=o>YuR(_hVMwZ@6*WuND7J7M& zeb+#p&4{3K!DmBbV*+q0YK@ors~e)Hz6gF`;+8|Q#xZJK9ew&-6DG}-k@Xa6q4b}g z79E#9_m`vbvyI!#8v;Nf1F%3g-5xMG?eR=*vmV{68JqfCGMS@MPnM_|9EUS{N2hKX z=$zf8olIamAshww2)ef2k^=_Szoza6MhgA^9xfl$)CV~E}c9aE{w>mzxQ5xvmi*- z&%VJ;Bz0LFY{5dho#VD-@5MoZZnd*bykWsT)YuPbu=(cxlG$a_;-+Igw@X~lEKWew zjP4>*%QZfC za|WVw91<$S_nO?PzyJD`gkFO- zdpGR_su*cAGo)Xv_Vc}Yc!1P(afN!EpM$A^((1{{$9aGOTra*gU?+Nx(mp2kQ1VpA zIhMWFf%urFC~h!k8nF|VNPGdRQOeJ8QS$ag2LoSe0KUlzOdCTq_UbE1H~2t!&r^zx z5C6);5W$ImQ@0R$(sF51JTN(~H0H1FerxHO)INdGAHeT|#;Nzrbp zY*n!E~b&%>*D5SziId7V-KzT;W?4u z!oH>lZ1ziWu?0}?XJwG@goTTK1_L;T>NG~C`k5sY5v$6B}4+P)GB zBZ$<^9!IC=?X$C!uj(jt3`SpPP*5#*w`r8*k-R_NP%XgciDM*X*`u;bZS@NyhlAQV zLd>cHTRaFaf}WlDS=mW5x#yixk+Vf`v}yQw!h+yTs#pM^h5EpbplfzJartiW*p#X! z#hI&;bsWsq{1IB`-Kr(byXWLVM#sMQbwIb5)Abxly-cDhWm=h;Q8kghxMO~wK%rgN zYxvQxtif!u#s8-T=*CVUb3FG+m`HHNE#TvAnQ1Y1f09e58P*y(W(;4wkE>tUj+ zqJp!kN6O{<7o3{c9W95o*7{{d=TCqC$b^U|kH7=yH*s;jTH8!fs`omoiHk#5nPT^= zXHy6$x%9+Y6bt#_5F%7IpQn4&R)BfsvhhJ!{PnlM9KNXo%D@(fY{8(3x*uT`-fp_m z`&uUKR>)gu2Msrw413gkT&p=6p5WjlltHGHJ?z00#eJs(9-WIDCia_;;G@mX{@z%=VYQ;IU>@~2(&11k zS^g;4O$$P#vrJ-5rq!L8bQ=42TLXUMA)t}J@){n1+|CN{Q!Onm*fEV?UEQJZzDQ8qJKu%|-cs88 zh*!A59iKv5f(Ieq>gNol?>^9CtXb=sLru0h;XxsuG$ZAIazVyT1S0*$X(h}>#Zq?Y zi9jYhi|6()2swexJN0MC;v=}NgJ81mw!@r9l0=DoVL9xa`o70Ch+{97ar#xc!@gCI zXWLIrTW9%#=xR$1AO4i(Y|}eQwfH1{PdL3-8YN-t#*ARbu9uf?O|Yl<@c2>5hzoQ- zH{?Fszq#VE9W(%Xe63>eAey5BJDF?1eHA`D1&hbs#?C?hlV-Di28d3OW^MGxx2Ke#p*7z^v3#wVN8MvrjKA_EueYuCRpM|9g z@A}Lmwqzbv&?j;8%2vx8KHE|x1K3W!dcy}cx;Udj2(ff(OXM5msVbWtb|(_ff#WnW z#g6H_9fW_gPUJraO-N$T%I!$(uO^(RX}GxbnQLeJB@+*W92&YWOYhpGgbW4>`upd_ zWf*KCgQ9Q0^Y39I&3bGCAC;sNw77@}W-F_M`Udy4gVn$$e_X(L)Hk@U z9IW~_`R6r1ImT~rxTipH`}9#+w|_Ffv$>`y=hIz~4TB~@340Qtch_^Fu_P5A#koG1 zzXc0LsdURaGYpsHEJRc0g|}KZ;>^yT{7QTk3YO_~aX%RC%wMUjTp#2BQw9@cubfgc zsqSSlTKuI~j{>E@b2}c7Zg;R=hCnL1kSi-#jF0=AcNPnn`TV5U_qqwHxA}v*tHk7s z3ak77DVN8w0Xe7BIbuWbp~kNO7Is@(LIFIE6eNaw^%Y2#_^{LJ98|NHKv%A`i5PxgLxR_PwR0 zjqK}V0y%472$=d!mfRO$1NdYaLlI8kQ5$+S)#q0Z4!$=v;mR^F)HgP+@2v%a#J05b zfRn3fWqUhhO@I}tyNH^c4uKpKQ@Gc~5-%bCS3->GHr^UPK$40VC0}8>e6|+d-3$2u za>~I?OJtj}v7Z`u#$OEeZf4ef(93#3JtA$HqPyD&)G3Ynau6{jKi3RodI7s28j}dNNW4LHw`0NX_8nt>G;eMRDruyAZ#eO zSE)frLRcIVxVv6-hp znUU0gpU152m9@1_)Rm=d^)-h##Jv(eyU3GY3r&^d<)>RGerXVC!_4tLwl!1v3BVl~hm-}(9(kUNeC+T9DypB5VNRZ=wUw2Cp1%CIR>}c!WOA>XHSDex87b-3m&lRv`HMm( zM25@m!|1&4gQObVJ`gv+v%1&irQ+I}Q3Hj6i;DNva#O)eh4?M|2z+07@iw!r=R`RU z1L(&W8lu0QPgJU4BjlhZv;69USux#9h9(ASOO9CNlgs-iwA7s5-x7OjT+c!^rY;`O zOJpesG&=0ZK)a zk6Zw-13W|)$Z+-Uq#d|{u$CA5DAUSM zjMekrEL!qek=Hdw+ZwT77{zgfSc%c3oUUTaWL|QUgAd4WnA7E!7kmLnbEg2@Tm!jS4g@#g-No6&2m>qXqJ9 zrr5+DDU0({5+_1+k!2H2za~)pM^^`cn zCF|hxF8gs{OWp$=D}6#=Ra3$F@K4;py8!o>3iZ!FObn>Wt?lV1jZ3wzT3yD#(*(7Z ziplASxQS7DHnHW{E(U>Q9O+w0&9f6K)J%yw1?kk9Q`F|?#_PWtYdG!s`b7Oj4t3w@QgAB1 z^eKXl*znN8vm#4LKKr~{g8p2o(XIw}I4L5w=i1kvv)&P*Vl^W_G=xTh;oJEkdba+e zUqdhDqQuJL+-AXYE&_>6LPC@0;dRX5^%`dJKGEgoO2fkPR~Yl?skwYYuD1K=LlR9x z?_US*^J49G-J)0wJIa8)z4r?qL8IAHa*58~(1>MUn!v!@!(JM~D|=)b31=AXs(2i! zZ(E*|!lqg!5^&6JxduvB;x<;BhCk3tyIWmE6T{|z3J3O&cn$?9@jy(gVEJ>m4I@KR zWZ` z1V(*5)6kq4R2-G5_ykQoBdhNT4PS?ik);Od53E_MexKg+E3w+QEO?vk3W#3p?ODJb zP<2)4T?tLm-z3<@m_cq!h$qY-C^^ToMj^`$L<6cV+`QHF%%rJN?#^~wzlnS9YcU?o z*wT2+Rg9>Xo2O&a$Eg9Q4o2%-jQVJCIt6$cP>t^GFTttJ%_tU2a}5(MTtEnljL{Fk zs3bd%1NQchaYrr7ba#6ho^Vem3etFLW%CTS0!a6ktIsnCN#hXIIlZt*;}~J9^`;Mo z5^~1UX<-W}&GAk9*WD-5#7Af~n$@lcH`sp0x|vAdleYL_@zvR!@EpUN$7yX}jG#g( zq$fwEvs($8?zgH(t7rAGMd1~j0~e&Sav^{YM?HZD3iW7Opbxqmdb|<1& zYefAfcU{vtt6(&S!xq)L*O{Brd%1kw;=xu;y=8RV^{<*ERso^>!dfYZl!tu((Y`mZ z$T~ZPf-QjX5s={^bRG>&lb6?4z`9SdW-y7LEz9Cg1tI(F|}W3zKN_`IB) zhLzajhKZnu7IBxyHp^{o-d-JOGo*5M>@f;_UHmc2 z_&Iy2c0=`tY})Vk$rNy-inV4kijk2sEnD8j$vi%yQ9bhOLt8VP8>drf`QzVe1V+d< z?B4R{+yN*(S-|ewwI#QW&A{_vqPaNDY<_1GMle*`j_vQ3j`c$i8@OqlL&dM#SF`Vc zFA*~^>^eh+UVZH_aVpi4%tEtXSFJ#T(~P_A82TMte}x0}DWg_kNyi9;*;-sW^3TWJ zoiAL_p^Q`*Vh>X+QE{DrcPy6e;d2x}wjEq2 zh%zF@RpvAoC=I0vQ!~J(@5ignb><-vkH9M|h=xpb*EmUHA7qmnC7>9J?pH3v{oJfN z_DhZ*Dk}s}?uYifeYE0JZA-pp+3QDr`$6$x!dd6%sWR>M`j^Y&`L?VeSze3DR4lN& zF@2bir6<^#x`@h4O^XC066VHD6vpznuEzG(H99X_AfpkQG= z(ZK>$>2Bb(7gN)dX^%HJH;x!+6le5`F=Fn z+BS$Z7{`M%r!wvDiaBdV zy0LnHx09O|+caeO@2nWW(x|>b?Rop)32`S2(F}PeeIVwM+ISBS#%s&Al~H5Zp5S}q zjqT>vJ(n!|SnWWWEL>xbVX3 zE51ZR%n(J(pA9WZIz8_A;r%jP6($tSacJur8G7HfP8@AF4BwiXzM071@NWuk$yk4Z zV7gq4<1eeFf00r3AD_@g9;6nb5h`2cxn~QwG-F)Vj!t1D+BrH)z`QOrBnh@TFBt*F z_2)A6UPuH|GAMAL71j81uJ<3=W1Y zke&OiowrO-Y{Vh zp=&q_?AhoV>tU}Gyt7s&VAF&4Q;PULg<8>RH*ojl8YOep$2oZ-+8rEueWqpGG@l|p zHG5SAy%QAEz+dGkjl?5~(_HX+yEpf>dUnNLyyY0B!4zt@1;f$Z%-L7A~#?cV`qhkr^PnzYS3>_a1mpoN* zct&j|2MQkm7#g)_Vi#+)`5cwM!k;Mp{iq^~jyBmg5qcq*#oW=~gNEzO7<3bpB^0AE zkv|>1SG-4^nkWCxE*N4(%b?s9wH@l^Zx=-Sxel41$*q*Qjj4-FW31beeN)IrRZ``PTgMBMwf3lK! z;>W`q^;4dsr#!64Xj(e4&+S8T}W<4@%F zfsQ%#yuMAmm^A;+O}>dXii@_URMfK6BOQj?J~pdrz0QYxAt@8U*^(t#cE$Z7xc-@- z#PW}XGX@=*oS@BW4CK%NHk-#;M?%d(L1Gct?I;9ahr3{VgQva3e^+-z)$#|ky#zsP z!#Lx>JEdI0Medr7p0gsqFhhCAUG|NU#oh#_P4TG`b=kYbP4!9_(mCou2(A#Gtk`u{ zRid&PD(D4?(U6%9Vsmjm`h-);*R`HFn3?at(iABq&N2jlhgj)ZO;@ zcOOgOJ~Zw|0L48=O`p2GL%+{|-`Uj_4FK`q^L2PB%Vv_>ZNwamKz+vc*ig`(g=?}{ zO0J7WBJ|hDk<0NoJ|pWT={@=S{m2a>^0tPW#(259duu#rc+ULD@qY2w>Ydwzaa^fe zT(BhPpl8`=eoQo*iZU`Wx^Ks`DgNl=2z70=TjJc1CIZvlI67C0HSR@ZR6uZ;{^Y`& zJ++3XfXypu=;@}}gjmiLuY=XP?BXZ6 zrrsInCOf-BS&a4dzW%`t6+_Ov^ZV{<(nEoXjx3e&SkNMsi{_fv7EVk-&*nRGB##q9 zKvTkx^gVk1wbmSGl1%3=47wc)%K5AXO_FhsTPFu@?N+SZ2l~st=Ri~P(ZH;rjycNU zM}@=j)V#|`N2|zJ>0%;4X5 z*!?>_9Kew~au$2Z2L}hQ3})T9+a^Qmc-V~>xA-`lc-&X@E zL{9+8P~vF4Hev~T(D*6+LJuz?;f+a+2Cs*te9=eN!bwx#PIyPCU6CiEV7wh8y_Z4=a6XT*1uGCrTgsTu|qoSJz-!d+K#RBuLKxu#P8byKQ(a zRvPP~S?KhFWGTcmPwK$wal}BZC0DiM`pIH>pYtE)_MfRUk~02d`s?Id1BlGD?KX?_>aXEjV+>KT-jBHcfrA4GPcdK51d84-Yn z1*wKQetL*G?z7OpDjQ{+m~fvYWFA3OluJ7_Z^UOOi?=nmyp93iFEQ^ML0 zYxT}EWo}z{8C%~>o$OFQwyOy>X9jgio1FnpX=LVr9Q5|_yo5b_T_RsmS*tf&IAjtM zvOUrIvQDS`)k!0bYAe}a_Cupl5_3*F7lAXgSmWV4^-!S~oeH$d@6|lN%}O~zvX+@7 zuT(vD;MoMvdWJ4Hnz&qUV%qz)A3*$ebR=(Kv46~? zkpUz%eaDmYE=4lrjgDsBiKsjkwH0g*#i~M4VB48?-4g-Xw882>>uN1_H0x9zaxKrV zZ?d#r!1jO;AdCSl?{jLIvQ{WN(+syrYc#qcpAU*d{vsp4p;Y$-Ak+{LG#b%}&j;0? z%O$q2NU##m9&B$#K-un#oPuj7tVYihO21lt6$J_5*x}#6@ICWWm1$#q;cZnj53Et> z#cNkDMi4K5rDBBx?J|)3Ds3*l_{u4{J9Dri4=ZESV1B`fwvKnU7K# zG0r^#lKiQ|AtXz|!zF+DBX@K(o-091jjnn;7f?dmXViozktp9Vmtzj$-=0uG>I4{| zMW)_xN0Ze8c5TlgzSf|wb@_6UVgK`I@A0U+B{MU7rg@Uvphk5dpZ~~-Sjso?u(qi9 zj_rbA^{UNR&KOGX{zAKFGWdwO4n)HqE-q>n8}vQ+EMMj^YW0@Y^HA5_U(T5SyZBpG zpdNzO-pKRCOWa+O)d2AWNVSg2<@@jcR+z%jRXLnv%Vvi)O9)1*GJgLl8r2taPA&ia5vo1R5B>9qFS4e=o;98>qG4_zWRmFPo`P zYd@@}y4)s`Z0Qja|FW~vPVFvNh~6!_4yCz{0R zu!f;?5N2_0iQ%gFm1uplBaND-nZ5GAGn~F0;K{$Max(Seli^J;xd5t-6jT67b~v)0YPa z2lxv$g5SyLb+YBt1(9=1Y@Hbo4u~l}Vf^^{4p!Xk{nX@yN)W!u!jKX7ED)>xLR~By(}Y+$q2iky42GV-mZh1^h<*iFk?e=JK1(gL_vC>XYAN z%p_dM(LF7S$a_f9J+#hV6c~#otiNbNzz9l;(?2o`bU79VCv5Nxd)*akj#xd7o@=zb zljGK{rfc5nV0>6y8K+n8)T%t^SDqIioq10-jmD0K-)%hH&s2J>lNz$nAWq5jFi*Gb zUlqpEbu?a)(`Z!*fVBWwLNsND_LF5gL0p(O9+wX)sC1*%R$R3QJe}6-?xR(ni|9}< zqQ#V)zi2iWACJ>svLAAx{_bh>%J%q^eML_%oxoI#@Ucutt@)h9iKtmHE$mF-X0CO^ z(PF_fGJeK|yGFVdSFjg{E&ga8pM9S{X3x=L(fN6xNXHaq7LC?#R5*K9%=={SZ#P~e zTz1!Pm9Aqv_btbiEo$8MHii2VPd~l_f5yn>u?m2y?Nby|e&GmKfqhdw#>&GfL3aNw z5;jeLB5Ko->EyR3p4=5SJB{A+MK1)$B=13o>uA0N@_nK}(z21X9_T8*W24mn$_m2)XZ<$F)0$;u)JKn@3gFnC|NUeTdF*boA1%+4RabMFaWB`Nd zXX>$g`o?4r-&h{wP=Z@b8BTbG`6qZj@7*$#BV`!*==@BHuvy9K#Wg*4{$dRBfS6+C z`cr9(J=8?XqI~5BPJa&RXDeTA@J{ZRh8R!S$Fk=~wB|T)bI5kY<9N_-6^hvEqj!)f zJcqm1t6$Mb3|gsakhL5qY0}c)>#ujQ(u* z!Az^^eem>sXI5U?GWv>?Ztsl>3DHB@r^Nzg#R#{nTwyTEJv{Y!#C-dKaQju;t}0_p z=63QD>~OMFQ41^o+2h4r($407qK_LG{j_wJEqmz@F*iFKsze>;5v-;zR4}%w)@nqT z;+Y8Ryzq=?wJx}%V#9vq@|o-iiMY?c%tcq6{+;};JW#}}cZ@Rnp!JFcuSCOO`-Qq} zv4&V`hWltCrh;fQ88hz-{U?|bu0$M#|M4O;xt7YfX`c?s-Tsd*4M73P3gp8Cs`DeZjMrKDqFdFr$ zC1>F1YL~e9D-vum4-uwO(vKo-FDV#!@%C>znzaH8N)U{k8kp;xdn-&FEwq};?asR< zh9wwX$2+DL2_Ed5AZBdbnmKp3yQG3r2az?7EX(eXPlS}Q+@>#U+;x1Q#ZIcUB&|Qo zz#L}9HJGkmN#>u-E=@G)o32V)JmV1WTXex(FFr<9hA%U=OnpY(szObXuSm$su9(Yt ze(yf@d4%-Jrfj10N@K^92%T5}y0_^Lw^201ItepoSlnEVdV37Ls@0X-vv}XObNA0! z`rImIA~dL?GF&f&e-$?9IM zJejzq&0wwm^S+ zl!S;k7&*+~)q(m~uID#KWyC9$;2&&%5!)FFdN8WS9Ae0?+!u030RLNN}t z&Xw!E#v`DC9oww#mWV&q)((yFo#hx>Up?r$Dr(hgzW-L)9c3NVa=5*TZm<+38P!^w zKS9$bn{(mVtSg!l3pV;WUj5o!J40M>J$m20yX_s8wYkx10l6*F8{!7I@E zxE+86WzBt7#Q)OYV~ zcRPrLI+pZ}PYy?Lc3g?@Lt~XSBU4YCZB6(^k#ld|-JtEPK@)_(3+ctYKm-2w*x)L(?fe01uwrgOG)^S`V7QEHe(R-;8Fj__$TQ!?OgLk$<# z87>v^`O1#+r-#+bUw)xUtmX$~ey9hbfq^d(+DJ@+u_cO-WvGLa%N+8P68YiF(!v|i zL=(T7)iYk|sk(7&aiaS96-#vFW+99H*cXNDsR%l8bQZfc-j*RoHWpzsLqD)wYw3P( zLx$JPX>4HOjjy!cPcSnyL(Y0#C1X}~X{B4byIbi-Zn~u#q#FbY zX^`%YTS~e?K)SoTySvVX&-C!t@EurXEEYj zQt_nC))-rAGeU-0Ein`$|2Z7y*DTjp)?sP&?aK<2`5Hx}-(6XC=fhStn@{7__eH(1 zXd=Z;CM&3Mol>OP#auh#|Gkl|po1#^!6gG`>_jI94kq@EDE$;I&F60r+;cBA)#NqO z2BaSh*_)*adNW_y0o?)xP^s4ivd)?{H{T{Kd6dVR7m=RX{}oI@a%n{?|OMa*>MRWR4a#*U3r5N-S(u8 zd#J(lRTTrilqFwbChTYGHN1r*cvOFfKP+i1l74vbcBp2Gv^@`OQCpL>x@E`A3DI=H zVhXhux_#22Q7KY`yH7VbLXq?_`qSZ!Bg0}e>%x?HcWM79_E6=!3$7w2b_gU>od4;6 zxZlZvX#W2VORQOsjb#m2Nr@@hmA1jXY&0pG-TXul(T93vjqoKN!%^&0HGYTpdy>=Hf9A zn_mRyk5fC+X>@f3dSP(~MZi|MG`wxFMX8u6*-0vr4WZbYkq>gh%4)NJggb2xaBIhK zO}LffMEfO7KWIBQ!ykZ?HG#t|o4dAr;LHB?kfIZeM*Y#w0!zj-Q6+&s!wx-}zTQ<~ zI3KGM z+!fPAc!3I@W_SMbVyWFNxlm`f;uEum$?drta%#)iSctNW`Dn2c%)xxE;g*R{ge7HY z2vn_v>~@lt!#-Nt{Bfrls#g7~qa$>9p04fA%RRB)fVL0mRk+!dqWys#_4>GLI!@KR(P!nu$}thkeOA zZk=zjlvf(HJ<`bVy?M7Kvh5aJ`B5t62DGFq!Y`{6_r8AqpYueqZ!Rq4zBQYOki1zG zTu%&jcD!YGVn})V#La^oJKlPaq#ib0Y;b6z><1zd;@Q4@*LBFkX{ocH23{C4mX=P+ zmwAcsdVN#Q>gcFUAJ}}rL0TB^+ExnV;rXio1C4CZNMKNpH?%(VdL+|1&i4Oj0@YM5 zs35)T`IQojD9{!DMjK+#1%x};E@_q$&uocAr%|1!GU=Gi>p3-K!<<7sZf3Kz_3A;r zEH-Jf1X83YpDT+aWFTAva_@q%lh#uPj`TNCn1iWU+>*J++(T*j@SCGf;ybwBZ?U81 zrV!ve8+`fiPlzk2iDLiIytXOGPIJUtez=V2iHV=B-!*(FkAOyH;Kjv%fST#2uAhY#dss}%$n1mnp}n0*ph?c(VfE}S z`#@?7^6JJHLw(~d&Q{Fd{i`xttGGJu_oL-t)NgT6sUZ@6?v09bI>Q9Lwrhe0W>6(| z%c*&Qi_2z3MwS7kAFtN)8r$7S@2EHa_UEyL&tAdT;BW^1yE)kM;O0mfk~Zy16v^l4 zt_rJgRH)N^8f>;Y{jjXVoDj13c$eggm^hT5}5_4kM1VU5#+Rc$o=ZjIJ zC?15{nO~{ZnWR!G!}}1#$0ssb>{(c)akiXLtp)~#027BmLe1>6uFzq(e?;UT{)o?F zCnY5Iz9~Y6zjO=TA_1fyI)<}u~^N3 zV2S}&Ob?nUapc#%J(-miR0Mo6#t08FhUcH57VrMQLtzJpq8YZ)))AP-u*Ahf;n7Nn z^?^Nqlq^BIqoG;(bG4^_U4`{PZ8-&ys2MG<>}`oZR^YNbrbonKGwvD8fq+T>K2PDrCG>IO35UjcI!lr(=2q_SUEHL4G4^*+~aujRqdT#@jCrBjb* z7~hy0?;aq&@5VgOxoECH4ixsW+rDuXk5zmb{?;u}36>rL6TQQnP|c8bvbBXHB*w(4 zr1#>ubU2{HjbvVOUr;9!Jh zAkD~1E1SV%6YN#-Ng60ipsH3!9@TxN-(ve@g^bgT3g;`5Y}aXUxs`J_x1y7}oBMJX zzh&Ip^|e^X4fANTaWXfd6x%YPx~Y?+uESY1yosi^n%2ZSlp@UFp>&Vw6?YH zPp)7=m?JS+DK~iV7b;8_oqMAuL5Q&huTD2X|LUB%xmb0oep#uRf`h&PPm#Mq2(1Mo zzJ&2X8drO;Sd+;Z4k&vLn~nVy5y=t}611RIuY^?+d|_4z7fO9Cc|u;BZQ)6$zo9d0 zvRKG%Tif@sM3B+9R>}zlH|}G9PrFTjO7H)-VE}?rM`gH9MyW^n|JNYt?X7nz>;Y7; zY1Qk(7Wmw^W-?ywR_|pAOO*Z+#I)t9XVkxV0qZI7^SXKP%hb}s9or*^KN6wTYA&4! zkpzmpFmdGP3|9|o#S%FKVXW%n)XlLC8Q*{=B69Mcq2sgGu`xXJ+2plum5Aa-(J!Wk z0N(i!Ox0i#@h)lC6$iTEw(iy&=W~AbPKA7`X=Z>!h40%-K66CYq8c&7l9RPwov7l9 zKH#1nvauJ{wFp^U58kd9C;n8d2+0x?z(CUYk#?wnQ8Yd1G>@}OksY!8^5rWQ^JR8m zA=_@Nne6fYC2E-SEflh2d)M;EaY)}&C9+=ZIygF_?(?6CXDF7f9U`9XEQEnJhcew= zPk?JIw^Y^qfhGov5ktD$;6q0SWoS|~xYXk&A9HXJ zfj|dJQ({axCiq^NNwx=LC*l~IZmrB%uqNSe){ug5=_B2O)~RGYOVO`3*K*EdJHD0W zd7!b(SL66SrHpi7cqkEFGdw_HsPIxd$XGs=S*TH>jybE}OheKt{U<`H_0vYx4-;Os z;qrREV=6taFjo#e$zi^TLirb&$4S_~<8RUZMYhN?I?dF1uX922%l#P3I%X5r5gP9eILuGI(9gA8@N% zg_|$L&@ods%u`cm1HsGf0%ep~8s0ycNeBz!H_ay#CgDXI@91gqf|R4!E`CIGudOkt zyi3?S-PO#7P_fGnuo7}%n0IE6A0nE?W+=zJ_w{eiF+8NwLv6SCGIJ-hceRPPVMH!{ zl~E3uI8O_S@HR{X00s=46{S{42T*%EG24+)kF2tZDq1qOcuqWl8Qo;^*K^Pr1_Ul> zq0WILh4VE@LY)lDYtc#c`$-D*>ZXo|b3w`lY)@H&mqg!xJJR_o7ZCCO;gDI)TI8j; zY9X7WW}DQZEQk%)^JiNBYZ)JHstb?p3u?W}M2MD1B1MTY8b8 z5$7%O5W1h2lsb$ajK#HfHWw#+t`A4`R|KT+vvr3E`o@KVJHl4y+ zZzrj!7|6EPEF5GYgJ})U)i>U_NyhI9oEL{|nr3L412h+E5pznrJ1=V@KDJP^LC4Jj z3}J5HPIgqbQ0K*c^s?@GUL z0g7;Yy~$h8t0v@_UJSkdUpXsOFF-73(KD0tVR`Vt({V0XgTncC2mAV0^`vX1UzAhY4dPBqm|85yhD3DiWXJe|nprXzC6^A%xu^u-l-HoSGw+F2JZ^?7kex1q&j@RtcZT-`!<#C7dzg=}ab*fNfs87*P{7B=hc+(-L z%hE~BZ)>GHLTnlnI5p2QF#g4AmSswj>RIw6F*HN@;}QN3PF!{~`W6;~-#}^2fseZ`HaXR>)RsPdl9$MH5==&}Rrk140ZY}L>w9S_@P1XV*2aV|iTti> zeV(UFqYPo6TqaL_Gj)oS3+4j{GqLryt+)X*DKj=XhB7NY7i?Us$cO_212QI(RkCam zHQAfsA9`KB?a_q-@ocj|ofw@Z60CojWl5!nji3W$#A-O#4R#k%x5i7oK^XtftOUAy znjg>#lE-B!LnC@ZLDkS<#aLxkob-LNEe|TzhoG^=L?{%SX3`Q!N{CjNYRA#>ATLKQ zjt-TU`MDFky1E~1#^%7Wd2`72Yq<n1E{1EmynTL^05pul~DOQC}l*`Ipt_yv>fjqjqizUOk>`9Y+3P z(ILt);)RPc>;&_^q6HbB$8pf0^0=$vclC!#rOe0!DXjz3F*h(xa;2a2)YmJ@^-h1< z+}Z8D*Uu|jiUl)gkyAyQ2{#qWAxx4kZc8iCFz|MxB`z*LNbT(uD0uH%=oa(vxIDgp zOaJmrS~>)4uAFP}(#*TmX2Wgg-_?KF_7uQFL!6c70uVJ7-`Y@)9(Cmdr$O^A)oK5FH*L?P`X7Xy(t6`3?I57ywllsLoW0P( z;&gs_ffVK+MhPDKR$!>qrwH*kr_Hy+#OEOI9EqKoR-R;|sw6#%`kB7lwth=khmlwg2ZUH{XX?Rr6T z$F$@?^2JlJz~jbiu)~4o+HQeXxkOcPbfXCSq|M}Hqu2Vs8xcm;SIAgyM?CjPP%AYi zYonbdxz^HxzE(2)u69JYL`{%DOGwuu%+LzCabZ(~vC<)X}FLqgG1)#8`8mj$~suc_1-2Prsu(EbI_;=xZ5QI7$b3Y>kY?3#}{ zqMGgKxIUK^uG1y`_T9Zt8VAELTH7mO1s-{vcsYDw&Ooc?*niWADe`Zi71)Udy!=(e=H zS7LXg(&gr?G=sztOgMc9db?KEYBgwe8e^80R9FiYB8@_S*=_yN20iKESKI&Xsr<0~ z0L6q7-jyT7m4!0)Mrs^#2@>dZvg>Tjvof(Q6#47w-Br>12*;J?_^>$vr!t6UcA~7p4L((iOKz2^dB|$wJpf4QlecjH!k0IK>V`?g=Z_`X$~l!3 zmF2k4yr1ix{tfxlGvkk_ak0F#Qf}6hs}WTc+O+JD2l_K2{z^ERiP$)rhLH<=Lg2=<9eQr$gGdpAls00iI5R) zoi1PSyLT;#Jhx+t`L$BBPHV3QMQz!JapU~v`uF-m{IQs*-VOO&2je=1c^~6(ZrA#> z|82B;;NDZDFK<596|zuyE50ge_F9YrsIUL`^{pd4i4IAZD?6zHz?<6~9#{hOy+EZ@ zhbN_Cv9d>|1H{C7_tX@q)>8s(vH}7T#la>sV@q|qccF>;^4(s-EJt*5ID4*AifAC- zl4A?r73*6htR_{UGx_4Zl2p+B!%J{i9&-CgJH9>lwv-9)ewSkc>A-(vEV?+D9a3sX zxF#yf-5CDAuiX;-FGf_NUK7pzI1@a^oPYp6S3Y~-%Yt?8)_*aF&E zqqf^OB%%+jkzN=3*@C8Wb&e)2Iq=3$kmThjaTus{7|6Z9d)`DCrnSfzigzuws#aiV_zcx-PNLzkm*XY;Io31O1(Wj)d3||MQohBQq<^v;#m63W)t5c>yr7J??~p zS9*xJ-6tE_8*xzMX zL+&5@44kW7?;cJ+2z3tOdOR-dE!O$Gs`B^c^gBJSHYS;(yk1$#8Nq@iwRu z|GNKxaK#C6*1f%H`W_+Y^QiY)$-Lj_>CNfJ@Hj)NSW0|XAeo(-Km~U`$@erqH!n4$p5mKTj&TbHW+OE6|k}GkJIZbJ`d(>@?rs9 z0C#tt3+ji zk{Y=4r$2RZma$4*2F$ED4v z8lCb_0SwyBwd>ij;@Kay%`#aQfp^kaJjr=-cYr>|_}ll2lb!w^anfB|v1oP#WN2gR zCkM-omRa#qPKS*D+JpUxN*Ro5W@N*?c0Y*|%n+uI8G$~^VPPlz_B<~6+aa7&Gr1ts z`^FPnylsLHLif2qiJCrz`&+0M{fb^@t<84!g7#&ecn-6>Yv>1JTHkrxI4n{jBjfcQ z5qohIkf2#wZ!AYM=h;b`=lOex^UTqu{6W&}S)ih5j<=VdLCkl37Vh_#?4mp^6C{RhN$bY{&>Rwb{UNCh=_g#T9<|)VWB#;VH zh_Y$iMqA>o#x?buhCLNrnzh&QEp47_e;%|H=~dzf`1?5>*Pf{tO#m|w!+AWYoS8)o zoh^(4Sxjo=Lv7>r28p!_r`*SU?D#~rY%GOzaVnhZ-Sci8$*kUqEEeJV$+A29-2zK9?riBEibM=QI*R-?Ne1M5sceNr4T%z9}50Uxkz0hfOiFpaOdp_<8Qk$ z#uQ7RC`XZ&TT{E4qrXXDzcT_)V~z{nUDNX-(Y9_FjqdFw>5P?ig=DXXy?0_47E9Z0 zJV0_@-&9|0;l%>0$vi%8z2Y1IO*EBy&MX7um+`4aLK%-T@XgfCF3@>$UQRKe3kA%dSp<=)5Y1uERb-U+{ ze3t=^C8GKB+nwqiQQ6zM?u`bgRpQ%f+RgRTJaAh-=R3P3I&8gme`rh03qL5c7*H*= zv>SQs#Ew@}&Dm|diU+@N)ou5^$^b!zcy|yQgG$QN)ZPa6Z4ozNi&wwn;kd4}P+pao%!F>}*-iwL7d$tULBIUV&! z1?(mA2G!(?&qybQYjj8JaQq|afW%CBmog2M&5VuN?_Ih`N@~m)y@Y_`YuKQsG3*p+ za{Yrl!zXSjJ-+(aqclFytDYUHNSz~Dsa~jAouaU5txzBfv+=+l%G}O}#bxpA(gVn- zWu_ZHmm@&IM-Pm1+D6;de#NK%FqXmF;1&wUhBKVo`B_q_uz$b6_{wADqh2QQsC(Mc z(3gz|-iV|)SxA$s5cega(7C^*%gq-3X)e+-*v@BYl$t-m76t}--Y(BMf;w6D&9$@fdEp8n0dE=11Ni93?*dnwM)W zma+ZVVyau_I91!9%ERu5P1tBtSTOh@FFhH$7Q@NPMfHtzMIO_PbWMw9ks%rm_XM-a zVHRq~JnwX^rz$<)5w$Rw%zM01uHu3;l3y8q@ND9s)X3q7B!rxd<39hoy!J4-a0osc zO#BOrSc)679QGsU_i)C(ijFy@KqbWeF8y$5ysM%7FmQkv+`Yf?DOh%K_*d_T)u5RH71VfhFUE?&~mW65DKqzY-J!<`mV)<)y(1)L&_<9tt3O93}weDB{_AvL>%#p z*{1Nm&8&Dx;9A$1BVZ6x@H}qqy`4bX_J&r{X<-zizB2po%@d9G{;LkfsK+Q~PnZpp zl4oDf%++c|fUybdV&p_o-SPLG@71eJ@5-&?Ku`5{GzU9!hsJ8*Vmz1FX9D#eIl_hO zulsFolab;%(fOahQyd0OAM!PMp;An`tEx`_w(hlU71SPWntYRZb(SG~jWcFC5y?-I zi;8<6>yZ@aQFAafPzko|1|dxpm|99LDALnwEq8m)ns!zGa3k^z-Z(_i)S%Bvpucs7 z-8gaadj&H)Q;x!8+K=E+qu~(wWWKs2=9pbbgGFVyw%x&$Hb`Zon~|dD*>TlH3>IL; z$>IwaK|D@81Dr~3kF>|k_Jp=29kzIEx!)e!{B7?b#dX`iW12g~%=Ac$jD|wOnU!{i zGY%sz6a@(5KzpWGvecly|lb0J6-Z zZ`>M!b_OVaxOa8I zt_M-c=!Cgy!MN@1j2dmxKBNMz)XBDuE)7$TV1bC6`sWKjDdI@+qk6C1Hq~Y~j<1e` za{Pmt$pTH`z@A2nb~J>(SyhS<00Bk%xLK{sH5zb;(S@os(|nqzt}A<~X*`ny8S({- z{a&cxIo7OEMOau|?;vt{n27xebX8!AR z(_Z|>4*i6ia(-X8tl&@YE{^=}%#XBJI`)WTBWzl{H_L5Sykk$p>IZM94Wy2}_&QEgbviLk8&&hN_)b~9q zx&)FN1$`QS{0adiA^Gp$mkSL@tzA>Te|?>8bIXROZ!^uzo&v+~sF>ASk|tWKSgIvh0{Kh~dcUufS4M9WYLMZ;x6TVk`(K zK@tjHZGbeA@!d6J*u-Rabb6@Nw`3`mf>6Ih&hThR-eS5UR;d?rxI&jrGL~9u)5^nS zA`=m)uRNWV_f&j#NiR9M5!C?xbh&q9QtV2^Y^d3}hHg^Z^PET~Yi&N`-k`-%ckr6B z@83j=LLaf^aj=_lF<*nb!s+rA7Z@c{^1r9lTiBs97k_)$U$b-V9iKKzJP49GuergH zkf5GmP@ZI@2#X&{u`{G4?Rc!&zOrEg)LqL13KdF)5HNg&a6W!$w4QbTwVZGU>x!i? z<>UY%NnDoHFPepN_%*I}DW1LJ#|^$~Y|KTD!L59dl7pB2Vm z+WoTQ1ChYc66Vx~w2P%+Yp0hrfD@6DhTUP~7Hi+5q_kxT7ux4{F>7p&N#6&)93;*$ z9k*n3d~`zAAI%m}vDv=66sWJOxT65M=^XAbv6zUnOCsW<=N+%kAH9JXAJNsaVNf+T z^wP}`wsg6qrp5vd2l}2=eV|A~@_@LVv3k@anDBp=k}>)z{nl-e&t|rEk}dd+JB0?S zr8&>#$+{lINo03r(?_~y%O&*soS2+E(TeZp30ucJVe5r*fqA!!&5h84LbclHG*JY- z)_B4vT}r-NgukN&5gGb$+h0zKe_-L_h6rB70}#0kpJ;XUx5MAjQQ>c_S;|I=%j1%znvN5W(ti1^I1ayKCS^x0w*`?ACV4J zLmQ)Z#Z;)h0s$1Zz38&)Q7V!vEmP{&J^Y&-xL6919c*YyRN>b<;21rdBxw5i;Bxn9 zQc(yyfeq#K(i1?`xD>b1emIcG8(Rpzx|%ZJ%UwLBR>vsGG?V~uv-|t(Q;^!5hg@dT zK`AP8%QGz+Y;(x}l1X-52!*KDc+>G@ua&?oOg*@@56&+EUD6I0P(Vu`VMTTTu>us$ zB3N)QvpgAgDh0$mO#@!iG0frW>%9*U>hqXD*pn`Ro^~a0oaYJt_t-$#+Rctj(PL;k zMm-)7Gq!VeR(1Q8>|6| zPqu1UPfss1gTzRx%t`Kdc1&#!+cPF>k|=y+WO#BSek9;4y5YtmD%5mcRn@2U%#2zJ z(#M)pn_UmWg^7uPDSUR_5JVhD@0%ju5GFTe4}vfouADz|*1 z%=zh4dB2HfN!SR`nDcoQ0qj297Zyx3e>6p&AM#Ka38zxq1I?ev@&#^Ka>*G_w$>pM6* zbIcNJ+vX5z(5`?KV(uH6fbKwXNG7lAEvhS6uNGYDXm7N7#LwI8(LcoWKaBB-0#MFx zJW7RctjHYd+#o#l@81!0%s$ejzDekH`Yy(3bf?%6O3?As4{!&=()GD)*H-FVNI2cP z<3cqqSC^K$oIH3Ga#i`CNMT>TZP7f^sR1oz)R>Es1jpK+uJ2wq!$~{dc^q@|vT{xz zPcppVbhGDpW>!hve|b!=l~Daocdpive)<^rw=03#aIqFWKna3L|BMrv_fhwb@OEX> z?Yn!bh(O4o!k;AInPds(!jubgK1M?EnjXOI@Q zxuldfIfB2tcaI9?b2D&C)QQrP6{|zS3s;ZnTD0r*Qq8!}slY+p#kiLQ0$bn!q%W2~ zrsU#-sJ{g~tT*mADB?4W$1Bk9Q#`dlXZu&PPGc!`zIPp=9B2!qtt2awx3QIAGNcKt zj-Pr72oIUD;>{;De0Vq;*2=vbN&vVwCw|id9vw=1UCr6T5cQzBE}kRPod+~;^h`}- zip`m69Q1heHZD5G1|r|5kdyKl@9&7zG#`o;j}^r^4K97oCw^~was74avGIa$a9N`0 zclWByzKurI`3nyA>g@9h0ULUCpMC+4&a83@g!q31xu?`T$!*1LM6Wzlu?tOt2C5WD zMM&|0W{k=4kL0YxxDG2TxWV*g=qo4(qjrXVkdNv5<}HB5{WD$vao*&3J@^9{g3-Gu zg?Ti2x0tV(1KW6mknK3{Pq=?cvn9IFK=ASvfBR?;xydC1EvZ;YbJ-H1&VsKNvZ32-3f z^_}y$o6|KG?9b&0S7J*(lnz^SIk_{Gq~0nNNCY73o3mMUuHJH}-OZZ(8Z!;csl>mu z)*|NKq02SGFm*lrxzN1AddT_BvS72^en1r#2=fhl-S7z1c=-MG^_3e~R;pkncol4C zzerB7(D(#Xx;B+qr?H^Yq5=F_@q8Hq=9sejQ`yZm4(kX^@{u4Hw-R+4N2!tm{J-tP zm3B~cVf>2w_)U>2n-?>{Gnt}o?C}~iU$6U!Xp1ZaDqx;}wPE-s2sLQ?nZWDfOaWyq z9)Evy_IxvZzpXzDrB>^aF4nwKonXFR7DQ+GZyQ zO&HIg*&3eYVE{zy;_8^Uz+%E?27;n=)!lcl%_^ejI|piEgL^(6%aV%tWovCOf**h4 zVh>x~Nh1wD#-s=!=eY-@D(;O?%+p2upZ(720#GyoAyhPUZ+=5D(JAR!PE5HJu2n#}tH*n5|2< z0O?P8aFqf4PsB1eUnI!mSiYWFAnj}RHsWH|*q=NT|3e;tL9^84g`mY!2Sxlk1bDYZ5;_8R03o0K!A??Hg zuBc+JAZPC5wk{j{!)YBkDnDz>-3{ITFCva8_@U`Lg{pyC1bvbb@YxZj4O>U#S6 z`HSgqQ|it#ZO0S!94e8>$VrF5RCOWp?8eH0<@w#|Y8UKAf0>NW$0x4R6b9tO@{u99 zLqCbhXh!tAvh8)69hX^)Qv^EXSd{hR1{?|Pya@VwVsJlGDij;_QwydotStHFIt|!bA#o>3Zkqy=<)q1=Z;q-cIlBmOlD5CMO7d<5imdTs#?q zR*;!@$BSbZMd^8e-ibEZjRFP{D(D&AWX_;y5JZ-g?`=V|A`sk0mic7kqWJ4$OL7 zH{8i)ddY`;cSqW442WX3>wVq3n5JF=1rwIu34Z7Sj>Y5p%tTq-P8JLxAxA0Vbzr_3 z_97zhW2F5c_Q}mF04MV7*SWXpKLd~6I^04eg_)n_1H<`XZfxrklczc>Pl#`9U>XqU zKu>(u;IdLsZ(Pct$>fHSzj;pLwLcJj$i^~n$z$u{JYxDlZM$~-rR``zbG}JdPU8PU z5rHzfNc9V=(-f!0GxPTX^KmR}Ao2YYmjCwdBas4hGX1Sr$xPqE{OtC8BmUdB+mFwL zx{?7+ERof`9Tc&-Tn;ekG@QQN&#Xt&B%}eY+~01S%3yF=hQ5*6{SC6wV6LGlK?z7N zXbln`dF}Ofe^0pF#$WE`tly*n*~R9~uuYJddIH-|UO|8V1+cmbO|EVB{dvRr)4%P> zV<)OukGGQ!ctLe8!zt}>#6!y{5(T}ZbQ_~}`bl3&_<{?N#D)X|^UuDt+tzqx4q z;gPX7zC*Hg^KPJz@Z$rw7S+7r2`1*23~iAq5JsSO*zPR#vzuafWRxdrNo)T6Ux@^T z`P);Cmg0UXC#LJ!TQeoSy3MaP4itZM(4gg+iIuzMp1s-wsr;Y9=`DYRhBDccF5~uY z%71&ReV$LCV$f>Cd~DXnr_^Zu4n#7Kcp3lvdCNjk;^SA!%F;1-shn6s1t}vQ$F0!4 z^lyL3j~+f|L_zNY$GDWI#<@xL2P!l>UE$7NO`n!4ybIxzi=1eIgs+Z(IR1@ zhYM(p5fI=EepBZejoN(vK`v%OM=AZ`BXNdBy;ViRF(%Pq>hE7^$jGwz!!oM>R}0D7 zE4NvxAOA!h0|(U%6Fq-L15MGI#`q0J;rb$EYF_tPEZ9UKS>ldn$mj!6cyB+En;;y) zjZ04l2cW@mpnKk1Q;-C?z9n zD^f><9rJM; z3^)a>RP^wBW1DMu=TiMa8)A}H)8TA#2A!7x-GBK4#F{HC=2I=}!@r))(c!R}c9)TP zL8^RTr?@AUIbAxwM;&>z7j+z|k&rs6t@~;c=ZquLH5InMD9O)(naFBtx=H zdV_E_>B3L6YSXjdcflvd#8RDZ+V*SiveA4?To5+%GxZZWCpflfbHqUa7KvbBJ4y_y z(1>tu9%HEavUhr?~;&*HH`I2GTmTKNSBClpL;fBF1bk#cX=%l-O)nB! zw~~y%GH7`p1am0lbUsei?{4K6mxQh^4%eW(AtHi(EBxlI)pMVE9=gxTkV3llAcde& z!3>cgbjl~S35jn@!e4`TyKcok+#hES<8q}{*1Ge%Z*yngw z)7H8E_ez%^ds#$ws`vR>aS(0KlZYK4g1;uIEDk@a<^wqy^jC0b2B7&1&_jkYC1eIt zxTqXRiEzuP45XU9g^mQ=Qs{V)R`(VByHUjyW_lC&`M7QGwmzLfEf}JcJZ7Cx5O*dv zs!Q){y>=7FYO# zHSujk|Irx4Da;R;`d}B3WPvm7QgDRiHHlkVACk^^tTAn1#6Go+9J)H?0#+!fNyh@` zB!w^4H=+OBvY=T6_#^ZN)RS^VauPmgjit{HgCZ zRurM8b(5^sPOBSDIa?0u2DT!w*}hww8Nvb{-z>X#u*(1O0|g58(~O>^#pnf}t8DB-`ucOiE=2~kn!3ko&ADt(;J8z2 z?6#%INJ)=*iIO)N+PECKzb#@~{cZ1#^_)){t(Cz?1M1_WMgN?_^hW|}$YXVsdIr1n zLn%2T4-_A7y53F0-w4$f)=#jdPYu4y*i>Y3A;tOTjH$5+pVEPr==E2-OM|s|9c*TI z1UIL{FKsh1?vwSX*QXkz6(YDz2XiEo7(GqC^JpqnzO62Zu$C7wma}CZK zP>OwvjM!5{d_GQsc5)_DJ4(k2l+Xy$}3Ek(&%8Z{E26$v{<6YhLAa`c8PdI(1E}))>%D;K0nNa>X zEGrP-&h6JYy&4vJ8mfL`2(Q-gm41QWaO+G)4m{UyfKxFhPnH2GI4)9$S^UM84T1$O zWz8!EB)RLvs~?zS_>Iq{@BhG2U@zZZ7hjd;OGbg+l+!?3To{rlUL$YyrBzS?mpXW@b)3D3>XKDnp^MeZL zONkw(8NI_t4T#K0B=XQW6)K5UO-vHUr|V>7{k;0cIP`l8Tc}x#@y_7z+4fyPlykWLA<9LZ3pdDx0aLpZ}E*3E|)_(EI`pDY>-)Z@LtvEwWAZFcU< zG)a4DJUU#(jgH7yA%t@hX!)ZO84;toHcG|#shuTlbze-9HwP*FVk^>uFEsm|FwL)cFft3hPRX1I!uE4kKOrXj_|X z=2>~YT9Ts)=l*BwSfR#-F9NiFt*Epo2|UIR1Y-_nhf%!|WWT)Hd3OLcGIIEG*U zD(Xc7$B(g*mhV3hs38Ik?kK>tNEg`+ew@y}G6}n%z-KWRqrOO{cSyFE$HszWisH|N zCP?S7<2yS((&KvJ_bwa4yS&37mdLeXQD!vTVLo%^ixRUp9L<#HoW_hMm9jESS3W-d zc7dnPk>K-+mh0;tu?%-OhTnf23TCARDo8VSQ_ir-=U_R8`rt4p1 zv(;9@S;OM^3ZP$QV<002FJa*o&mqnjb}a!6OM!G_YR-4u$nb;o(d@^z=>W`2eU&;{ z*z6vHGgo|y$Ez^kt*>SXYN^bx$?_EPqia;ov--DmprgAy#5%mjyJI?2+?K=~as)z2 zSLI51I3@)T6e`tal&z=QYwhy3 zhH~G%TQ11~NBsgk@GHX+>!)*`b9qEbLm8~*YtD41!t_jG{JFGr`*gEE>2VkN+x3dt z8i9$q>Ij)T-(1unXqCU6gz_YacO-6_kVNN@@ra05u}d)iDyhGOUWR8rvEpF$Hs`WWM&u@jCqepYov z+nDEFYo<8KZ@wHZ3C9apbHYt4OxvPQm#s4DX0%k8fOwl0lR3oOn@A?9+GxLH9!~&Y zJdd7ly37=@X`Rmm^pMfSF%Z+s&Uw-(srP9j`+amR7YC^|9O=BKFkm_L2y*2LznaErIHEa9{&I zCiw%A1Tb*V*Y8KlSZjSyy~}UA#kXj1WT87s%N>=^pd_H#Nj^>wfq**^P{hg%u3=Bs z%U3otV5oMrqUA|EKP>H#K}q0zB3=Pz?Q?W$m_9gk39rbT zlTQ{NX2dGLm?;zNS6b6-Y-I)TXxMX|?+-v23L%fZrku^@!uL#&JRg`33=T3lyyGgw z<_S5S<#=~|*8C|LxmZ)M_;b^BLh91DUW-KD)HvOYw1y|`y09Jf-7V5x zUyu&z?rv#mq`Nysx=XsdySq#3E~@vsw%Y*E;FWqya~E>wXNQj@$GI6KRR9R)$JF*$lQGr7!4` z;PK(#hVzLQaf8Yb)gw-FzARRHoEIzJ;b;8Ma01s}^O$ei7M^F29OM_v&=1vE^t!91 zK%Cexfc5zM9@qOR!SsN`DY02uD52kh=#bVs1EE6`GazENrtT0OA~s9S?b`~_q!W>d1cHFw zBO^$_2Yq3Ir~KCdnLREP5&lxwQ~2jUO&;Q*g#8trN9%53se-(SBowr8F+Wub)1FSo z_|6)lBP&NzkyDqsC0cWrDeea8lsRi9@W|$W_Ug^lqIPuUUfAaT$|PR%a`sbO}=#6A?qGc77iq6?8)mAagX9t+kb%&W+3i?0Z-P0F!gVNH$&o z9aC_<7i=jd1JqQ+g|DZ097MCUj^R?}~Ku=M=B>sE_%Jz1Ca-|F#;Vx9043Ad< zvaNIeguHJ30MW!h&NoJ4men74rD2M)ZRQ3sztZWa_)Di zw76y&8WLit^<394M_jEumVjC@jP?__2FPoq;jje~Dq_iYYumQ+Zd z&GKwSFTu^Gog7^n%HzfM)+2_yZ z1QBofU1sLcat+g7;Ig}e;$4FU7H%8fv~DZhvoQsKu*p**twVXhi&;;^ka}BT2ZXRIUKU-=;=1Ys6ZzmhA|Q z^Y_suz)zq@Pno^;lygJ4FzxS7A0hnUneNvKE);M5PynKAmpzHmT!;URG=873{@nx< zN7v*j8_UfkTq^rfiE{ZtCgThA33s#?8uf`y->kW|4GtZfA(X|UE4ew+zp}ASjM){Q z%oaFpJ)1U_02}1Mx-@+r&lx}S4%y<3I zR3KwGE9^3EQfTCIuagal?rQNEY<%;7m(PJ&=0GMoNms^@(oJnBEWraebG?lRNREGw%>- zL)_k9lbBcq_%!3Y@k|c8+T9{Kek6BGb64nwYaW#jLX0%M(s+@wHF?ihUcT&bgxRd%4o9 zRB3|P{7|Ia%o3-6J6e5GILJna6!4R1RUfcR<{?NKPxXX*P9Fik7O_2Le*CMaJEh~< zs!%*NwzK{lWJ%m7CJ&aqk!)wvJvJlnI=@YkX<&2{^4FQ3GRp1Z#zTFo35u^r=c@@z zd+x7Si}jU;LutXkD54+nN9VF%mzt+^T$ouahLjV{U0nlfNrQiSA14=7dG+-c%n)=WhF%*Z0f@z~1X=ZTP&|>&aIx ztj6X4GUDSH2D1cDdSXBiYOMmTZ7nA@67#M!PZiVoQzqms@Vf)~e8*R^GKW>XRf@t} zeQ?lw8!rZ61I1K4%>Rq4vgA5Hl28Drz%W2(l7`q^_6>8H{_zT^g}pUi+dAqEYkC9^ zj`2!9mQwZRkM^JVpd#;-YW7DGfRF@|6>-RJ%kZmjJ&5iUatpCw-0PQ78?I)v+vAcg znG~*o$DIzCK;S9Tea9bbYfaV5_Nt3M-BSjTp~kDGqD&tTur&j4=ASYJ&tEVnSF(wq z=D(m$;T8*lCA*r8yTpcevfF&?k`l(RImyVNvgPcuj_Qc;Byn3BMbC^vL!Qm*daC%+ z8-L}S;o#pl#7-`^S~|yOTYpz?sS|E_JYvL&hO<)!Aew6b%2|YLeY!#>Z#YZP{V1Ku zs#pmR4?hE6W}yZ|!a*}LK!|+!NYW%RUax|8bvzHsn0!tFU}>I{X4==JIv3*T<;NQw ziD0+qSjgeVTc%JhQ>jYMcX~g$#~j63{ZS8VpWn}TQXlG}WgifFq%P01QlV|#6lD;k z&4P1$xTHLJ`Ff{(D(qdupN7ZU@V=i!&{^J|f?RRd5Zl&Dypo%rYY!9t-M zkZRrIHfat=vfSm5xzQU~nA6)B2g)oy-q)GIfNZwe7+5haTQVsNB`l-mHPCF`=UD(4 zVpA{K9Y`a}?qs?rYsjF55_Jz3f97g*+paBKDwI?iU25uGh0gvOe`>D zGg36!!H@#Iy#ZdV&o(cK1K#Ug4D)7=?`DUQyd}7NdN-A-nPX*h`R%r`z|K-7AyB~8 z%4ixI%v5EEQNC5l6fY4@=JJdU0Jxv~xk|Kk)H3^50PToi`Ab5X@Tk!qp_#jlLE9A# zfZpu_7H*?;tJ-XV?>vJ_WJ)BZV@@@fnj}Y#S}4Yi&B8!~xW+^^j|gfRA+0~`m0@7m z?FBSylcvnJ7t`+PxS6!ZTOv-55HjKJFMN3kQ?LwvVd!OS+s=MAu;@#8&-gABZ&9mTuIzliUOPMijiWvB0TG5m7?) z9Icai6`sXd-r6@y6(z4voub&W+XADzE{7F|jh7Qfd>qNj91Zq*EEK2@{k>E>{l0TOFHMWmVTRgW zJ-AU{G_n=F-$8{6p#|C76D>GKt5K2ZdIVlyzirxNt^T@IDSj*Xp0N^9$w^_(&Vc&S5Dzpao>w>gui-2abm;9XC|!9b6ILUk zLFkenp*F=`KX06B*zvCaV$rg2 z%KqLg3xWH;~nZFlj}=z4jFIWX-o?_uLFtQj{YVHDMGa*eK9cdIu)5sz2c*2#bH zIn54T$nju~lwc)YCvQyneWZn6SWUZxxix&?ql~5;TKbAo&MafmTW)vgfeOdrs`TJ( z-uBe&@wIHHv#?HpLavBT4LC2@s9eLhT;uaaD$cUjOFWxP2G zJ5tTV*AGlJ^LG`fHleFI;AhAOFj?U0Jt2O_;{{du`ohytuEV zUUZe+tcB&q9So@}=E`YOXFN=NZ3}VzKQ6#OfN^Mg21N#P-yDPTi#%^Ay`^+ZEfrn{eEX z{i~}QVW~b{NH$N;CZ%f&fj$TG)!6b(@7(%sAwxCjXhoA9>;b5b$FJY~a=676zn#=s zvGmmW7SCo8$jZo&VwHlS zKO@C|VXAKG@TX$-ySiGkM}OllDw~|3A0z29=mlClZ$B}R;wF9gT0yVz_l;SqpCqCt z4YW9(kmwsj7#zh%hSw6q)d!q*w3|2cbp)!1-P@j@NIhz0lb1|A`=WWL!Afc$glmn~ z+0(#b^o4t=`bm;@ES4eCX}aGg!`vnz!rOB`xQ2IjwzTkdcUQdS6Tz@LYkx1D+R}Df z;T7`aj`pT_K;?XzUc8>m^R((elF=Bk44BkE+h_~4v9~GHYGQS_h6c$AB zb(}$~HtZiFzBrgmMGrMSn{G#&C|SNamqGQVws}y6Vo|e`xje@WM(rr?`N(NU@MpX` zBl(iI^%f-{o=czoJU8@DM+5Gro9U`r1+wBBGe$z^zeX(Bv4d&eniP3YAsk>%RuoSR z0_`u%d{a;LHK|(ffq;p_}d-3uCcwU|}`A{a{Fw6AViac!K>LYzYt?-H1JJr89{?CEY`S*Kz{?oRg|!@Ae_8OiZ!PKUy7Jc*DP_(`lNNc{H0qv*H@k#{>vQ3#v;>$px>GeY4b#C{{Z1Upm zorqT6zaAdHaHIs@M=A=`UY-Ipah4vvol5MB`iZ99do3VyleriWVGLf^%2gIH=5y{+ z*R!mdeBrydg z?Xo9+GHM+7oO5gPCa-Xm{D7PB`Fe@J;CSp`uh7pe4;nRny}?R|FL|AZ#!bn}Ddb2* zF729cj-3X~lC4TEFSljTKaHC95L{rf1}p{ux0V}*Q`o>pH@wcJEDYl*^OsO);&nO6 z%UJ?EI_n?u$331A#O7`P+YeF9uLF2=x7%zhk1nZT9_aFtE%l9|TThv$oo+cPHKrdY zRKxsAoUe$y>m+JWkkJId#x)?MWXWvH4EK@t^G_fdjm52v ztag>`Vp&2t2*c#rNn5%MM+pAtM?U5iZe45t^v{KN&i4gc9{-*!zVI=Q)to;;=`3&D zOVVFG_eJ;7|39W$06%lS=ry+qnwea6?!P6QT`dw^7uA# zVywK;PiLPEp92h4&h}`DhRi>n-txd7O6ZL1;2Nabf64emZu728t0j`tAhv&7!8;%h z!R^8tAe!@Zrszi(JM>)fG>n=dWETrImVi>h(jIxsINRv$GNPIKYvy-Pi|1|KgOZ`~ z3|lQPzAsmn433V!pjLDI4gj*}2}e`2Ma0> zp1gnq!RO)cqvu%kE*^clAd{ci*sh&cIJT6!nUrLP`58_Af&*e|*#`5g6yd;gowKI2 zGbl7*No8NBRYO|i<|Lr4soCVDZT-KLpFk+nv>!_qIqweDqd+M-k}mZ_0;u4%jbeQd z$RLc5>uGRj_Zyh57=}84UAc@=tfSL^Oo+HYoZN;T~Ff8NR0##%)nUoM=#Zt}Mc?NXhg*`_r(I znYcn{sRB*G`UYH$G~V{)dN(E}Rt76;TWb$yRUiY%i1~oWNYBV;ZsrRyk0`XqkRlL_ z;zWDiI6lYrx9%6Xb?W|6?tCUnG@UC;CFE;2TKnWcqjhZABVBvY=Dx`U5u6KP|Qa^q0f$7n+}t zBy8mqCyRPEkTnYCtv6iD?&M8hP^aGV#G>b#ExHE9&%73QMbkg~Q40R@P7~2(0$$7c zbs-P%EsD7#l%Z!}{WI8^YH_$XR^q;>@Zj+ub0%9Pl@daQ))!4w#h<}1fvY-r_e!ui z8d%%|N!DM#khleZs`luGCRVmiS?~hm$y}jzY-+74G*=iAP>15rl{nJX2vOAXl+gQQ z`jR$vE%}L$wKRVC%y}GG6aUFerrUHkm8<8skAAYv^U};)A4|~Px$M=yY?a8{ozGxh ze*X}&XP@Lgdb$0?nz-fuH}IuBC2FN(c4y6l3cV@ys{olOPU%D=T}>2cdyJoPHBmPQ zv?lwR8)dUF=Mbr%IEjD`qgHNn^)ewusm+Uk8p7M)j85F|9Y2d6^HF1u=VbX$5sVje z;@RoqD*v8QB(pkKBLVPQ#^-TKL3n_fQ|{S>i}r`ke;-Ou&)Oz&{b4*ZSMarl@NzyJ z<86cEDe5oAJj3q47YE9`U!CVzN`xD7C!2Q`#Pt_Ans*<{bdBq-x~E>=6bij>Hj!Iz zTHkgYl)hAr-6H*;1bLI~LK&p@`s}Y0y7tkZW~~U#|7sVun+4A+{-sC^KbBmHT{i1t#9O~b$8PYyf)b!RX$eT8< ztG6Zq^ZBqz$>Q=Q3MsCX1rImn?K`v%6u)Bmo~f`wE`(E!vLQfD3|6tl7;V(&dJe(ox~(ZO`v7USMEx zTcB&^EYtCmk^ZqYIwtj}Q;roXBfmDDsDp{Ra}%heWMN>IR5LA+%$r2AJ*JlPas>|E zs2V!lT|#|2<7V&%_*D@FkZF&PWqsQRo%<`M1a1eNhrv#)546E3IfFhZNrBGz;(@D0 z*t+l2QL~>=*Whv`Y^*Z;ye^D)*NJ#!4r#eD)2^>aLqosot*+TfA zFXrqHvi&z=3ADA_up*>^ZfIa2g@mHnw}GBEz#(FCv{=?V8A)b}5JzJ42~8mmRddX+ z-lu(r#Fy=2u|p}o!gs4FuGpdeKc?w0Syrg9Yi|8ZAB5BYrt$Y|O?r+O8)~77GvqUu zY{0!4baCsSVhJ{0wg(k$$WE2mpG97YiBRG{ukrYBFuXF{#m=S=f{gxjcR8C7h9eTvH%BWH` z=scdH>im3d&)Dug6|oXIK=LO!Yim*SB-q$Nh=~7nP1&7`L}`@L#~*8=u)*;#{5iK2 zIGz`l$CdOkJC;9VWtyVG%Fb>p&bq_->;^e1_rXh?1kS|!+czV@KnR-i8U5=E0)q4W z@m;8yCS#JgA$;AQ8xB;8tw2(Wzy`0tl?z!MEfqTm^3YB z<_-Bub>HX#%b#U&-0|@UYD&A;aKO%F%VDwED#`VIUhuKu&Slt%$q7_aJjqQ_i zw}>31$p2a5k#ai`0!_{?>6|D>N!N)l#uiaI&NfU`WOO6@&UkKkIKz|_-C7HrG9Gb| zo|sv;?i@{-mDpMKuNMAwCBYNMHjOhstd2CehXGT}8Q+b7n2BjZSol+y`|O=Xf_hkt zxwhtP^vYhdC+u67h&nGn1=z-0sPAh+?<8;ppR=B?I*BD(0a{S>d~*!6Fw{=uhw-Z1 zCLa_!O>SaVR%l(_C_6(`-^%>uUlj9>1X-rrip-_k{l7igzj9+IQRdiHKSE3Rm5Yx|4cj{JW*f!R_7><_-e>l z=Qx!gf53dJ85T827UGYJwJaTmI_+?NPFTm;>%?U2ycr!KG$*L2hux6 zLPJMnKohfkY5`|h*EouKp~WtBKJUTVZ5y3ZKp?rPU$$Dz_8`dBN_!i<^l08EHGFvy zG(1MKy0cWJC@akbRtAw)v=CBiBkkz~Z;E{$ds_(fn}Q{h|67oSPvEf^1E(+EfauqU zgvH1lxQm;-v+}w%D?l6c@+2IE`9!J0Kak8eJ)u5Vj>H}c@9VyC*zdCe^65v>t+fQ= zW7K>!I1>M^E-;j;t78&YmxH#2eoN25)IBlq5@r19vBiCyF=TLnL^7>mqoSISXwANh zu6R1~WP`Q*dI-t&n7X_TgD)$~4^+m@O?yvhrb`ekPo$0;6$a(h6*CXKs3lo0i)t9w=XH)@s3MQ2;ZC%Bl% z>>GBAG@i~ZoM~Q_^w@qh^7ruhr&4sd;!ZDC4&{9L-;}&{zDbtH@Xl9PynhsxDw-_U z&f|r;G>ML35B>LAs}lq0q#x}Jut(skUi9ei5+v`$t7jv;dyg(;!e^s+`|g*)IxR55 z5dkkXOicPtU^%=KV^dFq305Hh$aDWypws zd>pl3$2@hC)+Y&L7tx9Gu3Ik>qU`G><@j)H$5G>0Jnm(I=}b$9UCL) zg8=zJ=;{L=p`MQITK0LljLMrOk$4%&b+dGJzqeNRVMAs*rQo8_R)J!&GA(k zeWjGZ+$DkJ-J=h$3pE*6qce@I$bG9!1qP(fBMLE|&Zc*K$|Zy*-XxFT!uf`Pn?Yz~=+-FegKR#$ll3-H?i)OY-_+#x zl`?R1mu!CSCfd6S{CniHnh-Z!w)^l8PB&2CnqYTwk}JE0I*@Pz{MEOf_dmvQrfrVf zvDPxPC=@1Q`bsz<*>)-uU0pY2szZb0j}))Wm#bANC(~hb_Sl3;J)iakufr}ATHIjv zs|gIhT^j(_#$19J2_ZwEb_?yBm4;F&ri*3q|DK%O&(%Xzqvfk?MI3L*)T6e*h=n*# zY6W;1)ZcNb?$9f1s>#hwoYvb{Qh`8yH8DPE0=fhD%`^Ff{0=53DG3r&{2m0hKGuXItsb-KM!9lG$@-TP+8 z$ZT<;V6q8u=(GOkT4L3ALXj6LhlpE5i;asd*5O&HEFMRuaMF8Tp~`P1oF@*Vr0 zP-^;0`;M6^#@j-N&eo~-RWYx!Ggy9n^pNK4r+r9|U#G^s1M{Qcwv7-Jhgx zD)GD}?-N`_)b(CtI9RM-C7@s?smYc)Q!NxK2oylhH-^k#A{-E2xIlHG$JQ#9c)7;x z9bZH~V)}^(%J)K)xzO5*4DfE+9gzL~O|~TWWRmdL6POKYENDR`IoH8OEBC|?l#Fw% zJ}=VL~=&{muF?4|Np3Pm5Ccb^-15xQ&Vc~u0svdztr|~k*g-#6_2ln z8u0roOcoLR5%Io+Th5)G?*zKBt&ly#?=bs^1>>s{jkd$0IH%JaLZD-bdQBnGzw}^D z7j>1XuH(k7hW-%vR9eFQ?j2tNYwKix06I@gmck@9#kP=NORic>q=MyKkeB?ED2In$ zKj#+w6Mpdh8|4E}k{qp_qCA{q?RA8)56lnSfb~FGA_kZ|^65yj4@ydEOA(JXXMiuC) zyI+oLyHVYrNJxWL?f9#6AVmorrZ0|;NaE=oFsEOZG3rjag@lCUgpt1G5WfjF3^`iZ zOVRyVre*!u<3WqZJ5Z~?e?qNAF}ZIN8Hu^v#KVU%oP#SNF8OJtlGn>ndc^cVZ_iP* zxpQ%VkwA#2v3AW9^d!?DlFbL6s0r%QfBG@F-_}bbhi~v%#mV5lY3;6Y>6>$DO6B!O zSedz!I^KBO?Cc}d67uP0%f2~<{-K2$7B=J|m*v`0U4p~mdhToP#i4i%T`d>!3p58j z!{k5)-)Jj)}L}$11xZDzB8v)ugsP;g9atxC0Q6$k&59*5T1i`H1 zNAtb+oCi4m*QQBZm%cJw_Jlvsc|2BUgRR6}P_<7jd4oJw{yjSN61gvF1qhYWM?WD- zM^k;>xvYoB0uXG+S2}NfbUk2KQv!)mt;`bUx5c?;7y*yqIP@eetj9BNqDMuK(XCLy z@Xx)cveU-P{g*x}HfxkVhBRLa6f16z>x@+$uKP${YjBIam~Rh>e?p`hUe;?{J+D0G z#nfX2_6`zY!zi}zZvG-ao^iCXSwi&+Z5QQ*$u}8Op^Bp^EurSVC{1SfmZa@2f=ov1 zc2}EkfF)-~yZ*M(9&>NI#aTqVxEhC+WaV(J_f+o*WY75fZW|P7w;n@HXV9#*7sl-G zT~Arh5t4H~x-HquP1O=LDab3_u2DwlIFzPyIJ26pT!Cw9XsG(Yom#()AgbiWNgQ%lz=RS& zvb@WnbH=E8nJj8GQ!&gdccTMXDUyj5vA~co`yhR(d<|njva<{NzkDn6{Om#9skC%} z6v2N%K{uxpg@i#$EjFwR(s> zI@;}b)Vwrs-;4-rUH*Ex{%5Ye%+c(N))kd=3Z*PsVUU1+Rb^>BwM`hGqlv-7CUaHN zZQj>3WR@kfzijovnf~E)>n(1NBiE>aMccxWs@{0jJ=qTnhD3cn5CYeYb_V&QA6;S*8Uxf&$yrnR=UrnAl0OBTGLubxGxZpLup# z5?V6V*z*~iNe>itqmnBMgB7-SU1o%H{;LCcy7s8Oe?)|Sna*KOAwD74;&7R%U3X^- zzVR+o*ITSbPG0(jK7EE}%&U#dJIh5W8^`?ge#NpS$rzaS79v|Zb?gbBKa)Ww|i zLMBFS0MPCBPkD^apN;z|ABU0_A(}Q6s={+@D3|_!^CWc+1Qc8aU!l{d^+g-P?{9(E zA1fiXAZmeMa!2Ve9$@#j5%7ZNwon7bA8adN0f^#BApLGiiW_3el`v%%6C-frX83Gg zfspFE&<)Z=r+Z)XwQ^me{cMW`N%+(D5X?0r8a+MZR^$_M;`L1!6n{&VBhezZt>HYu@Jy?-&3nBi!VIc~D6LF`;pq*(^j^w>i1YM9``F<>NWUObxJhCSeaXoyRsZ215>_t{Awq1)XP30Ths9`}$3 zPf6jj@iDgnJ9T%{li|wU#?MtrV0WI{N8?r;Opn7*Q4qk@fCFB<6Df- zJO>lnqP4oMK#Pvakgj!PM0D@j^v_(C9YzZB;qWhFSDA|G+5AkVLJ{Bu!W$`v=1-T6 zHC{atDBMtp#{_-Yq(ZiuO9M+uo5s$63el%$Wa;Rh4xg;ZvwpZYKGH&bogQ7b%r!i{ zZwE!;i0R(b4R`8&LIHf?;ry^)F;Nv{xs3pvkqXHg!Af>Nl9mc9i zGp^o8_+-ZgO2V~z^Rfd89UQbwp01VD)PFE;;=gT@glNt(6X zO6U}Oveoce!)R(GoTQ&EyRsbl^{R%9fWWT-%ajGGznm(|ub@D^bJ z7J$^kP1yPcvU4M-i_>68AUM~kX1D`5d(Ljp@^#2d~htL(}vfN zQFi+aiO}|x<=;*z-HN6nKs7**Ys$e7w!t-c@rkw*1QV1uZL03>Mma@8)Oe=259va^ zjn}frO)SV$t8&#Z%ST6X=PLc(_Z2fCMHE{5iz#WAjv{5Zx}0L5%E%knyBS@q5OW@I zb-H%?yDKRF|F{4GjYSF~846A33v=e2HtX#wUG}Cj4UfE#g$DR8gRMr7$LI((KHRxl ze`qaxsa-aWI!$5=t-7Ad7d*Q>4vd|R5-7KOBx-R37$u*5Q32B0F>KozJwIDQgNy0W zeCX4H(IV!);Y6#Kjs$BCh}YW7#eoalF5ky!IAsfT9ceAKh7(vMevvE0vqo*LfdJc| zKK?|=$-h^-yQW)gB~w< z6$zwlK#TFibA7;?DC5GLXa3+`_-6IhUiI-nr*44qMZYNe10&<66S52)E`a@iZ^xNS z=6}gMN*~Vm4oYm_R>^E%;~!t0zoveN>b4! z{$^ID+&ajP>tydjnZm}SAbOv>Xe?!4B>zhseUD@gtF){sHqr9Lf}YBFb>^4GJbG@|zpnu~9qV`QM^PctCTOuY=$YOlEbZU%q-RL;b*&h(f7yj85{)@ShC@8Wl?>jzFJdiy}KlQe>I4;Z$ zJ^D=FJQXsV3CH*kHt(o{lGOz^Q=q2ql4Xo+h5j9#szA@8=0cq)sLKNIHdx}`pB;7{ z*8M^Ra1H%!W3Hc$wn$x4V%H^})(+RKujYU4Fd8(3HCc?D)|QGB@U}T7%&9=Qn?xf=P>*wIskLQ1Q(90 z^WDogK`}YsC5&~ncu0@z=jN96{O`KifZ)apruj@z@n#ORE;qwv`4Oz9C|`6e)97Rs z_sTX;zEFjW^XamTT=suH4YU7V+Te|22~E~a1KE%Kz@&HR&FUvx^!_cHkO^TN1!N-T znb}|Fq04D+)HPt-k}lD0#m?6Qd$E%P+$if`PsYC*ysu<-uDEq z*LaHhx6oGiuF&!kBrD(QTHjb$AM^D8j3uVAjZukJjg2|1lpOEV($~+a8|!PjZVg0P z=#%w7cpqTv;h9eE_0k0ahW&cGzOm71dD}fT$)|nQURa>Ti!anGS^bX|E$QbDDXB1hzl2UCs^=xEQ zw0W~DKSPu+xJs+`FuAzFcYu$9(+8hYB_6tEK~e>AcU=EdOx-kiymcg|Z1iJk3njA> zi@}82bjo~vAR+2vZz?hU+%Oa`5(zpZD(}sOG!@RfIM>lQnQ!X{VKF{bP|_?oaf#x4 z5$j0>3PrF}VP8Y=f|fdc)eSq7=(G*=rK%MLCaQwr|8C&Sgr~CCW)QVOs&RKax4Qlea0t;)vMZ{z;6cuV(A9WVZa8-Qp1&iL6m< zEc7k}0nAA0?v$du{EIJ<^^n0XyS3dbGP-9U#R;Ek+`PMsXW;^c{rSXEn z%+RAE=3oH#Fq4*>%$siUE(EFPkm3KK!&Cy+Na$*@J2b}874k}Nzksf)Apk==gK*4I zKK^x;>LAy#d;4%p$?9^8(s+v_jIkqe-}@(rMULOjSqfL7bQR6fPhnjmu)|P#m!aAcE05iqR5(xqQ5Y* zO;(}vh^reQxAnkrZ0jGAtam`~>m>w@mm4W_z7Se)Y<+r4wx{#`XQp>8&bDY6Tw94T zVpeCm5+_ZOq2woE2`8>uh50ym%&u@w@1XE6run%UKnU@U9KHJD?AUGVewkegsluj= z2^vA#m7tLf4-KUW_Ea5ewDiy$^{#`*n~CZXE#ODfSK2hepPA>hdYmED4S*QDN#hR6 zawjRQS7LJ@Z*R@?4qs7a^JFQr)$sh#P8XGms_UEo@qWUg7+2l8aCC%xe?RGA@}K~|xbh%9-?@8-{S{>Oi)DS{Gdxac>6kLA>q zQ9XYC7e)HMVk8AIeaYf`t~fY_12*_#lRE{AFyE6J@<6APba=XqLCx{aNWBJ(KjLAx zlI`cnD}qeP-@i*+XOxyU=dsFu#v~XYSoMXNNue(fC-=n%TI%X+w9Tx(eH9GP8PYfK z5@4FM6sEFo;VBJ>a&02w+@-}AdPnLUeEQ1>B+b>$DawCor^E>L6pIJO35EnR=nHC2 z{%v9V>-Y&S^%%-Ln9C-;gtMcqKvkZvkXN;J&PeE#F%$eVbBcPW;r%yeNBrnRX&ob8 zJb^($^bX4WsA??X*cW&=+`-H4C{l{C*Jh{GTQ}YDA5fVCs)!>KzrGmFU&*@UN z1p13>4PDjWBRct6mA^${w$~?-pQ?}$F+s)#u6AHD&$sk2soe8e8U%n~Ig8m`B7Rfq zYLSu_5#d%C_@=5zl(pNxRj_tPXQ=O!wk#h$_T~LJhp{S{-^Yi~LN!PO zl)YW{fmZp}(R1p&LDXvLGFxfM<(7(Sy}mx z6S?(%nv7x1ui!?^drt39fX1gyY4)!;_8vQ!7zCb`v)DSN$<%EjZeZJu+^CCI#z#RwTA)4~{z`=rs$2!mo+Ou6;x$Gx@D55ZIdM%^N>_jH!fkYh@W1q>Eo-6+BO7^inLRYMp#UkG*y2c{ zFwoyIf6wM91H~_330WS}v^R^mnwig=H%?whN(5P%k&nmUiVMsFI7s#SBKs(aBE^_JagU zTx;*b_SJ13qbM6YZwjvp_Na)!7573BZlporoSxgo}00o@Ud{59H;h>jF zKKFbpzy3Bg8jKp-$31;PGMWSCx>ROhD1pzQt_N1n|W467*%uDEfd?lI~K!@ zV9S4ZMZWJ(BSuId0z&#`Z5bTi{@VKRX->t638TcP)x>eK2K@wyBWQE=fx4FMbzTQr zWRYxm~gC zVyqG4_>U&*F!8EHOz!HPV3C4F`{=gm(Y)X!&y9`Wh{m6{aIr&QuKU!V)P94_w4c5o>7qAxgcSXPR|Ik*{ri~aWS=v-Id{C zBJaOA|3UPYx9XJ$ofh>WTv=|Jat^8DRjJ?`9FOtQjeI1CuEi>(CZ}zBEKXuR&gTC5 z+L-a4r?DY)>z;S{+o1y5HM;x%ztu_F!L9yeex1Q8^1|q{)|zNR3L-&Lg(Rd{RE-F( z&y@s25eDZqBh3_M|LABv-2f6_q%}gjIWzun^R6bLVgv3Rt@f zgo%C1auC@N9|ljg492W_nD?#{zNosPPG6PeK7Q{d|4Mo}lJ##}=(TfWvYY3R1pZx7 zOz&jLFXoP3wJt6Ok06Ob-pS!^ZK1ne>~hDJ&9#C}*&S&Hca$rQ}E_Vy+#k zG|wj-27bje%8CTpV$U_{xAE~;$nwLcP*hCDw0)r%m>a}b3y@x%X}-o}F}*#pTb6cX z*(R=3?I2|aKZZISO8m5@yofm8HyP{}3W7k7wEHKL$1M2w?M9H*-R|Gl`+xqU&NaA1 zC$he}9FUvE3;iW;+{XUe#>4^Fe{P|#2N~`kgpsq6q!cS@oR3n?>Mh7tT$Y0DH$=`2 zF8a*Gb7kk|?$~P*O8Nm!KF{KtxN8H?Hn#JYm03dfA0dtA2fx6lK&eWhYj?A*&$@gm zFSR|%52&*j%6vZ)$H_zC|L2D(`?Rt4FO~~Jjx%W2t&nWUVQyt2J%Jz5HjT5>ige_$ zuUtdFD6t6nKfoZ^%UJN~vdMv9_Nf4*Bu5z&HW@IXpOdKiqdP~I9Fxm~aewNVXrqgz z-qEb>C`Ikx@rrMp-@f|!6E`5hvqeWEPqr|BV=<&By#qQ3KGWx=Ys1Cvk5Y4+F} z@$79c(+qpV_-d$@Y~i5ou*U2oP7F?EN45BSV&VV$2Bv~f_RS6iCQN{zG$;80S z0o-c0%b_TPG@}{BYQsDQ=4NK)6^;?$6LtchZw?yGzO}U2^Wo*9-Gyp~?w1HyT-1cV z^c*S_u)eR&+zzB3DDSGtcuo;cGum9jsJm18$qE!I%K5fDAVBj>AXt->gEKm8+_SrV ziedP6ALgljpbxz!cQF(-SF2hbq(H%BPN!NYYZ|(!;cXol7?{Zb*+s0j+7gW%b;5}4ro7bg#N@k>5E;?X zVfRv2siy9@aYbO0bu9K_0EjMkSoKGS)jWrh-9z4Y3sz@;y;@GpCV6G|(d5%rLV9duFsOIV$s2N$0sh{prAW1m$>% za2uXk_IUOVOfywX6f$k?(ThW zKHvBErA~gXLU|N(d&gp$BpLlsZ~9l>~UHL z%X~uK9vp)FoZQae@9!<^dr*JO=V#TA@3r(iOyQbljUBNeFF=}x-G7@Ijr(e-ocwcB zZGZgjoTKyJMDzIk&8Jm*wXpjFFNQy^f+ai3g`Kp{GtDfOzJ8bYSE_8!s0z<@>41vk zOXw+HI45z2YHVsnMdx5T>4nL|yr8`X3LSU{>B^gm;g>m z&5pr8jb3{;gwl?=FRrFxzW>@G%k<09_#Z#d!(HM&)cJ*~A8CWxx<>WaH)_c#((8Y6 z{`)2Z(NjEZ6?FHJ$b{hcaHRG3)RDbZF>#5X33*6*YsywHi?T%SKmAK-avsmB+)~1= zNe<7aV*kS>U9qJXpPJ>ZvYq3U6a?a|SGQE{oR`lgz1+X=)bne|E9I$gnx96dB=p_E z5r(S^(%sLFDH6Yi*Sp4mFdzUqV_AH9%0NvWayYzpJjv}7m5^<)^1DxG=KK+bEE)4N zi^!nt0N$3gJ+XyyamEy3d{a7p=RINZoR78+TpQKJEx7kzA@Uv=yH!L%pxjbk``9XB z52m~-t2}-WZ&u=y|2eM;czMZbJ_QtV5knQo542$NgkTon{K%G>l7yqo?0)3ul%Wd2dwy{2DeV*98g(cSxqNy*?x?6ay;)(6TmKA7th`sxxO8<(p62sKRQ*ztHsR|!k zbUw0V!eynPSoFUSkNscSSg$SR1*a>kqCrV~eygEeQ{(ZlW9^4X%x`pjtBa%Uwwo&i z#Cdl@dfho}vcxh8G^|9vzh|Om3zXsir3|0XO3oQL`7P~tHdEyuRZ#k-u7}WPnRLnu zQ=XG}%ebD-$)Lr>pY$${3(nX)HhR4H$cYaiisnq?hA0gA{(l^kp$YHfR7~ND!zJiw z$h)Y*U1AVql>#gIrb{eGO+!gX60%lQC2DVY37I?h74IK<9vjFUHVPJU@}TPNyA+qn z=@iQu-g06B3wVJE0C3V6+^!Y*-t4qL8Rr$$KTsv3km~V=Wm(_z*F~k~f5^soDByHH z{e4BxW}qdmI$2tK^WEh9LQVteQDZchcO_ZzIfKHk!q>vQQAnamNSBwm}Z z^4KcuYzK4vGlm<+O}+Z>zCtTCoJ^3_ydyB{8@TUV55}HeO+Fv`e!$wik?jE=2Sa_K- z#RV)%F~NOD+19veEG2Zuab9*PhTrZ^M&&;GEnDQf!b3U4vDR)fTH6g3p&IT$?fW_z*LC-wo0TB=a zZaz`)KLgcTx+2Y)@h4;4psjF^w`e+Aqeke#?&ir!muatDfB=k5|7>~*y11~IpM$r? zX?re65bfdSSSD7cJ{c1sH{{)BIJjX5<4I?9?z z@To{Tt#-R0)@y9Gatj})@t$>X-rX(N%oIa*Thd-%o%bWzoK!VT>G2{dYTW{DxNG3aM>B_CAJOA)+;3UC>+m1Us+uhs2Nc z((0l`kC-(AR~N4%Ok89>ICg)uy^(Gm`|=Us zKWfQ}8u=NW+t=5pFO_2bRoVhn1R|oKFX~^6uc}t(wJl*3WbE*seMswaSi^OsK=gX= zQ5czg75LLU)jr#z{a_b|Jo#jRa-RE&z$7sy;>@(9yV0HSY z+Kx-(+rz_Lr64X{R7H5Yuz6mmmEJK1be_DsEaZvpH?`!l=Tdp9Y*srQI7^0_4M&oh zt%}6ibZvI#*YJ^TZYj9h$hqq2_9u%TCY)ww!9f84N1rXm*&P(Xb2`ZTFB=*tk8U1J z$?Jtyg^8vw(hgL& zX(?aj#64c@dtYFt2-hS1Lrf!<#|xPDy-(4M{&+U3w9p;xRBrYpUz7MrDo`?UCeY~j zQ_;Nhu^n70FgBBCRx_LVM-3h_4eeF=;L=;UzJf%*1mh>5^b|}JMUVG%8QMs=-l#68eF%0}NPj$c4p_gXdovOKm9GjPKf%GrmT=OpK|u0f zH<^b2yM*iicv|C|?ev8B(j{x3-RRQs>Ud&`kM%Tj-#6J}*K2yr0R$q$eKD|P(%!L9 zHu_h}=8TJGY9;>(anBD?{>cU>GKH{sRkP=-T03DSI+JCg>bPqlS95g`1G9=Q%qjcr z6LL@)A50v#&Iv?x^?VCfv)E#*&ghnwS{SH+E0)=7c)Eu(9XT!f*5pnVQ3s2p+Pn=@ zzo|iLD$-BW6Af^Pq6v5e)aq=L#if`^l}J_Q6o3wz!49LIkdV|NijR zUot$Www?VlNC$^rHot>7ZMFO))XOp7E==Zk`?;KLr0{=SfF~5S$_3<2hsA?EX}9R6 z;k%i}h`G?@ix*@b!Y$yyG%q?WtE}m2x49{)c2M))NmY&ic|-HkiT^P$X9r=sk9|M( z_wZXh^jZ=Q8eXyp5Wh1-H?5U;UOfFADHgLKxD(xF{7uG`=ke*Y3Oa|O?d z>V0lJ_+jP*@xHp!t+PE)?=2w+?~COv_tCD0g1?k3>=rL^M+Vi_!+*m^6`J3aV?J0& z2Z%Jk$e=cJk9Ve%ZFdg+rXOtFjePffwuN>|%#ql+-O8^abkWeAJB+ptuR3)+UM^-KnGJ1gDBOokKFw2rrL z1di2@a|2*0k3i%>4@=h>-sCy!mZcxHkv=W=dtR+NDv|O7oiCJDaJ6_HG?HF;L{z^W zHE|Cu*m&se9kSE&{6;@fdj&b3c!HPV_b7KNH^euSJrvjlKV-d1u#pHCi!t@PE=~Vd zMnl)HLrW!nhKmi*P#1r+j5327mic*PLg9JYjDQ1uQ`TzG%k1drX!iR_1oGES=NS{p z=0G(i$vB+dS#xzL8zToLR}HRI4_%ihmq=GU=)r&wTQ@#Utk{)@f6UwzToDKFEiZmi zPRF(tf#5yH26RyN%PoU{rv$? znkG!!Y3a(x{jGkDYv5mU&f+rY=ix;C?;$^yCX0tRxUERTw4F1izb=L*o$;E#ld^); zy*aPmMKX%!_nOQkr41I3zf3IKYzHA^acwp1Y_Ffn%VMgUfg6sB?Z)t?|FH3^pc#i2 zhvhV8%HAUWOpuGMSi0iCUlsZ0iR@s0&TWpBi972m1W?#f1q~L+akncVlY2rPhlZ7pLj^&c(JR|N1mT~Uw;*Az) zJC~g|yZ{D;5GN9BG9q~$*%2czz161CI)?964#5OQLZjEcG04A5OgzN=m-9#v2!4I1P$V68e~YVM!X+ z7FQS84!2YZM7+X;Q8-KAYw^D+_?g`Q2GaQmkXaK;`?McyDz%_-!>5vkonBcxbMe7` zAIJ8Ko8}Rq9sqC9Gy*6Xw0&^es7`U)&Z<1QDM{{0$|JxXmfgn(cTnV0E+ z4=IE1B4BZ`Lasrt=D5etG4C2HEhjr-jkC13!aE0DIDVdX;9MW}CWT@BhNSM?c5LL! zpH|$9^&D3h3Kgm!`V1a~pfIj-azGgMN4^Am0?+x}L;sp78`(m4;#>|k52;3jwZOQ* zjt*pdLWW{ph)ykWAT2*h8nMm96dn@U@Um@iq=EqDW8BL5JAi~UYT2valx_J+TcE^h zfqEr#&yw56iVbvu0Wg`O<@RXopf%ah!^t6OMj;k4L_7h_lnb?2wV0j978EN`PQMX#AUQ{dn@Fa zfKLoPrv?L_dkMSi#LPYlSdL|To%=qyGat@IQtLmGT&Ev7I9zT` zC#%A59*kU^sdVsN+pQKpnqo&daIsm9zO$v8fot(w(N96Y^#2h+082f-l(R_amL&|0 zhPE{-HdZS8p`HdDavA+s_X?Bx9c6fbPK3c`1{Uu>Q)-Y~uu|sNZ02`X#D=YqP?J$o z#kXcW7ri*z!!UCfQ1k~#s$L4qLOkDWO0iA2jc|VW67hT3{$jdQleco-l647MD60WbY`(be`h?9iEd$@pOx>)$9L3Dj%W}6wKr9gm+p8?0t8M@IQ z@7}&gzGh{-`hHQax6vv?u1;fywUF?SyOUVpcSWfVP0 zB`{vC(OVUX>xSTHpu+$c()UbEoH_Fav1$RH>&`ZsP3>yJN>zz;WbQAT zi8>YiTV=t3Gv**dP0-;m)8iMXq+WzYtE6ysZj3D{(g5|4x?eGPATYl4!~Si zKRb)zy5_SW=|UY$A<$A>j&7lWKCQ8YlM~I5Nio{3-sU`uf$O- zt09kwgaqE;pi-sW)azsvIYWD;UY}HlNnZz zC_E9U^`J&+U{2Ouxa=mB$0qS2kz7yiGS%jn1Rv!MCoi^T(l=Y74RCXeO@wZ?t;~&6 z;P0!UX$GoJ@Frg}qyr`E*I~(XKtDb(9|--Jso%CKY^ezW@3)+S#|?R>vD!+2sLoV< z%rD$EBlV`j1B{a_$najW)-g>ncOPi(!!^g-gH~o_|FJAeZ^`g`Q*Rlf2ntPo@0$5{ z|35mfInTJ%NaA|K7L!shlhDcJgNH+p@g;$drNZOI`si1{0*7D z3X3FJTP?ns>*m~cd=zpdoi!?fu^ox+F_8&v6WoLch^g7ja6~(uJ?#cxL*Z1@T^ZDD zI^)aKN-c8qJ;B{Sq4~q#-RWQ*ATM!mi><`8YR9EsTGU@;j$XihjZ_`4b3g50-*n1* zU-AK%Z)W{BR!0MF!AxQah6V+G)$YV4v{N043y9@ysHD2(N;Es_^!f{#WCk2KBPYH>>Lk~;W zaogt9-u!1(1hNjw4?!*@p2I}RU7Y=z-(-qXN$eO%?BuDGH(E9BKKd82;({TsJRkis zX;_ac|7+6k1ftD|9n9M|H;~eG_&kAwBa+M0GYNXL@M4SeBiFV{#&*yei;q^%~w%a{S{O*S~xp>k!9vi(u zL(B{`zAYg+iXfy|lu{^XSn|7HDubP$2hr0ZX<08Y+q>qT$Y|3&5|7jGO0jzw=Oa7o z%|ghp_w}GL1x(ESjhyr!iJ7{d*SiSrq+NZZLE3R$pzf)qB%I%APF-_1jv?@+AyJdBJ5W-If)jbH0@0Bo$}j}+kaT%v~a z{-ewJR|W1s?wVG9Bb%uL>B>eu?1Yqu7;K=4R@dbL;bZ#lj%?n=y1{P7!8TI5$NsdIV_xi3~&W2cg4a&pU*R_s>GZM zr=!_14t%R!3SNzm?}wC&i;Lf#Ic0xrj3NTf{!-HOSfw%eSS~|4qGEx6Bg{~jkOId) z#iO(Qil_PupZbf!ix-}^#f4Z{Gva0Ky1`!5g#|pGRIk1wy$;dq_&B=-^(xBwoh)nE zP0R*uEq*NVdau0~zOBM%kb#~RUVi)Iecph8K;n(`iyziI)xP4*{W6c32@h?{G2z@A zbMAK`{q3@D@`N_`J_r~tHzu!IZvCh?L=+%;;5ts_w;~#q@M$5<}7dASI1Q7c)aO5;K&zAGs zAm>#9;^f;8A%B`LxGZIqMM!~RQXlk2eS=e^P(Mq3Hc(S*{S9_+4^!@*ZrV@FCXgfK zF2R6B46Fh zFw+(wbe{eRQT}7$vjT9f}$3(4jCw1eAnN?h)_p&3RSl6hUR2pL^Ymooa=&cq-2 zilQZ;k@|ytRD*d^;mnWPHU<5zZufK;SwcaBI4Kt|#T)djF6#SH@yr`7<0(+7B z$MXgsQ6S6xXSp0KU}URP)rhbST^Wg-MW)bJkcBA6p2HL!#rhfsrI|0a!|-UCX>kbS zy4vddCJJ}8K6XT&mZn}{5|oDr=zm5TO?0H*Yv+y145=`;_B3OCK{F9?wKW$zBUBgk zYq?&;*hJ~#2{JMPN1O z6^0AW@wj$)t_EHW53wf*+VVQ_ha>*At4xfNiNvL|Pgb9QNwsIQm&z5mdT${;MyYLMWyUrkmXETxb!x9qfB$=RWtisM7ySII3RP@fE|&)xl(j8VbkerA0kF z1l&(b*@#Xx<$P88(y40_!FRok;0+AS&vHJ0O--G$vGMORB>yE< z7JJT6l`ihw^#MjIx$51uHbLvuRB%t|$&65cK%Op~4Ml_b@qOj8XAgkLeVo7OQ5s{^ z{UApnOx0`yEL`1DBfP`r8?OBUim<;uaswS8!fN?`-+o-YSB?ML!17ek4XSa&!F5U! zOi~Bh`KGUn(MO@@HUpt4BzJG9nPT^_PJEqVTfSv-;^8}U-~FO73e^OU3hWn8u+^Cp zBsapkUB?P!AksKN=T>jt3-~kNrgoD}XYVT(>I$@A>Gx*oR^;TG?YFj-AU;XSH&=hN zj?}9`+=oceIjr=)6tJ!ljLk`D^GV??Pa9bgn{x5FiiC2V?RNmYX8)yMf|$b`vvFZi zW#Egk!_|h6kQWrMY@0hh%90bbfS*u zyjqud**8W!o^s)n@p#+u--q#OUzAD@HzO09zF>-VhufpeobKrobMvQ2A7`$g5ML`jO=6};zl7|)+cgk(DSmB(vM zz4W#~6PiWfZ4#$&CAA)OyPkK<6STh^!riw!ikNgg_rzZ3yNlpN?6P|RgKgDA>zwrs z=?HJ#+sotqI$2js?6mq*0W$5&wKIJ07$e^}*X?2bj*gy(4(|HMauYgk5$eh7aYED| zoPyNR@}hH82RFAl+VaU&B1krhBiV)<{mdRl%-K{gI)(RK)a)U;XbPaHCaS-7#KDy~ zLv8GA`qhqU@y~i*$`Pyd;Z*tg8|mzCx%`L8^>!%|rz-_7By}c)|ljzWuS{G&)e!6wllD z!Mo8lz$Wy)hjpHE4l8nCx=K@SzLaN7kx^chF~}Z)gv_GP1VDF9;-`5w*!~TzPUi3( ztoi%uRFaA`43-qb&!3<2$$dWAKGv*QWrbKbDJ(G}J+O=dotKY%DWvNDg+JO}TT<#x z@OrS$PvoY_d51dXH;bF$n~e zb_4Y%l-dg6`yo(x_8EH_A2%Cjk+r`3Q8hFvFyeMfOl-A4ced^#fK6Oi)c2dsE=kGV z`1v!z@|YeHZx_U4(;enMCu8NbgNkD~!eaS80Jk5QTcyn)$@nw=ICbzx*I zz^$J7zdJ7n`pdWT&J@z@822+htprppxI^sU+);~W5mB?D(u;-@bV_N8|3AEp%+z1n zHILpLD<;Zp4>fJ?nVgt-RmfM)u{rC4V%wiAkBfXEP7GJ1-yDFlCaJS5iY#DnaaPZJ zH;?uCMn=!QJE+$4lNh!f*qDisth-^()bl=1r+CD}Q+2Q-GaQT;2O3dpx8<3QP?q|; zK~Z=<2)Q6=etj2EIM~rZ9d^UN#(y_=BYf;R0|pR@<(pR>RiFeuZo4kpu0ExZuefVD zCPVI9o*nhLMd%!VRGHJ)TsQ>7hqcQ@p`PVJwSn=;22qw9{*x{!BMmR;>2YykokSOY zwnV5<(;kj|uT?vFGFjt>DV-hlLJ$?7x6ebKbW$`&9$>x{wv-zqu0!s=;p1W0e-z3f z3pw|f2g^xcvgwRWv|MfXD}TNQPW{fK=ssObQsTPL7pCqwOMSeaS#%>NRF4b4L$3j` zFpHd;A!V)pnkpJ`VmkXvlvD`2r?W&uv)Y{wB=RhAYTI&VnO1Da*R| z44{+zQ6TMM*!S+=#27czgjdfk-&hWR1ZU=R%M*Pymx?l>TC_B+Kx=tw&CrAMwgVGY+`533fH8C?r^KYx|L z`UG@@zclT1Ub=gw@zr8{-I{Cj84;k};>ro%N!OaT;SrP&-n!Kuf4`Bij!vN|tutNn zEkrwRz~QDAN9u^+9=?CbSslwu5hqT2Ne~*APiKK)>DQj!J7%{Nm!NvM{oUhOFF^m` zWoIP!r?9#(%Q`Oi(880W+_jzZ2e(7n5CWw4e3;KfG$nJIJ64z{Mc87zJDTj#s$ThgN#nE20_$2C$MxZv zb+%}byz!b;@Wukl!(Tm(wgV)t<=$Nri!1+%oLaN>NJJiT;hB4Sn!P-uDKa-aXm5Kn zTQ3npDCCpjM%70lW^EIo(ktN}TwrzR;IbNF`zKwMexh_+v;J89*QNIAj3wfD0oAXo z27zut67|a_o{kzLIPYyw??~yn?a!ppx$=EHrlgVd3>fDuAg2K&0Rs3$ISbv7**eka zhwJaQEWsv;K4g$n64pA2etbsZ;bldBXV1{V{X61tKsQuaC`wZOKzBmI)1n&RL-+mx zfA_dA!_`+o84kKLIVdn+`aDY0W3hXhYduh)9u4LkPgL%{e)q1^ad#jF;9lUuW3@Bz zyuCXgmE6Wg=cxc>#S$PvIfS05X2TL%vyBedXU7ZyD15IstD>P5R?U4~0XG_DIp*=W zLFt`#ULV!MDEh}-tJdmQUU;3d9oG*gpIWL#d71^5?Ck6lW%e{i2>dzuERIj%FO27F z3G>FX80sJ85c4N{3fx@VZI8%v5ak7ghhaQxZpuvkxGWVCva(ZsIYPloL_!$R%;M_b zfq`aUxU5eP$$upyqKpoKg-={$AyQkimF4-;98$vHdML(6La z;*evvT*`1Cr+|eHV!q1&QaNxODAz-ioXPshj(>Y}ZUBFMyM+z6>Ur2Nn>7s*z>g^3 z73?gpqs#kjEd_L3WBOh_12!m(nnwz$y{}ICI$SH(WHth zPr;ejmiIK&@d%(ky@lLRbBjdn&NF6{=1>u-!1 z_E|KW28wMB*A??7p!Wkr7N5yr4cHQ$fDdwyea;hVk}$!_#vqtbr!N!{Yh(;jfIMx> zeaiHXyw@YMw{J;(p-?isyHA#m_lVZnCUBO6&8{scUZW_}X8wnQfX0^r1D)-%AyL)r zX_?`AgPYI*t2wXad~Vz5)JQ2=9US1KpM{LadSEu#v0l6mUr&LSe7=kDDOo?z8X97+ z!Y1w{p}1?E*FMsC$v?F&uvjF#Ai!qt7QO7}Uhy$!m~A6lVbbY%;@3P&E{SEFP8JQps?#nv!+{$@_ z^Wbfj3$N$WVd@2ll(Hi!j|p!7rTS;#;Y2BexAs+?WIb{~j_tm^K^feYoH~K|b zQ3||AC@JAPjE`vZX0xIoPgOG1^N9dO`8JifCuqNSp-e;XON+1%+jTU{;a|PsiN(!W zAi{#KF)zS~RNQv`Y+2dafl0oB`xqP|QbHSMHe8qqG-@%xrEQ^E3aI4Wnx&+%uFYzVwm+#U{ENa6{Iuu+V560Xx;X#cThV&PnH5p$j+6r>=>4YJF`l;&Vw z8ATHE;^#AJjJ+TqmIt%h*3>aw*9xqTwmuDLP8H5qQp(!#Nr#AL?#c2SqrfxU2oE(= z@UuJq7IuNv`Wod6|hyYSFRUil1 zrse!|J3>>*xvjMj4@6S;L`!$C^4`~MfJ6TU`7Lhaa8QDN)bnU%(btytXY4Pr9HMS8 zLXR-*Z*8YfV5xV_KWK_DINb`%nyK#lni^4fc4yj6* z=KnFJdGp1!LFcG8tnM&#{NHXb8D?Idm6&rJn(=8dH75 z{A|20LX)-zzPIZ}eC1D!36D|kjw?Wx&C&1~B{h~?M6O3Ck63R5mSq~+XFLo{85WVQ!{bGuLbH{kM_Jni>b2#GaYA*JT zWYE9?(XA>YoxeUU6EjZSmG#N{wEIu)|8g~QlO_*if=4NT^k+(>$$--RJDf4axN(B5gZYWt?@i=E~V=UpgGg71G{c@8?pn4w#a~ zZlya4>h8eYeYeMjnMo+>q?LcdLr70yRd7U>4|K}784gQa$9a-yj}BBRvG?~_gFWw zT=Zr0C&%0v>8149);$NAN^n%FFE41mvEv` za?OmaS3dn0V9c_&XC0p14;=RAB7>6Ol&R-`OfsK%b1%cbK3{{Q0$RAo?cbX7jh0## z;l)g>Im5Q2>{{+?DA?*~v2&0b50oLP6zt*ah){Otw<0kf>5|;`c7t!W&d7u27n-?= z7|BtMCgsFOj#AHidvwb$?9*O&t2=@vU*O^y%Rz=d%|*cNa3w zyTam}+%CX&wik?1c%WBV_ayq52SDq#)X2S@H){MQEG-G7wA6UXZf_KS^6BJt*PC7p z9#^h`YxlTv7BElyGw$!;c|kLTn_&;rxVlox@9D`M{AXQ{ZVOrrpgMwtp~56Y&*~aV zO2C?~cx_1WmLUPdBcrEvWJXyV0eN7WWZM5?zIrr_^gqLi=e;LDsE<$Fd;8{I|4PPJ zO7k--JS2>gm$&oxHlT*pCzjP}Ra=n()i50cd$gXeHrrjBX_fbG@P8j(nXuxvIkF9| zlGFbbZ>?+cOqO{6ESER;5>5a7q6|+ zIw*sba`HN`nSKH*H>=CWm!=6$KM!c+PJJf^K*M-Z>6#|>I{t7?RPU|erC1~-Ab4Kb!9?zsnxR=dJwZ zDsRE|5um9er(PfP>KwGqQL*iC+`>w=*|H1m;w};%@86-JUL;0A)#d6OjC;FnJ>x%` zZOzarFP9}zQ7n;i?tbu~OU*V|`qp)iO|i~nkb%)5M%xt8*_BOGfu>EMLlhJwhIL43rbC~C6tQ=H(nl6 zfy_OvrxRjAy1%YHgiSta;7U^8hs&tX&Qcb;J|4=Ju%mkBzWNbo=QEyIC))QSQ6oT~ zp^`s(vNM}jht_}8e&TYuc)iMDtLhh!<|C%Aept?cBO>69=a=dylVfKv%>7tiM{Lwt zRE|u!ctBHgaki2~<7~D3rjiId6k;irfUXu=E-|sE-|;ClTRnm>jEnBWR@l?`IPhil zvUH_&CVD@4#Ok9OP5xyy0?e(}!qv3pMT!rwv)Q+~uOP6iiaG>|?ec0`gYFOY%*7Oq zpa-m{x3-_;rC5H*yfj(qt(uRDiIO-6D@K`NLih2oRFI45U{M1F?6k`Q(bW*RN1FZydCURMU zOGSNQxHc|NlwQ4_=^C4YSWNju9EZAZaYKm-t~*Vwg7*!nC7u22w%Dogb22Xy-{tVF z1?)**?4wXVTLT)gfRgKN7R~nsBtAVi6bYSDj`0_KEH@WeWVCfsw{w1X(OK%N<>zKz zHFb!TAskyA_nW5=Y={%Na+|=B>7|uqh{2@%uco~|*!g@AAF{=ZkH0=(f&^t^PoFEiF`jDSnLBs{NW+KLF>~#~y<#O@^ z_C{PkYqeV@jBB0Ao>J2O3>FQ4ossnxRgmy}cVQwi?Yodi)cZaBryD{jNO?g!M|iw# z0Zc`Ue(Zpb_JSjKL=&P7+OzhqV}HX8S%1DH>n!VztHgHx5g$UCMMq<3Y^#tqK4&;L zjlX%)L&B(c$$jTNCrdh6(h64-&|=mJU)o$3Zv3q1dK&OR^@!Pa>*xJRD~a@ghR&$P zu^P$TWz)yBSfv6>5BE#En~iisknauj=-pk9I!$HV3~m@0wk2+ZZ^h`+~2`L;v( z{li#uFJ+!8S-c5MGa5%wf5^^Q?h&>-DzMr5DeW(v{l{VZqt48g;BUqBy~mloWVLq; z0uQI~yU&j#I{1b0F! zL`{>}-jMw~f7coqWbb}$V&fl>(cRazEp9!q{V_XZ_P~CEzeW);84v)aWjpi1a5Wx# zUn|%(n6EM%RjqUA|D!7ML&Rc9WkQTJys!6iKIDFE(tm#P{bhz@uuxT4Z^_l? zWgXwX67G1pZ&$y%tWhHqNEJ+!Nsa5mhSRtxckssjuoN>97!nEl^3?^7QB?iQ5ZIS1 zrJQ-$&&aN9Mxrr4-EN_lmIiX_IHdGG(ea`Az)9+}tx|s;W{R2K-i@am|NOa=<++7gZve4F{DHgZyhA~__*>;XR1Fk_QCnVS86wFsJu|h2Y zE%~$tkz+lTO2<|D2W9jnW_xc`>0|SN$PGx(pS`aEff$m)Vvt!}nK>)zd}t%Iwz}IL zMl#;f)z#YdcZK2>PekC-)03WUKU!SY(~Vx=n=8UxMSm$oLHNtgG0WjhhrK2QBIt@k zUE?hn=)+ZDv_Gf&<;$0E5INr($7hEViUYZ$BY)MBz@BI&?%%%8M3s1s5jn|MPC{za znAwBh&%?$es_=?kj+-ZIXrC>b+8?pWM_o0y!{2Q$E4U$l-9I<`xNxI^Z99fFXU5`m z%4E%RhV}A7#86)gr^xEvLP3NT$J-zc1KKE_CC-Y1^aK6x*@glO%+W=0TFF2X}pcdx4No z^|{4R9)52=SV=JNbI4cDb)F;)Yc4$0D7ZQJPWa(M|nYqNYzUd!L8oT?B7%CRY4?oca!w5>o6P#nAWV!Ob z56fdIM2AN;nq8QDO44tGMJC#yp2%edv3hPlY-+?%nRcg*VtfKlf0H;1F4UbcEU>>F zew>S=i?mm1Z;9|fD0z$8Lfs!58};GBSJ+%&$%|UdxuWuC=0vqB$CXKFMXL@^_uYQn zOXn{Xg|UAJ7qiVrtfrrYwYAJQ-g64+dm*^ajz0B|PwQSiM^{?!d+D_IT;2KX#PjsD zmg_aRWO=x#%9(!&S!(ZyLNxAr(~@4ihjuBpKi><5FyR+3*)$PSCkQ~_CApBHIpiM^ z_9gho#$L{T|4)TUM4Puiz9*U%t$QC=+#kKfCt{WY71ED`!@O2R8neMs{;+1P*#nB+ zlr}nwI>b+d%vXXoROG3868h|df?+H|N&THFAD?^NIn8u=yz;`N3{H~H&iI!m9D92+ zxb0|lb&RGC(`h=XFjXm0-!;@nURB-hX!ATMgNO!I_#j~J(T4iR_ND{dihx2rSrM2x zO92x{tfmO3mzTEF6~QAjx>@#?*k*2sNxbx|ujIyRZ{Mc}ohcWq>!S8t;>-v3{(fqW z?eKmmZ+zRlkW~07{emx6<=b4<-(!%0%eFW>MwjzI=Q=*_oG2H!KYe=b>C5YGcc&~D zH``93WK#)qDT#~Qt9lzeZP7HGOn#sTc{~fBzVNulK5>6!!z^FRZv0C0x{Te)^*$xB zQkDQVJW@pprfjKb$)tGVe!|`%0CemJHhlZ^@a8JY4Imq+d9P&mAt~ZZ|7yCUD(scP+{0E~p^qs-EF{)lEBSGD5p#iZ(vOKaEryY|EV(02*&2w4?3U>{=m` zIefb>QYMXW@9gj)ldT43-ve=w=8I&r_xG2`9A5P%DEU{q5U}okFm>S@WB)dAUi?4U zO@IGtT9j@$U0(0xmHm3vA)(Q;EA+ZzRZ=wu_@nro@p%8M z#08g`gzEq{SY~7Qjd)6cA3Y-R4l7wZTbb>*B*T@Xb(8RPMA6y4*Up4X)Q07un0^Si z^i782kOc?8njtp3Nvyf&DwTYMKG$sjJ)#%?MX$0;FgX~|gk-)&4@@pF)Sn+72G}ky zi$Em)S3tm%Th!-&=D#+P3ROnH-{u#8tW2=g`;F9(iyC(Bac8jPk# z{AuY-VhXC1(j>9c;_#;Bi4rF=Te+m>mG$e3Q0%^{}BP&E8^acTSHdQ<0&$Kd)G z>{@SZ({ZNOq4MW)?S1PxDRjjZQtXiAJbP|MJVEIPNpI%l#D|3*Jj>IAEOK-}m)@!-MCpZM|KlU4RyCQ@=TZZ65*)kP+ z0{otgzObo`YK4a3?l_T)n`4D|fn%tYB1XyJUs0C3t5wTiOt(?R%d`Y;sjVHyq>v+e zknC~?cikSQdSjN24SkOkB3cslE3#*f2#e-d;}<~uP}?8++@T#{6A+b>Dmzl#%R$bY z6HgT|5rVMG!&6*AMhqe<>`rPbI%LBU4d-tx97%%4hESbRiReCvFOCRXPF9_$SdpfH z5bxiiLdQB|bSwtcBC{`2a%T&NshRSX^A1iO;(!^*eUl*L1GpJ|*5{E8Q4ni`0DAsM zUQ(*c9&RO0-Schr;lL|K9b~tJ!##mHPfM<(JFR{IgiIBYg%|37n|~Tm6A3uJ>0>Uu z?30p{GuX0ZVZRG=)71QAC>I}>`bhHlG>1K}%#_X-mP$WTRlW1P@9yx)`W@subhX+s zsRmOr!lDg#1NSw+OU$v`4-~6ThacbGJV>wc$(E?F4@jh2THsT}t0i$^2xoop9gA1G z4V4VTOKu;bYz+_~GUQ2~VWF8Lp59Q7)zJT5R`W`Kbo~)9su2S{Ui1>6zV`KYXcm^H`YmW^A zCrkpWQG*2wz_%zP@RD~fhVO5#%JhtG)EI&a5D}1_jW6hNZhE?pEOHuWn-UoH?I-m7 z)KVSmW`6VOY=1hS>F0I)*^S%&@OFYd4^LOSO|yU?w*fH*K@TzII z`-eIHdm(O~XZsmtYi6!iJ{NS& ztM7yedSUecsQSvVsK4iJ6a^(kQbI)OM!J;_>28qjk}d&}1_2T2j-|W1JD2Y6ZkBis zet-WL&#S$-ShzlWcFxQ_GxyvxVCH#c#R>1~)ZRDiAC~B5b1lI!{}ZcW-1}8#qMsj` zWi5*CcBJ2zgtHxwF7htTjV&i@OnWnmX!VQi`(IThw$v&D5r4E}sg5%`M3yxnRtro` zVIQiiEy*Sa_tWdW`uyW4SlJ?{ko`@$9Sm*#B=$P=DTAKG>9b!84Key{Rb#@!aKTpp`m*na|d0j(eF9t(%U zMNMw2LeRL^=9f=iVPpS;I}kl%S^-?s{g)xQxHsXb<6cT1R>nvt8BMrBwu8}+(HlhSZnS*_|~{<@|L_Q)Q% z@_sl*FrJ`Y8oeN<1c-T4&1+e`Aob;Yy2KTF!spS{iz0#2d=)n5=KURXi@e_=xxP)B zSRlSqXMC6st(3?wBh?XrY)AAZ*?y@c~w4>Z+^on^Gipru==Ty0SD72m~Yd@ z2%YemDh@UvC5w!EC8}&D(O5$L&KV}M^X))5czI}b$+eFETkMUc7*FZ*3iZ&2U>Yro zMxTk%TrsAXkD=#OQu=y*QOWd=_9!j^Fw2B|GS{BpQ==gW zBVDJP`%mJZ?wY2?mDbL6)fvuFgEN0c&z(1l)MdMs7h)g^Ev+p(O_B$C68YQP92$2Qk~CH?&*F^B4z%omYg&f?m@jNa7j=ro|v+4QF8vs-a#X~t~3N=f9R z`F}^|^Dj5w&@R<38iJ{t>pjnr04?H7dAX6csGRPjuR1`%E~t;6VB&EWeTUsr(AP*N zA}OvlwLxR5#+L5z-kQ`AEsVu%;ZL*Uyvgt$6-yiijb6dzw(0|{DuLTAr1B2&v^Rjv zB#7zwoMUv?fpE4YRA%!&T>Tz(d&KJ*eu0Yz`T?}qMWgXX7wLmY(|3Aq-(R6R_Kx!c zvXGpyL+o6qH&L*)Ka}ND!J@Y3=I)cW$ws`KjdtWQpo}g3Ky{hC+NuXo5~x3avh{lz zB;dX!{uH6nbBF{u_x0`|_7a9osm*Buo0Gz8F-ap*vRAe%FR*iAi_u`iqN?iB(#GKU zl7c~I*2-*-i}y<~W~dzOv2XNk?-t9^FcF#Xu@DDRSzD$$nW(DQV+g)U8Zkwc#k3_! zP`D&*KG2i+-K`FckMLrDcHk(+X#H+_V!^vo>t>`3rp;3LG>x%b{(5#xLJ!37 zOsl(%EVKbqFp+MClA!f~jmt($Lh<2w(_nhey!qD>%TZ%AP?rQCG3NxjRHv$b;xx7v1 z9W>|t#$&#GspNhUxs=m9<^yi4p&;QD`H_oj*rikz?P0KjUr;z<%;Ty2c;#mZDwGxE zm$nj#(*EmB9v3V)%9NCNrNK>+_;x_GQ$!3%Z0)U&;!1?!&n}y{d9{KPeKj1FQ-SmQyfFIE`Ku6P z9d3w7OsoiO8z9C!Ke>rM3CY!y)P~=A%J7pCN(Y<=J2eWVBBHVoaj?BRI<&O%ztiY6 za+JcTh@0K#vl>xdBUk@c`&vTY%~cYps)?~ zfw^6iN>GdL&aWUXX#tiJ0{)HOY+iA$+MiG)DJpgozVjp(h1XD#*KWs@%7&UYHkWiq z4xnmS59TkN+g99$Y?m2<5SugWj`|n5jUaT?)}B0a{NPzH{>Lm<>hP?&vxHD<(}GRi z2VeIz`!E#`i%TZSbJ2DdXHYOxenhXeVfNRf5da#ZnURXPM;=42c6Oade=8DJX8VkX zvkUAsHnw+*?k7;oggp}op!hET!@izIsjY6b4+a1FbwR2hww zx?_ggZWz=OFJNM2gxHroOG$?z#jXvZ{9t?tn#yzG8s?fbzw2o{K8cLSc5(0FBS|Jq z!n?;9=&u~*XiKav>ZCanp8dtQv3+k^L_}K7le@j4{U>3|KoQ2=W~b`F0Ym9=LE#*S z*DpKPxcPHeXo(bu>&>!ks&ihzs-Uk8gzy&(QF!?*PKM)r);+h9Kx8$-K4f%Z^$$S| z{i{-Anv`O@Rz^iLsRa>#d`aZ;2fppEdX|EkQ-;*6R^Iy0(bEeU{yB^vC9yh@H;YM7 zuDgApq}hs;`78>Wq`k0aV2nxNM&xvfL{^&hN&s*C!&$U4L{TwMEyj#>_hb)QA+Xji z(6^4=-sY0L^7fpW&GCZ8;sWb2E_p^xOwDlf$mhJ-HdR$u!*x0B+$Zo7-PQf@a!0^q zK99diGj?d>JZ~GS{|nN_ge2(5MU{O|a(u*K(Dn1{>g+EhnW2tG5p&r)SQ!9Tl#v;1 z_`)RgYm}_Dp>>ChG1TWEjDI=$Np>kFZ{3-#Rxx7-z9%Lw1C$vMJ2 z+iA>hROPCCOCMVC`hC&S>2D@bQ|cSRq*_&f8;u0ycHp{u`h}9CP(MvYz~@w`gXO4w zIZXev6blff>8t1cu_;|qILXEj+7Q3z1lRy}A4z{wwzU$%m9k;8{c2zxMqBE9JZH5V zb8>$i3N?1c4qKMqX|@Tpo-V0T37Pj{!E$%{s*74XiI4cO*VB)S{iIh|I%#T1^0bNe ztajsITU_Dl)(aD&R`&$lx-Uf15r!QJ6vtcm@O1M;~V4b#^doFh@?bb({!N=$0VW#wJsFdKUkF(mvjK=r$K?c*UP29xffKBjtT0E zEN?gn-Ky+FLIwXj5`E@6((`>s;;JYpXiEfr{v4Ai_nzr@kt_x>GICnldy}cFgCJs1 zxlt)xryllbwy8zOlQxrh4g3SfHv?j?`&-sU`dhe5B<*J`R^qG8j^HJ>>dC=f0-xvi zKHNb@7XzoHH`lN4{2TsWDh~MGmaj0247fj}y4eKJDpF&&We*rkYZRS!?g?k1Wy_vz z2a+OMzPoPcD%BS(`BwB(vhJAU**9T*txo82Z0K&blfK?&fPE$xI^phkHO<9(eRc6R z0e-kM|DiLqBvh5Vc3D1C+xDk~fXOSf0y0FLCZEiP4_XV00bo6n++?xj%Pvk=M6QZB z>7sf+>o%i|&aOxRT3o+AHGOHDL9sweN0Kzv2O19Z?Y#@$oig#0B3b{XOW!^=k)9Vg z5<8t`OsK1;MHNg?d_UwDxqMHi?9CmOCL!X*jYta9n1t8AQ0+qEk_@|H5&7RWX6&_8?t->5OT9 zxFTf}2~F4*^ZKq3MW~_AA40mFZxA z4UvuHL8Lv$-z3l9Ww8hYJL^@_!6*n`GJAMS3I+KNl0w&c=Fn0J%G*;U9GpMT3v1R7 zbzCe**vT9MW%3V(LYLEz)8F=yR(y_;y2*skNSgj))=kfdS6na}g5+VOr_sO)xZVo> zCY2z*mTaQSISmt_dq_t+3UX9zVA5Oa_<0?Q8_d;9yH8Q=@Z700i6DUn#w*)3Ym466 zG0z(YlY;#awyMuXt5dzPKP+zWeJA4LS-CgK{*7&t{BVx^s}*^pEVBdJhT{NhAn+o1 zNC$Q-Z?DsVqVEsN_c3?UQeHYgZONJpXQ1@$~2f5~N#wmt#)+SA_IWZ44cPmR|MI^c>waGB82N*tsm$*LnGQ(sSR*mb|jy&7k8 z;J~x{*zTMlzK>(^?rKEJr}=ChW-}iyUXq{l$Rbg%@PAaK z6OgQP>86kKUJ3mRt|StVCEG=_OWV!PKr>_-tOm3OK18hN5-FECK#cM;ML0H$OW?(E z#+V5UG=J<@oCE$xgMONfEK=K@El(hC))p|}AA!i-IZctj}Mpt~mH?_(KX_@v&uqxqsl)b%ltA z2wSwO;8wqtGpx8JRw;W!F zLqhOCGqY?7_aunQ&Q=6LLddq*$tFX1wy@k}HhP&CKYens?&N3!wa=2k69{U|*WXUK zn@w7aIIF&ZHw8XCnMA^!7*d>`p~EM3v+ip^Aq3`^S}G-&d(RWX z8gwL~Y++%1hb61c@;gOox(I&B^3aF*|Rsd93pPpA%i&J2kx{s1lsfPsLnP;h6hEfbtYM?rze z@5EZvOv{n{4_QRU#R)mc&*NVn|8{Vsx;O^}?77=2;`6($bFLNrqSFgW!EGkpX9&K_ zN!U|qM~c)+$9$O?c-^%)0G zc831?z+%bVB(@2=^b7>T3_>Hjl!wG7Yg_LQPF_}eG5!d8B7?!PO@rojiZB?x%XhO8 z64biQnryRk8E$)a^x<5DV}J4X4F$2+>a$1s79i8<=Q~$%d7;ejh$jLG#)}JoWe-QA zz;XGW){!>Y|DpSvgFg9X znpbF0{{6`+>@CfJW4@Nu13orqvFROeR}NIfy)SjEr}3@8XvAX8#csUjeGVpuWHK25 zGA2axREx&s(K@p}Ls#R~j(-Cz*U2MO=!FXr_Jx?Xj&mjp#WrVaT$k3A;G;!?wK%QQ zJO9}6CTN`|rE7*}J(Ipgst}QEU5~0(L~}msxzqzRg3HrQ&eN_pM;yJB9o47;oQcQ7b%{4px7?YqCLP5B1F6xqER8D8clT*WrSZq z7NjlHo{DWx4)b+Bgg%^mVN8!G=VvAls8W8Gi7MX>(stGE#oI?XR;`+X);#n%0ob+9Q5xx1_JD> zm0vFP&&V8`&a6hv4uFp_b$%=cQro1sT7-fMA~^OoY5n2#CCwV`h>ZaWaotVPp$OLx zKCZqCYu!%Pau2blidJ`LA3FXquStYV^*zORyl5Z}PKxs82cVn!Tb7JY2l;~7b|jS)3H#ZBmCJ-)DJgnY&<(o&KcEcbcq7;iZ2q4 z3fej$nhVEQ!|y=PYen`)<@@bpmFb%WI9ZhPgz5mTOiQ; zaCP^ok+IQ9*NNZW9ZbebNI0dUJk4w$?k41oOv4|U^-xLi`krna2b1|SVg`>Zmxbd* zuiI8!>o1)n9nnRX2lAn<>Ko;( z)n>hKZ$7RR;t-kk^xU3J`x8!;dzb$vtrj6dl3Le&TH$vXrbvHT^TFNS72NIf!vDKo|_4!87E;Qv`CvY4h4)l#@ zm+JIXT;upR3Gst+;IYOvve00=k{AuGO^B2PT?bgH{%qE34H@9l(j`OcT4skX`kZL5 zjh>1+SuM9G5%u3*;F_^oDQ~$raB}wJvj&`Yg|89y^$c#DwKODfmWP)x^QD|J4?S60 zQvB1)YK~d%gd3E$MiwP=Fz+W(Ku*OMMzc922g&j}IQFQ6d-1{|k-aL7(jBNu);*|4 zF@zlRdsD$vR;EDR0EABrBJe>^2 zt=C42R9Wt|&k8ch%ws&%GE5(?mk9=m`F+fvqc3RQ67dr@G)EGNzG1ON%2CX}(nScg zWk2aed{#-q#PrkOUf=EGO8~Bkd{)sN1tJCLG9Q_!o+%T9CejK+a)x`s zCpgVqXj_>cg^%YwoG=rXSz&*Ms-qXzPk?h|>xTNAilSph0PDG0F&8#$pGDDL{AiE) z7Tb*abR_YO%RAdz<(}sR7Kt=i)O`QJoFr0^1vkzgtcFSKaI+1M8b@2yg=e(KXJnAZ zOvM4O{5CWym_RW5i~b~W({X3B6$)BTYff{mJI}RC>BrHR=r8F<>tXDLh`PPm!KP=5 zq858ZHU+W~-k90Ldd;uwN=rFPJ?s~*G?Yfb={>a}yP^dtB%YFhc-P1+DX36p_ zN#GjL_-bh`$|+;r*~skAHDFEAbSRqn=YnWu;XV4DU$if?m8Yj9$&;kh)3WCaFj1EQ^;eX(R)4*^~3gFZK5nr>>7Avm+%_WjJxDel|`;j^BKPaAbF}zA?b8EkWmdEJ*{pZuw-O5__^5HZ zhWdSh4ct#&%rp^%iby6Jc|(yc+OGBedj|VSX|GUvULHd&N4ORfB4X%uhj-sxDt<`1 zxcvHwP6h#bru#_>UHjk|3$8>Z-MS0+?awkdm-<}gCYr{Zf*G9cIKOIzsYX^1ssq&( z&aA#21GdqwJO;t$iAz^Pz1h-O8vEy_{*I&M#Ywl9(>J^-zK+AU9Ye*%_Ov!%1g_L* z_Xtaz&fS;XIb$JvS2mP43A8g(u-K3v=7g#&f%sZoa+&kP{&gJxGc8?UT7W;4qnPVX zK(SzUnL4Wad#^K4yN0_(RJaEylY;}wSG#!*`alTM39YRIuxn1rkVT*L>$_VeYUSJ$ zG5ZIn^j6r2y6VzmwVL+Fo3+Not8w%1p$+g)ye+$d51bqEeYQUU)QcF3r5aDM1+8}B zeYL|s7l|_A$znYhmOJU(va@@;?fS!6Ra}mQROH#}Y}(<60ZgauXN5|;iw-g z&f2(NI!fBTWLLVS8|UTuTp@KrlfZ%vb~`Y3Wn4EwdZ_UAny zP}g_ap0F1{fdtTTkU0osu`U=Az6)MUK({Y@JtigU?GUP9q$Sn^PP)f5q(2hVR=LfK zoh}V8Dbi(85Y(k_b|P{+lfMO}y?X25dz7X`O+z!GPZlt%l>gxT zk0C7sSLSY3qpJ#PD)>Ef5$5Qv4&DRaEn^%DRY@vHipQs)YGwvzcD z0uuK2>iP4aW;-nAJtO<^fx&@UR>7ddaUJzy9}$K8YD&*2jIg~quxLf4>Ipc!>NjqQ z0l!Wy9`206M)`sps=D@_!x!Fq9hJoZ)i-0=b#I{_Xq&$7Q`h!;55wSJ%EUMxN! zHhSL?t46!?13Lkwg)sXk(NH*tn??b^XRawhgCR;-ndQm54^o9`yy{%G2;%_kg)ujsImMc zQT#}6o)w+(0G%YNQQP4%!o`Nf^|I_T_lvXo)o8Qv&N_8et4?i((RwZa(3R#5)JGR~ zne25@I4LUahD$MNcOB-UeBL(QzyqdI^mRHTavgTo8*pAt{e+LVW7kKylHoV|o_&L| zwzurNr&u1(3IH>tO@uU#|$Gt_A4rsBu*WW$XBZqM87hdw%n=n090vU$Ot@Pc?c5@rYyDy!A6@H<-cTL^h@`rVL~nT$+S zv8AvqL~AV{*{$S@G25znclJ&rI_){^gYGrQai zOwhw3{~j^!5fYlt6=H%=x;h`>8^lvI(drXRnTXLt9Db!EB>yXQ`3 zSSEXe=s;~4cf(1X+0soY-VfXoCAE#a^NN`Udmd~0roplj}KL^J19{P}&Hqkgoz zY&_j$@_w8GRC+h=cDa1n2y>tzs3g)`4sy6HwPHW~@}_gxbN|cZq85-_V4MQeMK-zA)ARcr zqp%VUO-fqG54?p4O=5uxlZpEImSo;rC+j1&!^==7qC9!-?~6k^9!pGclIG?JQVDh{ zO}ntztCpwap2bUrt5(>&$eOE7>fiQ-g9{tpn$gvLG{l1q5(4C~SvWa!LFekD{g=U) z-anv?AZPr}Pc(^UdGw`bF4o-6Dvr4*J4lI|ryX?UGxv2Z66Q{|gE{J-(7;N6=V4zp zS6G24(NpH?P4^kJGN;OPSqha1hIOY<;KGU$#9cM9wD_ld)M@VAtktTv;U1Z#v9Z&N zl$-tiRDy4qtIHInV%}dkvYqYD_;_k**xbuwF$}4;ZfJGIvg}Jb?s50Daz+)GMkc#F zhE<-wH!XrmJops|zIub4Btk;=wg@3M|!=wXhF^#buv zy$?N&Z?kx?ta-Um@?57M-Qpu(U@GR+bIaT{k}9aR-mi(#?!^5gbD7KXw3X&m!*5%` zIx(MGtUS5#D5*T7vYo!k;;J&Efu9X$#LU4z+OZV;|E)@pZ{~@D0?u?aG)EE7u2kaj z)>vZ+lWhv8(VC!eNT;D8@a$S(g(Ul|7Ju;-r^z!K?I#wD1+Q(ggwPaaBJSW!!@Bjx1LkO z3yf$16m5X5c%WAj-gh>IivIeGP4J%tw#2`wZC6iP+&9~gt)%rxgk@V~-bO=T>Se#U zF?{>PccHn!6%!7P&I?tNTNFRkx#*Y5*_wKp9>Xcly^nI9-au)Uv&Su*f^@4*nUg<@(Ta{sCz z+A^YWSKOY9Bjn|nT~su(QAnmrc2*XeI958+dV<=+JW4OuOqtc#lMS!)c!=O5qH5Rg z{}KgtvQEgUD1HjvDwC`P@~HmVxN;GZfWH~g^)pSZBL;&i=;_HFmea7I@vF*Br(8$8 zFp2XmYf;P(zQnabH#jOyBF^mFoyXD4fuOHkBR}uY#lW|Rb+PVVTuv9|wAYSa23Um@ zHlyzq%}}Qy?3_3Avx?^IAt(2A$k>xn5^`98=q#eFjK;t-8yfh*Esl#+?rE;d@!BMr zHIOg3GB~#WA*{*lAoggv&R=3pBWqKVpf%C#H~Eo^&BJ4T|6*;setTUcv5L=799IZM zXY^8;v&spx1KtXgo#7!qumnXb=3&ZHGT|hKZ;|*Z_rILP8ZcVU%iM^$#1rvs(Kfl+ zr0Q*#Uy%Sta!(F=u|pwT^RZGH5Ez9L@DvO)@j^WB%-Q|JlDp;y0@1TWL1QTGS%tM) zI0ig-WOQQNEU~Bg&cEdo$A3S9mWgs60Qp^EtT@WwpEMM%(Li_`+yj1t)uaMEY;m|I z@7e#43-GLRb9kdkil`HF6}+0_Pqjex0=l|83Kmz#>TxH~=)-wp=$S*IQ)0lzv2QeC zb_j0<{<#!8pwCmvS?^Ab4L`FyR?iLx8Z9<1lS3@{Oo)=)*#cc> zq`f2Cu?@P|aHm<}X(7Jl{7mfj+Qeb$zC>Qu-2Fg+_X`mqW`b-~&?pw<6y;kFV^Qk* zdZ;JzZnwBz&-*MiVIJ}o`nMkd z@6wYfiMiK3FkJU zaC6}JSku7reVa%X2~FbDY{C%?BNYT!vt%T7cFf|+vj);edCulu6%xja5X*&fjK^7b zAgP%L?HVsCk=u|A;R&DU#evyr3v=<)(IY6D0n!M?!Ac1%OzH(ca*$7%jO8OQyXru4 z2Q4AUgVP#L`tJVao0pR&AC0slzPiX4+!+(Yt^RcQoGBm6fv-oc@Bi&{f%5Ut#Rmf; zqj)aDe=)`A(NBz_ zDt~pSCFu&2$U~2yprZbskK90on z^j1?-Q?Ie#$gP+I-SBF5zOJ5O!)_p}R>=A?Z|tlyl^Bt63zVTa367SHW_ex-B)XZ7%3pJDFnpTo3@nL2i9 zsJi;5vizpO=a(w|5JhS*9oPGqv>)S{O=j}f{zh>u($L?Ll?Vl;Fwx{c!W7%WbO$yU zLqjF@=goOw{q{g?RIG%^C~B`_j{F*DWRag-*4Kk;hnuFL=mty*uQ>Zj4qy6sQ05W~ zMHL;{h0I?X!eMnZ2NExIr0Y@4nO9NU5z6HLhN8eF^iE-4-DJ|J$hkNUT_y{jKXGP% z^SR2{n9=JP|LbZL63^upBshnsj`=i7sRQSMj=<@y;QDl;Ow7Zz>}n{{>;x}`i_xt= z_$zORb-rq-=g;q9m~XCko`PY?z?Kv&s=+j%ce9jPg}XXyL8_jd1pZf4+#lG3%K$&j zba69PQf zN6OK^j>RztKGzMlKseE6k@cUyT)(>(bQWnz&Zb_Po|2r1%LI^E3|U`YdQuhf{$$F~ zM1~h`NflUspO_rs?3+-YQBPVmG5Qms&FFRQrb=P*Y_hclFiwEB3lnFA6FrM`O*fx? z0+R)EAsnI&##y{G9XzR4*gs7w;{5q2zzj}zUde6QDrHf_C9Bd?(K56Buoa}^l0P6O zlraosuP$xpYgfgCHyIdi{`&Q|6|%(GcxOmMloYF-#+zj9ULVAud@Jk>MLlyBTsU3| zjzDp>rKcFwB&Taw%2r^Fn+s2NN_sqn7f*ESWnN~AeU65L#_(^isIl6;FSHeZ$nZhC zlwGBjK4$A*H8D)0!00Ta>IzWm{tP(#VvHH-=@}aC6u+h6R8!0U%M4FEL>-cJ_6O32 z5gu#rMb};%f*h@m%D7Wc#gv)@#owE+5Blb5_vOH?NCV{7+ETT0OesX7Dqqrf5#!|^ zU`awXoc-26Cu$aNAZC^KnOww%1??N4#mH5@g7QfggrD2 zqti$RzYhMlS1mJHO^5NNZ##tibS;AIQD zWp{C+?; zeY~ql9=;vgl5(_@Z|Gu4*WWUtfU9;tMsAT$H+??qU(f5p$eQP(XK5Iy@P>N_dbB=$ zzdv;{24k^SO>bWbs!95EPW={|zY!gi(&#{#qEROjnF2xxiBM{+Wu*FLGAWn=!S|)F zikx8)HzQ6f647JqPPYbrg(FX+iPL&OtvB>nUq1nVWSa(i>Vph2m3_+Ox{dQL`9>&l z5BOC*t1*?sE<3w}>IxH9`3<~9La$tb@3FNmxIJyD0^@1PUUx_r>mHvod!6P62co{W zjB!*QAir*veqwXJ=9s@nbZoVN{JnpT!-t)=rD;+K{DV6uGd&^u?9hyQ4K)FQbWRsG zmP6;y9?9pf@H+Wd!9TTh(ku$RImQXa(ybUydqyk3R?PKyr^{4kAnuQ$1mC5r1Yx&w zKpeAgr@bJm@!Ab}R9H;A#Ine{$kc3p)!BG)%?mSnhyk6K(^Dh$vm_tj#HJLtB|miq z(%w4q_Ih1(sFk=P!!d*(NVPqbImJ9tR?>p+dZ@~(^L}afJ+)4dOA$*JBl`6*MvDl_ zD_KU_&sa}9}c=-CjGsY_usuLKkg zs4L>0425K=OqA^{REABj>WDx_mWWkx*{z8!2nlJ4Ry-o2B0kGopyF8%2KrSS)#aVcG7lpRE8SRG6x<&?>H)o|ez3Tt*Vvjc$+m*g})20>ezN6*2 z_2|kqWG#zAF1w2nE2thnyv)2w*wS34;hrJJ#Y67ngfhOXljUF$O_lv#zhN9ZwQG9+ zCI5pT!{&pjXd+Soa!W^vxc_ZY1BO*YaG>%jW`c0=M>lE*fS zPFMSns|p;ReD}Va!R0iT3rnhPcT1*!uM)5FBPu$vZ$)Xg2IFnt0e@3>Q(^wl=f`v{ ztzM~@v_d{ppon>qP!4i`8O`E*(4ry_yH-Jb_nt=)C@s7={#9I2mOb=6_3RBJR)e(Y zRcK!ZDcP^+B)#q717vh=Co}e)ErucLELZd(Uo|bVGoQpJT^DeFU5R{>v%IOWvw04i z(YihK^Q^x+iBdd0UJ^RO{uvhElhkI+>2c2`$y^zxrN}3Y+a`e_!N=+jrQN(4~C@W<^tg}R7I!aG1 zFye~sP;Jcxk-^K%@l9)H0YCiGO7i8y@h>T4In#W|dH3+gB07mK#a3l#qY@9CbG0u9F+$9$;t%KF*iXE$lRvMe7uhzMFqiWF);B>tE#a#_`U6a)+sHKFqx4g@BT+ zQm*m`p1n?Z9gTlh%M%-dAWawV?G-P2oIknIm>+>-PXs5LTuKI!BL6VmQ!-VDyKu1j z=j?ADCF{iB5QKc9`Qdc~8`ItQJD0@1Ga~BqJd~*zws6k1+_-M@dk}rRvr!Z?Cqk)1 z`T^6|icyYqJ0tn2F2TRxyXcR)6%JF!u^Y2LIZ7|@Ke#%WCMBmdW@a^^d$Z=*ZmS!V zlqA++{cO=~FB-RbS9I4^um&segzCv1Ur)lE!3wS9{_`U|p1FjeM3}VJEGxB5zR@Rb zVMkXH$NQ2}KE%g#DBwhyid|YUS8?lbYE8mHgRElkDJY=d-sWOryfuob_}9$u?OWfM z6br5q86zQ{t784Q+A5n1ovMi`kW!bH;1Ov+){e4Se>P(5xGI-Ng%_$hb@d^p z>fWcv?w2bmA^B%M1Q# zNcXp}XcGt5ta{epG%(yq4+qrFqb4R{ixexmMVK9N6`L44UI-qFNQlVTfY5o9;fnfx z6MuTSwHonv)_Al(u5=m%yHC5U$R@3IhF<^A-7rR%fdQLNUB;q}Mh|A<^ofty@Qt4L zLPBDXy_X-a&>6HGxmxlXv!sVGIBuZT*1HCs{`$KczVb?y;bpObE=om?9g6bFTD%0| zGXqRpcD6=|*>X}ucjc||cE zy;g9B^7)FJ=w#l0SKtzjP@<|&+3I}Wktp9-luMJ9?x4)B^G%8LW#*8*TC(rsofdM* z`yCB++2=zl%23W>!7;sjvb2l)Nys@zc;XS3{Gde7{^J$aV~{ZtWj#0P@DcO9&CwBv zIQi{hw;@?&p|)R=3>vTK8f2e^@QNIQ5tB20Zfc>`Fl-Yn8ntVukpQ73``>EQ;v-bj9@Ve>6gw72L~%VVr66PxcI;k?`ewIP{9>OLQf zOHn&y93O=XSxFvt18%_29s}y(UFm;!KTWdQJ)uv-D|Md6zS!|w9qhZ?FAQSu2IJ{j z38Kr4D%*k*0-3Tk_7}fndvR=?d{%0;Yl^yyRW|3s?=a zHVLu;lo37sw>eR39*w;jVX9sGN0a$MX&nu^`e6X;NG+gKB7tH%TV1i< zr4}o{S7}+9n1n=e_s!$`UKtuf%{k9jHJlMEvPHT+UwSn3|FGHPz3b!QqoJzpmcnFS zX??+88i5cV{(+O{nV*0-h`nm!BP^b-Pr>NayN$WVk41Nky<*buNqBzu|6Y4)P5OtO zTf^Kv&w02`(%#6EBPb7s`|%cXK!)#jbvRwmwIb*9^sc0$q_u4z5V&pCtM%RfBrfuY z+9wUOrQZ&o;ZGKM7ldLf)z3L!UpGF2n2CwF_nU{q)B#eGd|3`-&9~P&?v=Q1_X&Z% z4VGXv4i*y5fNRwH>0-KQc2+ePw{E7K!q}oe#Z9^XK&$xK))dqtq$2v~VxyaXL6gj8 zY!~;c$~Y!XD87m@BK~;ZV7IYrspT}vOce_C$Z3tj|99`GGjp54c8~$EYhkAMYc$mJ ze*8(m3-q@6`LXx^4PyN6m}a%_4nfY|{XupFxA3AbB)oYceamyyDJmLIZ7nO9gaAi( zQ~7z*#2shd2Eks#ZB3*3b3Rn=v8Cf<(nXFgZlEU6|J()Ca5OxLJE^y}8QySR?e^b;kpR`+-3EeBdxXnSf# zc@V$ha=}2z`#OobO8Hg zCjvKn^3yH`tLrzJGePQFr>?i;{#u`k23k6Mh!$}g;D)ET$E^08gb3&RD|r1>qVFej z3i53)(czGaBH8g!@XlPzo>d4yz)G~zbqSo9@p016bd0elZ2G_NoE{(2Hv18$L69n8 zaI(1tvXn|&hbQVQcWawEi2+B9!T(J@$>HO&(~)lPh^sf9ks)R7c<0B)zVa4GZC_}R zm?me8?G~489vtTpw}hJ4+zx$x>K6LRQa}82yr75$CDk%+&Uv@&?;S6Nt{Lj)l5BPS)^D9)Skxf3~0KB+3+`o2(5 zv{@c;@j|bkOQicxh>$uCz*ex54p$whvS_5rQZsGQ{>`{R)`e9{;b`bQ8g&|J2m&wS zMp(y49T#e{`<-`TVlG{9$Bs>;YB0Tr@Lm@Vx9Km zL!!t0GZ00*kmq@ye&d_V<}#|5M$X7kL;f}Nj-NkVv-YHJZZUf(#L~p|QPWW2YfSpw zWk^y}uolIQO>8ep>;&j*h=tY)WV7RJ5KGp(6Gn{)?H>%`a>n>NIm|Si(A61-wl_H1 zn|;IA+^D7<5)yExTs9uES>O6Ry0Thg`>nOg^Hr$Zc?UxdhQ`Ja$;C|c?LsS@MD%Of zS5vjTZ^!fO_pdNUqh5;z2b1wKMaaChHMA5%c-Z3~i1L_GJGl5EyuM~OUGl&JcJ!eY zyq$~xx3rDY0<&#rJo2Wz^NFO-&&joIU0?|E$h=MG(#2YTl`w zkO?05;RfCPE`JSg?$)=LhmW20Nv1?-bh`O{$*I>+w)$xj2Ml3@IGEQ94s3E9&zcWP z9I7(3-Z}RO{J<~OULc}h#!1Z+71({6EzVaR5kh0ET1A3vY)x#&W-WN0HDG%=koRr~ zM6iQSrTqQ<&#B*MBcYw~(c>hDmuVcO#L@D8Bf8Bd{oI9@md)OlZdZmKY~u1NU-Q`Z zD41#daipFeAKR6E`zKSEqYG{eSJAxaax|3O_pLAen;*-kTOD)#e^ZQcK@D-8N!jLo*CJ{45sqV!ic3Dq*oP0{T}hU$de3 zxJWX&1>UAWzM%O$)mYlrWc(vQgyag#ARYLE@Zm;d{}a}*YqM@Hi+NXhCgODQ9cA{A zPPVvgD9k}4&1ZBMwLhT>>HD(Gd9lsErch1*HJF^CR*E2?NRw4%0pHwaxIpT=_wW0^ zf?(KwSAHK(9Lt!Cj=@eJ;j{H?2eHu>N4biSqo?m2VTjy$XQTYW0MO(y(rR~1_dX`In!s6<^uqVW-}%fyRR z_7;~4(jxd26Zb9FtNzEQIo{8#)kJl(tx$A|L#Tbb^i;A=|!%V)Go|s=DV*mVD#Dj_fgb ze>KGyw!bKHbuMX;k*%w59-dc+8wv(^rD7U6I3HkfVct&ykm`8-km!K*m>&(mr)Eh`zvp7hVFh;@vD7L^c{l_U)HmA9AIxxn3o*t@%p;I zW)*=4sw0eBb|p?UZZbP_(5u@4j4}N}Oj`?NB5e&_$ANV(9C+EXK4!9{$-x37BAxi5 zi=m|T(Mp|{dz|(COnxa@=_UHK@hJTdEl&uu;?s40N8SXkVp9L0PIx4KBVh|*^{w|7n z%6Qihp{ij@OBnGOQmE4;)PM)iWyBhf!e`u~os7b_vP_}`48(v397`*-K3vaGuL9R^ z2du-R%Zg&0(`vU@K%MGjo~2Ne!_RBL_1hNT_Y`u=?!jK&v0P#I>wA+zEtEmxv5G^5 z5Z6_Gi+yTGbMICVsKXBCeZX;Zs>LSo)potNrHrQj8Itt>Xu8U%D7dbRA}C6SNDD{^ z0!lX`Aky94-Q5ZT($bP6B_Q1mk|QA9Il$1}4f9=i-tUJ?f9P`Na_@DQ3bw+$2Qel2OEAIZNx?G)fs{0+%Wc{2G%}JjO-arY0{4tBrwbmJ11MTK0 zCJ5Hsvjqv3wtGQo=Ir}2ku100I;?VgN#RXBeg78DH(?s=o^SmcIg&d_)I63~YCKk= zn2yulMtokixs{Pml)s78DXVt+Z1{AY;3*0Q#fET&Z&V7In`0$BtLBLFr?ZTVi79>@h30W^$R#B37j*lbDj;r@(=03cH7AdL%0_Wxj;MC2bs?Tar3e@54*(Att zEQem)A$2?R*K|ol7W{mxI#R)k1~;63sDuGgzywS@o%|$0L#zaVf(!jE8cpYXzR3bf zSk2c2UeLoSeKmuS1dKmPMqb_jJ{j$Q<2rXbs3D!L`;tKBsrl-;TL}ZOLXXe#su_eI zWYl^k2t2sdi^HMlZ?;1O`=#8D?yyZ~mKm=Cghp2)EfzO8%+IG>$*`{3jetp9T0BE} z1u`HRPDM>gs@8&PlH9WRhYJu5!v*xBvIoLtChOf3dB%q&BcH%KrcF}kPPveT=Pn2B zmgw9k>dr8jW2xFpUF=_SvEkvN^yY)Z6V|DRv40Nwe=fktYIp84GQ{j3TT*_{blAl9 z!a+2J)A^o;ax}*AZG|)~9!s-8FaT*5^!ma)AT6dF|EX?%0kEcv0&wymwvwi$MlD+L zR75_%M73XE&<*PX&E`tCF?+dLFU0-w9Cx(R=F3rZhT7!q8O3a^cVu`aeya9dKGEd2 z<^b`f&0Uq>RWVCOljW{xiT&hs0!&0&T3){=EZz@5A?+=y0!Y7_1RwD|7N`C9wj}vx zsfjQo;^|6GjZh9)SigYEkxzHWc(A$euAG?{9X1wZ7om)I-Q<5%vT zzR2$m(XO)(t^M)DlAE{U{AweWw=paqR`jQPDniWZ7p}KA1>5sNlcP;N9v@?@B%=IU zkMqHtvzNd(uy8>{>5tG>qJ#Ma>abFby~A1N9Cg%i&cMrxN3IfkUI%9*;NNfoOxfUI zR<71{<4wD6nrMLO&c6hKQn(#ysirjip0$ z_D@%T`Y)UM!}XD@i{rUPZr=LCak`@~jg~tCT53RjQRo#-hdw*8!_jeu$BeDBm-DwN zr`=(}$;1w`&6}UTScDQaq=Tt63WV)^?+GSgZZbMtQj2|A6Bj&(n z)!?LhRv)Kb6acUDU>7)=0)pSR!_l3mrp%qn2UnMW4sbo0&J}%D%b16yNuxu{6qZuU*-60hFifX z04-LGOZIC@{3v7gTrl=h3-$FS4X|)DpD)(>;#8)P@h|Ow7L=-KUIHOu4TNZA3fpt_ z$x>!fN4sXvq-LqPX{fZFD?aQ%(%UB=W_YFbh297k4#9ee7CjHdf*!Paj|DmEAJ+qsS@& zn*vXGZQjF19dmc~k6!O{kYdGWianUHC7oalRm8E~9YF*_I20se?W;RwZg1seJD{TW z9Lwx;msrA}@2Ix&17EpwQ6R$ScgdHHjj_w^xD3|%7nV0CZgS;w6Lc+q2HStcv`%~zi`;3rEc7`ObBPZ&r&Tj?|+o;xq&B(s+ZA@w^wS| zdUd=$S~&}eDh;1J$46~uPrHk%>-x}`Iy|(ejaP|L_ci`3gT-B~9NcZpT7a!&QTUDs z<3(k{3^&f7ffimgGzVi76GJmIyCLAumdUTp>xcV!S{Nl38yGK(X2|a!=W$t#W*Xf( zh?}XYvfM_-2D=SqT)|Pg2u$HUknT@X2FF?>eGJtkoOaMeitxn}A>W0F*G_2Glm1y( z)sFDPy6Y`wJ?=oz*=aP0*ZOJ=n0>Y)9FQMtc^=tcTzKxm*&X6=p)yu8YBL(cGtyP& zup);}!bSAiW-Gyvo%qF3zuEcNlSe;Ig3}9iSrbVT2U3b~TsZ(nCY<(jm8O28p}Vi! zVB1SCvo>kpcD|SdB177G+LB1{Ns*4G`BQ(do{*2`&r2}o?oX@BsN?e%5)rNWx&E2B}X5G)>lMH{iSU6vndT*!KIOat$zCplxbRyY4`nZLIntO|ocz+i5p1b|GPmh1Cs_ z2wsdj$3^_t5(l-lH(EBcIRp9?n>Krv5Aw!{hZSRxBwb*V@eGI-NDANG2U*&R>XEE<2Guh8XD+8wpqMhUjZKg<1B ztd>6t?pJJb>gS5B7Kw5}&Mb_lQGi%g}{C-YBPPe zWb%ynU`C7(j?FG`D*I(bHT{%sSnEM9AGhVaLeVwCh4iwfbx&y(N~V;tOo_Uxr0X_ z0s#AF(t~$6$|Yo?1TbP#f)O?5<*M^MqRA&&t?$>zo{geec8z@>d9T}P?`esvL1f|X zuC_AST!bQnJz-l{Dl^oswTAM|XoW z!3y81U!a`6kAM9c<7xfEj@CQ#s!Gr6?rS4eSJzSNq2vN6ChP=elJh~L>L;o*$%)V? zaRF6{5 zDt?A9@K&`+0DUECc<6199+$KopNS8yMVFsA-GN}DD=Gk3-_(+@Ji?j;81+csqc6gV zMrE(6va;}G`Je%GW`t%$ntVwX$v&g z5jzI)3is9GIucu1X<4FjzT$a@`MKl#g(~yquR)hlOAOErU#R>Gq%mhFW~^{kLW=CS z?f4iN6CbU*L_XX3x{ylCD1O3C%?*m$$`Jo+vd&guCT8|*C$v5)fR77lzt?T#ses?b zwM5KPmc!ATAD>4o!)~3b%c^?q<{YGIZbkAo)na`RfQ+aVeAiF_fUq7zi`Bftsuorj z)Yr$U#WS^frkIp1s%<<_NO)j1mI$gJfR>;b)6HqgZ2~S05`g#67`+l7u4N5uw@nWr z&p1lT!-gF@(1){1%B~6)kJHQ0NT4x&6nKp(vAu$wjI2Mj)%3dlT@k3khHG@|D$gj| z22vNMN)RQJH7IPcu}|ik<5zDU>u(wBqG+`!sWDRs%5U?6kEU5PGwiTl`ViswMiRr1 z!uRS{0F#_=pbf@VW&u@*Os(&TR!Wp)*HusWknvM27FZ#V1>}@(M^s-0V6nIr>{fL)z#ED6aUZ8i3*!JyE~uZ z%eXqzkg-h88-~z$8C_f;UB2&w;^=e~3Dcx56?Ou3sl;RzHtVnw@aY*vw|?@z?@y36 z1`qO|v1ev^8YMUkRlI)IC)2{=5M}rB(}dCNM$0}vyteO&^jt~Orchwr{R!NSH93l3 zppK!bUt3zYQx%5os=iUpxyG$#Kl9;3LBTU{7+TbBs(WX$bBW>=XXWHHS#J6+*wro* zw&1T)Z0VwVm{q!#oRXqr&f(eARg^zb%fXwLu$9>Fcnw6Oc4m68*yvafDjZ|)C24uWqX=8065Z9= zT{3zV2I-GRU;NtT>HipKDn!j!dV0&}8$B|gVEyI_2&vsejti3>{w&&b>{JP0x*+-FitP@n7RtjH=S9(Hz zRChL#3JP;cskP4@=Qdh)79O*wrXp^HIca#v0nP>TF=5_ylk0(W{f~*JwB;;hepf#SpD|UVL5$X-jg8AKO9b&;l&04xzPeF~m zO`7`YTLk-zeaYKMW?Nvzh5K|PpNzn_=ug?|PQ4STF{_JpK4c}3l`&^hU0>!@6kfVu zMhP6@f?&<;cvHK+|IkLv_TNt}>dB7JkGBN49-SNXAavdwIap~$CXFrWZ zVYJ@+n3xh4QDidT#(*{T+QAxeOk|zPzkYl=&`B%LM8n7PT$oZR&h=BPMNz)v{!NzU)DV7OPNDn!k^%89N%ZKkP5Q zc@CIN5YITuT~s|voJ+x?E~o3mAsCfd!bR$nW&)IOrciihJ5Q;R!1o%z_YxeIQ_;tx#{Fsh=C1q< z*Te=BEQ$@jc-A|IocqJ-8cNiq4-6(g)Dk-;Yr2rE>FH6I;(+!TB!gCCR-DOFvD-S@ zBHq~a*>8b)jS~{$rQoD zHOx{!KMBsJrNggXZQG!}KJF8L)!Df$G?Ga=*U(uw{0?9RpbJ{m;rO#1<{!hb;X^21 zGT~snr`lL>NtpB#)qMOEXIK%J$8S^qi<4yhQ$+H~w-9t1&O;c>E9sBae4N(?uD~8; zE$R03St@^J#UK8f=`wniRf@nRqr=-sPxts{MJ_f06t%?Qie&ke_^y7IbnpuH|90f4 zPtAGtCS6f7^6Z5@Z(vnbgxoki2booTudN^&{sD7QGYhBwAAYJ&uaE@B!je{E@!s`^ zj)NjnAZX<$_e1*5ciW|;W@RY>V)4$J_{MBE+j3-AOiuM-l0*op#sQ;EI$37~{4tt< zM_jHMv;Ot;9QuVPrA<(HN7qnD;nrF=Iu9l--c`bFTRn@}{?%hUhwZ&8<$S!qv3oL$ zLtJ#jt_u};MF=12j~U9DidO3!rrve0{!?NTT~U6`m~U4FMChK;=F4!!js~SP)N6&7 zK!j2_3#-iUIuHDK#gIGRidr4Li+}P1`<3h0#8vA*{AQ=86Feid@Elj46!@mybrm5Y zwXI*swutzbFcSWyw5}Y{)q#SsS33*7Ins8))7a!SY_9_8ed_x z((j8djm>^J*-xMvQn#<)P7YpMH3(gzPcWx1LQ8~xDh<%tJ36cx?kfPqsjR~74K`u{ zrzC5_;x6Yyn%Tm6LASA}1Bw?;12vIvPg{brDj2EtQWV!$!)ki}eS)vq31&L6HNU8p+DEY=2KBjCjDS(gY%xbP(Un2RAArGl*96%91-6y?khq!QByhSc%2lKU$ z4=o=n^dVrzbpQbG2~+~LbLUCq^CvVoM4o}XU*M7g{lmvRN!!=n^wZ(Sp0XOjMPZ3K zA`FTkNj=SZN@5nJ7}fU;Ywa*H2P{X1$EP`EOuW+O4bnOZy8F#(tO1dtq^f%|J-l&3 zF(qJykD2a!UgHthj^O$-`Rp;;Hiti`bY52uH&iNSQmG3WQB4<0_uJ^mNlN3-yKLh4 z9K6xU@8-Tz&T(k@Qu)HXH*;o>2U_6evuUW1J=BXe7?5iye-%2FM1 z=Itr87vTGjT#a!ZpwriC6x@d+Y?`|&l#4O{*%nZUvwHAWlUrhEO)YKmhxwhcXF=#$ zeGzu1qt)O~oCy|4uBm?nxeQ1prt#q4Gz$RUuVu zZE;$+1`#}a@Q>jRx#!qqUzqIZ@E0z8^BtJP=59YMoRo0@<`uECpaXhI`qw6zqNiOyu^ zujUidB+gN|lRCux{Mu>Q2_Z4E2=R*4fX63VM6Z)Z&K7fca4|((oWOK@KcuV=YC?ldAf2 zNvd0w8Z_rQd>NAaG>tFMh_HWWIw+uk#0T0E5i8z#WB8vAD?cfIYilcwr);7>in_tfDpNZHCsaqIokU(tlK}i3RAwHn6Pr?$a3wXTuJ$T zqmlBZaXu)&Z8eiU+!}^?crI_zkRJ_PnpkUJ;AO#*W#vbz&)(Jd*xZd5T-*tjnlF&e zYKGNP1pk3p^Ml{@B}Ph(*(eD`qUZH63dG@XP<9@2!MK}aedYkSd_oCz-5-jRlWHo? zS+APfPUi`aD}Ck+sl)|Tg9OZt;z*Vx$+n!V<6C2q{4N?@fzE{Pn~k@=Lk?a{D!zBgyRmBVX6q=gg45xD8V|C?bi0gMhgNpPl&y4+f8~$l z`g{(sLDlm<&@DUKbS$5`y^#h;hTPEuk@dsjt<@Lx0VzSmDfybr470G7)vSrh~+F$O7lGm^Z)m~e#7qS>FqT`GtsNe|COYQP5{T%N% ze2k+p!Ol7e15}W)vA~^VCcX=!E z%(CvzbSLi{F^BEPj+3x;mwMc&joB>;pkOprZM)$UF0G9E*bT5#D-TdSeIWd`$e)S7 zU`Pp=8EUiBVeMp^K+|(%<&n2%OZ^Snb>EzDOT9C9nmk$A4`vX?_?|`@QKYrODZ>s3 zS63?{{K#53gQpH)5?$&_KPgGQ*dsyO`0($yXAO2Yd3K#nzBgyq>7!UyUWDXVo)jFs zLY>V#EV1?%=K_6cSj({Jh{e1gL}xKD47$%-IEfJqH>=w}vi_^A>KW)6Kfdj^}oNJhM>rd`3!EWaqo=k~l9bX{LJgl>%}{pI(I`zYWE*V(!~f#0)= zfu~A5yF}UqwDi54rOUkR3Ikw~_LmFfKlpudiGzb`zslhiW)c_z;BXS)xbo%AhXi7-j_j_*G$q;n zGIC4DJxQZme5imI17;r6|C9^KfHR;CYqa|ge*f5JCRk&bs%yGkFvvF68-&^-s{lrDgio?qSiv)5DC}pwx)ENUJI%xkRt7!%=7@o2C>#Lb;qxJLq%Bpnbgwl7Zs8 zq;O+8sKJ_URfmx*bIKRR{7f)9|J?YhsoVU|YGef7h+%O?ue6v^${C8dNA=a)O_$X3 z8$4!P-B0=@(d>S^)PPp>a3bGkd*im%v08@WU$q?SkX4T+V2Ou8W{nNkuqt@UOo_;X z5K+|wksnIN91V9UNOcYvlU_?qHq=*a1y5~X9*}7NK3`JG6`cQaa!{;9u{V8E>T16{ z3iFF0@j=c#y^*(ISc!Uk|M=S47*=xSb zrM5noCmYaB8W@}TB)3#BbqBJ`&aj3o#cgn)5KDzKy<2=5Zf~SqFnB_lYojjQo{!bR zQS{14b>vMLYPCsjb`<2+0_>SL91`3${?0Da@_3Ts|G5C+_(+AMeKS7UUv&UU(_nB_ ze`h%|BFn3;0|@E#&hr?30*ra+!4aCdnsUZgrjFcU^ymH$s*pVd~ zA3uJW*LusW;?pfH*^%!c&fcHC;t0Dxmk)8O04id9W_NaAM^p97Us>_0!fS$4Dj3|d zPGVN)7ixm(9rJ#-nMzSmCLk$*CF(8xs({cBnyHt#R)bTJr%26Qb`+LjZcVnqvBP4m zv#Xeh(u29{A z?SAu?@=ccFX?8OZuy+@yIVng;N7$#?&EUi2!a5*?uq7zS=TRIx;(owhtuq< z$Gt;lW~Dw|Bj#*MhXWhs73wFg?n@=Q*$ypqQ><3R!3cFx_-(+8igT9w#^ZVo|9bjU z+uc#?k!aU}sEo52ij2Gkz3Tr$1fu$GF#r3|R?E*!&N5=GNKb!I(-$rZAV6ncGKaEv z;F|%9m>gw>i{qoI^NZS}5iX@6OD2RE1pBQ03mM5&v+KLC=Pb~fwOxXy1bk3G@d=Xo ztKC#P`ysFjcW2-1Q^qFYN5nThv$Se3ERkwM1yb=Padn5)hB7PMhHk; zn}5vp`^4>H?BT4E5kVt<2#F@~OV-Oo7iZFU&$ZTquLjibzo@cqeED3kX1v>s8z95Y z7iRZcohdws8TIwJp=xipmCv!{cy?#X?8bGOqn58{M_7>?o+Z_iYd(?>Iw{;tZP7qI zvz1JqO3SHG3O~(IMUAqSwU$~BN+_WmW$D=`P4uf5ftiL-EnF}ppR6N*MNR+gUHNkc z-+yW?qrVr8(!chLjvz0S)7?4NqkU`VWAB5+an=BA*FGy!|qAKruCHHfc{#PeD(>}A)+|c31 zMjzn+LrX;!KJHw4NBmTvBI9+*ahbuqu3g|W^*LrB^AeB7)w z$UJ=CzXl2KLDBSx(X|)%)u#vdt3+SV_wwQ-EOUPEN8tU(j?ejR_$ohMl18OKm70ow zbT|VHC-MR6uSG)R0A$@h=)Y&=iM{ zzVat#H(vT0qFkcTJDf2W&&d|pIH#k< z42v_V5XED;mJcOE0P!`lOV5@?Yx$;V6DY_=0OYCw@Fz(CgjwRr*dTOl%;CC9<4d^M z%D)dfyThXvmdoXy2%HoC{F68SJvKea1!XVrKT&N_3xKtr6iIHjalTT%?{>bE1F?#ZEf#hA*(;*l zf8)buXji(`YhYe6ynZlbIcvpP=KN`e84z^`{-_3~_ezE@foM9qd&>V{2SV={Ir~qU z{Z!Tz%DVKy;TZEJ(H!NJ>&$|3FYo(hG?iEVa1&rwwmCZ8!I50yz#PPm-7*n(*#w+J)0-|E@-?yV#t36yhaPH-)D5l3v=H5UR{$D z{dzY*#1e{#C%_=SJ;OEopssn>l0f({=^(^+&5RbIom8;1o-qxN?X(Ea7kr81YhFsLAsF=DBvcKxRQ4!iqt$bANcZpvAPuWvOCpf_E1UHH)rn}?B z$ItOFiU_D(0f)lqze+O}h@P4^a}E#VRZs`KFQ^$|UV%dMz9GUREuCW%i246yu&~?O z$ZvI=d*0_Td&4^#omA=Zd!7#MBLA6~fb5r&Bw*fmiv)n=vcIXZoy-$%*;hXTaw}r$ zQ57>CGFaZLE=GwR6({t0uenUX+kD`cS7aTQCY}->8lP4%Rd!ta_AYTn)N3zETH1VM zoe?4m7o-bISL&e?P6N{gA&6jm>qQBC!nqRsjO$n9qBUyH$p z_^{U{FmLlphquU3uMd?08fE>T7kp}5LH{m8h>NDnHk-;)XHL%qI`3ECD8J^Y^te)d zpGefSqgR(G8duMf2c3?OS-Z$6X-QBeB-jQQrv4EoL?khi&Lc=l`C{zFvfa@U5 zr=LuNLh9=7p8qL~;a$DDs>`tY!q1w3J9A65T)vKj9#p6GwS@163 zP(gpQ6JN@uM#d&$0q+;dwg^UNVh+rl-^0F*_qzhvSY?t|uT^st38!~O^2<}9$dBaOIK^(Epz5+#9dqwe?(02Y*)-u>xM}2R(Y;xL99HCd> z%kFvDhdTh0nV6GSL)39C;3fOiYqM8Jb_&VGhEPAF!}hvGniJCgqBJ&b(oB)13!SQR z0k^aNU zU_Jf4Ro&Ie`^)sT^sD3)kXX!7B$(c%wu6hJbUhv3&5|6m1RB6pZFhq|&_tCFuNas5 z?W$ukrM@q+9TUujAGgUJlhQ~{0E|8}Xs=kH0$X3m_07D-zA zpyc1l;ksWbQ&LggrwSk$`!J>$VgLv1L7s*v+r1mv-bDyFd=1{h#|&(gxM0|Fhn6N^ zJVXr4`-qFH*!qwnWFf~NK6rk>^?cS8@OfCdG$T*FSf`A!n($=v#IsDhq{(0ByCL#M z)0ysv4-%iio`{4g>q(>EBmYmI@&7(57qY5*$hO9BCg=Zsdur_rDL!KM$U5#^t@;ob z$yv8qB`PV3LS&EZy@u^H4_(#>XTJ#|HEP`jruEf@T)T$wLAG5w)E_|-*=}jtL2_i_ zbrPU5GTdM$O}qE!WATr3oisyHf4HW@n%PLm`e0xZ9))4w1O@!}YO(Nt0fIQ|*9+iGOj5k6787#8U1+9ipVX-onP0)PWsvLT(fzQ~IQDkjg{LRxxp(D6c$15Y1L=G$m z0d@sSH?mqNGtGX1RTP4sr1yrx-JK|JhjxCa56o8o=(vE4Y^8UzhwUlmS|P0q@Dm*! zYN2~AiMigs3xGhH6PF6ZfdKyfeH0b3C{G&IjCgKVl{9+!kwXFln}|rpG)Nlwfqcc5 z5!3KRB@y!ShX=cTw?A^KY&eZRTEhcF^9u`Q{56Bu|5kg{d|T<*tH-TUld}a0&J14n zcP@~KN~{WBQ}xfX52>nlB%kfkysXBX>uS-=oemqp)wo&=Q11;R;y>`Bs!wa~&U(!k zhyf9h-746nwcRgrsqeB-X5iKHpwPyvvE3t$1P%X*g#Y^vvVF$8VVvV}%F2 zb#lMOSIYR6pF^?^_U-yP?3jeIgm?1j%}x-ztt^=Yb9SZh=P|Y}G%p>~0W!56u^IBu*s8&&BWzy{4<-Xc~ z@hdqM-iJ2U7ndlSSS`T{eqmqDL-7-1T_^<6L&I!qWPVQs1-gcz#cKxiFQ}aSsH1;e zr5UJM(B9zj&jL#E13}~QnDgEGM#;O&QD)6YVw4WMbcKj@1I^=>=nMoGUesqcuKHPa z6RPpy52%6yCz;FPR?fVrLg(x?EeH-1=+VXQZORnuQNu^JZ~xuy4hh_|11{pU2P+*x zp|S-zsw9WnZ=$1zen{uUCE&xi*7kNC@2-*q`r=y45 ztFJLLc3OnI@wGwMYDp8lvZ62;U8WiS`HOYQXeSserp)Aljkv&P%>w9)!A4!H=^m*; zuglc>pph?Cl}HU!&YGjay#_`%ba+p~_dZ+=;aR#wls7s*mmwBwT}(swTA8Te%#*3J zutw~fOzRxk2iOGVk6UhV>{85LOv$Ya2qfK(Hodu6ka?5SiQ#y^iu#1IKW9T02pw~$ zjdl8fm*vWlOzXnV5Fh$4+?m%|+TM-l?ndR&HFS2Q>&?R#mP*jVrSwNr!jio!p%Rgy zj^n=PFE1ptUR(|jEWav-GSWYc|Lt2r0A2#`fRe|ksuE@BQk!D3+>xu#Z*thhQA*sJ ziT%k;uT?yX?vMK5cstk^v-k9BGRYC*`sP*8I#O3oZ`KEpQf}O?Ciyc$WpQC9P1fDH z67Et*oPy@d&mvo@gM0mtTUTxy9^cDJh>nb9r;IWuZiPd~G|55>$|ZJ6HHqsBEs4-S z`uivM-s!GUc9<+oM&?*wtcsBmnAS)5#g9|(+6L-We^#-B347?Gsx|Ycm>%eG zH+psvc?`K2u&@ZPog~t_Xy70v_;3G~*j)N&978CZb0&gl=i~m}Wwo}g(+*-zu10S$ zx~C@tFBYVNyuoW#3*U^^2?Sq4n&A46$_&#OWMbYBVe3@RKoz~FsGbqRfdsVoLT97P zrYoyY6N;u<4_z82Q+|B7EaR7yUa8d%ZII%lvtz;XPq`S%kU_ukaxoqqOcxa&-77}E ze<^O}ff(sq1AxY&PnRm}4pW)L~Uq3{bj>`hC4B0kwCaq-5 zSERXDT|<|b5mrx@IMQD_v9>_+9P2X(h@YR6Z8bIbX@|D~8kdLk$& zmI&t(&V_46-RI&sDkk|&sF*Hw38zU+_h1+@Iw3bhUu*9^NMo%ffEX`~iZqMMq`M+_clsAm**Y%uFNW zd!>!qNAVOwUByIpj?V2A>~?cu(ROcsYIqa6C649clTLMRBIYB4{hkEqougqPlwyDW zDx~f>&WHU9k)O)G-9ioIR8kl#xoKN+P>zeObHNeV^@UgV5e(erZLnI;N><_*`ZWc@ zx8{MF5*VQ;DC3@((Sg-mw9B$gwf_u_&V9Wv?rZh?Shw#N6pbS8DW}J^r@a1J9d!+j zVQstitS-|Z<}aLSX>wMO(AUSlYz3WV_zj#^hGNhS!X8)EoBBPU?Nm0Uq-KQdcwtrO zcdD*3PyGvZX;828<*ErM>JWl7#SX51*=4@RdY2lL-D5A`kkC!z z{ie)0ZOWhJ%x_3?T%BHD{#A<2884?A^e=Hyjn_Ee_7xo2 z^BOKQjoz|$4IS`)X4UQB*>o+Hrq|y2>jcYiw8-c$?~jhi3#T7f^TwIH&e>akhZ0pP zco}m)AK=ke@V!I%Jk;*Vc9GMtF<5_F#){Dgoe4NC%Cdm*CiB@5OFCHa?8#lExd|cS zlblr9{HC5aUxJM}(&3T0oO>6ORHaxO;EOi~^~rNV)y5=2l5Hr;=;bYV5^{By_L$LJ z!$PuA^c?hW6V07b>*qN`RNHr5^=|Era_C>(Uc7EFm8J!e{kU;W$V}8E&XnRoUMM^d ztDz1*4VsTyTUGcX;$tu@q^jby@Kvpg9D4Iwh`s{8tMnD2#IxMNwbnCBb^@R41=Scr z9~nsSypTseFx*N&RZkwF7dw@v@wL9we5L;XJDFN6$O zc{~Cut#SIH2;U#k0Syfeh0nTR6JZmOrT{M}#@fb2^U|3ZN!?Ldjfc;Yj&!YActbBR zxu*QeT|f(JKFiA5-yv6nn-SbQs>%#5S)o_o!b5+RE^wPV@ua8g?lRwdi~AX|B|6%7 z*N}qjO#gHT$}c$+eU`=1(=y|?R+(P;_YZm7eWwupkZb<*X-*H)&(h%&j54X-(mk}bzcaGyp* zU!l|34)&dR;b6SUw0TT5?fUZUFXd^8ZtG!5%b#2gwrMP4$&}lG!A<5OE?rJrDdTNq zJN+{CI>+~frhXT=4}9m>gbr}=@upH?zncGPLHbRHXJAK%Gq7ki`8F%OJ!dzIyEDKZ zvjh>Z52(i9*I*wCxRy#eGHG3mS9XGvh&C#1NBaB5?*86VcIYtt6;olhxXiZ2g$@jTf^E}hdr-xgfx$#m?BQmZMij?N_7Wa$fTj|{PJ?Wf)j2&kdGz$q zP#cr4dGR1_%}g-?B5dCvXeOWs4&m04Du2t@WKc;dWL>cF4Rnuct)f+A4Y``A>oGl=cB%#h=fTxOhV=U&dSeiU^OS4zsru?%p0!O@Ub*oval{-bsNi8(hS7T!Ki~$Wc0%RoswGk1SsnkBOJ!uQ(VFxFBY;yf|QD8ZZBy)0+?Zm~0JvT=c$Um$#!8Q8OfR$THvx@}s* z1uHd?k%)`PbLXZ9P12N%joFik{_8Y|lXKn%$5mBGXb8j(Z&Tle^PgtTw3%1-$_!N? z!H)h5oGQH8rwkoA9YGAqSqve9lGF0&e>f^yxQywX6t~*GM&=fXomT#)nbldK!5t`m zHvFdAsfxq;YLNhw`RdDUl#irw6b?tT>E-GL=}cAXV#%#evj;8(qz3oZub~VWGsUX7xZw9CP z%qAMUP^r~DTm21`A%Ev9h|_Xe%5I9y7Gm|5C`MZ6R&;R7&k7Ae<)3-7Z`#qax=5jO z^tb#F4lUJ^J{PYpb|a$$w`pJm$ntt!1W1Z0O#4zb=(==y@R?l)2S_z%A+jK&=CK{I zAgS=>BElwbxo~Hz-I}&q@E?hFzFny1+wg(+Wn05O90s|(xjyzg=fuj8fjsCqTMtxw zuOBdRGMu6Zx99cPyxm%#{N>OU&5mEC*?CnW@b@!GIy|ccu@IS3{EF($-#L?e16U-P zS|BcOZqHi~a>ebim0us->4OCN_);gRs$1e+ji){SRO#${xhbbO*L7r{vgjx1gJX|% zpUf+5#%OYmWe|Sf?O?3tnG5kN8dt#&G|}_@Ft7z(q99hyayotW ztK1V#{_wi-VvP;Hb?C^ssc8j27H@4Oi)!0?IrqUYmJ$_{Pc=l_s-?s*- z#_Tv#GSfM6ETx1**%mYkJidiryhTcJ)f9U_|Bg`cZuU52O599HTjmx$#6svx^Snkn z|5{b(xohm}3KJJB^x*GCBlz|36mft<*2N#BCNJ7#)e?vDQFPdByXd(2;Q66ql)ZT` zt?NHX`>LMVFh6JdWbs_c);J!PUdvIjN}Nmh@r~DC>1nx%0_fmH4^AFOvQzre(H%i^5|_%g9MtJnf!P$y1^&RxB6O_lyDs2kCBVZ#9NDKWdAh4|R|1Uh z#!vQy?qh_})vt|-p427$JTKm5K8T3}H%_a?1E=NhxVC@?+B_xGW}~XZM_k{kZ;yEh zQ|i!_87k?LN11~$5=Xw6>2v33h!3tuxN{by_RoP}dv}~Z6c?qk7^h7Yh_J2&;RY*; zx|daYn97zMlm|smK#GKw)kJ&fQ@rM@F1MMdu)g)-G+@#i$&_*fC1V?3sYaERF@@ka z$*k5D=W?T4ifrqde?J>`sp(lS3nz5yJs%^%yU^?DOSTlpYP_^Esr@B{5(egx#W!XJ z$LDD7Ul;ovZPmxD){Q*cSWPt|V4Y=7VlXSt9-8^xxOQ=+W2jOg1>yFX!wM!MP9=PmvrB@1s_7>Ek;N0no}mFbZVm+ zs_F3BC|kH*eyDsw!BRM~=t<+H|EO6By-2~?`<&v`My5XAho9B#*>iYagLW)KF@K7~ zh&9AXC}W^~50B5@x~K%alzx!Z7~nGKGHwCQPDAUJ9nQNSq}Q0aZCqJ#L9{U<(OSFi z3DOvO@+9o#ZzDSJ6QO;@NgiMCXf&KE(w(QxjQ`%@HU8S_+p{z-3nB9-0$sD8PwkLN z13PIIhbs;aPJgN;a@xA*M9d7{qIq*!5zU;D#?jtkla$1Pv{$jE9}7A+cq=4|?jHX5 zlC^Q{sDeU#N|Ui^_FWk>w53|>82T7;2eA-?1FEnpw(Hk%)ltGM-R)1QX2k`k;;_DGc_ChD^#>T{)(CJ-7i zvb3tIhL0(~7wdKi9mbMZ@FcaeXth9$=P6r;`?k8Db3xf&;v2nxLjHgf{67Zh=8>Xw_97VcqAt$rHbEd14ZT^tq+qvJPt;<<<9mgw2t zJ6ZpoNeLouwZHH?(T_6Qr^T~m!*TMhN$!H*gTuTG)?Ii>86^!A^T7fcso3hN*m)pS zP0ah)zRpF_gn6n;S6O{#XK5lbFTlR%*6E zg`Tb}T4^Qc9Q>#plV(vd?za;`;LvgE6RFh##fBA!CTS#_-Im}~rF{Mvw@pNW1R3@ux}6;bE8Fm#PAJGi%BP38 zPZeF2zL%%8jrK&XTqGg6b3TJ|v19HHs<+i+cGA6i4*C8Z+&I-8#sy5?EH2(Gx1ysk zkaYlRtE7+`Tt}Z6x}^OtkVie#>2Q7-B3h-gQq$TNP32Jii>`Qf*xU+Yt1aB(Y-qAyKHo!>Os z)ZwQ>ecD!fiB2|zHisY&5F-m`=JU-?%PFUCjjNq5t^`3ZP_wl1T@LDOkwtDOGgOPF zYBn+X%e;cU1?+jtbPNbFpK%u5HDbpm%xMR~4$sG2s#{_Qqq*)x8FRqLY8Hu%JQTrt}R{ z4J*mRz`Txmb|$;a3gPPro2mNMw1=7g8tjeFw1e%6%Gc1Cc-ei?l;P!Kezbre|eSE zrKrfPMayou&h}GI_2+W+Q(10AGt=fy(HkX%*fHT68!~YD=hEQDuPT#wwhKOO2~>UB zMTzO$$#qArxk@_zI#q3-no4vZ{M)_6dj=$2ZxQ9PqHO>z@jMvs2%mIrBOQg9I{u-G z+JBA3vsx%=t|W^B*Avn#X3M?J=48-BFqW$kAi2mD{}AD=8|zNbkaAb0tXv>JXrI!z zo|V-YYNRC4jyVI*=(&GD;c7Xud3QD|)yNmt$fWH=3La`%+5J6zA=fTGS%r_T$VPS)Jb_9jy^k%>Vul9wCJ|2 zWu7oly~@>M^aY_@HCod7>>-S%^KKEnVs-f#Zj6GVUP4c6wj{pP>cfH%J~kk%@zTC$ zo-h2A8yhIs>6>Obchzwbx2|`Z5;5Cx>*4-RkfHT~)hRrIjz@Q-@44t2o&#Gu-c1M0!l@&e z2AFy}N4MM~64D0@0|e#R>ru_uaw8n~l3=faJrlU)gyTu#5iu-_V3E4`o`EQA@SF1~ z5DvvBclh$>gXay}tZBQg8J>Jlz}{P@qz;$=9hbg<&Ej$mpU=UdWahXPstb@M)a@qY z@+h*)p4|8yqw(e$XHiAI`vU8Amb6@Y4h;iJ#NOM6Np@UI8Azw^9|#NMtagmgykg=p z$*9STX?L|r3zS9e1eu)%y=@?q%DhEr&P)s^?Kb#z$19qv`X^|p{G|49)zJ+>Oiz#R z{_YsvQcP7J-yYX8PXy_A(f}SG|B!2{jR^zdQqOHEZ;6l&ZX62Xp~nR(>qaRRJ3p?E zka)ykiHld8x|lX}zsfLG7B~H#DgDrxo|2LtN%VVMx&EBj{b!QqQ*%CkS*w#GFzseg zyB92bB_}OfK)d8_9Wn`#VAOMGJtaqzkbnCzw*Vxq>@z!{4ZHmA3*|0PWj0F%c1(O6 z5vK`eB6K88tLXca=VS!TfQ~ifjgKzhmaDiZ{#XKiIinAUkaiVSKti5_?;13^^#bse z07x7#h_ZbH5yx;AqbzHj5dWl2&eysABulSyZHjE~HP)Y!2EE_x#BnT*KeE4aTUy@T z1^wy{1EKSo-=xJp!f8v#5}^c01b4LZ3dH`DJKTx1AD>{f_6?C@2nzCf+#m5ALq~@& zs)EqP9ktS^c1Yn&aX{fw_V zuzwTVt^1HNA5`dZKDc`RO9#epw529l#w%q*mmE|Vb0&6P6eurMakK#rj}1M*XD-F^ z?c3}*9Wba0F1EhC+v)x4@Chj_*AE-~@Ud3^g@-wc{&SJxtrwemACaM^2^C6HcLO17 z`+9OkMF&}Z`_Zy}4$TQD=!YM&IahF}H-40uRVIKRFZMdrJ&EGThVFdj*#jYRnHW#u z(y=duyK#k@CnA-`rd5Z6{#66?ZRYGXMsa>h<6Ag`Y~kJNLF&bao|}@OkK#{Hx0A8( z#vtUBd3Mc-T9?&ow?CwRv}R z!Bd^NFV|A?W#;hR_E-&~ja);(g3c@$JUrEW$t2f!f~b_oxRPeuzBSuq)wJ_ZLi`#} zHJ>A}Nl~4(WEpBp3T1}-Vw?wq#>-A|D}3R_DP5WCft2)Iw^S-lx+o0p8dT9HA z=!+Q^JZen|G}yiLQ)U7E;}_mm=t3p#Y^G@482fLS7@kzCI{%rdO8g|T$cCFgFBZ}~ z8JS*%qqLy#UextUe6p#~`O7#+@7U?f8drae(=k|8Zk8Z?-q>Uu$=6y>r`IEud${i3 z|FZu2XuL|aU#B7wsXOB78%R%Z0&%_^e}T4?PC^)90e8|T)o5$QboS_(rSDlZVJrvPuBTuYE;%4{&kj}( z%z-IDMSq7R>a{GH)hbby8%EY`Xy$$a2t$_p2P3|ijxo`7X(f6sf%R`f1`Vl4E|LNi zEC?R7I)Q}%bHZ#GQLBvY7I|Y;W2?~v|GW#n=Kf0V#e-17Nw@(+FIA%jF=v|+Hah+7 z_qumo>{BuIbuPlmNI#?XKAMZ63w>{P)ZILSzE48DQf4oB+?gqII|lDfB#@+XJ_RFo zWH1^f`<`5~t^`|CR7GUlT-G@3yWDKl-eTmfIy40CxN^$lKiV2ZNW@^ZNDTFs+5hWk zi+L~sBQ{H3Z%$JcR=Z($`t@zMt~=DNBUQmB()s#{|BUn+o6iNN0=$6n{>X7w?y56h zDHe=ZW50NtNL?ZlnhhxiMFKymUmqLprCjisB|lI!Tvltdn{kkQKM&z6cn9FfcDav3 z<8mQth3>^cZ1MfoO8}luWw4IX&A!v}B7(?YQ0)c~IY`^J=EOHjjS}o4M%rB@f3_Wazvy_$m%kE$wy((F9ma?0x)+AR8Sr#=B)Z*Ly3M*UZNh_JNc zTi-f79j7KAVRFe$y461hmjN*>|8}O8O_M&{{)=LIN|w`fN!Tx7`oNk0(ckX?W4TP< zS{jK`Fh2ONQ7*0&GmRRwhMjqzDZy(xz-a$Kx34pF5-FGXLG}WF$eF7CaES56x5doY zrJ(=NoDlT6Itosoy4inxIc|szqW=m$p8txSB4C3~YntRO&bjD%k1SPd!>};uuhWLZ zeU8vl>N#>wdRD|PVBDz@ zj0tP6gzu~OHg1-_u^ptYB0Z&pzJll3q#g&GN?P z_IWD=ZYwkmC>2X~Q@|^rf=1>tt{>F^lBT`+cV?`2q>iOZW74)xuaPE7-+C@uqkwkR z3DUUhJp4ShD-W|`pKH|dT~<#Uuc6XW=q3i$)3nU7m5khBq~1Dzj%M|YS1)oZOYKjq z5#aDH|7yKgFOOA>PVC=XZ9M)nQ+7I-%AQ6{x^dd*~x9rwJ_{?>PC7r~o(IK$A`g<2?iY zhwH?A3FSeqqmeWQ3^zq5-1*h;9t0H?ry-%C#;0A52Mi*}wuu#SuYX=`n!s3l9!5QI zl}i-8JN#%7(?d_j;7FN>G=0%t1d|6W9|^bJZr=g(M;)Y?t{cM&rq(+OEXE{v-9(UN zvF#$ON#BKo+~YU)23!Wai$atm9vq-^%&VU%)A8+MT18bDQ$0&>6@yN-%+bgf=(3Tq7=FVTZ)`e(&Y;ge&N$J)F2--6^uv>!PADxHzC&b+Acs#;OPG>9t$eD-KKE57u5Ub<@P&w*T0Q z91fl>Bb9C;*&k}~*UdMY4t+ejFsV#rHbE=g=Ei%$#k0zpb{f2)2# z;!dfCwxt*{RQxaRUL66~_2vwhLN;p#7ZBa8;>;s#^Zyo@7Ehp@oZ6c$%<&TvJ||-! zWe5lZLW1EUDJlH$@(r~q>xn?sGdWH*D&GP|aFPG%T>O0)5i#uQGJ3ku0~`csv6`y~ zBZKlOae>uU--giA*UU+&(zVx!do50kb;Kvem zEQYqzLcme*uKii6cUFt|rYcS1>5$7@d%*^3hO!!t^;QErBy>uT?_Vq>% z`wyi5sOmcGe|&1l>U$aUlEH7gV83O*lm+5rHQXCkavj*c=EhxPNIUE0f&&tvcWkJ=sV8`V@3U)uGQrd(I%g8hw}%Hx;~rig}uRylAe*^MF4NvDR9(2U^GP z<4S5K+;x_%M4P}J?wwG>y$L%wKxzXX@XEJ)wL&d}Mi!VF%yl-Q?3IAe_~zX|op09Z zXULlT964l7{p3l^PV|jzwqnsSnmIZ>Ws?R|EQSw8Wj!IiB3N?kNuOe0QA9W5f@US)iXid!_r3t4kOQ;Cuv( zu6S4#q#Y0tp3AVM2z7swZSxb-$5S?Uzx#Zj3odr&PDV6;z84HB1a-JW&#gy8{tP|( zs(t-Z-OckpR>nLP8Uj=89Pxhuz9mJL55fG>xTQ}Y(7Oga3rAl{2C*E$>r6uonBC(T zc^>~zzdAY-!x$rA&voZKlE=`4-|MD%$Ivyq__*@=-M=Wi1A8l&epdNK5xDEH1JF!U zY)Lgs;)Z{JWnm3(fMAn#P<8=paJ=Umex# zjj`MPNEgkOeZ%F<7m~`yZRMo0l*CVO2po^&7$W~b0p6VEZRd(p@x84CP7-}vE z8Yymv84nB(XpmL%nPk#gqY2NzJV|K6T0e$vtb{EAYM?AnU%1OMCEkcYR4GPfv z8fF0?2hnV^uPi4&IH?`9=tZ$V`W=24u6|Wk2aI$;Hl#Kh=sCekWK~A*cyzdb1lABE zhjQJ^d`n=M=W4V%buG(OEP|R=Yuj!%UDcR|owgh82`2dW-j8gij?Yq@-T@kqq5!t_>n|K&7khn$I2A7;JX*Rb~~{0bKUJ zU}G=njbO^WBnG^IIEM5DeQ?0aSS2PW1zZutL_xrTY0UgYs-&X99*Yy`2(QLZcQkeM z;DXzF5A&m%opAv?5LJNl%h-B-Mr4n5Jnyc5R`@WW1lCNmM8IY(K(nMvkS(Q%#05J& zqqodL+X0Vud)jh3Ryy69eeq`{t$Mi^C)_-5t<(Q!83BV+QrOSnz(urm?mwC~x)sJn zta?V$%tf$E;g|z+Ne>=eMW$NbtkCwJvTWJyeyYNE6*QNLzJI3|*e48VEcE`zs5Ma~ z=BuY8=QWa5jXMl%Jnh$V)*VEEvd1{g0G=O}2#sL7>C--M?g~2|vi%#o^EJw=Zij-| z8&y;wase{jqg@mJGvm8w1u7sl2+zF|uZ=H=(EK{H2f9Z15TiciunFP(BG$lThMx1jv>oZ^}cDNlhU|G6BNB1F9CH>*7 zY2As<`?}WpYU#k^xSh{@C4Z7#F3#AKq$RM2(oldzlgxC3l!}0eMciS)0 zW&!$m&5{Yg8soWi3kL2^oQCpPH+doJ-7!TRnlNsr4~2FwP8R(UKnj}{U+hO*s@V-l zDd+qb)qEi!HlO!M@0cfzC1FL6gX>X^Jp2~!Z@+XrkloxPR`BS4~V9dRZs z?VD7tle30!AWy?w@+ft#jh4g*5BPvMFS(I6+5$&6o-oh28uCN&lJQCR`{=|mMDfd4 z?wxhL-E{pRXRLZQL{OrT68RArNng(Uk3-V>Vsoo}V~Dl5>&*CpUEml4E!(Q)oy5#< z{{r;Xx|Kn9IbPkOQLO1^tjK-dC-PD8?LQ(G+O-v>FM)x^sI1xLDlHg}*~KMOwa}JU zHlsplAD5s_1%ofxM*bY@ICZw$PIPgwc%d#}@{u#_QqTS9ZPU%CZhtGJg!4^JKE4-o z?z0lGunj`I0xT4=192LC6R0F52LLz)j9Oa^H<;7CWkHFR5;Yd%A?B6rD#nya%KFLm zXzw)Sk=$DMwA9rdQ6RJYpi~N3L44!K`&XNugUjoJ21iy-(;WFvEH_>O6S$~?HcXA2 zXUBjVk0IbX*sF<)a?_Q(1`yjz-!?X4`u$cYd-|_|g-VocIo6)@M?z7BzY=qwMjBMU zP#uWd9KC5aVSG0CfB`Sko_P5HW?nsGS-OA>LME2!lM85AZO^f=o(EaDcAdImV6M$TrdJib7~G;JMN*mZ=#+n0Ut{8j=Ma!&YvZ5Vo;Lb7eGF}6s}Vc zl@uTpaQ`vaaqd8JOSCU8SC_*nhm}S9PS7h9SV_OStUK`C`D}Ylwgi%b$vufw)|Qs* zoiK;p_iMeS-$`b?J6=4CC-6MkmxwKK?dD>(Dzb|=zMTk56jaovwNCFB1#xE={rjR(d*n&OLcQPWW$>m30qaJKnS>Nv|S(DpZbcXIL$4rf0CFl4_n3%{4O_KZ{PCi#7-SlWmoMB z22R{ROFNy~@-6kPvh>qC9o8J@-!7chsJ7(<Q|bk+CZyFdk~gzQfbh0p^V&asE| zjbN5rSk@)Nqv+xKA>2P8t{hFEZH19kwHVOsKSS@@+P9yvT^IG+)2;ZqhGqf0mO*k~&o!Xb)9+u$ zd0o>!WG*rmax1w%Ho$!>yNI*OL?;K0ZN~YV|?}>bnyvP}1P6-#6W5<2`uYCz=Hdz%Y(>b~-l|oCE(25sncs9H`xsw6;IaDK%5$5Y0$_#R^gCmEvg~6!ng>U&CCs znql5KHhFI2dDFrjH=>AcweVr&hCKo0W~{-ajTTv3s=4v-2>70}$WWm#EIH%W2I2vv#f&Cw+|uCK~4aQP&N7YAQY$sJ8|w zbho^+`Uj1~=Z7ux*0eywr(jHJy8wk74MV0NixC8z_rHaEl3X7%HqJUNc&SuuB-(LC z+>V3Q($0Cem)x%N3nk)!()E}#r{s~idO@P^Pc78#irPhcfW?k8^v z@WcckqlF;QwNSx{wb+|braSN%;leI_({pyJ@HXv@rbiBN%LbXwez!>XT0RSVf#X-a zMiIqPOlCDCTlEZ~T*qx#|F7XwU;p%)IL#6=wq~5nyR3UMASmy!0Fuw%xKjXC}^Cg^f` zs#mT&b#!sERP-p&`Ik&)H|+I4s>=;fT@7>x*-6so=RtKK8P>*GN7GO(`6#C9Meg~Y z)rZ4s7E(_@*3k((qCkk{R-C*Si??MQ@#;4`V30&sKmedN>b18_?=O5%HlT@di)1CX z5CW|=4ugL3n>Tn1v<1b9ekws%Q~`ZkhbF66$0FSz6-qnj0|bkx+3hyVLGH7Haw1@O z8w#Rw6t!i5BY7a( zLi^WIx2Vao+%p#vuv~Z!-TYNsBllHX5%$MN=edsQ4^;=Fq@C+oM^ns6qM|y*@eZ=f znFH!9yHsWgRU6IwM zSL(a>C}5vNaoT@bcNpOuKzQ@(k{u?wC)MsNWm76n4t8x3IvhXhDq#~*H^-l%g(0>o z#vqNoKgeGC%b;wI_MM(br;%X(ueS2v85=>P#VA4O4bt+gJzn-fL+;M?$f_$vsix40 ze{}&H!AisVTJJ3>6;qbifKjaGe$BIUNuCma@q^~L@=5fyrXiElQ_>>!7WT+ zHP6CvI)C)7Hq?l)Y?FA7|D_XIUH^DfLh4`2=3|=t1#Db+3QfKC`lnjLrei z(+WJV*VlJN3lJoXM@+HidgQ~;mk&&gzFd&#(GE}tA|K`YbBUt~@2DgG<2jMv&0Cvi zlRrUqVUA5oJ8;+04ob8!RA~iX~ z!QpgX!?`^5PrJNpBZmN0%iguA2d<6?-RX|mCu}qi$m#}T9o`i!5}ACvG;sCe=;hw$ zDB%YS-{mTe&+zOKtZvXg7ID_q9)-NAOC+^v@(?WJvq$Qi*!$dhqq8R?O-T@E* zjPL&{bU}Z%j`g*v3(DgAEwVNqjJ(IybjgP*%&-_*>S{Zm)^))wF5;>!X9S>apH$3@ zDFX)iK&yKhM=-M7>ZN8A64bM6*tt#IF^yr6|92#)STsNiZE77)>#==XGr+o}EYgrw z1qWAVygZ(Es)i`;r0b+WDqd@2(3yWIpA;_>QSJ=Ao$$_Jb^Gl-k*;2;czs`zi%rr; zQLI8(+TabZK+K!n@V9{9|5{4shAz~Id(u9vbLg(_h!lEgSN z#(5x_wyl@YVD}kNO3&_WEkA31obNM7Q3~w))01a)(pLE8K+|9D)RZUOH8f77TTNz1 z7aeGDQ4I%b;Hv0QOc4ih>CE#=1VnM2b1^TS+|oqR&z2^4h74ZHiSy>qT6wp|=4o(p zyM=OvEzSfs>w{Oam>e1DpUt@_SXk0*L>Z`h9+L$1;ST?L#I(K{>b~+5TXLA1h8#JE z58S*6C=9H#=ErAy(5>yZg~2u9z`WcZC&8+u%5G0M(=(txb&Y1zq;w9A|_2) z>VT&XulC>%^KEjjtfpKlWQ>OlBDc^%)pCvW-m6^hNOP zR*{|K|6?wbGC*0AKs}bLBOx`sse>3?is~nyab;Xk@7sTE6$fK_#(c8srdZAq!;5bc zfkYM$J_Q6qLDuoyuh5;VYEL}8^cM6)7Ljh*1zE@w;1GvEs!(ALw3`h<$yvULJ0C5m z`!yEyT&iL2@fz{)CSQA4=>yAjhj?UTzdP zJB}X;2l>Az>rFZ{{(&qTZt3(+S%yDK1xwfjZLH|f8zz%+3uNPwQ6F=bEw60bjPB}x ziodirIjtQX=H`ZaZ`imz8(ZGnVBbsU42h}3Gk10ko)8gRQf?@262bXrUCMe&U3jSc zOrt-pSZ{KtT$5g%-uOKgxm0xxQ+ppPsh(i5>O0Oh;X>v5Urp^Vh53++V#)0Vq~zpV z_)!nLB4&Btf{7Q9ro6I!4XLBdY8n*+x|%)7qRE!-`Ihjec6ZaRH5cIsYl^K_^ESCd zvBHU!`2tj{#k4RrpK!ku0qW}unYV+a8S}g?vmT|8mG;qhK97(DBTYMaI-LX5k*>wM zA0Z}2$(_dUx?;Z6+%x%9YE3AX-Lg8kxMJfvSsCr0+2(X~%9n}jB?(@_%jTkPhQPxP zEHc?iRtIS2;`~~+zj;0Y{r&cHOZ%kEEviD#5%-V&Pm!deGy_*U%-8?wt=3l<3RsEX zQ$05)+oPc5h}wn3e>J-0d-e7QjZPtnjKA!k7Dt;g9&z`8OZh09`K7MHeP81F{;*L9 z+|jSuw2d+kKbuNxQ#%c=-x)fy)yS#Qgt}-vI5R1d3Yl&h+uS<_jc!E*8ekhxRAVYAF!-l<8grSPt-`G$P~jYMQsxtGCKqo0bwCRu#_;vS{iQ|x4)30q2KLw)3h>FHPES8ZiVO?~oO zeyU5LPjPqLVcx0&`?v72rXeV$_e+l*8kMBl+(~Ly+e?OoPR4)5;=aHAz)A8yYaW|E z&rvn2!oM#V=*pUppXr{A7?zh*L{-pE(Yfab&+rou}*E$Dej;_ zg*q5^puYbq2=hW|$Rp8I)Tj;3sN9kpNvjKIW)7v*ygEyjt^i*?nPfgaPxoF7gD-sC zfa+#ML0Ha`a_z6%D{EbmLq&fSG#B~a-GS5gCg7;@zVv5!QN+o@$empi((rccQ zw)ROcOY8?FcVZHdM-;JakAFq2dWnALrVlF->|Z+TQepF`V5ALtUX1tndZBuU^(dL! zW&D@PA?AN?`Bx=KR%!Jhn1q z%J+o@M~hEo>(oa55ySg|pK$Tp44Yf=yL~-31V3SgEf9f5G)h$Ahtk)}a6TcYK0If9 z;TmK;pFVhAw+Ok>>;1g{s8;d2BWB?~<=kAHK|q zM;B_myG0}{vrG@@`6->6FTOHbMOcaxY~5*Nxh49RfoQE91NZe#(p_v&%w`&y3w zyYdofrzLk%W;{*L)ulVBC7X;+dE7yh#lJ!ZUzi{Qq(8*>C)fzsGUYdQtB!0Ytmgl= zVo~fZ+e7-ln_!RDmYOk4XPPdyWZJZK&5} zf_6?6IXX+Y)j(+1rL0<9Tiwmi!5U{C+yJYJnOmv~NW_92za$ScCrl-SB03@ahJ3uM zCffXVvd#Z6A+mxpPJ|pMN0#d5@WHAeu=^_5TrTg*T@4UUr-fj)HB0+{aq@cLlU?^P zJ-x8Gq+c<5r&<(?&q`%~)Zfy`aZe~IkE$SD7fU~6k?z^Io$;Z|lZ_yx({53qlTs*^ zfOO!TzpvnWt;lcT2Zg{L0i34EWvErq%kOYp?pK>GmLnxhDZSTIbX5U%u0tGg5$;%@ zl3u1pvkrM(V9Ci{Y5!j*UG;Y)>0d2BmM9ty)=*cYhfE{?EdOSpu)YfVf?87DZJ@b> zj#+=(A_cpmUg65jDpbl_5TjTv*ph~cZ7Y1=T)+^GmKe_Zhb4yRU(D z9Xo}jpR3giAHV4NKQsgehb7JOzW*;6kZ1-CY8H(BB6=-5rq7)J8SIzAgSutmCQJ~nm+Y`wYM~C zg9uFv--myGhArb&#ME#IQ7UWrj9df^B=~V0E;R8@JKr(Q2Q(|1+M|$J=69o#bJ=ZR zyI&quIn!XQ?SvyHgcU09@{KW^Qv1SI&`3%#ze_Yrp3dGXK8k?QPoyvl`j(cNC4v30 zs*9N!FWUl9?ETa?@o_l!0GK2QK>T+)sN~MvjAugFGi3t)xVOz;vxGBS`(^`%f4+e| zS6zFG@#n=_@~>se@oq!mv{kO7p<>O~7pQ5ZtmVTS*uql_r=%WjoQq!Hq3TsyKj)2@ z@wsa+Onx~KeH+ZJ(lL;D(c&+h+nbUT9wAmZvgVR9ogk$t1<&JrOI_%LUaG&JfKKu8 zStJ;`T1RIk|4ZtuVe{WnUU{jK6+QM#`?V}vKEAw}Lqf1i6hUiu?c2;uMM?UP3bw}U zoD^UVirbo;Uy}UQdF`RuqVpSq)Y5+sl_pk{YnA@w?n3L>^w!pK^R41)R^j;=p;O|b zffP9{&kMLPANwvRkvl8p`eL-7uLz%io|G~-wBvJcb`A1e3~#lR$kkoE47~WcF#6x) zKw*z#UJZ^})VhUK7`nYC9bGC(W#N_@{q@z2Bm{#jIB+V%K1J)49PL?ndttG2=0I{n zLTlQ+yXnakmLEqxX4Vng?p*Brty5$|!skPIyD!YSwg>5?1ruhN;koaoDE)H^Fy9+v zsTLu|9_T90{KWH_fU*aWld*Ha!y$3rQWVbDV6hFh#T2HbT%t5%Js}uj zB*m)A=JXqEhGgOwOQ2=lb5zux8WwG21+Kxe$FPK@(<-84$5K>#oT`1^n&IC%-NLC# z$O?4?jxM3#4`z5nEj6UY21_5p>47h>&rQ%a)UvD_?K9nON)z6~W0n3!F}oLE_! zqiTM>eM`fh5YpZjB!Ke-84bO{o8>Zc(d7K8(vrC7w%1?aA4b} zN-lvKgHDw*-X*{)w#H!WrHcVqxKZOC!6%O^$CSQn_>AV!XdYU+r`RY&bM~@|$uDRN z9xJD^=tcE-+HNo)pIInISE_BeS}t(uYIa21pRA(%>pc(lTrf&?6T)w5M|A!|6#`-~ zdhl36(OvaOI2(#dKp?%EN52PJ8B@w?PZ^c&YkmxQsh2&$v*z{TNeFUFke2I^aQdat zJ;WPBD}G>eB`CXNK3HsXNdkWeMY&WZ;zI5+Q}$GqCPu0>jk`0Ud47xYL??|f@uALL zb#{-8Rv?XR0RE)Wd-p(&^`=Pgq_KsJGI6}+vH#D&ZauySajcXKHzTPzo2B$^{_U&b zI(!trw}P3tgsx3;!4=Pa-0ctk3Yl|SbgqHPom*4ZBxxT%&gH14x*_r$wDYta;J!C| zX3oz)vXJ=`(<=<*b#NI@bxM-N_@RoK9}g9Ix(!Dau~>hVS4YOQ}RlJEjDPq+`%hp?kA@7e#R4Y3gmm|@{-^!7=Aw0 ze(W0k^}ICPJ9)t=QIMM(zeHr2y8D!Fz;rGD_^{$Oef`o(E;NL4YsJ;6Si67hx~O2f zE-^K$aq-$P0AH{G7eOp6^U%U()}uM5<7pS#p6GDyX<`kMUh{{ebyQ0Ymh`eo%kDDG zh3K_TN!up52fdFHn41wK@Jn-%2p@f)E-!19w{}f(b4A6(D1TnXc`9;8KUj7fJHs!Y z)kpc<(&BY=WX={7(cC+@4CwqPMXmBITf4sFtEw>yHn&--LPqO^&hq+n`P@~w9f4Dh zWNJYldsjith#SP*Umsie|7+nzsT|~mTdZ7YXLSkE9cCOKDRT*%>z4$tEDxD{X>8vP z?r(PWSUHf?<_zP0YV0$we!blbnN|`oxD@Pza&w*Z_t^}e1W_L!9k-h@VG@&wEnQdc zX*Xf#O2zKusqBoIT>BCF;Wo}OFw@fDzH8uYNXwsRS!mnllJ!os{BVlMdf{@E*v*!-`IOCtGs9i zs;aS*DXPoTK_l4T0j%$uyDFUs`F5(RooPfz##!^H8XTTzHl@*?s>-M*|LP@_?+e!-@1C( zyH^JadrWogN^1sji(<3Az5Cbcy+?M!NRO;$!mLJb4W)zEgL*8WJP_Qwl>Y(~Hdcf+ zw<<}2@-NF-&w?uF8BZD&^5!vYD;@@wW`i-D#M* zHKf{mU}Y~7K^ku^St#rmbDo?UTn&THhjchbbW2V5#d2po-bP2mxK$k<$Iu9*Oa0G2 zbT6!QLk_#c-!e0BjN;9zy?>U`{WG40l7tkfJo#H#OPwpE#>O+&UklrY)hc05tJa+5jnUTOvyEvHO#g8$n@k=uej>lB z!|e&?-3w9cfoZ9*reCi{mFZ}m2XEcGD0>J z`HhH#aEFd}))-HSZ`)aNbD7Pq?6tYPC=9idpntc0+_~*dNg3r*2C?n~zBEo$jjrzL z)CTKOd$qPgbutTB{?7|wSU6gY>dzB zeal&z=~>q7(PGQ^X~_R*J$L|veIczH)LlUY1+5o`+M*|~9R8U1svd33MfyC|<%%!Y zlUBxtTlc&pF>fy3dobaKOcrMtoF|3eT9J4Y^K}2fQcGZQMtpcuJyr2V0QazJ*kyR? zw)uiXX|oLeb87+f`x>)3O@GUH!%yb^Ityif9y|-` z5ED1vTg($@bVK(J`&ks9@USEQj1%p%a>Rv);Dr^s)%3UVsOu2FyEJd7OW}M01c}g) z0cCECue@(lqTQWG3UsKY;xB*q%w5;Zk(}Ka2QP0o-_^MaqRMLP?=;3L7wbm7CK12GrfN*5F;7=cXy_o3Pi?f9gu z|BuYBgrrnI+u(8u;V_6_50{mR?rZR)C9thmTZ)*qshIM{fyZX_iY&jls z@&sTeS^uk}T`si(Uv7FFFdJJjmyBVLh0f|`rD8@KBx<3+OomvASu$?0vBY@z)$`D9 zW?oW0fM~jPdtDFE&)8;I|K)Za#4zZn{Hvk_%qOVc#t}jhJub|-C_(-pA@MVn{AJb` zuG=AuI=2(QoE zcx6fkFmQ1}enbBcy9wSz2pvDN5WxvI6-Qc}3Ys5LRX=VK>x!@%32v)a^^eu{< zpf@;kW0oT+7+!Y>v6|6^`!Yq=a;vH}e1y1nvD;T+sH5Ho4|hk>vzMihNFwG^VmRkI z`)NC2WbA(TgcDz8bh}1FM%MXFXSQvLbhM${#77tfoj;kewyvb1rm2z9_7+}m*C%8M z(D7^z%v0<1gQ+o-Jsuvh3>-oxZ(=G2^R`yI}aYa6isWtL4|^Xw2OPLs3jkZ zt)mA$7f!E~gpA5PkdMUjp5?p6~J$GxZz4cy@G~>XIMOZ87T{1?1 zCU-{K4`Q($42ZK^37Oly;#FhJ_S(I;QZ9@$3ng~e^5h%m9ldapyVQqX>Q#7lz9re^ zePek08-x0|Q;YFfEMAq(bo9yNH_b8AVPC*Ju5I7#)6&w#R2H@5Tc<<0V$W-wx$xiT zu>oekwKMybe+QnjGhLRU2xF!*Z3r0|)ueZ2iR!2CRSeu5msrB+W%;X9*De#*BIerI zkY*yOZK-op4v!m=2t7q#@de|>$jX#@Oo_97msiojaxE9)VX{S;F(Ft_#y!lG%LvZR zRo%Ye`ogrAkIV0lCCw{)QucSHN=Oh<`pvq8L+Ktt!QOhWJ0=|r@z1T7*h9G*b7=_u&&yiLCcxO|d}ngy~ew?&gr4X`g@SYh=WA>waf< zRFlq_IH$#$#x7k<6oa{wh33$k6(n%^ElrhL;m@ABKTOY~!lmA#uN_TGAa zO}F1Z$3S08R1?cmoOhpB5`E-dti&(&~9OsO_$iO8VJ z7@RsiO$*6pb9ox+WIHf3^j3GqA484Ar^32VA#4-8%BwYnM+Tfv!auObPyN-Qr+&!NYffe<*PZWAfohq4-emZq zB**_F>Z`+|{Gx7AM3GclBt+?yZctJ>1tg_m=&pfL=~lWyx;v#L2Bd4~7`l6aq36E* zzWd$#AI}Jn^Pcydeb!!U?Y*@Nw=)Z>Vh9N;by;b9pcb|@&?|o1`CnWa#4`X0y)%Ra zmnlr>K}4o3KjhzGc^}>`FkH2^6Ivrs2A=zy!?YPQP6DP!2BHw=mcwzTaTVUADHRnk)}vG!K6lmuZpxZ8E9 ztSy=MjGudv*HmIq>L|@T?RejSw9P(kAxb^x-PIJXy2-mSp{C#N zj(u)8CD0!d$tW$JkI%GRoI5nhaj%o)?Z)-mDei0@S9NT8f=_i_%VP!y`g$mVo}70o zYv@zi5KJa@MPOVovtO`%wJ^C3b2M%K=g(=T&7Q_ z!duDC$GNx9Pcb6?llcnF7>eSV2Z5ItBzz!Nsx@dGbS9e=-mzxe)<&EMG^u@!E!YwT zn_(<=_g-51O@s+&o_wTpGtCObvrl#2ks+e}$%5XIMo!0F+3RYA4*XG?xO=Wi3j_})4x|a!N4HqzN*K9EM)leomD#;XhX4>J&%v2z&piP7@dG8~YK9Gfu&DSd8Y?%S*5!PVY15Y% z_Z!IVh|bi`=^lWgQ6nO~)tT+a@E~4_h3X6duUcrL=0Fd-1mD~D=+EuZb3bza6tRk^ z&Q^V|@^s;@(mrYvzPvFYSw5O?2hyLJI`3EFemp5z3R_-Iw=l)$_9f8H;Yo!@m!NY# z=BdW^$3nmzvE*0%4hX^K000AM7qMLw(SeVs!T~)Sut>p7L;u>JA!A;=_UEj#swd~B z?{%>~lqz;5`zBjec?So*X~g?x*ZT<1rpQ^Ke987foWl{*DT7e z2m0@$cG!yDs1%2&DjvUZU8V-~M+HDQVB9cZOMEF`Ua05PB6cARbmw^VVG#`?=9$Cc z`=>#sBDUL7&2@POqwUU@S7B=3xCcM{OQnghxFRIBekj~;;O)Z|N+kM#ceF}s3KF$3uJYX?8K&hbzLE7Ip8atxoxKG^UM&{EzAYq48g zmq^wu6u7j1#HTniAZFIet_@}=z(3pwBtbI!Bm%YG1#8Ws;%Vrq(@rPdYGRa}mu=I* zzC5oQsyDd(qS}4KyXN_-%==ncdtDrzEw-OgTi)81ARwhjXbGrOwsybMN7hdz^Tqn> z({4T<#Xf6o^QZ%_%DI;t_FSM!{4UD%<1G#S*4pk$VCAxrK}rH`KEimz?5^N^qx@-= z1NhKEh$C>n{xbhT{ zgV1|sh2vQ1q@J#*i?xz3*(yqxjk)aY0^L_jOysz;`Xm7|7#dT-$5r*4boOck`;x~m zjlOHVT~j^+bA7ZFS$NXzc$xogU;3w0l$b34}0M7@%=9Sz02k{h3)g?p*QfMY>PFEZ3?Q}mo9ZOT?{S> zqYmrMo}Y_<=;m~E^d$=o>2do_fit$nX(#S0l+ycbG}>|jKtHPIWq%R=_~8^W6(lk=M2mR@O=Our~Ij4tu9 z20+obB7|19him_7QnRV(RDn32ax!5$zfcj=L!Lg^FlUOR3I|llTbs_m(`8h63Gt#Qq@)7_$EPD6-3=pqMwx;T04vWRZH?LaA8hLSZY!|=uJ*)6Rve+F|%DE$4i!c z-GSXAw!b5hj*5@=Gu}Cc+j3ou<)FqJj#4QE+-K?69yDmW*_c4cBJ)W+Ot9`o738XO zq^X-48Ptij_xtiPUwoCE{Ou%6f=Hkw{%`9*A*|lvm%J)Ajcu<9pNsR6G9TM*xUQ1! zjOa%@j^0h>ZWEqSvuz>($BLH3cmMmECVE(V^FH@0Zz@17spiY0D>6N|qI5Zu^KF>a zGfe+-&SuO|KfZYY=OTc8e0INbdf` zKL-4{y)8#@$s*17Cj;%XjcXyTk`JXgQk-hQR0!tJQF1_&&)`Wgznp={obToJqMUkg z|7xfNQEdp~*{2Z9Z0Gs5rX$t>#tRbE`&dhx8?KGK@42rc&-$~C>J~*l5S$waX3TWf zrH5NxjBjll43NyV;4=%-Q`B&t8>;NqY66OU90>Q&ukMqA+=sG}Kj{Myrb*D?=02Pn z7=t?7dfU9O@BoQUc~j7T5>fW7%pNIF@9IBXW#T2JQEw~tW7SBNcVTkTG?@@n+r zblBD(_xr$KP|`V>;GUNUafE_AnTocVm4UvF9>dz$#GBLr<50}NxsZ;sIh|j0GIKoP@=@% zdeCqcQA%^Whr8t7cGzb7!w*})hfvBqAqV1;A}2M9Yjd9XxeF-Z$$6bQ(u}nLc&BTsii3dT9^J*jQ3YCiL_d@^Fv2Y}D@^;}#qIPT zQNavIa7KU!YU)=)$`hhYc@P>kwRk5jAohN*PKpSinElYYbTk88OHGZ9KM6dC9wg0N zUI0gLklL?%p&l|Emv`_wW2vjyxEHcb><;SCk!O<5B0aeR<1r?jv^^%D8kIVSY{+6v z}_oz=Z{T{KhmFCFj z3AZ(=G$Zc6fjXHBJh_K7Mq1|~jd9rlI{NNb<>o;?F)7P|jM~Ej0-nqXV^G+MBUegeDPrFgQ_$a|%*Pny^~S zA^jW_!=OnoBqgN2ULO&zy{BF1|K#XEp4nsPeoq8r=G| zF&Ax2$_sx$=F%x60S*StdrQApt&sPXO^n&r{_ate?*Y+bzWqNdni#TIgMHA6BE;Z) zT-o^X?~yIFI?qYv@~2B#_TR)SaCSj}vl92pJAQ5P<;eT1y}-d+^H&2F5Zj}l|4GLI z@t3r2$_HXFa!L{x@0d9=W-4q3iR;zSVEn@x4>Ac6^&fbp`QQ&O6!JcRb%PZU;$ITK zZQTxJe4Z^Sd35&sVMFvwM`x z%-lT3`Rag?R;3Gy35X0Q2zH16`>;~++rV8L??P9no}+;JnXL*KS%5RzSd& z5aCknA?l2B_&tUoJfM`XC&I$WTU?Y2iR^$5Edo|R8e3YiO+NDlg?ZOsg0VEofQ=!` zHP0J%aAO!1y0Wld7j}apTqrsj`=Z6Y6}KGK;uxZC__?Xxhe^niA19P^+d#pTkDSX} zaVw9ZPNJ-jQT-AE=ze$N?b6A`xX-sQoO>=@P`97XCJ9|r>!0W8#*UPnZ#TbkN+m3) zSl(a%0H-QDpp0UCa+sIqb$znQs@s~1J0Jbtq>`1M8F-%|rSZqKbyzh_H@$+Nbww>= zALYsW)0KICR+p8Pjfshg@b}LFjHuZ&*uwR%!uvuT5ZQMf#YUNrY>iqY>?MtceJyFE zs%nv$<|6YR-;}llPJ4A?OyBK@Su9D?71BUHFL;Pr{SfA5C)WUR{UXJ;)RaiY=_~bY z{n(Qv+zx)^Tf`-(?5Z{+t-FR7cGs zoe;R5g?pdVXcwY-#-O*p0QF~2HqUxoMm$Vxl)(H| z7L%T~on_?=W0sp~Pd2&m!Xk$TV4 z@AX38-r?KJfdgMXn`Nhn&3j;QH{IG(6MIRlxLMfmnz7 z(>CHhZ}@T{Z#UPXMmHmkXL9hC{7|`f93L8>&Y7)+D|bs2@%>@&cM_H_i@jEWtva(Kl zT109uUjjcl?`iP>0~w{HrL(5@ysq-5zi{6$T(@0iw003o5LHgr_$?naEY*A|iJr-- zp-2_}CDaPDzl{ol~@up!;X@EEw{Oy(*kCfQK2RmvtgaVSrIR7BGMGFPS84S zL=jWkQd=mb!M?k~&==&ftr$qL5lpu-DeD{n$aZOlepJ9oP4Q^ZwS`^&TC9 z_S%CgXC6U~IA^FhzEEi5NCTh22Y3$d`3Pn4*JH>0sl4yYe3ZF-R_HINMODmPS(T%_ z!OU@aYKzPw@aA`vdXut6nj(&ASHF_tI%PBOpyGOXFTJ_RYi1=nq2>a@f|Vv+e))dQ zAqvx-pX8M{!cRC(mr7c>qs|fXC`439RGpmd!+Y`MiF@#%MG6LIz(A3BHDlj&kCG08 zqq6_i#l0>s&%?xx2Vu}qO+^yU1J>gcdl+=n#h}G8>R_Ia;ML3FvTerfx9=LgxFht& z)Vh0m%)Cz}f2#sT^#Gj(jLmHEz12Ax;RD|>SA(zKcKV~A0NB}U5HO#-q@wubEG1Aj z?^@Y+*^{f|?#r82J(;TBfE4CS?n)r&LRTw>2_&36ezUr7sQPV6ur+KpDGd_~V^@SV ztuK)mY~F~HQaw9;LT<&o9l)`Idq|HWHB+7x_#S}RL+}5Ka|t| z)+q{t+_t46wd~Yv+>)c@7%{}=T-wE^Q8v)eE> zLotugp!HK%_CqMM9PaYLnu1jb5IH<`I)bOw+AOds7Hr$eTWe~tC+MTm#}PyctR%S2 zfDIzXf+u^*s!+d)d;m2Y7Ho-uMz505VdH?a70ChV91}!JcLESW&)MX$OM%kz7Bvc3 zZLRR+R(NX=G)^X!A5v{?GNDEAwtP)ziXkW1eI~T*D+WN!plQfI25gNP!%8_Goj)Cg z*S2Ps5oty@gpp5G`ah|nry24Q#&X67q4!$a`Xo^;{B)r{EZfu0)}YOHaf1GQp|UXa zUY&4FPAP;zkdJ;KkbYA4075X696N)`T;>aSW-K2;BgjtDT7xbBd3c(cmx)tDebIR< z9CoRvMqyYLmt&))mSg@JpOZMZ0~9Zf z;v9VJZFGHMB}pfaua0XSun@AkK5KK^YWuoa|2_h1yeGYvabvanJH$dgCk$WS{5o@G zs+EB=c~Fs(I{;~T5UK2g>iq42YAO2ye*Rxi11If1AXsT8xqN!e1hnk4E-K{lR_s|l zA8LRwIJ{%Dd<{7gnLhO73uX{8= z*p)caouYS{(KV5JQBKT^{sPclbGKFBv@WB)VWWGbL{(h)2}E$m=F)VJ|_ zx1uGlPd#D);o8*b#HSRj!ZCV|aAqu9n43_#6{mKV!1H61#fG3VzXfAzsY)aAx zkcmi8z!P;s!uPa2a5*c6pRU3wdLO6n5#HeZDw0E8jBisNkJ9}Kbqj=1ZjMrW+X2I4 zkIHfgpO2}{W&}e)9VR@Een-l~2Xj%D=j5=RnOE~X#a^`(cSx=pQv1%273R~`uXxHm zDj*Gp1<;|%&_9pvaSk;a*}Uv!7V>3?9Y9)$RtMn^NM)sJMIem?u)zA~&|&?;Nx_C2 zz}l&!Xbm_K2BGied@lx>0N5&3<-T^t4tVoV?B>cwH^DA2GOY^zm_0x8$RP4ZbziDY z-r0X))gpeO8ouHmjM$US@p2l+arJ(t7r+uwNds`*?JBq5exnDgH!F*#4mtrE>4O6Y zh!^>a@%*T+p#Sv(JmpKyc@Nl6)#fTl&}d}&mQ{->{j~d7E6cdAR9p1YYjyrvQ1eEJB#xYaKH?67miyHM7(D&3h_leU68swSZ z6_aViaMClFev<3?85coA2l(5$>uBy%gM zN|=xwCWzJc)+9Zi;*J?>i1Rv(?o5bH#ofMVIdPGTroAz;*R44S%+y zn^UfI4q8v!32RyERKI(&%sjBgy7c&OA*qjryz16u#~LZtnNW-93I7A{iWaP5 zD6ul}ZouocoA2JzRZzLla^rsnw+9Dhp1Nt3PNfbjV?2^WKBr|uR^|6NNf&J$bt>Pj z>4U#(N&>$u$97UCnd+#%PSEmS-+k?^~a1h)AZi>SZc6dC7Ybs6Bue#+~4v#8D( zGO7@GItNh~fRVxJd`}MaLYZ?GW!0Bhirny$G-5x6hAzWaU%|Y0aTmboT!!seN6Pm1 z&9S{b9BkF$ODw_p4*$#kwwP(zCDAH38ov@m2 z8TMT}68DZm<`4GR)}#H50hwKND(#CpC%oHh>zHM_;rLOe#o`Z7>AQ_jzEME=+zY+y zMGY3YOkW)!_)*-`UTEGP4(H#rJ1(X_K4gWR2~?3DQ&+iK1zX!SCHYfU<0THjMblG! z3=IT|QQmesY!;b+d$H@Daz^xGbaOo3vhgOHx-ewBIpw%l z_&k>?ne6NfoH(|JVT{bxU)3-HN4*B(P^!wTwp1kI;p&p3i_mf<7yIE~Tzu=zO10I` z>!PUYFz-VUs1nTzVbg0sw%w7I&h=Gp{c-duhiXl#d@_N>8gvHc~{9Z;F(aqIIt|1-q_+n5}KG$<8!qI!#&>W zj90a|t!3@q;{k4+&5DJOfCw=)lHOg$9sa4MHqBtbQng)+&Vp^`-*;0|t_%F=h(}p5 z6_!zJ7EqGul~lQkueb)XOr#7c{H5P{T@CV$s9TmuzY(Ukjm*$LWVFAi|8w&ew0jMg zbJU$GQ%eTw`sXFFrEULLQ?a=j`5rLcOH~nh*;5By>Rs|37&0O##TugxRortS@I%cq zE%f%V_(PvgfC?KcLJ-~xLNKnMS;1G<_IiI{lpIfiu0ZRK!&GzHqbt}nR56pFjs4%g zU|wf|C0#ablG4uJ=@ELDJOD$jA-2W@1SU4iGQ&3{LQ(N#RG3;U!&LVH6pJCcTc4QV zXYLpt^S(*yv8p?i2%Ze!Gr+bFsDBe?Gd!?4AJmc|kd!1XyFkUNP?d^L(Y3E&je>=C%DXD?=?xD^}O%Gm1=?=bTu8H4=es@&2JzJy}AAjq$oU??P2#9xH2IojF-pW3oKJT z(41_gttQ8N)`@}$%YjX|TI=~=yswd?g-+Zg!>L_2IYt9BDn**7u7F7jIgu7o@PR5o zy~ynNC+W^?4Zh3fZO=3W73EP!uIVsN0WaotbmNGWDPZ}hK`62QX6Wl1AZe%3W_Lc> z{@BTGkn1+UcY89gudmQFYikIQNNq<(3>)qODvDpir~2Goh!X-rKBzJ}vLE%HT*V$2 z!ylFIU|{Yx%Yh`h$XhisdYYR_LLDZ`FM0N3sut5Mmf_}^8cmXr1u%%{%$kTLC~iFh z&Z4?}co6Au;C%@zmAvYY=PoWp>{apM&ivV)5IKVXHebA{|6HDA7@GDoDW=K}HHL5n zyR-JxmcnleaxDzvPCajAke~guFA%xj<__!z15Iz%_w&9ET41*+1wY;~`n2di5NEjeg04lxk{!%q{=q2gvuB}WZlf%q*wGwwx5_SXGn>>Szujkq)i#6HsgwEBb>FGF&g z8A!rILuziUu2*pegU$jL7Lm^Ml2}5CH>Al!{X-hUj|%6JcZ%~Ib{YOOha~4WE!vJ9 zq#Bz%gp(-^-NIRThL7qT9f$Q;i1nOC;V8PjMU>Hf!_cIqI6E}S!en*(JI>+6bB7VG z?OJkx<9T!-`@&ba{I6-vLXklG{D=^X%v$Tn+p-kcIsk!77aYIkpO=V_>Puedy$fGF%;TDj`SY&H^dXS4EpHr1esauel>|7J&_AvLaWk0URM9WXrg}i5 z9}a`RaiON1dV^pQ>!)2tfTB1>rCS!2DBIGvH6gxI_bUe&BUbxZ@9SIO)Uc zxl7tM&Q6mfuD4nGwHzMEyvVeht!EFSZnKA9fo)yS1zy2lTA3%St1Bwozajw|1WfKm zv%6}%Y)I#(3s@ILG}Reo0$(&b5TlU?`}m@UdNha2u0nUC@wS)^{YDxr6GO{?XOs$`-+VF9^qf z^x0R??;49gY9udC;SjkDTo=a^MtheR$jLLGVm4fm_Hb9SXwt3W|J#nDMMqldmcU~9 zHULz2f8jqS<%c>I+y?@lO7r-)TccK?1k(`+s1m5k3ErM+qC098{joHHxBPbuyMI87e(tCE`gS zrj$|XA%MY5^A^(*A5wl~5CzmvZ|lpO0t}LBv1)PM2X7Tn9Xs;L%9wcXZx0Uq54z6a zo(q=wtzQWgDj%Y?ZCwbmRWH2~-*E{=QE!&gu+xM#2GCA9h)Wb1RY#ONOceN;bcnClK{#82f z9w5d6>922P;J$EBuOR2Z_586;gl^{(y)tn`;<6&o_|%l#>A7556Iu7d#=IAJ`BD*^ zoutR@LA4F2%p))W^!U8YHoDZ_qqvkad_MU+tePSq)IL~+UwYmFb>}a#J*#w|i&kgI z+uab){Os$KQ_K|lE?5J}{+x1n^`l0hQ5w4)=qR5D!P=E>?hs#QJoWm$QF& z`1w{3ng6jJA26PNuSrs(h5z|@dXQRJi+9N*e{|rW%$;?uqCRK#>0_D8pgSOl#hbc_ z=c}iRy$YvWD$8xF_jwLfYQpx#I)g0VVo8oL=)OkGbn!5BGggQ>^t=mJsl-<_gWHtKWJ7^~@zL-TD53ReHZw;-Pbk&=G2|`{u)BSxe3v zepZ@K|+nVLBJwU1r_kqsg^D67x z;$(tFg6ObO`Mnw=$2$=YOxnuK$5LZjVp$k&H!TC9ff`JDbuZ0J_^UiVtB`Gbmc@wmgsF)Lx0X3S*%tcB?eTC<<3`Hsxm*kQXIJnQ0 zKNJCtDTTg%3hM%Ky4VjzYg)sp3#ym+#4}^c0eCYt>gKi7ZWG)ydziUsgYM(@70^SG zb|b|?H>lq2@p9v+6P_Y%wt3HM(Mh1kWZlroC2Bg)pi6&ika@VJ<>Jlsqc<0~F{}-c zi?R1&Hod5MI0wCJF8RvHezx)@gIEmLp2q}F%{&&Xn6+{-a ze8fKOi?y_SeKpg!mBtr|meUTmJylUE~AS$hysj&4` zs|QqfIt8)ha=KNW^VlA|9=d5X>Ez|r&wEj)kf%O@T4|a&;Hw|(+}@(lGz~^r4JcL6U8iWi#(< zapU#ok+M!{uSC8Z-F2mGJ0O9xdoq^ z8|} zpu&K3msy=q`}8=YJe};r&g+cj9rO_|DYSJm5ln`mg(<7-;3O}ah(Y!WU#pf(@`PH+ zn{>X?PJA1n_i3grqHt-gnDV>|1g%i?xwKD_k*RV%;G3(zu?&w0C{&@%oVz13FF3s! zv>7D>zq;QiaBceteEBK!w1vnaQ1?7T(n<{o2lpm=WxV7^+8@uW1=Ug9}D5q=GRfqE*IC8l-e=(g+EKZ7ANy0viDYZgPsy9oXhlG?SS2L!GbS) zJ1rKbr6Cu4?chW$ES~y(X+Cp!TFh_EYf?xwa3@rs@9IFec%k)+B7GE46``wEIluqm zv&nZ&GSw=!zJNdBw|YBrQR(uJ-_UanLgOEBWVTprBmQ44HTt^YZ#lHl6Bh368=*i~ zPXZ*36fvzWintZ>DV|{y3+uEAIsDoawaA}zH}$NA(=vmnP}=|973}agqi{Sghe4!# znZ-J`xCy4!`fkjwl(7X@LN++X{k8j;3t#wiX>B1nU#A7x@$z`uL!DuBWUEsj+0V{F zB27@B#T~g*bKCsq zfIwq!+Mfckv+Jel@W~m(sM+-onDjEJOqd*>^Bjt-XHN_5^PQ@zWFv4{!*O1cVnv40 zylHWYkNV66x|Qfkx;%rBiP_UW^^Z!wiH-&Hl_Zo9okLYh>L0%cfAt{M{%@G?^lC})?AWBjD@^?+si_xY*mB?7)iye-%;K3`^`?4XbJ z%}8n>Jfk65iIGmpI<@cWUTJSb|7{Zj@hVGe0uhzS;dKZ@->V`a&C;r^Q}gz(^w{8X zeafLpeCX)dhSV&XB-+|IUbEq-S#Rp~^7<)`{`Q>p(%XEIh(&+*_{5X%C;~b%ox0+m z`#%GUPQ6@Xb(y}T={&@=+3xzLHCi`U94J)U%+m4?5XW}Qy3^Z#pI;O>6?`YAYFKT^ zY}&YHA$#wLso>bObtH7p%?F@;VFtL9qvpRlm?L3Cy3xBE9NAP5Wn$Feae?=|(+hC6xq&630x zp=X~Av6Ep8diMwAEnLH%^cr+KGN`dDyJ1(uFm6kYAf7HH_iV_*>;4QKC z{UUA;cH&!M)BPCeM6JwRmy(sQrq6wcA(5SpmUMNNzU`(fW>g(imwGXIk@!Y`S>OH< z{?O%%ZQaamtNBaMv2gc7=L6uJxnfh|;wTO_vCrz1#(f`_WPRkka%9TtKkSry2 zcXI=HC&Zh{X$y;}EThMOy-H+YWw~i5`ec$6J4yJ+rM&6Tf>e`H>TY$gz%NbIXoNP` z+(Tmi%-Kzj>YW!7#Mj239KtS1CUE|aDBW^t%n3YM@I=PrFNnFbU9Lod%9Q){z+qGs z8FrN(TbgL?FEx&P^_7wN9bAQwLvE^yua;@Cd5rLP;+SafH@B)BhUBB{4WpOlgAEDG z^X=f@toxl1owC#wtGbG|GKqYESZ#N-jeG< zyu$0*-r3wJ5V&=l)H&a+PYZa_2bNRnIv$mo8W_YpEX%?-*=Y0xC3Wpe0kyH+sxNH7 z_}^0dMuC@Uzo@z7*t+xR4)s6A9(Ijww*WWRisNzSt7yc-YBYTP#Zwq~86HJgASdQV zDSW=wV4LKE&w0ndwLKO{HJ`=)?-Q-xJV!0Hc=C@kPjFW@hgaGV7-+>H&WoqfA^2xW zApK{;V!ybD_v2&+QhOKxgwPk%Y*hNvbL_N>Babj=y#zNmJ1@d-3@H5U< zo;kpy^4vt9vY(S(tNcphD?nMcx%!FffpiIJ2k;rMKqA8&bARsCt4ckfr@K&tej4VB zSFe=RO1O3>^w^c9p#;yruT z4hgqIQ0J_5Tc4$hJgZx6;_rmspNbiNHwH%Us;FIj0e6|Od!2z4Cw*01W|dWZ$Od1x4*na_Q?9gHBvo6^t@E`VREA#V+LS!5y<{TD9b1 z*jO_SpjYs=W1Ky4qYxF<_rEBG4C0=bYZa-L5C<(eakMh%>)F$W$mgx*%ua02*5NXY z|&Uv{@S+FXi6+dqUUB@@zpt)ixyac&xMHmGC|D zG%=%;s8)(f>qY#YVEr!PTvXHaBpt7Sdr9&EcEBlO}-goFIM* zBXZnKLWx0L_AKJDbD9ylIi`qb8mdJ^KT_O^dBg>QrINa!3fCRWVoT3uAFkNp$T0+_ ztfBY8hoD+X3R?rR<927BwRG4&u&ZkXYVC1l8|*)*@c?~fGnEsgyZHqIYBd->3Dmal zi-4p*+8mn<`cGg+T5IjN;Xb8=4?_}!^M@@4hIN7rQ8)-om6e20Nt+!O;yStu&&LhQ zzW%z)JD2o+yDLW&F#20K?TS|61_=wsMrNjC-R2=HQ~5A!T4UtqKy+CSqm?%&}%;Cv21@2_cuGC%0zw0*DbN<}-iBXS#a!V9Ks9+Fs%+AyP7RQ9~_ zV|;pqHDVAKFQK*I_eUQ|yR4s9Hf2>s!n;rJwwWATdULEqaBfI z%%TP;kGIj{sFy~l#wfjlmX2Fg*>Y<#{%D;ff*h41J=EXFvVM+Cd~eyIlEkK^D>Xdoap&4tauOb=8PUiJ`t$wdPGhhvdkY#Ke+@hU{KmO_w*%H18kNhU zy2b%&!ul14EiPE_O*D;(1E}yN89To&P_6Yoogf^&!7w_eF=a}HKEZn?*Q`Bp)Zy`I zp&qBKqo5Pf>u`fn)*v1!jLYhyxVJI=mAlAJ3wxdv(sKdLB$%qkZ5X_Y8ww_5QWR8j zcYf=WfRexM@O=^}`+j>$*m|slA9POV9Qc`e4v(z6+{ll%TGBFT(T$osy>0Fs;DVPR zc35}b9?KgIZ6;k8l4le*m}|jEi}CY!WW0^SZDNM;nV(?Kn-@Exe0wi9w{XD#5xV7! zJ<5oMToOvyqG~0Ew1!wg?>86y7Ac8!Wkns3u zW)?b$sV1JgZxB8N%D1iUarcW`+XQV6m{_4P?o{bL z3fbjNApwS6AC5Sj;Mu9KToHPdzbW2ggry)fI(0eVPm|@+{dNUd;NHLXySZ_a&d^#b z+9~68JF30#uY9Hv6Q|q(QZn4DOTi&K3w7h-BV|6wUK5^iL|DmyQLc`3gQ1I{cGUjB zYif4mm2BeMYH#88(xoVwoY8z~jcj8gdfWf?0=$*Td$cPd6B`&&s*gt<&CtGlOPMcu z?Pff6*1SEsIsWQ@TFiZ3c{r@qJxw!2U(vO}aG`El_%S&@9Y1gK5Gqxr ze~y^3?UBCUh(FKXcv(L+pVzae<9q!!pi*UsxPyh5FT=!PbC3hXaOAX3c%}(SR@F-w zBATIUI{gx*9KMYygTL3OL>N5Q)Y@JBkSwmk5tsCJ*=o%CzzDG2s?6CV{R>g*?7J#uVZ*Mu&sL_NRP*1t#(&HUdj4YKH#MfAJ zsC*KJbLhV^vwj7Nc4iT4)0a>9-qAYn7`)g~GT-XFH1+$AI=k{gy;h&BkkQYAu|_uk(>s#ZRc&u zy;U0sNIf2hId4S28>`$!hm?2e1D~3(53X#71=hay5C5VsKyJ*u4SiU|ZyQrO<0i`4kuiY##K0^x`{DVd{5OH^FRjKLbu+r_ zB(Pstr`r&D^DTznEe7cP{OD(k17(}>7_0sn?#;!a$!u|?r;m1vrUIrK1~aiQwP$er zNR&BZ;aSt|EL|aSG^9kWJlB9__H-=gGDwEYVoLtDlWyev2=DHa9aJYVUxkbpwHO@f zR8NaGl8c?Quc_WizhM&a2^!;0G#(szn&u;oR+_(hx+X?}r;dLscjJUKI*S{gr*`pE z#)U|`_3G<)r+64`{G(>sahg=ZX@Zc4-ngIKxkUf;;Y+3>bjUwqLuMg=h3Y(DILsAq zkT&TuC`|oiwR;>xh&&Rnc`}lr=$)w<&`_43&u1!2%5}L_umUk&%D*#HR8pcqklis# z4t~XRU|OwwV2X;FEoUzk)2jAGg^@%Wp4YbSqUlU+)5da`YL&yNxjiE7& zVLgn$=-X*hsmErUar4HyN{{RmmUtP&&(e%g8q3VgWv`G+_uYKcvw)MLZ}MX?S?(Ys z7AD9P3g+E#Uq#xk{rTduMJN=KpSvtNvp^uc& zFs66g0r*1c@VdsV^8R8cfWx8nV*xlRqD+N%3@4cFwt_=RPK1qX!{G&60WVO>UtN9J zn^8)9koSS335%h-+{2S}ldmy=F1vmx8fSv2QPl4yfPXD3Q7CS>@I^3-(Y&l}yPd+O z;!sopQtbCn0;+df`*Nu+V`)@;<*Z7m(9AvBn1s;rnsHO10rhE$yK#4rWnv=WKMD@d znDD+b<@*C)?ar0-xw?X)-eoxvmiru_E883Pa#V;!YJYe$-EvCBc8%lc7W&_lN$5+Z z0R02pn_CyQh|8$Z>U29S+()3HXli3a|N8s03JX7Crb z9Q(@q+7Z{%w4w5Rt@nAv4r6TR-y-pLbL7^@3L(i*lD5{17qdOUv+8XPQ@l0aj;m_mcBXx72AXYndBMPK(gYG{dM?b!}WB=m+aDaZLDyj=p*k0dCCbaVTQ)$Dc zbO!3dh)Z89+$F$k!G?YWR{h_dW*AHFW*$zckO~7qTS*yYgc)WC2!|W%U(o3Pv*(Q^ zX-=-uGCK5GeyN@KPRhT)>Kw;!pD?Uuq0(wJG+5_FtJb_GO?lziQw~=r|hq@$Hn{@GB^H`W6sU?SH z`ds*=rj%!|La&ik>un{;hJV+ILwoMrhGXT0KdO3do`Xzahlb$dz~W|Ah3x&#BYSUP z{_!toQvZk07Ep*1X#>U>Syj$4TdCWmX)rLy|JlD#^H|^7iiUi6BPUlaqUKqSE6ytA zG}GwbKd|k}rA9AhaBNK^2Y&`%fn7t>blYbpH(;+6jM??JluYmT=P@1NnJg9+IZj&u zk6W_jGGn)|Cla32rafM0mx-OhO`5hAt?kgGpQe)f(&NQk^$p#KaYKq)Eu8|P(uRt9 z0o1;OyijDIOqzO3<& z#DB4jrnq~JyNEdQY3h*HJ%TQh6@W|@PH;t#ql_OdoqVh=@FWW2Zx!>lrb--K+?XUh zACiR~$BnN2TUVivLqabXN^5`<{uu~+mA)&n%Z~5YLq|gQdFOy+D^g>RG}ePJszU|r z-mwNmhFi`XE!+IJjsjM&!)j;X5t3Bp8HyAV42`Pge9iQlG+<~cG3Mb~8ZUJ@+CdPu zx}lZIn(G7Ykh?qn&iUG{(OvVi_5(xq<|}(xSZ_P@e;UTw%g`4QD*;^1ZVWV(S#w6w zeknI9jGl>eY0?~Xg}}%C=x_5StI{7_kB9G{YtJtxnd6>Vb&`I=**wejrMw zS$Q8RY_;I@M!TiTkQ_Gom3`0{)lg$CYC_-_nVKk?;Rd2E$!LEpZTa;tEZR|E|5B?m zWWs{?;Z!tM${keB{}ZVSKgLTO&UvaTpTIUZcz&cT6x=o3&u{eBebE```}g$>rOiLu z@Eo`uQo&#MA^J)*(g8q#B_)iM0VK~|1k4pff5XKrvnm$Qn}Xa_;JNs`&3i%eAa=;A z7ZE=dxfSDc;nWjLQb)P?m2|9Bx;QUt-(Exf1wA%jbY&Pyp@QMETd&u5#~1pSDlCDa zk2~IrsCZG5_6>%q7BFweQ1koUz|6`7DThnmFm|Mfdw3Bma$dJuMQY5;z)?|oRjsr~ zLP8JuXZt+wp6Zo)rmc8b-Fpg z#FI7EwRMhoPFTHEMsnFwAm*LNK{XF>Oq=OCR#Q#P74qM9-ec!ImNTfKl7RZ%!+L58 zVhh?Tj}yh!hIb6I*EyzLNq_os;)r<=V{7KNLvtL@Asdc< zG!D>F=Dj5O49lci_e8vLz$n?_USIv)qr1UaA581nvQDIH%6Mb6H&1Ssc;de~WJ2~7 zDEWAQuXa})Hc9u8?gA}T-vIz5M-w2^hT(_L8{O7r{|{Gh8CB)?b%CNNsFVmubHt!S zxp@=n6= zbQg~C8g};4hyVIrq>MHl#*WAG*2(o6MPkyWW+~X|vFoFvp|Q5%*o?Q1A3cd)3Gg+v z@IsMd#}z8%+n_XbrtEOV3BP%eTV$7=z#-4?xWT?$j`tvfv&;@VJK1!?;9)5L%~m!3 z@?Suu34|fVRR;dmH<}SI!I+oT54Sn_{93?^@_Nw-GRn`5?#mR?5f5r7q534bVNg*I zJHbk??|h4tPr!VuuWT>BZFM?anW$+87heBlm=tKov&_ph3HejN(4UWI2!>+&a@p26 z6J^6DiZ|9xj{=Ol5xE=$Q{hg0Fyw<+31COp1~GFMywqXsD%N4ZgKPCrf1)*&i$td$ z^L^mGR^Nz|a7&3P+&Z6l_rdt|MDM>_W4)|I$sm`>#xxZwNwiq+0P&> zVAu`?s;xEgU+^a!MFeOjEISO`Qc>WXm1Nb#Ck{3}e=a_8%$G)X6IQ^%E9FZIL5bK2 z1&WJ06(9deExkC_C3#&Eg9Jl~>uG(z4T-KT3HDKtTK7Kg~1;-Cj?`b1Faw z%87$4t+FI`|6S7eJca!;xB~TSiBcTfR^5DQnwaL`-%SPO(JrdcP{7giw#o?5kux&- z5(uC+$Rf*T^WJY@lkY?{MPZ&*A7WIvaz+4()o+JyV*FhMwW&0t8;*o5KfUk#r_9_; zoufz;9VxN7;<&YWa3kNN-?7d=vEkPVBIdAgmpW=jGzn||h9DXXxmh}jO@3@~=4?2- zSUipgfv5Hpt&htQ6Iokz8qWBdw|^7C!NIlS{2W9Sq~u_2>-XOo#`w|6k_97!$|e|1uN9Y`$jW3Gy{tY*~!zznY{uMOnFcl$?%6$2iD zOSJ>&6j|OcJrI>TuTW&2j;h0gjJWk4ZL{2YmoxUvUbOuX$F%pDO}l8flrZTh zS>>H?Rs2(9YAZ4N|FG&9dkBP9A?LSPK466->6FXVG!rGREQN&If4{Ycv>=1228n#N z4pysGy~Q#9AWeM-RmG?9)XVw8d-44VV{X;KMcRq8!W-T+AEnJzFYVUOFeD%Y0= zB~&(2VeAn7t$|~?yX6V6m;PzE985k$K2(@VLNOZi70(Cv?aD4&+XqZn%Xo!~?KF0} zwLvJTY6K&oiqy|AUE0wqOk0-|7xgxcMu#1*N6I=s&jiJ5Y_k1JVNYZu5$9KyRfV=Y zZNm7Ra}TUM-@zMZnwWnIhu|-@%f>0)h5pa2Fe9JXV8G@1s=jq^gPO8y{Y8%5~cd z(gH_XD_E32&Z;j7%s^LhCgq?@m(j&%}Sb7)RL1C8!preQlS>!2t z3fy^Z%4{$N;#6+6C_3m-y8_#Rpk`*+7zhYOFb~EN=oEe2?W!pXKeIN)^?#FtMUMcj zq9&X3{4%*ycBHF9b&dzDKQkCY{>gbp^>qxZ9U^=Av*kvH#o7cvRo3j?*xVeJILY$1 zLX&a{Ol!SDoj%@XdBnCW^rcjq&G|kqO)qYtDtwgq@7KQmG?U6@;3uFD;=w8y-u-n7 zgu1EgY4jHk1xeRUro}{P-Mrvvp>90^0`2@;rCWEu7719-QZj>pZN{u z#&?>sy$r1~eV56>u)dcZ1nL*#2{;Wy?Ii|~1#{wCgrfn~Wlwh{FcM;sdfvseZ9i&D z=j~(`X9F=8T@(znh*XBffeqTyrw`O28omibrex#z>T&kc1!E$1X}RU7`%^7)#-X zNKcD`8g~E6dbTi)#ZTpci&4ho}Vb6iDl?g1G&b%}+>2yT3js0zJ<>=QdhXu1+h zHuyKiIs<%O4kRBEYqj5( z3cUR+F8NQ6@=up|$z(Y9s1C!KIpi>9GA$aIZ=M`uc~u^YP7)^=E^-vUm?_~2n$fgh zet-#%mhb0<`j|A$+^%2&FOfqjfWFSEFB`#~qkapFQ*7-nNu{V9MY{o;R9&Cbde3D> zEavpb{7=m{fV+gt#R~b2_RacFA8R{Yea^*71%uET3#QcYHm51zxRQk0G;{fv$UhB) zYM-Mi+xRzfn;E|GXt1N?W)wh?j2E3tTnu%)LDDnI&l%tS|2!R-We+Sh`CI4)VVoE# zVx**ka-po*!mVN9;4T8qS*J6Ob?M%xBq!M|Zv7 zTI<5Y_U<+mxi#;olId&VtGl>q?~;tq2_6zFI_LGDOiDuKRrPK)R%DTW>T)Yx*9>Iu z<*X|!2edX%gk;D9u5&B8w^_#s&QUmO-&g;rLxC??=)Ys;)3O>n=AWWa!zr6T%+1lh zi;hq%a`G;OL_|t$V4#p97Yb5u*b}|IMJC{Nu}deP$?%nhn5*I&IjV;%YGKoRAO1T$salN2 zC4$=io(U`n2z12UTIXGjHCi8?dHIw7WGU?Qn3fXAn%Z*iRfI0G3{covj98cPKR{%{ z>l*uj$HK$+t2Mo)mfdC`r0TboN*tku=xk;VCdskdHe4JNHU6(kIcNe;MksjUVtkA)|3!Dhv8`icJ8tIS{WRHGe#G{a6$a=) zKav0QMYLyJ0M7@*IsU+ELgTZAM;*3rVP_9g7>NhJQ$tcF##;1qvq}(Y>b%{Cz=j1B z`+~N0(4BW4QWuQTQlLicXlOtw-&kaG29)w~{)%rfsF;EVzW3`s{4mTDJLZ&~`NVi6 zM{TlvmM#l=b*X-`u*h|L>T*^KHzz8u4V+uUiPNb3)qCK9mLI7dr1f7h`NRRCmj^dvG4sCuud}zECR|r2 zYUuS(zt;z7Hw%Mhm@+v7n?!z3&2fe@-Hs`Bz_A$ zx^T<2(~KS0&kk?t4HW3Y`X210yfvbh8xD={Vfa=A2@*2&6oIAf<-A&;Yr|raula{^21M0Of$!ES`{TN<+S` z&R)I;G6Qf(lpnwIe*xqroJM$vpg@BsGHU%{jBu|`CE%IL0W0r%_@M4#>z3VQ9#Kx~ zCxq#OSXkNJ%tTKul~&zev*xPiJqsZ~3b_vEvFqBR5#j!K>uw_a zUed9)fpy#7DM%xgyr*wqbvAMGboOv|y8MuHLfpRl*Ub29?w_)PF5gDmbZobW=Ki-_ z503w#zM^Sb6S-aVfp#8lw`mUE14-a6THySdmIjKR*Fr&Ez5P0;8RvaYmJg7&JMD+E z%pnTU_V$RUvL4gsN_ia*`@Ef^&}`o0uYINIYnM|vfun({C$Tju@&^+mvAh;VM;tm` z$4|5Yy(6?{o-*nMa;Ya43*K1^df;gI%Y4SUZHZ03#L6y?8Ta@3F}hKz+hNS!@Aj)V zQT46Ifa#A`olRiD;5wT3pyrPhiIsI2-rg|*J``HF{RCmgu(0R7pbAd{4%E+l-m28# zih9>p8cVrIhAJgfTLTv%-1r~2WAdCN_P4oz#LO$znwGQvi0$;ryKohqN!84=dJZY^ zA$^{!{u#K+LwGk*2*0_-kkxX>wsfuX@(xh?%B+qwWQ@yQ;YZH=`VkN<@s+o@0x8f4 zRjWz($z(J>(Lmg)149}#I)1xrMzP&7aF_jgH;y=(SC^ow(Tr&KgT|8~MTq#;Q#FE` z-tLbq)7y6xRW<13(6&QUC8YPdYbr?0!G~$*zj!oML!YztKp8p==~{H@+SD|Fxgc;{ zJtI40Kiy-;wK)N=TAQz;s8$$ zB;NA5)`MiPvcQfd{6OWe1VASS+YxBxN6*k{dtv#sKHo*qooyeOYBl(H3iKuS+QF4G zCoQ*tl-ZO}XcUSAkvKD0-L^lqQG{Y5zdh9IFIG%MXflsj^B3B_2|pW+hvdN6{d3Ny zMt)%dnDcTt!x$ru$L0y32@3st@s}Bg$>HAs*kCJlyI=JxKa>H&@dF^w?!hnEbZ@l8 zjCT{@JGU6aDUgZd6LsxBe{FL>qUEP&ufw=$LDV-(Vn{o)W^q6kK zU(8=0%ts|~K8IUxN~Jm;46CnuA|u$VTiTJdf=}T5ubRo3juH7w9Y8K0JO_3SxfDsc z03V(HoW-q445LSuWhgU9S2Ss*P-cjej*K#8j5- zr5-kWSShwS^?(C=gcMj}E<7#4{Ndzbm(g#V4A90z{r1 z{sZ5ExjtwCHE5ytntSnsE&q=#*V|zy)bHYoq5?c{4dYX;1j7IG0_-N7)vdm>ce|hi zTJ&(4%ercNiY{=M6&8ZuC`3rBKmEr{pR452Wk%^>#$X z{$S!jme+dOQAZbet-55Taij*)BUsh=N&&Ef$z7(V+Q>P05ZTL@??azv%sk>Sx%%&RxV1{J+lL&%S+U7N>=Ish9J?nK{=j{ z#Ga|af1`ctS5z?$`#osLgy8j$F@w@N%^AlWgFsn*rC=RX%NnLOOjs0e(_l1ejIoxU zkfSt)`aPQpA1U8*or!Y2TPA3ADCBTt-6ylhJ%pRY9`o*uf$5Gyp*F*Zj)yYwe|9Zb zx4I|+muHodBs)7LLR=5;+#KCHH0P}6tt{eiP+*vyOc#HRuD>0~pY1B1V^#fA?Zlln z94b7LfnGFC69BVX=*d$mQ=!L57bB&&hNOI)s<$EDEGZ?>B09IWT8r%fX-~Ax~>$z2jJOq1` za&FBYE!@9lbGf_L)>)!6Fdyjd6n$G===1aJ5vDu*WhRH43{Y-;_|C@#v=%CXwAMBF z`RiP6uIan`^jCZhJ%8RP?OsblYp-3;MBRH3cvvNWSM6Dx1JhRS?{+saOjI6zC!$6Q zdJ~R~h7w<#iaT+DXF;iPIXEzjL>Odf5yu-a4+|N6%NwQ5@A4x-GwsJACb;z4a5Tiy zYIls|%4wXvp#IX}uNzkwnI@Fs-XfTc znA=<4Z#Dzi&sDDXOFxY%?@koF=FT9bSL1FZ?BQ$(qnP)pt)f|G*i%BQ?(XEmhe&Ak zh=Goi*Np49PTAH5#ScKVyb>;JqD*^=t?9FZLjq11Rh?iAV7`8U8mwL0dsD8=8AagY zDQyCA>qSW7*QRhRgtsCx*7awrK%*$29gi@B^qX1_apo-_(nQ=q;t$U<4!N#7UxWW8 z7D3!St{C;_vvKT#B6kIys9J8TArlzK0}PTU10BPLYiUqTV5~+3(Iv_GapW)9sX8e0 z4bJ)&d%opMWM-wpq+Y$xnFme{!Bs0x$E9tD>3TS4ehiyVD^{uBldwkRdB2d#ACQ;4 zoo+JqotcYy8x_>0*KXZrF{}mE?bV2kWqgG=!^4~&&&=4>r#-Z7CA$@Vi^~?VMTtQ- z=`+Q|o&xH`!hAmlFOYzZ%!(cNTUhYuxsQ>CMnqN!SUCie4CeW8v3)84YDh2v>Ts#! z5xcoW*ufiP9txC2k>N)om7ULry2jH3o?Wr}>o0|4sb1dD14b=?J@wGuPV8Jx+Lf-j zv40h0d{Bdn9oA~6w*QX3SJaRMRR==-*zc60$hn*%%DeakjwUOym0d(IeSCsa8Mj%6 zE^hu0u*rb}bsM8($vmkM6`+<16CGVvvSEV#t&`qeuEaTsyvp`6@9mP}rGRAJw#T0S zJ?YKKfAsjOWG?_e?c;vN7!(gufB*hiY&&nhEJPjR95gOrm^w~Xz#xUdm==JDF_40q zR!c$cOeo65gYws6ArAP2ctODaL(TLfIR0&|a#dzonSw4BCd?b z3_{0r~`G>Wh&Q;(XslX@I!_^!65~U;JE~+YygCdOg!Q zeK#KPh<#UOUvk}tZgmP%*TX$A&8-oKU_7BAY;(wUi4A^pS@YiZ z<=lSue;!jr5thC->Xtk1ucbY}1hkBDqS$JkHn**Fluv@KpTz?aD(bDCsdC|mLXIKJ zrmslMGJ72ybVQ&S##g4$NWRh_+6K&ky*@4CORVd|2sQF5Rm#`g7#X9AA)({kX zw`ztWY$!!*ziF&yQ&WVsk02Nf|8MIw7RYvQN0`CpkF5&`P1bqEgonK3W=fos@s z9B@0+R|9uhco@i;t}3~`JZK|0P0LN0vI^r+7M@jp+#r?%!Bm#t4(ym9+n~UQpqjG^ zzda{r8)w*vPfIyV_TF$yM}2FKC+LPvgoasp-DCCVUvLrUYyu;0*mMgYM~LoKlLgSm z#=a*ZX>ZhDynkcq{&#ZIy|sK5^~KAZ!N`z*O=>ou!)o+Hy9`SsJS3;h6QE`x02M2*cO?oPz;ZQ$hHnQu5YzcdQZF;<_a|1)c27(6-tq%IgMfx>-78>nYjL?|l4&_~QXVNNSWNC>M zppSF2r>a?x_qL%jvdAj_r^9!iVmqFT^?n^oQnkPpb#(PdTOduWviGU~w#vQ@yO6p= zdx`G6^ut@%sB?w$lNRAScHJ)=1td;{jRn)d07AchzIgzeoe=TI3K{T$3<0nrwO+mq zP$WL)B$+aQ2^v;3!pJw?{ZCm~&tKW7|#`r>~zH~dk z83XD8N`pnn+e1~UlLkA`tFsIl4(&=vHJ)>NA2f3&qIYC%7u_NZ*b{W8TX`iukH?^V z5-Joctg1=l)?wi6>=tO)xQZF1?vYG38I%olGI&f*Z|cs>WixeS^a#FTIREoH8@XzHXp%l)bPJ4AQ3beeo}ThsI!$ zL(L0E;Ce;`?kk%`#oAyWXmbi460h^3q8CS~*sRY+`F7Y9XnlDJFH3;)x)bv+j1SuX zGbtD$YBjl$w2GM?OK{VKzYS5YzT=D`jm2}RovtndcJtd-U{*K|*;}lPt*g^O!63x^ zurSRjc|Gmb_14Z)uV;_~G&j5j%@H?$%)tg~nYl<_Rh0MJ;ktpaB?`6T5zHrmy=>6R zbNK>y6!00AARLz?Hdm*z#{iJhMbediZ9CxYcg)Lt7@a8pRu8(grYjv^&RgDL0dj7l zhwZ-L)f?=^qAePTWob;Wy&q@nnATcGLP~qmZjReNKqEg>W|eo@iW}X(1Fo+hb9!SX;AN|sv(g@1BI8)heJ%W1;XA#;tQ+ssCxt# z1p@JT973)W-+pU%Z4E*47dZ^PM#_8nM(rWAzG7xV0XQItXUlX*mzS~2p!;!ay_^kb z!nu?x7O57`fjHXjGWnuX=P5O8B3X$Q9Gsu-SbfQ2lRChm%`s2KE1{5RZCkZMZtu<= z-;{Mx&Mdn}1NezD!C1};U2-v)dnaQZA=q<)6Rnn_yYeoFQlJN~__!X`n0*O46XKCH zQE=+;c>DNDAr;h||4b@U?Nn-{!qH+^943nUruYW$M$2GFV5vY~g+=QN=Y`{w$6WIu zr6FDsaA6eMV_=L=Xo|ik>era4rt(8I%h+j!Ud8dCt}Nq{Qf6v8x~9%f1V186AIni-w6vs?C4RD8Dt$m+B|M2@ z9qCEgE5_Zi9VFqW4#&v2H3KR@3J~ajZ3|%Mf4on4p*Xp}K?sx&gVs0~&?uS%W$e$j z1l|MAYIi0|B@b!PW(nBK%@d;rij>peYKvhy!1i+IVcE$@=hJ)Oma0^E?%+-6hhQfn zLMm1Jsb)s1u=K!y*9AM5Zph0r;nc0LhN z$z5?K62VZdX8V6)TrLhVJOdK$}R6F!(U9s9vh4sc^HARvz=bsDy6>o^1&f zE4|@k$Z59FJB7&?#rP9kCqnK^Bx@{i^(hn?4_eK56UEHgSE&4KPEF_P)F$Z%#5yg? zmvBbX#5-dHPB^O%Xt}lc_J1b60ku6)=!W()w(%vEU259a(2>+Q3TFljtz^vAI0e?k zK1(}Tzxx*_QUCcz6+vV9yIvg90g;M+v%K?~olgp7rDE~n1cxi)UReq8vz1?2UycHi z3wT#wpM-|sjO6&5qT!4qDgx3(-u@7IXX~xaY9U+F4j^|~Biu7OEx0CM0z9NPiQASs z`Pb*RJ@+*C_$6>pM^~mB*BWnG%Q;N7>;Hh5<~+|9V7jrtS^`_hDn(&yDqu{c)gy`0#KT%5-kGR! z`Z#N>jLf?8aY&*@BLVRG2at0p?cQK$YJJ2;`f-mBuemK=N6P6so?~8bjC3_$q=ks$ zaV3b}pANrEv}9Y-Vr5bejnq~!A+5!X`vCq1e^E;zXeakzEgDzh&nn|pvZXs7{mo+k zTIObGc#JCTBt7UZvjBhPWVAe3?i_#e=!OSBL1}#wvAWM&Rz+{pH|q*T>z zWe<+d&)>Xy|M^?C_w00;HD7;BB^@m39cUH=_$_%P%^rG7v+Cl(3okh11)A5#HrO>fzy`!@n*i=@`HTXe}V1&+N)eiH}ENj6SzIYLvKPb<6)TD6LbhGe4p`ouGl< z?O^fsV~+D*YG50`R<(xx)0l-SDbs|Nl_MW<#zql#+CQ(frhcmK-eJgwGi~!0?7vV7 zP2XfWT83PDz|Ze#vWAgW^2q>&SW`~$qZ%l@hz@B)EWWdZ)c}(VlnJ!!0)e9!k)ZPQ zfgL^Z8;L^Uu!~S;KUs6U34gOHUi` z)$K`}b<3HpB?a8I%7gaeTz?`DdLVt7nIfAhghF!8c1DOqM=ark3!1*7PKItI@L=Iz zweMwLRn@xuc$V%>WWHF#bN+Wmj?vCxR*s5IO^r%!&hzn$7Y~P@T3;4#-s!z!4R{+y z5&b)E&~D$tX7H5P#&Eh4cloiULh5RZ$@vr_uwfa?V|Q zUQJe<#9h`rb^Gm3X-rU>+3k<2bhPYzDhk~-$&Q6fzgBx6|6tRlx$AI((5bTxDM^oG zMh)Iu5;@-#73$A3!Z*Q--BS&5JE0nNtuDjx6VYEJZqx$_!P&csCod{X&plnX+1KG) z*7xR^xv8%Okd+s|)}pMaNtIKs@960W9{2)j?1vmEh^&| zE5}VO=o~ndDS{3LXW`XBr-g1lQ&sw+k#7<7$}olP)xPP@YHc_jhAW2D>e|nCU6FLT z%GfF_BsUeWHn(3kJr()HOtJleL^j_(>&o`ouRMN@G zZYwRllUjMvs#8ZatWiMIvoW<$ZX5s2y#D-T5BD3UMH;M(c)!8&!K&!l18MennW>_? zSFI==h?aj|KJNI93*@YEnhwlEjIlxeg`zv8RU-j^(Mv9LuEmRwmvBQl0r-V(ht|y# zB+wISUQf4;gDboo(4I?RckJnCo9Jm8DX}GRZm|G|a`~sQUNc$FS^v&GbPp;>wd~;9 z(S3NM*)BXO(D_&MX(peREN;V%4#ujXz)y$4-s3HP-{j53!OQ?9UG~H~xBee(tgn5v zWsaJ1r;9nd3p&T6Ha{a`a0<0PrQMrV{xNRKybdB(Zlk_^eXG|~EBx--7pbYB$#vM? zZ1z)S6d7p4d-yevCY6`5mE0+NMZsV9on9woPyP0_qPMD0NbOH|8#1UuLGE+<{_c6- zF; z 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≧-PBPB;=I^$G~9HqoCAVO%$g?E055gUHD23OW-V-;j9ZK@!(2UA}p z>dP+Y)b`d8?He-b4xHt`E1^@me5l`h6Pz^fD_lmvfEpjk`#lk&d493)S+>ttnM;&2 z$w`nr>dg3XT{(5vI++)J`&1dx2Z!Tcx$I!T)fMYs3;};JI2^&;c5T}_VKauvB-_&_ zl~2IYbA|AHWp!25N+u;&6qV&~g1&`JrKzI|l#?xAu#(1rVCw6S+lFw7g!sQDCNI7) z@Ejc>YVYr?+w4z3o02v{qa7J_Zl*F8y8{;kAw@5w@98S(4tIwd1uJ{l*z|RXeIf=a z9tsD++c2cy1K-Rs{$8r6S67eu@iaHvlcn^qg^DZ;0@bjx

    hAl=x&$xWM8s@bMdu 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 b@|DT^Cf)7 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 z zzDJ1qeP;t8qOd0ZHa6Mpf&rdWORo!yI=(nLUDO)D01#g-@%r)nlg5k2SQlPvL_uumUo*<>>z60#IaMx@ZBz!0JGh;Yi-785+@`B7^&YH2)cgam4!Bx}U)3iJ0(DCix{ra{P_Do1^&jK zg9Az?2@t1Gbr7R;SYD{!{Qx&Oa3nT$E3QU-wY*u_=OP){TJQ#y3w7op z5=EN3r$n|`U>t;Wa5k`Z61-n)Lj+_~XWOQAn`-?JeUtfEkYma|CG38MM6&#@HwW^_ zf`B04D2;NS1pP<^n)m*gmbTmU4UOQz$VAN} z^&HNg2&A?Ie!^ie-ah8AoYo4isSY=-v}lIpDJ{x|*D08#s{-l_`tk&*< zA{nT^ezqa#{shw#_N^_XJ>Qs;-}*xc^3PYpb?09-emIRG(M{fcm^@V%dj5QNLXtS7Gc%siu>cqZD25w*3l4^|CZ}%qB~B+U zk0vhF8}te9Q*SwH7Vf#ILInbsv|R`&LJ)WF;2z(Uwl7f7deY6kw zI&P`y17MpuXGtc&r+}^SAzk!*X25En#HLfbKa+Oa=)4J}mfXwzlBVCe=5EGRNM)L+ z%P)poj>*skZh00HdEmN;-o;~P6ZI`qAliP=N1xwzRIWlcsf4c*5G1Vmb+j<5;?A;3 zxR`dvVTZ%8F*Y1$13g-;-MO;s>5XzBdw73aSAgFAP@nDOO6@R)?!K%C2h=p8Uvg08 zY&-xOv|q4hWf{KfkSAP1#wj3n{|AdT7~UI$;^8=<(|z`e;BVk+=BHD{Jvr(2q9#E5 zZQix9m;W(C@3chyWJVJ!#a?@gq%lSacNmFl=Ab zc3@qr;S9Wvirof)|77KDfH59!Um||%IM8|YWvLG9wCj(hN%Rq8WWtz8t zYb5l9n6KXFYSjF4KwhLGI?l*N*qv#z#YQ0qr9?76;=h5NPa2<}m>Yi4xTZPsnmytG z@VB=Z#|ljN^sdNW8U{vBxc6U=Y4%&z`4C{t632ZY9UJS*-@7B64R0o!VdfR*t(GMm z9R6jqKDlx`xft$7zU*(GvN?TC5#6Nxz&ix$K3JMY?VHAU^Hc@{&Hn;-W5;PrX z@O^%N{^btVstf1`UNGfOHO<2q=myom9yDT;%gvd|+YefH3`_2iPe|(EGA3FBPfY9+LcFOOl9F2ud+_

    _QLV%Qgl;+ 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,ON;Nsl56ZI>t24Q>?ZzvLvZUP$3CQKQ#fC0{{BB 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�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%0AYTSl;#_1r3vL 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 z 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

    PTbW~N4XaRSu9h` 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�Tf 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 z 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�qg{@J`GZ~6gD#meSwNSDcV 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

    BKw}h)9+-SoKEp^J@mQ8|Pyiba3z9 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

    r~t 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%0D0@yV)mqaKi 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∋4uV(A?tvXoq|+Otf}i( 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�opp`H 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[|GFs6{UN({duws~Dci~hk(2Bh{ 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 diff --git a/xsd/xsd-vis.gv b/xsd/xsd-vis.gv index 91e71a4..d584224 100755 --- a/xsd/xsd-vis.gv +++ b/xsd/xsd-vis.gv @@ -10,102 +10,102 @@ digraph gocallvis { pad="0.0"; nodesep="0.35"; - node [shape="ellipse" style="filled" fillcolor="honeydew" fontname="Verdana" penwidth="1.0" margin="0.05,0.0"]; + node [shape="box" style="filled,rounded" fillcolor="honeydew" fontname="Verdana" penwidth="1.0" margin="0.05,0.0"]; edge [minlen="2"] subgraph "cluster_focus" { - label="main"; + bgcolor="#e6ecfa"; +label="main"; labelloc="t"; labeljust="c"; fontsize="18"; -bgcolor="#e6ecfa"; - "blitter.com/go/xs/xsd.main$2$1" [ fillcolor="lightblue" label="main$2$1" style="dotted,filled" tooltip="blitter.com/go/xs/xsd.main$2$1 | defined in xsd.go:650\nat xsd.go:653: calling [(*blitter.com/go/xs/xsnet.Conn).Close]\nat xsd.go:652: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xsd.go:651: calling [blitter.com/go/xs/logger.LogNotice]" ] - "blitter.com/go/xs/xsd.runShellAs$6" [ fillcolor="lightblue" label="runShellAs$6" style="dotted,filled" tooltip="blitter.com/go/xs/xsd.runShellAs$6 | defined in xsd.go:381\nat xsd.go:385: calling [(context.deadlineExceededError).Error]\nat xsd.go:385: calling [(compress/flate.CorruptInputError).Error]\nat xsd.go:385: calling [(compress/flate.InternalError).Error]\nat xsd.go:385: calling [(*github.com/pkg/errors.fundamental).Error]" ] + "blitter.com/go/xs/xsd.main$2$1" [ fillcolor="lightblue" label="main$2$1" style="dotted,filled" tooltip="blitter.com/go/xs/xsd.main$2$1 | defined in xsd.go:675\nat xsd.go:677: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xsd.go:676: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:678: calling [(*blitter.com/go/xs/xsnet.Conn).Close]" ] + "blitter.com/go/xs/xsd.main$1" [ fillcolor="lightblue" label="main$1" style="dotted,filled" tooltip="blitter.com/go/xs/xsd.main$1 | defined in xsd.go:610\nat xsd.go:615: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:619: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:623: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:625: calling [blitter.com/go/xs/logger.LogNotice]" ] + "blitter.com/go/xs/xsd.runShellAs$3" [ tooltip="blitter.com/go/xs/xsd.runShellAs$3 | defined in xsd.go:345\nat xsd.go:348: calling [github.com/creack/pty.Setsize]" fillcolor="lightblue" label="stdinToPtyWorker" style="dotted,filled" ] "blitter.com/go/xs/xsd.runShellAs$2" [ fillcolor="lightblue" label="termResizeWatcher" style="dotted,filled" tooltip="blitter.com/go/xs/xsd.runShellAs$2 | defined in xsd.go:336\nat xsd.go:336: calling [blitter.com/go/goutmp.Unput_utmp]" ] - "blitter.com/go/xs/xsd.runServerToClientCopyAs" [ fillcolor="lightblue" label="runServerToClientCopyAs" penwidth="0.5" tooltip="blitter.com/go/xs/xsd.runServerToClientCopyAs | defined in xsd.go:169\nat xsd.go:220: calling [(*blitter.com/go/xs/xsnet.Conn).EnableChaff]\nat xsd.go:223: calling [(*blitter.com/go/xs/xsnet.Conn).DisableChaff]\nat xsd.go:224: calling [(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff]\nat xsd.go:193: calling [blitter.com/go/xs.GetTool]" ] - "blitter.com/go/xs/xsd.runClientToServerCopyAs" [ fillcolor="lightblue" label="runClientToServerCopyAs" penwidth="0.5" tooltip="blitter.com/go/xs/xsd.runClientToServerCopyAs | defined in xsd.go:68\nat xsd.go:122: calling [(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff]\nat xsd.go:119: calling [(*blitter.com/go/xs/xsnet.Conn).EnableChaff]\nat xsd.go:88: calling [blitter.com/go/xs.GetTool]\nat xsd.go:121: calling [(*blitter.com/go/xs/xsnet.Conn).DisableChaff]" ] - "blitter.com/go/xs/xsd.runShellAs$4" [ label="deferChaffShutdown" style="dotted,filled" tooltip="blitter.com/go/xs/xsd.runShellAs$4 | defined in xsd.go:355\nat xsd.go:358: calling [(*github.com/pkg/errors.fundamental).Error]\nat xsd.go:358: calling [(context.deadlineExceededError).Error]\nat xsd.go:358: calling [(compress/flate.CorruptInputError).Error]\nat xsd.go:358: calling [(compress/flate.InternalError).Error]" fillcolor="lightblue" ] - "blitter.com/go/xs/xsd.main$1" [ fillcolor="lightblue" label="main$1" style="dotted,filled" tooltip="blitter.com/go/xs/xsd.main$1 | defined in xsd.go:586\nat xsd.go:591: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:595: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:599: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:601: calling [blitter.com/go/xs/logger.LogNotice]" ] - "blitter.com/go/xs/xsd.main$2" [ fillcolor="lightblue" label="main$2" style="dotted,filled" tooltip="blitter.com/go/xs/xsd.main$2 | defined in xsd.go:646\nat xsd.go:828: calling [blitter.com/go/xs/xsd.runServerToClientCopyAs]\nat xsd.go:701: calling [(*blitter.com/go/xs.Session).SetTermType]\nat xsd.go:720: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:724: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:729: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:731: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:743: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:754: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:755: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:757: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:762: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:764: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:771: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:772: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:777: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:779: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:786: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:788: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:793: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:795: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:803: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:804: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:809: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:811: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:827: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:828: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:830: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:833: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:729: calling [blitter.com/go/xs.VerifyPass]\nat xsd.go:737: calling [(*blitter.com/go/xs.Session).ClearAuthCookie]\nat xsd.go:743: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:754: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:771: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:779: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:786: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:795: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:803: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:811: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:827: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:833: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:717: calling [(*blitter.com/go/xs.Session).SetAuthCookie]\nat xsd.go:757: calling [(blitter.com/go/xs.Session).TermType]\nat xsd.go:772: calling [(blitter.com/go/xs.Session).TermType]\nat xsd.go:788: calling [(blitter.com/go/xs.Session).TermType]\nat xsd.go:804: calling [(blitter.com/go/xs.Session).TermType]\nat xsd.go:828: calling [(blitter.com/go/xs.Session).TermType]\nat xsd.go:765: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:780: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:796: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:815: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:841: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:693: calling [(*blitter.com/go/xs.Session).SetConnHost]\nat xsd.go:804: calling [blitter.com/go/xs/xsd.runClientToServerCopyAs]\nat xsd.go:752: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]\nat xsd.go:769: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]\nat xsd.go:784: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]\nat xsd.go:801: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]\nat xsd.go:825: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]\nat xsd.go:762: calling [blitter.com/go/xs/logger.LogErr]\nat xsd.go:777: calling [blitter.com/go/xs/logger.LogErr]\nat xsd.go:809: calling [blitter.com/go/xs/logger.LogErr]\nat xsd.go:846: calling [blitter.com/go/xs/logger.LogErr]\nat xsd.go:830: calling [blitter.com/go/xs/logger.LogErr]\nat xsd.go:709: calling [(*blitter.com/go/xs.Session).SetCmd]\nat xsd.go:720: calling [(blitter.com/go/xs.Session).ConnHost]\nat xsd.go:724: calling [(blitter.com/go/xs.Session).ConnHost]\nat xsd.go:755: calling [(blitter.com/go/xs.Session).ConnHost]\nat xsd.go:821: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]\nat xsd.go:685: calling [(*blitter.com/go/xs.Session).SetWho]\nat xsd.go:753: calling [blitter.com/go/goutmp.GetHost]\nat xsd.go:770: calling [blitter.com/go/goutmp.GetHost]\nat xsd.go:785: calling [blitter.com/go/goutmp.GetHost]\nat xsd.go:802: calling [blitter.com/go/goutmp.GetHost]\nat xsd.go:826: calling [blitter.com/go/goutmp.GetHost]\nat xsd.go:755: calling [blitter.com/go/xs/xsd.GenAuthToken]\nat xsd.go:757: calling [blitter.com/go/xs/xsd.runShellAs]\nat xsd.go:772: calling [blitter.com/go/xs/xsd.runShellAs]\nat xsd.go:788: calling [blitter.com/go/xs/xsd.runShellAs]\nat xsd.go:647: calling [(*blitter.com/go/xs/xsnet.Conn).Close]\nat xsd.go:677: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:760: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:775: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:791: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:807: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:840: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:724: calling [(blitter.com/go/xs.Session).AuthCookie]\nat xsd.go:729: calling [(blitter.com/go/xs.Session).AuthCookie]\nat xsd.go:731: calling [(blitter.com/go/xs.Session).AuthCookie]\nat xsd.go:724: calling [blitter.com/go/xs.NewAuthCtx]\nat xsd.go:729: calling [blitter.com/go/xs.NewAuthCtx]\nat xsd.go:731: calling [blitter.com/go/xs.NewAuthCtx]\nat xsd.go:731: calling [blitter.com/go/xs.AuthUserByPasswd]\nat xsd.go:741: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xsd.go:744: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xsd.go:720: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:750: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:767: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:782: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:798: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:822: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:720: calling [(blitter.com/go/xs.Session).Cmd]\nat xsd.go:772: calling [(blitter.com/go/xs.Session).Cmd]\nat xsd.go:788: calling [(blitter.com/go/xs.Session).Cmd]\nat xsd.go:804: calling [(blitter.com/go/xs.Session).Cmd]\nat xsd.go:828: calling [(blitter.com/go/xs.Session).Cmd]\nat xsd.go:724: calling [blitter.com/go/xs.AuthUserByToken]" ] - "blitter.com/go/xs/xsd.GenAuthToken" [ fillcolor="lightblue" label="GenAuthToken" penwidth="1.5" tooltip="blitter.com/go/xs/xsd.GenAuthToken | defined in xsd.go:424" ] - "blitter.com/go/xs/xsd.runShellAs" [ penwidth="0.5" tooltip="blitter.com/go/xs/xsd.runShellAs | defined in xsd.go:259\nat xsd.go:381: calling [blitter.com/go/xs/xsd.runShellAs$6]\nat xsd.go:336: calling [blitter.com/go/xs/xsd.runShellAs$2]\nat xsd.go:318: calling [github.com/creack/pty.Start]\nat xsd.go:337: calling [blitter.com/go/goutmp.Put_lastlog_entry]\nat xsd.go:409: calling [blitter.com/go/xs/logger.LogDebug]\nat xsd.go:308: calling [blitter.com/go/xs.GetTool]\nat xsd.go:297: calling [blitter.com/go/xs.GetTool]\nat xsd.go:303: calling [blitter.com/go/xs.GetTool]\nat xsd.go:331: calling [blitter.com/go/xs/xsd.ptsName]\nat xsd.go:335: calling [blitter.com/go/goutmp.Put_utmp]\nat xsd.go:368: calling [blitter.com/go/xs/xsd.runShellAs$5]\nat xsd.go:365: calling [(*blitter.com/go/xs/xsnet.Conn).EnableChaff]\nat xsd.go:407: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:345: calling [blitter.com/go/xs/xsd.runShellAs$3]\nat xsd.go:325: calling [blitter.com/go/xs/xsd.runShellAs$1]\nat xsd.go:355: calling [blitter.com/go/xs/xsd.runShellAs$4]" fillcolor="lightblue" label="runShellAs" ] - "blitter.com/go/xs/xsd.runShellAs$1" [ label="deferPtmxClose" style="dotted,filled" tooltip="blitter.com/go/xs/xsd.runShellAs$1 | defined in xsd.go:325" fillcolor="lightblue" ] - "blitter.com/go/xs/xsd.ptsName" [ tooltip="blitter.com/go/xs/xsd.ptsName | defined in xsd.go:57\nat xsd.go:59: calling [blitter.com/go/xs/xsd.ioctl]" fillcolor="lightblue" label="ptsName" penwidth="0.5" ] + "blitter.com/go/xs/xsd.main" [ penwidth="0.5" tooltip="blitter.com/go/xs/xsd.main | defined in xsd.go:508\nat xsd.go:583: calling [blitter.com/go/xs/logger.New]\nat xsd.go:650: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:654: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:658: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:648: calling [(blitter.com/go/xs/xsd.allowedKEXAlgs).allowed]\nat xsd.go:671: calling [blitter.com/go/xs/xsd.main$2]\nat xsd.go:644: calling [(*blitter.com/go/xs/xsnet.HKExListener).Accept]\nat xsd.go:648: calling [(*blitter.com/go/xs/xsnet.Conn).KEX]\nat xsd.go:649: calling [(*blitter.com/go/xs/xsnet.Conn).KEX]\nat xsd.go:656: calling [(*blitter.com/go/xs/xsnet.Conn).HAlg]\nat xsd.go:657: calling [(*blitter.com/go/xs/xsnet.Conn).HAlg]\nat xsd.go:595: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:600: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:605: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:651: calling [(*blitter.com/go/xs/xsnet.Conn).Close]\nat xsd.go:655: calling [(*blitter.com/go/xs/xsnet.Conn).Close]\nat xsd.go:659: calling [(*blitter.com/go/xs/xsnet.Conn).Close]\nat xsd.go:652: calling [(blitter.com/go/xs/xsd.allowedCipherAlgs).allowed]\nat xsd.go:638: calling [(blitter.com/go/xs/xsnet.HKExListener).Close]\nat xsd.go:666: calling [(*blitter.com/go/xs/xsnet.Conn).SetupChaff]\nat xsd.go:610: calling [blitter.com/go/xs/xsd.main$1]\nat xsd.go:656: calling [(blitter.com/go/xs/xsd.allowedHMACAlgs).allowed]\nat xsd.go:652: calling [(*blitter.com/go/xs/xsnet.Conn).CAlg]\nat xsd.go:653: calling [(*blitter.com/go/xs/xsnet.Conn).CAlg]\nat xsd.go:584: calling [blitter.com/go/xs/xsnet.Init]\nat xsd.go:634: calling [blitter.com/go/xs/xsnet.Listen]" fillcolor="lightblue" label="main" ] + "blitter.com/go/xs/xsd.main$2" [ style="dotted,filled" tooltip="blitter.com/go/xs/xsd.main$2 | defined in xsd.go:671\nat xsd.go:853: calling [blitter.com/go/xs/xsd.runServerToClientCopyAs]\nat xsd.go:672: calling [(*blitter.com/go/xs/xsnet.Conn).Close]\nat xsd.go:710: calling [(*blitter.com/go/xs.Session).SetWho]\nat xsd.go:790: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:805: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:821: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:840: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:866: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:726: calling [(*blitter.com/go/xs.Session).SetTermType]\nat xsd.go:766: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xsd.go:769: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xsd.go:782: calling [(blitter.com/go/xs.Session).TermType]\nat xsd.go:797: calling [(blitter.com/go/xs.Session).TermType]\nat xsd.go:813: calling [(blitter.com/go/xs.Session).TermType]\nat xsd.go:829: calling [(blitter.com/go/xs.Session).TermType]\nat xsd.go:853: calling [(blitter.com/go/xs.Session).TermType]\nat xsd.go:734: calling [(*blitter.com/go/xs.Session).SetCmd]\nat xsd.go:754: calling [blitter.com/go/xs.VerifyPass]\nat xsd.go:762: calling [(*blitter.com/go/xs.Session).ClearAuthCookie]\nat xsd.go:718: calling [(*blitter.com/go/xs.Session).SetConnHost]\nat xsd.go:745: calling [(blitter.com/go/xs.Session).Cmd]\nat xsd.go:797: calling [(blitter.com/go/xs.Session).Cmd]\nat xsd.go:813: calling [(blitter.com/go/xs.Session).Cmd]\nat xsd.go:829: calling [(blitter.com/go/xs.Session).Cmd]\nat xsd.go:853: calling [(blitter.com/go/xs.Session).Cmd]\nat xsd.go:829: calling [blitter.com/go/xs/xsd.runClientToServerCopyAs]\nat xsd.go:749: calling [(blitter.com/go/xs.Session).AuthCookie]\nat xsd.go:754: calling [(blitter.com/go/xs.Session).AuthCookie]\nat xsd.go:756: calling [(blitter.com/go/xs.Session).AuthCookie]\nat xsd.go:745: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:749: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:754: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:756: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:768: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:779: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:780: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:782: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:787: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:789: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:796: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:797: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:802: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:804: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:811: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:813: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:818: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:820: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:828: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:829: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:834: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:836: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:852: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:853: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:855: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:858: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:749: calling [blitter.com/go/xs.NewAuthCtx]\nat xsd.go:754: calling [blitter.com/go/xs.NewAuthCtx]\nat xsd.go:756: calling [blitter.com/go/xs.NewAuthCtx]\nat xsd.go:778: calling [blitter.com/go/goutmp.GetHost]\nat xsd.go:795: calling [blitter.com/go/goutmp.GetHost]\nat xsd.go:810: calling [blitter.com/go/goutmp.GetHost]\nat xsd.go:827: calling [blitter.com/go/goutmp.GetHost]\nat xsd.go:851: calling [blitter.com/go/goutmp.GetHost]\nat xsd.go:782: calling [blitter.com/go/xs/xsd.runShellAs]\nat xsd.go:797: calling [blitter.com/go/xs/xsd.runShellAs]\nat xsd.go:813: calling [blitter.com/go/xs/xsd.runShellAs]\nat xsd.go:768: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:779: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:796: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:804: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:811: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:820: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:828: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:836: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:852: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:858: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:787: calling [blitter.com/go/xs/logger.LogErr]\nat xsd.go:802: calling [blitter.com/go/xs/logger.LogErr]\nat xsd.go:834: calling [blitter.com/go/xs/logger.LogErr]\nat xsd.go:871: calling [blitter.com/go/xs/logger.LogErr]\nat xsd.go:855: calling [blitter.com/go/xs/logger.LogErr]\nat xsd.go:756: calling [blitter.com/go/xs.AuthUserByPasswd]\nat xsd.go:742: calling [(*blitter.com/go/xs.Session).SetAuthCookie]\nat xsd.go:745: calling [(blitter.com/go/xs.Session).ConnHost]\nat xsd.go:749: calling [(blitter.com/go/xs.Session).ConnHost]\nat xsd.go:780: calling [(blitter.com/go/xs.Session).ConnHost]\nat xsd.go:780: calling [blitter.com/go/xs/xsd.GenAuthToken]\nat xsd.go:777: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]\nat xsd.go:794: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]\nat xsd.go:809: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]\nat xsd.go:826: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]\nat xsd.go:850: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]\nat xsd.go:846: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]\nat xsd.go:749: calling [blitter.com/go/xs.AuthUserByToken]\nat xsd.go:745: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:775: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:792: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:807: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:823: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:847: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:702: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:785: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:800: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:816: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:832: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:865: calling [(*blitter.com/go/xs.Session).SetOp]" fillcolor="lightblue" label="main$2" ] + "blitter.com/go/xs/xsd.GenAuthToken" [ label="GenAuthToken" penwidth="1.5" tooltip="blitter.com/go/xs/xsd.GenAuthToken | defined in xsd.go:424" fillcolor="lightblue" ] + "blitter.com/go/xs/xsd.runShellAs" [ fillcolor="lightblue" label="runShellAs" penwidth="0.5" tooltip="blitter.com/go/xs/xsd.runShellAs | defined in xsd.go:259\nat xsd.go:355: calling [blitter.com/go/xs/xsd.runShellAs$4]\nat xsd.go:381: calling [blitter.com/go/xs/xsd.runShellAs$6]\nat xsd.go:308: calling [blitter.com/go/xs.GetTool]\nat xsd.go:297: calling [blitter.com/go/xs.GetTool]\nat xsd.go:303: calling [blitter.com/go/xs.GetTool]\nat xsd.go:331: calling [blitter.com/go/xs/xsd.ptsName]\nat xsd.go:365: calling [(*blitter.com/go/xs/xsnet.Conn).EnableChaff]\nat xsd.go:407: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:318: calling [github.com/creack/pty.Start]\nat xsd.go:335: calling [blitter.com/go/goutmp.Put_utmp]\nat xsd.go:368: calling [blitter.com/go/xs/xsd.runShellAs$5]\nat xsd.go:409: calling [blitter.com/go/xs/logger.LogDebug]\nat xsd.go:325: calling [blitter.com/go/xs/xsd.runShellAs$1]\nat xsd.go:336: calling [blitter.com/go/xs/xsd.runShellAs$2]\nat xsd.go:337: calling [blitter.com/go/goutmp.Put_lastlog_entry]\nat xsd.go:345: calling [blitter.com/go/xs/xsd.runShellAs$3]" ] + "blitter.com/go/xs/xsd.runShellAs$1" [ fillcolor="lightblue" label="deferPtmxClose" style="dotted,filled" tooltip="blitter.com/go/xs/xsd.runShellAs$1 | defined in xsd.go:325" ] + "blitter.com/go/xs/xsd.ptsName" [ fillcolor="lightblue" label="ptsName" penwidth="0.5" tooltip="blitter.com/go/xs/xsd.ptsName | defined in xsd.go:57\nat xsd.go:59: calling [blitter.com/go/xs/xsd.ioctl]" ] "blitter.com/go/xs/xsd.ioctl" [ fillcolor="lightblue" label="ioctl" penwidth="0.5" tooltip="blitter.com/go/xs/xsd.ioctl | defined in xsd.go:50" ] - "blitter.com/go/xs/xsd.runShellAs$3" [ label="stdinToPtyWorker" style="dotted,filled" tooltip="blitter.com/go/xs/xsd.runShellAs$3 | defined in xsd.go:345\nat xsd.go:348: calling [github.com/creack/pty.Setsize]" fillcolor="lightblue" ] + "blitter.com/go/xs/xsd.runShellAs$4" [ label="deferChaffShutdown" style="dotted,filled" tooltip="blitter.com/go/xs/xsd.runShellAs$4 | defined in xsd.go:355\nat xsd.go:358: calling [(context.deadlineExceededError).Error]\nat xsd.go:358: calling [(vendor/golang.org/x/net/idna.runeError).Error]\nat xsd.go:358: calling [(compress/flate.InternalError).Error]\nat xsd.go:358: calling [(compress/flate.CorruptInputError).Error]\nat xsd.go:358: calling [(vendor/golang.org/x/net/idna.labelError).Error]\nat xsd.go:358: calling [(*github.com/pkg/errors.fundamental).Error]" fillcolor="lightblue" ] "blitter.com/go/xs/xsd.runShellAs$5" [ fillcolor="lightblue" label="ptyToStdoutWorker" style="dotted,filled" tooltip="blitter.com/go/xs/xsd.runShellAs$5 | defined in xsd.go:368\nat xsd.go:369: calling [(*blitter.com/go/xs/xsnet.Conn).DisableChaff]\nat xsd.go:370: calling [(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff]" ] - "blitter.com/go/xs/xsd.main" [ fillcolor="lightblue" label="main" penwidth="0.5" tooltip="blitter.com/go/xs/xsd.main | defined in xsd.go:508\nat xsd.go:627: calling [(*blitter.com/go/xs/xsnet.Conn).CAlg]\nat xsd.go:628: calling [(*blitter.com/go/xs/xsnet.Conn).CAlg]\nat xsd.go:641: calling [(*blitter.com/go/xs/xsnet.Conn).SetupChaff]\nat xsd.go:610: calling [blitter.com/go/xs/xsnet.Listen]\nat xsd.go:623: calling [(*blitter.com/go/xs/xsnet.Conn).KEX]\nat xsd.go:624: calling [(*blitter.com/go/xs/xsnet.Conn).KEX]\nat xsd.go:614: calling [(blitter.com/go/xs/xsnet.HKExListener).Close]\nat xsd.go:620: calling [(*blitter.com/go/xs/xsnet.HKExListener).Accept]\nat xsd.go:627: calling [(blitter.com/go/xs/xsd.allowedCipherAlgs).allowed]\nat xsd.go:623: calling [(blitter.com/go/xs/xsd.allowedKEXAlgs).allowed]\nat xsd.go:631: calling [(blitter.com/go/xs/xsd.allowedHMACAlgs).allowed]\nat xsd.go:626: calling [(*blitter.com/go/xs/xsnet.Conn).Close]\nat xsd.go:630: calling [(*blitter.com/go/xs/xsnet.Conn).Close]\nat xsd.go:634: calling [(*blitter.com/go/xs/xsnet.Conn).Close]\nat xsd.go:571: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:576: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:581: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:586: calling [blitter.com/go/xs/xsd.main$1]\nat xsd.go:625: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:629: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:633: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:559: calling [blitter.com/go/xs/logger.New]\nat xsd.go:631: calling [(*blitter.com/go/xs/xsnet.Conn).HAlg]\nat xsd.go:632: calling [(*blitter.com/go/xs/xsnet.Conn).HAlg]\nat xsd.go:560: calling [blitter.com/go/xs/xsnet.Init]\nat xsd.go:646: calling [blitter.com/go/xs/xsd.main$2]" ] + "blitter.com/go/xs/xsd.runShellAs$6" [ style="dotted,filled" tooltip="blitter.com/go/xs/xsd.runShellAs$6 | defined in xsd.go:381\nat xsd.go:385: calling [(vendor/golang.org/x/net/idna.labelError).Error]\nat xsd.go:385: calling [(*github.com/pkg/errors.fundamental).Error]\nat xsd.go:385: calling [(compress/flate.CorruptInputError).Error]\nat xsd.go:385: calling [(vendor/golang.org/x/net/idna.runeError).Error]\nat xsd.go:385: calling [(context.deadlineExceededError).Error]\nat xsd.go:385: calling [(compress/flate.InternalError).Error]" fillcolor="lightblue" label="runShellAs$6" ] + "blitter.com/go/xs/xsd.runClientToServerCopyAs" [ fillcolor="lightblue" label="runClientToServerCopyAs" penwidth="0.5" tooltip="blitter.com/go/xs/xsd.runClientToServerCopyAs | defined in xsd.go:68\nat xsd.go:119: calling [(*blitter.com/go/xs/xsnet.Conn).EnableChaff]\nat xsd.go:121: calling [(*blitter.com/go/xs/xsnet.Conn).DisableChaff]\nat xsd.go:122: calling [(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff]\nat xsd.go:88: calling [blitter.com/go/xs.GetTool]" ] + "blitter.com/go/xs/xsd.runServerToClientCopyAs" [ fillcolor="lightblue" label="runServerToClientCopyAs" penwidth="0.5" tooltip="blitter.com/go/xs/xsd.runServerToClientCopyAs | defined in xsd.go:169\nat xsd.go:220: calling [(*blitter.com/go/xs/xsnet.Conn).EnableChaff]\nat xsd.go:224: calling [(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff]\nat xsd.go:193: calling [blitter.com/go/xs.GetTool]\nat xsd.go:223: calling [(*blitter.com/go/xs/xsnet.Conn).DisableChaff]" ] subgraph "cluster_blitter.com/go/goutmp" { - fontname="Tahoma bold"; + penwidth="0.8"; rank="sink"; -label="goutmp"; -penwidth="0.8"; -style="filled"; URL="/?f=blitter.com/go/goutmp"; -tooltip="package: blitter.com/go/goutmp"; fontsize="16"; +style="filled"; fillcolor="lightyellow"; +fontname="Tahoma bold"; +label="goutmp"; +tooltip="package: blitter.com/go/goutmp"; "blitter.com/go/goutmp.Unput_utmp" [ fillcolor="moccasin" label="Unput_utmp" penwidth="1.5" tooltip="blitter.com/go/goutmp.Unput_utmp | defined in goutmp_linux.go:115" ] "blitter.com/go/goutmp.GetHost" [ fillcolor="moccasin" label="GetHost" penwidth="1.5" tooltip="blitter.com/go/goutmp.GetHost | defined in goutmp_linux.go:91" ] "blitter.com/go/goutmp.Put_utmp" [ fillcolor="moccasin" label="Put_utmp" penwidth="1.5" tooltip="blitter.com/go/goutmp.Put_utmp | defined in goutmp_linux.go:106" ] - "blitter.com/go/goutmp.Put_lastlog_entry" [ fillcolor="moccasin" label="Put_lastlog_entry" penwidth="1.5" tooltip="blitter.com/go/goutmp.Put_lastlog_entry | defined in goutmp_linux.go:120" ] + "blitter.com/go/goutmp.Put_lastlog_entry" [ tooltip="blitter.com/go/goutmp.Put_lastlog_entry | defined in goutmp_linux.go:120" fillcolor="moccasin" label="Put_lastlog_entry" penwidth="1.5" ] } subgraph "cluster_blitter.com/go/xs" { - fontsize="16"; + penwidth="0.8"; style="filled"; +fontname="Tahoma bold"; +tooltip="package: blitter.com/go/xs"; +fontsize="16"; fillcolor="lightyellow"; rank="sink"; -penwidth="0.8"; -fontname="Tahoma bold"; label="xs"; URL="/?f=blitter.com/go/xs"; -tooltip="package: blitter.com/go/xs"; - "blitter.com/go/xs.GetTool" [ tooltip="blitter.com/go/xs.GetTool | defined in auth.go:211" fillcolor="moccasin" label="GetTool" penwidth="1.5" ] - "blitter.com/go/xs.NewAuthCtx" [ penwidth="1.5" tooltip="blitter.com/go/xs.NewAuthCtx | defined in auth.go:35" fillcolor="moccasin" label="NewAuthCtx" ] - "blitter.com/go/xs.AuthUserByToken" [ tooltip="blitter.com/go/xs.AuthUserByToken | defined in auth.go:161" fillcolor="moccasin" label="AuthUserByToken" penwidth="1.5" ] + "blitter.com/go/xs.NewAuthCtx" [ fillcolor="moccasin" label="NewAuthCtx" penwidth="1.5" tooltip="blitter.com/go/xs.NewAuthCtx | defined in auth.go:35" ] + "blitter.com/go/xs.AuthUserByToken" [ fillcolor="moccasin" label="AuthUserByToken" penwidth="1.5" tooltip="blitter.com/go/xs.AuthUserByToken | defined in auth.go:161" ] "blitter.com/go/xs.VerifyPass" [ fillcolor="moccasin" label="VerifyPass" penwidth="1.5" tooltip="blitter.com/go/xs.VerifyPass | defined in auth.go:44" ] "blitter.com/go/xs.AuthUserByPasswd" [ fillcolor="moccasin" label="AuthUserByPasswd" penwidth="1.5" tooltip="blitter.com/go/xs.AuthUserByPasswd | defined in auth.go:96" ] + "blitter.com/go/xs.GetTool" [ fillcolor="moccasin" label="GetTool" penwidth="1.5" tooltip="blitter.com/go/xs.GetTool | defined in auth.go:217" ] subgraph "cluster_*blitter.com/go/xs.Session" { - style="rounded,filled"; + fontcolor="#222222"; +labelloc="b"; +style="rounded,filled"; fillcolor="wheat2"; label="(*Session)"; tooltip="type: *blitter.com/go/xs.Session"; penwidth="0.5"; fontsize="15"; -fontcolor="#222222"; -labelloc="b"; "(*blitter.com/go/xs.Session).SetOp" [ fillcolor="moccasin" label="SetOp" penwidth="1.5" tooltip="(*blitter.com/go/xs.Session).SetOp | defined in session.go:41" ] "(*blitter.com/go/xs.Session).SetWho" [ fillcolor="moccasin" label="SetWho" penwidth="1.5" tooltip="(*blitter.com/go/xs.Session).SetWho | defined in session.go:51" ] - "(*blitter.com/go/xs.Session).SetConnHost" [ penwidth="1.5" tooltip="(*blitter.com/go/xs.Session).SetConnHost | defined in session.go:61" fillcolor="moccasin" label="SetConnHost" ] - "(*blitter.com/go/xs.Session).SetTermType" [ tooltip="(*blitter.com/go/xs.Session).SetTermType | defined in session.go:73" fillcolor="moccasin" label="SetTermType" penwidth="1.5" ] - "(*blitter.com/go/xs.Session).SetCmd" [ fillcolor="moccasin" label="SetCmd" penwidth="1.5" tooltip="(*blitter.com/go/xs.Session).SetCmd | defined in session.go:85" ] - "(*blitter.com/go/xs.Session).SetAuthCookie" [ label="SetAuthCookie" penwidth="1.5" tooltip="(*blitter.com/go/xs.Session).SetAuthCookie | defined in session.go:101" fillcolor="moccasin" ] + "(*blitter.com/go/xs.Session).SetConnHost" [ fillcolor="moccasin" label="SetConnHost" penwidth="1.5" tooltip="(*blitter.com/go/xs.Session).SetConnHost | defined in session.go:61" ] + "(*blitter.com/go/xs.Session).SetTermType" [ label="SetTermType" penwidth="1.5" tooltip="(*blitter.com/go/xs.Session).SetTermType | defined in session.go:73" fillcolor="moccasin" ] + "(*blitter.com/go/xs.Session).SetCmd" [ tooltip="(*blitter.com/go/xs.Session).SetCmd | defined in session.go:85" fillcolor="moccasin" label="SetCmd" penwidth="1.5" ] + "(*blitter.com/go/xs.Session).SetAuthCookie" [ fillcolor="moccasin" label="SetAuthCookie" penwidth="1.5" tooltip="(*blitter.com/go/xs.Session).SetAuthCookie | defined in session.go:101" ] "(*blitter.com/go/xs.Session).ClearAuthCookie" [ fillcolor="moccasin" label="ClearAuthCookie" penwidth="1.5" tooltip="(*blitter.com/go/xs.Session).ClearAuthCookie | defined in session.go:109" ] } subgraph "cluster_blitter.com/go/xs.Session" { - fontcolor="#222222"; -labelloc="b"; -style="rounded,filled"; -fillcolor="wheat2"; -label="(Session)"; + label="(Session)"; tooltip="type: blitter.com/go/xs.Session"; penwidth="0.5"; fontsize="15"; +fontcolor="#222222"; +labelloc="b"; +style="rounded,filled"; +fillcolor="wheat2"; "(blitter.com/go/xs.Session).Op" [ fillcolor="moccasin" label="Op" penwidth="1.5" tooltip="(blitter.com/go/xs.Session).Op | defined in session.go:36" ] "(blitter.com/go/xs.Session).Who" [ tooltip="(blitter.com/go/xs.Session).Who | defined in session.go:46" fillcolor="moccasin" label="Who" penwidth="1.5" ] - "(blitter.com/go/xs.Session).ConnHost" [ fillcolor="moccasin" label="ConnHost" penwidth="1.5" tooltip="(blitter.com/go/xs.Session).ConnHost | defined in session.go:56" ] - "(blitter.com/go/xs.Session).Cmd" [ label="Cmd" penwidth="1.5" tooltip="(blitter.com/go/xs.Session).Cmd | defined in session.go:79" fillcolor="moccasin" ] + "(blitter.com/go/xs.Session).ConnHost" [ label="ConnHost" penwidth="1.5" tooltip="(blitter.com/go/xs.Session).ConnHost | defined in session.go:56" fillcolor="moccasin" ] + "(blitter.com/go/xs.Session).Cmd" [ penwidth="1.5" tooltip="(blitter.com/go/xs.Session).Cmd | defined in session.go:79" fillcolor="moccasin" label="Cmd" ] "(blitter.com/go/xs.Session).AuthCookie" [ fillcolor="moccasin" label="AuthCookie" penwidth="1.5" tooltip="(blitter.com/go/xs.Session).AuthCookie | defined in session.go:92" ] "(blitter.com/go/xs.Session).TermType" [ fillcolor="moccasin" label="TermType" penwidth="1.5" tooltip="(blitter.com/go/xs.Session).TermType | defined in session.go:67" ] @@ -114,156 +114,156 @@ fontsize="15"; } subgraph "cluster_blitter.com/go/xs/logger" { - fontsize="16"; -style="filled"; -label="logger"; -tooltip="package: blitter.com/go/xs/logger"; -penwidth="0.8"; -fillcolor="lightyellow"; -fontname="Tahoma bold"; + fillcolor="lightyellow"; rank="sink"; URL="/?f=blitter.com/go/xs/logger"; +penwidth="0.8"; +fontsize="16"; +label="logger"; +tooltip="package: blitter.com/go/xs/logger"; +style="filled"; +fontname="Tahoma bold"; - "blitter.com/go/xs/logger.LogNotice" [ fillcolor="moccasin" label="LogNotice" penwidth="1.5" tooltip="blitter.com/go/xs/logger.LogNotice | defined in logger_linux.go:135" ] - "blitter.com/go/xs/logger.LogDebug" [ penwidth="1.5" tooltip="blitter.com/go/xs/logger.LogDebug | defined in logger_linux.go:103" fillcolor="moccasin" label="LogDebug" ] + "blitter.com/go/xs/logger.LogNotice" [ label="LogNotice" penwidth="1.5" tooltip="blitter.com/go/xs/logger.LogNotice | defined in logger_linux.go:135" fillcolor="moccasin" ] + "blitter.com/go/xs/logger.New" [ tooltip="blitter.com/go/xs/logger.New | defined in logger_linux.go:71" fillcolor="moccasin" label="New" penwidth="1.5" ] + "blitter.com/go/xs/logger.LogDebug" [ fillcolor="moccasin" label="LogDebug" penwidth="1.5" tooltip="blitter.com/go/xs/logger.LogDebug | defined in logger_linux.go:103" ] "blitter.com/go/xs/logger.LogErr" [ fillcolor="moccasin" label="LogErr" penwidth="1.5" tooltip="blitter.com/go/xs/logger.LogErr | defined in logger_linux.go:119" ] - "blitter.com/go/xs/logger.New" [ fillcolor="moccasin" label="New" penwidth="1.5" tooltip="blitter.com/go/xs/logger.New | defined in logger_linux.go:71" ] } subgraph "cluster_blitter.com/go/xs/xsd.allowedCipherAlgs" { - style="rounded,filled"; + fontsize="15"; +fontcolor="#222222"; +labelloc="b"; +style="rounded,filled"; fillcolor="lightsteelblue"; label="(allowedCipherAlgs)"; tooltip="type: blitter.com/go/xs/xsd.allowedCipherAlgs"; penwidth="0.5"; -fontsize="15"; -fontcolor="#222222"; -labelloc="b"; "(blitter.com/go/xs/xsd.allowedCipherAlgs).allowed" [ fillcolor="lightblue" label="allowed" penwidth="0.5" tooltip="(blitter.com/go/xs/xsd.allowedCipherAlgs).allowed | defined in xsd.go:464\nat xsd.go:466: calling [(*blitter.com/go/xs/xsnet.CSCipherAlg).String]" ] } subgraph "cluster_blitter.com/go/xs/xsd.allowedHMACAlgs" { - fillcolor="lightsteelblue"; -label="(allowedHMACAlgs)"; + label="(allowedHMACAlgs)"; tooltip="type: blitter.com/go/xs/xsd.allowedHMACAlgs"; penwidth="0.5"; fontsize="15"; fontcolor="#222222"; labelloc="b"; style="rounded,filled"; +fillcolor="lightsteelblue"; - "(blitter.com/go/xs/xsd.allowedHMACAlgs).allowed" [ tooltip="(blitter.com/go/xs/xsd.allowedHMACAlgs).allowed | defined in xsd.go:482\nat xsd.go:484: calling [(*blitter.com/go/xs/xsnet.CSHmacAlg).String]" fillcolor="lightblue" label="allowed" penwidth="0.5" ] + "(blitter.com/go/xs/xsd.allowedHMACAlgs).allowed" [ label="allowed" penwidth="0.5" tooltip="(blitter.com/go/xs/xsd.allowedHMACAlgs).allowed | defined in xsd.go:482\nat xsd.go:484: calling [(*blitter.com/go/xs/xsnet.CSHmacAlg).String]" fillcolor="lightblue" ] } subgraph "cluster_blitter.com/go/xs/xsd.allowedKEXAlgs" { - fontsize="15"; -fontcolor="#222222"; -labelloc="b"; -style="rounded,filled"; + style="rounded,filled"; fillcolor="lightsteelblue"; label="(allowedKEXAlgs)"; tooltip="type: blitter.com/go/xs/xsd.allowedKEXAlgs"; penwidth="0.5"; +fontsize="15"; +fontcolor="#222222"; +labelloc="b"; - "(blitter.com/go/xs/xsd.allowedKEXAlgs).allowed" [ fillcolor="lightblue" label="allowed" penwidth="0.5" tooltip="(blitter.com/go/xs/xsd.allowedKEXAlgs).allowed | defined in xsd.go:446\nat xsd.go:448: calling [(*blitter.com/go/xs/xsnet.KEXAlg).String]" ] + "(blitter.com/go/xs/xsd.allowedKEXAlgs).allowed" [ tooltip="(blitter.com/go/xs/xsd.allowedKEXAlgs).allowed | defined in xsd.go:446\nat xsd.go:448: calling [(*blitter.com/go/xs/xsnet.KEXAlg).String]" fillcolor="lightblue" label="allowed" penwidth="0.5" ] } subgraph "cluster_blitter.com/go/xs/xsnet" { - label="xsnet"; -penwidth="0.8"; -fontsize="16"; -style="filled"; + URL="/?f=blitter.com/go/xs/xsnet"; fillcolor="lightyellow"; fontname="Tahoma bold"; rank="sink"; -URL="/?f=blitter.com/go/xs/xsnet"; +label="xsnet"; tooltip="package: blitter.com/go/xs/xsnet"; +penwidth="0.8"; +fontsize="16"; +style="filled"; - "blitter.com/go/xs/xsnet.Init" [ fillcolor="moccasin" label="Init" penwidth="1.5" tooltip="blitter.com/go/xs/xsnet.Init | defined in net.go:192" ] - "blitter.com/go/xs/xsnet.Listen" [ fillcolor="moccasin" label="Listen" penwidth="1.5" tooltip="blitter.com/go/xs/xsnet.Listen | defined in net.go:1040" ] + "blitter.com/go/xs/xsnet.Init" [ fillcolor="moccasin" label="Init" penwidth="1.5" tooltip="blitter.com/go/xs/xsnet.Init | defined in net.go:198" ] + "blitter.com/go/xs/xsnet.Listen" [ fillcolor="moccasin" label="Listen" penwidth="1.5" tooltip="blitter.com/go/xs/xsnet.Listen | defined in net.go:1049" ] subgraph "cluster_*blitter.com/go/xs/xsnet.CSCipherAlg" { - fillcolor="wheat2"; -label="(*CSCipherAlg)"; -tooltip="type: *blitter.com/go/xs/xsnet.CSCipherAlg"; -penwidth="0.5"; -fontsize="15"; -fontcolor="#222222"; -labelloc="b"; -style="rounded,filled"; - - "(*blitter.com/go/xs/xsnet.CSCipherAlg).String" [ fillcolor="moccasin" label="String" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.CSCipherAlg).String | defined in net.go:148" ] - - } - - subgraph "cluster_*blitter.com/go/xs/xsnet.CSHmacAlg" { fontcolor="#222222"; labelloc="b"; style="rounded,filled"; fillcolor="wheat2"; -label="(*CSHmacAlg)"; -tooltip="type: *blitter.com/go/xs/xsnet.CSHmacAlg"; +label="(*CSCipherAlg)"; +tooltip="type: *blitter.com/go/xs/xsnet.CSCipherAlg"; penwidth="0.5"; fontsize="15"; - "(*blitter.com/go/xs/xsnet.CSHmacAlg).String" [ penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.CSHmacAlg).String | defined in net.go:169" fillcolor="moccasin" label="String" ] + "(*blitter.com/go/xs/xsnet.CSCipherAlg).String" [ fillcolor="moccasin" label="String" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.CSCipherAlg).String | defined in net.go:152" ] } - subgraph "cluster_*blitter.com/go/xs/xsnet.Conn" { - fillcolor="wheat2"; -label="(*Conn)"; -tooltip="type: *blitter.com/go/xs/xsnet.Conn"; + subgraph "cluster_*blitter.com/go/xs/xsnet.CSHmacAlg" { + label="(*CSHmacAlg)"; +tooltip="type: *blitter.com/go/xs/xsnet.CSHmacAlg"; penwidth="0.5"; fontsize="15"; fontcolor="#222222"; labelloc="b"; style="rounded,filled"; +fillcolor="wheat2"; - "(*blitter.com/go/xs/xsnet.Conn).Close" [ fillcolor="moccasin" label="Close" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).Close | defined in net.go:970" ] - "(*blitter.com/go/xs/xsnet.Conn).EnableChaff" [ tooltip="(*blitter.com/go/xs/xsnet.Conn).EnableChaff | defined in net.go:1539" fillcolor="moccasin" label="EnableChaff" penwidth="1.5" ] - "(*blitter.com/go/xs/xsnet.Conn).DisableChaff" [ fillcolor="moccasin" label="DisableChaff" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).DisableChaff | defined in net.go:1546" ] - "(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff" [ penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff | defined in net.go:1551" fillcolor="moccasin" label="ShutdownChaff" ] - "(*blitter.com/go/xs/xsnet.Conn).RemoteAddr" [ fillcolor="moccasin" label="RemoteAddr" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).RemoteAddr | defined in net.go:988" ] - "(*blitter.com/go/xs/xsnet.Conn).SetStatus" [ fillcolor="moccasin" label="SetStatus" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).SetStatus | defined in net.go:212" ] - "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ fillcolor="moccasin" label="WritePacket" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).WritePacket | defined in net.go:1430" ] - "(*blitter.com/go/xs/xsnet.Conn).KEX" [ fillcolor="moccasin" label="KEX" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).KEX | defined in net.go:204" ] - "(*blitter.com/go/xs/xsnet.Conn).CAlg" [ tooltip="(*blitter.com/go/xs/xsnet.Conn).CAlg | defined in net.go:144" fillcolor="moccasin" label="CAlg" penwidth="1.5" ] - "(*blitter.com/go/xs/xsnet.Conn).HAlg" [ fillcolor="moccasin" label="HAlg" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).HAlg | defined in net.go:165" ] - "(*blitter.com/go/xs/xsnet.Conn).SetupChaff" [ label="SetupChaff" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).SetupChaff | defined in net.go:1556" fillcolor="moccasin" ] + "(*blitter.com/go/xs/xsnet.CSHmacAlg).String" [ fillcolor="moccasin" label="String" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.CSHmacAlg).String | defined in net.go:175" ] + + } + + subgraph "cluster_*blitter.com/go/xs/xsnet.Conn" { + fontsize="15"; +fontcolor="#222222"; +labelloc="b"; +style="rounded,filled"; +fillcolor="wheat2"; +label="(*Conn)"; +tooltip="type: *blitter.com/go/xs/xsnet.Conn"; +penwidth="0.5"; + + "(*blitter.com/go/xs/xsnet.Conn).Close" [ label="Close" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).Close | defined in net.go:979" fillcolor="moccasin" ] + "(*blitter.com/go/xs/xsnet.Conn).KEX" [ penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).KEX | defined in net.go:210" fillcolor="moccasin" label="KEX" ] + "(*blitter.com/go/xs/xsnet.Conn).SetStatus" [ fillcolor="moccasin" label="SetStatus" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).SetStatus | defined in net.go:218" ] + "(*blitter.com/go/xs/xsnet.Conn).CAlg" [ fillcolor="moccasin" label="CAlg" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).CAlg | defined in net.go:148" ] + "(*blitter.com/go/xs/xsnet.Conn).HAlg" [ fillcolor="moccasin" label="HAlg" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).HAlg | defined in net.go:171" ] + "(*blitter.com/go/xs/xsnet.Conn).SetupChaff" [ tooltip="(*blitter.com/go/xs/xsnet.Conn).SetupChaff | defined in net.go:1563" fillcolor="moccasin" label="SetupChaff" penwidth="1.5" ] + "(*blitter.com/go/xs/xsnet.Conn).RemoteAddr" [ fillcolor="moccasin" label="RemoteAddr" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).RemoteAddr | defined in net.go:997" ] + "(*blitter.com/go/xs/xsnet.Conn).EnableChaff" [ fillcolor="moccasin" label="EnableChaff" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).EnableChaff | defined in net.go:1546" ] + "(*blitter.com/go/xs/xsnet.Conn).DisableChaff" [ fillcolor="moccasin" label="DisableChaff" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).DisableChaff | defined in net.go:1553" ] + "(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff" [ fillcolor="moccasin" label="ShutdownChaff" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff | defined in net.go:1558" ] + "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ fillcolor="moccasin" label="WritePacket" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.Conn).WritePacket | defined in net.go:1437" ] } subgraph "cluster_*blitter.com/go/xs/xsnet.HKExListener" { - penwidth="0.5"; -fontsize="15"; + fontsize="15"; fontcolor="#222222"; labelloc="b"; style="rounded,filled"; fillcolor="wheat2"; label="(*HKExListener)"; tooltip="type: *blitter.com/go/xs/xsnet.HKExListener"; +penwidth="0.5"; - "(*blitter.com/go/xs/xsnet.HKExListener).Accept" [ tooltip="(*blitter.com/go/xs/xsnet.HKExListener).Accept | defined in net.go:1081" fillcolor="moccasin" label="Accept" penwidth="1.5" ] + "(*blitter.com/go/xs/xsnet.HKExListener).Accept" [ fillcolor="moccasin" label="Accept" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.HKExListener).Accept | defined in net.go:1090" ] } subgraph "cluster_*blitter.com/go/xs/xsnet.KEXAlg" { - fillcolor="wheat2"; -label="(*KEXAlg)"; -tooltip="type: *blitter.com/go/xs/xsnet.KEXAlg"; -penwidth="0.5"; -fontsize="15"; + fontsize="15"; fontcolor="#222222"; labelloc="b"; style="rounded,filled"; +fillcolor="wheat2"; +label="(*KEXAlg)"; +tooltip="type: *blitter.com/go/xs/xsnet.KEXAlg"; +penwidth="0.5"; - "(*blitter.com/go/xs/xsnet.KEXAlg).String" [ label="String" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.KEXAlg).String | defined in net.go:111" fillcolor="moccasin" ] + "(*blitter.com/go/xs/xsnet.KEXAlg).String" [ fillcolor="moccasin" label="String" penwidth="1.5" tooltip="(*blitter.com/go/xs/xsnet.KEXAlg).String | defined in net.go:115" ] } @@ -277,228 +277,274 @@ tooltip="type: blitter.com/go/xs/xsnet.Conn"; penwidth="0.5"; fontsize="15"; - "(blitter.com/go/xs/xsnet.Conn).Write" [ tooltip="(blitter.com/go/xs/xsnet.Conn).Write | defined in net.go:1424" fillcolor="moccasin" label="Write" penwidth="1.5" ] + "(blitter.com/go/xs/xsnet.Conn).Write" [ penwidth="1.5" tooltip="(blitter.com/go/xs/xsnet.Conn).Write | defined in net.go:1431" fillcolor="moccasin" label="Write" ] } subgraph "cluster_blitter.com/go/xs/xsnet.HKExListener" { - fontsize="15"; -fontcolor="#222222"; -labelloc="b"; + labelloc="b"; style="rounded,filled"; fillcolor="wheat2"; label="(HKExListener)"; tooltip="type: blitter.com/go/xs/xsnet.HKExListener"; penwidth="0.5"; +fontsize="15"; +fontcolor="#222222"; - "(blitter.com/go/xs/xsnet.HKExListener).Close" [ fillcolor="moccasin" label="Close" penwidth="1.5" tooltip="(blitter.com/go/xs/xsnet.HKExListener).Close | defined in net.go:1066" ] + "(blitter.com/go/xs/xsnet.HKExListener).Close" [ fillcolor="moccasin" label="Close" penwidth="1.5" tooltip="(blitter.com/go/xs/xsnet.HKExListener).Close | defined in net.go:1075" ] } } subgraph "cluster_compress/flate" { - URL="/?f=compress/flate"; + fontsize="16"; style="filled"; -fillcolor="#E0FFE1"; -label="compress/flate"; -rank="sink"; +fillcolor="lightyellow"; +fontname="Tahoma bold"; +label="flate"; +URL="/?f=compress/flate"; tooltip="package: compress/flate"; penwidth="0.8"; -fontsize="16"; -fontname="Tahoma bold"; +rank="sink"; subgraph "cluster_compress/flate.CorruptInputError" { - labelloc="b"; + fontcolor="#222222"; +labelloc="b"; style="rounded,filled"; -fillcolor="#c2e3c2"; +fillcolor="wheat2"; label="(CorruptInputError)"; tooltip="type: compress/flate.CorruptInputError"; penwidth="0.5"; fontsize="15"; -fontcolor="#222222"; - "(compress/flate.CorruptInputError).Error" [ penwidth="1.5" tooltip="(compress/flate.CorruptInputError).Error | defined in inflate.go:35" fillcolor="#adedad" label="Error" ] + "(compress/flate.CorruptInputError).Error" [ fillcolor="moccasin" label="Error" penwidth="1.5" tooltip="(compress/flate.CorruptInputError).Error | defined in inflate.go:35" ] } subgraph "cluster_compress/flate.InternalError" { - label="(InternalError)"; -tooltip="type: compress/flate.InternalError"; -penwidth="0.5"; -fontsize="15"; -fontcolor="#222222"; -labelloc="b"; -style="rounded,filled"; -fillcolor="#c2e3c2"; - - "(compress/flate.InternalError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" tooltip="(compress/flate.InternalError).Error | defined in inflate.go:42" ] - - } - - } - - subgraph "cluster_context" { - penwidth="0.8"; -fillcolor="#E0FFE1"; -fontname="Tahoma bold"; -rank="sink"; -tooltip="package: context"; -fontsize="16"; -style="filled"; -label="context"; -URL="/?f=context"; - - - subgraph "cluster_context.deadlineExceededError" { - label="(deadlineExceededError)"; -tooltip="type: context.deadlineExceededError"; -penwidth="0.5"; -fontsize="15"; -fontcolor="#222222"; -labelloc="b"; -style="rounded,filled"; -fillcolor="#c2e3c2"; - - "(context.deadlineExceededError).Error" [ fillcolor="#adedad" label="Error" penwidth="1.5" tooltip="(context.deadlineExceededError).Error | defined in context.go:165" ] - - } - - } - - subgraph "cluster_github.com/creack/pty" { - URL="/?f=github.com/creack/pty"; -tooltip="package: github.com/creack/pty"; -fontsize="16"; -fillcolor="lightyellow"; -fontname="Tahoma bold"; -rank="sink"; -label="pty"; -penwidth="0.8"; -style="filled"; - - "github.com/creack/pty.Start" [ label="Start" penwidth="1.5" tooltip="github.com/creack/pty.Start | defined in run.go:16" fillcolor="moccasin" ] - "github.com/creack/pty.Setsize" [ fillcolor="moccasin" label="Setsize" penwidth="1.5" tooltip="github.com/creack/pty.Setsize | defined in util.go:27" ] - - } - - subgraph "cluster_github.com/pkg/errors" { - rank="sink"; -label="errors"; -tooltip="package: github.com/pkg/errors"; -penwidth="0.8"; -style="filled"; -fillcolor="lightyellow"; -fontname="Tahoma bold"; -fontsize="16"; -URL="/?f=github.com/pkg/errors"; - - - subgraph "cluster_*github.com/pkg/errors.fundamental" { penwidth="0.5"; fontsize="15"; fontcolor="#222222"; labelloc="b"; style="rounded,filled"; fillcolor="wheat2"; +label="(InternalError)"; +tooltip="type: compress/flate.InternalError"; + + "(compress/flate.InternalError).Error" [ penwidth="1.5" tooltip="(compress/flate.InternalError).Error | defined in inflate.go:42" fillcolor="moccasin" label="Error" ] + + } + + } + + subgraph "cluster_context" { + tooltip="package: context"; +fontsize="16"; +style="filled"; +fillcolor="lightyellow"; +label="context"; +URL="/?f=context"; +penwidth="0.8"; +fontname="Tahoma bold"; +rank="sink"; + + + subgraph "cluster_context.deadlineExceededError" { + penwidth="0.5"; +fontsize="15"; +fontcolor="#222222"; +labelloc="b"; +style="rounded,filled"; +fillcolor="wheat2"; +label="(deadlineExceededError)"; +tooltip="type: context.deadlineExceededError"; + + "(context.deadlineExceededError).Error" [ penwidth="1.5" tooltip="(context.deadlineExceededError).Error | defined in context.go:165" fillcolor="moccasin" label="Error" ] + + } + + } + + subgraph "cluster_github.com/creack/pty" { + penwidth="0.8"; +style="filled"; +URL="/?f=github.com/creack/pty"; +tooltip="package: github.com/creack/pty"; +fontsize="16"; +fillcolor="lightyellow"; +fontname="Tahoma bold"; +rank="sink"; +label="pty"; + + "github.com/creack/pty.Setsize" [ fillcolor="moccasin" label="Setsize" penwidth="1.5" tooltip="github.com/creack/pty.Setsize | defined in winsize_unix.go:21" ] + "github.com/creack/pty.Start" [ fillcolor="moccasin" label="Start" penwidth="1.5" tooltip="github.com/creack/pty.Start | defined in run.go:14" ] + + } + + subgraph "cluster_github.com/pkg/errors" { + penwidth="0.8"; +fontname="Tahoma bold"; +rank="sink"; +label="errors"; +tooltip="package: github.com/pkg/errors"; +fontsize="16"; +style="filled"; +fillcolor="lightyellow"; +URL="/?f=github.com/pkg/errors"; + + + subgraph "cluster_*github.com/pkg/errors.fundamental" { + fontcolor="#222222"; +labelloc="b"; +style="rounded,filled"; +fillcolor="wheat2"; label="(*fundamental)"; tooltip="type: *github.com/pkg/errors.fundamental"; +penwidth="0.5"; +fontsize="15"; "(*github.com/pkg/errors.fundamental).Error" [ label="Error" penwidth="1.5" tooltip="(*github.com/pkg/errors.fundamental).Error | defined in errors.go:125" fillcolor="moccasin" ] } + } + + subgraph "cluster_vendor/golang.org/x/net/idna" { + rank="sink"; +fillcolor="lightyellow"; +fontsize="16"; +style="filled"; +fontname="Tahoma bold"; +label="idna"; +URL="/?f=vendor/golang.org/x/net/idna"; +tooltip="package: vendor/golang.org/x/net/idna"; +penwidth="0.8"; + + + subgraph "cluster_vendor/golang.org/x/net/idna.labelError" { + label="(labelError)"; +tooltip="type: vendor/golang.org/x/net/idna.labelError"; +penwidth="0.5"; +fontsize="15"; +fontcolor="#222222"; +labelloc="b"; +style="rounded,filled"; +fillcolor="wheat2"; + + "(vendor/golang.org/x/net/idna.labelError).Error" [ label="Error" penwidth="1.5" tooltip="(vendor/golang.org/x/net/idna.labelError).Error | defined in idna10.0.0.go:324" fillcolor="moccasin" ] + + } + + subgraph "cluster_vendor/golang.org/x/net/idna.runeError" { + labelloc="b"; +style="rounded,filled"; +fillcolor="wheat2"; +label="(runeError)"; +tooltip="type: vendor/golang.org/x/net/idna.runeError"; +penwidth="0.5"; +fontsize="15"; +fontcolor="#222222"; + + "(vendor/golang.org/x/net/idna.runeError).Error" [ fillcolor="moccasin" label="Error" penwidth="1.5" tooltip="(vendor/golang.org/x/net/idna.runeError).Error | defined in idna10.0.0.go:331" ] + + } + } } - "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/xsd.runServerToClientCopyAs" [ tooltip="at xsd.go:828: calling [blitter.com/go/xs/xsd.runServerToClientCopyAs]" ] - "blitter.com/go/xs/xsd.main$2$1" -> "(*blitter.com/go/xs/xsnet.Conn).Close" [ color="saddlebrown" tooltip="at xsd.go:653: calling [(*blitter.com/go/xs/xsnet.Conn).Close]" ] - "blitter.com/go/xs/xsd.runShellAs$2" -> "blitter.com/go/goutmp.Unput_utmp" [ color="saddlebrown" tooltip="at xsd.go:336: calling [blitter.com/go/goutmp.Unput_utmp]" ] - "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetTermType" [ color="saddlebrown" tooltip="at xsd.go:701: calling [(*blitter.com/go/xs.Session).SetTermType]" ] - "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).Who" [ color="saddlebrown" tooltip="at xsd.go:720: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:724: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:729: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:731: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:743: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:754: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:755: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:757: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:762: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:764: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:771: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:772: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:777: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:779: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:786: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:788: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:793: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:795: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:803: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:804: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:809: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:811: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:827: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:828: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:830: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:833: calling [(blitter.com/go/xs.Session).Who]" ] - "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs.VerifyPass" [ color="saddlebrown" tooltip="at xsd.go:729: calling [blitter.com/go/xs.VerifyPass]" ] - "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.runShellAs$6" [ arrowhead="normalnoneodot" tooltip="at xsd.go:381: calling [blitter.com/go/xs/xsd.runShellAs$6]" ] - "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).ClearAuthCookie" [ color="saddlebrown" tooltip="at xsd.go:737: calling [(*blitter.com/go/xs.Session).ClearAuthCookie]" ] - "blitter.com/go/xs/xsd.main" -> "(*blitter.com/go/xs/xsnet.Conn).CAlg" [ color="saddlebrown" tooltip="at xsd.go:627: calling [(*blitter.com/go/xs/xsnet.Conn).CAlg]\nat xsd.go:628: calling [(*blitter.com/go/xs/xsnet.Conn).CAlg]" ] - "blitter.com/go/xs/xsd.runClientToServerCopyAs" -> "(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" tooltip="at xsd.go:122: calling [(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff]" ] - "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.runShellAs$2" [ arrowhead="normalnoneodiamond" tooltip="at xsd.go:336: calling [blitter.com/go/xs/xsd.runShellAs$2]" ] - "blitter.com/go/xs/xsd.main" -> "(*blitter.com/go/xs/xsnet.Conn).SetupChaff" [ color="saddlebrown" tooltip="at xsd.go:641: calling [(*blitter.com/go/xs/xsnet.Conn).SetupChaff]" ] - "blitter.com/go/xs/xsd.main" -> "blitter.com/go/xs/xsnet.Listen" [ color="saddlebrown" tooltip="at xsd.go:610: calling [blitter.com/go/xs/xsnet.Listen]" ] - "blitter.com/go/xs/xsd.main" -> "(*blitter.com/go/xs/xsnet.Conn).KEX" [ tooltip="at xsd.go:623: calling [(*blitter.com/go/xs/xsnet.Conn).KEX]\nat xsd.go:624: calling [(*blitter.com/go/xs/xsnet.Conn).KEX]" color="saddlebrown" ] - "blitter.com/go/xs/xsd.runShellAs$6" -> "(context.deadlineExceededError).Error" [ style="dashed" color="saddlebrown" tooltip="at xsd.go:385: calling [(context.deadlineExceededError).Error]" ] - "blitter.com/go/xs/xsd.runServerToClientCopyAs" -> "(*blitter.com/go/xs/xsnet.Conn).EnableChaff" [ color="saddlebrown" tooltip="at xsd.go:220: calling [(*blitter.com/go/xs/xsnet.Conn).EnableChaff]" ] - "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/logger.LogNotice" [ color="saddlebrown" tooltip="at xsd.go:743: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:754: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:771: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:779: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:786: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:795: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:803: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:811: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:827: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:833: calling [blitter.com/go/xs/logger.LogNotice]" ] - "blitter.com/go/xs/xsd.runShellAs" -> "github.com/creack/pty.Start" [ color="saddlebrown" tooltip="at xsd.go:318: calling [github.com/creack/pty.Start]" ] - "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/goutmp.Put_lastlog_entry" [ color="saddlebrown" tooltip="at xsd.go:337: calling [blitter.com/go/goutmp.Put_lastlog_entry]" ] - "blitter.com/go/xs/xsd.runShellAs$5" -> "(*blitter.com/go/xs/xsnet.Conn).DisableChaff" [ tooltip="at xsd.go:369: calling [(*blitter.com/go/xs/xsnet.Conn).DisableChaff]" color="saddlebrown" ] - "blitter.com/go/xs/xsd.main" -> "(blitter.com/go/xs/xsnet.HKExListener).Close" [ arrowhead="normalnoneodiamond" color="saddlebrown" tooltip="at xsd.go:614: calling [(blitter.com/go/xs/xsnet.HKExListener).Close]" ] - "blitter.com/go/xs/xsd.main" -> "(*blitter.com/go/xs/xsnet.HKExListener).Accept" [ color="saddlebrown" tooltip="at xsd.go:620: calling [(*blitter.com/go/xs/xsnet.HKExListener).Accept]" ] - "blitter.com/go/xs/xsd.main$1" -> "blitter.com/go/xs/logger.LogNotice" [ color="saddlebrown" tooltip="at xsd.go:591: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:595: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:599: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:601: calling [blitter.com/go/xs/logger.LogNotice]" ] - "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetAuthCookie" [ color="saddlebrown" tooltip="at xsd.go:717: calling [(*blitter.com/go/xs.Session).SetAuthCookie]" ] - "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).TermType" [ color="saddlebrown" tooltip="at xsd.go:757: calling [(blitter.com/go/xs.Session).TermType]\nat xsd.go:772: calling [(blitter.com/go/xs.Session).TermType]\nat xsd.go:788: calling [(blitter.com/go/xs.Session).TermType]\nat xsd.go:804: calling [(blitter.com/go/xs.Session).TermType]\nat xsd.go:828: calling [(blitter.com/go/xs.Session).TermType]" ] - "blitter.com/go/xs/xsd.runShellAs$3" -> "github.com/creack/pty.Setsize" [ color="saddlebrown" tooltip="at xsd.go:348: calling [github.com/creack/pty.Setsize]" ] - "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/logger.LogDebug" [ color="saddlebrown" tooltip="at xsd.go:409: calling [blitter.com/go/xs/logger.LogDebug]" ] - "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs/xsnet.Conn).SetStatus" [ color="saddlebrown" tooltip="at xsd.go:765: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:780: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:796: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:815: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:841: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]" ] - "blitter.com/go/xs/xsd.main" -> "(blitter.com/go/xs/xsd.allowedCipherAlgs).allowed" [ tooltip="at xsd.go:627: calling [(blitter.com/go/xs/xsd.allowedCipherAlgs).allowed]" ] - "blitter.com/go/xs/xsd.runShellAs$6" -> "(compress/flate.CorruptInputError).Error" [ style="dashed" color="saddlebrown" tooltip="at xsd.go:385: calling [(compress/flate.CorruptInputError).Error]" ] - "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetConnHost" [ color="saddlebrown" tooltip="at xsd.go:693: calling [(*blitter.com/go/xs.Session).SetConnHost]" ] - "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs.GetTool" [ color="saddlebrown" tooltip="at xsd.go:308: calling [blitter.com/go/xs.GetTool]\nat xsd.go:297: calling [blitter.com/go/xs.GetTool]\nat xsd.go:303: calling [blitter.com/go/xs.GetTool]" ] - "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/xsd.runClientToServerCopyAs" [ tooltip="at xsd.go:804: calling [blitter.com/go/xs/xsd.runClientToServerCopyAs]" ] - "blitter.com/go/xs/xsd.main" -> "(blitter.com/go/xs/xsd.allowedKEXAlgs).allowed" [ tooltip="at xsd.go:623: calling [(blitter.com/go/xs/xsd.allowedKEXAlgs).allowed]" ] - "blitter.com/go/xs/xsd.main" -> "(blitter.com/go/xs/xsd.allowedHMACAlgs).allowed" [ tooltip="at xsd.go:631: calling [(blitter.com/go/xs/xsd.allowedHMACAlgs).allowed]" ] "blitter.com/go/xs/xsd.runClientToServerCopyAs" -> "(*blitter.com/go/xs/xsnet.Conn).EnableChaff" [ color="saddlebrown" tooltip="at xsd.go:119: calling [(*blitter.com/go/xs/xsnet.Conn).EnableChaff]" ] - "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs/xsnet.Conn).RemoteAddr" [ tooltip="at xsd.go:752: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]\nat xsd.go:769: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]\nat xsd.go:784: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]\nat xsd.go:801: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]\nat xsd.go:825: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]" color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/logger.LogErr" [ color="saddlebrown" tooltip="at xsd.go:762: calling [blitter.com/go/xs/logger.LogErr]\nat xsd.go:777: calling [blitter.com/go/xs/logger.LogErr]\nat xsd.go:809: calling [blitter.com/go/xs/logger.LogErr]\nat xsd.go:846: calling [blitter.com/go/xs/logger.LogErr]\nat xsd.go:830: calling [blitter.com/go/xs/logger.LogErr]" ] - "(blitter.com/go/xs/xsd.allowedCipherAlgs).allowed" -> "(*blitter.com/go/xs/xsnet.CSCipherAlg).String" [ color="saddlebrown" tooltip="at xsd.go:466: calling [(*blitter.com/go/xs/xsnet.CSCipherAlg).String]" ] - "(blitter.com/go/xs/xsd.allowedHMACAlgs).allowed" -> "(*blitter.com/go/xs/xsnet.CSHmacAlg).String" [ color="saddlebrown" tooltip="at xsd.go:484: calling [(*blitter.com/go/xs/xsnet.CSHmacAlg).String]" ] - "blitter.com/go/xs/xsd.main" -> "(*blitter.com/go/xs/xsnet.Conn).Close" [ color="saddlebrown" tooltip="at xsd.go:626: calling [(*blitter.com/go/xs/xsnet.Conn).Close]\nat xsd.go:630: calling [(*blitter.com/go/xs/xsnet.Conn).Close]\nat xsd.go:634: calling [(*blitter.com/go/xs/xsnet.Conn).Close]" ] - "blitter.com/go/xs/xsd.runClientToServerCopyAs" -> "blitter.com/go/xs.GetTool" [ color="saddlebrown" tooltip="at xsd.go:88: calling [blitter.com/go/xs.GetTool]" ] - "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetCmd" [ color="saddlebrown" tooltip="at xsd.go:709: calling [(*blitter.com/go/xs.Session).SetCmd]" ] - "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).ConnHost" [ color="saddlebrown" tooltip="at xsd.go:720: calling [(blitter.com/go/xs.Session).ConnHost]\nat xsd.go:724: calling [(blitter.com/go/xs.Session).ConnHost]\nat xsd.go:755: calling [(blitter.com/go/xs.Session).ConnHost]" ] - "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.ptsName" [ tooltip="at xsd.go:331: calling [blitter.com/go/xs/xsd.ptsName]" ] - "blitter.com/go/xs/xsd.runShellAs$5" -> "(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff" [ color="saddlebrown" tooltip="at xsd.go:370: calling [(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff]" ] - "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ color="saddlebrown" tooltip="at xsd.go:821: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]" ] - "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/goutmp.Put_utmp" [ tooltip="at xsd.go:335: calling [blitter.com/go/goutmp.Put_utmp]" color="saddlebrown" ] - "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.runShellAs$5" [ arrowhead="normalnoneodiamond" tooltip="at xsd.go:368: calling [blitter.com/go/xs/xsd.runShellAs$5]" ] - "blitter.com/go/xs/xsd.runServerToClientCopyAs" -> "(*blitter.com/go/xs/xsnet.Conn).DisableChaff" [ tooltip="at xsd.go:223: calling [(*blitter.com/go/xs/xsnet.Conn).DisableChaff]" arrowhead="normalnoneodiamond" color="saddlebrown" ] - "blitter.com/go/xs/xsd.runServerToClientCopyAs" -> "(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff" [ color="saddlebrown" tooltip="at xsd.go:224: calling [(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff]" arrowhead="normalnoneodiamond" ] - "blitter.com/go/xs/xsd.runShellAs$4" -> "(*github.com/pkg/errors.fundamental).Error" [ tooltip="at xsd.go:358: calling [(*github.com/pkg/errors.fundamental).Error]" style="dashed" color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetWho" [ tooltip="at xsd.go:685: calling [(*blitter.com/go/xs.Session).SetWho]" color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/goutmp.GetHost" [ color="saddlebrown" tooltip="at xsd.go:753: calling [blitter.com/go/goutmp.GetHost]\nat xsd.go:770: calling [blitter.com/go/goutmp.GetHost]\nat xsd.go:785: calling [blitter.com/go/goutmp.GetHost]\nat xsd.go:802: calling [blitter.com/go/goutmp.GetHost]\nat xsd.go:826: calling [blitter.com/go/goutmp.GetHost]" ] - "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/xsd.GenAuthToken" [ tooltip="at xsd.go:755: calling [blitter.com/go/xs/xsd.GenAuthToken]" ] - "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/xsd.runShellAs" [ tooltip="at xsd.go:757: calling [blitter.com/go/xs/xsd.runShellAs]\nat xsd.go:772: calling [blitter.com/go/xs/xsd.runShellAs]\nat xsd.go:788: calling [blitter.com/go/xs/xsd.runShellAs]" ] - "blitter.com/go/xs/xsd.main" -> "blitter.com/go/xs/logger.LogNotice" [ color="saddlebrown" tooltip="at xsd.go:571: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:576: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:581: calling [blitter.com/go/xs/logger.LogNotice]" ] - "blitter.com/go/xs/xsd.main" -> "blitter.com/go/xs/xsd.main$1" [ arrowhead="normalnoneodot" tooltip="at xsd.go:586: calling [blitter.com/go/xs/xsd.main$1]" ] - "blitter.com/go/xs/xsd.main" -> "(*blitter.com/go/xs/xsnet.Conn).SetStatus" [ color="saddlebrown" tooltip="at xsd.go:625: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:629: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:633: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]" ] - "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs/xsnet.Conn).Close" [ color="saddlebrown" tooltip="at xsd.go:647: calling [(*blitter.com/go/xs/xsnet.Conn).Close]" arrowhead="normalnoneodiamond" ] - "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetOp" [ color="saddlebrown" tooltip="at xsd.go:677: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:760: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:775: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:791: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:807: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:840: calling [(*blitter.com/go/xs.Session).SetOp]" ] - "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).AuthCookie" [ tooltip="at xsd.go:724: calling [(blitter.com/go/xs.Session).AuthCookie]\nat xsd.go:729: calling [(blitter.com/go/xs.Session).AuthCookie]\nat xsd.go:731: calling [(blitter.com/go/xs.Session).AuthCookie]" color="saddlebrown" ] - "blitter.com/go/xs/xsd.main" -> "blitter.com/go/xs/logger.New" [ tooltip="at xsd.go:559: calling [blitter.com/go/xs/logger.New]" color="saddlebrown" ] - "blitter.com/go/xs/xsd.runClientToServerCopyAs" -> "(*blitter.com/go/xs/xsnet.Conn).DisableChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" tooltip="at xsd.go:121: calling [(*blitter.com/go/xs/xsnet.Conn).DisableChaff]" ] - "blitter.com/go/xs/xsd.runShellAs" -> "(*blitter.com/go/xs/xsnet.Conn).EnableChaff" [ color="saddlebrown" tooltip="at xsd.go:365: calling [(*blitter.com/go/xs/xsnet.Conn).EnableChaff]" ] - "blitter.com/go/xs/xsd.runShellAs" -> "(*blitter.com/go/xs/xsnet.Conn).SetStatus" [ color="saddlebrown" tooltip="at xsd.go:407: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]" ] - "blitter.com/go/xs/xsd.main$2$1" -> "(blitter.com/go/xs/xsnet.Conn).Write" [ color="saddlebrown" tooltip="at xsd.go:652: calling [(blitter.com/go/xs/xsnet.Conn).Write]" ] - "blitter.com/go/xs/xsd.runShellAs$6" -> "(compress/flate.InternalError).Error" [ tooltip="at xsd.go:385: calling [(compress/flate.InternalError).Error]" style="dashed" color="saddlebrown" ] - "blitter.com/go/xs/xsd.runShellAs$4" -> "(context.deadlineExceededError).Error" [ style="dashed" color="saddlebrown" tooltip="at xsd.go:358: calling [(context.deadlineExceededError).Error]" ] - "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs.NewAuthCtx" [ tooltip="at xsd.go:724: calling [blitter.com/go/xs.NewAuthCtx]\nat xsd.go:729: calling [blitter.com/go/xs.NewAuthCtx]\nat xsd.go:731: calling [blitter.com/go/xs.NewAuthCtx]" color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs.AuthUserByPasswd" [ color="saddlebrown" tooltip="at xsd.go:731: calling [blitter.com/go/xs.AuthUserByPasswd]" ] - "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.runShellAs$3" [ arrowhead="normalnoneodot" tooltip="at xsd.go:345: calling [blitter.com/go/xs/xsd.runShellAs$3]" ] - "blitter.com/go/xs/xsd.main" -> "(*blitter.com/go/xs/xsnet.Conn).HAlg" [ color="saddlebrown" tooltip="at xsd.go:631: calling [(*blitter.com/go/xs/xsnet.Conn).HAlg]\nat xsd.go:632: calling [(*blitter.com/go/xs/xsnet.Conn).HAlg]" ] - "blitter.com/go/xs/xsd.runShellAs$6" -> "(*github.com/pkg/errors.fundamental).Error" [ style="dashed" color="saddlebrown" tooltip="at xsd.go:385: calling [(*github.com/pkg/errors.fundamental).Error]" ] - "(blitter.com/go/xs/xsd.allowedKEXAlgs).allowed" -> "(*blitter.com/go/xs/xsnet.KEXAlg).String" [ tooltip="at xsd.go:448: calling [(*blitter.com/go/xs/xsnet.KEXAlg).String]" color="saddlebrown" ] - "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs/xsnet.Conn).Write" [ color="saddlebrown" tooltip="at xsd.go:741: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xsd.go:744: calling [(blitter.com/go/xs/xsnet.Conn).Write]" ] - "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.runShellAs$1" [ arrowhead="normalnoneodiamond" tooltip="at xsd.go:325: calling [blitter.com/go/xs/xsd.runShellAs$1]" ] + "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/xsd.runServerToClientCopyAs" [ tooltip="at xsd.go:853: calling [blitter.com/go/xs/xsd.runServerToClientCopyAs]" ] + "blitter.com/go/xs/xsd.main$2$1" -> "(blitter.com/go/xs/xsnet.Conn).Write" [ color="saddlebrown" tooltip="at xsd.go:677: calling [(blitter.com/go/xs/xsnet.Conn).Write]" ] + "blitter.com/go/xs/xsd.main" -> "blitter.com/go/xs/logger.New" [ color="saddlebrown" tooltip="at xsd.go:583: calling [blitter.com/go/xs/logger.New]" ] + "blitter.com/go/xs/xsd.main" -> "(*blitter.com/go/xs/xsnet.Conn).SetStatus" [ color="saddlebrown" tooltip="at xsd.go:650: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:654: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:658: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]" ] + "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs/xsnet.Conn).Close" [ arrowhead="normalnoneodiamond" color="saddlebrown" tooltip="at xsd.go:672: calling [(*blitter.com/go/xs/xsnet.Conn).Close]" ] + "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetWho" [ color="saddlebrown" tooltip="at xsd.go:710: calling [(*blitter.com/go/xs.Session).SetWho]" ] + "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs/xsnet.Conn).SetStatus" [ color="saddlebrown" tooltip="at xsd.go:790: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:805: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:821: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:840: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]\nat xsd.go:866: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]" ] + "blitter.com/go/xs/xsd.runClientToServerCopyAs" -> "(*blitter.com/go/xs/xsnet.Conn).DisableChaff" [ tooltip="at xsd.go:121: calling [(*blitter.com/go/xs/xsnet.Conn).DisableChaff]" arrowhead="normalnoneodiamond" color="saddlebrown" ] + "(blitter.com/go/xs/xsd.allowedKEXAlgs).allowed" -> "(*blitter.com/go/xs/xsnet.KEXAlg).String" [ color="saddlebrown" tooltip="at xsd.go:448: calling [(*blitter.com/go/xs/xsnet.KEXAlg).String]" ] + "blitter.com/go/xs/xsd.runShellAs$3" -> "github.com/creack/pty.Setsize" [ color="saddlebrown" tooltip="at xsd.go:348: calling [github.com/creack/pty.Setsize]" ] + "blitter.com/go/xs/xsd.main" -> "(blitter.com/go/xs/xsd.allowedKEXAlgs).allowed" [ tooltip="at xsd.go:648: calling [(blitter.com/go/xs/xsd.allowedKEXAlgs).allowed]" ] + "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetTermType" [ tooltip="at xsd.go:726: calling [(*blitter.com/go/xs.Session).SetTermType]" color="saddlebrown" ] + "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs/xsnet.Conn).Write" [ color="saddlebrown" tooltip="at xsd.go:766: calling [(blitter.com/go/xs/xsnet.Conn).Write]\nat xsd.go:769: calling [(blitter.com/go/xs/xsnet.Conn).Write]" ] + "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).TermType" [ color="saddlebrown" tooltip="at xsd.go:782: calling [(blitter.com/go/xs.Session).TermType]\nat xsd.go:797: calling [(blitter.com/go/xs.Session).TermType]\nat xsd.go:813: calling [(blitter.com/go/xs.Session).TermType]\nat xsd.go:829: calling [(blitter.com/go/xs.Session).TermType]\nat xsd.go:853: calling [(blitter.com/go/xs.Session).TermType]" ] + "blitter.com/go/xs/xsd.runServerToClientCopyAs" -> "(*blitter.com/go/xs/xsnet.Conn).EnableChaff" [ color="saddlebrown" tooltip="at xsd.go:220: calling [(*blitter.com/go/xs/xsnet.Conn).EnableChaff]" ] + "blitter.com/go/xs/xsd.main" -> "blitter.com/go/xs/xsd.main$2" [ arrowhead="normalnoneodot" tooltip="at xsd.go:671: calling [blitter.com/go/xs/xsd.main$2]" ] + "blitter.com/go/xs/xsd.main" -> "(*blitter.com/go/xs/xsnet.HKExListener).Accept" [ color="saddlebrown" tooltip="at xsd.go:644: calling [(*blitter.com/go/xs/xsnet.HKExListener).Accept]" ] + "blitter.com/go/xs/xsd.main" -> "(*blitter.com/go/xs/xsnet.Conn).KEX" [ color="saddlebrown" tooltip="at xsd.go:648: calling [(*blitter.com/go/xs/xsnet.Conn).KEX]\nat xsd.go:649: calling [(*blitter.com/go/xs/xsnet.Conn).KEX]" ] "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.runShellAs$4" [ arrowhead="normalnoneodot" tooltip="at xsd.go:355: calling [blitter.com/go/xs/xsd.runShellAs$4]" ] - "blitter.com/go/xs/xsd.main$2$1" -> "blitter.com/go/xs/logger.LogNotice" [ color="saddlebrown" tooltip="at xsd.go:651: calling [blitter.com/go/xs/logger.LogNotice]" ] + "blitter.com/go/xs/xsd.main$2$1" -> "blitter.com/go/xs/logger.LogNotice" [ color="saddlebrown" tooltip="at xsd.go:676: calling [blitter.com/go/xs/logger.LogNotice]" ] + "blitter.com/go/xs/xsd.main$2$1" -> "(*blitter.com/go/xs/xsnet.Conn).Close" [ color="saddlebrown" tooltip="at xsd.go:678: calling [(*blitter.com/go/xs/xsnet.Conn).Close]" ] + "blitter.com/go/xs/xsd.main" -> "(*blitter.com/go/xs/xsnet.Conn).HAlg" [ color="saddlebrown" tooltip="at xsd.go:656: calling [(*blitter.com/go/xs/xsnet.Conn).HAlg]\nat xsd.go:657: calling [(*blitter.com/go/xs/xsnet.Conn).HAlg]" ] + "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetCmd" [ color="saddlebrown" tooltip="at xsd.go:734: calling [(*blitter.com/go/xs.Session).SetCmd]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.runShellAs$6" [ arrowhead="normalnoneodot" tooltip="at xsd.go:381: calling [blitter.com/go/xs/xsd.runShellAs$6]" ] + "blitter.com/go/xs/xsd.runServerToClientCopyAs" -> "(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" tooltip="at xsd.go:224: calling [(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff]" ] + "blitter.com/go/xs/xsd.main" -> "blitter.com/go/xs/logger.LogNotice" [ color="saddlebrown" tooltip="at xsd.go:595: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:600: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:605: calling [blitter.com/go/xs/logger.LogNotice]" ] + "blitter.com/go/xs/xsd.main" -> "(*blitter.com/go/xs/xsnet.Conn).Close" [ color="saddlebrown" tooltip="at xsd.go:651: calling [(*blitter.com/go/xs/xsnet.Conn).Close]\nat xsd.go:655: calling [(*blitter.com/go/xs/xsnet.Conn).Close]\nat xsd.go:659: calling [(*blitter.com/go/xs/xsnet.Conn).Close]" ] + "blitter.com/go/xs/xsd.runShellAs$6" -> "(vendor/golang.org/x/net/idna.labelError).Error" [ style="dashed" color="saddlebrown" tooltip="at xsd.go:385: calling [(vendor/golang.org/x/net/idna.labelError).Error]" ] + "blitter.com/go/xs/xsd.main" -> "(blitter.com/go/xs/xsd.allowedCipherAlgs).allowed" [ tooltip="at xsd.go:652: calling [(blitter.com/go/xs/xsd.allowedCipherAlgs).allowed]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs.GetTool" [ color="saddlebrown" tooltip="at xsd.go:308: calling [blitter.com/go/xs.GetTool]\nat xsd.go:297: calling [blitter.com/go/xs.GetTool]\nat xsd.go:303: calling [blitter.com/go/xs.GetTool]" ] + "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs.VerifyPass" [ color="saddlebrown" tooltip="at xsd.go:754: calling [blitter.com/go/xs.VerifyPass]" ] + "blitter.com/go/xs/xsd.runShellAs$4" -> "(context.deadlineExceededError).Error" [ style="dashed" color="saddlebrown" tooltip="at xsd.go:358: calling [(context.deadlineExceededError).Error]" ] + "blitter.com/go/xs/xsd.runShellAs$6" -> "(*github.com/pkg/errors.fundamental).Error" [ style="dashed" color="saddlebrown" tooltip="at xsd.go:385: calling [(*github.com/pkg/errors.fundamental).Error]" ] "blitter.com/go/xs/xsd.runServerToClientCopyAs" -> "blitter.com/go/xs.GetTool" [ color="saddlebrown" tooltip="at xsd.go:193: calling [blitter.com/go/xs.GetTool]" ] - "blitter.com/go/xs/xsd.runShellAs$4" -> "(compress/flate.CorruptInputError).Error" [ style="dashed" color="saddlebrown" tooltip="at xsd.go:358: calling [(compress/flate.CorruptInputError).Error]" ] + "blitter.com/go/xs/xsd.runShellAs$2" -> "blitter.com/go/goutmp.Unput_utmp" [ color="saddlebrown" tooltip="at xsd.go:336: calling [blitter.com/go/goutmp.Unput_utmp]" ] + "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).ClearAuthCookie" [ color="saddlebrown" tooltip="at xsd.go:762: calling [(*blitter.com/go/xs.Session).ClearAuthCookie]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.ptsName" [ tooltip="at xsd.go:331: calling [blitter.com/go/xs/xsd.ptsName]" ] + "blitter.com/go/xs/xsd.runShellAs$4" -> "(vendor/golang.org/x/net/idna.runeError).Error" [ style="dashed" color="saddlebrown" tooltip="at xsd.go:358: calling [(vendor/golang.org/x/net/idna.runeError).Error]" ] + "blitter.com/go/xs/xsd.runClientToServerCopyAs" -> "(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff" [ tooltip="at xsd.go:122: calling [(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff]" arrowhead="normalnoneodiamond" color="saddlebrown" ] + "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetConnHost" [ color="saddlebrown" tooltip="at xsd.go:718: calling [(*blitter.com/go/xs.Session).SetConnHost]" ] + "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).Cmd" [ color="saddlebrown" tooltip="at xsd.go:745: calling [(blitter.com/go/xs.Session).Cmd]\nat xsd.go:797: calling [(blitter.com/go/xs.Session).Cmd]\nat xsd.go:813: calling [(blitter.com/go/xs.Session).Cmd]\nat xsd.go:829: calling [(blitter.com/go/xs.Session).Cmd]\nat xsd.go:853: calling [(blitter.com/go/xs.Session).Cmd]" ] "blitter.com/go/xs/xsd.runShellAs$4" -> "(compress/flate.InternalError).Error" [ style="dashed" color="saddlebrown" tooltip="at xsd.go:358: calling [(compress/flate.InternalError).Error]" ] - "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).Op" [ color="saddlebrown" tooltip="at xsd.go:720: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:750: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:767: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:782: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:798: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:822: calling [(blitter.com/go/xs.Session).Op]" ] - "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).Cmd" [ color="saddlebrown" tooltip="at xsd.go:720: calling [(blitter.com/go/xs.Session).Cmd]\nat xsd.go:772: calling [(blitter.com/go/xs.Session).Cmd]\nat xsd.go:788: calling [(blitter.com/go/xs.Session).Cmd]\nat xsd.go:804: calling [(blitter.com/go/xs.Session).Cmd]\nat xsd.go:828: calling [(blitter.com/go/xs.Session).Cmd]" ] - "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs.AuthUserByToken" [ tooltip="at xsd.go:724: calling [blitter.com/go/xs.AuthUserByToken]" color="saddlebrown" ] + "blitter.com/go/xs/xsd.runShellAs" -> "(*blitter.com/go/xs/xsnet.Conn).EnableChaff" [ color="saddlebrown" tooltip="at xsd.go:365: calling [(*blitter.com/go/xs/xsnet.Conn).EnableChaff]" ] + "blitter.com/go/xs/xsd.runShellAs$5" -> "(*blitter.com/go/xs/xsnet.Conn).DisableChaff" [ tooltip="at xsd.go:369: calling [(*blitter.com/go/xs/xsnet.Conn).DisableChaff]" color="saddlebrown" ] + "blitter.com/go/xs/xsd.runShellAs$6" -> "(compress/flate.CorruptInputError).Error" [ style="dashed" color="saddlebrown" tooltip="at xsd.go:385: calling [(compress/flate.CorruptInputError).Error]" ] + "blitter.com/go/xs/xsd.runShellAs$6" -> "(vendor/golang.org/x/net/idna.runeError).Error" [ color="saddlebrown" tooltip="at xsd.go:385: calling [(vendor/golang.org/x/net/idna.runeError).Error]" style="dashed" ] + "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/xsd.runClientToServerCopyAs" [ tooltip="at xsd.go:829: calling [blitter.com/go/xs/xsd.runClientToServerCopyAs]" ] + "blitter.com/go/xs/xsd.main" -> "(blitter.com/go/xs/xsnet.HKExListener).Close" [ arrowhead="normalnoneodiamond" color="saddlebrown" tooltip="at xsd.go:638: calling [(blitter.com/go/xs/xsnet.HKExListener).Close]" ] + "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).AuthCookie" [ color="saddlebrown" tooltip="at xsd.go:749: calling [(blitter.com/go/xs.Session).AuthCookie]\nat xsd.go:754: calling [(blitter.com/go/xs.Session).AuthCookie]\nat xsd.go:756: calling [(blitter.com/go/xs.Session).AuthCookie]" ] + "blitter.com/go/xs/xsd.runServerToClientCopyAs" -> "(*blitter.com/go/xs/xsnet.Conn).DisableChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" tooltip="at xsd.go:223: calling [(*blitter.com/go/xs/xsnet.Conn).DisableChaff]" ] + "blitter.com/go/xs/xsd.runShellAs$6" -> "(context.deadlineExceededError).Error" [ style="dashed" color="saddlebrown" tooltip="at xsd.go:385: calling [(context.deadlineExceededError).Error]" ] + "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).Who" [ tooltip="at xsd.go:745: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:749: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:754: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:756: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:768: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:779: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:780: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:782: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:787: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:789: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:796: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:797: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:802: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:804: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:811: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:813: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:818: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:820: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:828: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:829: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:834: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:836: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:852: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:853: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:855: calling [(blitter.com/go/xs.Session).Who]\nat xsd.go:858: calling [(blitter.com/go/xs.Session).Who]" color="saddlebrown" ] + "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs.NewAuthCtx" [ color="saddlebrown" tooltip="at xsd.go:749: calling [blitter.com/go/xs.NewAuthCtx]\nat xsd.go:754: calling [blitter.com/go/xs.NewAuthCtx]\nat xsd.go:756: calling [blitter.com/go/xs.NewAuthCtx]" ] + "blitter.com/go/xs/xsd.main" -> "(*blitter.com/go/xs/xsnet.Conn).SetupChaff" [ color="saddlebrown" tooltip="at xsd.go:666: calling [(*blitter.com/go/xs/xsnet.Conn).SetupChaff]" ] + "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/goutmp.GetHost" [ color="saddlebrown" tooltip="at xsd.go:778: calling [blitter.com/go/goutmp.GetHost]\nat xsd.go:795: calling [blitter.com/go/goutmp.GetHost]\nat xsd.go:810: calling [blitter.com/go/goutmp.GetHost]\nat xsd.go:827: calling [blitter.com/go/goutmp.GetHost]\nat xsd.go:851: calling [blitter.com/go/goutmp.GetHost]" ] + "blitter.com/go/xs/xsd.runShellAs$6" -> "(compress/flate.InternalError).Error" [ style="dashed" color="saddlebrown" tooltip="at xsd.go:385: calling [(compress/flate.InternalError).Error]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "(*blitter.com/go/xs/xsnet.Conn).SetStatus" [ color="saddlebrown" tooltip="at xsd.go:407: calling [(*blitter.com/go/xs/xsnet.Conn).SetStatus]" ] + "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/xsd.runShellAs" [ tooltip="at xsd.go:782: calling [blitter.com/go/xs/xsd.runShellAs]\nat xsd.go:797: calling [blitter.com/go/xs/xsd.runShellAs]\nat xsd.go:813: calling [blitter.com/go/xs/xsd.runShellAs]" ] + "blitter.com/go/xs/xsd.main" -> "blitter.com/go/xs/xsd.main$1" [ tooltip="at xsd.go:610: calling [blitter.com/go/xs/xsd.main$1]" arrowhead="normalnoneodot" ] + "blitter.com/go/xs/xsd.main" -> "(blitter.com/go/xs/xsd.allowedHMACAlgs).allowed" [ tooltip="at xsd.go:656: calling [(blitter.com/go/xs/xsd.allowedHMACAlgs).allowed]" ] + "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/logger.LogNotice" [ color="saddlebrown" tooltip="at xsd.go:768: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:779: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:796: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:804: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:811: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:820: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:828: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:836: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:852: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:858: calling [blitter.com/go/xs/logger.LogNotice]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "github.com/creack/pty.Start" [ color="saddlebrown" tooltip="at xsd.go:318: calling [github.com/creack/pty.Start]" ] "blitter.com/go/xs/xsd.ptsName" -> "blitter.com/go/xs/xsd.ioctl" [ tooltip="at xsd.go:59: calling [blitter.com/go/xs/xsd.ioctl]" ] - "blitter.com/go/xs/xsd.main" -> "blitter.com/go/xs/xsnet.Init" [ color="saddlebrown" tooltip="at xsd.go:560: calling [blitter.com/go/xs/xsnet.Init]" ] - "blitter.com/go/xs/xsd.main" -> "blitter.com/go/xs/xsd.main$2" [ arrowhead="normalnoneodot" tooltip="at xsd.go:646: calling [blitter.com/go/xs/xsd.main$2]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/goutmp.Put_utmp" [ color="saddlebrown" tooltip="at xsd.go:335: calling [blitter.com/go/goutmp.Put_utmp]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.runShellAs$5" [ arrowhead="normalnoneodiamond" tooltip="at xsd.go:368: calling [blitter.com/go/xs/xsd.runShellAs$5]" ] + "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/logger.LogErr" [ color="saddlebrown" tooltip="at xsd.go:787: calling [blitter.com/go/xs/logger.LogErr]\nat xsd.go:802: calling [blitter.com/go/xs/logger.LogErr]\nat xsd.go:834: calling [blitter.com/go/xs/logger.LogErr]\nat xsd.go:871: calling [blitter.com/go/xs/logger.LogErr]\nat xsd.go:855: calling [blitter.com/go/xs/logger.LogErr]" ] + "blitter.com/go/xs/xsd.main" -> "(*blitter.com/go/xs/xsnet.Conn).CAlg" [ color="saddlebrown" tooltip="at xsd.go:652: calling [(*blitter.com/go/xs/xsnet.Conn).CAlg]\nat xsd.go:653: calling [(*blitter.com/go/xs/xsnet.Conn).CAlg]" ] + "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs.AuthUserByPasswd" [ color="saddlebrown" tooltip="at xsd.go:756: calling [blitter.com/go/xs.AuthUserByPasswd]" ] + "blitter.com/go/xs/xsd.runClientToServerCopyAs" -> "blitter.com/go/xs.GetTool" [ color="saddlebrown" tooltip="at xsd.go:88: calling [blitter.com/go/xs.GetTool]" ] + "blitter.com/go/xs/xsd.runShellAs$4" -> "(compress/flate.CorruptInputError).Error" [ style="dashed" color="saddlebrown" tooltip="at xsd.go:358: calling [(compress/flate.CorruptInputError).Error]" ] + "blitter.com/go/xs/xsd.runShellAs$4" -> "(vendor/golang.org/x/net/idna.labelError).Error" [ style="dashed" color="saddlebrown" tooltip="at xsd.go:358: calling [(vendor/golang.org/x/net/idna.labelError).Error]" ] + "blitter.com/go/xs/xsd.runShellAs$5" -> "(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff" [ color="saddlebrown" tooltip="at xsd.go:370: calling [(*blitter.com/go/xs/xsnet.Conn).ShutdownChaff]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/logger.LogDebug" [ tooltip="at xsd.go:409: calling [blitter.com/go/xs/logger.LogDebug]" color="saddlebrown" ] + "(blitter.com/go/xs/xsd.allowedCipherAlgs).allowed" -> "(*blitter.com/go/xs/xsnet.CSCipherAlg).String" [ color="saddlebrown" tooltip="at xsd.go:466: calling [(*blitter.com/go/xs/xsnet.CSCipherAlg).String]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.runShellAs$1" [ arrowhead="normalnoneodiamond" tooltip="at xsd.go:325: calling [blitter.com/go/xs/xsd.runShellAs$1]" ] + "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetAuthCookie" [ color="saddlebrown" tooltip="at xsd.go:742: calling [(*blitter.com/go/xs.Session).SetAuthCookie]" ] + "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).ConnHost" [ color="saddlebrown" tooltip="at xsd.go:745: calling [(blitter.com/go/xs.Session).ConnHost]\nat xsd.go:749: calling [(blitter.com/go/xs.Session).ConnHost]\nat xsd.go:780: calling [(blitter.com/go/xs.Session).ConnHost]" ] + "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs/xsd.GenAuthToken" [ tooltip="at xsd.go:780: calling [blitter.com/go/xs/xsd.GenAuthToken]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.runShellAs$2" [ tooltip="at xsd.go:336: calling [blitter.com/go/xs/xsd.runShellAs$2]" arrowhead="normalnoneodiamond" ] + "blitter.com/go/xs/xsd.main" -> "blitter.com/go/xs/xsnet.Init" [ color="saddlebrown" tooltip="at xsd.go:584: calling [blitter.com/go/xs/xsnet.Init]" ] + "blitter.com/go/xs/xsd.main" -> "blitter.com/go/xs/xsnet.Listen" [ color="saddlebrown" tooltip="at xsd.go:634: calling [blitter.com/go/xs/xsnet.Listen]" ] + "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs/xsnet.Conn).RemoteAddr" [ color="saddlebrown" tooltip="at xsd.go:777: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]\nat xsd.go:794: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]\nat xsd.go:809: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]\nat xsd.go:826: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]\nat xsd.go:850: calling [(*blitter.com/go/xs/xsnet.Conn).RemoteAddr]" ] + "blitter.com/go/xs/xsd.runShellAs$4" -> "(*github.com/pkg/errors.fundamental).Error" [ style="dashed" color="saddlebrown" tooltip="at xsd.go:358: calling [(*github.com/pkg/errors.fundamental).Error]" ] + "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs/xsnet.Conn).WritePacket" [ color="saddlebrown" tooltip="at xsd.go:846: calling [(*blitter.com/go/xs/xsnet.Conn).WritePacket]" ] + "(blitter.com/go/xs/xsd.allowedHMACAlgs).allowed" -> "(*blitter.com/go/xs/xsnet.CSHmacAlg).String" [ color="saddlebrown" tooltip="at xsd.go:484: calling [(*blitter.com/go/xs/xsnet.CSHmacAlg).String]" ] + "blitter.com/go/xs/xsd.main$2" -> "blitter.com/go/xs.AuthUserByToken" [ color="saddlebrown" tooltip="at xsd.go:749: calling [blitter.com/go/xs.AuthUserByToken]" ] + "blitter.com/go/xs/xsd.main$2" -> "(blitter.com/go/xs.Session).Op" [ color="saddlebrown" tooltip="at xsd.go:745: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:775: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:792: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:807: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:823: calling [(blitter.com/go/xs.Session).Op]\nat xsd.go:847: calling [(blitter.com/go/xs.Session).Op]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/goutmp.Put_lastlog_entry" [ color="saddlebrown" tooltip="at xsd.go:337: calling [blitter.com/go/goutmp.Put_lastlog_entry]" ] + "blitter.com/go/xs/xsd.runShellAs" -> "blitter.com/go/xs/xsd.runShellAs$3" [ arrowhead="normalnoneodot" tooltip="at xsd.go:345: calling [blitter.com/go/xs/xsd.runShellAs$3]" ] + "blitter.com/go/xs/xsd.main$1" -> "blitter.com/go/xs/logger.LogNotice" [ color="saddlebrown" tooltip="at xsd.go:615: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:619: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:623: calling [blitter.com/go/xs/logger.LogNotice]\nat xsd.go:625: calling [blitter.com/go/xs/logger.LogNotice]" ] + "blitter.com/go/xs/xsd.main$2" -> "(*blitter.com/go/xs.Session).SetOp" [ color="saddlebrown" tooltip="at xsd.go:702: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:785: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:800: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:816: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:832: calling [(*blitter.com/go/xs.Session).SetOp]\nat xsd.go:865: calling [(*blitter.com/go/xs.Session).SetOp]" ] } From 653e7324455feb0665f186740d24a693bcbe08a0 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Mon, 12 Sep 2022 20:08:25 -0700 Subject: [PATCH 47/94] Update go mod deps --- Makefile | 2 +- go.mod | 15 +- go.sum | 34 +- vendor/blitter.com/go/hopscotch/hopscotch.go | 34 +- .../github.com/klauspost/cpuid/v2/.travis.yml | 67 - .../github.com/klauspost/cpuid/v2/README.md | 125 +- vendor/github.com/klauspost/cpuid/v2/cpuid.go | 360 +- .../klauspost/cpuid/v2/detect_arm64.go | 3 +- .../klauspost/cpuid/v2/detect_ref.go | 3 +- .../klauspost/cpuid/v2/detect_x86.go | 7 +- .../klauspost/cpuid/v2/featureid_string.go | 248 +- .../klauspost/cpuid/v2/os_darwin_arm64.go | 112 +- .../klauspost/cpuid/v2/os_other_arm64.go | 5 +- .../klauspost/cpuid/v2/os_safe_linux_arm64.go | 3 +- .../cpuid/v2/os_unsafe_linux_arm64.go | 3 +- .../klauspost/reedsolomon/.travis.yml | 65 - .../klauspost/reedsolomon/README.md | 159 +- .../klauspost/reedsolomon/appveyor.yml | 20 - .../klauspost/reedsolomon/galois.go | 23 + .../reedsolomon/galoisAvx512_amd64.go | 6 +- .../klauspost/reedsolomon/galois_amd64.go | 206 + .../klauspost/reedsolomon/galois_arm64.go | 30 + .../klauspost/reedsolomon/galois_gen_amd64.go | 377 +- .../klauspost/reedsolomon/galois_gen_amd64.s | 24801 +++++++--------- .../klauspost/reedsolomon/galois_noasm.go | 49 +- .../klauspost/reedsolomon/galois_ppc64le.go | 28 + .../klauspost/reedsolomon/options.go | 58 +- .../klauspost/reedsolomon/reedsolomon.go | 338 +- .../klauspost/reedsolomon/streaming.go | 30 +- vendor/golang.org/x/crypto/AUTHORS | 3 - vendor/golang.org/x/crypto/CONTRIBUTORS | 3 - vendor/golang.org/x/crypto/argon2/argon2.go | 10 +- .../x/crypto/internal/subtle/aliasing.go | 33 - .../crypto/internal/subtle/aliasing_purego.go | 36 - vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go | 2 +- vendor/golang.org/x/crypto/salsa20/salsa20.go | 4 +- vendor/golang.org/x/crypto/scrypt/scrypt.go | 2 +- vendor/golang.org/x/crypto/sha3/doc.go | 12 +- vendor/golang.org/x/crypto/sha3/sha3_s390x.go | 2 + vendor/golang.org/x/sys/AUTHORS | 3 - vendor/golang.org/x/sys/CONTRIBUTORS | 3 - vendor/golang.org/x/sys/cpu/byteorder.go | 1 + vendor/golang.org/x/sys/cpu/cpu.go | 4 +- vendor/golang.org/x/sys/cpu/cpu_arm64.go | 12 +- vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c | 29 +- .../golang.org/x/sys/cpu/cpu_other_arm64.go | 4 +- vendor/golang.org/x/sys/unix/endian_little.go | 4 +- .../x/sys/unix/errors_freebsd_386.go | 233 - .../x/sys/unix/errors_freebsd_amd64.go | 233 - .../x/sys/unix/errors_freebsd_arm.go | 226 - .../x/sys/unix/errors_freebsd_arm64.go | 17 - vendor/golang.org/x/sys/unix/ifreq_linux.go | 9 +- vendor/golang.org/x/sys/unix/ioctl_linux.go | 20 +- vendor/golang.org/x/sys/unix/mkall.sh | 35 +- vendor/golang.org/x/sys/unix/mkerrors.sh | 10 +- vendor/golang.org/x/sys/unix/str.go | 27 - vendor/golang.org/x/sys/unix/syscall.go | 9 +- vendor/golang.org/x/sys/unix/syscall_aix.go | 67 +- vendor/golang.org/x/sys/unix/syscall_bsd.go | 46 +- .../x/sys/unix/syscall_darwin.1_13.go | 12 +- .../golang.org/x/sys/unix/syscall_darwin.go | 9 +- .../x/sys/unix/syscall_dragonfly.go | 2 + .../golang.org/x/sys/unix/syscall_freebsd.go | 325 +- .../x/sys/unix/syscall_freebsd_386.go | 6 +- .../x/sys/unix/syscall_freebsd_amd64.go | 6 +- .../x/sys/unix/syscall_freebsd_arm.go | 4 +- .../x/sys/unix/syscall_freebsd_arm64.go | 4 +- .../golang.org/x/sys/unix/syscall_illumos.go | 5 +- vendor/golang.org/x/sys/unix/syscall_linux.go | 192 +- .../x/sys/unix/syscall_linux_386.go | 4 - .../x/sys/unix/syscall_linux_amd64.go | 4 - .../x/sys/unix/syscall_linux_arm.go | 4 - .../x/sys/unix/syscall_linux_arm64.go | 4 - .../x/sys/unix/syscall_linux_mips64x.go | 4 - .../x/sys/unix/syscall_linux_mipsx.go | 4 - .../x/sys/unix/syscall_linux_ppc.go | 4 - .../x/sys/unix/syscall_linux_ppc64x.go | 4 - .../x/sys/unix/syscall_linux_riscv64.go | 5 +- .../x/sys/unix/syscall_linux_s390x.go | 4 - .../x/sys/unix/syscall_linux_sparc64.go | 4 - .../golang.org/x/sys/unix/syscall_openbsd.go | 2 + .../x/sys/unix/syscall_openbsd_mips64.go | 4 + .../golang.org/x/sys/unix/syscall_solaris.go | 162 +- vendor/golang.org/x/sys/unix/syscall_unix.go | 82 +- vendor/golang.org/x/sys/unix/sysvshm_unix.go | 13 +- .../x/sys/unix/zerrors_freebsd_386.go | 109 +- .../x/sys/unix/zerrors_freebsd_amd64.go | 107 +- .../x/sys/unix/zerrors_freebsd_arm.go | 220 +- .../x/sys/unix/zerrors_freebsd_arm64.go | 100 +- vendor/golang.org/x/sys/unix/zerrors_linux.go | 390 +- .../x/sys/unix/zerrors_linux_386.go | 6 +- .../x/sys/unix/zerrors_linux_amd64.go | 6 +- .../x/sys/unix/zerrors_linux_arm.go | 6 +- .../x/sys/unix/zerrors_linux_arm64.go | 7 +- .../x/sys/unix/zerrors_linux_mips.go | 6 +- .../x/sys/unix/zerrors_linux_mips64.go | 6 +- .../x/sys/unix/zerrors_linux_mips64le.go | 6 +- .../x/sys/unix/zerrors_linux_mipsle.go | 6 +- .../x/sys/unix/zerrors_linux_ppc.go | 6 +- .../x/sys/unix/zerrors_linux_ppc64.go | 6 +- .../x/sys/unix/zerrors_linux_ppc64le.go | 6 +- .../x/sys/unix/zerrors_linux_riscv64.go | 6 +- .../x/sys/unix/zerrors_linux_s390x.go | 6 +- .../x/sys/unix/zerrors_linux_sparc64.go | 6 +- .../x/sys/unix/zsyscall_darwin_amd64.1_13.s | 2 +- .../x/sys/unix/zsyscall_darwin_amd64.go | 24 + .../x/sys/unix/zsyscall_darwin_amd64.s | 8 +- .../x/sys/unix/zsyscall_darwin_arm64.1_13.s | 2 +- .../x/sys/unix/zsyscall_darwin_arm64.go | 24 + .../x/sys/unix/zsyscall_darwin_arm64.s | 8 +- .../x/sys/unix/zsyscall_freebsd_386.go | 141 +- .../x/sys/unix/zsyscall_freebsd_amd64.go | 139 +- .../x/sys/unix/zsyscall_freebsd_arm.go | 173 +- .../x/sys/unix/zsyscall_freebsd_arm64.go | 139 +- .../golang.org/x/sys/unix/zsyscall_linux.go | 43 + .../x/sys/unix/zsyscall_linux_386.go | 40 - .../x/sys/unix/zsyscall_linux_amd64.go | 40 - .../x/sys/unix/zsyscall_linux_arm.go | 40 - .../x/sys/unix/zsyscall_linux_arm64.go | 40 - .../x/sys/unix/zsyscall_linux_mips.go | 40 - .../x/sys/unix/zsyscall_linux_mips64.go | 40 - .../x/sys/unix/zsyscall_linux_mips64le.go | 40 - .../x/sys/unix/zsyscall_linux_mipsle.go | 40 - .../x/sys/unix/zsyscall_linux_ppc.go | 40 - .../x/sys/unix/zsyscall_linux_ppc64.go | 40 - .../x/sys/unix/zsyscall_linux_ppc64le.go | 40 - .../x/sys/unix/zsyscall_linux_riscv64.go | 51 +- .../x/sys/unix/zsyscall_linux_s390x.go | 40 - .../x/sys/unix/zsyscall_linux_sparc64.go | 40 - .../x/sys/unix/zsyscall_openbsd_386.go | 798 +- .../x/sys/unix/zsyscall_openbsd_amd64.go | 798 +- .../x/sys/unix/zsyscall_openbsd_arm.go | 798 +- .../x/sys/unix/zsyscall_openbsd_arm64.go | 798 +- .../x/sys/unix/zsyscall_solaris_amd64.go | 14 + .../x/sys/unix/zsysnum_freebsd_386.go | 107 +- .../x/sys/unix/zsysnum_freebsd_amd64.go | 107 +- .../x/sys/unix/zsysnum_freebsd_arm.go | 107 +- .../x/sys/unix/zsysnum_freebsd_arm64.go | 107 +- .../x/sys/unix/zsysnum_linux_386.go | 2 +- .../x/sys/unix/zsysnum_linux_amd64.go | 2 +- .../x/sys/unix/zsysnum_linux_arm.go | 2 +- .../x/sys/unix/zsysnum_linux_arm64.go | 2 +- .../x/sys/unix/zsysnum_linux_mips.go | 2 +- .../x/sys/unix/zsysnum_linux_mips64.go | 2 +- .../x/sys/unix/zsysnum_linux_mips64le.go | 2 +- .../x/sys/unix/zsysnum_linux_mipsle.go | 2 +- .../x/sys/unix/zsysnum_linux_ppc.go | 2 +- .../x/sys/unix/zsysnum_linux_ppc64.go | 2 +- .../x/sys/unix/zsysnum_linux_ppc64le.go | 2 +- .../x/sys/unix/zsysnum_linux_riscv64.go | 3 +- .../x/sys/unix/zsysnum_linux_s390x.go | 2 +- .../x/sys/unix/zsysnum_linux_sparc64.go | 2 +- .../x/sys/unix/zsysnum_openbsd_386.go | 1 + .../x/sys/unix/zsysnum_openbsd_amd64.go | 1 + .../x/sys/unix/zsysnum_openbsd_arm.go | 1 + .../x/sys/unix/zsysnum_openbsd_arm64.go | 1 + .../x/sys/unix/ztypes_darwin_amd64.go | 73 +- .../x/sys/unix/ztypes_darwin_arm64.go | 73 +- .../x/sys/unix/ztypes_freebsd_386.go | 114 +- .../x/sys/unix/ztypes_freebsd_amd64.go | 112 +- .../x/sys/unix/ztypes_freebsd_arm.go | 163 +- .../x/sys/unix/ztypes_freebsd_arm64.go | 110 +- vendor/golang.org/x/sys/unix/ztypes_linux.go | 44 +- .../golang.org/x/sys/unix/ztypes_linux_386.go | 9 +- .../x/sys/unix/ztypes_linux_amd64.go | 8 +- .../golang.org/x/sys/unix/ztypes_linux_arm.go | 9 +- .../x/sys/unix/ztypes_linux_arm64.go | 8 +- .../x/sys/unix/ztypes_linux_mips.go | 9 +- .../x/sys/unix/ztypes_linux_mips64.go | 8 +- .../x/sys/unix/ztypes_linux_mips64le.go | 8 +- .../x/sys/unix/ztypes_linux_mipsle.go | 9 +- .../golang.org/x/sys/unix/ztypes_linux_ppc.go | 9 +- .../x/sys/unix/ztypes_linux_ppc64.go | 8 +- .../x/sys/unix/ztypes_linux_ppc64le.go | 8 +- .../x/sys/unix/ztypes_linux_riscv64.go | 8 +- .../x/sys/unix/ztypes_linux_s390x.go | 8 +- .../x/sys/unix/ztypes_linux_sparc64.go | 8 +- .../x/sys/unix/ztypes_openbsd_386.go | 8 +- .../x/sys/unix/ztypes_openbsd_amd64.go | 8 +- .../x/sys/unix/ztypes_openbsd_arm.go | 8 +- .../x/sys/unix/ztypes_openbsd_arm64.go | 8 +- .../x/sys/unix/ztypes_openbsd_mips64.go | 8 +- .../x/sys/unix/ztypes_solaris_amd64.go | 2 +- .../golang.org/x/sys/windows/exec_windows.go | 10 +- .../x/sys/windows/setupapi_windows.go | 2 +- .../x/sys/windows/syscall_windows.go | 105 +- .../golang.org/x/sys/windows/types_windows.go | 81 +- .../x/sys/windows/zsyscall_windows.go | 18 + vendor/modules.txt | 25 +- 189 files changed, 18130 insertions(+), 18094 deletions(-) delete mode 100644 vendor/github.com/klauspost/cpuid/v2/.travis.yml delete mode 100644 vendor/github.com/klauspost/reedsolomon/.travis.yml delete mode 100644 vendor/github.com/klauspost/reedsolomon/appveyor.yml delete mode 100644 vendor/golang.org/x/crypto/AUTHORS delete mode 100644 vendor/golang.org/x/crypto/CONTRIBUTORS delete mode 100644 vendor/golang.org/x/crypto/internal/subtle/aliasing.go delete mode 100644 vendor/golang.org/x/crypto/internal/subtle/aliasing_purego.go delete mode 100644 vendor/golang.org/x/sys/AUTHORS delete mode 100644 vendor/golang.org/x/sys/CONTRIBUTORS delete mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/str.go diff --git a/Makefile b/Makefile index 319723c..692a9a5 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION := 0.9.5.1 +VERSION := 0.9.5.2 .PHONY: lint vis clean common client server passwd subpkgs install uninstall reinstall ## Tag version of binaries with build info wrt. diff --git a/go.mod b/go.mod index f711150..9086e68 100644 --- a/go.mod +++ b/go.mod @@ -1,30 +1,31 @@ module blitter.com/go/xs -go 1.17 +go 1.18 require ( blitter.com/go/cryptmt v1.0.2 blitter.com/go/goutmp v1.0.6 blitter.com/go/herradurakex v1.0.0 - blitter.com/go/hopscotch v0.0.0-20211113042251-b8a306eea4dc + blitter.com/go/hopscotch v0.0.0-20220617051533-4b42ccd4e00a blitter.com/go/kyber v0.0.0-20200130200857-6f2021cb88d9 blitter.com/go/newhope v0.0.0-20200130200750-192fc08a8aae github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da github.com/creack/pty v1.1.18 github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f github.com/kuking/go-frodokem v1.0.2 - github.com/mattn/go-isatty v0.0.14 + github.com/mattn/go-isatty v0.0.16 github.com/xtaci/kcp-go v5.4.20+incompatible - golang.org/x/crypto v0.0.0-20220408190544-5352b0902921 - golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f + golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 + golang.org/x/sys v0.0.0-20220909162455-aba9fc2a8ff2 gopkg.in/hlandau/passlib.v1 v1.0.11 ) require ( blitter.com/go/chacha20 v0.0.0-20200130200441-214e4085f54c // indirect + blitter.com/go/groestl v0.0.0-20220410000905-c4decbf31d64 // indirect blitter.com/go/mtwist v1.0.1 // indirect - github.com/klauspost/cpuid/v2 v2.0.6 // indirect - github.com/klauspost/reedsolomon v1.9.16 // indirect + github.com/klauspost/cpuid/v2 v2.1.1 // indirect + github.com/klauspost/reedsolomon v1.11.0 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 // indirect github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b // indirect diff --git a/go.sum b/go.sum index 4217963..677e1c7 100644 --- a/go.sum +++ b/go.sum @@ -4,10 +4,12 @@ blitter.com/go/cryptmt v1.0.2 h1:ZcLhQk7onUssXyQwG3GdXDXctCVnNL+b7aFuvwOdKXc= blitter.com/go/cryptmt v1.0.2/go.mod h1:tdME2J3O4agaDAYIYNQzzuB28yVGnPSMmV3a/ucSU84= blitter.com/go/goutmp v1.0.6 h1:jRKRw2WalVBza4T50etAfbvT2xp9G5uykIHTvyB5r0k= blitter.com/go/goutmp v1.0.6/go.mod h1:DnK/uLBu1/1yLFiuVlmwvWErzAWVp+pDv7t6ZaQRLNc= +blitter.com/go/groestl v0.0.0-20220410000905-c4decbf31d64 h1:SH6cZ4JiOTmWGeVd5hCgt8gsMvfPPHWpEwNdxfsBugM= +blitter.com/go/groestl v0.0.0-20220410000905-c4decbf31d64/go.mod h1:YMdIR/gCtFwU/a09jyWAwUu2J9CQejUFwkfD+PyVg+4= blitter.com/go/herradurakex v1.0.0 h1:6XaxY+JLT1HUWPF0gYJnjX3pVjrw4YhYZEzZ1U0wkyc= blitter.com/go/herradurakex v1.0.0/go.mod h1:m3+vYZX+2dDjdo+n/HDnXEYJX9pwmNeQLgAfJM8mtxw= -blitter.com/go/hopscotch v0.0.0-20211113042251-b8a306eea4dc h1:IS+jxdKSdlqp6TWG3yMoBde/cctBEMwMDg588JHxgTE= -blitter.com/go/hopscotch v0.0.0-20211113042251-b8a306eea4dc/go.mod h1:9Da1oy0t9aUw3wviba+2mP1inbLGbDuCKAO3mmGQha4= +blitter.com/go/hopscotch v0.0.0-20220617051533-4b42ccd4e00a h1:1fEN7eJMG9TweQuGMAgQlTJ0Wl7lsdDL4Nt5gHZijhY= +blitter.com/go/hopscotch v0.0.0-20220617051533-4b42ccd4e00a/go.mod h1:LtcFd2/R9xcau5SZIYeaHvdqAM7Y5pyvdZYT5J9HAME= blitter.com/go/kyber v0.0.0-20200130200857-6f2021cb88d9 h1:D45AnrNphtvczBXRp5JQicZRTgaK/Is5bgPDDvRKhTc= blitter.com/go/kyber v0.0.0-20200130200857-6f2021cb88d9/go.mod h1:SK6QfGG72lIfKW1Td0wH7f0wwN5nSIhV3K+wvzGNjrw= blitter.com/go/mtwist v1.0.1 h1:PxmoWexfMpLmc8neHP/PcRc3s17ct7iz4d5W/qJVt04= @@ -45,14 +47,14 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f h1:UWGE8Vi+1Agt0lrvnd7UsmvwqWKRzb9byK9iQmsbY0Y= github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f/go.mod h1:u+9Snq0w+ZdYKi8BBoaxnEwWu0fY4Kvu9ByFpM51t1s= -github.com/klauspost/cpuid/v2 v2.0.6 h1:dQ5ueTiftKxp0gyjKSx5+8BtPWkyQbd95m8Gys/RarI= -github.com/klauspost/cpuid/v2 v2.0.6/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/reedsolomon v1.9.16 h1:mR0AwphBwqFv/I3B9AHtNKvzuowI1vrj8/3UX4XRmHA= -github.com/klauspost/reedsolomon v1.9.16/go.mod h1:eqPAcE7xar5CIzcdfwydOEdcmchAKAP/qs14y4GCBOk= +github.com/klauspost/cpuid/v2 v2.1.1 h1:t0wUqjowdm8ezddV5k0tLWVklVuvLJpoHeb4WBdydm0= +github.com/klauspost/cpuid/v2 v2.1.1/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/klauspost/reedsolomon v1.11.0 h1:fc24kMFf4I6dXJwSkVAsw8Za/dMcJrV5ImeDjG3ss1M= +github.com/klauspost/reedsolomon v1.11.0/go.mod h1:FXLZzlJIdfqEnQLdUKWNRuMZg747hZ4oYp2Ml60Lb/k= github.com/kuking/go-frodokem v1.0.2 h1:sxdguENCyr6WnLbJ/cjz0AYCW75H1b+E6zXY2ldZnUU= github.com/kuking/go-frodokem v1.0.2/go.mod h1:83ZX1kHOd72ouCsvbffCqJIj7Ih83MQTAjH2QbqzLZk= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -79,8 +81,8 @@ golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20220408190544-5352b0902921 h1:iU7T1X1J6yxDr0rda54sWGkHgOp5XJrqm79gcNlC2VM= -golang.org/x/crypto v0.0.0-20220408190544-5352b0902921/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 h1:Y/gsMcFOcR+6S6f3YeMKl5g+dZMEWqcz5Czj/GWYbkM= +golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -102,16 +104,12 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190902133755-9109b7679e13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f h1:8w7RhxzTVgUzw/AH/9mUV5q0vMgy40SQRursCcfmkCw= -golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220909162455-aba9fc2a8ff2 h1:wM1k/lXfpc5HdkJJyW9GELpd8ERGdnh8sMGL6Gzq3Ho= +golang.org/x/sys v0.0.0-20220909162455-aba9fc2a8ff2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= diff --git a/vendor/blitter.com/go/hopscotch/hopscotch.go b/vendor/blitter.com/go/hopscotch/hopscotch.go index aea1aea..d462344 100644 --- a/vendor/blitter.com/go/hopscotch/hopscotch.go +++ b/vendor/blitter.com/go/hopscotch/hopscotch.go @@ -25,10 +25,11 @@ import ( _ "crypto/sha512" b2b "golang.org/x/crypto/blake2b" + groestl "blitter.com/go/groestl" ) const ( - maxResched = 10 // above 20 starts to show outlines in 'tuxtest' ... so 10 max + maxResched = 99 // above 20 starts to show outlines in 'tuxtest' ... so 10 max ) type Cipher struct { @@ -71,9 +72,10 @@ func New(r io.Reader, w io.Writer, resched int, key []byte) (c *Cipher) { } // Init all the hash algs we're going to 'hop' around with initial keystream - c.h = make([]hash.Hash, 2) + c.h = make([]hash.Hash, 3) c.h[0] = sha512.New() c.h[1], _ = b2b.New512(c.k) + c.h[2] = groestl.New512() c.keyUpdate(c.k) c.rekeyCtr = len(c.hs) * c.resched // lower multiplier == greater security, lower speed @@ -109,6 +111,11 @@ func (c *Cipher) keyUpdate(data []byte) { sliceTmp := b2b.Sum512(data) c.hs = append(c.hs, sliceTmp[:]...) } + { + c.h[2].Write(data) + sliceTmp := groestl.Sum512(data) + c.hs = append(c.hs, sliceTmp[:]...) + } } func (c *Cipher) yield(ib byte) (ob byte) { @@ -118,25 +125,38 @@ func (c *Cipher) yield(ib byte) (ob byte) { //fmt.Fprintf(os.Stderr, "[c.hidx:%v c.idx:%v]\n", c.hidx, c.idx) // NOTE: using a non-prime modulus degrades CV % from ~ 0.055 to ~ 0.07 - switch c.ctr % 3 { + switch c.ctr % 5 { case 0: ob = c.bTmp ^ ib ^ byte(c.ctr) ^ byte(c.idx) ^ c.hs[len(c.hs)-19] ^ c.hs[len(c.hs)-2] ^ c.hs[len(c.hs)-3] ^ c.hs[len(c.hs)-5] ^ - c.hs[len(c.hs)-7] ^ c.hs[len(c.hs)-11] ^ c.hs[len(c.hs)-13] ^ c.hs[len(c.hs)-17] + c.hs[len(c.hs)-7] ^ c.hs[len(c.hs)-11] ^ c.hs[len(c.hs)-13] ^ c.hs[len(c.hs)-17] ^ + c.hs[len(c.hs)-47] ^ c.hs[len(c.hs)-43] ^ c.hs[len(c.hs)-41] ^ c.hs[len(c.hs)-39] case 1: ob = c.bTmp ^ ib ^ byte(c.ctr) ^ byte(c.idx) ^ c.hs[len(c.hs)-5] ^ c.hs[len(c.hs)-7] ^ c.hs[len(c.hs)-11] ^ c.hs[len(c.hs)-13] ^ - c.hs[len(c.hs)-17] ^ c.hs[len(c.hs)-19] ^ c.hs[len(c.hs)-23] ^ c.hs[len(c.hs)-29] + c.hs[len(c.hs)-17] ^ c.hs[len(c.hs)-19] ^ c.hs[len(c.hs)-23] ^ c.hs[len(c.hs)-29] ^ + c.hs[len(c.hs)-43] ^ c.hs[len(c.hs)-41] ^ c.hs[len(c.hs)-39] ^ c.hs[len(c.hs)-37] case 2: ob = c.bTmp ^ ib ^ byte(c.ctr) ^ byte(c.idx) ^ c.hs[len(c.hs)-13] ^ c.hs[len(c.hs)-17] ^ c.hs[len(c.hs)-23] ^ c.hs[len(c.hs)-27] ^ - c.hs[len(c.hs)-29] ^ c.hs[len(c.hs)-31] ^ c.hs[len(c.hs)-2] ^ c.hs[len(c.hs)-3] + c.hs[len(c.hs)-29] ^ c.hs[len(c.hs)-31] ^ c.hs[len(c.hs)-2] ^ c.hs[len(c.hs)-3] ^ + c.hs[len(c.hs)-37] ^ c.hs[len(c.hs)-41] ^ c.hs[len(c.hs)-39] ^ c.hs[len(c.hs)-47] + case 3: + ob = c.bTmp ^ ib ^ byte(c.ctr) ^ byte(c.idx) ^ + c.hs[len(c.hs)-13] ^ c.hs[len(c.hs)-17] ^ c.hs[len(c.hs)-23] ^ c.hs[len(c.hs)-27] ^ + c.hs[len(c.hs)-29] ^ c.hs[len(c.hs)-31] ^ c.hs[len(c.hs)-5] ^ c.hs[len(c.hs)-3] ^ + c.hs[len(c.hs)-43] ^ c.hs[len(c.hs)-41] ^ c.hs[len(c.hs)-39] ^ c.hs[len(c.hs)-37] + case 4: + ob = c.bTmp ^ ib ^ byte(c.ctr) ^ byte(c.idx) ^ + c.hs[len(c.hs)-13] ^ c.hs[len(c.hs)-17] ^ c.hs[len(c.hs)-23] ^ c.hs[len(c.hs)-27] ^ + c.hs[len(c.hs)-29] ^ c.hs[len(c.hs)-31] ^ c.hs[len(c.hs)-7] ^ c.hs[len(c.hs)-3] ^ + c.hs[len(c.hs)-33] ^ c.hs[len(c.hs)-41] ^ c.hs[len(c.hs)-45] ^ c.hs[len(c.hs)-43] } if c.ctr%c.rekeyCtr == 0 { - bufTmp := make([]byte, 32) + bufTmp := make([]byte, 16*3) _, _ = c.prng.Read(bufTmp) c.keyUpdate(bufTmp) } diff --git a/vendor/github.com/klauspost/cpuid/v2/.travis.yml b/vendor/github.com/klauspost/cpuid/v2/.travis.yml deleted file mode 100644 index aa9bad7..0000000 --- a/vendor/github.com/klauspost/cpuid/v2/.travis.yml +++ /dev/null @@ -1,67 +0,0 @@ -language: go - -os: - - linux - - osx - - windows - -arch: - - amd64 - - arm64 - -go: - - 1.13.x - - 1.14.x - - 1.15.x - - 1.16.x - - master - -env: - - CGO_ENABLED=0 - -script: - - go vet ./... - - go test -test.v -test.run ^TestCPUID$ - - CGO_ENABLED=1 go test -race ./... - - go test -tags=nounsafe -test.v -test.run ^TestCPUID$ - - go test -tags=noasm ./... - - go run ./cmd/cpuid/main.go - - go run ./cmd/cpuid/main.go -json - -matrix: - allow_failures: - - go: 'master' - fast_finish: true - include: - - stage: other - go: 1.16.x - os: linux - arch: amd64 - script: - - diff <(gofmt -d .) <(printf "") - - diff <(gofmt -d ./private) <(printf "") - - curl -sfL https://git.io/goreleaser | VERSION=v0.157.0 sh -s -- check # check goreleaser config for deprecations - - curl -sL https://git.io/goreleaser | VERSION=v0.157.0 sh -s -- --snapshot --skip-publish --rm-dist - - go get github.com/klauspost/asmfmt&&go install github.com/klauspost/asmfmt/cmd/asmfmt - - diff <(asmfmt -d .) <(printf "") - - GOOS=linux GOARCH=386 go test . - - ./test-architectures.sh - - stage: other - go: 1.15.x - os: linux - arch: amd64 - script: - - ./test-architectures.sh - -deploy: - - provider: script - skip_cleanup: true - script: curl -sL https://git.io/goreleaser | VERSION=v0.157.0 bash || true - on: - tags: true - condition: ($TRAVIS_OS_NAME = linux) && ($TRAVIS_CPU_ARCH = amd64) - go: 1.16.x -branches: - only: - - master - - /^v\d+\.\d+(\.\d+)?(-\S*)?$/ diff --git a/vendor/github.com/klauspost/cpuid/v2/README.md b/vendor/github.com/klauspost/cpuid/v2/README.md index 465f4b7..ea7df3d 100644 --- a/vendor/github.com/klauspost/cpuid/v2/README.md +++ b/vendor/github.com/klauspost/cpuid/v2/README.md @@ -39,10 +39,10 @@ func main() { fmt.Println("ThreadsPerCore:", CPU.ThreadsPerCore) fmt.Println("LogicalCores:", CPU.LogicalCores) fmt.Println("Family", CPU.Family, "Model:", CPU.Model, "Vendor ID:", CPU.VendorID) - fmt.Println("Features:", fmt.Sprintf(strings.Join(CPU.FeatureSet(), ","))) + fmt.Println("Features:", strings.Join(CPU.FeatureSet(), ",")) fmt.Println("Cacheline bytes:", CPU.CacheLine) fmt.Println("L1 Data Cache:", CPU.Cache.L1D, "bytes") - fmt.Println("L1 Instruction Cache:", CPU.Cache.L1D, "bytes") + fmt.Println("L1 Instruction Cache:", CPU.Cache.L1I, "bytes") fmt.Println("L2 Cache:", CPU.Cache.L2, "bytes") fmt.Println("L3 Cache:", CPU.Cache.L3, "bytes") fmt.Println("Frequency", CPU.Hz, "hz") @@ -132,6 +132,127 @@ func main() { } ``` +## commandline + +Download as binary from: https://github.com/klauspost/cpuid/releases + +Install from source: + +`go install github.com/klauspost/cpuid/v2/cmd/cpuid@latest` + +### Example + +``` +λ cpuid +Name: AMD Ryzen 9 3950X 16-Core Processor +Vendor String: AuthenticAMD +Vendor ID: AMD +PhysicalCores: 16 +Threads Per Core: 2 +Logical Cores: 32 +CPU Family 23 Model: 113 +Features: ADX,AESNI,AVX,AVX2,BMI1,BMI2,CLMUL,CLZERO,CMOV,CMPXCHG8,CPBOOST,CX16,F16C,FMA3,FXSR,FXSROPT,HTT,HYPERVISOR,LAHF,LZCNT,MCAOVERFLOW,MMX,MMXEXT,MOVBE,NX,OSXSAVE,POPCNT,RDRAND,RDSEED,RDTSCP,SCE,SHA,SSE,SSE2,SSE3,SSE4,SSE42,SSE4A,SSSE3,SUCCOR,X87,XSAVE +Microarchitecture level: 3 +Cacheline bytes: 64 +L1 Instruction Cache: 32768 bytes +L1 Data Cache: 32768 bytes +L2 Cache: 524288 bytes +L3 Cache: 16777216 bytes + +``` +### JSON Output: + +``` +λ cpuid --json +{ + "BrandName": "AMD Ryzen 9 3950X 16-Core Processor", + "VendorID": 2, + "VendorString": "AuthenticAMD", + "PhysicalCores": 16, + "ThreadsPerCore": 2, + "LogicalCores": 32, + "Family": 23, + "Model": 113, + "CacheLine": 64, + "Hz": 0, + "BoostFreq": 0, + "Cache": { + "L1I": 32768, + "L1D": 32768, + "L2": 524288, + "L3": 16777216 + }, + "SGX": { + "Available": false, + "LaunchControl": false, + "SGX1Supported": false, + "SGX2Supported": false, + "MaxEnclaveSizeNot64": 0, + "MaxEnclaveSize64": 0, + "EPCSections": null + }, + "Features": [ + "ADX", + "AESNI", + "AVX", + "AVX2", + "BMI1", + "BMI2", + "CLMUL", + "CLZERO", + "CMOV", + "CMPXCHG8", + "CPBOOST", + "CX16", + "F16C", + "FMA3", + "FXSR", + "FXSROPT", + "HTT", + "HYPERVISOR", + "LAHF", + "LZCNT", + "MCAOVERFLOW", + "MMX", + "MMXEXT", + "MOVBE", + "NX", + "OSXSAVE", + "POPCNT", + "RDRAND", + "RDSEED", + "RDTSCP", + "SCE", + "SHA", + "SSE", + "SSE2", + "SSE3", + "SSE4", + "SSE42", + "SSE4A", + "SSSE3", + "SUCCOR", + "X87", + "XSAVE" + ], + "X64Level": 3 +} +``` + +### Check CPU microarch level + +``` +λ cpuid --check-level=3 +2022/03/18 17:04:40 AMD Ryzen 9 3950X 16-Core Processor +2022/03/18 17:04:40 Microarchitecture level 3 is supported. Max level is 3. +Exit Code 0 + +λ cpuid --check-level=4 +2022/03/18 17:06:18 AMD Ryzen 9 3950X 16-Core Processor +2022/03/18 17:06:18 Microarchitecture level 4 not supported. Max level is 3. +Exit Code 1 +``` + # license This code is published under an MIT license. See LICENSE file for more information. diff --git a/vendor/github.com/klauspost/cpuid/v2/cpuid.go b/vendor/github.com/klauspost/cpuid/v2/cpuid.go index 43e9cc1..27f3325 100644 --- a/vendor/github.com/klauspost/cpuid/v2/cpuid.go +++ b/vendor/github.com/klauspost/cpuid/v2/cpuid.go @@ -14,6 +14,7 @@ import ( "flag" "fmt" "math" + "math/bits" "os" "runtime" "strings" @@ -83,6 +84,7 @@ const ( AVX512DQ // AVX-512 Doubleword and Quadword Instructions AVX512ER // AVX-512 Exponential and Reciprocal Instructions AVX512F // AVX-512 Foundation + AVX512FP16 // AVX-512 FP16 Instructions AVX512IFMA // AVX-512 Integer Fused Multiply-Add Instructions AVX512PF // AVX-512 Prefetch Instructions AVX512VBMI // AVX-512 Vector Bit Manipulation Instructions @@ -91,21 +93,32 @@ const ( AVX512VNNI // AVX-512 Vector Neural Network Instructions AVX512VP2INTERSECT // AVX-512 Intersect for D/Q AVX512VPOPCNTDQ // AVX-512 Vector Population Count Doubleword and Quadword - AVXSLOW // Indicates the CPU performs 2 128 bit operations instead of one. + AVXSLOW // Indicates the CPU performs 2 128 bit operations instead of one + AVXVNNI // AVX (VEX encoded) VNNI neural network instructions BMI1 // Bit Manipulation Instruction Set 1 BMI2 // Bit Manipulation Instruction Set 2 + CETIBT // Intel CET Indirect Branch Tracking + CETSS // Intel CET Shadow Stack CLDEMOTE // Cache Line Demote CLMUL // Carry-less Multiplication + CLZERO // CLZERO instruction supported CMOV // i686 CMOV + CMPSB_SCADBS_SHORT // Fast short CMPSB and SCASB + CMPXCHG8 // CMPXCHG8 instruction + CPBOOST // Core Performance Boost CX16 // CMPXCHG16B Instruction ENQCMD // Enqueue Command ERMS // Enhanced REP MOVSB/STOSB F16C // Half-precision floating-point conversion FMA3 // Intel FMA 3. Does not imply AVX. FMA4 // Bulldozer FMA4 functions - GFNI // Galois Field New Instructions + FXSR // FXSAVE, FXRESTOR instructions, CR4 bit 9 + FXSROPT // FXSAVE/FXRSTOR optimizations + GFNI // Galois Field New Instructions. May require other features (AVX, AVX512VL,AVX512F) based on usage. HLE // Hardware Lock Elision + HRESET // If set CPU supports history reset and the IA32_HRESET_ENABLE MSR HTT // Hyperthreading (enabled) + HWA // Hardware assert supported. Indicates support for MSRC001_10 HYPERVISOR // This bit has been reserved by Intel & AMD for use by hypervisors IBPB // Indirect Branch Restricted Speculation (IBRS) and Indirect Branch Predictor Barrier (IBPB) IBS // Instruction Based Sampling (AMD) @@ -117,22 +130,48 @@ const ( IBSOPSAM // Instruction Based Sampling Feature (AMD) IBSRDWROPCNT // Instruction Based Sampling Feature (AMD) IBSRIPINVALIDCHK // Instruction Based Sampling Feature (AMD) + IBS_PREVENTHOST // Disallowing IBS use by the host supported + INT_WBINVD // WBINVD/WBNOINVD are interruptible. + INVLPGB // NVLPGB and TLBSYNC instruction supported + LAHF // LAHF/SAHF in long mode + LAM // If set, CPU supports Linear Address Masking + LBRVIRT // LBR virtualization LZCNT // LZCNT instruction + MCAOVERFLOW // MCA overflow recovery support. + MCOMMIT // MCOMMIT instruction supported MMX // standard MMX MMXEXT // SSE integer functions or AMD MMX ext + MOVBE // MOVBE instruction (big-endian) MOVDIR64B // Move 64 Bytes as Direct Store MOVDIRI // Move Doubleword as Direct Store + MOVSB_ZL // Fast Zero-Length MOVSB MPX // Intel MPX (Memory Protection Extensions) + MSRIRC // Instruction Retired Counter MSR available + MSR_PAGEFLUSH // Page Flush MSR available + NRIPS // Indicates support for NRIP save on VMEXIT NX // NX (No-Execute) bit + OSXSAVE // XSAVE enabled by OS + PCONFIG // PCONFIG for Intel Multi-Key Total Memory Encryption POPCNT // POPCNT instruction + RDPRU // RDPRU instruction supported RDRAND // RDRAND instruction is available RDSEED // RDSEED instruction is available RDTSCP // RDTSCP Instruction RTM // Restricted Transactional Memory + RTM_ALWAYS_ABORT // Indicates that the loaded microcode is forcing RTM abort. SERIALIZE // Serialize Instruction Execution + SEV // AMD Secure Encrypted Virtualization supported + SEV_64BIT // AMD SEV guest execution only allowed from a 64-bit host + SEV_ALTERNATIVE // AMD SEV Alternate Injection supported + SEV_DEBUGSWAP // Full debug state swap supported for SEV-ES guests + SEV_ES // AMD SEV Encrypted State supported + SEV_RESTRICTED // AMD SEV Restricted Injection supported + SEV_SNP // AMD SEV Secure Nested Paging supported SGX // Software Guard Extensions SGXLC // Software Guard Extensions Launch Control SHA // Intel SHA Extensions + SME // AMD Secure Memory Encryption supported + SME_COHERENT // AMD Hardware cache coherency across encryption domains enforced SSE // SSE functions SSE2 // P4 SSE functions SSE3 // Prescott SSE3 functions @@ -141,14 +180,38 @@ const ( SSE4A // AMD Barcelona microarchitecture SSE4a instructions SSSE3 // Conroe SSSE3 functions STIBP // Single Thread Indirect Branch Predictors + STOSB_SHORT // Fast short STOSB + SUCCOR // Software uncorrectable error containment and recovery capability. + SVM // AMD Secure Virtual Machine + SVMDA // Indicates support for the SVM decode assists. + SVMFBASID // SVM, Indicates that TLB flush events, including CR3 writes and CR4.PGE toggles, flush only the current ASID's TLB entries. Also indicates support for the extended VMCBTLB_Control + SVML // AMD SVM lock. Indicates support for SVM-Lock. + SVMNP // AMD SVM nested paging + SVMPF // SVM pause intercept filter. Indicates support for the pause intercept filter + SVMPFT // SVM PAUSE filter threshold. Indicates support for the PAUSE filter cycle count threshold + SYSCALL // System-Call Extension (SCE): SYSCALL and SYSRET instructions. + SYSEE // SYSENTER and SYSEXIT instructions TBM // AMD Trailing Bit Manipulation + TOPEXT // TopologyExtensions: topology extensions support. Indicates support for CPUID Fn8000_001D_EAX_x[N:0]-CPUID Fn8000_001E_EDX. + 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. + TSCRATEMSR // MSR based TSC rate control. Indicates support for MSR TSC ratio MSRC000_0104 TSXLDTRK // Intel TSX Suspend Load Address Tracking - VAES // Vector AES + VAES // Vector AES. AVX(512) versions requires additional checks. + VMCBCLEAN // VMCB clean bits. Indicates support for VMCB clean bits. + VMPL // AMD VM Permission Levels supported + VMSA_REGPROT // AMD VMSA Register Protection supported VMX // Virtual Machine Extensions - VPCLMULQDQ // Carry-Less Multiplication Quadword + VPCLMULQDQ // Carry-Less Multiplication Quadword. Requires AVX for 3 register versions. + VTE // AMD Virtual Transparent Encryption supported WAITPKG // TPAUSE, UMONITOR, UMWAIT WBNOINVD // Write Back and Do Not Invalidate Cache + X87 // FPU + XGETBV1 // Supports XGETBV with ECX = 1 XOP // Bulldozer XOP functions + XSAVE // XSAVE, XRESTOR, XSETBV, XGETBV + XSAVEC // Supports XSAVEC and the compacted form of XRSTOR. + XSAVEOPT // XSAVEOPT available + XSAVES // Supports XSAVES/XRSTORS and IA32_XSS // ARM features: AESARM // AES instructions @@ -175,7 +238,6 @@ const ( SM3 // SM3 instructions SM4 // SM4 instructions SVE // Scalable Vector Extension - // Keep it last. It automatically defines the size of []flagSet lastID @@ -193,8 +255,10 @@ type CPUInfo struct { LogicalCores int // Number of physical cores times threads that can run on each core through the use of hyperthreading. Will be 0 if undetectable. Family int // CPU family number Model int // CPU model number + Stepping int // CPU stepping info CacheLine int // Cache line size in bytes. Will be 0 if undetectable. - Hz int64 // Clock speed, if known, 0 otherwise + Hz int64 // Clock speed, if known, 0 otherwise. Will attempt to contain base clock speed. + BoostFreq int64 // Max clock speed, if known, 0 otherwise Cache struct { L1I int // L1 Instruction Cache (per core or shared). Will be -1 if undetected L1D int // L1 Data Cache (per core or shared). Will be -1 if undetected @@ -298,6 +362,41 @@ func (c CPUInfo) Has(id FeatureID) bool { return c.featureSet.inSet(id) } +// AnyOf returns whether the CPU supports one or more of the requested features. +func (c CPUInfo) AnyOf(ids ...FeatureID) bool { + for _, id := range ids { + if c.featureSet.inSet(id) { + return true + } + } + return false +} + +// https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels +var level1Features = flagSetWith(CMOV, CMPXCHG8, X87, FXSR, MMX, SYSCALL, SSE, SSE2) +var level2Features = flagSetWith(CMOV, CMPXCHG8, X87, FXSR, MMX, SYSCALL, SSE, SSE2, CX16, LAHF, POPCNT, SSE3, SSE4, SSE42, SSSE3) +var level3Features = flagSetWith(CMOV, CMPXCHG8, X87, FXSR, MMX, SYSCALL, SSE, SSE2, CX16, LAHF, POPCNT, SSE3, SSE4, SSE42, SSSE3, AVX, AVX2, BMI1, BMI2, F16C, FMA3, LZCNT, MOVBE, OSXSAVE) +var level4Features = flagSetWith(CMOV, CMPXCHG8, X87, FXSR, MMX, SYSCALL, SSE, SSE2, CX16, LAHF, POPCNT, SSE3, SSE4, SSE42, SSSE3, AVX, AVX2, BMI1, BMI2, F16C, FMA3, LZCNT, MOVBE, OSXSAVE, AVX512F, AVX512BW, AVX512CD, AVX512DQ, AVX512VL) + +// X64Level returns the microarchitecture level detected on the CPU. +// If features are lacking or non x64 mode, 0 is returned. +// See https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels +func (c CPUInfo) X64Level() int { + if c.featureSet.hasSet(level4Features) { + return 4 + } + if c.featureSet.hasSet(level3Features) { + return 3 + } + if c.featureSet.hasSet(level2Features) { + return 2 + } + if c.featureSet.hasSet(level1Features) { + return 1 + } + return 0 +} + // Disable will disable one or several features. func (c *CPUInfo) Disable(ids ...FeatureID) bool { for _, id := range ids { @@ -320,11 +419,10 @@ func (c CPUInfo) IsVendor(v Vendor) bool { return c.VendorID == v } +// FeatureSet returns all available features as strings. func (c CPUInfo) FeatureSet() []string { - s := make([]string, 0) - for _, f := range c.featureSet.Strings() { - s = append(s, f) - } + s := make([]string, 0, c.featureSet.nEnabled()) + s = append(s, c.featureSet.Strings()...) return s } @@ -363,25 +461,42 @@ func (c CPUInfo) LogicalCPU() int { return int(ebx >> 24) } -// hertz tries to compute the clock speed of the CPU. If leaf 15 is +// frequencies tries to compute the clock speed of the CPU. If leaf 15 is // supported, use it, otherwise parse the brand string. Yes, really. -func hertz(model string) int64 { +func (c *CPUInfo) frequencies() { + c.Hz, c.BoostFreq = 0, 0 mfi := maxFunctionID() if mfi >= 0x15 { eax, ebx, ecx, _ := cpuid(0x15) if eax != 0 && ebx != 0 && ecx != 0 { - return int64((int64(ecx) * int64(ebx)) / int64(eax)) + c.Hz = (int64(ecx) * int64(ebx)) / int64(eax) } } + if mfi >= 0x16 { + a, b, _, _ := cpuid(0x16) + // Base... + if a&0xffff > 0 { + c.Hz = int64(a&0xffff) * 1_000_000 + } + // Boost... + if b&0xffff > 0 { + c.BoostFreq = int64(b&0xffff) * 1_000_000 + } + } + if c.Hz > 0 { + return + } + // computeHz determines the official rated speed of a CPU from its brand // string. This insanity is *actually the official documented way to do // this according to Intel*, prior to leaf 0x15 existing. The official // documentation only shows this working for exactly `x.xx` or `xxxx` // cases, e.g., `2.50GHz` or `1300MHz`; this parser will accept other // sizes. + model := c.BrandName hz := strings.LastIndex(model, "Hz") if hz < 3 { - return 0 + return } var multiplier int64 switch model[hz-1] { @@ -393,7 +508,7 @@ func hertz(model string) int64 { multiplier = 1000 * 1000 * 1000 * 1000 } if multiplier == 0 { - return 0 + return } freq := int64(0) divisor := int64(0) @@ -405,21 +520,22 @@ func hertz(model string) int64 { decimalShift *= 10 } else if model[i] == '.' { if divisor != 0 { - return 0 + return } divisor = decimalShift } else { - return 0 + return } } // we didn't find a space if i < 0 { - return 0 + return } if divisor != 0 { - return (freq * multiplier) / divisor + c.Hz = (freq * multiplier) / divisor + return } - return freq * multiplier + c.Hz = freq * multiplier } // VM Will return true if the cpu id indicates we are in @@ -468,6 +584,32 @@ func (s *flagSet) or(other flagSet) { } } +// hasSet returns whether all features are present. +func (s flagSet) hasSet(other flagSet) bool { + for i, v := range other[:] { + if s[i]&v != v { + return false + } + } + return true +} + +// nEnabled will return the number of enabled flags. +func (s flagSet) nEnabled() (n int) { + for _, v := range s[:] { + n += bits.OnesCount64(uint64(v)) + } + return n +} + +func flagSetWith(feat ...FeatureID) flagSet { + var res flagSet + for _, f := range feat { + res.set(f) + } + return res +} + // ParseFeature will parse the string and return the ID of the matching feature. // Will return UNKNOWN if not found. func ParseFeature(s string) FeatureID { @@ -548,7 +690,7 @@ func threadsPerCore() int { if vend == AMD { // Workaround for AMD returning 0, assume 2 if >= Zen 2 // It will be more correct than not. - fam, _ := familyModel() + fam, _, _ := familyModel() _, _, _, d := cpuid(1) if (d&(1<<28)) != 0 && fam >= 23 { return 2 @@ -586,14 +728,27 @@ func logicalCores() int { } } -func familyModel() (int, int) { +func familyModel() (family, model, stepping int) { if maxFunctionID() < 0x1 { - return 0, 0 + return 0, 0, 0 } eax, _, _, _ := cpuid(1) - family := ((eax >> 8) & 0xf) + ((eax >> 20) & 0xff) - model := ((eax >> 4) & 0xf) + ((eax >> 12) & 0xf0) - return int(family), int(model) + // If BaseFamily[3:0] is less than Fh then ExtendedFamily[7:0] is reserved and Family is equal to BaseFamily[3:0]. + family = int((eax >> 8) & 0xf) + extFam := family == 0x6 // Intel is 0x6, needs extended model. + if family == 0xf { + // Add ExtFamily + family += int((eax >> 20) & 0xff) + extFam = true + } + // If BaseFamily[3:0] is less than 0Fh then ExtendedModel[3:0] is reserved and Model is equal to BaseModel[3:0]. + model = int((eax >> 4) & 0xf) + if extFam { + // Add ExtModel + model += int((eax >> 12) & 0xf0) + } + stepping = int(eax & 0xf) + return family, model, stepping } func physicalCores() int { @@ -677,6 +832,7 @@ func (c *CPUInfo) cacheSize() { if maxFunctionID() < 4 { return } + c.Cache.L1I, c.Cache.L1D, c.Cache.L2, c.Cache.L3 = 0, 0, 0, 0 for i := uint32(0); ; i++ { eax, ebx, ecx, _ := cpuidex(4, i) cacheType := eax & 15 @@ -727,9 +883,14 @@ func (c *CPUInfo) cacheSize() { c.Cache.L2 = int(((ecx >> 16) & 0xFFFF) * 1024) // CPUID Fn8000_001D_EAX_x[N:0] Cache Properties - if maxExtendedFunction() < 0x8000001D { + if maxExtendedFunction() < 0x8000001D || !c.Has(TOPEXT) { return } + + // Xen Hypervisor is buggy and returns the same entry no matter ECX value. + // Hack: When we encounter the same entry 100 times we break. + nSame := 0 + var last uint32 for i := uint32(0); i < math.MaxUint32; i++ { eax, ebx, ecx, _ := cpuidex(0x8000001D, i) @@ -745,6 +906,16 @@ func (c *CPUInfo) cacheSize() { return } + // Check for the same value repeated. + comb := eax ^ ebx ^ ecx + if comb == last { + nSame++ + if nSame == 100 { + return + } + } + last = comb + switch level { case 1: switch typ { @@ -769,8 +940,6 @@ func (c *CPUInfo) cacheSize() { } } } - - return } type SGXEPCSection struct { @@ -831,21 +1000,26 @@ func support() flagSet { if mfi < 0x1 { return fs } - family, model := familyModel() + family, model, _ := familyModel() _, _, c, d := cpuid(1) + fs.setIf((d&(1<<0)) != 0, X87) + fs.setIf((d&(1<<8)) != 0, CMPXCHG8) + fs.setIf((d&(1<<11)) != 0, SYSEE) fs.setIf((d&(1<<15)) != 0, CMOV) fs.setIf((d&(1<<23)) != 0, MMX) - fs.setIf((d&(1<<25)) != 0, MMXEXT) + fs.setIf((d&(1<<24)) != 0, FXSR) + fs.setIf((d&(1<<25)) != 0, FXSROPT) fs.setIf((d&(1<<25)) != 0, SSE) fs.setIf((d&(1<<26)) != 0, SSE2) fs.setIf((c&1) != 0, SSE3) fs.setIf((c&(1<<5)) != 0, VMX) - fs.setIf((c&0x00000200) != 0, SSSE3) - fs.setIf((c&0x00080000) != 0, SSE4) - fs.setIf((c&0x00100000) != 0, SSE42) + fs.setIf((c&(1<<9)) != 0, SSSE3) + fs.setIf((c&(1<<19)) != 0, SSE4) + fs.setIf((c&(1<<20)) != 0, SSE42) fs.setIf((c&(1<<25)) != 0, AESNI) fs.setIf((c&(1<<1)) != 0, CLMUL) + fs.setIf(c&(1<<22) != 0, MOVBE) fs.setIf(c&(1<<23) != 0, POPCNT) fs.setIf(c&(1<<30) != 0, RDRAND) @@ -861,6 +1035,8 @@ func support() flagSet { if vend == AMD && (d&(1<<28)) != 0 && mfi >= 4 { fs.setIf(threadsPerCore() > 1, HTT) } + fs.setIf(c&1<<26 != 0, XSAVE) + fs.setIf(c&1<<27 != 0, OSXSAVE) // Check XGETBV/XSAVE (26), OXSAVE (27) and AVX (28) bits const avxCheck = 1<<26 | 1<<27 | 1<<28 if c&avxCheck == avxCheck { @@ -886,7 +1062,6 @@ func support() flagSet { // Check AVX2, AVX2 requires OS support, but BMI1/2 don't. if mfi >= 7 { _, ebx, ecx, edx := cpuidex(7, 0) - eax1, _, _, _ := cpuidex(7, 1) if fs.inSet(AVX) && (ebx&0x00000020) != 0 { fs.set(AVX2) } @@ -903,19 +1078,38 @@ func support() flagSet { fs.setIf(ebx&(1<<18) != 0, RDSEED) fs.setIf(ebx&(1<<19) != 0, ADX) fs.setIf(ebx&(1<<29) != 0, SHA) + // CPUID.(EAX=7, ECX=0).ECX fs.setIf(ecx&(1<<5) != 0, WAITPKG) + fs.setIf(ecx&(1<<7) != 0, CETSS) + fs.setIf(ecx&(1<<8) != 0, GFNI) + fs.setIf(ecx&(1<<9) != 0, VAES) + fs.setIf(ecx&(1<<10) != 0, VPCLMULQDQ) + fs.setIf(ecx&(1<<13) != 0, TME) fs.setIf(ecx&(1<<25) != 0, CLDEMOTE) fs.setIf(ecx&(1<<27) != 0, MOVDIRI) fs.setIf(ecx&(1<<28) != 0, MOVDIR64B) fs.setIf(ecx&(1<<29) != 0, ENQCMD) fs.setIf(ecx&(1<<30) != 0, SGXLC) + // CPUID.(EAX=7, ECX=0).EDX + fs.setIf(edx&(1<<11) != 0, RTM_ALWAYS_ABORT) fs.setIf(edx&(1<<14) != 0, SERIALIZE) fs.setIf(edx&(1<<16) != 0, TSXLDTRK) + fs.setIf(edx&(1<<18) != 0, PCONFIG) + fs.setIf(edx&(1<<20) != 0, CETIBT) fs.setIf(edx&(1<<26) != 0, IBPB) fs.setIf(edx&(1<<27) != 0, STIBP) + // CPUID.(EAX=7, ECX=1) + eax1, _, _, _ := cpuidex(7, 1) + fs.setIf(fs.inSet(AVX) && eax1&(1<<4) != 0, AVXVNNI) + fs.setIf(eax1&(1<<10) != 0, MOVSB_ZL) + fs.setIf(eax1&(1<<11) != 0, STOSB_SHORT) + fs.setIf(eax1&(1<<12) != 0, CMPSB_SCADBS_SHORT) + fs.setIf(eax1&(1<<22) != 0, HRESET) + fs.setIf(eax1&(1<<26) != 0, LAM) + // Only detect AVX-512 features if XGETBV is supported if c&((1<<26)|(1<<27)) == (1<<26)|(1<<27) { // Check for OS support @@ -940,15 +1134,13 @@ func support() flagSet { // ecx fs.setIf(ecx&(1<<1) != 0, AVX512VBMI) fs.setIf(ecx&(1<<6) != 0, AVX512VBMI2) - fs.setIf(ecx&(1<<8) != 0, GFNI) - fs.setIf(ecx&(1<<9) != 0, VAES) - fs.setIf(ecx&(1<<10) != 0, VPCLMULQDQ) fs.setIf(ecx&(1<<11) != 0, AVX512VNNI) fs.setIf(ecx&(1<<12) != 0, AVX512BITALG) fs.setIf(ecx&(1<<14) != 0, AVX512VPOPCNTDQ) // edx fs.setIf(edx&(1<<8) != 0, AVX512VP2INTERSECT) fs.setIf(edx&(1<<22) != 0, AMXBF16) + fs.setIf(edx&(1<<23) != 0, AVX512FP16) fs.setIf(edx&(1<<24) != 0, AMXTILE) fs.setIf(edx&(1<<25) != 0, AMXINT8) // eax1 = CPUID.(EAX=7, ECX=1).EAX @@ -956,33 +1148,91 @@ func support() flagSet { } } } - + // Processor Extended State Enumeration Sub-leaf (EAX = 0DH, ECX = 1) + // EAX + // Bit 00: XSAVEOPT is available. + // Bit 01: Supports XSAVEC and the compacted form of XRSTOR if set. + // Bit 02: Supports XGETBV with ECX = 1 if set. + // Bit 03: Supports XSAVES/XRSTORS and IA32_XSS if set. + // Bits 31 - 04: Reserved. + // EBX + // Bits 31 - 00: The size in bytes of the XSAVE area containing all states enabled by XCRO | IA32_XSS. + // ECX + // Bits 31 - 00: Reports the supported bits of the lower 32 bits of the IA32_XSS MSR. IA32_XSS[n] can be set to 1 only if ECX[n] is 1. + // EDX? + // Bits 07 - 00: Used for XCR0. Bit 08: PT state. Bit 09: Used for XCR0. Bits 12 - 10: Reserved. Bit 13: HWP state. Bits 31 - 14: Reserved. + if mfi >= 0xd { + if fs.inSet(XSAVE) { + eax, _, _, _ := cpuidex(0xd, 1) + fs.setIf(eax&(1<<0) != 0, XSAVEOPT) + fs.setIf(eax&(1<<1) != 0, XSAVEC) + fs.setIf(eax&(1<<2) != 0, XGETBV1) + fs.setIf(eax&(1<<3) != 0, XSAVES) + } + } if maxExtendedFunction() >= 0x80000001 { _, _, c, d := cpuid(0x80000001) if (c & (1 << 5)) != 0 { fs.set(LZCNT) fs.set(POPCNT) } - fs.setIf((c&(1<<10)) != 0, IBS) - fs.setIf((d&(1<<31)) != 0, AMD3DNOW) - fs.setIf((d&(1<<30)) != 0, AMD3DNOWEXT) - fs.setIf((d&(1<<23)) != 0, MMX) - fs.setIf((d&(1<<22)) != 0, MMXEXT) + // ECX + fs.setIf((c&(1<<0)) != 0, LAHF) + fs.setIf((c&(1<<2)) != 0, SVM) fs.setIf((c&(1<<6)) != 0, SSE4A) + fs.setIf((c&(1<<10)) != 0, IBS) + fs.setIf((c&(1<<22)) != 0, TOPEXT) + + // EDX + fs.setIf(d&(1<<11) != 0, SYSCALL) fs.setIf(d&(1<<20) != 0, NX) + fs.setIf(d&(1<<22) != 0, MMXEXT) + fs.setIf(d&(1<<23) != 0, MMX) + fs.setIf(d&(1<<24) != 0, FXSR) + fs.setIf(d&(1<<25) != 0, FXSROPT) fs.setIf(d&(1<<27) != 0, RDTSCP) + fs.setIf(d&(1<<30) != 0, AMD3DNOWEXT) + fs.setIf(d&(1<<31) != 0, AMD3DNOW) /* XOP and FMA4 use the AVX instruction coding scheme, so they can't be * used unless the OS has AVX support. */ if fs.inSet(AVX) { - fs.setIf((c&0x00000800) != 0, XOP) - fs.setIf((c&0x00010000) != 0, FMA4) + fs.setIf((c&(1<<11)) != 0, XOP) + fs.setIf((c&(1<<16)) != 0, FMA4) } } + if maxExtendedFunction() >= 0x80000007 { + _, b, _, d := cpuid(0x80000007) + fs.setIf((b&(1<<0)) != 0, MCAOVERFLOW) + fs.setIf((b&(1<<1)) != 0, SUCCOR) + fs.setIf((b&(1<<2)) != 0, HWA) + fs.setIf((d&(1<<9)) != 0, CPBOOST) + } + if maxExtendedFunction() >= 0x80000008 { _, b, _, _ := cpuid(0x80000008) fs.setIf((b&(1<<9)) != 0, WBNOINVD) + fs.setIf((b&(1<<8)) != 0, MCOMMIT) + fs.setIf((b&(1<<13)) != 0, INT_WBINVD) + fs.setIf((b&(1<<4)) != 0, RDPRU) + fs.setIf((b&(1<<3)) != 0, INVLPGB) + fs.setIf((b&(1<<1)) != 0, MSRIRC) + fs.setIf((b&(1<<0)) != 0, CLZERO) + } + + if fs.inSet(SVM) && maxExtendedFunction() >= 0x8000000A { + _, _, _, edx := cpuid(0x8000000A) + fs.setIf((edx>>0)&1 == 1, SVMNP) + fs.setIf((edx>>1)&1 == 1, LBRVIRT) + fs.setIf((edx>>2)&1 == 1, SVML) + fs.setIf((edx>>3)&1 == 1, NRIPS) + fs.setIf((edx>>4)&1 == 1, TSCRATEMSR) + fs.setIf((edx>>5)&1 == 1, VMCBCLEAN) + fs.setIf((edx>>6)&1 == 1, SVMFBASID) + fs.setIf((edx>>7)&1 == 1, SVMDA) + fs.setIf((edx>>10)&1 == 1, SVMPF) + fs.setIf((edx>>12)&1 == 1, SVMPFT) } if maxExtendedFunction() >= 0x8000001b && fs.inSet(IBS) { @@ -997,6 +1247,24 @@ func support() flagSet { fs.setIf((eax>>7)&1 == 1, IBSRIPINVALIDCHK) } + if maxExtendedFunction() >= 0x8000001f && vend == AMD { + a, _, _, _ := cpuid(0x8000001f) + fs.setIf((a>>0)&1 == 1, SME) + fs.setIf((a>>1)&1 == 1, SEV) + fs.setIf((a>>2)&1 == 1, MSR_PAGEFLUSH) + fs.setIf((a>>3)&1 == 1, SEV_ES) + fs.setIf((a>>4)&1 == 1, SEV_SNP) + fs.setIf((a>>5)&1 == 1, VMPL) + fs.setIf((a>>10)&1 == 1, SME_COHERENT) + fs.setIf((a>>11)&1 == 1, SEV_64BIT) + fs.setIf((a>>12)&1 == 1, SEV_RESTRICTED) + fs.setIf((a>>13)&1 == 1, SEV_ALTERNATIVE) + fs.setIf((a>>14)&1 == 1, SEV_DEBUGSWAP) + fs.setIf((a>>15)&1 == 1, IBS_PREVENTHOST) + fs.setIf((a>>16)&1 == 1, VTE) + fs.setIf((a>>24)&1 == 1, VMSA_REGPROT) + } + return fs } diff --git a/vendor/github.com/klauspost/cpuid/v2/detect_arm64.go b/vendor/github.com/klauspost/cpuid/v2/detect_arm64.go index 9bf9f77..9a53504 100644 --- a/vendor/github.com/klauspost/cpuid/v2/detect_arm64.go +++ b/vendor/github.com/klauspost/cpuid/v2/detect_arm64.go @@ -1,6 +1,7 @@ // Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. -//+build arm64,!gccgo,!noasm,!appengine +//go:build arm64 && !gccgo && !noasm && !appengine +// +build arm64,!gccgo,!noasm,!appengine package cpuid diff --git a/vendor/github.com/klauspost/cpuid/v2/detect_ref.go b/vendor/github.com/klauspost/cpuid/v2/detect_ref.go index e9c8606..9636c2b 100644 --- a/vendor/github.com/klauspost/cpuid/v2/detect_ref.go +++ b/vendor/github.com/klauspost/cpuid/v2/detect_ref.go @@ -1,6 +1,7 @@ // Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. -//+build !amd64,!386,!arm64 gccgo noasm appengine +//go:build (!amd64 && !386 && !arm64) || gccgo || noasm || appengine +// +build !amd64,!386,!arm64 gccgo noasm appengine package cpuid diff --git a/vendor/github.com/klauspost/cpuid/v2/detect_x86.go b/vendor/github.com/klauspost/cpuid/v2/detect_x86.go index 93bc20f..c946824 100644 --- a/vendor/github.com/klauspost/cpuid/v2/detect_x86.go +++ b/vendor/github.com/klauspost/cpuid/v2/detect_x86.go @@ -1,6 +1,7 @@ // Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. -//+build 386,!gccgo,!noasm,!appengine amd64,!gccgo,!noasm,!appengine +//go:build (386 && !gccgo && !noasm && !appengine) || (amd64 && !gccgo && !noasm && !appengine) +// +build 386,!gccgo,!noasm,!appengine amd64,!gccgo,!noasm,!appengine package cpuid @@ -23,13 +24,13 @@ func addInfo(c *CPUInfo, safe bool) { c.maxExFunc = maxExtendedFunction() c.BrandName = brandName() c.CacheLine = cacheLine() - c.Family, c.Model = familyModel() + c.Family, c.Model, c.Stepping = familyModel() c.featureSet = support() c.SGX = hasSGX(c.featureSet.inSet(SGX), c.featureSet.inSet(SGXLC)) c.ThreadsPerCore = threadsPerCore() c.LogicalCores = logicalCores() c.PhysicalCores = physicalCores() c.VendorID, c.VendorString = vendorID() - c.Hz = hertz(c.BrandName) c.cacheSize() + c.frequencies() } diff --git a/vendor/github.com/klauspost/cpuid/v2/featureid_string.go b/vendor/github.com/klauspost/cpuid/v2/featureid_string.go index 0e764f9..d12e547 100644 --- a/vendor/github.com/klauspost/cpuid/v2/featureid_string.go +++ b/vendor/github.com/klauspost/cpuid/v2/featureid_string.go @@ -24,103 +24,165 @@ func _() { _ = x[AVX512DQ-14] _ = x[AVX512ER-15] _ = x[AVX512F-16] - _ = x[AVX512IFMA-17] - _ = x[AVX512PF-18] - _ = x[AVX512VBMI-19] - _ = x[AVX512VBMI2-20] - _ = x[AVX512VL-21] - _ = x[AVX512VNNI-22] - _ = x[AVX512VP2INTERSECT-23] - _ = x[AVX512VPOPCNTDQ-24] - _ = x[AVXSLOW-25] - _ = x[BMI1-26] - _ = x[BMI2-27] - _ = x[CLDEMOTE-28] - _ = x[CLMUL-29] - _ = x[CMOV-30] - _ = x[CX16-31] - _ = x[ENQCMD-32] - _ = x[ERMS-33] - _ = x[F16C-34] - _ = x[FMA3-35] - _ = x[FMA4-36] - _ = x[GFNI-37] - _ = x[HLE-38] - _ = x[HTT-39] - _ = x[HYPERVISOR-40] - _ = x[IBPB-41] - _ = x[IBS-42] - _ = x[IBSBRNTRGT-43] - _ = x[IBSFETCHSAM-44] - _ = x[IBSFFV-45] - _ = x[IBSOPCNT-46] - _ = x[IBSOPCNTEXT-47] - _ = x[IBSOPSAM-48] - _ = x[IBSRDWROPCNT-49] - _ = x[IBSRIPINVALIDCHK-50] - _ = x[LZCNT-51] - _ = x[MMX-52] - _ = x[MMXEXT-53] - _ = x[MOVDIR64B-54] - _ = x[MOVDIRI-55] - _ = x[MPX-56] - _ = x[NX-57] - _ = x[POPCNT-58] - _ = x[RDRAND-59] - _ = x[RDSEED-60] - _ = x[RDTSCP-61] - _ = x[RTM-62] - _ = x[SERIALIZE-63] - _ = x[SGX-64] - _ = x[SGXLC-65] - _ = x[SHA-66] - _ = x[SSE-67] - _ = x[SSE2-68] - _ = x[SSE3-69] - _ = x[SSE4-70] - _ = x[SSE42-71] - _ = x[SSE4A-72] - _ = x[SSSE3-73] - _ = x[STIBP-74] - _ = x[TBM-75] - _ = x[TSXLDTRK-76] - _ = x[VAES-77] - _ = x[VMX-78] - _ = x[VPCLMULQDQ-79] - _ = x[WAITPKG-80] - _ = x[WBNOINVD-81] - _ = x[XOP-82] - _ = x[AESARM-83] - _ = x[ARMCPUID-84] - _ = x[ASIMD-85] - _ = x[ASIMDDP-86] - _ = x[ASIMDHP-87] - _ = x[ASIMDRDM-88] - _ = x[ATOMICS-89] - _ = x[CRC32-90] - _ = x[DCPOP-91] - _ = x[EVTSTRM-92] - _ = x[FCMA-93] - _ = x[FP-94] - _ = x[FPHP-95] - _ = x[GPA-96] - _ = x[JSCVT-97] - _ = x[LRCPC-98] - _ = x[PMULL-99] - _ = x[SHA1-100] - _ = x[SHA2-101] - _ = x[SHA3-102] - _ = x[SHA512-103] - _ = x[SM3-104] - _ = x[SM4-105] - _ = x[SVE-106] - _ = x[lastID-107] + _ = x[AVX512FP16-17] + _ = x[AVX512IFMA-18] + _ = x[AVX512PF-19] + _ = x[AVX512VBMI-20] + _ = x[AVX512VBMI2-21] + _ = x[AVX512VL-22] + _ = x[AVX512VNNI-23] + _ = x[AVX512VP2INTERSECT-24] + _ = x[AVX512VPOPCNTDQ-25] + _ = x[AVXSLOW-26] + _ = x[AVXVNNI-27] + _ = x[BMI1-28] + _ = x[BMI2-29] + _ = x[CETIBT-30] + _ = x[CETSS-31] + _ = x[CLDEMOTE-32] + _ = x[CLMUL-33] + _ = x[CLZERO-34] + _ = x[CMOV-35] + _ = x[CMPSB_SCADBS_SHORT-36] + _ = x[CMPXCHG8-37] + _ = x[CPBOOST-38] + _ = x[CX16-39] + _ = x[ENQCMD-40] + _ = x[ERMS-41] + _ = x[F16C-42] + _ = x[FMA3-43] + _ = x[FMA4-44] + _ = x[FXSR-45] + _ = x[FXSROPT-46] + _ = x[GFNI-47] + _ = x[HLE-48] + _ = x[HRESET-49] + _ = x[HTT-50] + _ = x[HWA-51] + _ = x[HYPERVISOR-52] + _ = x[IBPB-53] + _ = x[IBS-54] + _ = x[IBSBRNTRGT-55] + _ = x[IBSFETCHSAM-56] + _ = x[IBSFFV-57] + _ = x[IBSOPCNT-58] + _ = x[IBSOPCNTEXT-59] + _ = x[IBSOPSAM-60] + _ = x[IBSRDWROPCNT-61] + _ = x[IBSRIPINVALIDCHK-62] + _ = x[IBS_PREVENTHOST-63] + _ = x[INT_WBINVD-64] + _ = x[INVLPGB-65] + _ = x[LAHF-66] + _ = x[LAM-67] + _ = x[LBRVIRT-68] + _ = x[LZCNT-69] + _ = x[MCAOVERFLOW-70] + _ = x[MCOMMIT-71] + _ = x[MMX-72] + _ = x[MMXEXT-73] + _ = x[MOVBE-74] + _ = x[MOVDIR64B-75] + _ = x[MOVDIRI-76] + _ = x[MOVSB_ZL-77] + _ = x[MPX-78] + _ = x[MSRIRC-79] + _ = x[MSR_PAGEFLUSH-80] + _ = x[NRIPS-81] + _ = x[NX-82] + _ = x[OSXSAVE-83] + _ = x[PCONFIG-84] + _ = x[POPCNT-85] + _ = x[RDPRU-86] + _ = x[RDRAND-87] + _ = x[RDSEED-88] + _ = x[RDTSCP-89] + _ = x[RTM-90] + _ = x[RTM_ALWAYS_ABORT-91] + _ = x[SERIALIZE-92] + _ = x[SEV-93] + _ = x[SEV_64BIT-94] + _ = x[SEV_ALTERNATIVE-95] + _ = x[SEV_DEBUGSWAP-96] + _ = x[SEV_ES-97] + _ = x[SEV_RESTRICTED-98] + _ = x[SEV_SNP-99] + _ = x[SGX-100] + _ = x[SGXLC-101] + _ = x[SHA-102] + _ = x[SME-103] + _ = x[SME_COHERENT-104] + _ = x[SSE-105] + _ = x[SSE2-106] + _ = x[SSE3-107] + _ = x[SSE4-108] + _ = x[SSE42-109] + _ = x[SSE4A-110] + _ = x[SSSE3-111] + _ = x[STIBP-112] + _ = x[STOSB_SHORT-113] + _ = x[SUCCOR-114] + _ = x[SVM-115] + _ = x[SVMDA-116] + _ = x[SVMFBASID-117] + _ = x[SVML-118] + _ = x[SVMNP-119] + _ = x[SVMPF-120] + _ = x[SVMPFT-121] + _ = x[SYSCALL-122] + _ = x[SYSEE-123] + _ = x[TBM-124] + _ = x[TOPEXT-125] + _ = x[TME-126] + _ = x[TSCRATEMSR-127] + _ = x[TSXLDTRK-128] + _ = x[VAES-129] + _ = x[VMCBCLEAN-130] + _ = x[VMPL-131] + _ = x[VMSA_REGPROT-132] + _ = x[VMX-133] + _ = x[VPCLMULQDQ-134] + _ = x[VTE-135] + _ = x[WAITPKG-136] + _ = x[WBNOINVD-137] + _ = x[X87-138] + _ = x[XGETBV1-139] + _ = x[XOP-140] + _ = x[XSAVE-141] + _ = x[XSAVEC-142] + _ = x[XSAVEOPT-143] + _ = x[XSAVES-144] + _ = x[AESARM-145] + _ = x[ARMCPUID-146] + _ = x[ASIMD-147] + _ = x[ASIMDDP-148] + _ = x[ASIMDHP-149] + _ = x[ASIMDRDM-150] + _ = x[ATOMICS-151] + _ = x[CRC32-152] + _ = x[DCPOP-153] + _ = x[EVTSTRM-154] + _ = x[FCMA-155] + _ = x[FP-156] + _ = x[FPHP-157] + _ = x[GPA-158] + _ = x[JSCVT-159] + _ = x[LRCPC-160] + _ = x[PMULL-161] + _ = x[SHA1-162] + _ = x[SHA2-163] + _ = x[SHA3-164] + _ = x[SHA512-165] + _ = x[SM3-166] + _ = x[SM4-167] + _ = x[SVE-168] + _ = x[lastID-169] _ = x[firstID-0] } -const _FeatureID_name = "firstIDADXAESNIAMD3DNOWAMD3DNOWEXTAMXBF16AMXINT8AMXTILEAVXAVX2AVX512BF16AVX512BITALGAVX512BWAVX512CDAVX512DQAVX512ERAVX512FAVX512IFMAAVX512PFAVX512VBMIAVX512VBMI2AVX512VLAVX512VNNIAVX512VP2INTERSECTAVX512VPOPCNTDQAVXSLOWBMI1BMI2CLDEMOTECLMULCMOVCX16ENQCMDERMSF16CFMA3FMA4GFNIHLEHTTHYPERVISORIBPBIBSIBSBRNTRGTIBSFETCHSAMIBSFFVIBSOPCNTIBSOPCNTEXTIBSOPSAMIBSRDWROPCNTIBSRIPINVALIDCHKLZCNTMMXMMXEXTMOVDIR64BMOVDIRIMPXNXPOPCNTRDRANDRDSEEDRDTSCPRTMSERIALIZESGXSGXLCSHASSESSE2SSE3SSE4SSE42SSE4ASSSE3STIBPTBMTSXLDTRKVAESVMXVPCLMULQDQWAITPKGWBNOINVDXOPAESARMARMCPUIDASIMDASIMDDPASIMDHPASIMDRDMATOMICSCRC32DCPOPEVTSTRMFCMAFPFPHPGPAJSCVTLRCPCPMULLSHA1SHA2SHA3SHA512SM3SM4SVElastID" +const _FeatureID_name = "firstIDADXAESNIAMD3DNOWAMD3DNOWEXTAMXBF16AMXINT8AMXTILEAVXAVX2AVX512BF16AVX512BITALGAVX512BWAVX512CDAVX512DQAVX512ERAVX512FAVX512FP16AVX512IFMAAVX512PFAVX512VBMIAVX512VBMI2AVX512VLAVX512VNNIAVX512VP2INTERSECTAVX512VPOPCNTDQAVXSLOWAVXVNNIBMI1BMI2CETIBTCETSSCLDEMOTECLMULCLZEROCMOVCMPSB_SCADBS_SHORTCMPXCHG8CPBOOSTCX16ENQCMDERMSF16CFMA3FMA4FXSRFXSROPTGFNIHLEHRESETHTTHWAHYPERVISORIBPBIBSIBSBRNTRGTIBSFETCHSAMIBSFFVIBSOPCNTIBSOPCNTEXTIBSOPSAMIBSRDWROPCNTIBSRIPINVALIDCHKIBS_PREVENTHOSTINT_WBINVDINVLPGBLAHFLAMLBRVIRTLZCNTMCAOVERFLOWMCOMMITMMXMMXEXTMOVBEMOVDIR64BMOVDIRIMOVSB_ZLMPXMSRIRCMSR_PAGEFLUSHNRIPSNXOSXSAVEPCONFIGPOPCNTRDPRURDRANDRDSEEDRDTSCPRTMRTM_ALWAYS_ABORTSERIALIZESEVSEV_64BITSEV_ALTERNATIVESEV_DEBUGSWAPSEV_ESSEV_RESTRICTEDSEV_SNPSGXSGXLCSHASMESME_COHERENTSSESSE2SSE3SSE4SSE42SSE4ASSSE3STIBPSTOSB_SHORTSUCCORSVMSVMDASVMFBASIDSVMLSVMNPSVMPFSVMPFTSYSCALLSYSEETBMTOPEXTTMETSCRATEMSRTSXLDTRKVAESVMCBCLEANVMPLVMSA_REGPROTVMXVPCLMULQDQVTEWAITPKGWBNOINVDX87XGETBV1XOPXSAVEXSAVECXSAVEOPTXSAVESAESARMARMCPUIDASIMDASIMDDPASIMDHPASIMDRDMATOMICSCRC32DCPOPEVTSTRMFCMAFPFPHPGPAJSCVTLRCPCPMULLSHA1SHA2SHA3SHA512SM3SM4SVElastID" -var _FeatureID_index = [...]uint16{0, 7, 10, 15, 23, 34, 41, 48, 55, 58, 62, 72, 84, 92, 100, 108, 116, 123, 133, 141, 151, 162, 170, 180, 198, 213, 220, 224, 228, 236, 241, 245, 249, 255, 259, 263, 267, 271, 275, 278, 281, 291, 295, 298, 308, 319, 325, 333, 344, 352, 364, 380, 385, 388, 394, 403, 410, 413, 415, 421, 427, 433, 439, 442, 451, 454, 459, 462, 465, 469, 473, 477, 482, 487, 492, 497, 500, 508, 512, 515, 525, 532, 540, 543, 549, 557, 562, 569, 576, 584, 591, 596, 601, 608, 612, 614, 618, 621, 626, 631, 636, 640, 644, 648, 654, 657, 660, 663, 669} +var _FeatureID_index = [...]uint16{0, 7, 10, 15, 23, 34, 41, 48, 55, 58, 62, 72, 84, 92, 100, 108, 116, 123, 133, 143, 151, 161, 172, 180, 190, 208, 223, 230, 237, 241, 245, 251, 256, 264, 269, 275, 279, 297, 305, 312, 316, 322, 326, 330, 334, 338, 342, 349, 353, 356, 362, 365, 368, 378, 382, 385, 395, 406, 412, 420, 431, 439, 451, 467, 482, 492, 499, 503, 506, 513, 518, 529, 536, 539, 545, 550, 559, 566, 574, 577, 583, 596, 601, 603, 610, 617, 623, 628, 634, 640, 646, 649, 665, 674, 677, 686, 701, 714, 720, 734, 741, 744, 749, 752, 755, 767, 770, 774, 778, 782, 787, 792, 797, 802, 813, 819, 822, 827, 836, 840, 845, 850, 856, 863, 868, 871, 877, 880, 890, 898, 902, 911, 915, 927, 930, 940, 943, 950, 958, 961, 968, 971, 976, 982, 990, 996, 1002, 1010, 1015, 1022, 1029, 1037, 1044, 1049, 1054, 1061, 1065, 1067, 1071, 1074, 1079, 1084, 1089, 1093, 1097, 1101, 1107, 1110, 1113, 1116, 1122} 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 8d2cb03..d91d021 100644 --- a/vendor/github.com/klauspost/cpuid/v2/os_darwin_arm64.go +++ b/vendor/github.com/klauspost/cpuid/v2/os_darwin_arm64.go @@ -2,18 +2,120 @@ package cpuid -import "runtime" +import ( + "runtime" + "strings" + + "golang.org/x/sys/unix" +) func detectOS(c *CPUInfo) bool { + if runtime.GOOS != "ios" { + tryToFillCPUInfoFomSysctl(c) + } // There are no hw.optional sysctl values for the below features on Mac OS 11.0 // to detect their supported state dynamically. Assume the CPU features that // Apple Silicon M1 supports to be available as a minimal set of features // to all Go programs running on darwin/arm64. // TODO: Add more if we know them. c.featureSet.setIf(runtime.GOOS != "ios", AESARM, PMULL, SHA1, SHA2) - c.PhysicalCores = runtime.NumCPU() - // For now assuming 1 thread per core... - c.ThreadsPerCore = 1 - c.LogicalCores = c.PhysicalCores + return true } + +func sysctlGetBool(name string) bool { + value, err := unix.SysctlUint32(name) + if err != nil { + return false + } + return value != 0 +} + +func sysctlGetString(name string) string { + value, err := unix.Sysctl(name) + if err != nil { + return "" + } + return value +} + +func sysctlGetInt(unknown int, names ...string) int { + for _, name := range names { + value, err := unix.SysctlUint32(name) + if err != nil { + continue + } + if value != 0 { + return int(value) + } + } + return unknown +} + +func sysctlGetInt64(unknown int, names ...string) int { + for _, name := range names { + value64, err := unix.SysctlUint64(name) + if err != nil { + continue + } + if int(value64) != unknown { + return int(value64) + } + } + return unknown +} + +func setFeature(c *CPUInfo, name string, feature FeatureID) { + c.featureSet.setIf(sysctlGetBool(name), feature) +} +func tryToFillCPUInfoFomSysctl(c *CPUInfo) { + c.BrandName = sysctlGetString("machdep.cpu.brand_string") + + if len(c.BrandName) != 0 { + c.VendorString = strings.Fields(c.BrandName)[0] + } + + c.PhysicalCores = sysctlGetInt(runtime.NumCPU(), "hw.physicalcpu") + c.ThreadsPerCore = sysctlGetInt(1, "machdep.cpu.thread_count", "kern.num_threads") / + sysctlGetInt(1, "hw.physicalcpu") + c.LogicalCores = sysctlGetInt(runtime.NumCPU(), "machdep.cpu.core_count") + c.Family = sysctlGetInt(0, "machdep.cpu.family", "hw.cpufamily") + c.Model = sysctlGetInt(0, "machdep.cpu.model") + c.CacheLine = sysctlGetInt64(0, "hw.cachelinesize") + c.Cache.L1I = sysctlGetInt64(-1, "hw.l1icachesize") + c.Cache.L1D = sysctlGetInt64(-1, "hw.l1icachesize") + 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_FP", FP) + setFeature(c, "hw.optional.arm.FEAT_FP16", FPHP) + setFeature(c, "hw.optional.arm.FEAT_PAuth", GPA) + 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, "", 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) +} diff --git a/vendor/github.com/klauspost/cpuid/v2/os_other_arm64.go b/vendor/github.com/klauspost/cpuid/v2/os_other_arm64.go index 1a951e6..8733ba3 100644 --- a/vendor/github.com/klauspost/cpuid/v2/os_other_arm64.go +++ b/vendor/github.com/klauspost/cpuid/v2/os_other_arm64.go @@ -1,8 +1,7 @@ // Copyright (c) 2020 Klaus Post, released under MIT License. See LICENSE file. -// +build arm64 -// +build !linux -// +build !darwin +//go:build arm64 && !linux && !darwin +// +build arm64,!linux,!darwin package cpuid diff --git a/vendor/github.com/klauspost/cpuid/v2/os_safe_linux_arm64.go b/vendor/github.com/klauspost/cpuid/v2/os_safe_linux_arm64.go index 4d0b8b4..f8f201b 100644 --- a/vendor/github.com/klauspost/cpuid/v2/os_safe_linux_arm64.go +++ b/vendor/github.com/klauspost/cpuid/v2/os_safe_linux_arm64.go @@ -1,6 +1,7 @@ // Copyright (c) 2021 Klaus Post, released under MIT License. See LICENSE file. -//+build nounsafe +//go:build nounsafe +// +build nounsafe package cpuid diff --git a/vendor/github.com/klauspost/cpuid/v2/os_unsafe_linux_arm64.go b/vendor/github.com/klauspost/cpuid/v2/os_unsafe_linux_arm64.go index 3298002..92af622 100644 --- a/vendor/github.com/klauspost/cpuid/v2/os_unsafe_linux_arm64.go +++ b/vendor/github.com/klauspost/cpuid/v2/os_unsafe_linux_arm64.go @@ -1,6 +1,7 @@ // Copyright (c) 2021 Klaus Post, released under MIT License. See LICENSE file. -//+build !nounsafe +//go:build !nounsafe +// +build !nounsafe package cpuid diff --git a/vendor/github.com/klauspost/reedsolomon/.travis.yml b/vendor/github.com/klauspost/reedsolomon/.travis.yml deleted file mode 100644 index fdd619c..0000000 --- a/vendor/github.com/klauspost/reedsolomon/.travis.yml +++ /dev/null @@ -1,65 +0,0 @@ -language: go - -os: - - linux - - osx - - windows - -arch: - - amd64 - - arm64 - - ppc64le - - s390x - -go: - - 1.14.x - - 1.15.x - - 1.16.x - - master - -env: - - GO111MODULE=off CGO_ENABLED=0 - -install: - - go get ./... - -script: - - go vet ./... - - go test -cpu=1,2 . - - go test -tags=noasm -cpu=1,2 . - - go build examples/simple-decoder.go - - go build examples/simple-encoder.go - - go build examples/stream-decoder.go - - go build examples/stream-encoder.go - -jobs: - allow_failures: - - go: 'master' - - arch: s390x - fast_finish: true - include: - - stage: other - go: 1.16.x - os: linux - arch: amd64 - script: - - diff <(gofmt -d .) <(printf "") - - diff <(gofmt -d ./examples) <(printf "") - - go get github.com/klauspost/asmfmt&&go install github.com/klauspost/asmfmt/cmd/asmfmt - - diff <(asmfmt -d .) <(printf "") - - CGO_ENABLED=1 go test -cpu=1 -short -race . - - CGO_ENABLED=1 go test -cpu=2 -short -race . - - CGO_ENABLED=1 go test -tags=noasm -cpu=1 -short -race . - - CGO_ENABLED=1 go test -tags=noasm -cpu=4 -short -race . - - CGO_ENABLED=1 go test -no-avx512 -short -race . - - CGO_ENABLED=1 go test -no-avx512 -no-avx2 -short -race . - - CGO_ENABLED=1 go test -no-avx512 -no-avx2 -no-ssse3 -short -race . - - GOOS=linux GOARCH=386 go test -short . - - stage: other - go: 1.15.x - os: linux - arch: amd64 - script: - - go test -no-avx512 - - go test -no-avx512 -no-avx2 - - go test -no-avx512 -no-avx2 -no-ssse3 diff --git a/vendor/github.com/klauspost/reedsolomon/README.md b/vendor/github.com/klauspost/reedsolomon/README.md index ee8f2ae..c8f1886 100644 --- a/vendor/github.com/klauspost/reedsolomon/README.md +++ b/vendor/github.com/klauspost/reedsolomon/README.md @@ -1,8 +1,5 @@ # Reed-Solomon -[![Go Reference](https://pkg.go.dev/badge/github.com/klauspost/reedsolomon.svg)](https://pkg.go.dev/github.com/klauspost/reedsolomon) [![Build Status][3]][4] - -[3]: https://travis-ci.org/klauspost/reedsolomon.svg?branch=master -[4]: https://travis-ci.org/klauspost/reedsolomon +[![Go Reference](https://pkg.go.dev/badge/github.com/klauspost/reedsolomon.svg)](https://pkg.go.dev/github.com/klauspost/reedsolomon) [![Go](https://github.com/klauspost/reedsolomon/actions/workflows/go.yml/badge.svg)](https://github.com/klauspost/reedsolomon/actions/workflows/go.yml) Reed-Solomon Erasure Coding in Go, with speeds exceeding 1GB/s/cpu core implemented in pure Go. @@ -11,9 +8,12 @@ This is a Go port of the [JavaReedSolomon](https://github.com/Backblaze/JavaReed For an introduction on erasure coding, see the post on the [Backblaze blog](https://www.backblaze.com/blog/reed-solomon/). +For encoding high shard counts (>256) a Leopard implementation is used. +For most platforms this performs close to the original Leopard implementation in terms of speed. + Package home: https://github.com/klauspost/reedsolomon -Godoc: https://pkg.go.dev/github.com/klauspost/reedsolomon?tab=doc +Godoc: https://pkg.go.dev/github.com/klauspost/reedsolomon # Installation To get the package use the standard: @@ -21,11 +21,18 @@ To get the package use the standard: go get -u github.com/klauspost/reedsolomon ``` -Using Go modules recommended. +Using Go modules is recommended. # Changes + +## 2022 + +* Leopard GF16 mode added, for up to 63336 shards. +* [WithJerasureMatrix](https://pkg.go.dev/github.com/klauspost/reedsolomon?tab=doc#WithJerasureMatrix) allows constructing a [Jerasure](https://github.com/tsuraan/Jerasure) compatible matrix. + ## 2021 +* Use `GOAMD64=v4` to enable faster AVX2. * Add progressive shard encoding. * Wider AVX2 loops * Limit concurrency on AVX2, since we are likely memory bound. @@ -33,6 +40,8 @@ Using Go modules recommended. * Allow disabling inversion cache. * Faster AVX2 encoding. +

    + See older changes ## May 2020 @@ -96,6 +105,8 @@ The [`StreamEncoder`](https://godoc.org/github.com/klauspost/reedsolomon#StreamE handles this without modifying the interface. This is a good lesson on why returning interfaces is not a good design. +
    + # Usage This section assumes you know the basics of Reed-Solomon encoding. @@ -105,23 +116,19 @@ This package performs the calculation of the parity sets. The usage is therefore First of all, you need to choose your distribution of data and parity shards. A 'good' distribution is very subjective, and will depend a lot on your usage scenario. -A good starting point is above 5 and below 257 data shards (the maximum supported number), -and the number of parity shards to be 2 or above, and below the number of data shards. To create an encoder with 10 data shards (where your data goes) and 3 parity shards (calculated): ```Go enc, err := reedsolomon.New(10, 3) ``` This encoder will work for all parity sets with this distribution of data and parity shards. -The error will only be set if you specify 0 or negative values in any of the parameters, -or if you specify more than 256 data shards. If you will primarily be using it with one shard size it is recommended to use [`WithAutoGoroutines(shardSize)`](https://pkg.go.dev/github.com/klauspost/reedsolomon?tab=doc#WithAutoGoroutines) as an additional parameter. This will attempt to calculate the optimal number of goroutines to use for the best speed. It is not required that all shards are this size. -The you send and receive data is a simple slice of byte slices; `[][]byte`. +Then you send and receive data that is a simple slice of byte slices; `[][]byte`. In the example above, the top slice must have a length of 13. ```Go @@ -187,6 +194,17 @@ If you are only interested in the data shards (for reading purposes) you can cal err := enc.ReconstructData(data) ``` +If you don't need all data shards you can use `ReconstructSome()`: + +```Go + // Delete two data shards + data[3] = nil + data[7] = nil + + // Reconstruct just the shard 3 + err := enc.ReconstructSome(data, []bool{false, false, false, true, false, false, false, false}) +``` + So to sum up reconstruction: * The number of data/parity shards must match the numbers used for encoding. * The order of shards must be the same as used when encoding. @@ -333,6 +351,8 @@ There is no buffering or timeouts/retry specified. If you want to add that, you For complete examples of a streaming encoder and decoder see the [examples folder](https://github.com/klauspost/reedsolomon/tree/master/examples). +GF16 (more than 256 shards) is not supported by the streaming interface. + # Advanced Options You can modify internal options which affects how jobs are split between and processed by goroutines. @@ -346,8 +366,83 @@ Example of how to supply options: enc, err := reedsolomon.New(10, 3, WithMaxGoroutines(25)) ``` +# Leopard Compatible GF16 + +When you encode more than 256 shards the library will switch to a [Leopard-RS](https://github.com/catid/leopard) implementation. + +This allows encoding up to 65536 shards (data+parity) with the following limitations, similar to leopard: + +* The original and recovery data must not exceed 65536 pieces. +* The shard size *must* each be a multiple of 64 bytes. +* Each buffer should have the same number of bytes. +* Even the last shard must be rounded up to the block size. + +| | Regular | Leopard | +|-----------------|---------|---------| +| Encode | ✓ | ✓ | +| EncodeIdx | ✓ | - | +| Verify | ✓ | ✓ | +| Reconstruct | ✓ | ✓ | +| ReconstructData | ✓ | ✓ | +| ReconstructSome | ✓ | ✓ (+) | +| Update | ✓ | - | +| Split | ✓ | ✓ | +| Join | ✓ | ✓ | + +* (+) Same as calling `ReconstructData`. + +The Split/Join functions will help to split an input to the proper sizes. + +Speed can be expected to be `O(N*log(N))`, compared to the `O(N*N)`. +Reconstruction matrix calculation is more time-consuming, +so be sure to include that as part of any benchmark you run. + +For now SSSE3, AVX2 and AVX512 assembly are available on AMD64 platforms. + +Leopard mode currently always runs as a single goroutine, since multiple gorouties doesn't provide any worthwhile speedup. + +## Forcing Leopard GF16 + +The `WithLeopardGF16(true)` can be used to use Leopard GF16 for all operations. +This is *not* compatible with the Leopard library that has a separate GF8 implementation. + +Benchmark Encoding and Reconstructing *1KB* shards with variable number of shards. +For Cauchy matrix the inversion cache is disabled for a more "fair" test. +Speed is total shard size for each operation. Data shard throughput is speed/2. +AVX2 is used. + +| Encoder | Shards | Encode | Recover All | Recover One | +|--------------|-------------|---------------|--------------|--------------| +| Cauchy | 4+4 | 23076.83 MB/s | 3048.86 MB/s | 5620.84 MB/s | +| Cauchy | 8+8 | 15206.87 MB/s | 3041.99 MB/s | 7173.71 MB/s | +| Cauchy | 16+16 | 7427.47 MB/s | 1384.58 MB/s | 6343.85 MB/s | +| Cauchy | 32+32 | 3785.64 MB/s | 557.60 MB/s | 4660.27 MB/s | +| Cauchy | 64+64 | 1911.93 MB/s | 160.54 MB/s | 2864.63 MB/s | +| Cauchy | 128+128 | 963.83 MB/s | 42.81 MB/s | 1597.93 MB/s | +| Leopard GF16 | 4+4 | 18468.32 MB/s | 10.45 MB/s | 10.30 MB/s | +| Leopard GF16 | 8+8 | 10293.79 MB/s | 20.83 MB/s | 20.51 MB/s | +| Leopard GF16 | 16+16 | 12386.04 MB/s | 40.80 MB/s | 40.47 MB/s | +| Leopard GF16 | 32+32 | 7347.35 MB/s | 81.15 MB/s | 79.80 MB/s | +| Leopard GF16 | 64+64 | 8299.63 MB/s | 150.47 MB/s | 154.15 MB/s | +| Leopard GF16 | 128+128 | 5629.04 MB/s | 278.84 MB/s | 289.15 MB/s | +| Leopard GF16 | 256+256 | 6158.66 MB/s | 454.14 MB/s | 506.70 MB/s | +| Leopard GF16 | 512+512 | 4418.58 MB/s | 685.75 MB/s | 801.63 MB/s | +| Leopard GF16 | 1024+1024 | 4778.05 MB/s | 814.51 MB/s | 1080.19 MB/s | +| Leopard GF16 | 2048+2048 | 3417.05 MB/s | 911.64 MB/s | 1179.48 MB/s | +| Leopard GF16 | 4096+4096 | 3209.41 MB/s | 729.13 MB/s | 1135.06 MB/s | +| Leopard GF16 | 8192+8192 | 2034.11 MB/s | 604.52 MB/s | 842.13 MB/s | +| Leopard GF16 | 16384+16384 | 1525.88 MB/s | 486.74 MB/s | 750.01 MB/s | +| Leopard GF16 | 32768+32768 | 1138.67 MB/s | 482.81 MB/s | 712.73 MB/s | + +"Traditional" encoding is faster until somewhere between 16 and 32 shards. +Leopard provides fast encoding in all cases, but shows a significant overhead for reconstruction. + +Calculating the reconstruction matrix takes a significant amount of computation. +With bigger shards that will be smaller. Arguably, fewer shards typically also means bigger shards. +Due to the high shard count caching reconstruction matrices generally isn't feasible for Leopard. # Performance + Performance depends mainly on the number of parity shards. In rough terms, doubling the number of parity shards will double the encoding time. @@ -356,27 +451,16 @@ For reference each shard is 1MB random data, and 16 CPU cores are used for encod | Data | Parity | Go MB/s | SSSE3 MB/s | AVX2 MB/s | |------|--------|---------|------------|-----------| -| 5 | 2 | 14287 | 66355 | 108755 | -| 8 | 8 | 5569 | 34298 | 70516 | -| 10 | 4 | 6766 | 48237 | 93875 | -| 50 | 20 | 1540 | 12130 | 22090 | +| 5 | 2 | 20,772 | 66,355 | 108,755 | +| 8 | 8 | 6,815 | 38,338 | 70,516 | +| 10 | 4 | 9,245 | 48,237 | 93,875 | +| 50 | 20 | 2,063 | 12,130 | 22,828 | The throughput numbers here is the size of the encoded data and parity shards. If `runtime.GOMAXPROCS()` is set to a value higher than 1, the encoder will use multiple goroutines to perform the calculations in `Verify`, `Encode` and `Reconstruct`. -Example of performance scaling on AMD Ryzen 3950X - 16 physical cores, 32 logical cores, AVX 2. -The example uses 10 blocks with 1MB data each and 4 parity blocks. - -| Threads | Speed | -|---------|------------| -| 1 | 9979 MB/s | -| 2 | 18870 MB/s | -| 4 | 33697 MB/s | -| 8 | 51531 MB/s | -| 16 | 59204 MB/s | - Benchmarking `Reconstruct()` followed by a `Verify()` (=`all`) versus just calling `ReconstructData()` (=`data`) gives the following result: ``` @@ -390,22 +474,9 @@ BenchmarkReconstruct50x20x1M-8 1364.35 4189.79 3.07x BenchmarkReconstruct10x4x16M-8 1484.35 5779.53 3.89x ``` -# Performance on AVX512 +The performance on AVX512 has been accelerated for CPUs when available. -The performance on AVX512 has been accelerated for Intel CPUs. -This gives speedups on a per-core basis typically up to 2x compared to -AVX2 as can be seen in the following table: - -``` -[...] -``` - -This speedup has been achieved by computing multiple parity blocks in parallel as opposed to one after the other. -In doing so it is possible to minimize the memory bandwidth required for loading all data shards. -At the same time the calculations are performed in the 512-bit wide ZMM registers and the surplus of ZMM -registers (32 in total) is used to keep more data around (most notably the matrix coefficients). - -# Performance on ARM64 NEON +## ARM64 NEON By exploiting NEON instructions the performance for ARM has been accelerated. Below are the performance numbers for a single core on an EC2 m6g.16xlarge (Graviton2) instance (Amazon Linux 2): @@ -420,7 +491,7 @@ BenchmarkGaloisXor1M-64 10000 100322 ns/op 10452.13 MB/s # Performance on ppc64le The performance for ppc64le has been accelerated. -This gives roughly a 10x performance improvement on this architecture as can been seen below: +This gives roughly a 10x performance improvement on this architecture as can be seen below: ``` benchmark old MB/s new MB/s speedup @@ -430,9 +501,6 @@ BenchmarkGaloisXor128K-160 862.02 7905.00 9.17x BenchmarkGaloisXor1M-160 784.60 6296.65 8.03x ``` -# asm2plan9s - -[asm2plan9s](https://github.com/fwessels/asm2plan9s) is used for assembling the AVX2 instructions into their BYTE/WORD/LONG equivalents. # Links * [Backblaze Open Sources Reed-Solomon Erasure Coding Source Code](https://www.backblaze.com/blog/reed-solomon/). @@ -443,6 +511,7 @@ BenchmarkGaloisXor1M-160 784.60 6296.65 8.03x * [reed-solomon-erasure](https://github.com/darrenldl/reed-solomon-erasure). Compatible Rust implementation. * [go-erasure](https://github.com/somethingnew2-0/go-erasure). A similar library using cgo, slower in my tests. * [Screaming Fast Galois Field Arithmetic](http://www.snia.org/sites/default/files2/SDC2013/presentations/NewThinking/EthanMiller_Screaming_Fast_Galois_Field%20Arithmetic_SIMD%20Instructions.pdf). Basis for SSE3 optimizations. +* [Leopard-RS](https://github.com/catid/leopard) C library used as basis for GF16 implementation. # License diff --git a/vendor/github.com/klauspost/reedsolomon/appveyor.yml b/vendor/github.com/klauspost/reedsolomon/appveyor.yml deleted file mode 100644 index 9bb067f..0000000 --- a/vendor/github.com/klauspost/reedsolomon/appveyor.yml +++ /dev/null @@ -1,20 +0,0 @@ -os: Visual Studio 2015 - -platform: x64 - -clone_folder: c:\gopath\src\github.com\klauspost\reedsolomon - -# environment variables -environment: - GOPATH: c:\gopath - -install: - - echo %PATH% - - echo %GOPATH% - - go version - - go env - - go get -d ./... - -build_script: - - go test -v -cpu=2 ./... - - go test -cpu=1,2,4 -short -race ./... diff --git a/vendor/github.com/klauspost/reedsolomon/galois.go b/vendor/github.com/klauspost/reedsolomon/galois.go index 30e9e03..703f209 100644 --- a/vendor/github.com/klauspost/reedsolomon/galois.go +++ b/vendor/github.com/klauspost/reedsolomon/galois.go @@ -6,6 +6,8 @@ package reedsolomon +import "encoding/binary" + const ( // The number of elements in the field. fieldSize = 256 @@ -929,3 +931,24 @@ func genAvx2Matrix(matrixRows [][]byte, inputs, inIdx, outputs int, dst []byte) } return dst } + +// xor slices writing to out. +func sliceXorGo(in, out []byte, _ *options) { + for len(out) >= 32 { + inS := in[:32] + v0 := binary.LittleEndian.Uint64(out[:8]) ^ binary.LittleEndian.Uint64(inS[:8]) + v1 := binary.LittleEndian.Uint64(out[8:16]) ^ binary.LittleEndian.Uint64(inS[8:16]) + v2 := binary.LittleEndian.Uint64(out[16:24]) ^ binary.LittleEndian.Uint64(inS[16:24]) + v3 := binary.LittleEndian.Uint64(out[24:32]) ^ binary.LittleEndian.Uint64(inS[24:32]) + binary.LittleEndian.PutUint64(out[:8], v0) + binary.LittleEndian.PutUint64(out[8:16], v1) + binary.LittleEndian.PutUint64(out[16:24], v2) + binary.LittleEndian.PutUint64(out[24:32], v3) + out = out[32:] + in = in[32:] + } + out = out[:len(in)] + for n, input := range in { + out[n] ^= input + } +} diff --git a/vendor/github.com/klauspost/reedsolomon/galoisAvx512_amd64.go b/vendor/github.com/klauspost/reedsolomon/galoisAvx512_amd64.go index 79207e6..9a249d2 100644 --- a/vendor/github.com/klauspost/reedsolomon/galoisAvx512_amd64.go +++ b/vendor/github.com/klauspost/reedsolomon/galoisAvx512_amd64.go @@ -104,7 +104,7 @@ func setupMatrix84(matrixRows [][]byte, inputOffset, outputOffset int, matrix *[ // Invoke AVX512 routine for single output row in parallel func galMulAVX512Parallel81(in, out [][]byte, matrixRows [][]byte, inputOffset, outputOffset, start, stop int, matrix81 *[matrixSize81]byte) { done := stop - start - if done <= 0 { + if done <= 0 || len(in) == 0 || len(out) == 0 { return } @@ -139,7 +139,7 @@ func galMulAVX512Parallel81(in, out [][]byte, matrixRows [][]byte, inputOffset, // Invoke AVX512 routine for 2 output rows in parallel func galMulAVX512Parallel82(in, out [][]byte, matrixRows [][]byte, inputOffset, outputOffset, start, stop int, matrix82 *[matrixSize82]byte) { done := stop - start - if done <= 0 { + if done <= 0 || len(in) == 0 || len(out) == 0 { return } @@ -174,7 +174,7 @@ func galMulAVX512Parallel82(in, out [][]byte, matrixRows [][]byte, inputOffset, // Invoke AVX512 routine for 4 output rows in parallel func galMulAVX512Parallel84(in, out [][]byte, matrixRows [][]byte, inputOffset, outputOffset, start, stop int, matrix84 *[matrixSize84]byte) { done := stop - start - if done <= 0 { + if done <= 0 || len(in) == 0 || len(out) == 0 { return } diff --git a/vendor/github.com/klauspost/reedsolomon/galois_amd64.go b/vendor/github.com/klauspost/reedsolomon/galois_amd64.go index d722e31..ae6f289 100644 --- a/vendor/github.com/klauspost/reedsolomon/galois_amd64.go +++ b/vendor/github.com/klauspost/reedsolomon/galois_amd64.go @@ -132,9 +132,215 @@ func sliceXor(in, out []byte, o *options) { in = in[done:] out = out[done:] } + } else { + sliceXorGo(in, out, o) + return } out = out[:len(in)] for i := range in { out[i] ^= in[i] } } + +// 4-way butterfly +func ifftDIT4(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) { + if len(work[0]) == 0 { + return + } + + t01 := &multiply256LUT[log_m01] + t23 := &multiply256LUT[log_m23] + t02 := &multiply256LUT[log_m02] + if o.useAVX512 { + if log_m01 == modulus { + if log_m23 == modulus { + if log_m02 == modulus { + ifftDIT4_avx512_7(work, dist*24, t01, t23, t02) + } else { + ifftDIT4_avx512_3(work, dist*24, t01, t23, t02) + } + } else { + if log_m02 == modulus { + ifftDIT4_avx512_5(work, dist*24, t01, t23, t02) + } else { + ifftDIT4_avx512_1(work, dist*24, t01, t23, t02) + } + } + } else { + if log_m23 == modulus { + if log_m02 == modulus { + ifftDIT4_avx512_6(work, dist*24, t01, t23, t02) + } else { + ifftDIT4_avx512_2(work, dist*24, t01, t23, t02) + } + } else { + if log_m02 == modulus { + ifftDIT4_avx512_4(work, dist*24, t01, t23, t02) + } else { + ifftDIT4_avx512_0(work, dist*24, t01, t23, t02) + } + } + } + return + } else if o.useAVX2 { + if log_m01 == modulus { + if log_m23 == modulus { + if log_m02 == modulus { + ifftDIT4_avx2_7(work, dist*24, t01, t23, t02) + } else { + ifftDIT4_avx2_3(work, dist*24, t01, t23, t02) + } + } else { + if log_m02 == modulus { + ifftDIT4_avx2_5(work, dist*24, t01, t23, t02) + } else { + ifftDIT4_avx2_1(work, dist*24, t01, t23, t02) + } + } + } else { + if log_m23 == modulus { + if log_m02 == modulus { + ifftDIT4_avx2_6(work, dist*24, t01, t23, t02) + } else { + ifftDIT4_avx2_2(work, dist*24, t01, t23, t02) + } + } else { + if log_m02 == modulus { + ifftDIT4_avx2_4(work, dist*24, t01, t23, t02) + } else { + ifftDIT4_avx2_0(work, dist*24, t01, t23, t02) + } + } + } + return + } + ifftDIT4Ref(work, dist, log_m01, log_m23, log_m02, o) +} + +func fftDIT4(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) { + if len(work[0]) == 0 { + return + } + + t01 := &multiply256LUT[log_m01] + t23 := &multiply256LUT[log_m23] + t02 := &multiply256LUT[log_m02] + if o.useAVX512 { + if log_m02 == modulus { + if log_m01 == modulus { + if log_m23 == modulus { + fftDIT4_avx512_7(work, dist*24, t01, t23, t02) + } else { + fftDIT4_avx512_3(work, dist*24, t01, t23, t02) + } + } else { + if log_m23 == modulus { + fftDIT4_avx512_5(work, dist*24, t01, t23, t02) + } else { + fftDIT4_avx512_1(work, dist*24, t01, t23, t02) + } + } + } else { + if log_m01 == modulus { + if log_m23 == modulus { + fftDIT4_avx512_6(work, dist*24, t01, t23, t02) + } else { + fftDIT4_avx512_2(work, dist*24, t01, t23, t02) + } + } else { + if log_m23 == modulus { + fftDIT4_avx512_4(work, dist*24, t01, t23, t02) + } else { + fftDIT4_avx512_0(work, dist*24, t01, t23, t02) + } + } + } + return + } else if o.useAVX2 { + if log_m02 == modulus { + if log_m01 == modulus { + if log_m23 == modulus { + fftDIT4_avx2_7(work, dist*24, t01, t23, t02) + } else { + fftDIT4_avx2_3(work, dist*24, t01, t23, t02) + } + } else { + if log_m23 == modulus { + fftDIT4_avx2_5(work, dist*24, t01, t23, t02) + } else { + fftDIT4_avx2_1(work, dist*24, t01, t23, t02) + } + } + } else { + if log_m01 == modulus { + if log_m23 == modulus { + fftDIT4_avx2_6(work, dist*24, t01, t23, t02) + } else { + fftDIT4_avx2_2(work, dist*24, t01, t23, t02) + } + } else { + if log_m23 == modulus { + fftDIT4_avx2_4(work, dist*24, t01, t23, t02) + } else { + fftDIT4_avx2_0(work, dist*24, t01, t23, t02) + } + } + } + return + } + fftDIT4Ref(work, dist, log_m01, log_m23, log_m02, o) +} + +// 2-way butterfly forward +func fftDIT2(x, y []byte, log_m ffe, o *options) { + if o.useAVX2 { + if len(x) > 0 { + tmp := &multiply256LUT[log_m] + fftDIT2_avx2(x, y, tmp) + } + } else if o.useSSSE3 { + if len(x) > 0 { + tmp := &multiply256LUT[log_m] + fftDIT2_ssse3(x, y, tmp) + } + } else { + // Reference version: + refMulAdd(x, y, log_m) + sliceXor(x, y, o) + } +} + +// 2-way butterfly +func ifftDIT2(x, y []byte, log_m ffe, o *options) { + if o.useAVX2 { + if len(x) > 0 { + tmp := &multiply256LUT[log_m] + ifftDIT2_avx2(x, y, tmp) + } + } else if o.useSSSE3 { + if len(x) > 0 { + tmp := &multiply256LUT[log_m] + ifftDIT2_ssse3(x, y, tmp) + } + } else { + // Reference version: + sliceXor(x, y, o) + refMulAdd(x, y, log_m) + } +} + +func mulgf16(x, y []byte, log_m ffe, o *options) { + if o.useAVX2 { + if len(x) > 0 { + tmp := &multiply256LUT[log_m] + mulgf16_avx2(x, y, tmp) + } + } else if o.useSSSE3 { + if len(x) > 0 { + tmp := &multiply256LUT[log_m] + mulgf16_ssse3(x, y, tmp) + } + } else { + refMul(x, y, log_m) + } +} diff --git a/vendor/github.com/klauspost/reedsolomon/galois_arm64.go b/vendor/github.com/klauspost/reedsolomon/galois_arm64.go index df79a98..92b67b8 100644 --- a/vendor/github.com/klauspost/reedsolomon/galois_arm64.go +++ b/vendor/github.com/klauspost/reedsolomon/galois_arm64.go @@ -64,3 +64,33 @@ func sliceXor(in, out []byte, o *options) { } } } + +// 4-way butterfly +func ifftDIT4(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) { + ifftDIT4Ref(work, dist, log_m01, log_m23, log_m02, o) +} + +// 4-way butterfly +func fftDIT4(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) { + fftDIT4Ref(work, dist, log_m01, log_m23, log_m02, o) +} + +// 2-way butterfly forward +func fftDIT2(x, y []byte, log_m ffe, o *options) { + // Reference version: + refMulAdd(x, y, log_m) + // 64 byte aligned, always full. + galXorNEON(x, y) +} + +// 2-way butterfly +func ifftDIT2(x, y []byte, log_m ffe, o *options) { + // 64 byte aligned, always full. + galXorNEON(x, y) + // Reference version: + refMulAdd(x, y, log_m) +} + +func mulgf16(x, y []byte, log_m ffe, o *options) { + refMul(x, y, log_m) +} diff --git a/vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.go b/vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.go index 817c7ea..24d6a02 100644 --- a/vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.go +++ b/vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.go @@ -1,1176 +1,1551 @@ // Code generated by command: go run gen.go -out ../galois_gen_amd64.s -stubs ../galois_gen_amd64.go -pkg=reedsolomon. DO NOT EDIT. //go:build !appengine && !noasm && !nogen && gc -// +build !appengine,!noasm,!nogen,gc package reedsolomon +func _dummy_() + // mulAvxTwo_1x1 takes 1 inputs and produces 1 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_1x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x1_64 takes 1 inputs and produces 1 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_1x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x1Xor takes 1 inputs and produces 1 outputs. +// //go:noescape func mulAvxTwo_1x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x1_64Xor takes 1 inputs and produces 1 outputs. +// //go:noescape func mulAvxTwo_1x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x2 takes 1 inputs and produces 2 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_1x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x2_64 takes 1 inputs and produces 2 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_1x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x2Xor takes 1 inputs and produces 2 outputs. +// //go:noescape func mulAvxTwo_1x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x2_64Xor takes 1 inputs and produces 2 outputs. +// //go:noescape func mulAvxTwo_1x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x3 takes 1 inputs and produces 3 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_1x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x3_64 takes 1 inputs and produces 3 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_1x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x3Xor takes 1 inputs and produces 3 outputs. +// //go:noescape func mulAvxTwo_1x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x3_64Xor takes 1 inputs and produces 3 outputs. +// //go:noescape func mulAvxTwo_1x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x4 takes 1 inputs and produces 4 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_1x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x4Xor takes 1 inputs and produces 4 outputs. +// //go:noescape func mulAvxTwo_1x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x5 takes 1 inputs and produces 5 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_1x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x5Xor takes 1 inputs and produces 5 outputs. +// //go:noescape func mulAvxTwo_1x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x6 takes 1 inputs and produces 6 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_1x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x6Xor takes 1 inputs and produces 6 outputs. +// //go:noescape func mulAvxTwo_1x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x7 takes 1 inputs and produces 7 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_1x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x7Xor takes 1 inputs and produces 7 outputs. +// //go:noescape func mulAvxTwo_1x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x8 takes 1 inputs and produces 8 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_1x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x8Xor takes 1 inputs and produces 8 outputs. +// //go:noescape func mulAvxTwo_1x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x9 takes 1 inputs and produces 9 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_1x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x9Xor takes 1 inputs and produces 9 outputs. +// //go:noescape func mulAvxTwo_1x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x10 takes 1 inputs and produces 10 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_1x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_1x10Xor takes 1 inputs and produces 10 outputs. +// //go:noescape func mulAvxTwo_1x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x1 takes 2 inputs and produces 1 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_2x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x1_64 takes 2 inputs and produces 1 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_2x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x1Xor takes 2 inputs and produces 1 outputs. +// //go:noescape func mulAvxTwo_2x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x1_64Xor takes 2 inputs and produces 1 outputs. +// //go:noescape func mulAvxTwo_2x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x2 takes 2 inputs and produces 2 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_2x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x2_64 takes 2 inputs and produces 2 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_2x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x2Xor takes 2 inputs and produces 2 outputs. +// //go:noescape func mulAvxTwo_2x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x2_64Xor takes 2 inputs and produces 2 outputs. +// //go:noescape func mulAvxTwo_2x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x3 takes 2 inputs and produces 3 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_2x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x3_64 takes 2 inputs and produces 3 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_2x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x3Xor takes 2 inputs and produces 3 outputs. +// //go:noescape func mulAvxTwo_2x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x3_64Xor takes 2 inputs and produces 3 outputs. +// //go:noescape func mulAvxTwo_2x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x4 takes 2 inputs and produces 4 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_2x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x4Xor takes 2 inputs and produces 4 outputs. +// //go:noescape func mulAvxTwo_2x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x5 takes 2 inputs and produces 5 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_2x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x5Xor takes 2 inputs and produces 5 outputs. +// //go:noescape func mulAvxTwo_2x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x6 takes 2 inputs and produces 6 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_2x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x6Xor takes 2 inputs and produces 6 outputs. +// //go:noescape func mulAvxTwo_2x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x7 takes 2 inputs and produces 7 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_2x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x7Xor takes 2 inputs and produces 7 outputs. +// //go:noescape func mulAvxTwo_2x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x8 takes 2 inputs and produces 8 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_2x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x8Xor takes 2 inputs and produces 8 outputs. +// //go:noescape func mulAvxTwo_2x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x9 takes 2 inputs and produces 9 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_2x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x9Xor takes 2 inputs and produces 9 outputs. +// //go:noescape func mulAvxTwo_2x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x10 takes 2 inputs and produces 10 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_2x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_2x10Xor takes 2 inputs and produces 10 outputs. +// //go:noescape func mulAvxTwo_2x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x1 takes 3 inputs and produces 1 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_3x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x1_64 takes 3 inputs and produces 1 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_3x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x1Xor takes 3 inputs and produces 1 outputs. +// //go:noescape func mulAvxTwo_3x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x1_64Xor takes 3 inputs and produces 1 outputs. +// //go:noescape func mulAvxTwo_3x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x2 takes 3 inputs and produces 2 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_3x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x2_64 takes 3 inputs and produces 2 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_3x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x2Xor takes 3 inputs and produces 2 outputs. +// //go:noescape func mulAvxTwo_3x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x2_64Xor takes 3 inputs and produces 2 outputs. +// //go:noescape func mulAvxTwo_3x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x3 takes 3 inputs and produces 3 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_3x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x3_64 takes 3 inputs and produces 3 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_3x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x3Xor takes 3 inputs and produces 3 outputs. +// //go:noescape func mulAvxTwo_3x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x3_64Xor takes 3 inputs and produces 3 outputs. +// //go:noescape func mulAvxTwo_3x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x4 takes 3 inputs and produces 4 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_3x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x4Xor takes 3 inputs and produces 4 outputs. +// //go:noescape func mulAvxTwo_3x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x5 takes 3 inputs and produces 5 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_3x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x5Xor takes 3 inputs and produces 5 outputs. +// //go:noescape func mulAvxTwo_3x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x6 takes 3 inputs and produces 6 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_3x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x6Xor takes 3 inputs and produces 6 outputs. +// //go:noescape func mulAvxTwo_3x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x7 takes 3 inputs and produces 7 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_3x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x7Xor takes 3 inputs and produces 7 outputs. +// //go:noescape func mulAvxTwo_3x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x8 takes 3 inputs and produces 8 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_3x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x8Xor takes 3 inputs and produces 8 outputs. +// //go:noescape func mulAvxTwo_3x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x9 takes 3 inputs and produces 9 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_3x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x9Xor takes 3 inputs and produces 9 outputs. +// //go:noescape func mulAvxTwo_3x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x10 takes 3 inputs and produces 10 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_3x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_3x10Xor takes 3 inputs and produces 10 outputs. +// //go:noescape func mulAvxTwo_3x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x1 takes 4 inputs and produces 1 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_4x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x1_64 takes 4 inputs and produces 1 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_4x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x1Xor takes 4 inputs and produces 1 outputs. +// //go:noescape func mulAvxTwo_4x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x1_64Xor takes 4 inputs and produces 1 outputs. +// //go:noescape func mulAvxTwo_4x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x2 takes 4 inputs and produces 2 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_4x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x2_64 takes 4 inputs and produces 2 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_4x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x2Xor takes 4 inputs and produces 2 outputs. +// //go:noescape func mulAvxTwo_4x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x2_64Xor takes 4 inputs and produces 2 outputs. +// //go:noescape func mulAvxTwo_4x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x3 takes 4 inputs and produces 3 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_4x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x3_64 takes 4 inputs and produces 3 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_4x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x3Xor takes 4 inputs and produces 3 outputs. +// //go:noescape func mulAvxTwo_4x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x3_64Xor takes 4 inputs and produces 3 outputs. +// //go:noescape func mulAvxTwo_4x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x4 takes 4 inputs and produces 4 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_4x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x4Xor takes 4 inputs and produces 4 outputs. +// //go:noescape func mulAvxTwo_4x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x5 takes 4 inputs and produces 5 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_4x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x5Xor takes 4 inputs and produces 5 outputs. +// //go:noescape func mulAvxTwo_4x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x6 takes 4 inputs and produces 6 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_4x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x6Xor takes 4 inputs and produces 6 outputs. +// //go:noescape func mulAvxTwo_4x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x7 takes 4 inputs and produces 7 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_4x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x7Xor takes 4 inputs and produces 7 outputs. +// //go:noescape func mulAvxTwo_4x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x8 takes 4 inputs and produces 8 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_4x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x8Xor takes 4 inputs and produces 8 outputs. +// //go:noescape func mulAvxTwo_4x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x9 takes 4 inputs and produces 9 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_4x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x9Xor takes 4 inputs and produces 9 outputs. +// //go:noescape func mulAvxTwo_4x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x10 takes 4 inputs and produces 10 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_4x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_4x10Xor takes 4 inputs and produces 10 outputs. +// //go:noescape func mulAvxTwo_4x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x1 takes 5 inputs and produces 1 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_5x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x1_64 takes 5 inputs and produces 1 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_5x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x1Xor takes 5 inputs and produces 1 outputs. +// //go:noescape func mulAvxTwo_5x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x1_64Xor takes 5 inputs and produces 1 outputs. +// //go:noescape func mulAvxTwo_5x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x2 takes 5 inputs and produces 2 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_5x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x2_64 takes 5 inputs and produces 2 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_5x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x2Xor takes 5 inputs and produces 2 outputs. +// //go:noescape func mulAvxTwo_5x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x2_64Xor takes 5 inputs and produces 2 outputs. +// //go:noescape func mulAvxTwo_5x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x3 takes 5 inputs and produces 3 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_5x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x3_64 takes 5 inputs and produces 3 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_5x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x3Xor takes 5 inputs and produces 3 outputs. +// //go:noescape func mulAvxTwo_5x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x3_64Xor takes 5 inputs and produces 3 outputs. +// //go:noescape func mulAvxTwo_5x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x4 takes 5 inputs and produces 4 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_5x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x4Xor takes 5 inputs and produces 4 outputs. +// //go:noescape func mulAvxTwo_5x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x5 takes 5 inputs and produces 5 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_5x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x5Xor takes 5 inputs and produces 5 outputs. +// //go:noescape func mulAvxTwo_5x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x6 takes 5 inputs and produces 6 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_5x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x6Xor takes 5 inputs and produces 6 outputs. +// //go:noescape func mulAvxTwo_5x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x7 takes 5 inputs and produces 7 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_5x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x7Xor takes 5 inputs and produces 7 outputs. +// //go:noescape func mulAvxTwo_5x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x8 takes 5 inputs and produces 8 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_5x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x8Xor takes 5 inputs and produces 8 outputs. +// //go:noescape func mulAvxTwo_5x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x9 takes 5 inputs and produces 9 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_5x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x9Xor takes 5 inputs and produces 9 outputs. +// //go:noescape func mulAvxTwo_5x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x10 takes 5 inputs and produces 10 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_5x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_5x10Xor takes 5 inputs and produces 10 outputs. +// //go:noescape func mulAvxTwo_5x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x1 takes 6 inputs and produces 1 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_6x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x1_64 takes 6 inputs and produces 1 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_6x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x1Xor takes 6 inputs and produces 1 outputs. +// //go:noescape func mulAvxTwo_6x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x1_64Xor takes 6 inputs and produces 1 outputs. +// //go:noescape func mulAvxTwo_6x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x2 takes 6 inputs and produces 2 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_6x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x2_64 takes 6 inputs and produces 2 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_6x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x2Xor takes 6 inputs and produces 2 outputs. +// //go:noescape func mulAvxTwo_6x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x2_64Xor takes 6 inputs and produces 2 outputs. +// //go:noescape func mulAvxTwo_6x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x3 takes 6 inputs and produces 3 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_6x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x3_64 takes 6 inputs and produces 3 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_6x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x3Xor takes 6 inputs and produces 3 outputs. +// //go:noescape func mulAvxTwo_6x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x3_64Xor takes 6 inputs and produces 3 outputs. +// //go:noescape func mulAvxTwo_6x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x4 takes 6 inputs and produces 4 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_6x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x4Xor takes 6 inputs and produces 4 outputs. +// //go:noescape func mulAvxTwo_6x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x5 takes 6 inputs and produces 5 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_6x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x5Xor takes 6 inputs and produces 5 outputs. +// //go:noescape func mulAvxTwo_6x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x6 takes 6 inputs and produces 6 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_6x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x6Xor takes 6 inputs and produces 6 outputs. +// //go:noescape func mulAvxTwo_6x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x7 takes 6 inputs and produces 7 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_6x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x7Xor takes 6 inputs and produces 7 outputs. +// //go:noescape func mulAvxTwo_6x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x8 takes 6 inputs and produces 8 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_6x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x8Xor takes 6 inputs and produces 8 outputs. +// //go:noescape func mulAvxTwo_6x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x9 takes 6 inputs and produces 9 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_6x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x9Xor takes 6 inputs and produces 9 outputs. +// //go:noescape func mulAvxTwo_6x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x10 takes 6 inputs and produces 10 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_6x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_6x10Xor takes 6 inputs and produces 10 outputs. +// //go:noescape func mulAvxTwo_6x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x1 takes 7 inputs and produces 1 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_7x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x1_64 takes 7 inputs and produces 1 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_7x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x1Xor takes 7 inputs and produces 1 outputs. +// //go:noescape func mulAvxTwo_7x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x1_64Xor takes 7 inputs and produces 1 outputs. +// //go:noescape func mulAvxTwo_7x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x2 takes 7 inputs and produces 2 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_7x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x2_64 takes 7 inputs and produces 2 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_7x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x2Xor takes 7 inputs and produces 2 outputs. +// //go:noescape func mulAvxTwo_7x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x2_64Xor takes 7 inputs and produces 2 outputs. +// //go:noescape func mulAvxTwo_7x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x3 takes 7 inputs and produces 3 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_7x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x3_64 takes 7 inputs and produces 3 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_7x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x3Xor takes 7 inputs and produces 3 outputs. +// //go:noescape func mulAvxTwo_7x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x3_64Xor takes 7 inputs and produces 3 outputs. +// //go:noescape func mulAvxTwo_7x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x4 takes 7 inputs and produces 4 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_7x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x4Xor takes 7 inputs and produces 4 outputs. +// //go:noescape func mulAvxTwo_7x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x5 takes 7 inputs and produces 5 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_7x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x5Xor takes 7 inputs and produces 5 outputs. +// //go:noescape func mulAvxTwo_7x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x6 takes 7 inputs and produces 6 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_7x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x6Xor takes 7 inputs and produces 6 outputs. +// //go:noescape func mulAvxTwo_7x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x7 takes 7 inputs and produces 7 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_7x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x7Xor takes 7 inputs and produces 7 outputs. +// //go:noescape func mulAvxTwo_7x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x8 takes 7 inputs and produces 8 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_7x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x8Xor takes 7 inputs and produces 8 outputs. +// //go:noescape func mulAvxTwo_7x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x9 takes 7 inputs and produces 9 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_7x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x9Xor takes 7 inputs and produces 9 outputs. +// //go:noescape func mulAvxTwo_7x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x10 takes 7 inputs and produces 10 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_7x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_7x10Xor takes 7 inputs and produces 10 outputs. +// //go:noescape func mulAvxTwo_7x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x1 takes 8 inputs and produces 1 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_8x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x1_64 takes 8 inputs and produces 1 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_8x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x1Xor takes 8 inputs and produces 1 outputs. +// //go:noescape func mulAvxTwo_8x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x1_64Xor takes 8 inputs and produces 1 outputs. +// //go:noescape func mulAvxTwo_8x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x2 takes 8 inputs and produces 2 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_8x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x2_64 takes 8 inputs and produces 2 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_8x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x2Xor takes 8 inputs and produces 2 outputs. +// //go:noescape func mulAvxTwo_8x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x2_64Xor takes 8 inputs and produces 2 outputs. +// //go:noescape func mulAvxTwo_8x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x3 takes 8 inputs and produces 3 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_8x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x3_64 takes 8 inputs and produces 3 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_8x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x3Xor takes 8 inputs and produces 3 outputs. +// //go:noescape func mulAvxTwo_8x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x3_64Xor takes 8 inputs and produces 3 outputs. +// //go:noescape func mulAvxTwo_8x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x4 takes 8 inputs and produces 4 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_8x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x4Xor takes 8 inputs and produces 4 outputs. +// //go:noescape func mulAvxTwo_8x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x5 takes 8 inputs and produces 5 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_8x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x5Xor takes 8 inputs and produces 5 outputs. +// //go:noescape func mulAvxTwo_8x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x6 takes 8 inputs and produces 6 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_8x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x6Xor takes 8 inputs and produces 6 outputs. +// //go:noescape func mulAvxTwo_8x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x7 takes 8 inputs and produces 7 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_8x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x7Xor takes 8 inputs and produces 7 outputs. +// //go:noescape func mulAvxTwo_8x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x8 takes 8 inputs and produces 8 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_8x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x8Xor takes 8 inputs and produces 8 outputs. +// //go:noescape func mulAvxTwo_8x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x9 takes 8 inputs and produces 9 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_8x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x9Xor takes 8 inputs and produces 9 outputs. +// //go:noescape func mulAvxTwo_8x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x10 takes 8 inputs and produces 10 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_8x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_8x10Xor takes 8 inputs and produces 10 outputs. +// //go:noescape func mulAvxTwo_8x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x1 takes 9 inputs and produces 1 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_9x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x1_64 takes 9 inputs and produces 1 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_9x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x1Xor takes 9 inputs and produces 1 outputs. +// //go:noescape func mulAvxTwo_9x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x1_64Xor takes 9 inputs and produces 1 outputs. +// //go:noescape func mulAvxTwo_9x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x2 takes 9 inputs and produces 2 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_9x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x2_64 takes 9 inputs and produces 2 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_9x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x2Xor takes 9 inputs and produces 2 outputs. +// //go:noescape func mulAvxTwo_9x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x2_64Xor takes 9 inputs and produces 2 outputs. +// //go:noescape func mulAvxTwo_9x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x3 takes 9 inputs and produces 3 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_9x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x3_64 takes 9 inputs and produces 3 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_9x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x3Xor takes 9 inputs and produces 3 outputs. +// //go:noescape func mulAvxTwo_9x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x3_64Xor takes 9 inputs and produces 3 outputs. +// //go:noescape func mulAvxTwo_9x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x4 takes 9 inputs and produces 4 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_9x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x4Xor takes 9 inputs and produces 4 outputs. +// //go:noescape func mulAvxTwo_9x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x5 takes 9 inputs and produces 5 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_9x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x5Xor takes 9 inputs and produces 5 outputs. +// //go:noescape func mulAvxTwo_9x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x6 takes 9 inputs and produces 6 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_9x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x6Xor takes 9 inputs and produces 6 outputs. +// //go:noescape func mulAvxTwo_9x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x7 takes 9 inputs and produces 7 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_9x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x7Xor takes 9 inputs and produces 7 outputs. +// //go:noescape func mulAvxTwo_9x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x8 takes 9 inputs and produces 8 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_9x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x8Xor takes 9 inputs and produces 8 outputs. +// //go:noescape func mulAvxTwo_9x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x9 takes 9 inputs and produces 9 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_9x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x9Xor takes 9 inputs and produces 9 outputs. +// //go:noescape func mulAvxTwo_9x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x10 takes 9 inputs and produces 10 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_9x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_9x10Xor takes 9 inputs and produces 10 outputs. +// //go:noescape func mulAvxTwo_9x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x1 takes 10 inputs and produces 1 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_10x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x1_64 takes 10 inputs and produces 1 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_10x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x1Xor takes 10 inputs and produces 1 outputs. +// //go:noescape func mulAvxTwo_10x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x1_64Xor takes 10 inputs and produces 1 outputs. +// //go:noescape func mulAvxTwo_10x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x2 takes 10 inputs and produces 2 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_10x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x2_64 takes 10 inputs and produces 2 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_10x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x2Xor takes 10 inputs and produces 2 outputs. +// //go:noescape func mulAvxTwo_10x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x2_64Xor takes 10 inputs and produces 2 outputs. +// //go:noescape func mulAvxTwo_10x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x3 takes 10 inputs and produces 3 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_10x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x3_64 takes 10 inputs and produces 3 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_10x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x3Xor takes 10 inputs and produces 3 outputs. +// //go:noescape func mulAvxTwo_10x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x3_64Xor takes 10 inputs and produces 3 outputs. +// //go:noescape func mulAvxTwo_10x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x4 takes 10 inputs and produces 4 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_10x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x4Xor takes 10 inputs and produces 4 outputs. +// //go:noescape func mulAvxTwo_10x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x5 takes 10 inputs and produces 5 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_10x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x5Xor takes 10 inputs and produces 5 outputs. +// //go:noescape func mulAvxTwo_10x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x6 takes 10 inputs and produces 6 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_10x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x6Xor takes 10 inputs and produces 6 outputs. +// //go:noescape func mulAvxTwo_10x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x7 takes 10 inputs and produces 7 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_10x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x7Xor takes 10 inputs and produces 7 outputs. +// //go:noescape func mulAvxTwo_10x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x8 takes 10 inputs and produces 8 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_10x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x8Xor takes 10 inputs and produces 8 outputs. +// //go:noescape func mulAvxTwo_10x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x9 takes 10 inputs and produces 9 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_10x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x9Xor takes 10 inputs and produces 9 outputs. +// //go:noescape func mulAvxTwo_10x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x10 takes 10 inputs and produces 10 outputs. // The output is initialized to 0. +// //go:noescape func mulAvxTwo_10x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) // mulAvxTwo_10x10Xor takes 10 inputs and produces 10 outputs. +// //go:noescape func mulAvxTwo_10x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) + +//go:noescape +func ifftDIT2_avx2(x []byte, y []byte, table *[128]uint8) + +//go:noescape +func fftDIT2_avx2(x []byte, y []byte, table *[128]uint8) + +//go:noescape +func mulgf16_avx2(x []byte, y []byte, table *[128]uint8) + +//go:noescape +func ifftDIT4_avx512_0(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func fftDIT4_avx512_0(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func ifftDIT4_avx512_1(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func fftDIT4_avx512_1(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func ifftDIT4_avx512_2(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func fftDIT4_avx512_2(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func ifftDIT4_avx512_3(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func fftDIT4_avx512_3(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func ifftDIT4_avx512_4(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func fftDIT4_avx512_4(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func ifftDIT4_avx512_5(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func fftDIT4_avx512_5(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func ifftDIT4_avx512_6(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func fftDIT4_avx512_6(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func ifftDIT4_avx512_7(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func fftDIT4_avx512_7(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func ifftDIT4_avx2_0(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func fftDIT4_avx2_0(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func ifftDIT4_avx2_1(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func fftDIT4_avx2_1(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func ifftDIT4_avx2_2(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func fftDIT4_avx2_2(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func ifftDIT4_avx2_3(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func fftDIT4_avx2_3(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func ifftDIT4_avx2_4(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func fftDIT4_avx2_4(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func ifftDIT4_avx2_5(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func fftDIT4_avx2_5(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func ifftDIT4_avx2_6(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func fftDIT4_avx2_6(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func ifftDIT4_avx2_7(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func fftDIT4_avx2_7(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) + +//go:noescape +func ifftDIT2_ssse3(x []byte, y []byte, table *[128]uint8) + +//go:noescape +func fftDIT2_ssse3(x []byte, y []byte, table *[128]uint8) + +//go:noescape +func mulgf16_ssse3(x []byte, y []byte, table *[128]uint8) diff --git a/vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.s b/vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.s index 36e885f..890461e 100644 --- a/vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.s +++ b/vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.s @@ -1,12 +1,23 @@ // Code generated by command: go run gen.go -out ../galois_gen_amd64.s -stubs ../galois_gen_amd64.go -pkg=reedsolomon. DO NOT EDIT. -// +build !appengine -// +build !noasm -// +build !nogen -// +build gc +//go:build !appengine && !noasm && !nogen && gc #include "textflag.h" +// func _dummy_() +TEXT ·_dummy_(SB), $0 +#ifdef GOAMD64_v4 +#define XOR3WAY(ignore, a, b, dst) \ + VPTERNLOGD $0x96, a, b, dst + +#else +#define XOR3WAY(ignore, a, b, dst) \ + VPXOR a, dst, dst \ + VPXOR b, dst, dst + +#endif + RET + // func mulAvxTwo_1x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) // Requires: AVX, AVX2, SSE2 TEXT ·mulAvxTwo_1x1(SB), NOSPLIT, $0-88 @@ -119,7 +130,7 @@ mulAvxTwo_1x1_64_end: RET // func mulAvxTwo_1x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_1x1Xor(SB), NOSPLIT, $0-88 // Loading all tables to registers // Destination kept in GP registers @@ -156,8 +167,7 @@ mulAvxTwo_1x1Xor_loop: VMOVDQU (DX), Y2 VPSHUFB Y4, Y0, Y4 VPSHUFB Y5, Y1, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Store 1 outputs VMOVDQU Y2, (DX) @@ -172,7 +182,7 @@ mulAvxTwo_1x1Xor_end: RET // func mulAvxTwo_1x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_1x1_64Xor(SB), $0-88 // Loading all tables to registers // Destination kept in GP registers @@ -219,10 +229,8 @@ mulAvxTwo_1x1_64Xor_loop: VPSHUFB Y7, Y0, Y7 VPSHUFB Y6, Y1, Y6 VPSHUFB Y8, Y1, Y8 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Store 1 outputs VMOVDQU Y2, (DX) @@ -371,7 +379,7 @@ mulAvxTwo_1x2_64_end: RET // func mulAvxTwo_1x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_1x2Xor(SB), NOSPLIT, $0-88 // Loading all tables to registers // Destination kept in GP registers @@ -412,13 +420,11 @@ mulAvxTwo_1x2Xor_loop: VMOVDQU (BX), Y4 VPSHUFB Y9, Y0, Y7 VPSHUFB Y10, Y1, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU (DX), Y5 VPSHUFB Y9, Y2, Y7 VPSHUFB Y10, Y3, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Store 2 outputs VMOVDQU Y4, (BX) @@ -435,7 +441,7 @@ mulAvxTwo_1x2Xor_end: RET // func mulAvxTwo_1x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_1x2_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -486,20 +492,16 @@ mulAvxTwo_1x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 64(CX), Y5 VMOVDQU 96(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Store 2 outputs VMOVDQU Y0, (SI) @@ -673,7 +675,7 @@ mulAvxTwo_1x3_64_end: RET // func mulAvxTwo_1x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_1x3Xor(SB), NOSPLIT, $0-88 // Loading all tables to registers // Destination kept in GP registers @@ -718,18 +720,15 @@ mulAvxTwo_1x3Xor_loop: VMOVDQU (BX), Y6 VPSHUFB Y12, Y0, Y10 VPSHUFB Y13, Y1, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU (SI), Y7 VPSHUFB Y12, Y2, Y10 VPSHUFB Y13, Y3, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU (DX), Y8 VPSHUFB Y12, Y4, Y10 VPSHUFB Y13, Y5, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Store 3 outputs VMOVDQU Y6, (BX) @@ -748,7 +747,7 @@ mulAvxTwo_1x3Xor_end: RET // func mulAvxTwo_1x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_1x3_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -803,30 +802,24 @@ mulAvxTwo_1x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 64(CX), Y7 VMOVDQU 96(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 128(CX), Y7 VMOVDQU 160(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Store 3 outputs VMOVDQU Y0, (SI) @@ -926,7 +919,7 @@ mulAvxTwo_1x4_end: RET // func mulAvxTwo_1x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_1x4Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -969,29 +962,25 @@ mulAvxTwo_1x4Xor_loop: VMOVDQU 32(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU (DI), Y1 VMOVDQU 64(CX), Y5 VMOVDQU 96(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU (R8), Y2 VMOVDQU 128(CX), Y5 VMOVDQU 160(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU (BX), Y3 VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Store 4 outputs VMOVDQU Y0, (SI) @@ -1099,7 +1088,7 @@ mulAvxTwo_1x5_end: RET // func mulAvxTwo_1x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_1x5Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -1144,36 +1133,31 @@ mulAvxTwo_1x5Xor_loop: VMOVDQU 32(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU (DI), Y1 VMOVDQU 64(CX), Y6 VMOVDQU 96(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU (R8), Y2 VMOVDQU 128(CX), Y6 VMOVDQU 160(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU (R9), Y3 VMOVDQU 192(CX), Y6 VMOVDQU 224(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU (BX), Y4 VMOVDQU 256(CX), Y6 VMOVDQU 288(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Store 5 outputs VMOVDQU Y0, (SI) @@ -1292,7 +1276,7 @@ mulAvxTwo_1x6_end: RET // func mulAvxTwo_1x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_1x6Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -1339,43 +1323,37 @@ mulAvxTwo_1x6Xor_loop: VMOVDQU 32(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU (DI), Y1 VMOVDQU 64(CX), Y7 VMOVDQU 96(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU (R8), Y2 VMOVDQU 128(CX), Y7 VMOVDQU 160(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU (R9), Y3 VMOVDQU 192(CX), Y7 VMOVDQU 224(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU (R10), Y4 VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU (BX), Y5 VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Store 6 outputs VMOVDQU Y0, (SI) @@ -1505,7 +1483,7 @@ mulAvxTwo_1x7_end: RET // func mulAvxTwo_1x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_1x7Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -1554,50 +1532,43 @@ mulAvxTwo_1x7Xor_loop: VMOVDQU 32(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU (DI), Y1 VMOVDQU 64(CX), Y8 VMOVDQU 96(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU (R8), Y2 VMOVDQU 128(CX), Y8 VMOVDQU 160(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU (R9), Y3 VMOVDQU 192(CX), Y8 VMOVDQU 224(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU (R10), Y4 VMOVDQU 256(CX), Y8 VMOVDQU 288(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU (R11), Y5 VMOVDQU 320(CX), Y8 VMOVDQU 352(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU (BX), Y6 VMOVDQU 384(CX), Y8 VMOVDQU 416(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Store 7 outputs VMOVDQU Y0, (SI) @@ -1738,7 +1709,7 @@ mulAvxTwo_1x8_end: RET // func mulAvxTwo_1x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_1x8Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -1789,57 +1760,49 @@ mulAvxTwo_1x8Xor_loop: VMOVDQU 32(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU (DI), Y1 VMOVDQU 64(CX), Y9 VMOVDQU 96(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU (R8), Y2 VMOVDQU 128(CX), Y9 VMOVDQU 160(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU (R9), Y3 VMOVDQU 192(CX), Y9 VMOVDQU 224(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU (R10), Y4 VMOVDQU 256(CX), Y9 VMOVDQU 288(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU (R11), Y5 VMOVDQU 320(CX), Y9 VMOVDQU 352(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU (R12), Y6 VMOVDQU 384(CX), Y9 VMOVDQU 416(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU (BX), Y7 VMOVDQU 448(CX), Y9 VMOVDQU 480(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Store 8 outputs VMOVDQU Y0, (SI) @@ -1991,7 +1954,7 @@ mulAvxTwo_1x9_end: RET // func mulAvxTwo_1x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_1x9Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -2044,64 +2007,55 @@ mulAvxTwo_1x9Xor_loop: VMOVDQU 32(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU (DI), Y1 VMOVDQU 64(CX), Y10 VMOVDQU 96(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU (R8), Y2 VMOVDQU 128(CX), Y10 VMOVDQU 160(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU (R9), Y3 VMOVDQU 192(CX), Y10 VMOVDQU 224(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU (R10), Y4 VMOVDQU 256(CX), Y10 VMOVDQU 288(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU (R11), Y5 VMOVDQU 320(CX), Y10 VMOVDQU 352(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU (R12), Y6 VMOVDQU 384(CX), Y10 VMOVDQU 416(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU (R13), Y7 VMOVDQU 448(CX), Y10 VMOVDQU 480(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU (BX), Y8 VMOVDQU 512(CX), Y10 VMOVDQU 544(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Store 9 outputs VMOVDQU Y0, (SI) @@ -2264,7 +2218,7 @@ mulAvxTwo_1x10_end: RET // func mulAvxTwo_1x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_1x10Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -2319,71 +2273,61 @@ mulAvxTwo_1x10Xor_loop: VMOVDQU 32(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU (DI), Y1 VMOVDQU 64(CX), Y11 VMOVDQU 96(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU (R8), Y2 VMOVDQU 128(CX), Y11 VMOVDQU 160(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU (R9), Y3 VMOVDQU 192(CX), Y11 VMOVDQU 224(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU (R10), Y4 VMOVDQU 256(CX), Y11 VMOVDQU 288(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU (R11), Y5 VMOVDQU 320(CX), Y11 VMOVDQU 352(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU (R12), Y6 VMOVDQU 384(CX), Y11 VMOVDQU 416(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU (R13), Y7 VMOVDQU 448(CX), Y11 VMOVDQU 480(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU (R14), Y8 VMOVDQU 512(CX), Y11 VMOVDQU 544(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU (BX), Y9 VMOVDQU 576(CX), Y11 VMOVDQU 608(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Store 10 outputs VMOVDQU Y0, (SI) @@ -2416,7 +2360,7 @@ mulAvxTwo_1x10Xor_end: RET // func mulAvxTwo_2x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x1(SB), NOSPLIT, $0-88 // Loading all tables to registers // Destination kept in GP registers @@ -2466,8 +2410,7 @@ mulAvxTwo_2x1_loop: VPAND Y5, Y7, Y7 VPSHUFB Y6, Y2, Y6 VPSHUFB Y7, Y3, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Store 1 outputs VMOVDQU Y4, (BX) @@ -2482,7 +2425,7 @@ mulAvxTwo_2x1_end: RET // func mulAvxTwo_2x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x1_64(SB), $0-88 // Loading all tables to registers // Destination kept in GP registers @@ -2546,10 +2489,8 @@ mulAvxTwo_2x1_64_loop: VPSHUFB Y9, Y2, Y9 VPSHUFB Y8, Y3, Y8 VPSHUFB Y10, Y3, Y10 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Store 1 outputs VMOVDQU Y4, (BX) @@ -2565,7 +2506,7 @@ mulAvxTwo_2x1_64_end: RET // func mulAvxTwo_2x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x1Xor(SB), NOSPLIT, $0-88 // Loading all tables to registers // Destination kept in GP registers @@ -2606,8 +2547,7 @@ mulAvxTwo_2x1Xor_loop: VMOVDQU (BX), Y4 VPSHUFB Y6, Y0, Y6 VPSHUFB Y7, Y1, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 1 to 1 outputs VMOVDQU (CX), Y6 @@ -2617,8 +2557,7 @@ mulAvxTwo_2x1Xor_loop: VPAND Y5, Y7, Y7 VPSHUFB Y6, Y2, Y6 VPSHUFB Y7, Y3, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Store 1 outputs VMOVDQU Y4, (BX) @@ -2633,7 +2572,7 @@ mulAvxTwo_2x1Xor_end: RET // func mulAvxTwo_2x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x1_64Xor(SB), $0-88 // Loading all tables to registers // Destination kept in GP registers @@ -2684,10 +2623,8 @@ mulAvxTwo_2x1_64Xor_loop: VPSHUFB Y9, Y0, Y9 VPSHUFB Y8, Y1, Y8 VPSHUFB Y10, Y1, Y10 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 1 to 1 outputs VMOVDQU (CX), Y7 @@ -2703,10 +2640,8 @@ mulAvxTwo_2x1_64Xor_loop: VPSHUFB Y9, Y2, Y9 VPSHUFB Y8, Y3, Y8 VPSHUFB Y10, Y3, Y10 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Store 1 outputs VMOVDQU Y4, (BX) @@ -2722,7 +2657,7 @@ mulAvxTwo_2x1_64Xor_end: RET // func mulAvxTwo_2x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x2(SB), NOSPLIT, $0-88 // Loading all tables to registers // Destination kept in GP registers @@ -2781,12 +2716,10 @@ mulAvxTwo_2x2_loop: VPAND Y10, Y14, Y14 VPSHUFB Y13, Y4, Y11 VPSHUFB Y14, Y5, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VPSHUFB Y13, Y6, Y11 VPSHUFB Y14, Y7, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Store 2 outputs VMOVDQU Y8, (SI) @@ -2803,7 +2736,7 @@ mulAvxTwo_2x2_end: RET // func mulAvxTwo_2x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x2_64(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -2877,20 +2810,16 @@ mulAvxTwo_2x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Store 2 outputs VMOVDQU Y0, (DI) @@ -2909,7 +2838,7 @@ mulAvxTwo_2x2_64_end: RET // func mulAvxTwo_2x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x2Xor(SB), NOSPLIT, $0-88 // Loading all tables to registers // Destination kept in GP registers @@ -2956,13 +2885,11 @@ mulAvxTwo_2x2Xor_loop: VMOVDQU (SI), Y8 VPSHUFB Y13, Y0, Y11 VPSHUFB Y14, Y1, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU (BX), Y9 VPSHUFB Y13, Y2, Y11 VPSHUFB Y14, Y3, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 1 to 2 outputs VMOVDQU (CX), Y13 @@ -2972,12 +2899,10 @@ mulAvxTwo_2x2Xor_loop: VPAND Y10, Y14, Y14 VPSHUFB Y13, Y4, Y11 VPSHUFB Y14, Y5, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VPSHUFB Y13, Y6, Y11 VPSHUFB Y14, Y7, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Store 2 outputs VMOVDQU Y8, (SI) @@ -2994,7 +2919,7 @@ mulAvxTwo_2x2Xor_end: RET // func mulAvxTwo_2x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x2_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -3047,20 +2972,16 @@ mulAvxTwo_2x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 64(CX), Y5 VMOVDQU 96(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 1 to 2 outputs VMOVDQU (DX), Y9 @@ -3078,20 +2999,16 @@ mulAvxTwo_2x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Store 2 outputs VMOVDQU Y0, (DI) @@ -3110,7 +3027,7 @@ mulAvxTwo_2x2_64Xor_end: RET // func mulAvxTwo_2x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x3(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -3174,20 +3091,17 @@ mulAvxTwo_2x3_loop: VMOVDQU 224(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 256(CX), Y4 VMOVDQU 288(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 320(CX), Y4 VMOVDQU 352(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Store 3 outputs VMOVDQU Y0, (DI) @@ -3206,7 +3120,7 @@ mulAvxTwo_2x3_end: RET // func mulAvxTwo_2x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x3_64(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -3290,30 +3204,24 @@ mulAvxTwo_2x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Store 3 outputs VMOVDQU Y0, (DI) @@ -3335,7 +3243,7 @@ mulAvxTwo_2x3_64_end: RET // func mulAvxTwo_2x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x3Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -3378,22 +3286,19 @@ mulAvxTwo_2x3Xor_loop: VMOVDQU 32(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU (R8), Y1 VMOVDQU 64(CX), Y4 VMOVDQU 96(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU (SI), Y2 VMOVDQU 128(CX), Y4 VMOVDQU 160(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 1 to 3 outputs VMOVDQU (DX), Y6 @@ -3405,20 +3310,17 @@ mulAvxTwo_2x3Xor_loop: VMOVDQU 224(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 256(CX), Y4 VMOVDQU 288(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 320(CX), Y4 VMOVDQU 352(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Store 3 outputs VMOVDQU Y0, (DI) @@ -3437,7 +3339,7 @@ mulAvxTwo_2x3Xor_end: RET // func mulAvxTwo_2x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x3_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -3494,30 +3396,24 @@ mulAvxTwo_2x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 64(CX), Y7 VMOVDQU 96(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 128(CX), Y7 VMOVDQU 160(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 1 to 3 outputs VMOVDQU (DX), Y11 @@ -3535,30 +3431,24 @@ mulAvxTwo_2x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Store 3 outputs VMOVDQU Y0, (DI) @@ -3580,7 +3470,7 @@ mulAvxTwo_2x3_64Xor_end: RET // func mulAvxTwo_2x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x4(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -3651,26 +3541,22 @@ mulAvxTwo_2x4_loop: VMOVDQU 288(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 384(CX), Y5 VMOVDQU 416(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Store 4 outputs VMOVDQU Y0, (DI) @@ -3691,7 +3577,7 @@ mulAvxTwo_2x4_end: RET // func mulAvxTwo_2x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x4Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -3736,29 +3622,25 @@ mulAvxTwo_2x4Xor_loop: VMOVDQU 32(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU (R8), Y1 VMOVDQU 64(CX), Y5 VMOVDQU 96(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU (R9), Y2 VMOVDQU 128(CX), Y5 VMOVDQU 160(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU (SI), Y3 VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 1 to 4 outputs VMOVDQU (DX), Y7 @@ -3770,26 +3652,22 @@ mulAvxTwo_2x4Xor_loop: VMOVDQU 288(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 384(CX), Y5 VMOVDQU 416(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Store 4 outputs VMOVDQU Y0, (DI) @@ -3810,7 +3688,7 @@ mulAvxTwo_2x4Xor_end: RET // func mulAvxTwo_2x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x5(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -3888,32 +3766,27 @@ mulAvxTwo_2x5_loop: VMOVDQU 352(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 384(CX), Y6 VMOVDQU 416(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 448(CX), Y6 VMOVDQU 480(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 512(CX), Y6 VMOVDQU 544(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 576(CX), Y6 VMOVDQU 608(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Store 5 outputs VMOVDQU Y0, (DI) @@ -3936,7 +3809,7 @@ mulAvxTwo_2x5_end: RET // func mulAvxTwo_2x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x5Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -3983,36 +3856,31 @@ mulAvxTwo_2x5Xor_loop: VMOVDQU 32(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU (R8), Y1 VMOVDQU 64(CX), Y6 VMOVDQU 96(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU (R9), Y2 VMOVDQU 128(CX), Y6 VMOVDQU 160(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU (R10), Y3 VMOVDQU 192(CX), Y6 VMOVDQU 224(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU (SI), Y4 VMOVDQU 256(CX), Y6 VMOVDQU 288(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 1 to 5 outputs VMOVDQU (DX), Y8 @@ -4024,32 +3892,27 @@ mulAvxTwo_2x5Xor_loop: VMOVDQU 352(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 384(CX), Y6 VMOVDQU 416(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 448(CX), Y6 VMOVDQU 480(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 512(CX), Y6 VMOVDQU 544(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 576(CX), Y6 VMOVDQU 608(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Store 5 outputs VMOVDQU Y0, (DI) @@ -4072,7 +3935,7 @@ mulAvxTwo_2x5Xor_end: RET // func mulAvxTwo_2x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x6(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -4157,38 +4020,32 @@ mulAvxTwo_2x6_loop: VMOVDQU 416(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 576(CX), Y7 VMOVDQU 608(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Store 6 outputs VMOVDQU Y0, (DI) @@ -4213,7 +4070,7 @@ mulAvxTwo_2x6_end: RET // func mulAvxTwo_2x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x6Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -4262,43 +4119,37 @@ mulAvxTwo_2x6Xor_loop: VMOVDQU 32(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU (R8), Y1 VMOVDQU 64(CX), Y7 VMOVDQU 96(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU (R9), Y2 VMOVDQU 128(CX), Y7 VMOVDQU 160(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU (R10), Y3 VMOVDQU 192(CX), Y7 VMOVDQU 224(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU (R11), Y4 VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU (SI), Y5 VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 1 to 6 outputs VMOVDQU (DX), Y9 @@ -4310,38 +4161,32 @@ mulAvxTwo_2x6Xor_loop: VMOVDQU 416(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 576(CX), Y7 VMOVDQU 608(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Store 6 outputs VMOVDQU Y0, (DI) @@ -4366,7 +4211,7 @@ mulAvxTwo_2x6Xor_end: RET // func mulAvxTwo_2x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x7(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -4458,44 +4303,37 @@ mulAvxTwo_2x7_loop: VMOVDQU 480(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 512(CX), Y8 VMOVDQU 544(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 576(CX), Y8 VMOVDQU 608(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 640(CX), Y8 VMOVDQU 672(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 704(CX), Y8 VMOVDQU 736(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 768(CX), Y8 VMOVDQU 800(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 832(CX), Y8 VMOVDQU 864(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Store 7 outputs VMOVDQU Y0, (DI) @@ -4522,7 +4360,7 @@ mulAvxTwo_2x7_end: RET // func mulAvxTwo_2x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x7Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -4573,50 +4411,43 @@ mulAvxTwo_2x7Xor_loop: VMOVDQU 32(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU (R8), Y1 VMOVDQU 64(CX), Y8 VMOVDQU 96(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU (R9), Y2 VMOVDQU 128(CX), Y8 VMOVDQU 160(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU (R10), Y3 VMOVDQU 192(CX), Y8 VMOVDQU 224(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU (R11), Y4 VMOVDQU 256(CX), Y8 VMOVDQU 288(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU (R12), Y5 VMOVDQU 320(CX), Y8 VMOVDQU 352(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU (SI), Y6 VMOVDQU 384(CX), Y8 VMOVDQU 416(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 1 to 7 outputs VMOVDQU (DX), Y10 @@ -4628,44 +4459,37 @@ mulAvxTwo_2x7Xor_loop: VMOVDQU 480(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 512(CX), Y8 VMOVDQU 544(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 576(CX), Y8 VMOVDQU 608(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 640(CX), Y8 VMOVDQU 672(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 704(CX), Y8 VMOVDQU 736(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 768(CX), Y8 VMOVDQU 800(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 832(CX), Y8 VMOVDQU 864(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Store 7 outputs VMOVDQU Y0, (DI) @@ -4692,7 +4516,7 @@ mulAvxTwo_2x7Xor_end: RET // func mulAvxTwo_2x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x8(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -4791,50 +4615,42 @@ mulAvxTwo_2x8_loop: VMOVDQU 544(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 576(CX), Y9 VMOVDQU 608(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y9 VMOVDQU 672(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 704(CX), Y9 VMOVDQU 736(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 768(CX), Y9 VMOVDQU 800(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 832(CX), Y9 VMOVDQU 864(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 896(CX), Y9 VMOVDQU 928(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 960(CX), Y9 VMOVDQU 992(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Store 8 outputs VMOVDQU Y0, (DI) @@ -4863,7 +4679,7 @@ mulAvxTwo_2x8_end: RET // func mulAvxTwo_2x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x8Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -4916,57 +4732,49 @@ mulAvxTwo_2x8Xor_loop: VMOVDQU 32(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU (R8), Y1 VMOVDQU 64(CX), Y9 VMOVDQU 96(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU (R9), Y2 VMOVDQU 128(CX), Y9 VMOVDQU 160(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU (R10), Y3 VMOVDQU 192(CX), Y9 VMOVDQU 224(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU (R11), Y4 VMOVDQU 256(CX), Y9 VMOVDQU 288(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU (R12), Y5 VMOVDQU 320(CX), Y9 VMOVDQU 352(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU (R13), Y6 VMOVDQU 384(CX), Y9 VMOVDQU 416(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU (SI), Y7 VMOVDQU 448(CX), Y9 VMOVDQU 480(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 1 to 8 outputs VMOVDQU (DX), Y11 @@ -4978,50 +4786,42 @@ mulAvxTwo_2x8Xor_loop: VMOVDQU 544(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 576(CX), Y9 VMOVDQU 608(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y9 VMOVDQU 672(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 704(CX), Y9 VMOVDQU 736(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 768(CX), Y9 VMOVDQU 800(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 832(CX), Y9 VMOVDQU 864(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 896(CX), Y9 VMOVDQU 928(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 960(CX), Y9 VMOVDQU 992(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Store 8 outputs VMOVDQU Y0, (DI) @@ -5050,7 +4850,7 @@ mulAvxTwo_2x8Xor_end: RET // func mulAvxTwo_2x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x9(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -5156,56 +4956,47 @@ mulAvxTwo_2x9_loop: VMOVDQU 608(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 640(CX), Y10 VMOVDQU 672(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 704(CX), Y10 VMOVDQU 736(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 768(CX), Y10 VMOVDQU 800(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 832(CX), Y10 VMOVDQU 864(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 896(CX), Y10 VMOVDQU 928(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 960(CX), Y10 VMOVDQU 992(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1024(CX), Y10 VMOVDQU 1056(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1088(CX), Y10 VMOVDQU 1120(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Store 9 outputs VMOVDQU Y0, (DI) @@ -5236,7 +5027,7 @@ mulAvxTwo_2x9_end: RET // func mulAvxTwo_2x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x9Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -5291,64 +5082,55 @@ mulAvxTwo_2x9Xor_loop: VMOVDQU 32(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU (R8), Y1 VMOVDQU 64(CX), Y10 VMOVDQU 96(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU (R9), Y2 VMOVDQU 128(CX), Y10 VMOVDQU 160(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU (R10), Y3 VMOVDQU 192(CX), Y10 VMOVDQU 224(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU (R11), Y4 VMOVDQU 256(CX), Y10 VMOVDQU 288(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU (R12), Y5 VMOVDQU 320(CX), Y10 VMOVDQU 352(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU (R13), Y6 VMOVDQU 384(CX), Y10 VMOVDQU 416(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU (R14), Y7 VMOVDQU 448(CX), Y10 VMOVDQU 480(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU (SI), Y8 VMOVDQU 512(CX), Y10 VMOVDQU 544(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 1 to 9 outputs VMOVDQU (DX), Y12 @@ -5360,56 +5142,47 @@ mulAvxTwo_2x9Xor_loop: VMOVDQU 608(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 640(CX), Y10 VMOVDQU 672(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 704(CX), Y10 VMOVDQU 736(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 768(CX), Y10 VMOVDQU 800(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 832(CX), Y10 VMOVDQU 864(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 896(CX), Y10 VMOVDQU 928(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 960(CX), Y10 VMOVDQU 992(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1024(CX), Y10 VMOVDQU 1056(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1088(CX), Y10 VMOVDQU 1120(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Store 9 outputs VMOVDQU Y0, (DI) @@ -5440,7 +5213,7 @@ mulAvxTwo_2x9Xor_end: RET // func mulAvxTwo_2x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x10(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -5553,62 +5326,52 @@ mulAvxTwo_2x10_loop: VMOVDQU 672(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 704(CX), Y11 VMOVDQU 736(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 768(CX), Y11 VMOVDQU 800(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 832(CX), Y11 VMOVDQU 864(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 896(CX), Y11 VMOVDQU 928(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 960(CX), Y11 VMOVDQU 992(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1024(CX), Y11 VMOVDQU 1056(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1088(CX), Y11 VMOVDQU 1120(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1152(CX), Y11 VMOVDQU 1184(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1216(CX), Y11 VMOVDQU 1248(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Store 10 outputs VMOVDQU Y0, (DI) @@ -5641,7 +5404,7 @@ mulAvxTwo_2x10_end: RET // func mulAvxTwo_2x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_2x10Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -5698,71 +5461,61 @@ mulAvxTwo_2x10Xor_loop: VMOVDQU 32(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU (R8), Y1 VMOVDQU 64(CX), Y11 VMOVDQU 96(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU (R9), Y2 VMOVDQU 128(CX), Y11 VMOVDQU 160(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU (R10), Y3 VMOVDQU 192(CX), Y11 VMOVDQU 224(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU (R11), Y4 VMOVDQU 256(CX), Y11 VMOVDQU 288(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU (R12), Y5 VMOVDQU 320(CX), Y11 VMOVDQU 352(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU (R13), Y6 VMOVDQU 384(CX), Y11 VMOVDQU 416(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU (R14), Y7 VMOVDQU 448(CX), Y11 VMOVDQU 480(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU (R15), Y8 VMOVDQU 512(CX), Y11 VMOVDQU 544(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU (SI), Y9 VMOVDQU 576(CX), Y11 VMOVDQU 608(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 1 to 10 outputs VMOVDQU (DX), Y13 @@ -5774,62 +5527,52 @@ mulAvxTwo_2x10Xor_loop: VMOVDQU 672(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 704(CX), Y11 VMOVDQU 736(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 768(CX), Y11 VMOVDQU 800(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 832(CX), Y11 VMOVDQU 864(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 896(CX), Y11 VMOVDQU 928(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 960(CX), Y11 VMOVDQU 992(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1024(CX), Y11 VMOVDQU 1056(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1088(CX), Y11 VMOVDQU 1120(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1152(CX), Y11 VMOVDQU 1184(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1216(CX), Y11 VMOVDQU 1248(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Store 10 outputs VMOVDQU Y0, (DI) @@ -5862,7 +5605,7 @@ mulAvxTwo_2x10Xor_end: RET // func mulAvxTwo_3x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x1(SB), NOSPLIT, $0-88 // Loading all tables to registers // Destination kept in GP registers @@ -5916,8 +5659,7 @@ mulAvxTwo_3x1_loop: VPAND Y7, Y9, Y9 VPSHUFB Y8, Y2, Y8 VPSHUFB Y9, Y3, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 2 to 1 outputs VMOVDQU (CX), Y8 @@ -5927,8 +5669,7 @@ mulAvxTwo_3x1_loop: VPAND Y7, Y9, Y9 VPSHUFB Y8, Y4, Y8 VPSHUFB Y9, Y5, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Store 1 outputs VMOVDQU Y6, (SI) @@ -5943,7 +5684,7 @@ mulAvxTwo_3x1_end: RET // func mulAvxTwo_3x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x1_64(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -6009,10 +5750,8 @@ mulAvxTwo_3x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 2 to 1 outputs VMOVDQU (DX), Y6 @@ -6030,10 +5769,8 @@ mulAvxTwo_3x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Store 1 outputs VMOVDQU Y0, (DI) @@ -6049,7 +5786,7 @@ mulAvxTwo_3x1_64_end: RET // func mulAvxTwo_3x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x1Xor(SB), NOSPLIT, $0-88 // Loading all tables to registers // Destination kept in GP registers @@ -6094,8 +5831,7 @@ mulAvxTwo_3x1Xor_loop: VMOVDQU (SI), Y6 VPSHUFB Y8, Y0, Y8 VPSHUFB Y9, Y1, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 1 to 1 outputs VMOVDQU (BX), Y8 @@ -6105,8 +5841,7 @@ mulAvxTwo_3x1Xor_loop: VPAND Y7, Y9, Y9 VPSHUFB Y8, Y2, Y8 VPSHUFB Y9, Y3, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 2 to 1 outputs VMOVDQU (CX), Y8 @@ -6116,8 +5851,7 @@ mulAvxTwo_3x1Xor_loop: VPAND Y7, Y9, Y9 VPSHUFB Y8, Y4, Y8 VPSHUFB Y9, Y5, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Store 1 outputs VMOVDQU Y6, (SI) @@ -6132,7 +5866,7 @@ mulAvxTwo_3x1Xor_end: RET // func mulAvxTwo_3x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x1_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -6183,10 +5917,8 @@ mulAvxTwo_3x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 1 to 1 outputs VMOVDQU (SI), Y6 @@ -6204,10 +5936,8 @@ mulAvxTwo_3x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 2 to 1 outputs VMOVDQU (DX), Y6 @@ -6225,10 +5955,8 @@ mulAvxTwo_3x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Store 1 outputs VMOVDQU Y0, (DI) @@ -6244,7 +5972,7 @@ mulAvxTwo_3x1_64Xor_end: RET // func mulAvxTwo_3x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x2(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -6303,14 +6031,12 @@ mulAvxTwo_3x2_loop: VMOVDQU 160(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 192(CX), Y3 VMOVDQU 224(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 2 to 2 outputs VMOVDQU (DX), Y5 @@ -6322,14 +6048,12 @@ mulAvxTwo_3x2_loop: VMOVDQU 288(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 320(CX), Y3 VMOVDQU 352(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Store 2 outputs VMOVDQU Y0, (R8) @@ -6346,7 +6070,7 @@ mulAvxTwo_3x2_end: RET // func mulAvxTwo_3x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x2_64(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -6422,20 +6146,16 @@ mulAvxTwo_3x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 2 to 2 outputs VMOVDQU (DX), Y9 @@ -6453,20 +6173,16 @@ mulAvxTwo_3x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Store 2 outputs VMOVDQU Y0, (R8) @@ -6485,7 +6201,7 @@ mulAvxTwo_3x2_64_end: RET // func mulAvxTwo_3x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x2Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -6528,15 +6244,13 @@ mulAvxTwo_3x2Xor_loop: VMOVDQU 32(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU (DI), Y1 VMOVDQU 64(CX), Y3 VMOVDQU 96(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 1 to 2 outputs VMOVDQU (SI), Y5 @@ -6548,14 +6262,12 @@ mulAvxTwo_3x2Xor_loop: VMOVDQU 160(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 192(CX), Y3 VMOVDQU 224(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 2 to 2 outputs VMOVDQU (DX), Y5 @@ -6567,14 +6279,12 @@ mulAvxTwo_3x2Xor_loop: VMOVDQU 288(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 320(CX), Y3 VMOVDQU 352(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Store 2 outputs VMOVDQU Y0, (R8) @@ -6591,7 +6301,7 @@ mulAvxTwo_3x2Xor_end: RET // func mulAvxTwo_3x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x2_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -6646,20 +6356,16 @@ mulAvxTwo_3x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 64(CX), Y5 VMOVDQU 96(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 1 to 2 outputs VMOVDQU (SI), Y9 @@ -6677,20 +6383,16 @@ mulAvxTwo_3x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 2 to 2 outputs VMOVDQU (DX), Y9 @@ -6708,20 +6410,16 @@ mulAvxTwo_3x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Store 2 outputs VMOVDQU Y0, (R8) @@ -6740,7 +6438,7 @@ mulAvxTwo_3x2_64Xor_end: RET // func mulAvxTwo_3x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x3(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -6806,20 +6504,17 @@ mulAvxTwo_3x3_loop: VMOVDQU 224(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 256(CX), Y4 VMOVDQU 288(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 320(CX), Y4 VMOVDQU 352(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 2 to 3 outputs VMOVDQU (DX), Y6 @@ -6831,20 +6526,17 @@ mulAvxTwo_3x3_loop: VMOVDQU 416(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 448(CX), Y4 VMOVDQU 480(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 512(CX), Y4 VMOVDQU 544(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Store 3 outputs VMOVDQU Y0, (R8) @@ -6863,7 +6555,7 @@ mulAvxTwo_3x3_end: RET // func mulAvxTwo_3x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x3_64(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -6949,30 +6641,24 @@ mulAvxTwo_3x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 2 to 3 outputs VMOVDQU (DX), Y11 @@ -6990,30 +6676,24 @@ mulAvxTwo_3x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Store 3 outputs VMOVDQU Y0, (R8) @@ -7035,7 +6715,7 @@ mulAvxTwo_3x3_64_end: RET // func mulAvxTwo_3x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x3Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -7080,22 +6760,19 @@ mulAvxTwo_3x3Xor_loop: VMOVDQU 32(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU (R9), Y1 VMOVDQU 64(CX), Y4 VMOVDQU 96(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU (DI), Y2 VMOVDQU 128(CX), Y4 VMOVDQU 160(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 1 to 3 outputs VMOVDQU (SI), Y6 @@ -7107,20 +6784,17 @@ mulAvxTwo_3x3Xor_loop: VMOVDQU 224(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 256(CX), Y4 VMOVDQU 288(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 320(CX), Y4 VMOVDQU 352(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 2 to 3 outputs VMOVDQU (DX), Y6 @@ -7132,20 +6806,17 @@ mulAvxTwo_3x3Xor_loop: VMOVDQU 416(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 448(CX), Y4 VMOVDQU 480(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 512(CX), Y4 VMOVDQU 544(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Store 3 outputs VMOVDQU Y0, (R8) @@ -7164,7 +6835,7 @@ mulAvxTwo_3x3Xor_end: RET // func mulAvxTwo_3x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x3_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -7223,30 +6894,24 @@ mulAvxTwo_3x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 64(CX), Y7 VMOVDQU 96(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 128(CX), Y7 VMOVDQU 160(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 1 to 3 outputs VMOVDQU (SI), Y11 @@ -7264,30 +6929,24 @@ mulAvxTwo_3x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 2 to 3 outputs VMOVDQU (DX), Y11 @@ -7305,30 +6964,24 @@ mulAvxTwo_3x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Store 3 outputs VMOVDQU Y0, (R8) @@ -7350,7 +7003,7 @@ mulAvxTwo_3x3_64Xor_end: RET // func mulAvxTwo_3x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x4(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -7423,26 +7076,22 @@ mulAvxTwo_3x4_loop: VMOVDQU 288(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 384(CX), Y5 VMOVDQU 416(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 2 to 4 outputs VMOVDQU (DX), Y7 @@ -7454,26 +7103,22 @@ mulAvxTwo_3x4_loop: VMOVDQU 544(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 640(CX), Y5 VMOVDQU 672(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Store 4 outputs VMOVDQU Y0, (R8) @@ -7494,7 +7139,7 @@ mulAvxTwo_3x4_end: RET // func mulAvxTwo_3x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x4Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -7541,29 +7186,25 @@ mulAvxTwo_3x4Xor_loop: VMOVDQU 32(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU (R9), Y1 VMOVDQU 64(CX), Y5 VMOVDQU 96(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU (R10), Y2 VMOVDQU 128(CX), Y5 VMOVDQU 160(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU (DI), Y3 VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 1 to 4 outputs VMOVDQU (SI), Y7 @@ -7575,26 +7216,22 @@ mulAvxTwo_3x4Xor_loop: VMOVDQU 288(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 384(CX), Y5 VMOVDQU 416(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 2 to 4 outputs VMOVDQU (DX), Y7 @@ -7606,26 +7243,22 @@ mulAvxTwo_3x4Xor_loop: VMOVDQU 544(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 640(CX), Y5 VMOVDQU 672(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Store 4 outputs VMOVDQU Y0, (R8) @@ -7646,7 +7279,7 @@ mulAvxTwo_3x4Xor_end: RET // func mulAvxTwo_3x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x5(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -7726,32 +7359,27 @@ mulAvxTwo_3x5_loop: VMOVDQU 352(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 384(CX), Y6 VMOVDQU 416(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 448(CX), Y6 VMOVDQU 480(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 512(CX), Y6 VMOVDQU 544(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 576(CX), Y6 VMOVDQU 608(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 2 to 5 outputs VMOVDQU (DX), Y8 @@ -7763,32 +7391,27 @@ mulAvxTwo_3x5_loop: VMOVDQU 672(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 704(CX), Y6 VMOVDQU 736(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 768(CX), Y6 VMOVDQU 800(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 832(CX), Y6 VMOVDQU 864(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 896(CX), Y6 VMOVDQU 928(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Store 5 outputs VMOVDQU Y0, (R8) @@ -7811,7 +7434,7 @@ mulAvxTwo_3x5_end: RET // func mulAvxTwo_3x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x5Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -7860,36 +7483,31 @@ mulAvxTwo_3x5Xor_loop: VMOVDQU 32(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU (R9), Y1 VMOVDQU 64(CX), Y6 VMOVDQU 96(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU (R10), Y2 VMOVDQU 128(CX), Y6 VMOVDQU 160(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU (R11), Y3 VMOVDQU 192(CX), Y6 VMOVDQU 224(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU (DI), Y4 VMOVDQU 256(CX), Y6 VMOVDQU 288(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 1 to 5 outputs VMOVDQU (SI), Y8 @@ -7901,32 +7519,27 @@ mulAvxTwo_3x5Xor_loop: VMOVDQU 352(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 384(CX), Y6 VMOVDQU 416(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 448(CX), Y6 VMOVDQU 480(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 512(CX), Y6 VMOVDQU 544(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 576(CX), Y6 VMOVDQU 608(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 2 to 5 outputs VMOVDQU (DX), Y8 @@ -7938,32 +7551,27 @@ mulAvxTwo_3x5Xor_loop: VMOVDQU 672(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 704(CX), Y6 VMOVDQU 736(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 768(CX), Y6 VMOVDQU 800(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 832(CX), Y6 VMOVDQU 864(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 896(CX), Y6 VMOVDQU 928(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Store 5 outputs VMOVDQU Y0, (R8) @@ -7986,7 +7594,7 @@ mulAvxTwo_3x5Xor_end: RET // func mulAvxTwo_3x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x6(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -8073,38 +7681,32 @@ mulAvxTwo_3x6_loop: VMOVDQU 416(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 576(CX), Y7 VMOVDQU 608(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 2 to 6 outputs VMOVDQU (DX), Y9 @@ -8116,38 +7718,32 @@ mulAvxTwo_3x6_loop: VMOVDQU 800(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 960(CX), Y7 VMOVDQU 992(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Store 6 outputs VMOVDQU Y0, (R8) @@ -8172,7 +7768,7 @@ mulAvxTwo_3x6_end: RET // func mulAvxTwo_3x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x6Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -8223,43 +7819,37 @@ mulAvxTwo_3x6Xor_loop: VMOVDQU 32(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU (R9), Y1 VMOVDQU 64(CX), Y7 VMOVDQU 96(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU (R10), Y2 VMOVDQU 128(CX), Y7 VMOVDQU 160(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU (R11), Y3 VMOVDQU 192(CX), Y7 VMOVDQU 224(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU (R12), Y4 VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU (DI), Y5 VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 1 to 6 outputs VMOVDQU (SI), Y9 @@ -8271,38 +7861,32 @@ mulAvxTwo_3x6Xor_loop: VMOVDQU 416(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 576(CX), Y7 VMOVDQU 608(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 2 to 6 outputs VMOVDQU (DX), Y9 @@ -8314,38 +7898,32 @@ mulAvxTwo_3x6Xor_loop: VMOVDQU 800(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 960(CX), Y7 VMOVDQU 992(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Store 6 outputs VMOVDQU Y0, (R8) @@ -8370,7 +7948,7 @@ mulAvxTwo_3x6Xor_end: RET // func mulAvxTwo_3x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x7(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -8464,44 +8042,37 @@ mulAvxTwo_3x7_loop: VMOVDQU 480(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 512(CX), Y8 VMOVDQU 544(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 576(CX), Y8 VMOVDQU 608(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 640(CX), Y8 VMOVDQU 672(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 704(CX), Y8 VMOVDQU 736(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 768(CX), Y8 VMOVDQU 800(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 832(CX), Y8 VMOVDQU 864(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 2 to 7 outputs VMOVDQU (DX), Y10 @@ -8513,44 +8084,37 @@ mulAvxTwo_3x7_loop: VMOVDQU 928(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 960(CX), Y8 VMOVDQU 992(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1024(CX), Y8 VMOVDQU 1056(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1088(CX), Y8 VMOVDQU 1120(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1152(CX), Y8 VMOVDQU 1184(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1216(CX), Y8 VMOVDQU 1248(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1280(CX), Y8 VMOVDQU 1312(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Store 7 outputs VMOVDQU Y0, (R8) @@ -8577,7 +8141,7 @@ mulAvxTwo_3x7_end: RET // func mulAvxTwo_3x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x7Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -8630,50 +8194,43 @@ mulAvxTwo_3x7Xor_loop: VMOVDQU 32(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU (R9), Y1 VMOVDQU 64(CX), Y8 VMOVDQU 96(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU (R10), Y2 VMOVDQU 128(CX), Y8 VMOVDQU 160(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU (R11), Y3 VMOVDQU 192(CX), Y8 VMOVDQU 224(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU (R12), Y4 VMOVDQU 256(CX), Y8 VMOVDQU 288(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU (R13), Y5 VMOVDQU 320(CX), Y8 VMOVDQU 352(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU (DI), Y6 VMOVDQU 384(CX), Y8 VMOVDQU 416(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 1 to 7 outputs VMOVDQU (SI), Y10 @@ -8685,44 +8242,37 @@ mulAvxTwo_3x7Xor_loop: VMOVDQU 480(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 512(CX), Y8 VMOVDQU 544(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 576(CX), Y8 VMOVDQU 608(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 640(CX), Y8 VMOVDQU 672(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 704(CX), Y8 VMOVDQU 736(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 768(CX), Y8 VMOVDQU 800(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 832(CX), Y8 VMOVDQU 864(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 2 to 7 outputs VMOVDQU (DX), Y10 @@ -8734,44 +8284,37 @@ mulAvxTwo_3x7Xor_loop: VMOVDQU 928(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 960(CX), Y8 VMOVDQU 992(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1024(CX), Y8 VMOVDQU 1056(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1088(CX), Y8 VMOVDQU 1120(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1152(CX), Y8 VMOVDQU 1184(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1216(CX), Y8 VMOVDQU 1248(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1280(CX), Y8 VMOVDQU 1312(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Store 7 outputs VMOVDQU Y0, (R8) @@ -8798,7 +8341,7 @@ mulAvxTwo_3x7Xor_end: RET // func mulAvxTwo_3x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x8(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -8899,50 +8442,42 @@ mulAvxTwo_3x8_loop: VMOVDQU 544(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 576(CX), Y9 VMOVDQU 608(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y9 VMOVDQU 672(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 704(CX), Y9 VMOVDQU 736(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 768(CX), Y9 VMOVDQU 800(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 832(CX), Y9 VMOVDQU 864(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 896(CX), Y9 VMOVDQU 928(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 960(CX), Y9 VMOVDQU 992(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 2 to 8 outputs VMOVDQU (DX), Y11 @@ -8954,50 +8489,42 @@ mulAvxTwo_3x8_loop: VMOVDQU 1056(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1088(CX), Y9 VMOVDQU 1120(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1152(CX), Y9 VMOVDQU 1184(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1216(CX), Y9 VMOVDQU 1248(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y9 VMOVDQU 1312(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1344(CX), Y9 VMOVDQU 1376(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1408(CX), Y9 VMOVDQU 1440(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1472(CX), Y9 VMOVDQU 1504(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Store 8 outputs VMOVDQU Y0, (R8) @@ -9026,7 +8553,7 @@ mulAvxTwo_3x8_end: RET // func mulAvxTwo_3x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x8Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -9081,57 +8608,49 @@ mulAvxTwo_3x8Xor_loop: VMOVDQU 32(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU (R9), Y1 VMOVDQU 64(CX), Y9 VMOVDQU 96(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU (R10), Y2 VMOVDQU 128(CX), Y9 VMOVDQU 160(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU (R11), Y3 VMOVDQU 192(CX), Y9 VMOVDQU 224(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU (R12), Y4 VMOVDQU 256(CX), Y9 VMOVDQU 288(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU (R13), Y5 VMOVDQU 320(CX), Y9 VMOVDQU 352(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU (R14), Y6 VMOVDQU 384(CX), Y9 VMOVDQU 416(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU (DI), Y7 VMOVDQU 448(CX), Y9 VMOVDQU 480(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 1 to 8 outputs VMOVDQU (SI), Y11 @@ -9143,50 +8662,42 @@ mulAvxTwo_3x8Xor_loop: VMOVDQU 544(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 576(CX), Y9 VMOVDQU 608(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y9 VMOVDQU 672(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 704(CX), Y9 VMOVDQU 736(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 768(CX), Y9 VMOVDQU 800(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 832(CX), Y9 VMOVDQU 864(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 896(CX), Y9 VMOVDQU 928(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 960(CX), Y9 VMOVDQU 992(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 2 to 8 outputs VMOVDQU (DX), Y11 @@ -9198,50 +8709,42 @@ mulAvxTwo_3x8Xor_loop: VMOVDQU 1056(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1088(CX), Y9 VMOVDQU 1120(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1152(CX), Y9 VMOVDQU 1184(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1216(CX), Y9 VMOVDQU 1248(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y9 VMOVDQU 1312(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1344(CX), Y9 VMOVDQU 1376(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1408(CX), Y9 VMOVDQU 1440(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1472(CX), Y9 VMOVDQU 1504(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Store 8 outputs VMOVDQU Y0, (R8) @@ -9270,7 +8773,7 @@ mulAvxTwo_3x8Xor_end: RET // func mulAvxTwo_3x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x9(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -9378,56 +8881,47 @@ mulAvxTwo_3x9_loop: VMOVDQU 608(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 640(CX), Y10 VMOVDQU 672(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 704(CX), Y10 VMOVDQU 736(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 768(CX), Y10 VMOVDQU 800(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 832(CX), Y10 VMOVDQU 864(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 896(CX), Y10 VMOVDQU 928(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 960(CX), Y10 VMOVDQU 992(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1024(CX), Y10 VMOVDQU 1056(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1088(CX), Y10 VMOVDQU 1120(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 2 to 9 outputs VMOVDQU (DX), Y12 @@ -9439,56 +8933,47 @@ mulAvxTwo_3x9_loop: VMOVDQU 1184(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1216(CX), Y10 VMOVDQU 1248(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1280(CX), Y10 VMOVDQU 1312(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1344(CX), Y10 VMOVDQU 1376(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1408(CX), Y10 VMOVDQU 1440(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 1472(CX), Y10 VMOVDQU 1504(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 1536(CX), Y10 VMOVDQU 1568(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1600(CX), Y10 VMOVDQU 1632(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1664(CX), Y10 VMOVDQU 1696(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Store 9 outputs VMOVDQU Y0, (R8) @@ -9519,7 +9004,7 @@ mulAvxTwo_3x9_end: RET // func mulAvxTwo_3x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x9Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -9576,64 +9061,55 @@ mulAvxTwo_3x9Xor_loop: VMOVDQU 32(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU (R9), Y1 VMOVDQU 64(CX), Y10 VMOVDQU 96(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU (R10), Y2 VMOVDQU 128(CX), Y10 VMOVDQU 160(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU (R11), Y3 VMOVDQU 192(CX), Y10 VMOVDQU 224(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU (R12), Y4 VMOVDQU 256(CX), Y10 VMOVDQU 288(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU (R13), Y5 VMOVDQU 320(CX), Y10 VMOVDQU 352(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU (R14), Y6 VMOVDQU 384(CX), Y10 VMOVDQU 416(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU (R15), Y7 VMOVDQU 448(CX), Y10 VMOVDQU 480(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU (DI), Y8 VMOVDQU 512(CX), Y10 VMOVDQU 544(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 1 to 9 outputs VMOVDQU (SI), Y12 @@ -9645,56 +9121,47 @@ mulAvxTwo_3x9Xor_loop: VMOVDQU 608(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 640(CX), Y10 VMOVDQU 672(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 704(CX), Y10 VMOVDQU 736(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 768(CX), Y10 VMOVDQU 800(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 832(CX), Y10 VMOVDQU 864(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 896(CX), Y10 VMOVDQU 928(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 960(CX), Y10 VMOVDQU 992(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1024(CX), Y10 VMOVDQU 1056(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1088(CX), Y10 VMOVDQU 1120(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 2 to 9 outputs VMOVDQU (DX), Y12 @@ -9706,56 +9173,47 @@ mulAvxTwo_3x9Xor_loop: VMOVDQU 1184(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1216(CX), Y10 VMOVDQU 1248(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1280(CX), Y10 VMOVDQU 1312(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1344(CX), Y10 VMOVDQU 1376(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1408(CX), Y10 VMOVDQU 1440(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 1472(CX), Y10 VMOVDQU 1504(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 1536(CX), Y10 VMOVDQU 1568(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1600(CX), Y10 VMOVDQU 1632(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1664(CX), Y10 VMOVDQU 1696(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Store 9 outputs VMOVDQU Y0, (R8) @@ -9786,7 +9244,7 @@ mulAvxTwo_3x9Xor_end: RET // func mulAvxTwo_3x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x10(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -9903,62 +9361,52 @@ mulAvxTwo_3x10_loop: VMOVDQU 672(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 704(CX), Y11 VMOVDQU 736(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 768(CX), Y11 VMOVDQU 800(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 832(CX), Y11 VMOVDQU 864(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 896(CX), Y11 VMOVDQU 928(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 960(CX), Y11 VMOVDQU 992(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1024(CX), Y11 VMOVDQU 1056(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1088(CX), Y11 VMOVDQU 1120(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1152(CX), Y11 VMOVDQU 1184(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1216(CX), Y11 VMOVDQU 1248(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 2 to 10 outputs VMOVDQU (AX), Y13 @@ -9970,62 +9418,52 @@ mulAvxTwo_3x10_loop: VMOVDQU 1312(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1344(CX), Y11 VMOVDQU 1376(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 1408(CX), Y11 VMOVDQU 1440(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 1472(CX), Y11 VMOVDQU 1504(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 1536(CX), Y11 VMOVDQU 1568(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 1600(CX), Y11 VMOVDQU 1632(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1664(CX), Y11 VMOVDQU 1696(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1728(CX), Y11 VMOVDQU 1760(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1792(CX), Y11 VMOVDQU 1824(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1856(CX), Y11 VMOVDQU 1888(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Store 10 outputs VMOVDQU Y0, (DI) @@ -10058,7 +9496,7 @@ mulAvxTwo_3x10_end: RET // func mulAvxTwo_3x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_3x10Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -10119,71 +9557,61 @@ mulAvxTwo_3x10Xor_loop: VMOVDQU 32(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU (R8), Y1 VMOVDQU 64(CX), Y11 VMOVDQU 96(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU (R9), Y2 VMOVDQU 128(CX), Y11 VMOVDQU 160(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU (R10), Y3 VMOVDQU 192(CX), Y11 VMOVDQU 224(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU (R11), Y4 VMOVDQU 256(CX), Y11 VMOVDQU 288(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU (R12), Y5 VMOVDQU 320(CX), Y11 VMOVDQU 352(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU (R13), Y6 VMOVDQU 384(CX), Y11 VMOVDQU 416(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU (R14), Y7 VMOVDQU 448(CX), Y11 VMOVDQU 480(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU (R15), Y8 VMOVDQU 512(CX), Y11 VMOVDQU 544(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU (SI), Y9 VMOVDQU 576(CX), Y11 VMOVDQU 608(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 1 to 10 outputs VMOVDQU (BX), Y13 @@ -10195,62 +9623,52 @@ mulAvxTwo_3x10Xor_loop: VMOVDQU 672(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 704(CX), Y11 VMOVDQU 736(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 768(CX), Y11 VMOVDQU 800(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 832(CX), Y11 VMOVDQU 864(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 896(CX), Y11 VMOVDQU 928(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 960(CX), Y11 VMOVDQU 992(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1024(CX), Y11 VMOVDQU 1056(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1088(CX), Y11 VMOVDQU 1120(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1152(CX), Y11 VMOVDQU 1184(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1216(CX), Y11 VMOVDQU 1248(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 2 to 10 outputs VMOVDQU (AX), Y13 @@ -10262,62 +9680,52 @@ mulAvxTwo_3x10Xor_loop: VMOVDQU 1312(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1344(CX), Y11 VMOVDQU 1376(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 1408(CX), Y11 VMOVDQU 1440(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 1472(CX), Y11 VMOVDQU 1504(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 1536(CX), Y11 VMOVDQU 1568(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 1600(CX), Y11 VMOVDQU 1632(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1664(CX), Y11 VMOVDQU 1696(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1728(CX), Y11 VMOVDQU 1760(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1792(CX), Y11 VMOVDQU 1824(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1856(CX), Y11 VMOVDQU 1888(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Store 10 outputs VMOVDQU Y0, (DI) @@ -10350,7 +9758,7 @@ mulAvxTwo_3x10Xor_end: RET // func mulAvxTwo_4x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x1(SB), NOSPLIT, $0-88 // Loading all tables to registers // Destination kept in GP registers @@ -10408,8 +9816,7 @@ mulAvxTwo_4x1_loop: VPAND Y9, Y11, Y11 VPSHUFB Y10, Y2, Y10 VPSHUFB Y11, Y3, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 2 to 1 outputs VMOVDQU (SI), Y10 @@ -10419,8 +9826,7 @@ mulAvxTwo_4x1_loop: VPAND Y9, Y11, Y11 VPSHUFB Y10, Y4, Y10 VPSHUFB Y11, Y5, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 3 to 1 outputs VMOVDQU (CX), Y10 @@ -10430,8 +9836,7 @@ mulAvxTwo_4x1_loop: VPAND Y9, Y11, Y11 VPSHUFB Y10, Y6, Y10 VPSHUFB Y11, Y7, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Store 1 outputs VMOVDQU Y8, (DI) @@ -10446,7 +9851,7 @@ mulAvxTwo_4x1_end: RET // func mulAvxTwo_4x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x1_64(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -10514,10 +9919,8 @@ mulAvxTwo_4x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 2 to 1 outputs VMOVDQU (DI), Y6 @@ -10535,10 +9938,8 @@ mulAvxTwo_4x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 3 to 1 outputs VMOVDQU (DX), Y6 @@ -10556,10 +9957,8 @@ mulAvxTwo_4x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Store 1 outputs VMOVDQU Y0, (R8) @@ -10575,7 +9974,7 @@ mulAvxTwo_4x1_64_end: RET // func mulAvxTwo_4x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x1Xor(SB), NOSPLIT, $0-88 // Loading all tables to registers // Destination kept in GP registers @@ -10624,8 +10023,7 @@ mulAvxTwo_4x1Xor_loop: VMOVDQU (DI), Y8 VPSHUFB Y10, Y0, Y10 VPSHUFB Y11, Y1, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 1 to 1 outputs VMOVDQU (BX), Y10 @@ -10635,8 +10033,7 @@ mulAvxTwo_4x1Xor_loop: VPAND Y9, Y11, Y11 VPSHUFB Y10, Y2, Y10 VPSHUFB Y11, Y3, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 2 to 1 outputs VMOVDQU (SI), Y10 @@ -10646,8 +10043,7 @@ mulAvxTwo_4x1Xor_loop: VPAND Y9, Y11, Y11 VPSHUFB Y10, Y4, Y10 VPSHUFB Y11, Y5, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 3 to 1 outputs VMOVDQU (CX), Y10 @@ -10657,8 +10053,7 @@ mulAvxTwo_4x1Xor_loop: VPAND Y9, Y11, Y11 VPSHUFB Y10, Y6, Y10 VPSHUFB Y11, Y7, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Store 1 outputs VMOVDQU Y8, (DI) @@ -10673,7 +10068,7 @@ mulAvxTwo_4x1Xor_end: RET // func mulAvxTwo_4x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x1_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -10726,10 +10121,8 @@ mulAvxTwo_4x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 1 to 1 outputs VMOVDQU (SI), Y6 @@ -10747,10 +10140,8 @@ mulAvxTwo_4x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 2 to 1 outputs VMOVDQU (DI), Y6 @@ -10768,10 +10159,8 @@ mulAvxTwo_4x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 3 to 1 outputs VMOVDQU (DX), Y6 @@ -10789,10 +10178,8 @@ mulAvxTwo_4x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Store 1 outputs VMOVDQU Y0, (R8) @@ -10808,7 +10195,7 @@ mulAvxTwo_4x1_64Xor_end: RET // func mulAvxTwo_4x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x2(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -10869,14 +10256,12 @@ mulAvxTwo_4x2_loop: VMOVDQU 160(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 192(CX), Y3 VMOVDQU 224(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 2 to 2 outputs VMOVDQU (DI), Y5 @@ -10888,14 +10273,12 @@ mulAvxTwo_4x2_loop: VMOVDQU 288(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 320(CX), Y3 VMOVDQU 352(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 3 to 2 outputs VMOVDQU (DX), Y5 @@ -10907,14 +10290,12 @@ mulAvxTwo_4x2_loop: VMOVDQU 416(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 448(CX), Y3 VMOVDQU 480(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Store 2 outputs VMOVDQU Y0, (R9) @@ -10931,7 +10312,7 @@ mulAvxTwo_4x2_end: RET // func mulAvxTwo_4x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x2_64(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -11009,20 +10390,16 @@ mulAvxTwo_4x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 2 to 2 outputs VMOVDQU (DI), Y9 @@ -11040,20 +10417,16 @@ mulAvxTwo_4x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 3 to 2 outputs VMOVDQU (DX), Y9 @@ -11071,20 +10444,16 @@ mulAvxTwo_4x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Store 2 outputs VMOVDQU Y0, (R9) @@ -11103,7 +10472,7 @@ mulAvxTwo_4x2_64_end: RET // func mulAvxTwo_4x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x2Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -11148,15 +10517,13 @@ mulAvxTwo_4x2Xor_loop: VMOVDQU 32(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU (R8), Y1 VMOVDQU 64(CX), Y3 VMOVDQU 96(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 1 to 2 outputs VMOVDQU (SI), Y5 @@ -11168,14 +10535,12 @@ mulAvxTwo_4x2Xor_loop: VMOVDQU 160(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 192(CX), Y3 VMOVDQU 224(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 2 to 2 outputs VMOVDQU (DI), Y5 @@ -11187,14 +10552,12 @@ mulAvxTwo_4x2Xor_loop: VMOVDQU 288(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 320(CX), Y3 VMOVDQU 352(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 3 to 2 outputs VMOVDQU (DX), Y5 @@ -11206,14 +10569,12 @@ mulAvxTwo_4x2Xor_loop: VMOVDQU 416(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 448(CX), Y3 VMOVDQU 480(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Store 2 outputs VMOVDQU Y0, (R9) @@ -11230,7 +10591,7 @@ mulAvxTwo_4x2Xor_end: RET // func mulAvxTwo_4x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x2_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -11287,20 +10648,16 @@ mulAvxTwo_4x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 64(CX), Y5 VMOVDQU 96(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 1 to 2 outputs VMOVDQU (SI), Y9 @@ -11318,20 +10675,16 @@ mulAvxTwo_4x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 2 to 2 outputs VMOVDQU (DI), Y9 @@ -11349,20 +10702,16 @@ mulAvxTwo_4x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 3 to 2 outputs VMOVDQU (DX), Y9 @@ -11380,20 +10729,16 @@ mulAvxTwo_4x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Store 2 outputs VMOVDQU Y0, (R9) @@ -11412,7 +10757,7 @@ mulAvxTwo_4x2_64Xor_end: RET // func mulAvxTwo_4x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x3(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -11480,20 +10825,17 @@ mulAvxTwo_4x3_loop: VMOVDQU 224(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 256(CX), Y4 VMOVDQU 288(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 320(CX), Y4 VMOVDQU 352(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 2 to 3 outputs VMOVDQU (DI), Y6 @@ -11505,20 +10847,17 @@ mulAvxTwo_4x3_loop: VMOVDQU 416(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 448(CX), Y4 VMOVDQU 480(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 512(CX), Y4 VMOVDQU 544(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 3 to 3 outputs VMOVDQU (DX), Y6 @@ -11530,20 +10869,17 @@ mulAvxTwo_4x3_loop: VMOVDQU 608(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 640(CX), Y4 VMOVDQU 672(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 704(CX), Y4 VMOVDQU 736(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Store 3 outputs VMOVDQU Y0, (R9) @@ -11562,7 +10898,7 @@ mulAvxTwo_4x3_end: RET // func mulAvxTwo_4x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x3_64(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -11650,30 +10986,24 @@ mulAvxTwo_4x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 2 to 3 outputs VMOVDQU (DI), Y11 @@ -11691,30 +11021,24 @@ mulAvxTwo_4x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 3 to 3 outputs VMOVDQU (DX), Y11 @@ -11732,30 +11056,24 @@ mulAvxTwo_4x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Store 3 outputs VMOVDQU Y0, (R9) @@ -11777,7 +11095,7 @@ mulAvxTwo_4x3_64_end: RET // func mulAvxTwo_4x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x3Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -11824,22 +11142,19 @@ mulAvxTwo_4x3Xor_loop: VMOVDQU 32(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU (R10), Y1 VMOVDQU 64(CX), Y4 VMOVDQU 96(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU (R8), Y2 VMOVDQU 128(CX), Y4 VMOVDQU 160(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 1 to 3 outputs VMOVDQU (SI), Y6 @@ -11851,20 +11166,17 @@ mulAvxTwo_4x3Xor_loop: VMOVDQU 224(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 256(CX), Y4 VMOVDQU 288(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 320(CX), Y4 VMOVDQU 352(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 2 to 3 outputs VMOVDQU (DI), Y6 @@ -11876,20 +11188,17 @@ mulAvxTwo_4x3Xor_loop: VMOVDQU 416(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 448(CX), Y4 VMOVDQU 480(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 512(CX), Y4 VMOVDQU 544(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 3 to 3 outputs VMOVDQU (DX), Y6 @@ -11901,20 +11210,17 @@ mulAvxTwo_4x3Xor_loop: VMOVDQU 608(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 640(CX), Y4 VMOVDQU 672(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 704(CX), Y4 VMOVDQU 736(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Store 3 outputs VMOVDQU Y0, (R9) @@ -11933,7 +11239,7 @@ mulAvxTwo_4x3Xor_end: RET // func mulAvxTwo_4x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x3_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -11994,30 +11300,24 @@ mulAvxTwo_4x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 64(CX), Y7 VMOVDQU 96(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 128(CX), Y7 VMOVDQU 160(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 1 to 3 outputs VMOVDQU (SI), Y11 @@ -12035,30 +11335,24 @@ mulAvxTwo_4x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 2 to 3 outputs VMOVDQU (DI), Y11 @@ -12076,30 +11370,24 @@ mulAvxTwo_4x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 3 to 3 outputs VMOVDQU (DX), Y11 @@ -12117,30 +11405,24 @@ mulAvxTwo_4x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Store 3 outputs VMOVDQU Y0, (R9) @@ -12162,7 +11444,7 @@ mulAvxTwo_4x3_64Xor_end: RET // func mulAvxTwo_4x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x4(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -12237,26 +11519,22 @@ mulAvxTwo_4x4_loop: VMOVDQU 288(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 384(CX), Y5 VMOVDQU 416(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 2 to 4 outputs VMOVDQU (DI), Y7 @@ -12268,26 +11546,22 @@ mulAvxTwo_4x4_loop: VMOVDQU 544(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 640(CX), Y5 VMOVDQU 672(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 3 to 4 outputs VMOVDQU (DX), Y7 @@ -12299,26 +11573,22 @@ mulAvxTwo_4x4_loop: VMOVDQU 800(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 832(CX), Y5 VMOVDQU 864(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 896(CX), Y5 VMOVDQU 928(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 960(CX), Y5 VMOVDQU 992(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Store 4 outputs VMOVDQU Y0, (R9) @@ -12339,7 +11609,7 @@ mulAvxTwo_4x4_end: RET // func mulAvxTwo_4x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x4Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -12388,29 +11658,25 @@ mulAvxTwo_4x4Xor_loop: VMOVDQU 32(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU (R10), Y1 VMOVDQU 64(CX), Y5 VMOVDQU 96(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU (R11), Y2 VMOVDQU 128(CX), Y5 VMOVDQU 160(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU (R8), Y3 VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 1 to 4 outputs VMOVDQU (SI), Y7 @@ -12422,26 +11688,22 @@ mulAvxTwo_4x4Xor_loop: VMOVDQU 288(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 384(CX), Y5 VMOVDQU 416(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 2 to 4 outputs VMOVDQU (DI), Y7 @@ -12453,26 +11715,22 @@ mulAvxTwo_4x4Xor_loop: VMOVDQU 544(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 640(CX), Y5 VMOVDQU 672(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 3 to 4 outputs VMOVDQU (DX), Y7 @@ -12484,26 +11742,22 @@ mulAvxTwo_4x4Xor_loop: VMOVDQU 800(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 832(CX), Y5 VMOVDQU 864(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 896(CX), Y5 VMOVDQU 928(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 960(CX), Y5 VMOVDQU 992(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Store 4 outputs VMOVDQU Y0, (R9) @@ -12524,7 +11778,7 @@ mulAvxTwo_4x4Xor_end: RET // func mulAvxTwo_4x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x5(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -12606,32 +11860,27 @@ mulAvxTwo_4x5_loop: VMOVDQU 352(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 384(CX), Y6 VMOVDQU 416(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 448(CX), Y6 VMOVDQU 480(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 512(CX), Y6 VMOVDQU 544(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 576(CX), Y6 VMOVDQU 608(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 2 to 5 outputs VMOVDQU (DI), Y8 @@ -12643,32 +11892,27 @@ mulAvxTwo_4x5_loop: VMOVDQU 672(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 704(CX), Y6 VMOVDQU 736(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 768(CX), Y6 VMOVDQU 800(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 832(CX), Y6 VMOVDQU 864(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 896(CX), Y6 VMOVDQU 928(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 3 to 5 outputs VMOVDQU (DX), Y8 @@ -12680,32 +11924,27 @@ mulAvxTwo_4x5_loop: VMOVDQU 992(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1024(CX), Y6 VMOVDQU 1056(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1088(CX), Y6 VMOVDQU 1120(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1152(CX), Y6 VMOVDQU 1184(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1216(CX), Y6 VMOVDQU 1248(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Store 5 outputs VMOVDQU Y0, (R9) @@ -12728,7 +11967,7 @@ mulAvxTwo_4x5_end: RET // func mulAvxTwo_4x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x5Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -12779,36 +12018,31 @@ mulAvxTwo_4x5Xor_loop: VMOVDQU 32(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU (R10), Y1 VMOVDQU 64(CX), Y6 VMOVDQU 96(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU (R11), Y2 VMOVDQU 128(CX), Y6 VMOVDQU 160(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU (R12), Y3 VMOVDQU 192(CX), Y6 VMOVDQU 224(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU (R8), Y4 VMOVDQU 256(CX), Y6 VMOVDQU 288(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 1 to 5 outputs VMOVDQU (SI), Y8 @@ -12820,32 +12054,27 @@ mulAvxTwo_4x5Xor_loop: VMOVDQU 352(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 384(CX), Y6 VMOVDQU 416(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 448(CX), Y6 VMOVDQU 480(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 512(CX), Y6 VMOVDQU 544(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 576(CX), Y6 VMOVDQU 608(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 2 to 5 outputs VMOVDQU (DI), Y8 @@ -12857,32 +12086,27 @@ mulAvxTwo_4x5Xor_loop: VMOVDQU 672(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 704(CX), Y6 VMOVDQU 736(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 768(CX), Y6 VMOVDQU 800(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 832(CX), Y6 VMOVDQU 864(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 896(CX), Y6 VMOVDQU 928(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 3 to 5 outputs VMOVDQU (DX), Y8 @@ -12894,32 +12118,27 @@ mulAvxTwo_4x5Xor_loop: VMOVDQU 992(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1024(CX), Y6 VMOVDQU 1056(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1088(CX), Y6 VMOVDQU 1120(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1152(CX), Y6 VMOVDQU 1184(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1216(CX), Y6 VMOVDQU 1248(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Store 5 outputs VMOVDQU Y0, (R9) @@ -12942,7 +12161,7 @@ mulAvxTwo_4x5Xor_end: RET // func mulAvxTwo_4x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x6(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -13031,38 +12250,32 @@ mulAvxTwo_4x6_loop: VMOVDQU 416(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 576(CX), Y7 VMOVDQU 608(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 2 to 6 outputs VMOVDQU (DI), Y9 @@ -13074,38 +12287,32 @@ mulAvxTwo_4x6_loop: VMOVDQU 800(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 960(CX), Y7 VMOVDQU 992(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 3 to 6 outputs VMOVDQU (DX), Y9 @@ -13117,38 +12324,32 @@ mulAvxTwo_4x6_loop: VMOVDQU 1184(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1216(CX), Y7 VMOVDQU 1248(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1280(CX), Y7 VMOVDQU 1312(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1344(CX), Y7 VMOVDQU 1376(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1408(CX), Y7 VMOVDQU 1440(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1472(CX), Y7 VMOVDQU 1504(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Store 6 outputs VMOVDQU Y0, (R9) @@ -13173,7 +12374,7 @@ mulAvxTwo_4x6_end: RET // func mulAvxTwo_4x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x6Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -13226,43 +12427,37 @@ mulAvxTwo_4x6Xor_loop: VMOVDQU 32(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU (R10), Y1 VMOVDQU 64(CX), Y7 VMOVDQU 96(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU (R11), Y2 VMOVDQU 128(CX), Y7 VMOVDQU 160(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU (R12), Y3 VMOVDQU 192(CX), Y7 VMOVDQU 224(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU (R13), Y4 VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU (R8), Y5 VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 1 to 6 outputs VMOVDQU (SI), Y9 @@ -13274,38 +12469,32 @@ mulAvxTwo_4x6Xor_loop: VMOVDQU 416(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 576(CX), Y7 VMOVDQU 608(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 2 to 6 outputs VMOVDQU (DI), Y9 @@ -13317,38 +12506,32 @@ mulAvxTwo_4x6Xor_loop: VMOVDQU 800(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 960(CX), Y7 VMOVDQU 992(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 3 to 6 outputs VMOVDQU (DX), Y9 @@ -13360,38 +12543,32 @@ mulAvxTwo_4x6Xor_loop: VMOVDQU 1184(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1216(CX), Y7 VMOVDQU 1248(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1280(CX), Y7 VMOVDQU 1312(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1344(CX), Y7 VMOVDQU 1376(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1408(CX), Y7 VMOVDQU 1440(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1472(CX), Y7 VMOVDQU 1504(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Store 6 outputs VMOVDQU Y0, (R9) @@ -13416,7 +12593,7 @@ mulAvxTwo_4x6Xor_end: RET // func mulAvxTwo_4x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x7(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -13512,44 +12689,37 @@ mulAvxTwo_4x7_loop: VMOVDQU 480(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 512(CX), Y8 VMOVDQU 544(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 576(CX), Y8 VMOVDQU 608(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 640(CX), Y8 VMOVDQU 672(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 704(CX), Y8 VMOVDQU 736(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 768(CX), Y8 VMOVDQU 800(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 832(CX), Y8 VMOVDQU 864(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 2 to 7 outputs VMOVDQU (DI), Y10 @@ -13561,44 +12731,37 @@ mulAvxTwo_4x7_loop: VMOVDQU 928(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 960(CX), Y8 VMOVDQU 992(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1024(CX), Y8 VMOVDQU 1056(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1088(CX), Y8 VMOVDQU 1120(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1152(CX), Y8 VMOVDQU 1184(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1216(CX), Y8 VMOVDQU 1248(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1280(CX), Y8 VMOVDQU 1312(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 3 to 7 outputs VMOVDQU (DX), Y10 @@ -13610,44 +12773,37 @@ mulAvxTwo_4x7_loop: VMOVDQU 1376(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1408(CX), Y8 VMOVDQU 1440(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1472(CX), Y8 VMOVDQU 1504(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1536(CX), Y8 VMOVDQU 1568(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1600(CX), Y8 VMOVDQU 1632(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1664(CX), Y8 VMOVDQU 1696(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1728(CX), Y8 VMOVDQU 1760(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Store 7 outputs VMOVDQU Y0, (R9) @@ -13674,7 +12830,7 @@ mulAvxTwo_4x7_end: RET // func mulAvxTwo_4x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x7Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -13729,50 +12885,43 @@ mulAvxTwo_4x7Xor_loop: VMOVDQU 32(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU (R10), Y1 VMOVDQU 64(CX), Y8 VMOVDQU 96(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU (R11), Y2 VMOVDQU 128(CX), Y8 VMOVDQU 160(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU (R12), Y3 VMOVDQU 192(CX), Y8 VMOVDQU 224(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU (R13), Y4 VMOVDQU 256(CX), Y8 VMOVDQU 288(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU (R14), Y5 VMOVDQU 320(CX), Y8 VMOVDQU 352(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU (R8), Y6 VMOVDQU 384(CX), Y8 VMOVDQU 416(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 1 to 7 outputs VMOVDQU (SI), Y10 @@ -13784,44 +12933,37 @@ mulAvxTwo_4x7Xor_loop: VMOVDQU 480(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 512(CX), Y8 VMOVDQU 544(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 576(CX), Y8 VMOVDQU 608(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 640(CX), Y8 VMOVDQU 672(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 704(CX), Y8 VMOVDQU 736(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 768(CX), Y8 VMOVDQU 800(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 832(CX), Y8 VMOVDQU 864(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 2 to 7 outputs VMOVDQU (DI), Y10 @@ -13833,44 +12975,37 @@ mulAvxTwo_4x7Xor_loop: VMOVDQU 928(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 960(CX), Y8 VMOVDQU 992(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1024(CX), Y8 VMOVDQU 1056(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1088(CX), Y8 VMOVDQU 1120(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1152(CX), Y8 VMOVDQU 1184(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1216(CX), Y8 VMOVDQU 1248(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1280(CX), Y8 VMOVDQU 1312(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 3 to 7 outputs VMOVDQU (DX), Y10 @@ -13882,44 +13017,37 @@ mulAvxTwo_4x7Xor_loop: VMOVDQU 1376(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1408(CX), Y8 VMOVDQU 1440(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1472(CX), Y8 VMOVDQU 1504(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1536(CX), Y8 VMOVDQU 1568(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1600(CX), Y8 VMOVDQU 1632(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1664(CX), Y8 VMOVDQU 1696(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1728(CX), Y8 VMOVDQU 1760(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Store 7 outputs VMOVDQU Y0, (R9) @@ -13946,7 +13074,7 @@ mulAvxTwo_4x7Xor_end: RET // func mulAvxTwo_4x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x8(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -14049,50 +13177,42 @@ mulAvxTwo_4x8_loop: VMOVDQU 544(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 576(CX), Y9 VMOVDQU 608(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y9 VMOVDQU 672(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 704(CX), Y9 VMOVDQU 736(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 768(CX), Y9 VMOVDQU 800(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 832(CX), Y9 VMOVDQU 864(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 896(CX), Y9 VMOVDQU 928(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 960(CX), Y9 VMOVDQU 992(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 2 to 8 outputs VMOVDQU (DI), Y11 @@ -14104,50 +13224,42 @@ mulAvxTwo_4x8_loop: VMOVDQU 1056(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1088(CX), Y9 VMOVDQU 1120(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1152(CX), Y9 VMOVDQU 1184(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1216(CX), Y9 VMOVDQU 1248(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y9 VMOVDQU 1312(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1344(CX), Y9 VMOVDQU 1376(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1408(CX), Y9 VMOVDQU 1440(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1472(CX), Y9 VMOVDQU 1504(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 3 to 8 outputs VMOVDQU (DX), Y11 @@ -14159,50 +13271,42 @@ mulAvxTwo_4x8_loop: VMOVDQU 1568(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1600(CX), Y9 VMOVDQU 1632(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1664(CX), Y9 VMOVDQU 1696(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1728(CX), Y9 VMOVDQU 1760(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1792(CX), Y9 VMOVDQU 1824(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1856(CX), Y9 VMOVDQU 1888(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1920(CX), Y9 VMOVDQU 1952(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1984(CX), Y9 VMOVDQU 2016(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Store 8 outputs VMOVDQU Y0, (R9) @@ -14231,7 +13335,7 @@ mulAvxTwo_4x8_end: RET // func mulAvxTwo_4x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x8Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -14288,57 +13392,49 @@ mulAvxTwo_4x8Xor_loop: VMOVDQU 32(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU (R10), Y1 VMOVDQU 64(CX), Y9 VMOVDQU 96(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU (R11), Y2 VMOVDQU 128(CX), Y9 VMOVDQU 160(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU (R12), Y3 VMOVDQU 192(CX), Y9 VMOVDQU 224(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU (R13), Y4 VMOVDQU 256(CX), Y9 VMOVDQU 288(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU (R14), Y5 VMOVDQU 320(CX), Y9 VMOVDQU 352(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU (R15), Y6 VMOVDQU 384(CX), Y9 VMOVDQU 416(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU (R8), Y7 VMOVDQU 448(CX), Y9 VMOVDQU 480(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 1 to 8 outputs VMOVDQU (SI), Y11 @@ -14350,50 +13446,42 @@ mulAvxTwo_4x8Xor_loop: VMOVDQU 544(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 576(CX), Y9 VMOVDQU 608(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y9 VMOVDQU 672(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 704(CX), Y9 VMOVDQU 736(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 768(CX), Y9 VMOVDQU 800(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 832(CX), Y9 VMOVDQU 864(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 896(CX), Y9 VMOVDQU 928(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 960(CX), Y9 VMOVDQU 992(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 2 to 8 outputs VMOVDQU (DI), Y11 @@ -14405,50 +13493,42 @@ mulAvxTwo_4x8Xor_loop: VMOVDQU 1056(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1088(CX), Y9 VMOVDQU 1120(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1152(CX), Y9 VMOVDQU 1184(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1216(CX), Y9 VMOVDQU 1248(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y9 VMOVDQU 1312(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1344(CX), Y9 VMOVDQU 1376(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1408(CX), Y9 VMOVDQU 1440(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1472(CX), Y9 VMOVDQU 1504(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 3 to 8 outputs VMOVDQU (DX), Y11 @@ -14460,50 +13540,42 @@ mulAvxTwo_4x8Xor_loop: VMOVDQU 1568(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1600(CX), Y9 VMOVDQU 1632(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1664(CX), Y9 VMOVDQU 1696(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1728(CX), Y9 VMOVDQU 1760(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1792(CX), Y9 VMOVDQU 1824(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1856(CX), Y9 VMOVDQU 1888(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1920(CX), Y9 VMOVDQU 1952(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1984(CX), Y9 VMOVDQU 2016(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Store 8 outputs VMOVDQU Y0, (R9) @@ -14532,7 +13604,7 @@ mulAvxTwo_4x8Xor_end: RET // func mulAvxTwo_4x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x9(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -14644,56 +13716,47 @@ mulAvxTwo_4x9_loop: VMOVDQU 608(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 640(CX), Y10 VMOVDQU 672(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 704(CX), Y10 VMOVDQU 736(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 768(CX), Y10 VMOVDQU 800(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 832(CX), Y10 VMOVDQU 864(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 896(CX), Y10 VMOVDQU 928(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 960(CX), Y10 VMOVDQU 992(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1024(CX), Y10 VMOVDQU 1056(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1088(CX), Y10 VMOVDQU 1120(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 2 to 9 outputs VMOVDQU (SI), Y12 @@ -14705,56 +13768,47 @@ mulAvxTwo_4x9_loop: VMOVDQU 1184(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1216(CX), Y10 VMOVDQU 1248(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1280(CX), Y10 VMOVDQU 1312(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1344(CX), Y10 VMOVDQU 1376(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1408(CX), Y10 VMOVDQU 1440(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 1472(CX), Y10 VMOVDQU 1504(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 1536(CX), Y10 VMOVDQU 1568(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1600(CX), Y10 VMOVDQU 1632(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1664(CX), Y10 VMOVDQU 1696(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 3 to 9 outputs VMOVDQU (AX), Y12 @@ -14766,56 +13820,47 @@ mulAvxTwo_4x9_loop: VMOVDQU 1760(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1792(CX), Y10 VMOVDQU 1824(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1856(CX), Y10 VMOVDQU 1888(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1920(CX), Y10 VMOVDQU 1952(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1984(CX), Y10 VMOVDQU 2016(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2048(CX), Y10 VMOVDQU 2080(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2112(CX), Y10 VMOVDQU 2144(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2176(CX), Y10 VMOVDQU 2208(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2240(CX), Y10 VMOVDQU 2272(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Store 9 outputs VMOVDQU Y0, (R8) @@ -14846,7 +13891,7 @@ mulAvxTwo_4x9_end: RET // func mulAvxTwo_4x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x9Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -14907,64 +13952,55 @@ mulAvxTwo_4x9Xor_loop: VMOVDQU 32(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU (R9), Y1 VMOVDQU 64(CX), Y10 VMOVDQU 96(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU (R10), Y2 VMOVDQU 128(CX), Y10 VMOVDQU 160(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU (R11), Y3 VMOVDQU 192(CX), Y10 VMOVDQU 224(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU (R12), Y4 VMOVDQU 256(CX), Y10 VMOVDQU 288(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU (R13), Y5 VMOVDQU 320(CX), Y10 VMOVDQU 352(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU (R14), Y6 VMOVDQU 384(CX), Y10 VMOVDQU 416(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU (R15), Y7 VMOVDQU 448(CX), Y10 VMOVDQU 480(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU (DI), Y8 VMOVDQU 512(CX), Y10 VMOVDQU 544(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 1 to 9 outputs VMOVDQU (BX), Y12 @@ -14976,56 +14012,47 @@ mulAvxTwo_4x9Xor_loop: VMOVDQU 608(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 640(CX), Y10 VMOVDQU 672(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 704(CX), Y10 VMOVDQU 736(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 768(CX), Y10 VMOVDQU 800(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 832(CX), Y10 VMOVDQU 864(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 896(CX), Y10 VMOVDQU 928(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 960(CX), Y10 VMOVDQU 992(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1024(CX), Y10 VMOVDQU 1056(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1088(CX), Y10 VMOVDQU 1120(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 2 to 9 outputs VMOVDQU (SI), Y12 @@ -15037,56 +14064,47 @@ mulAvxTwo_4x9Xor_loop: VMOVDQU 1184(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1216(CX), Y10 VMOVDQU 1248(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1280(CX), Y10 VMOVDQU 1312(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1344(CX), Y10 VMOVDQU 1376(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1408(CX), Y10 VMOVDQU 1440(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 1472(CX), Y10 VMOVDQU 1504(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 1536(CX), Y10 VMOVDQU 1568(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1600(CX), Y10 VMOVDQU 1632(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1664(CX), Y10 VMOVDQU 1696(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 3 to 9 outputs VMOVDQU (AX), Y12 @@ -15098,56 +14116,47 @@ mulAvxTwo_4x9Xor_loop: VMOVDQU 1760(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1792(CX), Y10 VMOVDQU 1824(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1856(CX), Y10 VMOVDQU 1888(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1920(CX), Y10 VMOVDQU 1952(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1984(CX), Y10 VMOVDQU 2016(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2048(CX), Y10 VMOVDQU 2080(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2112(CX), Y10 VMOVDQU 2144(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2176(CX), Y10 VMOVDQU 2208(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2240(CX), Y10 VMOVDQU 2272(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Store 9 outputs VMOVDQU Y0, (R8) @@ -15178,7 +14187,7 @@ mulAvxTwo_4x9Xor_end: RET // func mulAvxTwo_4x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x10(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -15273,62 +14282,52 @@ mulAvxTwo_4x10_loop: VMOVDQU 672(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 704(CX), Y11 VMOVDQU 736(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 768(CX), Y11 VMOVDQU 800(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 832(CX), Y11 VMOVDQU 864(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 896(CX), Y11 VMOVDQU 928(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 960(CX), Y11 VMOVDQU 992(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1024(CX), Y11 VMOVDQU 1056(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1088(CX), Y11 VMOVDQU 1120(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1152(CX), Y11 VMOVDQU 1184(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1216(CX), Y11 VMOVDQU 1248(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 2 to 10 outputs VMOVDQU (DI), Y13 @@ -15340,62 +14339,52 @@ mulAvxTwo_4x10_loop: VMOVDQU 1312(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1344(CX), Y11 VMOVDQU 1376(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 1408(CX), Y11 VMOVDQU 1440(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 1472(CX), Y11 VMOVDQU 1504(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 1536(CX), Y11 VMOVDQU 1568(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 1600(CX), Y11 VMOVDQU 1632(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1664(CX), Y11 VMOVDQU 1696(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1728(CX), Y11 VMOVDQU 1760(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1792(CX), Y11 VMOVDQU 1824(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1856(CX), Y11 VMOVDQU 1888(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 3 to 10 outputs VMOVDQU (DX), Y13 @@ -15407,62 +14396,52 @@ mulAvxTwo_4x10_loop: VMOVDQU 1952(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1984(CX), Y11 VMOVDQU 2016(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2048(CX), Y11 VMOVDQU 2080(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2112(CX), Y11 VMOVDQU 2144(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2176(CX), Y11 VMOVDQU 2208(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2240(CX), Y11 VMOVDQU 2272(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2304(CX), Y11 VMOVDQU 2336(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 2368(CX), Y11 VMOVDQU 2400(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 2432(CX), Y11 VMOVDQU 2464(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 2496(CX), Y11 VMOVDQU 2528(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Store 10 outputs MOVQ (R8), R10 @@ -15496,7 +14475,7 @@ mulAvxTwo_4x10_end: RET // func mulAvxTwo_4x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_4x10Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -15536,80 +14515,70 @@ mulAvxTwo_4x10Xor_loop: VMOVDQU 32(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) MOVQ 24(R8), R10 VMOVDQU (R10)(R9*1), Y1 VMOVDQU 64(CX), Y11 VMOVDQU 96(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) MOVQ 48(R8), R10 VMOVDQU (R10)(R9*1), Y2 VMOVDQU 128(CX), Y11 VMOVDQU 160(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) MOVQ 72(R8), R10 VMOVDQU (R10)(R9*1), Y3 VMOVDQU 192(CX), Y11 VMOVDQU 224(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) MOVQ 96(R8), R10 VMOVDQU (R10)(R9*1), Y4 VMOVDQU 256(CX), Y11 VMOVDQU 288(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) MOVQ 120(R8), R10 VMOVDQU (R10)(R9*1), Y5 VMOVDQU 320(CX), Y11 VMOVDQU 352(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) MOVQ 144(R8), R10 VMOVDQU (R10)(R9*1), Y6 VMOVDQU 384(CX), Y11 VMOVDQU 416(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) MOVQ 168(R8), R10 VMOVDQU (R10)(R9*1), Y7 VMOVDQU 448(CX), Y11 VMOVDQU 480(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) MOVQ 192(R8), R10 VMOVDQU (R10)(R9*1), Y8 VMOVDQU 512(CX), Y11 VMOVDQU 544(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) MOVQ 216(R8), R10 VMOVDQU (R10)(R9*1), Y9 VMOVDQU 576(CX), Y11 VMOVDQU 608(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 1 to 10 outputs VMOVDQU (SI), Y13 @@ -15621,62 +14590,52 @@ mulAvxTwo_4x10Xor_loop: VMOVDQU 672(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 704(CX), Y11 VMOVDQU 736(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 768(CX), Y11 VMOVDQU 800(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 832(CX), Y11 VMOVDQU 864(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 896(CX), Y11 VMOVDQU 928(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 960(CX), Y11 VMOVDQU 992(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1024(CX), Y11 VMOVDQU 1056(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1088(CX), Y11 VMOVDQU 1120(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1152(CX), Y11 VMOVDQU 1184(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1216(CX), Y11 VMOVDQU 1248(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 2 to 10 outputs VMOVDQU (DI), Y13 @@ -15688,62 +14647,52 @@ mulAvxTwo_4x10Xor_loop: VMOVDQU 1312(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1344(CX), Y11 VMOVDQU 1376(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 1408(CX), Y11 VMOVDQU 1440(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 1472(CX), Y11 VMOVDQU 1504(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 1536(CX), Y11 VMOVDQU 1568(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 1600(CX), Y11 VMOVDQU 1632(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1664(CX), Y11 VMOVDQU 1696(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1728(CX), Y11 VMOVDQU 1760(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1792(CX), Y11 VMOVDQU 1824(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1856(CX), Y11 VMOVDQU 1888(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 3 to 10 outputs VMOVDQU (DX), Y13 @@ -15755,62 +14704,52 @@ mulAvxTwo_4x10Xor_loop: VMOVDQU 1952(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1984(CX), Y11 VMOVDQU 2016(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2048(CX), Y11 VMOVDQU 2080(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2112(CX), Y11 VMOVDQU 2144(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2176(CX), Y11 VMOVDQU 2208(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2240(CX), Y11 VMOVDQU 2272(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2304(CX), Y11 VMOVDQU 2336(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 2368(CX), Y11 VMOVDQU 2400(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 2432(CX), Y11 VMOVDQU 2464(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 2496(CX), Y11 VMOVDQU 2528(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Store 10 outputs MOVQ (R8), R10 @@ -15844,7 +14783,7 @@ mulAvxTwo_4x10Xor_end: RET // func mulAvxTwo_5x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x1(SB), NOSPLIT, $0-88 // Loading all tables to registers // Destination kept in GP registers @@ -15906,8 +14845,7 @@ mulAvxTwo_5x1_loop: VPAND Y11, Y13, Y13 VPSHUFB Y12, Y2, Y12 VPSHUFB Y13, Y3, Y13 - VPXOR Y12, Y13, Y12 - VPXOR Y12, Y10, Y10 + XOR3WAY( $0x00, Y12, Y13, Y10) // Load and process 32 bytes from input 2 to 1 outputs VMOVDQU (SI), Y12 @@ -15917,8 +14855,7 @@ mulAvxTwo_5x1_loop: VPAND Y11, Y13, Y13 VPSHUFB Y12, Y4, Y12 VPSHUFB Y13, Y5, Y13 - VPXOR Y12, Y13, Y12 - VPXOR Y12, Y10, Y10 + XOR3WAY( $0x00, Y12, Y13, Y10) // Load and process 32 bytes from input 3 to 1 outputs VMOVDQU (DI), Y12 @@ -15928,8 +14865,7 @@ mulAvxTwo_5x1_loop: VPAND Y11, Y13, Y13 VPSHUFB Y12, Y6, Y12 VPSHUFB Y13, Y7, Y13 - VPXOR Y12, Y13, Y12 - VPXOR Y12, Y10, Y10 + XOR3WAY( $0x00, Y12, Y13, Y10) // Load and process 32 bytes from input 4 to 1 outputs VMOVDQU (CX), Y12 @@ -15939,8 +14875,7 @@ mulAvxTwo_5x1_loop: VPAND Y11, Y13, Y13 VPSHUFB Y12, Y8, Y12 VPSHUFB Y13, Y9, Y13 - VPXOR Y12, Y13, Y12 - VPXOR Y12, Y10, Y10 + XOR3WAY( $0x00, Y12, Y13, Y10) // Store 1 outputs VMOVDQU Y10, (R8) @@ -15955,7 +14890,7 @@ mulAvxTwo_5x1_end: RET // func mulAvxTwo_5x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x1_64(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -16025,10 +14960,8 @@ mulAvxTwo_5x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 2 to 1 outputs VMOVDQU (DI), Y6 @@ -16046,10 +14979,8 @@ mulAvxTwo_5x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 3 to 1 outputs VMOVDQU (R8), Y6 @@ -16067,10 +14998,8 @@ mulAvxTwo_5x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 4 to 1 outputs VMOVDQU (DX), Y6 @@ -16088,10 +15017,8 @@ mulAvxTwo_5x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Store 1 outputs VMOVDQU Y0, (R9) @@ -16107,7 +15034,7 @@ mulAvxTwo_5x1_64_end: RET // func mulAvxTwo_5x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x1Xor(SB), NOSPLIT, $0-88 // Loading all tables to registers // Destination kept in GP registers @@ -16160,8 +15087,7 @@ mulAvxTwo_5x1Xor_loop: VMOVDQU (R8), Y10 VPSHUFB Y12, Y0, Y12 VPSHUFB Y13, Y1, Y13 - VPXOR Y12, Y13, Y12 - VPXOR Y12, Y10, Y10 + XOR3WAY( $0x00, Y12, Y13, Y10) // Load and process 32 bytes from input 1 to 1 outputs VMOVDQU (BX), Y12 @@ -16171,8 +15097,7 @@ mulAvxTwo_5x1Xor_loop: VPAND Y11, Y13, Y13 VPSHUFB Y12, Y2, Y12 VPSHUFB Y13, Y3, Y13 - VPXOR Y12, Y13, Y12 - VPXOR Y12, Y10, Y10 + XOR3WAY( $0x00, Y12, Y13, Y10) // Load and process 32 bytes from input 2 to 1 outputs VMOVDQU (SI), Y12 @@ -16182,8 +15107,7 @@ mulAvxTwo_5x1Xor_loop: VPAND Y11, Y13, Y13 VPSHUFB Y12, Y4, Y12 VPSHUFB Y13, Y5, Y13 - VPXOR Y12, Y13, Y12 - VPXOR Y12, Y10, Y10 + XOR3WAY( $0x00, Y12, Y13, Y10) // Load and process 32 bytes from input 3 to 1 outputs VMOVDQU (DI), Y12 @@ -16193,8 +15117,7 @@ mulAvxTwo_5x1Xor_loop: VPAND Y11, Y13, Y13 VPSHUFB Y12, Y6, Y12 VPSHUFB Y13, Y7, Y13 - VPXOR Y12, Y13, Y12 - VPXOR Y12, Y10, Y10 + XOR3WAY( $0x00, Y12, Y13, Y10) // Load and process 32 bytes from input 4 to 1 outputs VMOVDQU (CX), Y12 @@ -16204,8 +15127,7 @@ mulAvxTwo_5x1Xor_loop: VPAND Y11, Y13, Y13 VPSHUFB Y12, Y8, Y12 VPSHUFB Y13, Y9, Y13 - VPXOR Y12, Y13, Y12 - VPXOR Y12, Y10, Y10 + XOR3WAY( $0x00, Y12, Y13, Y10) // Store 1 outputs VMOVDQU Y10, (R8) @@ -16220,7 +15142,7 @@ mulAvxTwo_5x1Xor_end: RET // func mulAvxTwo_5x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x1_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -16275,10 +15197,8 @@ mulAvxTwo_5x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 1 to 1 outputs VMOVDQU (SI), Y6 @@ -16296,10 +15216,8 @@ mulAvxTwo_5x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 2 to 1 outputs VMOVDQU (DI), Y6 @@ -16317,10 +15235,8 @@ mulAvxTwo_5x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 3 to 1 outputs VMOVDQU (R8), Y6 @@ -16338,10 +15254,8 @@ mulAvxTwo_5x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 4 to 1 outputs VMOVDQU (DX), Y6 @@ -16359,10 +15273,8 @@ mulAvxTwo_5x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Store 1 outputs VMOVDQU Y0, (R9) @@ -16378,7 +15290,7 @@ mulAvxTwo_5x1_64Xor_end: RET // func mulAvxTwo_5x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x2(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -16441,14 +15353,12 @@ mulAvxTwo_5x2_loop: VMOVDQU 160(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 192(CX), Y3 VMOVDQU 224(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 2 to 2 outputs VMOVDQU (DI), Y5 @@ -16460,14 +15370,12 @@ mulAvxTwo_5x2_loop: VMOVDQU 288(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 320(CX), Y3 VMOVDQU 352(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 3 to 2 outputs VMOVDQU (R8), Y5 @@ -16479,14 +15387,12 @@ mulAvxTwo_5x2_loop: VMOVDQU 416(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 448(CX), Y3 VMOVDQU 480(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 4 to 2 outputs VMOVDQU (DX), Y5 @@ -16498,14 +15404,12 @@ mulAvxTwo_5x2_loop: VMOVDQU 544(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 576(CX), Y3 VMOVDQU 608(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Store 2 outputs VMOVDQU Y0, (R10) @@ -16522,7 +15426,7 @@ mulAvxTwo_5x2_end: RET // func mulAvxTwo_5x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x2_64(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -16602,20 +15506,16 @@ mulAvxTwo_5x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 2 to 2 outputs VMOVDQU (DI), Y9 @@ -16633,20 +15533,16 @@ mulAvxTwo_5x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 3 to 2 outputs VMOVDQU (R8), Y9 @@ -16664,20 +15560,16 @@ mulAvxTwo_5x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 4 to 2 outputs VMOVDQU (DX), Y9 @@ -16695,20 +15587,16 @@ mulAvxTwo_5x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Store 2 outputs VMOVDQU Y0, (R10) @@ -16727,7 +15615,7 @@ mulAvxTwo_5x2_64_end: RET // func mulAvxTwo_5x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x2Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -16774,15 +15662,13 @@ mulAvxTwo_5x2Xor_loop: VMOVDQU 32(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU (R9), Y1 VMOVDQU 64(CX), Y3 VMOVDQU 96(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 1 to 2 outputs VMOVDQU (SI), Y5 @@ -16794,14 +15680,12 @@ mulAvxTwo_5x2Xor_loop: VMOVDQU 160(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 192(CX), Y3 VMOVDQU 224(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 2 to 2 outputs VMOVDQU (DI), Y5 @@ -16813,14 +15697,12 @@ mulAvxTwo_5x2Xor_loop: VMOVDQU 288(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 320(CX), Y3 VMOVDQU 352(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 3 to 2 outputs VMOVDQU (R8), Y5 @@ -16832,14 +15714,12 @@ mulAvxTwo_5x2Xor_loop: VMOVDQU 416(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 448(CX), Y3 VMOVDQU 480(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 4 to 2 outputs VMOVDQU (DX), Y5 @@ -16851,14 +15731,12 @@ mulAvxTwo_5x2Xor_loop: VMOVDQU 544(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 576(CX), Y3 VMOVDQU 608(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Store 2 outputs VMOVDQU Y0, (R10) @@ -16875,7 +15753,7 @@ mulAvxTwo_5x2Xor_end: RET // func mulAvxTwo_5x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x2_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -16934,20 +15812,16 @@ mulAvxTwo_5x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 64(CX), Y5 VMOVDQU 96(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 1 to 2 outputs VMOVDQU (SI), Y9 @@ -16965,20 +15839,16 @@ mulAvxTwo_5x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 2 to 2 outputs VMOVDQU (DI), Y9 @@ -16996,20 +15866,16 @@ mulAvxTwo_5x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 3 to 2 outputs VMOVDQU (R8), Y9 @@ -17027,20 +15893,16 @@ mulAvxTwo_5x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 4 to 2 outputs VMOVDQU (DX), Y9 @@ -17058,20 +15920,16 @@ mulAvxTwo_5x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Store 2 outputs VMOVDQU Y0, (R10) @@ -17090,7 +15948,7 @@ mulAvxTwo_5x2_64Xor_end: RET // func mulAvxTwo_5x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x3(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -17160,20 +16018,17 @@ mulAvxTwo_5x3_loop: VMOVDQU 224(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 256(CX), Y4 VMOVDQU 288(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 320(CX), Y4 VMOVDQU 352(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 2 to 3 outputs VMOVDQU (DI), Y6 @@ -17185,20 +16040,17 @@ mulAvxTwo_5x3_loop: VMOVDQU 416(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 448(CX), Y4 VMOVDQU 480(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 512(CX), Y4 VMOVDQU 544(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 3 to 3 outputs VMOVDQU (R8), Y6 @@ -17210,20 +16062,17 @@ mulAvxTwo_5x3_loop: VMOVDQU 608(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 640(CX), Y4 VMOVDQU 672(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 704(CX), Y4 VMOVDQU 736(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 4 to 3 outputs VMOVDQU (DX), Y6 @@ -17235,20 +16084,17 @@ mulAvxTwo_5x3_loop: VMOVDQU 800(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 832(CX), Y4 VMOVDQU 864(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 896(CX), Y4 VMOVDQU 928(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Store 3 outputs VMOVDQU Y0, (R10) @@ -17267,7 +16113,7 @@ mulAvxTwo_5x3_end: RET // func mulAvxTwo_5x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x3_64(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -17357,30 +16203,24 @@ mulAvxTwo_5x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 2 to 3 outputs VMOVDQU (DI), Y11 @@ -17398,30 +16238,24 @@ mulAvxTwo_5x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 3 to 3 outputs VMOVDQU (R8), Y11 @@ -17439,30 +16273,24 @@ mulAvxTwo_5x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 4 to 3 outputs VMOVDQU (DX), Y11 @@ -17480,30 +16308,24 @@ mulAvxTwo_5x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Store 3 outputs VMOVDQU Y0, (R10) @@ -17525,7 +16347,7 @@ mulAvxTwo_5x3_64_end: RET // func mulAvxTwo_5x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x3Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -17574,22 +16396,19 @@ mulAvxTwo_5x3Xor_loop: VMOVDQU 32(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU (R11), Y1 VMOVDQU 64(CX), Y4 VMOVDQU 96(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU (R9), Y2 VMOVDQU 128(CX), Y4 VMOVDQU 160(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 1 to 3 outputs VMOVDQU (SI), Y6 @@ -17601,20 +16420,17 @@ mulAvxTwo_5x3Xor_loop: VMOVDQU 224(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 256(CX), Y4 VMOVDQU 288(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 320(CX), Y4 VMOVDQU 352(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 2 to 3 outputs VMOVDQU (DI), Y6 @@ -17626,20 +16442,17 @@ mulAvxTwo_5x3Xor_loop: VMOVDQU 416(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 448(CX), Y4 VMOVDQU 480(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 512(CX), Y4 VMOVDQU 544(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 3 to 3 outputs VMOVDQU (R8), Y6 @@ -17651,20 +16464,17 @@ mulAvxTwo_5x3Xor_loop: VMOVDQU 608(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 640(CX), Y4 VMOVDQU 672(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 704(CX), Y4 VMOVDQU 736(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 4 to 3 outputs VMOVDQU (DX), Y6 @@ -17676,20 +16486,17 @@ mulAvxTwo_5x3Xor_loop: VMOVDQU 800(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 832(CX), Y4 VMOVDQU 864(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 896(CX), Y4 VMOVDQU 928(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Store 3 outputs VMOVDQU Y0, (R10) @@ -17708,7 +16515,7 @@ mulAvxTwo_5x3Xor_end: RET // func mulAvxTwo_5x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x3_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -17771,30 +16578,24 @@ mulAvxTwo_5x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 64(CX), Y7 VMOVDQU 96(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 128(CX), Y7 VMOVDQU 160(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 1 to 3 outputs VMOVDQU (SI), Y11 @@ -17812,30 +16613,24 @@ mulAvxTwo_5x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 2 to 3 outputs VMOVDQU (DI), Y11 @@ -17853,30 +16648,24 @@ mulAvxTwo_5x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 3 to 3 outputs VMOVDQU (R8), Y11 @@ -17894,30 +16683,24 @@ mulAvxTwo_5x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 4 to 3 outputs VMOVDQU (DX), Y11 @@ -17935,30 +16718,24 @@ mulAvxTwo_5x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Store 3 outputs VMOVDQU Y0, (R10) @@ -17980,7 +16757,7 @@ mulAvxTwo_5x3_64Xor_end: RET // func mulAvxTwo_5x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x4(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -18057,26 +16834,22 @@ mulAvxTwo_5x4_loop: VMOVDQU 288(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 384(CX), Y5 VMOVDQU 416(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 2 to 4 outputs VMOVDQU (DI), Y7 @@ -18088,26 +16861,22 @@ mulAvxTwo_5x4_loop: VMOVDQU 544(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 640(CX), Y5 VMOVDQU 672(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 3 to 4 outputs VMOVDQU (R8), Y7 @@ -18119,26 +16888,22 @@ mulAvxTwo_5x4_loop: VMOVDQU 800(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 832(CX), Y5 VMOVDQU 864(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 896(CX), Y5 VMOVDQU 928(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 960(CX), Y5 VMOVDQU 992(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 4 to 4 outputs VMOVDQU (DX), Y7 @@ -18150,26 +16915,22 @@ mulAvxTwo_5x4_loop: VMOVDQU 1056(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1088(CX), Y5 VMOVDQU 1120(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1152(CX), Y5 VMOVDQU 1184(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1216(CX), Y5 VMOVDQU 1248(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Store 4 outputs VMOVDQU Y0, (R10) @@ -18190,7 +16951,7 @@ mulAvxTwo_5x4_end: RET // func mulAvxTwo_5x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x4Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -18241,29 +17002,25 @@ mulAvxTwo_5x4Xor_loop: VMOVDQU 32(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU (R11), Y1 VMOVDQU 64(CX), Y5 VMOVDQU 96(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU (R12), Y2 VMOVDQU 128(CX), Y5 VMOVDQU 160(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU (R9), Y3 VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 1 to 4 outputs VMOVDQU (SI), Y7 @@ -18275,26 +17032,22 @@ mulAvxTwo_5x4Xor_loop: VMOVDQU 288(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 384(CX), Y5 VMOVDQU 416(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 2 to 4 outputs VMOVDQU (DI), Y7 @@ -18306,26 +17059,22 @@ mulAvxTwo_5x4Xor_loop: VMOVDQU 544(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 640(CX), Y5 VMOVDQU 672(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 3 to 4 outputs VMOVDQU (R8), Y7 @@ -18337,26 +17086,22 @@ mulAvxTwo_5x4Xor_loop: VMOVDQU 800(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 832(CX), Y5 VMOVDQU 864(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 896(CX), Y5 VMOVDQU 928(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 960(CX), Y5 VMOVDQU 992(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 4 to 4 outputs VMOVDQU (DX), Y7 @@ -18368,26 +17113,22 @@ mulAvxTwo_5x4Xor_loop: VMOVDQU 1056(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1088(CX), Y5 VMOVDQU 1120(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1152(CX), Y5 VMOVDQU 1184(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1216(CX), Y5 VMOVDQU 1248(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Store 4 outputs VMOVDQU Y0, (R10) @@ -18408,7 +17149,7 @@ mulAvxTwo_5x4Xor_end: RET // func mulAvxTwo_5x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x5(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -18492,32 +17233,27 @@ mulAvxTwo_5x5_loop: VMOVDQU 352(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 384(CX), Y6 VMOVDQU 416(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 448(CX), Y6 VMOVDQU 480(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 512(CX), Y6 VMOVDQU 544(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 576(CX), Y6 VMOVDQU 608(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 2 to 5 outputs VMOVDQU (DI), Y8 @@ -18529,32 +17265,27 @@ mulAvxTwo_5x5_loop: VMOVDQU 672(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 704(CX), Y6 VMOVDQU 736(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 768(CX), Y6 VMOVDQU 800(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 832(CX), Y6 VMOVDQU 864(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 896(CX), Y6 VMOVDQU 928(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 3 to 5 outputs VMOVDQU (R8), Y8 @@ -18566,32 +17297,27 @@ mulAvxTwo_5x5_loop: VMOVDQU 992(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1024(CX), Y6 VMOVDQU 1056(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1088(CX), Y6 VMOVDQU 1120(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1152(CX), Y6 VMOVDQU 1184(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1216(CX), Y6 VMOVDQU 1248(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 4 to 5 outputs VMOVDQU (DX), Y8 @@ -18603,32 +17329,27 @@ mulAvxTwo_5x5_loop: VMOVDQU 1312(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1344(CX), Y6 VMOVDQU 1376(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1408(CX), Y6 VMOVDQU 1440(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1472(CX), Y6 VMOVDQU 1504(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1536(CX), Y6 VMOVDQU 1568(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Store 5 outputs VMOVDQU Y0, (R10) @@ -18651,7 +17372,7 @@ mulAvxTwo_5x5_end: RET // func mulAvxTwo_5x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x5Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -18704,36 +17425,31 @@ mulAvxTwo_5x5Xor_loop: VMOVDQU 32(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU (R11), Y1 VMOVDQU 64(CX), Y6 VMOVDQU 96(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU (R12), Y2 VMOVDQU 128(CX), Y6 VMOVDQU 160(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU (R13), Y3 VMOVDQU 192(CX), Y6 VMOVDQU 224(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU (R9), Y4 VMOVDQU 256(CX), Y6 VMOVDQU 288(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 1 to 5 outputs VMOVDQU (SI), Y8 @@ -18745,32 +17461,27 @@ mulAvxTwo_5x5Xor_loop: VMOVDQU 352(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 384(CX), Y6 VMOVDQU 416(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 448(CX), Y6 VMOVDQU 480(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 512(CX), Y6 VMOVDQU 544(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 576(CX), Y6 VMOVDQU 608(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 2 to 5 outputs VMOVDQU (DI), Y8 @@ -18782,32 +17493,27 @@ mulAvxTwo_5x5Xor_loop: VMOVDQU 672(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 704(CX), Y6 VMOVDQU 736(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 768(CX), Y6 VMOVDQU 800(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 832(CX), Y6 VMOVDQU 864(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 896(CX), Y6 VMOVDQU 928(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 3 to 5 outputs VMOVDQU (R8), Y8 @@ -18819,32 +17525,27 @@ mulAvxTwo_5x5Xor_loop: VMOVDQU 992(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1024(CX), Y6 VMOVDQU 1056(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1088(CX), Y6 VMOVDQU 1120(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1152(CX), Y6 VMOVDQU 1184(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1216(CX), Y6 VMOVDQU 1248(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 4 to 5 outputs VMOVDQU (DX), Y8 @@ -18856,32 +17557,27 @@ mulAvxTwo_5x5Xor_loop: VMOVDQU 1312(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1344(CX), Y6 VMOVDQU 1376(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1408(CX), Y6 VMOVDQU 1440(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1472(CX), Y6 VMOVDQU 1504(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1536(CX), Y6 VMOVDQU 1568(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Store 5 outputs VMOVDQU Y0, (R10) @@ -18904,7 +17600,7 @@ mulAvxTwo_5x5Xor_end: RET // func mulAvxTwo_5x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x6(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -18995,38 +17691,32 @@ mulAvxTwo_5x6_loop: VMOVDQU 416(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 576(CX), Y7 VMOVDQU 608(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 2 to 6 outputs VMOVDQU (DI), Y9 @@ -19038,38 +17728,32 @@ mulAvxTwo_5x6_loop: VMOVDQU 800(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 960(CX), Y7 VMOVDQU 992(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 3 to 6 outputs VMOVDQU (R8), Y9 @@ -19081,38 +17765,32 @@ mulAvxTwo_5x6_loop: VMOVDQU 1184(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1216(CX), Y7 VMOVDQU 1248(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1280(CX), Y7 VMOVDQU 1312(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1344(CX), Y7 VMOVDQU 1376(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1408(CX), Y7 VMOVDQU 1440(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1472(CX), Y7 VMOVDQU 1504(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 4 to 6 outputs VMOVDQU (DX), Y9 @@ -19124,38 +17802,32 @@ mulAvxTwo_5x6_loop: VMOVDQU 1568(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1600(CX), Y7 VMOVDQU 1632(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1664(CX), Y7 VMOVDQU 1696(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1728(CX), Y7 VMOVDQU 1760(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1792(CX), Y7 VMOVDQU 1824(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1856(CX), Y7 VMOVDQU 1888(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Store 6 outputs VMOVDQU Y0, (R10) @@ -19180,7 +17852,7 @@ mulAvxTwo_5x6_end: RET // func mulAvxTwo_5x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x6Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -19235,43 +17907,37 @@ mulAvxTwo_5x6Xor_loop: VMOVDQU 32(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU (R11), Y1 VMOVDQU 64(CX), Y7 VMOVDQU 96(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU (R12), Y2 VMOVDQU 128(CX), Y7 VMOVDQU 160(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU (R13), Y3 VMOVDQU 192(CX), Y7 VMOVDQU 224(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU (R14), Y4 VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU (R9), Y5 VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 1 to 6 outputs VMOVDQU (SI), Y9 @@ -19283,38 +17949,32 @@ mulAvxTwo_5x6Xor_loop: VMOVDQU 416(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 576(CX), Y7 VMOVDQU 608(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 2 to 6 outputs VMOVDQU (DI), Y9 @@ -19326,38 +17986,32 @@ mulAvxTwo_5x6Xor_loop: VMOVDQU 800(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 960(CX), Y7 VMOVDQU 992(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 3 to 6 outputs VMOVDQU (R8), Y9 @@ -19369,38 +18023,32 @@ mulAvxTwo_5x6Xor_loop: VMOVDQU 1184(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1216(CX), Y7 VMOVDQU 1248(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1280(CX), Y7 VMOVDQU 1312(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1344(CX), Y7 VMOVDQU 1376(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1408(CX), Y7 VMOVDQU 1440(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1472(CX), Y7 VMOVDQU 1504(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 4 to 6 outputs VMOVDQU (DX), Y9 @@ -19412,38 +18060,32 @@ mulAvxTwo_5x6Xor_loop: VMOVDQU 1568(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1600(CX), Y7 VMOVDQU 1632(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1664(CX), Y7 VMOVDQU 1696(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1728(CX), Y7 VMOVDQU 1760(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1792(CX), Y7 VMOVDQU 1824(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1856(CX), Y7 VMOVDQU 1888(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Store 6 outputs VMOVDQU Y0, (R10) @@ -19468,7 +18110,7 @@ mulAvxTwo_5x6Xor_end: RET // func mulAvxTwo_5x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x7(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -19566,44 +18208,37 @@ mulAvxTwo_5x7_loop: VMOVDQU 480(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 512(CX), Y8 VMOVDQU 544(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 576(CX), Y8 VMOVDQU 608(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 640(CX), Y8 VMOVDQU 672(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 704(CX), Y8 VMOVDQU 736(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 768(CX), Y8 VMOVDQU 800(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 832(CX), Y8 VMOVDQU 864(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 2 to 7 outputs VMOVDQU (DI), Y10 @@ -19615,44 +18250,37 @@ mulAvxTwo_5x7_loop: VMOVDQU 928(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 960(CX), Y8 VMOVDQU 992(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1024(CX), Y8 VMOVDQU 1056(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1088(CX), Y8 VMOVDQU 1120(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1152(CX), Y8 VMOVDQU 1184(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1216(CX), Y8 VMOVDQU 1248(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1280(CX), Y8 VMOVDQU 1312(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 3 to 7 outputs VMOVDQU (R8), Y10 @@ -19664,44 +18292,37 @@ mulAvxTwo_5x7_loop: VMOVDQU 1376(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1408(CX), Y8 VMOVDQU 1440(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1472(CX), Y8 VMOVDQU 1504(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1536(CX), Y8 VMOVDQU 1568(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1600(CX), Y8 VMOVDQU 1632(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1664(CX), Y8 VMOVDQU 1696(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1728(CX), Y8 VMOVDQU 1760(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 4 to 7 outputs VMOVDQU (DX), Y10 @@ -19713,44 +18334,37 @@ mulAvxTwo_5x7_loop: VMOVDQU 1824(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1856(CX), Y8 VMOVDQU 1888(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1920(CX), Y8 VMOVDQU 1952(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1984(CX), Y8 VMOVDQU 2016(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2048(CX), Y8 VMOVDQU 2080(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 2112(CX), Y8 VMOVDQU 2144(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 2176(CX), Y8 VMOVDQU 2208(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Store 7 outputs VMOVDQU Y0, (R10) @@ -19777,7 +18391,7 @@ mulAvxTwo_5x7_end: RET // func mulAvxTwo_5x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x7Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -19834,50 +18448,43 @@ mulAvxTwo_5x7Xor_loop: VMOVDQU 32(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU (R11), Y1 VMOVDQU 64(CX), Y8 VMOVDQU 96(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU (R12), Y2 VMOVDQU 128(CX), Y8 VMOVDQU 160(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU (R13), Y3 VMOVDQU 192(CX), Y8 VMOVDQU 224(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU (R14), Y4 VMOVDQU 256(CX), Y8 VMOVDQU 288(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU (R15), Y5 VMOVDQU 320(CX), Y8 VMOVDQU 352(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU (R9), Y6 VMOVDQU 384(CX), Y8 VMOVDQU 416(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 1 to 7 outputs VMOVDQU (SI), Y10 @@ -19889,44 +18496,37 @@ mulAvxTwo_5x7Xor_loop: VMOVDQU 480(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 512(CX), Y8 VMOVDQU 544(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 576(CX), Y8 VMOVDQU 608(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 640(CX), Y8 VMOVDQU 672(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 704(CX), Y8 VMOVDQU 736(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 768(CX), Y8 VMOVDQU 800(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 832(CX), Y8 VMOVDQU 864(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 2 to 7 outputs VMOVDQU (DI), Y10 @@ -19938,44 +18538,37 @@ mulAvxTwo_5x7Xor_loop: VMOVDQU 928(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 960(CX), Y8 VMOVDQU 992(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1024(CX), Y8 VMOVDQU 1056(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1088(CX), Y8 VMOVDQU 1120(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1152(CX), Y8 VMOVDQU 1184(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1216(CX), Y8 VMOVDQU 1248(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1280(CX), Y8 VMOVDQU 1312(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 3 to 7 outputs VMOVDQU (R8), Y10 @@ -19987,44 +18580,37 @@ mulAvxTwo_5x7Xor_loop: VMOVDQU 1376(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1408(CX), Y8 VMOVDQU 1440(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1472(CX), Y8 VMOVDQU 1504(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1536(CX), Y8 VMOVDQU 1568(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1600(CX), Y8 VMOVDQU 1632(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1664(CX), Y8 VMOVDQU 1696(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1728(CX), Y8 VMOVDQU 1760(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 4 to 7 outputs VMOVDQU (DX), Y10 @@ -20036,44 +18622,37 @@ mulAvxTwo_5x7Xor_loop: VMOVDQU 1824(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1856(CX), Y8 VMOVDQU 1888(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1920(CX), Y8 VMOVDQU 1952(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1984(CX), Y8 VMOVDQU 2016(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2048(CX), Y8 VMOVDQU 2080(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 2112(CX), Y8 VMOVDQU 2144(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 2176(CX), Y8 VMOVDQU 2208(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Store 7 outputs VMOVDQU Y0, (R10) @@ -20100,7 +18679,7 @@ mulAvxTwo_5x7Xor_end: RET // func mulAvxTwo_5x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x8(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -20207,50 +18786,42 @@ mulAvxTwo_5x8_loop: VMOVDQU 544(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 576(CX), Y9 VMOVDQU 608(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y9 VMOVDQU 672(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 704(CX), Y9 VMOVDQU 736(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 768(CX), Y9 VMOVDQU 800(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 832(CX), Y9 VMOVDQU 864(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 896(CX), Y9 VMOVDQU 928(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 960(CX), Y9 VMOVDQU 992(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 2 to 8 outputs VMOVDQU (SI), Y11 @@ -20262,50 +18833,42 @@ mulAvxTwo_5x8_loop: VMOVDQU 1056(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1088(CX), Y9 VMOVDQU 1120(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1152(CX), Y9 VMOVDQU 1184(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1216(CX), Y9 VMOVDQU 1248(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y9 VMOVDQU 1312(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1344(CX), Y9 VMOVDQU 1376(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1408(CX), Y9 VMOVDQU 1440(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1472(CX), Y9 VMOVDQU 1504(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 3 to 8 outputs VMOVDQU (DI), Y11 @@ -20317,50 +18880,42 @@ mulAvxTwo_5x8_loop: VMOVDQU 1568(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1600(CX), Y9 VMOVDQU 1632(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1664(CX), Y9 VMOVDQU 1696(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1728(CX), Y9 VMOVDQU 1760(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1792(CX), Y9 VMOVDQU 1824(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1856(CX), Y9 VMOVDQU 1888(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1920(CX), Y9 VMOVDQU 1952(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1984(CX), Y9 VMOVDQU 2016(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 4 to 8 outputs VMOVDQU (AX), Y11 @@ -20372,50 +18927,42 @@ mulAvxTwo_5x8_loop: VMOVDQU 2080(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 2112(CX), Y9 VMOVDQU 2144(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 2176(CX), Y9 VMOVDQU 2208(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 2240(CX), Y9 VMOVDQU 2272(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 2304(CX), Y9 VMOVDQU 2336(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 2368(CX), Y9 VMOVDQU 2400(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 2432(CX), Y9 VMOVDQU 2464(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 2496(CX), Y9 VMOVDQU 2528(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Store 8 outputs VMOVDQU Y0, (R9) @@ -20444,7 +18991,7 @@ mulAvxTwo_5x8_end: RET // func mulAvxTwo_5x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x8Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -20505,57 +19052,49 @@ mulAvxTwo_5x8Xor_loop: VMOVDQU 32(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU (R10), Y1 VMOVDQU 64(CX), Y9 VMOVDQU 96(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU (R11), Y2 VMOVDQU 128(CX), Y9 VMOVDQU 160(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU (R12), Y3 VMOVDQU 192(CX), Y9 VMOVDQU 224(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU (R13), Y4 VMOVDQU 256(CX), Y9 VMOVDQU 288(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU (R14), Y5 VMOVDQU 320(CX), Y9 VMOVDQU 352(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU (R15), Y6 VMOVDQU 384(CX), Y9 VMOVDQU 416(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU (R8), Y7 VMOVDQU 448(CX), Y9 VMOVDQU 480(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 1 to 8 outputs VMOVDQU (BX), Y11 @@ -20567,50 +19106,42 @@ mulAvxTwo_5x8Xor_loop: VMOVDQU 544(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 576(CX), Y9 VMOVDQU 608(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y9 VMOVDQU 672(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 704(CX), Y9 VMOVDQU 736(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 768(CX), Y9 VMOVDQU 800(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 832(CX), Y9 VMOVDQU 864(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 896(CX), Y9 VMOVDQU 928(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 960(CX), Y9 VMOVDQU 992(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 2 to 8 outputs VMOVDQU (SI), Y11 @@ -20622,50 +19153,42 @@ mulAvxTwo_5x8Xor_loop: VMOVDQU 1056(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1088(CX), Y9 VMOVDQU 1120(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1152(CX), Y9 VMOVDQU 1184(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1216(CX), Y9 VMOVDQU 1248(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y9 VMOVDQU 1312(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1344(CX), Y9 VMOVDQU 1376(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1408(CX), Y9 VMOVDQU 1440(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1472(CX), Y9 VMOVDQU 1504(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 3 to 8 outputs VMOVDQU (DI), Y11 @@ -20677,50 +19200,42 @@ mulAvxTwo_5x8Xor_loop: VMOVDQU 1568(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1600(CX), Y9 VMOVDQU 1632(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1664(CX), Y9 VMOVDQU 1696(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1728(CX), Y9 VMOVDQU 1760(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1792(CX), Y9 VMOVDQU 1824(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1856(CX), Y9 VMOVDQU 1888(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1920(CX), Y9 VMOVDQU 1952(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1984(CX), Y9 VMOVDQU 2016(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 4 to 8 outputs VMOVDQU (AX), Y11 @@ -20732,50 +19247,42 @@ mulAvxTwo_5x8Xor_loop: VMOVDQU 2080(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 2112(CX), Y9 VMOVDQU 2144(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 2176(CX), Y9 VMOVDQU 2208(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 2240(CX), Y9 VMOVDQU 2272(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 2304(CX), Y9 VMOVDQU 2336(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 2368(CX), Y9 VMOVDQU 2400(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 2432(CX), Y9 VMOVDQU 2464(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 2496(CX), Y9 VMOVDQU 2528(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Store 8 outputs VMOVDQU Y0, (R9) @@ -20804,7 +19311,7 @@ mulAvxTwo_5x8Xor_end: RET // func mulAvxTwo_5x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x9(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -20896,56 +19403,47 @@ mulAvxTwo_5x9_loop: VMOVDQU 608(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 640(CX), Y10 VMOVDQU 672(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 704(CX), Y10 VMOVDQU 736(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 768(CX), Y10 VMOVDQU 800(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 832(CX), Y10 VMOVDQU 864(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 896(CX), Y10 VMOVDQU 928(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 960(CX), Y10 VMOVDQU 992(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1024(CX), Y10 VMOVDQU 1056(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1088(CX), Y10 VMOVDQU 1120(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 2 to 9 outputs VMOVDQU (DI), Y12 @@ -20957,56 +19455,47 @@ mulAvxTwo_5x9_loop: VMOVDQU 1184(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1216(CX), Y10 VMOVDQU 1248(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1280(CX), Y10 VMOVDQU 1312(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1344(CX), Y10 VMOVDQU 1376(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1408(CX), Y10 VMOVDQU 1440(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 1472(CX), Y10 VMOVDQU 1504(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 1536(CX), Y10 VMOVDQU 1568(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1600(CX), Y10 VMOVDQU 1632(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1664(CX), Y10 VMOVDQU 1696(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 3 to 9 outputs VMOVDQU (R8), Y12 @@ -21018,56 +19507,47 @@ mulAvxTwo_5x9_loop: VMOVDQU 1760(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1792(CX), Y10 VMOVDQU 1824(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1856(CX), Y10 VMOVDQU 1888(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1920(CX), Y10 VMOVDQU 1952(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1984(CX), Y10 VMOVDQU 2016(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2048(CX), Y10 VMOVDQU 2080(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2112(CX), Y10 VMOVDQU 2144(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2176(CX), Y10 VMOVDQU 2208(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2240(CX), Y10 VMOVDQU 2272(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 4 to 9 outputs VMOVDQU (DX), Y12 @@ -21079,56 +19559,47 @@ mulAvxTwo_5x9_loop: VMOVDQU 2336(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 2368(CX), Y10 VMOVDQU 2400(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 2432(CX), Y10 VMOVDQU 2464(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 2496(CX), Y10 VMOVDQU 2528(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 2560(CX), Y10 VMOVDQU 2592(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2624(CX), Y10 VMOVDQU 2656(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2688(CX), Y10 VMOVDQU 2720(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2752(CX), Y10 VMOVDQU 2784(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2816(CX), Y10 VMOVDQU 2848(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Store 9 outputs MOVQ (R9), R11 @@ -21160,7 +19631,7 @@ mulAvxTwo_5x9_end: RET // func mulAvxTwo_5x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x9Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -21202,72 +19673,63 @@ mulAvxTwo_5x9Xor_loop: VMOVDQU 32(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) MOVQ 24(R9), R11 VMOVDQU (R11)(R10*1), Y1 VMOVDQU 64(CX), Y10 VMOVDQU 96(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) MOVQ 48(R9), R11 VMOVDQU (R11)(R10*1), Y2 VMOVDQU 128(CX), Y10 VMOVDQU 160(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) MOVQ 72(R9), R11 VMOVDQU (R11)(R10*1), Y3 VMOVDQU 192(CX), Y10 VMOVDQU 224(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) MOVQ 96(R9), R11 VMOVDQU (R11)(R10*1), Y4 VMOVDQU 256(CX), Y10 VMOVDQU 288(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) MOVQ 120(R9), R11 VMOVDQU (R11)(R10*1), Y5 VMOVDQU 320(CX), Y10 VMOVDQU 352(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) MOVQ 144(R9), R11 VMOVDQU (R11)(R10*1), Y6 VMOVDQU 384(CX), Y10 VMOVDQU 416(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) MOVQ 168(R9), R11 VMOVDQU (R11)(R10*1), Y7 VMOVDQU 448(CX), Y10 VMOVDQU 480(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) MOVQ 192(R9), R11 VMOVDQU (R11)(R10*1), Y8 VMOVDQU 512(CX), Y10 VMOVDQU 544(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 1 to 9 outputs VMOVDQU (SI), Y12 @@ -21279,56 +19741,47 @@ mulAvxTwo_5x9Xor_loop: VMOVDQU 608(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 640(CX), Y10 VMOVDQU 672(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 704(CX), Y10 VMOVDQU 736(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 768(CX), Y10 VMOVDQU 800(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 832(CX), Y10 VMOVDQU 864(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 896(CX), Y10 VMOVDQU 928(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 960(CX), Y10 VMOVDQU 992(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1024(CX), Y10 VMOVDQU 1056(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1088(CX), Y10 VMOVDQU 1120(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 2 to 9 outputs VMOVDQU (DI), Y12 @@ -21340,56 +19793,47 @@ mulAvxTwo_5x9Xor_loop: VMOVDQU 1184(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1216(CX), Y10 VMOVDQU 1248(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1280(CX), Y10 VMOVDQU 1312(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1344(CX), Y10 VMOVDQU 1376(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1408(CX), Y10 VMOVDQU 1440(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 1472(CX), Y10 VMOVDQU 1504(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 1536(CX), Y10 VMOVDQU 1568(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1600(CX), Y10 VMOVDQU 1632(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1664(CX), Y10 VMOVDQU 1696(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 3 to 9 outputs VMOVDQU (R8), Y12 @@ -21401,56 +19845,47 @@ mulAvxTwo_5x9Xor_loop: VMOVDQU 1760(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1792(CX), Y10 VMOVDQU 1824(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1856(CX), Y10 VMOVDQU 1888(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1920(CX), Y10 VMOVDQU 1952(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1984(CX), Y10 VMOVDQU 2016(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2048(CX), Y10 VMOVDQU 2080(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2112(CX), Y10 VMOVDQU 2144(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2176(CX), Y10 VMOVDQU 2208(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2240(CX), Y10 VMOVDQU 2272(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 4 to 9 outputs VMOVDQU (DX), Y12 @@ -21462,56 +19897,47 @@ mulAvxTwo_5x9Xor_loop: VMOVDQU 2336(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 2368(CX), Y10 VMOVDQU 2400(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 2432(CX), Y10 VMOVDQU 2464(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 2496(CX), Y10 VMOVDQU 2528(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 2560(CX), Y10 VMOVDQU 2592(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2624(CX), Y10 VMOVDQU 2656(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2688(CX), Y10 VMOVDQU 2720(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2752(CX), Y10 VMOVDQU 2784(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2816(CX), Y10 VMOVDQU 2848(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Store 9 outputs MOVQ (R9), R11 @@ -21543,7 +19969,7 @@ mulAvxTwo_5x9Xor_end: RET // func mulAvxTwo_5x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x10(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -21640,62 +20066,52 @@ mulAvxTwo_5x10_loop: VMOVDQU 672(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 704(CX), Y11 VMOVDQU 736(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 768(CX), Y11 VMOVDQU 800(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 832(CX), Y11 VMOVDQU 864(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 896(CX), Y11 VMOVDQU 928(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 960(CX), Y11 VMOVDQU 992(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1024(CX), Y11 VMOVDQU 1056(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1088(CX), Y11 VMOVDQU 1120(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1152(CX), Y11 VMOVDQU 1184(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1216(CX), Y11 VMOVDQU 1248(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 2 to 10 outputs VMOVDQU (DI), Y13 @@ -21707,62 +20123,52 @@ mulAvxTwo_5x10_loop: VMOVDQU 1312(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1344(CX), Y11 VMOVDQU 1376(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 1408(CX), Y11 VMOVDQU 1440(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 1472(CX), Y11 VMOVDQU 1504(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 1536(CX), Y11 VMOVDQU 1568(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 1600(CX), Y11 VMOVDQU 1632(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1664(CX), Y11 VMOVDQU 1696(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1728(CX), Y11 VMOVDQU 1760(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1792(CX), Y11 VMOVDQU 1824(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1856(CX), Y11 VMOVDQU 1888(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 3 to 10 outputs VMOVDQU (R8), Y13 @@ -21774,62 +20180,52 @@ mulAvxTwo_5x10_loop: VMOVDQU 1952(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1984(CX), Y11 VMOVDQU 2016(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2048(CX), Y11 VMOVDQU 2080(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2112(CX), Y11 VMOVDQU 2144(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2176(CX), Y11 VMOVDQU 2208(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2240(CX), Y11 VMOVDQU 2272(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2304(CX), Y11 VMOVDQU 2336(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 2368(CX), Y11 VMOVDQU 2400(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 2432(CX), Y11 VMOVDQU 2464(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 2496(CX), Y11 VMOVDQU 2528(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 4 to 10 outputs VMOVDQU (DX), Y13 @@ -21841,62 +20237,52 @@ mulAvxTwo_5x10_loop: VMOVDQU 2592(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 2624(CX), Y11 VMOVDQU 2656(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2688(CX), Y11 VMOVDQU 2720(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2752(CX), Y11 VMOVDQU 2784(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2816(CX), Y11 VMOVDQU 2848(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2880(CX), Y11 VMOVDQU 2912(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2944(CX), Y11 VMOVDQU 2976(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 3008(CX), Y11 VMOVDQU 3040(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 3072(CX), Y11 VMOVDQU 3104(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 3136(CX), Y11 VMOVDQU 3168(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Store 10 outputs MOVQ (R9), R11 @@ -21930,7 +20316,7 @@ mulAvxTwo_5x10_end: RET // func mulAvxTwo_5x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_5x10Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -21972,80 +20358,70 @@ mulAvxTwo_5x10Xor_loop: VMOVDQU 32(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) MOVQ 24(R9), R11 VMOVDQU (R11)(R10*1), Y1 VMOVDQU 64(CX), Y11 VMOVDQU 96(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) MOVQ 48(R9), R11 VMOVDQU (R11)(R10*1), Y2 VMOVDQU 128(CX), Y11 VMOVDQU 160(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) MOVQ 72(R9), R11 VMOVDQU (R11)(R10*1), Y3 VMOVDQU 192(CX), Y11 VMOVDQU 224(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) MOVQ 96(R9), R11 VMOVDQU (R11)(R10*1), Y4 VMOVDQU 256(CX), Y11 VMOVDQU 288(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) MOVQ 120(R9), R11 VMOVDQU (R11)(R10*1), Y5 VMOVDQU 320(CX), Y11 VMOVDQU 352(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) MOVQ 144(R9), R11 VMOVDQU (R11)(R10*1), Y6 VMOVDQU 384(CX), Y11 VMOVDQU 416(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) MOVQ 168(R9), R11 VMOVDQU (R11)(R10*1), Y7 VMOVDQU 448(CX), Y11 VMOVDQU 480(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) MOVQ 192(R9), R11 VMOVDQU (R11)(R10*1), Y8 VMOVDQU 512(CX), Y11 VMOVDQU 544(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) MOVQ 216(R9), R11 VMOVDQU (R11)(R10*1), Y9 VMOVDQU 576(CX), Y11 VMOVDQU 608(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 1 to 10 outputs VMOVDQU (SI), Y13 @@ -22057,62 +20433,52 @@ mulAvxTwo_5x10Xor_loop: VMOVDQU 672(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 704(CX), Y11 VMOVDQU 736(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 768(CX), Y11 VMOVDQU 800(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 832(CX), Y11 VMOVDQU 864(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 896(CX), Y11 VMOVDQU 928(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 960(CX), Y11 VMOVDQU 992(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1024(CX), Y11 VMOVDQU 1056(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1088(CX), Y11 VMOVDQU 1120(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1152(CX), Y11 VMOVDQU 1184(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1216(CX), Y11 VMOVDQU 1248(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 2 to 10 outputs VMOVDQU (DI), Y13 @@ -22124,62 +20490,52 @@ mulAvxTwo_5x10Xor_loop: VMOVDQU 1312(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1344(CX), Y11 VMOVDQU 1376(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 1408(CX), Y11 VMOVDQU 1440(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 1472(CX), Y11 VMOVDQU 1504(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 1536(CX), Y11 VMOVDQU 1568(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 1600(CX), Y11 VMOVDQU 1632(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1664(CX), Y11 VMOVDQU 1696(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1728(CX), Y11 VMOVDQU 1760(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1792(CX), Y11 VMOVDQU 1824(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1856(CX), Y11 VMOVDQU 1888(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 3 to 10 outputs VMOVDQU (R8), Y13 @@ -22191,62 +20547,52 @@ mulAvxTwo_5x10Xor_loop: VMOVDQU 1952(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1984(CX), Y11 VMOVDQU 2016(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2048(CX), Y11 VMOVDQU 2080(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2112(CX), Y11 VMOVDQU 2144(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2176(CX), Y11 VMOVDQU 2208(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2240(CX), Y11 VMOVDQU 2272(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2304(CX), Y11 VMOVDQU 2336(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 2368(CX), Y11 VMOVDQU 2400(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 2432(CX), Y11 VMOVDQU 2464(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 2496(CX), Y11 VMOVDQU 2528(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 4 to 10 outputs VMOVDQU (DX), Y13 @@ -22258,62 +20604,52 @@ mulAvxTwo_5x10Xor_loop: VMOVDQU 2592(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 2624(CX), Y11 VMOVDQU 2656(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2688(CX), Y11 VMOVDQU 2720(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2752(CX), Y11 VMOVDQU 2784(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2816(CX), Y11 VMOVDQU 2848(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2880(CX), Y11 VMOVDQU 2912(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2944(CX), Y11 VMOVDQU 2976(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 3008(CX), Y11 VMOVDQU 3040(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 3072(CX), Y11 VMOVDQU 3104(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 3136(CX), Y11 VMOVDQU 3168(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Store 10 outputs MOVQ (R9), R11 @@ -22347,7 +20683,7 @@ mulAvxTwo_5x10Xor_end: RET // func mulAvxTwo_6x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x1(SB), NOSPLIT, $0-88 // Loading all tables to registers // Destination kept in GP registers @@ -22413,8 +20749,7 @@ mulAvxTwo_6x1_loop: VPAND Y13, Y15, Y15 VPSHUFB Y14, Y2, Y14 VPSHUFB Y15, Y3, Y15 - VPXOR Y14, Y15, Y14 - VPXOR Y14, Y12, Y12 + XOR3WAY( $0x00, Y14, Y15, Y12) // Load and process 32 bytes from input 2 to 1 outputs VMOVDQU (SI), Y14 @@ -22424,8 +20759,7 @@ mulAvxTwo_6x1_loop: VPAND Y13, Y15, Y15 VPSHUFB Y14, Y4, Y14 VPSHUFB Y15, Y5, Y15 - VPXOR Y14, Y15, Y14 - VPXOR Y14, Y12, Y12 + XOR3WAY( $0x00, Y14, Y15, Y12) // Load and process 32 bytes from input 3 to 1 outputs VMOVDQU (DI), Y14 @@ -22435,8 +20769,7 @@ mulAvxTwo_6x1_loop: VPAND Y13, Y15, Y15 VPSHUFB Y14, Y6, Y14 VPSHUFB Y15, Y7, Y15 - VPXOR Y14, Y15, Y14 - VPXOR Y14, Y12, Y12 + XOR3WAY( $0x00, Y14, Y15, Y12) // Load and process 32 bytes from input 4 to 1 outputs VMOVDQU (R8), Y14 @@ -22446,8 +20779,7 @@ mulAvxTwo_6x1_loop: VPAND Y13, Y15, Y15 VPSHUFB Y14, Y8, Y14 VPSHUFB Y15, Y9, Y15 - VPXOR Y14, Y15, Y14 - VPXOR Y14, Y12, Y12 + XOR3WAY( $0x00, Y14, Y15, Y12) // Load and process 32 bytes from input 5 to 1 outputs VMOVDQU (CX), Y14 @@ -22457,8 +20789,7 @@ mulAvxTwo_6x1_loop: VPAND Y13, Y15, Y15 VPSHUFB Y14, Y10, Y14 VPSHUFB Y15, Y11, Y15 - VPXOR Y14, Y15, Y14 - VPXOR Y14, Y12, Y12 + XOR3WAY( $0x00, Y14, Y15, Y12) // Store 1 outputs VMOVDQU Y12, (R9) @@ -22473,7 +20804,7 @@ mulAvxTwo_6x1_end: RET // func mulAvxTwo_6x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x1_64(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -22545,10 +20876,8 @@ mulAvxTwo_6x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 2 to 1 outputs VMOVDQU (DI), Y6 @@ -22566,10 +20895,8 @@ mulAvxTwo_6x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 3 to 1 outputs VMOVDQU (R8), Y6 @@ -22587,10 +20914,8 @@ mulAvxTwo_6x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 4 to 1 outputs VMOVDQU (R9), Y6 @@ -22608,10 +20933,8 @@ mulAvxTwo_6x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 5 to 1 outputs VMOVDQU (DX), Y6 @@ -22629,10 +20952,8 @@ mulAvxTwo_6x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Store 1 outputs VMOVDQU Y0, (R10) @@ -22648,7 +20969,7 @@ mulAvxTwo_6x1_64_end: RET // func mulAvxTwo_6x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x1Xor(SB), NOSPLIT, $0-88 // Loading all tables to registers // Destination kept in GP registers @@ -22705,8 +21026,7 @@ mulAvxTwo_6x1Xor_loop: VMOVDQU (R9), Y12 VPSHUFB Y14, Y0, Y14 VPSHUFB Y15, Y1, Y15 - VPXOR Y14, Y15, Y14 - VPXOR Y14, Y12, Y12 + XOR3WAY( $0x00, Y14, Y15, Y12) // Load and process 32 bytes from input 1 to 1 outputs VMOVDQU (BX), Y14 @@ -22716,8 +21036,7 @@ mulAvxTwo_6x1Xor_loop: VPAND Y13, Y15, Y15 VPSHUFB Y14, Y2, Y14 VPSHUFB Y15, Y3, Y15 - VPXOR Y14, Y15, Y14 - VPXOR Y14, Y12, Y12 + XOR3WAY( $0x00, Y14, Y15, Y12) // Load and process 32 bytes from input 2 to 1 outputs VMOVDQU (SI), Y14 @@ -22727,8 +21046,7 @@ mulAvxTwo_6x1Xor_loop: VPAND Y13, Y15, Y15 VPSHUFB Y14, Y4, Y14 VPSHUFB Y15, Y5, Y15 - VPXOR Y14, Y15, Y14 - VPXOR Y14, Y12, Y12 + XOR3WAY( $0x00, Y14, Y15, Y12) // Load and process 32 bytes from input 3 to 1 outputs VMOVDQU (DI), Y14 @@ -22738,8 +21056,7 @@ mulAvxTwo_6x1Xor_loop: VPAND Y13, Y15, Y15 VPSHUFB Y14, Y6, Y14 VPSHUFB Y15, Y7, Y15 - VPXOR Y14, Y15, Y14 - VPXOR Y14, Y12, Y12 + XOR3WAY( $0x00, Y14, Y15, Y12) // Load and process 32 bytes from input 4 to 1 outputs VMOVDQU (R8), Y14 @@ -22749,8 +21066,7 @@ mulAvxTwo_6x1Xor_loop: VPAND Y13, Y15, Y15 VPSHUFB Y14, Y8, Y14 VPSHUFB Y15, Y9, Y15 - VPXOR Y14, Y15, Y14 - VPXOR Y14, Y12, Y12 + XOR3WAY( $0x00, Y14, Y15, Y12) // Load and process 32 bytes from input 5 to 1 outputs VMOVDQU (CX), Y14 @@ -22760,8 +21076,7 @@ mulAvxTwo_6x1Xor_loop: VPAND Y13, Y15, Y15 VPSHUFB Y14, Y10, Y14 VPSHUFB Y15, Y11, Y15 - VPXOR Y14, Y15, Y14 - VPXOR Y14, Y12, Y12 + XOR3WAY( $0x00, Y14, Y15, Y12) // Store 1 outputs VMOVDQU Y12, (R9) @@ -22776,7 +21091,7 @@ mulAvxTwo_6x1Xor_end: RET // func mulAvxTwo_6x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x1_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -22833,10 +21148,8 @@ mulAvxTwo_6x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 1 to 1 outputs VMOVDQU (SI), Y6 @@ -22854,10 +21167,8 @@ mulAvxTwo_6x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 2 to 1 outputs VMOVDQU (DI), Y6 @@ -22875,10 +21186,8 @@ mulAvxTwo_6x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 3 to 1 outputs VMOVDQU (R8), Y6 @@ -22896,10 +21205,8 @@ mulAvxTwo_6x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 4 to 1 outputs VMOVDQU (R9), Y6 @@ -22917,10 +21224,8 @@ mulAvxTwo_6x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 5 to 1 outputs VMOVDQU (DX), Y6 @@ -22938,10 +21243,8 @@ mulAvxTwo_6x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Store 1 outputs VMOVDQU Y0, (R10) @@ -22957,7 +21260,7 @@ mulAvxTwo_6x1_64Xor_end: RET // func mulAvxTwo_6x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x2(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -23022,14 +21325,12 @@ mulAvxTwo_6x2_loop: VMOVDQU 160(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 192(CX), Y3 VMOVDQU 224(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 2 to 2 outputs VMOVDQU (DI), Y5 @@ -23041,14 +21342,12 @@ mulAvxTwo_6x2_loop: VMOVDQU 288(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 320(CX), Y3 VMOVDQU 352(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 3 to 2 outputs VMOVDQU (R8), Y5 @@ -23060,14 +21359,12 @@ mulAvxTwo_6x2_loop: VMOVDQU 416(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 448(CX), Y3 VMOVDQU 480(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 4 to 2 outputs VMOVDQU (R9), Y5 @@ -23079,14 +21376,12 @@ mulAvxTwo_6x2_loop: VMOVDQU 544(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 576(CX), Y3 VMOVDQU 608(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 5 to 2 outputs VMOVDQU (DX), Y5 @@ -23098,14 +21393,12 @@ mulAvxTwo_6x2_loop: VMOVDQU 672(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 704(CX), Y3 VMOVDQU 736(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Store 2 outputs VMOVDQU Y0, (R11) @@ -23122,7 +21415,7 @@ mulAvxTwo_6x2_end: RET // func mulAvxTwo_6x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x2_64(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -23204,20 +21497,16 @@ mulAvxTwo_6x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 2 to 2 outputs VMOVDQU (DI), Y9 @@ -23235,20 +21524,16 @@ mulAvxTwo_6x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 3 to 2 outputs VMOVDQU (R8), Y9 @@ -23266,20 +21551,16 @@ mulAvxTwo_6x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 4 to 2 outputs VMOVDQU (R9), Y9 @@ -23297,20 +21578,16 @@ mulAvxTwo_6x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 5 to 2 outputs VMOVDQU (DX), Y9 @@ -23328,20 +21605,16 @@ mulAvxTwo_6x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Store 2 outputs VMOVDQU Y0, (R11) @@ -23360,7 +21633,7 @@ mulAvxTwo_6x2_64_end: RET // func mulAvxTwo_6x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x2Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -23409,15 +21682,13 @@ mulAvxTwo_6x2Xor_loop: VMOVDQU 32(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU (R10), Y1 VMOVDQU 64(CX), Y3 VMOVDQU 96(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 1 to 2 outputs VMOVDQU (SI), Y5 @@ -23429,14 +21700,12 @@ mulAvxTwo_6x2Xor_loop: VMOVDQU 160(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 192(CX), Y3 VMOVDQU 224(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 2 to 2 outputs VMOVDQU (DI), Y5 @@ -23448,14 +21717,12 @@ mulAvxTwo_6x2Xor_loop: VMOVDQU 288(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 320(CX), Y3 VMOVDQU 352(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 3 to 2 outputs VMOVDQU (R8), Y5 @@ -23467,14 +21734,12 @@ mulAvxTwo_6x2Xor_loop: VMOVDQU 416(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 448(CX), Y3 VMOVDQU 480(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 4 to 2 outputs VMOVDQU (R9), Y5 @@ -23486,14 +21751,12 @@ mulAvxTwo_6x2Xor_loop: VMOVDQU 544(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 576(CX), Y3 VMOVDQU 608(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 5 to 2 outputs VMOVDQU (DX), Y5 @@ -23505,14 +21768,12 @@ mulAvxTwo_6x2Xor_loop: VMOVDQU 672(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 704(CX), Y3 VMOVDQU 736(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Store 2 outputs VMOVDQU Y0, (R11) @@ -23529,7 +21790,7 @@ mulAvxTwo_6x2Xor_end: RET // func mulAvxTwo_6x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x2_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -23590,20 +21851,16 @@ mulAvxTwo_6x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 64(CX), Y5 VMOVDQU 96(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 1 to 2 outputs VMOVDQU (SI), Y9 @@ -23621,20 +21878,16 @@ mulAvxTwo_6x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 2 to 2 outputs VMOVDQU (DI), Y9 @@ -23652,20 +21905,16 @@ mulAvxTwo_6x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 3 to 2 outputs VMOVDQU (R8), Y9 @@ -23683,20 +21932,16 @@ mulAvxTwo_6x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 4 to 2 outputs VMOVDQU (R9), Y9 @@ -23714,20 +21959,16 @@ mulAvxTwo_6x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 5 to 2 outputs VMOVDQU (DX), Y9 @@ -23745,20 +21986,16 @@ mulAvxTwo_6x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Store 2 outputs VMOVDQU Y0, (R11) @@ -23777,7 +22014,7 @@ mulAvxTwo_6x2_64Xor_end: RET // func mulAvxTwo_6x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x3(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -23849,20 +22086,17 @@ mulAvxTwo_6x3_loop: VMOVDQU 224(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 256(CX), Y4 VMOVDQU 288(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 320(CX), Y4 VMOVDQU 352(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 2 to 3 outputs VMOVDQU (DI), Y6 @@ -23874,20 +22108,17 @@ mulAvxTwo_6x3_loop: VMOVDQU 416(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 448(CX), Y4 VMOVDQU 480(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 512(CX), Y4 VMOVDQU 544(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 3 to 3 outputs VMOVDQU (R8), Y6 @@ -23899,20 +22130,17 @@ mulAvxTwo_6x3_loop: VMOVDQU 608(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 640(CX), Y4 VMOVDQU 672(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 704(CX), Y4 VMOVDQU 736(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 4 to 3 outputs VMOVDQU (R9), Y6 @@ -23924,20 +22152,17 @@ mulAvxTwo_6x3_loop: VMOVDQU 800(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 832(CX), Y4 VMOVDQU 864(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 896(CX), Y4 VMOVDQU 928(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 5 to 3 outputs VMOVDQU (DX), Y6 @@ -23949,20 +22174,17 @@ mulAvxTwo_6x3_loop: VMOVDQU 992(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1024(CX), Y4 VMOVDQU 1056(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1088(CX), Y4 VMOVDQU 1120(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Store 3 outputs VMOVDQU Y0, (R11) @@ -23981,7 +22203,7 @@ mulAvxTwo_6x3_end: RET // func mulAvxTwo_6x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x3_64(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -24073,30 +22295,24 @@ mulAvxTwo_6x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 2 to 3 outputs VMOVDQU (DI), Y11 @@ -24114,30 +22330,24 @@ mulAvxTwo_6x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 3 to 3 outputs VMOVDQU (R8), Y11 @@ -24155,30 +22365,24 @@ mulAvxTwo_6x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 4 to 3 outputs VMOVDQU (R9), Y11 @@ -24196,30 +22400,24 @@ mulAvxTwo_6x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 5 to 3 outputs VMOVDQU (DX), Y11 @@ -24237,30 +22435,24 @@ mulAvxTwo_6x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Store 3 outputs VMOVDQU Y0, (R11) @@ -24282,7 +22474,7 @@ mulAvxTwo_6x3_64_end: RET // func mulAvxTwo_6x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x3Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -24333,22 +22525,19 @@ mulAvxTwo_6x3Xor_loop: VMOVDQU 32(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU (R12), Y1 VMOVDQU 64(CX), Y4 VMOVDQU 96(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU (R10), Y2 VMOVDQU 128(CX), Y4 VMOVDQU 160(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 1 to 3 outputs VMOVDQU (SI), Y6 @@ -24360,20 +22549,17 @@ mulAvxTwo_6x3Xor_loop: VMOVDQU 224(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 256(CX), Y4 VMOVDQU 288(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 320(CX), Y4 VMOVDQU 352(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 2 to 3 outputs VMOVDQU (DI), Y6 @@ -24385,20 +22571,17 @@ mulAvxTwo_6x3Xor_loop: VMOVDQU 416(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 448(CX), Y4 VMOVDQU 480(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 512(CX), Y4 VMOVDQU 544(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 3 to 3 outputs VMOVDQU (R8), Y6 @@ -24410,20 +22593,17 @@ mulAvxTwo_6x3Xor_loop: VMOVDQU 608(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 640(CX), Y4 VMOVDQU 672(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 704(CX), Y4 VMOVDQU 736(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 4 to 3 outputs VMOVDQU (R9), Y6 @@ -24435,20 +22615,17 @@ mulAvxTwo_6x3Xor_loop: VMOVDQU 800(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 832(CX), Y4 VMOVDQU 864(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 896(CX), Y4 VMOVDQU 928(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 5 to 3 outputs VMOVDQU (DX), Y6 @@ -24460,20 +22637,17 @@ mulAvxTwo_6x3Xor_loop: VMOVDQU 992(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1024(CX), Y4 VMOVDQU 1056(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1088(CX), Y4 VMOVDQU 1120(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Store 3 outputs VMOVDQU Y0, (R11) @@ -24492,7 +22666,7 @@ mulAvxTwo_6x3Xor_end: RET // func mulAvxTwo_6x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x3_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -24557,30 +22731,24 @@ mulAvxTwo_6x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 64(CX), Y7 VMOVDQU 96(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 128(CX), Y7 VMOVDQU 160(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 1 to 3 outputs VMOVDQU (SI), Y11 @@ -24598,30 +22766,24 @@ mulAvxTwo_6x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 2 to 3 outputs VMOVDQU (DI), Y11 @@ -24639,30 +22801,24 @@ mulAvxTwo_6x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 3 to 3 outputs VMOVDQU (R8), Y11 @@ -24680,30 +22836,24 @@ mulAvxTwo_6x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 4 to 3 outputs VMOVDQU (R9), Y11 @@ -24721,30 +22871,24 @@ mulAvxTwo_6x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 5 to 3 outputs VMOVDQU (DX), Y11 @@ -24762,30 +22906,24 @@ mulAvxTwo_6x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Store 3 outputs VMOVDQU Y0, (R11) @@ -24807,7 +22945,7 @@ mulAvxTwo_6x3_64Xor_end: RET // func mulAvxTwo_6x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x4(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -24886,26 +23024,22 @@ mulAvxTwo_6x4_loop: VMOVDQU 288(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 384(CX), Y5 VMOVDQU 416(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 2 to 4 outputs VMOVDQU (DI), Y7 @@ -24917,26 +23051,22 @@ mulAvxTwo_6x4_loop: VMOVDQU 544(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 640(CX), Y5 VMOVDQU 672(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 3 to 4 outputs VMOVDQU (R8), Y7 @@ -24948,26 +23078,22 @@ mulAvxTwo_6x4_loop: VMOVDQU 800(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 832(CX), Y5 VMOVDQU 864(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 896(CX), Y5 VMOVDQU 928(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 960(CX), Y5 VMOVDQU 992(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 4 to 4 outputs VMOVDQU (R9), Y7 @@ -24979,26 +23105,22 @@ mulAvxTwo_6x4_loop: VMOVDQU 1056(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1088(CX), Y5 VMOVDQU 1120(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1152(CX), Y5 VMOVDQU 1184(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1216(CX), Y5 VMOVDQU 1248(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 5 to 4 outputs VMOVDQU (DX), Y7 @@ -25010,26 +23132,22 @@ mulAvxTwo_6x4_loop: VMOVDQU 1312(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1344(CX), Y5 VMOVDQU 1376(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1408(CX), Y5 VMOVDQU 1440(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1472(CX), Y5 VMOVDQU 1504(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Store 4 outputs VMOVDQU Y0, (R11) @@ -25050,7 +23168,7 @@ mulAvxTwo_6x4_end: RET // func mulAvxTwo_6x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x4Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -25103,29 +23221,25 @@ mulAvxTwo_6x4Xor_loop: VMOVDQU 32(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU (R12), Y1 VMOVDQU 64(CX), Y5 VMOVDQU 96(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU (R13), Y2 VMOVDQU 128(CX), Y5 VMOVDQU 160(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU (R10), Y3 VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 1 to 4 outputs VMOVDQU (SI), Y7 @@ -25137,26 +23251,22 @@ mulAvxTwo_6x4Xor_loop: VMOVDQU 288(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 384(CX), Y5 VMOVDQU 416(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 2 to 4 outputs VMOVDQU (DI), Y7 @@ -25168,26 +23278,22 @@ mulAvxTwo_6x4Xor_loop: VMOVDQU 544(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 640(CX), Y5 VMOVDQU 672(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 3 to 4 outputs VMOVDQU (R8), Y7 @@ -25199,26 +23305,22 @@ mulAvxTwo_6x4Xor_loop: VMOVDQU 800(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 832(CX), Y5 VMOVDQU 864(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 896(CX), Y5 VMOVDQU 928(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 960(CX), Y5 VMOVDQU 992(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 4 to 4 outputs VMOVDQU (R9), Y7 @@ -25230,26 +23332,22 @@ mulAvxTwo_6x4Xor_loop: VMOVDQU 1056(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1088(CX), Y5 VMOVDQU 1120(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1152(CX), Y5 VMOVDQU 1184(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1216(CX), Y5 VMOVDQU 1248(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 5 to 4 outputs VMOVDQU (DX), Y7 @@ -25261,26 +23359,22 @@ mulAvxTwo_6x4Xor_loop: VMOVDQU 1312(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1344(CX), Y5 VMOVDQU 1376(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1408(CX), Y5 VMOVDQU 1440(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1472(CX), Y5 VMOVDQU 1504(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Store 4 outputs VMOVDQU Y0, (R11) @@ -25301,7 +23395,7 @@ mulAvxTwo_6x4Xor_end: RET // func mulAvxTwo_6x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x5(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -25387,32 +23481,27 @@ mulAvxTwo_6x5_loop: VMOVDQU 352(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 384(CX), Y6 VMOVDQU 416(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 448(CX), Y6 VMOVDQU 480(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 512(CX), Y6 VMOVDQU 544(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 576(CX), Y6 VMOVDQU 608(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 2 to 5 outputs VMOVDQU (DI), Y8 @@ -25424,32 +23513,27 @@ mulAvxTwo_6x5_loop: VMOVDQU 672(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 704(CX), Y6 VMOVDQU 736(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 768(CX), Y6 VMOVDQU 800(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 832(CX), Y6 VMOVDQU 864(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 896(CX), Y6 VMOVDQU 928(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 3 to 5 outputs VMOVDQU (R8), Y8 @@ -25461,32 +23545,27 @@ mulAvxTwo_6x5_loop: VMOVDQU 992(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1024(CX), Y6 VMOVDQU 1056(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1088(CX), Y6 VMOVDQU 1120(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1152(CX), Y6 VMOVDQU 1184(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1216(CX), Y6 VMOVDQU 1248(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 4 to 5 outputs VMOVDQU (R9), Y8 @@ -25498,32 +23577,27 @@ mulAvxTwo_6x5_loop: VMOVDQU 1312(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1344(CX), Y6 VMOVDQU 1376(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1408(CX), Y6 VMOVDQU 1440(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1472(CX), Y6 VMOVDQU 1504(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1536(CX), Y6 VMOVDQU 1568(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 5 to 5 outputs VMOVDQU (DX), Y8 @@ -25535,32 +23609,27 @@ mulAvxTwo_6x5_loop: VMOVDQU 1632(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1664(CX), Y6 VMOVDQU 1696(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1728(CX), Y6 VMOVDQU 1760(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1792(CX), Y6 VMOVDQU 1824(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1856(CX), Y6 VMOVDQU 1888(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Store 5 outputs VMOVDQU Y0, (R11) @@ -25583,7 +23652,7 @@ mulAvxTwo_6x5_end: RET // func mulAvxTwo_6x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x5Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -25638,36 +23707,31 @@ mulAvxTwo_6x5Xor_loop: VMOVDQU 32(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU (R12), Y1 VMOVDQU 64(CX), Y6 VMOVDQU 96(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU (R13), Y2 VMOVDQU 128(CX), Y6 VMOVDQU 160(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU (R14), Y3 VMOVDQU 192(CX), Y6 VMOVDQU 224(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU (R10), Y4 VMOVDQU 256(CX), Y6 VMOVDQU 288(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 1 to 5 outputs VMOVDQU (SI), Y8 @@ -25679,32 +23743,27 @@ mulAvxTwo_6x5Xor_loop: VMOVDQU 352(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 384(CX), Y6 VMOVDQU 416(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 448(CX), Y6 VMOVDQU 480(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 512(CX), Y6 VMOVDQU 544(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 576(CX), Y6 VMOVDQU 608(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 2 to 5 outputs VMOVDQU (DI), Y8 @@ -25716,32 +23775,27 @@ mulAvxTwo_6x5Xor_loop: VMOVDQU 672(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 704(CX), Y6 VMOVDQU 736(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 768(CX), Y6 VMOVDQU 800(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 832(CX), Y6 VMOVDQU 864(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 896(CX), Y6 VMOVDQU 928(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 3 to 5 outputs VMOVDQU (R8), Y8 @@ -25753,32 +23807,27 @@ mulAvxTwo_6x5Xor_loop: VMOVDQU 992(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1024(CX), Y6 VMOVDQU 1056(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1088(CX), Y6 VMOVDQU 1120(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1152(CX), Y6 VMOVDQU 1184(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1216(CX), Y6 VMOVDQU 1248(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 4 to 5 outputs VMOVDQU (R9), Y8 @@ -25790,32 +23839,27 @@ mulAvxTwo_6x5Xor_loop: VMOVDQU 1312(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1344(CX), Y6 VMOVDQU 1376(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1408(CX), Y6 VMOVDQU 1440(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1472(CX), Y6 VMOVDQU 1504(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1536(CX), Y6 VMOVDQU 1568(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 5 to 5 outputs VMOVDQU (DX), Y8 @@ -25827,32 +23871,27 @@ mulAvxTwo_6x5Xor_loop: VMOVDQU 1632(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1664(CX), Y6 VMOVDQU 1696(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1728(CX), Y6 VMOVDQU 1760(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1792(CX), Y6 VMOVDQU 1824(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1856(CX), Y6 VMOVDQU 1888(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Store 5 outputs VMOVDQU Y0, (R11) @@ -25875,7 +23914,7 @@ mulAvxTwo_6x5Xor_end: RET // func mulAvxTwo_6x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x6(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -25968,38 +24007,32 @@ mulAvxTwo_6x6_loop: VMOVDQU 416(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 576(CX), Y7 VMOVDQU 608(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 2 to 6 outputs VMOVDQU (DI), Y9 @@ -26011,38 +24044,32 @@ mulAvxTwo_6x6_loop: VMOVDQU 800(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 960(CX), Y7 VMOVDQU 992(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 3 to 6 outputs VMOVDQU (R8), Y9 @@ -26054,38 +24081,32 @@ mulAvxTwo_6x6_loop: VMOVDQU 1184(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1216(CX), Y7 VMOVDQU 1248(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1280(CX), Y7 VMOVDQU 1312(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1344(CX), Y7 VMOVDQU 1376(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1408(CX), Y7 VMOVDQU 1440(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1472(CX), Y7 VMOVDQU 1504(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 4 to 6 outputs VMOVDQU (R9), Y9 @@ -26097,38 +24118,32 @@ mulAvxTwo_6x6_loop: VMOVDQU 1568(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1600(CX), Y7 VMOVDQU 1632(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1664(CX), Y7 VMOVDQU 1696(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1728(CX), Y7 VMOVDQU 1760(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1792(CX), Y7 VMOVDQU 1824(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1856(CX), Y7 VMOVDQU 1888(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 5 to 6 outputs VMOVDQU (DX), Y9 @@ -26140,38 +24155,32 @@ mulAvxTwo_6x6_loop: VMOVDQU 1952(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1984(CX), Y7 VMOVDQU 2016(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2048(CX), Y7 VMOVDQU 2080(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2112(CX), Y7 VMOVDQU 2144(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2176(CX), Y7 VMOVDQU 2208(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 2240(CX), Y7 VMOVDQU 2272(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Store 6 outputs VMOVDQU Y0, (R11) @@ -26196,7 +24205,7 @@ mulAvxTwo_6x6_end: RET // func mulAvxTwo_6x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x6Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -26253,43 +24262,37 @@ mulAvxTwo_6x6Xor_loop: VMOVDQU 32(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU (R12), Y1 VMOVDQU 64(CX), Y7 VMOVDQU 96(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU (R13), Y2 VMOVDQU 128(CX), Y7 VMOVDQU 160(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU (R14), Y3 VMOVDQU 192(CX), Y7 VMOVDQU 224(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU (R15), Y4 VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU (R10), Y5 VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 1 to 6 outputs VMOVDQU (SI), Y9 @@ -26301,38 +24304,32 @@ mulAvxTwo_6x6Xor_loop: VMOVDQU 416(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 576(CX), Y7 VMOVDQU 608(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 2 to 6 outputs VMOVDQU (DI), Y9 @@ -26344,38 +24341,32 @@ mulAvxTwo_6x6Xor_loop: VMOVDQU 800(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 960(CX), Y7 VMOVDQU 992(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 3 to 6 outputs VMOVDQU (R8), Y9 @@ -26387,38 +24378,32 @@ mulAvxTwo_6x6Xor_loop: VMOVDQU 1184(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1216(CX), Y7 VMOVDQU 1248(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1280(CX), Y7 VMOVDQU 1312(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1344(CX), Y7 VMOVDQU 1376(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1408(CX), Y7 VMOVDQU 1440(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1472(CX), Y7 VMOVDQU 1504(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 4 to 6 outputs VMOVDQU (R9), Y9 @@ -26430,38 +24415,32 @@ mulAvxTwo_6x6Xor_loop: VMOVDQU 1568(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1600(CX), Y7 VMOVDQU 1632(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1664(CX), Y7 VMOVDQU 1696(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1728(CX), Y7 VMOVDQU 1760(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1792(CX), Y7 VMOVDQU 1824(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1856(CX), Y7 VMOVDQU 1888(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 5 to 6 outputs VMOVDQU (DX), Y9 @@ -26473,38 +24452,32 @@ mulAvxTwo_6x6Xor_loop: VMOVDQU 1952(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1984(CX), Y7 VMOVDQU 2016(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2048(CX), Y7 VMOVDQU 2080(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2112(CX), Y7 VMOVDQU 2144(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2176(CX), Y7 VMOVDQU 2208(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 2240(CX), Y7 VMOVDQU 2272(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Store 6 outputs VMOVDQU Y0, (R11) @@ -26529,7 +24502,7 @@ mulAvxTwo_6x6Xor_end: RET // func mulAvxTwo_6x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x7(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -26631,44 +24604,37 @@ mulAvxTwo_6x7_loop: VMOVDQU 480(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 512(CX), Y8 VMOVDQU 544(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 576(CX), Y8 VMOVDQU 608(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 640(CX), Y8 VMOVDQU 672(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 704(CX), Y8 VMOVDQU 736(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 768(CX), Y8 VMOVDQU 800(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 832(CX), Y8 VMOVDQU 864(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 2 to 7 outputs VMOVDQU (SI), Y10 @@ -26680,44 +24646,37 @@ mulAvxTwo_6x7_loop: VMOVDQU 928(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 960(CX), Y8 VMOVDQU 992(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1024(CX), Y8 VMOVDQU 1056(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1088(CX), Y8 VMOVDQU 1120(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1152(CX), Y8 VMOVDQU 1184(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1216(CX), Y8 VMOVDQU 1248(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1280(CX), Y8 VMOVDQU 1312(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 3 to 7 outputs VMOVDQU (DI), Y10 @@ -26729,44 +24688,37 @@ mulAvxTwo_6x7_loop: VMOVDQU 1376(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1408(CX), Y8 VMOVDQU 1440(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1472(CX), Y8 VMOVDQU 1504(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1536(CX), Y8 VMOVDQU 1568(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1600(CX), Y8 VMOVDQU 1632(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1664(CX), Y8 VMOVDQU 1696(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1728(CX), Y8 VMOVDQU 1760(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 4 to 7 outputs VMOVDQU (R8), Y10 @@ -26778,44 +24730,37 @@ mulAvxTwo_6x7_loop: VMOVDQU 1824(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1856(CX), Y8 VMOVDQU 1888(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1920(CX), Y8 VMOVDQU 1952(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1984(CX), Y8 VMOVDQU 2016(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2048(CX), Y8 VMOVDQU 2080(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 2112(CX), Y8 VMOVDQU 2144(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 2176(CX), Y8 VMOVDQU 2208(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 5 to 7 outputs VMOVDQU (AX), Y10 @@ -26827,44 +24772,37 @@ mulAvxTwo_6x7_loop: VMOVDQU 2272(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 2304(CX), Y8 VMOVDQU 2336(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 2368(CX), Y8 VMOVDQU 2400(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 2432(CX), Y8 VMOVDQU 2464(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2496(CX), Y8 VMOVDQU 2528(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 2560(CX), Y8 VMOVDQU 2592(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 2624(CX), Y8 VMOVDQU 2656(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Store 7 outputs VMOVDQU Y0, (R10) @@ -26891,7 +24829,7 @@ mulAvxTwo_6x7_end: RET // func mulAvxTwo_6x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x7Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -26952,50 +24890,43 @@ mulAvxTwo_6x7Xor_loop: VMOVDQU 32(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU (R11), Y1 VMOVDQU 64(CX), Y8 VMOVDQU 96(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU (R12), Y2 VMOVDQU 128(CX), Y8 VMOVDQU 160(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU (R13), Y3 VMOVDQU 192(CX), Y8 VMOVDQU 224(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU (R14), Y4 VMOVDQU 256(CX), Y8 VMOVDQU 288(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU (R15), Y5 VMOVDQU 320(CX), Y8 VMOVDQU 352(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU (R9), Y6 VMOVDQU 384(CX), Y8 VMOVDQU 416(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 1 to 7 outputs VMOVDQU (BX), Y10 @@ -27007,44 +24938,37 @@ mulAvxTwo_6x7Xor_loop: VMOVDQU 480(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 512(CX), Y8 VMOVDQU 544(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 576(CX), Y8 VMOVDQU 608(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 640(CX), Y8 VMOVDQU 672(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 704(CX), Y8 VMOVDQU 736(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 768(CX), Y8 VMOVDQU 800(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 832(CX), Y8 VMOVDQU 864(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 2 to 7 outputs VMOVDQU (SI), Y10 @@ -27056,44 +24980,37 @@ mulAvxTwo_6x7Xor_loop: VMOVDQU 928(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 960(CX), Y8 VMOVDQU 992(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1024(CX), Y8 VMOVDQU 1056(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1088(CX), Y8 VMOVDQU 1120(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1152(CX), Y8 VMOVDQU 1184(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1216(CX), Y8 VMOVDQU 1248(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1280(CX), Y8 VMOVDQU 1312(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 3 to 7 outputs VMOVDQU (DI), Y10 @@ -27105,44 +25022,37 @@ mulAvxTwo_6x7Xor_loop: VMOVDQU 1376(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1408(CX), Y8 VMOVDQU 1440(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1472(CX), Y8 VMOVDQU 1504(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1536(CX), Y8 VMOVDQU 1568(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1600(CX), Y8 VMOVDQU 1632(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1664(CX), Y8 VMOVDQU 1696(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1728(CX), Y8 VMOVDQU 1760(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 4 to 7 outputs VMOVDQU (R8), Y10 @@ -27154,44 +25064,37 @@ mulAvxTwo_6x7Xor_loop: VMOVDQU 1824(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1856(CX), Y8 VMOVDQU 1888(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1920(CX), Y8 VMOVDQU 1952(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1984(CX), Y8 VMOVDQU 2016(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2048(CX), Y8 VMOVDQU 2080(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 2112(CX), Y8 VMOVDQU 2144(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 2176(CX), Y8 VMOVDQU 2208(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 5 to 7 outputs VMOVDQU (AX), Y10 @@ -27203,44 +25106,37 @@ mulAvxTwo_6x7Xor_loop: VMOVDQU 2272(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 2304(CX), Y8 VMOVDQU 2336(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 2368(CX), Y8 VMOVDQU 2400(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 2432(CX), Y8 VMOVDQU 2464(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2496(CX), Y8 VMOVDQU 2528(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 2560(CX), Y8 VMOVDQU 2592(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 2624(CX), Y8 VMOVDQU 2656(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Store 7 outputs VMOVDQU Y0, (R10) @@ -27267,7 +25163,7 @@ mulAvxTwo_6x7Xor_end: RET // func mulAvxTwo_6x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x8(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -27356,50 +25252,42 @@ mulAvxTwo_6x8_loop: VMOVDQU 544(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 576(CX), Y9 VMOVDQU 608(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y9 VMOVDQU 672(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 704(CX), Y9 VMOVDQU 736(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 768(CX), Y9 VMOVDQU 800(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 832(CX), Y9 VMOVDQU 864(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 896(CX), Y9 VMOVDQU 928(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 960(CX), Y9 VMOVDQU 992(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 2 to 8 outputs VMOVDQU (DI), Y11 @@ -27411,50 +25299,42 @@ mulAvxTwo_6x8_loop: VMOVDQU 1056(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1088(CX), Y9 VMOVDQU 1120(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1152(CX), Y9 VMOVDQU 1184(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1216(CX), Y9 VMOVDQU 1248(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y9 VMOVDQU 1312(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1344(CX), Y9 VMOVDQU 1376(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1408(CX), Y9 VMOVDQU 1440(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1472(CX), Y9 VMOVDQU 1504(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 3 to 8 outputs VMOVDQU (R8), Y11 @@ -27466,50 +25346,42 @@ mulAvxTwo_6x8_loop: VMOVDQU 1568(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1600(CX), Y9 VMOVDQU 1632(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1664(CX), Y9 VMOVDQU 1696(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1728(CX), Y9 VMOVDQU 1760(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1792(CX), Y9 VMOVDQU 1824(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1856(CX), Y9 VMOVDQU 1888(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1920(CX), Y9 VMOVDQU 1952(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1984(CX), Y9 VMOVDQU 2016(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 4 to 8 outputs VMOVDQU (R9), Y11 @@ -27521,50 +25393,42 @@ mulAvxTwo_6x8_loop: VMOVDQU 2080(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 2112(CX), Y9 VMOVDQU 2144(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 2176(CX), Y9 VMOVDQU 2208(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 2240(CX), Y9 VMOVDQU 2272(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 2304(CX), Y9 VMOVDQU 2336(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 2368(CX), Y9 VMOVDQU 2400(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 2432(CX), Y9 VMOVDQU 2464(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 2496(CX), Y9 VMOVDQU 2528(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 5 to 8 outputs VMOVDQU (DX), Y11 @@ -27576,50 +25440,42 @@ mulAvxTwo_6x8_loop: VMOVDQU 2592(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 2624(CX), Y9 VMOVDQU 2656(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 2688(CX), Y9 VMOVDQU 2720(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 2752(CX), Y9 VMOVDQU 2784(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 2816(CX), Y9 VMOVDQU 2848(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 2880(CX), Y9 VMOVDQU 2912(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 2944(CX), Y9 VMOVDQU 2976(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 3008(CX), Y9 VMOVDQU 3040(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Store 8 outputs MOVQ (R10), R12 @@ -27649,7 +25505,7 @@ mulAvxTwo_6x8_end: RET // func mulAvxTwo_6x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x8Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -27693,64 +25549,56 @@ mulAvxTwo_6x8Xor_loop: VMOVDQU 32(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) MOVQ 24(R10), R12 VMOVDQU (R12)(R11*1), Y1 VMOVDQU 64(CX), Y9 VMOVDQU 96(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) MOVQ 48(R10), R12 VMOVDQU (R12)(R11*1), Y2 VMOVDQU 128(CX), Y9 VMOVDQU 160(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) MOVQ 72(R10), R12 VMOVDQU (R12)(R11*1), Y3 VMOVDQU 192(CX), Y9 VMOVDQU 224(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) MOVQ 96(R10), R12 VMOVDQU (R12)(R11*1), Y4 VMOVDQU 256(CX), Y9 VMOVDQU 288(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) MOVQ 120(R10), R12 VMOVDQU (R12)(R11*1), Y5 VMOVDQU 320(CX), Y9 VMOVDQU 352(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) MOVQ 144(R10), R12 VMOVDQU (R12)(R11*1), Y6 VMOVDQU 384(CX), Y9 VMOVDQU 416(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) MOVQ 168(R10), R12 VMOVDQU (R12)(R11*1), Y7 VMOVDQU 448(CX), Y9 VMOVDQU 480(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 1 to 8 outputs VMOVDQU (SI), Y11 @@ -27762,50 +25610,42 @@ mulAvxTwo_6x8Xor_loop: VMOVDQU 544(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 576(CX), Y9 VMOVDQU 608(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y9 VMOVDQU 672(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 704(CX), Y9 VMOVDQU 736(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 768(CX), Y9 VMOVDQU 800(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 832(CX), Y9 VMOVDQU 864(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 896(CX), Y9 VMOVDQU 928(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 960(CX), Y9 VMOVDQU 992(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 2 to 8 outputs VMOVDQU (DI), Y11 @@ -27817,50 +25657,42 @@ mulAvxTwo_6x8Xor_loop: VMOVDQU 1056(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1088(CX), Y9 VMOVDQU 1120(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1152(CX), Y9 VMOVDQU 1184(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1216(CX), Y9 VMOVDQU 1248(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y9 VMOVDQU 1312(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1344(CX), Y9 VMOVDQU 1376(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1408(CX), Y9 VMOVDQU 1440(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1472(CX), Y9 VMOVDQU 1504(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 3 to 8 outputs VMOVDQU (R8), Y11 @@ -27872,50 +25704,42 @@ mulAvxTwo_6x8Xor_loop: VMOVDQU 1568(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1600(CX), Y9 VMOVDQU 1632(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1664(CX), Y9 VMOVDQU 1696(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1728(CX), Y9 VMOVDQU 1760(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1792(CX), Y9 VMOVDQU 1824(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1856(CX), Y9 VMOVDQU 1888(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1920(CX), Y9 VMOVDQU 1952(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1984(CX), Y9 VMOVDQU 2016(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 4 to 8 outputs VMOVDQU (R9), Y11 @@ -27927,50 +25751,42 @@ mulAvxTwo_6x8Xor_loop: VMOVDQU 2080(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 2112(CX), Y9 VMOVDQU 2144(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 2176(CX), Y9 VMOVDQU 2208(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 2240(CX), Y9 VMOVDQU 2272(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 2304(CX), Y9 VMOVDQU 2336(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 2368(CX), Y9 VMOVDQU 2400(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 2432(CX), Y9 VMOVDQU 2464(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 2496(CX), Y9 VMOVDQU 2528(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 5 to 8 outputs VMOVDQU (DX), Y11 @@ -27982,50 +25798,42 @@ mulAvxTwo_6x8Xor_loop: VMOVDQU 2592(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 2624(CX), Y9 VMOVDQU 2656(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 2688(CX), Y9 VMOVDQU 2720(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 2752(CX), Y9 VMOVDQU 2784(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 2816(CX), Y9 VMOVDQU 2848(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 2880(CX), Y9 VMOVDQU 2912(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 2944(CX), Y9 VMOVDQU 2976(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 3008(CX), Y9 VMOVDQU 3040(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Store 8 outputs MOVQ (R10), R12 @@ -28055,7 +25863,7 @@ mulAvxTwo_6x8Xor_end: RET // func mulAvxTwo_6x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x9(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -28149,56 +25957,47 @@ mulAvxTwo_6x9_loop: VMOVDQU 608(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 640(CX), Y10 VMOVDQU 672(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 704(CX), Y10 VMOVDQU 736(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 768(CX), Y10 VMOVDQU 800(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 832(CX), Y10 VMOVDQU 864(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 896(CX), Y10 VMOVDQU 928(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 960(CX), Y10 VMOVDQU 992(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1024(CX), Y10 VMOVDQU 1056(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1088(CX), Y10 VMOVDQU 1120(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 2 to 9 outputs VMOVDQU (DI), Y12 @@ -28210,56 +26009,47 @@ mulAvxTwo_6x9_loop: VMOVDQU 1184(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1216(CX), Y10 VMOVDQU 1248(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1280(CX), Y10 VMOVDQU 1312(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1344(CX), Y10 VMOVDQU 1376(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1408(CX), Y10 VMOVDQU 1440(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 1472(CX), Y10 VMOVDQU 1504(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 1536(CX), Y10 VMOVDQU 1568(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1600(CX), Y10 VMOVDQU 1632(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1664(CX), Y10 VMOVDQU 1696(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 3 to 9 outputs VMOVDQU (R8), Y12 @@ -28271,56 +26061,47 @@ mulAvxTwo_6x9_loop: VMOVDQU 1760(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1792(CX), Y10 VMOVDQU 1824(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1856(CX), Y10 VMOVDQU 1888(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1920(CX), Y10 VMOVDQU 1952(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1984(CX), Y10 VMOVDQU 2016(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2048(CX), Y10 VMOVDQU 2080(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2112(CX), Y10 VMOVDQU 2144(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2176(CX), Y10 VMOVDQU 2208(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2240(CX), Y10 VMOVDQU 2272(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 4 to 9 outputs VMOVDQU (R9), Y12 @@ -28332,56 +26113,47 @@ mulAvxTwo_6x9_loop: VMOVDQU 2336(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 2368(CX), Y10 VMOVDQU 2400(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 2432(CX), Y10 VMOVDQU 2464(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 2496(CX), Y10 VMOVDQU 2528(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 2560(CX), Y10 VMOVDQU 2592(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2624(CX), Y10 VMOVDQU 2656(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2688(CX), Y10 VMOVDQU 2720(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2752(CX), Y10 VMOVDQU 2784(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2816(CX), Y10 VMOVDQU 2848(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 5 to 9 outputs VMOVDQU (DX), Y12 @@ -28393,56 +26165,47 @@ mulAvxTwo_6x9_loop: VMOVDQU 2912(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 2944(CX), Y10 VMOVDQU 2976(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 3008(CX), Y10 VMOVDQU 3040(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 3072(CX), Y10 VMOVDQU 3104(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 3136(CX), Y10 VMOVDQU 3168(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 3200(CX), Y10 VMOVDQU 3232(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 3264(CX), Y10 VMOVDQU 3296(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 3328(CX), Y10 VMOVDQU 3360(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 3392(CX), Y10 VMOVDQU 3424(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Store 9 outputs MOVQ (R10), R12 @@ -28474,7 +26237,7 @@ mulAvxTwo_6x9_end: RET // func mulAvxTwo_6x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x9Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -28518,72 +26281,63 @@ mulAvxTwo_6x9Xor_loop: VMOVDQU 32(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) MOVQ 24(R10), R12 VMOVDQU (R12)(R11*1), Y1 VMOVDQU 64(CX), Y10 VMOVDQU 96(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) MOVQ 48(R10), R12 VMOVDQU (R12)(R11*1), Y2 VMOVDQU 128(CX), Y10 VMOVDQU 160(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) MOVQ 72(R10), R12 VMOVDQU (R12)(R11*1), Y3 VMOVDQU 192(CX), Y10 VMOVDQU 224(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) MOVQ 96(R10), R12 VMOVDQU (R12)(R11*1), Y4 VMOVDQU 256(CX), Y10 VMOVDQU 288(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) MOVQ 120(R10), R12 VMOVDQU (R12)(R11*1), Y5 VMOVDQU 320(CX), Y10 VMOVDQU 352(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) MOVQ 144(R10), R12 VMOVDQU (R12)(R11*1), Y6 VMOVDQU 384(CX), Y10 VMOVDQU 416(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) MOVQ 168(R10), R12 VMOVDQU (R12)(R11*1), Y7 VMOVDQU 448(CX), Y10 VMOVDQU 480(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) MOVQ 192(R10), R12 VMOVDQU (R12)(R11*1), Y8 VMOVDQU 512(CX), Y10 VMOVDQU 544(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 1 to 9 outputs VMOVDQU (SI), Y12 @@ -28595,56 +26349,47 @@ mulAvxTwo_6x9Xor_loop: VMOVDQU 608(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 640(CX), Y10 VMOVDQU 672(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 704(CX), Y10 VMOVDQU 736(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 768(CX), Y10 VMOVDQU 800(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 832(CX), Y10 VMOVDQU 864(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 896(CX), Y10 VMOVDQU 928(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 960(CX), Y10 VMOVDQU 992(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1024(CX), Y10 VMOVDQU 1056(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1088(CX), Y10 VMOVDQU 1120(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 2 to 9 outputs VMOVDQU (DI), Y12 @@ -28656,56 +26401,47 @@ mulAvxTwo_6x9Xor_loop: VMOVDQU 1184(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1216(CX), Y10 VMOVDQU 1248(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1280(CX), Y10 VMOVDQU 1312(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1344(CX), Y10 VMOVDQU 1376(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1408(CX), Y10 VMOVDQU 1440(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 1472(CX), Y10 VMOVDQU 1504(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 1536(CX), Y10 VMOVDQU 1568(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1600(CX), Y10 VMOVDQU 1632(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1664(CX), Y10 VMOVDQU 1696(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 3 to 9 outputs VMOVDQU (R8), Y12 @@ -28717,56 +26453,47 @@ mulAvxTwo_6x9Xor_loop: VMOVDQU 1760(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1792(CX), Y10 VMOVDQU 1824(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1856(CX), Y10 VMOVDQU 1888(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1920(CX), Y10 VMOVDQU 1952(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1984(CX), Y10 VMOVDQU 2016(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2048(CX), Y10 VMOVDQU 2080(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2112(CX), Y10 VMOVDQU 2144(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2176(CX), Y10 VMOVDQU 2208(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2240(CX), Y10 VMOVDQU 2272(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 4 to 9 outputs VMOVDQU (R9), Y12 @@ -28778,56 +26505,47 @@ mulAvxTwo_6x9Xor_loop: VMOVDQU 2336(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 2368(CX), Y10 VMOVDQU 2400(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 2432(CX), Y10 VMOVDQU 2464(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 2496(CX), Y10 VMOVDQU 2528(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 2560(CX), Y10 VMOVDQU 2592(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2624(CX), Y10 VMOVDQU 2656(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2688(CX), Y10 VMOVDQU 2720(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2752(CX), Y10 VMOVDQU 2784(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2816(CX), Y10 VMOVDQU 2848(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 5 to 9 outputs VMOVDQU (DX), Y12 @@ -28839,56 +26557,47 @@ mulAvxTwo_6x9Xor_loop: VMOVDQU 2912(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 2944(CX), Y10 VMOVDQU 2976(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 3008(CX), Y10 VMOVDQU 3040(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 3072(CX), Y10 VMOVDQU 3104(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 3136(CX), Y10 VMOVDQU 3168(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 3200(CX), Y10 VMOVDQU 3232(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 3264(CX), Y10 VMOVDQU 3296(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 3328(CX), Y10 VMOVDQU 3360(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 3392(CX), Y10 VMOVDQU 3424(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Store 9 outputs MOVQ (R10), R12 @@ -28920,7 +26629,7 @@ mulAvxTwo_6x9Xor_end: RET // func mulAvxTwo_6x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x10(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -29019,62 +26728,52 @@ mulAvxTwo_6x10_loop: VMOVDQU 672(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 704(CX), Y11 VMOVDQU 736(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 768(CX), Y11 VMOVDQU 800(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 832(CX), Y11 VMOVDQU 864(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 896(CX), Y11 VMOVDQU 928(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 960(CX), Y11 VMOVDQU 992(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1024(CX), Y11 VMOVDQU 1056(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1088(CX), Y11 VMOVDQU 1120(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1152(CX), Y11 VMOVDQU 1184(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1216(CX), Y11 VMOVDQU 1248(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 2 to 10 outputs VMOVDQU (DI), Y13 @@ -29086,62 +26785,52 @@ mulAvxTwo_6x10_loop: VMOVDQU 1312(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1344(CX), Y11 VMOVDQU 1376(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 1408(CX), Y11 VMOVDQU 1440(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 1472(CX), Y11 VMOVDQU 1504(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 1536(CX), Y11 VMOVDQU 1568(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 1600(CX), Y11 VMOVDQU 1632(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1664(CX), Y11 VMOVDQU 1696(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1728(CX), Y11 VMOVDQU 1760(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1792(CX), Y11 VMOVDQU 1824(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1856(CX), Y11 VMOVDQU 1888(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 3 to 10 outputs VMOVDQU (R8), Y13 @@ -29153,62 +26842,52 @@ mulAvxTwo_6x10_loop: VMOVDQU 1952(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1984(CX), Y11 VMOVDQU 2016(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2048(CX), Y11 VMOVDQU 2080(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2112(CX), Y11 VMOVDQU 2144(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2176(CX), Y11 VMOVDQU 2208(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2240(CX), Y11 VMOVDQU 2272(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2304(CX), Y11 VMOVDQU 2336(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 2368(CX), Y11 VMOVDQU 2400(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 2432(CX), Y11 VMOVDQU 2464(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 2496(CX), Y11 VMOVDQU 2528(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 4 to 10 outputs VMOVDQU (R9), Y13 @@ -29220,62 +26899,52 @@ mulAvxTwo_6x10_loop: VMOVDQU 2592(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 2624(CX), Y11 VMOVDQU 2656(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2688(CX), Y11 VMOVDQU 2720(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2752(CX), Y11 VMOVDQU 2784(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2816(CX), Y11 VMOVDQU 2848(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2880(CX), Y11 VMOVDQU 2912(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2944(CX), Y11 VMOVDQU 2976(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 3008(CX), Y11 VMOVDQU 3040(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 3072(CX), Y11 VMOVDQU 3104(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 3136(CX), Y11 VMOVDQU 3168(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 5 to 10 outputs VMOVDQU (DX), Y13 @@ -29287,62 +26956,52 @@ mulAvxTwo_6x10_loop: VMOVDQU 3232(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 3264(CX), Y11 VMOVDQU 3296(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 3328(CX), Y11 VMOVDQU 3360(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 3392(CX), Y11 VMOVDQU 3424(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 3456(CX), Y11 VMOVDQU 3488(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 3520(CX), Y11 VMOVDQU 3552(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 3584(CX), Y11 VMOVDQU 3616(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 3648(CX), Y11 VMOVDQU 3680(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 3712(CX), Y11 VMOVDQU 3744(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 3776(CX), Y11 VMOVDQU 3808(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Store 10 outputs MOVQ (R10), R12 @@ -29376,7 +27035,7 @@ mulAvxTwo_6x10_end: RET // func mulAvxTwo_6x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_6x10Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -29420,80 +27079,70 @@ mulAvxTwo_6x10Xor_loop: VMOVDQU 32(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) MOVQ 24(R10), R12 VMOVDQU (R12)(R11*1), Y1 VMOVDQU 64(CX), Y11 VMOVDQU 96(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) MOVQ 48(R10), R12 VMOVDQU (R12)(R11*1), Y2 VMOVDQU 128(CX), Y11 VMOVDQU 160(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) MOVQ 72(R10), R12 VMOVDQU (R12)(R11*1), Y3 VMOVDQU 192(CX), Y11 VMOVDQU 224(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) MOVQ 96(R10), R12 VMOVDQU (R12)(R11*1), Y4 VMOVDQU 256(CX), Y11 VMOVDQU 288(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) MOVQ 120(R10), R12 VMOVDQU (R12)(R11*1), Y5 VMOVDQU 320(CX), Y11 VMOVDQU 352(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) MOVQ 144(R10), R12 VMOVDQU (R12)(R11*1), Y6 VMOVDQU 384(CX), Y11 VMOVDQU 416(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) MOVQ 168(R10), R12 VMOVDQU (R12)(R11*1), Y7 VMOVDQU 448(CX), Y11 VMOVDQU 480(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) MOVQ 192(R10), R12 VMOVDQU (R12)(R11*1), Y8 VMOVDQU 512(CX), Y11 VMOVDQU 544(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) MOVQ 216(R10), R12 VMOVDQU (R12)(R11*1), Y9 VMOVDQU 576(CX), Y11 VMOVDQU 608(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 1 to 10 outputs VMOVDQU (SI), Y13 @@ -29505,62 +27154,52 @@ mulAvxTwo_6x10Xor_loop: VMOVDQU 672(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 704(CX), Y11 VMOVDQU 736(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 768(CX), Y11 VMOVDQU 800(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 832(CX), Y11 VMOVDQU 864(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 896(CX), Y11 VMOVDQU 928(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 960(CX), Y11 VMOVDQU 992(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1024(CX), Y11 VMOVDQU 1056(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1088(CX), Y11 VMOVDQU 1120(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1152(CX), Y11 VMOVDQU 1184(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1216(CX), Y11 VMOVDQU 1248(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 2 to 10 outputs VMOVDQU (DI), Y13 @@ -29572,62 +27211,52 @@ mulAvxTwo_6x10Xor_loop: VMOVDQU 1312(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1344(CX), Y11 VMOVDQU 1376(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 1408(CX), Y11 VMOVDQU 1440(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 1472(CX), Y11 VMOVDQU 1504(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 1536(CX), Y11 VMOVDQU 1568(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 1600(CX), Y11 VMOVDQU 1632(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1664(CX), Y11 VMOVDQU 1696(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1728(CX), Y11 VMOVDQU 1760(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1792(CX), Y11 VMOVDQU 1824(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1856(CX), Y11 VMOVDQU 1888(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 3 to 10 outputs VMOVDQU (R8), Y13 @@ -29639,62 +27268,52 @@ mulAvxTwo_6x10Xor_loop: VMOVDQU 1952(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1984(CX), Y11 VMOVDQU 2016(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2048(CX), Y11 VMOVDQU 2080(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2112(CX), Y11 VMOVDQU 2144(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2176(CX), Y11 VMOVDQU 2208(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2240(CX), Y11 VMOVDQU 2272(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2304(CX), Y11 VMOVDQU 2336(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 2368(CX), Y11 VMOVDQU 2400(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 2432(CX), Y11 VMOVDQU 2464(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 2496(CX), Y11 VMOVDQU 2528(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 4 to 10 outputs VMOVDQU (R9), Y13 @@ -29706,62 +27325,52 @@ mulAvxTwo_6x10Xor_loop: VMOVDQU 2592(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 2624(CX), Y11 VMOVDQU 2656(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2688(CX), Y11 VMOVDQU 2720(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2752(CX), Y11 VMOVDQU 2784(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2816(CX), Y11 VMOVDQU 2848(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2880(CX), Y11 VMOVDQU 2912(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2944(CX), Y11 VMOVDQU 2976(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 3008(CX), Y11 VMOVDQU 3040(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 3072(CX), Y11 VMOVDQU 3104(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 3136(CX), Y11 VMOVDQU 3168(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 5 to 10 outputs VMOVDQU (DX), Y13 @@ -29773,62 +27382,52 @@ mulAvxTwo_6x10Xor_loop: VMOVDQU 3232(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 3264(CX), Y11 VMOVDQU 3296(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 3328(CX), Y11 VMOVDQU 3360(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 3392(CX), Y11 VMOVDQU 3424(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 3456(CX), Y11 VMOVDQU 3488(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 3520(CX), Y11 VMOVDQU 3552(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 3584(CX), Y11 VMOVDQU 3616(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 3648(CX), Y11 VMOVDQU 3680(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 3712(CX), Y11 VMOVDQU 3744(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 3776(CX), Y11 VMOVDQU 3808(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Store 10 outputs MOVQ (R10), R12 @@ -29862,7 +27461,7 @@ mulAvxTwo_6x10Xor_end: RET // func mulAvxTwo_7x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x1(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -29922,8 +27521,7 @@ mulAvxTwo_7x1_loop: VMOVDQU 96(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 2 to 1 outputs VMOVDQU (DI), Y4 @@ -29935,8 +27533,7 @@ mulAvxTwo_7x1_loop: VMOVDQU 160(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 3 to 1 outputs VMOVDQU (R8), Y4 @@ -29948,8 +27545,7 @@ mulAvxTwo_7x1_loop: VMOVDQU 224(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 4 to 1 outputs VMOVDQU (R9), Y4 @@ -29961,8 +27557,7 @@ mulAvxTwo_7x1_loop: VMOVDQU 288(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 5 to 1 outputs VMOVDQU (R10), Y4 @@ -29974,8 +27569,7 @@ mulAvxTwo_7x1_loop: VMOVDQU 352(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 6 to 1 outputs VMOVDQU (DX), Y4 @@ -29987,8 +27581,7 @@ mulAvxTwo_7x1_loop: VMOVDQU 416(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Store 1 outputs VMOVDQU Y0, (R11) @@ -30003,7 +27596,7 @@ mulAvxTwo_7x1_end: RET // func mulAvxTwo_7x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x1_64(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -30077,10 +27670,8 @@ mulAvxTwo_7x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 2 to 1 outputs VMOVDQU (DI), Y6 @@ -30098,10 +27689,8 @@ mulAvxTwo_7x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 3 to 1 outputs VMOVDQU (R8), Y6 @@ -30119,10 +27708,8 @@ mulAvxTwo_7x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 4 to 1 outputs VMOVDQU (R9), Y6 @@ -30140,10 +27727,8 @@ mulAvxTwo_7x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 5 to 1 outputs VMOVDQU (R10), Y6 @@ -30161,10 +27746,8 @@ mulAvxTwo_7x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 6 to 1 outputs VMOVDQU (DX), Y6 @@ -30182,10 +27765,8 @@ mulAvxTwo_7x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Store 1 outputs VMOVDQU Y0, (R11) @@ -30201,7 +27782,7 @@ mulAvxTwo_7x1_64_end: RET // func mulAvxTwo_7x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x1Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -30250,8 +27831,7 @@ mulAvxTwo_7x1Xor_loop: VMOVDQU 32(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 1 to 1 outputs VMOVDQU (SI), Y4 @@ -30263,8 +27843,7 @@ mulAvxTwo_7x1Xor_loop: VMOVDQU 96(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 2 to 1 outputs VMOVDQU (DI), Y4 @@ -30276,8 +27855,7 @@ mulAvxTwo_7x1Xor_loop: VMOVDQU 160(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 3 to 1 outputs VMOVDQU (R8), Y4 @@ -30289,8 +27867,7 @@ mulAvxTwo_7x1Xor_loop: VMOVDQU 224(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 4 to 1 outputs VMOVDQU (R9), Y4 @@ -30302,8 +27879,7 @@ mulAvxTwo_7x1Xor_loop: VMOVDQU 288(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 5 to 1 outputs VMOVDQU (R10), Y4 @@ -30315,8 +27891,7 @@ mulAvxTwo_7x1Xor_loop: VMOVDQU 352(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 6 to 1 outputs VMOVDQU (DX), Y4 @@ -30328,8 +27903,7 @@ mulAvxTwo_7x1Xor_loop: VMOVDQU 416(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Store 1 outputs VMOVDQU Y0, (R11) @@ -30344,7 +27918,7 @@ mulAvxTwo_7x1Xor_end: RET // func mulAvxTwo_7x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x1_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -30403,10 +27977,8 @@ mulAvxTwo_7x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 1 to 1 outputs VMOVDQU (SI), Y6 @@ -30424,10 +27996,8 @@ mulAvxTwo_7x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 2 to 1 outputs VMOVDQU (DI), Y6 @@ -30445,10 +28015,8 @@ mulAvxTwo_7x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 3 to 1 outputs VMOVDQU (R8), Y6 @@ -30466,10 +28034,8 @@ mulAvxTwo_7x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 4 to 1 outputs VMOVDQU (R9), Y6 @@ -30487,10 +28053,8 @@ mulAvxTwo_7x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 5 to 1 outputs VMOVDQU (R10), Y6 @@ -30508,10 +28072,8 @@ mulAvxTwo_7x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 6 to 1 outputs VMOVDQU (DX), Y6 @@ -30529,10 +28091,8 @@ mulAvxTwo_7x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Store 1 outputs VMOVDQU Y0, (R11) @@ -30548,7 +28108,7 @@ mulAvxTwo_7x1_64Xor_end: RET // func mulAvxTwo_7x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x2(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -30615,14 +28175,12 @@ mulAvxTwo_7x2_loop: VMOVDQU 160(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 192(CX), Y3 VMOVDQU 224(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 2 to 2 outputs VMOVDQU (DI), Y5 @@ -30634,14 +28192,12 @@ mulAvxTwo_7x2_loop: VMOVDQU 288(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 320(CX), Y3 VMOVDQU 352(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 3 to 2 outputs VMOVDQU (R8), Y5 @@ -30653,14 +28209,12 @@ mulAvxTwo_7x2_loop: VMOVDQU 416(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 448(CX), Y3 VMOVDQU 480(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 4 to 2 outputs VMOVDQU (R9), Y5 @@ -30672,14 +28226,12 @@ mulAvxTwo_7x2_loop: VMOVDQU 544(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 576(CX), Y3 VMOVDQU 608(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 5 to 2 outputs VMOVDQU (R10), Y5 @@ -30691,14 +28243,12 @@ mulAvxTwo_7x2_loop: VMOVDQU 672(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 704(CX), Y3 VMOVDQU 736(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 6 to 2 outputs VMOVDQU (DX), Y5 @@ -30710,14 +28260,12 @@ mulAvxTwo_7x2_loop: VMOVDQU 800(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 832(CX), Y3 VMOVDQU 864(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Store 2 outputs VMOVDQU Y0, (R12) @@ -30734,7 +28282,7 @@ mulAvxTwo_7x2_end: RET // func mulAvxTwo_7x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x2_64(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -30818,20 +28366,16 @@ mulAvxTwo_7x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 2 to 2 outputs VMOVDQU (DI), Y9 @@ -30849,20 +28393,16 @@ mulAvxTwo_7x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 3 to 2 outputs VMOVDQU (R8), Y9 @@ -30880,20 +28420,16 @@ mulAvxTwo_7x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 4 to 2 outputs VMOVDQU (R9), Y9 @@ -30911,20 +28447,16 @@ mulAvxTwo_7x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 5 to 2 outputs VMOVDQU (R10), Y9 @@ -30942,20 +28474,16 @@ mulAvxTwo_7x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 6 to 2 outputs VMOVDQU (DX), Y9 @@ -30973,20 +28501,16 @@ mulAvxTwo_7x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 832(CX), Y5 VMOVDQU 864(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Store 2 outputs VMOVDQU Y0, (R12) @@ -31005,7 +28529,7 @@ mulAvxTwo_7x2_64_end: RET // func mulAvxTwo_7x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x2Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -31056,15 +28580,13 @@ mulAvxTwo_7x2Xor_loop: VMOVDQU 32(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU (R11), Y1 VMOVDQU 64(CX), Y3 VMOVDQU 96(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 1 to 2 outputs VMOVDQU (SI), Y5 @@ -31076,14 +28598,12 @@ mulAvxTwo_7x2Xor_loop: VMOVDQU 160(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 192(CX), Y3 VMOVDQU 224(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 2 to 2 outputs VMOVDQU (DI), Y5 @@ -31095,14 +28615,12 @@ mulAvxTwo_7x2Xor_loop: VMOVDQU 288(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 320(CX), Y3 VMOVDQU 352(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 3 to 2 outputs VMOVDQU (R8), Y5 @@ -31114,14 +28632,12 @@ mulAvxTwo_7x2Xor_loop: VMOVDQU 416(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 448(CX), Y3 VMOVDQU 480(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 4 to 2 outputs VMOVDQU (R9), Y5 @@ -31133,14 +28649,12 @@ mulAvxTwo_7x2Xor_loop: VMOVDQU 544(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 576(CX), Y3 VMOVDQU 608(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 5 to 2 outputs VMOVDQU (R10), Y5 @@ -31152,14 +28666,12 @@ mulAvxTwo_7x2Xor_loop: VMOVDQU 672(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 704(CX), Y3 VMOVDQU 736(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 6 to 2 outputs VMOVDQU (DX), Y5 @@ -31171,14 +28683,12 @@ mulAvxTwo_7x2Xor_loop: VMOVDQU 800(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 832(CX), Y3 VMOVDQU 864(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Store 2 outputs VMOVDQU Y0, (R12) @@ -31195,7 +28705,7 @@ mulAvxTwo_7x2Xor_end: RET // func mulAvxTwo_7x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x2_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -31258,20 +28768,16 @@ mulAvxTwo_7x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 64(CX), Y5 VMOVDQU 96(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 1 to 2 outputs VMOVDQU (SI), Y9 @@ -31289,20 +28795,16 @@ mulAvxTwo_7x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 2 to 2 outputs VMOVDQU (DI), Y9 @@ -31320,20 +28822,16 @@ mulAvxTwo_7x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 3 to 2 outputs VMOVDQU (R8), Y9 @@ -31351,20 +28849,16 @@ mulAvxTwo_7x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 4 to 2 outputs VMOVDQU (R9), Y9 @@ -31382,20 +28876,16 @@ mulAvxTwo_7x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 5 to 2 outputs VMOVDQU (R10), Y9 @@ -31413,20 +28903,16 @@ mulAvxTwo_7x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 6 to 2 outputs VMOVDQU (DX), Y9 @@ -31444,20 +28930,16 @@ mulAvxTwo_7x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 832(CX), Y5 VMOVDQU 864(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Store 2 outputs VMOVDQU Y0, (R12) @@ -31476,7 +28958,7 @@ mulAvxTwo_7x2_64Xor_end: RET // func mulAvxTwo_7x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x3(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -31550,20 +29032,17 @@ mulAvxTwo_7x3_loop: VMOVDQU 224(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 256(CX), Y4 VMOVDQU 288(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 320(CX), Y4 VMOVDQU 352(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 2 to 3 outputs VMOVDQU (DI), Y6 @@ -31575,20 +29054,17 @@ mulAvxTwo_7x3_loop: VMOVDQU 416(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 448(CX), Y4 VMOVDQU 480(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 512(CX), Y4 VMOVDQU 544(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 3 to 3 outputs VMOVDQU (R8), Y6 @@ -31600,20 +29076,17 @@ mulAvxTwo_7x3_loop: VMOVDQU 608(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 640(CX), Y4 VMOVDQU 672(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 704(CX), Y4 VMOVDQU 736(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 4 to 3 outputs VMOVDQU (R9), Y6 @@ -31625,20 +29098,17 @@ mulAvxTwo_7x3_loop: VMOVDQU 800(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 832(CX), Y4 VMOVDQU 864(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 896(CX), Y4 VMOVDQU 928(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 5 to 3 outputs VMOVDQU (R10), Y6 @@ -31650,20 +29120,17 @@ mulAvxTwo_7x3_loop: VMOVDQU 992(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1024(CX), Y4 VMOVDQU 1056(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1088(CX), Y4 VMOVDQU 1120(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 6 to 3 outputs VMOVDQU (DX), Y6 @@ -31675,20 +29142,17 @@ mulAvxTwo_7x3_loop: VMOVDQU 1184(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1216(CX), Y4 VMOVDQU 1248(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1280(CX), Y4 VMOVDQU 1312(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Store 3 outputs VMOVDQU Y0, (R12) @@ -31707,7 +29171,7 @@ mulAvxTwo_7x3_end: RET // func mulAvxTwo_7x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x3_64(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -31801,30 +29265,24 @@ mulAvxTwo_7x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 2 to 3 outputs VMOVDQU (DI), Y11 @@ -31842,30 +29300,24 @@ mulAvxTwo_7x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 3 to 3 outputs VMOVDQU (R8), Y11 @@ -31883,30 +29335,24 @@ mulAvxTwo_7x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 4 to 3 outputs VMOVDQU (R9), Y11 @@ -31924,30 +29370,24 @@ mulAvxTwo_7x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 5 to 3 outputs VMOVDQU (R10), Y11 @@ -31965,30 +29405,24 @@ mulAvxTwo_7x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 6 to 3 outputs VMOVDQU (DX), Y11 @@ -32006,30 +29440,24 @@ mulAvxTwo_7x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1216(CX), Y7 VMOVDQU 1248(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y7 VMOVDQU 1312(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Store 3 outputs VMOVDQU Y0, (R12) @@ -32051,7 +29479,7 @@ mulAvxTwo_7x3_64_end: RET // func mulAvxTwo_7x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x3Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -32104,22 +29532,19 @@ mulAvxTwo_7x3Xor_loop: VMOVDQU 32(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU (R13), Y1 VMOVDQU 64(CX), Y4 VMOVDQU 96(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU (R11), Y2 VMOVDQU 128(CX), Y4 VMOVDQU 160(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 1 to 3 outputs VMOVDQU (SI), Y6 @@ -32131,20 +29556,17 @@ mulAvxTwo_7x3Xor_loop: VMOVDQU 224(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 256(CX), Y4 VMOVDQU 288(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 320(CX), Y4 VMOVDQU 352(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 2 to 3 outputs VMOVDQU (DI), Y6 @@ -32156,20 +29578,17 @@ mulAvxTwo_7x3Xor_loop: VMOVDQU 416(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 448(CX), Y4 VMOVDQU 480(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 512(CX), Y4 VMOVDQU 544(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 3 to 3 outputs VMOVDQU (R8), Y6 @@ -32181,20 +29600,17 @@ mulAvxTwo_7x3Xor_loop: VMOVDQU 608(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 640(CX), Y4 VMOVDQU 672(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 704(CX), Y4 VMOVDQU 736(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 4 to 3 outputs VMOVDQU (R9), Y6 @@ -32206,20 +29622,17 @@ mulAvxTwo_7x3Xor_loop: VMOVDQU 800(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 832(CX), Y4 VMOVDQU 864(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 896(CX), Y4 VMOVDQU 928(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 5 to 3 outputs VMOVDQU (R10), Y6 @@ -32231,20 +29644,17 @@ mulAvxTwo_7x3Xor_loop: VMOVDQU 992(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1024(CX), Y4 VMOVDQU 1056(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1088(CX), Y4 VMOVDQU 1120(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 6 to 3 outputs VMOVDQU (DX), Y6 @@ -32256,20 +29666,17 @@ mulAvxTwo_7x3Xor_loop: VMOVDQU 1184(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1216(CX), Y4 VMOVDQU 1248(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1280(CX), Y4 VMOVDQU 1312(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Store 3 outputs VMOVDQU Y0, (R12) @@ -32288,7 +29695,7 @@ mulAvxTwo_7x3Xor_end: RET // func mulAvxTwo_7x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x3_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -32355,30 +29762,24 @@ mulAvxTwo_7x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 64(CX), Y7 VMOVDQU 96(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 128(CX), Y7 VMOVDQU 160(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 1 to 3 outputs VMOVDQU (SI), Y11 @@ -32396,30 +29797,24 @@ mulAvxTwo_7x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 2 to 3 outputs VMOVDQU (DI), Y11 @@ -32437,30 +29832,24 @@ mulAvxTwo_7x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 3 to 3 outputs VMOVDQU (R8), Y11 @@ -32478,30 +29867,24 @@ mulAvxTwo_7x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 4 to 3 outputs VMOVDQU (R9), Y11 @@ -32519,30 +29902,24 @@ mulAvxTwo_7x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 5 to 3 outputs VMOVDQU (R10), Y11 @@ -32560,30 +29937,24 @@ mulAvxTwo_7x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 6 to 3 outputs VMOVDQU (DX), Y11 @@ -32601,30 +29972,24 @@ mulAvxTwo_7x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1216(CX), Y7 VMOVDQU 1248(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y7 VMOVDQU 1312(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Store 3 outputs VMOVDQU Y0, (R12) @@ -32646,7 +30011,7 @@ mulAvxTwo_7x3_64Xor_end: RET // func mulAvxTwo_7x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x4(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -32727,26 +30092,22 @@ mulAvxTwo_7x4_loop: VMOVDQU 288(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 384(CX), Y5 VMOVDQU 416(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 2 to 4 outputs VMOVDQU (DI), Y7 @@ -32758,26 +30119,22 @@ mulAvxTwo_7x4_loop: VMOVDQU 544(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 640(CX), Y5 VMOVDQU 672(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 3 to 4 outputs VMOVDQU (R8), Y7 @@ -32789,26 +30146,22 @@ mulAvxTwo_7x4_loop: VMOVDQU 800(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 832(CX), Y5 VMOVDQU 864(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 896(CX), Y5 VMOVDQU 928(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 960(CX), Y5 VMOVDQU 992(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 4 to 4 outputs VMOVDQU (R9), Y7 @@ -32820,26 +30173,22 @@ mulAvxTwo_7x4_loop: VMOVDQU 1056(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1088(CX), Y5 VMOVDQU 1120(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1152(CX), Y5 VMOVDQU 1184(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1216(CX), Y5 VMOVDQU 1248(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 5 to 4 outputs VMOVDQU (R10), Y7 @@ -32851,26 +30200,22 @@ mulAvxTwo_7x4_loop: VMOVDQU 1312(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1344(CX), Y5 VMOVDQU 1376(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1408(CX), Y5 VMOVDQU 1440(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1472(CX), Y5 VMOVDQU 1504(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 6 to 4 outputs VMOVDQU (DX), Y7 @@ -32882,26 +30227,22 @@ mulAvxTwo_7x4_loop: VMOVDQU 1568(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1600(CX), Y5 VMOVDQU 1632(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1664(CX), Y5 VMOVDQU 1696(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1728(CX), Y5 VMOVDQU 1760(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Store 4 outputs VMOVDQU Y0, (R12) @@ -32922,7 +30263,7 @@ mulAvxTwo_7x4_end: RET // func mulAvxTwo_7x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x4Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -32977,29 +30318,25 @@ mulAvxTwo_7x4Xor_loop: VMOVDQU 32(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU (R13), Y1 VMOVDQU 64(CX), Y5 VMOVDQU 96(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU (R14), Y2 VMOVDQU 128(CX), Y5 VMOVDQU 160(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU (R11), Y3 VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 1 to 4 outputs VMOVDQU (SI), Y7 @@ -33011,26 +30348,22 @@ mulAvxTwo_7x4Xor_loop: VMOVDQU 288(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 384(CX), Y5 VMOVDQU 416(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 2 to 4 outputs VMOVDQU (DI), Y7 @@ -33042,26 +30375,22 @@ mulAvxTwo_7x4Xor_loop: VMOVDQU 544(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 640(CX), Y5 VMOVDQU 672(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 3 to 4 outputs VMOVDQU (R8), Y7 @@ -33073,26 +30402,22 @@ mulAvxTwo_7x4Xor_loop: VMOVDQU 800(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 832(CX), Y5 VMOVDQU 864(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 896(CX), Y5 VMOVDQU 928(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 960(CX), Y5 VMOVDQU 992(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 4 to 4 outputs VMOVDQU (R9), Y7 @@ -33104,26 +30429,22 @@ mulAvxTwo_7x4Xor_loop: VMOVDQU 1056(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1088(CX), Y5 VMOVDQU 1120(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1152(CX), Y5 VMOVDQU 1184(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1216(CX), Y5 VMOVDQU 1248(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 5 to 4 outputs VMOVDQU (R10), Y7 @@ -33135,26 +30456,22 @@ mulAvxTwo_7x4Xor_loop: VMOVDQU 1312(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1344(CX), Y5 VMOVDQU 1376(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1408(CX), Y5 VMOVDQU 1440(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1472(CX), Y5 VMOVDQU 1504(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 6 to 4 outputs VMOVDQU (DX), Y7 @@ -33166,26 +30483,22 @@ mulAvxTwo_7x4Xor_loop: VMOVDQU 1568(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1600(CX), Y5 VMOVDQU 1632(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1664(CX), Y5 VMOVDQU 1696(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1728(CX), Y5 VMOVDQU 1760(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Store 4 outputs VMOVDQU Y0, (R12) @@ -33206,7 +30519,7 @@ mulAvxTwo_7x4Xor_end: RET // func mulAvxTwo_7x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x5(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -33294,32 +30607,27 @@ mulAvxTwo_7x5_loop: VMOVDQU 352(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 384(CX), Y6 VMOVDQU 416(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 448(CX), Y6 VMOVDQU 480(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 512(CX), Y6 VMOVDQU 544(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 576(CX), Y6 VMOVDQU 608(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 2 to 5 outputs VMOVDQU (DI), Y8 @@ -33331,32 +30639,27 @@ mulAvxTwo_7x5_loop: VMOVDQU 672(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 704(CX), Y6 VMOVDQU 736(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 768(CX), Y6 VMOVDQU 800(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 832(CX), Y6 VMOVDQU 864(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 896(CX), Y6 VMOVDQU 928(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 3 to 5 outputs VMOVDQU (R8), Y8 @@ -33368,32 +30671,27 @@ mulAvxTwo_7x5_loop: VMOVDQU 992(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1024(CX), Y6 VMOVDQU 1056(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1088(CX), Y6 VMOVDQU 1120(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1152(CX), Y6 VMOVDQU 1184(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1216(CX), Y6 VMOVDQU 1248(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 4 to 5 outputs VMOVDQU (R9), Y8 @@ -33405,32 +30703,27 @@ mulAvxTwo_7x5_loop: VMOVDQU 1312(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1344(CX), Y6 VMOVDQU 1376(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1408(CX), Y6 VMOVDQU 1440(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1472(CX), Y6 VMOVDQU 1504(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1536(CX), Y6 VMOVDQU 1568(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 5 to 5 outputs VMOVDQU (R10), Y8 @@ -33442,32 +30735,27 @@ mulAvxTwo_7x5_loop: VMOVDQU 1632(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1664(CX), Y6 VMOVDQU 1696(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1728(CX), Y6 VMOVDQU 1760(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1792(CX), Y6 VMOVDQU 1824(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1856(CX), Y6 VMOVDQU 1888(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 6 to 5 outputs VMOVDQU (DX), Y8 @@ -33479,32 +30767,27 @@ mulAvxTwo_7x5_loop: VMOVDQU 1952(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1984(CX), Y6 VMOVDQU 2016(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 2048(CX), Y6 VMOVDQU 2080(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 2112(CX), Y6 VMOVDQU 2144(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 2176(CX), Y6 VMOVDQU 2208(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Store 5 outputs VMOVDQU Y0, (R12) @@ -33527,7 +30810,7 @@ mulAvxTwo_7x5_end: RET // func mulAvxTwo_7x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x5Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -33584,36 +30867,31 @@ mulAvxTwo_7x5Xor_loop: VMOVDQU 32(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU (R13), Y1 VMOVDQU 64(CX), Y6 VMOVDQU 96(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU (R14), Y2 VMOVDQU 128(CX), Y6 VMOVDQU 160(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU (R15), Y3 VMOVDQU 192(CX), Y6 VMOVDQU 224(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU (R11), Y4 VMOVDQU 256(CX), Y6 VMOVDQU 288(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 1 to 5 outputs VMOVDQU (SI), Y8 @@ -33625,32 +30903,27 @@ mulAvxTwo_7x5Xor_loop: VMOVDQU 352(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 384(CX), Y6 VMOVDQU 416(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 448(CX), Y6 VMOVDQU 480(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 512(CX), Y6 VMOVDQU 544(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 576(CX), Y6 VMOVDQU 608(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 2 to 5 outputs VMOVDQU (DI), Y8 @@ -33662,32 +30935,27 @@ mulAvxTwo_7x5Xor_loop: VMOVDQU 672(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 704(CX), Y6 VMOVDQU 736(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 768(CX), Y6 VMOVDQU 800(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 832(CX), Y6 VMOVDQU 864(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 896(CX), Y6 VMOVDQU 928(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 3 to 5 outputs VMOVDQU (R8), Y8 @@ -33699,32 +30967,27 @@ mulAvxTwo_7x5Xor_loop: VMOVDQU 992(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1024(CX), Y6 VMOVDQU 1056(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1088(CX), Y6 VMOVDQU 1120(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1152(CX), Y6 VMOVDQU 1184(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1216(CX), Y6 VMOVDQU 1248(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 4 to 5 outputs VMOVDQU (R9), Y8 @@ -33736,32 +30999,27 @@ mulAvxTwo_7x5Xor_loop: VMOVDQU 1312(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1344(CX), Y6 VMOVDQU 1376(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1408(CX), Y6 VMOVDQU 1440(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1472(CX), Y6 VMOVDQU 1504(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1536(CX), Y6 VMOVDQU 1568(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 5 to 5 outputs VMOVDQU (R10), Y8 @@ -33773,32 +31031,27 @@ mulAvxTwo_7x5Xor_loop: VMOVDQU 1632(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1664(CX), Y6 VMOVDQU 1696(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1728(CX), Y6 VMOVDQU 1760(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1792(CX), Y6 VMOVDQU 1824(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1856(CX), Y6 VMOVDQU 1888(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 6 to 5 outputs VMOVDQU (DX), Y8 @@ -33810,32 +31063,27 @@ mulAvxTwo_7x5Xor_loop: VMOVDQU 1952(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1984(CX), Y6 VMOVDQU 2016(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 2048(CX), Y6 VMOVDQU 2080(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 2112(CX), Y6 VMOVDQU 2144(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 2176(CX), Y6 VMOVDQU 2208(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Store 5 outputs VMOVDQU Y0, (R12) @@ -33858,7 +31106,7 @@ mulAvxTwo_7x5Xor_end: RET // func mulAvxTwo_7x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x6(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -33955,38 +31203,32 @@ mulAvxTwo_7x6_loop: VMOVDQU 416(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 576(CX), Y7 VMOVDQU 608(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 2 to 6 outputs VMOVDQU (SI), Y9 @@ -33998,38 +31240,32 @@ mulAvxTwo_7x6_loop: VMOVDQU 800(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 960(CX), Y7 VMOVDQU 992(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 3 to 6 outputs VMOVDQU (DI), Y9 @@ -34041,38 +31277,32 @@ mulAvxTwo_7x6_loop: VMOVDQU 1184(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1216(CX), Y7 VMOVDQU 1248(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1280(CX), Y7 VMOVDQU 1312(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1344(CX), Y7 VMOVDQU 1376(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1408(CX), Y7 VMOVDQU 1440(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1472(CX), Y7 VMOVDQU 1504(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 4 to 6 outputs VMOVDQU (R8), Y9 @@ -34084,38 +31314,32 @@ mulAvxTwo_7x6_loop: VMOVDQU 1568(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1600(CX), Y7 VMOVDQU 1632(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1664(CX), Y7 VMOVDQU 1696(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1728(CX), Y7 VMOVDQU 1760(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1792(CX), Y7 VMOVDQU 1824(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1856(CX), Y7 VMOVDQU 1888(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 5 to 6 outputs VMOVDQU (R9), Y9 @@ -34127,38 +31351,32 @@ mulAvxTwo_7x6_loop: VMOVDQU 1952(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1984(CX), Y7 VMOVDQU 2016(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2048(CX), Y7 VMOVDQU 2080(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2112(CX), Y7 VMOVDQU 2144(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2176(CX), Y7 VMOVDQU 2208(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 2240(CX), Y7 VMOVDQU 2272(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 6 to 6 outputs VMOVDQU (AX), Y9 @@ -34170,38 +31388,32 @@ mulAvxTwo_7x6_loop: VMOVDQU 2336(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 2368(CX), Y7 VMOVDQU 2400(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2432(CX), Y7 VMOVDQU 2464(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2496(CX), Y7 VMOVDQU 2528(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2560(CX), Y7 VMOVDQU 2592(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 2624(CX), Y7 VMOVDQU 2656(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Store 6 outputs VMOVDQU Y0, (R11) @@ -34226,7 +31438,7 @@ mulAvxTwo_7x6_end: RET // func mulAvxTwo_7x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x6Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -34287,43 +31499,37 @@ mulAvxTwo_7x6Xor_loop: VMOVDQU 32(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU (R12), Y1 VMOVDQU 64(CX), Y7 VMOVDQU 96(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU (R13), Y2 VMOVDQU 128(CX), Y7 VMOVDQU 160(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU (R14), Y3 VMOVDQU 192(CX), Y7 VMOVDQU 224(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU (R15), Y4 VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU (R10), Y5 VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 1 to 6 outputs VMOVDQU (BX), Y9 @@ -34335,38 +31541,32 @@ mulAvxTwo_7x6Xor_loop: VMOVDQU 416(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 576(CX), Y7 VMOVDQU 608(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 2 to 6 outputs VMOVDQU (SI), Y9 @@ -34378,38 +31578,32 @@ mulAvxTwo_7x6Xor_loop: VMOVDQU 800(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 960(CX), Y7 VMOVDQU 992(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 3 to 6 outputs VMOVDQU (DI), Y9 @@ -34421,38 +31615,32 @@ mulAvxTwo_7x6Xor_loop: VMOVDQU 1184(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1216(CX), Y7 VMOVDQU 1248(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1280(CX), Y7 VMOVDQU 1312(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1344(CX), Y7 VMOVDQU 1376(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1408(CX), Y7 VMOVDQU 1440(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1472(CX), Y7 VMOVDQU 1504(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 4 to 6 outputs VMOVDQU (R8), Y9 @@ -34464,38 +31652,32 @@ mulAvxTwo_7x6Xor_loop: VMOVDQU 1568(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1600(CX), Y7 VMOVDQU 1632(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1664(CX), Y7 VMOVDQU 1696(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1728(CX), Y7 VMOVDQU 1760(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1792(CX), Y7 VMOVDQU 1824(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1856(CX), Y7 VMOVDQU 1888(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 5 to 6 outputs VMOVDQU (R9), Y9 @@ -34507,38 +31689,32 @@ mulAvxTwo_7x6Xor_loop: VMOVDQU 1952(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1984(CX), Y7 VMOVDQU 2016(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2048(CX), Y7 VMOVDQU 2080(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2112(CX), Y7 VMOVDQU 2144(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2176(CX), Y7 VMOVDQU 2208(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 2240(CX), Y7 VMOVDQU 2272(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 6 to 6 outputs VMOVDQU (AX), Y9 @@ -34550,38 +31726,32 @@ mulAvxTwo_7x6Xor_loop: VMOVDQU 2336(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 2368(CX), Y7 VMOVDQU 2400(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2432(CX), Y7 VMOVDQU 2464(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2496(CX), Y7 VMOVDQU 2528(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2560(CX), Y7 VMOVDQU 2592(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 2624(CX), Y7 VMOVDQU 2656(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Store 6 outputs VMOVDQU Y0, (R11) @@ -34606,7 +31776,7 @@ mulAvxTwo_7x6Xor_end: RET // func mulAvxTwo_7x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x7(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -34692,44 +31862,37 @@ mulAvxTwo_7x7_loop: VMOVDQU 480(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 512(CX), Y8 VMOVDQU 544(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 576(CX), Y8 VMOVDQU 608(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 640(CX), Y8 VMOVDQU 672(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 704(CX), Y8 VMOVDQU 736(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 768(CX), Y8 VMOVDQU 800(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 832(CX), Y8 VMOVDQU 864(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 2 to 7 outputs VMOVDQU (DI), Y10 @@ -34741,44 +31904,37 @@ mulAvxTwo_7x7_loop: VMOVDQU 928(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 960(CX), Y8 VMOVDQU 992(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1024(CX), Y8 VMOVDQU 1056(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1088(CX), Y8 VMOVDQU 1120(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1152(CX), Y8 VMOVDQU 1184(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1216(CX), Y8 VMOVDQU 1248(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1280(CX), Y8 VMOVDQU 1312(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 3 to 7 outputs VMOVDQU (R8), Y10 @@ -34790,44 +31946,37 @@ mulAvxTwo_7x7_loop: VMOVDQU 1376(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1408(CX), Y8 VMOVDQU 1440(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1472(CX), Y8 VMOVDQU 1504(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1536(CX), Y8 VMOVDQU 1568(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1600(CX), Y8 VMOVDQU 1632(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1664(CX), Y8 VMOVDQU 1696(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1728(CX), Y8 VMOVDQU 1760(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 4 to 7 outputs VMOVDQU (R9), Y10 @@ -34839,44 +31988,37 @@ mulAvxTwo_7x7_loop: VMOVDQU 1824(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1856(CX), Y8 VMOVDQU 1888(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1920(CX), Y8 VMOVDQU 1952(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1984(CX), Y8 VMOVDQU 2016(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2048(CX), Y8 VMOVDQU 2080(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 2112(CX), Y8 VMOVDQU 2144(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 2176(CX), Y8 VMOVDQU 2208(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 5 to 7 outputs VMOVDQU (R10), Y10 @@ -34888,44 +32030,37 @@ mulAvxTwo_7x7_loop: VMOVDQU 2272(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 2304(CX), Y8 VMOVDQU 2336(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 2368(CX), Y8 VMOVDQU 2400(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 2432(CX), Y8 VMOVDQU 2464(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2496(CX), Y8 VMOVDQU 2528(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 2560(CX), Y8 VMOVDQU 2592(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 2624(CX), Y8 VMOVDQU 2656(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 6 to 7 outputs VMOVDQU (DX), Y10 @@ -34937,44 +32072,37 @@ mulAvxTwo_7x7_loop: VMOVDQU 2720(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 2752(CX), Y8 VMOVDQU 2784(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 2816(CX), Y8 VMOVDQU 2848(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 2880(CX), Y8 VMOVDQU 2912(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2944(CX), Y8 VMOVDQU 2976(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 3008(CX), Y8 VMOVDQU 3040(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 3072(CX), Y8 VMOVDQU 3104(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Store 7 outputs MOVQ (R11), R13 @@ -35002,7 +32130,7 @@ mulAvxTwo_7x7_end: RET // func mulAvxTwo_7x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x7Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -35048,56 +32176,49 @@ mulAvxTwo_7x7Xor_loop: VMOVDQU 32(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) MOVQ 24(R11), R13 VMOVDQU (R13)(R12*1), Y1 VMOVDQU 64(CX), Y8 VMOVDQU 96(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) MOVQ 48(R11), R13 VMOVDQU (R13)(R12*1), Y2 VMOVDQU 128(CX), Y8 VMOVDQU 160(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) MOVQ 72(R11), R13 VMOVDQU (R13)(R12*1), Y3 VMOVDQU 192(CX), Y8 VMOVDQU 224(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) MOVQ 96(R11), R13 VMOVDQU (R13)(R12*1), Y4 VMOVDQU 256(CX), Y8 VMOVDQU 288(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) MOVQ 120(R11), R13 VMOVDQU (R13)(R12*1), Y5 VMOVDQU 320(CX), Y8 VMOVDQU 352(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) MOVQ 144(R11), R13 VMOVDQU (R13)(R12*1), Y6 VMOVDQU 384(CX), Y8 VMOVDQU 416(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 1 to 7 outputs VMOVDQU (SI), Y10 @@ -35109,44 +32230,37 @@ mulAvxTwo_7x7Xor_loop: VMOVDQU 480(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 512(CX), Y8 VMOVDQU 544(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 576(CX), Y8 VMOVDQU 608(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 640(CX), Y8 VMOVDQU 672(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 704(CX), Y8 VMOVDQU 736(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 768(CX), Y8 VMOVDQU 800(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 832(CX), Y8 VMOVDQU 864(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 2 to 7 outputs VMOVDQU (DI), Y10 @@ -35158,44 +32272,37 @@ mulAvxTwo_7x7Xor_loop: VMOVDQU 928(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 960(CX), Y8 VMOVDQU 992(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1024(CX), Y8 VMOVDQU 1056(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1088(CX), Y8 VMOVDQU 1120(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1152(CX), Y8 VMOVDQU 1184(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1216(CX), Y8 VMOVDQU 1248(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1280(CX), Y8 VMOVDQU 1312(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 3 to 7 outputs VMOVDQU (R8), Y10 @@ -35207,44 +32314,37 @@ mulAvxTwo_7x7Xor_loop: VMOVDQU 1376(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1408(CX), Y8 VMOVDQU 1440(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1472(CX), Y8 VMOVDQU 1504(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1536(CX), Y8 VMOVDQU 1568(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1600(CX), Y8 VMOVDQU 1632(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1664(CX), Y8 VMOVDQU 1696(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1728(CX), Y8 VMOVDQU 1760(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 4 to 7 outputs VMOVDQU (R9), Y10 @@ -35256,44 +32356,37 @@ mulAvxTwo_7x7Xor_loop: VMOVDQU 1824(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1856(CX), Y8 VMOVDQU 1888(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1920(CX), Y8 VMOVDQU 1952(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1984(CX), Y8 VMOVDQU 2016(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2048(CX), Y8 VMOVDQU 2080(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 2112(CX), Y8 VMOVDQU 2144(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 2176(CX), Y8 VMOVDQU 2208(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 5 to 7 outputs VMOVDQU (R10), Y10 @@ -35305,44 +32398,37 @@ mulAvxTwo_7x7Xor_loop: VMOVDQU 2272(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 2304(CX), Y8 VMOVDQU 2336(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 2368(CX), Y8 VMOVDQU 2400(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 2432(CX), Y8 VMOVDQU 2464(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2496(CX), Y8 VMOVDQU 2528(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 2560(CX), Y8 VMOVDQU 2592(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 2624(CX), Y8 VMOVDQU 2656(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 6 to 7 outputs VMOVDQU (DX), Y10 @@ -35354,44 +32440,37 @@ mulAvxTwo_7x7Xor_loop: VMOVDQU 2720(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 2752(CX), Y8 VMOVDQU 2784(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 2816(CX), Y8 VMOVDQU 2848(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 2880(CX), Y8 VMOVDQU 2912(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2944(CX), Y8 VMOVDQU 2976(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 3008(CX), Y8 VMOVDQU 3040(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 3072(CX), Y8 VMOVDQU 3104(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Store 7 outputs MOVQ (R11), R13 @@ -35419,7 +32498,7 @@ mulAvxTwo_7x7Xor_end: RET // func mulAvxTwo_7x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x8(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -35510,50 +32589,42 @@ mulAvxTwo_7x8_loop: VMOVDQU 544(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 576(CX), Y9 VMOVDQU 608(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y9 VMOVDQU 672(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 704(CX), Y9 VMOVDQU 736(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 768(CX), Y9 VMOVDQU 800(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 832(CX), Y9 VMOVDQU 864(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 896(CX), Y9 VMOVDQU 928(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 960(CX), Y9 VMOVDQU 992(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 2 to 8 outputs VMOVDQU (DI), Y11 @@ -35565,50 +32636,42 @@ mulAvxTwo_7x8_loop: VMOVDQU 1056(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1088(CX), Y9 VMOVDQU 1120(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1152(CX), Y9 VMOVDQU 1184(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1216(CX), Y9 VMOVDQU 1248(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y9 VMOVDQU 1312(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1344(CX), Y9 VMOVDQU 1376(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1408(CX), Y9 VMOVDQU 1440(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1472(CX), Y9 VMOVDQU 1504(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 3 to 8 outputs VMOVDQU (R8), Y11 @@ -35620,50 +32683,42 @@ mulAvxTwo_7x8_loop: VMOVDQU 1568(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1600(CX), Y9 VMOVDQU 1632(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1664(CX), Y9 VMOVDQU 1696(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1728(CX), Y9 VMOVDQU 1760(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1792(CX), Y9 VMOVDQU 1824(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1856(CX), Y9 VMOVDQU 1888(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1920(CX), Y9 VMOVDQU 1952(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1984(CX), Y9 VMOVDQU 2016(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 4 to 8 outputs VMOVDQU (R9), Y11 @@ -35675,50 +32730,42 @@ mulAvxTwo_7x8_loop: VMOVDQU 2080(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 2112(CX), Y9 VMOVDQU 2144(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 2176(CX), Y9 VMOVDQU 2208(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 2240(CX), Y9 VMOVDQU 2272(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 2304(CX), Y9 VMOVDQU 2336(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 2368(CX), Y9 VMOVDQU 2400(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 2432(CX), Y9 VMOVDQU 2464(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 2496(CX), Y9 VMOVDQU 2528(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 5 to 8 outputs VMOVDQU (R10), Y11 @@ -35730,50 +32777,42 @@ mulAvxTwo_7x8_loop: VMOVDQU 2592(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 2624(CX), Y9 VMOVDQU 2656(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 2688(CX), Y9 VMOVDQU 2720(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 2752(CX), Y9 VMOVDQU 2784(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 2816(CX), Y9 VMOVDQU 2848(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 2880(CX), Y9 VMOVDQU 2912(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 2944(CX), Y9 VMOVDQU 2976(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 3008(CX), Y9 VMOVDQU 3040(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 6 to 8 outputs VMOVDQU (DX), Y11 @@ -35785,50 +32824,42 @@ mulAvxTwo_7x8_loop: VMOVDQU 3104(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 3136(CX), Y9 VMOVDQU 3168(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 3200(CX), Y9 VMOVDQU 3232(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 3264(CX), Y9 VMOVDQU 3296(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 3328(CX), Y9 VMOVDQU 3360(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 3392(CX), Y9 VMOVDQU 3424(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 3456(CX), Y9 VMOVDQU 3488(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 3520(CX), Y9 VMOVDQU 3552(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Store 8 outputs MOVQ (R11), R13 @@ -35858,7 +32889,7 @@ mulAvxTwo_7x8_end: RET // func mulAvxTwo_7x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x8Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -35904,64 +32935,56 @@ mulAvxTwo_7x8Xor_loop: VMOVDQU 32(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) MOVQ 24(R11), R13 VMOVDQU (R13)(R12*1), Y1 VMOVDQU 64(CX), Y9 VMOVDQU 96(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) MOVQ 48(R11), R13 VMOVDQU (R13)(R12*1), Y2 VMOVDQU 128(CX), Y9 VMOVDQU 160(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) MOVQ 72(R11), R13 VMOVDQU (R13)(R12*1), Y3 VMOVDQU 192(CX), Y9 VMOVDQU 224(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) MOVQ 96(R11), R13 VMOVDQU (R13)(R12*1), Y4 VMOVDQU 256(CX), Y9 VMOVDQU 288(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) MOVQ 120(R11), R13 VMOVDQU (R13)(R12*1), Y5 VMOVDQU 320(CX), Y9 VMOVDQU 352(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) MOVQ 144(R11), R13 VMOVDQU (R13)(R12*1), Y6 VMOVDQU 384(CX), Y9 VMOVDQU 416(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) MOVQ 168(R11), R13 VMOVDQU (R13)(R12*1), Y7 VMOVDQU 448(CX), Y9 VMOVDQU 480(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 1 to 8 outputs VMOVDQU (SI), Y11 @@ -35973,50 +32996,42 @@ mulAvxTwo_7x8Xor_loop: VMOVDQU 544(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 576(CX), Y9 VMOVDQU 608(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y9 VMOVDQU 672(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 704(CX), Y9 VMOVDQU 736(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 768(CX), Y9 VMOVDQU 800(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 832(CX), Y9 VMOVDQU 864(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 896(CX), Y9 VMOVDQU 928(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 960(CX), Y9 VMOVDQU 992(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 2 to 8 outputs VMOVDQU (DI), Y11 @@ -36028,50 +33043,42 @@ mulAvxTwo_7x8Xor_loop: VMOVDQU 1056(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1088(CX), Y9 VMOVDQU 1120(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1152(CX), Y9 VMOVDQU 1184(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1216(CX), Y9 VMOVDQU 1248(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y9 VMOVDQU 1312(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1344(CX), Y9 VMOVDQU 1376(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1408(CX), Y9 VMOVDQU 1440(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1472(CX), Y9 VMOVDQU 1504(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 3 to 8 outputs VMOVDQU (R8), Y11 @@ -36083,50 +33090,42 @@ mulAvxTwo_7x8Xor_loop: VMOVDQU 1568(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1600(CX), Y9 VMOVDQU 1632(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1664(CX), Y9 VMOVDQU 1696(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1728(CX), Y9 VMOVDQU 1760(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1792(CX), Y9 VMOVDQU 1824(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1856(CX), Y9 VMOVDQU 1888(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1920(CX), Y9 VMOVDQU 1952(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1984(CX), Y9 VMOVDQU 2016(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 4 to 8 outputs VMOVDQU (R9), Y11 @@ -36138,50 +33137,42 @@ mulAvxTwo_7x8Xor_loop: VMOVDQU 2080(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 2112(CX), Y9 VMOVDQU 2144(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 2176(CX), Y9 VMOVDQU 2208(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 2240(CX), Y9 VMOVDQU 2272(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 2304(CX), Y9 VMOVDQU 2336(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 2368(CX), Y9 VMOVDQU 2400(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 2432(CX), Y9 VMOVDQU 2464(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 2496(CX), Y9 VMOVDQU 2528(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 5 to 8 outputs VMOVDQU (R10), Y11 @@ -36193,50 +33184,42 @@ mulAvxTwo_7x8Xor_loop: VMOVDQU 2592(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 2624(CX), Y9 VMOVDQU 2656(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 2688(CX), Y9 VMOVDQU 2720(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 2752(CX), Y9 VMOVDQU 2784(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 2816(CX), Y9 VMOVDQU 2848(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 2880(CX), Y9 VMOVDQU 2912(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 2944(CX), Y9 VMOVDQU 2976(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 3008(CX), Y9 VMOVDQU 3040(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 6 to 8 outputs VMOVDQU (DX), Y11 @@ -36248,50 +33231,42 @@ mulAvxTwo_7x8Xor_loop: VMOVDQU 3104(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 3136(CX), Y9 VMOVDQU 3168(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 3200(CX), Y9 VMOVDQU 3232(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 3264(CX), Y9 VMOVDQU 3296(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 3328(CX), Y9 VMOVDQU 3360(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 3392(CX), Y9 VMOVDQU 3424(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 3456(CX), Y9 VMOVDQU 3488(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 3520(CX), Y9 VMOVDQU 3552(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Store 8 outputs MOVQ (R11), R13 @@ -36321,7 +33296,7 @@ mulAvxTwo_7x8Xor_end: RET // func mulAvxTwo_7x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x9(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -36417,56 +33392,47 @@ mulAvxTwo_7x9_loop: VMOVDQU 608(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 640(CX), Y10 VMOVDQU 672(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 704(CX), Y10 VMOVDQU 736(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 768(CX), Y10 VMOVDQU 800(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 832(CX), Y10 VMOVDQU 864(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 896(CX), Y10 VMOVDQU 928(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 960(CX), Y10 VMOVDQU 992(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1024(CX), Y10 VMOVDQU 1056(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1088(CX), Y10 VMOVDQU 1120(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 2 to 9 outputs VMOVDQU (DI), Y12 @@ -36478,56 +33444,47 @@ mulAvxTwo_7x9_loop: VMOVDQU 1184(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1216(CX), Y10 VMOVDQU 1248(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1280(CX), Y10 VMOVDQU 1312(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1344(CX), Y10 VMOVDQU 1376(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1408(CX), Y10 VMOVDQU 1440(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 1472(CX), Y10 VMOVDQU 1504(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 1536(CX), Y10 VMOVDQU 1568(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1600(CX), Y10 VMOVDQU 1632(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1664(CX), Y10 VMOVDQU 1696(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 3 to 9 outputs VMOVDQU (R8), Y12 @@ -36539,56 +33496,47 @@ mulAvxTwo_7x9_loop: VMOVDQU 1760(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1792(CX), Y10 VMOVDQU 1824(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1856(CX), Y10 VMOVDQU 1888(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1920(CX), Y10 VMOVDQU 1952(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1984(CX), Y10 VMOVDQU 2016(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2048(CX), Y10 VMOVDQU 2080(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2112(CX), Y10 VMOVDQU 2144(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2176(CX), Y10 VMOVDQU 2208(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2240(CX), Y10 VMOVDQU 2272(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 4 to 9 outputs VMOVDQU (R9), Y12 @@ -36600,56 +33548,47 @@ mulAvxTwo_7x9_loop: VMOVDQU 2336(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 2368(CX), Y10 VMOVDQU 2400(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 2432(CX), Y10 VMOVDQU 2464(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 2496(CX), Y10 VMOVDQU 2528(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 2560(CX), Y10 VMOVDQU 2592(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2624(CX), Y10 VMOVDQU 2656(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2688(CX), Y10 VMOVDQU 2720(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2752(CX), Y10 VMOVDQU 2784(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2816(CX), Y10 VMOVDQU 2848(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 5 to 9 outputs VMOVDQU (R10), Y12 @@ -36661,56 +33600,47 @@ mulAvxTwo_7x9_loop: VMOVDQU 2912(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 2944(CX), Y10 VMOVDQU 2976(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 3008(CX), Y10 VMOVDQU 3040(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 3072(CX), Y10 VMOVDQU 3104(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 3136(CX), Y10 VMOVDQU 3168(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 3200(CX), Y10 VMOVDQU 3232(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 3264(CX), Y10 VMOVDQU 3296(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 3328(CX), Y10 VMOVDQU 3360(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 3392(CX), Y10 VMOVDQU 3424(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 6 to 9 outputs VMOVDQU (DX), Y12 @@ -36722,56 +33652,47 @@ mulAvxTwo_7x9_loop: VMOVDQU 3488(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 3520(CX), Y10 VMOVDQU 3552(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 3584(CX), Y10 VMOVDQU 3616(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 3648(CX), Y10 VMOVDQU 3680(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 3712(CX), Y10 VMOVDQU 3744(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 3776(CX), Y10 VMOVDQU 3808(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 3840(CX), Y10 VMOVDQU 3872(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 3904(CX), Y10 VMOVDQU 3936(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 3968(CX), Y10 VMOVDQU 4000(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Store 9 outputs MOVQ (R11), R13 @@ -36803,7 +33724,7 @@ mulAvxTwo_7x9_end: RET // func mulAvxTwo_7x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x9Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -36849,72 +33770,63 @@ mulAvxTwo_7x9Xor_loop: VMOVDQU 32(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) MOVQ 24(R11), R13 VMOVDQU (R13)(R12*1), Y1 VMOVDQU 64(CX), Y10 VMOVDQU 96(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) MOVQ 48(R11), R13 VMOVDQU (R13)(R12*1), Y2 VMOVDQU 128(CX), Y10 VMOVDQU 160(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) MOVQ 72(R11), R13 VMOVDQU (R13)(R12*1), Y3 VMOVDQU 192(CX), Y10 VMOVDQU 224(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) MOVQ 96(R11), R13 VMOVDQU (R13)(R12*1), Y4 VMOVDQU 256(CX), Y10 VMOVDQU 288(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) MOVQ 120(R11), R13 VMOVDQU (R13)(R12*1), Y5 VMOVDQU 320(CX), Y10 VMOVDQU 352(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) MOVQ 144(R11), R13 VMOVDQU (R13)(R12*1), Y6 VMOVDQU 384(CX), Y10 VMOVDQU 416(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) MOVQ 168(R11), R13 VMOVDQU (R13)(R12*1), Y7 VMOVDQU 448(CX), Y10 VMOVDQU 480(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) MOVQ 192(R11), R13 VMOVDQU (R13)(R12*1), Y8 VMOVDQU 512(CX), Y10 VMOVDQU 544(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 1 to 9 outputs VMOVDQU (SI), Y12 @@ -36926,56 +33838,47 @@ mulAvxTwo_7x9Xor_loop: VMOVDQU 608(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 640(CX), Y10 VMOVDQU 672(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 704(CX), Y10 VMOVDQU 736(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 768(CX), Y10 VMOVDQU 800(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 832(CX), Y10 VMOVDQU 864(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 896(CX), Y10 VMOVDQU 928(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 960(CX), Y10 VMOVDQU 992(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1024(CX), Y10 VMOVDQU 1056(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1088(CX), Y10 VMOVDQU 1120(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 2 to 9 outputs VMOVDQU (DI), Y12 @@ -36987,56 +33890,47 @@ mulAvxTwo_7x9Xor_loop: VMOVDQU 1184(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1216(CX), Y10 VMOVDQU 1248(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1280(CX), Y10 VMOVDQU 1312(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1344(CX), Y10 VMOVDQU 1376(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1408(CX), Y10 VMOVDQU 1440(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 1472(CX), Y10 VMOVDQU 1504(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 1536(CX), Y10 VMOVDQU 1568(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1600(CX), Y10 VMOVDQU 1632(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1664(CX), Y10 VMOVDQU 1696(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 3 to 9 outputs VMOVDQU (R8), Y12 @@ -37048,56 +33942,47 @@ mulAvxTwo_7x9Xor_loop: VMOVDQU 1760(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1792(CX), Y10 VMOVDQU 1824(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1856(CX), Y10 VMOVDQU 1888(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1920(CX), Y10 VMOVDQU 1952(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1984(CX), Y10 VMOVDQU 2016(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2048(CX), Y10 VMOVDQU 2080(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2112(CX), Y10 VMOVDQU 2144(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2176(CX), Y10 VMOVDQU 2208(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2240(CX), Y10 VMOVDQU 2272(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 4 to 9 outputs VMOVDQU (R9), Y12 @@ -37109,56 +33994,47 @@ mulAvxTwo_7x9Xor_loop: VMOVDQU 2336(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 2368(CX), Y10 VMOVDQU 2400(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 2432(CX), Y10 VMOVDQU 2464(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 2496(CX), Y10 VMOVDQU 2528(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 2560(CX), Y10 VMOVDQU 2592(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2624(CX), Y10 VMOVDQU 2656(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2688(CX), Y10 VMOVDQU 2720(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2752(CX), Y10 VMOVDQU 2784(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2816(CX), Y10 VMOVDQU 2848(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 5 to 9 outputs VMOVDQU (R10), Y12 @@ -37170,56 +34046,47 @@ mulAvxTwo_7x9Xor_loop: VMOVDQU 2912(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 2944(CX), Y10 VMOVDQU 2976(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 3008(CX), Y10 VMOVDQU 3040(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 3072(CX), Y10 VMOVDQU 3104(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 3136(CX), Y10 VMOVDQU 3168(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 3200(CX), Y10 VMOVDQU 3232(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 3264(CX), Y10 VMOVDQU 3296(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 3328(CX), Y10 VMOVDQU 3360(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 3392(CX), Y10 VMOVDQU 3424(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 6 to 9 outputs VMOVDQU (DX), Y12 @@ -37231,56 +34098,47 @@ mulAvxTwo_7x9Xor_loop: VMOVDQU 3488(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 3520(CX), Y10 VMOVDQU 3552(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 3584(CX), Y10 VMOVDQU 3616(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 3648(CX), Y10 VMOVDQU 3680(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 3712(CX), Y10 VMOVDQU 3744(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 3776(CX), Y10 VMOVDQU 3808(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 3840(CX), Y10 VMOVDQU 3872(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 3904(CX), Y10 VMOVDQU 3936(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 3968(CX), Y10 VMOVDQU 4000(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Store 9 outputs MOVQ (R11), R13 @@ -37312,7 +34170,7 @@ mulAvxTwo_7x9Xor_end: RET // func mulAvxTwo_7x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x10(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -37413,62 +34271,52 @@ mulAvxTwo_7x10_loop: VMOVDQU 672(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 704(CX), Y11 VMOVDQU 736(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 768(CX), Y11 VMOVDQU 800(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 832(CX), Y11 VMOVDQU 864(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 896(CX), Y11 VMOVDQU 928(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 960(CX), Y11 VMOVDQU 992(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1024(CX), Y11 VMOVDQU 1056(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1088(CX), Y11 VMOVDQU 1120(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1152(CX), Y11 VMOVDQU 1184(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1216(CX), Y11 VMOVDQU 1248(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 2 to 10 outputs VMOVDQU (DI), Y13 @@ -37480,62 +34328,52 @@ mulAvxTwo_7x10_loop: VMOVDQU 1312(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1344(CX), Y11 VMOVDQU 1376(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 1408(CX), Y11 VMOVDQU 1440(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 1472(CX), Y11 VMOVDQU 1504(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 1536(CX), Y11 VMOVDQU 1568(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 1600(CX), Y11 VMOVDQU 1632(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1664(CX), Y11 VMOVDQU 1696(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1728(CX), Y11 VMOVDQU 1760(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1792(CX), Y11 VMOVDQU 1824(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1856(CX), Y11 VMOVDQU 1888(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 3 to 10 outputs VMOVDQU (R8), Y13 @@ -37547,62 +34385,52 @@ mulAvxTwo_7x10_loop: VMOVDQU 1952(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1984(CX), Y11 VMOVDQU 2016(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2048(CX), Y11 VMOVDQU 2080(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2112(CX), Y11 VMOVDQU 2144(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2176(CX), Y11 VMOVDQU 2208(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2240(CX), Y11 VMOVDQU 2272(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2304(CX), Y11 VMOVDQU 2336(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 2368(CX), Y11 VMOVDQU 2400(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 2432(CX), Y11 VMOVDQU 2464(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 2496(CX), Y11 VMOVDQU 2528(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 4 to 10 outputs VMOVDQU (R9), Y13 @@ -37614,62 +34442,52 @@ mulAvxTwo_7x10_loop: VMOVDQU 2592(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 2624(CX), Y11 VMOVDQU 2656(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2688(CX), Y11 VMOVDQU 2720(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2752(CX), Y11 VMOVDQU 2784(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2816(CX), Y11 VMOVDQU 2848(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2880(CX), Y11 VMOVDQU 2912(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2944(CX), Y11 VMOVDQU 2976(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 3008(CX), Y11 VMOVDQU 3040(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 3072(CX), Y11 VMOVDQU 3104(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 3136(CX), Y11 VMOVDQU 3168(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 5 to 10 outputs VMOVDQU (R10), Y13 @@ -37681,62 +34499,52 @@ mulAvxTwo_7x10_loop: VMOVDQU 3232(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 3264(CX), Y11 VMOVDQU 3296(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 3328(CX), Y11 VMOVDQU 3360(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 3392(CX), Y11 VMOVDQU 3424(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 3456(CX), Y11 VMOVDQU 3488(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 3520(CX), Y11 VMOVDQU 3552(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 3584(CX), Y11 VMOVDQU 3616(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 3648(CX), Y11 VMOVDQU 3680(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 3712(CX), Y11 VMOVDQU 3744(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 3776(CX), Y11 VMOVDQU 3808(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 6 to 10 outputs VMOVDQU (DX), Y13 @@ -37748,62 +34556,52 @@ mulAvxTwo_7x10_loop: VMOVDQU 3872(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 3904(CX), Y11 VMOVDQU 3936(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 3968(CX), Y11 VMOVDQU 4000(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 4032(CX), Y11 VMOVDQU 4064(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 4096(CX), Y11 VMOVDQU 4128(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 4160(CX), Y11 VMOVDQU 4192(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 4224(CX), Y11 VMOVDQU 4256(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 4288(CX), Y11 VMOVDQU 4320(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 4352(CX), Y11 VMOVDQU 4384(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 4416(CX), Y11 VMOVDQU 4448(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Store 10 outputs MOVQ (R11), R13 @@ -37837,7 +34635,7 @@ mulAvxTwo_7x10_end: RET // func mulAvxTwo_7x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_7x10Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -37883,80 +34681,70 @@ mulAvxTwo_7x10Xor_loop: VMOVDQU 32(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) MOVQ 24(R11), R13 VMOVDQU (R13)(R12*1), Y1 VMOVDQU 64(CX), Y11 VMOVDQU 96(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) MOVQ 48(R11), R13 VMOVDQU (R13)(R12*1), Y2 VMOVDQU 128(CX), Y11 VMOVDQU 160(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) MOVQ 72(R11), R13 VMOVDQU (R13)(R12*1), Y3 VMOVDQU 192(CX), Y11 VMOVDQU 224(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) MOVQ 96(R11), R13 VMOVDQU (R13)(R12*1), Y4 VMOVDQU 256(CX), Y11 VMOVDQU 288(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) MOVQ 120(R11), R13 VMOVDQU (R13)(R12*1), Y5 VMOVDQU 320(CX), Y11 VMOVDQU 352(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) MOVQ 144(R11), R13 VMOVDQU (R13)(R12*1), Y6 VMOVDQU 384(CX), Y11 VMOVDQU 416(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) MOVQ 168(R11), R13 VMOVDQU (R13)(R12*1), Y7 VMOVDQU 448(CX), Y11 VMOVDQU 480(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) MOVQ 192(R11), R13 VMOVDQU (R13)(R12*1), Y8 VMOVDQU 512(CX), Y11 VMOVDQU 544(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) MOVQ 216(R11), R13 VMOVDQU (R13)(R12*1), Y9 VMOVDQU 576(CX), Y11 VMOVDQU 608(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 1 to 10 outputs VMOVDQU (SI), Y13 @@ -37968,62 +34756,52 @@ mulAvxTwo_7x10Xor_loop: VMOVDQU 672(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 704(CX), Y11 VMOVDQU 736(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 768(CX), Y11 VMOVDQU 800(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 832(CX), Y11 VMOVDQU 864(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 896(CX), Y11 VMOVDQU 928(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 960(CX), Y11 VMOVDQU 992(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1024(CX), Y11 VMOVDQU 1056(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1088(CX), Y11 VMOVDQU 1120(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1152(CX), Y11 VMOVDQU 1184(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1216(CX), Y11 VMOVDQU 1248(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 2 to 10 outputs VMOVDQU (DI), Y13 @@ -38035,62 +34813,52 @@ mulAvxTwo_7x10Xor_loop: VMOVDQU 1312(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1344(CX), Y11 VMOVDQU 1376(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 1408(CX), Y11 VMOVDQU 1440(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 1472(CX), Y11 VMOVDQU 1504(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 1536(CX), Y11 VMOVDQU 1568(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 1600(CX), Y11 VMOVDQU 1632(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1664(CX), Y11 VMOVDQU 1696(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1728(CX), Y11 VMOVDQU 1760(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1792(CX), Y11 VMOVDQU 1824(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1856(CX), Y11 VMOVDQU 1888(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 3 to 10 outputs VMOVDQU (R8), Y13 @@ -38102,62 +34870,52 @@ mulAvxTwo_7x10Xor_loop: VMOVDQU 1952(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1984(CX), Y11 VMOVDQU 2016(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2048(CX), Y11 VMOVDQU 2080(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2112(CX), Y11 VMOVDQU 2144(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2176(CX), Y11 VMOVDQU 2208(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2240(CX), Y11 VMOVDQU 2272(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2304(CX), Y11 VMOVDQU 2336(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 2368(CX), Y11 VMOVDQU 2400(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 2432(CX), Y11 VMOVDQU 2464(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 2496(CX), Y11 VMOVDQU 2528(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 4 to 10 outputs VMOVDQU (R9), Y13 @@ -38169,62 +34927,52 @@ mulAvxTwo_7x10Xor_loop: VMOVDQU 2592(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 2624(CX), Y11 VMOVDQU 2656(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2688(CX), Y11 VMOVDQU 2720(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2752(CX), Y11 VMOVDQU 2784(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2816(CX), Y11 VMOVDQU 2848(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2880(CX), Y11 VMOVDQU 2912(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2944(CX), Y11 VMOVDQU 2976(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 3008(CX), Y11 VMOVDQU 3040(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 3072(CX), Y11 VMOVDQU 3104(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 3136(CX), Y11 VMOVDQU 3168(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 5 to 10 outputs VMOVDQU (R10), Y13 @@ -38236,62 +34984,52 @@ mulAvxTwo_7x10Xor_loop: VMOVDQU 3232(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 3264(CX), Y11 VMOVDQU 3296(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 3328(CX), Y11 VMOVDQU 3360(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 3392(CX), Y11 VMOVDQU 3424(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 3456(CX), Y11 VMOVDQU 3488(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 3520(CX), Y11 VMOVDQU 3552(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 3584(CX), Y11 VMOVDQU 3616(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 3648(CX), Y11 VMOVDQU 3680(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 3712(CX), Y11 VMOVDQU 3744(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 3776(CX), Y11 VMOVDQU 3808(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 6 to 10 outputs VMOVDQU (DX), Y13 @@ -38303,62 +35041,52 @@ mulAvxTwo_7x10Xor_loop: VMOVDQU 3872(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 3904(CX), Y11 VMOVDQU 3936(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 3968(CX), Y11 VMOVDQU 4000(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 4032(CX), Y11 VMOVDQU 4064(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 4096(CX), Y11 VMOVDQU 4128(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 4160(CX), Y11 VMOVDQU 4192(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 4224(CX), Y11 VMOVDQU 4256(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 4288(CX), Y11 VMOVDQU 4320(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 4352(CX), Y11 VMOVDQU 4384(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 4416(CX), Y11 VMOVDQU 4448(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Store 10 outputs MOVQ (R11), R13 @@ -38392,7 +35120,7 @@ mulAvxTwo_7x10Xor_end: RET // func mulAvxTwo_8x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x1(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -38454,8 +35182,7 @@ mulAvxTwo_8x1_loop: VMOVDQU 96(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 2 to 1 outputs VMOVDQU (DI), Y4 @@ -38467,8 +35194,7 @@ mulAvxTwo_8x1_loop: VMOVDQU 160(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 3 to 1 outputs VMOVDQU (R8), Y4 @@ -38480,8 +35206,7 @@ mulAvxTwo_8x1_loop: VMOVDQU 224(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 4 to 1 outputs VMOVDQU (R9), Y4 @@ -38493,8 +35218,7 @@ mulAvxTwo_8x1_loop: VMOVDQU 288(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 5 to 1 outputs VMOVDQU (R10), Y4 @@ -38506,8 +35230,7 @@ mulAvxTwo_8x1_loop: VMOVDQU 352(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 6 to 1 outputs VMOVDQU (R11), Y4 @@ -38519,8 +35242,7 @@ mulAvxTwo_8x1_loop: VMOVDQU 416(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 7 to 1 outputs VMOVDQU (DX), Y4 @@ -38532,8 +35254,7 @@ mulAvxTwo_8x1_loop: VMOVDQU 480(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Store 1 outputs VMOVDQU Y0, (R12) @@ -38548,7 +35269,7 @@ mulAvxTwo_8x1_end: RET // func mulAvxTwo_8x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x1_64(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -38624,10 +35345,8 @@ mulAvxTwo_8x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 2 to 1 outputs VMOVDQU (DI), Y6 @@ -38645,10 +35364,8 @@ mulAvxTwo_8x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 3 to 1 outputs VMOVDQU (R8), Y6 @@ -38666,10 +35383,8 @@ mulAvxTwo_8x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 4 to 1 outputs VMOVDQU (R9), Y6 @@ -38687,10 +35402,8 @@ mulAvxTwo_8x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 5 to 1 outputs VMOVDQU (R10), Y6 @@ -38708,10 +35421,8 @@ mulAvxTwo_8x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 6 to 1 outputs VMOVDQU (R11), Y6 @@ -38729,10 +35440,8 @@ mulAvxTwo_8x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 7 to 1 outputs VMOVDQU (DX), Y6 @@ -38750,10 +35459,8 @@ mulAvxTwo_8x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Store 1 outputs VMOVDQU Y0, (R12) @@ -38769,7 +35476,7 @@ mulAvxTwo_8x1_64_end: RET // func mulAvxTwo_8x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x1Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -38820,8 +35527,7 @@ mulAvxTwo_8x1Xor_loop: VMOVDQU 32(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 1 to 1 outputs VMOVDQU (SI), Y4 @@ -38833,8 +35539,7 @@ mulAvxTwo_8x1Xor_loop: VMOVDQU 96(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 2 to 1 outputs VMOVDQU (DI), Y4 @@ -38846,8 +35551,7 @@ mulAvxTwo_8x1Xor_loop: VMOVDQU 160(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 3 to 1 outputs VMOVDQU (R8), Y4 @@ -38859,8 +35563,7 @@ mulAvxTwo_8x1Xor_loop: VMOVDQU 224(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 4 to 1 outputs VMOVDQU (R9), Y4 @@ -38872,8 +35575,7 @@ mulAvxTwo_8x1Xor_loop: VMOVDQU 288(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 5 to 1 outputs VMOVDQU (R10), Y4 @@ -38885,8 +35587,7 @@ mulAvxTwo_8x1Xor_loop: VMOVDQU 352(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 6 to 1 outputs VMOVDQU (R11), Y4 @@ -38898,8 +35599,7 @@ mulAvxTwo_8x1Xor_loop: VMOVDQU 416(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 7 to 1 outputs VMOVDQU (DX), Y4 @@ -38911,8 +35611,7 @@ mulAvxTwo_8x1Xor_loop: VMOVDQU 480(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Store 1 outputs VMOVDQU Y0, (R12) @@ -38927,7 +35626,7 @@ mulAvxTwo_8x1Xor_end: RET // func mulAvxTwo_8x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x1_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -38988,10 +35687,8 @@ mulAvxTwo_8x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 1 to 1 outputs VMOVDQU (SI), Y6 @@ -39009,10 +35706,8 @@ mulAvxTwo_8x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 2 to 1 outputs VMOVDQU (DI), Y6 @@ -39030,10 +35725,8 @@ mulAvxTwo_8x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 3 to 1 outputs VMOVDQU (R8), Y6 @@ -39051,10 +35744,8 @@ mulAvxTwo_8x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 4 to 1 outputs VMOVDQU (R9), Y6 @@ -39072,10 +35763,8 @@ mulAvxTwo_8x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 5 to 1 outputs VMOVDQU (R10), Y6 @@ -39093,10 +35782,8 @@ mulAvxTwo_8x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 6 to 1 outputs VMOVDQU (R11), Y6 @@ -39114,10 +35801,8 @@ mulAvxTwo_8x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 7 to 1 outputs VMOVDQU (DX), Y6 @@ -39135,10 +35820,8 @@ mulAvxTwo_8x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Store 1 outputs VMOVDQU Y0, (R12) @@ -39154,7 +35837,7 @@ mulAvxTwo_8x1_64Xor_end: RET // func mulAvxTwo_8x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x2(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -39223,14 +35906,12 @@ mulAvxTwo_8x2_loop: VMOVDQU 160(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 192(CX), Y3 VMOVDQU 224(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 2 to 2 outputs VMOVDQU (DI), Y5 @@ -39242,14 +35923,12 @@ mulAvxTwo_8x2_loop: VMOVDQU 288(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 320(CX), Y3 VMOVDQU 352(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 3 to 2 outputs VMOVDQU (R8), Y5 @@ -39261,14 +35940,12 @@ mulAvxTwo_8x2_loop: VMOVDQU 416(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 448(CX), Y3 VMOVDQU 480(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 4 to 2 outputs VMOVDQU (R9), Y5 @@ -39280,14 +35957,12 @@ mulAvxTwo_8x2_loop: VMOVDQU 544(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 576(CX), Y3 VMOVDQU 608(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 5 to 2 outputs VMOVDQU (R10), Y5 @@ -39299,14 +35974,12 @@ mulAvxTwo_8x2_loop: VMOVDQU 672(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 704(CX), Y3 VMOVDQU 736(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 6 to 2 outputs VMOVDQU (R11), Y5 @@ -39318,14 +35991,12 @@ mulAvxTwo_8x2_loop: VMOVDQU 800(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 832(CX), Y3 VMOVDQU 864(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 7 to 2 outputs VMOVDQU (DX), Y5 @@ -39337,14 +36008,12 @@ mulAvxTwo_8x2_loop: VMOVDQU 928(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 960(CX), Y3 VMOVDQU 992(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Store 2 outputs VMOVDQU Y0, (R13) @@ -39361,7 +36030,7 @@ mulAvxTwo_8x2_end: RET // func mulAvxTwo_8x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x2_64(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -39447,20 +36116,16 @@ mulAvxTwo_8x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 2 to 2 outputs VMOVDQU (DI), Y9 @@ -39478,20 +36143,16 @@ mulAvxTwo_8x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 3 to 2 outputs VMOVDQU (R8), Y9 @@ -39509,20 +36170,16 @@ mulAvxTwo_8x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 4 to 2 outputs VMOVDQU (R9), Y9 @@ -39540,20 +36197,16 @@ mulAvxTwo_8x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 5 to 2 outputs VMOVDQU (R10), Y9 @@ -39571,20 +36224,16 @@ mulAvxTwo_8x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 6 to 2 outputs VMOVDQU (R11), Y9 @@ -39602,20 +36251,16 @@ mulAvxTwo_8x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 832(CX), Y5 VMOVDQU 864(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 7 to 2 outputs VMOVDQU (DX), Y9 @@ -39633,20 +36278,16 @@ mulAvxTwo_8x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 960(CX), Y5 VMOVDQU 992(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Store 2 outputs VMOVDQU Y0, (R13) @@ -39665,7 +36306,7 @@ mulAvxTwo_8x2_64_end: RET // func mulAvxTwo_8x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x2Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -39718,15 +36359,13 @@ mulAvxTwo_8x2Xor_loop: VMOVDQU 32(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU (R12), Y1 VMOVDQU 64(CX), Y3 VMOVDQU 96(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 1 to 2 outputs VMOVDQU (SI), Y5 @@ -39738,14 +36377,12 @@ mulAvxTwo_8x2Xor_loop: VMOVDQU 160(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 192(CX), Y3 VMOVDQU 224(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 2 to 2 outputs VMOVDQU (DI), Y5 @@ -39757,14 +36394,12 @@ mulAvxTwo_8x2Xor_loop: VMOVDQU 288(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 320(CX), Y3 VMOVDQU 352(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 3 to 2 outputs VMOVDQU (R8), Y5 @@ -39776,14 +36411,12 @@ mulAvxTwo_8x2Xor_loop: VMOVDQU 416(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 448(CX), Y3 VMOVDQU 480(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 4 to 2 outputs VMOVDQU (R9), Y5 @@ -39795,14 +36428,12 @@ mulAvxTwo_8x2Xor_loop: VMOVDQU 544(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 576(CX), Y3 VMOVDQU 608(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 5 to 2 outputs VMOVDQU (R10), Y5 @@ -39814,14 +36445,12 @@ mulAvxTwo_8x2Xor_loop: VMOVDQU 672(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 704(CX), Y3 VMOVDQU 736(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 6 to 2 outputs VMOVDQU (R11), Y5 @@ -39833,14 +36462,12 @@ mulAvxTwo_8x2Xor_loop: VMOVDQU 800(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 832(CX), Y3 VMOVDQU 864(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 7 to 2 outputs VMOVDQU (DX), Y5 @@ -39852,14 +36479,12 @@ mulAvxTwo_8x2Xor_loop: VMOVDQU 928(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 960(CX), Y3 VMOVDQU 992(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Store 2 outputs VMOVDQU Y0, (R13) @@ -39876,7 +36501,7 @@ mulAvxTwo_8x2Xor_end: RET // func mulAvxTwo_8x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x2_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -39941,20 +36566,16 @@ mulAvxTwo_8x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 64(CX), Y5 VMOVDQU 96(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 1 to 2 outputs VMOVDQU (SI), Y9 @@ -39972,20 +36593,16 @@ mulAvxTwo_8x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 2 to 2 outputs VMOVDQU (DI), Y9 @@ -40003,20 +36620,16 @@ mulAvxTwo_8x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 3 to 2 outputs VMOVDQU (R8), Y9 @@ -40034,20 +36647,16 @@ mulAvxTwo_8x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 4 to 2 outputs VMOVDQU (R9), Y9 @@ -40065,20 +36674,16 @@ mulAvxTwo_8x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 5 to 2 outputs VMOVDQU (R10), Y9 @@ -40096,20 +36701,16 @@ mulAvxTwo_8x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 6 to 2 outputs VMOVDQU (R11), Y9 @@ -40127,20 +36728,16 @@ mulAvxTwo_8x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 832(CX), Y5 VMOVDQU 864(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 7 to 2 outputs VMOVDQU (DX), Y9 @@ -40158,20 +36755,16 @@ mulAvxTwo_8x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 960(CX), Y5 VMOVDQU 992(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Store 2 outputs VMOVDQU Y0, (R13) @@ -40190,7 +36783,7 @@ mulAvxTwo_8x2_64Xor_end: RET // func mulAvxTwo_8x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x3(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -40266,20 +36859,17 @@ mulAvxTwo_8x3_loop: VMOVDQU 224(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 256(CX), Y4 VMOVDQU 288(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 320(CX), Y4 VMOVDQU 352(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 2 to 3 outputs VMOVDQU (DI), Y6 @@ -40291,20 +36881,17 @@ mulAvxTwo_8x3_loop: VMOVDQU 416(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 448(CX), Y4 VMOVDQU 480(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 512(CX), Y4 VMOVDQU 544(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 3 to 3 outputs VMOVDQU (R8), Y6 @@ -40316,20 +36903,17 @@ mulAvxTwo_8x3_loop: VMOVDQU 608(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 640(CX), Y4 VMOVDQU 672(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 704(CX), Y4 VMOVDQU 736(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 4 to 3 outputs VMOVDQU (R9), Y6 @@ -40341,20 +36925,17 @@ mulAvxTwo_8x3_loop: VMOVDQU 800(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 832(CX), Y4 VMOVDQU 864(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 896(CX), Y4 VMOVDQU 928(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 5 to 3 outputs VMOVDQU (R10), Y6 @@ -40366,20 +36947,17 @@ mulAvxTwo_8x3_loop: VMOVDQU 992(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1024(CX), Y4 VMOVDQU 1056(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1088(CX), Y4 VMOVDQU 1120(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 6 to 3 outputs VMOVDQU (R11), Y6 @@ -40391,20 +36969,17 @@ mulAvxTwo_8x3_loop: VMOVDQU 1184(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1216(CX), Y4 VMOVDQU 1248(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1280(CX), Y4 VMOVDQU 1312(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 7 to 3 outputs VMOVDQU (DX), Y6 @@ -40416,20 +36991,17 @@ mulAvxTwo_8x3_loop: VMOVDQU 1376(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1408(CX), Y4 VMOVDQU 1440(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1472(CX), Y4 VMOVDQU 1504(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Store 3 outputs VMOVDQU Y0, (R13) @@ -40448,7 +37020,7 @@ mulAvxTwo_8x3_end: RET // func mulAvxTwo_8x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x3_64(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -40544,30 +37116,24 @@ mulAvxTwo_8x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 2 to 3 outputs VMOVDQU (DI), Y11 @@ -40585,30 +37151,24 @@ mulAvxTwo_8x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 3 to 3 outputs VMOVDQU (R8), Y11 @@ -40626,30 +37186,24 @@ mulAvxTwo_8x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 4 to 3 outputs VMOVDQU (R9), Y11 @@ -40667,30 +37221,24 @@ mulAvxTwo_8x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 5 to 3 outputs VMOVDQU (R10), Y11 @@ -40708,30 +37256,24 @@ mulAvxTwo_8x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 6 to 3 outputs VMOVDQU (R11), Y11 @@ -40749,30 +37291,24 @@ mulAvxTwo_8x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1216(CX), Y7 VMOVDQU 1248(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y7 VMOVDQU 1312(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 7 to 3 outputs VMOVDQU (DX), Y11 @@ -40790,30 +37326,24 @@ mulAvxTwo_8x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1408(CX), Y7 VMOVDQU 1440(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1472(CX), Y7 VMOVDQU 1504(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Store 3 outputs VMOVDQU Y0, (R13) @@ -40835,7 +37365,7 @@ mulAvxTwo_8x3_64_end: RET // func mulAvxTwo_8x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x3Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -40890,22 +37420,19 @@ mulAvxTwo_8x3Xor_loop: VMOVDQU 32(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU (R14), Y1 VMOVDQU 64(CX), Y4 VMOVDQU 96(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU (R12), Y2 VMOVDQU 128(CX), Y4 VMOVDQU 160(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 1 to 3 outputs VMOVDQU (SI), Y6 @@ -40917,20 +37444,17 @@ mulAvxTwo_8x3Xor_loop: VMOVDQU 224(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 256(CX), Y4 VMOVDQU 288(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 320(CX), Y4 VMOVDQU 352(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 2 to 3 outputs VMOVDQU (DI), Y6 @@ -40942,20 +37466,17 @@ mulAvxTwo_8x3Xor_loop: VMOVDQU 416(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 448(CX), Y4 VMOVDQU 480(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 512(CX), Y4 VMOVDQU 544(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 3 to 3 outputs VMOVDQU (R8), Y6 @@ -40967,20 +37488,17 @@ mulAvxTwo_8x3Xor_loop: VMOVDQU 608(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 640(CX), Y4 VMOVDQU 672(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 704(CX), Y4 VMOVDQU 736(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 4 to 3 outputs VMOVDQU (R9), Y6 @@ -40992,20 +37510,17 @@ mulAvxTwo_8x3Xor_loop: VMOVDQU 800(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 832(CX), Y4 VMOVDQU 864(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 896(CX), Y4 VMOVDQU 928(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 5 to 3 outputs VMOVDQU (R10), Y6 @@ -41017,20 +37532,17 @@ mulAvxTwo_8x3Xor_loop: VMOVDQU 992(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1024(CX), Y4 VMOVDQU 1056(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1088(CX), Y4 VMOVDQU 1120(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 6 to 3 outputs VMOVDQU (R11), Y6 @@ -41042,20 +37554,17 @@ mulAvxTwo_8x3Xor_loop: VMOVDQU 1184(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1216(CX), Y4 VMOVDQU 1248(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1280(CX), Y4 VMOVDQU 1312(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 7 to 3 outputs VMOVDQU (DX), Y6 @@ -41067,20 +37576,17 @@ mulAvxTwo_8x3Xor_loop: VMOVDQU 1376(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1408(CX), Y4 VMOVDQU 1440(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1472(CX), Y4 VMOVDQU 1504(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Store 3 outputs VMOVDQU Y0, (R13) @@ -41099,7 +37605,7 @@ mulAvxTwo_8x3Xor_end: RET // func mulAvxTwo_8x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x3_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -41168,30 +37674,24 @@ mulAvxTwo_8x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 64(CX), Y7 VMOVDQU 96(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 128(CX), Y7 VMOVDQU 160(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 1 to 3 outputs VMOVDQU (SI), Y11 @@ -41209,30 +37709,24 @@ mulAvxTwo_8x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 2 to 3 outputs VMOVDQU (DI), Y11 @@ -41250,30 +37744,24 @@ mulAvxTwo_8x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 3 to 3 outputs VMOVDQU (R8), Y11 @@ -41291,30 +37779,24 @@ mulAvxTwo_8x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 4 to 3 outputs VMOVDQU (R9), Y11 @@ -41332,30 +37814,24 @@ mulAvxTwo_8x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 5 to 3 outputs VMOVDQU (R10), Y11 @@ -41373,30 +37849,24 @@ mulAvxTwo_8x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 6 to 3 outputs VMOVDQU (R11), Y11 @@ -41414,30 +37884,24 @@ mulAvxTwo_8x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1216(CX), Y7 VMOVDQU 1248(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y7 VMOVDQU 1312(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 7 to 3 outputs VMOVDQU (DX), Y11 @@ -41455,30 +37919,24 @@ mulAvxTwo_8x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1408(CX), Y7 VMOVDQU 1440(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1472(CX), Y7 VMOVDQU 1504(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Store 3 outputs VMOVDQU Y0, (R13) @@ -41500,7 +37958,7 @@ mulAvxTwo_8x3_64Xor_end: RET // func mulAvxTwo_8x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x4(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -41583,26 +38041,22 @@ mulAvxTwo_8x4_loop: VMOVDQU 288(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 384(CX), Y5 VMOVDQU 416(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 2 to 4 outputs VMOVDQU (DI), Y7 @@ -41614,26 +38068,22 @@ mulAvxTwo_8x4_loop: VMOVDQU 544(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 640(CX), Y5 VMOVDQU 672(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 3 to 4 outputs VMOVDQU (R8), Y7 @@ -41645,26 +38095,22 @@ mulAvxTwo_8x4_loop: VMOVDQU 800(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 832(CX), Y5 VMOVDQU 864(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 896(CX), Y5 VMOVDQU 928(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 960(CX), Y5 VMOVDQU 992(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 4 to 4 outputs VMOVDQU (R9), Y7 @@ -41676,26 +38122,22 @@ mulAvxTwo_8x4_loop: VMOVDQU 1056(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1088(CX), Y5 VMOVDQU 1120(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1152(CX), Y5 VMOVDQU 1184(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1216(CX), Y5 VMOVDQU 1248(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 5 to 4 outputs VMOVDQU (R10), Y7 @@ -41707,26 +38149,22 @@ mulAvxTwo_8x4_loop: VMOVDQU 1312(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1344(CX), Y5 VMOVDQU 1376(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1408(CX), Y5 VMOVDQU 1440(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1472(CX), Y5 VMOVDQU 1504(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 6 to 4 outputs VMOVDQU (R11), Y7 @@ -41738,26 +38176,22 @@ mulAvxTwo_8x4_loop: VMOVDQU 1568(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1600(CX), Y5 VMOVDQU 1632(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1664(CX), Y5 VMOVDQU 1696(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1728(CX), Y5 VMOVDQU 1760(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 7 to 4 outputs VMOVDQU (DX), Y7 @@ -41769,26 +38203,22 @@ mulAvxTwo_8x4_loop: VMOVDQU 1824(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1856(CX), Y5 VMOVDQU 1888(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1920(CX), Y5 VMOVDQU 1952(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1984(CX), Y5 VMOVDQU 2016(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Store 4 outputs VMOVDQU Y0, (R13) @@ -41809,7 +38239,7 @@ mulAvxTwo_8x4_end: RET // func mulAvxTwo_8x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x4Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -41866,29 +38296,25 @@ mulAvxTwo_8x4Xor_loop: VMOVDQU 32(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU (R14), Y1 VMOVDQU 64(CX), Y5 VMOVDQU 96(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU (R15), Y2 VMOVDQU 128(CX), Y5 VMOVDQU 160(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU (R12), Y3 VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 1 to 4 outputs VMOVDQU (SI), Y7 @@ -41900,26 +38326,22 @@ mulAvxTwo_8x4Xor_loop: VMOVDQU 288(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 384(CX), Y5 VMOVDQU 416(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 2 to 4 outputs VMOVDQU (DI), Y7 @@ -41931,26 +38353,22 @@ mulAvxTwo_8x4Xor_loop: VMOVDQU 544(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 640(CX), Y5 VMOVDQU 672(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 3 to 4 outputs VMOVDQU (R8), Y7 @@ -41962,26 +38380,22 @@ mulAvxTwo_8x4Xor_loop: VMOVDQU 800(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 832(CX), Y5 VMOVDQU 864(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 896(CX), Y5 VMOVDQU 928(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 960(CX), Y5 VMOVDQU 992(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 4 to 4 outputs VMOVDQU (R9), Y7 @@ -41993,26 +38407,22 @@ mulAvxTwo_8x4Xor_loop: VMOVDQU 1056(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1088(CX), Y5 VMOVDQU 1120(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1152(CX), Y5 VMOVDQU 1184(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1216(CX), Y5 VMOVDQU 1248(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 5 to 4 outputs VMOVDQU (R10), Y7 @@ -42024,26 +38434,22 @@ mulAvxTwo_8x4Xor_loop: VMOVDQU 1312(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1344(CX), Y5 VMOVDQU 1376(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1408(CX), Y5 VMOVDQU 1440(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1472(CX), Y5 VMOVDQU 1504(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 6 to 4 outputs VMOVDQU (R11), Y7 @@ -42055,26 +38461,22 @@ mulAvxTwo_8x4Xor_loop: VMOVDQU 1568(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1600(CX), Y5 VMOVDQU 1632(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1664(CX), Y5 VMOVDQU 1696(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1728(CX), Y5 VMOVDQU 1760(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 7 to 4 outputs VMOVDQU (DX), Y7 @@ -42086,26 +38488,22 @@ mulAvxTwo_8x4Xor_loop: VMOVDQU 1824(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1856(CX), Y5 VMOVDQU 1888(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1920(CX), Y5 VMOVDQU 1952(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1984(CX), Y5 VMOVDQU 2016(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Store 4 outputs VMOVDQU Y0, (R13) @@ -42126,7 +38524,7 @@ mulAvxTwo_8x4Xor_end: RET // func mulAvxTwo_8x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x5(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -42218,32 +38616,27 @@ mulAvxTwo_8x5_loop: VMOVDQU 352(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 384(CX), Y6 VMOVDQU 416(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 448(CX), Y6 VMOVDQU 480(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 512(CX), Y6 VMOVDQU 544(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 576(CX), Y6 VMOVDQU 608(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 2 to 5 outputs VMOVDQU (SI), Y8 @@ -42255,32 +38648,27 @@ mulAvxTwo_8x5_loop: VMOVDQU 672(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 704(CX), Y6 VMOVDQU 736(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 768(CX), Y6 VMOVDQU 800(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 832(CX), Y6 VMOVDQU 864(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 896(CX), Y6 VMOVDQU 928(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 3 to 5 outputs VMOVDQU (DI), Y8 @@ -42292,32 +38680,27 @@ mulAvxTwo_8x5_loop: VMOVDQU 992(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1024(CX), Y6 VMOVDQU 1056(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1088(CX), Y6 VMOVDQU 1120(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1152(CX), Y6 VMOVDQU 1184(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1216(CX), Y6 VMOVDQU 1248(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 4 to 5 outputs VMOVDQU (R8), Y8 @@ -42329,32 +38712,27 @@ mulAvxTwo_8x5_loop: VMOVDQU 1312(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1344(CX), Y6 VMOVDQU 1376(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1408(CX), Y6 VMOVDQU 1440(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1472(CX), Y6 VMOVDQU 1504(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1536(CX), Y6 VMOVDQU 1568(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 5 to 5 outputs VMOVDQU (R9), Y8 @@ -42366,32 +38744,27 @@ mulAvxTwo_8x5_loop: VMOVDQU 1632(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1664(CX), Y6 VMOVDQU 1696(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1728(CX), Y6 VMOVDQU 1760(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1792(CX), Y6 VMOVDQU 1824(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1856(CX), Y6 VMOVDQU 1888(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 6 to 5 outputs VMOVDQU (R10), Y8 @@ -42403,32 +38776,27 @@ mulAvxTwo_8x5_loop: VMOVDQU 1952(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1984(CX), Y6 VMOVDQU 2016(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 2048(CX), Y6 VMOVDQU 2080(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 2112(CX), Y6 VMOVDQU 2144(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 2176(CX), Y6 VMOVDQU 2208(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 7 to 5 outputs VMOVDQU (AX), Y8 @@ -42440,32 +38808,27 @@ mulAvxTwo_8x5_loop: VMOVDQU 2272(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 2304(CX), Y6 VMOVDQU 2336(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 2368(CX), Y6 VMOVDQU 2400(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 2432(CX), Y6 VMOVDQU 2464(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 2496(CX), Y6 VMOVDQU 2528(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Store 5 outputs VMOVDQU Y0, (R12) @@ -42488,7 +38851,7 @@ mulAvxTwo_8x5_end: RET // func mulAvxTwo_8x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x5Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -42549,36 +38912,31 @@ mulAvxTwo_8x5Xor_loop: VMOVDQU 32(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU (R13), Y1 VMOVDQU 64(CX), Y6 VMOVDQU 96(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU (R14), Y2 VMOVDQU 128(CX), Y6 VMOVDQU 160(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU (R15), Y3 VMOVDQU 192(CX), Y6 VMOVDQU 224(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU (R11), Y4 VMOVDQU 256(CX), Y6 VMOVDQU 288(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 1 to 5 outputs VMOVDQU (BX), Y8 @@ -42590,32 +38948,27 @@ mulAvxTwo_8x5Xor_loop: VMOVDQU 352(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 384(CX), Y6 VMOVDQU 416(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 448(CX), Y6 VMOVDQU 480(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 512(CX), Y6 VMOVDQU 544(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 576(CX), Y6 VMOVDQU 608(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 2 to 5 outputs VMOVDQU (SI), Y8 @@ -42627,32 +38980,27 @@ mulAvxTwo_8x5Xor_loop: VMOVDQU 672(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 704(CX), Y6 VMOVDQU 736(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 768(CX), Y6 VMOVDQU 800(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 832(CX), Y6 VMOVDQU 864(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 896(CX), Y6 VMOVDQU 928(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 3 to 5 outputs VMOVDQU (DI), Y8 @@ -42664,32 +39012,27 @@ mulAvxTwo_8x5Xor_loop: VMOVDQU 992(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1024(CX), Y6 VMOVDQU 1056(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1088(CX), Y6 VMOVDQU 1120(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1152(CX), Y6 VMOVDQU 1184(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1216(CX), Y6 VMOVDQU 1248(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 4 to 5 outputs VMOVDQU (R8), Y8 @@ -42701,32 +39044,27 @@ mulAvxTwo_8x5Xor_loop: VMOVDQU 1312(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1344(CX), Y6 VMOVDQU 1376(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1408(CX), Y6 VMOVDQU 1440(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1472(CX), Y6 VMOVDQU 1504(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1536(CX), Y6 VMOVDQU 1568(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 5 to 5 outputs VMOVDQU (R9), Y8 @@ -42738,32 +39076,27 @@ mulAvxTwo_8x5Xor_loop: VMOVDQU 1632(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1664(CX), Y6 VMOVDQU 1696(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1728(CX), Y6 VMOVDQU 1760(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1792(CX), Y6 VMOVDQU 1824(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1856(CX), Y6 VMOVDQU 1888(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 6 to 5 outputs VMOVDQU (R10), Y8 @@ -42775,32 +39108,27 @@ mulAvxTwo_8x5Xor_loop: VMOVDQU 1952(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1984(CX), Y6 VMOVDQU 2016(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 2048(CX), Y6 VMOVDQU 2080(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 2112(CX), Y6 VMOVDQU 2144(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 2176(CX), Y6 VMOVDQU 2208(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 7 to 5 outputs VMOVDQU (AX), Y8 @@ -42812,32 +39140,27 @@ mulAvxTwo_8x5Xor_loop: VMOVDQU 2272(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 2304(CX), Y6 VMOVDQU 2336(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 2368(CX), Y6 VMOVDQU 2400(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 2432(CX), Y6 VMOVDQU 2464(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 2496(CX), Y6 VMOVDQU 2528(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Store 5 outputs VMOVDQU Y0, (R12) @@ -42860,7 +39183,7 @@ mulAvxTwo_8x5Xor_end: RET // func mulAvxTwo_8x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x6(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -42943,38 +39266,32 @@ mulAvxTwo_8x6_loop: VMOVDQU 416(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 576(CX), Y7 VMOVDQU 608(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 2 to 6 outputs VMOVDQU (DI), Y9 @@ -42986,38 +39303,32 @@ mulAvxTwo_8x6_loop: VMOVDQU 800(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 960(CX), Y7 VMOVDQU 992(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 3 to 6 outputs VMOVDQU (R8), Y9 @@ -43029,38 +39340,32 @@ mulAvxTwo_8x6_loop: VMOVDQU 1184(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1216(CX), Y7 VMOVDQU 1248(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1280(CX), Y7 VMOVDQU 1312(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1344(CX), Y7 VMOVDQU 1376(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1408(CX), Y7 VMOVDQU 1440(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1472(CX), Y7 VMOVDQU 1504(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 4 to 6 outputs VMOVDQU (R9), Y9 @@ -43072,38 +39377,32 @@ mulAvxTwo_8x6_loop: VMOVDQU 1568(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1600(CX), Y7 VMOVDQU 1632(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1664(CX), Y7 VMOVDQU 1696(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1728(CX), Y7 VMOVDQU 1760(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1792(CX), Y7 VMOVDQU 1824(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1856(CX), Y7 VMOVDQU 1888(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 5 to 6 outputs VMOVDQU (R10), Y9 @@ -43115,38 +39414,32 @@ mulAvxTwo_8x6_loop: VMOVDQU 1952(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1984(CX), Y7 VMOVDQU 2016(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2048(CX), Y7 VMOVDQU 2080(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2112(CX), Y7 VMOVDQU 2144(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2176(CX), Y7 VMOVDQU 2208(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 2240(CX), Y7 VMOVDQU 2272(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 6 to 6 outputs VMOVDQU (R11), Y9 @@ -43158,38 +39451,32 @@ mulAvxTwo_8x6_loop: VMOVDQU 2336(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 2368(CX), Y7 VMOVDQU 2400(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2432(CX), Y7 VMOVDQU 2464(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2496(CX), Y7 VMOVDQU 2528(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2560(CX), Y7 VMOVDQU 2592(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 2624(CX), Y7 VMOVDQU 2656(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 7 to 6 outputs VMOVDQU (DX), Y9 @@ -43201,38 +39488,32 @@ mulAvxTwo_8x6_loop: VMOVDQU 2720(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 2752(CX), Y7 VMOVDQU 2784(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2816(CX), Y7 VMOVDQU 2848(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2880(CX), Y7 VMOVDQU 2912(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2944(CX), Y7 VMOVDQU 2976(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 3008(CX), Y7 VMOVDQU 3040(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Store 6 outputs MOVQ (R12), R14 @@ -43258,7 +39539,7 @@ mulAvxTwo_8x6_end: RET // func mulAvxTwo_8x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x6Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -43306,48 +39587,42 @@ mulAvxTwo_8x6Xor_loop: VMOVDQU 32(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) MOVQ 24(R12), R14 VMOVDQU (R14)(R13*1), Y1 VMOVDQU 64(CX), Y7 VMOVDQU 96(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) MOVQ 48(R12), R14 VMOVDQU (R14)(R13*1), Y2 VMOVDQU 128(CX), Y7 VMOVDQU 160(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) MOVQ 72(R12), R14 VMOVDQU (R14)(R13*1), Y3 VMOVDQU 192(CX), Y7 VMOVDQU 224(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) MOVQ 96(R12), R14 VMOVDQU (R14)(R13*1), Y4 VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) MOVQ 120(R12), R14 VMOVDQU (R14)(R13*1), Y5 VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 1 to 6 outputs VMOVDQU (SI), Y9 @@ -43359,38 +39634,32 @@ mulAvxTwo_8x6Xor_loop: VMOVDQU 416(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 576(CX), Y7 VMOVDQU 608(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 2 to 6 outputs VMOVDQU (DI), Y9 @@ -43402,38 +39671,32 @@ mulAvxTwo_8x6Xor_loop: VMOVDQU 800(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 960(CX), Y7 VMOVDQU 992(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 3 to 6 outputs VMOVDQU (R8), Y9 @@ -43445,38 +39708,32 @@ mulAvxTwo_8x6Xor_loop: VMOVDQU 1184(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1216(CX), Y7 VMOVDQU 1248(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1280(CX), Y7 VMOVDQU 1312(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1344(CX), Y7 VMOVDQU 1376(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1408(CX), Y7 VMOVDQU 1440(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1472(CX), Y7 VMOVDQU 1504(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 4 to 6 outputs VMOVDQU (R9), Y9 @@ -43488,38 +39745,32 @@ mulAvxTwo_8x6Xor_loop: VMOVDQU 1568(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1600(CX), Y7 VMOVDQU 1632(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1664(CX), Y7 VMOVDQU 1696(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1728(CX), Y7 VMOVDQU 1760(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1792(CX), Y7 VMOVDQU 1824(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1856(CX), Y7 VMOVDQU 1888(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 5 to 6 outputs VMOVDQU (R10), Y9 @@ -43531,38 +39782,32 @@ mulAvxTwo_8x6Xor_loop: VMOVDQU 1952(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1984(CX), Y7 VMOVDQU 2016(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2048(CX), Y7 VMOVDQU 2080(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2112(CX), Y7 VMOVDQU 2144(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2176(CX), Y7 VMOVDQU 2208(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 2240(CX), Y7 VMOVDQU 2272(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 6 to 6 outputs VMOVDQU (R11), Y9 @@ -43574,38 +39819,32 @@ mulAvxTwo_8x6Xor_loop: VMOVDQU 2336(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 2368(CX), Y7 VMOVDQU 2400(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2432(CX), Y7 VMOVDQU 2464(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2496(CX), Y7 VMOVDQU 2528(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2560(CX), Y7 VMOVDQU 2592(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 2624(CX), Y7 VMOVDQU 2656(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 7 to 6 outputs VMOVDQU (DX), Y9 @@ -43617,38 +39856,32 @@ mulAvxTwo_8x6Xor_loop: VMOVDQU 2720(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 2752(CX), Y7 VMOVDQU 2784(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2816(CX), Y7 VMOVDQU 2848(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2880(CX), Y7 VMOVDQU 2912(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2944(CX), Y7 VMOVDQU 2976(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 3008(CX), Y7 VMOVDQU 3040(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Store 6 outputs MOVQ (R12), R14 @@ -43674,7 +39907,7 @@ mulAvxTwo_8x6Xor_end: RET // func mulAvxTwo_8x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x7(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -43762,44 +39995,37 @@ mulAvxTwo_8x7_loop: VMOVDQU 480(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 512(CX), Y8 VMOVDQU 544(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 576(CX), Y8 VMOVDQU 608(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 640(CX), Y8 VMOVDQU 672(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 704(CX), Y8 VMOVDQU 736(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 768(CX), Y8 VMOVDQU 800(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 832(CX), Y8 VMOVDQU 864(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 2 to 7 outputs VMOVDQU (DI), Y10 @@ -43811,44 +40037,37 @@ mulAvxTwo_8x7_loop: VMOVDQU 928(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 960(CX), Y8 VMOVDQU 992(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1024(CX), Y8 VMOVDQU 1056(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1088(CX), Y8 VMOVDQU 1120(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1152(CX), Y8 VMOVDQU 1184(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1216(CX), Y8 VMOVDQU 1248(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1280(CX), Y8 VMOVDQU 1312(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 3 to 7 outputs VMOVDQU (R8), Y10 @@ -43860,44 +40079,37 @@ mulAvxTwo_8x7_loop: VMOVDQU 1376(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1408(CX), Y8 VMOVDQU 1440(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1472(CX), Y8 VMOVDQU 1504(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1536(CX), Y8 VMOVDQU 1568(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1600(CX), Y8 VMOVDQU 1632(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1664(CX), Y8 VMOVDQU 1696(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1728(CX), Y8 VMOVDQU 1760(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 4 to 7 outputs VMOVDQU (R9), Y10 @@ -43909,44 +40121,37 @@ mulAvxTwo_8x7_loop: VMOVDQU 1824(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1856(CX), Y8 VMOVDQU 1888(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1920(CX), Y8 VMOVDQU 1952(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1984(CX), Y8 VMOVDQU 2016(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2048(CX), Y8 VMOVDQU 2080(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 2112(CX), Y8 VMOVDQU 2144(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 2176(CX), Y8 VMOVDQU 2208(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 5 to 7 outputs VMOVDQU (R10), Y10 @@ -43958,44 +40163,37 @@ mulAvxTwo_8x7_loop: VMOVDQU 2272(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 2304(CX), Y8 VMOVDQU 2336(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 2368(CX), Y8 VMOVDQU 2400(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 2432(CX), Y8 VMOVDQU 2464(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2496(CX), Y8 VMOVDQU 2528(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 2560(CX), Y8 VMOVDQU 2592(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 2624(CX), Y8 VMOVDQU 2656(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 6 to 7 outputs VMOVDQU (R11), Y10 @@ -44007,44 +40205,37 @@ mulAvxTwo_8x7_loop: VMOVDQU 2720(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 2752(CX), Y8 VMOVDQU 2784(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 2816(CX), Y8 VMOVDQU 2848(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 2880(CX), Y8 VMOVDQU 2912(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2944(CX), Y8 VMOVDQU 2976(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 3008(CX), Y8 VMOVDQU 3040(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 3072(CX), Y8 VMOVDQU 3104(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 7 to 7 outputs VMOVDQU (DX), Y10 @@ -44056,44 +40247,37 @@ mulAvxTwo_8x7_loop: VMOVDQU 3168(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 3200(CX), Y8 VMOVDQU 3232(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 3264(CX), Y8 VMOVDQU 3296(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 3328(CX), Y8 VMOVDQU 3360(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 3392(CX), Y8 VMOVDQU 3424(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 3456(CX), Y8 VMOVDQU 3488(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 3520(CX), Y8 VMOVDQU 3552(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Store 7 outputs MOVQ (R12), R14 @@ -44121,7 +40305,7 @@ mulAvxTwo_8x7_end: RET // func mulAvxTwo_8x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x7Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -44169,56 +40353,49 @@ mulAvxTwo_8x7Xor_loop: VMOVDQU 32(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) MOVQ 24(R12), R14 VMOVDQU (R14)(R13*1), Y1 VMOVDQU 64(CX), Y8 VMOVDQU 96(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) MOVQ 48(R12), R14 VMOVDQU (R14)(R13*1), Y2 VMOVDQU 128(CX), Y8 VMOVDQU 160(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) MOVQ 72(R12), R14 VMOVDQU (R14)(R13*1), Y3 VMOVDQU 192(CX), Y8 VMOVDQU 224(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) MOVQ 96(R12), R14 VMOVDQU (R14)(R13*1), Y4 VMOVDQU 256(CX), Y8 VMOVDQU 288(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) MOVQ 120(R12), R14 VMOVDQU (R14)(R13*1), Y5 VMOVDQU 320(CX), Y8 VMOVDQU 352(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) MOVQ 144(R12), R14 VMOVDQU (R14)(R13*1), Y6 VMOVDQU 384(CX), Y8 VMOVDQU 416(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 1 to 7 outputs VMOVDQU (SI), Y10 @@ -44230,44 +40407,37 @@ mulAvxTwo_8x7Xor_loop: VMOVDQU 480(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 512(CX), Y8 VMOVDQU 544(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 576(CX), Y8 VMOVDQU 608(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 640(CX), Y8 VMOVDQU 672(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 704(CX), Y8 VMOVDQU 736(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 768(CX), Y8 VMOVDQU 800(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 832(CX), Y8 VMOVDQU 864(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 2 to 7 outputs VMOVDQU (DI), Y10 @@ -44279,44 +40449,37 @@ mulAvxTwo_8x7Xor_loop: VMOVDQU 928(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 960(CX), Y8 VMOVDQU 992(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1024(CX), Y8 VMOVDQU 1056(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1088(CX), Y8 VMOVDQU 1120(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1152(CX), Y8 VMOVDQU 1184(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1216(CX), Y8 VMOVDQU 1248(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1280(CX), Y8 VMOVDQU 1312(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 3 to 7 outputs VMOVDQU (R8), Y10 @@ -44328,44 +40491,37 @@ mulAvxTwo_8x7Xor_loop: VMOVDQU 1376(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1408(CX), Y8 VMOVDQU 1440(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1472(CX), Y8 VMOVDQU 1504(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1536(CX), Y8 VMOVDQU 1568(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1600(CX), Y8 VMOVDQU 1632(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1664(CX), Y8 VMOVDQU 1696(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1728(CX), Y8 VMOVDQU 1760(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 4 to 7 outputs VMOVDQU (R9), Y10 @@ -44377,44 +40533,37 @@ mulAvxTwo_8x7Xor_loop: VMOVDQU 1824(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1856(CX), Y8 VMOVDQU 1888(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1920(CX), Y8 VMOVDQU 1952(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1984(CX), Y8 VMOVDQU 2016(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2048(CX), Y8 VMOVDQU 2080(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 2112(CX), Y8 VMOVDQU 2144(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 2176(CX), Y8 VMOVDQU 2208(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 5 to 7 outputs VMOVDQU (R10), Y10 @@ -44426,44 +40575,37 @@ mulAvxTwo_8x7Xor_loop: VMOVDQU 2272(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 2304(CX), Y8 VMOVDQU 2336(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 2368(CX), Y8 VMOVDQU 2400(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 2432(CX), Y8 VMOVDQU 2464(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2496(CX), Y8 VMOVDQU 2528(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 2560(CX), Y8 VMOVDQU 2592(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 2624(CX), Y8 VMOVDQU 2656(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 6 to 7 outputs VMOVDQU (R11), Y10 @@ -44475,44 +40617,37 @@ mulAvxTwo_8x7Xor_loop: VMOVDQU 2720(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 2752(CX), Y8 VMOVDQU 2784(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 2816(CX), Y8 VMOVDQU 2848(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 2880(CX), Y8 VMOVDQU 2912(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2944(CX), Y8 VMOVDQU 2976(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 3008(CX), Y8 VMOVDQU 3040(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 3072(CX), Y8 VMOVDQU 3104(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 7 to 7 outputs VMOVDQU (DX), Y10 @@ -44524,44 +40659,37 @@ mulAvxTwo_8x7Xor_loop: VMOVDQU 3168(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 3200(CX), Y8 VMOVDQU 3232(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 3264(CX), Y8 VMOVDQU 3296(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 3328(CX), Y8 VMOVDQU 3360(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 3392(CX), Y8 VMOVDQU 3424(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 3456(CX), Y8 VMOVDQU 3488(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 3520(CX), Y8 VMOVDQU 3552(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Store 7 outputs MOVQ (R12), R14 @@ -44589,7 +40717,7 @@ mulAvxTwo_8x7Xor_end: RET // func mulAvxTwo_8x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x8(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -44682,50 +40810,42 @@ mulAvxTwo_8x8_loop: VMOVDQU 544(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 576(CX), Y9 VMOVDQU 608(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y9 VMOVDQU 672(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 704(CX), Y9 VMOVDQU 736(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 768(CX), Y9 VMOVDQU 800(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 832(CX), Y9 VMOVDQU 864(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 896(CX), Y9 VMOVDQU 928(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 960(CX), Y9 VMOVDQU 992(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 2 to 8 outputs VMOVDQU (DI), Y11 @@ -44737,50 +40857,42 @@ mulAvxTwo_8x8_loop: VMOVDQU 1056(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1088(CX), Y9 VMOVDQU 1120(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1152(CX), Y9 VMOVDQU 1184(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1216(CX), Y9 VMOVDQU 1248(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y9 VMOVDQU 1312(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1344(CX), Y9 VMOVDQU 1376(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1408(CX), Y9 VMOVDQU 1440(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1472(CX), Y9 VMOVDQU 1504(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 3 to 8 outputs VMOVDQU (R8), Y11 @@ -44792,50 +40904,42 @@ mulAvxTwo_8x8_loop: VMOVDQU 1568(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1600(CX), Y9 VMOVDQU 1632(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1664(CX), Y9 VMOVDQU 1696(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1728(CX), Y9 VMOVDQU 1760(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1792(CX), Y9 VMOVDQU 1824(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1856(CX), Y9 VMOVDQU 1888(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1920(CX), Y9 VMOVDQU 1952(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1984(CX), Y9 VMOVDQU 2016(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 4 to 8 outputs VMOVDQU (R9), Y11 @@ -44847,50 +40951,42 @@ mulAvxTwo_8x8_loop: VMOVDQU 2080(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 2112(CX), Y9 VMOVDQU 2144(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 2176(CX), Y9 VMOVDQU 2208(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 2240(CX), Y9 VMOVDQU 2272(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 2304(CX), Y9 VMOVDQU 2336(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 2368(CX), Y9 VMOVDQU 2400(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 2432(CX), Y9 VMOVDQU 2464(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 2496(CX), Y9 VMOVDQU 2528(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 5 to 8 outputs VMOVDQU (R10), Y11 @@ -44902,50 +40998,42 @@ mulAvxTwo_8x8_loop: VMOVDQU 2592(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 2624(CX), Y9 VMOVDQU 2656(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 2688(CX), Y9 VMOVDQU 2720(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 2752(CX), Y9 VMOVDQU 2784(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 2816(CX), Y9 VMOVDQU 2848(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 2880(CX), Y9 VMOVDQU 2912(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 2944(CX), Y9 VMOVDQU 2976(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 3008(CX), Y9 VMOVDQU 3040(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 6 to 8 outputs VMOVDQU (R11), Y11 @@ -44957,50 +41045,42 @@ mulAvxTwo_8x8_loop: VMOVDQU 3104(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 3136(CX), Y9 VMOVDQU 3168(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 3200(CX), Y9 VMOVDQU 3232(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 3264(CX), Y9 VMOVDQU 3296(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 3328(CX), Y9 VMOVDQU 3360(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 3392(CX), Y9 VMOVDQU 3424(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 3456(CX), Y9 VMOVDQU 3488(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 3520(CX), Y9 VMOVDQU 3552(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 7 to 8 outputs VMOVDQU (DX), Y11 @@ -45012,50 +41092,42 @@ mulAvxTwo_8x8_loop: VMOVDQU 3616(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 3648(CX), Y9 VMOVDQU 3680(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 3712(CX), Y9 VMOVDQU 3744(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 3776(CX), Y9 VMOVDQU 3808(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 3840(CX), Y9 VMOVDQU 3872(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 3904(CX), Y9 VMOVDQU 3936(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 3968(CX), Y9 VMOVDQU 4000(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 4032(CX), Y9 VMOVDQU 4064(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Store 8 outputs MOVQ (R12), R14 @@ -45085,7 +41157,7 @@ mulAvxTwo_8x8_end: RET // func mulAvxTwo_8x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x8Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -45133,64 +41205,56 @@ mulAvxTwo_8x8Xor_loop: VMOVDQU 32(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) MOVQ 24(R12), R14 VMOVDQU (R14)(R13*1), Y1 VMOVDQU 64(CX), Y9 VMOVDQU 96(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) MOVQ 48(R12), R14 VMOVDQU (R14)(R13*1), Y2 VMOVDQU 128(CX), Y9 VMOVDQU 160(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) MOVQ 72(R12), R14 VMOVDQU (R14)(R13*1), Y3 VMOVDQU 192(CX), Y9 VMOVDQU 224(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) MOVQ 96(R12), R14 VMOVDQU (R14)(R13*1), Y4 VMOVDQU 256(CX), Y9 VMOVDQU 288(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) MOVQ 120(R12), R14 VMOVDQU (R14)(R13*1), Y5 VMOVDQU 320(CX), Y9 VMOVDQU 352(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) MOVQ 144(R12), R14 VMOVDQU (R14)(R13*1), Y6 VMOVDQU 384(CX), Y9 VMOVDQU 416(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) MOVQ 168(R12), R14 VMOVDQU (R14)(R13*1), Y7 VMOVDQU 448(CX), Y9 VMOVDQU 480(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 1 to 8 outputs VMOVDQU (SI), Y11 @@ -45202,50 +41266,42 @@ mulAvxTwo_8x8Xor_loop: VMOVDQU 544(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 576(CX), Y9 VMOVDQU 608(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y9 VMOVDQU 672(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 704(CX), Y9 VMOVDQU 736(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 768(CX), Y9 VMOVDQU 800(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 832(CX), Y9 VMOVDQU 864(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 896(CX), Y9 VMOVDQU 928(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 960(CX), Y9 VMOVDQU 992(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 2 to 8 outputs VMOVDQU (DI), Y11 @@ -45257,50 +41313,42 @@ mulAvxTwo_8x8Xor_loop: VMOVDQU 1056(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1088(CX), Y9 VMOVDQU 1120(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1152(CX), Y9 VMOVDQU 1184(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1216(CX), Y9 VMOVDQU 1248(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y9 VMOVDQU 1312(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1344(CX), Y9 VMOVDQU 1376(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1408(CX), Y9 VMOVDQU 1440(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1472(CX), Y9 VMOVDQU 1504(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 3 to 8 outputs VMOVDQU (R8), Y11 @@ -45312,50 +41360,42 @@ mulAvxTwo_8x8Xor_loop: VMOVDQU 1568(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1600(CX), Y9 VMOVDQU 1632(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1664(CX), Y9 VMOVDQU 1696(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1728(CX), Y9 VMOVDQU 1760(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1792(CX), Y9 VMOVDQU 1824(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1856(CX), Y9 VMOVDQU 1888(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1920(CX), Y9 VMOVDQU 1952(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1984(CX), Y9 VMOVDQU 2016(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 4 to 8 outputs VMOVDQU (R9), Y11 @@ -45367,50 +41407,42 @@ mulAvxTwo_8x8Xor_loop: VMOVDQU 2080(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 2112(CX), Y9 VMOVDQU 2144(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 2176(CX), Y9 VMOVDQU 2208(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 2240(CX), Y9 VMOVDQU 2272(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 2304(CX), Y9 VMOVDQU 2336(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 2368(CX), Y9 VMOVDQU 2400(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 2432(CX), Y9 VMOVDQU 2464(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 2496(CX), Y9 VMOVDQU 2528(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 5 to 8 outputs VMOVDQU (R10), Y11 @@ -45422,50 +41454,42 @@ mulAvxTwo_8x8Xor_loop: VMOVDQU 2592(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 2624(CX), Y9 VMOVDQU 2656(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 2688(CX), Y9 VMOVDQU 2720(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 2752(CX), Y9 VMOVDQU 2784(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 2816(CX), Y9 VMOVDQU 2848(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 2880(CX), Y9 VMOVDQU 2912(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 2944(CX), Y9 VMOVDQU 2976(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 3008(CX), Y9 VMOVDQU 3040(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 6 to 8 outputs VMOVDQU (R11), Y11 @@ -45477,50 +41501,42 @@ mulAvxTwo_8x8Xor_loop: VMOVDQU 3104(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 3136(CX), Y9 VMOVDQU 3168(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 3200(CX), Y9 VMOVDQU 3232(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 3264(CX), Y9 VMOVDQU 3296(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 3328(CX), Y9 VMOVDQU 3360(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 3392(CX), Y9 VMOVDQU 3424(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 3456(CX), Y9 VMOVDQU 3488(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 3520(CX), Y9 VMOVDQU 3552(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 7 to 8 outputs VMOVDQU (DX), Y11 @@ -45532,50 +41548,42 @@ mulAvxTwo_8x8Xor_loop: VMOVDQU 3616(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 3648(CX), Y9 VMOVDQU 3680(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 3712(CX), Y9 VMOVDQU 3744(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 3776(CX), Y9 VMOVDQU 3808(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 3840(CX), Y9 VMOVDQU 3872(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 3904(CX), Y9 VMOVDQU 3936(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 3968(CX), Y9 VMOVDQU 4000(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 4032(CX), Y9 VMOVDQU 4064(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Store 8 outputs MOVQ (R12), R14 @@ -45605,7 +41613,7 @@ mulAvxTwo_8x8Xor_end: RET // func mulAvxTwo_8x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x9(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -45703,56 +41711,47 @@ mulAvxTwo_8x9_loop: VMOVDQU 608(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 640(CX), Y10 VMOVDQU 672(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 704(CX), Y10 VMOVDQU 736(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 768(CX), Y10 VMOVDQU 800(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 832(CX), Y10 VMOVDQU 864(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 896(CX), Y10 VMOVDQU 928(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 960(CX), Y10 VMOVDQU 992(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1024(CX), Y10 VMOVDQU 1056(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1088(CX), Y10 VMOVDQU 1120(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 2 to 9 outputs VMOVDQU (DI), Y12 @@ -45764,56 +41763,47 @@ mulAvxTwo_8x9_loop: VMOVDQU 1184(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1216(CX), Y10 VMOVDQU 1248(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1280(CX), Y10 VMOVDQU 1312(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1344(CX), Y10 VMOVDQU 1376(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1408(CX), Y10 VMOVDQU 1440(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 1472(CX), Y10 VMOVDQU 1504(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 1536(CX), Y10 VMOVDQU 1568(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1600(CX), Y10 VMOVDQU 1632(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1664(CX), Y10 VMOVDQU 1696(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 3 to 9 outputs VMOVDQU (R8), Y12 @@ -45825,56 +41815,47 @@ mulAvxTwo_8x9_loop: VMOVDQU 1760(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1792(CX), Y10 VMOVDQU 1824(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1856(CX), Y10 VMOVDQU 1888(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1920(CX), Y10 VMOVDQU 1952(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1984(CX), Y10 VMOVDQU 2016(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2048(CX), Y10 VMOVDQU 2080(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2112(CX), Y10 VMOVDQU 2144(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2176(CX), Y10 VMOVDQU 2208(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2240(CX), Y10 VMOVDQU 2272(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 4 to 9 outputs VMOVDQU (R9), Y12 @@ -45886,56 +41867,47 @@ mulAvxTwo_8x9_loop: VMOVDQU 2336(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 2368(CX), Y10 VMOVDQU 2400(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 2432(CX), Y10 VMOVDQU 2464(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 2496(CX), Y10 VMOVDQU 2528(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 2560(CX), Y10 VMOVDQU 2592(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2624(CX), Y10 VMOVDQU 2656(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2688(CX), Y10 VMOVDQU 2720(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2752(CX), Y10 VMOVDQU 2784(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2816(CX), Y10 VMOVDQU 2848(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 5 to 9 outputs VMOVDQU (R10), Y12 @@ -45947,56 +41919,47 @@ mulAvxTwo_8x9_loop: VMOVDQU 2912(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 2944(CX), Y10 VMOVDQU 2976(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 3008(CX), Y10 VMOVDQU 3040(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 3072(CX), Y10 VMOVDQU 3104(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 3136(CX), Y10 VMOVDQU 3168(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 3200(CX), Y10 VMOVDQU 3232(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 3264(CX), Y10 VMOVDQU 3296(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 3328(CX), Y10 VMOVDQU 3360(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 3392(CX), Y10 VMOVDQU 3424(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 6 to 9 outputs VMOVDQU (R11), Y12 @@ -46008,56 +41971,47 @@ mulAvxTwo_8x9_loop: VMOVDQU 3488(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 3520(CX), Y10 VMOVDQU 3552(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 3584(CX), Y10 VMOVDQU 3616(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 3648(CX), Y10 VMOVDQU 3680(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 3712(CX), Y10 VMOVDQU 3744(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 3776(CX), Y10 VMOVDQU 3808(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 3840(CX), Y10 VMOVDQU 3872(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 3904(CX), Y10 VMOVDQU 3936(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 3968(CX), Y10 VMOVDQU 4000(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 7 to 9 outputs VMOVDQU (DX), Y12 @@ -46069,56 +42023,47 @@ mulAvxTwo_8x9_loop: VMOVDQU 4064(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 4096(CX), Y10 VMOVDQU 4128(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 4160(CX), Y10 VMOVDQU 4192(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 4224(CX), Y10 VMOVDQU 4256(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 4288(CX), Y10 VMOVDQU 4320(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 4352(CX), Y10 VMOVDQU 4384(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 4416(CX), Y10 VMOVDQU 4448(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 4480(CX), Y10 VMOVDQU 4512(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 4544(CX), Y10 VMOVDQU 4576(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Store 9 outputs MOVQ (R12), R14 @@ -46150,7 +42095,7 @@ mulAvxTwo_8x9_end: RET // func mulAvxTwo_8x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x9Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -46198,72 +42143,63 @@ mulAvxTwo_8x9Xor_loop: VMOVDQU 32(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) MOVQ 24(R12), R14 VMOVDQU (R14)(R13*1), Y1 VMOVDQU 64(CX), Y10 VMOVDQU 96(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) MOVQ 48(R12), R14 VMOVDQU (R14)(R13*1), Y2 VMOVDQU 128(CX), Y10 VMOVDQU 160(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) MOVQ 72(R12), R14 VMOVDQU (R14)(R13*1), Y3 VMOVDQU 192(CX), Y10 VMOVDQU 224(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) MOVQ 96(R12), R14 VMOVDQU (R14)(R13*1), Y4 VMOVDQU 256(CX), Y10 VMOVDQU 288(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) MOVQ 120(R12), R14 VMOVDQU (R14)(R13*1), Y5 VMOVDQU 320(CX), Y10 VMOVDQU 352(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) MOVQ 144(R12), R14 VMOVDQU (R14)(R13*1), Y6 VMOVDQU 384(CX), Y10 VMOVDQU 416(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) MOVQ 168(R12), R14 VMOVDQU (R14)(R13*1), Y7 VMOVDQU 448(CX), Y10 VMOVDQU 480(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) MOVQ 192(R12), R14 VMOVDQU (R14)(R13*1), Y8 VMOVDQU 512(CX), Y10 VMOVDQU 544(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 1 to 9 outputs VMOVDQU (SI), Y12 @@ -46275,56 +42211,47 @@ mulAvxTwo_8x9Xor_loop: VMOVDQU 608(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 640(CX), Y10 VMOVDQU 672(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 704(CX), Y10 VMOVDQU 736(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 768(CX), Y10 VMOVDQU 800(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 832(CX), Y10 VMOVDQU 864(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 896(CX), Y10 VMOVDQU 928(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 960(CX), Y10 VMOVDQU 992(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1024(CX), Y10 VMOVDQU 1056(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1088(CX), Y10 VMOVDQU 1120(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 2 to 9 outputs VMOVDQU (DI), Y12 @@ -46336,56 +42263,47 @@ mulAvxTwo_8x9Xor_loop: VMOVDQU 1184(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1216(CX), Y10 VMOVDQU 1248(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1280(CX), Y10 VMOVDQU 1312(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1344(CX), Y10 VMOVDQU 1376(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1408(CX), Y10 VMOVDQU 1440(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 1472(CX), Y10 VMOVDQU 1504(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 1536(CX), Y10 VMOVDQU 1568(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1600(CX), Y10 VMOVDQU 1632(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1664(CX), Y10 VMOVDQU 1696(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 3 to 9 outputs VMOVDQU (R8), Y12 @@ -46397,56 +42315,47 @@ mulAvxTwo_8x9Xor_loop: VMOVDQU 1760(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1792(CX), Y10 VMOVDQU 1824(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1856(CX), Y10 VMOVDQU 1888(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1920(CX), Y10 VMOVDQU 1952(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1984(CX), Y10 VMOVDQU 2016(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2048(CX), Y10 VMOVDQU 2080(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2112(CX), Y10 VMOVDQU 2144(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2176(CX), Y10 VMOVDQU 2208(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2240(CX), Y10 VMOVDQU 2272(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 4 to 9 outputs VMOVDQU (R9), Y12 @@ -46458,56 +42367,47 @@ mulAvxTwo_8x9Xor_loop: VMOVDQU 2336(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 2368(CX), Y10 VMOVDQU 2400(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 2432(CX), Y10 VMOVDQU 2464(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 2496(CX), Y10 VMOVDQU 2528(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 2560(CX), Y10 VMOVDQU 2592(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2624(CX), Y10 VMOVDQU 2656(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2688(CX), Y10 VMOVDQU 2720(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2752(CX), Y10 VMOVDQU 2784(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2816(CX), Y10 VMOVDQU 2848(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 5 to 9 outputs VMOVDQU (R10), Y12 @@ -46519,56 +42419,47 @@ mulAvxTwo_8x9Xor_loop: VMOVDQU 2912(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 2944(CX), Y10 VMOVDQU 2976(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 3008(CX), Y10 VMOVDQU 3040(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 3072(CX), Y10 VMOVDQU 3104(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 3136(CX), Y10 VMOVDQU 3168(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 3200(CX), Y10 VMOVDQU 3232(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 3264(CX), Y10 VMOVDQU 3296(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 3328(CX), Y10 VMOVDQU 3360(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 3392(CX), Y10 VMOVDQU 3424(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 6 to 9 outputs VMOVDQU (R11), Y12 @@ -46580,56 +42471,47 @@ mulAvxTwo_8x9Xor_loop: VMOVDQU 3488(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 3520(CX), Y10 VMOVDQU 3552(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 3584(CX), Y10 VMOVDQU 3616(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 3648(CX), Y10 VMOVDQU 3680(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 3712(CX), Y10 VMOVDQU 3744(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 3776(CX), Y10 VMOVDQU 3808(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 3840(CX), Y10 VMOVDQU 3872(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 3904(CX), Y10 VMOVDQU 3936(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 3968(CX), Y10 VMOVDQU 4000(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 7 to 9 outputs VMOVDQU (DX), Y12 @@ -46641,56 +42523,47 @@ mulAvxTwo_8x9Xor_loop: VMOVDQU 4064(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 4096(CX), Y10 VMOVDQU 4128(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 4160(CX), Y10 VMOVDQU 4192(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 4224(CX), Y10 VMOVDQU 4256(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 4288(CX), Y10 VMOVDQU 4320(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 4352(CX), Y10 VMOVDQU 4384(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 4416(CX), Y10 VMOVDQU 4448(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 4480(CX), Y10 VMOVDQU 4512(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 4544(CX), Y10 VMOVDQU 4576(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Store 9 outputs MOVQ (R12), R14 @@ -46722,7 +42595,7 @@ mulAvxTwo_8x9Xor_end: RET // func mulAvxTwo_8x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x10(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -46825,62 +42698,52 @@ mulAvxTwo_8x10_loop: VMOVDQU 672(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 704(CX), Y11 VMOVDQU 736(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 768(CX), Y11 VMOVDQU 800(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 832(CX), Y11 VMOVDQU 864(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 896(CX), Y11 VMOVDQU 928(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 960(CX), Y11 VMOVDQU 992(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1024(CX), Y11 VMOVDQU 1056(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1088(CX), Y11 VMOVDQU 1120(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1152(CX), Y11 VMOVDQU 1184(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1216(CX), Y11 VMOVDQU 1248(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 2 to 10 outputs VMOVDQU (DI), Y13 @@ -46892,62 +42755,52 @@ mulAvxTwo_8x10_loop: VMOVDQU 1312(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1344(CX), Y11 VMOVDQU 1376(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 1408(CX), Y11 VMOVDQU 1440(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 1472(CX), Y11 VMOVDQU 1504(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 1536(CX), Y11 VMOVDQU 1568(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 1600(CX), Y11 VMOVDQU 1632(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1664(CX), Y11 VMOVDQU 1696(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1728(CX), Y11 VMOVDQU 1760(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1792(CX), Y11 VMOVDQU 1824(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1856(CX), Y11 VMOVDQU 1888(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 3 to 10 outputs VMOVDQU (R8), Y13 @@ -46959,62 +42812,52 @@ mulAvxTwo_8x10_loop: VMOVDQU 1952(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1984(CX), Y11 VMOVDQU 2016(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2048(CX), Y11 VMOVDQU 2080(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2112(CX), Y11 VMOVDQU 2144(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2176(CX), Y11 VMOVDQU 2208(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2240(CX), Y11 VMOVDQU 2272(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2304(CX), Y11 VMOVDQU 2336(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 2368(CX), Y11 VMOVDQU 2400(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 2432(CX), Y11 VMOVDQU 2464(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 2496(CX), Y11 VMOVDQU 2528(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 4 to 10 outputs VMOVDQU (R9), Y13 @@ -47026,62 +42869,52 @@ mulAvxTwo_8x10_loop: VMOVDQU 2592(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 2624(CX), Y11 VMOVDQU 2656(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2688(CX), Y11 VMOVDQU 2720(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2752(CX), Y11 VMOVDQU 2784(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2816(CX), Y11 VMOVDQU 2848(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2880(CX), Y11 VMOVDQU 2912(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2944(CX), Y11 VMOVDQU 2976(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 3008(CX), Y11 VMOVDQU 3040(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 3072(CX), Y11 VMOVDQU 3104(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 3136(CX), Y11 VMOVDQU 3168(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 5 to 10 outputs VMOVDQU (R10), Y13 @@ -47093,62 +42926,52 @@ mulAvxTwo_8x10_loop: VMOVDQU 3232(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 3264(CX), Y11 VMOVDQU 3296(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 3328(CX), Y11 VMOVDQU 3360(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 3392(CX), Y11 VMOVDQU 3424(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 3456(CX), Y11 VMOVDQU 3488(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 3520(CX), Y11 VMOVDQU 3552(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 3584(CX), Y11 VMOVDQU 3616(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 3648(CX), Y11 VMOVDQU 3680(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 3712(CX), Y11 VMOVDQU 3744(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 3776(CX), Y11 VMOVDQU 3808(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 6 to 10 outputs VMOVDQU (R11), Y13 @@ -47160,62 +42983,52 @@ mulAvxTwo_8x10_loop: VMOVDQU 3872(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 3904(CX), Y11 VMOVDQU 3936(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 3968(CX), Y11 VMOVDQU 4000(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 4032(CX), Y11 VMOVDQU 4064(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 4096(CX), Y11 VMOVDQU 4128(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 4160(CX), Y11 VMOVDQU 4192(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 4224(CX), Y11 VMOVDQU 4256(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 4288(CX), Y11 VMOVDQU 4320(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 4352(CX), Y11 VMOVDQU 4384(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 4416(CX), Y11 VMOVDQU 4448(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 7 to 10 outputs VMOVDQU (DX), Y13 @@ -47227,62 +43040,52 @@ mulAvxTwo_8x10_loop: VMOVDQU 4512(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 4544(CX), Y11 VMOVDQU 4576(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 4608(CX), Y11 VMOVDQU 4640(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 4672(CX), Y11 VMOVDQU 4704(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 4736(CX), Y11 VMOVDQU 4768(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 4800(CX), Y11 VMOVDQU 4832(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 4864(CX), Y11 VMOVDQU 4896(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 4928(CX), Y11 VMOVDQU 4960(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 4992(CX), Y11 VMOVDQU 5024(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 5056(CX), Y11 VMOVDQU 5088(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Store 10 outputs MOVQ (R12), R14 @@ -47316,7 +43119,7 @@ mulAvxTwo_8x10_end: RET // func mulAvxTwo_8x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_8x10Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -47364,80 +43167,70 @@ mulAvxTwo_8x10Xor_loop: VMOVDQU 32(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) MOVQ 24(R12), R14 VMOVDQU (R14)(R13*1), Y1 VMOVDQU 64(CX), Y11 VMOVDQU 96(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) MOVQ 48(R12), R14 VMOVDQU (R14)(R13*1), Y2 VMOVDQU 128(CX), Y11 VMOVDQU 160(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) MOVQ 72(R12), R14 VMOVDQU (R14)(R13*1), Y3 VMOVDQU 192(CX), Y11 VMOVDQU 224(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) MOVQ 96(R12), R14 VMOVDQU (R14)(R13*1), Y4 VMOVDQU 256(CX), Y11 VMOVDQU 288(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) MOVQ 120(R12), R14 VMOVDQU (R14)(R13*1), Y5 VMOVDQU 320(CX), Y11 VMOVDQU 352(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) MOVQ 144(R12), R14 VMOVDQU (R14)(R13*1), Y6 VMOVDQU 384(CX), Y11 VMOVDQU 416(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) MOVQ 168(R12), R14 VMOVDQU (R14)(R13*1), Y7 VMOVDQU 448(CX), Y11 VMOVDQU 480(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) MOVQ 192(R12), R14 VMOVDQU (R14)(R13*1), Y8 VMOVDQU 512(CX), Y11 VMOVDQU 544(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) MOVQ 216(R12), R14 VMOVDQU (R14)(R13*1), Y9 VMOVDQU 576(CX), Y11 VMOVDQU 608(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 1 to 10 outputs VMOVDQU (SI), Y13 @@ -47449,62 +43242,52 @@ mulAvxTwo_8x10Xor_loop: VMOVDQU 672(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 704(CX), Y11 VMOVDQU 736(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 768(CX), Y11 VMOVDQU 800(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 832(CX), Y11 VMOVDQU 864(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 896(CX), Y11 VMOVDQU 928(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 960(CX), Y11 VMOVDQU 992(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1024(CX), Y11 VMOVDQU 1056(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1088(CX), Y11 VMOVDQU 1120(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1152(CX), Y11 VMOVDQU 1184(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1216(CX), Y11 VMOVDQU 1248(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 2 to 10 outputs VMOVDQU (DI), Y13 @@ -47516,62 +43299,52 @@ mulAvxTwo_8x10Xor_loop: VMOVDQU 1312(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1344(CX), Y11 VMOVDQU 1376(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 1408(CX), Y11 VMOVDQU 1440(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 1472(CX), Y11 VMOVDQU 1504(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 1536(CX), Y11 VMOVDQU 1568(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 1600(CX), Y11 VMOVDQU 1632(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1664(CX), Y11 VMOVDQU 1696(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1728(CX), Y11 VMOVDQU 1760(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1792(CX), Y11 VMOVDQU 1824(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1856(CX), Y11 VMOVDQU 1888(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 3 to 10 outputs VMOVDQU (R8), Y13 @@ -47583,62 +43356,52 @@ mulAvxTwo_8x10Xor_loop: VMOVDQU 1952(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1984(CX), Y11 VMOVDQU 2016(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2048(CX), Y11 VMOVDQU 2080(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2112(CX), Y11 VMOVDQU 2144(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2176(CX), Y11 VMOVDQU 2208(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2240(CX), Y11 VMOVDQU 2272(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2304(CX), Y11 VMOVDQU 2336(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 2368(CX), Y11 VMOVDQU 2400(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 2432(CX), Y11 VMOVDQU 2464(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 2496(CX), Y11 VMOVDQU 2528(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 4 to 10 outputs VMOVDQU (R9), Y13 @@ -47650,62 +43413,52 @@ mulAvxTwo_8x10Xor_loop: VMOVDQU 2592(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 2624(CX), Y11 VMOVDQU 2656(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2688(CX), Y11 VMOVDQU 2720(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2752(CX), Y11 VMOVDQU 2784(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2816(CX), Y11 VMOVDQU 2848(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2880(CX), Y11 VMOVDQU 2912(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2944(CX), Y11 VMOVDQU 2976(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 3008(CX), Y11 VMOVDQU 3040(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 3072(CX), Y11 VMOVDQU 3104(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 3136(CX), Y11 VMOVDQU 3168(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 5 to 10 outputs VMOVDQU (R10), Y13 @@ -47717,62 +43470,52 @@ mulAvxTwo_8x10Xor_loop: VMOVDQU 3232(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 3264(CX), Y11 VMOVDQU 3296(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 3328(CX), Y11 VMOVDQU 3360(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 3392(CX), Y11 VMOVDQU 3424(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 3456(CX), Y11 VMOVDQU 3488(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 3520(CX), Y11 VMOVDQU 3552(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 3584(CX), Y11 VMOVDQU 3616(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 3648(CX), Y11 VMOVDQU 3680(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 3712(CX), Y11 VMOVDQU 3744(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 3776(CX), Y11 VMOVDQU 3808(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 6 to 10 outputs VMOVDQU (R11), Y13 @@ -47784,62 +43527,52 @@ mulAvxTwo_8x10Xor_loop: VMOVDQU 3872(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 3904(CX), Y11 VMOVDQU 3936(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 3968(CX), Y11 VMOVDQU 4000(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 4032(CX), Y11 VMOVDQU 4064(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 4096(CX), Y11 VMOVDQU 4128(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 4160(CX), Y11 VMOVDQU 4192(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 4224(CX), Y11 VMOVDQU 4256(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 4288(CX), Y11 VMOVDQU 4320(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 4352(CX), Y11 VMOVDQU 4384(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 4416(CX), Y11 VMOVDQU 4448(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 7 to 10 outputs VMOVDQU (DX), Y13 @@ -47851,62 +43584,52 @@ mulAvxTwo_8x10Xor_loop: VMOVDQU 4512(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 4544(CX), Y11 VMOVDQU 4576(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 4608(CX), Y11 VMOVDQU 4640(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 4672(CX), Y11 VMOVDQU 4704(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 4736(CX), Y11 VMOVDQU 4768(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 4800(CX), Y11 VMOVDQU 4832(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 4864(CX), Y11 VMOVDQU 4896(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 4928(CX), Y11 VMOVDQU 4960(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 4992(CX), Y11 VMOVDQU 5024(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 5056(CX), Y11 VMOVDQU 5088(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Store 10 outputs MOVQ (R12), R14 @@ -47940,7 +43663,7 @@ mulAvxTwo_8x10Xor_end: RET // func mulAvxTwo_9x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x1(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -48004,8 +43727,7 @@ mulAvxTwo_9x1_loop: VMOVDQU 96(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 2 to 1 outputs VMOVDQU (DI), Y4 @@ -48017,8 +43739,7 @@ mulAvxTwo_9x1_loop: VMOVDQU 160(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 3 to 1 outputs VMOVDQU (R8), Y4 @@ -48030,8 +43751,7 @@ mulAvxTwo_9x1_loop: VMOVDQU 224(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 4 to 1 outputs VMOVDQU (R9), Y4 @@ -48043,8 +43763,7 @@ mulAvxTwo_9x1_loop: VMOVDQU 288(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 5 to 1 outputs VMOVDQU (R10), Y4 @@ -48056,8 +43775,7 @@ mulAvxTwo_9x1_loop: VMOVDQU 352(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 6 to 1 outputs VMOVDQU (R11), Y4 @@ -48069,8 +43787,7 @@ mulAvxTwo_9x1_loop: VMOVDQU 416(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 7 to 1 outputs VMOVDQU (R12), Y4 @@ -48082,8 +43799,7 @@ mulAvxTwo_9x1_loop: VMOVDQU 480(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 8 to 1 outputs VMOVDQU (DX), Y4 @@ -48095,8 +43811,7 @@ mulAvxTwo_9x1_loop: VMOVDQU 544(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Store 1 outputs VMOVDQU Y0, (R13) @@ -48111,7 +43826,7 @@ mulAvxTwo_9x1_end: RET // func mulAvxTwo_9x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x1_64(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -48189,10 +43904,8 @@ mulAvxTwo_9x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 2 to 1 outputs VMOVDQU (DI), Y6 @@ -48210,10 +43923,8 @@ mulAvxTwo_9x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 3 to 1 outputs VMOVDQU (R8), Y6 @@ -48231,10 +43942,8 @@ mulAvxTwo_9x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 4 to 1 outputs VMOVDQU (R9), Y6 @@ -48252,10 +43961,8 @@ mulAvxTwo_9x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 5 to 1 outputs VMOVDQU (R10), Y6 @@ -48273,10 +43980,8 @@ mulAvxTwo_9x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 6 to 1 outputs VMOVDQU (R11), Y6 @@ -48294,10 +43999,8 @@ mulAvxTwo_9x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 7 to 1 outputs VMOVDQU (R12), Y6 @@ -48315,10 +44018,8 @@ mulAvxTwo_9x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 8 to 1 outputs VMOVDQU (DX), Y6 @@ -48336,10 +44037,8 @@ mulAvxTwo_9x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Store 1 outputs VMOVDQU Y0, (R13) @@ -48355,7 +44054,7 @@ mulAvxTwo_9x1_64_end: RET // func mulAvxTwo_9x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x1Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -48408,8 +44107,7 @@ mulAvxTwo_9x1Xor_loop: VMOVDQU 32(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 1 to 1 outputs VMOVDQU (SI), Y4 @@ -48421,8 +44119,7 @@ mulAvxTwo_9x1Xor_loop: VMOVDQU 96(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 2 to 1 outputs VMOVDQU (DI), Y4 @@ -48434,8 +44131,7 @@ mulAvxTwo_9x1Xor_loop: VMOVDQU 160(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 3 to 1 outputs VMOVDQU (R8), Y4 @@ -48447,8 +44143,7 @@ mulAvxTwo_9x1Xor_loop: VMOVDQU 224(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 4 to 1 outputs VMOVDQU (R9), Y4 @@ -48460,8 +44155,7 @@ mulAvxTwo_9x1Xor_loop: VMOVDQU 288(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 5 to 1 outputs VMOVDQU (R10), Y4 @@ -48473,8 +44167,7 @@ mulAvxTwo_9x1Xor_loop: VMOVDQU 352(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 6 to 1 outputs VMOVDQU (R11), Y4 @@ -48486,8 +44179,7 @@ mulAvxTwo_9x1Xor_loop: VMOVDQU 416(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 7 to 1 outputs VMOVDQU (R12), Y4 @@ -48499,8 +44191,7 @@ mulAvxTwo_9x1Xor_loop: VMOVDQU 480(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 8 to 1 outputs VMOVDQU (DX), Y4 @@ -48512,8 +44203,7 @@ mulAvxTwo_9x1Xor_loop: VMOVDQU 544(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Store 1 outputs VMOVDQU Y0, (R13) @@ -48528,7 +44218,7 @@ mulAvxTwo_9x1Xor_end: RET // func mulAvxTwo_9x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x1_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -48591,10 +44281,8 @@ mulAvxTwo_9x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 1 to 1 outputs VMOVDQU (SI), Y6 @@ -48612,10 +44300,8 @@ mulAvxTwo_9x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 2 to 1 outputs VMOVDQU (DI), Y6 @@ -48633,10 +44319,8 @@ mulAvxTwo_9x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 3 to 1 outputs VMOVDQU (R8), Y6 @@ -48654,10 +44338,8 @@ mulAvxTwo_9x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 4 to 1 outputs VMOVDQU (R9), Y6 @@ -48675,10 +44357,8 @@ mulAvxTwo_9x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 5 to 1 outputs VMOVDQU (R10), Y6 @@ -48696,10 +44376,8 @@ mulAvxTwo_9x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 6 to 1 outputs VMOVDQU (R11), Y6 @@ -48717,10 +44395,8 @@ mulAvxTwo_9x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 7 to 1 outputs VMOVDQU (R12), Y6 @@ -48738,10 +44414,8 @@ mulAvxTwo_9x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 8 to 1 outputs VMOVDQU (DX), Y6 @@ -48759,10 +44433,8 @@ mulAvxTwo_9x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Store 1 outputs VMOVDQU Y0, (R13) @@ -48778,7 +44450,7 @@ mulAvxTwo_9x1_64Xor_end: RET // func mulAvxTwo_9x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x2(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -48849,14 +44521,12 @@ mulAvxTwo_9x2_loop: VMOVDQU 160(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 192(CX), Y3 VMOVDQU 224(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 2 to 2 outputs VMOVDQU (DI), Y5 @@ -48868,14 +44538,12 @@ mulAvxTwo_9x2_loop: VMOVDQU 288(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 320(CX), Y3 VMOVDQU 352(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 3 to 2 outputs VMOVDQU (R8), Y5 @@ -48887,14 +44555,12 @@ mulAvxTwo_9x2_loop: VMOVDQU 416(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 448(CX), Y3 VMOVDQU 480(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 4 to 2 outputs VMOVDQU (R9), Y5 @@ -48906,14 +44572,12 @@ mulAvxTwo_9x2_loop: VMOVDQU 544(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 576(CX), Y3 VMOVDQU 608(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 5 to 2 outputs VMOVDQU (R10), Y5 @@ -48925,14 +44589,12 @@ mulAvxTwo_9x2_loop: VMOVDQU 672(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 704(CX), Y3 VMOVDQU 736(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 6 to 2 outputs VMOVDQU (R11), Y5 @@ -48944,14 +44606,12 @@ mulAvxTwo_9x2_loop: VMOVDQU 800(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 832(CX), Y3 VMOVDQU 864(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 7 to 2 outputs VMOVDQU (R12), Y5 @@ -48963,14 +44623,12 @@ mulAvxTwo_9x2_loop: VMOVDQU 928(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 960(CX), Y3 VMOVDQU 992(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 8 to 2 outputs VMOVDQU (DX), Y5 @@ -48982,14 +44640,12 @@ mulAvxTwo_9x2_loop: VMOVDQU 1056(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 1088(CX), Y3 VMOVDQU 1120(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Store 2 outputs VMOVDQU Y0, (R14) @@ -49006,7 +44662,7 @@ mulAvxTwo_9x2_end: RET // func mulAvxTwo_9x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x2_64(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -49094,20 +44750,16 @@ mulAvxTwo_9x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 2 to 2 outputs VMOVDQU (DI), Y9 @@ -49125,20 +44777,16 @@ mulAvxTwo_9x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 3 to 2 outputs VMOVDQU (R8), Y9 @@ -49156,20 +44804,16 @@ mulAvxTwo_9x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 4 to 2 outputs VMOVDQU (R9), Y9 @@ -49187,20 +44831,16 @@ mulAvxTwo_9x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 5 to 2 outputs VMOVDQU (R10), Y9 @@ -49218,20 +44858,16 @@ mulAvxTwo_9x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 6 to 2 outputs VMOVDQU (R11), Y9 @@ -49249,20 +44885,16 @@ mulAvxTwo_9x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 832(CX), Y5 VMOVDQU 864(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 7 to 2 outputs VMOVDQU (R12), Y9 @@ -49280,20 +44912,16 @@ mulAvxTwo_9x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 960(CX), Y5 VMOVDQU 992(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 8 to 2 outputs VMOVDQU (DX), Y9 @@ -49311,20 +44939,16 @@ mulAvxTwo_9x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1088(CX), Y5 VMOVDQU 1120(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Store 2 outputs VMOVDQU Y0, (R14) @@ -49343,7 +44967,7 @@ mulAvxTwo_9x2_64_end: RET // func mulAvxTwo_9x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x2Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -49398,15 +45022,13 @@ mulAvxTwo_9x2Xor_loop: VMOVDQU 32(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU (R13), Y1 VMOVDQU 64(CX), Y3 VMOVDQU 96(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 1 to 2 outputs VMOVDQU (SI), Y5 @@ -49418,14 +45040,12 @@ mulAvxTwo_9x2Xor_loop: VMOVDQU 160(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 192(CX), Y3 VMOVDQU 224(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 2 to 2 outputs VMOVDQU (DI), Y5 @@ -49437,14 +45057,12 @@ mulAvxTwo_9x2Xor_loop: VMOVDQU 288(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 320(CX), Y3 VMOVDQU 352(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 3 to 2 outputs VMOVDQU (R8), Y5 @@ -49456,14 +45074,12 @@ mulAvxTwo_9x2Xor_loop: VMOVDQU 416(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 448(CX), Y3 VMOVDQU 480(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 4 to 2 outputs VMOVDQU (R9), Y5 @@ -49475,14 +45091,12 @@ mulAvxTwo_9x2Xor_loop: VMOVDQU 544(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 576(CX), Y3 VMOVDQU 608(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 5 to 2 outputs VMOVDQU (R10), Y5 @@ -49494,14 +45108,12 @@ mulAvxTwo_9x2Xor_loop: VMOVDQU 672(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 704(CX), Y3 VMOVDQU 736(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 6 to 2 outputs VMOVDQU (R11), Y5 @@ -49513,14 +45125,12 @@ mulAvxTwo_9x2Xor_loop: VMOVDQU 800(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 832(CX), Y3 VMOVDQU 864(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 7 to 2 outputs VMOVDQU (R12), Y5 @@ -49532,14 +45142,12 @@ mulAvxTwo_9x2Xor_loop: VMOVDQU 928(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 960(CX), Y3 VMOVDQU 992(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 8 to 2 outputs VMOVDQU (DX), Y5 @@ -49551,14 +45159,12 @@ mulAvxTwo_9x2Xor_loop: VMOVDQU 1056(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 1088(CX), Y3 VMOVDQU 1120(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Store 2 outputs VMOVDQU Y0, (R14) @@ -49575,7 +45181,7 @@ mulAvxTwo_9x2Xor_end: RET // func mulAvxTwo_9x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x2_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -49642,20 +45248,16 @@ mulAvxTwo_9x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 64(CX), Y5 VMOVDQU 96(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 1 to 2 outputs VMOVDQU (SI), Y9 @@ -49673,20 +45275,16 @@ mulAvxTwo_9x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 2 to 2 outputs VMOVDQU (DI), Y9 @@ -49704,20 +45302,16 @@ mulAvxTwo_9x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 3 to 2 outputs VMOVDQU (R8), Y9 @@ -49735,20 +45329,16 @@ mulAvxTwo_9x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 4 to 2 outputs VMOVDQU (R9), Y9 @@ -49766,20 +45356,16 @@ mulAvxTwo_9x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 5 to 2 outputs VMOVDQU (R10), Y9 @@ -49797,20 +45383,16 @@ mulAvxTwo_9x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 6 to 2 outputs VMOVDQU (R11), Y9 @@ -49828,20 +45410,16 @@ mulAvxTwo_9x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 832(CX), Y5 VMOVDQU 864(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 7 to 2 outputs VMOVDQU (R12), Y9 @@ -49859,20 +45437,16 @@ mulAvxTwo_9x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 960(CX), Y5 VMOVDQU 992(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 8 to 2 outputs VMOVDQU (DX), Y9 @@ -49890,20 +45464,16 @@ mulAvxTwo_9x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1088(CX), Y5 VMOVDQU 1120(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Store 2 outputs VMOVDQU Y0, (R14) @@ -49922,7 +45492,7 @@ mulAvxTwo_9x2_64Xor_end: RET // func mulAvxTwo_9x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x3(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -50000,20 +45570,17 @@ mulAvxTwo_9x3_loop: VMOVDQU 224(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 256(CX), Y4 VMOVDQU 288(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 320(CX), Y4 VMOVDQU 352(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 2 to 3 outputs VMOVDQU (DI), Y6 @@ -50025,20 +45592,17 @@ mulAvxTwo_9x3_loop: VMOVDQU 416(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 448(CX), Y4 VMOVDQU 480(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 512(CX), Y4 VMOVDQU 544(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 3 to 3 outputs VMOVDQU (R8), Y6 @@ -50050,20 +45614,17 @@ mulAvxTwo_9x3_loop: VMOVDQU 608(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 640(CX), Y4 VMOVDQU 672(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 704(CX), Y4 VMOVDQU 736(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 4 to 3 outputs VMOVDQU (R9), Y6 @@ -50075,20 +45636,17 @@ mulAvxTwo_9x3_loop: VMOVDQU 800(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 832(CX), Y4 VMOVDQU 864(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 896(CX), Y4 VMOVDQU 928(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 5 to 3 outputs VMOVDQU (R10), Y6 @@ -50100,20 +45658,17 @@ mulAvxTwo_9x3_loop: VMOVDQU 992(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1024(CX), Y4 VMOVDQU 1056(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1088(CX), Y4 VMOVDQU 1120(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 6 to 3 outputs VMOVDQU (R11), Y6 @@ -50125,20 +45680,17 @@ mulAvxTwo_9x3_loop: VMOVDQU 1184(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1216(CX), Y4 VMOVDQU 1248(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1280(CX), Y4 VMOVDQU 1312(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 7 to 3 outputs VMOVDQU (R12), Y6 @@ -50150,20 +45702,17 @@ mulAvxTwo_9x3_loop: VMOVDQU 1376(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1408(CX), Y4 VMOVDQU 1440(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1472(CX), Y4 VMOVDQU 1504(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 8 to 3 outputs VMOVDQU (DX), Y6 @@ -50175,20 +45724,17 @@ mulAvxTwo_9x3_loop: VMOVDQU 1568(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1600(CX), Y4 VMOVDQU 1632(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1664(CX), Y4 VMOVDQU 1696(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Store 3 outputs VMOVDQU Y0, (R14) @@ -50207,7 +45753,7 @@ mulAvxTwo_9x3_end: RET // func mulAvxTwo_9x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x3_64(SB), $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -50305,30 +45851,24 @@ mulAvxTwo_9x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 2 to 3 outputs VMOVDQU (DI), Y11 @@ -50346,30 +45886,24 @@ mulAvxTwo_9x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 3 to 3 outputs VMOVDQU (R8), Y11 @@ -50387,30 +45921,24 @@ mulAvxTwo_9x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 4 to 3 outputs VMOVDQU (R9), Y11 @@ -50428,30 +45956,24 @@ mulAvxTwo_9x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 5 to 3 outputs VMOVDQU (R10), Y11 @@ -50469,30 +45991,24 @@ mulAvxTwo_9x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 6 to 3 outputs VMOVDQU (R11), Y11 @@ -50510,30 +46026,24 @@ mulAvxTwo_9x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1216(CX), Y7 VMOVDQU 1248(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y7 VMOVDQU 1312(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 7 to 3 outputs VMOVDQU (R12), Y11 @@ -50551,30 +46061,24 @@ mulAvxTwo_9x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1408(CX), Y7 VMOVDQU 1440(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1472(CX), Y7 VMOVDQU 1504(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 8 to 3 outputs VMOVDQU (DX), Y11 @@ -50592,30 +46096,24 @@ mulAvxTwo_9x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1600(CX), Y7 VMOVDQU 1632(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1664(CX), Y7 VMOVDQU 1696(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Store 3 outputs VMOVDQU Y0, (R14) @@ -50637,7 +46135,7 @@ mulAvxTwo_9x3_64_end: RET // func mulAvxTwo_9x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x3Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -50694,22 +46192,19 @@ mulAvxTwo_9x3Xor_loop: VMOVDQU 32(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU (R15), Y1 VMOVDQU 64(CX), Y4 VMOVDQU 96(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU (R13), Y2 VMOVDQU 128(CX), Y4 VMOVDQU 160(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 1 to 3 outputs VMOVDQU (SI), Y6 @@ -50721,20 +46216,17 @@ mulAvxTwo_9x3Xor_loop: VMOVDQU 224(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 256(CX), Y4 VMOVDQU 288(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 320(CX), Y4 VMOVDQU 352(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 2 to 3 outputs VMOVDQU (DI), Y6 @@ -50746,20 +46238,17 @@ mulAvxTwo_9x3Xor_loop: VMOVDQU 416(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 448(CX), Y4 VMOVDQU 480(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 512(CX), Y4 VMOVDQU 544(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 3 to 3 outputs VMOVDQU (R8), Y6 @@ -50771,20 +46260,17 @@ mulAvxTwo_9x3Xor_loop: VMOVDQU 608(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 640(CX), Y4 VMOVDQU 672(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 704(CX), Y4 VMOVDQU 736(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 4 to 3 outputs VMOVDQU (R9), Y6 @@ -50796,20 +46282,17 @@ mulAvxTwo_9x3Xor_loop: VMOVDQU 800(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 832(CX), Y4 VMOVDQU 864(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 896(CX), Y4 VMOVDQU 928(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 5 to 3 outputs VMOVDQU (R10), Y6 @@ -50821,20 +46304,17 @@ mulAvxTwo_9x3Xor_loop: VMOVDQU 992(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1024(CX), Y4 VMOVDQU 1056(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1088(CX), Y4 VMOVDQU 1120(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 6 to 3 outputs VMOVDQU (R11), Y6 @@ -50846,20 +46326,17 @@ mulAvxTwo_9x3Xor_loop: VMOVDQU 1184(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1216(CX), Y4 VMOVDQU 1248(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1280(CX), Y4 VMOVDQU 1312(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 7 to 3 outputs VMOVDQU (R12), Y6 @@ -50871,20 +46348,17 @@ mulAvxTwo_9x3Xor_loop: VMOVDQU 1376(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1408(CX), Y4 VMOVDQU 1440(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1472(CX), Y4 VMOVDQU 1504(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 8 to 3 outputs VMOVDQU (DX), Y6 @@ -50896,20 +46370,17 @@ mulAvxTwo_9x3Xor_loop: VMOVDQU 1568(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1600(CX), Y4 VMOVDQU 1632(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1664(CX), Y4 VMOVDQU 1696(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Store 3 outputs VMOVDQU Y0, (R14) @@ -50928,7 +46399,7 @@ mulAvxTwo_9x3Xor_end: RET // func mulAvxTwo_9x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x3_64Xor(SB), $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -50999,30 +46470,24 @@ mulAvxTwo_9x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 64(CX), Y7 VMOVDQU 96(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 128(CX), Y7 VMOVDQU 160(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 1 to 3 outputs VMOVDQU (SI), Y11 @@ -51040,30 +46505,24 @@ mulAvxTwo_9x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 2 to 3 outputs VMOVDQU (DI), Y11 @@ -51081,30 +46540,24 @@ mulAvxTwo_9x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 3 to 3 outputs VMOVDQU (R8), Y11 @@ -51122,30 +46575,24 @@ mulAvxTwo_9x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 4 to 3 outputs VMOVDQU (R9), Y11 @@ -51163,30 +46610,24 @@ mulAvxTwo_9x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 5 to 3 outputs VMOVDQU (R10), Y11 @@ -51204,30 +46645,24 @@ mulAvxTwo_9x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 6 to 3 outputs VMOVDQU (R11), Y11 @@ -51245,30 +46680,24 @@ mulAvxTwo_9x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1216(CX), Y7 VMOVDQU 1248(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y7 VMOVDQU 1312(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 7 to 3 outputs VMOVDQU (R12), Y11 @@ -51286,30 +46715,24 @@ mulAvxTwo_9x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1408(CX), Y7 VMOVDQU 1440(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1472(CX), Y7 VMOVDQU 1504(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 8 to 3 outputs VMOVDQU (DX), Y11 @@ -51327,30 +46750,24 @@ mulAvxTwo_9x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1600(CX), Y7 VMOVDQU 1632(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1664(CX), Y7 VMOVDQU 1696(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Store 3 outputs VMOVDQU Y0, (R14) @@ -51372,7 +46789,7 @@ mulAvxTwo_9x3_64Xor_end: RET // func mulAvxTwo_9x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x4(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -51459,26 +46876,22 @@ mulAvxTwo_9x4_loop: VMOVDQU 288(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 384(CX), Y5 VMOVDQU 416(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 2 to 4 outputs VMOVDQU (SI), Y7 @@ -51490,26 +46903,22 @@ mulAvxTwo_9x4_loop: VMOVDQU 544(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 640(CX), Y5 VMOVDQU 672(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 3 to 4 outputs VMOVDQU (DI), Y7 @@ -51521,26 +46930,22 @@ mulAvxTwo_9x4_loop: VMOVDQU 800(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 832(CX), Y5 VMOVDQU 864(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 896(CX), Y5 VMOVDQU 928(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 960(CX), Y5 VMOVDQU 992(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 4 to 4 outputs VMOVDQU (R8), Y7 @@ -51552,26 +46957,22 @@ mulAvxTwo_9x4_loop: VMOVDQU 1056(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1088(CX), Y5 VMOVDQU 1120(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1152(CX), Y5 VMOVDQU 1184(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1216(CX), Y5 VMOVDQU 1248(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 5 to 4 outputs VMOVDQU (R9), Y7 @@ -51583,26 +46984,22 @@ mulAvxTwo_9x4_loop: VMOVDQU 1312(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1344(CX), Y5 VMOVDQU 1376(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1408(CX), Y5 VMOVDQU 1440(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1472(CX), Y5 VMOVDQU 1504(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 6 to 4 outputs VMOVDQU (R10), Y7 @@ -51614,26 +47011,22 @@ mulAvxTwo_9x4_loop: VMOVDQU 1568(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1600(CX), Y5 VMOVDQU 1632(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1664(CX), Y5 VMOVDQU 1696(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1728(CX), Y5 VMOVDQU 1760(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 7 to 4 outputs VMOVDQU (R11), Y7 @@ -51645,26 +47038,22 @@ mulAvxTwo_9x4_loop: VMOVDQU 1824(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1856(CX), Y5 VMOVDQU 1888(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1920(CX), Y5 VMOVDQU 1952(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1984(CX), Y5 VMOVDQU 2016(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 8 to 4 outputs VMOVDQU (AX), Y7 @@ -51676,26 +47065,22 @@ mulAvxTwo_9x4_loop: VMOVDQU 2080(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 2112(CX), Y5 VMOVDQU 2144(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 2176(CX), Y5 VMOVDQU 2208(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 2240(CX), Y5 VMOVDQU 2272(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Store 4 outputs VMOVDQU Y0, (R13) @@ -51716,7 +47101,7 @@ mulAvxTwo_9x4_end: RET // func mulAvxTwo_9x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x4Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -51777,29 +47162,25 @@ mulAvxTwo_9x4Xor_loop: VMOVDQU 32(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU (R14), Y1 VMOVDQU 64(CX), Y5 VMOVDQU 96(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU (R15), Y2 VMOVDQU 128(CX), Y5 VMOVDQU 160(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU (R12), Y3 VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 1 to 4 outputs VMOVDQU (BX), Y7 @@ -51811,26 +47192,22 @@ mulAvxTwo_9x4Xor_loop: VMOVDQU 288(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 384(CX), Y5 VMOVDQU 416(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 2 to 4 outputs VMOVDQU (SI), Y7 @@ -51842,26 +47219,22 @@ mulAvxTwo_9x4Xor_loop: VMOVDQU 544(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 640(CX), Y5 VMOVDQU 672(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 3 to 4 outputs VMOVDQU (DI), Y7 @@ -51873,26 +47246,22 @@ mulAvxTwo_9x4Xor_loop: VMOVDQU 800(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 832(CX), Y5 VMOVDQU 864(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 896(CX), Y5 VMOVDQU 928(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 960(CX), Y5 VMOVDQU 992(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 4 to 4 outputs VMOVDQU (R8), Y7 @@ -51904,26 +47273,22 @@ mulAvxTwo_9x4Xor_loop: VMOVDQU 1056(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1088(CX), Y5 VMOVDQU 1120(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1152(CX), Y5 VMOVDQU 1184(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1216(CX), Y5 VMOVDQU 1248(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 5 to 4 outputs VMOVDQU (R9), Y7 @@ -51935,26 +47300,22 @@ mulAvxTwo_9x4Xor_loop: VMOVDQU 1312(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1344(CX), Y5 VMOVDQU 1376(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1408(CX), Y5 VMOVDQU 1440(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1472(CX), Y5 VMOVDQU 1504(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 6 to 4 outputs VMOVDQU (R10), Y7 @@ -51966,26 +47327,22 @@ mulAvxTwo_9x4Xor_loop: VMOVDQU 1568(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1600(CX), Y5 VMOVDQU 1632(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1664(CX), Y5 VMOVDQU 1696(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1728(CX), Y5 VMOVDQU 1760(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 7 to 4 outputs VMOVDQU (R11), Y7 @@ -51997,26 +47354,22 @@ mulAvxTwo_9x4Xor_loop: VMOVDQU 1824(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1856(CX), Y5 VMOVDQU 1888(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1920(CX), Y5 VMOVDQU 1952(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1984(CX), Y5 VMOVDQU 2016(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 8 to 4 outputs VMOVDQU (AX), Y7 @@ -52028,26 +47381,22 @@ mulAvxTwo_9x4Xor_loop: VMOVDQU 2080(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 2112(CX), Y5 VMOVDQU 2144(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 2176(CX), Y5 VMOVDQU 2208(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 2240(CX), Y5 VMOVDQU 2272(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Store 4 outputs VMOVDQU Y0, (R13) @@ -52068,7 +47417,7 @@ mulAvxTwo_9x4Xor_end: RET // func mulAvxTwo_9x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x5(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -52148,32 +47497,27 @@ mulAvxTwo_9x5_loop: VMOVDQU 352(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 384(CX), Y6 VMOVDQU 416(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 448(CX), Y6 VMOVDQU 480(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 512(CX), Y6 VMOVDQU 544(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 576(CX), Y6 VMOVDQU 608(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 2 to 5 outputs VMOVDQU (DI), Y8 @@ -52185,32 +47529,27 @@ mulAvxTwo_9x5_loop: VMOVDQU 672(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 704(CX), Y6 VMOVDQU 736(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 768(CX), Y6 VMOVDQU 800(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 832(CX), Y6 VMOVDQU 864(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 896(CX), Y6 VMOVDQU 928(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 3 to 5 outputs VMOVDQU (R8), Y8 @@ -52222,32 +47561,27 @@ mulAvxTwo_9x5_loop: VMOVDQU 992(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1024(CX), Y6 VMOVDQU 1056(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1088(CX), Y6 VMOVDQU 1120(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1152(CX), Y6 VMOVDQU 1184(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1216(CX), Y6 VMOVDQU 1248(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 4 to 5 outputs VMOVDQU (R9), Y8 @@ -52259,32 +47593,27 @@ mulAvxTwo_9x5_loop: VMOVDQU 1312(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1344(CX), Y6 VMOVDQU 1376(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1408(CX), Y6 VMOVDQU 1440(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1472(CX), Y6 VMOVDQU 1504(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1536(CX), Y6 VMOVDQU 1568(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 5 to 5 outputs VMOVDQU (R10), Y8 @@ -52296,32 +47625,27 @@ mulAvxTwo_9x5_loop: VMOVDQU 1632(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1664(CX), Y6 VMOVDQU 1696(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1728(CX), Y6 VMOVDQU 1760(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1792(CX), Y6 VMOVDQU 1824(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1856(CX), Y6 VMOVDQU 1888(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 6 to 5 outputs VMOVDQU (R11), Y8 @@ -52333,32 +47657,27 @@ mulAvxTwo_9x5_loop: VMOVDQU 1952(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1984(CX), Y6 VMOVDQU 2016(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 2048(CX), Y6 VMOVDQU 2080(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 2112(CX), Y6 VMOVDQU 2144(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 2176(CX), Y6 VMOVDQU 2208(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 7 to 5 outputs VMOVDQU (R12), Y8 @@ -52370,32 +47689,27 @@ mulAvxTwo_9x5_loop: VMOVDQU 2272(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 2304(CX), Y6 VMOVDQU 2336(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 2368(CX), Y6 VMOVDQU 2400(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 2432(CX), Y6 VMOVDQU 2464(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 2496(CX), Y6 VMOVDQU 2528(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 8 to 5 outputs VMOVDQU (DX), Y8 @@ -52407,32 +47721,27 @@ mulAvxTwo_9x5_loop: VMOVDQU 2592(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 2624(CX), Y6 VMOVDQU 2656(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 2688(CX), Y6 VMOVDQU 2720(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 2752(CX), Y6 VMOVDQU 2784(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 2816(CX), Y6 VMOVDQU 2848(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Store 5 outputs MOVQ (R13), R15 @@ -52456,7 +47765,7 @@ mulAvxTwo_9x5_end: RET // func mulAvxTwo_9x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x5Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -52506,40 +47815,35 @@ mulAvxTwo_9x5Xor_loop: VMOVDQU 32(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) MOVQ 24(R13), R15 VMOVDQU (R15)(R14*1), Y1 VMOVDQU 64(CX), Y6 VMOVDQU 96(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) MOVQ 48(R13), R15 VMOVDQU (R15)(R14*1), Y2 VMOVDQU 128(CX), Y6 VMOVDQU 160(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) MOVQ 72(R13), R15 VMOVDQU (R15)(R14*1), Y3 VMOVDQU 192(CX), Y6 VMOVDQU 224(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) MOVQ 96(R13), R15 VMOVDQU (R15)(R14*1), Y4 VMOVDQU 256(CX), Y6 VMOVDQU 288(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 1 to 5 outputs VMOVDQU (SI), Y8 @@ -52551,32 +47855,27 @@ mulAvxTwo_9x5Xor_loop: VMOVDQU 352(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 384(CX), Y6 VMOVDQU 416(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 448(CX), Y6 VMOVDQU 480(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 512(CX), Y6 VMOVDQU 544(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 576(CX), Y6 VMOVDQU 608(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 2 to 5 outputs VMOVDQU (DI), Y8 @@ -52588,32 +47887,27 @@ mulAvxTwo_9x5Xor_loop: VMOVDQU 672(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 704(CX), Y6 VMOVDQU 736(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 768(CX), Y6 VMOVDQU 800(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 832(CX), Y6 VMOVDQU 864(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 896(CX), Y6 VMOVDQU 928(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 3 to 5 outputs VMOVDQU (R8), Y8 @@ -52625,32 +47919,27 @@ mulAvxTwo_9x5Xor_loop: VMOVDQU 992(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1024(CX), Y6 VMOVDQU 1056(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1088(CX), Y6 VMOVDQU 1120(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1152(CX), Y6 VMOVDQU 1184(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1216(CX), Y6 VMOVDQU 1248(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 4 to 5 outputs VMOVDQU (R9), Y8 @@ -52662,32 +47951,27 @@ mulAvxTwo_9x5Xor_loop: VMOVDQU 1312(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1344(CX), Y6 VMOVDQU 1376(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1408(CX), Y6 VMOVDQU 1440(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1472(CX), Y6 VMOVDQU 1504(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1536(CX), Y6 VMOVDQU 1568(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 5 to 5 outputs VMOVDQU (R10), Y8 @@ -52699,32 +47983,27 @@ mulAvxTwo_9x5Xor_loop: VMOVDQU 1632(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1664(CX), Y6 VMOVDQU 1696(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1728(CX), Y6 VMOVDQU 1760(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1792(CX), Y6 VMOVDQU 1824(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1856(CX), Y6 VMOVDQU 1888(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 6 to 5 outputs VMOVDQU (R11), Y8 @@ -52736,32 +48015,27 @@ mulAvxTwo_9x5Xor_loop: VMOVDQU 1952(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1984(CX), Y6 VMOVDQU 2016(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 2048(CX), Y6 VMOVDQU 2080(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 2112(CX), Y6 VMOVDQU 2144(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 2176(CX), Y6 VMOVDQU 2208(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 7 to 5 outputs VMOVDQU (R12), Y8 @@ -52773,32 +48047,27 @@ mulAvxTwo_9x5Xor_loop: VMOVDQU 2272(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 2304(CX), Y6 VMOVDQU 2336(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 2368(CX), Y6 VMOVDQU 2400(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 2432(CX), Y6 VMOVDQU 2464(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 2496(CX), Y6 VMOVDQU 2528(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 8 to 5 outputs VMOVDQU (DX), Y8 @@ -52810,32 +48079,27 @@ mulAvxTwo_9x5Xor_loop: VMOVDQU 2592(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 2624(CX), Y6 VMOVDQU 2656(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 2688(CX), Y6 VMOVDQU 2720(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 2752(CX), Y6 VMOVDQU 2784(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 2816(CX), Y6 VMOVDQU 2848(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Store 5 outputs MOVQ (R13), R15 @@ -52859,7 +48123,7 @@ mulAvxTwo_9x5Xor_end: RET // func mulAvxTwo_9x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x6(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -52944,38 +48208,32 @@ mulAvxTwo_9x6_loop: VMOVDQU 416(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 576(CX), Y7 VMOVDQU 608(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 2 to 6 outputs VMOVDQU (DI), Y9 @@ -52987,38 +48245,32 @@ mulAvxTwo_9x6_loop: VMOVDQU 800(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 960(CX), Y7 VMOVDQU 992(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 3 to 6 outputs VMOVDQU (R8), Y9 @@ -53030,38 +48282,32 @@ mulAvxTwo_9x6_loop: VMOVDQU 1184(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1216(CX), Y7 VMOVDQU 1248(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1280(CX), Y7 VMOVDQU 1312(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1344(CX), Y7 VMOVDQU 1376(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1408(CX), Y7 VMOVDQU 1440(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1472(CX), Y7 VMOVDQU 1504(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 4 to 6 outputs VMOVDQU (R9), Y9 @@ -53073,38 +48319,32 @@ mulAvxTwo_9x6_loop: VMOVDQU 1568(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1600(CX), Y7 VMOVDQU 1632(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1664(CX), Y7 VMOVDQU 1696(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1728(CX), Y7 VMOVDQU 1760(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1792(CX), Y7 VMOVDQU 1824(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1856(CX), Y7 VMOVDQU 1888(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 5 to 6 outputs VMOVDQU (R10), Y9 @@ -53116,38 +48356,32 @@ mulAvxTwo_9x6_loop: VMOVDQU 1952(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1984(CX), Y7 VMOVDQU 2016(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2048(CX), Y7 VMOVDQU 2080(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2112(CX), Y7 VMOVDQU 2144(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2176(CX), Y7 VMOVDQU 2208(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 2240(CX), Y7 VMOVDQU 2272(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 6 to 6 outputs VMOVDQU (R11), Y9 @@ -53159,38 +48393,32 @@ mulAvxTwo_9x6_loop: VMOVDQU 2336(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 2368(CX), Y7 VMOVDQU 2400(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2432(CX), Y7 VMOVDQU 2464(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2496(CX), Y7 VMOVDQU 2528(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2560(CX), Y7 VMOVDQU 2592(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 2624(CX), Y7 VMOVDQU 2656(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 7 to 6 outputs VMOVDQU (R12), Y9 @@ -53202,38 +48430,32 @@ mulAvxTwo_9x6_loop: VMOVDQU 2720(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 2752(CX), Y7 VMOVDQU 2784(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2816(CX), Y7 VMOVDQU 2848(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2880(CX), Y7 VMOVDQU 2912(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2944(CX), Y7 VMOVDQU 2976(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 3008(CX), Y7 VMOVDQU 3040(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 8 to 6 outputs VMOVDQU (DX), Y9 @@ -53245,38 +48467,32 @@ mulAvxTwo_9x6_loop: VMOVDQU 3104(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 3136(CX), Y7 VMOVDQU 3168(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 3200(CX), Y7 VMOVDQU 3232(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 3264(CX), Y7 VMOVDQU 3296(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 3328(CX), Y7 VMOVDQU 3360(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 3392(CX), Y7 VMOVDQU 3424(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Store 6 outputs MOVQ (R13), R15 @@ -53302,7 +48518,7 @@ mulAvxTwo_9x6_end: RET // func mulAvxTwo_9x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x6Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -53352,48 +48568,42 @@ mulAvxTwo_9x6Xor_loop: VMOVDQU 32(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) MOVQ 24(R13), R15 VMOVDQU (R15)(R14*1), Y1 VMOVDQU 64(CX), Y7 VMOVDQU 96(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) MOVQ 48(R13), R15 VMOVDQU (R15)(R14*1), Y2 VMOVDQU 128(CX), Y7 VMOVDQU 160(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) MOVQ 72(R13), R15 VMOVDQU (R15)(R14*1), Y3 VMOVDQU 192(CX), Y7 VMOVDQU 224(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) MOVQ 96(R13), R15 VMOVDQU (R15)(R14*1), Y4 VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) MOVQ 120(R13), R15 VMOVDQU (R15)(R14*1), Y5 VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 1 to 6 outputs VMOVDQU (SI), Y9 @@ -53405,38 +48615,32 @@ mulAvxTwo_9x6Xor_loop: VMOVDQU 416(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 576(CX), Y7 VMOVDQU 608(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 2 to 6 outputs VMOVDQU (DI), Y9 @@ -53448,38 +48652,32 @@ mulAvxTwo_9x6Xor_loop: VMOVDQU 800(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 960(CX), Y7 VMOVDQU 992(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 3 to 6 outputs VMOVDQU (R8), Y9 @@ -53491,38 +48689,32 @@ mulAvxTwo_9x6Xor_loop: VMOVDQU 1184(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1216(CX), Y7 VMOVDQU 1248(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1280(CX), Y7 VMOVDQU 1312(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1344(CX), Y7 VMOVDQU 1376(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1408(CX), Y7 VMOVDQU 1440(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1472(CX), Y7 VMOVDQU 1504(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 4 to 6 outputs VMOVDQU (R9), Y9 @@ -53534,38 +48726,32 @@ mulAvxTwo_9x6Xor_loop: VMOVDQU 1568(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1600(CX), Y7 VMOVDQU 1632(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1664(CX), Y7 VMOVDQU 1696(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1728(CX), Y7 VMOVDQU 1760(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1792(CX), Y7 VMOVDQU 1824(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1856(CX), Y7 VMOVDQU 1888(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 5 to 6 outputs VMOVDQU (R10), Y9 @@ -53577,38 +48763,32 @@ mulAvxTwo_9x6Xor_loop: VMOVDQU 1952(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1984(CX), Y7 VMOVDQU 2016(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2048(CX), Y7 VMOVDQU 2080(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2112(CX), Y7 VMOVDQU 2144(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2176(CX), Y7 VMOVDQU 2208(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 2240(CX), Y7 VMOVDQU 2272(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 6 to 6 outputs VMOVDQU (R11), Y9 @@ -53620,38 +48800,32 @@ mulAvxTwo_9x6Xor_loop: VMOVDQU 2336(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 2368(CX), Y7 VMOVDQU 2400(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2432(CX), Y7 VMOVDQU 2464(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2496(CX), Y7 VMOVDQU 2528(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2560(CX), Y7 VMOVDQU 2592(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 2624(CX), Y7 VMOVDQU 2656(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 7 to 6 outputs VMOVDQU (R12), Y9 @@ -53663,38 +48837,32 @@ mulAvxTwo_9x6Xor_loop: VMOVDQU 2720(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 2752(CX), Y7 VMOVDQU 2784(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2816(CX), Y7 VMOVDQU 2848(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2880(CX), Y7 VMOVDQU 2912(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2944(CX), Y7 VMOVDQU 2976(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 3008(CX), Y7 VMOVDQU 3040(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 8 to 6 outputs VMOVDQU (DX), Y9 @@ -53706,38 +48874,32 @@ mulAvxTwo_9x6Xor_loop: VMOVDQU 3104(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 3136(CX), Y7 VMOVDQU 3168(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 3200(CX), Y7 VMOVDQU 3232(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 3264(CX), Y7 VMOVDQU 3296(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 3328(CX), Y7 VMOVDQU 3360(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 3392(CX), Y7 VMOVDQU 3424(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Store 6 outputs MOVQ (R13), R15 @@ -53763,7 +48925,7 @@ mulAvxTwo_9x6Xor_end: RET // func mulAvxTwo_9x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x7(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -53853,44 +49015,37 @@ mulAvxTwo_9x7_loop: VMOVDQU 480(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 512(CX), Y8 VMOVDQU 544(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 576(CX), Y8 VMOVDQU 608(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 640(CX), Y8 VMOVDQU 672(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 704(CX), Y8 VMOVDQU 736(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 768(CX), Y8 VMOVDQU 800(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 832(CX), Y8 VMOVDQU 864(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 2 to 7 outputs VMOVDQU (DI), Y10 @@ -53902,44 +49057,37 @@ mulAvxTwo_9x7_loop: VMOVDQU 928(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 960(CX), Y8 VMOVDQU 992(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1024(CX), Y8 VMOVDQU 1056(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1088(CX), Y8 VMOVDQU 1120(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1152(CX), Y8 VMOVDQU 1184(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1216(CX), Y8 VMOVDQU 1248(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1280(CX), Y8 VMOVDQU 1312(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 3 to 7 outputs VMOVDQU (R8), Y10 @@ -53951,44 +49099,37 @@ mulAvxTwo_9x7_loop: VMOVDQU 1376(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1408(CX), Y8 VMOVDQU 1440(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1472(CX), Y8 VMOVDQU 1504(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1536(CX), Y8 VMOVDQU 1568(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1600(CX), Y8 VMOVDQU 1632(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1664(CX), Y8 VMOVDQU 1696(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1728(CX), Y8 VMOVDQU 1760(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 4 to 7 outputs VMOVDQU (R9), Y10 @@ -54000,44 +49141,37 @@ mulAvxTwo_9x7_loop: VMOVDQU 1824(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1856(CX), Y8 VMOVDQU 1888(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1920(CX), Y8 VMOVDQU 1952(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1984(CX), Y8 VMOVDQU 2016(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2048(CX), Y8 VMOVDQU 2080(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 2112(CX), Y8 VMOVDQU 2144(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 2176(CX), Y8 VMOVDQU 2208(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 5 to 7 outputs VMOVDQU (R10), Y10 @@ -54049,44 +49183,37 @@ mulAvxTwo_9x7_loop: VMOVDQU 2272(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 2304(CX), Y8 VMOVDQU 2336(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 2368(CX), Y8 VMOVDQU 2400(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 2432(CX), Y8 VMOVDQU 2464(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2496(CX), Y8 VMOVDQU 2528(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 2560(CX), Y8 VMOVDQU 2592(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 2624(CX), Y8 VMOVDQU 2656(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 6 to 7 outputs VMOVDQU (R11), Y10 @@ -54098,44 +49225,37 @@ mulAvxTwo_9x7_loop: VMOVDQU 2720(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 2752(CX), Y8 VMOVDQU 2784(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 2816(CX), Y8 VMOVDQU 2848(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 2880(CX), Y8 VMOVDQU 2912(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2944(CX), Y8 VMOVDQU 2976(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 3008(CX), Y8 VMOVDQU 3040(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 3072(CX), Y8 VMOVDQU 3104(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 7 to 7 outputs VMOVDQU (R12), Y10 @@ -54147,44 +49267,37 @@ mulAvxTwo_9x7_loop: VMOVDQU 3168(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 3200(CX), Y8 VMOVDQU 3232(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 3264(CX), Y8 VMOVDQU 3296(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 3328(CX), Y8 VMOVDQU 3360(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 3392(CX), Y8 VMOVDQU 3424(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 3456(CX), Y8 VMOVDQU 3488(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 3520(CX), Y8 VMOVDQU 3552(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 8 to 7 outputs VMOVDQU (DX), Y10 @@ -54196,44 +49309,37 @@ mulAvxTwo_9x7_loop: VMOVDQU 3616(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 3648(CX), Y8 VMOVDQU 3680(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 3712(CX), Y8 VMOVDQU 3744(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 3776(CX), Y8 VMOVDQU 3808(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 3840(CX), Y8 VMOVDQU 3872(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 3904(CX), Y8 VMOVDQU 3936(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 3968(CX), Y8 VMOVDQU 4000(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Store 7 outputs MOVQ (R13), R15 @@ -54261,7 +49367,7 @@ mulAvxTwo_9x7_end: RET // func mulAvxTwo_9x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x7Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -54311,56 +49417,49 @@ mulAvxTwo_9x7Xor_loop: VMOVDQU 32(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) MOVQ 24(R13), R15 VMOVDQU (R15)(R14*1), Y1 VMOVDQU 64(CX), Y8 VMOVDQU 96(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) MOVQ 48(R13), R15 VMOVDQU (R15)(R14*1), Y2 VMOVDQU 128(CX), Y8 VMOVDQU 160(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) MOVQ 72(R13), R15 VMOVDQU (R15)(R14*1), Y3 VMOVDQU 192(CX), Y8 VMOVDQU 224(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) MOVQ 96(R13), R15 VMOVDQU (R15)(R14*1), Y4 VMOVDQU 256(CX), Y8 VMOVDQU 288(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) MOVQ 120(R13), R15 VMOVDQU (R15)(R14*1), Y5 VMOVDQU 320(CX), Y8 VMOVDQU 352(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) MOVQ 144(R13), R15 VMOVDQU (R15)(R14*1), Y6 VMOVDQU 384(CX), Y8 VMOVDQU 416(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 1 to 7 outputs VMOVDQU (SI), Y10 @@ -54372,44 +49471,37 @@ mulAvxTwo_9x7Xor_loop: VMOVDQU 480(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 512(CX), Y8 VMOVDQU 544(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 576(CX), Y8 VMOVDQU 608(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 640(CX), Y8 VMOVDQU 672(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 704(CX), Y8 VMOVDQU 736(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 768(CX), Y8 VMOVDQU 800(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 832(CX), Y8 VMOVDQU 864(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 2 to 7 outputs VMOVDQU (DI), Y10 @@ -54421,44 +49513,37 @@ mulAvxTwo_9x7Xor_loop: VMOVDQU 928(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 960(CX), Y8 VMOVDQU 992(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1024(CX), Y8 VMOVDQU 1056(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1088(CX), Y8 VMOVDQU 1120(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1152(CX), Y8 VMOVDQU 1184(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1216(CX), Y8 VMOVDQU 1248(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1280(CX), Y8 VMOVDQU 1312(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 3 to 7 outputs VMOVDQU (R8), Y10 @@ -54470,44 +49555,37 @@ mulAvxTwo_9x7Xor_loop: VMOVDQU 1376(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1408(CX), Y8 VMOVDQU 1440(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1472(CX), Y8 VMOVDQU 1504(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1536(CX), Y8 VMOVDQU 1568(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1600(CX), Y8 VMOVDQU 1632(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1664(CX), Y8 VMOVDQU 1696(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1728(CX), Y8 VMOVDQU 1760(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 4 to 7 outputs VMOVDQU (R9), Y10 @@ -54519,44 +49597,37 @@ mulAvxTwo_9x7Xor_loop: VMOVDQU 1824(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1856(CX), Y8 VMOVDQU 1888(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1920(CX), Y8 VMOVDQU 1952(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1984(CX), Y8 VMOVDQU 2016(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2048(CX), Y8 VMOVDQU 2080(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 2112(CX), Y8 VMOVDQU 2144(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 2176(CX), Y8 VMOVDQU 2208(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 5 to 7 outputs VMOVDQU (R10), Y10 @@ -54568,44 +49639,37 @@ mulAvxTwo_9x7Xor_loop: VMOVDQU 2272(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 2304(CX), Y8 VMOVDQU 2336(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 2368(CX), Y8 VMOVDQU 2400(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 2432(CX), Y8 VMOVDQU 2464(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2496(CX), Y8 VMOVDQU 2528(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 2560(CX), Y8 VMOVDQU 2592(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 2624(CX), Y8 VMOVDQU 2656(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 6 to 7 outputs VMOVDQU (R11), Y10 @@ -54617,44 +49681,37 @@ mulAvxTwo_9x7Xor_loop: VMOVDQU 2720(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 2752(CX), Y8 VMOVDQU 2784(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 2816(CX), Y8 VMOVDQU 2848(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 2880(CX), Y8 VMOVDQU 2912(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2944(CX), Y8 VMOVDQU 2976(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 3008(CX), Y8 VMOVDQU 3040(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 3072(CX), Y8 VMOVDQU 3104(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 7 to 7 outputs VMOVDQU (R12), Y10 @@ -54666,44 +49723,37 @@ mulAvxTwo_9x7Xor_loop: VMOVDQU 3168(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 3200(CX), Y8 VMOVDQU 3232(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 3264(CX), Y8 VMOVDQU 3296(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 3328(CX), Y8 VMOVDQU 3360(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 3392(CX), Y8 VMOVDQU 3424(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 3456(CX), Y8 VMOVDQU 3488(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 3520(CX), Y8 VMOVDQU 3552(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 8 to 7 outputs VMOVDQU (DX), Y10 @@ -54715,44 +49765,37 @@ mulAvxTwo_9x7Xor_loop: VMOVDQU 3616(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 3648(CX), Y8 VMOVDQU 3680(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 3712(CX), Y8 VMOVDQU 3744(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 3776(CX), Y8 VMOVDQU 3808(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 3840(CX), Y8 VMOVDQU 3872(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 3904(CX), Y8 VMOVDQU 3936(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 3968(CX), Y8 VMOVDQU 4000(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Store 7 outputs MOVQ (R13), R15 @@ -54780,7 +49823,7 @@ mulAvxTwo_9x7Xor_end: RET // func mulAvxTwo_9x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x8(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -54875,50 +49918,42 @@ mulAvxTwo_9x8_loop: VMOVDQU 544(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 576(CX), Y9 VMOVDQU 608(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y9 VMOVDQU 672(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 704(CX), Y9 VMOVDQU 736(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 768(CX), Y9 VMOVDQU 800(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 832(CX), Y9 VMOVDQU 864(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 896(CX), Y9 VMOVDQU 928(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 960(CX), Y9 VMOVDQU 992(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 2 to 8 outputs VMOVDQU (DI), Y11 @@ -54930,50 +49965,42 @@ mulAvxTwo_9x8_loop: VMOVDQU 1056(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1088(CX), Y9 VMOVDQU 1120(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1152(CX), Y9 VMOVDQU 1184(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1216(CX), Y9 VMOVDQU 1248(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y9 VMOVDQU 1312(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1344(CX), Y9 VMOVDQU 1376(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1408(CX), Y9 VMOVDQU 1440(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1472(CX), Y9 VMOVDQU 1504(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 3 to 8 outputs VMOVDQU (R8), Y11 @@ -54985,50 +50012,42 @@ mulAvxTwo_9x8_loop: VMOVDQU 1568(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1600(CX), Y9 VMOVDQU 1632(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1664(CX), Y9 VMOVDQU 1696(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1728(CX), Y9 VMOVDQU 1760(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1792(CX), Y9 VMOVDQU 1824(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1856(CX), Y9 VMOVDQU 1888(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1920(CX), Y9 VMOVDQU 1952(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1984(CX), Y9 VMOVDQU 2016(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 4 to 8 outputs VMOVDQU (R9), Y11 @@ -55040,50 +50059,42 @@ mulAvxTwo_9x8_loop: VMOVDQU 2080(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 2112(CX), Y9 VMOVDQU 2144(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 2176(CX), Y9 VMOVDQU 2208(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 2240(CX), Y9 VMOVDQU 2272(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 2304(CX), Y9 VMOVDQU 2336(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 2368(CX), Y9 VMOVDQU 2400(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 2432(CX), Y9 VMOVDQU 2464(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 2496(CX), Y9 VMOVDQU 2528(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 5 to 8 outputs VMOVDQU (R10), Y11 @@ -55095,50 +50106,42 @@ mulAvxTwo_9x8_loop: VMOVDQU 2592(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 2624(CX), Y9 VMOVDQU 2656(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 2688(CX), Y9 VMOVDQU 2720(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 2752(CX), Y9 VMOVDQU 2784(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 2816(CX), Y9 VMOVDQU 2848(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 2880(CX), Y9 VMOVDQU 2912(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 2944(CX), Y9 VMOVDQU 2976(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 3008(CX), Y9 VMOVDQU 3040(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 6 to 8 outputs VMOVDQU (R11), Y11 @@ -55150,50 +50153,42 @@ mulAvxTwo_9x8_loop: VMOVDQU 3104(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 3136(CX), Y9 VMOVDQU 3168(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 3200(CX), Y9 VMOVDQU 3232(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 3264(CX), Y9 VMOVDQU 3296(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 3328(CX), Y9 VMOVDQU 3360(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 3392(CX), Y9 VMOVDQU 3424(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 3456(CX), Y9 VMOVDQU 3488(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 3520(CX), Y9 VMOVDQU 3552(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 7 to 8 outputs VMOVDQU (R12), Y11 @@ -55205,50 +50200,42 @@ mulAvxTwo_9x8_loop: VMOVDQU 3616(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 3648(CX), Y9 VMOVDQU 3680(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 3712(CX), Y9 VMOVDQU 3744(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 3776(CX), Y9 VMOVDQU 3808(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 3840(CX), Y9 VMOVDQU 3872(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 3904(CX), Y9 VMOVDQU 3936(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 3968(CX), Y9 VMOVDQU 4000(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 4032(CX), Y9 VMOVDQU 4064(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 8 to 8 outputs VMOVDQU (DX), Y11 @@ -55260,50 +50247,42 @@ mulAvxTwo_9x8_loop: VMOVDQU 4128(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 4160(CX), Y9 VMOVDQU 4192(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 4224(CX), Y9 VMOVDQU 4256(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 4288(CX), Y9 VMOVDQU 4320(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 4352(CX), Y9 VMOVDQU 4384(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 4416(CX), Y9 VMOVDQU 4448(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 4480(CX), Y9 VMOVDQU 4512(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 4544(CX), Y9 VMOVDQU 4576(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Store 8 outputs MOVQ (R13), R15 @@ -55333,7 +50312,7 @@ mulAvxTwo_9x8_end: RET // func mulAvxTwo_9x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x8Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -55383,64 +50362,56 @@ mulAvxTwo_9x8Xor_loop: VMOVDQU 32(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) MOVQ 24(R13), R15 VMOVDQU (R15)(R14*1), Y1 VMOVDQU 64(CX), Y9 VMOVDQU 96(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) MOVQ 48(R13), R15 VMOVDQU (R15)(R14*1), Y2 VMOVDQU 128(CX), Y9 VMOVDQU 160(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) MOVQ 72(R13), R15 VMOVDQU (R15)(R14*1), Y3 VMOVDQU 192(CX), Y9 VMOVDQU 224(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) MOVQ 96(R13), R15 VMOVDQU (R15)(R14*1), Y4 VMOVDQU 256(CX), Y9 VMOVDQU 288(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) MOVQ 120(R13), R15 VMOVDQU (R15)(R14*1), Y5 VMOVDQU 320(CX), Y9 VMOVDQU 352(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) MOVQ 144(R13), R15 VMOVDQU (R15)(R14*1), Y6 VMOVDQU 384(CX), Y9 VMOVDQU 416(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) MOVQ 168(R13), R15 VMOVDQU (R15)(R14*1), Y7 VMOVDQU 448(CX), Y9 VMOVDQU 480(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 1 to 8 outputs VMOVDQU (SI), Y11 @@ -55452,50 +50423,42 @@ mulAvxTwo_9x8Xor_loop: VMOVDQU 544(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 576(CX), Y9 VMOVDQU 608(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y9 VMOVDQU 672(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 704(CX), Y9 VMOVDQU 736(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 768(CX), Y9 VMOVDQU 800(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 832(CX), Y9 VMOVDQU 864(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 896(CX), Y9 VMOVDQU 928(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 960(CX), Y9 VMOVDQU 992(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 2 to 8 outputs VMOVDQU (DI), Y11 @@ -55507,50 +50470,42 @@ mulAvxTwo_9x8Xor_loop: VMOVDQU 1056(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1088(CX), Y9 VMOVDQU 1120(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1152(CX), Y9 VMOVDQU 1184(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1216(CX), Y9 VMOVDQU 1248(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y9 VMOVDQU 1312(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1344(CX), Y9 VMOVDQU 1376(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1408(CX), Y9 VMOVDQU 1440(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1472(CX), Y9 VMOVDQU 1504(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 3 to 8 outputs VMOVDQU (R8), Y11 @@ -55562,50 +50517,42 @@ mulAvxTwo_9x8Xor_loop: VMOVDQU 1568(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1600(CX), Y9 VMOVDQU 1632(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1664(CX), Y9 VMOVDQU 1696(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1728(CX), Y9 VMOVDQU 1760(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1792(CX), Y9 VMOVDQU 1824(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1856(CX), Y9 VMOVDQU 1888(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1920(CX), Y9 VMOVDQU 1952(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1984(CX), Y9 VMOVDQU 2016(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 4 to 8 outputs VMOVDQU (R9), Y11 @@ -55617,50 +50564,42 @@ mulAvxTwo_9x8Xor_loop: VMOVDQU 2080(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 2112(CX), Y9 VMOVDQU 2144(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 2176(CX), Y9 VMOVDQU 2208(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 2240(CX), Y9 VMOVDQU 2272(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 2304(CX), Y9 VMOVDQU 2336(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 2368(CX), Y9 VMOVDQU 2400(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 2432(CX), Y9 VMOVDQU 2464(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 2496(CX), Y9 VMOVDQU 2528(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 5 to 8 outputs VMOVDQU (R10), Y11 @@ -55672,50 +50611,42 @@ mulAvxTwo_9x8Xor_loop: VMOVDQU 2592(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 2624(CX), Y9 VMOVDQU 2656(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 2688(CX), Y9 VMOVDQU 2720(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 2752(CX), Y9 VMOVDQU 2784(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 2816(CX), Y9 VMOVDQU 2848(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 2880(CX), Y9 VMOVDQU 2912(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 2944(CX), Y9 VMOVDQU 2976(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 3008(CX), Y9 VMOVDQU 3040(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 6 to 8 outputs VMOVDQU (R11), Y11 @@ -55727,50 +50658,42 @@ mulAvxTwo_9x8Xor_loop: VMOVDQU 3104(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 3136(CX), Y9 VMOVDQU 3168(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 3200(CX), Y9 VMOVDQU 3232(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 3264(CX), Y9 VMOVDQU 3296(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 3328(CX), Y9 VMOVDQU 3360(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 3392(CX), Y9 VMOVDQU 3424(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 3456(CX), Y9 VMOVDQU 3488(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 3520(CX), Y9 VMOVDQU 3552(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 7 to 8 outputs VMOVDQU (R12), Y11 @@ -55782,50 +50705,42 @@ mulAvxTwo_9x8Xor_loop: VMOVDQU 3616(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 3648(CX), Y9 VMOVDQU 3680(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 3712(CX), Y9 VMOVDQU 3744(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 3776(CX), Y9 VMOVDQU 3808(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 3840(CX), Y9 VMOVDQU 3872(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 3904(CX), Y9 VMOVDQU 3936(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 3968(CX), Y9 VMOVDQU 4000(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 4032(CX), Y9 VMOVDQU 4064(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 8 to 8 outputs VMOVDQU (DX), Y11 @@ -55837,50 +50752,42 @@ mulAvxTwo_9x8Xor_loop: VMOVDQU 4128(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 4160(CX), Y9 VMOVDQU 4192(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 4224(CX), Y9 VMOVDQU 4256(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 4288(CX), Y9 VMOVDQU 4320(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 4352(CX), Y9 VMOVDQU 4384(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 4416(CX), Y9 VMOVDQU 4448(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 4480(CX), Y9 VMOVDQU 4512(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 4544(CX), Y9 VMOVDQU 4576(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Store 8 outputs MOVQ (R13), R15 @@ -55910,7 +50817,7 @@ mulAvxTwo_9x8Xor_end: RET // func mulAvxTwo_9x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x9(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -56010,56 +50917,47 @@ mulAvxTwo_9x9_loop: VMOVDQU 608(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 640(CX), Y10 VMOVDQU 672(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 704(CX), Y10 VMOVDQU 736(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 768(CX), Y10 VMOVDQU 800(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 832(CX), Y10 VMOVDQU 864(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 896(CX), Y10 VMOVDQU 928(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 960(CX), Y10 VMOVDQU 992(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1024(CX), Y10 VMOVDQU 1056(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1088(CX), Y10 VMOVDQU 1120(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 2 to 9 outputs VMOVDQU (DI), Y12 @@ -56071,56 +50969,47 @@ mulAvxTwo_9x9_loop: VMOVDQU 1184(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1216(CX), Y10 VMOVDQU 1248(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1280(CX), Y10 VMOVDQU 1312(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1344(CX), Y10 VMOVDQU 1376(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1408(CX), Y10 VMOVDQU 1440(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 1472(CX), Y10 VMOVDQU 1504(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 1536(CX), Y10 VMOVDQU 1568(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1600(CX), Y10 VMOVDQU 1632(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1664(CX), Y10 VMOVDQU 1696(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 3 to 9 outputs VMOVDQU (R8), Y12 @@ -56132,56 +51021,47 @@ mulAvxTwo_9x9_loop: VMOVDQU 1760(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1792(CX), Y10 VMOVDQU 1824(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1856(CX), Y10 VMOVDQU 1888(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1920(CX), Y10 VMOVDQU 1952(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1984(CX), Y10 VMOVDQU 2016(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2048(CX), Y10 VMOVDQU 2080(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2112(CX), Y10 VMOVDQU 2144(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2176(CX), Y10 VMOVDQU 2208(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2240(CX), Y10 VMOVDQU 2272(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 4 to 9 outputs VMOVDQU (R9), Y12 @@ -56193,56 +51073,47 @@ mulAvxTwo_9x9_loop: VMOVDQU 2336(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 2368(CX), Y10 VMOVDQU 2400(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 2432(CX), Y10 VMOVDQU 2464(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 2496(CX), Y10 VMOVDQU 2528(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 2560(CX), Y10 VMOVDQU 2592(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2624(CX), Y10 VMOVDQU 2656(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2688(CX), Y10 VMOVDQU 2720(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2752(CX), Y10 VMOVDQU 2784(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2816(CX), Y10 VMOVDQU 2848(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 5 to 9 outputs VMOVDQU (R10), Y12 @@ -56254,56 +51125,47 @@ mulAvxTwo_9x9_loop: VMOVDQU 2912(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 2944(CX), Y10 VMOVDQU 2976(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 3008(CX), Y10 VMOVDQU 3040(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 3072(CX), Y10 VMOVDQU 3104(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 3136(CX), Y10 VMOVDQU 3168(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 3200(CX), Y10 VMOVDQU 3232(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 3264(CX), Y10 VMOVDQU 3296(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 3328(CX), Y10 VMOVDQU 3360(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 3392(CX), Y10 VMOVDQU 3424(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 6 to 9 outputs VMOVDQU (R11), Y12 @@ -56315,56 +51177,47 @@ mulAvxTwo_9x9_loop: VMOVDQU 3488(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 3520(CX), Y10 VMOVDQU 3552(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 3584(CX), Y10 VMOVDQU 3616(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 3648(CX), Y10 VMOVDQU 3680(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 3712(CX), Y10 VMOVDQU 3744(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 3776(CX), Y10 VMOVDQU 3808(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 3840(CX), Y10 VMOVDQU 3872(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 3904(CX), Y10 VMOVDQU 3936(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 3968(CX), Y10 VMOVDQU 4000(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 7 to 9 outputs VMOVDQU (R12), Y12 @@ -56376,56 +51229,47 @@ mulAvxTwo_9x9_loop: VMOVDQU 4064(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 4096(CX), Y10 VMOVDQU 4128(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 4160(CX), Y10 VMOVDQU 4192(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 4224(CX), Y10 VMOVDQU 4256(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 4288(CX), Y10 VMOVDQU 4320(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 4352(CX), Y10 VMOVDQU 4384(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 4416(CX), Y10 VMOVDQU 4448(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 4480(CX), Y10 VMOVDQU 4512(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 4544(CX), Y10 VMOVDQU 4576(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 8 to 9 outputs VMOVDQU (DX), Y12 @@ -56437,56 +51281,47 @@ mulAvxTwo_9x9_loop: VMOVDQU 4640(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 4672(CX), Y10 VMOVDQU 4704(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 4736(CX), Y10 VMOVDQU 4768(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 4800(CX), Y10 VMOVDQU 4832(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 4864(CX), Y10 VMOVDQU 4896(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 4928(CX), Y10 VMOVDQU 4960(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 4992(CX), Y10 VMOVDQU 5024(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 5056(CX), Y10 VMOVDQU 5088(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 5120(CX), Y10 VMOVDQU 5152(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Store 9 outputs MOVQ (R13), R15 @@ -56518,7 +51353,7 @@ mulAvxTwo_9x9_end: RET // func mulAvxTwo_9x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x9Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -56568,72 +51403,63 @@ mulAvxTwo_9x9Xor_loop: VMOVDQU 32(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) MOVQ 24(R13), R15 VMOVDQU (R15)(R14*1), Y1 VMOVDQU 64(CX), Y10 VMOVDQU 96(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) MOVQ 48(R13), R15 VMOVDQU (R15)(R14*1), Y2 VMOVDQU 128(CX), Y10 VMOVDQU 160(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) MOVQ 72(R13), R15 VMOVDQU (R15)(R14*1), Y3 VMOVDQU 192(CX), Y10 VMOVDQU 224(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) MOVQ 96(R13), R15 VMOVDQU (R15)(R14*1), Y4 VMOVDQU 256(CX), Y10 VMOVDQU 288(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) MOVQ 120(R13), R15 VMOVDQU (R15)(R14*1), Y5 VMOVDQU 320(CX), Y10 VMOVDQU 352(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) MOVQ 144(R13), R15 VMOVDQU (R15)(R14*1), Y6 VMOVDQU 384(CX), Y10 VMOVDQU 416(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) MOVQ 168(R13), R15 VMOVDQU (R15)(R14*1), Y7 VMOVDQU 448(CX), Y10 VMOVDQU 480(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) MOVQ 192(R13), R15 VMOVDQU (R15)(R14*1), Y8 VMOVDQU 512(CX), Y10 VMOVDQU 544(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 1 to 9 outputs VMOVDQU (SI), Y12 @@ -56645,56 +51471,47 @@ mulAvxTwo_9x9Xor_loop: VMOVDQU 608(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 640(CX), Y10 VMOVDQU 672(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 704(CX), Y10 VMOVDQU 736(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 768(CX), Y10 VMOVDQU 800(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 832(CX), Y10 VMOVDQU 864(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 896(CX), Y10 VMOVDQU 928(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 960(CX), Y10 VMOVDQU 992(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1024(CX), Y10 VMOVDQU 1056(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1088(CX), Y10 VMOVDQU 1120(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 2 to 9 outputs VMOVDQU (DI), Y12 @@ -56706,56 +51523,47 @@ mulAvxTwo_9x9Xor_loop: VMOVDQU 1184(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1216(CX), Y10 VMOVDQU 1248(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1280(CX), Y10 VMOVDQU 1312(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1344(CX), Y10 VMOVDQU 1376(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1408(CX), Y10 VMOVDQU 1440(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 1472(CX), Y10 VMOVDQU 1504(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 1536(CX), Y10 VMOVDQU 1568(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1600(CX), Y10 VMOVDQU 1632(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1664(CX), Y10 VMOVDQU 1696(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 3 to 9 outputs VMOVDQU (R8), Y12 @@ -56767,56 +51575,47 @@ mulAvxTwo_9x9Xor_loop: VMOVDQU 1760(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1792(CX), Y10 VMOVDQU 1824(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1856(CX), Y10 VMOVDQU 1888(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1920(CX), Y10 VMOVDQU 1952(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1984(CX), Y10 VMOVDQU 2016(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2048(CX), Y10 VMOVDQU 2080(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2112(CX), Y10 VMOVDQU 2144(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2176(CX), Y10 VMOVDQU 2208(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2240(CX), Y10 VMOVDQU 2272(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 4 to 9 outputs VMOVDQU (R9), Y12 @@ -56828,56 +51627,47 @@ mulAvxTwo_9x9Xor_loop: VMOVDQU 2336(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 2368(CX), Y10 VMOVDQU 2400(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 2432(CX), Y10 VMOVDQU 2464(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 2496(CX), Y10 VMOVDQU 2528(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 2560(CX), Y10 VMOVDQU 2592(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2624(CX), Y10 VMOVDQU 2656(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2688(CX), Y10 VMOVDQU 2720(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2752(CX), Y10 VMOVDQU 2784(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2816(CX), Y10 VMOVDQU 2848(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 5 to 9 outputs VMOVDQU (R10), Y12 @@ -56889,56 +51679,47 @@ mulAvxTwo_9x9Xor_loop: VMOVDQU 2912(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 2944(CX), Y10 VMOVDQU 2976(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 3008(CX), Y10 VMOVDQU 3040(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 3072(CX), Y10 VMOVDQU 3104(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 3136(CX), Y10 VMOVDQU 3168(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 3200(CX), Y10 VMOVDQU 3232(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 3264(CX), Y10 VMOVDQU 3296(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 3328(CX), Y10 VMOVDQU 3360(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 3392(CX), Y10 VMOVDQU 3424(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 6 to 9 outputs VMOVDQU (R11), Y12 @@ -56950,56 +51731,47 @@ mulAvxTwo_9x9Xor_loop: VMOVDQU 3488(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 3520(CX), Y10 VMOVDQU 3552(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 3584(CX), Y10 VMOVDQU 3616(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 3648(CX), Y10 VMOVDQU 3680(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 3712(CX), Y10 VMOVDQU 3744(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 3776(CX), Y10 VMOVDQU 3808(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 3840(CX), Y10 VMOVDQU 3872(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 3904(CX), Y10 VMOVDQU 3936(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 3968(CX), Y10 VMOVDQU 4000(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 7 to 9 outputs VMOVDQU (R12), Y12 @@ -57011,56 +51783,47 @@ mulAvxTwo_9x9Xor_loop: VMOVDQU 4064(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 4096(CX), Y10 VMOVDQU 4128(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 4160(CX), Y10 VMOVDQU 4192(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 4224(CX), Y10 VMOVDQU 4256(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 4288(CX), Y10 VMOVDQU 4320(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 4352(CX), Y10 VMOVDQU 4384(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 4416(CX), Y10 VMOVDQU 4448(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 4480(CX), Y10 VMOVDQU 4512(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 4544(CX), Y10 VMOVDQU 4576(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 8 to 9 outputs VMOVDQU (DX), Y12 @@ -57072,56 +51835,47 @@ mulAvxTwo_9x9Xor_loop: VMOVDQU 4640(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 4672(CX), Y10 VMOVDQU 4704(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 4736(CX), Y10 VMOVDQU 4768(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 4800(CX), Y10 VMOVDQU 4832(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 4864(CX), Y10 VMOVDQU 4896(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 4928(CX), Y10 VMOVDQU 4960(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 4992(CX), Y10 VMOVDQU 5024(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 5056(CX), Y10 VMOVDQU 5088(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 5120(CX), Y10 VMOVDQU 5152(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Store 9 outputs MOVQ (R13), R15 @@ -57153,7 +51907,7 @@ mulAvxTwo_9x9Xor_end: RET // func mulAvxTwo_9x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x10(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -57258,62 +52012,52 @@ mulAvxTwo_9x10_loop: VMOVDQU 672(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 704(CX), Y11 VMOVDQU 736(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 768(CX), Y11 VMOVDQU 800(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 832(CX), Y11 VMOVDQU 864(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 896(CX), Y11 VMOVDQU 928(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 960(CX), Y11 VMOVDQU 992(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1024(CX), Y11 VMOVDQU 1056(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1088(CX), Y11 VMOVDQU 1120(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1152(CX), Y11 VMOVDQU 1184(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1216(CX), Y11 VMOVDQU 1248(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 2 to 10 outputs VMOVDQU (DI), Y13 @@ -57325,62 +52069,52 @@ mulAvxTwo_9x10_loop: VMOVDQU 1312(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1344(CX), Y11 VMOVDQU 1376(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 1408(CX), Y11 VMOVDQU 1440(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 1472(CX), Y11 VMOVDQU 1504(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 1536(CX), Y11 VMOVDQU 1568(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 1600(CX), Y11 VMOVDQU 1632(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1664(CX), Y11 VMOVDQU 1696(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1728(CX), Y11 VMOVDQU 1760(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1792(CX), Y11 VMOVDQU 1824(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1856(CX), Y11 VMOVDQU 1888(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 3 to 10 outputs VMOVDQU (R8), Y13 @@ -57392,62 +52126,52 @@ mulAvxTwo_9x10_loop: VMOVDQU 1952(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1984(CX), Y11 VMOVDQU 2016(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2048(CX), Y11 VMOVDQU 2080(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2112(CX), Y11 VMOVDQU 2144(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2176(CX), Y11 VMOVDQU 2208(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2240(CX), Y11 VMOVDQU 2272(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2304(CX), Y11 VMOVDQU 2336(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 2368(CX), Y11 VMOVDQU 2400(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 2432(CX), Y11 VMOVDQU 2464(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 2496(CX), Y11 VMOVDQU 2528(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 4 to 10 outputs VMOVDQU (R9), Y13 @@ -57459,62 +52183,52 @@ mulAvxTwo_9x10_loop: VMOVDQU 2592(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 2624(CX), Y11 VMOVDQU 2656(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2688(CX), Y11 VMOVDQU 2720(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2752(CX), Y11 VMOVDQU 2784(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2816(CX), Y11 VMOVDQU 2848(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2880(CX), Y11 VMOVDQU 2912(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2944(CX), Y11 VMOVDQU 2976(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 3008(CX), Y11 VMOVDQU 3040(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 3072(CX), Y11 VMOVDQU 3104(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 3136(CX), Y11 VMOVDQU 3168(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 5 to 10 outputs VMOVDQU (R10), Y13 @@ -57526,62 +52240,52 @@ mulAvxTwo_9x10_loop: VMOVDQU 3232(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 3264(CX), Y11 VMOVDQU 3296(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 3328(CX), Y11 VMOVDQU 3360(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 3392(CX), Y11 VMOVDQU 3424(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 3456(CX), Y11 VMOVDQU 3488(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 3520(CX), Y11 VMOVDQU 3552(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 3584(CX), Y11 VMOVDQU 3616(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 3648(CX), Y11 VMOVDQU 3680(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 3712(CX), Y11 VMOVDQU 3744(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 3776(CX), Y11 VMOVDQU 3808(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 6 to 10 outputs VMOVDQU (R11), Y13 @@ -57593,62 +52297,52 @@ mulAvxTwo_9x10_loop: VMOVDQU 3872(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 3904(CX), Y11 VMOVDQU 3936(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 3968(CX), Y11 VMOVDQU 4000(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 4032(CX), Y11 VMOVDQU 4064(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 4096(CX), Y11 VMOVDQU 4128(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 4160(CX), Y11 VMOVDQU 4192(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 4224(CX), Y11 VMOVDQU 4256(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 4288(CX), Y11 VMOVDQU 4320(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 4352(CX), Y11 VMOVDQU 4384(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 4416(CX), Y11 VMOVDQU 4448(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 7 to 10 outputs VMOVDQU (R12), Y13 @@ -57660,62 +52354,52 @@ mulAvxTwo_9x10_loop: VMOVDQU 4512(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 4544(CX), Y11 VMOVDQU 4576(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 4608(CX), Y11 VMOVDQU 4640(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 4672(CX), Y11 VMOVDQU 4704(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 4736(CX), Y11 VMOVDQU 4768(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 4800(CX), Y11 VMOVDQU 4832(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 4864(CX), Y11 VMOVDQU 4896(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 4928(CX), Y11 VMOVDQU 4960(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 4992(CX), Y11 VMOVDQU 5024(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 5056(CX), Y11 VMOVDQU 5088(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 8 to 10 outputs VMOVDQU (DX), Y13 @@ -57727,62 +52411,52 @@ mulAvxTwo_9x10_loop: VMOVDQU 5152(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 5184(CX), Y11 VMOVDQU 5216(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 5248(CX), Y11 VMOVDQU 5280(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 5312(CX), Y11 VMOVDQU 5344(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 5376(CX), Y11 VMOVDQU 5408(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 5440(CX), Y11 VMOVDQU 5472(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 5504(CX), Y11 VMOVDQU 5536(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 5568(CX), Y11 VMOVDQU 5600(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 5632(CX), Y11 VMOVDQU 5664(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 5696(CX), Y11 VMOVDQU 5728(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Store 10 outputs MOVQ (R13), R15 @@ -57816,7 +52490,7 @@ mulAvxTwo_9x10_end: RET // func mulAvxTwo_9x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_9x10Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept on stack @@ -57866,80 +52540,70 @@ mulAvxTwo_9x10Xor_loop: VMOVDQU 32(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) MOVQ 24(R13), R15 VMOVDQU (R15)(R14*1), Y1 VMOVDQU 64(CX), Y11 VMOVDQU 96(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) MOVQ 48(R13), R15 VMOVDQU (R15)(R14*1), Y2 VMOVDQU 128(CX), Y11 VMOVDQU 160(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) MOVQ 72(R13), R15 VMOVDQU (R15)(R14*1), Y3 VMOVDQU 192(CX), Y11 VMOVDQU 224(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) MOVQ 96(R13), R15 VMOVDQU (R15)(R14*1), Y4 VMOVDQU 256(CX), Y11 VMOVDQU 288(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) MOVQ 120(R13), R15 VMOVDQU (R15)(R14*1), Y5 VMOVDQU 320(CX), Y11 VMOVDQU 352(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) MOVQ 144(R13), R15 VMOVDQU (R15)(R14*1), Y6 VMOVDQU 384(CX), Y11 VMOVDQU 416(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) MOVQ 168(R13), R15 VMOVDQU (R15)(R14*1), Y7 VMOVDQU 448(CX), Y11 VMOVDQU 480(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) MOVQ 192(R13), R15 VMOVDQU (R15)(R14*1), Y8 VMOVDQU 512(CX), Y11 VMOVDQU 544(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) MOVQ 216(R13), R15 VMOVDQU (R15)(R14*1), Y9 VMOVDQU 576(CX), Y11 VMOVDQU 608(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 1 to 10 outputs VMOVDQU (SI), Y13 @@ -57951,62 +52615,52 @@ mulAvxTwo_9x10Xor_loop: VMOVDQU 672(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 704(CX), Y11 VMOVDQU 736(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 768(CX), Y11 VMOVDQU 800(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 832(CX), Y11 VMOVDQU 864(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 896(CX), Y11 VMOVDQU 928(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 960(CX), Y11 VMOVDQU 992(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1024(CX), Y11 VMOVDQU 1056(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1088(CX), Y11 VMOVDQU 1120(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1152(CX), Y11 VMOVDQU 1184(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1216(CX), Y11 VMOVDQU 1248(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 2 to 10 outputs VMOVDQU (DI), Y13 @@ -58018,62 +52672,52 @@ mulAvxTwo_9x10Xor_loop: VMOVDQU 1312(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1344(CX), Y11 VMOVDQU 1376(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 1408(CX), Y11 VMOVDQU 1440(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 1472(CX), Y11 VMOVDQU 1504(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 1536(CX), Y11 VMOVDQU 1568(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 1600(CX), Y11 VMOVDQU 1632(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1664(CX), Y11 VMOVDQU 1696(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1728(CX), Y11 VMOVDQU 1760(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1792(CX), Y11 VMOVDQU 1824(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1856(CX), Y11 VMOVDQU 1888(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 3 to 10 outputs VMOVDQU (R8), Y13 @@ -58085,62 +52729,52 @@ mulAvxTwo_9x10Xor_loop: VMOVDQU 1952(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1984(CX), Y11 VMOVDQU 2016(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2048(CX), Y11 VMOVDQU 2080(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2112(CX), Y11 VMOVDQU 2144(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2176(CX), Y11 VMOVDQU 2208(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2240(CX), Y11 VMOVDQU 2272(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2304(CX), Y11 VMOVDQU 2336(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 2368(CX), Y11 VMOVDQU 2400(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 2432(CX), Y11 VMOVDQU 2464(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 2496(CX), Y11 VMOVDQU 2528(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 4 to 10 outputs VMOVDQU (R9), Y13 @@ -58152,62 +52786,52 @@ mulAvxTwo_9x10Xor_loop: VMOVDQU 2592(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 2624(CX), Y11 VMOVDQU 2656(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2688(CX), Y11 VMOVDQU 2720(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2752(CX), Y11 VMOVDQU 2784(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2816(CX), Y11 VMOVDQU 2848(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2880(CX), Y11 VMOVDQU 2912(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2944(CX), Y11 VMOVDQU 2976(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 3008(CX), Y11 VMOVDQU 3040(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 3072(CX), Y11 VMOVDQU 3104(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 3136(CX), Y11 VMOVDQU 3168(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 5 to 10 outputs VMOVDQU (R10), Y13 @@ -58219,62 +52843,52 @@ mulAvxTwo_9x10Xor_loop: VMOVDQU 3232(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 3264(CX), Y11 VMOVDQU 3296(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 3328(CX), Y11 VMOVDQU 3360(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 3392(CX), Y11 VMOVDQU 3424(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 3456(CX), Y11 VMOVDQU 3488(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 3520(CX), Y11 VMOVDQU 3552(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 3584(CX), Y11 VMOVDQU 3616(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 3648(CX), Y11 VMOVDQU 3680(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 3712(CX), Y11 VMOVDQU 3744(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 3776(CX), Y11 VMOVDQU 3808(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 6 to 10 outputs VMOVDQU (R11), Y13 @@ -58286,62 +52900,52 @@ mulAvxTwo_9x10Xor_loop: VMOVDQU 3872(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 3904(CX), Y11 VMOVDQU 3936(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 3968(CX), Y11 VMOVDQU 4000(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 4032(CX), Y11 VMOVDQU 4064(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 4096(CX), Y11 VMOVDQU 4128(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 4160(CX), Y11 VMOVDQU 4192(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 4224(CX), Y11 VMOVDQU 4256(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 4288(CX), Y11 VMOVDQU 4320(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 4352(CX), Y11 VMOVDQU 4384(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 4416(CX), Y11 VMOVDQU 4448(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 7 to 10 outputs VMOVDQU (R12), Y13 @@ -58353,62 +52957,52 @@ mulAvxTwo_9x10Xor_loop: VMOVDQU 4512(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 4544(CX), Y11 VMOVDQU 4576(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 4608(CX), Y11 VMOVDQU 4640(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 4672(CX), Y11 VMOVDQU 4704(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 4736(CX), Y11 VMOVDQU 4768(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 4800(CX), Y11 VMOVDQU 4832(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 4864(CX), Y11 VMOVDQU 4896(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 4928(CX), Y11 VMOVDQU 4960(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 4992(CX), Y11 VMOVDQU 5024(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 5056(CX), Y11 VMOVDQU 5088(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 8 to 10 outputs VMOVDQU (DX), Y13 @@ -58420,62 +53014,52 @@ mulAvxTwo_9x10Xor_loop: VMOVDQU 5152(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 5184(CX), Y11 VMOVDQU 5216(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 5248(CX), Y11 VMOVDQU 5280(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 5312(CX), Y11 VMOVDQU 5344(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 5376(CX), Y11 VMOVDQU 5408(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 5440(CX), Y11 VMOVDQU 5472(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 5504(CX), Y11 VMOVDQU 5536(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 5568(CX), Y11 VMOVDQU 5600(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 5632(CX), Y11 VMOVDQU 5664(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 5696(CX), Y11 VMOVDQU 5728(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Store 10 outputs MOVQ (R13), R15 @@ -58509,7 +53093,7 @@ mulAvxTwo_9x10Xor_end: RET // func mulAvxTwo_10x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x1(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -58575,8 +53159,7 @@ mulAvxTwo_10x1_loop: VMOVDQU 96(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 2 to 1 outputs VMOVDQU (DI), Y4 @@ -58588,8 +53171,7 @@ mulAvxTwo_10x1_loop: VMOVDQU 160(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 3 to 1 outputs VMOVDQU (R8), Y4 @@ -58601,8 +53183,7 @@ mulAvxTwo_10x1_loop: VMOVDQU 224(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 4 to 1 outputs VMOVDQU (R9), Y4 @@ -58614,8 +53195,7 @@ mulAvxTwo_10x1_loop: VMOVDQU 288(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 5 to 1 outputs VMOVDQU (R10), Y4 @@ -58627,8 +53207,7 @@ mulAvxTwo_10x1_loop: VMOVDQU 352(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 6 to 1 outputs VMOVDQU (R11), Y4 @@ -58640,8 +53219,7 @@ mulAvxTwo_10x1_loop: VMOVDQU 416(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 7 to 1 outputs VMOVDQU (R12), Y4 @@ -58653,8 +53231,7 @@ mulAvxTwo_10x1_loop: VMOVDQU 480(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 8 to 1 outputs VMOVDQU (R13), Y4 @@ -58666,8 +53243,7 @@ mulAvxTwo_10x1_loop: VMOVDQU 544(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 9 to 1 outputs VMOVDQU (DX), Y4 @@ -58679,8 +53255,7 @@ mulAvxTwo_10x1_loop: VMOVDQU 608(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Store 1 outputs VMOVDQU Y0, (R14) @@ -58695,7 +53270,7 @@ mulAvxTwo_10x1_end: RET // func mulAvxTwo_10x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x1_64(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -58775,10 +53350,8 @@ mulAvxTwo_10x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 2 to 1 outputs VMOVDQU (DI), Y6 @@ -58796,10 +53369,8 @@ mulAvxTwo_10x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 3 to 1 outputs VMOVDQU (R8), Y6 @@ -58817,10 +53388,8 @@ mulAvxTwo_10x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 4 to 1 outputs VMOVDQU (R9), Y6 @@ -58838,10 +53407,8 @@ mulAvxTwo_10x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 5 to 1 outputs VMOVDQU (R10), Y6 @@ -58859,10 +53426,8 @@ mulAvxTwo_10x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 6 to 1 outputs VMOVDQU (R11), Y6 @@ -58880,10 +53445,8 @@ mulAvxTwo_10x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 7 to 1 outputs VMOVDQU (R12), Y6 @@ -58901,10 +53464,8 @@ mulAvxTwo_10x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 8 to 1 outputs VMOVDQU (R13), Y6 @@ -58922,10 +53483,8 @@ mulAvxTwo_10x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 9 to 1 outputs VMOVDQU (DX), Y6 @@ -58943,10 +53502,8 @@ mulAvxTwo_10x1_64_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Store 1 outputs VMOVDQU Y0, (R14) @@ -58962,7 +53519,7 @@ mulAvxTwo_10x1_64_end: RET // func mulAvxTwo_10x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x1Xor(SB), NOSPLIT, $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -59017,8 +53574,7 @@ mulAvxTwo_10x1Xor_loop: VMOVDQU 32(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 1 to 1 outputs VMOVDQU (SI), Y4 @@ -59030,8 +53586,7 @@ mulAvxTwo_10x1Xor_loop: VMOVDQU 96(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 2 to 1 outputs VMOVDQU (DI), Y4 @@ -59043,8 +53598,7 @@ mulAvxTwo_10x1Xor_loop: VMOVDQU 160(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 3 to 1 outputs VMOVDQU (R8), Y4 @@ -59056,8 +53610,7 @@ mulAvxTwo_10x1Xor_loop: VMOVDQU 224(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 4 to 1 outputs VMOVDQU (R9), Y4 @@ -59069,8 +53622,7 @@ mulAvxTwo_10x1Xor_loop: VMOVDQU 288(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 5 to 1 outputs VMOVDQU (R10), Y4 @@ -59082,8 +53634,7 @@ mulAvxTwo_10x1Xor_loop: VMOVDQU 352(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 6 to 1 outputs VMOVDQU (R11), Y4 @@ -59095,8 +53646,7 @@ mulAvxTwo_10x1Xor_loop: VMOVDQU 416(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 7 to 1 outputs VMOVDQU (R12), Y4 @@ -59108,8 +53658,7 @@ mulAvxTwo_10x1Xor_loop: VMOVDQU 480(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 8 to 1 outputs VMOVDQU (R13), Y4 @@ -59121,8 +53670,7 @@ mulAvxTwo_10x1Xor_loop: VMOVDQU 544(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Load and process 32 bytes from input 9 to 1 outputs VMOVDQU (DX), Y4 @@ -59134,8 +53682,7 @@ mulAvxTwo_10x1Xor_loop: VMOVDQU 608(CX), Y3 VPSHUFB Y4, Y2, Y2 VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y2 - VPXOR Y2, Y0, Y0 + XOR3WAY( $0x00, Y2, Y3, Y0) // Store 1 outputs VMOVDQU Y0, (R14) @@ -59150,7 +53697,7 @@ mulAvxTwo_10x1Xor_end: RET // func mulAvxTwo_10x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x1_64Xor(SB), $0-88 // Loading no tables to registers // Destination kept in GP registers @@ -59215,10 +53762,8 @@ mulAvxTwo_10x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 1 to 1 outputs VMOVDQU (SI), Y6 @@ -59236,10 +53781,8 @@ mulAvxTwo_10x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 2 to 1 outputs VMOVDQU (DI), Y6 @@ -59257,10 +53800,8 @@ mulAvxTwo_10x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 3 to 1 outputs VMOVDQU (R8), Y6 @@ -59278,10 +53819,8 @@ mulAvxTwo_10x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 4 to 1 outputs VMOVDQU (R9), Y6 @@ -59299,10 +53838,8 @@ mulAvxTwo_10x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 5 to 1 outputs VMOVDQU (R10), Y6 @@ -59320,10 +53857,8 @@ mulAvxTwo_10x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 6 to 1 outputs VMOVDQU (R11), Y6 @@ -59341,10 +53876,8 @@ mulAvxTwo_10x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 7 to 1 outputs VMOVDQU (R12), Y6 @@ -59362,10 +53895,8 @@ mulAvxTwo_10x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 8 to 1 outputs VMOVDQU (R13), Y6 @@ -59383,10 +53914,8 @@ mulAvxTwo_10x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Load and process 64 bytes from input 9 to 1 outputs VMOVDQU (DX), Y6 @@ -59404,10 +53933,8 @@ mulAvxTwo_10x1_64Xor_loop: VPSHUFB Y6, Y3, Y3 VPSHUFB Y8, Y4, Y6 VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y5, Y6, Y5 - VPXOR Y3, Y0, Y0 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y0) + XOR3WAY( $0x00, Y5, Y6, Y1) // Store 1 outputs VMOVDQU Y0, (R14) @@ -59423,7 +53950,7 @@ mulAvxTwo_10x1_64Xor_end: RET // func mulAvxTwo_10x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x2(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -59496,14 +54023,12 @@ mulAvxTwo_10x2_loop: VMOVDQU 160(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 192(CX), Y3 VMOVDQU 224(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 2 to 2 outputs VMOVDQU (DI), Y5 @@ -59515,14 +54040,12 @@ mulAvxTwo_10x2_loop: VMOVDQU 288(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 320(CX), Y3 VMOVDQU 352(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 3 to 2 outputs VMOVDQU (R8), Y5 @@ -59534,14 +54057,12 @@ mulAvxTwo_10x2_loop: VMOVDQU 416(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 448(CX), Y3 VMOVDQU 480(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 4 to 2 outputs VMOVDQU (R9), Y5 @@ -59553,14 +54074,12 @@ mulAvxTwo_10x2_loop: VMOVDQU 544(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 576(CX), Y3 VMOVDQU 608(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 5 to 2 outputs VMOVDQU (R10), Y5 @@ -59572,14 +54091,12 @@ mulAvxTwo_10x2_loop: VMOVDQU 672(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 704(CX), Y3 VMOVDQU 736(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 6 to 2 outputs VMOVDQU (R11), Y5 @@ -59591,14 +54108,12 @@ mulAvxTwo_10x2_loop: VMOVDQU 800(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 832(CX), Y3 VMOVDQU 864(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 7 to 2 outputs VMOVDQU (R12), Y5 @@ -59610,14 +54125,12 @@ mulAvxTwo_10x2_loop: VMOVDQU 928(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 960(CX), Y3 VMOVDQU 992(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 8 to 2 outputs VMOVDQU (R13), Y5 @@ -59629,14 +54142,12 @@ mulAvxTwo_10x2_loop: VMOVDQU 1056(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 1088(CX), Y3 VMOVDQU 1120(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 9 to 2 outputs VMOVDQU (DX), Y5 @@ -59648,14 +54159,12 @@ mulAvxTwo_10x2_loop: VMOVDQU 1184(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 1216(CX), Y3 VMOVDQU 1248(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Store 2 outputs VMOVDQU Y0, (R15) @@ -59672,7 +54181,7 @@ mulAvxTwo_10x2_end: RET // func mulAvxTwo_10x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x2_64(SB), $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -59762,20 +54271,16 @@ mulAvxTwo_10x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 2 to 2 outputs VMOVDQU (DI), Y9 @@ -59793,20 +54298,16 @@ mulAvxTwo_10x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 3 to 2 outputs VMOVDQU (R8), Y9 @@ -59824,20 +54325,16 @@ mulAvxTwo_10x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 4 to 2 outputs VMOVDQU (R9), Y9 @@ -59855,20 +54352,16 @@ mulAvxTwo_10x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 5 to 2 outputs VMOVDQU (R10), Y9 @@ -59886,20 +54379,16 @@ mulAvxTwo_10x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 6 to 2 outputs VMOVDQU (R11), Y9 @@ -59917,20 +54406,16 @@ mulAvxTwo_10x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 832(CX), Y5 VMOVDQU 864(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 7 to 2 outputs VMOVDQU (R12), Y9 @@ -59948,20 +54433,16 @@ mulAvxTwo_10x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 960(CX), Y5 VMOVDQU 992(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 8 to 2 outputs VMOVDQU (R13), Y9 @@ -59979,20 +54460,16 @@ mulAvxTwo_10x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1088(CX), Y5 VMOVDQU 1120(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 9 to 2 outputs VMOVDQU (DX), Y9 @@ -60010,20 +54487,16 @@ mulAvxTwo_10x2_64_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1216(CX), Y5 VMOVDQU 1248(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Store 2 outputs VMOVDQU Y0, (R15) @@ -60042,7 +54515,7 @@ mulAvxTwo_10x2_64_end: RET // func mulAvxTwo_10x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x2Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -60099,15 +54572,13 @@ mulAvxTwo_10x2Xor_loop: VMOVDQU 32(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU (R14), Y1 VMOVDQU 64(CX), Y3 VMOVDQU 96(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 1 to 2 outputs VMOVDQU (SI), Y5 @@ -60119,14 +54590,12 @@ mulAvxTwo_10x2Xor_loop: VMOVDQU 160(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 192(CX), Y3 VMOVDQU 224(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 2 to 2 outputs VMOVDQU (DI), Y5 @@ -60138,14 +54607,12 @@ mulAvxTwo_10x2Xor_loop: VMOVDQU 288(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 320(CX), Y3 VMOVDQU 352(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 3 to 2 outputs VMOVDQU (R8), Y5 @@ -60157,14 +54624,12 @@ mulAvxTwo_10x2Xor_loop: VMOVDQU 416(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 448(CX), Y3 VMOVDQU 480(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 4 to 2 outputs VMOVDQU (R9), Y5 @@ -60176,14 +54641,12 @@ mulAvxTwo_10x2Xor_loop: VMOVDQU 544(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 576(CX), Y3 VMOVDQU 608(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 5 to 2 outputs VMOVDQU (R10), Y5 @@ -60195,14 +54658,12 @@ mulAvxTwo_10x2Xor_loop: VMOVDQU 672(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 704(CX), Y3 VMOVDQU 736(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 6 to 2 outputs VMOVDQU (R11), Y5 @@ -60214,14 +54675,12 @@ mulAvxTwo_10x2Xor_loop: VMOVDQU 800(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 832(CX), Y3 VMOVDQU 864(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 7 to 2 outputs VMOVDQU (R12), Y5 @@ -60233,14 +54692,12 @@ mulAvxTwo_10x2Xor_loop: VMOVDQU 928(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 960(CX), Y3 VMOVDQU 992(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 8 to 2 outputs VMOVDQU (R13), Y5 @@ -60252,14 +54709,12 @@ mulAvxTwo_10x2Xor_loop: VMOVDQU 1056(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 1088(CX), Y3 VMOVDQU 1120(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Load and process 32 bytes from input 9 to 2 outputs VMOVDQU (DX), Y5 @@ -60271,14 +54726,12 @@ mulAvxTwo_10x2Xor_loop: VMOVDQU 1184(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y0, Y0 + XOR3WAY( $0x00, Y3, Y4, Y0) VMOVDQU 1216(CX), Y3 VMOVDQU 1248(CX), Y4 VPSHUFB Y5, Y3, Y3 VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y3 - VPXOR Y3, Y1, Y1 + XOR3WAY( $0x00, Y3, Y4, Y1) // Store 2 outputs VMOVDQU Y0, (R15) @@ -60295,7 +54748,7 @@ mulAvxTwo_10x2Xor_end: RET // func mulAvxTwo_10x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x2_64Xor(SB), $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -60364,20 +54817,16 @@ mulAvxTwo_10x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 64(CX), Y5 VMOVDQU 96(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 1 to 2 outputs VMOVDQU (SI), Y9 @@ -60395,20 +54844,16 @@ mulAvxTwo_10x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 2 to 2 outputs VMOVDQU (DI), Y9 @@ -60426,20 +54871,16 @@ mulAvxTwo_10x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 3 to 2 outputs VMOVDQU (R8), Y9 @@ -60457,20 +54898,16 @@ mulAvxTwo_10x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 4 to 2 outputs VMOVDQU (R9), Y9 @@ -60488,20 +54925,16 @@ mulAvxTwo_10x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 5 to 2 outputs VMOVDQU (R10), Y9 @@ -60519,20 +54952,16 @@ mulAvxTwo_10x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 6 to 2 outputs VMOVDQU (R11), Y9 @@ -60550,20 +54979,16 @@ mulAvxTwo_10x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 832(CX), Y5 VMOVDQU 864(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 7 to 2 outputs VMOVDQU (R12), Y9 @@ -60581,20 +55006,16 @@ mulAvxTwo_10x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 960(CX), Y5 VMOVDQU 992(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 8 to 2 outputs VMOVDQU (R13), Y9 @@ -60612,20 +55033,16 @@ mulAvxTwo_10x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1088(CX), Y5 VMOVDQU 1120(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Load and process 64 bytes from input 9 to 2 outputs VMOVDQU (DX), Y9 @@ -60643,20 +55060,16 @@ mulAvxTwo_10x2_64Xor_loop: VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y0, Y0 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y0) + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1216(CX), Y5 VMOVDQU 1248(CX), Y6 VPSHUFB Y11, Y5, Y7 VPSHUFB Y9, Y5, Y5 VPSHUFB Y12, Y6, Y8 VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y2, Y2 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y2) + XOR3WAY( $0x00, Y7, Y8, Y3) // Store 2 outputs VMOVDQU Y0, (R15) @@ -60675,7 +55088,7 @@ mulAvxTwo_10x2_64Xor_end: RET // func mulAvxTwo_10x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x3(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -60757,20 +55170,17 @@ mulAvxTwo_10x3_loop: VMOVDQU 224(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 256(CX), Y4 VMOVDQU 288(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 320(CX), Y4 VMOVDQU 352(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 2 to 3 outputs VMOVDQU (SI), Y6 @@ -60782,20 +55192,17 @@ mulAvxTwo_10x3_loop: VMOVDQU 416(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 448(CX), Y4 VMOVDQU 480(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 512(CX), Y4 VMOVDQU 544(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 3 to 3 outputs VMOVDQU (DI), Y6 @@ -60807,20 +55214,17 @@ mulAvxTwo_10x3_loop: VMOVDQU 608(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 640(CX), Y4 VMOVDQU 672(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 704(CX), Y4 VMOVDQU 736(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 4 to 3 outputs VMOVDQU (R8), Y6 @@ -60832,20 +55236,17 @@ mulAvxTwo_10x3_loop: VMOVDQU 800(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 832(CX), Y4 VMOVDQU 864(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 896(CX), Y4 VMOVDQU 928(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 5 to 3 outputs VMOVDQU (R9), Y6 @@ -60857,20 +55258,17 @@ mulAvxTwo_10x3_loop: VMOVDQU 992(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1024(CX), Y4 VMOVDQU 1056(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1088(CX), Y4 VMOVDQU 1120(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 6 to 3 outputs VMOVDQU (R10), Y6 @@ -60882,20 +55280,17 @@ mulAvxTwo_10x3_loop: VMOVDQU 1184(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1216(CX), Y4 VMOVDQU 1248(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1280(CX), Y4 VMOVDQU 1312(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 7 to 3 outputs VMOVDQU (R11), Y6 @@ -60907,20 +55302,17 @@ mulAvxTwo_10x3_loop: VMOVDQU 1376(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1408(CX), Y4 VMOVDQU 1440(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1472(CX), Y4 VMOVDQU 1504(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 8 to 3 outputs VMOVDQU (R12), Y6 @@ -60932,20 +55324,17 @@ mulAvxTwo_10x3_loop: VMOVDQU 1568(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1600(CX), Y4 VMOVDQU 1632(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1664(CX), Y4 VMOVDQU 1696(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 9 to 3 outputs VMOVDQU (AX), Y6 @@ -60957,20 +55346,17 @@ mulAvxTwo_10x3_loop: VMOVDQU 1760(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1792(CX), Y4 VMOVDQU 1824(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1856(CX), Y4 VMOVDQU 1888(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Store 3 outputs VMOVDQU Y0, (R14) @@ -60989,7 +55375,7 @@ mulAvxTwo_10x3_end: RET // func mulAvxTwo_10x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x3_64(SB), $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -61093,30 +55479,24 @@ mulAvxTwo_10x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 2 to 3 outputs VMOVDQU (SI), Y11 @@ -61134,30 +55514,24 @@ mulAvxTwo_10x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 3 to 3 outputs VMOVDQU (DI), Y11 @@ -61175,30 +55549,24 @@ mulAvxTwo_10x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 4 to 3 outputs VMOVDQU (R8), Y11 @@ -61216,30 +55584,24 @@ mulAvxTwo_10x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 5 to 3 outputs VMOVDQU (R9), Y11 @@ -61257,30 +55619,24 @@ mulAvxTwo_10x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 6 to 3 outputs VMOVDQU (R10), Y11 @@ -61298,30 +55654,24 @@ mulAvxTwo_10x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1216(CX), Y7 VMOVDQU 1248(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y7 VMOVDQU 1312(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 7 to 3 outputs VMOVDQU (R11), Y11 @@ -61339,30 +55689,24 @@ mulAvxTwo_10x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1408(CX), Y7 VMOVDQU 1440(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1472(CX), Y7 VMOVDQU 1504(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 8 to 3 outputs VMOVDQU (R12), Y11 @@ -61380,30 +55724,24 @@ mulAvxTwo_10x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1600(CX), Y7 VMOVDQU 1632(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1664(CX), Y7 VMOVDQU 1696(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 9 to 3 outputs VMOVDQU (AX), Y11 @@ -61421,30 +55759,24 @@ mulAvxTwo_10x3_64_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1792(CX), Y7 VMOVDQU 1824(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1856(CX), Y7 VMOVDQU 1888(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Store 3 outputs VMOVDQU Y0, (R14) @@ -61466,7 +55798,7 @@ mulAvxTwo_10x3_64_end: RET // func mulAvxTwo_10x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x3Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -61527,22 +55859,19 @@ mulAvxTwo_10x3Xor_loop: VMOVDQU 32(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU (R15), Y1 VMOVDQU 64(CX), Y4 VMOVDQU 96(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU (R13), Y2 VMOVDQU 128(CX), Y4 VMOVDQU 160(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 1 to 3 outputs VMOVDQU (BX), Y6 @@ -61554,20 +55883,17 @@ mulAvxTwo_10x3Xor_loop: VMOVDQU 224(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 256(CX), Y4 VMOVDQU 288(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 320(CX), Y4 VMOVDQU 352(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 2 to 3 outputs VMOVDQU (SI), Y6 @@ -61579,20 +55905,17 @@ mulAvxTwo_10x3Xor_loop: VMOVDQU 416(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 448(CX), Y4 VMOVDQU 480(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 512(CX), Y4 VMOVDQU 544(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 3 to 3 outputs VMOVDQU (DI), Y6 @@ -61604,20 +55927,17 @@ mulAvxTwo_10x3Xor_loop: VMOVDQU 608(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 640(CX), Y4 VMOVDQU 672(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 704(CX), Y4 VMOVDQU 736(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 4 to 3 outputs VMOVDQU (R8), Y6 @@ -61629,20 +55949,17 @@ mulAvxTwo_10x3Xor_loop: VMOVDQU 800(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 832(CX), Y4 VMOVDQU 864(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 896(CX), Y4 VMOVDQU 928(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 5 to 3 outputs VMOVDQU (R9), Y6 @@ -61654,20 +55971,17 @@ mulAvxTwo_10x3Xor_loop: VMOVDQU 992(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1024(CX), Y4 VMOVDQU 1056(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1088(CX), Y4 VMOVDQU 1120(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 6 to 3 outputs VMOVDQU (R10), Y6 @@ -61679,20 +55993,17 @@ mulAvxTwo_10x3Xor_loop: VMOVDQU 1184(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1216(CX), Y4 VMOVDQU 1248(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1280(CX), Y4 VMOVDQU 1312(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 7 to 3 outputs VMOVDQU (R11), Y6 @@ -61704,20 +56015,17 @@ mulAvxTwo_10x3Xor_loop: VMOVDQU 1376(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1408(CX), Y4 VMOVDQU 1440(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1472(CX), Y4 VMOVDQU 1504(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 8 to 3 outputs VMOVDQU (R12), Y6 @@ -61729,20 +56037,17 @@ mulAvxTwo_10x3Xor_loop: VMOVDQU 1568(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1600(CX), Y4 VMOVDQU 1632(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1664(CX), Y4 VMOVDQU 1696(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Load and process 32 bytes from input 9 to 3 outputs VMOVDQU (AX), Y6 @@ -61754,20 +56059,17 @@ mulAvxTwo_10x3Xor_loop: VMOVDQU 1760(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y0, Y0 + XOR3WAY( $0x00, Y4, Y5, Y0) VMOVDQU 1792(CX), Y4 VMOVDQU 1824(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y1, Y1 + XOR3WAY( $0x00, Y4, Y5, Y1) VMOVDQU 1856(CX), Y4 VMOVDQU 1888(CX), Y5 VPSHUFB Y6, Y4, Y4 VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y4 - VPXOR Y4, Y2, Y2 + XOR3WAY( $0x00, Y4, Y5, Y2) // Store 3 outputs VMOVDQU Y0, (R14) @@ -61786,7 +56088,7 @@ mulAvxTwo_10x3Xor_end: RET // func mulAvxTwo_10x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x3_64Xor(SB), $8-88 // Loading no tables to registers // Destination kept in GP registers @@ -61863,30 +56165,24 @@ mulAvxTwo_10x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 64(CX), Y7 VMOVDQU 96(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 128(CX), Y7 VMOVDQU 160(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 1 to 3 outputs VMOVDQU (BX), Y11 @@ -61904,30 +56200,24 @@ mulAvxTwo_10x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 2 to 3 outputs VMOVDQU (SI), Y11 @@ -61945,30 +56235,24 @@ mulAvxTwo_10x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 3 to 3 outputs VMOVDQU (DI), Y11 @@ -61986,30 +56270,24 @@ mulAvxTwo_10x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 4 to 3 outputs VMOVDQU (R8), Y11 @@ -62027,30 +56305,24 @@ mulAvxTwo_10x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 5 to 3 outputs VMOVDQU (R9), Y11 @@ -62068,30 +56340,24 @@ mulAvxTwo_10x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 6 to 3 outputs VMOVDQU (R10), Y11 @@ -62109,30 +56375,24 @@ mulAvxTwo_10x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1216(CX), Y7 VMOVDQU 1248(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y7 VMOVDQU 1312(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 7 to 3 outputs VMOVDQU (R11), Y11 @@ -62150,30 +56410,24 @@ mulAvxTwo_10x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1408(CX), Y7 VMOVDQU 1440(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1472(CX), Y7 VMOVDQU 1504(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 8 to 3 outputs VMOVDQU (R12), Y11 @@ -62191,30 +56445,24 @@ mulAvxTwo_10x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1600(CX), Y7 VMOVDQU 1632(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1664(CX), Y7 VMOVDQU 1696(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Load and process 64 bytes from input 9 to 3 outputs VMOVDQU (AX), Y11 @@ -62232,30 +56480,24 @@ mulAvxTwo_10x3_64Xor_loop: VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y0, Y0 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y0) + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1792(CX), Y7 VMOVDQU 1824(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y2, Y2 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y2) + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1856(CX), Y7 VMOVDQU 1888(CX), Y8 VPSHUFB Y13, Y7, Y9 VPSHUFB Y11, Y7, Y7 VPSHUFB Y14, Y8, Y10 VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y9, Y10, Y9 - VPXOR Y7, Y4, Y4 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y4) + XOR3WAY( $0x00, Y9, Y10, Y5) // Store 3 outputs VMOVDQU Y0, (R14) @@ -62277,7 +56519,7 @@ mulAvxTwo_10x3_64Xor_end: RET // func mulAvxTwo_10x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x4(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept on stack @@ -62354,26 +56596,22 @@ mulAvxTwo_10x4_loop: VMOVDQU 288(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 384(CX), Y5 VMOVDQU 416(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 2 to 4 outputs VMOVDQU (DI), Y7 @@ -62385,26 +56623,22 @@ mulAvxTwo_10x4_loop: VMOVDQU 544(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 640(CX), Y5 VMOVDQU 672(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 3 to 4 outputs VMOVDQU (R8), Y7 @@ -62416,26 +56650,22 @@ mulAvxTwo_10x4_loop: VMOVDQU 800(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 832(CX), Y5 VMOVDQU 864(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 896(CX), Y5 VMOVDQU 928(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 960(CX), Y5 VMOVDQU 992(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 4 to 4 outputs VMOVDQU (R9), Y7 @@ -62447,26 +56677,22 @@ mulAvxTwo_10x4_loop: VMOVDQU 1056(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1088(CX), Y5 VMOVDQU 1120(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1152(CX), Y5 VMOVDQU 1184(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1216(CX), Y5 VMOVDQU 1248(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 5 to 4 outputs VMOVDQU (R10), Y7 @@ -62478,26 +56704,22 @@ mulAvxTwo_10x4_loop: VMOVDQU 1312(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1344(CX), Y5 VMOVDQU 1376(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1408(CX), Y5 VMOVDQU 1440(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1472(CX), Y5 VMOVDQU 1504(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 6 to 4 outputs VMOVDQU (R11), Y7 @@ -62509,26 +56731,22 @@ mulAvxTwo_10x4_loop: VMOVDQU 1568(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1600(CX), Y5 VMOVDQU 1632(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1664(CX), Y5 VMOVDQU 1696(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1728(CX), Y5 VMOVDQU 1760(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 7 to 4 outputs VMOVDQU (R12), Y7 @@ -62540,26 +56758,22 @@ mulAvxTwo_10x4_loop: VMOVDQU 1824(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1856(CX), Y5 VMOVDQU 1888(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1920(CX), Y5 VMOVDQU 1952(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1984(CX), Y5 VMOVDQU 2016(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 8 to 4 outputs VMOVDQU (R13), Y7 @@ -62571,26 +56785,22 @@ mulAvxTwo_10x4_loop: VMOVDQU 2080(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 2112(CX), Y5 VMOVDQU 2144(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 2176(CX), Y5 VMOVDQU 2208(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 2240(CX), Y5 VMOVDQU 2272(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 9 to 4 outputs VMOVDQU (DX), Y7 @@ -62602,26 +56812,22 @@ mulAvxTwo_10x4_loop: VMOVDQU 2336(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 2368(CX), Y5 VMOVDQU 2400(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 2432(CX), Y5 VMOVDQU 2464(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 2496(CX), Y5 VMOVDQU 2528(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Store 4 outputs MOVQ (R14), BP @@ -62643,7 +56849,7 @@ mulAvxTwo_10x4_end: RET // func mulAvxTwo_10x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x4Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept on stack @@ -62695,32 +56901,28 @@ mulAvxTwo_10x4Xor_loop: VMOVDQU 32(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) MOVQ 24(R14), BP VMOVDQU (BP)(R15*1), Y1 VMOVDQU 64(CX), Y5 VMOVDQU 96(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) MOVQ 48(R14), BP VMOVDQU (BP)(R15*1), Y2 VMOVDQU 128(CX), Y5 VMOVDQU 160(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) MOVQ 72(R14), BP VMOVDQU (BP)(R15*1), Y3 VMOVDQU 192(CX), Y5 VMOVDQU 224(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 1 to 4 outputs VMOVDQU (SI), Y7 @@ -62732,26 +56934,22 @@ mulAvxTwo_10x4Xor_loop: VMOVDQU 288(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 320(CX), Y5 VMOVDQU 352(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 384(CX), Y5 VMOVDQU 416(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 448(CX), Y5 VMOVDQU 480(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 2 to 4 outputs VMOVDQU (DI), Y7 @@ -62763,26 +56961,22 @@ mulAvxTwo_10x4Xor_loop: VMOVDQU 544(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 576(CX), Y5 VMOVDQU 608(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 640(CX), Y5 VMOVDQU 672(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 704(CX), Y5 VMOVDQU 736(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 3 to 4 outputs VMOVDQU (R8), Y7 @@ -62794,26 +56988,22 @@ mulAvxTwo_10x4Xor_loop: VMOVDQU 800(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 832(CX), Y5 VMOVDQU 864(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 896(CX), Y5 VMOVDQU 928(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 960(CX), Y5 VMOVDQU 992(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 4 to 4 outputs VMOVDQU (R9), Y7 @@ -62825,26 +57015,22 @@ mulAvxTwo_10x4Xor_loop: VMOVDQU 1056(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1088(CX), Y5 VMOVDQU 1120(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1152(CX), Y5 VMOVDQU 1184(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1216(CX), Y5 VMOVDQU 1248(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 5 to 4 outputs VMOVDQU (R10), Y7 @@ -62856,26 +57042,22 @@ mulAvxTwo_10x4Xor_loop: VMOVDQU 1312(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1344(CX), Y5 VMOVDQU 1376(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1408(CX), Y5 VMOVDQU 1440(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1472(CX), Y5 VMOVDQU 1504(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 6 to 4 outputs VMOVDQU (R11), Y7 @@ -62887,26 +57069,22 @@ mulAvxTwo_10x4Xor_loop: VMOVDQU 1568(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1600(CX), Y5 VMOVDQU 1632(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1664(CX), Y5 VMOVDQU 1696(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1728(CX), Y5 VMOVDQU 1760(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 7 to 4 outputs VMOVDQU (R12), Y7 @@ -62918,26 +57096,22 @@ mulAvxTwo_10x4Xor_loop: VMOVDQU 1824(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 1856(CX), Y5 VMOVDQU 1888(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 1920(CX), Y5 VMOVDQU 1952(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 1984(CX), Y5 VMOVDQU 2016(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 8 to 4 outputs VMOVDQU (R13), Y7 @@ -62949,26 +57123,22 @@ mulAvxTwo_10x4Xor_loop: VMOVDQU 2080(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 2112(CX), Y5 VMOVDQU 2144(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 2176(CX), Y5 VMOVDQU 2208(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 2240(CX), Y5 VMOVDQU 2272(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Load and process 32 bytes from input 9 to 4 outputs VMOVDQU (DX), Y7 @@ -62980,26 +57150,22 @@ mulAvxTwo_10x4Xor_loop: VMOVDQU 2336(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y0, Y0 + XOR3WAY( $0x00, Y5, Y6, Y0) VMOVDQU 2368(CX), Y5 VMOVDQU 2400(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y1, Y1 + XOR3WAY( $0x00, Y5, Y6, Y1) VMOVDQU 2432(CX), Y5 VMOVDQU 2464(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y2, Y2 + XOR3WAY( $0x00, Y5, Y6, Y2) VMOVDQU 2496(CX), Y5 VMOVDQU 2528(CX), Y6 VPSHUFB Y7, Y5, Y5 VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y5 - VPXOR Y5, Y3, Y3 + XOR3WAY( $0x00, Y5, Y6, Y3) // Store 4 outputs MOVQ (R14), BP @@ -63021,7 +57187,7 @@ mulAvxTwo_10x4Xor_end: RET // func mulAvxTwo_10x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x5(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept on stack @@ -63103,32 +57269,27 @@ mulAvxTwo_10x5_loop: VMOVDQU 352(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 384(CX), Y6 VMOVDQU 416(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 448(CX), Y6 VMOVDQU 480(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 512(CX), Y6 VMOVDQU 544(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 576(CX), Y6 VMOVDQU 608(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 2 to 5 outputs VMOVDQU (DI), Y8 @@ -63140,32 +57301,27 @@ mulAvxTwo_10x5_loop: VMOVDQU 672(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 704(CX), Y6 VMOVDQU 736(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 768(CX), Y6 VMOVDQU 800(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 832(CX), Y6 VMOVDQU 864(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 896(CX), Y6 VMOVDQU 928(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 3 to 5 outputs VMOVDQU (R8), Y8 @@ -63177,32 +57333,27 @@ mulAvxTwo_10x5_loop: VMOVDQU 992(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1024(CX), Y6 VMOVDQU 1056(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1088(CX), Y6 VMOVDQU 1120(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1152(CX), Y6 VMOVDQU 1184(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1216(CX), Y6 VMOVDQU 1248(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 4 to 5 outputs VMOVDQU (R9), Y8 @@ -63214,32 +57365,27 @@ mulAvxTwo_10x5_loop: VMOVDQU 1312(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1344(CX), Y6 VMOVDQU 1376(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1408(CX), Y6 VMOVDQU 1440(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1472(CX), Y6 VMOVDQU 1504(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1536(CX), Y6 VMOVDQU 1568(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 5 to 5 outputs VMOVDQU (R10), Y8 @@ -63251,32 +57397,27 @@ mulAvxTwo_10x5_loop: VMOVDQU 1632(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1664(CX), Y6 VMOVDQU 1696(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1728(CX), Y6 VMOVDQU 1760(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1792(CX), Y6 VMOVDQU 1824(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1856(CX), Y6 VMOVDQU 1888(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 6 to 5 outputs VMOVDQU (R11), Y8 @@ -63288,32 +57429,27 @@ mulAvxTwo_10x5_loop: VMOVDQU 1952(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1984(CX), Y6 VMOVDQU 2016(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 2048(CX), Y6 VMOVDQU 2080(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 2112(CX), Y6 VMOVDQU 2144(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 2176(CX), Y6 VMOVDQU 2208(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 7 to 5 outputs VMOVDQU (R12), Y8 @@ -63325,32 +57461,27 @@ mulAvxTwo_10x5_loop: VMOVDQU 2272(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 2304(CX), Y6 VMOVDQU 2336(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 2368(CX), Y6 VMOVDQU 2400(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 2432(CX), Y6 VMOVDQU 2464(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 2496(CX), Y6 VMOVDQU 2528(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 8 to 5 outputs VMOVDQU (R13), Y8 @@ -63362,32 +57493,27 @@ mulAvxTwo_10x5_loop: VMOVDQU 2592(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 2624(CX), Y6 VMOVDQU 2656(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 2688(CX), Y6 VMOVDQU 2720(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 2752(CX), Y6 VMOVDQU 2784(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 2816(CX), Y6 VMOVDQU 2848(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 9 to 5 outputs VMOVDQU (DX), Y8 @@ -63399,32 +57525,27 @@ mulAvxTwo_10x5_loop: VMOVDQU 2912(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 2944(CX), Y6 VMOVDQU 2976(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 3008(CX), Y6 VMOVDQU 3040(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 3072(CX), Y6 VMOVDQU 3104(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 3136(CX), Y6 VMOVDQU 3168(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Store 5 outputs MOVQ (R14), BP @@ -63448,7 +57569,7 @@ mulAvxTwo_10x5_end: RET // func mulAvxTwo_10x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x5Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept on stack @@ -63500,40 +57621,35 @@ mulAvxTwo_10x5Xor_loop: VMOVDQU 32(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) MOVQ 24(R14), BP VMOVDQU (BP)(R15*1), Y1 VMOVDQU 64(CX), Y6 VMOVDQU 96(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) MOVQ 48(R14), BP VMOVDQU (BP)(R15*1), Y2 VMOVDQU 128(CX), Y6 VMOVDQU 160(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) MOVQ 72(R14), BP VMOVDQU (BP)(R15*1), Y3 VMOVDQU 192(CX), Y6 VMOVDQU 224(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) MOVQ 96(R14), BP VMOVDQU (BP)(R15*1), Y4 VMOVDQU 256(CX), Y6 VMOVDQU 288(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 1 to 5 outputs VMOVDQU (SI), Y8 @@ -63545,32 +57661,27 @@ mulAvxTwo_10x5Xor_loop: VMOVDQU 352(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 384(CX), Y6 VMOVDQU 416(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 448(CX), Y6 VMOVDQU 480(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 512(CX), Y6 VMOVDQU 544(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 576(CX), Y6 VMOVDQU 608(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 2 to 5 outputs VMOVDQU (DI), Y8 @@ -63582,32 +57693,27 @@ mulAvxTwo_10x5Xor_loop: VMOVDQU 672(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 704(CX), Y6 VMOVDQU 736(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 768(CX), Y6 VMOVDQU 800(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 832(CX), Y6 VMOVDQU 864(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 896(CX), Y6 VMOVDQU 928(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 3 to 5 outputs VMOVDQU (R8), Y8 @@ -63619,32 +57725,27 @@ mulAvxTwo_10x5Xor_loop: VMOVDQU 992(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1024(CX), Y6 VMOVDQU 1056(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1088(CX), Y6 VMOVDQU 1120(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1152(CX), Y6 VMOVDQU 1184(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1216(CX), Y6 VMOVDQU 1248(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 4 to 5 outputs VMOVDQU (R9), Y8 @@ -63656,32 +57757,27 @@ mulAvxTwo_10x5Xor_loop: VMOVDQU 1312(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1344(CX), Y6 VMOVDQU 1376(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1408(CX), Y6 VMOVDQU 1440(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1472(CX), Y6 VMOVDQU 1504(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1536(CX), Y6 VMOVDQU 1568(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 5 to 5 outputs VMOVDQU (R10), Y8 @@ -63693,32 +57789,27 @@ mulAvxTwo_10x5Xor_loop: VMOVDQU 1632(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1664(CX), Y6 VMOVDQU 1696(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 1728(CX), Y6 VMOVDQU 1760(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 1792(CX), Y6 VMOVDQU 1824(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 1856(CX), Y6 VMOVDQU 1888(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 6 to 5 outputs VMOVDQU (R11), Y8 @@ -63730,32 +57821,27 @@ mulAvxTwo_10x5Xor_loop: VMOVDQU 1952(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 1984(CX), Y6 VMOVDQU 2016(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 2048(CX), Y6 VMOVDQU 2080(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 2112(CX), Y6 VMOVDQU 2144(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 2176(CX), Y6 VMOVDQU 2208(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 7 to 5 outputs VMOVDQU (R12), Y8 @@ -63767,32 +57853,27 @@ mulAvxTwo_10x5Xor_loop: VMOVDQU 2272(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 2304(CX), Y6 VMOVDQU 2336(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 2368(CX), Y6 VMOVDQU 2400(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 2432(CX), Y6 VMOVDQU 2464(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 2496(CX), Y6 VMOVDQU 2528(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 8 to 5 outputs VMOVDQU (R13), Y8 @@ -63804,32 +57885,27 @@ mulAvxTwo_10x5Xor_loop: VMOVDQU 2592(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 2624(CX), Y6 VMOVDQU 2656(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 2688(CX), Y6 VMOVDQU 2720(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 2752(CX), Y6 VMOVDQU 2784(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 2816(CX), Y6 VMOVDQU 2848(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Load and process 32 bytes from input 9 to 5 outputs VMOVDQU (DX), Y8 @@ -63841,32 +57917,27 @@ mulAvxTwo_10x5Xor_loop: VMOVDQU 2912(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y0, Y0 + XOR3WAY( $0x00, Y6, Y7, Y0) VMOVDQU 2944(CX), Y6 VMOVDQU 2976(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y1, Y1 + XOR3WAY( $0x00, Y6, Y7, Y1) VMOVDQU 3008(CX), Y6 VMOVDQU 3040(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y2, Y2 + XOR3WAY( $0x00, Y6, Y7, Y2) VMOVDQU 3072(CX), Y6 VMOVDQU 3104(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y3, Y3 + XOR3WAY( $0x00, Y6, Y7, Y3) VMOVDQU 3136(CX), Y6 VMOVDQU 3168(CX), Y7 VPSHUFB Y8, Y6, Y6 VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y6 - VPXOR Y6, Y4, Y4 + XOR3WAY( $0x00, Y6, Y7, Y4) // Store 5 outputs MOVQ (R14), BP @@ -63890,7 +57961,7 @@ mulAvxTwo_10x5Xor_end: RET // func mulAvxTwo_10x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x6(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept on stack @@ -63977,38 +58048,32 @@ mulAvxTwo_10x6_loop: VMOVDQU 416(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 576(CX), Y7 VMOVDQU 608(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 2 to 6 outputs VMOVDQU (DI), Y9 @@ -64020,38 +58085,32 @@ mulAvxTwo_10x6_loop: VMOVDQU 800(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 960(CX), Y7 VMOVDQU 992(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 3 to 6 outputs VMOVDQU (R8), Y9 @@ -64063,38 +58122,32 @@ mulAvxTwo_10x6_loop: VMOVDQU 1184(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1216(CX), Y7 VMOVDQU 1248(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1280(CX), Y7 VMOVDQU 1312(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1344(CX), Y7 VMOVDQU 1376(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1408(CX), Y7 VMOVDQU 1440(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1472(CX), Y7 VMOVDQU 1504(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 4 to 6 outputs VMOVDQU (R9), Y9 @@ -64106,38 +58159,32 @@ mulAvxTwo_10x6_loop: VMOVDQU 1568(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1600(CX), Y7 VMOVDQU 1632(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1664(CX), Y7 VMOVDQU 1696(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1728(CX), Y7 VMOVDQU 1760(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1792(CX), Y7 VMOVDQU 1824(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1856(CX), Y7 VMOVDQU 1888(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 5 to 6 outputs VMOVDQU (R10), Y9 @@ -64149,38 +58196,32 @@ mulAvxTwo_10x6_loop: VMOVDQU 1952(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1984(CX), Y7 VMOVDQU 2016(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2048(CX), Y7 VMOVDQU 2080(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2112(CX), Y7 VMOVDQU 2144(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2176(CX), Y7 VMOVDQU 2208(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 2240(CX), Y7 VMOVDQU 2272(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 6 to 6 outputs VMOVDQU (R11), Y9 @@ -64192,38 +58233,32 @@ mulAvxTwo_10x6_loop: VMOVDQU 2336(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 2368(CX), Y7 VMOVDQU 2400(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2432(CX), Y7 VMOVDQU 2464(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2496(CX), Y7 VMOVDQU 2528(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2560(CX), Y7 VMOVDQU 2592(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 2624(CX), Y7 VMOVDQU 2656(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 7 to 6 outputs VMOVDQU (R12), Y9 @@ -64235,38 +58270,32 @@ mulAvxTwo_10x6_loop: VMOVDQU 2720(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 2752(CX), Y7 VMOVDQU 2784(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2816(CX), Y7 VMOVDQU 2848(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2880(CX), Y7 VMOVDQU 2912(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2944(CX), Y7 VMOVDQU 2976(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 3008(CX), Y7 VMOVDQU 3040(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 8 to 6 outputs VMOVDQU (R13), Y9 @@ -64278,38 +58307,32 @@ mulAvxTwo_10x6_loop: VMOVDQU 3104(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 3136(CX), Y7 VMOVDQU 3168(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 3200(CX), Y7 VMOVDQU 3232(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 3264(CX), Y7 VMOVDQU 3296(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 3328(CX), Y7 VMOVDQU 3360(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 3392(CX), Y7 VMOVDQU 3424(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 9 to 6 outputs VMOVDQU (DX), Y9 @@ -64321,38 +58344,32 @@ mulAvxTwo_10x6_loop: VMOVDQU 3488(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 3520(CX), Y7 VMOVDQU 3552(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 3584(CX), Y7 VMOVDQU 3616(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 3648(CX), Y7 VMOVDQU 3680(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 3712(CX), Y7 VMOVDQU 3744(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 3776(CX), Y7 VMOVDQU 3808(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Store 6 outputs MOVQ (R14), BP @@ -64378,7 +58395,7 @@ mulAvxTwo_10x6_end: RET // func mulAvxTwo_10x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x6Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept on stack @@ -64430,48 +58447,42 @@ mulAvxTwo_10x6Xor_loop: VMOVDQU 32(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) MOVQ 24(R14), BP VMOVDQU (BP)(R15*1), Y1 VMOVDQU 64(CX), Y7 VMOVDQU 96(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) MOVQ 48(R14), BP VMOVDQU (BP)(R15*1), Y2 VMOVDQU 128(CX), Y7 VMOVDQU 160(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) MOVQ 72(R14), BP VMOVDQU (BP)(R15*1), Y3 VMOVDQU 192(CX), Y7 VMOVDQU 224(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) MOVQ 96(R14), BP VMOVDQU (BP)(R15*1), Y4 VMOVDQU 256(CX), Y7 VMOVDQU 288(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) MOVQ 120(R14), BP VMOVDQU (BP)(R15*1), Y5 VMOVDQU 320(CX), Y7 VMOVDQU 352(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 1 to 6 outputs VMOVDQU (SI), Y9 @@ -64483,38 +58494,32 @@ mulAvxTwo_10x6Xor_loop: VMOVDQU 416(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 448(CX), Y7 VMOVDQU 480(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 512(CX), Y7 VMOVDQU 544(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 576(CX), Y7 VMOVDQU 608(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 640(CX), Y7 VMOVDQU 672(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 704(CX), Y7 VMOVDQU 736(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 2 to 6 outputs VMOVDQU (DI), Y9 @@ -64526,38 +58531,32 @@ mulAvxTwo_10x6Xor_loop: VMOVDQU 800(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 832(CX), Y7 VMOVDQU 864(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 896(CX), Y7 VMOVDQU 928(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 960(CX), Y7 VMOVDQU 992(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1024(CX), Y7 VMOVDQU 1056(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1088(CX), Y7 VMOVDQU 1120(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 3 to 6 outputs VMOVDQU (R8), Y9 @@ -64569,38 +58568,32 @@ mulAvxTwo_10x6Xor_loop: VMOVDQU 1184(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1216(CX), Y7 VMOVDQU 1248(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1280(CX), Y7 VMOVDQU 1312(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1344(CX), Y7 VMOVDQU 1376(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1408(CX), Y7 VMOVDQU 1440(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1472(CX), Y7 VMOVDQU 1504(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 4 to 6 outputs VMOVDQU (R9), Y9 @@ -64612,38 +58605,32 @@ mulAvxTwo_10x6Xor_loop: VMOVDQU 1568(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1600(CX), Y7 VMOVDQU 1632(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 1664(CX), Y7 VMOVDQU 1696(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 1728(CX), Y7 VMOVDQU 1760(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 1792(CX), Y7 VMOVDQU 1824(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 1856(CX), Y7 VMOVDQU 1888(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 5 to 6 outputs VMOVDQU (R10), Y9 @@ -64655,38 +58642,32 @@ mulAvxTwo_10x6Xor_loop: VMOVDQU 1952(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 1984(CX), Y7 VMOVDQU 2016(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2048(CX), Y7 VMOVDQU 2080(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2112(CX), Y7 VMOVDQU 2144(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2176(CX), Y7 VMOVDQU 2208(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 2240(CX), Y7 VMOVDQU 2272(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 6 to 6 outputs VMOVDQU (R11), Y9 @@ -64698,38 +58679,32 @@ mulAvxTwo_10x6Xor_loop: VMOVDQU 2336(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 2368(CX), Y7 VMOVDQU 2400(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2432(CX), Y7 VMOVDQU 2464(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2496(CX), Y7 VMOVDQU 2528(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2560(CX), Y7 VMOVDQU 2592(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 2624(CX), Y7 VMOVDQU 2656(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 7 to 6 outputs VMOVDQU (R12), Y9 @@ -64741,38 +58716,32 @@ mulAvxTwo_10x6Xor_loop: VMOVDQU 2720(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 2752(CX), Y7 VMOVDQU 2784(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 2816(CX), Y7 VMOVDQU 2848(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 2880(CX), Y7 VMOVDQU 2912(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 2944(CX), Y7 VMOVDQU 2976(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 3008(CX), Y7 VMOVDQU 3040(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 8 to 6 outputs VMOVDQU (R13), Y9 @@ -64784,38 +58753,32 @@ mulAvxTwo_10x6Xor_loop: VMOVDQU 3104(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 3136(CX), Y7 VMOVDQU 3168(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 3200(CX), Y7 VMOVDQU 3232(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 3264(CX), Y7 VMOVDQU 3296(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 3328(CX), Y7 VMOVDQU 3360(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 3392(CX), Y7 VMOVDQU 3424(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Load and process 32 bytes from input 9 to 6 outputs VMOVDQU (DX), Y9 @@ -64827,38 +58790,32 @@ mulAvxTwo_10x6Xor_loop: VMOVDQU 3488(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y0, Y0 + XOR3WAY( $0x00, Y7, Y8, Y0) VMOVDQU 3520(CX), Y7 VMOVDQU 3552(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y1, Y1 + XOR3WAY( $0x00, Y7, Y8, Y1) VMOVDQU 3584(CX), Y7 VMOVDQU 3616(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y2, Y2 + XOR3WAY( $0x00, Y7, Y8, Y2) VMOVDQU 3648(CX), Y7 VMOVDQU 3680(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y3, Y3 + XOR3WAY( $0x00, Y7, Y8, Y3) VMOVDQU 3712(CX), Y7 VMOVDQU 3744(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y4, Y4 + XOR3WAY( $0x00, Y7, Y8, Y4) VMOVDQU 3776(CX), Y7 VMOVDQU 3808(CX), Y8 VPSHUFB Y9, Y7, Y7 VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y7 - VPXOR Y7, Y5, Y5 + XOR3WAY( $0x00, Y7, Y8, Y5) // Store 6 outputs MOVQ (R14), BP @@ -64884,7 +58841,7 @@ mulAvxTwo_10x6Xor_end: RET // func mulAvxTwo_10x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x7(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept on stack @@ -64976,44 +58933,37 @@ mulAvxTwo_10x7_loop: VMOVDQU 480(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 512(CX), Y8 VMOVDQU 544(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 576(CX), Y8 VMOVDQU 608(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 640(CX), Y8 VMOVDQU 672(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 704(CX), Y8 VMOVDQU 736(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 768(CX), Y8 VMOVDQU 800(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 832(CX), Y8 VMOVDQU 864(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 2 to 7 outputs VMOVDQU (DI), Y10 @@ -65025,44 +58975,37 @@ mulAvxTwo_10x7_loop: VMOVDQU 928(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 960(CX), Y8 VMOVDQU 992(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1024(CX), Y8 VMOVDQU 1056(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1088(CX), Y8 VMOVDQU 1120(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1152(CX), Y8 VMOVDQU 1184(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1216(CX), Y8 VMOVDQU 1248(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1280(CX), Y8 VMOVDQU 1312(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 3 to 7 outputs VMOVDQU (R8), Y10 @@ -65074,44 +59017,37 @@ mulAvxTwo_10x7_loop: VMOVDQU 1376(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1408(CX), Y8 VMOVDQU 1440(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1472(CX), Y8 VMOVDQU 1504(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1536(CX), Y8 VMOVDQU 1568(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1600(CX), Y8 VMOVDQU 1632(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1664(CX), Y8 VMOVDQU 1696(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1728(CX), Y8 VMOVDQU 1760(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 4 to 7 outputs VMOVDQU (R9), Y10 @@ -65123,44 +59059,37 @@ mulAvxTwo_10x7_loop: VMOVDQU 1824(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1856(CX), Y8 VMOVDQU 1888(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1920(CX), Y8 VMOVDQU 1952(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1984(CX), Y8 VMOVDQU 2016(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2048(CX), Y8 VMOVDQU 2080(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 2112(CX), Y8 VMOVDQU 2144(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 2176(CX), Y8 VMOVDQU 2208(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 5 to 7 outputs VMOVDQU (R10), Y10 @@ -65172,44 +59101,37 @@ mulAvxTwo_10x7_loop: VMOVDQU 2272(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 2304(CX), Y8 VMOVDQU 2336(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 2368(CX), Y8 VMOVDQU 2400(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 2432(CX), Y8 VMOVDQU 2464(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2496(CX), Y8 VMOVDQU 2528(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 2560(CX), Y8 VMOVDQU 2592(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 2624(CX), Y8 VMOVDQU 2656(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 6 to 7 outputs VMOVDQU (R11), Y10 @@ -65221,44 +59143,37 @@ mulAvxTwo_10x7_loop: VMOVDQU 2720(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 2752(CX), Y8 VMOVDQU 2784(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 2816(CX), Y8 VMOVDQU 2848(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 2880(CX), Y8 VMOVDQU 2912(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2944(CX), Y8 VMOVDQU 2976(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 3008(CX), Y8 VMOVDQU 3040(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 3072(CX), Y8 VMOVDQU 3104(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 7 to 7 outputs VMOVDQU (R12), Y10 @@ -65270,44 +59185,37 @@ mulAvxTwo_10x7_loop: VMOVDQU 3168(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 3200(CX), Y8 VMOVDQU 3232(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 3264(CX), Y8 VMOVDQU 3296(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 3328(CX), Y8 VMOVDQU 3360(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 3392(CX), Y8 VMOVDQU 3424(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 3456(CX), Y8 VMOVDQU 3488(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 3520(CX), Y8 VMOVDQU 3552(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 8 to 7 outputs VMOVDQU (R13), Y10 @@ -65319,44 +59227,37 @@ mulAvxTwo_10x7_loop: VMOVDQU 3616(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 3648(CX), Y8 VMOVDQU 3680(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 3712(CX), Y8 VMOVDQU 3744(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 3776(CX), Y8 VMOVDQU 3808(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 3840(CX), Y8 VMOVDQU 3872(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 3904(CX), Y8 VMOVDQU 3936(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 3968(CX), Y8 VMOVDQU 4000(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 9 to 7 outputs VMOVDQU (DX), Y10 @@ -65368,44 +59269,37 @@ mulAvxTwo_10x7_loop: VMOVDQU 4064(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 4096(CX), Y8 VMOVDQU 4128(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 4160(CX), Y8 VMOVDQU 4192(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 4224(CX), Y8 VMOVDQU 4256(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 4288(CX), Y8 VMOVDQU 4320(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 4352(CX), Y8 VMOVDQU 4384(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 4416(CX), Y8 VMOVDQU 4448(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Store 7 outputs MOVQ (R14), BP @@ -65433,7 +59327,7 @@ mulAvxTwo_10x7_end: RET // func mulAvxTwo_10x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x7Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept on stack @@ -65485,56 +59379,49 @@ mulAvxTwo_10x7Xor_loop: VMOVDQU 32(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) MOVQ 24(R14), BP VMOVDQU (BP)(R15*1), Y1 VMOVDQU 64(CX), Y8 VMOVDQU 96(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) MOVQ 48(R14), BP VMOVDQU (BP)(R15*1), Y2 VMOVDQU 128(CX), Y8 VMOVDQU 160(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) MOVQ 72(R14), BP VMOVDQU (BP)(R15*1), Y3 VMOVDQU 192(CX), Y8 VMOVDQU 224(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) MOVQ 96(R14), BP VMOVDQU (BP)(R15*1), Y4 VMOVDQU 256(CX), Y8 VMOVDQU 288(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) MOVQ 120(R14), BP VMOVDQU (BP)(R15*1), Y5 VMOVDQU 320(CX), Y8 VMOVDQU 352(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) MOVQ 144(R14), BP VMOVDQU (BP)(R15*1), Y6 VMOVDQU 384(CX), Y8 VMOVDQU 416(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 1 to 7 outputs VMOVDQU (SI), Y10 @@ -65546,44 +59433,37 @@ mulAvxTwo_10x7Xor_loop: VMOVDQU 480(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 512(CX), Y8 VMOVDQU 544(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 576(CX), Y8 VMOVDQU 608(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 640(CX), Y8 VMOVDQU 672(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 704(CX), Y8 VMOVDQU 736(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 768(CX), Y8 VMOVDQU 800(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 832(CX), Y8 VMOVDQU 864(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 2 to 7 outputs VMOVDQU (DI), Y10 @@ -65595,44 +59475,37 @@ mulAvxTwo_10x7Xor_loop: VMOVDQU 928(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 960(CX), Y8 VMOVDQU 992(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1024(CX), Y8 VMOVDQU 1056(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1088(CX), Y8 VMOVDQU 1120(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1152(CX), Y8 VMOVDQU 1184(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1216(CX), Y8 VMOVDQU 1248(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1280(CX), Y8 VMOVDQU 1312(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 3 to 7 outputs VMOVDQU (R8), Y10 @@ -65644,44 +59517,37 @@ mulAvxTwo_10x7Xor_loop: VMOVDQU 1376(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1408(CX), Y8 VMOVDQU 1440(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1472(CX), Y8 VMOVDQU 1504(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1536(CX), Y8 VMOVDQU 1568(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 1600(CX), Y8 VMOVDQU 1632(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 1664(CX), Y8 VMOVDQU 1696(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 1728(CX), Y8 VMOVDQU 1760(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 4 to 7 outputs VMOVDQU (R9), Y10 @@ -65693,44 +59559,37 @@ mulAvxTwo_10x7Xor_loop: VMOVDQU 1824(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 1856(CX), Y8 VMOVDQU 1888(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 1920(CX), Y8 VMOVDQU 1952(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 1984(CX), Y8 VMOVDQU 2016(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2048(CX), Y8 VMOVDQU 2080(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 2112(CX), Y8 VMOVDQU 2144(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 2176(CX), Y8 VMOVDQU 2208(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 5 to 7 outputs VMOVDQU (R10), Y10 @@ -65742,44 +59601,37 @@ mulAvxTwo_10x7Xor_loop: VMOVDQU 2272(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 2304(CX), Y8 VMOVDQU 2336(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 2368(CX), Y8 VMOVDQU 2400(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 2432(CX), Y8 VMOVDQU 2464(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2496(CX), Y8 VMOVDQU 2528(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 2560(CX), Y8 VMOVDQU 2592(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 2624(CX), Y8 VMOVDQU 2656(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 6 to 7 outputs VMOVDQU (R11), Y10 @@ -65791,44 +59643,37 @@ mulAvxTwo_10x7Xor_loop: VMOVDQU 2720(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 2752(CX), Y8 VMOVDQU 2784(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 2816(CX), Y8 VMOVDQU 2848(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 2880(CX), Y8 VMOVDQU 2912(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 2944(CX), Y8 VMOVDQU 2976(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 3008(CX), Y8 VMOVDQU 3040(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 3072(CX), Y8 VMOVDQU 3104(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 7 to 7 outputs VMOVDQU (R12), Y10 @@ -65840,44 +59685,37 @@ mulAvxTwo_10x7Xor_loop: VMOVDQU 3168(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 3200(CX), Y8 VMOVDQU 3232(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 3264(CX), Y8 VMOVDQU 3296(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 3328(CX), Y8 VMOVDQU 3360(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 3392(CX), Y8 VMOVDQU 3424(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 3456(CX), Y8 VMOVDQU 3488(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 3520(CX), Y8 VMOVDQU 3552(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 8 to 7 outputs VMOVDQU (R13), Y10 @@ -65889,44 +59727,37 @@ mulAvxTwo_10x7Xor_loop: VMOVDQU 3616(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 3648(CX), Y8 VMOVDQU 3680(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 3712(CX), Y8 VMOVDQU 3744(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 3776(CX), Y8 VMOVDQU 3808(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 3840(CX), Y8 VMOVDQU 3872(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 3904(CX), Y8 VMOVDQU 3936(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 3968(CX), Y8 VMOVDQU 4000(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Load and process 32 bytes from input 9 to 7 outputs VMOVDQU (DX), Y10 @@ -65938,44 +59769,37 @@ mulAvxTwo_10x7Xor_loop: VMOVDQU 4064(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y0, Y0 + XOR3WAY( $0x00, Y8, Y9, Y0) VMOVDQU 4096(CX), Y8 VMOVDQU 4128(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y1, Y1 + XOR3WAY( $0x00, Y8, Y9, Y1) VMOVDQU 4160(CX), Y8 VMOVDQU 4192(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y2, Y2 + XOR3WAY( $0x00, Y8, Y9, Y2) VMOVDQU 4224(CX), Y8 VMOVDQU 4256(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y3, Y3 + XOR3WAY( $0x00, Y8, Y9, Y3) VMOVDQU 4288(CX), Y8 VMOVDQU 4320(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y4, Y4 + XOR3WAY( $0x00, Y8, Y9, Y4) VMOVDQU 4352(CX), Y8 VMOVDQU 4384(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y5, Y5 + XOR3WAY( $0x00, Y8, Y9, Y5) VMOVDQU 4416(CX), Y8 VMOVDQU 4448(CX), Y9 VPSHUFB Y10, Y8, Y8 VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y8 - VPXOR Y8, Y6, Y6 + XOR3WAY( $0x00, Y8, Y9, Y6) // Store 7 outputs MOVQ (R14), BP @@ -66003,7 +59827,7 @@ mulAvxTwo_10x7Xor_end: RET // func mulAvxTwo_10x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x8(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept on stack @@ -66100,50 +59924,42 @@ mulAvxTwo_10x8_loop: VMOVDQU 544(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 576(CX), Y9 VMOVDQU 608(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y9 VMOVDQU 672(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 704(CX), Y9 VMOVDQU 736(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 768(CX), Y9 VMOVDQU 800(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 832(CX), Y9 VMOVDQU 864(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 896(CX), Y9 VMOVDQU 928(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 960(CX), Y9 VMOVDQU 992(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 2 to 8 outputs VMOVDQU (DI), Y11 @@ -66155,50 +59971,42 @@ mulAvxTwo_10x8_loop: VMOVDQU 1056(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1088(CX), Y9 VMOVDQU 1120(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1152(CX), Y9 VMOVDQU 1184(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1216(CX), Y9 VMOVDQU 1248(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y9 VMOVDQU 1312(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1344(CX), Y9 VMOVDQU 1376(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1408(CX), Y9 VMOVDQU 1440(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1472(CX), Y9 VMOVDQU 1504(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 3 to 8 outputs VMOVDQU (R8), Y11 @@ -66210,50 +60018,42 @@ mulAvxTwo_10x8_loop: VMOVDQU 1568(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1600(CX), Y9 VMOVDQU 1632(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1664(CX), Y9 VMOVDQU 1696(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1728(CX), Y9 VMOVDQU 1760(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1792(CX), Y9 VMOVDQU 1824(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1856(CX), Y9 VMOVDQU 1888(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1920(CX), Y9 VMOVDQU 1952(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1984(CX), Y9 VMOVDQU 2016(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 4 to 8 outputs VMOVDQU (R9), Y11 @@ -66265,50 +60065,42 @@ mulAvxTwo_10x8_loop: VMOVDQU 2080(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 2112(CX), Y9 VMOVDQU 2144(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 2176(CX), Y9 VMOVDQU 2208(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 2240(CX), Y9 VMOVDQU 2272(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 2304(CX), Y9 VMOVDQU 2336(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 2368(CX), Y9 VMOVDQU 2400(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 2432(CX), Y9 VMOVDQU 2464(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 2496(CX), Y9 VMOVDQU 2528(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 5 to 8 outputs VMOVDQU (R10), Y11 @@ -66320,50 +60112,42 @@ mulAvxTwo_10x8_loop: VMOVDQU 2592(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 2624(CX), Y9 VMOVDQU 2656(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 2688(CX), Y9 VMOVDQU 2720(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 2752(CX), Y9 VMOVDQU 2784(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 2816(CX), Y9 VMOVDQU 2848(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 2880(CX), Y9 VMOVDQU 2912(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 2944(CX), Y9 VMOVDQU 2976(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 3008(CX), Y9 VMOVDQU 3040(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 6 to 8 outputs VMOVDQU (R11), Y11 @@ -66375,50 +60159,42 @@ mulAvxTwo_10x8_loop: VMOVDQU 3104(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 3136(CX), Y9 VMOVDQU 3168(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 3200(CX), Y9 VMOVDQU 3232(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 3264(CX), Y9 VMOVDQU 3296(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 3328(CX), Y9 VMOVDQU 3360(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 3392(CX), Y9 VMOVDQU 3424(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 3456(CX), Y9 VMOVDQU 3488(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 3520(CX), Y9 VMOVDQU 3552(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 7 to 8 outputs VMOVDQU (R12), Y11 @@ -66430,50 +60206,42 @@ mulAvxTwo_10x8_loop: VMOVDQU 3616(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 3648(CX), Y9 VMOVDQU 3680(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 3712(CX), Y9 VMOVDQU 3744(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 3776(CX), Y9 VMOVDQU 3808(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 3840(CX), Y9 VMOVDQU 3872(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 3904(CX), Y9 VMOVDQU 3936(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 3968(CX), Y9 VMOVDQU 4000(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 4032(CX), Y9 VMOVDQU 4064(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 8 to 8 outputs VMOVDQU (R13), Y11 @@ -66485,50 +60253,42 @@ mulAvxTwo_10x8_loop: VMOVDQU 4128(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 4160(CX), Y9 VMOVDQU 4192(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 4224(CX), Y9 VMOVDQU 4256(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 4288(CX), Y9 VMOVDQU 4320(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 4352(CX), Y9 VMOVDQU 4384(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 4416(CX), Y9 VMOVDQU 4448(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 4480(CX), Y9 VMOVDQU 4512(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 4544(CX), Y9 VMOVDQU 4576(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 9 to 8 outputs VMOVDQU (DX), Y11 @@ -66540,50 +60300,42 @@ mulAvxTwo_10x8_loop: VMOVDQU 4640(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 4672(CX), Y9 VMOVDQU 4704(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 4736(CX), Y9 VMOVDQU 4768(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 4800(CX), Y9 VMOVDQU 4832(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 4864(CX), Y9 VMOVDQU 4896(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 4928(CX), Y9 VMOVDQU 4960(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 4992(CX), Y9 VMOVDQU 5024(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 5056(CX), Y9 VMOVDQU 5088(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Store 8 outputs MOVQ (R14), BP @@ -66613,7 +60365,7 @@ mulAvxTwo_10x8_end: RET // func mulAvxTwo_10x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x8Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept on stack @@ -66665,64 +60417,56 @@ mulAvxTwo_10x8Xor_loop: VMOVDQU 32(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) MOVQ 24(R14), BP VMOVDQU (BP)(R15*1), Y1 VMOVDQU 64(CX), Y9 VMOVDQU 96(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) MOVQ 48(R14), BP VMOVDQU (BP)(R15*1), Y2 VMOVDQU 128(CX), Y9 VMOVDQU 160(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) MOVQ 72(R14), BP VMOVDQU (BP)(R15*1), Y3 VMOVDQU 192(CX), Y9 VMOVDQU 224(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) MOVQ 96(R14), BP VMOVDQU (BP)(R15*1), Y4 VMOVDQU 256(CX), Y9 VMOVDQU 288(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) MOVQ 120(R14), BP VMOVDQU (BP)(R15*1), Y5 VMOVDQU 320(CX), Y9 VMOVDQU 352(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) MOVQ 144(R14), BP VMOVDQU (BP)(R15*1), Y6 VMOVDQU 384(CX), Y9 VMOVDQU 416(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) MOVQ 168(R14), BP VMOVDQU (BP)(R15*1), Y7 VMOVDQU 448(CX), Y9 VMOVDQU 480(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 1 to 8 outputs VMOVDQU (SI), Y11 @@ -66734,50 +60478,42 @@ mulAvxTwo_10x8Xor_loop: VMOVDQU 544(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 576(CX), Y9 VMOVDQU 608(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 640(CX), Y9 VMOVDQU 672(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 704(CX), Y9 VMOVDQU 736(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 768(CX), Y9 VMOVDQU 800(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 832(CX), Y9 VMOVDQU 864(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 896(CX), Y9 VMOVDQU 928(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 960(CX), Y9 VMOVDQU 992(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 2 to 8 outputs VMOVDQU (DI), Y11 @@ -66789,50 +60525,42 @@ mulAvxTwo_10x8Xor_loop: VMOVDQU 1056(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1088(CX), Y9 VMOVDQU 1120(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1152(CX), Y9 VMOVDQU 1184(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1216(CX), Y9 VMOVDQU 1248(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1280(CX), Y9 VMOVDQU 1312(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1344(CX), Y9 VMOVDQU 1376(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1408(CX), Y9 VMOVDQU 1440(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1472(CX), Y9 VMOVDQU 1504(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 3 to 8 outputs VMOVDQU (R8), Y11 @@ -66844,50 +60572,42 @@ mulAvxTwo_10x8Xor_loop: VMOVDQU 1568(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 1600(CX), Y9 VMOVDQU 1632(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 1664(CX), Y9 VMOVDQU 1696(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 1728(CX), Y9 VMOVDQU 1760(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 1792(CX), Y9 VMOVDQU 1824(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 1856(CX), Y9 VMOVDQU 1888(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 1920(CX), Y9 VMOVDQU 1952(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 1984(CX), Y9 VMOVDQU 2016(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 4 to 8 outputs VMOVDQU (R9), Y11 @@ -66899,50 +60619,42 @@ mulAvxTwo_10x8Xor_loop: VMOVDQU 2080(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 2112(CX), Y9 VMOVDQU 2144(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 2176(CX), Y9 VMOVDQU 2208(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 2240(CX), Y9 VMOVDQU 2272(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 2304(CX), Y9 VMOVDQU 2336(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 2368(CX), Y9 VMOVDQU 2400(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 2432(CX), Y9 VMOVDQU 2464(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 2496(CX), Y9 VMOVDQU 2528(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 5 to 8 outputs VMOVDQU (R10), Y11 @@ -66954,50 +60666,42 @@ mulAvxTwo_10x8Xor_loop: VMOVDQU 2592(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 2624(CX), Y9 VMOVDQU 2656(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 2688(CX), Y9 VMOVDQU 2720(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 2752(CX), Y9 VMOVDQU 2784(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 2816(CX), Y9 VMOVDQU 2848(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 2880(CX), Y9 VMOVDQU 2912(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 2944(CX), Y9 VMOVDQU 2976(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 3008(CX), Y9 VMOVDQU 3040(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 6 to 8 outputs VMOVDQU (R11), Y11 @@ -67009,50 +60713,42 @@ mulAvxTwo_10x8Xor_loop: VMOVDQU 3104(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 3136(CX), Y9 VMOVDQU 3168(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 3200(CX), Y9 VMOVDQU 3232(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 3264(CX), Y9 VMOVDQU 3296(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 3328(CX), Y9 VMOVDQU 3360(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 3392(CX), Y9 VMOVDQU 3424(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 3456(CX), Y9 VMOVDQU 3488(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 3520(CX), Y9 VMOVDQU 3552(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 7 to 8 outputs VMOVDQU (R12), Y11 @@ -67064,50 +60760,42 @@ mulAvxTwo_10x8Xor_loop: VMOVDQU 3616(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 3648(CX), Y9 VMOVDQU 3680(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 3712(CX), Y9 VMOVDQU 3744(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 3776(CX), Y9 VMOVDQU 3808(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 3840(CX), Y9 VMOVDQU 3872(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 3904(CX), Y9 VMOVDQU 3936(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 3968(CX), Y9 VMOVDQU 4000(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 4032(CX), Y9 VMOVDQU 4064(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 8 to 8 outputs VMOVDQU (R13), Y11 @@ -67119,50 +60807,42 @@ mulAvxTwo_10x8Xor_loop: VMOVDQU 4128(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 4160(CX), Y9 VMOVDQU 4192(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 4224(CX), Y9 VMOVDQU 4256(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 4288(CX), Y9 VMOVDQU 4320(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 4352(CX), Y9 VMOVDQU 4384(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 4416(CX), Y9 VMOVDQU 4448(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 4480(CX), Y9 VMOVDQU 4512(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 4544(CX), Y9 VMOVDQU 4576(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Load and process 32 bytes from input 9 to 8 outputs VMOVDQU (DX), Y11 @@ -67174,50 +60854,42 @@ mulAvxTwo_10x8Xor_loop: VMOVDQU 4640(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y0, Y0 + XOR3WAY( $0x00, Y9, Y10, Y0) VMOVDQU 4672(CX), Y9 VMOVDQU 4704(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y1, Y1 + XOR3WAY( $0x00, Y9, Y10, Y1) VMOVDQU 4736(CX), Y9 VMOVDQU 4768(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y2, Y2 + XOR3WAY( $0x00, Y9, Y10, Y2) VMOVDQU 4800(CX), Y9 VMOVDQU 4832(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y3, Y3 + XOR3WAY( $0x00, Y9, Y10, Y3) VMOVDQU 4864(CX), Y9 VMOVDQU 4896(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y4, Y4 + XOR3WAY( $0x00, Y9, Y10, Y4) VMOVDQU 4928(CX), Y9 VMOVDQU 4960(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y5, Y5 + XOR3WAY( $0x00, Y9, Y10, Y5) VMOVDQU 4992(CX), Y9 VMOVDQU 5024(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y6, Y6 + XOR3WAY( $0x00, Y9, Y10, Y6) VMOVDQU 5056(CX), Y9 VMOVDQU 5088(CX), Y10 VPSHUFB Y11, Y9, Y9 VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y9 - VPXOR Y9, Y7, Y7 + XOR3WAY( $0x00, Y9, Y10, Y7) // Store 8 outputs MOVQ (R14), BP @@ -67247,7 +60919,7 @@ mulAvxTwo_10x8Xor_end: RET // func mulAvxTwo_10x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x9(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept on stack @@ -67349,56 +61021,47 @@ mulAvxTwo_10x9_loop: VMOVDQU 608(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 640(CX), Y10 VMOVDQU 672(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 704(CX), Y10 VMOVDQU 736(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 768(CX), Y10 VMOVDQU 800(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 832(CX), Y10 VMOVDQU 864(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 896(CX), Y10 VMOVDQU 928(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 960(CX), Y10 VMOVDQU 992(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1024(CX), Y10 VMOVDQU 1056(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1088(CX), Y10 VMOVDQU 1120(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 2 to 9 outputs VMOVDQU (DI), Y12 @@ -67410,56 +61073,47 @@ mulAvxTwo_10x9_loop: VMOVDQU 1184(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1216(CX), Y10 VMOVDQU 1248(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1280(CX), Y10 VMOVDQU 1312(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1344(CX), Y10 VMOVDQU 1376(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1408(CX), Y10 VMOVDQU 1440(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 1472(CX), Y10 VMOVDQU 1504(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 1536(CX), Y10 VMOVDQU 1568(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1600(CX), Y10 VMOVDQU 1632(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1664(CX), Y10 VMOVDQU 1696(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 3 to 9 outputs VMOVDQU (R8), Y12 @@ -67471,56 +61125,47 @@ mulAvxTwo_10x9_loop: VMOVDQU 1760(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1792(CX), Y10 VMOVDQU 1824(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1856(CX), Y10 VMOVDQU 1888(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1920(CX), Y10 VMOVDQU 1952(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1984(CX), Y10 VMOVDQU 2016(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2048(CX), Y10 VMOVDQU 2080(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2112(CX), Y10 VMOVDQU 2144(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2176(CX), Y10 VMOVDQU 2208(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2240(CX), Y10 VMOVDQU 2272(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 4 to 9 outputs VMOVDQU (R9), Y12 @@ -67532,56 +61177,47 @@ mulAvxTwo_10x9_loop: VMOVDQU 2336(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 2368(CX), Y10 VMOVDQU 2400(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 2432(CX), Y10 VMOVDQU 2464(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 2496(CX), Y10 VMOVDQU 2528(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 2560(CX), Y10 VMOVDQU 2592(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2624(CX), Y10 VMOVDQU 2656(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2688(CX), Y10 VMOVDQU 2720(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2752(CX), Y10 VMOVDQU 2784(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2816(CX), Y10 VMOVDQU 2848(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 5 to 9 outputs VMOVDQU (R10), Y12 @@ -67593,56 +61229,47 @@ mulAvxTwo_10x9_loop: VMOVDQU 2912(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 2944(CX), Y10 VMOVDQU 2976(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 3008(CX), Y10 VMOVDQU 3040(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 3072(CX), Y10 VMOVDQU 3104(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 3136(CX), Y10 VMOVDQU 3168(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 3200(CX), Y10 VMOVDQU 3232(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 3264(CX), Y10 VMOVDQU 3296(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 3328(CX), Y10 VMOVDQU 3360(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 3392(CX), Y10 VMOVDQU 3424(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 6 to 9 outputs VMOVDQU (R11), Y12 @@ -67654,56 +61281,47 @@ mulAvxTwo_10x9_loop: VMOVDQU 3488(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 3520(CX), Y10 VMOVDQU 3552(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 3584(CX), Y10 VMOVDQU 3616(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 3648(CX), Y10 VMOVDQU 3680(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 3712(CX), Y10 VMOVDQU 3744(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 3776(CX), Y10 VMOVDQU 3808(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 3840(CX), Y10 VMOVDQU 3872(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 3904(CX), Y10 VMOVDQU 3936(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 3968(CX), Y10 VMOVDQU 4000(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 7 to 9 outputs VMOVDQU (R12), Y12 @@ -67715,56 +61333,47 @@ mulAvxTwo_10x9_loop: VMOVDQU 4064(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 4096(CX), Y10 VMOVDQU 4128(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 4160(CX), Y10 VMOVDQU 4192(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 4224(CX), Y10 VMOVDQU 4256(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 4288(CX), Y10 VMOVDQU 4320(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 4352(CX), Y10 VMOVDQU 4384(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 4416(CX), Y10 VMOVDQU 4448(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 4480(CX), Y10 VMOVDQU 4512(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 4544(CX), Y10 VMOVDQU 4576(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 8 to 9 outputs VMOVDQU (R13), Y12 @@ -67776,56 +61385,47 @@ mulAvxTwo_10x9_loop: VMOVDQU 4640(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 4672(CX), Y10 VMOVDQU 4704(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 4736(CX), Y10 VMOVDQU 4768(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 4800(CX), Y10 VMOVDQU 4832(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 4864(CX), Y10 VMOVDQU 4896(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 4928(CX), Y10 VMOVDQU 4960(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 4992(CX), Y10 VMOVDQU 5024(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 5056(CX), Y10 VMOVDQU 5088(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 5120(CX), Y10 VMOVDQU 5152(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 9 to 9 outputs VMOVDQU (DX), Y12 @@ -67837,56 +61437,47 @@ mulAvxTwo_10x9_loop: VMOVDQU 5216(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 5248(CX), Y10 VMOVDQU 5280(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 5312(CX), Y10 VMOVDQU 5344(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 5376(CX), Y10 VMOVDQU 5408(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 5440(CX), Y10 VMOVDQU 5472(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 5504(CX), Y10 VMOVDQU 5536(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 5568(CX), Y10 VMOVDQU 5600(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 5632(CX), Y10 VMOVDQU 5664(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 5696(CX), Y10 VMOVDQU 5728(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Store 9 outputs MOVQ (R14), BP @@ -67918,7 +61509,7 @@ mulAvxTwo_10x9_end: RET // func mulAvxTwo_10x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x9Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept on stack @@ -67970,72 +61561,63 @@ mulAvxTwo_10x9Xor_loop: VMOVDQU 32(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) MOVQ 24(R14), BP VMOVDQU (BP)(R15*1), Y1 VMOVDQU 64(CX), Y10 VMOVDQU 96(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) MOVQ 48(R14), BP VMOVDQU (BP)(R15*1), Y2 VMOVDQU 128(CX), Y10 VMOVDQU 160(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) MOVQ 72(R14), BP VMOVDQU (BP)(R15*1), Y3 VMOVDQU 192(CX), Y10 VMOVDQU 224(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) MOVQ 96(R14), BP VMOVDQU (BP)(R15*1), Y4 VMOVDQU 256(CX), Y10 VMOVDQU 288(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) MOVQ 120(R14), BP VMOVDQU (BP)(R15*1), Y5 VMOVDQU 320(CX), Y10 VMOVDQU 352(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) MOVQ 144(R14), BP VMOVDQU (BP)(R15*1), Y6 VMOVDQU 384(CX), Y10 VMOVDQU 416(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) MOVQ 168(R14), BP VMOVDQU (BP)(R15*1), Y7 VMOVDQU 448(CX), Y10 VMOVDQU 480(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) MOVQ 192(R14), BP VMOVDQU (BP)(R15*1), Y8 VMOVDQU 512(CX), Y10 VMOVDQU 544(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 1 to 9 outputs VMOVDQU (SI), Y12 @@ -68047,56 +61629,47 @@ mulAvxTwo_10x9Xor_loop: VMOVDQU 608(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 640(CX), Y10 VMOVDQU 672(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 704(CX), Y10 VMOVDQU 736(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 768(CX), Y10 VMOVDQU 800(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 832(CX), Y10 VMOVDQU 864(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 896(CX), Y10 VMOVDQU 928(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 960(CX), Y10 VMOVDQU 992(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1024(CX), Y10 VMOVDQU 1056(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1088(CX), Y10 VMOVDQU 1120(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 2 to 9 outputs VMOVDQU (DI), Y12 @@ -68108,56 +61681,47 @@ mulAvxTwo_10x9Xor_loop: VMOVDQU 1184(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1216(CX), Y10 VMOVDQU 1248(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1280(CX), Y10 VMOVDQU 1312(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1344(CX), Y10 VMOVDQU 1376(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1408(CX), Y10 VMOVDQU 1440(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 1472(CX), Y10 VMOVDQU 1504(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 1536(CX), Y10 VMOVDQU 1568(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 1600(CX), Y10 VMOVDQU 1632(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 1664(CX), Y10 VMOVDQU 1696(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 3 to 9 outputs VMOVDQU (R8), Y12 @@ -68169,56 +61733,47 @@ mulAvxTwo_10x9Xor_loop: VMOVDQU 1760(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 1792(CX), Y10 VMOVDQU 1824(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 1856(CX), Y10 VMOVDQU 1888(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 1920(CX), Y10 VMOVDQU 1952(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 1984(CX), Y10 VMOVDQU 2016(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2048(CX), Y10 VMOVDQU 2080(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2112(CX), Y10 VMOVDQU 2144(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2176(CX), Y10 VMOVDQU 2208(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2240(CX), Y10 VMOVDQU 2272(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 4 to 9 outputs VMOVDQU (R9), Y12 @@ -68230,56 +61785,47 @@ mulAvxTwo_10x9Xor_loop: VMOVDQU 2336(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 2368(CX), Y10 VMOVDQU 2400(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 2432(CX), Y10 VMOVDQU 2464(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 2496(CX), Y10 VMOVDQU 2528(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 2560(CX), Y10 VMOVDQU 2592(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 2624(CX), Y10 VMOVDQU 2656(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 2688(CX), Y10 VMOVDQU 2720(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 2752(CX), Y10 VMOVDQU 2784(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 2816(CX), Y10 VMOVDQU 2848(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 5 to 9 outputs VMOVDQU (R10), Y12 @@ -68291,56 +61837,47 @@ mulAvxTwo_10x9Xor_loop: VMOVDQU 2912(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 2944(CX), Y10 VMOVDQU 2976(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 3008(CX), Y10 VMOVDQU 3040(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 3072(CX), Y10 VMOVDQU 3104(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 3136(CX), Y10 VMOVDQU 3168(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 3200(CX), Y10 VMOVDQU 3232(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 3264(CX), Y10 VMOVDQU 3296(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 3328(CX), Y10 VMOVDQU 3360(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 3392(CX), Y10 VMOVDQU 3424(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 6 to 9 outputs VMOVDQU (R11), Y12 @@ -68352,56 +61889,47 @@ mulAvxTwo_10x9Xor_loop: VMOVDQU 3488(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 3520(CX), Y10 VMOVDQU 3552(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 3584(CX), Y10 VMOVDQU 3616(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 3648(CX), Y10 VMOVDQU 3680(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 3712(CX), Y10 VMOVDQU 3744(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 3776(CX), Y10 VMOVDQU 3808(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 3840(CX), Y10 VMOVDQU 3872(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 3904(CX), Y10 VMOVDQU 3936(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 3968(CX), Y10 VMOVDQU 4000(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 7 to 9 outputs VMOVDQU (R12), Y12 @@ -68413,56 +61941,47 @@ mulAvxTwo_10x9Xor_loop: VMOVDQU 4064(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 4096(CX), Y10 VMOVDQU 4128(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 4160(CX), Y10 VMOVDQU 4192(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 4224(CX), Y10 VMOVDQU 4256(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 4288(CX), Y10 VMOVDQU 4320(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 4352(CX), Y10 VMOVDQU 4384(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 4416(CX), Y10 VMOVDQU 4448(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 4480(CX), Y10 VMOVDQU 4512(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 4544(CX), Y10 VMOVDQU 4576(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 8 to 9 outputs VMOVDQU (R13), Y12 @@ -68474,56 +61993,47 @@ mulAvxTwo_10x9Xor_loop: VMOVDQU 4640(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 4672(CX), Y10 VMOVDQU 4704(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 4736(CX), Y10 VMOVDQU 4768(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 4800(CX), Y10 VMOVDQU 4832(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 4864(CX), Y10 VMOVDQU 4896(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 4928(CX), Y10 VMOVDQU 4960(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 4992(CX), Y10 VMOVDQU 5024(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 5056(CX), Y10 VMOVDQU 5088(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 5120(CX), Y10 VMOVDQU 5152(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Load and process 32 bytes from input 9 to 9 outputs VMOVDQU (DX), Y12 @@ -68535,56 +62045,47 @@ mulAvxTwo_10x9Xor_loop: VMOVDQU 5216(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y0, Y0 + XOR3WAY( $0x00, Y10, Y11, Y0) VMOVDQU 5248(CX), Y10 VMOVDQU 5280(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y1, Y1 + XOR3WAY( $0x00, Y10, Y11, Y1) VMOVDQU 5312(CX), Y10 VMOVDQU 5344(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y2, Y2 + XOR3WAY( $0x00, Y10, Y11, Y2) VMOVDQU 5376(CX), Y10 VMOVDQU 5408(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y3, Y3 + XOR3WAY( $0x00, Y10, Y11, Y3) VMOVDQU 5440(CX), Y10 VMOVDQU 5472(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y4, Y4 + XOR3WAY( $0x00, Y10, Y11, Y4) VMOVDQU 5504(CX), Y10 VMOVDQU 5536(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y5, Y5 + XOR3WAY( $0x00, Y10, Y11, Y5) VMOVDQU 5568(CX), Y10 VMOVDQU 5600(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y6, Y6 + XOR3WAY( $0x00, Y10, Y11, Y6) VMOVDQU 5632(CX), Y10 VMOVDQU 5664(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y7, Y7 + XOR3WAY( $0x00, Y10, Y11, Y7) VMOVDQU 5696(CX), Y10 VMOVDQU 5728(CX), Y11 VPSHUFB Y12, Y10, Y10 VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y10 - VPXOR Y10, Y8, Y8 + XOR3WAY( $0x00, Y10, Y11, Y8) // Store 9 outputs MOVQ (R14), BP @@ -68616,7 +62117,7 @@ mulAvxTwo_10x9Xor_end: RET // func mulAvxTwo_10x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x10(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept on stack @@ -68723,62 +62224,52 @@ mulAvxTwo_10x10_loop: VMOVDQU 672(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 704(CX), Y11 VMOVDQU 736(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 768(CX), Y11 VMOVDQU 800(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 832(CX), Y11 VMOVDQU 864(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 896(CX), Y11 VMOVDQU 928(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 960(CX), Y11 VMOVDQU 992(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1024(CX), Y11 VMOVDQU 1056(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1088(CX), Y11 VMOVDQU 1120(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1152(CX), Y11 VMOVDQU 1184(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1216(CX), Y11 VMOVDQU 1248(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 2 to 10 outputs VMOVDQU (DI), Y13 @@ -68790,62 +62281,52 @@ mulAvxTwo_10x10_loop: VMOVDQU 1312(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1344(CX), Y11 VMOVDQU 1376(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 1408(CX), Y11 VMOVDQU 1440(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 1472(CX), Y11 VMOVDQU 1504(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 1536(CX), Y11 VMOVDQU 1568(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 1600(CX), Y11 VMOVDQU 1632(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1664(CX), Y11 VMOVDQU 1696(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1728(CX), Y11 VMOVDQU 1760(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1792(CX), Y11 VMOVDQU 1824(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1856(CX), Y11 VMOVDQU 1888(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 3 to 10 outputs VMOVDQU (R8), Y13 @@ -68857,62 +62338,52 @@ mulAvxTwo_10x10_loop: VMOVDQU 1952(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1984(CX), Y11 VMOVDQU 2016(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2048(CX), Y11 VMOVDQU 2080(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2112(CX), Y11 VMOVDQU 2144(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2176(CX), Y11 VMOVDQU 2208(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2240(CX), Y11 VMOVDQU 2272(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2304(CX), Y11 VMOVDQU 2336(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 2368(CX), Y11 VMOVDQU 2400(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 2432(CX), Y11 VMOVDQU 2464(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 2496(CX), Y11 VMOVDQU 2528(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 4 to 10 outputs VMOVDQU (R9), Y13 @@ -68924,62 +62395,52 @@ mulAvxTwo_10x10_loop: VMOVDQU 2592(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 2624(CX), Y11 VMOVDQU 2656(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2688(CX), Y11 VMOVDQU 2720(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2752(CX), Y11 VMOVDQU 2784(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2816(CX), Y11 VMOVDQU 2848(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2880(CX), Y11 VMOVDQU 2912(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2944(CX), Y11 VMOVDQU 2976(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 3008(CX), Y11 VMOVDQU 3040(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 3072(CX), Y11 VMOVDQU 3104(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 3136(CX), Y11 VMOVDQU 3168(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 5 to 10 outputs VMOVDQU (R10), Y13 @@ -68991,62 +62452,52 @@ mulAvxTwo_10x10_loop: VMOVDQU 3232(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 3264(CX), Y11 VMOVDQU 3296(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 3328(CX), Y11 VMOVDQU 3360(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 3392(CX), Y11 VMOVDQU 3424(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 3456(CX), Y11 VMOVDQU 3488(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 3520(CX), Y11 VMOVDQU 3552(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 3584(CX), Y11 VMOVDQU 3616(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 3648(CX), Y11 VMOVDQU 3680(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 3712(CX), Y11 VMOVDQU 3744(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 3776(CX), Y11 VMOVDQU 3808(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 6 to 10 outputs VMOVDQU (R11), Y13 @@ -69058,62 +62509,52 @@ mulAvxTwo_10x10_loop: VMOVDQU 3872(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 3904(CX), Y11 VMOVDQU 3936(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 3968(CX), Y11 VMOVDQU 4000(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 4032(CX), Y11 VMOVDQU 4064(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 4096(CX), Y11 VMOVDQU 4128(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 4160(CX), Y11 VMOVDQU 4192(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 4224(CX), Y11 VMOVDQU 4256(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 4288(CX), Y11 VMOVDQU 4320(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 4352(CX), Y11 VMOVDQU 4384(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 4416(CX), Y11 VMOVDQU 4448(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 7 to 10 outputs VMOVDQU (R12), Y13 @@ -69125,62 +62566,52 @@ mulAvxTwo_10x10_loop: VMOVDQU 4512(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 4544(CX), Y11 VMOVDQU 4576(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 4608(CX), Y11 VMOVDQU 4640(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 4672(CX), Y11 VMOVDQU 4704(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 4736(CX), Y11 VMOVDQU 4768(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 4800(CX), Y11 VMOVDQU 4832(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 4864(CX), Y11 VMOVDQU 4896(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 4928(CX), Y11 VMOVDQU 4960(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 4992(CX), Y11 VMOVDQU 5024(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 5056(CX), Y11 VMOVDQU 5088(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 8 to 10 outputs VMOVDQU (R13), Y13 @@ -69192,62 +62623,52 @@ mulAvxTwo_10x10_loop: VMOVDQU 5152(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 5184(CX), Y11 VMOVDQU 5216(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 5248(CX), Y11 VMOVDQU 5280(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 5312(CX), Y11 VMOVDQU 5344(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 5376(CX), Y11 VMOVDQU 5408(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 5440(CX), Y11 VMOVDQU 5472(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 5504(CX), Y11 VMOVDQU 5536(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 5568(CX), Y11 VMOVDQU 5600(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 5632(CX), Y11 VMOVDQU 5664(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 5696(CX), Y11 VMOVDQU 5728(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 9 to 10 outputs VMOVDQU (DX), Y13 @@ -69259,62 +62680,52 @@ mulAvxTwo_10x10_loop: VMOVDQU 5792(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 5824(CX), Y11 VMOVDQU 5856(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 5888(CX), Y11 VMOVDQU 5920(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 5952(CX), Y11 VMOVDQU 5984(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 6016(CX), Y11 VMOVDQU 6048(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 6080(CX), Y11 VMOVDQU 6112(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 6144(CX), Y11 VMOVDQU 6176(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 6208(CX), Y11 VMOVDQU 6240(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 6272(CX), Y11 VMOVDQU 6304(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 6336(CX), Y11 VMOVDQU 6368(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Store 10 outputs MOVQ (R14), BP @@ -69348,7 +62759,7 @@ mulAvxTwo_10x10_end: RET // func mulAvxTwo_10x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 TEXT ·mulAvxTwo_10x10Xor(SB), NOSPLIT, $8-88 // Loading no tables to registers // Destination kept on stack @@ -69400,80 +62811,70 @@ mulAvxTwo_10x10Xor_loop: VMOVDQU 32(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) MOVQ 24(R14), BP VMOVDQU (BP)(R15*1), Y1 VMOVDQU 64(CX), Y11 VMOVDQU 96(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) MOVQ 48(R14), BP VMOVDQU (BP)(R15*1), Y2 VMOVDQU 128(CX), Y11 VMOVDQU 160(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) MOVQ 72(R14), BP VMOVDQU (BP)(R15*1), Y3 VMOVDQU 192(CX), Y11 VMOVDQU 224(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) MOVQ 96(R14), BP VMOVDQU (BP)(R15*1), Y4 VMOVDQU 256(CX), Y11 VMOVDQU 288(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) MOVQ 120(R14), BP VMOVDQU (BP)(R15*1), Y5 VMOVDQU 320(CX), Y11 VMOVDQU 352(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) MOVQ 144(R14), BP VMOVDQU (BP)(R15*1), Y6 VMOVDQU 384(CX), Y11 VMOVDQU 416(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) MOVQ 168(R14), BP VMOVDQU (BP)(R15*1), Y7 VMOVDQU 448(CX), Y11 VMOVDQU 480(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) MOVQ 192(R14), BP VMOVDQU (BP)(R15*1), Y8 VMOVDQU 512(CX), Y11 VMOVDQU 544(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) MOVQ 216(R14), BP VMOVDQU (BP)(R15*1), Y9 VMOVDQU 576(CX), Y11 VMOVDQU 608(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 1 to 10 outputs VMOVDQU (SI), Y13 @@ -69485,62 +62886,52 @@ mulAvxTwo_10x10Xor_loop: VMOVDQU 672(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 704(CX), Y11 VMOVDQU 736(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 768(CX), Y11 VMOVDQU 800(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 832(CX), Y11 VMOVDQU 864(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 896(CX), Y11 VMOVDQU 928(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 960(CX), Y11 VMOVDQU 992(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1024(CX), Y11 VMOVDQU 1056(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1088(CX), Y11 VMOVDQU 1120(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1152(CX), Y11 VMOVDQU 1184(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1216(CX), Y11 VMOVDQU 1248(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 2 to 10 outputs VMOVDQU (DI), Y13 @@ -69552,62 +62943,52 @@ mulAvxTwo_10x10Xor_loop: VMOVDQU 1312(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1344(CX), Y11 VMOVDQU 1376(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 1408(CX), Y11 VMOVDQU 1440(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 1472(CX), Y11 VMOVDQU 1504(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 1536(CX), Y11 VMOVDQU 1568(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 1600(CX), Y11 VMOVDQU 1632(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 1664(CX), Y11 VMOVDQU 1696(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 1728(CX), Y11 VMOVDQU 1760(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 1792(CX), Y11 VMOVDQU 1824(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 1856(CX), Y11 VMOVDQU 1888(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 3 to 10 outputs VMOVDQU (R8), Y13 @@ -69619,62 +63000,52 @@ mulAvxTwo_10x10Xor_loop: VMOVDQU 1952(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 1984(CX), Y11 VMOVDQU 2016(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2048(CX), Y11 VMOVDQU 2080(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2112(CX), Y11 VMOVDQU 2144(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2176(CX), Y11 VMOVDQU 2208(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2240(CX), Y11 VMOVDQU 2272(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2304(CX), Y11 VMOVDQU 2336(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 2368(CX), Y11 VMOVDQU 2400(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 2432(CX), Y11 VMOVDQU 2464(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 2496(CX), Y11 VMOVDQU 2528(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 4 to 10 outputs VMOVDQU (R9), Y13 @@ -69686,62 +63057,52 @@ mulAvxTwo_10x10Xor_loop: VMOVDQU 2592(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 2624(CX), Y11 VMOVDQU 2656(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 2688(CX), Y11 VMOVDQU 2720(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 2752(CX), Y11 VMOVDQU 2784(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 2816(CX), Y11 VMOVDQU 2848(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 2880(CX), Y11 VMOVDQU 2912(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 2944(CX), Y11 VMOVDQU 2976(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 3008(CX), Y11 VMOVDQU 3040(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 3072(CX), Y11 VMOVDQU 3104(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 3136(CX), Y11 VMOVDQU 3168(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 5 to 10 outputs VMOVDQU (R10), Y13 @@ -69753,62 +63114,52 @@ mulAvxTwo_10x10Xor_loop: VMOVDQU 3232(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 3264(CX), Y11 VMOVDQU 3296(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 3328(CX), Y11 VMOVDQU 3360(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 3392(CX), Y11 VMOVDQU 3424(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 3456(CX), Y11 VMOVDQU 3488(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 3520(CX), Y11 VMOVDQU 3552(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 3584(CX), Y11 VMOVDQU 3616(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 3648(CX), Y11 VMOVDQU 3680(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 3712(CX), Y11 VMOVDQU 3744(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 3776(CX), Y11 VMOVDQU 3808(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 6 to 10 outputs VMOVDQU (R11), Y13 @@ -69820,62 +63171,52 @@ mulAvxTwo_10x10Xor_loop: VMOVDQU 3872(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 3904(CX), Y11 VMOVDQU 3936(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 3968(CX), Y11 VMOVDQU 4000(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 4032(CX), Y11 VMOVDQU 4064(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 4096(CX), Y11 VMOVDQU 4128(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 4160(CX), Y11 VMOVDQU 4192(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 4224(CX), Y11 VMOVDQU 4256(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 4288(CX), Y11 VMOVDQU 4320(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 4352(CX), Y11 VMOVDQU 4384(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 4416(CX), Y11 VMOVDQU 4448(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 7 to 10 outputs VMOVDQU (R12), Y13 @@ -69887,62 +63228,52 @@ mulAvxTwo_10x10Xor_loop: VMOVDQU 4512(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 4544(CX), Y11 VMOVDQU 4576(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 4608(CX), Y11 VMOVDQU 4640(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 4672(CX), Y11 VMOVDQU 4704(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 4736(CX), Y11 VMOVDQU 4768(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 4800(CX), Y11 VMOVDQU 4832(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 4864(CX), Y11 VMOVDQU 4896(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 4928(CX), Y11 VMOVDQU 4960(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 4992(CX), Y11 VMOVDQU 5024(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 5056(CX), Y11 VMOVDQU 5088(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 8 to 10 outputs VMOVDQU (R13), Y13 @@ -69954,62 +63285,52 @@ mulAvxTwo_10x10Xor_loop: VMOVDQU 5152(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 5184(CX), Y11 VMOVDQU 5216(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 5248(CX), Y11 VMOVDQU 5280(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 5312(CX), Y11 VMOVDQU 5344(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 5376(CX), Y11 VMOVDQU 5408(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 5440(CX), Y11 VMOVDQU 5472(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 5504(CX), Y11 VMOVDQU 5536(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 5568(CX), Y11 VMOVDQU 5600(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 5632(CX), Y11 VMOVDQU 5664(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 5696(CX), Y11 VMOVDQU 5728(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Load and process 32 bytes from input 9 to 10 outputs VMOVDQU (DX), Y13 @@ -70021,62 +63342,52 @@ mulAvxTwo_10x10Xor_loop: VMOVDQU 5792(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y0, Y0 + XOR3WAY( $0x00, Y11, Y12, Y0) VMOVDQU 5824(CX), Y11 VMOVDQU 5856(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y1, Y1 + XOR3WAY( $0x00, Y11, Y12, Y1) VMOVDQU 5888(CX), Y11 VMOVDQU 5920(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y2, Y2 + XOR3WAY( $0x00, Y11, Y12, Y2) VMOVDQU 5952(CX), Y11 VMOVDQU 5984(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y3, Y3 + XOR3WAY( $0x00, Y11, Y12, Y3) VMOVDQU 6016(CX), Y11 VMOVDQU 6048(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y4, Y4 + XOR3WAY( $0x00, Y11, Y12, Y4) VMOVDQU 6080(CX), Y11 VMOVDQU 6112(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y5, Y5 + XOR3WAY( $0x00, Y11, Y12, Y5) VMOVDQU 6144(CX), Y11 VMOVDQU 6176(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y6, Y6 + XOR3WAY( $0x00, Y11, Y12, Y6) VMOVDQU 6208(CX), Y11 VMOVDQU 6240(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y7, Y7 + XOR3WAY( $0x00, Y11, Y12, Y7) VMOVDQU 6272(CX), Y11 VMOVDQU 6304(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y8, Y8 + XOR3WAY( $0x00, Y11, Y12, Y8) VMOVDQU 6336(CX), Y11 VMOVDQU 6368(CX), Y12 VPSHUFB Y13, Y11, Y11 VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y11 - VPXOR Y11, Y9, Y9 + XOR3WAY( $0x00, Y11, Y12, Y9) // Store 10 outputs MOVQ (R14), BP @@ -70108,3 +63419,4191 @@ mulAvxTwo_10x10Xor_loop: mulAvxTwo_10x10Xor_end: RET + +// func ifftDIT2_avx2(x []byte, y []byte, table *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·ifftDIT2_avx2(SB), NOSPLIT, $0-56 + MOVQ table+48(FP), AX + VBROADCASTI128 (AX), Y0 + VBROADCASTI128 64(AX), Y1 + VBROADCASTI128 16(AX), Y2 + VBROADCASTI128 80(AX), Y3 + VBROADCASTI128 32(AX), Y4 + VBROADCASTI128 96(AX), Y5 + VBROADCASTI128 48(AX), Y6 + VBROADCASTI128 112(AX), Y7 + MOVQ x_len+8(FP), AX + MOVQ x_base+0(FP), CX + MOVQ y_base+24(FP), DX + MOVQ $0x0000000f, BX + MOVQ BX, X8 + VPBROADCASTB X8, Y8 + +loop: + VMOVDQU (CX), Y9 + VMOVDQU 32(CX), Y10 + VMOVDQU (DX), Y11 + VMOVDQU 32(DX), Y12 + VPXOR Y11, Y9, Y11 + VPXOR Y12, Y10, Y12 + VMOVDQU Y11, (DX) + VMOVDQU Y12, 32(DX) + VPSRLQ $0x04, Y11, Y13 + VPAND Y8, Y11, Y11 + VPAND Y8, Y13, Y13 + VPSHUFB Y11, Y0, Y14 + VPSHUFB Y11, Y1, Y11 + VPSHUFB Y13, Y2, Y15 + VPSHUFB Y13, Y3, Y13 + VPXOR Y14, Y15, Y14 + VPXOR Y11, Y13, Y11 + VPAND Y12, Y8, Y13 + VPSRLQ $0x04, Y12, Y12 + VPAND Y8, Y12, Y12 + VPSHUFB Y13, Y4, Y15 + VPSHUFB Y13, Y5, Y13 + VPXOR Y14, Y15, Y14 + VPXOR Y11, Y13, Y11 + VPSHUFB Y12, Y6, Y15 + VPSHUFB Y12, Y7, Y13 + XOR3WAY( $0x00, Y14, Y15, Y9) + XOR3WAY( $0x00, Y11, Y13, Y10) + VMOVDQU Y9, (CX) + VMOVDQU Y10, 32(CX) + ADDQ $0x40, CX + ADDQ $0x40, DX + SUBQ $0x40, AX + JNZ loop + VZEROUPPER + RET + +// func fftDIT2_avx2(x []byte, y []byte, table *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·fftDIT2_avx2(SB), NOSPLIT, $0-56 + MOVQ table+48(FP), AX + VBROADCASTI128 (AX), Y0 + VBROADCASTI128 64(AX), Y1 + VBROADCASTI128 16(AX), Y2 + VBROADCASTI128 80(AX), Y3 + VBROADCASTI128 32(AX), Y4 + VBROADCASTI128 96(AX), Y5 + VBROADCASTI128 48(AX), Y6 + VBROADCASTI128 112(AX), Y7 + MOVQ x_len+8(FP), AX + MOVQ x_base+0(FP), CX + MOVQ y_base+24(FP), DX + MOVQ $0x0000000f, BX + MOVQ BX, X8 + VPBROADCASTB X8, Y8 + +loop: + VMOVDQU (CX), Y9 + VMOVDQU 32(CX), Y10 + VMOVDQU (DX), Y11 + VMOVDQU 32(DX), Y12 + VPSRLQ $0x04, Y11, Y13 + VPAND Y8, Y11, Y11 + VPAND Y8, Y13, Y13 + VPSHUFB Y11, Y0, Y14 + VPSHUFB Y11, Y1, Y11 + VPSHUFB Y13, Y2, Y15 + VPSHUFB Y13, Y3, Y13 + VPXOR Y14, Y15, Y14 + VPXOR Y11, Y13, Y11 + VPAND Y12, Y8, Y13 + VPSRLQ $0x04, Y12, Y12 + VPAND Y8, Y12, Y12 + VPSHUFB Y13, Y4, Y15 + VPSHUFB Y13, Y5, Y13 + VPXOR Y14, Y15, Y14 + VPXOR Y11, Y13, Y11 + VPSHUFB Y12, Y6, Y15 + VPSHUFB Y12, Y7, Y13 + XOR3WAY( $0x00, Y14, Y15, Y9) + XOR3WAY( $0x00, Y11, Y13, Y10) + VMOVDQU Y9, (CX) + VMOVDQU Y10, 32(CX) + VMOVDQU (DX), Y11 + VMOVDQU 32(DX), Y12 + VPXOR Y11, Y9, Y11 + VPXOR Y12, Y10, Y12 + VMOVDQU Y11, (DX) + VMOVDQU Y12, 32(DX) + ADDQ $0x40, CX + ADDQ $0x40, DX + SUBQ $0x40, AX + JNZ loop + VZEROUPPER + RET + +// func mulgf16_avx2(x []byte, y []byte, table *[128]uint8) +// Requires: AVX, AVX2, SSE2 +TEXT ·mulgf16_avx2(SB), NOSPLIT, $0-56 + MOVQ table+48(FP), AX + VBROADCASTI128 (AX), Y0 + VBROADCASTI128 64(AX), Y1 + VBROADCASTI128 16(AX), Y2 + VBROADCASTI128 80(AX), Y3 + VBROADCASTI128 32(AX), Y4 + VBROADCASTI128 96(AX), Y5 + VBROADCASTI128 48(AX), Y6 + VBROADCASTI128 112(AX), Y7 + MOVQ x_len+8(FP), AX + MOVQ x_base+0(FP), CX + MOVQ y_base+24(FP), DX + MOVQ $0x0000000f, BX + MOVQ BX, X8 + VPBROADCASTB X8, Y8 + +loop: + VMOVDQU (DX), Y9 + VMOVDQU 32(DX), Y10 + VPSRLQ $0x04, Y9, Y11 + VPAND Y8, Y9, Y9 + VPAND Y8, Y11, Y11 + VPSHUFB Y9, Y0, Y12 + VPSHUFB Y9, Y1, Y9 + VPSHUFB Y11, Y2, Y13 + VPSHUFB Y11, Y3, Y11 + VPXOR Y12, Y13, Y12 + VPXOR Y9, Y11, Y9 + VPAND Y10, Y8, Y11 + VPSRLQ $0x04, Y10, Y10 + VPAND Y8, Y10, Y10 + VPSHUFB Y11, Y4, Y13 + VPSHUFB Y11, Y5, Y11 + VPXOR Y12, Y13, Y12 + VPXOR Y9, Y11, Y9 + VPSHUFB Y10, Y6, Y13 + VPSHUFB Y10, Y7, Y11 + VPXOR Y12, Y13, Y12 + VPXOR Y9, Y11, Y9 + VMOVDQU Y12, (CX) + VMOVDQU Y9, 32(CX) + ADDQ $0x40, CX + ADDQ $0x40, DX + SUBQ $0x40, AX + JNZ loop + VZEROUPPER + RET + +// func ifftDIT4_avx512_0(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·ifftDIT4_avx512_0(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), CX + MOVQ table02+48(FP), DX + VBROADCASTI128 (DX), Y1 + VBROADCASTI128 64(DX), Y0 + VMOVAPS Z1, Z16 + VMOVAPS Z0, Z17 + VBROADCASTI128 16(DX), Y1 + VBROADCASTI128 80(DX), Y0 + VMOVAPS Z1, Z18 + VMOVAPS Z0, Z19 + VBROADCASTI128 32(DX), Y1 + VBROADCASTI128 96(DX), Y0 + VMOVAPS Z1, Z20 + VMOVAPS Z0, Z21 + VBROADCASTI128 48(DX), Y1 + VBROADCASTI128 112(DX), Y0 + VMOVAPS Z1, Z22 + VMOVAPS Z0, Z23 + VBROADCASTI128 (AX), Y1 + VBROADCASTI128 64(AX), Y0 + VMOVAPS Z1, Z24 + VMOVAPS Z0, Z25 + VBROADCASTI128 16(AX), Y1 + VBROADCASTI128 80(AX), Y0 + VMOVAPS Z1, Z26 + VMOVAPS Z0, Z27 + VBROADCASTI128 32(AX), Y1 + VBROADCASTI128 96(AX), Y0 + VMOVAPS Z1, Z28 + VMOVAPS Z0, Z29 + VBROADCASTI128 48(AX), Y1 + VBROADCASTI128 112(AX), Y0 + VMOVAPS Z1, Z30 + VMOVAPS Z0, Z31 + MOVQ $0x0000000f, AX + MOVQ AX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), AX + MOVQ work_base+0(FP), DX + MOVQ 8(DX), BX + XORQ SI, SI + MOVQ (DX)(SI*1), DI + ADDQ AX, SI + MOVQ (DX)(SI*1), R8 + ADDQ AX, SI + MOVQ (DX)(SI*1), R9 + ADDQ AX, SI + MOVQ (DX)(SI*1), AX + +loop: + VMOVDQU (DI), Y1 + VMOVDQU 32(DI), Y2 + VMOVDQU (R8), Y3 + VMOVDQU 32(R8), Y4 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VPSRLQ $0x04, Y3, Y6 + VPAND Y0, Y3, Y5 + VPAND Y0, Y6, Y6 + VPSHUFB Y5, Y24, Y7 + VPSHUFB Y5, Y25, Y5 + VPSHUFB Y6, Y26, Y8 + VPSHUFB Y6, Y27, Y6 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y6, Y5 + VPAND Y4, Y0, Y6 + VPSRLQ $0x04, Y4, Y8 + VPAND Y0, Y8, Y8 + VPSHUFB Y6, Y28, Y9 + VPSHUFB Y6, Y29, Y6 + VPXOR Y7, Y9, Y7 + VPXOR Y5, Y6, Y5 + VPSHUFB Y8, Y30, Y9 + VPSHUFB Y8, Y31, Y6 + VPTERNLOGD $0x96, Y7, Y9, Y1 + VPTERNLOGD $0x96, Y5, Y6, Y2 + VMOVDQU (R9), Y5 + VMOVDQU 32(R9), Y6 + VMOVDQU (AX), Y7 + VMOVDQU 32(AX), Y8 + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (CX), Y11 + VBROADCASTI128 64(CX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(CX), Y12 + VBROADCASTI128 80(CX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(CX), Y13 + VBROADCASTI128 96(CX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(CX), Y13 + VBROADCASTI128 112(CX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y5 + VPTERNLOGD $0x96, Y9, Y10, Y6 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VPSRLQ $0x04, Y5, Y10 + VPAND Y0, Y5, Y9 + VPAND Y0, Y10, Y10 + VPSHUFB Y9, Y16, Y11 + VPSHUFB Y9, Y17, Y9 + VPSHUFB Y10, Y18, Y12 + VPSHUFB Y10, Y19, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y6, Y0, Y10 + VPSRLQ $0x04, Y6, Y12 + VPAND Y0, Y12, Y12 + VPSHUFB Y10, Y20, Y13 + VPSHUFB Y10, Y21, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VPSHUFB Y12, Y22, Y13 + VPSHUFB Y12, Y23, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y1 + VPTERNLOGD $0x96, Y9, Y10, Y2 + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VPSHUFB Y9, Y16, Y11 + VPSHUFB Y9, Y17, Y9 + VPSHUFB Y10, Y18, Y12 + VPSHUFB Y10, Y19, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VPSHUFB Y10, Y20, Y13 + VPSHUFB Y10, Y21, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VPSHUFB Y12, Y22, Y13 + VPSHUFB Y12, Y23, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y3 + VPTERNLOGD $0x96, Y9, Y10, Y4 + VMOVDQU Y1, (DI) + VMOVDQU Y2, 32(DI) + ADDQ $0x40, DI + VMOVDQU Y3, (R8) + VMOVDQU Y4, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y5, (R9) + VMOVDQU Y6, 32(R9) + ADDQ $0x40, R9 + VMOVDQU Y7, (AX) + VMOVDQU Y8, 32(AX) + ADDQ $0x40, AX + SUBQ $0x40, BX + JNZ loop + VZEROUPPER + RET + +// func fftDIT4_avx512_0(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·fftDIT4_avx512_0(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), CX + MOVQ table02+48(FP), DX + VBROADCASTI128 (DX), Y1 + VBROADCASTI128 64(DX), Y0 + VMOVAPS Z1, Z16 + VMOVAPS Z0, Z17 + VBROADCASTI128 16(DX), Y1 + VBROADCASTI128 80(DX), Y0 + VMOVAPS Z1, Z18 + VMOVAPS Z0, Z19 + VBROADCASTI128 32(DX), Y1 + VBROADCASTI128 96(DX), Y0 + VMOVAPS Z1, Z20 + VMOVAPS Z0, Z21 + VBROADCASTI128 48(DX), Y1 + VBROADCASTI128 112(DX), Y0 + VMOVAPS Z1, Z22 + VMOVAPS Z0, Z23 + VBROADCASTI128 (AX), Y1 + VBROADCASTI128 64(AX), Y0 + VMOVAPS Z1, Z24 + VMOVAPS Z0, Z25 + VBROADCASTI128 16(AX), Y1 + VBROADCASTI128 80(AX), Y0 + VMOVAPS Z1, Z26 + VMOVAPS Z0, Z27 + VBROADCASTI128 32(AX), Y1 + VBROADCASTI128 96(AX), Y0 + VMOVAPS Z1, Z28 + VMOVAPS Z0, Z29 + VBROADCASTI128 48(AX), Y1 + VBROADCASTI128 112(AX), Y0 + VMOVAPS Z1, Z30 + VMOVAPS Z0, Z31 + MOVQ $0x0000000f, AX + MOVQ AX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), AX + MOVQ work_base+0(FP), DX + MOVQ 8(DX), BX + XORQ SI, SI + MOVQ (DX)(SI*1), DI + ADDQ AX, SI + MOVQ (DX)(SI*1), R8 + ADDQ AX, SI + MOVQ (DX)(SI*1), R9 + ADDQ AX, SI + MOVQ (DX)(SI*1), AX + +loop: + VMOVDQU (DI), Y1 + VMOVDQU 32(DI), Y2 + VMOVDQU (R9), Y5 + VMOVDQU 32(R9), Y6 + VMOVDQU (R8), Y3 + VMOVDQU 32(R8), Y4 + VMOVDQU (AX), Y7 + VMOVDQU 32(AX), Y8 + VPSRLQ $0x04, Y5, Y10 + VPAND Y0, Y5, Y9 + VPAND Y0, Y10, Y10 + VPSHUFB Y9, Y16, Y11 + VPSHUFB Y9, Y17, Y9 + VPSHUFB Y10, Y18, Y12 + VPSHUFB Y10, Y19, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y6, Y0, Y10 + VPSRLQ $0x04, Y6, Y12 + VPAND Y0, Y12, Y12 + VPSHUFB Y10, Y20, Y13 + VPSHUFB Y10, Y21, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VPSHUFB Y12, Y22, Y13 + VPSHUFB Y12, Y23, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y1 + VPTERNLOGD $0x96, Y9, Y10, Y2 + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VPSHUFB Y9, Y16, Y11 + VPSHUFB Y9, Y17, Y9 + VPSHUFB Y10, Y18, Y12 + VPSHUFB Y10, Y19, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VPSHUFB Y10, Y20, Y13 + VPSHUFB Y10, Y21, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VPSHUFB Y12, Y22, Y13 + VPSHUFB Y12, Y23, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y3 + VPTERNLOGD $0x96, Y9, Y10, Y4 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VPSRLQ $0x04, Y3, Y10 + VPAND Y0, Y3, Y9 + VPAND Y0, Y10, Y10 + VPSHUFB Y9, Y24, Y11 + VPSHUFB Y9, Y25, Y9 + VPSHUFB Y10, Y26, Y12 + VPSHUFB Y10, Y27, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y4, Y0, Y10 + VPSRLQ $0x04, Y4, Y12 + VPAND Y0, Y12, Y12 + VPSHUFB Y10, Y28, Y13 + VPSHUFB Y10, Y29, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VPSHUFB Y12, Y30, Y13 + VPSHUFB Y12, Y31, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y1 + VPTERNLOGD $0x96, Y9, Y10, Y2 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VMOVDQU Y1, (DI) + VMOVDQU Y2, 32(DI) + ADDQ $0x40, DI + VMOVDQU Y3, (R8) + VMOVDQU Y4, 32(R8) + ADDQ $0x40, R8 + VPSRLQ $0x04, Y7, Y2 + VPAND Y0, Y7, Y1 + VPAND Y0, Y2, Y2 + VBROADCASTI128 (CX), Y3 + VBROADCASTI128 64(CX), Y4 + VPSHUFB Y1, Y3, Y3 + VPSHUFB Y1, Y4, Y1 + VBROADCASTI128 16(CX), Y4 + VBROADCASTI128 80(CX), Y9 + VPSHUFB Y2, Y4, Y4 + VPSHUFB Y2, Y9, Y2 + VPXOR Y3, Y4, Y3 + VPXOR Y1, Y2, Y1 + VPAND Y8, Y0, Y2 + VPSRLQ $0x04, Y8, Y4 + VPAND Y0, Y4, Y4 + VBROADCASTI128 32(CX), Y9 + VBROADCASTI128 96(CX), Y10 + VPSHUFB Y2, Y9, Y9 + VPSHUFB Y2, Y10, Y2 + VPXOR Y3, Y9, Y3 + VPXOR Y1, Y2, Y1 + VBROADCASTI128 48(CX), Y9 + VBROADCASTI128 112(CX), Y2 + VPSHUFB Y4, Y9, Y9 + VPSHUFB Y4, Y2, Y2 + VPTERNLOGD $0x96, Y3, Y9, Y5 + VPTERNLOGD $0x96, Y1, Y2, Y6 + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VMOVDQU Y5, (R9) + VMOVDQU Y6, 32(R9) + ADDQ $0x40, R9 + VMOVDQU Y7, (AX) + VMOVDQU Y8, 32(AX) + ADDQ $0x40, AX + SUBQ $0x40, BX + JNZ loop + VZEROUPPER + RET + +// func ifftDIT4_avx512_1(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·ifftDIT4_avx512_1(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), AX + MOVQ table02+48(FP), CX + VBROADCASTI128 (CX), Y1 + VBROADCASTI128 64(CX), Y0 + VMOVAPS Z1, Z16 + VMOVAPS Z0, Z17 + VBROADCASTI128 16(CX), Y1 + VBROADCASTI128 80(CX), Y0 + VMOVAPS Z1, Z18 + VMOVAPS Z0, Z19 + VBROADCASTI128 32(CX), Y1 + VBROADCASTI128 96(CX), Y0 + VMOVAPS Z1, Z20 + VMOVAPS Z0, Z21 + VBROADCASTI128 48(CX), Y1 + VBROADCASTI128 112(CX), Y0 + VMOVAPS Z1, Z22 + VMOVAPS Z0, Z23 + VBROADCASTI128 (AX), Y1 + VBROADCASTI128 64(AX), Y0 + VMOVAPS Z1, Z24 + VMOVAPS Z0, Z25 + VBROADCASTI128 16(AX), Y1 + VBROADCASTI128 80(AX), Y0 + VMOVAPS Z1, Z26 + VMOVAPS Z0, Z27 + VBROADCASTI128 32(AX), Y1 + VBROADCASTI128 96(AX), Y0 + VMOVAPS Z1, Z28 + VMOVAPS Z0, Z29 + VBROADCASTI128 48(AX), Y1 + VBROADCASTI128 112(AX), Y0 + VMOVAPS Z1, Z30 + VMOVAPS Z0, Z31 + MOVQ $0x0000000f, AX + MOVQ AX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), AX + MOVQ work_base+0(FP), CX + MOVQ 8(CX), DX + XORQ BX, BX + MOVQ (CX)(BX*1), SI + ADDQ AX, BX + MOVQ (CX)(BX*1), DI + ADDQ AX, BX + MOVQ (CX)(BX*1), R8 + ADDQ AX, BX + MOVQ (CX)(BX*1), AX + +loop: + VMOVDQU (SI), Y1 + VMOVDQU 32(SI), Y2 + VMOVDQU (DI), Y3 + VMOVDQU 32(DI), Y4 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VMOVDQU (R8), Y5 + VMOVDQU 32(R8), Y6 + VMOVDQU (AX), Y7 + VMOVDQU 32(AX), Y8 + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VPSHUFB Y9, Y24, Y11 + VPSHUFB Y9, Y25, Y9 + VPSHUFB Y10, Y26, Y12 + VPSHUFB Y10, Y27, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VPSHUFB Y10, Y28, Y13 + VPSHUFB Y10, Y29, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VPSHUFB Y12, Y30, Y13 + VPSHUFB Y12, Y31, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y5 + VPTERNLOGD $0x96, Y9, Y10, Y6 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VPSRLQ $0x04, Y5, Y10 + VPAND Y0, Y5, Y9 + VPAND Y0, Y10, Y10 + VPSHUFB Y9, Y16, Y11 + VPSHUFB Y9, Y17, Y9 + VPSHUFB Y10, Y18, Y12 + VPSHUFB Y10, Y19, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y6, Y0, Y10 + VPSRLQ $0x04, Y6, Y12 + VPAND Y0, Y12, Y12 + VPSHUFB Y10, Y20, Y13 + VPSHUFB Y10, Y21, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VPSHUFB Y12, Y22, Y13 + VPSHUFB Y12, Y23, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y1 + VPTERNLOGD $0x96, Y9, Y10, Y2 + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VPSHUFB Y9, Y16, Y11 + VPSHUFB Y9, Y17, Y9 + VPSHUFB Y10, Y18, Y12 + VPSHUFB Y10, Y19, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VPSHUFB Y10, Y20, Y13 + VPSHUFB Y10, Y21, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VPSHUFB Y12, Y22, Y13 + VPSHUFB Y12, Y23, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y3 + VPTERNLOGD $0x96, Y9, Y10, Y4 + VMOVDQU Y1, (SI) + VMOVDQU Y2, 32(SI) + ADDQ $0x40, SI + VMOVDQU Y3, (DI) + VMOVDQU Y4, 32(DI) + ADDQ $0x40, DI + VMOVDQU Y5, (R8) + VMOVDQU Y6, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y7, (AX) + VMOVDQU Y8, 32(AX) + ADDQ $0x40, AX + SUBQ $0x40, DX + JNZ loop + VZEROUPPER + RET + +// func fftDIT4_avx512_1(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·fftDIT4_avx512_1(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), CX + MOVQ table02+48(FP), DX + VBROADCASTI128 (AX), Y1 + VBROADCASTI128 64(AX), Y0 + VMOVAPS Z1, Z16 + VMOVAPS Z0, Z17 + VBROADCASTI128 16(AX), Y1 + VBROADCASTI128 80(AX), Y0 + VMOVAPS Z1, Z18 + VMOVAPS Z0, Z19 + VBROADCASTI128 32(AX), Y1 + VBROADCASTI128 96(AX), Y0 + VMOVAPS Z1, Z20 + VMOVAPS Z0, Z21 + VBROADCASTI128 48(AX), Y1 + VBROADCASTI128 112(AX), Y0 + VMOVAPS Z1, Z22 + VMOVAPS Z0, Z23 + VBROADCASTI128 (CX), Y1 + VBROADCASTI128 64(CX), Y0 + VMOVAPS Z1, Z24 + VMOVAPS Z0, Z25 + VBROADCASTI128 16(CX), Y1 + VBROADCASTI128 80(CX), Y0 + VMOVAPS Z1, Z26 + VMOVAPS Z0, Z27 + VBROADCASTI128 32(CX), Y1 + VBROADCASTI128 96(CX), Y0 + VMOVAPS Z1, Z28 + VMOVAPS Z0, Z29 + VBROADCASTI128 48(CX), Y1 + VBROADCASTI128 112(CX), Y0 + VMOVAPS Z1, Z30 + VMOVAPS Z0, Z31 + MOVQ $0x0000000f, AX + MOVQ AX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), AX + MOVQ work_base+0(FP), CX + MOVQ 8(CX), DX + XORQ BX, BX + MOVQ (CX)(BX*1), SI + ADDQ AX, BX + MOVQ (CX)(BX*1), DI + ADDQ AX, BX + MOVQ (CX)(BX*1), R8 + ADDQ AX, BX + MOVQ (CX)(BX*1), AX + +loop: + VMOVDQU (SI), Y1 + VMOVDQU 32(SI), Y2 + VMOVDQU (R8), Y5 + VMOVDQU 32(R8), Y6 + VMOVDQU (DI), Y3 + VMOVDQU 32(DI), Y4 + VMOVDQU (AX), Y7 + VMOVDQU 32(AX), Y8 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VPSRLQ $0x04, Y3, Y10 + VPAND Y0, Y3, Y9 + VPAND Y0, Y10, Y10 + VPSHUFB Y9, Y16, Y11 + VPSHUFB Y9, Y17, Y9 + VPSHUFB Y10, Y18, Y12 + VPSHUFB Y10, Y19, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y4, Y0, Y10 + VPSRLQ $0x04, Y4, Y12 + VPAND Y0, Y12, Y12 + VPSHUFB Y10, Y20, Y13 + VPSHUFB Y10, Y21, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VPSHUFB Y12, Y22, Y13 + VPSHUFB Y12, Y23, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y1 + VPTERNLOGD $0x96, Y9, Y10, Y2 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VMOVDQU Y1, (SI) + VMOVDQU Y2, 32(SI) + ADDQ $0x40, SI + VMOVDQU Y3, (DI) + VMOVDQU Y4, 32(DI) + ADDQ $0x40, DI + VPSRLQ $0x04, Y7, Y2 + VPAND Y0, Y7, Y1 + VPAND Y0, Y2, Y2 + VPSHUFB Y1, Y24, Y3 + VPSHUFB Y1, Y25, Y1 + VPSHUFB Y2, Y26, Y4 + VPSHUFB Y2, Y27, Y2 + VPXOR Y3, Y4, Y3 + VPXOR Y1, Y2, Y1 + VPAND Y8, Y0, Y2 + VPSRLQ $0x04, Y8, Y4 + VPAND Y0, Y4, Y4 + VPSHUFB Y2, Y28, Y9 + VPSHUFB Y2, Y29, Y2 + VPXOR Y3, Y9, Y3 + VPXOR Y1, Y2, Y1 + VPSHUFB Y4, Y30, Y9 + VPSHUFB Y4, Y31, Y2 + VPTERNLOGD $0x96, Y3, Y9, Y5 + VPTERNLOGD $0x96, Y1, Y2, Y6 + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VMOVDQU Y5, (R8) + VMOVDQU Y6, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y7, (AX) + VMOVDQU Y8, 32(AX) + ADDQ $0x40, AX + SUBQ $0x40, DX + JNZ loop + VZEROUPPER + RET + +// func ifftDIT4_avx512_2(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·ifftDIT4_avx512_2(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), CX + MOVQ table02+48(FP), CX + VBROADCASTI128 (CX), Y1 + VBROADCASTI128 64(CX), Y0 + VMOVAPS Z1, Z16 + VMOVAPS Z0, Z17 + VBROADCASTI128 16(CX), Y1 + VBROADCASTI128 80(CX), Y0 + VMOVAPS Z1, Z18 + VMOVAPS Z0, Z19 + VBROADCASTI128 32(CX), Y1 + VBROADCASTI128 96(CX), Y0 + VMOVAPS Z1, Z20 + VMOVAPS Z0, Z21 + VBROADCASTI128 48(CX), Y1 + VBROADCASTI128 112(CX), Y0 + VMOVAPS Z1, Z22 + VMOVAPS Z0, Z23 + VBROADCASTI128 (AX), Y1 + VBROADCASTI128 64(AX), Y0 + VMOVAPS Z1, Z24 + VMOVAPS Z0, Z25 + VBROADCASTI128 16(AX), Y1 + VBROADCASTI128 80(AX), Y0 + VMOVAPS Z1, Z26 + VMOVAPS Z0, Z27 + VBROADCASTI128 32(AX), Y1 + VBROADCASTI128 96(AX), Y0 + VMOVAPS Z1, Z28 + VMOVAPS Z0, Z29 + VBROADCASTI128 48(AX), Y1 + VBROADCASTI128 112(AX), Y0 + VMOVAPS Z1, Z30 + VMOVAPS Z0, Z31 + MOVQ $0x0000000f, AX + MOVQ AX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), AX + MOVQ work_base+0(FP), CX + MOVQ 8(CX), DX + XORQ BX, BX + MOVQ (CX)(BX*1), SI + ADDQ AX, BX + MOVQ (CX)(BX*1), DI + ADDQ AX, BX + MOVQ (CX)(BX*1), R8 + ADDQ AX, BX + MOVQ (CX)(BX*1), AX + +loop: + VMOVDQU (SI), Y1 + VMOVDQU 32(SI), Y2 + VMOVDQU (DI), Y3 + VMOVDQU 32(DI), Y4 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VPSRLQ $0x04, Y3, Y6 + VPAND Y0, Y3, Y5 + VPAND Y0, Y6, Y6 + VPSHUFB Y5, Y24, Y7 + VPSHUFB Y5, Y25, Y5 + VPSHUFB Y6, Y26, Y8 + VPSHUFB Y6, Y27, Y6 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y6, Y5 + VPAND Y4, Y0, Y6 + VPSRLQ $0x04, Y4, Y8 + VPAND Y0, Y8, Y8 + VPSHUFB Y6, Y28, Y9 + VPSHUFB Y6, Y29, Y6 + VPXOR Y7, Y9, Y7 + VPXOR Y5, Y6, Y5 + VPSHUFB Y8, Y30, Y9 + VPSHUFB Y8, Y31, Y6 + VPTERNLOGD $0x96, Y7, Y9, Y1 + VPTERNLOGD $0x96, Y5, Y6, Y2 + VMOVDQU (R8), Y5 + VMOVDQU 32(R8), Y6 + VMOVDQU (AX), Y7 + VMOVDQU 32(AX), Y8 + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VPSRLQ $0x04, Y5, Y10 + VPAND Y0, Y5, Y9 + VPAND Y0, Y10, Y10 + VPSHUFB Y9, Y16, Y11 + VPSHUFB Y9, Y17, Y9 + VPSHUFB Y10, Y18, Y12 + VPSHUFB Y10, Y19, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y6, Y0, Y10 + VPSRLQ $0x04, Y6, Y12 + VPAND Y0, Y12, Y12 + VPSHUFB Y10, Y20, Y13 + VPSHUFB Y10, Y21, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VPSHUFB Y12, Y22, Y13 + VPSHUFB Y12, Y23, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y1 + VPTERNLOGD $0x96, Y9, Y10, Y2 + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VPSHUFB Y9, Y16, Y11 + VPSHUFB Y9, Y17, Y9 + VPSHUFB Y10, Y18, Y12 + VPSHUFB Y10, Y19, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VPSHUFB Y10, Y20, Y13 + VPSHUFB Y10, Y21, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VPSHUFB Y12, Y22, Y13 + VPSHUFB Y12, Y23, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y3 + VPTERNLOGD $0x96, Y9, Y10, Y4 + VMOVDQU Y1, (SI) + VMOVDQU Y2, 32(SI) + ADDQ $0x40, SI + VMOVDQU Y3, (DI) + VMOVDQU Y4, 32(DI) + ADDQ $0x40, DI + VMOVDQU Y5, (R8) + VMOVDQU Y6, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y7, (AX) + VMOVDQU Y8, 32(AX) + ADDQ $0x40, AX + SUBQ $0x40, DX + JNZ loop + VZEROUPPER + RET + +// func fftDIT4_avx512_2(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·fftDIT4_avx512_2(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), AX + MOVQ table02+48(FP), CX + VBROADCASTI128 (CX), Y1 + VBROADCASTI128 64(CX), Y0 + VMOVAPS Z1, Z16 + VMOVAPS Z0, Z17 + VBROADCASTI128 16(CX), Y1 + VBROADCASTI128 80(CX), Y0 + VMOVAPS Z1, Z18 + VMOVAPS Z0, Z19 + VBROADCASTI128 32(CX), Y1 + VBROADCASTI128 96(CX), Y0 + VMOVAPS Z1, Z20 + VMOVAPS Z0, Z21 + VBROADCASTI128 48(CX), Y1 + VBROADCASTI128 112(CX), Y0 + VMOVAPS Z1, Z22 + VMOVAPS Z0, Z23 + VBROADCASTI128 (AX), Y1 + VBROADCASTI128 64(AX), Y0 + VMOVAPS Z1, Z24 + VMOVAPS Z0, Z25 + VBROADCASTI128 16(AX), Y1 + VBROADCASTI128 80(AX), Y0 + VMOVAPS Z1, Z26 + VMOVAPS Z0, Z27 + VBROADCASTI128 32(AX), Y1 + VBROADCASTI128 96(AX), Y0 + VMOVAPS Z1, Z28 + VMOVAPS Z0, Z29 + VBROADCASTI128 48(AX), Y1 + VBROADCASTI128 112(AX), Y0 + VMOVAPS Z1, Z30 + VMOVAPS Z0, Z31 + MOVQ $0x0000000f, AX + MOVQ AX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), AX + MOVQ work_base+0(FP), CX + MOVQ 8(CX), DX + XORQ BX, BX + MOVQ (CX)(BX*1), SI + ADDQ AX, BX + MOVQ (CX)(BX*1), DI + ADDQ AX, BX + MOVQ (CX)(BX*1), R8 + ADDQ AX, BX + MOVQ (CX)(BX*1), AX + +loop: + VMOVDQU (SI), Y1 + VMOVDQU 32(SI), Y2 + VMOVDQU (R8), Y5 + VMOVDQU 32(R8), Y6 + VMOVDQU (DI), Y3 + VMOVDQU 32(DI), Y4 + VMOVDQU (AX), Y7 + VMOVDQU 32(AX), Y8 + VPSRLQ $0x04, Y5, Y10 + VPAND Y0, Y5, Y9 + VPAND Y0, Y10, Y10 + VPSHUFB Y9, Y16, Y11 + VPSHUFB Y9, Y17, Y9 + VPSHUFB Y10, Y18, Y12 + VPSHUFB Y10, Y19, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y6, Y0, Y10 + VPSRLQ $0x04, Y6, Y12 + VPAND Y0, Y12, Y12 + VPSHUFB Y10, Y20, Y13 + VPSHUFB Y10, Y21, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VPSHUFB Y12, Y22, Y13 + VPSHUFB Y12, Y23, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y1 + VPTERNLOGD $0x96, Y9, Y10, Y2 + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VPSHUFB Y9, Y16, Y11 + VPSHUFB Y9, Y17, Y9 + VPSHUFB Y10, Y18, Y12 + VPSHUFB Y10, Y19, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VPSHUFB Y10, Y20, Y13 + VPSHUFB Y10, Y21, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VPSHUFB Y12, Y22, Y13 + VPSHUFB Y12, Y23, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y3 + VPTERNLOGD $0x96, Y9, Y10, Y4 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VMOVDQU Y1, (SI) + VMOVDQU Y2, 32(SI) + ADDQ $0x40, SI + VMOVDQU Y3, (DI) + VMOVDQU Y4, 32(DI) + ADDQ $0x40, DI + VPSRLQ $0x04, Y7, Y2 + VPAND Y0, Y7, Y1 + VPAND Y0, Y2, Y2 + VPSHUFB Y1, Y24, Y3 + VPSHUFB Y1, Y25, Y1 + VPSHUFB Y2, Y26, Y4 + VPSHUFB Y2, Y27, Y2 + VPXOR Y3, Y4, Y3 + VPXOR Y1, Y2, Y1 + VPAND Y8, Y0, Y2 + VPSRLQ $0x04, Y8, Y4 + VPAND Y0, Y4, Y4 + VPSHUFB Y2, Y28, Y9 + VPSHUFB Y2, Y29, Y2 + VPXOR Y3, Y9, Y3 + VPXOR Y1, Y2, Y1 + VPSHUFB Y4, Y30, Y9 + VPSHUFB Y4, Y31, Y2 + VPTERNLOGD $0x96, Y3, Y9, Y5 + VPTERNLOGD $0x96, Y1, Y2, Y6 + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VMOVDQU Y5, (R8) + VMOVDQU Y6, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y7, (AX) + VMOVDQU Y8, 32(AX) + ADDQ $0x40, AX + SUBQ $0x40, DX + JNZ loop + VZEROUPPER + RET + +// func ifftDIT4_avx512_3(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·ifftDIT4_avx512_3(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), AX + MOVQ table02+48(FP), AX + VBROADCASTI128 (AX), Y1 + VBROADCASTI128 64(AX), Y0 + VMOVAPS Z1, Z16 + VMOVAPS Z0, Z17 + VBROADCASTI128 16(AX), Y1 + VBROADCASTI128 80(AX), Y0 + VMOVAPS Z1, Z18 + VMOVAPS Z0, Z19 + VBROADCASTI128 32(AX), Y1 + VBROADCASTI128 96(AX), Y0 + VMOVAPS Z1, Z20 + VMOVAPS Z0, Z21 + VBROADCASTI128 48(AX), Y1 + VBROADCASTI128 112(AX), Y0 + VMOVAPS Z1, Z22 + VMOVAPS Z0, Z23 + MOVQ $0x0000000f, AX + MOVQ AX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), AX + MOVQ work_base+0(FP), CX + MOVQ 8(CX), DX + XORQ BX, BX + MOVQ (CX)(BX*1), SI + ADDQ AX, BX + MOVQ (CX)(BX*1), DI + ADDQ AX, BX + MOVQ (CX)(BX*1), R8 + ADDQ AX, BX + MOVQ (CX)(BX*1), AX + +loop: + VMOVDQU (SI), Y1 + VMOVDQU 32(SI), Y2 + VMOVDQU (DI), Y3 + VMOVDQU 32(DI), Y4 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VMOVDQU (R8), Y5 + VMOVDQU 32(R8), Y6 + VMOVDQU (AX), Y7 + VMOVDQU 32(AX), Y8 + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VPSRLQ $0x04, Y5, Y10 + VPAND Y0, Y5, Y9 + VPAND Y0, Y10, Y10 + VPSHUFB Y9, Y16, Y11 + VPSHUFB Y9, Y17, Y9 + VPSHUFB Y10, Y18, Y12 + VPSHUFB Y10, Y19, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y6, Y0, Y10 + VPSRLQ $0x04, Y6, Y12 + VPAND Y0, Y12, Y12 + VPSHUFB Y10, Y20, Y13 + VPSHUFB Y10, Y21, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VPSHUFB Y12, Y22, Y13 + VPSHUFB Y12, Y23, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y1 + VPTERNLOGD $0x96, Y9, Y10, Y2 + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VPSHUFB Y9, Y16, Y11 + VPSHUFB Y9, Y17, Y9 + VPSHUFB Y10, Y18, Y12 + VPSHUFB Y10, Y19, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VPSHUFB Y10, Y20, Y13 + VPSHUFB Y10, Y21, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VPSHUFB Y12, Y22, Y13 + VPSHUFB Y12, Y23, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y3 + VPTERNLOGD $0x96, Y9, Y10, Y4 + VMOVDQU Y1, (SI) + VMOVDQU Y2, 32(SI) + ADDQ $0x40, SI + VMOVDQU Y3, (DI) + VMOVDQU Y4, 32(DI) + ADDQ $0x40, DI + VMOVDQU Y5, (R8) + VMOVDQU Y6, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y7, (AX) + VMOVDQU Y8, 32(AX) + ADDQ $0x40, AX + SUBQ $0x40, DX + JNZ loop + VZEROUPPER + RET + +// func fftDIT4_avx512_3(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·fftDIT4_avx512_3(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), AX + MOVQ table02+48(FP), CX + VBROADCASTI128 (AX), Y1 + VBROADCASTI128 64(AX), Y0 + VMOVAPS Z1, Z16 + VMOVAPS Z0, Z17 + VBROADCASTI128 16(AX), Y1 + VBROADCASTI128 80(AX), Y0 + VMOVAPS Z1, Z18 + VMOVAPS Z0, Z19 + VBROADCASTI128 32(AX), Y1 + VBROADCASTI128 96(AX), Y0 + VMOVAPS Z1, Z20 + VMOVAPS Z0, Z21 + VBROADCASTI128 48(AX), Y1 + VBROADCASTI128 112(AX), Y0 + VMOVAPS Z1, Z22 + VMOVAPS Z0, Z23 + MOVQ $0x0000000f, AX + MOVQ AX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), AX + MOVQ work_base+0(FP), CX + MOVQ 8(CX), DX + XORQ BX, BX + MOVQ (CX)(BX*1), SI + ADDQ AX, BX + MOVQ (CX)(BX*1), DI + ADDQ AX, BX + MOVQ (CX)(BX*1), R8 + ADDQ AX, BX + MOVQ (CX)(BX*1), AX + +loop: + VMOVDQU (SI), Y1 + VMOVDQU 32(SI), Y2 + VMOVDQU (R8), Y5 + VMOVDQU 32(R8), Y6 + VMOVDQU (DI), Y3 + VMOVDQU 32(DI), Y4 + VMOVDQU (AX), Y7 + VMOVDQU 32(AX), Y8 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VMOVDQU Y1, (SI) + VMOVDQU Y2, 32(SI) + ADDQ $0x40, SI + VMOVDQU Y3, (DI) + VMOVDQU Y4, 32(DI) + ADDQ $0x40, DI + VPSRLQ $0x04, Y7, Y2 + VPAND Y0, Y7, Y1 + VPAND Y0, Y2, Y2 + VPSHUFB Y1, Y16, Y3 + VPSHUFB Y1, Y17, Y1 + VPSHUFB Y2, Y18, Y4 + VPSHUFB Y2, Y19, Y2 + VPXOR Y3, Y4, Y3 + VPXOR Y1, Y2, Y1 + VPAND Y8, Y0, Y2 + VPSRLQ $0x04, Y8, Y4 + VPAND Y0, Y4, Y4 + VPSHUFB Y2, Y20, Y9 + VPSHUFB Y2, Y21, Y2 + VPXOR Y3, Y9, Y3 + VPXOR Y1, Y2, Y1 + VPSHUFB Y4, Y22, Y9 + VPSHUFB Y4, Y23, Y2 + VPTERNLOGD $0x96, Y3, Y9, Y5 + VPTERNLOGD $0x96, Y1, Y2, Y6 + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VMOVDQU Y5, (R8) + VMOVDQU Y6, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y7, (AX) + VMOVDQU Y8, 32(AX) + ADDQ $0x40, AX + SUBQ $0x40, DX + JNZ loop + VZEROUPPER + RET + +// func ifftDIT4_avx512_4(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·ifftDIT4_avx512_4(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), CX + MOVQ table02+48(FP), DX + VBROADCASTI128 (AX), Y1 + VBROADCASTI128 64(AX), Y0 + VMOVAPS Z1, Z16 + VMOVAPS Z0, Z17 + VBROADCASTI128 16(AX), Y1 + VBROADCASTI128 80(AX), Y0 + VMOVAPS Z1, Z18 + VMOVAPS Z0, Z19 + VBROADCASTI128 32(AX), Y1 + VBROADCASTI128 96(AX), Y0 + VMOVAPS Z1, Z20 + VMOVAPS Z0, Z21 + VBROADCASTI128 48(AX), Y1 + VBROADCASTI128 112(AX), Y0 + VMOVAPS Z1, Z22 + VMOVAPS Z0, Z23 + VBROADCASTI128 (CX), Y1 + VBROADCASTI128 64(CX), Y0 + VMOVAPS Z1, Z24 + VMOVAPS Z0, Z25 + VBROADCASTI128 16(CX), Y1 + VBROADCASTI128 80(CX), Y0 + VMOVAPS Z1, Z26 + VMOVAPS Z0, Z27 + VBROADCASTI128 32(CX), Y1 + VBROADCASTI128 96(CX), Y0 + VMOVAPS Z1, Z28 + VMOVAPS Z0, Z29 + VBROADCASTI128 48(CX), Y1 + VBROADCASTI128 112(CX), Y0 + VMOVAPS Z1, Z30 + VMOVAPS Z0, Z31 + MOVQ $0x0000000f, AX + MOVQ AX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), AX + MOVQ work_base+0(FP), CX + MOVQ 8(CX), DX + XORQ BX, BX + MOVQ (CX)(BX*1), SI + ADDQ AX, BX + MOVQ (CX)(BX*1), DI + ADDQ AX, BX + MOVQ (CX)(BX*1), R8 + ADDQ AX, BX + MOVQ (CX)(BX*1), AX + +loop: + VMOVDQU (SI), Y1 + VMOVDQU 32(SI), Y2 + VMOVDQU (DI), Y3 + VMOVDQU 32(DI), Y4 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VPSRLQ $0x04, Y3, Y6 + VPAND Y0, Y3, Y5 + VPAND Y0, Y6, Y6 + VPSHUFB Y5, Y16, Y7 + VPSHUFB Y5, Y17, Y5 + VPSHUFB Y6, Y18, Y8 + VPSHUFB Y6, Y19, Y6 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y6, Y5 + VPAND Y4, Y0, Y6 + VPSRLQ $0x04, Y4, Y8 + VPAND Y0, Y8, Y8 + VPSHUFB Y6, Y20, Y9 + VPSHUFB Y6, Y21, Y6 + VPXOR Y7, Y9, Y7 + VPXOR Y5, Y6, Y5 + VPSHUFB Y8, Y22, Y9 + VPSHUFB Y8, Y23, Y6 + VPTERNLOGD $0x96, Y7, Y9, Y1 + VPTERNLOGD $0x96, Y5, Y6, Y2 + VMOVDQU (R8), Y5 + VMOVDQU 32(R8), Y6 + VMOVDQU (AX), Y7 + VMOVDQU 32(AX), Y8 + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VPSHUFB Y9, Y24, Y11 + VPSHUFB Y9, Y25, Y9 + VPSHUFB Y10, Y26, Y12 + VPSHUFB Y10, Y27, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VPSHUFB Y10, Y28, Y13 + VPSHUFB Y10, Y29, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VPSHUFB Y12, Y30, Y13 + VPSHUFB Y12, Y31, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y5 + VPTERNLOGD $0x96, Y9, Y10, Y6 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VMOVDQU Y1, (SI) + VMOVDQU Y2, 32(SI) + ADDQ $0x40, SI + VMOVDQU Y3, (DI) + VMOVDQU Y4, 32(DI) + ADDQ $0x40, DI + VMOVDQU Y5, (R8) + VMOVDQU Y6, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y7, (AX) + VMOVDQU Y8, 32(AX) + ADDQ $0x40, AX + SUBQ $0x40, DX + JNZ loop + VZEROUPPER + RET + +// func fftDIT4_avx512_4(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·fftDIT4_avx512_4(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), CX + MOVQ table02+48(FP), CX + VBROADCASTI128 (CX), Y1 + VBROADCASTI128 64(CX), Y0 + VMOVAPS Z1, Z16 + VMOVAPS Z0, Z17 + VBROADCASTI128 16(CX), Y1 + VBROADCASTI128 80(CX), Y0 + VMOVAPS Z1, Z18 + VMOVAPS Z0, Z19 + VBROADCASTI128 32(CX), Y1 + VBROADCASTI128 96(CX), Y0 + VMOVAPS Z1, Z20 + VMOVAPS Z0, Z21 + VBROADCASTI128 48(CX), Y1 + VBROADCASTI128 112(CX), Y0 + VMOVAPS Z1, Z22 + VMOVAPS Z0, Z23 + VBROADCASTI128 (AX), Y1 + VBROADCASTI128 64(AX), Y0 + VMOVAPS Z1, Z24 + VMOVAPS Z0, Z25 + VBROADCASTI128 16(AX), Y1 + VBROADCASTI128 80(AX), Y0 + VMOVAPS Z1, Z26 + VMOVAPS Z0, Z27 + VBROADCASTI128 32(AX), Y1 + VBROADCASTI128 96(AX), Y0 + VMOVAPS Z1, Z28 + VMOVAPS Z0, Z29 + VBROADCASTI128 48(AX), Y1 + VBROADCASTI128 112(AX), Y0 + VMOVAPS Z1, Z30 + VMOVAPS Z0, Z31 + MOVQ $0x0000000f, AX + MOVQ AX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), AX + MOVQ work_base+0(FP), CX + MOVQ 8(CX), DX + XORQ BX, BX + MOVQ (CX)(BX*1), SI + ADDQ AX, BX + MOVQ (CX)(BX*1), DI + ADDQ AX, BX + MOVQ (CX)(BX*1), R8 + ADDQ AX, BX + MOVQ (CX)(BX*1), AX + +loop: + VMOVDQU (SI), Y1 + VMOVDQU 32(SI), Y2 + VMOVDQU (R8), Y5 + VMOVDQU 32(R8), Y6 + VMOVDQU (DI), Y3 + VMOVDQU 32(DI), Y4 + VMOVDQU (AX), Y7 + VMOVDQU 32(AX), Y8 + VPSRLQ $0x04, Y5, Y10 + VPAND Y0, Y5, Y9 + VPAND Y0, Y10, Y10 + VPSHUFB Y9, Y16, Y11 + VPSHUFB Y9, Y17, Y9 + VPSHUFB Y10, Y18, Y12 + VPSHUFB Y10, Y19, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y6, Y0, Y10 + VPSRLQ $0x04, Y6, Y12 + VPAND Y0, Y12, Y12 + VPSHUFB Y10, Y20, Y13 + VPSHUFB Y10, Y21, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VPSHUFB Y12, Y22, Y13 + VPSHUFB Y12, Y23, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y1 + VPTERNLOGD $0x96, Y9, Y10, Y2 + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VPSHUFB Y9, Y16, Y11 + VPSHUFB Y9, Y17, Y9 + VPSHUFB Y10, Y18, Y12 + VPSHUFB Y10, Y19, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VPSHUFB Y10, Y20, Y13 + VPSHUFB Y10, Y21, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VPSHUFB Y12, Y22, Y13 + VPSHUFB Y12, Y23, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y3 + VPTERNLOGD $0x96, Y9, Y10, Y4 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VPSRLQ $0x04, Y3, Y10 + VPAND Y0, Y3, Y9 + VPAND Y0, Y10, Y10 + VPSHUFB Y9, Y24, Y11 + VPSHUFB Y9, Y25, Y9 + VPSHUFB Y10, Y26, Y12 + VPSHUFB Y10, Y27, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y4, Y0, Y10 + VPSRLQ $0x04, Y4, Y12 + VPAND Y0, Y12, Y12 + VPSHUFB Y10, Y28, Y13 + VPSHUFB Y10, Y29, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VPSHUFB Y12, Y30, Y13 + VPSHUFB Y12, Y31, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y1 + VPTERNLOGD $0x96, Y9, Y10, Y2 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VMOVDQU Y1, (SI) + VMOVDQU Y2, 32(SI) + ADDQ $0x40, SI + VMOVDQU Y3, (DI) + VMOVDQU Y4, 32(DI) + ADDQ $0x40, DI + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VMOVDQU Y5, (R8) + VMOVDQU Y6, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y7, (AX) + VMOVDQU Y8, 32(AX) + ADDQ $0x40, AX + SUBQ $0x40, DX + JNZ loop + VZEROUPPER + RET + +// func ifftDIT4_avx512_5(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·ifftDIT4_avx512_5(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), AX + MOVQ table02+48(FP), CX + VBROADCASTI128 (AX), Y1 + VBROADCASTI128 64(AX), Y0 + VMOVAPS Z1, Z16 + VMOVAPS Z0, Z17 + VBROADCASTI128 16(AX), Y1 + VBROADCASTI128 80(AX), Y0 + VMOVAPS Z1, Z18 + VMOVAPS Z0, Z19 + VBROADCASTI128 32(AX), Y1 + VBROADCASTI128 96(AX), Y0 + VMOVAPS Z1, Z20 + VMOVAPS Z0, Z21 + VBROADCASTI128 48(AX), Y1 + VBROADCASTI128 112(AX), Y0 + VMOVAPS Z1, Z22 + VMOVAPS Z0, Z23 + MOVQ $0x0000000f, AX + MOVQ AX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), AX + MOVQ work_base+0(FP), CX + MOVQ 8(CX), DX + XORQ BX, BX + MOVQ (CX)(BX*1), SI + ADDQ AX, BX + MOVQ (CX)(BX*1), DI + ADDQ AX, BX + MOVQ (CX)(BX*1), R8 + ADDQ AX, BX + MOVQ (CX)(BX*1), AX + +loop: + VMOVDQU (SI), Y1 + VMOVDQU 32(SI), Y2 + VMOVDQU (DI), Y3 + VMOVDQU 32(DI), Y4 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VMOVDQU (R8), Y5 + VMOVDQU 32(R8), Y6 + VMOVDQU (AX), Y7 + VMOVDQU 32(AX), Y8 + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VPSHUFB Y9, Y16, Y11 + VPSHUFB Y9, Y17, Y9 + VPSHUFB Y10, Y18, Y12 + VPSHUFB Y10, Y19, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VPSHUFB Y10, Y20, Y13 + VPSHUFB Y10, Y21, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VPSHUFB Y12, Y22, Y13 + VPSHUFB Y12, Y23, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y5 + VPTERNLOGD $0x96, Y9, Y10, Y6 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VMOVDQU Y1, (SI) + VMOVDQU Y2, 32(SI) + ADDQ $0x40, SI + VMOVDQU Y3, (DI) + VMOVDQU Y4, 32(DI) + ADDQ $0x40, DI + VMOVDQU Y5, (R8) + VMOVDQU Y6, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y7, (AX) + VMOVDQU Y8, 32(AX) + ADDQ $0x40, AX + SUBQ $0x40, DX + JNZ loop + VZEROUPPER + RET + +// func fftDIT4_avx512_5(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·fftDIT4_avx512_5(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), CX + MOVQ table02+48(FP), CX + VBROADCASTI128 (AX), Y1 + VBROADCASTI128 64(AX), Y0 + VMOVAPS Z1, Z16 + VMOVAPS Z0, Z17 + VBROADCASTI128 16(AX), Y1 + VBROADCASTI128 80(AX), Y0 + VMOVAPS Z1, Z18 + VMOVAPS Z0, Z19 + VBROADCASTI128 32(AX), Y1 + VBROADCASTI128 96(AX), Y0 + VMOVAPS Z1, Z20 + VMOVAPS Z0, Z21 + VBROADCASTI128 48(AX), Y1 + VBROADCASTI128 112(AX), Y0 + VMOVAPS Z1, Z22 + VMOVAPS Z0, Z23 + MOVQ $0x0000000f, AX + MOVQ AX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), AX + MOVQ work_base+0(FP), CX + MOVQ 8(CX), DX + XORQ BX, BX + MOVQ (CX)(BX*1), SI + ADDQ AX, BX + MOVQ (CX)(BX*1), DI + ADDQ AX, BX + MOVQ (CX)(BX*1), R8 + ADDQ AX, BX + MOVQ (CX)(BX*1), AX + +loop: + VMOVDQU (SI), Y1 + VMOVDQU 32(SI), Y2 + VMOVDQU (R8), Y5 + VMOVDQU 32(R8), Y6 + VMOVDQU (DI), Y3 + VMOVDQU 32(DI), Y4 + VMOVDQU (AX), Y7 + VMOVDQU 32(AX), Y8 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VPSRLQ $0x04, Y3, Y10 + VPAND Y0, Y3, Y9 + VPAND Y0, Y10, Y10 + VPSHUFB Y9, Y16, Y11 + VPSHUFB Y9, Y17, Y9 + VPSHUFB Y10, Y18, Y12 + VPSHUFB Y10, Y19, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y4, Y0, Y10 + VPSRLQ $0x04, Y4, Y12 + VPAND Y0, Y12, Y12 + VPSHUFB Y10, Y20, Y13 + VPSHUFB Y10, Y21, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VPSHUFB Y12, Y22, Y13 + VPSHUFB Y12, Y23, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y1 + VPTERNLOGD $0x96, Y9, Y10, Y2 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VMOVDQU Y1, (SI) + VMOVDQU Y2, 32(SI) + ADDQ $0x40, SI + VMOVDQU Y3, (DI) + VMOVDQU Y4, 32(DI) + ADDQ $0x40, DI + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VMOVDQU Y5, (R8) + VMOVDQU Y6, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y7, (AX) + VMOVDQU Y8, 32(AX) + ADDQ $0x40, AX + SUBQ $0x40, DX + JNZ loop + VZEROUPPER + RET + +// func ifftDIT4_avx512_6(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·ifftDIT4_avx512_6(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), CX + MOVQ table02+48(FP), CX + VBROADCASTI128 (AX), Y1 + VBROADCASTI128 64(AX), Y0 + VMOVAPS Z1, Z16 + VMOVAPS Z0, Z17 + VBROADCASTI128 16(AX), Y1 + VBROADCASTI128 80(AX), Y0 + VMOVAPS Z1, Z18 + VMOVAPS Z0, Z19 + VBROADCASTI128 32(AX), Y1 + VBROADCASTI128 96(AX), Y0 + VMOVAPS Z1, Z20 + VMOVAPS Z0, Z21 + VBROADCASTI128 48(AX), Y1 + VBROADCASTI128 112(AX), Y0 + VMOVAPS Z1, Z22 + VMOVAPS Z0, Z23 + MOVQ $0x0000000f, AX + MOVQ AX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), AX + MOVQ work_base+0(FP), CX + MOVQ 8(CX), DX + XORQ BX, BX + MOVQ (CX)(BX*1), SI + ADDQ AX, BX + MOVQ (CX)(BX*1), DI + ADDQ AX, BX + MOVQ (CX)(BX*1), R8 + ADDQ AX, BX + MOVQ (CX)(BX*1), AX + +loop: + VMOVDQU (SI), Y1 + VMOVDQU 32(SI), Y2 + VMOVDQU (DI), Y3 + VMOVDQU 32(DI), Y4 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VPSRLQ $0x04, Y3, Y6 + VPAND Y0, Y3, Y5 + VPAND Y0, Y6, Y6 + VPSHUFB Y5, Y16, Y7 + VPSHUFB Y5, Y17, Y5 + VPSHUFB Y6, Y18, Y8 + VPSHUFB Y6, Y19, Y6 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y6, Y5 + VPAND Y4, Y0, Y6 + VPSRLQ $0x04, Y4, Y8 + VPAND Y0, Y8, Y8 + VPSHUFB Y6, Y20, Y9 + VPSHUFB Y6, Y21, Y6 + VPXOR Y7, Y9, Y7 + VPXOR Y5, Y6, Y5 + VPSHUFB Y8, Y22, Y9 + VPSHUFB Y8, Y23, Y6 + VPTERNLOGD $0x96, Y7, Y9, Y1 + VPTERNLOGD $0x96, Y5, Y6, Y2 + VMOVDQU (R8), Y5 + VMOVDQU 32(R8), Y6 + VMOVDQU (AX), Y7 + VMOVDQU 32(AX), Y8 + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VMOVDQU Y1, (SI) + VMOVDQU Y2, 32(SI) + ADDQ $0x40, SI + VMOVDQU Y3, (DI) + VMOVDQU Y4, 32(DI) + ADDQ $0x40, DI + VMOVDQU Y5, (R8) + VMOVDQU Y6, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y7, (AX) + VMOVDQU Y8, 32(AX) + ADDQ $0x40, AX + SUBQ $0x40, DX + JNZ loop + VZEROUPPER + RET + +// func fftDIT4_avx512_6(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·fftDIT4_avx512_6(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), AX + MOVQ table02+48(FP), AX + VBROADCASTI128 (AX), Y1 + VBROADCASTI128 64(AX), Y0 + VMOVAPS Z1, Z16 + VMOVAPS Z0, Z17 + VBROADCASTI128 16(AX), Y1 + VBROADCASTI128 80(AX), Y0 + VMOVAPS Z1, Z18 + VMOVAPS Z0, Z19 + VBROADCASTI128 32(AX), Y1 + VBROADCASTI128 96(AX), Y0 + VMOVAPS Z1, Z20 + VMOVAPS Z0, Z21 + VBROADCASTI128 48(AX), Y1 + VBROADCASTI128 112(AX), Y0 + VMOVAPS Z1, Z22 + VMOVAPS Z0, Z23 + MOVQ $0x0000000f, AX + MOVQ AX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), AX + MOVQ work_base+0(FP), CX + MOVQ 8(CX), DX + XORQ BX, BX + MOVQ (CX)(BX*1), SI + ADDQ AX, BX + MOVQ (CX)(BX*1), DI + ADDQ AX, BX + MOVQ (CX)(BX*1), R8 + ADDQ AX, BX + MOVQ (CX)(BX*1), AX + +loop: + VMOVDQU (SI), Y1 + VMOVDQU 32(SI), Y2 + VMOVDQU (R8), Y5 + VMOVDQU 32(R8), Y6 + VMOVDQU (DI), Y3 + VMOVDQU 32(DI), Y4 + VMOVDQU (AX), Y7 + VMOVDQU 32(AX), Y8 + VPSRLQ $0x04, Y5, Y10 + VPAND Y0, Y5, Y9 + VPAND Y0, Y10, Y10 + VPSHUFB Y9, Y16, Y11 + VPSHUFB Y9, Y17, Y9 + VPSHUFB Y10, Y18, Y12 + VPSHUFB Y10, Y19, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y6, Y0, Y10 + VPSRLQ $0x04, Y6, Y12 + VPAND Y0, Y12, Y12 + VPSHUFB Y10, Y20, Y13 + VPSHUFB Y10, Y21, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VPSHUFB Y12, Y22, Y13 + VPSHUFB Y12, Y23, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y1 + VPTERNLOGD $0x96, Y9, Y10, Y2 + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VPSHUFB Y9, Y16, Y11 + VPSHUFB Y9, Y17, Y9 + VPSHUFB Y10, Y18, Y12 + VPSHUFB Y10, Y19, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VPSHUFB Y10, Y20, Y13 + VPSHUFB Y10, Y21, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VPSHUFB Y12, Y22, Y13 + VPSHUFB Y12, Y23, Y10 + VPTERNLOGD $0x96, Y11, Y13, Y3 + VPTERNLOGD $0x96, Y9, Y10, Y4 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VMOVDQU Y1, (SI) + VMOVDQU Y2, 32(SI) + ADDQ $0x40, SI + VMOVDQU Y3, (DI) + VMOVDQU Y4, 32(DI) + ADDQ $0x40, DI + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VMOVDQU Y5, (R8) + VMOVDQU Y6, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y7, (AX) + VMOVDQU Y8, 32(AX) + ADDQ $0x40, AX + SUBQ $0x40, DX + JNZ loop + VZEROUPPER + RET + +// func ifftDIT4_avx512_7(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, SSE2 +TEXT ·ifftDIT4_avx512_7(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), AX + MOVQ table02+48(FP), AX + MOVQ $0x0000000f, AX + MOVQ AX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), AX + MOVQ work_base+0(FP), CX + MOVQ 8(CX), DX + XORQ BX, BX + MOVQ (CX)(BX*1), SI + ADDQ AX, BX + MOVQ (CX)(BX*1), DI + ADDQ AX, BX + MOVQ (CX)(BX*1), R8 + ADDQ AX, BX + MOVQ (CX)(BX*1), AX + +loop: + VMOVDQU (SI), Y0 + VMOVDQU 32(SI), Y1 + VMOVDQU (DI), Y2 + VMOVDQU 32(DI), Y3 + VPXOR Y0, Y2, Y2 + VPXOR Y1, Y3, Y3 + VMOVDQU (R8), Y4 + VMOVDQU 32(R8), Y5 + VMOVDQU (AX), Y6 + VMOVDQU 32(AX), Y7 + VPXOR Y4, Y6, Y6 + VPXOR Y5, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VMOVDQU Y0, (SI) + VMOVDQU Y1, 32(SI) + ADDQ $0x40, SI + VMOVDQU Y2, (DI) + VMOVDQU Y3, 32(DI) + ADDQ $0x40, DI + VMOVDQU Y4, (R8) + VMOVDQU Y5, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y6, (AX) + VMOVDQU Y7, 32(AX) + ADDQ $0x40, AX + SUBQ $0x40, DX + JNZ loop + VZEROUPPER + RET + +// func fftDIT4_avx512_7(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, SSE2 +TEXT ·fftDIT4_avx512_7(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), AX + MOVQ table02+48(FP), AX + MOVQ $0x0000000f, AX + MOVQ AX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), AX + MOVQ work_base+0(FP), CX + MOVQ 8(CX), DX + XORQ BX, BX + MOVQ (CX)(BX*1), SI + ADDQ AX, BX + MOVQ (CX)(BX*1), DI + ADDQ AX, BX + MOVQ (CX)(BX*1), R8 + ADDQ AX, BX + MOVQ (CX)(BX*1), AX + +loop: + VMOVDQU (SI), Y0 + VMOVDQU 32(SI), Y1 + VMOVDQU (R8), Y4 + VMOVDQU 32(R8), Y5 + VMOVDQU (DI), Y2 + VMOVDQU 32(DI), Y3 + VMOVDQU (AX), Y6 + VMOVDQU 32(AX), Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y0, Y2, Y2 + VPXOR Y1, Y3, Y3 + VMOVDQU Y0, (SI) + VMOVDQU Y1, 32(SI) + ADDQ $0x40, SI + VMOVDQU Y2, (DI) + VMOVDQU Y3, 32(DI) + ADDQ $0x40, DI + VPXOR Y4, Y6, Y6 + VPXOR Y5, Y7, Y7 + VMOVDQU Y4, (R8) + VMOVDQU Y5, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y6, (AX) + VMOVDQU Y7, 32(AX) + ADDQ $0x40, AX + SUBQ $0x40, DX + JNZ loop + VZEROUPPER + RET + +// func ifftDIT4_avx2_0(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·ifftDIT4_avx2_0(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), CX + MOVQ table02+48(FP), DX + MOVQ $0x0000000f, BX + MOVQ BX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), BX + MOVQ work_base+0(FP), SI + MOVQ 8(SI), DI + XORQ R8, R8 + MOVQ (SI)(R8*1), R9 + ADDQ BX, R8 + MOVQ (SI)(R8*1), R10 + ADDQ BX, R8 + MOVQ (SI)(R8*1), R11 + ADDQ BX, R8 + MOVQ (SI)(R8*1), BX + +loop: + VMOVDQU (R9), Y1 + VMOVDQU 32(R9), Y2 + VMOVDQU (R10), Y3 + VMOVDQU 32(R10), Y4 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VPSRLQ $0x04, Y3, Y6 + VPAND Y0, Y3, Y5 + VPAND Y0, Y6, Y6 + VBROADCASTI128 (AX), Y7 + VBROADCASTI128 64(AX), Y8 + VPSHUFB Y5, Y7, Y7 + VPSHUFB Y5, Y8, Y5 + VBROADCASTI128 16(AX), Y8 + VBROADCASTI128 80(AX), Y9 + VPSHUFB Y6, Y8, Y8 + VPSHUFB Y6, Y9, Y6 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y6, Y5 + VPAND Y4, Y0, Y6 + VPSRLQ $0x04, Y4, Y8 + VPAND Y0, Y8, Y8 + VBROADCASTI128 32(AX), Y9 + VBROADCASTI128 96(AX), Y10 + VPSHUFB Y6, Y9, Y9 + VPSHUFB Y6, Y10, Y6 + VPXOR Y7, Y9, Y7 + VPXOR Y5, Y6, Y5 + VBROADCASTI128 48(AX), Y9 + VBROADCASTI128 112(AX), Y6 + VPSHUFB Y8, Y9, Y9 + VPSHUFB Y8, Y6, Y6 + XOR3WAY( $0x00, Y7, Y9, Y1) + XOR3WAY( $0x00, Y5, Y6, Y2) + VMOVDQU (R11), Y5 + VMOVDQU 32(R11), Y6 + VMOVDQU (BX), Y7 + VMOVDQU 32(BX), Y8 + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (CX), Y11 + VBROADCASTI128 64(CX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(CX), Y12 + VBROADCASTI128 80(CX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(CX), Y13 + VBROADCASTI128 96(CX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(CX), Y13 + VBROADCASTI128 112(CX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y5) + XOR3WAY( $0x00, Y9, Y10, Y6) + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VPSRLQ $0x04, Y5, Y10 + VPAND Y0, Y5, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (DX), Y11 + VBROADCASTI128 64(DX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(DX), Y12 + VBROADCASTI128 80(DX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y6, Y0, Y10 + VPSRLQ $0x04, Y6, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(DX), Y13 + VBROADCASTI128 96(DX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(DX), Y13 + VBROADCASTI128 112(DX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y1) + XOR3WAY( $0x00, Y9, Y10, Y2) + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (DX), Y11 + VBROADCASTI128 64(DX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(DX), Y12 + VBROADCASTI128 80(DX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(DX), Y13 + VBROADCASTI128 96(DX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(DX), Y13 + VBROADCASTI128 112(DX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y3) + XOR3WAY( $0x00, Y9, Y10, Y4) + VMOVDQU Y1, (R9) + VMOVDQU Y2, 32(R9) + ADDQ $0x40, R9 + VMOVDQU Y3, (R10) + VMOVDQU Y4, 32(R10) + ADDQ $0x40, R10 + VMOVDQU Y5, (R11) + VMOVDQU Y6, 32(R11) + ADDQ $0x40, R11 + VMOVDQU Y7, (BX) + VMOVDQU Y8, 32(BX) + ADDQ $0x40, BX + SUBQ $0x40, DI + JNZ loop + VZEROUPPER + RET + +// func fftDIT4_avx2_0(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·fftDIT4_avx2_0(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), CX + MOVQ table02+48(FP), DX + MOVQ $0x0000000f, BX + MOVQ BX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), BX + MOVQ work_base+0(FP), SI + MOVQ 8(SI), DI + XORQ R8, R8 + MOVQ (SI)(R8*1), R9 + ADDQ BX, R8 + MOVQ (SI)(R8*1), R10 + ADDQ BX, R8 + MOVQ (SI)(R8*1), R11 + ADDQ BX, R8 + MOVQ (SI)(R8*1), BX + +loop: + VMOVDQU (R9), Y1 + VMOVDQU 32(R9), Y2 + VMOVDQU (R11), Y5 + VMOVDQU 32(R11), Y6 + VMOVDQU (R10), Y3 + VMOVDQU 32(R10), Y4 + VMOVDQU (BX), Y7 + VMOVDQU 32(BX), Y8 + VPSRLQ $0x04, Y5, Y10 + VPAND Y0, Y5, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (DX), Y11 + VBROADCASTI128 64(DX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(DX), Y12 + VBROADCASTI128 80(DX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y6, Y0, Y10 + VPSRLQ $0x04, Y6, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(DX), Y13 + VBROADCASTI128 96(DX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(DX), Y13 + VBROADCASTI128 112(DX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y1) + XOR3WAY( $0x00, Y9, Y10, Y2) + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (DX), Y11 + VBROADCASTI128 64(DX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(DX), Y12 + VBROADCASTI128 80(DX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(DX), Y13 + VBROADCASTI128 96(DX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(DX), Y13 + VBROADCASTI128 112(DX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y3) + XOR3WAY( $0x00, Y9, Y10, Y4) + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VPSRLQ $0x04, Y3, Y10 + VPAND Y0, Y3, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (AX), Y11 + VBROADCASTI128 64(AX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(AX), Y12 + VBROADCASTI128 80(AX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y4, Y0, Y10 + VPSRLQ $0x04, Y4, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(AX), Y13 + VBROADCASTI128 96(AX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(AX), Y13 + VBROADCASTI128 112(AX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y1) + XOR3WAY( $0x00, Y9, Y10, Y2) + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VMOVDQU Y1, (R9) + VMOVDQU Y2, 32(R9) + ADDQ $0x40, R9 + VMOVDQU Y3, (R10) + VMOVDQU Y4, 32(R10) + ADDQ $0x40, R10 + VPSRLQ $0x04, Y7, Y2 + VPAND Y0, Y7, Y1 + VPAND Y0, Y2, Y2 + VBROADCASTI128 (CX), Y3 + VBROADCASTI128 64(CX), Y4 + VPSHUFB Y1, Y3, Y3 + VPSHUFB Y1, Y4, Y1 + VBROADCASTI128 16(CX), Y4 + VBROADCASTI128 80(CX), Y9 + VPSHUFB Y2, Y4, Y4 + VPSHUFB Y2, Y9, Y2 + VPXOR Y3, Y4, Y3 + VPXOR Y1, Y2, Y1 + VPAND Y8, Y0, Y2 + VPSRLQ $0x04, Y8, Y4 + VPAND Y0, Y4, Y4 + VBROADCASTI128 32(CX), Y9 + VBROADCASTI128 96(CX), Y10 + VPSHUFB Y2, Y9, Y9 + VPSHUFB Y2, Y10, Y2 + VPXOR Y3, Y9, Y3 + VPXOR Y1, Y2, Y1 + VBROADCASTI128 48(CX), Y9 + VBROADCASTI128 112(CX), Y2 + VPSHUFB Y4, Y9, Y9 + VPSHUFB Y4, Y2, Y2 + XOR3WAY( $0x00, Y3, Y9, Y5) + XOR3WAY( $0x00, Y1, Y2, Y6) + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VMOVDQU Y5, (R11) + VMOVDQU Y6, 32(R11) + ADDQ $0x40, R11 + VMOVDQU Y7, (BX) + VMOVDQU Y8, 32(BX) + ADDQ $0x40, BX + SUBQ $0x40, DI + JNZ loop + VZEROUPPER + RET + +// func ifftDIT4_avx2_1(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·ifftDIT4_avx2_1(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), AX + MOVQ table02+48(FP), CX + MOVQ $0x0000000f, DX + MOVQ DX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), DX + MOVQ work_base+0(FP), BX + MOVQ 8(BX), SI + XORQ DI, DI + MOVQ (BX)(DI*1), R8 + ADDQ DX, DI + MOVQ (BX)(DI*1), R9 + ADDQ DX, DI + MOVQ (BX)(DI*1), R10 + ADDQ DX, DI + MOVQ (BX)(DI*1), DX + +loop: + VMOVDQU (R8), Y1 + VMOVDQU 32(R8), Y2 + VMOVDQU (R9), Y3 + VMOVDQU 32(R9), Y4 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VMOVDQU (R10), Y5 + VMOVDQU 32(R10), Y6 + VMOVDQU (DX), Y7 + VMOVDQU 32(DX), Y8 + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (AX), Y11 + VBROADCASTI128 64(AX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(AX), Y12 + VBROADCASTI128 80(AX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(AX), Y13 + VBROADCASTI128 96(AX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(AX), Y13 + VBROADCASTI128 112(AX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y5) + XOR3WAY( $0x00, Y9, Y10, Y6) + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VPSRLQ $0x04, Y5, Y10 + VPAND Y0, Y5, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (CX), Y11 + VBROADCASTI128 64(CX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(CX), Y12 + VBROADCASTI128 80(CX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y6, Y0, Y10 + VPSRLQ $0x04, Y6, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(CX), Y13 + VBROADCASTI128 96(CX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(CX), Y13 + VBROADCASTI128 112(CX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y1) + XOR3WAY( $0x00, Y9, Y10, Y2) + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (CX), Y11 + VBROADCASTI128 64(CX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(CX), Y12 + VBROADCASTI128 80(CX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(CX), Y13 + VBROADCASTI128 96(CX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(CX), Y13 + VBROADCASTI128 112(CX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y3) + XOR3WAY( $0x00, Y9, Y10, Y4) + VMOVDQU Y1, (R8) + VMOVDQU Y2, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y3, (R9) + VMOVDQU Y4, 32(R9) + ADDQ $0x40, R9 + VMOVDQU Y5, (R10) + VMOVDQU Y6, 32(R10) + ADDQ $0x40, R10 + VMOVDQU Y7, (DX) + VMOVDQU Y8, 32(DX) + ADDQ $0x40, DX + SUBQ $0x40, SI + JNZ loop + VZEROUPPER + RET + +// func fftDIT4_avx2_1(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·fftDIT4_avx2_1(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), CX + MOVQ table02+48(FP), DX + MOVQ $0x0000000f, DX + MOVQ DX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), DX + MOVQ work_base+0(FP), BX + MOVQ 8(BX), SI + XORQ DI, DI + MOVQ (BX)(DI*1), R8 + ADDQ DX, DI + MOVQ (BX)(DI*1), R9 + ADDQ DX, DI + MOVQ (BX)(DI*1), R10 + ADDQ DX, DI + MOVQ (BX)(DI*1), DX + +loop: + VMOVDQU (R8), Y1 + VMOVDQU 32(R8), Y2 + VMOVDQU (R10), Y5 + VMOVDQU 32(R10), Y6 + VMOVDQU (R9), Y3 + VMOVDQU 32(R9), Y4 + VMOVDQU (DX), Y7 + VMOVDQU 32(DX), Y8 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VPSRLQ $0x04, Y3, Y10 + VPAND Y0, Y3, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (AX), Y11 + VBROADCASTI128 64(AX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(AX), Y12 + VBROADCASTI128 80(AX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y4, Y0, Y10 + VPSRLQ $0x04, Y4, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(AX), Y13 + VBROADCASTI128 96(AX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(AX), Y13 + VBROADCASTI128 112(AX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y1) + XOR3WAY( $0x00, Y9, Y10, Y2) + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VMOVDQU Y1, (R8) + VMOVDQU Y2, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y3, (R9) + VMOVDQU Y4, 32(R9) + ADDQ $0x40, R9 + VPSRLQ $0x04, Y7, Y2 + VPAND Y0, Y7, Y1 + VPAND Y0, Y2, Y2 + VBROADCASTI128 (CX), Y3 + VBROADCASTI128 64(CX), Y4 + VPSHUFB Y1, Y3, Y3 + VPSHUFB Y1, Y4, Y1 + VBROADCASTI128 16(CX), Y4 + VBROADCASTI128 80(CX), Y9 + VPSHUFB Y2, Y4, Y4 + VPSHUFB Y2, Y9, Y2 + VPXOR Y3, Y4, Y3 + VPXOR Y1, Y2, Y1 + VPAND Y8, Y0, Y2 + VPSRLQ $0x04, Y8, Y4 + VPAND Y0, Y4, Y4 + VBROADCASTI128 32(CX), Y9 + VBROADCASTI128 96(CX), Y10 + VPSHUFB Y2, Y9, Y9 + VPSHUFB Y2, Y10, Y2 + VPXOR Y3, Y9, Y3 + VPXOR Y1, Y2, Y1 + VBROADCASTI128 48(CX), Y9 + VBROADCASTI128 112(CX), Y2 + VPSHUFB Y4, Y9, Y9 + VPSHUFB Y4, Y2, Y2 + XOR3WAY( $0x00, Y3, Y9, Y5) + XOR3WAY( $0x00, Y1, Y2, Y6) + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VMOVDQU Y5, (R10) + VMOVDQU Y6, 32(R10) + ADDQ $0x40, R10 + VMOVDQU Y7, (DX) + VMOVDQU Y8, 32(DX) + ADDQ $0x40, DX + SUBQ $0x40, SI + JNZ loop + VZEROUPPER + RET + +// func ifftDIT4_avx2_2(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·ifftDIT4_avx2_2(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), CX + MOVQ table02+48(FP), CX + MOVQ $0x0000000f, DX + MOVQ DX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), DX + MOVQ work_base+0(FP), BX + MOVQ 8(BX), SI + XORQ DI, DI + MOVQ (BX)(DI*1), R8 + ADDQ DX, DI + MOVQ (BX)(DI*1), R9 + ADDQ DX, DI + MOVQ (BX)(DI*1), R10 + ADDQ DX, DI + MOVQ (BX)(DI*1), DX + +loop: + VMOVDQU (R8), Y1 + VMOVDQU 32(R8), Y2 + VMOVDQU (R9), Y3 + VMOVDQU 32(R9), Y4 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VPSRLQ $0x04, Y3, Y6 + VPAND Y0, Y3, Y5 + VPAND Y0, Y6, Y6 + VBROADCASTI128 (AX), Y7 + VBROADCASTI128 64(AX), Y8 + VPSHUFB Y5, Y7, Y7 + VPSHUFB Y5, Y8, Y5 + VBROADCASTI128 16(AX), Y8 + VBROADCASTI128 80(AX), Y9 + VPSHUFB Y6, Y8, Y8 + VPSHUFB Y6, Y9, Y6 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y6, Y5 + VPAND Y4, Y0, Y6 + VPSRLQ $0x04, Y4, Y8 + VPAND Y0, Y8, Y8 + VBROADCASTI128 32(AX), Y9 + VBROADCASTI128 96(AX), Y10 + VPSHUFB Y6, Y9, Y9 + VPSHUFB Y6, Y10, Y6 + VPXOR Y7, Y9, Y7 + VPXOR Y5, Y6, Y5 + VBROADCASTI128 48(AX), Y9 + VBROADCASTI128 112(AX), Y6 + VPSHUFB Y8, Y9, Y9 + VPSHUFB Y8, Y6, Y6 + XOR3WAY( $0x00, Y7, Y9, Y1) + XOR3WAY( $0x00, Y5, Y6, Y2) + VMOVDQU (R10), Y5 + VMOVDQU 32(R10), Y6 + VMOVDQU (DX), Y7 + VMOVDQU 32(DX), Y8 + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VPSRLQ $0x04, Y5, Y10 + VPAND Y0, Y5, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (CX), Y11 + VBROADCASTI128 64(CX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(CX), Y12 + VBROADCASTI128 80(CX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y6, Y0, Y10 + VPSRLQ $0x04, Y6, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(CX), Y13 + VBROADCASTI128 96(CX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(CX), Y13 + VBROADCASTI128 112(CX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y1) + XOR3WAY( $0x00, Y9, Y10, Y2) + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (CX), Y11 + VBROADCASTI128 64(CX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(CX), Y12 + VBROADCASTI128 80(CX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(CX), Y13 + VBROADCASTI128 96(CX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(CX), Y13 + VBROADCASTI128 112(CX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y3) + XOR3WAY( $0x00, Y9, Y10, Y4) + VMOVDQU Y1, (R8) + VMOVDQU Y2, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y3, (R9) + VMOVDQU Y4, 32(R9) + ADDQ $0x40, R9 + VMOVDQU Y5, (R10) + VMOVDQU Y6, 32(R10) + ADDQ $0x40, R10 + VMOVDQU Y7, (DX) + VMOVDQU Y8, 32(DX) + ADDQ $0x40, DX + SUBQ $0x40, SI + JNZ loop + VZEROUPPER + RET + +// func fftDIT4_avx2_2(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·fftDIT4_avx2_2(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), AX + MOVQ table02+48(FP), CX + MOVQ $0x0000000f, DX + MOVQ DX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), DX + MOVQ work_base+0(FP), BX + MOVQ 8(BX), SI + XORQ DI, DI + MOVQ (BX)(DI*1), R8 + ADDQ DX, DI + MOVQ (BX)(DI*1), R9 + ADDQ DX, DI + MOVQ (BX)(DI*1), R10 + ADDQ DX, DI + MOVQ (BX)(DI*1), DX + +loop: + VMOVDQU (R8), Y1 + VMOVDQU 32(R8), Y2 + VMOVDQU (R10), Y5 + VMOVDQU 32(R10), Y6 + VMOVDQU (R9), Y3 + VMOVDQU 32(R9), Y4 + VMOVDQU (DX), Y7 + VMOVDQU 32(DX), Y8 + VPSRLQ $0x04, Y5, Y10 + VPAND Y0, Y5, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (CX), Y11 + VBROADCASTI128 64(CX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(CX), Y12 + VBROADCASTI128 80(CX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y6, Y0, Y10 + VPSRLQ $0x04, Y6, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(CX), Y13 + VBROADCASTI128 96(CX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(CX), Y13 + VBROADCASTI128 112(CX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y1) + XOR3WAY( $0x00, Y9, Y10, Y2) + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (CX), Y11 + VBROADCASTI128 64(CX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(CX), Y12 + VBROADCASTI128 80(CX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(CX), Y13 + VBROADCASTI128 96(CX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(CX), Y13 + VBROADCASTI128 112(CX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y3) + XOR3WAY( $0x00, Y9, Y10, Y4) + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VMOVDQU Y1, (R8) + VMOVDQU Y2, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y3, (R9) + VMOVDQU Y4, 32(R9) + ADDQ $0x40, R9 + VPSRLQ $0x04, Y7, Y2 + VPAND Y0, Y7, Y1 + VPAND Y0, Y2, Y2 + VBROADCASTI128 (AX), Y3 + VBROADCASTI128 64(AX), Y4 + VPSHUFB Y1, Y3, Y3 + VPSHUFB Y1, Y4, Y1 + VBROADCASTI128 16(AX), Y4 + VBROADCASTI128 80(AX), Y9 + VPSHUFB Y2, Y4, Y4 + VPSHUFB Y2, Y9, Y2 + VPXOR Y3, Y4, Y3 + VPXOR Y1, Y2, Y1 + VPAND Y8, Y0, Y2 + VPSRLQ $0x04, Y8, Y4 + VPAND Y0, Y4, Y4 + VBROADCASTI128 32(AX), Y9 + VBROADCASTI128 96(AX), Y10 + VPSHUFB Y2, Y9, Y9 + VPSHUFB Y2, Y10, Y2 + VPXOR Y3, Y9, Y3 + VPXOR Y1, Y2, Y1 + VBROADCASTI128 48(AX), Y9 + VBROADCASTI128 112(AX), Y2 + VPSHUFB Y4, Y9, Y9 + VPSHUFB Y4, Y2, Y2 + XOR3WAY( $0x00, Y3, Y9, Y5) + XOR3WAY( $0x00, Y1, Y2, Y6) + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VMOVDQU Y5, (R10) + VMOVDQU Y6, 32(R10) + ADDQ $0x40, R10 + VMOVDQU Y7, (DX) + VMOVDQU Y8, 32(DX) + ADDQ $0x40, DX + SUBQ $0x40, SI + JNZ loop + VZEROUPPER + RET + +// func ifftDIT4_avx2_3(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·ifftDIT4_avx2_3(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), AX + MOVQ table02+48(FP), AX + MOVQ $0x0000000f, CX + MOVQ CX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), CX + MOVQ work_base+0(FP), DX + MOVQ 8(DX), BX + XORQ SI, SI + MOVQ (DX)(SI*1), DI + ADDQ CX, SI + MOVQ (DX)(SI*1), R8 + ADDQ CX, SI + MOVQ (DX)(SI*1), R9 + ADDQ CX, SI + MOVQ (DX)(SI*1), CX + +loop: + VMOVDQU (DI), Y1 + VMOVDQU 32(DI), Y2 + VMOVDQU (R8), Y3 + VMOVDQU 32(R8), Y4 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VMOVDQU (R9), Y5 + VMOVDQU 32(R9), Y6 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VPSRLQ $0x04, Y5, Y10 + VPAND Y0, Y5, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (AX), Y11 + VBROADCASTI128 64(AX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(AX), Y12 + VBROADCASTI128 80(AX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y6, Y0, Y10 + VPSRLQ $0x04, Y6, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(AX), Y13 + VBROADCASTI128 96(AX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(AX), Y13 + VBROADCASTI128 112(AX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y1) + XOR3WAY( $0x00, Y9, Y10, Y2) + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (AX), Y11 + VBROADCASTI128 64(AX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(AX), Y12 + VBROADCASTI128 80(AX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(AX), Y13 + VBROADCASTI128 96(AX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(AX), Y13 + VBROADCASTI128 112(AX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y3) + XOR3WAY( $0x00, Y9, Y10, Y4) + VMOVDQU Y1, (DI) + VMOVDQU Y2, 32(DI) + ADDQ $0x40, DI + VMOVDQU Y3, (R8) + VMOVDQU Y4, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y5, (R9) + VMOVDQU Y6, 32(R9) + ADDQ $0x40, R9 + VMOVDQU Y7, (CX) + VMOVDQU Y8, 32(CX) + ADDQ $0x40, CX + SUBQ $0x40, BX + JNZ loop + VZEROUPPER + RET + +// func fftDIT4_avx2_3(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·fftDIT4_avx2_3(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), AX + MOVQ table02+48(FP), CX + MOVQ $0x0000000f, CX + MOVQ CX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), CX + MOVQ work_base+0(FP), DX + MOVQ 8(DX), BX + XORQ SI, SI + MOVQ (DX)(SI*1), DI + ADDQ CX, SI + MOVQ (DX)(SI*1), R8 + ADDQ CX, SI + MOVQ (DX)(SI*1), R9 + ADDQ CX, SI + MOVQ (DX)(SI*1), CX + +loop: + VMOVDQU (DI), Y1 + VMOVDQU 32(DI), Y2 + VMOVDQU (R9), Y5 + VMOVDQU 32(R9), Y6 + VMOVDQU (R8), Y3 + VMOVDQU 32(R8), Y4 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VMOVDQU Y1, (DI) + VMOVDQU Y2, 32(DI) + ADDQ $0x40, DI + VMOVDQU Y3, (R8) + VMOVDQU Y4, 32(R8) + ADDQ $0x40, R8 + VPSRLQ $0x04, Y7, Y2 + VPAND Y0, Y7, Y1 + VPAND Y0, Y2, Y2 + VBROADCASTI128 (AX), Y3 + VBROADCASTI128 64(AX), Y4 + VPSHUFB Y1, Y3, Y3 + VPSHUFB Y1, Y4, Y1 + VBROADCASTI128 16(AX), Y4 + VBROADCASTI128 80(AX), Y9 + VPSHUFB Y2, Y4, Y4 + VPSHUFB Y2, Y9, Y2 + VPXOR Y3, Y4, Y3 + VPXOR Y1, Y2, Y1 + VPAND Y8, Y0, Y2 + VPSRLQ $0x04, Y8, Y4 + VPAND Y0, Y4, Y4 + VBROADCASTI128 32(AX), Y9 + VBROADCASTI128 96(AX), Y10 + VPSHUFB Y2, Y9, Y9 + VPSHUFB Y2, Y10, Y2 + VPXOR Y3, Y9, Y3 + VPXOR Y1, Y2, Y1 + VBROADCASTI128 48(AX), Y9 + VBROADCASTI128 112(AX), Y2 + VPSHUFB Y4, Y9, Y9 + VPSHUFB Y4, Y2, Y2 + XOR3WAY( $0x00, Y3, Y9, Y5) + XOR3WAY( $0x00, Y1, Y2, Y6) + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VMOVDQU Y5, (R9) + VMOVDQU Y6, 32(R9) + ADDQ $0x40, R9 + VMOVDQU Y7, (CX) + VMOVDQU Y8, 32(CX) + ADDQ $0x40, CX + SUBQ $0x40, BX + JNZ loop + VZEROUPPER + RET + +// func ifftDIT4_avx2_4(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·ifftDIT4_avx2_4(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), CX + MOVQ table02+48(FP), DX + MOVQ $0x0000000f, DX + MOVQ DX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), DX + MOVQ work_base+0(FP), BX + MOVQ 8(BX), SI + XORQ DI, DI + MOVQ (BX)(DI*1), R8 + ADDQ DX, DI + MOVQ (BX)(DI*1), R9 + ADDQ DX, DI + MOVQ (BX)(DI*1), R10 + ADDQ DX, DI + MOVQ (BX)(DI*1), DX + +loop: + VMOVDQU (R8), Y1 + VMOVDQU 32(R8), Y2 + VMOVDQU (R9), Y3 + VMOVDQU 32(R9), Y4 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VPSRLQ $0x04, Y3, Y6 + VPAND Y0, Y3, Y5 + VPAND Y0, Y6, Y6 + VBROADCASTI128 (AX), Y7 + VBROADCASTI128 64(AX), Y8 + VPSHUFB Y5, Y7, Y7 + VPSHUFB Y5, Y8, Y5 + VBROADCASTI128 16(AX), Y8 + VBROADCASTI128 80(AX), Y9 + VPSHUFB Y6, Y8, Y8 + VPSHUFB Y6, Y9, Y6 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y6, Y5 + VPAND Y4, Y0, Y6 + VPSRLQ $0x04, Y4, Y8 + VPAND Y0, Y8, Y8 + VBROADCASTI128 32(AX), Y9 + VBROADCASTI128 96(AX), Y10 + VPSHUFB Y6, Y9, Y9 + VPSHUFB Y6, Y10, Y6 + VPXOR Y7, Y9, Y7 + VPXOR Y5, Y6, Y5 + VBROADCASTI128 48(AX), Y9 + VBROADCASTI128 112(AX), Y6 + VPSHUFB Y8, Y9, Y9 + VPSHUFB Y8, Y6, Y6 + XOR3WAY( $0x00, Y7, Y9, Y1) + XOR3WAY( $0x00, Y5, Y6, Y2) + VMOVDQU (R10), Y5 + VMOVDQU 32(R10), Y6 + VMOVDQU (DX), Y7 + VMOVDQU 32(DX), Y8 + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (CX), Y11 + VBROADCASTI128 64(CX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(CX), Y12 + VBROADCASTI128 80(CX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(CX), Y13 + VBROADCASTI128 96(CX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(CX), Y13 + VBROADCASTI128 112(CX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y5) + XOR3WAY( $0x00, Y9, Y10, Y6) + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VMOVDQU Y1, (R8) + VMOVDQU Y2, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y3, (R9) + VMOVDQU Y4, 32(R9) + ADDQ $0x40, R9 + VMOVDQU Y5, (R10) + VMOVDQU Y6, 32(R10) + ADDQ $0x40, R10 + VMOVDQU Y7, (DX) + VMOVDQU Y8, 32(DX) + ADDQ $0x40, DX + SUBQ $0x40, SI + JNZ loop + VZEROUPPER + RET + +// func fftDIT4_avx2_4(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·fftDIT4_avx2_4(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), CX + MOVQ table02+48(FP), CX + MOVQ $0x0000000f, DX + MOVQ DX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), DX + MOVQ work_base+0(FP), BX + MOVQ 8(BX), SI + XORQ DI, DI + MOVQ (BX)(DI*1), R8 + ADDQ DX, DI + MOVQ (BX)(DI*1), R9 + ADDQ DX, DI + MOVQ (BX)(DI*1), R10 + ADDQ DX, DI + MOVQ (BX)(DI*1), DX + +loop: + VMOVDQU (R8), Y1 + VMOVDQU 32(R8), Y2 + VMOVDQU (R10), Y5 + VMOVDQU 32(R10), Y6 + VMOVDQU (R9), Y3 + VMOVDQU 32(R9), Y4 + VMOVDQU (DX), Y7 + VMOVDQU 32(DX), Y8 + VPSRLQ $0x04, Y5, Y10 + VPAND Y0, Y5, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (CX), Y11 + VBROADCASTI128 64(CX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(CX), Y12 + VBROADCASTI128 80(CX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y6, Y0, Y10 + VPSRLQ $0x04, Y6, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(CX), Y13 + VBROADCASTI128 96(CX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(CX), Y13 + VBROADCASTI128 112(CX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y1) + XOR3WAY( $0x00, Y9, Y10, Y2) + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (CX), Y11 + VBROADCASTI128 64(CX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(CX), Y12 + VBROADCASTI128 80(CX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(CX), Y13 + VBROADCASTI128 96(CX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(CX), Y13 + VBROADCASTI128 112(CX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y3) + XOR3WAY( $0x00, Y9, Y10, Y4) + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VPSRLQ $0x04, Y3, Y10 + VPAND Y0, Y3, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (AX), Y11 + VBROADCASTI128 64(AX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(AX), Y12 + VBROADCASTI128 80(AX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y4, Y0, Y10 + VPSRLQ $0x04, Y4, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(AX), Y13 + VBROADCASTI128 96(AX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(AX), Y13 + VBROADCASTI128 112(AX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y1) + XOR3WAY( $0x00, Y9, Y10, Y2) + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VMOVDQU Y1, (R8) + VMOVDQU Y2, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y3, (R9) + VMOVDQU Y4, 32(R9) + ADDQ $0x40, R9 + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VMOVDQU Y5, (R10) + VMOVDQU Y6, 32(R10) + ADDQ $0x40, R10 + VMOVDQU Y7, (DX) + VMOVDQU Y8, 32(DX) + ADDQ $0x40, DX + SUBQ $0x40, SI + JNZ loop + VZEROUPPER + RET + +// func ifftDIT4_avx2_5(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·ifftDIT4_avx2_5(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), AX + MOVQ table02+48(FP), CX + MOVQ $0x0000000f, CX + MOVQ CX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), CX + MOVQ work_base+0(FP), DX + MOVQ 8(DX), BX + XORQ SI, SI + MOVQ (DX)(SI*1), DI + ADDQ CX, SI + MOVQ (DX)(SI*1), R8 + ADDQ CX, SI + MOVQ (DX)(SI*1), R9 + ADDQ CX, SI + MOVQ (DX)(SI*1), CX + +loop: + VMOVDQU (DI), Y1 + VMOVDQU 32(DI), Y2 + VMOVDQU (R8), Y3 + VMOVDQU 32(R8), Y4 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VMOVDQU (R9), Y5 + VMOVDQU 32(R9), Y6 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (AX), Y11 + VBROADCASTI128 64(AX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(AX), Y12 + VBROADCASTI128 80(AX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(AX), Y13 + VBROADCASTI128 96(AX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(AX), Y13 + VBROADCASTI128 112(AX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y5) + XOR3WAY( $0x00, Y9, Y10, Y6) + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VMOVDQU Y1, (DI) + VMOVDQU Y2, 32(DI) + ADDQ $0x40, DI + VMOVDQU Y3, (R8) + VMOVDQU Y4, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y5, (R9) + VMOVDQU Y6, 32(R9) + ADDQ $0x40, R9 + VMOVDQU Y7, (CX) + VMOVDQU Y8, 32(CX) + ADDQ $0x40, CX + SUBQ $0x40, BX + JNZ loop + VZEROUPPER + RET + +// func fftDIT4_avx2_5(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·fftDIT4_avx2_5(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), CX + MOVQ table02+48(FP), CX + MOVQ $0x0000000f, CX + MOVQ CX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), CX + MOVQ work_base+0(FP), DX + MOVQ 8(DX), BX + XORQ SI, SI + MOVQ (DX)(SI*1), DI + ADDQ CX, SI + MOVQ (DX)(SI*1), R8 + ADDQ CX, SI + MOVQ (DX)(SI*1), R9 + ADDQ CX, SI + MOVQ (DX)(SI*1), CX + +loop: + VMOVDQU (DI), Y1 + VMOVDQU 32(DI), Y2 + VMOVDQU (R9), Y5 + VMOVDQU 32(R9), Y6 + VMOVDQU (R8), Y3 + VMOVDQU 32(R8), Y4 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VPSRLQ $0x04, Y3, Y10 + VPAND Y0, Y3, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (AX), Y11 + VBROADCASTI128 64(AX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(AX), Y12 + VBROADCASTI128 80(AX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y4, Y0, Y10 + VPSRLQ $0x04, Y4, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(AX), Y13 + VBROADCASTI128 96(AX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(AX), Y13 + VBROADCASTI128 112(AX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y1) + XOR3WAY( $0x00, Y9, Y10, Y2) + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VMOVDQU Y1, (DI) + VMOVDQU Y2, 32(DI) + ADDQ $0x40, DI + VMOVDQU Y3, (R8) + VMOVDQU Y4, 32(R8) + ADDQ $0x40, R8 + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VMOVDQU Y5, (R9) + VMOVDQU Y6, 32(R9) + ADDQ $0x40, R9 + VMOVDQU Y7, (CX) + VMOVDQU Y8, 32(CX) + ADDQ $0x40, CX + SUBQ $0x40, BX + JNZ loop + VZEROUPPER + RET + +// func ifftDIT4_avx2_6(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·ifftDIT4_avx2_6(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), CX + MOVQ table02+48(FP), CX + MOVQ $0x0000000f, CX + MOVQ CX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), CX + MOVQ work_base+0(FP), DX + MOVQ 8(DX), BX + XORQ SI, SI + MOVQ (DX)(SI*1), DI + ADDQ CX, SI + MOVQ (DX)(SI*1), R8 + ADDQ CX, SI + MOVQ (DX)(SI*1), R9 + ADDQ CX, SI + MOVQ (DX)(SI*1), CX + +loop: + VMOVDQU (DI), Y1 + VMOVDQU 32(DI), Y2 + VMOVDQU (R8), Y3 + VMOVDQU 32(R8), Y4 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VPSRLQ $0x04, Y3, Y6 + VPAND Y0, Y3, Y5 + VPAND Y0, Y6, Y6 + VBROADCASTI128 (AX), Y7 + VBROADCASTI128 64(AX), Y8 + VPSHUFB Y5, Y7, Y7 + VPSHUFB Y5, Y8, Y5 + VBROADCASTI128 16(AX), Y8 + VBROADCASTI128 80(AX), Y9 + VPSHUFB Y6, Y8, Y8 + VPSHUFB Y6, Y9, Y6 + VPXOR Y7, Y8, Y7 + VPXOR Y5, Y6, Y5 + VPAND Y4, Y0, Y6 + VPSRLQ $0x04, Y4, Y8 + VPAND Y0, Y8, Y8 + VBROADCASTI128 32(AX), Y9 + VBROADCASTI128 96(AX), Y10 + VPSHUFB Y6, Y9, Y9 + VPSHUFB Y6, Y10, Y6 + VPXOR Y7, Y9, Y7 + VPXOR Y5, Y6, Y5 + VBROADCASTI128 48(AX), Y9 + VBROADCASTI128 112(AX), Y6 + VPSHUFB Y8, Y9, Y9 + VPSHUFB Y8, Y6, Y6 + XOR3WAY( $0x00, Y7, Y9, Y1) + XOR3WAY( $0x00, Y5, Y6, Y2) + VMOVDQU (R9), Y5 + VMOVDQU 32(R9), Y6 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VMOVDQU Y1, (DI) + VMOVDQU Y2, 32(DI) + ADDQ $0x40, DI + VMOVDQU Y3, (R8) + VMOVDQU Y4, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y5, (R9) + VMOVDQU Y6, 32(R9) + ADDQ $0x40, R9 + VMOVDQU Y7, (CX) + VMOVDQU Y8, 32(CX) + ADDQ $0x40, CX + SUBQ $0x40, BX + JNZ loop + VZEROUPPER + RET + +// func fftDIT4_avx2_6(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 +TEXT ·fftDIT4_avx2_6(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), AX + MOVQ table02+48(FP), AX + MOVQ $0x0000000f, CX + MOVQ CX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), CX + MOVQ work_base+0(FP), DX + MOVQ 8(DX), BX + XORQ SI, SI + MOVQ (DX)(SI*1), DI + ADDQ CX, SI + MOVQ (DX)(SI*1), R8 + ADDQ CX, SI + MOVQ (DX)(SI*1), R9 + ADDQ CX, SI + MOVQ (DX)(SI*1), CX + +loop: + VMOVDQU (DI), Y1 + VMOVDQU 32(DI), Y2 + VMOVDQU (R9), Y5 + VMOVDQU 32(R9), Y6 + VMOVDQU (R8), Y3 + VMOVDQU 32(R8), Y4 + VMOVDQU (CX), Y7 + VMOVDQU 32(CX), Y8 + VPSRLQ $0x04, Y5, Y10 + VPAND Y0, Y5, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (AX), Y11 + VBROADCASTI128 64(AX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(AX), Y12 + VBROADCASTI128 80(AX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y6, Y0, Y10 + VPSRLQ $0x04, Y6, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(AX), Y13 + VBROADCASTI128 96(AX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(AX), Y13 + VBROADCASTI128 112(AX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y1) + XOR3WAY( $0x00, Y9, Y10, Y2) + VPSRLQ $0x04, Y7, Y10 + VPAND Y0, Y7, Y9 + VPAND Y0, Y10, Y10 + VBROADCASTI128 (AX), Y11 + VBROADCASTI128 64(AX), Y12 + VPSHUFB Y9, Y11, Y11 + VPSHUFB Y9, Y12, Y9 + VBROADCASTI128 16(AX), Y12 + VBROADCASTI128 80(AX), Y13 + VPSHUFB Y10, Y12, Y12 + VPSHUFB Y10, Y13, Y10 + VPXOR Y11, Y12, Y11 + VPXOR Y9, Y10, Y9 + VPAND Y8, Y0, Y10 + VPSRLQ $0x04, Y8, Y12 + VPAND Y0, Y12, Y12 + VBROADCASTI128 32(AX), Y13 + VBROADCASTI128 96(AX), Y14 + VPSHUFB Y10, Y13, Y13 + VPSHUFB Y10, Y14, Y10 + VPXOR Y11, Y13, Y11 + VPXOR Y9, Y10, Y9 + VBROADCASTI128 48(AX), Y13 + VBROADCASTI128 112(AX), Y10 + VPSHUFB Y12, Y13, Y13 + VPSHUFB Y12, Y10, Y10 + XOR3WAY( $0x00, Y11, Y13, Y3) + XOR3WAY( $0x00, Y9, Y10, Y4) + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y4, Y8, Y8 + VPXOR Y1, Y3, Y3 + VPXOR Y2, Y4, Y4 + VMOVDQU Y1, (DI) + VMOVDQU Y2, 32(DI) + ADDQ $0x40, DI + VMOVDQU Y3, (R8) + VMOVDQU Y4, 32(R8) + ADDQ $0x40, R8 + VPXOR Y5, Y7, Y7 + VPXOR Y6, Y8, Y8 + VMOVDQU Y5, (R9) + VMOVDQU Y6, 32(R9) + ADDQ $0x40, R9 + VMOVDQU Y7, (CX) + VMOVDQU Y8, 32(CX) + ADDQ $0x40, CX + SUBQ $0x40, BX + JNZ loop + VZEROUPPER + RET + +// func ifftDIT4_avx2_7(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, SSE2 +TEXT ·ifftDIT4_avx2_7(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), AX + MOVQ table02+48(FP), AX + MOVQ $0x0000000f, AX + MOVQ AX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), AX + MOVQ work_base+0(FP), CX + MOVQ 8(CX), DX + XORQ BX, BX + MOVQ (CX)(BX*1), SI + ADDQ AX, BX + MOVQ (CX)(BX*1), DI + ADDQ AX, BX + MOVQ (CX)(BX*1), R8 + ADDQ AX, BX + MOVQ (CX)(BX*1), AX + +loop: + VMOVDQU (SI), Y0 + VMOVDQU 32(SI), Y1 + VMOVDQU (DI), Y2 + VMOVDQU 32(DI), Y3 + VPXOR Y0, Y2, Y2 + VPXOR Y1, Y3, Y3 + VMOVDQU (R8), Y4 + VMOVDQU 32(R8), Y5 + VMOVDQU (AX), Y6 + VMOVDQU 32(AX), Y7 + VPXOR Y4, Y6, Y6 + VPXOR Y5, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VMOVDQU Y0, (SI) + VMOVDQU Y1, 32(SI) + ADDQ $0x40, SI + VMOVDQU Y2, (DI) + VMOVDQU Y3, 32(DI) + ADDQ $0x40, DI + VMOVDQU Y4, (R8) + VMOVDQU Y5, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y6, (AX) + VMOVDQU Y7, 32(AX) + ADDQ $0x40, AX + SUBQ $0x40, DX + JNZ loop + VZEROUPPER + RET + +// func fftDIT4_avx2_7(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) +// Requires: AVX, AVX2, SSE2 +TEXT ·fftDIT4_avx2_7(SB), NOSPLIT, $0-56 + // dist must be multiplied by 24 (size of slice header) + MOVQ table01+32(FP), AX + MOVQ table23+40(FP), AX + MOVQ table02+48(FP), AX + MOVQ $0x0000000f, AX + MOVQ AX, X0 + VPBROADCASTB X0, Y0 + MOVQ dist+24(FP), AX + MOVQ work_base+0(FP), CX + MOVQ 8(CX), DX + XORQ BX, BX + MOVQ (CX)(BX*1), SI + ADDQ AX, BX + MOVQ (CX)(BX*1), DI + ADDQ AX, BX + MOVQ (CX)(BX*1), R8 + ADDQ AX, BX + MOVQ (CX)(BX*1), AX + +loop: + VMOVDQU (SI), Y0 + VMOVDQU 32(SI), Y1 + VMOVDQU (R8), Y4 + VMOVDQU 32(R8), Y5 + VMOVDQU (DI), Y2 + VMOVDQU 32(DI), Y3 + VMOVDQU (AX), Y6 + VMOVDQU 32(AX), Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y1, Y5, Y5 + VPXOR Y2, Y6, Y6 + VPXOR Y3, Y7, Y7 + VPXOR Y0, Y2, Y2 + VPXOR Y1, Y3, Y3 + VMOVDQU Y0, (SI) + VMOVDQU Y1, 32(SI) + ADDQ $0x40, SI + VMOVDQU Y2, (DI) + VMOVDQU Y3, 32(DI) + ADDQ $0x40, DI + VPXOR Y4, Y6, Y6 + VPXOR Y5, Y7, Y7 + VMOVDQU Y4, (R8) + VMOVDQU Y5, 32(R8) + ADDQ $0x40, R8 + VMOVDQU Y6, (AX) + VMOVDQU Y7, 32(AX) + ADDQ $0x40, AX + SUBQ $0x40, DX + JNZ loop + VZEROUPPER + RET + +// func ifftDIT2_ssse3(x []byte, y []byte, table *[128]uint8) +// Requires: SSE, SSE2, SSSE3 +TEXT ·ifftDIT2_ssse3(SB), NOSPLIT, $0-56 + MOVQ table+48(FP), AX + MOVUPS (AX), X0 + MOVUPS 64(AX), X1 + MOVUPS 16(AX), X2 + MOVUPS 80(AX), X3 + MOVUPS 32(AX), X4 + MOVUPS 96(AX), X5 + XORPS X6, X6 + MOVQ $0x0000000f, CX + MOVQ CX, X7 + PSHUFB X6, X7 + MOVQ x_len+8(FP), CX + MOVQ x_base+0(FP), DX + MOVQ y_base+24(FP), BX + +loop: + MOVUPS (DX), X6 + MOVUPS 32(DX), X8 + MOVUPS (BX), X9 + MOVUPS 32(BX), X10 + PXOR X6, X9 + PXOR X8, X10 + MOVUPS X9, (BX) + MOVUPS X10, 32(BX) + MOVAPS X9, X11 + PSRLQ $0x04, X11 + MOVAPS X9, X9 + PAND X7, X9 + PAND X7, X11 + MOVUPS X0, X12 + MOVUPS X1, X13 + PSHUFB X9, X12 + PSHUFB X9, X13 + MOVUPS X2, X9 + MOVUPS X3, X14 + PSHUFB X11, X9 + PSHUFB X11, X14 + PXOR X9, X12 + PXOR X14, X13 + MOVAPS X10, X9 + MOVAPS X10, X10 + PAND X7, X9 + PSRLQ $0x04, X10 + PAND X7, X10 + MOVUPS X4, X11 + MOVUPS X5, X14 + PSHUFB X9, X11 + PSHUFB X9, X14 + PXOR X11, X12 + PXOR X14, X13 + MOVUPS 48(AX), X11 + MOVUPS 112(AX), X14 + PSHUFB X10, X11 + PSHUFB X10, X14 + PXOR X11, X12 + PXOR X14, X13 + PXOR X12, X6 + PXOR X13, X8 + MOVUPS X6, (DX) + MOVUPS X8, 32(DX) + MOVUPS 16(DX), X6 + MOVUPS 48(DX), X8 + MOVUPS 16(BX), X9 + MOVUPS 48(BX), X10 + PXOR X6, X9 + PXOR X8, X10 + MOVUPS X9, 16(BX) + MOVUPS X10, 48(BX) + MOVAPS X9, X11 + PSRLQ $0x04, X11 + MOVAPS X9, X9 + PAND X7, X9 + PAND X7, X11 + MOVUPS X0, X12 + MOVUPS X1, X13 + PSHUFB X9, X12 + PSHUFB X9, X13 + MOVUPS X2, X9 + MOVUPS X3, X14 + PSHUFB X11, X9 + PSHUFB X11, X14 + PXOR X9, X12 + PXOR X14, X13 + MOVAPS X10, X9 + MOVAPS X10, X10 + PAND X7, X9 + PSRLQ $0x04, X10 + PAND X7, X10 + MOVUPS X4, X11 + MOVUPS X5, X14 + PSHUFB X9, X11 + PSHUFB X9, X14 + PXOR X11, X12 + PXOR X14, X13 + MOVUPS 48(AX), X11 + MOVUPS 112(AX), X14 + PSHUFB X10, X11 + PSHUFB X10, X14 + PXOR X11, X12 + PXOR X14, X13 + PXOR X12, X6 + PXOR X13, X8 + MOVUPS X6, 16(DX) + MOVUPS X8, 48(DX) + ADDQ $0x40, DX + ADDQ $0x40, BX + SUBQ $0x40, CX + JNZ loop + RET + +// func fftDIT2_ssse3(x []byte, y []byte, table *[128]uint8) +// Requires: SSE, SSE2, SSSE3 +TEXT ·fftDIT2_ssse3(SB), NOSPLIT, $0-56 + MOVQ table+48(FP), AX + MOVUPS (AX), X0 + MOVUPS 64(AX), X1 + MOVUPS 16(AX), X2 + MOVUPS 80(AX), X3 + MOVUPS 32(AX), X4 + MOVUPS 96(AX), X5 + XORPS X6, X6 + MOVQ $0x0000000f, CX + MOVQ CX, X7 + PSHUFB X6, X7 + MOVQ x_len+8(FP), CX + MOVQ x_base+0(FP), DX + MOVQ y_base+24(FP), BX + +loop: + MOVUPS (BX), X9 + MOVUPS 32(BX), X10 + MOVAPS X9, X8 + PSRLQ $0x04, X8 + MOVAPS X9, X6 + PAND X7, X6 + PAND X7, X8 + MOVUPS X0, X11 + MOVUPS X1, X12 + PSHUFB X6, X11 + PSHUFB X6, X12 + MOVUPS X2, X6 + MOVUPS X3, X13 + PSHUFB X8, X6 + PSHUFB X8, X13 + PXOR X6, X11 + PXOR X13, X12 + MOVAPS X10, X6 + MOVAPS X10, X8 + PAND X7, X6 + PSRLQ $0x04, X8 + PAND X7, X8 + MOVUPS X4, X13 + MOVUPS X5, X14 + PSHUFB X6, X13 + PSHUFB X6, X14 + PXOR X13, X11 + PXOR X14, X12 + MOVUPS 48(AX), X13 + MOVUPS 112(AX), X14 + PSHUFB X8, X13 + PSHUFB X8, X14 + PXOR X13, X11 + PXOR X14, X12 + MOVUPS (DX), X6 + MOVUPS 32(DX), X8 + PXOR X11, X6 + PXOR X12, X8 + MOVUPS X6, (DX) + MOVUPS X8, 32(DX) + PXOR X6, X9 + PXOR X8, X10 + MOVUPS X9, (BX) + MOVUPS X10, 32(BX) + MOVUPS 16(BX), X9 + MOVUPS 48(BX), X10 + MOVAPS X9, X8 + PSRLQ $0x04, X8 + MOVAPS X9, X6 + PAND X7, X6 + PAND X7, X8 + MOVUPS X0, X11 + MOVUPS X1, X12 + PSHUFB X6, X11 + PSHUFB X6, X12 + MOVUPS X2, X6 + MOVUPS X3, X13 + PSHUFB X8, X6 + PSHUFB X8, X13 + PXOR X6, X11 + PXOR X13, X12 + MOVAPS X10, X6 + MOVAPS X10, X8 + PAND X7, X6 + PSRLQ $0x04, X8 + PAND X7, X8 + MOVUPS X4, X13 + MOVUPS X5, X14 + PSHUFB X6, X13 + PSHUFB X6, X14 + PXOR X13, X11 + PXOR X14, X12 + MOVUPS 48(AX), X13 + MOVUPS 112(AX), X14 + PSHUFB X8, X13 + PSHUFB X8, X14 + PXOR X13, X11 + PXOR X14, X12 + MOVUPS 16(DX), X6 + MOVUPS 48(DX), X8 + PXOR X11, X6 + PXOR X12, X8 + MOVUPS X6, 16(DX) + MOVUPS X8, 48(DX) + PXOR X6, X9 + PXOR X8, X10 + MOVUPS X9, 16(BX) + MOVUPS X10, 48(BX) + ADDQ $0x40, DX + ADDQ $0x40, BX + SUBQ $0x40, CX + JNZ loop + RET + +// func mulgf16_ssse3(x []byte, y []byte, table *[128]uint8) +// Requires: SSE, SSE2, SSSE3 +TEXT ·mulgf16_ssse3(SB), NOSPLIT, $0-56 + MOVQ table+48(FP), AX + MOVUPS (AX), X0 + MOVUPS 64(AX), X1 + MOVUPS 16(AX), X2 + MOVUPS 80(AX), X3 + MOVUPS 32(AX), X4 + MOVUPS 96(AX), X5 + MOVUPS 48(AX), X6 + MOVUPS 112(AX), X7 + MOVQ x_len+8(FP), AX + MOVQ x_base+0(FP), CX + MOVQ y_base+24(FP), DX + XORPS X8, X8 + MOVQ $0x0000000f, BX + MOVQ BX, X9 + PSHUFB X8, X9 + +loop: + MOVUPS (DX), X8 + MOVUPS 32(DX), X10 + MOVAPS X8, X11 + PSRLQ $0x04, X11 + MOVAPS X8, X8 + PAND X9, X8 + PAND X9, X11 + MOVUPS X0, X12 + MOVUPS X1, X13 + PSHUFB X8, X12 + PSHUFB X8, X13 + MOVUPS X2, X8 + MOVUPS X3, X14 + PSHUFB X11, X8 + PSHUFB X11, X14 + PXOR X8, X12 + PXOR X14, X13 + MOVAPS X10, X8 + MOVAPS X10, X10 + PAND X9, X8 + PSRLQ $0x04, X10 + PAND X9, X10 + MOVUPS X4, X11 + MOVUPS X5, X14 + PSHUFB X8, X11 + PSHUFB X8, X14 + PXOR X11, X12 + PXOR X14, X13 + MOVUPS X6, X11 + MOVUPS X7, X14 + PSHUFB X10, X11 + PSHUFB X10, X14 + PXOR X11, X12 + PXOR X14, X13 + MOVUPS X12, (CX) + MOVUPS X13, 32(CX) + MOVUPS 16(DX), X8 + MOVUPS 48(DX), X10 + MOVAPS X8, X11 + PSRLQ $0x04, X11 + MOVAPS X8, X8 + PAND X9, X8 + PAND X9, X11 + MOVUPS X0, X12 + MOVUPS X1, X13 + PSHUFB X8, X12 + PSHUFB X8, X13 + MOVUPS X2, X8 + MOVUPS X3, X14 + PSHUFB X11, X8 + PSHUFB X11, X14 + PXOR X8, X12 + PXOR X14, X13 + MOVAPS X10, X8 + MOVAPS X10, X10 + PAND X9, X8 + PSRLQ $0x04, X10 + PAND X9, X10 + MOVUPS X4, X11 + MOVUPS X5, X14 + PSHUFB X8, X11 + PSHUFB X8, X14 + PXOR X11, X12 + PXOR X14, X13 + MOVUPS X6, X11 + MOVUPS X7, X14 + PSHUFB X10, X11 + PSHUFB X10, X14 + PXOR X11, X12 + PXOR X14, X13 + MOVUPS X12, 16(CX) + MOVUPS X13, 48(CX) + ADDQ $0x40, CX + ADDQ $0x40, DX + SUBQ $0x40, AX + JNZ loop + RET diff --git a/vendor/github.com/klauspost/reedsolomon/galois_noasm.go b/vendor/github.com/klauspost/reedsolomon/galois_noasm.go index 7ef78f8..47e24d7 100644 --- a/vendor/github.com/klauspost/reedsolomon/galois_noasm.go +++ b/vendor/github.com/klauspost/reedsolomon/galois_noasm.go @@ -7,8 +7,6 @@ package reedsolomon -import "encoding/binary" - func galMulSlice(c byte, in, out []byte, o *options) { out = out[:len(in)] if c == 1 { @@ -34,25 +32,38 @@ func galMulSliceXor(c byte, in, out []byte, o *options) { } // simple slice xor -func sliceXor(in, out []byte, _ *options) { - for len(out) >= 32 { - inS := in[:32] - v0 := binary.LittleEndian.Uint64(out[:]) ^ binary.LittleEndian.Uint64(inS[:]) - v1 := binary.LittleEndian.Uint64(out[8:]) ^ binary.LittleEndian.Uint64(inS[8:]) - v2 := binary.LittleEndian.Uint64(out[16:]) ^ binary.LittleEndian.Uint64(inS[16:]) - v3 := binary.LittleEndian.Uint64(out[24:]) ^ binary.LittleEndian.Uint64(inS[24:]) - binary.LittleEndian.PutUint64(out[:], v0) - binary.LittleEndian.PutUint64(out[8:], v1) - binary.LittleEndian.PutUint64(out[16:], v2) - binary.LittleEndian.PutUint64(out[24:], v3) - out = out[32:] - in = in[32:] - } - for n, input := range in { - out[n] ^= input - } +func sliceXor(in, out []byte, o *options) { + sliceXorGo(in, out, o) } func init() { defaultOptions.useAVX512 = false } + +// 4-way butterfly +func ifftDIT4(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) { + ifftDIT4Ref(work, dist, log_m01, log_m23, log_m02, o) +} + +// 4-way butterfly +func fftDIT4(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) { + fftDIT4Ref(work, dist, log_m01, log_m23, log_m02, o) +} + +// 2-way butterfly forward +func fftDIT2(x, y []byte, log_m ffe, o *options) { + // Reference version: + refMulAdd(x, y, log_m) + sliceXorGo(x, y, o) +} + +// 2-way butterfly inverse +func ifftDIT2(x, y []byte, log_m ffe, o *options) { + // Reference version: + sliceXorGo(x, y, o) + refMulAdd(x, y, log_m) +} + +func mulgf16(x, y []byte, log_m ffe, o *options) { + refMul(x, y, log_m) +} diff --git a/vendor/github.com/klauspost/reedsolomon/galois_ppc64le.go b/vendor/github.com/klauspost/reedsolomon/galois_ppc64le.go index 52e8c23..415828a 100644 --- a/vendor/github.com/klauspost/reedsolomon/galois_ppc64le.go +++ b/vendor/github.com/klauspost/reedsolomon/galois_ppc64le.go @@ -72,3 +72,31 @@ func sliceXor(in, out []byte, o *options) { out[n] ^= input } } + +// 4-way butterfly +func ifftDIT4(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) { + ifftDIT4Ref(work, dist, log_m01, log_m23, log_m02, o) +} + +// 4-way butterfly +func fftDIT4(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) { + fftDIT4Ref(work, dist, log_m01, log_m23, log_m02, o) +} + +// 2-way butterfly forward +func fftDIT2(x, y []byte, log_m ffe, o *options) { + // Reference version: + refMulAdd(x, y, log_m) + sliceXor(x, y, o) +} + +// 2-way butterfly inverse +func ifftDIT2(x, y []byte, log_m ffe, o *options) { + // Reference version: + sliceXor(x, y, o) + refMulAdd(x, y, log_m) +} + +func mulgf16(x, y []byte, log_m ffe, o *options) { + refMul(x, y, log_m) +} diff --git a/vendor/github.com/klauspost/reedsolomon/options.go b/vendor/github.com/klauspost/reedsolomon/options.go index 26269eb..83dd2cd 100644 --- a/vendor/github.com/klauspost/reedsolomon/options.go +++ b/vendor/github.com/klauspost/reedsolomon/options.go @@ -16,10 +16,13 @@ type options struct { perRound int useAVX512, useAVX2, useSSSE3, useSSE2 bool + useJerasureMatrix bool usePAR1Matrix bool useCauchy bool fastOneParity bool inversionCache bool + customMatrix [][]byte + withLeopard *bool // stream options concReads bool @@ -130,36 +133,57 @@ func WithStreamBlockSize(n int) Option { } } -func withSSSE3(enabled bool) Option { +// WithSSSE3 allows to enable/disable SSSE3 instructions. +// If not set, SSSE3 will be turned on or off automatically based on CPU ID information. +func WithSSSE3(enabled bool) Option { return func(o *options) { o.useSSSE3 = enabled } } -func withAVX2(enabled bool) Option { +// WithAVX2 allows to enable/disable AVX2 instructions. +// If not set, AVX2 will be turned on or off automatically based on CPU ID information. +func WithAVX2(enabled bool) Option { return func(o *options) { o.useAVX2 = enabled } } -func withSSE2(enabled bool) Option { +// WithSSE2 allows to enable/disable SSE2 instructions. +// If not set, SSE2 will be turned on or off automatically based on CPU ID information. +func WithSSE2(enabled bool) Option { return func(o *options) { o.useSSE2 = enabled } } -func withAVX512(enabled bool) Option { +// WithAVX512 allows to enable/disable AVX512 instructions. +// If not set, AVX512 will be turned on or off automatically based on CPU ID information. +func WithAVX512(enabled bool) Option { return func(o *options) { o.useAVX512 = enabled } } +// WithJerasureMatrix causes the encoder to build the Reed-Solomon-Vandermonde +// matrix in the same way as done by the Jerasure library. +// The first row and column of the coding matrix only contains 1's in this method +// so the first parity chunk is always equal to XOR of all data chunks. +func WithJerasureMatrix() Option { + return func(o *options) { + o.useJerasureMatrix = true + o.usePAR1Matrix = false + o.useCauchy = false + } +} + // WithPAR1Matrix causes the encoder to build the matrix how PARv1 // does. Note that the method they use is buggy, and may lead to cases // where recovery is impossible, even if there are enough parity // shards. func WithPAR1Matrix() Option { return func(o *options) { + o.useJerasureMatrix = false o.usePAR1Matrix = true o.useCauchy = false } @@ -171,8 +195,9 @@ func WithPAR1Matrix() Option { // but will result in slightly faster start-up time. func WithCauchyMatrix() Option { return func(o *options) { - o.useCauchy = true + o.useJerasureMatrix = false o.usePAR1Matrix = false + o.useCauchy = true } } @@ -184,3 +209,26 @@ func WithFastOneParityMatrix() Option { o.fastOneParity = true } } + +// WithCustomMatrix causes the encoder to use the manually specified matrix. +// customMatrix represents only the parity chunks. +// customMatrix must have at least ParityShards rows and DataShards columns. +// It can be used for interoperability with libraries which generate +// the matrix differently or to implement more complex coding schemes like LRC +// (locally reconstructible codes). +func WithCustomMatrix(customMatrix [][]byte) Option { + return func(o *options) { + o.customMatrix = customMatrix + } +} + +// WithLeopardGF16 will always use leopard GF16 for encoding, +// even when there is less than 256 shards. +// This will likely improve reconstruction time for some setups. +// This is not compatible with Leopard output for <= 256 shards. +// Note that Leopard places certain restrictions on use see other documentation. +func WithLeopardGF16(enabled bool) Option { + return func(o *options) { + o.withLeopard = &enabled + } +} diff --git a/vendor/github.com/klauspost/reedsolomon/reedsolomon.go b/vendor/github.com/klauspost/reedsolomon/reedsolomon.go index 8382e56..a2e5886 100644 --- a/vendor/github.com/klauspost/reedsolomon/reedsolomon.go +++ b/vendor/github.com/klauspost/reedsolomon/reedsolomon.go @@ -8,7 +8,6 @@ // Package reedsolomon enables Erasure Coding in Go // // For usage and examples, see https://github.com/klauspost/reedsolomon -// package reedsolomon import ( @@ -77,6 +76,24 @@ type Encoder interface { // calling the Verify function is likely to fail. ReconstructData(shards [][]byte) error + // ReconstructSome will recreate only requested data shards, if possible. + // + // Given a list of shards, some of which contain data, fills in the + // data shards indicated by true values in the "required" parameter. + // The length of "required" array must be equal to DataShards. + // + // The length of "shards" array must be equal to Shards. + // You indicate that a shard is missing by setting it to nil or zero-length. + // If a shard is zero-length but has sufficient capacity, that memory will + // be used, otherwise a new []byte will be allocated. + // + // If there are too few shards to reconstruct the missing + // ones, ErrTooFewShards will be returned. + // + // As the reconstructed shard set may contain missing parity shards, + // calling the Verify function is likely to fail. + ReconstructSome(shards [][]byte, required []bool) error + // Update parity is use for change a few data shards and update it's parity. // Input 'newDatashards' containing data shards changed. // Input 'shards' containing old data shards (if data shard not changed, it can be nil) and old parity shards. @@ -108,6 +125,22 @@ type Encoder interface { Join(dst io.Writer, shards [][]byte, outSize int) error } +// Extensions is an optional interface. +// All returned instances will support this interface. +type Extensions interface { + // ShardSizeMultiple will return the size the shard sizes must be a multiple of. + ShardSizeMultiple() int + + // DataShards will return the number of data shards. + DataShards() int + + // ParityShards will return the number of parity shards. + ParityShards() int + + // TotalShards will return the total number of shards. + TotalShards() int +} + const ( avx2CodeGenMinSize = 64 avx2CodeGenMinShards = 3 @@ -121,9 +154,9 @@ const ( // distribution of datashards and parity shards. // Construct if using New() type reedSolomon struct { - DataShards int // Number of data shards, should not be modified. - ParityShards int // Number of parity shards, should not be modified. - Shards int // Total number of shards. Calculated, and should not be modified. + dataShards int // Number of data shards, should not be modified. + parityShards int // Number of parity shards, should not be modified. + totalShards int // Total number of shards. Calculated, and should not be modified. m matrix tree *inversionTree parity [][]byte @@ -131,6 +164,24 @@ type reedSolomon struct { mPool sync.Pool } +var _ = Extensions(&reedSolomon{}) + +func (r *reedSolomon) ShardSizeMultiple() int { + return 1 +} + +func (r *reedSolomon) DataShards() int { + return r.dataShards +} + +func (r *reedSolomon) ParityShards() int { + return r.parityShards +} + +func (r *reedSolomon) TotalShards() int { + return r.parityShards +} + // ErrInvShardNum will be returned by New, if you attempt to create // an Encoder with less than one data shard or less than zero parity // shards. @@ -141,6 +192,9 @@ var ErrInvShardNum = errors.New("cannot create Encoder with less than one data s // GF(2^8). var ErrMaxShardNum = errors.New("cannot create Encoder with more than 256 data+parity shards") +// ErrNotSupported is returned when an operation is not supported. +var ErrNotSupported = errors.New("operation not supported") + // buildMatrix creates the matrix to use for encoding, given the // number of data shards and the number of total shards. // @@ -173,6 +227,87 @@ func buildMatrix(dataShards, totalShards int) (matrix, error) { return vm.Multiply(topInv) } +// buildMatrixJerasure creates the same encoding matrix as Jerasure library +// +// The top square of the matrix is guaranteed to be an identity +// matrix, which means that the data shards are unchanged after +// encoding. +func buildMatrixJerasure(dataShards, totalShards int) (matrix, error) { + // Start with a Vandermonde matrix. This matrix would work, + // in theory, but doesn't have the property that the data + // shards are unchanged after encoding. + vm, err := vandermonde(totalShards, dataShards) + if err != nil { + return nil, err + } + + // Jerasure does this: + // first row is always 100..00 + vm[0][0] = 1 + for i := 1; i < dataShards; i++ { + vm[0][i] = 0 + } + // last row is always 000..01 + for i := 0; i < dataShards-1; i++ { + vm[totalShards-1][i] = 0 + } + vm[totalShards-1][dataShards-1] = 1 + + for i := 0; i < dataShards; i++ { + // Find the row where i'th col is not 0 + r := i + for ; r < totalShards && vm[r][i] == 0; r++ { + } + if r != i { + // Swap it with i'th row if not already + t := vm[r] + vm[r] = vm[i] + vm[i] = t + } + // Multiply by the inverted matrix (same as vm.Multiply(vm[0:dataShards].Invert())) + if vm[i][i] != 1 { + // Make vm[i][i] = 1 by dividing the column by vm[i][i] + tmp := galDivide(1, vm[i][i]) + for j := 0; j < totalShards; j++ { + vm[j][i] = galMultiply(vm[j][i], tmp) + } + } + for j := 0; j < dataShards; j++ { + // Make vm[i][j] = 0 where j != i by adding vm[i][j]*vm[.][i] to each column + tmp := vm[i][j] + if j != i && tmp != 0 { + for r := 0; r < totalShards; r++ { + vm[r][j] = galAdd(vm[r][j], galMultiply(tmp, vm[r][i])) + } + } + } + } + + // Make vm[dataShards] row all ones - divide each column j by vm[dataShards][j] + for j := 0; j < dataShards; j++ { + tmp := vm[dataShards][j] + if tmp != 1 { + tmp = galDivide(1, tmp) + for i := dataShards; i < totalShards; i++ { + vm[i][j] = galMultiply(vm[i][j], tmp) + } + } + } + + // Make vm[dataShards...totalShards-1][0] column all ones - divide each row + for i := dataShards + 1; i < totalShards; i++ { + tmp := vm[i][0] + if tmp != 1 { + tmp = galDivide(1, tmp) + for j := 0; j < dataShards; j++ { + vm[i][j] = galMultiply(vm[i][j], tmp) + } + } + } + + return vm, nil +} + // buildMatrixPAR1 creates the matrix to use for encoding according to // the PARv1 spec, given the number of data shards and the number of // total shards. Note that the method they use is buggy, and may lead @@ -252,41 +387,70 @@ func buildXorMatrix(dataShards, totalShards int) (matrix, error) { // New creates a new encoder and initializes it to // the number of data shards and parity shards that // you want to use. You can reuse this encoder. -// Note that the maximum number of total shards is 256. +// Note that the maximum number of total shards is 65536, with some +// restrictions for a total larger than 256: +// +// - Shard sizes must be multiple of 64 +// - The methods Join/Split/Update/EncodeIdx are not supported +// // If no options are supplied, default options are used. func New(dataShards, parityShards int, opts ...Option) (Encoder, error) { - r := reedSolomon{ - DataShards: dataShards, - ParityShards: parityShards, - Shards: dataShards + parityShards, - o: defaultOptions, - } - + o := defaultOptions for _, opt := range opts { - opt(&r.o) - } - if dataShards <= 0 || parityShards < 0 { - return nil, ErrInvShardNum + opt(&o) } + if (dataShards+parityShards > 256 && o.withLeopard == nil) || + (o.withLeopard != nil && *o.withLeopard == true && parityShards > 0) { + return newFF16(dataShards, parityShards, o) + } if dataShards+parityShards > 256 { return nil, ErrMaxShardNum } + r := reedSolomon{ + dataShards: dataShards, + parityShards: parityShards, + totalShards: dataShards + parityShards, + o: o, + } + + if dataShards <= 0 || parityShards < 0 { + return nil, ErrInvShardNum + } + if parityShards == 0 { return &r, nil } var err error switch { + case r.o.customMatrix != nil: + if len(r.o.customMatrix) < parityShards { + return nil, errors.New("coding matrix must contain at least parityShards rows") + } + r.m = make([][]byte, r.totalShards) + for i := 0; i < dataShards; i++ { + r.m[i] = make([]byte, dataShards) + r.m[i][i] = 1 + } + for k, row := range r.o.customMatrix { + if len(row) < dataShards { + return nil, errors.New("coding matrix must contain at least dataShards columns") + } + r.m[dataShards+k] = make([]byte, dataShards) + copy(r.m[dataShards+k], row) + } case r.o.fastOneParity && parityShards == 1: - r.m, err = buildXorMatrix(dataShards, r.Shards) + r.m, err = buildXorMatrix(dataShards, r.totalShards) case r.o.useCauchy: - r.m, err = buildMatrixCauchy(dataShards, r.Shards) + r.m, err = buildMatrixCauchy(dataShards, r.totalShards) case r.o.usePAR1Matrix: - r.m, err = buildMatrixPAR1(dataShards, r.Shards) + r.m, err = buildMatrixPAR1(dataShards, r.totalShards) + case r.o.useJerasureMatrix: + r.m, err = buildMatrixJerasure(dataShards, r.totalShards) default: - r.m, err = buildMatrix(dataShards, r.Shards) + r.m, err = buildMatrix(dataShards, r.totalShards) } if err != nil { return nil, err @@ -384,7 +548,7 @@ func New(dataShards, parityShards int, opts ...Option) (Encoder, error) { } if avx2CodeGen && r.o.useAVX2 { - sz := r.DataShards * r.ParityShards * 2 * 32 + sz := r.dataShards * r.parityShards * 2 * 32 r.mPool.New = func() interface{} { return make([]byte, sz) } @@ -404,7 +568,7 @@ var ErrTooFewShards = errors.New("too few shards given") // The parity shards will always be overwritten and the data shards // will remain the same. func (r *reedSolomon) Encode(shards [][]byte) error { - if len(shards) != r.Shards { + if len(shards) != r.totalShards { return ErrTooFewShards } @@ -414,10 +578,10 @@ func (r *reedSolomon) Encode(shards [][]byte) error { } // Get the slice of output buffers. - output := shards[r.DataShards:] + output := shards[r.dataShards:] // Do the coding. - r.codeSomeShards(r.parity, shards[0:r.DataShards], output[:r.ParityShards], len(shards[0])) + r.codeSomeShards(r.parity, shards[0:r.dataShards], output[:r.parityShards], len(shards[0])) return nil } @@ -426,13 +590,13 @@ func (r *reedSolomon) Encode(shards [][]byte) error { // Data shards should only be delivered once. There is no check for this. // The parity shards will always be updated and the data shards will remain the unchanged. func (r *reedSolomon) EncodeIdx(dataShard []byte, idx int, parity [][]byte) error { - if len(parity) != r.ParityShards { + if len(parity) != r.parityShards { return ErrTooFewShards } if len(parity) == 0 { return nil } - if idx < 0 || idx >= r.DataShards { + if idx < 0 || idx >= r.dataShards { return ErrInvShardNum } err := checkShards(parity, false) @@ -451,7 +615,7 @@ func (r *reedSolomon) EncodeIdx(dataShard []byte, idx int, parity [][]byte) erro for start < len(dataShard) { in := dataShard[start:end] - for iRow := 0; iRow < r.ParityShards; iRow++ { + for iRow := 0; iRow < r.parityShards; iRow++ { galMulSliceXor(r.parity[iRow][idx], in, parity[iRow][start:end], &r.o) } start = end @@ -467,11 +631,11 @@ func (r *reedSolomon) EncodeIdx(dataShard []byte, idx int, parity [][]byte) erro var ErrInvalidInput = errors.New("invalid input") func (r *reedSolomon) Update(shards [][]byte, newDatashards [][]byte) error { - if len(shards) != r.Shards { + if len(shards) != r.totalShards { return ErrTooFewShards } - if len(newDatashards) != r.DataShards { + if len(newDatashards) != r.dataShards { return ErrTooFewShards } @@ -490,7 +654,7 @@ func (r *reedSolomon) Update(shards [][]byte, newDatashards [][]byte) error { return ErrInvalidInput } } - for _, p := range shards[r.DataShards:] { + for _, p := range shards[r.dataShards:] { if p == nil { return ErrInvalidInput } @@ -499,10 +663,10 @@ func (r *reedSolomon) Update(shards [][]byte, newDatashards [][]byte) error { shardSize := shardSize(shards) // Get the slice of output buffers. - output := shards[r.DataShards:] + output := shards[r.dataShards:] // Do the coding. - r.updateParityShards(r.parity, shards[0:r.DataShards], newDatashards[0:r.DataShards], output, r.ParityShards, shardSize) + r.updateParityShards(r.parity, shards[0:r.dataShards], newDatashards[0:r.dataShards], output, r.parityShards, shardSize) return nil } @@ -516,7 +680,7 @@ func (r *reedSolomon) updateParityShards(matrixRows, oldinputs, newinputs, outpu return } - for c := 0; c < r.DataShards; c++ { + for c := 0; c < r.dataShards; c++ { in := newinputs[c] if in == nil { continue @@ -543,7 +707,7 @@ func (r *reedSolomon) updateParityShardsP(matrixRows, oldinputs, newinputs, outp } wg.Add(1) go func(start, stop int) { - for c := 0; c < r.DataShards; c++ { + for c := 0; c < r.dataShards; c++ { in := newinputs[c] if in == nil { continue @@ -565,7 +729,7 @@ func (r *reedSolomon) updateParityShardsP(matrixRows, oldinputs, newinputs, outp // Verify returns true if the parity shards contain the right data. // The data is the same format as Encode. No data is modified. func (r *reedSolomon) Verify(shards [][]byte) (bool, error) { - if len(shards) != r.Shards { + if len(shards) != r.totalShards { return false, ErrTooFewShards } err := checkShards(shards, false) @@ -574,10 +738,10 @@ func (r *reedSolomon) Verify(shards [][]byte) (bool, error) { } // Slice of buffers being checked. - toCheck := shards[r.DataShards:] + toCheck := shards[r.dataShards:] // Do the checking. - return r.checkSomeShards(r.parity, shards[:r.DataShards], toCheck[:r.ParityShards], len(shards[0])), nil + return r.checkSomeShards(r.parity, shards[:r.dataShards], toCheck[:r.parityShards], len(shards[0])), nil } func (r *reedSolomon) canAVX2C(byteCount int, inputs, outputs int) bool { @@ -587,11 +751,11 @@ func (r *reedSolomon) canAVX2C(byteCount int, inputs, outputs int) bool { } // Multiplies a subset of rows from a coding matrix by a full set of -// input shards to produce some output shards. +// input totalShards to produce some output totalShards. // 'matrixRows' is The rows from the matrix to use. // 'inputs' An array of byte arrays, each of which is one input shard. // The number of inputs used is determined by the length of each matrix row. -// outputs Byte arrays where the computed shards are stored. +// outputs Byte arrays where the computed totalShards are stored. // The number of outputs computed, and the // number of matrix rows used, is determined by // outputCount, which is the number of outputs to compute. @@ -968,7 +1132,7 @@ func shardSize(shards [][]byte) int { // Given a list of shards, some of which contain data, fills in the // ones that don't have data. // -// The length of the array must be equal to Shards. +// The length of the array must be equal to shards. // You indicate that a shard is missing by setting it to nil or zero-length. // If a shard is zero-length but has sufficient capacity, that memory will // be used, otherwise a new []byte will be allocated. @@ -979,7 +1143,7 @@ func shardSize(shards [][]byte) int { // The reconstructed shard set is complete, but integrity is not verified. // Use the Verify function to check if data set is ok. func (r *reedSolomon) Reconstruct(shards [][]byte) error { - return r.reconstruct(shards, false) + return r.reconstruct(shards, false, nil) } // ReconstructData will recreate any missing data shards, if possible. @@ -987,7 +1151,7 @@ func (r *reedSolomon) Reconstruct(shards [][]byte) error { // Given a list of shards, some of which contain data, fills in the // data shards that don't have data. // -// The length of the array must be equal to Shards. +// The length of the array must be equal to shards. // You indicate that a shard is missing by setting it to nil or zero-length. // If a shard is zero-length but has sufficient capacity, that memory will // be used, otherwise a new []byte will be allocated. @@ -998,19 +1162,39 @@ func (r *reedSolomon) Reconstruct(shards [][]byte) error { // As the reconstructed shard set may contain missing parity shards, // calling the Verify function is likely to fail. func (r *reedSolomon) ReconstructData(shards [][]byte) error { - return r.reconstruct(shards, true) + return r.reconstruct(shards, true, nil) } -// reconstruct will recreate the missing data shards, and unless -// dataOnly is true, also the missing parity shards +// ReconstructSome will recreate only requested data shards, if possible. // -// The length of the array must be equal to Shards. -// You indicate that a shard is missing by setting it to nil. +// Given a list of shards, some of which contain data, fills in the +// data shards indicated by true values in the "required" parameter. +// The length of "required" array must be equal to dataShards. +// +// The length of "shards" array must be equal to shards. +// You indicate that a shard is missing by setting it to nil or zero-length. +// If a shard is zero-length but has sufficient capacity, that memory will +// be used, otherwise a new []byte will be allocated. // // If there are too few shards to reconstruct the missing // ones, ErrTooFewShards will be returned. -func (r *reedSolomon) reconstruct(shards [][]byte, dataOnly bool) error { - if len(shards) != r.Shards { +// +// As the reconstructed shard set may contain missing parity shards, +// calling the Verify function is likely to fail. +func (r *reedSolomon) ReconstructSome(shards [][]byte, required []bool) error { + return r.reconstruct(shards, true, required) +} + +// reconstruct will recreate the missing data totalShards, and unless +// dataOnly is true, also the missing parity totalShards +// +// The length of "shards" array must be equal to totalShards. +// You indicate that a shard is missing by setting it to nil. +// +// If there are too few totalShards to reconstruct the missing +// ones, ErrTooFewShards will be returned. +func (r *reedSolomon) reconstruct(shards [][]byte, dataOnly bool, required []bool) error { + if len(shards) != r.totalShards || required != nil && len(required) < r.dataShards { return ErrTooFewShards } // Check arguments. @@ -1025,22 +1209,26 @@ func (r *reedSolomon) reconstruct(shards [][]byte, dataOnly bool) error { // nothing to do. numberPresent := 0 dataPresent := 0 - for i := 0; i < r.Shards; i++ { + missingRequired := 0 + for i := 0; i < r.totalShards; i++ { if len(shards[i]) != 0 { numberPresent++ - if i < r.DataShards { + if i < r.dataShards { dataPresent++ } + } else if required != nil && required[i] { + missingRequired++ } } - if numberPresent == r.Shards || dataOnly && dataPresent == r.DataShards { - // Cool. All of the shards data data. We don't + if numberPresent == r.totalShards || dataOnly && dataPresent == r.dataShards || + required != nil && missingRequired == 0 { + // Cool. All of the shards have data. We don't // need to do anything. return nil } // More complete sanity check - if numberPresent < r.DataShards { + if numberPresent < r.dataShards { return ErrTooFewShards } @@ -1051,11 +1239,11 @@ func (r *reedSolomon) reconstruct(shards [][]byte, dataOnly bool) error { // // Also, create an array of indices of the valid rows we do have // and the invalid rows we don't have up until we have enough valid rows. - subShards := make([][]byte, r.DataShards) - validIndices := make([]int, r.DataShards) + subShards := make([][]byte, r.dataShards) + validIndices := make([]int, r.dataShards) invalidIndices := make([]int, 0) subMatrixRow := 0 - for matrixRow := 0; matrixRow < r.Shards && subMatrixRow < r.DataShards; matrixRow++ { + for matrixRow := 0; matrixRow < r.totalShards && subMatrixRow < r.dataShards; matrixRow++ { if len(shards[matrixRow]) != 0 { subShards[subMatrixRow] = shards[matrixRow] validIndices[subMatrixRow] = matrixRow @@ -1077,9 +1265,9 @@ func (r *reedSolomon) reconstruct(shards [][]byte, dataOnly bool) error { // shards that we have and build a square matrix. This // matrix could be used to generate the shards that we have // from the original data. - subMatrix, _ := newMatrix(r.DataShards, r.DataShards) + subMatrix, _ := newMatrix(r.dataShards, r.dataShards) for subMatrixRow, validIndex := range validIndices { - for c := 0; c < r.DataShards; c++ { + for c := 0; c < r.dataShards; c++ { subMatrix[subMatrixRow][c] = r.m[validIndex][c] } } @@ -1095,7 +1283,7 @@ func (r *reedSolomon) reconstruct(shards [][]byte, dataOnly bool) error { // Cache the inverted matrix in the tree for future use keyed on the // indices of the invalid rows. - err = r.tree.InsertInvertedMatrix(invalidIndices, dataDecodeMatrix, r.Shards) + err = r.tree.InsertInvertedMatrix(invalidIndices, dataDecodeMatrix, r.totalShards) if err != nil { return err } @@ -1106,12 +1294,12 @@ func (r *reedSolomon) reconstruct(shards [][]byte, dataOnly bool) error { // The input to the coding is all of the shards we actually // have, and the output is the missing data shards. The computation // is done using the special decode matrix we just built. - outputs := make([][]byte, r.ParityShards) - matrixRows := make([][]byte, r.ParityShards) + outputs := make([][]byte, r.parityShards) + matrixRows := make([][]byte, r.parityShards) outputCount := 0 - for iShard := 0; iShard < r.DataShards; iShard++ { - if len(shards[iShard]) == 0 { + for iShard := 0; iShard < r.dataShards; iShard++ { + if len(shards[iShard]) == 0 && (required == nil || required[iShard]) { if cap(shards[iShard]) >= shardSize { shards[iShard] = shards[iShard][0:shardSize] } else { @@ -1136,19 +1324,19 @@ func (r *reedSolomon) reconstruct(shards [][]byte, dataOnly bool) error { // any that we just calculated. The output is whichever of the // data shards were missing. outputCount = 0 - for iShard := r.DataShards; iShard < r.Shards; iShard++ { - if len(shards[iShard]) == 0 { + for iShard := r.dataShards; iShard < r.totalShards; iShard++ { + if len(shards[iShard]) == 0 && (required == nil || required[iShard]) { if cap(shards[iShard]) >= shardSize { shards[iShard] = shards[iShard][0:shardSize] } else { shards[iShard] = make([]byte, shardSize) } outputs[outputCount] = shards[iShard] - matrixRows[outputCount] = r.parity[iShard-r.DataShards] + matrixRows[outputCount] = r.parity[iShard-r.dataShards] outputCount++ } } - r.codeSomeShards(matrixRows, shards[:r.DataShards], outputs[:outputCount], shardSize) + r.codeSomeShards(matrixRows, shards[:r.dataShards], outputs[:outputCount], shardSize) return nil } @@ -1174,7 +1362,7 @@ func (r *reedSolomon) Split(data []byte) ([][]byte, error) { } dataLen := len(data) // Calculate number of bytes per data shard. - perShard := (len(data) + r.DataShards - 1) / r.DataShards + perShard := (len(data) + r.dataShards - 1) / r.dataShards if cap(data) > len(data) { data = data[:cap(data)] @@ -1182,20 +1370,20 @@ func (r *reedSolomon) Split(data []byte) ([][]byte, error) { // Only allocate memory if necessary var padding []byte - if len(data) < (r.Shards * perShard) { + if len(data) < (r.totalShards * perShard) { // calculate maximum number of full shards in `data` slice fullShards := len(data) / perShard - padding = make([]byte, r.Shards*perShard-perShard*fullShards) + padding = make([]byte, r.totalShards*perShard-perShard*fullShards) copy(padding, data[perShard*fullShards:]) data = data[0 : perShard*fullShards] } else { - for i := dataLen; i < dataLen+r.DataShards; i++ { + for i := dataLen; i < dataLen+r.dataShards; i++ { data[i] = 0 } } // Split into equal-length shards. - dst := make([][]byte, r.Shards) + dst := make([][]byte, r.totalShards) i := 0 for ; i < len(dst) && len(data) >= perShard; i++ { dst[i] = data[:perShard:perShard] @@ -1224,10 +1412,10 @@ var ErrReconstructRequired = errors.New("reconstruction required as one or more // If one or more required data shards are nil, ErrReconstructRequired will be returned. func (r *reedSolomon) Join(dst io.Writer, shards [][]byte, outSize int) error { // Do we have enough shards? - if len(shards) < r.DataShards { + if len(shards) < r.dataShards { return ErrTooFewShards } - shards = shards[:r.DataShards] + shards = shards[:r.dataShards] // Do we have enough data? size := 0 diff --git a/vendor/github.com/klauspost/reedsolomon/streaming.go b/vendor/github.com/klauspost/reedsolomon/streaming.go index d048ba0..e3aaf00 100644 --- a/vendor/github.com/klauspost/reedsolomon/streaming.go +++ b/vendor/github.com/klauspost/reedsolomon/streaming.go @@ -147,6 +147,10 @@ type rsStream struct { // you want to use. You can reuse this encoder. // Note that the maximum number of data shards is 256. func NewStream(dataShards, parityShards int, o ...Option) (StreamEncoder, error) { + if dataShards+parityShards > 256 { + return nil, ErrMaxShardNum + } + r := rsStream{o: defaultOptions} for _, opt := range o { opt(&r.o) @@ -219,18 +223,18 @@ func (r *rsStream) createSlice() [][]byte { // will be returned. If a parity writer returns an error, a // StreamWriteError will be returned. func (r *rsStream) Encode(data []io.Reader, parity []io.Writer) error { - if len(data) != r.r.DataShards { + if len(data) != r.r.dataShards { return ErrTooFewShards } - if len(parity) != r.r.ParityShards { + if len(parity) != r.r.parityShards { return ErrTooFewShards } all := r.createSlice() defer r.blockPool.Put(all) - in := all[:r.r.DataShards] - out := all[r.r.DataShards:] + in := all[:r.r.dataShards] + out := all[r.r.dataShards:] read := 0 for { @@ -425,7 +429,7 @@ func cWriteShards(out []io.Writer, in [][]byte) error { // If a shard stream returns an error, a StreamReadError type error // will be returned. func (r *rsStream) Verify(shards []io.Reader) (bool, error) { - if len(shards) != r.r.Shards { + if len(shards) != r.r.totalShards { return false, ErrTooFewShards } @@ -472,10 +476,10 @@ var ErrReconstructMismatch = errors.New("valid shards and fill shards are mutual // However its integrity is not automatically verified. // Use the Verify function to check in case the data set is complete. func (r *rsStream) Reconstruct(valid []io.Reader, fill []io.Writer) error { - if len(valid) != r.r.Shards { + if len(valid) != r.r.totalShards { return ErrTooFewShards } - if len(fill) != r.r.Shards { + if len(fill) != r.r.totalShards { return ErrTooFewShards } @@ -486,7 +490,7 @@ func (r *rsStream) Reconstruct(valid []io.Reader, fill []io.Writer) error { if valid[i] != nil && fill[i] != nil { return ErrReconstructMismatch } - if i >= r.r.DataShards && fill[i] != nil { + if i >= r.r.dataShards && fill[i] != nil { reconDataOnly = false } } @@ -530,12 +534,12 @@ func (r *rsStream) Reconstruct(valid []io.Reader, fill []io.Writer) error { // If the total data size is less than outSize, ErrShortData will be returned. func (r *rsStream) Join(dst io.Writer, shards []io.Reader, outSize int64) error { // Do we have enough shards? - if len(shards) < r.r.DataShards { + if len(shards) < r.r.dataShards { return ErrTooFewShards } // Trim off parity shards if any - shards = shards[:r.r.DataShards] + shards = shards[:r.r.dataShards] for i := range shards { if shards[i] == nil { return StreamReadError{Err: ErrShardNoData, Stream: i} @@ -571,7 +575,7 @@ func (r *rsStream) Split(data io.Reader, dst []io.Writer, size int64) error { if size == 0 { return ErrShortData } - if len(dst) != r.r.DataShards { + if len(dst) != r.r.dataShards { return ErrInvShardNum } @@ -582,10 +586,10 @@ func (r *rsStream) Split(data io.Reader, dst []io.Writer, size int64) error { } // Calculate number of bytes per shard. - perShard := (size + int64(r.r.DataShards) - 1) / int64(r.r.DataShards) + perShard := (size + int64(r.r.dataShards) - 1) / int64(r.r.dataShards) // Pad data to r.Shards*perShard. - padding := make([]byte, (int64(r.r.Shards)*perShard)-size) + padding := make([]byte, (int64(r.r.totalShards)*perShard)-size) data = io.MultiReader(data, bytes.NewBuffer(padding)) // Split into equal-length shards and copy. diff --git a/vendor/golang.org/x/crypto/AUTHORS b/vendor/golang.org/x/crypto/AUTHORS deleted file mode 100644 index 2b00ddb..0000000 --- a/vendor/golang.org/x/crypto/AUTHORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code refers to The Go Authors for copyright purposes. -# The master list of authors is in the main Go distribution, -# visible at https://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/crypto/CONTRIBUTORS b/vendor/golang.org/x/crypto/CONTRIBUTORS deleted file mode 100644 index 1fbd3e9..0000000 --- a/vendor/golang.org/x/crypto/CONTRIBUTORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code was written by the Go contributors. -# The master list of contributors is in the main Go distribution, -# visible at https://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/crypto/argon2/argon2.go b/vendor/golang.org/x/crypto/argon2/argon2.go index b423fea..29f0a2d 100644 --- a/vendor/golang.org/x/crypto/argon2/argon2.go +++ b/vendor/golang.org/x/crypto/argon2/argon2.go @@ -11,8 +11,7 @@ // If you aren't sure which function you need, use Argon2id (IDKey) and // the parameter recommendations for your scenario. // -// -// Argon2i +// # Argon2i // // Argon2i (implemented by Key) is the side-channel resistant version of Argon2. // It uses data-independent memory access, which is preferred for password @@ -21,8 +20,7 @@ // parameters (taken from [2]) for non-interactive operations are time=3 and to // use the maximum available memory. // -// -// Argon2id +// # Argon2id // // Argon2id (implemented by IDKey) is a hybrid version of Argon2 combining // Argon2i and Argon2d. It uses data-independent memory access for the first @@ -59,7 +57,7 @@ const ( // For example, you can get a derived key for e.g. AES-256 (which needs a // 32-byte key) by doing: // -// key := argon2.Key([]byte("some password"), salt, 3, 32*1024, 4, 32) +// key := argon2.Key([]byte("some password"), salt, 3, 32*1024, 4, 32) // // The draft RFC recommends[2] time=3, and memory=32*1024 is a sensible number. // If using that amount of memory (32 MB) is not possible in some contexts then @@ -83,7 +81,7 @@ func Key(password, salt []byte, time, memory uint32, threads uint8, keyLen uint3 // For example, you can get a derived key for e.g. AES-256 (which needs a // 32-byte key) by doing: // -// key := argon2.IDKey([]byte("some password"), salt, 1, 64*1024, 4, 32) +// key := argon2.IDKey([]byte("some password"), salt, 1, 64*1024, 4, 32) // // The draft RFC recommends[2] time=1, and memory=64*1024 is a sensible number. // If using that amount of memory (64 MB) is not possible in some contexts then diff --git a/vendor/golang.org/x/crypto/internal/subtle/aliasing.go b/vendor/golang.org/x/crypto/internal/subtle/aliasing.go deleted file mode 100644 index 4fad24f..0000000 --- a/vendor/golang.org/x/crypto/internal/subtle/aliasing.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !purego -// +build !purego - -// Package subtle implements functions that are often useful in cryptographic -// code but require careful thought to use correctly. -package subtle // import "golang.org/x/crypto/internal/subtle" - -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/subtle/aliasing_purego.go b/vendor/golang.org/x/crypto/internal/subtle/aliasing_purego.go deleted file mode 100644 index 80ccbed..0000000 --- a/vendor/golang.org/x/crypto/internal/subtle/aliasing_purego.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build purego -// +build purego - -// Package subtle implements functions that are often useful in cryptographic -// code but require careful thought to use correctly. -package subtle // import "golang.org/x/crypto/internal/subtle" - -// 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/pbkdf2/pbkdf2.go b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go index 593f653..904b57e 100644 --- a/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go +++ b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go @@ -32,7 +32,7 @@ import ( // can get a derived key for e.g. AES-256 (which needs a 32-byte key) by // doing: // -// dk := pbkdf2.Key([]byte("some password"), salt, 4096, 32, sha1.New) +// dk := pbkdf2.Key([]byte("some password"), salt, 4096, 32, sha1.New) // // Remember to get a good random salt. At least 8 bytes is recommended by the // RFC. diff --git a/vendor/golang.org/x/crypto/salsa20/salsa20.go b/vendor/golang.org/x/crypto/salsa20/salsa20.go index 6f9bb10..8f4f896 100644 --- a/vendor/golang.org/x/crypto/salsa20/salsa20.go +++ b/vendor/golang.org/x/crypto/salsa20/salsa20.go @@ -24,7 +24,7 @@ package salsa20 // import "golang.org/x/crypto/salsa20" // TODO(agl): implement XORKeyStream12 and XORKeyStream8 - the reduced round variants of Salsa20. import ( - "golang.org/x/crypto/internal/subtle" + "golang.org/x/crypto/internal/alias" "golang.org/x/crypto/salsa20/salsa" ) @@ -35,7 +35,7 @@ func XORKeyStream(out, in []byte, nonce []byte, key *[32]byte) { if len(out) < len(in) { panic("salsa20: output smaller than input") } - if subtle.InexactOverlap(out[:len(in)], in) { + if alias.InexactOverlap(out[:len(in)], in) { panic("salsa20: invalid buffer overlap") } diff --git a/vendor/golang.org/x/crypto/scrypt/scrypt.go b/vendor/golang.org/x/crypto/scrypt/scrypt.go index bbe4494..c971a99 100644 --- a/vendor/golang.org/x/crypto/scrypt/scrypt.go +++ b/vendor/golang.org/x/crypto/scrypt/scrypt.go @@ -186,7 +186,7 @@ func smix(b []byte, r, N int, v, xy []uint32) { // For example, you can get a derived key for e.g. AES-256 (which needs a // 32-byte key) by doing: // -// dk, err := scrypt.Key([]byte("some password"), salt, 32768, 8, 1, 32) +// dk, err := scrypt.Key([]byte("some password"), salt, 32768, 8, 1, 32) // // The recommended parameters for interactive logins as of 2017 are N=32768, r=8 // and p=1. The parameters N, r, and p should be increased as memory latency and diff --git a/vendor/golang.org/x/crypto/sha3/doc.go b/vendor/golang.org/x/crypto/sha3/doc.go index c2fef30..decd8cf 100644 --- a/vendor/golang.org/x/crypto/sha3/doc.go +++ b/vendor/golang.org/x/crypto/sha3/doc.go @@ -8,8 +8,7 @@ // Both types of hash function use the "sponge" construction and the Keccak // permutation. For a detailed specification see http://keccak.noekeon.org/ // -// -// Guidance +// # Guidance // // If you aren't sure what function you need, use SHAKE256 with at least 64 // bytes of output. The SHAKE instances are faster than the SHA3 instances; @@ -19,8 +18,7 @@ // secret key to the input, hash with SHAKE256 and read at least 32 bytes of // output. // -// -// Security strengths +// # Security strengths // // The SHA3-x (x equals 224, 256, 384, or 512) functions have a security // strength against preimage attacks of x bits. Since they only produce "x" @@ -31,8 +29,7 @@ // is used. Requesting more than 64 or 32 bytes of output, respectively, does // not increase the collision-resistance of the SHAKE functions. // -// -// The sponge construction +// # The sponge construction // // A sponge builds a pseudo-random function from a public pseudo-random // permutation, by applying the permutation to a state of "rate + capacity" @@ -50,8 +47,7 @@ // Since the KeccakF-1600 permutation is 1600 bits (200 bytes) wide, this means // that the security strength of a sponge instance is equal to (1600 - bitrate) / 2. // -// -// Recommendations +// # Recommendations // // The SHAKE functions are recommended for most new uses. They can produce // output of arbitrary length. SHAKE256, with an output length of at least diff --git a/vendor/golang.org/x/crypto/sha3/sha3_s390x.go b/vendor/golang.org/x/crypto/sha3/sha3_s390x.go index 4fcfc92..63a3edb 100644 --- a/vendor/golang.org/x/crypto/sha3/sha3_s390x.go +++ b/vendor/golang.org/x/crypto/sha3/sha3_s390x.go @@ -34,11 +34,13 @@ const ( // kimd is a wrapper for the 'compute intermediate message digest' instruction. // src must be a multiple of the rate for the given function code. +// //go:noescape func kimd(function code, chain *[200]byte, src []byte) // klmd is a wrapper for the 'compute last message digest' instruction. // src padding is handled by the instruction. +// //go:noescape func klmd(function code, chain *[200]byte, dst, src []byte) diff --git a/vendor/golang.org/x/sys/AUTHORS b/vendor/golang.org/x/sys/AUTHORS deleted file mode 100644 index 15167cd..0000000 --- a/vendor/golang.org/x/sys/AUTHORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code refers to The Go Authors for copyright purposes. -# The master list of authors is in the main Go distribution, -# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/sys/CONTRIBUTORS b/vendor/golang.org/x/sys/CONTRIBUTORS deleted file mode 100644 index 1c4577e..0000000 --- a/vendor/golang.org/x/sys/CONTRIBUTORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code was written by the Go contributors. -# The master list of contributors is in the main Go distribution, -# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/sys/cpu/byteorder.go b/vendor/golang.org/x/sys/cpu/byteorder.go index dcbb14e..271055b 100644 --- a/vendor/golang.org/x/sys/cpu/byteorder.go +++ b/vendor/golang.org/x/sys/cpu/byteorder.go @@ -46,6 +46,7 @@ func hostByteOrder() byteOrder { case "386", "amd64", "amd64p32", "alpha", "arm", "arm64", + "loong64", "mipsle", "mips64le", "mips64p32le", "nios2", "ppc64le", diff --git a/vendor/golang.org/x/sys/cpu/cpu.go b/vendor/golang.org/x/sys/cpu/cpu.go index b56886f..83f112c 100644 --- a/vendor/golang.org/x/sys/cpu/cpu.go +++ b/vendor/golang.org/x/sys/cpu/cpu.go @@ -106,8 +106,8 @@ var ARM64 struct { // ARM contains the supported CPU features of the current ARM (32-bit) platform. // All feature flags are false if: -// 1. the current platform is not arm, or -// 2. the current operating system is not Linux. +// 1. the current platform is not arm, or +// 2. the current operating system is not Linux. var ARM struct { _ CacheLinePad HasSWP bool // SWP instruction support diff --git a/vendor/golang.org/x/sys/cpu/cpu_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_arm64.go index 87dd5e3..f3eb993 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_arm64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_arm64.go @@ -6,7 +6,10 @@ package cpu import "runtime" -const cacheLineSize = 64 +// cacheLineSize is used to prevent false sharing of cache lines. +// We choose 128 because Apple Silicon, a.k.a. M1, has 128-byte cache line size. +// It doesn't cost much and is much more future-proof. +const cacheLineSize = 128 func initOptions() { options = []option{ @@ -41,13 +44,10 @@ func archInit() { switch runtime.GOOS { case "freebsd": readARM64Registers() - case "linux", "netbsd": + case "linux", "netbsd", "openbsd": doinit() default: - // Most platforms don't seem to allow reading these registers. - // - // OpenBSD: - // See https://golang.org/issue/31746 + // Many platforms don't seem to allow reading these registers. setMinimalFeatures() } } diff --git a/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c b/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c index e363c7d..a4605e6 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c +++ b/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c @@ -7,6 +7,7 @@ #include #include +#include // Need to wrap __get_cpuid_count because it's declared as static. int @@ -17,27 +18,21 @@ gccgoGetCpuidCount(uint32_t leaf, uint32_t subleaf, return __get_cpuid_count(leaf, subleaf, eax, ebx, ecx, edx); } +#pragma GCC diagnostic ignored "-Wunknown-pragmas" +#pragma GCC push_options +#pragma GCC target("xsave") +#pragma clang attribute push (__attribute__((target("xsave"))), apply_to=function) + // xgetbv reads the contents of an XCR (Extended Control Register) // specified in the ECX register into registers EDX:EAX. // Currently, the only supported value for XCR is 0. -// -// TODO: Replace with a better alternative: -// -// #include -// -// #pragma GCC target("xsave") -// -// void gccgoXgetbv(uint32_t *eax, uint32_t *edx) { -// unsigned long long x = _xgetbv(0); -// *eax = x & 0xffffffff; -// *edx = (x >> 32) & 0xffffffff; -// } -// -// Note that _xgetbv is defined starting with GCC 8. void gccgoXgetbv(uint32_t *eax, uint32_t *edx) { - __asm(" xorl %%ecx, %%ecx\n" - " xgetbv" - : "=a"(*eax), "=d"(*edx)); + uint64_t v = _xgetbv(0); + *eax = v & 0xffffffff; + *edx = v >> 32; } + +#pragma clang attribute pop +#pragma GCC pop_options diff --git a/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go index f8c484f..f3cde12 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !linux && !netbsd && arm64 -// +build !linux,!netbsd,arm64 +//go:build !linux && !netbsd && !openbsd && arm64 +// +build !linux,!netbsd,!openbsd,arm64 package cpu diff --git a/vendor/golang.org/x/sys/unix/endian_little.go b/vendor/golang.org/x/sys/unix/endian_little.go index 4362f47..b0f2bc4 100644 --- a/vendor/golang.org/x/sys/unix/endian_little.go +++ b/vendor/golang.org/x/sys/unix/endian_little.go @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // -//go:build 386 || amd64 || amd64p32 || alpha || arm || arm64 || mipsle || mips64le || mips64p32le || nios2 || ppc64le || riscv || riscv64 || sh -// +build 386 amd64 amd64p32 alpha arm arm64 mipsle mips64le mips64p32le nios2 ppc64le riscv riscv64 sh +//go:build 386 || amd64 || amd64p32 || alpha || arm || arm64 || loong64 || mipsle || mips64le || mips64p32le || nios2 || ppc64le || riscv || riscv64 || sh +// +build 386 amd64 amd64p32 alpha arm arm64 loong64 mipsle mips64le mips64p32le nios2 ppc64le riscv riscv64 sh package unix diff --git a/vendor/golang.org/x/sys/unix/errors_freebsd_386.go b/vendor/golang.org/x/sys/unix/errors_freebsd_386.go deleted file mode 100644 index 761db66..0000000 --- a/vendor/golang.org/x/sys/unix/errors_freebsd_386.go +++ /dev/null @@ -1,233 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep -// them here for backwards compatibility. - -package unix - -const ( - DLT_HHDLC = 0x79 - IFF_SMART = 0x20 - IFT_1822 = 0x2 - IFT_A12MPPSWITCH = 0x82 - IFT_AAL2 = 0xbb - IFT_AAL5 = 0x31 - IFT_ADSL = 0x5e - IFT_AFLANE8023 = 0x3b - IFT_AFLANE8025 = 0x3c - IFT_ARAP = 0x58 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ASYNC = 0x54 - IFT_ATM = 0x25 - IFT_ATMDXI = 0x69 - IFT_ATMFUNI = 0x6a - IFT_ATMIMA = 0x6b - IFT_ATMLOGICAL = 0x50 - IFT_ATMRADIO = 0xbd - IFT_ATMSUBINTERFACE = 0x86 - IFT_ATMVCIENDPT = 0xc2 - IFT_ATMVIRTUAL = 0x95 - IFT_BGPPOLICYACCOUNTING = 0xa2 - IFT_BSC = 0x53 - IFT_CCTEMUL = 0x3d - IFT_CEPT = 0x13 - IFT_CES = 0x85 - IFT_CHANNEL = 0x46 - IFT_CNR = 0x55 - IFT_COFFEE = 0x84 - IFT_COMPOSITELINK = 0x9b - IFT_DCN = 0x8d - IFT_DIGITALPOWERLINE = 0x8a - IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba - IFT_DLSW = 0x4a - IFT_DOCSCABLEDOWNSTREAM = 0x80 - IFT_DOCSCABLEMACLAYER = 0x7f - IFT_DOCSCABLEUPSTREAM = 0x81 - IFT_DS0 = 0x51 - IFT_DS0BUNDLE = 0x52 - IFT_DS1FDL = 0xaa - IFT_DS3 = 0x1e - IFT_DTM = 0x8c - IFT_DVBASILN = 0xac - IFT_DVBASIOUT = 0xad - IFT_DVBRCCDOWNSTREAM = 0x93 - IFT_DVBRCCMACLAYER = 0x92 - IFT_DVBRCCUPSTREAM = 0x94 - IFT_ENC = 0xf4 - IFT_EON = 0x19 - IFT_EPLRS = 0x57 - IFT_ESCON = 0x49 - IFT_ETHER = 0x6 - IFT_FAITH = 0xf2 - IFT_FAST = 0x7d - IFT_FASTETHER = 0x3e - IFT_FASTETHERFX = 0x45 - IFT_FDDI = 0xf - IFT_FIBRECHANNEL = 0x38 - IFT_FRAMERELAYINTERCONNECT = 0x3a - IFT_FRAMERELAYMPI = 0x5c - IFT_FRDLCIENDPT = 0xc1 - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_FRF16MFRBUNDLE = 0xa3 - IFT_FRFORWARD = 0x9e - IFT_G703AT2MB = 0x43 - IFT_G703AT64K = 0x42 - IFT_GIF = 0xf0 - IFT_GIGABITETHERNET = 0x75 - IFT_GR303IDT = 0xb2 - IFT_GR303RDT = 0xb1 - IFT_H323GATEKEEPER = 0xa4 - IFT_H323PROXY = 0xa5 - IFT_HDH1822 = 0x3 - IFT_HDLC = 0x76 - IFT_HDSL2 = 0xa8 - IFT_HIPERLAN2 = 0xb7 - IFT_HIPPI = 0x2f - IFT_HIPPIINTERFACE = 0x39 - IFT_HOSTPAD = 0x5a - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IBM370PARCHAN = 0x48 - IFT_IDSL = 0x9a - IFT_IEEE80211 = 0x47 - IFT_IEEE80212 = 0x37 - IFT_IEEE8023ADLAG = 0xa1 - IFT_IFGSN = 0x91 - IFT_IMT = 0xbe - IFT_INTERLEAVE = 0x7c - IFT_IP = 0x7e - IFT_IPFORWARD = 0x8e - IFT_IPOVERATM = 0x72 - IFT_IPOVERCDLC = 0x6d - IFT_IPOVERCLAW = 0x6e - IFT_IPSWITCH = 0x4e - IFT_IPXIP = 0xf9 - IFT_ISDN = 0x3f - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISDNS = 0x4b - IFT_ISDNU = 0x4c - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88025CRFPINT = 0x62 - IFT_ISO88025DTR = 0x56 - IFT_ISO88025FIBER = 0x73 - IFT_ISO88026 = 0xa - IFT_ISUP = 0xb3 - IFT_L3IPXVLAN = 0x89 - IFT_LAPB = 0x10 - IFT_LAPD = 0x4d - IFT_LAPF = 0x77 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MEDIAMAILOVERIP = 0x8b - IFT_MFSIGLINK = 0xa7 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_MPC = 0x71 - IFT_MPLS = 0xa6 - IFT_MPLSTUNNEL = 0x96 - IFT_MSDSL = 0x8f - IFT_MVL = 0xbf - IFT_MYRINET = 0x63 - IFT_NFAS = 0xaf - IFT_NSIP = 0x1b - IFT_OPTICALCHANNEL = 0xc3 - IFT_OPTICALTRANSPORT = 0xc4 - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PFLOG = 0xf6 - IFT_PFSYNC = 0xf7 - IFT_PLC = 0xae - IFT_POS = 0xab - IFT_PPPMULTILINKBUNDLE = 0x6c - IFT_PROPBWAP2MP = 0xb8 - IFT_PROPCNLS = 0x59 - IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 - IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 - IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 - IFT_PROPMUX = 0x36 - IFT_PROPWIRELESSP2P = 0x9d - IFT_PTPSERIAL = 0x16 - IFT_PVC = 0xf1 - IFT_QLLC = 0x44 - IFT_RADIOMAC = 0xbc - IFT_RADSL = 0x5f - IFT_REACHDSL = 0xc0 - IFT_RFC1483 = 0x9f - IFT_RS232 = 0x21 - IFT_RSRB = 0x4f - IFT_SDLC = 0x11 - IFT_SDSL = 0x60 - IFT_SHDSL = 0xa9 - IFT_SIP = 0x1f - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SONET = 0x27 - IFT_SONETOVERHEADCHANNEL = 0xb9 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_SRP = 0x97 - IFT_SS7SIGLINK = 0x9c - IFT_STACKTOSTACK = 0x6f - IFT_STARLAN = 0xb - IFT_STF = 0xd7 - IFT_T1 = 0x12 - IFT_TDLC = 0x74 - IFT_TERMPAD = 0x5b - IFT_TR008 = 0xb0 - IFT_TRANSPHDLC = 0x7b - IFT_TUNNEL = 0x83 - IFT_ULTRA = 0x1d - IFT_USB = 0xa0 - IFT_V11 = 0x40 - IFT_V35 = 0x2d - IFT_V36 = 0x41 - IFT_V37 = 0x78 - IFT_VDSL = 0x61 - IFT_VIRTUALIPADDRESS = 0x70 - IFT_VOICEEM = 0x64 - IFT_VOICEENCAP = 0x67 - IFT_VOICEFXO = 0x65 - IFT_VOICEFXS = 0x66 - IFT_VOICEOVERATM = 0x98 - IFT_VOICEOVERFRAMERELAY = 0x99 - IFT_VOICEOVERIP = 0x68 - IFT_X213 = 0x5d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25HUNTGROUP = 0x7a - IFT_X25MLP = 0x79 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IPPROTO_MAXID = 0x34 - IPV6_FAITH = 0x1d - IPV6_MIN_MEMBERSHIPS = 0x1f - IP_FAITH = 0x16 - IP_MAX_SOURCE_FILTER = 0x400 - IP_MIN_MEMBERSHIPS = 0x1f - MAP_NORESERVE = 0x40 - MAP_RENAME = 0x20 - NET_RT_MAXID = 0x6 - RTF_PRCLONING = 0x10000 - RTM_OLDADD = 0x9 - RTM_OLDDEL = 0xa - RT_CACHING_CONTEXT = 0x1 - RT_NORTREF = 0x2 - SIOCADDRT = 0x8030720a - SIOCALIFADDR = 0x8118691b - SIOCDELRT = 0x8030720b - SIOCDLIFADDR = 0x8118691d - SIOCGLIFADDR = 0xc118691c - SIOCGLIFPHYADDR = 0xc118694b - SIOCSLIFPHYADDR = 0x8118694a -) diff --git a/vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go deleted file mode 100644 index 070f44b..0000000 --- a/vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go +++ /dev/null @@ -1,233 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep -// them here for backwards compatibility. - -package unix - -const ( - DLT_HHDLC = 0x79 - IFF_SMART = 0x20 - IFT_1822 = 0x2 - IFT_A12MPPSWITCH = 0x82 - IFT_AAL2 = 0xbb - IFT_AAL5 = 0x31 - IFT_ADSL = 0x5e - IFT_AFLANE8023 = 0x3b - IFT_AFLANE8025 = 0x3c - IFT_ARAP = 0x58 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ASYNC = 0x54 - IFT_ATM = 0x25 - IFT_ATMDXI = 0x69 - IFT_ATMFUNI = 0x6a - IFT_ATMIMA = 0x6b - IFT_ATMLOGICAL = 0x50 - IFT_ATMRADIO = 0xbd - IFT_ATMSUBINTERFACE = 0x86 - IFT_ATMVCIENDPT = 0xc2 - IFT_ATMVIRTUAL = 0x95 - IFT_BGPPOLICYACCOUNTING = 0xa2 - IFT_BSC = 0x53 - IFT_CCTEMUL = 0x3d - IFT_CEPT = 0x13 - IFT_CES = 0x85 - IFT_CHANNEL = 0x46 - IFT_CNR = 0x55 - IFT_COFFEE = 0x84 - IFT_COMPOSITELINK = 0x9b - IFT_DCN = 0x8d - IFT_DIGITALPOWERLINE = 0x8a - IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba - IFT_DLSW = 0x4a - IFT_DOCSCABLEDOWNSTREAM = 0x80 - IFT_DOCSCABLEMACLAYER = 0x7f - IFT_DOCSCABLEUPSTREAM = 0x81 - IFT_DS0 = 0x51 - IFT_DS0BUNDLE = 0x52 - IFT_DS1FDL = 0xaa - IFT_DS3 = 0x1e - IFT_DTM = 0x8c - IFT_DVBASILN = 0xac - IFT_DVBASIOUT = 0xad - IFT_DVBRCCDOWNSTREAM = 0x93 - IFT_DVBRCCMACLAYER = 0x92 - IFT_DVBRCCUPSTREAM = 0x94 - IFT_ENC = 0xf4 - IFT_EON = 0x19 - IFT_EPLRS = 0x57 - IFT_ESCON = 0x49 - IFT_ETHER = 0x6 - IFT_FAITH = 0xf2 - IFT_FAST = 0x7d - IFT_FASTETHER = 0x3e - IFT_FASTETHERFX = 0x45 - IFT_FDDI = 0xf - IFT_FIBRECHANNEL = 0x38 - IFT_FRAMERELAYINTERCONNECT = 0x3a - IFT_FRAMERELAYMPI = 0x5c - IFT_FRDLCIENDPT = 0xc1 - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_FRF16MFRBUNDLE = 0xa3 - IFT_FRFORWARD = 0x9e - IFT_G703AT2MB = 0x43 - IFT_G703AT64K = 0x42 - IFT_GIF = 0xf0 - IFT_GIGABITETHERNET = 0x75 - IFT_GR303IDT = 0xb2 - IFT_GR303RDT = 0xb1 - IFT_H323GATEKEEPER = 0xa4 - IFT_H323PROXY = 0xa5 - IFT_HDH1822 = 0x3 - IFT_HDLC = 0x76 - IFT_HDSL2 = 0xa8 - IFT_HIPERLAN2 = 0xb7 - IFT_HIPPI = 0x2f - IFT_HIPPIINTERFACE = 0x39 - IFT_HOSTPAD = 0x5a - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IBM370PARCHAN = 0x48 - IFT_IDSL = 0x9a - IFT_IEEE80211 = 0x47 - IFT_IEEE80212 = 0x37 - IFT_IEEE8023ADLAG = 0xa1 - IFT_IFGSN = 0x91 - IFT_IMT = 0xbe - IFT_INTERLEAVE = 0x7c - IFT_IP = 0x7e - IFT_IPFORWARD = 0x8e - IFT_IPOVERATM = 0x72 - IFT_IPOVERCDLC = 0x6d - IFT_IPOVERCLAW = 0x6e - IFT_IPSWITCH = 0x4e - IFT_IPXIP = 0xf9 - IFT_ISDN = 0x3f - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISDNS = 0x4b - IFT_ISDNU = 0x4c - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88025CRFPINT = 0x62 - IFT_ISO88025DTR = 0x56 - IFT_ISO88025FIBER = 0x73 - IFT_ISO88026 = 0xa - IFT_ISUP = 0xb3 - IFT_L3IPXVLAN = 0x89 - IFT_LAPB = 0x10 - IFT_LAPD = 0x4d - IFT_LAPF = 0x77 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MEDIAMAILOVERIP = 0x8b - IFT_MFSIGLINK = 0xa7 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_MPC = 0x71 - IFT_MPLS = 0xa6 - IFT_MPLSTUNNEL = 0x96 - IFT_MSDSL = 0x8f - IFT_MVL = 0xbf - IFT_MYRINET = 0x63 - IFT_NFAS = 0xaf - IFT_NSIP = 0x1b - IFT_OPTICALCHANNEL = 0xc3 - IFT_OPTICALTRANSPORT = 0xc4 - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PFLOG = 0xf6 - IFT_PFSYNC = 0xf7 - IFT_PLC = 0xae - IFT_POS = 0xab - IFT_PPPMULTILINKBUNDLE = 0x6c - IFT_PROPBWAP2MP = 0xb8 - IFT_PROPCNLS = 0x59 - IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 - IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 - IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 - IFT_PROPMUX = 0x36 - IFT_PROPWIRELESSP2P = 0x9d - IFT_PTPSERIAL = 0x16 - IFT_PVC = 0xf1 - IFT_QLLC = 0x44 - IFT_RADIOMAC = 0xbc - IFT_RADSL = 0x5f - IFT_REACHDSL = 0xc0 - IFT_RFC1483 = 0x9f - IFT_RS232 = 0x21 - IFT_RSRB = 0x4f - IFT_SDLC = 0x11 - IFT_SDSL = 0x60 - IFT_SHDSL = 0xa9 - IFT_SIP = 0x1f - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SONET = 0x27 - IFT_SONETOVERHEADCHANNEL = 0xb9 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_SRP = 0x97 - IFT_SS7SIGLINK = 0x9c - IFT_STACKTOSTACK = 0x6f - IFT_STARLAN = 0xb - IFT_STF = 0xd7 - IFT_T1 = 0x12 - IFT_TDLC = 0x74 - IFT_TERMPAD = 0x5b - IFT_TR008 = 0xb0 - IFT_TRANSPHDLC = 0x7b - IFT_TUNNEL = 0x83 - IFT_ULTRA = 0x1d - IFT_USB = 0xa0 - IFT_V11 = 0x40 - IFT_V35 = 0x2d - IFT_V36 = 0x41 - IFT_V37 = 0x78 - IFT_VDSL = 0x61 - IFT_VIRTUALIPADDRESS = 0x70 - IFT_VOICEEM = 0x64 - IFT_VOICEENCAP = 0x67 - IFT_VOICEFXO = 0x65 - IFT_VOICEFXS = 0x66 - IFT_VOICEOVERATM = 0x98 - IFT_VOICEOVERFRAMERELAY = 0x99 - IFT_VOICEOVERIP = 0x68 - IFT_X213 = 0x5d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25HUNTGROUP = 0x7a - IFT_X25MLP = 0x79 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IPPROTO_MAXID = 0x34 - IPV6_FAITH = 0x1d - IPV6_MIN_MEMBERSHIPS = 0x1f - IP_FAITH = 0x16 - IP_MAX_SOURCE_FILTER = 0x400 - IP_MIN_MEMBERSHIPS = 0x1f - MAP_NORESERVE = 0x40 - MAP_RENAME = 0x20 - NET_RT_MAXID = 0x6 - RTF_PRCLONING = 0x10000 - RTM_OLDADD = 0x9 - RTM_OLDDEL = 0xa - RT_CACHING_CONTEXT = 0x1 - RT_NORTREF = 0x2 - SIOCADDRT = 0x8040720a - SIOCALIFADDR = 0x8118691b - SIOCDELRT = 0x8040720b - SIOCDLIFADDR = 0x8118691d - SIOCGLIFADDR = 0xc118691c - SIOCGLIFPHYADDR = 0xc118694b - SIOCSLIFPHYADDR = 0x8118694a -) diff --git a/vendor/golang.org/x/sys/unix/errors_freebsd_arm.go b/vendor/golang.org/x/sys/unix/errors_freebsd_arm.go deleted file mode 100644 index 856dca3..0000000 --- a/vendor/golang.org/x/sys/unix/errors_freebsd_arm.go +++ /dev/null @@ -1,226 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package unix - -const ( - IFT_1822 = 0x2 - IFT_A12MPPSWITCH = 0x82 - IFT_AAL2 = 0xbb - IFT_AAL5 = 0x31 - IFT_ADSL = 0x5e - IFT_AFLANE8023 = 0x3b - IFT_AFLANE8025 = 0x3c - IFT_ARAP = 0x58 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ASYNC = 0x54 - IFT_ATM = 0x25 - IFT_ATMDXI = 0x69 - IFT_ATMFUNI = 0x6a - IFT_ATMIMA = 0x6b - IFT_ATMLOGICAL = 0x50 - IFT_ATMRADIO = 0xbd - IFT_ATMSUBINTERFACE = 0x86 - IFT_ATMVCIENDPT = 0xc2 - IFT_ATMVIRTUAL = 0x95 - IFT_BGPPOLICYACCOUNTING = 0xa2 - IFT_BSC = 0x53 - IFT_CCTEMUL = 0x3d - IFT_CEPT = 0x13 - IFT_CES = 0x85 - IFT_CHANNEL = 0x46 - IFT_CNR = 0x55 - IFT_COFFEE = 0x84 - IFT_COMPOSITELINK = 0x9b - IFT_DCN = 0x8d - IFT_DIGITALPOWERLINE = 0x8a - IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba - IFT_DLSW = 0x4a - IFT_DOCSCABLEDOWNSTREAM = 0x80 - IFT_DOCSCABLEMACLAYER = 0x7f - IFT_DOCSCABLEUPSTREAM = 0x81 - IFT_DS0 = 0x51 - IFT_DS0BUNDLE = 0x52 - IFT_DS1FDL = 0xaa - IFT_DS3 = 0x1e - IFT_DTM = 0x8c - IFT_DVBASILN = 0xac - IFT_DVBASIOUT = 0xad - IFT_DVBRCCDOWNSTREAM = 0x93 - IFT_DVBRCCMACLAYER = 0x92 - IFT_DVBRCCUPSTREAM = 0x94 - IFT_ENC = 0xf4 - IFT_EON = 0x19 - IFT_EPLRS = 0x57 - IFT_ESCON = 0x49 - IFT_ETHER = 0x6 - IFT_FAST = 0x7d - IFT_FASTETHER = 0x3e - IFT_FASTETHERFX = 0x45 - IFT_FDDI = 0xf - IFT_FIBRECHANNEL = 0x38 - IFT_FRAMERELAYINTERCONNECT = 0x3a - IFT_FRAMERELAYMPI = 0x5c - IFT_FRDLCIENDPT = 0xc1 - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_FRF16MFRBUNDLE = 0xa3 - IFT_FRFORWARD = 0x9e - IFT_G703AT2MB = 0x43 - IFT_G703AT64K = 0x42 - IFT_GIF = 0xf0 - IFT_GIGABITETHERNET = 0x75 - IFT_GR303IDT = 0xb2 - IFT_GR303RDT = 0xb1 - IFT_H323GATEKEEPER = 0xa4 - IFT_H323PROXY = 0xa5 - IFT_HDH1822 = 0x3 - IFT_HDLC = 0x76 - IFT_HDSL2 = 0xa8 - IFT_HIPERLAN2 = 0xb7 - IFT_HIPPI = 0x2f - IFT_HIPPIINTERFACE = 0x39 - IFT_HOSTPAD = 0x5a - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IBM370PARCHAN = 0x48 - IFT_IDSL = 0x9a - IFT_IEEE80211 = 0x47 - IFT_IEEE80212 = 0x37 - IFT_IEEE8023ADLAG = 0xa1 - IFT_IFGSN = 0x91 - IFT_IMT = 0xbe - IFT_INTERLEAVE = 0x7c - IFT_IP = 0x7e - IFT_IPFORWARD = 0x8e - IFT_IPOVERATM = 0x72 - IFT_IPOVERCDLC = 0x6d - IFT_IPOVERCLAW = 0x6e - IFT_IPSWITCH = 0x4e - IFT_ISDN = 0x3f - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISDNS = 0x4b - IFT_ISDNU = 0x4c - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88025CRFPINT = 0x62 - IFT_ISO88025DTR = 0x56 - IFT_ISO88025FIBER = 0x73 - IFT_ISO88026 = 0xa - IFT_ISUP = 0xb3 - IFT_L3IPXVLAN = 0x89 - IFT_LAPB = 0x10 - IFT_LAPD = 0x4d - IFT_LAPF = 0x77 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MEDIAMAILOVERIP = 0x8b - IFT_MFSIGLINK = 0xa7 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_MPC = 0x71 - IFT_MPLS = 0xa6 - IFT_MPLSTUNNEL = 0x96 - IFT_MSDSL = 0x8f - IFT_MVL = 0xbf - IFT_MYRINET = 0x63 - IFT_NFAS = 0xaf - IFT_NSIP = 0x1b - IFT_OPTICALCHANNEL = 0xc3 - IFT_OPTICALTRANSPORT = 0xc4 - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PFLOG = 0xf6 - IFT_PFSYNC = 0xf7 - IFT_PLC = 0xae - IFT_POS = 0xab - IFT_PPPMULTILINKBUNDLE = 0x6c - IFT_PROPBWAP2MP = 0xb8 - IFT_PROPCNLS = 0x59 - IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 - IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 - IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 - IFT_PROPMUX = 0x36 - IFT_PROPWIRELESSP2P = 0x9d - IFT_PTPSERIAL = 0x16 - IFT_PVC = 0xf1 - IFT_QLLC = 0x44 - IFT_RADIOMAC = 0xbc - IFT_RADSL = 0x5f - IFT_REACHDSL = 0xc0 - IFT_RFC1483 = 0x9f - IFT_RS232 = 0x21 - IFT_RSRB = 0x4f - IFT_SDLC = 0x11 - IFT_SDSL = 0x60 - IFT_SHDSL = 0xa9 - IFT_SIP = 0x1f - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SONET = 0x27 - IFT_SONETOVERHEADCHANNEL = 0xb9 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_SRP = 0x97 - IFT_SS7SIGLINK = 0x9c - IFT_STACKTOSTACK = 0x6f - IFT_STARLAN = 0xb - IFT_STF = 0xd7 - IFT_T1 = 0x12 - IFT_TDLC = 0x74 - IFT_TERMPAD = 0x5b - IFT_TR008 = 0xb0 - IFT_TRANSPHDLC = 0x7b - IFT_TUNNEL = 0x83 - IFT_ULTRA = 0x1d - IFT_USB = 0xa0 - IFT_V11 = 0x40 - IFT_V35 = 0x2d - IFT_V36 = 0x41 - IFT_V37 = 0x78 - IFT_VDSL = 0x61 - IFT_VIRTUALIPADDRESS = 0x70 - IFT_VOICEEM = 0x64 - IFT_VOICEENCAP = 0x67 - IFT_VOICEFXO = 0x65 - IFT_VOICEFXS = 0x66 - IFT_VOICEOVERATM = 0x98 - IFT_VOICEOVERFRAMERELAY = 0x99 - IFT_VOICEOVERIP = 0x68 - IFT_X213 = 0x5d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25HUNTGROUP = 0x7a - IFT_X25MLP = 0x79 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - - // missing constants on FreeBSD-11.1-RELEASE, copied from old values in ztypes_freebsd_arm.go - IFF_SMART = 0x20 - IFT_FAITH = 0xf2 - IFT_IPXIP = 0xf9 - IPPROTO_MAXID = 0x34 - IPV6_FAITH = 0x1d - IP_FAITH = 0x16 - MAP_NORESERVE = 0x40 - MAP_RENAME = 0x20 - NET_RT_MAXID = 0x6 - RTF_PRCLONING = 0x10000 - RTM_OLDADD = 0x9 - RTM_OLDDEL = 0xa - SIOCADDRT = 0x8030720a - SIOCALIFADDR = 0x8118691b - SIOCDELRT = 0x8030720b - SIOCDLIFADDR = 0x8118691d - SIOCGLIFADDR = 0xc118691c - SIOCGLIFPHYADDR = 0xc118694b - SIOCSLIFPHYADDR = 0x8118694a -) diff --git a/vendor/golang.org/x/sys/unix/errors_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/errors_freebsd_arm64.go deleted file mode 100644 index 946dcf3..0000000 --- a/vendor/golang.org/x/sys/unix/errors_freebsd_arm64.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep -// them here for backwards compatibility. - -package unix - -const ( - DLT_HHDLC = 0x79 - IPV6_MIN_MEMBERSHIPS = 0x1f - IP_MAX_SOURCE_FILTER = 0x400 - IP_MIN_MEMBERSHIPS = 0x1f - RT_CACHING_CONTEXT = 0x1 - RT_NORTREF = 0x2 -) diff --git a/vendor/golang.org/x/sys/unix/ifreq_linux.go b/vendor/golang.org/x/sys/unix/ifreq_linux.go index 934af31..15721a5 100644 --- a/vendor/golang.org/x/sys/unix/ifreq_linux.go +++ b/vendor/golang.org/x/sys/unix/ifreq_linux.go @@ -8,7 +8,6 @@ package unix import ( - "bytes" "unsafe" ) @@ -45,13 +44,7 @@ func NewIfreq(name string) (*Ifreq, error) { // Name returns the interface name associated with the Ifreq. func (ifr *Ifreq) Name() string { - // BytePtrToString requires a NULL terminator or the program may crash. If - // one is not present, just return the empty string. - if !bytes.Contains(ifr.raw.Ifrn[:], []byte{0x00}) { - return "" - } - - return BytePtrToString(&ifr.raw.Ifrn[0]) + return ByteSliceToString(ifr.raw.Ifrn[:]) } // According to netdevice(7), only AF_INET addresses are returned for numerous diff --git a/vendor/golang.org/x/sys/unix/ioctl_linux.go b/vendor/golang.org/x/sys/unix/ioctl_linux.go index 884430b..0d12c08 100644 --- a/vendor/golang.org/x/sys/unix/ioctl_linux.go +++ b/vendor/golang.org/x/sys/unix/ioctl_linux.go @@ -4,9 +4,7 @@ package unix -import ( - "unsafe" -) +import "unsafe" // IoctlRetInt performs an ioctl operation specified by req on a device // associated with opened file descriptor fd, and returns a non-negative @@ -217,3 +215,19 @@ func IoctlKCMAttach(fd int, info KCMAttach) error { func IoctlKCMUnattach(fd int, info KCMUnattach) error { return ioctlPtr(fd, SIOCKCMUNATTACH, unsafe.Pointer(&info)) } + +// IoctlLoopGetStatus64 gets the status of the loop device associated with the +// file descriptor fd using the LOOP_GET_STATUS64 operation. +func IoctlLoopGetStatus64(fd int) (*LoopInfo64, error) { + var value LoopInfo64 + if err := ioctlPtr(fd, LOOP_GET_STATUS64, unsafe.Pointer(&value)); err != nil { + return nil, err + } + return &value, nil +} + +// IoctlLoopSetStatus64 sets the status of the loop device associated with the +// file descriptor fd using the LOOP_SET_STATUS64 operation. +func IoctlLoopSetStatus64(fd int, value *LoopInfo64) error { + return ioctlPtr(fd, LOOP_SET_STATUS64, unsafe.Pointer(value)) +} diff --git a/vendor/golang.org/x/sys/unix/mkall.sh b/vendor/golang.org/x/sys/unix/mkall.sh index ee73623..3b2335d 100644 --- a/vendor/golang.org/x/sys/unix/mkall.sh +++ b/vendor/golang.org/x/sys/unix/mkall.sh @@ -73,12 +73,12 @@ aix_ppc64) darwin_amd64) mkerrors="$mkerrors -m64" mktypes="GOARCH=$GOARCH go tool cgo -godefs" - mkasm="go run mkasm_darwin.go" + mkasm="go run mkasm.go" ;; darwin_arm64) mkerrors="$mkerrors -m64" mktypes="GOARCH=$GOARCH go tool cgo -godefs" - mkasm="go run mkasm_darwin.go" + mkasm="go run mkasm.go" ;; dragonfly_amd64) mkerrors="$mkerrors -m64" @@ -89,25 +89,30 @@ dragonfly_amd64) freebsd_386) mkerrors="$mkerrors -m32" mksyscall="go run mksyscall.go -l32" - mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'" + mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'" mktypes="GOARCH=$GOARCH go tool cgo -godefs" ;; freebsd_amd64) mkerrors="$mkerrors -m64" - mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'" + mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'" mktypes="GOARCH=$GOARCH go tool cgo -godefs" ;; freebsd_arm) mkerrors="$mkerrors" mksyscall="go run mksyscall.go -l32 -arm" - mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'" + mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'" # Let the type of C char be signed for making the bare syscall # API consistent across platforms. mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" ;; freebsd_arm64) mkerrors="$mkerrors -m64" - mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'" + mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'" + mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" + ;; +freebsd_riscv64) + mkerrors="$mkerrors -m64" + mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'" mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" ;; netbsd_386) @@ -137,33 +142,33 @@ netbsd_arm64) mktypes="GOARCH=$GOARCH go tool cgo -godefs" ;; openbsd_386) + mkasm="go run mkasm.go" mkerrors="$mkerrors -m32" - mksyscall="go run mksyscall.go -l32 -openbsd" + mksyscall="go run mksyscall.go -l32 -openbsd -libc" mksysctl="go run mksysctl_openbsd.go" - mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'" mktypes="GOARCH=$GOARCH go tool cgo -godefs" ;; openbsd_amd64) + mkasm="go run mkasm.go" mkerrors="$mkerrors -m64" - mksyscall="go run mksyscall.go -openbsd" + mksyscall="go run mksyscall.go -openbsd -libc" mksysctl="go run mksysctl_openbsd.go" - mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'" mktypes="GOARCH=$GOARCH go tool cgo -godefs" ;; openbsd_arm) + mkasm="go run mkasm.go" mkerrors="$mkerrors" - mksyscall="go run mksyscall.go -l32 -openbsd -arm" + mksyscall="go run mksyscall.go -l32 -openbsd -arm -libc" mksysctl="go run mksysctl_openbsd.go" - mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'" # Let the type of C char be signed for making the bare syscall # API consistent across platforms. mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" ;; openbsd_arm64) + mkasm="go run mkasm.go" mkerrors="$mkerrors -m64" - mksyscall="go run mksyscall.go -openbsd" + mksyscall="go run mksyscall.go -openbsd -libc" mksysctl="go run mksysctl_openbsd.go" - mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'" # Let the type of C char be signed for making the bare syscall # API consistent across platforms. mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" @@ -227,5 +232,5 @@ esac if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi if [ -n "$mktypes" ]; then echo "$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go"; fi - if [ -n "$mkasm" ]; then echo "$mkasm $GOARCH"; fi + if [ -n "$mkasm" ]; then echo "$mkasm $GOOS $GOARCH"; fi ) | $run diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh index d888fb7..2ab44aa 100644 --- a/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -128,6 +128,7 @@ includes_FreeBSD=' #include #include #include +#include #include #include #include @@ -202,6 +203,7 @@ struct ltchars { #include #include #include +#include #include #include #include @@ -295,6 +297,10 @@ struct ltchars { #define SOL_NETLINK 270 #endif +#ifndef SOL_SMC +#define SOL_SMC 286 +#endif + #ifdef SOL_BLUETOOTH // SPARC includes this in /usr/include/sparc64-linux-gnu/bits/socket.h // but it is already in bluetooth_linux.go @@ -529,7 +535,7 @@ ccflags="$@" $2 ~ /^(MS|MNT|MOUNT|UMOUNT)_/ || $2 ~ /^NS_GET_/ || $2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ || - $2 ~ /^(O|F|[ES]?FD|NAME|S|PTRACE|PT|TFD)_/ || + $2 ~ /^(O|F|[ES]?FD|NAME|S|PTRACE|PT|PIOD|TFD)_/ || $2 ~ /^KEXEC_/ || $2 ~ /^LINUX_REBOOT_CMD_/ || $2 ~ /^LINUX_REBOOT_MAGIC[12]$/ || @@ -553,6 +559,7 @@ ccflags="$@" $2 ~ /^CLONE_[A-Z_]+/ || $2 !~ /^(BPF_TIMEVAL|BPF_FIB_LOOKUP_[A-Z]+)$/ && $2 ~ /^(BPF|DLT)_/ || + $2 ~ /^AUDIT_/ || $2 ~ /^(CLOCK|TIMER)_/ || $2 ~ /^CAN_/ || $2 ~ /^CAP_/ || @@ -575,7 +582,6 @@ ccflags="$@" $2 ~ /^SEEK_/ || $2 ~ /^SPLICE_/ || $2 ~ /^SYNC_FILE_RANGE_/ || - $2 !~ /^AUDIT_RECORD_MAGIC/ && $2 !~ /IOC_MAGIC/ && $2 ~ /^[A-Z][A-Z0-9_]+_MAGIC2?$/ || $2 ~ /^(VM|VMADDR)_/ || diff --git a/vendor/golang.org/x/sys/unix/str.go b/vendor/golang.org/x/sys/unix/str.go deleted file mode 100644 index 8ba89ed..0000000 --- a/vendor/golang.org/x/sys/unix/str.go +++ /dev/null @@ -1,27 +0,0 @@ -// 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 aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris -// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris - -package unix - -func itoa(val int) string { // do it here rather than with fmt to avoid dependency - if val < 0 { - return "-" + uitoa(uint(-val)) - } - return uitoa(uint(val)) -} - -func uitoa(val uint) string { - 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/unix/syscall.go b/vendor/golang.org/x/sys/unix/syscall.go index 649fa87..9916e5e 100644 --- a/vendor/golang.org/x/sys/unix/syscall.go +++ b/vendor/golang.org/x/sys/unix/syscall.go @@ -29,8 +29,6 @@ import ( "bytes" "strings" "unsafe" - - "golang.org/x/sys/internal/unsafeheader" ) // ByteSliceFromString returns a NUL-terminated slice of bytes @@ -82,12 +80,7 @@ func BytePtrToString(p *byte) string { ptr = unsafe.Pointer(uintptr(ptr) + 1) } - var s []byte - h := (*unsafeheader.Slice)(unsafe.Pointer(&s)) - h.Data = unsafe.Pointer(p) - h.Len = n - h.Cap = n - + s := unsafe.Slice((*byte)(unsafe.Pointer(p)), n) return string(s) } diff --git a/vendor/golang.org/x/sys/unix/syscall_aix.go b/vendor/golang.org/x/sys/unix/syscall_aix.go index f2a114f..2db1b51 100644 --- a/vendor/golang.org/x/sys/unix/syscall_aix.go +++ b/vendor/golang.org/x/sys/unix/syscall_aix.go @@ -37,6 +37,7 @@ func Creat(path string, mode uint32) (fd int, err error) { } //sys utimes(path string, times *[2]Timeval) (err error) + func Utimes(path string, tv []Timeval) error { if len(tv) != 2 { return EINVAL @@ -45,6 +46,7 @@ func Utimes(path string, tv []Timeval) error { } //sys utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) + func UtimesNano(path string, ts []Timespec) error { if len(ts) != 2 { return EINVAL @@ -215,14 +217,63 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) { return } -func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { - // Recvmsg not implemented on AIX - return -1, -1, -1, ENOSYS +func recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { + var msg Msghdr + msg.Name = (*byte)(unsafe.Pointer(rsa)) + msg.Namelen = uint32(SizeofSockaddrAny) + var dummy byte + if len(oob) > 0 { + // receive at least one normal byte + if emptyIovecs(iov) { + var iova [1]Iovec + iova[0].Base = &dummy + iova[0].SetLen(1) + iov = iova[:] + } + msg.Control = (*byte)(unsafe.Pointer(&oob[0])) + msg.SetControllen(len(oob)) + } + if len(iov) > 0 { + msg.Iov = &iov[0] + msg.SetIovlen(len(iov)) + } + if n, err = recvmsg(fd, &msg, flags); n == -1 { + return + } + oobn = int(msg.Controllen) + recvflags = int(msg.Flags) + return } -func sendmsgN(fd int, p, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { - // SendmsgN not implemented on AIX - return -1, ENOSYS +func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { + var msg Msghdr + msg.Name = (*byte)(unsafe.Pointer(ptr)) + msg.Namelen = uint32(salen) + var dummy byte + var empty bool + if len(oob) > 0 { + // send at least one normal byte + empty = emptyIovecs(iov) + if empty { + var iova [1]Iovec + iova[0].Base = &dummy + iova[0].SetLen(1) + iov = iova[:] + } + msg.Control = (*byte)(unsafe.Pointer(&oob[0])) + msg.SetControllen(len(oob)) + } + if len(iov) > 0 { + msg.Iov = &iov[0] + msg.SetIovlen(len(iov)) + } + if n, err = sendmsg(fd, &msg, flags); err != nil { + return 0, err + } + if len(oob) > 0 && empty { + n = 0 + } + return n, nil } func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { @@ -300,11 +351,13 @@ func direntNamlen(buf []byte) (uint64, bool) { } //sys getdirent(fd int, buf []byte) (n int, err error) + func Getdents(fd int, buf []byte) (n int, err error) { return getdirent(fd, buf) } //sys wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error) + func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { var status _C_int var r Pid_t @@ -372,6 +425,7 @@ func (w WaitStatus) TrapCause() int { return -1 } //sys fcntl(fd int, cmd int, arg int) (val int, err error) //sys fsyncRange(fd int, how int, start int64, length int64) (err error) = fsync_range + func Fsync(fd int) error { return fsyncRange(fd, O_SYNC, 0, 0) } @@ -536,6 +590,7 @@ func Poll(fds []PollFd, timeout int) (n int, err error) { //sys Getsystemcfg(label int) (n uint64) //sys umount(target string) (err error) + func Unmount(target string, flags int) (err error) { if flags != 0 { // AIX doesn't have any flags for umount. diff --git a/vendor/golang.org/x/sys/unix/syscall_bsd.go b/vendor/golang.org/x/sys/unix/syscall_bsd.go index 9c87c5f..eda4267 100644 --- a/vendor/golang.org/x/sys/unix/syscall_bsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_bsd.go @@ -325,27 +325,26 @@ func GetsockoptString(fd, level, opt int) (string, error) { //sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) //sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) -func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { +func recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { var msg Msghdr msg.Name = (*byte)(unsafe.Pointer(rsa)) msg.Namelen = uint32(SizeofSockaddrAny) - var iov Iovec - if len(p) > 0 { - iov.Base = (*byte)(unsafe.Pointer(&p[0])) - iov.SetLen(len(p)) - } var dummy byte if len(oob) > 0 { // receive at least one normal byte - if len(p) == 0 { - iov.Base = &dummy - iov.SetLen(1) + if emptyIovecs(iov) { + var iova [1]Iovec + iova[0].Base = &dummy + iova[0].SetLen(1) + iov = iova[:] } msg.Control = (*byte)(unsafe.Pointer(&oob[0])) msg.SetControllen(len(oob)) } - msg.Iov = &iov - msg.Iovlen = 1 + if len(iov) > 0 { + msg.Iov = &iov[0] + msg.SetIovlen(len(iov)) + } if n, err = recvmsg(fd, &msg, flags); err != nil { return } @@ -356,31 +355,32 @@ func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) -func sendmsgN(fd int, p, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { +func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { var msg Msghdr msg.Name = (*byte)(unsafe.Pointer(ptr)) msg.Namelen = uint32(salen) - var iov Iovec - if len(p) > 0 { - iov.Base = (*byte)(unsafe.Pointer(&p[0])) - iov.SetLen(len(p)) - } var dummy byte + var empty bool if len(oob) > 0 { // send at least one normal byte - if len(p) == 0 { - iov.Base = &dummy - iov.SetLen(1) + empty = emptyIovecs(iov) + if empty { + var iova [1]Iovec + iova[0].Base = &dummy + iova[0].SetLen(1) + iov = iova[:] } msg.Control = (*byte)(unsafe.Pointer(&oob[0])) msg.SetControllen(len(oob)) } - msg.Iov = &iov - msg.Iovlen = 1 + if len(iov) > 0 { + msg.Iov = &iov[0] + msg.SetIovlen(len(iov)) + } if n, err = sendmsg(fd, &msg, flags); err != nil { return 0, err } - if len(oob) > 0 && len(p) == 0 { + if len(oob) > 0 && empty { n = 0 } return n, nil diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go b/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go index 1596426..1259f6d 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go @@ -7,11 +7,7 @@ package unix -import ( - "unsafe" - - "golang.org/x/sys/internal/unsafeheader" -) +import "unsafe" //sys closedir(dir uintptr) (err error) //sys readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) @@ -86,11 +82,7 @@ func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { } // Copy entry into return buffer. - var s []byte - hdr := (*unsafeheader.Slice)(unsafe.Pointer(&s)) - hdr.Data = unsafe.Pointer(&entry) - hdr.Cap = reclen - hdr.Len = reclen + s := unsafe.Slice((*byte)(unsafe.Pointer(&entry)), reclen) copy(buf, s) buf = buf[reclen:] diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go index 09a25c6..4f87f16 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -393,6 +393,13 @@ func GetsockoptXucred(fd, level, opt int) (*Xucred, error) { return x, err } +func GetsockoptTCPConnectionInfo(fd, level, opt int) (*TCPConnectionInfo, error) { + var value TCPConnectionInfo + vallen := _Socklen(SizeofTCPConnectionInfo) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + func SysctlKinfoProc(name string, args ...int) (*KinfoProc, error) { mib, err := sysctlmib(name, args...) if err != nil { @@ -504,6 +511,7 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { //sys Mkdirat(dirfd int, path string, mode uint32) (err error) //sys Mkfifo(path string, mode uint32) (err error) //sys Mknod(path string, mode uint32, dev int) (err error) +//sys Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) //sys Open(path string, mode int, perm uint32) (fd int, err error) //sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) //sys Pathconf(path string, name int) (val int, err error) @@ -572,7 +580,6 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { // Nfssvc // Getfh // Quotactl -// Mount // Csops // Waitid // Add_profil diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go index c61e274..61c0d0d 100644 --- a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go +++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go @@ -125,11 +125,13 @@ func Pipe2(p []int, flags int) (err error) { } //sys extpread(fd int, p []byte, flags int, offset int64) (n int, err error) + func pread(fd int, p []byte, offset int64) (n int, err error) { return extpread(fd, p, 0, offset) } //sys extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) + func pwrite(fd int, p []byte, offset int64) (n int, err error) { return extpwrite(fd, p, 0, offset) } diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd.go b/vendor/golang.org/x/sys/unix/syscall_freebsd.go index 6f6c510..de7c23e 100644 --- a/vendor/golang.org/x/sys/unix/syscall_freebsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd.go @@ -17,25 +17,12 @@ import ( "unsafe" ) -const ( - SYS_FSTAT_FREEBSD12 = 551 // { int fstat(int fd, _Out_ struct stat *sb); } - SYS_FSTATAT_FREEBSD12 = 552 // { int fstatat(int fd, _In_z_ char *path, \ - SYS_GETDIRENTRIES_FREEBSD12 = 554 // { ssize_t getdirentries(int fd, \ - SYS_STATFS_FREEBSD12 = 555 // { int statfs(_In_z_ char *path, \ - SYS_FSTATFS_FREEBSD12 = 556 // { int fstatfs(int fd, \ - SYS_GETFSSTAT_FREEBSD12 = 557 // { int getfsstat( \ - SYS_MKNODAT_FREEBSD12 = 559 // { int mknodat(int fd, _In_z_ char *path, \ -) - // See https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/versions.html. var ( osreldateOnce sync.Once osreldate uint32 ) -// INO64_FIRST from /usr/src/lib/libc/sys/compat-ino64.h -const _ino64First = 1200031 - func supportsABI(ver uint32) bool { osreldateOnce.Do(func() { osreldate, _ = SysctlUint32("kern.osreldate") }) return osreldate >= ver @@ -159,38 +146,18 @@ func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) { func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { var ( - _p0 unsafe.Pointer - bufsize uintptr - oldBuf []statfs_freebsd11_t - needsConvert bool + _p0 unsafe.Pointer + bufsize uintptr ) - if len(buf) > 0 { - if supportsABI(_ino64First) { - _p0 = unsafe.Pointer(&buf[0]) - bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) - } else { - n := len(buf) - oldBuf = make([]statfs_freebsd11_t, n) - _p0 = unsafe.Pointer(&oldBuf[0]) - bufsize = unsafe.Sizeof(statfs_freebsd11_t{}) * uintptr(n) - needsConvert = true - } + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) } - var sysno uintptr = SYS_GETFSSTAT - if supportsABI(_ino64First) { - sysno = SYS_GETFSSTAT_FREEBSD12 - } - r0, _, e1 := Syscall(sysno, uintptr(_p0), bufsize, uintptr(flags)) + r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags)) n = int(r0) if e1 != 0 { err = e1 } - if e1 == 0 && needsConvert { - for i := range oldBuf { - buf[i].convertFrom(&oldBuf[i]) - } - } return } @@ -245,87 +212,11 @@ func Uname(uname *Utsname) error { } func Stat(path string, st *Stat_t) (err error) { - var oldStat stat_freebsd11_t - if supportsABI(_ino64First) { - return fstatat_freebsd12(AT_FDCWD, path, st, 0) - } - err = stat(path, &oldStat) - if err != nil { - return err - } - - st.convertFrom(&oldStat) - return nil + return Fstatat(AT_FDCWD, path, st, 0) } func Lstat(path string, st *Stat_t) (err error) { - var oldStat stat_freebsd11_t - if supportsABI(_ino64First) { - return fstatat_freebsd12(AT_FDCWD, path, st, AT_SYMLINK_NOFOLLOW) - } - err = lstat(path, &oldStat) - if err != nil { - return err - } - - st.convertFrom(&oldStat) - return nil -} - -func Fstat(fd int, st *Stat_t) (err error) { - var oldStat stat_freebsd11_t - if supportsABI(_ino64First) { - return fstat_freebsd12(fd, st) - } - err = fstat(fd, &oldStat) - if err != nil { - return err - } - - st.convertFrom(&oldStat) - return nil -} - -func Fstatat(fd int, path string, st *Stat_t, flags int) (err error) { - var oldStat stat_freebsd11_t - if supportsABI(_ino64First) { - return fstatat_freebsd12(fd, path, st, flags) - } - err = fstatat(fd, path, &oldStat, flags) - if err != nil { - return err - } - - st.convertFrom(&oldStat) - return nil -} - -func Statfs(path string, st *Statfs_t) (err error) { - var oldStatfs statfs_freebsd11_t - if supportsABI(_ino64First) { - return statfs_freebsd12(path, st) - } - err = statfs(path, &oldStatfs) - if err != nil { - return err - } - - st.convertFrom(&oldStatfs) - return nil -} - -func Fstatfs(fd int, st *Statfs_t) (err error) { - var oldStatfs statfs_freebsd11_t - if supportsABI(_ino64First) { - return fstatfs_freebsd12(fd, st) - } - err = fstatfs(fd, &oldStatfs) - if err != nil { - return err - } - - st.convertFrom(&oldStatfs) - return nil + return Fstatat(AT_FDCWD, path, st, AT_SYMLINK_NOFOLLOW) } func Getdents(fd int, buf []byte) (n int, err error) { @@ -333,162 +224,25 @@ func Getdents(fd int, buf []byte) (n int, err error) { } func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { - if supportsABI(_ino64First) { - if basep == nil || unsafe.Sizeof(*basep) == 8 { - return getdirentries_freebsd12(fd, buf, (*uint64)(unsafe.Pointer(basep))) - } - // The freebsd12 syscall needs a 64-bit base. On 32-bit machines - // we can't just use the basep passed in. See #32498. - var base uint64 = uint64(*basep) - n, err = getdirentries_freebsd12(fd, buf, &base) - *basep = uintptr(base) - if base>>32 != 0 { - // We can't stuff the base back into a uintptr, so any - // future calls would be suspect. Generate an error. - // EIO is allowed by getdirentries. - err = EIO - } - return + if basep == nil || unsafe.Sizeof(*basep) == 8 { + return getdirentries(fd, buf, (*uint64)(unsafe.Pointer(basep))) } - - // The old syscall entries are smaller than the new. Use 1/4 of the original - // buffer size rounded up to DIRBLKSIZ (see /usr/src/lib/libc/sys/getdirentries.c). - oldBufLen := roundup(len(buf)/4, _dirblksiz) - oldBuf := make([]byte, oldBufLen) - n, err = getdirentries(fd, oldBuf, basep) - if err == nil && n > 0 { - n = convertFromDirents11(buf, oldBuf[:n]) + // The syscall needs a 64-bit base. On 32-bit machines + // we can't just use the basep passed in. See #32498. + var base uint64 = uint64(*basep) + n, err = getdirentries(fd, buf, &base) + *basep = uintptr(base) + if base>>32 != 0 { + // We can't stuff the base back into a uintptr, so any + // future calls would be suspect. Generate an error. + // EIO is allowed by getdirentries. + err = EIO } return } func Mknod(path string, mode uint32, dev uint64) (err error) { - var oldDev int - if supportsABI(_ino64First) { - return mknodat_freebsd12(AT_FDCWD, path, mode, dev) - } - oldDev = int(dev) - return mknod(path, mode, oldDev) -} - -func Mknodat(fd int, path string, mode uint32, dev uint64) (err error) { - var oldDev int - if supportsABI(_ino64First) { - return mknodat_freebsd12(fd, path, mode, dev) - } - oldDev = int(dev) - return mknodat(fd, path, mode, oldDev) -} - -// round x to the nearest multiple of y, larger or equal to x. -// -// from /usr/include/sys/param.h Macros for counting and rounding. -// #define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) -func roundup(x, y int) int { - return ((x + y - 1) / y) * y -} - -func (s *Stat_t) convertFrom(old *stat_freebsd11_t) { - *s = Stat_t{ - Dev: uint64(old.Dev), - Ino: uint64(old.Ino), - Nlink: uint64(old.Nlink), - Mode: old.Mode, - Uid: old.Uid, - Gid: old.Gid, - Rdev: uint64(old.Rdev), - Atim: old.Atim, - Mtim: old.Mtim, - Ctim: old.Ctim, - Btim: old.Btim, - Size: old.Size, - Blocks: old.Blocks, - Blksize: old.Blksize, - Flags: old.Flags, - Gen: uint64(old.Gen), - } -} - -func (s *Statfs_t) convertFrom(old *statfs_freebsd11_t) { - *s = Statfs_t{ - Version: _statfsVersion, - Type: old.Type, - Flags: old.Flags, - Bsize: old.Bsize, - Iosize: old.Iosize, - Blocks: old.Blocks, - Bfree: old.Bfree, - Bavail: old.Bavail, - Files: old.Files, - Ffree: old.Ffree, - Syncwrites: old.Syncwrites, - Asyncwrites: old.Asyncwrites, - Syncreads: old.Syncreads, - Asyncreads: old.Asyncreads, - // Spare - Namemax: old.Namemax, - Owner: old.Owner, - Fsid: old.Fsid, - // Charspare - // Fstypename - // Mntfromname - // Mntonname - } - - sl := old.Fstypename[:] - n := clen(*(*[]byte)(unsafe.Pointer(&sl))) - copy(s.Fstypename[:], old.Fstypename[:n]) - - sl = old.Mntfromname[:] - n = clen(*(*[]byte)(unsafe.Pointer(&sl))) - copy(s.Mntfromname[:], old.Mntfromname[:n]) - - sl = old.Mntonname[:] - n = clen(*(*[]byte)(unsafe.Pointer(&sl))) - copy(s.Mntonname[:], old.Mntonname[:n]) -} - -func convertFromDirents11(buf []byte, old []byte) int { - const ( - fixedSize = int(unsafe.Offsetof(Dirent{}.Name)) - oldFixedSize = int(unsafe.Offsetof(dirent_freebsd11{}.Name)) - ) - - dstPos := 0 - srcPos := 0 - for dstPos+fixedSize < len(buf) && srcPos+oldFixedSize < len(old) { - var dstDirent Dirent - var srcDirent dirent_freebsd11 - - // If multiple direntries are written, sometimes when we reach the final one, - // we may have cap of old less than size of dirent_freebsd11. - copy((*[unsafe.Sizeof(srcDirent)]byte)(unsafe.Pointer(&srcDirent))[:], old[srcPos:]) - - reclen := roundup(fixedSize+int(srcDirent.Namlen)+1, 8) - if dstPos+reclen > len(buf) { - break - } - - dstDirent.Fileno = uint64(srcDirent.Fileno) - dstDirent.Off = 0 - dstDirent.Reclen = uint16(reclen) - dstDirent.Type = srcDirent.Type - dstDirent.Pad0 = 0 - dstDirent.Namlen = uint16(srcDirent.Namlen) - dstDirent.Pad1 = 0 - - copy(dstDirent.Name[:], srcDirent.Name[:srcDirent.Namlen]) - copy(buf[dstPos:], (*[unsafe.Sizeof(dstDirent)]byte)(unsafe.Pointer(&dstDirent))[:]) - padding := buf[dstPos+fixedSize+int(dstDirent.Namlen) : dstPos+reclen] - for i := range padding { - padding[i] = 0 - } - - dstPos += int(dstDirent.Reclen) - srcPos += int(srcDirent.Reclen) - } - - return dstPos + return Mknodat(AT_FDCWD, path, mode, dev) } func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { @@ -501,31 +255,31 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e //sys ptrace(request int, pid int, addr uintptr, data int) (err error) func PtraceAttach(pid int) (err error) { - return ptrace(PTRACE_ATTACH, pid, 0, 0) + return ptrace(PT_ATTACH, pid, 0, 0) } func PtraceCont(pid int, signal int) (err error) { - return ptrace(PTRACE_CONT, pid, 1, signal) + return ptrace(PT_CONTINUE, pid, 1, signal) } func PtraceDetach(pid int) (err error) { - return ptrace(PTRACE_DETACH, pid, 1, 0) + return ptrace(PT_DETACH, pid, 1, 0) } func PtraceGetFpRegs(pid int, fpregsout *FpReg) (err error) { - return ptrace(PTRACE_GETFPREGS, pid, uintptr(unsafe.Pointer(fpregsout)), 0) + return ptrace(PT_GETFPREGS, pid, uintptr(unsafe.Pointer(fpregsout)), 0) } func PtraceGetRegs(pid int, regsout *Reg) (err error) { - return ptrace(PTRACE_GETREGS, pid, uintptr(unsafe.Pointer(regsout)), 0) + return ptrace(PT_GETREGS, pid, uintptr(unsafe.Pointer(regsout)), 0) } func PtraceLwpEvents(pid int, enable int) (err error) { - return ptrace(PTRACE_LWPEVENTS, pid, 0, enable) + return ptrace(PT_LWP_EVENTS, pid, 0, enable) } func PtraceLwpInfo(pid int, info uintptr) (err error) { - return ptrace(PTRACE_LWPINFO, pid, info, int(unsafe.Sizeof(PtraceLwpInfoStruct{}))) + return ptrace(PT_LWPINFO, pid, info, int(unsafe.Sizeof(PtraceLwpInfoStruct{}))) } func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) { @@ -545,11 +299,11 @@ func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) { } func PtraceSetRegs(pid int, regs *Reg) (err error) { - return ptrace(PTRACE_SETREGS, pid, uintptr(unsafe.Pointer(regs)), 0) + return ptrace(PT_SETREGS, pid, uintptr(unsafe.Pointer(regs)), 0) } func PtraceSingleStep(pid int) (err error) { - return ptrace(PTRACE_SINGLESTEP, pid, 1, 0) + return ptrace(PT_STEP, pid, 1, 0) } /* @@ -591,16 +345,12 @@ func PtraceSingleStep(pid int) (err error) { //sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) //sys Flock(fd int, how int) (err error) //sys Fpathconf(fd int, name int) (val int, err error) -//sys fstat(fd int, stat *stat_freebsd11_t) (err error) -//sys fstat_freebsd12(fd int, stat *Stat_t) (err error) -//sys fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) -//sys fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) -//sys fstatfs(fd int, stat *statfs_freebsd11_t) (err error) -//sys fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) +//sys Fstatfs(fd int, stat *Statfs_t) (err error) //sys Fsync(fd int) (err error) //sys Ftruncate(fd int, length int64) (err error) -//sys getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) -//sys getdirentries_freebsd12(fd int, buf []byte, basep *uint64) (n int, err error) +//sys getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) //sys Getdtablesize() (size int) //sysnb Getegid() (egid int) //sysnb Geteuid() (uid int) @@ -622,13 +372,10 @@ func PtraceSingleStep(pid int) (err error) { //sys Link(path string, link string) (err error) //sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) //sys Listen(s int, backlog int) (err error) -//sys lstat(path string, stat *stat_freebsd11_t) (err error) //sys Mkdir(path string, mode uint32) (err error) //sys Mkdirat(dirfd int, path string, mode uint32) (err error) //sys Mkfifo(path string, mode uint32) (err error) -//sys mknod(path string, mode uint32, dev int) (err error) -//sys mknodat(fd int, path string, mode uint32, dev int) (err error) -//sys mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) +//sys Mknodat(fd int, path string, mode uint32, dev uint64) (err error) //sys Nanosleep(time *Timespec, leftover *Timespec) (err error) //sys Open(path string, mode int, perm uint32) (fd int, err error) //sys Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) @@ -658,9 +405,7 @@ func PtraceSingleStep(pid int) (err error) { //sysnb Setsid() (pid int, err error) //sysnb Settimeofday(tp *Timeval) (err error) //sysnb Setuid(uid int) (err error) -//sys stat(path string, stat *stat_freebsd11_t) (err error) -//sys statfs(path string, stat *statfs_freebsd11_t) (err error) -//sys statfs_freebsd12(path string, stat *Statfs_t) (err error) +//sys Statfs(path string, stat *Statfs_t) (err error) //sys Symlink(path string, link string) (err error) //sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) //sys Sync() (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go index 342fc32..b11ede8 100644 --- a/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go @@ -57,11 +57,11 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) func PtraceGetFsBase(pid int, fsbase *int64) (err error) { - return ptrace(PTRACE_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0) + return ptrace(PT_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0) } func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) { - ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint32(countin)} - err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0) + ioDesc := PtraceIoDesc{Op: int32(req), Offs: uintptr(unsafe.Pointer(addr)), Addr: uintptr(unsafe.Pointer(&out[0])), Len: uint32(countin)} + err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0) return int(ioDesc.Len), err } diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go index a32d5aa..9ed8eec 100644 --- a/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go @@ -57,11 +57,11 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) func PtraceGetFsBase(pid int, fsbase *int64) (err error) { - return ptrace(PTRACE_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0) + return ptrace(PT_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0) } func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) { - ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint64(countin)} - err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0) + ioDesc := PtraceIoDesc{Op: int32(req), Offs: uintptr(unsafe.Pointer(addr)), Addr: uintptr(unsafe.Pointer(&out[0])), Len: uint64(countin)} + err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0) return int(ioDesc.Len), err } diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go index 1e36d39..f8ac982 100644 --- a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go @@ -57,7 +57,7 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) { - ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint32(countin)} - err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0) + ioDesc := PtraceIoDesc{Op: int32(req), Offs: uintptr(unsafe.Pointer(addr)), Addr: uintptr(unsafe.Pointer(&out[0])), Len: uint32(countin)} + err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0) return int(ioDesc.Len), err } diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go index a09a153..8e93203 100644 --- a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go @@ -57,7 +57,7 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) { - ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint64(countin)} - err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0) + ioDesc := PtraceIoDesc{Op: int32(req), Offs: uintptr(unsafe.Pointer(addr)), Addr: uintptr(unsafe.Pointer(&out[0])), Len: uint64(countin)} + err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0) return int(ioDesc.Len), err } diff --git a/vendor/golang.org/x/sys/unix/syscall_illumos.go b/vendor/golang.org/x/sys/unix/syscall_illumos.go index 8d5f294..e48244a 100644 --- a/vendor/golang.org/x/sys/unix/syscall_illumos.go +++ b/vendor/golang.org/x/sys/unix/syscall_illumos.go @@ -20,10 +20,9 @@ func bytes2iovec(bs [][]byte) []Iovec { for i, b := range bs { iovecs[i].SetLen(len(b)) if len(b) > 0 { - // somehow Iovec.Base on illumos is (*int8), not (*byte) - iovecs[i].Base = (*int8)(unsafe.Pointer(&b[0])) + iovecs[i].Base = &b[0] } else { - iovecs[i].Base = (*int8)(unsafe.Pointer(&_zero)) + iovecs[i].Base = (*byte)(unsafe.Pointer(&_zero)) } } return iovecs diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go index eeae6db..4714691 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" + "strconv" "syscall" "time" "unsafe" @@ -233,7 +234,7 @@ func Futimesat(dirfd int, path string, tv []Timeval) error { func Futimes(fd int, tv []Timeval) (err error) { // Believe it or not, this is the best we can do on Linux // (and is what glibc does). - return Utimes("/proc/self/fd/"+itoa(fd), tv) + return Utimes("/proc/self/fd/"+strconv.Itoa(fd), tv) } const ImplementsGetwd = true @@ -512,24 +513,24 @@ func (sa *SockaddrL2) sockaddr() (unsafe.Pointer, _Socklen, error) { // // Server example: // -// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM) -// _ = unix.Bind(fd, &unix.SockaddrRFCOMM{ -// Channel: 1, -// Addr: [6]uint8{0, 0, 0, 0, 0, 0}, // BDADDR_ANY or 00:00:00:00:00:00 -// }) -// _ = Listen(fd, 1) -// nfd, sa, _ := Accept(fd) -// fmt.Printf("conn addr=%v fd=%d", sa.(*unix.SockaddrRFCOMM).Addr, nfd) -// Read(nfd, buf) +// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM) +// _ = unix.Bind(fd, &unix.SockaddrRFCOMM{ +// Channel: 1, +// Addr: [6]uint8{0, 0, 0, 0, 0, 0}, // BDADDR_ANY or 00:00:00:00:00:00 +// }) +// _ = Listen(fd, 1) +// nfd, sa, _ := Accept(fd) +// fmt.Printf("conn addr=%v fd=%d", sa.(*unix.SockaddrRFCOMM).Addr, nfd) +// Read(nfd, buf) // // Client example: // -// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM) -// _ = Connect(fd, &SockaddrRFCOMM{ -// Channel: 1, -// Addr: [6]byte{0x11, 0x22, 0x33, 0xaa, 0xbb, 0xcc}, // CC:BB:AA:33:22:11 -// }) -// Write(fd, []byte(`hello`)) +// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM) +// _ = Connect(fd, &SockaddrRFCOMM{ +// Channel: 1, +// Addr: [6]byte{0x11, 0x22, 0x33, 0xaa, 0xbb, 0xcc}, // CC:BB:AA:33:22:11 +// }) +// Write(fd, []byte(`hello`)) type SockaddrRFCOMM struct { // Addr represents a bluetooth address, byte ordering is little-endian. Addr [6]uint8 @@ -556,12 +557,12 @@ func (sa *SockaddrRFCOMM) sockaddr() (unsafe.Pointer, _Socklen, error) { // The SockaddrCAN struct must be bound to the socket file descriptor // using Bind before the CAN socket can be used. // -// // Read one raw CAN frame -// fd, _ := Socket(AF_CAN, SOCK_RAW, CAN_RAW) -// addr := &SockaddrCAN{Ifindex: index} -// Bind(fd, addr) -// frame := make([]byte, 16) -// Read(fd, frame) +// // Read one raw CAN frame +// fd, _ := Socket(AF_CAN, SOCK_RAW, CAN_RAW) +// addr := &SockaddrCAN{Ifindex: index} +// Bind(fd, addr) +// frame := make([]byte, 16) +// Read(fd, frame) // // The full SocketCAN documentation can be found in the linux kernel // archives at: https://www.kernel.org/doc/Documentation/networking/can.txt @@ -632,13 +633,13 @@ func (sa *SockaddrCANJ1939) sockaddr() (unsafe.Pointer, _Socklen, error) { // Here is an example of using an AF_ALG socket with SHA1 hashing. // The initial socket setup process is as follows: // -// // Open a socket to perform SHA1 hashing. -// fd, _ := unix.Socket(unix.AF_ALG, unix.SOCK_SEQPACKET, 0) -// addr := &unix.SockaddrALG{Type: "hash", Name: "sha1"} -// unix.Bind(fd, addr) -// // Note: unix.Accept does not work at this time; must invoke accept() -// // manually using unix.Syscall. -// hashfd, _, _ := unix.Syscall(unix.SYS_ACCEPT, uintptr(fd), 0, 0) +// // Open a socket to perform SHA1 hashing. +// fd, _ := unix.Socket(unix.AF_ALG, unix.SOCK_SEQPACKET, 0) +// addr := &unix.SockaddrALG{Type: "hash", Name: "sha1"} +// unix.Bind(fd, addr) +// // Note: unix.Accept does not work at this time; must invoke accept() +// // manually using unix.Syscall. +// hashfd, _, _ := unix.Syscall(unix.SYS_ACCEPT, uintptr(fd), 0, 0) // // Once a file descriptor has been returned from Accept, it may be used to // perform SHA1 hashing. The descriptor is not safe for concurrent use, but @@ -647,39 +648,39 @@ func (sa *SockaddrCANJ1939) sockaddr() (unsafe.Pointer, _Socklen, error) { // When hashing a small byte slice or string, a single Write and Read may // be used: // -// // Assume hashfd is already configured using the setup process. -// hash := os.NewFile(hashfd, "sha1") -// // Hash an input string and read the results. Each Write discards -// // previous hash state. Read always reads the current state. -// b := make([]byte, 20) -// for i := 0; i < 2; i++ { -// io.WriteString(hash, "Hello, world.") -// hash.Read(b) -// fmt.Println(hex.EncodeToString(b)) -// } -// // Output: -// // 2ae01472317d1935a84797ec1983ae243fc6aa28 -// // 2ae01472317d1935a84797ec1983ae243fc6aa28 +// // Assume hashfd is already configured using the setup process. +// hash := os.NewFile(hashfd, "sha1") +// // Hash an input string and read the results. Each Write discards +// // previous hash state. Read always reads the current state. +// b := make([]byte, 20) +// for i := 0; i < 2; i++ { +// io.WriteString(hash, "Hello, world.") +// hash.Read(b) +// fmt.Println(hex.EncodeToString(b)) +// } +// // Output: +// // 2ae01472317d1935a84797ec1983ae243fc6aa28 +// // 2ae01472317d1935a84797ec1983ae243fc6aa28 // // For hashing larger byte slices, or byte streams such as those read from // a file or socket, use Sendto with MSG_MORE to instruct the kernel to update // the hash digest instead of creating a new one for a given chunk and finalizing it. // -// // Assume hashfd and addr are already configured using the setup process. -// hash := os.NewFile(hashfd, "sha1") -// // Hash the contents of a file. -// f, _ := os.Open("/tmp/linux-4.10-rc7.tar.xz") -// b := make([]byte, 4096) -// for { -// n, err := f.Read(b) -// if err == io.EOF { -// break -// } -// unix.Sendto(hashfd, b[:n], unix.MSG_MORE, addr) -// } -// hash.Read(b) -// fmt.Println(hex.EncodeToString(b)) -// // Output: 85cdcad0c06eef66f805ecce353bec9accbeecc5 +// // Assume hashfd and addr are already configured using the setup process. +// hash := os.NewFile(hashfd, "sha1") +// // Hash the contents of a file. +// f, _ := os.Open("/tmp/linux-4.10-rc7.tar.xz") +// b := make([]byte, 4096) +// for { +// n, err := f.Read(b) +// if err == io.EOF { +// break +// } +// unix.Sendto(hashfd, b[:n], unix.MSG_MORE, addr) +// } +// hash.Read(b) +// fmt.Println(hex.EncodeToString(b)) +// // Output: 85cdcad0c06eef66f805ecce353bec9accbeecc5 // // For more information, see: http://www.chronox.de/crypto-API/crypto/userspace-if.html. type SockaddrALG struct { @@ -1499,18 +1500,13 @@ func KeyctlRestrictKeyring(ringid int, keyType string, restriction string) error //sys keyctlRestrictKeyringByType(cmd int, arg2 int, keyType string, restriction string) (err error) = SYS_KEYCTL //sys keyctlRestrictKeyring(cmd int, arg2 int) (err error) = SYS_KEYCTL -func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { +func recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { var msg Msghdr msg.Name = (*byte)(unsafe.Pointer(rsa)) msg.Namelen = uint32(SizeofSockaddrAny) - var iov Iovec - if len(p) > 0 { - iov.Base = &p[0] - iov.SetLen(len(p)) - } var dummy byte if len(oob) > 0 { - if len(p) == 0 { + if emptyIovecs(iov) { var sockType int sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE) if err != nil { @@ -1518,15 +1514,19 @@ func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn } // receive at least one normal byte if sockType != SOCK_DGRAM { - iov.Base = &dummy - iov.SetLen(1) + var iova [1]Iovec + iova[0].Base = &dummy + iova[0].SetLen(1) + iov = iova[:] } } msg.Control = &oob[0] msg.SetControllen(len(oob)) } - msg.Iov = &iov - msg.Iovlen = 1 + if len(iov) > 0 { + msg.Iov = &iov[0] + msg.SetIovlen(len(iov)) + } if n, err = recvmsg(fd, &msg, flags); err != nil { return } @@ -1535,18 +1535,15 @@ func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn return } -func sendmsgN(fd int, p, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { +func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { var msg Msghdr msg.Name = (*byte)(ptr) msg.Namelen = uint32(salen) - var iov Iovec - if len(p) > 0 { - iov.Base = &p[0] - iov.SetLen(len(p)) - } var dummy byte + var empty bool if len(oob) > 0 { - if len(p) == 0 { + empty = emptyIovecs(iov) + if empty { var sockType int sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE) if err != nil { @@ -1554,19 +1551,22 @@ func sendmsgN(fd int, p, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags i } // send at least one normal byte if sockType != SOCK_DGRAM { - iov.Base = &dummy - iov.SetLen(1) + var iova [1]Iovec + iova[0].Base = &dummy + iova[0].SetLen(1) } } msg.Control = &oob[0] msg.SetControllen(len(oob)) } - msg.Iov = &iov - msg.Iovlen = 1 + if len(iov) > 0 { + msg.Iov = &iov[0] + msg.SetIovlen(len(iov)) + } if n, err = sendmsg(fd, &msg, flags); err != nil { return 0, err } - if len(oob) > 0 && len(p) == 0 { + if len(oob) > 0 && empty { n = 0 } return n, nil @@ -1829,6 +1829,9 @@ func Dup2(oldfd, newfd int) error { //sys Fremovexattr(fd int, attr string) (err error) //sys Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) //sys Fsync(fd int) (err error) +//sys Fsmount(fd int, flags int, mountAttrs int) (fsfd int, err error) +//sys Fsopen(fsName string, flags int) (fd int, err error) +//sys Fspick(dirfd int, pathName string, flags int) (fd int, err error) //sys Getdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64 //sysnb Getpgid(pid int) (pgid int, err error) @@ -1889,17 +1892,28 @@ func PrctlRetInt(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uint return int(ret), nil } -// issue 1435. -// On linux Setuid and Setgid only affects the current thread, not the process. -// This does not match what most callers expect so we must return an error -// here rather than letting the caller think that the call succeeded. - func Setuid(uid int) (err error) { - return EOPNOTSUPP + return syscall.Setuid(uid) } -func Setgid(uid int) (err error) { - return EOPNOTSUPP +func Setgid(gid int) (err error) { + return syscall.Setgid(gid) +} + +func Setreuid(ruid, euid int) (err error) { + return syscall.Setreuid(ruid, euid) +} + +func Setregid(rgid, egid int) (err error) { + return syscall.Setregid(rgid, egid) +} + +func Setresuid(ruid, euid, suid int) (err error) { + return syscall.Setresuid(ruid, euid, suid) +} + +func Setresgid(rgid, egid, sgid int) (err error) { + return syscall.Setresgid(rgid, egid, sgid) } // SetfsgidRetGid sets fsgid for current thread and returns previous fsgid set. @@ -2186,7 +2200,7 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { gid = Getgid() } - if uint32(gid) == st.Gid || isGroupMember(gid) { + if uint32(gid) == st.Gid || isGroupMember(int(st.Gid)) { fmode = (st.Mode >> 3) & 7 } else { fmode = st.Mode & 7 diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_386.go b/vendor/golang.org/x/sys/unix/syscall_linux_386.go index 518e476..ff5b589 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_386.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_386.go @@ -41,10 +41,6 @@ func setTimeval(sec, usec int64) Timeval { //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 //sys setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32 //sys setfsuid(uid int) (prev int, err error) = SYS_SETFSUID32 -//sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID32 -//sysnb Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32 -//sysnb Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32 -//sysnb Setreuid(ruid int, euid int) (err error) = SYS_SETREUID32 //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) //sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 //sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go index f5e9d6b..9b27035 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go @@ -46,11 +46,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys setfsgid(gid int) (prev int, err error) //sys setfsuid(uid int) (prev int, err error) -//sysnb Setregid(rgid int, egid int) (err error) -//sysnb Setresgid(rgid int, egid int, sgid int) (err error) -//sysnb Setresuid(ruid int, euid int, suid int) (err error) //sysnb Setrlimit(resource int, rlim *Rlimit) (err error) -//sysnb Setreuid(ruid int, euid int) (err error) //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go index c1a7778..856ad1d 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go @@ -62,10 +62,6 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT //sys setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32 //sys setfsuid(uid int) (prev int, err error) = SYS_SETFSUID32 -//sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID32 -//sysnb Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32 -//sysnb Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32 -//sysnb Setreuid(ruid int, euid int) (err error) = SYS_SETREUID32 //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) //sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go index d83e2c6..6422704 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go @@ -39,11 +39,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys setfsgid(gid int) (prev int, err error) //sys setfsuid(uid int) (prev int, err error) -//sysnb Setregid(rgid int, egid int) (err error) -//sysnb Setresgid(rgid int, egid int, sgid int) (err error) -//sysnb Setresuid(ruid int, euid int, suid int) (err error) //sysnb setrlimit(resource int, rlim *Rlimit) (err error) -//sysnb Setreuid(ruid int, euid int) (err error) //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go index 98a2660..bfef09a 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go @@ -37,11 +37,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys setfsgid(gid int) (prev int, err error) //sys setfsuid(uid int) (prev int, err error) -//sysnb Setregid(rgid int, egid int) (err error) -//sysnb Setresgid(rgid int, egid int, sgid int) (err error) -//sysnb Setresuid(ruid int, euid int, suid int) (err error) //sysnb Setrlimit(resource int, rlim *Rlimit) (err error) -//sysnb Setreuid(ruid int, euid int) (err error) //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) //sys Statfs(path string, buf *Statfs_t) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go index b8a18c0..ab30250 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go @@ -32,10 +32,6 @@ func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 //sys setfsgid(gid int) (prev int, err error) //sys setfsuid(uid int) (prev int, err error) -//sysnb Setregid(rgid int, egid int) (err error) -//sysnb Setresgid(rgid int, egid int, sgid int) (err error) -//sysnb Setresuid(ruid int, euid int, suid int) (err error) -//sysnb Setreuid(ruid int, euid int) (err error) //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) //sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go index 4ed9e67..eac1cf1 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go @@ -34,10 +34,6 @@ import ( //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 //sys setfsgid(gid int) (prev int, err error) //sys setfsuid(uid int) (prev int, err error) -//sysnb Setregid(rgid int, egid int) (err error) -//sysnb Setresgid(rgid int, egid int, sgid int) (err error) -//sysnb Setresuid(ruid int, euid int, suid int) (err error) -//sysnb Setreuid(ruid int, euid int) (err error) //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) //sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go index db63d38..4df5661 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go @@ -34,11 +34,7 @@ package unix //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys setfsgid(gid int) (prev int, err error) //sys setfsuid(uid int) (prev int, err error) -//sysnb Setregid(rgid int, egid int) (err error) -//sysnb Setresgid(rgid int, egid int, sgid int) (err error) -//sysnb Setresuid(ruid int, euid int, suid int) (err error) //sysnb Setrlimit(resource int, rlim *Rlimit) (err error) -//sysnb Setreuid(ruid int, euid int) (err error) //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) //sys Stat(path string, stat *Stat_t) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go index 8ff7adb..5f4243d 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go @@ -22,6 +22,7 @@ import "unsafe" //sysnb Getrlimit(resource int, rlim *Rlimit) (err error) //sysnb Getuid() (uid int) //sys Listen(s int, n int) (err error) +//sys MemfdSecret(flags int) (fd int, err error) //sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 //sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK @@ -37,11 +38,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys setfsgid(gid int) (prev int, err error) //sys setfsuid(uid int) (prev int, err error) -//sysnb Setregid(rgid int, egid int) (err error) -//sysnb Setresgid(rgid int, egid int, sgid int) (err error) -//sysnb Setresuid(ruid int, euid int, suid int) (err error) //sysnb Setrlimit(resource int, rlim *Rlimit) (err error) -//sysnb Setreuid(ruid int, euid int) (err error) //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go index 6fcf277..d0a7d40 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go @@ -34,11 +34,7 @@ import ( //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys setfsgid(gid int) (prev int, err error) //sys setfsuid(uid int) (prev int, err error) -//sysnb Setregid(rgid int, egid int) (err error) -//sysnb Setresgid(rgid int, egid int, sgid int) (err error) -//sysnb Setresuid(ruid int, euid int, suid int) (err error) //sysnb Setrlimit(resource int, rlim *Rlimit) (err error) -//sysnb Setreuid(ruid int, euid int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) //sys Stat(path string, stat *Stat_t) (err error) //sys Statfs(path string, buf *Statfs_t) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go index 02a45d9..f5c793b 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go @@ -31,11 +31,7 @@ package unix //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys setfsgid(gid int) (prev int, err error) //sys setfsuid(uid int) (prev int, err error) -//sysnb Setregid(rgid int, egid int) (err error) -//sysnb Setresgid(rgid int, egid int, sgid int) (err error) -//sysnb Setresuid(ruid int, euid int, suid int) (err error) //sysnb Setrlimit(resource int, rlim *Rlimit) (err error) -//sysnb Setreuid(ruid int, euid int) (err error) //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) //sys Stat(path string, stat *Stat_t) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/vendor/golang.org/x/sys/unix/syscall_openbsd.go index 15d637d..78daceb 100644 --- a/vendor/golang.org/x/sys/unix/syscall_openbsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd.go @@ -81,6 +81,7 @@ func Pipe(p []int) (err error) { } //sysnb pipe2(p *[2]_C_int, flags int) (err error) + func Pipe2(p []int, flags int) error { if len(p) != 2 { return EINVAL @@ -95,6 +96,7 @@ func Pipe2(p []int, flags int) error { } //sys Getdents(fd int, buf []byte) (n int, err error) + func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { n, err = Getdents(fd, buf) if err != nil || basep == nil { diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go index 30f2853..1378489 100644 --- a/vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go @@ -26,6 +26,10 @@ func (msghdr *Msghdr) SetControllen(length int) { msghdr.Controllen = uint32(length) } +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = uint32(length) +} + func (cmsg *Cmsghdr) SetLen(length int) { cmsg.Len = uint32(length) } diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go index 5c2003c..8c6f409 100644 --- a/vendor/golang.org/x/sys/unix/syscall_solaris.go +++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go @@ -451,26 +451,25 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) { //sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_recvmsg -func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { +func recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { var msg Msghdr msg.Name = (*byte)(unsafe.Pointer(rsa)) msg.Namelen = uint32(SizeofSockaddrAny) - var iov Iovec - if len(p) > 0 { - iov.Base = (*int8)(unsafe.Pointer(&p[0])) - iov.SetLen(len(p)) - } - var dummy int8 + var dummy byte if len(oob) > 0 { // receive at least one normal byte - if len(p) == 0 { - iov.Base = &dummy - iov.SetLen(1) + if emptyIovecs(iov) { + var iova [1]Iovec + iova[0].Base = &dummy + iova[0].SetLen(1) + iov = iova[:] } msg.Accrightslen = int32(len(oob)) } - msg.Iov = &iov - msg.Iovlen = 1 + if len(iov) > 0 { + msg.Iov = &iov[0] + msg.SetIovlen(len(iov)) + } if n, err = recvmsg(fd, &msg, flags); n == -1 { return } @@ -480,30 +479,31 @@ func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_sendmsg -func sendmsgN(fd int, p, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { +func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { var msg Msghdr msg.Name = (*byte)(unsafe.Pointer(ptr)) msg.Namelen = uint32(salen) - var iov Iovec - if len(p) > 0 { - iov.Base = (*int8)(unsafe.Pointer(&p[0])) - iov.SetLen(len(p)) - } - var dummy int8 + var dummy byte + var empty bool if len(oob) > 0 { // send at least one normal byte - if len(p) == 0 { - iov.Base = &dummy - iov.SetLen(1) + empty = emptyIovecs(iov) + if empty { + var iova [1]Iovec + iova[0].Base = &dummy + iova[0].SetLen(1) + iov = iova[:] } msg.Accrightslen = int32(len(oob)) } - msg.Iov = &iov - msg.Iovlen = 1 + if len(iov) > 0 { + msg.Iov = &iov[0] + msg.SetIovlen(len(iov)) + } if n, err = sendmsg(fd, &msg, flags); err != nil { return 0, err } - if len(oob) > 0 && len(p) == 0 { + if len(oob) > 0 && empty { n = 0 } return n, nil @@ -618,6 +618,7 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e //sys Getpriority(which int, who int) (n int, err error) //sysnb Getrlimit(which int, lim *Rlimit) (err error) //sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) //sysnb Gettimeofday(tv *Timeval) (err error) //sysnb Getuid() (uid int) //sys Kill(pid int, signum syscall.Signal) (err error) @@ -749,8 +750,8 @@ type EventPort struct { // we should handle things gracefully. To do so, we need to keep an extra // reference to the cookie around until the event is processed // thus the otherwise seemingly extraneous "cookies" map - // The key of this map is a pointer to the corresponding &fCookie.cookie - cookies map[*interface{}]*fileObjCookie + // The key of this map is a pointer to the corresponding fCookie + cookies map[*fileObjCookie]struct{} } // PortEvent is an abstraction of the port_event C struct. @@ -777,7 +778,7 @@ func NewEventPort() (*EventPort, error) { port: port, fds: make(map[uintptr]*fileObjCookie), paths: make(map[string]*fileObjCookie), - cookies: make(map[*interface{}]*fileObjCookie), + cookies: make(map[*fileObjCookie]struct{}), } return e, nil } @@ -798,6 +799,7 @@ func (e *EventPort) Close() error { } e.fds = nil e.paths = nil + e.cookies = nil return nil } @@ -825,17 +827,16 @@ func (e *EventPort) AssociatePath(path string, stat os.FileInfo, events int, coo if _, found := e.paths[path]; found { return fmt.Errorf("%v is already associated with this Event Port", path) } - fobj, err := createFileObj(path, stat) + fCookie, err := createFileObjCookie(path, stat, cookie) if err != nil { return err } - fCookie := &fileObjCookie{fobj, cookie} - _, err = port_associate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(fobj)), events, (*byte)(unsafe.Pointer(&fCookie.cookie))) + _, err = port_associate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(fCookie.fobj)), events, (*byte)(unsafe.Pointer(fCookie))) if err != nil { return err } e.paths[path] = fCookie - e.cookies[&fCookie.cookie] = fCookie + e.cookies[fCookie] = struct{}{} return nil } @@ -857,7 +858,7 @@ func (e *EventPort) DissociatePath(path string) error { if err == nil { // dissociate was successful, safe to delete the cookie fCookie := e.paths[path] - delete(e.cookies, &fCookie.cookie) + delete(e.cookies, fCookie) } delete(e.paths, path) return err @@ -870,13 +871,16 @@ func (e *EventPort) AssociateFd(fd uintptr, events int, cookie interface{}) erro if _, found := e.fds[fd]; found { return fmt.Errorf("%v is already associated with this Event Port", fd) } - fCookie := &fileObjCookie{nil, cookie} - _, err := port_associate(e.port, PORT_SOURCE_FD, fd, events, (*byte)(unsafe.Pointer(&fCookie.cookie))) + fCookie, err := createFileObjCookie("", nil, cookie) + if err != nil { + return err + } + _, err = port_associate(e.port, PORT_SOURCE_FD, fd, events, (*byte)(unsafe.Pointer(fCookie))) if err != nil { return err } e.fds[fd] = fCookie - e.cookies[&fCookie.cookie] = fCookie + e.cookies[fCookie] = struct{}{} return nil } @@ -895,27 +899,31 @@ func (e *EventPort) DissociateFd(fd uintptr) error { if err == nil { // dissociate was successful, safe to delete the cookie fCookie := e.fds[fd] - delete(e.cookies, &fCookie.cookie) + delete(e.cookies, fCookie) } delete(e.fds, fd) return err } -func createFileObj(name string, stat os.FileInfo) (*fileObj, error) { - fobj := new(fileObj) - bs, err := ByteSliceFromString(name) - if err != nil { - return nil, err +func createFileObjCookie(name string, stat os.FileInfo, cookie interface{}) (*fileObjCookie, error) { + fCookie := new(fileObjCookie) + fCookie.cookie = cookie + if name != "" && stat != nil { + fCookie.fobj = new(fileObj) + bs, err := ByteSliceFromString(name) + if err != nil { + return nil, err + } + fCookie.fobj.Name = (*int8)(unsafe.Pointer(&bs[0])) + s := stat.Sys().(*syscall.Stat_t) + fCookie.fobj.Atim.Sec = s.Atim.Sec + fCookie.fobj.Atim.Nsec = s.Atim.Nsec + fCookie.fobj.Mtim.Sec = s.Mtim.Sec + fCookie.fobj.Mtim.Nsec = s.Mtim.Nsec + fCookie.fobj.Ctim.Sec = s.Ctim.Sec + fCookie.fobj.Ctim.Nsec = s.Ctim.Nsec } - fobj.Name = (*int8)(unsafe.Pointer(&bs[0])) - s := stat.Sys().(*syscall.Stat_t) - fobj.Atim.Sec = s.Atim.Sec - fobj.Atim.Nsec = s.Atim.Nsec - fobj.Mtim.Sec = s.Mtim.Sec - fobj.Mtim.Nsec = s.Mtim.Nsec - fobj.Ctim.Sec = s.Ctim.Sec - fobj.Ctim.Nsec = s.Ctim.Nsec - return fobj, nil + return fCookie, nil } // GetOne wraps port_get(3c) and returns a single PortEvent. @@ -928,44 +936,50 @@ func (e *EventPort) GetOne(t *Timespec) (*PortEvent, error) { p := new(PortEvent) e.mu.Lock() defer e.mu.Unlock() - e.peIntToExt(pe, p) + err = e.peIntToExt(pe, p) + if err != nil { + return nil, err + } return p, nil } // peIntToExt converts a cgo portEvent struct into the friendlier PortEvent // NOTE: Always call this function while holding the e.mu mutex -func (e *EventPort) peIntToExt(peInt *portEvent, peExt *PortEvent) { +func (e *EventPort) peIntToExt(peInt *portEvent, peExt *PortEvent) error { + if e.cookies == nil { + return fmt.Errorf("this EventPort is already closed") + } peExt.Events = peInt.Events peExt.Source = peInt.Source - cookie := (*interface{})(unsafe.Pointer(peInt.User)) - peExt.Cookie = *cookie + fCookie := (*fileObjCookie)(unsafe.Pointer(peInt.User)) + _, found := e.cookies[fCookie] + + if !found { + panic("unexpected event port address; may be due to kernel bug; see https://go.dev/issue/54254") + } + peExt.Cookie = fCookie.cookie + delete(e.cookies, fCookie) + switch peInt.Source { case PORT_SOURCE_FD: - delete(e.cookies, cookie) peExt.Fd = uintptr(peInt.Object) // Only remove the fds entry if it exists and this cookie matches if fobj, ok := e.fds[peExt.Fd]; ok { - if &fobj.cookie == cookie { + if fobj == fCookie { delete(e.fds, peExt.Fd) } } case PORT_SOURCE_FILE: - if fCookie, ok := e.cookies[cookie]; ok && uintptr(unsafe.Pointer(fCookie.fobj)) == uintptr(peInt.Object) { - // Use our stashed reference rather than using unsafe on what we got back - // the unsafe version would be (*fileObj)(unsafe.Pointer(uintptr(peInt.Object))) - peExt.fobj = fCookie.fobj - } else { - panic("mismanaged memory") - } - delete(e.cookies, cookie) + peExt.fobj = fCookie.fobj peExt.Path = BytePtrToString((*byte)(unsafe.Pointer(peExt.fobj.Name))) // Only remove the paths entry if it exists and this cookie matches if fobj, ok := e.paths[peExt.Path]; ok { - if &fobj.cookie == cookie { + if fobj == fCookie { delete(e.paths, peExt.Path) } } } + return nil } // Pending wraps port_getn(3c) and returns how many events are pending. @@ -989,7 +1003,7 @@ func (e *EventPort) Get(s []PortEvent, min int, timeout *Timespec) (int, error) got := uint32(min) max := uint32(len(s)) var err error - ps := make([]portEvent, max, max) + ps := make([]portEvent, max) _, err = port_getn(e.port, &ps[0], max, &got, timeout) // got will be trustworthy with ETIME, but not any other error. if err != nil && err != ETIME { @@ -997,8 +1011,18 @@ func (e *EventPort) Get(s []PortEvent, min int, timeout *Timespec) (int, error) } e.mu.Lock() defer e.mu.Unlock() + valid := 0 for i := 0; i < int(got); i++ { - e.peIntToExt(&ps[i], &s[i]) + err2 := e.peIntToExt(&ps[i], &s[i]) + if err2 != nil { + if valid == 0 && err == nil { + // If err2 is the only error and there are no valid events + // to return, return it to the caller. + err = err2 + } + break + } + valid = i + 1 } - return int(got), err + return valid, err } diff --git a/vendor/golang.org/x/sys/unix/syscall_unix.go b/vendor/golang.org/x/sys/unix/syscall_unix.go index 70508af..9f75356 100644 --- a/vendor/golang.org/x/sys/unix/syscall_unix.go +++ b/vendor/golang.org/x/sys/unix/syscall_unix.go @@ -13,8 +13,6 @@ import ( "sync" "syscall" "unsafe" - - "golang.org/x/sys/internal/unsafeheader" ) var ( @@ -117,11 +115,7 @@ func (m *mmapper) Mmap(fd int, offset int64, length int, prot int, flags int) (d } // Use unsafe to convert addr into a []byte. - var b []byte - hdr := (*unsafeheader.Slice)(unsafe.Pointer(&b)) - hdr.Data = unsafe.Pointer(addr) - hdr.Cap = length - hdr.Len = length + b := unsafe.Slice((*byte)(unsafe.Pointer(addr)), length) // Register mapping in m and return it. p := &b[cap(b)-1] @@ -338,8 +332,13 @@ func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) { } func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { + var iov [1]Iovec + if len(p) > 0 { + iov[0].Base = &p[0] + iov[0].SetLen(len(p)) + } var rsa RawSockaddrAny - n, oobn, recvflags, err = recvmsgRaw(fd, p, oob, flags, &rsa) + n, oobn, recvflags, err = recvmsgRaw(fd, iov[:], oob, flags, &rsa) // source address is only specified if the socket is unconnected if rsa.Addr.Family != AF_UNSPEC { from, err = anyToSockaddr(fd, &rsa) @@ -347,12 +346,42 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from return } +// RecvmsgBuffers receives a message from a socket using the recvmsg +// system call. The flags are passed to recvmsg. Any non-control data +// read is scattered into the buffers slices. The results are: +// - n is the number of non-control data read into bufs +// - oobn is the number of control data read into oob; this may be interpreted using [ParseSocketControlMessage] +// - recvflags is flags returned by recvmsg +// - from is the address of the sender +func RecvmsgBuffers(fd int, buffers [][]byte, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { + iov := make([]Iovec, len(buffers)) + for i := range buffers { + if len(buffers[i]) > 0 { + iov[i].Base = &buffers[i][0] + iov[i].SetLen(len(buffers[i])) + } else { + iov[i].Base = (*byte)(unsafe.Pointer(&_zero)) + } + } + var rsa RawSockaddrAny + n, oobn, recvflags, err = recvmsgRaw(fd, iov, oob, flags, &rsa) + if err == nil && rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(fd, &rsa) + } + return +} + func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { _, err = SendmsgN(fd, p, oob, to, flags) return } func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { + var iov [1]Iovec + if len(p) > 0 { + iov[0].Base = &p[0] + iov[0].SetLen(len(p)) + } var ptr unsafe.Pointer var salen _Socklen if to != nil { @@ -361,7 +390,32 @@ func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) return 0, err } } - return sendmsgN(fd, p, oob, ptr, salen, flags) + return sendmsgN(fd, iov[:], oob, ptr, salen, flags) +} + +// SendmsgBuffers sends a message on a socket to an address using the sendmsg +// system call. The flags are passed to sendmsg. Any non-control data written +// is gathered from buffers. The function returns the number of bytes written +// to the socket. +func SendmsgBuffers(fd int, buffers [][]byte, oob []byte, to Sockaddr, flags int) (n int, err error) { + iov := make([]Iovec, len(buffers)) + for i := range buffers { + if len(buffers[i]) > 0 { + iov[i].Base = &buffers[i][0] + iov[i].SetLen(len(buffers[i])) + } else { + iov[i].Base = (*byte)(unsafe.Pointer(&_zero)) + } + } + var ptr unsafe.Pointer + var salen _Socklen + if to != nil { + ptr, salen, err = to.sockaddr() + if err != nil { + return 0, err + } + } + return sendmsgN(fd, iov, oob, ptr, salen, flags) } func Send(s int, buf []byte, flags int) (err error) { @@ -484,3 +538,13 @@ func Lutimes(path string, tv []Timeval) error { } return UtimesNanoAt(AT_FDCWD, path, ts, AT_SYMLINK_NOFOLLOW) } + +// emptyIovec reports whether there are no bytes in the slice of Iovec. +func emptyIovecs(iov []Iovec) bool { + for i := range iov { + if iov[i].Len > 0 { + return false + } + } + return true +} diff --git a/vendor/golang.org/x/sys/unix/sysvshm_unix.go b/vendor/golang.org/x/sys/unix/sysvshm_unix.go index 0bb4c8d..5bb41d1 100644 --- a/vendor/golang.org/x/sys/unix/sysvshm_unix.go +++ b/vendor/golang.org/x/sys/unix/sysvshm_unix.go @@ -7,11 +7,7 @@ package unix -import ( - "unsafe" - - "golang.org/x/sys/internal/unsafeheader" -) +import "unsafe" // SysvShmAttach attaches the Sysv shared memory segment associated with the // shared memory identifier id. @@ -34,12 +30,7 @@ func SysvShmAttach(id int, addr uintptr, flag int) ([]byte, error) { } // Use unsafe to convert addr into a []byte. - // TODO: convert to unsafe.Slice once we can assume Go 1.17 - var b []byte - hdr := (*unsafeheader.Slice)(unsafe.Pointer(&b)) - hdr.Data = unsafe.Pointer(addr) - hdr.Cap = int(info.Segsz) - hdr.Len = int(info.Segsz) + b := unsafe.Slice((*byte)(unsafe.Pointer(addr)), int(info.Segsz)) return b, nil } diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go index 4409001..f8c2c51 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go +++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go @@ -151,6 +151,7 @@ const ( BIOCSETF = 0x80084267 BIOCSETFNR = 0x80084282 BIOCSETIF = 0x8020426c + BIOCSETVLANPCP = 0x80044285 BIOCSETWF = 0x8008427b BIOCSETZBUF = 0x800c4281 BIOCSHDRCMPLT = 0x80044275 @@ -447,7 +448,7 @@ const ( DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 DLT_INFINIBAND = 0xf7 DLT_IPFILTER = 0x74 - DLT_IPMB = 0xc7 + DLT_IPMB_KONTRON = 0xc7 DLT_IPMB_LINUX = 0xd1 DLT_IPMI_HPM_2 = 0x104 DLT_IPNET = 0xe2 @@ -487,10 +488,11 @@ const ( DLT_LINUX_LAPD = 0xb1 DLT_LINUX_PPP_WITHDIRECTION = 0xa6 DLT_LINUX_SLL = 0x71 + DLT_LINUX_SLL2 = 0x114 DLT_LOOP = 0x6c DLT_LORATAP = 0x10e DLT_LTALK = 0x72 - DLT_MATCHING_MAX = 0x113 + DLT_MATCHING_MAX = 0x114 DLT_MATCHING_MIN = 0x68 DLT_MFR = 0xb6 DLT_MOST = 0xd3 @@ -734,6 +736,7 @@ const ( IPPROTO_CMTP = 0x26 IPPROTO_CPHB = 0x49 IPPROTO_CPNX = 0x48 + IPPROTO_DCCP = 0x21 IPPROTO_DDP = 0x25 IPPROTO_DGP = 0x56 IPPROTO_DIVERT = 0x102 @@ -814,7 +817,6 @@ const ( IPPROTO_SCTP = 0x84 IPPROTO_SDRP = 0x2a IPPROTO_SEND = 0x103 - IPPROTO_SEP = 0x21 IPPROTO_SHIM6 = 0x8c IPPROTO_SKIP = 0x39 IPPROTO_SPACER = 0x7fff @@ -911,6 +913,7 @@ const ( IPV6_V6ONLY = 0x1b IPV6_VERSION = 0x60 IPV6_VERSION_MASK = 0xf0 + IPV6_VLAN_PCP = 0x4b IP_ADD_MEMBERSHIP = 0xc IP_ADD_SOURCE_MEMBERSHIP = 0x46 IP_BINDANY = 0x18 @@ -989,8 +992,12 @@ const ( IP_TOS = 0x3 IP_TTL = 0x4 IP_UNBLOCK_SOURCE = 0x49 + IP_VLAN_PCP = 0x4b ISIG = 0x80 ISTRIP = 0x20 + ITIMER_PROF = 0x2 + ITIMER_REAL = 0x0 + ITIMER_VIRTUAL = 0x1 IXANY = 0x800 IXOFF = 0x400 IXON = 0x200 @@ -1000,7 +1007,6 @@ const ( KERN_VERSION = 0x4 LOCAL_CONNWAIT = 0x4 LOCAL_CREDS = 0x2 - LOCAL_CREDS_PERSISTENT = 0x3 LOCAL_PEERCRED = 0x1 LOCAL_VENDOR = 0x80000000 LOCK_EX = 0x2 @@ -1179,6 +1185,8 @@ const ( O_NONBLOCK = 0x4 O_RDONLY = 0x0 O_RDWR = 0x2 + O_RESOLVE_BENEATH = 0x800000 + O_SEARCH = 0x40000 O_SHLOCK = 0x10 O_SYNC = 0x80 O_TRUNC = 0x400 @@ -1189,6 +1197,10 @@ const ( PARMRK = 0x8 PARODD = 0x2000 PENDIN = 0x20000000 + PIOD_READ_D = 0x1 + PIOD_READ_I = 0x3 + PIOD_WRITE_D = 0x2 + PIOD_WRITE_I = 0x4 PRIO_PGRP = 0x1 PRIO_PROCESS = 0x0 PRIO_USER = 0x2 @@ -1196,6 +1208,60 @@ const ( PROT_NONE = 0x0 PROT_READ = 0x1 PROT_WRITE = 0x2 + PTRACE_DEFAULT = 0x1 + PTRACE_EXEC = 0x1 + PTRACE_FORK = 0x8 + PTRACE_LWP = 0x10 + PTRACE_SCE = 0x2 + PTRACE_SCX = 0x4 + PTRACE_SYSCALL = 0x6 + PTRACE_VFORK = 0x20 + PT_ATTACH = 0xa + PT_CLEARSTEP = 0x10 + PT_CONTINUE = 0x7 + PT_DETACH = 0xb + PT_FIRSTMACH = 0x40 + PT_FOLLOW_FORK = 0x17 + PT_GETDBREGS = 0x25 + PT_GETFPREGS = 0x23 + PT_GETFSBASE = 0x47 + PT_GETGSBASE = 0x49 + PT_GETLWPLIST = 0xf + PT_GETNUMLWPS = 0xe + PT_GETREGS = 0x21 + PT_GETXMMREGS = 0x40 + PT_GETXSTATE = 0x45 + PT_GETXSTATE_INFO = 0x44 + PT_GET_EVENT_MASK = 0x19 + PT_GET_SC_ARGS = 0x1b + PT_GET_SC_RET = 0x1c + PT_IO = 0xc + PT_KILL = 0x8 + PT_LWPINFO = 0xd + PT_LWP_EVENTS = 0x18 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_RESUME = 0x13 + PT_SETDBREGS = 0x26 + PT_SETFPREGS = 0x24 + PT_SETFSBASE = 0x48 + PT_SETGSBASE = 0x4a + PT_SETREGS = 0x22 + PT_SETSTEP = 0x11 + PT_SETXMMREGS = 0x41 + PT_SETXSTATE = 0x46 + PT_SET_EVENT_MASK = 0x1a + PT_STEP = 0x9 + PT_SUSPEND = 0x12 + PT_SYSCALL = 0x16 + PT_TO_SCE = 0x14 + PT_TO_SCX = 0x15 + PT_TRACE_ME = 0x0 + PT_VM_ENTRY = 0x29 + PT_VM_TIMESTAMP = 0x28 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + P_ZONEID = 0xc RLIMIT_AS = 0xa RLIMIT_CORE = 0x4 RLIMIT_CPU = 0x0 @@ -1320,10 +1386,12 @@ const ( SIOCGHWADDR = 0xc020693e SIOCGI2C = 0xc020693d SIOCGIFADDR = 0xc0206921 + SIOCGIFALIAS = 0xc044692d SIOCGIFBRDADDR = 0xc0206923 SIOCGIFCAP = 0xc020691f SIOCGIFCONF = 0xc0086924 SIOCGIFDESCR = 0xc020692a + SIOCGIFDOWNREASON = 0xc058699a SIOCGIFDSTADDR = 0xc0206922 SIOCGIFFIB = 0xc020695c SIOCGIFFLAGS = 0xc0206911 @@ -1414,6 +1482,7 @@ const ( SO_RCVBUF = 0x1002 SO_RCVLOWAT = 0x1004 SO_RCVTIMEO = 0x1006 + SO_RERROR = 0x20000 SO_REUSEADDR = 0x4 SO_REUSEPORT = 0x200 SO_REUSEPORT_LB = 0x10000 @@ -1472,22 +1541,40 @@ const ( TCOFLUSH = 0x2 TCOOFF = 0x1 TCOON = 0x2 + TCPOPT_EOL = 0x0 + TCPOPT_FAST_OPEN = 0x22 + TCPOPT_MAXSEG = 0x2 + TCPOPT_NOP = 0x1 + TCPOPT_PAD = 0x0 + TCPOPT_SACK = 0x5 + TCPOPT_SACK_PERMITTED = 0x4 + TCPOPT_SIGNATURE = 0x13 + TCPOPT_TIMESTAMP = 0x8 + TCPOPT_WINDOW = 0x3 TCP_BBR_ACK_COMP_ALG = 0x448 + TCP_BBR_ALGORITHM = 0x43b TCP_BBR_DRAIN_INC_EXTRA = 0x43c TCP_BBR_DRAIN_PG = 0x42e TCP_BBR_EXTRA_GAIN = 0x449 + TCP_BBR_EXTRA_STATE = 0x453 + TCP_BBR_FLOOR_MIN_TSO = 0x454 + TCP_BBR_HDWR_PACE = 0x451 + TCP_BBR_HOLD_TARGET = 0x436 TCP_BBR_IWINTSO = 0x42b TCP_BBR_LOWGAIN_FD = 0x436 TCP_BBR_LOWGAIN_HALF = 0x435 TCP_BBR_LOWGAIN_THRESH = 0x434 TCP_BBR_MAX_RTO = 0x439 TCP_BBR_MIN_RTO = 0x438 + TCP_BBR_MIN_TOPACEOUT = 0x455 TCP_BBR_ONE_RETRAN = 0x431 TCP_BBR_PACE_CROSS = 0x442 TCP_BBR_PACE_DEL_TAR = 0x43f + TCP_BBR_PACE_OH = 0x435 TCP_BBR_PACE_PER_SEC = 0x43e TCP_BBR_PACE_SEG_MAX = 0x440 TCP_BBR_PACE_SEG_MIN = 0x441 + TCP_BBR_POLICER_DETECT = 0x457 TCP_BBR_PROBE_RTT_GAIN = 0x44d TCP_BBR_PROBE_RTT_INT = 0x430 TCP_BBR_PROBE_RTT_LEN = 0x44e @@ -1496,12 +1583,18 @@ const ( TCP_BBR_REC_OVER_HPTS = 0x43a TCP_BBR_RETRAN_WTSO = 0x44b TCP_BBR_RWND_IS_APP = 0x42f + TCP_BBR_SEND_IWND_IN_TSO = 0x44f TCP_BBR_STARTUP_EXIT_EPOCH = 0x43d TCP_BBR_STARTUP_LOSS_EXIT = 0x432 TCP_BBR_STARTUP_PG = 0x42d + TCP_BBR_TMR_PACE_OH = 0x448 + TCP_BBR_TSLIMITS = 0x434 + TCP_BBR_TSTMP_RAISES = 0x456 TCP_BBR_UNLIMITED = 0x43b TCP_BBR_USEDEL_RATE = 0x437 TCP_BBR_USE_LOWGAIN = 0x433 + TCP_BBR_USE_RACK_CHEAT = 0x450 + TCP_BBR_UTTER_MAX_TSO = 0x452 TCP_CA_NAME_MAX = 0x10 TCP_CCALGOOPT = 0x41 TCP_CONGESTION = 0x40 @@ -1541,6 +1634,7 @@ const ( TCP_PCAP_OUT = 0x800 TCP_RACK_EARLY_RECOV = 0x423 TCP_RACK_EARLY_SEG = 0x424 + TCP_RACK_GP_INCREASE = 0x446 TCP_RACK_IDLE_REDUCE_HIGH = 0x444 TCP_RACK_MIN_PACE = 0x445 TCP_RACK_MIN_PACE_SEG = 0x446 @@ -1554,7 +1648,6 @@ const ( TCP_RACK_PRR_SENDALOT = 0x421 TCP_RACK_REORD_FADE = 0x426 TCP_RACK_REORD_THRESH = 0x425 - TCP_RACK_SESS_CWV = 0x42a TCP_RACK_TLP_INC_VAR = 0x429 TCP_RACK_TLP_REDUCE = 0x41c TCP_RACK_TLP_THRESH = 0x427 @@ -1694,12 +1787,13 @@ const ( EIDRM = syscall.Errno(0x52) EILSEQ = syscall.Errno(0x56) EINPROGRESS = syscall.Errno(0x24) + EINTEGRITY = syscall.Errno(0x61) EINTR = syscall.Errno(0x4) EINVAL = syscall.Errno(0x16) EIO = syscall.Errno(0x5) EISCONN = syscall.Errno(0x38) EISDIR = syscall.Errno(0x15) - ELAST = syscall.Errno(0x60) + ELAST = syscall.Errno(0x61) ELOOP = syscall.Errno(0x3e) EMFILE = syscall.Errno(0x18) EMLINK = syscall.Errno(0x1f) @@ -1842,7 +1936,7 @@ var errorList = [...]struct { {32, "EPIPE", "broken pipe"}, {33, "EDOM", "numerical argument out of domain"}, {34, "ERANGE", "result too large"}, - {35, "EAGAIN", "resource temporarily unavailable"}, + {35, "EWOULDBLOCK", "resource temporarily unavailable"}, {36, "EINPROGRESS", "operation now in progress"}, {37, "EALREADY", "operation already in progress"}, {38, "ENOTSOCK", "socket operation on non-socket"}, @@ -1904,6 +1998,7 @@ var errorList = [...]struct { {94, "ECAPMODE", "not permitted in capability mode"}, {95, "ENOTRECOVERABLE", "state not recoverable"}, {96, "EOWNERDEAD", "previous owner died"}, + {97, "EINTEGRITY", "integrity check failed"}, } // Signal table diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go index 64520d3..96310c3 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go @@ -151,6 +151,7 @@ const ( BIOCSETF = 0x80104267 BIOCSETFNR = 0x80104282 BIOCSETIF = 0x8020426c + BIOCSETVLANPCP = 0x80044285 BIOCSETWF = 0x8010427b BIOCSETZBUF = 0x80184281 BIOCSHDRCMPLT = 0x80044275 @@ -447,7 +448,7 @@ const ( DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 DLT_INFINIBAND = 0xf7 DLT_IPFILTER = 0x74 - DLT_IPMB = 0xc7 + DLT_IPMB_KONTRON = 0xc7 DLT_IPMB_LINUX = 0xd1 DLT_IPMI_HPM_2 = 0x104 DLT_IPNET = 0xe2 @@ -487,10 +488,11 @@ const ( DLT_LINUX_LAPD = 0xb1 DLT_LINUX_PPP_WITHDIRECTION = 0xa6 DLT_LINUX_SLL = 0x71 + DLT_LINUX_SLL2 = 0x114 DLT_LOOP = 0x6c DLT_LORATAP = 0x10e DLT_LTALK = 0x72 - DLT_MATCHING_MAX = 0x113 + DLT_MATCHING_MAX = 0x114 DLT_MATCHING_MIN = 0x68 DLT_MFR = 0xb6 DLT_MOST = 0xd3 @@ -734,6 +736,7 @@ const ( IPPROTO_CMTP = 0x26 IPPROTO_CPHB = 0x49 IPPROTO_CPNX = 0x48 + IPPROTO_DCCP = 0x21 IPPROTO_DDP = 0x25 IPPROTO_DGP = 0x56 IPPROTO_DIVERT = 0x102 @@ -814,7 +817,6 @@ const ( IPPROTO_SCTP = 0x84 IPPROTO_SDRP = 0x2a IPPROTO_SEND = 0x103 - IPPROTO_SEP = 0x21 IPPROTO_SHIM6 = 0x8c IPPROTO_SKIP = 0x39 IPPROTO_SPACER = 0x7fff @@ -911,6 +913,7 @@ const ( IPV6_V6ONLY = 0x1b IPV6_VERSION = 0x60 IPV6_VERSION_MASK = 0xf0 + IPV6_VLAN_PCP = 0x4b IP_ADD_MEMBERSHIP = 0xc IP_ADD_SOURCE_MEMBERSHIP = 0x46 IP_BINDANY = 0x18 @@ -989,8 +992,12 @@ const ( IP_TOS = 0x3 IP_TTL = 0x4 IP_UNBLOCK_SOURCE = 0x49 + IP_VLAN_PCP = 0x4b ISIG = 0x80 ISTRIP = 0x20 + ITIMER_PROF = 0x2 + ITIMER_REAL = 0x0 + ITIMER_VIRTUAL = 0x1 IXANY = 0x800 IXOFF = 0x400 IXON = 0x200 @@ -1000,7 +1007,6 @@ const ( KERN_VERSION = 0x4 LOCAL_CONNWAIT = 0x4 LOCAL_CREDS = 0x2 - LOCAL_CREDS_PERSISTENT = 0x3 LOCAL_PEERCRED = 0x1 LOCAL_VENDOR = 0x80000000 LOCK_EX = 0x2 @@ -1180,6 +1186,8 @@ const ( O_NONBLOCK = 0x4 O_RDONLY = 0x0 O_RDWR = 0x2 + O_RESOLVE_BENEATH = 0x800000 + O_SEARCH = 0x40000 O_SHLOCK = 0x10 O_SYNC = 0x80 O_TRUNC = 0x400 @@ -1190,6 +1198,10 @@ const ( PARMRK = 0x8 PARODD = 0x2000 PENDIN = 0x20000000 + PIOD_READ_D = 0x1 + PIOD_READ_I = 0x3 + PIOD_WRITE_D = 0x2 + PIOD_WRITE_I = 0x4 PRIO_PGRP = 0x1 PRIO_PROCESS = 0x0 PRIO_USER = 0x2 @@ -1197,6 +1209,58 @@ const ( PROT_NONE = 0x0 PROT_READ = 0x1 PROT_WRITE = 0x2 + PTRACE_DEFAULT = 0x1 + PTRACE_EXEC = 0x1 + PTRACE_FORK = 0x8 + PTRACE_LWP = 0x10 + PTRACE_SCE = 0x2 + PTRACE_SCX = 0x4 + PTRACE_SYSCALL = 0x6 + PTRACE_VFORK = 0x20 + PT_ATTACH = 0xa + PT_CLEARSTEP = 0x10 + PT_CONTINUE = 0x7 + PT_DETACH = 0xb + PT_FIRSTMACH = 0x40 + PT_FOLLOW_FORK = 0x17 + PT_GETDBREGS = 0x25 + PT_GETFPREGS = 0x23 + PT_GETFSBASE = 0x47 + PT_GETGSBASE = 0x49 + PT_GETLWPLIST = 0xf + PT_GETNUMLWPS = 0xe + PT_GETREGS = 0x21 + PT_GETXSTATE = 0x45 + PT_GETXSTATE_INFO = 0x44 + PT_GET_EVENT_MASK = 0x19 + PT_GET_SC_ARGS = 0x1b + PT_GET_SC_RET = 0x1c + PT_IO = 0xc + PT_KILL = 0x8 + PT_LWPINFO = 0xd + PT_LWP_EVENTS = 0x18 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_RESUME = 0x13 + PT_SETDBREGS = 0x26 + PT_SETFPREGS = 0x24 + PT_SETFSBASE = 0x48 + PT_SETGSBASE = 0x4a + PT_SETREGS = 0x22 + PT_SETSTEP = 0x11 + PT_SETXSTATE = 0x46 + PT_SET_EVENT_MASK = 0x1a + PT_STEP = 0x9 + PT_SUSPEND = 0x12 + PT_SYSCALL = 0x16 + PT_TO_SCE = 0x14 + PT_TO_SCX = 0x15 + PT_TRACE_ME = 0x0 + PT_VM_ENTRY = 0x29 + PT_VM_TIMESTAMP = 0x28 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + P_ZONEID = 0xc RLIMIT_AS = 0xa RLIMIT_CORE = 0x4 RLIMIT_CPU = 0x0 @@ -1321,10 +1385,12 @@ const ( SIOCGHWADDR = 0xc020693e SIOCGI2C = 0xc020693d SIOCGIFADDR = 0xc0206921 + SIOCGIFALIAS = 0xc044692d SIOCGIFBRDADDR = 0xc0206923 SIOCGIFCAP = 0xc020691f SIOCGIFCONF = 0xc0106924 SIOCGIFDESCR = 0xc020692a + SIOCGIFDOWNREASON = 0xc058699a SIOCGIFDSTADDR = 0xc0206922 SIOCGIFFIB = 0xc020695c SIOCGIFFLAGS = 0xc0206911 @@ -1415,6 +1481,7 @@ const ( SO_RCVBUF = 0x1002 SO_RCVLOWAT = 0x1004 SO_RCVTIMEO = 0x1006 + SO_RERROR = 0x20000 SO_REUSEADDR = 0x4 SO_REUSEPORT = 0x200 SO_REUSEPORT_LB = 0x10000 @@ -1473,22 +1540,40 @@ const ( TCOFLUSH = 0x2 TCOOFF = 0x1 TCOON = 0x2 + TCPOPT_EOL = 0x0 + TCPOPT_FAST_OPEN = 0x22 + TCPOPT_MAXSEG = 0x2 + TCPOPT_NOP = 0x1 + TCPOPT_PAD = 0x0 + TCPOPT_SACK = 0x5 + TCPOPT_SACK_PERMITTED = 0x4 + TCPOPT_SIGNATURE = 0x13 + TCPOPT_TIMESTAMP = 0x8 + TCPOPT_WINDOW = 0x3 TCP_BBR_ACK_COMP_ALG = 0x448 + TCP_BBR_ALGORITHM = 0x43b TCP_BBR_DRAIN_INC_EXTRA = 0x43c TCP_BBR_DRAIN_PG = 0x42e TCP_BBR_EXTRA_GAIN = 0x449 + TCP_BBR_EXTRA_STATE = 0x453 + TCP_BBR_FLOOR_MIN_TSO = 0x454 + TCP_BBR_HDWR_PACE = 0x451 + TCP_BBR_HOLD_TARGET = 0x436 TCP_BBR_IWINTSO = 0x42b TCP_BBR_LOWGAIN_FD = 0x436 TCP_BBR_LOWGAIN_HALF = 0x435 TCP_BBR_LOWGAIN_THRESH = 0x434 TCP_BBR_MAX_RTO = 0x439 TCP_BBR_MIN_RTO = 0x438 + TCP_BBR_MIN_TOPACEOUT = 0x455 TCP_BBR_ONE_RETRAN = 0x431 TCP_BBR_PACE_CROSS = 0x442 TCP_BBR_PACE_DEL_TAR = 0x43f + TCP_BBR_PACE_OH = 0x435 TCP_BBR_PACE_PER_SEC = 0x43e TCP_BBR_PACE_SEG_MAX = 0x440 TCP_BBR_PACE_SEG_MIN = 0x441 + TCP_BBR_POLICER_DETECT = 0x457 TCP_BBR_PROBE_RTT_GAIN = 0x44d TCP_BBR_PROBE_RTT_INT = 0x430 TCP_BBR_PROBE_RTT_LEN = 0x44e @@ -1497,12 +1582,18 @@ const ( TCP_BBR_REC_OVER_HPTS = 0x43a TCP_BBR_RETRAN_WTSO = 0x44b TCP_BBR_RWND_IS_APP = 0x42f + TCP_BBR_SEND_IWND_IN_TSO = 0x44f TCP_BBR_STARTUP_EXIT_EPOCH = 0x43d TCP_BBR_STARTUP_LOSS_EXIT = 0x432 TCP_BBR_STARTUP_PG = 0x42d + TCP_BBR_TMR_PACE_OH = 0x448 + TCP_BBR_TSLIMITS = 0x434 + TCP_BBR_TSTMP_RAISES = 0x456 TCP_BBR_UNLIMITED = 0x43b TCP_BBR_USEDEL_RATE = 0x437 TCP_BBR_USE_LOWGAIN = 0x433 + TCP_BBR_USE_RACK_CHEAT = 0x450 + TCP_BBR_UTTER_MAX_TSO = 0x452 TCP_CA_NAME_MAX = 0x10 TCP_CCALGOOPT = 0x41 TCP_CONGESTION = 0x40 @@ -1542,6 +1633,7 @@ const ( TCP_PCAP_OUT = 0x800 TCP_RACK_EARLY_RECOV = 0x423 TCP_RACK_EARLY_SEG = 0x424 + TCP_RACK_GP_INCREASE = 0x446 TCP_RACK_IDLE_REDUCE_HIGH = 0x444 TCP_RACK_MIN_PACE = 0x445 TCP_RACK_MIN_PACE_SEG = 0x446 @@ -1555,7 +1647,6 @@ const ( TCP_RACK_PRR_SENDALOT = 0x421 TCP_RACK_REORD_FADE = 0x426 TCP_RACK_REORD_THRESH = 0x425 - TCP_RACK_SESS_CWV = 0x42a TCP_RACK_TLP_INC_VAR = 0x429 TCP_RACK_TLP_REDUCE = 0x41c TCP_RACK_TLP_THRESH = 0x427 @@ -1693,12 +1784,13 @@ const ( EIDRM = syscall.Errno(0x52) EILSEQ = syscall.Errno(0x56) EINPROGRESS = syscall.Errno(0x24) + EINTEGRITY = syscall.Errno(0x61) EINTR = syscall.Errno(0x4) EINVAL = syscall.Errno(0x16) EIO = syscall.Errno(0x5) EISCONN = syscall.Errno(0x38) EISDIR = syscall.Errno(0x15) - ELAST = syscall.Errno(0x60) + ELAST = syscall.Errno(0x61) ELOOP = syscall.Errno(0x3e) EMFILE = syscall.Errno(0x18) EMLINK = syscall.Errno(0x1f) @@ -1841,7 +1933,7 @@ var errorList = [...]struct { {32, "EPIPE", "broken pipe"}, {33, "EDOM", "numerical argument out of domain"}, {34, "ERANGE", "result too large"}, - {35, "EAGAIN", "resource temporarily unavailable"}, + {35, "EWOULDBLOCK", "resource temporarily unavailable"}, {36, "EINPROGRESS", "operation now in progress"}, {37, "EALREADY", "operation already in progress"}, {38, "ENOTSOCK", "socket operation on non-socket"}, @@ -1903,6 +1995,7 @@ var errorList = [...]struct { {94, "ECAPMODE", "not permitted in capability mode"}, {95, "ENOTRECOVERABLE", "state not recoverable"}, {96, "EOWNERDEAD", "previous owner died"}, + {97, "EINTEGRITY", "integrity check failed"}, } // Signal table diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go index 99e9a0e..777b69d 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go @@ -151,6 +151,7 @@ const ( BIOCSETF = 0x80084267 BIOCSETFNR = 0x80084282 BIOCSETIF = 0x8020426c + BIOCSETVLANPCP = 0x80044285 BIOCSETWF = 0x8008427b BIOCSETZBUF = 0x800c4281 BIOCSHDRCMPLT = 0x80044275 @@ -362,7 +363,7 @@ const ( CTL_KERN = 0x1 CTL_MAXNAME = 0x18 CTL_NET = 0x4 - DIOCGATTR = 0xc144648e + DIOCGATTR = 0xc148648e DIOCGDELETE = 0x80106488 DIOCGFLUSH = 0x20006487 DIOCGFRONTSTUFF = 0x40086486 @@ -377,7 +378,7 @@ const ( DIOCGSTRIPESIZE = 0x4008648b DIOCSKERNELDUMP = 0x804c6490 DIOCSKERNELDUMP_FREEBSD11 = 0x80046485 - DIOCZONECMD = 0xc06c648f + DIOCZONECMD = 0xc078648f DLT_A429 = 0xb8 DLT_A653_ICM = 0xb9 DLT_AIRONET_HEADER = 0x78 @@ -407,7 +408,9 @@ const ( DLT_C_HDLC_WITH_DIR = 0xcd DLT_DBUS = 0xe7 DLT_DECT = 0xdd + DLT_DISPLAYPORT_AUX = 0x113 DLT_DOCSIS = 0x8f + DLT_DOCSIS31_XRA31 = 0x111 DLT_DVB_CI = 0xeb DLT_ECONET = 0x73 DLT_EN10MB = 0x1 @@ -417,6 +420,7 @@ const ( DLT_ERF = 0xc5 DLT_ERF_ETH = 0xaf DLT_ERF_POS = 0xb0 + DLT_ETHERNET_MPACKET = 0x112 DLT_FC_2 = 0xe0 DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 DLT_FDDI = 0xa @@ -444,7 +448,7 @@ const ( DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 DLT_INFINIBAND = 0xf7 DLT_IPFILTER = 0x74 - DLT_IPMB = 0xc7 + DLT_IPMB_KONTRON = 0xc7 DLT_IPMB_LINUX = 0xd1 DLT_IPMI_HPM_2 = 0x104 DLT_IPNET = 0xe2 @@ -484,9 +488,11 @@ const ( DLT_LINUX_LAPD = 0xb1 DLT_LINUX_PPP_WITHDIRECTION = 0xa6 DLT_LINUX_SLL = 0x71 + DLT_LINUX_SLL2 = 0x114 DLT_LOOP = 0x6c + DLT_LORATAP = 0x10e DLT_LTALK = 0x72 - DLT_MATCHING_MAX = 0x109 + DLT_MATCHING_MAX = 0x114 DLT_MATCHING_MIN = 0x68 DLT_MFR = 0xb6 DLT_MOST = 0xd3 @@ -502,7 +508,9 @@ const ( DLT_NFC_LLCP = 0xf5 DLT_NFLOG = 0xef DLT_NG40 = 0xf4 + DLT_NORDIC_BLE = 0x110 DLT_NULL = 0x0 + DLT_OPENFLOW = 0x10b DLT_PCI_EXP = 0x7d DLT_PFLOG = 0x75 DLT_PFSYNC = 0x79 @@ -526,15 +534,18 @@ const ( DLT_RTAC_SERIAL = 0xfa DLT_SCCP = 0x8e DLT_SCTP = 0xf8 + DLT_SDLC = 0x10c DLT_SITA = 0xc4 DLT_SLIP = 0x8 DLT_SLIP_BSDOS = 0xd DLT_STANAG_5066_D_PDU = 0xed DLT_SUNATM = 0x7b DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TI_LLN_SNIFFER = 0x10d DLT_TZSP = 0x80 DLT_USB = 0xba DLT_USBPCAP = 0xf9 + DLT_USB_DARWIN = 0x10a DLT_USB_FREEBSD = 0xba DLT_USB_LINUX = 0xbd DLT_USB_LINUX_MMAPPED = 0xdc @@ -554,6 +565,7 @@ const ( DLT_USER7 = 0x9a DLT_USER8 = 0x9b DLT_USER9 = 0x9c + DLT_VSOCK = 0x10f DLT_WATTSTOPPER_DLM = 0x107 DLT_WIHART = 0xdf DLT_WIRESHARK_UPPER_PDU = 0xfc @@ -578,6 +590,7 @@ const ( ECHONL = 0x10 ECHOPRT = 0x20 EVFILT_AIO = -0x3 + EVFILT_EMPTY = -0xd EVFILT_FS = -0x9 EVFILT_LIO = -0xa EVFILT_PROC = -0x5 @@ -585,11 +598,12 @@ const ( EVFILT_READ = -0x1 EVFILT_SENDFILE = -0xc EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0xc + EVFILT_SYSCOUNT = 0xd EVFILT_TIMER = -0x7 EVFILT_USER = -0xb EVFILT_VNODE = -0x4 EVFILT_WRITE = -0x2 + EVNAMEMAP_NAME_SIZE = 0x40 EV_ADD = 0x1 EV_CLEAR = 0x20 EV_DELETE = 0x2 @@ -606,6 +620,7 @@ const ( EV_RECEIPT = 0x40 EV_SYSFLAGS = 0xf000 EXTA = 0x4b00 + EXTATTR_MAXNAMELEN = 0xff EXTATTR_NAMESPACE_EMPTY = 0x0 EXTATTR_NAMESPACE_SYSTEM = 0x2 EXTATTR_NAMESPACE_USER = 0x1 @@ -647,6 +662,7 @@ const ( IEXTEN = 0x400 IFAN_ARRIVAL = 0x0 IFAN_DEPARTURE = 0x1 + IFCAP_WOL_MAGIC = 0x2000 IFF_ALLMULTI = 0x200 IFF_ALTPHYS = 0x4000 IFF_BROADCAST = 0x2 @@ -663,6 +679,7 @@ const ( IFF_MONITOR = 0x40000 IFF_MULTICAST = 0x8000 IFF_NOARP = 0x80 + IFF_NOGROUP = 0x800000 IFF_OACTIVE = 0x400 IFF_POINTOPOINT = 0x10 IFF_PPROMISC = 0x20000 @@ -719,6 +736,7 @@ const ( IPPROTO_CMTP = 0x26 IPPROTO_CPHB = 0x49 IPPROTO_CPNX = 0x48 + IPPROTO_DCCP = 0x21 IPPROTO_DDP = 0x25 IPPROTO_DGP = 0x56 IPPROTO_DIVERT = 0x102 @@ -799,7 +817,6 @@ const ( IPPROTO_SCTP = 0x84 IPPROTO_SDRP = 0x2a IPPROTO_SEND = 0x103 - IPPROTO_SEP = 0x21 IPPROTO_SHIM6 = 0x8c IPPROTO_SKIP = 0x39 IPPROTO_SPACER = 0x7fff @@ -837,6 +854,7 @@ const ( IPV6_DSTOPTS = 0x32 IPV6_FLOWID = 0x43 IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_LEN = 0x14 IPV6_FLOWLABEL_MASK = 0xffff0f00 IPV6_FLOWTYPE = 0x44 IPV6_FRAGTTL = 0x78 @@ -857,13 +875,13 @@ const ( IPV6_MAX_GROUP_SRC_FILTER = 0x200 IPV6_MAX_MEMBERSHIPS = 0xfff IPV6_MAX_SOCK_SRC_FILTER = 0x80 - IPV6_MIN_MEMBERSHIPS = 0x1f IPV6_MMTU = 0x500 IPV6_MSFILTER = 0x4a IPV6_MULTICAST_HOPS = 0xa IPV6_MULTICAST_IF = 0x9 IPV6_MULTICAST_LOOP = 0xb IPV6_NEXTHOP = 0x30 + IPV6_ORIGDSTADDR = 0x48 IPV6_PATHMTU = 0x2c IPV6_PKTINFO = 0x2e IPV6_PORTRANGE = 0xe @@ -875,6 +893,7 @@ const ( IPV6_RECVFLOWID = 0x46 IPV6_RECVHOPLIMIT = 0x25 IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVORIGDSTADDR = 0x48 IPV6_RECVPATHMTU = 0x2b IPV6_RECVPKTINFO = 0x24 IPV6_RECVRSSBUCKETID = 0x47 @@ -894,6 +913,7 @@ const ( IPV6_V6ONLY = 0x1b IPV6_VERSION = 0x60 IPV6_VERSION_MASK = 0xf0 + IPV6_VLAN_PCP = 0x4b IP_ADD_MEMBERSHIP = 0xc IP_ADD_SOURCE_MEMBERSHIP = 0x46 IP_BINDANY = 0x18 @@ -935,10 +955,8 @@ const ( IP_MAX_MEMBERSHIPS = 0xfff IP_MAX_SOCK_MUTE_FILTER = 0x80 IP_MAX_SOCK_SRC_FILTER = 0x80 - IP_MAX_SOURCE_FILTER = 0x400 IP_MF = 0x2000 IP_MINTTL = 0x42 - IP_MIN_MEMBERSHIPS = 0x1f IP_MSFILTER = 0x4a IP_MSS = 0x240 IP_MULTICAST_IF = 0x9 @@ -948,6 +966,7 @@ const ( IP_OFFMASK = 0x1fff IP_ONESBCAST = 0x17 IP_OPTIONS = 0x1 + IP_ORIGDSTADDR = 0x1b IP_PORTRANGE = 0x13 IP_PORTRANGE_DEFAULT = 0x0 IP_PORTRANGE_HIGH = 0x1 @@ -956,6 +975,7 @@ const ( IP_RECVFLOWID = 0x5d IP_RECVIF = 0x14 IP_RECVOPTS = 0x5 + IP_RECVORIGDSTADDR = 0x1b IP_RECVRETOPTS = 0x6 IP_RECVRSSBUCKETID = 0x5e IP_RECVTOS = 0x44 @@ -972,8 +992,12 @@ const ( IP_TOS = 0x3 IP_TTL = 0x4 IP_UNBLOCK_SOURCE = 0x49 + IP_VLAN_PCP = 0x4b ISIG = 0x80 ISTRIP = 0x20 + ITIMER_PROF = 0x2 + ITIMER_REAL = 0x0 + ITIMER_VIRTUAL = 0x1 IXANY = 0x800 IXOFF = 0x400 IXON = 0x200 @@ -983,7 +1007,6 @@ const ( KERN_VERSION = 0x4 LOCAL_CONNWAIT = 0x4 LOCAL_CREDS = 0x2 - LOCAL_CREDS_PERSISTENT = 0x3 LOCAL_PEERCRED = 0x1 LOCAL_VENDOR = 0x80000000 LOCK_EX = 0x2 @@ -1071,10 +1094,12 @@ const ( MNT_SUSPEND = 0x4 MNT_SYNCHRONOUS = 0x2 MNT_UNION = 0x20 + MNT_UNTRUSTED = 0x800000000 MNT_UPDATE = 0x10000 - MNT_UPDATEMASK = 0x2d8d0807e + MNT_UPDATEMASK = 0xad8d0807e MNT_USER = 0x8000 - MNT_VISFLAGMASK = 0x3fef0ffff + MNT_VERIFIED = 0x400000000 + MNT_VISFLAGMASK = 0xffef0ffff MNT_WAIT = 0x1 MSG_CMSG_CLOEXEC = 0x40000 MSG_COMPAT = 0x8000 @@ -1103,6 +1128,7 @@ const ( NFDBITS = 0x20 NOFLSH = 0x80000000 NOKERNINFO = 0x2000000 + NOTE_ABSTIME = 0x10 NOTE_ATTRIB = 0x8 NOTE_CHILD = 0x4 NOTE_CLOSE = 0x100 @@ -1159,6 +1185,8 @@ const ( O_NONBLOCK = 0x4 O_RDONLY = 0x0 O_RDWR = 0x2 + O_RESOLVE_BENEATH = 0x800000 + O_SEARCH = 0x40000 O_SHLOCK = 0x10 O_SYNC = 0x80 O_TRUNC = 0x400 @@ -1169,6 +1197,10 @@ const ( PARMRK = 0x8 PARODD = 0x2000 PENDIN = 0x20000000 + PIOD_READ_D = 0x1 + PIOD_READ_I = 0x3 + PIOD_WRITE_D = 0x2 + PIOD_WRITE_I = 0x4 PRIO_PGRP = 0x1 PRIO_PROCESS = 0x0 PRIO_USER = 0x2 @@ -1176,6 +1208,53 @@ const ( PROT_NONE = 0x0 PROT_READ = 0x1 PROT_WRITE = 0x2 + PTRACE_DEFAULT = 0x1 + PTRACE_EXEC = 0x1 + PTRACE_FORK = 0x8 + PTRACE_LWP = 0x10 + PTRACE_SCE = 0x2 + PTRACE_SCX = 0x4 + PTRACE_SYSCALL = 0x6 + PTRACE_VFORK = 0x20 + PT_ATTACH = 0xa + PT_CLEARSTEP = 0x10 + PT_CONTINUE = 0x7 + PT_DETACH = 0xb + PT_FIRSTMACH = 0x40 + PT_FOLLOW_FORK = 0x17 + PT_GETDBREGS = 0x25 + PT_GETFPREGS = 0x23 + PT_GETLWPLIST = 0xf + PT_GETNUMLWPS = 0xe + PT_GETREGS = 0x21 + PT_GETVFPREGS = 0x40 + PT_GET_EVENT_MASK = 0x19 + PT_GET_SC_ARGS = 0x1b + PT_GET_SC_RET = 0x1c + PT_IO = 0xc + PT_KILL = 0x8 + PT_LWPINFO = 0xd + PT_LWP_EVENTS = 0x18 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_RESUME = 0x13 + PT_SETDBREGS = 0x26 + PT_SETFPREGS = 0x24 + PT_SETREGS = 0x22 + PT_SETSTEP = 0x11 + PT_SETVFPREGS = 0x41 + PT_SET_EVENT_MASK = 0x1a + PT_STEP = 0x9 + PT_SUSPEND = 0x12 + PT_SYSCALL = 0x16 + PT_TO_SCE = 0x14 + PT_TO_SCX = 0x15 + PT_TRACE_ME = 0x0 + PT_VM_ENTRY = 0x29 + PT_VM_TIMESTAMP = 0x28 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + P_ZONEID = 0xc RLIMIT_AS = 0xa RLIMIT_CORE = 0x4 RLIMIT_CPU = 0x0 @@ -1257,7 +1336,6 @@ const ( RTV_WEIGHT = 0x100 RT_ALL_FIBS = -0x1 RT_BLACKHOLE = 0x40 - RT_CACHING_CONTEXT = 0x1 RT_DEFAULT_FIB = 0x0 RT_HAS_GW = 0x80 RT_HAS_HEADER = 0x10 @@ -1267,15 +1345,17 @@ const ( RT_LLE_CACHE = 0x100 RT_MAY_LOOP = 0x8 RT_MAY_LOOP_BIT = 0x3 - RT_NORTREF = 0x2 RT_REJECT = 0x20 RUSAGE_CHILDREN = -0x1 RUSAGE_SELF = 0x0 RUSAGE_THREAD = 0x1 SCM_BINTIME = 0x4 SCM_CREDS = 0x3 + SCM_MONOTONIC = 0x6 + SCM_REALTIME = 0x5 SCM_RIGHTS = 0x1 SCM_TIMESTAMP = 0x2 + SCM_TIME_INFO = 0x7 SEEK_CUR = 0x1 SEEK_DATA = 0x3 SEEK_END = 0x2 @@ -1299,10 +1379,12 @@ const ( SIOCGHWADDR = 0xc020693e SIOCGI2C = 0xc020693d SIOCGIFADDR = 0xc0206921 + SIOCGIFALIAS = 0xc044692d SIOCGIFBRDADDR = 0xc0206923 SIOCGIFCAP = 0xc020691f SIOCGIFCONF = 0xc0086924 SIOCGIFDESCR = 0xc020692a + SIOCGIFDOWNREASON = 0xc058699a SIOCGIFDSTADDR = 0xc0206922 SIOCGIFFIB = 0xc020695c SIOCGIFFLAGS = 0xc0206911 @@ -1318,8 +1400,11 @@ const ( SIOCGIFPDSTADDR = 0xc0206948 SIOCGIFPHYS = 0xc0206935 SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFRSSHASH = 0xc0186997 + SIOCGIFRSSKEY = 0xc0946996 SIOCGIFSTATUS = 0xc331693b SIOCGIFXMEDIA = 0xc028698b + SIOCGLANPCP = 0xc0206998 SIOCGLOWAT = 0x40047303 SIOCGPGRP = 0x40047309 SIOCGPRIVATE_0 = 0xc0206950 @@ -1350,6 +1435,7 @@ const ( SIOCSIFPHYS = 0x80206936 SIOCSIFRVNET = 0xc020695b SIOCSIFVNET = 0xc020695a + SIOCSLANPCP = 0x80206999 SIOCSLOWAT = 0x80047302 SIOCSPGRP = 0x80047308 SIOCSTUNFIB = 0x8020695f @@ -1369,6 +1455,7 @@ const ( SO_BINTIME = 0x2000 SO_BROADCAST = 0x20 SO_DEBUG = 0x1 + SO_DOMAIN = 0x1019 SO_DONTROUTE = 0x10 SO_ERROR = 0x1007 SO_KEEPALIVE = 0x8 @@ -1377,6 +1464,7 @@ const ( SO_LISTENINCQLEN = 0x1013 SO_LISTENQLEN = 0x1012 SO_LISTENQLIMIT = 0x1011 + SO_MAX_PACING_RATE = 0x1018 SO_NOSIGPIPE = 0x800 SO_NO_DDP = 0x8000 SO_NO_OFFLOAD = 0x4000 @@ -1387,13 +1475,22 @@ const ( SO_RCVBUF = 0x1002 SO_RCVLOWAT = 0x1004 SO_RCVTIMEO = 0x1006 + SO_RERROR = 0x20000 SO_REUSEADDR = 0x4 SO_REUSEPORT = 0x200 + SO_REUSEPORT_LB = 0x10000 SO_SETFIB = 0x1014 SO_SNDBUF = 0x1001 SO_SNDLOWAT = 0x1003 SO_SNDTIMEO = 0x1005 SO_TIMESTAMP = 0x400 + SO_TS_BINTIME = 0x1 + SO_TS_CLOCK = 0x1017 + SO_TS_CLOCK_MAX = 0x3 + SO_TS_DEFAULT = 0x0 + SO_TS_MONOTONIC = 0x3 + SO_TS_REALTIME = 0x2 + SO_TS_REALTIME_MICRO = 0x0 SO_TYPE = 0x1008 SO_USELOOPBACK = 0x40 SO_USER_COOKIE = 0x1015 @@ -1437,10 +1534,69 @@ const ( TCOFLUSH = 0x2 TCOOFF = 0x1 TCOON = 0x2 + TCPOPT_EOL = 0x0 + TCPOPT_FAST_OPEN = 0x22 + TCPOPT_MAXSEG = 0x2 + TCPOPT_NOP = 0x1 + TCPOPT_PAD = 0x0 + TCPOPT_SACK = 0x5 + TCPOPT_SACK_PERMITTED = 0x4 + TCPOPT_SIGNATURE = 0x13 + TCPOPT_TIMESTAMP = 0x8 + TCPOPT_WINDOW = 0x3 + TCP_BBR_ACK_COMP_ALG = 0x448 + TCP_BBR_ALGORITHM = 0x43b + TCP_BBR_DRAIN_INC_EXTRA = 0x43c + TCP_BBR_DRAIN_PG = 0x42e + TCP_BBR_EXTRA_GAIN = 0x449 + TCP_BBR_EXTRA_STATE = 0x453 + TCP_BBR_FLOOR_MIN_TSO = 0x454 + TCP_BBR_HDWR_PACE = 0x451 + TCP_BBR_HOLD_TARGET = 0x436 + TCP_BBR_IWINTSO = 0x42b + TCP_BBR_LOWGAIN_FD = 0x436 + TCP_BBR_LOWGAIN_HALF = 0x435 + TCP_BBR_LOWGAIN_THRESH = 0x434 + TCP_BBR_MAX_RTO = 0x439 + TCP_BBR_MIN_RTO = 0x438 + TCP_BBR_MIN_TOPACEOUT = 0x455 + TCP_BBR_ONE_RETRAN = 0x431 + TCP_BBR_PACE_CROSS = 0x442 + TCP_BBR_PACE_DEL_TAR = 0x43f + TCP_BBR_PACE_OH = 0x435 + TCP_BBR_PACE_PER_SEC = 0x43e + TCP_BBR_PACE_SEG_MAX = 0x440 + TCP_BBR_PACE_SEG_MIN = 0x441 + TCP_BBR_POLICER_DETECT = 0x457 + TCP_BBR_PROBE_RTT_GAIN = 0x44d + TCP_BBR_PROBE_RTT_INT = 0x430 + TCP_BBR_PROBE_RTT_LEN = 0x44e + TCP_BBR_RACK_RTT_USE = 0x44a + TCP_BBR_RECFORCE = 0x42c + TCP_BBR_REC_OVER_HPTS = 0x43a + TCP_BBR_RETRAN_WTSO = 0x44b + TCP_BBR_RWND_IS_APP = 0x42f + TCP_BBR_SEND_IWND_IN_TSO = 0x44f + TCP_BBR_STARTUP_EXIT_EPOCH = 0x43d + TCP_BBR_STARTUP_LOSS_EXIT = 0x432 + TCP_BBR_STARTUP_PG = 0x42d + TCP_BBR_TMR_PACE_OH = 0x448 + TCP_BBR_TSLIMITS = 0x434 + TCP_BBR_TSTMP_RAISES = 0x456 + TCP_BBR_UNLIMITED = 0x43b + TCP_BBR_USEDEL_RATE = 0x437 + TCP_BBR_USE_LOWGAIN = 0x433 + TCP_BBR_USE_RACK_CHEAT = 0x450 + TCP_BBR_UTTER_MAX_TSO = 0x452 TCP_CA_NAME_MAX = 0x10 TCP_CCALGOOPT = 0x41 TCP_CONGESTION = 0x40 + TCP_DATA_AFTER_CLOSE = 0x44c + TCP_DELACK = 0x48 TCP_FASTOPEN = 0x401 + TCP_FASTOPEN_MAX_COOKIE_LEN = 0x10 + TCP_FASTOPEN_MIN_COOKIE_LEN = 0x4 + TCP_FASTOPEN_PSK_LEN = 0x10 TCP_FUNCTION_BLK = 0x2000 TCP_FUNCTION_NAME_LEN_MAX = 0x20 TCP_INFO = 0x20 @@ -1448,6 +1604,12 @@ const ( TCP_KEEPIDLE = 0x100 TCP_KEEPINIT = 0x80 TCP_KEEPINTVL = 0x200 + TCP_LOG = 0x22 + TCP_LOGBUF = 0x23 + TCP_LOGDUMP = 0x25 + TCP_LOGDUMPID = 0x26 + TCP_LOGID = 0x24 + TCP_LOG_ID_LEN = 0x40 TCP_MAXBURST = 0x4 TCP_MAXHLEN = 0x3c TCP_MAXOLEN = 0x28 @@ -1463,8 +1625,30 @@ const ( TCP_NOPUSH = 0x4 TCP_PCAP_IN = 0x1000 TCP_PCAP_OUT = 0x800 + TCP_RACK_EARLY_RECOV = 0x423 + TCP_RACK_EARLY_SEG = 0x424 + TCP_RACK_GP_INCREASE = 0x446 + TCP_RACK_IDLE_REDUCE_HIGH = 0x444 + TCP_RACK_MIN_PACE = 0x445 + TCP_RACK_MIN_PACE_SEG = 0x446 + TCP_RACK_MIN_TO = 0x422 + TCP_RACK_PACE_ALWAYS = 0x41f + TCP_RACK_PACE_MAX_SEG = 0x41e + TCP_RACK_PACE_REDUCE = 0x41d + TCP_RACK_PKT_DELAY = 0x428 + TCP_RACK_PROP = 0x41b + TCP_RACK_PROP_RATE = 0x420 + TCP_RACK_PRR_SENDALOT = 0x421 + TCP_RACK_REORD_FADE = 0x426 + TCP_RACK_REORD_THRESH = 0x425 + TCP_RACK_TLP_INC_VAR = 0x429 + TCP_RACK_TLP_REDUCE = 0x41c + TCP_RACK_TLP_THRESH = 0x427 + TCP_RACK_TLP_USE = 0x447 TCP_VENDOR = 0x80000000 TCSAFLUSH = 0x2 + TIMER_ABSTIME = 0x1 + TIMER_RELTIME = 0x0 TIOCCBRK = 0x2000747a TIOCCDTR = 0x20007478 TIOCCONS = 0x80047462 @@ -1528,6 +1712,8 @@ const ( TIOCTIMESTAMP = 0x40107459 TIOCUCNTL = 0x80047466 TOSTOP = 0x400000 + UTIME_NOW = -0x1 + UTIME_OMIT = -0x2 VDISCARD = 0xf VDSUSP = 0xb VEOF = 0x0 @@ -1592,12 +1778,13 @@ const ( EIDRM = syscall.Errno(0x52) EILSEQ = syscall.Errno(0x56) EINPROGRESS = syscall.Errno(0x24) + EINTEGRITY = syscall.Errno(0x61) EINTR = syscall.Errno(0x4) EINVAL = syscall.Errno(0x16) EIO = syscall.Errno(0x5) EISCONN = syscall.Errno(0x38) EISDIR = syscall.Errno(0x15) - ELAST = syscall.Errno(0x60) + ELAST = syscall.Errno(0x61) ELOOP = syscall.Errno(0x3e) EMFILE = syscall.Errno(0x18) EMLINK = syscall.Errno(0x1f) @@ -1740,7 +1927,7 @@ var errorList = [...]struct { {32, "EPIPE", "broken pipe"}, {33, "EDOM", "numerical argument out of domain"}, {34, "ERANGE", "result too large"}, - {35, "EAGAIN", "resource temporarily unavailable"}, + {35, "EWOULDBLOCK", "resource temporarily unavailable"}, {36, "EINPROGRESS", "operation now in progress"}, {37, "EALREADY", "operation already in progress"}, {38, "ENOTSOCK", "socket operation on non-socket"}, @@ -1802,6 +1989,7 @@ var errorList = [...]struct { {94, "ECAPMODE", "not permitted in capability mode"}, {95, "ENOTRECOVERABLE", "state not recoverable"}, {96, "EOWNERDEAD", "previous owner died"}, + {97, "EINTEGRITY", "integrity check failed"}, } // Signal table diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go index 4c83771..c557ac2 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go @@ -151,6 +151,7 @@ const ( BIOCSETF = 0x80104267 BIOCSETFNR = 0x80104282 BIOCSETIF = 0x8020426c + BIOCSETVLANPCP = 0x80044285 BIOCSETWF = 0x8010427b BIOCSETZBUF = 0x80184281 BIOCSHDRCMPLT = 0x80044275 @@ -447,7 +448,7 @@ const ( DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 DLT_INFINIBAND = 0xf7 DLT_IPFILTER = 0x74 - DLT_IPMB = 0xc7 + DLT_IPMB_KONTRON = 0xc7 DLT_IPMB_LINUX = 0xd1 DLT_IPMI_HPM_2 = 0x104 DLT_IPNET = 0xe2 @@ -487,10 +488,11 @@ const ( DLT_LINUX_LAPD = 0xb1 DLT_LINUX_PPP_WITHDIRECTION = 0xa6 DLT_LINUX_SLL = 0x71 + DLT_LINUX_SLL2 = 0x114 DLT_LOOP = 0x6c DLT_LORATAP = 0x10e DLT_LTALK = 0x72 - DLT_MATCHING_MAX = 0x113 + DLT_MATCHING_MAX = 0x114 DLT_MATCHING_MIN = 0x68 DLT_MFR = 0xb6 DLT_MOST = 0xd3 @@ -734,6 +736,7 @@ const ( IPPROTO_CMTP = 0x26 IPPROTO_CPHB = 0x49 IPPROTO_CPNX = 0x48 + IPPROTO_DCCP = 0x21 IPPROTO_DDP = 0x25 IPPROTO_DGP = 0x56 IPPROTO_DIVERT = 0x102 @@ -814,7 +817,6 @@ const ( IPPROTO_SCTP = 0x84 IPPROTO_SDRP = 0x2a IPPROTO_SEND = 0x103 - IPPROTO_SEP = 0x21 IPPROTO_SHIM6 = 0x8c IPPROTO_SKIP = 0x39 IPPROTO_SPACER = 0x7fff @@ -911,6 +913,7 @@ const ( IPV6_V6ONLY = 0x1b IPV6_VERSION = 0x60 IPV6_VERSION_MASK = 0xf0 + IPV6_VLAN_PCP = 0x4b IP_ADD_MEMBERSHIP = 0xc IP_ADD_SOURCE_MEMBERSHIP = 0x46 IP_BINDANY = 0x18 @@ -989,8 +992,12 @@ const ( IP_TOS = 0x3 IP_TTL = 0x4 IP_UNBLOCK_SOURCE = 0x49 + IP_VLAN_PCP = 0x4b ISIG = 0x80 ISTRIP = 0x20 + ITIMER_PROF = 0x2 + ITIMER_REAL = 0x0 + ITIMER_VIRTUAL = 0x1 IXANY = 0x800 IXOFF = 0x400 IXON = 0x200 @@ -1000,7 +1007,6 @@ const ( KERN_VERSION = 0x4 LOCAL_CONNWAIT = 0x4 LOCAL_CREDS = 0x2 - LOCAL_CREDS_PERSISTENT = 0x3 LOCAL_PEERCRED = 0x1 LOCAL_VENDOR = 0x80000000 LOCK_EX = 0x2 @@ -1180,6 +1186,8 @@ const ( O_NONBLOCK = 0x4 O_RDONLY = 0x0 O_RDWR = 0x2 + O_RESOLVE_BENEATH = 0x800000 + O_SEARCH = 0x40000 O_SHLOCK = 0x10 O_SYNC = 0x80 O_TRUNC = 0x400 @@ -1190,6 +1198,10 @@ const ( PARMRK = 0x8 PARODD = 0x2000 PENDIN = 0x20000000 + PIOD_READ_D = 0x1 + PIOD_READ_I = 0x3 + PIOD_WRITE_D = 0x2 + PIOD_WRITE_I = 0x4 PRIO_PGRP = 0x1 PRIO_PROCESS = 0x0 PRIO_USER = 0x2 @@ -1197,6 +1209,51 @@ const ( PROT_NONE = 0x0 PROT_READ = 0x1 PROT_WRITE = 0x2 + PTRACE_DEFAULT = 0x1 + PTRACE_EXEC = 0x1 + PTRACE_FORK = 0x8 + PTRACE_LWP = 0x10 + PTRACE_SCE = 0x2 + PTRACE_SCX = 0x4 + PTRACE_SYSCALL = 0x6 + PTRACE_VFORK = 0x20 + PT_ATTACH = 0xa + PT_CLEARSTEP = 0x10 + PT_CONTINUE = 0x7 + PT_DETACH = 0xb + PT_FIRSTMACH = 0x40 + PT_FOLLOW_FORK = 0x17 + PT_GETDBREGS = 0x25 + PT_GETFPREGS = 0x23 + PT_GETLWPLIST = 0xf + PT_GETNUMLWPS = 0xe + PT_GETREGS = 0x21 + PT_GET_EVENT_MASK = 0x19 + PT_GET_SC_ARGS = 0x1b + PT_GET_SC_RET = 0x1c + PT_IO = 0xc + PT_KILL = 0x8 + PT_LWPINFO = 0xd + PT_LWP_EVENTS = 0x18 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_RESUME = 0x13 + PT_SETDBREGS = 0x26 + PT_SETFPREGS = 0x24 + PT_SETREGS = 0x22 + PT_SETSTEP = 0x11 + PT_SET_EVENT_MASK = 0x1a + PT_STEP = 0x9 + PT_SUSPEND = 0x12 + PT_SYSCALL = 0x16 + PT_TO_SCE = 0x14 + PT_TO_SCX = 0x15 + PT_TRACE_ME = 0x0 + PT_VM_ENTRY = 0x29 + PT_VM_TIMESTAMP = 0x28 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + P_ZONEID = 0xc RLIMIT_AS = 0xa RLIMIT_CORE = 0x4 RLIMIT_CPU = 0x0 @@ -1321,10 +1378,12 @@ const ( SIOCGHWADDR = 0xc020693e SIOCGI2C = 0xc020693d SIOCGIFADDR = 0xc0206921 + SIOCGIFALIAS = 0xc044692d SIOCGIFBRDADDR = 0xc0206923 SIOCGIFCAP = 0xc020691f SIOCGIFCONF = 0xc0106924 SIOCGIFDESCR = 0xc020692a + SIOCGIFDOWNREASON = 0xc058699a SIOCGIFDSTADDR = 0xc0206922 SIOCGIFFIB = 0xc020695c SIOCGIFFLAGS = 0xc0206911 @@ -1415,6 +1474,7 @@ const ( SO_RCVBUF = 0x1002 SO_RCVLOWAT = 0x1004 SO_RCVTIMEO = 0x1006 + SO_RERROR = 0x20000 SO_REUSEADDR = 0x4 SO_REUSEPORT = 0x200 SO_REUSEPORT_LB = 0x10000 @@ -1473,22 +1533,40 @@ const ( TCOFLUSH = 0x2 TCOOFF = 0x1 TCOON = 0x2 + TCPOPT_EOL = 0x0 + TCPOPT_FAST_OPEN = 0x22 + TCPOPT_MAXSEG = 0x2 + TCPOPT_NOP = 0x1 + TCPOPT_PAD = 0x0 + TCPOPT_SACK = 0x5 + TCPOPT_SACK_PERMITTED = 0x4 + TCPOPT_SIGNATURE = 0x13 + TCPOPT_TIMESTAMP = 0x8 + TCPOPT_WINDOW = 0x3 TCP_BBR_ACK_COMP_ALG = 0x448 + TCP_BBR_ALGORITHM = 0x43b TCP_BBR_DRAIN_INC_EXTRA = 0x43c TCP_BBR_DRAIN_PG = 0x42e TCP_BBR_EXTRA_GAIN = 0x449 + TCP_BBR_EXTRA_STATE = 0x453 + TCP_BBR_FLOOR_MIN_TSO = 0x454 + TCP_BBR_HDWR_PACE = 0x451 + TCP_BBR_HOLD_TARGET = 0x436 TCP_BBR_IWINTSO = 0x42b TCP_BBR_LOWGAIN_FD = 0x436 TCP_BBR_LOWGAIN_HALF = 0x435 TCP_BBR_LOWGAIN_THRESH = 0x434 TCP_BBR_MAX_RTO = 0x439 TCP_BBR_MIN_RTO = 0x438 + TCP_BBR_MIN_TOPACEOUT = 0x455 TCP_BBR_ONE_RETRAN = 0x431 TCP_BBR_PACE_CROSS = 0x442 TCP_BBR_PACE_DEL_TAR = 0x43f + TCP_BBR_PACE_OH = 0x435 TCP_BBR_PACE_PER_SEC = 0x43e TCP_BBR_PACE_SEG_MAX = 0x440 TCP_BBR_PACE_SEG_MIN = 0x441 + TCP_BBR_POLICER_DETECT = 0x457 TCP_BBR_PROBE_RTT_GAIN = 0x44d TCP_BBR_PROBE_RTT_INT = 0x430 TCP_BBR_PROBE_RTT_LEN = 0x44e @@ -1497,12 +1575,18 @@ const ( TCP_BBR_REC_OVER_HPTS = 0x43a TCP_BBR_RETRAN_WTSO = 0x44b TCP_BBR_RWND_IS_APP = 0x42f + TCP_BBR_SEND_IWND_IN_TSO = 0x44f TCP_BBR_STARTUP_EXIT_EPOCH = 0x43d TCP_BBR_STARTUP_LOSS_EXIT = 0x432 TCP_BBR_STARTUP_PG = 0x42d + TCP_BBR_TMR_PACE_OH = 0x448 + TCP_BBR_TSLIMITS = 0x434 + TCP_BBR_TSTMP_RAISES = 0x456 TCP_BBR_UNLIMITED = 0x43b TCP_BBR_USEDEL_RATE = 0x437 TCP_BBR_USE_LOWGAIN = 0x433 + TCP_BBR_USE_RACK_CHEAT = 0x450 + TCP_BBR_UTTER_MAX_TSO = 0x452 TCP_CA_NAME_MAX = 0x10 TCP_CCALGOOPT = 0x41 TCP_CONGESTION = 0x40 @@ -1542,6 +1626,7 @@ const ( TCP_PCAP_OUT = 0x800 TCP_RACK_EARLY_RECOV = 0x423 TCP_RACK_EARLY_SEG = 0x424 + TCP_RACK_GP_INCREASE = 0x446 TCP_RACK_IDLE_REDUCE_HIGH = 0x444 TCP_RACK_MIN_PACE = 0x445 TCP_RACK_MIN_PACE_SEG = 0x446 @@ -1555,7 +1640,6 @@ const ( TCP_RACK_PRR_SENDALOT = 0x421 TCP_RACK_REORD_FADE = 0x426 TCP_RACK_REORD_THRESH = 0x425 - TCP_RACK_SESS_CWV = 0x42a TCP_RACK_TLP_INC_VAR = 0x429 TCP_RACK_TLP_REDUCE = 0x41c TCP_RACK_TLP_THRESH = 0x427 @@ -1694,12 +1778,13 @@ const ( EIDRM = syscall.Errno(0x52) EILSEQ = syscall.Errno(0x56) EINPROGRESS = syscall.Errno(0x24) + EINTEGRITY = syscall.Errno(0x61) EINTR = syscall.Errno(0x4) EINVAL = syscall.Errno(0x16) EIO = syscall.Errno(0x5) EISCONN = syscall.Errno(0x38) EISDIR = syscall.Errno(0x15) - ELAST = syscall.Errno(0x60) + ELAST = syscall.Errno(0x61) ELOOP = syscall.Errno(0x3e) EMFILE = syscall.Errno(0x18) EMLINK = syscall.Errno(0x1f) @@ -1842,7 +1927,7 @@ var errorList = [...]struct { {32, "EPIPE", "broken pipe"}, {33, "EDOM", "numerical argument out of domain"}, {34, "ERANGE", "result too large"}, - {35, "EAGAIN", "resource temporarily unavailable"}, + {35, "EWOULDBLOCK", "resource temporarily unavailable"}, {36, "EINPROGRESS", "operation now in progress"}, {37, "EALREADY", "operation already in progress"}, {38, "ENOTSOCK", "socket operation on non-socket"}, @@ -1904,6 +1989,7 @@ var errorList = [...]struct { {94, "ECAPMODE", "not permitted in capability mode"}, {95, "ENOTRECOVERABLE", "state not recoverable"}, {96, "EOWNERDEAD", "previous owner died"}, + {97, "EINTEGRITY", "integrity check failed"}, } // Signal table diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go index 3de79fa..785d693 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -140,6 +140,306 @@ const ( ARPHRD_VOID = 0xffff ARPHRD_VSOCKMON = 0x33a ARPHRD_X25 = 0x10f + AUDIT_ADD = 0x3eb + AUDIT_ADD_RULE = 0x3f3 + AUDIT_ALWAYS = 0x2 + AUDIT_ANOM_ABEND = 0x6a5 + AUDIT_ANOM_CREAT = 0x6a7 + AUDIT_ANOM_LINK = 0x6a6 + AUDIT_ANOM_PROMISCUOUS = 0x6a4 + AUDIT_ARCH = 0xb + AUDIT_ARCH_AARCH64 = 0xc00000b7 + AUDIT_ARCH_ALPHA = 0xc0009026 + AUDIT_ARCH_ARCOMPACT = 0x4000005d + AUDIT_ARCH_ARCOMPACTBE = 0x5d + AUDIT_ARCH_ARCV2 = 0x400000c3 + AUDIT_ARCH_ARCV2BE = 0xc3 + AUDIT_ARCH_ARM = 0x40000028 + AUDIT_ARCH_ARMEB = 0x28 + AUDIT_ARCH_C6X = 0x4000008c + AUDIT_ARCH_C6XBE = 0x8c + AUDIT_ARCH_CRIS = 0x4000004c + AUDIT_ARCH_CSKY = 0x400000fc + AUDIT_ARCH_FRV = 0x5441 + AUDIT_ARCH_H8300 = 0x2e + AUDIT_ARCH_HEXAGON = 0xa4 + AUDIT_ARCH_I386 = 0x40000003 + AUDIT_ARCH_IA64 = 0xc0000032 + AUDIT_ARCH_LOONGARCH32 = 0x40000102 + AUDIT_ARCH_LOONGARCH64 = 0xc0000102 + AUDIT_ARCH_M32R = 0x58 + AUDIT_ARCH_M68K = 0x4 + AUDIT_ARCH_MICROBLAZE = 0xbd + AUDIT_ARCH_MIPS = 0x8 + AUDIT_ARCH_MIPS64 = 0x80000008 + AUDIT_ARCH_MIPS64N32 = 0xa0000008 + AUDIT_ARCH_MIPSEL = 0x40000008 + AUDIT_ARCH_MIPSEL64 = 0xc0000008 + AUDIT_ARCH_MIPSEL64N32 = 0xe0000008 + AUDIT_ARCH_NDS32 = 0x400000a7 + AUDIT_ARCH_NDS32BE = 0xa7 + AUDIT_ARCH_NIOS2 = 0x40000071 + AUDIT_ARCH_OPENRISC = 0x5c + AUDIT_ARCH_PARISC = 0xf + AUDIT_ARCH_PARISC64 = 0x8000000f + AUDIT_ARCH_PPC = 0x14 + AUDIT_ARCH_PPC64 = 0x80000015 + AUDIT_ARCH_PPC64LE = 0xc0000015 + AUDIT_ARCH_RISCV32 = 0x400000f3 + AUDIT_ARCH_RISCV64 = 0xc00000f3 + AUDIT_ARCH_S390 = 0x16 + AUDIT_ARCH_S390X = 0x80000016 + AUDIT_ARCH_SH = 0x2a + AUDIT_ARCH_SH64 = 0x8000002a + AUDIT_ARCH_SHEL = 0x4000002a + AUDIT_ARCH_SHEL64 = 0xc000002a + AUDIT_ARCH_SPARC = 0x2 + AUDIT_ARCH_SPARC64 = 0x8000002b + AUDIT_ARCH_TILEGX = 0xc00000bf + AUDIT_ARCH_TILEGX32 = 0x400000bf + AUDIT_ARCH_TILEPRO = 0x400000bc + AUDIT_ARCH_UNICORE = 0x4000006e + AUDIT_ARCH_X86_64 = 0xc000003e + AUDIT_ARCH_XTENSA = 0x5e + AUDIT_ARG0 = 0xc8 + AUDIT_ARG1 = 0xc9 + AUDIT_ARG2 = 0xca + AUDIT_ARG3 = 0xcb + AUDIT_AVC = 0x578 + AUDIT_AVC_PATH = 0x57a + AUDIT_BITMASK_SIZE = 0x40 + AUDIT_BIT_MASK = 0x8000000 + AUDIT_BIT_TEST = 0x48000000 + AUDIT_BPF = 0x536 + AUDIT_BPRM_FCAPS = 0x529 + AUDIT_CAPSET = 0x52a + AUDIT_CLASS_CHATTR = 0x2 + AUDIT_CLASS_CHATTR_32 = 0x3 + AUDIT_CLASS_DIR_WRITE = 0x0 + AUDIT_CLASS_DIR_WRITE_32 = 0x1 + AUDIT_CLASS_READ = 0x4 + AUDIT_CLASS_READ_32 = 0x5 + AUDIT_CLASS_SIGNAL = 0x8 + AUDIT_CLASS_SIGNAL_32 = 0x9 + AUDIT_CLASS_WRITE = 0x6 + AUDIT_CLASS_WRITE_32 = 0x7 + AUDIT_COMPARE_AUID_TO_EUID = 0x10 + AUDIT_COMPARE_AUID_TO_FSUID = 0xe + AUDIT_COMPARE_AUID_TO_OBJ_UID = 0x5 + AUDIT_COMPARE_AUID_TO_SUID = 0xf + AUDIT_COMPARE_EGID_TO_FSGID = 0x17 + AUDIT_COMPARE_EGID_TO_OBJ_GID = 0x4 + AUDIT_COMPARE_EGID_TO_SGID = 0x18 + AUDIT_COMPARE_EUID_TO_FSUID = 0x12 + AUDIT_COMPARE_EUID_TO_OBJ_UID = 0x3 + AUDIT_COMPARE_EUID_TO_SUID = 0x11 + AUDIT_COMPARE_FSGID_TO_OBJ_GID = 0x9 + AUDIT_COMPARE_FSUID_TO_OBJ_UID = 0x8 + AUDIT_COMPARE_GID_TO_EGID = 0x14 + AUDIT_COMPARE_GID_TO_FSGID = 0x15 + AUDIT_COMPARE_GID_TO_OBJ_GID = 0x2 + AUDIT_COMPARE_GID_TO_SGID = 0x16 + AUDIT_COMPARE_SGID_TO_FSGID = 0x19 + AUDIT_COMPARE_SGID_TO_OBJ_GID = 0x7 + AUDIT_COMPARE_SUID_TO_FSUID = 0x13 + AUDIT_COMPARE_SUID_TO_OBJ_UID = 0x6 + AUDIT_COMPARE_UID_TO_AUID = 0xa + AUDIT_COMPARE_UID_TO_EUID = 0xb + AUDIT_COMPARE_UID_TO_FSUID = 0xc + AUDIT_COMPARE_UID_TO_OBJ_UID = 0x1 + AUDIT_COMPARE_UID_TO_SUID = 0xd + AUDIT_CONFIG_CHANGE = 0x519 + AUDIT_CWD = 0x51b + AUDIT_DAEMON_ABORT = 0x4b2 + AUDIT_DAEMON_CONFIG = 0x4b3 + AUDIT_DAEMON_END = 0x4b1 + AUDIT_DAEMON_START = 0x4b0 + AUDIT_DEL = 0x3ec + AUDIT_DEL_RULE = 0x3f4 + AUDIT_DEVMAJOR = 0x64 + AUDIT_DEVMINOR = 0x65 + AUDIT_DIR = 0x6b + AUDIT_DM_CTRL = 0x53a + AUDIT_DM_EVENT = 0x53b + AUDIT_EGID = 0x6 + AUDIT_EOE = 0x528 + AUDIT_EQUAL = 0x40000000 + AUDIT_EUID = 0x2 + AUDIT_EVENT_LISTENER = 0x537 + AUDIT_EXE = 0x70 + AUDIT_EXECVE = 0x51d + AUDIT_EXIT = 0x67 + AUDIT_FAIL_PANIC = 0x2 + AUDIT_FAIL_PRINTK = 0x1 + AUDIT_FAIL_SILENT = 0x0 + AUDIT_FANOTIFY = 0x533 + AUDIT_FD_PAIR = 0x525 + AUDIT_FEATURE_BITMAP_ALL = 0x7f + AUDIT_FEATURE_BITMAP_BACKLOG_LIMIT = 0x1 + AUDIT_FEATURE_BITMAP_BACKLOG_WAIT_TIME = 0x2 + AUDIT_FEATURE_BITMAP_EXCLUDE_EXTEND = 0x8 + AUDIT_FEATURE_BITMAP_EXECUTABLE_PATH = 0x4 + AUDIT_FEATURE_BITMAP_FILTER_FS = 0x40 + AUDIT_FEATURE_BITMAP_LOST_RESET = 0x20 + AUDIT_FEATURE_BITMAP_SESSIONID_FILTER = 0x10 + AUDIT_FEATURE_CHANGE = 0x530 + AUDIT_FEATURE_LOGINUID_IMMUTABLE = 0x1 + AUDIT_FEATURE_ONLY_UNSET_LOGINUID = 0x0 + AUDIT_FEATURE_VERSION = 0x1 + AUDIT_FIELD_COMPARE = 0x6f + AUDIT_FILETYPE = 0x6c + AUDIT_FILTERKEY = 0xd2 + AUDIT_FILTER_ENTRY = 0x2 + AUDIT_FILTER_EXCLUDE = 0x5 + AUDIT_FILTER_EXIT = 0x4 + AUDIT_FILTER_FS = 0x6 + AUDIT_FILTER_PREPEND = 0x10 + AUDIT_FILTER_TASK = 0x1 + AUDIT_FILTER_TYPE = 0x5 + AUDIT_FILTER_URING_EXIT = 0x7 + AUDIT_FILTER_USER = 0x0 + AUDIT_FILTER_WATCH = 0x3 + AUDIT_FIRST_KERN_ANOM_MSG = 0x6a4 + AUDIT_FIRST_USER_MSG = 0x44c + AUDIT_FIRST_USER_MSG2 = 0x834 + AUDIT_FSGID = 0x8 + AUDIT_FSTYPE = 0x1a + AUDIT_FSUID = 0x4 + AUDIT_GET = 0x3e8 + AUDIT_GET_FEATURE = 0x3fb + AUDIT_GID = 0x5 + AUDIT_GREATER_THAN = 0x20000000 + AUDIT_GREATER_THAN_OR_EQUAL = 0x60000000 + AUDIT_INODE = 0x66 + AUDIT_INTEGRITY_DATA = 0x708 + AUDIT_INTEGRITY_EVM_XATTR = 0x70e + AUDIT_INTEGRITY_HASH = 0x70b + AUDIT_INTEGRITY_METADATA = 0x709 + AUDIT_INTEGRITY_PCR = 0x70c + AUDIT_INTEGRITY_POLICY_RULE = 0x70f + AUDIT_INTEGRITY_RULE = 0x70d + AUDIT_INTEGRITY_STATUS = 0x70a + AUDIT_IPC = 0x517 + AUDIT_IPC_SET_PERM = 0x51f + AUDIT_KERNEL = 0x7d0 + AUDIT_KERNEL_OTHER = 0x524 + AUDIT_KERN_MODULE = 0x532 + AUDIT_LAST_FEATURE = 0x1 + AUDIT_LAST_KERN_ANOM_MSG = 0x707 + AUDIT_LAST_USER_MSG = 0x4af + AUDIT_LAST_USER_MSG2 = 0xbb7 + AUDIT_LESS_THAN = 0x10000000 + AUDIT_LESS_THAN_OR_EQUAL = 0x50000000 + AUDIT_LIST = 0x3ea + AUDIT_LIST_RULES = 0x3f5 + AUDIT_LOGIN = 0x3ee + AUDIT_LOGINUID = 0x9 + AUDIT_LOGINUID_SET = 0x18 + AUDIT_MAC_CALIPSO_ADD = 0x58a + AUDIT_MAC_CALIPSO_DEL = 0x58b + AUDIT_MAC_CIPSOV4_ADD = 0x57f + AUDIT_MAC_CIPSOV4_DEL = 0x580 + AUDIT_MAC_CONFIG_CHANGE = 0x57d + AUDIT_MAC_IPSEC_ADDSA = 0x583 + AUDIT_MAC_IPSEC_ADDSPD = 0x585 + AUDIT_MAC_IPSEC_DELSA = 0x584 + AUDIT_MAC_IPSEC_DELSPD = 0x586 + AUDIT_MAC_IPSEC_EVENT = 0x587 + AUDIT_MAC_MAP_ADD = 0x581 + AUDIT_MAC_MAP_DEL = 0x582 + AUDIT_MAC_POLICY_LOAD = 0x57b + AUDIT_MAC_STATUS = 0x57c + AUDIT_MAC_UNLBL_ALLOW = 0x57e + AUDIT_MAC_UNLBL_STCADD = 0x588 + AUDIT_MAC_UNLBL_STCDEL = 0x589 + AUDIT_MAKE_EQUIV = 0x3f7 + AUDIT_MAX_FIELDS = 0x40 + AUDIT_MAX_FIELD_COMPARE = 0x19 + AUDIT_MAX_KEY_LEN = 0x100 + AUDIT_MESSAGE_TEXT_MAX = 0x2170 + AUDIT_MMAP = 0x52b + AUDIT_MQ_GETSETATTR = 0x523 + AUDIT_MQ_NOTIFY = 0x522 + AUDIT_MQ_OPEN = 0x520 + AUDIT_MQ_SENDRECV = 0x521 + AUDIT_MSGTYPE = 0xc + AUDIT_NEGATE = 0x80000000 + AUDIT_NETFILTER_CFG = 0x52d + AUDIT_NETFILTER_PKT = 0x52c + AUDIT_NEVER = 0x0 + AUDIT_NLGRP_MAX = 0x1 + AUDIT_NOT_EQUAL = 0x30000000 + AUDIT_NR_FILTERS = 0x8 + AUDIT_OBJ_GID = 0x6e + AUDIT_OBJ_LEV_HIGH = 0x17 + AUDIT_OBJ_LEV_LOW = 0x16 + AUDIT_OBJ_PID = 0x526 + AUDIT_OBJ_ROLE = 0x14 + AUDIT_OBJ_TYPE = 0x15 + AUDIT_OBJ_UID = 0x6d + AUDIT_OBJ_USER = 0x13 + AUDIT_OPENAT2 = 0x539 + AUDIT_OPERATORS = 0x78000000 + AUDIT_PATH = 0x516 + AUDIT_PERM = 0x6a + AUDIT_PERM_ATTR = 0x8 + AUDIT_PERM_EXEC = 0x1 + AUDIT_PERM_READ = 0x4 + AUDIT_PERM_WRITE = 0x2 + AUDIT_PERS = 0xa + AUDIT_PID = 0x0 + AUDIT_POSSIBLE = 0x1 + AUDIT_PPID = 0x12 + AUDIT_PROCTITLE = 0x52f + AUDIT_REPLACE = 0x531 + AUDIT_SADDR_FAM = 0x71 + AUDIT_SECCOMP = 0x52e + AUDIT_SELINUX_ERR = 0x579 + AUDIT_SESSIONID = 0x19 + AUDIT_SET = 0x3e9 + AUDIT_SET_FEATURE = 0x3fa + AUDIT_SGID = 0x7 + AUDIT_SID_UNSET = 0xffffffff + AUDIT_SIGNAL_INFO = 0x3f2 + AUDIT_SOCKADDR = 0x51a + AUDIT_SOCKETCALL = 0x518 + AUDIT_STATUS_BACKLOG_LIMIT = 0x10 + AUDIT_STATUS_BACKLOG_WAIT_TIME = 0x20 + AUDIT_STATUS_BACKLOG_WAIT_TIME_ACTUAL = 0x80 + AUDIT_STATUS_ENABLED = 0x1 + AUDIT_STATUS_FAILURE = 0x2 + AUDIT_STATUS_LOST = 0x40 + AUDIT_STATUS_PID = 0x4 + AUDIT_STATUS_RATE_LIMIT = 0x8 + AUDIT_SUBJ_CLR = 0x11 + AUDIT_SUBJ_ROLE = 0xe + AUDIT_SUBJ_SEN = 0x10 + AUDIT_SUBJ_TYPE = 0xf + AUDIT_SUBJ_USER = 0xd + AUDIT_SUCCESS = 0x68 + AUDIT_SUID = 0x3 + AUDIT_SYSCALL = 0x514 + AUDIT_SYSCALL_CLASSES = 0x10 + AUDIT_TIME_ADJNTPVAL = 0x535 + AUDIT_TIME_INJOFFSET = 0x534 + AUDIT_TRIM = 0x3f6 + AUDIT_TTY = 0x527 + AUDIT_TTY_GET = 0x3f8 + AUDIT_TTY_SET = 0x3f9 + AUDIT_UID = 0x1 + AUDIT_UID_UNSET = 0xffffffff + AUDIT_UNUSED_BITS = 0x7fffc00 + AUDIT_URINGOP = 0x538 + AUDIT_USER = 0x3ed + AUDIT_USER_AVC = 0x453 + AUDIT_USER_TTY = 0x464 + AUDIT_VERSION_BACKLOG_LIMIT = 0x1 + AUDIT_VERSION_BACKLOG_WAIT_TIME = 0x2 + AUDIT_VERSION_LATEST = 0x7f + AUDIT_WATCH = 0x69 + AUDIT_WATCH_INS = 0x3ef + AUDIT_WATCH_LIST = 0x3f1 + AUDIT_WATCH_REM = 0x3f0 AUTOFS_SUPER_MAGIC = 0x187 B0 = 0x0 B110 = 0x3 @@ -184,6 +484,7 @@ const ( BPF_F_ALLOW_MULTI = 0x2 BPF_F_ALLOW_OVERRIDE = 0x1 BPF_F_ANY_ALIGNMENT = 0x2 + BPF_F_KPROBE_MULTI_RETURN = 0x1 BPF_F_QUERY_EFFECTIVE = 0x1 BPF_F_REPLACE = 0x4 BPF_F_SLEEPABLE = 0x10 @@ -191,6 +492,8 @@ const ( BPF_F_TEST_RND_HI32 = 0x4 BPF_F_TEST_RUN_ON_CPU = 0x1 BPF_F_TEST_STATE_FREQ = 0x8 + BPF_F_TEST_XDP_LIVE_FRAMES = 0x2 + BPF_F_XDP_HAS_FRAGS = 0x20 BPF_H = 0x8 BPF_IMM = 0x0 BPF_IND = 0x40 @@ -517,9 +820,9 @@ const ( DM_UUID_FLAG = 0x4000 DM_UUID_LEN = 0x81 DM_VERSION = 0xc138fd00 - DM_VERSION_EXTRA = "-ioctl (2021-03-22)" + DM_VERSION_EXTRA = "-ioctl (2022-02-22)" DM_VERSION_MAJOR = 0x4 - DM_VERSION_MINOR = 0x2d + DM_VERSION_MINOR = 0x2e DM_VERSION_PATCHLEVEL = 0x0 DT_BLK = 0x6 DT_CHR = 0x2 @@ -535,6 +838,55 @@ const ( EFD_SEMAPHORE = 0x1 EFIVARFS_MAGIC = 0xde5e81e4 EFS_SUPER_MAGIC = 0x414a53 + EM_386 = 0x3 + EM_486 = 0x6 + EM_68K = 0x4 + EM_860 = 0x7 + EM_88K = 0x5 + EM_AARCH64 = 0xb7 + EM_ALPHA = 0x9026 + EM_ALTERA_NIOS2 = 0x71 + EM_ARCOMPACT = 0x5d + EM_ARCV2 = 0xc3 + EM_ARM = 0x28 + EM_BLACKFIN = 0x6a + EM_BPF = 0xf7 + EM_CRIS = 0x4c + EM_CSKY = 0xfc + EM_CYGNUS_M32R = 0x9041 + EM_CYGNUS_MN10300 = 0xbeef + EM_FRV = 0x5441 + EM_H8_300 = 0x2e + EM_HEXAGON = 0xa4 + EM_IA_64 = 0x32 + EM_LOONGARCH = 0x102 + EM_M32 = 0x1 + EM_M32R = 0x58 + EM_MICROBLAZE = 0xbd + EM_MIPS = 0x8 + EM_MIPS_RS3_LE = 0xa + EM_MIPS_RS4_BE = 0xa + EM_MN10300 = 0x59 + EM_NDS32 = 0xa7 + EM_NONE = 0x0 + EM_OPENRISC = 0x5c + EM_PARISC = 0xf + EM_PPC = 0x14 + EM_PPC64 = 0x15 + EM_RISCV = 0xf3 + EM_S390 = 0x16 + EM_S390_OLD = 0xa390 + EM_SH = 0x2a + EM_SPARC = 0x2 + EM_SPARC32PLUS = 0x12 + EM_SPARCV9 = 0x2b + EM_SPU = 0x17 + EM_TILEGX = 0xbf + EM_TILEPRO = 0xbc + EM_TI_C6000 = 0x8c + EM_UNICORE = 0x6e + EM_X86_64 = 0x3e + EM_XTENSA = 0x5e ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 @@ -712,6 +1064,7 @@ const ( ETH_P_EDSA = 0xdada ETH_P_ERSPAN = 0x88be ETH_P_ERSPAN2 = 0x22eb + ETH_P_ETHERCAT = 0x88a4 ETH_P_FCOE = 0x8906 ETH_P_FIP = 0x8914 ETH_P_HDLC = 0x19 @@ -749,6 +1102,7 @@ const ( ETH_P_PPP_MP = 0x8 ETH_P_PPP_SES = 0x8864 ETH_P_PREAUTH = 0x88c7 + ETH_P_PROFINET = 0x8892 ETH_P_PRP = 0x88fb ETH_P_PUP = 0x200 ETH_P_PUPAT = 0x201 @@ -837,6 +1191,7 @@ const ( FAN_FS_ERROR = 0x8000 FAN_MARK_ADD = 0x1 FAN_MARK_DONT_FOLLOW = 0x4 + FAN_MARK_EVICTABLE = 0x200 FAN_MARK_FILESYSTEM = 0x100 FAN_MARK_FLUSH = 0x80 FAN_MARK_IGNORED_MASK = 0x20 @@ -1055,7 +1410,7 @@ const ( IFA_F_STABLE_PRIVACY = 0x800 IFA_F_TEMPORARY = 0x1 IFA_F_TENTATIVE = 0x40 - IFA_MAX = 0xa + IFA_MAX = 0xb IFF_ALLMULTI = 0x200 IFF_ATTACH_QUEUE = 0x200 IFF_AUTOMEDIA = 0x4000 @@ -1310,6 +1665,7 @@ const ( KEXEC_ARCH_ARM = 0x280000 KEXEC_ARCH_DEFAULT = 0x0 KEXEC_ARCH_IA_64 = 0x320000 + KEXEC_ARCH_LOONGARCH = 0x1020000 KEXEC_ARCH_MASK = 0xffff0000 KEXEC_ARCH_MIPS = 0x80000 KEXEC_ARCH_MIPS_LE = 0xa0000 @@ -1402,6 +1758,7 @@ const ( LANDLOCK_ACCESS_FS_MAKE_SYM = 0x1000 LANDLOCK_ACCESS_FS_READ_DIR = 0x8 LANDLOCK_ACCESS_FS_READ_FILE = 0x4 + LANDLOCK_ACCESS_FS_REFER = 0x2000 LANDLOCK_ACCESS_FS_REMOVE_DIR = 0x10 LANDLOCK_ACCESS_FS_REMOVE_FILE = 0x20 LANDLOCK_ACCESS_FS_WRITE_FILE = 0x2 @@ -1757,6 +2114,7 @@ const ( NLM_F_ACK_TLVS = 0x200 NLM_F_APPEND = 0x800 NLM_F_ATOMIC = 0x400 + NLM_F_BULK = 0x200 NLM_F_CAPPED = 0x100 NLM_F_CREATE = 0x400 NLM_F_DUMP = 0x300 @@ -2074,6 +2432,11 @@ const ( PR_SET_UNALIGN = 0x6 PR_SET_VMA = 0x53564d41 PR_SET_VMA_ANON_NAME = 0x0 + PR_SME_GET_VL = 0x40 + PR_SME_SET_VL = 0x3f + PR_SME_SET_VL_ONEXEC = 0x40000 + PR_SME_VL_INHERIT = 0x20000 + PR_SME_VL_LEN_MASK = 0xffff PR_SPEC_DISABLE = 0x4 PR_SPEC_DISABLE_NOEXEC = 0x10 PR_SPEC_ENABLE = 0x2 @@ -2226,8 +2589,9 @@ const ( RTC_FEATURE_ALARM = 0x0 RTC_FEATURE_ALARM_RES_2S = 0x3 RTC_FEATURE_ALARM_RES_MINUTE = 0x1 + RTC_FEATURE_ALARM_WAKEUP_ONLY = 0x7 RTC_FEATURE_BACKUP_SWITCH_MODE = 0x6 - RTC_FEATURE_CNT = 0x7 + RTC_FEATURE_CNT = 0x8 RTC_FEATURE_CORRECTION = 0x5 RTC_FEATURE_NEED_WEEK_DAY = 0x2 RTC_FEATURE_UPDATE_INTERRUPT = 0x4 @@ -2301,6 +2665,7 @@ const ( RTM_DELRULE = 0x21 RTM_DELTCLASS = 0x29 RTM_DELTFILTER = 0x2d + RTM_DELTUNNEL = 0x79 RTM_DELVLAN = 0x71 RTM_F_CLONED = 0x200 RTM_F_EQUALIZE = 0x400 @@ -2333,8 +2698,9 @@ const ( RTM_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e + RTM_GETTUNNEL = 0x7a RTM_GETVLAN = 0x72 - RTM_MAX = 0x77 + RTM_MAX = 0x7b RTM_NEWACTION = 0x30 RTM_NEWADDR = 0x14 RTM_NEWADDRLABEL = 0x48 @@ -2358,11 +2724,13 @@ const ( RTM_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c - RTM_NR_FAMILIES = 0x1a - RTM_NR_MSGTYPES = 0x68 + RTM_NEWTUNNEL = 0x78 + RTM_NR_FAMILIES = 0x1b + RTM_NR_MSGTYPES = 0x6c RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 + RTM_SETSTATS = 0x5f RTNH_ALIGNTO = 0x4 RTNH_COMPARE_MASK = 0x59 RTNH_F_DEAD = 0x1 @@ -2543,6 +2911,9 @@ const ( SOCK_RDM = 0x4 SOCK_SEQPACKET = 0x5 SOCK_SNDBUF_LOCK = 0x1 + SOCK_TXREHASH_DEFAULT = 0xff + SOCK_TXREHASH_DISABLED = 0x0 + SOCK_TXREHASH_ENABLED = 0x1 SOL_AAL = 0x109 SOL_ALG = 0x117 SOL_ATM = 0x108 @@ -2558,6 +2929,8 @@ const ( SOL_IUCV = 0x115 SOL_KCM = 0x119 SOL_LLC = 0x10c + SOL_MCTP = 0x11d + SOL_MPTCP = 0x11c SOL_NETBEUI = 0x10b SOL_NETLINK = 0x10e SOL_NFC = 0x118 @@ -2567,6 +2940,7 @@ const ( SOL_RAW = 0xff SOL_RDS = 0x114 SOL_RXRPC = 0x110 + SOL_SMC = 0x11e SOL_TCP = 0x6 SOL_TIPC = 0x10f SOL_TLS = 0x11a @@ -2673,7 +3047,7 @@ const ( TASKSTATS_GENL_NAME = "TASKSTATS" TASKSTATS_GENL_VERSION = 0x1 TASKSTATS_TYPE_MAX = 0x6 - TASKSTATS_VERSION = 0xb + TASKSTATS_VERSION = 0xd TCIFLUSH = 0x0 TCIOFF = 0x2 TCIOFLUSH = 0x2 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 234fd4a..36c0dfc 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -1,11 +1,11 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/include -m32 +// mkerrors.sh -Wall -Werror -static -I/tmp/386/include -m32 // Code generated by the command above; see README.md. DO NOT EDIT. //go:build 386 && linux // +build 386,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/386/include -m32 _const.go package unix @@ -326,6 +326,7 @@ const ( SO_RCVBUF = 0x8 SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 + SO_RCVMARK = 0x4b SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 @@ -350,6 +351,7 @@ const ( SO_TIMESTAMPNS_NEW = 0x40 SO_TIMESTAMPNS_OLD = 0x23 SO_TIMESTAMP_NEW = 0x3f + SO_TXREHASH = 0x4a SO_TXTIME = 0x3d SO_TYPE = 0x3 SO_WIFI_STATUS = 0x29 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 58619b7..4ff9427 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -1,11 +1,11 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/include -m64 +// mkerrors.sh -Wall -Werror -static -I/tmp/amd64/include -m64 // Code generated by the command above; see README.md. DO NOT EDIT. //go:build amd64 && linux // +build amd64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/amd64/include -m64 _const.go package unix @@ -327,6 +327,7 @@ const ( SO_RCVBUF = 0x8 SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 + SO_RCVMARK = 0x4b SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 @@ -351,6 +352,7 @@ const ( SO_TIMESTAMPNS_NEW = 0x40 SO_TIMESTAMPNS_OLD = 0x23 SO_TIMESTAMP_NEW = 0x3f + SO_TXREHASH = 0x4a SO_TXTIME = 0x3d SO_TYPE = 0x3 SO_WIFI_STATUS = 0x29 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 3a64ff5..3eaa0fb 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -1,11 +1,11 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/include +// mkerrors.sh -Wall -Werror -static -I/tmp/arm/include // Code generated by the command above; see README.md. DO NOT EDIT. //go:build arm && linux // +build arm,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/arm/include _const.go package unix @@ -333,6 +333,7 @@ const ( SO_RCVBUF = 0x8 SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 + SO_RCVMARK = 0x4b SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 @@ -357,6 +358,7 @@ const ( SO_TIMESTAMPNS_NEW = 0x40 SO_TIMESTAMPNS_OLD = 0x23 SO_TIMESTAMP_NEW = 0x3f + SO_TXREHASH = 0x4a SO_TXTIME = 0x3d SO_TYPE = 0x3 SO_WIFI_STATUS = 0x29 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 abe0b92..d7995bd 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -1,11 +1,11 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/include -fsigned-char +// mkerrors.sh -Wall -Werror -static -I/tmp/arm64/include -fsigned-char // Code generated by the command above; see README.md. DO NOT EDIT. //go:build arm64 && linux // +build arm64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/arm64/include -fsigned-char _const.go package unix @@ -323,6 +323,7 @@ const ( SO_RCVBUF = 0x8 SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 + SO_RCVMARK = 0x4b SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 @@ -347,6 +348,7 @@ const ( SO_TIMESTAMPNS_NEW = 0x40 SO_TIMESTAMPNS_OLD = 0x23 SO_TIMESTAMP_NEW = 0x3f + SO_TXREHASH = 0x4a SO_TXTIME = 0x3d SO_TYPE = 0x3 SO_WIFI_STATUS = 0x29 @@ -511,6 +513,7 @@ const ( WORDSIZE = 0x40 XCASE = 0x4 XTABS = 0x1800 + ZA_MAGIC = 0x54366345 _HIDIOCGRAWNAME = 0x80804804 _HIDIOCGRAWPHYS = 0x80404805 _HIDIOCGRAWUNIQ = 0x80404808 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 14d7a84..179bffb 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -1,11 +1,11 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/include +// mkerrors.sh -Wall -Werror -static -I/tmp/mips/include // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mips && linux // +build mips,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/mips/include _const.go package unix @@ -326,6 +326,7 @@ const ( SO_RCVBUF = 0x1002 SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x1004 + SO_RCVMARK = 0x4b SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 @@ -351,6 +352,7 @@ const ( SO_TIMESTAMPNS_NEW = 0x40 SO_TIMESTAMPNS_OLD = 0x23 SO_TIMESTAMP_NEW = 0x3f + SO_TXREHASH = 0x4a SO_TXTIME = 0x3d SO_TYPE = 0x1008 SO_WIFI_STATUS = 0x29 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 99e7c4a..1fba17b 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -1,11 +1,11 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/include +// mkerrors.sh -Wall -Werror -static -I/tmp/mips64/include // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mips64 && linux // +build mips64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/mips64/include _const.go package unix @@ -326,6 +326,7 @@ const ( SO_RCVBUF = 0x1002 SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x1004 + SO_RCVMARK = 0x4b SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 @@ -351,6 +352,7 @@ const ( SO_TIMESTAMPNS_NEW = 0x40 SO_TIMESTAMPNS_OLD = 0x23 SO_TIMESTAMP_NEW = 0x3f + SO_TXREHASH = 0x4a SO_TXTIME = 0x3d SO_TYPE = 0x1008 SO_WIFI_STATUS = 0x29 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 496364c..b77dde3 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -1,11 +1,11 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/include +// mkerrors.sh -Wall -Werror -static -I/tmp/mips64le/include // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mips64le && linux // +build mips64le,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/mips64le/include _const.go package unix @@ -326,6 +326,7 @@ const ( SO_RCVBUF = 0x1002 SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x1004 + SO_RCVMARK = 0x4b SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 @@ -351,6 +352,7 @@ const ( SO_TIMESTAMPNS_NEW = 0x40 SO_TIMESTAMPNS_OLD = 0x23 SO_TIMESTAMP_NEW = 0x3f + SO_TXREHASH = 0x4a SO_TXTIME = 0x3d SO_TYPE = 0x1008 SO_WIFI_STATUS = 0x29 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 3e40830..78c6c75 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -1,11 +1,11 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/include +// mkerrors.sh -Wall -Werror -static -I/tmp/mipsle/include // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mipsle && linux // +build mipsle,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/mipsle/include _const.go package unix @@ -326,6 +326,7 @@ const ( SO_RCVBUF = 0x1002 SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x1004 + SO_RCVMARK = 0x4b SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 @@ -351,6 +352,7 @@ const ( SO_TIMESTAMPNS_NEW = 0x40 SO_TIMESTAMPNS_OLD = 0x23 SO_TIMESTAMP_NEW = 0x3f + SO_TXREHASH = 0x4a SO_TXTIME = 0x3d SO_TYPE = 0x1008 SO_WIFI_STATUS = 0x29 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 1151a7d..1c0d31f 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go @@ -1,11 +1,11 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/include +// mkerrors.sh -Wall -Werror -static -I/tmp/ppc/include // Code generated by the command above; see README.md. DO NOT EDIT. //go:build ppc && linux // +build ppc,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/ppc/include _const.go package unix @@ -381,6 +381,7 @@ const ( SO_RCVBUF = 0x8 SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x10 + SO_RCVMARK = 0x4b SO_RCVTIMEO = 0x12 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x12 @@ -405,6 +406,7 @@ const ( SO_TIMESTAMPNS_NEW = 0x40 SO_TIMESTAMPNS_OLD = 0x23 SO_TIMESTAMP_NEW = 0x3f + SO_TXREHASH = 0x4a SO_TXTIME = 0x3d SO_TYPE = 0x3 SO_WIFI_STATUS = 0x29 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 ed17f24..959dd9b 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -1,11 +1,11 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/include +// mkerrors.sh -Wall -Werror -static -I/tmp/ppc64/include // Code generated by the command above; see README.md. DO NOT EDIT. //go:build ppc64 && linux // +build ppc64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/ppc64/include _const.go package unix @@ -385,6 +385,7 @@ const ( SO_RCVBUF = 0x8 SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x10 + SO_RCVMARK = 0x4b SO_RCVTIMEO = 0x12 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x12 @@ -409,6 +410,7 @@ const ( SO_TIMESTAMPNS_NEW = 0x40 SO_TIMESTAMPNS_OLD = 0x23 SO_TIMESTAMP_NEW = 0x3f + SO_TXREHASH = 0x4a SO_TXTIME = 0x3d SO_TYPE = 0x3 SO_WIFI_STATUS = 0x29 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 d84a37c..5a873cd 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -1,11 +1,11 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/include +// mkerrors.sh -Wall -Werror -static -I/tmp/ppc64le/include // Code generated by the command above; see README.md. DO NOT EDIT. //go:build ppc64le && linux // +build ppc64le,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/ppc64le/include _const.go package unix @@ -385,6 +385,7 @@ const ( SO_RCVBUF = 0x8 SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x10 + SO_RCVMARK = 0x4b SO_RCVTIMEO = 0x12 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x12 @@ -409,6 +410,7 @@ const ( SO_TIMESTAMPNS_NEW = 0x40 SO_TIMESTAMPNS_OLD = 0x23 SO_TIMESTAMP_NEW = 0x3f + SO_TXREHASH = 0x4a SO_TXTIME = 0x3d SO_TYPE = 0x3 SO_WIFI_STATUS = 0x29 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 5cafba8..e336d14 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -1,11 +1,11 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/include +// mkerrors.sh -Wall -Werror -static -I/tmp/riscv64/include // Code generated by the command above; see README.md. DO NOT EDIT. //go:build riscv64 && linux // +build riscv64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/riscv64/include _const.go package unix @@ -314,6 +314,7 @@ const ( SO_RCVBUF = 0x8 SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 + SO_RCVMARK = 0x4b SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 @@ -338,6 +339,7 @@ const ( SO_TIMESTAMPNS_NEW = 0x40 SO_TIMESTAMPNS_OLD = 0x23 SO_TIMESTAMP_NEW = 0x3f + SO_TXREHASH = 0x4a SO_TXTIME = 0x3d SO_TYPE = 0x3 SO_WIFI_STATUS = 0x29 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 6d122da..390c01d 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -1,11 +1,11 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/include -fsigned-char +// mkerrors.sh -Wall -Werror -static -I/tmp/s390x/include -fsigned-char // Code generated by the command above; see README.md. DO NOT EDIT. //go:build s390x && linux // +build s390x,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/s390x/include -fsigned-char _const.go package unix @@ -389,6 +389,7 @@ const ( SO_RCVBUF = 0x8 SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 + SO_RCVMARK = 0x4b SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 @@ -413,6 +414,7 @@ const ( SO_TIMESTAMPNS_NEW = 0x40 SO_TIMESTAMPNS_OLD = 0x23 SO_TIMESTAMP_NEW = 0x3f + SO_TXREHASH = 0x4a SO_TXTIME = 0x3d SO_TYPE = 0x3 SO_WIFI_STATUS = 0x29 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 6bd19e5..98a6e5f 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -1,11 +1,11 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/include +// mkerrors.sh -Wall -Werror -static -I/tmp/sparc64/include // Code generated by the command above; see README.md. DO NOT EDIT. //go:build sparc64 && linux // +build sparc64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/sparc64/include _const.go package unix @@ -380,6 +380,7 @@ const ( SO_RCVBUF = 0x1002 SO_RCVBUFFORCE = 0x100b SO_RCVLOWAT = 0x800 + SO_RCVMARK = 0x54 SO_RCVTIMEO = 0x2000 SO_RCVTIMEO_NEW = 0x44 SO_RCVTIMEO_OLD = 0x2000 @@ -404,6 +405,7 @@ const ( SO_TIMESTAMPNS_NEW = 0x42 SO_TIMESTAMPNS_OLD = 0x21 SO_TIMESTAMP_NEW = 0x46 + SO_TXREHASH = 0x53 SO_TXTIME = 0x3f SO_TYPE = 0x1008 SO_WIFI_STATUS = 0x25 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s index d6c3e25..f5bb40e 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s @@ -1,4 +1,4 @@ -// go run mkasm_darwin.go amd64 +// go run mkasm.go darwin amd64 // Code generated by the command above; DO NOT EDIT. //go:build go1.13 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 8793765..467deed 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -1643,6 +1643,30 @@ var libc_mknod_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Open(path string, mode int, perm uint32) (fd int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) 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 8da90cf..b41467a 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s @@ -1,4 +1,4 @@ -// go run mkasm_darwin.go amd64 +// go run mkasm.go darwin amd64 // Code generated by the command above; DO NOT EDIT. //go:build go1.12 @@ -600,6 +600,12 @@ TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $8 DATA ·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) + +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) + TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_open(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s index 3579897..0c3f76b 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s @@ -1,4 +1,4 @@ -// go run mkasm_darwin.go arm64 +// go run mkasm.go darwin arm64 // Code generated by the command above; DO NOT EDIT. //go:build go1.13 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 f47eedd..35938d3 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -1643,6 +1643,30 @@ var libc_mknod_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Open(path string, mode int, perm uint32) (fd int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) 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 4d26f7d..e1f9204 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s @@ -1,4 +1,4 @@ -// go run mkasm_darwin.go arm64 +// go run mkasm.go darwin arm64 // Code generated by the command above; DO NOT EDIT. //go:build go1.12 @@ -600,6 +600,12 @@ TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $8 DATA ·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) + +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) + TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_open(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go index e9d9997..039c4aa 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go @@ -912,7 +912,7 @@ func Fpathconf(fd int, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func fstat(fd int, stat *stat_freebsd11_t) (err error) { +func Fstat(fd int, stat *Stat_t) (err error) { _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) @@ -922,17 +922,7 @@ func fstat(fd int, stat *stat_freebsd11_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func fstat_freebsd12(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) { +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { @@ -947,22 +937,7 @@ func fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FSTATAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fstatfs(fd int, stat *statfs_freebsd11_t) (err error) { +func Fstatfs(fd int, stat *Statfs_t) (err error) { _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) @@ -972,16 +947,6 @@ func fstatfs(fd int, stat *statfs_freebsd11_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fsync(fd int) (err error) { _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) if e1 != 0 { @@ -1002,7 +967,7 @@ func Ftruncate(fd int, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { +func getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { _p0 = unsafe.Pointer(&buf[0]) @@ -1019,23 +984,6 @@ func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func getdirentries_freebsd12(fd int, buf []byte, basep *uint64) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_GETDIRENTRIES_FREEBSD12, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Getdtablesize() (size int) { r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) size = int(r0) @@ -1257,21 +1205,6 @@ func Listen(s int, backlog int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func lstat(path string, stat *stat_freebsd11_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Mkdir(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1317,43 +1250,13 @@ func Mkfifo(path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func mknod(path string, mode uint32, dev int) (err error) { +func Mknodat(fd int, path string, mode uint32, dev uint64) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mknodat(fd int, path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_MKNODAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), uintptr(dev>>32), 0) + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), uintptr(dev>>32), 0) if e1 != 0 { err = errnoErr(e1) } @@ -1753,22 +1656,7 @@ func Setuid(uid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func stat(path string, stat *stat_freebsd11_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func statfs(path string, stat *statfs_freebsd11_t) (err error) { +func Statfs(path string, stat *Statfs_t) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { @@ -1783,21 +1671,6 @@ func statfs(path string, stat *statfs_freebsd11_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func statfs_freebsd12(path string, stat *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATFS_FREEBSD12, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Symlink(path string, link string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go index edd373b..0535d3c 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go @@ -912,7 +912,7 @@ func Fpathconf(fd int, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func fstat(fd int, stat *stat_freebsd11_t) (err error) { +func Fstat(fd int, stat *Stat_t) (err error) { _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) @@ -922,17 +922,7 @@ func fstat(fd int, stat *stat_freebsd11_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func fstat_freebsd12(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) { +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { @@ -947,22 +937,7 @@ func fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FSTATAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fstatfs(fd int, stat *statfs_freebsd11_t) (err error) { +func Fstatfs(fd int, stat *Statfs_t) (err error) { _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) @@ -972,16 +947,6 @@ func fstatfs(fd int, stat *statfs_freebsd11_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fsync(fd int) (err error) { _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) if e1 != 0 { @@ -1002,7 +967,7 @@ func Ftruncate(fd int, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { +func getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { _p0 = unsafe.Pointer(&buf[0]) @@ -1019,23 +984,6 @@ func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func getdirentries_freebsd12(fd int, buf []byte, basep *uint64) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_GETDIRENTRIES_FREEBSD12, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Getdtablesize() (size int) { r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) size = int(r0) @@ -1257,21 +1205,6 @@ func Listen(s int, backlog int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func lstat(path string, stat *stat_freebsd11_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Mkdir(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1317,22 +1250,7 @@ func Mkfifo(path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func mknod(path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mknodat(fd int, path string, mode uint32, dev int) (err error) { +func Mknodat(fd int, path string, mode uint32, dev uint64) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { @@ -1347,21 +1265,6 @@ func mknodat(fd int, path string, mode uint32, dev int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_MKNODAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { @@ -1753,22 +1656,7 @@ func Setuid(uid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func stat(path string, stat *stat_freebsd11_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func statfs(path string, stat *statfs_freebsd11_t) (err error) { +func Statfs(path string, stat *Statfs_t) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { @@ -1783,21 +1671,6 @@ func statfs(path string, stat *statfs_freebsd11_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func statfs_freebsd12(path string, stat *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATFS_FREEBSD12, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Symlink(path string, link string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go index 82e9764..1018b52 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go @@ -351,22 +351,6 @@ func Munlockall() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { - _p0 = unsafe.Pointer(&mib[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func pipe2(p *[2]_C_int, flags int) (err error) { _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) if e1 != 0 { @@ -404,6 +388,22 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ptrace(request int, pid int, addr uintptr, data int) (err error) { _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) if e1 != 0 { @@ -912,7 +912,7 @@ func Fpathconf(fd int, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func fstat(fd int, stat *stat_freebsd11_t) (err error) { +func Fstat(fd int, stat *Stat_t) (err error) { _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) @@ -922,17 +922,7 @@ func fstat(fd int, stat *stat_freebsd11_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func fstat_freebsd12(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) { +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { @@ -947,22 +937,7 @@ func fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FSTATAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fstatfs(fd int, stat *statfs_freebsd11_t) (err error) { +func Fstatfs(fd int, stat *Statfs_t) (err error) { _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) @@ -972,16 +947,6 @@ func fstatfs(fd int, stat *statfs_freebsd11_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fsync(fd int) (err error) { _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) if e1 != 0 { @@ -1002,7 +967,7 @@ func Ftruncate(fd int, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { +func getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { _p0 = unsafe.Pointer(&buf[0]) @@ -1019,23 +984,6 @@ func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func getdirentries_freebsd12(fd int, buf []byte, basep *uint64) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_GETDIRENTRIES_FREEBSD12, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Getdtablesize() (size int) { r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) size = int(r0) @@ -1257,21 +1205,6 @@ func Listen(s int, backlog int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func lstat(path string, stat *stat_freebsd11_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Mkdir(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1317,43 +1250,13 @@ func Mkfifo(path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func mknod(path string, mode uint32, dev int) (err error) { +func Mknodat(fd int, path string, mode uint32, dev uint64) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mknodat(fd int, path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_MKNODAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, uintptr(dev), uintptr(dev>>32)) if e1 != 0 { err = errnoErr(e1) } @@ -1753,22 +1656,7 @@ func Setuid(uid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func stat(path string, stat *stat_freebsd11_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func statfs(path string, stat *statfs_freebsd11_t) (err error) { +func Statfs(path string, stat *Statfs_t) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { @@ -1783,21 +1671,6 @@ func statfs(path string, stat *statfs_freebsd11_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func statfs_freebsd12(path string, stat *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATFS_FREEBSD12, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Symlink(path string, link string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go index a6479ac..3802f4b 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go @@ -912,7 +912,7 @@ func Fpathconf(fd int, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func fstat(fd int, stat *stat_freebsd11_t) (err error) { +func Fstat(fd int, stat *Stat_t) (err error) { _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) @@ -922,17 +922,7 @@ func fstat(fd int, stat *stat_freebsd11_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func fstat_freebsd12(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) { +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { @@ -947,22 +937,7 @@ func fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FSTATAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fstatfs(fd int, stat *statfs_freebsd11_t) (err error) { +func Fstatfs(fd int, stat *Statfs_t) (err error) { _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) @@ -972,16 +947,6 @@ func fstatfs(fd int, stat *statfs_freebsd11_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fsync(fd int) (err error) { _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) if e1 != 0 { @@ -1002,7 +967,7 @@ func Ftruncate(fd int, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { +func getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { _p0 = unsafe.Pointer(&buf[0]) @@ -1019,23 +984,6 @@ func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func getdirentries_freebsd12(fd int, buf []byte, basep *uint64) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_GETDIRENTRIES_FREEBSD12, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Getdtablesize() (size int) { r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) size = int(r0) @@ -1257,21 +1205,6 @@ func Listen(s int, backlog int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func lstat(path string, stat *stat_freebsd11_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Mkdir(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1317,22 +1250,7 @@ func Mkfifo(path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func mknod(path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mknodat(fd int, path string, mode uint32, dev int) (err error) { +func Mknodat(fd int, path string, mode uint32, dev uint64) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { @@ -1347,21 +1265,6 @@ func mknodat(fd int, path string, mode uint32, dev int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_MKNODAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { @@ -1753,22 +1656,7 @@ func Setuid(uid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func stat(path string, stat *stat_freebsd11_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func statfs(path string, stat *statfs_freebsd11_t) (err error) { +func Statfs(path string, stat *Statfs_t) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { @@ -1783,21 +1671,6 @@ func statfs(path string, stat *statfs_freebsd11_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func statfs_freebsd12(path string, stat *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATFS_FREEBSD12, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Symlink(path string, link string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/vendor/golang.org/x/sys/unix/zsyscall_linux.go index 198b4ac..bc4a275 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux.go @@ -828,6 +828,49 @@ func Fsync(fd int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fsmount(fd int, flags int, mountAttrs int) (fsfd int, err error) { + r0, _, e1 := Syscall(SYS_FSMOUNT, uintptr(fd), uintptr(flags), uintptr(mountAttrs)) + fsfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsopen(fsName string, flags int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsName) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_FSOPEN, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fspick(dirfd int, pathName string, flags int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathName) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_FSPICK, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Getdents(fd int, buf []byte) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go index 88af526..c81b0ad 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go @@ -287,46 +287,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID32, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID32, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID32, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID32, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) n = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go index 2a0c4aa..2206bce 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go @@ -334,36 +334,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setrlimit(resource int, rlim *Rlimit) (err error) { _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) if e1 != 0 { @@ -374,16 +344,6 @@ func Setrlimit(resource int, rlim *Rlimit) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go index 4882bde..edf6b39 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go @@ -412,46 +412,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID32, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID32, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID32, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID32, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go index 9f8c24e..190609f 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go @@ -289,36 +289,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func setrlimit(resource int, rlim *Rlimit) (err error) { _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) if e1 != 0 { @@ -329,16 +299,6 @@ func setrlimit(resource int, rlim *Rlimit) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go index d7d6f42..5f984cb 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go @@ -248,46 +248,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go index 7f1f8e6..46fc380 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go @@ -278,36 +278,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setrlimit(resource int, rlim *Rlimit) (err error) { _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) if e1 != 0 { @@ -318,16 +288,6 @@ func Setrlimit(resource int, rlim *Rlimit) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go index f933d0f..cbd0d4d 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go @@ -278,36 +278,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setrlimit(resource int, rlim *Rlimit) (err error) { _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) if e1 != 0 { @@ -318,16 +288,6 @@ func Setrlimit(resource int, rlim *Rlimit) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go index 297d0a9..0c13d15 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go @@ -248,46 +248,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go index 2e32e7a..e01432a 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go @@ -308,46 +308,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go index 3c53170..13c7ee7 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go @@ -349,36 +349,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setrlimit(resource int, rlim *Rlimit) (err error) { _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) if e1 != 0 { @@ -389,16 +359,6 @@ func Setrlimit(resource int, rlim *Rlimit) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go index a00c674..02d0c0f 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go @@ -349,36 +349,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setrlimit(resource int, rlim *Rlimit) (err error) { _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) if e1 != 0 { @@ -389,16 +359,6 @@ func Setrlimit(resource int, rlim *Rlimit) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go index a1a9bcb..9fee3b1 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go @@ -180,6 +180,17 @@ func Listen(s int, n int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func MemfdSecret(flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_MEMFD_SECRET, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { @@ -258,36 +269,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setrlimit(resource int, rlim *Rlimit) (err error) { _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) if e1 != 0 { @@ -298,16 +279,6 @@ func Setrlimit(resource int, rlim *Rlimit) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go index e0dabc6..647bbfe 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go @@ -319,36 +319,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setrlimit(resource int, rlim *Rlimit) (err error) { _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) if e1 != 0 { @@ -359,16 +329,6 @@ func Setrlimit(resource int, rlim *Rlimit) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) n = int64(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go index 368623c..ada057f 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go @@ -329,36 +329,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setrlimit(resource int, rlim *Rlimit) (err error) { _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) if e1 != 0 { @@ -369,16 +339,6 @@ func Setrlimit(resource int, rlim *Rlimit) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go index a057fc5..2925fe0 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -l32 -openbsd -tags openbsd,386 syscall_bsd.go syscall_openbsd.go syscall_openbsd_386.go +// go run mksyscall.go -l32 -openbsd -libc -tags openbsd,386 syscall_bsd.go syscall_openbsd.go syscall_openbsd_386.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build openbsd && 386 @@ -16,7 +16,7 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -24,20 +24,28 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) { return } +var libc_getgroups_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getgroups getgroups "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + _, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setgroups_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setgroups setgroups "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) wpid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -45,10 +53,14 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err return } +var libc_wait4_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_wait4 wait4 "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -56,30 +68,42 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { return } +var libc_accept_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_accept accept "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + _, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_bind_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_bind bind "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + _, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_connect_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_connect connect "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto)) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -87,66 +111,94 @@ func socket(domain int, typ int, proto int) (fd int, err error) { return } +var libc_socket_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_socket socket "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + _, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_getsockopt_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getsockopt getsockopt "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + _, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setsockopt_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setsockopt setsockopt "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + _, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) if e1 != 0 { err = errnoErr(e1) } return } +var libc_getpeername_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpeername getpeername "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + _, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) if e1 != 0 { err = errnoErr(e1) } return } +var libc_getsockname_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getsockname getsockname "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Shutdown(s int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + _, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_shutdown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_shutdown shutdown "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + _, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_socketpair_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_socketpair socketpair "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { @@ -156,7 +208,7 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -164,6 +216,10 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl return } +var libc_recvfrom_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_recvfrom recvfrom "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { @@ -173,17 +229,21 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) ( } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + _, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_sendto_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sendto sendto "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -191,10 +251,14 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { return } +var libc_recvmsg_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_recvmsg recvmsg "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -202,10 +266,14 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { return } +var libc_sendmsg_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sendmsg sendmsg "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -213,6 +281,10 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne return } +var libc_kevent_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_kevent kevent "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func utimes(path string, timeval *[2]Timeval) (err error) { @@ -221,27 +293,35 @@ func utimes(path string, timeval *[2]Timeval) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + _, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_utimes_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_utimes utimes "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + _, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_futimes_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_futimes futimes "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -249,6 +329,10 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { return } +var libc_poll_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_poll poll "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Madvise(b []byte, behav int) (err error) { @@ -258,13 +342,17 @@ func Madvise(b []byte, behav int) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + _, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_madvise_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_madvise madvise "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mlock(b []byte) (err error) { @@ -274,23 +362,31 @@ func Mlock(b []byte) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + _, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mlock_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mlock mlock "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mlockall_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mlockall mlockall "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mprotect(b []byte, prot int) (err error) { @@ -300,13 +396,17 @@ func Mprotect(b []byte, prot int) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + _, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mprotect_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mprotect mprotect "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Msync(b []byte, flags int) (err error) { @@ -316,13 +416,17 @@ func Msync(b []byte, flags int) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + _, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_msync_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_msync msync "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Munlock(b []byte) (err error) { @@ -332,33 +436,45 @@ func Munlock(b []byte) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + _, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_munlock_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_munlock munlock "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + _, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_munlockall_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_munlockall munlockall "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func pipe2(p *[2]_C_int, flags int) (err error) { - _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + _, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_pipe2_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getdents(fd int, buf []byte) (n int, err error) { @@ -368,7 +484,7 @@ func Getdents(fd int, buf []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + r0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -376,6 +492,10 @@ func Getdents(fd int, buf []byte) (n int, err error) { return } +var libc_getdents_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getdents getdents "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getcwd(buf []byte) (n int, err error) { @@ -385,7 +505,7 @@ func Getcwd(buf []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -393,16 +513,24 @@ func Getcwd(buf []byte) (n int, err error) { return } +var libc_getcwd_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getcwd getcwd "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_ioctl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_ioctl ioctl "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { @@ -412,17 +540,21 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + _, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_sysctl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sysctl sysctl "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { - r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -430,6 +562,10 @@ func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, return } +var libc_ppoll_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_ppoll ppoll "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Access(path string, mode uint32) (err error) { @@ -438,23 +574,31 @@ func Access(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_access_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_access access "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + _, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_adjtime_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_adjtime adjtime "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Chdir(path string) (err error) { @@ -463,13 +607,17 @@ func Chdir(path string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_chdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chdir chdir "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Chflags(path string, flags int) (err error) { @@ -478,13 +626,17 @@ func Chflags(path string, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + _, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_chflags_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chflags chflags "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Chmod(path string, mode uint32) (err error) { @@ -493,13 +645,17 @@ func Chmod(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_chmod_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chmod chmod "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Chown(path string, uid int, gid int) (err error) { @@ -508,13 +664,17 @@ func Chown(path string, uid int, gid int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + _, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_chown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chown chown "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Chroot(path string) (err error) { @@ -523,27 +683,35 @@ func Chroot(path string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_chroot_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chroot chroot "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + _, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_close_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_close close "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Dup(fd int) (nfd int, err error) { - r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0) nfd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -551,33 +719,49 @@ func Dup(fd int) (nfd int, err error) { return } +var libc_dup_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_dup dup "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Dup2(from int, to int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + _, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_dup2_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_dup2 dup2 "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Dup3(from int, to int, flags int) (err error) { - _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags)) + _, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_dup3_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_dup3 dup3 "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Exit(code int) { - Syscall(SYS_EXIT, uintptr(code), 0, 0) + syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0) return } +var libc_exit_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_exit exit "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { @@ -586,43 +770,59 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_faccessat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_faccessat faccessat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchdir(fd int) (err error) { - _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + _, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchdir fchdir "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchflags(fd int, flags int) (err error) { - _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + _, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchflags_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchflags fchflags "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchmod_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchmod fchmod "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { @@ -631,23 +831,31 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchmodat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + _, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchown fchown "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { @@ -656,27 +864,35 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + _, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchownat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchownat fchownat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Flock(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + _, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_flock_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_flock flock "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0) val = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -684,16 +900,24 @@ func Fpathconf(fd int, name int) (val int, err error) { return } +var libc_fpathconf_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fstat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fstat fstat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { @@ -702,71 +926,99 @@ func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fstatat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fstatat fstatat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fstatfs(fd int, stat *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fstatfs_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fstatfs fstatfs "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fsync(fd int) (err error) { - _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + _, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fsync_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fsync fsync "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + _, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), uintptr(length>>32)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_ftruncate_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0) egid = int(r0) return } +var libc_getegid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getegid getegid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Geteuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0) uid = int(r0) return } +var libc_geteuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_geteuid geteuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0) gid = int(r0) return } +var libc_getgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getgid getgid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0) pgid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -774,34 +1026,50 @@ func Getpgid(pid int) (pgid int, err error) { return } +var libc_getpgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpgid getpgid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpgrp() (pgrp int) { - r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0) pgrp = int(r0) return } +var libc_getpgrp_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0) pid = int(r0) return } +var libc_getpid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpid getpid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0) ppid = int(r0) return } +var libc_getppid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getppid getppid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0) prio = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -809,20 +1077,28 @@ func Getpriority(which int, who int) (prio int, err error) { return } +var libc_getpriority_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpriority getpriority "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + _, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_getrlimit_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrtable() (rtable int, err error) { - r0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0) + r0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0) rtable = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -830,20 +1106,28 @@ func Getrtable() (rtable int, err error) { return } +var libc_getrtable_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getrtable getrtable "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + _, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_getrusage_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getrusage getrusage "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getsid(pid int) (sid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0) sid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -851,46 +1135,66 @@ func Getsid(pid int) (sid int, err error) { return } +var libc_getsid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getsid getsid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_gettimeofday_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0) uid = int(r0) return } +var libc_getuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getuid getuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Issetugid() (tainted bool) { - r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + r0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0) tainted = bool(r0 != 0) return } +var libc_issetugid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_issetugid issetugid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Kill(pid int, signum syscall.Signal) (err error) { - _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + _, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_kill_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_kill kill "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Kqueue() (fd int, err error) { - r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -898,6 +1202,10 @@ func Kqueue() (fd int, err error) { return } +var libc_kqueue_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_kqueue kqueue "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lchown(path string, uid int, gid int) (err error) { @@ -906,13 +1214,17 @@ func Lchown(path string, uid int, gid int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + _, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_lchown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_lchown lchown "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Link(path string, link string) (err error) { @@ -926,13 +1238,17 @@ func Link(path string, link string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + _, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_link_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_link link "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { @@ -946,23 +1262,31 @@ func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err er if err != nil { return } - _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + _, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_linkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_linkat linkat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Listen(s int, backlog int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + _, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_listen_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_listen listen "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lstat(path string, stat *Stat_t) (err error) { @@ -971,13 +1295,17 @@ func Lstat(path string, stat *Stat_t) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_lstat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_lstat lstat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mkdir(path string, mode uint32) (err error) { @@ -986,13 +1314,17 @@ func Mkdir(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mkdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mkdir mkdir "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mkdirat(dirfd int, path string, mode uint32) (err error) { @@ -1001,13 +1333,17 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + _, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mkdirat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mkfifo(path string, mode uint32) (err error) { @@ -1016,13 +1352,17 @@ func Mkfifo(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mkfifo_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mkfifoat(dirfd int, path string, mode uint32) (err error) { @@ -1031,13 +1371,17 @@ func Mkfifoat(dirfd int, path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + _, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mkfifoat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mknod(path string, mode uint32, dev int) (err error) { @@ -1046,13 +1390,17 @@ func Mknod(path string, mode uint32, dev int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + _, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mknod_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mknod mknod "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { @@ -1061,23 +1409,31 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + _, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mknodat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mknodat mknodat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_nanosleep_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Open(path string, mode int, perm uint32) (fd int, err error) { @@ -1086,7 +1442,7 @@ func Open(path string, mode int, perm uint32) (fd int, err error) { if err != nil { return } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1094,6 +1450,10 @@ func Open(path string, mode int, perm uint32) (fd int, err error) { return } +var libc_open_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_open open "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { @@ -1102,7 +1462,7 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { if err != nil { return } - r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1110,6 +1470,10 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { return } +var libc_openat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_openat openat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Pathconf(path string, name int) (val int, err error) { @@ -1118,7 +1482,7 @@ func Pathconf(path string, name int) (val int, err error) { if err != nil { return } - r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) val = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1126,6 +1490,10 @@ func Pathconf(path string, name int) (val int, err error) { return } +var libc_pathconf_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pathconf pathconf "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func pread(fd int, p []byte, offset int64) (n int, err error) { @@ -1135,7 +1503,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1143,6 +1511,10 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { return } +var libc_pread_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pread pread "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func pwrite(fd int, p []byte, offset int64) (n int, err error) { @@ -1152,7 +1524,7 @@ func pwrite(fd int, p []byte, offset int64) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1160,6 +1532,10 @@ func pwrite(fd int, p []byte, offset int64) (n int, err error) { return } +var libc_pwrite_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pwrite pwrite "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func read(fd int, p []byte) (n int, err error) { @@ -1169,7 +1545,7 @@ func read(fd int, p []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1177,6 +1553,10 @@ func read(fd int, p []byte) (n int, err error) { return } +var libc_read_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_read read "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Readlink(path string, buf []byte) (n int, err error) { @@ -1191,7 +1571,7 @@ func Readlink(path string, buf []byte) (n int, err error) { } else { _p1 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1199,6 +1579,10 @@ func Readlink(path string, buf []byte) (n int, err error) { return } +var libc_readlink_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readlink readlink "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { @@ -1213,7 +1597,7 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { } else { _p1 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1221,6 +1605,10 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { return } +var libc_readlinkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readlinkat readlinkat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Rename(from string, to string) (err error) { @@ -1234,13 +1622,17 @@ func Rename(from string, to string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + _, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_rename_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_rename rename "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Renameat(fromfd int, from string, tofd int, to string) (err error) { @@ -1254,13 +1646,17 @@ func Renameat(fromfd int, from string, tofd int, to string) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + _, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_renameat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_renameat renameat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Revoke(path string) (err error) { @@ -1269,13 +1665,17 @@ func Revoke(path string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_revoke_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_revoke revoke "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Rmdir(path string) (err error) { @@ -1284,17 +1684,21 @@ func Rmdir(path string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_rmdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_rmdir rmdir "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + r0, r1, e1 := syscall_syscall6(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0) newoffset = int64(int64(r1)<<32 | int64(r0)) if e1 != 0 { err = errnoErr(e1) @@ -1302,10 +1706,14 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { return } +var libc_lseek_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_lseek lseek "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1313,36 +1721,52 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err return } +var libc_select_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_select select "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setegid(egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setegid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setegid setegid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Seteuid(euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_seteuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_seteuid seteuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setgid(gid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setgid setgid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setlogin(name string) (err error) { @@ -1351,97 +1775,133 @@ func Setlogin(name string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setlogin_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setlogin setlogin "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + _, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setpgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setpgid setpgid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + _, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setpriority_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setpriority setpriority "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + _, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setregid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setregid setregid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + _, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setreuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setreuid setreuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + _, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setresgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setresgid setresgid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + _, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setresuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setresuid setresuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setrlimit_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setrtable(rtable int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setrtable_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setrtable setrtable "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0) pid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1449,26 +1909,38 @@ func Setsid() (pid int, err error) { return } +var libc_setsid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setsid setsid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_settimeofday_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_settimeofday settimeofday "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setuid(uid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setuid setuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Stat(path string, stat *Stat_t) (err error) { @@ -1477,13 +1949,17 @@ func Stat(path string, stat *Stat_t) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_stat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_stat stat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Statfs(path string, stat *Statfs_t) (err error) { @@ -1492,13 +1968,17 @@ func Statfs(path string, stat *Statfs_t) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_statfs_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_statfs statfs "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Symlink(path string, link string) (err error) { @@ -1512,13 +1992,17 @@ func Symlink(path string, link string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + _, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_symlink_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_symlink symlink "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { @@ -1532,23 +2016,31 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + _, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) if e1 != 0 { err = errnoErr(e1) } return } +var libc_symlinkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_symlinkat symlinkat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Sync() (err error) { - _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + _, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_sync_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sync sync "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Truncate(path string, length int64) (err error) { @@ -1557,21 +2049,29 @@ func Truncate(path string, length int64) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + _, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_truncate_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_truncate truncate "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Umask(newmask int) (oldmask int) { - r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0) oldmask = int(r0) return } +var libc_umask_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_umask umask "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Unlink(path string) (err error) { @@ -1580,13 +2080,17 @@ func Unlink(path string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_unlink_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unlink unlink "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Unlinkat(dirfd int, path string, flags int) (err error) { @@ -1595,13 +2099,17 @@ func Unlinkat(dirfd int, path string, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + _, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_unlinkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Unmount(path string, flags int) (err error) { @@ -1610,13 +2118,17 @@ func Unmount(path string, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + _, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_unmount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unmount unmount "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func write(fd int, p []byte) (n int, err error) { @@ -1626,7 +2138,7 @@ func write(fd int, p []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1634,10 +2146,14 @@ func write(fd int, p []byte) (n int, err error) { return } +var libc_write_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_write write "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + r0, _, e1 := syscall_syscall9(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0) ret = uintptr(r0) if e1 != 0 { err = errnoErr(e1) @@ -1645,20 +2161,28 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) ( return } +var libc_mmap_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mmap mmap "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + _, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_munmap_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_munmap munmap "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1669,7 +2193,7 @@ func readlen(fd int, buf *byte, nbuf int) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1685,9 +2209,13 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error if err != nil { return } - _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } + +var libc_utimensat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_utimensat utimensat "libc.so" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go index 04db8fa..98446d2 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -openbsd -tags openbsd,amd64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_amd64.go +// go run mksyscall.go -openbsd -libc -tags openbsd,amd64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_amd64.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build openbsd && amd64 @@ -16,7 +16,7 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -24,20 +24,28 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) { return } +var libc_getgroups_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getgroups getgroups "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + _, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setgroups_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setgroups setgroups "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) wpid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -45,10 +53,14 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err return } +var libc_wait4_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_wait4 wait4 "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -56,30 +68,42 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { return } +var libc_accept_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_accept accept "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + _, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_bind_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_bind bind "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + _, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_connect_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_connect connect "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto)) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -87,66 +111,94 @@ func socket(domain int, typ int, proto int) (fd int, err error) { return } +var libc_socket_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_socket socket "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + _, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_getsockopt_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getsockopt getsockopt "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + _, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setsockopt_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setsockopt setsockopt "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + _, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) if e1 != 0 { err = errnoErr(e1) } return } +var libc_getpeername_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpeername getpeername "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + _, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) if e1 != 0 { err = errnoErr(e1) } return } +var libc_getsockname_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getsockname getsockname "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Shutdown(s int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + _, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_shutdown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_shutdown shutdown "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + _, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_socketpair_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_socketpair socketpair "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { @@ -156,7 +208,7 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -164,6 +216,10 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl return } +var libc_recvfrom_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_recvfrom recvfrom "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { @@ -173,17 +229,21 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) ( } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + _, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_sendto_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sendto sendto "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -191,10 +251,14 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { return } +var libc_recvmsg_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_recvmsg recvmsg "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -202,10 +266,14 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { return } +var libc_sendmsg_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sendmsg sendmsg "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -213,6 +281,10 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne return } +var libc_kevent_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_kevent kevent "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func utimes(path string, timeval *[2]Timeval) (err error) { @@ -221,27 +293,35 @@ func utimes(path string, timeval *[2]Timeval) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + _, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_utimes_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_utimes utimes "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + _, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_futimes_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_futimes futimes "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -249,6 +329,10 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { return } +var libc_poll_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_poll poll "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Madvise(b []byte, behav int) (err error) { @@ -258,13 +342,17 @@ func Madvise(b []byte, behav int) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + _, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_madvise_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_madvise madvise "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mlock(b []byte) (err error) { @@ -274,23 +362,31 @@ func Mlock(b []byte) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + _, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mlock_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mlock mlock "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mlockall_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mlockall mlockall "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mprotect(b []byte, prot int) (err error) { @@ -300,13 +396,17 @@ func Mprotect(b []byte, prot int) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + _, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mprotect_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mprotect mprotect "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Msync(b []byte, flags int) (err error) { @@ -316,13 +416,17 @@ func Msync(b []byte, flags int) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + _, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_msync_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_msync msync "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Munlock(b []byte) (err error) { @@ -332,33 +436,45 @@ func Munlock(b []byte) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + _, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_munlock_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_munlock munlock "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + _, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_munlockall_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_munlockall munlockall "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func pipe2(p *[2]_C_int, flags int) (err error) { - _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + _, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_pipe2_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getdents(fd int, buf []byte) (n int, err error) { @@ -368,7 +484,7 @@ func Getdents(fd int, buf []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + r0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -376,6 +492,10 @@ func Getdents(fd int, buf []byte) (n int, err error) { return } +var libc_getdents_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getdents getdents "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getcwd(buf []byte) (n int, err error) { @@ -385,7 +505,7 @@ func Getcwd(buf []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -393,16 +513,24 @@ func Getcwd(buf []byte) (n int, err error) { return } +var libc_getcwd_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getcwd getcwd "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_ioctl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_ioctl ioctl "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { @@ -412,17 +540,21 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + _, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_sysctl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sysctl sysctl "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { - r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -430,6 +562,10 @@ func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, return } +var libc_ppoll_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_ppoll ppoll "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Access(path string, mode uint32) (err error) { @@ -438,23 +574,31 @@ func Access(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_access_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_access access "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + _, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_adjtime_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_adjtime adjtime "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Chdir(path string) (err error) { @@ -463,13 +607,17 @@ func Chdir(path string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_chdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chdir chdir "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Chflags(path string, flags int) (err error) { @@ -478,13 +626,17 @@ func Chflags(path string, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + _, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_chflags_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chflags chflags "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Chmod(path string, mode uint32) (err error) { @@ -493,13 +645,17 @@ func Chmod(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_chmod_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chmod chmod "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Chown(path string, uid int, gid int) (err error) { @@ -508,13 +664,17 @@ func Chown(path string, uid int, gid int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + _, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_chown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chown chown "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Chroot(path string) (err error) { @@ -523,27 +683,35 @@ func Chroot(path string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_chroot_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chroot chroot "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + _, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_close_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_close close "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Dup(fd int) (nfd int, err error) { - r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0) nfd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -551,33 +719,49 @@ func Dup(fd int) (nfd int, err error) { return } +var libc_dup_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_dup dup "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Dup2(from int, to int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + _, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_dup2_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_dup2 dup2 "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Dup3(from int, to int, flags int) (err error) { - _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags)) + _, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_dup3_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_dup3 dup3 "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Exit(code int) { - Syscall(SYS_EXIT, uintptr(code), 0, 0) + syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0) return } +var libc_exit_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_exit exit "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { @@ -586,43 +770,59 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_faccessat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_faccessat faccessat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchdir(fd int) (err error) { - _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + _, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchdir fchdir "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchflags(fd int, flags int) (err error) { - _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + _, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchflags_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchflags fchflags "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchmod_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchmod fchmod "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { @@ -631,23 +831,31 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchmodat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + _, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchown fchown "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { @@ -656,27 +864,35 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + _, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchownat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchownat fchownat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Flock(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + _, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_flock_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_flock flock "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0) val = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -684,16 +900,24 @@ func Fpathconf(fd int, name int) (val int, err error) { return } +var libc_fpathconf_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fstat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fstat fstat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { @@ -702,71 +926,99 @@ func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fstatat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fstatat fstatat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fstatfs(fd int, stat *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fstatfs_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fstatfs fstatfs "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fsync(fd int) (err error) { - _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + _, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fsync_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fsync fsync "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) + _, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_ftruncate_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0) egid = int(r0) return } +var libc_getegid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getegid getegid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Geteuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0) uid = int(r0) return } +var libc_geteuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_geteuid geteuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0) gid = int(r0) return } +var libc_getgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getgid getgid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0) pgid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -774,34 +1026,50 @@ func Getpgid(pid int) (pgid int, err error) { return } +var libc_getpgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpgid getpgid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpgrp() (pgrp int) { - r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0) pgrp = int(r0) return } +var libc_getpgrp_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0) pid = int(r0) return } +var libc_getpid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpid getpid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0) ppid = int(r0) return } +var libc_getppid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getppid getppid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0) prio = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -809,20 +1077,28 @@ func Getpriority(which int, who int) (prio int, err error) { return } +var libc_getpriority_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpriority getpriority "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + _, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_getrlimit_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrtable() (rtable int, err error) { - r0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0) + r0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0) rtable = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -830,20 +1106,28 @@ func Getrtable() (rtable int, err error) { return } +var libc_getrtable_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getrtable getrtable "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + _, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_getrusage_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getrusage getrusage "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getsid(pid int) (sid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0) sid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -851,46 +1135,66 @@ func Getsid(pid int) (sid int, err error) { return } +var libc_getsid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getsid getsid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_gettimeofday_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0) uid = int(r0) return } +var libc_getuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getuid getuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Issetugid() (tainted bool) { - r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + r0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0) tainted = bool(r0 != 0) return } +var libc_issetugid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_issetugid issetugid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Kill(pid int, signum syscall.Signal) (err error) { - _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + _, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_kill_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_kill kill "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Kqueue() (fd int, err error) { - r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -898,6 +1202,10 @@ func Kqueue() (fd int, err error) { return } +var libc_kqueue_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_kqueue kqueue "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lchown(path string, uid int, gid int) (err error) { @@ -906,13 +1214,17 @@ func Lchown(path string, uid int, gid int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + _, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_lchown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_lchown lchown "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Link(path string, link string) (err error) { @@ -926,13 +1238,17 @@ func Link(path string, link string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + _, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_link_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_link link "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { @@ -946,23 +1262,31 @@ func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err er if err != nil { return } - _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + _, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_linkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_linkat linkat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Listen(s int, backlog int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + _, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_listen_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_listen listen "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lstat(path string, stat *Stat_t) (err error) { @@ -971,13 +1295,17 @@ func Lstat(path string, stat *Stat_t) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_lstat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_lstat lstat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mkdir(path string, mode uint32) (err error) { @@ -986,13 +1314,17 @@ func Mkdir(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mkdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mkdir mkdir "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mkdirat(dirfd int, path string, mode uint32) (err error) { @@ -1001,13 +1333,17 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + _, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mkdirat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mkfifo(path string, mode uint32) (err error) { @@ -1016,13 +1352,17 @@ func Mkfifo(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mkfifo_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mkfifoat(dirfd int, path string, mode uint32) (err error) { @@ -1031,13 +1371,17 @@ func Mkfifoat(dirfd int, path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + _, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mkfifoat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mknod(path string, mode uint32, dev int) (err error) { @@ -1046,13 +1390,17 @@ func Mknod(path string, mode uint32, dev int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + _, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mknod_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mknod mknod "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { @@ -1061,23 +1409,31 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + _, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mknodat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mknodat mknodat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_nanosleep_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Open(path string, mode int, perm uint32) (fd int, err error) { @@ -1086,7 +1442,7 @@ func Open(path string, mode int, perm uint32) (fd int, err error) { if err != nil { return } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1094,6 +1450,10 @@ func Open(path string, mode int, perm uint32) (fd int, err error) { return } +var libc_open_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_open open "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { @@ -1102,7 +1462,7 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { if err != nil { return } - r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1110,6 +1470,10 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { return } +var libc_openat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_openat openat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Pathconf(path string, name int) (val int, err error) { @@ -1118,7 +1482,7 @@ func Pathconf(path string, name int) (val int, err error) { if err != nil { return } - r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) val = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1126,6 +1490,10 @@ func Pathconf(path string, name int) (val int, err error) { return } +var libc_pathconf_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pathconf pathconf "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func pread(fd int, p []byte, offset int64) (n int, err error) { @@ -1135,7 +1503,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1143,6 +1511,10 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { return } +var libc_pread_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pread pread "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func pwrite(fd int, p []byte, offset int64) (n int, err error) { @@ -1152,7 +1524,7 @@ func pwrite(fd int, p []byte, offset int64) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1160,6 +1532,10 @@ func pwrite(fd int, p []byte, offset int64) (n int, err error) { return } +var libc_pwrite_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pwrite pwrite "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func read(fd int, p []byte) (n int, err error) { @@ -1169,7 +1545,7 @@ func read(fd int, p []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1177,6 +1553,10 @@ func read(fd int, p []byte) (n int, err error) { return } +var libc_read_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_read read "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Readlink(path string, buf []byte) (n int, err error) { @@ -1191,7 +1571,7 @@ func Readlink(path string, buf []byte) (n int, err error) { } else { _p1 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1199,6 +1579,10 @@ func Readlink(path string, buf []byte) (n int, err error) { return } +var libc_readlink_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readlink readlink "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { @@ -1213,7 +1597,7 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { } else { _p1 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1221,6 +1605,10 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { return } +var libc_readlinkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readlinkat readlinkat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Rename(from string, to string) (err error) { @@ -1234,13 +1622,17 @@ func Rename(from string, to string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + _, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_rename_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_rename rename "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Renameat(fromfd int, from string, tofd int, to string) (err error) { @@ -1254,13 +1646,17 @@ func Renameat(fromfd int, from string, tofd int, to string) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + _, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_renameat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_renameat renameat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Revoke(path string) (err error) { @@ -1269,13 +1665,17 @@ func Revoke(path string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_revoke_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_revoke revoke "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Rmdir(path string) (err error) { @@ -1284,17 +1684,21 @@ func Rmdir(path string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_rmdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_rmdir rmdir "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) + r0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence)) newoffset = int64(r0) if e1 != 0 { err = errnoErr(e1) @@ -1302,10 +1706,14 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { return } +var libc_lseek_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_lseek lseek "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1313,36 +1721,52 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err return } +var libc_select_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_select select "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setegid(egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setegid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setegid setegid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Seteuid(euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_seteuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_seteuid seteuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setgid(gid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setgid setgid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setlogin(name string) (err error) { @@ -1351,97 +1775,133 @@ func Setlogin(name string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setlogin_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setlogin setlogin "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + _, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setpgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setpgid setpgid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + _, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setpriority_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setpriority setpriority "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + _, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setregid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setregid setregid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + _, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setreuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setreuid setreuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + _, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setresgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setresgid setresgid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + _, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setresuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setresuid setresuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setrlimit_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setrtable(rtable int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setrtable_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setrtable setrtable "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0) pid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1449,26 +1909,38 @@ func Setsid() (pid int, err error) { return } +var libc_setsid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setsid setsid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_settimeofday_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_settimeofday settimeofday "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setuid(uid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setuid setuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Stat(path string, stat *Stat_t) (err error) { @@ -1477,13 +1949,17 @@ func Stat(path string, stat *Stat_t) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_stat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_stat stat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Statfs(path string, stat *Statfs_t) (err error) { @@ -1492,13 +1968,17 @@ func Statfs(path string, stat *Statfs_t) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_statfs_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_statfs statfs "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Symlink(path string, link string) (err error) { @@ -1512,13 +1992,17 @@ func Symlink(path string, link string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + _, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_symlink_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_symlink symlink "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { @@ -1532,23 +2016,31 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + _, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) if e1 != 0 { err = errnoErr(e1) } return } +var libc_symlinkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_symlinkat symlinkat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Sync() (err error) { - _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + _, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_sync_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sync sync "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Truncate(path string, length int64) (err error) { @@ -1557,21 +2049,29 @@ func Truncate(path string, length int64) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) + _, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_truncate_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_truncate truncate "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Umask(newmask int) (oldmask int) { - r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0) oldmask = int(r0) return } +var libc_umask_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_umask umask "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Unlink(path string) (err error) { @@ -1580,13 +2080,17 @@ func Unlink(path string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_unlink_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unlink unlink "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Unlinkat(dirfd int, path string, flags int) (err error) { @@ -1595,13 +2099,17 @@ func Unlinkat(dirfd int, path string, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + _, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_unlinkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Unmount(path string, flags int) (err error) { @@ -1610,13 +2118,17 @@ func Unmount(path string, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + _, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_unmount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unmount unmount "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func write(fd int, p []byte) (n int, err error) { @@ -1626,7 +2138,7 @@ func write(fd int, p []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1634,10 +2146,14 @@ func write(fd int, p []byte) (n int, err error) { return } +var libc_write_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_write write "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) + r0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) ret = uintptr(r0) if e1 != 0 { err = errnoErr(e1) @@ -1645,20 +2161,28 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) ( return } +var libc_mmap_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mmap mmap "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + _, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_munmap_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_munmap munmap "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1669,7 +2193,7 @@ func readlen(fd int, buf *byte, nbuf int) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1685,9 +2209,13 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error if err != nil { return } - _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } + +var libc_utimensat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_utimensat utimensat "libc.so" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go index 69f8030..8da6791 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -l32 -openbsd -arm -tags openbsd,arm syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm.go +// go run mksyscall.go -l32 -openbsd -arm -libc -tags openbsd,arm syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build openbsd && arm @@ -16,7 +16,7 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -24,20 +24,28 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) { return } +var libc_getgroups_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getgroups getgroups "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + _, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setgroups_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setgroups setgroups "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) wpid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -45,10 +53,14 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err return } +var libc_wait4_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_wait4 wait4 "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -56,30 +68,42 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { return } +var libc_accept_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_accept accept "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + _, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_bind_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_bind bind "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + _, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_connect_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_connect connect "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto)) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -87,66 +111,94 @@ func socket(domain int, typ int, proto int) (fd int, err error) { return } +var libc_socket_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_socket socket "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + _, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_getsockopt_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getsockopt getsockopt "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + _, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setsockopt_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setsockopt setsockopt "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + _, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) if e1 != 0 { err = errnoErr(e1) } return } +var libc_getpeername_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpeername getpeername "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + _, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) if e1 != 0 { err = errnoErr(e1) } return } +var libc_getsockname_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getsockname getsockname "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Shutdown(s int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + _, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_shutdown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_shutdown shutdown "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + _, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_socketpair_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_socketpair socketpair "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { @@ -156,7 +208,7 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -164,6 +216,10 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl return } +var libc_recvfrom_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_recvfrom recvfrom "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { @@ -173,17 +229,21 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) ( } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + _, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_sendto_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sendto sendto "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -191,10 +251,14 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { return } +var libc_recvmsg_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_recvmsg recvmsg "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -202,10 +266,14 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { return } +var libc_sendmsg_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sendmsg sendmsg "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -213,6 +281,10 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne return } +var libc_kevent_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_kevent kevent "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func utimes(path string, timeval *[2]Timeval) (err error) { @@ -221,27 +293,35 @@ func utimes(path string, timeval *[2]Timeval) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + _, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_utimes_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_utimes utimes "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + _, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_futimes_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_futimes futimes "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -249,6 +329,10 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { return } +var libc_poll_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_poll poll "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Madvise(b []byte, behav int) (err error) { @@ -258,13 +342,17 @@ func Madvise(b []byte, behav int) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + _, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_madvise_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_madvise madvise "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mlock(b []byte) (err error) { @@ -274,23 +362,31 @@ func Mlock(b []byte) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + _, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mlock_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mlock mlock "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mlockall_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mlockall mlockall "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mprotect(b []byte, prot int) (err error) { @@ -300,13 +396,17 @@ func Mprotect(b []byte, prot int) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + _, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mprotect_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mprotect mprotect "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Msync(b []byte, flags int) (err error) { @@ -316,13 +416,17 @@ func Msync(b []byte, flags int) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + _, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_msync_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_msync msync "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Munlock(b []byte) (err error) { @@ -332,33 +436,45 @@ func Munlock(b []byte) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + _, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_munlock_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_munlock munlock "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + _, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_munlockall_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_munlockall munlockall "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func pipe2(p *[2]_C_int, flags int) (err error) { - _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + _, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_pipe2_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getdents(fd int, buf []byte) (n int, err error) { @@ -368,7 +484,7 @@ func Getdents(fd int, buf []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + r0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -376,6 +492,10 @@ func Getdents(fd int, buf []byte) (n int, err error) { return } +var libc_getdents_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getdents getdents "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getcwd(buf []byte) (n int, err error) { @@ -385,7 +505,7 @@ func Getcwd(buf []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -393,16 +513,24 @@ func Getcwd(buf []byte) (n int, err error) { return } +var libc_getcwd_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getcwd getcwd "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_ioctl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_ioctl ioctl "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { @@ -412,17 +540,21 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + _, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_sysctl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sysctl sysctl "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { - r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -430,6 +562,10 @@ func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, return } +var libc_ppoll_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_ppoll ppoll "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Access(path string, mode uint32) (err error) { @@ -438,23 +574,31 @@ func Access(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_access_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_access access "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + _, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_adjtime_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_adjtime adjtime "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Chdir(path string) (err error) { @@ -463,13 +607,17 @@ func Chdir(path string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_chdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chdir chdir "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Chflags(path string, flags int) (err error) { @@ -478,13 +626,17 @@ func Chflags(path string, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + _, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_chflags_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chflags chflags "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Chmod(path string, mode uint32) (err error) { @@ -493,13 +645,17 @@ func Chmod(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_chmod_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chmod chmod "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Chown(path string, uid int, gid int) (err error) { @@ -508,13 +664,17 @@ func Chown(path string, uid int, gid int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + _, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_chown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chown chown "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Chroot(path string) (err error) { @@ -523,27 +683,35 @@ func Chroot(path string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_chroot_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chroot chroot "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + _, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_close_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_close close "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Dup(fd int) (nfd int, err error) { - r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0) nfd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -551,33 +719,49 @@ func Dup(fd int) (nfd int, err error) { return } +var libc_dup_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_dup dup "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Dup2(from int, to int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + _, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_dup2_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_dup2 dup2 "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Dup3(from int, to int, flags int) (err error) { - _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags)) + _, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_dup3_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_dup3 dup3 "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Exit(code int) { - Syscall(SYS_EXIT, uintptr(code), 0, 0) + syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0) return } +var libc_exit_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_exit exit "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { @@ -586,43 +770,59 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_faccessat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_faccessat faccessat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchdir(fd int) (err error) { - _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + _, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchdir fchdir "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchflags(fd int, flags int) (err error) { - _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + _, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchflags_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchflags fchflags "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchmod_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchmod fchmod "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { @@ -631,23 +831,31 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchmodat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + _, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchown fchown "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { @@ -656,27 +864,35 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + _, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchownat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchownat fchownat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Flock(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + _, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_flock_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_flock flock "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0) val = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -684,16 +900,24 @@ func Fpathconf(fd int, name int) (val int, err error) { return } +var libc_fpathconf_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fstat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fstat fstat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { @@ -702,71 +926,99 @@ func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fstatat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fstatat fstatat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fstatfs(fd int, stat *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fstatfs_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fstatfs fstatfs "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fsync(fd int) (err error) { - _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + _, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fsync_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fsync fsync "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + _, _, e1 := syscall_syscall6(libc_ftruncate_trampoline_addr, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_ftruncate_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0) egid = int(r0) return } +var libc_getegid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getegid getegid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Geteuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0) uid = int(r0) return } +var libc_geteuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_geteuid geteuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0) gid = int(r0) return } +var libc_getgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getgid getgid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0) pgid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -774,34 +1026,50 @@ func Getpgid(pid int) (pgid int, err error) { return } +var libc_getpgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpgid getpgid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpgrp() (pgrp int) { - r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0) pgrp = int(r0) return } +var libc_getpgrp_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0) pid = int(r0) return } +var libc_getpid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpid getpid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0) ppid = int(r0) return } +var libc_getppid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getppid getppid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0) prio = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -809,20 +1077,28 @@ func Getpriority(which int, who int) (prio int, err error) { return } +var libc_getpriority_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpriority getpriority "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + _, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_getrlimit_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrtable() (rtable int, err error) { - r0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0) + r0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0) rtable = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -830,20 +1106,28 @@ func Getrtable() (rtable int, err error) { return } +var libc_getrtable_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getrtable getrtable "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + _, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_getrusage_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getrusage getrusage "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getsid(pid int) (sid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0) sid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -851,46 +1135,66 @@ func Getsid(pid int) (sid int, err error) { return } +var libc_getsid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getsid getsid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_gettimeofday_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0) uid = int(r0) return } +var libc_getuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getuid getuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Issetugid() (tainted bool) { - r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + r0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0) tainted = bool(r0 != 0) return } +var libc_issetugid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_issetugid issetugid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Kill(pid int, signum syscall.Signal) (err error) { - _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + _, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_kill_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_kill kill "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Kqueue() (fd int, err error) { - r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -898,6 +1202,10 @@ func Kqueue() (fd int, err error) { return } +var libc_kqueue_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_kqueue kqueue "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lchown(path string, uid int, gid int) (err error) { @@ -906,13 +1214,17 @@ func Lchown(path string, uid int, gid int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + _, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_lchown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_lchown lchown "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Link(path string, link string) (err error) { @@ -926,13 +1238,17 @@ func Link(path string, link string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + _, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_link_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_link link "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { @@ -946,23 +1262,31 @@ func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err er if err != nil { return } - _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + _, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_linkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_linkat linkat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Listen(s int, backlog int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + _, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_listen_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_listen listen "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lstat(path string, stat *Stat_t) (err error) { @@ -971,13 +1295,17 @@ func Lstat(path string, stat *Stat_t) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_lstat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_lstat lstat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mkdir(path string, mode uint32) (err error) { @@ -986,13 +1314,17 @@ func Mkdir(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mkdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mkdir mkdir "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mkdirat(dirfd int, path string, mode uint32) (err error) { @@ -1001,13 +1333,17 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + _, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mkdirat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mkfifo(path string, mode uint32) (err error) { @@ -1016,13 +1352,17 @@ func Mkfifo(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mkfifo_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mkfifoat(dirfd int, path string, mode uint32) (err error) { @@ -1031,13 +1371,17 @@ func Mkfifoat(dirfd int, path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + _, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mkfifoat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mknod(path string, mode uint32, dev int) (err error) { @@ -1046,13 +1390,17 @@ func Mknod(path string, mode uint32, dev int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + _, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mknod_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mknod mknod "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { @@ -1061,23 +1409,31 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + _, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mknodat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mknodat mknodat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_nanosleep_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Open(path string, mode int, perm uint32) (fd int, err error) { @@ -1086,7 +1442,7 @@ func Open(path string, mode int, perm uint32) (fd int, err error) { if err != nil { return } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1094,6 +1450,10 @@ func Open(path string, mode int, perm uint32) (fd int, err error) { return } +var libc_open_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_open open "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { @@ -1102,7 +1462,7 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { if err != nil { return } - r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1110,6 +1470,10 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { return } +var libc_openat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_openat openat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Pathconf(path string, name int) (val int, err error) { @@ -1118,7 +1482,7 @@ func Pathconf(path string, name int) (val int, err error) { if err != nil { return } - r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) val = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1126,6 +1490,10 @@ func Pathconf(path string, name int) (val int, err error) { return } +var libc_pathconf_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pathconf pathconf "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func pread(fd int, p []byte, offset int64) (n int, err error) { @@ -1135,7 +1503,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1143,6 +1511,10 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { return } +var libc_pread_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pread pread "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func pwrite(fd int, p []byte, offset int64) (n int, err error) { @@ -1152,7 +1524,7 @@ func pwrite(fd int, p []byte, offset int64) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1160,6 +1532,10 @@ func pwrite(fd int, p []byte, offset int64) (n int, err error) { return } +var libc_pwrite_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pwrite pwrite "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func read(fd int, p []byte) (n int, err error) { @@ -1169,7 +1545,7 @@ func read(fd int, p []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1177,6 +1553,10 @@ func read(fd int, p []byte) (n int, err error) { return } +var libc_read_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_read read "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Readlink(path string, buf []byte) (n int, err error) { @@ -1191,7 +1571,7 @@ func Readlink(path string, buf []byte) (n int, err error) { } else { _p1 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1199,6 +1579,10 @@ func Readlink(path string, buf []byte) (n int, err error) { return } +var libc_readlink_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readlink readlink "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { @@ -1213,7 +1597,7 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { } else { _p1 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1221,6 +1605,10 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { return } +var libc_readlinkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readlinkat readlinkat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Rename(from string, to string) (err error) { @@ -1234,13 +1622,17 @@ func Rename(from string, to string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + _, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_rename_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_rename rename "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Renameat(fromfd int, from string, tofd int, to string) (err error) { @@ -1254,13 +1646,17 @@ func Renameat(fromfd int, from string, tofd int, to string) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + _, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_renameat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_renameat renameat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Revoke(path string) (err error) { @@ -1269,13 +1665,17 @@ func Revoke(path string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_revoke_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_revoke revoke "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Rmdir(path string) (err error) { @@ -1284,17 +1684,21 @@ func Rmdir(path string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_rmdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_rmdir rmdir "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + r0, r1, e1 := syscall_syscall6(libc_lseek_trampoline_addr, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) newoffset = int64(int64(r1)<<32 | int64(r0)) if e1 != 0 { err = errnoErr(e1) @@ -1302,10 +1706,14 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { return } +var libc_lseek_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_lseek lseek "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1313,36 +1721,52 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err return } +var libc_select_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_select select "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setegid(egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setegid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setegid setegid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Seteuid(euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_seteuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_seteuid seteuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setgid(gid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setgid setgid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setlogin(name string) (err error) { @@ -1351,97 +1775,133 @@ func Setlogin(name string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setlogin_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setlogin setlogin "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + _, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setpgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setpgid setpgid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + _, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setpriority_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setpriority setpriority "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + _, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setregid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setregid setregid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + _, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setreuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setreuid setreuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + _, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setresgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setresgid setresgid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + _, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setresuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setresuid setresuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setrlimit_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setrtable(rtable int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setrtable_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setrtable setrtable "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0) pid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1449,26 +1909,38 @@ func Setsid() (pid int, err error) { return } +var libc_setsid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setsid setsid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_settimeofday_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_settimeofday settimeofday "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setuid(uid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setuid setuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Stat(path string, stat *Stat_t) (err error) { @@ -1477,13 +1949,17 @@ func Stat(path string, stat *Stat_t) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_stat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_stat stat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Statfs(path string, stat *Statfs_t) (err error) { @@ -1492,13 +1968,17 @@ func Statfs(path string, stat *Statfs_t) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_statfs_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_statfs statfs "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Symlink(path string, link string) (err error) { @@ -1512,13 +1992,17 @@ func Symlink(path string, link string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + _, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_symlink_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_symlink symlink "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { @@ -1532,23 +2016,31 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + _, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) if e1 != 0 { err = errnoErr(e1) } return } +var libc_symlinkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_symlinkat symlinkat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Sync() (err error) { - _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + _, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_sync_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sync sync "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Truncate(path string, length int64) (err error) { @@ -1557,21 +2049,29 @@ func Truncate(path string, length int64) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + _, _, e1 := syscall_syscall6(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_truncate_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_truncate truncate "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Umask(newmask int) (oldmask int) { - r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0) oldmask = int(r0) return } +var libc_umask_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_umask umask "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Unlink(path string) (err error) { @@ -1580,13 +2080,17 @@ func Unlink(path string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_unlink_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unlink unlink "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Unlinkat(dirfd int, path string, flags int) (err error) { @@ -1595,13 +2099,17 @@ func Unlinkat(dirfd int, path string, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + _, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_unlinkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Unmount(path string, flags int) (err error) { @@ -1610,13 +2118,17 @@ func Unmount(path string, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + _, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_unmount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unmount unmount "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func write(fd int, p []byte) (n int, err error) { @@ -1626,7 +2138,7 @@ func write(fd int, p []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1634,10 +2146,14 @@ func write(fd int, p []byte) (n int, err error) { return } +var libc_write_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_write write "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + r0, _, e1 := syscall_syscall9(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) ret = uintptr(r0) if e1 != 0 { err = errnoErr(e1) @@ -1645,20 +2161,28 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) ( return } +var libc_mmap_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mmap mmap "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + _, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_munmap_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_munmap munmap "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1669,7 +2193,7 @@ func readlen(fd int, buf *byte, nbuf int) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1685,9 +2209,13 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error if err != nil { return } - _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } + +var libc_utimensat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_utimensat utimensat "libc.so" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go index c96a505..800aab6 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -openbsd -tags openbsd,arm64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm64.go +// go run mksyscall.go -openbsd -libc -tags openbsd,arm64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm64.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build openbsd && arm64 @@ -16,7 +16,7 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -24,20 +24,28 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) { return } +var libc_getgroups_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getgroups getgroups "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + _, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setgroups_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setgroups setgroups "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) wpid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -45,10 +53,14 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err return } +var libc_wait4_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_wait4 wait4 "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -56,30 +68,42 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { return } +var libc_accept_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_accept accept "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + _, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_bind_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_bind bind "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + _, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_connect_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_connect connect "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto)) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -87,66 +111,94 @@ func socket(domain int, typ int, proto int) (fd int, err error) { return } +var libc_socket_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_socket socket "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + _, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_getsockopt_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getsockopt getsockopt "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + _, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setsockopt_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setsockopt setsockopt "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + _, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) if e1 != 0 { err = errnoErr(e1) } return } +var libc_getpeername_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpeername getpeername "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + _, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) if e1 != 0 { err = errnoErr(e1) } return } +var libc_getsockname_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getsockname getsockname "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Shutdown(s int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + _, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_shutdown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_shutdown shutdown "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + _, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_socketpair_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_socketpair socketpair "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { @@ -156,7 +208,7 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -164,6 +216,10 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl return } +var libc_recvfrom_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_recvfrom recvfrom "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { @@ -173,17 +229,21 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) ( } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + _, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_sendto_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sendto sendto "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -191,10 +251,14 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { return } +var libc_recvmsg_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_recvmsg recvmsg "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -202,10 +266,14 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { return } +var libc_sendmsg_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sendmsg sendmsg "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -213,6 +281,10 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne return } +var libc_kevent_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_kevent kevent "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func utimes(path string, timeval *[2]Timeval) (err error) { @@ -221,27 +293,35 @@ func utimes(path string, timeval *[2]Timeval) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + _, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_utimes_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_utimes utimes "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + _, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_futimes_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_futimes futimes "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -249,6 +329,10 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { return } +var libc_poll_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_poll poll "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Madvise(b []byte, behav int) (err error) { @@ -258,13 +342,17 @@ func Madvise(b []byte, behav int) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + _, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_madvise_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_madvise madvise "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mlock(b []byte) (err error) { @@ -274,23 +362,31 @@ func Mlock(b []byte) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + _, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mlock_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mlock mlock "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mlockall_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mlockall mlockall "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mprotect(b []byte, prot int) (err error) { @@ -300,13 +396,17 @@ func Mprotect(b []byte, prot int) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + _, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mprotect_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mprotect mprotect "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Msync(b []byte, flags int) (err error) { @@ -316,13 +416,17 @@ func Msync(b []byte, flags int) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + _, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_msync_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_msync msync "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Munlock(b []byte) (err error) { @@ -332,33 +436,45 @@ func Munlock(b []byte) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + _, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_munlock_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_munlock munlock "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + _, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_munlockall_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_munlockall munlockall "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func pipe2(p *[2]_C_int, flags int) (err error) { - _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + _, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_pipe2_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getdents(fd int, buf []byte) (n int, err error) { @@ -368,7 +484,7 @@ func Getdents(fd int, buf []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + r0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -376,6 +492,10 @@ func Getdents(fd int, buf []byte) (n int, err error) { return } +var libc_getdents_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getdents getdents "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getcwd(buf []byte) (n int, err error) { @@ -385,7 +505,7 @@ func Getcwd(buf []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -393,16 +513,24 @@ func Getcwd(buf []byte) (n int, err error) { return } +var libc_getcwd_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getcwd getcwd "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_ioctl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_ioctl ioctl "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { @@ -412,17 +540,21 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + _, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_sysctl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sysctl sysctl "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { - r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -430,6 +562,10 @@ func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, return } +var libc_ppoll_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_ppoll ppoll "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Access(path string, mode uint32) (err error) { @@ -438,23 +574,31 @@ func Access(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_access_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_access access "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + _, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_adjtime_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_adjtime adjtime "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Chdir(path string) (err error) { @@ -463,13 +607,17 @@ func Chdir(path string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_chdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chdir chdir "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Chflags(path string, flags int) (err error) { @@ -478,13 +626,17 @@ func Chflags(path string, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + _, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_chflags_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chflags chflags "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Chmod(path string, mode uint32) (err error) { @@ -493,13 +645,17 @@ func Chmod(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_chmod_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chmod chmod "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Chown(path string, uid int, gid int) (err error) { @@ -508,13 +664,17 @@ func Chown(path string, uid int, gid int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + _, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_chown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chown chown "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Chroot(path string) (err error) { @@ -523,27 +683,35 @@ func Chroot(path string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_chroot_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_chroot chroot "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + _, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_close_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_close close "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Dup(fd int) (nfd int, err error) { - r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0) nfd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -551,33 +719,49 @@ func Dup(fd int) (nfd int, err error) { return } +var libc_dup_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_dup dup "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Dup2(from int, to int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + _, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_dup2_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_dup2 dup2 "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Dup3(from int, to int, flags int) (err error) { - _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags)) + _, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_dup3_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_dup3 dup3 "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Exit(code int) { - Syscall(SYS_EXIT, uintptr(code), 0, 0) + syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0) return } +var libc_exit_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_exit exit "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { @@ -586,43 +770,59 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_faccessat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_faccessat faccessat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchdir(fd int) (err error) { - _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + _, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchdir fchdir "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchflags(fd int, flags int) (err error) { - _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + _, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchflags_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchflags fchflags "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchmod_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchmod fchmod "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { @@ -631,23 +831,31 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchmodat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + _, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchown fchown "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { @@ -656,27 +864,35 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + _, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fchownat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fchownat fchownat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Flock(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + _, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_flock_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_flock flock "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0) val = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -684,16 +900,24 @@ func Fpathconf(fd int, name int) (val int, err error) { return } +var libc_fpathconf_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fstat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fstat fstat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { @@ -702,71 +926,99 @@ func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fstatat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fstatat fstatat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fstatfs(fd int, stat *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fstatfs_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fstatfs fstatfs "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fsync(fd int) (err error) { - _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + _, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_fsync_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fsync fsync "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) + _, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_ftruncate_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0) egid = int(r0) return } +var libc_getegid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getegid getegid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Geteuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0) uid = int(r0) return } +var libc_geteuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_geteuid geteuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0) gid = int(r0) return } +var libc_getgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getgid getgid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0) pgid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -774,34 +1026,50 @@ func Getpgid(pid int) (pgid int, err error) { return } +var libc_getpgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpgid getpgid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpgrp() (pgrp int) { - r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0) pgrp = int(r0) return } +var libc_getpgrp_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0) pid = int(r0) return } +var libc_getpid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpid getpid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0) ppid = int(r0) return } +var libc_getppid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getppid getppid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0) prio = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -809,20 +1077,28 @@ func Getpriority(which int, who int) (prio int, err error) { return } +var libc_getpriority_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getpriority getpriority "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + _, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_getrlimit_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrtable() (rtable int, err error) { - r0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0) + r0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0) rtable = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -830,20 +1106,28 @@ func Getrtable() (rtable int, err error) { return } +var libc_getrtable_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getrtable getrtable "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + _, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_getrusage_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getrusage getrusage "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getsid(pid int) (sid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0) sid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -851,46 +1135,66 @@ func Getsid(pid int) (sid int, err error) { return } +var libc_getsid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getsid getsid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_gettimeofday_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0) uid = int(r0) return } +var libc_getuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getuid getuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Issetugid() (tainted bool) { - r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + r0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0) tainted = bool(r0 != 0) return } +var libc_issetugid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_issetugid issetugid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Kill(pid int, signum syscall.Signal) (err error) { - _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + _, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_kill_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_kill kill "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Kqueue() (fd int, err error) { - r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -898,6 +1202,10 @@ func Kqueue() (fd int, err error) { return } +var libc_kqueue_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_kqueue kqueue "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lchown(path string, uid int, gid int) (err error) { @@ -906,13 +1214,17 @@ func Lchown(path string, uid int, gid int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + _, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_lchown_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_lchown lchown "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Link(path string, link string) (err error) { @@ -926,13 +1238,17 @@ func Link(path string, link string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + _, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_link_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_link link "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { @@ -946,23 +1262,31 @@ func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err er if err != nil { return } - _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + _, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_linkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_linkat linkat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Listen(s int, backlog int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + _, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_listen_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_listen listen "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Lstat(path string, stat *Stat_t) (err error) { @@ -971,13 +1295,17 @@ func Lstat(path string, stat *Stat_t) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_lstat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_lstat lstat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mkdir(path string, mode uint32) (err error) { @@ -986,13 +1314,17 @@ func Mkdir(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mkdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mkdir mkdir "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mkdirat(dirfd int, path string, mode uint32) (err error) { @@ -1001,13 +1333,17 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + _, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mkdirat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mkfifo(path string, mode uint32) (err error) { @@ -1016,13 +1352,17 @@ func Mkfifo(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mkfifo_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mkfifoat(dirfd int, path string, mode uint32) (err error) { @@ -1031,13 +1371,17 @@ func Mkfifoat(dirfd int, path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + _, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mkfifoat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mknod(path string, mode uint32, dev int) (err error) { @@ -1046,13 +1390,17 @@ func Mknod(path string, mode uint32, dev int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + _, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mknod_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mknod mknod "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { @@ -1061,23 +1409,31 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + _, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_mknodat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mknodat mknodat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_nanosleep_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Open(path string, mode int, perm uint32) (fd int, err error) { @@ -1086,7 +1442,7 @@ func Open(path string, mode int, perm uint32) (fd int, err error) { if err != nil { return } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1094,6 +1450,10 @@ func Open(path string, mode int, perm uint32) (fd int, err error) { return } +var libc_open_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_open open "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { @@ -1102,7 +1462,7 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { if err != nil { return } - r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1110,6 +1470,10 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { return } +var libc_openat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_openat openat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Pathconf(path string, name int) (val int, err error) { @@ -1118,7 +1482,7 @@ func Pathconf(path string, name int) (val int, err error) { if err != nil { return } - r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) val = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1126,6 +1490,10 @@ func Pathconf(path string, name int) (val int, err error) { return } +var libc_pathconf_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pathconf pathconf "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func pread(fd int, p []byte, offset int64) (n int, err error) { @@ -1135,7 +1503,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1143,6 +1511,10 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { return } +var libc_pread_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pread pread "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func pwrite(fd int, p []byte, offset int64) (n int, err error) { @@ -1152,7 +1524,7 @@ func pwrite(fd int, p []byte, offset int64) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1160,6 +1532,10 @@ func pwrite(fd int, p []byte, offset int64) (n int, err error) { return } +var libc_pwrite_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pwrite pwrite "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func read(fd int, p []byte) (n int, err error) { @@ -1169,7 +1545,7 @@ func read(fd int, p []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1177,6 +1553,10 @@ func read(fd int, p []byte) (n int, err error) { return } +var libc_read_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_read read "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Readlink(path string, buf []byte) (n int, err error) { @@ -1191,7 +1571,7 @@ func Readlink(path string, buf []byte) (n int, err error) { } else { _p1 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1199,6 +1579,10 @@ func Readlink(path string, buf []byte) (n int, err error) { return } +var libc_readlink_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readlink readlink "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { @@ -1213,7 +1597,7 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { } else { _p1 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1221,6 +1605,10 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { return } +var libc_readlinkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readlinkat readlinkat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Rename(from string, to string) (err error) { @@ -1234,13 +1622,17 @@ func Rename(from string, to string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + _, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_rename_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_rename rename "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Renameat(fromfd int, from string, tofd int, to string) (err error) { @@ -1254,13 +1646,17 @@ func Renameat(fromfd int, from string, tofd int, to string) (err error) { if err != nil { return } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + _, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_renameat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_renameat renameat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Revoke(path string) (err error) { @@ -1269,13 +1665,17 @@ func Revoke(path string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_revoke_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_revoke revoke "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Rmdir(path string) (err error) { @@ -1284,17 +1684,21 @@ func Rmdir(path string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_rmdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_rmdir rmdir "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) + r0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence)) newoffset = int64(r0) if e1 != 0 { err = errnoErr(e1) @@ -1302,10 +1706,14 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { return } +var libc_lseek_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_lseek lseek "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1313,36 +1721,52 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err return } +var libc_select_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_select select "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setegid(egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setegid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setegid setegid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Seteuid(euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_seteuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_seteuid seteuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setgid(gid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setgid setgid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setlogin(name string) (err error) { @@ -1351,97 +1775,133 @@ func Setlogin(name string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setlogin_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setlogin setlogin "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + _, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setpgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setpgid setpgid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + _, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setpriority_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setpriority setpriority "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + _, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setregid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setregid setregid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + _, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setreuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setreuid setreuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + _, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setresgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setresgid setresgid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + _, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setresuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setresuid setresuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setrlimit_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setrtable(rtable int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setrtable_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setrtable setrtable "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0) pid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1449,26 +1909,38 @@ func Setsid() (pid int, err error) { return } +var libc_setsid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setsid setsid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_settimeofday_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_settimeofday settimeofday "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setuid(uid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_setuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setuid setuid "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Stat(path string, stat *Stat_t) (err error) { @@ -1477,13 +1949,17 @@ func Stat(path string, stat *Stat_t) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_stat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_stat stat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Statfs(path string, stat *Statfs_t) (err error) { @@ -1492,13 +1968,17 @@ func Statfs(path string, stat *Statfs_t) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_statfs_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_statfs statfs "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Symlink(path string, link string) (err error) { @@ -1512,13 +1992,17 @@ func Symlink(path string, link string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + _, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_symlink_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_symlink symlink "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { @@ -1532,23 +2016,31 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + _, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) if e1 != 0 { err = errnoErr(e1) } return } +var libc_symlinkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_symlinkat symlinkat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Sync() (err error) { - _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + _, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_sync_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sync sync "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Truncate(path string, length int64) (err error) { @@ -1557,21 +2049,29 @@ func Truncate(path string, length int64) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) + _, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_truncate_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_truncate truncate "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Umask(newmask int) (oldmask int) { - r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0) oldmask = int(r0) return } +var libc_umask_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_umask umask "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Unlink(path string) (err error) { @@ -1580,13 +2080,17 @@ func Unlink(path string) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_unlink_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unlink unlink "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Unlinkat(dirfd int, path string, flags int) (err error) { @@ -1595,13 +2099,17 @@ func Unlinkat(dirfd int, path string, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + _, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } return } +var libc_unlinkat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Unmount(path string, flags int) (err error) { @@ -1610,13 +2118,17 @@ func Unmount(path string, flags int) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + _, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_unmount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unmount unmount "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func write(fd int, p []byte) (n int, err error) { @@ -1626,7 +2138,7 @@ func write(fd int, p []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1634,10 +2146,14 @@ func write(fd int, p []byte) (n int, err error) { return } +var libc_write_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_write write "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) + r0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) ret = uintptr(r0) if e1 != 0 { err = errnoErr(e1) @@ -1645,20 +2161,28 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) ( return } +var libc_mmap_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mmap mmap "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + _, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0) if e1 != 0 { err = errnoErr(e1) } return } +var libc_munmap_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_munmap munmap "libc.so" + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1669,7 +2193,7 @@ func readlen(fd int, buf *byte, nbuf int) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1685,9 +2209,13 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error if err != nil { return } - _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } + +var libc_utimensat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_utimensat utimensat "libc.so" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go index d12f4fb..fdf53f8 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go @@ -66,6 +66,7 @@ import ( //go:cgo_import_dynamic libc_getpriority getpriority "libc.so" //go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so" //go:cgo_import_dynamic libc_getrusage getrusage "libc.so" +//go:cgo_import_dynamic libc_getsid getsid "libc.so" //go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so" //go:cgo_import_dynamic libc_getuid getuid "libc.so" //go:cgo_import_dynamic libc_kill kill "libc.so" @@ -202,6 +203,7 @@ import ( //go:linkname procGetpriority libc_getpriority //go:linkname procGetrlimit libc_getrlimit //go:linkname procGetrusage libc_getrusage +//go:linkname procGetsid libc_getsid //go:linkname procGettimeofday libc_gettimeofday //go:linkname procGetuid libc_getuid //go:linkname procKill libc_kill @@ -339,6 +341,7 @@ var ( procGetpriority, procGetrlimit, procGetrusage, + procGetsid, procGettimeofday, procGetuid, procKill, @@ -1044,6 +1047,17 @@ func Getrusage(who int, rusage *Rusage) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetsid)), 1, uintptr(pid), 0, 0, 0, 0, 0) + sid = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Gettimeofday(tv *Timeval) (err error) { _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGettimeofday)), 1, uintptr(unsafe.Pointer(tv)), 0, 0, 0, 0, 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go index 59d5dfc..4e0d961 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go @@ -1,4 +1,4 @@ -// go run mksysnum.go https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master +// go run mksysnum.go https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12 // Code generated by the command above; see README.md. DO NOT EDIT. //go:build 386 && freebsd @@ -19,10 +19,9 @@ const ( SYS_UNLINK = 10 // { int unlink(char *path); } SYS_CHDIR = 12 // { int chdir(char *path); } SYS_FCHDIR = 13 // { int fchdir(int fd); } - SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } SYS_CHMOD = 15 // { int chmod(char *path, int mode); } SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } - SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int + SYS_BREAK = 17 // { caddr_t break(char *nsize); } SYS_GETPID = 20 // { pid_t getpid(void); } SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); } SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } @@ -43,7 +42,6 @@ const ( SYS_KILL = 37 // { int kill(int pid, int signum); } SYS_GETPPID = 39 // { pid_t getppid(void); } SYS_DUP = 41 // { int dup(u_int fd); } - SYS_PIPE = 42 // { int pipe(void); } SYS_GETEGID = 43 // { gid_t getegid(void); } SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); } SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); } @@ -58,15 +56,14 @@ const ( SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, size_t count); } SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); } - SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args int + SYS_UMASK = 60 // { int umask(int newmask); } SYS_CHROOT = 61 // { int chroot(char *path); } SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); } SYS_VFORK = 66 // { int vfork(void); } SYS_SBRK = 69 // { int sbrk(int incr); } SYS_SSTK = 70 // { int sstk(int incr); } - SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise ovadvise_args int SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } - SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, int prot); } + SYS_MPROTECT = 74 // { int mprotect(void *addr, size_t len, int prot); } SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); } SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); } SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); } @@ -124,14 +121,10 @@ const ( SYS_SETGID = 181 // { int setgid(gid_t gid); } SYS_SETEGID = 182 // { int setegid(gid_t egid); } SYS_SETEUID = 183 // { int seteuid(uid_t euid); } - SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } - SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } - SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int - SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, u_int count, long *basep); } SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } @@ -143,12 +136,12 @@ const ( SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); } SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); } SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } - SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_MSGRCV = 227 // { ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); } SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); } SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); } SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); } - SYS_CLOCK_SETTIME = 233 // { int clock_settime( clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_SETTIME = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); } SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); } SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); } SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } @@ -157,50 +150,44 @@ const ( SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } - SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( struct ffclock_estimate *cest); } - SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( struct ffclock_estimate *cest); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate(struct ffclock_estimate *cest); } + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate(struct ffclock_estimate *cest); } SYS_CLOCK_NANOSLEEP = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); } - SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,int which, clockid_t *clock_id); } + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id, int which, clockid_t *clock_id); } SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); } SYS_RFORK = 251 // { int rfork(int flags); } - SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); } SYS_ISSETUGID = 253 // { int issetugid(void); } SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); } SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); } - SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); } - SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, size_t count); } + SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb* const *acb_list, int nent, struct sigevent *sig); } SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); } - SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } - SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } - SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); } - SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } SYS_MODNEXT = 300 // { int modnext(int modid); } - SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat *stat); } + SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat* stat); } SYS_MODFNEXT = 302 // { int modfnext(int modid); } SYS_MODFIND = 303 // { int modfind(const char *name); } SYS_KLDLOAD = 304 // { int kldload(const char *file); } SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } SYS_KLDFIND = 306 // { int kldfind(const char *file); } SYS_KLDNEXT = 307 // { int kldnext(int fileid); } - SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat *stat); } SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } SYS_GETSID = 310 // { int getsid(pid_t pid); } SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); } SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); } SYS_AIO_RETURN = 314 // { ssize_t aio_return(struct aiocb *aiocbp); } - SYS_AIO_SUSPEND = 315 // { int aio_suspend( struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } + SYS_AIO_SUSPEND = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); } SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); } SYS_YIELD = 321 // { int yield(void); } SYS_MLOCKALL = 324 // { int mlockall(int how); } SYS_MUNLOCKALL = 325 // { int munlockall(void); } - SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, size_t buflen); } SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); } SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); } SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); } @@ -226,14 +213,13 @@ const ( SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); } SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); } SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } - SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } - SYS_AIO_WAITCOMPLETE = 359 // { ssize_t aio_waitcomplete( struct aiocb **aiocbp, struct timespec *timeout); } + SYS_AIO_WAITCOMPLETE = 359 // { ssize_t aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); } SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } SYS_KQUEUE = 362 // { int kqueue(void); } - SYS_KEVENT = 363 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } @@ -251,10 +237,6 @@ const ( SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); } SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); } SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, int call, void *arg); } - SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, long bufsize, int mode); } - SYS_STATFS = 396 // { int statfs(char *path, struct statfs *buf); } - SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } - SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); } SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); } SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); } @@ -267,14 +249,14 @@ const ( SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); } SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); } SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); } - SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); } SYS_SIGACTION = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); } - SYS_SIGRETURN = 417 // { int sigreturn( const struct __ucontext *sigcntxp); } + SYS_SIGRETURN = 417 // { int sigreturn(const struct __ucontext *sigcntxp); } SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } - SYS_SETCONTEXT = 422 // { int setcontext( const struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext(const struct __ucontext *ucp); } SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); } SYS_SWAPOFF = 424 // { int swapoff(const char *name); } SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); } @@ -288,10 +270,10 @@ const ( SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( const char *path, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); } - SYS_THR_SUSPEND = 442 // { int thr_suspend( const struct timespec *timeout); } + SYS_THR_SUSPEND = 442 // { int thr_suspend(const struct timespec *timeout); } SYS_THR_WAKE = 443 // { int thr_wake(long id); } SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } SYS_AUDIT = 445 // { int audit(const void *record, u_int length); } @@ -300,17 +282,17 @@ const ( SYS_SETAUID = 448 // { int setauid(uid_t *auid); } SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } - SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); } - SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); } + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); } SYS_AUDITCTL = 453 // { int auditctl(char *path); } SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); } SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, int param_size); } SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); } - SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); } - SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); } - SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len,unsigned msg_prio, const struct timespec *abs_timeout);} - SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); } + SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); } + SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); } + SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); } + SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); } SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); } SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } @@ -319,7 +301,7 @@ const ( SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } - SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr * from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); } + SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr *from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); } SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); } SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); } SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); } @@ -338,14 +320,12 @@ const ( SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); } SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); } SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, char **envv); } - SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, struct stat *buf, int flag); } SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, struct timeval *times); } SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); } SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } - SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); } SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, mode_t mode); } - SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); } + SYS_READLINKAT = 500 // { ssize_t readlinkat(int fd, char *path, char *buf, size_t bufsize); } SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); } SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, char *path2); } SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } @@ -391,7 +371,24 @@ const ( SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); } SYS_FUTIMENS = 546 // { int futimens(int fd, struct timespec *times); } SYS_UTIMENSAT = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); } - SYS_NUMA_GETAFFINITY = 548 // { int numa_getaffinity(cpuwhich_t which, id_t id, struct vm_domain_policy_entry *policy); } - SYS_NUMA_SETAFFINITY = 549 // { int numa_setaffinity(cpuwhich_t which, id_t id, const struct vm_domain_policy_entry *policy); } SYS_FDATASYNC = 550 // { int fdatasync(int fd); } + SYS_FSTAT = 551 // { int fstat(int fd, struct stat *sb); } + SYS_FSTATAT = 552 // { int fstatat(int fd, char *path, struct stat *buf, int flag); } + SYS_FHSTAT = 553 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } + SYS_GETDIRENTRIES = 554 // { ssize_t getdirentries(int fd, char *buf, size_t count, off_t *basep); } + SYS_STATFS = 555 // { int statfs(char *path, struct statfs *buf); } + SYS_FSTATFS = 556 // { int fstatfs(int fd, struct statfs *buf); } + SYS_GETFSSTAT = 557 // { int getfsstat(struct statfs *buf, long bufsize, int mode); } + SYS_FHSTATFS = 558 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } + SYS_MKNODAT = 559 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); } + SYS_KEVENT = 560 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } + SYS_CPUSET_GETDOMAIN = 561 // { int cpuset_getdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int *policy); } + SYS_CPUSET_SETDOMAIN = 562 // { int cpuset_setdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int policy); } + SYS_GETRANDOM = 563 // { int getrandom(void *buf, size_t buflen, unsigned int flags); } + SYS_GETFHAT = 564 // { int getfhat(int fd, char *path, struct fhandle *fhp, int flags); } + SYS_FHLINK = 565 // { int fhlink(struct fhandle *fhp, const char *to); } + SYS_FHLINKAT = 566 // { int fhlinkat(struct fhandle *fhp, int tofd, const char *to,); } + SYS_FHREADLINK = 567 // { int fhreadlink(struct fhandle *fhp, char *buf, size_t bufsize); } + SYS___SYSCTLBYNAME = 570 // { int __sysctlbyname(const char *name, size_t namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } + SYS_CLOSE_RANGE = 575 // { int close_range(u_int lowfd, u_int highfd, int flags); } ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go index 342d471..01636b8 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go @@ -1,4 +1,4 @@ -// go run mksysnum.go https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master +// go run mksysnum.go https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12 // Code generated by the command above; see README.md. DO NOT EDIT. //go:build amd64 && freebsd @@ -19,10 +19,9 @@ const ( SYS_UNLINK = 10 // { int unlink(char *path); } SYS_CHDIR = 12 // { int chdir(char *path); } SYS_FCHDIR = 13 // { int fchdir(int fd); } - SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } SYS_CHMOD = 15 // { int chmod(char *path, int mode); } SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } - SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int + SYS_BREAK = 17 // { caddr_t break(char *nsize); } SYS_GETPID = 20 // { pid_t getpid(void); } SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); } SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } @@ -43,7 +42,6 @@ const ( SYS_KILL = 37 // { int kill(int pid, int signum); } SYS_GETPPID = 39 // { pid_t getppid(void); } SYS_DUP = 41 // { int dup(u_int fd); } - SYS_PIPE = 42 // { int pipe(void); } SYS_GETEGID = 43 // { gid_t getegid(void); } SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); } SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); } @@ -58,15 +56,14 @@ const ( SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, size_t count); } SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); } - SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args int + SYS_UMASK = 60 // { int umask(int newmask); } SYS_CHROOT = 61 // { int chroot(char *path); } SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); } SYS_VFORK = 66 // { int vfork(void); } SYS_SBRK = 69 // { int sbrk(int incr); } SYS_SSTK = 70 // { int sstk(int incr); } - SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise ovadvise_args int SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } - SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, int prot); } + SYS_MPROTECT = 74 // { int mprotect(void *addr, size_t len, int prot); } SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); } SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); } SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); } @@ -124,14 +121,10 @@ const ( SYS_SETGID = 181 // { int setgid(gid_t gid); } SYS_SETEGID = 182 // { int setegid(gid_t egid); } SYS_SETEUID = 183 // { int seteuid(uid_t euid); } - SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } - SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } - SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int - SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, u_int count, long *basep); } SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } @@ -143,12 +136,12 @@ const ( SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); } SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); } SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } - SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_MSGRCV = 227 // { ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); } SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); } SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); } SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); } - SYS_CLOCK_SETTIME = 233 // { int clock_settime( clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_SETTIME = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); } SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); } SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); } SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } @@ -157,50 +150,44 @@ const ( SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } - SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( struct ffclock_estimate *cest); } - SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( struct ffclock_estimate *cest); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate(struct ffclock_estimate *cest); } + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate(struct ffclock_estimate *cest); } SYS_CLOCK_NANOSLEEP = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); } - SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,int which, clockid_t *clock_id); } + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id, int which, clockid_t *clock_id); } SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); } SYS_RFORK = 251 // { int rfork(int flags); } - SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); } SYS_ISSETUGID = 253 // { int issetugid(void); } SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); } SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); } - SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); } - SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, size_t count); } + SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb* const *acb_list, int nent, struct sigevent *sig); } SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); } - SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } - SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } - SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); } - SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } SYS_MODNEXT = 300 // { int modnext(int modid); } - SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat *stat); } + SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat* stat); } SYS_MODFNEXT = 302 // { int modfnext(int modid); } SYS_MODFIND = 303 // { int modfind(const char *name); } SYS_KLDLOAD = 304 // { int kldload(const char *file); } SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } SYS_KLDFIND = 306 // { int kldfind(const char *file); } SYS_KLDNEXT = 307 // { int kldnext(int fileid); } - SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat *stat); } SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } SYS_GETSID = 310 // { int getsid(pid_t pid); } SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); } SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); } SYS_AIO_RETURN = 314 // { ssize_t aio_return(struct aiocb *aiocbp); } - SYS_AIO_SUSPEND = 315 // { int aio_suspend( struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } + SYS_AIO_SUSPEND = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); } SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); } SYS_YIELD = 321 // { int yield(void); } SYS_MLOCKALL = 324 // { int mlockall(int how); } SYS_MUNLOCKALL = 325 // { int munlockall(void); } - SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, size_t buflen); } SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); } SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); } SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); } @@ -226,14 +213,13 @@ const ( SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); } SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); } SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } - SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } - SYS_AIO_WAITCOMPLETE = 359 // { ssize_t aio_waitcomplete( struct aiocb **aiocbp, struct timespec *timeout); } + SYS_AIO_WAITCOMPLETE = 359 // { ssize_t aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); } SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } SYS_KQUEUE = 362 // { int kqueue(void); } - SYS_KEVENT = 363 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } @@ -251,10 +237,6 @@ const ( SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); } SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); } SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, int call, void *arg); } - SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, long bufsize, int mode); } - SYS_STATFS = 396 // { int statfs(char *path, struct statfs *buf); } - SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } - SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); } SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); } SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); } @@ -267,14 +249,14 @@ const ( SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); } SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); } SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); } - SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); } SYS_SIGACTION = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); } - SYS_SIGRETURN = 417 // { int sigreturn( const struct __ucontext *sigcntxp); } + SYS_SIGRETURN = 417 // { int sigreturn(const struct __ucontext *sigcntxp); } SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } - SYS_SETCONTEXT = 422 // { int setcontext( const struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext(const struct __ucontext *ucp); } SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); } SYS_SWAPOFF = 424 // { int swapoff(const char *name); } SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); } @@ -288,10 +270,10 @@ const ( SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( const char *path, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); } - SYS_THR_SUSPEND = 442 // { int thr_suspend( const struct timespec *timeout); } + SYS_THR_SUSPEND = 442 // { int thr_suspend(const struct timespec *timeout); } SYS_THR_WAKE = 443 // { int thr_wake(long id); } SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } SYS_AUDIT = 445 // { int audit(const void *record, u_int length); } @@ -300,17 +282,17 @@ const ( SYS_SETAUID = 448 // { int setauid(uid_t *auid); } SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } - SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); } - SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); } + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); } SYS_AUDITCTL = 453 // { int auditctl(char *path); } SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); } SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, int param_size); } SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); } - SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); } - SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); } - SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len,unsigned msg_prio, const struct timespec *abs_timeout);} - SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); } + SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); } + SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); } + SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); } + SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); } SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); } SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } @@ -319,7 +301,7 @@ const ( SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } - SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr * from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); } + SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr *from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); } SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); } SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); } SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); } @@ -338,14 +320,12 @@ const ( SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); } SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); } SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, char **envv); } - SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, struct stat *buf, int flag); } SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, struct timeval *times); } SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); } SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } - SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); } SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, mode_t mode); } - SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); } + SYS_READLINKAT = 500 // { ssize_t readlinkat(int fd, char *path, char *buf, size_t bufsize); } SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); } SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, char *path2); } SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } @@ -391,7 +371,24 @@ const ( SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); } SYS_FUTIMENS = 546 // { int futimens(int fd, struct timespec *times); } SYS_UTIMENSAT = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); } - SYS_NUMA_GETAFFINITY = 548 // { int numa_getaffinity(cpuwhich_t which, id_t id, struct vm_domain_policy_entry *policy); } - SYS_NUMA_SETAFFINITY = 549 // { int numa_setaffinity(cpuwhich_t which, id_t id, const struct vm_domain_policy_entry *policy); } SYS_FDATASYNC = 550 // { int fdatasync(int fd); } + SYS_FSTAT = 551 // { int fstat(int fd, struct stat *sb); } + SYS_FSTATAT = 552 // { int fstatat(int fd, char *path, struct stat *buf, int flag); } + SYS_FHSTAT = 553 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } + SYS_GETDIRENTRIES = 554 // { ssize_t getdirentries(int fd, char *buf, size_t count, off_t *basep); } + SYS_STATFS = 555 // { int statfs(char *path, struct statfs *buf); } + SYS_FSTATFS = 556 // { int fstatfs(int fd, struct statfs *buf); } + SYS_GETFSSTAT = 557 // { int getfsstat(struct statfs *buf, long bufsize, int mode); } + SYS_FHSTATFS = 558 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } + SYS_MKNODAT = 559 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); } + SYS_KEVENT = 560 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } + SYS_CPUSET_GETDOMAIN = 561 // { int cpuset_getdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int *policy); } + SYS_CPUSET_SETDOMAIN = 562 // { int cpuset_setdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int policy); } + SYS_GETRANDOM = 563 // { int getrandom(void *buf, size_t buflen, unsigned int flags); } + SYS_GETFHAT = 564 // { int getfhat(int fd, char *path, struct fhandle *fhp, int flags); } + SYS_FHLINK = 565 // { int fhlink(struct fhandle *fhp, const char *to); } + SYS_FHLINKAT = 566 // { int fhlinkat(struct fhandle *fhp, int tofd, const char *to,); } + SYS_FHREADLINK = 567 // { int fhreadlink(struct fhandle *fhp, char *buf, size_t bufsize); } + SYS___SYSCTLBYNAME = 570 // { int __sysctlbyname(const char *name, size_t namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } + SYS_CLOSE_RANGE = 575 // { int close_range(u_int lowfd, u_int highfd, int flags); } ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go index e2e3d72..ad99bc1 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go @@ -1,4 +1,4 @@ -// go run mksysnum.go https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master +// go run mksysnum.go https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12 // Code generated by the command above; see README.md. DO NOT EDIT. //go:build arm && freebsd @@ -19,10 +19,9 @@ const ( SYS_UNLINK = 10 // { int unlink(char *path); } SYS_CHDIR = 12 // { int chdir(char *path); } SYS_FCHDIR = 13 // { int fchdir(int fd); } - SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } SYS_CHMOD = 15 // { int chmod(char *path, int mode); } SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } - SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int + SYS_BREAK = 17 // { caddr_t break(char *nsize); } SYS_GETPID = 20 // { pid_t getpid(void); } SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); } SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } @@ -43,7 +42,6 @@ const ( SYS_KILL = 37 // { int kill(int pid, int signum); } SYS_GETPPID = 39 // { pid_t getppid(void); } SYS_DUP = 41 // { int dup(u_int fd); } - SYS_PIPE = 42 // { int pipe(void); } SYS_GETEGID = 43 // { gid_t getegid(void); } SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); } SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); } @@ -58,15 +56,14 @@ const ( SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, size_t count); } SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); } - SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args int + SYS_UMASK = 60 // { int umask(int newmask); } SYS_CHROOT = 61 // { int chroot(char *path); } SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); } SYS_VFORK = 66 // { int vfork(void); } SYS_SBRK = 69 // { int sbrk(int incr); } SYS_SSTK = 70 // { int sstk(int incr); } - SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise ovadvise_args int SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } - SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, int prot); } + SYS_MPROTECT = 74 // { int mprotect(void *addr, size_t len, int prot); } SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); } SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); } SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); } @@ -124,14 +121,10 @@ const ( SYS_SETGID = 181 // { int setgid(gid_t gid); } SYS_SETEGID = 182 // { int setegid(gid_t egid); } SYS_SETEUID = 183 // { int seteuid(uid_t euid); } - SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } - SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } - SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int - SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, u_int count, long *basep); } SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } @@ -143,12 +136,12 @@ const ( SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); } SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); } SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } - SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_MSGRCV = 227 // { ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); } SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); } SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); } SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); } - SYS_CLOCK_SETTIME = 233 // { int clock_settime( clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_SETTIME = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); } SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); } SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); } SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } @@ -157,50 +150,44 @@ const ( SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } - SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( struct ffclock_estimate *cest); } - SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( struct ffclock_estimate *cest); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate(struct ffclock_estimate *cest); } + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate(struct ffclock_estimate *cest); } SYS_CLOCK_NANOSLEEP = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); } - SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,int which, clockid_t *clock_id); } + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id, int which, clockid_t *clock_id); } SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); } SYS_RFORK = 251 // { int rfork(int flags); } - SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); } SYS_ISSETUGID = 253 // { int issetugid(void); } SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); } SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); } - SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); } - SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, size_t count); } + SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb* const *acb_list, int nent, struct sigevent *sig); } SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); } - SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } - SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } - SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); } - SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } SYS_MODNEXT = 300 // { int modnext(int modid); } - SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat *stat); } + SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat* stat); } SYS_MODFNEXT = 302 // { int modfnext(int modid); } SYS_MODFIND = 303 // { int modfind(const char *name); } SYS_KLDLOAD = 304 // { int kldload(const char *file); } SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } SYS_KLDFIND = 306 // { int kldfind(const char *file); } SYS_KLDNEXT = 307 // { int kldnext(int fileid); } - SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat *stat); } SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } SYS_GETSID = 310 // { int getsid(pid_t pid); } SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); } SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); } SYS_AIO_RETURN = 314 // { ssize_t aio_return(struct aiocb *aiocbp); } - SYS_AIO_SUSPEND = 315 // { int aio_suspend( struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } + SYS_AIO_SUSPEND = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); } SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); } SYS_YIELD = 321 // { int yield(void); } SYS_MLOCKALL = 324 // { int mlockall(int how); } SYS_MUNLOCKALL = 325 // { int munlockall(void); } - SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, size_t buflen); } SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); } SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); } SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); } @@ -226,14 +213,13 @@ const ( SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); } SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); } SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } - SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } - SYS_AIO_WAITCOMPLETE = 359 // { ssize_t aio_waitcomplete( struct aiocb **aiocbp, struct timespec *timeout); } + SYS_AIO_WAITCOMPLETE = 359 // { ssize_t aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); } SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } SYS_KQUEUE = 362 // { int kqueue(void); } - SYS_KEVENT = 363 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } @@ -251,10 +237,6 @@ const ( SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); } SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); } SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, int call, void *arg); } - SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, long bufsize, int mode); } - SYS_STATFS = 396 // { int statfs(char *path, struct statfs *buf); } - SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } - SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); } SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); } SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); } @@ -267,14 +249,14 @@ const ( SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); } SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); } SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); } - SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); } SYS_SIGACTION = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); } - SYS_SIGRETURN = 417 // { int sigreturn( const struct __ucontext *sigcntxp); } + SYS_SIGRETURN = 417 // { int sigreturn(const struct __ucontext *sigcntxp); } SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } - SYS_SETCONTEXT = 422 // { int setcontext( const struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext(const struct __ucontext *ucp); } SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); } SYS_SWAPOFF = 424 // { int swapoff(const char *name); } SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); } @@ -288,10 +270,10 @@ const ( SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( const char *path, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); } - SYS_THR_SUSPEND = 442 // { int thr_suspend( const struct timespec *timeout); } + SYS_THR_SUSPEND = 442 // { int thr_suspend(const struct timespec *timeout); } SYS_THR_WAKE = 443 // { int thr_wake(long id); } SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } SYS_AUDIT = 445 // { int audit(const void *record, u_int length); } @@ -300,17 +282,17 @@ const ( SYS_SETAUID = 448 // { int setauid(uid_t *auid); } SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } - SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); } - SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); } + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); } SYS_AUDITCTL = 453 // { int auditctl(char *path); } SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); } SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, int param_size); } SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); } - SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); } - SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); } - SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len,unsigned msg_prio, const struct timespec *abs_timeout);} - SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); } + SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); } + SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); } + SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); } + SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); } SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); } SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } @@ -319,7 +301,7 @@ const ( SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } - SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr * from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); } + SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr *from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); } SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); } SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); } SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); } @@ -338,14 +320,12 @@ const ( SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); } SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); } SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, char **envv); } - SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, struct stat *buf, int flag); } SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, struct timeval *times); } SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); } SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } - SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); } SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, mode_t mode); } - SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); } + SYS_READLINKAT = 500 // { ssize_t readlinkat(int fd, char *path, char *buf, size_t bufsize); } SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); } SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, char *path2); } SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } @@ -391,7 +371,24 @@ const ( SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); } SYS_FUTIMENS = 546 // { int futimens(int fd, struct timespec *times); } SYS_UTIMENSAT = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); } - SYS_NUMA_GETAFFINITY = 548 // { int numa_getaffinity(cpuwhich_t which, id_t id, struct vm_domain_policy_entry *policy); } - SYS_NUMA_SETAFFINITY = 549 // { int numa_setaffinity(cpuwhich_t which, id_t id, const struct vm_domain_policy_entry *policy); } SYS_FDATASYNC = 550 // { int fdatasync(int fd); } + SYS_FSTAT = 551 // { int fstat(int fd, struct stat *sb); } + SYS_FSTATAT = 552 // { int fstatat(int fd, char *path, struct stat *buf, int flag); } + SYS_FHSTAT = 553 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } + SYS_GETDIRENTRIES = 554 // { ssize_t getdirentries(int fd, char *buf, size_t count, off_t *basep); } + SYS_STATFS = 555 // { int statfs(char *path, struct statfs *buf); } + SYS_FSTATFS = 556 // { int fstatfs(int fd, struct statfs *buf); } + SYS_GETFSSTAT = 557 // { int getfsstat(struct statfs *buf, long bufsize, int mode); } + SYS_FHSTATFS = 558 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } + SYS_MKNODAT = 559 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); } + SYS_KEVENT = 560 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } + SYS_CPUSET_GETDOMAIN = 561 // { int cpuset_getdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int *policy); } + SYS_CPUSET_SETDOMAIN = 562 // { int cpuset_setdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int policy); } + SYS_GETRANDOM = 563 // { int getrandom(void *buf, size_t buflen, unsigned int flags); } + SYS_GETFHAT = 564 // { int getfhat(int fd, char *path, struct fhandle *fhp, int flags); } + SYS_FHLINK = 565 // { int fhlink(struct fhandle *fhp, const char *to); } + SYS_FHLINKAT = 566 // { int fhlinkat(struct fhandle *fhp, int tofd, const char *to,); } + SYS_FHREADLINK = 567 // { int fhreadlink(struct fhandle *fhp, char *buf, size_t bufsize); } + SYS___SYSCTLBYNAME = 570 // { int __sysctlbyname(const char *name, size_t namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } + SYS_CLOSE_RANGE = 575 // { int close_range(u_int lowfd, u_int highfd, int flags); } ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go index 61ad5ca..89dcc42 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go @@ -1,4 +1,4 @@ -// go run mksysnum.go https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master +// go run mksysnum.go https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12 // Code generated by the command above; see README.md. DO NOT EDIT. //go:build arm64 && freebsd @@ -19,10 +19,9 @@ const ( SYS_UNLINK = 10 // { int unlink(char *path); } SYS_CHDIR = 12 // { int chdir(char *path); } SYS_FCHDIR = 13 // { int fchdir(int fd); } - SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } SYS_CHMOD = 15 // { int chmod(char *path, int mode); } SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } - SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int + SYS_BREAK = 17 // { caddr_t break(char *nsize); } SYS_GETPID = 20 // { pid_t getpid(void); } SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); } SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } @@ -43,7 +42,6 @@ const ( SYS_KILL = 37 // { int kill(int pid, int signum); } SYS_GETPPID = 39 // { pid_t getppid(void); } SYS_DUP = 41 // { int dup(u_int fd); } - SYS_PIPE = 42 // { int pipe(void); } SYS_GETEGID = 43 // { gid_t getegid(void); } SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); } SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); } @@ -58,15 +56,14 @@ const ( SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, size_t count); } SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); } - SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args int + SYS_UMASK = 60 // { int umask(int newmask); } SYS_CHROOT = 61 // { int chroot(char *path); } SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); } SYS_VFORK = 66 // { int vfork(void); } SYS_SBRK = 69 // { int sbrk(int incr); } SYS_SSTK = 70 // { int sstk(int incr); } - SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise ovadvise_args int SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } - SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, int prot); } + SYS_MPROTECT = 74 // { int mprotect(void *addr, size_t len, int prot); } SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); } SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); } SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); } @@ -124,14 +121,10 @@ const ( SYS_SETGID = 181 // { int setgid(gid_t gid); } SYS_SETEGID = 182 // { int setegid(gid_t egid); } SYS_SETEUID = 183 // { int seteuid(uid_t euid); } - SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } - SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } - SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int - SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, u_int count, long *basep); } SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } @@ -143,12 +136,12 @@ const ( SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); } SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); } SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } - SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_MSGRCV = 227 // { ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); } SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); } SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); } SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); } - SYS_CLOCK_SETTIME = 233 // { int clock_settime( clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_SETTIME = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); } SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); } SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); } SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } @@ -157,50 +150,44 @@ const ( SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } - SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( struct ffclock_estimate *cest); } - SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( struct ffclock_estimate *cest); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate(struct ffclock_estimate *cest); } + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate(struct ffclock_estimate *cest); } SYS_CLOCK_NANOSLEEP = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); } - SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,int which, clockid_t *clock_id); } + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id, int which, clockid_t *clock_id); } SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); } SYS_RFORK = 251 // { int rfork(int flags); } - SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); } SYS_ISSETUGID = 253 // { int issetugid(void); } SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); } SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); } - SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); } - SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, size_t count); } + SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb* const *acb_list, int nent, struct sigevent *sig); } SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); } - SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } - SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } - SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); } - SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } SYS_MODNEXT = 300 // { int modnext(int modid); } - SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat *stat); } + SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat* stat); } SYS_MODFNEXT = 302 // { int modfnext(int modid); } SYS_MODFIND = 303 // { int modfind(const char *name); } SYS_KLDLOAD = 304 // { int kldload(const char *file); } SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } SYS_KLDFIND = 306 // { int kldfind(const char *file); } SYS_KLDNEXT = 307 // { int kldnext(int fileid); } - SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat *stat); } SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } SYS_GETSID = 310 // { int getsid(pid_t pid); } SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); } SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); } SYS_AIO_RETURN = 314 // { ssize_t aio_return(struct aiocb *aiocbp); } - SYS_AIO_SUSPEND = 315 // { int aio_suspend( struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } + SYS_AIO_SUSPEND = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); } SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); } SYS_YIELD = 321 // { int yield(void); } SYS_MLOCKALL = 324 // { int mlockall(int how); } SYS_MUNLOCKALL = 325 // { int munlockall(void); } - SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, size_t buflen); } SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); } SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); } SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); } @@ -226,14 +213,13 @@ const ( SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); } SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); } SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } - SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } - SYS_AIO_WAITCOMPLETE = 359 // { ssize_t aio_waitcomplete( struct aiocb **aiocbp, struct timespec *timeout); } + SYS_AIO_WAITCOMPLETE = 359 // { ssize_t aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); } SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } SYS_KQUEUE = 362 // { int kqueue(void); } - SYS_KEVENT = 363 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } @@ -251,10 +237,6 @@ const ( SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); } SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); } SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, int call, void *arg); } - SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, long bufsize, int mode); } - SYS_STATFS = 396 // { int statfs(char *path, struct statfs *buf); } - SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } - SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); } SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); } SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); } @@ -267,14 +249,14 @@ const ( SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); } SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); } SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); } - SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); } SYS_SIGACTION = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); } - SYS_SIGRETURN = 417 // { int sigreturn( const struct __ucontext *sigcntxp); } + SYS_SIGRETURN = 417 // { int sigreturn(const struct __ucontext *sigcntxp); } SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } - SYS_SETCONTEXT = 422 // { int setcontext( const struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext(const struct __ucontext *ucp); } SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); } SYS_SWAPOFF = 424 // { int swapoff(const char *name); } SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); } @@ -288,10 +270,10 @@ const ( SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( const char *path, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); } - SYS_THR_SUSPEND = 442 // { int thr_suspend( const struct timespec *timeout); } + SYS_THR_SUSPEND = 442 // { int thr_suspend(const struct timespec *timeout); } SYS_THR_WAKE = 443 // { int thr_wake(long id); } SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } SYS_AUDIT = 445 // { int audit(const void *record, u_int length); } @@ -300,17 +282,17 @@ const ( SYS_SETAUID = 448 // { int setauid(uid_t *auid); } SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } - SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); } - SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); } + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); } SYS_AUDITCTL = 453 // { int auditctl(char *path); } SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); } SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, int param_size); } SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); } - SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); } - SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); } - SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len,unsigned msg_prio, const struct timespec *abs_timeout);} - SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); } + SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); } + SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); } + SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); } + SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); } SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); } SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } @@ -319,7 +301,7 @@ const ( SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } - SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr * from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); } + SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr *from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); } SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); } SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); } SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); } @@ -338,14 +320,12 @@ const ( SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); } SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); } SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, char **envv); } - SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, struct stat *buf, int flag); } SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, struct timeval *times); } SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); } SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } - SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); } SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, mode_t mode); } - SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); } + SYS_READLINKAT = 500 // { ssize_t readlinkat(int fd, char *path, char *buf, size_t bufsize); } SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); } SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, char *path2); } SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } @@ -391,7 +371,24 @@ const ( SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); } SYS_FUTIMENS = 546 // { int futimens(int fd, struct timespec *times); } SYS_UTIMENSAT = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); } - SYS_NUMA_GETAFFINITY = 548 // { int numa_getaffinity(cpuwhich_t which, id_t id, struct vm_domain_policy_entry *policy); } - SYS_NUMA_SETAFFINITY = 549 // { int numa_setaffinity(cpuwhich_t which, id_t id, const struct vm_domain_policy_entry *policy); } SYS_FDATASYNC = 550 // { int fdatasync(int fd); } + SYS_FSTAT = 551 // { int fstat(int fd, struct stat *sb); } + SYS_FSTATAT = 552 // { int fstatat(int fd, char *path, struct stat *buf, int flag); } + SYS_FHSTAT = 553 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } + SYS_GETDIRENTRIES = 554 // { ssize_t getdirentries(int fd, char *buf, size_t count, off_t *basep); } + SYS_STATFS = 555 // { int statfs(char *path, struct statfs *buf); } + SYS_FSTATFS = 556 // { int fstatfs(int fd, struct statfs *buf); } + SYS_GETFSSTAT = 557 // { int getfsstat(struct statfs *buf, long bufsize, int mode); } + SYS_FHSTATFS = 558 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } + SYS_MKNODAT = 559 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); } + SYS_KEVENT = 560 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } + SYS_CPUSET_GETDOMAIN = 561 // { int cpuset_getdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int *policy); } + SYS_CPUSET_SETDOMAIN = 562 // { int cpuset_setdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int policy); } + SYS_GETRANDOM = 563 // { int getrandom(void *buf, size_t buflen, unsigned int flags); } + SYS_GETFHAT = 564 // { int getfhat(int fd, char *path, struct fhandle *fhp, int flags); } + SYS_FHLINK = 565 // { int fhlink(struct fhandle *fhp, const char *to); } + SYS_FHLINKAT = 566 // { int fhlinkat(struct fhandle *fhp, int tofd, const char *to,); } + SYS_FHREADLINK = 567 // { int fhreadlink(struct fhandle *fhp, char *buf, size_t bufsize); } + SYS___SYSCTLBYNAME = 570 // { int __sysctlbyname(const char *name, size_t namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } + SYS_CLOSE_RANGE = 575 // { int close_range(u_int lowfd, u_int highfd, int flags); } ) 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 62192e1..c9c4ad0 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go @@ -1,4 +1,4 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include -m32 /tmp/include/asm/unistd.h +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/386/include -m32 /tmp/386/include/asm/unistd.h // Code generated by the command above; see README.md. DO NOT EDIT. //go:build 386 && linux 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 490aab5..12ff341 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go @@ -1,4 +1,4 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include -m64 /tmp/include/asm/unistd.h +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/amd64/include -m64 /tmp/amd64/include/asm/unistd.h // Code generated by the command above; see README.md. DO NOT EDIT. //go:build amd64 && linux 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 aca17b6..c3fb5e7 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go @@ -1,4 +1,4 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/arm/include /tmp/arm/include/asm/unistd.h // Code generated by the command above; see README.md. DO NOT EDIT. //go:build arm && linux 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 54b4dfa..358c847 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -1,4 +1,4 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/arm64/include -fsigned-char /tmp/arm64/include/asm/unistd.h // Code generated by the command above; see README.md. DO NOT EDIT. //go:build arm64 && linux 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 65a99ef..202a57e 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go @@ -1,4 +1,4 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/mips/include /tmp/mips/include/asm/unistd.h // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mips && linux 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 841c8a6..1fbceb5 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go @@ -1,4 +1,4 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/mips64/include /tmp/mips64/include/asm/unistd.h // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mips64 && linux 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 e26a7c7..b4ffb7a 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go @@ -1,4 +1,4 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/mips64le/include /tmp/mips64le/include/asm/unistd.h // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mips64le && linux 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 2644726..867985f 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go @@ -1,4 +1,4 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/mipsle/include /tmp/mipsle/include/asm/unistd.h // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mipsle && linux 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 26aefc1..a8cce69 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go @@ -1,4 +1,4 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/ppc/include /tmp/ppc/include/asm/unistd.h // Code generated by the command above; see README.md. DO NOT EDIT. //go:build ppc && linux 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 8d4cd9d..d44c5b3 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go @@ -1,4 +1,4 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/ppc64/include /tmp/ppc64/include/asm/unistd.h // Code generated by the command above; see README.md. DO NOT EDIT. //go:build ppc64 && linux 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 3b405d1..4214dd9 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go @@ -1,4 +1,4 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/ppc64le/include /tmp/ppc64le/include/asm/unistd.h // Code generated by the command above; see README.md. DO NOT EDIT. //go:build ppc64le && linux 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 c3a5af8..3e594a8 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go @@ -1,4 +1,4 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/riscv64/include /tmp/riscv64/include/asm/unistd.h // Code generated by the command above; see README.md. DO NOT EDIT. //go:build riscv64 && linux @@ -309,6 +309,7 @@ const ( SYS_LANDLOCK_CREATE_RULESET = 444 SYS_LANDLOCK_ADD_RULE = 445 SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_MEMFD_SECRET = 447 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 SYS_SET_MEMPOLICY_HOME_NODE = 450 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 8ffa664..7ea4652 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -1,4 +1,4 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/s390x/include -fsigned-char /tmp/s390x/include/asm/unistd.h // Code generated by the command above; see README.md. DO NOT EDIT. //go:build s390x && linux 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 6a39640..92f628e 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go @@ -1,4 +1,4 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/sparc64/include /tmp/sparc64/include/asm/unistd.h // Code generated by the command above; see README.md. DO NOT EDIT. //go:build sparc64 && linux diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go index 817edbf..5977338 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go @@ -6,6 +6,7 @@ package unix +// Deprecated: Use libc wrappers instead of direct syscalls. const ( SYS_EXIT = 1 // { void sys_exit(int rval); } SYS_FORK = 2 // { int sys_fork(void); } diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go index ea45361..16af291 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go @@ -6,6 +6,7 @@ package unix +// Deprecated: Use libc wrappers instead of direct syscalls. const ( SYS_EXIT = 1 // { void sys_exit(int rval); } SYS_FORK = 2 // { int sys_fork(void); } diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go index 467971e..f59b18a 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go @@ -6,6 +6,7 @@ package unix +// Deprecated: Use libc wrappers instead of direct syscalls. const ( SYS_EXIT = 1 // { void sys_exit(int rval); } SYS_FORK = 2 // { int sys_fork(void); } diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go index 32eec5e..721ef59 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go @@ -6,6 +6,7 @@ package unix +// Deprecated: Use libc wrappers instead of direct syscalls. const ( SYS_EXIT = 1 // { void sys_exit(int rval); } SYS_FORK = 2 // { int sys_fork(void); } diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go index 885842c..e2a64f0 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go @@ -366,30 +366,57 @@ type ICMPv6Filter struct { Filt [8]uint32 } +type TCPConnectionInfo struct { + State uint8 + Snd_wscale uint8 + Rcv_wscale uint8 + _ uint8 + Options uint32 + Flags uint32 + Rto uint32 + Maxseg uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Snd_wnd uint32 + Snd_sbbytes uint32 + Rcv_wnd uint32 + Rttcur uint32 + Srtt uint32 + Rttvar uint32 + Txpackets uint64 + Txbytes uint64 + Txretransmitbytes uint64 + Rxpackets uint64 + Rxbytes uint64 + Rxoutoforderbytes uint64 + Txretransmitpackets uint64 +} + const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x6c - SizeofSockaddrUnix = 0x6a - SizeofSockaddrDatalink = 0x14 - SizeofSockaddrCtl = 0x20 - SizeofSockaddrVM = 0xc - SizeofXvsockpcb = 0xa8 - SizeofXSocket = 0x64 - SizeofXSockbuf = 0x18 - SizeofXVSockPgen = 0x20 - SizeofXucred = 0x4c - SizeofLinger = 0x8 - SizeofIovec = 0x10 - SizeofIPMreq = 0x8 - SizeofIPMreqn = 0xc - SizeofIPv6Mreq = 0x14 - SizeofMsghdr = 0x30 - SizeofCmsghdr = 0xc - SizeofInet4Pktinfo = 0xc - SizeofInet6Pktinfo = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofICMPv6Filter = 0x20 + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofSockaddrCtl = 0x20 + SizeofSockaddrVM = 0xc + SizeofXvsockpcb = 0xa8 + SizeofXSocket = 0x64 + SizeofXSockbuf = 0x18 + SizeofXVSockPgen = 0x20 + SizeofXucred = 0x4c + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofTCPConnectionInfo = 0x70 ) const ( diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go index b23c023..34aa775 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go @@ -366,30 +366,57 @@ type ICMPv6Filter struct { Filt [8]uint32 } +type TCPConnectionInfo struct { + State uint8 + Snd_wscale uint8 + Rcv_wscale uint8 + _ uint8 + Options uint32 + Flags uint32 + Rto uint32 + Maxseg uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Snd_wnd uint32 + Snd_sbbytes uint32 + Rcv_wnd uint32 + Rttcur uint32 + Srtt uint32 + Rttvar uint32 + Txpackets uint64 + Txbytes uint64 + Txretransmitbytes uint64 + Rxpackets uint64 + Rxbytes uint64 + Rxoutoforderbytes uint64 + Txretransmitpackets uint64 +} + const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x6c - SizeofSockaddrUnix = 0x6a - SizeofSockaddrDatalink = 0x14 - SizeofSockaddrCtl = 0x20 - SizeofSockaddrVM = 0xc - SizeofXvsockpcb = 0xa8 - SizeofXSocket = 0x64 - SizeofXSockbuf = 0x18 - SizeofXVSockPgen = 0x20 - SizeofXucred = 0x4c - SizeofLinger = 0x8 - SizeofIovec = 0x10 - SizeofIPMreq = 0x8 - SizeofIPMreqn = 0xc - SizeofIPv6Mreq = 0x14 - SizeofMsghdr = 0x30 - SizeofCmsghdr = 0xc - SizeofInet4Pktinfo = 0xc - SizeofInet6Pktinfo = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofICMPv6Filter = 0x20 + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofSockaddrCtl = 0x20 + SizeofSockaddrVM = 0xc + SizeofXvsockpcb = 0xa8 + SizeofXSocket = 0x64 + SizeofXSockbuf = 0x18 + SizeofXVSockPgen = 0x20 + SizeofXucred = 0x4c + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofTCPConnectionInfo = 0x70 ) const ( diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go index 4eec078..d9c78cd 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go @@ -90,27 +90,6 @@ type Stat_t struct { Spare [10]uint64 } -type stat_freebsd11_t struct { - Dev uint32 - Ino uint32 - Mode uint16 - Nlink uint16 - Uid uint32 - Gid uint32 - Rdev uint32 - Atim Timespec - Mtim Timespec - Ctim Timespec - Size int64 - Blocks int64 - Blksize int32 - Flags uint32 - Gen uint32 - Lspare int32 - Btim Timespec - _ [8]byte -} - type Statfs_t struct { Version uint32 Type uint32 @@ -136,31 +115,6 @@ type Statfs_t struct { Mntonname [1024]byte } -type statfs_freebsd11_t struct { - Version uint32 - Type uint32 - Flags uint64 - Bsize uint64 - Iosize uint64 - Blocks uint64 - Bfree uint64 - Bavail int64 - Files uint64 - Ffree int64 - Syncwrites uint64 - Asyncwrites uint64 - Syncreads uint64 - Asyncreads uint64 - Spare [10]uint64 - Namemax uint32 - Owner uint32 - Fsid Fsid - Charspare [80]int8 - Fstypename [16]byte - Mntfromname [88]byte - Mntonname [88]byte -} - type Flock_t struct { Start int64 Len int64 @@ -181,14 +135,6 @@ type Dirent struct { Name [256]int8 } -type dirent_freebsd11 struct { - Fileno uint32 - Reclen uint16 - Type uint8 - Namlen uint8 - Name [256]int8 -} - type Fsid struct { Val [2]int32 } @@ -337,41 +283,9 @@ const ( ) const ( - PTRACE_ATTACH = 0xa - PTRACE_CONT = 0x7 - PTRACE_DETACH = 0xb - PTRACE_GETFPREGS = 0x23 - PTRACE_GETFSBASE = 0x47 - PTRACE_GETLWPLIST = 0xf - PTRACE_GETNUMLWPS = 0xe - PTRACE_GETREGS = 0x21 - PTRACE_GETXSTATE = 0x45 - PTRACE_IO = 0xc - PTRACE_KILL = 0x8 - PTRACE_LWPEVENTS = 0x18 - PTRACE_LWPINFO = 0xd - PTRACE_SETFPREGS = 0x24 - PTRACE_SETREGS = 0x22 - PTRACE_SINGLESTEP = 0x9 - PTRACE_TRACEME = 0x0 -) - -const ( - PIOD_READ_D = 0x1 - PIOD_WRITE_D = 0x2 - PIOD_READ_I = 0x3 - PIOD_WRITE_I = 0x4 -) - -const ( - PL_FLAG_BORN = 0x100 - PL_FLAG_EXITED = 0x200 - PL_FLAG_SI = 0x20 -) - -const ( - TRAP_BRKPT = 0x1 - TRAP_TRACE = 0x2 + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 ) type PtraceLwpInfoStruct struct { @@ -380,7 +294,7 @@ type PtraceLwpInfoStruct struct { Flags int32 Sigmask Sigset_t Siglist Sigset_t - Siginfo __Siginfo + Siginfo __PtraceSiginfo Tdname [20]int8 Child_pid int32 Syscall_code uint32 @@ -398,6 +312,17 @@ type __Siginfo struct { Value [4]byte _ [32]byte } +type __PtraceSiginfo struct { + Signo int32 + Errno int32 + Code int32 + Pid int32 + Uid uint32 + Status int32 + Addr uintptr + Value [4]byte + _ [32]byte +} type Sigset_t struct { Val [4]uint32 @@ -432,10 +357,12 @@ type FpReg struct { Pad [64]uint8 } +type FpExtendedPrecision struct{} + type PtraceIoDesc struct { Op int32 - Offs *byte - Addr *byte + Offs uintptr + Addr uintptr Len uint32 } @@ -444,8 +371,9 @@ type Kevent_t struct { Filter int16 Flags uint16 Fflags uint32 - Data int32 + Data int64 Udata *byte + Ext [4]uint64 } type FdSet struct { diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go index 7622904..26991b1 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go @@ -86,26 +86,6 @@ type Stat_t struct { Spare [10]uint64 } -type stat_freebsd11_t struct { - Dev uint32 - Ino uint32 - Mode uint16 - Nlink uint16 - Uid uint32 - Gid uint32 - Rdev uint32 - Atim Timespec - Mtim Timespec - Ctim Timespec - Size int64 - Blocks int64 - Blksize int32 - Flags uint32 - Gen uint32 - Lspare int32 - Btim Timespec -} - type Statfs_t struct { Version uint32 Type uint32 @@ -131,31 +111,6 @@ type Statfs_t struct { Mntonname [1024]byte } -type statfs_freebsd11_t struct { - Version uint32 - Type uint32 - Flags uint64 - Bsize uint64 - Iosize uint64 - Blocks uint64 - Bfree uint64 - Bavail int64 - Files uint64 - Ffree int64 - Syncwrites uint64 - Asyncwrites uint64 - Syncreads uint64 - Asyncreads uint64 - Spare [10]uint64 - Namemax uint32 - Owner uint32 - Fsid Fsid - Charspare [80]int8 - Fstypename [16]byte - Mntfromname [88]byte - Mntonname [88]byte -} - type Flock_t struct { Start int64 Len int64 @@ -177,14 +132,6 @@ type Dirent struct { Name [256]int8 } -type dirent_freebsd11 struct { - Fileno uint32 - Reclen uint16 - Type uint8 - Namlen uint8 - Name [256]int8 -} - type Fsid struct { Val [2]int32 } @@ -333,41 +280,9 @@ const ( ) const ( - PTRACE_ATTACH = 0xa - PTRACE_CONT = 0x7 - PTRACE_DETACH = 0xb - PTRACE_GETFPREGS = 0x23 - PTRACE_GETFSBASE = 0x47 - PTRACE_GETLWPLIST = 0xf - PTRACE_GETNUMLWPS = 0xe - PTRACE_GETREGS = 0x21 - PTRACE_GETXSTATE = 0x45 - PTRACE_IO = 0xc - PTRACE_KILL = 0x8 - PTRACE_LWPEVENTS = 0x18 - PTRACE_LWPINFO = 0xd - PTRACE_SETFPREGS = 0x24 - PTRACE_SETREGS = 0x22 - PTRACE_SINGLESTEP = 0x9 - PTRACE_TRACEME = 0x0 -) - -const ( - PIOD_READ_D = 0x1 - PIOD_WRITE_D = 0x2 - PIOD_READ_I = 0x3 - PIOD_WRITE_I = 0x4 -) - -const ( - PL_FLAG_BORN = 0x100 - PL_FLAG_EXITED = 0x200 - PL_FLAG_SI = 0x20 -) - -const ( - TRAP_BRKPT = 0x1 - TRAP_TRACE = 0x2 + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 ) type PtraceLwpInfoStruct struct { @@ -376,7 +291,7 @@ type PtraceLwpInfoStruct struct { Flags int32 Sigmask Sigset_t Siglist Sigset_t - Siginfo __Siginfo + Siginfo __PtraceSiginfo Tdname [20]int8 Child_pid int32 Syscall_code uint32 @@ -395,6 +310,18 @@ type __Siginfo struct { _ [40]byte } +type __PtraceSiginfo struct { + Signo int32 + Errno int32 + Code int32 + Pid int32 + Uid uint32 + Status int32 + Addr uintptr + Value [8]byte + _ [40]byte +} + type Sigset_t struct { Val [4]uint32 } @@ -435,10 +362,12 @@ type FpReg struct { Spare [12]uint64 } +type FpExtendedPrecision struct{} + type PtraceIoDesc struct { Op int32 - Offs *byte - Addr *byte + Offs uintptr + Addr uintptr Len uint64 } @@ -449,6 +378,7 @@ type Kevent_t struct { Fflags uint32 Data int64 Udata *byte + Ext [4]uint64 } type FdSet struct { diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go index 19223ce..f8324e7 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go @@ -33,7 +33,7 @@ type Timeval struct { _ [4]byte } -type Time_t int32 +type Time_t int64 type Rusage struct { Utime Timeval @@ -88,26 +88,6 @@ type Stat_t struct { Spare [10]uint64 } -type stat_freebsd11_t struct { - Dev uint32 - Ino uint32 - Mode uint16 - Nlink uint16 - Uid uint32 - Gid uint32 - Rdev uint32 - Atim Timespec - Mtim Timespec - Ctim Timespec - Size int64 - Blocks int64 - Blksize int32 - Flags uint32 - Gen uint32 - Lspare int32 - Btim Timespec -} - type Statfs_t struct { Version uint32 Type uint32 @@ -133,31 +113,6 @@ type Statfs_t struct { Mntonname [1024]byte } -type statfs_freebsd11_t struct { - Version uint32 - Type uint32 - Flags uint64 - Bsize uint64 - Iosize uint64 - Blocks uint64 - Bfree uint64 - Bavail int64 - Files uint64 - Ffree int64 - Syncwrites uint64 - Asyncwrites uint64 - Syncreads uint64 - Asyncreads uint64 - Spare [10]uint64 - Namemax uint32 - Owner uint32 - Fsid Fsid - Charspare [80]int8 - Fstypename [16]byte - Mntfromname [88]byte - Mntonname [88]byte -} - type Flock_t struct { Start int64 Len int64 @@ -179,14 +134,6 @@ type Dirent struct { Name [256]int8 } -type dirent_freebsd11 struct { - Fileno uint32 - Reclen uint16 - Type uint8 - Namlen uint8 - Name [256]int8 -} - type Fsid struct { Val [2]int32 } @@ -335,41 +282,9 @@ const ( ) const ( - PTRACE_ATTACH = 0xa - PTRACE_CONT = 0x7 - PTRACE_DETACH = 0xb - PTRACE_GETFPREGS = 0x23 - PTRACE_GETFSBASE = 0x47 - PTRACE_GETLWPLIST = 0xf - PTRACE_GETNUMLWPS = 0xe - PTRACE_GETREGS = 0x21 - PTRACE_GETXSTATE = 0x45 - PTRACE_IO = 0xc - PTRACE_KILL = 0x8 - PTRACE_LWPEVENTS = 0x18 - PTRACE_LWPINFO = 0xd - PTRACE_SETFPREGS = 0x24 - PTRACE_SETREGS = 0x22 - PTRACE_SINGLESTEP = 0x9 - PTRACE_TRACEME = 0x0 -) - -const ( - PIOD_READ_D = 0x1 - PIOD_WRITE_D = 0x2 - PIOD_READ_I = 0x3 - PIOD_WRITE_I = 0x4 -) - -const ( - PL_FLAG_BORN = 0x100 - PL_FLAG_EXITED = 0x200 - PL_FLAG_SI = 0x20 -) - -const ( - TRAP_BRKPT = 0x1 - TRAP_TRACE = 0x2 + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 ) type PtraceLwpInfoStruct struct { @@ -378,7 +293,7 @@ type PtraceLwpInfoStruct struct { Flags int32 Sigmask Sigset_t Siglist Sigset_t - Siginfo __Siginfo + Siginfo __PtraceSiginfo Tdname [20]int8 Child_pid int32 Syscall_code uint32 @@ -386,15 +301,27 @@ type PtraceLwpInfoStruct struct { } type __Siginfo struct { - Signo int32 - Errno int32 - Code int32 - Pid int32 - Uid uint32 - Status int32 - Addr *byte - Value [4]byte - X_reason [32]byte + Signo int32 + Errno int32 + Code int32 + Pid int32 + Uid uint32 + Status int32 + Addr *byte + Value [4]byte + _ [32]byte +} + +type __PtraceSiginfo struct { + Signo int32 + Errno int32 + Code int32 + Pid int32 + Uid uint32 + Status int32 + Addr uintptr + Value [4]byte + _ [32]byte } type Sigset_t struct { @@ -402,22 +329,28 @@ type Sigset_t struct { } type Reg struct { - R [13]uint32 - R_sp uint32 - R_lr uint32 - R_pc uint32 - R_cpsr uint32 + R [13]uint32 + Sp uint32 + Lr uint32 + Pc uint32 + Cpsr uint32 } type FpReg struct { - Fpr_fpsr uint32 - Fpr [8][3]uint32 + Fpsr uint32 + Fpr [8]FpExtendedPrecision +} + +type FpExtendedPrecision struct { + Exponent uint32 + Mantissa_hi uint32 + Mantissa_lo uint32 } type PtraceIoDesc struct { Op int32 - Offs *byte - Addr *byte + Offs uintptr + Addr uintptr Len uint32 } @@ -426,8 +359,11 @@ type Kevent_t struct { Filter int16 Flags uint16 Fflags uint32 - Data int32 + _ [4]byte + Data int64 Udata *byte + _ [4]byte + Ext [4]uint64 } type FdSet struct { @@ -453,7 +389,7 @@ type ifMsghdr struct { Addrs int32 Flags int32 Index uint16 - _ [2]byte + _ uint16 Data ifData } @@ -464,7 +400,6 @@ type IfMsghdr struct { Addrs int32 Flags int32 Index uint16 - _ [2]byte Data IfData } @@ -532,7 +467,7 @@ type IfaMsghdr struct { Addrs int32 Flags int32 Index uint16 - _ [2]byte + _ uint16 Metric int32 } @@ -543,7 +478,7 @@ type IfmaMsghdr struct { Addrs int32 Flags int32 Index uint16 - _ [2]byte + _ uint16 } type IfAnnounceMsghdr struct { @@ -560,7 +495,7 @@ type RtMsghdr struct { Version uint8 Type uint8 Index uint16 - _ [2]byte + _ uint16 Flags int32 Addrs int32 Pid int32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go index 8e3e33f..4220411 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go @@ -86,26 +86,6 @@ type Stat_t struct { Spare [10]uint64 } -type stat_freebsd11_t struct { - Dev uint32 - Ino uint32 - Mode uint16 - Nlink uint16 - Uid uint32 - Gid uint32 - Rdev uint32 - Atim Timespec - Mtim Timespec - Ctim Timespec - Size int64 - Blocks int64 - Blksize int32 - Flags uint32 - Gen uint32 - Lspare int32 - Btim Timespec -} - type Statfs_t struct { Version uint32 Type uint32 @@ -131,31 +111,6 @@ type Statfs_t struct { Mntonname [1024]byte } -type statfs_freebsd11_t struct { - Version uint32 - Type uint32 - Flags uint64 - Bsize uint64 - Iosize uint64 - Blocks uint64 - Bfree uint64 - Bavail int64 - Files uint64 - Ffree int64 - Syncwrites uint64 - Asyncwrites uint64 - Syncreads uint64 - Asyncreads uint64 - Spare [10]uint64 - Namemax uint32 - Owner uint32 - Fsid Fsid - Charspare [80]int8 - Fstypename [16]byte - Mntfromname [88]byte - Mntonname [88]byte -} - type Flock_t struct { Start int64 Len int64 @@ -177,14 +132,6 @@ type Dirent struct { Name [256]int8 } -type dirent_freebsd11 struct { - Fileno uint32 - Reclen uint16 - Type uint8 - Namlen uint8 - Name [256]int8 -} - type Fsid struct { Val [2]int32 } @@ -333,39 +280,9 @@ const ( ) const ( - PTRACE_ATTACH = 0xa - PTRACE_CONT = 0x7 - PTRACE_DETACH = 0xb - PTRACE_GETFPREGS = 0x23 - PTRACE_GETLWPLIST = 0xf - PTRACE_GETNUMLWPS = 0xe - PTRACE_GETREGS = 0x21 - PTRACE_IO = 0xc - PTRACE_KILL = 0x8 - PTRACE_LWPEVENTS = 0x18 - PTRACE_LWPINFO = 0xd - PTRACE_SETFPREGS = 0x24 - PTRACE_SETREGS = 0x22 - PTRACE_SINGLESTEP = 0x9 - PTRACE_TRACEME = 0x0 -) - -const ( - PIOD_READ_D = 0x1 - PIOD_WRITE_D = 0x2 - PIOD_READ_I = 0x3 - PIOD_WRITE_I = 0x4 -) - -const ( - PL_FLAG_BORN = 0x100 - PL_FLAG_EXITED = 0x200 - PL_FLAG_SI = 0x20 -) - -const ( - TRAP_BRKPT = 0x1 - TRAP_TRACE = 0x2 + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 ) type PtraceLwpInfoStruct struct { @@ -374,7 +291,7 @@ type PtraceLwpInfoStruct struct { Flags int32 Sigmask Sigset_t Siglist Sigset_t - Siginfo __Siginfo + Siginfo __PtraceSiginfo Tdname [20]int8 Child_pid int32 Syscall_code uint32 @@ -393,6 +310,18 @@ type __Siginfo struct { _ [40]byte } +type __PtraceSiginfo struct { + Signo int32 + Errno int32 + Code int32 + Pid int32 + Uid uint32 + Status int32 + Addr uintptr + Value [8]byte + _ [40]byte +} + type Sigset_t struct { Val [4]uint32 } @@ -413,10 +342,12 @@ type FpReg struct { _ [8]byte } +type FpExtendedPrecision struct{} + type PtraceIoDesc struct { Op int32 - Offs *byte - Addr *byte + Offs uintptr + Addr uintptr Len uint64 } @@ -427,6 +358,7 @@ type Kevent_t struct { Fflags uint32 Data int64 Udata *byte + Ext [4]uint64 } type FdSet struct { diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go index c55b617..ff68811 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -764,6 +764,15 @@ const ( MOVE_MOUNT_T_AUTOMOUNTS = 0x20 MOVE_MOUNT_T_EMPTY_PATH = 0x40 MOVE_MOUNT_SET_GROUP = 0x100 + + FSOPEN_CLOEXEC = 0x1 + + FSPICK_CLOEXEC = 0x1 + FSPICK_SYMLINK_NOFOLLOW = 0x2 + FSPICK_NO_AUTOMOUNT = 0x4 + FSPICK_EMPTY_PATH = 0x8 + + FSMOUNT_CLOEXEC = 0x1 ) type OpenHow struct { @@ -936,6 +945,9 @@ type PerfEventAttr struct { Aux_watermark uint32 Sample_max_stack uint16 _ uint16 + Aux_sample_size uint32 + _ uint32 + Sig_data uint64 } type PerfEventMmapPage struct { @@ -1118,7 +1130,9 @@ const ( PERF_BR_SYSRET = 0x8 PERF_BR_COND_CALL = 0x9 PERF_BR_COND_RET = 0xa - PERF_BR_MAX = 0xb + PERF_BR_ERET = 0xb + PERF_BR_IRQ = 0xc + PERF_BR_MAX = 0xd PERF_SAMPLE_REGS_ABI_NONE = 0x0 PERF_SAMPLE_REGS_ABI_32 = 0x1 PERF_SAMPLE_REGS_ABI_64 = 0x2 @@ -1452,6 +1466,11 @@ const ( IFLA_ALT_IFNAME = 0x35 IFLA_PERM_ADDRESS = 0x36 IFLA_PROTO_DOWN_REASON = 0x37 + IFLA_PARENT_DEV_NAME = 0x38 + IFLA_PARENT_DEV_BUS_NAME = 0x39 + IFLA_GRO_MAX_SIZE = 0x3a + IFLA_TSO_MAX_SIZE = 0x3b + IFLA_TSO_MAX_SEGS = 0x3c IFLA_PROTO_DOWN_REASON_UNSPEC = 0x0 IFLA_PROTO_DOWN_REASON_MASK = 0x1 IFLA_PROTO_DOWN_REASON_VALUE = 0x2 @@ -2960,7 +2979,7 @@ const ( DEVLINK_CMD_TRAP_POLICER_NEW = 0x47 DEVLINK_CMD_TRAP_POLICER_DEL = 0x48 DEVLINK_CMD_HEALTH_REPORTER_TEST = 0x49 - DEVLINK_CMD_MAX = 0x4d + DEVLINK_CMD_MAX = 0x51 DEVLINK_PORT_TYPE_NOTSET = 0x0 DEVLINK_PORT_TYPE_AUTO = 0x1 DEVLINK_PORT_TYPE_ETH = 0x2 @@ -3189,7 +3208,7 @@ const ( DEVLINK_ATTR_RATE_NODE_NAME = 0xa8 DEVLINK_ATTR_RATE_PARENT_NODE_NAME = 0xa9 DEVLINK_ATTR_REGION_MAX_SNAPSHOTS = 0xaa - DEVLINK_ATTR_MAX = 0xaa + DEVLINK_ATTR_MAX = 0xae DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0x0 DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 0x1 DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0x0 @@ -3629,7 +3648,11 @@ const ( ETHTOOL_A_RINGS_RX_MINI = 0x7 ETHTOOL_A_RINGS_RX_JUMBO = 0x8 ETHTOOL_A_RINGS_TX = 0x9 - ETHTOOL_A_RINGS_MAX = 0xa + ETHTOOL_A_RINGS_RX_BUF_LEN = 0xa + ETHTOOL_A_RINGS_TCP_DATA_SPLIT = 0xb + ETHTOOL_A_RINGS_CQE_SIZE = 0xc + ETHTOOL_A_RINGS_TX_PUSH = 0xd + ETHTOOL_A_RINGS_MAX = 0xd ETHTOOL_A_CHANNELS_UNSPEC = 0x0 ETHTOOL_A_CHANNELS_HEADER = 0x1 ETHTOOL_A_CHANNELS_RX_MAX = 0x2 @@ -4314,7 +4337,7 @@ const ( NL80211_ATTR_MAC_HINT = 0xc8 NL80211_ATTR_MAC_MASK = 0xd7 NL80211_ATTR_MAX_AP_ASSOC_STA = 0xca - NL80211_ATTR_MAX = 0x135 + NL80211_ATTR_MAX = 0x137 NL80211_ATTR_MAX_CRIT_PROT_DURATION = 0xb4 NL80211_ATTR_MAX_CSA_COUNTERS = 0xce NL80211_ATTR_MAX_MATCH_SETS = 0x85 @@ -4540,7 +4563,7 @@ const ( NL80211_BAND_IFTYPE_ATTR_HE_CAP_PHY = 0x3 NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE = 0x5 NL80211_BAND_IFTYPE_ATTR_IFTYPES = 0x1 - NL80211_BAND_IFTYPE_ATTR_MAX = 0x7 + NL80211_BAND_IFTYPE_ATTR_MAX = 0xb NL80211_BAND_S1GHZ = 0x4 NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE = 0x2 NL80211_BITRATE_ATTR_MAX = 0x2 @@ -4878,7 +4901,7 @@ const ( NL80211_FREQUENCY_ATTR_GO_CONCURRENT = 0xf NL80211_FREQUENCY_ATTR_INDOOR_ONLY = 0xe NL80211_FREQUENCY_ATTR_IR_CONCURRENT = 0xf - NL80211_FREQUENCY_ATTR_MAX = 0x19 + NL80211_FREQUENCY_ATTR_MAX = 0x1b NL80211_FREQUENCY_ATTR_MAX_TX_POWER = 0x6 NL80211_FREQUENCY_ATTR_NO_10MHZ = 0x11 NL80211_FREQUENCY_ATTR_NO_160MHZ = 0xc @@ -5245,7 +5268,7 @@ const ( NL80211_RATE_INFO_HE_RU_ALLOC_52 = 0x1 NL80211_RATE_INFO_HE_RU_ALLOC_996 = 0x5 NL80211_RATE_INFO_HE_RU_ALLOC = 0x11 - NL80211_RATE_INFO_MAX = 0x11 + NL80211_RATE_INFO_MAX = 0x16 NL80211_RATE_INFO_MCS = 0x2 NL80211_RATE_INFO_SHORT_GI = 0x4 NL80211_RATE_INFO_VHT_MCS = 0x6 @@ -5579,3 +5602,8 @@ const ( FR_ACT_UNREACHABLE = 0x7 FR_ACT_PROHIBIT = 0x8 ) + +const ( + AUDIT_NLGRP_NONE = 0x0 + AUDIT_NLGRP_READLOG = 0x1 +) 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 5314092..2636044 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -objdir=/tmp/386/cgo -- -Wall -Werror -static -I/tmp/386/include -m32 linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build 386 && linux @@ -324,6 +324,13 @@ type Taskstats struct { Ac_btime64 uint64 Compact_count uint64 Compact_delay_total uint64 + Ac_tgid uint32 + _ [4]byte + Ac_tgetime uint64 + Ac_exe_dev uint64 + Ac_exe_inode uint64 + Wpcopy_count uint64 + Wpcopy_delay_total 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 b02ab83..8187489 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -objdir=/tmp/amd64/cgo -- -Wall -Werror -static -I/tmp/amd64/include -m64 linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build amd64 && linux @@ -338,6 +338,12 @@ type Taskstats struct { Ac_btime64 uint64 Compact_count uint64 Compact_delay_total uint64 + Ac_tgid uint32 + Ac_tgetime uint64 + Ac_exe_dev uint64 + Ac_exe_inode uint64 + Wpcopy_count uint64 + Wpcopy_delay_total 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 9e6871d..d161233 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -objdir=/tmp/arm/cgo -- -Wall -Werror -static -I/tmp/arm/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build arm && linux @@ -315,6 +315,13 @@ type Taskstats struct { Ac_btime64 uint64 Compact_count uint64 Compact_delay_total uint64 + Ac_tgid uint32 + _ [4]byte + Ac_tgetime uint64 + Ac_exe_dev uint64 + Ac_exe_inode uint64 + Wpcopy_count uint64 + Wpcopy_delay_total 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 b732d12..c28e555 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -objdir=/tmp/arm64/cgo -- -Wall -Werror -static -I/tmp/arm64/include -fsigned-char linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build arm64 && linux @@ -317,6 +317,12 @@ type Taskstats struct { Ac_btime64 uint64 Compact_count uint64 Compact_delay_total uint64 + Ac_tgid uint32 + Ac_tgetime uint64 + Ac_exe_dev uint64 + Ac_exe_inode uint64 + Wpcopy_count uint64 + Wpcopy_delay_total 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 5310f71..3691299 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -objdir=/tmp/mips/cgo -- -Wall -Werror -static -I/tmp/mips/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mips && linux @@ -320,6 +320,13 @@ type Taskstats struct { Ac_btime64 uint64 Compact_count uint64 Compact_delay_total uint64 + Ac_tgid uint32 + _ [4]byte + Ac_tgetime uint64 + Ac_exe_dev uint64 + Ac_exe_inode uint64 + Wpcopy_count uint64 + Wpcopy_delay_total 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 219bbb1..7473468 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -objdir=/tmp/mips64/cgo -- -Wall -Werror -static -I/tmp/mips64/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mips64 && linux @@ -320,6 +320,12 @@ type Taskstats struct { Ac_btime64 uint64 Compact_count uint64 Compact_delay_total uint64 + Ac_tgid uint32 + Ac_tgetime uint64 + Ac_exe_dev uint64 + Ac_exe_inode uint64 + Wpcopy_count uint64 + Wpcopy_delay_total 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 be9432d..ed94485 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -objdir=/tmp/mips64le/cgo -- -Wall -Werror -static -I/tmp/mips64le/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mips64le && linux @@ -320,6 +320,12 @@ type Taskstats struct { Ac_btime64 uint64 Compact_count uint64 Compact_delay_total uint64 + Ac_tgid uint32 + Ac_tgetime uint64 + Ac_exe_dev uint64 + Ac_exe_inode uint64 + Wpcopy_count uint64 + Wpcopy_delay_total 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 d0155a4..0892a73 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -objdir=/tmp/mipsle/cgo -- -Wall -Werror -static -I/tmp/mipsle/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mipsle && linux @@ -320,6 +320,13 @@ type Taskstats struct { Ac_btime64 uint64 Compact_count uint64 Compact_delay_total uint64 + Ac_tgid uint32 + _ [4]byte + Ac_tgetime uint64 + Ac_exe_dev uint64 + Ac_exe_inode uint64 + Wpcopy_count uint64 + Wpcopy_delay_total 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 01c17bc..e1dd483 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -objdir=/tmp/ppc/cgo -- -Wall -Werror -static -I/tmp/ppc/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build ppc && linux @@ -327,6 +327,13 @@ type Taskstats struct { Ac_btime64 uint64 Compact_count uint64 Compact_delay_total uint64 + Ac_tgid uint32 + _ [4]byte + Ac_tgetime uint64 + Ac_exe_dev uint64 + Ac_exe_inode uint64 + Wpcopy_count uint64 + Wpcopy_delay_total 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 944a9c3..d9f654c 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -objdir=/tmp/ppc64/cgo -- -Wall -Werror -static -I/tmp/ppc64/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build ppc64 && linux @@ -327,6 +327,12 @@ type Taskstats struct { Ac_btime64 uint64 Compact_count uint64 Compact_delay_total uint64 + Ac_tgid uint32 + Ac_tgetime uint64 + Ac_exe_dev uint64 + Ac_exe_inode uint64 + Wpcopy_count uint64 + Wpcopy_delay_total 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 5d2c90e..74acda9 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -objdir=/tmp/ppc64le/cgo -- -Wall -Werror -static -I/tmp/ppc64le/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build ppc64le && linux @@ -327,6 +327,12 @@ type Taskstats struct { Ac_btime64 uint64 Compact_count uint64 Compact_delay_total uint64 + Ac_tgid uint32 + Ac_tgetime uint64 + Ac_exe_dev uint64 + Ac_exe_inode uint64 + Wpcopy_count uint64 + Wpcopy_delay_total 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 e173cb5..50ebe69 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -objdir=/tmp/riscv64/cgo -- -Wall -Werror -static -I/tmp/riscv64/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build riscv64 && linux @@ -345,6 +345,12 @@ type Taskstats struct { Ac_btime64 uint64 Compact_count uint64 Compact_delay_total uint64 + Ac_tgid uint32 + Ac_tgetime uint64 + Ac_exe_dev uint64 + Ac_exe_inode uint64 + Wpcopy_count uint64 + Wpcopy_delay_total 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 6106715..75b34c2 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -objdir=/tmp/s390x/cgo -- -Wall -Werror -static -I/tmp/s390x/include -fsigned-char linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build s390x && linux @@ -340,6 +340,12 @@ type Taskstats struct { Ac_btime64 uint64 Compact_count uint64 Compact_delay_total uint64 + Ac_tgid uint32 + Ac_tgetime uint64 + Ac_exe_dev uint64 + Ac_exe_inode uint64 + Wpcopy_count uint64 + Wpcopy_delay_total 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 ca7b37b..429c3bf 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -objdir=/tmp/sparc64/cgo -- -Wall -Werror -static -I/tmp/sparc64/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build sparc64 && linux @@ -322,6 +322,12 @@ type Taskstats struct { Ac_btime64 uint64 Compact_count uint64 Compact_delay_total uint64 + Ac_tgid uint32 + Ac_tgetime uint64 + Ac_exe_dev uint64 + Ac_exe_inode uint64 + Wpcopy_count uint64 + Wpcopy_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go index baf5fe6..2ed718c 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go @@ -94,10 +94,10 @@ type Statfs_t struct { F_namemax uint32 F_owner uint32 F_ctime uint64 - F_fstypename [16]int8 - F_mntonname [90]int8 - F_mntfromname [90]int8 - F_mntfromspec [90]int8 + F_fstypename [16]byte + F_mntonname [90]byte + F_mntfromname [90]byte + F_mntfromspec [90]byte Pad_cgo_0 [2]byte Mount_info [160]byte } diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go index e21ae8e..b4fb97e 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go @@ -96,10 +96,10 @@ type Statfs_t struct { F_namemax uint32 F_owner uint32 F_ctime uint64 - F_fstypename [16]int8 - F_mntonname [90]int8 - F_mntfromname [90]int8 - F_mntfromspec [90]int8 + F_fstypename [16]byte + F_mntonname [90]byte + F_mntfromname [90]byte + F_mntfromspec [90]byte _ [2]byte Mount_info [160]byte } diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go index f190651..2c46750 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go @@ -98,10 +98,10 @@ type Statfs_t struct { F_namemax uint32 F_owner uint32 F_ctime uint64 - F_fstypename [16]int8 - F_mntonname [90]int8 - F_mntfromname [90]int8 - F_mntfromspec [90]int8 + F_fstypename [16]byte + F_mntonname [90]byte + F_mntfromname [90]byte + F_mntfromspec [90]byte _ [2]byte Mount_info [160]byte } diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go index 84747c5..ddee045 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go @@ -94,10 +94,10 @@ type Statfs_t struct { F_namemax uint32 F_owner uint32 F_ctime uint64 - F_fstypename [16]int8 - F_mntonname [90]int8 - F_mntfromname [90]int8 - F_mntfromspec [90]int8 + F_fstypename [16]byte + F_mntonname [90]byte + F_mntfromname [90]byte + F_mntfromspec [90]byte _ [2]byte Mount_info [160]byte } diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go index ac5c8b6..eb13d4e 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go @@ -94,10 +94,10 @@ type Statfs_t struct { F_namemax uint32 F_owner uint32 F_ctime uint64 - F_fstypename [16]int8 - F_mntonname [90]int8 - F_mntfromname [90]int8 - F_mntfromspec [90]int8 + F_fstypename [16]byte + F_mntonname [90]byte + F_mntfromname [90]byte + F_mntfromspec [90]byte _ [2]byte Mount_info [160]byte } diff --git a/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go index ad4aad2..c1a9b83 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go @@ -178,7 +178,7 @@ type Linger struct { } type Iovec struct { - Base *int8 + Base *byte Len uint64 } diff --git a/vendor/golang.org/x/sys/windows/exec_windows.go b/vendor/golang.org/x/sys/windows/exec_windows.go index 855698b..75980fd 100644 --- a/vendor/golang.org/x/sys/windows/exec_windows.go +++ b/vendor/golang.org/x/sys/windows/exec_windows.go @@ -15,11 +15,11 @@ import ( // 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. +// - 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 "\"\"" diff --git a/vendor/golang.org/x/sys/windows/setupapi_windows.go b/vendor/golang.org/x/sys/windows/setupapi_windows.go index 14027da..f812648 100644 --- a/vendor/golang.org/x/sys/windows/setupapi_windows.go +++ b/vendor/golang.org/x/sys/windows/setupapi_windows.go @@ -296,7 +296,7 @@ const ( // 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 the INF specified by SP_DEVINSTALL_PARAMS.DriverPath should be searched. + // 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 diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go index ce3075c..e279138 100644 --- a/vendor/golang.org/x/sys/windows/syscall_windows.go +++ b/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -417,6 +417,7 @@ func NewCallbackCDecl(fn interface{}) uintptr { //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 @@ -623,7 +624,6 @@ var ( func getStdHandle(stdhandle uint32) (fd Handle) { r, _ := GetStdHandle(stdhandle) - CloseOnExec(r) return r } @@ -862,6 +862,7 @@ const socket_error = uintptr(^uint32(0)) //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 // For testing: clients can set this flag to force // creation of IPv6 sockets to return EAFNOSUPPORT. @@ -971,6 +972,32 @@ func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, int32, error) { 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: @@ -1046,6 +1073,14 @@ func Connect(fd Handle, sa Sockaddr) (err error) { 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)) @@ -1699,3 +1734,71 @@ func LoadResourceData(module, resInfo Handle) (data []byte, err error) { h.Cap = int(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 +} diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go index e19471c..f9eaca5 100644 --- a/vendor/golang.org/x/sys/windows/types_windows.go +++ b/vendor/golang.org/x/sys/windows/types_windows.go @@ -160,6 +160,10 @@ const ( 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 @@ -2000,27 +2004,62 @@ type IpAdapterPrefix struct { } 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 - /* more fields might be present here. */ + 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 ( diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go index 68f52c1..52d4742 100644 --- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -177,6 +177,7 @@ var ( procDnsRecordListFree = moddnsapi.NewProc("DnsRecordListFree") procGetAdaptersAddresses = modiphlpapi.NewProc("GetAdaptersAddresses") procGetAdaptersInfo = modiphlpapi.NewProc("GetAdaptersInfo") + procGetBestInterfaceEx = modiphlpapi.NewProc("GetBestInterfaceEx") procGetIfEntry = modiphlpapi.NewProc("GetIfEntry") procAssignProcessToJobObject = modkernel32.NewProc("AssignProcessToJobObject") procCancelIo = modkernel32.NewProc("CancelIo") @@ -407,6 +408,7 @@ var ( 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") @@ -1539,6 +1541,14 @@ func GetAdaptersInfo(ai *IpAdapterInfo, ol *uint32) (errcode error) { 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 { @@ -3495,6 +3505,14 @@ func GetModuleInformation(process Handle, module Handle, modinfo *ModuleInfo, cb 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 { diff --git a/vendor/modules.txt b/vendor/modules.txt index 45c07a8..215377c 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -10,11 +10,14 @@ blitter.com/go/cryptmt # blitter.com/go/goutmp v1.0.6 ## explicit; go 1.17 blitter.com/go/goutmp +# blitter.com/go/groestl v0.0.0-20220410000905-c4decbf31d64 +## explicit; go 1.18 +blitter.com/go/groestl # blitter.com/go/herradurakex v1.0.0 ## explicit blitter.com/go/herradurakex -# blitter.com/go/hopscotch v0.0.0-20211113042251-b8a306eea4dc -## explicit +# blitter.com/go/hopscotch v0.0.0-20220617051533-4b42ccd4e00a +## explicit; go 1.18 blitter.com/go/hopscotch # blitter.com/go/kyber v0.0.0-20200130200857-6f2021cb88d9 ## explicit; go 1.12 @@ -34,17 +37,17 @@ github.com/creack/pty # github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f ## explicit github.com/jameskeane/bcrypt -# github.com/klauspost/cpuid/v2 v2.0.6 -## explicit; go 1.13 +# github.com/klauspost/cpuid/v2 v2.1.1 +## explicit; go 1.15 github.com/klauspost/cpuid/v2 -# github.com/klauspost/reedsolomon v1.9.16 -## explicit; go 1.14 +# github.com/klauspost/reedsolomon v1.11.0 +## explicit; go 1.17 github.com/klauspost/reedsolomon # github.com/kuking/go-frodokem v1.0.2 ## explicit; go 1.14 github.com/kuking/go-frodokem -# github.com/mattn/go-isatty v0.0.14 -## explicit; go 1.12 +# github.com/mattn/go-isatty v0.0.16 +## explicit; go 1.15 github.com/mattn/go-isatty # github.com/pkg/errors v0.9.1 ## explicit @@ -63,14 +66,14 @@ github.com/tjfoc/gmsm/sm4 github.com/xtaci/kcp-go # github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37 ## explicit; go 1.13 -# golang.org/x/crypto v0.0.0-20220408190544-5352b0902921 +# golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 ## explicit; go 1.17 golang.org/x/crypto/argon2 golang.org/x/crypto/bcrypt golang.org/x/crypto/blake2b golang.org/x/crypto/blowfish golang.org/x/crypto/cast5 -golang.org/x/crypto/internal/subtle +golang.org/x/crypto/internal/alias golang.org/x/crypto/pbkdf2 golang.org/x/crypto/salsa20 golang.org/x/crypto/salsa20/salsa @@ -86,7 +89,7 @@ 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/sys v0.0.0-20220408201424-a24fb2fb8a0f +# golang.org/x/sys v0.0.0-20220909162455-aba9fc2a8ff2 ## explicit; go 1.17 golang.org/x/sys/cpu golang.org/x/sys/internal/unsafeheader From 254e9fb7d608325f0b0bc24de4416ce89d8ddbdd Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Mon, 12 Sep 2022 22:05:03 -0700 Subject: [PATCH 48/94] Reintroduce go mod init/tidy --- bacillus/ci_pushbuild.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bacillus/ci_pushbuild.sh b/bacillus/ci_pushbuild.sh index b94f39e..b7bd693 100755 --- a/bacillus/ci_pushbuild.sh +++ b/bacillus/ci_pushbuild.sh @@ -29,10 +29,10 @@ ls stage "Build" ############ echo "Recreating go.mod from scratch ..." -#!mv go.mod go.mod.git || true -#!mv go.sum go.sum.git || true -#!go mod init -#!go mod tidy +mv go.mod go.mod.git || true +mv go.sum go.sum.git || true +go mod init +go mod tidy echo "Cleaning go mod cache ..." go clean -modcache From 5b6bec028723ad8604e8fbb36997c83fe27262a3 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Mon, 12 Sep 2022 22:05:03 -0700 Subject: [PATCH 49/94] Reintroduce go mod init/tidy and remove old vendor dir if present --- bacillus/ci_pushbuild.sh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/bacillus/ci_pushbuild.sh b/bacillus/ci_pushbuild.sh index b94f39e..b6092c2 100755 --- a/bacillus/ci_pushbuild.sh +++ b/bacillus/ci_pushbuild.sh @@ -28,11 +28,13 @@ ls ############ stage "Build" ############ +echo "Removing any vendor/ dir if present ..." +rm -rf vendor echo "Recreating go.mod from scratch ..." -#!mv go.mod go.mod.git || true -#!mv go.sum go.sum.git || true -#!go mod init -#!go mod tidy +mv go.mod go.mod.git || true +mv go.sum go.sum.git || true +go mod init +go mod tidy echo "Cleaning go mod cache ..." go clean -modcache From 9a0dd8270a60d18e3fbc4e2ab3c7c626f8c3a4b2 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Tue, 20 Sep 2022 20:31:53 -0700 Subject: [PATCH 50/94] Cleaned up & updated vendor/ --- bacillus/ci_pushbuild.sh | 12 - go.mod | 4 +- go.sum | 8 +- vendor/blitter.com/go/groestl/README.md | 20 + vendor/blitter.com/go/groestl/groestl.go | 190 ++ vendor/blitter.com/go/groestl/round.go | 217 ++ vendor/blitter.com/go/groestl/sbox.go | 20 + vendor/blitter.com/go/groestl/util.go | 28 + .../klauspost/reedsolomon/leopard.go | 1234 ++++++++++ .../x/crypto/internal/alias/alias.go | 32 + .../x/crypto/internal/alias/alias_purego.go | 35 + vendor/golang.org/x/sys/cpu/cpu_loong64.go | 13 + .../golang.org/x/sys/cpu/cpu_openbsd_arm64.go | 65 + .../golang.org/x/sys/cpu/cpu_openbsd_arm64.s | 11 + .../golang.org/x/sys/cpu/cpu_other_riscv64.go | 12 + .../golang.org/x/sys/unix/asm_bsd_riscv64.s | 29 + .../golang.org/x/sys/unix/asm_linux_loong64.s | 54 + vendor/golang.org/x/sys/unix/mkall.sh | 5 - vendor/golang.org/x/sys/unix/syscall.go | 3 +- .../x/sys/unix/syscall_darwin.1_12.go | 32 - .../x/sys/unix/syscall_darwin.1_13.go | 100 - .../golang.org/x/sys/unix/syscall_darwin.go | 90 + .../x/sys/unix/syscall_freebsd_riscv64.go | 63 + .../x/sys/unix/syscall_linux_loong64.go | 222 ++ .../x/sys/unix/syscall_openbsd_libc.go | 27 + vendor/golang.org/x/sys/unix/xattr_bsd.go | 95 +- .../x/sys/unix/zerrors_freebsd_riscv64.go | 2148 +++++++++++++++++ .../x/sys/unix/zerrors_linux_loong64.go | 818 +++++++ .../x/sys/unix/zsyscall_darwin_amd64.1_13.go | 40 - .../x/sys/unix/zsyscall_darwin_amd64.1_13.s | 25 - .../x/sys/unix/zsyscall_darwin_amd64.go | 32 +- .../x/sys/unix/zsyscall_darwin_amd64.s | 21 +- .../x/sys/unix/zsyscall_darwin_arm64.1_13.go | 40 - .../x/sys/unix/zsyscall_darwin_arm64.1_13.s | 25 - .../x/sys/unix/zsyscall_darwin_arm64.go | 32 +- .../x/sys/unix/zsyscall_darwin_arm64.s | 21 +- .../x/sys/unix/zsyscall_freebsd_riscv64.go | 1889 +++++++++++++++ .../x/sys/unix/zsyscall_linux_loong64.go | 487 ++++ .../x/sys/unix/zsyscall_openbsd_386.s | 796 ++++++ .../x/sys/unix/zsyscall_openbsd_amd64.s | 796 ++++++ .../x/sys/unix/zsyscall_openbsd_arm.s | 796 ++++++ .../x/sys/unix/zsyscall_openbsd_arm64.s | 796 ++++++ .../x/sys/unix/zsysnum_freebsd_riscv64.go | 394 +++ .../x/sys/unix/zsysnum_linux_loong64.go | 311 +++ .../x/sys/unix/ztypes_freebsd_riscv64.go | 638 +++++ .../x/sys/unix/ztypes_linux_loong64.go | 685 ++++++ vendor/golang.org/x/sys/windows/syscall.go | 10 +- .../x/sys/windows/syscall_windows.go | 21 +- .../golang.org/x/sys/windows/types_windows.go | 45 + .../x/sys/windows/zsyscall_windows.go | 88 + vendor/modules.txt | 4 +- 51 files changed, 13232 insertions(+), 347 deletions(-) create mode 100644 vendor/blitter.com/go/groestl/README.md create mode 100644 vendor/blitter.com/go/groestl/groestl.go create mode 100644 vendor/blitter.com/go/groestl/round.go create mode 100644 vendor/blitter.com/go/groestl/sbox.go create mode 100644 vendor/blitter.com/go/groestl/util.go create mode 100644 vendor/github.com/klauspost/reedsolomon/leopard.go create mode 100644 vendor/golang.org/x/crypto/internal/alias/alias.go create mode 100644 vendor/golang.org/x/crypto/internal/alias/alias_purego.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_loong64.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.s create mode 100644 vendor/golang.org/x/sys/cpu/cpu_other_riscv64.go create mode 100644 vendor/golang.org/x/sys/unix/asm_bsd_riscv64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_loong64.s delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin.1_12.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_loong64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_libc.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_riscv64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_riscv64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go diff --git a/bacillus/ci_pushbuild.sh b/bacillus/ci_pushbuild.sh index b6092c2..9ecb3b6 100755 --- a/bacillus/ci_pushbuild.sh +++ b/bacillus/ci_pushbuild.sh @@ -28,18 +28,6 @@ ls ############ stage "Build" ############ -echo "Removing any vendor/ dir if present ..." -rm -rf vendor -echo "Recreating go.mod from scratch ..." -mv go.mod go.mod.git || true -mv go.sum go.sum.git || true -go mod init -go mod tidy - -echo "Cleaning go mod cache ..." -go clean -modcache -echo "Cleaning go cache ..." -go clean -cache echo "Invoking 'make clean' ..." make clean echo "Invoking 'make all' ..." diff --git a/go.mod b/go.mod index 9086e68..d99b855 100644 --- a/go.mod +++ b/go.mod @@ -15,8 +15,8 @@ require ( github.com/kuking/go-frodokem v1.0.2 github.com/mattn/go-isatty v0.0.16 github.com/xtaci/kcp-go v5.4.20+incompatible - golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 - golang.org/x/sys v0.0.0-20220909162455-aba9fc2a8ff2 + golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0 + golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 gopkg.in/hlandau/passlib.v1 v1.0.11 ) diff --git a/go.sum b/go.sum index 677e1c7..69fddf2 100644 --- a/go.sum +++ b/go.sum @@ -81,8 +81,8 @@ golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 h1:Y/gsMcFOcR+6S6f3YeMKl5g+dZMEWqcz5Czj/GWYbkM= -golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0 h1:a5Yg6ylndHHYJqIPrdq0AhvR6KTvDTAvgBtaidhEevY= +golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -106,8 +106,8 @@ golang.org/x/sys v0.0.0-20190902133755-9109b7679e13/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220909162455-aba9fc2a8ff2 h1:wM1k/lXfpc5HdkJJyW9GELpd8ERGdnh8sMGL6Gzq3Ho= -golang.org/x/sys v0.0.0-20220909162455-aba9fc2a8ff2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 h1:h+EGohizhe9XlX18rfpa8k8RAc5XyaeamM+0VHRd4lc= +golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/vendor/blitter.com/go/groestl/README.md b/vendor/blitter.com/go/groestl/README.md new file mode 100644 index 0000000..89c2dc0 --- /dev/null +++ b/vendor/blitter.com/go/groestl/README.md @@ -0,0 +1,20 @@ +# groestl + +Grøstl hash function implementation in golang + +## Usage + +groestl library implements standard `hash.Hash` interface. + +You can also run it from command-line: +``` +$ ./groestl +Usage: + ./groestl [options] path/to/file + +Options: + -hash int + output hash length (default 256) +``` + +To compile simply run `go build` in the root directory. diff --git a/vendor/blitter.com/go/groestl/groestl.go b/vendor/blitter.com/go/groestl/groestl.go new file mode 100644 index 0000000..953f22f --- /dev/null +++ b/vendor/blitter.com/go/groestl/groestl.go @@ -0,0 +1,190 @@ +// Package groestl provides core groestl functionality. It's based on groestl's +// implementation guide with references in C code. +package groestl + +import ( + "encoding/binary" + "fmt" + "hash" +) + +// Toggle verbose output with detailed description of every algorithm's step +const VERBOSE = false + +// Struct digest is being used during algorithm execution. Provides easy +// access to all information about current state of data processing. +type digest struct { + hashbitlen int + chaining [16]uint64 + blocks uint64 + buf [128]byte + nbuf int + columns int + rounds int +} + +// Equivalent to Init from reference implementation. Initiates values +// for digest struct, therefore determines exact type of groestl algorithm. +func (d *digest) Reset() { + for i, _ := range d.chaining { + d.chaining[i] = 0 + } + + d.blocks = 0 + d.nbuf = 0 + + if d.hashbitlen <= 256 { + d.columns = 8 + d.rounds = 10 + } else { + d.columns = 16 + d.rounds = 14 + } + + d.chaining[d.columns-1] = uint64(d.hashbitlen) +} + +// Each New...() function creates new hash digest and initiates it +// for according hash size. +func New224() hash.Hash { + d := new(digest) + d.hashbitlen = 224 + d.Reset() + return d +} + +func New256() hash.Hash { + d := new(digest) + d.hashbitlen = 256 + d.Reset() + return d +} + +func New384() hash.Hash { + d := new(digest) + d.hashbitlen = 384 + d.Reset() + return d +} + +func New512() hash.Hash { + d := new(digest) + d.hashbitlen = 512 + d.Reset() + return d +} + +// Default function for creating hash digest for 256bit groestl. +func New() hash.Hash { + return New256() +} + +// Return size of digest +func (d *digest) Size() int { + return d.hashbitlen +} + +// Return block size for digest. For hash bigger than 256 bit block +// size is 128, otherwise it's 64. +func (d *digest) BlockSize() int { + if d.hashbitlen <= 256 { + return 64 + } else { + return 128 + } +} + +// Equivalent to Update form reference implementation. Performs processing +// on all data except the last block that might need padding. +func (d *digest) Write(p []byte) (n int, err error) { + n = len(p) + if d.nbuf > 0 { + nn := copy(d.buf[d.nbuf:], p) + d.nbuf += nn + if d.nbuf == d.BlockSize() { + err = d.transform(d.buf[:d.BlockSize()]) + if err != nil { + panic(err) + } + d.nbuf = 0 + } + p = p[nn:] + } + if len(p) >= d.BlockSize() { + nn := len(p) &^ (d.BlockSize() - 1) + err = d.transform(p[:nn]) + if err != nil { + panic(err) + } + p = p[nn:] + } + if len(p) > 0 { + d.nbuf = copy(d.buf[:], p) + } + return +} + +func (d *digest) Sum(in []byte) []byte { + d0 := *d + hash := d0.checkSum() + fmt.Printf("groestl-hash:len:%b %v\r\n", len(hash), hash) + return append(in, hash...) +} + +// Equivalent to Final from reference implementation. Creates padding +// for last block of data and performs final output transformation and trumcate. +// Returns hash value. +func (d *digest) checkSum() []byte { + bs := d.BlockSize() + var tmp [128]byte + tmp[0] = 0x80 + + if d.nbuf > (bs - 8) { + d.Write(tmp[:(bs - d.nbuf)]) + d.Write(tmp[8:bs]) + } else { + d.Write(tmp[0:(bs - d.nbuf - 8)]) + } + + binary.BigEndian.PutUint64(tmp[:], d.blocks+1) + d.Write(tmp[:8]) + + if d.nbuf != 0 { + panic("padding failed") + } + + d.finalTransform() + + // store chaining in output byteslice + hash := make([]byte, d.columns*4) + for i := 0; i < d.columns/2; i++ { + binary.BigEndian.PutUint64(hash[(i*8):(i+1)*8], d.chaining[i+(d.columns/2)]) + } + hash = hash[(len(hash) - d.hashbitlen/8):] + return hash +} + +// Each Sum...() function returns according hash value for provided data. +func Sum224(data []byte) []byte { + d := New224().(*digest) + d.Write(data) + return d.checkSum() +} + +func Sum256(data []byte) []byte { + d := New256().(*digest) + d.Write(data) + return d.checkSum() +} + +func Sum384(data []byte) []byte { + d := New384().(*digest) + d.Write(data) + return d.checkSum() +} + +func Sum512(data []byte) []byte { + d := New512().(*digest) + d.Write(data) + return d.checkSum() +} diff --git a/vendor/blitter.com/go/groestl/round.go b/vendor/blitter.com/go/groestl/round.go new file mode 100644 index 0000000..a32c1b1 --- /dev/null +++ b/vendor/blitter.com/go/groestl/round.go @@ -0,0 +1,217 @@ +package groestl + +import ( + "encoding/binary" + "fmt" +) + +func buildColumns(data []byte, cols chan uint64) { + for i, l := 8, len(data); i <= l; i += 8 { + cols <- binary.BigEndian.Uint64(data[i-8 : i]) + } + close(cols) +} + +// Performs compression function. Returns nil on success, error otherwise. +func (d *digest) transform(data []byte) error { + if (len(data) % d.BlockSize()) != 0 { + return fmt.Errorf("data len in transform is not a multiple of BlockSize") + } + + cols := make(chan uint64) + go buildColumns(data, cols) + + eb := d.blocks + uint64(len(data)/d.BlockSize()) + for d.blocks < eb { + m := make([]uint64, d.columns) + hxm := make([]uint64, d.columns) + + for i := 0; i < d.columns; i++ { + m[i] = <-cols + hxm[i] = d.chaining[i] ^ m[i] + } + + if VERBOSE { + fmt.Println("\n========================================\n") + fmt.Println("Block Contents:") + printUintSlice(m) + fmt.Println() + } + + hxm = round(d, hxm, 'P') + m = round(d, m, 'Q') + + for i := 0; i < d.columns; i++ { + d.chaining[i] ^= hxm[i] ^ m[i] + } + + d.blocks += 1 + + if VERBOSE { + fmt.Println("P(h+m) + Q(m) + h =") + printUintSlice(d.chaining[:d.columns]) + fmt.Println() + } + } + + return nil +} + +// Performs last compression. After this function, data +// is ready for truncation. +func (d *digest) finalTransform() { + h := make([]uint64, d.columns) + + for i := 0; i < d.columns; i++ { + h[i] = d.chaining[i] + } + + if VERBOSE { + fmt.Println("\n========================================\n") + fmt.Println("Output transformation:\n") + } + + h = round(d, h, 'P') + + for i := 0; i < d.columns; i++ { + d.chaining[i] ^= h[i] + } + + d.blocks += 1 + + if VERBOSE { + fmt.Println("P(h) + h =") + printUintSlice(d.chaining[:d.columns]) + fmt.Println("\n---------------------------------------\n") + } +} + +// Performs whole set of rounds on data provided in x. Variant denotes type +// of permutation being performed. P and Q are for groestl-512 +// and lowercase are for groestl-256 +func round(d *digest, x []uint64, variant rune) []uint64 { + if VERBOSE { + fmt.Println(":: BEGIN " + string(variant)) + defer fmt.Println(":: END " + string(variant) + "\n") + fmt.Println("Input:") + printUintSlice(x) + } + + if d.BlockSize() == 64 { + // for smaller blocksize change variant to lowercase letter + variant += 0x20 + } + + for i := 0; i < d.rounds; i++ { + x = addRoundConstant(x, i, variant) + if VERBOSE { + fmt.Printf("t=%d (AddRoundConstant):\n", i) + printUintSlice(x) + } + x = subBytes(x) + if VERBOSE { + fmt.Printf("t=%d (SubBytes):\n", i) + printUintSlice(x) + } + x = shiftBytes(x, variant) + if VERBOSE { + fmt.Printf("t=%d (ShiftBytes):\n", i) + printUintSlice(x) + } + x = mixBytes(x) + if VERBOSE { + fmt.Printf("t=%d (MixBytes):\n", i) + printUintSlice(x) + } + } + + return x +} + +// AddRoundConstant transformation for data provided in x. Variant denotes type +// of permutation being performed. P and Q are for groestl-512 +// and lowercase are for groestl-256 +func addRoundConstant(x []uint64, r int, variant rune) []uint64 { + switch variant { + case 'P', 'p': + for i, l := 0, len(x); i < l; i++ { + // byte from row 0: ((col >> (8*7)) & 0xFF) + // we want to xor the byte below with row 0 + // therefore we have to shift it by 8*7 bits + x[i] ^= uint64((i<<4)^r) << (8 * 7) + } + case 'Q', 'q': + for i, l := 0, len(x); i < l; i++ { + x[i] ^= ^uint64(0) ^ uint64((i<<4)^r) + } + } + return x +} + +// SubBytes transformation for data provided in x. +func subBytes(x []uint64) []uint64 { + var newCol [8]byte + for i, l := 0, len(x); i < l; i++ { + for j := 0; j < 8; j++ { + newCol[j] = sbox[pickRow(x[i], j)] + } + x[i] = binary.BigEndian.Uint64(newCol[:]) + } + return x +} + +// ShiftBytes transformation for data provided in x. Variant denotes type +// of permutation being performed. P and Q are for groestl-512 +// and lowercase are for groestl-256 +func shiftBytes(x []uint64, variant rune) []uint64 { + var shiftVector [8]int + switch variant { + case 'p': + shiftVector = [8]int{0, 1, 2, 3, 4, 5, 6, 7} + case 'P': + shiftVector = [8]int{0, 1, 2, 3, 4, 5, 6, 11} + case 'q': + shiftVector = [8]int{1, 3, 5, 7, 0, 2, 4, 6} + case 'Q': + shiftVector = [8]int{1, 3, 5, 11, 0, 2, 4, 6} + } + l := len(x) + ret := make([]uint64, l) + for i := 0; i < l; i++ { + ret[i] = uint64(pickRow(x[(i+shiftVector[0])%l], 0)) + for j := 1; j < 8; j++ { + ret[i] <<= 8 + ret[i] ^= uint64(pickRow(x[(i+shiftVector[j])%l], j)) + } + } + return ret +} + +// MixBytes transformation for data provided in x. +func mixBytes(x []uint64) []uint64 { + // this part is tricky + // so here comes yet another rough translation straight from reference implementation + + mul2 := func(b uint8) uint8 { return uint8((b << 1) ^ (0x1B * ((b >> 7) & 1))) } + mul3 := func(b uint8) uint8 { return (mul2(b) ^ (b)) } + mul4 := func(b uint8) uint8 { return mul2(mul2(b)) } + mul5 := func(b uint8) uint8 { return (mul4(b) ^ (b)) } + mul7 := func(b uint8) uint8 { return (mul4(b) ^ mul2(b) ^ (b)) } + + var temp [8]uint8 + for i, l := 0, len(x); i < l; i++ { + for j := 0; j < 8; j++ { + temp[j] = + mul2(pickRow(x[i], (j+0)%8)) ^ + mul2(pickRow(x[i], (j+1)%8)) ^ + mul3(pickRow(x[i], (j+2)%8)) ^ + mul4(pickRow(x[i], (j+3)%8)) ^ + mul5(pickRow(x[i], (j+4)%8)) ^ + mul3(pickRow(x[i], (j+5)%8)) ^ + mul5(pickRow(x[i], (j+6)%8)) ^ + mul7(pickRow(x[i], (j+7)%8)) + } + x[i] = binary.BigEndian.Uint64(temp[:]) + } + return x +} diff --git a/vendor/blitter.com/go/groestl/sbox.go b/vendor/blitter.com/go/groestl/sbox.go new file mode 100644 index 0000000..207d405 --- /dev/null +++ b/vendor/blitter.com/go/groestl/sbox.go @@ -0,0 +1,20 @@ +package groestl + +var sbox = [256]byte{ + 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, + 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, + 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, + 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, + 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, + 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, + 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, + 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, + 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, + 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, + 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, + 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, + 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, + 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, + 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, + 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16, +} diff --git a/vendor/blitter.com/go/groestl/util.go b/vendor/blitter.com/go/groestl/util.go new file mode 100644 index 0000000..72b19c4 --- /dev/null +++ b/vendor/blitter.com/go/groestl/util.go @@ -0,0 +1,28 @@ +package groestl + +import ( + "encoding/hex" + "fmt" +) + +// Function for printing hash output from groestl.Sum() +func PrintHash(hash []byte) { + fmt.Println(hex.EncodeToString(hash)) +} + +// Helper function for returning i'th row from provided +// uint64 +func pickRow(col uint64, i int) byte { + return byte((col >> (8 * (7 - i))) & 0xFF) +} + +// Prints provided x slice in form of block. +func printUintSlice(x []uint64) { + l := len(x) + for i := 0; i < 8; i++ { + for j := 0; j < l; j++ { + fmt.Printf("%02x ", pickRow(x[j], i)) + } + fmt.Println() + } +} diff --git a/vendor/github.com/klauspost/reedsolomon/leopard.go b/vendor/github.com/klauspost/reedsolomon/leopard.go new file mode 100644 index 0000000..e9d122a --- /dev/null +++ b/vendor/github.com/klauspost/reedsolomon/leopard.go @@ -0,0 +1,1234 @@ +package reedsolomon + +// This is a O(n*log n) implementation of Reed-Solomon +// codes, ported from the C++ library https://github.com/catid/leopard. +// +// The implementation is based on the paper +// +// S.-J. Lin, T. Y. Al-Naffouri, Y. S. Han, and W.-H. Chung, +// "Novel Polynomial Basis with Fast Fourier Transform +// and Its Application to Reed-Solomon Erasure Codes" +// IEEE Trans. on Information Theory, pp. 6284-6299, November, 2016. + +import ( + "bytes" + "io" + "math/bits" + "sync" + "unsafe" + + "github.com/klauspost/cpuid/v2" +) + +// leopardFF16 is like reedSolomon but for more than 256 total shards. +type leopardFF16 struct { + dataShards int // Number of data shards, should not be modified. + parityShards int // Number of parity shards, should not be modified. + totalShards int // Total number of shards. Calculated, and should not be modified. + + workPool sync.Pool + + o options +} + +// newFF16 is like New, but for more than 256 total shards. +func newFF16(dataShards, parityShards int, opt options) (*leopardFF16, error) { + initConstants() + + if dataShards <= 0 || parityShards <= 0 { + return nil, ErrInvShardNum + } + + if dataShards+parityShards > 65536 { + return nil, ErrMaxShardNum + } + + r := &leopardFF16{ + dataShards: dataShards, + parityShards: parityShards, + totalShards: dataShards + parityShards, + o: opt, + } + return r, nil +} + +var _ = Extensions(&leopardFF16{}) + +func (r *leopardFF16) ShardSizeMultiple() int { + return 64 +} + +func (r *leopardFF16) DataShards() int { + return r.dataShards +} + +func (r *leopardFF16) ParityShards() int { + return r.parityShards +} + +func (r *leopardFF16) TotalShards() int { + return r.parityShards +} + +type ffe uint16 + +const ( + bitwidth = 16 + order = 1 << bitwidth + modulus = order - 1 + polynomial = 0x1002D +) + +var ( + fftSkew *[modulus]ffe + logWalsh *[order]ffe +) + +// Logarithm Tables +var ( + logLUT *[order]ffe + expLUT *[order]ffe +) + +// Stores the partial products of x * y at offset x + y * 65536 +// Repeated accesses from the same y value are faster +var mul16LUTs *[order]mul16LUT + +type mul16LUT struct { + // Contains Lo product as a single lookup. + // Should be XORed with Hi lookup for result. + Lo [256]ffe + Hi [256]ffe +} + +// Stores lookup for avx2 +var multiply256LUT *[order][8 * 16]byte + +func (r *leopardFF16) Encode(shards [][]byte) error { + if len(shards) != r.totalShards { + return ErrTooFewShards + } + + if err := checkShards(shards, false); err != nil { + return err + } + return r.encode(shards) +} + +func (r *leopardFF16) encode(shards [][]byte) error { + shardSize := shardSize(shards) + if shardSize%64 != 0 { + return ErrShardSize + } + + m := ceilPow2(r.parityShards) + var work [][]byte + if w, ok := r.workPool.Get().([][]byte); ok { + work = w + } + if cap(work) >= m*2 { + work = work[:m*2] + } else { + work = make([][]byte, m*2) + } + for i := range work { + if cap(work[i]) < shardSize { + work[i] = make([]byte, shardSize) + } else { + work[i] = work[i][:shardSize] + } + } + defer r.workPool.Put(work) + + mtrunc := m + if r.dataShards < mtrunc { + mtrunc = r.dataShards + } + + skewLUT := fftSkew[m-1:] + + sh := shards + ifftDITEncoder( + sh[:r.dataShards], + mtrunc, + work, + nil, // No xor output + m, + skewLUT, + &r.o, + ) + + lastCount := r.dataShards % m + if m >= r.dataShards { + goto skip_body + } + + // For sets of m data pieces: + for i := m; i+m <= r.dataShards; i += m { + sh = sh[m:] + skewLUT = skewLUT[m:] + + // work <- work xor IFFT(data + i, m, m + i) + + ifftDITEncoder( + sh, // data source + m, + work[m:], // temporary workspace + work, // xor destination + m, + skewLUT, + &r.o, + ) + } + + // Handle final partial set of m pieces: + if lastCount != 0 { + sh = sh[m:] + skewLUT = skewLUT[m:] + + // work <- work xor IFFT(data + i, m, m + i) + + ifftDITEncoder( + sh, // data source + lastCount, + work[m:], // temporary workspace + work, // xor destination + m, + skewLUT, + &r.o, + ) + } + +skip_body: + // work <- FFT(work, m, 0) + fftDIT(work, r.parityShards, m, fftSkew[:], &r.o) + + for i, w := range work[:r.parityShards] { + sh := shards[i+r.dataShards] + if cap(sh) >= shardSize { + sh = append(sh[:0], w...) + } else { + sh = w + } + shards[i+r.dataShards] = sh + } + + return nil +} + +func (r *leopardFF16) EncodeIdx(dataShard []byte, idx int, parity [][]byte) error { + return ErrNotSupported +} + +func (r *leopardFF16) Join(dst io.Writer, shards [][]byte, outSize int) error { + // Do we have enough shards? + if len(shards) < r.dataShards { + return ErrTooFewShards + } + shards = shards[:r.dataShards] + + // Do we have enough data? + size := 0 + for _, shard := range shards { + if shard == nil { + return ErrReconstructRequired + } + size += len(shard) + + // Do we have enough data already? + if size >= outSize { + break + } + } + if size < outSize { + return ErrShortData + } + + // Copy data to dst + write := outSize + for _, shard := range shards { + if write < len(shard) { + _, err := dst.Write(shard[:write]) + return err + } + n, err := dst.Write(shard) + if err != nil { + return err + } + write -= n + } + return nil +} + +func (r *leopardFF16) Update(shards [][]byte, newDatashards [][]byte) error { + return ErrNotSupported +} + +func (r *leopardFF16) Split(data []byte) ([][]byte, error) { + if len(data) == 0 { + return nil, ErrShortData + } + dataLen := len(data) + // Calculate number of bytes per data shard. + perShard := (len(data) + r.dataShards - 1) / r.dataShards + perShard = ((perShard + 63) / 64) * 64 + + if cap(data) > len(data) { + data = data[:cap(data)] + } + + // Only allocate memory if necessary + var padding []byte + if len(data) < (r.totalShards * perShard) { + // calculate maximum number of full shards in `data` slice + fullShards := len(data) / perShard + padding = make([]byte, r.totalShards*perShard-perShard*fullShards) + copy(padding, data[perShard*fullShards:]) + data = data[0 : perShard*fullShards] + } else { + for i := dataLen; i < dataLen+r.dataShards; i++ { + data[i] = 0 + } + } + + // Split into equal-length shards. + dst := make([][]byte, r.totalShards) + i := 0 + for ; i < len(dst) && len(data) >= perShard; i++ { + dst[i] = data[:perShard:perShard] + data = data[perShard:] + } + + for j := 0; i+j < len(dst); j++ { + dst[i+j] = padding[:perShard:perShard] + padding = padding[perShard:] + } + + return dst, nil +} + +func (r *leopardFF16) ReconstructSome(shards [][]byte, required []bool) error { + return r.ReconstructData(shards) +} + +func (r *leopardFF16) Reconstruct(shards [][]byte) error { + return r.reconstruct(shards, true) +} + +func (r *leopardFF16) ReconstructData(shards [][]byte) error { + return r.reconstruct(shards, false) +} + +func (r *leopardFF16) Verify(shards [][]byte) (bool, error) { + if len(shards) != r.totalShards { + return false, ErrTooFewShards + } + if err := checkShards(shards, false); err != nil { + return false, err + } + + // Re-encode parity shards to temporary storage. + shardSize := len(shards[0]) + outputs := make([][]byte, r.totalShards) + copy(outputs, shards[:r.dataShards]) + for i := r.dataShards; i < r.totalShards; i++ { + outputs[i] = make([]byte, shardSize) + } + if err := r.Encode(outputs); err != nil { + return false, err + } + + // Compare. + for i := r.dataShards; i < r.totalShards; i++ { + if !bytes.Equal(outputs[i], shards[i]) { + return false, nil + } + } + return true, nil +} + +func (r *leopardFF16) reconstruct(shards [][]byte, recoverAll bool) error { + if len(shards) != r.totalShards { + return ErrTooFewShards + } + + if err := checkShards(shards, true); err != nil { + return err + } + + // Quick check: are all of the shards present? If so, there's + // nothing to do. + numberPresent := 0 + dataPresent := 0 + for i := 0; i < r.totalShards; i++ { + if len(shards[i]) != 0 { + numberPresent++ + if i < r.dataShards { + dataPresent++ + } + } + } + if numberPresent == r.totalShards || !recoverAll && dataPresent == r.dataShards { + // Cool. All of the shards have data. We don't + // need to do anything. + return nil + } + + // Use only if we are missing less than 1/4 parity. + useBits := r.totalShards-numberPresent <= r.parityShards/4 + + // Check if we have enough to reconstruct. + if numberPresent < r.dataShards { + return ErrTooFewShards + } + + shardSize := shardSize(shards) + if shardSize%64 != 0 { + return ErrShardSize + } + + m := ceilPow2(r.parityShards) + n := ceilPow2(m + r.dataShards) + + const LEO_ERROR_BITFIELD_OPT = true + + // Fill in error locations. + var errorBits errorBitfield + var errLocs [order]ffe + for i := 0; i < r.parityShards; i++ { + if len(shards[i+r.dataShards]) == 0 { + errLocs[i] = 1 + if LEO_ERROR_BITFIELD_OPT && recoverAll { + errorBits.set(i) + } + } + } + for i := r.parityShards; i < m; i++ { + errLocs[i] = 1 + if LEO_ERROR_BITFIELD_OPT && recoverAll { + errorBits.set(i) + } + } + for i := 0; i < r.dataShards; i++ { + if len(shards[i]) == 0 { + errLocs[i+m] = 1 + if LEO_ERROR_BITFIELD_OPT { + errorBits.set(i + m) + } + } + } + + if LEO_ERROR_BITFIELD_OPT && useBits { + errorBits.prepare() + } + + // Evaluate error locator polynomial + fwht(&errLocs, order, m+r.dataShards) + + for i := 0; i < order; i++ { + errLocs[i] = ffe((uint(errLocs[i]) * uint(logWalsh[i])) % modulus) + } + + fwht(&errLocs, order, order) + + var work [][]byte + if w, ok := r.workPool.Get().([][]byte); ok { + work = w + } + if cap(work) >= n { + work = work[:n] + } else { + work = make([][]byte, n) + } + for i := range work { + if cap(work[i]) < shardSize { + work[i] = make([]byte, shardSize) + } else { + work[i] = work[i][:shardSize] + } + } + defer r.workPool.Put(work) + + // work <- recovery data + + for i := 0; i < r.parityShards; i++ { + if len(shards[i+r.dataShards]) != 0 { + mulgf16(work[i], shards[i+r.dataShards], errLocs[i], &r.o) + } else { + memclr(work[i]) + } + } + for i := r.parityShards; i < m; i++ { + memclr(work[i]) + } + + // work <- original data + + for i := 0; i < r.dataShards; i++ { + if len(shards[i]) != 0 { + mulgf16(work[m+i], shards[i], errLocs[m+i], &r.o) + } else { + memclr(work[m+i]) + } + } + for i := m + r.dataShards; i < n; i++ { + memclr(work[i]) + } + + // work <- IFFT(work, n, 0) + + ifftDITDecoder( + m+r.dataShards, + work, + n, + fftSkew[:], + &r.o, + ) + + // work <- FormalDerivative(work, n) + + for i := 1; i < n; i++ { + width := ((i ^ (i - 1)) + 1) >> 1 + slicesXor(work[i-width:i], work[i:i+width], &r.o) + } + + // work <- FFT(work, n, 0) truncated to m + dataShards + + outputCount := m + r.dataShards + + if LEO_ERROR_BITFIELD_OPT && useBits { + errorBits.fftDIT(work, outputCount, n, fftSkew[:], &r.o) + } else { + fftDIT(work, outputCount, n, fftSkew[:], &r.o) + } + + // Reveal erasures + // + // Original = -ErrLocator * FFT( Derivative( IFFT( ErrLocator * ReceivedData ) ) ) + // mul_mem(x, y, log_m, ) equals x[] = y[] * log_m + // + // mem layout: [Recovery Data (Power of Two = M)] [Original Data (K)] [Zero Padding out to N] + end := r.dataShards + if recoverAll { + end = r.totalShards + } + for i := 0; i < end; i++ { + if len(shards[i]) != 0 { + continue + } + if cap(shards[i]) >= shardSize { + shards[i] = shards[i][:shardSize] + } else { + shards[i] = make([]byte, shardSize) + } + if i >= r.dataShards { + // Parity shard. + mulgf16(shards[i], work[i-r.dataShards], modulus-errLocs[i-r.dataShards], &r.o) + } else { + // Data shard. + mulgf16(shards[i], work[i+m], modulus-errLocs[i+m], &r.o) + } + } + return nil +} + +// Basic no-frills version for decoder +func ifftDITDecoder(mtrunc int, work [][]byte, m int, skewLUT []ffe, o *options) { + // Decimation in time: Unroll 2 layers at a time + dist := 1 + dist4 := 4 + for dist4 <= m { + // For each set of dist*4 elements: + for r := 0; r < mtrunc; r += dist4 { + iend := r + dist + log_m01 := skewLUT[iend-1] + log_m02 := skewLUT[iend+dist-1] + log_m23 := skewLUT[iend+dist*2-1] + + // For each set of dist elements: + for i := r; i < iend; i++ { + ifftDIT4(work[i:], dist, log_m01, log_m23, log_m02, o) + } + } + dist = dist4 + dist4 <<= 2 + } + + // If there is one layer left: + if dist < m { + // Assuming that dist = m / 2 + if dist*2 != m { + panic("internal error") + } + + log_m := skewLUT[dist-1] + + if log_m == modulus { + slicesXor(work[dist:2*dist], work[:dist], o) + } else { + for i := 0; i < dist; i++ { + ifftDIT2( + work[i], + work[i+dist], + log_m, + o, + ) + } + } + } +} + +// In-place FFT for encoder and decoder +func fftDIT(work [][]byte, mtrunc, m int, skewLUT []ffe, o *options) { + // Decimation in time: Unroll 2 layers at a time + dist4 := m + dist := m >> 2 + for dist != 0 { + // For each set of dist*4 elements: + for r := 0; r < mtrunc; r += dist4 { + iend := r + dist + log_m01 := skewLUT[iend-1] + log_m02 := skewLUT[iend+dist-1] + log_m23 := skewLUT[iend+dist*2-1] + + // For each set of dist elements: + for i := r; i < iend; i++ { + fftDIT4( + work[i:], + dist, + log_m01, + log_m23, + log_m02, + o, + ) + } + } + dist4 = dist + dist >>= 2 + } + + // If there is one layer left: + if dist4 == 2 { + for r := 0; r < mtrunc; r += 2 { + log_m := skewLUT[r+1-1] + + if log_m == modulus { + sliceXor(work[r], work[r+1], o) + } else { + fftDIT2(work[r], work[r+1], log_m, o) + } + } + } +} + +// 4-way butterfly +func fftDIT4Ref(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) { + // First layer: + if log_m02 == modulus { + sliceXor(work[0], work[dist*2], o) + sliceXor(work[dist], work[dist*3], o) + } else { + fftDIT2(work[0], work[dist*2], log_m02, o) + fftDIT2(work[dist], work[dist*3], log_m02, o) + } + + // Second layer: + if log_m01 == modulus { + sliceXor(work[0], work[dist], o) + } else { + fftDIT2(work[0], work[dist], log_m01, o) + } + + if log_m23 == modulus { + sliceXor(work[dist*2], work[dist*3], o) + } else { + fftDIT2(work[dist*2], work[dist*3], log_m23, o) + } +} + +// Unrolled IFFT for encoder +func ifftDITEncoder(data [][]byte, mtrunc int, work [][]byte, xorRes [][]byte, m int, skewLUT []ffe, o *options) { + // I tried rolling the memcpy/memset into the first layer of the FFT and + // found that it only yields a 4% performance improvement, which is not + // worth the extra complexity. + for i := 0; i < mtrunc; i++ { + copy(work[i], data[i]) + } + for i := mtrunc; i < m; i++ { + memclr(work[i]) + } + + // I tried splitting up the first few layers into L3-cache sized blocks but + // found that it only provides about 5% performance boost, which is not + // worth the extra complexity. + + // Decimation in time: Unroll 2 layers at a time + dist := 1 + dist4 := 4 + for dist4 <= m { + // For each set of dist*4 elements: + for r := 0; r < mtrunc; r += dist4 { + iend := r + dist + log_m01 := skewLUT[iend] + log_m02 := skewLUT[iend+dist] + log_m23 := skewLUT[iend+dist*2] + + // For each set of dist elements: + for i := r; i < iend; i++ { + ifftDIT4( + work[i:], + dist, + log_m01, + log_m23, + log_m02, + o, + ) + } + } + + dist = dist4 + dist4 <<= 2 + // I tried alternating sweeps left->right and right->left to reduce cache misses. + // It provides about 1% performance boost when done for both FFT and IFFT, so it + // does not seem to be worth the extra complexity. + } + + // If there is one layer left: + if dist < m { + // Assuming that dist = m / 2 + if dist*2 != m { + panic("internal error") + } + + logm := skewLUT[dist] + + if logm == modulus { + slicesXor(work[dist:dist*2], work[:dist], o) + } else { + for i := 0; i < dist; i++ { + ifftDIT2(work[i], work[i+dist], logm, o) + } + } + } + + // I tried unrolling this but it does not provide more than 5% performance + // improvement for 16-bit finite fields, so it's not worth the complexity. + if xorRes != nil { + slicesXor(xorRes[:m], work[:m], o) + } +} + +func ifftDIT4Ref(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) { + // First layer: + if log_m01 == modulus { + sliceXor(work[0], work[dist], o) + } else { + ifftDIT2(work[0], work[dist], log_m01, o) + } + + if log_m23 == modulus { + sliceXor(work[dist*2], work[dist*3], o) + } else { + ifftDIT2(work[dist*2], work[dist*3], log_m23, o) + } + + // Second layer: + if log_m02 == modulus { + sliceXor(work[0], work[dist*2], o) + sliceXor(work[dist], work[dist*3], o) + } else { + ifftDIT2(work[0], work[dist*2], log_m02, o) + ifftDIT2(work[dist], work[dist*3], log_m02, o) + } +} + +// Reference version of muladd: x[] ^= y[] * log_m +func refMulAdd(x, y []byte, log_m ffe) { + lut := &mul16LUTs[log_m] + + for len(x) >= 64 { + // Assert sizes for no bounds checks in loop + hiA := y[32:64] + loA := y[:32] + dst := x[:64] // Needed, but not checked... + for i, lo := range loA { + hi := hiA[i] + prod := lut.Lo[lo] ^ lut.Hi[hi] + + dst[i] ^= byte(prod) + dst[i+32] ^= byte(prod >> 8) + } + x = x[64:] + y = y[64:] + } +} + +func memclr(s []byte) { + for i := range s { + s[i] = 0 + } +} + +// slicesXor calls xor for every slice pair in v1, v2. +func slicesXor(v1, v2 [][]byte, o *options) { + for i, v := range v1 { + sliceXor(v2[i], v, o) + } +} + +// Reference version of mul: x[] = y[] * log_m +func refMul(x, y []byte, log_m ffe) { + lut := &mul16LUTs[log_m] + + for off := 0; off < len(x); off += 64 { + loA := y[off : off+32] + hiA := y[off+32:] + hiA = hiA[:len(loA)] + for i, lo := range loA { + hi := hiA[i] + prod := lut.Lo[lo] ^ lut.Hi[hi] + + x[off+i] = byte(prod) + x[off+i+32] = byte(prod >> 8) + } + } +} + +// Returns a * Log(b) +func mulLog(a, log_b ffe) ffe { + /* + Note that this operation is not a normal multiplication in a finite + field because the right operand is already a logarithm. This is done + because it moves K table lookups from the Decode() method into the + initialization step that is less performance critical. The LogWalsh[] + table below contains precalculated logarithms so it is easier to do + all the other multiplies in that form as well. + */ + if a == 0 { + return 0 + } + return expLUT[addMod(logLUT[a], log_b)] +} + +// z = x + y (mod kModulus) +func addMod(a, b ffe) ffe { + sum := uint(a) + uint(b) + + // Partial reduction step, allowing for kModulus to be returned + return ffe(sum + sum>>bitwidth) +} + +// z = x - y (mod kModulus) +func subMod(a, b ffe) ffe { + dif := uint(a) - uint(b) + + // Partial reduction step, allowing for kModulus to be returned + return ffe(dif + dif>>bitwidth) +} + +// ceilPow2 returns power of two at or above n. +func ceilPow2(n int) int { + const w = int(unsafe.Sizeof(n) * 8) + return 1 << (w - bits.LeadingZeros(uint(n-1))) +} + +// Decimation in time (DIT) Fast Walsh-Hadamard Transform +// Unrolls pairs of layers to perform cross-layer operations in registers +// mtrunc: Number of elements that are non-zero at the front of data +func fwht(data *[order]ffe, m, mtrunc int) { + // Decimation in time: Unroll 2 layers at a time + dist := 1 + dist4 := 4 + for dist4 <= m { + // For each set of dist*4 elements: + for r := 0; r < mtrunc; r += dist4 { + // For each set of dist elements: + // Use 16 bit indices to avoid bounds check on [65536]ffe. + dist := uint16(dist) + off := uint16(r) + for i := uint16(0); i < dist; i++ { + // fwht4(data[i:], dist) inlined... + // Reading values appear faster than updating pointers. + // Casting to uint is not faster. + t0 := data[off] + t1 := data[off+dist] + t2 := data[off+dist*2] + t3 := data[off+dist*3] + + t0, t1 = fwht2alt(t0, t1) + t2, t3 = fwht2alt(t2, t3) + t0, t2 = fwht2alt(t0, t2) + t1, t3 = fwht2alt(t1, t3) + + data[off] = t0 + data[off+dist] = t1 + data[off+dist*2] = t2 + data[off+dist*3] = t3 + off++ + } + } + dist = dist4 + dist4 <<= 2 + } + + // If there is one layer left: + if dist < m { + dist := uint16(dist) + for i := uint16(0); i < dist; i++ { + fwht2(&data[i], &data[i+dist]) + } + } +} + +func fwht4(data []ffe, s int) { + s2 := s << 1 + + t0 := &data[0] + t1 := &data[s] + t2 := &data[s2] + t3 := &data[s2+s] + + fwht2(t0, t1) + fwht2(t2, t3) + fwht2(t0, t2) + fwht2(t1, t3) +} + +// {a, b} = {a + b, a - b} (Mod Q) +func fwht2(a, b *ffe) { + sum := addMod(*a, *b) + dif := subMod(*a, *b) + *a = sum + *b = dif +} + +// fwht2alt is as fwht2, but returns result. +func fwht2alt(a, b ffe) (ffe, ffe) { + return addMod(a, b), subMod(a, b) +} + +var initOnce sync.Once + +func initConstants() { + initOnce.Do(func() { + initLUTs() + initFFTSkew() + initMul16LUT() + }) +} + +// Initialize logLUT, expLUT. +func initLUTs() { + cantorBasis := [bitwidth]ffe{ + 0x0001, 0xACCA, 0x3C0E, 0x163E, + 0xC582, 0xED2E, 0x914C, 0x4012, + 0x6C98, 0x10D8, 0x6A72, 0xB900, + 0xFDB8, 0xFB34, 0xFF38, 0x991E, + } + + expLUT = &[order]ffe{} + logLUT = &[order]ffe{} + + // LFSR table generation: + state := 1 + for i := ffe(0); i < modulus; i++ { + expLUT[state] = i + state <<= 1 + if state >= order { + state ^= polynomial + } + } + expLUT[0] = modulus + + // Conversion to Cantor basis: + + logLUT[0] = 0 + for i := 0; i < bitwidth; i++ { + basis := cantorBasis[i] + width := 1 << i + + for j := 0; j < width; j++ { + logLUT[j+width] = logLUT[j] ^ basis + } + } + + for i := 0; i < order; i++ { + logLUT[i] = expLUT[logLUT[i]] + } + + for i := 0; i < order; i++ { + expLUT[logLUT[i]] = ffe(i) + } + + expLUT[modulus] = expLUT[0] +} + +// Initialize fftSkew. +func initFFTSkew() { + var temp [bitwidth - 1]ffe + + // Generate FFT skew vector {1}: + + for i := 1; i < bitwidth; i++ { + temp[i-1] = ffe(1 << i) + } + + fftSkew = &[modulus]ffe{} + logWalsh = &[order]ffe{} + + for m := 0; m < bitwidth-1; m++ { + step := 1 << (m + 1) + + fftSkew[1<>4)+16)] + lut.Hi[i] = tmp[((i&15)+32)] ^ tmp[((i>>4)+48)] + } + } + if cpuid.CPU.Has(cpuid.SSSE3) || cpuid.CPU.Has(cpuid.AVX2) || cpuid.CPU.Has(cpuid.AVX512F) { + multiply256LUT = &[order][16 * 8]byte{} + + for logM := range multiply256LUT[:] { + // For each 4 bits of the finite field width in bits: + shift := 0 + for i := 0; i < 4; i++ { + // Construct 16 entry LUT for PSHUFB + prodLo := multiply256LUT[logM][i*16 : i*16+16] + prodHi := multiply256LUT[logM][4*16+i*16 : 4*16+i*16+16] + for x := range prodLo[:] { + prod := mulLog(ffe(x<> 8) + } + shift += 4 + } + } + } +} + +const kWordMips = 5 +const kWords = order / 64 +const kBigMips = 6 +const kBigWords = (kWords + 63) / 64 +const kBiggestMips = 4 + +// errorBitfield contains progressive errors to help indicate which +// shards need reconstruction. +type errorBitfield struct { + Words [kWordMips][kWords]uint64 + BigWords [kBigMips][kBigWords]uint64 + BiggestWords [kBiggestMips]uint64 +} + +func (e *errorBitfield) set(i int) { + e.Words[0][i/64] |= uint64(1) << (i & 63) +} + +func (e *errorBitfield) isNeededFn(mipLevel int) func(bit int) bool { + if mipLevel >= 16 { + return func(bit int) bool { + return true + } + } + if mipLevel >= 12 { + w := e.BiggestWords[mipLevel-12] + return func(bit int) bool { + bit /= 4096 + return 0 != (w & (uint64(1) << bit)) + } + } + if mipLevel >= 6 { + w := e.BigWords[mipLevel-6][:] + return func(bit int) bool { + bit /= 64 + return 0 != (w[bit/64] & (uint64(1) << (bit & 63))) + } + } + if mipLevel > 0 { + w := e.Words[mipLevel-1][:] + return func(bit int) bool { + return 0 != (w[bit/64] & (uint64(1) << (bit & 63))) + } + } + return nil +} + +func (e *errorBitfield) isNeeded(mipLevel int, bit uint) bool { + if mipLevel >= 16 { + return true + } + if mipLevel >= 12 { + bit /= 4096 + return 0 != (e.BiggestWords[mipLevel-12] & (uint64(1) << bit)) + } + if mipLevel >= 6 { + bit /= 64 + return 0 != (e.BigWords[mipLevel-6][bit/64] & (uint64(1) << (bit % 64))) + } + return 0 != (e.Words[mipLevel-1][bit/64] & (uint64(1) << (bit % 64))) +} + +var kHiMasks = [5]uint64{ + 0xAAAAAAAAAAAAAAAA, + 0xCCCCCCCCCCCCCCCC, + 0xF0F0F0F0F0F0F0F0, + 0xFF00FF00FF00FF00, + 0xFFFF0000FFFF0000, +} + +func (e *errorBitfield) prepare() { + // First mip level is for final layer of FFT: pairs of data + for i := 0; i < kWords; i++ { + w_i := e.Words[0][i] + hi2lo0 := w_i | ((w_i & kHiMasks[0]) >> 1) + lo2hi0 := (w_i & (kHiMasks[0] >> 1)) << 1 + w_i = hi2lo0 | lo2hi0 + e.Words[0][i] = w_i + + bits := 2 + for j := 1; j < kWordMips; j++ { + hi2lo_j := w_i | ((w_i & kHiMasks[j]) >> bits) + lo2hi_j := (w_i & (kHiMasks[j] >> bits)) << bits + w_i = hi2lo_j | lo2hi_j + e.Words[j][i] = w_i + bits <<= 1 + } + } + + for i := 0; i < kBigWords; i++ { + w_i := uint64(0) + bit := uint64(1) + src := e.Words[kWordMips-1][i*64 : i*64+64] + for _, w := range src { + w_i |= (w | (w >> 32) | (w << 32)) & bit + bit <<= 1 + } + e.BigWords[0][i] = w_i + + bits := 1 + for j := 1; j < kBigMips; j++ { + hi2lo_j := w_i | ((w_i & kHiMasks[j-1]) >> bits) + lo2hi_j := (w_i & (kHiMasks[j-1] >> bits)) << bits + w_i = hi2lo_j | lo2hi_j + e.BigWords[j][i] = w_i + bits <<= 1 + } + } + + w_i := uint64(0) + bit := uint64(1) + for _, w := range e.BigWords[kBigMips-1][:kBigWords] { + w_i |= (w | (w >> 32) | (w << 32)) & bit + bit <<= 1 + } + e.BiggestWords[0] = w_i + + bits := uint64(1) + for j := 1; j < kBiggestMips; j++ { + hi2lo_j := w_i | ((w_i & kHiMasks[j-1]) >> bits) + lo2hi_j := (w_i & (kHiMasks[j-1] >> bits)) << bits + w_i = hi2lo_j | lo2hi_j + e.BiggestWords[j] = w_i + bits <<= 1 + } +} + +func (e *errorBitfield) fftDIT(work [][]byte, mtrunc, m int, skewLUT []ffe, o *options) { + // Decimation in time: Unroll 2 layers at a time + mipLevel := bits.Len32(uint32(m)) - 1 + + dist4 := m + dist := m >> 2 + needed := e.isNeededFn(mipLevel) + for dist != 0 { + // For each set of dist*4 elements: + for r := 0; r < mtrunc; r += dist4 { + if !needed(r) { + continue + } + iEnd := r + dist + logM01 := skewLUT[iEnd-1] + logM02 := skewLUT[iEnd+dist-1] + logM23 := skewLUT[iEnd+dist*2-1] + + // For each set of dist elements: + for i := r; i < iEnd; i++ { + fftDIT4( + work[i:], + dist, + logM01, + logM23, + logM02, + o) + } + } + dist4 = dist + dist >>= 2 + mipLevel -= 2 + needed = e.isNeededFn(mipLevel) + } + + // If there is one layer left: + if dist4 == 2 { + for r := 0; r < mtrunc; r += 2 { + if !needed(r) { + continue + } + logM := skewLUT[r+1-1] + + if logM == modulus { + sliceXor(work[r], work[r+1], o) + } else { + fftDIT2(work[r], work[r+1], logM, o) + } + } + } +} 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..69c17f8 --- /dev/null +++ b/vendor/golang.org/x/crypto/internal/alias/alias.go @@ -0,0 +1,32 @@ +// 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 +// +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..4775b0a --- /dev/null +++ b/vendor/golang.org/x/crypto/internal/alias/alias_purego.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. + +//go:build purego +// +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/sys/cpu/cpu_loong64.go b/vendor/golang.org/x/sys/cpu/cpu_loong64.go new file mode 100644 index 0000000..0f57b05 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_loong64.go @@ -0,0 +1,13 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build loong64 +// +build loong64 + +package cpu + +const cacheLineSize = 64 + +func initOptions() { +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.go new file mode 100644 index 0000000..85b64d5 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.go @@ -0,0 +1,65 @@ +// 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 cpu + +import ( + "syscall" + "unsafe" +) + +// Minimal copy of functionality from x/sys/unix so the cpu package can call +// sysctl without depending on x/sys/unix. + +const ( + // From OpenBSD's sys/sysctl.h. + _CTL_MACHDEP = 7 + + // From OpenBSD's machine/cpu.h. + _CPU_ID_AA64ISAR0 = 2 + _CPU_ID_AA64ISAR1 = 3 +) + +// Implemented in the runtime package (runtime/sys_openbsd3.go) +func syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) + +//go:linkname syscall_syscall6 syscall.syscall6 + +func sysctl(mib []uint32, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + _, _, errno := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(unsafe.Pointer(&mib[0])), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if errno != 0 { + return errno + } + return nil +} + +var libc_sysctl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_sysctl sysctl "libc.so" + +func sysctlUint64(mib []uint32) (uint64, bool) { + var out uint64 + nout := unsafe.Sizeof(out) + if err := sysctl(mib, (*byte)(unsafe.Pointer(&out)), &nout, nil, 0); err != nil { + return 0, false + } + return out, true +} + +func doinit() { + setMinimalFeatures() + + // Get ID_AA64ISAR0 and ID_AA64ISAR1 from sysctl. + isar0, ok := sysctlUint64([]uint32{_CTL_MACHDEP, _CPU_ID_AA64ISAR0}) + if !ok { + return + } + isar1, ok := sysctlUint64([]uint32{_CTL_MACHDEP, _CPU_ID_AA64ISAR1}) + if !ok { + return + } + parseARM64SystemRegisters(isar0, isar1, 0) + + Initialized = true +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.s b/vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.s new file mode 100644 index 0000000..054ba05 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.s @@ -0,0 +1,11 @@ +// 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. + +#include "textflag.h" + +TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sysctl(SB) + +GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) diff --git a/vendor/golang.org/x/sys/cpu/cpu_other_riscv64.go b/vendor/golang.org/x/sys/cpu/cpu_other_riscv64.go new file mode 100644 index 0000000..dd10eb7 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_other_riscv64.go @@ -0,0 +1,12 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !linux && riscv64 +// +build !linux,riscv64 + +package cpu + +func archInit() { + Initialized = true +} diff --git a/vendor/golang.org/x/sys/unix/asm_bsd_riscv64.s b/vendor/golang.org/x/sys/unix/asm_bsd_riscv64.s new file mode 100644 index 0000000..d560019 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_bsd_riscv64.s @@ -0,0 +1,29 @@ +// 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 || freebsd || netbsd || openbsd) && gc +// +build darwin freebsd netbsd openbsd +// +build gc + +#include "textflag.h" + +// System call support for RISCV64 BSD + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_loong64.s b/vendor/golang.org/x/sys/unix/asm_linux_loong64.s new file mode 100644 index 0000000..5653572 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_loong64.s @@ -0,0 +1,54 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build linux && loong64 && gc +// +build linux +// +build loong64 +// +build gc + +#include "textflag.h" + + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 + JAL runtime·entersyscall(SB) + MOVV a1+8(FP), R4 + MOVV a2+16(FP), R5 + MOVV a3+24(FP), R6 + MOVV R0, R7 + MOVV R0, R8 + MOVV R0, R9 + MOVV trap+0(FP), R11 // syscall entry + SYSCALL + MOVV R4, r1+32(FP) + MOVV R0, r2+40(FP) // r2 is not used. Always set to 0 + JAL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 + MOVV a1+8(FP), R4 + MOVV a2+16(FP), R5 + MOVV a3+24(FP), R6 + MOVV R0, R7 + MOVV R0, R8 + MOVV R0, R9 + MOVV trap+0(FP), R11 // syscall entry + SYSCALL + MOVV R4, r1+32(FP) + MOVV R0, r2+40(FP) // r2 is not used. Always set to 0 + RET diff --git a/vendor/golang.org/x/sys/unix/mkall.sh b/vendor/golang.org/x/sys/unix/mkall.sh index 3b2335d..1b2b424 100644 --- a/vendor/golang.org/x/sys/unix/mkall.sh +++ b/vendor/golang.org/x/sys/unix/mkall.sh @@ -214,11 +214,6 @@ esac if [ "$GOOSARCH" == "aix_ppc64" ]; then # aix/ppc64 script generates files instead of writing to stdin. echo "$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in && gofmt -w zsyscall_$GOOSARCH.go && gofmt -w zsyscall_"$GOOSARCH"_gccgo.go && gofmt -w zsyscall_"$GOOSARCH"_gc.go " ; - elif [ "$GOOS" == "darwin" ]; then - # 1.12 and later, syscalls via libSystem - echo "$mksyscall -tags $GOOS,$GOARCH,go1.12 $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go"; - # 1.13 and later, syscalls via libSystem (including syscallPtr) - echo "$mksyscall -tags $GOOS,$GOARCH,go1.13 syscall_darwin.1_13.go |gofmt >zsyscall_$GOOSARCH.1_13.go"; elif [ "$GOOS" == "illumos" ]; then # illumos code generation requires a --illumos switch echo "$mksyscall -illumos -tags illumos,$GOARCH syscall_illumos.go |gofmt > zsyscall_illumos_$GOARCH.go"; diff --git a/vendor/golang.org/x/sys/unix/syscall.go b/vendor/golang.org/x/sys/unix/syscall.go index 9916e5e..63e8c83 100644 --- a/vendor/golang.org/x/sys/unix/syscall.go +++ b/vendor/golang.org/x/sys/unix/syscall.go @@ -80,8 +80,7 @@ func BytePtrToString(p *byte) string { ptr = unsafe.Pointer(uintptr(ptr) + 1) } - s := unsafe.Slice((*byte)(unsafe.Pointer(p)), n) - return string(s) + return string(unsafe.Slice(p, n)) } // Single-word zero for use when we need a valid pointer to 0 bytes. diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.1_12.go b/vendor/golang.org/x/sys/unix/syscall_darwin.1_12.go deleted file mode 100644 index b009860..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.1_12.go +++ /dev/null @@ -1,32 +0,0 @@ -// 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 darwin && go1.12 && !go1.13 -// +build darwin,go1.12,!go1.13 - -package unix - -import ( - "unsafe" -) - -const _SYS_GETDIRENTRIES64 = 344 - -func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { - // To implement this using libSystem we'd need syscall_syscallPtr for - // fdopendir. However, syscallPtr was only added in Go 1.13, so we fall - // back to raw syscalls for this func on Go 1.12. - var p unsafe.Pointer - if len(buf) > 0 { - p = unsafe.Pointer(&buf[0]) - } else { - p = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(_SYS_GETDIRENTRIES64, uintptr(fd), uintptr(p), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) - n = int(r0) - if e1 != 0 { - return n, errnoErr(e1) - } - return n, nil -} diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go b/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go deleted file mode 100644 index 1259f6d..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go +++ /dev/null @@ -1,100 +0,0 @@ -// 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 darwin && go1.13 -// +build darwin,go1.13 - -package unix - -import "unsafe" - -//sys closedir(dir uintptr) (err error) -//sys readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) - -func fdopendir(fd int) (dir uintptr, err error) { - r0, _, e1 := syscall_syscallPtr(libc_fdopendir_trampoline_addr, uintptr(fd), 0, 0) - dir = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fdopendir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fdopendir fdopendir "/usr/lib/libSystem.B.dylib" - -func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { - // Simulate Getdirentries using fdopendir/readdir_r/closedir. - // We store the number of entries to skip in the seek - // offset of fd. See issue #31368. - // It's not the full required semantics, but should handle the case - // of calling Getdirentries or ReadDirent repeatedly. - // It won't handle assigning the results of lseek to *basep, or handle - // the directory being edited underfoot. - skip, err := Seek(fd, 0, 1 /* SEEK_CUR */) - if err != nil { - return 0, err - } - - // We need to duplicate the incoming file descriptor - // because the caller expects to retain control of it, but - // fdopendir expects to take control of its argument. - // Just Dup'ing the file descriptor is not enough, as the - // result shares underlying state. Use Openat to make a really - // new file descriptor referring to the same directory. - fd2, err := Openat(fd, ".", O_RDONLY, 0) - if err != nil { - return 0, err - } - d, err := fdopendir(fd2) - if err != nil { - Close(fd2) - return 0, err - } - defer closedir(d) - - var cnt int64 - for { - var entry Dirent - var entryp *Dirent - e := readdir_r(d, &entry, &entryp) - if e != 0 { - return n, errnoErr(e) - } - if entryp == nil { - break - } - if skip > 0 { - skip-- - cnt++ - continue - } - - reclen := int(entry.Reclen) - if reclen > len(buf) { - // Not enough room. Return for now. - // The counter will let us know where we should start up again. - // Note: this strategy for suspending in the middle and - // restarting is O(n^2) in the length of the directory. Oh well. - break - } - - // Copy entry into return buffer. - s := unsafe.Slice((*byte)(unsafe.Pointer(&entry)), reclen) - copy(buf, s) - - buf = buf[reclen:] - n += reclen - cnt++ - } - // Set the seek offset of the input fd to record - // how many files we've already returned. - _, err = Seek(fd, cnt, 0 /* SEEK_SET */) - if err != nil { - return n, err - } - - return n, nil -} diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go index 4f87f16..1f63382 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -19,6 +19,96 @@ import ( "unsafe" ) +//sys closedir(dir uintptr) (err error) +//sys readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) + +func fdopendir(fd int) (dir uintptr, err error) { + r0, _, e1 := syscall_syscallPtr(libc_fdopendir_trampoline_addr, uintptr(fd), 0, 0) + dir = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fdopendir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fdopendir fdopendir "/usr/lib/libSystem.B.dylib" + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + // Simulate Getdirentries using fdopendir/readdir_r/closedir. + // We store the number of entries to skip in the seek + // offset of fd. See issue #31368. + // It's not the full required semantics, but should handle the case + // of calling Getdirentries or ReadDirent repeatedly. + // It won't handle assigning the results of lseek to *basep, or handle + // the directory being edited underfoot. + skip, err := Seek(fd, 0, 1 /* SEEK_CUR */) + if err != nil { + return 0, err + } + + // We need to duplicate the incoming file descriptor + // because the caller expects to retain control of it, but + // fdopendir expects to take control of its argument. + // Just Dup'ing the file descriptor is not enough, as the + // result shares underlying state. Use Openat to make a really + // new file descriptor referring to the same directory. + fd2, err := Openat(fd, ".", O_RDONLY, 0) + if err != nil { + return 0, err + } + d, err := fdopendir(fd2) + if err != nil { + Close(fd2) + return 0, err + } + defer closedir(d) + + var cnt int64 + for { + var entry Dirent + var entryp *Dirent + e := readdir_r(d, &entry, &entryp) + if e != 0 { + return n, errnoErr(e) + } + if entryp == nil { + break + } + if skip > 0 { + skip-- + cnt++ + continue + } + + reclen := int(entry.Reclen) + if reclen > len(buf) { + // Not enough room. Return for now. + // The counter will let us know where we should start up again. + // Note: this strategy for suspending in the middle and + // restarting is O(n^2) in the length of the directory. Oh well. + break + } + + // Copy entry into return buffer. + s := unsafe.Slice((*byte)(unsafe.Pointer(&entry)), reclen) + copy(buf, s) + + buf = buf[reclen:] + n += reclen + cnt++ + } + // Set the seek offset of the input fd to record + // how many files we've already returned. + _, err = Seek(fd, cnt, 0 /* SEEK_SET */) + if err != nil { + return n, err + } + + return n, nil +} + // SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. type SockaddrDatalink struct { Len uint8 diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go new file mode 100644 index 0000000..cbe1222 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go @@ -0,0 +1,63 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build riscv64 && freebsd +// +build riscv64,freebsd + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = int32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var writtenOut uint64 = 0 + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0) + + written = int(writtenOut) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) { + ioDesc := PtraceIoDesc{Op: int32(req), Offs: uintptr(unsafe.Pointer(addr)), Addr: uintptr(unsafe.Pointer(&out[0])), Len: uint64(countin)} + err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0) + return int(ioDesc.Len), err +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go new file mode 100644 index 0000000..59dab51 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go @@ -0,0 +1,222 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build loong64 && linux +// +build loong64,linux + +package unix + +import "unsafe" + +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getuid() (uid int) +//sys Listen(s int, n int) (err error) +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + var ts *Timespec + if timeout != nil { + ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} + } + return Pselect(nfd, r, w, e, ts, nil) +} + +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys setfsgid(gid int) (prev int, err error) +//sys setfsuid(uid int) (prev int, err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) + +func timespecFromStatxTimestamp(x StatxTimestamp) Timespec { + return Timespec{ + Sec: x.Sec, + Nsec: int64(x.Nsec), + } +} + +func Fstatat(fd int, path string, stat *Stat_t, flags int) error { + var r Statx_t + // Do it the glibc way, add AT_NO_AUTOMOUNT. + if err := Statx(fd, path, AT_NO_AUTOMOUNT|flags, STATX_BASIC_STATS, &r); err != nil { + return err + } + + stat.Dev = Mkdev(r.Dev_major, r.Dev_minor) + stat.Ino = r.Ino + stat.Mode = uint32(r.Mode) + stat.Nlink = r.Nlink + stat.Uid = r.Uid + stat.Gid = r.Gid + stat.Rdev = Mkdev(r.Rdev_major, r.Rdev_minor) + // hope we don't get to process files so large to overflow these size + // fields... + stat.Size = int64(r.Size) + stat.Blksize = int32(r.Blksize) + stat.Blocks = int64(r.Blocks) + stat.Atim = timespecFromStatxTimestamp(r.Atime) + stat.Mtim = timespecFromStatxTimestamp(r.Mtime) + stat.Ctim = timespecFromStatxTimestamp(r.Ctime) + + return nil +} + +func Fstat(fd int, stat *Stat_t) (err error) { + return Fstatat(fd, "", stat, AT_EMPTY_PATH) +} + +func Stat(path string, stat *Stat_t) (err error) { + return Fstatat(AT_FDCWD, path, stat, 0) +} + +func Lchown(path string, uid int, gid int) (err error) { + return Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW) +} + +func Lstat(path string, stat *Stat_t) (err error) { + return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW) +} + +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + return ENOSYS +} + +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +//sysnb Gettimeofday(tv *Timeval) (err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + err = Prlimit(0, resource, nil, rlim) + return +} + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + err = Prlimit(0, resource, rlim, nil) + return +} + +func futimesat(dirfd int, path string, tv *[2]Timeval) (err error) { + if tv == nil { + return utimensat(dirfd, path, nil, 0) + } + + ts := []Timespec{ + NsecToTimespec(TimevalToNsec(tv[0])), + NsecToTimespec(TimevalToNsec(tv[1])), + } + return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) +} + +func Time(t *Time_t) (Time_t, error) { + var tv Timeval + err := Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +func Utime(path string, buf *Utimbuf) error { + tv := []Timeval{ + {Sec: buf.Actime}, + {Sec: buf.Modtime}, + } + return Utimes(path, tv) +} + +func utimes(path string, tv *[2]Timeval) (err error) { + if tv == nil { + return utimensat(AT_FDCWD, path, nil, 0) + } + + ts := []Timespec{ + NsecToTimespec(TimevalToNsec(tv[0])), + NsecToTimespec(TimevalToNsec(tv[1])), + } + return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) +} + +func (r *PtraceRegs) PC() uint64 { return r.Era } + +func (r *PtraceRegs) SetPC(era uint64) { r.Era = era } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint64(length) +} + +func Pause() error { + _, err := ppoll(nil, 0, nil, nil) + return err +} + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + return Renameat2(olddirfd, oldpath, newdirfd, newpath, 0) +} + +//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) + +func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { + cmdlineLen := len(cmdline) + if cmdlineLen > 0 { + // Account for the additional NULL byte added by + // BytePtrFromString in kexecFileLoad. The kexec_file_load + // syscall expects a NULL-terminated string. + cmdlineLen++ + } + return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_libc.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_libc.go new file mode 100644 index 0000000..5930a89 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_libc.go @@ -0,0 +1,27 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build (openbsd && 386) || (openbsd && amd64) || (openbsd && arm) || (openbsd && arm64) +// +build openbsd,386 openbsd,amd64 openbsd,arm openbsd,arm64 + +package unix + +import _ "unsafe" + +// Implemented in the runtime package (runtime/sys_openbsd3.go) +func syscall_syscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) +func syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) +func syscall_syscall10(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 uintptr) (r1, r2 uintptr, err Errno) +func syscall_rawSyscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) +func syscall_rawSyscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) + +//go:linkname syscall_syscall syscall.syscall +//go:linkname syscall_syscall6 syscall.syscall6 +//go:linkname syscall_syscall10 syscall.syscall10 +//go:linkname syscall_rawSyscall syscall.rawSyscall +//go:linkname syscall_rawSyscall6 syscall.rawSyscall6 + +func syscall_syscall9(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) { + return syscall_syscall10(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, 0) +} diff --git a/vendor/golang.org/x/sys/unix/xattr_bsd.go b/vendor/golang.org/x/sys/unix/xattr_bsd.go index 25df1e3..663b377 100644 --- a/vendor/golang.org/x/sys/unix/xattr_bsd.go +++ b/vendor/golang.org/x/sys/unix/xattr_bsd.go @@ -160,13 +160,12 @@ func Lremovexattr(link string, attr string) (err error) { } func Listxattr(file string, dest []byte) (sz int, err error) { - d := initxattrdest(dest, 0) destsiz := len(dest) // FreeBSD won't allow you to list xattrs from multiple namespaces - s := 0 + s, pos := 0, 0 for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { - stmp, e := ExtattrListFile(file, nsid, uintptr(d), destsiz) + stmp, e := ListxattrNS(file, nsid, dest[pos:]) /* Errors accessing system attrs are ignored so that * we can implement the Linux-like behavior of omitting errors that @@ -175,66 +174,102 @@ func Listxattr(file string, dest []byte) (sz int, err error) { * Linux will still error if we ask for user attributes on a file that * we don't have read permissions on, so don't ignore those errors */ - if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { - continue - } else if e != nil { + if e != nil { + if e == EPERM && nsid != EXTATTR_NAMESPACE_USER { + continue + } return s, e } s += stmp - destsiz -= s - if destsiz < 0 { - destsiz = 0 + pos = s + if pos > destsiz { + pos = destsiz } - d = initxattrdest(dest, s) + } + + return s, nil +} + +func ListxattrNS(file string, nsid int, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsiz := len(dest) + + s, e := ExtattrListFile(file, nsid, uintptr(d), destsiz) + if e != nil { + return 0, err } return s, nil } func Flistxattr(fd int, dest []byte) (sz int, err error) { - d := initxattrdest(dest, 0) destsiz := len(dest) - s := 0 + s, pos := 0, 0 for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { - stmp, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz) - if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { - continue - } else if e != nil { + stmp, e := FlistxattrNS(fd, nsid, dest[pos:]) + + if e != nil { + if e == EPERM && nsid != EXTATTR_NAMESPACE_USER { + continue + } return s, e } s += stmp - destsiz -= s - if destsiz < 0 { - destsiz = 0 + pos = s + if pos > destsiz { + pos = destsiz } - d = initxattrdest(dest, s) + } + + return s, nil +} + +func FlistxattrNS(fd int, nsid int, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsiz := len(dest) + + s, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz) + if e != nil { + return 0, err } return s, nil } func Llistxattr(link string, dest []byte) (sz int, err error) { - d := initxattrdest(dest, 0) destsiz := len(dest) - s := 0 + s, pos := 0, 0 for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { - stmp, e := ExtattrListLink(link, nsid, uintptr(d), destsiz) - if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { - continue - } else if e != nil { + stmp, e := LlistxattrNS(link, nsid, dest[pos:]) + + if e != nil { + if e == EPERM && nsid != EXTATTR_NAMESPACE_USER { + continue + } return s, e } s += stmp - destsiz -= s - if destsiz < 0 { - destsiz = 0 + pos = s + if pos > destsiz { + pos = destsiz } - d = initxattrdest(dest, s) + } + + return s, nil +} + +func LlistxattrNS(link string, nsid int, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsiz := len(dest) + + s, e := ExtattrListLink(link, nsid, uintptr(d), destsiz) + if e != nil { + return 0, err } return s, nil diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_riscv64.go new file mode 100644 index 0000000..341b4d9 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_riscv64.go @@ -0,0 +1,2148 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build riscv64 && freebsd +// +build riscv64,freebsd + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x23 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x24 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_HYPERV = 0x2b + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_INET6_SDP = 0x2a + AF_INET_SDP = 0x28 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x2b + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SCLUSTER = 0x22 + AF_SIP = 0x18 + AF_SLOW = 0x21 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VENDOR00 = 0x27 + AF_VENDOR01 = 0x29 + AF_VENDOR03 = 0x2d + AF_VENDOR04 = 0x2f + AF_VENDOR05 = 0x31 + AF_VENDOR06 = 0x33 + AF_VENDOR07 = 0x35 + AF_VENDOR08 = 0x37 + AF_VENDOR09 = 0x39 + AF_VENDOR10 = 0x3b + AF_VENDOR11 = 0x3d + AF_VENDOR12 = 0x3f + AF_VENDOR13 = 0x41 + AF_VENDOR14 = 0x43 + AF_VENDOR15 = 0x45 + AF_VENDOR16 = 0x47 + AF_VENDOR17 = 0x49 + AF_VENDOR18 = 0x4b + AF_VENDOR19 = 0x4d + AF_VENDOR20 = 0x4f + AF_VENDOR21 = 0x51 + AF_VENDOR22 = 0x53 + AF_VENDOR23 = 0x55 + AF_VENDOR24 = 0x57 + AF_VENDOR25 = 0x59 + AF_VENDOR26 = 0x5b + AF_VENDOR27 = 0x5d + AF_VENDOR28 = 0x5f + AF_VENDOR29 = 0x61 + AF_VENDOR30 = 0x63 + AF_VENDOR31 = 0x65 + AF_VENDOR32 = 0x67 + AF_VENDOR33 = 0x69 + AF_VENDOR34 = 0x6b + AF_VENDOR35 = 0x6d + AF_VENDOR36 = 0x6f + AF_VENDOR37 = 0x71 + AF_VENDOR38 = 0x73 + AF_VENDOR39 = 0x75 + AF_VENDOR40 = 0x77 + AF_VENDOR41 = 0x79 + AF_VENDOR42 = 0x7b + AF_VENDOR43 = 0x7d + AF_VENDOR44 = 0x7f + AF_VENDOR45 = 0x81 + AF_VENDOR46 = 0x83 + AF_VENDOR47 = 0x85 + ALTWERASE = 0x200 + B0 = 0x0 + B1000000 = 0xf4240 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1500000 = 0x16e360 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B2000000 = 0x1e8480 + B230400 = 0x38400 + B2400 = 0x960 + B2500000 = 0x2625a0 + B28800 = 0x7080 + B300 = 0x12c + B3000000 = 0x2dc6c0 + B3500000 = 0x3567e0 + B38400 = 0x9600 + B4000000 = 0x3d0900 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B500000 = 0x7a120 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427c + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRECTION = 0x40044276 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0104279 + BIOCGETBUFMODE = 0x4004427d + BIOCGETIF = 0x4020426b + BIOCGETZMAX = 0x4008427f + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCGTSTAMP = 0x40044283 + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCROTZBUF = 0x40184280 + BIOCSBLEN = 0xc0044266 + BIOCSDIRECTION = 0x80044277 + BIOCSDLT = 0x80044278 + BIOCSETBUFMODE = 0x8004427e + BIOCSETF = 0x80104267 + BIOCSETFNR = 0x80104282 + BIOCSETIF = 0x8020426c + BIOCSETVLANPCP = 0x80044285 + BIOCSETWF = 0x8010427b + BIOCSETZBUF = 0x80184281 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCSTSTAMP = 0x80044284 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x8 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_BUFMODE_BUFFER = 0x1 + BPF_BUFMODE_ZBUF = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_T_BINTIME = 0x2 + BPF_T_BINTIME_FAST = 0x102 + BPF_T_BINTIME_MONOTONIC = 0x202 + BPF_T_BINTIME_MONOTONIC_FAST = 0x302 + BPF_T_FAST = 0x100 + BPF_T_FLAG_MASK = 0x300 + BPF_T_FORMAT_MASK = 0x3 + BPF_T_MICROTIME = 0x0 + BPF_T_MICROTIME_FAST = 0x100 + BPF_T_MICROTIME_MONOTONIC = 0x200 + BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 + BPF_T_MONOTONIC = 0x200 + BPF_T_MONOTONIC_FAST = 0x300 + BPF_T_NANOTIME = 0x1 + BPF_T_NANOTIME_FAST = 0x101 + BPF_T_NANOTIME_MONOTONIC = 0x201 + BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 + BPF_T_NONE = 0x3 + BPF_T_NORMAL = 0x0 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + CAP_ACCEPT = 0x200000020000000 + CAP_ACL_CHECK = 0x400000000010000 + CAP_ACL_DELETE = 0x400000000020000 + CAP_ACL_GET = 0x400000000040000 + CAP_ACL_SET = 0x400000000080000 + CAP_ALL0 = 0x20007ffffffffff + CAP_ALL1 = 0x4000000001fffff + CAP_BIND = 0x200000040000000 + CAP_BINDAT = 0x200008000000400 + CAP_CHFLAGSAT = 0x200000000001400 + CAP_CONNECT = 0x200000080000000 + CAP_CONNECTAT = 0x200010000000400 + CAP_CREATE = 0x200000000000040 + CAP_EVENT = 0x400000000000020 + CAP_EXTATTR_DELETE = 0x400000000001000 + CAP_EXTATTR_GET = 0x400000000002000 + CAP_EXTATTR_LIST = 0x400000000004000 + CAP_EXTATTR_SET = 0x400000000008000 + CAP_FCHDIR = 0x200000000000800 + CAP_FCHFLAGS = 0x200000000001000 + CAP_FCHMOD = 0x200000000002000 + CAP_FCHMODAT = 0x200000000002400 + CAP_FCHOWN = 0x200000000004000 + CAP_FCHOWNAT = 0x200000000004400 + CAP_FCNTL = 0x200000000008000 + CAP_FCNTL_ALL = 0x78 + CAP_FCNTL_GETFL = 0x8 + CAP_FCNTL_GETOWN = 0x20 + CAP_FCNTL_SETFL = 0x10 + CAP_FCNTL_SETOWN = 0x40 + CAP_FEXECVE = 0x200000000000080 + CAP_FLOCK = 0x200000000010000 + CAP_FPATHCONF = 0x200000000020000 + CAP_FSCK = 0x200000000040000 + CAP_FSTAT = 0x200000000080000 + CAP_FSTATAT = 0x200000000080400 + CAP_FSTATFS = 0x200000000100000 + CAP_FSYNC = 0x200000000000100 + CAP_FTRUNCATE = 0x200000000000200 + CAP_FUTIMES = 0x200000000200000 + CAP_FUTIMESAT = 0x200000000200400 + CAP_GETPEERNAME = 0x200000100000000 + CAP_GETSOCKNAME = 0x200000200000000 + CAP_GETSOCKOPT = 0x200000400000000 + CAP_IOCTL = 0x400000000000080 + CAP_IOCTLS_ALL = 0x7fffffffffffffff + CAP_KQUEUE = 0x400000000100040 + CAP_KQUEUE_CHANGE = 0x400000000100000 + CAP_KQUEUE_EVENT = 0x400000000000040 + CAP_LINKAT_SOURCE = 0x200020000000400 + CAP_LINKAT_TARGET = 0x200000000400400 + CAP_LISTEN = 0x200000800000000 + CAP_LOOKUP = 0x200000000000400 + CAP_MAC_GET = 0x400000000000001 + CAP_MAC_SET = 0x400000000000002 + CAP_MKDIRAT = 0x200000000800400 + CAP_MKFIFOAT = 0x200000001000400 + CAP_MKNODAT = 0x200000002000400 + CAP_MMAP = 0x200000000000010 + CAP_MMAP_R = 0x20000000000001d + CAP_MMAP_RW = 0x20000000000001f + CAP_MMAP_RWX = 0x20000000000003f + CAP_MMAP_RX = 0x20000000000003d + CAP_MMAP_W = 0x20000000000001e + CAP_MMAP_WX = 0x20000000000003e + CAP_MMAP_X = 0x20000000000003c + CAP_PDGETPID = 0x400000000000200 + CAP_PDKILL = 0x400000000000800 + CAP_PDWAIT = 0x400000000000400 + CAP_PEELOFF = 0x200001000000000 + CAP_POLL_EVENT = 0x400000000000020 + CAP_PREAD = 0x20000000000000d + CAP_PWRITE = 0x20000000000000e + CAP_READ = 0x200000000000001 + CAP_RECV = 0x200000000000001 + CAP_RENAMEAT_SOURCE = 0x200000004000400 + CAP_RENAMEAT_TARGET = 0x200040000000400 + CAP_RIGHTS_VERSION = 0x0 + CAP_RIGHTS_VERSION_00 = 0x0 + CAP_SEEK = 0x20000000000000c + CAP_SEEK_TELL = 0x200000000000004 + CAP_SEM_GETVALUE = 0x400000000000004 + CAP_SEM_POST = 0x400000000000008 + CAP_SEM_WAIT = 0x400000000000010 + CAP_SEND = 0x200000000000002 + CAP_SETSOCKOPT = 0x200002000000000 + CAP_SHUTDOWN = 0x200004000000000 + CAP_SOCK_CLIENT = 0x200007780000003 + CAP_SOCK_SERVER = 0x200007f60000003 + CAP_SYMLINKAT = 0x200000008000400 + CAP_TTYHOOK = 0x400000000000100 + CAP_UNLINKAT = 0x200000010000400 + CAP_UNUSED0_44 = 0x200080000000000 + CAP_UNUSED0_57 = 0x300000000000000 + CAP_UNUSED1_22 = 0x400000000200000 + CAP_UNUSED1_57 = 0x500000000000000 + CAP_WRITE = 0x200000000000002 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_BOOTTIME = 0x5 + CLOCK_MONOTONIC = 0x4 + CLOCK_MONOTONIC_COARSE = 0xc + CLOCK_MONOTONIC_FAST = 0xc + CLOCK_MONOTONIC_PRECISE = 0xb + CLOCK_PROCESS_CPUTIME_ID = 0xf + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_COARSE = 0xa + CLOCK_REALTIME_FAST = 0xa + CLOCK_REALTIME_PRECISE = 0x9 + CLOCK_SECOND = 0xd + CLOCK_THREAD_CPUTIME_ID = 0xe + CLOCK_UPTIME = 0x5 + CLOCK_UPTIME_FAST = 0x8 + CLOCK_UPTIME_PRECISE = 0x7 + CLOCK_VIRTUAL = 0x1 + CPUSTATES = 0x5 + CP_IDLE = 0x4 + CP_INTR = 0x3 + CP_NICE = 0x1 + CP_SYS = 0x2 + CP_USER = 0x0 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0x18 + CTL_NET = 0x4 + DIOCGATTR = 0xc148648e + DIOCGDELETE = 0x80106488 + DIOCGFLUSH = 0x20006487 + DIOCGFWHEADS = 0x40046483 + DIOCGFWSECTORS = 0x40046482 + DIOCGIDENT = 0x41006489 + DIOCGKERNELDUMP = 0xc0986492 + DIOCGMEDIASIZE = 0x40086481 + DIOCGPHYSPATH = 0x4400648d + DIOCGPROVIDERNAME = 0x4400648a + DIOCGSECTORSIZE = 0x40046480 + DIOCGSTRIPEOFFSET = 0x4008648c + DIOCGSTRIPESIZE = 0x4008648b + DIOCSKERNELDUMP = 0x80986491 + DIOCSKERNELDUMP_FREEBSD11 = 0x80046485 + DIOCSKERNELDUMP_FREEBSD12 = 0x80506490 + DIOCZONECMD = 0xc080648f + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_BREDR_BB = 0xff + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_BLUETOOTH_LE_LL = 0xfb + DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 + DLT_BLUETOOTH_LINUX_MONITOR = 0xfe + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_CLASS_NETBSD_RAWAF = 0x2240000 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DISPLAYPORT_AUX = 0x113 + DLT_DOCSIS = 0x8f + DLT_DOCSIS31_XRA31 = 0x111 + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_EPON = 0x103 + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_ETHERNET_MPACKET = 0x112 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_INFINIBAND = 0xf7 + DLT_IPFILTER = 0x74 + DLT_IPMB_KONTRON = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPMI_HPM_2 = 0x104 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_ISO_14443 = 0x108 + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LINUX_SLL2 = 0x114 + DLT_LOOP = 0x6c + DLT_LORATAP = 0x10e + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0x114 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NETLINK = 0xfd + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NORDIC_BLE = 0x110 + DLT_NULL = 0x0 + DLT_OPENFLOW = 0x10b + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x79 + DLT_PKTAP = 0x102 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PROFIBUS_DL = 0x101 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RDS = 0x109 + DLT_REDBACK_SMARTEDGE = 0x20 + DLT_RIO = 0x7c + DLT_RTAC_SERIAL = 0xfa + DLT_SCCP = 0x8e + DLT_SCTP = 0xf8 + DLT_SDLC = 0x10c + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TI_LLN_SNIFFER = 0x10d + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USBPCAP = 0xf9 + DLT_USB_DARWIN = 0x10a + DLT_USB_FREEBSD = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_VSOCK = 0x10f + DLT_WATTSTOPPER_DLM = 0x107 + DLT_WIHART = 0xdf + DLT_WIRESHARK_UPPER_PDU = 0xfc + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DLT_ZWAVE_R1_R2 = 0x105 + DLT_ZWAVE_R3 = 0x106 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EHE_DEAD_PRIORITY = -0x1 + EVFILT_AIO = -0x3 + EVFILT_EMPTY = -0xd + EVFILT_FS = -0x9 + EVFILT_LIO = -0xa + EVFILT_PROC = -0x5 + EVFILT_PROCDESC = -0x8 + EVFILT_READ = -0x1 + EVFILT_SENDFILE = -0xc + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xd + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xb + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EVNAMEMAP_NAME_SIZE = 0x40 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DROP = 0x1000 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_FLAG2 = 0x4000 + EV_FORCEONESHOT = 0x100 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_MAXNAMELEN = 0xff + EXTATTR_NAMESPACE_EMPTY = 0x0 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_NONE = -0xc8 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_ADD_SEALS = 0x13 + F_CANCEL = 0x5 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xb + F_GETOWN = 0x5 + F_GET_SEALS = 0x14 + F_ISUNIONSTACK = 0x15 + F_KINFO = 0x16 + F_OGETLK = 0x7 + F_OK = 0x0 + F_OSETLK = 0x8 + F_OSETLKW = 0x9 + F_RDAHEAD = 0x10 + F_RDLCK = 0x1 + F_READAHEAD = 0xf + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0xc + F_SETLKW = 0xd + F_SETLK_REMOTE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_UNLCKSYS = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFCAP_WOL_MAGIC = 0x2000 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x218f72 + IFF_CANTCONFIG = 0x10000 + IFF_DEBUG = 0x4 + IFF_DRV_OACTIVE = 0x400 + IFF_DRV_RUNNING = 0x40 + IFF_DYING = 0x200000 + IFF_KNOWSEPOCH = 0x20 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOGROUP = 0x800000 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RENAMING = 0x400000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_IEEE1394 = 0x90 + IFT_INFINIBAND = 0xc7 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_PPP = 0x17 + IFT_PROPVIRTUAL = 0x35 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_NETMASK_DEFAULT = 0xffffff00 + IN_RFC3021_MASK = 0xfffffffe + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DCCP = 0x21 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HIP = 0x8b + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MEAS = 0x13 + IPPROTO_MH = 0x87 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OLD_DIVERT = 0xfe + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_RESERVED_253 = 0xfd + IPPROTO_RESERVED_254 = 0xfe + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEND = 0x103 + IPPROTO_SHIM6 = 0x8c + IPPROTO_SKIP = 0x39 + IPPROTO_SPACER = 0x7fff + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDANY = 0x40 + IPV6_BINDMULTI = 0x41 + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FLOWID = 0x43 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_LEN = 0x14 + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOWTYPE = 0x44 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_ORIGDSTADDR = 0x48 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVFLOWID = 0x46 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVORIGDSTADDR = 0x48 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRSSBUCKETID = 0x47 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RSSBUCKETID = 0x45 + IPV6_RSS_LISTEN_BUCKET = 0x42 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IPV6_VLAN_PCP = 0x4b + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BINDANY = 0x18 + IP_BINDMULTI = 0x19 + IP_BLOCK_SOURCE = 0x48 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x43 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET3 = 0x31 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FLOWID = 0x5a + IP_FLOWTYPE = 0x5b + IP_FW3 = 0x30 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_NAT_CFG = 0x38 + IP_FW_NAT_DEL = 0x39 + IP_FW_NAT_GET_CONFIG = 0x3a + IP_FW_NAT_GET_LOG = 0x3b + IP_FW_RESETLOG = 0x37 + IP_FW_TABLE_ADD = 0x28 + IP_FW_TABLE_DEL = 0x29 + IP_FW_TABLE_FLUSH = 0x2a + IP_FW_TABLE_GETSIZE = 0x2b + IP_FW_TABLE_LIST = 0x2c + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_ONESBCAST = 0x17 + IP_OPTIONS = 0x1 + IP_ORIGDSTADDR = 0x1b + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVFLOWID = 0x5d + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVORIGDSTADDR = 0x1b + IP_RECVRETOPTS = 0x6 + IP_RECVRSSBUCKETID = 0x5e + IP_RECVTOS = 0x44 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSSBUCKETID = 0x5c + IP_RSS_LISTEN_BUCKET = 0x1a + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + IP_VLAN_PCP = 0x4b + ISIG = 0x80 + ISTRIP = 0x20 + ITIMER_PROF = 0x2 + ITIMER_REAL = 0x0 + ITIMER_VIRTUAL = 0x1 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCAL_CONNWAIT = 0x4 + LOCAL_CREDS = 0x2 + LOCAL_CREDS_PERSISTENT = 0x3 + LOCAL_PEERCRED = 0x1 + LOCAL_VENDOR = 0x80000000 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_PROTECT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_32BIT = 0x80000 + MAP_ALIGNED_SUPER = 0x1000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_EXCL = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GUARD = 0x2000 + MAP_HASSEMAPHORE = 0x200 + MAP_NOCORE = 0x20000 + MAP_NOSYNC = 0x800 + MAP_PREFAULT_READ = 0x40000 + MAP_PRIVATE = 0x2 + MAP_RESERVED0020 = 0x20 + MAP_RESERVED0040 = 0x40 + MAP_RESERVED0080 = 0x80 + MAP_RESERVED0100 = 0x100 + MAP_SHARED = 0x1 + MAP_STACK = 0x400 + MCAST_BLOCK_SOURCE = 0x54 + MCAST_EXCLUDE = 0x2 + MCAST_INCLUDE = 0x1 + MCAST_JOIN_GROUP = 0x50 + MCAST_JOIN_SOURCE_GROUP = 0x52 + MCAST_LEAVE_GROUP = 0x51 + MCAST_LEAVE_SOURCE_GROUP = 0x53 + MCAST_UNBLOCK_SOURCE = 0x55 + MCAST_UNDEFINED = 0x0 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MFD_ALLOW_SEALING = 0x2 + MFD_CLOEXEC = 0x1 + MFD_HUGETLB = 0x4 + MFD_HUGE_16GB = -0x78000000 + MFD_HUGE_16MB = 0x60000000 + MFD_HUGE_1GB = 0x78000000 + MFD_HUGE_1MB = 0x50000000 + MFD_HUGE_256MB = 0x70000000 + MFD_HUGE_2GB = 0x7c000000 + MFD_HUGE_2MB = 0x54000000 + MFD_HUGE_32MB = 0x64000000 + MFD_HUGE_512KB = 0x4c000000 + MFD_HUGE_512MB = 0x74000000 + MFD_HUGE_64KB = 0x40000000 + MFD_HUGE_8MB = 0x5c000000 + MFD_HUGE_MASK = 0xfc000000 + MFD_HUGE_SHIFT = 0x1a + MNT_ACLS = 0x8000000 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x200000000 + MNT_BYFSID = 0x8000000 + MNT_CMDFLAGS = 0x300d0f0000 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_EMPTYDIR = 0x2000000000 + MNT_EXKERB = 0x800 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXPUBLIC = 0x20000000 + MNT_EXRDONLY = 0x80 + MNT_EXTLS = 0x4000000000 + MNT_EXTLSCERT = 0x8000000000 + MNT_EXTLSCERTUSER = 0x10000000000 + MNT_FORCE = 0x80000 + MNT_GJOURNAL = 0x2000000 + MNT_IGNORE = 0x800000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NFS4ACLS = 0x10 + MNT_NOATIME = 0x10000000 + MNT_NOCLUSTERR = 0x40000000 + MNT_NOCLUSTERW = 0x80000000 + MNT_NOCOVER = 0x1000000000 + MNT_NOEXEC = 0x4 + MNT_NONBUSY = 0x4000000 + MNT_NOSUID = 0x8 + MNT_NOSYMFOLLOW = 0x400000 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SNAPSHOT = 0x1000000 + MNT_SOFTDEP = 0x200000 + MNT_SUIDDIR = 0x100000 + MNT_SUJ = 0x100000000 + MNT_SUSPEND = 0x4 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UNTRUSTED = 0x800000000 + MNT_UPDATE = 0x10000 + MNT_UPDATEMASK = 0xad8d0807e + MNT_USER = 0x8000 + MNT_VERIFIED = 0x400000000 + MNT_VISFLAGMASK = 0xffef0ffff + MNT_WAIT = 0x1 + MSG_CMSG_CLOEXEC = 0x40000 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_NBIO = 0x4000 + MSG_NOSIGNAL = 0x20000 + MSG_NOTIFICATION = 0x2000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITFORONE = 0x80000 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLISTL = 0x5 + NET_RT_IFMALIST = 0x4 + NET_RT_NHGRP = 0x7 + NET_RT_NHOP = 0x6 + NFDBITS = 0x40 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ABSTIME = 0x10 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_CLOSE = 0x100 + NOTE_CLOSE_WRITE = 0x200 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FILE_POLL = 0x2 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MSECONDS = 0x2 + NOTE_NSECONDS = 0x8 + NOTE_OPEN = 0x80 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_READ = 0x400 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x4 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x100000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x20000 + O_DSYNC = 0x1000000 + O_EMPTY_PATH = 0x2000000 + O_EXCL = 0x800 + O_EXEC = 0x40000 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_PATH = 0x400000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RESOLVE_BENEATH = 0x800000 + O_SEARCH = 0x40000 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_TTY_INIT = 0x80000 + O_VERIFY = 0x200000 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PIOD_READ_D = 0x1 + PIOD_READ_I = 0x3 + PIOD_WRITE_D = 0x2 + PIOD_WRITE_I = 0x4 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PTRACE_DEFAULT = 0x1 + PTRACE_EXEC = 0x1 + PTRACE_FORK = 0x8 + PTRACE_LWP = 0x10 + PTRACE_SCE = 0x2 + PTRACE_SCX = 0x4 + PTRACE_SYSCALL = 0x6 + PTRACE_VFORK = 0x20 + PT_ATTACH = 0xa + PT_CLEARSTEP = 0x10 + PT_CONTINUE = 0x7 + PT_COREDUMP = 0x1d + PT_DETACH = 0xb + PT_FIRSTMACH = 0x40 + PT_FOLLOW_FORK = 0x17 + PT_GETDBREGS = 0x25 + PT_GETFPREGS = 0x23 + PT_GETLWPLIST = 0xf + PT_GETNUMLWPS = 0xe + PT_GETREGS = 0x21 + PT_GET_EVENT_MASK = 0x19 + PT_GET_SC_ARGS = 0x1b + PT_GET_SC_RET = 0x1c + PT_IO = 0xc + PT_KILL = 0x8 + PT_LWPINFO = 0xd + PT_LWP_EVENTS = 0x18 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_RESUME = 0x13 + PT_SETDBREGS = 0x26 + PT_SETFPREGS = 0x24 + PT_SETREGS = 0x22 + PT_SETSTEP = 0x11 + PT_SET_EVENT_MASK = 0x1a + PT_STEP = 0x9 + PT_SUSPEND = 0x12 + PT_SYSCALL = 0x16 + PT_TO_SCE = 0x14 + PT_TO_SCX = 0x15 + PT_TRACE_ME = 0x0 + PT_VM_ENTRY = 0x29 + PT_VM_TIMESTAMP = 0x28 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + P_ZONEID = 0xc + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FIXEDMTU = 0x80000 + RTF_FMASK = 0x1004d808 + RTF_GATEWAY = 0x2 + RTF_GWFLAG_COMPAT = 0x80000000 + RTF_HOST = 0x4 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_STATIC = 0x800 + RTF_STICKY = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RTV_WEIGHT = 0x100 + RT_ALL_FIBS = -0x1 + RT_BLACKHOLE = 0x40 + RT_DEFAULT_FIB = 0x0 + RT_DEFAULT_WEIGHT = 0x1 + RT_HAS_GW = 0x80 + RT_HAS_HEADER = 0x10 + RT_HAS_HEADER_BIT = 0x4 + RT_L2_ME = 0x4 + RT_L2_ME_BIT = 0x2 + RT_LLE_CACHE = 0x100 + RT_MAX_WEIGHT = 0xffffff + RT_MAY_LOOP = 0x8 + RT_MAY_LOOP_BIT = 0x3 + RT_REJECT = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_BINTIME = 0x4 + SCM_CREDS = 0x3 + SCM_CREDS2 = 0x8 + SCM_MONOTONIC = 0x6 + SCM_REALTIME = 0x5 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIME_INFO = 0x7 + SEEK_CUR = 0x1 + SEEK_DATA = 0x3 + SEEK_END = 0x2 + SEEK_HOLE = 0x4 + SEEK_SET = 0x0 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80286987 + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80286989 + SIOCDIFPHYADDR = 0x80206949 + SIOCGDRVSPEC = 0xc028697b + SIOCGETSGCNT = 0xc0207210 + SIOCGETVIFCNT = 0xc028720f + SIOCGHIWAT = 0x40047301 + SIOCGHWADDR = 0xc020693e + SIOCGI2C = 0xc020693d + SIOCGIFADDR = 0xc0206921 + SIOCGIFALIAS = 0xc044692d + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0106924 + SIOCGIFDATA = 0x8020692c + SIOCGIFDESCR = 0xc020692a + SIOCGIFDOWNREASON = 0xc058699a + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFIB = 0xc020695c + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc028698a + SIOCGIFGROUP = 0xc0286988 + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMAC = 0xc0206926 + SIOCGIFMEDIA = 0xc0306938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFRSSHASH = 0xc0186997 + SIOCGIFRSSKEY = 0xc0946996 + SIOCGIFSTATUS = 0xc331693b + SIOCGIFXMEDIA = 0xc030698b + SIOCGLANPCP = 0xc0206998 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCGTUNFIB = 0xc020695e + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106978 + SIOCSDRVSPEC = 0x8028697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDESCR = 0x80206929 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFIB = 0x8020695d + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206927 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFRVNET = 0xc020695b + SIOCSIFVNET = 0xc020695a + SIOCSLANPCP = 0x80206999 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSTUNFIB = 0x8020695f + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_LOCAL = 0x0 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BINTIME = 0x2000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DOMAIN = 0x1019 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1009 + SO_LINGER = 0x80 + SO_LISTENINCQLEN = 0x1013 + SO_LISTENQLEN = 0x1012 + SO_LISTENQLIMIT = 0x1011 + SO_MAX_PACING_RATE = 0x1018 + SO_NOSIGPIPE = 0x800 + SO_NO_DDP = 0x8000 + SO_NO_OFFLOAD = 0x4000 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1010 + SO_PROTOCOL = 0x1016 + SO_PROTOTYPE = 0x1016 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_RERROR = 0x20000 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSEPORT_LB = 0x10000 + SO_SETFIB = 0x1014 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TS_BINTIME = 0x1 + SO_TS_CLOCK = 0x1017 + SO_TS_CLOCK_MAX = 0x3 + SO_TS_DEFAULT = 0x0 + SO_TS_MONOTONIC = 0x3 + SO_TS_REALTIME = 0x2 + SO_TS_REALTIME_MICRO = 0x0 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USER_COOKIE = 0x1015 + SO_VENDOR = 0x80000000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB3 = 0x4 + TABDLY = 0x4 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCPOPT_EOL = 0x0 + TCPOPT_FAST_OPEN = 0x22 + TCPOPT_MAXSEG = 0x2 + TCPOPT_NOP = 0x1 + TCPOPT_PAD = 0x0 + TCPOPT_SACK = 0x5 + TCPOPT_SACK_PERMITTED = 0x4 + TCPOPT_SIGNATURE = 0x13 + TCPOPT_TIMESTAMP = 0x8 + TCPOPT_WINDOW = 0x3 + TCP_BBR_ACK_COMP_ALG = 0x448 + TCP_BBR_ALGORITHM = 0x43b + TCP_BBR_DRAIN_INC_EXTRA = 0x43c + TCP_BBR_DRAIN_PG = 0x42e + TCP_BBR_EXTRA_GAIN = 0x449 + TCP_BBR_EXTRA_STATE = 0x453 + TCP_BBR_FLOOR_MIN_TSO = 0x454 + TCP_BBR_HDWR_PACE = 0x451 + TCP_BBR_HOLD_TARGET = 0x436 + TCP_BBR_IWINTSO = 0x42b + TCP_BBR_LOWGAIN_FD = 0x436 + TCP_BBR_LOWGAIN_HALF = 0x435 + TCP_BBR_LOWGAIN_THRESH = 0x434 + TCP_BBR_MAX_RTO = 0x439 + TCP_BBR_MIN_RTO = 0x438 + TCP_BBR_MIN_TOPACEOUT = 0x455 + TCP_BBR_ONE_RETRAN = 0x431 + TCP_BBR_PACE_CROSS = 0x442 + TCP_BBR_PACE_DEL_TAR = 0x43f + TCP_BBR_PACE_OH = 0x435 + TCP_BBR_PACE_PER_SEC = 0x43e + TCP_BBR_PACE_SEG_MAX = 0x440 + TCP_BBR_PACE_SEG_MIN = 0x441 + TCP_BBR_POLICER_DETECT = 0x457 + TCP_BBR_PROBE_RTT_GAIN = 0x44d + TCP_BBR_PROBE_RTT_INT = 0x430 + TCP_BBR_PROBE_RTT_LEN = 0x44e + TCP_BBR_RACK_INIT_RATE = 0x458 + TCP_BBR_RACK_RTT_USE = 0x44a + TCP_BBR_RECFORCE = 0x42c + TCP_BBR_REC_OVER_HPTS = 0x43a + TCP_BBR_RETRAN_WTSO = 0x44b + TCP_BBR_RWND_IS_APP = 0x42f + TCP_BBR_SEND_IWND_IN_TSO = 0x44f + TCP_BBR_STARTUP_EXIT_EPOCH = 0x43d + TCP_BBR_STARTUP_LOSS_EXIT = 0x432 + TCP_BBR_STARTUP_PG = 0x42d + TCP_BBR_TMR_PACE_OH = 0x448 + TCP_BBR_TSLIMITS = 0x434 + TCP_BBR_TSTMP_RAISES = 0x456 + TCP_BBR_UNLIMITED = 0x43b + TCP_BBR_USEDEL_RATE = 0x437 + TCP_BBR_USE_LOWGAIN = 0x433 + TCP_BBR_USE_RACK_CHEAT = 0x450 + TCP_BBR_USE_RACK_RR = 0x450 + TCP_BBR_UTTER_MAX_TSO = 0x452 + TCP_CA_NAME_MAX = 0x10 + TCP_CCALGOOPT = 0x41 + TCP_CONGESTION = 0x40 + TCP_DATA_AFTER_CLOSE = 0x44c + TCP_DEFER_OPTIONS = 0x470 + TCP_DELACK = 0x48 + TCP_FASTOPEN = 0x401 + TCP_FASTOPEN_MAX_COOKIE_LEN = 0x10 + TCP_FASTOPEN_MIN_COOKIE_LEN = 0x4 + TCP_FASTOPEN_PSK_LEN = 0x10 + TCP_FAST_RSM_HACK = 0x471 + TCP_FIN_IS_RST = 0x49 + TCP_FUNCTION_BLK = 0x2000 + TCP_FUNCTION_NAME_LEN_MAX = 0x20 + TCP_HDWR_RATE_CAP = 0x46a + TCP_HDWR_UP_ONLY = 0x46c + TCP_IDLE_REDUCE = 0x46 + TCP_INFO = 0x20 + TCP_IWND_NB = 0x2b + TCP_IWND_NSEG = 0x2c + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x80 + TCP_KEEPINTVL = 0x200 + TCP_LOG = 0x22 + TCP_LOGBUF = 0x23 + TCP_LOGDUMP = 0x25 + TCP_LOGDUMPID = 0x26 + TCP_LOGID = 0x24 + TCP_LOGID_CNT = 0x2e + TCP_LOG_ID_LEN = 0x40 + TCP_LOG_LIMIT = 0x4a + TCP_LOG_TAG = 0x2f + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXPEAKRATE = 0x45 + TCP_MAXSEG = 0x2 + TCP_MAXUNACKTIME = 0x44 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_NO_PRR = 0x462 + TCP_PACING_RATE_CAP = 0x46b + TCP_PCAP_IN = 0x1000 + TCP_PCAP_OUT = 0x800 + TCP_PERF_INFO = 0x4e + TCP_PROC_ACCOUNTING = 0x4c + TCP_RACK_ABC_VAL = 0x46d + TCP_RACK_CHEAT_NOT_CONF_RATE = 0x459 + TCP_RACK_DO_DETECTION = 0x449 + TCP_RACK_EARLY_RECOV = 0x423 + TCP_RACK_EARLY_SEG = 0x424 + TCP_RACK_FORCE_MSEG = 0x45d + TCP_RACK_GP_INCREASE = 0x446 + TCP_RACK_GP_INCREASE_CA = 0x45a + TCP_RACK_GP_INCREASE_REC = 0x45c + TCP_RACK_GP_INCREASE_SS = 0x45b + TCP_RACK_IDLE_REDUCE_HIGH = 0x444 + TCP_RACK_MBUF_QUEUE = 0x41a + TCP_RACK_MEASURE_CNT = 0x46f + TCP_RACK_MIN_PACE = 0x445 + TCP_RACK_MIN_PACE_SEG = 0x446 + TCP_RACK_MIN_TO = 0x422 + TCP_RACK_NONRXT_CFG_RATE = 0x463 + TCP_RACK_NO_PUSH_AT_MAX = 0x466 + TCP_RACK_PACE_ALWAYS = 0x41f + TCP_RACK_PACE_MAX_SEG = 0x41e + TCP_RACK_PACE_RATE_CA = 0x45e + TCP_RACK_PACE_RATE_REC = 0x460 + TCP_RACK_PACE_RATE_SS = 0x45f + TCP_RACK_PACE_REDUCE = 0x41d + TCP_RACK_PACE_TO_FILL = 0x467 + TCP_RACK_PACING_BETA = 0x472 + TCP_RACK_PACING_BETA_ECN = 0x473 + TCP_RACK_PKT_DELAY = 0x428 + TCP_RACK_PROFILE = 0x469 + TCP_RACK_PROP = 0x41b + TCP_RACK_PROP_RATE = 0x420 + TCP_RACK_PRR_SENDALOT = 0x421 + TCP_RACK_REORD_FADE = 0x426 + TCP_RACK_REORD_THRESH = 0x425 + TCP_RACK_RR_CONF = 0x459 + TCP_RACK_TIMER_SLOP = 0x474 + TCP_RACK_TLP_INC_VAR = 0x429 + TCP_RACK_TLP_REDUCE = 0x41c + TCP_RACK_TLP_THRESH = 0x427 + TCP_RACK_TLP_USE = 0x447 + TCP_REC_ABC_VAL = 0x46e + TCP_REMOTE_UDP_ENCAPS_PORT = 0x47 + TCP_REUSPORT_LB_NUMA = 0x402 + TCP_REUSPORT_LB_NUMA_CURDOM = -0x1 + TCP_REUSPORT_LB_NUMA_NODOM = -0x2 + TCP_RXTLS_ENABLE = 0x29 + TCP_RXTLS_MODE = 0x2a + TCP_SHARED_CWND_ALLOWED = 0x4b + TCP_SHARED_CWND_ENABLE = 0x464 + TCP_SHARED_CWND_TIME_LIMIT = 0x468 + TCP_STATS = 0x21 + TCP_TIMELY_DYN_ADJ = 0x465 + TCP_TLS_MODE_IFNET = 0x2 + TCP_TLS_MODE_NONE = 0x0 + TCP_TLS_MODE_SW = 0x1 + TCP_TLS_MODE_TOE = 0x3 + TCP_TXTLS_ENABLE = 0x27 + TCP_TXTLS_MODE = 0x28 + TCP_USER_LOG = 0x30 + TCP_USE_CMP_ACKS = 0x4d + TCP_VENDOR = 0x80000000 + TCSAFLUSH = 0x2 + TIMER_ABSTIME = 0x1 + TIMER_RELTIME = 0x0 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGPTN = 0x4004740f + TIOCGSID = 0x40047463 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DCD = 0x40 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMASTER = 0x2000741c + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + UTIME_NOW = -0x1 + UTIME_OMIT = -0x2 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WEXITED = 0x10 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WNOWAIT = 0x8 + WSTOPPED = 0x2 + WTRAPPED = 0x20 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x59) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x55) + ECAPMODE = syscall.Errno(0x5e) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOOFUS = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x56) + EINPROGRESS = syscall.Errno(0x24) + EINTEGRITY = syscall.Errno(0x61) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x61) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5a) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x57) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCAPABLE = syscall.Errno(0x5d) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x5f) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x60) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5c) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGLIBRT = syscall.Signal(0x21) + SIGLWP = syscall.Signal(0x20) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EWOULDBLOCK", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disc quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC prog. not avail"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIDRM", "identifier removed"}, + {83, "ENOMSG", "no message of desired type"}, + {84, "EOVERFLOW", "value too large to be stored in data type"}, + {85, "ECANCELED", "operation canceled"}, + {86, "EILSEQ", "illegal byte sequence"}, + {87, "ENOATTR", "attribute not found"}, + {88, "EDOOFUS", "programming error"}, + {89, "EBADMSG", "bad message"}, + {90, "EMULTIHOP", "multihop attempted"}, + {91, "ENOLINK", "link has been severed"}, + {92, "EPROTO", "protocol error"}, + {93, "ENOTCAPABLE", "capabilities insufficient"}, + {94, "ECAPMODE", "not permitted in capability mode"}, + {95, "ENOTRECOVERABLE", "state not recoverable"}, + {96, "EOWNERDEAD", "previous owner died"}, + {97, "EINTEGRITY", "integrity check failed"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGIOT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGTHR", "unknown signal"}, + {33, "SIGLIBRT", "unknown signal"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go new file mode 100644 index 0000000..928e24c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go @@ -0,0 +1,818 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/loong64/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build loong64 && linux +// +build loong64,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/loong64/include _const.go + +package unix + +import "syscall" + +const ( + B1000000 = 0x1008 + B115200 = 0x1002 + B1152000 = 0x1009 + B1500000 = 0x100a + B2000000 = 0x100b + B230400 = 0x1003 + B2500000 = 0x100c + B3000000 = 0x100d + B3500000 = 0x100e + B4000000 = 0x100f + B460800 = 0x1004 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B921600 = 0x1007 + BLKBSZGET = 0x80081270 + BLKBSZSET = 0x40081271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80081272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BS1 = 0x2000 + BSDLY = 0x2000 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIZE = 0x30 + CSTOPB = 0x40 + ECCGETLAYOUT = 0x81484d11 + ECCGETSTATS = 0x80104d12 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EPOLL_CLOEXEC = 0x80000 + EXTPROC = 0x10000 + FF1 = 0x8000 + FFDLY = 0x8000 + FICLONE = 0x40049409 + FICLONERANGE = 0x4020940d + FLUSHO = 0x1000 + FPU_CTX_MAGIC = 0x46505501 + FS_IOC_ENABLE_VERITY = 0x40806685 + FS_IOC_GETFLAGS = 0x80086601 + FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SETFLAGS = 0x40086602 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + F_GETLK = 0x5 + F_GETLK64 = 0x5 + F_GETOWN = 0x9 + F_RDLCK = 0x0 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x8 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HIDIOCGRAWINFO = 0x80084803 + HIDIOCGRDESC = 0x90044802 + HIDIOCGRDESCSIZE = 0x80044801 + HUPCL = 0x400 + ICANON = 0x2 + IEXTEN = 0x8000 + IN_CLOEXEC = 0x80000 + IN_NONBLOCK = 0x800 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + ISIG = 0x1 + IUCLC = 0x200 + IXOFF = 0x1000 + IXON = 0x400 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_STACK = 0x20000 + MAP_SYNC = 0x80000 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MEMERASE = 0x40084d02 + MEMERASE64 = 0x40104d14 + MEMGETBADBLOCK = 0x40084d0b + MEMGETINFO = 0x80204d01 + MEMGETOOBSEL = 0x80c84d0a + MEMGETREGIONCOUNT = 0x80044d07 + MEMISLOCKED = 0x80084d17 + MEMLOCK = 0x40084d05 + MEMREADOOB = 0xc0104d04 + MEMSETBADBLOCK = 0x40084d0c + MEMUNLOCK = 0x40084d06 + MEMWRITEOOB = 0xc0104d03 + MTDFILEMODE = 0x4d13 + NFDBITS = 0x40 + NLDLY = 0x100 + NOFLSH = 0x80 + NS_GET_NSTYPE = 0xb703 + NS_GET_OWNER_UID = 0xb704 + NS_GET_PARENT = 0xb702 + NS_GET_USERNS = 0xb701 + OLCUC = 0x2 + ONLCR = 0x4 + OTPERASE = 0x400c4d19 + OTPGETREGIONCOUNT = 0x40044d0e + OTPGETREGIONINFO = 0x400c4d0f + OTPLOCK = 0x800c4d10 + OTPSELECT = 0x80044d0d + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x4000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + PARENB = 0x100 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80082407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc008240a + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PPPIOCATTACH = 0x4004743d + PPPIOCATTCHAN = 0x40047438 + PPPIOCBRIDGECHAN = 0x40047435 + PPPIOCCONNECT = 0x4004743a + PPPIOCDETACH = 0x4004743c + PPPIOCDISCONN = 0x7439 + PPPIOCGASYNCMAP = 0x80047458 + PPPIOCGCHAN = 0x80047437 + PPPIOCGDEBUG = 0x80047441 + PPPIOCGFLAGS = 0x8004745a + PPPIOCGIDLE = 0x8010743f + PPPIOCGIDLE32 = 0x8008743f + PPPIOCGIDLE64 = 0x8010743f + PPPIOCGL2TPSTATS = 0x80487436 + PPPIOCGMRU = 0x80047453 + PPPIOCGRASYNCMAP = 0x80047455 + PPPIOCGUNIT = 0x80047456 + PPPIOCGXASYNCMAP = 0x80207450 + PPPIOCSACTIVE = 0x40107446 + PPPIOCSASYNCMAP = 0x40047457 + PPPIOCSCOMPRESS = 0x4010744d + PPPIOCSDEBUG = 0x40047440 + PPPIOCSFLAGS = 0x40047459 + PPPIOCSMAXCID = 0x40047451 + PPPIOCSMRRU = 0x4004743b + PPPIOCSMRU = 0x40047452 + PPPIOCSNPMODE = 0x4008744b + PPPIOCSPASS = 0x40107447 + PPPIOCSRASYNCMAP = 0x40047454 + PPPIOCSXASYNCMAP = 0x4020744f + PPPIOCUNBRIDGECHAN = 0x7434 + PPPIOCXFERUNIT = 0x744e + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTRACE_SYSEMU = 0x1f + PTRACE_SYSEMU_SINGLESTEP = 0x20 + RLIMIT_AS = 0x9 + RLIMIT_MEMLOCK = 0x8 + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RNDADDENTROPY = 0x40085203 + RNDADDTOENTCNT = 0x40045201 + RNDCLEARPOOL = 0x5206 + RNDGETENTCNT = 0x80045200 + RNDGETPOOL = 0x80085202 + RNDRESEEDCRNG = 0x5207 + RNDZAPENTCNT = 0x5204 + RTC_AIE_OFF = 0x7002 + RTC_AIE_ON = 0x7001 + RTC_ALM_READ = 0x80247008 + RTC_ALM_SET = 0x40247007 + RTC_EPOCH_READ = 0x8008700d + RTC_EPOCH_SET = 0x4008700e + RTC_IRQP_READ = 0x8008700b + RTC_IRQP_SET = 0x4008700c + RTC_PARAM_GET = 0x40187013 + RTC_PARAM_SET = 0x40187014 + RTC_PIE_OFF = 0x7006 + RTC_PIE_ON = 0x7005 + RTC_PLL_GET = 0x80207011 + RTC_PLL_SET = 0x40207012 + RTC_RD_TIME = 0x80247009 + RTC_SET_TIME = 0x4024700a + RTC_UIE_OFF = 0x7004 + RTC_UIE_ON = 0x7003 + RTC_VL_CLR = 0x7014 + RTC_VL_READ = 0x80047013 + RTC_WIE_OFF = 0x7010 + RTC_WIE_ON = 0x700f + RTC_WKALM_RD = 0x80287010 + RTC_WKALM_SET = 0x4028700f + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SFD_CLOEXEC = 0x80000 + SFD_NONBLOCK = 0x800 + SIOCATMARK = 0x8905 + SIOCGPGRP = 0x8904 + SIOCGSTAMPNS_NEW = 0x80108907 + SIOCGSTAMP_NEW = 0x80108906 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCSPGRP = 0x8902 + SOCK_CLOEXEC = 0x80000 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x800 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0x1 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BINDTOIFINDEX = 0x3e + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 + SO_BUSY_POLL = 0x2e + SO_BUSY_POLL_BUDGET = 0x46 + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 + SO_NOFCS = 0x2b + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b + SO_PEERSEC = 0x1f + SO_PREFER_BUSY_POLL = 0x45 + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVMARK = 0x4b + SO_RCVTIMEO = 0x14 + SO_RCVTIMEO_NEW = 0x42 + SO_RCVTIMEO_OLD = 0x14 + SO_RESERVE_MEM = 0x49 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_SNDTIMEO_NEW = 0x43 + SO_SNDTIMEO_OLD = 0x15 + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPING_NEW = 0x41 + SO_TIMESTAMPING_OLD = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TIMESTAMPNS_NEW = 0x40 + SO_TIMESTAMPNS_OLD = 0x23 + SO_TIMESTAMP_NEW = 0x3f + SO_TXREHASH = 0x4a + SO_TXTIME = 0x3d + SO_TYPE = 0x3 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TFD_CLOEXEC = 0x80000 + TFD_NONBLOCK = 0x800 + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGISO7816 = 0x80285442 + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSISO7816 = 0xc0285443 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TUNATTACHFILTER = 0x401054d5 + TUNDETACHFILTER = 0x401054d6 + TUNGETDEVNETNS = 0x54e3 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x801054db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETCARRIER = 0x400454e2 + TUNSETDEBUG = 0x400454c9 + TUNSETFILTEREBPF = 0x800454e1 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETSTEERINGEBPF = 0x800454e0 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UBI_IOCATT = 0x40186f40 + UBI_IOCDET = 0x40046f41 + UBI_IOCEBCH = 0x40044f02 + UBI_IOCEBER = 0x40044f01 + UBI_IOCEBISMAP = 0x80044f05 + UBI_IOCEBMAP = 0x40084f03 + UBI_IOCEBUNMAP = 0x40044f04 + UBI_IOCMKVOL = 0x40986f00 + UBI_IOCRMVOL = 0x40046f01 + UBI_IOCRNVOL = 0x51106f03 + UBI_IOCRPEB = 0x40046f04 + UBI_IOCRSVOL = 0x400c6f02 + UBI_IOCSETVOLPROP = 0x40104f06 + UBI_IOCSPEB = 0x40046f05 + UBI_IOCVOLCRBLK = 0x40804f07 + UBI_IOCVOLRMBLK = 0x4f08 + UBI_IOCVOLUP = 0x40084f00 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VMIN = 0x6 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WORDSIZE = 0x40 + XCASE = 0x4 + XTABS = 0x1800 + _HIDIOCGRAWNAME = 0x80804804 + _HIDIOCGRAWPHYS = 0x80404805 + _HIDIOCGRAWUNIQ = 0x80404808 +) + +// Errors +const ( + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + ECANCELED = syscall.Errno(0x7d) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EISCONN = syscall.Errno(0x6a) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTCONN = syscall.Errno(0x6b) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTUNIQ = syscall.Errno(0x4c) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPFNOSUPPORT = syscall.Errno(0x60) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGIO = syscall.Signal(0x1d) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "EDEADLK", "resource deadlock avoided"}, + {36, "ENAMETOOLONG", "file name too long"}, + {37, "ENOLCK", "no locks available"}, + {38, "ENOSYS", "function not implemented"}, + {39, "ENOTEMPTY", "directory not empty"}, + {40, "ELOOP", "too many levels of symbolic links"}, + {42, "ENOMSG", "no message of desired type"}, + {43, "EIDRM", "identifier removed"}, + {44, "ECHRNG", "channel number out of range"}, + {45, "EL2NSYNC", "level 2 not synchronized"}, + {46, "EL3HLT", "level 3 halted"}, + {47, "EL3RST", "level 3 reset"}, + {48, "ELNRNG", "link number out of range"}, + {49, "EUNATCH", "protocol driver not attached"}, + {50, "ENOCSI", "no CSI structure available"}, + {51, "EL2HLT", "level 2 halted"}, + {52, "EBADE", "invalid exchange"}, + {53, "EBADR", "invalid request descriptor"}, + {54, "EXFULL", "exchange full"}, + {55, "ENOANO", "no anode"}, + {56, "EBADRQC", "invalid request code"}, + {57, "EBADSLT", "invalid slot"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {72, "EMULTIHOP", "multihop attempted"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EBADMSG", "bad message"}, + {75, "EOVERFLOW", "value too large for defined data type"}, + {76, "ENOTUNIQ", "name not unique on network"}, + {77, "EBADFD", "file descriptor in bad state"}, + {78, "EREMCHG", "remote address changed"}, + {79, "ELIBACC", "can not access a needed shared library"}, + {80, "ELIBBAD", "accessing a corrupted shared library"}, + {81, "ELIBSCN", ".lib section in a.out corrupted"}, + {82, "ELIBMAX", "attempting to link in too many shared libraries"}, + {83, "ELIBEXEC", "cannot exec a shared library directly"}, + {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {85, "ERESTART", "interrupted system call should be restarted"}, + {86, "ESTRPIPE", "streams pipe error"}, + {87, "EUSERS", "too many users"}, + {88, "ENOTSOCK", "socket operation on non-socket"}, + {89, "EDESTADDRREQ", "destination address required"}, + {90, "EMSGSIZE", "message too long"}, + {91, "EPROTOTYPE", "protocol wrong type for socket"}, + {92, "ENOPROTOOPT", "protocol not available"}, + {93, "EPROTONOSUPPORT", "protocol not supported"}, + {94, "ESOCKTNOSUPPORT", "socket type not supported"}, + {95, "ENOTSUP", "operation not supported"}, + {96, "EPFNOSUPPORT", "protocol family not supported"}, + {97, "EAFNOSUPPORT", "address family not supported by protocol"}, + {98, "EADDRINUSE", "address already in use"}, + {99, "EADDRNOTAVAIL", "cannot assign requested address"}, + {100, "ENETDOWN", "network is down"}, + {101, "ENETUNREACH", "network is unreachable"}, + {102, "ENETRESET", "network dropped connection on reset"}, + {103, "ECONNABORTED", "software caused connection abort"}, + {104, "ECONNRESET", "connection reset by peer"}, + {105, "ENOBUFS", "no buffer space available"}, + {106, "EISCONN", "transport endpoint is already connected"}, + {107, "ENOTCONN", "transport endpoint is not connected"}, + {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {109, "ETOOMANYREFS", "too many references: cannot splice"}, + {110, "ETIMEDOUT", "connection timed out"}, + {111, "ECONNREFUSED", "connection refused"}, + {112, "EHOSTDOWN", "host is down"}, + {113, "EHOSTUNREACH", "no route to host"}, + {114, "EALREADY", "operation already in progress"}, + {115, "EINPROGRESS", "operation now in progress"}, + {116, "ESTALE", "stale file handle"}, + {117, "EUCLEAN", "structure needs cleaning"}, + {118, "ENOTNAM", "not a XENIX named type file"}, + {119, "ENAVAIL", "no XENIX semaphores available"}, + {120, "EISNAM", "is a named type file"}, + {121, "EREMOTEIO", "remote I/O error"}, + {122, "EDQUOT", "disk quota exceeded"}, + {123, "ENOMEDIUM", "no medium found"}, + {124, "EMEDIUMTYPE", "wrong medium type"}, + {125, "ECANCELED", "operation canceled"}, + {126, "ENOKEY", "required key not available"}, + {127, "EKEYEXPIRED", "key has expired"}, + {128, "EKEYREVOKED", "key has been revoked"}, + {129, "EKEYREJECTED", "key was rejected by service"}, + {130, "EOWNERDEAD", "owner died"}, + {131, "ENOTRECOVERABLE", "state not recoverable"}, + {132, "ERFKILL", "operation not possible due to RF-kill"}, + {133, "EHWPOISON", "memory page has hardware error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGBUS", "bus error"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGUSR1", "user defined signal 1"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGUSR2", "user defined signal 2"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGSTKFLT", "stack fault"}, + {17, "SIGCHLD", "child exited"}, + {18, "SIGCONT", "continued"}, + {19, "SIGSTOP", "stopped (signal)"}, + {20, "SIGTSTP", "stopped"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGURG", "urgent I/O condition"}, + {24, "SIGXCPU", "CPU time limit exceeded"}, + {25, "SIGXFSZ", "file size limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window changed"}, + {29, "SIGIO", "I/O possible"}, + {30, "SIGPWR", "power failure"}, + {31, "SIGSYS", "bad system call"}, +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go deleted file mode 100644 index a06eb09..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go +++ /dev/null @@ -1,40 +0,0 @@ -// go run mksyscall.go -tags darwin,amd64,go1.13 syscall_darwin.1_13.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build darwin && amd64 && go1.13 -// +build darwin,amd64,go1.13 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func closedir(dir uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_closedir_trampoline_addr, uintptr(dir), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_closedir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) { - r0, _, _ := syscall_syscall(libc_readdir_r_trampoline_addr, uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result))) - res = Errno(r0) - return -} - -var libc_readdir_r_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s deleted file mode 100644 index f5bb40e..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s +++ /dev/null @@ -1,25 +0,0 @@ -// go run mkasm.go darwin amd64 -// Code generated by the command above; DO NOT EDIT. - -//go:build go1.13 -// +build go1.13 - -#include "textflag.h" - -TEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fdopendir(SB) - -GLOBL ·libc_fdopendir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB) - -TEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_closedir(SB) - -GLOBL ·libc_closedir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB) - -TEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readdir_r(SB) - -GLOBL ·libc_readdir_r_trampoline_addr(SB), RODATA, $8 -DATA ·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB) 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 467deed..c2461c4 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -1,8 +1,8 @@ -// go run mksyscall.go -tags darwin,amd64,go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go +// go run mksyscall.go -tags darwin,amd64 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go // Code generated by the command above; see README.md. DO NOT EDIT. -//go:build darwin && amd64 && go1.12 -// +build darwin,amd64,go1.12 +//go:build darwin && amd64 +// +build darwin,amd64 package unix @@ -463,6 +463,32 @@ var libc_munlockall_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func closedir(dir uintptr) (err error) { + _, _, e1 := syscall_syscall(libc_closedir_trampoline_addr, uintptr(dir), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_closedir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) { + r0, _, _ := syscall_syscall(libc_readdir_r_trampoline_addr, uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result))) + res = Errno(r0) + return +} + +var libc_readdir_r_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func pipe(p *[2]int32) (err error) { _, _, e1 := syscall_rawSyscall(libc_pipe_trampoline_addr, uintptr(unsafe.Pointer(p)), 0, 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 b41467a..95fe4c0 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s @@ -1,11 +1,14 @@ // go run mkasm.go darwin amd64 // Code generated by the command above; DO NOT EDIT. -//go:build go1.12 -// +build go1.12 - #include "textflag.h" +TEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fdopendir(SB) + +GLOBL ·libc_fdopendir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB) + TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getgroups(SB) @@ -174,6 +177,18 @@ TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $8 DATA ·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB) +TEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_closedir(SB) + +GLOBL ·libc_closedir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB) + +TEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readdir_r(SB) + +GLOBL ·libc_readdir_r_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB) + TEXT libc_pipe_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_pipe(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go deleted file mode 100644 index cec595d..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go +++ /dev/null @@ -1,40 +0,0 @@ -// go run mksyscall.go -tags darwin,arm64,go1.13 syscall_darwin.1_13.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build darwin && arm64 && go1.13 -// +build darwin,arm64,go1.13 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func closedir(dir uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_closedir_trampoline_addr, uintptr(dir), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_closedir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) { - r0, _, _ := syscall_syscall(libc_readdir_r_trampoline_addr, uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result))) - res = Errno(r0) - return -} - -var libc_readdir_r_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s deleted file mode 100644 index 0c3f76b..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s +++ /dev/null @@ -1,25 +0,0 @@ -// go run mkasm.go darwin arm64 -// Code generated by the command above; DO NOT EDIT. - -//go:build go1.13 -// +build go1.13 - -#include "textflag.h" - -TEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fdopendir(SB) - -GLOBL ·libc_fdopendir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB) - -TEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_closedir(SB) - -GLOBL ·libc_closedir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB) - -TEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readdir_r(SB) - -GLOBL ·libc_readdir_r_trampoline_addr(SB), RODATA, $8 -DATA ·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB) 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 35938d3..26a0fdc 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -1,8 +1,8 @@ -// go run mksyscall.go -tags darwin,arm64,go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go +// go run mksyscall.go -tags darwin,arm64 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go // Code generated by the command above; see README.md. DO NOT EDIT. -//go:build darwin && arm64 && go1.12 -// +build darwin,arm64,go1.12 +//go:build darwin && arm64 +// +build darwin,arm64 package unix @@ -463,6 +463,32 @@ var libc_munlockall_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func closedir(dir uintptr) (err error) { + _, _, e1 := syscall_syscall(libc_closedir_trampoline_addr, uintptr(dir), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_closedir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) { + r0, _, _ := syscall_syscall(libc_readdir_r_trampoline_addr, uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result))) + res = Errno(r0) + return +} + +var libc_readdir_r_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func pipe(p *[2]int32) (err error) { _, _, e1 := syscall_rawSyscall(libc_pipe_trampoline_addr, uintptr(unsafe.Pointer(p)), 0, 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 e1f9204..efa5b4c 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s @@ -1,11 +1,14 @@ // go run mkasm.go darwin arm64 // Code generated by the command above; DO NOT EDIT. -//go:build go1.12 -// +build go1.12 - #include "textflag.h" +TEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fdopendir(SB) + +GLOBL ·libc_fdopendir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB) + TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getgroups(SB) @@ -174,6 +177,18 @@ TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $8 DATA ·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB) +TEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_closedir(SB) + +GLOBL ·libc_closedir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB) + +TEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readdir_r(SB) + +GLOBL ·libc_readdir_r_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB) + TEXT libc_pipe_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_pipe(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go new file mode 100644 index 0000000..8a2db7d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go @@ -0,0 +1,1889 @@ +// go run mksyscall.go -tags freebsd,riscv64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_riscv64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build freebsd && riscv64 +// +build freebsd,riscv64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data int) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CapEnter() (err error) { + _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsGet(version int, fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsLimit(fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(fd int, path string, mode uint32, dev uint64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go new file mode 100644 index 0000000..806ffd1 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go @@ -0,0 +1,487 @@ +// go run mksyscall.go -tags linux,loong64 syscall_linux.go syscall_linux_loong64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build linux && loong64 +// +build linux,loong64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsgid(gid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsuid(uid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(cmdline) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s new file mode 100644 index 0000000..75eb2f5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s @@ -0,0 +1,796 @@ +// go run mkasm.go openbsd 386 +// Code generated by the command above; DO NOT EDIT. + +#include "textflag.h" + +TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getgroups(SB) + +GLOBL ·libc_getgroups_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getgroups_trampoline_addr(SB)/4, $libc_getgroups_trampoline<>(SB) + +TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setgroups(SB) + +GLOBL ·libc_setgroups_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setgroups_trampoline_addr(SB)/4, $libc_setgroups_trampoline<>(SB) + +TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_wait4(SB) + +GLOBL ·libc_wait4_trampoline_addr(SB), RODATA, $4 +DATA ·libc_wait4_trampoline_addr(SB)/4, $libc_wait4_trampoline<>(SB) + +TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_accept(SB) + +GLOBL ·libc_accept_trampoline_addr(SB), RODATA, $4 +DATA ·libc_accept_trampoline_addr(SB)/4, $libc_accept_trampoline<>(SB) + +TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_bind(SB) + +GLOBL ·libc_bind_trampoline_addr(SB), RODATA, $4 +DATA ·libc_bind_trampoline_addr(SB)/4, $libc_bind_trampoline<>(SB) + +TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_connect(SB) + +GLOBL ·libc_connect_trampoline_addr(SB), RODATA, $4 +DATA ·libc_connect_trampoline_addr(SB)/4, $libc_connect_trampoline<>(SB) + +TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_socket(SB) + +GLOBL ·libc_socket_trampoline_addr(SB), RODATA, $4 +DATA ·libc_socket_trampoline_addr(SB)/4, $libc_socket_trampoline<>(SB) + +TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getsockopt(SB) + +GLOBL ·libc_getsockopt_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getsockopt_trampoline_addr(SB)/4, $libc_getsockopt_trampoline<>(SB) + +TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setsockopt(SB) + +GLOBL ·libc_setsockopt_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setsockopt_trampoline_addr(SB)/4, $libc_setsockopt_trampoline<>(SB) + +TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpeername(SB) + +GLOBL ·libc_getpeername_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getpeername_trampoline_addr(SB)/4, $libc_getpeername_trampoline<>(SB) + +TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getsockname(SB) + +GLOBL ·libc_getsockname_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getsockname_trampoline_addr(SB)/4, $libc_getsockname_trampoline<>(SB) + +TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_shutdown(SB) + +GLOBL ·libc_shutdown_trampoline_addr(SB), RODATA, $4 +DATA ·libc_shutdown_trampoline_addr(SB)/4, $libc_shutdown_trampoline<>(SB) + +TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_socketpair(SB) + +GLOBL ·libc_socketpair_trampoline_addr(SB), RODATA, $4 +DATA ·libc_socketpair_trampoline_addr(SB)/4, $libc_socketpair_trampoline<>(SB) + +TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_recvfrom(SB) + +GLOBL ·libc_recvfrom_trampoline_addr(SB), RODATA, $4 +DATA ·libc_recvfrom_trampoline_addr(SB)/4, $libc_recvfrom_trampoline<>(SB) + +TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sendto(SB) + +GLOBL ·libc_sendto_trampoline_addr(SB), RODATA, $4 +DATA ·libc_sendto_trampoline_addr(SB)/4, $libc_sendto_trampoline<>(SB) + +TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_recvmsg(SB) + +GLOBL ·libc_recvmsg_trampoline_addr(SB), RODATA, $4 +DATA ·libc_recvmsg_trampoline_addr(SB)/4, $libc_recvmsg_trampoline<>(SB) + +TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sendmsg(SB) + +GLOBL ·libc_sendmsg_trampoline_addr(SB), RODATA, $4 +DATA ·libc_sendmsg_trampoline_addr(SB)/4, $libc_sendmsg_trampoline<>(SB) + +TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_kevent(SB) + +GLOBL ·libc_kevent_trampoline_addr(SB), RODATA, $4 +DATA ·libc_kevent_trampoline_addr(SB)/4, $libc_kevent_trampoline<>(SB) + +TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_utimes(SB) + +GLOBL ·libc_utimes_trampoline_addr(SB), RODATA, $4 +DATA ·libc_utimes_trampoline_addr(SB)/4, $libc_utimes_trampoline<>(SB) + +TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_futimes(SB) + +GLOBL ·libc_futimes_trampoline_addr(SB), RODATA, $4 +DATA ·libc_futimes_trampoline_addr(SB)/4, $libc_futimes_trampoline<>(SB) + +TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_poll(SB) + +GLOBL ·libc_poll_trampoline_addr(SB), RODATA, $4 +DATA ·libc_poll_trampoline_addr(SB)/4, $libc_poll_trampoline<>(SB) + +TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_madvise(SB) + +GLOBL ·libc_madvise_trampoline_addr(SB), RODATA, $4 +DATA ·libc_madvise_trampoline_addr(SB)/4, $libc_madvise_trampoline<>(SB) + +TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mlock(SB) + +GLOBL ·libc_mlock_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mlock_trampoline_addr(SB)/4, $libc_mlock_trampoline<>(SB) + +TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mlockall(SB) + +GLOBL ·libc_mlockall_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mlockall_trampoline_addr(SB)/4, $libc_mlockall_trampoline<>(SB) + +TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mprotect(SB) + +GLOBL ·libc_mprotect_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mprotect_trampoline_addr(SB)/4, $libc_mprotect_trampoline<>(SB) + +TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_msync(SB) + +GLOBL ·libc_msync_trampoline_addr(SB), RODATA, $4 +DATA ·libc_msync_trampoline_addr(SB)/4, $libc_msync_trampoline<>(SB) + +TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_munlock(SB) + +GLOBL ·libc_munlock_trampoline_addr(SB), RODATA, $4 +DATA ·libc_munlock_trampoline_addr(SB)/4, $libc_munlock_trampoline<>(SB) + +TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_munlockall(SB) + +GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $4 +DATA ·libc_munlockall_trampoline_addr(SB)/4, $libc_munlockall_trampoline<>(SB) + +TEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pipe2(SB) + +GLOBL ·libc_pipe2_trampoline_addr(SB), RODATA, $4 +DATA ·libc_pipe2_trampoline_addr(SB)/4, $libc_pipe2_trampoline<>(SB) + +TEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getdents(SB) + +GLOBL ·libc_getdents_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getdents_trampoline_addr(SB)/4, $libc_getdents_trampoline<>(SB) + +TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getcwd(SB) + +GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getcwd_trampoline_addr(SB)/4, $libc_getcwd_trampoline<>(SB) + +TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_ioctl(SB) + +GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $4 +DATA ·libc_ioctl_trampoline_addr(SB)/4, $libc_ioctl_trampoline<>(SB) + +TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sysctl(SB) + +GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $4 +DATA ·libc_sysctl_trampoline_addr(SB)/4, $libc_sysctl_trampoline<>(SB) + +TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_ppoll(SB) + +GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $4 +DATA ·libc_ppoll_trampoline_addr(SB)/4, $libc_ppoll_trampoline<>(SB) + +TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_access(SB) + +GLOBL ·libc_access_trampoline_addr(SB), RODATA, $4 +DATA ·libc_access_trampoline_addr(SB)/4, $libc_access_trampoline<>(SB) + +TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_adjtime(SB) + +GLOBL ·libc_adjtime_trampoline_addr(SB), RODATA, $4 +DATA ·libc_adjtime_trampoline_addr(SB)/4, $libc_adjtime_trampoline<>(SB) + +TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chdir(SB) + +GLOBL ·libc_chdir_trampoline_addr(SB), RODATA, $4 +DATA ·libc_chdir_trampoline_addr(SB)/4, $libc_chdir_trampoline<>(SB) + +TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chflags(SB) + +GLOBL ·libc_chflags_trampoline_addr(SB), RODATA, $4 +DATA ·libc_chflags_trampoline_addr(SB)/4, $libc_chflags_trampoline<>(SB) + +TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chmod(SB) + +GLOBL ·libc_chmod_trampoline_addr(SB), RODATA, $4 +DATA ·libc_chmod_trampoline_addr(SB)/4, $libc_chmod_trampoline<>(SB) + +TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chown(SB) + +GLOBL ·libc_chown_trampoline_addr(SB), RODATA, $4 +DATA ·libc_chown_trampoline_addr(SB)/4, $libc_chown_trampoline<>(SB) + +TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chroot(SB) + +GLOBL ·libc_chroot_trampoline_addr(SB), RODATA, $4 +DATA ·libc_chroot_trampoline_addr(SB)/4, $libc_chroot_trampoline<>(SB) + +TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_close(SB) + +GLOBL ·libc_close_trampoline_addr(SB), RODATA, $4 +DATA ·libc_close_trampoline_addr(SB)/4, $libc_close_trampoline<>(SB) + +TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_dup(SB) + +GLOBL ·libc_dup_trampoline_addr(SB), RODATA, $4 +DATA ·libc_dup_trampoline_addr(SB)/4, $libc_dup_trampoline<>(SB) + +TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_dup2(SB) + +GLOBL ·libc_dup2_trampoline_addr(SB), RODATA, $4 +DATA ·libc_dup2_trampoline_addr(SB)/4, $libc_dup2_trampoline<>(SB) + +TEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_dup3(SB) + +GLOBL ·libc_dup3_trampoline_addr(SB), RODATA, $4 +DATA ·libc_dup3_trampoline_addr(SB)/4, $libc_dup3_trampoline<>(SB) + +TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_exit(SB) + +GLOBL ·libc_exit_trampoline_addr(SB), RODATA, $4 +DATA ·libc_exit_trampoline_addr(SB)/4, $libc_exit_trampoline<>(SB) + +TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_faccessat(SB) + +GLOBL ·libc_faccessat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_faccessat_trampoline_addr(SB)/4, $libc_faccessat_trampoline<>(SB) + +TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchdir(SB) + +GLOBL ·libc_fchdir_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fchdir_trampoline_addr(SB)/4, $libc_fchdir_trampoline<>(SB) + +TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchflags(SB) + +GLOBL ·libc_fchflags_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fchflags_trampoline_addr(SB)/4, $libc_fchflags_trampoline<>(SB) + +TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchmod(SB) + +GLOBL ·libc_fchmod_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fchmod_trampoline_addr(SB)/4, $libc_fchmod_trampoline<>(SB) + +TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchmodat(SB) + +GLOBL ·libc_fchmodat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fchmodat_trampoline_addr(SB)/4, $libc_fchmodat_trampoline<>(SB) + +TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchown(SB) + +GLOBL ·libc_fchown_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fchown_trampoline_addr(SB)/4, $libc_fchown_trampoline<>(SB) + +TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchownat(SB) + +GLOBL ·libc_fchownat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fchownat_trampoline_addr(SB)/4, $libc_fchownat_trampoline<>(SB) + +TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_flock(SB) + +GLOBL ·libc_flock_trampoline_addr(SB), RODATA, $4 +DATA ·libc_flock_trampoline_addr(SB)/4, $libc_flock_trampoline<>(SB) + +TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fpathconf(SB) + +GLOBL ·libc_fpathconf_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fpathconf_trampoline_addr(SB)/4, $libc_fpathconf_trampoline<>(SB) + +TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fstat(SB) + +GLOBL ·libc_fstat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fstat_trampoline_addr(SB)/4, $libc_fstat_trampoline<>(SB) + +TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fstatat(SB) + +GLOBL ·libc_fstatat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fstatat_trampoline_addr(SB)/4, $libc_fstatat_trampoline<>(SB) + +TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fstatfs(SB) + +GLOBL ·libc_fstatfs_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fstatfs_trampoline_addr(SB)/4, $libc_fstatfs_trampoline<>(SB) + +TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fsync(SB) + +GLOBL ·libc_fsync_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fsync_trampoline_addr(SB)/4, $libc_fsync_trampoline<>(SB) + +TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_ftruncate(SB) + +GLOBL ·libc_ftruncate_trampoline_addr(SB), RODATA, $4 +DATA ·libc_ftruncate_trampoline_addr(SB)/4, $libc_ftruncate_trampoline<>(SB) + +TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getegid(SB) + +GLOBL ·libc_getegid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getegid_trampoline_addr(SB)/4, $libc_getegid_trampoline<>(SB) + +TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_geteuid(SB) + +GLOBL ·libc_geteuid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_geteuid_trampoline_addr(SB)/4, $libc_geteuid_trampoline<>(SB) + +TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getgid(SB) + +GLOBL ·libc_getgid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getgid_trampoline_addr(SB)/4, $libc_getgid_trampoline<>(SB) + +TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpgid(SB) + +GLOBL ·libc_getpgid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getpgid_trampoline_addr(SB)/4, $libc_getpgid_trampoline<>(SB) + +TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpgrp(SB) + +GLOBL ·libc_getpgrp_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getpgrp_trampoline_addr(SB)/4, $libc_getpgrp_trampoline<>(SB) + +TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpid(SB) + +GLOBL ·libc_getpid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getpid_trampoline_addr(SB)/4, $libc_getpid_trampoline<>(SB) + +TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getppid(SB) + +GLOBL ·libc_getppid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getppid_trampoline_addr(SB)/4, $libc_getppid_trampoline<>(SB) + +TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpriority(SB) + +GLOBL ·libc_getpriority_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getpriority_trampoline_addr(SB)/4, $libc_getpriority_trampoline<>(SB) + +TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getrlimit(SB) + +GLOBL ·libc_getrlimit_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getrlimit_trampoline_addr(SB)/4, $libc_getrlimit_trampoline<>(SB) + +TEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getrtable(SB) + +GLOBL ·libc_getrtable_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getrtable_trampoline_addr(SB)/4, $libc_getrtable_trampoline<>(SB) + +TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getrusage(SB) + +GLOBL ·libc_getrusage_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getrusage_trampoline_addr(SB)/4, $libc_getrusage_trampoline<>(SB) + +TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getsid(SB) + +GLOBL ·libc_getsid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getsid_trampoline_addr(SB)/4, $libc_getsid_trampoline<>(SB) + +TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_gettimeofday(SB) + +GLOBL ·libc_gettimeofday_trampoline_addr(SB), RODATA, $4 +DATA ·libc_gettimeofday_trampoline_addr(SB)/4, $libc_gettimeofday_trampoline<>(SB) + +TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getuid(SB) + +GLOBL ·libc_getuid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getuid_trampoline_addr(SB)/4, $libc_getuid_trampoline<>(SB) + +TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_issetugid(SB) + +GLOBL ·libc_issetugid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_issetugid_trampoline_addr(SB)/4, $libc_issetugid_trampoline<>(SB) + +TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_kill(SB) + +GLOBL ·libc_kill_trampoline_addr(SB), RODATA, $4 +DATA ·libc_kill_trampoline_addr(SB)/4, $libc_kill_trampoline<>(SB) + +TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_kqueue(SB) + +GLOBL ·libc_kqueue_trampoline_addr(SB), RODATA, $4 +DATA ·libc_kqueue_trampoline_addr(SB)/4, $libc_kqueue_trampoline<>(SB) + +TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_lchown(SB) + +GLOBL ·libc_lchown_trampoline_addr(SB), RODATA, $4 +DATA ·libc_lchown_trampoline_addr(SB)/4, $libc_lchown_trampoline<>(SB) + +TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_link(SB) + +GLOBL ·libc_link_trampoline_addr(SB), RODATA, $4 +DATA ·libc_link_trampoline_addr(SB)/4, $libc_link_trampoline<>(SB) + +TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_linkat(SB) + +GLOBL ·libc_linkat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_linkat_trampoline_addr(SB)/4, $libc_linkat_trampoline<>(SB) + +TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_listen(SB) + +GLOBL ·libc_listen_trampoline_addr(SB), RODATA, $4 +DATA ·libc_listen_trampoline_addr(SB)/4, $libc_listen_trampoline<>(SB) + +TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_lstat(SB) + +GLOBL ·libc_lstat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_lstat_trampoline_addr(SB)/4, $libc_lstat_trampoline<>(SB) + +TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mkdir(SB) + +GLOBL ·libc_mkdir_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mkdir_trampoline_addr(SB)/4, $libc_mkdir_trampoline<>(SB) + +TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mkdirat(SB) + +GLOBL ·libc_mkdirat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mkdirat_trampoline_addr(SB)/4, $libc_mkdirat_trampoline<>(SB) + +TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mkfifo(SB) + +GLOBL ·libc_mkfifo_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mkfifo_trampoline_addr(SB)/4, $libc_mkfifo_trampoline<>(SB) + +TEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mkfifoat(SB) + +GLOBL ·libc_mkfifoat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mkfifoat_trampoline_addr(SB)/4, $libc_mkfifoat_trampoline<>(SB) + +TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mknod(SB) + +GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mknod_trampoline_addr(SB)/4, $libc_mknod_trampoline<>(SB) + +TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mknodat(SB) + +GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mknodat_trampoline_addr(SB)/4, $libc_mknodat_trampoline<>(SB) + +TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_nanosleep(SB) + +GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $4 +DATA ·libc_nanosleep_trampoline_addr(SB)/4, $libc_nanosleep_trampoline<>(SB) + +TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_open(SB) + +GLOBL ·libc_open_trampoline_addr(SB), RODATA, $4 +DATA ·libc_open_trampoline_addr(SB)/4, $libc_open_trampoline<>(SB) + +TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_openat(SB) + +GLOBL ·libc_openat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_openat_trampoline_addr(SB)/4, $libc_openat_trampoline<>(SB) + +TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pathconf(SB) + +GLOBL ·libc_pathconf_trampoline_addr(SB), RODATA, $4 +DATA ·libc_pathconf_trampoline_addr(SB)/4, $libc_pathconf_trampoline<>(SB) + +TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pread(SB) + +GLOBL ·libc_pread_trampoline_addr(SB), RODATA, $4 +DATA ·libc_pread_trampoline_addr(SB)/4, $libc_pread_trampoline<>(SB) + +TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pwrite(SB) + +GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $4 +DATA ·libc_pwrite_trampoline_addr(SB)/4, $libc_pwrite_trampoline<>(SB) + +TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_read(SB) + +GLOBL ·libc_read_trampoline_addr(SB), RODATA, $4 +DATA ·libc_read_trampoline_addr(SB)/4, $libc_read_trampoline<>(SB) + +TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readlink(SB) + +GLOBL ·libc_readlink_trampoline_addr(SB), RODATA, $4 +DATA ·libc_readlink_trampoline_addr(SB)/4, $libc_readlink_trampoline<>(SB) + +TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readlinkat(SB) + +GLOBL ·libc_readlinkat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_readlinkat_trampoline_addr(SB)/4, $libc_readlinkat_trampoline<>(SB) + +TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_rename(SB) + +GLOBL ·libc_rename_trampoline_addr(SB), RODATA, $4 +DATA ·libc_rename_trampoline_addr(SB)/4, $libc_rename_trampoline<>(SB) + +TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_renameat(SB) + +GLOBL ·libc_renameat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_renameat_trampoline_addr(SB)/4, $libc_renameat_trampoline<>(SB) + +TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_revoke(SB) + +GLOBL ·libc_revoke_trampoline_addr(SB), RODATA, $4 +DATA ·libc_revoke_trampoline_addr(SB)/4, $libc_revoke_trampoline<>(SB) + +TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_rmdir(SB) + +GLOBL ·libc_rmdir_trampoline_addr(SB), RODATA, $4 +DATA ·libc_rmdir_trampoline_addr(SB)/4, $libc_rmdir_trampoline<>(SB) + +TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_lseek(SB) + +GLOBL ·libc_lseek_trampoline_addr(SB), RODATA, $4 +DATA ·libc_lseek_trampoline_addr(SB)/4, $libc_lseek_trampoline<>(SB) + +TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_select(SB) + +GLOBL ·libc_select_trampoline_addr(SB), RODATA, $4 +DATA ·libc_select_trampoline_addr(SB)/4, $libc_select_trampoline<>(SB) + +TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setegid(SB) + +GLOBL ·libc_setegid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setegid_trampoline_addr(SB)/4, $libc_setegid_trampoline<>(SB) + +TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_seteuid(SB) + +GLOBL ·libc_seteuid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_seteuid_trampoline_addr(SB)/4, $libc_seteuid_trampoline<>(SB) + +TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setgid(SB) + +GLOBL ·libc_setgid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setgid_trampoline_addr(SB)/4, $libc_setgid_trampoline<>(SB) + +TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setlogin(SB) + +GLOBL ·libc_setlogin_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setlogin_trampoline_addr(SB)/4, $libc_setlogin_trampoline<>(SB) + +TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setpgid(SB) + +GLOBL ·libc_setpgid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setpgid_trampoline_addr(SB)/4, $libc_setpgid_trampoline<>(SB) + +TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setpriority(SB) + +GLOBL ·libc_setpriority_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setpriority_trampoline_addr(SB)/4, $libc_setpriority_trampoline<>(SB) + +TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setregid(SB) + +GLOBL ·libc_setregid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setregid_trampoline_addr(SB)/4, $libc_setregid_trampoline<>(SB) + +TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setreuid(SB) + +GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setreuid_trampoline_addr(SB)/4, $libc_setreuid_trampoline<>(SB) + +TEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setresgid(SB) + +GLOBL ·libc_setresgid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setresgid_trampoline_addr(SB)/4, $libc_setresgid_trampoline<>(SB) + +TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setresuid(SB) + +GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setresuid_trampoline_addr(SB)/4, $libc_setresuid_trampoline<>(SB) + +TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setrlimit(SB) + +GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setrlimit_trampoline_addr(SB)/4, $libc_setrlimit_trampoline<>(SB) + +TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setrtable(SB) + +GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setrtable_trampoline_addr(SB)/4, $libc_setrtable_trampoline<>(SB) + +TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setsid(SB) + +GLOBL ·libc_setsid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setsid_trampoline_addr(SB)/4, $libc_setsid_trampoline<>(SB) + +TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_settimeofday(SB) + +GLOBL ·libc_settimeofday_trampoline_addr(SB), RODATA, $4 +DATA ·libc_settimeofday_trampoline_addr(SB)/4, $libc_settimeofday_trampoline<>(SB) + +TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setuid(SB) + +GLOBL ·libc_setuid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setuid_trampoline_addr(SB)/4, $libc_setuid_trampoline<>(SB) + +TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_stat(SB) + +GLOBL ·libc_stat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_stat_trampoline_addr(SB)/4, $libc_stat_trampoline<>(SB) + +TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_statfs(SB) + +GLOBL ·libc_statfs_trampoline_addr(SB), RODATA, $4 +DATA ·libc_statfs_trampoline_addr(SB)/4, $libc_statfs_trampoline<>(SB) + +TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_symlink(SB) + +GLOBL ·libc_symlink_trampoline_addr(SB), RODATA, $4 +DATA ·libc_symlink_trampoline_addr(SB)/4, $libc_symlink_trampoline<>(SB) + +TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_symlinkat(SB) + +GLOBL ·libc_symlinkat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_symlinkat_trampoline_addr(SB)/4, $libc_symlinkat_trampoline<>(SB) + +TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sync(SB) + +GLOBL ·libc_sync_trampoline_addr(SB), RODATA, $4 +DATA ·libc_sync_trampoline_addr(SB)/4, $libc_sync_trampoline<>(SB) + +TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_truncate(SB) + +GLOBL ·libc_truncate_trampoline_addr(SB), RODATA, $4 +DATA ·libc_truncate_trampoline_addr(SB)/4, $libc_truncate_trampoline<>(SB) + +TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_umask(SB) + +GLOBL ·libc_umask_trampoline_addr(SB), RODATA, $4 +DATA ·libc_umask_trampoline_addr(SB)/4, $libc_umask_trampoline<>(SB) + +TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unlink(SB) + +GLOBL ·libc_unlink_trampoline_addr(SB), RODATA, $4 +DATA ·libc_unlink_trampoline_addr(SB)/4, $libc_unlink_trampoline<>(SB) + +TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unlinkat(SB) + +GLOBL ·libc_unlinkat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_unlinkat_trampoline_addr(SB)/4, $libc_unlinkat_trampoline<>(SB) + +TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unmount(SB) + +GLOBL ·libc_unmount_trampoline_addr(SB), RODATA, $4 +DATA ·libc_unmount_trampoline_addr(SB)/4, $libc_unmount_trampoline<>(SB) + +TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_write(SB) + +GLOBL ·libc_write_trampoline_addr(SB), RODATA, $4 +DATA ·libc_write_trampoline_addr(SB)/4, $libc_write_trampoline<>(SB) + +TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mmap(SB) + +GLOBL ·libc_mmap_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mmap_trampoline_addr(SB)/4, $libc_mmap_trampoline<>(SB) + +TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_munmap(SB) + +GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $4 +DATA ·libc_munmap_trampoline_addr(SB)/4, $libc_munmap_trampoline<>(SB) + +TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_utimensat(SB) + +GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_utimensat_trampoline_addr(SB)/4, $libc_utimensat_trampoline<>(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s new file mode 100644 index 0000000..243a666 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s @@ -0,0 +1,796 @@ +// go run mkasm.go openbsd amd64 +// Code generated by the command above; DO NOT EDIT. + +#include "textflag.h" + +TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getgroups(SB) + +GLOBL ·libc_getgroups_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB) + +TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setgroups(SB) + +GLOBL ·libc_setgroups_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB) + +TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_wait4(SB) + +GLOBL ·libc_wait4_trampoline_addr(SB), RODATA, $8 +DATA ·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB) + +TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_accept(SB) + +GLOBL ·libc_accept_trampoline_addr(SB), RODATA, $8 +DATA ·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB) + +TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_bind(SB) + +GLOBL ·libc_bind_trampoline_addr(SB), RODATA, $8 +DATA ·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB) + +TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_connect(SB) + +GLOBL ·libc_connect_trampoline_addr(SB), RODATA, $8 +DATA ·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB) + +TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_socket(SB) + +GLOBL ·libc_socket_trampoline_addr(SB), RODATA, $8 +DATA ·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB) + +TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getsockopt(SB) + +GLOBL ·libc_getsockopt_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB) + +TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setsockopt(SB) + +GLOBL ·libc_setsockopt_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB) + +TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpeername(SB) + +GLOBL ·libc_getpeername_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB) + +TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getsockname(SB) + +GLOBL ·libc_getsockname_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB) + +TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_shutdown(SB) + +GLOBL ·libc_shutdown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB) + +TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_socketpair(SB) + +GLOBL ·libc_socketpair_trampoline_addr(SB), RODATA, $8 +DATA ·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB) + +TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_recvfrom(SB) + +GLOBL ·libc_recvfrom_trampoline_addr(SB), RODATA, $8 +DATA ·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB) + +TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sendto(SB) + +GLOBL ·libc_sendto_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB) + +TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_recvmsg(SB) + +GLOBL ·libc_recvmsg_trampoline_addr(SB), RODATA, $8 +DATA ·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB) + +TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sendmsg(SB) + +GLOBL ·libc_sendmsg_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB) + +TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_kevent(SB) + +GLOBL ·libc_kevent_trampoline_addr(SB), RODATA, $8 +DATA ·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB) + +TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_utimes(SB) + +GLOBL ·libc_utimes_trampoline_addr(SB), RODATA, $8 +DATA ·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB) + +TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_futimes(SB) + +GLOBL ·libc_futimes_trampoline_addr(SB), RODATA, $8 +DATA ·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB) + +TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_poll(SB) + +GLOBL ·libc_poll_trampoline_addr(SB), RODATA, $8 +DATA ·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB) + +TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_madvise(SB) + +GLOBL ·libc_madvise_trampoline_addr(SB), RODATA, $8 +DATA ·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB) + +TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mlock(SB) + +GLOBL ·libc_mlock_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB) + +TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mlockall(SB) + +GLOBL ·libc_mlockall_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB) + +TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mprotect(SB) + +GLOBL ·libc_mprotect_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB) + +TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_msync(SB) + +GLOBL ·libc_msync_trampoline_addr(SB), RODATA, $8 +DATA ·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB) + +TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_munlock(SB) + +GLOBL ·libc_munlock_trampoline_addr(SB), RODATA, $8 +DATA ·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB) + +TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_munlockall(SB) + +GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $8 +DATA ·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB) + +TEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pipe2(SB) + +GLOBL ·libc_pipe2_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pipe2_trampoline_addr(SB)/8, $libc_pipe2_trampoline<>(SB) + +TEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getdents(SB) + +GLOBL ·libc_getdents_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getdents_trampoline_addr(SB)/8, $libc_getdents_trampoline<>(SB) + +TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getcwd(SB) + +GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB) + +TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_ioctl(SB) + +GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB) + +TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sysctl(SB) + +GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) + +TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_ppoll(SB) + +GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8 +DATA ·libc_ppoll_trampoline_addr(SB)/8, $libc_ppoll_trampoline<>(SB) + +TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_access(SB) + +GLOBL ·libc_access_trampoline_addr(SB), RODATA, $8 +DATA ·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB) + +TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_adjtime(SB) + +GLOBL ·libc_adjtime_trampoline_addr(SB), RODATA, $8 +DATA ·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB) + +TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chdir(SB) + +GLOBL ·libc_chdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB) + +TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chflags(SB) + +GLOBL ·libc_chflags_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB) + +TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chmod(SB) + +GLOBL ·libc_chmod_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB) + +TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chown(SB) + +GLOBL ·libc_chown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB) + +TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chroot(SB) + +GLOBL ·libc_chroot_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB) + +TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_close(SB) + +GLOBL ·libc_close_trampoline_addr(SB), RODATA, $8 +DATA ·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB) + +TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_dup(SB) + +GLOBL ·libc_dup_trampoline_addr(SB), RODATA, $8 +DATA ·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB) + +TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_dup2(SB) + +GLOBL ·libc_dup2_trampoline_addr(SB), RODATA, $8 +DATA ·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB) + +TEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_dup3(SB) + +GLOBL ·libc_dup3_trampoline_addr(SB), RODATA, $8 +DATA ·libc_dup3_trampoline_addr(SB)/8, $libc_dup3_trampoline<>(SB) + +TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_exit(SB) + +GLOBL ·libc_exit_trampoline_addr(SB), RODATA, $8 +DATA ·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB) + +TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_faccessat(SB) + +GLOBL ·libc_faccessat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB) + +TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchdir(SB) + +GLOBL ·libc_fchdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB) + +TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchflags(SB) + +GLOBL ·libc_fchflags_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB) + +TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchmod(SB) + +GLOBL ·libc_fchmod_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB) + +TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchmodat(SB) + +GLOBL ·libc_fchmodat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB) + +TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchown(SB) + +GLOBL ·libc_fchown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB) + +TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchownat(SB) + +GLOBL ·libc_fchownat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB) + +TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_flock(SB) + +GLOBL ·libc_flock_trampoline_addr(SB), RODATA, $8 +DATA ·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB) + +TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fpathconf(SB) + +GLOBL ·libc_fpathconf_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB) + +TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fstat(SB) + +GLOBL ·libc_fstat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB) + +TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fstatat(SB) + +GLOBL ·libc_fstatat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB) + +TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fstatfs(SB) + +GLOBL ·libc_fstatfs_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB) + +TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fsync(SB) + +GLOBL ·libc_fsync_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB) + +TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_ftruncate(SB) + +GLOBL ·libc_ftruncate_trampoline_addr(SB), RODATA, $8 +DATA ·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB) + +TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getegid(SB) + +GLOBL ·libc_getegid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB) + +TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_geteuid(SB) + +GLOBL ·libc_geteuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB) + +TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getgid(SB) + +GLOBL ·libc_getgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB) + +TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpgid(SB) + +GLOBL ·libc_getpgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB) + +TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpgrp(SB) + +GLOBL ·libc_getpgrp_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB) + +TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpid(SB) + +GLOBL ·libc_getpid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB) + +TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getppid(SB) + +GLOBL ·libc_getppid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB) + +TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpriority(SB) + +GLOBL ·libc_getpriority_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB) + +TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getrlimit(SB) + +GLOBL ·libc_getrlimit_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB) + +TEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getrtable(SB) + +GLOBL ·libc_getrtable_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getrtable_trampoline_addr(SB)/8, $libc_getrtable_trampoline<>(SB) + +TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getrusage(SB) + +GLOBL ·libc_getrusage_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB) + +TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getsid(SB) + +GLOBL ·libc_getsid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB) + +TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_gettimeofday(SB) + +GLOBL ·libc_gettimeofday_trampoline_addr(SB), RODATA, $8 +DATA ·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB) + +TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getuid(SB) + +GLOBL ·libc_getuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB) + +TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_issetugid(SB) + +GLOBL ·libc_issetugid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB) + +TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_kill(SB) + +GLOBL ·libc_kill_trampoline_addr(SB), RODATA, $8 +DATA ·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB) + +TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_kqueue(SB) + +GLOBL ·libc_kqueue_trampoline_addr(SB), RODATA, $8 +DATA ·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB) + +TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_lchown(SB) + +GLOBL ·libc_lchown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB) + +TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_link(SB) + +GLOBL ·libc_link_trampoline_addr(SB), RODATA, $8 +DATA ·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB) + +TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_linkat(SB) + +GLOBL ·libc_linkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB) + +TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_listen(SB) + +GLOBL ·libc_listen_trampoline_addr(SB), RODATA, $8 +DATA ·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB) + +TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_lstat(SB) + +GLOBL ·libc_lstat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB) + +TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mkdir(SB) + +GLOBL ·libc_mkdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB) + +TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mkdirat(SB) + +GLOBL ·libc_mkdirat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB) + +TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mkfifo(SB) + +GLOBL ·libc_mkfifo_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB) + +TEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mkfifoat(SB) + +GLOBL ·libc_mkfifoat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mkfifoat_trampoline_addr(SB)/8, $libc_mkfifoat_trampoline<>(SB) + +TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mknod(SB) + +GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB) + +TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mknodat(SB) + +GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB) + +TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_nanosleep(SB) + +GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $8 +DATA ·libc_nanosleep_trampoline_addr(SB)/8, $libc_nanosleep_trampoline<>(SB) + +TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_open(SB) + +GLOBL ·libc_open_trampoline_addr(SB), RODATA, $8 +DATA ·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB) + +TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_openat(SB) + +GLOBL ·libc_openat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB) + +TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pathconf(SB) + +GLOBL ·libc_pathconf_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB) + +TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pread(SB) + +GLOBL ·libc_pread_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB) + +TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pwrite(SB) + +GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB) + +TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_read(SB) + +GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8 +DATA ·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB) + +TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readlink(SB) + +GLOBL ·libc_readlink_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB) + +TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readlinkat(SB) + +GLOBL ·libc_readlinkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB) + +TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_rename(SB) + +GLOBL ·libc_rename_trampoline_addr(SB), RODATA, $8 +DATA ·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB) + +TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_renameat(SB) + +GLOBL ·libc_renameat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB) + +TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_revoke(SB) + +GLOBL ·libc_revoke_trampoline_addr(SB), RODATA, $8 +DATA ·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB) + +TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_rmdir(SB) + +GLOBL ·libc_rmdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB) + +TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_lseek(SB) + +GLOBL ·libc_lseek_trampoline_addr(SB), RODATA, $8 +DATA ·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB) + +TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_select(SB) + +GLOBL ·libc_select_trampoline_addr(SB), RODATA, $8 +DATA ·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB) + +TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setegid(SB) + +GLOBL ·libc_setegid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB) + +TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_seteuid(SB) + +GLOBL ·libc_seteuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB) + +TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setgid(SB) + +GLOBL ·libc_setgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB) + +TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setlogin(SB) + +GLOBL ·libc_setlogin_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB) + +TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setpgid(SB) + +GLOBL ·libc_setpgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB) + +TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setpriority(SB) + +GLOBL ·libc_setpriority_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB) + +TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setregid(SB) + +GLOBL ·libc_setregid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB) + +TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setreuid(SB) + +GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB) + +TEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setresgid(SB) + +GLOBL ·libc_setresgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setresgid_trampoline_addr(SB)/8, $libc_setresgid_trampoline<>(SB) + +TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setresuid(SB) + +GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB) + +TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setrlimit(SB) + +GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) + +TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setrtable(SB) + +GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setrtable_trampoline_addr(SB)/8, $libc_setrtable_trampoline<>(SB) + +TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setsid(SB) + +GLOBL ·libc_setsid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB) + +TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_settimeofday(SB) + +GLOBL ·libc_settimeofday_trampoline_addr(SB), RODATA, $8 +DATA ·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB) + +TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setuid(SB) + +GLOBL ·libc_setuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB) + +TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_stat(SB) + +GLOBL ·libc_stat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB) + +TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_statfs(SB) + +GLOBL ·libc_statfs_trampoline_addr(SB), RODATA, $8 +DATA ·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB) + +TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_symlink(SB) + +GLOBL ·libc_symlink_trampoline_addr(SB), RODATA, $8 +DATA ·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB) + +TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_symlinkat(SB) + +GLOBL ·libc_symlinkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB) + +TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sync(SB) + +GLOBL ·libc_sync_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB) + +TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_truncate(SB) + +GLOBL ·libc_truncate_trampoline_addr(SB), RODATA, $8 +DATA ·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB) + +TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_umask(SB) + +GLOBL ·libc_umask_trampoline_addr(SB), RODATA, $8 +DATA ·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB) + +TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unlink(SB) + +GLOBL ·libc_unlink_trampoline_addr(SB), RODATA, $8 +DATA ·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB) + +TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unlinkat(SB) + +GLOBL ·libc_unlinkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB) + +TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unmount(SB) + +GLOBL ·libc_unmount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB) + +TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_write(SB) + +GLOBL ·libc_write_trampoline_addr(SB), RODATA, $8 +DATA ·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB) + +TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mmap(SB) + +GLOBL ·libc_mmap_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB) + +TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_munmap(SB) + +GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 +DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) + +TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_utimensat(SB) + +GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s new file mode 100644 index 0000000..9ad116d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s @@ -0,0 +1,796 @@ +// go run mkasm.go openbsd arm +// Code generated by the command above; DO NOT EDIT. + +#include "textflag.h" + +TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getgroups(SB) + +GLOBL ·libc_getgroups_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getgroups_trampoline_addr(SB)/4, $libc_getgroups_trampoline<>(SB) + +TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setgroups(SB) + +GLOBL ·libc_setgroups_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setgroups_trampoline_addr(SB)/4, $libc_setgroups_trampoline<>(SB) + +TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_wait4(SB) + +GLOBL ·libc_wait4_trampoline_addr(SB), RODATA, $4 +DATA ·libc_wait4_trampoline_addr(SB)/4, $libc_wait4_trampoline<>(SB) + +TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_accept(SB) + +GLOBL ·libc_accept_trampoline_addr(SB), RODATA, $4 +DATA ·libc_accept_trampoline_addr(SB)/4, $libc_accept_trampoline<>(SB) + +TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_bind(SB) + +GLOBL ·libc_bind_trampoline_addr(SB), RODATA, $4 +DATA ·libc_bind_trampoline_addr(SB)/4, $libc_bind_trampoline<>(SB) + +TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_connect(SB) + +GLOBL ·libc_connect_trampoline_addr(SB), RODATA, $4 +DATA ·libc_connect_trampoline_addr(SB)/4, $libc_connect_trampoline<>(SB) + +TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_socket(SB) + +GLOBL ·libc_socket_trampoline_addr(SB), RODATA, $4 +DATA ·libc_socket_trampoline_addr(SB)/4, $libc_socket_trampoline<>(SB) + +TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getsockopt(SB) + +GLOBL ·libc_getsockopt_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getsockopt_trampoline_addr(SB)/4, $libc_getsockopt_trampoline<>(SB) + +TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setsockopt(SB) + +GLOBL ·libc_setsockopt_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setsockopt_trampoline_addr(SB)/4, $libc_setsockopt_trampoline<>(SB) + +TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpeername(SB) + +GLOBL ·libc_getpeername_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getpeername_trampoline_addr(SB)/4, $libc_getpeername_trampoline<>(SB) + +TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getsockname(SB) + +GLOBL ·libc_getsockname_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getsockname_trampoline_addr(SB)/4, $libc_getsockname_trampoline<>(SB) + +TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_shutdown(SB) + +GLOBL ·libc_shutdown_trampoline_addr(SB), RODATA, $4 +DATA ·libc_shutdown_trampoline_addr(SB)/4, $libc_shutdown_trampoline<>(SB) + +TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_socketpair(SB) + +GLOBL ·libc_socketpair_trampoline_addr(SB), RODATA, $4 +DATA ·libc_socketpair_trampoline_addr(SB)/4, $libc_socketpair_trampoline<>(SB) + +TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_recvfrom(SB) + +GLOBL ·libc_recvfrom_trampoline_addr(SB), RODATA, $4 +DATA ·libc_recvfrom_trampoline_addr(SB)/4, $libc_recvfrom_trampoline<>(SB) + +TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sendto(SB) + +GLOBL ·libc_sendto_trampoline_addr(SB), RODATA, $4 +DATA ·libc_sendto_trampoline_addr(SB)/4, $libc_sendto_trampoline<>(SB) + +TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_recvmsg(SB) + +GLOBL ·libc_recvmsg_trampoline_addr(SB), RODATA, $4 +DATA ·libc_recvmsg_trampoline_addr(SB)/4, $libc_recvmsg_trampoline<>(SB) + +TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sendmsg(SB) + +GLOBL ·libc_sendmsg_trampoline_addr(SB), RODATA, $4 +DATA ·libc_sendmsg_trampoline_addr(SB)/4, $libc_sendmsg_trampoline<>(SB) + +TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_kevent(SB) + +GLOBL ·libc_kevent_trampoline_addr(SB), RODATA, $4 +DATA ·libc_kevent_trampoline_addr(SB)/4, $libc_kevent_trampoline<>(SB) + +TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_utimes(SB) + +GLOBL ·libc_utimes_trampoline_addr(SB), RODATA, $4 +DATA ·libc_utimes_trampoline_addr(SB)/4, $libc_utimes_trampoline<>(SB) + +TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_futimes(SB) + +GLOBL ·libc_futimes_trampoline_addr(SB), RODATA, $4 +DATA ·libc_futimes_trampoline_addr(SB)/4, $libc_futimes_trampoline<>(SB) + +TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_poll(SB) + +GLOBL ·libc_poll_trampoline_addr(SB), RODATA, $4 +DATA ·libc_poll_trampoline_addr(SB)/4, $libc_poll_trampoline<>(SB) + +TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_madvise(SB) + +GLOBL ·libc_madvise_trampoline_addr(SB), RODATA, $4 +DATA ·libc_madvise_trampoline_addr(SB)/4, $libc_madvise_trampoline<>(SB) + +TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mlock(SB) + +GLOBL ·libc_mlock_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mlock_trampoline_addr(SB)/4, $libc_mlock_trampoline<>(SB) + +TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mlockall(SB) + +GLOBL ·libc_mlockall_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mlockall_trampoline_addr(SB)/4, $libc_mlockall_trampoline<>(SB) + +TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mprotect(SB) + +GLOBL ·libc_mprotect_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mprotect_trampoline_addr(SB)/4, $libc_mprotect_trampoline<>(SB) + +TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_msync(SB) + +GLOBL ·libc_msync_trampoline_addr(SB), RODATA, $4 +DATA ·libc_msync_trampoline_addr(SB)/4, $libc_msync_trampoline<>(SB) + +TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_munlock(SB) + +GLOBL ·libc_munlock_trampoline_addr(SB), RODATA, $4 +DATA ·libc_munlock_trampoline_addr(SB)/4, $libc_munlock_trampoline<>(SB) + +TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_munlockall(SB) + +GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $4 +DATA ·libc_munlockall_trampoline_addr(SB)/4, $libc_munlockall_trampoline<>(SB) + +TEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pipe2(SB) + +GLOBL ·libc_pipe2_trampoline_addr(SB), RODATA, $4 +DATA ·libc_pipe2_trampoline_addr(SB)/4, $libc_pipe2_trampoline<>(SB) + +TEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getdents(SB) + +GLOBL ·libc_getdents_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getdents_trampoline_addr(SB)/4, $libc_getdents_trampoline<>(SB) + +TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getcwd(SB) + +GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getcwd_trampoline_addr(SB)/4, $libc_getcwd_trampoline<>(SB) + +TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_ioctl(SB) + +GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $4 +DATA ·libc_ioctl_trampoline_addr(SB)/4, $libc_ioctl_trampoline<>(SB) + +TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sysctl(SB) + +GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $4 +DATA ·libc_sysctl_trampoline_addr(SB)/4, $libc_sysctl_trampoline<>(SB) + +TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_ppoll(SB) + +GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $4 +DATA ·libc_ppoll_trampoline_addr(SB)/4, $libc_ppoll_trampoline<>(SB) + +TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_access(SB) + +GLOBL ·libc_access_trampoline_addr(SB), RODATA, $4 +DATA ·libc_access_trampoline_addr(SB)/4, $libc_access_trampoline<>(SB) + +TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_adjtime(SB) + +GLOBL ·libc_adjtime_trampoline_addr(SB), RODATA, $4 +DATA ·libc_adjtime_trampoline_addr(SB)/4, $libc_adjtime_trampoline<>(SB) + +TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chdir(SB) + +GLOBL ·libc_chdir_trampoline_addr(SB), RODATA, $4 +DATA ·libc_chdir_trampoline_addr(SB)/4, $libc_chdir_trampoline<>(SB) + +TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chflags(SB) + +GLOBL ·libc_chflags_trampoline_addr(SB), RODATA, $4 +DATA ·libc_chflags_trampoline_addr(SB)/4, $libc_chflags_trampoline<>(SB) + +TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chmod(SB) + +GLOBL ·libc_chmod_trampoline_addr(SB), RODATA, $4 +DATA ·libc_chmod_trampoline_addr(SB)/4, $libc_chmod_trampoline<>(SB) + +TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chown(SB) + +GLOBL ·libc_chown_trampoline_addr(SB), RODATA, $4 +DATA ·libc_chown_trampoline_addr(SB)/4, $libc_chown_trampoline<>(SB) + +TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chroot(SB) + +GLOBL ·libc_chroot_trampoline_addr(SB), RODATA, $4 +DATA ·libc_chroot_trampoline_addr(SB)/4, $libc_chroot_trampoline<>(SB) + +TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_close(SB) + +GLOBL ·libc_close_trampoline_addr(SB), RODATA, $4 +DATA ·libc_close_trampoline_addr(SB)/4, $libc_close_trampoline<>(SB) + +TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_dup(SB) + +GLOBL ·libc_dup_trampoline_addr(SB), RODATA, $4 +DATA ·libc_dup_trampoline_addr(SB)/4, $libc_dup_trampoline<>(SB) + +TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_dup2(SB) + +GLOBL ·libc_dup2_trampoline_addr(SB), RODATA, $4 +DATA ·libc_dup2_trampoline_addr(SB)/4, $libc_dup2_trampoline<>(SB) + +TEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_dup3(SB) + +GLOBL ·libc_dup3_trampoline_addr(SB), RODATA, $4 +DATA ·libc_dup3_trampoline_addr(SB)/4, $libc_dup3_trampoline<>(SB) + +TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_exit(SB) + +GLOBL ·libc_exit_trampoline_addr(SB), RODATA, $4 +DATA ·libc_exit_trampoline_addr(SB)/4, $libc_exit_trampoline<>(SB) + +TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_faccessat(SB) + +GLOBL ·libc_faccessat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_faccessat_trampoline_addr(SB)/4, $libc_faccessat_trampoline<>(SB) + +TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchdir(SB) + +GLOBL ·libc_fchdir_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fchdir_trampoline_addr(SB)/4, $libc_fchdir_trampoline<>(SB) + +TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchflags(SB) + +GLOBL ·libc_fchflags_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fchflags_trampoline_addr(SB)/4, $libc_fchflags_trampoline<>(SB) + +TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchmod(SB) + +GLOBL ·libc_fchmod_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fchmod_trampoline_addr(SB)/4, $libc_fchmod_trampoline<>(SB) + +TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchmodat(SB) + +GLOBL ·libc_fchmodat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fchmodat_trampoline_addr(SB)/4, $libc_fchmodat_trampoline<>(SB) + +TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchown(SB) + +GLOBL ·libc_fchown_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fchown_trampoline_addr(SB)/4, $libc_fchown_trampoline<>(SB) + +TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchownat(SB) + +GLOBL ·libc_fchownat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fchownat_trampoline_addr(SB)/4, $libc_fchownat_trampoline<>(SB) + +TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_flock(SB) + +GLOBL ·libc_flock_trampoline_addr(SB), RODATA, $4 +DATA ·libc_flock_trampoline_addr(SB)/4, $libc_flock_trampoline<>(SB) + +TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fpathconf(SB) + +GLOBL ·libc_fpathconf_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fpathconf_trampoline_addr(SB)/4, $libc_fpathconf_trampoline<>(SB) + +TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fstat(SB) + +GLOBL ·libc_fstat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fstat_trampoline_addr(SB)/4, $libc_fstat_trampoline<>(SB) + +TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fstatat(SB) + +GLOBL ·libc_fstatat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fstatat_trampoline_addr(SB)/4, $libc_fstatat_trampoline<>(SB) + +TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fstatfs(SB) + +GLOBL ·libc_fstatfs_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fstatfs_trampoline_addr(SB)/4, $libc_fstatfs_trampoline<>(SB) + +TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fsync(SB) + +GLOBL ·libc_fsync_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fsync_trampoline_addr(SB)/4, $libc_fsync_trampoline<>(SB) + +TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_ftruncate(SB) + +GLOBL ·libc_ftruncate_trampoline_addr(SB), RODATA, $4 +DATA ·libc_ftruncate_trampoline_addr(SB)/4, $libc_ftruncate_trampoline<>(SB) + +TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getegid(SB) + +GLOBL ·libc_getegid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getegid_trampoline_addr(SB)/4, $libc_getegid_trampoline<>(SB) + +TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_geteuid(SB) + +GLOBL ·libc_geteuid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_geteuid_trampoline_addr(SB)/4, $libc_geteuid_trampoline<>(SB) + +TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getgid(SB) + +GLOBL ·libc_getgid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getgid_trampoline_addr(SB)/4, $libc_getgid_trampoline<>(SB) + +TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpgid(SB) + +GLOBL ·libc_getpgid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getpgid_trampoline_addr(SB)/4, $libc_getpgid_trampoline<>(SB) + +TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpgrp(SB) + +GLOBL ·libc_getpgrp_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getpgrp_trampoline_addr(SB)/4, $libc_getpgrp_trampoline<>(SB) + +TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpid(SB) + +GLOBL ·libc_getpid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getpid_trampoline_addr(SB)/4, $libc_getpid_trampoline<>(SB) + +TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getppid(SB) + +GLOBL ·libc_getppid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getppid_trampoline_addr(SB)/4, $libc_getppid_trampoline<>(SB) + +TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpriority(SB) + +GLOBL ·libc_getpriority_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getpriority_trampoline_addr(SB)/4, $libc_getpriority_trampoline<>(SB) + +TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getrlimit(SB) + +GLOBL ·libc_getrlimit_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getrlimit_trampoline_addr(SB)/4, $libc_getrlimit_trampoline<>(SB) + +TEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getrtable(SB) + +GLOBL ·libc_getrtable_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getrtable_trampoline_addr(SB)/4, $libc_getrtable_trampoline<>(SB) + +TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getrusage(SB) + +GLOBL ·libc_getrusage_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getrusage_trampoline_addr(SB)/4, $libc_getrusage_trampoline<>(SB) + +TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getsid(SB) + +GLOBL ·libc_getsid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getsid_trampoline_addr(SB)/4, $libc_getsid_trampoline<>(SB) + +TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_gettimeofday(SB) + +GLOBL ·libc_gettimeofday_trampoline_addr(SB), RODATA, $4 +DATA ·libc_gettimeofday_trampoline_addr(SB)/4, $libc_gettimeofday_trampoline<>(SB) + +TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getuid(SB) + +GLOBL ·libc_getuid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getuid_trampoline_addr(SB)/4, $libc_getuid_trampoline<>(SB) + +TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_issetugid(SB) + +GLOBL ·libc_issetugid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_issetugid_trampoline_addr(SB)/4, $libc_issetugid_trampoline<>(SB) + +TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_kill(SB) + +GLOBL ·libc_kill_trampoline_addr(SB), RODATA, $4 +DATA ·libc_kill_trampoline_addr(SB)/4, $libc_kill_trampoline<>(SB) + +TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_kqueue(SB) + +GLOBL ·libc_kqueue_trampoline_addr(SB), RODATA, $4 +DATA ·libc_kqueue_trampoline_addr(SB)/4, $libc_kqueue_trampoline<>(SB) + +TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_lchown(SB) + +GLOBL ·libc_lchown_trampoline_addr(SB), RODATA, $4 +DATA ·libc_lchown_trampoline_addr(SB)/4, $libc_lchown_trampoline<>(SB) + +TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_link(SB) + +GLOBL ·libc_link_trampoline_addr(SB), RODATA, $4 +DATA ·libc_link_trampoline_addr(SB)/4, $libc_link_trampoline<>(SB) + +TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_linkat(SB) + +GLOBL ·libc_linkat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_linkat_trampoline_addr(SB)/4, $libc_linkat_trampoline<>(SB) + +TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_listen(SB) + +GLOBL ·libc_listen_trampoline_addr(SB), RODATA, $4 +DATA ·libc_listen_trampoline_addr(SB)/4, $libc_listen_trampoline<>(SB) + +TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_lstat(SB) + +GLOBL ·libc_lstat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_lstat_trampoline_addr(SB)/4, $libc_lstat_trampoline<>(SB) + +TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mkdir(SB) + +GLOBL ·libc_mkdir_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mkdir_trampoline_addr(SB)/4, $libc_mkdir_trampoline<>(SB) + +TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mkdirat(SB) + +GLOBL ·libc_mkdirat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mkdirat_trampoline_addr(SB)/4, $libc_mkdirat_trampoline<>(SB) + +TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mkfifo(SB) + +GLOBL ·libc_mkfifo_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mkfifo_trampoline_addr(SB)/4, $libc_mkfifo_trampoline<>(SB) + +TEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mkfifoat(SB) + +GLOBL ·libc_mkfifoat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mkfifoat_trampoline_addr(SB)/4, $libc_mkfifoat_trampoline<>(SB) + +TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mknod(SB) + +GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mknod_trampoline_addr(SB)/4, $libc_mknod_trampoline<>(SB) + +TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mknodat(SB) + +GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mknodat_trampoline_addr(SB)/4, $libc_mknodat_trampoline<>(SB) + +TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_nanosleep(SB) + +GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $4 +DATA ·libc_nanosleep_trampoline_addr(SB)/4, $libc_nanosleep_trampoline<>(SB) + +TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_open(SB) + +GLOBL ·libc_open_trampoline_addr(SB), RODATA, $4 +DATA ·libc_open_trampoline_addr(SB)/4, $libc_open_trampoline<>(SB) + +TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_openat(SB) + +GLOBL ·libc_openat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_openat_trampoline_addr(SB)/4, $libc_openat_trampoline<>(SB) + +TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pathconf(SB) + +GLOBL ·libc_pathconf_trampoline_addr(SB), RODATA, $4 +DATA ·libc_pathconf_trampoline_addr(SB)/4, $libc_pathconf_trampoline<>(SB) + +TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pread(SB) + +GLOBL ·libc_pread_trampoline_addr(SB), RODATA, $4 +DATA ·libc_pread_trampoline_addr(SB)/4, $libc_pread_trampoline<>(SB) + +TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pwrite(SB) + +GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $4 +DATA ·libc_pwrite_trampoline_addr(SB)/4, $libc_pwrite_trampoline<>(SB) + +TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_read(SB) + +GLOBL ·libc_read_trampoline_addr(SB), RODATA, $4 +DATA ·libc_read_trampoline_addr(SB)/4, $libc_read_trampoline<>(SB) + +TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readlink(SB) + +GLOBL ·libc_readlink_trampoline_addr(SB), RODATA, $4 +DATA ·libc_readlink_trampoline_addr(SB)/4, $libc_readlink_trampoline<>(SB) + +TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readlinkat(SB) + +GLOBL ·libc_readlinkat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_readlinkat_trampoline_addr(SB)/4, $libc_readlinkat_trampoline<>(SB) + +TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_rename(SB) + +GLOBL ·libc_rename_trampoline_addr(SB), RODATA, $4 +DATA ·libc_rename_trampoline_addr(SB)/4, $libc_rename_trampoline<>(SB) + +TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_renameat(SB) + +GLOBL ·libc_renameat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_renameat_trampoline_addr(SB)/4, $libc_renameat_trampoline<>(SB) + +TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_revoke(SB) + +GLOBL ·libc_revoke_trampoline_addr(SB), RODATA, $4 +DATA ·libc_revoke_trampoline_addr(SB)/4, $libc_revoke_trampoline<>(SB) + +TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_rmdir(SB) + +GLOBL ·libc_rmdir_trampoline_addr(SB), RODATA, $4 +DATA ·libc_rmdir_trampoline_addr(SB)/4, $libc_rmdir_trampoline<>(SB) + +TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_lseek(SB) + +GLOBL ·libc_lseek_trampoline_addr(SB), RODATA, $4 +DATA ·libc_lseek_trampoline_addr(SB)/4, $libc_lseek_trampoline<>(SB) + +TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_select(SB) + +GLOBL ·libc_select_trampoline_addr(SB), RODATA, $4 +DATA ·libc_select_trampoline_addr(SB)/4, $libc_select_trampoline<>(SB) + +TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setegid(SB) + +GLOBL ·libc_setegid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setegid_trampoline_addr(SB)/4, $libc_setegid_trampoline<>(SB) + +TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_seteuid(SB) + +GLOBL ·libc_seteuid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_seteuid_trampoline_addr(SB)/4, $libc_seteuid_trampoline<>(SB) + +TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setgid(SB) + +GLOBL ·libc_setgid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setgid_trampoline_addr(SB)/4, $libc_setgid_trampoline<>(SB) + +TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setlogin(SB) + +GLOBL ·libc_setlogin_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setlogin_trampoline_addr(SB)/4, $libc_setlogin_trampoline<>(SB) + +TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setpgid(SB) + +GLOBL ·libc_setpgid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setpgid_trampoline_addr(SB)/4, $libc_setpgid_trampoline<>(SB) + +TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setpriority(SB) + +GLOBL ·libc_setpriority_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setpriority_trampoline_addr(SB)/4, $libc_setpriority_trampoline<>(SB) + +TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setregid(SB) + +GLOBL ·libc_setregid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setregid_trampoline_addr(SB)/4, $libc_setregid_trampoline<>(SB) + +TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setreuid(SB) + +GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setreuid_trampoline_addr(SB)/4, $libc_setreuid_trampoline<>(SB) + +TEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setresgid(SB) + +GLOBL ·libc_setresgid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setresgid_trampoline_addr(SB)/4, $libc_setresgid_trampoline<>(SB) + +TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setresuid(SB) + +GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setresuid_trampoline_addr(SB)/4, $libc_setresuid_trampoline<>(SB) + +TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setrlimit(SB) + +GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setrlimit_trampoline_addr(SB)/4, $libc_setrlimit_trampoline<>(SB) + +TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setrtable(SB) + +GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setrtable_trampoline_addr(SB)/4, $libc_setrtable_trampoline<>(SB) + +TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setsid(SB) + +GLOBL ·libc_setsid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setsid_trampoline_addr(SB)/4, $libc_setsid_trampoline<>(SB) + +TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_settimeofday(SB) + +GLOBL ·libc_settimeofday_trampoline_addr(SB), RODATA, $4 +DATA ·libc_settimeofday_trampoline_addr(SB)/4, $libc_settimeofday_trampoline<>(SB) + +TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setuid(SB) + +GLOBL ·libc_setuid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_setuid_trampoline_addr(SB)/4, $libc_setuid_trampoline<>(SB) + +TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_stat(SB) + +GLOBL ·libc_stat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_stat_trampoline_addr(SB)/4, $libc_stat_trampoline<>(SB) + +TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_statfs(SB) + +GLOBL ·libc_statfs_trampoline_addr(SB), RODATA, $4 +DATA ·libc_statfs_trampoline_addr(SB)/4, $libc_statfs_trampoline<>(SB) + +TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_symlink(SB) + +GLOBL ·libc_symlink_trampoline_addr(SB), RODATA, $4 +DATA ·libc_symlink_trampoline_addr(SB)/4, $libc_symlink_trampoline<>(SB) + +TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_symlinkat(SB) + +GLOBL ·libc_symlinkat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_symlinkat_trampoline_addr(SB)/4, $libc_symlinkat_trampoline<>(SB) + +TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sync(SB) + +GLOBL ·libc_sync_trampoline_addr(SB), RODATA, $4 +DATA ·libc_sync_trampoline_addr(SB)/4, $libc_sync_trampoline<>(SB) + +TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_truncate(SB) + +GLOBL ·libc_truncate_trampoline_addr(SB), RODATA, $4 +DATA ·libc_truncate_trampoline_addr(SB)/4, $libc_truncate_trampoline<>(SB) + +TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_umask(SB) + +GLOBL ·libc_umask_trampoline_addr(SB), RODATA, $4 +DATA ·libc_umask_trampoline_addr(SB)/4, $libc_umask_trampoline<>(SB) + +TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unlink(SB) + +GLOBL ·libc_unlink_trampoline_addr(SB), RODATA, $4 +DATA ·libc_unlink_trampoline_addr(SB)/4, $libc_unlink_trampoline<>(SB) + +TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unlinkat(SB) + +GLOBL ·libc_unlinkat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_unlinkat_trampoline_addr(SB)/4, $libc_unlinkat_trampoline<>(SB) + +TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unmount(SB) + +GLOBL ·libc_unmount_trampoline_addr(SB), RODATA, $4 +DATA ·libc_unmount_trampoline_addr(SB)/4, $libc_unmount_trampoline<>(SB) + +TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_write(SB) + +GLOBL ·libc_write_trampoline_addr(SB), RODATA, $4 +DATA ·libc_write_trampoline_addr(SB)/4, $libc_write_trampoline<>(SB) + +TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mmap(SB) + +GLOBL ·libc_mmap_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mmap_trampoline_addr(SB)/4, $libc_mmap_trampoline<>(SB) + +TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_munmap(SB) + +GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $4 +DATA ·libc_munmap_trampoline_addr(SB)/4, $libc_munmap_trampoline<>(SB) + +TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_utimensat(SB) + +GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_utimensat_trampoline_addr(SB)/4, $libc_utimensat_trampoline<>(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s new file mode 100644 index 0000000..4efeff9 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s @@ -0,0 +1,796 @@ +// go run mkasm.go openbsd arm64 +// Code generated by the command above; DO NOT EDIT. + +#include "textflag.h" + +TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getgroups(SB) + +GLOBL ·libc_getgroups_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB) + +TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setgroups(SB) + +GLOBL ·libc_setgroups_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB) + +TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_wait4(SB) + +GLOBL ·libc_wait4_trampoline_addr(SB), RODATA, $8 +DATA ·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB) + +TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_accept(SB) + +GLOBL ·libc_accept_trampoline_addr(SB), RODATA, $8 +DATA ·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB) + +TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_bind(SB) + +GLOBL ·libc_bind_trampoline_addr(SB), RODATA, $8 +DATA ·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB) + +TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_connect(SB) + +GLOBL ·libc_connect_trampoline_addr(SB), RODATA, $8 +DATA ·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB) + +TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_socket(SB) + +GLOBL ·libc_socket_trampoline_addr(SB), RODATA, $8 +DATA ·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB) + +TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getsockopt(SB) + +GLOBL ·libc_getsockopt_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB) + +TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setsockopt(SB) + +GLOBL ·libc_setsockopt_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB) + +TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpeername(SB) + +GLOBL ·libc_getpeername_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB) + +TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getsockname(SB) + +GLOBL ·libc_getsockname_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB) + +TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_shutdown(SB) + +GLOBL ·libc_shutdown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB) + +TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_socketpair(SB) + +GLOBL ·libc_socketpair_trampoline_addr(SB), RODATA, $8 +DATA ·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB) + +TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_recvfrom(SB) + +GLOBL ·libc_recvfrom_trampoline_addr(SB), RODATA, $8 +DATA ·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB) + +TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sendto(SB) + +GLOBL ·libc_sendto_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB) + +TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_recvmsg(SB) + +GLOBL ·libc_recvmsg_trampoline_addr(SB), RODATA, $8 +DATA ·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB) + +TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sendmsg(SB) + +GLOBL ·libc_sendmsg_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB) + +TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_kevent(SB) + +GLOBL ·libc_kevent_trampoline_addr(SB), RODATA, $8 +DATA ·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB) + +TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_utimes(SB) + +GLOBL ·libc_utimes_trampoline_addr(SB), RODATA, $8 +DATA ·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB) + +TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_futimes(SB) + +GLOBL ·libc_futimes_trampoline_addr(SB), RODATA, $8 +DATA ·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB) + +TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_poll(SB) + +GLOBL ·libc_poll_trampoline_addr(SB), RODATA, $8 +DATA ·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB) + +TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_madvise(SB) + +GLOBL ·libc_madvise_trampoline_addr(SB), RODATA, $8 +DATA ·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB) + +TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mlock(SB) + +GLOBL ·libc_mlock_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB) + +TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mlockall(SB) + +GLOBL ·libc_mlockall_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB) + +TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mprotect(SB) + +GLOBL ·libc_mprotect_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB) + +TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_msync(SB) + +GLOBL ·libc_msync_trampoline_addr(SB), RODATA, $8 +DATA ·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB) + +TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_munlock(SB) + +GLOBL ·libc_munlock_trampoline_addr(SB), RODATA, $8 +DATA ·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB) + +TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_munlockall(SB) + +GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $8 +DATA ·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB) + +TEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pipe2(SB) + +GLOBL ·libc_pipe2_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pipe2_trampoline_addr(SB)/8, $libc_pipe2_trampoline<>(SB) + +TEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getdents(SB) + +GLOBL ·libc_getdents_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getdents_trampoline_addr(SB)/8, $libc_getdents_trampoline<>(SB) + +TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getcwd(SB) + +GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB) + +TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_ioctl(SB) + +GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB) + +TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sysctl(SB) + +GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) + +TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_ppoll(SB) + +GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8 +DATA ·libc_ppoll_trampoline_addr(SB)/8, $libc_ppoll_trampoline<>(SB) + +TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_access(SB) + +GLOBL ·libc_access_trampoline_addr(SB), RODATA, $8 +DATA ·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB) + +TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_adjtime(SB) + +GLOBL ·libc_adjtime_trampoline_addr(SB), RODATA, $8 +DATA ·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB) + +TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chdir(SB) + +GLOBL ·libc_chdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB) + +TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chflags(SB) + +GLOBL ·libc_chflags_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB) + +TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chmod(SB) + +GLOBL ·libc_chmod_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB) + +TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chown(SB) + +GLOBL ·libc_chown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB) + +TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_chroot(SB) + +GLOBL ·libc_chroot_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB) + +TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_close(SB) + +GLOBL ·libc_close_trampoline_addr(SB), RODATA, $8 +DATA ·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB) + +TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_dup(SB) + +GLOBL ·libc_dup_trampoline_addr(SB), RODATA, $8 +DATA ·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB) + +TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_dup2(SB) + +GLOBL ·libc_dup2_trampoline_addr(SB), RODATA, $8 +DATA ·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB) + +TEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_dup3(SB) + +GLOBL ·libc_dup3_trampoline_addr(SB), RODATA, $8 +DATA ·libc_dup3_trampoline_addr(SB)/8, $libc_dup3_trampoline<>(SB) + +TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_exit(SB) + +GLOBL ·libc_exit_trampoline_addr(SB), RODATA, $8 +DATA ·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB) + +TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_faccessat(SB) + +GLOBL ·libc_faccessat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB) + +TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchdir(SB) + +GLOBL ·libc_fchdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB) + +TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchflags(SB) + +GLOBL ·libc_fchflags_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB) + +TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchmod(SB) + +GLOBL ·libc_fchmod_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB) + +TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchmodat(SB) + +GLOBL ·libc_fchmodat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB) + +TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchown(SB) + +GLOBL ·libc_fchown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB) + +TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fchownat(SB) + +GLOBL ·libc_fchownat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB) + +TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_flock(SB) + +GLOBL ·libc_flock_trampoline_addr(SB), RODATA, $8 +DATA ·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB) + +TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fpathconf(SB) + +GLOBL ·libc_fpathconf_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB) + +TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fstat(SB) + +GLOBL ·libc_fstat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB) + +TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fstatat(SB) + +GLOBL ·libc_fstatat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB) + +TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fstatfs(SB) + +GLOBL ·libc_fstatfs_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB) + +TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fsync(SB) + +GLOBL ·libc_fsync_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB) + +TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_ftruncate(SB) + +GLOBL ·libc_ftruncate_trampoline_addr(SB), RODATA, $8 +DATA ·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB) + +TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getegid(SB) + +GLOBL ·libc_getegid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB) + +TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_geteuid(SB) + +GLOBL ·libc_geteuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB) + +TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getgid(SB) + +GLOBL ·libc_getgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB) + +TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpgid(SB) + +GLOBL ·libc_getpgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB) + +TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpgrp(SB) + +GLOBL ·libc_getpgrp_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB) + +TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpid(SB) + +GLOBL ·libc_getpid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB) + +TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getppid(SB) + +GLOBL ·libc_getppid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB) + +TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getpriority(SB) + +GLOBL ·libc_getpriority_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB) + +TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getrlimit(SB) + +GLOBL ·libc_getrlimit_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB) + +TEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getrtable(SB) + +GLOBL ·libc_getrtable_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getrtable_trampoline_addr(SB)/8, $libc_getrtable_trampoline<>(SB) + +TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getrusage(SB) + +GLOBL ·libc_getrusage_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB) + +TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getsid(SB) + +GLOBL ·libc_getsid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB) + +TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_gettimeofday(SB) + +GLOBL ·libc_gettimeofday_trampoline_addr(SB), RODATA, $8 +DATA ·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB) + +TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getuid(SB) + +GLOBL ·libc_getuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB) + +TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_issetugid(SB) + +GLOBL ·libc_issetugid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB) + +TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_kill(SB) + +GLOBL ·libc_kill_trampoline_addr(SB), RODATA, $8 +DATA ·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB) + +TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_kqueue(SB) + +GLOBL ·libc_kqueue_trampoline_addr(SB), RODATA, $8 +DATA ·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB) + +TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_lchown(SB) + +GLOBL ·libc_lchown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB) + +TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_link(SB) + +GLOBL ·libc_link_trampoline_addr(SB), RODATA, $8 +DATA ·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB) + +TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_linkat(SB) + +GLOBL ·libc_linkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB) + +TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_listen(SB) + +GLOBL ·libc_listen_trampoline_addr(SB), RODATA, $8 +DATA ·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB) + +TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_lstat(SB) + +GLOBL ·libc_lstat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB) + +TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mkdir(SB) + +GLOBL ·libc_mkdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB) + +TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mkdirat(SB) + +GLOBL ·libc_mkdirat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB) + +TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mkfifo(SB) + +GLOBL ·libc_mkfifo_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB) + +TEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mkfifoat(SB) + +GLOBL ·libc_mkfifoat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mkfifoat_trampoline_addr(SB)/8, $libc_mkfifoat_trampoline<>(SB) + +TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mknod(SB) + +GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB) + +TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mknodat(SB) + +GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB) + +TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_nanosleep(SB) + +GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $8 +DATA ·libc_nanosleep_trampoline_addr(SB)/8, $libc_nanosleep_trampoline<>(SB) + +TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_open(SB) + +GLOBL ·libc_open_trampoline_addr(SB), RODATA, $8 +DATA ·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB) + +TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_openat(SB) + +GLOBL ·libc_openat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB) + +TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pathconf(SB) + +GLOBL ·libc_pathconf_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB) + +TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pread(SB) + +GLOBL ·libc_pread_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB) + +TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pwrite(SB) + +GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB) + +TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_read(SB) + +GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8 +DATA ·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB) + +TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readlink(SB) + +GLOBL ·libc_readlink_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB) + +TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readlinkat(SB) + +GLOBL ·libc_readlinkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB) + +TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_rename(SB) + +GLOBL ·libc_rename_trampoline_addr(SB), RODATA, $8 +DATA ·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB) + +TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_renameat(SB) + +GLOBL ·libc_renameat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB) + +TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_revoke(SB) + +GLOBL ·libc_revoke_trampoline_addr(SB), RODATA, $8 +DATA ·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB) + +TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_rmdir(SB) + +GLOBL ·libc_rmdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB) + +TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_lseek(SB) + +GLOBL ·libc_lseek_trampoline_addr(SB), RODATA, $8 +DATA ·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB) + +TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_select(SB) + +GLOBL ·libc_select_trampoline_addr(SB), RODATA, $8 +DATA ·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB) + +TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setegid(SB) + +GLOBL ·libc_setegid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB) + +TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_seteuid(SB) + +GLOBL ·libc_seteuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB) + +TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setgid(SB) + +GLOBL ·libc_setgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB) + +TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setlogin(SB) + +GLOBL ·libc_setlogin_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB) + +TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setpgid(SB) + +GLOBL ·libc_setpgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB) + +TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setpriority(SB) + +GLOBL ·libc_setpriority_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB) + +TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setregid(SB) + +GLOBL ·libc_setregid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB) + +TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setreuid(SB) + +GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB) + +TEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setresgid(SB) + +GLOBL ·libc_setresgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setresgid_trampoline_addr(SB)/8, $libc_setresgid_trampoline<>(SB) + +TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setresuid(SB) + +GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB) + +TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setrlimit(SB) + +GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) + +TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setrtable(SB) + +GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setrtable_trampoline_addr(SB)/8, $libc_setrtable_trampoline<>(SB) + +TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setsid(SB) + +GLOBL ·libc_setsid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB) + +TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_settimeofday(SB) + +GLOBL ·libc_settimeofday_trampoline_addr(SB), RODATA, $8 +DATA ·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB) + +TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setuid(SB) + +GLOBL ·libc_setuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB) + +TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_stat(SB) + +GLOBL ·libc_stat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB) + +TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_statfs(SB) + +GLOBL ·libc_statfs_trampoline_addr(SB), RODATA, $8 +DATA ·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB) + +TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_symlink(SB) + +GLOBL ·libc_symlink_trampoline_addr(SB), RODATA, $8 +DATA ·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB) + +TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_symlinkat(SB) + +GLOBL ·libc_symlinkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB) + +TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sync(SB) + +GLOBL ·libc_sync_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB) + +TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_truncate(SB) + +GLOBL ·libc_truncate_trampoline_addr(SB), RODATA, $8 +DATA ·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB) + +TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_umask(SB) + +GLOBL ·libc_umask_trampoline_addr(SB), RODATA, $8 +DATA ·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB) + +TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unlink(SB) + +GLOBL ·libc_unlink_trampoline_addr(SB), RODATA, $8 +DATA ·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB) + +TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unlinkat(SB) + +GLOBL ·libc_unlinkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB) + +TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unmount(SB) + +GLOBL ·libc_unmount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB) + +TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_write(SB) + +GLOBL ·libc_write_trampoline_addr(SB), RODATA, $8 +DATA ·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB) + +TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mmap(SB) + +GLOBL ·libc_mmap_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB) + +TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_munmap(SB) + +GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 +DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) + +TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_utimensat(SB) + +GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_riscv64.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_riscv64.go new file mode 100644 index 0000000..ee37aaa --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_riscv64.go @@ -0,0 +1,394 @@ +// go run mksysnum.go https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12 +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build riscv64 && freebsd +// +build riscv64,freebsd + +package unix + +const ( + // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int + SYS_EXIT = 1 // { void sys_exit(int rval); } exit sys_exit_args void + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); } + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_BREAK = 17 // { caddr_t break(char *nsize); } + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); } + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, int data); } + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); } + SYS_ACCEPT = 30 // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); } + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); } + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); } + SYS_ACCESS = 33 // { int access(char *path, int amode); } + SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(u_int fd); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); } + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); } + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); } + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); } + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); } + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); } + SYS_UMASK = 60 // { int umask(int newmask); } + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); } + SYS_VFORK = 66 // { int vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); } + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); } + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); } + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); } + SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); } + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); } + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); } + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); } + SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); } + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); } + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); } + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); } + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); } + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); } + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); } + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); } + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); } + SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); } + SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); } + SYS_LGETFH = 160 // { int lgetfh(char *fname, struct fhandle *fhp); } + SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); } + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); } + SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); } + SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); } + SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, int a4); } + SYS_SETFIB = 175 // { int setfib(int fibnum); } + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); } + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); } + SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } + SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } + SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); } + SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate(struct ffclock_estimate *cest); } + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate(struct ffclock_estimate *cest); } + SYS_CLOCK_NANOSLEEP = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); } + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id, int which, clockid_t *clock_id); } + SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); } + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); } + SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); } + SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb* const *acb_list, int nent, struct sigevent *sig); } + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); } + SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } + SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); } + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat* stat); } + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat *stat); } + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); } + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); } + SYS_AIO_RETURN = 314 // { ssize_t aio_return(struct aiocb *aiocbp); } + SYS_AIO_SUSPEND = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } + SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); } + SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); } + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, size_t buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); } + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); } + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); } + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); } + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); } + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); } + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); } + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); } + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); } + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); } + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, acl_type_t type); } + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); } + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); } + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } + SYS_AIO_WAITCOMPLETE = 359 // { ssize_t aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); } + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } + SYS___SETUGID = 374 // { int __setugid(int flag); } + SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } + SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); } + SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } + SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } + SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); } + SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); } + SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); } + SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); } + SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); } + SYS_LCHFLAGS = 391 // { int lchflags(const char *path, u_long flags); } + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); } + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); } + SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, int call, void *arg); } + SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); } + SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); } + SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); } + SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); } + SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, unsigned int value); } + SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); } + SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); } + SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); } + SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); } + SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); } + SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); } + SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); } + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } + SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); } + SYS_SIGACTION = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); } + SYS_SIGRETURN = 417 // { int sigreturn(const struct __ucontext *sigcntxp); } + SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext(const struct __ucontext *ucp); } + SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); } + SYS_SWAPOFF = 424 // { int swapoff(const char *name); } + SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); } + SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, acl_type_t type); } + SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); } + SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, int *sig); } + SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); } + SYS_THR_EXIT = 431 // { void thr_exit(long *state); } + SYS_THR_SELF = 432 // { int thr_self(long *id); } + SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } + SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } + SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); } + SYS_THR_SUSPEND = 442 // { int thr_suspend(const struct timespec *timeout); } + SYS_THR_WAKE = 443 // { int thr_wake(long id); } + SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } + SYS_AUDIT = 445 // { int audit(const void *record, u_int length); } + SYS_AUDITON = 446 // { int auditon(int cmd, void *data, u_int length); } + SYS_GETAUID = 447 // { int getauid(uid_t *auid); } + SYS_SETAUID = 448 // { int setauid(uid_t *auid); } + SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } + SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); } + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); } + SYS_AUDITCTL = 453 // { int auditctl(char *path); } + SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); } + SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, int param_size); } + SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } + SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); } + SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); } + SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); } + SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); } + SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); } + SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); } + SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } + SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } + SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); } + SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); } + SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } + SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } + SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } + SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr *from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); } + SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); } + SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); } + SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); } + SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, int whence); } + SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } + SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } + SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } + SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, mode_t mode); } + SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } + SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } + SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); } + SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); } + SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); } + SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); } + SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, int flag); } + SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); } + SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, char **envv); } + SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, struct timeval *times); } + SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); } + SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, mode_t mode); } + SYS_READLINKAT = 500 // { ssize_t readlinkat(int fd, char *path, char *buf, size_t bufsize); } + SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); } + SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, char *path2); } + SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } + SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } + SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); } + SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); } + SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); } + SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } + SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } + SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); } + SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } + SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); } + SYS_CAP_ENTER = 516 // { int cap_enter(void); } + SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } + SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } + SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } + SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } + SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); } + SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, size_t namelen); } + SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } + SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } + SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); } + SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); } + SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); } + SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); } + SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); } + SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); } + SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); } + SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); } + SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); } + SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); } + SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); } + SYS_ACCEPT4 = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); } + SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } + SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); } + SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); } + SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); } + SYS_FUTIMENS = 546 // { int futimens(int fd, struct timespec *times); } + SYS_UTIMENSAT = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); } + SYS_FDATASYNC = 550 // { int fdatasync(int fd); } + SYS_FSTAT = 551 // { int fstat(int fd, struct stat *sb); } + SYS_FSTATAT = 552 // { int fstatat(int fd, char *path, struct stat *buf, int flag); } + SYS_FHSTAT = 553 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } + SYS_GETDIRENTRIES = 554 // { ssize_t getdirentries(int fd, char *buf, size_t count, off_t *basep); } + SYS_STATFS = 555 // { int statfs(char *path, struct statfs *buf); } + SYS_FSTATFS = 556 // { int fstatfs(int fd, struct statfs *buf); } + SYS_GETFSSTAT = 557 // { int getfsstat(struct statfs *buf, long bufsize, int mode); } + SYS_FHSTATFS = 558 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } + SYS_MKNODAT = 559 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); } + SYS_KEVENT = 560 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } + SYS_CPUSET_GETDOMAIN = 561 // { int cpuset_getdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int *policy); } + SYS_CPUSET_SETDOMAIN = 562 // { int cpuset_setdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int policy); } + SYS_GETRANDOM = 563 // { int getrandom(void *buf, size_t buflen, unsigned int flags); } + SYS_GETFHAT = 564 // { int getfhat(int fd, char *path, struct fhandle *fhp, int flags); } + SYS_FHLINK = 565 // { int fhlink(struct fhandle *fhp, const char *to); } + SYS_FHLINKAT = 566 // { int fhlinkat(struct fhandle *fhp, int tofd, const char *to,); } + SYS_FHREADLINK = 567 // { int fhreadlink(struct fhandle *fhp, char *buf, size_t bufsize); } + SYS___SYSCTLBYNAME = 570 // { int __sysctlbyname(const char *name, size_t namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } + SYS_CLOSE_RANGE = 575 // { int close_range(u_int lowfd, u_int highfd, int flags); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go new file mode 100644 index 0000000..81c4849 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go @@ -0,0 +1,311 @@ +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/loong64/include /tmp/loong64/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build loong64 && linux +// +build loong64,linux + +package unix + +const ( + SYS_IO_SETUP = 0 + SYS_IO_DESTROY = 1 + SYS_IO_SUBMIT = 2 + SYS_IO_CANCEL = 3 + SYS_IO_GETEVENTS = 4 + SYS_SETXATTR = 5 + SYS_LSETXATTR = 6 + SYS_FSETXATTR = 7 + SYS_GETXATTR = 8 + SYS_LGETXATTR = 9 + SYS_FGETXATTR = 10 + SYS_LISTXATTR = 11 + SYS_LLISTXATTR = 12 + SYS_FLISTXATTR = 13 + SYS_REMOVEXATTR = 14 + SYS_LREMOVEXATTR = 15 + SYS_FREMOVEXATTR = 16 + SYS_GETCWD = 17 + SYS_LOOKUP_DCOOKIE = 18 + SYS_EVENTFD2 = 19 + SYS_EPOLL_CREATE1 = 20 + SYS_EPOLL_CTL = 21 + SYS_EPOLL_PWAIT = 22 + SYS_DUP = 23 + SYS_DUP3 = 24 + SYS_FCNTL = 25 + SYS_INOTIFY_INIT1 = 26 + SYS_INOTIFY_ADD_WATCH = 27 + SYS_INOTIFY_RM_WATCH = 28 + SYS_IOCTL = 29 + SYS_IOPRIO_SET = 30 + SYS_IOPRIO_GET = 31 + SYS_FLOCK = 32 + SYS_MKNODAT = 33 + SYS_MKDIRAT = 34 + SYS_UNLINKAT = 35 + SYS_SYMLINKAT = 36 + SYS_LINKAT = 37 + SYS_UMOUNT2 = 39 + SYS_MOUNT = 40 + SYS_PIVOT_ROOT = 41 + SYS_NFSSERVCTL = 42 + SYS_STATFS = 43 + SYS_FSTATFS = 44 + SYS_TRUNCATE = 45 + SYS_FTRUNCATE = 46 + SYS_FALLOCATE = 47 + SYS_FACCESSAT = 48 + SYS_CHDIR = 49 + SYS_FCHDIR = 50 + SYS_CHROOT = 51 + SYS_FCHMOD = 52 + SYS_FCHMODAT = 53 + SYS_FCHOWNAT = 54 + SYS_FCHOWN = 55 + SYS_OPENAT = 56 + SYS_CLOSE = 57 + SYS_VHANGUP = 58 + SYS_PIPE2 = 59 + SYS_QUOTACTL = 60 + SYS_GETDENTS64 = 61 + SYS_LSEEK = 62 + SYS_READ = 63 + SYS_WRITE = 64 + SYS_READV = 65 + SYS_WRITEV = 66 + SYS_PREAD64 = 67 + SYS_PWRITE64 = 68 + SYS_PREADV = 69 + SYS_PWRITEV = 70 + SYS_SENDFILE = 71 + SYS_PSELECT6 = 72 + SYS_PPOLL = 73 + SYS_SIGNALFD4 = 74 + SYS_VMSPLICE = 75 + SYS_SPLICE = 76 + SYS_TEE = 77 + SYS_READLINKAT = 78 + SYS_SYNC = 81 + SYS_FSYNC = 82 + SYS_FDATASYNC = 83 + SYS_SYNC_FILE_RANGE = 84 + SYS_TIMERFD_CREATE = 85 + SYS_TIMERFD_SETTIME = 86 + SYS_TIMERFD_GETTIME = 87 + SYS_UTIMENSAT = 88 + SYS_ACCT = 89 + SYS_CAPGET = 90 + SYS_CAPSET = 91 + SYS_PERSONALITY = 92 + SYS_EXIT = 93 + SYS_EXIT_GROUP = 94 + SYS_WAITID = 95 + SYS_SET_TID_ADDRESS = 96 + SYS_UNSHARE = 97 + SYS_FUTEX = 98 + SYS_SET_ROBUST_LIST = 99 + SYS_GET_ROBUST_LIST = 100 + SYS_NANOSLEEP = 101 + SYS_GETITIMER = 102 + SYS_SETITIMER = 103 + SYS_KEXEC_LOAD = 104 + SYS_INIT_MODULE = 105 + SYS_DELETE_MODULE = 106 + SYS_TIMER_CREATE = 107 + SYS_TIMER_GETTIME = 108 + SYS_TIMER_GETOVERRUN = 109 + SYS_TIMER_SETTIME = 110 + SYS_TIMER_DELETE = 111 + SYS_CLOCK_SETTIME = 112 + SYS_CLOCK_GETTIME = 113 + SYS_CLOCK_GETRES = 114 + SYS_CLOCK_NANOSLEEP = 115 + SYS_SYSLOG = 116 + SYS_PTRACE = 117 + SYS_SCHED_SETPARAM = 118 + SYS_SCHED_SETSCHEDULER = 119 + SYS_SCHED_GETSCHEDULER = 120 + SYS_SCHED_GETPARAM = 121 + SYS_SCHED_SETAFFINITY = 122 + SYS_SCHED_GETAFFINITY = 123 + SYS_SCHED_YIELD = 124 + SYS_SCHED_GET_PRIORITY_MAX = 125 + SYS_SCHED_GET_PRIORITY_MIN = 126 + SYS_SCHED_RR_GET_INTERVAL = 127 + SYS_RESTART_SYSCALL = 128 + SYS_KILL = 129 + SYS_TKILL = 130 + SYS_TGKILL = 131 + SYS_SIGALTSTACK = 132 + SYS_RT_SIGSUSPEND = 133 + SYS_RT_SIGACTION = 134 + SYS_RT_SIGPROCMASK = 135 + SYS_RT_SIGPENDING = 136 + SYS_RT_SIGTIMEDWAIT = 137 + SYS_RT_SIGQUEUEINFO = 138 + SYS_RT_SIGRETURN = 139 + SYS_SETPRIORITY = 140 + SYS_GETPRIORITY = 141 + SYS_REBOOT = 142 + SYS_SETREGID = 143 + SYS_SETGID = 144 + SYS_SETREUID = 145 + SYS_SETUID = 146 + SYS_SETRESUID = 147 + SYS_GETRESUID = 148 + SYS_SETRESGID = 149 + SYS_GETRESGID = 150 + SYS_SETFSUID = 151 + SYS_SETFSGID = 152 + SYS_TIMES = 153 + SYS_SETPGID = 154 + SYS_GETPGID = 155 + SYS_GETSID = 156 + SYS_SETSID = 157 + SYS_GETGROUPS = 158 + SYS_SETGROUPS = 159 + SYS_UNAME = 160 + SYS_SETHOSTNAME = 161 + SYS_SETDOMAINNAME = 162 + SYS_GETRUSAGE = 165 + SYS_UMASK = 166 + SYS_PRCTL = 167 + SYS_GETCPU = 168 + SYS_GETTIMEOFDAY = 169 + SYS_SETTIMEOFDAY = 170 + SYS_ADJTIMEX = 171 + SYS_GETPID = 172 + SYS_GETPPID = 173 + SYS_GETUID = 174 + SYS_GETEUID = 175 + SYS_GETGID = 176 + SYS_GETEGID = 177 + SYS_GETTID = 178 + SYS_SYSINFO = 179 + SYS_MQ_OPEN = 180 + SYS_MQ_UNLINK = 181 + SYS_MQ_TIMEDSEND = 182 + SYS_MQ_TIMEDRECEIVE = 183 + SYS_MQ_NOTIFY = 184 + SYS_MQ_GETSETATTR = 185 + SYS_MSGGET = 186 + SYS_MSGCTL = 187 + SYS_MSGRCV = 188 + SYS_MSGSND = 189 + SYS_SEMGET = 190 + SYS_SEMCTL = 191 + SYS_SEMTIMEDOP = 192 + SYS_SEMOP = 193 + SYS_SHMGET = 194 + SYS_SHMCTL = 195 + SYS_SHMAT = 196 + SYS_SHMDT = 197 + SYS_SOCKET = 198 + SYS_SOCKETPAIR = 199 + SYS_BIND = 200 + SYS_LISTEN = 201 + SYS_ACCEPT = 202 + SYS_CONNECT = 203 + SYS_GETSOCKNAME = 204 + SYS_GETPEERNAME = 205 + SYS_SENDTO = 206 + SYS_RECVFROM = 207 + SYS_SETSOCKOPT = 208 + SYS_GETSOCKOPT = 209 + SYS_SHUTDOWN = 210 + SYS_SENDMSG = 211 + SYS_RECVMSG = 212 + SYS_READAHEAD = 213 + SYS_BRK = 214 + SYS_MUNMAP = 215 + SYS_MREMAP = 216 + SYS_ADD_KEY = 217 + SYS_REQUEST_KEY = 218 + SYS_KEYCTL = 219 + SYS_CLONE = 220 + SYS_EXECVE = 221 + SYS_MMAP = 222 + SYS_FADVISE64 = 223 + SYS_SWAPON = 224 + SYS_SWAPOFF = 225 + SYS_MPROTECT = 226 + SYS_MSYNC = 227 + SYS_MLOCK = 228 + SYS_MUNLOCK = 229 + SYS_MLOCKALL = 230 + SYS_MUNLOCKALL = 231 + SYS_MINCORE = 232 + SYS_MADVISE = 233 + SYS_REMAP_FILE_PAGES = 234 + SYS_MBIND = 235 + SYS_GET_MEMPOLICY = 236 + SYS_SET_MEMPOLICY = 237 + SYS_MIGRATE_PAGES = 238 + SYS_MOVE_PAGES = 239 + SYS_RT_TGSIGQUEUEINFO = 240 + SYS_PERF_EVENT_OPEN = 241 + SYS_ACCEPT4 = 242 + SYS_RECVMMSG = 243 + SYS_ARCH_SPECIFIC_SYSCALL = 244 + SYS_WAIT4 = 260 + SYS_PRLIMIT64 = 261 + SYS_FANOTIFY_INIT = 262 + SYS_FANOTIFY_MARK = 263 + SYS_NAME_TO_HANDLE_AT = 264 + SYS_OPEN_BY_HANDLE_AT = 265 + SYS_CLOCK_ADJTIME = 266 + SYS_SYNCFS = 267 + SYS_SETNS = 268 + SYS_SENDMMSG = 269 + SYS_PROCESS_VM_READV = 270 + SYS_PROCESS_VM_WRITEV = 271 + SYS_KCMP = 272 + SYS_FINIT_MODULE = 273 + SYS_SCHED_SETATTR = 274 + SYS_SCHED_GETATTR = 275 + SYS_RENAMEAT2 = 276 + SYS_SECCOMP = 277 + SYS_GETRANDOM = 278 + SYS_MEMFD_CREATE = 279 + SYS_BPF = 280 + SYS_EXECVEAT = 281 + SYS_USERFAULTFD = 282 + SYS_MEMBARRIER = 283 + SYS_MLOCK2 = 284 + SYS_COPY_FILE_RANGE = 285 + SYS_PREADV2 = 286 + SYS_PWRITEV2 = 287 + SYS_PKEY_MPROTECT = 288 + SYS_PKEY_ALLOC = 289 + SYS_PKEY_FREE = 290 + SYS_STATX = 291 + SYS_IO_PGETEVENTS = 292 + SYS_RSEQ = 293 + SYS_KEXEC_FILE_LOAD = 294 + SYS_PIDFD_SEND_SIGNAL = 424 + SYS_IO_URING_SETUP = 425 + SYS_IO_URING_ENTER = 426 + SYS_IO_URING_REGISTER = 427 + SYS_OPEN_TREE = 428 + SYS_MOVE_MOUNT = 429 + SYS_FSOPEN = 430 + SYS_FSCONFIG = 431 + SYS_FSMOUNT = 432 + SYS_FSPICK = 433 + SYS_PIDFD_OPEN = 434 + SYS_CLONE3 = 435 + SYS_CLOSE_RANGE = 436 + SYS_OPENAT2 = 437 + SYS_PIDFD_GETFD = 438 + SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 + SYS_EPOLL_PWAIT2 = 441 + SYS_MOUNT_SETATTR = 442 + SYS_QUOTACTL_FD = 443 + SYS_LANDLOCK_CREATE_RULESET = 444 + SYS_LANDLOCK_ADD_RULE = 445 + SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_PROCESS_MRELEASE = 448 + SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go new file mode 100644 index 0000000..0660fd4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go @@ -0,0 +1,638 @@ +// cgo -godefs -- -fsigned-char types_freebsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build riscv64 && freebsd +// +build riscv64,freebsd + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Time_t int64 + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur int64 + Max int64 +} + +type _Gid_t uint32 + +const ( + _statfsVersion = 0x20140518 + _dirblksiz = 0x400 +) + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint16 + _0 int16 + Uid uint32 + Gid uint32 + _1 int32 + Rdev uint64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Btim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint64 + Spare [10]uint64 +} + +type Statfs_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]byte + Mntfromname [1024]byte + Mntonname [1024]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 + Sysid int32 + _ [4]byte +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Pad0 uint8 + Namlen uint16 + Pad1 uint16 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + PathMax = 0x400 +) + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [46]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Xucred struct { + Version uint32 + Uid uint32 + Ngroups int16 + Groups [16]uint32 + _ *byte +} + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface 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 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x36 + SizeofXucred = 0x58 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type PtraceLwpInfoStruct struct { + Lwpid int32 + Event int32 + Flags int32 + Sigmask Sigset_t + Siglist Sigset_t + Siginfo __PtraceSiginfo + Tdname [20]int8 + Child_pid int32 + Syscall_code uint32 + Syscall_narg uint32 +} + +type __Siginfo struct { + Signo int32 + Errno int32 + Code int32 + Pid int32 + Uid uint32 + Status int32 + Addr *byte + Value [8]byte + _ [40]byte +} + +type __PtraceSiginfo struct { + Signo int32 + Errno int32 + Code int32 + Pid int32 + Uid uint32 + Status int32 + Addr uintptr + Value [8]byte + _ [40]byte +} + +type Sigset_t struct { + Val [4]uint32 +} + +type Reg struct { + Ra uint64 + Sp uint64 + Gp uint64 + Tp uint64 + T [7]uint64 + S [12]uint64 + A [8]uint64 + Sepc uint64 + Sstatus uint64 +} + +type FpReg struct { + X [32][2]uint64 + Fcsr uint64 +} + +type FpExtendedPrecision struct{} + +type PtraceIoDesc struct { + Op int32 + Offs uintptr + Addr uintptr + Len uint64 +} + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte + Ext [4]uint64 +} + +type FdSet struct { + Bits [16]uint64 +} + +const ( + sizeofIfMsghdr = 0xa8 + SizeofIfMsghdr = 0xa8 + sizeofIfData = 0x98 + SizeofIfData = 0x98 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x98 + SizeofRtMetrics = 0x70 +) + +type ifMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ uint16 + Data ifData +} + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Data IfData +} + +type ifData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Vhid uint8 + Datalen uint16 + Mtu uint32 + Metric uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Oqdrops uint64 + Noproto uint64 + Hwassist uint64 + _ [8]byte + _ [16]byte +} + +type IfData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Spare_char1 uint8 + Spare_char2 uint8 + Datalen uint8 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Hwassist uint64 + Epoch int64 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ uint16 + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ uint16 +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + _ uint16 + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Fmask int32 + Inits uint64 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Hopcount uint64 + Expire uint64 + Recvpipe uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Pksent uint64 + Weight uint64 + Nhidx uint64 + Filler [2]uint64 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfZbuf = 0x18 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x20 + SizeofBpfZbufHeader = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfZbuf struct { + Bufa *byte + Bufb *byte + Buflen uint64 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [6]byte +} + +type BpfZbufHeader struct { + Kernel_gen uint32 + Kernel_len uint32 + User_gen uint32 + _ [5]uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_EACCESS = 0x100 + AT_SYMLINK_NOFOLLOW = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_REMOVEDIR = 0x800 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLINIGNEOF = 0x2000 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type CapRights struct { + Rights [2]uint64 +} + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} + +const SizeofClockinfo = 0x14 + +type Clockinfo struct { + Hz int32 + Tick int32 + Spare int32 + Stathz int32 + Profhz int32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go new file mode 100644 index 0000000..187061f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go @@ -0,0 +1,685 @@ +// cgo -godefs -objdir=/tmp/loong64/cgo -- -Wall -Werror -static -I/tmp/loong64/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build loong64 && linux +// +build loong64,linux + +package unix + +const ( + SizeofPtr = 0x8 + SizeofLong = 0x8 +) + +type ( + _C_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + _ [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Stat_t struct { + Dev uint64 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + _ uint64 + Size int64 + Blksize int32 + _ int32 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + _ [2]int32 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte +} + +type Flock_t struct { + Type int16 + Whence int16 + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type DmNameList struct { + Dev uint64 + Next uint32 + Name [0]byte + _ [4]byte +} + +const ( + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint64 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type ifreq struct { + Ifrn [16]byte + Ifru [24]byte +} + +const ( + SizeofSockaddrNFCLLCP = 0x60 + SizeofIovec = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 +) + +const ( + SizeofSockFprog = 0x10 +) + +type PtraceRegs struct { + Regs [32]uint64 + Orig_a0 uint64 + Era uint64 + Badv uint64 + Reserved [10]uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + _ [0]int8 + _ [4]byte +} + +type Ustat_t struct { + Tfree int32 + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + _ [4]byte +} + +type EpollEvent struct { + Events uint32 + _ int32 + Fd int32 + Pad int32 +} + +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + +const ( + POLLRDHUP = 0x2000 +) + +type Sigset_t struct { + Val [16]uint64 +} + +const _C__NSIG = 0x41 + +type Siginfo struct { + Signo int32 + Errno int32 + Code int32 + _ int32 + _ [112]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Taskstats struct { + Version uint16 + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 + Thrashing_count uint64 + Thrashing_delay_total uint64 + Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 + Ac_tgid uint32 + Ac_tgetime uint64 + Ac_exe_dev uint64 + Ac_exe_inode uint64 + Wpcopy_count uint64 + Wpcopy_delay_total uint64 +} + +type cpuMask uint64 + +const ( + _NCPUBITS = 0x40 +) + +const ( + CBitFieldMaskBit0 = 0x1 + CBitFieldMaskBit1 = 0x2 + CBitFieldMaskBit2 = 0x4 + CBitFieldMaskBit3 = 0x8 + CBitFieldMaskBit4 = 0x10 + CBitFieldMaskBit5 = 0x20 + CBitFieldMaskBit6 = 0x40 + CBitFieldMaskBit7 = 0x80 + CBitFieldMaskBit8 = 0x100 + CBitFieldMaskBit9 = 0x200 + CBitFieldMaskBit10 = 0x400 + CBitFieldMaskBit11 = 0x800 + CBitFieldMaskBit12 = 0x1000 + CBitFieldMaskBit13 = 0x2000 + CBitFieldMaskBit14 = 0x4000 + CBitFieldMaskBit15 = 0x8000 + CBitFieldMaskBit16 = 0x10000 + CBitFieldMaskBit17 = 0x20000 + CBitFieldMaskBit18 = 0x40000 + CBitFieldMaskBit19 = 0x80000 + CBitFieldMaskBit20 = 0x100000 + CBitFieldMaskBit21 = 0x200000 + CBitFieldMaskBit22 = 0x400000 + CBitFieldMaskBit23 = 0x800000 + CBitFieldMaskBit24 = 0x1000000 + CBitFieldMaskBit25 = 0x2000000 + CBitFieldMaskBit26 = 0x4000000 + CBitFieldMaskBit27 = 0x8000000 + CBitFieldMaskBit28 = 0x10000000 + CBitFieldMaskBit29 = 0x20000000 + CBitFieldMaskBit30 = 0x40000000 + CBitFieldMaskBit31 = 0x80000000 + CBitFieldMaskBit32 = 0x100000000 + CBitFieldMaskBit33 = 0x200000000 + CBitFieldMaskBit34 = 0x400000000 + CBitFieldMaskBit35 = 0x800000000 + CBitFieldMaskBit36 = 0x1000000000 + CBitFieldMaskBit37 = 0x2000000000 + CBitFieldMaskBit38 = 0x4000000000 + CBitFieldMaskBit39 = 0x8000000000 + CBitFieldMaskBit40 = 0x10000000000 + CBitFieldMaskBit41 = 0x20000000000 + CBitFieldMaskBit42 = 0x40000000000 + CBitFieldMaskBit43 = 0x80000000000 + CBitFieldMaskBit44 = 0x100000000000 + CBitFieldMaskBit45 = 0x200000000000 + CBitFieldMaskBit46 = 0x400000000000 + CBitFieldMaskBit47 = 0x800000000000 + CBitFieldMaskBit48 = 0x1000000000000 + CBitFieldMaskBit49 = 0x2000000000000 + CBitFieldMaskBit50 = 0x4000000000000 + CBitFieldMaskBit51 = 0x8000000000000 + CBitFieldMaskBit52 = 0x10000000000000 + CBitFieldMaskBit53 = 0x20000000000000 + CBitFieldMaskBit54 = 0x40000000000000 + CBitFieldMaskBit55 = 0x80000000000000 + CBitFieldMaskBit56 = 0x100000000000000 + CBitFieldMaskBit57 = 0x200000000000000 + CBitFieldMaskBit58 = 0x400000000000000 + CBitFieldMaskBit59 = 0x800000000000000 + CBitFieldMaskBit60 = 0x1000000000000000 + CBitFieldMaskBit61 = 0x2000000000000000 + CBitFieldMaskBit62 = 0x4000000000000000 + CBitFieldMaskBit63 = 0x8000000000000000 +) + +type SockaddrStorage struct { + Family uint16 + _ [118]int8 + _ uint64 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + Start uint64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +type TpacketHdr struct { + Status uint64 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 + _ [4]byte +} + +const ( + SizeofTpacketHdr = 0x20 +) + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int64 +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x1269 +) + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 + Flags uint32 + _ [4]byte +} + +type CryptoUserAlg struct { + Name [64]int8 + Driver_name [64]int8 + Module_name [64]int8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]int8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]int8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]int8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]int8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]int8 +} + +type CryptoReportLarval struct { + Type [64]int8 +} + +type CryptoReportHash struct { + Type [64]int8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]int8 +} + +type CryptoReportRNG struct { + Type [64]int8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]int8 +} + +type CryptoReportKPP struct { + Type [64]int8 +} + +type CryptoReportAcomp struct { + Type [64]int8 +} + +type LoopInfo struct { + Number int32 + Device uint32 + Inode uint64 + Rdevice uint32 + Offset int32 + Encrypt_type int32 + Encrypt_key_size int32 + Flags int32 + Name [64]int8 + Encrypt_key [32]uint8 + Init [2]uint64 + Reserved [4]int8 + _ [4]byte +} + +type TIPCSubscr struct { + Seq TIPCServiceRange + Timeout uint32 + Filter uint32 + Handle [8]int8 +} + +type TIPCSIOCLNReq struct { + Peer uint32 + Id uint32 + Linkname [68]int8 +} + +type TIPCSIOCNodeIDReq struct { + Peer uint32 + Id [16]int8 +} + +type PPSKInfo struct { + Assert_sequence uint32 + Clear_sequence uint32 + Assert_tu PPSKTime + Clear_tu PPSKTime + Current_mode int32 + _ [4]byte +} + +const ( + PPS_GETPARAMS = 0x800870a1 + PPS_SETPARAMS = 0x400870a2 + PPS_GETCAP = 0x800870a3 + PPS_FETCH = 0xc00870a4 +) + +const ( + PIDFD_NONBLOCK = 0x800 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + _ [0]uint8 + Seq uint16 + _ uint16 + _ uint64 + _ uint64 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint64 + Atime int64 + Dtime int64 + Ctime int64 + Cpid int32 + Lpid int32 + Nattch uint64 + _ uint64 + _ uint64 +} diff --git a/vendor/golang.org/x/sys/windows/syscall.go b/vendor/golang.org/x/sys/windows/syscall.go index 72074d5..8732cdb 100644 --- a/vendor/golang.org/x/sys/windows/syscall.go +++ b/vendor/golang.org/x/sys/windows/syscall.go @@ -30,8 +30,6 @@ import ( "strings" "syscall" "unsafe" - - "golang.org/x/sys/internal/unsafeheader" ) // ByteSliceFromString returns a NUL-terminated slice of bytes @@ -83,13 +81,7 @@ func BytePtrToString(p *byte) string { ptr = unsafe.Pointer(uintptr(ptr) + 1) } - var s []byte - h := (*unsafeheader.Slice)(unsafe.Pointer(&s)) - h.Data = unsafe.Pointer(p) - h.Len = n - h.Cap = n - - return string(s) + return string(unsafe.Slice(p, n)) } // Single-word zero for use when we need a valid pointer to 0 bytes. diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go index e279138..3f2cbb6 100644 --- a/vendor/golang.org/x/sys/windows/syscall_windows.go +++ b/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -138,13 +138,7 @@ func UTF16PtrToString(p *uint16) string { ptr = unsafe.Pointer(uintptr(ptr) + unsafe.Sizeof(*p)) } - var s []uint16 - h := (*unsafeheader.Slice)(unsafe.Pointer(&s)) - h.Data = unsafe.Pointer(p) - h.Len = n - h.Cap = n - - return string(utf16.Decode(s)) + return string(utf16.Decode(unsafe.Slice(p, n))) } func Getpagesize() int { return 4096 } @@ -364,6 +358,15 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (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 // Volume Management Functions //sys DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) = DefineDosDeviceW @@ -439,6 +442,10 @@ func NewCallbackCDecl(fn interface{}) uintptr { //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 + // syscall interface implementation for other packages // GetCurrentProcess returns the handle for the current process. diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go index f9eaca5..0c4add9 100644 --- a/vendor/golang.org/x/sys/windows/types_windows.go +++ b/vendor/golang.org/x/sys/windows/types_windows.go @@ -3213,3 +3213,48 @@ type ModuleInfo struct { } 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 +) diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go index 52d4742..96ba855 100644 --- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -40,6 +40,7 @@ var ( 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") @@ -175,6 +176,8 @@ var ( procDnsNameCompare_W = moddnsapi.NewProc("DnsNameCompare_W") procDnsQuery_W = moddnsapi.NewProc("DnsQuery_W") procDnsRecordListFree = moddnsapi.NewProc("DnsRecordListFree") + procDwmGetWindowAttribute = moddwmapi.NewProc("DwmGetWindowAttribute") + procDwmSetWindowAttribute = moddwmapi.NewProc("DwmSetWindowAttribute") procGetAdaptersAddresses = modiphlpapi.NewProc("GetAdaptersAddresses") procGetAdaptersInfo = modiphlpapi.NewProc("GetAdaptersInfo") procGetBestInterfaceEx = modiphlpapi.NewProc("GetBestInterfaceEx") @@ -444,9 +447,18 @@ var ( 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") procGetShellWindow = moduser32.NewProc("GetShellWindow") procGetWindowThreadProcessId = moduser32.NewProc("GetWindowThreadProcessId") + procIsWindow = moduser32.NewProc("IsWindow") + procIsWindowUnicode = moduser32.NewProc("IsWindowUnicode") + procIsWindowVisible = moduser32.NewProc("IsWindowVisible") procMessageBoxW = moduser32.NewProc("MessageBoxW") procCreateEnvironmentBlock = moduserenv.NewProc("CreateEnvironmentBlock") procDestroyEnvironmentBlock = moduserenv.NewProc("DestroyEnvironmentBlock") @@ -1525,6 +1537,22 @@ func DnsRecordListFree(rl *DNSRecord, freetype uint32) { 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 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 { @@ -3802,6 +3830,19 @@ func ShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *ui 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 { @@ -3810,6 +3851,35 @@ func ExitWindowsEx(flags uint32, reason uint32) (err error) { 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 GetShellWindow() (shellWindow HWND) { r0, _, _ := syscall.Syscall(procGetShellWindow.Addr(), 0, 0, 0, 0) shellWindow = HWND(r0) @@ -3825,6 +3895,24 @@ func GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) { 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 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) diff --git a/vendor/modules.txt b/vendor/modules.txt index 215377c..6e3ff64 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -66,7 +66,7 @@ github.com/tjfoc/gmsm/sm4 github.com/xtaci/kcp-go # github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37 ## explicit; go 1.13 -# golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 +# golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0 ## explicit; go 1.17 golang.org/x/crypto/argon2 golang.org/x/crypto/bcrypt @@ -89,7 +89,7 @@ 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/sys v0.0.0-20220909162455-aba9fc2a8ff2 +# golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 ## explicit; go 1.17 golang.org/x/sys/cpu golang.org/x/sys/internal/unsafeheader From b5f9333b3a58b20037e5851cf890aa7baf4f4ff6 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Tue, 20 Sep 2022 20:57:08 -0700 Subject: [PATCH 51/94] Updated golangci-lint config --- .golangci.yml | 394 ++++++++++++++------------------------------------ 1 file changed, 110 insertions(+), 284 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 2ea8fb8..830b3f4 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,327 +1,153 @@ -# This file contains all available configuration options -# with their default values. - -# options for analysis running -run: - # default concurrency is a available CPU number - concurrency: 4 - - # timeout for analysis, e.g. 30s, 5m, default is 1m - timeout: 1m - - # exit code when at least one issue was found, default is 1 - issues-exit-code: 1 - - # include test files or not, default is true - tests: true - - # list of build tags, all linters use it. Default is empty list. - build-tags: - - mytag - - # which dirs to skip: issues from them won't be reported; - # can use regexp here: generated.*, regexp is applied on full path; - # default value is empty list, but default dirs are skipped independently - # from this option's value (see skip-dirs-use-default). - skip-dirs: - - src/external_libs - - autogenerated_by_my_lib - - # default is true. Enables skipping of directories: - # vendor$, third_party$, testdata$, examples$, Godeps$, builtin$ - skip-dirs-use-default: true - - # which files to skip: they will be analyzed, but issues from them - # won't be reported. Default value is empty list, but there is - # no need to include all autogenerated files, we confidently recognize - # autogenerated files. If it's not please let us know. - skip-files: - - ".*\\.my\\.go$" - - lib/bad.go - - # by default isn't set. If set we pass it to "go list -mod={option}". From "go help modules": - # If invoked with -mod=readonly, the go command is disallowed from the implicit - # automatic updating of go.mod described above. Instead, it fails when any changes - # to go.mod are needed. This setting is most useful to check that go.mod does - # not need updates, such as in a continuous integration and testing system. - # If invoked with -mod=vendor, the go command assumes that the vendor - # directory holds the correct copies of dependencies and ignores - # the dependency descriptions in go.mod. - #! modules-download-mode: readonly|release|vendor - - -# output configuration options -output: - # colored-line-number|line-number|json|tab|checkstyle|code-climate, default is "colored-line-number" - format: colored-line-number - - # print lines of code with issue, default is true - print-issued-lines: true - - # print linter name in the end of issue text, default is true - print-linter-name: true - - # make issues output unique by line, default is true - uniq-by-line: true - - -# all available settings of specific linters linters-settings: - dogsled: - # checks assignments with too many blank identifiers; default is 2 - max-blank-identifiers: 2 + depguard: + list-type: blacklist + packages: + # logging is allowed only by logutils.Log, logrus + # is allowed to use only in logutils package + - github.com/sirupsen/logrus + packages-with-error-message: + - github.com/sirupsen/logrus: "logging is allowed only by logutils.Log" dupl: - # tokens count to trigger issue, 150 by default threshold: 100 - errcheck: - # report about not checking of errors in type assetions: `a := b.(MyStruct)`; - # default is false: such cases aren't reported by default. - check-type-assertions: false - - # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`; - # default is false: such cases aren't reported by default. - check-blank: false - - # [deprecated] comma-separated list of pairs of the form pkg:regex - # the regex is used to ignore names within pkg. (default "fmt:.*"). - # see https://github.com/kisielk/errcheck#the-deprecated-method for details - ignore: fmt:.*,io/ioutil:^Read.* - - # path to a file containing a list of functions to exclude from checking - # see https://github.com/kisielk/errcheck#excluding-functions for details - #!exclude: /path/to/file.txt funlen: - lines: 60 - statements: 40 - gocognit: - # minimal code complexity to report, 30 by default (but we recommend 10-20) - min-complexity: 10 + lines: 100 + statements: 50 + gci: + local-prefixes: github.com/golangci/golangci-lint goconst: - # minimal length of string constant, 3 by default - min-len: 3 - # minimal occurrences count to trigger, 3 by default - min-occurrences: 3 + min-len: 2 + min-occurrences: 2 gocritic: - # Which checks should be enabled; can't be combined with 'disabled-checks'; - # See https://go-critic.github.io/overview#checks-overview - # To check which checks are enabled run `GL_DEBUG=gocritic golangci-lint run` - # By default list of stable checks is used. - enabled-checks: - #!- rangeValCopy - - # Which checks should be disabled; can't be combined with 'enabled-checks'; default is empty - disabled-checks: - - regexpMust - - # Enable multiple checks by tags, run `GL_DEBUG=gocritic golangci-lint run` to see all tags and checks. - # Empty list by default. See https://github.com/go-critic/go-critic#usage -> section "Tags". enabled-tags: + - diagnostic + - experimental + - opinionated - performance - - settings: # settings passed to gocritic - captLocal: # must be valid enabled check name - paramsOnly: true - rangeValCopy: - sizeThreshold: 32 + - style + disabled-checks: + - dupImport # https://github.com/go-critic/go-critic/issues/845 + - ifElseChain + - octalLiteral + - whyNoLint + - wrapperFunc gocyclo: - # minimal code complexity to report, 30 by default (but we recommend 10-20) - min-complexity: 10 - godox: - # report any comments starting with keywords, this is useful for TODO or FIXME comments that - # might be left in the code accidentally and should be resolved before merging - keywords: # default keywords are TODO, BUG, and FIXME, these can be overwritten by this setting - - NOTE - - OPTIMIZE # marks code that should be optimized before merging - - HACK # marks hack-arounds that should be removed before merging - gofmt: - # simplify code: gofmt with `-s` option, true by default - simplify: true + min-complexity: 15 goimports: - # put imports beginning with prefix after 3rd-party packages; - # it's a comma-separated list of prefixes - local-prefixes: github.com/org/project + local-prefixes: github.com/golangci/golangci-lint golint: - # minimal confidence for issues, default is 0.8 - min-confidence: 0.8 + min-confidence: 0 gomnd: settings: mnd: - # the list of enabled checks, see https://github.com/tommy-muehle/go-mnd/#checks for description. - checks: argument,case,condition,operation,return,assign + # don't include the "operation" and "assign" + checks: argument,case,condition,return govet: - # report about shadowed variables check-shadowing: true - - # settings per analyzer settings: - printf: # analyzer name, run `go tool vet help` to see all analyzers - funcs: # run `go tool vet help printf` to see available settings for `printf` analyzer + printf: + funcs: - (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof - (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf - (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf - (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf - - # enable or disable analyzers by name - enable: - - atomicalign - enable-all: false - disable: - - shadow - disable-all: false - depguard: - list-type: blacklist - include-go-root: false - packages: - - github.com/sirupsen/logrus - packages-with-error-message: - # specify an error message to output when a blacklisted package is used - - github.com/sirupsen/logrus: "logging is allowed only by logutils.Log" lll: - # max line length, lines longer will be reported. Default is 120. - # '\t' is counted as 1 character by default, and can be changed with the tab-width option - line-length: 120 - # tab width in spaces. Default to 1. - tab-width: 1 + line-length: 140 maligned: - # print struct with more effective memory layout or not, false by default suggest-new: true misspell: - # Correct spellings using locale preferences for US or UK. - # Default is to use a neutral variety of English. - # Setting locale to US will correct the British spelling of 'colour' to 'color'. locale: US - ignore-words: - - someword - nakedret: - # make an issue if func has more lines of code than this setting and it has naked returns; default is 30 - max-func-lines: 30 - prealloc: - # XXX: we don't recommend using this linter before doing performance profiling. - # For most programs usage of prealloc will be a premature optimization. - - # Report preallocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them. - # True by default. - simple: true - range-loops: true # Report preallocation suggestions on range loops, true by default - for-loops: false # Report preallocation suggestions on for loops, false by default - rowserrcheck: - packages: - - github.com/jmoiron/sqlx - unparam: - # Inspect exported functions, default is false. Set to true if no external program/library imports your code. - # XXX: if you enable this setting, unparam will report a lot of false-positives in text editors: - # if it's called for subdir of a project it can't find external interfaces. All text editor integrations - # with golangci-lint call it on a directory with the changed file. - check-exported: false - unused: - # treat code as a program (not a library) and report unused exported identifiers; default is false. - # XXX: if you enable this setting, unused will report a lot of false-positives in text editors: - # if it's called for subdir of a project it can't find funcs usages. All text editor integrations - # with golangci-lint call it on a directory with the changed file. - check-exported: false - whitespace: - multi-if: false # Enforces newlines (or comments) after every multi-line if statement - multi-func: false # Enforces newlines (or comments) after every multi-line function signature - wsl: - # If true append is only allowed to be cuddled if appending value is - # matching variables, fields or types on line above. Default is true. - strict-append: true - # Allow calls and assignments to be cuddled as long as the lines have any - # matching variables, fields or types. Default is true. - allow-assign-and-call: true - # Allow multiline assignments to be cuddled. Default is true. - allow-multiline-assign: true - # Allow declarations (var) to be cuddled. - allow-cuddle-declarations: false - # Allow trailing comments in ending of blocks - allow-trailing-comment: false - # Force newlines in end of case at this limit (0 = never). - force-case-trailing-whitespace: 0 - - # The custom section can be used to define linter plugins to be loaded at runtime. See README doc - # for more info. - custom: - # Each custom linter should have a unique name. - #! example: - #! # The path to the plugin *.so. Can be absolute or local. Required for each custom linter - #! path: /path/to/example.so - #! # The description of the linter. Optional, just for documentation purposes. - #! description: This is an example usage of a plugin linter. - #! # Intended to point to the repo location of the linter. Optional, just for documentation purposes. - #! original-url: github.com/golangci/example-linter + nolintlint: + allow-leading-space: true # don't require machine-readable nolint directives (i.e. with no leading space) + allow-unused: false # report any unused nolint directives + require-explanation: false # don't require an explanation for nolint directives + require-specific: false # don't require nolint directives to be specific about which linter is being skipped linters: + # please, do not use `enable-all`: it's deprecated and will be removed soon. + # inverted configuration with `enable-all` and `disable` is not scalable during updates of golangci-lint + disable-all: true enable: - - megacheck + - bodyclose + - deadcode + - depguard + - dogsled + - dupl + - errcheck + - exhaustive + - funlen + - gochecknoinits + - goconst + - gocritic + - gocyclo + - gofmt + - goimports + - golint + - gomnd + - goprintffuncname + - gosec + - gosimple - govet - disable: - - maligned - - prealloc - disable-all: false - presets: - - bugs + - ineffassign + - interfacer + - lll + - misspell + - nakedret + - noctx + - nolintlint + - rowserrcheck + - scopelint + - staticcheck + - structcheck + - stylecheck + - typecheck + - unconvert + - unparam - unused - fast: false + - varcheck + - whitespace + # don't enable: + # - asciicheck + # - gochecknoglobals + # - gocognit + # - godot + # - godox + # - goerr113 + # - maligned + # - nestif + # - prealloc + # - testpackage + # - wsl issues: - # List of regexps of issue texts to exclude, empty list by default. - # But independently from this option we use default exclude patterns, - # it can be disabled by `exclude-use-default: false`. To list all - # excluded by default patterns execute `golangci-lint run --help` - exclude: - - abcdef - # Excluding configuration per-path, per-linter, per-text and per-source exclude-rules: - # Exclude some linters from running on tests files. - path: _test\.go linters: - - gocyclo - - errcheck - - dupl - - gosec + - gomnd - # Exclude known linters from partially hard-vendored code, - # which is impossible to exclude via "nolint" comments. - - path: internal/hmac/ - text: "weak cryptographic primitive" - linters: - - gosec - - # Exclude some staticcheck messages + # https://github.com/go-critic/go-critic/issues/926 - linters: - - staticcheck - text: "SA9003:" + - gocritic + text: "unnecessaryDefer:" - # Exclude lll issues for long lines with go:generate - - linters: - - lll - source: "^//go:generate " + # TODO temporary rule, must be removed + # seems related to v0.34.1, but I was not able to reproduce locally, + # I was also not able to reproduce in the CI of a fork, + # only the golangci-lint CI seems to be affected by this invalid analysis. + - path: pkg/golinters/scopelint.go + text: 'directive `//nolint:interfacer` is unused for linter interfacer' - # Independently from option `exclude` we use default exclude patterns, - # it can be disabled by this option. To list all - # excluded by default patterns execute `golangci-lint run --help`. - # Default value for this option is true. - exclude-use-default: false +run: + skip-dirs: + - test/testdata_etc + - internal/cache + - internal/renameio + - internal/robustio - # Maximum issues count per one linter. Set to 0 to disable. Default is 50. - max-issues-per-linter: 0 - - # Maximum count of issues with the same text. Set to 0 to disable. Default is 3. - max-same-issues: 0 - - # Show only new issues: if there are unstaged changes or untracked files, - # only those changes are analyzed, else only changes in HEAD~ are analyzed. - # It's a super-useful option for integration of golangci-lint into existing - # large codebase. It's not practical to fix all existing issues at the moment - # of integration: much better don't allow issues in new code. - # Default is false. - new: false - - # Show only new issues created after git revision `REV` - #!new-from-rev: REV - #new-from-rev: HEAD^ - - # Show only new issues created in git patch with set file path. - #!new-from-patch: path/to/patch/file +# golangci.com configuration +# https://github.com/golangci/golangci/wiki/Configuration +service: + golangci-lint-version: 1.23.x # use the fixed version to not introduce new linters unexpectedly + prepare: + - echo "here I can run custom commands, but no preparation needed for this repo" From 1d13e6a3bdbf893093a77bb117b72a3a1ef9b635 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Tue, 20 Sep 2022 21:12:13 -0700 Subject: [PATCH 52/94] golangci.yml - disable deprecated checkers --- .golangci.yml | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 830b3f4..9b111e6 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -21,9 +21,9 @@ linters-settings: enabled-tags: - diagnostic - experimental - - opinionated - performance - - style + #- style + #- opinionated disabled-checks: - dupImport # https://github.com/go-critic/go-critic/issues/845 - ifElseChain @@ -34,8 +34,6 @@ linters-settings: min-complexity: 15 goimports: local-prefixes: github.com/golangci/golangci-lint - golint: - min-confidence: 0 gomnd: settings: mnd: @@ -55,7 +53,7 @@ linters-settings: maligned: suggest-new: true misspell: - locale: US + locale: en_CA nolintlint: allow-leading-space: true # don't require machine-readable nolint directives (i.e. with no leading space) allow-unused: false # report any unused nolint directives @@ -68,12 +66,12 @@ linters: disable-all: true enable: - bodyclose - - deadcode - depguard - dogsled - dupl - errcheck - exhaustive + - exportloopref - funlen - gochecknoinits - goconst @@ -81,42 +79,43 @@ linters: - gocyclo - gofmt - goimports - - golint - gomnd - goprintffuncname - gosec - gosimple - govet - ineffassign - - interfacer - lll - misspell - nakedret - noctx - nolintlint - - rowserrcheck - - scopelint - staticcheck - - structcheck - stylecheck - typecheck - unconvert - unparam - unused - - varcheck - whitespace # don't enable: # - asciicheck + # - deadcode # - gochecknoglobals # - gocognit # - godot # - godox # - goerr113 + # - golint + # - interfacer # - maligned # - nestif # - prealloc + ## - rowserrcheck + # - scopelint + # - structcheck # - testpackage + # - varcheck # - wsl issues: From 5c826f7a5f1791e82f3e98e126bb0a2faa6cd130 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Tue, 20 Sep 2022 20:57:08 -0700 Subject: [PATCH 53/94] Updated golangci-lint config; xsd.sysvrc init script updates --- .golangci.yml | 399 +++++++++++++------------------------------- xs/termsize_unix.go | 3 +- xs/xs.go | 72 ++++---- xsd.sysvrc | 4 + 4 files changed, 153 insertions(+), 325 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 2ea8fb8..0e32a11 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,327 +1,154 @@ -# This file contains all available configuration options -# with their default values. - -# options for analysis running -run: - # default concurrency is a available CPU number - concurrency: 4 - - # timeout for analysis, e.g. 30s, 5m, default is 1m - timeout: 1m - - # exit code when at least one issue was found, default is 1 - issues-exit-code: 1 - - # include test files or not, default is true - tests: true - - # list of build tags, all linters use it. Default is empty list. - build-tags: - - mytag - - # which dirs to skip: issues from them won't be reported; - # can use regexp here: generated.*, regexp is applied on full path; - # default value is empty list, but default dirs are skipped independently - # from this option's value (see skip-dirs-use-default). - skip-dirs: - - src/external_libs - - autogenerated_by_my_lib - - # default is true. Enables skipping of directories: - # vendor$, third_party$, testdata$, examples$, Godeps$, builtin$ - skip-dirs-use-default: true - - # which files to skip: they will be analyzed, but issues from them - # won't be reported. Default value is empty list, but there is - # no need to include all autogenerated files, we confidently recognize - # autogenerated files. If it's not please let us know. - skip-files: - - ".*\\.my\\.go$" - - lib/bad.go - - # by default isn't set. If set we pass it to "go list -mod={option}". From "go help modules": - # If invoked with -mod=readonly, the go command is disallowed from the implicit - # automatic updating of go.mod described above. Instead, it fails when any changes - # to go.mod are needed. This setting is most useful to check that go.mod does - # not need updates, such as in a continuous integration and testing system. - # If invoked with -mod=vendor, the go command assumes that the vendor - # directory holds the correct copies of dependencies and ignores - # the dependency descriptions in go.mod. - #! modules-download-mode: readonly|release|vendor - - -# output configuration options -output: - # colored-line-number|line-number|json|tab|checkstyle|code-climate, default is "colored-line-number" - format: colored-line-number - - # print lines of code with issue, default is true - print-issued-lines: true - - # print linter name in the end of issue text, default is true - print-linter-name: true - - # make issues output unique by line, default is true - uniq-by-line: true - - -# all available settings of specific linters linters-settings: - dogsled: - # checks assignments with too many blank identifiers; default is 2 - max-blank-identifiers: 2 + depguard: + list-type: blacklist + packages: + # logging is allowed only by logutils.Log, logrus + # is allowed to use only in logutils package + - github.com/sirupsen/logrus + packages-with-error-message: + - github.com/sirupsen/logrus: "logging is allowed only by logutils.Log" dupl: - # tokens count to trigger issue, 150 by default threshold: 100 - errcheck: - # report about not checking of errors in type assetions: `a := b.(MyStruct)`; - # default is false: such cases aren't reported by default. - check-type-assertions: false - - # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`; - # default is false: such cases aren't reported by default. - check-blank: false - - # [deprecated] comma-separated list of pairs of the form pkg:regex - # the regex is used to ignore names within pkg. (default "fmt:.*"). - # see https://github.com/kisielk/errcheck#the-deprecated-method for details - ignore: fmt:.*,io/ioutil:^Read.* - - # path to a file containing a list of functions to exclude from checking - # see https://github.com/kisielk/errcheck#excluding-functions for details - #!exclude: /path/to/file.txt funlen: - lines: 60 - statements: 40 - gocognit: - # minimal code complexity to report, 30 by default (but we recommend 10-20) - min-complexity: 10 + lines: 125 + statements: 50 + gci: + local-prefixes: github.com/golangci/golangci-lint goconst: - # minimal length of string constant, 3 by default - min-len: 3 - # minimal occurrences count to trigger, 3 by default - min-occurrences: 3 + min-len: 2 + min-occurrences: 2 gocritic: - # Which checks should be enabled; can't be combined with 'disabled-checks'; - # See https://go-critic.github.io/overview#checks-overview - # To check which checks are enabled run `GL_DEBUG=gocritic golangci-lint run` - # By default list of stable checks is used. - enabled-checks: - #!- rangeValCopy - - # Which checks should be disabled; can't be combined with 'enabled-checks'; default is empty - disabled-checks: - - regexpMust - - # Enable multiple checks by tags, run `GL_DEBUG=gocritic golangci-lint run` to see all tags and checks. - # Empty list by default. See https://github.com/go-critic/go-critic#usage -> section "Tags". enabled-tags: + - diagnostic + - experimental + - opinionated - performance - - settings: # settings passed to gocritic - captLocal: # must be valid enabled check name - paramsOnly: true - rangeValCopy: - sizeThreshold: 32 + - style + disabled-checks: + - commentFormatting + - dupImport # https://github.com/go-critic/go-critic/issues/845 + - ifElseChain + - octalLiteral + - whyNoLint + - wrapperFunc gocyclo: - # minimal code complexity to report, 30 by default (but we recommend 10-20) - min-complexity: 10 - godox: - # report any comments starting with keywords, this is useful for TODO or FIXME comments that - # might be left in the code accidentally and should be resolved before merging - keywords: # default keywords are TODO, BUG, and FIXME, these can be overwritten by this setting - - NOTE - - OPTIMIZE # marks code that should be optimized before merging - - HACK # marks hack-arounds that should be removed before merging - gofmt: - # simplify code: gofmt with `-s` option, true by default - simplify: true + min-complexity: 15 goimports: - # put imports beginning with prefix after 3rd-party packages; - # it's a comma-separated list of prefixes - local-prefixes: github.com/org/project - golint: - # minimal confidence for issues, default is 0.8 - min-confidence: 0.8 + local-prefixes: github.com/golangci/golangci-lint + #golint: + # min-confidence: 0 gomnd: settings: mnd: - # the list of enabled checks, see https://github.com/tommy-muehle/go-mnd/#checks for description. - checks: argument,case,condition,operation,return,assign + # don't include the "operation" and "assign" + checks: argument,case,condition,return govet: - # report about shadowed variables check-shadowing: true - - # settings per analyzer settings: - printf: # analyzer name, run `go tool vet help` to see all analyzers - funcs: # run `go tool vet help printf` to see available settings for `printf` analyzer + printf: + funcs: - (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof - (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf - (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf - (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf - - # enable or disable analyzers by name - enable: - - atomicalign - enable-all: false - disable: - - shadow - disable-all: false - depguard: - list-type: blacklist - include-go-root: false - packages: - - github.com/sirupsen/logrus - packages-with-error-message: - # specify an error message to output when a blacklisted package is used - - github.com/sirupsen/logrus: "logging is allowed only by logutils.Log" lll: - # max line length, lines longer will be reported. Default is 120. - # '\t' is counted as 1 character by default, and can be changed with the tab-width option - line-length: 120 - # tab width in spaces. Default to 1. - tab-width: 1 + line-length: 140 maligned: - # print struct with more effective memory layout or not, false by default suggest-new: true misspell: - # Correct spellings using locale preferences for US or UK. - # Default is to use a neutral variety of English. - # Setting locale to US will correct the British spelling of 'colour' to 'color'. - locale: US - ignore-words: - - someword - nakedret: - # make an issue if func has more lines of code than this setting and it has naked returns; default is 30 - max-func-lines: 30 - prealloc: - # XXX: we don't recommend using this linter before doing performance profiling. - # For most programs usage of prealloc will be a premature optimization. - - # Report preallocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them. - # True by default. - simple: true - range-loops: true # Report preallocation suggestions on range loops, true by default - for-loops: false # Report preallocation suggestions on for loops, false by default - rowserrcheck: - packages: - - github.com/jmoiron/sqlx - unparam: - # Inspect exported functions, default is false. Set to true if no external program/library imports your code. - # XXX: if you enable this setting, unparam will report a lot of false-positives in text editors: - # if it's called for subdir of a project it can't find external interfaces. All text editor integrations - # with golangci-lint call it on a directory with the changed file. - check-exported: false - unused: - # treat code as a program (not a library) and report unused exported identifiers; default is false. - # XXX: if you enable this setting, unused will report a lot of false-positives in text editors: - # if it's called for subdir of a project it can't find funcs usages. All text editor integrations - # with golangci-lint call it on a directory with the changed file. - check-exported: false - whitespace: - multi-if: false # Enforces newlines (or comments) after every multi-line if statement - multi-func: false # Enforces newlines (or comments) after every multi-line function signature - wsl: - # If true append is only allowed to be cuddled if appending value is - # matching variables, fields or types on line above. Default is true. - strict-append: true - # Allow calls and assignments to be cuddled as long as the lines have any - # matching variables, fields or types. Default is true. - allow-assign-and-call: true - # Allow multiline assignments to be cuddled. Default is true. - allow-multiline-assign: true - # Allow declarations (var) to be cuddled. - allow-cuddle-declarations: false - # Allow trailing comments in ending of blocks - allow-trailing-comment: false - # Force newlines in end of case at this limit (0 = never). - force-case-trailing-whitespace: 0 - - # The custom section can be used to define linter plugins to be loaded at runtime. See README doc - # for more info. - custom: - # Each custom linter should have a unique name. - #! example: - #! # The path to the plugin *.so. Can be absolute or local. Required for each custom linter - #! path: /path/to/example.so - #! # The description of the linter. Optional, just for documentation purposes. - #! description: This is an example usage of a plugin linter. - #! # Intended to point to the repo location of the linter. Optional, just for documentation purposes. - #! original-url: github.com/golangci/example-linter + locale: en_CA + nolintlint: + allow-leading-space: true # don't require machine-readable nolint directives (i.e. with no leading space) + allow-unused: false # report any unused nolint directives + require-explanation: false # don't require an explanation for nolint directives + require-specific: false # don't require nolint directives to be specific about which linter is being skipped linters: + # please, do not use `enable-all`: it's deprecated and will be removed soon. + # inverted configuration with `enable-all` and `disable` is not scalable during updates of golangci-lint + disable-all: true enable: - - megacheck + - bodyclose + #- deadcode + - depguard + - dogsled + - dupl + - errcheck + - exhaustive + - funlen + - gochecknoinits + - goconst + - gocritic + - gocyclo + - gofmt + - goimports + #- golint + - gomnd + - goprintffuncname + - gosec + - gosimple - govet - disable: - - maligned - - prealloc - disable-all: false - presets: - - bugs + - ineffassign + #- interfacer + - lll + - misspell + #- nakedret + - noctx + - nolintlint + - rowserrcheck + #- scopelint + - staticcheck + #- structcheck + - stylecheck + - typecheck + - unconvert + - unparam - unused - fast: false + #- varcheck + - whitespace + # don't enable: + # - asciicheck + # - gochecknoglobals + # - gocognit + # - godot + # - godox + # - goerr113 + # - maligned + # - nestif + # - prealloc + # - testpackage + # - wsl issues: - # List of regexps of issue texts to exclude, empty list by default. - # But independently from this option we use default exclude patterns, - # it can be disabled by `exclude-use-default: false`. To list all - # excluded by default patterns execute `golangci-lint run --help` - exclude: - - abcdef - # Excluding configuration per-path, per-linter, per-text and per-source exclude-rules: - # Exclude some linters from running on tests files. - path: _test\.go linters: - - gocyclo - - errcheck - - dupl - - gosec + - gomnd - # Exclude known linters from partially hard-vendored code, - # which is impossible to exclude via "nolint" comments. - - path: internal/hmac/ - text: "weak cryptographic primitive" - linters: - - gosec - - # Exclude some staticcheck messages + # https://github.com/go-critic/go-critic/issues/926 - linters: - - staticcheck - text: "SA9003:" + - gocritic + text: "unnecessaryDefer:" - # Exclude lll issues for long lines with go:generate - - linters: - - lll - source: "^//go:generate " + # TODO temporary rule, must be removed + # seems related to v0.34.1, but I was not able to reproduce locally, + # I was also not able to reproduce in the CI of a fork, + # only the golangci-lint CI seems to be affected by this invalid analysis. + - path: pkg/golinters/scopelint.go + text: 'directive `//nolint:interfacer` is unused for linter interfacer' - # Independently from option `exclude` we use default exclude patterns, - # it can be disabled by this option. To list all - # excluded by default patterns execute `golangci-lint run --help`. - # Default value for this option is true. - exclude-use-default: false +run: + skip-dirs: + - test/testdata_etc + - internal/cache + - internal/renameio + - internal/robustio - # Maximum issues count per one linter. Set to 0 to disable. Default is 50. - max-issues-per-linter: 0 - - # Maximum count of issues with the same text. Set to 0 to disable. Default is 3. - max-same-issues: 0 - - # Show only new issues: if there are unstaged changes or untracked files, - # only those changes are analyzed, else only changes in HEAD~ are analyzed. - # It's a super-useful option for integration of golangci-lint into existing - # large codebase. It's not practical to fix all existing issues at the moment - # of integration: much better don't allow issues in new code. - # Default is false. - new: false - - # Show only new issues created after git revision `REV` - #!new-from-rev: REV - #new-from-rev: HEAD^ - - # Show only new issues created in git patch with set file path. - #!new-from-patch: path/to/patch/file +# golangci.com configuration +# https://github.com/golangci/golangci/wiki/Configuration +service: + golangci-lint-version: 1.23.x # use the fixed version to not introduce new linters unexpectedly + prepare: + - echo "here I can run custom commands, but no preparation needed for this repo" diff --git a/xs/termsize_unix.go b/xs/termsize_unix.go index 410a243..c435d9a 100644 --- a/xs/termsize_unix.go +++ b/xs/termsize_unix.go @@ -1,3 +1,4 @@ +//go:build linux || freebsd // +build linux freebsd package main @@ -30,7 +31,7 @@ func handleTermResizes(conn *xsnet.Conn) { log.Println(err) } termSzPacket := fmt.Sprintf("%d %d", rows, cols) - conn.WritePacket([]byte(termSzPacket), xsnet.CSOTermSize) // nolint: errcheck,gosec + conn.WritePacket([]byte(termSzPacket), xsnet.CSOTermSize) } }() ch <- syscall.SIGWINCH // Initial resize. diff --git a/xs/xs.go b/xs/xs.go index 1c8314d..2e142e1 100755 --- a/xs/xs.go +++ b/xs/xs.go @@ -1,5 +1,4 @@ // xs client - // // Copyright (c) 2017-2020 Russell Magee // Licensed under the terms of the MIT license (see LICENSE.mit in this @@ -18,7 +17,6 @@ import ( "io/ioutil" "log" "math/rand" - "net" "os" "os/exec" "os/user" @@ -32,7 +30,7 @@ import ( "time" "net/http" - _ "net/http/pprof" + _ "net/http/pprof" //nolint:gosec xs "blitter.com/go/xs" "blitter.com/go/xs/logger" @@ -241,7 +239,7 @@ func GetSize() (cols, rows int, err error) { return } -func buildCmdRemoteToLocal(copyQuiet bool, copyLimitBPS uint, destPath, files string) (captureStderr bool, cmd string, args []string) { +func buildCmdRemoteToLocal(copyQuiet bool, copyLimitBPS uint, destPath string) (captureStderr bool, cmd string, args []string) { // Detect if we have 'pv' // pipeview http://www.ivarch.com/programs/pv.shtml // and use it for nice client progress display. @@ -441,10 +439,9 @@ func doCopyMode(conn *xsnet.Conn, remoteDest bool, files string, copyQuiet bool, log.Println("remote filepath:", string(rec.Cmd()), "local files:", files) destPath := files - _, cmdName, cmdArgs := buildCmdRemoteToLocal(copyQuiet, copyLimitBPS, destPath, strings.TrimSpace(files)) + _, cmdName, cmdArgs := buildCmdRemoteToLocal(copyQuiet, copyLimitBPS, destPath) - var c *exec.Cmd - c = exec.Command(cmdName, cmdArgs...) // #nosec + c := exec.Command(cmdName, cmdArgs...) // #nosec c.Stdin = conn c.Stdout = os.Stdout c.Stderr = os.Stderr @@ -557,15 +554,15 @@ func doShellMode(isInteractive bool, conn *xsnet.Conn, oldState *xs.State, rec * } func usageShell() { - fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0]) // nolint: errcheck - fmt.Fprintf(os.Stderr, "%s [opts] [user]@server\n", os.Args[0]) // nolint: errcheck + fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0]) + fmt.Fprintf(os.Stderr, "%s [opts] [user]@server\n", os.Args[0]) flag.PrintDefaults() } func usageCp() { - fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0]) // nolint: errcheck - fmt.Fprintf(os.Stderr, "%s [opts] srcFileOrDir [...] [user]@server[:dstpath]\n", os.Args[0]) // nolint: errcheck - fmt.Fprintf(os.Stderr, "%s [opts] [user]@server[:srcFileOrDir] dstPath\n", os.Args[0]) // nolint: errcheck + fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0]) + fmt.Fprintf(os.Stderr, "%s [opts] srcFileOrDir [...] [user]@server[:dstpath]\n", os.Args[0]) + fmt.Fprintf(os.Stderr, "%s [opts] [user]@server[:srcFileOrDir] dstPath\n", os.Args[0]) flag.PrintDefaults() } @@ -581,18 +578,18 @@ func rejectUserMsg() string { // // Server responds with [CSOTunAck:rport] or [CSOTunRefused:rport] // (handled in xsnet.Read()) -func reqTunnel(hc *xsnet.Conn, lp uint16, p string /*net.Addr*/, rp uint16) { +func reqTunnel(hc *xsnet.Conn, lp uint16 /*, p string*/ /*net.Addr*/, rp uint16) { // Write request to server so it can attempt to set up its end var bTmp bytes.Buffer if e := binary.Write(&bTmp, binary.BigEndian, lp); e != nil { - fmt.Fprintln(os.Stderr, "reqTunnel:", e) // nolint: errcheck + fmt.Fprintln(os.Stderr, "reqTunnel:", e) } if e := binary.Write(&bTmp, binary.BigEndian, rp); e != nil { - fmt.Fprintln(os.Stderr, "reqTunnel:", e) // nolint: errcheck + fmt.Fprintln(os.Stderr, "reqTunnel:", e) } - _ = logger.LogDebug(fmt.Sprintln("[Client sending CSOTunSetup]")) // nolint: gosec + _ = logger.LogDebug(fmt.Sprintln("[Client sending CSOTunSetup]")) if n, e := hc.WritePacket(bTmp.Bytes(), xsnet.CSOTunSetup); e != nil || n != len(bTmp.Bytes()) { - fmt.Fprintln(os.Stderr, "reqTunnel:", e) // nolint: errcheck + fmt.Fprintln(os.Stderr, "reqTunnel:", e) } } @@ -632,7 +629,7 @@ func parseNonSwitchArgs(a []string) (user, host, path string, isDest bool, other } func launchTuns(conn *xsnet.Conn, remoteHost string, tuns string) { - remAddrs, _ := net.LookupHost(remoteHost) // nolint: gosec + /*remAddrs, _ := net.LookupHost(remoteHost)*/ if tuns == "" { return @@ -641,8 +638,8 @@ func launchTuns(conn *xsnet.Conn, remoteHost string, tuns string) { tunSpecs := strings.Split(tuns, ",") for _, tunItem := range tunSpecs { var lPort, rPort uint16 - _, _ = fmt.Sscanf(tunItem, "%d:%d", &lPort, &rPort) // nolint: gosec - reqTunnel(conn, lPort, remAddrs[0], rPort) + _, _ = fmt.Sscanf(tunItem, "%d:%d", &lPort, &rPort) + reqTunnel(conn, lPort /*remAddrs[0],*/, rPort) } } @@ -677,7 +674,7 @@ func sendSessionParams(conn io.Writer /* *xsnet.Conn*/, rec *xs.Session) (e erro } // TODO: reduce gocyclo -func main() { +func main() { //nolint: funlen, gocyclo var ( isInteractive bool vopt bool @@ -799,7 +796,7 @@ func main() { // Set defaults if user doesn't specify user, path or port var uname string if remoteUser == "" { - u, _ := user.Current() // nolint: gosec + u, _ := user.Current() uname = localUserName(u) } else { uname = remoteUser @@ -861,7 +858,7 @@ func main() { // either the shell session or copy operation. _ = shellMode - Log, _ = logger.New(logger.LOG_USER|logger.LOG_DEBUG|logger.LOG_NOTICE|logger.LOG_ERR, "xs") // nolint: errcheck,gosec + Log, _ = logger.New(logger.LOG_USER|logger.LOG_DEBUG|logger.LOG_NOTICE|logger.LOG_ERR, "xs") xsnet.Init(dbg, "xs", logger.LOG_USER|logger.LOG_DEBUG|logger.LOG_NOTICE|logger.LOG_ERR) if dbg { log.SetOutput(Log) @@ -873,15 +870,15 @@ func main() { if !gopt { // See if we can log in via an auth token - u, _ := user.Current() // nolint: gosec + u, _ := user.Current() ab, aerr := ioutil.ReadFile(fmt.Sprintf("%s/.xs_id", u.HomeDir)) if aerr == nil { for _, line := range strings.Split(string(ab), "\n") { line = line + "\n" - idx := strings.Index(string(line), remoteHost+":"+uname) + idx := strings.Index(line, remoteHost+":"+uname) if idx >= 0 { line = line[idx:] - entries := strings.SplitN(string(line), "\n", -1) + entries := strings.SplitN(line, "\n", -1) authCookie = strings.TrimSpace(entries[0]) // Security scrub line = "" @@ -891,7 +888,6 @@ func main() { if authCookie == "" { _, _ = fmt.Fprintln(os.Stderr, "[no authtoken, use -g to request one from server]") } - } else { log.Printf("[cannot read %s/.xs_id]\n", u.HomeDir) } @@ -915,7 +911,7 @@ func main() { // We must make the decision about interactivity before Dial() // as it affects chaffing behaviour. 20180805 if gopt { - fmt.Fprintln(os.Stderr, "[requesting authtoken from server]") // nolint: errcheck + fmt.Fprintln(os.Stderr, "[requesting authtoken from server]") op = []byte{'A'} chaffFreqMin = 2 chaffFreqMax = 10 @@ -969,7 +965,7 @@ func main() { // TODO: send flag to server side indicating this // affects shell command used var oldState *xs.State - defer conn.Close() // nolint: errcheck + defer conn.Close() //=== From this point on, conn is a secure encrypted channel @@ -1023,13 +1019,13 @@ func main() { if sendErr != nil { restoreTermState(oldState) rec.SetStatus(254) - fmt.Fprintln(os.Stderr, "Error: server rejected secure proposal params or login timed out") // nolint: errcheck + fmt.Fprintln(os.Stderr, "Error: server rejected secure proposal params or login timed out") exitWithStatus(int(rec.Status())) //log.Fatal(sendErr) } //Security scrub - authCookie = "" // nolint: ineffassign + authCookie = "" //nolint: ineffassign runtime.GC() //=== Login Auth @@ -1039,11 +1035,11 @@ func main() { _, err = conn.Read(authReply) if err != nil { //=== Exit if auth reply not received - fmt.Fprintln(os.Stderr, "Error reading auth reply") // nolint: errcheck + fmt.Fprintln(os.Stderr, "Error reading auth reply") rec.SetStatus(255) } else if authReply[0] == 0 { //=== .. or if auth failed - fmt.Fprintln(os.Stderr, rejectUserMsg()) // nolint: errcheck + fmt.Fprintln(os.Stderr, rejectUserMsg()) rec.SetStatus(255) } else { //=== Set up chaffing to server @@ -1065,11 +1061,11 @@ func main() { keepAliveWorker := func() { for { // Add a bit of jitter to keepAlive so it doesn't stand out quite as much - time.Sleep(time.Duration(2000-rand.Intn(200)) * time.Millisecond) + time.Sleep(time.Duration(2000-rand.Intn(200)) * time.Millisecond) //nolint:gosec // FIXME: keepAlives should probably have small random packet len/data as well // to further obscure them vs. interactive or tunnel data // keepAlives must be >=2 bytes, due to processing elsewhere - conn.WritePacket([]byte{0, 0}, xsnet.CSOTunKeepAlive) // nolint: errcheck,gosec + conn.WritePacket([]byte{0, 0}, xsnet.CSOTunKeepAlive) //nolint: errcheck } } go keepAliveWorker() @@ -1082,13 +1078,13 @@ func main() { doShellMode(isInteractive, &conn, oldState, rec) } else { //=== (.. or file copy) - s, _ := doCopyMode(&conn, pathIsDest, fileArgs, copyQuiet, copyLimitBPS, rec) // nolint: errcheck,gosec + s, _ := doCopyMode(&conn, pathIsDest, fileArgs, copyQuiet, copyLimitBPS, rec) rec.SetStatus(s) } if rec.Status() != 0 { restoreTermState(oldState) - fmt.Fprintln(os.Stderr, "Session exited with status:", rec.Status()) // nolint: errcheck + fmt.Fprintln(os.Stderr, "Session exited with status:", rec.Status()) } } @@ -1115,7 +1111,7 @@ func localUserName(u *user.User) string { } func restoreTermState(oldState *xs.State) { - _ = xs.Restore(os.Stdin.Fd(), oldState) // nolint: errcheck,gosec + _ = xs.Restore(os.Stdin.Fd(), oldState) } // exitWithStatus wraps os.Exit() plus does any required pprof housekeeping diff --git a/xsd.sysvrc b/xsd.sysvrc index 8e617c5..415c591 100755 --- a/xsd.sysvrc +++ b/xsd.sysvrc @@ -11,6 +11,10 @@ set -e +echo "SET XSD_OPTS in this script to define allow KEX, cipher and hmac algs" +#XSD_OPTS="-L -aK KEX_all -aC C_all -aH H_all" +exit 1 + # /etc/init.d/xsd: start and stop the eXperimental "secure" Shell Daemon test -x /usr/local/sbin/xsd || exit 0 From 667328a91c9aca30ff6a6644553fcf7e5eb5d1cf Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sat, 24 Sep 2022 20:01:16 -0700 Subject: [PATCH 54/94] xs/ lint cleanups --- .golangci.yml | 2 + xs/termsize_unix.go | 2 +- xs/xs.go | 183 +++++++++++++++++++++++--------------------- 3 files changed, 100 insertions(+), 87 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 38507bb..a4cad3d 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -25,6 +25,8 @@ linters-settings: #- style #- opinionated disabled-checks: + - commentFormatting + - commentedOutCode - dupImport # https://github.com/go-critic/go-critic/issues/845 - ifElseChain - octalLiteral diff --git a/xs/termsize_unix.go b/xs/termsize_unix.go index c435d9a..112947a 100644 --- a/xs/termsize_unix.go +++ b/xs/termsize_unix.go @@ -31,7 +31,7 @@ func handleTermResizes(conn *xsnet.Conn) { log.Println(err) } termSzPacket := fmt.Sprintf("%d %d", rows, cols) - conn.WritePacket([]byte(termSzPacket), xsnet.CSOTermSize) + conn.WritePacket([]byte(termSzPacket), xsnet.CSOTermSize) //nolint:errcheck } }() ch <- syscall.SIGWINCH // Initial resize. diff --git a/xs/xs.go b/xs/xs.go index 2e142e1..3f8823f 100755 --- a/xs/xs.go +++ b/xs/xs.go @@ -14,7 +14,6 @@ import ( "flag" "fmt" "io" - "io/ioutil" "log" "math/rand" "os" @@ -57,6 +56,18 @@ var ( //////////////////////////////////////////////////// +const ( + CmdExitedEarly = 2 + XSNetDialFailed = 3 + ErrReadingAuthReply = 253 + ServerRejectedSecureProposal = 254 + GeneralProtocolErr = 255 +) + +const ( + DeadCharPrefix = 0x1d +) + // Praise Bob. Do not remove, lest ye lose Slack. const bob = string("\r\n\r\n" + "@@@@@@@^^~~~~~~~~~~~~~~~~~~~~^@@@@@@@@@\r\n" + @@ -154,7 +165,7 @@ func copyBuffer(dst io.Writer, src io.Reader, buf []byte) (written int64, err er if rt, ok := dst.(io.ReaderFrom); ok { return rt.ReadFrom(src) } - */ + */ //nolint:gocritic,nolintlint if buf == nil { size := 32 * 1024 if l, ok := src.(*io.LimitedReader); ok && int64(size) > l.N { @@ -175,8 +186,8 @@ func copyBuffer(dst io.Writer, src io.Reader, buf []byte) (written int64, err er // A repeat of 4 keys (conveniently 'dead' chars for most // interactive shells; here CTRL-]) shall introduce // some special responses or actions on the client side. - if seqPos < 4 { - if buf[0] == 0x1d { + if seqPos < 4 { //nolint:gomnd + if buf[0] == DeadCharPrefix { seqPos++ } } else { @@ -223,7 +234,7 @@ func GetSize() (cols, rows int, err error) { if err != nil { log.Println(err) - cols, rows = 80, 24 //failsafe + cols, rows = 80, 24 // failsafe } else { n, err := fmt.Sscanf(string(out), "%d %d\n", &rows, &cols) if n < 2 || @@ -257,7 +268,7 @@ func buildCmdRemoteToLocal(copyQuiet bool, copyLimitBPS uint, destPath string) ( } else { // TODO: Query remote side for total file/dir size bandwidthInBytesPerSec := " -L " + fmt.Sprintf("%d ", copyLimitBPS) - displayOpts := " -pre " + displayOpts := " -pre " //nolint:goconst cmd = xs.GetTool("bash") args = []string{"-c", "pv " + displayOpts + bandwidthInBytesPerSec + "| tar -xz -C " + destPath} } @@ -305,7 +316,7 @@ func buildCmdLocalToRemote(copyQuiet bool, copyLimitBPS uint, files string) (cap } else { captureStderr = copyQuiet bandwidthInBytesPerSec := " -L " + fmt.Sprintf("%d", copyLimitBPS) - displayOpts := " -pre " + displayOpts := " -pre " //nolint:goconst,nolintlint cmd = xs.GetTool("bash") args = []string{"-c", xs.GetTool("tar") + " -cz -f /dev/stdout "} files = strings.TrimSpace(files) @@ -355,9 +366,9 @@ func doCopyMode(conn *xsnet.Conn, remoteDest bool, files string, copyQuiet bool, var c *exec.Cmd - //os.Clearenv() - //os.Setenv("HOME", u.HomeDir) - //os.Setenv("TERM", "vt102") // TODO: server or client option? + // os.Clearenv() + // os.Setenv("HOME", u.HomeDir) + // os.Setenv("TERM", "vt102") // TODO: server or client option? captureStderr, cmdName, cmdArgs := buildCmdLocalToRemote(copyQuiet, copyLimitBPS, strings.TrimSpace(files)) c = exec.Command(cmdName, cmdArgs...) // #nosec @@ -390,7 +401,7 @@ func doCopyMode(conn *xsnet.Conn, remoteDest bool, files string, copyQuiet bool, if err != nil { fmt.Println("cmd exited immediately. Cannot get cmd.Wait().ExitStatus()") err = errors.New("cmd exited prematurely") - exitStatus = uint32(2) + exitStatus = uint32(CmdExitedEarly) } else { if err = c.Wait(); err != nil { if exiterr, ok := err.(*exec.ExitError); ok { @@ -410,7 +421,7 @@ func doCopyMode(conn *xsnet.Conn, remoteDest bool, files string, copyQuiet bool, } // send CSOExitStatus to inform remote (server) end cp is done log.Println("Sending local exitStatus:", exitStatus) - r := make([]byte, 4) + r := make([]byte, 4) //nolint:gomnd binary.BigEndian.PutUint32(r, exitStatus) _, we := conn.WritePacket(r, xsnet.CSOExitStatus) if we != nil { @@ -418,7 +429,7 @@ func doCopyMode(conn *xsnet.Conn, remoteDest bool, files string, copyQuiet bool, } // Do a final read for remote's exit status - s := make([]byte, 4) + s := make([]byte, 4) //nolint:gomnd _, remErr := conn.Read(s) if remErr != io.EOF && !strings.Contains(remErr.Error(), "use of closed network") && @@ -478,8 +489,8 @@ func doCopyMode(conn *xsnet.Conn, remoteDest bool, files string, copyQuiet bool, // doShellMode begins an xs shell session (one-shot command or // interactive). func doShellMode(isInteractive bool, conn *xsnet.Conn, oldState *xs.State, rec *xs.Session) { - //client reader (from server) goroutine - //Read remote end's stdout + // Client reader (from server) goroutine + // Read remote end's stdout wg.Add(1) // #gv:s/label=\"doShellMode\$1\"/label=\"shellRemoteToStdin\"/ @@ -602,7 +613,7 @@ func parseNonSwitchArgs(a []string) (user, host, path string, isDest bool, other if strings.Contains(arg, ":") || strings.Contains(arg, "@") { fancyArg := strings.Split(flag.Arg(i), "@") var fancyHostPath []string - if len(fancyArg) < 2 { + if len(fancyArg) < 2 { //nolint:gomnd //TODO: no user specified, use current fancyUser = "[default:getUser]" fancyHostPath = strings.Split(fancyArg[0], ":") @@ -628,8 +639,8 @@ func parseNonSwitchArgs(a []string) (user, host, path string, isDest bool, other return fancyUser, fancyHost, fancyPath, isDest, otherArgs } -func launchTuns(conn *xsnet.Conn, remoteHost string, tuns string) { - /*remAddrs, _ := net.LookupHost(remoteHost)*/ +func launchTuns(conn *xsnet.Conn /*remoteHost string,*/, tuns string) { + /*remAddrs, _ := net.LookupHost(remoteHost)*/ //nolint:gocritic,nolintlint if tuns == "" { return @@ -678,12 +689,12 @@ func main() { //nolint: funlen, gocyclo var ( isInteractive bool vopt bool - gopt bool //login via password, asking server to generate authToken + gopt bool // true: login via password, asking server to generate authToken dbg bool - shellMode bool // if true act as shell, else file copier - cipherAlg string //cipher alg - hmacAlg string //hmac alg - kexAlg string //KEX/KEM alg + shellMode bool // true: act as shell, false: file copier + cipherAlg string + hmacAlg string + kexAlg string server string port uint cmdStr string @@ -703,7 +714,7 @@ func main() { //nolint: funlen, gocyclo op []byte ) - //=== Common (xs and xc) option parsing + // === Common (xs and xc) option parsing flag.BoolVar(&vopt, "v", false, "show version") flag.BoolVar(&dbg, "d", false, "debug logging") @@ -731,18 +742,18 @@ func main() { //nolint: funlen, gocyclo KEX_FRODOKEM_1344SHAKE KEX_FRODOKEM_976AES KEX_FRODOKEM_976SHAKE`) - flag.StringVar(&kcpMode, "K", "unused", "KCP `alg`, one of [KCP_NONE | KCP_AES | KCP_BLOWFISH | KCP_CAST5 | KCP_SM4 | KCP_SALSA20 | KCP_SIMPLEXOR | KCP_TEA | KCP_3DES | KCP_TWOFISH | KCP_XTEA] to use KCP (github.com/xtaci/kcp-go) reliable UDP instead of TCP") - flag.UintVar(&port, "p", 2000, "``port") - //flag.StringVar(&authCookie, "a", "", "auth cookie") + flag.StringVar(&kcpMode, "K", "unused", "KCP `alg`, one of [KCP_NONE | KCP_AES | KCP_BLOWFISH | KCP_CAST5 | KCP_SM4 | KCP_SALSA20 | KCP_SIMPLEXOR | KCP_TEA | KCP_3DES | KCP_TWOFISH | KCP_XTEA] to use KCP (github.com/xtaci/kcp-go) reliable UDP instead of TCP") //nolint:lll + flag.UintVar(&port, "p", 2000, "``port") //nolint:gomnd,lll + //nolint:gocritic,nolintlint // flag.StringVar(&authCookie, "a", "", "auth cookie") flag.BoolVar(&chaffEnabled, "e", true, "enable chaff pkts") - flag.UintVar(&chaffFreqMin, "f", 100, "chaff pkt freq min `msecs`") - flag.UintVar(&chaffFreqMax, "F", 5000, "chaff pkt freq max `msecs`") - flag.UintVar(&chaffBytesMax, "B", 64, "chaff pkt size max `bytes`") + flag.UintVar(&chaffFreqMin, "f", 100, "chaff pkt freq min `msecs`") //nolint:gomnd + flag.UintVar(&chaffFreqMax, "F", 5000, "chaff pkt freq max `msecs`") //nolint:gomnd + flag.UintVar(&chaffBytesMax, "B", 64, "chaff pkt size max `bytes`") //nolint:gomnd flag.StringVar(&cpuprofile, "cpuprofile", "", "write cpu profile to <`file`>") flag.StringVar(&memprofile, "memprofile", "", "write memory profile to <`file`>") - //=== xc vs. xs option parsing + // === xc vs. xs option parsing // Find out what program we are (shell or copier) myPath := strings.Split(os.Args[0], string(os.PathSeparator)) @@ -759,7 +770,7 @@ func main() { //nolint: funlen, gocyclo flag.Usage = usageShell } else { flag.BoolVar(©Quiet, "q", false, "do not output progress bar during copy") - flag.UintVar(©LimitBPS, "L", 8589934592, "copy max rate in bytes per sec") + flag.UintVar(©LimitBPS, "L", 8589934592, "copy max rate in bytes per sec") //nolint:gomnd flag.Usage = usageCp } flag.Parse() @@ -769,7 +780,7 @@ func main() { //nolint: funlen, gocyclo exitWithStatus(0) } - //=== Profiling instrumentation + // === Profiling instrumentation if cpuprofile != "" { f, err := os.Create(cpuprofile) @@ -779,19 +790,19 @@ func main() { //nolint: funlen, gocyclo defer f.Close() fmt.Println("StartCPUProfile()") if err := pprof.StartCPUProfile(f); err != nil { - log.Fatal("could not start CPU profile: ", err) + log.Fatal("could not start CPU profile: ", err) //nolint:gocritic } else { defer pprof.StopCPUProfile() } - go func() { http.ListenAndServe("localhost:6060", nil) }() + go func() { http.ListenAndServe("localhost:6060", nil) }() //nolint:errcheck,gosec } - //=== User, host, port and path args for file operations, if applicable + // === User, host, port and path args for file operations, if applicable remoteUser, remoteHost, tmpPath, pathIsDest, otherArgs := parseNonSwitchArgs(flag.Args()) - //fmt.Println("otherArgs:", otherArgs) + //nolint:gocritic,nolintlint // fmt.Println("otherArgs:", otherArgs) // Set defaults if user doesn't specify user, path or port var uname string @@ -809,7 +820,7 @@ func main() { //nolint: funlen, gocyclo tmpPath = "." } - //=== Copy mode arg and copy src/dest setup + // === Copy mode arg and copy src/dest setup var fileArgs string if !shellMode /*&& tmpPath != ""*/ { @@ -842,15 +853,15 @@ func main() { //nolint: funlen, gocyclo } } - //=== Do some final option consistency checks + // === Do some final option consistency checks - //fmt.Println("server finally is:", server) + //nolint:gocritic,nolintlint // fmt.Println("server finally is:", server) if flag.NFlag() == 0 && server == "" { flag.Usage() exitWithStatus(0) } - if len(cmdStr) != 0 && (len(copySrc) != 0 || len(copyDst) != 0) { + if cmdStr != "" && (len(copySrc) != 0 || copyDst != "") { log.Fatal("incompatible options -- either cmd (-x) or copy ops but not both") } @@ -863,18 +874,18 @@ func main() { //nolint: funlen, gocyclo if dbg { log.SetOutput(Log) } else { - log.SetOutput(ioutil.Discard) + log.SetOutput(io.Discard) } - //=== Auth token fetch for login + // === Auth token fetch for login if !gopt { // See if we can log in via an auth token u, _ := user.Current() - ab, aerr := ioutil.ReadFile(fmt.Sprintf("%s/.xs_id", u.HomeDir)) + ab, aerr := os.ReadFile(fmt.Sprintf("%s/.xs_id", u.HomeDir)) if aerr == nil { for _, line := range strings.Split(string(ab), "\n") { - line = line + "\n" + line += "\n" idx := strings.Index(line, remoteHost+":"+uname) if idx >= 0 { line = line[idx:] @@ -894,8 +905,8 @@ func main() { //nolint: funlen, gocyclo } runtime.GC() - //=== Enforce some sane min/max vals on chaff flags - if chaffFreqMin < 2 { + // === Enforce some sane min/max vals on chaff flags + if chaffFreqMin < 2 { //nolint:gomnd chaffFreqMin = 2 } if chaffFreqMax == 0 { @@ -905,7 +916,7 @@ func main() { //nolint: funlen, gocyclo chaffBytesMax = 64 } - //=== Shell vs. Copy mode chaff and cmd setup + // === Shell vs. Copy mode chaff and cmd setup if shellMode { // We must make the decision about interactivity before Dial() @@ -915,7 +926,7 @@ func main() { //nolint: funlen, gocyclo op = []byte{'A'} chaffFreqMin = 2 chaffFreqMax = 10 - } else if len(cmdStr) == 0 { + } else if cmdStr == "" { op = []byte{'s'} isInteractive = true } else { @@ -936,18 +947,18 @@ func main() { //nolint: funlen, gocyclo // client->server file copy // src file list is in copySrc op = []byte{'D'} - //fmt.Println("client->server copy:", string(copySrc), "->", copyDst) + //nolint:gocritic,nolintlint // fmt.Println("client->server copy:", string(copySrc), "->", copyDst) cmdStr = copyDst } else { // server->client file copy // remote src file(s) in copyDsr op = []byte{'S'} - //fmt.Println("server->client copy:", string(copySrc), "->", copyDst) + //nolint:gocritic,nolintlint // fmt.Println("server->client copy:", string(copySrc), "->", copyDst) cmdStr = string(copySrc) } } - //=== TCP / KCP Dial setup + // === TCP / KCP Dial setup proto := "tcp" if kcpMode != "unused" { @@ -956,10 +967,10 @@ func main() { //nolint: funlen, gocyclo conn, err := xsnet.Dial(proto, server, cipherAlg, hmacAlg, kexAlg, kcpMode) if err != nil { fmt.Println(err) - exitWithStatus(3) + exitWithStatus(XSNetDialFailed) } - //=== Shell terminal mode (Shell vs. Copy) setup + // === Shell terminal mode (Shell vs. Copy) setup // Set stdin in raw mode if it's an interactive session // TODO: send flag to server side indicating this @@ -967,7 +978,7 @@ func main() { //nolint: funlen, gocyclo var oldState *xs.State defer conn.Close() - //=== From this point on, conn is a secure encrypted channel + // === From this point on, conn is a secure encrypted channel if shellMode { if isatty.IsTerminal(os.Stdin.Fd()) { @@ -983,20 +994,20 @@ func main() { //nolint: funlen, gocyclo } } - //=== Login phase + // === Login phase // Start login timeout here and disconnect if user/pass phase stalls - //iloginImpatience := time.AfterFunc(20*time.Second, func() { - //i fmt.Printf(" .. [you still there? Waiting for a password.]") - //i}) - loginTimeout := time.AfterFunc(30*time.Second, func() { + // iloginImpatience := time.AfterFunc(20*time.Second, func() { + // i fmt.Printf(" .. [you still there? Waiting for a password.]") + // i}) + loginTimeout := time.AfterFunc(30*time.Second, func() { //nolint:gomnd restoreTermState(oldState) fmt.Printf(" .. [login timeout]\n") exitWithStatus(xsnet.CSOLoginTimeout) }) - if len(authCookie) == 0 { - //No auth token, prompt for password + if authCookie == "" { + // No auth token, prompt for password fmt.Printf("Gimme cookie:") ab, e := xs.ReadPassword(os.Stdin.Fd()) fmt.Printf("\r\n") @@ -1006,43 +1017,43 @@ func main() { //nolint: funlen, gocyclo authCookie = string(ab) } - //i_ = loginImpatience.Stop() + //nolint:gocritic,nolintlint // i_ = loginImpatience.Stop() _ = loginTimeout.Stop() // Security scrub runtime.GC() - //=== Session param and TERM setup + // === Session param and TERM setup // Set up session params and send over to server rec := xs.NewSession(op, []byte(uname), []byte(remoteHost), []byte(os.Getenv("TERM")), []byte(cmdStr), []byte(authCookie), 0) sendErr := sendSessionParams(&conn, rec) if sendErr != nil { restoreTermState(oldState) - rec.SetStatus(254) + rec.SetStatus(ServerRejectedSecureProposal) fmt.Fprintln(os.Stderr, "Error: server rejected secure proposal params or login timed out") exitWithStatus(int(rec.Status())) - //log.Fatal(sendErr) + //nolint:gocritic,nolintlint // log.Fatal(sendErr) } - //Security scrub + // Security scrub authCookie = "" //nolint: ineffassign runtime.GC() - //=== Login Auth + // === Login Auth - //=== Read auth reply from server + // === Read auth reply from server authReply := make([]byte, 1) // bool: 0 = fail, 1 = pass _, err = conn.Read(authReply) if err != nil { - //=== Exit if auth reply not received + // === Exit if auth reply not received fmt.Fprintln(os.Stderr, "Error reading auth reply") - rec.SetStatus(255) + rec.SetStatus(ErrReadingAuthReply) } else if authReply[0] == 0 { - //=== .. or if auth failed + // === .. or if auth failed fmt.Fprintln(os.Stderr, rejectUserMsg()) - rec.SetStatus(255) + rec.SetStatus(GeneralProtocolErr) } else { - //=== Set up chaffing to server + // === Set up chaffing to server conn.SetupChaff(chaffFreqMin, chaffFreqMax, chaffBytesMax) // enable client->server chaffing if chaffEnabled { // #gv:s/label=\"main\$2\"/label=\"deferCloseChaff\"/ @@ -1052,16 +1063,16 @@ func main() { //nolint: funlen, gocyclo defer conn.ShutdownChaff() } - //=== (goroutine) Start keepAliveWorker for tunnels + // === (goroutine) Start keepAliveWorker for tunnels // #gv:s/label=\"main\$1\"/label=\"tunKeepAlive\"/ // TODO:.gv:main:1:tunKeepAlive - //[1]: better to always send tunnel keepAlives even if client didn't specify - // any, to prevent listeners from knowing this. - //[1] if tunSpecStr != "" { + // [1]: better to always send tunnel keepAlives even if client didn't specify + // any, to prevent listeners from knowing this. + // [1] if tunSpecStr != "" { keepAliveWorker := func() { for { // Add a bit of jitter to keepAlive so it doesn't stand out quite as much - time.Sleep(time.Duration(2000-rand.Intn(200)) * time.Millisecond) //nolint:gosec + time.Sleep(time.Duration(2000-rand.Intn(200)) * time.Millisecond) //nolint:gosec,gomnd // FIXME: keepAlives should probably have small random packet len/data as well // to further obscure them vs. interactive or tunnel data // keepAlives must be >=2 bytes, due to processing elsewhere @@ -1069,15 +1080,15 @@ func main() { //nolint: funlen, gocyclo } } go keepAliveWorker() - //[1]} + // [1]} - //=== Session entry (shellMode or copyMode) + // === Session entry (shellMode or copyMode) if shellMode { - //=== (shell) launch tunnels - launchTuns(&conn, remoteHost, tunSpecStr) + // === (shell) launch tunnels + launchTuns(&conn /*remoteHost,*/, tunSpecStr) doShellMode(isInteractive, &conn, oldState, rec) } else { - //=== (.. or file copy) + // === (.. or file copy) s, _ := doCopyMode(&conn, pathIsDest, fileArgs, copyQuiet, copyLimitBPS, rec) rec.SetStatus(s) } @@ -1093,7 +1104,7 @@ func main() { //nolint: funlen, gocyclo oldState = nil } - //=== Exit + // === Exit exitWithStatus(int(rec.Status())) } @@ -1128,7 +1139,7 @@ func exitWithStatus(status int) { defer f.Close() runtime.GC() // get up-to-date statistics if err := pprof.WriteHeapProfile(f); err != nil { - log.Fatal("could not write memory profile: ", err) + log.Fatal("could not write memory profile: ", err) //nolint:gocritic } } From b2e43f4bad256f24aa2c4ebb02c759c22108ad47 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sun, 25 Sep 2022 11:33:09 -0700 Subject: [PATCH 55/94] Converted xsnet Read() ctrlStatOp logic to switch --- xsnet/net.go | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/xsnet/net.go b/xsnet/net.go index bfb002f..131c1cf 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -1195,6 +1195,7 @@ func (hc Conn) Read(b []byte) (n int, err error) { var hmacIn [HMAC_CHK_SZ]uint8 var payloadLen uint32 + //------------- Read ctrl/status opcode -------------------- // Read ctrl/status opcode (CSOHmacInvalid on hmac mismatch) err = binary.Read(*hc.c, binary.BigEndian, &ctrlStatOp) if err != nil { @@ -1215,7 +1216,9 @@ func (hc Conn) Read(b []byte) (n int, err error) { hc.Close() return 0, errors.New("** ALERT - remote end detected HMAC mismatch - possible channel tampering **") } + //---------------------------------------------------------- + //------------------ Read HMAC len ------------------------ // Read the hmac and payload len first err = binary.Read(*hc.c, binary.BigEndian, &hmacIn) if err != nil { @@ -1230,7 +1233,9 @@ func (hc Conn) Read(b []byte) (n int, err error) { logger.LogDebug(etxt) return 0, errors.New(etxt) } + //---------------------------------------------------------- + //------------------ Read Payload len --------------------- err = binary.Read(*hc.c, binary.BigEndian, &payloadLen) if err != nil { if err.Error() == "EOF" { @@ -1244,6 +1249,7 @@ func (hc Conn) Read(b []byte) (n int, err error) { logger.LogDebug(etxt) return 0, errors.New(etxt) } + //---------------------------------------------------------- if payloadLen > MAX_PAYLOAD_LEN { logger.LogDebug(fmt.Sprintf("[Insane payloadLen:%v]\n", payloadLen)) @@ -1251,6 +1257,7 @@ func (hc Conn) Read(b []byte) (n int, err error) { return 1, errors.New("Insane payloadLen") } + //-------------------- Read Payload ------------------------ var payloadBytes = make([]byte, payloadLen) n, err = io.ReadFull(*hc.c, payloadBytes) if err != nil { @@ -1265,12 +1272,14 @@ func (hc Conn) Read(b []byte) (n int, err error) { logger.LogDebug(etxt) return 0, errors.New(etxt) } + //---------------------------------------------------------- if hc.logCipherText { log.Printf(" <:ctext:\r\n%s\r\n", hex.Dump(payloadBytes[:n])) } //fmt.Printf(" <:ctext:\r\n%s\r\n", hex.Dump(payloadBytes[:n])) + //---------------- Verify Payload via HMAC ----------------- hc.rm.Write(payloadBytes) // Calc hmac on received data hTmp := hc.rm.Sum(nil)[0:HMAC_CHK_SZ] //log.Printf("<%04x) HMAC:(i)%s (c)%02x\r\n", decryptN, hex.EncodeToString([]byte(hmacIn[0:])), hTmp) @@ -1280,7 +1289,9 @@ func (hc Conn) Read(b []byte) (n int, err error) { logger.LogDebug(fmt.Sprintln("** ALERT - detected HMAC mismatch, possible channel tampering **")) _, _ = (*hc.c).Write([]byte{CSOHmacInvalid}) } + //---------------------------------------------------------- + //------------------- Decrypt Payload ---------------------- db := bytes.NewBuffer(payloadBytes[:n]) //copying payloadBytes to db // The StreamReader acts like a pipe, decrypting // whatever is available and forwarding the result @@ -1289,6 +1300,7 @@ func (hc Conn) Read(b []byte) (n int, err error) { // The caller isn't necessarily reading the full payload so we need // to decrypt to an intermediate buffer, draining it on demand of caller decryptN, err := rs.Read(payloadBytes) + //---------------------------------------------------------- if hc.logPlainText { log.Printf(" <:ptext:\r\n%s\r\n", hex.Dump(payloadBytes[:n])) @@ -1297,6 +1309,7 @@ func (hc Conn) Read(b []byte) (n int, err error) { log.Println("xsnet.Read():", err) //panic(err) } else { + //------------ Discard Padding --------------------- // Padding: Read padSide, padLen, (padding | d) or (d | padding) padSide := payloadBytes[0] padLen := payloadBytes[1] @@ -1307,15 +1320,17 @@ func (hc Conn) Read(b []byte) (n int, err error) { } else { payloadBytes = payloadBytes[0 : len(payloadBytes)-int(padLen)] } + //-------------------------------------------------- - // Throw away pkt if it's chaff (ie., caller to Read() won't see this data) - if ctrlStatOp == CSOChaff { + switch ctrlStatOp { + case CSOChaff: + // Throw away pkt if it's chaff (ie., caller to Read() won't see this data) log.Printf("[Chaff pkt, discarded (len %d)]\n", decryptN) - } else if ctrlStatOp == CSOTermSize { + case CSOTermSize: fmt.Sscanf(string(payloadBytes), "%d %d", &hc.Rows, &hc.Cols) log.Printf("[TermSize pkt: rows %v cols %v]\n", hc.Rows, hc.Cols) hc.WinCh <- WinSize{hc.Rows, hc.Cols} - } else if ctrlStatOp == CSOExitStatus { + case CSOExitStatus: if len(payloadBytes) > 0 { hc.SetStatus(CSOType(binary.BigEndian.Uint32(payloadBytes))) } else { @@ -1323,7 +1338,7 @@ func (hc Conn) Read(b []byte) (n int, err error) { hc.SetStatus(CSETruncCSO) } hc.Close() - } else if ctrlStatOp == CSOTunSetup { + case CSOTunSetup: // server side tunnel setup in response to client lport := binary.BigEndian.Uint16(payloadBytes[0:2]) rport := binary.BigEndian.Uint16(payloadBytes[2:4]) @@ -1335,7 +1350,7 @@ func (hc Conn) Read(b []byte) (n int, err error) { logger.LogDebug(fmt.Sprintf("[Server] Got CSOTunSetup [%d:%d]", lport, rport)) } (*hc.tuns)[rport].Ctl <- 'd' // Dial() rport - } else if ctrlStatOp == CSOTunSetupAck { + case CSOTunSetupAck: lport := binary.BigEndian.Uint16(payloadBytes[0:2]) rport := binary.BigEndian.Uint16(payloadBytes[2:4]) if _, ok := (*hc.tuns)[rport]; !ok { @@ -1346,7 +1361,7 @@ func (hc Conn) Read(b []byte) (n int, err error) { logger.LogDebug(fmt.Sprintf("[Client] Got CSOTunSetupAck [%d:%d]", lport, rport)) } (*hc.tuns)[rport].Ctl <- 'a' // Listen() for lport connection - } else if ctrlStatOp == CSOTunRefused { + case CSOTunRefused: // client side receiving CSOTunRefused means the remote side // could not dial() rport. So we cannot yet listen() // for client-side on lport. @@ -1358,7 +1373,7 @@ func (hc Conn) Read(b []byte) (n int, err error) { } else { logger.LogDebug(fmt.Sprintf("[Client] CSOTunRefused on already-closed tun [%d:%d]", lport, rport)) } - } else if ctrlStatOp == CSOTunDisconn { + case CSOTunDisconn: // server side's rport has disconnected (server lost) lport := binary.BigEndian.Uint16(payloadBytes[0:2]) rport := binary.BigEndian.Uint16(payloadBytes[2:4]) @@ -1368,7 +1383,7 @@ func (hc Conn) Read(b []byte) (n int, err error) { } else { logger.LogDebug(fmt.Sprintf("[Client] CSOTunDisconn on already-closed tun [%d:%d]", lport, rport)) } - } else if ctrlStatOp == CSOTunHangup { + case CSOTunHangup: // client side's lport has hung up lport := binary.BigEndian.Uint16(payloadBytes[0:2]) rport := binary.BigEndian.Uint16(payloadBytes[2:4]) @@ -1378,7 +1393,7 @@ func (hc Conn) Read(b []byte) (n int, err error) { } else { logger.LogDebug(fmt.Sprintf("[Server] CSOTunHangup to already-closed tun [%d:%d]", lport, rport)) } - } else if ctrlStatOp == CSOTunData { + case CSOTunData: lport := binary.BigEndian.Uint16(payloadBytes[0:2]) rport := binary.BigEndian.Uint16(payloadBytes[2:4]) //fmt.Printf("[Got CSOTunData: [lport %d:rport %d] data:%v\n", lport, rport, payloadBytes[4:]) @@ -1391,7 +1406,7 @@ func (hc Conn) Read(b []byte) (n int, err error) { } else { logger.LogDebug(fmt.Sprintf("[Attempt to write data to closed tun [%d:%d]", lport, rport)) } - } else if ctrlStatOp == CSOTunKeepAlive { + case CSOTunKeepAlive: // client side has sent keepalive for tunnels -- if client // dies or exits unexpectedly the absence of this will // let the server know to hang up on Dial()ed server rports. @@ -1402,9 +1417,9 @@ func (hc Conn) Read(b []byte) (n int, err error) { t.KeepAlive = 0 hc.Unlock() } - } else if ctrlStatOp == CSONone { + case CSONone: hc.dBuf.Write(payloadBytes) - } else { + default: logger.LogDebug(fmt.Sprintf("[Unknown CSOType:%d]", ctrlStatOp)) } } From 09133113514953642ce864b09acf57c43aa00851 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sun, 25 Sep 2022 23:23:33 -0700 Subject: [PATCH 56/94] Suppress Gimme Cookie prompt when in gopt (-g) authtoken create mode --- xs/xs.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/xs/xs.go b/xs/xs.go index 3f8823f..b30ea05 100755 --- a/xs/xs.go +++ b/xs/xs.go @@ -1007,10 +1007,14 @@ func main() { //nolint: funlen, gocyclo }) if authCookie == "" { - // No auth token, prompt for password - fmt.Printf("Gimme cookie:") + if !gopt { + // No auth token, prompt for password + fmt.Printf("Gimme cookie:") + } ab, e := xs.ReadPassword(os.Stdin.Fd()) - fmt.Printf("\r\n") + if !gopt { + fmt.Printf("\r\n") + } if e != nil { panic(e) } From 3325bb3a4e34f441a4ab46bd3e8499764bae0ad0 Mon Sep 17 00:00:00 2001 From: Russtopia Date: Mon, 26 Sep 2022 00:49:52 -0700 Subject: [PATCH 57/94] Update 'README.md' adding authtoken setup example --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index ef6d2cc..667b7c4 100644 --- a/README.md +++ b/README.md @@ -199,6 +199,12 @@ hostname:token string. Place this string into $HOME/.xs_id to allow logins witho entering a password (obviously, $HOME/.xs_id on both server and client for the user should *not* be world-readable.) +``` +$ xs -g user@host.net >~/.xs_id +``` +[enter password blindly, authtoken entry will be stored in ~/.xs_id] + + ### File Copying using xc xc is a symlink to xs, and the binary checks its own filename to determine whether From bd0b48d98f2374cf074c15a1bf1b057b1169d598 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Mon, 26 Sep 2022 22:09:54 -0700 Subject: [PATCH 58/94] golint cleanup --- xsd/xsd.go | 168 +++++++++++++++++++++++++++-------------------------- 1 file changed, 85 insertions(+), 83 deletions(-) diff --git a/xsd/xsd.go b/xsd/xsd.go index 98e83eb..c1bd039 100755 --- a/xsd/xsd.go +++ b/xsd/xsd.go @@ -16,7 +16,6 @@ import ( "flag" "fmt" "io" - "io/ioutil" "log" "os" "os/exec" @@ -47,6 +46,11 @@ var ( Log *logger.Writer ) +const ( + AuthTokenLen = 64 + LoginTimeoutSecs = 30 +) + func ioctl(fd, request, argp uintptr) error { if _, _, e := syscall.Syscall6(syscall.SYS_IOCTL, fd, request, argp, 0, 0, 0); e != 0 { return e @@ -66,10 +70,10 @@ func ptsName(fd uintptr) (string, error) { /* -------------------------------------------------------------- */ // Perform a client->server copy func runClientToServerCopyAs(who, ttype string, conn *xsnet.Conn, fpath string, chaffing bool) (exitStatus uint32, err error) { - u, _ := user.Lookup(who) // nolint: gosec + u, _ := user.Lookup(who) var uid, gid uint32 - fmt.Sscanf(u.Uid, "%d", &uid) // nolint: gosec,errcheck - fmt.Sscanf(u.Gid, "%d", &gid) // nolint: gosec,errcheck + fmt.Sscanf(u.Uid, "%d", &uid) + fmt.Sscanf(u.Gid, "%d", &gid) log.Println("uid:", uid, "gid:", gid) // Need to clear server's env and set key vars of the @@ -80,9 +84,9 @@ func runClientToServerCopyAs(who, ttype string, conn *xsnet.Conn, fpath string, // of client shell window used to run client. // Investigate -- rlm 2018-01-26) os.Clearenv() - os.Setenv("HOME", u.HomeDir) // nolint: gosec,errcheck - os.Setenv("TERM", ttype) // nolint: gosec,errcheck - os.Setenv("XS_SESSION", "1") // nolint: gosec,errcheck + os.Setenv("HOME", u.HomeDir) + os.Setenv("TERM", ttype) + os.Setenv("XS_SESSION", "1") var c *exec.Cmd cmdName := xs.GetTool("tar") @@ -101,7 +105,7 @@ func runClientToServerCopyAs(who, ttype string, conn *xsnet.Conn, fpath string, // (as this isn't input from a shell) (right? -rlm 20180823) //cmdArgs := []string{"-x", "-C", destDir, `--xform=s#.*/\(.*\)#\1#`} fmt.Println(cmdName, cmdArgs) - c = exec.Command(cmdName, cmdArgs...) // nolint: gosec + c = exec.Command(cmdName, cmdArgs...) c.Dir = destDir @@ -173,8 +177,8 @@ func runServerToClientCopyAs(who, ttype string, conn *xsnet.Conn, srcPath string return } var uid, gid uint32 - _, _ = fmt.Sscanf(u.Uid, "%d", &uid) // nolint: gosec - _, _ = fmt.Sscanf(u.Gid, "%d", &gid) // nolint: gosec + _, _ = fmt.Sscanf(u.Uid, "%d", &uid) + _, _ = fmt.Sscanf(u.Gid, "%d", &gid) log.Println("uid:", uid, "gid:", gid) // Need to clear server's env and set key vars of the @@ -185,9 +189,9 @@ func runServerToClientCopyAs(who, ttype string, conn *xsnet.Conn, srcPath string // of client shell window used to run client. // Investigate -- rlm 2018-01-26) os.Clearenv() - _ = os.Setenv("HOME", u.HomeDir) // nolint: gosec - _ = os.Setenv("TERM", ttype) // nolint: gosec - _ = os.Setenv("XS_SESSION", "1") // nolint: gosec + _ = os.Setenv("HOME", u.HomeDir) + _ = os.Setenv("TERM", ttype) + _ = os.Setenv("XS_SESSION", "1") var c *exec.Cmd cmdName := xs.GetTool("tar") @@ -198,7 +202,7 @@ func runServerToClientCopyAs(who, ttype string, conn *xsnet.Conn, srcPath string srcDir, srcBase := path.Split(srcPath) cmdArgs := []string{"-cz", "-C", srcDir, "-f", "-", srcBase} - c = exec.Command(cmdName, cmdArgs...) // nolint: gosec + c = exec.Command(cmdName, cmdArgs...) //If os.Clearenv() isn't called by server above these will be seen in the //client's session env. @@ -252,11 +256,10 @@ func runServerToClientCopyAs(who, ttype string, conn *xsnet.Conn, srcPath string return } -// Run a command (via default shell) as a specific user -// -// Uses ptys to support commands which expect a terminal. -// nolint: gocyclo -func runShellAs(who, hname, ttype, cmd string, interactive bool, conn *xsnet.Conn, chaffing bool) (exitStatus uint32, err error) { +// Run a command (via default shell) as a specific user. Uses +// ptys to support commands which expect a terminal. //nolint:gofmt +func runShellAs(who, hname, ttype, cmd string, interactive bool, //nolint:funlen + conn *xsnet.Conn, chaffing bool) (exitStatus uint32, err error) { var wg sync.WaitGroup u, err := user.Lookup(who) if err != nil { @@ -264,8 +267,8 @@ func runShellAs(who, hname, ttype, cmd string, interactive bool, conn *xsnet.Con return } var uid, gid uint32 - _, _ = fmt.Sscanf(u.Uid, "%d", &uid) // nolint: gosec - _, _ = fmt.Sscanf(u.Gid, "%d", &gid) // nolint: gosec + _, _ = fmt.Sscanf(u.Uid, "%d", &uid) + _, _ = fmt.Sscanf(u.Gid, "%d", &gid) log.Println("uid:", uid, "gid:", gid) // Need to clear server's env and set key vars of the @@ -276,9 +279,9 @@ func runShellAs(who, hname, ttype, cmd string, interactive bool, conn *xsnet.Con // of client shell window used to run client. // Investigate -- rlm 2018-01-26) os.Clearenv() - _ = os.Setenv("HOME", u.HomeDir) // nolint: gosec - _ = os.Setenv("TERM", ttype) // nolint: gosec - _ = os.Setenv("XS_SESSION", "1") // nolint: gosec + _ = os.Setenv("HOME", u.HomeDir) + _ = os.Setenv("TERM", ttype) + _ = os.Setenv("XS_SESSION", "1") var c *exec.Cmd @@ -294,18 +297,18 @@ func runShellAs(who, hname, ttype, cmd string, interactive bool, conn *xsnet.Con // automagically, at the cost of another external tool // dependency. // - c = exec.Command(xs.GetTool("login"), "-f", "-p", who) // nolint: gosec + c = exec.Command(xs.GetTool("login"), "-f", "-p", who) //nolint:gosec } else { // Using our separate login via local passwd file // // Note we must drop privs ourselves for the user shell // - c = exec.Command(xs.GetTool("bash"), "-i", "-l") // nolint: gosec + c = exec.Command(xs.GetTool("bash"), "-i", "-l") //nolint:gosec c.SysProcAttr = &syscall.SysProcAttr{} c.SysProcAttr.Credential = &syscall.Credential{Uid: uid, Gid: gid} } } else { - c = exec.Command(xs.GetTool("bash"), "-c", cmd) // nolint: gosec + c = exec.Command(xs.GetTool("bash"), "-c", cmd) //nolint:gosec c.SysProcAttr = &syscall.SysProcAttr{} c.SysProcAttr.Credential = &syscall.Credential{Uid: uid, Gid: gid} } @@ -325,7 +328,7 @@ func runShellAs(who, hname, ttype, cmd string, interactive bool, conn *xsnet.Con defer func() { //logger.LogDebug(fmt.Sprintf("[Exited process was %d]", c.Process.Pid)) _ = ptmx.Close() - }() // nolint: gosec + }() // get pty info for system accounting (who, lastlog) pts, pe := ptsName(ptmx.Fd()) @@ -345,7 +348,7 @@ func runShellAs(who, hname, ttype, cmd string, interactive bool, conn *xsnet.Con go func() { for sz := range conn.WinCh { log.Printf("[Setting term size to: %v %v]\n", sz.Rows, sz.Cols) - pty.Setsize(ptmx, &pty.Winsize{Rows: sz.Rows, Cols: sz.Cols}) // nolint: gosec,errcheck + pty.Setsize(ptmx, &pty.Winsize{Rows: sz.Rows, Cols: sz.Cols}) //nolint:errcheck } log.Println("*** WinCh goroutine done ***") }() @@ -406,7 +409,7 @@ func runShellAs(who, hname, ttype, cmd string, interactive bool, conn *xsnet.Con } conn.SetStatus(xsnet.CSOType(exitStatus)) } else { - logger.LogDebug("*** Main proc has exited. ***") + logger.LogDebug("*** Main proc has exited. ***") //nolint:errcheck // Background jobs still may be running; close the // pty anyway, so the client can return before // wg.Wait() below completes (Issue #18) @@ -428,8 +431,8 @@ func GenAuthToken(who string, connhost string) string { //} hname := connhost - token := make([]byte, 64) - _, _ = rand.Read(token) // nolint: gosec + token := make([]byte, AuthTokenLen) + _, _ = rand.Read(token) return fmt.Sprintf("%s:%s:%s", hname, who, hex.EncodeToString(token)) } @@ -505,7 +508,7 @@ func (a *allowedHMACAlgs) Set(value string) error { // daemon dies, all clients will be rudely disconnected. // Consider this when planning to restart or upgrade in-place an installation. // TODO: reduce gocyclo -func main() { +func main() { //nolint:funlen,gocyclo var vopt bool var chaffEnabled bool var chaffFreqMin uint @@ -518,16 +521,15 @@ func main() { flag.BoolVar(&vopt, "v", false, "show version") flag.StringVar(&laddr, "l", ":2000", "interface[:port] to listen") - flag.StringVar(&kcpMode, "K", "unused", `set to one of ["KCP_NONE","KCP_AES", "KCP_BLOWFISH", "KCP_CAST5", "KCP_SM4", "KCP_SALSA20", "KCP_SIMPLEXOR", "KCP_TEA", "KCP_3DES", "KCP_TWOFISH", "KCP_XTEA"] to use KCP (github.com/xtaci/kcp-go) reliable UDP instead of TCP`) + flag.StringVar(&kcpMode, "K", "unused", `set to one of ["KCP_NONE","KCP_AES", "KCP_BLOWFISH", "KCP_CAST5", "KCP_SM4", "KCP_SALSA20", "KCP_SIMPLEXOR", "KCP_TEA", "KCP_3DES", "KCP_TWOFISH", "KCP_XTEA"] to use KCP (github.com/xtaci/kcp-go) reliable UDP instead of TCP`) //nolint:lll flag.BoolVar(&useSysLogin, "L", false, "use system login") flag.BoolVar(&chaffEnabled, "e", true, "enable chaff pkts") - flag.UintVar(&chaffFreqMin, "f", 100, "chaff pkt freq min (msecs)") - flag.UintVar(&chaffFreqMax, "F", 5000, "chaff pkt freq max (msecs)") - flag.UintVar(&chaffBytesMax, "B", 64, "chaff pkt size max (bytes)") + flag.UintVar(&chaffFreqMin, "f", 100, "chaff pkt freq min (msecs)") //nolint:gomnd + flag.UintVar(&chaffFreqMax, "F", 5000, "chaff pkt freq max (msecs)") //nolint:gomnd + flag.UintVar(&chaffBytesMax, "B", 64, "chaff pkt size max (bytes)") //nolint:gomnd flag.BoolVar(&useSystemPasswd, "s", true, "use system shadow passwds") flag.BoolVar(&dbg, "d", false, "debug logging") - - flag.Var(&aKEXAlgs, "aK", "Allowed KEX `alg`s (eg. '-aK KEXAlgA -aK KEXAlgB ...')" + ` + flag.Var(&aKEXAlgs, "aK", "Allowed KEX `alg`s (eg. '-aK KEXAlgA -aK KEXAlgB ...')"+` KEX_all KEX_HERRADURA256 KEX_HERRADURA512 @@ -542,7 +544,7 @@ func main() { KEX_FRODOKEM_1344SHAKE KEX_FRODOKEM_976AES KEX_FRODOKEM_976SHAKE`) - flag.Var(&aCipherAlgs, "aC", "Allowed `cipher`s (eg. '-aC CAlgA -aC CAlgB ...')" + ` + flag.Var(&aCipherAlgs, "aC", "Allowed `cipher`s (eg. '-aC CAlgA -aC CAlgB ...')"+` C_all C_AES_256 C_TWOFISH_128 @@ -550,7 +552,7 @@ func main() { C_CRYPTMT1 C_HOPSCOTCH C_CHACHA20_12`) - flag.Var(&aHMACAlgs, "aH", "Allowed `HMAC`s (eg. '-aH HMACAlgA -aH HMACAlgB ...')" + ` + flag.Var(&aHMACAlgs, "aH", "Allowed `HMAC`s (eg. '-aH HMACAlgA -aH HMACAlgB ...')"+` H_all H_SHA256 H_SHA512`) @@ -570,7 +572,7 @@ func main() { } // Enforce some sane min/max vals on chaff flags - if chaffFreqMin < 2 { + if chaffFreqMin < 2 { //nolint:gomnd chaffFreqMin = 2 } if chaffFreqMax == 0 { @@ -580,49 +582,49 @@ func main() { chaffBytesMax = 64 } - Log, _ = logger.New(logger.LOG_DAEMON|logger.LOG_DEBUG|logger.LOG_NOTICE|logger.LOG_ERR, "xsd") // nolint: gosec + Log, _ = logger.New(logger.LOG_DAEMON|logger.LOG_DEBUG|logger.LOG_NOTICE|logger.LOG_ERR, "xsd") xsnet.Init(dbg, "xsd", logger.LOG_DAEMON|logger.LOG_DEBUG|logger.LOG_NOTICE|logger.LOG_ERR) if dbg { log.SetOutput(Log) } else { - log.SetOutput(ioutil.Discard) + log.SetOutput(io.Discard) } // Set up allowed algs, if specified (default allow all) if len(aKEXAlgs) == 0 { aKEXAlgs = []string{"none"} } - logger.LogNotice(fmt.Sprintf("Allowed KEXAlgs: %v\n", aKEXAlgs)) // nolint: gosec,errcheck + logger.LogNotice(fmt.Sprintf("Allowed KEXAlgs: %v\n", aKEXAlgs)) //nolint:errcheck if len(aCipherAlgs) == 0 { aCipherAlgs = []string{"none"} } - logger.LogNotice(fmt.Sprintf("Allowed CipherAlgs: %v\n", aCipherAlgs)) // nolint: gosec,errcheck + logger.LogNotice(fmt.Sprintf("Allowed CipherAlgs: %v\n", aCipherAlgs)) //nolint:errcheck if len(aHMACAlgs) == 0 { aHMACAlgs = []string{"none"} } - logger.LogNotice(fmt.Sprintf("Allowed HMACAlgs: %v\n", aHMACAlgs)) // nolint: gosec,errcheck + logger.LogNotice(fmt.Sprintf("Allowed HMACAlgs: %v\n", aHMACAlgs)) //nolint:errcheck // Set up handler for daemon signalling exitCh := make(chan os.Signal, 1) - signal.Notify(exitCh, os.Signal(syscall.SIGTERM), os.Signal(syscall.SIGINT), os.Signal(syscall.SIGHUP), os.Signal(syscall.SIGUSR1), os.Signal(syscall.SIGUSR2)) + signal.Notify(exitCh, os.Signal(syscall.SIGTERM), os.Signal(syscall.SIGINT), os.Signal(syscall.SIGHUP), os.Signal(syscall.SIGUSR1), os.Signal(syscall.SIGUSR2)) //nolint:lll go func() { for { sig := <-exitCh switch sig.String() { case "terminated": - logger.LogNotice(fmt.Sprintf("[Got signal: %s]", sig)) // nolint: gosec,errcheck + logger.LogNotice(fmt.Sprintf("[Got signal: %s]", sig)) //nolint:errcheck signal.Reset() - syscall.Kill(0, syscall.SIGTERM) // nolint: gosec,errcheck + syscall.Kill(0, syscall.SIGTERM) //nolint:errcheck case "interrupt": - logger.LogNotice(fmt.Sprintf("[Got signal: %s]", sig)) // nolint: gosec,errcheck + logger.LogNotice(fmt.Sprintf("[Got signal: %s]", sig)) //nolint:errcheck signal.Reset() - syscall.Kill(0, syscall.SIGINT) // nolint: gosec,errcheck + syscall.Kill(0, syscall.SIGINT) //nolint:errcheck case "hangup": - logger.LogNotice(fmt.Sprintf("[Got signal: %s - nop]", sig)) // nolint:gosec,errcheck + logger.LogNotice(fmt.Sprintf("[Got signal: %s - nop]", sig)) //nolint:errcheck default: - logger.LogNotice(fmt.Sprintf("[Got signal: %s - ignored]", sig)) // nolint: gosec,errcheck + logger.LogNotice(fmt.Sprintf("[Got signal: %s - ignored]", sig)) //nolint:errcheck } } }() @@ -635,7 +637,7 @@ func main() { if err != nil { log.Fatal(err) } - defer l.Close() // nolint: errcheck + defer l.Close() log.Println("Serving on", laddr) for { @@ -669,12 +671,12 @@ func main() { // The loop then returns to accepting, so that // multiple connections may be served concurrently. go func(hc *xsnet.Conn) (e error) { - defer hc.Close() // nolint: errcheck + defer hc.Close() // Start login timeout here and disconnect if user/pass phase stalls - loginTimeout := time.AfterFunc(30*time.Second, func() { - logger.LogNotice(fmt.Sprintln("Login timed out")) // nolint: errcheck,gosec - hc.Write([]byte{0}) // nolint: gosec,errcheck + loginTimeout := time.AfterFunc(LoginTimeoutSecs*time.Second, func() { + logger.LogNotice(fmt.Sprintln("Login timed out")) //nolint:errcheck + hc.Write([]byte{0}) //nolint:errcheck hc.Close() }) @@ -763,10 +765,10 @@ func main() { // Tell client if auth was valid if valid { - hc.Write([]byte{1}) // nolint: gosec,errcheck + hc.Write([]byte{1}) //nolint:errcheck } else { - logger.LogNotice(fmt.Sprintln("Invalid user", string(rec.Who()))) // nolint: errcheck,gosec - hc.Write([]byte{0}) // nolint: gosec,errcheck + logger.LogNotice(fmt.Sprintln("Invalid user", string(rec.Who()))) //nolint:errcheck + hc.Write([]byte{0}) //nolint:errcheck return } @@ -776,15 +778,15 @@ func main() { // Generate automated login token addr := hc.RemoteAddr() hname := goutmp.GetHost(addr.String()) - logger.LogNotice(fmt.Sprintf("[Generating autologin token for [%s@%s]]\n", rec.Who(), hname)) // nolint: gosec,errcheck + logger.LogNotice(fmt.Sprintf("[Generating autologin token for [%s@%s]]\n", rec.Who(), hname)) //nolint:errcheck token := GenAuthToken(string(rec.Who()), string(rec.ConnHost())) - tokenCmd := fmt.Sprintf("echo \"%s\" | tee -a ~/.xs_id", token) + tokenCmd := fmt.Sprintf("echo %q | tee -a ~/.xs_id", token) cmdStatus, runErr := runShellAs(string(rec.Who()), hname, string(rec.TermType()), tokenCmd, false, hc, chaffEnabled) // Returned hopefully via an EOF or exit/logout; // Clear current op so user can enter next, or EOF rec.SetOp([]byte{0}) if runErr != nil { - logger.LogErr(fmt.Sprintf("[Error generating autologin token for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck + logger.LogErr(fmt.Sprintf("[Error generating autologin token for %s@%s]\n", rec.Who(), hname)) //nolint:errcheck } else { log.Printf("[Autologin token generation completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus) hc.SetStatus(xsnet.CSOType(cmdStatus)) @@ -793,31 +795,31 @@ func main() { // Non-interactive command addr := hc.RemoteAddr() hname := goutmp.GetHost(addr.String()) - logger.LogNotice(fmt.Sprintf("[Running command for [%s@%s]]\n", rec.Who(), hname)) // nolint: gosec,errcheck + logger.LogNotice(fmt.Sprintf("[Running command for [%s@%s]]\n", rec.Who(), hname)) //nolint:errcheck cmdStatus, runErr := runShellAs(string(rec.Who()), hname, string(rec.TermType()), string(rec.Cmd()), false, hc, chaffEnabled) // Returned hopefully via an EOF or exit/logout; // Clear current op so user can enter next, or EOF rec.SetOp([]byte{0}) if runErr != nil { - logger.LogErr(fmt.Sprintf("[Error spawning cmd for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck + logger.LogErr(fmt.Sprintf("[Error spawning cmd for %s@%s]\n", rec.Who(), hname)) //nolint:errcheck } else { - logger.LogNotice(fmt.Sprintf("[Command completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)) // nolint: gosec,errcheck + logger.LogNotice(fmt.Sprintf("[Command completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)) //nolint:errcheck hc.SetStatus(xsnet.CSOType(cmdStatus)) } } else if rec.Op()[0] == 's' { // Interactive session addr := hc.RemoteAddr() hname := goutmp.GetHost(addr.String()) - logger.LogNotice(fmt.Sprintf("[Running shell for [%s@%s]]\n", rec.Who(), hname)) // nolint: gosec,errcheck + logger.LogNotice(fmt.Sprintf("[Running shell for [%s@%s]]\n", rec.Who(), hname)) //nolint:errcheck cmdStatus, runErr := runShellAs(string(rec.Who()), hname, string(rec.TermType()), string(rec.Cmd()), true, hc, chaffEnabled) // Returned hopefully via an EOF or exit/logout; // Clear current op so user can enter next, or EOF rec.SetOp([]byte{0}) if runErr != nil { - Log.Err(fmt.Sprintf("[Error spawning shell for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck + Log.Err(fmt.Sprintf("[Error spawning shell for %s@%s]\n", rec.Who(), hname)) //nolint:errcheck } else { - logger.LogNotice(fmt.Sprintf("[Shell completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)) // nolint: gosec,errcheck + logger.LogNotice(fmt.Sprintf("[Shell completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)) //nolint:errcheck hc.SetStatus(xsnet.CSOType(cmdStatus)) } } else if rec.Op()[0] == 'D' { @@ -825,41 +827,41 @@ func main() { log.Printf("[Client->Server copy]\n") addr := hc.RemoteAddr() hname := goutmp.GetHost(addr.String()) - logger.LogNotice(fmt.Sprintf("[c->s copy for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck + logger.LogNotice(fmt.Sprintf("[c->s copy for %s@%s]\n", rec.Who(), hname)) //nolint:errcheck cmdStatus, runErr := runClientToServerCopyAs(string(rec.Who()), string(rec.TermType()), hc, string(rec.Cmd()), chaffEnabled) // Returned hopefully via an EOF or exit/logout; // Clear current op so user can enter next, or EOF rec.SetOp([]byte{0}) if runErr != nil { - logger.LogErr(fmt.Sprintf("[c->s copy error for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck + logger.LogErr(fmt.Sprintf("[c->s copy error for %s@%s]\n", rec.Who(), hname)) //nolint:errcheck } else { - logger.LogNotice(fmt.Sprintf("[c->s copy completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)) // nolint: gosec,errcheck + logger.LogNotice(fmt.Sprintf("[c->s copy completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)) //nolint:errcheck } // TODO: Test this with huge files.. see Bug #22 - do we need to // sync w/sender (client) that we've gotten all data? hc.SetStatus(xsnet.CSOType(cmdStatus)) // Send CSOExitStatus *before* client closes channel - s := make([]byte, 4) + s := make([]byte, 4) //nolint:gomnd binary.BigEndian.PutUint32(s, cmdStatus) log.Printf("** cp writing closeStat %d at Close()\n", cmdStatus) - hc.WritePacket(s, xsnet.CSOExitStatus) // nolint: gosec,errcheck + hc.WritePacket(s, xsnet.CSOExitStatus) //nolint:errcheck } else if rec.Op()[0] == 'S' { // File copy (src) operation - server copy to client log.Printf("[Server->Client copy]\n") addr := hc.RemoteAddr() hname := goutmp.GetHost(addr.String()) - logger.LogNotice(fmt.Sprintf("[s->c copy for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck + logger.LogNotice(fmt.Sprintf("[s->c copy for %s@%s]\n", rec.Who(), hname)) //nolint:errcheck cmdStatus, runErr := runServerToClientCopyAs(string(rec.Who()), string(rec.TermType()), hc, string(rec.Cmd()), chaffEnabled) if runErr != nil { - logger.LogErr(fmt.Sprintf("[s->c copy error for %s@%s]\n", rec.Who(), hname)) // nolint: gosec,errcheck + logger.LogErr(fmt.Sprintf("[s->c copy error for %s@%s]\n", rec.Who(), hname)) //nolint:errcheck } else { // Returned hopefully via an EOF or exit/logout; - logger.LogNotice(fmt.Sprintf("[s->c copy completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)) // nolint: gosec,errcheck + logger.LogNotice(fmt.Sprintf("[s->c copy completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)) //nolint:errcheck } // HACK: Bug #22: (xc) Need to wait for rcvr to get final data // TODO: Await specific msg from client to inform they have gotten all data from the tarpipe - time.Sleep(time.Duration(900 * time.Millisecond)) // Let rcvr set this on setup? + time.Sleep(900 * time.Millisecond) //nolint:gomnd // Let rcvr set this on setup? // Clear current op so user can enter next, or EOF rec.SetOp([]byte{0}) @@ -868,12 +870,12 @@ func main() { //_, _ = hc.Read(nil /*ackByte*/) //fmt.Println("Got remote end ack.") } else { - logger.LogErr(fmt.Sprintln("[Bad xs.Session]")) // nolint: gosec,errcheck + logger.LogErr(fmt.Sprintln("[Bad xs.Session]")) //nolint:errcheck } return - }(&conn) // nolint: errcheck + }(&conn) //nolint:errcheck } // algs valid and not blacklisted } // Accept() success } //endfor - //logger.LogNotice(fmt.Sprintln("[Exiting]")) // nolint: gosec,errcheck + //logger.LogNotice(fmt.Sprintln("[Exiting]")) //nolint:errcheck } From 9ca5ccae32c47fd7298b0f71050a830ecca2c153 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Tue, 4 Oct 2022 22:30:10 -0700 Subject: [PATCH 59/94] (issue #33) use of time.Sleep() prior to ptmx.Close() in xsd.runShellAs() Hack to enable server to complete sending data to client (eg. xs -x "ls /foo" losing end of output) --- xsd/xsd.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/xsd/xsd.go b/xsd/xsd.go index c1bd039..44762a8 100755 --- a/xsd/xsd.go +++ b/xsd/xsd.go @@ -327,6 +327,16 @@ func runShellAs(who, hname, ttype, cmd string, interactive bool, //nolint:funlen // #gv:s/label=\"runShellAs\$1\"/label=\"deferPtmxClose\"/ defer func() { //logger.LogDebug(fmt.Sprintf("[Exited process was %d]", c.Process.Pid)) + + //Ensure socket has sent all data to client prior to closing + //NOTE: This is not ideal, as it would be better to somehow + //determine if there is any pending outgoing (write) data to the + //underlying socket (TCP/KCP) prior to closing; however Go's net pkg + //completely hides lower-level stuff. net.Conn.Close() according to + //docs sends written data in the background, so how best to determine + //all data has been sent? -rlm 2022-10-04 + + time.Sleep(100 * time.Millisecond) //Empirically determined :^/ _ = ptmx.Close() }() From 5ee09de99a0fc1e66812b74ef13b8c3a9a86fd44 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Wed, 12 Oct 2022 21:27:48 -0700 Subject: [PATCH 60/94] Cleaner fix for issues #22,#33 --- Makefile | 2 +- xsd/xsd.go | 13 ------------- xsnet/net.go | 15 +++++++++++++-- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index 692a9a5..b884108 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION := 0.9.5.2 +VERSION := 0.9.5.3 .PHONY: lint vis clean common client server passwd subpkgs install uninstall reinstall ## Tag version of binaries with build info wrt. diff --git a/xsd/xsd.go b/xsd/xsd.go index 44762a8..1fcef4f 100755 --- a/xsd/xsd.go +++ b/xsd/xsd.go @@ -327,16 +327,6 @@ func runShellAs(who, hname, ttype, cmd string, interactive bool, //nolint:funlen // #gv:s/label=\"runShellAs\$1\"/label=\"deferPtmxClose\"/ defer func() { //logger.LogDebug(fmt.Sprintf("[Exited process was %d]", c.Process.Pid)) - - //Ensure socket has sent all data to client prior to closing - //NOTE: This is not ideal, as it would be better to somehow - //determine if there is any pending outgoing (write) data to the - //underlying socket (TCP/KCP) prior to closing; however Go's net pkg - //completely hides lower-level stuff. net.Conn.Close() according to - //docs sends written data in the background, so how best to determine - //all data has been sent? -rlm 2022-10-04 - - time.Sleep(100 * time.Millisecond) //Empirically determined :^/ _ = ptmx.Close() }() @@ -869,9 +859,6 @@ func main() { //nolint:funlen,gocyclo // Returned hopefully via an EOF or exit/logout; logger.LogNotice(fmt.Sprintf("[s->c copy completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)) //nolint:errcheck } - // HACK: Bug #22: (xc) Need to wait for rcvr to get final data - // TODO: Await specific msg from client to inform they have gotten all data from the tarpipe - time.Sleep(900 * time.Millisecond) //nolint:gomnd // Let rcvr set this on setup? // Clear current op so user can enter next, or EOF rec.SetOp([]byte{0}) diff --git a/xsnet/net.go b/xsnet/net.go index 131c1cf..9ba7cd8 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -267,8 +267,6 @@ func _new(kexAlg KEXAlg, conn *net.Conn) (hc *Conn, e error) { tempMap := make(map[uint16]*TunEndpoint) hc.tuns = &tempMap - *hc.closeStat = CSEStillOpen // open or prematurely-closed status - // Set up KEx/KEM-specifics switch kexAlg { case KEX_HERRADURA256: @@ -979,6 +977,19 @@ func (hc *Conn) Close() (err error) { log.Printf("** Writing closeStat %d at Close()\n", *hc.closeStat) //(*hc.c).SetWriteDeadline(time.Now().Add(500 * time.Millisecond)) hc.WritePacket(s, CSOExitStatus) + + // HACK: Bug #22,#33: Need to wait for rcvr to get final data + // TODO: Find a way to explicitly check if any outgoing data is pending + + //Ensure socket has sent all data to client prior to closing + //NOTE: This is not ideal, as it would be better to somehow + //determine if there is any pending outgoing (write) data to the + //underlying socket (TCP/KCP) prior to closing; however Go's net pkg + //completely hides lower-level stuff. net.Conn.Close() according to + //docs sends written data in the background, so how best to determine + //all data has been sent? -rlm 2022-10-04 + time.Sleep(10 * time.Millisecond) //nolint:gomnd + err = (*hc.c).Close() logger.LogDebug(fmt.Sprintln("[Conn Closing]")) return From 7b6a9d1350fc83f2c433e713b6eb67cfbbd12c98 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Wed, 24 May 2023 20:29:26 -0700 Subject: [PATCH 61/94] Added scc target --- Makefile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index b884108..b0a12f5 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,6 @@ VERSION := 0.9.5.3 -.PHONY: lint vis clean common client server passwd subpkgs install uninstall reinstall +.PHONY: lint vis clean common client server passwd\ + subpkgs install uninstall reinstall scc ## Tag version of binaries with build info wrt. ## GO111MODULE(=on) and vendor/ setup vs. $GOPATH pkg builds @@ -86,6 +87,10 @@ else $(MAKE) BUILDOPTS=$(BUILDOPTS) -C xsd endif +scc: + @scc --exclude-dir=bacillus,vendor,garbled\ + --cocomo-project-type=rlabs,3,1.12,1,1 + vis: @which go-callvis >/dev/null 2>&1; \ stat=$$?; if [ $$stat -ne "0" ]; then \ From 06124d7584a96e916b869da14962610d1526852d Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Wed, 24 May 2023 20:47:04 -0700 Subject: [PATCH 62/94] Fix for scc rule --- Makefile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Makefile b/Makefile index b0a12f5..35bca73 100644 --- a/Makefile +++ b/Makefile @@ -88,8 +88,7 @@ else endif scc: - @scc --exclude-dir=bacillus,vendor,garbled\ - --cocomo-project-type=rlabs,3,1.12,1,1 + @scc --exclude-dir=bacillus,vendor,garbled --cocomo-project-type=rlabs,3,1.12,1,1 vis: @which go-callvis >/dev/null 2>&1; \ From 623d622d582d9a817ae1431b52f010c672cbe2b0 Mon Sep 17 00:00:00 2001 From: Russtopia Date: Sat, 5 Aug 2023 12:57:37 -0700 Subject: [PATCH 63/94] Update README.md with live build status --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 667b7c4..00aeb08 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ [![GoDoc](https://godoc.org/blitter.com/go/xs?status.svg)](https://godoc.org/blitter.com/go/xs) # XS + +![last build status](https://bacillus.blitter.com/onPush-xs-build/lastStatusIcon) -- XS (**X**perimental **S**hell) is a simple alternative to ssh (<5% total SLOCC) written from scratch in Go. From 3cd6f8b7e6273d8b8ddf5392c68d8abb891f3f3d Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Wed, 13 Sep 2023 00:57:41 -0700 Subject: [PATCH 64/94] Update to use latest hopscotch enc alg --- Makefile | 2 +- go.mod | 35 +- go.sum | 34 +- vendor/blitter.com/go/chacha20/LICENSE | 661 - vendor/blitter.com/go/chacha20/README.md | 13 - vendor/blitter.com/go/chacha20/chacha20.go | 290 - .../go/chacha20/internal/api/api.go | 59 - .../go/chacha20/internal/hardware/impl.go | 27 - .../chacha20/internal/hardware/impl_amd64.go | 88 - .../chacha20/internal/hardware/impl_amd64.s | 1682 - .../go/chacha20/internal/ref/impl.go | 374 - vendor/blitter.com/go/cryptmt/README.md | 6 - vendor/blitter.com/go/cryptmt/cryptmt.go | 78 - vendor/blitter.com/go/goutmp/LICENSE.mit | 21 - vendor/blitter.com/go/goutmp/README.md | 17 - vendor/blitter.com/go/goutmp/goutmp_bsd.go | 136 - vendor/blitter.com/go/goutmp/goutmp_linux.go | 132 - vendor/blitter.com/go/groestl/README.md | 20 - vendor/blitter.com/go/groestl/groestl.go | 190 - vendor/blitter.com/go/groestl/round.go | 217 - vendor/blitter.com/go/groestl/sbox.go | 20 - vendor/blitter.com/go/groestl/util.go | 28 - .../blitter.com/go/herradurakex/LICENSE.gpl | 674 - .../blitter.com/go/herradurakex/LICENSE.mit | 22 - vendor/blitter.com/go/herradurakex/Makefile | 17 - vendor/blitter.com/go/herradurakex/README.md | 1 - .../go/herradurakex/herradurakex.go | 182 - vendor/blitter.com/go/hopscotch/README.md | 29 - vendor/blitter.com/go/hopscotch/hopscotch.go | 186 - vendor/blitter.com/go/kyber/.gitignore | 2 - vendor/blitter.com/go/kyber/LICENSE | 122 - vendor/blitter.com/go/kyber/README.md | 24 - vendor/blitter.com/go/kyber/cbd.go | 100 - vendor/blitter.com/go/kyber/doc.go | 27 - vendor/blitter.com/go/kyber/hwaccel.go | 46 - vendor/blitter.com/go/kyber/hwaccel_amd64.go | 256 - vendor/blitter.com/go/kyber/hwaccel_amd64.s | 2749 - vendor/blitter.com/go/kyber/hwaccel_ref.go | 14 - vendor/blitter.com/go/kyber/indcpa.go | 279 - vendor/blitter.com/go/kyber/kem.go | 187 - vendor/blitter.com/go/kyber/kex.go | 249 - vendor/blitter.com/go/kyber/ntt.go | 65 - vendor/blitter.com/go/kyber/params.go | 116 - vendor/blitter.com/go/kyber/poly.go | 146 - vendor/blitter.com/go/kyber/polyvec.go | 115 - vendor/blitter.com/go/kyber/precomp.go | 87 - vendor/blitter.com/go/kyber/reduce.go | 43 - vendor/blitter.com/go/mtwist/mtwist.go | 125 - vendor/blitter.com/go/newhope/LICENSE | 122 - vendor/blitter.com/go/newhope/batcher.go | 929 - .../go/newhope/error_correction.go | 135 - vendor/blitter.com/go/newhope/newhope.go | 220 - .../blitter.com/go/newhope/newhope_simple.go | 166 - vendor/blitter.com/go/newhope/ntt.go | 131 - vendor/blitter.com/go/newhope/params.go | 17 - vendor/blitter.com/go/newhope/poly.go | 212 - vendor/blitter.com/go/newhope/poly_simple.go | 99 - vendor/blitter.com/go/newhope/precomp.go | 287 - vendor/blitter.com/go/newhope/reduce.go | 32 - vendor/github.com/aead/chacha20/LICENSE | 21 - .../github.com/aead/chacha20/chacha/chacha.go | 197 - .../aead/chacha20/chacha/chachaAVX2_amd64.s | 406 - .../aead/chacha20/chacha/chacha_386.go | 60 - .../aead/chacha20/chacha/chacha_386.s | 163 - .../aead/chacha20/chacha/chacha_amd64.go | 76 - .../aead/chacha20/chacha/chacha_amd64.s | 1072 - .../aead/chacha20/chacha/chacha_generic.go | 319 - .../aead/chacha20/chacha/chacha_ref.go | 33 - .../github.com/aead/chacha20/chacha/const.s | 53 - .../github.com/aead/chacha20/chacha/macro.s | 163 - vendor/github.com/creack/pty/.gitignore | 4 - .../github.com/creack/pty/Dockerfile.golang | 17 - vendor/github.com/creack/pty/Dockerfile.riscv | 23 - vendor/github.com/creack/pty/LICENSE | 23 - vendor/github.com/creack/pty/README.md | 107 - .../github.com/creack/pty/asm_solaris_amd64.s | 18 - vendor/github.com/creack/pty/doc.go | 16 - vendor/github.com/creack/pty/ioctl.go | 19 - vendor/github.com/creack/pty/ioctl_bsd.go | 40 - vendor/github.com/creack/pty/ioctl_solaris.go | 48 - .../creack/pty/ioctl_unsupported.go | 13 - vendor/github.com/creack/pty/mktypes.bash | 19 - vendor/github.com/creack/pty/pty_darwin.go | 68 - vendor/github.com/creack/pty/pty_dragonfly.go | 83 - vendor/github.com/creack/pty/pty_freebsd.go | 81 - vendor/github.com/creack/pty/pty_linux.go | 54 - vendor/github.com/creack/pty/pty_netbsd.go | 69 - vendor/github.com/creack/pty/pty_openbsd.go | 36 - vendor/github.com/creack/pty/pty_solaris.go | 152 - .../github.com/creack/pty/pty_unsupported.go | 12 - vendor/github.com/creack/pty/run.go | 57 - vendor/github.com/creack/pty/start.go | 25 - vendor/github.com/creack/pty/start_windows.go | 19 - .../creack/pty/test_crosscompile.sh | 64 - vendor/github.com/creack/pty/winsize.go | 27 - vendor/github.com/creack/pty/winsize_unix.go | 35 - .../creack/pty/winsize_unsupported.go | 23 - vendor/github.com/creack/pty/ztypes_386.go | 12 - vendor/github.com/creack/pty/ztypes_amd64.go | 12 - vendor/github.com/creack/pty/ztypes_arm.go | 12 - vendor/github.com/creack/pty/ztypes_arm64.go | 12 - .../creack/pty/ztypes_dragonfly_amd64.go | 17 - .../creack/pty/ztypes_freebsd_386.go | 16 - .../creack/pty/ztypes_freebsd_amd64.go | 17 - .../creack/pty/ztypes_freebsd_arm.go | 16 - .../creack/pty/ztypes_freebsd_arm64.go | 16 - .../creack/pty/ztypes_freebsd_ppc64.go | 14 - .../github.com/creack/pty/ztypes_loong64.go | 12 - vendor/github.com/creack/pty/ztypes_mipsx.go | 13 - .../creack/pty/ztypes_netbsd_32bit_int.go | 17 - .../creack/pty/ztypes_openbsd_32bit_int.go | 14 - vendor/github.com/creack/pty/ztypes_ppc64.go | 12 - .../github.com/creack/pty/ztypes_ppc64le.go | 12 - vendor/github.com/creack/pty/ztypes_riscvx.go | 12 - vendor/github.com/creack/pty/ztypes_s390x.go | 12 - .../github.com/jameskeane/bcrypt/.gitignore | 5 - vendor/github.com/jameskeane/bcrypt/LICENSE | 29 - vendor/github.com/jameskeane/bcrypt/README | 46 - vendor/github.com/jameskeane/bcrypt/bcrypt.go | 190 - vendor/github.com/jameskeane/bcrypt/cipher.go | 415 - .../github.com/klauspost/cpuid/v2/.gitignore | 24 - .../klauspost/cpuid/v2/.goreleaser.yml | 74 - .../klauspost/cpuid/v2/CONTRIBUTING.txt | 35 - vendor/github.com/klauspost/cpuid/v2/LICENSE | 22 - .../github.com/klauspost/cpuid/v2/README.md | 258 - vendor/github.com/klauspost/cpuid/v2/cpuid.go | 1291 - .../github.com/klauspost/cpuid/v2/cpuid_386.s | 47 - .../klauspost/cpuid/v2/cpuid_amd64.s | 72 - .../klauspost/cpuid/v2/cpuid_arm64.s | 26 - .../klauspost/cpuid/v2/detect_arm64.go | 247 - .../klauspost/cpuid/v2/detect_ref.go | 15 - .../klauspost/cpuid/v2/detect_x86.go | 36 - .../klauspost/cpuid/v2/featureid_string.go | 235 - .../klauspost/cpuid/v2/os_darwin_arm64.go | 121 - .../klauspost/cpuid/v2/os_linux_arm64.go | 130 - .../klauspost/cpuid/v2/os_other_arm64.go | 16 - .../klauspost/cpuid/v2/os_safe_linux_arm64.go | 8 - .../cpuid/v2/os_unsafe_linux_arm64.go | 11 - .../klauspost/cpuid/v2/test-architectures.sh | 15 - .../klauspost/reedsolomon/.gitignore | 26 - .../github.com/klauspost/reedsolomon/LICENSE | 23 - .../klauspost/reedsolomon/README.md | 518 - .../klauspost/reedsolomon/galois.go | 954 - .../reedsolomon/galoisAvx512_amd64.go | 339 - .../reedsolomon/galoisAvx512_amd64.s | 402 - .../klauspost/reedsolomon/galois_amd64.go | 346 - .../klauspost/reedsolomon/galois_amd64.s | 370 - .../klauspost/reedsolomon/galois_arm64.go | 96 - .../klauspost/reedsolomon/galois_arm64.s | 127 - .../klauspost/reedsolomon/galois_gen_amd64.go | 1551 - .../klauspost/reedsolomon/galois_gen_amd64.s | 67609 ---------------- .../klauspost/reedsolomon/galois_gen_none.go | 18 - .../reedsolomon/galois_gen_switch_amd64.go | 694 - .../klauspost/reedsolomon/galois_noasm.go | 69 - .../klauspost/reedsolomon/galois_notamd64.go | 14 - .../klauspost/reedsolomon/galois_ppc64le.go | 102 - .../klauspost/reedsolomon/galois_ppc64le.s | 126 - .../klauspost/reedsolomon/inversion_tree.go | 164 - .../klauspost/reedsolomon/leopard.go | 1234 - .../klauspost/reedsolomon/matrix.go | 282 - .../klauspost/reedsolomon/options.go | 234 - .../klauspost/reedsolomon/reedsolomon.go | 1451 - .../klauspost/reedsolomon/streaming.go | 607 - .../github.com/kuking/go-frodokem/.gitignore | 11 - vendor/github.com/kuking/go-frodokem/LICENSE | 21 - vendor/github.com/kuking/go-frodokem/Makefile | 22 - .../github.com/kuking/go-frodokem/README.md | 45 - vendor/github.com/kuking/go-frodokem/impl.go | 535 - vendor/github.com/kuking/go-frodokem/types.go | 202 - vendor/github.com/mattn/go-isatty/LICENSE | 9 - vendor/github.com/mattn/go-isatty/README.md | 50 - vendor/github.com/mattn/go-isatty/doc.go | 2 - vendor/github.com/mattn/go-isatty/go.test.sh | 12 - .../github.com/mattn/go-isatty/isatty_bsd.go | 19 - .../mattn/go-isatty/isatty_others.go | 16 - .../mattn/go-isatty/isatty_plan9.go | 23 - .../mattn/go-isatty/isatty_solaris.go | 21 - .../mattn/go-isatty/isatty_tcgets.go | 19 - .../mattn/go-isatty/isatty_windows.go | 125 - vendor/github.com/pkg/errors/.gitignore | 24 - vendor/github.com/pkg/errors/.travis.yml | 10 - vendor/github.com/pkg/errors/LICENSE | 23 - vendor/github.com/pkg/errors/Makefile | 44 - vendor/github.com/pkg/errors/README.md | 59 - vendor/github.com/pkg/errors/appveyor.yml | 32 - vendor/github.com/pkg/errors/errors.go | 288 - vendor/github.com/pkg/errors/go113.go | 38 - vendor/github.com/pkg/errors/stack.go | 177 - .../github.com/templexxx/cpufeat/.gitignore | 15 - vendor/github.com/templexxx/cpufeat/LICENSE | 27 - vendor/github.com/templexxx/cpufeat/README.md | 1 - vendor/github.com/templexxx/cpufeat/cpu.go | 33 - .../github.com/templexxx/cpufeat/cpu_arm.go | 7 - .../github.com/templexxx/cpufeat/cpu_arm64.go | 7 - .../github.com/templexxx/cpufeat/cpu_mips.go | 7 - .../templexxx/cpufeat/cpu_mips64.go | 7 - .../templexxx/cpufeat/cpu_mips64le.go | 7 - .../templexxx/cpufeat/cpu_mipsle.go | 7 - .../github.com/templexxx/cpufeat/cpu_ppc64.go | 7 - .../templexxx/cpufeat/cpu_ppc64le.go | 7 - .../github.com/templexxx/cpufeat/cpu_s390x.go | 7 - .../github.com/templexxx/cpufeat/cpu_x86.go | 70 - vendor/github.com/templexxx/cpufeat/cpu_x86.s | 32 - .../github.com/templexxx/xor/.gitattributes | 1 - vendor/github.com/templexxx/xor/.gitignore | 18 - vendor/github.com/templexxx/xor/LICENSE | 21 - vendor/github.com/templexxx/xor/README.md | 50 - vendor/github.com/templexxx/xor/avx2_amd64.s | 438 - vendor/github.com/templexxx/xor/nosimd.go | 116 - vendor/github.com/templexxx/xor/sse2_amd64.s | 574 - vendor/github.com/templexxx/xor/xor.go | 49 - vendor/github.com/templexxx/xor/xor_amd64.go | 120 - vendor/github.com/templexxx/xor/xor_other.go | 19 - vendor/github.com/tjfoc/gmsm/LICENSE | 201 - vendor/github.com/tjfoc/gmsm/sm4/sm4.go | 491 - vendor/github.com/tjfoc/gmsm/sm4/sm4_gcm.go | 333 - vendor/github.com/tjfoc/gmsm/sm4/utils.go | 86 - vendor/github.com/xtaci/kcp-go/.gitignore | 24 - vendor/github.com/xtaci/kcp-go/.travis.yml | 17 - vendor/github.com/xtaci/kcp-go/LICENSE | 22 - vendor/github.com/xtaci/kcp-go/README.md | 229 - vendor/github.com/xtaci/kcp-go/batchconn.go | 12 - vendor/github.com/xtaci/kcp-go/crypt.go | 785 - vendor/github.com/xtaci/kcp-go/donate.png | Bin 4420 -> 0 bytes vendor/github.com/xtaci/kcp-go/entropy.go | 52 - vendor/github.com/xtaci/kcp-go/fec.go | 337 - vendor/github.com/xtaci/kcp-go/flame.png | Bin 57142 -> 0 bytes vendor/github.com/xtaci/kcp-go/frame.png | Bin 36006 -> 0 bytes vendor/github.com/xtaci/kcp-go/kcp-go.png | Bin 9153 -> 0 bytes vendor/github.com/xtaci/kcp-go/kcp.go | 1070 - vendor/github.com/xtaci/kcp-go/readloop.go | 48 - .../xtaci/kcp-go/readloop_generic.go | 11 - .../github.com/xtaci/kcp-go/readloop_linux.go | 120 - vendor/github.com/xtaci/kcp-go/sess.go | 1054 - vendor/github.com/xtaci/kcp-go/snmp.go | 164 - vendor/github.com/xtaci/kcp-go/tx.go | 24 - vendor/github.com/xtaci/kcp-go/tx_generic.go | 11 - vendor/github.com/xtaci/kcp-go/tx_linux.go | 51 - .../github.com/xtaci/kcp-go/wechat_donate.jpg | Bin 35307 -> 0 bytes vendor/golang.org/x/crypto/LICENSE | 27 - vendor/golang.org/x/crypto/PATENTS | 22 - vendor/golang.org/x/crypto/argon2/argon2.go | 283 - vendor/golang.org/x/crypto/argon2/blake2b.go | 53 - .../x/crypto/argon2/blamka_amd64.go | 61 - .../golang.org/x/crypto/argon2/blamka_amd64.s | 244 - .../x/crypto/argon2/blamka_generic.go | 163 - .../golang.org/x/crypto/argon2/blamka_ref.go | 16 - vendor/golang.org/x/crypto/bcrypt/base64.go | 35 - vendor/golang.org/x/crypto/bcrypt/bcrypt.go | 295 - vendor/golang.org/x/crypto/blake2b/blake2b.go | 291 - .../x/crypto/blake2b/blake2bAVX2_amd64.go | 38 - .../x/crypto/blake2b/blake2bAVX2_amd64.s | 745 - .../x/crypto/blake2b/blake2b_amd64.go | 25 - .../x/crypto/blake2b/blake2b_amd64.s | 279 - .../x/crypto/blake2b/blake2b_generic.go | 182 - .../x/crypto/blake2b/blake2b_ref.go | 12 - vendor/golang.org/x/crypto/blake2b/blake2x.go | 177 - .../golang.org/x/crypto/blake2b/register.go | 33 - vendor/golang.org/x/crypto/blowfish/block.go | 159 - vendor/golang.org/x/crypto/blowfish/cipher.go | 99 - vendor/golang.org/x/crypto/blowfish/const.go | 199 - vendor/golang.org/x/crypto/cast5/cast5.go | 533 - .../x/crypto/internal/alias/alias.go | 32 - .../x/crypto/internal/alias/alias_purego.go | 35 - vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go | 77 - .../x/crypto/salsa20/salsa/hsalsa20.go | 144 - .../x/crypto/salsa20/salsa/salsa208.go | 199 - .../x/crypto/salsa20/salsa/salsa20_amd64.go | 24 - .../x/crypto/salsa20/salsa/salsa20_amd64.s | 881 - .../x/crypto/salsa20/salsa/salsa20_noasm.go | 15 - .../x/crypto/salsa20/salsa/salsa20_ref.go | 231 - vendor/golang.org/x/crypto/salsa20/salsa20.go | 58 - vendor/golang.org/x/crypto/scrypt/scrypt.go | 212 - vendor/golang.org/x/crypto/sha3/doc.go | 62 - vendor/golang.org/x/crypto/sha3/hashes.go | 97 - .../x/crypto/sha3/hashes_generic.go | 28 - vendor/golang.org/x/crypto/sha3/keccakf.go | 413 - .../golang.org/x/crypto/sha3/keccakf_amd64.go | 14 - .../golang.org/x/crypto/sha3/keccakf_amd64.s | 391 - vendor/golang.org/x/crypto/sha3/register.go | 19 - vendor/golang.org/x/crypto/sha3/sha3.go | 193 - vendor/golang.org/x/crypto/sha3/sha3_s390x.go | 287 - vendor/golang.org/x/crypto/sha3/sha3_s390x.s | 34 - vendor/golang.org/x/crypto/sha3/shake.go | 173 - .../golang.org/x/crypto/sha3/shake_generic.go | 20 - vendor/golang.org/x/crypto/sha3/xor.go | 24 - .../golang.org/x/crypto/sha3/xor_generic.go | 28 - .../golang.org/x/crypto/sha3/xor_unaligned.go | 68 - vendor/golang.org/x/crypto/tea/cipher.go | 116 - vendor/golang.org/x/crypto/twofish/twofish.go | 348 - vendor/golang.org/x/crypto/xtea/block.go | 66 - vendor/golang.org/x/crypto/xtea/cipher.go | 90 - vendor/golang.org/x/net/AUTHORS | 3 - vendor/golang.org/x/net/CONTRIBUTORS | 3 - vendor/golang.org/x/net/LICENSE | 27 - vendor/golang.org/x/net/PATENTS | 22 - vendor/golang.org/x/net/bpf/asm.go | 41 - vendor/golang.org/x/net/bpf/constants.go | 222 - vendor/golang.org/x/net/bpf/doc.go | 82 - vendor/golang.org/x/net/bpf/instructions.go | 726 - vendor/golang.org/x/net/bpf/setter.go | 10 - vendor/golang.org/x/net/bpf/vm.go | 150 - .../golang.org/x/net/bpf/vm_instructions.go | 182 - .../golang.org/x/net/internal/iana/const.go | 223 - .../x/net/internal/socket/cmsghdr.go | 12 - .../x/net/internal/socket/cmsghdr_bsd.go | 14 - .../internal/socket/cmsghdr_linux_32bit.go | 15 - .../internal/socket/cmsghdr_linux_64bit.go | 15 - .../internal/socket/cmsghdr_solaris_64bit.go | 14 - .../x/net/internal/socket/cmsghdr_stub.go | 28 - .../x/net/internal/socket/cmsghdr_unix.go | 22 - .../net/internal/socket/cmsghdr_zos_s390x.go | 25 - .../net/internal/socket/complete_dontwait.go | 26 - .../internal/socket/complete_nodontwait.go | 22 - .../golang.org/x/net/internal/socket/empty.s | 8 - .../x/net/internal/socket/error_unix.go | 32 - .../x/net/internal/socket/error_windows.go | 26 - .../x/net/internal/socket/iovec_32bit.go | 20 - .../x/net/internal/socket/iovec_64bit.go | 20 - .../internal/socket/iovec_solaris_64bit.go | 19 - .../x/net/internal/socket/iovec_stub.go | 12 - .../x/net/internal/socket/mmsghdr_stub.go | 22 - .../x/net/internal/socket/mmsghdr_unix.go | 114 - .../x/net/internal/socket/msghdr_bsd.go | 40 - .../x/net/internal/socket/msghdr_bsdvar.go | 17 - .../x/net/internal/socket/msghdr_linux.go | 39 - .../net/internal/socket/msghdr_linux_32bit.go | 25 - .../net/internal/socket/msghdr_linux_64bit.go | 25 - .../x/net/internal/socket/msghdr_openbsd.go | 14 - .../internal/socket/msghdr_solaris_64bit.go | 36 - .../x/net/internal/socket/msghdr_stub.go | 15 - .../x/net/internal/socket/msghdr_zos_s390x.go | 36 - .../x/net/internal/socket/norace.go | 13 - .../golang.org/x/net/internal/socket/race.go | 38 - .../x/net/internal/socket/rawconn.go | 91 - .../x/net/internal/socket/rawconn_mmsg.go | 71 - .../x/net/internal/socket/rawconn_msg.go | 74 - .../x/net/internal/socket/rawconn_nommsg.go | 16 - .../x/net/internal/socket/rawconn_nomsg.go | 16 - .../x/net/internal/socket/socket.go | 280 - .../golang.org/x/net/internal/socket/sys.go | 23 - .../x/net/internal/socket/sys_bsd.go | 16 - .../x/net/internal/socket/sys_const_unix.go | 21 - .../x/net/internal/socket/sys_linkname.go | 43 - .../x/net/internal/socket/sys_linux.go | 23 - .../x/net/internal/socket/sys_linux_386.go | 53 - .../x/net/internal/socket/sys_linux_386.s | 11 - .../x/net/internal/socket/sys_linux_amd64.go | 10 - .../x/net/internal/socket/sys_linux_arm.go | 10 - .../x/net/internal/socket/sys_linux_arm64.go | 10 - .../x/net/internal/socket/sys_linux_mips.go | 10 - .../x/net/internal/socket/sys_linux_mips64.go | 10 - .../net/internal/socket/sys_linux_mips64le.go | 10 - .../x/net/internal/socket/sys_linux_mipsle.go | 10 - .../x/net/internal/socket/sys_linux_ppc.go | 10 - .../x/net/internal/socket/sys_linux_ppc64.go | 10 - .../net/internal/socket/sys_linux_ppc64le.go | 10 - .../net/internal/socket/sys_linux_riscv64.go | 13 - .../x/net/internal/socket/sys_linux_s390x.go | 53 - .../x/net/internal/socket/sys_linux_s390x.s | 11 - .../x/net/internal/socket/sys_netbsd.go | 25 - .../x/net/internal/socket/sys_posix.go | 185 - .../x/net/internal/socket/sys_solaris.go | 59 - .../x/net/internal/socket/sys_solaris_amd64.s | 11 - .../x/net/internal/socket/sys_stub.go | 53 - .../x/net/internal/socket/sys_unix.go | 34 - .../x/net/internal/socket/sys_windows.go | 54 - .../x/net/internal/socket/sys_zos_s390x.go | 38 - .../x/net/internal/socket/sys_zos_s390x.s | 11 - .../x/net/internal/socket/zsys_aix_ppc64.go | 40 - .../x/net/internal/socket/zsys_darwin_386.go | 30 - .../net/internal/socket/zsys_darwin_amd64.go | 32 - .../x/net/internal/socket/zsys_darwin_arm.go | 30 - .../net/internal/socket/zsys_darwin_arm64.go | 32 - .../internal/socket/zsys_dragonfly_amd64.go | 32 - .../x/net/internal/socket/zsys_freebsd_386.go | 30 - .../net/internal/socket/zsys_freebsd_amd64.go | 32 - .../x/net/internal/socket/zsys_freebsd_arm.go | 30 - .../net/internal/socket/zsys_freebsd_arm64.go | 32 - .../x/net/internal/socket/zsys_linux_386.go | 35 - .../x/net/internal/socket/zsys_linux_amd64.go | 38 - .../x/net/internal/socket/zsys_linux_arm.go | 35 - .../x/net/internal/socket/zsys_linux_arm64.go | 38 - .../x/net/internal/socket/zsys_linux_mips.go | 35 - .../net/internal/socket/zsys_linux_mips64.go | 38 - .../internal/socket/zsys_linux_mips64le.go | 38 - .../net/internal/socket/zsys_linux_mipsle.go | 35 - .../x/net/internal/socket/zsys_linux_ppc.go | 35 - .../x/net/internal/socket/zsys_linux_ppc64.go | 38 - .../net/internal/socket/zsys_linux_ppc64le.go | 38 - .../net/internal/socket/zsys_linux_riscv64.go | 40 - .../x/net/internal/socket/zsys_linux_s390x.go | 38 - .../x/net/internal/socket/zsys_netbsd_386.go | 35 - .../net/internal/socket/zsys_netbsd_amd64.go | 38 - .../x/net/internal/socket/zsys_netbsd_arm.go | 35 - .../net/internal/socket/zsys_netbsd_arm64.go | 38 - .../x/net/internal/socket/zsys_openbsd_386.go | 30 - .../net/internal/socket/zsys_openbsd_amd64.go | 32 - .../x/net/internal/socket/zsys_openbsd_arm.go | 30 - .../net/internal/socket/zsys_openbsd_arm64.go | 32 - .../internal/socket/zsys_openbsd_mips64.go | 30 - .../net/internal/socket/zsys_solaris_amd64.go | 32 - .../x/net/internal/socket/zsys_zos_s390x.go | 28 - vendor/golang.org/x/net/ipv4/batch.go | 194 - vendor/golang.org/x/net/ipv4/control.go | 144 - vendor/golang.org/x/net/ipv4/control_bsd.go | 44 - .../golang.org/x/net/ipv4/control_pktinfo.go | 42 - vendor/golang.org/x/net/ipv4/control_stub.go | 14 - vendor/golang.org/x/net/ipv4/control_unix.go | 76 - .../golang.org/x/net/ipv4/control_windows.go | 12 - vendor/golang.org/x/net/ipv4/control_zos.go | 88 - vendor/golang.org/x/net/ipv4/dgramopt.go | 264 - vendor/golang.org/x/net/ipv4/doc.go | 244 - vendor/golang.org/x/net/ipv4/endpoint.go | 186 - vendor/golang.org/x/net/ipv4/genericopt.go | 55 - vendor/golang.org/x/net/ipv4/header.go | 172 - vendor/golang.org/x/net/ipv4/helper.go | 77 - vendor/golang.org/x/net/ipv4/iana.go | 38 - vendor/golang.org/x/net/ipv4/icmp.go | 57 - vendor/golang.org/x/net/ipv4/icmp_linux.go | 25 - vendor/golang.org/x/net/ipv4/icmp_stub.go | 26 - vendor/golang.org/x/net/ipv4/packet.go | 117 - vendor/golang.org/x/net/ipv4/payload.go | 23 - vendor/golang.org/x/net/ipv4/payload_cmsg.go | 85 - .../golang.org/x/net/ipv4/payload_nocmsg.go | 40 - vendor/golang.org/x/net/ipv4/sockopt.go | 44 - vendor/golang.org/x/net/ipv4/sockopt_posix.go | 72 - vendor/golang.org/x/net/ipv4/sockopt_stub.go | 43 - vendor/golang.org/x/net/ipv4/sys_aix.go | 44 - vendor/golang.org/x/net/ipv4/sys_asmreq.go | 123 - .../golang.org/x/net/ipv4/sys_asmreq_stub.go | 26 - vendor/golang.org/x/net/ipv4/sys_asmreqn.go | 45 - .../golang.org/x/net/ipv4/sys_asmreqn_stub.go | 22 - vendor/golang.org/x/net/ipv4/sys_bpf.go | 25 - vendor/golang.org/x/net/ipv4/sys_bpf_stub.go | 17 - vendor/golang.org/x/net/ipv4/sys_bsd.go | 42 - vendor/golang.org/x/net/ipv4/sys_darwin.go | 69 - vendor/golang.org/x/net/ipv4/sys_dragonfly.go | 39 - vendor/golang.org/x/net/ipv4/sys_freebsd.go | 80 - vendor/golang.org/x/net/ipv4/sys_linux.go | 61 - vendor/golang.org/x/net/ipv4/sys_solaris.go | 61 - vendor/golang.org/x/net/ipv4/sys_ssmreq.go | 53 - .../golang.org/x/net/ipv4/sys_ssmreq_stub.go | 22 - vendor/golang.org/x/net/ipv4/sys_stub.go | 14 - vendor/golang.org/x/net/ipv4/sys_windows.go | 44 - vendor/golang.org/x/net/ipv4/sys_zos.go | 57 - .../golang.org/x/net/ipv4/zsys_aix_ppc64.go | 17 - vendor/golang.org/x/net/ipv4/zsys_darwin.go | 59 - .../golang.org/x/net/ipv4/zsys_dragonfly.go | 13 - .../golang.org/x/net/ipv4/zsys_freebsd_386.go | 52 - .../x/net/ipv4/zsys_freebsd_amd64.go | 54 - .../golang.org/x/net/ipv4/zsys_freebsd_arm.go | 54 - .../x/net/ipv4/zsys_freebsd_arm64.go | 52 - .../golang.org/x/net/ipv4/zsys_linux_386.go | 72 - .../golang.org/x/net/ipv4/zsys_linux_amd64.go | 74 - .../golang.org/x/net/ipv4/zsys_linux_arm.go | 72 - .../golang.org/x/net/ipv4/zsys_linux_arm64.go | 74 - .../golang.org/x/net/ipv4/zsys_linux_mips.go | 72 - .../x/net/ipv4/zsys_linux_mips64.go | 74 - .../x/net/ipv4/zsys_linux_mips64le.go | 74 - .../x/net/ipv4/zsys_linux_mipsle.go | 72 - .../golang.org/x/net/ipv4/zsys_linux_ppc.go | 72 - .../golang.org/x/net/ipv4/zsys_linux_ppc64.go | 74 - .../x/net/ipv4/zsys_linux_ppc64le.go | 74 - .../x/net/ipv4/zsys_linux_riscv64.go | 77 - .../golang.org/x/net/ipv4/zsys_linux_s390x.go | 74 - vendor/golang.org/x/net/ipv4/zsys_netbsd.go | 13 - vendor/golang.org/x/net/ipv4/zsys_openbsd.go | 13 - vendor/golang.org/x/net/ipv4/zsys_solaris.go | 57 - .../golang.org/x/net/ipv4/zsys_zos_s390x.go | 56 - vendor/golang.org/x/net/ipv6/batch.go | 116 - vendor/golang.org/x/net/ipv6/control.go | 187 - .../x/net/ipv6/control_rfc2292_unix.go | 51 - .../x/net/ipv6/control_rfc3542_unix.go | 97 - vendor/golang.org/x/net/ipv6/control_stub.go | 14 - vendor/golang.org/x/net/ipv6/control_unix.go | 56 - .../golang.org/x/net/ipv6/control_windows.go | 12 - vendor/golang.org/x/net/ipv6/dgramopt.go | 301 - vendor/golang.org/x/net/ipv6/doc.go | 243 - vendor/golang.org/x/net/ipv6/endpoint.go | 127 - vendor/golang.org/x/net/ipv6/genericopt.go | 56 - vendor/golang.org/x/net/ipv6/header.go | 55 - vendor/golang.org/x/net/ipv6/helper.go | 58 - vendor/golang.org/x/net/ipv6/iana.go | 86 - vendor/golang.org/x/net/ipv6/icmp.go | 60 - vendor/golang.org/x/net/ipv6/icmp_bsd.go | 30 - vendor/golang.org/x/net/ipv6/icmp_linux.go | 27 - vendor/golang.org/x/net/ipv6/icmp_solaris.go | 27 - vendor/golang.org/x/net/ipv6/icmp_stub.go | 24 - vendor/golang.org/x/net/ipv6/icmp_windows.go | 22 - vendor/golang.org/x/net/ipv6/icmp_zos.go | 29 - vendor/golang.org/x/net/ipv6/payload.go | 23 - vendor/golang.org/x/net/ipv6/payload_cmsg.go | 71 - .../golang.org/x/net/ipv6/payload_nocmsg.go | 39 - vendor/golang.org/x/net/ipv6/sockopt.go | 43 - vendor/golang.org/x/net/ipv6/sockopt_posix.go | 90 - vendor/golang.org/x/net/ipv6/sockopt_stub.go | 47 - vendor/golang.org/x/net/ipv6/sys_aix.go | 80 - vendor/golang.org/x/net/ipv6/sys_asmreq.go | 25 - .../golang.org/x/net/ipv6/sys_asmreq_stub.go | 18 - vendor/golang.org/x/net/ipv6/sys_bpf.go | 25 - vendor/golang.org/x/net/ipv6/sys_bpf_stub.go | 17 - vendor/golang.org/x/net/ipv6/sys_bsd.go | 60 - vendor/golang.org/x/net/ipv6/sys_darwin.go | 80 - vendor/golang.org/x/net/ipv6/sys_freebsd.go | 94 - vendor/golang.org/x/net/ipv6/sys_linux.go | 76 - vendor/golang.org/x/net/ipv6/sys_solaris.go | 76 - vendor/golang.org/x/net/ipv6/sys_ssmreq.go | 55 - .../golang.org/x/net/ipv6/sys_ssmreq_stub.go | 22 - vendor/golang.org/x/net/ipv6/sys_stub.go | 14 - vendor/golang.org/x/net/ipv6/sys_windows.go | 68 - vendor/golang.org/x/net/ipv6/sys_zos.go | 72 - .../golang.org/x/net/ipv6/zsys_aix_ppc64.go | 69 - vendor/golang.org/x/net/ipv6/zsys_darwin.go | 64 - .../golang.org/x/net/ipv6/zsys_dragonfly.go | 42 - .../golang.org/x/net/ipv6/zsys_freebsd_386.go | 64 - .../x/net/ipv6/zsys_freebsd_amd64.go | 66 - .../golang.org/x/net/ipv6/zsys_freebsd_arm.go | 66 - .../x/net/ipv6/zsys_freebsd_arm64.go | 64 - .../golang.org/x/net/ipv6/zsys_linux_386.go | 72 - .../golang.org/x/net/ipv6/zsys_linux_amd64.go | 74 - .../golang.org/x/net/ipv6/zsys_linux_arm.go | 72 - .../golang.org/x/net/ipv6/zsys_linux_arm64.go | 74 - .../golang.org/x/net/ipv6/zsys_linux_mips.go | 72 - .../x/net/ipv6/zsys_linux_mips64.go | 74 - .../x/net/ipv6/zsys_linux_mips64le.go | 74 - .../x/net/ipv6/zsys_linux_mipsle.go | 72 - .../golang.org/x/net/ipv6/zsys_linux_ppc.go | 72 - .../golang.org/x/net/ipv6/zsys_linux_ppc64.go | 74 - .../x/net/ipv6/zsys_linux_ppc64le.go | 74 - .../x/net/ipv6/zsys_linux_riscv64.go | 77 - .../golang.org/x/net/ipv6/zsys_linux_s390x.go | 74 - vendor/golang.org/x/net/ipv6/zsys_netbsd.go | 42 - vendor/golang.org/x/net/ipv6/zsys_openbsd.go | 42 - vendor/golang.org/x/net/ipv6/zsys_solaris.go | 63 - .../golang.org/x/net/ipv6/zsys_zos_s390x.go | 62 - vendor/golang.org/x/sys/LICENSE | 27 - vendor/golang.org/x/sys/PATENTS | 22 - vendor/golang.org/x/sys/cpu/asm_aix_ppc64.s | 18 - vendor/golang.org/x/sys/cpu/byteorder.go | 66 - vendor/golang.org/x/sys/cpu/cpu.go | 287 - vendor/golang.org/x/sys/cpu/cpu_aix.go | 34 - vendor/golang.org/x/sys/cpu/cpu_arm.go | 73 - vendor/golang.org/x/sys/cpu/cpu_arm64.go | 172 - vendor/golang.org/x/sys/cpu/cpu_arm64.s | 32 - vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go | 12 - vendor/golang.org/x/sys/cpu/cpu_gc_s390x.go | 22 - vendor/golang.org/x/sys/cpu/cpu_gc_x86.go | 17 - .../golang.org/x/sys/cpu/cpu_gccgo_arm64.go | 12 - .../golang.org/x/sys/cpu/cpu_gccgo_s390x.go | 23 - vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c | 38 - vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go | 33 - vendor/golang.org/x/sys/cpu/cpu_linux.go | 16 - vendor/golang.org/x/sys/cpu/cpu_linux_arm.go | 39 - .../golang.org/x/sys/cpu/cpu_linux_arm64.go | 71 - .../golang.org/x/sys/cpu/cpu_linux_mips64x.go | 24 - .../golang.org/x/sys/cpu/cpu_linux_noinit.go | 10 - .../golang.org/x/sys/cpu/cpu_linux_ppc64x.go | 32 - .../golang.org/x/sys/cpu/cpu_linux_s390x.go | 40 - vendor/golang.org/x/sys/cpu/cpu_loong64.go | 13 - vendor/golang.org/x/sys/cpu/cpu_mips64x.go | 16 - vendor/golang.org/x/sys/cpu/cpu_mipsx.go | 12 - .../golang.org/x/sys/cpu/cpu_netbsd_arm64.go | 173 - .../golang.org/x/sys/cpu/cpu_openbsd_arm64.go | 65 - .../golang.org/x/sys/cpu/cpu_openbsd_arm64.s | 11 - vendor/golang.org/x/sys/cpu/cpu_other_arm.go | 10 - .../golang.org/x/sys/cpu/cpu_other_arm64.go | 10 - .../golang.org/x/sys/cpu/cpu_other_mips64x.go | 13 - .../golang.org/x/sys/cpu/cpu_other_riscv64.go | 12 - vendor/golang.org/x/sys/cpu/cpu_ppc64x.go | 17 - vendor/golang.org/x/sys/cpu/cpu_riscv64.go | 12 - vendor/golang.org/x/sys/cpu/cpu_s390x.go | 172 - vendor/golang.org/x/sys/cpu/cpu_s390x.s | 58 - vendor/golang.org/x/sys/cpu/cpu_wasm.go | 18 - vendor/golang.org/x/sys/cpu/cpu_x86.go | 145 - vendor/golang.org/x/sys/cpu/cpu_x86.s | 28 - vendor/golang.org/x/sys/cpu/cpu_zos.go | 10 - vendor/golang.org/x/sys/cpu/cpu_zos_s390x.go | 25 - vendor/golang.org/x/sys/cpu/hwcap_linux.go | 56 - .../golang.org/x/sys/cpu/syscall_aix_gccgo.go | 27 - .../x/sys/cpu/syscall_aix_ppc64_gc.go | 36 - .../sys/internal/unsafeheader/unsafeheader.go | 30 - vendor/golang.org/x/sys/unix/.gitignore | 2 - vendor/golang.org/x/sys/unix/README.md | 184 - .../golang.org/x/sys/unix/affinity_linux.go | 86 - vendor/golang.org/x/sys/unix/aliases.go | 15 - vendor/golang.org/x/sys/unix/asm_aix_ppc64.s | 18 - vendor/golang.org/x/sys/unix/asm_bsd_386.s | 29 - vendor/golang.org/x/sys/unix/asm_bsd_amd64.s | 29 - vendor/golang.org/x/sys/unix/asm_bsd_arm.s | 29 - vendor/golang.org/x/sys/unix/asm_bsd_arm64.s | 29 - .../golang.org/x/sys/unix/asm_bsd_riscv64.s | 29 - vendor/golang.org/x/sys/unix/asm_linux_386.s | 66 - .../golang.org/x/sys/unix/asm_linux_amd64.s | 58 - vendor/golang.org/x/sys/unix/asm_linux_arm.s | 57 - .../golang.org/x/sys/unix/asm_linux_arm64.s | 53 - .../golang.org/x/sys/unix/asm_linux_loong64.s | 54 - .../golang.org/x/sys/unix/asm_linux_mips64x.s | 57 - .../golang.org/x/sys/unix/asm_linux_mipsx.s | 55 - .../golang.org/x/sys/unix/asm_linux_ppc64x.s | 45 - .../golang.org/x/sys/unix/asm_linux_riscv64.s | 49 - .../golang.org/x/sys/unix/asm_linux_s390x.s | 57 - .../x/sys/unix/asm_openbsd_mips64.s | 30 - .../golang.org/x/sys/unix/asm_solaris_amd64.s | 18 - vendor/golang.org/x/sys/unix/asm_zos_s390x.s | 426 - .../golang.org/x/sys/unix/bluetooth_linux.go | 36 - vendor/golang.org/x/sys/unix/cap_freebsd.go | 196 - vendor/golang.org/x/sys/unix/constants.go | 14 - vendor/golang.org/x/sys/unix/dev_aix_ppc.go | 27 - vendor/golang.org/x/sys/unix/dev_aix_ppc64.go | 29 - vendor/golang.org/x/sys/unix/dev_darwin.go | 24 - vendor/golang.org/x/sys/unix/dev_dragonfly.go | 30 - vendor/golang.org/x/sys/unix/dev_freebsd.go | 30 - vendor/golang.org/x/sys/unix/dev_linux.go | 42 - vendor/golang.org/x/sys/unix/dev_netbsd.go | 29 - vendor/golang.org/x/sys/unix/dev_openbsd.go | 29 - vendor/golang.org/x/sys/unix/dev_zos.go | 29 - vendor/golang.org/x/sys/unix/dirent.go | 103 - vendor/golang.org/x/sys/unix/endian_big.go | 10 - vendor/golang.org/x/sys/unix/endian_little.go | 10 - vendor/golang.org/x/sys/unix/env_unix.go | 32 - vendor/golang.org/x/sys/unix/epoll_zos.go | 221 - vendor/golang.org/x/sys/unix/fcntl.go | 37 - vendor/golang.org/x/sys/unix/fcntl_darwin.go | 24 - .../x/sys/unix/fcntl_linux_32bit.go | 14 - vendor/golang.org/x/sys/unix/fdset.go | 30 - vendor/golang.org/x/sys/unix/fstatfs_zos.go | 164 - vendor/golang.org/x/sys/unix/gccgo.go | 60 - vendor/golang.org/x/sys/unix/gccgo_c.c | 45 - .../x/sys/unix/gccgo_linux_amd64.go | 21 - vendor/golang.org/x/sys/unix/ifreq_linux.go | 142 - vendor/golang.org/x/sys/unix/ioctl.go | 75 - vendor/golang.org/x/sys/unix/ioctl_linux.go | 233 - vendor/golang.org/x/sys/unix/ioctl_zos.go | 74 - vendor/golang.org/x/sys/unix/mkall.sh | 231 - vendor/golang.org/x/sys/unix/mkerrors.sh | 778 - vendor/golang.org/x/sys/unix/pagesize_unix.go | 16 - .../golang.org/x/sys/unix/pledge_openbsd.go | 163 - vendor/golang.org/x/sys/unix/ptrace_darwin.go | 12 - vendor/golang.org/x/sys/unix/ptrace_ios.go | 12 - vendor/golang.org/x/sys/unix/race.go | 31 - vendor/golang.org/x/sys/unix/race0.go | 26 - .../x/sys/unix/readdirent_getdents.go | 13 - .../x/sys/unix/readdirent_getdirentries.go | 20 - .../x/sys/unix/sockcmsg_dragonfly.go | 16 - .../golang.org/x/sys/unix/sockcmsg_linux.go | 85 - vendor/golang.org/x/sys/unix/sockcmsg_unix.go | 93 - .../x/sys/unix/sockcmsg_unix_other.go | 47 - vendor/golang.org/x/sys/unix/syscall.go | 87 - vendor/golang.org/x/sys/unix/syscall_aix.go | 600 - .../golang.org/x/sys/unix/syscall_aix_ppc.go | 54 - .../x/sys/unix/syscall_aix_ppc64.go | 85 - vendor/golang.org/x/sys/unix/syscall_bsd.go | 625 - .../golang.org/x/sys/unix/syscall_darwin.go | 830 - .../x/sys/unix/syscall_darwin_amd64.go | 51 - .../x/sys/unix/syscall_darwin_arm64.go | 51 - .../x/sys/unix/syscall_darwin_libSystem.go | 27 - .../x/sys/unix/syscall_dragonfly.go | 544 - .../x/sys/unix/syscall_dragonfly_amd64.go | 57 - .../golang.org/x/sys/unix/syscall_freebsd.go | 614 - .../x/sys/unix/syscall_freebsd_386.go | 67 - .../x/sys/unix/syscall_freebsd_amd64.go | 67 - .../x/sys/unix/syscall_freebsd_arm.go | 63 - .../x/sys/unix/syscall_freebsd_arm64.go | 63 - .../x/sys/unix/syscall_freebsd_riscv64.go | 63 - .../golang.org/x/sys/unix/syscall_illumos.go | 185 - vendor/golang.org/x/sys/unix/syscall_linux.go | 2467 - .../x/sys/unix/syscall_linux_386.go | 342 - .../x/sys/unix/syscall_linux_alarm.go | 14 - .../x/sys/unix/syscall_linux_amd64.go | 147 - .../x/sys/unix/syscall_linux_amd64_gc.go | 13 - .../x/sys/unix/syscall_linux_arm.go | 244 - .../x/sys/unix/syscall_linux_arm64.go | 195 - .../golang.org/x/sys/unix/syscall_linux_gc.go | 15 - .../x/sys/unix/syscall_linux_gc_386.go | 17 - .../x/sys/unix/syscall_linux_gc_arm.go | 14 - .../x/sys/unix/syscall_linux_gccgo_386.go | 31 - .../x/sys/unix/syscall_linux_gccgo_arm.go | 21 - .../x/sys/unix/syscall_linux_loong64.go | 222 - .../x/sys/unix/syscall_linux_mips64x.go | 191 - .../x/sys/unix/syscall_linux_mipsx.go | 203 - .../x/sys/unix/syscall_linux_ppc.go | 232 - .../x/sys/unix/syscall_linux_ppc64x.go | 118 - .../x/sys/unix/syscall_linux_riscv64.go | 180 - .../x/sys/unix/syscall_linux_s390x.go | 298 - .../x/sys/unix/syscall_linux_sparc64.go | 114 - .../golang.org/x/sys/unix/syscall_netbsd.go | 609 - .../x/sys/unix/syscall_netbsd_386.go | 38 - .../x/sys/unix/syscall_netbsd_amd64.go | 38 - .../x/sys/unix/syscall_netbsd_arm.go | 38 - .../x/sys/unix/syscall_netbsd_arm64.go | 38 - .../golang.org/x/sys/unix/syscall_openbsd.go | 389 - .../x/sys/unix/syscall_openbsd_386.go | 42 - .../x/sys/unix/syscall_openbsd_amd64.go | 42 - .../x/sys/unix/syscall_openbsd_arm.go | 42 - .../x/sys/unix/syscall_openbsd_arm64.go | 42 - .../x/sys/unix/syscall_openbsd_libc.go | 27 - .../x/sys/unix/syscall_openbsd_mips64.go | 39 - .../golang.org/x/sys/unix/syscall_solaris.go | 1028 - .../x/sys/unix/syscall_solaris_amd64.go | 28 - vendor/golang.org/x/sys/unix/syscall_unix.go | 550 - .../golang.org/x/sys/unix/syscall_unix_gc.go | 18 - .../x/sys/unix/syscall_unix_gc_ppc64x.go | 25 - .../x/sys/unix/syscall_zos_s390x.go | 1823 - vendor/golang.org/x/sys/unix/sysvshm_linux.go | 21 - vendor/golang.org/x/sys/unix/sysvshm_unix.go | 52 - .../x/sys/unix/sysvshm_unix_other.go | 14 - vendor/golang.org/x/sys/unix/timestruct.go | 77 - .../golang.org/x/sys/unix/unveil_openbsd.go | 42 - vendor/golang.org/x/sys/unix/xattr_bsd.go | 276 - .../golang.org/x/sys/unix/zerrors_aix_ppc.go | 1385 - .../x/sys/unix/zerrors_aix_ppc64.go | 1386 - .../x/sys/unix/zerrors_darwin_amd64.go | 1892 - .../x/sys/unix/zerrors_darwin_arm64.go | 1892 - .../x/sys/unix/zerrors_dragonfly_amd64.go | 1738 - .../x/sys/unix/zerrors_freebsd_386.go | 2043 - .../x/sys/unix/zerrors_freebsd_amd64.go | 2040 - .../x/sys/unix/zerrors_freebsd_arm.go | 2034 - .../x/sys/unix/zerrors_freebsd_arm64.go | 2034 - .../x/sys/unix/zerrors_freebsd_riscv64.go | 2148 - vendor/golang.org/x/sys/unix/zerrors_linux.go | 3457 - .../x/sys/unix/zerrors_linux_386.go | 828 - .../x/sys/unix/zerrors_linux_amd64.go | 828 - .../x/sys/unix/zerrors_linux_arm.go | 834 - .../x/sys/unix/zerrors_linux_arm64.go | 826 - .../x/sys/unix/zerrors_linux_loong64.go | 818 - .../x/sys/unix/zerrors_linux_mips.go | 835 - .../x/sys/unix/zerrors_linux_mips64.go | 835 - .../x/sys/unix/zerrors_linux_mips64le.go | 835 - .../x/sys/unix/zerrors_linux_mipsle.go | 835 - .../x/sys/unix/zerrors_linux_ppc.go | 887 - .../x/sys/unix/zerrors_linux_ppc64.go | 891 - .../x/sys/unix/zerrors_linux_ppc64le.go | 891 - .../x/sys/unix/zerrors_linux_riscv64.go | 815 - .../x/sys/unix/zerrors_linux_s390x.go | 890 - .../x/sys/unix/zerrors_linux_sparc64.go | 885 - .../x/sys/unix/zerrors_netbsd_386.go | 1780 - .../x/sys/unix/zerrors_netbsd_amd64.go | 1770 - .../x/sys/unix/zerrors_netbsd_arm.go | 1759 - .../x/sys/unix/zerrors_netbsd_arm64.go | 1770 - .../x/sys/unix/zerrors_openbsd_386.go | 1668 - .../x/sys/unix/zerrors_openbsd_amd64.go | 1775 - .../x/sys/unix/zerrors_openbsd_arm.go | 1670 - .../x/sys/unix/zerrors_openbsd_arm64.go | 1798 - .../x/sys/unix/zerrors_openbsd_mips64.go | 1863 - .../x/sys/unix/zerrors_solaris_amd64.go | 1557 - .../x/sys/unix/zerrors_zos_s390x.go | 860 - .../x/sys/unix/zptrace_armnn_linux.go | 42 - .../x/sys/unix/zptrace_linux_arm64.go | 17 - .../x/sys/unix/zptrace_mipsnn_linux.go | 51 - .../x/sys/unix/zptrace_mipsnnle_linux.go | 51 - .../x/sys/unix/zptrace_x86_linux.go | 81 - .../golang.org/x/sys/unix/zsyscall_aix_ppc.go | 1485 - .../x/sys/unix/zsyscall_aix_ppc64.go | 1443 - .../x/sys/unix/zsyscall_aix_ppc64_gc.go | 1192 - .../x/sys/unix/zsyscall_aix_ppc64_gccgo.go | 1070 - .../x/sys/unix/zsyscall_darwin_amd64.go | 2545 - .../x/sys/unix/zsyscall_darwin_amd64.s | 904 - .../x/sys/unix/zsyscall_darwin_arm64.go | 2545 - .../x/sys/unix/zsyscall_darwin_arm64.s | 904 - .../x/sys/unix/zsyscall_dragonfly_amd64.go | 1679 - .../x/sys/unix/zsyscall_freebsd_386.go | 1889 - .../x/sys/unix/zsyscall_freebsd_amd64.go | 1889 - .../x/sys/unix/zsyscall_freebsd_arm.go | 1889 - .../x/sys/unix/zsyscall_freebsd_arm64.go | 1889 - .../x/sys/unix/zsyscall_freebsd_riscv64.go | 1889 - .../x/sys/unix/zsyscall_illumos_amd64.go | 128 - .../golang.org/x/sys/unix/zsyscall_linux.go | 2153 - .../x/sys/unix/zsyscall_linux_386.go | 497 - .../x/sys/unix/zsyscall_linux_amd64.go | 664 - .../x/sys/unix/zsyscall_linux_arm.go | 612 - .../x/sys/unix/zsyscall_linux_arm64.go | 563 - .../x/sys/unix/zsyscall_linux_loong64.go | 487 - .../x/sys/unix/zsyscall_linux_mips.go | 664 - .../x/sys/unix/zsyscall_linux_mips64.go | 658 - .../x/sys/unix/zsyscall_linux_mips64le.go | 647 - .../x/sys/unix/zsyscall_linux_mipsle.go | 664 - .../x/sys/unix/zsyscall_linux_ppc.go | 669 - .../x/sys/unix/zsyscall_linux_ppc64.go | 715 - .../x/sys/unix/zsyscall_linux_ppc64le.go | 715 - .../x/sys/unix/zsyscall_linux_riscv64.go | 543 - .../x/sys/unix/zsyscall_linux_s390x.go | 506 - .../x/sys/unix/zsyscall_linux_sparc64.go | 659 - .../x/sys/unix/zsyscall_netbsd_386.go | 1850 - .../x/sys/unix/zsyscall_netbsd_amd64.go | 1850 - .../x/sys/unix/zsyscall_netbsd_arm.go | 1850 - .../x/sys/unix/zsyscall_netbsd_arm64.go | 1850 - .../x/sys/unix/zsyscall_openbsd_386.go | 2221 - .../x/sys/unix/zsyscall_openbsd_386.s | 796 - .../x/sys/unix/zsyscall_openbsd_amd64.go | 2221 - .../x/sys/unix/zsyscall_openbsd_amd64.s | 796 - .../x/sys/unix/zsyscall_openbsd_arm.go | 2221 - .../x/sys/unix/zsyscall_openbsd_arm.s | 796 - .../x/sys/unix/zsyscall_openbsd_arm64.go | 2221 - .../x/sys/unix/zsyscall_openbsd_arm64.s | 796 - .../x/sys/unix/zsyscall_openbsd_mips64.go | 1693 - .../x/sys/unix/zsyscall_solaris_amd64.go | 2067 - .../x/sys/unix/zsyscall_zos_s390x.go | 1255 - .../x/sys/unix/zsysctl_openbsd_386.go | 274 - .../x/sys/unix/zsysctl_openbsd_amd64.go | 272 - .../x/sys/unix/zsysctl_openbsd_arm.go | 274 - .../x/sys/unix/zsysctl_openbsd_arm64.go | 276 - .../x/sys/unix/zsysctl_openbsd_mips64.go | 280 - .../x/sys/unix/zsysnum_darwin_amd64.go | 440 - .../x/sys/unix/zsysnum_darwin_arm64.go | 438 - .../x/sys/unix/zsysnum_dragonfly_amd64.go | 317 - .../x/sys/unix/zsysnum_freebsd_386.go | 394 - .../x/sys/unix/zsysnum_freebsd_amd64.go | 394 - .../x/sys/unix/zsysnum_freebsd_arm.go | 394 - .../x/sys/unix/zsysnum_freebsd_arm64.go | 394 - .../x/sys/unix/zsysnum_freebsd_riscv64.go | 394 - .../x/sys/unix/zsysnum_linux_386.go | 450 - .../x/sys/unix/zsysnum_linux_amd64.go | 372 - .../x/sys/unix/zsysnum_linux_arm.go | 414 - .../x/sys/unix/zsysnum_linux_arm64.go | 317 - .../x/sys/unix/zsysnum_linux_loong64.go | 311 - .../x/sys/unix/zsysnum_linux_mips.go | 434 - .../x/sys/unix/zsysnum_linux_mips64.go | 364 - .../x/sys/unix/zsysnum_linux_mips64le.go | 364 - .../x/sys/unix/zsysnum_linux_mipsle.go | 434 - .../x/sys/unix/zsysnum_linux_ppc.go | 441 - .../x/sys/unix/zsysnum_linux_ppc64.go | 413 - .../x/sys/unix/zsysnum_linux_ppc64le.go | 413 - .../x/sys/unix/zsysnum_linux_riscv64.go | 316 - .../x/sys/unix/zsysnum_linux_s390x.go | 378 - .../x/sys/unix/zsysnum_linux_sparc64.go | 392 - .../x/sys/unix/zsysnum_netbsd_386.go | 275 - .../x/sys/unix/zsysnum_netbsd_amd64.go | 275 - .../x/sys/unix/zsysnum_netbsd_arm.go | 275 - .../x/sys/unix/zsysnum_netbsd_arm64.go | 275 - .../x/sys/unix/zsysnum_openbsd_386.go | 220 - .../x/sys/unix/zsysnum_openbsd_amd64.go | 220 - .../x/sys/unix/zsysnum_openbsd_arm.go | 220 - .../x/sys/unix/zsysnum_openbsd_arm64.go | 219 - .../x/sys/unix/zsysnum_openbsd_mips64.go | 221 - .../x/sys/unix/zsysnum_zos_s390x.go | 2670 - .../golang.org/x/sys/unix/ztypes_aix_ppc.go | 354 - .../golang.org/x/sys/unix/ztypes_aix_ppc64.go | 358 - .../x/sys/unix/ztypes_darwin_amd64.go | 795 - .../x/sys/unix/ztypes_darwin_arm64.go | 795 - .../x/sys/unix/ztypes_dragonfly_amd64.go | 474 - .../x/sys/unix/ztypes_freebsd_386.go | 651 - .../x/sys/unix/ztypes_freebsd_amd64.go | 656 - .../x/sys/unix/ztypes_freebsd_arm.go | 642 - .../x/sys/unix/ztypes_freebsd_arm64.go | 636 - .../x/sys/unix/ztypes_freebsd_riscv64.go | 638 - .../x/sys/unix/ztypes_illumos_amd64.go | 42 - vendor/golang.org/x/sys/unix/ztypes_linux.go | 5609 -- .../golang.org/x/sys/unix/ztypes_linux_386.go | 690 - .../x/sys/unix/ztypes_linux_amd64.go | 705 - .../golang.org/x/sys/unix/ztypes_linux_arm.go | 685 - .../x/sys/unix/ztypes_linux_arm64.go | 684 - .../x/sys/unix/ztypes_linux_loong64.go | 685 - .../x/sys/unix/ztypes_linux_mips.go | 690 - .../x/sys/unix/ztypes_linux_mips64.go | 687 - .../x/sys/unix/ztypes_linux_mips64le.go | 687 - .../x/sys/unix/ztypes_linux_mipsle.go | 690 - .../golang.org/x/sys/unix/ztypes_linux_ppc.go | 698 - .../x/sys/unix/ztypes_linux_ppc64.go | 693 - .../x/sys/unix/ztypes_linux_ppc64le.go | 693 - .../x/sys/unix/ztypes_linux_riscv64.go | 712 - .../x/sys/unix/ztypes_linux_s390x.go | 707 - .../x/sys/unix/ztypes_linux_sparc64.go | 688 - .../x/sys/unix/ztypes_netbsd_386.go | 502 - .../x/sys/unix/ztypes_netbsd_amd64.go | 510 - .../x/sys/unix/ztypes_netbsd_arm.go | 507 - .../x/sys/unix/ztypes_netbsd_arm64.go | 510 - .../x/sys/unix/ztypes_openbsd_386.go | 574 - .../x/sys/unix/ztypes_openbsd_amd64.go | 574 - .../x/sys/unix/ztypes_openbsd_arm.go | 575 - .../x/sys/unix/ztypes_openbsd_arm64.go | 568 - .../x/sys/unix/ztypes_openbsd_mips64.go | 568 - .../x/sys/unix/ztypes_solaris_amd64.go | 482 - .../golang.org/x/sys/unix/ztypes_zos_s390x.go | 406 - vendor/golang.org/x/sys/windows/aliases.go | 13 - .../golang.org/x/sys/windows/dll_windows.go | 416 - vendor/golang.org/x/sys/windows/empty.s | 9 - .../golang.org/x/sys/windows/env_windows.go | 54 - vendor/golang.org/x/sys/windows/eventlog.go | 21 - .../golang.org/x/sys/windows/exec_windows.go | 178 - .../x/sys/windows/memory_windows.go | 48 - vendor/golang.org/x/sys/windows/mkerrors.bash | 70 - .../x/sys/windows/mkknownfolderids.bash | 27 - vendor/golang.org/x/sys/windows/mksyscall.go | 10 - vendor/golang.org/x/sys/windows/race.go | 31 - vendor/golang.org/x/sys/windows/race0.go | 26 - .../x/sys/windows/security_windows.go | 1444 - vendor/golang.org/x/sys/windows/service.go | 247 - .../x/sys/windows/setupapi_windows.go | 1425 - vendor/golang.org/x/sys/windows/str.go | 23 - vendor/golang.org/x/sys/windows/syscall.go | 105 - .../x/sys/windows/syscall_windows.go | 1811 - .../golang.org/x/sys/windows/types_windows.go | 3260 - .../x/sys/windows/types_windows_386.go | 35 - .../x/sys/windows/types_windows_amd64.go | 34 - .../x/sys/windows/types_windows_arm.go | 35 - .../x/sys/windows/types_windows_arm64.go | 34 - .../x/sys/windows/zerrors_windows.go | 9468 --- .../x/sys/windows/zknownfolderids_windows.go | 149 - .../x/sys/windows/zsyscall_windows.go | 4302 - .../hlandau/easymetric.v1/cexp/cexp.go | 97 - .../gopkg.in/hlandau/measurable.v1/README.md | 82 - .../hlandau/measurable.v1/measurable.go | 189 - vendor/gopkg.in/hlandau/passlib.v1/COPYING | 39 - .../hlandau/passlib.v1/abstract/compare.go | 11 - .../hlandau/passlib.v1/abstract/errors.go | 15 - .../hlandau/passlib.v1/abstract/scheme.go | 34 - vendor/gopkg.in/hlandau/passlib.v1/default.go | 141 - .../hlandau/passlib.v1/hash/argon2/argon2.go | 115 - .../passlib.v1/hash/argon2/raw/argon2.go | 186 - .../hlandau/passlib.v1/hash/bcrypt/bcrypt.go | 72 - .../hash/bcryptsha256/bcryptsha256.go | 96 - .../hlandau/passlib.v1/hash/pbkdf2/pbkdf2.go | 94 - .../passlib.v1/hash/pbkdf2/raw/base64.go | 20 - .../passlib.v1/hash/pbkdf2/raw/parse.go | 62 - .../passlib.v1/hash/pbkdf2/raw/pbkdf2.go | 15 - .../hlandau/passlib.v1/hash/pbkdf2/test.py | 30 - .../passlib.v1/hash/scrypt/raw/scrypt.go | 95 - .../hlandau/passlib.v1/hash/scrypt/scrypt.go | 113 - .../passlib.v1/hash/sha2crypt/raw/base64.go | 34 - .../passlib.v1/hash/sha2crypt/raw/parse.go | 82 - .../hash/sha2crypt/raw/sha2crypt.go | 187 - .../passlib.v1/hash/sha2crypt/sha2crypt.go | 147 - vendor/gopkg.in/hlandau/passlib.v1/passlib.go | 174 - vendor/modules.txt | 117 - 925 files changed, 37 insertions(+), 330318 deletions(-) delete mode 100644 vendor/blitter.com/go/chacha20/LICENSE delete mode 100644 vendor/blitter.com/go/chacha20/README.md delete mode 100644 vendor/blitter.com/go/chacha20/chacha20.go delete mode 100644 vendor/blitter.com/go/chacha20/internal/api/api.go delete mode 100644 vendor/blitter.com/go/chacha20/internal/hardware/impl.go delete mode 100644 vendor/blitter.com/go/chacha20/internal/hardware/impl_amd64.go delete mode 100644 vendor/blitter.com/go/chacha20/internal/hardware/impl_amd64.s delete mode 100644 vendor/blitter.com/go/chacha20/internal/ref/impl.go delete mode 100644 vendor/blitter.com/go/cryptmt/README.md delete mode 100644 vendor/blitter.com/go/cryptmt/cryptmt.go delete mode 100644 vendor/blitter.com/go/goutmp/LICENSE.mit delete mode 100644 vendor/blitter.com/go/goutmp/README.md delete mode 100644 vendor/blitter.com/go/goutmp/goutmp_bsd.go delete mode 100644 vendor/blitter.com/go/goutmp/goutmp_linux.go delete mode 100644 vendor/blitter.com/go/groestl/README.md delete mode 100644 vendor/blitter.com/go/groestl/groestl.go delete mode 100644 vendor/blitter.com/go/groestl/round.go delete mode 100644 vendor/blitter.com/go/groestl/sbox.go delete mode 100644 vendor/blitter.com/go/groestl/util.go delete mode 100644 vendor/blitter.com/go/herradurakex/LICENSE.gpl delete mode 100644 vendor/blitter.com/go/herradurakex/LICENSE.mit delete mode 100644 vendor/blitter.com/go/herradurakex/Makefile delete mode 100644 vendor/blitter.com/go/herradurakex/README.md delete mode 100644 vendor/blitter.com/go/herradurakex/herradurakex.go delete mode 100644 vendor/blitter.com/go/hopscotch/README.md delete mode 100644 vendor/blitter.com/go/hopscotch/hopscotch.go delete mode 100644 vendor/blitter.com/go/kyber/.gitignore delete mode 100644 vendor/blitter.com/go/kyber/LICENSE delete mode 100644 vendor/blitter.com/go/kyber/README.md delete mode 100644 vendor/blitter.com/go/kyber/cbd.go delete mode 100644 vendor/blitter.com/go/kyber/doc.go delete mode 100644 vendor/blitter.com/go/kyber/hwaccel.go delete mode 100644 vendor/blitter.com/go/kyber/hwaccel_amd64.go delete mode 100644 vendor/blitter.com/go/kyber/hwaccel_amd64.s delete mode 100644 vendor/blitter.com/go/kyber/hwaccel_ref.go delete mode 100644 vendor/blitter.com/go/kyber/indcpa.go delete mode 100644 vendor/blitter.com/go/kyber/kem.go delete mode 100644 vendor/blitter.com/go/kyber/kex.go delete mode 100644 vendor/blitter.com/go/kyber/ntt.go delete mode 100644 vendor/blitter.com/go/kyber/params.go delete mode 100644 vendor/blitter.com/go/kyber/poly.go delete mode 100644 vendor/blitter.com/go/kyber/polyvec.go delete mode 100644 vendor/blitter.com/go/kyber/precomp.go delete mode 100644 vendor/blitter.com/go/kyber/reduce.go delete mode 100644 vendor/blitter.com/go/mtwist/mtwist.go delete mode 100644 vendor/blitter.com/go/newhope/LICENSE delete mode 100644 vendor/blitter.com/go/newhope/batcher.go delete mode 100644 vendor/blitter.com/go/newhope/error_correction.go delete mode 100644 vendor/blitter.com/go/newhope/newhope.go delete mode 100644 vendor/blitter.com/go/newhope/newhope_simple.go delete mode 100644 vendor/blitter.com/go/newhope/ntt.go delete mode 100644 vendor/blitter.com/go/newhope/params.go delete mode 100644 vendor/blitter.com/go/newhope/poly.go delete mode 100644 vendor/blitter.com/go/newhope/poly_simple.go delete mode 100644 vendor/blitter.com/go/newhope/precomp.go delete mode 100644 vendor/blitter.com/go/newhope/reduce.go delete mode 100644 vendor/github.com/aead/chacha20/LICENSE delete mode 100644 vendor/github.com/aead/chacha20/chacha/chacha.go delete mode 100644 vendor/github.com/aead/chacha20/chacha/chachaAVX2_amd64.s delete mode 100644 vendor/github.com/aead/chacha20/chacha/chacha_386.go delete mode 100644 vendor/github.com/aead/chacha20/chacha/chacha_386.s delete mode 100644 vendor/github.com/aead/chacha20/chacha/chacha_amd64.go delete mode 100644 vendor/github.com/aead/chacha20/chacha/chacha_amd64.s delete mode 100644 vendor/github.com/aead/chacha20/chacha/chacha_generic.go delete mode 100644 vendor/github.com/aead/chacha20/chacha/chacha_ref.go delete mode 100644 vendor/github.com/aead/chacha20/chacha/const.s delete mode 100644 vendor/github.com/aead/chacha20/chacha/macro.s delete mode 100644 vendor/github.com/creack/pty/.gitignore delete mode 100644 vendor/github.com/creack/pty/Dockerfile.golang delete mode 100644 vendor/github.com/creack/pty/Dockerfile.riscv delete mode 100644 vendor/github.com/creack/pty/LICENSE delete mode 100644 vendor/github.com/creack/pty/README.md delete mode 100644 vendor/github.com/creack/pty/asm_solaris_amd64.s delete mode 100644 vendor/github.com/creack/pty/doc.go delete mode 100644 vendor/github.com/creack/pty/ioctl.go delete mode 100644 vendor/github.com/creack/pty/ioctl_bsd.go delete mode 100644 vendor/github.com/creack/pty/ioctl_solaris.go delete mode 100644 vendor/github.com/creack/pty/ioctl_unsupported.go delete mode 100644 vendor/github.com/creack/pty/mktypes.bash delete mode 100644 vendor/github.com/creack/pty/pty_darwin.go delete mode 100644 vendor/github.com/creack/pty/pty_dragonfly.go delete mode 100644 vendor/github.com/creack/pty/pty_freebsd.go delete mode 100644 vendor/github.com/creack/pty/pty_linux.go delete mode 100644 vendor/github.com/creack/pty/pty_netbsd.go delete mode 100644 vendor/github.com/creack/pty/pty_openbsd.go delete mode 100644 vendor/github.com/creack/pty/pty_solaris.go delete mode 100644 vendor/github.com/creack/pty/pty_unsupported.go delete mode 100644 vendor/github.com/creack/pty/run.go delete mode 100644 vendor/github.com/creack/pty/start.go delete mode 100644 vendor/github.com/creack/pty/start_windows.go delete mode 100644 vendor/github.com/creack/pty/test_crosscompile.sh delete mode 100644 vendor/github.com/creack/pty/winsize.go delete mode 100644 vendor/github.com/creack/pty/winsize_unix.go delete mode 100644 vendor/github.com/creack/pty/winsize_unsupported.go delete mode 100644 vendor/github.com/creack/pty/ztypes_386.go delete mode 100644 vendor/github.com/creack/pty/ztypes_amd64.go delete mode 100644 vendor/github.com/creack/pty/ztypes_arm.go delete mode 100644 vendor/github.com/creack/pty/ztypes_arm64.go delete mode 100644 vendor/github.com/creack/pty/ztypes_dragonfly_amd64.go delete mode 100644 vendor/github.com/creack/pty/ztypes_freebsd_386.go delete mode 100644 vendor/github.com/creack/pty/ztypes_freebsd_amd64.go delete mode 100644 vendor/github.com/creack/pty/ztypes_freebsd_arm.go delete mode 100644 vendor/github.com/creack/pty/ztypes_freebsd_arm64.go delete mode 100644 vendor/github.com/creack/pty/ztypes_freebsd_ppc64.go delete mode 100644 vendor/github.com/creack/pty/ztypes_loong64.go delete mode 100644 vendor/github.com/creack/pty/ztypes_mipsx.go delete mode 100644 vendor/github.com/creack/pty/ztypes_netbsd_32bit_int.go delete mode 100644 vendor/github.com/creack/pty/ztypes_openbsd_32bit_int.go delete mode 100644 vendor/github.com/creack/pty/ztypes_ppc64.go delete mode 100644 vendor/github.com/creack/pty/ztypes_ppc64le.go delete mode 100644 vendor/github.com/creack/pty/ztypes_riscvx.go delete mode 100644 vendor/github.com/creack/pty/ztypes_s390x.go delete mode 100644 vendor/github.com/jameskeane/bcrypt/.gitignore delete mode 100644 vendor/github.com/jameskeane/bcrypt/LICENSE delete mode 100644 vendor/github.com/jameskeane/bcrypt/README delete mode 100644 vendor/github.com/jameskeane/bcrypt/bcrypt.go delete mode 100644 vendor/github.com/jameskeane/bcrypt/cipher.go delete mode 100644 vendor/github.com/klauspost/cpuid/v2/.gitignore delete mode 100644 vendor/github.com/klauspost/cpuid/v2/.goreleaser.yml delete mode 100644 vendor/github.com/klauspost/cpuid/v2/CONTRIBUTING.txt delete mode 100644 vendor/github.com/klauspost/cpuid/v2/LICENSE delete mode 100644 vendor/github.com/klauspost/cpuid/v2/README.md delete mode 100644 vendor/github.com/klauspost/cpuid/v2/cpuid.go delete mode 100644 vendor/github.com/klauspost/cpuid/v2/cpuid_386.s delete mode 100644 vendor/github.com/klauspost/cpuid/v2/cpuid_amd64.s delete mode 100644 vendor/github.com/klauspost/cpuid/v2/cpuid_arm64.s delete mode 100644 vendor/github.com/klauspost/cpuid/v2/detect_arm64.go delete mode 100644 vendor/github.com/klauspost/cpuid/v2/detect_ref.go delete mode 100644 vendor/github.com/klauspost/cpuid/v2/detect_x86.go delete mode 100644 vendor/github.com/klauspost/cpuid/v2/featureid_string.go delete mode 100644 vendor/github.com/klauspost/cpuid/v2/os_darwin_arm64.go delete mode 100644 vendor/github.com/klauspost/cpuid/v2/os_linux_arm64.go delete mode 100644 vendor/github.com/klauspost/cpuid/v2/os_other_arm64.go delete mode 100644 vendor/github.com/klauspost/cpuid/v2/os_safe_linux_arm64.go delete mode 100644 vendor/github.com/klauspost/cpuid/v2/os_unsafe_linux_arm64.go delete mode 100644 vendor/github.com/klauspost/cpuid/v2/test-architectures.sh delete mode 100644 vendor/github.com/klauspost/reedsolomon/.gitignore delete mode 100644 vendor/github.com/klauspost/reedsolomon/LICENSE delete mode 100644 vendor/github.com/klauspost/reedsolomon/README.md delete mode 100644 vendor/github.com/klauspost/reedsolomon/galois.go delete mode 100644 vendor/github.com/klauspost/reedsolomon/galoisAvx512_amd64.go delete mode 100644 vendor/github.com/klauspost/reedsolomon/galoisAvx512_amd64.s delete mode 100644 vendor/github.com/klauspost/reedsolomon/galois_amd64.go delete mode 100644 vendor/github.com/klauspost/reedsolomon/galois_amd64.s delete mode 100644 vendor/github.com/klauspost/reedsolomon/galois_arm64.go delete mode 100644 vendor/github.com/klauspost/reedsolomon/galois_arm64.s delete mode 100644 vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.go delete mode 100644 vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.s delete mode 100644 vendor/github.com/klauspost/reedsolomon/galois_gen_none.go delete mode 100644 vendor/github.com/klauspost/reedsolomon/galois_gen_switch_amd64.go delete mode 100644 vendor/github.com/klauspost/reedsolomon/galois_noasm.go delete mode 100644 vendor/github.com/klauspost/reedsolomon/galois_notamd64.go delete mode 100644 vendor/github.com/klauspost/reedsolomon/galois_ppc64le.go delete mode 100644 vendor/github.com/klauspost/reedsolomon/galois_ppc64le.s delete mode 100644 vendor/github.com/klauspost/reedsolomon/inversion_tree.go delete mode 100644 vendor/github.com/klauspost/reedsolomon/leopard.go delete mode 100644 vendor/github.com/klauspost/reedsolomon/matrix.go delete mode 100644 vendor/github.com/klauspost/reedsolomon/options.go delete mode 100644 vendor/github.com/klauspost/reedsolomon/reedsolomon.go delete mode 100644 vendor/github.com/klauspost/reedsolomon/streaming.go delete mode 100644 vendor/github.com/kuking/go-frodokem/.gitignore delete mode 100644 vendor/github.com/kuking/go-frodokem/LICENSE delete mode 100644 vendor/github.com/kuking/go-frodokem/Makefile delete mode 100644 vendor/github.com/kuking/go-frodokem/README.md delete mode 100644 vendor/github.com/kuking/go-frodokem/impl.go delete mode 100644 vendor/github.com/kuking/go-frodokem/types.go delete mode 100644 vendor/github.com/mattn/go-isatty/LICENSE delete mode 100644 vendor/github.com/mattn/go-isatty/README.md delete mode 100644 vendor/github.com/mattn/go-isatty/doc.go delete mode 100644 vendor/github.com/mattn/go-isatty/go.test.sh delete mode 100644 vendor/github.com/mattn/go-isatty/isatty_bsd.go delete mode 100644 vendor/github.com/mattn/go-isatty/isatty_others.go delete mode 100644 vendor/github.com/mattn/go-isatty/isatty_plan9.go delete mode 100644 vendor/github.com/mattn/go-isatty/isatty_solaris.go delete mode 100644 vendor/github.com/mattn/go-isatty/isatty_tcgets.go delete mode 100644 vendor/github.com/mattn/go-isatty/isatty_windows.go delete mode 100644 vendor/github.com/pkg/errors/.gitignore delete mode 100644 vendor/github.com/pkg/errors/.travis.yml delete mode 100644 vendor/github.com/pkg/errors/LICENSE delete mode 100644 vendor/github.com/pkg/errors/Makefile delete mode 100644 vendor/github.com/pkg/errors/README.md delete mode 100644 vendor/github.com/pkg/errors/appveyor.yml delete mode 100644 vendor/github.com/pkg/errors/errors.go delete mode 100644 vendor/github.com/pkg/errors/go113.go delete mode 100644 vendor/github.com/pkg/errors/stack.go delete mode 100644 vendor/github.com/templexxx/cpufeat/.gitignore delete mode 100644 vendor/github.com/templexxx/cpufeat/LICENSE delete mode 100644 vendor/github.com/templexxx/cpufeat/README.md delete mode 100644 vendor/github.com/templexxx/cpufeat/cpu.go delete mode 100644 vendor/github.com/templexxx/cpufeat/cpu_arm.go delete mode 100644 vendor/github.com/templexxx/cpufeat/cpu_arm64.go delete mode 100644 vendor/github.com/templexxx/cpufeat/cpu_mips.go delete mode 100644 vendor/github.com/templexxx/cpufeat/cpu_mips64.go delete mode 100644 vendor/github.com/templexxx/cpufeat/cpu_mips64le.go delete mode 100644 vendor/github.com/templexxx/cpufeat/cpu_mipsle.go delete mode 100644 vendor/github.com/templexxx/cpufeat/cpu_ppc64.go delete mode 100644 vendor/github.com/templexxx/cpufeat/cpu_ppc64le.go delete mode 100644 vendor/github.com/templexxx/cpufeat/cpu_s390x.go delete mode 100644 vendor/github.com/templexxx/cpufeat/cpu_x86.go delete mode 100644 vendor/github.com/templexxx/cpufeat/cpu_x86.s delete mode 100644 vendor/github.com/templexxx/xor/.gitattributes delete mode 100644 vendor/github.com/templexxx/xor/.gitignore delete mode 100644 vendor/github.com/templexxx/xor/LICENSE delete mode 100644 vendor/github.com/templexxx/xor/README.md delete mode 100644 vendor/github.com/templexxx/xor/avx2_amd64.s delete mode 100644 vendor/github.com/templexxx/xor/nosimd.go delete mode 100644 vendor/github.com/templexxx/xor/sse2_amd64.s delete mode 100644 vendor/github.com/templexxx/xor/xor.go delete mode 100644 vendor/github.com/templexxx/xor/xor_amd64.go delete mode 100644 vendor/github.com/templexxx/xor/xor_other.go delete mode 100644 vendor/github.com/tjfoc/gmsm/LICENSE delete mode 100644 vendor/github.com/tjfoc/gmsm/sm4/sm4.go delete mode 100644 vendor/github.com/tjfoc/gmsm/sm4/sm4_gcm.go delete mode 100644 vendor/github.com/tjfoc/gmsm/sm4/utils.go delete mode 100644 vendor/github.com/xtaci/kcp-go/.gitignore delete mode 100644 vendor/github.com/xtaci/kcp-go/.travis.yml delete mode 100644 vendor/github.com/xtaci/kcp-go/LICENSE delete mode 100644 vendor/github.com/xtaci/kcp-go/README.md delete mode 100644 vendor/github.com/xtaci/kcp-go/batchconn.go delete mode 100644 vendor/github.com/xtaci/kcp-go/crypt.go delete mode 100644 vendor/github.com/xtaci/kcp-go/donate.png delete mode 100644 vendor/github.com/xtaci/kcp-go/entropy.go delete mode 100644 vendor/github.com/xtaci/kcp-go/fec.go delete mode 100644 vendor/github.com/xtaci/kcp-go/flame.png delete mode 100644 vendor/github.com/xtaci/kcp-go/frame.png delete mode 100644 vendor/github.com/xtaci/kcp-go/kcp-go.png delete mode 100644 vendor/github.com/xtaci/kcp-go/kcp.go delete mode 100644 vendor/github.com/xtaci/kcp-go/readloop.go delete mode 100644 vendor/github.com/xtaci/kcp-go/readloop_generic.go delete mode 100644 vendor/github.com/xtaci/kcp-go/readloop_linux.go delete mode 100644 vendor/github.com/xtaci/kcp-go/sess.go delete mode 100644 vendor/github.com/xtaci/kcp-go/snmp.go delete mode 100644 vendor/github.com/xtaci/kcp-go/tx.go delete mode 100644 vendor/github.com/xtaci/kcp-go/tx_generic.go delete mode 100644 vendor/github.com/xtaci/kcp-go/tx_linux.go delete mode 100644 vendor/github.com/xtaci/kcp-go/wechat_donate.jpg delete mode 100644 vendor/golang.org/x/crypto/LICENSE delete mode 100644 vendor/golang.org/x/crypto/PATENTS delete mode 100644 vendor/golang.org/x/crypto/argon2/argon2.go delete mode 100644 vendor/golang.org/x/crypto/argon2/blake2b.go delete mode 100644 vendor/golang.org/x/crypto/argon2/blamka_amd64.go delete mode 100644 vendor/golang.org/x/crypto/argon2/blamka_amd64.s delete mode 100644 vendor/golang.org/x/crypto/argon2/blamka_generic.go delete mode 100644 vendor/golang.org/x/crypto/argon2/blamka_ref.go delete mode 100644 vendor/golang.org/x/crypto/bcrypt/base64.go delete mode 100644 vendor/golang.org/x/crypto/bcrypt/bcrypt.go delete mode 100644 vendor/golang.org/x/crypto/blake2b/blake2b.go delete mode 100644 vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.go delete mode 100644 vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.s delete mode 100644 vendor/golang.org/x/crypto/blake2b/blake2b_amd64.go delete mode 100644 vendor/golang.org/x/crypto/blake2b/blake2b_amd64.s delete mode 100644 vendor/golang.org/x/crypto/blake2b/blake2b_generic.go delete mode 100644 vendor/golang.org/x/crypto/blake2b/blake2b_ref.go delete mode 100644 vendor/golang.org/x/crypto/blake2b/blake2x.go delete mode 100644 vendor/golang.org/x/crypto/blake2b/register.go delete mode 100644 vendor/golang.org/x/crypto/blowfish/block.go delete mode 100644 vendor/golang.org/x/crypto/blowfish/cipher.go delete mode 100644 vendor/golang.org/x/crypto/blowfish/const.go delete mode 100644 vendor/golang.org/x/crypto/cast5/cast5.go delete mode 100644 vendor/golang.org/x/crypto/internal/alias/alias.go delete mode 100644 vendor/golang.org/x/crypto/internal/alias/alias_purego.go delete mode 100644 vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go delete mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/hsalsa20.go delete mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa208.go delete mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.go delete mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.s delete mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa20_noasm.go delete mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa20_ref.go delete mode 100644 vendor/golang.org/x/crypto/salsa20/salsa20.go delete mode 100644 vendor/golang.org/x/crypto/scrypt/scrypt.go delete mode 100644 vendor/golang.org/x/crypto/sha3/doc.go delete mode 100644 vendor/golang.org/x/crypto/sha3/hashes.go delete mode 100644 vendor/golang.org/x/crypto/sha3/hashes_generic.go delete mode 100644 vendor/golang.org/x/crypto/sha3/keccakf.go delete mode 100644 vendor/golang.org/x/crypto/sha3/keccakf_amd64.go delete mode 100644 vendor/golang.org/x/crypto/sha3/keccakf_amd64.s delete mode 100644 vendor/golang.org/x/crypto/sha3/register.go delete mode 100644 vendor/golang.org/x/crypto/sha3/sha3.go delete mode 100644 vendor/golang.org/x/crypto/sha3/sha3_s390x.go delete mode 100644 vendor/golang.org/x/crypto/sha3/sha3_s390x.s delete mode 100644 vendor/golang.org/x/crypto/sha3/shake.go delete mode 100644 vendor/golang.org/x/crypto/sha3/shake_generic.go delete mode 100644 vendor/golang.org/x/crypto/sha3/xor.go delete mode 100644 vendor/golang.org/x/crypto/sha3/xor_generic.go delete mode 100644 vendor/golang.org/x/crypto/sha3/xor_unaligned.go delete mode 100644 vendor/golang.org/x/crypto/tea/cipher.go delete mode 100644 vendor/golang.org/x/crypto/twofish/twofish.go delete mode 100644 vendor/golang.org/x/crypto/xtea/block.go delete mode 100644 vendor/golang.org/x/crypto/xtea/cipher.go delete mode 100644 vendor/golang.org/x/net/AUTHORS delete mode 100644 vendor/golang.org/x/net/CONTRIBUTORS delete mode 100644 vendor/golang.org/x/net/LICENSE delete mode 100644 vendor/golang.org/x/net/PATENTS delete mode 100644 vendor/golang.org/x/net/bpf/asm.go delete mode 100644 vendor/golang.org/x/net/bpf/constants.go delete mode 100644 vendor/golang.org/x/net/bpf/doc.go delete mode 100644 vendor/golang.org/x/net/bpf/instructions.go delete mode 100644 vendor/golang.org/x/net/bpf/setter.go delete mode 100644 vendor/golang.org/x/net/bpf/vm.go delete mode 100644 vendor/golang.org/x/net/bpf/vm_instructions.go delete mode 100644 vendor/golang.org/x/net/internal/iana/const.go delete mode 100644 vendor/golang.org/x/net/internal/socket/cmsghdr.go delete mode 100644 vendor/golang.org/x/net/internal/socket/cmsghdr_bsd.go delete mode 100644 vendor/golang.org/x/net/internal/socket/cmsghdr_linux_32bit.go delete mode 100644 vendor/golang.org/x/net/internal/socket/cmsghdr_linux_64bit.go delete mode 100644 vendor/golang.org/x/net/internal/socket/cmsghdr_solaris_64bit.go delete mode 100644 vendor/golang.org/x/net/internal/socket/cmsghdr_stub.go delete mode 100644 vendor/golang.org/x/net/internal/socket/cmsghdr_unix.go delete mode 100644 vendor/golang.org/x/net/internal/socket/cmsghdr_zos_s390x.go delete mode 100644 vendor/golang.org/x/net/internal/socket/complete_dontwait.go delete mode 100644 vendor/golang.org/x/net/internal/socket/complete_nodontwait.go delete mode 100644 vendor/golang.org/x/net/internal/socket/empty.s delete mode 100644 vendor/golang.org/x/net/internal/socket/error_unix.go delete mode 100644 vendor/golang.org/x/net/internal/socket/error_windows.go delete mode 100644 vendor/golang.org/x/net/internal/socket/iovec_32bit.go delete mode 100644 vendor/golang.org/x/net/internal/socket/iovec_64bit.go delete mode 100644 vendor/golang.org/x/net/internal/socket/iovec_solaris_64bit.go delete mode 100644 vendor/golang.org/x/net/internal/socket/iovec_stub.go delete mode 100644 vendor/golang.org/x/net/internal/socket/mmsghdr_stub.go delete mode 100644 vendor/golang.org/x/net/internal/socket/mmsghdr_unix.go delete mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_bsd.go delete mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_bsdvar.go delete mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_linux.go delete mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_linux_32bit.go delete mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_linux_64bit.go delete mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_openbsd.go delete mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_solaris_64bit.go delete mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_stub.go delete mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_zos_s390x.go delete mode 100644 vendor/golang.org/x/net/internal/socket/norace.go delete mode 100644 vendor/golang.org/x/net/internal/socket/race.go delete mode 100644 vendor/golang.org/x/net/internal/socket/rawconn.go delete mode 100644 vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go delete mode 100644 vendor/golang.org/x/net/internal/socket/rawconn_msg.go delete mode 100644 vendor/golang.org/x/net/internal/socket/rawconn_nommsg.go delete mode 100644 vendor/golang.org/x/net/internal/socket/rawconn_nomsg.go delete mode 100644 vendor/golang.org/x/net/internal/socket/socket.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_bsd.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_const_unix.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_linkname.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_386.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_386.s delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_amd64.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_arm.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_arm64.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_mips.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_mips64.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_mips64le.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_mipsle.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_ppc.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_ppc64.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_ppc64le.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_riscv64.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_s390x.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_s390x.s delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_netbsd.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_posix.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_solaris.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_solaris_amd64.s delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_stub.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_unix.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_windows.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_zos_s390x.go delete mode 100644 vendor/golang.org/x/net/internal/socket/sys_zos_s390x.s delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_aix_ppc64.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_darwin_386.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_darwin_amd64.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_darwin_arm.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_darwin_arm64.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_dragonfly_amd64.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_freebsd_386.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_freebsd_amd64.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm64.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_386.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_ppc.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_riscv64.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm64.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_openbsd_386.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_openbsd_amd64.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm64.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_openbsd_mips64.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_solaris_amd64.go delete mode 100644 vendor/golang.org/x/net/internal/socket/zsys_zos_s390x.go delete mode 100644 vendor/golang.org/x/net/ipv4/batch.go delete mode 100644 vendor/golang.org/x/net/ipv4/control.go delete mode 100644 vendor/golang.org/x/net/ipv4/control_bsd.go delete mode 100644 vendor/golang.org/x/net/ipv4/control_pktinfo.go delete mode 100644 vendor/golang.org/x/net/ipv4/control_stub.go delete mode 100644 vendor/golang.org/x/net/ipv4/control_unix.go delete mode 100644 vendor/golang.org/x/net/ipv4/control_windows.go delete mode 100644 vendor/golang.org/x/net/ipv4/control_zos.go delete mode 100644 vendor/golang.org/x/net/ipv4/dgramopt.go delete mode 100644 vendor/golang.org/x/net/ipv4/doc.go delete mode 100644 vendor/golang.org/x/net/ipv4/endpoint.go delete mode 100644 vendor/golang.org/x/net/ipv4/genericopt.go delete mode 100644 vendor/golang.org/x/net/ipv4/header.go delete mode 100644 vendor/golang.org/x/net/ipv4/helper.go delete mode 100644 vendor/golang.org/x/net/ipv4/iana.go delete mode 100644 vendor/golang.org/x/net/ipv4/icmp.go delete mode 100644 vendor/golang.org/x/net/ipv4/icmp_linux.go delete mode 100644 vendor/golang.org/x/net/ipv4/icmp_stub.go delete mode 100644 vendor/golang.org/x/net/ipv4/packet.go delete mode 100644 vendor/golang.org/x/net/ipv4/payload.go delete mode 100644 vendor/golang.org/x/net/ipv4/payload_cmsg.go delete mode 100644 vendor/golang.org/x/net/ipv4/payload_nocmsg.go delete mode 100644 vendor/golang.org/x/net/ipv4/sockopt.go delete mode 100644 vendor/golang.org/x/net/ipv4/sockopt_posix.go delete mode 100644 vendor/golang.org/x/net/ipv4/sockopt_stub.go delete mode 100644 vendor/golang.org/x/net/ipv4/sys_aix.go delete mode 100644 vendor/golang.org/x/net/ipv4/sys_asmreq.go delete mode 100644 vendor/golang.org/x/net/ipv4/sys_asmreq_stub.go delete mode 100644 vendor/golang.org/x/net/ipv4/sys_asmreqn.go delete mode 100644 vendor/golang.org/x/net/ipv4/sys_asmreqn_stub.go delete mode 100644 vendor/golang.org/x/net/ipv4/sys_bpf.go delete mode 100644 vendor/golang.org/x/net/ipv4/sys_bpf_stub.go delete mode 100644 vendor/golang.org/x/net/ipv4/sys_bsd.go delete mode 100644 vendor/golang.org/x/net/ipv4/sys_darwin.go delete mode 100644 vendor/golang.org/x/net/ipv4/sys_dragonfly.go delete mode 100644 vendor/golang.org/x/net/ipv4/sys_freebsd.go delete mode 100644 vendor/golang.org/x/net/ipv4/sys_linux.go delete mode 100644 vendor/golang.org/x/net/ipv4/sys_solaris.go delete mode 100644 vendor/golang.org/x/net/ipv4/sys_ssmreq.go delete mode 100644 vendor/golang.org/x/net/ipv4/sys_ssmreq_stub.go delete mode 100644 vendor/golang.org/x/net/ipv4/sys_stub.go delete mode 100644 vendor/golang.org/x/net/ipv4/sys_windows.go delete mode 100644 vendor/golang.org/x/net/ipv4/sys_zos.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_aix_ppc64.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_darwin.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_dragonfly.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_freebsd_386.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_freebsd_amd64.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_freebsd_arm.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_freebsd_arm64.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_386.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_arm.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_mips.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_riscv64.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_netbsd.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_openbsd.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_solaris.go delete mode 100644 vendor/golang.org/x/net/ipv4/zsys_zos_s390x.go delete mode 100644 vendor/golang.org/x/net/ipv6/batch.go delete mode 100644 vendor/golang.org/x/net/ipv6/control.go delete mode 100644 vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go delete mode 100644 vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go delete mode 100644 vendor/golang.org/x/net/ipv6/control_stub.go delete mode 100644 vendor/golang.org/x/net/ipv6/control_unix.go delete mode 100644 vendor/golang.org/x/net/ipv6/control_windows.go delete mode 100644 vendor/golang.org/x/net/ipv6/dgramopt.go delete mode 100644 vendor/golang.org/x/net/ipv6/doc.go delete mode 100644 vendor/golang.org/x/net/ipv6/endpoint.go delete mode 100644 vendor/golang.org/x/net/ipv6/genericopt.go delete mode 100644 vendor/golang.org/x/net/ipv6/header.go delete mode 100644 vendor/golang.org/x/net/ipv6/helper.go delete mode 100644 vendor/golang.org/x/net/ipv6/iana.go delete mode 100644 vendor/golang.org/x/net/ipv6/icmp.go delete mode 100644 vendor/golang.org/x/net/ipv6/icmp_bsd.go delete mode 100644 vendor/golang.org/x/net/ipv6/icmp_linux.go delete mode 100644 vendor/golang.org/x/net/ipv6/icmp_solaris.go delete mode 100644 vendor/golang.org/x/net/ipv6/icmp_stub.go delete mode 100644 vendor/golang.org/x/net/ipv6/icmp_windows.go delete mode 100644 vendor/golang.org/x/net/ipv6/icmp_zos.go delete mode 100644 vendor/golang.org/x/net/ipv6/payload.go delete mode 100644 vendor/golang.org/x/net/ipv6/payload_cmsg.go delete mode 100644 vendor/golang.org/x/net/ipv6/payload_nocmsg.go delete mode 100644 vendor/golang.org/x/net/ipv6/sockopt.go delete mode 100644 vendor/golang.org/x/net/ipv6/sockopt_posix.go delete mode 100644 vendor/golang.org/x/net/ipv6/sockopt_stub.go delete mode 100644 vendor/golang.org/x/net/ipv6/sys_aix.go delete mode 100644 vendor/golang.org/x/net/ipv6/sys_asmreq.go delete mode 100644 vendor/golang.org/x/net/ipv6/sys_asmreq_stub.go delete mode 100644 vendor/golang.org/x/net/ipv6/sys_bpf.go delete mode 100644 vendor/golang.org/x/net/ipv6/sys_bpf_stub.go delete mode 100644 vendor/golang.org/x/net/ipv6/sys_bsd.go delete mode 100644 vendor/golang.org/x/net/ipv6/sys_darwin.go delete mode 100644 vendor/golang.org/x/net/ipv6/sys_freebsd.go delete mode 100644 vendor/golang.org/x/net/ipv6/sys_linux.go delete mode 100644 vendor/golang.org/x/net/ipv6/sys_solaris.go delete mode 100644 vendor/golang.org/x/net/ipv6/sys_ssmreq.go delete mode 100644 vendor/golang.org/x/net/ipv6/sys_ssmreq_stub.go delete mode 100644 vendor/golang.org/x/net/ipv6/sys_stub.go delete mode 100644 vendor/golang.org/x/net/ipv6/sys_windows.go delete mode 100644 vendor/golang.org/x/net/ipv6/sys_zos.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_aix_ppc64.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_darwin.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_dragonfly.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_freebsd_386.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_freebsd_amd64.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_freebsd_arm.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_freebsd_arm64.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_386.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_arm.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_mips.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_riscv64.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_netbsd.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_openbsd.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_solaris.go delete mode 100644 vendor/golang.org/x/net/ipv6/zsys_zos_s390x.go delete mode 100644 vendor/golang.org/x/sys/LICENSE delete mode 100644 vendor/golang.org/x/sys/PATENTS delete mode 100644 vendor/golang.org/x/sys/cpu/asm_aix_ppc64.s delete mode 100644 vendor/golang.org/x/sys/cpu/byteorder.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_aix.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_arm.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_arm64.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_arm64.s delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_gc_s390x.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_gc_x86.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_gccgo_s390x.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_linux.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_linux_arm.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_linux_mips64x.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_linux_s390x.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_loong64.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_mips64x.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_mipsx.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_netbsd_arm64.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.s delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_other_arm.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_other_arm64.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_other_mips64x.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_other_riscv64.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_ppc64x.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_riscv64.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_s390x.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_s390x.s delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_wasm.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_x86.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_x86.s delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_zos.go delete mode 100644 vendor/golang.org/x/sys/cpu/cpu_zos_s390x.go delete mode 100644 vendor/golang.org/x/sys/cpu/hwcap_linux.go delete mode 100644 vendor/golang.org/x/sys/cpu/syscall_aix_gccgo.go delete mode 100644 vendor/golang.org/x/sys/cpu/syscall_aix_ppc64_gc.go delete mode 100644 vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go delete mode 100644 vendor/golang.org/x/sys/unix/.gitignore delete mode 100644 vendor/golang.org/x/sys/unix/README.md delete mode 100644 vendor/golang.org/x/sys/unix/affinity_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/aliases.go delete mode 100644 vendor/golang.org/x/sys/unix/asm_aix_ppc64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_bsd_386.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_bsd_amd64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_bsd_arm.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_bsd_arm64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_bsd_riscv64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_386.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_amd64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_arm.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_arm64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_loong64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_mips64x.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_mipsx.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_riscv64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_s390x.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_solaris_amd64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_zos_s390x.s delete mode 100644 vendor/golang.org/x/sys/unix/bluetooth_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/cap_freebsd.go delete mode 100644 vendor/golang.org/x/sys/unix/constants.go delete mode 100644 vendor/golang.org/x/sys/unix/dev_aix_ppc.go delete mode 100644 vendor/golang.org/x/sys/unix/dev_aix_ppc64.go delete mode 100644 vendor/golang.org/x/sys/unix/dev_darwin.go delete mode 100644 vendor/golang.org/x/sys/unix/dev_dragonfly.go delete mode 100644 vendor/golang.org/x/sys/unix/dev_freebsd.go delete mode 100644 vendor/golang.org/x/sys/unix/dev_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/dev_netbsd.go delete mode 100644 vendor/golang.org/x/sys/unix/dev_openbsd.go delete mode 100644 vendor/golang.org/x/sys/unix/dev_zos.go delete mode 100644 vendor/golang.org/x/sys/unix/dirent.go delete mode 100644 vendor/golang.org/x/sys/unix/endian_big.go delete mode 100644 vendor/golang.org/x/sys/unix/endian_little.go delete mode 100644 vendor/golang.org/x/sys/unix/env_unix.go delete mode 100644 vendor/golang.org/x/sys/unix/epoll_zos.go delete mode 100644 vendor/golang.org/x/sys/unix/fcntl.go delete mode 100644 vendor/golang.org/x/sys/unix/fcntl_darwin.go delete mode 100644 vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go delete mode 100644 vendor/golang.org/x/sys/unix/fdset.go delete mode 100644 vendor/golang.org/x/sys/unix/fstatfs_zos.go delete mode 100644 vendor/golang.org/x/sys/unix/gccgo.go delete mode 100644 vendor/golang.org/x/sys/unix/gccgo_c.c delete mode 100644 vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/ifreq_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/ioctl.go delete mode 100644 vendor/golang.org/x/sys/unix/ioctl_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/ioctl_zos.go delete mode 100644 vendor/golang.org/x/sys/unix/mkall.sh delete mode 100644 vendor/golang.org/x/sys/unix/mkerrors.sh delete mode 100644 vendor/golang.org/x/sys/unix/pagesize_unix.go delete mode 100644 vendor/golang.org/x/sys/unix/pledge_openbsd.go delete mode 100644 vendor/golang.org/x/sys/unix/ptrace_darwin.go delete mode 100644 vendor/golang.org/x/sys/unix/ptrace_ios.go delete mode 100644 vendor/golang.org/x/sys/unix/race.go delete mode 100644 vendor/golang.org/x/sys/unix/race0.go delete mode 100644 vendor/golang.org/x/sys/unix/readdirent_getdents.go delete mode 100644 vendor/golang.org/x/sys/unix/readdirent_getdirentries.go delete mode 100644 vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go delete mode 100644 vendor/golang.org/x/sys/unix/sockcmsg_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/sockcmsg_unix.go delete mode 100644 vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_aix.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_aix_ppc.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_bsd.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_dragonfly.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_illumos.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_386.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_alarm.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gc.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_loong64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_ppc.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_s390x.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_libc.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_solaris.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_unix.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_unix_gc.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_zos_s390x.go delete mode 100644 vendor/golang.org/x/sys/unix/sysvshm_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/sysvshm_unix.go delete mode 100644 vendor/golang.org/x/sys/unix/sysvshm_unix_other.go delete mode 100644 vendor/golang.org/x/sys/unix/timestruct.go delete mode 100644 vendor/golang.org/x/sys/unix/unveil_openbsd.go delete mode 100644 vendor/golang.org/x/sys/unix/xattr_bsd.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_riscv64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mips.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go delete mode 100644 vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/zptrace_x86_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_riscv64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_illumos_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_386.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mips.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go delete mode 100644 vendor/golang.org/x/sys/windows/aliases.go delete mode 100644 vendor/golang.org/x/sys/windows/dll_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/empty.s delete mode 100644 vendor/golang.org/x/sys/windows/env_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/eventlog.go delete mode 100644 vendor/golang.org/x/sys/windows/exec_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/memory_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/mkerrors.bash delete mode 100644 vendor/golang.org/x/sys/windows/mkknownfolderids.bash delete mode 100644 vendor/golang.org/x/sys/windows/mksyscall.go delete mode 100644 vendor/golang.org/x/sys/windows/race.go delete mode 100644 vendor/golang.org/x/sys/windows/race0.go delete mode 100644 vendor/golang.org/x/sys/windows/security_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/service.go delete mode 100644 vendor/golang.org/x/sys/windows/setupapi_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/str.go delete mode 100644 vendor/golang.org/x/sys/windows/syscall.go delete mode 100644 vendor/golang.org/x/sys/windows/syscall_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/types_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/types_windows_386.go delete mode 100644 vendor/golang.org/x/sys/windows/types_windows_amd64.go delete mode 100644 vendor/golang.org/x/sys/windows/types_windows_arm.go delete mode 100644 vendor/golang.org/x/sys/windows/types_windows_arm64.go delete mode 100644 vendor/golang.org/x/sys/windows/zerrors_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/zknownfolderids_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/zsyscall_windows.go delete mode 100644 vendor/gopkg.in/hlandau/easymetric.v1/cexp/cexp.go delete mode 100644 vendor/gopkg.in/hlandau/measurable.v1/README.md delete mode 100644 vendor/gopkg.in/hlandau/measurable.v1/measurable.go delete mode 100644 vendor/gopkg.in/hlandau/passlib.v1/COPYING delete mode 100644 vendor/gopkg.in/hlandau/passlib.v1/abstract/compare.go delete mode 100644 vendor/gopkg.in/hlandau/passlib.v1/abstract/errors.go delete mode 100644 vendor/gopkg.in/hlandau/passlib.v1/abstract/scheme.go delete mode 100644 vendor/gopkg.in/hlandau/passlib.v1/default.go delete mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/argon2/argon2.go delete mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/argon2/raw/argon2.go delete mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/bcrypt/bcrypt.go delete mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/bcryptsha256/bcryptsha256.go delete mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/pbkdf2.go delete mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/base64.go delete mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/parse.go delete mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/pbkdf2.go delete mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/test.py delete mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/scrypt/raw/scrypt.go delete mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/scrypt/scrypt.go delete mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/base64.go delete mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/parse.go delete mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/sha2crypt.go delete mode 100644 vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/sha2crypt.go delete mode 100644 vendor/gopkg.in/hlandau/passlib.v1/passlib.go delete mode 100644 vendor/modules.txt diff --git a/Makefile b/Makefile index 35bca73..9bba711 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION := 0.9.5.3 +VERSION := 0.9.5.4 .PHONY: lint vis clean common client server passwd\ subpkgs install uninstall reinstall scc diff --git a/go.mod b/go.mod index d99b855..0699d6f 100644 --- a/go.mod +++ b/go.mod @@ -1,37 +1,38 @@ module blitter.com/go/xs -go 1.18 +go 1.20 require ( + blitter.com/go/chacha20 v0.0.0-20200130200441-214e4085f54c blitter.com/go/cryptmt v1.0.2 blitter.com/go/goutmp v1.0.6 + blitter.com/go/groestl v0.0.0-20220410000905-c4decbf31d64 blitter.com/go/herradurakex v1.0.0 - blitter.com/go/hopscotch v0.0.0-20220617051533-4b42ccd4e00a + blitter.com/go/hopscotch v0.1.1 blitter.com/go/kyber v0.0.0-20200130200857-6f2021cb88d9 + blitter.com/go/mtwist v1.0.1 blitter.com/go/newhope v0.0.0-20200130200750-192fc08a8aae github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da github.com/creack/pty v1.1.18 github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f + github.com/klauspost/cpuid/v2 v2.2.5 + github.com/klauspost/reedsolomon v1.11.8 github.com/kuking/go-frodokem v1.0.2 - github.com/mattn/go-isatty v0.0.16 + github.com/mattn/go-isatty v0.0.19 + github.com/pkg/errors v0.9.1 + github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 + github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b + github.com/tjfoc/gmsm v1.4.1 github.com/xtaci/kcp-go v5.4.20+incompatible - golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0 - golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 + golang.org/x/crypto v0.13.0 + golang.org/x/net v0.15.0 + golang.org/x/sys v0.12.0 + gopkg.in/hlandau/easymetric.v1 v1.0.0 + gopkg.in/hlandau/measurable.v1 v1.0.1 gopkg.in/hlandau/passlib.v1 v1.0.11 ) require ( - blitter.com/go/chacha20 v0.0.0-20200130200441-214e4085f54c // indirect - blitter.com/go/groestl v0.0.0-20220410000905-c4decbf31d64 // indirect - blitter.com/go/mtwist v1.0.1 // indirect - github.com/klauspost/cpuid/v2 v2.1.1 // indirect - github.com/klauspost/reedsolomon v1.11.0 // indirect - github.com/pkg/errors v0.9.1 // indirect - github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 // indirect - github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b // indirect - github.com/tjfoc/gmsm v1.4.1 // indirect github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37 // indirect - golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 // indirect - gopkg.in/hlandau/easymetric.v1 v1.0.0 // indirect - gopkg.in/hlandau/measurable.v1 v1.0.1 // indirect + golang.org/x/text v0.13.0 // indirect ) diff --git a/go.sum b/go.sum index 69fddf2..a800c7a 100644 --- a/go.sum +++ b/go.sum @@ -8,8 +8,8 @@ blitter.com/go/groestl v0.0.0-20220410000905-c4decbf31d64 h1:SH6cZ4JiOTmWGeVd5hC blitter.com/go/groestl v0.0.0-20220410000905-c4decbf31d64/go.mod h1:YMdIR/gCtFwU/a09jyWAwUu2J9CQejUFwkfD+PyVg+4= blitter.com/go/herradurakex v1.0.0 h1:6XaxY+JLT1HUWPF0gYJnjX3pVjrw4YhYZEzZ1U0wkyc= blitter.com/go/herradurakex v1.0.0/go.mod h1:m3+vYZX+2dDjdo+n/HDnXEYJX9pwmNeQLgAfJM8mtxw= -blitter.com/go/hopscotch v0.0.0-20220617051533-4b42ccd4e00a h1:1fEN7eJMG9TweQuGMAgQlTJ0Wl7lsdDL4Nt5gHZijhY= -blitter.com/go/hopscotch v0.0.0-20220617051533-4b42ccd4e00a/go.mod h1:LtcFd2/R9xcau5SZIYeaHvdqAM7Y5pyvdZYT5J9HAME= +blitter.com/go/hopscotch v0.1.1 h1:hh809THr3I52J5G5QozNhDSd+qGwXWGqLh3FJBGrp+o= +blitter.com/go/hopscotch v0.1.1/go.mod h1:hCz7oE31KjaO9M6+s2DcyVNlAA8saE/AaVYKFs7hl1I= blitter.com/go/kyber v0.0.0-20200130200857-6f2021cb88d9 h1:D45AnrNphtvczBXRp5JQicZRTgaK/Is5bgPDDvRKhTc= blitter.com/go/kyber v0.0.0-20200130200857-6f2021cb88d9/go.mod h1:SK6QfGG72lIfKW1Td0wH7f0wwN5nSIhV3K+wvzGNjrw= blitter.com/go/mtwist v1.0.1 h1:PxmoWexfMpLmc8neHP/PcRc3s17ct7iz4d5W/qJVt04= @@ -47,14 +47,14 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f h1:UWGE8Vi+1Agt0lrvnd7UsmvwqWKRzb9byK9iQmsbY0Y= github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f/go.mod h1:u+9Snq0w+ZdYKi8BBoaxnEwWu0fY4Kvu9ByFpM51t1s= -github.com/klauspost/cpuid/v2 v2.1.1 h1:t0wUqjowdm8ezddV5k0tLWVklVuvLJpoHeb4WBdydm0= -github.com/klauspost/cpuid/v2 v2.1.1/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= -github.com/klauspost/reedsolomon v1.11.0 h1:fc24kMFf4I6dXJwSkVAsw8Za/dMcJrV5ImeDjG3ss1M= -github.com/klauspost/reedsolomon v1.11.0/go.mod h1:FXLZzlJIdfqEnQLdUKWNRuMZg747hZ4oYp2Ml60Lb/k= +github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= +github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/klauspost/reedsolomon v1.11.8 h1:s8RpUW5TK4hjr+djiOpbZJB4ksx+TdYbRH7vHQpwPOY= +github.com/klauspost/reedsolomon v1.11.8/go.mod h1:4bXRN+cVzMdml6ti7qLouuYi32KHJ5MGv0Qd8a47h6A= github.com/kuking/go-frodokem v1.0.2 h1:sxdguENCyr6WnLbJ/cjz0AYCW75H1b+E6zXY2ldZnUU= github.com/kuking/go-frodokem v1.0.2/go.mod h1:83ZX1kHOd72ouCsvbffCqJIj7Ih83MQTAjH2QbqzLZk= -github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -81,8 +81,8 @@ golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0 h1:a5Yg6ylndHHYJqIPrdq0AhvR6KTvDTAvgBtaidhEevY= -golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -93,8 +93,8 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -104,12 +104,14 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190902133755-9109b7679e13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 h1:h+EGohizhe9XlX18rfpa8k8RAc5XyaeamM+0VHRd4lc= -golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/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.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= diff --git a/vendor/blitter.com/go/chacha20/LICENSE b/vendor/blitter.com/go/chacha20/LICENSE deleted file mode 100644 index dba13ed..0000000 --- a/vendor/blitter.com/go/chacha20/LICENSE +++ /dev/null @@ -1,661 +0,0 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. diff --git a/vendor/blitter.com/go/chacha20/README.md b/vendor/blitter.com/go/chacha20/README.md deleted file mode 100644 index 104f4ac..0000000 --- a/vendor/blitter.com/go/chacha20/README.md +++ /dev/null @@ -1,13 +0,0 @@ -### chacha20 - ChaCha20 -#### Yawning Angel (yawning at schwanenlied dot me) - -Yet another Go ChaCha20 implementation. Everything else I found was slow, -didn't support all the variants I need to use, or relied on cgo to go fast. - -Features: - - * 20 round, 256 bit key only. Everything else is pointless and stupid. - * IETF 96 bit nonce variant. - * XChaCha 24 byte nonce variant. - * SSSE3 and AVX2 support on amd64 targets. - * Incremental encrypt/decrypt support, unlike golang.org/x/crypto/salsa20. diff --git a/vendor/blitter.com/go/chacha20/chacha20.go b/vendor/blitter.com/go/chacha20/chacha20.go deleted file mode 100644 index fa90fb1..0000000 --- a/vendor/blitter.com/go/chacha20/chacha20.go +++ /dev/null @@ -1,290 +0,0 @@ -// Copryright (C) 2019 Yawning Angel -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -// Package chacha20 implements the ChaCha20 stream cipher. -package chacha20 // import "blitter.com/go/chacha20" - -import ( - "crypto/cipher" - "encoding/binary" - "errors" - "math" - - "blitter.com/go/chacha20/internal/api" - "blitter.com/go/chacha20/internal/hardware" - "blitter.com/go/chacha20/internal/ref" -) - -const ( - // KeySize is the ChaCha20 key size in bytes. - KeySize = 32 - - // NonceSize is the ChaCha20 nonce size in bytes. - NonceSize = 8 - - // INonceSize is the IETF ChaCha20 nonce size in bytes. - INonceSize = 12 - - // XNonceSize is the XChaCha20 nonce size in bytes. - XNonceSize = 24 - - // HNonceSize is the HChaCha20 nonce size in bytes. - HNonceSize = 16 -) - -var ( - // ErrInvalidKey is the error returned when the key is invalid. - ErrInvalidKey = errors.New("chacha20: key length must be KeySize bytes") - - // ErrInvalidNonce is the error returned when the nonce is invalid. - ErrInvalidNonce = errors.New("chacha20: nonce length must be NonceSize/INonceSize/XNonceSize bytes") - - // ErrInvalidCounter is the error returned when the counter is invalid. - ErrInvalidCounter = errors.New("chacha20: block counter is invalid (out of range)") - - supportedImpls []api.Implementation - activeImpl api.Implementation - - _ cipher.Stream = (*Cipher)(nil) -) - -// Cipher is an instance of ChaCha20/XChaCha20 using a particular key and nonce. -type Cipher struct { - state [api.StateSize]uint32 - buf [api.BlockSize]byte - - off int - ietf bool -} - -// Reset zeros the key data so that it will no longer appear in the process's -// memory. -func (c *Cipher) Reset() { - for i := range c.state { - c.state[i] = 0 - } - for i := range c.buf { - c.buf[i] = 0 - } -} - -// Seek sets the block counter to a given offset. -func (c *Cipher) Seek(blockCounter uint64) error { - if c.ietf { - if blockCounter > math.MaxUint32 { - return ErrInvalidCounter - } - c.state[12] = uint32(blockCounter) - } else { - c.state[12] = uint32(blockCounter) - c.state[13] = uint32(blockCounter >> 32) - } - c.off = api.BlockSize - return nil -} - -// ReKey reinitializes the ChaCha20/XChaCha20 instance with the provided key -// and nonce. -func (c *Cipher) ReKey(key, nonce []byte) error { - c.Reset() - return c.doReKey(key, nonce) -} - -func (c *Cipher) doReKey(key, nonce []byte) error { - if len(key) != KeySize { - return ErrInvalidKey - } - - var subKey []byte - switch len(nonce) { - case NonceSize, INonceSize: - case XNonceSize: - subKey = c.buf[:KeySize] - activeImpl.HChaCha(key, nonce, subKey) - key = subKey - nonce = nonce[16:24] - default: - return ErrInvalidNonce - } - - _ = key[31] // Force bounds check elimination. - - c.state[0] = api.Sigma0 - c.state[1] = api.Sigma1 - c.state[2] = api.Sigma2 - c.state[3] = api.Sigma3 - c.state[4] = binary.LittleEndian.Uint32(key[0:4]) - c.state[5] = binary.LittleEndian.Uint32(key[4:8]) - c.state[6] = binary.LittleEndian.Uint32(key[8:12]) - c.state[7] = binary.LittleEndian.Uint32(key[12:16]) - c.state[8] = binary.LittleEndian.Uint32(key[16:20]) - c.state[9] = binary.LittleEndian.Uint32(key[20:24]) - c.state[10] = binary.LittleEndian.Uint32(key[24:28]) - c.state[11] = binary.LittleEndian.Uint32(key[28:32]) - c.state[12] = 0 - if len(nonce) == INonceSize { - _ = nonce[11] // Force bounds check elimination. - c.state[13] = binary.LittleEndian.Uint32(nonce[0:4]) - c.state[14] = binary.LittleEndian.Uint32(nonce[4:8]) - c.state[15] = binary.LittleEndian.Uint32(nonce[8:12]) - c.ietf = true - } else { - _ = nonce[7] // Force bounds check elimination. - c.state[13] = 0 - c.state[14] = binary.LittleEndian.Uint32(nonce[0:4]) - c.state[15] = binary.LittleEndian.Uint32(nonce[4:8]) - c.ietf = false - } - c.off = api.BlockSize - - if subKey != nil { - for i := range subKey { - subKey[i] = 0 - } - } - - return nil -} - -// New returns a new ChaCha20/XChaCha20 instance. -func New(key, nonce []byte) (*Cipher, error) { - var c Cipher - if err := c.doReKey(key, nonce); err != nil { - return nil, err - } - - return &c, nil -} - -// HChaCha is the HChaCha20 hash function used to make XChaCha. -func HChaCha(key, nonce []byte, dst *[32]byte) { - activeImpl.HChaCha(key, nonce, dst[:]) -} - -// XORKeyStream sets dst to the result of XORing src with the key stream. Dst -// and src may be the same slice but otherwise should not overlap. -func (c *Cipher) XORKeyStream(dst, src []byte) { - if len(dst) < len(src) { - src = src[:len(dst)] - } - - for remaining := len(src); remaining > 0; { - // Process multiple blocks at once. - if c.off == api.BlockSize { - nrBlocks := remaining / api.BlockSize - directBytes := nrBlocks * api.BlockSize - if nrBlocks > 0 { - c.doBlocks(dst, src, nrBlocks) - remaining -= directBytes - if remaining == 0 { - return - } - dst = dst[directBytes:] - src = src[directBytes:] - } - - // If there's a partial block, generate 1 block of keystream into - // the internal buffer. - c.doBlocks(c.buf[:], nil, 1) - c.off = 0 - } - - // Process partial blocks from the buffered keystream. - toXor := api.BlockSize - c.off - if remaining < toXor { - toXor = remaining - } - if toXor > 0 { - // The inliner doesn't want to inline this function, but my - // attempts to force BCE don't seem to work with manual - // inlining. - // - // Taking the extra function call overhead here appears to be - // worth it. - c.xorBufBytes(dst, src, toXor) - - dst = dst[toXor:] - src = src[toXor:] - - remaining -= toXor - } - } -} - -func (c *Cipher) xorBufBytes(dst, src []byte, n int) { - // Force bounds check elimination. - buf := c.buf[c.off:] - _ = buf[n-1] - _ = dst[n-1] - _ = src[n-1] - - for i := 0; i < n; i++ { - dst[i] = buf[i] ^ src[i] - } - c.off += n -} - -// KeyStream sets dst to the raw keystream. -func (c *Cipher) KeyStream(dst []byte) { - for remaining := len(dst); remaining > 0; { - // Process multiple blocks at once. - if c.off == api.BlockSize { - nrBlocks := remaining / api.BlockSize - directBytes := nrBlocks * api.BlockSize - if nrBlocks > 0 { - c.doBlocks(dst, nil, nrBlocks) - remaining -= directBytes - if remaining == 0 { - return - } - dst = dst[directBytes:] - } - - // If there's a partial block, generate 1 block of keystream into - // the internal buffer. - c.doBlocks(c.buf[:], nil, 1) - c.off = 0 - } - - // Process partial blocks from the buffered keystream. - toCopy := api.BlockSize - c.off - if remaining < toCopy { - toCopy = remaining - } - if toCopy > 0 { - copy(dst[:toCopy], c.buf[c.off:c.off+toCopy]) - dst = dst[toCopy:] - remaining -= toCopy - c.off += toCopy - } - } -} - -func (c *Cipher) doBlocks(dst, src []byte, nrBlocks int) { - if c.ietf { - ctr := uint64(c.state[12]) - if ctr+uint64(nrBlocks) > math.MaxUint32 { - panic("chacha20: will exceed key stream per nonce limit") - } - } - - activeImpl.Blocks(&c.state, dst, src, nrBlocks) -} - -func init() { - supportedImpls = hardware.Register(supportedImpls) - supportedImpls = ref.Register(supportedImpls) - activeImpl = supportedImpls[0] -} diff --git a/vendor/blitter.com/go/chacha20/internal/api/api.go b/vendor/blitter.com/go/chacha20/internal/api/api.go deleted file mode 100644 index e347812..0000000 --- a/vendor/blitter.com/go/chacha20/internal/api/api.go +++ /dev/null @@ -1,59 +0,0 @@ -// Copryright (C) 2019 Yawning Angel -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -// Package api provides the ChaCha20 implementation abstract interface. -package api - -const ( - // BlockSize is the size of a ChaCha20 block in bytes. - BlockSize = 64 - - // StateSize is the size of the ChaCha20 state as 32 bit unsigned words. - StateSize = 16 - - // HashSize is the size of the HChaCha output in bytes. - HashSize = 32 - - // HNonceSize is the HChaCha20 nonce size in bytes. - HNonceSize = 16 - - // Sigma0 is the first word of the ChaCha constant. - Sigma0 = uint32(0x61707865) - - // Sigma1 is the second word of the ChaCha constant. - Sigma1 = uint32(0x3320646e) - - // Sigma2 is the third word of the ChaCha constant. - Sigma2 = uint32(0x79622d32) - - // Sigma3 is the fourth word of the ChaCha constant. - Sigma3 = uint32(0x6b206574) -) - -// Implementation is a ChaCha20 implementation -type Implementation interface { - // Name returns the name of the implementation. - Name() string - - // Blocks calculates the ChaCha20 blocks. If src is not nil, dst will - // be set to the XOR of src with the key stream, otherwise dst will be - // set to the key stream. - Blocks(x *[StateSize]uint32, dst, src []byte, nrBlocks int) - - // HChaCha calculates the HChaCha20 hash. - // - // Note: `dst` is guaranteed to be HashSize bytes. - HChaCha(key, nonce []byte, dst []byte) -} diff --git a/vendor/blitter.com/go/chacha20/internal/hardware/impl.go b/vendor/blitter.com/go/chacha20/internal/hardware/impl.go deleted file mode 100644 index 0c63e3a..0000000 --- a/vendor/blitter.com/go/chacha20/internal/hardware/impl.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copryright (C) 2019 Yawning Angel -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -// Package hardware provides the hardware accelerated ChaCha20 implementations. -package hardware - -import "blitter.com/go/chacha20/internal/api" - -var hardwareImpls []api.Implementation - -// Register appends the implementation(s) to the provided slice, and returns the -// new slice. -func Register(impls []api.Implementation) []api.Implementation { - return append(impls, hardwareImpls...) -} diff --git a/vendor/blitter.com/go/chacha20/internal/hardware/impl_amd64.go b/vendor/blitter.com/go/chacha20/internal/hardware/impl_amd64.go deleted file mode 100644 index 31cbf8b..0000000 --- a/vendor/blitter.com/go/chacha20/internal/hardware/impl_amd64.go +++ /dev/null @@ -1,88 +0,0 @@ -// Copryright (C) 2019 Yawning Angel -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -// +build amd64,!noasm - -package hardware - -import ( - "golang.org/x/sys/cpu" - - "blitter.com/go/chacha20/internal/api" -) - -//go:noescape -func blocksAVX2(s *[api.StateSize]uint32, in, out []byte) - -//go:noescape -func hChaChaAVX2(key, nonce []byte, dst *byte) - -//go:noescape -func blocksSSSE3(s *[api.StateSize]uint32, in, out []byte) - -//go:noescape -func hChaChaSSSE3(key, nonce []byte, dst *byte) - -type implAmd64 struct { - name string - - blocksFn func(*[api.StateSize]uint32, []byte, []byte, int) - hChaChaFn func([]byte, []byte, *byte) -} - -func (impl *implAmd64) Name() string { - return impl.name -} - -func (impl *implAmd64) Blocks(x *[api.StateSize]uint32, dst, src []byte, nrBlocks int) { - impl.blocksFn(x, dst, src, nrBlocks) -} - -func (impl *implAmd64) HChaCha(key, nonce []byte, dst []byte) { - impl.hChaChaFn(key, nonce, &dst[0]) -} - -func blockWrapper(fn func(*[api.StateSize]uint32, []byte, []byte)) func(*[api.StateSize]uint32, []byte, []byte, int) { - return func(x *[api.StateSize]uint32, dst, src []byte, nrBlocks int) { - sz := nrBlocks * api.BlockSize - if src != nil { - fn(x, src[:sz], dst[:sz]) - } else { - // Sub-optimal, but the compiler special cases this to an assembly - // optimized runtime.memclrNoHeapPointers, so it's not terrible. - for i := range dst[:sz] { - dst[i] = 0 - } - fn(x, dst[:sz], dst[:sz]) - } - } -} - -func init() { - if cpu.X86.HasAVX2 { - hardwareImpls = append(hardwareImpls, &implAmd64{ - name: "amd64_avx2", - blocksFn: blockWrapper(blocksAVX2), - hChaChaFn: hChaChaAVX2, - }) - } - if cpu.X86.HasSSE3 { - hardwareImpls = append(hardwareImpls, &implAmd64{ - name: "amd64_ssse3", - blocksFn: blockWrapper(blocksSSSE3), - hChaChaFn: hChaChaSSSE3, - }) - } -} diff --git a/vendor/blitter.com/go/chacha20/internal/hardware/impl_amd64.s b/vendor/blitter.com/go/chacha20/internal/hardware/impl_amd64.s deleted file mode 100644 index fb93eef..0000000 --- a/vendor/blitter.com/go/chacha20/internal/hardware/impl_amd64.s +++ /dev/null @@ -1,1682 +0,0 @@ -// Copryright (C) 2019 Yawning Angel -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -// +build !noasm - -#include "textflag.h" - -DATA ·chacha_constants<>+0x00(SB)/4, $0x61707865 -DATA ·chacha_constants<>+0x04(SB)/4, $0x3320646E -DATA ·chacha_constants<>+0x08(SB)/4, $0x79622D32 -DATA ·chacha_constants<>+0x0c(SB)/4, $0x6B206574 -DATA ·chacha_constants<>+0x10(SB)/8, $0x0504070601000302 -DATA ·chacha_constants<>+0x18(SB)/8, $0x0D0C0F0E09080B0A -DATA ·chacha_constants<>+0x20(SB)/8, $0x0605040702010003 -DATA ·chacha_constants<>+0x28(SB)/8, $0x0E0D0C0F0A09080B -GLOBL ·chacha_constants<>(SB), (NOPTR+RODATA), $48 - -// func blocksAVX2(s *[api.StateSize]uint32, in, out []byte) -TEXT ·blocksAVX2(SB), NOSPLIT, $576-56 - // This is Andrew Moon's AVX2 ChaCha implementation taken from - // supercop-20171218, with some minor changes, primarily calling - // convention and assembly dialect related. - - // Align the stack on a 64 byte boundary. - MOVQ SP, BP - ADDQ $64, BP - ANDQ $-64, BP - - // Go calling convention -> SYSV AMD64 (and a fixup). - MOVQ s+0(FP), DI // &s -> DI - ADDQ $16, DI // Skip the ChaCha constants in the chachaState. - MOVQ in+8(FP), SI // &in[0] -> SI - MOVQ out+32(FP), DX // &out[0] -> DX - MOVQ in_len+16(FP), CX // len(in) -> CX - - // Begin the main body of `chacha_blocks_avx2`. - // - // Mostly a direct translation except: - // * The number of rounds is always 20. - // * %rbp is used instead of %rsp. - LEAQ ·chacha_constants<>(SB), AX - VMOVDQU 0(AX), X8 - VMOVDQU 16(AX), X6 - VMOVDQU 32(AX), X7 - VMOVDQU 0(DI), X9 - VMOVDQU 16(DI), X10 - VMOVDQU 32(DI), X11 - - // MOVQ 48(DI), AX - MOVQ $1, R9 - VMOVDQA X8, 0(BP) - VMOVDQA X9, 16(BP) - VMOVDQA X10, 32(BP) - VMOVDQA X11, 48(BP) - - // MOVQ AX, 64(BP) - VMOVDQA X6, 448(BP) - VMOVDQA X6, 464(BP) - VMOVDQA X7, 480(BP) - VMOVDQA X7, 496(BP) - CMPQ CX, $512 - JAE chacha_blocks_avx2_atleast512 - CMPQ CX, $256 - JAE chacha_blocks_avx2_atleast256 - JMP chacha_blocks_avx2_below256 - -chacha_blocks_avx2_atleast512: - MOVQ 48(BP), AX - LEAQ 1(AX), R8 - LEAQ 2(AX), R9 - LEAQ 3(AX), R10 - LEAQ 4(AX), BX - LEAQ 5(AX), R11 - LEAQ 6(AX), R12 - LEAQ 7(AX), R13 - LEAQ 8(AX), R14 - MOVL AX, 128(BP) - MOVL R8, 4+128(BP) - MOVL R9, 8+128(BP) - MOVL R10, 12+128(BP) - MOVL BX, 16+128(BP) - MOVL R11, 20+128(BP) - MOVL R12, 24+128(BP) - MOVL R13, 28+128(BP) - SHRQ $32, AX - SHRQ $32, R8 - SHRQ $32, R9 - SHRQ $32, R10 - SHRQ $32, BX - SHRQ $32, R11 - SHRQ $32, R12 - SHRQ $32, R13 - MOVL AX, 160(BP) - MOVL R8, 4+160(BP) - MOVL R9, 8+160(BP) - MOVL R10, 12+160(BP) - MOVL BX, 16+160(BP) - MOVL R11, 20+160(BP) - MOVL R12, 24+160(BP) - MOVL R13, 28+160(BP) - MOVQ R14, 48(BP) - - // MOVQ 64(BP), AX - MOVQ $20, AX - VPBROADCASTD 0(BP), Y0 - VPBROADCASTD 4+0(BP), Y1 - VPBROADCASTD 8+0(BP), Y2 - VPBROADCASTD 12+0(BP), Y3 - VPBROADCASTD 16(BP), Y4 - VPBROADCASTD 4+16(BP), Y5 - VPBROADCASTD 8+16(BP), Y6 - VPBROADCASTD 12+16(BP), Y7 - VPBROADCASTD 32(BP), Y8 - VPBROADCASTD 4+32(BP), Y9 - VPBROADCASTD 8+32(BP), Y10 - VPBROADCASTD 12+32(BP), Y11 - VPBROADCASTD 8+48(BP), Y14 - VPBROADCASTD 12+48(BP), Y15 - VMOVDQA 128(BP), Y12 - VMOVDQA 160(BP), Y13 - -chacha_blocks_avx2_mainloop1: - VPADDD Y0, Y4, Y0 - VPADDD Y1, Y5, Y1 - VPXOR Y12, Y0, Y12 - VPXOR Y13, Y1, Y13 - VPADDD Y2, Y6, Y2 - VPADDD Y3, Y7, Y3 - VPXOR Y14, Y2, Y14 - VPXOR Y15, Y3, Y15 - VPSHUFB 448(BP), Y12, Y12 - VPSHUFB 448(BP), Y13, Y13 - VPADDD Y8, Y12, Y8 - VPADDD Y9, Y13, Y9 - VPSHUFB 448(BP), Y14, Y14 - VPSHUFB 448(BP), Y15, Y15 - VPADDD Y10, Y14, Y10 - VPADDD Y11, Y15, Y11 - VMOVDQA Y12, 96(BP) - VPXOR Y4, Y8, Y4 - VPXOR Y5, Y9, Y5 - VPSLLD $ 12, Y4, Y12 - VPSRLD $20, Y4, Y4 - VPXOR Y4, Y12, Y4 - VPSLLD $ 12, Y5, Y12 - VPSRLD $20, Y5, Y5 - VPXOR Y5, Y12, Y5 - VPXOR Y6, Y10, Y6 - VPXOR Y7, Y11, Y7 - VPSLLD $ 12, Y6, Y12 - VPSRLD $20, Y6, Y6 - VPXOR Y6, Y12, Y6 - VPSLLD $ 12, Y7, Y12 - VPSRLD $20, Y7, Y7 - VPXOR Y7, Y12, Y7 - VPADDD Y0, Y4, Y0 - VPADDD Y1, Y5, Y1 - VPXOR 96(BP), Y0, Y12 - VPXOR Y13, Y1, Y13 - VPADDD Y2, Y6, Y2 - VPADDD Y3, Y7, Y3 - VPXOR Y14, Y2, Y14 - VPXOR Y15, Y3, Y15 - VPSHUFB 480(BP), Y12, Y12 - VPSHUFB 480(BP), Y13, Y13 - VPADDD Y8, Y12, Y8 - VPADDD Y9, Y13, Y9 - VPSHUFB 480(BP), Y14, Y14 - VPSHUFB 480(BP), Y15, Y15 - VPADDD Y10, Y14, Y10 - VPADDD Y11, Y15, Y11 - VMOVDQA Y12, 96(BP) - VPXOR Y4, Y8, Y4 - VPXOR Y5, Y9, Y5 - VPSLLD $ 7, Y4, Y12 - VPSRLD $25, Y4, Y4 - VPXOR Y4, Y12, Y4 - VPSLLD $ 7, Y5, Y12 - VPSRLD $25, Y5, Y5 - VPXOR Y5, Y12, Y5 - VPXOR Y6, Y10, Y6 - VPXOR Y7, Y11, Y7 - VPSLLD $ 7, Y6, Y12 - VPSRLD $25, Y6, Y6 - VPXOR Y6, Y12, Y6 - VPSLLD $ 7, Y7, Y12 - VPSRLD $25, Y7, Y7 - VPXOR Y7, Y12, Y7 - VPADDD Y0, Y5, Y0 - VPADDD Y1, Y6, Y1 - VPXOR Y15, Y0, Y15 - VPXOR 96(BP), Y1, Y12 - VPADDD Y2, Y7, Y2 - VPADDD Y3, Y4, Y3 - VPXOR Y13, Y2, Y13 - VPXOR Y14, Y3, Y14 - VPSHUFB 448(BP), Y15, Y15 - VPSHUFB 448(BP), Y12, Y12 - VPADDD Y10, Y15, Y10 - VPADDD Y11, Y12, Y11 - VPSHUFB 448(BP), Y13, Y13 - VPSHUFB 448(BP), Y14, Y14 - VPADDD Y8, Y13, Y8 - VPADDD Y9, Y14, Y9 - VMOVDQA Y15, 96(BP) - VPXOR Y5, Y10, Y5 - VPXOR Y6, Y11, Y6 - VPSLLD $ 12, Y5, Y15 - VPSRLD $20, Y5, Y5 - VPXOR Y5, Y15, Y5 - VPSLLD $ 12, Y6, Y15 - VPSRLD $20, Y6, Y6 - VPXOR Y6, Y15, Y6 - VPXOR Y7, Y8, Y7 - VPXOR Y4, Y9, Y4 - VPSLLD $ 12, Y7, Y15 - VPSRLD $20, Y7, Y7 - VPXOR Y7, Y15, Y7 - VPSLLD $ 12, Y4, Y15 - VPSRLD $20, Y4, Y4 - VPXOR Y4, Y15, Y4 - VPADDD Y0, Y5, Y0 - VPADDD Y1, Y6, Y1 - VPXOR 96(BP), Y0, Y15 - VPXOR Y12, Y1, Y12 - VPADDD Y2, Y7, Y2 - VPADDD Y3, Y4, Y3 - VPXOR Y13, Y2, Y13 - VPXOR Y14, Y3, Y14 - VPSHUFB 480(BP), Y15, Y15 - VPSHUFB 480(BP), Y12, Y12 - VPADDD Y10, Y15, Y10 - VPADDD Y11, Y12, Y11 - VPSHUFB 480(BP), Y13, Y13 - VPSHUFB 480(BP), Y14, Y14 - VPADDD Y8, Y13, Y8 - VPADDD Y9, Y14, Y9 - VMOVDQA Y15, 96(BP) - VPXOR Y5, Y10, Y5 - VPXOR Y6, Y11, Y6 - VPSLLD $ 7, Y5, Y15 - VPSRLD $25, Y5, Y5 - VPXOR Y5, Y15, Y5 - VPSLLD $ 7, Y6, Y15 - VPSRLD $25, Y6, Y6 - VPXOR Y6, Y15, Y6 - VPXOR Y7, Y8, Y7 - VPXOR Y4, Y9, Y4 - VPSLLD $ 7, Y7, Y15 - VPSRLD $25, Y7, Y7 - VPXOR Y7, Y15, Y7 - VPSLLD $ 7, Y4, Y15 - VPSRLD $25, Y4, Y4 - VPXOR Y4, Y15, Y4 - VMOVDQA 96(BP), Y15 - SUBQ $2, AX - JNZ chacha_blocks_avx2_mainloop1 - VMOVDQA Y8, 192(BP) - VMOVDQA Y9, 224(BP) - VMOVDQA Y10, 256(BP) - VMOVDQA Y11, 288(BP) - VMOVDQA Y12, 320(BP) - VMOVDQA Y13, 352(BP) - VMOVDQA Y14, 384(BP) - VMOVDQA Y15, 416(BP) - VPBROADCASTD 0(BP), Y8 - VPBROADCASTD 4+0(BP), Y9 - VPBROADCASTD 8+0(BP), Y10 - VPBROADCASTD 12+0(BP), Y11 - VPBROADCASTD 16(BP), Y12 - VPBROADCASTD 4+16(BP), Y13 - VPBROADCASTD 8+16(BP), Y14 - VPBROADCASTD 12+16(BP), Y15 - VPADDD Y8, Y0, Y0 - VPADDD Y9, Y1, Y1 - VPADDD Y10, Y2, Y2 - VPADDD Y11, Y3, Y3 - VPADDD Y12, Y4, Y4 - VPADDD Y13, Y5, Y5 - VPADDD Y14, Y6, Y6 - VPADDD Y15, Y7, Y7 - VPUNPCKLDQ Y1, Y0, Y8 - VPUNPCKLDQ Y3, Y2, Y9 - VPUNPCKHDQ Y1, Y0, Y12 - VPUNPCKHDQ Y3, Y2, Y13 - VPUNPCKLDQ Y5, Y4, Y10 - VPUNPCKLDQ Y7, Y6, Y11 - VPUNPCKHDQ Y5, Y4, Y14 - VPUNPCKHDQ Y7, Y6, Y15 - VPUNPCKLQDQ Y9, Y8, Y0 - VPUNPCKLQDQ Y11, Y10, Y1 - VPUNPCKHQDQ Y9, Y8, Y2 - VPUNPCKHQDQ Y11, Y10, Y3 - VPUNPCKLQDQ Y13, Y12, Y4 - VPUNPCKLQDQ Y15, Y14, Y5 - VPUNPCKHQDQ Y13, Y12, Y6 - VPUNPCKHQDQ Y15, Y14, Y7 - VPERM2I128 $0x20, Y1, Y0, Y8 - VPERM2I128 $0x20, Y3, Y2, Y9 - VPERM2I128 $0x31, Y1, Y0, Y12 - VPERM2I128 $0x31, Y3, Y2, Y13 - VPERM2I128 $0x20, Y5, Y4, Y10 - VPERM2I128 $0x20, Y7, Y6, Y11 - VPERM2I128 $0x31, Y5, Y4, Y14 - VPERM2I128 $0x31, Y7, Y6, Y15 - ANDQ SI, SI - JZ chacha_blocks_avx2_noinput1 - VPXOR 0(SI), Y8, Y8 - VPXOR 64(SI), Y9, Y9 - VPXOR 128(SI), Y10, Y10 - VPXOR 192(SI), Y11, Y11 - VPXOR 256(SI), Y12, Y12 - VPXOR 320(SI), Y13, Y13 - VPXOR 384(SI), Y14, Y14 - VPXOR 448(SI), Y15, Y15 - VMOVDQU Y8, 0(DX) - VMOVDQU Y9, 64(DX) - VMOVDQU Y10, 128(DX) - VMOVDQU Y11, 192(DX) - VMOVDQU Y12, 256(DX) - VMOVDQU Y13, 320(DX) - VMOVDQU Y14, 384(DX) - VMOVDQU Y15, 448(DX) - VMOVDQA 192(BP), Y0 - VMOVDQA 224(BP), Y1 - VMOVDQA 256(BP), Y2 - VMOVDQA 288(BP), Y3 - VMOVDQA 320(BP), Y4 - VMOVDQA 352(BP), Y5 - VMOVDQA 384(BP), Y6 - VMOVDQA 416(BP), Y7 - VPBROADCASTD 32(BP), Y8 - VPBROADCASTD 4+32(BP), Y9 - VPBROADCASTD 8+32(BP), Y10 - VPBROADCASTD 12+32(BP), Y11 - VMOVDQA 128(BP), Y12 - VMOVDQA 160(BP), Y13 - VPBROADCASTD 8+48(BP), Y14 - VPBROADCASTD 12+48(BP), Y15 - VPADDD Y8, Y0, Y0 - VPADDD Y9, Y1, Y1 - VPADDD Y10, Y2, Y2 - VPADDD Y11, Y3, Y3 - VPADDD Y12, Y4, Y4 - VPADDD Y13, Y5, Y5 - VPADDD Y14, Y6, Y6 - VPADDD Y15, Y7, Y7 - VPUNPCKLDQ Y1, Y0, Y8 - VPUNPCKLDQ Y3, Y2, Y9 - VPUNPCKHDQ Y1, Y0, Y12 - VPUNPCKHDQ Y3, Y2, Y13 - VPUNPCKLDQ Y5, Y4, Y10 - VPUNPCKLDQ Y7, Y6, Y11 - VPUNPCKHDQ Y5, Y4, Y14 - VPUNPCKHDQ Y7, Y6, Y15 - VPUNPCKLQDQ Y9, Y8, Y0 - VPUNPCKLQDQ Y11, Y10, Y1 - VPUNPCKHQDQ Y9, Y8, Y2 - VPUNPCKHQDQ Y11, Y10, Y3 - VPUNPCKLQDQ Y13, Y12, Y4 - VPUNPCKLQDQ Y15, Y14, Y5 - VPUNPCKHQDQ Y13, Y12, Y6 - VPUNPCKHQDQ Y15, Y14, Y7 - VPERM2I128 $0x20, Y1, Y0, Y8 - VPERM2I128 $0x20, Y3, Y2, Y9 - VPERM2I128 $0x31, Y1, Y0, Y12 - VPERM2I128 $0x31, Y3, Y2, Y13 - VPERM2I128 $0x20, Y5, Y4, Y10 - VPERM2I128 $0x20, Y7, Y6, Y11 - VPERM2I128 $0x31, Y5, Y4, Y14 - VPERM2I128 $0x31, Y7, Y6, Y15 - VPXOR 32(SI), Y8, Y8 - VPXOR 96(SI), Y9, Y9 - VPXOR 160(SI), Y10, Y10 - VPXOR 224(SI), Y11, Y11 - VPXOR 288(SI), Y12, Y12 - VPXOR 352(SI), Y13, Y13 - VPXOR 416(SI), Y14, Y14 - VPXOR 480(SI), Y15, Y15 - VMOVDQU Y8, 32(DX) - VMOVDQU Y9, 96(DX) - VMOVDQU Y10, 160(DX) - VMOVDQU Y11, 224(DX) - VMOVDQU Y12, 288(DX) - VMOVDQU Y13, 352(DX) - VMOVDQU Y14, 416(DX) - VMOVDQU Y15, 480(DX) - ADDQ $512, SI - JMP chacha_blocks_avx2_mainloop1_cont - -chacha_blocks_avx2_noinput1: - VMOVDQU Y8, 0(DX) - VMOVDQU Y9, 64(DX) - VMOVDQU Y10, 128(DX) - VMOVDQU Y11, 192(DX) - VMOVDQU Y12, 256(DX) - VMOVDQU Y13, 320(DX) - VMOVDQU Y14, 384(DX) - VMOVDQU Y15, 448(DX) - VMOVDQA 192(BP), Y0 - VMOVDQA 224(BP), Y1 - VMOVDQA 256(BP), Y2 - VMOVDQA 288(BP), Y3 - VMOVDQA 320(BP), Y4 - VMOVDQA 352(BP), Y5 - VMOVDQA 384(BP), Y6 - VMOVDQA 416(BP), Y7 - VPBROADCASTD 32(BP), Y8 - VPBROADCASTD 4+32(BP), Y9 - VPBROADCASTD 8+32(BP), Y10 - VPBROADCASTD 12+32(BP), Y11 - VMOVDQA 128(BP), Y12 - VMOVDQA 160(BP), Y13 - VPBROADCASTD 8+48(BP), Y14 - VPBROADCASTD 12+48(BP), Y15 - VPADDD Y8, Y0, Y0 - VPADDD Y9, Y1, Y1 - VPADDD Y10, Y2, Y2 - VPADDD Y11, Y3, Y3 - VPADDD Y12, Y4, Y4 - VPADDD Y13, Y5, Y5 - VPADDD Y14, Y6, Y6 - VPADDD Y15, Y7, Y7 - VPUNPCKLDQ Y1, Y0, Y8 - VPUNPCKLDQ Y3, Y2, Y9 - VPUNPCKHDQ Y1, Y0, Y12 - VPUNPCKHDQ Y3, Y2, Y13 - VPUNPCKLDQ Y5, Y4, Y10 - VPUNPCKLDQ Y7, Y6, Y11 - VPUNPCKHDQ Y5, Y4, Y14 - VPUNPCKHDQ Y7, Y6, Y15 - VPUNPCKLQDQ Y9, Y8, Y0 - VPUNPCKLQDQ Y11, Y10, Y1 - VPUNPCKHQDQ Y9, Y8, Y2 - VPUNPCKHQDQ Y11, Y10, Y3 - VPUNPCKLQDQ Y13, Y12, Y4 - VPUNPCKLQDQ Y15, Y14, Y5 - VPUNPCKHQDQ Y13, Y12, Y6 - VPUNPCKHQDQ Y15, Y14, Y7 - VPERM2I128 $0x20, Y1, Y0, Y8 - VPERM2I128 $0x20, Y3, Y2, Y9 - VPERM2I128 $0x31, Y1, Y0, Y12 - VPERM2I128 $0x31, Y3, Y2, Y13 - VPERM2I128 $0x20, Y5, Y4, Y10 - VPERM2I128 $0x20, Y7, Y6, Y11 - VPERM2I128 $0x31, Y5, Y4, Y14 - VPERM2I128 $0x31, Y7, Y6, Y15 - VMOVDQU Y8, 32(DX) - VMOVDQU Y9, 96(DX) - VMOVDQU Y10, 160(DX) - VMOVDQU Y11, 224(DX) - VMOVDQU Y12, 288(DX) - VMOVDQU Y13, 352(DX) - VMOVDQU Y14, 416(DX) - VMOVDQU Y15, 480(DX) - -chacha_blocks_avx2_mainloop1_cont: - ADDQ $512, DX - SUBQ $512, CX - CMPQ CX, $512 - JAE chacha_blocks_avx2_atleast512 - CMPQ CX, $256 - JB chacha_blocks_avx2_below256_fixup - -chacha_blocks_avx2_atleast256: - MOVQ 48(BP), AX - LEAQ 1(AX), R8 - LEAQ 2(AX), R9 - LEAQ 3(AX), R10 - LEAQ 4(AX), BX - MOVL AX, 128(BP) - MOVL R8, 4+128(BP) - MOVL R9, 8+128(BP) - MOVL R10, 12+128(BP) - SHRQ $32, AX - SHRQ $32, R8 - SHRQ $32, R9 - SHRQ $32, R10 - MOVL AX, 160(BP) - MOVL R8, 4+160(BP) - MOVL R9, 8+160(BP) - MOVL R10, 12+160(BP) - MOVQ BX, 48(BP) - - // MOVQ 64(BP), AX - MOVQ $20, AX - VPBROADCASTD 0(BP), X0 - VPBROADCASTD 4+0(BP), X1 - VPBROADCASTD 8+0(BP), X2 - VPBROADCASTD 12+0(BP), X3 - VPBROADCASTD 16(BP), X4 - VPBROADCASTD 4+16(BP), X5 - VPBROADCASTD 8+16(BP), X6 - VPBROADCASTD 12+16(BP), X7 - VPBROADCASTD 32(BP), X8 - VPBROADCASTD 4+32(BP), X9 - VPBROADCASTD 8+32(BP), X10 - VPBROADCASTD 12+32(BP), X11 - VMOVDQA 128(BP), X12 - VMOVDQA 160(BP), X13 - VPBROADCASTD 8+48(BP), X14 - VPBROADCASTD 12+48(BP), X15 - -chacha_blocks_avx2_mainloop2: - VPADDD X0, X4, X0 - VPADDD X1, X5, X1 - VPXOR X12, X0, X12 - VPXOR X13, X1, X13 - VPADDD X2, X6, X2 - VPADDD X3, X7, X3 - VPXOR X14, X2, X14 - VPXOR X15, X3, X15 - VPSHUFB 448(BP), X12, X12 - VPSHUFB 448(BP), X13, X13 - VPADDD X8, X12, X8 - VPADDD X9, X13, X9 - VPSHUFB 448(BP), X14, X14 - VPSHUFB 448(BP), X15, X15 - VPADDD X10, X14, X10 - VPADDD X11, X15, X11 - VMOVDQA X12, 96(BP) - VPXOR X4, X8, X4 - VPXOR X5, X9, X5 - VPSLLD $ 12, X4, X12 - VPSRLD $20, X4, X4 - VPXOR X4, X12, X4 - VPSLLD $ 12, X5, X12 - VPSRLD $20, X5, X5 - VPXOR X5, X12, X5 - VPXOR X6, X10, X6 - VPXOR X7, X11, X7 - VPSLLD $ 12, X6, X12 - VPSRLD $20, X6, X6 - VPXOR X6, X12, X6 - VPSLLD $ 12, X7, X12 - VPSRLD $20, X7, X7 - VPXOR X7, X12, X7 - VPADDD X0, X4, X0 - VPADDD X1, X5, X1 - VPXOR 96(BP), X0, X12 - VPXOR X13, X1, X13 - VPADDD X2, X6, X2 - VPADDD X3, X7, X3 - VPXOR X14, X2, X14 - VPXOR X15, X3, X15 - VPSHUFB 480(BP), X12, X12 - VPSHUFB 480(BP), X13, X13 - VPADDD X8, X12, X8 - VPADDD X9, X13, X9 - VPSHUFB 480(BP), X14, X14 - VPSHUFB 480(BP), X15, X15 - VPADDD X10, X14, X10 - VPADDD X11, X15, X11 - VMOVDQA X12, 96(BP) - VPXOR X4, X8, X4 - VPXOR X5, X9, X5 - VPSLLD $ 7, X4, X12 - VPSRLD $25, X4, X4 - VPXOR X4, X12, X4 - VPSLLD $ 7, X5, X12 - VPSRLD $25, X5, X5 - VPXOR X5, X12, X5 - VPXOR X6, X10, X6 - VPXOR X7, X11, X7 - VPSLLD $ 7, X6, X12 - VPSRLD $25, X6, X6 - VPXOR X6, X12, X6 - VPSLLD $ 7, X7, X12 - VPSRLD $25, X7, X7 - VPXOR X7, X12, X7 - VPADDD X0, X5, X0 - VPADDD X1, X6, X1 - VPXOR X15, X0, X15 - VPXOR 96(BP), X1, X12 - VPADDD X2, X7, X2 - VPADDD X3, X4, X3 - VPXOR X13, X2, X13 - VPXOR X14, X3, X14 - VPSHUFB 448(BP), X15, X15 - VPSHUFB 448(BP), X12, X12 - VPADDD X10, X15, X10 - VPADDD X11, X12, X11 - VPSHUFB 448(BP), X13, X13 - VPSHUFB 448(BP), X14, X14 - VPADDD X8, X13, X8 - VPADDD X9, X14, X9 - VMOVDQA X15, 96(BP) - VPXOR X5, X10, X5 - VPXOR X6, X11, X6 - VPSLLD $ 12, X5, X15 - VPSRLD $20, X5, X5 - VPXOR X5, X15, X5 - VPSLLD $ 12, X6, X15 - VPSRLD $20, X6, X6 - VPXOR X6, X15, X6 - VPXOR X7, X8, X7 - VPXOR X4, X9, X4 - VPSLLD $ 12, X7, X15 - VPSRLD $20, X7, X7 - VPXOR X7, X15, X7 - VPSLLD $ 12, X4, X15 - VPSRLD $20, X4, X4 - VPXOR X4, X15, X4 - VPADDD X0, X5, X0 - VPADDD X1, X6, X1 - VPXOR 96(BP), X0, X15 - VPXOR X12, X1, X12 - VPADDD X2, X7, X2 - VPADDD X3, X4, X3 - VPXOR X13, X2, X13 - VPXOR X14, X3, X14 - VPSHUFB 480(BP), X15, X15 - VPSHUFB 480(BP), X12, X12 - VPADDD X10, X15, X10 - VPADDD X11, X12, X11 - VPSHUFB 480(BP), X13, X13 - VPSHUFB 480(BP), X14, X14 - VPADDD X8, X13, X8 - VPADDD X9, X14, X9 - VMOVDQA X15, 96(BP) - VPXOR X5, X10, X5 - VPXOR X6, X11, X6 - VPSLLD $ 7, X5, X15 - VPSRLD $25, X5, X5 - VPXOR X5, X15, X5 - VPSLLD $ 7, X6, X15 - VPSRLD $25, X6, X6 - VPXOR X6, X15, X6 - VPXOR X7, X8, X7 - VPXOR X4, X9, X4 - VPSLLD $ 7, X7, X15 - VPSRLD $25, X7, X7 - VPXOR X7, X15, X7 - VPSLLD $ 7, X4, X15 - VPSRLD $25, X4, X4 - VPXOR X4, X15, X4 - VMOVDQA 96(BP), X15 - SUBQ $2, AX - JNZ chacha_blocks_avx2_mainloop2 - VMOVDQA X8, 192(BP) - VMOVDQA X9, 208(BP) - VMOVDQA X10, 224(BP) - VMOVDQA X11, 240(BP) - VMOVDQA X12, 256(BP) - VMOVDQA X13, 272(BP) - VMOVDQA X14, 288(BP) - VMOVDQA X15, 304(BP) - VPBROADCASTD 0(BP), X8 - VPBROADCASTD 4+0(BP), X9 - VPBROADCASTD 8+0(BP), X10 - VPBROADCASTD 12+0(BP), X11 - VPBROADCASTD 16(BP), X12 - VPBROADCASTD 4+16(BP), X13 - VPBROADCASTD 8+16(BP), X14 - VPBROADCASTD 12+16(BP), X15 - VPADDD X8, X0, X0 - VPADDD X9, X1, X1 - VPADDD X10, X2, X2 - VPADDD X11, X3, X3 - VPADDD X12, X4, X4 - VPADDD X13, X5, X5 - VPADDD X14, X6, X6 - VPADDD X15, X7, X7 - VPUNPCKLDQ X1, X0, X8 - VPUNPCKLDQ X3, X2, X9 - VPUNPCKHDQ X1, X0, X12 - VPUNPCKHDQ X3, X2, X13 - VPUNPCKLDQ X5, X4, X10 - VPUNPCKLDQ X7, X6, X11 - VPUNPCKHDQ X5, X4, X14 - VPUNPCKHDQ X7, X6, X15 - VPUNPCKLQDQ X9, X8, X0 - VPUNPCKLQDQ X11, X10, X1 - VPUNPCKHQDQ X9, X8, X2 - VPUNPCKHQDQ X11, X10, X3 - VPUNPCKLQDQ X13, X12, X4 - VPUNPCKLQDQ X15, X14, X5 - VPUNPCKHQDQ X13, X12, X6 - VPUNPCKHQDQ X15, X14, X7 - ANDQ SI, SI - JZ chacha_blocks_avx2_noinput2 - VPXOR 0(SI), X0, X0 - VPXOR 16(SI), X1, X1 - VPXOR 64(SI), X2, X2 - VPXOR 80(SI), X3, X3 - VPXOR 128(SI), X4, X4 - VPXOR 144(SI), X5, X5 - VPXOR 192(SI), X6, X6 - VPXOR 208(SI), X7, X7 - VMOVDQU X0, 0(DX) - VMOVDQU X1, 16(DX) - VMOVDQU X2, 64(DX) - VMOVDQU X3, 80(DX) - VMOVDQU X4, 128(DX) - VMOVDQU X5, 144(DX) - VMOVDQU X6, 192(DX) - VMOVDQU X7, 208(DX) - VMOVDQA 192(BP), X0 - VMOVDQA 208(BP), X1 - VMOVDQA 224(BP), X2 - VMOVDQA 240(BP), X3 - VMOVDQA 256(BP), X4 - VMOVDQA 272(BP), X5 - VMOVDQA 288(BP), X6 - VMOVDQA 304(BP), X7 - VPBROADCASTD 32(BP), X8 - VPBROADCASTD 4+32(BP), X9 - VPBROADCASTD 8+32(BP), X10 - VPBROADCASTD 12+32(BP), X11 - VMOVDQA 128(BP), X12 - VMOVDQA 160(BP), X13 - VPBROADCASTD 8+48(BP), X14 - VPBROADCASTD 12+48(BP), X15 - VPADDD X8, X0, X0 - VPADDD X9, X1, X1 - VPADDD X10, X2, X2 - VPADDD X11, X3, X3 - VPADDD X12, X4, X4 - VPADDD X13, X5, X5 - VPADDD X14, X6, X6 - VPADDD X15, X7, X7 - VPUNPCKLDQ X1, X0, X8 - VPUNPCKLDQ X3, X2, X9 - VPUNPCKHDQ X1, X0, X12 - VPUNPCKHDQ X3, X2, X13 - VPUNPCKLDQ X5, X4, X10 - VPUNPCKLDQ X7, X6, X11 - VPUNPCKHDQ X5, X4, X14 - VPUNPCKHDQ X7, X6, X15 - VPUNPCKLQDQ X9, X8, X0 - VPUNPCKLQDQ X11, X10, X1 - VPUNPCKHQDQ X9, X8, X2 - VPUNPCKHQDQ X11, X10, X3 - VPUNPCKLQDQ X13, X12, X4 - VPUNPCKLQDQ X15, X14, X5 - VPUNPCKHQDQ X13, X12, X6 - VPUNPCKHQDQ X15, X14, X7 - VPXOR 32(SI), X0, X0 - VPXOR 48(SI), X1, X1 - VPXOR 96(SI), X2, X2 - VPXOR 112(SI), X3, X3 - VPXOR 160(SI), X4, X4 - VPXOR 176(SI), X5, X5 - VPXOR 224(SI), X6, X6 - VPXOR 240(SI), X7, X7 - VMOVDQU X0, 32(DX) - VMOVDQU X1, 48(DX) - VMOVDQU X2, 96(DX) - VMOVDQU X3, 112(DX) - VMOVDQU X4, 160(DX) - VMOVDQU X5, 176(DX) - VMOVDQU X6, 224(DX) - VMOVDQU X7, 240(DX) - ADDQ $256, SI - JMP chacha_blocks_avx2_mainloop2_cont - -chacha_blocks_avx2_noinput2: - VMOVDQU X0, 0(DX) - VMOVDQU X1, 16(DX) - VMOVDQU X2, 64(DX) - VMOVDQU X3, 80(DX) - VMOVDQU X4, 128(DX) - VMOVDQU X5, 144(DX) - VMOVDQU X6, 192(DX) - VMOVDQU X7, 208(DX) - VMOVDQA 192(BP), X0 - VMOVDQA 208(BP), X1 - VMOVDQA 224(BP), X2 - VMOVDQA 240(BP), X3 - VMOVDQA 256(BP), X4 - VMOVDQA 272(BP), X5 - VMOVDQA 288(BP), X6 - VMOVDQA 304(BP), X7 - VPBROADCASTD 32(BP), X8 - VPBROADCASTD 4+32(BP), X9 - VPBROADCASTD 8+32(BP), X10 - VPBROADCASTD 12+32(BP), X11 - VMOVDQA 128(BP), X12 - VMOVDQA 160(BP), X13 - VPBROADCASTD 8+48(BP), X14 - VPBROADCASTD 12+48(BP), X15 - VPADDD X8, X0, X0 - VPADDD X9, X1, X1 - VPADDD X10, X2, X2 - VPADDD X11, X3, X3 - VPADDD X12, X4, X4 - VPADDD X13, X5, X5 - VPADDD X14, X6, X6 - VPADDD X15, X7, X7 - VPUNPCKLDQ X1, X0, X8 - VPUNPCKLDQ X3, X2, X9 - VPUNPCKHDQ X1, X0, X12 - VPUNPCKHDQ X3, X2, X13 - VPUNPCKLDQ X5, X4, X10 - VPUNPCKLDQ X7, X6, X11 - VPUNPCKHDQ X5, X4, X14 - VPUNPCKHDQ X7, X6, X15 - VPUNPCKLQDQ X9, X8, X0 - VPUNPCKLQDQ X11, X10, X1 - VPUNPCKHQDQ X9, X8, X2 - VPUNPCKHQDQ X11, X10, X3 - VPUNPCKLQDQ X13, X12, X4 - VPUNPCKLQDQ X15, X14, X5 - VPUNPCKHQDQ X13, X12, X6 - VPUNPCKHQDQ X15, X14, X7 - VMOVDQU X0, 32(DX) - VMOVDQU X1, 48(DX) - VMOVDQU X2, 96(DX) - VMOVDQU X3, 112(DX) - VMOVDQU X4, 160(DX) - VMOVDQU X5, 176(DX) - VMOVDQU X6, 224(DX) - VMOVDQU X7, 240(DX) - -chacha_blocks_avx2_mainloop2_cont: - ADDQ $256, DX - SUBQ $256, CX - CMPQ CX, $256 - JAE chacha_blocks_avx2_atleast256 - -chacha_blocks_avx2_below256_fixup: - VMOVDQA 448(BP), X6 - VMOVDQA 480(BP), X7 - VMOVDQA 0(BP), X8 - VMOVDQA 16(BP), X9 - VMOVDQA 32(BP), X10 - VMOVDQA 48(BP), X11 - MOVQ $1, R9 - -chacha_blocks_avx2_below256: - VMOVQ R9, X5 - ANDQ CX, CX - JZ chacha_blocks_avx2_done - CMPQ CX, $64 - JAE chacha_blocks_avx2_above63 - MOVQ DX, R9 - ANDQ SI, SI - JZ chacha_blocks_avx2_noinput3 - MOVQ CX, R10 - MOVQ BP, DX - ADDQ R10, SI - ADDQ R10, DX - NEGQ R10 - -chacha_blocks_avx2_copyinput: - MOVB (SI)(R10*1), AX - MOVB AX, (DX)(R10*1) - INCQ R10 - JNZ chacha_blocks_avx2_copyinput - MOVQ BP, SI - -chacha_blocks_avx2_noinput3: - MOVQ BP, DX - -chacha_blocks_avx2_above63: - VMOVDQA X8, X0 - VMOVDQA X9, X1 - VMOVDQA X10, X2 - VMOVDQA X11, X3 - - // MOVQ 64(BP), AX - MOVQ $20, AX - -chacha_blocks_avx2_mainloop3: - VPADDD X0, X1, X0 - VPXOR X3, X0, X3 - VPSHUFB X6, X3, X3 - VPADDD X2, X3, X2 - VPXOR X1, X2, X1 - VPSLLD $12, X1, X4 - VPSRLD $20, X1, X1 - VPXOR X1, X4, X1 - VPADDD X0, X1, X0 - VPXOR X3, X0, X3 - VPSHUFB X7, X3, X3 - VPSHUFD $0x93, X0, X0 - VPADDD X2, X3, X2 - VPSHUFD $0x4e, X3, X3 - VPXOR X1, X2, X1 - VPSHUFD $0x39, X2, X2 - VPSLLD $7, X1, X4 - VPSRLD $25, X1, X1 - VPXOR X1, X4, X1 - VPADDD X0, X1, X0 - VPXOR X3, X0, X3 - VPSHUFB X6, X3, X3 - VPADDD X2, X3, X2 - VPXOR X1, X2, X1 - VPSLLD $12, X1, X4 - VPSRLD $20, X1, X1 - VPXOR X1, X4, X1 - VPADDD X0, X1, X0 - VPXOR X3, X0, X3 - VPSHUFB X7, X3, X3 - VPSHUFD $0x39, X0, X0 - VPADDD X2, X3, X2 - VPSHUFD $0x4e, X3, X3 - VPXOR X1, X2, X1 - VPSHUFD $0x93, X2, X2 - VPSLLD $7, X1, X4 - VPSRLD $25, X1, X1 - VPXOR X1, X4, X1 - SUBQ $2, AX - JNZ chacha_blocks_avx2_mainloop3 - VPADDD X0, X8, X0 - VPADDD X1, X9, X1 - VPADDD X2, X10, X2 - VPADDD X3, X11, X3 - ANDQ SI, SI - JZ chacha_blocks_avx2_noinput4 - VPXOR 0(SI), X0, X0 - VPXOR 16(SI), X1, X1 - VPXOR 32(SI), X2, X2 - VPXOR 48(SI), X3, X3 - ADDQ $64, SI - -chacha_blocks_avx2_noinput4: - VMOVDQU X0, 0(DX) - VMOVDQU X1, 16(DX) - VMOVDQU X2, 32(DX) - VMOVDQU X3, 48(DX) - VPADDQ X11, X5, X11 - CMPQ CX, $64 - JBE chacha_blocks_avx2_mainloop3_finishup - ADDQ $64, DX - SUBQ $64, CX - JMP chacha_blocks_avx2_below256 - -chacha_blocks_avx2_mainloop3_finishup: - CMPQ CX, $64 - JE chacha_blocks_avx2_done - ADDQ CX, R9 - ADDQ CX, DX - NEGQ CX - -chacha_blocks_avx2_copyoutput: - MOVB (DX)(CX*1), AX - MOVB AX, (R9)(CX*1) - INCQ CX - JNZ chacha_blocks_avx2_copyoutput - -chacha_blocks_avx2_done: - VMOVDQU X11, 32(DI) - - VZEROUPPER - RET - -// func hChaChaAVX2(key, nonce []byte, dst *byte) -TEXT ·hChaChaAVX2(SB), NOSPLIT|NOFRAME, $0-56 - MOVQ key+0(FP), DI - MOVQ nonce+24(FP), SI - MOVQ dst+48(FP), DX - - MOVL $20, CX - - LEAQ ·chacha_constants<>(SB), AX - VMOVDQA 0(AX), X0 - VMOVDQA 16(AX), X6 - VMOVDQA 32(AX), X5 - - VMOVDQU 0(DI), X1 - VMOVDQU 16(DI), X2 - VMOVDQU 0(SI), X3 - -hhacha_mainloop_avx2: - VPADDD X0, X1, X0 - VPXOR X3, X0, X3 - VPSHUFB X6, X3, X3 - VPADDD X2, X3, X2 - VPXOR X1, X2, X1 - VPSLLD $12, X1, X4 - VPSRLD $20, X1, X1 - VPXOR X1, X4, X1 - VPADDD X0, X1, X0 - VPXOR X3, X0, X3 - VPSHUFB X5, X3, X3 - VPADDD X2, X3, X2 - VPXOR X1, X2, X1 - VPSLLD $7, X1, X4 - VPSRLD $25, X1, X1 - VPSHUFD $0x93, X0, X0 - VPXOR X1, X4, X1 - VPSHUFD $0x4e, X3, X3 - VPADDD X0, X1, X0 - VPXOR X3, X0, X3 - VPSHUFB X6, X3, X3 - VPSHUFD $0x39, X2, X2 - VPADDD X2, X3, X2 - VPXOR X1, X2, X1 - VPSLLD $12, X1, X4 - VPSRLD $20, X1, X1 - VPXOR X1, X4, X1 - VPADDD X0, X1, X0 - VPXOR X3, X0, X3 - VPSHUFB X5, X3, X3 - VPADDD X2, X3, X2 - VPXOR X1, X2, X1 - VPSHUFD $0x39, X0, X0 - VPSLLD $7, X1, X4 - VPSHUFD $0x4e, X3, X3 - VPSRLD $25, X1, X1 - VPSHUFD $0x93, X2, X2 - VPXOR X1, X4, X1 - SUBL $2, CX - JNE hhacha_mainloop_avx2 - - VMOVDQU X0, (DX) - VMOVDQU X3, 16(DX) - - VZEROUPPER - RET - -// func blocksSSSE3(s *[api.StateSize]uint32, in, out []byte) -TEXT ·blocksSSSE3(SB), NOSPLIT, $576-56 - // This is Andrew Moon's SSSE3 ChaCha implementation taken from - // supercop-20190110, with some minor changes, primarily calling - // convention and assembly dialect related. - - // Align the stack on a 64 byte boundary. - MOVQ SP, BP - ADDQ $64, BP - ANDQ $-64, BP - - // Go calling convention -> SYSV AMD64 (and a fixup). - MOVQ s+0(FP), DI // &s -> DI - ADDQ $16, DI // Skip the ChaCha constants in the chachaState. - MOVQ in+8(FP), SI // &in[0] -> SI - MOVQ out+32(FP), DX // &out[0] -> DX - MOVQ in_len+16(FP), CX // len(in) -> CX - - // Begin the main body of `chacha_blocks_ssse3`. - // - // Mostly a direct translation except: - // * The number of rounds is always 20. - // * %rbp is used instead of BP. - LEAQ ·chacha_constants<>(SB), AX - MOVO 0(AX), X8 - MOVO 16(AX), X6 - MOVO 32(AX), X7 - MOVOU 0(DI), X9 - MOVOU 16(DI), X10 - MOVOU 32(DI), X11 - - // MOVQ 48(DI), AX - MOVQ $1, R9 - MOVO X8, 0(BP) - MOVO X9, 16(BP) - MOVO X10, 32(BP) - MOVO X11, 48(BP) - - MOVO X6, 80(BP) - MOVO X7, 96(BP) - // MOVQ AX, 64(BP) - CMPQ CX, $256 - JB chacha_blocks_ssse3_below256 - PSHUFD $0x00, X8, X0 - PSHUFD $0x55, X8, X1 - PSHUFD $0xaa, X8, X2 - PSHUFD $0xff, X8, X3 - MOVO X0, 128(BP) - MOVO X1, 144(BP) - MOVO X2, 160(BP) - MOVO X3, 176(BP) - PSHUFD $0x00, X9, X0 - PSHUFD $0x55, X9, X1 - PSHUFD $0xaa, X9, X2 - PSHUFD $0xff, X9, X3 - MOVO X0, 192(BP) - MOVO X1, 208(BP) - MOVO X2, 224(BP) - MOVO X3, 240(BP) - PSHUFD $0x00, X10, X0 - PSHUFD $0x55, X10, X1 - PSHUFD $0xaa, X10, X2 - PSHUFD $0xff, X10, X3 - MOVO X0, 256(BP) - MOVO X1, 272(BP) - MOVO X2, 288(BP) - MOVO X3, 304(BP) - PSHUFD $0xaa, X11, X0 - PSHUFD $0xff, X11, X1 - MOVO X0, 352(BP) - MOVO X1, 368(BP) - JMP chacha_blocks_ssse3_atleast256 - -// .p2align 6,,63 -// # align to 4 mod 64 -// nop;nop;nop;nop; -chacha_blocks_ssse3_atleast256: - MOVQ 48(BP), AX - LEAQ 1(AX), R8 - LEAQ 2(AX), R9 - LEAQ 3(AX), R10 - LEAQ 4(AX), BX - MOVL AX, 320(BP) - MOVL R8, 4+320(BP) - MOVL R9, 8+320(BP) - MOVL R10, 12+320(BP) - SHRQ $32, AX - SHRQ $32, R8 - SHRQ $32, R9 - SHRQ $32, R10 - MOVL AX, 336(BP) - MOVL R8, 4+336(BP) - MOVL R9, 8+336(BP) - MOVL R10, 12+336(BP) - MOVQ BX, 48(BP) - - // MOVQ 64(BP), AX - MOVQ $20, AX - MOVO 128(BP), X0 - MOVO 144(BP), X1 - MOVO 160(BP), X2 - MOVO 176(BP), X3 - MOVO 192(BP), X4 - MOVO 208(BP), X5 - MOVO 224(BP), X6 - MOVO 240(BP), X7 - MOVO 256(BP), X8 - MOVO 272(BP), X9 - MOVO 288(BP), X10 - MOVO 304(BP), X11 - MOVO 320(BP), X12 - MOVO 336(BP), X13 - MOVO 352(BP), X14 - MOVO 368(BP), X15 - -chacha_blocks_ssse3_mainloop1: - PADDD X4, X0 - PADDD X5, X1 - PXOR X0, X12 - PXOR X1, X13 - PADDD X6, X2 - PADDD X7, X3 - PXOR X2, X14 - PXOR X3, X15 - PSHUFB 80(BP), X12 - PSHUFB 80(BP), X13 - PADDD X12, X8 - PADDD X13, X9 - PSHUFB 80(BP), X14 - PSHUFB 80(BP), X15 - PADDD X14, X10 - PADDD X15, X11 - MOVO X12, 112(BP) - PXOR X8, X4 - PXOR X9, X5 - MOVO X4, X12 - PSLLL $ 12, X4 - PSRLL $20, X12 - PXOR X12, X4 - MOVO X5, X12 - PSLLL $ 12, X5 - PSRLL $20, X12 - PXOR X12, X5 - PXOR X10, X6 - PXOR X11, X7 - MOVO X6, X12 - PSLLL $ 12, X6 - PSRLL $20, X12 - PXOR X12, X6 - MOVO X7, X12 - PSLLL $ 12, X7 - PSRLL $20, X12 - PXOR X12, X7 - MOVO 112(BP), X12 - PADDD X4, X0 - PADDD X5, X1 - PXOR X0, X12 - PXOR X1, X13 - PADDD X6, X2 - PADDD X7, X3 - PXOR X2, X14 - PXOR X3, X15 - PSHUFB 96(BP), X12 - PSHUFB 96(BP), X13 - PADDD X12, X8 - PADDD X13, X9 - PSHUFB 96(BP), X14 - PSHUFB 96(BP), X15 - PADDD X14, X10 - PADDD X15, X11 - MOVO X12, 112(BP) - PXOR X8, X4 - PXOR X9, X5 - MOVO X4, X12 - PSLLL $ 7, X4 - PSRLL $25, X12 - PXOR X12, X4 - MOVO X5, X12 - PSLLL $ 7, X5 - PSRLL $25, X12 - PXOR X12, X5 - PXOR X10, X6 - PXOR X11, X7 - MOVO X6, X12 - PSLLL $ 7, X6 - PSRLL $25, X12 - PXOR X12, X6 - MOVO X7, X12 - PSLLL $ 7, X7 - PSRLL $25, X12 - PXOR X12, X7 - MOVO 112(BP), X12 - PADDD X5, X0 - PADDD X6, X1 - PXOR X0, X15 - PXOR X1, X12 - PADDD X7, X2 - PADDD X4, X3 - PXOR X2, X13 - PXOR X3, X14 - PSHUFB 80(BP), X15 - PSHUFB 80(BP), X12 - PADDD X15, X10 - PADDD X12, X11 - PSHUFB 80(BP), X13 - PSHUFB 80(BP), X14 - PADDD X13, X8 - PADDD X14, X9 - MOVO X15, 112(BP) - PXOR X10, X5 - PXOR X11, X6 - MOVO X5, X15 - PSLLL $ 12, X5 - PSRLL $20, X15 - PXOR X15, X5 - MOVO X6, X15 - PSLLL $ 12, X6 - PSRLL $20, X15 - PXOR X15, X6 - PXOR X8, X7 - PXOR X9, X4 - MOVO X7, X15 - PSLLL $ 12, X7 - PSRLL $20, X15 - PXOR X15, X7 - MOVO X4, X15 - PSLLL $ 12, X4 - PSRLL $20, X15 - PXOR X15, X4 - MOVO 112(BP), X15 - PADDD X5, X0 - PADDD X6, X1 - PXOR X0, X15 - PXOR X1, X12 - PADDD X7, X2 - PADDD X4, X3 - PXOR X2, X13 - PXOR X3, X14 - PSHUFB 96(BP), X15 - PSHUFB 96(BP), X12 - PADDD X15, X10 - PADDD X12, X11 - PSHUFB 96(BP), X13 - PSHUFB 96(BP), X14 - PADDD X13, X8 - PADDD X14, X9 - MOVO X15, 112(BP) - PXOR X10, X5 - PXOR X11, X6 - MOVO X5, X15 - PSLLL $ 7, X5 - PSRLL $25, X15 - PXOR X15, X5 - MOVO X6, X15 - PSLLL $ 7, X6 - PSRLL $25, X15 - PXOR X15, X6 - PXOR X8, X7 - PXOR X9, X4 - MOVO X7, X15 - PSLLL $ 7, X7 - PSRLL $25, X15 - PXOR X15, X7 - MOVO X4, X15 - PSLLL $ 7, X4 - PSRLL $25, X15 - PXOR X15, X4 - SUBQ $2, AX - MOVO 112(BP), X15 - JNZ chacha_blocks_ssse3_mainloop1 - PADDD 128(BP), X0 - PADDD 144(BP), X1 - PADDD 160(BP), X2 - PADDD 176(BP), X3 - PADDD 192(BP), X4 - PADDD 208(BP), X5 - PADDD 224(BP), X6 - PADDD 240(BP), X7 - PADDD 256(BP), X8 - PADDD 272(BP), X9 - PADDD 288(BP), X10 - PADDD 304(BP), X11 - PADDD 320(BP), X12 - PADDD 336(BP), X13 - PADDD 352(BP), X14 - PADDD 368(BP), X15 - MOVO X8, 384(BP) - MOVO X9, 400(BP) - MOVO X10, 416(BP) - MOVO X11, 432(BP) - MOVO X12, 448(BP) - MOVO X13, 464(BP) - MOVO X14, 480(BP) - MOVO X15, 496(BP) - MOVO X0, X8 - MOVO X2, X9 - MOVO X4, X10 - MOVO X6, X11 - PUNPCKHLQ X1, X0 - PUNPCKHLQ X3, X2 - PUNPCKHLQ X5, X4 - PUNPCKHLQ X7, X6 - PUNPCKLLQ X1, X8 - PUNPCKLLQ X3, X9 - PUNPCKLLQ X5, X10 - PUNPCKLLQ X7, X11 - MOVO X0, X1 - MOVO X4, X3 - MOVO X8, X5 - MOVO X10, X7 - PUNPCKHQDQ X2, X0 - PUNPCKHQDQ X6, X4 - PUNPCKHQDQ X9, X8 - PUNPCKHQDQ X11, X10 - PUNPCKLQDQ X2, X1 - PUNPCKLQDQ X6, X3 - PUNPCKLQDQ X9, X5 - PUNPCKLQDQ X11, X7 - ANDQ SI, SI - JZ chacha_blocks_ssse3_noinput1 - MOVOU 0(SI), X2 - MOVOU 16(SI), X6 - MOVOU 64(SI), X9 - MOVOU 80(SI), X11 - MOVOU 128(SI), X12 - MOVOU 144(SI), X13 - MOVOU 192(SI), X14 - MOVOU 208(SI), X15 - PXOR X2, X5 - PXOR X6, X7 - PXOR X9, X8 - PXOR X11, X10 - PXOR X12, X1 - PXOR X13, X3 - PXOR X14, X0 - PXOR X15, X4 - MOVOU X5, 0(DX) - MOVOU X7, 16(DX) - MOVOU X8, 64(DX) - MOVOU X10, 80(DX) - MOVOU X1, 128(DX) - MOVOU X3, 144(DX) - MOVOU X0, 192(DX) - MOVOU X4, 208(DX) - MOVO 384(BP), X0 - MOVO 400(BP), X1 - MOVO 416(BP), X2 - MOVO 432(BP), X3 - MOVO 448(BP), X4 - MOVO 464(BP), X5 - MOVO 480(BP), X6 - MOVO 496(BP), X7 - MOVO X0, X8 - MOVO X2, X9 - MOVO X4, X10 - MOVO X6, X11 - PUNPCKLLQ X1, X8 - PUNPCKLLQ X3, X9 - PUNPCKHLQ X1, X0 - PUNPCKHLQ X3, X2 - PUNPCKLLQ X5, X10 - PUNPCKLLQ X7, X11 - PUNPCKHLQ X5, X4 - PUNPCKHLQ X7, X6 - MOVO X8, X1 - MOVO X0, X3 - MOVO X10, X5 - MOVO X4, X7 - PUNPCKLQDQ X9, X1 - PUNPCKLQDQ X11, X5 - PUNPCKHQDQ X9, X8 - PUNPCKHQDQ X11, X10 - PUNPCKLQDQ X2, X3 - PUNPCKLQDQ X6, X7 - PUNPCKHQDQ X2, X0 - PUNPCKHQDQ X6, X4 - MOVOU 32(SI), X2 - MOVOU 48(SI), X6 - MOVOU 96(SI), X9 - MOVOU 112(SI), X11 - MOVOU 160(SI), X12 - MOVOU 176(SI), X13 - MOVOU 224(SI), X14 - MOVOU 240(SI), X15 - PXOR X2, X1 - PXOR X6, X5 - PXOR X9, X8 - PXOR X11, X10 - PXOR X12, X3 - PXOR X13, X7 - PXOR X14, X0 - PXOR X15, X4 - MOVOU X1, 32(DX) - MOVOU X5, 48(DX) - MOVOU X8, 96(DX) - MOVOU X10, 112(DX) - MOVOU X3, 160(DX) - MOVOU X7, 176(DX) - MOVOU X0, 224(DX) - MOVOU X4, 240(DX) - ADDQ $256, SI - JMP chacha_blocks_ssse3_mainloop_cont - -chacha_blocks_ssse3_noinput1: - MOVOU X5, 0(DX) - MOVOU X7, 16(DX) - MOVOU X8, 64(DX) - MOVOU X10, 80(DX) - MOVOU X1, 128(DX) - MOVOU X3, 144(DX) - MOVOU X0, 192(DX) - MOVOU X4, 208(DX) - MOVO 384(BP), X0 - MOVO 400(BP), X1 - MOVO 416(BP), X2 - MOVO 432(BP), X3 - MOVO 448(BP), X4 - MOVO 464(BP), X5 - MOVO 480(BP), X6 - MOVO 496(BP), X7 - MOVO X0, X8 - MOVO X2, X9 - MOVO X4, X10 - MOVO X6, X11 - PUNPCKLLQ X1, X8 - PUNPCKLLQ X3, X9 - PUNPCKHLQ X1, X0 - PUNPCKHLQ X3, X2 - PUNPCKLLQ X5, X10 - PUNPCKLLQ X7, X11 - PUNPCKHLQ X5, X4 - PUNPCKHLQ X7, X6 - MOVO X8, X1 - MOVO X0, X3 - MOVO X10, X5 - MOVO X4, X7 - PUNPCKLQDQ X9, X1 - PUNPCKLQDQ X11, X5 - PUNPCKHQDQ X9, X8 - PUNPCKHQDQ X11, X10 - PUNPCKLQDQ X2, X3 - PUNPCKLQDQ X6, X7 - PUNPCKHQDQ X2, X0 - PUNPCKHQDQ X6, X4 - MOVOU X1, 32(DX) - MOVOU X5, 48(DX) - MOVOU X8, 96(DX) - MOVOU X10, 112(DX) - MOVOU X3, 160(DX) - MOVOU X7, 176(DX) - MOVOU X0, 224(DX) - MOVOU X4, 240(DX) - -chacha_blocks_ssse3_mainloop_cont: - ADDQ $256, DX - SUBQ $256, CX - CMPQ CX, $256 - JAE chacha_blocks_ssse3_atleast256 - MOVO 80(BP), X6 - MOVO 96(BP), X7 - MOVO 0(BP), X8 - MOVO 16(BP), X9 - MOVO 32(BP), X10 - MOVO 48(BP), X11 - MOVQ $1, R9 - -chacha_blocks_ssse3_below256: - MOVQ R9, X5 - ANDQ CX, CX - JZ chacha_blocks_ssse3_done - CMPQ CX, $64 - JAE chacha_blocks_ssse3_above63 - MOVQ DX, R9 - ANDQ SI, SI - JZ chacha_blocks_ssse3_noinput2 - MOVQ CX, R10 - MOVQ BP, DX - ADDQ R10, SI - ADDQ R10, DX - NEGQ R10 - -chacha_blocks_ssse3_copyinput: - MOVB (SI)(R10*1), AX - MOVB AX, (DX)(R10*1) - INCQ R10 - JNZ chacha_blocks_ssse3_copyinput - MOVQ BP, SI - -chacha_blocks_ssse3_noinput2: - MOVQ BP, DX - -chacha_blocks_ssse3_above63: - MOVO X8, X0 - MOVO X9, X1 - MOVO X10, X2 - MOVO X11, X3 - - // MOVQ 64(BP), AX - MOVQ $20, AX - -chacha_blocks_ssse3_mainloop2: - PADDD X1, X0 - PXOR X0, X3 - PSHUFB X6, X3 - PADDD X3, X2 - PXOR X2, X1 - MOVO X1, X4 - PSLLL $12, X4 - PSRLL $20, X1 - PXOR X4, X1 - PADDD X1, X0 - PXOR X0, X3 - PSHUFB X7, X3 - PSHUFD $0x93, X0, X0 - PADDD X3, X2 - PSHUFD $0x4e, X3, X3 - PXOR X2, X1 - PSHUFD $0x39, X2, X2 - MOVO X1, X4 - PSLLL $7, X4 - PSRLL $25, X1 - PXOR X4, X1 - PADDD X1, X0 - PXOR X0, X3 - PSHUFB X6, X3 - PADDD X3, X2 - PXOR X2, X1 - MOVO X1, X4 - PSLLL $12, X4 - PSRLL $20, X1 - PXOR X4, X1 - PADDD X1, X0 - PXOR X0, X3 - PSHUFB X7, X3 - PSHUFD $0x39, X0, X0 - PADDD X3, X2 - PSHUFD $0x4e, X3, X3 - PXOR X2, X1 - PSHUFD $0x93, X2, X2 - MOVO X1, X4 - PSLLL $7, X4 - PSRLL $25, X1 - PXOR X4, X1 - SUBQ $2, AX - JNZ chacha_blocks_ssse3_mainloop2 - PADDD X8, X0 - PADDD X9, X1 - PADDD X10, X2 - PADDD X11, X3 - ANDQ SI, SI - JZ chacha_blocks_ssse3_noinput3 - MOVOU 0(SI), X12 - MOVOU 16(SI), X13 - MOVOU 32(SI), X14 - MOVOU 48(SI), X15 - PXOR X12, X0 - PXOR X13, X1 - PXOR X14, X2 - PXOR X15, X3 - ADDQ $64, SI - -chacha_blocks_ssse3_noinput3: - MOVOU X0, 0(DX) - MOVOU X1, 16(DX) - MOVOU X2, 32(DX) - MOVOU X3, 48(DX) - PADDQ X5, X11 - CMPQ CX, $64 - JBE chacha_blocks_ssse3_mainloop2_finishup - ADDQ $64, DX - SUBQ $64, CX - JMP chacha_blocks_ssse3_below256 - -chacha_blocks_ssse3_mainloop2_finishup: - CMPQ CX, $64 - JE chacha_blocks_ssse3_done - ADDQ CX, R9 - ADDQ CX, DX - NEGQ CX - -chacha_blocks_ssse3_copyoutput: - MOVB (DX)(CX*1), AX - MOVB AX, (R9)(CX*1) - INCQ CX - JNZ chacha_blocks_ssse3_copyoutput - -chacha_blocks_ssse3_done: - MOVOU X11, 32(DI) - - RET - -// func hChaChaSSSE3(key, nonce []byte, dst *byte) -TEXT ·hChaChaSSSE3(SB), NOSPLIT|NOFRAME, $0-56 - MOVQ key+0(FP), DI - MOVQ nonce+24(FP), SI - MOVQ dst+48(FP), DX - - MOVL $20, CX - - LEAQ ·chacha_constants<>(SB), AX - MOVO 0(AX), X0 - MOVO 16(AX), X5 - MOVO 32(AX), X6 - - MOVOU 0(DI), X1 - MOVOU 16(DI), X2 - MOVOU 0(SI), X3 - -hchacha_ssse3_mainloop: - PADDD X1, X0 - PXOR X0, X3 - PSHUFB X5, X3 - PADDD X3, X2 - PXOR X2, X1 - MOVO X1, X4 - PSLLL $12, X1 - PSRLL $20, X4 - PXOR X4, X1 - PADDD X1, X0 - PXOR X0, X3 - PSHUFB X6, X3 - PSHUFD $0X93, X0, X0 - PADDD X3, X2 - PSHUFD $0X4E, X3, X3 - PXOR X2, X1 - PSHUFD $0X39, X2, X2 - MOVO X1, X4 - PSLLL $7, X1 - PSRLL $25, X4 - PXOR X4, X1 - SUBQ $2, CX - PADDD X1, X0 - PXOR X0, X3 - PSHUFB X5, X3 - PADDD X3, X2 - PXOR X2, X1 - MOVO X1, X4 - PSLLL $12, X1 - PSRLL $20, X4 - PXOR X4, X1 - PADDD X1, X0 - PXOR X0, X3 - PSHUFB X6, X3 - PSHUFD $0X39, X0, X0 - PADDD X3, X2 - PSHUFD $0X4E, X3, X3 - PXOR X2, X1 - PSHUFD $0X93, X2, X2 - MOVO X1, X4 - PSLLL $7, X1 - PSRLL $25, X4 - PXOR X4, X1 - JA hchacha_ssse3_mainloop - - MOVOU X0, 0(DX) - MOVOU X3, 16(DX) - - RET diff --git a/vendor/blitter.com/go/chacha20/internal/ref/impl.go b/vendor/blitter.com/go/chacha20/internal/ref/impl.go deleted file mode 100644 index d3a8ca6..0000000 --- a/vendor/blitter.com/go/chacha20/internal/ref/impl.go +++ /dev/null @@ -1,374 +0,0 @@ -// Copryright (C) 2019 Yawning Angel -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -// Package ref provides the portable ChaCha20 implementation. -package ref - -import ( - "encoding/binary" - "math/bits" - - "blitter.com/go/chacha20/internal/api" -) - -const rounds = 20 - -// Impl is the reference implementation (exposed for testing). -var Impl = &implRef{} - -type implRef struct{} - -func (impl *implRef) Name() string { - return "ref" -} - -func (impl *implRef) Blocks(x *[api.StateSize]uint32, dst, src []byte, nrBlocks int) { - for n := 0; n < nrBlocks; n++ { - x0, x1, x2, x3 := api.Sigma0, api.Sigma1, api.Sigma2, api.Sigma3 - x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 := x[4], x[5], x[6], x[7], x[8], x[9], x[10], x[11], x[12], x[13], x[14], x[15] - - for i := rounds; i > 0; i -= 2 { - // quarterround(x, 0, 4, 8, 12) - x0 += x4 - x12 ^= x0 - x12 = bits.RotateLeft32(x12, 16) - x8 += x12 - x4 ^= x8 - x4 = bits.RotateLeft32(x4, 12) - x0 += x4 - x12 ^= x0 - x12 = bits.RotateLeft32(x12, 8) - x8 += x12 - x4 ^= x8 - x4 = bits.RotateLeft32(x4, 7) - - // quarterround(x, 1, 5, 9, 13) - x1 += x5 - x13 ^= x1 - x13 = bits.RotateLeft32(x13, 16) - x9 += x13 - x5 ^= x9 - x5 = bits.RotateLeft32(x5, 12) - x1 += x5 - x13 ^= x1 - x13 = bits.RotateLeft32(x13, 8) - x9 += x13 - x5 ^= x9 - x5 = bits.RotateLeft32(x5, 7) - - // quarterround(x, 2, 6, 10, 14) - x2 += x6 - x14 ^= x2 - x14 = bits.RotateLeft32(x14, 16) - x10 += x14 - x6 ^= x10 - x6 = bits.RotateLeft32(x6, 12) - x2 += x6 - x14 ^= x2 - x14 = bits.RotateLeft32(x14, 8) - x10 += x14 - x6 ^= x10 - x6 = bits.RotateLeft32(x6, 7) - - // quarterround(x, 3, 7, 11, 15) - x3 += x7 - x15 ^= x3 - x15 = bits.RotateLeft32(x15, 16) - x11 += x15 - x7 ^= x11 - x7 = bits.RotateLeft32(x7, 12) - x3 += x7 - x15 ^= x3 - x15 = bits.RotateLeft32(x15, 8) - x11 += x15 - x7 ^= x11 - x7 = bits.RotateLeft32(x7, 7) - - // quarterround(x, 0, 5, 10, 15) - x0 += x5 - x15 ^= x0 - x15 = bits.RotateLeft32(x15, 16) - x10 += x15 - x5 ^= x10 - x5 = bits.RotateLeft32(x5, 12) - x0 += x5 - x15 ^= x0 - x15 = bits.RotateLeft32(x15, 8) - x10 += x15 - x5 ^= x10 - x5 = bits.RotateLeft32(x5, 7) - - // quarterround(x, 1, 6, 11, 12) - x1 += x6 - x12 ^= x1 - x12 = bits.RotateLeft32(x12, 16) - x11 += x12 - x6 ^= x11 - x6 = bits.RotateLeft32(x6, 12) - x1 += x6 - x12 ^= x1 - x12 = bits.RotateLeft32(x12, 8) - x11 += x12 - x6 ^= x11 - x6 = bits.RotateLeft32(x6, 7) - - // quarterround(x, 2, 7, 8, 13) - x2 += x7 - x13 ^= x2 - x13 = bits.RotateLeft32(x13, 16) - x8 += x13 - x7 ^= x8 - x7 = bits.RotateLeft32(x7, 12) - x2 += x7 - x13 ^= x2 - x13 = bits.RotateLeft32(x13, 8) - x8 += x13 - x7 ^= x8 - x7 = bits.RotateLeft32(x7, 7) - - // quarterround(x, 3, 4, 9, 14) - x3 += x4 - x14 ^= x3 - x14 = bits.RotateLeft32(x14, 16) - x9 += x14 - x4 ^= x9 - x4 = bits.RotateLeft32(x4, 12) - x3 += x4 - x14 ^= x3 - x14 = bits.RotateLeft32(x14, 8) - x9 += x14 - x4 ^= x9 - x4 = bits.RotateLeft32(x4, 7) - } - - x0 += api.Sigma0 - x1 += api.Sigma1 - x2 += api.Sigma2 - x3 += api.Sigma3 - x4 += x[4] - x5 += x[5] - x6 += x[6] - x7 += x[7] - x8 += x[8] - x9 += x[9] - x10 += x[10] - x11 += x[11] - x12 += x[12] - x13 += x[13] - x14 += x[14] - x15 += x[15] - - _ = dst[api.BlockSize-1] // Force bounds check elimination. - - if src != nil { - _ = src[api.BlockSize-1] // Force bounds check elimination. - binary.LittleEndian.PutUint32(dst[0:4], binary.LittleEndian.Uint32(src[0:4])^x0) - binary.LittleEndian.PutUint32(dst[4:8], binary.LittleEndian.Uint32(src[4:8])^x1) - binary.LittleEndian.PutUint32(dst[8:12], binary.LittleEndian.Uint32(src[8:12])^x2) - binary.LittleEndian.PutUint32(dst[12:16], binary.LittleEndian.Uint32(src[12:16])^x3) - binary.LittleEndian.PutUint32(dst[16:20], binary.LittleEndian.Uint32(src[16:20])^x4) - binary.LittleEndian.PutUint32(dst[20:24], binary.LittleEndian.Uint32(src[20:24])^x5) - binary.LittleEndian.PutUint32(dst[24:28], binary.LittleEndian.Uint32(src[24:28])^x6) - binary.LittleEndian.PutUint32(dst[28:32], binary.LittleEndian.Uint32(src[28:32])^x7) - binary.LittleEndian.PutUint32(dst[32:36], binary.LittleEndian.Uint32(src[32:36])^x8) - binary.LittleEndian.PutUint32(dst[36:40], binary.LittleEndian.Uint32(src[36:40])^x9) - binary.LittleEndian.PutUint32(dst[40:44], binary.LittleEndian.Uint32(src[40:44])^x10) - binary.LittleEndian.PutUint32(dst[44:48], binary.LittleEndian.Uint32(src[44:48])^x11) - binary.LittleEndian.PutUint32(dst[48:52], binary.LittleEndian.Uint32(src[48:52])^x12) - binary.LittleEndian.PutUint32(dst[52:56], binary.LittleEndian.Uint32(src[52:56])^x13) - binary.LittleEndian.PutUint32(dst[56:60], binary.LittleEndian.Uint32(src[56:60])^x14) - binary.LittleEndian.PutUint32(dst[60:64], binary.LittleEndian.Uint32(src[60:64])^x15) - src = src[api.BlockSize:] - } else { - binary.LittleEndian.PutUint32(dst[0:4], x0) - binary.LittleEndian.PutUint32(dst[4:8], x1) - binary.LittleEndian.PutUint32(dst[8:12], x2) - binary.LittleEndian.PutUint32(dst[12:16], x3) - binary.LittleEndian.PutUint32(dst[16:20], x4) - binary.LittleEndian.PutUint32(dst[20:24], x5) - binary.LittleEndian.PutUint32(dst[24:28], x6) - binary.LittleEndian.PutUint32(dst[28:32], x7) - binary.LittleEndian.PutUint32(dst[32:36], x8) - binary.LittleEndian.PutUint32(dst[36:40], x9) - binary.LittleEndian.PutUint32(dst[40:44], x10) - binary.LittleEndian.PutUint32(dst[44:48], x11) - binary.LittleEndian.PutUint32(dst[48:52], x12) - binary.LittleEndian.PutUint32(dst[52:56], x13) - binary.LittleEndian.PutUint32(dst[56:60], x14) - binary.LittleEndian.PutUint32(dst[60:64], x15) - } - dst = dst[api.BlockSize:] - - // Stoping at 2^70 bytes per nonce is the user's responsibility. - ctr := uint64(x[13])<<32 | uint64(x[12]) - ctr++ - x[12] = uint32(ctr) - x[13] = uint32(ctr >> 32) - } -} - -func (impl *implRef) HChaCha(key, nonce []byte, dst []byte) { - // Force bounds check elimination. - _ = key[31] - _ = nonce[api.HNonceSize-1] - - x0, x1, x2, x3 := api.Sigma0, api.Sigma1, api.Sigma2, api.Sigma3 - 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]) - - // Yes, this could be carved out into a function for code reuse (TM) - // however the go inliner won't inline it. - for i := rounds; i > 0; i -= 2 { - // quarterround(x, 0, 4, 8, 12) - x0 += x4 - x12 ^= x0 - x12 = bits.RotateLeft32(x12, 16) - x8 += x12 - x4 ^= x8 - x4 = bits.RotateLeft32(x4, 12) - x0 += x4 - x12 ^= x0 - x12 = bits.RotateLeft32(x12, 8) - x8 += x12 - x4 ^= x8 - x4 = bits.RotateLeft32(x4, 7) - - // quarterround(x, 1, 5, 9, 13) - x1 += x5 - x13 ^= x1 - x13 = bits.RotateLeft32(x13, 16) - x9 += x13 - x5 ^= x9 - x5 = bits.RotateLeft32(x5, 12) - x1 += x5 - x13 ^= x1 - x13 = bits.RotateLeft32(x13, 8) - x9 += x13 - x5 ^= x9 - x5 = bits.RotateLeft32(x5, 7) - - // quarterround(x, 2, 6, 10, 14) - x2 += x6 - x14 ^= x2 - x14 = bits.RotateLeft32(x14, 16) - x10 += x14 - x6 ^= x10 - x6 = bits.RotateLeft32(x6, 12) - x2 += x6 - x14 ^= x2 - x14 = bits.RotateLeft32(x14, 8) - x10 += x14 - x6 ^= x10 - x6 = bits.RotateLeft32(x6, 7) - - // quarterround(x, 3, 7, 11, 15) - x3 += x7 - x15 ^= x3 - x15 = bits.RotateLeft32(x15, 16) - x11 += x15 - x7 ^= x11 - x7 = bits.RotateLeft32(x7, 12) - x3 += x7 - x15 ^= x3 - x15 = bits.RotateLeft32(x15, 8) - x11 += x15 - x7 ^= x11 - x7 = bits.RotateLeft32(x7, 7) - - // quarterround(x, 0, 5, 10, 15) - x0 += x5 - x15 ^= x0 - x15 = bits.RotateLeft32(x15, 16) - x10 += x15 - x5 ^= x10 - x5 = bits.RotateLeft32(x5, 12) - x0 += x5 - x15 ^= x0 - x15 = bits.RotateLeft32(x15, 8) - x10 += x15 - x5 ^= x10 - x5 = bits.RotateLeft32(x5, 7) - - // quarterround(x, 1, 6, 11, 12) - x1 += x6 - x12 ^= x1 - x12 = bits.RotateLeft32(x12, 16) - x11 += x12 - x6 ^= x11 - x6 = bits.RotateLeft32(x6, 12) - x1 += x6 - x12 ^= x1 - x12 = bits.RotateLeft32(x12, 8) - x11 += x12 - x6 ^= x11 - x6 = bits.RotateLeft32(x6, 7) - - // quarterround(x, 2, 7, 8, 13) - x2 += x7 - x13 ^= x2 - x13 = bits.RotateLeft32(x13, 16) - x8 += x13 - x7 ^= x8 - x7 = bits.RotateLeft32(x7, 12) - x2 += x7 - x13 ^= x2 - x13 = bits.RotateLeft32(x13, 8) - x8 += x13 - x7 ^= x8 - x7 = bits.RotateLeft32(x7, 7) - - // quarterround(x, 3, 4, 9, 14) - x3 += x4 - x14 ^= x3 - x14 = bits.RotateLeft32(x14, 16) - x9 += x14 - x4 ^= x9 - x4 = bits.RotateLeft32(x4, 12) - x3 += x4 - x14 ^= x3 - x14 = bits.RotateLeft32(x14, 8) - x9 += x14 - x4 ^= x9 - x4 = bits.RotateLeft32(x4, 7) - } - - // HChaCha returns x0...x3 | x12...x15, which corresponds to the - // indexes of the ChaCha constant and the indexes of the IV. - _ = dst[api.HashSize-1] // Force bounds check elimination. - binary.LittleEndian.PutUint32(dst[0:4], x0) - binary.LittleEndian.PutUint32(dst[4:8], x1) - binary.LittleEndian.PutUint32(dst[8:12], x2) - binary.LittleEndian.PutUint32(dst[12:16], x3) - binary.LittleEndian.PutUint32(dst[16:20], x12) - binary.LittleEndian.PutUint32(dst[20:24], x13) - binary.LittleEndian.PutUint32(dst[24:28], x14) - binary.LittleEndian.PutUint32(dst[28:32], x15) -} - -// Register appends the implementation to the provided slice, and returns the -// new slice. -func Register(impls []api.Implementation) []api.Implementation { - return append(impls, Impl) -} diff --git a/vendor/blitter.com/go/cryptmt/README.md b/vendor/blitter.com/go/cryptmt/README.md deleted file mode 100644 index 2f1e323..0000000 --- a/vendor/blitter.com/go/cryptmt/README.md +++ /dev/null @@ -1,6 +0,0 @@ -[![GoDoc](https://godoc.org/blitter.com/go/cryptmt?status.svg)](https://godoc.org/blitter.com/go/cryptmt) - -Implementation of cryptMTv1 stream cipher (but with mtwist64 as base accum) -https://eprint.iacr.org/2005/165.pdf - -Uses Mersenne Twister 64 golang implementation supplied by [cuixin](https://gist.github.com/cuixin): [gist](https://gist.github.com/cuixin/1b8b6bd7bfbde8fe76e8) diff --git a/vendor/blitter.com/go/cryptmt/cryptmt.go b/vendor/blitter.com/go/cryptmt/cryptmt.go deleted file mode 100644 index 3a627ed..0000000 --- a/vendor/blitter.com/go/cryptmt/cryptmt.go +++ /dev/null @@ -1,78 +0,0 @@ -// Package CryptMT - implementation of cryptMTv1 stream cipher -// (but with mtwist64 as base accum) -// https://eprint.iacr.org/2005/165.pdf -package cryptmt - -// TODO rlm: according to go docs, stream ciphers do not implement the -// cipher.Block interface at all (thus do not support Encrypt() or -// Decrypt() .. cipher.StreamReader/StreamWriter() only call -// XORKeyStream() anyhow and for my own purposes this is all that is -// required. - -import ( - "errors" - "io" - - mtwist "blitter.com/go/mtwist" -) - -type Cipher struct { - r io.Reader - w io.Writer - accum uint64 - m *mtwist.MT19937_64 -} - -func (c *Cipher) yield() (r byte) { - c.accum = c.accum * (c.m.Int63() | 1) - r = byte(c.accum>>56) & 0xFF - return -} - -// New creates and returns a Cipher. The key argument should be the -// CryptMT key, 64 bytes. -func New(r io.Reader, w io.Writer, key []byte) (c *Cipher) { - c = &Cipher{m: mtwist.New(), r: r, w: w} - c.m.SeedFullState(key) - c.accum = 1 - // from paper, discard first 64 bytes of output - for idx := 0; idx < 64; idx++ { - _ = c.yield() - } - return c -} - -func (c *Cipher) Read(p []byte) (n int, err error) { - n, err = c.r.Read(p) - if err == nil { - for idx := 0; idx < n; idx++ { - p[idx] = p[idx] ^ c.yield() - } - } - return n, err -} - -func (c *Cipher) Write(p []byte) (n int, err error) { - n, err = c.w.Write(p) - return n, err -} - -// 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 should 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, Stream -// maintains state and does not reset at each XORKeyStream call. -func (c *Cipher) XORKeyStream(dst, src []byte) { - if len(dst) < len(src) { - panic(errors.New("len(dst) < len(src)")) - } - - for i, b := range src { - dst[i] = b ^ c.yield() - } -} diff --git a/vendor/blitter.com/go/goutmp/LICENSE.mit b/vendor/blitter.com/go/goutmp/LICENSE.mit deleted file mode 100644 index 8d5754c..0000000 --- a/vendor/blitter.com/go/goutmp/LICENSE.mit +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 - 2018 Russell Magee - -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/blitter.com/go/goutmp/README.md b/vendor/blitter.com/go/goutmp/README.md deleted file mode 100644 index cb956fc..0000000 --- a/vendor/blitter.com/go/goutmp/README.md +++ /dev/null @@ -1,17 +0,0 @@ -goutmp - Minimal bindings to C stdlib pututmpx(), getutmpx() (/var/log/wtmp) and /var/log/lastlog - -Any Go program which allows user shell access should update the standard UNIX files which track user sessions: /var/log/wtmp (for the 'w' and 'who' commands), and /var/log/lastlog (the 'last' and 'lastlog' commands). - -``` -go doc -package goutmp // import "blitter.com/go/goutmp" - -Golang bindings for basic login/utmp accounting - -type UtmpEntry struct{ ... } - -func Put_lastlog_entry(app, usr, ptsname, host string) -func Unput_utmp(entry UtmpEntry) -func Put_utmp(user, ptsname, host string) UtmpEntry -``` - diff --git a/vendor/blitter.com/go/goutmp/goutmp_bsd.go b/vendor/blitter.com/go/goutmp/goutmp_bsd.go deleted file mode 100644 index 4aada2d..0000000 --- a/vendor/blitter.com/go/goutmp/goutmp_bsd.go +++ /dev/null @@ -1,136 +0,0 @@ -// +build freebsd - -// Golang bindings for basic login/utmp accounting -package goutmp - -//#include -//#include -//#include -//#include -//#include -//#include -//#include -//#include -// -//#include -// -//typedef char char_t; -// -//void pututmpx(struct utmpx* entry, char* uname, char* ptsname, char* host) { -// entry->ut_type = USER_PROCESS; -// entry->ut_pid = getpid(); -// strcpy(entry->ut_line, ptsname + strlen("/dev/")); -// -// strcpy(entry->ut_id, ptsname + strlen("/dev/pts/")); -// -// //entry->ut_time = time(NULL); -// strcpy(entry->ut_user, uname); -// strcpy(entry->ut_host, host); -// //entry->ut_addr = 0; -// setutxent(); -// pututxline(entry); -//} -// -//void unpututmpx(struct utmpx* entry) { -// entry->ut_type = DEAD_PROCESS; -// entry->ut_line[0] = '\0'; -// //entry->ut_time = 0; -// entry->ut_user[0] = '\0'; -// setutxent(); -// pututxline(entry); -// -// endutxent(); -//} -// -//#if 0 -//int putlastlogentry(int64_t t, int uid, char* line, char* host) { -// int retval = 0; -// FILE *f; -// struct lastlog l; -// -// strncpy(l.ll_line, line, UT_LINESIZE); -// l.ll_line[UT_LINESIZE-1] = '\0'; -// strncpy(l.ll_host, host, UT_HOSTSIZE); -// l.ll_host[UT_HOSTSIZE-1] = '\0'; -// -// l.ll_time = (time_t)t; -// //printf("l: ll_line '%s', ll_host '%s', ll_time %d\n", l.ll_line, l.ll_host, l.ll_time); -// -// /* Write lastlog entry at fixed offset (uid * sizeof(struct lastlog) */ -// if( NULL != (f = fopen("/var/log/lastlog", "rw+")) ) { -// if( !fseek(f, (uid * sizeof(struct lastlog)), SEEK_SET) ) { -// int fd = fileno(f); -// if( write(fd, &l, sizeof(l)) == sizeof(l) ) { -// retval = 1; -// //int32_t stat = system("echo ---- lastlog ----; lastlog"); -// } -// } -// fclose(f); -// } -// return retval; -//} -//#else -//int putlastlogentry(int64_t t, int uid, char* line, char* host) { -// return 0; -//} -//#endif -import "C" - -import ( - "fmt" - "net" - "os/user" - "strings" - "time" -) - -// UtmpEntry wraps the C struct utmp -type UtmpEntry struct { - entry C.struct_utmpx -} - -// return remote client hostname or IP if host lookup fails -// addr is expected to be of the format given by net.Addr.String() -// eg., "127.0.0.1:80" or "[::1]:80" -func GetHost(addr string) (h string) { - if !strings.Contains(addr, "[") { - h = strings.Split(addr, ":")[0] - } else { - h = strings.Split(strings.Split(addr, "[")[1], "]")[0] - } - hList, e := net.LookupAddr(h) - //fmt.Printf("lookupAddr:%v\n", hList) - if e == nil { - h = hList[0] - } - return -} - -// Put a username and the originating host/IP to utmp -func Put_utmp(user, ptsName, host string) UtmpEntry { - var entry UtmpEntry - - //log.Println("Put_utmp:host ", host, " user ", user) - C.pututmpx(&entry.entry, C.CString(user), C.CString(ptsName), C.CString(host)) - return entry -} - -// Remove a username/host entry from utmp -func Unput_utmp(entry UtmpEntry) { - C.unpututmpx(&entry.entry) -} - -// Put the login app, username and originating host/IP to lastlog -func Put_lastlog_entry(app, usr, ptsname, host string) { - u, e := user.Lookup(usr) - if e != nil { - return - } - var uid uint32 - fmt.Sscanf(u.Uid, "%d", &uid) - - t := time.Now().Unix() - _ = C.putlastlogentry(C.int64_t(t), C.int(uid), C.CString(app), C.CString(host)) - //stat := C.putlastlogentry(C.int64_t(t), C.int(uid), C.CString(app), C.CString(host)) - //fmt.Println("stat was:",stat) -} diff --git a/vendor/blitter.com/go/goutmp/goutmp_linux.go b/vendor/blitter.com/go/goutmp/goutmp_linux.go deleted file mode 100644 index 10513b2..0000000 --- a/vendor/blitter.com/go/goutmp/goutmp_linux.go +++ /dev/null @@ -1,132 +0,0 @@ -// +build linux - -// Golang bindings for basic login/utmp accounting -package goutmp - -//#include -//#include -//#include -//#include -//#include -//#include -//#include -//#include -// -//#include -//#include -// -//typedef char char_t; -// -// -//void pututmp(struct utmp* entry, char* uname, char* ptsname, char* host) { -// entry->ut_type = USER_PROCESS; -// entry->ut_pid = getpid(); -// strcpy(entry->ut_line, ptsname + strlen("/dev/")); -// -// strcpy(entry->ut_id, ptsname + strlen("/dev/pts/")); -// -// entry->ut_time = time(NULL); -// strcpy(entry->ut_user, uname); -// strcpy(entry->ut_host, host); -// entry->ut_addr = 0; -// setutent(); -// pututline(entry); -//} -// -//void unpututmp(struct utmp* entry) { -// entry->ut_type = DEAD_PROCESS; -// memset(entry->ut_line, 0, UT_LINESIZE); -// entry->ut_time = 0; -// memset(entry->ut_user, 0, UT_NAMESIZE); -// setutent(); -// pututline(entry); -// -// endutent(); -//} -// -//int putlastlogentry(int64_t t, int uid, char* line, char* host) { -// int retval = 0; -// FILE *f; -// struct lastlog l; -// -// strncpy(l.ll_line, line, UT_LINESIZE); -// l.ll_line[UT_LINESIZE-1] = '\0'; -// strncpy(l.ll_host, host, UT_HOSTSIZE); -// l.ll_host[UT_HOSTSIZE-1] = '\0'; -// -// l.ll_time = (time_t)t; -// //printf("l: ll_line '%s', ll_host '%s', ll_time %d\n", l.ll_line, l.ll_host, l.ll_time); -// -// /* Write lastlog entry at fixed offset (uid * sizeof(struct lastlog) */ -// if( NULL != (f = fopen("/var/log/lastlog", "rw+")) ) { -// if( !fseek(f, (uid * sizeof(struct lastlog)), SEEK_SET) ) { -// int fd = fileno(f); -// if( write(fd, &l, sizeof(l)) == sizeof(l) ) { -// retval = 1; -// //int32_t stat = system("echo ---- lastlog ----; lastlog"); -// } -// } -// fclose(f); -// } -// return retval; -//} -import "C" - -import ( - "fmt" - "net" - "os/user" - "strings" - "time" -) - -// UtmpEntry wraps the C struct utmp -type UtmpEntry struct { - entry C.struct_utmp -} - -// return remote client hostname or IP if host lookup fails -// addr is expected to be of the format given by net.Addr.String() -// eg., "127.0.0.1:80" or "[::1]:80" -func GetHost(addr string) (h string) { - if !strings.Contains(addr, "[") { - h = strings.Split(addr, ":")[0] - } else { - h = strings.Split(strings.Split(addr, "[")[1], "]")[0] - } - hList, e := net.LookupAddr(h) - //fmt.Printf("lookupAddr:%v\n", hList) - if e == nil { - h = hList[0] - } - return -} - -// Put a username and the originating host/IP to utmp -func Put_utmp(user, ptsName, host string) UtmpEntry { - var entry UtmpEntry - - //log.Println("Put_utmp:host ", host, " user ", user) - C.pututmp(&entry.entry, C.CString(user), C.CString(ptsName), C.CString(host)) - return entry -} - -// Remove a username/host entry from utmp -func Unput_utmp(entry UtmpEntry) { - C.unpututmp(&entry.entry) -} - -// Put the login app, username and originating host/IP to lastlog -func Put_lastlog_entry(app, usr, ptsname, host string) { - u, e := user.Lookup(usr) - if e != nil { - return - } - var uid uint32 - fmt.Sscanf(u.Uid, "%d", &uid) - - t := time.Now().Unix() - _ = C.putlastlogentry(C.int64_t(t), C.int(uid), C.CString(app), C.CString(host)) - //stat := C.putlastlogentry(C.int64_t(t), C.int(uid), C.CString(app), C.CString(host)) - //fmt.Println("stat was:",stat) -} diff --git a/vendor/blitter.com/go/groestl/README.md b/vendor/blitter.com/go/groestl/README.md deleted file mode 100644 index 89c2dc0..0000000 --- a/vendor/blitter.com/go/groestl/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# groestl - -Grøstl hash function implementation in golang - -## Usage - -groestl library implements standard `hash.Hash` interface. - -You can also run it from command-line: -``` -$ ./groestl -Usage: - ./groestl [options] path/to/file - -Options: - -hash int - output hash length (default 256) -``` - -To compile simply run `go build` in the root directory. diff --git a/vendor/blitter.com/go/groestl/groestl.go b/vendor/blitter.com/go/groestl/groestl.go deleted file mode 100644 index 953f22f..0000000 --- a/vendor/blitter.com/go/groestl/groestl.go +++ /dev/null @@ -1,190 +0,0 @@ -// Package groestl provides core groestl functionality. It's based on groestl's -// implementation guide with references in C code. -package groestl - -import ( - "encoding/binary" - "fmt" - "hash" -) - -// Toggle verbose output with detailed description of every algorithm's step -const VERBOSE = false - -// Struct digest is being used during algorithm execution. Provides easy -// access to all information about current state of data processing. -type digest struct { - hashbitlen int - chaining [16]uint64 - blocks uint64 - buf [128]byte - nbuf int - columns int - rounds int -} - -// Equivalent to Init from reference implementation. Initiates values -// for digest struct, therefore determines exact type of groestl algorithm. -func (d *digest) Reset() { - for i, _ := range d.chaining { - d.chaining[i] = 0 - } - - d.blocks = 0 - d.nbuf = 0 - - if d.hashbitlen <= 256 { - d.columns = 8 - d.rounds = 10 - } else { - d.columns = 16 - d.rounds = 14 - } - - d.chaining[d.columns-1] = uint64(d.hashbitlen) -} - -// Each New...() function creates new hash digest and initiates it -// for according hash size. -func New224() hash.Hash { - d := new(digest) - d.hashbitlen = 224 - d.Reset() - return d -} - -func New256() hash.Hash { - d := new(digest) - d.hashbitlen = 256 - d.Reset() - return d -} - -func New384() hash.Hash { - d := new(digest) - d.hashbitlen = 384 - d.Reset() - return d -} - -func New512() hash.Hash { - d := new(digest) - d.hashbitlen = 512 - d.Reset() - return d -} - -// Default function for creating hash digest for 256bit groestl. -func New() hash.Hash { - return New256() -} - -// Return size of digest -func (d *digest) Size() int { - return d.hashbitlen -} - -// Return block size for digest. For hash bigger than 256 bit block -// size is 128, otherwise it's 64. -func (d *digest) BlockSize() int { - if d.hashbitlen <= 256 { - return 64 - } else { - return 128 - } -} - -// Equivalent to Update form reference implementation. Performs processing -// on all data except the last block that might need padding. -func (d *digest) Write(p []byte) (n int, err error) { - n = len(p) - if d.nbuf > 0 { - nn := copy(d.buf[d.nbuf:], p) - d.nbuf += nn - if d.nbuf == d.BlockSize() { - err = d.transform(d.buf[:d.BlockSize()]) - if err != nil { - panic(err) - } - d.nbuf = 0 - } - p = p[nn:] - } - if len(p) >= d.BlockSize() { - nn := len(p) &^ (d.BlockSize() - 1) - err = d.transform(p[:nn]) - if err != nil { - panic(err) - } - p = p[nn:] - } - if len(p) > 0 { - d.nbuf = copy(d.buf[:], p) - } - return -} - -func (d *digest) Sum(in []byte) []byte { - d0 := *d - hash := d0.checkSum() - fmt.Printf("groestl-hash:len:%b %v\r\n", len(hash), hash) - return append(in, hash...) -} - -// Equivalent to Final from reference implementation. Creates padding -// for last block of data and performs final output transformation and trumcate. -// Returns hash value. -func (d *digest) checkSum() []byte { - bs := d.BlockSize() - var tmp [128]byte - tmp[0] = 0x80 - - if d.nbuf > (bs - 8) { - d.Write(tmp[:(bs - d.nbuf)]) - d.Write(tmp[8:bs]) - } else { - d.Write(tmp[0:(bs - d.nbuf - 8)]) - } - - binary.BigEndian.PutUint64(tmp[:], d.blocks+1) - d.Write(tmp[:8]) - - if d.nbuf != 0 { - panic("padding failed") - } - - d.finalTransform() - - // store chaining in output byteslice - hash := make([]byte, d.columns*4) - for i := 0; i < d.columns/2; i++ { - binary.BigEndian.PutUint64(hash[(i*8):(i+1)*8], d.chaining[i+(d.columns/2)]) - } - hash = hash[(len(hash) - d.hashbitlen/8):] - return hash -} - -// Each Sum...() function returns according hash value for provided data. -func Sum224(data []byte) []byte { - d := New224().(*digest) - d.Write(data) - return d.checkSum() -} - -func Sum256(data []byte) []byte { - d := New256().(*digest) - d.Write(data) - return d.checkSum() -} - -func Sum384(data []byte) []byte { - d := New384().(*digest) - d.Write(data) - return d.checkSum() -} - -func Sum512(data []byte) []byte { - d := New512().(*digest) - d.Write(data) - return d.checkSum() -} diff --git a/vendor/blitter.com/go/groestl/round.go b/vendor/blitter.com/go/groestl/round.go deleted file mode 100644 index a32c1b1..0000000 --- a/vendor/blitter.com/go/groestl/round.go +++ /dev/null @@ -1,217 +0,0 @@ -package groestl - -import ( - "encoding/binary" - "fmt" -) - -func buildColumns(data []byte, cols chan uint64) { - for i, l := 8, len(data); i <= l; i += 8 { - cols <- binary.BigEndian.Uint64(data[i-8 : i]) - } - close(cols) -} - -// Performs compression function. Returns nil on success, error otherwise. -func (d *digest) transform(data []byte) error { - if (len(data) % d.BlockSize()) != 0 { - return fmt.Errorf("data len in transform is not a multiple of BlockSize") - } - - cols := make(chan uint64) - go buildColumns(data, cols) - - eb := d.blocks + uint64(len(data)/d.BlockSize()) - for d.blocks < eb { - m := make([]uint64, d.columns) - hxm := make([]uint64, d.columns) - - for i := 0; i < d.columns; i++ { - m[i] = <-cols - hxm[i] = d.chaining[i] ^ m[i] - } - - if VERBOSE { - fmt.Println("\n========================================\n") - fmt.Println("Block Contents:") - printUintSlice(m) - fmt.Println() - } - - hxm = round(d, hxm, 'P') - m = round(d, m, 'Q') - - for i := 0; i < d.columns; i++ { - d.chaining[i] ^= hxm[i] ^ m[i] - } - - d.blocks += 1 - - if VERBOSE { - fmt.Println("P(h+m) + Q(m) + h =") - printUintSlice(d.chaining[:d.columns]) - fmt.Println() - } - } - - return nil -} - -// Performs last compression. After this function, data -// is ready for truncation. -func (d *digest) finalTransform() { - h := make([]uint64, d.columns) - - for i := 0; i < d.columns; i++ { - h[i] = d.chaining[i] - } - - if VERBOSE { - fmt.Println("\n========================================\n") - fmt.Println("Output transformation:\n") - } - - h = round(d, h, 'P') - - for i := 0; i < d.columns; i++ { - d.chaining[i] ^= h[i] - } - - d.blocks += 1 - - if VERBOSE { - fmt.Println("P(h) + h =") - printUintSlice(d.chaining[:d.columns]) - fmt.Println("\n---------------------------------------\n") - } -} - -// Performs whole set of rounds on data provided in x. Variant denotes type -// of permutation being performed. P and Q are for groestl-512 -// and lowercase are for groestl-256 -func round(d *digest, x []uint64, variant rune) []uint64 { - if VERBOSE { - fmt.Println(":: BEGIN " + string(variant)) - defer fmt.Println(":: END " + string(variant) + "\n") - fmt.Println("Input:") - printUintSlice(x) - } - - if d.BlockSize() == 64 { - // for smaller blocksize change variant to lowercase letter - variant += 0x20 - } - - for i := 0; i < d.rounds; i++ { - x = addRoundConstant(x, i, variant) - if VERBOSE { - fmt.Printf("t=%d (AddRoundConstant):\n", i) - printUintSlice(x) - } - x = subBytes(x) - if VERBOSE { - fmt.Printf("t=%d (SubBytes):\n", i) - printUintSlice(x) - } - x = shiftBytes(x, variant) - if VERBOSE { - fmt.Printf("t=%d (ShiftBytes):\n", i) - printUintSlice(x) - } - x = mixBytes(x) - if VERBOSE { - fmt.Printf("t=%d (MixBytes):\n", i) - printUintSlice(x) - } - } - - return x -} - -// AddRoundConstant transformation for data provided in x. Variant denotes type -// of permutation being performed. P and Q are for groestl-512 -// and lowercase are for groestl-256 -func addRoundConstant(x []uint64, r int, variant rune) []uint64 { - switch variant { - case 'P', 'p': - for i, l := 0, len(x); i < l; i++ { - // byte from row 0: ((col >> (8*7)) & 0xFF) - // we want to xor the byte below with row 0 - // therefore we have to shift it by 8*7 bits - x[i] ^= uint64((i<<4)^r) << (8 * 7) - } - case 'Q', 'q': - for i, l := 0, len(x); i < l; i++ { - x[i] ^= ^uint64(0) ^ uint64((i<<4)^r) - } - } - return x -} - -// SubBytes transformation for data provided in x. -func subBytes(x []uint64) []uint64 { - var newCol [8]byte - for i, l := 0, len(x); i < l; i++ { - for j := 0; j < 8; j++ { - newCol[j] = sbox[pickRow(x[i], j)] - } - x[i] = binary.BigEndian.Uint64(newCol[:]) - } - return x -} - -// ShiftBytes transformation for data provided in x. Variant denotes type -// of permutation being performed. P and Q are for groestl-512 -// and lowercase are for groestl-256 -func shiftBytes(x []uint64, variant rune) []uint64 { - var shiftVector [8]int - switch variant { - case 'p': - shiftVector = [8]int{0, 1, 2, 3, 4, 5, 6, 7} - case 'P': - shiftVector = [8]int{0, 1, 2, 3, 4, 5, 6, 11} - case 'q': - shiftVector = [8]int{1, 3, 5, 7, 0, 2, 4, 6} - case 'Q': - shiftVector = [8]int{1, 3, 5, 11, 0, 2, 4, 6} - } - l := len(x) - ret := make([]uint64, l) - for i := 0; i < l; i++ { - ret[i] = uint64(pickRow(x[(i+shiftVector[0])%l], 0)) - for j := 1; j < 8; j++ { - ret[i] <<= 8 - ret[i] ^= uint64(pickRow(x[(i+shiftVector[j])%l], j)) - } - } - return ret -} - -// MixBytes transformation for data provided in x. -func mixBytes(x []uint64) []uint64 { - // this part is tricky - // so here comes yet another rough translation straight from reference implementation - - mul2 := func(b uint8) uint8 { return uint8((b << 1) ^ (0x1B * ((b >> 7) & 1))) } - mul3 := func(b uint8) uint8 { return (mul2(b) ^ (b)) } - mul4 := func(b uint8) uint8 { return mul2(mul2(b)) } - mul5 := func(b uint8) uint8 { return (mul4(b) ^ (b)) } - mul7 := func(b uint8) uint8 { return (mul4(b) ^ mul2(b) ^ (b)) } - - var temp [8]uint8 - for i, l := 0, len(x); i < l; i++ { - for j := 0; j < 8; j++ { - temp[j] = - mul2(pickRow(x[i], (j+0)%8)) ^ - mul2(pickRow(x[i], (j+1)%8)) ^ - mul3(pickRow(x[i], (j+2)%8)) ^ - mul4(pickRow(x[i], (j+3)%8)) ^ - mul5(pickRow(x[i], (j+4)%8)) ^ - mul3(pickRow(x[i], (j+5)%8)) ^ - mul5(pickRow(x[i], (j+6)%8)) ^ - mul7(pickRow(x[i], (j+7)%8)) - } - x[i] = binary.BigEndian.Uint64(temp[:]) - } - return x -} diff --git a/vendor/blitter.com/go/groestl/sbox.go b/vendor/blitter.com/go/groestl/sbox.go deleted file mode 100644 index 207d405..0000000 --- a/vendor/blitter.com/go/groestl/sbox.go +++ /dev/null @@ -1,20 +0,0 @@ -package groestl - -var sbox = [256]byte{ - 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, - 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, - 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, - 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, - 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, - 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, - 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, - 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, - 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, - 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, - 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, - 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, - 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, - 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, - 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, - 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16, -} diff --git a/vendor/blitter.com/go/groestl/util.go b/vendor/blitter.com/go/groestl/util.go deleted file mode 100644 index 72b19c4..0000000 --- a/vendor/blitter.com/go/groestl/util.go +++ /dev/null @@ -1,28 +0,0 @@ -package groestl - -import ( - "encoding/hex" - "fmt" -) - -// Function for printing hash output from groestl.Sum() -func PrintHash(hash []byte) { - fmt.Println(hex.EncodeToString(hash)) -} - -// Helper function for returning i'th row from provided -// uint64 -func pickRow(col uint64, i int) byte { - return byte((col >> (8 * (7 - i))) & 0xFF) -} - -// Prints provided x slice in form of block. -func printUintSlice(x []uint64) { - l := len(x) - for i := 0; i < 8; i++ { - for j := 0; j < l; j++ { - fmt.Printf("%02x ", pickRow(x[j], i)) - } - fmt.Println() - } -} diff --git a/vendor/blitter.com/go/herradurakex/LICENSE.gpl b/vendor/blitter.com/go/herradurakex/LICENSE.gpl deleted file mode 100644 index 94a9ed0..0000000 --- a/vendor/blitter.com/go/herradurakex/LICENSE.gpl +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/vendor/blitter.com/go/herradurakex/LICENSE.mit b/vendor/blitter.com/go/herradurakex/LICENSE.mit deleted file mode 100644 index 4acc92f..0000000 --- a/vendor/blitter.com/go/herradurakex/LICENSE.mit +++ /dev/null @@ -1,22 +0,0 @@ -MIT License - -Copyright (c) 2017 - 2018 Omar Alejandro Herrera Reyna (core HerraduraKEx) -Copyright (c) 2017 - 2018 Russell Magee (hkexsh/hkexshd/hkexpasswd) - -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/blitter.com/go/herradurakex/Makefile b/vendor/blitter.com/go/herradurakex/Makefile deleted file mode 100644 index e59fbc7..0000000 --- a/vendor/blitter.com/go/herradurakex/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -.PHONY: info clean all lib - -all: lib - -clean: - go clean . - -lib: info - go install . - -ifneq ($(MSYSTEM),) -info: - @echo "building for Windows (MSYS)" -else -info: - @echo "building for Linux" -endif diff --git a/vendor/blitter.com/go/herradurakex/README.md b/vendor/blitter.com/go/herradurakex/README.md deleted file mode 100644 index 82b7368..0000000 --- a/vendor/blitter.com/go/herradurakex/README.md +++ /dev/null @@ -1 +0,0 @@ -HerraduraKEx - an experimental Key Encapsulation Mechanism diff --git a/vendor/blitter.com/go/herradurakex/herradurakex.go b/vendor/blitter.com/go/herradurakex/herradurakex.go deleted file mode 100644 index 9621e94..0000000 --- a/vendor/blitter.com/go/herradurakex/herradurakex.go +++ /dev/null @@ -1,182 +0,0 @@ -// Package hkex - an experimental key exchange algorithm -// by Omar Alejandro Herrera Reyna. -// -// (https://github.com/Caume/HerraduraKEx) -// -// The core HerraduraKEx algorithm is dual-licensed -// by the author (Omar Alejandro Herrera Reyna) -// under GPL3 and MIT licenses. -// See LICENSE.gpl and LICENSE.mit in this distribution -// -// Go implementation Copyright (c) 2017-2018 Russell Magee -// (rmagee_at_gmail_com) -// Licensed under the terms of the MIT license -// See LICENSE.mit in this distribution -package hkex - -/* Herradura - a Key exchange scheme in the style of Diffie-Hellman Key Exchange. - Copyright (C) 2017 Omar Alejandro Herrera Reyna - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - golang implementation by Russ Magee (rmagee_at_gmail.com) */ - -/* This is the core KEx algorithm. For client/server net support code, -See the hkexnet package (currently a sub-package of hkexsh) for a -golang/pkg/net compatible Conn interface using this to negotiate keys and -secure a network channel. */ - -import ( - "fmt" - "math/big" - "math/rand" - "time" -) - -// HerraduraKEx holds the session state for a key exchange. -type HerraduraKEx struct { - intSz, pubSz int - randctx *rand.Rand - a *big.Int - b *big.Int - d, peerD *big.Int - fa *big.Int -} - -// New returns a HerraduraKEx struct. -// -// i - internal (private) random nonce -// p - public (exchanged) random nonce (typically 1/4 bitsize of i) -// -// If i or p are passed as zero, they will default to 256 and 64, -// respectively. -func New(i int, p int) (h *HerraduraKEx) { - h = new(HerraduraKEx) - - if i == 0 { - i = 256 - } - if p == 0 { - p = 64 - } - - h.intSz = i - h.pubSz = p - - h.seed() - h.a = h.rand() - h.b = h.rand() - - h.d = h.fscxRevolve(h.a, h.b, h.pubSz) - return h -} - -func (h *HerraduraKEx) seed() { - r := rand.New(rand.NewSource(time.Now().UnixNano())) - h.randctx = r -} - -func (h *HerraduraKEx) rand() (v *big.Int) { - v = big.NewInt(0) - v.Rand(h.randctx, h.getMax()) - return v -} - -// getMax returns the max value for an n-bit big.Int -func (h *HerraduraKEx) getMax() (n *big.Int) { - n = big.NewInt(0) - var max big.Int - - for i := 0; i < h.intSz; i++ { - max.SetBit(n, i, 1) - } - n = &max - return n -} - -func (h *HerraduraKEx) bitX(x *big.Int, pos int) (ret int64) { - if pos < 0 { - pos = h.intSz - pos - } - - if pos == 0 { - ret = int64(x.Bit(1) ^ x.Bit(0) ^ x.Bit(h.intSz-1)) - } else if pos == h.intSz-1 { - ret = int64(x.Bit(0) ^ x.Bit(pos) ^ x.Bit(pos-1)) - } else { - ret = int64(x.Bit((pos+1)%h.intSz) ^ x.Bit(pos) ^ x.Bit(pos-1)) - } - return ret -} - -func (h *HerraduraKEx) bit(up, down *big.Int, posU, posD int) (ret *big.Int) { - return big.NewInt(h.bitX(up, posU) ^ h.bitX(down, posD)) -} - -func (h *HerraduraKEx) fscx(up, down *big.Int) (result *big.Int) { - result = big.NewInt(0) - - for count := 0; count < h.intSz; count++ { - result.Lsh(result, 1) - result.Add(result, h.bit(up, down, count, count)) - } - return result -} - -// This is the iteration function using the result of the previous iteration -// as the first parameter and the second parameter of the first iteration. -func (h *HerraduraKEx) fscxRevolve(x, y *big.Int, passes int) (result *big.Int) { - result = x - for count := 0; count < passes; count++ { - result = h.fscx(result, y) - } - return result -} - -// D returns the D (FSCX Revolved) value, input to generate FA -// (the value for peer KEx) -func (h HerraduraKEx) D() *big.Int { - return h.d -} - -// PeerD returns the peer D value -func (h HerraduraKEx) PeerD() *big.Int { - return h.peerD -} - -// SetPeerD stores the received peer's D value (contents, not ptr) -func (h *HerraduraKEx) SetPeerD(pd *big.Int) { - h.peerD = new(big.Int).Set(pd) -} - -// ComputeFA computes the FA value, which must be sent to peer for KEx. -func (h *HerraduraKEx) ComputeFA() { - h.fa = h.fscxRevolve(h.peerD, h.b, h.intSz-h.pubSz) - h.fa.Xor(h.fa, h.a) -} - -// FA returns the computed FA value -func (h HerraduraKEx) FA() *big.Int { - return h.fa -} - -// Output HerraduraKEx type value as a string. Implements Stringer interface. -func (h *HerraduraKEx) String() string { - return fmt.Sprintf("s:%d p:%d\na:%s\nb:%s\nd:->%s\n<-peerD:%s\nfa:%s", - h.intSz, h.pubSz, - h.a.Text(16), h.b.Text(16), - h.d.Text(16), - h.peerD.Text(16), - h.fa.Text(16)) -} diff --git a/vendor/blitter.com/go/hopscotch/README.md b/vendor/blitter.com/go/hopscotch/README.md deleted file mode 100644 index 735c42e..0000000 --- a/vendor/blitter.com/go/hopscotch/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# hopscotch - -Experimental cipher using multiple hash algs for keystream. - -The cipher uses multiple trusted hash algorithms, each updated on a schedule (the security factor, 1 to 10) based initially on the secret key, then on random data from a PRNG (currently MTWIST-64, also seeded from the secret key). The XOR value used to encrypt plaintext is picked from bytes of the hash outputs (being appended together into a single pool P), the hash output byte chosen used then as a modulus value to 'hop' to the next XOR value within P (hence the name 'hopscotch'). - -The security of the algorithm is premised on the following axioms: - -1. all hash algorithms used are sufficiently unpredictable in their output based on given input (most importantly the initial key as input to the PRNG and its seeded output); -2. the PRNG is sufficiently random so as to guarantee subsequent input to all hash algorithms used as potential keystream pool bytes for XOR operations is not predictable; -3. the keystream (being the hash outputs at a given time for all hash algorithms used) is re-keyed often enough to prevent excessive re-use of bytes ('excessive' being defined by the strength parameter, restricted from 1 to 10 inclusive by empirical analysis) - -Current implementation uses 2 hash algorithms, SHA512 and BLAKE2B, both giving outputs of fixed-length = 64 bytes. Empirically, using security factors ranging from 1 to 10 (count of input bytes encrypted before re-keying by feeding 32 bytes of PRNG data to derive new hash output XOR pool P) it is unlikely that 64 picks from the pool would re-use the same bytes often enough to compromise security. Tests with the ['circle' analysis tool](https://github.com/circulosmeos/circle) and the 'Tux.ppm' image test indicate ciphertext does not resemble plaintext in any obvious manner. (TODO: diehard tests or others?) - -The use purely of a PRNG plus two or more already-proven hash algorithms as keystream pool material offers a simply-verified security-primitive basis for confidence, plus easy extendability by adding more hash algorithms to the keystream pool P, without complexity of a full re-analysis. So long as each individual hash algorithm is considered safe, hopping between and within the output bytes of each to derive keystream XOR material should also be safe so long as hash output bytes are not re-used extensively. - - -Throughput --- -On a modest test AMD (Linux amd_x64) encryption rates of approx. 140Mbits/s are achieved (-m 4). As this is a pure Go implementation and little effort has been put into optimization it is reasonable to expect higher rates could be achieved in the future. - -``` -$ time ./cmd -k "SuperSecret#@11ElevenTy" blank700MBenc.bin - -real 0m40.096s -user 0m38.318s -sys 0m2.133s - -``` \ No newline at end of file diff --git a/vendor/blitter.com/go/hopscotch/hopscotch.go b/vendor/blitter.com/go/hopscotch/hopscotch.go deleted file mode 100644 index d462344..0000000 --- a/vendor/blitter.com/go/hopscotch/hopscotch.go +++ /dev/null @@ -1,186 +0,0 @@ -// Package hopscotch - a crypto doodle that uses multiple hash -// algorithm outputs as dynamic sbox/pbox material -// -// Properties visualized using https://github.com/circulosmeos/circle -package hopscotch - -// TODOs: -// -define s-box rotation/shuffle schema -// -devise p-box schema -// ... - -import ( - "errors" - "fmt" - "hash" - "io" - "time" - - mtwist "blitter.com/go/mtwist" // Used to derive hash fodder after seeding w/key - - // hash algos must be manually imported thusly: - // (Would be nice if the golang pkg docs were more clear - // on this...) - "crypto/sha512" - _ "crypto/sha512" - - b2b "golang.org/x/crypto/blake2b" - groestl "blitter.com/go/groestl" -) - -const ( - maxResched = 99 // above 20 starts to show outlines in 'tuxtest' ... so 10 max -) - -type Cipher struct { - resched int // lower (1) == stronger encryption; weakest (10) == weakest - rounds int - prng *mtwist.MT19937_64 // used to gen initial hash fodder from key - h []hash.Hash - hs []byte - r io.Reader - w io.Writer - idx int - ctr int - rekeyCtr int // must be min of len( c.h[] ) - bTmp byte - k []byte -} - -func New(r io.Reader, w io.Writer, resched int, key []byte) (c *Cipher) { - if resched < 1 || resched > maxResched { - resched = 4 - } - - c = &Cipher{} - c.resched = resched - c.rounds = 1 - c.prng = mtwist.New() - c.r = r - c.w = w - - if len(key) == 0 { - c.k = []byte(fmt.Sprintf("%s", time.Now())) - } else { - c.k = key - } - c.prng.SeedFullState(c.k) - - // Discard first 64 bytes of MT output - for idx := 0; idx < 64; idx++ { - _ = c.prng.Int63() - } - - // Init all the hash algs we're going to 'hop' around with initial keystream - c.h = make([]hash.Hash, 3) - c.h[0] = sha512.New() - c.h[1], _ = b2b.New512(c.k) - c.h[2] = groestl.New512() - c.keyUpdate(c.k) - - c.rekeyCtr = len(c.hs) * c.resched // lower multiplier == greater security, lower speed - //fmt.Fprintf(os.Stderr, "rekeyCtr = %v\n", c.rekeyCtr) - return c -} - -func (c *Cipher) Read(p []byte) (n int, err error) { - n, err = c.r.Read(p) - if err == nil { - for idx := 0; idx < n; idx++ { - p[idx] = c.yield(p[idx]) - } - } - return n, err -} - -func (c *Cipher) Write(p []byte) (n int, err error) { - n, err = c.w.Write(p) - return n, err -} - -// Mutate the session key (intended to be called as encryption proceeds) -func (c *Cipher) keyUpdate(data []byte) { - //fmt.Fprintln(os.Stderr, "--rekey--") - { - c.h[0].Write(data) - sliceTmp := sha512.Sum512(data) - c.hs = sliceTmp[:] - } - { - c.h[1].Write(data) - sliceTmp := b2b.Sum512(data) - c.hs = append(c.hs, sliceTmp[:]...) - } - { - c.h[2].Write(data) - sliceTmp := groestl.Sum512(data) - c.hs = append(c.hs, sliceTmp[:]...) - } -} - -func (c *Cipher) yield(ib byte) (ob byte) { - c.idx = (c.ctr + c.idx + int(c.bTmp)) % len(c.hs) - c.bTmp = c.hs[c.idx] - c.ctr = c.ctr + 1 - //fmt.Fprintf(os.Stderr, "[c.hidx:%v c.idx:%v]\n", c.hidx, c.idx) - - // NOTE: using a non-prime modulus degrades CV % from ~ 0.055 to ~ 0.07 - switch c.ctr % 5 { - case 0: - ob = c.bTmp ^ ib ^ byte(c.ctr) ^ byte(c.idx) ^ - c.hs[len(c.hs)-19] ^ c.hs[len(c.hs)-2] ^ c.hs[len(c.hs)-3] ^ c.hs[len(c.hs)-5] ^ - c.hs[len(c.hs)-7] ^ c.hs[len(c.hs)-11] ^ c.hs[len(c.hs)-13] ^ c.hs[len(c.hs)-17] ^ - c.hs[len(c.hs)-47] ^ c.hs[len(c.hs)-43] ^ c.hs[len(c.hs)-41] ^ c.hs[len(c.hs)-39] - - case 1: - ob = c.bTmp ^ ib ^ byte(c.ctr) ^ byte(c.idx) ^ - c.hs[len(c.hs)-5] ^ c.hs[len(c.hs)-7] ^ c.hs[len(c.hs)-11] ^ c.hs[len(c.hs)-13] ^ - c.hs[len(c.hs)-17] ^ c.hs[len(c.hs)-19] ^ c.hs[len(c.hs)-23] ^ c.hs[len(c.hs)-29] ^ - c.hs[len(c.hs)-43] ^ c.hs[len(c.hs)-41] ^ c.hs[len(c.hs)-39] ^ c.hs[len(c.hs)-37] - - case 2: - ob = c.bTmp ^ ib ^ byte(c.ctr) ^ byte(c.idx) ^ - c.hs[len(c.hs)-13] ^ c.hs[len(c.hs)-17] ^ c.hs[len(c.hs)-23] ^ c.hs[len(c.hs)-27] ^ - c.hs[len(c.hs)-29] ^ c.hs[len(c.hs)-31] ^ c.hs[len(c.hs)-2] ^ c.hs[len(c.hs)-3] ^ - c.hs[len(c.hs)-37] ^ c.hs[len(c.hs)-41] ^ c.hs[len(c.hs)-39] ^ c.hs[len(c.hs)-47] - case 3: - ob = c.bTmp ^ ib ^ byte(c.ctr) ^ byte(c.idx) ^ - c.hs[len(c.hs)-13] ^ c.hs[len(c.hs)-17] ^ c.hs[len(c.hs)-23] ^ c.hs[len(c.hs)-27] ^ - c.hs[len(c.hs)-29] ^ c.hs[len(c.hs)-31] ^ c.hs[len(c.hs)-5] ^ c.hs[len(c.hs)-3] ^ - c.hs[len(c.hs)-43] ^ c.hs[len(c.hs)-41] ^ c.hs[len(c.hs)-39] ^ c.hs[len(c.hs)-37] - case 4: - ob = c.bTmp ^ ib ^ byte(c.ctr) ^ byte(c.idx) ^ - c.hs[len(c.hs)-13] ^ c.hs[len(c.hs)-17] ^ c.hs[len(c.hs)-23] ^ c.hs[len(c.hs)-27] ^ - c.hs[len(c.hs)-29] ^ c.hs[len(c.hs)-31] ^ c.hs[len(c.hs)-7] ^ c.hs[len(c.hs)-3] ^ - c.hs[len(c.hs)-33] ^ c.hs[len(c.hs)-41] ^ c.hs[len(c.hs)-45] ^ c.hs[len(c.hs)-43] - } - - if c.ctr%c.rekeyCtr == 0 { - bufTmp := make([]byte, 16*3) - _, _ = c.prng.Read(bufTmp) - c.keyUpdate(bufTmp) - } - - return -} - -// 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 should 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, Stream -// maintains state and does not reset at each XORKeyStream call. -func (c *Cipher) XORKeyStream(dst, src []byte) { - //fmt.Printf("len dst:%d len src:%d\n", len(dst), len(src)) - if len(dst) < len(src) { - panic(errors.New("len(dst) < len(src)")) - } - - for idx, v := range src { - dst[idx] = c.yield(v) - } -} diff --git a/vendor/blitter.com/go/kyber/.gitignore b/vendor/blitter.com/go/kyber/.gitignore deleted file mode 100644 index d38c149..0000000 --- a/vendor/blitter.com/go/kyber/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.swp -*~ diff --git a/vendor/blitter.com/go/kyber/LICENSE b/vendor/blitter.com/go/kyber/LICENSE deleted file mode 100644 index 6ca207e..0000000 --- a/vendor/blitter.com/go/kyber/LICENSE +++ /dev/null @@ -1,122 +0,0 @@ -Creative Commons Legal Code - -CC0 1.0 Universal - - CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE - LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN - ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS - INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES - REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS - PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM - THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED - HEREUNDER. - -Statement of Purpose - -The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator -and subsequent owner(s) (each and all, an "owner") of an original work of -authorship and/or a database (each, a "Work"). - -Certain owners wish to permanently relinquish those rights to a Work for -the purpose of contributing to a commons of creative, cultural and -scientific works ("Commons") that the public can reliably and without fear -of later claims of infringement build upon, modify, incorporate in other -works, reuse and redistribute as freely as possible in any form whatsoever -and for any purposes, including without limitation commercial purposes. -These owners may contribute to the Commons to promote the ideal of a free -culture and the further production of creative, cultural and scientific -works, or to gain reputation or greater distribution for their Work in -part through the use and efforts of others. - -For these and/or other purposes and motivations, and without any -expectation of additional consideration or compensation, the person -associating CC0 with a Work (the "Affirmer"), to the extent that he or she -is an owner of Copyright and Related Rights in the Work, voluntarily -elects to apply CC0 to the Work and publicly distribute the Work under its -terms, with knowledge of his or her Copyright and Related Rights in the -Work and the meaning and intended legal effect of CC0 on those rights. - -1. Copyright and Related Rights. A Work made available under CC0 may be -protected by copyright and related or neighboring rights ("Copyright and -Related Rights"). Copyright and Related Rights include, but are not -limited to, the following: - - i. the right to reproduce, adapt, distribute, perform, display, - communicate, and translate a Work; - ii. moral rights retained by the original author(s) and/or performer(s); -iii. publicity and privacy rights pertaining to a person's image or - likeness depicted in a Work; - iv. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(a), below; - v. rights protecting the extraction, dissemination, use and reuse of data - in a Work; - vi. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation - thereof, including any amended or successor version of such - directive); and -vii. other similar, equivalent or corresponding rights throughout the - world based on applicable law or treaty, and any national - implementations thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention -of, applicable law, Affirmer hereby overtly, fully, permanently, -irrevocably and unconditionally waives, abandons, and surrenders all of -Affirmer's Copyright and Related Rights and associated claims and causes -of action, whether now known or unknown (including existing as well as -future claims and causes of action), in the Work (i) in all territories -worldwide, (ii) for the maximum duration provided by applicable law or -treaty (including future time extensions), (iii) in any current or future -medium and for any number of copies, and (iv) for any purpose whatsoever, -including without limitation commercial, advertising or promotional -purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each -member of the public at large and to the detriment of Affirmer's heirs and -successors, fully intending that such Waiver shall not be subject to -revocation, rescission, cancellation, termination, or any other legal or -equitable action to disrupt the quiet enjoyment of the Work by the public -as contemplated by Affirmer's express Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason -be judged legally invalid or ineffective under applicable law, then the -Waiver shall be preserved to the maximum extent permitted taking into -account Affirmer's express Statement of Purpose. In addition, to the -extent the Waiver is so judged Affirmer hereby grants to each affected -person a royalty-free, non transferable, non sublicensable, non exclusive, -irrevocable and unconditional license to exercise Affirmer's Copyright and -Related Rights in the Work (i) in all territories worldwide, (ii) for the -maximum duration provided by applicable law or treaty (including future -time extensions), (iii) in any current or future medium and for any number -of copies, and (iv) for any purpose whatsoever, including without -limitation commercial, advertising or promotional purposes (the -"License"). The License shall be deemed effective as of the date CC0 was -applied by Affirmer to the Work. Should any part of the License for any -reason be judged legally invalid or ineffective under applicable law, such -partial invalidity or ineffectiveness shall not invalidate the remainder -of the License, and in such case Affirmer hereby affirms that he or she -will not (i) exercise any of his or her remaining Copyright and Related -Rights in the Work or (ii) assert any associated claims and causes of -action with respect to the Work, in either case contrary to Affirmer's -express Statement of Purpose. - -4. Limitations and Disclaimers. - - a. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - b. Affirmer offers the Work as-is and makes no representations or - warranties of any kind concerning the Work, express, implied, - statutory or otherwise, including without limitation warranties of - title, merchantability, fitness for a particular purpose, non - infringement, or the absence of latent or other defects, accuracy, or - the present or absence of errors, whether or not discoverable, all to - the greatest extent permissible under applicable law. - c. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without - limitation any person's Copyright and Related Rights in the Work. - Further, Affirmer disclaims responsibility for obtaining any necessary - consents, permissions or other rights required for any use of the - Work. - d. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to - this CC0 or use of the Work. - diff --git a/vendor/blitter.com/go/kyber/README.md b/vendor/blitter.com/go/kyber/README.md deleted file mode 100644 index 634901c..0000000 --- a/vendor/blitter.com/go/kyber/README.md +++ /dev/null @@ -1,24 +0,0 @@ -### Kyber - IND-CCA2-secure Key Encapsulation Mechanism -#### Yawning Angel (yawning at schwanenlied dot me) - -[![GoDoc](https://godoc.org/git.schwanenlied.me/yawning/kyber.git?status.svg)](https://godoc.org/git.schwanenlied.me/yawning/kyber.git) - -This package implements the Kyber IND-CCA2-secure key encapsulation -mechanism (KEM), based on the hardness of solving the learning-with-errors -(LWE) problem over module lattices as submitted to the NIST Post-Quantum -Cryptography project. - -This implementation is a port of the Public Domain reference implementation -by Joppe Bos, Léo Ducas, Eike Kiltz , Tancrède Lepoint, Vadim Lyubashevsky, -John Schanck, Peter Schwabe, Gregor Seiler, and Damien Stehlé. - -Additionally implementations of Kyber.AKE and Kyber.UAKE as presented in -the Kyber paper are included for users that seek an authenticated key -exchange. - -Note that the algorithm is not finalized yet, and may change in a backward -incompatible manner in the future. The designers currently recommend -combining Kyber with an established pre-quantum algorithm like ECDH, and -using the Kyber-768 parameter set. - -For more information, see the [project home page](https://pq-crystals.org/kyber/index.shtml). diff --git a/vendor/blitter.com/go/kyber/cbd.go b/vendor/blitter.com/go/kyber/cbd.go deleted file mode 100644 index 31ca4fd..0000000 --- a/vendor/blitter.com/go/kyber/cbd.go +++ /dev/null @@ -1,100 +0,0 @@ -// cbd.go - Centered binomial distribution. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to the software, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -package kyber - -// Load bytes into a 64-bit integer in little-endian order. -func loadLittleEndian(x []byte, bytes int) uint64 { - var r uint64 - for i, v := range x[:bytes] { - r |= uint64(v) << (8 * uint(i)) - } - return r -} - -// Given an array of uniformly random bytes, compute polynomial with -// coefficients distributed according to a centered binomial distribution -// with parameter eta. -func (p *poly) cbd(buf []byte, eta int) { - hardwareAccelImpl.cbdFn(p, buf, eta) -} - -func cbdRef(p *poly, buf []byte, eta int) { - switch eta { - case 3: - var a, b [4]uint32 - for i := 0; i < kyberN/4; i++ { - t := loadLittleEndian(buf[3*i:], 3) - var d uint32 - for j := 0; j < 3; j++ { - d += uint32((t >> uint(j)) & 0x249249) - } - - a[0] = d & 0x7 - b[0] = (d >> 3) & 0x7 - a[1] = (d >> 6) & 0x7 - b[1] = (d >> 9) & 0x7 - a[2] = (d >> 12) & 0x7 - b[2] = (d >> 15) & 0x7 - a[3] = (d >> 18) & 0x7 - b[3] = (d >> 21) - - p.coeffs[4*i+0] = uint16(a[0] + kyberQ - b[0]) - p.coeffs[4*i+1] = uint16(a[1] + kyberQ - b[1]) - p.coeffs[4*i+2] = uint16(a[2] + kyberQ - b[2]) - p.coeffs[4*i+3] = uint16(a[3] + kyberQ - b[3]) - } - case 4: - var a, b [4]uint32 - for i := 0; i < kyberN/4; i++ { - t := loadLittleEndian(buf[4*i:], 4) - var d uint32 - for j := 0; j < 4; j++ { - d += uint32((t >> uint(j)) & 0x11111111) - } - - a[0] = d & 0xf - b[0] = (d >> 4) & 0xf - a[1] = (d >> 8) & 0xf - b[1] = (d >> 12) & 0xf - a[2] = (d >> 16) & 0xf - b[2] = (d >> 20) & 0xf - a[3] = (d >> 24) & 0xf - b[3] = (d >> 28) - - p.coeffs[4*i+0] = uint16(a[0] + kyberQ - b[0]) - p.coeffs[4*i+1] = uint16(a[1] + kyberQ - b[1]) - p.coeffs[4*i+2] = uint16(a[2] + kyberQ - b[2]) - p.coeffs[4*i+3] = uint16(a[3] + kyberQ - b[3]) - } - case 5: - var a, b [4]uint64 - for i := 0; i < kyberN/4; i++ { - t := loadLittleEndian(buf[5*i:], 5) - var d uint64 - for j := 0; j < 5; j++ { - d += (t >> uint(j)) & 0x0842108421 - } - - a[0] = d & 0x1f - b[0] = (d >> 5) & 0x1f - a[1] = (d >> 10) & 0x1f - b[1] = (d >> 15) & 0x1f - a[2] = (d >> 20) & 0x1f - b[2] = (d >> 25) & 0x1f - a[3] = (d >> 30) & 0x1f - b[3] = (d >> 35) - - p.coeffs[4*i+0] = uint16(a[0] + kyberQ - b[0]) - p.coeffs[4*i+1] = uint16(a[1] + kyberQ - b[1]) - p.coeffs[4*i+2] = uint16(a[2] + kyberQ - b[2]) - p.coeffs[4*i+3] = uint16(a[3] + kyberQ - b[3]) - } - default: - panic("kyber: eta must be in {3,4,5}") - } -} diff --git a/vendor/blitter.com/go/kyber/doc.go b/vendor/blitter.com/go/kyber/doc.go deleted file mode 100644 index 8789ad4..0000000 --- a/vendor/blitter.com/go/kyber/doc.go +++ /dev/null @@ -1,27 +0,0 @@ -// doc.go - Kyber godoc extras. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to the software, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -// Package kyber implements the Kyber IND-CCA2-secure key encapsulation -// mechanism (KEM), based on the hardness of solving the learning-with-errors -// (LWE) problem over module lattices as submitted to the NIST Post-Quantum -// Cryptography project. -// -// This implementation is a port of the Public Domain reference implementation -// by Joppe Bos, Léo Ducas, Eike Kiltz , Tancrède Lepoint, Vadim Lyubashevsky, -// John Schanck, Peter Schwabe, Gregor Seiler, and Damien Stehlé. -// -// Additionally implementations of Kyber.AKE and Kyber.UAKE as presented in -// the Kyber paper are included for users that seek an authenticated key -// exchange. -// -// Note that the algorithm is not finalized yet, and may change in a backward -// incompatible manner in the future. The designers currently recommend -// combining Kyber with an established pre-quantum algorithm like ECDH, and -// using the Kyber-768 parameter set. -// -// For more information, see https://pq-crystals.org/kyber/index.shtml. -package kyber diff --git a/vendor/blitter.com/go/kyber/hwaccel.go b/vendor/blitter.com/go/kyber/hwaccel.go deleted file mode 100644 index 80ec831..0000000 --- a/vendor/blitter.com/go/kyber/hwaccel.go +++ /dev/null @@ -1,46 +0,0 @@ -// hwaccel.go - Hardware acceleration hooks. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to the software, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -package kyber - -var ( - isHardwareAccelerated = false - hardwareAccelImpl = implReference - - implReference = &hwaccelImpl{ - name: "Reference", - nttFn: nttRef, - invnttFn: invnttRef, - pointwiseAccFn: pointwiseAccRef, - cbdFn: cbdRef, - } -) - -type hwaccelImpl struct { - name string - nttFn func(*[kyberN]uint16) - invnttFn func(*[kyberN]uint16) - pointwiseAccFn func(*poly, *polyVec, *polyVec) - cbdFn func(*poly, []byte, int) -} - -func forceDisableHardwareAcceleration() { - // This is for the benefit of testing, so that it's possible to test - // all versions that are supported by the host. - isHardwareAccelerated = false - hardwareAccelImpl = implReference -} - -// IsHardwareAccelerated returns true iff the Kyber implementation will use -// hardware acceleration (eg: AVX2). -func IsHardwareAccelerated() bool { - return isHardwareAccelerated -} - -func init() { - initHardwareAcceleration() -} diff --git a/vendor/blitter.com/go/kyber/hwaccel_amd64.go b/vendor/blitter.com/go/kyber/hwaccel_amd64.go deleted file mode 100644 index 6413187..0000000 --- a/vendor/blitter.com/go/kyber/hwaccel_amd64.go +++ /dev/null @@ -1,256 +0,0 @@ -// hwaccel_amd64.go - AMD64 optimized routines. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to the software, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -// +build amd64,!gccgo,!noasm,go1.10 - -package kyber - -var zetasExp = [752]uint16{ - 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, - 3777, 3777, 3777, 3777, 4499, 4499, 4499, 4499, 4499, 4499, 4499, 4499, - 4499, 4499, 4499, 4499, 4499, 4499, 4499, 4499, 3625, 3625, 3625, 3625, - 3625, 3625, 3625, 3625, 3625, 3625, 3625, 3625, 3625, 3625, 3625, 3625, - 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, - 3985, 3985, 3985, 3985, 6581, 6581, 6581, 6581, 6581, 6581, 6581, 6581, - 6581, 6581, 6581, 6581, 6581, 6581, 6581, 6581, 2456, 2456, 2456, 2456, - 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456, - 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, - 2194, 2194, 2194, 2194, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 5431, 5431, 5431, 5431, 5431, 5431, - 5431, 5431, 5431, 5431, 5431, 5431, 5431, 5431, 5431, 5431, 834, 834, - 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, - 5186, 5186, 5186, 5186, 5186, 5186, 5186, 5186, 5186, 5186, 5186, 5186, - 5186, 5186, 5186, 5186, 5362, 5362, 5362, 5362, 5362, 5362, 5362, 5362, - 5362, 5362, 5362, 5362, 5362, 5362, 5362, 5362, 2876, 2876, 2876, 2876, - 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, - 5980, 5980, 5980, 5980, 5980, 5980, 5980, 5980, 5980, 5980, 5980, 5980, - 5980, 5980, 5980, 5980, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, - 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 2816, 2816, 2816, 2816, - 2816, 2816, 2816, 2816, 5593, 5593, 5593, 5593, 5593, 5593, 5593, 5593, - 5444, 5444, 5444, 5444, 5444, 5444, 5444, 5444, 1986, 1986, 1986, 1986, - 1986, 1986, 1986, 1986, 6082, 6082, 6082, 6082, 6082, 6082, 6082, 6082, - 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 3706, 3706, 3706, 3706, - 3706, 3706, 3706, 3706, 5675, 5675, 5675, 5675, 5675, 5675, 5675, 5675, - 6156, 6156, 6156, 6156, 6156, 6156, 6156, 6156, 5124, 5124, 5124, 5124, - 5124, 5124, 5124, 5124, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, - 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 4851, 4851, 4851, 4851, - 4851, 4851, 4851, 4851, 3364, 3364, 3364, 3364, 3364, 3364, 3364, 3364, - 617, 617, 617, 617, 617, 617, 617, 617, 1921, 1921, 1921, 1921, 1921, - 1921, 1921, 1921, 3992, 3992, 3992, 3992, 5943, 5943, 5943, 5943, 3266, - 3266, 3266, 3266, 4081, 4081, 4081, 4081, 810, 810, 810, 810, 1887, - 1887, 1887, 1887, 7043, 7043, 7043, 7043, 7674, 7674, 7674, 7674, 7243, - 7243, 7243, 7243, 7002, 7002, 7002, 7002, 6376, 6376, 6376, 6376, 5921, - 5921, 5921, 5921, 396, 396, 396, 396, 4507, 4507, 4507, 4507, 4126, - 4126, 4126, 4126, 5800, 5800, 5800, 5800, 3772, 3772, 3772, 3772, 5146, - 5146, 5146, 5146, 5241, 5241, 5241, 5241, 5126, 5126, 5126, 5126, 1535, - 1535, 1535, 1535, 7132, 7132, 7132, 7132, 3153, 3153, 3153, 3153, 2310, - 2310, 2310, 2310, 6282, 6282, 6282, 6282, 1321, 1321, 1321, 1321, 514, - 514, 514, 514, 4725, 4725, 4725, 4725, 7578, 7578, 7578, 7578, 2804, - 2804, 2804, 2804, 5638, 5638, 5638, 5638, 6250, 6250, 6250, 6250, 6627, - 6627, 1698, 1698, 4225, 4225, 1166, 1166, 2426, 2426, 3831, 3831, 915, - 915, 7679, 7679, 4264, 4264, 7487, 7487, 2919, 2919, 2789, 2789, 3405, - 3405, 2385, 2385, 5568, 5568, 4949, 4949, 2175, 2175, 373, 373, 3692, - 3692, 6951, 6951, 5925, 5925, 3135, 3135, 5290, 5290, 660, 660, 6184, - 6184, 2572, 2572, 4536, 4536, 1350, 1350, 5457, 5457, 4093, 4093, 6000, - 6000, 2883, 2883, 6291, 6291, 1598, 1598, 3750, 3750, 2762, 2762, 2835, - 2835, 2764, 2764, 5448, 5448, 3816, 3816, 6148, 6148, 1464, 1464, 6954, - 6954, 1521, 1521, 1386, 1386, 4253, 4253, 6760, 6760, 4938, 4938, 5521, - 5521, 2649, 2649, 6822, 6822, 2579, 2579, 1532, 1532, 1919, 1919, 7195, - 7195, 404, 404, 6625, 6625, 783, 783, 1799, 1799, 5016, 5016, 3480, - 3480, 2133, 2133, 4371, 4371, 6513, 6513, 7664, 3744, 2422, 2001, 1278, - 929, 6333, 5451, 7502, 6439, 5622, 6611, 2161, 1649, 2072, 3177, 5610, - 1121, 7245, 236, 715, 670, 7023, 6205, 5303, 2767, 3542, 7455, 1203, - 1181, 7530, 3887, 1712, 7459, 2786, 7230, 4134, 1779, 6530, 7247, 3568, - 3988, 3581, 6095, 1509, 2918, 2339, 6274, 3434, 4131, 2340, 2891, 2998, - 4367, 3461, 4962, 5434, 5092, 1144, 1072, 1295, 4866, 3911, 3450, 3781, - 5423, 796, 3163, 4473, 7092, 2963, 7557, 3214, 3334, 4315, 3936, 3723, - 1931, 7252, 7279, 4273, 83, 6155, 826, 6343, 2345, 5378, 2515, 7039, - 5844, 4716, 6890, 370, 293, 3312, 2083, 5992, 6904, 2070, 2262, 6788, - 2386, 7493, 6162, 4807, 6277, 1012, 2130, 1441, 2532, 4346, 6597, 4338, - 2937, 509, 6278, 2812, 3763, 592, 2005, 3657, 2460, 4004, 3752, 692, - 1669, 2167, 4394, -} - -var zetasInvExp = [752]uint16{ - 3287, 5514, 6012, 6989, 3929, 3677, 5221, 4024, 5676, 7089, 3918, 4869, - 1403, 7172, 4744, 3343, 1084, 3335, 5149, 6240, 5551, 6669, 1404, 2874, - 1519, 188, 5295, 893, 5419, 5611, 777, 1689, 5598, 4369, 7388, 7311, - 791, 2965, 1837, 642, 5166, 2303, 5336, 1338, 6855, 1526, 7598, 3408, - 402, 429, 5750, 3958, 3745, 3366, 4347, 4467, 124, 4718, 589, 3208, - 4518, 6885, 2258, 3900, 4231, 3770, 2815, 6386, 6609, 6537, 2589, 2247, - 2719, 4220, 3314, 4683, 4790, 5341, 3550, 4247, 1407, 5342, 4763, 6172, - 1586, 4100, 3693, 4113, 434, 1151, 5902, 3547, 451, 4895, 222, 5969, - 3794, 151, 6500, 6478, 226, 4139, 4914, 2378, 1476, 658, 7011, 6966, - 7445, 436, 6560, 2071, 4504, 5609, 6032, 5520, 1070, 2059, 1242, 179, - 2230, 1348, 6752, 6403, 5680, 5259, 3937, 17, 1168, 1168, 3310, 3310, - 5548, 5548, 4201, 4201, 2665, 2665, 5882, 5882, 6898, 6898, 1056, 1056, - 7277, 7277, 486, 486, 5762, 5762, 6149, 6149, 5102, 5102, 859, 859, - 5032, 5032, 2160, 2160, 2743, 2743, 921, 921, 3428, 3428, 6295, 6295, - 6160, 6160, 727, 727, 6217, 6217, 1533, 1533, 3865, 3865, 2233, 2233, - 4917, 4917, 4846, 4846, 4919, 4919, 3931, 3931, 6083, 6083, 1390, 1390, - 4798, 4798, 1681, 1681, 3588, 3588, 2224, 2224, 6331, 6331, 3145, 3145, - 5109, 5109, 1497, 1497, 7021, 7021, 2391, 2391, 4546, 4546, 1756, 1756, - 730, 730, 3989, 3989, 7308, 7308, 5506, 5506, 2732, 2732, 2113, 2113, - 5296, 5296, 4276, 4276, 4892, 4892, 4762, 4762, 194, 194, 3417, 3417, 2, - 2, 6766, 6766, 3850, 3850, 5255, 5255, 6515, 6515, 3456, 3456, 5983, - 5983, 1054, 1054, 1431, 1431, 1431, 1431, 2043, 2043, 2043, 2043, 4877, - 4877, 4877, 4877, 103, 103, 103, 103, 2956, 2956, 2956, 2956, 7167, - 7167, 7167, 7167, 6360, 6360, 6360, 6360, 1399, 1399, 1399, 1399, 5371, - 5371, 5371, 5371, 4528, 4528, 4528, 4528, 549, 549, 549, 549, 6146, - 6146, 6146, 6146, 2555, 2555, 2555, 2555, 2440, 2440, 2440, 2440, 2535, - 2535, 2535, 2535, 3909, 3909, 3909, 3909, 1881, 1881, 1881, 1881, 3555, - 3555, 3555, 3555, 3174, 3174, 3174, 3174, 7285, 7285, 7285, 7285, 1760, - 1760, 1760, 1760, 1305, 1305, 1305, 1305, 679, 679, 679, 679, 438, 438, - 438, 438, 7, 7, 7, 7, 638, 638, 638, 638, 5794, 5794, 5794, 5794, 6871, - 6871, 6871, 6871, 3600, 3600, 3600, 3600, 4415, 4415, 4415, 4415, 1738, - 1738, 1738, 1738, 3689, 3689, 3689, 3689, 5760, 5760, 5760, 5760, 5760, - 5760, 5760, 5760, 7064, 7064, 7064, 7064, 7064, 7064, 7064, 7064, 4317, - 4317, 4317, 4317, 4317, 4317, 4317, 4317, 2830, 2830, 2830, 2830, 2830, - 2830, 2830, 2830, 6198, 6198, 6198, 6198, 6198, 6198, 6198, 6198, 6385, - 6385, 6385, 6385, 6385, 6385, 6385, 6385, 2557, 2557, 2557, 2557, 2557, - 2557, 2557, 2557, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 3975, 3975, 3975, 3975, 3975, - 3975, 3975, 3975, 5688, 5688, 5688, 5688, 5688, 5688, 5688, 5688, 1599, - 1599, 1599, 1599, 1599, 1599, 1599, 1599, 5695, 5695, 5695, 5695, 5695, - 5695, 5695, 5695, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2088, - 2088, 2088, 2088, 2088, 2088, 2088, 2088, 4865, 4865, 4865, 4865, 4865, - 4865, 4865, 4865, 6267, 6267, 6267, 6267, 6267, 6267, 6267, 6267, 6267, - 6267, 6267, 6267, 6267, 6267, 6267, 6267, 1701, 1701, 1701, 1701, 1701, - 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 4805, - 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, - 4805, 4805, 4805, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, - 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2495, 2495, 2495, 2495, 2495, - 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 6847, - 6847, 6847, 6847, 6847, 6847, 6847, 6847, 6847, 6847, 6847, 6847, 6847, - 6847, 6847, 6847, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, - 2250, 2250, 2250, 2250, 2250, 2250, 2250, 7560, 7560, 7560, 7560, 7560, - 7560, 7560, 7560, 7560, 7560, 7560, 7560, 7560, 7560, 7560, 7560, 5487, - 5487, 5487, 5487, 5487, 5487, 5487, 5487, 5487, 5487, 5487, 5487, 5487, - 5487, 5487, 5487, 5225, 5225, 5225, 5225, 5225, 5225, 5225, 5225, 5225, - 5225, 5225, 5225, 5225, 5225, 5225, 5225, 1100, 1100, 1100, 1100, 1100, - 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 3696, - 3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696, - 3696, 3696, 3696, 4056, 4056, 4056, 4056, 4056, 4056, 4056, 4056, 4056, - 4056, 4056, 4056, 4056, 4056, 4056, 4056, 3182, 3182, 3182, 3182, 3182, - 3182, 3182, 3182, 3182, 3182, 3182, 3182, 3182, 3182, 3182, 3182, 5776, - 5776, 5776, 5776, 5776, 5776, 5776, 5776, 5776, 5776, 5776, 5776, 5776, - 5776, 5776, 5776, -} - -//go:noescape -func cpuidAmd64(cpuidParams *uint32) - -//go:noescape -func xgetbv0Amd64(xcrVec *uint32) - -//go:noescape -func nttAVX2(inout, zetas *uint16) - -//go:noescape -func invnttAVX2(inout, omegas *uint16) - -//go:noescape -func pointwiseAccK2AVX2(dst *uint16, a, b **uint16) - -//go:noescape -func pointwiseAccK3AVX2(dst *uint16, a, b **uint16) - -//go:noescape -func pointwiseAccK4AVX2(dst *uint16, a, b **uint16) - -//go:noescape -func cbdEta4AVX2(dst *uint16, buf *byte) - -func supportsAVX2() bool { - // https://software.intel.com/en-us/articles/how-to-detect-new-instruction-support-in-the-4th-generation-intel-core-processor-family - const ( - osXsaveBit = 1 << 27 - avx2Bit = 1 << 5 - ) - - // Check to see if CPUID actually supports the leaf that indicates AVX2. - // CPUID.(EAX=0H, ECX=0H) >= 7 - regs := [4]uint32{0x00} - cpuidAmd64(®s[0]) - if regs[0] < 7 { - return false - } - - // Check to see if the OS knows how to save/restore XMM/YMM state. - // CPUID.(EAX=01H, ECX=0H):ECX.OSXSAVE[bit 27]==1 - regs = [4]uint32{0x01} - cpuidAmd64(®s[0]) - if regs[2]&osXsaveBit == 0 { - return false - } - xcrRegs := [2]uint32{} - xgetbv0Amd64(&xcrRegs[0]) - if xcrRegs[0]&6 != 6 { - return false - } - - // Check for AVX2 support. - // CPUID.(EAX=07H, ECX=0H):EBX.AVX2[bit 5]==1 - regs = [4]uint32{0x07} - cpuidAmd64(®s[0]) - return regs[1]&avx2Bit != 0 -} - -var implAVX2 = &hwaccelImpl{ - name: "AVX2", - nttFn: nttYMM, - invnttFn: invnttYMM, - pointwiseAccFn: pointwiseAccYMM, - cbdFn: cbdYMM, -} - -func nttYMM(p *[kyberN]uint16) { - nttAVX2(&p[0], &zetasExp[0]) -} - -func invnttYMM(a *[kyberN]uint16) { - invnttAVX2(&a[0], &zetasInvExp[0]) -} - -func pointwiseAccYMM(p *poly, a, b *polyVec) { - // Unlike the C code, a polyVec won't have the polys in contigious - // memory. So each assembly function takes vectors of pointers to - // each polyvec's polys. - // - // Kind of ugly, but it's the price to pay for flexibility... - - var aVec, bVec [4]*uint16 // k is in {2,3,4}. - for i := range a.vec { - aVec[i] = &a.vec[i].coeffs[0] - bVec[i] = &b.vec[i].coeffs[0] - } - - switch len(a.vec) { - case 2: - pointwiseAccK2AVX2(&p.coeffs[0], &aVec[0], &bVec[0]) - case 3: - pointwiseAccK3AVX2(&p.coeffs[0], &aVec[0], &bVec[0]) - case 4: - pointwiseAccK4AVX2(&p.coeffs[0], &aVec[0], &bVec[0]) - } -} - -func cbdYMM(p *poly, buf []byte, eta int) { - switch eta { - case 4: - cbdEta4AVX2(&p.coeffs[0], &buf[0]) - default: - cbdRef(p, buf, eta) - } -} - -func initHardwareAcceleration() { - if supportsAVX2() { - isHardwareAccelerated = true - hardwareAccelImpl = implAVX2 - } -} diff --git a/vendor/blitter.com/go/kyber/hwaccel_amd64.s b/vendor/blitter.com/go/kyber/hwaccel_amd64.s deleted file mode 100644 index a98dc72..0000000 --- a/vendor/blitter.com/go/kyber/hwaccel_amd64.s +++ /dev/null @@ -1,2749 +0,0 @@ -// +build !noasm,go1.10 -// hwaccel_amd64.s - AMD64 optimized routines. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to the software, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -#include "textflag.h" - -// func cpuidAmd64(cpuidParams *uint32) -TEXT ·cpuidAmd64(SB), NOSPLIT, $0-8 - MOVQ cpuidParams+0(FP), R15 - MOVL 0(R15), AX - MOVL 8(R15), CX - CPUID - MOVL AX, 0(R15) - MOVL BX, 4(R15) - MOVL CX, 8(R15) - MOVL DX, 12(R15) - RET - -// func xgetbv0Amd64(xcrVec *uint32) -TEXT ·xgetbv0Amd64(SB), NOSPLIT, $0-8 - MOVQ xcrVec+0(FP), BX - XORL CX, CX - XGETBV - MOVL AX, 0(BX) - MOVL DX, 4(BX) - RET - -// Routines taken from the `avx2` implementation, converted to Go's assembly -// dialect. I do this in lieu of cutting myself to see if I still can feel -// pain. -// -// The conversion is mostly direct except: -// * Instead of aligned loads, unaligned loads are used, as there is no -// meaningful difference on modern Intel systems, and it's not immediately -// obvious to me how Go will align global data. -// * The polyvec_pointwise_acc family of routines take vectors of pointers -// due to the different internal memory layout of a polyvec. -// * The constants are renamed slightly. - -// Note: -// * These must be kept in sync with the values in params.go. -// Currently assumes Q = 7681, Q_INV = 57857. -// * Caution, Little endian so things will look different from avx2/consts.c. -DATA ·vpshufb_idx<>+0x00(SB)/8, $0x0504070601000302 -DATA ·vpshufb_idx<>+0x08(SB)/8, $0x0d0c0f0e09080b0a -DATA ·vpshufb_idx<>+0x10(SB)/8, $0x0504070601000302 -DATA ·vpshufb_idx<>+0x18(SB)/8, $0x0d0c0f0e09080b0a -GLOBL ·vpshufb_idx<>(SB), (NOPTR+RODATA), $32 - -DATA ·low_mask<>+0x00(SB)/8, $0x1fff1fff1fff1fff -DATA ·low_mask<>+0x08(SB)/8, $0x1fff1fff1fff1fff -DATA ·low_mask<>+0x10(SB)/8, $0x1fff1fff1fff1fff -DATA ·low_mask<>+0x18(SB)/8, $0x1fff1fff1fff1fff -GLOBL ·low_mask<>(SB), (NOPTR+RODATA), $32 - -DATA ·lowdword<>+0x00(SB)/8, $0x0000ffff0000ffff -DATA ·lowdword<>+0x08(SB)/8, $0x0000ffff0000ffff -DATA ·lowdword<>+0x10(SB)/8, $0x0000ffff0000ffff -DATA ·lowdword<>+0x18(SB)/8, $0x0000ffff0000ffff -GLOBL ·lowdword<>(SB), (NOPTR+RODATA), $32 - -DATA ·q_x16<>+0x00(SB)/8, $0x1e011e011e011e01 -DATA ·q_x16<>+0x08(SB)/8, $0x1e011e011e011e01 -DATA ·q_x16<>+0x10(SB)/8, $0x1e011e011e011e01 -DATA ·q_x16<>+0x18(SB)/8, $0x1e011e011e011e01 -GLOBL ·q_x16<>(SB), (NOPTR+RODATA), $32 - -DATA ·q2_x16<>+0x00(SB)/8, $0x3c023c023c023c02 -DATA ·q2_x16<>+0x08(SB)/8, $0x3c023c023c023c02 -DATA ·q2_x16<>+0x10(SB)/8, $0x3c023c023c023c02 -DATA ·q2_x16<>+0x18(SB)/8, $0x3c023c023c023c02 -GLOBL ·q2_x16<>(SB), (NOPTR+RODATA), $32 - -DATA ·qinv_x16<>+0x00(SB)/8, $0xe201e201e201e201 -DATA ·qinv_x16<>+0x08(SB)/8, $0xe201e201e201e201 -DATA ·qinv_x16<>+0x10(SB)/8, $0xe201e201e201e201 -DATA ·qinv_x16<>+0x18(SB)/8, $0xe201e201e201e201 -GLOBL ·qinv_x16<>(SB), (NOPTR+RODATA), $32 - -DATA ·f_x16<>+0x00(SB)/8, $0x0100010001000100 -DATA ·f_x16<>+0x08(SB)/8, $0x0100010001000100 -DATA ·f_x16<>+0x10(SB)/8, $0x0100010001000100 -DATA ·f_x16<>+0x18(SB)/8, $0x0100010001000100 -GLOBL ·f_x16<>(SB), (NOPTR+RODATA), $32 - -DATA ·v_x16<>+0x00(SB)/8, $0x4442444244424442 -DATA ·v_x16<>+0x08(SB)/8, $0x4442444244424442 -DATA ·v_x16<>+0x10(SB)/8, $0x4442444244424442 -DATA ·v_x16<>+0x18(SB)/8, $0x4442444244424442 -GLOBL ·v_x16<>(SB), (NOPTR+RODATA), $32 - -DATA ·montsq_x16<>+0x00(SB)/8, $0x15c115c115c115c1 -DATA ·montsq_x16<>+0x08(SB)/8, $0x15c115c115c115c1 -DATA ·montsq_x16<>+0x10(SB)/8, $0x15c115c115c115c1 -DATA ·montsq_x16<>+0x18(SB)/8, $0x15c115c115c115c1 -GLOBL ·montsq_x16<>(SB), (NOPTR+RODATA), $32 - -DATA ·mask11<>+0x00(SB)/8, $0x1111111111111111 -DATA ·mask11<>+0x08(SB)/8, $0x1111111111111111 -DATA ·mask11<>+0x10(SB)/8, $0x1111111111111111 -DATA ·mask11<>+0x18(SB)/8, $0x1111111111111111 -GLOBL ·mask11<>(SB), (NOPTR+RODATA), $32 - -DATA ·mask0f<>+0x00(SB)/8, $0x0f0f0f0f0f0f0f0f -DATA ·mask0f<>+0x08(SB)/8, $0x0f0f0f0f0f0f0f0f -DATA ·mask0f<>+0x10(SB)/8, $0x0f0f0f0f0f0f0f0f -DATA ·mask0f<>+0x18(SB)/8, $0x0f0f0f0f0f0f0f0f -GLOBL ·mask0f<>(SB), (NOPTR+RODATA), $32 - -// func nttAVX2(inout, zetas *uint16) -TEXT ·nttAVX2(SB), NOSPLIT, $0-16 - MOVQ inout+0(FP), DI - MOVQ zetas+8(FP), SI - - VMOVDQU ·qinv_x16<>(SB), Y0 - VMOVDQU ·q_x16<>(SB), Y1 - VMOVDQU ·low_mask<>(SB), Y2 - - // zetas - VMOVDQU (SI), Y3 - - // first round - // load - VMOVDQU (DI), Y4 - VMOVDQU 32(DI), Y5 - VMOVDQU 64(DI), Y6 - VMOVDQU 96(DI), Y7 - VMOVDQU 256(DI), Y8 - VMOVDQU 288(DI), Y9 - VMOVDQU 320(DI), Y10 - VMOVDQU 352(DI), Y11 - - // level 0 - // mul - VPMULLW Y3, Y8, Y12 - VPMULHW Y3, Y8, Y8 - VPMULLW Y3, Y9, Y13 - VPMULHW Y3, Y9, Y9 - VPMULLW Y3, Y10, Y14 - VPMULHW Y3, Y10, Y10 - VPMULLW Y3, Y11, Y15 - VPMULHW Y3, Y11, Y11 - - // reduce - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULLW Y0, Y15, Y15 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPMULHW Y1, Y15, Y15 - VPSUBW Y12, Y8, Y12 - VPSUBW Y13, Y9, Y13 - VPSUBW Y14, Y10, Y14 - VPSUBW Y15, Y11, Y15 - - // update - VPSUBW Y12, Y4, Y8 - VPSUBW Y13, Y5, Y9 - VPSUBW Y14, Y6, Y10 - VPSUBW Y15, Y7, Y11 - VPADDW Y12, Y4, Y4 - VPADDW Y13, Y5, Y5 - VPADDW Y14, Y6, Y6 - VPADDW Y15, Y7, Y7 - - // store - VMOVDQU Y4, (DI) - VMOVDQU Y5, 32(DI) - VMOVDQU Y6, 64(DI) - VMOVDQU Y7, 96(DI) - VMOVDQU Y8, 256(DI) - VMOVDQU Y9, 288(DI) - VMOVDQU Y10, 320(DI) - VMOVDQU Y11, 352(DI) - - ADDQ $128, DI - - // second round - // load - VMOVDQU (DI), Y4 - VMOVDQU 32(DI), Y5 - VMOVDQU 64(DI), Y6 - VMOVDQU 96(DI), Y7 - VMOVDQU 256(DI), Y8 - VMOVDQU 288(DI), Y9 - VMOVDQU 320(DI), Y10 - VMOVDQU 352(DI), Y11 - - // level 0 - // mul - VPMULLW Y3, Y8, Y12 - VPMULHW Y3, Y8, Y8 - VPMULLW Y3, Y9, Y13 - VPMULHW Y3, Y9, Y9 - VPMULLW Y3, Y10, Y14 - VPMULHW Y3, Y10, Y10 - VPMULLW Y3, Y11, Y15 - VPMULHW Y3, Y11, Y11 - - // reduce - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULLW Y0, Y15, Y15 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPMULHW Y1, Y15, Y15 - VPSUBW Y12, Y8, Y12 - VPSUBW Y13, Y9, Y13 - VPSUBW Y14, Y10, Y14 - VPSUBW Y15, Y11, Y15 - - // update - VPSUBW Y12, Y4, Y8 - VPSUBW Y13, Y5, Y9 - VPSUBW Y14, Y6, Y10 - VPSUBW Y15, Y7, Y11 - VPADDW Y12, Y4, Y4 - VPADDW Y13, Y5, Y5 - VPADDW Y14, Y6, Y6 - VPADDW Y15, Y7, Y7 - - // store - VMOVDQU Y4, (DI) - VMOVDQU Y5, 32(DI) - VMOVDQU Y6, 64(DI) - VMOVDQU Y7, 96(DI) - VMOVDQU Y8, 256(DI) - VMOVDQU Y9, 288(DI) - VMOVDQU Y10, 320(DI) - VMOVDQU Y11, 352(DI) - - SUBQ $128, DI - - // first round - // zetas - VMOVDQU 32(SI), Y3 - - // load - VMOVDQU (DI), Y4 - VMOVDQU 32(DI), Y5 - VMOVDQU 64(DI), Y6 - VMOVDQU 96(DI), Y7 - VMOVDQU 128(DI), Y8 - VMOVDQU 160(DI), Y9 - VMOVDQU 192(DI), Y10 - VMOVDQU 224(DI), Y11 - - // level 1 - // mul - VPMULLW Y3, Y8, Y12 - VPMULHW Y3, Y8, Y8 - VPMULLW Y3, Y9, Y13 - VPMULHW Y3, Y9, Y9 - VPMULLW Y3, Y10, Y14 - VPMULHW Y3, Y10, Y10 - VPMULLW Y3, Y11, Y15 - VPMULHW Y3, Y11, Y11 - - // reduce - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULLW Y0, Y15, Y15 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPMULHW Y1, Y15, Y15 - VPSUBW Y12, Y8, Y12 - VPSUBW Y13, Y9, Y13 - VPSUBW Y14, Y10, Y14 - VPSUBW Y15, Y11, Y15 - - // update - VPSUBW Y12, Y4, Y8 - VPSUBW Y13, Y5, Y9 - VPSUBW Y14, Y6, Y10 - VPSUBW Y15, Y7, Y11 - VPADDW Y12, Y4, Y4 - VPADDW Y13, Y5, Y5 - VPADDW Y14, Y6, Y6 - VPADDW Y15, Y7, Y7 - - // level 2 - // zetas - VMOVDQU 96(SI), Y15 - VMOVDQU 128(SI), Y3 - - // mul - VPMULLW Y15, Y6, Y12 - VPMULHW Y15, Y6, Y6 - VPMULLW Y15, Y7, Y13 - VPMULHW Y15, Y7, Y7 - VPMULLW Y3, Y10, Y14 - VPMULHW Y3, Y10, Y10 - VPMULLW Y3, Y11, Y15 - VPMULHW Y3, Y11, Y11 - - // reduce - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULLW Y0, Y15, Y15 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPMULHW Y1, Y15, Y15 - VPSUBW Y12, Y6, Y12 - VPSUBW Y13, Y7, Y13 - VPSUBW Y14, Y10, Y14 - VPSUBW Y15, Y11, Y15 - - // update - VPSUBW Y12, Y4, Y6 - VPSUBW Y13, Y5, Y7 - VPSUBW Y14, Y8, Y10 - VPSUBW Y15, Y9, Y11 - VPADDW Y12, Y4, Y4 - VPADDW Y13, Y5, Y5 - VPADDW Y14, Y8, Y8 - VPADDW Y15, Y9, Y9 - - // level 3 - // zetas - VMOVDQU 224(SI), Y13 - VMOVDQU 256(SI), Y14 - VMOVDQU 288(SI), Y15 - VMOVDQU 320(SI), Y3 - - // mul - VPMULLW Y13, Y5, Y12 - VPMULHW Y13, Y5, Y5 - VPMULLW Y14, Y7, Y13 - VPMULHW Y14, Y7, Y7 - VPMULLW Y15, Y9, Y14 - VPMULHW Y15, Y9, Y9 - VPMULLW Y3, Y11, Y15 - VPMULHW Y3, Y11, Y11 - - // reduce - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULLW Y0, Y15, Y15 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPMULHW Y1, Y15, Y15 - VPSUBW Y12, Y5, Y12 - VPSUBW Y13, Y7, Y13 - VPSUBW Y14, Y9, Y14 - VPSUBW Y15, Y11, Y15 - - // reduce 2 - VPSRAW $13, Y4, Y5 - VPSRAW $13, Y6, Y7 - VPSRAW $13, Y8, Y9 - VPSRAW $13, Y10, Y11 - VPAND Y2, Y4, Y4 - VPAND Y2, Y6, Y6 - VPAND Y2, Y8, Y8 - VPAND Y2, Y10, Y10 - VPSUBW Y5, Y4, Y4 - VPSUBW Y7, Y6, Y6 - VPSUBW Y9, Y8, Y8 - VPSUBW Y11, Y10, Y10 - VPSLLW $9, Y5, Y5 - VPSLLW $9, Y7, Y7 - VPSLLW $9, Y9, Y9 - VPSLLW $9, Y11, Y11 - VPADDW Y5, Y4, Y4 - VPADDW Y7, Y6, Y6 - VPADDW Y9, Y8, Y8 - VPADDW Y11, Y10, Y10 - - // update - VPSUBW Y12, Y4, Y5 - VPSUBW Y13, Y6, Y7 - VPSUBW Y14, Y8, Y9 - VPSUBW Y15, Y10, Y11 - VPADDW Y12, Y4, Y4 - VPADDW Y13, Y6, Y6 - VPADDW Y14, Y8, Y8 - VPADDW Y15, Y10, Y10 - - // level 4 - // zetas - VMOVDQU 480(SI), Y12 - VMOVDQU 512(SI), Y13 - VMOVDQU 544(SI), Y14 - VMOVDQU 576(SI), Y15 - - // shuffle - VPERM2I128 $0x02, Y4, Y5, Y3 - VPERM2I128 $0x13, Y4, Y5, Y4 - VPERM2I128 $0x02, Y6, Y7, Y5 - VPERM2I128 $0x13, Y6, Y7, Y6 - VPERM2I128 $0x02, Y8, Y9, Y7 - VPERM2I128 $0x13, Y8, Y9, Y8 - VPERM2I128 $0x02, Y10, Y11, Y9 - VPERM2I128 $0x13, Y10, Y11, Y10 - - // mul - VPMULLW Y12, Y4, Y11 - VPMULHW Y12, Y4, Y4 - VPMULLW Y13, Y6, Y12 - VPMULHW Y13, Y6, Y6 - VPMULLW Y14, Y8, Y13 - VPMULHW Y14, Y8, Y8 - VPMULLW Y15, Y10, Y14 - VPMULHW Y15, Y10, Y10 - - // reduce - VPMULLW Y0, Y11, Y11 - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULHW Y1, Y11, Y11 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPSUBW Y11, Y4, Y11 - VPSUBW Y12, Y6, Y12 - VPSUBW Y13, Y8, Y13 - VPSUBW Y14, Y10, Y14 - - // update - VPSUBW Y11, Y3, Y4 - VPSUBW Y12, Y5, Y6 - VPSUBW Y13, Y7, Y8 - VPSUBW Y14, Y9, Y10 - VPADDW Y11, Y3, Y3 - VPADDW Y12, Y5, Y5 - VPADDW Y13, Y7, Y7 - VPADDW Y14, Y9, Y9 - - // level 5 - // zetas - VMOVDQU 736(SI), Y12 - VMOVDQU 768(SI), Y13 - VMOVDQU 800(SI), Y14 - VMOVDQU 832(SI), Y15 - - // shuffle - VSHUFPD $0x00, Y4, Y3, Y11 - VSHUFPD $0x0F, Y4, Y3, Y3 - VSHUFPD $0x00, Y6, Y5, Y4 - VSHUFPD $0x0F, Y6, Y5, Y5 - VSHUFPD $0x00, Y8, Y7, Y6 - VSHUFPD $0x0F, Y8, Y7, Y7 - VSHUFPD $0x00, Y10, Y9, Y8 - VSHUFPD $0x0F, Y10, Y9, Y9 - - // mul - VPMULLW Y12, Y3, Y10 - VPMULHW Y12, Y3, Y3 - VPMULLW Y13, Y5, Y12 - VPMULHW Y13, Y5, Y5 - VPMULLW Y14, Y7, Y13 - VPMULHW Y14, Y7, Y7 - VPMULLW Y15, Y9, Y14 - VPMULHW Y15, Y9, Y9 - - // reduce - VPMULLW Y0, Y10, Y10 - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULHW Y1, Y10, Y10 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPSUBW Y10, Y3, Y10 - VPSUBW Y12, Y5, Y12 - VPSUBW Y13, Y7, Y13 - VPSUBW Y14, Y9, Y14 - - // update - VPSUBW Y10, Y11, Y3 - VPSUBW Y12, Y4, Y5 - VPSUBW Y13, Y6, Y7 - VPSUBW Y14, Y8, Y9 - VPADDW Y10, Y11, Y10 - VPADDW Y12, Y4, Y4 - VPADDW Y13, Y6, Y6 - VPADDW Y14, Y8, Y8 - - // level 6 - // shuffle - VPSHUFD $0xB1, Y10, Y12 - VPSHUFD $0xB1, Y3, Y13 - VPSHUFD $0xB1, Y4, Y14 - VPSHUFD $0xB1, Y5, Y15 - VPBLENDD $0x55, Y10, Y13, Y10 - VPBLENDD $0xAA, Y3, Y12, Y3 - VPBLENDD $0x55, Y4, Y15, Y4 - VPBLENDD $0xAA, Y5, Y14, Y5 - VPSHUFD $0xB1, Y6, Y12 - VPSHUFD $0xB1, Y7, Y13 - VPSHUFD $0xB1, Y8, Y14 - VPSHUFD $0xB1, Y9, Y15 - VPBLENDD $0x55, Y6, Y13, Y6 - VPBLENDD $0xAA, Y7, Y12, Y7 - VPBLENDD $0x55, Y8, Y15, Y8 - VPBLENDD $0xAA, Y9, Y14, Y9 - - // zetas - VMOVDQU 992(SI), Y12 - VMOVDQU 1024(SI), Y13 - VMOVDQU 1056(SI), Y14 - VMOVDQU 1088(SI), Y15 - - // mul - VPMULLW Y12, Y3, Y11 - VPMULHW Y12, Y3, Y3 - VPMULLW Y13, Y5, Y12 - VPMULHW Y13, Y5, Y5 - VPMULLW Y14, Y7, Y13 - VPMULHW Y14, Y7, Y7 - VPMULLW Y15, Y9, Y14 - VPMULHW Y15, Y9, Y9 - - // reduce - VPMULLW Y0, Y11, Y11 - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULHW Y1, Y11, Y11 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPSUBW Y11, Y3, Y11 - VPSUBW Y12, Y5, Y12 - VPSUBW Y13, Y7, Y13 - VPSUBW Y14, Y9, Y14 - - // reduce 2 - VPSRAW $13, Y10, Y3 - VPSRAW $13, Y4, Y5 - VPSRAW $13, Y6, Y7 - VPSRAW $13, Y8, Y9 - VPAND Y2, Y10, Y10 - VPAND Y2, Y4, Y4 - VPAND Y2, Y6, Y6 - VPAND Y2, Y8, Y8 - VPSUBW Y3, Y10, Y10 - VPSUBW Y5, Y4, Y4 - VPSUBW Y7, Y6, Y6 - VPSUBW Y9, Y8, Y8 - VPSLLW $9, Y3, Y3 - VPSLLW $9, Y5, Y5 - VPSLLW $9, Y7, Y7 - VPSLLW $9, Y9, Y9 - VPADDW Y3, Y10, Y10 - VPADDW Y5, Y4, Y4 - VPADDW Y7, Y6, Y6 - VPADDW Y9, Y8, Y8 - - // update - VPSUBW Y11, Y10, Y3 - VPSUBW Y12, Y4, Y5 - VPSUBW Y13, Y6, Y7 - VPSUBW Y14, Y8, Y9 - VPADDW Y11, Y10, Y10 - VPADDW Y12, Y4, Y4 - VPADDW Y13, Y6, Y6 - VPADDW Y14, Y8, Y8 - - // level 7 - // shuffle - VMOVDQU ·vpshufb_idx<>(SB), Y15 - VPSHUFB Y15, Y10, Y11 - VPSHUFB Y15, Y3, Y12 - VPSHUFB Y15, Y4, Y13 - VPSHUFB Y15, Y5, Y14 - VPBLENDW $0x55, Y10, Y12, Y10 - VPBLENDW $0xAA, Y3, Y11, Y3 - VPBLENDW $0x55, Y4, Y14, Y4 - VPBLENDW $0xAA, Y5, Y13, Y5 - VPSHUFB Y15, Y6, Y11 - VPSHUFB Y15, Y7, Y12 - VPSHUFB Y15, Y8, Y13 - VPSHUFB Y15, Y9, Y14 - VPBLENDW $0x55, Y6, Y12, Y6 - VPBLENDW $0xAA, Y7, Y11, Y7 - VPBLENDW $0x55, Y8, Y14, Y8 - VPBLENDW $0xAA, Y9, Y13, Y9 - - // zetas - VMOVDQU 1248(SI), Y12 - VMOVDQU 1280(SI), Y13 - VMOVDQU 1312(SI), Y14 - VMOVDQU 1344(SI), Y15 - - // mul - VPMULLW Y12, Y3, Y11 - VPMULHW Y12, Y3, Y3 - VPMULLW Y13, Y5, Y12 - VPMULHW Y13, Y5, Y5 - VPMULLW Y14, Y7, Y13 - VPMULHW Y14, Y7, Y7 - VPMULLW Y15, Y9, Y14 - VPMULHW Y15, Y9, Y9 - - // reduce - VPMULLW Y0, Y11, Y11 - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULHW Y1, Y11, Y11 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPSUBW Y11, Y3, Y11 - VPSUBW Y12, Y5, Y12 - VPSUBW Y13, Y7, Y13 - VPSUBW Y14, Y9, Y14 - - // reduce 3 - VMOVDQU ·q2_x16<>(SB), Y15 - VPSRAW $15, Y10, Y3 - VPSRAW $15, Y4, Y5 - VPSRAW $15, Y6, Y7 - VPSRAW $15, Y8, Y9 - VPAND Y15, Y3, Y3 - VPAND Y15, Y5, Y5 - VPAND Y15, Y7, Y7 - VPAND Y15, Y9, Y9 - VPADDW Y1, Y10, Y10 - VPADDW Y1, Y4, Y4 - VPADDW Y1, Y6, Y6 - VPADDW Y1, Y8, Y8 - VPADDW Y3, Y10, Y10 - VPADDW Y5, Y4, Y4 - VPADDW Y7, Y6, Y6 - VPADDW Y9, Y8, Y8 - - // update - VPSUBW Y11, Y10, Y3 - VPSUBW Y12, Y4, Y5 - VPSUBW Y13, Y6, Y7 - VPSUBW Y14, Y8, Y9 - VPADDW Y11, Y10, Y10 - VPADDW Y12, Y4, Y4 - VPADDW Y13, Y6, Y6 - VPADDW Y14, Y8, Y8 - - // reorder - VPUNPCKLWD Y3, Y10, Y12 - VPUNPCKHWD Y3, Y10, Y13 - VPUNPCKLWD Y5, Y4, Y14 - VPUNPCKHWD Y5, Y4, Y15 - VPUNPCKLWD Y7, Y6, Y3 - VPUNPCKHWD Y7, Y6, Y4 - VPUNPCKLWD Y9, Y8, Y5 - VPUNPCKHWD Y9, Y8, Y6 - VPERM2I128 $0x20, Y13, Y12, Y11 - VPERM2I128 $0x31, Y13, Y12, Y12 - VPERM2I128 $0x20, Y15, Y14, Y13 - VPERM2I128 $0x31, Y15, Y14, Y14 - VPERM2I128 $0x20, Y4, Y3, Y15 - VPERM2I128 $0x31, Y4, Y3, Y3 - VPERM2I128 $0x20, Y6, Y5, Y4 - VPERM2I128 $0x31, Y6, Y5, Y5 - - // store - VMOVDQU Y11, (DI) - VMOVDQU Y12, 32(DI) - VMOVDQU Y13, 64(DI) - VMOVDQU Y14, 96(DI) - VMOVDQU Y15, 128(DI) - VMOVDQU Y3, 160(DI) - VMOVDQU Y4, 192(DI) - VMOVDQU Y5, 224(DI) - - ADDQ $256, DI - - // second round - // zetas - VMOVDQU 64(SI), Y3 - - // load - VMOVDQU (DI), Y4 - VMOVDQU 32(DI), Y5 - VMOVDQU 64(DI), Y6 - VMOVDQU 96(DI), Y7 - VMOVDQU 128(DI), Y8 - VMOVDQU 160(DI), Y9 - VMOVDQU 192(DI), Y10 - VMOVDQU 224(DI), Y11 - - // level 1 - // mul - VPMULLW Y3, Y8, Y12 - VPMULHW Y3, Y8, Y8 - VPMULLW Y3, Y9, Y13 - VPMULHW Y3, Y9, Y9 - VPMULLW Y3, Y10, Y14 - VPMULHW Y3, Y10, Y10 - VPMULLW Y3, Y11, Y15 - VPMULHW Y3, Y11, Y11 - - // reduce - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULLW Y0, Y15, Y15 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPMULHW Y1, Y15, Y15 - VPSUBW Y12, Y8, Y12 - VPSUBW Y13, Y9, Y13 - VPSUBW Y14, Y10, Y14 - VPSUBW Y15, Y11, Y15 - - // update - VPSUBW Y12, Y4, Y8 - VPSUBW Y13, Y5, Y9 - VPSUBW Y14, Y6, Y10 - VPSUBW Y15, Y7, Y11 - VPADDW Y12, Y4, Y4 - VPADDW Y13, Y5, Y5 - VPADDW Y14, Y6, Y6 - VPADDW Y15, Y7, Y7 - - // level 2 - // zetas - VMOVDQU 160(SI), Y15 - VMOVDQU 192(SI), Y3 - - // mul - VPMULLW Y15, Y6, Y12 - VPMULHW Y15, Y6, Y6 - VPMULLW Y15, Y7, Y13 - VPMULHW Y15, Y7, Y7 - VPMULLW Y3, Y10, Y14 - VPMULHW Y3, Y10, Y10 - VPMULLW Y3, Y11, Y15 - VPMULHW Y3, Y11, Y11 - - // reduce - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULLW Y0, Y15, Y15 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPMULHW Y1, Y15, Y15 - VPSUBW Y12, Y6, Y12 - VPSUBW Y13, Y7, Y13 - VPSUBW Y14, Y10, Y14 - VPSUBW Y15, Y11, Y15 - - // update - VPSUBW Y12, Y4, Y6 - VPSUBW Y13, Y5, Y7 - VPSUBW Y14, Y8, Y10 - VPSUBW Y15, Y9, Y11 - VPADDW Y12, Y4, Y4 - VPADDW Y13, Y5, Y5 - VPADDW Y14, Y8, Y8 - VPADDW Y15, Y9, Y9 - - // level 3 - // zetas - VMOVDQU 352(SI), Y13 - VMOVDQU 384(SI), Y14 - VMOVDQU 416(SI), Y15 - VMOVDQU 448(SI), Y3 - - // mul - VPMULLW Y13, Y5, Y12 - VPMULHW Y13, Y5, Y5 - VPMULLW Y14, Y7, Y13 - VPMULHW Y14, Y7, Y7 - VPMULLW Y15, Y9, Y14 - VPMULHW Y15, Y9, Y9 - VPMULLW Y3, Y11, Y15 - VPMULHW Y3, Y11, Y11 - - // reduce - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULLW Y0, Y15, Y15 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPMULHW Y1, Y15, Y15 - VPSUBW Y12, Y5, Y12 - VPSUBW Y13, Y7, Y13 - VPSUBW Y14, Y9, Y14 - VPSUBW Y15, Y11, Y15 - - // reduce 2 - VPSRAW $13, Y4, Y5 - VPSRAW $13, Y6, Y7 - VPSRAW $13, Y8, Y9 - VPSRAW $13, Y10, Y11 - VPAND Y2, Y4, Y4 - VPAND Y2, Y6, Y6 - VPAND Y2, Y8, Y8 - VPAND Y2, Y10, Y10 - VPSUBW Y5, Y4, Y4 - VPSUBW Y7, Y6, Y6 - VPSUBW Y9, Y8, Y8 - VPSUBW Y11, Y10, Y10 - VPSLLW $9, Y5, Y5 - VPSLLW $9, Y7, Y7 - VPSLLW $9, Y9, Y9 - VPSLLW $9, Y11, Y11 - VPADDW Y5, Y4, Y4 - VPADDW Y7, Y6, Y6 - VPADDW Y9, Y8, Y8 - VPADDW Y11, Y10, Y10 - - // update - VPSUBW Y12, Y4, Y5 - VPSUBW Y13, Y6, Y7 - VPSUBW Y14, Y8, Y9 - VPSUBW Y15, Y10, Y11 - VPADDW Y12, Y4, Y4 - VPADDW Y13, Y6, Y6 - VPADDW Y14, Y8, Y8 - VPADDW Y15, Y10, Y10 - - // level 4 - // zetas - VMOVDQU 608(SI), Y12 - VMOVDQU 640(SI), Y13 - VMOVDQU 672(SI), Y14 - VMOVDQU 704(SI), Y15 - - // shuffle - VPERM2I128 $0x02, Y4, Y5, Y3 - VPERM2I128 $0x13, Y4, Y5, Y4 - VPERM2I128 $0x02, Y6, Y7, Y5 - VPERM2I128 $0x13, Y6, Y7, Y6 - VPERM2I128 $0x02, Y8, Y9, Y7 - VPERM2I128 $0x13, Y8, Y9, Y8 - VPERM2I128 $0x02, Y10, Y11, Y9 - VPERM2I128 $0x13, Y10, Y11, Y10 - - // mul - VPMULLW Y12, Y4, Y11 - VPMULHW Y12, Y4, Y4 - VPMULLW Y13, Y6, Y12 - VPMULHW Y13, Y6, Y6 - VPMULLW Y14, Y8, Y13 - VPMULHW Y14, Y8, Y8 - VPMULLW Y15, Y10, Y14 - VPMULHW Y15, Y10, Y10 - - // reduce - VPMULLW Y0, Y11, Y11 - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULHW Y1, Y11, Y11 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPSUBW Y11, Y4, Y11 - VPSUBW Y12, Y6, Y12 - VPSUBW Y13, Y8, Y13 - VPSUBW Y14, Y10, Y14 - - // update - VPSUBW Y11, Y3, Y4 - VPSUBW Y12, Y5, Y6 - VPSUBW Y13, Y7, Y8 - VPSUBW Y14, Y9, Y10 - VPADDW Y11, Y3, Y3 - VPADDW Y12, Y5, Y5 - VPADDW Y13, Y7, Y7 - VPADDW Y14, Y9, Y9 - - // level 5 - // zetas - VMOVDQU 864(SI), Y12 - VMOVDQU 896(SI), Y13 - VMOVDQU 928(SI), Y14 - VMOVDQU 960(SI), Y15 - - // shuffle - VSHUFPD $0x00, Y4, Y3, Y11 - VSHUFPD $0x0F, Y4, Y3, Y3 - VSHUFPD $0x00, Y6, Y5, Y4 - VSHUFPD $0x0F, Y6, Y5, Y5 - VSHUFPD $0x00, Y8, Y7, Y6 - VSHUFPD $0x0F, Y8, Y7, Y7 - VSHUFPD $0x00, Y10, Y9, Y8 - VSHUFPD $0x0F, Y10, Y9, Y9 - - // mul - VPMULLW Y12, Y3, Y10 - VPMULHW Y12, Y3, Y3 - VPMULLW Y13, Y5, Y12 - VPMULHW Y13, Y5, Y5 - VPMULLW Y14, Y7, Y13 - VPMULHW Y14, Y7, Y7 - VPMULLW Y15, Y9, Y14 - VPMULHW Y15, Y9, Y9 - - // reduce - VPMULLW Y0, Y10, Y10 - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULHW Y1, Y10, Y10 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPSUBW Y10, Y3, Y10 - VPSUBW Y12, Y5, Y12 - VPSUBW Y13, Y7, Y13 - VPSUBW Y14, Y9, Y14 - - // update - VPSUBW Y10, Y11, Y3 - VPSUBW Y12, Y4, Y5 - VPSUBW Y13, Y6, Y7 - VPSUBW Y14, Y8, Y9 - VPADDW Y10, Y11, Y10 - VPADDW Y12, Y4, Y4 - VPADDW Y13, Y6, Y6 - VPADDW Y14, Y8, Y8 - - // level 6 - // shuffle - VPSHUFD $0xB1, Y10, Y12 - VPSHUFD $0xB1, Y3, Y13 - VPSHUFD $0xB1, Y4, Y14 - VPSHUFD $0xB1, Y5, Y15 - VPBLENDD $0x55, Y10, Y13, Y10 - VPBLENDD $0xAA, Y3, Y12, Y3 - VPBLENDD $0x55, Y4, Y15, Y4 - VPBLENDD $0xAA, Y5, Y14, Y5 - VPSHUFD $0xB1, Y6, Y12 - VPSHUFD $0xB1, Y7, Y13 - VPSHUFD $0xB1, Y8, Y14 - VPSHUFD $0xB1, Y9, Y15 - VPBLENDD $0x55, Y6, Y13, Y6 - VPBLENDD $0xAA, Y7, Y12, Y7 - VPBLENDD $0x55, Y8, Y15, Y8 - VPBLENDD $0xAA, Y9, Y14, Y9 - - // zetas - VMOVDQU 1120(SI), Y12 - VMOVDQU 1152(SI), Y13 - VMOVDQU 1184(SI), Y14 - VMOVDQU 1216(SI), Y15 - - // mul - VPMULLW Y12, Y3, Y11 - VPMULHW Y12, Y3, Y3 - VPMULLW Y13, Y5, Y12 - VPMULHW Y13, Y5, Y5 - VPMULLW Y14, Y7, Y13 - VPMULHW Y14, Y7, Y7 - VPMULLW Y15, Y9, Y14 - VPMULHW Y15, Y9, Y9 - - // reduce - VPMULLW Y0, Y11, Y11 - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULHW Y1, Y11, Y11 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPSUBW Y11, Y3, Y11 - VPSUBW Y12, Y5, Y12 - VPSUBW Y13, Y7, Y13 - VPSUBW Y14, Y9, Y14 - - // reduce 2 - VPSRAW $13, Y10, Y3 - VPSRAW $13, Y4, Y5 - VPSRAW $13, Y6, Y7 - VPSRAW $13, Y8, Y9 - VPAND Y2, Y10, Y10 - VPAND Y2, Y4, Y4 - VPAND Y2, Y6, Y6 - VPAND Y2, Y8, Y8 - VPSUBW Y3, Y10, Y10 - VPSUBW Y5, Y4, Y4 - VPSUBW Y7, Y6, Y6 - VPSUBW Y9, Y8, Y8 - VPSLLW $9, Y3, Y3 - VPSLLW $9, Y5, Y5 - VPSLLW $9, Y7, Y7 - VPSLLW $9, Y9, Y9 - VPADDW Y3, Y10, Y10 - VPADDW Y5, Y4, Y4 - VPADDW Y7, Y6, Y6 - VPADDW Y9, Y8, Y8 - - // update - VPSUBW Y11, Y10, Y3 - VPSUBW Y12, Y4, Y5 - VPSUBW Y13, Y6, Y7 - VPSUBW Y14, Y8, Y9 - VPADDW Y11, Y10, Y10 - VPADDW Y12, Y4, Y4 - VPADDW Y13, Y6, Y6 - VPADDW Y14, Y8, Y8 - - // level 7 - // shuffle - VMOVDQU ·vpshufb_idx<>(SB), Y15 - VPSHUFB Y15, Y10, Y11 - VPSHUFB Y15, Y3, Y12 - VPSHUFB Y15, Y4, Y13 - VPSHUFB Y15, Y5, Y14 - VPBLENDW $0x55, Y10, Y12, Y10 - VPBLENDW $0xAA, Y3, Y11, Y3 - VPBLENDW $0x55, Y4, Y14, Y4 - VPBLENDW $0xAA, Y5, Y13, Y5 - VPSHUFB Y15, Y6, Y11 - VPSHUFB Y15, Y7, Y12 - VPSHUFB Y15, Y8, Y13 - VPSHUFB Y15, Y9, Y14 - VPBLENDW $0x55, Y6, Y12, Y6 - VPBLENDW $0xAA, Y7, Y11, Y7 - VPBLENDW $0x55, Y8, Y14, Y8 - VPBLENDW $0xAA, Y9, Y13, Y9 - - // zetas - VMOVDQU 1376(SI), Y12 - VMOVDQU 1408(SI), Y13 - VMOVDQU 1440(SI), Y14 - VMOVDQU 1472(SI), Y15 - - // mul - VPMULLW Y12, Y3, Y11 - VPMULHW Y12, Y3, Y3 - VPMULLW Y13, Y5, Y12 - VPMULHW Y13, Y5, Y5 - VPMULLW Y14, Y7, Y13 - VPMULHW Y14, Y7, Y7 - VPMULLW Y15, Y9, Y14 - VPMULHW Y15, Y9, Y9 - - // reduce - VPMULLW Y0, Y11, Y11 - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULHW Y1, Y11, Y11 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPSUBW Y11, Y3, Y11 - VPSUBW Y12, Y5, Y12 - VPSUBW Y13, Y7, Y13 - VPSUBW Y14, Y9, Y14 - - // reduce 3 - VMOVDQU ·q2_x16<>(SB), Y15 - VPSRAW $15, Y10, Y3 - VPSRAW $15, Y4, Y5 - VPSRAW $15, Y6, Y7 - VPSRAW $15, Y8, Y9 - VPAND Y15, Y3, Y3 - VPAND Y15, Y5, Y5 - VPAND Y15, Y7, Y7 - VPAND Y15, Y9, Y9 - VPADDW Y1, Y10, Y10 - VPADDW Y1, Y4, Y4 - VPADDW Y1, Y6, Y6 - VPADDW Y1, Y8, Y8 - VPADDW Y3, Y10, Y10 - VPADDW Y5, Y4, Y4 - VPADDW Y7, Y6, Y6 - VPADDW Y9, Y8, Y8 - - // update - VPSUBW Y11, Y10, Y3 - VPSUBW Y12, Y4, Y5 - VPSUBW Y13, Y6, Y7 - VPSUBW Y14, Y8, Y9 - VPADDW Y11, Y10, Y10 - VPADDW Y12, Y4, Y4 - VPADDW Y13, Y6, Y6 - VPADDW Y14, Y8, Y8 - - // reorder - VPUNPCKLWD Y3, Y10, Y12 - VPUNPCKHWD Y3, Y10, Y13 - VPUNPCKLWD Y5, Y4, Y14 - VPUNPCKHWD Y5, Y4, Y15 - VPUNPCKLWD Y7, Y6, Y3 - VPUNPCKHWD Y7, Y6, Y4 - VPUNPCKLWD Y9, Y8, Y5 - VPUNPCKHWD Y9, Y8, Y6 - VPERM2I128 $0x20, Y13, Y12, Y11 - VPERM2I128 $0x31, Y13, Y12, Y12 - VPERM2I128 $0x20, Y15, Y14, Y13 - VPERM2I128 $0x31, Y15, Y14, Y14 - VPERM2I128 $0x20, Y4, Y3, Y15 - VPERM2I128 $0x31, Y4, Y3, Y3 - VPERM2I128 $0x20, Y6, Y5, Y4 - VPERM2I128 $0x31, Y6, Y5, Y5 - - // store - VMOVDQU Y11, (DI) - VMOVDQU Y12, 32(DI) - VMOVDQU Y13, 64(DI) - VMOVDQU Y14, 96(DI) - VMOVDQU Y15, 128(DI) - VMOVDQU Y3, 160(DI) - VMOVDQU Y4, 192(DI) - VMOVDQU Y5, 224(DI) - - VZEROUPPER - RET - -// Go 1.10's VPERMQ support expects the imm8 to be a `int8`, instead of a -// `uint8`. While this is fixed in master, use the signed representation -// for now till it's reasonable to expect versions with the fix to be widely -// available. -// -// See: https://github.com/golang/go/issues/24378 -#define invntt_VPERMQ_IDX $-40 // $0xd8 - -// func invnttAVX2(inout, omegas *uint16) -TEXT ·invnttAVX2(SB), NOSPLIT, $0-16 - MOVQ inout+0(FP), DI - MOVQ omegas+8(FP), SI - - VMOVDQU ·qinv_x16<>(SB), Y0 - VMOVDQU ·q_x16<>(SB), Y1 - VMOVDQU ·v_x16<>(SB), Y2 - - MOVQ SI, R8 - - // first round - // load - VMOVDQU (DI), Y4 - VMOVDQU 32(DI), Y5 - VMOVDQU 64(DI), Y6 - VMOVDQU 96(DI), Y7 - VMOVDQU 128(DI), Y8 - VMOVDQU 160(DI), Y9 - VMOVDQU 192(DI), Y10 - VMOVDQU 224(DI), Y11 - - // reorder - VMOVDQU ·lowdword<>(SB), Y3 - VPAND Y3, Y4, Y12 - VPAND Y3, Y5, Y13 - VPAND Y3, Y6, Y14 - VPAND Y3, Y7, Y15 - VPSRLD $16, Y4, Y4 - VPSRLD $16, Y5, Y5 - VPSRLD $16, Y6, Y6 - VPSRLD $16, Y7, Y7 - VPACKUSDW Y5, Y4, Y5 - VPACKUSDW Y13, Y12, Y4 - VPACKUSDW Y7, Y6, Y7 - VPACKUSDW Y15, Y14, Y6 - VPERMQ invntt_VPERMQ_IDX, Y4, Y4 - VPERMQ invntt_VPERMQ_IDX, Y5, Y5 - VPERMQ invntt_VPERMQ_IDX, Y6, Y6 - VPERMQ invntt_VPERMQ_IDX, Y7, Y7 - VPAND Y3, Y8, Y12 - VPAND Y3, Y9, Y13 - VPAND Y3, Y10, Y14 - VPAND Y3, Y11, Y15 - VPSRLD $16, Y8, Y8 - VPSRLD $16, Y9, Y9 - VPSRLD $16, Y10, Y10 - VPSRLD $16, Y11, Y11 - VPACKUSDW Y9, Y8, Y9 - VPACKUSDW Y13, Y12, Y8 - VPACKUSDW Y11, Y10, Y11 - VPACKUSDW Y15, Y14, Y10 - VPERMQ invntt_VPERMQ_IDX, Y8, Y8 - VPERMQ invntt_VPERMQ_IDX, Y9, Y9 - VPERMQ invntt_VPERMQ_IDX, Y10, Y10 - VPERMQ invntt_VPERMQ_IDX, Y11, Y11 - - // level 0 - // update - VPSUBW Y5, Y4, Y12 - VPSUBW Y7, Y6, Y13 - VPSUBW Y9, Y8, Y14 - VPSUBW Y11, Y10, Y15 - VPADDW Y4, Y5, Y4 - VPADDW Y6, Y7, Y6 - VPADDW Y8, Y9, Y8 - VPADDW Y10, Y11, Y10 - - // zetas - VMOVDQU (R8), Y7 - VMOVDQU 32(R8), Y9 - VMOVDQU 64(R8), Y11 - VMOVDQU 96(R8), Y3 - - // mul - VPMULLW Y7, Y12, Y5 - VPMULHW Y7, Y12, Y12 - VPMULLW Y9, Y13, Y7 - VPMULHW Y9, Y13, Y13 - VPMULLW Y11, Y14, Y9 - VPMULHW Y11, Y14, Y14 - VPMULLW Y3, Y15, Y11 - VPMULHW Y3, Y15, Y15 - - // reduce - VPMULLW Y0, Y5, Y5 - VPMULLW Y0, Y7, Y7 - VPMULLW Y0, Y9, Y9 - VPMULLW Y0, Y11, Y11 - VPMULHW Y1, Y5, Y5 - VPMULHW Y1, Y7, Y7 - VPMULHW Y1, Y9, Y9 - VPMULHW Y1, Y11, Y11 - VPSUBW Y5, Y12, Y5 - VPSUBW Y7, Y13, Y7 - VPSUBW Y9, Y14, Y9 - VPSUBW Y11, Y15, Y11 - - // level 1 - // shuffle - VMOVDQU ·vpshufb_idx<>(SB), Y3 - VPSHUFB Y3, Y4, Y12 - VPSHUFB Y3, Y5, Y13 - VPSHUFB Y3, Y6, Y14 - VPSHUFB Y3, Y7, Y15 - VPBLENDW $0x55, Y4, Y13, Y4 - VPBLENDW $0xAA, Y5, Y12, Y5 - VPBLENDW $0x55, Y6, Y15, Y6 - VPBLENDW $0xAA, Y7, Y14, Y7 - VPSHUFB Y3, Y8, Y12 - VPSHUFB Y3, Y9, Y13 - VPSHUFB Y3, Y10, Y14 - VPSHUFB Y3, Y11, Y15 - VPBLENDW $0x55, Y8, Y13, Y8 - VPBLENDW $0xAA, Y9, Y12, Y9 - VPBLENDW $0x55, Y10, Y15, Y10 - VPBLENDW $0xAA, Y11, Y14, Y11 - - // update - VPSUBW Y5, Y4, Y12 - VPSUBW Y7, Y6, Y13 - VPSUBW Y9, Y8, Y14 - VPSUBW Y11, Y10, Y15 - VPADDW Y4, Y5, Y4 - VPADDW Y6, Y7, Y6 - VPADDW Y8, Y9, Y8 - VPADDW Y10, Y11, Y10 - - // zetas - VMOVDQU 256(R8), Y7 - VMOVDQU 288(R8), Y9 - VMOVDQU 320(R8), Y11 - VMOVDQU 352(R8), Y3 - - // mul - VPMULLW Y7, Y12, Y5 - VPMULHW Y7, Y12, Y12 - VPMULLW Y9, Y13, Y7 - VPMULHW Y9, Y13, Y13 - VPMULLW Y11, Y14, Y9 - VPMULHW Y11, Y14, Y14 - VPMULLW Y3, Y15, Y11 - VPMULHW Y3, Y15, Y15 - - // reduce - VPMULLW Y0, Y5, Y5 - VPMULLW Y0, Y7, Y7 - VPMULLW Y0, Y9, Y9 - VPMULLW Y0, Y11, Y11 - VPMULHW Y1, Y5, Y5 - VPMULHW Y1, Y7, Y7 - VPMULHW Y1, Y9, Y9 - VPMULHW Y1, Y11, Y11 - VPSUBW Y5, Y12, Y5 - VPSUBW Y7, Y13, Y7 - VPSUBW Y9, Y14, Y9 - VPSUBW Y11, Y15, Y11 - - // reduce 2 - VPMULHW Y2, Y4, Y12 - VPMULHW Y2, Y6, Y13 - VPMULHW Y2, Y8, Y14 - VPMULHW Y2, Y10, Y15 - VPSRAW $11, Y12, Y12 - VPSRAW $11, Y13, Y13 - VPSRAW $11, Y14, Y14 - VPSRAW $11, Y15, Y15 - VPMULLW Y1, Y12, Y12 - VPMULLW Y1, Y13, Y13 - VPMULLW Y1, Y14, Y14 - VPMULLW Y1, Y15, Y15 - VPSUBW Y12, Y4, Y4 - VPSUBW Y13, Y6, Y6 - VPSUBW Y14, Y8, Y8 - VPSUBW Y15, Y10, Y10 - - // level 2 - // shuffle - VPSHUFD $0xB1, Y4, Y12 - VPSHUFD $0xB1, Y5, Y13 - VPSHUFD $0xB1, Y6, Y14 - VPSHUFD $0xB1, Y7, Y15 - VPBLENDD $0x55, Y4, Y13, Y4 - VPBLENDD $0xAA, Y5, Y12, Y5 - VPBLENDD $0x55, Y6, Y15, Y6 - VPBLENDD $0xAA, Y7, Y14, Y7 - VPSHUFD $0xB1, Y8, Y12 - VPSHUFD $0xB1, Y9, Y13 - VPSHUFD $0xB1, Y10, Y14 - VPSHUFD $0xB1, Y11, Y15 - VPBLENDD $0x55, Y8, Y13, Y8 - VPBLENDD $0xAA, Y9, Y12, Y9 - VPBLENDD $0x55, Y10, Y15, Y10 - VPBLENDD $0xAA, Y11, Y14, Y11 - - // update - VPSUBW Y5, Y4, Y12 - VPSUBW Y7, Y6, Y13 - VPSUBW Y9, Y8, Y14 - VPSUBW Y11, Y10, Y15 - VPADDW Y4, Y5, Y4 - VPADDW Y6, Y7, Y6 - VPADDW Y8, Y9, Y8 - VPADDW Y10, Y11, Y10 - - // zetas - VMOVDQU 512(R8), Y7 - VMOVDQU 544(R8), Y9 - VMOVDQU 576(R8), Y11 - VMOVDQU 608(R8), Y3 - - // mul - VPMULLW Y7, Y12, Y5 - VPMULHW Y7, Y12, Y12 - VPMULLW Y9, Y13, Y7 - VPMULHW Y9, Y13, Y13 - VPMULLW Y11, Y14, Y9 - VPMULHW Y11, Y14, Y14 - VPMULLW Y3, Y15, Y11 - VPMULHW Y3, Y15, Y15 - - // reduce - VPMULLW Y0, Y5, Y5 - VPMULLW Y0, Y7, Y7 - VPMULLW Y0, Y9, Y9 - VPMULLW Y0, Y11, Y11 - VPMULHW Y1, Y5, Y5 - VPMULHW Y1, Y7, Y7 - VPMULHW Y1, Y9, Y9 - VPMULHW Y1, Y11, Y11 - VPSUBW Y5, Y12, Y5 - VPSUBW Y7, Y13, Y7 - VPSUBW Y9, Y14, Y9 - VPSUBW Y11, Y15, Y11 - - // level 3 - // shuffle - VSHUFPD $0x00, Y5, Y4, Y3 - VSHUFPD $0x0F, Y5, Y4, Y4 - VSHUFPD $0x00, Y7, Y6, Y5 - VSHUFPD $0x0F, Y7, Y6, Y6 - VSHUFPD $0x00, Y9, Y8, Y7 - VSHUFPD $0x0F, Y9, Y8, Y8 - VSHUFPD $0x00, Y11, Y10, Y9 - VSHUFPD $0x0F, Y11, Y10, Y10 - - // update - VPSUBW Y4, Y3, Y12 - VPSUBW Y6, Y5, Y13 - VPSUBW Y8, Y7, Y14 - VPSUBW Y10, Y9, Y15 - VPADDW Y3, Y4, Y3 - VPADDW Y5, Y6, Y5 - VPADDW Y7, Y8, Y7 - VPADDW Y9, Y10, Y9 - - // zetas - VMOVDQU 768(R8), Y6 - VMOVDQU 800(R8), Y8 - VMOVDQU 832(R8), Y10 - VMOVDQU 864(R8), Y11 - - // mul - VPMULLW Y6, Y12, Y4 - VPMULHW Y6, Y12, Y12 - VPMULLW Y8, Y13, Y6 - VPMULHW Y8, Y13, Y13 - VPMULLW Y10, Y14, Y8 - VPMULHW Y10, Y14, Y14 - VPMULLW Y11, Y15, Y10 - VPMULHW Y11, Y15, Y15 - - // reduce - VPMULLW Y0, Y4, Y4 - VPMULLW Y0, Y6, Y6 - VPMULLW Y0, Y8, Y8 - VPMULLW Y0, Y10, Y10 - VPMULHW Y1, Y4, Y4 - VPMULHW Y1, Y6, Y6 - VPMULHW Y1, Y8, Y8 - VPMULHW Y1, Y10, Y10 - VPSUBW Y4, Y12, Y4 - VPSUBW Y6, Y13, Y6 - VPSUBW Y8, Y14, Y8 - VPSUBW Y10, Y15, Y10 - - // reduce 2 - VPMULHW Y2, Y3, Y12 - VPMULHW Y2, Y5, Y13 - VPMULHW Y2, Y7, Y14 - VPMULHW Y2, Y9, Y15 - VPSRAW $11, Y12, Y12 - VPSRAW $11, Y13, Y13 - VPSRAW $11, Y14, Y14 - VPSRAW $11, Y15, Y15 - VPMULLW Y1, Y12, Y12 - VPMULLW Y1, Y13, Y13 - VPMULLW Y1, Y14, Y14 - VPMULLW Y1, Y15, Y15 - VPSUBW Y12, Y3, Y3 - VPSUBW Y13, Y5, Y5 - VPSUBW Y14, Y7, Y7 - VPSUBW Y15, Y9, Y9 - - // level 4 - // shuffle - VPERM2I128 $0x02, Y3, Y4, Y11 - VPERM2I128 $0x13, Y3, Y4, Y3 - VPERM2I128 $0x02, Y5, Y6, Y4 - VPERM2I128 $0x13, Y5, Y6, Y5 - VPERM2I128 $0x02, Y7, Y8, Y6 - VPERM2I128 $0x13, Y7, Y8, Y7 - VPERM2I128 $0x02, Y9, Y10, Y8 - VPERM2I128 $0x13, Y9, Y10, Y9 - - // update - VMOVDQA Y11, Y12 - VMOVDQA Y4, Y13 - VMOVDQA Y6, Y14 - VMOVDQA Y8, Y15 - VPADDW Y11, Y3, Y10 - VPADDW Y4, Y5, Y4 - VPADDW Y6, Y7, Y6 - VPADDW Y8, Y9, Y8 - VPSUBW Y3, Y12, Y3 - VPSUBW Y5, Y13, Y5 - VPSUBW Y7, Y14, Y7 - VPSUBW Y9, Y15, Y9 - - // zetas - VMOVDQU 1024(R8), Y12 - VMOVDQU 1056(R8), Y13 - VMOVDQU 1088(R8), Y14 - VMOVDQU 1120(R8), Y15 - - // mul - VPMULLW Y12, Y3, Y11 - VPMULHW Y12, Y3, Y3 - VPMULLW Y13, Y5, Y12 - VPMULHW Y13, Y5, Y5 - VPMULLW Y14, Y7, Y13 - VPMULHW Y14, Y7, Y7 - VPMULLW Y15, Y9, Y14 - VPMULHW Y15, Y9, Y9 - - // reduce - VPMULLW Y0, Y11, Y11 - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULHW Y1, Y11, Y11 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPSUBW Y11, Y3, Y3 - VPSUBW Y12, Y5, Y5 - VPSUBW Y13, Y7, Y7 - VPSUBW Y14, Y9, Y9 - - // level 5 - // update - VMOVDQA Y10, Y12 - VMOVDQA Y3, Y13 - VMOVDQA Y6, Y14 - VMOVDQA Y7, Y15 - VPADDW Y10, Y4, Y10 - VPADDW Y3, Y5, Y3 - VPADDW Y6, Y8, Y6 - VPADDW Y7, Y9, Y7 - VPSUBW Y4, Y12, Y4 - VPSUBW Y5, Y13, Y5 - VPSUBW Y8, Y14, Y8 - VPSUBW Y9, Y15, Y9 - - // zetas - VMOVDQU 1280(SI), Y14 - VMOVDQU 1312(SI), Y15 - - // mul - VPMULLW Y14, Y4, Y11 - VPMULLW Y14, Y5, Y12 - VPMULLW Y15, Y8, Y13 - VPMULHW Y14, Y4, Y4 - VPMULHW Y14, Y5, Y5 - VPMULHW Y15, Y8, Y8 - VPMULLW Y15, Y9, Y14 - VPMULHW Y15, Y9, Y9 - - // reduce - VPMULLW Y0, Y11, Y11 - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULHW Y1, Y11, Y11 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPSUBW Y11, Y4, Y4 - VPSUBW Y12, Y5, Y5 - VPSUBW Y13, Y8, Y8 - VPSUBW Y14, Y9, Y9 - - // reduce 2 - VPMULHW Y2, Y10, Y12 - VPMULHW Y2, Y6, Y13 - VPSRAW $11, Y12, Y12 - VPSRAW $11, Y13, Y13 - VPMULLW Y1, Y12, Y12 - VPMULLW Y1, Y13, Y13 - VPSUBW Y12, Y10, Y10 - VPSUBW Y13, Y6, Y6 - - // level 6 - // update - VMOVDQA Y10, Y12 - VMOVDQA Y3, Y13 - VMOVDQA Y4, Y14 - VMOVDQA Y5, Y15 - VPADDW Y10, Y6, Y10 - VPADDW Y3, Y7, Y3 - VPADDW Y4, Y8, Y4 - VPADDW Y5, Y9, Y5 - VPSUBW Y6, Y12, Y6 - VPSUBW Y7, Y13, Y7 - VPSUBW Y8, Y14, Y8 - VPSUBW Y9, Y15, Y9 - - // zetas - VMOVDQU 1408(SI), Y15 - - // mul - VPMULLW Y15, Y6, Y11 - VPMULLW Y15, Y7, Y12 - VPMULLW Y15, Y8, Y13 - VPMULLW Y15, Y9, Y14 - VPMULHW Y15, Y6, Y6 - VPMULHW Y15, Y7, Y7 - VPMULHW Y15, Y8, Y8 - VPMULHW Y15, Y9, Y9 - - // reduce - VPMULLW Y0, Y11, Y11 - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULHW Y1, Y11, Y11 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPSUBW Y11, Y6, Y6 - VPSUBW Y12, Y7, Y7 - VPSUBW Y13, Y8, Y8 - VPSUBW Y14, Y9, Y9 - - // reduce 2 - VPMULHW Y2, Y3, Y12 - VPSRAW $11, Y12, Y12 - VPMULLW Y1, Y12, Y12 - VPSUBW Y12, Y3, Y3 - - // store - VMOVDQU Y10, (DI) - VMOVDQU Y3, 32(DI) - VMOVDQU Y4, 64(DI) - VMOVDQU Y5, 96(DI) - VMOVDQU Y6, 128(DI) - VMOVDQU Y7, 160(DI) - VMOVDQU Y8, 192(DI) - VMOVDQU Y9, 224(DI) - - ADDQ $256, DI - ADDQ $128, R8 - - // second round - // load - VMOVDQU (DI), Y4 - VMOVDQU 32(DI), Y5 - VMOVDQU 64(DI), Y6 - VMOVDQU 96(DI), Y7 - VMOVDQU 128(DI), Y8 - VMOVDQU 160(DI), Y9 - VMOVDQU 192(DI), Y10 - VMOVDQU 224(DI), Y11 - - // reorder - VMOVDQU ·lowdword<>(SB), Y3 - VPAND Y3, Y4, Y12 - VPAND Y3, Y5, Y13 - VPAND Y3, Y6, Y14 - VPAND Y3, Y7, Y15 - VPSRLD $16, Y4, Y4 - VPSRLD $16, Y5, Y5 - VPSRLD $16, Y6, Y6 - VPSRLD $16, Y7, Y7 - VPACKUSDW Y5, Y4, Y5 - VPACKUSDW Y13, Y12, Y4 - VPACKUSDW Y7, Y6, Y7 - VPACKUSDW Y15, Y14, Y6 - VPERMQ invntt_VPERMQ_IDX, Y4, Y4 - VPERMQ invntt_VPERMQ_IDX, Y5, Y5 - VPERMQ invntt_VPERMQ_IDX, Y6, Y6 - VPERMQ invntt_VPERMQ_IDX, Y7, Y7 - VPAND Y3, Y8, Y12 - VPAND Y3, Y9, Y13 - VPAND Y3, Y10, Y14 - VPAND Y3, Y11, Y15 - VPSRLD $16, Y8, Y8 - VPSRLD $16, Y9, Y9 - VPSRLD $16, Y10, Y10 - VPSRLD $16, Y11, Y11 - VPACKUSDW Y9, Y8, Y9 - VPACKUSDW Y13, Y12, Y8 - VPACKUSDW Y11, Y10, Y11 - VPACKUSDW Y15, Y14, Y10 - VPERMQ invntt_VPERMQ_IDX, Y8, Y8 - VPERMQ invntt_VPERMQ_IDX, Y9, Y9 - VPERMQ invntt_VPERMQ_IDX, Y10, Y10 - VPERMQ invntt_VPERMQ_IDX, Y11, Y11 - - // level 0 - // update - VMOVDQA Y4, Y12 - VMOVDQA Y6, Y13 - VMOVDQA Y8, Y14 - VMOVDQA Y10, Y15 - VPADDW Y4, Y5, Y4 - VPADDW Y6, Y7, Y6 - VPADDW Y8, Y9, Y8 - VPADDW Y10, Y11, Y10 - VPSUBW Y5, Y12, Y5 - VPSUBW Y7, Y13, Y7 - VPSUBW Y9, Y14, Y9 - VPSUBW Y11, Y15, Y11 - - // zetas - VMOVDQU (R8), Y13 - VMOVDQU 32(R8), Y14 - VMOVDQU 64(R8), Y15 - VMOVDQU 96(R8), Y3 - - // mul - VPMULLW Y13, Y5, Y12 - VPMULHW Y13, Y5, Y5 - VPMULLW Y14, Y7, Y13 - VPMULHW Y14, Y7, Y7 - VPMULLW Y15, Y9, Y14 - VPMULHW Y15, Y9, Y9 - VPMULLW Y3, Y11, Y15 - VPMULHW Y3, Y11, Y11 - - // reduce - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULLW Y0, Y15, Y15 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPMULHW Y1, Y15, Y15 - VPSUBW Y12, Y5, Y5 - VPSUBW Y13, Y7, Y7 - VPSUBW Y14, Y9, Y9 - VPSUBW Y15, Y11, Y11 - - // level 1 - // shuffle - VMOVDQU ·vpshufb_idx<>(SB), Y3 - VPSHUFB Y3, Y4, Y12 - VPSHUFB Y3, Y5, Y13 - VPSHUFB Y3, Y6, Y14 - VPSHUFB Y3, Y7, Y15 - VPBLENDW $0x55, Y4, Y13, Y4 - VPBLENDW $0xAA, Y5, Y12, Y5 - VPBLENDW $0x55, Y6, Y15, Y6 - VPBLENDW $0xAA, Y7, Y14, Y7 - VPSHUFB Y3, Y8, Y12 - VPSHUFB Y3, Y9, Y13 - VPSHUFB Y3, Y10, Y14 - VPSHUFB Y3, Y11, Y15 - VPBLENDW $0x55, Y8, Y13, Y8 - VPBLENDW $0xAA, Y9, Y12, Y9 - VPBLENDW $0x55, Y10, Y15, Y10 - VPBLENDW $0xAA, Y11, Y14, Y11 - - // update - VMOVDQA Y4, Y12 - VMOVDQA Y6, Y13 - VMOVDQA Y8, Y14 - VMOVDQA Y10, Y15 - VPADDW Y4, Y5, Y4 - VPADDW Y6, Y7, Y6 - VPADDW Y8, Y9, Y8 - VPADDW Y10, Y11, Y10 - VPSUBW Y5, Y12, Y5 - VPSUBW Y7, Y13, Y7 - VPSUBW Y9, Y14, Y9 - VPSUBW Y11, Y15, Y11 - - // zetas - VMOVDQU 256(R8), Y13 - VMOVDQU 288(R8), Y14 - VMOVDQU 320(R8), Y15 - VMOVDQU 352(R8), Y3 - - // mul - VPMULLW Y13, Y5, Y12 - VPMULHW Y13, Y5, Y5 - VPMULLW Y14, Y7, Y13 - VPMULHW Y14, Y7, Y7 - VPMULLW Y15, Y9, Y14 - VPMULHW Y15, Y9, Y9 - VPMULLW Y3, Y11, Y15 - VPMULHW Y3, Y11, Y11 - - // reduce - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULLW Y0, Y15, Y15 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPMULHW Y1, Y15, Y15 - VPSUBW Y12, Y5, Y5 - VPSUBW Y13, Y7, Y7 - VPSUBW Y14, Y9, Y9 - VPSUBW Y15, Y11, Y11 - - // reduce 2 - VPMULHW Y2, Y4, Y12 - VPMULHW Y2, Y6, Y13 - VPMULHW Y2, Y8, Y14 - VPMULHW Y2, Y10, Y15 - VPSRAW $11, Y12, Y12 - VPSRAW $11, Y13, Y13 - VPSRAW $11, Y14, Y14 - VPSRAW $11, Y15, Y15 - VPMULLW Y1, Y12, Y12 - VPMULLW Y1, Y13, Y13 - VPMULLW Y1, Y14, Y14 - VPMULLW Y1, Y15, Y15 - VPSUBW Y12, Y4, Y4 - VPSUBW Y13, Y6, Y6 - VPSUBW Y14, Y8, Y8 - VPSUBW Y15, Y10, Y10 - - // level 2 - // shuffle - VPSHUFD $0xB1, Y4, Y12 - VPSHUFD $0xB1, Y5, Y13 - VPSHUFD $0xB1, Y6, Y14 - VPSHUFD $0xB1, Y7, Y15 - VPBLENDD $0x55, Y4, Y13, Y4 - VPBLENDD $0xAA, Y5, Y12, Y5 - VPBLENDD $0x55, Y6, Y15, Y6 - VPBLENDD $0xAA, Y7, Y14, Y7 - VPSHUFD $0xB1, Y8, Y12 - VPSHUFD $0xB1, Y9, Y13 - VPSHUFD $0xB1, Y10, Y14 - VPSHUFD $0xB1, Y11, Y15 - VPBLENDD $0x55, Y8, Y13, Y8 - VPBLENDD $0xAA, Y9, Y12, Y9 - VPBLENDD $0x55, Y10, Y15, Y10 - VPBLENDD $0xAA, Y11, Y14, Y11 - - // update - VMOVDQA Y4, Y12 - VMOVDQA Y6, Y13 - VMOVDQA Y8, Y14 - VMOVDQA Y10, Y15 - VPADDW Y4, Y5, Y4 - VPADDW Y6, Y7, Y6 - VPADDW Y8, Y9, Y8 - VPADDW Y10, Y11, Y10 - VPSUBW Y5, Y12, Y5 - VPSUBW Y7, Y13, Y7 - VPSUBW Y9, Y14, Y9 - VPSUBW Y11, Y15, Y11 - - // zetas - VMOVDQU 512(R8), Y13 - VMOVDQU 544(R8), Y14 - VMOVDQU 576(R8), Y15 - VMOVDQU 608(R8), Y3 - - // mul - VPMULLW Y13, Y5, Y12 - VPMULHW Y13, Y5, Y5 - VPMULLW Y14, Y7, Y13 - VPMULHW Y14, Y7, Y7 - VPMULLW Y15, Y9, Y14 - VPMULHW Y15, Y9, Y9 - VPMULLW Y3, Y11, Y15 - VPMULHW Y3, Y11, Y11 - - // reduce - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULLW Y0, Y15, Y15 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPMULHW Y1, Y15, Y15 - VPSUBW Y12, Y5, Y5 - VPSUBW Y13, Y7, Y7 - VPSUBW Y14, Y9, Y9 - VPSUBW Y15, Y11, Y11 - - // level 3 - // shuffle - VSHUFPD $0x00, Y5, Y4, Y3 - VSHUFPD $0x0F, Y5, Y4, Y4 - VSHUFPD $0x00, Y7, Y6, Y5 - VSHUFPD $0x0F, Y7, Y6, Y6 - VSHUFPD $0x00, Y9, Y8, Y7 - VSHUFPD $0x0F, Y9, Y8, Y8 - VSHUFPD $0x00, Y11, Y10, Y9 - VSHUFPD $0x0F, Y11, Y10, Y10 - - // update - VMOVDQA Y3, Y12 - VMOVDQA Y5, Y13 - VMOVDQA Y7, Y14 - VMOVDQA Y9, Y15 - VPADDW Y3, Y4, Y3 - VPADDW Y5, Y6, Y5 - VPADDW Y7, Y8, Y7 - VPADDW Y9, Y10, Y9 - VPSUBW Y4, Y12, Y4 - VPSUBW Y6, Y13, Y6 - VPSUBW Y8, Y14, Y8 - VPSUBW Y10, Y15, Y10 - - // zetas - VMOVDQU 768(R8), Y12 - VMOVDQU 800(R8), Y13 - VMOVDQU 832(R8), Y14 - VMOVDQU 864(R8), Y15 - - // mul - VPMULLW Y12, Y4, Y11 - VPMULHW Y12, Y4, Y4 - VPMULLW Y13, Y6, Y12 - VPMULHW Y13, Y6, Y6 - VPMULLW Y14, Y8, Y13 - VPMULHW Y14, Y8, Y8 - VPMULLW Y15, Y10, Y14 - VPMULHW Y15, Y10, Y10 - - // reduce - VPMULLW Y0, Y11, Y11 - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULHW Y1, Y11, Y11 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPSUBW Y11, Y4, Y4 - VPSUBW Y12, Y6, Y6 - VPSUBW Y13, Y8, Y8 - VPSUBW Y14, Y10, Y10 - - // reduce 2 - VPMULHW Y2, Y3, Y12 - VPMULHW Y2, Y5, Y13 - VPMULHW Y2, Y7, Y14 - VPMULHW Y2, Y9, Y15 - VPSRAW $11, Y12, Y12 - VPSRAW $11, Y13, Y13 - VPSRAW $11, Y14, Y14 - VPSRAW $11, Y15, Y15 - VPMULLW Y1, Y12, Y12 - VPMULLW Y1, Y13, Y13 - VPMULLW Y1, Y14, Y14 - VPMULLW Y1, Y15, Y15 - VPSUBW Y12, Y3, Y3 - VPSUBW Y13, Y5, Y5 - VPSUBW Y14, Y7, Y7 - VPSUBW Y15, Y9, Y9 - - // level 4 - // shuffle - VPERM2I128 $0x02, Y3, Y4, Y11 - VPERM2I128 $0x13, Y3, Y4, Y3 - VPERM2I128 $0x02, Y5, Y6, Y4 - VPERM2I128 $0x13, Y5, Y6, Y5 - VPERM2I128 $0x02, Y7, Y8, Y6 - VPERM2I128 $0x13, Y7, Y8, Y7 - VPERM2I128 $0x02, Y9, Y10, Y8 - VPERM2I128 $0x13, Y9, Y10, Y9 - - // update - VMOVDQA Y11, Y12 - VMOVDQA Y4, Y13 - VMOVDQA Y6, Y14 - VMOVDQA Y8, Y15 - VPADDW Y11, Y3, Y10 - VPADDW Y4, Y5, Y4 - VPADDW Y6, Y7, Y6 - VPADDW Y8, Y9, Y8 - VPSUBW Y3, Y12, Y3 - VPSUBW Y5, Y13, Y5 - VPSUBW Y7, Y14, Y7 - VPSUBW Y9, Y15, Y9 - - // zetas - VMOVDQU 1024(R8), Y12 - VMOVDQU 1056(R8), Y13 - VMOVDQU 1088(R8), Y14 - VMOVDQU 1120(R8), Y15 - - // mul - VPMULLW Y12, Y3, Y11 - VPMULHW Y12, Y3, Y3 - VPMULLW Y13, Y5, Y12 - VPMULHW Y13, Y5, Y5 - VPMULLW Y14, Y7, Y13 - VPMULHW Y14, Y7, Y7 - VPMULLW Y15, Y9, Y14 - VPMULHW Y15, Y9, Y9 - - // reduce - VPMULLW Y0, Y11, Y11 - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULHW Y1, Y11, Y11 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPSUBW Y11, Y3, Y3 - VPSUBW Y12, Y5, Y5 - VPSUBW Y13, Y7, Y7 - VPSUBW Y14, Y9, Y9 - - // level 5 - // update - VMOVDQA Y10, Y12 - VMOVDQA Y3, Y13 - VMOVDQA Y6, Y14 - VMOVDQA Y7, Y15 - VPADDW Y10, Y4, Y10 - VPADDW Y3, Y5, Y3 - VPADDW Y6, Y8, Y6 - VPADDW Y7, Y9, Y7 - VPSUBW Y4, Y12, Y4 - VPSUBW Y5, Y13, Y5 - VPSUBW Y8, Y14, Y8 - VPSUBW Y9, Y15, Y9 - - // zetas - VMOVDQU 1344(SI), Y14 - VMOVDQU 1376(SI), Y15 - - // mul - VPMULLW Y14, Y4, Y11 - VPMULLW Y14, Y5, Y12 - VPMULLW Y15, Y8, Y13 - VPMULHW Y14, Y4, Y4 - VPMULHW Y14, Y5, Y5 - VPMULHW Y15, Y8, Y8 - VPMULLW Y15, Y9, Y14 - VPMULHW Y15, Y9, Y9 - - // reduce - VPMULLW Y0, Y11, Y11 - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULHW Y1, Y11, Y11 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPSUBW Y11, Y4, Y4 - VPSUBW Y12, Y5, Y5 - VPSUBW Y13, Y8, Y8 - VPSUBW Y14, Y9, Y9 - - // reduce 2 - VPMULHW Y2, Y10, Y12 - VPMULHW Y2, Y6, Y13 - VPSRAW $11, Y12, Y12 - VPSRAW $11, Y13, Y13 - VPMULLW Y1, Y12, Y12 - VPMULLW Y1, Y13, Y13 - VPSUBW Y12, Y10, Y10 - VPSUBW Y13, Y6, Y6 - - // level 6 - // update - VMOVDQA Y10, Y12 - VMOVDQA Y3, Y13 - VMOVDQA Y4, Y14 - VMOVDQA Y5, Y15 - VPADDW Y10, Y6, Y10 - VPADDW Y3, Y7, Y3 - VPADDW Y4, Y8, Y4 - VPADDW Y5, Y9, Y5 - VPSUBW Y6, Y12, Y6 - VPSUBW Y7, Y13, Y7 - VPSUBW Y8, Y14, Y8 - VPSUBW Y9, Y15, Y9 - - // zetas - VMOVDQU 1440(SI), Y15 - - // mul - VPMULLW Y15, Y6, Y11 - VPMULLW Y15, Y7, Y12 - VPMULLW Y15, Y8, Y13 - VPMULLW Y15, Y9, Y14 - VPMULHW Y15, Y6, Y6 - VPMULHW Y15, Y7, Y7 - VPMULHW Y15, Y8, Y8 - VPMULHW Y15, Y9, Y9 - - // reduce - VPMULLW Y0, Y11, Y11 - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULHW Y1, Y11, Y11 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPSUBW Y11, Y6, Y6 - VPSUBW Y12, Y7, Y7 - VPSUBW Y13, Y8, Y8 - VPSUBW Y14, Y9, Y9 - - // reduce 2 - VPMULHW Y2, Y3, Y12 - VPSRAW $11, Y12, Y12 - VPMULLW Y1, Y12, Y12 - VPSUBW Y12, Y3, Y3 - - // store - VMOVDQU Y10, (DI) - VMOVDQU Y3, 32(DI) - VMOVDQU Y4, 64(DI) - VMOVDQU Y5, 96(DI) - VMOVDQU Y6, 128(DI) - VMOVDQU Y7, 160(DI) - VMOVDQU Y8, 192(DI) - VMOVDQU Y9, 224(DI) - - SUBQ $256, DI - - // f - VMOVDQU ·f_x16<>(SB), Y2 - - // first round - // load - VMOVDQU (DI), Y4 - VMOVDQU 32(DI), Y5 - VMOVDQU 64(DI), Y6 - VMOVDQU 96(DI), Y7 - VMOVDQU 256(DI), Y8 - VMOVDQU 288(DI), Y9 - VMOVDQU 320(DI), Y10 - VMOVDQU 352(DI), Y11 - - // level 7 - // update - VMOVDQA Y4, Y12 - VMOVDQA Y5, Y13 - VMOVDQA Y6, Y14 - VMOVDQA Y7, Y15 - VPADDW Y4, Y8, Y4 - VPADDW Y5, Y9, Y5 - VPADDW Y6, Y10, Y6 - VPADDW Y7, Y11, Y7 - VPSUBW Y8, Y12, Y8 - VPSUBW Y9, Y13, Y9 - VPSUBW Y10, Y14, Y10 - VPSUBW Y11, Y15, Y11 - - // zeta - VMOVDQU 1472(SI), Y3 - - // mul - VPMULLW Y3, Y8, Y12 - VPMULLW Y3, Y9, Y13 - VPMULLW Y3, Y10, Y14 - VPMULLW Y3, Y11, Y15 - VPMULHW Y3, Y8, Y8 - VPMULHW Y3, Y9, Y9 - VPMULHW Y3, Y10, Y10 - VPMULHW Y3, Y11, Y11 - - // reduce - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULLW Y0, Y15, Y15 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPMULHW Y1, Y15, Y15 - VPSUBW Y12, Y8, Y8 - VPSUBW Y13, Y9, Y9 - VPSUBW Y14, Y10, Y10 - VPSUBW Y15, Y11, Y11 - VPADDW Y1, Y8, Y8 - VPADDW Y1, Y9, Y9 - VPADDW Y1, Y10, Y10 - VPADDW Y1, Y11, Y11 - - // mul - VPMULLW Y2, Y4, Y12 - VPMULLW Y2, Y5, Y13 - VPMULLW Y2, Y6, Y14 - VPMULLW Y2, Y7, Y15 - VPMULHW Y2, Y4, Y4 - VPMULHW Y2, Y5, Y5 - VPMULHW Y2, Y6, Y6 - VPMULHW Y2, Y7, Y7 - - // reduce - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULLW Y0, Y15, Y15 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPMULHW Y1, Y15, Y15 - VPSUBW Y12, Y4, Y4 - VPSUBW Y13, Y5, Y5 - VPSUBW Y14, Y6, Y6 - VPSUBW Y15, Y7, Y7 - VPADDW Y1, Y4, Y4 - VPADDW Y1, Y5, Y5 - VPADDW Y1, Y6, Y6 - VPADDW Y1, Y7, Y7 - - // store - VMOVDQU Y4, (DI) - VMOVDQU Y5, 32(DI) - VMOVDQU Y6, 64(DI) - VMOVDQU Y7, 96(DI) - VMOVDQU Y8, 256(DI) - VMOVDQU Y9, 288(DI) - VMOVDQU Y10, 320(DI) - VMOVDQU Y11, 352(DI) - - ADDQ $128, DI - - // second round - // load - VMOVDQU (DI), Y4 - VMOVDQU 32(DI), Y5 - VMOVDQU 64(DI), Y6 - VMOVDQU 96(DI), Y7 - VMOVDQU 256(DI), Y8 - VMOVDQU 288(DI), Y9 - VMOVDQU 320(DI), Y10 - VMOVDQU 352(DI), Y11 - - // zeta - VMOVDQU 1472(SI), Y3 - - // level 7 - // update - VMOVDQA Y4, Y12 - VMOVDQA Y5, Y13 - VMOVDQA Y6, Y14 - VMOVDQA Y7, Y15 - VPADDW Y4, Y8, Y4 - VPADDW Y5, Y9, Y5 - VPADDW Y6, Y10, Y6 - VPADDW Y7, Y11, Y7 - VPSUBW Y8, Y12, Y8 - VPSUBW Y9, Y13, Y9 - VPSUBW Y10, Y14, Y10 - VPSUBW Y11, Y15, Y11 - - // mul - VPMULLW Y3, Y8, Y12 - VPMULLW Y3, Y9, Y13 - VPMULLW Y3, Y10, Y14 - VPMULLW Y3, Y11, Y15 - VPMULHW Y3, Y8, Y8 - VPMULHW Y3, Y9, Y9 - VPMULHW Y3, Y10, Y10 - VPMULHW Y3, Y11, Y11 - - // reduce - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULLW Y0, Y15, Y15 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPMULHW Y1, Y15, Y15 - VPSUBW Y12, Y8, Y8 - VPSUBW Y13, Y9, Y9 - VPSUBW Y14, Y10, Y10 - VPSUBW Y15, Y11, Y11 - VPADDW Y1, Y8, Y8 - VPADDW Y1, Y9, Y9 - VPADDW Y1, Y10, Y10 - VPADDW Y1, Y11, Y11 - - // mul - VPMULLW Y2, Y4, Y12 - VPMULLW Y2, Y5, Y13 - VPMULLW Y2, Y6, Y14 - VPMULLW Y2, Y7, Y15 - VPMULHW Y2, Y4, Y4 - VPMULHW Y2, Y5, Y5 - VPMULHW Y2, Y6, Y6 - VPMULHW Y2, Y7, Y7 - - // reduce - VPMULLW Y0, Y12, Y12 - VPMULLW Y0, Y13, Y13 - VPMULLW Y0, Y14, Y14 - VPMULLW Y0, Y15, Y15 - VPMULHW Y1, Y12, Y12 - VPMULHW Y1, Y13, Y13 - VPMULHW Y1, Y14, Y14 - VPMULHW Y1, Y15, Y15 - VPSUBW Y12, Y4, Y4 - VPSUBW Y13, Y5, Y5 - VPSUBW Y14, Y6, Y6 - VPSUBW Y15, Y7, Y7 - VPADDW Y1, Y4, Y4 - VPADDW Y1, Y5, Y5 - VPADDW Y1, Y6, Y6 - VPADDW Y1, Y7, Y7 - - // store - VMOVDQU Y4, (DI) - VMOVDQU Y5, 32(DI) - VMOVDQU Y6, 64(DI) - VMOVDQU Y7, 96(DI) - VMOVDQU Y8, 256(DI) - VMOVDQU Y9, 288(DI) - VMOVDQU Y10, 320(DI) - VMOVDQU Y11, 352(DI) - - VZEROUPPER - RET - -// func pointwiseAccK2AVX2(dst *uint16, a, b **uint16) -TEXT ·pointwiseAccK2AVX2(SB), NOSPLIT, $0-24 - MOVQ dst+0(FP), DI - MOVQ a+8(FP), SI - MOVQ b+16(FP), DX - - VMOVDQU ·qinv_x16<>(SB), Y0 - VMOVDQU ·q_x16<>(SB), Y1 - VMOVDQU ·montsq_x16<>(SB), Y2 - - XORQ AX, AX - XORQ BX, BX - - MOVQ 8(SI), R8 // a[1] - MOVQ (SI), SI // a[0] - MOVQ 8(DX), R11 // b[1] - MOVQ (DX), DX // b[0] - -looptop2: - // load a - VMOVDQU (SI)(BX*1), Y4 - VMOVDQU 32(SI)(BX*1), Y5 - VMOVDQU 64(SI)(BX*1), Y6 - VMOVDQU (R8)(BX*1), Y7 - VMOVDQU 32(R8)(BX*1), Y8 - VMOVDQU 64(R8)(BX*1), Y9 - - // mul montsq - VPMULLW Y2, Y4, Y3 - VPMULHW Y2, Y4, Y10 - VPMULLW Y2, Y5, Y4 - VPMULHW Y2, Y5, Y11 - VPMULLW Y2, Y6, Y5 - VPMULHW Y2, Y6, Y12 - VPMULLW Y2, Y7, Y6 - VPMULHW Y2, Y7, Y13 - VPMULLW Y2, Y8, Y7 - VPMULHW Y2, Y8, Y14 - VPMULLW Y2, Y9, Y8 - VPMULHW Y2, Y9, Y15 - - // reduce - VPMULLW Y0, Y3, Y3 - VPMULLW Y0, Y4, Y4 - VPMULLW Y0, Y5, Y5 - VPMULLW Y0, Y6, Y6 - VPMULLW Y0, Y7, Y7 - VPMULLW Y0, Y8, Y8 - VPMULHW Y1, Y3, Y3 - VPMULHW Y1, Y4, Y4 - VPMULHW Y1, Y5, Y5 - VPMULHW Y1, Y6, Y6 - VPMULHW Y1, Y7, Y7 - VPMULHW Y1, Y8, Y8 - VPSUBW Y3, Y10, Y3 - VPSUBW Y4, Y11, Y4 - VPSUBW Y5, Y12, Y5 - VPSUBW Y6, Y13, Y6 - VPSUBW Y7, Y14, Y7 - VPSUBW Y8, Y15, Y8 - - // load b - VMOVDQU (DX)(BX*1), Y9 - VMOVDQU 32(DX)(BX*1), Y10 - VMOVDQU 64(DX)(BX*1), Y11 - VMOVDQU (R11)(BX*1), Y12 - VMOVDQU 32(R11)(BX*1), Y13 - VMOVDQU 64(R11)(BX*1), Y14 - - // mul - VPMULLW Y3, Y9, Y15 - VPMULHW Y3, Y9, Y9 - VPMULLW Y4, Y10, Y3 - VPMULHW Y4, Y10, Y10 - VPMULLW Y5, Y11, Y4 - VPMULHW Y5, Y11, Y11 - VPMULLW Y6, Y12, Y5 - VPMULHW Y6, Y12, Y12 - VPMULLW Y7, Y13, Y6 - VPMULHW Y7, Y13, Y13 - VPMULLW Y8, Y14, Y7 - VPMULHW Y8, Y14, Y14 - - // reduce - VPMULLW Y0, Y15, Y15 - VPMULLW Y0, Y3, Y3 - VPMULLW Y0, Y4, Y4 - VPMULLW Y0, Y5, Y5 - VPMULLW Y0, Y6, Y6 - VPMULLW Y0, Y7, Y7 - VPMULHW Y1, Y15, Y15 - VPMULHW Y1, Y3, Y3 - VPMULHW Y1, Y4, Y4 - VPMULHW Y1, Y5, Y5 - VPMULHW Y1, Y6, Y6 - VPMULHW Y1, Y7, Y7 - VPSUBW Y15, Y9, Y15 - VPSUBW Y3, Y10, Y3 - VPSUBW Y4, Y11, Y4 - VPSUBW Y5, Y12, Y5 - VPSUBW Y6, Y13, Y6 - VPSUBW Y7, Y14, Y7 - - // add - VPADDW Y15, Y5, Y5 - VPADDW Y3, Y6, Y6 - VPADDW Y4, Y7, Y7 - - // reduce 2 - VMOVDQU ·v_x16<>(SB), Y3 - VPMULHW Y3, Y5, Y8 - VPMULHW Y3, Y6, Y9 - VPMULHW Y3, Y7, Y10 - VPSRAW $11, Y8, Y8 - VPSRAW $11, Y9, Y9 - VPSRAW $11, Y10, Y10 - VPMULLW Y1, Y8, Y8 - VPMULLW Y1, Y9, Y9 - VPMULLW Y1, Y10, Y10 - VPSUBW Y8, Y5, Y5 - VPSUBW Y9, Y6, Y6 - VPSUBW Y10, Y7, Y7 - - // store - VMOVDQU Y5, (DI)(BX*1) - VMOVDQU Y6, 32(DI)(BX*1) - VMOVDQU Y7, 64(DI)(BX*1) - - ADDQ $1, AX - ADDQ $96, BX - CMPQ AX, $5 - JB looptop2 - - // load - VMOVDQU (SI)(BX*1), Y4 - VMOVDQU (R8)(BX*1), Y7 - VMOVDQU (DX)(BX*1), Y9 - VMOVDQU (R11)(BX*1), Y12 - - // mul montsq - VPMULLW Y2, Y4, Y3 - VPMULHW Y2, Y4, Y10 - VPMULLW Y2, Y7, Y6 - VPMULHW Y2, Y7, Y13 - - // reduce - VPMULLW Y0, Y3, Y3 - VPMULLW Y0, Y6, Y6 - VPMULHW Y1, Y3, Y3 - VPMULHW Y1, Y6, Y6 - VPSUBW Y3, Y10, Y3 - VPSUBW Y6, Y13, Y6 - - // mul - VPMULLW Y3, Y9, Y15 - VPMULHW Y3, Y9, Y9 - VPMULLW Y6, Y12, Y5 - VPMULHW Y6, Y12, Y12 - - // reduce - VPMULLW Y0, Y15, Y15 - VPMULLW Y0, Y5, Y5 - VPMULHW Y1, Y15, Y15 - VPMULHW Y1, Y5, Y5 - VPSUBW Y15, Y9, Y15 - VPSUBW Y5, Y12, Y5 - - // add - VPADDW Y15, Y5, Y5 - - // reduce 2 - VMOVDQU ·v_x16<>(SB), Y3 - VPMULHW Y3, Y5, Y8 - VPSRAW $11, Y8, Y8 - VPMULLW Y1, Y8, Y8 - VPSUBW Y8, Y5, Y5 - - // store - VMOVDQU Y5, (DI)(BX*1) - - VZEROUPPER - RET - -// func pointwiseAccK2AVX2(dst *uint16, a, b **uint16) -TEXT ·pointwiseAccK3AVX2(SB), NOSPLIT, $0-24 - MOVQ dst+0(FP), DI - MOVQ a+8(FP), SI - MOVQ b+16(FP), DX - - VMOVDQU ·qinv_x16<>(SB), Y0 - VMOVDQU ·q_x16<>(SB), Y1 - VMOVDQU ·montsq_x16<>(SB), Y2 - - XORQ AX, AX - XORQ BX, BX - - MOVQ (16)(SI), R9 // a[2] - MOVQ 8(SI), R8 // a[1] - MOVQ (SI), SI // a[0] - MOVQ 16(DX), R12 // b[2] - MOVQ 8(DX), R11 // b[1] - MOVQ (DX), DX // b[0] - -looptop3: - // load a - VMOVDQU (SI)(BX*1), Y4 - VMOVDQU 32(SI)(BX*1), Y5 - VMOVDQU (R8)(BX*1), Y6 - VMOVDQU 32(R8)(BX*1), Y7 - VMOVDQU (R9)(BX*1), Y8 - VMOVDQU 32(R9)(BX*1), Y9 - - // mul montsq - VPMULLW Y2, Y4, Y3 - VPMULHW Y2, Y4, Y10 - VPMULLW Y2, Y5, Y4 - VPMULHW Y2, Y5, Y11 - VPMULLW Y2, Y6, Y5 - VPMULHW Y2, Y6, Y12 - VPMULLW Y2, Y7, Y6 - VPMULHW Y2, Y7, Y13 - VPMULLW Y2, Y8, Y7 - VPMULHW Y2, Y8, Y14 - VPMULLW Y2, Y9, Y8 - VPMULHW Y2, Y9, Y15 - - // reduce - VPMULLW Y0, Y3, Y3 - VPMULLW Y0, Y4, Y4 - VPMULLW Y0, Y5, Y5 - VPMULLW Y0, Y6, Y6 - VPMULLW Y0, Y7, Y7 - VPMULLW Y0, Y8, Y8 - VPMULHW Y1, Y3, Y3 - VPMULHW Y1, Y4, Y4 - VPMULHW Y1, Y5, Y5 - VPMULHW Y1, Y6, Y6 - VPMULHW Y1, Y7, Y7 - VPMULHW Y1, Y8, Y8 - VPSUBW Y3, Y10, Y3 - VPSUBW Y4, Y11, Y4 - VPSUBW Y5, Y12, Y5 - VPSUBW Y6, Y13, Y6 - VPSUBW Y7, Y14, Y7 - VPSUBW Y8, Y15, Y8 - - // load b - VMOVDQU (DX)(BX*1), Y9 - VMOVDQU 32(DX)(BX*1), Y10 - VMOVDQU (R11)(BX*1), Y11 - VMOVDQU 32(R11)(BX*1), Y12 - VMOVDQU (R12)(BX*1), Y13 - VMOVDQU 32(R12)(BX*1), Y14 - - // mul - VPMULLW Y3, Y9, Y15 - VPMULHW Y3, Y9, Y9 - VPMULLW Y4, Y10, Y3 - VPMULHW Y4, Y10, Y10 - VPMULLW Y5, Y11, Y4 - VPMULHW Y5, Y11, Y11 - VPMULLW Y6, Y12, Y5 - VPMULHW Y6, Y12, Y12 - VPMULLW Y7, Y13, Y6 - VPMULHW Y7, Y13, Y13 - VPMULLW Y8, Y14, Y7 - VPMULHW Y8, Y14, Y14 - - // reduce - VPMULLW Y0, Y15, Y15 - VPMULLW Y0, Y3, Y3 - VPMULLW Y0, Y4, Y4 - VPMULLW Y0, Y5, Y5 - VPMULLW Y0, Y6, Y6 - VPMULLW Y0, Y7, Y7 - VPMULHW Y1, Y15, Y15 - VPMULHW Y1, Y3, Y3 - VPMULHW Y1, Y4, Y4 - VPMULHW Y1, Y5, Y5 - VPMULHW Y1, Y6, Y6 - VPMULHW Y1, Y7, Y7 - VPSUBW Y15, Y9, Y15 - VPSUBW Y3, Y10, Y3 - VPSUBW Y4, Y11, Y4 - VPSUBW Y5, Y12, Y5 - VPSUBW Y6, Y13, Y6 - VPSUBW Y7, Y14, Y7 - - // add - VPADDW Y15, Y4, Y4 - VPADDW Y3, Y5, Y5 - VPADDW Y4, Y6, Y6 - VPADDW Y5, Y7, Y7 - - // reduce 2 - VMOVDQU ·v_x16<>(SB), Y3 - VPMULHW Y3, Y6, Y8 - VPMULHW Y3, Y7, Y9 - VPSRAW $11, Y8, Y8 - VPSRAW $11, Y9, Y9 - VPMULLW Y1, Y8, Y8 - VPMULLW Y1, Y9, Y9 - VPSUBW Y8, Y6, Y6 - VPSUBW Y9, Y7, Y7 - - // store - VMOVDQU Y6, (DI)(BX*1) - VMOVDQU Y7, 32(DI)(BX*1) - - ADDQ $1, AX - ADDQ $64, BX - CMPQ AX, $8 - JB looptop3 - - VZEROUPPER - RET - -// func pointwiseAccK2AVX2(dst *uint16, a, b **uint16) -TEXT ·pointwiseAccK4AVX2(SB), NOSPLIT, $0-24 - MOVQ dst+0(FP), DI - MOVQ a+8(FP), SI - MOVQ b+16(FP), DX - - VMOVDQU ·qinv_x16<>(SB), Y0 - VMOVDQU ·q_x16<>(SB), Y1 - VMOVDQU ·montsq_x16<>(SB), Y2 - VMOVDQU ·v_x16<>(SB), Y3 - - XORQ AX, AX - XORQ BX, BX - - MOVQ 24(SI), R10 // a[3] - MOVQ 16(SI), R9 // a[2] - MOVQ 8(SI), R8 // a[1] - MOVQ (SI), SI // a[0] - MOVQ 24(DX), R13 // b[3] - MOVQ 16(DX), R12 // b[2] - MOVQ 8(DX), R11 // b[1] - MOVQ (DX), DX // b[0] - -looptop4: - // load a - VMOVDQU (SI)(BX*1), Y6 - VMOVDQU (R8)(BX*1), Y7 - VMOVDQU (R9)(BX*1), Y8 - VMOVDQU (R10)(BX*1), Y9 - - // mul montsq - VPMULLW Y2, Y6, Y5 - VPMULHW Y2, Y6, Y10 - VPMULLW Y2, Y7, Y6 - VPMULHW Y2, Y7, Y11 - VPMULLW Y2, Y8, Y7 - VPMULHW Y2, Y8, Y12 - VPMULLW Y2, Y9, Y8 - VPMULHW Y2, Y9, Y13 - - // reduce - VPMULLW Y0, Y5, Y5 - VPMULLW Y0, Y6, Y6 - VPMULLW Y0, Y7, Y7 - VPMULLW Y0, Y8, Y8 - VPMULHW Y1, Y5, Y5 - VPMULHW Y1, Y6, Y6 - VPMULHW Y1, Y7, Y7 - VPMULHW Y1, Y8, Y8 - VPSUBW Y5, Y10, Y5 - VPSUBW Y6, Y11, Y6 - VPSUBW Y7, Y12, Y7 - VPSUBW Y8, Y13, Y8 - - // load b - VMOVDQU (DX)(BX*1), Y9 - VMOVDQU (R11)(BX*1), Y10 - VMOVDQU (R12)(BX*1), Y11 - VMOVDQU (R13)(BX*1), Y12 - - // mul - VPMULLW Y5, Y9, Y4 - VPMULHW Y5, Y9, Y9 - VPMULLW Y6, Y10, Y5 - VPMULHW Y6, Y10, Y10 - VPMULLW Y7, Y11, Y6 - VPMULHW Y7, Y11, Y11 - VPMULLW Y8, Y12, Y7 - VPMULHW Y8, Y12, Y12 - - // reduce - VPMULLW Y0, Y4, Y4 - VPMULLW Y0, Y5, Y5 - VPMULLW Y0, Y6, Y6 - VPMULLW Y0, Y7, Y7 - VPMULHW Y1, Y4, Y4 - VPMULHW Y1, Y5, Y5 - VPMULHW Y1, Y6, Y6 - VPMULHW Y1, Y7, Y7 - VPSUBW Y4, Y9, Y4 - VPSUBW Y5, Y10, Y5 - VPSUBW Y6, Y11, Y6 - VPSUBW Y7, Y12, Y7 - - // add - VPADDW Y4, Y5, Y5 - VPADDW Y5, Y6, Y6 - VPADDW Y6, Y7, Y7 - - // reduce 2 - VPMULHW Y3, Y7, Y8 - VPSRAW $11, Y8, Y8 - VPMULLW Y1, Y8, Y8 - VPSUBW Y8, Y7, Y8 - - // store - VMOVDQU Y8, (DI)(BX*1) - - ADDQ $1, AX - ADDQ $32, BX - CMPQ AX, $16 - JB looptop4 - - VZEROUPPER - RET - -// func cbdEta4AVX2(dst *uint16, b *byte) -TEXT ·cbdEta4AVX2(SB), NOSPLIT, $0-16 - MOVQ dst+0(FP), DI - MOVQ b+8(FP), SI - - VMOVDQU ·mask11<>(SB), Y0 - VMOVDQU ·mask0f<>(SB), Y1 - VMOVDQU ·q_x16<>(SB), Y2 - - MOVQ $256, DX - -looptop: - VMOVUPD 0(SI), Y3 - VPAND Y3, Y0, Y4 - VPSRLW $1, Y3, Y3 - VPAND Y3, Y0, Y5 - VPADDB Y5, Y4, Y4 - VPSRLW $1, Y3, Y3 - VPAND Y3, Y0, Y5 - VPADDB Y5, Y4, Y4 - VPSRLW $1, Y3, Y3 - VPAND Y3, Y0, Y3 - VPADDB Y3, Y4, Y3 - VPSRLW $4, Y3, Y4 - VPAND Y3, Y1, Y3 - VPAND Y4, Y1, Y4 - VPSUBB Y4, Y3, Y3 - VPMOVSXBW X3, Y4 - VPADDW Y2, Y4, Y4 - VMOVUPD Y4, 0(DI) - VPERM2F128 $0x21, Y3, Y3, Y3 - VPMOVSXBW X3, Y4 - VPADDW Y2, Y4, Y4 - VMOVUPD Y4, 32(DI) - - ADDQ $64, DI - ADDQ $32, SI - SUBQ $32, DX - JA looptop - - VZEROUPPER - RET diff --git a/vendor/blitter.com/go/kyber/hwaccel_ref.go b/vendor/blitter.com/go/kyber/hwaccel_ref.go deleted file mode 100644 index 4b58010..0000000 --- a/vendor/blitter.com/go/kyber/hwaccel_ref.go +++ /dev/null @@ -1,14 +0,0 @@ -// hwaccel_ref.go - Unaccelerated stubs. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to the software, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -// +build !amd64 gccgo noasm !go1.10 - -package kyber - -func initHardwareAcceleration() { - forceDisableHardwareAcceleration() -} diff --git a/vendor/blitter.com/go/kyber/indcpa.go b/vendor/blitter.com/go/kyber/indcpa.go deleted file mode 100644 index 5c4186f..0000000 --- a/vendor/blitter.com/go/kyber/indcpa.go +++ /dev/null @@ -1,279 +0,0 @@ -// indcpa.go - Kyber IND-CPA encryption. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to the software, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -package kyber - -import ( - "io" - - "golang.org/x/crypto/sha3" -) - -// Serialize the public key as concatenation of the compressed and serialized -// vector of polynomials pk and the public seed used to generate the matrix A. -func packPublicKey(r []byte, pk *polyVec, seed []byte) { - pk.compress(r) - copy(r[pk.compressedSize():], seed[:SymSize]) -} - -// De-serialize and decompress public key from a byte array; approximate -// inverse of packPublicKey. -func unpackPublicKey(pk *polyVec, seed, packedPk []byte) { - pk.decompress(packedPk) - - off := pk.compressedSize() - copy(seed, packedPk[off:off+SymSize]) -} - -// Serialize the ciphertext as concatenation of the compressed and serialized -// vector of polynomials b and the compressed and serialized polynomial v. -func packCiphertext(r []byte, b *polyVec, v *poly) { - b.compress(r) - v.compress(r[b.compressedSize():]) -} - -// De-serialize and decompress ciphertext from a byte array; approximate -// inverse of packCiphertext. -func unpackCiphertext(b *polyVec, v *poly, c []byte) { - b.decompress(c) - v.decompress(c[b.compressedSize():]) -} - -// Serialize the secret key. -func packSecretKey(r []byte, sk *polyVec) { - sk.toBytes(r) -} - -// De-serialize the secret key; inverse of packSecretKey. -func unpackSecretKey(sk *polyVec, packedSk []byte) { - sk.fromBytes(packedSk) -} - -// Deterministically generate matrix A (or the transpose of A) from a seed. -// Entries of the matrix are polynomials that look uniformly random. Performs -// rejection sampling on output of SHAKE-128. -func genMatrix(a []polyVec, seed []byte, transposed bool) { - const ( - shake128Rate = 168 // xof.BlockSize() is not a constant. - maxBlocks = 4 - ) - var buf [shake128Rate * maxBlocks]byte - - var extSeed [SymSize + 2]byte - copy(extSeed[:SymSize], seed) - - xof := sha3.NewShake128() - - for i, v := range a { - for j, p := range v.vec { - if transposed { - extSeed[SymSize] = byte(i) - extSeed[SymSize+1] = byte(j) - } else { - extSeed[SymSize] = byte(j) - extSeed[SymSize+1] = byte(i) - } - - xof.Write(extSeed[:]) - xof.Read(buf[:]) - - for ctr, pos, maxPos := 0, 0, len(buf); ctr < kyberN; { - val := (uint16(buf[pos]) | (uint16(buf[pos+1]) << 8)) & 0x1fff - if val < kyberQ { - p.coeffs[ctr] = val - ctr++ - } - if pos += 2; pos == maxPos { - // On the unlikely chance 4 blocks is insufficient, - // incrementally squeeze out 1 block at a time. - xof.Read(buf[:shake128Rate]) - pos, maxPos = 0, shake128Rate - } - } - - xof.Reset() - } - } -} - -type indcpaPublicKey struct { - packed []byte - h [32]byte -} - -func (pk *indcpaPublicKey) toBytes() []byte { - return pk.packed -} - -func (pk *indcpaPublicKey) fromBytes(p *ParameterSet, b []byte) error { - if len(b) != p.indcpaPublicKeySize { - return ErrInvalidKeySize - } - - pk.packed = make([]byte, len(b)) - copy(pk.packed, b) - pk.h = sha3.Sum256(b) - - return nil -} - -type indcpaSecretKey struct { - packed []byte -} - -func (sk *indcpaSecretKey) fromBytes(p *ParameterSet, b []byte) error { - if len(b) != p.indcpaSecretKeySize { - return ErrInvalidKeySize - } - - sk.packed = make([]byte, len(b)) - copy(sk.packed, b) - - return nil -} - -// Generates public and private key for the CPA-secure public-key encryption -// scheme underlying Kyber. -func (p *ParameterSet) indcpaKeyPair(rng io.Reader) (*indcpaPublicKey, *indcpaSecretKey, error) { - buf := make([]byte, SymSize+SymSize) - if _, err := io.ReadFull(rng, buf[:SymSize]); err != nil { - return nil, nil, err - } - - sk := &indcpaSecretKey{ - packed: make([]byte, p.indcpaSecretKeySize), - } - pk := &indcpaPublicKey{ - packed: make([]byte, p.indcpaPublicKeySize), - } - - h := sha3.New512() - h.Write(buf[:SymSize]) - buf = buf[:0] // Reuse the backing store. - buf = h.Sum(buf) - publicSeed, noiseSeed := buf[:SymSize], buf[SymSize:] - - a := p.allocMatrix() - genMatrix(a, publicSeed, false) - - var nonce byte - skpv := p.allocPolyVec() - for _, pv := range skpv.vec { - pv.getNoise(noiseSeed, nonce, p.eta) - nonce++ - } - - skpv.ntt() - - e := p.allocPolyVec() - for _, pv := range e.vec { - pv.getNoise(noiseSeed, nonce, p.eta) - nonce++ - } - - // matrix-vector multiplication - pkpv := p.allocPolyVec() - for i, pv := range pkpv.vec { - pv.pointwiseAcc(&skpv, &a[i]) - } - - pkpv.invntt() - pkpv.add(&pkpv, &e) - - packSecretKey(sk.packed, &skpv) - packPublicKey(pk.packed, &pkpv, publicSeed) - pk.h = sha3.Sum256(pk.packed) - - return pk, sk, nil -} - -// Encryption function of the CPA-secure public-key encryption scheme -// underlying Kyber. -func (p *ParameterSet) indcpaEncrypt(c, m []byte, pk *indcpaPublicKey, coins []byte) { - var k, v, epp poly - var seed [SymSize]byte - - pkpv := p.allocPolyVec() - unpackPublicKey(&pkpv, seed[:], pk.packed) - - k.fromMsg(m) - - pkpv.ntt() - - at := p.allocMatrix() - genMatrix(at, seed[:], true) - - var nonce byte - sp := p.allocPolyVec() - for _, pv := range sp.vec { - pv.getNoise(coins, nonce, p.eta) - nonce++ - } - - sp.ntt() - - ep := p.allocPolyVec() - for _, pv := range ep.vec { - pv.getNoise(coins, nonce, p.eta) - nonce++ - } - - // matrix-vector multiplication - bp := p.allocPolyVec() - for i, pv := range bp.vec { - pv.pointwiseAcc(&sp, &at[i]) - } - - bp.invntt() - bp.add(&bp, &ep) - - v.pointwiseAcc(&pkpv, &sp) - v.invntt() - - epp.getNoise(coins, nonce, p.eta) // Don't need to increment nonce. - - v.add(&v, &epp) - v.add(&v, &k) - - packCiphertext(c, &bp, &v) -} - -// Decryption function of the CPA-secure public-key encryption scheme -// underlying Kyber. -func (p *ParameterSet) indcpaDecrypt(m, c []byte, sk *indcpaSecretKey) { - var v, mp poly - - skpv, bp := p.allocPolyVec(), p.allocPolyVec() - unpackCiphertext(&bp, &v, c) - unpackSecretKey(&skpv, sk.packed) - - bp.ntt() - - mp.pointwiseAcc(&skpv, &bp) - mp.invntt() - - mp.sub(&mp, &v) - - mp.toMsg(m) -} - -func (p *ParameterSet) allocMatrix() []polyVec { - m := make([]polyVec, 0, p.k) - for i := 0; i < p.k; i++ { - m = append(m, p.allocPolyVec()) - } - return m -} - -func (p *ParameterSet) allocPolyVec() polyVec { - vec := make([]*poly, 0, p.k) - for i := 0; i < p.k; i++ { - vec = append(vec, new(poly)) - } - - return polyVec{vec} -} diff --git a/vendor/blitter.com/go/kyber/kem.go b/vendor/blitter.com/go/kyber/kem.go deleted file mode 100644 index 363040c..0000000 --- a/vendor/blitter.com/go/kyber/kem.go +++ /dev/null @@ -1,187 +0,0 @@ -// kem.go - Kyber key encapsulation mechanism. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to the software, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -package kyber - -import ( - "bytes" - "crypto/subtle" - "errors" - "io" - - "golang.org/x/crypto/sha3" -) - -var ( - // ErrInvalidKeySize is the error returned when a byte serailized key is - // an invalid size. - ErrInvalidKeySize = errors.New("kyber: invalid key size") - - // ErrInvalidCipherTextSize is the error thrown via a panic when a byte - // serialized ciphertext is an invalid size. - ErrInvalidCipherTextSize = errors.New("kyber: invalid ciphertext size") - - // ErrInvalidPrivateKey is the error returned when a byte serialized - // private key is malformed. - ErrInvalidPrivateKey = errors.New("kyber: invalid private key") -) - -// PrivateKey is a Kyber private key. -type PrivateKey struct { - PublicKey - sk *indcpaSecretKey - z []byte -} - -// Bytes returns the byte serialization of a PrivateKey. -func (sk *PrivateKey) Bytes() []byte { - p := sk.PublicKey.p - - b := make([]byte, 0, p.secretKeySize) - b = append(b, sk.sk.packed...) - b = append(b, sk.PublicKey.pk.packed...) - b = append(b, sk.PublicKey.pk.h[:]...) - b = append(b, sk.z...) - - return b -} - -// PrivateKeyFromBytes deserializes a byte serialized PrivateKey. -func (p *ParameterSet) PrivateKeyFromBytes(b []byte) (*PrivateKey, error) { - if len(b) != p.secretKeySize { - return nil, ErrInvalidKeySize - } - - sk := new(PrivateKey) - sk.sk = new(indcpaSecretKey) - sk.z = make([]byte, SymSize) - sk.PublicKey.pk = new(indcpaPublicKey) - sk.PublicKey.p = p - - // De-serialize the public key first. - off := p.indcpaSecretKeySize - if err := sk.PublicKey.pk.fromBytes(p, b[off:off+p.publicKeySize]); err != nil { - return nil, err - } - off += p.publicKeySize - if !bytes.Equal(sk.PublicKey.pk.h[:], b[off:off+SymSize]) { - return nil, ErrInvalidPrivateKey - } - off += SymSize - copy(sk.z, b[off:]) - - // Then go back to de-serialize the private key. - if err := sk.sk.fromBytes(p, b[:p.indcpaSecretKeySize]); err != nil { - return nil, err - } - - return sk, nil -} - -// PublicKey is a Kyber public key. -type PublicKey struct { - pk *indcpaPublicKey - p *ParameterSet -} - -// Bytes returns the byte serialization of a PublicKey. -func (pk *PublicKey) Bytes() []byte { - return pk.pk.toBytes() -} - -// PublicKeyFromBytes deserializes a byte serialized PublicKey. -func (p *ParameterSet) PublicKeyFromBytes(b []byte) (*PublicKey, error) { - pk := &PublicKey{ - pk: new(indcpaPublicKey), - p: p, - } - - if err := pk.pk.fromBytes(p, b); err != nil { - return nil, err - } - - return pk, nil -} - -// GenerateKeyPair generates a private and public key parameterized with the -// given ParameterSet. -func (p *ParameterSet) GenerateKeyPair(rng io.Reader) (*PublicKey, *PrivateKey, error) { - kp := new(PrivateKey) - - var err error - if kp.PublicKey.pk, kp.sk, err = p.indcpaKeyPair(rng); err != nil { - return nil, nil, err - } - - kp.PublicKey.p = p - kp.z = make([]byte, SymSize) - if _, err := io.ReadFull(rng, kp.z); err != nil { - return nil, nil, err - } - - return &kp.PublicKey, kp, nil -} - -// KEMEncrypt generates cipher text and shared secret via the CCA-secure Kyber -// key encapsulation mechanism. -func (pk *PublicKey) KEMEncrypt(rng io.Reader) (cipherText []byte, sharedSecret []byte, err error) { - var buf [SymSize]byte - if _, err = io.ReadFull(rng, buf[:]); err != nil { - return nil, nil, err - } - buf = sha3.Sum256(buf[:]) // Don't release system RNG output - - hKr := sha3.New512() - hKr.Write(buf[:]) - hKr.Write(pk.pk.h[:]) // Multitarget countermeasures for coins + contributory KEM - kr := hKr.Sum(nil) - - cipherText = make([]byte, pk.p.cipherTextSize) - pk.p.indcpaEncrypt(cipherText, buf[:], pk.pk, kr[SymSize:]) // coins are in kr[SymSize:] - - hc := sha3.Sum256(cipherText) - copy(kr[SymSize:], hc[:]) // overwrite coins in kr with H(c) - hSs := sha3.New256() - hSs.Write(kr) - sharedSecret = hSs.Sum(nil) // hash concatenation of pre-k and H(c) to k - - return -} - -// KEMDecrypt generates shared secret for given cipher text via the CCA-secure -// Kyber key encapsulation mechanism. -// -// On failures, sharedSecret will contain a randomized value. Providing a -// cipher text that is obviously malformed (too large/small) will result in a -// panic. -func (sk *PrivateKey) KEMDecrypt(cipherText []byte) (sharedSecret []byte) { - var buf [2 * SymSize]byte - - p := sk.PublicKey.p - if len(cipherText) != p.CipherTextSize() { - panic(ErrInvalidCipherTextSize) - } - p.indcpaDecrypt(buf[:SymSize], cipherText, sk.sk) - - copy(buf[SymSize:], sk.PublicKey.pk.h[:]) // Multitarget countermeasure for coins + contributory KEM - kr := sha3.Sum512(buf[:]) - - cmp := make([]byte, p.cipherTextSize) - p.indcpaEncrypt(cmp, buf[:SymSize], sk.PublicKey.pk, kr[SymSize:]) // coins are in kr[SymSize:] - - hc := sha3.Sum256(cipherText) - copy(kr[SymSize:], hc[:]) // overwrite coins in kr with H(c) - - fail := subtle.ConstantTimeSelect(subtle.ConstantTimeCompare(cipherText, cmp), 0, 1) - subtle.ConstantTimeCopy(fail, kr[SymSize:], sk.z) // Overwrite pre-k with z on re-encryption failure - - h := sha3.New256() - h.Write(kr[:]) - sharedSecret = h.Sum(nil) - - return -} diff --git a/vendor/blitter.com/go/kyber/kex.go b/vendor/blitter.com/go/kyber/kex.go deleted file mode 100644 index f6b56c1..0000000 --- a/vendor/blitter.com/go/kyber/kex.go +++ /dev/null @@ -1,249 +0,0 @@ -// kex.go - Kyber key exchange. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to the software, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -package kyber - -import ( - "errors" - "io" - - "golang.org/x/crypto/sha3" -) - -var ( - // ErrInvalidMessageSize is the error thrown via a panic when a initator - // or responder message is an invalid size. - ErrInvalidMessageSize = errors.New("kyber: invalid message size") - - // ErrParameterSetMismatch is the error thrown via a panic when there - // is a mismatch between parameter sets. - ErrParameterSetMismatch = errors.New("kyber: parameter set mismatch") -) - -// UAKEInitiatorMessageSize returns the size of the initiator UAKE message -// in bytes. -func (p *ParameterSet) UAKEInitiatorMessageSize() int { - return p.PublicKeySize() + p.CipherTextSize() -} - -// UAKEResponderMessageSize returns the size of the responder UAKE message -// in bytes. -func (p *ParameterSet) UAKEResponderMessageSize() int { - return p.CipherTextSize() -} - -// UAKEInitiatorState is a initiator UAKE instance. Each instance MUST only -// be used for one key exchange and never reused. -type UAKEInitiatorState struct { - // Message is the UAKE message to send to the responder. - Message []byte - - eSk *PrivateKey - tk []byte -} - -// Shared generates a shared secret for the given UAKE instance and responder -// message. -// -// On failures, sharedSecret will contain a randomized value. Providing a -// cipher text that is obviously malformed (too large/small) will result in a -// panic. -func (s *UAKEInitiatorState) Shared(recv []byte) (sharedSecret []byte) { - xof := sha3.NewShake256() - var tk []byte - - tk = s.eSk.KEMDecrypt(recv) - xof.Write(tk) - xof.Write(s.tk) - sharedSecret = make([]byte, SymSize) - xof.Read(sharedSecret) - - return -} - -// NewUAKEInitiatorState creates a new initiator UAKE instance. -func (pk *PublicKey) NewUAKEInitiatorState(rng io.Reader) (*UAKEInitiatorState, error) { - s := new(UAKEInitiatorState) - s.Message = make([]byte, 0, pk.p.UAKEInitiatorMessageSize()) - - var err error - _, s.eSk, err = pk.p.GenerateKeyPair(rng) - if err != nil { - return nil, err - } - s.Message = append(s.Message, s.eSk.PublicKey.Bytes()...) - - var ct []byte - ct, s.tk, err = pk.KEMEncrypt(rng) - if err != nil { - return nil, err - } - - s.Message = append(s.Message, ct...) - - return s, nil -} - -// UAKEResponderShared generates a responder message and shared secret given -// a initiator UAKE message. -// -// On failures, sharedSecret will contain a randomized value. Providing a -// cipher text that is obviously malformed (too large/small) will result in a -// panic. -func (sk *PrivateKey) UAKEResponderShared(rng io.Reader, recv []byte) (message, sharedSecret []byte) { - p := sk.PublicKey.p - pkLen := p.PublicKeySize() - - // Deserialize the peer's ephemeral public key. - if len(recv) != p.UAKEInitiatorMessageSize() { - panic(ErrInvalidMessageSize) - } - rawPk, ct := recv[:pkLen], recv[pkLen:] - pk, err := p.PublicKeyFromBytes(rawPk) - if err != nil { - panic(err) - } - - xof := sha3.NewShake256() - var tk []byte - - message, tk, err = pk.KEMEncrypt(rng) - if err != nil { - panic(err) - } - xof.Write(tk) - - tk = sk.KEMDecrypt(ct) - xof.Write(tk) - sharedSecret = make([]byte, SymSize) - xof.Read(sharedSecret) - - return -} - -// AKEInitiatorMessageSize returns the size of the initiator AKE message -// in bytes. -func (p *ParameterSet) AKEInitiatorMessageSize() int { - return p.PublicKeySize() + p.CipherTextSize() -} - -// AKEResponderMessageSize returns the size of the responder AKE message -// in bytes. -func (p *ParameterSet) AKEResponderMessageSize() int { - return 2 * p.CipherTextSize() -} - -// AKEInitiatorState is a initiator AKE instance. Each instance MUST only be -// used for one key exchange and never reused. -type AKEInitiatorState struct { - // Message is the AKE message to send to the responder. - Message []byte - - eSk *PrivateKey - tk []byte -} - -// Shared generates a shared secret for the given AKE instance, responder -// message, and long term initiator private key. -// -// On failures sharedSecret will contain a randomized value. Providing a -// malformed responder message, or a private key that uses a different -// ParamterSet than the AKEInitiatorState will result in a panic. -func (s *AKEInitiatorState) Shared(recv []byte, initiatorPrivateKey *PrivateKey) (sharedSecret []byte) { - p := s.eSk.PublicKey.p - - if initiatorPrivateKey.PublicKey.p != p { - panic(ErrParameterSetMismatch) - } - if len(recv) != p.AKEResponderMessageSize() { - panic(ErrInvalidMessageSize) - } - ctLen := p.CipherTextSize() - - xof := sha3.NewShake256() - var tk []byte - - tk = s.eSk.KEMDecrypt(recv[:ctLen]) - xof.Write(tk) - - tk = initiatorPrivateKey.KEMDecrypt(recv[ctLen:]) - xof.Write(tk) - - xof.Write(s.tk) - sharedSecret = make([]byte, SymSize) - xof.Read(sharedSecret) - - return -} - -// NewAKEInitiatorState creates a new initiator AKE instance. -func (pk *PublicKey) NewAKEInitiatorState(rng io.Reader) (*AKEInitiatorState, error) { - s := new(AKEInitiatorState) - - // This is identical to the UAKE case, so just reuse the code. - us, err := pk.NewUAKEInitiatorState(rng) - if err != nil { - return nil, err - } - - s.Message = us.Message - s.eSk = us.eSk - s.tk = us.tk - - return s, nil -} - -// AKEResponderShared generates a responder message and shared secret given -// a initiator AKE message and long term initiator public key. -// -// On failures sharedSecret will contain a randomized value. Providing a -// malformed responder message, or a private key that uses a different -// ParamterSet than the AKEInitiatorState will result in a panic. -func (sk *PrivateKey) AKEResponderShared(rng io.Reader, recv []byte, peerPublicKey *PublicKey) (message, sharedSecret []byte) { - p := sk.PublicKey.p - pkLen := p.PublicKeySize() - - if peerPublicKey.p != p { - panic(ErrParameterSetMismatch) - } - - // Deserialize the peer's ephemeral public key. - if len(recv) != p.AKEInitiatorMessageSize() { - panic(ErrInvalidMessageSize) - } - rawPk, ct := recv[:pkLen], recv[pkLen:] - pk, err := p.PublicKeyFromBytes(rawPk) - if err != nil { - panic(err) - } - - message = make([]byte, 0, p.AKEResponderMessageSize()) - - xof := sha3.NewShake256() - var tk, tmp []byte - - tmp, tk, err = pk.KEMEncrypt(rng) - if err != nil { - panic(err) - } - xof.Write(tk) - message = append(message, tmp...) - - tmp, tk, err = peerPublicKey.KEMEncrypt(rng) - if err != nil { - panic(err) - } - xof.Write(tk) - message = append(message, tmp...) - - tk = sk.KEMDecrypt(ct) - xof.Write(tk) - sharedSecret = make([]byte, SymSize) - xof.Read(sharedSecret) - - return -} diff --git a/vendor/blitter.com/go/kyber/ntt.go b/vendor/blitter.com/go/kyber/ntt.go deleted file mode 100644 index 5fb9580..0000000 --- a/vendor/blitter.com/go/kyber/ntt.go +++ /dev/null @@ -1,65 +0,0 @@ -// ntt.go - Number-Theoretic Transform. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to the software, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -package kyber - -// Computes negacyclic number-theoretic transform (NTT) of a polynomial (vector -// of 256 coefficients) in place; inputs assumed to be in normal order, output -// in bitreversed order. -func nttRef(p *[kyberN]uint16) { - var j int - k := 1 - for level := 7; level >= 0; level-- { - distance := 1 << uint(level) - for start := 0; start < kyberN; start = j + distance { - zeta := zetas[k] - k++ - for j = start; j < start+distance; j++ { - t := montgomeryReduce(uint32(zeta) * uint32(p[j+distance])) - p[j+distance] = barrettReduce(p[j] + 4*kyberQ - t) - - if level&1 == 1 { // odd level - p[j] = p[j] + t // Omit reduction (be lazy) - } else { - p[j] = barrettReduce(p[j] + t) - } - } - } - } -} - -// Computes inverse of negacyclic number-theoretic transform (NTT) of a -// polynomial (vector of 256 coefficients) in place; inputs assumed to be in -// bitreversed order, output in normal order. -func invnttRef(a *[kyberN]uint16) { - for level := 0; level < 8; level++ { - distance := 1 << uint(level) - for start := 0; start < distance; start++ { - var jTwiddle int - for j := start; j < kyberN-1; j += 2 * distance { - w := uint32(omegasInvBitrevMontgomery[jTwiddle]) - jTwiddle++ - - temp := a[j] - - if level&1 == 1 { // odd level - a[j] = barrettReduce(temp + a[j+distance]) - } else { - a[j] = temp + a[j+distance] // Omit reduction (be lazy) - } - - t := w * (uint32(temp) + 4*kyberQ - uint32(a[j+distance])) - - a[j+distance] = montgomeryReduce(t) - } - } - } - - for i, v := range psisInvMontgomery { - a[i] = montgomeryReduce(uint32(a[i]) * uint32(v)) - } -} diff --git a/vendor/blitter.com/go/kyber/params.go b/vendor/blitter.com/go/kyber/params.go deleted file mode 100644 index 32bcabd..0000000 --- a/vendor/blitter.com/go/kyber/params.go +++ /dev/null @@ -1,116 +0,0 @@ -// params.go - Kyber parameterization. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to the software, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -package kyber - -const ( - // SymSize is the size of the shared key (and certain internal parameters - // such as hashes and seeds) in bytes. - SymSize = 32 - - kyberN = 256 - kyberQ = 7681 - - polySize = 416 - polyCompressedSize = 96 - - compressedCoeffSize = 352 -) - -var ( - // Kyber512 is the Kyber-512 parameter set, which aims to provide security - // equivalent to AES-128. - // - // This parameter set has a 1632 byte private key, 736 byte public key, - // and a 800 byte cipher text. - Kyber512 = newParameterSet("Kyber-512", 2) - - // Kyber768 is the Kyber-768 parameter set, which aims to provide security - // equivalent to AES-192. - // - // This parameter set has a 2400 byte private key, 1088 byte public key, - // and a 1152 byte cipher text. - Kyber768 = newParameterSet("Kyber-768", 3) - - // Kyber1024 is the Kyber-1024 parameter set, which aims to provide - // security equivalent to AES-256. - // - // This parameter set has a 3168 byte private key, 1440 byte public key, - // and a 1504 byte cipher text. - Kyber1024 = newParameterSet("Kyber-1024", 4) -) - -// ParameterSet is a Kyber parameter set. -type ParameterSet struct { - name string - - k int - eta int - - polyVecSize int - polyVecCompressedSize int - - indcpaMsgSize int - indcpaPublicKeySize int - indcpaSecretKeySize int - indcpaSize int - - publicKeySize int - secretKeySize int - cipherTextSize int -} - -// Name returns the name of a given ParameterSet. -func (p *ParameterSet) Name() string { - return p.name -} - -// PublicKeySize returns the size of a public key in bytes. -func (p *ParameterSet) PublicKeySize() int { - return p.publicKeySize -} - -// PrivateKeySize returns the size of a private key in bytes. -func (p *ParameterSet) PrivateKeySize() int { - return p.secretKeySize -} - -// CipherTextSize returns the size of a cipher text in bytes. -func (p *ParameterSet) CipherTextSize() int { - return p.cipherTextSize -} - -func newParameterSet(name string, k int) *ParameterSet { - var p ParameterSet - - p.name = name - p.k = k - switch k { - case 2: - p.eta = 5 - case 3: - p.eta = 4 - case 4: - p.eta = 3 - default: - panic("kyber: k must be in {2,3,4}") - } - - p.polyVecSize = k * polySize - p.polyVecCompressedSize = k * compressedCoeffSize - - p.indcpaMsgSize = SymSize - p.indcpaPublicKeySize = p.polyVecCompressedSize + SymSize - p.indcpaSecretKeySize = p.polyVecSize - p.indcpaSize = p.polyVecCompressedSize + polyCompressedSize - - p.publicKeySize = p.indcpaPublicKeySize - p.secretKeySize = p.indcpaSecretKeySize + p.indcpaPublicKeySize + 2*SymSize // 32 bytes of additional space to save H(pk) - p.cipherTextSize = p.indcpaSize - - return &p -} diff --git a/vendor/blitter.com/go/kyber/poly.go b/vendor/blitter.com/go/kyber/poly.go deleted file mode 100644 index 85f27b1..0000000 --- a/vendor/blitter.com/go/kyber/poly.go +++ /dev/null @@ -1,146 +0,0 @@ -// poly.go - Kyber polynomial. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to the software, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -package kyber - -import "golang.org/x/crypto/sha3" - -// Elements of R_q = Z_q[X]/(X^n + 1). Represents polynomial coeffs[0] + -// X*coeffs[1] + X^2*xoeffs[2] + ... + X^{n-1}*coeffs[n-1]. -type poly struct { - coeffs [kyberN]uint16 -} - -// Compression and subsequent serialization of a polynomial. -func (p *poly) compress(r []byte) { - var t [8]uint32 - - for i, k := 0, 0; i < kyberN; i, k = i+8, k+3 { - for j := 0; j < 8; j++ { - t[j] = uint32((((freeze(p.coeffs[i+j]) << 3) + kyberQ/2) / kyberQ) & 7) - } - - r[k] = byte(t[0] | (t[1] << 3) | (t[2] << 6)) - r[k+1] = byte((t[2] >> 2) | (t[3] << 1) | (t[4] << 4) | (t[5] << 7)) - r[k+2] = byte((t[5] >> 1) | (t[6] << 2) | (t[7] << 5)) - } -} - -// De-serialization and subsequent decompression of a polynomial; approximate -// inverse of poly.compress(). -func (p *poly) decompress(a []byte) { - for i, off := 0, 0; i < kyberN; i, off = i+8, off+3 { - p.coeffs[i+0] = ((uint16(a[off]&7) * kyberQ) + 4) >> 3 - p.coeffs[i+1] = (((uint16(a[off]>>3) & 7) * kyberQ) + 4) >> 3 - p.coeffs[i+2] = (((uint16(a[off]>>6) | (uint16(a[off+1]<<2) & 4)) * kyberQ) + 4) >> 3 - p.coeffs[i+3] = (((uint16(a[off+1]>>1) & 7) * kyberQ) + 4) >> 3 - p.coeffs[i+4] = (((uint16(a[off+1]>>4) & 7) * kyberQ) + 4) >> 3 - p.coeffs[i+5] = (((uint16(a[off+1]>>7) | (uint16(a[off+2]<<1) & 6)) * kyberQ) + 4) >> 3 - p.coeffs[i+6] = (((uint16(a[off+2]>>2) & 7) * kyberQ) + 4) >> 3 - p.coeffs[i+7] = (((uint16(a[off+2] >> 5)) * kyberQ) + 4) >> 3 - } -} - -// Serialization of a polynomial. -func (p *poly) toBytes(r []byte) { - var t [8]uint16 - - for i := 0; i < kyberN/8; i++ { - for j := 0; j < 8; j++ { - t[j] = freeze(p.coeffs[8*i+j]) - } - - r[13*i+0] = byte(t[0] & 0xff) - r[13*i+1] = byte((t[0] >> 8) | ((t[1] & 0x07) << 5)) - r[13*i+2] = byte((t[1] >> 3) & 0xff) - r[13*i+3] = byte((t[1] >> 11) | ((t[2] & 0x3f) << 2)) - r[13*i+4] = byte((t[2] >> 6) | ((t[3] & 0x01) << 7)) - r[13*i+5] = byte((t[3] >> 1) & 0xff) - r[13*i+6] = byte((t[3] >> 9) | ((t[4] & 0x0f) << 4)) - r[13*i+7] = byte((t[4] >> 4) & 0xff) - r[13*i+8] = byte((t[4] >> 12) | ((t[5] & 0x7f) << 1)) - r[13*i+9] = byte((t[5] >> 7) | ((t[6] & 0x03) << 6)) - r[13*i+10] = byte((t[6] >> 2) & 0xff) - r[13*i+11] = byte((t[6] >> 10) | ((t[7] & 0x1f) << 3)) - r[13*i+12] = byte(t[7] >> 5) - } -} - -// De-serialization of a polynomial; inverse of poly.toBytes(). -func (p *poly) fromBytes(a []byte) { - for i := 0; i < kyberN/8; i++ { - p.coeffs[8*i+0] = uint16(a[13*i+0]) | ((uint16(a[13*i+1]) & 0x1f) << 8) - p.coeffs[8*i+1] = (uint16(a[13*i+1]) >> 5) | (uint16(a[13*i+2]) << 3) | ((uint16(a[13*i+3]) & 0x03) << 11) - p.coeffs[8*i+2] = (uint16(a[13*i+3]) >> 2) | ((uint16(a[13*i+4]) & 0x7f) << 6) - p.coeffs[8*i+3] = (uint16(a[13*i+4]) >> 7) | (uint16(a[13*i+5]) << 1) | ((uint16(a[13*i+6]) & 0x0f) << 9) - p.coeffs[8*i+4] = (uint16(a[13*i+6]) >> 4) | (uint16(a[13*i+7]) << 4) | ((uint16(a[13*i+8]) & 0x01) << 12) - p.coeffs[8*i+5] = (uint16(a[13*i+8]) >> 1) | ((uint16(a[13*i+9]) & 0x3f) << 7) - p.coeffs[8*i+6] = (uint16(a[13*i+9]) >> 6) | (uint16(a[13*i+10]) << 2) | ((uint16(a[13*i+11]) & 0x07) << 10) - p.coeffs[8*i+7] = (uint16(a[13*i+11]) >> 3) | (uint16(a[13*i+12]) << 5) - } -} - -// Convert 32-byte message to polynomial. -func (p *poly) fromMsg(msg []byte) { - for i, v := range msg[:SymSize] { - for j := 0; j < 8; j++ { - mask := -((uint16(v) >> uint(j)) & 1) - p.coeffs[8*i+j] = mask & ((kyberQ + 1) / 2) - } - } -} - -// Convert polynomial to 32-byte message. -func (p *poly) toMsg(msg []byte) { - for i := 0; i < SymSize; i++ { - msg[i] = 0 - for j := 0; j < 8; j++ { - t := (((freeze(p.coeffs[8*i+j]) << 1) + kyberQ/2) / kyberQ) & 1 - msg[i] |= byte(t << uint(j)) - } - } -} - -// Sample a polynomial deterministically from a seed and a nonce, with output -// polynomial close to centered binomial distribution with parameter eta. -func (p *poly) getNoise(seed []byte, nonce byte, eta int) { - extSeed := make([]byte, 0, SymSize+1) - extSeed = append(extSeed, seed...) - extSeed = append(extSeed, nonce) - - buf := make([]byte, eta*kyberN/4) - sha3.ShakeSum256(buf, extSeed) - - p.cbd(buf, eta) -} - -// Computes negacyclic number-theoretic transform (NTT) of a polynomial in -// place; inputs assumed to be in normal order, output in bitreversed order. -func (p *poly) ntt() { - hardwareAccelImpl.nttFn(&p.coeffs) -} - -// Computes inverse of negacyclic number-theoretic transform (NTT) of a -// polynomial in place; inputs assumed to be in bitreversed order, output in -// normal order. -func (p *poly) invntt() { - hardwareAccelImpl.invnttFn(&p.coeffs) -} - -// Add two polynomials. -func (p *poly) add(a, b *poly) { - for i := range p.coeffs { - p.coeffs[i] = barrettReduce(a.coeffs[i] + b.coeffs[i]) - } -} - -// Subtract two polynomials. -func (p *poly) sub(a, b *poly) { - for i := range p.coeffs { - p.coeffs[i] = barrettReduce(a.coeffs[i] + 3*kyberQ - b.coeffs[i]) - } -} diff --git a/vendor/blitter.com/go/kyber/polyvec.go b/vendor/blitter.com/go/kyber/polyvec.go deleted file mode 100644 index f4c4b4a..0000000 --- a/vendor/blitter.com/go/kyber/polyvec.go +++ /dev/null @@ -1,115 +0,0 @@ -// polyvec.go - Vector of Kyber polynomials. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to the software, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -package kyber - -type polyVec struct { - vec []*poly -} - -// Compress and serialize vector of polynomials. -func (v *polyVec) compress(r []byte) { - var off int - for _, vec := range v.vec { - for j := 0; j < kyberN/8; j++ { - var t [8]uint16 - for k := 0; k < 8; k++ { - t[k] = uint16((((uint32(freeze(vec.coeffs[8*j+k])) << 11) + kyberQ/2) / kyberQ) & 0x7ff) - } - - r[off+11*j+0] = byte(t[0] & 0xff) - r[off+11*j+1] = byte((t[0] >> 8) | ((t[1] & 0x1f) << 3)) - r[off+11*j+2] = byte((t[1] >> 5) | ((t[2] & 0x03) << 6)) - r[off+11*j+3] = byte((t[2] >> 2) & 0xff) - r[off+11*j+4] = byte((t[2] >> 10) | ((t[3] & 0x7f) << 1)) - r[off+11*j+5] = byte((t[3] >> 7) | ((t[4] & 0x0f) << 4)) - r[off+11*j+6] = byte((t[4] >> 4) | ((t[5] & 0x01) << 7)) - r[off+11*j+7] = byte((t[5] >> 1) & 0xff) - r[off+11*j+8] = byte((t[5] >> 9) | ((t[6] & 0x3f) << 2)) - r[off+11*j+9] = byte((t[6] >> 6) | ((t[7] & 0x07) << 5)) - r[off+11*j+10] = byte((t[7] >> 3)) - } - off += compressedCoeffSize - } -} - -// De-serialize and decompress vector of polynomials; approximate inverse of -// polyVec.compress(). -func (v *polyVec) decompress(a []byte) { - var off int - for _, vec := range v.vec { - for j := 0; j < kyberN/8; j++ { - vec.coeffs[8*j+0] = uint16((((uint32(a[off+11*j+0]) | ((uint32(a[off+11*j+1]) & 0x07) << 8)) * kyberQ) + 1024) >> 11) - vec.coeffs[8*j+1] = uint16(((((uint32(a[off+11*j+1]) >> 3) | ((uint32(a[off+11*j+2]) & 0x3f) << 5)) * kyberQ) + 1024) >> 11) - vec.coeffs[8*j+2] = uint16(((((uint32(a[off+11*j+2]) >> 6) | ((uint32(a[off+11*j+3]) & 0xff) << 2) | ((uint32(a[off+11*j+4]) & 0x01) << 10)) * kyberQ) + 1024) >> 11) - vec.coeffs[8*j+3] = uint16(((((uint32(a[off+11*j+4]) >> 1) | ((uint32(a[off+11*j+5]) & 0x0f) << 7)) * kyberQ) + 1024) >> 11) - vec.coeffs[8*j+4] = uint16(((((uint32(a[off+11*j+5]) >> 4) | ((uint32(a[off+11*j+6]) & 0x7f) << 4)) * kyberQ) + 1024) >> 11) - vec.coeffs[8*j+5] = uint16(((((uint32(a[off+11*j+6]) >> 7) | ((uint32(a[off+11*j+7]) & 0xff) << 1) | ((uint32(a[off+11*j+8]) & 0x03) << 9)) * kyberQ) + 1024) >> 11) - vec.coeffs[8*j+6] = uint16(((((uint32(a[off+11*j+8]) >> 2) | ((uint32(a[off+11*j+9]) & 0x1f) << 6)) * kyberQ) + 1024) >> 11) - vec.coeffs[8*j+7] = uint16(((((uint32(a[off+11*j+9]) >> 5) | ((uint32(a[off+11*j+10]) & 0xff) << 3)) * kyberQ) + 1024) >> 11) - } - off += compressedCoeffSize - } -} - -// Serialize vector of polynomials. -func (v *polyVec) toBytes(r []byte) { - for i, p := range v.vec { - p.toBytes(r[i*polySize:]) - } -} - -// De-serialize vector of polynomials; inverse of polyVec.toBytes(). -func (v *polyVec) fromBytes(a []byte) { - for i, p := range v.vec { - p.fromBytes(a[i*polySize:]) - } -} - -// Apply forward NTT to all elements of a vector of polynomials. -func (v *polyVec) ntt() { - for _, p := range v.vec { - p.ntt() - } -} - -// Apply inverse NTT to all elements of a vector of polynomials. -func (v *polyVec) invntt() { - for _, p := range v.vec { - p.invntt() - } -} - -// Pointwise multiply elements of a and b and accumulate into p. -func (p *poly) pointwiseAcc(a, b *polyVec) { - hardwareAccelImpl.pointwiseAccFn(p, a, b) -} - -// Add vectors of polynomials. -func (v *polyVec) add(a, b *polyVec) { - for i, p := range v.vec { - p.add(a.vec[i], b.vec[i]) - } -} - -// Get compressed and serialized size in bytes. -func (v *polyVec) compressedSize() int { - return len(v.vec) * compressedCoeffSize -} - -func pointwiseAccRef(p *poly, a, b *polyVec) { - for j := 0; j < kyberN; j++ { - t := montgomeryReduce(4613 * uint32(b.vec[0].coeffs[j])) // 4613 = 2^{2*18} % q - p.coeffs[j] = montgomeryReduce(uint32(a.vec[0].coeffs[j]) * uint32(t)) - for i := 1; i < len(a.vec); i++ { // len(a.vec) == kyberK - t = montgomeryReduce(4613 * uint32(b.vec[i].coeffs[j])) - p.coeffs[j] += montgomeryReduce(uint32(a.vec[i].coeffs[j]) * uint32(t)) - } - - p.coeffs[j] = barrettReduce(p.coeffs[j]) - } -} diff --git a/vendor/blitter.com/go/kyber/precomp.go b/vendor/blitter.com/go/kyber/precomp.go deleted file mode 100644 index a18cd8f..0000000 --- a/vendor/blitter.com/go/kyber/precomp.go +++ /dev/null @@ -1,87 +0,0 @@ -// precomp.go - Precomputed NTT constants. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to the software, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -package kyber - -// Precomputed constants for the forward NTT and inverse NTT. -// Computed using Pari/GP as follows: -// -// brv=[0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240, \ -// 8,136,72,200,40,168,104,232,24,152,88,216,56,184,120,248, \ -// 4,132,68,196,36,164,100,228,20,148,84,212,52,180,116,244, \ -// 12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252, \ -// 2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242, \ -// 10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250, \ -// 6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246, \ -// 14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254, \ -// 1,129,65,193,33,161,97,225,17,145,81,209,49,177,113,241, \ -// 9,137,73,201,41,169,105,233,25,153,89,217,57,185,121,249, \ -// 5,133,69,197,37,165,101,229,21,149,85,213,53,181,117,245, \ -// 13,141,77,205,45,173,109,237,29,157,93,221,61,189,125,253, \ -// 3,131,67,195,35,163,99,227,19,147,83,211,51,179,115,243, \ -// 11,139,75,203,43,171,107,235,27,155,91,219,59,187,123,251, \ -// 7,135,71,199,39,167,103,231,23,151,87,215,55,183,119,247, \ -// 15,143,79,207,47,175,111,239,31,159,95,223,63,191,127,255]; -// -// q = 7681; -// n = 256; -// mont = Mod(2^18,q); -// -// g=0; for(i=2,q-1,if(znorder(Mod(i,q)) == 2*n, g=Mod(i,q); break)) -// -// zetas = lift(vector(n, i, g^(brv[i])*mont)) -// omegas_inv_bitrev_montgomery = lift(vector(n/2, i, (g^2)^(-brv[2*(i-1)+1])*mont)) -// psis_inv_montgomery = lift(vector(n, i, g^(-(i-1))/n*mont)) - -var zetas = [kyberN]uint16{ - 990, 7427, 2634, 6819, 578, 3281, 2143, 1095, 484, 6362, 3336, 5382, 6086, 3823, 877, 5656, - 3583, 7010, 6414, 263, 1285, 291, 7143, 7338, 1581, 5134, 5184, 5932, 4042, 5775, 2468, 3, - 606, 729, 5383, 962, 3240, 7548, 5129, 7653, 5929, 4965, 2461, 641, 1584, 2666, 1142, 157, - 7407, 5222, 5602, 5142, 6140, 5485, 4931, 1559, 2085, 5284, 2056, 3538, 7269, 3535, 7190, 1957, - 3465, 6792, 1538, 4664, 2023, 7643, 3660, 7673, 1694, 6905, 3995, 3475, 5939, 1859, 6910, 4434, - 1019, 1492, 7087, 4761, 657, 4859, 5798, 2640, 1693, 2607, 2782, 5400, 6466, 1010, 957, 3851, - 2121, 6392, 7319, 3367, 3659, 3375, 6430, 7583, 1549, 5856, 4773, 6084, 5544, 1650, 3997, 4390, - 6722, 2915, 4245, 2635, 6128, 7676, 5737, 1616, 3457, 3132, 7196, 4702, 6239, 851, 2122, 3009, - 7613, 7295, 2007, 323, 5112, 3716, 2289, 6442, 6965, 2713, 7126, 3401, 963, 6596, 607, 5027, - 7078, 4484, 5937, 944, 2860, 2680, 5049, 1777, 5850, 3387, 6487, 6777, 4812, 4724, 7077, 186, - 6848, 6793, 3463, 5877, 1174, 7116, 3077, 5945, 6591, 590, 6643, 1337, 6036, 3991, 1675, 2053, - 6055, 1162, 1679, 3883, 4311, 2106, 6163, 4486, 6374, 5006, 4576, 4288, 5180, 4102, 282, 6119, - 7443, 6330, 3184, 4971, 2530, 5325, 4171, 7185, 5175, 5655, 1898, 382, 7211, 43, 5965, 6073, - 1730, 332, 1577, 3304, 2329, 1699, 6150, 2379, 5113, 333, 3502, 4517, 1480, 1172, 5567, 651, - 925, 4573, 599, 1367, 4109, 1863, 6929, 1605, 3866, 2065, 4048, 839, 5764, 2447, 2022, 3345, - 1990, 4067, 2036, 2069, 3567, 7371, 2368, 339, 6947, 2159, 654, 7327, 2768, 6676, 987, 2214, -} - -var omegasInvBitrevMontgomery = [kyberN / 2]uint16{ - 990, 254, 862, 5047, 6586, 5538, 4400, 7103, 2025, 6804, 3858, 1595, 2299, 4345, 1319, 7197, - 7678, 5213, 1906, 3639, 1749, 2497, 2547, 6100, 343, 538, 7390, 6396, 7418, 1267, 671, 4098, - 5724, 491, 4146, 412, 4143, 5625, 2397, 5596, 6122, 2750, 2196, 1541, 2539, 2079, 2459, 274, - 7524, 6539, 5015, 6097, 7040, 5220, 2716, 1752, 28, 2552, 133, 4441, 6719, 2298, 6952, 7075, - 4672, 5559, 6830, 1442, 2979, 485, 4549, 4224, 6065, 1944, 5, 1553, 5046, 3436, 4766, 959, - 3291, 3684, 6031, 2137, 1597, 2908, 1825, 6132, 98, 1251, 4306, 4022, 4314, 362, 1289, 5560, - 3830, 6724, 6671, 1215, 2281, 4899, 5074, 5988, 5041, 1883, 2822, 7024, 2920, 594, 6189, 6662, - 3247, 771, 5822, 1742, 4206, 3686, 776, 5987, 8, 4021, 38, 5658, 3017, 6143, 889, 4216, -} - -var psisInvMontgomery = [kyberN]uint16{ - 1024, 4972, 5779, 6907, 4943, 4168, 315, 5580, 90, 497, 1123, 142, 4710, 5527, 2443, 4871, - 698, 2489, 2394, 4003, 684, 2241, 2390, 7224, 5072, 2064, 4741, 1687, 6841, 482, 7441, 1235, - 2126, 4742, 2802, 5744, 6287, 4933, 699, 3604, 1297, 2127, 5857, 1705, 3868, 3779, 4397, 2177, - 159, 622, 2240, 1275, 640, 6948, 4572, 5277, 209, 2605, 1157, 7328, 5817, 3191, 1662, 2009, - 4864, 574, 2487, 164, 6197, 4436, 7257, 3462, 4268, 4281, 3414, 4515, 3170, 1290, 2003, 5855, - 7156, 6062, 7531, 1732, 3249, 4884, 7512, 3590, 1049, 2123, 1397, 6093, 3691, 6130, 6541, 3946, - 6258, 3322, 1788, 4241, 4900, 2309, 1400, 1757, 400, 502, 6698, 2338, 3011, 668, 7444, 4580, - 6516, 6795, 2959, 4136, 3040, 2279, 6355, 3943, 2913, 6613, 7416, 4084, 6508, 5556, 4054, 3782, - 61, 6567, 2212, 779, 632, 5709, 5667, 4923, 4911, 6893, 4695, 4164, 3536, 2287, 7594, 2848, - 3267, 1911, 3128, 546, 1991, 156, 4958, 5531, 6903, 483, 875, 138, 250, 2234, 2266, 7222, - 2842, 4258, 812, 6703, 232, 5207, 6650, 2585, 1900, 6225, 4932, 7265, 4701, 3173, 4635, 6393, - 227, 7313, 4454, 4284, 6759, 1224, 5223, 1447, 395, 2608, 4502, 4037, 189, 3348, 54, 6443, - 2210, 6230, 2826, 1780, 3002, 5995, 1955, 6102, 6045, 3938, 5019, 4417, 1434, 1262, 1507, 5847, - 5917, 7157, 7177, 6434, 7537, 741, 4348, 1309, 145, 374, 2236, 4496, 5028, 6771, 6923, 7421, - 1978, 1023, 3857, 6876, 1102, 7451, 4704, 6518, 1344, 765, 384, 5705, 1207, 1630, 4734, 1563, - 6839, 5933, 1954, 4987, 7142, 5814, 7527, 4953, 7637, 4707, 2182, 5734, 2818, 541, 4097, 5641, -} diff --git a/vendor/blitter.com/go/kyber/reduce.go b/vendor/blitter.com/go/kyber/reduce.go deleted file mode 100644 index ada3eec..0000000 --- a/vendor/blitter.com/go/kyber/reduce.go +++ /dev/null @@ -1,43 +0,0 @@ -// reduce.go - Montgomery, Barret, and Full reduction. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to the software, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -package kyber - -const ( - qinv = 7679 // -inverse_mod(q,2^18) - rlog = 18 -) - -// Montgomery reduction; given a 32-bit integer a, computes 16-bit integer -// congruent to a * R^-1 mod q, where R=2^18 (see value of rlog). -func montgomeryReduce(a uint32) uint16 { - u := a * qinv - u &= (1 << rlog) - 1 - u *= kyberQ - a += u - return uint16(a >> rlog) -} - -// Barrett reduction; given a 16-bit integer a, computes 16-bit integer -// congruent to a mod q in {0,...,11768}. -func barrettReduce(a uint16) uint16 { - u := uint32(a >> 13) // ((uint32_t) a * sinv) >> 16 - u *= kyberQ - a -= uint16(u) - return a -} - -// Full reduction; given a 16-bit integer a, computes unsigned integer a mod q. -func freeze(x uint16) uint16 { - r := barrettReduce(x) - - m := r - kyberQ - c := int16(m) - c >>= 15 - r = m ^ ((r ^ m) & uint16(c)) - return r -} diff --git a/vendor/blitter.com/go/mtwist/mtwist.go b/vendor/blitter.com/go/mtwist/mtwist.go deleted file mode 100644 index 4527525..0000000 --- a/vendor/blitter.com/go/mtwist/mtwist.go +++ /dev/null @@ -1,125 +0,0 @@ -// MersenneTwister -// From https://gist.github.com/cuixin/1b8b6bd7bfbde8fe76e8 -package MersenneTwister - -import ( - "crypto" - - _ "crypto/sha512" -) - -const N = 312 -const M = 156 -const MATRIX_A = 0xB5026F5AA96619E9 -const UPPER_MASK = 0xFFFFFFFF80000000 -const LOWER_MASK = 0x7FFFFFFF - -type MT19937_64 struct { - array [N]uint64 //state vector - index uint64 // array index -} - -func New() *MT19937_64 { - return &MT19937_64{ - index: N + 1, - } -} - -func (m *MT19937_64) _initstate() { - // Recommendations abound that mtwist should throw away 1st 10000 or so - // of initial state - for i := 0; i < 10000; i++ { - _ = m.Int63() - } -} - -func (m *MT19937_64) Seed(seed int64) { - m.array[0] = uint64(seed) - for m.index = 1; m.index < N; m.index++ { - m.array[m.index] = (6364136223846793005*(m.array[m.index-1]^(m.array[m.index-1]>>62)) + m.index) - } - m._initstate() - //fmt.Printf("final array(s):%v\n", m.array) -} - -func _bytesToUint64(b []byte) (r uint64) { - r = uint64(b[0])<<56 + - uint64(b[1])<<48 + - uint64(b[2])<<40 + - uint64(b[3])<<32 + - uint64(b[4])<<24 + - uint64(b[5])<<16 + - uint64(b[6])<<8 + - uint64(b[7]) - return -} - -func (m *MT19937_64) SeedFullState(s []byte) { - //fmt.Printf("s:%v\n", s) - if len(s) < N*8 { - // Expand s if shorter than mtwist array state - ha := crypto.SHA512 - h := ha.New() - shortfallChunks := ((N * 8) - len(s)) / h.Size() - //shortfallRem := ((N * 8) - len(s)) % h.Size() - //fmt.Printf("chunks, rem:%d,%d\n", shortfallChunks, shortfallRem) - idx := 0 - for idx < shortfallChunks { - _, _ = h.Write(s) - s = h.Sum(s) - idx += 1 - } - _, _ = h.Write(s) - s = h.Sum(s) - //fmt.Printf("exp s:%v\n", s) - } - - for idx := 0; idx < N; { - m.array[idx] = _bytesToUint64(s[idx*8 : (idx*8)+8]) - idx += 1 - } - //fmt.Printf("final array(xs):%v\n", m.array) - m.index = 0 - m._initstate() -} - -func (m *MT19937_64) Int63() uint64 { - var i int - var x uint64 - mag01 := []uint64{0, MATRIX_A} - if m.index >= N { - if m.index == N+1 { - m.Seed(int64(5489)) - } - - for i = 0; i < N-M; i++ { - x = (m.array[i] & UPPER_MASK) | (m.array[i+1] & LOWER_MASK) - m.array[i] = m.array[i+(M)] ^ (x >> 1) ^ mag01[int(x&uint64(1))] - } - for ; i < N-1; i++ { - x = (m.array[i] & UPPER_MASK) | (m.array[i+1] & LOWER_MASK) - m.array[i] = m.array[i+(M-N)] ^ (x >> 1) ^ mag01[int(x&uint64(1))] - } - x = (m.array[N-1] & UPPER_MASK) | (m.array[0] & LOWER_MASK) - m.array[N-1] = m.array[M-1] ^ (x >> 1) ^ mag01[int(x&uint64(1))] - m.index = 0 - } - x = m.array[m.index] - m.index++ - x ^= (x >> 29) & 0x5555555555555555 - x ^= (x << 17) & 0x71D67FFFEDA60000 - x ^= (x << 37) & 0xFFF7EEE000000000 - x ^= (x >> 43) - return x -} - -func (m *MT19937_64) IntN(value uint64) uint64 { - return m.Int63() % value -} - -func (m *MT19937_64) Read(p []byte) (n int, err error) { - for idx := 0; idx < len(p); idx++ { - p[idx] = byte( (m.Int63()>>47) % 256) - } - return n, nil -} diff --git a/vendor/blitter.com/go/newhope/LICENSE b/vendor/blitter.com/go/newhope/LICENSE deleted file mode 100644 index 6ca207e..0000000 --- a/vendor/blitter.com/go/newhope/LICENSE +++ /dev/null @@ -1,122 +0,0 @@ -Creative Commons Legal Code - -CC0 1.0 Universal - - CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE - LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN - ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS - INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES - REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS - PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM - THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED - HEREUNDER. - -Statement of Purpose - -The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator -and subsequent owner(s) (each and all, an "owner") of an original work of -authorship and/or a database (each, a "Work"). - -Certain owners wish to permanently relinquish those rights to a Work for -the purpose of contributing to a commons of creative, cultural and -scientific works ("Commons") that the public can reliably and without fear -of later claims of infringement build upon, modify, incorporate in other -works, reuse and redistribute as freely as possible in any form whatsoever -and for any purposes, including without limitation commercial purposes. -These owners may contribute to the Commons to promote the ideal of a free -culture and the further production of creative, cultural and scientific -works, or to gain reputation or greater distribution for their Work in -part through the use and efforts of others. - -For these and/or other purposes and motivations, and without any -expectation of additional consideration or compensation, the person -associating CC0 with a Work (the "Affirmer"), to the extent that he or she -is an owner of Copyright and Related Rights in the Work, voluntarily -elects to apply CC0 to the Work and publicly distribute the Work under its -terms, with knowledge of his or her Copyright and Related Rights in the -Work and the meaning and intended legal effect of CC0 on those rights. - -1. Copyright and Related Rights. A Work made available under CC0 may be -protected by copyright and related or neighboring rights ("Copyright and -Related Rights"). Copyright and Related Rights include, but are not -limited to, the following: - - i. the right to reproduce, adapt, distribute, perform, display, - communicate, and translate a Work; - ii. moral rights retained by the original author(s) and/or performer(s); -iii. publicity and privacy rights pertaining to a person's image or - likeness depicted in a Work; - iv. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(a), below; - v. rights protecting the extraction, dissemination, use and reuse of data - in a Work; - vi. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation - thereof, including any amended or successor version of such - directive); and -vii. other similar, equivalent or corresponding rights throughout the - world based on applicable law or treaty, and any national - implementations thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention -of, applicable law, Affirmer hereby overtly, fully, permanently, -irrevocably and unconditionally waives, abandons, and surrenders all of -Affirmer's Copyright and Related Rights and associated claims and causes -of action, whether now known or unknown (including existing as well as -future claims and causes of action), in the Work (i) in all territories -worldwide, (ii) for the maximum duration provided by applicable law or -treaty (including future time extensions), (iii) in any current or future -medium and for any number of copies, and (iv) for any purpose whatsoever, -including without limitation commercial, advertising or promotional -purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each -member of the public at large and to the detriment of Affirmer's heirs and -successors, fully intending that such Waiver shall not be subject to -revocation, rescission, cancellation, termination, or any other legal or -equitable action to disrupt the quiet enjoyment of the Work by the public -as contemplated by Affirmer's express Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason -be judged legally invalid or ineffective under applicable law, then the -Waiver shall be preserved to the maximum extent permitted taking into -account Affirmer's express Statement of Purpose. In addition, to the -extent the Waiver is so judged Affirmer hereby grants to each affected -person a royalty-free, non transferable, non sublicensable, non exclusive, -irrevocable and unconditional license to exercise Affirmer's Copyright and -Related Rights in the Work (i) in all territories worldwide, (ii) for the -maximum duration provided by applicable law or treaty (including future -time extensions), (iii) in any current or future medium and for any number -of copies, and (iv) for any purpose whatsoever, including without -limitation commercial, advertising or promotional purposes (the -"License"). The License shall be deemed effective as of the date CC0 was -applied by Affirmer to the Work. Should any part of the License for any -reason be judged legally invalid or ineffective under applicable law, such -partial invalidity or ineffectiveness shall not invalidate the remainder -of the License, and in such case Affirmer hereby affirms that he or she -will not (i) exercise any of his or her remaining Copyright and Related -Rights in the Work or (ii) assert any associated claims and causes of -action with respect to the Work, in either case contrary to Affirmer's -express Statement of Purpose. - -4. Limitations and Disclaimers. - - a. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - b. Affirmer offers the Work as-is and makes no representations or - warranties of any kind concerning the Work, express, implied, - statutory or otherwise, including without limitation warranties of - title, merchantability, fitness for a particular purpose, non - infringement, or the absence of latent or other defects, accuracy, or - the present or absence of errors, whether or not discoverable, all to - the greatest extent permissible under applicable law. - c. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without - limitation any person's Copyright and Related Rights in the Work. - Further, Affirmer disclaims responsibility for obtaining any necessary - consents, permissions or other rights required for any use of the - Work. - d. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to - this CC0 or use of the Work. - diff --git a/vendor/blitter.com/go/newhope/batcher.go b/vendor/blitter.com/go/newhope/batcher.go deleted file mode 100644 index 2f99489..0000000 --- a/vendor/blitter.com/go/newhope/batcher.go +++ /dev/null @@ -1,929 +0,0 @@ -// batcher.go - Constant time polynomial sampler. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to newhope, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -package newhope - -func batcher84(x []uint16) { - // In theory this should probably be inlined. - compareAndSwap := func(x []uint16, i, j int) { - const _5q = 5 * paramQ - var c int32 - var t uint16 - - c = _5q - 1 - int32(x[16*i]) - c >>= 31 - t = x[16*i] ^ x[16*j] - t &= uint16(c) - x[16*i] ^= t - x[16*j] ^= t - } - - compareAndSwap(x, 0, 1) - compareAndSwap(x, 2, 3) - compareAndSwap(x, 0, 2) - compareAndSwap(x, 1, 3) - compareAndSwap(x, 1, 2) - compareAndSwap(x, 4, 5) - compareAndSwap(x, 6, 7) - compareAndSwap(x, 4, 6) - compareAndSwap(x, 5, 7) - compareAndSwap(x, 5, 6) - compareAndSwap(x, 0, 4) - compareAndSwap(x, 2, 6) - compareAndSwap(x, 2, 4) - compareAndSwap(x, 1, 5) - compareAndSwap(x, 3, 7) - compareAndSwap(x, 3, 5) - compareAndSwap(x, 1, 2) - compareAndSwap(x, 3, 4) - compareAndSwap(x, 5, 6) - compareAndSwap(x, 8, 9) - compareAndSwap(x, 10, 11) - compareAndSwap(x, 8, 10) - compareAndSwap(x, 9, 11) - compareAndSwap(x, 9, 10) - compareAndSwap(x, 12, 13) - compareAndSwap(x, 14, 15) - compareAndSwap(x, 12, 14) - compareAndSwap(x, 13, 15) - compareAndSwap(x, 13, 14) - compareAndSwap(x, 8, 12) - compareAndSwap(x, 10, 14) - compareAndSwap(x, 10, 12) - compareAndSwap(x, 9, 13) - compareAndSwap(x, 11, 15) - compareAndSwap(x, 11, 13) - compareAndSwap(x, 9, 10) - compareAndSwap(x, 11, 12) - compareAndSwap(x, 13, 14) - compareAndSwap(x, 0, 8) - compareAndSwap(x, 4, 12) - compareAndSwap(x, 4, 8) - compareAndSwap(x, 2, 10) - compareAndSwap(x, 6, 14) - compareAndSwap(x, 6, 10) - compareAndSwap(x, 2, 4) - compareAndSwap(x, 6, 8) - compareAndSwap(x, 10, 12) - compareAndSwap(x, 1, 9) - compareAndSwap(x, 5, 13) - compareAndSwap(x, 5, 9) - compareAndSwap(x, 3, 11) - compareAndSwap(x, 7, 15) - compareAndSwap(x, 7, 11) - compareAndSwap(x, 3, 5) - compareAndSwap(x, 7, 9) - compareAndSwap(x, 11, 13) - compareAndSwap(x, 1, 2) - compareAndSwap(x, 3, 4) - compareAndSwap(x, 5, 6) - compareAndSwap(x, 7, 8) - compareAndSwap(x, 9, 10) - compareAndSwap(x, 11, 12) - compareAndSwap(x, 13, 14) - compareAndSwap(x, 16, 17) - compareAndSwap(x, 18, 19) - compareAndSwap(x, 16, 18) - compareAndSwap(x, 17, 19) - compareAndSwap(x, 17, 18) - compareAndSwap(x, 20, 21) - compareAndSwap(x, 22, 23) - compareAndSwap(x, 20, 22) - compareAndSwap(x, 21, 23) - compareAndSwap(x, 21, 22) - compareAndSwap(x, 16, 20) - compareAndSwap(x, 18, 22) - compareAndSwap(x, 18, 20) - compareAndSwap(x, 17, 21) - compareAndSwap(x, 19, 23) - compareAndSwap(x, 19, 21) - compareAndSwap(x, 17, 18) - compareAndSwap(x, 19, 20) - compareAndSwap(x, 21, 22) - compareAndSwap(x, 24, 25) - compareAndSwap(x, 26, 27) - compareAndSwap(x, 24, 26) - compareAndSwap(x, 25, 27) - compareAndSwap(x, 25, 26) - compareAndSwap(x, 28, 29) - compareAndSwap(x, 30, 31) - compareAndSwap(x, 28, 30) - compareAndSwap(x, 29, 31) - compareAndSwap(x, 29, 30) - compareAndSwap(x, 24, 28) - compareAndSwap(x, 26, 30) - compareAndSwap(x, 26, 28) - compareAndSwap(x, 25, 29) - compareAndSwap(x, 27, 31) - compareAndSwap(x, 27, 29) - compareAndSwap(x, 25, 26) - compareAndSwap(x, 27, 28) - compareAndSwap(x, 29, 30) - compareAndSwap(x, 16, 24) - compareAndSwap(x, 20, 28) - compareAndSwap(x, 20, 24) - compareAndSwap(x, 18, 26) - compareAndSwap(x, 22, 30) - compareAndSwap(x, 22, 26) - compareAndSwap(x, 18, 20) - compareAndSwap(x, 22, 24) - compareAndSwap(x, 26, 28) - compareAndSwap(x, 17, 25) - compareAndSwap(x, 21, 29) - compareAndSwap(x, 21, 25) - compareAndSwap(x, 19, 27) - compareAndSwap(x, 23, 31) - compareAndSwap(x, 23, 27) - compareAndSwap(x, 19, 21) - compareAndSwap(x, 23, 25) - compareAndSwap(x, 27, 29) - compareAndSwap(x, 17, 18) - compareAndSwap(x, 19, 20) - compareAndSwap(x, 21, 22) - compareAndSwap(x, 23, 24) - compareAndSwap(x, 25, 26) - compareAndSwap(x, 27, 28) - compareAndSwap(x, 29, 30) - compareAndSwap(x, 0, 16) - compareAndSwap(x, 8, 24) - compareAndSwap(x, 8, 16) - compareAndSwap(x, 4, 20) - compareAndSwap(x, 12, 28) - compareAndSwap(x, 12, 20) - compareAndSwap(x, 4, 8) - compareAndSwap(x, 12, 16) - compareAndSwap(x, 20, 24) - compareAndSwap(x, 2, 18) - compareAndSwap(x, 10, 26) - compareAndSwap(x, 10, 18) - compareAndSwap(x, 6, 22) - compareAndSwap(x, 14, 30) - compareAndSwap(x, 14, 22) - compareAndSwap(x, 6, 10) - compareAndSwap(x, 14, 18) - compareAndSwap(x, 22, 26) - compareAndSwap(x, 2, 4) - compareAndSwap(x, 6, 8) - compareAndSwap(x, 10, 12) - compareAndSwap(x, 14, 16) - compareAndSwap(x, 18, 20) - compareAndSwap(x, 22, 24) - compareAndSwap(x, 26, 28) - compareAndSwap(x, 1, 17) - compareAndSwap(x, 9, 25) - compareAndSwap(x, 9, 17) - compareAndSwap(x, 5, 21) - compareAndSwap(x, 13, 29) - compareAndSwap(x, 13, 21) - compareAndSwap(x, 5, 9) - compareAndSwap(x, 13, 17) - compareAndSwap(x, 21, 25) - compareAndSwap(x, 3, 19) - compareAndSwap(x, 11, 27) - compareAndSwap(x, 11, 19) - compareAndSwap(x, 7, 23) - compareAndSwap(x, 15, 31) - compareAndSwap(x, 15, 23) - compareAndSwap(x, 7, 11) - compareAndSwap(x, 15, 19) - compareAndSwap(x, 23, 27) - compareAndSwap(x, 3, 5) - compareAndSwap(x, 7, 9) - compareAndSwap(x, 11, 13) - compareAndSwap(x, 15, 17) - compareAndSwap(x, 19, 21) - compareAndSwap(x, 23, 25) - compareAndSwap(x, 27, 29) - compareAndSwap(x, 1, 2) - compareAndSwap(x, 3, 4) - compareAndSwap(x, 5, 6) - compareAndSwap(x, 7, 8) - compareAndSwap(x, 9, 10) - compareAndSwap(x, 11, 12) - compareAndSwap(x, 13, 14) - compareAndSwap(x, 15, 16) - compareAndSwap(x, 17, 18) - compareAndSwap(x, 19, 20) - compareAndSwap(x, 21, 22) - compareAndSwap(x, 23, 24) - compareAndSwap(x, 25, 26) - compareAndSwap(x, 27, 28) - compareAndSwap(x, 29, 30) - compareAndSwap(x, 32, 33) - compareAndSwap(x, 34, 35) - compareAndSwap(x, 32, 34) - compareAndSwap(x, 33, 35) - compareAndSwap(x, 33, 34) - compareAndSwap(x, 36, 37) - compareAndSwap(x, 38, 39) - compareAndSwap(x, 36, 38) - compareAndSwap(x, 37, 39) - compareAndSwap(x, 37, 38) - compareAndSwap(x, 32, 36) - compareAndSwap(x, 34, 38) - compareAndSwap(x, 34, 36) - compareAndSwap(x, 33, 37) - compareAndSwap(x, 35, 39) - compareAndSwap(x, 35, 37) - compareAndSwap(x, 33, 34) - compareAndSwap(x, 35, 36) - compareAndSwap(x, 37, 38) - compareAndSwap(x, 40, 41) - compareAndSwap(x, 42, 43) - compareAndSwap(x, 40, 42) - compareAndSwap(x, 41, 43) - compareAndSwap(x, 41, 42) - compareAndSwap(x, 44, 45) - compareAndSwap(x, 46, 47) - compareAndSwap(x, 44, 46) - compareAndSwap(x, 45, 47) - compareAndSwap(x, 45, 46) - compareAndSwap(x, 40, 44) - compareAndSwap(x, 42, 46) - compareAndSwap(x, 42, 44) - compareAndSwap(x, 41, 45) - compareAndSwap(x, 43, 47) - compareAndSwap(x, 43, 45) - compareAndSwap(x, 41, 42) - compareAndSwap(x, 43, 44) - compareAndSwap(x, 45, 46) - compareAndSwap(x, 32, 40) - compareAndSwap(x, 36, 44) - compareAndSwap(x, 36, 40) - compareAndSwap(x, 34, 42) - compareAndSwap(x, 38, 46) - compareAndSwap(x, 38, 42) - compareAndSwap(x, 34, 36) - compareAndSwap(x, 38, 40) - compareAndSwap(x, 42, 44) - compareAndSwap(x, 33, 41) - compareAndSwap(x, 37, 45) - compareAndSwap(x, 37, 41) - compareAndSwap(x, 35, 43) - compareAndSwap(x, 39, 47) - compareAndSwap(x, 39, 43) - compareAndSwap(x, 35, 37) - compareAndSwap(x, 39, 41) - compareAndSwap(x, 43, 45) - compareAndSwap(x, 33, 34) - compareAndSwap(x, 35, 36) - compareAndSwap(x, 37, 38) - compareAndSwap(x, 39, 40) - compareAndSwap(x, 41, 42) - compareAndSwap(x, 43, 44) - compareAndSwap(x, 45, 46) - compareAndSwap(x, 48, 49) - compareAndSwap(x, 50, 51) - compareAndSwap(x, 48, 50) - compareAndSwap(x, 49, 51) - compareAndSwap(x, 49, 50) - compareAndSwap(x, 52, 53) - compareAndSwap(x, 54, 55) - compareAndSwap(x, 52, 54) - compareAndSwap(x, 53, 55) - compareAndSwap(x, 53, 54) - compareAndSwap(x, 48, 52) - compareAndSwap(x, 50, 54) - compareAndSwap(x, 50, 52) - compareAndSwap(x, 49, 53) - compareAndSwap(x, 51, 55) - compareAndSwap(x, 51, 53) - compareAndSwap(x, 49, 50) - compareAndSwap(x, 51, 52) - compareAndSwap(x, 53, 54) - compareAndSwap(x, 56, 57) - compareAndSwap(x, 58, 59) - compareAndSwap(x, 56, 58) - compareAndSwap(x, 57, 59) - compareAndSwap(x, 57, 58) - compareAndSwap(x, 60, 61) - compareAndSwap(x, 62, 63) - compareAndSwap(x, 60, 62) - compareAndSwap(x, 61, 63) - compareAndSwap(x, 61, 62) - compareAndSwap(x, 56, 60) - compareAndSwap(x, 58, 62) - compareAndSwap(x, 58, 60) - compareAndSwap(x, 57, 61) - compareAndSwap(x, 59, 63) - compareAndSwap(x, 59, 61) - compareAndSwap(x, 57, 58) - compareAndSwap(x, 59, 60) - compareAndSwap(x, 61, 62) - compareAndSwap(x, 48, 56) - compareAndSwap(x, 52, 60) - compareAndSwap(x, 52, 56) - compareAndSwap(x, 50, 58) - compareAndSwap(x, 54, 62) - compareAndSwap(x, 54, 58) - compareAndSwap(x, 50, 52) - compareAndSwap(x, 54, 56) - compareAndSwap(x, 58, 60) - compareAndSwap(x, 49, 57) - compareAndSwap(x, 53, 61) - compareAndSwap(x, 53, 57) - compareAndSwap(x, 51, 59) - compareAndSwap(x, 55, 63) - compareAndSwap(x, 55, 59) - compareAndSwap(x, 51, 53) - compareAndSwap(x, 55, 57) - compareAndSwap(x, 59, 61) - compareAndSwap(x, 49, 50) - compareAndSwap(x, 51, 52) - compareAndSwap(x, 53, 54) - compareAndSwap(x, 55, 56) - compareAndSwap(x, 57, 58) - compareAndSwap(x, 59, 60) - compareAndSwap(x, 61, 62) - compareAndSwap(x, 32, 48) - compareAndSwap(x, 40, 56) - compareAndSwap(x, 40, 48) - compareAndSwap(x, 36, 52) - compareAndSwap(x, 44, 60) - compareAndSwap(x, 44, 52) - compareAndSwap(x, 36, 40) - compareAndSwap(x, 44, 48) - compareAndSwap(x, 52, 56) - compareAndSwap(x, 34, 50) - compareAndSwap(x, 42, 58) - compareAndSwap(x, 42, 50) - compareAndSwap(x, 38, 54) - compareAndSwap(x, 46, 62) - compareAndSwap(x, 46, 54) - compareAndSwap(x, 38, 42) - compareAndSwap(x, 46, 50) - compareAndSwap(x, 54, 58) - compareAndSwap(x, 34, 36) - compareAndSwap(x, 38, 40) - compareAndSwap(x, 42, 44) - compareAndSwap(x, 46, 48) - compareAndSwap(x, 50, 52) - compareAndSwap(x, 54, 56) - compareAndSwap(x, 58, 60) - compareAndSwap(x, 33, 49) - compareAndSwap(x, 41, 57) - compareAndSwap(x, 41, 49) - compareAndSwap(x, 37, 53) - compareAndSwap(x, 45, 61) - compareAndSwap(x, 45, 53) - compareAndSwap(x, 37, 41) - compareAndSwap(x, 45, 49) - compareAndSwap(x, 53, 57) - compareAndSwap(x, 35, 51) - compareAndSwap(x, 43, 59) - compareAndSwap(x, 43, 51) - compareAndSwap(x, 39, 55) - compareAndSwap(x, 47, 63) - compareAndSwap(x, 47, 55) - compareAndSwap(x, 39, 43) - compareAndSwap(x, 47, 51) - compareAndSwap(x, 55, 59) - compareAndSwap(x, 35, 37) - compareAndSwap(x, 39, 41) - compareAndSwap(x, 43, 45) - compareAndSwap(x, 47, 49) - compareAndSwap(x, 51, 53) - compareAndSwap(x, 55, 57) - compareAndSwap(x, 59, 61) - compareAndSwap(x, 33, 34) - compareAndSwap(x, 35, 36) - compareAndSwap(x, 37, 38) - compareAndSwap(x, 39, 40) - compareAndSwap(x, 41, 42) - compareAndSwap(x, 43, 44) - compareAndSwap(x, 45, 46) - compareAndSwap(x, 47, 48) - compareAndSwap(x, 49, 50) - compareAndSwap(x, 51, 52) - compareAndSwap(x, 53, 54) - compareAndSwap(x, 55, 56) - compareAndSwap(x, 57, 58) - compareAndSwap(x, 59, 60) - compareAndSwap(x, 61, 62) - compareAndSwap(x, 0, 32) - compareAndSwap(x, 16, 48) - compareAndSwap(x, 16, 32) - compareAndSwap(x, 8, 40) - compareAndSwap(x, 24, 56) - compareAndSwap(x, 24, 40) - compareAndSwap(x, 8, 16) - compareAndSwap(x, 24, 32) - compareAndSwap(x, 40, 48) - compareAndSwap(x, 4, 36) - compareAndSwap(x, 20, 52) - compareAndSwap(x, 20, 36) - compareAndSwap(x, 12, 44) - compareAndSwap(x, 28, 60) - compareAndSwap(x, 28, 44) - compareAndSwap(x, 12, 20) - compareAndSwap(x, 28, 36) - compareAndSwap(x, 44, 52) - compareAndSwap(x, 4, 8) - compareAndSwap(x, 12, 16) - compareAndSwap(x, 20, 24) - compareAndSwap(x, 28, 32) - compareAndSwap(x, 36, 40) - compareAndSwap(x, 44, 48) - compareAndSwap(x, 52, 56) - compareAndSwap(x, 2, 34) - compareAndSwap(x, 18, 50) - compareAndSwap(x, 18, 34) - compareAndSwap(x, 10, 42) - compareAndSwap(x, 26, 58) - compareAndSwap(x, 26, 42) - compareAndSwap(x, 10, 18) - compareAndSwap(x, 26, 34) - compareAndSwap(x, 42, 50) - compareAndSwap(x, 6, 38) - compareAndSwap(x, 22, 54) - compareAndSwap(x, 22, 38) - compareAndSwap(x, 14, 46) - compareAndSwap(x, 30, 62) - compareAndSwap(x, 30, 46) - compareAndSwap(x, 14, 22) - compareAndSwap(x, 30, 38) - compareAndSwap(x, 46, 54) - compareAndSwap(x, 6, 10) - compareAndSwap(x, 14, 18) - compareAndSwap(x, 22, 26) - compareAndSwap(x, 30, 34) - compareAndSwap(x, 38, 42) - compareAndSwap(x, 46, 50) - compareAndSwap(x, 54, 58) - compareAndSwap(x, 2, 4) - compareAndSwap(x, 6, 8) - compareAndSwap(x, 10, 12) - compareAndSwap(x, 14, 16) - compareAndSwap(x, 18, 20) - compareAndSwap(x, 22, 24) - compareAndSwap(x, 26, 28) - compareAndSwap(x, 30, 32) - compareAndSwap(x, 34, 36) - compareAndSwap(x, 38, 40) - compareAndSwap(x, 42, 44) - compareAndSwap(x, 46, 48) - compareAndSwap(x, 50, 52) - compareAndSwap(x, 54, 56) - compareAndSwap(x, 58, 60) - compareAndSwap(x, 1, 33) - compareAndSwap(x, 17, 49) - compareAndSwap(x, 17, 33) - compareAndSwap(x, 9, 41) - compareAndSwap(x, 25, 57) - compareAndSwap(x, 25, 41) - compareAndSwap(x, 9, 17) - compareAndSwap(x, 25, 33) - compareAndSwap(x, 41, 49) - compareAndSwap(x, 5, 37) - compareAndSwap(x, 21, 53) - compareAndSwap(x, 21, 37) - compareAndSwap(x, 13, 45) - compareAndSwap(x, 29, 61) - compareAndSwap(x, 29, 45) - compareAndSwap(x, 13, 21) - compareAndSwap(x, 29, 37) - compareAndSwap(x, 45, 53) - compareAndSwap(x, 5, 9) - compareAndSwap(x, 13, 17) - compareAndSwap(x, 21, 25) - compareAndSwap(x, 29, 33) - compareAndSwap(x, 37, 41) - compareAndSwap(x, 45, 49) - compareAndSwap(x, 53, 57) - compareAndSwap(x, 3, 35) - compareAndSwap(x, 19, 51) - compareAndSwap(x, 19, 35) - compareAndSwap(x, 11, 43) - compareAndSwap(x, 27, 59) - compareAndSwap(x, 27, 43) - compareAndSwap(x, 11, 19) - compareAndSwap(x, 27, 35) - compareAndSwap(x, 43, 51) - compareAndSwap(x, 7, 39) - compareAndSwap(x, 23, 55) - compareAndSwap(x, 23, 39) - compareAndSwap(x, 15, 47) - compareAndSwap(x, 31, 63) - compareAndSwap(x, 31, 47) - compareAndSwap(x, 15, 23) - compareAndSwap(x, 31, 39) - compareAndSwap(x, 47, 55) - compareAndSwap(x, 7, 11) - compareAndSwap(x, 15, 19) - compareAndSwap(x, 23, 27) - compareAndSwap(x, 31, 35) - compareAndSwap(x, 39, 43) - compareAndSwap(x, 47, 51) - compareAndSwap(x, 55, 59) - compareAndSwap(x, 3, 5) - compareAndSwap(x, 7, 9) - compareAndSwap(x, 11, 13) - compareAndSwap(x, 15, 17) - compareAndSwap(x, 19, 21) - compareAndSwap(x, 23, 25) - compareAndSwap(x, 27, 29) - compareAndSwap(x, 31, 33) - compareAndSwap(x, 35, 37) - compareAndSwap(x, 39, 41) - compareAndSwap(x, 43, 45) - compareAndSwap(x, 47, 49) - compareAndSwap(x, 51, 53) - compareAndSwap(x, 55, 57) - compareAndSwap(x, 59, 61) - compareAndSwap(x, 1, 2) - compareAndSwap(x, 3, 4) - compareAndSwap(x, 5, 6) - compareAndSwap(x, 7, 8) - compareAndSwap(x, 9, 10) - compareAndSwap(x, 11, 12) - compareAndSwap(x, 13, 14) - compareAndSwap(x, 15, 16) - compareAndSwap(x, 17, 18) - compareAndSwap(x, 19, 20) - compareAndSwap(x, 21, 22) - compareAndSwap(x, 23, 24) - compareAndSwap(x, 25, 26) - compareAndSwap(x, 27, 28) - compareAndSwap(x, 29, 30) - compareAndSwap(x, 31, 32) - compareAndSwap(x, 33, 34) - compareAndSwap(x, 35, 36) - compareAndSwap(x, 37, 38) - compareAndSwap(x, 39, 40) - compareAndSwap(x, 41, 42) - compareAndSwap(x, 43, 44) - compareAndSwap(x, 45, 46) - compareAndSwap(x, 47, 48) - compareAndSwap(x, 49, 50) - compareAndSwap(x, 51, 52) - compareAndSwap(x, 53, 54) - compareAndSwap(x, 55, 56) - compareAndSwap(x, 57, 58) - compareAndSwap(x, 59, 60) - compareAndSwap(x, 61, 62) - compareAndSwap(x, 64, 65) - compareAndSwap(x, 66, 67) - compareAndSwap(x, 64, 66) - compareAndSwap(x, 65, 67) - compareAndSwap(x, 65, 66) - compareAndSwap(x, 68, 69) - compareAndSwap(x, 70, 71) - compareAndSwap(x, 68, 70) - compareAndSwap(x, 69, 71) - compareAndSwap(x, 69, 70) - compareAndSwap(x, 64, 68) - compareAndSwap(x, 66, 70) - compareAndSwap(x, 66, 68) - compareAndSwap(x, 65, 69) - compareAndSwap(x, 67, 71) - compareAndSwap(x, 67, 69) - compareAndSwap(x, 65, 66) - compareAndSwap(x, 67, 68) - compareAndSwap(x, 69, 70) - compareAndSwap(x, 72, 73) - compareAndSwap(x, 74, 75) - compareAndSwap(x, 72, 74) - compareAndSwap(x, 73, 75) - compareAndSwap(x, 73, 74) - compareAndSwap(x, 76, 77) - compareAndSwap(x, 78, 79) - compareAndSwap(x, 76, 78) - compareAndSwap(x, 77, 79) - compareAndSwap(x, 77, 78) - compareAndSwap(x, 72, 76) - compareAndSwap(x, 74, 78) - compareAndSwap(x, 74, 76) - compareAndSwap(x, 73, 77) - compareAndSwap(x, 75, 79) - compareAndSwap(x, 75, 77) - compareAndSwap(x, 73, 74) - compareAndSwap(x, 75, 76) - compareAndSwap(x, 77, 78) - compareAndSwap(x, 64, 72) - compareAndSwap(x, 68, 76) - compareAndSwap(x, 68, 72) - compareAndSwap(x, 66, 74) - compareAndSwap(x, 70, 78) - compareAndSwap(x, 70, 74) - compareAndSwap(x, 66, 68) - compareAndSwap(x, 70, 72) - compareAndSwap(x, 74, 76) - compareAndSwap(x, 65, 73) - compareAndSwap(x, 69, 77) - compareAndSwap(x, 69, 73) - compareAndSwap(x, 67, 75) - compareAndSwap(x, 71, 79) - compareAndSwap(x, 71, 75) - compareAndSwap(x, 67, 69) - compareAndSwap(x, 71, 73) - compareAndSwap(x, 75, 77) - compareAndSwap(x, 65, 66) - compareAndSwap(x, 67, 68) - compareAndSwap(x, 69, 70) - compareAndSwap(x, 71, 72) - compareAndSwap(x, 73, 74) - compareAndSwap(x, 75, 76) - compareAndSwap(x, 77, 78) - compareAndSwap(x, 80, 81) - compareAndSwap(x, 82, 83) - compareAndSwap(x, 80, 82) - compareAndSwap(x, 81, 83) - compareAndSwap(x, 81, 82) - compareAndSwap(x, 81, 82) - compareAndSwap(x, 81, 82) - compareAndSwap(x, 64, 80) - compareAndSwap(x, 72, 80) - compareAndSwap(x, 68, 72) - compareAndSwap(x, 76, 80) - compareAndSwap(x, 66, 82) - compareAndSwap(x, 74, 82) - compareAndSwap(x, 70, 74) - compareAndSwap(x, 78, 82) - compareAndSwap(x, 66, 68) - compareAndSwap(x, 70, 72) - compareAndSwap(x, 74, 76) - compareAndSwap(x, 78, 80) - compareAndSwap(x, 65, 81) - compareAndSwap(x, 73, 81) - compareAndSwap(x, 69, 73) - compareAndSwap(x, 77, 81) - compareAndSwap(x, 67, 83) - compareAndSwap(x, 75, 83) - compareAndSwap(x, 71, 75) - compareAndSwap(x, 79, 83) - compareAndSwap(x, 67, 69) - compareAndSwap(x, 71, 73) - compareAndSwap(x, 75, 77) - compareAndSwap(x, 79, 81) - compareAndSwap(x, 65, 66) - compareAndSwap(x, 67, 68) - compareAndSwap(x, 69, 70) - compareAndSwap(x, 71, 72) - compareAndSwap(x, 73, 74) - compareAndSwap(x, 75, 76) - compareAndSwap(x, 77, 78) - compareAndSwap(x, 79, 80) - compareAndSwap(x, 81, 82) - compareAndSwap(x, 72, 80) - compareAndSwap(x, 68, 72) - compareAndSwap(x, 76, 80) - compareAndSwap(x, 74, 82) - compareAndSwap(x, 70, 74) - compareAndSwap(x, 78, 82) - compareAndSwap(x, 66, 68) - compareAndSwap(x, 70, 72) - compareAndSwap(x, 74, 76) - compareAndSwap(x, 78, 80) - compareAndSwap(x, 73, 81) - compareAndSwap(x, 69, 73) - compareAndSwap(x, 77, 81) - compareAndSwap(x, 75, 83) - compareAndSwap(x, 71, 75) - compareAndSwap(x, 79, 83) - compareAndSwap(x, 67, 69) - compareAndSwap(x, 71, 73) - compareAndSwap(x, 75, 77) - compareAndSwap(x, 79, 81) - compareAndSwap(x, 65, 66) - compareAndSwap(x, 67, 68) - compareAndSwap(x, 69, 70) - compareAndSwap(x, 71, 72) - compareAndSwap(x, 73, 74) - compareAndSwap(x, 75, 76) - compareAndSwap(x, 77, 78) - compareAndSwap(x, 79, 80) - compareAndSwap(x, 81, 82) - compareAndSwap(x, 0, 64) - compareAndSwap(x, 32, 64) - compareAndSwap(x, 16, 80) - compareAndSwap(x, 48, 80) - compareAndSwap(x, 16, 32) - compareAndSwap(x, 48, 64) - compareAndSwap(x, 8, 72) - compareAndSwap(x, 40, 72) - compareAndSwap(x, 24, 40) - compareAndSwap(x, 56, 72) - compareAndSwap(x, 8, 16) - compareAndSwap(x, 24, 32) - compareAndSwap(x, 40, 48) - compareAndSwap(x, 56, 64) - compareAndSwap(x, 72, 80) - compareAndSwap(x, 4, 68) - compareAndSwap(x, 36, 68) - compareAndSwap(x, 20, 36) - compareAndSwap(x, 52, 68) - compareAndSwap(x, 12, 76) - compareAndSwap(x, 44, 76) - compareAndSwap(x, 28, 44) - compareAndSwap(x, 60, 76) - compareAndSwap(x, 12, 20) - compareAndSwap(x, 28, 36) - compareAndSwap(x, 44, 52) - compareAndSwap(x, 60, 68) - compareAndSwap(x, 4, 8) - compareAndSwap(x, 12, 16) - compareAndSwap(x, 20, 24) - compareAndSwap(x, 28, 32) - compareAndSwap(x, 36, 40) - compareAndSwap(x, 44, 48) - compareAndSwap(x, 52, 56) - compareAndSwap(x, 60, 64) - compareAndSwap(x, 68, 72) - compareAndSwap(x, 76, 80) - compareAndSwap(x, 2, 66) - compareAndSwap(x, 34, 66) - compareAndSwap(x, 18, 82) - compareAndSwap(x, 50, 82) - compareAndSwap(x, 18, 34) - compareAndSwap(x, 50, 66) - compareAndSwap(x, 10, 74) - compareAndSwap(x, 42, 74) - compareAndSwap(x, 26, 42) - compareAndSwap(x, 58, 74) - compareAndSwap(x, 10, 18) - compareAndSwap(x, 26, 34) - compareAndSwap(x, 42, 50) - compareAndSwap(x, 58, 66) - compareAndSwap(x, 74, 82) - compareAndSwap(x, 6, 70) - compareAndSwap(x, 38, 70) - compareAndSwap(x, 22, 38) - compareAndSwap(x, 54, 70) - compareAndSwap(x, 14, 78) - compareAndSwap(x, 46, 78) - compareAndSwap(x, 30, 46) - compareAndSwap(x, 62, 78) - compareAndSwap(x, 14, 22) - compareAndSwap(x, 30, 38) - compareAndSwap(x, 46, 54) - compareAndSwap(x, 62, 70) - compareAndSwap(x, 6, 10) - compareAndSwap(x, 14, 18) - compareAndSwap(x, 22, 26) - compareAndSwap(x, 30, 34) - compareAndSwap(x, 38, 42) - compareAndSwap(x, 46, 50) - compareAndSwap(x, 54, 58) - compareAndSwap(x, 62, 66) - compareAndSwap(x, 70, 74) - compareAndSwap(x, 78, 82) - compareAndSwap(x, 2, 4) - compareAndSwap(x, 6, 8) - compareAndSwap(x, 10, 12) - compareAndSwap(x, 14, 16) - compareAndSwap(x, 18, 20) - compareAndSwap(x, 22, 24) - compareAndSwap(x, 26, 28) - compareAndSwap(x, 30, 32) - compareAndSwap(x, 34, 36) - compareAndSwap(x, 38, 40) - compareAndSwap(x, 42, 44) - compareAndSwap(x, 46, 48) - compareAndSwap(x, 50, 52) - compareAndSwap(x, 54, 56) - compareAndSwap(x, 58, 60) - compareAndSwap(x, 62, 64) - compareAndSwap(x, 66, 68) - compareAndSwap(x, 70, 72) - compareAndSwap(x, 74, 76) - compareAndSwap(x, 78, 80) - compareAndSwap(x, 1, 65) - compareAndSwap(x, 33, 65) - compareAndSwap(x, 17, 81) - compareAndSwap(x, 49, 81) - compareAndSwap(x, 17, 33) - compareAndSwap(x, 49, 65) - compareAndSwap(x, 9, 73) - compareAndSwap(x, 41, 73) - compareAndSwap(x, 25, 41) - compareAndSwap(x, 57, 73) - compareAndSwap(x, 9, 17) - compareAndSwap(x, 25, 33) - compareAndSwap(x, 41, 49) - compareAndSwap(x, 57, 65) - compareAndSwap(x, 73, 81) - compareAndSwap(x, 5, 69) - compareAndSwap(x, 37, 69) - compareAndSwap(x, 21, 37) - compareAndSwap(x, 53, 69) - compareAndSwap(x, 13, 77) - compareAndSwap(x, 45, 77) - compareAndSwap(x, 29, 45) - compareAndSwap(x, 61, 77) - compareAndSwap(x, 13, 21) - compareAndSwap(x, 29, 37) - compareAndSwap(x, 45, 53) - compareAndSwap(x, 61, 69) - compareAndSwap(x, 5, 9) - compareAndSwap(x, 13, 17) - compareAndSwap(x, 21, 25) - compareAndSwap(x, 29, 33) - compareAndSwap(x, 37, 41) - compareAndSwap(x, 45, 49) - compareAndSwap(x, 53, 57) - compareAndSwap(x, 61, 65) - compareAndSwap(x, 69, 73) - compareAndSwap(x, 77, 81) - compareAndSwap(x, 3, 67) - compareAndSwap(x, 35, 67) - compareAndSwap(x, 19, 83) - compareAndSwap(x, 51, 83) - compareAndSwap(x, 19, 35) - compareAndSwap(x, 51, 67) - compareAndSwap(x, 11, 75) - compareAndSwap(x, 43, 75) - compareAndSwap(x, 27, 43) - compareAndSwap(x, 59, 75) - compareAndSwap(x, 11, 19) - compareAndSwap(x, 27, 35) - compareAndSwap(x, 43, 51) - compareAndSwap(x, 59, 67) - compareAndSwap(x, 75, 83) - compareAndSwap(x, 7, 71) - compareAndSwap(x, 39, 71) - compareAndSwap(x, 23, 39) - compareAndSwap(x, 55, 71) - compareAndSwap(x, 15, 79) - compareAndSwap(x, 47, 79) - compareAndSwap(x, 31, 47) - compareAndSwap(x, 63, 79) - compareAndSwap(x, 15, 23) - compareAndSwap(x, 31, 39) - compareAndSwap(x, 47, 55) - compareAndSwap(x, 63, 71) - compareAndSwap(x, 7, 11) - compareAndSwap(x, 15, 19) - compareAndSwap(x, 23, 27) - compareAndSwap(x, 31, 35) - compareAndSwap(x, 39, 43) - compareAndSwap(x, 47, 51) - compareAndSwap(x, 55, 59) - compareAndSwap(x, 63, 67) - compareAndSwap(x, 71, 75) - compareAndSwap(x, 79, 83) - compareAndSwap(x, 3, 5) - compareAndSwap(x, 7, 9) - compareAndSwap(x, 11, 13) - compareAndSwap(x, 15, 17) - compareAndSwap(x, 19, 21) - compareAndSwap(x, 23, 25) - compareAndSwap(x, 27, 29) - compareAndSwap(x, 31, 33) - compareAndSwap(x, 35, 37) - compareAndSwap(x, 39, 41) - compareAndSwap(x, 43, 45) - compareAndSwap(x, 47, 49) - compareAndSwap(x, 51, 53) - compareAndSwap(x, 55, 57) - compareAndSwap(x, 59, 61) - compareAndSwap(x, 63, 65) - compareAndSwap(x, 67, 69) - compareAndSwap(x, 71, 73) - compareAndSwap(x, 75, 77) - compareAndSwap(x, 79, 81) - compareAndSwap(x, 1, 2) - compareAndSwap(x, 3, 4) - compareAndSwap(x, 5, 6) - compareAndSwap(x, 7, 8) - compareAndSwap(x, 9, 10) - compareAndSwap(x, 11, 12) - compareAndSwap(x, 13, 14) - compareAndSwap(x, 15, 16) - compareAndSwap(x, 17, 18) - compareAndSwap(x, 19, 20) - compareAndSwap(x, 21, 22) - compareAndSwap(x, 23, 24) - compareAndSwap(x, 25, 26) - compareAndSwap(x, 27, 28) - compareAndSwap(x, 29, 30) - compareAndSwap(x, 31, 32) - compareAndSwap(x, 33, 34) - compareAndSwap(x, 35, 36) - compareAndSwap(x, 37, 38) - compareAndSwap(x, 39, 40) - compareAndSwap(x, 41, 42) - compareAndSwap(x, 43, 44) - compareAndSwap(x, 45, 46) - compareAndSwap(x, 47, 48) - compareAndSwap(x, 49, 50) - compareAndSwap(x, 51, 52) - compareAndSwap(x, 53, 54) - compareAndSwap(x, 55, 56) - compareAndSwap(x, 57, 58) - compareAndSwap(x, 59, 60) - compareAndSwap(x, 61, 62) - compareAndSwap(x, 63, 64) - compareAndSwap(x, 65, 66) - compareAndSwap(x, 67, 68) - compareAndSwap(x, 69, 70) - compareAndSwap(x, 71, 72) - compareAndSwap(x, 73, 74) - compareAndSwap(x, 75, 76) - compareAndSwap(x, 77, 78) - compareAndSwap(x, 79, 80) - compareAndSwap(x, 81, 82) -} diff --git a/vendor/blitter.com/go/newhope/error_correction.go b/vendor/blitter.com/go/newhope/error_correction.go deleted file mode 100644 index 7855648..0000000 --- a/vendor/blitter.com/go/newhope/error_correction.go +++ /dev/null @@ -1,135 +0,0 @@ -// error_correction.go - NewHope key exchange error correction. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to newhope, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -package newhope - -import "blitter.com/go/chacha20" - -func abs(v int32) int32 { - mask := v >> 31 - return (v ^ mask) - mask -} - -func f(v0, v1 *int32, x int32) int32 { - // The`ref` code uses uint32 for x, but none of the values ever get large - // enough for that, and that would be cast-tastic due to Go being Go. - - // Next 6 lines compute t = x/PARAM_Q - b := x * 2730 - t := b >> 25 - b = x - t*paramQ - b = (paramQ - 1) - b - b >>= 31 - t -= b - - r := t & 1 - xit := t >> 1 - *v0 = xit + r // v0 = round(x/(2*PARAM_Q)) - - t-- - r = t & 1 - *v1 = (t >> 1) + r - - return abs(x - ((*v0) * 2 * paramQ)) -} - -func g(x int32) int32 { - // Next 6 lines compute t = x/(4 *PARAMQ) - b := x * 2730 - t := b >> 27 - b = x - t*(paramQ*4) - b = (paramQ * 4) - b - b >>= 31 - t -= b - - c := t & 1 - t = (t >> 1) + c // t = round(x/(8*PARAM_Q)) - - t *= 8 * paramQ - - return abs(t - x) -} - -func llDecode(xi0, xi1, xi2, xi3 int32) int16 { - t := g(xi0) - t += g(xi1) - t += g(xi2) - t += g(xi3) - - t -= 8 * paramQ - t >>= 31 - return int16(t & 1) -} - -func (c *poly) helpRec(v *poly, seed *[SeedBytes]byte, nonce byte) { - var v0, v1, vTmp [4]int32 - var k int32 - var rand [32]byte - var n [8]byte - - n[7] = nonce - - stream, err := chacha20.New(seed[:], n[:]) - if err != nil { - panic(err) - } - stream.KeyStream(rand[:]) - stream.Reset() - defer memwipe(rand[:]) - - for i := uint(0); i < 256; i++ { - rBit := int32((rand[i>>3] >> (i & 7)) & 1) - - vTmp[0], vTmp[1], vTmp[2], vTmp[3] = int32(v.coeffs[i]), int32(v.coeffs[256+i]), int32(v.coeffs[512+i]), int32(v.coeffs[768+i]) - - // newhope-20151209 - New version of the reconciliation. - k = f(&v0[0], &v1[0], 8*vTmp[0]+4*rBit) - k += f(&v0[1], &v1[1], 8*vTmp[1]+4*rBit) - k += f(&v0[2], &v1[2], 8*vTmp[2]+4*rBit) - k += f(&v0[3], &v1[3], 8*vTmp[3]+4*rBit) - - k = (2*paramQ - 1 - k) >> 31 - - vTmp[0] = ((^k) & v0[0]) ^ (k & v1[0]) - vTmp[1] = ((^k) & v0[1]) ^ (k & v1[1]) - vTmp[2] = ((^k) & v0[2]) ^ (k & v1[2]) - vTmp[3] = ((^k) & v0[3]) ^ (k & v1[3]) - - c.coeffs[0+i] = uint16((vTmp[0] - vTmp[3]) & 3) - c.coeffs[256+i] = uint16((vTmp[1] - vTmp[3]) & 3) - c.coeffs[512+i] = uint16((vTmp[2] - vTmp[3]) & 3) - c.coeffs[768+i] = uint16((-k + 2*vTmp[3]) & 3) - } - - for i := range vTmp { - vTmp[i] = 0 - } -} - -func rec(key *[32]byte, v, c *poly) { - var tmp, vTmp, cTmp [4]int32 - for i := range key { - key[i] = 0 - } - - for i := uint(0); i < 256; i++ { - vTmp[0], vTmp[1], vTmp[2], vTmp[3] = int32(v.coeffs[i]), int32(v.coeffs[256+i]), int32(v.coeffs[512+i]), int32(v.coeffs[768+i]) - cTmp[0], cTmp[1], cTmp[2], cTmp[3] = int32(c.coeffs[i]), int32(c.coeffs[256+i]), int32(c.coeffs[512+i]), int32(c.coeffs[768+i]) - tmp[0] = 16*paramQ + 8*vTmp[0] - paramQ*(2*cTmp[0]+cTmp[3]) - tmp[1] = 16*paramQ + 8*vTmp[1] - paramQ*(2*cTmp[1]+cTmp[3]) - tmp[2] = 16*paramQ + 8*vTmp[2] - paramQ*(2*cTmp[2]+cTmp[3]) - tmp[3] = 16*paramQ + 8*vTmp[3] - paramQ*(cTmp[3]) - - key[i>>3] |= byte(llDecode(tmp[0], tmp[1], tmp[2], tmp[3]) << (i & 7)) - } - - for i := 0; i < 4; i++ { - tmp[i] = 0 - vTmp[i] = 0 - cTmp[i] = 0 - } -} diff --git a/vendor/blitter.com/go/newhope/newhope.go b/vendor/blitter.com/go/newhope/newhope.go deleted file mode 100644 index 380d943..0000000 --- a/vendor/blitter.com/go/newhope/newhope.go +++ /dev/null @@ -1,220 +0,0 @@ -// newhope.go - NewHope interface. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to newhope, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -// Package newhope implements a key exchange based on the Ring Learning with -// Errors Problem. It is a mechanical port of the Public Domain implementation -// by Erdem Alkim, Léo Ducas, Thomas Pöppelmann, and Peter Schwabe. -// -// For more information see: -// https://cryptojedi.org/papers/newhope-20161119.pdf -// https://cryptojedi.org/papers/newhopesimple-20161217.pdf -// -package newhope - -import ( - "io" - - "golang.org/x/crypto/sha3" -) - -const ( - // SharedSecretSize is the length of a Shared Secret in bytes. - SharedSecretSize = 32 - - // UpstreamVersion is the version of the upstream package this - // implementation is compatible with. - UpstreamVersion = "20160815" - - // RecBytes is the length of the reconciliation data in bytes. - RecBytes = 256 - - // SendASize is the length of Alice's public key in bytes. - SendASize = PolyBytes + SeedBytes - - // SendBSize is the length of Bob's public key in bytes. - SendBSize = PolyBytes + RecBytes -) - -// TorSampling enables the constant time generation of the `a` parameter, -// where every successful `a` generation will take the same amount of time. -// Most users will probably not want to enable this as it does come with a -// performance penalty. Alice and Bob *MUST* agree on the sampling method, -// or the key exchange will fail. -var TorSampling = false - -func encodeA(r []byte, pk *poly, seed *[SeedBytes]byte) { - pk.toBytes(r) - for i := 0; i < SeedBytes; i++ { - r[PolyBytes+i] = seed[i] - } -} - -func decodeA(pk *poly, seed *[SeedBytes]byte, r []byte) { - pk.fromBytes(r) - for i := range seed { - seed[i] = r[PolyBytes+i] - } -} - -func encodeB(r []byte, b *poly, c *poly) { - b.toBytes(r) - for i := 0; i < paramN/4; i++ { - r[PolyBytes+i] = byte(c.coeffs[4*i]) | byte(c.coeffs[4*i+1]<<2) | byte(c.coeffs[4*i+2]<<4) | byte(c.coeffs[4*i+3]<<6) - } -} - -func decodeB(b *poly, c *poly, r []byte) { - b.fromBytes(r) - for i := 0; i < paramN/4; i++ { - c.coeffs[4*i+0] = uint16(r[PolyBytes+i]) & 0x03 - c.coeffs[4*i+1] = uint16(r[PolyBytes+i]>>2) & 0x03 - c.coeffs[4*i+2] = uint16(r[PolyBytes+i]>>4) & 0x03 - c.coeffs[4*i+3] = uint16(r[PolyBytes+i] >> 6) - } -} - -func memwipe(b []byte) { - for i := range b { - b[i] = 0 - } -} - -// PublicKeyAlice is Alice's NewHope public key. -type PublicKeyAlice struct { - Send [SendASize]byte -} - -// PrivateKeyAlice is Alice's NewHope private key. -type PrivateKeyAlice struct { - sk poly -} - -// Reset clears all sensitive information such that it no longer appears in -// memory. -func (k *PrivateKeyAlice) Reset() { - k.sk.reset() -} - -// GenerateKeyPairAlice returns a private/public key pair. The private key is -// generated using the given reader, which must return random data. The -// receiver side of the key exchange (aka "Bob") MUST use KeyExchangeBob() -// instead of this routine. -func GenerateKeyPairAlice(rand io.Reader) (*PrivateKeyAlice, *PublicKeyAlice, error) { - var a, e, pk, r poly - var seed, noiseSeed [SeedBytes]byte - - // seed <- Sample({0, 1}^256) - if _, err := io.ReadFull(rand, seed[:]); err != nil { - return nil, nil, err - } - seed = sha3.Sum256(seed[:]) // Don't send output of system RNG. - // a <- Parse(SHAKE-128(seed)) - a.uniform(&seed, TorSampling) - - // s, e <- Sample(psi(n, 12)) - if _, err := io.ReadFull(rand, noiseSeed[:]); err != nil { - return nil, nil, err - } - defer memwipe(noiseSeed[:]) - privKey := new(PrivateKeyAlice) - privKey.sk.getNoise(&noiseSeed, 0) - privKey.sk.ntt() - e.getNoise(&noiseSeed, 1) - e.ntt() - - // b <- as + e - pubKey := new(PublicKeyAlice) - r.pointwise(&privKey.sk, &a) - pk.add(&e, &r) - encodeA(pubKey.Send[:], &pk, &seed) - - return privKey, pubKey, nil -} - -// PublicKeyBob is Bob's NewHope public key. -type PublicKeyBob struct { - Send [SendBSize]byte -} - -// KeyExchangeBob is the Responder side of the NewHope key exchange. The -// shared secret and "public key" (key + reconciliation data) are generated -// using the given reader, which must return random data. -func KeyExchangeBob(rand io.Reader, alicePk *PublicKeyAlice) (*PublicKeyBob, []byte, error) { - var pka, a, sp, ep, u, v, epp, r poly - var seed, noiseSeed [SeedBytes]byte - - if _, err := io.ReadFull(rand, noiseSeed[:]); err != nil { - return nil, nil, err - } - defer memwipe(noiseSeed[:]) - - // a <- Parse(SHAKE-128(seed)) - decodeA(&pka, &seed, alicePk.Send[:]) - a.uniform(&seed, TorSampling) - - // s', e', e'' <- Sample(psi(n, 12)) - sp.getNoise(&noiseSeed, 0) - sp.ntt() - ep.getNoise(&noiseSeed, 1) - ep.ntt() - epp.getNoise(&noiseSeed, 2) - - // u <- as' + e' - u.pointwise(&a, &sp) - u.add(&u, &ep) - - // v <- bs' + e'' - v.pointwise(&pka, &sp) - v.invNtt() - v.add(&v, &epp) - - // r <- Sample(HelpRec(v)) - r.helpRec(&v, &noiseSeed, 3) - - pubKey := new(PublicKeyBob) - encodeB(pubKey.Send[:], &u, &r) - - // nu <- Rec(v, r) - var nu [SharedSecretSize]byte - rec(&nu, &v, &r) - - // mu <- SHA3-256(nu) - mu := sha3.Sum256(nu[:]) - - // Scrub the sensitive stuff... - memwipe(nu[:]) - sp.reset() - v.reset() - - return pubKey, mu[:], nil -} - -// KeyExchangeAlice is the Initiaitor side of the NewHope key exchange. The -// provided private key is obliterated prior to returning. -func KeyExchangeAlice(bobPk *PublicKeyBob, aliceSk *PrivateKeyAlice) ([]byte, error) { - var u, r, vp poly - - decodeB(&u, &r, bobPk.Send[:]) - - // v' <- us - vp.pointwise(&aliceSk.sk, &u) - vp.invNtt() - - // nu <- Rec(v', r) - var nu [SharedSecretSize]byte - rec(&nu, &vp, &r) - - // mu <- Sha3-256(nu) - mu := sha3.Sum256(nu[:]) - - // Scrub the sensitive stuff... - memwipe(nu[:]) - vp.reset() - aliceSk.Reset() - - return mu[:], nil -} diff --git a/vendor/blitter.com/go/newhope/newhope_simple.go b/vendor/blitter.com/go/newhope/newhope_simple.go deleted file mode 100644 index 4c4774b..0000000 --- a/vendor/blitter.com/go/newhope/newhope_simple.go +++ /dev/null @@ -1,166 +0,0 @@ -// newhope_simple.go - NewHope-Simple interface. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to newhope, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -package newhope - -import ( - "io" - - "golang.org/x/crypto/sha3" -) - -const ( - // HighBytes is the length of the encoded secret in bytes. - HighBytes = 384 - - // SendASimpleSize is the length of Alice's NewHope-Simple public key in - // bytes. - SendASimpleSize = PolyBytes + SeedBytes - - // SendBSimpleSize is the length of Bob's NewHope-Simple public key in - // bytes. - SendBSimpleSize = PolyBytes + HighBytes -) - -func encodeBSimple(r []byte, b *poly, v *poly) { - b.toBytes(r) - v.compress(r[PolyBytes:]) -} - -func decodeBSimple(b *poly, v *poly, r []byte) { - b.fromBytes(r) - v.decompress(r[PolyBytes:]) -} - -// PublicKeySimpleAlice is Alice's NewHope-Simple public key. -type PublicKeySimpleAlice struct { - Send [SendASimpleSize]byte -} - -// PrivateKeySimpleAlice is Alice's NewHope-Simple private key. -type PrivateKeySimpleAlice struct { - sk poly -} - -// Reset clears all sensitive information such that it no longer appears in -// memory. -func (k *PrivateKeySimpleAlice) Reset() { - k.sk.reset() -} - -// GenerateKeyPairSimpleAlice returns a NewHope-Simple private/public key pair. -// The private key is generated using the given reader, which must return -// random data. The receiver side of the key exchange (aka "Bob") MUST use -// KeyExchangeSimpleBob() instead of this routine. -func GenerateKeyPairSimpleAlice(rand io.Reader) (*PrivateKeySimpleAlice, *PublicKeySimpleAlice, error) { - var a, e, pk, r poly - var seed, noiseSeed [SeedBytes]byte - - if _, err := io.ReadFull(rand, seed[:]); err != nil { - return nil, nil, err - } - seed = sha3.Sum256(seed[:]) // Don't send output of system RNG. - a.uniform(&seed, TorSampling) - - if _, err := io.ReadFull(rand, noiseSeed[:]); err != nil { - return nil, nil, err - } - defer memwipe(noiseSeed[:]) - - privKey := new(PrivateKeySimpleAlice) - privKey.sk.getNoise(&noiseSeed, 0) - privKey.sk.ntt() - e.getNoise(&noiseSeed, 1) - e.ntt() - - pubKey := new(PublicKeySimpleAlice) - r.pointwise(&privKey.sk, &a) - pk.add(&e, &r) - encodeA(pubKey.Send[:], &pk, &seed) - - return privKey, pubKey, nil -} - -// PublicKeySimpleBob is Bob's NewHope-Simple public key. -type PublicKeySimpleBob struct { - Send [SendBSimpleSize]byte -} - -// KeyExchangeSimpleBob is the Responder side of the NewHope-Simple key -// exchange. The shared secret and "public key" are generated using the -// given reader, which must return random data. -func KeyExchangeSimpleBob(rand io.Reader, alicePk *PublicKeySimpleAlice) (*PublicKeySimpleBob, []byte, error) { - var pka, a, sp, ep, bp, v, epp, m poly - var seed, noiseSeed [SeedBytes]byte - - if _, err := io.ReadFull(rand, noiseSeed[:]); err != nil { - return nil, nil, err - } - defer memwipe(noiseSeed[:]) - - var sharedKey [SharedSecretSize]byte - if _, err := io.ReadFull(rand, sharedKey[:]); err != nil { - return nil, nil, err - } - defer memwipe(sharedKey[:]) - sharedKey = sha3.Sum256(sharedKey[:]) - m.fromMsg(sharedKey[:]) - - decodeA(&pka, &seed, alicePk.Send[:]) - a.uniform(&seed, TorSampling) - - sp.getNoise(&noiseSeed, 0) - sp.ntt() - ep.getNoise(&noiseSeed, 1) - ep.ntt() - - bp.pointwise(&a, &sp) - bp.add(&bp, &ep) - - v.pointwise(&pka, &sp) - v.invNtt() - - epp.getNoise(&noiseSeed, 2) - v.add(&v, &epp) - v.add(&v, &m) // add key - - pubKey := new(PublicKeySimpleBob) - encodeBSimple(pubKey.Send[:], &bp, &v) - mu := sha3.Sum256(sharedKey[:]) - - // Scrub the sensitive stuff... - sp.reset() - v.reset() - m.reset() - - return pubKey, mu[:], nil -} - -// KeyExchangeSimpleAlice is the Initiaitor side of the NewHope-Simple key -// exchange. The provided private key is obliterated prior to returning. -func KeyExchangeSimpleAlice(bobPk *PublicKeySimpleBob, aliceSk *PrivateKeySimpleAlice) ([]byte, error) { - var v, bp, k poly - - decodeBSimple(&bp, &v, bobPk.Send[:]) - k.pointwise(&aliceSk.sk, &bp) - k.invNtt() - - k.sub(&k, &v) - - var sharedKey [SharedSecretSize]byte - k.toMsg(sharedKey[:]) - - // mu <- Sha3-256(v') - mu := sha3.Sum256(sharedKey[:]) - - // Scrub the sensitive stuff... - memwipe(sharedKey[:]) - k.reset() - aliceSk.Reset() - - return mu[:], nil -} diff --git a/vendor/blitter.com/go/newhope/ntt.go b/vendor/blitter.com/go/newhope/ntt.go deleted file mode 100644 index 58d1f2a..0000000 --- a/vendor/blitter.com/go/newhope/ntt.go +++ /dev/null @@ -1,131 +0,0 @@ -// ntt.go - NewHope Number Theoretic Transform. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to newhope, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -package newhope - -var bitrevTable = [paramN]uint16{ - 0, 512, 256, 768, 128, 640, 384, 896, 64, 576, 320, 832, 192, 704, 448, 960, - 32, 544, 288, 800, 160, 672, 416, 928, 96, 608, 352, 864, 224, 736, 480, - 992, 16, 528, 272, 784, 144, 656, 400, 912, 80, 592, 336, 848, 208, 720, - 464, 976, 48, 560, 304, 816, 176, 688, 432, 944, 112, 624, 368, 880, - 240, 752, 496, 1008, 8, 520, 264, 776, 136, 648, 392, 904, 72, 584, 328, - 840, 200, 712, 456, 968, 40, 552, 296, 808, 168, 680, 424, 936, 104, - 616, 360, 872, 232, 744, 488, 1000, 24, 536, 280, 792, 152, 664, 408, - 920, 88, 600, 344, 856, 216, 728, 472, 984, 56, 568, 312, 824, 184, 696, - 440, 952, 120, 632, 376, 888, 248, 760, 504, 1016, 4, 516, 260, 772, - 132, 644, 388, 900, 68, 580, 324, 836, 196, 708, 452, 964, 36, 548, 292, - 804, 164, 676, 420, 932, 100, 612, 356, 868, 228, 740, 484, 996, 20, - 532, 276, 788, 148, 660, 404, 916, 84, 596, 340, 852, 212, 724, 468, - 980, 52, 564, 308, 820, 180, 692, 436, 948, 116, 628, 372, 884, 244, - 756, 500, 1012, 12, 524, 268, 780, 140, 652, 396, 908, 76, 588, 332, - 844, 204, 716, 460, 972, 44, 556, 300, 812, 172, 684, 428, 940, 108, - 620, 364, 876, 236, 748, 492, 1004, 28, 540, 284, 796, 156, 668, 412, - 924, 92, 604, 348, 860, 220, 732, 476, 988, 60, 572, 316, 828, 188, 700, - 444, 956, 124, 636, 380, 892, 252, 764, 508, 1020, 2, 514, 258, 770, - 130, 642, 386, 898, 66, 578, 322, 834, 194, 706, 450, 962, 34, 546, 290, - 802, 162, 674, 418, 930, 98, 610, 354, 866, 226, 738, 482, 994, 18, 530, - 274, 786, 146, 658, 402, 914, 82, 594, 338, 850, 210, 722, 466, 978, 50, - 562, 306, 818, 178, 690, 434, 946, 114, 626, 370, 882, 242, 754, 498, - 1010, 10, 522, 266, 778, 138, 650, 394, 906, 74, 586, 330, 842, 202, - 714, 458, 970, 42, 554, 298, 810, 170, 682, 426, 938, 106, 618, 362, - 874, 234, 746, 490, 1002, 26, 538, 282, 794, 154, 666, 410, 922, 90, - 602, 346, 858, 218, 730, 474, 986, 58, 570, 314, 826, 186, 698, 442, - 954, 122, 634, 378, 890, 250, 762, 506, 1018, 6, 518, 262, 774, 134, - 646, 390, 902, 70, 582, 326, 838, 198, 710, 454, 966, 38, 550, 294, 806, - 166, 678, 422, 934, 102, 614, 358, 870, 230, 742, 486, 998, 22, 534, - 278, 790, 150, 662, 406, 918, 86, 598, 342, 854, 214, 726, 470, 982, 54, - 566, 310, 822, 182, 694, 438, 950, 118, 630, 374, 886, 246, 758, 502, - 1014, 14, 526, 270, 782, 142, 654, 398, 910, 78, 590, 334, 846, 206, - 718, 462, 974, 46, 558, 302, 814, 174, 686, 430, 942, 110, 622, 366, - 878, 238, 750, 494, 1006, 30, 542, 286, 798, 158, 670, 414, 926, 94, - 606, 350, 862, 222, 734, 478, 990, 62, 574, 318, 830, 190, 702, 446, - 958, 126, 638, 382, 894, 254, 766, 510, 1022, 1, 513, 257, 769, 129, - 641, 385, 897, 65, 577, 321, 833, 193, 705, 449, 961, 33, 545, 289, 801, - 161, 673, 417, 929, 97, 609, 353, 865, 225, 737, 481, 993, 17, 529, 273, - 785, 145, 657, 401, 913, 81, 593, 337, 849, 209, 721, 465, 977, 49, 561, - 305, 817, 177, 689, 433, 945, 113, 625, 369, 881, 241, 753, 497, 1009, - 9, 521, 265, 777, 137, 649, 393, 905, 73, 585, 329, 841, 201, 713, 457, - 969, 41, 553, 297, 809, 169, 681, 425, 937, 105, 617, 361, 873, 233, - 745, 489, 1001, 25, 537, 281, 793, 153, 665, 409, 921, 89, 601, 345, - 857, 217, 729, 473, 985, 57, 569, 313, 825, 185, 697, 441, 953, 121, - 633, 377, 889, 249, 761, 505, 1017, 5, 517, 261, 773, 133, 645, 389, - 901, 69, 581, 325, 837, 197, 709, 453, 965, 37, 549, 293, 805, 165, 677, - 421, 933, 101, 613, 357, 869, 229, 741, 485, 997, 21, 533, 277, 789, - 149, 661, 405, 917, 85, 597, 341, 853, 213, 725, 469, 981, 53, 565, 309, - 821, 181, 693, 437, 949, 117, 629, 373, 885, 245, 757, 501, 1013, 13, - 525, 269, 781, 141, 653, 397, 909, 77, 589, 333, 845, 205, 717, 461, - 973, 45, 557, 301, 813, 173, 685, 429, 941, 109, 621, 365, 877, 237, - 749, 493, 1005, 29, 541, 285, 797, 157, 669, 413, 925, 93, 605, 349, - 861, 221, 733, 477, 989, 61, 573, 317, 829, 189, 701, 445, 957, 125, - 637, 381, 893, 253, 765, 509, 1021, 3, 515, 259, 771, 131, 643, 387, - 899, 67, 579, 323, 835, 195, 707, 451, 963, 35, 547, 291, 803, 163, 675, - 419, 931, 99, 611, 355, 867, 227, 739, 483, 995, 19, 531, 275, 787, 147, - 659, 403, 915, 83, 595, 339, 851, 211, 723, 467, 979, 51, 563, 307, 819, - 179, 691, 435, 947, 115, 627, 371, 883, 243, 755, 499, 1011, 11, 523, - 267, 779, 139, 651, 395, 907, 75, 587, 331, 843, 203, 715, 459, 971, 43, - 555, 299, 811, 171, 683, 427, 939, 107, 619, 363, 875, 235, 747, 491, - 1003, 27, 539, 283, 795, 155, 667, 411, 923, 91, 603, 347, 859, 219, - 731, 475, 987, 59, 571, 315, 827, 187, 699, 443, 955, 123, 635, 379, - 891, 251, 763, 507, 1019, 7, 519, 263, 775, 135, 647, 391, 903, 71, 583, - 327, 839, 199, 711, 455, 967, 39, 551, 295, 807, 167, 679, 423, 935, - 103, 615, 359, 871, 231, 743, 487, 999, 23, 535, 279, 791, 151, 663, - 407, 919, 87, 599, 343, 855, 215, 727, 471, 983, 55, 567, 311, 823, 183, - 695, 439, 951, 119, 631, 375, 887, 247, 759, 503, 1015, 15, 527, 271, - 783, 143, 655, 399, 911, 79, 591, 335, 847, 207, 719, 463, 975, 47, 559, - 303, 815, 175, 687, 431, 943, 111, 623, 367, 879, 239, 751, 495, 1007, - 31, 543, 287, 799, 159, 671, 415, 927, 95, 607, 351, 863, 223, 735, 479, - 991, 63, 575, 319, 831, 191, 703, 447, 959, 127, 639, 383, 895, 255, - 767, 511, 1023, -} - -func (p *poly) bitrev() { - for i, v := range p.coeffs { - r := bitrevTable[i] - if uint16(i) < r { - p.coeffs[i] = p.coeffs[r] - p.coeffs[r] = v - } - } -} - -func (p *poly) mulCoefficients(factors *[paramN]uint16) { - for i, v := range factors { - p.coeffs[i] = montgomeryReduce(uint32(p.coeffs[i]) * uint32(v)) - } -} - -func ntt(a *[paramN]uint16, omega *[paramN / 2]uint16) { - var distance uint - - for i := uint(0); i < 10; i += 2 { - // Even level. - distance = (1 << i) - for start := uint(0); start < distance; start++ { - jTwiddle := 0 - for j := start; j < paramN-1; j += 2 * distance { - w := uint32(omega[jTwiddle]) - jTwiddle++ - tmp := a[j] - a[j] = tmp + a[j+distance] - a[j+distance] = montgomeryReduce(w * (uint32(tmp) + 3*paramQ - uint32(a[j+distance]))) - } - } - - // Odd level. - distance <<= 1 - for start := uint(0); start < distance; start++ { - jTwiddle := 0 - for j := start; j < paramN-1; j += 2 * distance { - w := uint32(omega[jTwiddle]) - jTwiddle++ - tmp := a[j] - a[j] = barrettReduce(tmp + a[j+distance]) - a[j+distance] = montgomeryReduce(w * (uint32(tmp) + 3*paramQ - uint32(a[j+distance]))) - } - } - } -} diff --git a/vendor/blitter.com/go/newhope/params.go b/vendor/blitter.com/go/newhope/params.go deleted file mode 100644 index 572236b..0000000 --- a/vendor/blitter.com/go/newhope/params.go +++ /dev/null @@ -1,17 +0,0 @@ -// params.go - NewHope parameters. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to newhope, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -package newhope - -const ( - paramN = 1024 - paramK = 16 // used in sampler - paramQ = 12289 - - // SeedBytes is the size of the seed in bytes. - SeedBytes = 32 -) diff --git a/vendor/blitter.com/go/newhope/poly.go b/vendor/blitter.com/go/newhope/poly.go deleted file mode 100644 index 860126e..0000000 --- a/vendor/blitter.com/go/newhope/poly.go +++ /dev/null @@ -1,212 +0,0 @@ -// poly.go - NewHope polynomial. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to newhope, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -package newhope - -import ( - "encoding/binary" - - "blitter.com/go/chacha20" - "golang.org/x/crypto/sha3" -) - -const ( - // PolyBytes is the length of an encoded polynomial in bytes. - PolyBytes = 1792 - - shake128Rate = 168 // Stupid that this isn't exposed. -) - -type poly struct { - coeffs [paramN]uint16 -} - -func (p *poly) reset() { - for i := range p.coeffs { - p.coeffs[i] = 0 - } -} - -func (p *poly) fromBytes(a []byte) { - for i := 0; i < paramN/4; i++ { - p.coeffs[4*i+0] = uint16(a[7*i+0]) | ((uint16(a[7*i+1]) & 0x3f) << 8) - p.coeffs[4*i+1] = (uint16(a[7*i+1]) >> 6) | (uint16(a[7*i+2]) << 2) | ((uint16(a[7*i+3]) & 0x0f) << 10) - - p.coeffs[4*i+2] = (uint16(a[7*i+3]) >> 4) | (uint16(a[7*i+4]) << 4) | ((uint16(a[7*i+5]) & 0x03) << 12) - p.coeffs[4*i+3] = (uint16(a[7*i+5]) >> 2) | (uint16(a[7*i+6]) << 6) - } -} - -func (p *poly) toBytes(r []byte) { - for i := 0; i < paramN/4; i++ { - // Make sure that coefficients have only 14 bits. - t0 := barrettReduce(p.coeffs[4*i+0]) - t1 := barrettReduce(p.coeffs[4*i+1]) - t2 := barrettReduce(p.coeffs[4*i+2]) - t3 := barrettReduce(p.coeffs[4*i+3]) - - // Make sure that coefficients are in [0,q] - m := t0 - paramQ - c := int16(m) - c >>= 15 - t0 = m ^ ((t0 ^ m) & uint16(c)) - - m = t1 - paramQ - c = int16(m) - c >>= 15 - t1 = m ^ ((t1 ^ m) & uint16(c)) - - m = t2 - paramQ - c = int16(m) - c >>= 15 - t2 = m ^ ((t2 ^ m) & uint16(c)) - - m = t3 - paramQ - c = int16(m) - c >>= 15 - t3 = m ^ ((t3 ^ m) & uint16(c)) - - r[7*i+0] = byte(t0 & 0xff) - r[7*i+1] = byte(t0>>8) | byte(t1<<6) - r[7*i+2] = byte(t1 >> 2) - r[7*i+3] = byte(t1>>10) | byte(t2<<4) - r[7*i+4] = byte(t2 >> 4) - r[7*i+5] = byte(t2>>12) | byte(t3<<2) - r[7*i+6] = byte(t3 >> 6) - } -} - -func (p *poly) discardTo(xbuf []byte) bool { - var x [shake128Rate * 16 / 2]uint16 - for i := range x { - x[i] = binary.LittleEndian.Uint16(xbuf[i*2:]) - } - - for i := 0; i < 16; i++ { - batcher84(x[i:]) - } - - // Check whether we're safe: - r := int(0) - for i := 1000; i < 1024; i++ { - r |= 61444 - int(x[i]) - } - if r>>31 != 0 { - return true - } - - // If we are, copy coefficients to polynomial: - for i := range p.coeffs { - p.coeffs[i] = x[i] - } - - return false -} - -func (p *poly) uniform(seed *[SeedBytes]byte, torSampling bool) { - if !torSampling { - // Reference version, vartime. - nBlocks := 14 - var buf [shake128Rate * 14]byte - - // h and buf are left unscrubbed because the output is public. - h := sha3.NewShake128() - _, _ = h.Write(seed[:]) - _, _ = h.Read(buf[:]) - - for ctr, pos := 0, 0; ctr < paramN; { - val := binary.LittleEndian.Uint16(buf[pos:]) - - if val < 5*paramQ { - p.coeffs[ctr] = val - ctr++ - } - pos += 2 - if pos > shake128Rate*nBlocks-2 { - nBlocks = 1 - _, _ = h.Read(buf[:shake128Rate]) - pos = 0 - } - } - } else { - // `torref` version, every valid `a` is generate in constant time, - // though the number of attempts varies. - const nBlocks = 16 - var buf [shake128Rate * nBlocks]byte - - // h and buf are left unscrubbed because the output is public. - h := sha3.NewShake128() - _, _ = h.Write(seed[:]) - - for { - _, _ = h.Read(buf[:]) - if !p.discardTo(buf[:]) { - break - } - } - - } -} - -func (p *poly) getNoise(seed *[SeedBytes]byte, nonce byte) { - // The `ref` code uses a uint32 vector instead of a byte vector, - // but converting between the two in Go is cumbersome. - var buf [4 * paramN]byte - var n [8]byte - - n[0] = nonce - stream, err := chacha20.New(seed[:], n[:]) - if err != nil { - panic(err) - } - stream.KeyStream(buf[:]) - stream.Reset() - - for i := 0; i < paramN; i++ { - t := binary.LittleEndian.Uint32(buf[4*i:]) - d := uint32(0) - for j := uint(0); j < 8; j++ { - d += (t >> j) & 0x01010101 - } - a := ((d >> 8) & 0xff) + (d & 0xff) - b := (d >> 24) + ((d >> 16) & 0xff) - p.coeffs[i] = uint16(a) + paramQ - uint16(b) - } - - // Scrub the random bits... - memwipe(buf[:]) -} - -func (p *poly) pointwise(a, b *poly) { - for i := range p.coeffs { - t := montgomeryReduce(3186 * uint32(b.coeffs[i])) // t is now in Montgomery domain - p.coeffs[i] = montgomeryReduce(uint32(a.coeffs[i]) * uint32(t)) // p.coeffs[i] is back in normal domain - } -} - -func (p *poly) add(a, b *poly) { - for i := range p.coeffs { - p.coeffs[i] = barrettReduce(a.coeffs[i] + b.coeffs[i]) - } -} - -func (p *poly) ntt() { - p.mulCoefficients(&psisBitrevMontgomery) - ntt(&p.coeffs, &omegasMontgomery) -} - -func (p *poly) invNtt() { - p.bitrev() - ntt(&p.coeffs, &omegasInvMontgomery) - p.mulCoefficients(&psisInvMontgomery) -} - -func init() { - if paramK != 16 { - panic("poly.getNoise() only supports k=16") - } -} diff --git a/vendor/blitter.com/go/newhope/poly_simple.go b/vendor/blitter.com/go/newhope/poly_simple.go deleted file mode 100644 index 59ebec1..0000000 --- a/vendor/blitter.com/go/newhope/poly_simple.go +++ /dev/null @@ -1,99 +0,0 @@ -// poly_simple.go - NewHope-Simple polynomial. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to newhope, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -package newhope - -func coeffFreeze(x uint16) uint16 { - var c int16 - - r := barrettReduce(x) - m := r - paramQ - c = int16(m) - c >>= 15 - r = m ^ ((r ^ m) & uint16(c)) - - return r -} - -// Computes abs(x-Q/2) -func flipAbs(x uint16) uint16 { - r := int16(coeffFreeze(x)) - r = r - paramQ/2 - m := r >> 15 - return uint16((r + m) ^ m) -} - -func (p *poly) compress(r []byte) { - var t [8]uint32 - - for i, k := 0, 0; i < paramN; i, k = i+8, k+3 { - for j := range t { - t[j] = uint32(coeffFreeze(p.coeffs[i+j])) - t[j] = (((t[j] << 3) + paramQ/2) / paramQ) & 0x7 - } - - r[k] = byte(t[0]) | byte(t[1]<<3) | byte(t[2]<<6) - r[k+1] = byte(t[2]>>2) | byte(t[3]<<1) | byte(t[4]<<4) | byte(t[5]<<7) - r[k+2] = byte(t[5]>>1) | byte(t[6]<<2) | byte(t[7]<<5) - } - - for i := range t { - t[i] = 0 - } -} - -func (p *poly) decompress(a []byte) { - for i := 0; i < paramN; i += 8 { - a0, a1, a2 := uint16(a[0]), uint16(a[1]), uint16(a[2]) - p.coeffs[i+0] = a0 & 7 - p.coeffs[i+1] = (a0 >> 3) & 7 - p.coeffs[i+2] = (a0 >> 6) | ((a1 << 2) & 4) - p.coeffs[i+3] = (a1 >> 1) & 7 - p.coeffs[i+4] = (a1 >> 4) & 7 - p.coeffs[i+5] = (a1 >> 7) | ((a2 << 1) & 6) - p.coeffs[i+6] = (a2 >> 2) & 7 - p.coeffs[i+7] = (a2 >> 5) - a = a[3:] - for j := 0; j < 8; j++ { - p.coeffs[i+j] = uint16((uint32(p.coeffs[i+j])*paramQ + 4) >> 3) - } - } -} - -func (p *poly) fromMsg(msg []byte) { - for i := uint(0); i < 32; i++ { // XXX: const for 32 - for j := uint(0); j < 8; j++ { - mask := -(uint16((msg[i] >> j) & 1)) - p.coeffs[8*i+j+0] = mask & (paramQ / 2) - p.coeffs[8*i+j+256] = mask & (paramQ / 2) - p.coeffs[8*i+j+512] = mask & (paramQ / 2) - p.coeffs[8*i+j+768] = mask & (paramQ / 2) - } - } -} - -func (p *poly) toMsg(msg []byte) { - memwipe(msg[0:32]) - - for i := uint(0); i < 256; i++ { - t := flipAbs(p.coeffs[i+0]) - t += flipAbs(p.coeffs[i+256]) - t += flipAbs(p.coeffs[i+512]) - t += flipAbs(p.coeffs[i+768]) - - //t = (~(t - PARAM_Q)); - t = (t - paramQ) - t >>= 15 - msg[i>>3] |= byte(t << (i & 7)) - } -} - -func (p *poly) sub(a, b *poly) { - for i := range p.coeffs { - p.coeffs[i] = barrettReduce(a.coeffs[i] + 3*paramQ - b.coeffs[i]) - } -} diff --git a/vendor/blitter.com/go/newhope/precomp.go b/vendor/blitter.com/go/newhope/precomp.go deleted file mode 100644 index 4d61c81..0000000 --- a/vendor/blitter.com/go/newhope/precomp.go +++ /dev/null @@ -1,287 +0,0 @@ -// precomp.go - NewHope precomputed tables. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to newhope, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -package newhope - -var omegasMontgomery = [paramN / 2]uint16{ - 4075, 6974, 7373, 7965, 3262, 5079, 522, 2169, 6364, 1018, 1041, 8775, 2344, - 11011, 5574, 1973, 4536, 1050, 6844, 3860, 3818, 6118, 2683, 1190, 4789, - 7822, 7540, 6752, 5456, 4449, 3789, 12142, 11973, 382, 3988, 468, 6843, - 5339, 6196, 3710, 11316, 1254, 5435, 10930, 3998, 10256, 10367, 3879, - 11889, 1728, 6137, 4948, 5862, 6136, 3643, 6874, 8724, 654, 10302, 1702, - 7083, 6760, 56, 3199, 9987, 605, 11785, 8076, 5594, 9260, 6403, 4782, - 6212, 4624, 9026, 8689, 4080, 11868, 6221, 3602, 975, 8077, 8851, 9445, - 5681, 3477, 1105, 142, 241, 12231, 1003, 3532, 5009, 1956, 6008, 11404, - 7377, 2049, 10968, 12097, 7591, 5057, 3445, 4780, 2920, 7048, 3127, - 8120, 11279, 6821, 11502, 8807, 12138, 2127, 2839, 3957, 431, 1579, - 6383, 9784, 5874, 677, 3336, 6234, 2766, 1323, 9115, 12237, 2031, 6956, - 6413, 2281, 3969, 3991, 12133, 9522, 4737, 10996, 4774, 5429, 11871, - 3772, 453, 5908, 2882, 1805, 2051, 1954, 11713, 3963, 2447, 6142, 8174, - 3030, 1843, 2361, 12071, 2908, 3529, 3434, 3202, 7796, 2057, 5369, - 11939, 1512, 6906, 10474, 11026, 49, 10806, 5915, 1489, 9789, 5942, - 10706, 10431, 7535, 426, 8974, 3757, 10314, 9364, 347, 5868, 9551, 9634, - 6554, 10596, 9280, 11566, 174, 2948, 2503, 6507, 10723, 11606, 2459, 64, - 3656, 8455, 5257, 5919, 7856, 1747, 9166, 5486, 9235, 6065, 835, 3570, - 4240, 11580, 4046, 10970, 9139, 1058, 8210, 11848, 922, 7967, 1958, - 10211, 1112, 3728, 4049, 11130, 5990, 1404, 325, 948, 11143, 6190, 295, - 11637, 5766, 8212, 8273, 2919, 8527, 6119, 6992, 8333, 1360, 2555, 6167, - 1200, 7105, 7991, 3329, 9597, 12121, 5106, 5961, 10695, 10327, 3051, - 9923, 4896, 9326, 81, 3091, 1000, 7969, 4611, 726, 1853, 12149, 4255, - 11112, 2768, 10654, 1062, 2294, 3553, 4805, 2747, 4846, 8577, 9154, - 1170, 2319, 790, 11334, 9275, 9088, 1326, 5086, 9094, 6429, 11077, - 10643, 3504, 3542, 8668, 9744, 1479, 1, 8246, 7143, 11567, 10984, 4134, - 5736, 4978, 10938, 5777, 8961, 4591, 5728, 6461, 5023, 9650, 7468, 949, - 9664, 2975, 11726, 2744, 9283, 10092, 5067, 12171, 2476, 3748, 11336, - 6522, 827, 9452, 5374, 12159, 7935, 3296, 3949, 9893, 4452, 10908, 2525, - 3584, 8112, 8011, 10616, 4989, 6958, 11809, 9447, 12280, 1022, 11950, - 9821, 11745, 5791, 5092, 2089, 9005, 2881, 3289, 2013, 9048, 729, 7901, - 1260, 5755, 4632, 11955, 2426, 10593, 1428, 4890, 5911, 3932, 9558, - 8830, 3637, 5542, 145, 5179, 8595, 3707, 10530, 355, 3382, 4231, 9741, - 1207, 9041, 7012, 1168, 10146, 11224, 4645, 11885, 10911, 10377, 435, - 7952, 4096, 493, 9908, 6845, 6039, 2422, 2187, 9723, 8643, 9852, 9302, - 6022, 7278, 1002, 4284, 5088, 1607, 7313, 875, 8509, 9430, 1045, 2481, - 5012, 7428, 354, 6591, 9377, 11847, 2401, 1067, 7188, 11516, 390, 8511, - 8456, 7270, 545, 8585, 9611, 12047, 1537, 4143, 4714, 4885, 1017, 5084, - 1632, 3066, 27, 1440, 8526, 9273, 12046, 11618, 9289, 3400, 9890, 3136, - 7098, 8758, 11813, 7384, 3985, 11869, 6730, 10745, 10111, 2249, 4048, - 2884, 11136, 2126, 1630, 9103, 5407, 2686, 9042, 2969, 8311, 9424, 9919, - 8779, 5332, 10626, 1777, 4654, 10863, 7351, 3636, 9585, 5291, 8374, - 2166, 4919, 12176, 9140, 12129, 7852, 12286, 4895, 10805, 2780, 5195, - 2305, 7247, 9644, 4053, 10600, 3364, 3271, 4057, 4414, 9442, 7917, 2174, -} - -var omegasInvMontgomery = [paramN / 2]uint16{ - 4075, 5315, 4324, 4916, 10120, 11767, 7210, 9027, 10316, 6715, 1278, 9945, - 3514, 11248, 11271, 5925, 147, 8500, 7840, 6833, 5537, 4749, 4467, 7500, - 11099, 9606, 6171, 8471, 8429, 5445, 11239, 7753, 9090, 12233, 5529, - 5206, 10587, 1987, 11635, 3565, 5415, 8646, 6153, 6427, 7341, 6152, - 10561, 400, 8410, 1922, 2033, 8291, 1359, 6854, 11035, 973, 8579, 6093, - 6950, 5446, 11821, 8301, 11907, 316, 52, 3174, 10966, 9523, 6055, 8953, - 11612, 6415, 2505, 5906, 10710, 11858, 8332, 9450, 10162, 151, 3482, - 787, 5468, 1010, 4169, 9162, 5241, 9369, 7509, 8844, 7232, 4698, 192, - 1321, 10240, 4912, 885, 6281, 10333, 7280, 8757, 11286, 58, 12048, - 12147, 11184, 8812, 6608, 2844, 3438, 4212, 11314, 8687, 6068, 421, - 8209, 3600, 3263, 7665, 6077, 7507, 5886, 3029, 6695, 4213, 504, 11684, - 2302, 1962, 1594, 6328, 7183, 168, 2692, 8960, 4298, 5184, 11089, 6122, - 9734, 10929, 3956, 5297, 6170, 3762, 9370, 4016, 4077, 6523, 652, 11994, - 6099, 1146, 11341, 11964, 10885, 6299, 1159, 8240, 8561, 11177, 2078, - 10331, 4322, 11367, 441, 4079, 11231, 3150, 1319, 8243, 709, 8049, 8719, - 11454, 6224, 3054, 6803, 3123, 10542, 4433, 6370, 7032, 3834, 8633, - 12225, 9830, 683, 1566, 5782, 9786, 9341, 12115, 723, 3009, 1693, 5735, - 2655, 2738, 6421, 11942, 2925, 1975, 8532, 3315, 11863, 4754, 1858, - 1583, 6347, 2500, 10800, 6374, 1483, 12240, 1263, 1815, 5383, 10777, - 350, 6920, 10232, 4493, 9087, 8855, 8760, 9381, 218, 9928, 10446, 9259, - 4115, 6147, 9842, 8326, 576, 10335, 10238, 10484, 9407, 6381, 11836, - 8517, 418, 6860, 7515, 1293, 7552, 2767, 156, 8298, 8320, 10008, 5876, - 5333, 10258, 10115, 4372, 2847, 7875, 8232, 9018, 8925, 1689, 8236, - 2645, 5042, 9984, 7094, 9509, 1484, 7394, 3, 4437, 160, 3149, 113, 7370, - 10123, 3915, 6998, 2704, 8653, 4938, 1426, 7635, 10512, 1663, 6957, - 3510, 2370, 2865, 3978, 9320, 3247, 9603, 6882, 3186, 10659, 10163, - 1153, 9405, 8241, 10040, 2178, 1544, 5559, 420, 8304, 4905, 476, 3531, - 5191, 9153, 2399, 8889, 3000, 671, 243, 3016, 3763, 10849, 12262, 9223, - 10657, 7205, 11272, 7404, 7575, 8146, 10752, 242, 2678, 3704, 11744, - 5019, 3833, 3778, 11899, 773, 5101, 11222, 9888, 442, 2912, 5698, 11935, - 4861, 7277, 9808, 11244, 2859, 3780, 11414, 4976, 10682, 7201, 8005, - 11287, 5011, 6267, 2987, 2437, 3646, 2566, 10102, 9867, 6250, 5444, - 2381, 11796, 8193, 4337, 11854, 1912, 1378, 404, 7644, 1065, 2143, - 11121, 5277, 3248, 11082, 2548, 8058, 8907, 11934, 1759, 8582, 3694, - 7110, 12144, 6747, 8652, 3459, 2731, 8357, 6378, 7399, 10861, 1696, - 9863, 334, 7657, 6534, 11029, 4388, 11560, 3241, 10276, 9000, 9408, - 3284, 10200, 7197, 6498, 544, 2468, 339, 11267, 9, 2842, 480, 5331, - 7300, 1673, 4278, 4177, 8705, 9764, 1381, 7837, 2396, 8340, 8993, 4354, - 130, 6915, 2837, 11462, 5767, 953, 8541, 9813, 118, 7222, 2197, 3006, - 9545, 563, 9314, 2625, 11340, 4821, 2639, 7266, 5828, 6561, 7698, 3328, - 6512, 1351, 7311, 6553, 8155, 1305, 722, 5146, 4043, 12288, 10810, 2545, - 3621, 8747, 8785, 1646, 1212, 5860, 3195, 7203, 10963, 3201, 3014, 955, - 11499, 9970, 11119, 3135, 3712, 7443, 9542, 7484, 8736, 9995, 11227, - 1635, 9521, 1177, 8034, 140, 10436, 11563, 7678, 4320, 11289, 9198, - 12208, 2963, 7393, 2366, 9238, -} - -var psisBitrevMontgomery = [paramN]uint16{ - 4075, 6974, 7373, 7965, 3262, 5079, 522, 2169, 6364, 1018, 1041, 8775, 2344, - 11011, 5574, 1973, 4536, 1050, 6844, 3860, 3818, 6118, 2683, 1190, 4789, - 7822, 7540, 6752, 5456, 4449, 3789, 12142, 11973, 382, 3988, 468, 6843, - 5339, 6196, 3710, 11316, 1254, 5435, 10930, 3998, 10256, 10367, 3879, - 11889, 1728, 6137, 4948, 5862, 6136, 3643, 6874, 8724, 654, 10302, 1702, - 7083, 6760, 56, 3199, 9987, 605, 11785, 8076, 5594, 9260, 6403, 4782, - 6212, 4624, 9026, 8689, 4080, 11868, 6221, 3602, 975, 8077, 8851, 9445, - 5681, 3477, 1105, 142, 241, 12231, 1003, 3532, 5009, 1956, 6008, 11404, - 7377, 2049, 10968, 12097, 7591, 5057, 3445, 4780, 2920, 7048, 3127, - 8120, 11279, 6821, 11502, 8807, 12138, 2127, 2839, 3957, 431, 1579, - 6383, 9784, 5874, 677, 3336, 6234, 2766, 1323, 9115, 12237, 2031, 6956, - 6413, 2281, 3969, 3991, 12133, 9522, 4737, 10996, 4774, 5429, 11871, - 3772, 453, 5908, 2882, 1805, 2051, 1954, 11713, 3963, 2447, 6142, 8174, - 3030, 1843, 2361, 12071, 2908, 3529, 3434, 3202, 7796, 2057, 5369, - 11939, 1512, 6906, 10474, 11026, 49, 10806, 5915, 1489, 9789, 5942, - 10706, 10431, 7535, 426, 8974, 3757, 10314, 9364, 347, 5868, 9551, 9634, - 6554, 10596, 9280, 11566, 174, 2948, 2503, 6507, 10723, 11606, 2459, 64, - 3656, 8455, 5257, 5919, 7856, 1747, 9166, 5486, 9235, 6065, 835, 3570, - 4240, 11580, 4046, 10970, 9139, 1058, 8210, 11848, 922, 7967, 1958, - 10211, 1112, 3728, 4049, 11130, 5990, 1404, 325, 948, 11143, 6190, 295, - 11637, 5766, 8212, 8273, 2919, 8527, 6119, 6992, 8333, 1360, 2555, 6167, - 1200, 7105, 7991, 3329, 9597, 12121, 5106, 5961, 10695, 10327, 3051, - 9923, 4896, 9326, 81, 3091, 1000, 7969, 4611, 726, 1853, 12149, 4255, - 11112, 2768, 10654, 1062, 2294, 3553, 4805, 2747, 4846, 8577, 9154, - 1170, 2319, 790, 11334, 9275, 9088, 1326, 5086, 9094, 6429, 11077, - 10643, 3504, 3542, 8668, 9744, 1479, 1, 8246, 7143, 11567, 10984, 4134, - 5736, 4978, 10938, 5777, 8961, 4591, 5728, 6461, 5023, 9650, 7468, 949, - 9664, 2975, 11726, 2744, 9283, 10092, 5067, 12171, 2476, 3748, 11336, - 6522, 827, 9452, 5374, 12159, 7935, 3296, 3949, 9893, 4452, 10908, 2525, - 3584, 8112, 8011, 10616, 4989, 6958, 11809, 9447, 12280, 1022, 11950, - 9821, 11745, 5791, 5092, 2089, 9005, 2881, 3289, 2013, 9048, 729, 7901, - 1260, 5755, 4632, 11955, 2426, 10593, 1428, 4890, 5911, 3932, 9558, - 8830, 3637, 5542, 145, 5179, 8595, 3707, 10530, 355, 3382, 4231, 9741, - 1207, 9041, 7012, 1168, 10146, 11224, 4645, 11885, 10911, 10377, 435, - 7952, 4096, 493, 9908, 6845, 6039, 2422, 2187, 9723, 8643, 9852, 9302, - 6022, 7278, 1002, 4284, 5088, 1607, 7313, 875, 8509, 9430, 1045, 2481, - 5012, 7428, 354, 6591, 9377, 11847, 2401, 1067, 7188, 11516, 390, 8511, - 8456, 7270, 545, 8585, 9611, 12047, 1537, 4143, 4714, 4885, 1017, 5084, - 1632, 3066, 27, 1440, 8526, 9273, 12046, 11618, 9289, 3400, 9890, 3136, - 7098, 8758, 11813, 7384, 3985, 11869, 6730, 10745, 10111, 2249, 4048, - 2884, 11136, 2126, 1630, 9103, 5407, 2686, 9042, 2969, 8311, 9424, 9919, - 8779, 5332, 10626, 1777, 4654, 10863, 7351, 3636, 9585, 5291, 8374, - 2166, 4919, 12176, 9140, 12129, 7852, 12286, 4895, 10805, 2780, 5195, - 2305, 7247, 9644, 4053, 10600, 3364, 3271, 4057, 4414, 9442, 7917, 2174, - 3947, 11951, 2455, 6599, 10545, 10975, 3654, 2894, 7681, 7126, 7287, - 12269, 4119, 3343, 2151, 1522, 7174, 7350, 11041, 2442, 2148, 5959, - 6492, 8330, 8945, 5598, 3624, 10397, 1325, 6565, 1945, 11260, 10077, - 2674, 3338, 3276, 11034, 506, 6505, 1392, 5478, 8778, 1178, 2776, 3408, - 10347, 11124, 2575, 9489, 12096, 6092, 10058, 4167, 6085, 923, 11251, - 11912, 4578, 10669, 11914, 425, 10453, 392, 10104, 8464, 4235, 8761, - 7376, 2291, 3375, 7954, 8896, 6617, 7790, 1737, 11667, 3982, 9342, 6680, - 636, 6825, 7383, 512, 4670, 2900, 12050, 7735, 994, 1687, 11883, 7021, - 146, 10485, 1403, 5189, 6094, 2483, 2054, 3042, 10945, 3981, 10821, - 11826, 8882, 8151, 180, 9600, 7684, 5219, 10880, 6780, 204, 11232, 2600, - 7584, 3121, 3017, 11053, 7814, 7043, 4251, 4739, 11063, 6771, 7073, - 9261, 2360, 11925, 1928, 11825, 8024, 3678, 3205, 3359, 11197, 5209, - 8581, 3238, 8840, 1136, 9363, 1826, 3171, 4489, 7885, 346, 2068, 1389, - 8257, 3163, 4840, 6127, 8062, 8921, 612, 4238, 10763, 8067, 125, 11749, - 10125, 5416, 2110, 716, 9839, 10584, 11475, 11873, 3448, 343, 1908, - 4538, 10423, 7078, 4727, 1208, 11572, 3589, 2982, 1373, 1721, 10753, - 4103, 2429, 4209, 5412, 5993, 9011, 438, 3515, 7228, 1218, 8347, 5232, - 8682, 1327, 7508, 4924, 448, 1014, 10029, 12221, 4566, 5836, 12229, - 2717, 1535, 3200, 5588, 5845, 412, 5102, 7326, 3744, 3056, 2528, 7406, - 8314, 9202, 6454, 6613, 1417, 10032, 7784, 1518, 3765, 4176, 5063, 9828, - 2275, 6636, 4267, 6463, 2065, 7725, 3495, 8328, 8755, 8144, 10533, 5966, - 12077, 9175, 9520, 5596, 6302, 8400, 579, 6781, 11014, 5734, 11113, - 11164, 4860, 1131, 10844, 9068, 8016, 9694, 3837, 567, 9348, 7000, 6627, - 7699, 5082, 682, 11309, 5207, 4050, 7087, 844, 7434, 3769, 293, 9057, - 6940, 9344, 10883, 2633, 8190, 3944, 5530, 5604, 3480, 2171, 9282, - 11024, 2213, 8136, 3805, 767, 12239, 216, 11520, 6763, 10353, 7, 8566, - 845, 7235, 3154, 4360, 3285, 10268, 2832, 3572, 1282, 7559, 3229, 8360, - 10583, 6105, 3120, 6643, 6203, 8536, 8348, 6919, 3536, 9199, 10891, - 11463, 5043, 1658, 5618, 8787, 5789, 4719, 751, 11379, 6389, 10783, - 3065, 7806, 6586, 2622, 5386, 510, 7628, 6921, 578, 10345, 11839, 8929, - 4684, 12226, 7154, 9916, 7302, 8481, 3670, 11066, 2334, 1590, 7878, - 10734, 1802, 1891, 5103, 6151, 8820, 3418, 7846, 9951, 4693, 417, 9996, - 9652, 4510, 2946, 5461, 365, 881, 1927, 1015, 11675, 11009, 1371, 12265, - 2485, 11385, 5039, 6742, 8449, 1842, 12217, 8176, 9577, 4834, 7937, - 9461, 2643, 11194, 3045, 6508, 4094, 3451, 7911, 11048, 5406, 4665, - 3020, 6616, 11345, 7519, 3669, 5287, 1790, 7014, 5410, 11038, 11249, - 2035, 6125, 10407, 4565, 7315, 5078, 10506, 2840, 2478, 9270, 4194, - 9195, 4518, 7469, 1160, 6878, 2730, 10421, 10036, 1734, 3815, 10939, - 5832, 10595, 10759, 4423, 8420, 9617, 7119, 11010, 11424, 9173, 189, - 10080, 10526, 3466, 10588, 7592, 3578, 11511, 7785, 9663, 530, 12150, - 8957, 2532, 3317, 9349, 10243, 1481, 9332, 3454, 3758, 7899, 4218, 2593, - 11410, 2276, 982, 6513, 1849, 8494, 9021, 4523, 7988, 8, 457, 648, 150, - 8000, 2307, 2301, 874, 5650, 170, 9462, 2873, 9855, 11498, 2535, 11169, - 5808, 12268, 9687, 1901, 7171, 11787, 3846, 1573, 6063, 3793, 466, - 11259, 10608, 3821, 6320, 4649, 6263, 2929, -} - -var psisInvMontgomery = [paramN]uint16{ - 256, 10570, 1510, 7238, 1034, 7170, 6291, 7921, 11665, 3422, 4000, 2327, - 2088, 5565, 795, 10647, 1521, 5484, 2539, 7385, 1055, 7173, 8047, 11683, - 1669, 1994, 3796, 5809, 4341, 9398, 11876, 12230, 10525, 12037, 12253, - 3506, 4012, 9351, 4847, 2448, 7372, 9831, 3160, 2207, 5582, 2553, 7387, - 6322, 9681, 1383, 10731, 1533, 219, 5298, 4268, 7632, 6357, 9686, 8406, - 4712, 9451, 10128, 4958, 5975, 11387, 8649, 11769, 6948, 11526, 12180, - 1740, 10782, 6807, 2728, 7412, 4570, 4164, 4106, 11120, 12122, 8754, - 11784, 3439, 5758, 11356, 6889, 9762, 11928, 1704, 1999, 10819, 12079, - 12259, 7018, 11536, 1648, 1991, 2040, 2047, 2048, 10826, 12080, 8748, - 8272, 8204, 1172, 1923, 7297, 2798, 7422, 6327, 4415, 7653, 6360, 11442, - 12168, 7005, 8023, 9924, 8440, 8228, 2931, 7441, 1063, 3663, 5790, 9605, - 10150, 1450, 8985, 11817, 10466, 10273, 12001, 3470, 7518, 1074, 1909, - 7295, 9820, 4914, 702, 5367, 7789, 8135, 9940, 1420, 3714, 11064, 12114, - 12264, 1752, 5517, 9566, 11900, 1700, 3754, 5803, 829, 1874, 7290, 2797, - 10933, 5073, 7747, 8129, 6428, 6185, 11417, 1631, 233, 5300, 9535, - 10140, 11982, 8734, 8270, 2937, 10953, 8587, 8249, 2934, 9197, 4825, - 5956, 4362, 9401, 1343, 3703, 529, 10609, 12049, 6988, 6265, 895, 3639, - 4031, 4087, 4095, 585, 10617, 8539, 4731, 4187, 9376, 3095, 9220, 10095, - 10220, 1460, 10742, 12068, 1724, 5513, 11321, 6884, 2739, 5658, 6075, - 4379, 11159, 10372, 8504, 4726, 9453, 3106, 7466, 11600, 10435, 8513, - 9994, 8450, 9985, 3182, 10988, 8592, 2983, 9204, 4826, 2445, 5616, 6069, - 867, 3635, 5786, 11360, 5134, 2489, 10889, 12089, 1727, 7269, 2794, - 9177, 1311, 5454, 9557, 6632, 2703, 9164, 10087, 1441, 3717, 531, 3587, - 2268, 324, 5313, 759, 1864, 5533, 2546, 7386, 9833, 8427, 4715, 11207, - 1601, 7251, 4547, 11183, 12131, 1733, 10781, 10318, 1474, 10744, 5046, - 4232, 11138, 10369, 6748, 964, 7160, 4534, 7670, 8118, 8182, 4680, - 11202, 6867, 981, 8918, 1274, 182, 26, 7026, 8026, 11680, 12202, 10521, - 1503, 7237, 4545, 5916, 9623, 8397, 11733, 10454, 3249, 9242, 6587, 941, - 1890, 270, 10572, 6777, 9746, 6659, 6218, 6155, 6146, 878, 1881, 7291, - 11575, 12187, 1741, 7271, 8061, 11685, 6936, 4502, 9421, 4857, 4205, - 7623, 1089, 10689, 1527, 8996, 10063, 11971, 10488, 6765, 2722, 3900, - 9335, 11867, 6962, 11528, 5158, 4248, 4118, 5855, 2592, 5637, 6072, - 2623, 7397, 8079, 9932, 4930, 5971, 853, 3633, 519, 8852, 11798, 3441, - 11025, 1575, 225, 8810, 11792, 12218, 3501, 9278, 3081, 9218, 4828, - 7712, 8124, 11694, 12204, 3499, 4011, 573, 3593, 5780, 7848, 9899, - 10192, 1456, 208, 7052, 2763, 7417, 11593, 10434, 12024, 8740, 11782, - 10461, 3250, 5731, 7841, 9898, 1414, 202, 3540, 7528, 2831, 2160, 10842, - 5060, 4234, 4116, 588, 84, 12, 7024, 2759, 9172, 6577, 11473, 1639, - 9012, 3043, 7457, 6332, 11438, 1634, 1989, 9062, 11828, 8712, 11778, - 12216, 10523, 6770, 9745, 10170, 4964, 9487, 6622, 946, 8913, 6540, - 6201, 4397, 9406, 8366, 9973, 8447, 8229, 11709, 8695, 10020, 3187, - 5722, 2573, 10901, 6824, 4486, 4152, 9371, 8361, 2950, 2177, 311, 1800, - 9035, 8313, 11721, 3430, 490, 70, 10, 1757, 251, 3547, 7529, 11609, - 3414, 7510, 4584, 4166, 9373, 1339, 5458, 7802, 11648, 1664, 7260, 9815, - 10180, 6721, 9738, 10169, 8475, 8233, 9954, 1422, 8981, 1283, 5450, - 11312, 1616, 3742, 11068, 10359, 4991, 713, 3613, 9294, 8350, 4704, 672, - 96, 7036, 9783, 11931, 3460, 5761, 823, 10651, 12055, 10500, 1500, 5481, - 783, 3623, 11051, 8601, 8251, 8201, 11705, 10450, 5004, 4226, 7626, - 2845, 2162, 3820, 7568, 9859, 3164, 452, 10598, 1514, 5483, 6050, 6131, - 4387, 7649, 8115, 6426, 918, 8909, 8295, 1185, 5436, 11310, 8638, 1234, - 5443, 11311, 5127, 2488, 2111, 10835, 5059, 7745, 2862, 3920, 560, 80, - 1767, 2008, 3798, 11076, 6849, 2734, 10924, 12094, 8750, 1250, 10712, - 6797, 971, 7161, 1023, 8924, 4786, 7706, 4612, 4170, 7618, 6355, 4419, - 5898, 11376, 10403, 10264, 6733, 4473, 639, 5358, 2521, 9138, 3061, - 5704, 4326, 618, 5355, 765, 5376, 768, 7132, 4530, 9425, 3102, 9221, - 6584, 11474, 10417, 10266, 12000, 6981, 6264, 4406, 2385, 7363, 4563, - 4163, 7617, 9866, 3165, 9230, 11852, 10471, 5007, 5982, 11388, 5138, - 734, 3616, 11050, 12112, 6997, 11533, 12181, 10518, 12036, 3475, 2252, - 7344, 9827, 4915, 9480, 6621, 4457, 7659, 9872, 6677, 4465, 4149, 7615, - 4599, 657, 3605, 515, 10607, 6782, 4480, 640, 1847, 3775, 5806, 2585, - 5636, 9583, 1369, 10729, 8555, 10000, 11962, 5220, 7768, 8132, 8184, - 9947, 1421, 203, 29, 8782, 11788, 1684, 10774, 10317, 4985, 9490, 8378, - 4708, 11206, 5112, 5997, 7879, 11659, 12199, 8765, 10030, 4944, 5973, - 6120, 6141, 6144, 7900, 11662, 1666, 238, 34, 3516, 5769, 9602, 8394, - 9977, 6692, 956, 10670, 6791, 9748, 11926, 8726, 11780, 5194, 742, 106, - 8793, 10034, 3189, 10989, 5081, 4237, 5872, 4350, 2377, 10873, 6820, - 6241, 11425, 10410, 10265, 3222, 5727, 9596, 4882, 2453, 2106, 3812, - 11078, 12116, 5242, 4260, 11142, 8614, 11764, 12214, 5256, 4262, 4120, - 11122, 5100, 11262, 5120, 2487, 5622, 9581, 8391, 8221, 2930, 10952, - 12098, 6995, 6266, 9673, 4893, 699, 3611, 4027, 5842, 11368, 1624, 232, - 8811, 8281, 1183, 169, 8802, 3013, 2186, 5579, 797, 3625, 4029, 11109, - 1587, 7249, 11569, 8675, 6506, 2685, 10917, 12093, 12261, 12285, 1755, - 7273, 1039, 1904, 272, 3550, 9285, 3082, 5707, 6082, 4380, 7648, 11626, - 5172, 4250, 9385, 8363, 8217, 4685, 5936, 848, 8899, 6538, 934, 1889, - 3781, 9318, 10109, 10222, 6727, 961, 5404, 772, 5377, 9546, 8386, 1198, - 8949, 3034, 2189, 7335, 4559, 5918, 2601, 10905, 5069, 9502, 3113, 7467, - 8089, 11689, 5181, 9518, 8382, 2953, 3933, 4073, 4093, 7607, 8109, 2914, - 5683, 4323, 11151, 1593, 10761, 6804, 972, 3650, 2277, 5592, 4310, 7638, - 9869, 4921, 703, 1856, 9043, 4803, 9464, 1352, 8971, 11815, 5199, 7765, - 6376, 4422, 7654, 2849, 407, 8836, 6529, 7955, 2892, 9191, 1313, 10721, - 12065, 12257, 1751, 9028, 8312, 2943, 2176, 3822, 546, 78, 8789, 11789, - 10462, 12028, 6985, 4509, 9422, 1346, 5459, 4291, 613, 10621, 6784, - 9747, 3148, 7472, 2823, 5670, 810, 7138, 8042, 4660, 7688, 6365, 6176, - 6149, 2634, 5643, 9584, 10147, 11983, 5223, 9524, 11894, 10477, 8519, - 1217, 3685, 2282, 326, 10580, 3267, 7489, 4581, 2410, 5611, 11335, 6886, - 8006, 8166, 11700, 3427, 11023, 8597, 10006, 3185, 455, 65, 5276, 7776, - 4622, 5927, 7869, 9902, 11948, 5218, 2501, 5624, 2559, 10899, 1557, - 1978, 10816, 10323, 8497, 4725, 675, 1852, 10798, 12076, 10503, 3256, - 9243, 3076, 2195, 10847, 12083, 10504, 12034, 10497, -} diff --git a/vendor/blitter.com/go/newhope/reduce.go b/vendor/blitter.com/go/newhope/reduce.go deleted file mode 100644 index 26df25a..0000000 --- a/vendor/blitter.com/go/newhope/reduce.go +++ /dev/null @@ -1,32 +0,0 @@ -// poly.go - NewHope reductions. -// -// To the extent possible under law, Yawning Angel has waived all copyright -// and related or neighboring rights to newhope, using the Creative -// Commons "CC0" public domain dedication. See LICENSE or -// for full details. - -package newhope - -// Incomplete-reduction routines; for details on allowed input ranges -// and produced output ranges, see the description in the paper: -// https://cryptojedi.org/papers/#newhope - -const ( - qinv = 12287 // -inverse_mod(p,2^18) - rlog = 18 -) - -func montgomeryReduce(a uint32) uint16 { - u := a * qinv - u &= ((1 << rlog) - 1) - u *= paramQ - a = (a + u) >> 18 - return uint16(a) -} - -func barrettReduce(a uint16) uint16 { - u := (uint32(a) * 5) >> 16 - u *= paramQ - a -= uint16(u) - return a -} diff --git a/vendor/github.com/aead/chacha20/LICENSE b/vendor/github.com/aead/chacha20/LICENSE deleted file mode 100644 index b6a9210..0000000 --- a/vendor/github.com/aead/chacha20/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Andreas Auernhammer - -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/aead/chacha20/chacha/chacha.go b/vendor/github.com/aead/chacha20/chacha/chacha.go deleted file mode 100644 index c2b39da..0000000 --- a/vendor/github.com/aead/chacha20/chacha/chacha.go +++ /dev/null @@ -1,197 +0,0 @@ -// Copyright (c) 2016 Andreas Auernhammer. All rights reserved. -// Use of this source code is governed by a license that can be -// found in the LICENSE file. - -// Package chacha implements some low-level functions of the -// ChaCha cipher family. -package chacha // import "github.com/aead/chacha20/chacha" - -import ( - "encoding/binary" - "errors" - "math" -) - -const ( - // NonceSize is the size of the ChaCha20 nonce in bytes. - NonceSize = 8 - - // INonceSize is the size of the IETF-ChaCha20 nonce in bytes. - INonceSize = 12 - - // XNonceSize is the size of the XChaCha20 nonce in bytes. - XNonceSize = 24 - - // KeySize is the size of the key in bytes. - KeySize = 32 -) - -var ( - useSSE2 bool - useSSSE3 bool - useAVX bool - useAVX2 bool -) - -var ( - errKeySize = errors.New("chacha20/chacha: bad key length") - errInvalidNonce = errors.New("chacha20/chacha: bad nonce length") -) - -func setup(state *[64]byte, nonce, key []byte) (err error) { - if len(key) != KeySize { - err = errKeySize - return - } - var Nonce [16]byte - switch len(nonce) { - case NonceSize: - copy(Nonce[8:], nonce) - initialize(state, key, &Nonce) - case INonceSize: - copy(Nonce[4:], nonce) - initialize(state, key, &Nonce) - case XNonceSize: - var tmpKey [32]byte - var hNonce [16]byte - - copy(hNonce[:], nonce[:16]) - copy(tmpKey[:], key) - HChaCha20(&tmpKey, &hNonce, &tmpKey) - copy(Nonce[8:], nonce[16:]) - initialize(state, tmpKey[:], &Nonce) - - // BUG(aead): A "good" compiler will remove this (optimizations) - // But using the provided key instead of tmpKey, - // will change the key (-> probably confuses users) - for i := range tmpKey { - tmpKey[i] = 0 - } - default: - err = errInvalidNonce - } - return -} - -// XORKeyStream crypts bytes from src to dst using the given nonce and key. -// The length of the nonce determinds the version of ChaCha20: -// - NonceSize: ChaCha20/r with a 64 bit nonce and a 2^64 * 64 byte period. -// - INonceSize: ChaCha20/r as defined in RFC 7539 and a 2^32 * 64 byte period. -// - XNonceSize: XChaCha20/r with a 192 bit nonce and a 2^64 * 64 byte period. -// The rounds argument specifies the number of rounds performed for keystream -// generation - valid values are 8, 12 or 20. The src and dst may be the same slice -// but otherwise should not overlap. If len(dst) < len(src) this function panics. -// If the nonce is neither 64, 96 nor 192 bits long, this function panics. -func XORKeyStream(dst, src, nonce, key []byte, rounds int) { - if rounds != 20 && rounds != 12 && rounds != 8 { - panic("chacha20/chacha: bad number of rounds") - } - if len(dst) < len(src) { - panic("chacha20/chacha: dst buffer is to small") - } - if len(nonce) == INonceSize && uint64(len(src)) > (1<<38) { - panic("chacha20/chacha: src is too large") - } - - var block, state [64]byte - if err := setup(&state, nonce, key); err != nil { - panic(err) - } - xorKeyStream(dst, src, &block, &state, rounds) -} - -// Cipher implements ChaCha20/r (XChaCha20/r) for a given number of rounds r. -type Cipher struct { - state, block [64]byte - off int - rounds int // 20 for ChaCha20 - noncesize int -} - -// NewCipher returns a new *chacha.Cipher implementing the ChaCha20/r or XChaCha20/r -// (r = 8, 12 or 20) stream cipher. The nonce must be unique for one key for all time. -// The length of the nonce determinds the version of ChaCha20: -// - NonceSize: ChaCha20/r with a 64 bit nonce and a 2^64 * 64 byte period. -// - INonceSize: ChaCha20/r as defined in RFC 7539 and a 2^32 * 64 byte period. -// - XNonceSize: XChaCha20/r with a 192 bit nonce and a 2^64 * 64 byte period. -// If the nonce is neither 64, 96 nor 192 bits long, a non-nil error is returned. -func NewCipher(nonce, key []byte, rounds int) (*Cipher, error) { - if rounds != 20 && rounds != 12 && rounds != 8 { - panic("chacha20/chacha: bad number of rounds") - } - - c := new(Cipher) - if err := setup(&(c.state), nonce, key); err != nil { - return nil, err - } - c.rounds = rounds - - if len(nonce) == INonceSize { - c.noncesize = INonceSize - } else { - c.noncesize = NonceSize - } - - return c, nil -} - -// XORKeyStream crypts bytes from src to dst. Src and dst may be the same slice -// but otherwise should not overlap. If len(dst) < len(src) the function panics. -func (c *Cipher) XORKeyStream(dst, src []byte) { - if len(dst) < len(src) { - panic("chacha20/chacha: dst buffer is to small") - } - - if c.off > 0 { - n := len(c.block[c.off:]) - if len(src) <= n { - for i, v := range src { - dst[i] = v ^ c.block[c.off] - c.off++ - } - if c.off == 64 { - c.off = 0 - } - return - } - - for i, v := range c.block[c.off:] { - dst[i] = src[i] ^ v - } - src = src[n:] - dst = dst[n:] - c.off = 0 - } - - // check for counter overflow - blocksToXOR := len(src) / 64 - if len(src)%64 != 0 { - blocksToXOR++ - } - var overflow bool - if c.noncesize == INonceSize { - overflow = binary.LittleEndian.Uint32(c.state[48:]) > math.MaxUint32-uint32(blocksToXOR) - } else { - overflow = binary.LittleEndian.Uint64(c.state[48:]) > math.MaxUint64-uint64(blocksToXOR) - } - if overflow { - panic("chacha20/chacha: counter overflow") - } - - c.off += xorKeyStream(dst, src, &(c.block), &(c.state), c.rounds) -} - -// SetCounter skips ctr * 64 byte blocks. SetCounter(0) resets the cipher. -// This function always skips the unused keystream of the current 64 byte block. -func (c *Cipher) SetCounter(ctr uint64) { - if c.noncesize == INonceSize { - binary.LittleEndian.PutUint32(c.state[48:], uint32(ctr)) - } else { - binary.LittleEndian.PutUint64(c.state[48:], ctr) - } - c.off = 0 -} - -// HChaCha20 generates 32 pseudo-random bytes from a 128 bit nonce and a 256 bit secret key. -// It can be used as a key-derivation-function (KDF). -func HChaCha20(out *[32]byte, nonce *[16]byte, key *[32]byte) { hChaCha20(out, nonce, key) } diff --git a/vendor/github.com/aead/chacha20/chacha/chachaAVX2_amd64.s b/vendor/github.com/aead/chacha20/chacha/chachaAVX2_amd64.s deleted file mode 100644 index c2b5f52..0000000 --- a/vendor/github.com/aead/chacha20/chacha/chachaAVX2_amd64.s +++ /dev/null @@ -1,406 +0,0 @@ -// Copyright (c) 2016 Andreas Auernhammer. All rights reserved. -// Use of this source code is governed by a license that can be -// found in the LICENSE file. - -// +build amd64,!gccgo,!appengine,!nacl - -#include "const.s" -#include "macro.s" - -#define TWO 0(SP) -#define C16 32(SP) -#define C8 64(SP) -#define STATE_0 96(SP) -#define STATE_1 128(SP) -#define STATE_2 160(SP) -#define STATE_3 192(SP) -#define TMP_0 224(SP) -#define TMP_1 256(SP) - -// func xorKeyStreamAVX(dst, src []byte, block, state *[64]byte, rounds int) int -TEXT ·xorKeyStreamAVX2(SB), 4, $320-80 - MOVQ dst_base+0(FP), DI - MOVQ src_base+24(FP), SI - MOVQ block+48(FP), BX - MOVQ state+56(FP), AX - MOVQ rounds+64(FP), DX - MOVQ src_len+32(FP), CX - - MOVQ SP, R8 - ADDQ $32, SP - ANDQ $-32, SP - - VMOVDQU 0(AX), Y2 - VMOVDQU 32(AX), Y3 - VPERM2I128 $0x22, Y2, Y0, Y0 - VPERM2I128 $0x33, Y2, Y1, Y1 - VPERM2I128 $0x22, Y3, Y2, Y2 - VPERM2I128 $0x33, Y3, Y3, Y3 - - TESTQ CX, CX - JZ done - - VMOVDQU ·one_AVX2<>(SB), Y4 - VPADDD Y4, Y3, Y3 - - VMOVDQA Y0, STATE_0 - VMOVDQA Y1, STATE_1 - VMOVDQA Y2, STATE_2 - VMOVDQA Y3, STATE_3 - - VMOVDQU ·rol16_AVX2<>(SB), Y4 - VMOVDQU ·rol8_AVX2<>(SB), Y5 - VMOVDQU ·two_AVX2<>(SB), Y6 - VMOVDQA Y4, Y14 - VMOVDQA Y5, Y15 - VMOVDQA Y4, C16 - VMOVDQA Y5, C8 - VMOVDQA Y6, TWO - - CMPQ CX, $64 - JBE between_0_and_64 - CMPQ CX, $192 - JBE between_64_and_192 - CMPQ CX, $320 - JBE between_192_and_320 - CMPQ CX, $448 - JBE between_320_and_448 - -at_least_512: - VMOVDQA Y0, Y4 - VMOVDQA Y1, Y5 - VMOVDQA Y2, Y6 - VPADDQ TWO, Y3, Y7 - VMOVDQA Y0, Y8 - VMOVDQA Y1, Y9 - VMOVDQA Y2, Y10 - VPADDQ TWO, Y7, Y11 - VMOVDQA Y0, Y12 - VMOVDQA Y1, Y13 - VMOVDQA Y2, Y14 - VPADDQ TWO, Y11, Y15 - - MOVQ DX, R9 - -chacha_loop_512: - VMOVDQA Y8, TMP_0 - CHACHA_QROUND_AVX(Y0, Y1, Y2, Y3, Y8, C16, C8) - CHACHA_QROUND_AVX(Y4, Y5, Y6, Y7, Y8, C16, C8) - VMOVDQA TMP_0, Y8 - VMOVDQA Y0, TMP_0 - CHACHA_QROUND_AVX(Y8, Y9, Y10, Y11, Y0, C16, C8) - CHACHA_QROUND_AVX(Y12, Y13, Y14, Y15, Y0, C16, C8) - CHACHA_SHUFFLE_AVX(Y1, Y2, Y3) - CHACHA_SHUFFLE_AVX(Y5, Y6, Y7) - CHACHA_SHUFFLE_AVX(Y9, Y10, Y11) - CHACHA_SHUFFLE_AVX(Y13, Y14, Y15) - - CHACHA_QROUND_AVX(Y12, Y13, Y14, Y15, Y0, C16, C8) - CHACHA_QROUND_AVX(Y8, Y9, Y10, Y11, Y0, C16, C8) - VMOVDQA TMP_0, Y0 - VMOVDQA Y8, TMP_0 - CHACHA_QROUND_AVX(Y4, Y5, Y6, Y7, Y8, C16, C8) - CHACHA_QROUND_AVX(Y0, Y1, Y2, Y3, Y8, C16, C8) - VMOVDQA TMP_0, Y8 - CHACHA_SHUFFLE_AVX(Y3, Y2, Y1) - CHACHA_SHUFFLE_AVX(Y7, Y6, Y5) - CHACHA_SHUFFLE_AVX(Y11, Y10, Y9) - CHACHA_SHUFFLE_AVX(Y15, Y14, Y13) - SUBQ $2, R9 - JA chacha_loop_512 - - VMOVDQA Y12, TMP_0 - VMOVDQA Y13, TMP_1 - VPADDD STATE_0, Y0, Y0 - VPADDD STATE_1, Y1, Y1 - VPADDD STATE_2, Y2, Y2 - VPADDD STATE_3, Y3, Y3 - XOR_AVX2(DI, SI, 0, Y0, Y1, Y2, Y3, Y12, Y13) - VMOVDQA STATE_0, Y0 - VMOVDQA STATE_1, Y1 - VMOVDQA STATE_2, Y2 - VMOVDQA STATE_3, Y3 - VPADDQ TWO, Y3, Y3 - - VPADDD Y0, Y4, Y4 - VPADDD Y1, Y5, Y5 - VPADDD Y2, Y6, Y6 - VPADDD Y3, Y7, Y7 - XOR_AVX2(DI, SI, 128, Y4, Y5, Y6, Y7, Y12, Y13) - VPADDQ TWO, Y3, Y3 - - VPADDD Y0, Y8, Y8 - VPADDD Y1, Y9, Y9 - VPADDD Y2, Y10, Y10 - VPADDD Y3, Y11, Y11 - XOR_AVX2(DI, SI, 256, Y8, Y9, Y10, Y11, Y12, Y13) - VPADDQ TWO, Y3, Y3 - - VPADDD TMP_0, Y0, Y12 - VPADDD TMP_1, Y1, Y13 - VPADDD Y2, Y14, Y14 - VPADDD Y3, Y15, Y15 - VPADDQ TWO, Y3, Y3 - - CMPQ CX, $512 - JB less_than_512 - - XOR_AVX2(DI, SI, 384, Y12, Y13, Y14, Y15, Y4, Y5) - VMOVDQA Y3, STATE_3 - ADDQ $512, SI - ADDQ $512, DI - SUBQ $512, CX - CMPQ CX, $448 - JA at_least_512 - - TESTQ CX, CX - JZ done - - VMOVDQA C16, Y14 - VMOVDQA C8, Y15 - - CMPQ CX, $64 - JBE between_0_and_64 - CMPQ CX, $192 - JBE between_64_and_192 - CMPQ CX, $320 - JBE between_192_and_320 - JMP between_320_and_448 - -less_than_512: - XOR_UPPER_AVX2(DI, SI, 384, Y12, Y13, Y14, Y15, Y4, Y5) - EXTRACT_LOWER(BX, Y12, Y13, Y14, Y15, Y4) - ADDQ $448, SI - ADDQ $448, DI - SUBQ $448, CX - JMP finalize - -between_320_and_448: - VMOVDQA Y0, Y4 - VMOVDQA Y1, Y5 - VMOVDQA Y2, Y6 - VPADDQ TWO, Y3, Y7 - VMOVDQA Y0, Y8 - VMOVDQA Y1, Y9 - VMOVDQA Y2, Y10 - VPADDQ TWO, Y7, Y11 - - MOVQ DX, R9 - -chacha_loop_384: - CHACHA_QROUND_AVX(Y0, Y1, Y2, Y3, Y13, Y14, Y15) - CHACHA_QROUND_AVX(Y4, Y5, Y6, Y7, Y13, Y14, Y15) - CHACHA_QROUND_AVX(Y8, Y9, Y10, Y11, Y13, Y14, Y15) - CHACHA_SHUFFLE_AVX(Y1, Y2, Y3) - CHACHA_SHUFFLE_AVX(Y5, Y6, Y7) - CHACHA_SHUFFLE_AVX(Y9, Y10, Y11) - CHACHA_QROUND_AVX(Y0, Y1, Y2, Y3, Y13, Y14, Y15) - CHACHA_QROUND_AVX(Y4, Y5, Y6, Y7, Y13, Y14, Y15) - CHACHA_QROUND_AVX(Y8, Y9, Y10, Y11, Y13, Y14, Y15) - CHACHA_SHUFFLE_AVX(Y3, Y2, Y1) - CHACHA_SHUFFLE_AVX(Y7, Y6, Y5) - CHACHA_SHUFFLE_AVX(Y11, Y10, Y9) - SUBQ $2, R9 - JA chacha_loop_384 - - VPADDD STATE_0, Y0, Y0 - VPADDD STATE_1, Y1, Y1 - VPADDD STATE_2, Y2, Y2 - VPADDD STATE_3, Y3, Y3 - XOR_AVX2(DI, SI, 0, Y0, Y1, Y2, Y3, Y12, Y13) - VMOVDQA STATE_0, Y0 - VMOVDQA STATE_1, Y1 - VMOVDQA STATE_2, Y2 - VMOVDQA STATE_3, Y3 - VPADDQ TWO, Y3, Y3 - - VPADDD Y0, Y4, Y4 - VPADDD Y1, Y5, Y5 - VPADDD Y2, Y6, Y6 - VPADDD Y3, Y7, Y7 - XOR_AVX2(DI, SI, 128, Y4, Y5, Y6, Y7, Y12, Y13) - VPADDQ TWO, Y3, Y3 - - VPADDD Y0, Y8, Y8 - VPADDD Y1, Y9, Y9 - VPADDD Y2, Y10, Y10 - VPADDD Y3, Y11, Y11 - VPADDQ TWO, Y3, Y3 - - CMPQ CX, $384 - JB less_than_384 - - XOR_AVX2(DI, SI, 256, Y8, Y9, Y10, Y11, Y12, Y13) - SUBQ $384, CX - TESTQ CX, CX - JE done - - ADDQ $384, SI - ADDQ $384, DI - JMP between_0_and_64 - -less_than_384: - XOR_UPPER_AVX2(DI, SI, 256, Y8, Y9, Y10, Y11, Y12, Y13) - EXTRACT_LOWER(BX, Y8, Y9, Y10, Y11, Y12) - ADDQ $320, SI - ADDQ $320, DI - SUBQ $320, CX - JMP finalize - -between_192_and_320: - VMOVDQA Y0, Y4 - VMOVDQA Y1, Y5 - VMOVDQA Y2, Y6 - VMOVDQA Y3, Y7 - VMOVDQA Y0, Y8 - VMOVDQA Y1, Y9 - VMOVDQA Y2, Y10 - VPADDQ TWO, Y3, Y11 - - MOVQ DX, R9 - -chacha_loop_256: - CHACHA_QROUND_AVX(Y4, Y5, Y6, Y7, Y13, Y14, Y15) - CHACHA_QROUND_AVX(Y8, Y9, Y10, Y11, Y13, Y14, Y15) - CHACHA_SHUFFLE_AVX(Y5, Y6, Y7) - CHACHA_SHUFFLE_AVX(Y9, Y10, Y11) - CHACHA_QROUND_AVX(Y4, Y5, Y6, Y7, Y13, Y14, Y15) - CHACHA_QROUND_AVX(Y8, Y9, Y10, Y11, Y13, Y14, Y15) - CHACHA_SHUFFLE_AVX(Y7, Y6, Y5) - CHACHA_SHUFFLE_AVX(Y11, Y10, Y9) - SUBQ $2, R9 - JA chacha_loop_256 - - VPADDD Y0, Y4, Y4 - VPADDD Y1, Y5, Y5 - VPADDD Y2, Y6, Y6 - VPADDD Y3, Y7, Y7 - VPADDQ TWO, Y3, Y3 - XOR_AVX2(DI, SI, 0, Y4, Y5, Y6, Y7, Y12, Y13) - VPADDD Y0, Y8, Y8 - VPADDD Y1, Y9, Y9 - VPADDD Y2, Y10, Y10 - VPADDD Y3, Y11, Y11 - VPADDQ TWO, Y3, Y3 - - CMPQ CX, $256 - JB less_than_256 - - XOR_AVX2(DI, SI, 128, Y8, Y9, Y10, Y11, Y12, Y13) - SUBQ $256, CX - TESTQ CX, CX - JE done - - ADDQ $256, SI - ADDQ $256, DI - JMP between_0_and_64 - -less_than_256: - XOR_UPPER_AVX2(DI, SI, 128, Y8, Y9, Y10, Y11, Y12, Y13) - EXTRACT_LOWER(BX, Y8, Y9, Y10, Y11, Y12) - ADDQ $192, SI - ADDQ $192, DI - SUBQ $192, CX - JMP finalize - -between_64_and_192: - VMOVDQA Y0, Y4 - VMOVDQA Y1, Y5 - VMOVDQA Y2, Y6 - VMOVDQA Y3, Y7 - - MOVQ DX, R9 - -chacha_loop_128: - CHACHA_QROUND_AVX(Y4, Y5, Y6, Y7, Y13, Y14, Y15) - CHACHA_SHUFFLE_AVX(Y5, Y6, Y7) - CHACHA_QROUND_AVX(Y4, Y5, Y6, Y7, Y13, Y14, Y15) - CHACHA_SHUFFLE_AVX(Y7, Y6, Y5) - SUBQ $2, R9 - JA chacha_loop_128 - - VPADDD Y0, Y4, Y4 - VPADDD Y1, Y5, Y5 - VPADDD Y2, Y6, Y6 - VPADDD Y3, Y7, Y7 - VPADDQ TWO, Y3, Y3 - - CMPQ CX, $128 - JB less_than_128 - - XOR_AVX2(DI, SI, 0, Y4, Y5, Y6, Y7, Y12, Y13) - SUBQ $128, CX - TESTQ CX, CX - JE done - - ADDQ $128, SI - ADDQ $128, DI - JMP between_0_and_64 - -less_than_128: - XOR_UPPER_AVX2(DI, SI, 0, Y4, Y5, Y6, Y7, Y12, Y13) - EXTRACT_LOWER(BX, Y4, Y5, Y6, Y7, Y13) - ADDQ $64, SI - ADDQ $64, DI - SUBQ $64, CX - JMP finalize - -between_0_and_64: - VMOVDQA X0, X4 - VMOVDQA X1, X5 - VMOVDQA X2, X6 - VMOVDQA X3, X7 - - MOVQ DX, R9 - -chacha_loop_64: - CHACHA_QROUND_AVX(X4, X5, X6, X7, X13, X14, X15) - CHACHA_SHUFFLE_AVX(X5, X6, X7) - CHACHA_QROUND_AVX(X4, X5, X6, X7, X13, X14, X15) - CHACHA_SHUFFLE_AVX(X7, X6, X5) - SUBQ $2, R9 - JA chacha_loop_64 - - VPADDD X0, X4, X4 - VPADDD X1, X5, X5 - VPADDD X2, X6, X6 - VPADDD X3, X7, X7 - VMOVDQU ·one<>(SB), X0 - VPADDQ X0, X3, X3 - - CMPQ CX, $64 - JB less_than_64 - - XOR_AVX(DI, SI, 0, X4, X5, X6, X7, X13) - SUBQ $64, CX - JMP done - -less_than_64: - VMOVDQU X4, 0(BX) - VMOVDQU X5, 16(BX) - VMOVDQU X6, 32(BX) - VMOVDQU X7, 48(BX) - -finalize: - XORQ R11, R11 - XORQ R12, R12 - MOVQ CX, BP - -xor_loop: - MOVB 0(SI), R11 - MOVB 0(BX), R12 - XORQ R11, R12 - MOVB R12, 0(DI) - INCQ SI - INCQ BX - INCQ DI - DECQ BP - JA xor_loop - -done: - VMOVDQU X3, 48(AX) - VZEROUPPER - MOVQ R8, SP - MOVQ CX, ret+72(FP) - RET - diff --git a/vendor/github.com/aead/chacha20/chacha/chacha_386.go b/vendor/github.com/aead/chacha20/chacha/chacha_386.go deleted file mode 100644 index 97e533d..0000000 --- a/vendor/github.com/aead/chacha20/chacha/chacha_386.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) 2016 Andreas Auernhammer. All rights reserved. -// Use of this source code is governed by a license that can be -// found in the LICENSE file. - -// +build 386,!gccgo,!appengine,!nacl - -package chacha - -import ( - "encoding/binary" - - "golang.org/x/sys/cpu" -) - -func init() { - useSSE2 = cpu.X86.HasSSE2 - useSSSE3 = cpu.X86.HasSSSE3 - useAVX = false - useAVX2 = false -} - -func initialize(state *[64]byte, key []byte, nonce *[16]byte) { - binary.LittleEndian.PutUint32(state[0:], sigma[0]) - binary.LittleEndian.PutUint32(state[4:], sigma[1]) - binary.LittleEndian.PutUint32(state[8:], sigma[2]) - binary.LittleEndian.PutUint32(state[12:], sigma[3]) - copy(state[16:], key[:]) - copy(state[48:], nonce[:]) -} - -// This function is implemented in chacha_386.s -//go:noescape -func hChaCha20SSE2(out *[32]byte, nonce *[16]byte, key *[32]byte) - -// This function is implemented in chacha_386.s -//go:noescape -func hChaCha20SSSE3(out *[32]byte, nonce *[16]byte, key *[32]byte) - -// This function is implemented in chacha_386.s -//go:noescape -func xorKeyStreamSSE2(dst, src []byte, block, state *[64]byte, rounds int) int - -func hChaCha20(out *[32]byte, nonce *[16]byte, key *[32]byte) { - switch { - case useSSSE3: - hChaCha20SSSE3(out, nonce, key) - case useSSE2: - hChaCha20SSE2(out, nonce, key) - default: - hChaCha20Generic(out, nonce, key) - } -} - -func xorKeyStream(dst, src []byte, block, state *[64]byte, rounds int) int { - if useSSE2 { - return xorKeyStreamSSE2(dst, src, block, state, rounds) - } else { - return xorKeyStreamGeneric(dst, src, block, state, rounds) - } -} diff --git a/vendor/github.com/aead/chacha20/chacha/chacha_386.s b/vendor/github.com/aead/chacha20/chacha/chacha_386.s deleted file mode 100644 index 262fc86..0000000 --- a/vendor/github.com/aead/chacha20/chacha/chacha_386.s +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright (c) 2016 Andreas Auernhammer. All rights reserved. -// Use of this source code is governed by a license that can be -// found in the LICENSE file. - -// +build 386,!gccgo,!appengine,!nacl - -#include "const.s" -#include "macro.s" - -// FINALIZE xors len bytes from src and block using -// the temp. registers t0 and t1 and writes the result -// to dst. -#define FINALIZE(dst, src, block, len, t0, t1) \ - XORL t0, t0; \ - XORL t1, t1; \ - FINALIZE_LOOP:; \ - MOVB 0(src), t0; \ - MOVB 0(block), t1; \ - XORL t0, t1; \ - MOVB t1, 0(dst); \ - INCL src; \ - INCL block; \ - INCL dst; \ - DECL len; \ - JG FINALIZE_LOOP \ - -#define Dst DI -#define Nonce AX -#define Key BX -#define Rounds DX - -// func hChaCha20SSE2(out *[32]byte, nonce *[16]byte, key *[32]byte) -TEXT ·hChaCha20SSE2(SB), 4, $0-12 - MOVL out+0(FP), Dst - MOVL nonce+4(FP), Nonce - MOVL key+8(FP), Key - - MOVOU ·sigma<>(SB), X0 - MOVOU 0*16(Key), X1 - MOVOU 1*16(Key), X2 - MOVOU 0*16(Nonce), X3 - MOVL $20, Rounds - -chacha_loop: - CHACHA_QROUND_SSE2(X0, X1, X2, X3, X4) - CHACHA_SHUFFLE_SSE(X1, X2, X3) - CHACHA_QROUND_SSE2(X0, X1, X2, X3, X4) - CHACHA_SHUFFLE_SSE(X3, X2, X1) - SUBL $2, Rounds - JNZ chacha_loop - - MOVOU X0, 0*16(Dst) - MOVOU X3, 1*16(Dst) - RET - -// func hChaCha20SSSE3(out *[32]byte, nonce *[16]byte, key *[32]byte) -TEXT ·hChaCha20SSSE3(SB), 4, $0-12 - MOVL out+0(FP), Dst - MOVL nonce+4(FP), Nonce - MOVL key+8(FP), Key - - MOVOU ·sigma<>(SB), X0 - MOVOU 0*16(Key), X1 - MOVOU 1*16(Key), X2 - MOVOU 0*16(Nonce), X3 - MOVL $20, Rounds - - MOVOU ·rol16<>(SB), X5 - MOVOU ·rol8<>(SB), X6 - -chacha_loop: - CHACHA_QROUND_SSSE3(X0, X1, X2, X3, X4, X5, X6) - CHACHA_SHUFFLE_SSE(X1, X2, X3) - CHACHA_QROUND_SSSE3(X0, X1, X2, X3, X4, X5, X6) - CHACHA_SHUFFLE_SSE(X3, X2, X1) - SUBL $2, Rounds - JNZ chacha_loop - - MOVOU X0, 0*16(Dst) - MOVOU X3, 1*16(Dst) - RET - -#undef Dst -#undef Nonce -#undef Key -#undef Rounds - -#define State AX -#define Dst DI -#define Src SI -#define Len DX -#define Tmp0 BX -#define Tmp1 BP - -// func xorKeyStreamSSE2(dst, src []byte, block, state *[64]byte, rounds int) int -TEXT ·xorKeyStreamSSE2(SB), 4, $0-40 - MOVL dst_base+0(FP), Dst - MOVL src_base+12(FP), Src - MOVL state+28(FP), State - MOVL src_len+16(FP), Len - MOVL $0, ret+36(FP) // Number of bytes written to the keystream buffer - 0 iff len mod 64 == 0 - - MOVOU 0*16(State), X0 - MOVOU 1*16(State), X1 - MOVOU 2*16(State), X2 - MOVOU 3*16(State), X3 - TESTL Len, Len - JZ DONE - -GENERATE_KEYSTREAM: - MOVO X0, X4 - MOVO X1, X5 - MOVO X2, X6 - MOVO X3, X7 - MOVL rounds+32(FP), Tmp0 - -CHACHA_LOOP: - CHACHA_QROUND_SSE2(X4, X5, X6, X7, X0) - CHACHA_SHUFFLE_SSE(X5, X6, X7) - CHACHA_QROUND_SSE2(X4, X5, X6, X7, X0) - CHACHA_SHUFFLE_SSE(X7, X6, X5) - SUBL $2, Tmp0 - JA CHACHA_LOOP - - MOVOU 0*16(State), X0 // Restore X0 from state - PADDL X0, X4 - PADDL X1, X5 - PADDL X2, X6 - PADDL X3, X7 - MOVOU ·one<>(SB), X0 - PADDQ X0, X3 - - CMPL Len, $64 - JL BUFFER_KEYSTREAM - - XOR_SSE(Dst, Src, 0, X4, X5, X6, X7, X0) - MOVOU 0*16(State), X0 // Restore X0 from state - ADDL $64, Src - ADDL $64, Dst - SUBL $64, Len - JZ DONE - JMP GENERATE_KEYSTREAM // There is at least one more plaintext byte - -BUFFER_KEYSTREAM: - MOVL block+24(FP), State - MOVOU X4, 0(State) - MOVOU X5, 16(State) - MOVOU X6, 32(State) - MOVOU X7, 48(State) - MOVL Len, ret+36(FP) // Number of bytes written to the keystream buffer - 0 < Len < 64 - FINALIZE(Dst, Src, State, Len, Tmp0, Tmp1) - -DONE: - MOVL state+28(FP), State - MOVOU X3, 3*16(State) - RET - -#undef State -#undef Dst -#undef Src -#undef Len -#undef Tmp0 -#undef Tmp1 diff --git a/vendor/github.com/aead/chacha20/chacha/chacha_amd64.go b/vendor/github.com/aead/chacha20/chacha/chacha_amd64.go deleted file mode 100644 index 635f7de..0000000 --- a/vendor/github.com/aead/chacha20/chacha/chacha_amd64.go +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (c) 2017 Andreas Auernhammer. All rights reserved. -// Use of this source code is governed by a license that can be -// found in the LICENSE file. - -// +build go1.7,amd64,!gccgo,!appengine,!nacl - -package chacha - -import "golang.org/x/sys/cpu" - -func init() { - useSSE2 = cpu.X86.HasSSE2 - useSSSE3 = cpu.X86.HasSSSE3 - useAVX = cpu.X86.HasAVX - useAVX2 = cpu.X86.HasAVX2 -} - -// This function is implemented in chacha_amd64.s -//go:noescape -func initialize(state *[64]byte, key []byte, nonce *[16]byte) - -// This function is implemented in chacha_amd64.s -//go:noescape -func hChaCha20SSE2(out *[32]byte, nonce *[16]byte, key *[32]byte) - -// This function is implemented in chacha_amd64.s -//go:noescape -func hChaCha20SSSE3(out *[32]byte, nonce *[16]byte, key *[32]byte) - -// This function is implemented in chachaAVX2_amd64.s -//go:noescape -func hChaCha20AVX(out *[32]byte, nonce *[16]byte, key *[32]byte) - -// This function is implemented in chacha_amd64.s -//go:noescape -func xorKeyStreamSSE2(dst, src []byte, block, state *[64]byte, rounds int) int - -// This function is implemented in chacha_amd64.s -//go:noescape -func xorKeyStreamSSSE3(dst, src []byte, block, state *[64]byte, rounds int) int - -// This function is implemented in chacha_amd64.s -//go:noescape -func xorKeyStreamAVX(dst, src []byte, block, state *[64]byte, rounds int) int - -// This function is implemented in chachaAVX2_amd64.s -//go:noescape -func xorKeyStreamAVX2(dst, src []byte, block, state *[64]byte, rounds int) int - -func hChaCha20(out *[32]byte, nonce *[16]byte, key *[32]byte) { - switch { - case useAVX: - hChaCha20AVX(out, nonce, key) - case useSSSE3: - hChaCha20SSSE3(out, nonce, key) - case useSSE2: - hChaCha20SSE2(out, nonce, key) - default: - hChaCha20Generic(out, nonce, key) - } -} - -func xorKeyStream(dst, src []byte, block, state *[64]byte, rounds int) int { - switch { - case useAVX2: - return xorKeyStreamAVX2(dst, src, block, state, rounds) - case useAVX: - return xorKeyStreamAVX(dst, src, block, state, rounds) - case useSSSE3: - return xorKeyStreamSSSE3(dst, src, block, state, rounds) - case useSSE2: - return xorKeyStreamSSE2(dst, src, block, state, rounds) - default: - return xorKeyStreamGeneric(dst, src, block, state, rounds) - } -} diff --git a/vendor/github.com/aead/chacha20/chacha/chacha_amd64.s b/vendor/github.com/aead/chacha20/chacha/chacha_amd64.s deleted file mode 100644 index 26a2383..0000000 --- a/vendor/github.com/aead/chacha20/chacha/chacha_amd64.s +++ /dev/null @@ -1,1072 +0,0 @@ -// Copyright (c) 2016 Andreas Auernhammer. All rights reserved. -// Use of this source code is governed by a license that can be -// found in the LICENSE file. - -// +build amd64,!gccgo,!appengine,!nacl - -#include "const.s" -#include "macro.s" - -// FINALIZE xors len bytes from src and block using -// the temp. registers t0 and t1 and writes the result -// to dst. -#define FINALIZE(dst, src, block, len, t0, t1) \ - XORQ t0, t0; \ - XORQ t1, t1; \ - FINALIZE_LOOP:; \ - MOVB 0(src), t0; \ - MOVB 0(block), t1; \ - XORQ t0, t1; \ - MOVB t1, 0(dst); \ - INCQ src; \ - INCQ block; \ - INCQ dst; \ - DECQ len; \ - JG FINALIZE_LOOP \ - -#define Dst DI -#define Nonce AX -#define Key BX -#define Rounds DX - -// func initialize(state *[64]byte, key []byte, nonce *[16]byte) -TEXT ·initialize(SB), 4, $0-40 - MOVQ state+0(FP), Dst - MOVQ key+8(FP), Key - MOVQ nonce+32(FP), Nonce - - MOVOU ·sigma<>(SB), X0 - MOVOU 0*16(Key), X1 - MOVOU 1*16(Key), X2 - MOVOU 0*16(Nonce), X3 - - MOVOU X0, 0*16(Dst) - MOVOU X1, 1*16(Dst) - MOVOU X2, 2*16(Dst) - MOVOU X3, 3*16(Dst) - RET - -// func hChaCha20AVX(out *[32]byte, nonce *[16]byte, key *[32]byte) -TEXT ·hChaCha20AVX(SB), 4, $0-24 - MOVQ out+0(FP), Dst - MOVQ nonce+8(FP), Nonce - MOVQ key+16(FP), Key - - VMOVDQU ·sigma<>(SB), X0 - VMOVDQU 0*16(Key), X1 - VMOVDQU 1*16(Key), X2 - VMOVDQU 0*16(Nonce), X3 - VMOVDQU ·rol16_AVX2<>(SB), X5 - VMOVDQU ·rol8_AVX2<>(SB), X6 - MOVQ $20, Rounds - -CHACHA_LOOP: - CHACHA_QROUND_AVX(X0, X1, X2, X3, X4, X5, X6) - CHACHA_SHUFFLE_AVX(X1, X2, X3) - CHACHA_QROUND_AVX(X0, X1, X2, X3, X4, X5, X6) - CHACHA_SHUFFLE_AVX(X3, X2, X1) - SUBQ $2, Rounds - JNZ CHACHA_LOOP - - VMOVDQU X0, 0*16(Dst) - VMOVDQU X3, 1*16(Dst) - VZEROUPPER - RET - -// func hChaCha20SSE2(out *[32]byte, nonce *[16]byte, key *[32]byte) -TEXT ·hChaCha20SSE2(SB), 4, $0-24 - MOVQ out+0(FP), Dst - MOVQ nonce+8(FP), Nonce - MOVQ key+16(FP), Key - - MOVOU ·sigma<>(SB), X0 - MOVOU 0*16(Key), X1 - MOVOU 1*16(Key), X2 - MOVOU 0*16(Nonce), X3 - MOVQ $20, Rounds - -CHACHA_LOOP: - CHACHA_QROUND_SSE2(X0, X1, X2, X3, X4) - CHACHA_SHUFFLE_SSE(X1, X2, X3) - CHACHA_QROUND_SSE2(X0, X1, X2, X3, X4) - CHACHA_SHUFFLE_SSE(X3, X2, X1) - SUBQ $2, Rounds - JNZ CHACHA_LOOP - - MOVOU X0, 0*16(Dst) - MOVOU X3, 1*16(Dst) - RET - -// func hChaCha20SSSE3(out *[32]byte, nonce *[16]byte, key *[32]byte) -TEXT ·hChaCha20SSSE3(SB), 4, $0-24 - MOVQ out+0(FP), Dst - MOVQ nonce+8(FP), Nonce - MOVQ key+16(FP), Key - - MOVOU ·sigma<>(SB), X0 - MOVOU 0*16(Key), X1 - MOVOU 1*16(Key), X2 - MOVOU 0*16(Nonce), X3 - MOVOU ·rol16<>(SB), X5 - MOVOU ·rol8<>(SB), X6 - MOVQ $20, Rounds - -chacha_loop: - CHACHA_QROUND_SSSE3(X0, X1, X2, X3, X4, X5, X6) - CHACHA_SHUFFLE_SSE(X1, X2, X3) - CHACHA_QROUND_SSSE3(X0, X1, X2, X3, X4, X5, X6) - CHACHA_SHUFFLE_SSE(X3, X2, X1) - SUBQ $2, Rounds - JNZ chacha_loop - - MOVOU X0, 0*16(Dst) - MOVOU X3, 1*16(Dst) - RET - -#undef Dst -#undef Nonce -#undef Key -#undef Rounds - -#define Dst DI -#define Src SI -#define Len R12 -#define Rounds DX -#define Buffer BX -#define State AX -#define Stack SP -#define SavedSP R8 -#define Tmp0 R9 -#define Tmp1 R10 -#define Tmp2 R11 - -// func xorKeyStreamSSE2(dst, src []byte, block, state *[64]byte, rounds int) int -TEXT ·xorKeyStreamSSE2(SB), 4, $112-80 - MOVQ dst_base+0(FP), Dst - MOVQ src_base+24(FP), Src - MOVQ block+48(FP), Buffer - MOVQ state+56(FP), State - MOVQ rounds+64(FP), Rounds - MOVQ src_len+32(FP), Len - - MOVOU 0*16(State), X0 - MOVOU 1*16(State), X1 - MOVOU 2*16(State), X2 - MOVOU 3*16(State), X3 - - MOVQ Stack, SavedSP - ADDQ $16, Stack - ANDQ $-16, Stack - - TESTQ Len, Len - JZ DONE - - MOVOU ·one<>(SB), X4 - MOVO X0, 0*16(Stack) - MOVO X1, 1*16(Stack) - MOVO X2, 2*16(Stack) - MOVO X3, 3*16(Stack) - MOVO X4, 4*16(Stack) - - CMPQ Len, $64 - JLE GENERATE_KEYSTREAM_64 - CMPQ Len, $128 - JLE GENERATE_KEYSTREAM_128 - CMPQ Len, $192 - JLE GENERATE_KEYSTREAM_192 - -GENERATE_KEYSTREAM_256: - MOVO X0, X12 - MOVO X1, X13 - MOVO X2, X14 - MOVO X3, X15 - PADDQ 4*16(Stack), X15 - MOVO X0, X8 - MOVO X1, X9 - MOVO X2, X10 - MOVO X15, X11 - PADDQ 4*16(Stack), X11 - MOVO X0, X4 - MOVO X1, X5 - MOVO X2, X6 - MOVO X11, X7 - PADDQ 4*16(Stack), X7 - MOVQ Rounds, Tmp0 - - MOVO X3, 3*16(Stack) // Save X3 - -CHACHA_LOOP_256: - MOVO X4, 5*16(Stack) - CHACHA_QROUND_SSE2(X0, X1, X2, X3, X4) - CHACHA_QROUND_SSE2(X12, X13, X14, X15, X4) - MOVO 5*16(Stack), X4 - MOVO X0, 5*16(Stack) - CHACHA_QROUND_SSE2(X8, X9, X10, X11, X0) - CHACHA_QROUND_SSE2(X4, X5, X6, X7, X0) - MOVO 5*16(Stack), X0 - CHACHA_SHUFFLE_SSE(X1, X2, X3) - CHACHA_SHUFFLE_SSE(X13, X14, X15) - CHACHA_SHUFFLE_SSE(X9, X10, X11) - CHACHA_SHUFFLE_SSE(X5, X6, X7) - MOVO X4, 5*16(Stack) - CHACHA_QROUND_SSE2(X0, X1, X2, X3, X4) - CHACHA_QROUND_SSE2(X12, X13, X14, X15, X4) - MOVO 5*16(Stack), X4 - MOVO X0, 5*16(Stack) - CHACHA_QROUND_SSE2(X8, X9, X10, X11, X0) - CHACHA_QROUND_SSE2(X4, X5, X6, X7, X0) - MOVO 5*16(Stack), X0 - CHACHA_SHUFFLE_SSE(X3, X2, X1) - CHACHA_SHUFFLE_SSE(X15, X14, X13) - CHACHA_SHUFFLE_SSE(X11, X10, X9) - CHACHA_SHUFFLE_SSE(X7, X6, X5) - SUBQ $2, Tmp0 - JNZ CHACHA_LOOP_256 - - PADDL 0*16(Stack), X0 - PADDL 1*16(Stack), X1 - PADDL 2*16(Stack), X2 - PADDL 3*16(Stack), X3 - MOVO X4, 5*16(Stack) // Save X4 - XOR_SSE(Dst, Src, 0, X0, X1, X2, X3, X4) - MOVO 5*16(Stack), X4 // Restore X4 - - MOVO 0*16(Stack), X0 - MOVO 1*16(Stack), X1 - MOVO 2*16(Stack), X2 - MOVO 3*16(Stack), X3 - PADDQ 4*16(Stack), X3 - - PADDL X0, X12 - PADDL X1, X13 - PADDL X2, X14 - PADDL X3, X15 - PADDQ 4*16(Stack), X3 - PADDL X0, X8 - PADDL X1, X9 - PADDL X2, X10 - PADDL X3, X11 - PADDQ 4*16(Stack), X3 - PADDL X0, X4 - PADDL X1, X5 - PADDL X2, X6 - PADDL X3, X7 - PADDQ 4*16(Stack), X3 - - XOR_SSE(Dst, Src, 64, X12, X13, X14, X15, X0) - XOR_SSE(Dst, Src, 128, X8, X9, X10, X11, X0) - MOVO 0*16(Stack), X0 // Restore X0 - ADDQ $192, Dst - ADDQ $192, Src - SUBQ $192, Len - - CMPQ Len, $64 - JL BUFFER_KEYSTREAM - - XOR_SSE(Dst, Src, 0, X4, X5, X6, X7, X8) - ADDQ $64, Dst - ADDQ $64, Src - SUBQ $64, Len - JZ DONE - CMPQ Len, $64 // If Len <= 64 -> gen. only 64 byte keystream. - JLE GENERATE_KEYSTREAM_64 - CMPQ Len, $128 // If 64 < Len <= 128 -> gen. only 128 byte keystream. - JLE GENERATE_KEYSTREAM_128 - CMPQ Len, $192 // If Len > 192 -> repeat, otherwise Len > 128 && Len <= 192 -> gen. 192 byte keystream - JG GENERATE_KEYSTREAM_256 - -GENERATE_KEYSTREAM_192: - MOVO X0, X12 - MOVO X1, X13 - MOVO X2, X14 - MOVO X3, X15 - MOVO X0, X8 - MOVO X1, X9 - MOVO X2, X10 - MOVO X3, X11 - PADDQ 4*16(Stack), X11 - MOVO X0, X4 - MOVO X1, X5 - MOVO X2, X6 - MOVO X11, X7 - PADDQ 4*16(Stack), X7 - MOVQ Rounds, Tmp0 - -CHACHA_LOOP_192: - CHACHA_QROUND_SSE2(X12, X13, X14, X15, X0) - CHACHA_QROUND_SSE2(X8, X9, X10, X11, X0) - CHACHA_QROUND_SSE2(X4, X5, X6, X7, X0) - CHACHA_SHUFFLE_SSE(X13, X14, X15) - CHACHA_SHUFFLE_SSE(X9, X10, X11) - CHACHA_SHUFFLE_SSE(X5, X6, X7) - CHACHA_QROUND_SSE2(X12, X13, X14, X15, X0) - CHACHA_QROUND_SSE2(X8, X9, X10, X11, X0) - CHACHA_QROUND_SSE2(X4, X5, X6, X7, X0) - CHACHA_SHUFFLE_SSE(X15, X14, X13) - CHACHA_SHUFFLE_SSE(X11, X10, X9) - CHACHA_SHUFFLE_SSE(X7, X6, X5) - SUBQ $2, Tmp0 - JNZ CHACHA_LOOP_192 - - MOVO 0*16(Stack), X0 // Restore X0 - PADDL X0, X12 - PADDL X1, X13 - PADDL X2, X14 - PADDL X3, X15 - PADDQ 4*16(Stack), X3 - PADDL X0, X8 - PADDL X1, X9 - PADDL X2, X10 - PADDL X3, X11 - PADDQ 4*16(Stack), X3 - PADDL X0, X4 - PADDL X1, X5 - PADDL X2, X6 - PADDL X3, X7 - PADDQ 4*16(Stack), X3 - - XOR_SSE(Dst, Src, 0, X12, X13, X14, X15, X0) - XOR_SSE(Dst, Src, 64, X8, X9, X10, X11, X0) - MOVO 0*16(Stack), X0 // Restore X0 - ADDQ $128, Dst - ADDQ $128, Src - SUBQ $128, Len - - CMPQ Len, $64 - JL BUFFER_KEYSTREAM - - XOR_SSE(Dst, Src, 0, X4, X5, X6, X7, X8) - ADDQ $64, Dst - ADDQ $64, Src - SUBQ $64, Len - JZ DONE - CMPQ Len, $64 // If Len <= 64 -> gen. only 64 byte keystream. - JLE GENERATE_KEYSTREAM_64 - -GENERATE_KEYSTREAM_128: - MOVO X0, X8 - MOVO X1, X9 - MOVO X2, X10 - MOVO X3, X11 - MOVO X0, X4 - MOVO X1, X5 - MOVO X2, X6 - MOVO X3, X7 - PADDQ 4*16(Stack), X7 - MOVQ Rounds, Tmp0 - -CHACHA_LOOP_128: - CHACHA_QROUND_SSE2(X8, X9, X10, X11, X12) - CHACHA_QROUND_SSE2(X4, X5, X6, X7, X12) - CHACHA_SHUFFLE_SSE(X9, X10, X11) - CHACHA_SHUFFLE_SSE(X5, X6, X7) - CHACHA_QROUND_SSE2(X8, X9, X10, X11, X12) - CHACHA_QROUND_SSE2(X4, X5, X6, X7, X12) - CHACHA_SHUFFLE_SSE(X11, X10, X9) - CHACHA_SHUFFLE_SSE(X7, X6, X5) - SUBQ $2, Tmp0 - JNZ CHACHA_LOOP_128 - - PADDL X0, X8 - PADDL X1, X9 - PADDL X2, X10 - PADDL X3, X11 - PADDQ 4*16(Stack), X3 - PADDL X0, X4 - PADDL X1, X5 - PADDL X2, X6 - PADDL X3, X7 - PADDQ 4*16(Stack), X3 - - XOR_SSE(Dst, Src, 0, X8, X9, X10, X11, X12) - ADDQ $64, Dst - ADDQ $64, Src - SUBQ $64, Len - - CMPQ Len, $64 - JL BUFFER_KEYSTREAM - - XOR_SSE(Dst, Src, 0, X4, X5, X6, X7, X8) - ADDQ $64, Dst - ADDQ $64, Src - SUBQ $64, Len - JZ DONE // If Len == 0 -> DONE, otherwise Len <= 64 -> gen 64 byte keystream - -GENERATE_KEYSTREAM_64: - MOVO X0, X4 - MOVO X1, X5 - MOVO X2, X6 - MOVO X3, X7 - MOVQ Rounds, Tmp0 - -CHACHA_LOOP_64: - CHACHA_QROUND_SSE2(X4, X5, X6, X7, X8) - CHACHA_SHUFFLE_SSE(X5, X6, X7) - CHACHA_QROUND_SSE2(X4, X5, X6, X7, X8) - CHACHA_SHUFFLE_SSE(X7, X6, X5) - SUBQ $2, Tmp0 - JNZ CHACHA_LOOP_64 - - PADDL X0, X4 - PADDL X1, X5 - PADDL X2, X6 - PADDL X3, X7 - PADDQ 4*16(Stack), X3 - - CMPQ Len, $64 - JL BUFFER_KEYSTREAM - - XOR_SSE(Dst, Src, 0, X4, X5, X6, X7, X8) - ADDQ $64, Src - ADDQ $64, Dst - SUBQ $64, Len - JMP DONE // jump directly to DONE - there is no keystream to buffer, Len == 0 always true. - -BUFFER_KEYSTREAM: - MOVOU X4, 0*16(Buffer) - MOVOU X5, 1*16(Buffer) - MOVOU X6, 2*16(Buffer) - MOVOU X7, 3*16(Buffer) - MOVQ Len, Tmp0 - FINALIZE(Dst, Src, Buffer, Tmp0, Tmp1, Tmp2) - -DONE: - MOVQ SavedSP, Stack // Restore stack pointer - MOVOU X3, 3*16(State) - MOVQ Len, ret+72(FP) - RET - -// func xorKeyStreamSSSE3(dst, src []byte, block, state *[64]byte, rounds int) int -TEXT ·xorKeyStreamSSSE3(SB), 4, $144-80 - MOVQ dst_base+0(FP), Dst - MOVQ src_base+24(FP), Src - MOVQ block+48(FP), Buffer - MOVQ state+56(FP), State - MOVQ rounds+64(FP), Rounds - MOVQ src_len+32(FP), Len - - MOVOU 0*16(State), X0 - MOVOU 1*16(State), X1 - MOVOU 2*16(State), X2 - MOVOU 3*16(State), X3 - - MOVQ Stack, SavedSP - ADDQ $16, Stack - ANDQ $-16, Stack - - TESTQ Len, Len - JZ DONE - - MOVOU ·one<>(SB), X4 - MOVOU ·rol16<>(SB), X5 - MOVOU ·rol8<>(SB), X6 - MOVO X0, 0*16(Stack) - MOVO X1, 1*16(Stack) - MOVO X2, 2*16(Stack) - MOVO X3, 3*16(Stack) - MOVO X4, 4*16(Stack) - MOVO X5, 6*16(Stack) - MOVO X6, 7*16(Stack) - - CMPQ Len, $64 - JLE GENERATE_KEYSTREAM_64 - CMPQ Len, $128 - JLE GENERATE_KEYSTREAM_128 - CMPQ Len, $192 - JLE GENERATE_KEYSTREAM_192 - -GENERATE_KEYSTREAM_256: - MOVO X0, X12 - MOVO X1, X13 - MOVO X2, X14 - MOVO X3, X15 - PADDQ 4*16(Stack), X15 - MOVO X0, X8 - MOVO X1, X9 - MOVO X2, X10 - MOVO X15, X11 - PADDQ 4*16(Stack), X11 - MOVO X0, X4 - MOVO X1, X5 - MOVO X2, X6 - MOVO X11, X7 - PADDQ 4*16(Stack), X7 - MOVQ Rounds, Tmp0 - - MOVO X3, 3*16(Stack) // Save X3 - -CHACHA_LOOP_256: - MOVO X4, 5*16(Stack) - CHACHA_QROUND_SSSE3(X0, X1, X2, X3, X4, 6*16(Stack), 7*16(Stack)) - CHACHA_QROUND_SSSE3(X12, X13, X14, X15, X4, 6*16(Stack), 7*16(Stack)) - MOVO 5*16(Stack), X4 - MOVO X0, 5*16(Stack) - CHACHA_QROUND_SSSE3(X8, X9, X10, X11, X0, 6*16(Stack), 7*16(Stack)) - CHACHA_QROUND_SSSE3(X4, X5, X6, X7, X0, 6*16(Stack), 7*16(Stack)) - MOVO 5*16(Stack), X0 - CHACHA_SHUFFLE_SSE(X1, X2, X3) - CHACHA_SHUFFLE_SSE(X13, X14, X15) - CHACHA_SHUFFLE_SSE(X9, X10, X11) - CHACHA_SHUFFLE_SSE(X5, X6, X7) - MOVO X4, 5*16(Stack) - CHACHA_QROUND_SSSE3(X0, X1, X2, X3, X4, 6*16(Stack), 7*16(Stack)) - CHACHA_QROUND_SSSE3(X12, X13, X14, X15, X4, 6*16(Stack), 7*16(Stack)) - MOVO 5*16(Stack), X4 - MOVO X0, 5*16(Stack) - CHACHA_QROUND_SSSE3(X8, X9, X10, X11, X0, 6*16(Stack), 7*16(Stack)) - CHACHA_QROUND_SSSE3(X4, X5, X6, X7, X0, 6*16(Stack), 7*16(Stack)) - MOVO 5*16(Stack), X0 - CHACHA_SHUFFLE_SSE(X3, X2, X1) - CHACHA_SHUFFLE_SSE(X15, X14, X13) - CHACHA_SHUFFLE_SSE(X11, X10, X9) - CHACHA_SHUFFLE_SSE(X7, X6, X5) - SUBQ $2, Tmp0 - JNZ CHACHA_LOOP_256 - - PADDL 0*16(Stack), X0 - PADDL 1*16(Stack), X1 - PADDL 2*16(Stack), X2 - PADDL 3*16(Stack), X3 - MOVO X4, 5*16(Stack) // Save X4 - XOR_SSE(Dst, Src, 0, X0, X1, X2, X3, X4) - MOVO 5*16(Stack), X4 // Restore X4 - - MOVO 0*16(Stack), X0 - MOVO 1*16(Stack), X1 - MOVO 2*16(Stack), X2 - MOVO 3*16(Stack), X3 - PADDQ 4*16(Stack), X3 - - PADDL X0, X12 - PADDL X1, X13 - PADDL X2, X14 - PADDL X3, X15 - PADDQ 4*16(Stack), X3 - PADDL X0, X8 - PADDL X1, X9 - PADDL X2, X10 - PADDL X3, X11 - PADDQ 4*16(Stack), X3 - PADDL X0, X4 - PADDL X1, X5 - PADDL X2, X6 - PADDL X3, X7 - PADDQ 4*16(Stack), X3 - - XOR_SSE(Dst, Src, 64, X12, X13, X14, X15, X0) - XOR_SSE(Dst, Src, 128, X8, X9, X10, X11, X0) - MOVO 0*16(Stack), X0 // Restore X0 - ADDQ $192, Dst - ADDQ $192, Src - SUBQ $192, Len - - CMPQ Len, $64 - JL BUFFER_KEYSTREAM - - XOR_SSE(Dst, Src, 0, X4, X5, X6, X7, X8) - ADDQ $64, Dst - ADDQ $64, Src - SUBQ $64, Len - JZ DONE - CMPQ Len, $64 // If Len <= 64 -> gen. only 64 byte keystream. - JLE GENERATE_KEYSTREAM_64 - CMPQ Len, $128 // If 64 < Len <= 128 -> gen. only 128 byte keystream. - JLE GENERATE_KEYSTREAM_128 - CMPQ Len, $192 // If Len > 192 -> repeat, otherwise Len > 128 && Len <= 192 -> gen. 192 byte keystream - JG GENERATE_KEYSTREAM_256 - -GENERATE_KEYSTREAM_192: - MOVO X0, X12 - MOVO X1, X13 - MOVO X2, X14 - MOVO X3, X15 - MOVO X0, X8 - MOVO X1, X9 - MOVO X2, X10 - MOVO X3, X11 - PADDQ 4*16(Stack), X11 - MOVO X0, X4 - MOVO X1, X5 - MOVO X2, X6 - MOVO X11, X7 - PADDQ 4*16(Stack), X7 - MOVQ Rounds, Tmp0 - - MOVO 6*16(Stack), X1 // Load 16 bit rotate-left constant - MOVO 7*16(Stack), X2 // Load 8 bit rotate-left constant - -CHACHA_LOOP_192: - CHACHA_QROUND_SSSE3(X12, X13, X14, X15, X0, X1, X2) - CHACHA_QROUND_SSSE3(X8, X9, X10, X11, X0, X1, X2) - CHACHA_QROUND_SSSE3(X4, X5, X6, X7, X0, X1, X2) - CHACHA_SHUFFLE_SSE(X13, X14, X15) - CHACHA_SHUFFLE_SSE(X9, X10, X11) - CHACHA_SHUFFLE_SSE(X5, X6, X7) - CHACHA_QROUND_SSSE3(X12, X13, X14, X15, X0, X1, X2) - CHACHA_QROUND_SSSE3(X8, X9, X10, X11, X0, X1, X2) - CHACHA_QROUND_SSSE3(X4, X5, X6, X7, X0, X1, X2) - CHACHA_SHUFFLE_SSE(X15, X14, X13) - CHACHA_SHUFFLE_SSE(X11, X10, X9) - CHACHA_SHUFFLE_SSE(X7, X6, X5) - SUBQ $2, Tmp0 - JNZ CHACHA_LOOP_192 - - MOVO 0*16(Stack), X0 // Restore X0 - MOVO 1*16(Stack), X1 // Restore X1 - MOVO 2*16(Stack), X2 // Restore X2 - PADDL X0, X12 - PADDL X1, X13 - PADDL X2, X14 - PADDL X3, X15 - PADDQ 4*16(Stack), X3 - PADDL X0, X8 - PADDL X1, X9 - PADDL X2, X10 - PADDL X3, X11 - PADDQ 4*16(Stack), X3 - PADDL X0, X4 - PADDL X1, X5 - PADDL X2, X6 - PADDL X3, X7 - PADDQ 4*16(Stack), X3 - - XOR_SSE(Dst, Src, 0, X12, X13, X14, X15, X0) - XOR_SSE(Dst, Src, 64, X8, X9, X10, X11, X0) - MOVO 0*16(Stack), X0 // Restore X0 - ADDQ $128, Dst - ADDQ $128, Src - SUBQ $128, Len - - CMPQ Len, $64 - JL BUFFER_KEYSTREAM - - XOR_SSE(Dst, Src, 0, X4, X5, X6, X7, X8) - ADDQ $64, Dst - ADDQ $64, Src - SUBQ $64, Len - JZ DONE - CMPQ Len, $64 // If Len <= 64 -> gen. only 64 byte keystream. - JLE GENERATE_KEYSTREAM_64 - -GENERATE_KEYSTREAM_128: - MOVO X0, X8 - MOVO X1, X9 - MOVO X2, X10 - MOVO X3, X11 - MOVO X0, X4 - MOVO X1, X5 - MOVO X2, X6 - MOVO X3, X7 - PADDQ 4*16(Stack), X7 - MOVQ Rounds, Tmp0 - - MOVO 6*16(Stack), X13 // Load 16 bit rotate-left constant - MOVO 7*16(Stack), X14 // Load 8 bit rotate-left constant - -CHACHA_LOOP_128: - CHACHA_QROUND_SSSE3(X8, X9, X10, X11, X12, X13, X14) - CHACHA_QROUND_SSSE3(X4, X5, X6, X7, X12, X13, X14) - CHACHA_SHUFFLE_SSE(X9, X10, X11) - CHACHA_SHUFFLE_SSE(X5, X6, X7) - CHACHA_QROUND_SSSE3(X8, X9, X10, X11, X12, X13, X14) - CHACHA_QROUND_SSSE3(X4, X5, X6, X7, X12, X13, X14) - CHACHA_SHUFFLE_SSE(X11, X10, X9) - CHACHA_SHUFFLE_SSE(X7, X6, X5) - SUBQ $2, Tmp0 - JNZ CHACHA_LOOP_128 - - PADDL X0, X8 - PADDL X1, X9 - PADDL X2, X10 - PADDL X3, X11 - PADDQ 4*16(Stack), X3 - PADDL X0, X4 - PADDL X1, X5 - PADDL X2, X6 - PADDL X3, X7 - PADDQ 4*16(Stack), X3 - - XOR_SSE(Dst, Src, 0, X8, X9, X10, X11, X12) - ADDQ $64, Dst - ADDQ $64, Src - SUBQ $64, Len - - CMPQ Len, $64 - JL BUFFER_KEYSTREAM - - XOR_SSE(Dst, Src, 0, X4, X5, X6, X7, X8) - ADDQ $64, Dst - ADDQ $64, Src - SUBQ $64, Len - JZ DONE // If Len == 0 -> DONE, otherwise Len <= 64 -> gen 64 byte keystream - -GENERATE_KEYSTREAM_64: - MOVO X0, X4 - MOVO X1, X5 - MOVO X2, X6 - MOVO X3, X7 - MOVQ Rounds, Tmp0 - - MOVO 6*16(Stack), X9 // Load 16 bit rotate-left constant - MOVO 7*16(Stack), X10 // Load 8 bit rotate-left constant - -CHACHA_LOOP_64: - CHACHA_QROUND_SSSE3(X4, X5, X6, X7, X8, X9, X10) - CHACHA_SHUFFLE_SSE(X5, X6, X7) - CHACHA_QROUND_SSSE3(X4, X5, X6, X7, X8, X9, X10) - CHACHA_SHUFFLE_SSE(X7, X6, X5) - SUBQ $2, Tmp0 - JNZ CHACHA_LOOP_64 - - PADDL X0, X4 - PADDL X1, X5 - PADDL X2, X6 - PADDL X3, X7 - PADDQ 4*16(Stack), X3 - - CMPQ Len, $64 - JL BUFFER_KEYSTREAM - - XOR_SSE(Dst, Src, 0, X4, X5, X6, X7, X8) - ADDQ $64, Src - ADDQ $64, Dst - SUBQ $64, Len - JMP DONE // jump directly to DONE - there is no keystream to buffer, Len == 0 always true. - -BUFFER_KEYSTREAM: - MOVOU X4, 0*16(Buffer) - MOVOU X5, 1*16(Buffer) - MOVOU X6, 2*16(Buffer) - MOVOU X7, 3*16(Buffer) - MOVQ Len, Tmp0 - FINALIZE(Dst, Src, Buffer, Tmp0, Tmp1, Tmp2) - -DONE: - MOVQ SavedSP, Stack // Restore stack pointer - MOVOU X3, 3*16(State) - MOVQ Len, ret+72(FP) - RET - -// func xorKeyStreamAVX(dst, src []byte, block, state *[64]byte, rounds int) int -TEXT ·xorKeyStreamAVX(SB), 4, $144-80 - MOVQ dst_base+0(FP), Dst - MOVQ src_base+24(FP), Src - MOVQ block+48(FP), Buffer - MOVQ state+56(FP), State - MOVQ rounds+64(FP), Rounds - MOVQ src_len+32(FP), Len - - VMOVDQU 0*16(State), X0 - VMOVDQU 1*16(State), X1 - VMOVDQU 2*16(State), X2 - VMOVDQU 3*16(State), X3 - - MOVQ Stack, SavedSP - ADDQ $16, Stack - ANDQ $-16, Stack - - TESTQ Len, Len - JZ DONE - - VMOVDQU ·one<>(SB), X4 - VMOVDQU ·rol16<>(SB), X5 - VMOVDQU ·rol8<>(SB), X6 - VMOVDQA X0, 0*16(Stack) - VMOVDQA X1, 1*16(Stack) - VMOVDQA X2, 2*16(Stack) - VMOVDQA X3, 3*16(Stack) - VMOVDQA X4, 4*16(Stack) - VMOVDQA X5, 6*16(Stack) - VMOVDQA X6, 7*16(Stack) - - CMPQ Len, $64 - JLE GENERATE_KEYSTREAM_64 - CMPQ Len, $128 - JLE GENERATE_KEYSTREAM_128 - CMPQ Len, $192 - JLE GENERATE_KEYSTREAM_192 - -GENERATE_KEYSTREAM_256: - VMOVDQA X0, X12 - VMOVDQA X1, X13 - VMOVDQA X2, X14 - VMOVDQA X3, X15 - VPADDQ 4*16(Stack), X15, X15 - VMOVDQA X0, X8 - VMOVDQA X1, X9 - VMOVDQA X2, X10 - VMOVDQA X15, X11 - VPADDQ 4*16(Stack), X11, X11 - VMOVDQA X0, X4 - VMOVDQA X1, X5 - VMOVDQA X2, X6 - VMOVDQA X11, X7 - VPADDQ 4*16(Stack), X7, X7 - MOVQ Rounds, Tmp0 - - VMOVDQA X3, 3*16(Stack) // Save X3 - -CHACHA_LOOP_256: - VMOVDQA X4, 5*16(Stack) - CHACHA_QROUND_AVX(X0, X1, X2, X3, X4, 6*16(Stack), 7*16(Stack)) - CHACHA_QROUND_AVX(X12, X13, X14, X15, X4, 6*16(Stack), 7*16(Stack)) - VMOVDQA 5*16(Stack), X4 - VMOVDQA X0, 5*16(Stack) - CHACHA_QROUND_AVX(X8, X9, X10, X11, X0, 6*16(Stack), 7*16(Stack)) - CHACHA_QROUND_AVX(X4, X5, X6, X7, X0, 6*16(Stack), 7*16(Stack)) - VMOVDQA 5*16(Stack), X0 - CHACHA_SHUFFLE_AVX(X1, X2, X3) - CHACHA_SHUFFLE_AVX(X13, X14, X15) - CHACHA_SHUFFLE_AVX(X9, X10, X11) - CHACHA_SHUFFLE_AVX(X5, X6, X7) - VMOVDQA X4, 5*16(Stack) - CHACHA_QROUND_AVX(X0, X1, X2, X3, X4, 6*16(Stack), 7*16(Stack)) - CHACHA_QROUND_AVX(X12, X13, X14, X15, X4, 6*16(Stack), 7*16(Stack)) - VMOVDQA 5*16(Stack), X4 - VMOVDQA X0, 5*16(Stack) - CHACHA_QROUND_AVX(X8, X9, X10, X11, X0, 6*16(Stack), 7*16(Stack)) - CHACHA_QROUND_AVX(X4, X5, X6, X7, X0, 6*16(Stack), 7*16(Stack)) - VMOVDQA 5*16(Stack), X0 - CHACHA_SHUFFLE_AVX(X3, X2, X1) - CHACHA_SHUFFLE_AVX(X15, X14, X13) - CHACHA_SHUFFLE_AVX(X11, X10, X9) - CHACHA_SHUFFLE_AVX(X7, X6, X5) - SUBQ $2, Tmp0 - JNZ CHACHA_LOOP_256 - - VPADDD 0*16(Stack), X0, X0 - VPADDD 1*16(Stack), X1, X1 - VPADDD 2*16(Stack), X2, X2 - VPADDD 3*16(Stack), X3, X3 - VMOVDQA X4, 5*16(Stack) // Save X4 - XOR_AVX(Dst, Src, 0, X0, X1, X2, X3, X4) - VMOVDQA 5*16(Stack), X4 // Restore X4 - - VMOVDQA 0*16(Stack), X0 - VMOVDQA 1*16(Stack), X1 - VMOVDQA 2*16(Stack), X2 - VMOVDQA 3*16(Stack), X3 - VPADDQ 4*16(Stack), X3, X3 - - VPADDD X0, X12, X12 - VPADDD X1, X13, X13 - VPADDD X2, X14, X14 - VPADDD X3, X15, X15 - VPADDQ 4*16(Stack), X3, X3 - VPADDD X0, X8, X8 - VPADDD X1, X9, X9 - VPADDD X2, X10, X10 - VPADDD X3, X11, X11 - VPADDQ 4*16(Stack), X3, X3 - VPADDD X0, X4, X4 - VPADDD X1, X5, X5 - VPADDD X2, X6, X6 - VPADDD X3, X7, X7 - VPADDQ 4*16(Stack), X3, X3 - - XOR_AVX(Dst, Src, 64, X12, X13, X14, X15, X0) - XOR_AVX(Dst, Src, 128, X8, X9, X10, X11, X0) - VMOVDQA 0*16(Stack), X0 // Restore X0 - ADDQ $192, Dst - ADDQ $192, Src - SUBQ $192, Len - - CMPQ Len, $64 - JL BUFFER_KEYSTREAM - - XOR_AVX(Dst, Src, 0, X4, X5, X6, X7, X8) - ADDQ $64, Dst - ADDQ $64, Src - SUBQ $64, Len - JZ DONE - CMPQ Len, $64 // If Len <= 64 -> gen. only 64 byte keystream. - JLE GENERATE_KEYSTREAM_64 - CMPQ Len, $128 // If 64 < Len <= 128 -> gen. only 128 byte keystream. - JLE GENERATE_KEYSTREAM_128 - CMPQ Len, $192 // If Len > 192 -> repeat, otherwise Len > 128 && Len <= 192 -> gen. 192 byte keystream - JG GENERATE_KEYSTREAM_256 - -GENERATE_KEYSTREAM_192: - VMOVDQA X0, X12 - VMOVDQA X1, X13 - VMOVDQA X2, X14 - VMOVDQA X3, X15 - VMOVDQA X0, X8 - VMOVDQA X1, X9 - VMOVDQA X2, X10 - VMOVDQA X3, X11 - VPADDQ 4*16(Stack), X11, X11 - VMOVDQA X0, X4 - VMOVDQA X1, X5 - VMOVDQA X2, X6 - VMOVDQA X11, X7 - VPADDQ 4*16(Stack), X7, X7 - MOVQ Rounds, Tmp0 - - VMOVDQA 6*16(Stack), X1 // Load 16 bit rotate-left constant - VMOVDQA 7*16(Stack), X2 // Load 8 bit rotate-left constant - -CHACHA_LOOP_192: - CHACHA_QROUND_AVX(X12, X13, X14, X15, X0, X1, X2) - CHACHA_QROUND_AVX(X8, X9, X10, X11, X0, X1, X2) - CHACHA_QROUND_AVX(X4, X5, X6, X7, X0, X1, X2) - CHACHA_SHUFFLE_AVX(X13, X14, X15) - CHACHA_SHUFFLE_AVX(X9, X10, X11) - CHACHA_SHUFFLE_AVX(X5, X6, X7) - CHACHA_QROUND_AVX(X12, X13, X14, X15, X0, X1, X2) - CHACHA_QROUND_AVX(X8, X9, X10, X11, X0, X1, X2) - CHACHA_QROUND_AVX(X4, X5, X6, X7, X0, X1, X2) - CHACHA_SHUFFLE_AVX(X15, X14, X13) - CHACHA_SHUFFLE_AVX(X11, X10, X9) - CHACHA_SHUFFLE_AVX(X7, X6, X5) - SUBQ $2, Tmp0 - JNZ CHACHA_LOOP_192 - - VMOVDQA 0*16(Stack), X0 // Restore X0 - VMOVDQA 1*16(Stack), X1 // Restore X1 - VMOVDQA 2*16(Stack), X2 // Restore X2 - VPADDD X0, X12, X12 - VPADDD X1, X13, X13 - VPADDD X2, X14, X14 - VPADDD X3, X15, X15 - VPADDQ 4*16(Stack), X3, X3 - VPADDD X0, X8, X8 - VPADDD X1, X9, X9 - VPADDD X2, X10, X10 - VPADDD X3, X11, X11 - VPADDQ 4*16(Stack), X3, X3 - VPADDD X0, X4, X4 - VPADDD X1, X5, X5 - VPADDD X2, X6, X6 - VPADDD X3, X7, X7 - VPADDQ 4*16(Stack), X3, X3 - - XOR_AVX(Dst, Src, 0, X12, X13, X14, X15, X0) - XOR_AVX(Dst, Src, 64, X8, X9, X10, X11, X0) - VMOVDQA 0*16(Stack), X0 // Restore X0 - ADDQ $128, Dst - ADDQ $128, Src - SUBQ $128, Len - - CMPQ Len, $64 - JL BUFFER_KEYSTREAM - - XOR_AVX(Dst, Src, 0, X4, X5, X6, X7, X8) - ADDQ $64, Dst - ADDQ $64, Src - SUBQ $64, Len - JZ DONE - CMPQ Len, $64 // If Len <= 64 -> gen. only 64 byte keystream. - JLE GENERATE_KEYSTREAM_64 - -GENERATE_KEYSTREAM_128: - VMOVDQA X0, X8 - VMOVDQA X1, X9 - VMOVDQA X2, X10 - VMOVDQA X3, X11 - VMOVDQA X0, X4 - VMOVDQA X1, X5 - VMOVDQA X2, X6 - VMOVDQA X3, X7 - VPADDQ 4*16(Stack), X7, X7 - MOVQ Rounds, Tmp0 - - VMOVDQA 6*16(Stack), X13 // Load 16 bit rotate-left constant - VMOVDQA 7*16(Stack), X14 // Load 8 bit rotate-left constant - -CHACHA_LOOP_128: - CHACHA_QROUND_AVX(X8, X9, X10, X11, X12, X13, X14) - CHACHA_QROUND_AVX(X4, X5, X6, X7, X12, X13, X14) - CHACHA_SHUFFLE_AVX(X9, X10, X11) - CHACHA_SHUFFLE_AVX(X5, X6, X7) - CHACHA_QROUND_AVX(X8, X9, X10, X11, X12, X13, X14) - CHACHA_QROUND_AVX(X4, X5, X6, X7, X12, X13, X14) - CHACHA_SHUFFLE_AVX(X11, X10, X9) - CHACHA_SHUFFLE_AVX(X7, X6, X5) - SUBQ $2, Tmp0 - JNZ CHACHA_LOOP_128 - - VPADDD X0, X8, X8 - VPADDD X1, X9, X9 - VPADDD X2, X10, X10 - VPADDD X3, X11, X11 - VPADDQ 4*16(Stack), X3, X3 - VPADDD X0, X4, X4 - VPADDD X1, X5, X5 - VPADDD X2, X6, X6 - VPADDD X3, X7, X7 - VPADDQ 4*16(Stack), X3, X3 - - XOR_AVX(Dst, Src, 0, X8, X9, X10, X11, X12) - ADDQ $64, Dst - ADDQ $64, Src - SUBQ $64, Len - - CMPQ Len, $64 - JL BUFFER_KEYSTREAM - - XOR_AVX(Dst, Src, 0, X4, X5, X6, X7, X8) - ADDQ $64, Dst - ADDQ $64, Src - SUBQ $64, Len - JZ DONE // If Len == 0 -> DONE, otherwise Len <= 64 -> gen 64 byte keystream - -GENERATE_KEYSTREAM_64: - VMOVDQA X0, X4 - VMOVDQA X1, X5 - VMOVDQA X2, X6 - VMOVDQA X3, X7 - MOVQ Rounds, Tmp0 - - VMOVDQA 6*16(Stack), X9 // Load 16 bit rotate-left constant - VMOVDQA 7*16(Stack), X10 // Load 8 bit rotate-left constant - -CHACHA_LOOP_64: - CHACHA_QROUND_AVX(X4, X5, X6, X7, X8, X9, X10) - CHACHA_SHUFFLE_AVX(X5, X6, X7) - CHACHA_QROUND_AVX(X4, X5, X6, X7, X8, X9, X10) - CHACHA_SHUFFLE_AVX(X7, X6, X5) - SUBQ $2, Tmp0 - JNZ CHACHA_LOOP_64 - - VPADDD X0, X4, X4 - VPADDD X1, X5, X5 - VPADDD X2, X6, X6 - VPADDD X3, X7, X7 - VPADDQ 4*16(Stack), X3, X3 - - CMPQ Len, $64 - JL BUFFER_KEYSTREAM - - XOR_AVX(Dst, Src, 0, X4, X5, X6, X7, X8) - ADDQ $64, Src - ADDQ $64, Dst - SUBQ $64, Len - JMP DONE // jump directly to DONE - there is no keystream to buffer, Len == 0 always true. - -BUFFER_KEYSTREAM: - VMOVDQU X4, 0*16(Buffer) - VMOVDQU X5, 1*16(Buffer) - VMOVDQU X6, 2*16(Buffer) - VMOVDQU X7, 3*16(Buffer) - MOVQ Len, Tmp0 - FINALIZE(Dst, Src, Buffer, Tmp0, Tmp1, Tmp2) - -DONE: - MOVQ SavedSP, Stack // Restore stack pointer - VMOVDQU X3, 3*16(State) - VZEROUPPER - MOVQ Len, ret+72(FP) - RET - -#undef Dst -#undef Src -#undef Len -#undef Rounds -#undef Buffer -#undef State -#undef Stack -#undef SavedSP -#undef Tmp0 -#undef Tmp1 -#undef Tmp2 diff --git a/vendor/github.com/aead/chacha20/chacha/chacha_generic.go b/vendor/github.com/aead/chacha20/chacha/chacha_generic.go deleted file mode 100644 index 8832d5b..0000000 --- a/vendor/github.com/aead/chacha20/chacha/chacha_generic.go +++ /dev/null @@ -1,319 +0,0 @@ -// Copyright (c) 2016 Andreas Auernhammer. All rights reserved. -// Use of this source code is governed by a license that can be -// found in the LICENSE file. - -package chacha - -import "encoding/binary" - -var sigma = [4]uint32{0x61707865, 0x3320646e, 0x79622d32, 0x6b206574} - -func xorKeyStreamGeneric(dst, src []byte, block, state *[64]byte, rounds int) int { - for len(src) >= 64 { - chachaGeneric(block, state, rounds) - - for i, v := range block { - dst[i] = src[i] ^ v - } - src = src[64:] - dst = dst[64:] - } - - n := len(src) - if n > 0 { - chachaGeneric(block, state, rounds) - for i, v := range src { - dst[i] = v ^ block[i] - } - } - return n -} - -func chachaGeneric(dst *[64]byte, state *[64]byte, rounds int) { - v00 := binary.LittleEndian.Uint32(state[0:]) - v01 := binary.LittleEndian.Uint32(state[4:]) - v02 := binary.LittleEndian.Uint32(state[8:]) - v03 := binary.LittleEndian.Uint32(state[12:]) - v04 := binary.LittleEndian.Uint32(state[16:]) - v05 := binary.LittleEndian.Uint32(state[20:]) - v06 := binary.LittleEndian.Uint32(state[24:]) - v07 := binary.LittleEndian.Uint32(state[28:]) - v08 := binary.LittleEndian.Uint32(state[32:]) - v09 := binary.LittleEndian.Uint32(state[36:]) - v10 := binary.LittleEndian.Uint32(state[40:]) - v11 := binary.LittleEndian.Uint32(state[44:]) - v12 := binary.LittleEndian.Uint32(state[48:]) - v13 := binary.LittleEndian.Uint32(state[52:]) - v14 := binary.LittleEndian.Uint32(state[56:]) - v15 := binary.LittleEndian.Uint32(state[60:]) - - s00, s01, s02, s03, s04, s05, s06, s07 := v00, v01, v02, v03, v04, v05, v06, v07 - s08, s09, s10, s11, s12, s13, s14, s15 := v08, v09, v10, v11, v12, v13, v14, v15 - - for i := 0; i < rounds; i += 2 { - v00 += v04 - v12 ^= v00 - v12 = (v12 << 16) | (v12 >> 16) - v08 += v12 - v04 ^= v08 - v04 = (v04 << 12) | (v04 >> 20) - v00 += v04 - v12 ^= v00 - v12 = (v12 << 8) | (v12 >> 24) - v08 += v12 - v04 ^= v08 - v04 = (v04 << 7) | (v04 >> 25) - v01 += v05 - v13 ^= v01 - v13 = (v13 << 16) | (v13 >> 16) - v09 += v13 - v05 ^= v09 - v05 = (v05 << 12) | (v05 >> 20) - v01 += v05 - v13 ^= v01 - v13 = (v13 << 8) | (v13 >> 24) - v09 += v13 - v05 ^= v09 - v05 = (v05 << 7) | (v05 >> 25) - v02 += v06 - v14 ^= v02 - v14 = (v14 << 16) | (v14 >> 16) - v10 += v14 - v06 ^= v10 - v06 = (v06 << 12) | (v06 >> 20) - v02 += v06 - v14 ^= v02 - v14 = (v14 << 8) | (v14 >> 24) - v10 += v14 - v06 ^= v10 - v06 = (v06 << 7) | (v06 >> 25) - v03 += v07 - v15 ^= v03 - v15 = (v15 << 16) | (v15 >> 16) - v11 += v15 - v07 ^= v11 - v07 = (v07 << 12) | (v07 >> 20) - v03 += v07 - v15 ^= v03 - v15 = (v15 << 8) | (v15 >> 24) - v11 += v15 - v07 ^= v11 - v07 = (v07 << 7) | (v07 >> 25) - v00 += v05 - v15 ^= v00 - v15 = (v15 << 16) | (v15 >> 16) - v10 += v15 - v05 ^= v10 - v05 = (v05 << 12) | (v05 >> 20) - v00 += v05 - v15 ^= v00 - v15 = (v15 << 8) | (v15 >> 24) - v10 += v15 - v05 ^= v10 - v05 = (v05 << 7) | (v05 >> 25) - v01 += v06 - v12 ^= v01 - v12 = (v12 << 16) | (v12 >> 16) - v11 += v12 - v06 ^= v11 - v06 = (v06 << 12) | (v06 >> 20) - v01 += v06 - v12 ^= v01 - v12 = (v12 << 8) | (v12 >> 24) - v11 += v12 - v06 ^= v11 - v06 = (v06 << 7) | (v06 >> 25) - v02 += v07 - v13 ^= v02 - v13 = (v13 << 16) | (v13 >> 16) - v08 += v13 - v07 ^= v08 - v07 = (v07 << 12) | (v07 >> 20) - v02 += v07 - v13 ^= v02 - v13 = (v13 << 8) | (v13 >> 24) - v08 += v13 - v07 ^= v08 - v07 = (v07 << 7) | (v07 >> 25) - v03 += v04 - v14 ^= v03 - v14 = (v14 << 16) | (v14 >> 16) - v09 += v14 - v04 ^= v09 - v04 = (v04 << 12) | (v04 >> 20) - v03 += v04 - v14 ^= v03 - v14 = (v14 << 8) | (v14 >> 24) - v09 += v14 - v04 ^= v09 - v04 = (v04 << 7) | (v04 >> 25) - } - - v00 += s00 - v01 += s01 - v02 += s02 - v03 += s03 - v04 += s04 - v05 += s05 - v06 += s06 - v07 += s07 - v08 += s08 - v09 += s09 - v10 += s10 - v11 += s11 - v12 += s12 - v13 += s13 - v14 += s14 - v15 += s15 - - s12++ - binary.LittleEndian.PutUint32(state[48:], s12) - if s12 == 0 { // indicates overflow - s13++ - binary.LittleEndian.PutUint32(state[52:], s13) - } - - binary.LittleEndian.PutUint32(dst[0:], v00) - binary.LittleEndian.PutUint32(dst[4:], v01) - binary.LittleEndian.PutUint32(dst[8:], v02) - binary.LittleEndian.PutUint32(dst[12:], v03) - binary.LittleEndian.PutUint32(dst[16:], v04) - binary.LittleEndian.PutUint32(dst[20:], v05) - binary.LittleEndian.PutUint32(dst[24:], v06) - binary.LittleEndian.PutUint32(dst[28:], v07) - binary.LittleEndian.PutUint32(dst[32:], v08) - binary.LittleEndian.PutUint32(dst[36:], v09) - binary.LittleEndian.PutUint32(dst[40:], v10) - binary.LittleEndian.PutUint32(dst[44:], v11) - binary.LittleEndian.PutUint32(dst[48:], v12) - binary.LittleEndian.PutUint32(dst[52:], v13) - binary.LittleEndian.PutUint32(dst[56:], v14) - binary.LittleEndian.PutUint32(dst[60:], v15) -} - -func hChaCha20Generic(out *[32]byte, nonce *[16]byte, key *[32]byte) { - v00 := sigma[0] - v01 := sigma[1] - v02 := sigma[2] - v03 := sigma[3] - v04 := binary.LittleEndian.Uint32(key[0:]) - v05 := binary.LittleEndian.Uint32(key[4:]) - v06 := binary.LittleEndian.Uint32(key[8:]) - v07 := binary.LittleEndian.Uint32(key[12:]) - v08 := binary.LittleEndian.Uint32(key[16:]) - v09 := binary.LittleEndian.Uint32(key[20:]) - v10 := binary.LittleEndian.Uint32(key[24:]) - v11 := binary.LittleEndian.Uint32(key[28:]) - v12 := binary.LittleEndian.Uint32(nonce[0:]) - v13 := binary.LittleEndian.Uint32(nonce[4:]) - v14 := binary.LittleEndian.Uint32(nonce[8:]) - v15 := binary.LittleEndian.Uint32(nonce[12:]) - - for i := 0; i < 20; i += 2 { - v00 += v04 - v12 ^= v00 - v12 = (v12 << 16) | (v12 >> 16) - v08 += v12 - v04 ^= v08 - v04 = (v04 << 12) | (v04 >> 20) - v00 += v04 - v12 ^= v00 - v12 = (v12 << 8) | (v12 >> 24) - v08 += v12 - v04 ^= v08 - v04 = (v04 << 7) | (v04 >> 25) - v01 += v05 - v13 ^= v01 - v13 = (v13 << 16) | (v13 >> 16) - v09 += v13 - v05 ^= v09 - v05 = (v05 << 12) | (v05 >> 20) - v01 += v05 - v13 ^= v01 - v13 = (v13 << 8) | (v13 >> 24) - v09 += v13 - v05 ^= v09 - v05 = (v05 << 7) | (v05 >> 25) - v02 += v06 - v14 ^= v02 - v14 = (v14 << 16) | (v14 >> 16) - v10 += v14 - v06 ^= v10 - v06 = (v06 << 12) | (v06 >> 20) - v02 += v06 - v14 ^= v02 - v14 = (v14 << 8) | (v14 >> 24) - v10 += v14 - v06 ^= v10 - v06 = (v06 << 7) | (v06 >> 25) - v03 += v07 - v15 ^= v03 - v15 = (v15 << 16) | (v15 >> 16) - v11 += v15 - v07 ^= v11 - v07 = (v07 << 12) | (v07 >> 20) - v03 += v07 - v15 ^= v03 - v15 = (v15 << 8) | (v15 >> 24) - v11 += v15 - v07 ^= v11 - v07 = (v07 << 7) | (v07 >> 25) - v00 += v05 - v15 ^= v00 - v15 = (v15 << 16) | (v15 >> 16) - v10 += v15 - v05 ^= v10 - v05 = (v05 << 12) | (v05 >> 20) - v00 += v05 - v15 ^= v00 - v15 = (v15 << 8) | (v15 >> 24) - v10 += v15 - v05 ^= v10 - v05 = (v05 << 7) | (v05 >> 25) - v01 += v06 - v12 ^= v01 - v12 = (v12 << 16) | (v12 >> 16) - v11 += v12 - v06 ^= v11 - v06 = (v06 << 12) | (v06 >> 20) - v01 += v06 - v12 ^= v01 - v12 = (v12 << 8) | (v12 >> 24) - v11 += v12 - v06 ^= v11 - v06 = (v06 << 7) | (v06 >> 25) - v02 += v07 - v13 ^= v02 - v13 = (v13 << 16) | (v13 >> 16) - v08 += v13 - v07 ^= v08 - v07 = (v07 << 12) | (v07 >> 20) - v02 += v07 - v13 ^= v02 - v13 = (v13 << 8) | (v13 >> 24) - v08 += v13 - v07 ^= v08 - v07 = (v07 << 7) | (v07 >> 25) - v03 += v04 - v14 ^= v03 - v14 = (v14 << 16) | (v14 >> 16) - v09 += v14 - v04 ^= v09 - v04 = (v04 << 12) | (v04 >> 20) - v03 += v04 - v14 ^= v03 - v14 = (v14 << 8) | (v14 >> 24) - v09 += v14 - v04 ^= v09 - v04 = (v04 << 7) | (v04 >> 25) - } - - binary.LittleEndian.PutUint32(out[0:], v00) - binary.LittleEndian.PutUint32(out[4:], v01) - binary.LittleEndian.PutUint32(out[8:], v02) - binary.LittleEndian.PutUint32(out[12:], v03) - binary.LittleEndian.PutUint32(out[16:], v12) - binary.LittleEndian.PutUint32(out[20:], v13) - binary.LittleEndian.PutUint32(out[24:], v14) - binary.LittleEndian.PutUint32(out[28:], v15) -} diff --git a/vendor/github.com/aead/chacha20/chacha/chacha_ref.go b/vendor/github.com/aead/chacha20/chacha/chacha_ref.go deleted file mode 100644 index 526877c..0000000 --- a/vendor/github.com/aead/chacha20/chacha/chacha_ref.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2016 Andreas Auernhammer. All rights reserved. -// Use of this source code is governed by a license that can be -// found in the LICENSE file. - -// +build !amd64,!386 gccgo appengine nacl - -package chacha - -import "encoding/binary" - -func init() { - useSSE2 = false - useSSSE3 = false - useAVX = false - useAVX2 = false -} - -func initialize(state *[64]byte, key []byte, nonce *[16]byte) { - binary.LittleEndian.PutUint32(state[0:], sigma[0]) - binary.LittleEndian.PutUint32(state[4:], sigma[1]) - binary.LittleEndian.PutUint32(state[8:], sigma[2]) - binary.LittleEndian.PutUint32(state[12:], sigma[3]) - copy(state[16:], key[:]) - copy(state[48:], nonce[:]) -} - -func xorKeyStream(dst, src []byte, block, state *[64]byte, rounds int) int { - return xorKeyStreamGeneric(dst, src, block, state, rounds) -} - -func hChaCha20(out *[32]byte, nonce *[16]byte, key *[32]byte) { - hChaCha20Generic(out, nonce, key) -} diff --git a/vendor/github.com/aead/chacha20/chacha/const.s b/vendor/github.com/aead/chacha20/chacha/const.s deleted file mode 100644 index c7a94a4..0000000 --- a/vendor/github.com/aead/chacha20/chacha/const.s +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2018 Andreas Auernhammer. All rights reserved. -// Use of this source code is governed by a license that can be -// found in the LICENSE file. - -// +build 386,!gccgo,!appengine,!nacl amd64,!gccgo,!appengine,!nacl - -#include "textflag.h" - -DATA ·sigma<>+0x00(SB)/4, $0x61707865 -DATA ·sigma<>+0x04(SB)/4, $0x3320646e -DATA ·sigma<>+0x08(SB)/4, $0x79622d32 -DATA ·sigma<>+0x0C(SB)/4, $0x6b206574 -GLOBL ·sigma<>(SB), (NOPTR+RODATA), $16 // The 4 ChaCha initialization constants - -// SSE2/SSE3/AVX constants - -DATA ·one<>+0x00(SB)/8, $1 -DATA ·one<>+0x08(SB)/8, $0 -GLOBL ·one<>(SB), (NOPTR+RODATA), $16 // The constant 1 as 128 bit value - -DATA ·rol16<>+0x00(SB)/8, $0x0504070601000302 -DATA ·rol16<>+0x08(SB)/8, $0x0D0C0F0E09080B0A -GLOBL ·rol16<>(SB), (NOPTR+RODATA), $16 // The PSHUFB 16 bit left rotate constant - -DATA ·rol8<>+0x00(SB)/8, $0x0605040702010003 -DATA ·rol8<>+0x08(SB)/8, $0x0E0D0C0F0A09080B -GLOBL ·rol8<>(SB), (NOPTR+RODATA), $16 // The PSHUFB 8 bit left rotate constant - -// AVX2 constants - -DATA ·one_AVX2<>+0x00(SB)/8, $0 -DATA ·one_AVX2<>+0x08(SB)/8, $0 -DATA ·one_AVX2<>+0x10(SB)/8, $1 -DATA ·one_AVX2<>+0x18(SB)/8, $0 -GLOBL ·one_AVX2<>(SB), (NOPTR+RODATA), $32 // The constant 1 as 256 bit value - -DATA ·two_AVX2<>+0x00(SB)/8, $2 -DATA ·two_AVX2<>+0x08(SB)/8, $0 -DATA ·two_AVX2<>+0x10(SB)/8, $2 -DATA ·two_AVX2<>+0x18(SB)/8, $0 -GLOBL ·two_AVX2<>(SB), (NOPTR+RODATA), $32 - -DATA ·rol16_AVX2<>+0x00(SB)/8, $0x0504070601000302 -DATA ·rol16_AVX2<>+0x08(SB)/8, $0x0D0C0F0E09080B0A -DATA ·rol16_AVX2<>+0x10(SB)/8, $0x0504070601000302 -DATA ·rol16_AVX2<>+0x18(SB)/8, $0x0D0C0F0E09080B0A -GLOBL ·rol16_AVX2<>(SB), (NOPTR+RODATA), $32 // The VPSHUFB 16 bit left rotate constant - -DATA ·rol8_AVX2<>+0x00(SB)/8, $0x0605040702010003 -DATA ·rol8_AVX2<>+0x08(SB)/8, $0x0E0D0C0F0A09080B -DATA ·rol8_AVX2<>+0x10(SB)/8, $0x0605040702010003 -DATA ·rol8_AVX2<>+0x18(SB)/8, $0x0E0D0C0F0A09080B -GLOBL ·rol8_AVX2<>(SB), (NOPTR+RODATA), $32 // The VPSHUFB 8 bit left rotate constant diff --git a/vendor/github.com/aead/chacha20/chacha/macro.s b/vendor/github.com/aead/chacha20/chacha/macro.s deleted file mode 100644 index 780108f..0000000 --- a/vendor/github.com/aead/chacha20/chacha/macro.s +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright (c) 2018 Andreas Auernhammer. All rights reserved. -// Use of this source code is governed by a license that can be -// found in the LICENSE file. - -// +build 386,!gccgo,!appengine,!nacl amd64,!gccgo,!appengine,!nacl - -// ROTL_SSE rotates all 4 32 bit values of the XMM register v -// left by n bits using SSE2 instructions (0 <= n <= 32). -// The XMM register t is used as a temp. register. -#define ROTL_SSE(n, t, v) \ - MOVO v, t; \ - PSLLL $n, t; \ - PSRLL $(32-n), v; \ - PXOR t, v - -// ROTL_AVX rotates all 4/8 32 bit values of the AVX/AVX2 register v -// left by n bits using AVX/AVX2 instructions (0 <= n <= 32). -// The AVX/AVX2 register t is used as a temp. register. -#define ROTL_AVX(n, t, v) \ - VPSLLD $n, v, t; \ - VPSRLD $(32-n), v, v; \ - VPXOR v, t, v - -// CHACHA_QROUND_SSE2 performs a ChaCha quarter-round using the -// 4 XMM registers v0, v1, v2 and v3. It uses only ROTL_SSE2 for -// rotations. The XMM register t is used as a temp. register. -#define CHACHA_QROUND_SSE2(v0, v1, v2, v3, t) \ - PADDL v1, v0; \ - PXOR v0, v3; \ - ROTL_SSE(16, t, v3); \ - PADDL v3, v2; \ - PXOR v2, v1; \ - ROTL_SSE(12, t, v1); \ - PADDL v1, v0; \ - PXOR v0, v3; \ - ROTL_SSE(8, t, v3); \ - PADDL v3, v2; \ - PXOR v2, v1; \ - ROTL_SSE(7, t, v1) - -// CHACHA_QROUND_SSSE3 performs a ChaCha quarter-round using the -// 4 XMM registers v0, v1, v2 and v3. It uses PSHUFB for 8/16 bit -// rotations. The XMM register t is used as a temp. register. -// -// r16 holds the PSHUFB constant for a 16 bit left rotate. -// r8 holds the PSHUFB constant for a 8 bit left rotate. -#define CHACHA_QROUND_SSSE3(v0, v1, v2, v3, t, r16, r8) \ - PADDL v1, v0; \ - PXOR v0, v3; \ - PSHUFB r16, v3; \ - PADDL v3, v2; \ - PXOR v2, v1; \ - ROTL_SSE(12, t, v1); \ - PADDL v1, v0; \ - PXOR v0, v3; \ - PSHUFB r8, v3; \ - PADDL v3, v2; \ - PXOR v2, v1; \ - ROTL_SSE(7, t, v1) - -// CHACHA_QROUND_AVX performs a ChaCha quarter-round using the -// 4 AVX/AVX2 registers v0, v1, v2 and v3. It uses VPSHUFB for 8/16 bit -// rotations. The AVX/AVX2 register t is used as a temp. register. -// -// r16 holds the VPSHUFB constant for a 16 bit left rotate. -// r8 holds the VPSHUFB constant for a 8 bit left rotate. -#define CHACHA_QROUND_AVX(v0, v1, v2, v3, t, r16, r8) \ - VPADDD v0, v1, v0; \ - VPXOR v3, v0, v3; \ - VPSHUFB r16, v3, v3; \ - VPADDD v2, v3, v2; \ - VPXOR v1, v2, v1; \ - ROTL_AVX(12, t, v1); \ - VPADDD v0, v1, v0; \ - VPXOR v3, v0, v3; \ - VPSHUFB r8, v3, v3; \ - VPADDD v2, v3, v2; \ - VPXOR v1, v2, v1; \ - ROTL_AVX(7, t, v1) - -// CHACHA_SHUFFLE_SSE performs a ChaCha shuffle using the -// 3 XMM registers v1, v2 and v3. The inverse shuffle is -// performed by switching v1 and v3: CHACHA_SHUFFLE_SSE(v3, v2, v1). -#define CHACHA_SHUFFLE_SSE(v1, v2, v3) \ - PSHUFL $0x39, v1, v1; \ - PSHUFL $0x4E, v2, v2; \ - PSHUFL $0x93, v3, v3 - -// CHACHA_SHUFFLE_AVX performs a ChaCha shuffle using the -// 3 AVX/AVX2 registers v1, v2 and v3. The inverse shuffle is -// performed by switching v1 and v3: CHACHA_SHUFFLE_AVX(v3, v2, v1). -#define CHACHA_SHUFFLE_AVX(v1, v2, v3) \ - VPSHUFD $0x39, v1, v1; \ - VPSHUFD $0x4E, v2, v2; \ - VPSHUFD $0x93, v3, v3 - -// XOR_SSE extracts 4x16 byte vectors from src at -// off, xors all vectors with the corresponding XMM -// register (v0 - v3) and writes the result to dst -// at off. -// The XMM register t is used as a temp. register. -#define XOR_SSE(dst, src, off, v0, v1, v2, v3, t) \ - MOVOU 0+off(src), t; \ - PXOR v0, t; \ - MOVOU t, 0+off(dst); \ - MOVOU 16+off(src), t; \ - PXOR v1, t; \ - MOVOU t, 16+off(dst); \ - MOVOU 32+off(src), t; \ - PXOR v2, t; \ - MOVOU t, 32+off(dst); \ - MOVOU 48+off(src), t; \ - PXOR v3, t; \ - MOVOU t, 48+off(dst) - -// XOR_AVX extracts 4x16 byte vectors from src at -// off, xors all vectors with the corresponding AVX -// register (v0 - v3) and writes the result to dst -// at off. -// The XMM register t is used as a temp. register. -#define XOR_AVX(dst, src, off, v0, v1, v2, v3, t) \ - VPXOR 0+off(src), v0, t; \ - VMOVDQU t, 0+off(dst); \ - VPXOR 16+off(src), v1, t; \ - VMOVDQU t, 16+off(dst); \ - VPXOR 32+off(src), v2, t; \ - VMOVDQU t, 32+off(dst); \ - VPXOR 48+off(src), v3, t; \ - VMOVDQU t, 48+off(dst) - -#define XOR_AVX2(dst, src, off, v0, v1, v2, v3, t0, t1) \ - VMOVDQU (0+off)(src), t0; \ - VPERM2I128 $32, v1, v0, t1; \ - VPXOR t0, t1, t0; \ - VMOVDQU t0, (0+off)(dst); \ - VMOVDQU (32+off)(src), t0; \ - VPERM2I128 $32, v3, v2, t1; \ - VPXOR t0, t1, t0; \ - VMOVDQU t0, (32+off)(dst); \ - VMOVDQU (64+off)(src), t0; \ - VPERM2I128 $49, v1, v0, t1; \ - VPXOR t0, t1, t0; \ - VMOVDQU t0, (64+off)(dst); \ - VMOVDQU (96+off)(src), t0; \ - VPERM2I128 $49, v3, v2, t1; \ - VPXOR t0, t1, t0; \ - VMOVDQU t0, (96+off)(dst) - -#define XOR_UPPER_AVX2(dst, src, off, v0, v1, v2, v3, t0, t1) \ - VMOVDQU (0+off)(src), t0; \ - VPERM2I128 $32, v1, v0, t1; \ - VPXOR t0, t1, t0; \ - VMOVDQU t0, (0+off)(dst); \ - VMOVDQU (32+off)(src), t0; \ - VPERM2I128 $32, v3, v2, t1; \ - VPXOR t0, t1, t0; \ - VMOVDQU t0, (32+off)(dst); \ - -#define EXTRACT_LOWER(dst, v0, v1, v2, v3, t0) \ - VPERM2I128 $49, v1, v0, t0; \ - VMOVDQU t0, 0(dst); \ - VPERM2I128 $49, v3, v2, t0; \ - VMOVDQU t0, 32(dst) diff --git a/vendor/github.com/creack/pty/.gitignore b/vendor/github.com/creack/pty/.gitignore deleted file mode 100644 index 1f0a99f..0000000 --- a/vendor/github.com/creack/pty/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -[568].out -_go* -_test* -_obj diff --git a/vendor/github.com/creack/pty/Dockerfile.golang b/vendor/github.com/creack/pty/Dockerfile.golang deleted file mode 100644 index 2ee82a3..0000000 --- a/vendor/github.com/creack/pty/Dockerfile.golang +++ /dev/null @@ -1,17 +0,0 @@ -ARG GOVERSION=1.14 -FROM golang:${GOVERSION} - -# Set base env. -ARG GOOS=linux -ARG GOARCH=amd64 -ENV GOOS=${GOOS} GOARCH=${GOARCH} CGO_ENABLED=0 GOFLAGS='-v -ldflags=-s -ldflags=-w' - -# Pre compile the stdlib for 386/arm (32bits). -RUN go build -a std - -# Add the code to the image. -WORKDIR pty -ADD . . - -# Build the lib. -RUN go build diff --git a/vendor/github.com/creack/pty/Dockerfile.riscv b/vendor/github.com/creack/pty/Dockerfile.riscv deleted file mode 100644 index 7a30c94..0000000 --- a/vendor/github.com/creack/pty/Dockerfile.riscv +++ /dev/null @@ -1,23 +0,0 @@ -# NOTE: Using 1.13 as a base to build the RISCV compiler, the resulting version is based on go1.6. -FROM golang:1.13 - -# Clone and complie a riscv compatible version of the go compiler. -RUN git clone https://review.gerrithub.io/riscv/riscv-go /riscv-go -# riscvdev branch HEAD as of 2019-06-29. -RUN cd /riscv-go && git checkout 04885fddd096d09d4450726064d06dd107e374bf -ENV PATH=/riscv-go/misc/riscv:/riscv-go/bin:$PATH -RUN cd /riscv-go/src && GOROOT_BOOTSTRAP=$(go env GOROOT) ./make.bash -ENV GOROOT=/riscv-go - -# Set the base env. -ENV GOOS=linux GOARCH=riscv CGO_ENABLED=0 GOFLAGS='-v -ldflags=-s -ldflags=-w' - -# Pre compile the stdlib. -RUN go build -a std - -# Add the code to the image. -WORKDIR pty -ADD . . - -# Build the lib. -RUN go build diff --git a/vendor/github.com/creack/pty/LICENSE b/vendor/github.com/creack/pty/LICENSE deleted file mode 100644 index 6b7558b..0000000 --- a/vendor/github.com/creack/pty/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -Copyright (c) 2011 Keith Rarick - -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/creack/pty/README.md b/vendor/github.com/creack/pty/README.md deleted file mode 100644 index a4fe767..0000000 --- a/vendor/github.com/creack/pty/README.md +++ /dev/null @@ -1,107 +0,0 @@ -# pty - -Pty is a Go package for using unix pseudo-terminals. - -## Install - -```sh -go get github.com/creack/pty -``` - -## Examples - -Note that those examples are for demonstration purpose only, to showcase how to use the library. They are not meant to be used in any kind of production environment. - -### Command - -```go -package main - -import ( - "io" - "os" - "os/exec" - - "github.com/creack/pty" -) - -func main() { - c := exec.Command("grep", "--color=auto", "bar") - f, err := pty.Start(c) - if err != nil { - panic(err) - } - - go func() { - f.Write([]byte("foo\n")) - f.Write([]byte("bar\n")) - f.Write([]byte("baz\n")) - f.Write([]byte{4}) // EOT - }() - io.Copy(os.Stdout, f) -} -``` - -### Shell - -```go -package main - -import ( - "io" - "log" - "os" - "os/exec" - "os/signal" - "syscall" - - "github.com/creack/pty" - "golang.org/x/term" -) - -func test() error { - // Create arbitrary command. - c := exec.Command("bash") - - // Start the command with a pty. - ptmx, err := pty.Start(c) - if err != nil { - return err - } - // Make sure to close the pty at the end. - defer func() { _ = ptmx.Close() }() // Best effort. - - // Handle pty size. - ch := make(chan os.Signal, 1) - signal.Notify(ch, syscall.SIGWINCH) - go func() { - for range ch { - if err := pty.InheritSize(os.Stdin, ptmx); err != nil { - log.Printf("error resizing pty: %s", err) - } - } - }() - ch <- syscall.SIGWINCH // Initial resize. - defer func() { signal.Stop(ch); close(ch) }() // Cleanup signals when done. - - // Set stdin in raw mode. - oldState, err := term.MakeRaw(int(os.Stdin.Fd())) - if err != nil { - panic(err) - } - defer func() { _ = term.Restore(int(os.Stdin.Fd()), oldState) }() // Best effort. - - // Copy stdin to the pty and the pty to stdout. - // NOTE: The goroutine will keep reading until the next keystroke before returning. - go func() { _, _ = io.Copy(ptmx, os.Stdin) }() - _, _ = io.Copy(os.Stdout, ptmx) - - return nil -} - -func main() { - if err := test(); err != nil { - log.Fatal(err) - } -} -``` diff --git a/vendor/github.com/creack/pty/asm_solaris_amd64.s b/vendor/github.com/creack/pty/asm_solaris_amd64.s deleted file mode 100644 index 7fbef8e..0000000 --- a/vendor/github.com/creack/pty/asm_solaris_amd64.s +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build gc -//+build gc - -#include "textflag.h" - -// -// System calls for amd64, Solaris are implemented in runtime/syscall_solaris.go -// - -TEXT ·sysvicall6(SB),NOSPLIT,$0-88 - JMP syscall·sysvicall6(SB) - -TEXT ·rawSysvicall6(SB),NOSPLIT,$0-88 - JMP syscall·rawSysvicall6(SB) diff --git a/vendor/github.com/creack/pty/doc.go b/vendor/github.com/creack/pty/doc.go deleted file mode 100644 index 3c8b324..0000000 --- a/vendor/github.com/creack/pty/doc.go +++ /dev/null @@ -1,16 +0,0 @@ -// Package pty provides functions for working with Unix terminals. -package pty - -import ( - "errors" - "os" -) - -// ErrUnsupported is returned if a function is not -// available on the current platform. -var ErrUnsupported = errors.New("unsupported") - -// Open a pty and its corresponding tty. -func Open() (pty, tty *os.File, err error) { - return open() -} diff --git a/vendor/github.com/creack/pty/ioctl.go b/vendor/github.com/creack/pty/ioctl.go deleted file mode 100644 index 3cabedd..0000000 --- a/vendor/github.com/creack/pty/ioctl.go +++ /dev/null @@ -1,19 +0,0 @@ -//go:build !windows && !solaris && !aix -// +build !windows,!solaris,!aix - -package pty - -import "syscall" - -const ( - TIOCGWINSZ = syscall.TIOCGWINSZ - TIOCSWINSZ = syscall.TIOCSWINSZ -) - -func ioctl(fd, cmd, ptr uintptr) error { - _, _, e := syscall.Syscall(syscall.SYS_IOCTL, fd, cmd, ptr) - if e != 0 { - return e - } - return nil -} diff --git a/vendor/github.com/creack/pty/ioctl_bsd.go b/vendor/github.com/creack/pty/ioctl_bsd.go deleted file mode 100644 index db3bf84..0000000 --- a/vendor/github.com/creack/pty/ioctl_bsd.go +++ /dev/null @@ -1,40 +0,0 @@ -//go:build darwin || dragonfly || freebsd || netbsd || openbsd -// +build darwin dragonfly freebsd netbsd openbsd - -package pty - -// from -const ( - _IOC_VOID uintptr = 0x20000000 - _IOC_OUT uintptr = 0x40000000 - _IOC_IN uintptr = 0x80000000 - _IOC_IN_OUT uintptr = _IOC_OUT | _IOC_IN - _IOC_DIRMASK = _IOC_VOID | _IOC_OUT | _IOC_IN - - _IOC_PARAM_SHIFT = 13 - _IOC_PARAM_MASK = (1 << _IOC_PARAM_SHIFT) - 1 -) - -func _IOC_PARM_LEN(ioctl uintptr) uintptr { - return (ioctl >> 16) & _IOC_PARAM_MASK -} - -func _IOC(inout uintptr, group byte, ioctl_num uintptr, param_len uintptr) uintptr { - return inout | (param_len&_IOC_PARAM_MASK)<<16 | uintptr(group)<<8 | ioctl_num -} - -func _IO(group byte, ioctl_num uintptr) uintptr { - return _IOC(_IOC_VOID, group, ioctl_num, 0) -} - -func _IOR(group byte, ioctl_num uintptr, param_len uintptr) uintptr { - return _IOC(_IOC_OUT, group, ioctl_num, param_len) -} - -func _IOW(group byte, ioctl_num uintptr, param_len uintptr) uintptr { - return _IOC(_IOC_IN, group, ioctl_num, param_len) -} - -func _IOWR(group byte, ioctl_num uintptr, param_len uintptr) uintptr { - return _IOC(_IOC_IN_OUT, group, ioctl_num, param_len) -} diff --git a/vendor/github.com/creack/pty/ioctl_solaris.go b/vendor/github.com/creack/pty/ioctl_solaris.go deleted file mode 100644 index bff22da..0000000 --- a/vendor/github.com/creack/pty/ioctl_solaris.go +++ /dev/null @@ -1,48 +0,0 @@ -//go:build solaris -// +build solaris - -package pty - -import ( - "syscall" - "unsafe" -) - -//go:cgo_import_dynamic libc_ioctl ioctl "libc.so" -//go:linkname procioctl libc_ioctl -var procioctl uintptr - -const ( - // see /usr/include/sys/stropts.h - I_PUSH = uintptr((int32('S')<<8 | 002)) - I_STR = uintptr((int32('S')<<8 | 010)) - I_FIND = uintptr((int32('S')<<8 | 013)) - - // see /usr/include/sys/ptms.h - ISPTM = (int32('P') << 8) | 1 - UNLKPT = (int32('P') << 8) | 2 - PTSSTTY = (int32('P') << 8) | 3 - ZONEPT = (int32('P') << 8) | 4 - OWNERPT = (int32('P') << 8) | 5 - - // see /usr/include/sys/termios.h - TIOCSWINSZ = (uint32('T') << 8) | 103 - TIOCGWINSZ = (uint32('T') << 8) | 104 -) - -type strioctl struct { - icCmd int32 - icTimeout int32 - icLen int32 - icDP unsafe.Pointer -} - -// Defined in asm_solaris_amd64.s. -func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) - -func ioctl(fd, cmd, ptr uintptr) error { - if _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, fd, cmd, ptr, 0, 0, 0); errno != 0 { - return errno - } - return nil -} diff --git a/vendor/github.com/creack/pty/ioctl_unsupported.go b/vendor/github.com/creack/pty/ioctl_unsupported.go deleted file mode 100644 index 2449a27..0000000 --- a/vendor/github.com/creack/pty/ioctl_unsupported.go +++ /dev/null @@ -1,13 +0,0 @@ -//go:build aix -// +build aix - -package pty - -const ( - TIOCGWINSZ = 0 - TIOCSWINSZ = 0 -) - -func ioctl(fd, cmd, ptr uintptr) error { - return ErrUnsupported -} diff --git a/vendor/github.com/creack/pty/mktypes.bash b/vendor/github.com/creack/pty/mktypes.bash deleted file mode 100644 index 7f71bda..0000000 --- a/vendor/github.com/creack/pty/mktypes.bash +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash - -GOOSARCH="${GOOS}_${GOARCH}" -case "$GOOSARCH" in -_* | *_ | _) - echo 'undefined $GOOS_$GOARCH:' "$GOOSARCH" 1>&2 - exit 1 - ;; -esac - -GODEFS="go tool cgo -godefs" - -$GODEFS types.go |gofmt > ztypes_$GOARCH.go - -case $GOOS in -freebsd|dragonfly|netbsd|openbsd) - $GODEFS types_$GOOS.go |gofmt > ztypes_$GOOSARCH.go - ;; -esac diff --git a/vendor/github.com/creack/pty/pty_darwin.go b/vendor/github.com/creack/pty/pty_darwin.go deleted file mode 100644 index 9bdd71d..0000000 --- a/vendor/github.com/creack/pty/pty_darwin.go +++ /dev/null @@ -1,68 +0,0 @@ -//go:build darwin -// +build darwin - -package pty - -import ( - "errors" - "os" - "syscall" - "unsafe" -) - -func open() (pty, tty *os.File, err error) { - pFD, err := syscall.Open("/dev/ptmx", syscall.O_RDWR|syscall.O_CLOEXEC, 0) - if err != nil { - return nil, nil, err - } - p := os.NewFile(uintptr(pFD), "/dev/ptmx") - // In case of error after this point, make sure we close the ptmx fd. - defer func() { - if err != nil { - _ = p.Close() // Best effort. - } - }() - - sname, err := ptsname(p) - if err != nil { - return nil, nil, err - } - - if err := grantpt(p); err != nil { - return nil, nil, err - } - - if err := unlockpt(p); err != nil { - return nil, nil, err - } - - t, err := os.OpenFile(sname, os.O_RDWR|syscall.O_NOCTTY, 0) - if err != nil { - return nil, nil, err - } - return p, t, nil -} - -func ptsname(f *os.File) (string, error) { - n := make([]byte, _IOC_PARM_LEN(syscall.TIOCPTYGNAME)) - - err := ioctl(f.Fd(), syscall.TIOCPTYGNAME, uintptr(unsafe.Pointer(&n[0]))) - if err != nil { - return "", err - } - - for i, c := range n { - if c == 0 { - return string(n[:i]), nil - } - } - return "", errors.New("TIOCPTYGNAME string not NUL-terminated") -} - -func grantpt(f *os.File) error { - return ioctl(f.Fd(), syscall.TIOCPTYGRANT, 0) -} - -func unlockpt(f *os.File) error { - return ioctl(f.Fd(), syscall.TIOCPTYUNLK, 0) -} diff --git a/vendor/github.com/creack/pty/pty_dragonfly.go b/vendor/github.com/creack/pty/pty_dragonfly.go deleted file mode 100644 index aa916aa..0000000 --- a/vendor/github.com/creack/pty/pty_dragonfly.go +++ /dev/null @@ -1,83 +0,0 @@ -//go:build dragonfly -// +build dragonfly - -package pty - -import ( - "errors" - "os" - "strings" - "syscall" - "unsafe" -) - -// same code as pty_darwin.go -func open() (pty, tty *os.File, err error) { - p, err := os.OpenFile("/dev/ptmx", os.O_RDWR, 0) - if err != nil { - return nil, nil, err - } - // In case of error after this point, make sure we close the ptmx fd. - defer func() { - if err != nil { - _ = p.Close() // Best effort. - } - }() - - sname, err := ptsname(p) - if err != nil { - return nil, nil, err - } - - if err := grantpt(p); err != nil { - return nil, nil, err - } - - if err := unlockpt(p); err != nil { - return nil, nil, err - } - - t, err := os.OpenFile(sname, os.O_RDWR, 0) - if err != nil { - return nil, nil, err - } - return p, t, nil -} - -func grantpt(f *os.File) error { - _, err := isptmaster(f.Fd()) - return err -} - -func unlockpt(f *os.File) error { - _, err := isptmaster(f.Fd()) - return err -} - -func isptmaster(fd uintptr) (bool, error) { - err := ioctl(fd, syscall.TIOCISPTMASTER, 0) - return err == nil, err -} - -var ( - emptyFiodgnameArg fiodgnameArg - ioctl_FIODNAME = _IOW('f', 120, unsafe.Sizeof(emptyFiodgnameArg)) -) - -func ptsname(f *os.File) (string, error) { - name := make([]byte, _C_SPECNAMELEN) - fa := fiodgnameArg{Name: (*byte)(unsafe.Pointer(&name[0])), Len: _C_SPECNAMELEN, Pad_cgo_0: [4]byte{0, 0, 0, 0}} - - err := ioctl(f.Fd(), ioctl_FIODNAME, uintptr(unsafe.Pointer(&fa))) - if err != nil { - return "", err - } - - for i, c := range name { - if c == 0 { - s := "/dev/" + string(name[:i]) - return strings.Replace(s, "ptm", "pts", -1), nil - } - } - return "", errors.New("TIOCPTYGNAME string not NUL-terminated") -} diff --git a/vendor/github.com/creack/pty/pty_freebsd.go b/vendor/github.com/creack/pty/pty_freebsd.go deleted file mode 100644 index bcd3b6f..0000000 --- a/vendor/github.com/creack/pty/pty_freebsd.go +++ /dev/null @@ -1,81 +0,0 @@ -//go:build freebsd -// +build freebsd - -package pty - -import ( - "errors" - "os" - "syscall" - "unsafe" -) - -func posixOpenpt(oflag int) (fd int, err error) { - r0, _, e1 := syscall.Syscall(syscall.SYS_POSIX_OPENPT, uintptr(oflag), 0, 0) - fd = int(r0) - if e1 != 0 { - err = e1 - } - return fd, err -} - -func open() (pty, tty *os.File, err error) { - fd, err := posixOpenpt(syscall.O_RDWR | syscall.O_CLOEXEC) - if err != nil { - return nil, nil, err - } - p := os.NewFile(uintptr(fd), "/dev/pts") - // In case of error after this point, make sure we close the pts fd. - defer func() { - if err != nil { - _ = p.Close() // Best effort. - } - }() - - sname, err := ptsname(p) - if err != nil { - return nil, nil, err - } - - t, err := os.OpenFile("/dev/"+sname, os.O_RDWR, 0) - if err != nil { - return nil, nil, err - } - return p, t, nil -} - -func isptmaster(fd uintptr) (bool, error) { - err := ioctl(fd, syscall.TIOCPTMASTER, 0) - return err == nil, err -} - -var ( - emptyFiodgnameArg fiodgnameArg - ioctlFIODGNAME = _IOW('f', 120, unsafe.Sizeof(emptyFiodgnameArg)) -) - -func ptsname(f *os.File) (string, error) { - master, err := isptmaster(f.Fd()) - if err != nil { - return "", err - } - if !master { - return "", syscall.EINVAL - } - - const n = _C_SPECNAMELEN + 1 - var ( - buf = make([]byte, n) - arg = fiodgnameArg{Len: n, Buf: (*byte)(unsafe.Pointer(&buf[0]))} - ) - if err := ioctl(f.Fd(), ioctlFIODGNAME, uintptr(unsafe.Pointer(&arg))); err != nil { - return "", err - } - - for i, c := range buf { - if c == 0 { - return string(buf[:i]), nil - } - } - return "", errors.New("FIODGNAME string not NUL-terminated") -} diff --git a/vendor/github.com/creack/pty/pty_linux.go b/vendor/github.com/creack/pty/pty_linux.go deleted file mode 100644 index a3b368f..0000000 --- a/vendor/github.com/creack/pty/pty_linux.go +++ /dev/null @@ -1,54 +0,0 @@ -//go:build linux -// +build linux - -package pty - -import ( - "os" - "strconv" - "syscall" - "unsafe" -) - -func open() (pty, tty *os.File, err error) { - p, err := os.OpenFile("/dev/ptmx", os.O_RDWR, 0) - if err != nil { - return nil, nil, err - } - // In case of error after this point, make sure we close the ptmx fd. - defer func() { - if err != nil { - _ = p.Close() // Best effort. - } - }() - - sname, err := ptsname(p) - if err != nil { - return nil, nil, err - } - - if err := unlockpt(p); err != nil { - return nil, nil, err - } - - t, err := os.OpenFile(sname, os.O_RDWR|syscall.O_NOCTTY, 0) //nolint:gosec // Expected Open from a variable. - if err != nil { - return nil, nil, err - } - return p, t, nil -} - -func ptsname(f *os.File) (string, error) { - var n _C_uint - err := ioctl(f.Fd(), syscall.TIOCGPTN, uintptr(unsafe.Pointer(&n))) //nolint:gosec // Expected unsafe pointer for Syscall call. - if err != nil { - return "", err - } - return "/dev/pts/" + strconv.Itoa(int(n)), nil -} - -func unlockpt(f *os.File) error { - var u _C_int - // use TIOCSPTLCK with a pointer to zero to clear the lock - return ioctl(f.Fd(), syscall.TIOCSPTLCK, uintptr(unsafe.Pointer(&u))) //nolint:gosec // Expected unsafe pointer for Syscall call. -} diff --git a/vendor/github.com/creack/pty/pty_netbsd.go b/vendor/github.com/creack/pty/pty_netbsd.go deleted file mode 100644 index 2b20d94..0000000 --- a/vendor/github.com/creack/pty/pty_netbsd.go +++ /dev/null @@ -1,69 +0,0 @@ -//go:build netbsd -// +build netbsd - -package pty - -import ( - "errors" - "os" - "syscall" - "unsafe" -) - -func open() (pty, tty *os.File, err error) { - p, err := os.OpenFile("/dev/ptmx", os.O_RDWR, 0) - if err != nil { - return nil, nil, err - } - // In case of error after this point, make sure we close the ptmx fd. - defer func() { - if err != nil { - _ = p.Close() // Best effort. - } - }() - - sname, err := ptsname(p) - if err != nil { - return nil, nil, err - } - - if err := grantpt(p); err != nil { - return nil, nil, err - } - - // In NetBSD unlockpt() does nothing, so it isn't called here. - - t, err := os.OpenFile(sname, os.O_RDWR|syscall.O_NOCTTY, 0) - if err != nil { - return nil, nil, err - } - return p, t, nil -} - -func ptsname(f *os.File) (string, error) { - /* - * from ptsname(3): The ptsname() function is equivalent to: - * struct ptmget pm; - * ioctl(fd, TIOCPTSNAME, &pm) == -1 ? NULL : pm.sn; - */ - var ptm ptmget - if err := ioctl(f.Fd(), uintptr(ioctl_TIOCPTSNAME), uintptr(unsafe.Pointer(&ptm))); err != nil { - return "", err - } - name := make([]byte, len(ptm.Sn)) - for i, c := range ptm.Sn { - name[i] = byte(c) - if c == 0 { - return string(name[:i]), nil - } - } - return "", errors.New("TIOCPTSNAME string not NUL-terminated") -} - -func grantpt(f *os.File) error { - /* - * from grantpt(3): Calling grantpt() is equivalent to: - * ioctl(fd, TIOCGRANTPT, 0); - */ - return ioctl(f.Fd(), uintptr(ioctl_TIOCGRANTPT), 0) -} diff --git a/vendor/github.com/creack/pty/pty_openbsd.go b/vendor/github.com/creack/pty/pty_openbsd.go deleted file mode 100644 index 031367a..0000000 --- a/vendor/github.com/creack/pty/pty_openbsd.go +++ /dev/null @@ -1,36 +0,0 @@ -//go:build openbsd -// +build openbsd - -package pty - -import ( - "os" - "syscall" - "unsafe" -) - -func open() (pty, tty *os.File, err error) { - /* - * from ptm(4): - * The PTMGET command allocates a free pseudo terminal, changes its - * ownership to the caller, revokes the access privileges for all previous - * users, opens the file descriptors for the pty and tty devices and - * returns them to the caller in struct ptmget. - */ - - p, err := os.OpenFile("/dev/ptm", os.O_RDWR|syscall.O_CLOEXEC, 0) - if err != nil { - return nil, nil, err - } - defer p.Close() - - var ptm ptmget - if err := ioctl(p.Fd(), uintptr(ioctl_PTMGET), uintptr(unsafe.Pointer(&ptm))); err != nil { - return nil, nil, err - } - - pty = os.NewFile(uintptr(ptm.Cfd), "/dev/ptm") - tty = os.NewFile(uintptr(ptm.Sfd), "/dev/ptm") - - return pty, tty, nil -} diff --git a/vendor/github.com/creack/pty/pty_solaris.go b/vendor/github.com/creack/pty/pty_solaris.go deleted file mode 100644 index 37f933e..0000000 --- a/vendor/github.com/creack/pty/pty_solaris.go +++ /dev/null @@ -1,152 +0,0 @@ -//go:build solaris -// +build solaris - -package pty - -/* based on: -http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libc/port/gen/pt.c -*/ - -import ( - "errors" - "os" - "strconv" - "syscall" - "unsafe" -) - -func open() (pty, tty *os.File, err error) { - ptmxfd, err := syscall.Open("/dev/ptmx", syscall.O_RDWR|syscall.O_NOCTTY, 0) - if err != nil { - return nil, nil, err - } - p := os.NewFile(uintptr(ptmxfd), "/dev/ptmx") - // In case of error after this point, make sure we close the ptmx fd. - defer func() { - if err != nil { - _ = p.Close() // Best effort. - } - }() - - sname, err := ptsname(p) - if err != nil { - return nil, nil, err - } - - if err := grantpt(p); err != nil { - return nil, nil, err - } - - if err := unlockpt(p); err != nil { - return nil, nil, err - } - - ptsfd, err := syscall.Open(sname, os.O_RDWR|syscall.O_NOCTTY, 0) - if err != nil { - return nil, nil, err - } - t := os.NewFile(uintptr(ptsfd), sname) - - // In case of error after this point, make sure we close the pts fd. - defer func() { - if err != nil { - _ = t.Close() // Best effort. - } - }() - - // pushing terminal driver STREAMS modules as per pts(7) - for _, mod := range []string{"ptem", "ldterm", "ttcompat"} { - if err := streamsPush(t, mod); err != nil { - return nil, nil, err - } - } - - return p, t, nil -} - -func ptsname(f *os.File) (string, error) { - dev, err := ptsdev(f.Fd()) - if err != nil { - return "", err - } - fn := "/dev/pts/" + strconv.FormatInt(int64(dev), 10) - - if err := syscall.Access(fn, 0); err != nil { - return "", err - } - return fn, nil -} - -func unlockpt(f *os.File) error { - istr := strioctl{ - icCmd: UNLKPT, - icTimeout: 0, - icLen: 0, - icDP: nil, - } - return ioctl(f.Fd(), I_STR, uintptr(unsafe.Pointer(&istr))) -} - -func minor(x uint64) uint64 { return x & 0377 } - -func ptsdev(fd uintptr) (uint64, error) { - istr := strioctl{ - icCmd: ISPTM, - icTimeout: 0, - icLen: 0, - icDP: nil, - } - - if err := ioctl(fd, I_STR, uintptr(unsafe.Pointer(&istr))); err != nil { - return 0, err - } - var status syscall.Stat_t - if err := syscall.Fstat(int(fd), &status); err != nil { - return 0, err - } - return uint64(minor(status.Rdev)), nil -} - -type ptOwn struct { - rUID int32 - rGID int32 -} - -func grantpt(f *os.File) error { - if _, err := ptsdev(f.Fd()); err != nil { - return err - } - pto := ptOwn{ - rUID: int32(os.Getuid()), - // XXX should first attempt to get gid of DEFAULT_TTY_GROUP="tty" - rGID: int32(os.Getgid()), - } - istr := strioctl{ - icCmd: OWNERPT, - icTimeout: 0, - icLen: int32(unsafe.Sizeof(strioctl{})), - icDP: unsafe.Pointer(&pto), - } - if err := ioctl(f.Fd(), I_STR, uintptr(unsafe.Pointer(&istr))); err != nil { - return errors.New("access denied") - } - return nil -} - -// streamsPush pushes STREAMS modules if not already done so. -func streamsPush(f *os.File, mod string) error { - buf := []byte(mod) - - // XXX I_FIND is not returning an error when the module - // is already pushed even though truss reports a return - // value of 1. A bug in the Go Solaris syscall interface? - // XXX without this we are at risk of the issue - // https://www.illumos.org/issues/9042 - // but since we are not using libc or XPG4.2, we should not be - // double-pushing modules - - if err := ioctl(f.Fd(), I_FIND, uintptr(unsafe.Pointer(&buf[0]))); err != nil { - return nil - } - return ioctl(f.Fd(), I_PUSH, uintptr(unsafe.Pointer(&buf[0]))) -} diff --git a/vendor/github.com/creack/pty/pty_unsupported.go b/vendor/github.com/creack/pty/pty_unsupported.go deleted file mode 100644 index c771020..0000000 --- a/vendor/github.com/creack/pty/pty_unsupported.go +++ /dev/null @@ -1,12 +0,0 @@ -//go:build !linux && !darwin && !freebsd && !dragonfly && !netbsd && !openbsd && !solaris -// +build !linux,!darwin,!freebsd,!dragonfly,!netbsd,!openbsd,!solaris - -package pty - -import ( - "os" -) - -func open() (pty, tty *os.File, err error) { - return nil, nil, ErrUnsupported -} diff --git a/vendor/github.com/creack/pty/run.go b/vendor/github.com/creack/pty/run.go deleted file mode 100644 index 4755366..0000000 --- a/vendor/github.com/creack/pty/run.go +++ /dev/null @@ -1,57 +0,0 @@ -package pty - -import ( - "os" - "os/exec" - "syscall" -) - -// Start assigns a pseudo-terminal tty os.File to c.Stdin, c.Stdout, -// and c.Stderr, calls c.Start, and returns the File of the tty's -// corresponding pty. -// -// Starts the process in a new session and sets the controlling terminal. -func Start(cmd *exec.Cmd) (*os.File, error) { - return StartWithSize(cmd, nil) -} - -// StartWithAttrs assigns a pseudo-terminal tty os.File to c.Stdin, c.Stdout, -// and c.Stderr, calls c.Start, and returns the File of the tty's -// corresponding pty. -// -// This will resize the pty to the specified size before starting the command if a size is provided. -// The `attrs` parameter overrides the one set in c.SysProcAttr. -// -// This should generally not be needed. Used in some edge cases where it is needed to create a pty -// without a controlling terminal. -func StartWithAttrs(c *exec.Cmd, sz *Winsize, attrs *syscall.SysProcAttr) (*os.File, error) { - pty, tty, err := Open() - if err != nil { - return nil, err - } - defer func() { _ = tty.Close() }() // Best effort. - - if sz != nil { - if err := Setsize(pty, sz); err != nil { - _ = pty.Close() // Best effort. - return nil, err - } - } - if c.Stdout == nil { - c.Stdout = tty - } - if c.Stderr == nil { - c.Stderr = tty - } - if c.Stdin == nil { - c.Stdin = tty - } - - c.SysProcAttr = attrs - - if err := c.Start(); err != nil { - _ = pty.Close() // Best effort. - return nil, err - } - return pty, err -} diff --git a/vendor/github.com/creack/pty/start.go b/vendor/github.com/creack/pty/start.go deleted file mode 100644 index 9b51635..0000000 --- a/vendor/github.com/creack/pty/start.go +++ /dev/null @@ -1,25 +0,0 @@ -//go:build !windows -// +build !windows - -package pty - -import ( - "os" - "os/exec" - "syscall" -) - -// StartWithSize assigns a pseudo-terminal tty os.File to c.Stdin, c.Stdout, -// and c.Stderr, calls c.Start, and returns the File of the tty's -// corresponding pty. -// -// This will resize the pty to the specified size before starting the command. -// Starts the process in a new session and sets the controlling terminal. -func StartWithSize(cmd *exec.Cmd, ws *Winsize) (*os.File, error) { - if cmd.SysProcAttr == nil { - cmd.SysProcAttr = &syscall.SysProcAttr{} - } - cmd.SysProcAttr.Setsid = true - cmd.SysProcAttr.Setctty = true - return StartWithAttrs(cmd, ws, cmd.SysProcAttr) -} diff --git a/vendor/github.com/creack/pty/start_windows.go b/vendor/github.com/creack/pty/start_windows.go deleted file mode 100644 index 7e9530b..0000000 --- a/vendor/github.com/creack/pty/start_windows.go +++ /dev/null @@ -1,19 +0,0 @@ -//go:build windows -// +build windows - -package pty - -import ( - "os" - "os/exec" -) - -// StartWithSize assigns a pseudo-terminal tty os.File to c.Stdin, c.Stdout, -// and c.Stderr, calls c.Start, and returns the File of the tty's -// corresponding pty. -// -// This will resize the pty to the specified size before starting the command. -// Starts the process in a new session and sets the controlling terminal. -func StartWithSize(cmd *exec.Cmd, ws *Winsize) (*os.File, error) { - return nil, ErrUnsupported -} diff --git a/vendor/github.com/creack/pty/test_crosscompile.sh b/vendor/github.com/creack/pty/test_crosscompile.sh deleted file mode 100644 index 47e8b10..0000000 --- a/vendor/github.com/creack/pty/test_crosscompile.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env sh - -# Test script checking that all expected os/arch compile properly. -# Does not actually test the logic, just the compilation so we make sure we don't break code depending on the lib. - -echo2() { - echo $@ >&2 -} - -trap end 0 -end() { - [ "$?" = 0 ] && echo2 "Pass." || (echo2 "Fail."; exit 1) -} - -cross() { - os=$1 - shift - echo2 "Build for $os." - for arch in $@; do - echo2 " - $os/$arch" - GOOS=$os GOARCH=$arch go build - done - echo2 -} - -set -e - -cross linux amd64 386 arm arm64 ppc64 ppc64le s390x mips mipsle mips64 mips64le -cross darwin amd64 arm64 -cross freebsd amd64 386 arm arm64 -cross netbsd amd64 386 arm arm64 -cross openbsd amd64 386 arm arm64 -cross dragonfly amd64 -cross solaris amd64 - -# Not expected to work but should still compile. -cross windows amd64 386 arm - -# TODO: Fix compilation error on openbsd/arm. -# TODO: Merge the solaris PR. - -# Some os/arch require a different compiler. Run in docker. -if ! hash docker; then - # If docker is not present, stop here. - return -fi - -echo2 "Build for linux." -echo2 " - linux/riscv" -docker build -t creack-pty-test -f Dockerfile.riscv . - -# Golang dropped support for darwin 32bits since go1.15. Make sure the lib still compile with go1.14 on those archs. -echo2 "Build for darwin (32bits)." -echo2 " - darwin/386" -docker build -t creack-pty-test -f Dockerfile.golang --build-arg=GOVERSION=1.14 --build-arg=GOOS=darwin --build-arg=GOARCH=386 . -echo2 " - darwin/arm" -docker build -t creack-pty-test -f Dockerfile.golang --build-arg=GOVERSION=1.14 --build-arg=GOOS=darwin --build-arg=GOARCH=arm . - -# Run a single test for an old go version. Would be best with go1.0, but not available on Dockerhub. -# Using 1.6 as it is the base version for the RISCV compiler. -# Would also be better to run all the tests, not just one, need to refactor this file to allow for specifc archs per version. -echo2 "Build for linux - go1.6." -echo2 " - linux/amd64" -docker build -t creack-pty-test -f Dockerfile.golang --build-arg=GOVERSION=1.6 --build-arg=GOOS=linux --build-arg=GOARCH=amd64 . diff --git a/vendor/github.com/creack/pty/winsize.go b/vendor/github.com/creack/pty/winsize.go deleted file mode 100644 index 57323f4..0000000 --- a/vendor/github.com/creack/pty/winsize.go +++ /dev/null @@ -1,27 +0,0 @@ -package pty - -import "os" - -// InheritSize applies the terminal size of pty to tty. This should be run -// in a signal handler for syscall.SIGWINCH to automatically resize the tty when -// the pty receives a window size change notification. -func InheritSize(pty, tty *os.File) error { - size, err := GetsizeFull(pty) - if err != nil { - return err - } - if err := Setsize(tty, size); err != nil { - return err - } - return nil -} - -// Getsize returns the number of rows (lines) and cols (positions -// in each line) in terminal t. -func Getsize(t *os.File) (rows, cols int, err error) { - ws, err := GetsizeFull(t) - if err != nil { - return 0, 0, err - } - return int(ws.Rows), int(ws.Cols), nil -} diff --git a/vendor/github.com/creack/pty/winsize_unix.go b/vendor/github.com/creack/pty/winsize_unix.go deleted file mode 100644 index 5d99c3d..0000000 --- a/vendor/github.com/creack/pty/winsize_unix.go +++ /dev/null @@ -1,35 +0,0 @@ -//go:build !windows -// +build !windows - -package pty - -import ( - "os" - "syscall" - "unsafe" -) - -// Winsize describes the terminal size. -type Winsize struct { - Rows uint16 // ws_row: Number of rows (in cells) - Cols uint16 // ws_col: Number of columns (in cells) - X uint16 // ws_xpixel: Width in pixels - Y uint16 // ws_ypixel: Height in pixels -} - -// Setsize resizes t to s. -func Setsize(t *os.File, ws *Winsize) error { - //nolint:gosec // Expected unsafe pointer for Syscall call. - return ioctl(t.Fd(), syscall.TIOCSWINSZ, uintptr(unsafe.Pointer(ws))) -} - -// GetsizeFull returns the full terminal size description. -func GetsizeFull(t *os.File) (size *Winsize, err error) { - var ws Winsize - - //nolint:gosec // Expected unsafe pointer for Syscall call. - if err := ioctl(t.Fd(), syscall.TIOCGWINSZ, uintptr(unsafe.Pointer(&ws))); err != nil { - return nil, err - } - return &ws, nil -} diff --git a/vendor/github.com/creack/pty/winsize_unsupported.go b/vendor/github.com/creack/pty/winsize_unsupported.go deleted file mode 100644 index 0d21099..0000000 --- a/vendor/github.com/creack/pty/winsize_unsupported.go +++ /dev/null @@ -1,23 +0,0 @@ -//go:build windows -// +build windows - -package pty - -import ( - "os" -) - -// Winsize is a dummy struct to enable compilation on unsupported platforms. -type Winsize struct { - Rows, Cols, X, Y uint16 -} - -// Setsize resizes t to s. -func Setsize(*os.File, *Winsize) error { - return ErrUnsupported -} - -// GetsizeFull returns the full terminal size description. -func GetsizeFull(*os.File) (*Winsize, error) { - return nil, ErrUnsupported -} diff --git a/vendor/github.com/creack/pty/ztypes_386.go b/vendor/github.com/creack/pty/ztypes_386.go deleted file mode 100644 index d126f4a..0000000 --- a/vendor/github.com/creack/pty/ztypes_386.go +++ /dev/null @@ -1,12 +0,0 @@ -//go:build 386 -// +build 386 - -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types.go - -package pty - -type ( - _C_int int32 - _C_uint uint32 -) diff --git a/vendor/github.com/creack/pty/ztypes_amd64.go b/vendor/github.com/creack/pty/ztypes_amd64.go deleted file mode 100644 index 6c4a767..0000000 --- a/vendor/github.com/creack/pty/ztypes_amd64.go +++ /dev/null @@ -1,12 +0,0 @@ -//go:build amd64 -// +build amd64 - -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types.go - -package pty - -type ( - _C_int int32 - _C_uint uint32 -) diff --git a/vendor/github.com/creack/pty/ztypes_arm.go b/vendor/github.com/creack/pty/ztypes_arm.go deleted file mode 100644 index de6fe16..0000000 --- a/vendor/github.com/creack/pty/ztypes_arm.go +++ /dev/null @@ -1,12 +0,0 @@ -//go:build arm -// +build arm - -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types.go - -package pty - -type ( - _C_int int32 - _C_uint uint32 -) diff --git a/vendor/github.com/creack/pty/ztypes_arm64.go b/vendor/github.com/creack/pty/ztypes_arm64.go deleted file mode 100644 index c4f315c..0000000 --- a/vendor/github.com/creack/pty/ztypes_arm64.go +++ /dev/null @@ -1,12 +0,0 @@ -//go:build arm64 -// +build arm64 - -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types.go - -package pty - -type ( - _C_int int32 - _C_uint uint32 -) diff --git a/vendor/github.com/creack/pty/ztypes_dragonfly_amd64.go b/vendor/github.com/creack/pty/ztypes_dragonfly_amd64.go deleted file mode 100644 index 183c421..0000000 --- a/vendor/github.com/creack/pty/ztypes_dragonfly_amd64.go +++ /dev/null @@ -1,17 +0,0 @@ -//go:build amd64 && dragonfly -// +build amd64,dragonfly - -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types_dragonfly.go - -package pty - -const ( - _C_SPECNAMELEN = 0x3f -) - -type fiodgnameArg struct { - Name *byte - Len uint32 - Pad_cgo_0 [4]byte -} diff --git a/vendor/github.com/creack/pty/ztypes_freebsd_386.go b/vendor/github.com/creack/pty/ztypes_freebsd_386.go deleted file mode 100644 index d80dbf7..0000000 --- a/vendor/github.com/creack/pty/ztypes_freebsd_386.go +++ /dev/null @@ -1,16 +0,0 @@ -//go:build 386 && freebsd -// +build 386,freebsd - -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types_freebsd.go - -package pty - -const ( - _C_SPECNAMELEN = 0x3f -) - -type fiodgnameArg struct { - Len int32 - Buf *byte -} diff --git a/vendor/github.com/creack/pty/ztypes_freebsd_amd64.go b/vendor/github.com/creack/pty/ztypes_freebsd_amd64.go deleted file mode 100644 index bfab4e4..0000000 --- a/vendor/github.com/creack/pty/ztypes_freebsd_amd64.go +++ /dev/null @@ -1,17 +0,0 @@ -//go:build amd64 && freebsd -// +build amd64,freebsd - -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types_freebsd.go - -package pty - -const ( - _C_SPECNAMELEN = 0x3f -) - -type fiodgnameArg struct { - Len int32 - Pad_cgo_0 [4]byte - Buf *byte -} diff --git a/vendor/github.com/creack/pty/ztypes_freebsd_arm.go b/vendor/github.com/creack/pty/ztypes_freebsd_arm.go deleted file mode 100644 index 3a8aeae..0000000 --- a/vendor/github.com/creack/pty/ztypes_freebsd_arm.go +++ /dev/null @@ -1,16 +0,0 @@ -//go:build arm && freebsd -// +build arm,freebsd - -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types_freebsd.go - -package pty - -const ( - _C_SPECNAMELEN = 0x3f -) - -type fiodgnameArg struct { - Len int32 - Buf *byte -} diff --git a/vendor/github.com/creack/pty/ztypes_freebsd_arm64.go b/vendor/github.com/creack/pty/ztypes_freebsd_arm64.go deleted file mode 100644 index a839249..0000000 --- a/vendor/github.com/creack/pty/ztypes_freebsd_arm64.go +++ /dev/null @@ -1,16 +0,0 @@ -//go:build arm64 && freebsd -// +build arm64,freebsd - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs types_freebsd.go - -package pty - -const ( - _C_SPECNAMELEN = 0xff -) - -type fiodgnameArg struct { - Len int32 - Buf *byte -} diff --git a/vendor/github.com/creack/pty/ztypes_freebsd_ppc64.go b/vendor/github.com/creack/pty/ztypes_freebsd_ppc64.go deleted file mode 100644 index 5fa102f..0000000 --- a/vendor/github.com/creack/pty/ztypes_freebsd_ppc64.go +++ /dev/null @@ -1,14 +0,0 @@ -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types_freebsd.go - -package pty - -const ( - _C_SPECNAMELEN = 0x3f -) - -type fiodgnameArg struct { - Len int32 - Pad_cgo_0 [4]byte - Buf *byte -} diff --git a/vendor/github.com/creack/pty/ztypes_loong64.go b/vendor/github.com/creack/pty/ztypes_loong64.go deleted file mode 100644 index 3beb5c1..0000000 --- a/vendor/github.com/creack/pty/ztypes_loong64.go +++ /dev/null @@ -1,12 +0,0 @@ -//go:build loong64 -// +build loong64 - -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types.go - -package pty - -type ( - _C_int int32 - _C_uint uint32 -) diff --git a/vendor/github.com/creack/pty/ztypes_mipsx.go b/vendor/github.com/creack/pty/ztypes_mipsx.go deleted file mode 100644 index 2812779..0000000 --- a/vendor/github.com/creack/pty/ztypes_mipsx.go +++ /dev/null @@ -1,13 +0,0 @@ -//go:build (mips || mipsle || mips64 || mips64le) && linux -// +build mips mipsle mips64 mips64le -// +build linux - -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types.go - -package pty - -type ( - _C_int int32 - _C_uint uint32 -) diff --git a/vendor/github.com/creack/pty/ztypes_netbsd_32bit_int.go b/vendor/github.com/creack/pty/ztypes_netbsd_32bit_int.go deleted file mode 100644 index 2ab7c45..0000000 --- a/vendor/github.com/creack/pty/ztypes_netbsd_32bit_int.go +++ /dev/null @@ -1,17 +0,0 @@ -//go:build (386 || amd64 || arm || arm64) && netbsd -// +build 386 amd64 arm arm64 -// +build netbsd - -package pty - -type ptmget struct { - Cfd int32 - Sfd int32 - Cn [1024]int8 - Sn [1024]int8 -} - -var ( - ioctl_TIOCPTSNAME = 0x48087448 - ioctl_TIOCGRANTPT = 0x20007447 -) diff --git a/vendor/github.com/creack/pty/ztypes_openbsd_32bit_int.go b/vendor/github.com/creack/pty/ztypes_openbsd_32bit_int.go deleted file mode 100644 index 1eb0948..0000000 --- a/vendor/github.com/creack/pty/ztypes_openbsd_32bit_int.go +++ /dev/null @@ -1,14 +0,0 @@ -//go:build (386 || amd64 || arm || arm64 || mips64) && openbsd -// +build 386 amd64 arm arm64 mips64 -// +build openbsd - -package pty - -type ptmget struct { - Cfd int32 - Sfd int32 - Cn [16]int8 - Sn [16]int8 -} - -var ioctl_PTMGET = 0x40287401 diff --git a/vendor/github.com/creack/pty/ztypes_ppc64.go b/vendor/github.com/creack/pty/ztypes_ppc64.go deleted file mode 100644 index bbb3da8..0000000 --- a/vendor/github.com/creack/pty/ztypes_ppc64.go +++ /dev/null @@ -1,12 +0,0 @@ -//go:build ppc64 -// +build ppc64 - -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types.go - -package pty - -type ( - _C_int int32 - _C_uint uint32 -) diff --git a/vendor/github.com/creack/pty/ztypes_ppc64le.go b/vendor/github.com/creack/pty/ztypes_ppc64le.go deleted file mode 100644 index 8a4fac3..0000000 --- a/vendor/github.com/creack/pty/ztypes_ppc64le.go +++ /dev/null @@ -1,12 +0,0 @@ -//go:build ppc64le -// +build ppc64le - -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types.go - -package pty - -type ( - _C_int int32 - _C_uint uint32 -) diff --git a/vendor/github.com/creack/pty/ztypes_riscvx.go b/vendor/github.com/creack/pty/ztypes_riscvx.go deleted file mode 100644 index dc5da90..0000000 --- a/vendor/github.com/creack/pty/ztypes_riscvx.go +++ /dev/null @@ -1,12 +0,0 @@ -//go:build riscv || riscv64 -// +build riscv riscv64 - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs types.go - -package pty - -type ( - _C_int int32 - _C_uint uint32 -) diff --git a/vendor/github.com/creack/pty/ztypes_s390x.go b/vendor/github.com/creack/pty/ztypes_s390x.go deleted file mode 100644 index 3433be7..0000000 --- a/vendor/github.com/creack/pty/ztypes_s390x.go +++ /dev/null @@ -1,12 +0,0 @@ -//go:build s390x -// +build s390x - -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types.go - -package pty - -type ( - _C_int int32 - _C_uint uint32 -) diff --git a/vendor/github.com/jameskeane/bcrypt/.gitignore b/vendor/github.com/jameskeane/bcrypt/.gitignore deleted file mode 100644 index c1e1c06..0000000 --- a/vendor/github.com/jameskeane/bcrypt/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -6.out -*.6 -_obj -_test -_testmain.go diff --git a/vendor/github.com/jameskeane/bcrypt/LICENSE b/vendor/github.com/jameskeane/bcrypt/LICENSE deleted file mode 100644 index 555bb71..0000000 --- a/vendor/github.com/jameskeane/bcrypt/LICENSE +++ /dev/null @@ -1,29 +0,0 @@ -Copyright (c) 2011 James Keane . All rights reserved. -Copyright (c) 2006 Damien Miller . -Copyright (c) 2011 ZooWar.com, All rights reserved. - -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 weekendlogic 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/github.com/jameskeane/bcrypt/README b/vendor/github.com/jameskeane/bcrypt/README deleted file mode 100644 index a4d638a..0000000 --- a/vendor/github.com/jameskeane/bcrypt/README +++ /dev/null @@ -1,46 +0,0 @@ -Installation: - goinstall github.com/jameskeane/bcrypt - -Example use: - package main - - import ( - "fmt" - "github.com/jameskeane/bcrypt" - ) - - var password = "WyWihatdyd?frub1" - var bad_password = "just a wild guess" - - func main() { - // generate a random salt with default rounds of complexity - salt, _ := bcrypt.Salt() - - // generate a random salt with 10 rounds of complexity - salt, _ = bcrypt.Salt(10) - - // hash and verify a password with random salt - hash, _ := bcrypt.Hash(password) - if bcrypt.Match(password, hash) { - fmt.Println("They match") - } - - // hash and verify a password with a static salt - hash, _ = bcrypt.Hash(password, salt) - if bcrypt.Match(password, hash) { - fmt.Println("They match") - } - - // verify a random password fails to match the hashed password - if !bcrypt.Match(bad_password, hash) { - fmt.Println("They don't match") - } - } - -Todo: - grep 'TODO' * -r - -Notes: - * This library is derived from jBcrypt by Damien Miller - * bcrypt_test.go is from ZooWar.com - diff --git a/vendor/github.com/jameskeane/bcrypt/bcrypt.go b/vendor/github.com/jameskeane/bcrypt/bcrypt.go deleted file mode 100644 index fe84921..0000000 --- a/vendor/github.com/jameskeane/bcrypt/bcrypt.go +++ /dev/null @@ -1,190 +0,0 @@ -package bcrypt - -import ( - "bytes" - "crypto/rand" - "crypto/subtle" - "encoding/base64" - "errors" - "strconv" - "strings" -) - -var ( - InvalidRounds = errors.New("bcrypt: Invalid rounds parameter") - InvalidSalt = errors.New("bcrypt: Invalid salt supplied") -) - -const ( - MaxRounds = 31 - MinRounds = 4 - DefaultRounds = 12 - SaltLen = 16 - BlowfishRounds = 16 -) - -var enc = base64.NewEncoding("./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") - -// Helper function to build the bcrypt hash string -// payload takes : -// * []byte -> which it base64 encodes it (trims padding "=") and writes it to the buffer -// * string -> which it writes straight to the buffer -func build_bcrypt_str(minor byte, rounds uint, payload ...interface{}) []byte { - rs := bytes.NewBuffer(make([]byte, 0, 61)) - rs.WriteString("$2") - if minor >= 'a' { - rs.WriteByte(minor) - } - - rs.WriteByte('$') - if rounds < 10 { - rs.WriteByte('0') - } - - rs.WriteString(strconv.FormatUint(uint64(rounds), 10)) - rs.WriteByte('$') - for _, p := range payload { - if pb, ok := p.([]byte); ok { - rs.WriteString(strings.TrimRight(enc.EncodeToString(pb), "=")) - } else if ps, ok := p.(string); ok { - rs.WriteString(ps) - } - } - return rs.Bytes() -} - -// Salt generation -func Salt(rounds ...int) (string, error) { - rb, err := SaltBytes(rounds...) - return string(rb), err -} - -func SaltBytes(rounds ...int) (salt []byte, err error) { - r := DefaultRounds - if len(rounds) > 0 { - r = rounds[0] - if r < MinRounds || r > MaxRounds { - return nil, InvalidRounds - } - } - - rnd := make([]byte, SaltLen) - read, err := rand.Read(rnd) - if read != SaltLen || err != nil { - return nil, err - } - - return build_bcrypt_str('a', uint(r), rnd), nil -} - -func consume(r *bytes.Buffer, b byte) bool { - got, err := r.ReadByte() - if err != nil { - return false - } - if got != b { - r.UnreadByte() - return false - } - - return true -} - -func Hash(password string, salt ...string) (ps string, err error) { - var s []byte - var pb []byte - - if len(salt) == 0 { - s, err = SaltBytes() - if err != nil { - return - } - } else if len(salt) > 0 { - s = []byte(salt[0]) - } - - pb, err = HashBytes([]byte(password), s) - return string(pb), err -} - -func HashBytes(password []byte, salt ...[]byte) (hash []byte, err error) { - var s []byte - - if len(salt) == 0 { - s, err = SaltBytes() - if err != nil { - return - } - } else if len(salt) > 0 { - s = salt[0] - } - - // TODO: use a regex? I hear go has bad regex performance a simple FSM seems faster - // "^\\$2([a-z]?)\\$([0-3][0-9])\\$([\\./A-Za-z0-9]{22}+)" - - // Ok, extract the required information - minor := byte(0) - sr := bytes.NewBuffer(s) - - if !consume(sr, '$') || !consume(sr, '2') { - return nil, InvalidSalt - } - - if !consume(sr, '$') { - minor, _ = sr.ReadByte() - if minor != 'a' || !consume(sr, '$') { - return nil, InvalidSalt - } - } - - rounds_bytes := make([]byte, 2) - read, err := sr.Read(rounds_bytes) - if err != nil || read != 2 { - return nil, InvalidSalt - } - - if !consume(sr, '$') { - return nil, InvalidSalt - } - - var rounds64 uint64 - rounds64, err = strconv.ParseUint(string(rounds_bytes), 10, 0) - if err != nil { - return nil, InvalidSalt - } - - rounds := uint(rounds64) - - // TODO: can't we use base64.NewDecoder(enc, sr) ? - salt_bytes := make([]byte, 22) - read, err = sr.Read(salt_bytes) - if err != nil || read != 22 { - return nil, InvalidSalt - } - - var saltb []byte - // encoding/base64 expects 4 byte blocks padded, since bcrypt uses only 22 bytes we need to go up - saltb, err = enc.DecodeString(string(salt_bytes) + "==") - if err != nil { - return nil, err - } - - // cipher expects null terminated input (go initializes everything with zero values so this works) - password_term := make([]byte, len(password)+1) - copy(password_term, password) - - hashed := crypt_raw(password_term, saltb[:SaltLen], rounds) - return build_bcrypt_str(minor, rounds, string(salt_bytes), hashed[:len(bf_crypt_ciphertext)*4-1]), nil -} - -func Match(password, hash string) bool { - return MatchBytes([]byte(password), []byte(hash)) -} - -func MatchBytes(password []byte, hash []byte) bool { - h, err := HashBytes(password, hash) - if err != nil { - return false - } - return subtle.ConstantTimeCompare(h, hash) == 1 -} diff --git a/vendor/github.com/jameskeane/bcrypt/cipher.go b/vendor/github.com/jameskeane/bcrypt/cipher.go deleted file mode 100644 index 00724e4..0000000 --- a/vendor/github.com/jameskeane/bcrypt/cipher.go +++ /dev/null @@ -1,415 +0,0 @@ -package bcrypt - -var p_orig = [18]uint{ - 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, - 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, - 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, - 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, - 0x9216d5d9, 0x8979fb1b, -} - -var s_orig = [1024]uint{ - 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, - 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, - 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, - 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, - 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, - 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, - 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, - 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e, - 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, - 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, - 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, - 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, - 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, - 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677, - 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, - 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, - 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, - 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, - 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, - 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, - 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, - 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, - 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, - 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, - 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, - 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, - 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, - 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, - 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, - 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, - 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, - 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, - 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, - 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, - 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, - 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, - 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, - 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, - 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, - 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, - 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, - 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, - 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, - 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, - 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, - 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, - 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, - 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, - 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, - 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1, - 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, - 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, - 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, - 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, - 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, - 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, - 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, - 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, - 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, - 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, - 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, - 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, - 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, - 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a, - 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, - 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, - 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, - 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, - 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, - 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, - 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, - 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, - 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, - 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, - 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, - 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, - 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, - 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7, - 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, - 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, - 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, - 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, - 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, - 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87, - 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, - 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, - 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, - 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, - 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, - 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, - 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, - 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, - 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, - 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, - 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, - 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, - 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, - 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, - 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, - 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, - 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, - 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, - 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, - 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, - 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, - 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, - 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, - 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, - 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, - 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, - 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, - 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, - 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, - 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, - 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, - 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, - 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, - 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, - 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, - 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061, - 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, - 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, - 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, - 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, - 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, - 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, - 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, - 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7, - 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, - 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, - 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, - 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, - 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, - 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, - 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, - 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, - 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, - 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, - 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, - 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, - 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, - 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, - 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, - 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, - 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, - 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, - 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, - 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, - 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, - 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, - 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, - 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, - 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, - 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, - 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, - 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, - 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, - 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, - 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, - 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, - 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, - 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, - 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, - 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, - 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, - 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, - 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, - 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, - 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, - 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, - 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, - 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, - 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, - 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, - 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, - 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, - 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, - 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, - 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, - 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, - 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, - 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, - 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, - 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62, - 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, - 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, - 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, - 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, - 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, - 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, - 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, - 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0, - 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, - 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe, - 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, - 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, - 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, - 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, - 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, - 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22, - 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, - 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, - 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, - 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, - 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, - 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, - 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, - 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, - 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, - 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, - 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, - 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, - 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, - 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, - 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, - 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, - 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, - 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, - 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, - 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, - 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, - 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, - 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, - 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, - 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, - 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, - 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, - 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, - 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, - 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, - 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, - 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, - 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, - 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, - 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, - 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, - 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, - 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, - 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, - 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, - 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, - 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, - 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, - 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, - 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, - 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, - 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, - 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, - 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, - 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, - 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, - 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, - 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, - 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, - 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, - 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6, -} - -var bf_crypt_ciphertext = [6]uint{ - 0x4f727068, 0x65616e42, 0x65686f6c, - 0x64657253, 0x63727944, 0x6f756274, -} - - -type cipher struct { - P [18]uint - S [1024]uint - data [6]uint -} - -func (c *cipher) encipher(lr []uint, off int) { - l := lr[off] ^ c.P[0] - r := lr[off+1] - - for i := 0; i <= BlowfishRounds-2; i += 2{ - // Feistel substitution on left and right word respectively - r ^= (((c.S[(l>>24)&0xff] + c.S[0x100|((l>>16)&0xff)]) ^ c.S[0x200|((l>>8)&0xff)]) + c.S[0x300|(l&0xff)]) ^ c.P[i+1] - l ^= (((c.S[(r>>24)&0xff] + c.S[0x100|((r>>16)&0xff)]) ^ c.S[0x200|((r>>8)&0xff)]) + c.S[0x300|(r&0xff)]) ^ c.P[i+2] - } - - lr[off] = r ^ c.P[BlowfishRounds+1] - lr[off+1] = l -} -/** - * Cycically extract a word of key material - * @param data the string to extract the data from - * @param off the current offset into the data - * @return the next word of material from data and the next offset into the data - */ -func streamtoword(data []byte, off int) (uint, int) { - var word uint - for i := 0; i < 4; i++ { - word = (word << 8) | uint(data[off]&0xff) - off = (off + 1) % len(data) - } - - return word, off -} - -/** - * Key the Blowfish cipher - * @param key an array containing the key - */ -func (c *cipher) key(key []byte) { - var word uint - off := 0 - lr := []uint{0, 0} - plen := len(c.P) - slen := len(c.S) - - for i := 0; i < plen; i++ { - word, off = streamtoword(key, off) - c.P[i] = c.P[i] ^ word - } - - for i := 0; i < plen; i += 2 { - c.encipher(lr, 0) - c.P[i] = lr[0] - c.P[i+1] = lr[1] - } - - for i := 0; i < slen; i += 2 { - c.encipher(lr, 0) - c.S[i] = lr[0] - c.S[i+1] = lr[1] - } -} - -/** - * Perform the "enhanced key schedule" step described by - * Provos and Mazieres in "A Future-Adaptable Password Scheme" - * http://www.openbsd.org/papers/bcrypt-paper.ps - * @param data salt information - * @param key password information - */ -func (c *cipher) ekskey(data []byte, key []byte) { - var word uint - koff := 0 - doff := 0 - lr := []uint{0, 0} - plen := len(c.P) - slen := len(c.S) - - for i := 0; i < plen; i++ { - word, koff = streamtoword(key, koff) - c.P[i] = c.P[i] ^ word - } - - for i := 0; i < plen; i += 2 { - word, doff = streamtoword(data, doff) - lr[0] ^= word - word, doff = streamtoword(data, doff) - lr[1] ^= word - c.encipher(lr, 0) - c.P[i] = lr[0] - c.P[i+1] = lr[1] - } - - for i := 0; i < slen; i += 2 { - word, doff = streamtoword(data, doff) - lr[0] ^= word - word, doff = streamtoword(data, doff) - lr[1] ^= word - c.encipher(lr, 0) - c.S[i] = lr[0] - c.S[i+1] = lr[1] - } -} - -/** - * Perform the central password hashing step in the - * bcrypt scheme - * @param password the password to hash - * @param salt the binary salt to hash with the password - * @param log_rounds the binary logarithm of the number - * of rounds of hashing to apply - * @return an array containing the binary hashed password - */ -func crypt_raw(password []byte, salt []byte, log_rounds uint) []byte { - c := &cipher{P:p_orig, S:s_orig, data:bf_crypt_ciphertext} - - rounds := 1 << log_rounds - c.ekskey(salt, password) - for i := 0; i < rounds; i++ { - c.key(password) - c.key(salt) - } - - for i := 0; i < 64; i++ { - for j := 0; j < (6 >> 1); j++ { - c.encipher(c.data[:], j<<1) - } - } - - ret := make([]byte, 24) - for i := 0; i < 6; i++ { - k := i<<2 - ret[k] = (byte)((c.data[i] >> 24) & 0xff) - ret[k+1] = (byte)((c.data[i] >> 16) & 0xff) - ret[k+2] = (byte)((c.data[i] >> 8) & 0xff) - ret[k+3] = (byte)(c.data[i] & 0xff) - } - return ret -} diff --git a/vendor/github.com/klauspost/cpuid/v2/.gitignore b/vendor/github.com/klauspost/cpuid/v2/.gitignore deleted file mode 100644 index daf913b..0000000 --- a/vendor/github.com/klauspost/cpuid/v2/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Compiled Object files, Static and Dynamic libs (Shared Objects) -*.o -*.a -*.so - -# Folders -_obj -_test - -# Architecture specific extensions/prefixes -*.[568vq] -[568vq].out - -*.cgo1.go -*.cgo2.c -_cgo_defun.c -_cgo_gotypes.go -_cgo_export.* - -_testmain.go - -*.exe -*.test -*.prof diff --git a/vendor/github.com/klauspost/cpuid/v2/.goreleaser.yml b/vendor/github.com/klauspost/cpuid/v2/.goreleaser.yml deleted file mode 100644 index 944cc00..0000000 --- a/vendor/github.com/klauspost/cpuid/v2/.goreleaser.yml +++ /dev/null @@ -1,74 +0,0 @@ -# This is an example goreleaser.yaml file with some sane defaults. -# Make sure to check the documentation at http://goreleaser.com - -builds: - - - id: "cpuid" - binary: cpuid - main: ./cmd/cpuid/main.go - env: - - CGO_ENABLED=0 - flags: - - -ldflags=-s -w - goos: - - aix - - linux - - freebsd - - netbsd - - windows - - darwin - goarch: - - 386 - - amd64 - - arm64 - goarm: - - 7 - -archives: - - - id: cpuid - name_template: "cpuid-{{ .Os }}_{{ .Arch }}_{{ .Version }}" - replacements: - aix: AIX - darwin: OSX - linux: Linux - windows: Windows - 386: i386 - amd64: x86_64 - freebsd: FreeBSD - netbsd: NetBSD - format_overrides: - - goos: windows - format: zip - files: - - LICENSE -checksum: - name_template: 'checksums.txt' -snapshot: - name_template: "{{ .Tag }}-next" -changelog: - sort: asc - filters: - exclude: - - '^doc:' - - '^docs:' - - '^test:' - - '^tests:' - - '^Update\sREADME.md' - -nfpms: - - - file_name_template: "cpuid_package_{{ .Version }}_{{ .Os }}_{{ .Arch }}" - vendor: Klaus Post - homepage: https://github.com/klauspost/cpuid - maintainer: Klaus Post - description: CPUID Tool - license: BSD 3-Clause - formats: - - deb - - rpm - replacements: - darwin: Darwin - linux: Linux - freebsd: FreeBSD - amd64: x86_64 diff --git a/vendor/github.com/klauspost/cpuid/v2/CONTRIBUTING.txt b/vendor/github.com/klauspost/cpuid/v2/CONTRIBUTING.txt deleted file mode 100644 index 2ef4714..0000000 --- a/vendor/github.com/klauspost/cpuid/v2/CONTRIBUTING.txt +++ /dev/null @@ -1,35 +0,0 @@ -Developer Certificate of Origin -Version 1.1 - -Copyright (C) 2015- Klaus Post & Contributors. -Email: klauspost@gmail.com - -Everyone is permitted to copy and distribute verbatim copies of this -license document, but changing it is not allowed. - - -Developer's Certificate of Origin 1.1 - -By making a contribution to this project, I certify that: - -(a) The contribution was created in whole or in part by me and I - have the right to submit it under the open source license - indicated in the file; or - -(b) The contribution is based upon previous work that, to the best - of my knowledge, is covered under an appropriate open source - license and I have the right under that license to submit that - work with modifications, whether created in whole or in part - by me, under the same open source license (unless I am - permitted to submit under a different license), as indicated - in the file; or - -(c) The contribution was provided directly to me by some other - person who certified (a), (b) or (c) and I have not modified - it. - -(d) I understand and agree that this project and the contribution - are public and that a record of the contribution (including all - personal information I submit with it, including my sign-off) is - maintained indefinitely and may be redistributed consistent with - this project or the open source license(s) involved. diff --git a/vendor/github.com/klauspost/cpuid/v2/LICENSE b/vendor/github.com/klauspost/cpuid/v2/LICENSE deleted file mode 100644 index 5cec7ee..0000000 --- a/vendor/github.com/klauspost/cpuid/v2/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Klaus Post - -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/klauspost/cpuid/v2/README.md b/vendor/github.com/klauspost/cpuid/v2/README.md deleted file mode 100644 index ea7df3d..0000000 --- a/vendor/github.com/klauspost/cpuid/v2/README.md +++ /dev/null @@ -1,258 +0,0 @@ -# cpuid -Package cpuid provides information about the CPU running the current program. - -CPU features are detected on startup, and kept for fast access through the life of the application. -Currently x86 / x64 (AMD64/i386) and ARM (ARM64) is supported, and no external C (cgo) code is used, which should make the library very easy to use. - -You can access the CPU information by accessing the shared CPU variable of the cpuid library. - -Package home: https://github.com/klauspost/cpuid - -[![PkgGoDev](https://pkg.go.dev/badge/github.com/klauspost/cpuid)](https://pkg.go.dev/github.com/klauspost/cpuid/v2) -[![Build Status][3]][4] - -[3]: https://travis-ci.org/klauspost/cpuid.svg?branch=master -[4]: https://travis-ci.org/klauspost/cpuid - -## installing - -`go get -u github.com/klauspost/cpuid/v2` using modules. - -Drop `v2` for others. - -## example - -```Go -package main - -import ( - "fmt" - "strings" - - . "github.com/klauspost/cpuid/v2" -) - -func main() { - // Print basic CPU information: - fmt.Println("Name:", CPU.BrandName) - fmt.Println("PhysicalCores:", CPU.PhysicalCores) - fmt.Println("ThreadsPerCore:", CPU.ThreadsPerCore) - fmt.Println("LogicalCores:", CPU.LogicalCores) - fmt.Println("Family", CPU.Family, "Model:", CPU.Model, "Vendor ID:", CPU.VendorID) - fmt.Println("Features:", strings.Join(CPU.FeatureSet(), ",")) - fmt.Println("Cacheline bytes:", CPU.CacheLine) - fmt.Println("L1 Data Cache:", CPU.Cache.L1D, "bytes") - fmt.Println("L1 Instruction Cache:", CPU.Cache.L1I, "bytes") - fmt.Println("L2 Cache:", CPU.Cache.L2, "bytes") - fmt.Println("L3 Cache:", CPU.Cache.L3, "bytes") - fmt.Println("Frequency", CPU.Hz, "hz") - - // Test if we have these specific features: - if CPU.Supports(SSE, SSE2) { - fmt.Println("We have Streaming SIMD 2 Extensions") - } -} -``` - -Sample output: -``` ->go run main.go -Name: AMD Ryzen 9 3950X 16-Core Processor -PhysicalCores: 16 -ThreadsPerCore: 2 -LogicalCores: 32 -Family 23 Model: 113 Vendor ID: AMD -Features: ADX,AESNI,AVX,AVX2,BMI1,BMI2,CLMUL,CMOV,CX16,F16C,FMA3,HTT,HYPERVISOR,LZCNT,MMX,MMXEXT,NX,POPCNT,RDRAND,RDSEED,RDTSCP,SHA,SSE,SSE2,SSE3,SSE4,SSE42,SSE4A,SSSE3 -Cacheline bytes: 64 -L1 Data Cache: 32768 bytes -L1 Instruction Cache: 32768 bytes -L2 Cache: 524288 bytes -L3 Cache: 16777216 bytes -Frequency 0 hz -We have Streaming SIMD 2 Extensions -``` - -# usage - -The `cpuid.CPU` provides access to CPU features. Use `cpuid.CPU.Supports()` to check for CPU features. -A faster `cpuid.CPU.Has()` is provided which will usually be inlined by the gc compiler. - -Note that for some cpu/os combinations some features will not be detected. -`amd64` has rather good support and should work reliably on all platforms. - -Note that hypervisors may not pass through all CPU features. - -## arm64 feature detection - -Not all operating systems provide ARM features directly -and there is no safe way to do so for the rest. - -Currently `arm64/linux` and `arm64/freebsd` should be quite reliable. -`arm64/darwin` adds features expected from the M1 processor, but a lot remains undetected. - -A `DetectARM()` can be used if you are able to control your deployment, -it will detect CPU features, but may crash if the OS doesn't intercept the calls. -A `-cpu.arm` flag for detecting unsafe ARM features can be added. See below. - -Note that currently only features are detected on ARM, -no additional information is currently available. - -## flags - -It is possible to add flags that affects cpu detection. - -For this the `Flags()` command is provided. - -This must be called *before* `flag.Parse()` AND after the flags have been parsed `Detect()` must be called. - -This means that any detection used in `init()` functions will not contain these flags. - -Example: - -```Go -package main - -import ( - "flag" - "fmt" - "strings" - - "github.com/klauspost/cpuid/v2" -) - -func main() { - cpuid.Flags() - flag.Parse() - cpuid.Detect() - - // Test if we have these specific features: - if cpuid.CPU.Supports(cpuid.SSE, cpuid.SSE2) { - fmt.Println("We have Streaming SIMD 2 Extensions") - } -} -``` - -## commandline - -Download as binary from: https://github.com/klauspost/cpuid/releases - -Install from source: - -`go install github.com/klauspost/cpuid/v2/cmd/cpuid@latest` - -### Example - -``` -λ cpuid -Name: AMD Ryzen 9 3950X 16-Core Processor -Vendor String: AuthenticAMD -Vendor ID: AMD -PhysicalCores: 16 -Threads Per Core: 2 -Logical Cores: 32 -CPU Family 23 Model: 113 -Features: ADX,AESNI,AVX,AVX2,BMI1,BMI2,CLMUL,CLZERO,CMOV,CMPXCHG8,CPBOOST,CX16,F16C,FMA3,FXSR,FXSROPT,HTT,HYPERVISOR,LAHF,LZCNT,MCAOVERFLOW,MMX,MMXEXT,MOVBE,NX,OSXSAVE,POPCNT,RDRAND,RDSEED,RDTSCP,SCE,SHA,SSE,SSE2,SSE3,SSE4,SSE42,SSE4A,SSSE3,SUCCOR,X87,XSAVE -Microarchitecture level: 3 -Cacheline bytes: 64 -L1 Instruction Cache: 32768 bytes -L1 Data Cache: 32768 bytes -L2 Cache: 524288 bytes -L3 Cache: 16777216 bytes - -``` -### JSON Output: - -``` -λ cpuid --json -{ - "BrandName": "AMD Ryzen 9 3950X 16-Core Processor", - "VendorID": 2, - "VendorString": "AuthenticAMD", - "PhysicalCores": 16, - "ThreadsPerCore": 2, - "LogicalCores": 32, - "Family": 23, - "Model": 113, - "CacheLine": 64, - "Hz": 0, - "BoostFreq": 0, - "Cache": { - "L1I": 32768, - "L1D": 32768, - "L2": 524288, - "L3": 16777216 - }, - "SGX": { - "Available": false, - "LaunchControl": false, - "SGX1Supported": false, - "SGX2Supported": false, - "MaxEnclaveSizeNot64": 0, - "MaxEnclaveSize64": 0, - "EPCSections": null - }, - "Features": [ - "ADX", - "AESNI", - "AVX", - "AVX2", - "BMI1", - "BMI2", - "CLMUL", - "CLZERO", - "CMOV", - "CMPXCHG8", - "CPBOOST", - "CX16", - "F16C", - "FMA3", - "FXSR", - "FXSROPT", - "HTT", - "HYPERVISOR", - "LAHF", - "LZCNT", - "MCAOVERFLOW", - "MMX", - "MMXEXT", - "MOVBE", - "NX", - "OSXSAVE", - "POPCNT", - "RDRAND", - "RDSEED", - "RDTSCP", - "SCE", - "SHA", - "SSE", - "SSE2", - "SSE3", - "SSE4", - "SSE42", - "SSE4A", - "SSSE3", - "SUCCOR", - "X87", - "XSAVE" - ], - "X64Level": 3 -} -``` - -### Check CPU microarch level - -``` -λ cpuid --check-level=3 -2022/03/18 17:04:40 AMD Ryzen 9 3950X 16-Core Processor -2022/03/18 17:04:40 Microarchitecture level 3 is supported. Max level is 3. -Exit Code 0 - -λ cpuid --check-level=4 -2022/03/18 17:06:18 AMD Ryzen 9 3950X 16-Core Processor -2022/03/18 17:06:18 Microarchitecture level 4 not supported. Max level is 3. -Exit Code 1 -``` - -# license - -This code is published under an MIT license. See LICENSE file for more information. diff --git a/vendor/github.com/klauspost/cpuid/v2/cpuid.go b/vendor/github.com/klauspost/cpuid/v2/cpuid.go deleted file mode 100644 index 27f3325..0000000 --- a/vendor/github.com/klauspost/cpuid/v2/cpuid.go +++ /dev/null @@ -1,1291 +0,0 @@ -// Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. - -// Package cpuid provides information about the CPU running the current program. -// -// CPU features are detected on startup, and kept for fast access through the life of the application. -// Currently x86 / x64 (AMD64) as well as arm64 is supported. -// -// You can access the CPU information by accessing the shared CPU variable of the cpuid library. -// -// Package home: https://github.com/klauspost/cpuid -package cpuid - -import ( - "flag" - "fmt" - "math" - "math/bits" - "os" - "runtime" - "strings" -) - -// AMD refererence: https://www.amd.com/system/files/TechDocs/25481.pdf -// and Processor Programming Reference (PPR) - -// Vendor is a representation of a CPU vendor. -type Vendor int - -const ( - VendorUnknown Vendor = iota - Intel - AMD - VIA - Transmeta - NSC - KVM // Kernel-based Virtual Machine - MSVM // Microsoft Hyper-V or Windows Virtual PC - VMware - XenHVM - Bhyve - Hygon - SiS - RDC - - Ampere - ARM - Broadcom - Cavium - DEC - Fujitsu - Infineon - Motorola - NVIDIA - AMCC - Qualcomm - Marvell - - lastVendor -) - -//go:generate stringer -type=FeatureID,Vendor - -// FeatureID is the ID of a specific cpu feature. -type FeatureID int - -const ( - // Keep index -1 as unknown - UNKNOWN = -1 - - // Add features - ADX FeatureID = iota // Intel ADX (Multi-Precision Add-Carry Instruction Extensions) - AESNI // Advanced Encryption Standard New Instructions - AMD3DNOW // AMD 3DNOW - AMD3DNOWEXT // AMD 3DNowExt - AMXBF16 // Tile computational operations on BFLOAT16 numbers - AMXINT8 // Tile computational operations on 8-bit integers - AMXTILE // Tile architecture - AVX // AVX functions - AVX2 // AVX2 functions - AVX512BF16 // AVX-512 BFLOAT16 Instructions - AVX512BITALG // AVX-512 Bit Algorithms - AVX512BW // AVX-512 Byte and Word Instructions - AVX512CD // AVX-512 Conflict Detection Instructions - AVX512DQ // AVX-512 Doubleword and Quadword Instructions - AVX512ER // AVX-512 Exponential and Reciprocal Instructions - AVX512F // AVX-512 Foundation - AVX512FP16 // AVX-512 FP16 Instructions - AVX512IFMA // AVX-512 Integer Fused Multiply-Add Instructions - AVX512PF // AVX-512 Prefetch Instructions - AVX512VBMI // AVX-512 Vector Bit Manipulation Instructions - AVX512VBMI2 // AVX-512 Vector Bit Manipulation Instructions, Version 2 - AVX512VL // AVX-512 Vector Length Extensions - AVX512VNNI // AVX-512 Vector Neural Network Instructions - AVX512VP2INTERSECT // AVX-512 Intersect for D/Q - AVX512VPOPCNTDQ // AVX-512 Vector Population Count Doubleword and Quadword - AVXSLOW // Indicates the CPU performs 2 128 bit operations instead of one - AVXVNNI // AVX (VEX encoded) VNNI neural network instructions - BMI1 // Bit Manipulation Instruction Set 1 - BMI2 // Bit Manipulation Instruction Set 2 - CETIBT // Intel CET Indirect Branch Tracking - CETSS // Intel CET Shadow Stack - CLDEMOTE // Cache Line Demote - CLMUL // Carry-less Multiplication - CLZERO // CLZERO instruction supported - CMOV // i686 CMOV - CMPSB_SCADBS_SHORT // Fast short CMPSB and SCASB - CMPXCHG8 // CMPXCHG8 instruction - CPBOOST // Core Performance Boost - CX16 // CMPXCHG16B Instruction - ENQCMD // Enqueue Command - ERMS // Enhanced REP MOVSB/STOSB - F16C // Half-precision floating-point conversion - FMA3 // Intel FMA 3. Does not imply AVX. - FMA4 // Bulldozer FMA4 functions - FXSR // FXSAVE, FXRESTOR instructions, CR4 bit 9 - FXSROPT // FXSAVE/FXRSTOR optimizations - GFNI // Galois Field New Instructions. May require other features (AVX, AVX512VL,AVX512F) based on usage. - HLE // Hardware Lock Elision - HRESET // If set CPU supports history reset and the IA32_HRESET_ENABLE MSR - HTT // Hyperthreading (enabled) - HWA // Hardware assert supported. Indicates support for MSRC001_10 - HYPERVISOR // This bit has been reserved by Intel & AMD for use by hypervisors - IBPB // Indirect Branch Restricted Speculation (IBRS) and Indirect Branch Predictor Barrier (IBPB) - IBS // Instruction Based Sampling (AMD) - IBSBRNTRGT // Instruction Based Sampling Feature (AMD) - IBSFETCHSAM // Instruction Based Sampling Feature (AMD) - IBSFFV // Instruction Based Sampling Feature (AMD) - IBSOPCNT // Instruction Based Sampling Feature (AMD) - IBSOPCNTEXT // Instruction Based Sampling Feature (AMD) - IBSOPSAM // Instruction Based Sampling Feature (AMD) - IBSRDWROPCNT // Instruction Based Sampling Feature (AMD) - IBSRIPINVALIDCHK // Instruction Based Sampling Feature (AMD) - IBS_PREVENTHOST // Disallowing IBS use by the host supported - INT_WBINVD // WBINVD/WBNOINVD are interruptible. - INVLPGB // NVLPGB and TLBSYNC instruction supported - LAHF // LAHF/SAHF in long mode - LAM // If set, CPU supports Linear Address Masking - LBRVIRT // LBR virtualization - LZCNT // LZCNT instruction - MCAOVERFLOW // MCA overflow recovery support. - MCOMMIT // MCOMMIT instruction supported - MMX // standard MMX - MMXEXT // SSE integer functions or AMD MMX ext - MOVBE // MOVBE instruction (big-endian) - MOVDIR64B // Move 64 Bytes as Direct Store - MOVDIRI // Move Doubleword as Direct Store - MOVSB_ZL // Fast Zero-Length MOVSB - MPX // Intel MPX (Memory Protection Extensions) - MSRIRC // Instruction Retired Counter MSR available - MSR_PAGEFLUSH // Page Flush MSR available - NRIPS // Indicates support for NRIP save on VMEXIT - NX // NX (No-Execute) bit - OSXSAVE // XSAVE enabled by OS - PCONFIG // PCONFIG for Intel Multi-Key Total Memory Encryption - POPCNT // POPCNT instruction - RDPRU // RDPRU instruction supported - RDRAND // RDRAND instruction is available - RDSEED // RDSEED instruction is available - RDTSCP // RDTSCP Instruction - RTM // Restricted Transactional Memory - RTM_ALWAYS_ABORT // Indicates that the loaded microcode is forcing RTM abort. - SERIALIZE // Serialize Instruction Execution - SEV // AMD Secure Encrypted Virtualization supported - SEV_64BIT // AMD SEV guest execution only allowed from a 64-bit host - SEV_ALTERNATIVE // AMD SEV Alternate Injection supported - SEV_DEBUGSWAP // Full debug state swap supported for SEV-ES guests - SEV_ES // AMD SEV Encrypted State supported - SEV_RESTRICTED // AMD SEV Restricted Injection supported - SEV_SNP // AMD SEV Secure Nested Paging supported - SGX // Software Guard Extensions - SGXLC // Software Guard Extensions Launch Control - SHA // Intel SHA Extensions - SME // AMD Secure Memory Encryption supported - SME_COHERENT // AMD Hardware cache coherency across encryption domains enforced - SSE // SSE functions - SSE2 // P4 SSE functions - SSE3 // Prescott SSE3 functions - SSE4 // Penryn SSE4.1 functions - SSE42 // Nehalem SSE4.2 functions - SSE4A // AMD Barcelona microarchitecture SSE4a instructions - SSSE3 // Conroe SSSE3 functions - STIBP // Single Thread Indirect Branch Predictors - STOSB_SHORT // Fast short STOSB - SUCCOR // Software uncorrectable error containment and recovery capability. - SVM // AMD Secure Virtual Machine - SVMDA // Indicates support for the SVM decode assists. - SVMFBASID // SVM, Indicates that TLB flush events, including CR3 writes and CR4.PGE toggles, flush only the current ASID's TLB entries. Also indicates support for the extended VMCBTLB_Control - SVML // AMD SVM lock. Indicates support for SVM-Lock. - SVMNP // AMD SVM nested paging - SVMPF // SVM pause intercept filter. Indicates support for the pause intercept filter - SVMPFT // SVM PAUSE filter threshold. Indicates support for the PAUSE filter cycle count threshold - SYSCALL // System-Call Extension (SCE): SYSCALL and SYSRET instructions. - SYSEE // SYSENTER and SYSEXIT instructions - TBM // AMD Trailing Bit Manipulation - TOPEXT // TopologyExtensions: topology extensions support. Indicates support for CPUID Fn8000_001D_EAX_x[N:0]-CPUID Fn8000_001E_EDX. - 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. - 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. - VMCBCLEAN // VMCB clean bits. Indicates support for VMCB clean bits. - VMPL // AMD VM Permission Levels supported - VMSA_REGPROT // AMD VMSA Register Protection supported - VMX // Virtual Machine Extensions - VPCLMULQDQ // Carry-Less Multiplication Quadword. Requires AVX for 3 register versions. - VTE // AMD Virtual Transparent Encryption supported - WAITPKG // TPAUSE, UMONITOR, UMWAIT - WBNOINVD // Write Back and Do Not Invalidate Cache - X87 // FPU - XGETBV1 // Supports XGETBV with ECX = 1 - XOP // Bulldozer XOP functions - XSAVE // XSAVE, XRESTOR, XSETBV, XGETBV - XSAVEC // Supports XSAVEC and the compacted form of XRSTOR. - XSAVEOPT // XSAVEOPT available - XSAVES // Supports XSAVES/XRSTORS and IA32_XSS - - // ARM features: - AESARM // AES instructions - ARMCPUID // Some CPU ID registers readable at user-level - ASIMD // Advanced SIMD - ASIMDDP // SIMD Dot Product - ASIMDHP // Advanced SIMD half-precision floating point - ASIMDRDM // Rounding Double Multiply Accumulate/Subtract (SQRDMLAH/SQRDMLSH) - ATOMICS // Large System Extensions (LSE) - 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 - FP // Single-precision and double-precision floating point - FPHP // Half-precision floating point - GPA // Generic Pointer Authentication - JSCVT // Javascript-style double->int convert (FJCVTZS) - LRCPC // Weaker release consistency (LDAPR, etc) - PMULL // Polynomial Multiply instructions (PMULL/PMULL2) - SHA1 // SHA-1 instructions (SHA1C, etc) - SHA2 // SHA-2 instructions (SHA256H, etc) - SHA3 // SHA-3 instructions (EOR3, RAXI, XAR, BCAX) - SHA512 // SHA512 instructions - SM3 // SM3 instructions - SM4 // SM4 instructions - SVE // Scalable Vector Extension - // Keep it last. It automatically defines the size of []flagSet - lastID - - firstID FeatureID = UNKNOWN + 1 -) - -// CPUInfo contains information about the detected system CPU. -type CPUInfo struct { - BrandName string // Brand name reported by the CPU - VendorID Vendor // Comparable CPU vendor ID - VendorString string // Raw vendor string. - featureSet flagSet // Features of the CPU - PhysicalCores int // Number of physical processor cores in your CPU. Will be 0 if undetectable. - ThreadsPerCore int // Number of threads per physical core. Will be 1 if undetectable. - LogicalCores int // Number of physical cores times threads that can run on each core through the use of hyperthreading. Will be 0 if undetectable. - Family int // CPU family number - Model int // CPU model number - Stepping int // CPU stepping info - CacheLine int // Cache line size in bytes. Will be 0 if undetectable. - Hz int64 // Clock speed, if known, 0 otherwise. Will attempt to contain base clock speed. - BoostFreq int64 // Max clock speed, if known, 0 otherwise - Cache struct { - L1I int // L1 Instruction Cache (per core or shared). Will be -1 if undetected - L1D int // L1 Data Cache (per core or shared). Will be -1 if undetected - L2 int // L2 Cache (per core or shared). Will be -1 if undetected - L3 int // L3 Cache (per core, per ccx or shared). Will be -1 if undetected - } - SGX SGXSupport - maxFunc uint32 - maxExFunc 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) -var rdtscpAsm func() (eax, ebx, ecx, edx uint32) -var darwinHasAVX512 = func() bool { return false } - -// CPU contains information about the CPU as detected on startup, -// or when Detect last was called. -// -// Use this as the primary entry point to you data. -var CPU CPUInfo - -func init() { - initCPU() - Detect() -} - -// Detect will re-detect current CPU info. -// This will replace the content of the exported CPU variable. -// -// Unless you expect the CPU to change while you are running your program -// you should not need to call this function. -// If you call this, you must ensure that no other goroutine is accessing the -// exported CPU variable. -func Detect() { - // Set defaults - CPU.ThreadsPerCore = 1 - CPU.Cache.L1I = -1 - CPU.Cache.L1D = -1 - CPU.Cache.L2 = -1 - CPU.Cache.L3 = -1 - safe := true - if detectArmFlag != nil { - safe = !*detectArmFlag - } - addInfo(&CPU, safe) - if displayFeats != nil && *displayFeats { - fmt.Println("cpu features:", strings.Join(CPU.FeatureSet(), ",")) - // Exit with non-zero so tests will print value. - os.Exit(1) - } - if disableFlag != nil { - s := strings.Split(*disableFlag, ",") - for _, feat := range s { - feat := ParseFeature(strings.TrimSpace(feat)) - if feat != UNKNOWN { - CPU.featureSet.unset(feat) - } - } - } -} - -// DetectARM will detect ARM64 features. -// This is NOT done automatically since it can potentially crash -// if the OS does not handle the command. -// If in the future this can be done safely this function may not -// do anything. -func DetectARM() { - addInfo(&CPU, false) -} - -var detectArmFlag *bool -var displayFeats *bool -var disableFlag *string - -// Flags will enable flags. -// This must be called *before* flag.Parse AND -// Detect must be called after the flags have been parsed. -// Note that this means that any detection used in init() functions -// will not contain these flags. -func Flags() { - disableFlag = flag.String("cpu.disable", "", "disable cpu features; comma separated list") - displayFeats = flag.Bool("cpu.features", false, "lists cpu features and exits") - detectArmFlag = flag.Bool("cpu.arm", false, "allow ARM features to be detected; can potentially crash") -} - -// Supports returns whether the CPU supports all of the requested features. -func (c CPUInfo) Supports(ids ...FeatureID) bool { - for _, id := range ids { - if !c.featureSet.inSet(id) { - return false - } - } - return true -} - -// Has allows for checking a single feature. -// Should be inlined by the compiler. -func (c CPUInfo) Has(id FeatureID) bool { - return c.featureSet.inSet(id) -} - -// AnyOf returns whether the CPU supports one or more of the requested features. -func (c CPUInfo) AnyOf(ids ...FeatureID) bool { - for _, id := range ids { - if c.featureSet.inSet(id) { - return true - } - } - return false -} - -// https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels -var level1Features = flagSetWith(CMOV, CMPXCHG8, X87, FXSR, MMX, SYSCALL, SSE, SSE2) -var level2Features = flagSetWith(CMOV, CMPXCHG8, X87, FXSR, MMX, SYSCALL, SSE, SSE2, CX16, LAHF, POPCNT, SSE3, SSE4, SSE42, SSSE3) -var level3Features = flagSetWith(CMOV, CMPXCHG8, X87, FXSR, MMX, SYSCALL, SSE, SSE2, CX16, LAHF, POPCNT, SSE3, SSE4, SSE42, SSSE3, AVX, AVX2, BMI1, BMI2, F16C, FMA3, LZCNT, MOVBE, OSXSAVE) -var level4Features = flagSetWith(CMOV, CMPXCHG8, X87, FXSR, MMX, SYSCALL, SSE, SSE2, CX16, LAHF, POPCNT, SSE3, SSE4, SSE42, SSSE3, AVX, AVX2, BMI1, BMI2, F16C, FMA3, LZCNT, MOVBE, OSXSAVE, AVX512F, AVX512BW, AVX512CD, AVX512DQ, AVX512VL) - -// X64Level returns the microarchitecture level detected on the CPU. -// If features are lacking or non x64 mode, 0 is returned. -// See https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels -func (c CPUInfo) X64Level() int { - if c.featureSet.hasSet(level4Features) { - return 4 - } - if c.featureSet.hasSet(level3Features) { - return 3 - } - if c.featureSet.hasSet(level2Features) { - return 2 - } - if c.featureSet.hasSet(level1Features) { - return 1 - } - return 0 -} - -// Disable will disable one or several features. -func (c *CPUInfo) Disable(ids ...FeatureID) bool { - for _, id := range ids { - c.featureSet.unset(id) - } - return true -} - -// Enable will disable one or several features even if they were undetected. -// This is of course not recommended for obvious reasons. -func (c *CPUInfo) Enable(ids ...FeatureID) bool { - for _, id := range ids { - c.featureSet.set(id) - } - return true -} - -// IsVendor returns true if vendor is recognized as Intel -func (c CPUInfo) IsVendor(v Vendor) bool { - return c.VendorID == v -} - -// FeatureSet returns all available features as strings. -func (c CPUInfo) FeatureSet() []string { - s := make([]string, 0, c.featureSet.nEnabled()) - s = append(s, c.featureSet.Strings()...) - return s -} - -// RTCounter returns the 64-bit time-stamp counter -// Uses the RDTSCP instruction. The value 0 is returned -// if the CPU does not support the instruction. -func (c CPUInfo) RTCounter() uint64 { - if !c.Supports(RDTSCP) { - return 0 - } - a, _, _, d := rdtscpAsm() - return uint64(a) | (uint64(d) << 32) -} - -// Ia32TscAux returns the IA32_TSC_AUX part of the RDTSCP. -// This variable is OS dependent, but on Linux contains information -// about the current cpu/core the code is running on. -// If the RDTSCP instruction isn't supported on the CPU, the value 0 is returned. -func (c CPUInfo) Ia32TscAux() uint32 { - if !c.Supports(RDTSCP) { - return 0 - } - _, _, ecx, _ := rdtscpAsm() - return ecx -} - -// LogicalCPU will return the Logical CPU the code is currently executing on. -// This is likely to change when the OS re-schedules the running thread -// to another CPU. -// If the current core cannot be detected, -1 will be returned. -func (c CPUInfo) LogicalCPU() int { - if c.maxFunc < 1 { - return -1 - } - _, ebx, _, _ := cpuid(1) - return int(ebx >> 24) -} - -// frequencies tries to compute the clock speed of the CPU. If leaf 15 is -// supported, use it, otherwise parse the brand string. Yes, really. -func (c *CPUInfo) frequencies() { - c.Hz, c.BoostFreq = 0, 0 - mfi := maxFunctionID() - if mfi >= 0x15 { - eax, ebx, ecx, _ := cpuid(0x15) - if eax != 0 && ebx != 0 && ecx != 0 { - c.Hz = (int64(ecx) * int64(ebx)) / int64(eax) - } - } - if mfi >= 0x16 { - a, b, _, _ := cpuid(0x16) - // Base... - if a&0xffff > 0 { - c.Hz = int64(a&0xffff) * 1_000_000 - } - // Boost... - if b&0xffff > 0 { - c.BoostFreq = int64(b&0xffff) * 1_000_000 - } - } - if c.Hz > 0 { - return - } - - // computeHz determines the official rated speed of a CPU from its brand - // string. This insanity is *actually the official documented way to do - // this according to Intel*, prior to leaf 0x15 existing. The official - // documentation only shows this working for exactly `x.xx` or `xxxx` - // cases, e.g., `2.50GHz` or `1300MHz`; this parser will accept other - // sizes. - model := c.BrandName - hz := strings.LastIndex(model, "Hz") - if hz < 3 { - return - } - var multiplier int64 - switch model[hz-1] { - case 'M': - multiplier = 1000 * 1000 - case 'G': - multiplier = 1000 * 1000 * 1000 - case 'T': - multiplier = 1000 * 1000 * 1000 * 1000 - } - if multiplier == 0 { - return - } - freq := int64(0) - divisor := int64(0) - decimalShift := int64(1) - var i int - for i = hz - 2; i >= 0 && model[i] != ' '; i-- { - if model[i] >= '0' && model[i] <= '9' { - freq += int64(model[i]-'0') * decimalShift - decimalShift *= 10 - } else if model[i] == '.' { - if divisor != 0 { - return - } - divisor = decimalShift - } else { - return - } - } - // we didn't find a space - if i < 0 { - return - } - if divisor != 0 { - c.Hz = (freq * multiplier) / divisor - return - } - c.Hz = freq * multiplier -} - -// VM Will return true if the cpu id indicates we are in -// a virtual machine. -func (c CPUInfo) VM() bool { - return CPU.featureSet.inSet(HYPERVISOR) -} - -// flags contains detected cpu features and characteristics -type flags uint64 - -// log2(bits_in_uint64) -const flagBitsLog2 = 6 -const flagBits = 1 << flagBitsLog2 -const flagMask = flagBits - 1 - -// flagSet contains detected cpu features and characteristics in an array of flags -type flagSet [(lastID + flagMask) / flagBits]flags - -func (s flagSet) inSet(feat FeatureID) bool { - return s[feat>>flagBitsLog2]&(1<<(feat&flagMask)) != 0 -} - -func (s *flagSet) set(feat FeatureID) { - s[feat>>flagBitsLog2] |= 1 << (feat & flagMask) -} - -// setIf will set a feature if boolean is true. -func (s *flagSet) setIf(cond bool, features ...FeatureID) { - if cond { - for _, offset := range features { - s[offset>>flagBitsLog2] |= 1 << (offset & flagMask) - } - } -} - -func (s *flagSet) unset(offset FeatureID) { - bit := flags(1 << (offset & flagMask)) - s[offset>>flagBitsLog2] = s[offset>>flagBitsLog2] & ^bit -} - -// or with another flagset. -func (s *flagSet) or(other flagSet) { - for i, v := range other[:] { - s[i] |= v - } -} - -// hasSet returns whether all features are present. -func (s flagSet) hasSet(other flagSet) bool { - for i, v := range other[:] { - if s[i]&v != v { - return false - } - } - return true -} - -// nEnabled will return the number of enabled flags. -func (s flagSet) nEnabled() (n int) { - for _, v := range s[:] { - n += bits.OnesCount64(uint64(v)) - } - return n -} - -func flagSetWith(feat ...FeatureID) flagSet { - var res flagSet - for _, f := range feat { - res.set(f) - } - return res -} - -// ParseFeature will parse the string and return the ID of the matching feature. -// Will return UNKNOWN if not found. -func ParseFeature(s string) FeatureID { - s = strings.ToUpper(s) - for i := firstID; i < lastID; i++ { - if i.String() == s { - return i - } - } - return UNKNOWN -} - -// Strings returns an array of the detected features for FlagsSet. -func (s flagSet) Strings() []string { - if len(s) == 0 { - return []string{""} - } - r := make([]string, 0) - for i := firstID; i < lastID; i++ { - if s.inSet(i) { - r = append(r, i.String()) - } - } - return r -} - -func maxExtendedFunction() uint32 { - eax, _, _, _ := cpuid(0x80000000) - return eax -} - -func maxFunctionID() uint32 { - a, _, _, _ := cpuid(0) - return a -} - -func brandName() string { - if maxExtendedFunction() >= 0x80000004 { - v := make([]uint32, 0, 48) - for i := uint32(0); i < 3; i++ { - a, b, c, d := cpuid(0x80000002 + i) - v = append(v, a, b, c, d) - } - return strings.Trim(string(valAsString(v...)), " ") - } - return "unknown" -} - -func threadsPerCore() int { - mfi := maxFunctionID() - vend, _ := vendorID() - - if mfi < 0x4 || (vend != Intel && vend != AMD) { - return 1 - } - - if mfi < 0xb { - if vend != Intel { - return 1 - } - _, b, _, d := cpuid(1) - if (d & (1 << 28)) != 0 { - // v will contain logical core count - v := (b >> 16) & 255 - if v > 1 { - a4, _, _, _ := cpuid(4) - // physical cores - v2 := (a4 >> 26) + 1 - if v2 > 0 { - return int(v) / int(v2) - } - } - } - return 1 - } - _, b, _, _ := cpuidex(0xb, 0) - if b&0xffff == 0 { - if vend == AMD { - // Workaround for AMD returning 0, assume 2 if >= Zen 2 - // It will be more correct than not. - fam, _, _ := familyModel() - _, _, _, d := cpuid(1) - if (d&(1<<28)) != 0 && fam >= 23 { - return 2 - } - } - return 1 - } - return int(b & 0xffff) -} - -func logicalCores() int { - mfi := maxFunctionID() - v, _ := vendorID() - switch v { - case Intel: - // Use this on old Intel processors - if mfi < 0xb { - if mfi < 1 { - return 0 - } - // CPUID.1:EBX[23:16] represents the maximum number of addressable IDs (initial APIC ID) - // that can be assigned to logical processors in a physical package. - // The value may not be the same as the number of logical processors that are present in the hardware of a physical package. - _, ebx, _, _ := cpuid(1) - logical := (ebx >> 16) & 0xff - return int(logical) - } - _, b, _, _ := cpuidex(0xb, 1) - return int(b & 0xffff) - case AMD, Hygon: - _, b, _, _ := cpuid(1) - return int((b >> 16) & 0xff) - default: - return 0 - } -} - -func familyModel() (family, model, stepping int) { - if maxFunctionID() < 0x1 { - return 0, 0, 0 - } - eax, _, _, _ := cpuid(1) - // If BaseFamily[3:0] is less than Fh then ExtendedFamily[7:0] is reserved and Family is equal to BaseFamily[3:0]. - family = int((eax >> 8) & 0xf) - extFam := family == 0x6 // Intel is 0x6, needs extended model. - if family == 0xf { - // Add ExtFamily - family += int((eax >> 20) & 0xff) - extFam = true - } - // If BaseFamily[3:0] is less than 0Fh then ExtendedModel[3:0] is reserved and Model is equal to BaseModel[3:0]. - model = int((eax >> 4) & 0xf) - if extFam { - // Add ExtModel - model += int((eax >> 12) & 0xf0) - } - stepping = int(eax & 0xf) - return family, model, stepping -} - -func physicalCores() int { - v, _ := vendorID() - switch v { - case Intel: - return logicalCores() / threadsPerCore() - case AMD, Hygon: - lc := logicalCores() - tpc := threadsPerCore() - if lc > 0 && tpc > 0 { - return lc / tpc - } - - // The following is inaccurate on AMD EPYC 7742 64-Core Processor - if maxExtendedFunction() >= 0x80000008 { - _, _, c, _ := cpuid(0x80000008) - if c&0xff > 0 { - return int(c&0xff) + 1 - } - } - } - return 0 -} - -// Except from http://en.wikipedia.org/wiki/CPUID#EAX.3D0:_Get_vendor_ID -var vendorMapping = map[string]Vendor{ - "AMDisbetter!": AMD, - "AuthenticAMD": AMD, - "CentaurHauls": VIA, - "GenuineIntel": Intel, - "TransmetaCPU": Transmeta, - "GenuineTMx86": Transmeta, - "Geode by NSC": NSC, - "VIA VIA VIA ": VIA, - "KVMKVMKVMKVM": KVM, - "Microsoft Hv": MSVM, - "VMwareVMware": VMware, - "XenVMMXenVMM": XenHVM, - "bhyve bhyve ": Bhyve, - "HygonGenuine": Hygon, - "Vortex86 SoC": SiS, - "SiS SiS SiS ": SiS, - "RiseRiseRise": SiS, - "Genuine RDC": RDC, -} - -func vendorID() (Vendor, string) { - _, b, c, d := cpuid(0) - v := string(valAsString(b, d, c)) - vend, ok := vendorMapping[v] - if !ok { - return VendorUnknown, v - } - return vend, v -} - -func cacheLine() int { - if maxFunctionID() < 0x1 { - return 0 - } - - _, ebx, _, _ := cpuid(1) - cache := (ebx & 0xff00) >> 5 // cflush size - if cache == 0 && maxExtendedFunction() >= 0x80000006 { - _, _, ecx, _ := cpuid(0x80000006) - cache = ecx & 0xff // cacheline size - } - // TODO: Read from Cache and TLB Information - return int(cache) -} - -func (c *CPUInfo) cacheSize() { - c.Cache.L1D = -1 - c.Cache.L1I = -1 - c.Cache.L2 = -1 - c.Cache.L3 = -1 - vendor, _ := vendorID() - switch vendor { - case Intel: - if maxFunctionID() < 4 { - return - } - c.Cache.L1I, c.Cache.L1D, c.Cache.L2, c.Cache.L3 = 0, 0, 0, 0 - for i := uint32(0); ; i++ { - eax, ebx, ecx, _ := cpuidex(4, i) - cacheType := eax & 15 - if cacheType == 0 { - break - } - cacheLevel := (eax >> 5) & 7 - coherency := int(ebx&0xfff) + 1 - partitions := int((ebx>>12)&0x3ff) + 1 - associativity := int((ebx>>22)&0x3ff) + 1 - sets := int(ecx) + 1 - size := associativity * partitions * coherency * sets - switch cacheLevel { - case 1: - if cacheType == 1 { - // 1 = Data Cache - c.Cache.L1D = size - } else if cacheType == 2 { - // 2 = Instruction Cache - c.Cache.L1I = size - } else { - if c.Cache.L1D < 0 { - c.Cache.L1I = size - } - if c.Cache.L1I < 0 { - c.Cache.L1I = size - } - } - case 2: - c.Cache.L2 = size - case 3: - c.Cache.L3 = size - } - } - case AMD, Hygon: - // Untested. - if maxExtendedFunction() < 0x80000005 { - return - } - _, _, ecx, edx := cpuid(0x80000005) - c.Cache.L1D = int(((ecx >> 24) & 0xFF) * 1024) - c.Cache.L1I = int(((edx >> 24) & 0xFF) * 1024) - - if maxExtendedFunction() < 0x80000006 { - return - } - _, _, ecx, _ = cpuid(0x80000006) - c.Cache.L2 = int(((ecx >> 16) & 0xFFFF) * 1024) - - // CPUID Fn8000_001D_EAX_x[N:0] Cache Properties - if maxExtendedFunction() < 0x8000001D || !c.Has(TOPEXT) { - return - } - - // Xen Hypervisor is buggy and returns the same entry no matter ECX value. - // Hack: When we encounter the same entry 100 times we break. - nSame := 0 - var last uint32 - for i := uint32(0); i < math.MaxUint32; i++ { - eax, ebx, ecx, _ := cpuidex(0x8000001D, i) - - level := (eax >> 5) & 7 - cacheNumSets := ecx + 1 - cacheLineSize := 1 + (ebx & 2047) - cachePhysPartitions := 1 + ((ebx >> 12) & 511) - cacheNumWays := 1 + ((ebx >> 22) & 511) - - typ := eax & 15 - size := int(cacheNumSets * cacheLineSize * cachePhysPartitions * cacheNumWays) - if typ == 0 { - return - } - - // Check for the same value repeated. - comb := eax ^ ebx ^ ecx - if comb == last { - nSame++ - if nSame == 100 { - return - } - } - last = comb - - switch level { - case 1: - switch typ { - case 1: - // Data cache - c.Cache.L1D = size - case 2: - // Inst cache - c.Cache.L1I = size - default: - if c.Cache.L1D < 0 { - c.Cache.L1I = size - } - if c.Cache.L1I < 0 { - c.Cache.L1I = size - } - } - case 2: - c.Cache.L2 = size - case 3: - c.Cache.L3 = size - } - } - } -} - -type SGXEPCSection struct { - BaseAddress uint64 - EPCSize uint64 -} - -type SGXSupport struct { - Available bool - LaunchControl bool - SGX1Supported bool - SGX2Supported bool - MaxEnclaveSizeNot64 int64 - MaxEnclaveSize64 int64 - EPCSections []SGXEPCSection -} - -func hasSGX(available, lc bool) (rval SGXSupport) { - rval.Available = available - - if !available { - return - } - - rval.LaunchControl = lc - - a, _, _, d := cpuidex(0x12, 0) - rval.SGX1Supported = a&0x01 != 0 - rval.SGX2Supported = a&0x02 != 0 - rval.MaxEnclaveSizeNot64 = 1 << (d & 0xFF) // pow 2 - rval.MaxEnclaveSize64 = 1 << ((d >> 8) & 0xFF) // pow 2 - rval.EPCSections = make([]SGXEPCSection, 0) - - for subleaf := uint32(2); subleaf < 2+8; subleaf++ { - eax, ebx, ecx, edx := cpuidex(0x12, subleaf) - leafType := eax & 0xf - - if leafType == 0 { - // Invalid subleaf, stop iterating - break - } else if leafType == 1 { - // EPC Section subleaf - baseAddress := uint64(eax&0xfffff000) + (uint64(ebx&0x000fffff) << 32) - size := uint64(ecx&0xfffff000) + (uint64(edx&0x000fffff) << 32) - - section := SGXEPCSection{BaseAddress: baseAddress, EPCSize: size} - rval.EPCSections = append(rval.EPCSections, section) - } - } - - return -} - -func support() flagSet { - var fs flagSet - mfi := maxFunctionID() - vend, _ := vendorID() - if mfi < 0x1 { - return fs - } - family, model, _ := familyModel() - - _, _, c, d := cpuid(1) - fs.setIf((d&(1<<0)) != 0, X87) - fs.setIf((d&(1<<8)) != 0, CMPXCHG8) - fs.setIf((d&(1<<11)) != 0, SYSEE) - fs.setIf((d&(1<<15)) != 0, CMOV) - fs.setIf((d&(1<<23)) != 0, MMX) - fs.setIf((d&(1<<24)) != 0, FXSR) - fs.setIf((d&(1<<25)) != 0, FXSROPT) - fs.setIf((d&(1<<25)) != 0, SSE) - fs.setIf((d&(1<<26)) != 0, SSE2) - fs.setIf((c&1) != 0, SSE3) - fs.setIf((c&(1<<5)) != 0, VMX) - fs.setIf((c&(1<<9)) != 0, SSSE3) - fs.setIf((c&(1<<19)) != 0, SSE4) - fs.setIf((c&(1<<20)) != 0, SSE42) - fs.setIf((c&(1<<25)) != 0, AESNI) - fs.setIf((c&(1<<1)) != 0, CLMUL) - fs.setIf(c&(1<<22) != 0, MOVBE) - fs.setIf(c&(1<<23) != 0, POPCNT) - fs.setIf(c&(1<<30) != 0, RDRAND) - - // This bit has been reserved by Intel & AMD for use by hypervisors, - // and indicates the presence of a hypervisor. - fs.setIf(c&(1<<31) != 0, HYPERVISOR) - fs.setIf(c&(1<<29) != 0, F16C) - fs.setIf(c&(1<<13) != 0, CX16) - - if vend == Intel && (d&(1<<28)) != 0 && mfi >= 4 { - fs.setIf(threadsPerCore() > 1, HTT) - } - if vend == AMD && (d&(1<<28)) != 0 && mfi >= 4 { - fs.setIf(threadsPerCore() > 1, HTT) - } - fs.setIf(c&1<<26 != 0, XSAVE) - fs.setIf(c&1<<27 != 0, OSXSAVE) - // Check XGETBV/XSAVE (26), OXSAVE (27) and AVX (28) bits - const avxCheck = 1<<26 | 1<<27 | 1<<28 - if c&avxCheck == avxCheck { - // Check for OS support - eax, _ := xgetbv(0) - if (eax & 0x6) == 0x6 { - fs.set(AVX) - switch vend { - case Intel: - // Older than Haswell. - fs.setIf(family == 6 && model < 60, AVXSLOW) - case AMD: - // Older than Zen 2 - fs.setIf(family < 23 || (family == 23 && model < 49), AVXSLOW) - } - } - } - // FMA3 can be used with SSE registers, so no OS support is strictly needed. - // fma3 and OSXSAVE needed. - const fma3Check = 1<<12 | 1<<27 - fs.setIf(c&fma3Check == fma3Check, FMA3) - - // Check AVX2, AVX2 requires OS support, but BMI1/2 don't. - if mfi >= 7 { - _, ebx, ecx, edx := cpuidex(7, 0) - if fs.inSet(AVX) && (ebx&0x00000020) != 0 { - fs.set(AVX2) - } - // CPUID.(EAX=7, ECX=0).EBX - if (ebx & 0x00000008) != 0 { - fs.set(BMI1) - fs.setIf((ebx&0x00000100) != 0, BMI2) - } - fs.setIf(ebx&(1<<2) != 0, SGX) - fs.setIf(ebx&(1<<4) != 0, HLE) - fs.setIf(ebx&(1<<9) != 0, ERMS) - fs.setIf(ebx&(1<<11) != 0, RTM) - fs.setIf(ebx&(1<<14) != 0, MPX) - fs.setIf(ebx&(1<<18) != 0, RDSEED) - fs.setIf(ebx&(1<<19) != 0, ADX) - fs.setIf(ebx&(1<<29) != 0, SHA) - - // CPUID.(EAX=7, ECX=0).ECX - fs.setIf(ecx&(1<<5) != 0, WAITPKG) - fs.setIf(ecx&(1<<7) != 0, CETSS) - fs.setIf(ecx&(1<<8) != 0, GFNI) - fs.setIf(ecx&(1<<9) != 0, VAES) - fs.setIf(ecx&(1<<10) != 0, VPCLMULQDQ) - fs.setIf(ecx&(1<<13) != 0, TME) - fs.setIf(ecx&(1<<25) != 0, CLDEMOTE) - fs.setIf(ecx&(1<<27) != 0, MOVDIRI) - fs.setIf(ecx&(1<<28) != 0, MOVDIR64B) - fs.setIf(ecx&(1<<29) != 0, ENQCMD) - fs.setIf(ecx&(1<<30) != 0, SGXLC) - - // CPUID.(EAX=7, ECX=0).EDX - fs.setIf(edx&(1<<11) != 0, RTM_ALWAYS_ABORT) - fs.setIf(edx&(1<<14) != 0, SERIALIZE) - fs.setIf(edx&(1<<16) != 0, TSXLDTRK) - fs.setIf(edx&(1<<18) != 0, PCONFIG) - fs.setIf(edx&(1<<20) != 0, CETIBT) - fs.setIf(edx&(1<<26) != 0, IBPB) - fs.setIf(edx&(1<<27) != 0, STIBP) - - // CPUID.(EAX=7, ECX=1) - eax1, _, _, _ := cpuidex(7, 1) - fs.setIf(fs.inSet(AVX) && eax1&(1<<4) != 0, AVXVNNI) - fs.setIf(eax1&(1<<10) != 0, MOVSB_ZL) - fs.setIf(eax1&(1<<11) != 0, STOSB_SHORT) - fs.setIf(eax1&(1<<12) != 0, CMPSB_SCADBS_SHORT) - fs.setIf(eax1&(1<<22) != 0, HRESET) - fs.setIf(eax1&(1<<26) != 0, LAM) - - // Only detect AVX-512 features if XGETBV is supported - if c&((1<<26)|(1<<27)) == (1<<26)|(1<<27) { - // Check for OS support - eax, _ := xgetbv(0) - - // Verify that XCR0[7:5] = ‘111b’ (OPMASK state, upper 256-bit of ZMM0-ZMM15 and - // ZMM16-ZMM31 state are enabled by OS) - /// and that XCR0[2:1] = ‘11b’ (XMM state and YMM state are enabled by OS). - hasAVX512 := (eax>>5)&7 == 7 && (eax>>1)&3 == 3 - if runtime.GOOS == "darwin" { - hasAVX512 = fs.inSet(AVX) && darwinHasAVX512() - } - if hasAVX512 { - fs.setIf(ebx&(1<<16) != 0, AVX512F) - fs.setIf(ebx&(1<<17) != 0, AVX512DQ) - fs.setIf(ebx&(1<<21) != 0, AVX512IFMA) - fs.setIf(ebx&(1<<26) != 0, AVX512PF) - fs.setIf(ebx&(1<<27) != 0, AVX512ER) - fs.setIf(ebx&(1<<28) != 0, AVX512CD) - fs.setIf(ebx&(1<<30) != 0, AVX512BW) - fs.setIf(ebx&(1<<31) != 0, AVX512VL) - // ecx - fs.setIf(ecx&(1<<1) != 0, AVX512VBMI) - fs.setIf(ecx&(1<<6) != 0, AVX512VBMI2) - fs.setIf(ecx&(1<<11) != 0, AVX512VNNI) - fs.setIf(ecx&(1<<12) != 0, AVX512BITALG) - fs.setIf(ecx&(1<<14) != 0, AVX512VPOPCNTDQ) - // edx - fs.setIf(edx&(1<<8) != 0, AVX512VP2INTERSECT) - fs.setIf(edx&(1<<22) != 0, AMXBF16) - fs.setIf(edx&(1<<23) != 0, AVX512FP16) - fs.setIf(edx&(1<<24) != 0, AMXTILE) - fs.setIf(edx&(1<<25) != 0, AMXINT8) - // eax1 = CPUID.(EAX=7, ECX=1).EAX - fs.setIf(eax1&(1<<5) != 0, AVX512BF16) - } - } - } - // Processor Extended State Enumeration Sub-leaf (EAX = 0DH, ECX = 1) - // EAX - // Bit 00: XSAVEOPT is available. - // Bit 01: Supports XSAVEC and the compacted form of XRSTOR if set. - // Bit 02: Supports XGETBV with ECX = 1 if set. - // Bit 03: Supports XSAVES/XRSTORS and IA32_XSS if set. - // Bits 31 - 04: Reserved. - // EBX - // Bits 31 - 00: The size in bytes of the XSAVE area containing all states enabled by XCRO | IA32_XSS. - // ECX - // Bits 31 - 00: Reports the supported bits of the lower 32 bits of the IA32_XSS MSR. IA32_XSS[n] can be set to 1 only if ECX[n] is 1. - // EDX? - // Bits 07 - 00: Used for XCR0. Bit 08: PT state. Bit 09: Used for XCR0. Bits 12 - 10: Reserved. Bit 13: HWP state. Bits 31 - 14: Reserved. - if mfi >= 0xd { - if fs.inSet(XSAVE) { - eax, _, _, _ := cpuidex(0xd, 1) - fs.setIf(eax&(1<<0) != 0, XSAVEOPT) - fs.setIf(eax&(1<<1) != 0, XSAVEC) - fs.setIf(eax&(1<<2) != 0, XGETBV1) - fs.setIf(eax&(1<<3) != 0, XSAVES) - } - } - if maxExtendedFunction() >= 0x80000001 { - _, _, c, d := cpuid(0x80000001) - if (c & (1 << 5)) != 0 { - fs.set(LZCNT) - fs.set(POPCNT) - } - // ECX - fs.setIf((c&(1<<0)) != 0, LAHF) - fs.setIf((c&(1<<2)) != 0, SVM) - fs.setIf((c&(1<<6)) != 0, SSE4A) - fs.setIf((c&(1<<10)) != 0, IBS) - fs.setIf((c&(1<<22)) != 0, TOPEXT) - - // EDX - fs.setIf(d&(1<<11) != 0, SYSCALL) - fs.setIf(d&(1<<20) != 0, NX) - fs.setIf(d&(1<<22) != 0, MMXEXT) - fs.setIf(d&(1<<23) != 0, MMX) - fs.setIf(d&(1<<24) != 0, FXSR) - fs.setIf(d&(1<<25) != 0, FXSROPT) - fs.setIf(d&(1<<27) != 0, RDTSCP) - fs.setIf(d&(1<<30) != 0, AMD3DNOWEXT) - fs.setIf(d&(1<<31) != 0, AMD3DNOW) - - /* XOP and FMA4 use the AVX instruction coding scheme, so they can't be - * used unless the OS has AVX support. */ - if fs.inSet(AVX) { - fs.setIf((c&(1<<11)) != 0, XOP) - fs.setIf((c&(1<<16)) != 0, FMA4) - } - - } - if maxExtendedFunction() >= 0x80000007 { - _, b, _, d := cpuid(0x80000007) - fs.setIf((b&(1<<0)) != 0, MCAOVERFLOW) - fs.setIf((b&(1<<1)) != 0, SUCCOR) - fs.setIf((b&(1<<2)) != 0, HWA) - fs.setIf((d&(1<<9)) != 0, CPBOOST) - } - - if maxExtendedFunction() >= 0x80000008 { - _, b, _, _ := cpuid(0x80000008) - fs.setIf((b&(1<<9)) != 0, WBNOINVD) - fs.setIf((b&(1<<8)) != 0, MCOMMIT) - fs.setIf((b&(1<<13)) != 0, INT_WBINVD) - fs.setIf((b&(1<<4)) != 0, RDPRU) - fs.setIf((b&(1<<3)) != 0, INVLPGB) - fs.setIf((b&(1<<1)) != 0, MSRIRC) - fs.setIf((b&(1<<0)) != 0, CLZERO) - } - - if fs.inSet(SVM) && maxExtendedFunction() >= 0x8000000A { - _, _, _, edx := cpuid(0x8000000A) - fs.setIf((edx>>0)&1 == 1, SVMNP) - fs.setIf((edx>>1)&1 == 1, LBRVIRT) - fs.setIf((edx>>2)&1 == 1, SVML) - fs.setIf((edx>>3)&1 == 1, NRIPS) - fs.setIf((edx>>4)&1 == 1, TSCRATEMSR) - fs.setIf((edx>>5)&1 == 1, VMCBCLEAN) - fs.setIf((edx>>6)&1 == 1, SVMFBASID) - fs.setIf((edx>>7)&1 == 1, SVMDA) - fs.setIf((edx>>10)&1 == 1, SVMPF) - fs.setIf((edx>>12)&1 == 1, SVMPFT) - } - - if maxExtendedFunction() >= 0x8000001b && fs.inSet(IBS) { - eax, _, _, _ := cpuid(0x8000001b) - fs.setIf((eax>>0)&1 == 1, IBSFFV) - fs.setIf((eax>>1)&1 == 1, IBSFETCHSAM) - fs.setIf((eax>>2)&1 == 1, IBSOPSAM) - fs.setIf((eax>>3)&1 == 1, IBSRDWROPCNT) - fs.setIf((eax>>4)&1 == 1, IBSOPCNT) - fs.setIf((eax>>5)&1 == 1, IBSBRNTRGT) - fs.setIf((eax>>6)&1 == 1, IBSOPCNTEXT) - fs.setIf((eax>>7)&1 == 1, IBSRIPINVALIDCHK) - } - - if maxExtendedFunction() >= 0x8000001f && vend == AMD { - a, _, _, _ := cpuid(0x8000001f) - fs.setIf((a>>0)&1 == 1, SME) - fs.setIf((a>>1)&1 == 1, SEV) - fs.setIf((a>>2)&1 == 1, MSR_PAGEFLUSH) - fs.setIf((a>>3)&1 == 1, SEV_ES) - fs.setIf((a>>4)&1 == 1, SEV_SNP) - fs.setIf((a>>5)&1 == 1, VMPL) - fs.setIf((a>>10)&1 == 1, SME_COHERENT) - fs.setIf((a>>11)&1 == 1, SEV_64BIT) - fs.setIf((a>>12)&1 == 1, SEV_RESTRICTED) - fs.setIf((a>>13)&1 == 1, SEV_ALTERNATIVE) - fs.setIf((a>>14)&1 == 1, SEV_DEBUGSWAP) - fs.setIf((a>>15)&1 == 1, IBS_PREVENTHOST) - fs.setIf((a>>16)&1 == 1, VTE) - fs.setIf((a>>24)&1 == 1, VMSA_REGPROT) - } - - return fs -} - -func valAsString(values ...uint32) []byte { - r := make([]byte, 4*len(values)) - for i, v := range values { - dst := r[i*4:] - dst[0] = byte(v & 0xff) - dst[1] = byte((v >> 8) & 0xff) - dst[2] = byte((v >> 16) & 0xff) - dst[3] = byte((v >> 24) & 0xff) - switch { - case dst[0] == 0: - return r[:i*4] - case dst[1] == 0: - return r[:i*4+1] - case dst[2] == 0: - return r[:i*4+2] - case dst[3] == 0: - return r[:i*4+3] - } - } - return r -} diff --git a/vendor/github.com/klauspost/cpuid/v2/cpuid_386.s b/vendor/github.com/klauspost/cpuid/v2/cpuid_386.s deleted file mode 100644 index 8587c3a..0000000 --- a/vendor/github.com/klauspost/cpuid/v2/cpuid_386.s +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. - -//+build 386,!gccgo,!noasm,!appengine - -// func asmCpuid(op uint32) (eax, ebx, ecx, edx uint32) -TEXT ·asmCpuid(SB), 7, $0 - XORL CX, CX - MOVL op+0(FP), AX - CPUID - MOVL AX, eax+4(FP) - MOVL BX, ebx+8(FP) - MOVL CX, ecx+12(FP) - MOVL DX, edx+16(FP) - RET - -// func asmCpuidex(op, op2 uint32) (eax, ebx, ecx, edx uint32) -TEXT ·asmCpuidex(SB), 7, $0 - MOVL op+0(FP), AX - MOVL op2+4(FP), CX - CPUID - MOVL AX, eax+8(FP) - MOVL BX, ebx+12(FP) - MOVL CX, ecx+16(FP) - MOVL DX, edx+20(FP) - RET - -// func xgetbv(index uint32) (eax, edx uint32) -TEXT ·asmXgetbv(SB), 7, $0 - MOVL index+0(FP), CX - BYTE $0x0f; BYTE $0x01; BYTE $0xd0 // XGETBV - MOVL AX, eax+4(FP) - MOVL DX, edx+8(FP) - RET - -// func asmRdtscpAsm() (eax, ebx, ecx, edx uint32) -TEXT ·asmRdtscpAsm(SB), 7, $0 - BYTE $0x0F; BYTE $0x01; BYTE $0xF9 // RDTSCP - MOVL AX, eax+0(FP) - MOVL BX, ebx+4(FP) - MOVL CX, ecx+8(FP) - MOVL DX, edx+12(FP) - RET - -// func asmDarwinHasAVX512() bool -TEXT ·asmDarwinHasAVX512(SB), 7, $0 - MOVL $0, eax+0(FP) - RET diff --git a/vendor/github.com/klauspost/cpuid/v2/cpuid_amd64.s b/vendor/github.com/klauspost/cpuid/v2/cpuid_amd64.s deleted file mode 100644 index bc11f89..0000000 --- a/vendor/github.com/klauspost/cpuid/v2/cpuid_amd64.s +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. - -//+build amd64,!gccgo,!noasm,!appengine - -// func asmCpuid(op uint32) (eax, ebx, ecx, edx uint32) -TEXT ·asmCpuid(SB), 7, $0 - XORQ CX, CX - MOVL op+0(FP), AX - CPUID - MOVL AX, eax+8(FP) - MOVL BX, ebx+12(FP) - MOVL CX, ecx+16(FP) - MOVL DX, edx+20(FP) - RET - -// func asmCpuidex(op, op2 uint32) (eax, ebx, ecx, edx uint32) -TEXT ·asmCpuidex(SB), 7, $0 - MOVL op+0(FP), AX - MOVL op2+4(FP), CX - CPUID - MOVL AX, eax+8(FP) - MOVL BX, ebx+12(FP) - MOVL CX, ecx+16(FP) - MOVL DX, edx+20(FP) - RET - -// func asmXgetbv(index uint32) (eax, edx uint32) -TEXT ·asmXgetbv(SB), 7, $0 - MOVL index+0(FP), CX - BYTE $0x0f; BYTE $0x01; BYTE $0xd0 // XGETBV - MOVL AX, eax+8(FP) - MOVL DX, edx+12(FP) - RET - -// func asmRdtscpAsm() (eax, ebx, ecx, edx uint32) -TEXT ·asmRdtscpAsm(SB), 7, $0 - BYTE $0x0F; BYTE $0x01; BYTE $0xF9 // RDTSCP - MOVL AX, eax+0(FP) - MOVL BX, ebx+4(FP) - MOVL CX, ecx+8(FP) - MOVL DX, edx+12(FP) - RET - -// From https://go-review.googlesource.com/c/sys/+/285572/ -// func asmDarwinHasAVX512() bool -TEXT ·asmDarwinHasAVX512(SB), 7, $0-1 - MOVB $0, ret+0(FP) // default to false - -#ifdef GOOS_darwin // return if not darwin -#ifdef GOARCH_amd64 // return if not amd64 -// These values from: -// https://github.com/apple/darwin-xnu/blob/xnu-4570.1.46/osfmk/i386/cpu_capabilities.h -#define commpage64_base_address 0x00007fffffe00000 -#define commpage64_cpu_capabilities64 (commpage64_base_address+0x010) -#define commpage64_version (commpage64_base_address+0x01E) -#define hasAVX512F 0x0000004000000000 - MOVQ $commpage64_version, BX - MOVW (BX), AX - CMPW AX, $13 // versions < 13 do not support AVX512 - JL no_avx512 - MOVQ $commpage64_cpu_capabilities64, BX - MOVQ (BX), AX - MOVQ $hasAVX512F, CX - ANDQ CX, AX - JZ no_avx512 - MOVB $1, ret+0(FP) - -no_avx512: -#endif -#endif - RET - diff --git a/vendor/github.com/klauspost/cpuid/v2/cpuid_arm64.s b/vendor/github.com/klauspost/cpuid/v2/cpuid_arm64.s deleted file mode 100644 index b31d6ae..0000000 --- a/vendor/github.com/klauspost/cpuid/v2/cpuid_arm64.s +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. - -//+build arm64,!gccgo,!noasm,!appengine - -// See https://www.kernel.org/doc/Documentation/arm64/cpu-feature-registers.txt - -// func getMidr -TEXT ·getMidr(SB), 7, $0 - WORD $0xd5380000 // mrs x0, midr_el1 /* Main ID Register */ - MOVD R0, midr+0(FP) - RET - -// func getProcFeatures -TEXT ·getProcFeatures(SB), 7, $0 - WORD $0xd5380400 // mrs x0, id_aa64pfr0_el1 /* Processor Feature Register 0 */ - MOVD R0, procFeatures+0(FP) - RET - -// func getInstAttributes -TEXT ·getInstAttributes(SB), 7, $0 - WORD $0xd5380600 // mrs x0, id_aa64isar0_el1 /* Instruction Set Attribute Register 0 */ - WORD $0xd5380621 // mrs x1, id_aa64isar1_el1 /* Instruction Set Attribute Register 1 */ - MOVD R0, instAttrReg0+0(FP) - MOVD R1, instAttrReg1+8(FP) - RET - diff --git a/vendor/github.com/klauspost/cpuid/v2/detect_arm64.go b/vendor/github.com/klauspost/cpuid/v2/detect_arm64.go deleted file mode 100644 index 9a53504..0000000 --- a/vendor/github.com/klauspost/cpuid/v2/detect_arm64.go +++ /dev/null @@ -1,247 +0,0 @@ -// Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. - -//go:build arm64 && !gccgo && !noasm && !appengine -// +build arm64,!gccgo,!noasm,!appengine - -package cpuid - -import "runtime" - -func getMidr() (midr uint64) -func getProcFeatures() (procFeatures uint64) -func getInstAttributes() (instAttrReg0, instAttrReg1 uint64) - -func initCPU() { - cpuid = func(uint32) (a, b, c, d uint32) { return 0, 0, 0, 0 } - cpuidex = func(x, y uint32) (a, b, c, d uint32) { return 0, 0, 0, 0 } - xgetbv = func(uint32) (a, b uint32) { return 0, 0 } - rdtscpAsm = func() (a, b, c, d uint32) { return 0, 0, 0, 0 } -} - -func addInfo(c *CPUInfo, safe bool) { - // Seems to be safe to assume on ARM64 - c.CacheLine = 64 - detectOS(c) - - // ARM64 disabled since it may crash if interrupt is not intercepted by OS. - if safe && !c.Supports(ARMCPUID) && runtime.GOOS != "freebsd" { - return - } - midr := getMidr() - - // MIDR_EL1 - Main ID Register - // https://developer.arm.com/docs/ddi0595/h/aarch64-system-registers/midr_el1 - // x--------------------------------------------------x - // | Name | bits | visible | - // |--------------------------------------------------| - // | Implementer | [31-24] | y | - // |--------------------------------------------------| - // | Variant | [23-20] | y | - // |--------------------------------------------------| - // | Architecture | [19-16] | y | - // |--------------------------------------------------| - // | PartNum | [15-4] | y | - // |--------------------------------------------------| - // | Revision | [3-0] | y | - // x--------------------------------------------------x - - switch (midr >> 24) & 0xff { - case 0xC0: - c.VendorString = "Ampere Computing" - c.VendorID = Ampere - case 0x41: - c.VendorString = "Arm Limited" - c.VendorID = ARM - case 0x42: - c.VendorString = "Broadcom Corporation" - c.VendorID = Broadcom - case 0x43: - c.VendorString = "Cavium Inc" - c.VendorID = Cavium - case 0x44: - c.VendorString = "Digital Equipment Corporation" - c.VendorID = DEC - case 0x46: - c.VendorString = "Fujitsu Ltd" - c.VendorID = Fujitsu - case 0x49: - c.VendorString = "Infineon Technologies AG" - c.VendorID = Infineon - case 0x4D: - c.VendorString = "Motorola or Freescale Semiconductor Inc" - c.VendorID = Motorola - case 0x4E: - c.VendorString = "NVIDIA Corporation" - c.VendorID = NVIDIA - case 0x50: - c.VendorString = "Applied Micro Circuits Corporation" - c.VendorID = AMCC - case 0x51: - c.VendorString = "Qualcomm Inc" - c.VendorID = Qualcomm - case 0x56: - c.VendorString = "Marvell International Ltd" - c.VendorID = Marvell - case 0x69: - c.VendorString = "Intel Corporation" - c.VendorID = Intel - } - - // Lower 4 bits: Architecture - // Architecture Meaning - // 0b0001 Armv4. - // 0b0010 Armv4T. - // 0b0011 Armv5 (obsolete). - // 0b0100 Armv5T. - // 0b0101 Armv5TE. - // 0b0110 Armv5TEJ. - // 0b0111 Armv6. - // 0b1111 Architectural features are individually identified in the ID_* registers, see 'ID registers'. - // Upper 4 bit: Variant - // An IMPLEMENTATION DEFINED variant number. - // Typically, this field is used to distinguish between different product variants, or major revisions of a product. - c.Family = int(midr>>16) & 0xff - - // PartNum, bits [15:4] - // An IMPLEMENTATION DEFINED primary part number for the device. - // On processors implemented by Arm, if the top four bits of the primary - // part number are 0x0 or 0x7, the variant and architecture are encoded differently. - // Revision, bits [3:0] - // An IMPLEMENTATION DEFINED revision number for the device. - c.Model = int(midr) & 0xffff - - procFeatures := getProcFeatures() - - // ID_AA64PFR0_EL1 - Processor Feature Register 0 - // x--------------------------------------------------x - // | Name | bits | visible | - // |--------------------------------------------------| - // | DIT | [51-48] | y | - // |--------------------------------------------------| - // | SVE | [35-32] | y | - // |--------------------------------------------------| - // | GIC | [27-24] | n | - // |--------------------------------------------------| - // | AdvSIMD | [23-20] | y | - // |--------------------------------------------------| - // | FP | [19-16] | y | - // |--------------------------------------------------| - // | EL3 | [15-12] | n | - // |--------------------------------------------------| - // | EL2 | [11-8] | n | - // |--------------------------------------------------| - // | EL1 | [7-4] | n | - // |--------------------------------------------------| - // | EL0 | [3-0] | n | - // x--------------------------------------------------x - - var f flagSet - // if procFeatures&(0xf<<48) != 0 { - // fmt.Println("DIT") - // } - f.setIf(procFeatures&(0xf<<32) != 0, SVE) - if procFeatures&(0xf<<20) != 15<<20 { - f.set(ASIMD) - // https://developer.arm.com/docs/ddi0595/b/aarch64-system-registers/id_aa64pfr0_el1 - // 0b0001 --> As for 0b0000, and also includes support for half-precision floating-point arithmetic. - f.setIf(procFeatures&(0xf<<20) == 1<<20, FPHP, ASIMDHP) - } - f.setIf(procFeatures&(0xf<<16) != 0, FP) - - instAttrReg0, instAttrReg1 := getInstAttributes() - - // https://developer.arm.com/docs/ddi0595/b/aarch64-system-registers/id_aa64isar0_el1 - // - // ID_AA64ISAR0_EL1 - Instruction Set Attribute Register 0 - // x--------------------------------------------------x - // | Name | bits | visible | - // |--------------------------------------------------| - // | TS | [55-52] | y | - // |--------------------------------------------------| - // | FHM | [51-48] | y | - // |--------------------------------------------------| - // | DP | [47-44] | y | - // |--------------------------------------------------| - // | SM4 | [43-40] | y | - // |--------------------------------------------------| - // | SM3 | [39-36] | y | - // |--------------------------------------------------| - // | SHA3 | [35-32] | y | - // |--------------------------------------------------| - // | RDM | [31-28] | y | - // |--------------------------------------------------| - // | ATOMICS | [23-20] | y | - // |--------------------------------------------------| - // | CRC32 | [19-16] | y | - // |--------------------------------------------------| - // | SHA2 | [15-12] | y | - // |--------------------------------------------------| - // | SHA1 | [11-8] | y | - // |--------------------------------------------------| - // | AES | [7-4] | y | - // x--------------------------------------------------x - - // if instAttrReg0&(0xf<<52) != 0 { - // fmt.Println("TS") - // } - // if instAttrReg0&(0xf<<48) != 0 { - // fmt.Println("FHM") - // } - f.setIf(instAttrReg0&(0xf<<44) != 0, ASIMDDP) - f.setIf(instAttrReg0&(0xf<<40) != 0, SM4) - f.setIf(instAttrReg0&(0xf<<36) != 0, SM3) - f.setIf(instAttrReg0&(0xf<<32) != 0, SHA3) - f.setIf(instAttrReg0&(0xf<<28) != 0, ASIMDRDM) - f.setIf(instAttrReg0&(0xf<<20) != 0, ATOMICS) - f.setIf(instAttrReg0&(0xf<<16) != 0, CRC32) - f.setIf(instAttrReg0&(0xf<<12) != 0, SHA2) - // https://developer.arm.com/docs/ddi0595/b/aarch64-system-registers/id_aa64isar0_el1 - // 0b0010 --> As 0b0001, plus SHA512H, SHA512H2, SHA512SU0, and SHA512SU1 instructions implemented. - f.setIf(instAttrReg0&(0xf<<12) == 2<<12, SHA512) - f.setIf(instAttrReg0&(0xf<<8) != 0, SHA1) - f.setIf(instAttrReg0&(0xf<<4) != 0, AESARM) - // https://developer.arm.com/docs/ddi0595/b/aarch64-system-registers/id_aa64isar0_el1 - // 0b0010 --> As for 0b0001, plus PMULL/PMULL2 instructions operating on 64-bit data quantities. - f.setIf(instAttrReg0&(0xf<<4) == 2<<4, PMULL) - - // https://developer.arm.com/docs/ddi0595/b/aarch64-system-registers/id_aa64isar1_el1 - // - // ID_AA64ISAR1_EL1 - Instruction set attribute register 1 - // x--------------------------------------------------x - // | Name | bits | visible | - // |--------------------------------------------------| - // | GPI | [31-28] | y | - // |--------------------------------------------------| - // | GPA | [27-24] | y | - // |--------------------------------------------------| - // | LRCPC | [23-20] | y | - // |--------------------------------------------------| - // | FCMA | [19-16] | y | - // |--------------------------------------------------| - // | JSCVT | [15-12] | y | - // |--------------------------------------------------| - // | API | [11-8] | y | - // |--------------------------------------------------| - // | APA | [7-4] | y | - // |--------------------------------------------------| - // | DPB | [3-0] | y | - // x--------------------------------------------------x - - // if instAttrReg1&(0xf<<28) != 0 { - // fmt.Println("GPI") - // } - f.setIf(instAttrReg1&(0xf<<28) != 24, GPA) - f.setIf(instAttrReg1&(0xf<<20) != 0, LRCPC) - f.setIf(instAttrReg1&(0xf<<16) != 0, FCMA) - f.setIf(instAttrReg1&(0xf<<12) != 0, JSCVT) - // if instAttrReg1&(0xf<<8) != 0 { - // fmt.Println("API") - // } - // if instAttrReg1&(0xf<<4) != 0 { - // fmt.Println("APA") - // } - f.setIf(instAttrReg1&(0xf<<0) != 0, DCPOP) - - // Store - c.featureSet.or(f) -} diff --git a/vendor/github.com/klauspost/cpuid/v2/detect_ref.go b/vendor/github.com/klauspost/cpuid/v2/detect_ref.go deleted file mode 100644 index 9636c2b..0000000 --- a/vendor/github.com/klauspost/cpuid/v2/detect_ref.go +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. - -//go:build (!amd64 && !386 && !arm64) || gccgo || noasm || appengine -// +build !amd64,!386,!arm64 gccgo noasm appengine - -package cpuid - -func initCPU() { - cpuid = func(uint32) (a, b, c, d uint32) { return 0, 0, 0, 0 } - cpuidex = func(x, y uint32) (a, b, c, d uint32) { return 0, 0, 0, 0 } - xgetbv = func(uint32) (a, b uint32) { return 0, 0 } - rdtscpAsm = func() (a, b, c, d uint32) { return 0, 0, 0, 0 } -} - -func addInfo(info *CPUInfo, safe bool) {} diff --git a/vendor/github.com/klauspost/cpuid/v2/detect_x86.go b/vendor/github.com/klauspost/cpuid/v2/detect_x86.go deleted file mode 100644 index c946824..0000000 --- a/vendor/github.com/klauspost/cpuid/v2/detect_x86.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. - -//go:build (386 && !gccgo && !noasm && !appengine) || (amd64 && !gccgo && !noasm && !appengine) -// +build 386,!gccgo,!noasm,!appengine amd64,!gccgo,!noasm,!appengine - -package cpuid - -func asmCpuid(op uint32) (eax, ebx, ecx, edx uint32) -func asmCpuidex(op, op2 uint32) (eax, ebx, ecx, edx uint32) -func asmXgetbv(index uint32) (eax, edx uint32) -func asmRdtscpAsm() (eax, ebx, ecx, edx uint32) -func asmDarwinHasAVX512() bool - -func initCPU() { - cpuid = asmCpuid - cpuidex = asmCpuidex - xgetbv = asmXgetbv - rdtscpAsm = asmRdtscpAsm - darwinHasAVX512 = asmDarwinHasAVX512 -} - -func addInfo(c *CPUInfo, safe bool) { - c.maxFunc = maxFunctionID() - c.maxExFunc = maxExtendedFunction() - c.BrandName = brandName() - c.CacheLine = cacheLine() - c.Family, c.Model, c.Stepping = familyModel() - c.featureSet = support() - c.SGX = hasSGX(c.featureSet.inSet(SGX), c.featureSet.inSet(SGXLC)) - c.ThreadsPerCore = threadsPerCore() - c.LogicalCores = logicalCores() - c.PhysicalCores = physicalCores() - c.VendorID, c.VendorString = vendorID() - c.cacheSize() - c.frequencies() -} diff --git a/vendor/github.com/klauspost/cpuid/v2/featureid_string.go b/vendor/github.com/klauspost/cpuid/v2/featureid_string.go deleted file mode 100644 index d12e547..0000000 --- a/vendor/github.com/klauspost/cpuid/v2/featureid_string.go +++ /dev/null @@ -1,235 +0,0 @@ -// Code generated by "stringer -type=FeatureID,Vendor"; DO NOT EDIT. - -package cpuid - -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[ADX-1] - _ = x[AESNI-2] - _ = x[AMD3DNOW-3] - _ = x[AMD3DNOWEXT-4] - _ = x[AMXBF16-5] - _ = x[AMXINT8-6] - _ = x[AMXTILE-7] - _ = x[AVX-8] - _ = x[AVX2-9] - _ = x[AVX512BF16-10] - _ = x[AVX512BITALG-11] - _ = x[AVX512BW-12] - _ = x[AVX512CD-13] - _ = x[AVX512DQ-14] - _ = x[AVX512ER-15] - _ = x[AVX512F-16] - _ = x[AVX512FP16-17] - _ = x[AVX512IFMA-18] - _ = x[AVX512PF-19] - _ = x[AVX512VBMI-20] - _ = x[AVX512VBMI2-21] - _ = x[AVX512VL-22] - _ = x[AVX512VNNI-23] - _ = x[AVX512VP2INTERSECT-24] - _ = x[AVX512VPOPCNTDQ-25] - _ = x[AVXSLOW-26] - _ = x[AVXVNNI-27] - _ = x[BMI1-28] - _ = x[BMI2-29] - _ = x[CETIBT-30] - _ = x[CETSS-31] - _ = x[CLDEMOTE-32] - _ = x[CLMUL-33] - _ = x[CLZERO-34] - _ = x[CMOV-35] - _ = x[CMPSB_SCADBS_SHORT-36] - _ = x[CMPXCHG8-37] - _ = x[CPBOOST-38] - _ = x[CX16-39] - _ = x[ENQCMD-40] - _ = x[ERMS-41] - _ = x[F16C-42] - _ = x[FMA3-43] - _ = x[FMA4-44] - _ = x[FXSR-45] - _ = x[FXSROPT-46] - _ = x[GFNI-47] - _ = x[HLE-48] - _ = x[HRESET-49] - _ = x[HTT-50] - _ = x[HWA-51] - _ = x[HYPERVISOR-52] - _ = x[IBPB-53] - _ = x[IBS-54] - _ = x[IBSBRNTRGT-55] - _ = x[IBSFETCHSAM-56] - _ = x[IBSFFV-57] - _ = x[IBSOPCNT-58] - _ = x[IBSOPCNTEXT-59] - _ = x[IBSOPSAM-60] - _ = x[IBSRDWROPCNT-61] - _ = x[IBSRIPINVALIDCHK-62] - _ = x[IBS_PREVENTHOST-63] - _ = x[INT_WBINVD-64] - _ = x[INVLPGB-65] - _ = x[LAHF-66] - _ = x[LAM-67] - _ = x[LBRVIRT-68] - _ = x[LZCNT-69] - _ = x[MCAOVERFLOW-70] - _ = x[MCOMMIT-71] - _ = x[MMX-72] - _ = x[MMXEXT-73] - _ = x[MOVBE-74] - _ = x[MOVDIR64B-75] - _ = x[MOVDIRI-76] - _ = x[MOVSB_ZL-77] - _ = x[MPX-78] - _ = x[MSRIRC-79] - _ = x[MSR_PAGEFLUSH-80] - _ = x[NRIPS-81] - _ = x[NX-82] - _ = x[OSXSAVE-83] - _ = x[PCONFIG-84] - _ = x[POPCNT-85] - _ = x[RDPRU-86] - _ = x[RDRAND-87] - _ = x[RDSEED-88] - _ = x[RDTSCP-89] - _ = x[RTM-90] - _ = x[RTM_ALWAYS_ABORT-91] - _ = x[SERIALIZE-92] - _ = x[SEV-93] - _ = x[SEV_64BIT-94] - _ = x[SEV_ALTERNATIVE-95] - _ = x[SEV_DEBUGSWAP-96] - _ = x[SEV_ES-97] - _ = x[SEV_RESTRICTED-98] - _ = x[SEV_SNP-99] - _ = x[SGX-100] - _ = x[SGXLC-101] - _ = x[SHA-102] - _ = x[SME-103] - _ = x[SME_COHERENT-104] - _ = x[SSE-105] - _ = x[SSE2-106] - _ = x[SSE3-107] - _ = x[SSE4-108] - _ = x[SSE42-109] - _ = x[SSE4A-110] - _ = x[SSSE3-111] - _ = x[STIBP-112] - _ = x[STOSB_SHORT-113] - _ = x[SUCCOR-114] - _ = x[SVM-115] - _ = x[SVMDA-116] - _ = x[SVMFBASID-117] - _ = x[SVML-118] - _ = x[SVMNP-119] - _ = x[SVMPF-120] - _ = x[SVMPFT-121] - _ = x[SYSCALL-122] - _ = x[SYSEE-123] - _ = x[TBM-124] - _ = x[TOPEXT-125] - _ = x[TME-126] - _ = x[TSCRATEMSR-127] - _ = x[TSXLDTRK-128] - _ = x[VAES-129] - _ = x[VMCBCLEAN-130] - _ = x[VMPL-131] - _ = x[VMSA_REGPROT-132] - _ = x[VMX-133] - _ = x[VPCLMULQDQ-134] - _ = x[VTE-135] - _ = x[WAITPKG-136] - _ = x[WBNOINVD-137] - _ = x[X87-138] - _ = x[XGETBV1-139] - _ = x[XOP-140] - _ = x[XSAVE-141] - _ = x[XSAVEC-142] - _ = x[XSAVEOPT-143] - _ = x[XSAVES-144] - _ = x[AESARM-145] - _ = x[ARMCPUID-146] - _ = x[ASIMD-147] - _ = x[ASIMDDP-148] - _ = x[ASIMDHP-149] - _ = x[ASIMDRDM-150] - _ = x[ATOMICS-151] - _ = x[CRC32-152] - _ = x[DCPOP-153] - _ = x[EVTSTRM-154] - _ = x[FCMA-155] - _ = x[FP-156] - _ = x[FPHP-157] - _ = x[GPA-158] - _ = x[JSCVT-159] - _ = x[LRCPC-160] - _ = x[PMULL-161] - _ = x[SHA1-162] - _ = x[SHA2-163] - _ = x[SHA3-164] - _ = x[SHA512-165] - _ = x[SM3-166] - _ = x[SM4-167] - _ = x[SVE-168] - _ = x[lastID-169] - _ = x[firstID-0] -} - -const _FeatureID_name = "firstIDADXAESNIAMD3DNOWAMD3DNOWEXTAMXBF16AMXINT8AMXTILEAVXAVX2AVX512BF16AVX512BITALGAVX512BWAVX512CDAVX512DQAVX512ERAVX512FAVX512FP16AVX512IFMAAVX512PFAVX512VBMIAVX512VBMI2AVX512VLAVX512VNNIAVX512VP2INTERSECTAVX512VPOPCNTDQAVXSLOWAVXVNNIBMI1BMI2CETIBTCETSSCLDEMOTECLMULCLZEROCMOVCMPSB_SCADBS_SHORTCMPXCHG8CPBOOSTCX16ENQCMDERMSF16CFMA3FMA4FXSRFXSROPTGFNIHLEHRESETHTTHWAHYPERVISORIBPBIBSIBSBRNTRGTIBSFETCHSAMIBSFFVIBSOPCNTIBSOPCNTEXTIBSOPSAMIBSRDWROPCNTIBSRIPINVALIDCHKIBS_PREVENTHOSTINT_WBINVDINVLPGBLAHFLAMLBRVIRTLZCNTMCAOVERFLOWMCOMMITMMXMMXEXTMOVBEMOVDIR64BMOVDIRIMOVSB_ZLMPXMSRIRCMSR_PAGEFLUSHNRIPSNXOSXSAVEPCONFIGPOPCNTRDPRURDRANDRDSEEDRDTSCPRTMRTM_ALWAYS_ABORTSERIALIZESEVSEV_64BITSEV_ALTERNATIVESEV_DEBUGSWAPSEV_ESSEV_RESTRICTEDSEV_SNPSGXSGXLCSHASMESME_COHERENTSSESSE2SSE3SSE4SSE42SSE4ASSSE3STIBPSTOSB_SHORTSUCCORSVMSVMDASVMFBASIDSVMLSVMNPSVMPFSVMPFTSYSCALLSYSEETBMTOPEXTTMETSCRATEMSRTSXLDTRKVAESVMCBCLEANVMPLVMSA_REGPROTVMXVPCLMULQDQVTEWAITPKGWBNOINVDX87XGETBV1XOPXSAVEXSAVECXSAVEOPTXSAVESAESARMARMCPUIDASIMDASIMDDPASIMDHPASIMDRDMATOMICSCRC32DCPOPEVTSTRMFCMAFPFPHPGPAJSCVTLRCPCPMULLSHA1SHA2SHA3SHA512SM3SM4SVElastID" - -var _FeatureID_index = [...]uint16{0, 7, 10, 15, 23, 34, 41, 48, 55, 58, 62, 72, 84, 92, 100, 108, 116, 123, 133, 143, 151, 161, 172, 180, 190, 208, 223, 230, 237, 241, 245, 251, 256, 264, 269, 275, 279, 297, 305, 312, 316, 322, 326, 330, 334, 338, 342, 349, 353, 356, 362, 365, 368, 378, 382, 385, 395, 406, 412, 420, 431, 439, 451, 467, 482, 492, 499, 503, 506, 513, 518, 529, 536, 539, 545, 550, 559, 566, 574, 577, 583, 596, 601, 603, 610, 617, 623, 628, 634, 640, 646, 649, 665, 674, 677, 686, 701, 714, 720, 734, 741, 744, 749, 752, 755, 767, 770, 774, 778, 782, 787, 792, 797, 802, 813, 819, 822, 827, 836, 840, 845, 850, 856, 863, 868, 871, 877, 880, 890, 898, 902, 911, 915, 927, 930, 940, 943, 950, 958, 961, 968, 971, 976, 982, 990, 996, 1002, 1010, 1015, 1022, 1029, 1037, 1044, 1049, 1054, 1061, 1065, 1067, 1071, 1074, 1079, 1084, 1089, 1093, 1097, 1101, 1107, 1110, 1113, 1116, 1122} - -func (i FeatureID) String() string { - if i < 0 || i >= FeatureID(len(_FeatureID_index)-1) { - return "FeatureID(" + strconv.FormatInt(int64(i), 10) + ")" - } - return _FeatureID_name[_FeatureID_index[i]:_FeatureID_index[i+1]] -} -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[VendorUnknown-0] - _ = x[Intel-1] - _ = x[AMD-2] - _ = x[VIA-3] - _ = x[Transmeta-4] - _ = x[NSC-5] - _ = x[KVM-6] - _ = x[MSVM-7] - _ = x[VMware-8] - _ = x[XenHVM-9] - _ = x[Bhyve-10] - _ = x[Hygon-11] - _ = x[SiS-12] - _ = x[RDC-13] - _ = x[Ampere-14] - _ = x[ARM-15] - _ = x[Broadcom-16] - _ = x[Cavium-17] - _ = x[DEC-18] - _ = x[Fujitsu-19] - _ = x[Infineon-20] - _ = x[Motorola-21] - _ = x[NVIDIA-22] - _ = x[AMCC-23] - _ = x[Qualcomm-24] - _ = x[Marvell-25] - _ = x[lastVendor-26] -} - -const _Vendor_name = "VendorUnknownIntelAMDVIATransmetaNSCKVMMSVMVMwareXenHVMBhyveHygonSiSRDCAmpereARMBroadcomCaviumDECFujitsuInfineonMotorolaNVIDIAAMCCQualcommMarvelllastVendor" - -var _Vendor_index = [...]uint8{0, 13, 18, 21, 24, 33, 36, 39, 43, 49, 55, 60, 65, 68, 71, 77, 80, 88, 94, 97, 104, 112, 120, 126, 130, 138, 145, 155} - -func (i Vendor) String() string { - if i < 0 || i >= Vendor(len(_Vendor_index)-1) { - return "Vendor(" + strconv.FormatInt(int64(i), 10) + ")" - } - return _Vendor_name[_Vendor_index[i]:_Vendor_index[i+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 deleted file mode 100644 index d91d021..0000000 --- a/vendor/github.com/klauspost/cpuid/v2/os_darwin_arm64.go +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright (c) 2020 Klaus Post, released under MIT License. See LICENSE file. - -package cpuid - -import ( - "runtime" - "strings" - - "golang.org/x/sys/unix" -) - -func detectOS(c *CPUInfo) bool { - if runtime.GOOS != "ios" { - tryToFillCPUInfoFomSysctl(c) - } - // There are no hw.optional sysctl values for the below features on Mac OS 11.0 - // to detect their supported state dynamically. Assume the CPU features that - // Apple Silicon M1 supports to be available as a minimal set of features - // to all Go programs running on darwin/arm64. - // TODO: Add more if we know them. - c.featureSet.setIf(runtime.GOOS != "ios", AESARM, PMULL, SHA1, SHA2) - - return true -} - -func sysctlGetBool(name string) bool { - value, err := unix.SysctlUint32(name) - if err != nil { - return false - } - return value != 0 -} - -func sysctlGetString(name string) string { - value, err := unix.Sysctl(name) - if err != nil { - return "" - } - return value -} - -func sysctlGetInt(unknown int, names ...string) int { - for _, name := range names { - value, err := unix.SysctlUint32(name) - if err != nil { - continue - } - if value != 0 { - return int(value) - } - } - return unknown -} - -func sysctlGetInt64(unknown int, names ...string) int { - for _, name := range names { - value64, err := unix.SysctlUint64(name) - if err != nil { - continue - } - if int(value64) != unknown { - return int(value64) - } - } - return unknown -} - -func setFeature(c *CPUInfo, name string, feature FeatureID) { - c.featureSet.setIf(sysctlGetBool(name), feature) -} -func tryToFillCPUInfoFomSysctl(c *CPUInfo) { - c.BrandName = sysctlGetString("machdep.cpu.brand_string") - - if len(c.BrandName) != 0 { - c.VendorString = strings.Fields(c.BrandName)[0] - } - - c.PhysicalCores = sysctlGetInt(runtime.NumCPU(), "hw.physicalcpu") - c.ThreadsPerCore = sysctlGetInt(1, "machdep.cpu.thread_count", "kern.num_threads") / - sysctlGetInt(1, "hw.physicalcpu") - c.LogicalCores = sysctlGetInt(runtime.NumCPU(), "machdep.cpu.core_count") - c.Family = sysctlGetInt(0, "machdep.cpu.family", "hw.cpufamily") - c.Model = sysctlGetInt(0, "machdep.cpu.model") - c.CacheLine = sysctlGetInt64(0, "hw.cachelinesize") - c.Cache.L1I = sysctlGetInt64(-1, "hw.l1icachesize") - c.Cache.L1D = sysctlGetInt64(-1, "hw.l1icachesize") - 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_FP", FP) - setFeature(c, "hw.optional.arm.FEAT_FP16", FPHP) - setFeature(c, "hw.optional.arm.FEAT_PAuth", GPA) - 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, "", 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) -} diff --git a/vendor/github.com/klauspost/cpuid/v2/os_linux_arm64.go b/vendor/github.com/klauspost/cpuid/v2/os_linux_arm64.go deleted file mode 100644 index ee278b9..0000000 --- a/vendor/github.com/klauspost/cpuid/v2/os_linux_arm64.go +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright (c) 2020 Klaus Post, released under MIT License. See LICENSE file. - -// 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 located -// here https://github.com/golang/sys/blob/master/LICENSE - -package cpuid - -import ( - "encoding/binary" - "io/ioutil" - "runtime" -) - -// HWCAP bits. -const ( - hwcap_FP = 1 << 0 - hwcap_ASIMD = 1 << 1 - hwcap_EVTSTRM = 1 << 2 - hwcap_AES = 1 << 3 - hwcap_PMULL = 1 << 4 - hwcap_SHA1 = 1 << 5 - hwcap_SHA2 = 1 << 6 - hwcap_CRC32 = 1 << 7 - hwcap_ATOMICS = 1 << 8 - hwcap_FPHP = 1 << 9 - hwcap_ASIMDHP = 1 << 10 - hwcap_CPUID = 1 << 11 - hwcap_ASIMDRDM = 1 << 12 - hwcap_JSCVT = 1 << 13 - hwcap_FCMA = 1 << 14 - hwcap_LRCPC = 1 << 15 - hwcap_DCPOP = 1 << 16 - hwcap_SHA3 = 1 << 17 - hwcap_SM3 = 1 << 18 - hwcap_SM4 = 1 << 19 - hwcap_ASIMDDP = 1 << 20 - hwcap_SHA512 = 1 << 21 - hwcap_SVE = 1 << 22 - hwcap_ASIMDFHM = 1 << 23 -) - -func detectOS(c *CPUInfo) bool { - // For now assuming no hyperthreading is reasonable. - c.LogicalCores = runtime.NumCPU() - c.PhysicalCores = c.LogicalCores - c.ThreadsPerCore = 1 - if hwcap == 0 { - // We did not get values from the runtime. - // Try reading /proc/self/auxv - - // From https://github.com/golang/sys - const ( - _AT_HWCAP = 16 - _AT_HWCAP2 = 26 - - uintSize = int(32 << (^uint(0) >> 63)) - ) - - buf, err := ioutil.ReadFile("/proc/self/auxv") - if err != nil { - // e.g. on android /proc/self/auxv is not accessible, so silently - // ignore the error and leave Initialized = false. On some - // architectures (e.g. arm64) doinit() implements a fallback - // readout and will set Initialized = true again. - return false - } - bo := binary.LittleEndian - for len(buf) >= 2*(uintSize/8) { - var tag, val uint - switch uintSize { - case 32: - tag = uint(bo.Uint32(buf[0:])) - val = uint(bo.Uint32(buf[4:])) - buf = buf[8:] - case 64: - tag = uint(bo.Uint64(buf[0:])) - val = uint(bo.Uint64(buf[8:])) - buf = buf[16:] - } - switch tag { - case _AT_HWCAP: - hwcap = val - case _AT_HWCAP2: - // Not used - } - } - if hwcap == 0 { - return false - } - } - - // HWCap was populated by the runtime from the auxiliary vector. - // Use HWCap information since reading aarch64 system registers - // is not supported in user space on older linux kernels. - c.featureSet.setIf(isSet(hwcap, hwcap_AES), AESARM) - c.featureSet.setIf(isSet(hwcap, hwcap_ASIMD), ASIMD) - c.featureSet.setIf(isSet(hwcap, hwcap_ASIMDDP), ASIMDDP) - c.featureSet.setIf(isSet(hwcap, hwcap_ASIMDHP), ASIMDHP) - c.featureSet.setIf(isSet(hwcap, hwcap_ASIMDRDM), ASIMDRDM) - c.featureSet.setIf(isSet(hwcap, hwcap_CPUID), ARMCPUID) - c.featureSet.setIf(isSet(hwcap, hwcap_CRC32), CRC32) - c.featureSet.setIf(isSet(hwcap, hwcap_DCPOP), DCPOP) - c.featureSet.setIf(isSet(hwcap, hwcap_EVTSTRM), EVTSTRM) - c.featureSet.setIf(isSet(hwcap, hwcap_FCMA), FCMA) - c.featureSet.setIf(isSet(hwcap, hwcap_FP), FP) - c.featureSet.setIf(isSet(hwcap, hwcap_FPHP), FPHP) - c.featureSet.setIf(isSet(hwcap, hwcap_JSCVT), JSCVT) - c.featureSet.setIf(isSet(hwcap, hwcap_LRCPC), LRCPC) - c.featureSet.setIf(isSet(hwcap, hwcap_PMULL), PMULL) - c.featureSet.setIf(isSet(hwcap, hwcap_SHA1), SHA1) - c.featureSet.setIf(isSet(hwcap, hwcap_SHA2), SHA2) - c.featureSet.setIf(isSet(hwcap, hwcap_SHA3), SHA3) - c.featureSet.setIf(isSet(hwcap, hwcap_SHA512), SHA512) - c.featureSet.setIf(isSet(hwcap, hwcap_SM3), SM3) - c.featureSet.setIf(isSet(hwcap, hwcap_SM4), SM4) - c.featureSet.setIf(isSet(hwcap, hwcap_SVE), SVE) - - // The Samsung S9+ kernel reports support for atomics, but not all cores - // actually support them, resulting in SIGILL. See issue #28431. - // TODO(elias.naur): Only disable the optimization on bad chipsets on android. - c.featureSet.setIf(isSet(hwcap, hwcap_ATOMICS) && runtime.GOOS != "android", ATOMICS) - - return true -} - -func isSet(hwc uint, value uint) bool { - return hwc&value != 0 -} diff --git a/vendor/github.com/klauspost/cpuid/v2/os_other_arm64.go b/vendor/github.com/klauspost/cpuid/v2/os_other_arm64.go deleted file mode 100644 index 8733ba3..0000000 --- a/vendor/github.com/klauspost/cpuid/v2/os_other_arm64.go +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (c) 2020 Klaus Post, released under MIT License. See LICENSE file. - -//go:build arm64 && !linux && !darwin -// +build arm64,!linux,!darwin - -package cpuid - -import "runtime" - -func detectOS(c *CPUInfo) bool { - c.PhysicalCores = runtime.NumCPU() - // For now assuming 1 thread per core... - c.ThreadsPerCore = 1 - c.LogicalCores = c.PhysicalCores - return false -} diff --git a/vendor/github.com/klauspost/cpuid/v2/os_safe_linux_arm64.go b/vendor/github.com/klauspost/cpuid/v2/os_safe_linux_arm64.go deleted file mode 100644 index f8f201b..0000000 --- a/vendor/github.com/klauspost/cpuid/v2/os_safe_linux_arm64.go +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2021 Klaus Post, released under MIT License. See LICENSE file. - -//go:build nounsafe -// +build nounsafe - -package cpuid - -var hwcap uint diff --git a/vendor/github.com/klauspost/cpuid/v2/os_unsafe_linux_arm64.go b/vendor/github.com/klauspost/cpuid/v2/os_unsafe_linux_arm64.go deleted file mode 100644 index 92af622..0000000 --- a/vendor/github.com/klauspost/cpuid/v2/os_unsafe_linux_arm64.go +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (c) 2021 Klaus Post, released under MIT License. See LICENSE file. - -//go:build !nounsafe -// +build !nounsafe - -package cpuid - -import _ "unsafe" // needed for go:linkname - -//go:linkname hwcap internal/cpu.HWCap -var hwcap uint diff --git a/vendor/github.com/klauspost/cpuid/v2/test-architectures.sh b/vendor/github.com/klauspost/cpuid/v2/test-architectures.sh deleted file mode 100644 index 471d986..0000000 --- a/vendor/github.com/klauspost/cpuid/v2/test-architectures.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -set -e - -go tool dist list | while IFS=/ read os arch; do - echo "Checking $os/$arch..." - echo " normal" - GOARCH=$arch GOOS=$os go build -o /dev/null . - echo " noasm" - GOARCH=$arch GOOS=$os go build -tags noasm -o /dev/null . - echo " appengine" - GOARCH=$arch GOOS=$os go build -tags appengine -o /dev/null . - echo " noasm,appengine" - GOARCH=$arch GOOS=$os go build -tags 'appengine noasm' -o /dev/null . -done diff --git a/vendor/github.com/klauspost/reedsolomon/.gitignore b/vendor/github.com/klauspost/reedsolomon/.gitignore deleted file mode 100644 index 59610b5..0000000 --- a/vendor/github.com/klauspost/reedsolomon/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -# Compiled Object files, Static and Dynamic libs (Shared Objects) -*.o -*.a -*.so - -# Folders -_obj -_test - -# Architecture specific extensions/prefixes -*.[568vq] -[568vq].out - -*.cgo1.go -*.cgo2.c -_cgo_defun.c -_cgo_gotypes.go -_cgo_export.* - -_testmain.go - -*.exe -*.test -*.prof - -.idea \ No newline at end of file diff --git a/vendor/github.com/klauspost/reedsolomon/LICENSE b/vendor/github.com/klauspost/reedsolomon/LICENSE deleted file mode 100644 index a947e16..0000000 --- a/vendor/github.com/klauspost/reedsolomon/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Klaus Post -Copyright (c) 2015 Backblaze - -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/klauspost/reedsolomon/README.md b/vendor/github.com/klauspost/reedsolomon/README.md deleted file mode 100644 index c8f1886..0000000 --- a/vendor/github.com/klauspost/reedsolomon/README.md +++ /dev/null @@ -1,518 +0,0 @@ -# Reed-Solomon -[![Go Reference](https://pkg.go.dev/badge/github.com/klauspost/reedsolomon.svg)](https://pkg.go.dev/github.com/klauspost/reedsolomon) [![Go](https://github.com/klauspost/reedsolomon/actions/workflows/go.yml/badge.svg)](https://github.com/klauspost/reedsolomon/actions/workflows/go.yml) - -Reed-Solomon Erasure Coding in Go, with speeds exceeding 1GB/s/cpu core implemented in pure Go. - -This is a Go port of the [JavaReedSolomon](https://github.com/Backblaze/JavaReedSolomon) library released by -[Backblaze](http://backblaze.com), with some additional optimizations. - -For an introduction on erasure coding, see the post on the [Backblaze blog](https://www.backblaze.com/blog/reed-solomon/). - -For encoding high shard counts (>256) a Leopard implementation is used. -For most platforms this performs close to the original Leopard implementation in terms of speed. - -Package home: https://github.com/klauspost/reedsolomon - -Godoc: https://pkg.go.dev/github.com/klauspost/reedsolomon - -# Installation -To get the package use the standard: -```bash -go get -u github.com/klauspost/reedsolomon -``` - -Using Go modules is recommended. - -# Changes - -## 2022 - -* Leopard GF16 mode added, for up to 63336 shards. -* [WithJerasureMatrix](https://pkg.go.dev/github.com/klauspost/reedsolomon?tab=doc#WithJerasureMatrix) allows constructing a [Jerasure](https://github.com/tsuraan/Jerasure) compatible matrix. - -## 2021 - -* Use `GOAMD64=v4` to enable faster AVX2. -* Add progressive shard encoding. -* Wider AVX2 loops -* Limit concurrency on AVX2, since we are likely memory bound. -* Allow 0 parity shards. -* Allow disabling inversion cache. -* Faster AVX2 encoding. - -
    - See older changes - -## May 2020 - -* ARM64 optimizations, up to 2.5x faster. -* Added [WithFastOneParityMatrix](https://pkg.go.dev/github.com/klauspost/reedsolomon?tab=doc#WithFastOneParityMatrix) for faster operation with 1 parity shard. -* Much better performance when using a limited number of goroutines. -* AVX512 is now using multiple cores. -* Stream processing overhaul, big speedups in most cases. -* AVX512 optimizations - -## March 6, 2019 - -The pure Go implementation is about 30% faster. Minor tweaks to assembler implementations. - -## February 8, 2019 - -AVX512 accelerated version added for Intel Skylake CPUs. This can give up to a 4x speed improvement as compared to AVX2. -See [here](https://github.com/klauspost/reedsolomon#performance-on-avx512) for more details. - -## December 18, 2018 - -Assembly code for ppc64le has been contributed, this boosts performance by about 10x on this platform. - -## November 18, 2017 - -Added [WithAutoGoroutines](https://godoc.org/github.com/klauspost/reedsolomon#WithAutoGoroutines) which will attempt -to calculate the optimal number of goroutines to use based on your expected shard size and detected CPU. - -## October 1, 2017 - -* [Cauchy Matrix](https://godoc.org/github.com/klauspost/reedsolomon#WithCauchyMatrix) is now an option. -Thanks to [templexxx](https://github.com/templexxx) for the basis of this. - -* Default maximum number of [goroutines](https://godoc.org/github.com/klauspost/reedsolomon#WithMaxGoroutines) -has been increased for better multi-core scaling. - -* After several requests the Reconstruct and ReconstructData now slices of zero length but sufficient capacity to -be used instead of allocating new memory. - -## August 26, 2017 - -* The [`Encoder()`](https://godoc.org/github.com/klauspost/reedsolomon#Encoder) now contains an `Update` -function contributed by [chenzhongtao](https://github.com/chenzhongtao). - -* [Frank Wessels](https://github.com/fwessels) kindly contributed ARM 64 bit assembly, -which gives a huge performance boost on this platform. - -## July 20, 2017 - -`ReconstructData` added to [`Encoder`](https://godoc.org/github.com/klauspost/reedsolomon#Encoder) interface. -This can cause compatibility issues if you implement your own Encoder. A simple workaround can be added: - -```Go -func (e *YourEnc) ReconstructData(shards [][]byte) error { - return ReconstructData(shards) -} -``` - -You can of course also do your own implementation. -The [`StreamEncoder`](https://godoc.org/github.com/klauspost/reedsolomon#StreamEncoder) -handles this without modifying the interface. -This is a good lesson on why returning interfaces is not a good design. - -
    - -# Usage - -This section assumes you know the basics of Reed-Solomon encoding. -A good start is this [Backblaze blog post](https://www.backblaze.com/blog/reed-solomon/). - -This package performs the calculation of the parity sets. The usage is therefore relatively simple. - -First of all, you need to choose your distribution of data and parity shards. -A 'good' distribution is very subjective, and will depend a lot on your usage scenario. - -To create an encoder with 10 data shards (where your data goes) and 3 parity shards (calculated): -```Go - enc, err := reedsolomon.New(10, 3) -``` -This encoder will work for all parity sets with this distribution of data and parity shards. - -If you will primarily be using it with one shard size it is recommended to use -[`WithAutoGoroutines(shardSize)`](https://pkg.go.dev/github.com/klauspost/reedsolomon?tab=doc#WithAutoGoroutines) -as an additional parameter. This will attempt to calculate the optimal number of goroutines to use for the best speed. -It is not required that all shards are this size. - -Then you send and receive data that is a simple slice of byte slices; `[][]byte`. -In the example above, the top slice must have a length of 13. - -```Go - data := make([][]byte, 13) -``` -You should then fill the 10 first slices with *equally sized* data, -and create parity shards that will be populated with parity data. In this case we create the data in memory, -but you could for instance also use [mmap](https://github.com/edsrzf/mmap-go) to map files. - -```Go - // Create all shards, size them at 50000 each - for i := range input { - data[i] := make([]byte, 50000) - } - - - // Fill some data into the data shards - for i, in := range data[:10] { - for j:= range in { - in[j] = byte((i+j)&0xff) - } - } -``` - -To populate the parity shards, you simply call `Encode()` with your data. -```Go - err = enc.Encode(data) -``` -The only cases where you should get an error is, if the data shards aren't of equal size. -The last 3 shards now contain parity data. You can verify this by calling `Verify()`: - -```Go - ok, err = enc.Verify(data) -``` - -The final (and important) part is to be able to reconstruct missing shards. -For this to work, you need to know which parts of your data is missing. -The encoder *does not know which parts are invalid*, so if data corruption is a likely scenario, -you need to implement a hash check for each shard. - -If a byte has changed in your set, and you don't know which it is, there is no way to reconstruct the data set. - -To indicate missing data, you set the shard to nil before calling `Reconstruct()`: - -```Go - // Delete two data shards - data[3] = nil - data[7] = nil - - // Reconstruct the missing shards - err := enc.Reconstruct(data) -``` -The missing data and parity shards will be recreated. If more than 3 shards are missing, the reconstruction will fail. - -If you are only interested in the data shards (for reading purposes) you can call `ReconstructData()`: - -```Go - // Delete two data shards - data[3] = nil - data[7] = nil - - // Reconstruct just the missing data shards - err := enc.ReconstructData(data) -``` - -If you don't need all data shards you can use `ReconstructSome()`: - -```Go - // Delete two data shards - data[3] = nil - data[7] = nil - - // Reconstruct just the shard 3 - err := enc.ReconstructSome(data, []bool{false, false, false, true, false, false, false, false}) -``` - -So to sum up reconstruction: -* The number of data/parity shards must match the numbers used for encoding. -* The order of shards must be the same as used when encoding. -* You may only supply data you know is valid. -* Invalid shards should be set to nil. - -For complete examples of an encoder and decoder see the -[examples folder](https://github.com/klauspost/reedsolomon/tree/master/examples). - -# Splitting/Joining Data - -You might have a large slice of data. -To help you split this, there are some helper functions that can split and join a single byte slice. - -```Go - bigfile, _ := ioutil.Readfile("myfile.data") - - // Split the file - split, err := enc.Split(bigfile) -``` -This will split the file into the number of data shards set when creating the encoder and create empty parity shards. - -An important thing to note is that you have to *keep track of the exact input size*. -If the size of the input isn't divisible by the number of data shards, extra zeros will be inserted in the last shard. - -To join a data set, use the `Join()` function, which will join the shards and write it to the `io.Writer` you supply: -```Go - // Join a data set and write it to io.Discard. - err = enc.Join(io.Discard, data, len(bigfile)) -``` - -# Progressive encoding - -It is possible to encode individual shards using EncodeIdx: - -```Go - // EncodeIdx will add parity for a single data shard. - // Parity shards should start out as 0. The caller must zero them. - // Data shards must be delivered exactly once. There is no check for this. - // The parity shards will always be updated and the data shards will remain the same. - EncodeIdx(dataShard []byte, idx int, parity [][]byte) error -``` - -This allows progressively encoding the parity by sending individual data shards. -There is no requirement on shards being delivered in order, -but when sent in order it allows encoding shards one at the time, -effectively allowing the operation to be streaming. - -The result will be the same as encoding all shards at once. -There is a minor speed penalty using this method, so send -shards at once if they are available. - -## Example - -```Go -func test() { - // Create an encoder with 7 data and 3 parity slices. - enc, _ := reedsolomon.New(7, 3) - - // This will be our output parity. - parity := make([][]byte, 3) - for i := range parity { - parity[i] = make([]byte, 10000) - } - - for i := 0; i < 7; i++ { - // Send data shards one at the time. - _ = enc.EncodeIdx(make([]byte, 10000), i, parity) - } - - // parity now contains parity, as if all data was sent in one call. -} -``` - -# Streaming/Merging - -It might seem like a limitation that all data should be in memory, -but an important property is that *as long as the number of data/parity shards are the same, -you can merge/split data sets*, and they will remain valid as a separate set. - -```Go - // Split the data set of 50000 elements into two of 25000 - splitA := make([][]byte, 13) - splitB := make([][]byte, 13) - - // Merge into a 100000 element set - merged := make([][]byte, 13) - - for i := range data { - splitA[i] = data[i][:25000] - splitB[i] = data[i][25000:] - - // Concatenate it to itself - merged[i] = append(make([]byte, 0, len(data[i])*2), data[i]...) - merged[i] = append(merged[i], data[i]...) - } - - // Each part should still verify as ok. - ok, err := enc.Verify(splitA) - if ok && err == nil { - log.Println("splitA ok") - } - - ok, err = enc.Verify(splitB) - if ok && err == nil { - log.Println("splitB ok") - } - - ok, err = enc.Verify(merge) - if ok && err == nil { - log.Println("merge ok") - } -``` - -This means that if you have a data set that may not fit into memory, you can split processing into smaller blocks. -For the best throughput, don't use too small blocks. - -This also means that you can divide big input up into smaller blocks, and do reconstruction on parts of your data. -This doesn't give the same flexibility of a higher number of data shards, but it will be much more performant. - -# Streaming API - -There has been added support for a streaming API, to help perform fully streaming operations, -which enables you to do the same operations, but on streams. -To use the stream API, use [`NewStream`](https://godoc.org/github.com/klauspost/reedsolomon#NewStream) function -to create the encoding/decoding interfaces. - -You can use [`WithConcurrentStreams`](https://godoc.org/github.com/klauspost/reedsolomon#WithConcurrentStreams) -to ready an interface that reads/writes concurrently from the streams. - -You can specify the size of each operation using -[`WithStreamBlockSize`](https://godoc.org/github.com/klauspost/reedsolomon#WithStreamBlockSize). -This will set the size of each read/write operation. - -Input is delivered as `[]io.Reader`, output as `[]io.Writer`, and functionality corresponds to the in-memory API. -Each stream must supply the same amount of data, similar to how each slice must be similar size with the in-memory API. -If an error occurs in relation to a stream, -a [`StreamReadError`](https://godoc.org/github.com/klauspost/reedsolomon#StreamReadError) -or [`StreamWriteError`](https://godoc.org/github.com/klauspost/reedsolomon#StreamWriteError) -will help you determine which stream was the offender. - -There is no buffering or timeouts/retry specified. If you want to add that, you need to add it to the Reader/Writer. - -For complete examples of a streaming encoder and decoder see the -[examples folder](https://github.com/klauspost/reedsolomon/tree/master/examples). - -GF16 (more than 256 shards) is not supported by the streaming interface. - -# Advanced Options - -You can modify internal options which affects how jobs are split between and processed by goroutines. - -To create options, use the WithXXX functions. You can supply options to `New`, `NewStream`. -If no Options are supplied, default options are used. - -Example of how to supply options: - - ```Go - enc, err := reedsolomon.New(10, 3, WithMaxGoroutines(25)) - ``` - -# Leopard Compatible GF16 - -When you encode more than 256 shards the library will switch to a [Leopard-RS](https://github.com/catid/leopard) implementation. - -This allows encoding up to 65536 shards (data+parity) with the following limitations, similar to leopard: - -* The original and recovery data must not exceed 65536 pieces. -* The shard size *must* each be a multiple of 64 bytes. -* Each buffer should have the same number of bytes. -* Even the last shard must be rounded up to the block size. - -| | Regular | Leopard | -|-----------------|---------|---------| -| Encode | ✓ | ✓ | -| EncodeIdx | ✓ | - | -| Verify | ✓ | ✓ | -| Reconstruct | ✓ | ✓ | -| ReconstructData | ✓ | ✓ | -| ReconstructSome | ✓ | ✓ (+) | -| Update | ✓ | - | -| Split | ✓ | ✓ | -| Join | ✓ | ✓ | - -* (+) Same as calling `ReconstructData`. - -The Split/Join functions will help to split an input to the proper sizes. - -Speed can be expected to be `O(N*log(N))`, compared to the `O(N*N)`. -Reconstruction matrix calculation is more time-consuming, -so be sure to include that as part of any benchmark you run. - -For now SSSE3, AVX2 and AVX512 assembly are available on AMD64 platforms. - -Leopard mode currently always runs as a single goroutine, since multiple gorouties doesn't provide any worthwhile speedup. - -## Forcing Leopard GF16 - -The `WithLeopardGF16(true)` can be used to use Leopard GF16 for all operations. -This is *not* compatible with the Leopard library that has a separate GF8 implementation. - -Benchmark Encoding and Reconstructing *1KB* shards with variable number of shards. -For Cauchy matrix the inversion cache is disabled for a more "fair" test. -Speed is total shard size for each operation. Data shard throughput is speed/2. -AVX2 is used. - -| Encoder | Shards | Encode | Recover All | Recover One | -|--------------|-------------|---------------|--------------|--------------| -| Cauchy | 4+4 | 23076.83 MB/s | 3048.86 MB/s | 5620.84 MB/s | -| Cauchy | 8+8 | 15206.87 MB/s | 3041.99 MB/s | 7173.71 MB/s | -| Cauchy | 16+16 | 7427.47 MB/s | 1384.58 MB/s | 6343.85 MB/s | -| Cauchy | 32+32 | 3785.64 MB/s | 557.60 MB/s | 4660.27 MB/s | -| Cauchy | 64+64 | 1911.93 MB/s | 160.54 MB/s | 2864.63 MB/s | -| Cauchy | 128+128 | 963.83 MB/s | 42.81 MB/s | 1597.93 MB/s | -| Leopard GF16 | 4+4 | 18468.32 MB/s | 10.45 MB/s | 10.30 MB/s | -| Leopard GF16 | 8+8 | 10293.79 MB/s | 20.83 MB/s | 20.51 MB/s | -| Leopard GF16 | 16+16 | 12386.04 MB/s | 40.80 MB/s | 40.47 MB/s | -| Leopard GF16 | 32+32 | 7347.35 MB/s | 81.15 MB/s | 79.80 MB/s | -| Leopard GF16 | 64+64 | 8299.63 MB/s | 150.47 MB/s | 154.15 MB/s | -| Leopard GF16 | 128+128 | 5629.04 MB/s | 278.84 MB/s | 289.15 MB/s | -| Leopard GF16 | 256+256 | 6158.66 MB/s | 454.14 MB/s | 506.70 MB/s | -| Leopard GF16 | 512+512 | 4418.58 MB/s | 685.75 MB/s | 801.63 MB/s | -| Leopard GF16 | 1024+1024 | 4778.05 MB/s | 814.51 MB/s | 1080.19 MB/s | -| Leopard GF16 | 2048+2048 | 3417.05 MB/s | 911.64 MB/s | 1179.48 MB/s | -| Leopard GF16 | 4096+4096 | 3209.41 MB/s | 729.13 MB/s | 1135.06 MB/s | -| Leopard GF16 | 8192+8192 | 2034.11 MB/s | 604.52 MB/s | 842.13 MB/s | -| Leopard GF16 | 16384+16384 | 1525.88 MB/s | 486.74 MB/s | 750.01 MB/s | -| Leopard GF16 | 32768+32768 | 1138.67 MB/s | 482.81 MB/s | 712.73 MB/s | - -"Traditional" encoding is faster until somewhere between 16 and 32 shards. -Leopard provides fast encoding in all cases, but shows a significant overhead for reconstruction. - -Calculating the reconstruction matrix takes a significant amount of computation. -With bigger shards that will be smaller. Arguably, fewer shards typically also means bigger shards. -Due to the high shard count caching reconstruction matrices generally isn't feasible for Leopard. - -# Performance - -Performance depends mainly on the number of parity shards. -In rough terms, doubling the number of parity shards will double the encoding time. - -Here are the throughput numbers with some different selections of data and parity shards. -For reference each shard is 1MB random data, and 16 CPU cores are used for encoding. - -| Data | Parity | Go MB/s | SSSE3 MB/s | AVX2 MB/s | -|------|--------|---------|------------|-----------| -| 5 | 2 | 20,772 | 66,355 | 108,755 | -| 8 | 8 | 6,815 | 38,338 | 70,516 | -| 10 | 4 | 9,245 | 48,237 | 93,875 | -| 50 | 20 | 2,063 | 12,130 | 22,828 | - -The throughput numbers here is the size of the encoded data and parity shards. - -If `runtime.GOMAXPROCS()` is set to a value higher than 1, -the encoder will use multiple goroutines to perform the calculations in `Verify`, `Encode` and `Reconstruct`. - - -Benchmarking `Reconstruct()` followed by a `Verify()` (=`all`) versus just calling `ReconstructData()` (=`data`) gives the following result: -``` -benchmark all MB/s data MB/s speedup -BenchmarkReconstruct10x2x10000-8 2011.67 10530.10 5.23x -BenchmarkReconstruct50x5x50000-8 4585.41 14301.60 3.12x -BenchmarkReconstruct10x2x1M-8 8081.15 28216.41 3.49x -BenchmarkReconstruct5x2x1M-8 5780.07 28015.37 4.85x -BenchmarkReconstruct10x4x1M-8 4352.56 14367.61 3.30x -BenchmarkReconstruct50x20x1M-8 1364.35 4189.79 3.07x -BenchmarkReconstruct10x4x16M-8 1484.35 5779.53 3.89x -``` - -The performance on AVX512 has been accelerated for CPUs when available. - -## ARM64 NEON - -By exploiting NEON instructions the performance for ARM has been accelerated. -Below are the performance numbers for a single core on an EC2 m6g.16xlarge (Graviton2) instance (Amazon Linux 2): - -``` -BenchmarkGalois128K-64 119562 10028 ns/op 13070.78 MB/s -BenchmarkGalois1M-64 14380 83424 ns/op 12569.22 MB/s -BenchmarkGaloisXor128K-64 96508 12432 ns/op 10543.29 MB/s -BenchmarkGaloisXor1M-64 10000 100322 ns/op 10452.13 MB/s -``` - -# Performance on ppc64le - -The performance for ppc64le has been accelerated. -This gives roughly a 10x performance improvement on this architecture as can be seen below: - -``` -benchmark old MB/s new MB/s speedup -BenchmarkGalois128K-160 948.87 8878.85 9.36x -BenchmarkGalois1M-160 968.85 9041.92 9.33x -BenchmarkGaloisXor128K-160 862.02 7905.00 9.17x -BenchmarkGaloisXor1M-160 784.60 6296.65 8.03x -``` - - -# Links -* [Backblaze Open Sources Reed-Solomon Erasure Coding Source Code](https://www.backblaze.com/blog/reed-solomon/). -* [JavaReedSolomon](https://github.com/Backblaze/JavaReedSolomon). Compatible java library by Backblaze. -* [ocaml-reed-solomon-erasure](https://gitlab.com/darrenldl/ocaml-reed-solomon-erasure). Compatible OCaml implementation. -* [reedsolomon-c](https://github.com/jannson/reedsolomon-c). C version, compatible with output from this package. -* [Reed-Solomon Erasure Coding in Haskell](https://github.com/NicolasT/reedsolomon). Haskell port of the package with similar performance. -* [reed-solomon-erasure](https://github.com/darrenldl/reed-solomon-erasure). Compatible Rust implementation. -* [go-erasure](https://github.com/somethingnew2-0/go-erasure). A similar library using cgo, slower in my tests. -* [Screaming Fast Galois Field Arithmetic](http://www.snia.org/sites/default/files2/SDC2013/presentations/NewThinking/EthanMiller_Screaming_Fast_Galois_Field%20Arithmetic_SIMD%20Instructions.pdf). Basis for SSE3 optimizations. -* [Leopard-RS](https://github.com/catid/leopard) C library used as basis for GF16 implementation. - -# License - -This code, as the original [JavaReedSolomon](https://github.com/Backblaze/JavaReedSolomon) is published under an MIT license. See LICENSE file for more information. diff --git a/vendor/github.com/klauspost/reedsolomon/galois.go b/vendor/github.com/klauspost/reedsolomon/galois.go deleted file mode 100644 index 703f209..0000000 --- a/vendor/github.com/klauspost/reedsolomon/galois.go +++ /dev/null @@ -1,954 +0,0 @@ -/** - * 8-bit Galois Field - * Copyright 2015, Klaus Post - * Copyright 2015, Backblaze, Inc. All rights reserved. - */ - -package reedsolomon - -import "encoding/binary" - -const ( - // The number of elements in the field. - fieldSize = 256 - - // The polynomial used to generate the logarithm table. - // - // There are a number of polynomials that work to generate - // a Galois field of 256 elements. The choice is arbitrary, - // and we just use the first one. - // - // The possibilities are: 29, 43, 45, 77, 95, 99, 101, 105, - //* 113, 135, 141, 169, 195, 207, 231, and 245. - generatingPolynomial = 29 -) - -var logTable = [fieldSize]byte{ - 0, 0, 1, 25, 2, 50, 26, 198, - 3, 223, 51, 238, 27, 104, 199, 75, - 4, 100, 224, 14, 52, 141, 239, 129, - 28, 193, 105, 248, 200, 8, 76, 113, - 5, 138, 101, 47, 225, 36, 15, 33, - 53, 147, 142, 218, 240, 18, 130, 69, - 29, 181, 194, 125, 106, 39, 249, 185, - 201, 154, 9, 120, 77, 228, 114, 166, - 6, 191, 139, 98, 102, 221, 48, 253, - 226, 152, 37, 179, 16, 145, 34, 136, - 54, 208, 148, 206, 143, 150, 219, 189, - 241, 210, 19, 92, 131, 56, 70, 64, - 30, 66, 182, 163, 195, 72, 126, 110, - 107, 58, 40, 84, 250, 133, 186, 61, - 202, 94, 155, 159, 10, 21, 121, 43, - 78, 212, 229, 172, 115, 243, 167, 87, - 7, 112, 192, 247, 140, 128, 99, 13, - 103, 74, 222, 237, 49, 197, 254, 24, - 227, 165, 153, 119, 38, 184, 180, 124, - 17, 68, 146, 217, 35, 32, 137, 46, - 55, 63, 209, 91, 149, 188, 207, 205, - 144, 135, 151, 178, 220, 252, 190, 97, - 242, 86, 211, 171, 20, 42, 93, 158, - 132, 60, 57, 83, 71, 109, 65, 162, - 31, 45, 67, 216, 183, 123, 164, 118, - 196, 23, 73, 236, 127, 12, 111, 246, - 108, 161, 59, 82, 41, 157, 85, 170, - 251, 96, 134, 177, 187, 204, 62, 90, - 203, 89, 95, 176, 156, 169, 160, 81, - 11, 245, 22, 235, 122, 117, 44, 215, - 79, 174, 213, 233, 230, 231, 173, 232, - 116, 214, 244, 234, 168, 80, 88, 175, -} - -/** - * Inverse of the logarithm table. Maps integer logarithms - * to members of the field. There is no entry for 255 - * because the highest log is 254. - * - * This table was generated by `go run gentables.go` - */ -var expTable = []byte{0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, 0x1d, 0x3a, 0x74, 0xe8, 0xcd, 0x87, 0x13, 0x26, 0x4c, 0x98, 0x2d, 0x5a, 0xb4, 0x75, 0xea, 0xc9, 0x8f, 0x3, 0x6, 0xc, 0x18, 0x30, 0x60, 0xc0, 0x9d, 0x27, 0x4e, 0x9c, 0x25, 0x4a, 0x94, 0x35, 0x6a, 0xd4, 0xb5, 0x77, 0xee, 0xc1, 0x9f, 0x23, 0x46, 0x8c, 0x5, 0xa, 0x14, 0x28, 0x50, 0xa0, 0x5d, 0xba, 0x69, 0xd2, 0xb9, 0x6f, 0xde, 0xa1, 0x5f, 0xbe, 0x61, 0xc2, 0x99, 0x2f, 0x5e, 0xbc, 0x65, 0xca, 0x89, 0xf, 0x1e, 0x3c, 0x78, 0xf0, 0xfd, 0xe7, 0xd3, 0xbb, 0x6b, 0xd6, 0xb1, 0x7f, 0xfe, 0xe1, 0xdf, 0xa3, 0x5b, 0xb6, 0x71, 0xe2, 0xd9, 0xaf, 0x43, 0x86, 0x11, 0x22, 0x44, 0x88, 0xd, 0x1a, 0x34, 0x68, 0xd0, 0xbd, 0x67, 0xce, 0x81, 0x1f, 0x3e, 0x7c, 0xf8, 0xed, 0xc7, 0x93, 0x3b, 0x76, 0xec, 0xc5, 0x97, 0x33, 0x66, 0xcc, 0x85, 0x17, 0x2e, 0x5c, 0xb8, 0x6d, 0xda, 0xa9, 0x4f, 0x9e, 0x21, 0x42, 0x84, 0x15, 0x2a, 0x54, 0xa8, 0x4d, 0x9a, 0x29, 0x52, 0xa4, 0x55, 0xaa, 0x49, 0x92, 0x39, 0x72, 0xe4, 0xd5, 0xb7, 0x73, 0xe6, 0xd1, 0xbf, 0x63, 0xc6, 0x91, 0x3f, 0x7e, 0xfc, 0xe5, 0xd7, 0xb3, 0x7b, 0xf6, 0xf1, 0xff, 0xe3, 0xdb, 0xab, 0x4b, 0x96, 0x31, 0x62, 0xc4, 0x95, 0x37, 0x6e, 0xdc, 0xa5, 0x57, 0xae, 0x41, 0x82, 0x19, 0x32, 0x64, 0xc8, 0x8d, 0x7, 0xe, 0x1c, 0x38, 0x70, 0xe0, 0xdd, 0xa7, 0x53, 0xa6, 0x51, 0xa2, 0x59, 0xb2, 0x79, 0xf2, 0xf9, 0xef, 0xc3, 0x9b, 0x2b, 0x56, 0xac, 0x45, 0x8a, 0x9, 0x12, 0x24, 0x48, 0x90, 0x3d, 0x7a, 0xf4, 0xf5, 0xf7, 0xf3, 0xfb, 0xeb, 0xcb, 0x8b, 0xb, 0x16, 0x2c, 0x58, 0xb0, 0x7d, 0xfa, 0xe9, 0xcf, 0x83, 0x1b, 0x36, 0x6c, 0xd8, 0xad, 0x47, 0x8e, 0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, 0x1d, 0x3a, 0x74, 0xe8, 0xcd, 0x87, 0x13, 0x26, 0x4c, 0x98, 0x2d, 0x5a, 0xb4, 0x75, 0xea, 0xc9, 0x8f, 0x3, 0x6, 0xc, 0x18, 0x30, 0x60, 0xc0, 0x9d, 0x27, 0x4e, 0x9c, 0x25, 0x4a, 0x94, 0x35, 0x6a, 0xd4, 0xb5, 0x77, 0xee, 0xc1, 0x9f, 0x23, 0x46, 0x8c, 0x5, 0xa, 0x14, 0x28, 0x50, 0xa0, 0x5d, 0xba, 0x69, 0xd2, 0xb9, 0x6f, 0xde, 0xa1, 0x5f, 0xbe, 0x61, 0xc2, 0x99, 0x2f, 0x5e, 0xbc, 0x65, 0xca, 0x89, 0xf, 0x1e, 0x3c, 0x78, 0xf0, 0xfd, 0xe7, 0xd3, 0xbb, 0x6b, 0xd6, 0xb1, 0x7f, 0xfe, 0xe1, 0xdf, 0xa3, 0x5b, 0xb6, 0x71, 0xe2, 0xd9, 0xaf, 0x43, 0x86, 0x11, 0x22, 0x44, 0x88, 0xd, 0x1a, 0x34, 0x68, 0xd0, 0xbd, 0x67, 0xce, 0x81, 0x1f, 0x3e, 0x7c, 0xf8, 0xed, 0xc7, 0x93, 0x3b, 0x76, 0xec, 0xc5, 0x97, 0x33, 0x66, 0xcc, 0x85, 0x17, 0x2e, 0x5c, 0xb8, 0x6d, 0xda, 0xa9, 0x4f, 0x9e, 0x21, 0x42, 0x84, 0x15, 0x2a, 0x54, 0xa8, 0x4d, 0x9a, 0x29, 0x52, 0xa4, 0x55, 0xaa, 0x49, 0x92, 0x39, 0x72, 0xe4, 0xd5, 0xb7, 0x73, 0xe6, 0xd1, 0xbf, 0x63, 0xc6, 0x91, 0x3f, 0x7e, 0xfc, 0xe5, 0xd7, 0xb3, 0x7b, 0xf6, 0xf1, 0xff, 0xe3, 0xdb, 0xab, 0x4b, 0x96, 0x31, 0x62, 0xc4, 0x95, 0x37, 0x6e, 0xdc, 0xa5, 0x57, 0xae, 0x41, 0x82, 0x19, 0x32, 0x64, 0xc8, 0x8d, 0x7, 0xe, 0x1c, 0x38, 0x70, 0xe0, 0xdd, 0xa7, 0x53, 0xa6, 0x51, 0xa2, 0x59, 0xb2, 0x79, 0xf2, 0xf9, 0xef, 0xc3, 0x9b, 0x2b, 0x56, 0xac, 0x45, 0x8a, 0x9, 0x12, 0x24, 0x48, 0x90, 0x3d, 0x7a, 0xf4, 0xf5, 0xf7, 0xf3, 0xfb, 0xeb, 0xcb, 0x8b, 0xb, 0x16, 0x2c, 0x58, 0xb0, 0x7d, 0xfa, 0xe9, 0xcf, 0x83, 0x1b, 0x36, 0x6c, 0xd8, 0xad, 0x47, 0x8e} - -func galAdd(a, b byte) byte { - return a ^ b -} - -func galSub(a, b byte) byte { - return a ^ b -} - -// Table from https://github.com/templexxx/reedsolomon -var invTable = [256]byte{0x0, 0x1, 0x8e, 0xf4, 0x47, 0xa7, 0x7a, 0xba, 0xad, 0x9d, 0xdd, 0x98, 0x3d, 0xaa, 0x5d, 0x96, 0xd8, 0x72, 0xc0, 0x58, 0xe0, 0x3e, 0x4c, 0x66, 0x90, 0xde, 0x55, 0x80, 0xa0, 0x83, 0x4b, 0x2a, 0x6c, 0xed, 0x39, 0x51, 0x60, 0x56, 0x2c, 0x8a, 0x70, 0xd0, 0x1f, 0x4a, 0x26, 0x8b, 0x33, 0x6e, 0x48, 0x89, 0x6f, 0x2e, 0xa4, 0xc3, 0x40, 0x5e, 0x50, 0x22, 0xcf, 0xa9, 0xab, 0xc, 0x15, 0xe1, 0x36, 0x5f, 0xf8, 0xd5, 0x92, 0x4e, 0xa6, 0x4, 0x30, 0x88, 0x2b, 0x1e, 0x16, 0x67, 0x45, 0x93, 0x38, 0x23, 0x68, 0x8c, 0x81, 0x1a, 0x25, 0x61, 0x13, 0xc1, 0xcb, 0x63, 0x97, 0xe, 0x37, 0x41, 0x24, 0x57, 0xca, 0x5b, 0xb9, 0xc4, 0x17, 0x4d, 0x52, 0x8d, 0xef, 0xb3, 0x20, 0xec, 0x2f, 0x32, 0x28, 0xd1, 0x11, 0xd9, 0xe9, 0xfb, 0xda, 0x79, 0xdb, 0x77, 0x6, 0xbb, 0x84, 0xcd, 0xfe, 0xfc, 0x1b, 0x54, 0xa1, 0x1d, 0x7c, 0xcc, 0xe4, 0xb0, 0x49, 0x31, 0x27, 0x2d, 0x53, 0x69, 0x2, 0xf5, 0x18, 0xdf, 0x44, 0x4f, 0x9b, 0xbc, 0xf, 0x5c, 0xb, 0xdc, 0xbd, 0x94, 0xac, 0x9, 0xc7, 0xa2, 0x1c, 0x82, 0x9f, 0xc6, 0x34, 0xc2, 0x46, 0x5, 0xce, 0x3b, 0xd, 0x3c, 0x9c, 0x8, 0xbe, 0xb7, 0x87, 0xe5, 0xee, 0x6b, 0xeb, 0xf2, 0xbf, 0xaf, 0xc5, 0x64, 0x7, 0x7b, 0x95, 0x9a, 0xae, 0xb6, 0x12, 0x59, 0xa5, 0x35, 0x65, 0xb8, 0xa3, 0x9e, 0xd2, 0xf7, 0x62, 0x5a, 0x85, 0x7d, 0xa8, 0x3a, 0x29, 0x71, 0xc8, 0xf6, 0xf9, 0x43, 0xd7, 0xd6, 0x10, 0x73, 0x76, 0x78, 0x99, 0xa, 0x19, 0x91, 0x14, 0x3f, 0xe6, 0xf0, 0x86, 0xb1, 0xe2, 0xf1, 0xfa, 0x74, 0xf3, 0xb4, 0x6d, 0x21, 0xb2, 0x6a, 0xe3, 0xe7, 0xb5, 0xea, 0x3, 0x8f, 0xd3, 0xc9, 0x42, 0xd4, 0xe8, 0x75, 0x7f, 0xff, 0x7e, 0xfd} - -var mulTable = [256][256]uint8{{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, - {0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff}, - {0x0, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, 0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, 0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e, 0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e, 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e, 0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe, 0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe, 0x1d, 0x1f, 0x19, 0x1b, 0x15, 0x17, 0x11, 0x13, 0xd, 0xf, 0x9, 0xb, 0x5, 0x7, 0x1, 0x3, 0x3d, 0x3f, 0x39, 0x3b, 0x35, 0x37, 0x31, 0x33, 0x2d, 0x2f, 0x29, 0x2b, 0x25, 0x27, 0x21, 0x23, 0x5d, 0x5f, 0x59, 0x5b, 0x55, 0x57, 0x51, 0x53, 0x4d, 0x4f, 0x49, 0x4b, 0x45, 0x47, 0x41, 0x43, 0x7d, 0x7f, 0x79, 0x7b, 0x75, 0x77, 0x71, 0x73, 0x6d, 0x6f, 0x69, 0x6b, 0x65, 0x67, 0x61, 0x63, 0x9d, 0x9f, 0x99, 0x9b, 0x95, 0x97, 0x91, 0x93, 0x8d, 0x8f, 0x89, 0x8b, 0x85, 0x87, 0x81, 0x83, 0xbd, 0xbf, 0xb9, 0xbb, 0xb5, 0xb7, 0xb1, 0xb3, 0xad, 0xaf, 0xa9, 0xab, 0xa5, 0xa7, 0xa1, 0xa3, 0xdd, 0xdf, 0xd9, 0xdb, 0xd5, 0xd7, 0xd1, 0xd3, 0xcd, 0xcf, 0xc9, 0xcb, 0xc5, 0xc7, 0xc1, 0xc3, 0xfd, 0xff, 0xf9, 0xfb, 0xf5, 0xf7, 0xf1, 0xf3, 0xed, 0xef, 0xe9, 0xeb, 0xe5, 0xe7, 0xe1, 0xe3}, - {0x0, 0x3, 0x6, 0x5, 0xc, 0xf, 0xa, 0x9, 0x18, 0x1b, 0x1e, 0x1d, 0x14, 0x17, 0x12, 0x11, 0x30, 0x33, 0x36, 0x35, 0x3c, 0x3f, 0x3a, 0x39, 0x28, 0x2b, 0x2e, 0x2d, 0x24, 0x27, 0x22, 0x21, 0x60, 0x63, 0x66, 0x65, 0x6c, 0x6f, 0x6a, 0x69, 0x78, 0x7b, 0x7e, 0x7d, 0x74, 0x77, 0x72, 0x71, 0x50, 0x53, 0x56, 0x55, 0x5c, 0x5f, 0x5a, 0x59, 0x48, 0x4b, 0x4e, 0x4d, 0x44, 0x47, 0x42, 0x41, 0xc0, 0xc3, 0xc6, 0xc5, 0xcc, 0xcf, 0xca, 0xc9, 0xd8, 0xdb, 0xde, 0xdd, 0xd4, 0xd7, 0xd2, 0xd1, 0xf0, 0xf3, 0xf6, 0xf5, 0xfc, 0xff, 0xfa, 0xf9, 0xe8, 0xeb, 0xee, 0xed, 0xe4, 0xe7, 0xe2, 0xe1, 0xa0, 0xa3, 0xa6, 0xa5, 0xac, 0xaf, 0xaa, 0xa9, 0xb8, 0xbb, 0xbe, 0xbd, 0xb4, 0xb7, 0xb2, 0xb1, 0x90, 0x93, 0x96, 0x95, 0x9c, 0x9f, 0x9a, 0x99, 0x88, 0x8b, 0x8e, 0x8d, 0x84, 0x87, 0x82, 0x81, 0x9d, 0x9e, 0x9b, 0x98, 0x91, 0x92, 0x97, 0x94, 0x85, 0x86, 0x83, 0x80, 0x89, 0x8a, 0x8f, 0x8c, 0xad, 0xae, 0xab, 0xa8, 0xa1, 0xa2, 0xa7, 0xa4, 0xb5, 0xb6, 0xb3, 0xb0, 0xb9, 0xba, 0xbf, 0xbc, 0xfd, 0xfe, 0xfb, 0xf8, 0xf1, 0xf2, 0xf7, 0xf4, 0xe5, 0xe6, 0xe3, 0xe0, 0xe9, 0xea, 0xef, 0xec, 0xcd, 0xce, 0xcb, 0xc8, 0xc1, 0xc2, 0xc7, 0xc4, 0xd5, 0xd6, 0xd3, 0xd0, 0xd9, 0xda, 0xdf, 0xdc, 0x5d, 0x5e, 0x5b, 0x58, 0x51, 0x52, 0x57, 0x54, 0x45, 0x46, 0x43, 0x40, 0x49, 0x4a, 0x4f, 0x4c, 0x6d, 0x6e, 0x6b, 0x68, 0x61, 0x62, 0x67, 0x64, 0x75, 0x76, 0x73, 0x70, 0x79, 0x7a, 0x7f, 0x7c, 0x3d, 0x3e, 0x3b, 0x38, 0x31, 0x32, 0x37, 0x34, 0x25, 0x26, 0x23, 0x20, 0x29, 0x2a, 0x2f, 0x2c, 0xd, 0xe, 0xb, 0x8, 0x1, 0x2, 0x7, 0x4, 0x15, 0x16, 0x13, 0x10, 0x19, 0x1a, 0x1f, 0x1c}, - {0x0, 0x4, 0x8, 0xc, 0x10, 0x14, 0x18, 0x1c, 0x20, 0x24, 0x28, 0x2c, 0x30, 0x34, 0x38, 0x3c, 0x40, 0x44, 0x48, 0x4c, 0x50, 0x54, 0x58, 0x5c, 0x60, 0x64, 0x68, 0x6c, 0x70, 0x74, 0x78, 0x7c, 0x80, 0x84, 0x88, 0x8c, 0x90, 0x94, 0x98, 0x9c, 0xa0, 0xa4, 0xa8, 0xac, 0xb0, 0xb4, 0xb8, 0xbc, 0xc0, 0xc4, 0xc8, 0xcc, 0xd0, 0xd4, 0xd8, 0xdc, 0xe0, 0xe4, 0xe8, 0xec, 0xf0, 0xf4, 0xf8, 0xfc, 0x1d, 0x19, 0x15, 0x11, 0xd, 0x9, 0x5, 0x1, 0x3d, 0x39, 0x35, 0x31, 0x2d, 0x29, 0x25, 0x21, 0x5d, 0x59, 0x55, 0x51, 0x4d, 0x49, 0x45, 0x41, 0x7d, 0x79, 0x75, 0x71, 0x6d, 0x69, 0x65, 0x61, 0x9d, 0x99, 0x95, 0x91, 0x8d, 0x89, 0x85, 0x81, 0xbd, 0xb9, 0xb5, 0xb1, 0xad, 0xa9, 0xa5, 0xa1, 0xdd, 0xd9, 0xd5, 0xd1, 0xcd, 0xc9, 0xc5, 0xc1, 0xfd, 0xf9, 0xf5, 0xf1, 0xed, 0xe9, 0xe5, 0xe1, 0x3a, 0x3e, 0x32, 0x36, 0x2a, 0x2e, 0x22, 0x26, 0x1a, 0x1e, 0x12, 0x16, 0xa, 0xe, 0x2, 0x6, 0x7a, 0x7e, 0x72, 0x76, 0x6a, 0x6e, 0x62, 0x66, 0x5a, 0x5e, 0x52, 0x56, 0x4a, 0x4e, 0x42, 0x46, 0xba, 0xbe, 0xb2, 0xb6, 0xaa, 0xae, 0xa2, 0xa6, 0x9a, 0x9e, 0x92, 0x96, 0x8a, 0x8e, 0x82, 0x86, 0xfa, 0xfe, 0xf2, 0xf6, 0xea, 0xee, 0xe2, 0xe6, 0xda, 0xde, 0xd2, 0xd6, 0xca, 0xce, 0xc2, 0xc6, 0x27, 0x23, 0x2f, 0x2b, 0x37, 0x33, 0x3f, 0x3b, 0x7, 0x3, 0xf, 0xb, 0x17, 0x13, 0x1f, 0x1b, 0x67, 0x63, 0x6f, 0x6b, 0x77, 0x73, 0x7f, 0x7b, 0x47, 0x43, 0x4f, 0x4b, 0x57, 0x53, 0x5f, 0x5b, 0xa7, 0xa3, 0xaf, 0xab, 0xb7, 0xb3, 0xbf, 0xbb, 0x87, 0x83, 0x8f, 0x8b, 0x97, 0x93, 0x9f, 0x9b, 0xe7, 0xe3, 0xef, 0xeb, 0xf7, 0xf3, 0xff, 0xfb, 0xc7, 0xc3, 0xcf, 0xcb, 0xd7, 0xd3, 0xdf, 0xdb}, - {0x0, 0x5, 0xa, 0xf, 0x14, 0x11, 0x1e, 0x1b, 0x28, 0x2d, 0x22, 0x27, 0x3c, 0x39, 0x36, 0x33, 0x50, 0x55, 0x5a, 0x5f, 0x44, 0x41, 0x4e, 0x4b, 0x78, 0x7d, 0x72, 0x77, 0x6c, 0x69, 0x66, 0x63, 0xa0, 0xa5, 0xaa, 0xaf, 0xb4, 0xb1, 0xbe, 0xbb, 0x88, 0x8d, 0x82, 0x87, 0x9c, 0x99, 0x96, 0x93, 0xf0, 0xf5, 0xfa, 0xff, 0xe4, 0xe1, 0xee, 0xeb, 0xd8, 0xdd, 0xd2, 0xd7, 0xcc, 0xc9, 0xc6, 0xc3, 0x5d, 0x58, 0x57, 0x52, 0x49, 0x4c, 0x43, 0x46, 0x75, 0x70, 0x7f, 0x7a, 0x61, 0x64, 0x6b, 0x6e, 0xd, 0x8, 0x7, 0x2, 0x19, 0x1c, 0x13, 0x16, 0x25, 0x20, 0x2f, 0x2a, 0x31, 0x34, 0x3b, 0x3e, 0xfd, 0xf8, 0xf7, 0xf2, 0xe9, 0xec, 0xe3, 0xe6, 0xd5, 0xd0, 0xdf, 0xda, 0xc1, 0xc4, 0xcb, 0xce, 0xad, 0xa8, 0xa7, 0xa2, 0xb9, 0xbc, 0xb3, 0xb6, 0x85, 0x80, 0x8f, 0x8a, 0x91, 0x94, 0x9b, 0x9e, 0xba, 0xbf, 0xb0, 0xb5, 0xae, 0xab, 0xa4, 0xa1, 0x92, 0x97, 0x98, 0x9d, 0x86, 0x83, 0x8c, 0x89, 0xea, 0xef, 0xe0, 0xe5, 0xfe, 0xfb, 0xf4, 0xf1, 0xc2, 0xc7, 0xc8, 0xcd, 0xd6, 0xd3, 0xdc, 0xd9, 0x1a, 0x1f, 0x10, 0x15, 0xe, 0xb, 0x4, 0x1, 0x32, 0x37, 0x38, 0x3d, 0x26, 0x23, 0x2c, 0x29, 0x4a, 0x4f, 0x40, 0x45, 0x5e, 0x5b, 0x54, 0x51, 0x62, 0x67, 0x68, 0x6d, 0x76, 0x73, 0x7c, 0x79, 0xe7, 0xe2, 0xed, 0xe8, 0xf3, 0xf6, 0xf9, 0xfc, 0xcf, 0xca, 0xc5, 0xc0, 0xdb, 0xde, 0xd1, 0xd4, 0xb7, 0xb2, 0xbd, 0xb8, 0xa3, 0xa6, 0xa9, 0xac, 0x9f, 0x9a, 0x95, 0x90, 0x8b, 0x8e, 0x81, 0x84, 0x47, 0x42, 0x4d, 0x48, 0x53, 0x56, 0x59, 0x5c, 0x6f, 0x6a, 0x65, 0x60, 0x7b, 0x7e, 0x71, 0x74, 0x17, 0x12, 0x1d, 0x18, 0x3, 0x6, 0x9, 0xc, 0x3f, 0x3a, 0x35, 0x30, 0x2b, 0x2e, 0x21, 0x24}, - {0x0, 0x6, 0xc, 0xa, 0x18, 0x1e, 0x14, 0x12, 0x30, 0x36, 0x3c, 0x3a, 0x28, 0x2e, 0x24, 0x22, 0x60, 0x66, 0x6c, 0x6a, 0x78, 0x7e, 0x74, 0x72, 0x50, 0x56, 0x5c, 0x5a, 0x48, 0x4e, 0x44, 0x42, 0xc0, 0xc6, 0xcc, 0xca, 0xd8, 0xde, 0xd4, 0xd2, 0xf0, 0xf6, 0xfc, 0xfa, 0xe8, 0xee, 0xe4, 0xe2, 0xa0, 0xa6, 0xac, 0xaa, 0xb8, 0xbe, 0xb4, 0xb2, 0x90, 0x96, 0x9c, 0x9a, 0x88, 0x8e, 0x84, 0x82, 0x9d, 0x9b, 0x91, 0x97, 0x85, 0x83, 0x89, 0x8f, 0xad, 0xab, 0xa1, 0xa7, 0xb5, 0xb3, 0xb9, 0xbf, 0xfd, 0xfb, 0xf1, 0xf7, 0xe5, 0xe3, 0xe9, 0xef, 0xcd, 0xcb, 0xc1, 0xc7, 0xd5, 0xd3, 0xd9, 0xdf, 0x5d, 0x5b, 0x51, 0x57, 0x45, 0x43, 0x49, 0x4f, 0x6d, 0x6b, 0x61, 0x67, 0x75, 0x73, 0x79, 0x7f, 0x3d, 0x3b, 0x31, 0x37, 0x25, 0x23, 0x29, 0x2f, 0xd, 0xb, 0x1, 0x7, 0x15, 0x13, 0x19, 0x1f, 0x27, 0x21, 0x2b, 0x2d, 0x3f, 0x39, 0x33, 0x35, 0x17, 0x11, 0x1b, 0x1d, 0xf, 0x9, 0x3, 0x5, 0x47, 0x41, 0x4b, 0x4d, 0x5f, 0x59, 0x53, 0x55, 0x77, 0x71, 0x7b, 0x7d, 0x6f, 0x69, 0x63, 0x65, 0xe7, 0xe1, 0xeb, 0xed, 0xff, 0xf9, 0xf3, 0xf5, 0xd7, 0xd1, 0xdb, 0xdd, 0xcf, 0xc9, 0xc3, 0xc5, 0x87, 0x81, 0x8b, 0x8d, 0x9f, 0x99, 0x93, 0x95, 0xb7, 0xb1, 0xbb, 0xbd, 0xaf, 0xa9, 0xa3, 0xa5, 0xba, 0xbc, 0xb6, 0xb0, 0xa2, 0xa4, 0xae, 0xa8, 0x8a, 0x8c, 0x86, 0x80, 0x92, 0x94, 0x9e, 0x98, 0xda, 0xdc, 0xd6, 0xd0, 0xc2, 0xc4, 0xce, 0xc8, 0xea, 0xec, 0xe6, 0xe0, 0xf2, 0xf4, 0xfe, 0xf8, 0x7a, 0x7c, 0x76, 0x70, 0x62, 0x64, 0x6e, 0x68, 0x4a, 0x4c, 0x46, 0x40, 0x52, 0x54, 0x5e, 0x58, 0x1a, 0x1c, 0x16, 0x10, 0x2, 0x4, 0xe, 0x8, 0x2a, 0x2c, 0x26, 0x20, 0x32, 0x34, 0x3e, 0x38}, - {0x0, 0x7, 0xe, 0x9, 0x1c, 0x1b, 0x12, 0x15, 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d, 0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65, 0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d, 0xe0, 0xe7, 0xee, 0xe9, 0xfc, 0xfb, 0xf2, 0xf5, 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd, 0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85, 0xa8, 0xaf, 0xa6, 0xa1, 0xb4, 0xb3, 0xba, 0xbd, 0xdd, 0xda, 0xd3, 0xd4, 0xc1, 0xc6, 0xcf, 0xc8, 0xe5, 0xe2, 0xeb, 0xec, 0xf9, 0xfe, 0xf7, 0xf0, 0xad, 0xaa, 0xa3, 0xa4, 0xb1, 0xb6, 0xbf, 0xb8, 0x95, 0x92, 0x9b, 0x9c, 0x89, 0x8e, 0x87, 0x80, 0x3d, 0x3a, 0x33, 0x34, 0x21, 0x26, 0x2f, 0x28, 0x5, 0x2, 0xb, 0xc, 0x19, 0x1e, 0x17, 0x10, 0x4d, 0x4a, 0x43, 0x44, 0x51, 0x56, 0x5f, 0x58, 0x75, 0x72, 0x7b, 0x7c, 0x69, 0x6e, 0x67, 0x60, 0xa7, 0xa0, 0xa9, 0xae, 0xbb, 0xbc, 0xb5, 0xb2, 0x9f, 0x98, 0x91, 0x96, 0x83, 0x84, 0x8d, 0x8a, 0xd7, 0xd0, 0xd9, 0xde, 0xcb, 0xcc, 0xc5, 0xc2, 0xef, 0xe8, 0xe1, 0xe6, 0xf3, 0xf4, 0xfd, 0xfa, 0x47, 0x40, 0x49, 0x4e, 0x5b, 0x5c, 0x55, 0x52, 0x7f, 0x78, 0x71, 0x76, 0x63, 0x64, 0x6d, 0x6a, 0x37, 0x30, 0x39, 0x3e, 0x2b, 0x2c, 0x25, 0x22, 0xf, 0x8, 0x1, 0x6, 0x13, 0x14, 0x1d, 0x1a, 0x7a, 0x7d, 0x74, 0x73, 0x66, 0x61, 0x68, 0x6f, 0x42, 0x45, 0x4c, 0x4b, 0x5e, 0x59, 0x50, 0x57, 0xa, 0xd, 0x4, 0x3, 0x16, 0x11, 0x18, 0x1f, 0x32, 0x35, 0x3c, 0x3b, 0x2e, 0x29, 0x20, 0x27, 0x9a, 0x9d, 0x94, 0x93, 0x86, 0x81, 0x88, 0x8f, 0xa2, 0xa5, 0xac, 0xab, 0xbe, 0xb9, 0xb0, 0xb7, 0xea, 0xed, 0xe4, 0xe3, 0xf6, 0xf1, 0xf8, 0xff, 0xd2, 0xd5, 0xdc, 0xdb, 0xce, 0xc9, 0xc0, 0xc7}, - {0x0, 0x8, 0x10, 0x18, 0x20, 0x28, 0x30, 0x38, 0x40, 0x48, 0x50, 0x58, 0x60, 0x68, 0x70, 0x78, 0x80, 0x88, 0x90, 0x98, 0xa0, 0xa8, 0xb0, 0xb8, 0xc0, 0xc8, 0xd0, 0xd8, 0xe0, 0xe8, 0xf0, 0xf8, 0x1d, 0x15, 0xd, 0x5, 0x3d, 0x35, 0x2d, 0x25, 0x5d, 0x55, 0x4d, 0x45, 0x7d, 0x75, 0x6d, 0x65, 0x9d, 0x95, 0x8d, 0x85, 0xbd, 0xb5, 0xad, 0xa5, 0xdd, 0xd5, 0xcd, 0xc5, 0xfd, 0xf5, 0xed, 0xe5, 0x3a, 0x32, 0x2a, 0x22, 0x1a, 0x12, 0xa, 0x2, 0x7a, 0x72, 0x6a, 0x62, 0x5a, 0x52, 0x4a, 0x42, 0xba, 0xb2, 0xaa, 0xa2, 0x9a, 0x92, 0x8a, 0x82, 0xfa, 0xf2, 0xea, 0xe2, 0xda, 0xd2, 0xca, 0xc2, 0x27, 0x2f, 0x37, 0x3f, 0x7, 0xf, 0x17, 0x1f, 0x67, 0x6f, 0x77, 0x7f, 0x47, 0x4f, 0x57, 0x5f, 0xa7, 0xaf, 0xb7, 0xbf, 0x87, 0x8f, 0x97, 0x9f, 0xe7, 0xef, 0xf7, 0xff, 0xc7, 0xcf, 0xd7, 0xdf, 0x74, 0x7c, 0x64, 0x6c, 0x54, 0x5c, 0x44, 0x4c, 0x34, 0x3c, 0x24, 0x2c, 0x14, 0x1c, 0x4, 0xc, 0xf4, 0xfc, 0xe4, 0xec, 0xd4, 0xdc, 0xc4, 0xcc, 0xb4, 0xbc, 0xa4, 0xac, 0x94, 0x9c, 0x84, 0x8c, 0x69, 0x61, 0x79, 0x71, 0x49, 0x41, 0x59, 0x51, 0x29, 0x21, 0x39, 0x31, 0x9, 0x1, 0x19, 0x11, 0xe9, 0xe1, 0xf9, 0xf1, 0xc9, 0xc1, 0xd9, 0xd1, 0xa9, 0xa1, 0xb9, 0xb1, 0x89, 0x81, 0x99, 0x91, 0x4e, 0x46, 0x5e, 0x56, 0x6e, 0x66, 0x7e, 0x76, 0xe, 0x6, 0x1e, 0x16, 0x2e, 0x26, 0x3e, 0x36, 0xce, 0xc6, 0xde, 0xd6, 0xee, 0xe6, 0xfe, 0xf6, 0x8e, 0x86, 0x9e, 0x96, 0xae, 0xa6, 0xbe, 0xb6, 0x53, 0x5b, 0x43, 0x4b, 0x73, 0x7b, 0x63, 0x6b, 0x13, 0x1b, 0x3, 0xb, 0x33, 0x3b, 0x23, 0x2b, 0xd3, 0xdb, 0xc3, 0xcb, 0xf3, 0xfb, 0xe3, 0xeb, 0x93, 0x9b, 0x83, 0x8b, 0xb3, 0xbb, 0xa3, 0xab}, - {0x0, 0x9, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77, 0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf, 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7, 0x3d, 0x34, 0x2f, 0x26, 0x19, 0x10, 0xb, 0x2, 0x75, 0x7c, 0x67, 0x6e, 0x51, 0x58, 0x43, 0x4a, 0xad, 0xa4, 0xbf, 0xb6, 0x89, 0x80, 0x9b, 0x92, 0xe5, 0xec, 0xf7, 0xfe, 0xc1, 0xc8, 0xd3, 0xda, 0x7a, 0x73, 0x68, 0x61, 0x5e, 0x57, 0x4c, 0x45, 0x32, 0x3b, 0x20, 0x29, 0x16, 0x1f, 0x4, 0xd, 0xea, 0xe3, 0xf8, 0xf1, 0xce, 0xc7, 0xdc, 0xd5, 0xa2, 0xab, 0xb0, 0xb9, 0x86, 0x8f, 0x94, 0x9d, 0x47, 0x4e, 0x55, 0x5c, 0x63, 0x6a, 0x71, 0x78, 0xf, 0x6, 0x1d, 0x14, 0x2b, 0x22, 0x39, 0x30, 0xd7, 0xde, 0xc5, 0xcc, 0xf3, 0xfa, 0xe1, 0xe8, 0x9f, 0x96, 0x8d, 0x84, 0xbb, 0xb2, 0xa9, 0xa0, 0xf4, 0xfd, 0xe6, 0xef, 0xd0, 0xd9, 0xc2, 0xcb, 0xbc, 0xb5, 0xae, 0xa7, 0x98, 0x91, 0x8a, 0x83, 0x64, 0x6d, 0x76, 0x7f, 0x40, 0x49, 0x52, 0x5b, 0x2c, 0x25, 0x3e, 0x37, 0x8, 0x1, 0x1a, 0x13, 0xc9, 0xc0, 0xdb, 0xd2, 0xed, 0xe4, 0xff, 0xf6, 0x81, 0x88, 0x93, 0x9a, 0xa5, 0xac, 0xb7, 0xbe, 0x59, 0x50, 0x4b, 0x42, 0x7d, 0x74, 0x6f, 0x66, 0x11, 0x18, 0x3, 0xa, 0x35, 0x3c, 0x27, 0x2e, 0x8e, 0x87, 0x9c, 0x95, 0xaa, 0xa3, 0xb8, 0xb1, 0xc6, 0xcf, 0xd4, 0xdd, 0xe2, 0xeb, 0xf0, 0xf9, 0x1e, 0x17, 0xc, 0x5, 0x3a, 0x33, 0x28, 0x21, 0x56, 0x5f, 0x44, 0x4d, 0x72, 0x7b, 0x60, 0x69, 0xb3, 0xba, 0xa1, 0xa8, 0x97, 0x9e, 0x85, 0x8c, 0xfb, 0xf2, 0xe9, 0xe0, 0xdf, 0xd6, 0xcd, 0xc4, 0x23, 0x2a, 0x31, 0x38, 0x7, 0xe, 0x15, 0x1c, 0x6b, 0x62, 0x79, 0x70, 0x4f, 0x46, 0x5d, 0x54}, - {0x0, 0xa, 0x14, 0x1e, 0x28, 0x22, 0x3c, 0x36, 0x50, 0x5a, 0x44, 0x4e, 0x78, 0x72, 0x6c, 0x66, 0xa0, 0xaa, 0xb4, 0xbe, 0x88, 0x82, 0x9c, 0x96, 0xf0, 0xfa, 0xe4, 0xee, 0xd8, 0xd2, 0xcc, 0xc6, 0x5d, 0x57, 0x49, 0x43, 0x75, 0x7f, 0x61, 0x6b, 0xd, 0x7, 0x19, 0x13, 0x25, 0x2f, 0x31, 0x3b, 0xfd, 0xf7, 0xe9, 0xe3, 0xd5, 0xdf, 0xc1, 0xcb, 0xad, 0xa7, 0xb9, 0xb3, 0x85, 0x8f, 0x91, 0x9b, 0xba, 0xb0, 0xae, 0xa4, 0x92, 0x98, 0x86, 0x8c, 0xea, 0xe0, 0xfe, 0xf4, 0xc2, 0xc8, 0xd6, 0xdc, 0x1a, 0x10, 0xe, 0x4, 0x32, 0x38, 0x26, 0x2c, 0x4a, 0x40, 0x5e, 0x54, 0x62, 0x68, 0x76, 0x7c, 0xe7, 0xed, 0xf3, 0xf9, 0xcf, 0xc5, 0xdb, 0xd1, 0xb7, 0xbd, 0xa3, 0xa9, 0x9f, 0x95, 0x8b, 0x81, 0x47, 0x4d, 0x53, 0x59, 0x6f, 0x65, 0x7b, 0x71, 0x17, 0x1d, 0x3, 0x9, 0x3f, 0x35, 0x2b, 0x21, 0x69, 0x63, 0x7d, 0x77, 0x41, 0x4b, 0x55, 0x5f, 0x39, 0x33, 0x2d, 0x27, 0x11, 0x1b, 0x5, 0xf, 0xc9, 0xc3, 0xdd, 0xd7, 0xe1, 0xeb, 0xf5, 0xff, 0x99, 0x93, 0x8d, 0x87, 0xb1, 0xbb, 0xa5, 0xaf, 0x34, 0x3e, 0x20, 0x2a, 0x1c, 0x16, 0x8, 0x2, 0x64, 0x6e, 0x70, 0x7a, 0x4c, 0x46, 0x58, 0x52, 0x94, 0x9e, 0x80, 0x8a, 0xbc, 0xb6, 0xa8, 0xa2, 0xc4, 0xce, 0xd0, 0xda, 0xec, 0xe6, 0xf8, 0xf2, 0xd3, 0xd9, 0xc7, 0xcd, 0xfb, 0xf1, 0xef, 0xe5, 0x83, 0x89, 0x97, 0x9d, 0xab, 0xa1, 0xbf, 0xb5, 0x73, 0x79, 0x67, 0x6d, 0x5b, 0x51, 0x4f, 0x45, 0x23, 0x29, 0x37, 0x3d, 0xb, 0x1, 0x1f, 0x15, 0x8e, 0x84, 0x9a, 0x90, 0xa6, 0xac, 0xb2, 0xb8, 0xde, 0xd4, 0xca, 0xc0, 0xf6, 0xfc, 0xe2, 0xe8, 0x2e, 0x24, 0x3a, 0x30, 0x6, 0xc, 0x12, 0x18, 0x7e, 0x74, 0x6a, 0x60, 0x56, 0x5c, 0x42, 0x48}, - {0x0, 0xb, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69, 0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81, 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9, 0x7d, 0x76, 0x6b, 0x60, 0x51, 0x5a, 0x47, 0x4c, 0x25, 0x2e, 0x33, 0x38, 0x9, 0x2, 0x1f, 0x14, 0xcd, 0xc6, 0xdb, 0xd0, 0xe1, 0xea, 0xf7, 0xfc, 0x95, 0x9e, 0x83, 0x88, 0xb9, 0xb2, 0xaf, 0xa4, 0xfa, 0xf1, 0xec, 0xe7, 0xd6, 0xdd, 0xc0, 0xcb, 0xa2, 0xa9, 0xb4, 0xbf, 0x8e, 0x85, 0x98, 0x93, 0x4a, 0x41, 0x5c, 0x57, 0x66, 0x6d, 0x70, 0x7b, 0x12, 0x19, 0x4, 0xf, 0x3e, 0x35, 0x28, 0x23, 0x87, 0x8c, 0x91, 0x9a, 0xab, 0xa0, 0xbd, 0xb6, 0xdf, 0xd4, 0xc9, 0xc2, 0xf3, 0xf8, 0xe5, 0xee, 0x37, 0x3c, 0x21, 0x2a, 0x1b, 0x10, 0xd, 0x6, 0x6f, 0x64, 0x79, 0x72, 0x43, 0x48, 0x55, 0x5e, 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8, 0xb1, 0xba, 0xa7, 0xac, 0x9d, 0x96, 0x8b, 0x80, 0x59, 0x52, 0x4f, 0x44, 0x75, 0x7e, 0x63, 0x68, 0x1, 0xa, 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, 0x94, 0x9f, 0x82, 0x89, 0xb8, 0xb3, 0xae, 0xa5, 0xcc, 0xc7, 0xda, 0xd1, 0xe0, 0xeb, 0xf6, 0xfd, 0x24, 0x2f, 0x32, 0x39, 0x8, 0x3, 0x1e, 0x15, 0x7c, 0x77, 0x6a, 0x61, 0x50, 0x5b, 0x46, 0x4d, 0x13, 0x18, 0x5, 0xe, 0x3f, 0x34, 0x29, 0x22, 0x4b, 0x40, 0x5d, 0x56, 0x67, 0x6c, 0x71, 0x7a, 0xa3, 0xa8, 0xb5, 0xbe, 0x8f, 0x84, 0x99, 0x92, 0xfb, 0xf0, 0xed, 0xe6, 0xd7, 0xdc, 0xc1, 0xca, 0x6e, 0x65, 0x78, 0x73, 0x42, 0x49, 0x54, 0x5f, 0x36, 0x3d, 0x20, 0x2b, 0x1a, 0x11, 0xc, 0x7, 0xde, 0xd5, 0xc8, 0xc3, 0xf2, 0xf9, 0xe4, 0xef, 0x86, 0x8d, 0x90, 0x9b, 0xaa, 0xa1, 0xbc, 0xb7}, - {0x0, 0xc, 0x18, 0x14, 0x30, 0x3c, 0x28, 0x24, 0x60, 0x6c, 0x78, 0x74, 0x50, 0x5c, 0x48, 0x44, 0xc0, 0xcc, 0xd8, 0xd4, 0xf0, 0xfc, 0xe8, 0xe4, 0xa0, 0xac, 0xb8, 0xb4, 0x90, 0x9c, 0x88, 0x84, 0x9d, 0x91, 0x85, 0x89, 0xad, 0xa1, 0xb5, 0xb9, 0xfd, 0xf1, 0xe5, 0xe9, 0xcd, 0xc1, 0xd5, 0xd9, 0x5d, 0x51, 0x45, 0x49, 0x6d, 0x61, 0x75, 0x79, 0x3d, 0x31, 0x25, 0x29, 0xd, 0x1, 0x15, 0x19, 0x27, 0x2b, 0x3f, 0x33, 0x17, 0x1b, 0xf, 0x3, 0x47, 0x4b, 0x5f, 0x53, 0x77, 0x7b, 0x6f, 0x63, 0xe7, 0xeb, 0xff, 0xf3, 0xd7, 0xdb, 0xcf, 0xc3, 0x87, 0x8b, 0x9f, 0x93, 0xb7, 0xbb, 0xaf, 0xa3, 0xba, 0xb6, 0xa2, 0xae, 0x8a, 0x86, 0x92, 0x9e, 0xda, 0xd6, 0xc2, 0xce, 0xea, 0xe6, 0xf2, 0xfe, 0x7a, 0x76, 0x62, 0x6e, 0x4a, 0x46, 0x52, 0x5e, 0x1a, 0x16, 0x2, 0xe, 0x2a, 0x26, 0x32, 0x3e, 0x4e, 0x42, 0x56, 0x5a, 0x7e, 0x72, 0x66, 0x6a, 0x2e, 0x22, 0x36, 0x3a, 0x1e, 0x12, 0x6, 0xa, 0x8e, 0x82, 0x96, 0x9a, 0xbe, 0xb2, 0xa6, 0xaa, 0xee, 0xe2, 0xf6, 0xfa, 0xde, 0xd2, 0xc6, 0xca, 0xd3, 0xdf, 0xcb, 0xc7, 0xe3, 0xef, 0xfb, 0xf7, 0xb3, 0xbf, 0xab, 0xa7, 0x83, 0x8f, 0x9b, 0x97, 0x13, 0x1f, 0xb, 0x7, 0x23, 0x2f, 0x3b, 0x37, 0x73, 0x7f, 0x6b, 0x67, 0x43, 0x4f, 0x5b, 0x57, 0x69, 0x65, 0x71, 0x7d, 0x59, 0x55, 0x41, 0x4d, 0x9, 0x5, 0x11, 0x1d, 0x39, 0x35, 0x21, 0x2d, 0xa9, 0xa5, 0xb1, 0xbd, 0x99, 0x95, 0x81, 0x8d, 0xc9, 0xc5, 0xd1, 0xdd, 0xf9, 0xf5, 0xe1, 0xed, 0xf4, 0xf8, 0xec, 0xe0, 0xc4, 0xc8, 0xdc, 0xd0, 0x94, 0x98, 0x8c, 0x80, 0xa4, 0xa8, 0xbc, 0xb0, 0x34, 0x38, 0x2c, 0x20, 0x4, 0x8, 0x1c, 0x10, 0x54, 0x58, 0x4c, 0x40, 0x64, 0x68, 0x7c, 0x70}, - {0x0, 0xd, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b, 0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3, 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b, 0xbd, 0xb0, 0xa7, 0xaa, 0x89, 0x84, 0x93, 0x9e, 0xd5, 0xd8, 0xcf, 0xc2, 0xe1, 0xec, 0xfb, 0xf6, 0x6d, 0x60, 0x77, 0x7a, 0x59, 0x54, 0x43, 0x4e, 0x5, 0x8, 0x1f, 0x12, 0x31, 0x3c, 0x2b, 0x26, 0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44, 0xf, 0x2, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c, 0xb7, 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, 0xdf, 0xd2, 0xc5, 0xc8, 0xeb, 0xe6, 0xf1, 0xfc, 0xda, 0xd7, 0xc0, 0xcd, 0xee, 0xe3, 0xf4, 0xf9, 0xb2, 0xbf, 0xa8, 0xa5, 0x86, 0x8b, 0x9c, 0x91, 0xa, 0x7, 0x10, 0x1d, 0x3e, 0x33, 0x24, 0x29, 0x62, 0x6f, 0x78, 0x75, 0x56, 0x5b, 0x4c, 0x41, 0xce, 0xc3, 0xd4, 0xd9, 0xfa, 0xf7, 0xe0, 0xed, 0xa6, 0xab, 0xbc, 0xb1, 0x92, 0x9f, 0x88, 0x85, 0x1e, 0x13, 0x4, 0x9, 0x2a, 0x27, 0x30, 0x3d, 0x76, 0x7b, 0x6c, 0x61, 0x42, 0x4f, 0x58, 0x55, 0x73, 0x7e, 0x69, 0x64, 0x47, 0x4a, 0x5d, 0x50, 0x1b, 0x16, 0x1, 0xc, 0x2f, 0x22, 0x35, 0x38, 0xa3, 0xae, 0xb9, 0xb4, 0x97, 0x9a, 0x8d, 0x80, 0xcb, 0xc6, 0xd1, 0xdc, 0xff, 0xf2, 0xe5, 0xe8, 0xa9, 0xa4, 0xb3, 0xbe, 0x9d, 0x90, 0x87, 0x8a, 0xc1, 0xcc, 0xdb, 0xd6, 0xf5, 0xf8, 0xef, 0xe2, 0x79, 0x74, 0x63, 0x6e, 0x4d, 0x40, 0x57, 0x5a, 0x11, 0x1c, 0xb, 0x6, 0x25, 0x28, 0x3f, 0x32, 0x14, 0x19, 0xe, 0x3, 0x20, 0x2d, 0x3a, 0x37, 0x7c, 0x71, 0x66, 0x6b, 0x48, 0x45, 0x52, 0x5f, 0xc4, 0xc9, 0xde, 0xd3, 0xf0, 0xfd, 0xea, 0xe7, 0xac, 0xa1, 0xb6, 0xbb, 0x98, 0x95, 0x82, 0x8f}, - {0x0, 0xe, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a, 0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca, 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba, 0xdd, 0xd3, 0xc1, 0xcf, 0xe5, 0xeb, 0xf9, 0xf7, 0xad, 0xa3, 0xb1, 0xbf, 0x95, 0x9b, 0x89, 0x87, 0x3d, 0x33, 0x21, 0x2f, 0x5, 0xb, 0x19, 0x17, 0x4d, 0x43, 0x51, 0x5f, 0x75, 0x7b, 0x69, 0x67, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d, 0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d, 0x37, 0x39, 0x2b, 0x25, 0xf, 0x1, 0x13, 0x1d, 0x7a, 0x74, 0x66, 0x68, 0x42, 0x4c, 0x5e, 0x50, 0xa, 0x4, 0x16, 0x18, 0x32, 0x3c, 0x2e, 0x20, 0x9a, 0x94, 0x86, 0x88, 0xa2, 0xac, 0xbe, 0xb0, 0xea, 0xe4, 0xf6, 0xf8, 0xd2, 0xdc, 0xce, 0xc0, 0x53, 0x5d, 0x4f, 0x41, 0x6b, 0x65, 0x77, 0x79, 0x23, 0x2d, 0x3f, 0x31, 0x1b, 0x15, 0x7, 0x9, 0xb3, 0xbd, 0xaf, 0xa1, 0x8b, 0x85, 0x97, 0x99, 0xc3, 0xcd, 0xdf, 0xd1, 0xfb, 0xf5, 0xe7, 0xe9, 0x8e, 0x80, 0x92, 0x9c, 0xb6, 0xb8, 0xaa, 0xa4, 0xfe, 0xf0, 0xe2, 0xec, 0xc6, 0xc8, 0xda, 0xd4, 0x6e, 0x60, 0x72, 0x7c, 0x56, 0x58, 0x4a, 0x44, 0x1e, 0x10, 0x2, 0xc, 0x26, 0x28, 0x3a, 0x34, 0xf4, 0xfa, 0xe8, 0xe6, 0xcc, 0xc2, 0xd0, 0xde, 0x84, 0x8a, 0x98, 0x96, 0xbc, 0xb2, 0xa0, 0xae, 0x14, 0x1a, 0x8, 0x6, 0x2c, 0x22, 0x30, 0x3e, 0x64, 0x6a, 0x78, 0x76, 0x5c, 0x52, 0x40, 0x4e, 0x29, 0x27, 0x35, 0x3b, 0x11, 0x1f, 0xd, 0x3, 0x59, 0x57, 0x45, 0x4b, 0x61, 0x6f, 0x7d, 0x73, 0xc9, 0xc7, 0xd5, 0xdb, 0xf1, 0xff, 0xed, 0xe3, 0xb9, 0xb7, 0xa5, 0xab, 0x81, 0x8f, 0x9d, 0x93}, - {0x0, 0xf, 0x1e, 0x11, 0x3c, 0x33, 0x22, 0x2d, 0x78, 0x77, 0x66, 0x69, 0x44, 0x4b, 0x5a, 0x55, 0xf0, 0xff, 0xee, 0xe1, 0xcc, 0xc3, 0xd2, 0xdd, 0x88, 0x87, 0x96, 0x99, 0xb4, 0xbb, 0xaa, 0xa5, 0xfd, 0xf2, 0xe3, 0xec, 0xc1, 0xce, 0xdf, 0xd0, 0x85, 0x8a, 0x9b, 0x94, 0xb9, 0xb6, 0xa7, 0xa8, 0xd, 0x2, 0x13, 0x1c, 0x31, 0x3e, 0x2f, 0x20, 0x75, 0x7a, 0x6b, 0x64, 0x49, 0x46, 0x57, 0x58, 0xe7, 0xe8, 0xf9, 0xf6, 0xdb, 0xd4, 0xc5, 0xca, 0x9f, 0x90, 0x81, 0x8e, 0xa3, 0xac, 0xbd, 0xb2, 0x17, 0x18, 0x9, 0x6, 0x2b, 0x24, 0x35, 0x3a, 0x6f, 0x60, 0x71, 0x7e, 0x53, 0x5c, 0x4d, 0x42, 0x1a, 0x15, 0x4, 0xb, 0x26, 0x29, 0x38, 0x37, 0x62, 0x6d, 0x7c, 0x73, 0x5e, 0x51, 0x40, 0x4f, 0xea, 0xe5, 0xf4, 0xfb, 0xd6, 0xd9, 0xc8, 0xc7, 0x92, 0x9d, 0x8c, 0x83, 0xae, 0xa1, 0xb0, 0xbf, 0xd3, 0xdc, 0xcd, 0xc2, 0xef, 0xe0, 0xf1, 0xfe, 0xab, 0xa4, 0xb5, 0xba, 0x97, 0x98, 0x89, 0x86, 0x23, 0x2c, 0x3d, 0x32, 0x1f, 0x10, 0x1, 0xe, 0x5b, 0x54, 0x45, 0x4a, 0x67, 0x68, 0x79, 0x76, 0x2e, 0x21, 0x30, 0x3f, 0x12, 0x1d, 0xc, 0x3, 0x56, 0x59, 0x48, 0x47, 0x6a, 0x65, 0x74, 0x7b, 0xde, 0xd1, 0xc0, 0xcf, 0xe2, 0xed, 0xfc, 0xf3, 0xa6, 0xa9, 0xb8, 0xb7, 0x9a, 0x95, 0x84, 0x8b, 0x34, 0x3b, 0x2a, 0x25, 0x8, 0x7, 0x16, 0x19, 0x4c, 0x43, 0x52, 0x5d, 0x70, 0x7f, 0x6e, 0x61, 0xc4, 0xcb, 0xda, 0xd5, 0xf8, 0xf7, 0xe6, 0xe9, 0xbc, 0xb3, 0xa2, 0xad, 0x80, 0x8f, 0x9e, 0x91, 0xc9, 0xc6, 0xd7, 0xd8, 0xf5, 0xfa, 0xeb, 0xe4, 0xb1, 0xbe, 0xaf, 0xa0, 0x8d, 0x82, 0x93, 0x9c, 0x39, 0x36, 0x27, 0x28, 0x5, 0xa, 0x1b, 0x14, 0x41, 0x4e, 0x5f, 0x50, 0x7d, 0x72, 0x63, 0x6c}, - {0x0, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0, 0x1d, 0xd, 0x3d, 0x2d, 0x5d, 0x4d, 0x7d, 0x6d, 0x9d, 0x8d, 0xbd, 0xad, 0xdd, 0xcd, 0xfd, 0xed, 0x3a, 0x2a, 0x1a, 0xa, 0x7a, 0x6a, 0x5a, 0x4a, 0xba, 0xaa, 0x9a, 0x8a, 0xfa, 0xea, 0xda, 0xca, 0x27, 0x37, 0x7, 0x17, 0x67, 0x77, 0x47, 0x57, 0xa7, 0xb7, 0x87, 0x97, 0xe7, 0xf7, 0xc7, 0xd7, 0x74, 0x64, 0x54, 0x44, 0x34, 0x24, 0x14, 0x4, 0xf4, 0xe4, 0xd4, 0xc4, 0xb4, 0xa4, 0x94, 0x84, 0x69, 0x79, 0x49, 0x59, 0x29, 0x39, 0x9, 0x19, 0xe9, 0xf9, 0xc9, 0xd9, 0xa9, 0xb9, 0x89, 0x99, 0x4e, 0x5e, 0x6e, 0x7e, 0xe, 0x1e, 0x2e, 0x3e, 0xce, 0xde, 0xee, 0xfe, 0x8e, 0x9e, 0xae, 0xbe, 0x53, 0x43, 0x73, 0x63, 0x13, 0x3, 0x33, 0x23, 0xd3, 0xc3, 0xf3, 0xe3, 0x93, 0x83, 0xb3, 0xa3, 0xe8, 0xf8, 0xc8, 0xd8, 0xa8, 0xb8, 0x88, 0x98, 0x68, 0x78, 0x48, 0x58, 0x28, 0x38, 0x8, 0x18, 0xf5, 0xe5, 0xd5, 0xc5, 0xb5, 0xa5, 0x95, 0x85, 0x75, 0x65, 0x55, 0x45, 0x35, 0x25, 0x15, 0x5, 0xd2, 0xc2, 0xf2, 0xe2, 0x92, 0x82, 0xb2, 0xa2, 0x52, 0x42, 0x72, 0x62, 0x12, 0x2, 0x32, 0x22, 0xcf, 0xdf, 0xef, 0xff, 0x8f, 0x9f, 0xaf, 0xbf, 0x4f, 0x5f, 0x6f, 0x7f, 0xf, 0x1f, 0x2f, 0x3f, 0x9c, 0x8c, 0xbc, 0xac, 0xdc, 0xcc, 0xfc, 0xec, 0x1c, 0xc, 0x3c, 0x2c, 0x5c, 0x4c, 0x7c, 0x6c, 0x81, 0x91, 0xa1, 0xb1, 0xc1, 0xd1, 0xe1, 0xf1, 0x1, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71, 0xa6, 0xb6, 0x86, 0x96, 0xe6, 0xf6, 0xc6, 0xd6, 0x26, 0x36, 0x6, 0x16, 0x66, 0x76, 0x46, 0x56, 0xbb, 0xab, 0x9b, 0x8b, 0xfb, 0xeb, 0xdb, 0xcb, 0x3b, 0x2b, 0x1b, 0xb, 0x7b, 0x6b, 0x5b, 0x4b}, - {0x0, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0xd, 0x1c, 0x2f, 0x3e, 0x49, 0x58, 0x6b, 0x7a, 0x85, 0x94, 0xa7, 0xb6, 0xc1, 0xd0, 0xe3, 0xf2, 0x1a, 0xb, 0x38, 0x29, 0x5e, 0x4f, 0x7c, 0x6d, 0x92, 0x83, 0xb0, 0xa1, 0xd6, 0xc7, 0xf4, 0xe5, 0x17, 0x6, 0x35, 0x24, 0x53, 0x42, 0x71, 0x60, 0x9f, 0x8e, 0xbd, 0xac, 0xdb, 0xca, 0xf9, 0xe8, 0x34, 0x25, 0x16, 0x7, 0x70, 0x61, 0x52, 0x43, 0xbc, 0xad, 0x9e, 0x8f, 0xf8, 0xe9, 0xda, 0xcb, 0x39, 0x28, 0x1b, 0xa, 0x7d, 0x6c, 0x5f, 0x4e, 0xb1, 0xa0, 0x93, 0x82, 0xf5, 0xe4, 0xd7, 0xc6, 0x2e, 0x3f, 0xc, 0x1d, 0x6a, 0x7b, 0x48, 0x59, 0xa6, 0xb7, 0x84, 0x95, 0xe2, 0xf3, 0xc0, 0xd1, 0x23, 0x32, 0x1, 0x10, 0x67, 0x76, 0x45, 0x54, 0xab, 0xba, 0x89, 0x98, 0xef, 0xfe, 0xcd, 0xdc, 0x68, 0x79, 0x4a, 0x5b, 0x2c, 0x3d, 0xe, 0x1f, 0xe0, 0xf1, 0xc2, 0xd3, 0xa4, 0xb5, 0x86, 0x97, 0x65, 0x74, 0x47, 0x56, 0x21, 0x30, 0x3, 0x12, 0xed, 0xfc, 0xcf, 0xde, 0xa9, 0xb8, 0x8b, 0x9a, 0x72, 0x63, 0x50, 0x41, 0x36, 0x27, 0x14, 0x5, 0xfa, 0xeb, 0xd8, 0xc9, 0xbe, 0xaf, 0x9c, 0x8d, 0x7f, 0x6e, 0x5d, 0x4c, 0x3b, 0x2a, 0x19, 0x8, 0xf7, 0xe6, 0xd5, 0xc4, 0xb3, 0xa2, 0x91, 0x80, 0x5c, 0x4d, 0x7e, 0x6f, 0x18, 0x9, 0x3a, 0x2b, 0xd4, 0xc5, 0xf6, 0xe7, 0x90, 0x81, 0xb2, 0xa3, 0x51, 0x40, 0x73, 0x62, 0x15, 0x4, 0x37, 0x26, 0xd9, 0xc8, 0xfb, 0xea, 0x9d, 0x8c, 0xbf, 0xae, 0x46, 0x57, 0x64, 0x75, 0x2, 0x13, 0x20, 0x31, 0xce, 0xdf, 0xec, 0xfd, 0x8a, 0x9b, 0xa8, 0xb9, 0x4b, 0x5a, 0x69, 0x78, 0xf, 0x1e, 0x2d, 0x3c, 0xc3, 0xd2, 0xe1, 0xf0, 0x87, 0x96, 0xa5, 0xb4}, - {0x0, 0x12, 0x24, 0x36, 0x48, 0x5a, 0x6c, 0x7e, 0x90, 0x82, 0xb4, 0xa6, 0xd8, 0xca, 0xfc, 0xee, 0x3d, 0x2f, 0x19, 0xb, 0x75, 0x67, 0x51, 0x43, 0xad, 0xbf, 0x89, 0x9b, 0xe5, 0xf7, 0xc1, 0xd3, 0x7a, 0x68, 0x5e, 0x4c, 0x32, 0x20, 0x16, 0x4, 0xea, 0xf8, 0xce, 0xdc, 0xa2, 0xb0, 0x86, 0x94, 0x47, 0x55, 0x63, 0x71, 0xf, 0x1d, 0x2b, 0x39, 0xd7, 0xc5, 0xf3, 0xe1, 0x9f, 0x8d, 0xbb, 0xa9, 0xf4, 0xe6, 0xd0, 0xc2, 0xbc, 0xae, 0x98, 0x8a, 0x64, 0x76, 0x40, 0x52, 0x2c, 0x3e, 0x8, 0x1a, 0xc9, 0xdb, 0xed, 0xff, 0x81, 0x93, 0xa5, 0xb7, 0x59, 0x4b, 0x7d, 0x6f, 0x11, 0x3, 0x35, 0x27, 0x8e, 0x9c, 0xaa, 0xb8, 0xc6, 0xd4, 0xe2, 0xf0, 0x1e, 0xc, 0x3a, 0x28, 0x56, 0x44, 0x72, 0x60, 0xb3, 0xa1, 0x97, 0x85, 0xfb, 0xe9, 0xdf, 0xcd, 0x23, 0x31, 0x7, 0x15, 0x6b, 0x79, 0x4f, 0x5d, 0xf5, 0xe7, 0xd1, 0xc3, 0xbd, 0xaf, 0x99, 0x8b, 0x65, 0x77, 0x41, 0x53, 0x2d, 0x3f, 0x9, 0x1b, 0xc8, 0xda, 0xec, 0xfe, 0x80, 0x92, 0xa4, 0xb6, 0x58, 0x4a, 0x7c, 0x6e, 0x10, 0x2, 0x34, 0x26, 0x8f, 0x9d, 0xab, 0xb9, 0xc7, 0xd5, 0xe3, 0xf1, 0x1f, 0xd, 0x3b, 0x29, 0x57, 0x45, 0x73, 0x61, 0xb2, 0xa0, 0x96, 0x84, 0xfa, 0xe8, 0xde, 0xcc, 0x22, 0x30, 0x6, 0x14, 0x6a, 0x78, 0x4e, 0x5c, 0x1, 0x13, 0x25, 0x37, 0x49, 0x5b, 0x6d, 0x7f, 0x91, 0x83, 0xb5, 0xa7, 0xd9, 0xcb, 0xfd, 0xef, 0x3c, 0x2e, 0x18, 0xa, 0x74, 0x66, 0x50, 0x42, 0xac, 0xbe, 0x88, 0x9a, 0xe4, 0xf6, 0xc0, 0xd2, 0x7b, 0x69, 0x5f, 0x4d, 0x33, 0x21, 0x17, 0x5, 0xeb, 0xf9, 0xcf, 0xdd, 0xa3, 0xb1, 0x87, 0x95, 0x46, 0x54, 0x62, 0x70, 0xe, 0x1c, 0x2a, 0x38, 0xd6, 0xc4, 0xf2, 0xe0, 0x9e, 0x8c, 0xba, 0xa8}, - {0x0, 0x13, 0x26, 0x35, 0x4c, 0x5f, 0x6a, 0x79, 0x98, 0x8b, 0xbe, 0xad, 0xd4, 0xc7, 0xf2, 0xe1, 0x2d, 0x3e, 0xb, 0x18, 0x61, 0x72, 0x47, 0x54, 0xb5, 0xa6, 0x93, 0x80, 0xf9, 0xea, 0xdf, 0xcc, 0x5a, 0x49, 0x7c, 0x6f, 0x16, 0x5, 0x30, 0x23, 0xc2, 0xd1, 0xe4, 0xf7, 0x8e, 0x9d, 0xa8, 0xbb, 0x77, 0x64, 0x51, 0x42, 0x3b, 0x28, 0x1d, 0xe, 0xef, 0xfc, 0xc9, 0xda, 0xa3, 0xb0, 0x85, 0x96, 0xb4, 0xa7, 0x92, 0x81, 0xf8, 0xeb, 0xde, 0xcd, 0x2c, 0x3f, 0xa, 0x19, 0x60, 0x73, 0x46, 0x55, 0x99, 0x8a, 0xbf, 0xac, 0xd5, 0xc6, 0xf3, 0xe0, 0x1, 0x12, 0x27, 0x34, 0x4d, 0x5e, 0x6b, 0x78, 0xee, 0xfd, 0xc8, 0xdb, 0xa2, 0xb1, 0x84, 0x97, 0x76, 0x65, 0x50, 0x43, 0x3a, 0x29, 0x1c, 0xf, 0xc3, 0xd0, 0xe5, 0xf6, 0x8f, 0x9c, 0xa9, 0xba, 0x5b, 0x48, 0x7d, 0x6e, 0x17, 0x4, 0x31, 0x22, 0x75, 0x66, 0x53, 0x40, 0x39, 0x2a, 0x1f, 0xc, 0xed, 0xfe, 0xcb, 0xd8, 0xa1, 0xb2, 0x87, 0x94, 0x58, 0x4b, 0x7e, 0x6d, 0x14, 0x7, 0x32, 0x21, 0xc0, 0xd3, 0xe6, 0xf5, 0x8c, 0x9f, 0xaa, 0xb9, 0x2f, 0x3c, 0x9, 0x1a, 0x63, 0x70, 0x45, 0x56, 0xb7, 0xa4, 0x91, 0x82, 0xfb, 0xe8, 0xdd, 0xce, 0x2, 0x11, 0x24, 0x37, 0x4e, 0x5d, 0x68, 0x7b, 0x9a, 0x89, 0xbc, 0xaf, 0xd6, 0xc5, 0xf0, 0xe3, 0xc1, 0xd2, 0xe7, 0xf4, 0x8d, 0x9e, 0xab, 0xb8, 0x59, 0x4a, 0x7f, 0x6c, 0x15, 0x6, 0x33, 0x20, 0xec, 0xff, 0xca, 0xd9, 0xa0, 0xb3, 0x86, 0x95, 0x74, 0x67, 0x52, 0x41, 0x38, 0x2b, 0x1e, 0xd, 0x9b, 0x88, 0xbd, 0xae, 0xd7, 0xc4, 0xf1, 0xe2, 0x3, 0x10, 0x25, 0x36, 0x4f, 0x5c, 0x69, 0x7a, 0xb6, 0xa5, 0x90, 0x83, 0xfa, 0xe9, 0xdc, 0xcf, 0x2e, 0x3d, 0x8, 0x1b, 0x62, 0x71, 0x44, 0x57}, - {0x0, 0x14, 0x28, 0x3c, 0x50, 0x44, 0x78, 0x6c, 0xa0, 0xb4, 0x88, 0x9c, 0xf0, 0xe4, 0xd8, 0xcc, 0x5d, 0x49, 0x75, 0x61, 0xd, 0x19, 0x25, 0x31, 0xfd, 0xe9, 0xd5, 0xc1, 0xad, 0xb9, 0x85, 0x91, 0xba, 0xae, 0x92, 0x86, 0xea, 0xfe, 0xc2, 0xd6, 0x1a, 0xe, 0x32, 0x26, 0x4a, 0x5e, 0x62, 0x76, 0xe7, 0xf3, 0xcf, 0xdb, 0xb7, 0xa3, 0x9f, 0x8b, 0x47, 0x53, 0x6f, 0x7b, 0x17, 0x3, 0x3f, 0x2b, 0x69, 0x7d, 0x41, 0x55, 0x39, 0x2d, 0x11, 0x5, 0xc9, 0xdd, 0xe1, 0xf5, 0x99, 0x8d, 0xb1, 0xa5, 0x34, 0x20, 0x1c, 0x8, 0x64, 0x70, 0x4c, 0x58, 0x94, 0x80, 0xbc, 0xa8, 0xc4, 0xd0, 0xec, 0xf8, 0xd3, 0xc7, 0xfb, 0xef, 0x83, 0x97, 0xab, 0xbf, 0x73, 0x67, 0x5b, 0x4f, 0x23, 0x37, 0xb, 0x1f, 0x8e, 0x9a, 0xa6, 0xb2, 0xde, 0xca, 0xf6, 0xe2, 0x2e, 0x3a, 0x6, 0x12, 0x7e, 0x6a, 0x56, 0x42, 0xd2, 0xc6, 0xfa, 0xee, 0x82, 0x96, 0xaa, 0xbe, 0x72, 0x66, 0x5a, 0x4e, 0x22, 0x36, 0xa, 0x1e, 0x8f, 0x9b, 0xa7, 0xb3, 0xdf, 0xcb, 0xf7, 0xe3, 0x2f, 0x3b, 0x7, 0x13, 0x7f, 0x6b, 0x57, 0x43, 0x68, 0x7c, 0x40, 0x54, 0x38, 0x2c, 0x10, 0x4, 0xc8, 0xdc, 0xe0, 0xf4, 0x98, 0x8c, 0xb0, 0xa4, 0x35, 0x21, 0x1d, 0x9, 0x65, 0x71, 0x4d, 0x59, 0x95, 0x81, 0xbd, 0xa9, 0xc5, 0xd1, 0xed, 0xf9, 0xbb, 0xaf, 0x93, 0x87, 0xeb, 0xff, 0xc3, 0xd7, 0x1b, 0xf, 0x33, 0x27, 0x4b, 0x5f, 0x63, 0x77, 0xe6, 0xf2, 0xce, 0xda, 0xb6, 0xa2, 0x9e, 0x8a, 0x46, 0x52, 0x6e, 0x7a, 0x16, 0x2, 0x3e, 0x2a, 0x1, 0x15, 0x29, 0x3d, 0x51, 0x45, 0x79, 0x6d, 0xa1, 0xb5, 0x89, 0x9d, 0xf1, 0xe5, 0xd9, 0xcd, 0x5c, 0x48, 0x74, 0x60, 0xc, 0x18, 0x24, 0x30, 0xfc, 0xe8, 0xd4, 0xc0, 0xac, 0xb8, 0x84, 0x90}, - {0x0, 0x15, 0x2a, 0x3f, 0x54, 0x41, 0x7e, 0x6b, 0xa8, 0xbd, 0x82, 0x97, 0xfc, 0xe9, 0xd6, 0xc3, 0x4d, 0x58, 0x67, 0x72, 0x19, 0xc, 0x33, 0x26, 0xe5, 0xf0, 0xcf, 0xda, 0xb1, 0xa4, 0x9b, 0x8e, 0x9a, 0x8f, 0xb0, 0xa5, 0xce, 0xdb, 0xe4, 0xf1, 0x32, 0x27, 0x18, 0xd, 0x66, 0x73, 0x4c, 0x59, 0xd7, 0xc2, 0xfd, 0xe8, 0x83, 0x96, 0xa9, 0xbc, 0x7f, 0x6a, 0x55, 0x40, 0x2b, 0x3e, 0x1, 0x14, 0x29, 0x3c, 0x3, 0x16, 0x7d, 0x68, 0x57, 0x42, 0x81, 0x94, 0xab, 0xbe, 0xd5, 0xc0, 0xff, 0xea, 0x64, 0x71, 0x4e, 0x5b, 0x30, 0x25, 0x1a, 0xf, 0xcc, 0xd9, 0xe6, 0xf3, 0x98, 0x8d, 0xb2, 0xa7, 0xb3, 0xa6, 0x99, 0x8c, 0xe7, 0xf2, 0xcd, 0xd8, 0x1b, 0xe, 0x31, 0x24, 0x4f, 0x5a, 0x65, 0x70, 0xfe, 0xeb, 0xd4, 0xc1, 0xaa, 0xbf, 0x80, 0x95, 0x56, 0x43, 0x7c, 0x69, 0x2, 0x17, 0x28, 0x3d, 0x52, 0x47, 0x78, 0x6d, 0x6, 0x13, 0x2c, 0x39, 0xfa, 0xef, 0xd0, 0xc5, 0xae, 0xbb, 0x84, 0x91, 0x1f, 0xa, 0x35, 0x20, 0x4b, 0x5e, 0x61, 0x74, 0xb7, 0xa2, 0x9d, 0x88, 0xe3, 0xf6, 0xc9, 0xdc, 0xc8, 0xdd, 0xe2, 0xf7, 0x9c, 0x89, 0xb6, 0xa3, 0x60, 0x75, 0x4a, 0x5f, 0x34, 0x21, 0x1e, 0xb, 0x85, 0x90, 0xaf, 0xba, 0xd1, 0xc4, 0xfb, 0xee, 0x2d, 0x38, 0x7, 0x12, 0x79, 0x6c, 0x53, 0x46, 0x7b, 0x6e, 0x51, 0x44, 0x2f, 0x3a, 0x5, 0x10, 0xd3, 0xc6, 0xf9, 0xec, 0x87, 0x92, 0xad, 0xb8, 0x36, 0x23, 0x1c, 0x9, 0x62, 0x77, 0x48, 0x5d, 0x9e, 0x8b, 0xb4, 0xa1, 0xca, 0xdf, 0xe0, 0xf5, 0xe1, 0xf4, 0xcb, 0xde, 0xb5, 0xa0, 0x9f, 0x8a, 0x49, 0x5c, 0x63, 0x76, 0x1d, 0x8, 0x37, 0x22, 0xac, 0xb9, 0x86, 0x93, 0xf8, 0xed, 0xd2, 0xc7, 0x4, 0x11, 0x2e, 0x3b, 0x50, 0x45, 0x7a, 0x6f}, - {0x0, 0x16, 0x2c, 0x3a, 0x58, 0x4e, 0x74, 0x62, 0xb0, 0xa6, 0x9c, 0x8a, 0xe8, 0xfe, 0xc4, 0xd2, 0x7d, 0x6b, 0x51, 0x47, 0x25, 0x33, 0x9, 0x1f, 0xcd, 0xdb, 0xe1, 0xf7, 0x95, 0x83, 0xb9, 0xaf, 0xfa, 0xec, 0xd6, 0xc0, 0xa2, 0xb4, 0x8e, 0x98, 0x4a, 0x5c, 0x66, 0x70, 0x12, 0x4, 0x3e, 0x28, 0x87, 0x91, 0xab, 0xbd, 0xdf, 0xc9, 0xf3, 0xe5, 0x37, 0x21, 0x1b, 0xd, 0x6f, 0x79, 0x43, 0x55, 0xe9, 0xff, 0xc5, 0xd3, 0xb1, 0xa7, 0x9d, 0x8b, 0x59, 0x4f, 0x75, 0x63, 0x1, 0x17, 0x2d, 0x3b, 0x94, 0x82, 0xb8, 0xae, 0xcc, 0xda, 0xe0, 0xf6, 0x24, 0x32, 0x8, 0x1e, 0x7c, 0x6a, 0x50, 0x46, 0x13, 0x5, 0x3f, 0x29, 0x4b, 0x5d, 0x67, 0x71, 0xa3, 0xb5, 0x8f, 0x99, 0xfb, 0xed, 0xd7, 0xc1, 0x6e, 0x78, 0x42, 0x54, 0x36, 0x20, 0x1a, 0xc, 0xde, 0xc8, 0xf2, 0xe4, 0x86, 0x90, 0xaa, 0xbc, 0xcf, 0xd9, 0xe3, 0xf5, 0x97, 0x81, 0xbb, 0xad, 0x7f, 0x69, 0x53, 0x45, 0x27, 0x31, 0xb, 0x1d, 0xb2, 0xa4, 0x9e, 0x88, 0xea, 0xfc, 0xc6, 0xd0, 0x2, 0x14, 0x2e, 0x38, 0x5a, 0x4c, 0x76, 0x60, 0x35, 0x23, 0x19, 0xf, 0x6d, 0x7b, 0x41, 0x57, 0x85, 0x93, 0xa9, 0xbf, 0xdd, 0xcb, 0xf1, 0xe7, 0x48, 0x5e, 0x64, 0x72, 0x10, 0x6, 0x3c, 0x2a, 0xf8, 0xee, 0xd4, 0xc2, 0xa0, 0xb6, 0x8c, 0x9a, 0x26, 0x30, 0xa, 0x1c, 0x7e, 0x68, 0x52, 0x44, 0x96, 0x80, 0xba, 0xac, 0xce, 0xd8, 0xe2, 0xf4, 0x5b, 0x4d, 0x77, 0x61, 0x3, 0x15, 0x2f, 0x39, 0xeb, 0xfd, 0xc7, 0xd1, 0xb3, 0xa5, 0x9f, 0x89, 0xdc, 0xca, 0xf0, 0xe6, 0x84, 0x92, 0xa8, 0xbe, 0x6c, 0x7a, 0x40, 0x56, 0x34, 0x22, 0x18, 0xe, 0xa1, 0xb7, 0x8d, 0x9b, 0xf9, 0xef, 0xd5, 0xc3, 0x11, 0x7, 0x3d, 0x2b, 0x49, 0x5f, 0x65, 0x73}, - {0x0, 0x17, 0x2e, 0x39, 0x5c, 0x4b, 0x72, 0x65, 0xb8, 0xaf, 0x96, 0x81, 0xe4, 0xf3, 0xca, 0xdd, 0x6d, 0x7a, 0x43, 0x54, 0x31, 0x26, 0x1f, 0x8, 0xd5, 0xc2, 0xfb, 0xec, 0x89, 0x9e, 0xa7, 0xb0, 0xda, 0xcd, 0xf4, 0xe3, 0x86, 0x91, 0xa8, 0xbf, 0x62, 0x75, 0x4c, 0x5b, 0x3e, 0x29, 0x10, 0x7, 0xb7, 0xa0, 0x99, 0x8e, 0xeb, 0xfc, 0xc5, 0xd2, 0xf, 0x18, 0x21, 0x36, 0x53, 0x44, 0x7d, 0x6a, 0xa9, 0xbe, 0x87, 0x90, 0xf5, 0xe2, 0xdb, 0xcc, 0x11, 0x6, 0x3f, 0x28, 0x4d, 0x5a, 0x63, 0x74, 0xc4, 0xd3, 0xea, 0xfd, 0x98, 0x8f, 0xb6, 0xa1, 0x7c, 0x6b, 0x52, 0x45, 0x20, 0x37, 0xe, 0x19, 0x73, 0x64, 0x5d, 0x4a, 0x2f, 0x38, 0x1, 0x16, 0xcb, 0xdc, 0xe5, 0xf2, 0x97, 0x80, 0xb9, 0xae, 0x1e, 0x9, 0x30, 0x27, 0x42, 0x55, 0x6c, 0x7b, 0xa6, 0xb1, 0x88, 0x9f, 0xfa, 0xed, 0xd4, 0xc3, 0x4f, 0x58, 0x61, 0x76, 0x13, 0x4, 0x3d, 0x2a, 0xf7, 0xe0, 0xd9, 0xce, 0xab, 0xbc, 0x85, 0x92, 0x22, 0x35, 0xc, 0x1b, 0x7e, 0x69, 0x50, 0x47, 0x9a, 0x8d, 0xb4, 0xa3, 0xc6, 0xd1, 0xe8, 0xff, 0x95, 0x82, 0xbb, 0xac, 0xc9, 0xde, 0xe7, 0xf0, 0x2d, 0x3a, 0x3, 0x14, 0x71, 0x66, 0x5f, 0x48, 0xf8, 0xef, 0xd6, 0xc1, 0xa4, 0xb3, 0x8a, 0x9d, 0x40, 0x57, 0x6e, 0x79, 0x1c, 0xb, 0x32, 0x25, 0xe6, 0xf1, 0xc8, 0xdf, 0xba, 0xad, 0x94, 0x83, 0x5e, 0x49, 0x70, 0x67, 0x2, 0x15, 0x2c, 0x3b, 0x8b, 0x9c, 0xa5, 0xb2, 0xd7, 0xc0, 0xf9, 0xee, 0x33, 0x24, 0x1d, 0xa, 0x6f, 0x78, 0x41, 0x56, 0x3c, 0x2b, 0x12, 0x5, 0x60, 0x77, 0x4e, 0x59, 0x84, 0x93, 0xaa, 0xbd, 0xd8, 0xcf, 0xf6, 0xe1, 0x51, 0x46, 0x7f, 0x68, 0xd, 0x1a, 0x23, 0x34, 0xe9, 0xfe, 0xc7, 0xd0, 0xb5, 0xa2, 0x9b, 0x8c}, - {0x0, 0x18, 0x30, 0x28, 0x60, 0x78, 0x50, 0x48, 0xc0, 0xd8, 0xf0, 0xe8, 0xa0, 0xb8, 0x90, 0x88, 0x9d, 0x85, 0xad, 0xb5, 0xfd, 0xe5, 0xcd, 0xd5, 0x5d, 0x45, 0x6d, 0x75, 0x3d, 0x25, 0xd, 0x15, 0x27, 0x3f, 0x17, 0xf, 0x47, 0x5f, 0x77, 0x6f, 0xe7, 0xff, 0xd7, 0xcf, 0x87, 0x9f, 0xb7, 0xaf, 0xba, 0xa2, 0x8a, 0x92, 0xda, 0xc2, 0xea, 0xf2, 0x7a, 0x62, 0x4a, 0x52, 0x1a, 0x2, 0x2a, 0x32, 0x4e, 0x56, 0x7e, 0x66, 0x2e, 0x36, 0x1e, 0x6, 0x8e, 0x96, 0xbe, 0xa6, 0xee, 0xf6, 0xde, 0xc6, 0xd3, 0xcb, 0xe3, 0xfb, 0xb3, 0xab, 0x83, 0x9b, 0x13, 0xb, 0x23, 0x3b, 0x73, 0x6b, 0x43, 0x5b, 0x69, 0x71, 0x59, 0x41, 0x9, 0x11, 0x39, 0x21, 0xa9, 0xb1, 0x99, 0x81, 0xc9, 0xd1, 0xf9, 0xe1, 0xf4, 0xec, 0xc4, 0xdc, 0x94, 0x8c, 0xa4, 0xbc, 0x34, 0x2c, 0x4, 0x1c, 0x54, 0x4c, 0x64, 0x7c, 0x9c, 0x84, 0xac, 0xb4, 0xfc, 0xe4, 0xcc, 0xd4, 0x5c, 0x44, 0x6c, 0x74, 0x3c, 0x24, 0xc, 0x14, 0x1, 0x19, 0x31, 0x29, 0x61, 0x79, 0x51, 0x49, 0xc1, 0xd9, 0xf1, 0xe9, 0xa1, 0xb9, 0x91, 0x89, 0xbb, 0xa3, 0x8b, 0x93, 0xdb, 0xc3, 0xeb, 0xf3, 0x7b, 0x63, 0x4b, 0x53, 0x1b, 0x3, 0x2b, 0x33, 0x26, 0x3e, 0x16, 0xe, 0x46, 0x5e, 0x76, 0x6e, 0xe6, 0xfe, 0xd6, 0xce, 0x86, 0x9e, 0xb6, 0xae, 0xd2, 0xca, 0xe2, 0xfa, 0xb2, 0xaa, 0x82, 0x9a, 0x12, 0xa, 0x22, 0x3a, 0x72, 0x6a, 0x42, 0x5a, 0x4f, 0x57, 0x7f, 0x67, 0x2f, 0x37, 0x1f, 0x7, 0x8f, 0x97, 0xbf, 0xa7, 0xef, 0xf7, 0xdf, 0xc7, 0xf5, 0xed, 0xc5, 0xdd, 0x95, 0x8d, 0xa5, 0xbd, 0x35, 0x2d, 0x5, 0x1d, 0x55, 0x4d, 0x65, 0x7d, 0x68, 0x70, 0x58, 0x40, 0x8, 0x10, 0x38, 0x20, 0xa8, 0xb0, 0x98, 0x80, 0xc8, 0xd0, 0xf8, 0xe0}, - {0x0, 0x19, 0x32, 0x2b, 0x64, 0x7d, 0x56, 0x4f, 0xc8, 0xd1, 0xfa, 0xe3, 0xac, 0xb5, 0x9e, 0x87, 0x8d, 0x94, 0xbf, 0xa6, 0xe9, 0xf0, 0xdb, 0xc2, 0x45, 0x5c, 0x77, 0x6e, 0x21, 0x38, 0x13, 0xa, 0x7, 0x1e, 0x35, 0x2c, 0x63, 0x7a, 0x51, 0x48, 0xcf, 0xd6, 0xfd, 0xe4, 0xab, 0xb2, 0x99, 0x80, 0x8a, 0x93, 0xb8, 0xa1, 0xee, 0xf7, 0xdc, 0xc5, 0x42, 0x5b, 0x70, 0x69, 0x26, 0x3f, 0x14, 0xd, 0xe, 0x17, 0x3c, 0x25, 0x6a, 0x73, 0x58, 0x41, 0xc6, 0xdf, 0xf4, 0xed, 0xa2, 0xbb, 0x90, 0x89, 0x83, 0x9a, 0xb1, 0xa8, 0xe7, 0xfe, 0xd5, 0xcc, 0x4b, 0x52, 0x79, 0x60, 0x2f, 0x36, 0x1d, 0x4, 0x9, 0x10, 0x3b, 0x22, 0x6d, 0x74, 0x5f, 0x46, 0xc1, 0xd8, 0xf3, 0xea, 0xa5, 0xbc, 0x97, 0x8e, 0x84, 0x9d, 0xb6, 0xaf, 0xe0, 0xf9, 0xd2, 0xcb, 0x4c, 0x55, 0x7e, 0x67, 0x28, 0x31, 0x1a, 0x3, 0x1c, 0x5, 0x2e, 0x37, 0x78, 0x61, 0x4a, 0x53, 0xd4, 0xcd, 0xe6, 0xff, 0xb0, 0xa9, 0x82, 0x9b, 0x91, 0x88, 0xa3, 0xba, 0xf5, 0xec, 0xc7, 0xde, 0x59, 0x40, 0x6b, 0x72, 0x3d, 0x24, 0xf, 0x16, 0x1b, 0x2, 0x29, 0x30, 0x7f, 0x66, 0x4d, 0x54, 0xd3, 0xca, 0xe1, 0xf8, 0xb7, 0xae, 0x85, 0x9c, 0x96, 0x8f, 0xa4, 0xbd, 0xf2, 0xeb, 0xc0, 0xd9, 0x5e, 0x47, 0x6c, 0x75, 0x3a, 0x23, 0x8, 0x11, 0x12, 0xb, 0x20, 0x39, 0x76, 0x6f, 0x44, 0x5d, 0xda, 0xc3, 0xe8, 0xf1, 0xbe, 0xa7, 0x8c, 0x95, 0x9f, 0x86, 0xad, 0xb4, 0xfb, 0xe2, 0xc9, 0xd0, 0x57, 0x4e, 0x65, 0x7c, 0x33, 0x2a, 0x1, 0x18, 0x15, 0xc, 0x27, 0x3e, 0x71, 0x68, 0x43, 0x5a, 0xdd, 0xc4, 0xef, 0xf6, 0xb9, 0xa0, 0x8b, 0x92, 0x98, 0x81, 0xaa, 0xb3, 0xfc, 0xe5, 0xce, 0xd7, 0x50, 0x49, 0x62, 0x7b, 0x34, 0x2d, 0x6, 0x1f}, - {0x0, 0x1a, 0x34, 0x2e, 0x68, 0x72, 0x5c, 0x46, 0xd0, 0xca, 0xe4, 0xfe, 0xb8, 0xa2, 0x8c, 0x96, 0xbd, 0xa7, 0x89, 0x93, 0xd5, 0xcf, 0xe1, 0xfb, 0x6d, 0x77, 0x59, 0x43, 0x5, 0x1f, 0x31, 0x2b, 0x67, 0x7d, 0x53, 0x49, 0xf, 0x15, 0x3b, 0x21, 0xb7, 0xad, 0x83, 0x99, 0xdf, 0xc5, 0xeb, 0xf1, 0xda, 0xc0, 0xee, 0xf4, 0xb2, 0xa8, 0x86, 0x9c, 0xa, 0x10, 0x3e, 0x24, 0x62, 0x78, 0x56, 0x4c, 0xce, 0xd4, 0xfa, 0xe0, 0xa6, 0xbc, 0x92, 0x88, 0x1e, 0x4, 0x2a, 0x30, 0x76, 0x6c, 0x42, 0x58, 0x73, 0x69, 0x47, 0x5d, 0x1b, 0x1, 0x2f, 0x35, 0xa3, 0xb9, 0x97, 0x8d, 0xcb, 0xd1, 0xff, 0xe5, 0xa9, 0xb3, 0x9d, 0x87, 0xc1, 0xdb, 0xf5, 0xef, 0x79, 0x63, 0x4d, 0x57, 0x11, 0xb, 0x25, 0x3f, 0x14, 0xe, 0x20, 0x3a, 0x7c, 0x66, 0x48, 0x52, 0xc4, 0xde, 0xf0, 0xea, 0xac, 0xb6, 0x98, 0x82, 0x81, 0x9b, 0xb5, 0xaf, 0xe9, 0xf3, 0xdd, 0xc7, 0x51, 0x4b, 0x65, 0x7f, 0x39, 0x23, 0xd, 0x17, 0x3c, 0x26, 0x8, 0x12, 0x54, 0x4e, 0x60, 0x7a, 0xec, 0xf6, 0xd8, 0xc2, 0x84, 0x9e, 0xb0, 0xaa, 0xe6, 0xfc, 0xd2, 0xc8, 0x8e, 0x94, 0xba, 0xa0, 0x36, 0x2c, 0x2, 0x18, 0x5e, 0x44, 0x6a, 0x70, 0x5b, 0x41, 0x6f, 0x75, 0x33, 0x29, 0x7, 0x1d, 0x8b, 0x91, 0xbf, 0xa5, 0xe3, 0xf9, 0xd7, 0xcd, 0x4f, 0x55, 0x7b, 0x61, 0x27, 0x3d, 0x13, 0x9, 0x9f, 0x85, 0xab, 0xb1, 0xf7, 0xed, 0xc3, 0xd9, 0xf2, 0xe8, 0xc6, 0xdc, 0x9a, 0x80, 0xae, 0xb4, 0x22, 0x38, 0x16, 0xc, 0x4a, 0x50, 0x7e, 0x64, 0x28, 0x32, 0x1c, 0x6, 0x40, 0x5a, 0x74, 0x6e, 0xf8, 0xe2, 0xcc, 0xd6, 0x90, 0x8a, 0xa4, 0xbe, 0x95, 0x8f, 0xa1, 0xbb, 0xfd, 0xe7, 0xc9, 0xd3, 0x45, 0x5f, 0x71, 0x6b, 0x2d, 0x37, 0x19, 0x3}, - {0x0, 0x1b, 0x36, 0x2d, 0x6c, 0x77, 0x5a, 0x41, 0xd8, 0xc3, 0xee, 0xf5, 0xb4, 0xaf, 0x82, 0x99, 0xad, 0xb6, 0x9b, 0x80, 0xc1, 0xda, 0xf7, 0xec, 0x75, 0x6e, 0x43, 0x58, 0x19, 0x2, 0x2f, 0x34, 0x47, 0x5c, 0x71, 0x6a, 0x2b, 0x30, 0x1d, 0x6, 0x9f, 0x84, 0xa9, 0xb2, 0xf3, 0xe8, 0xc5, 0xde, 0xea, 0xf1, 0xdc, 0xc7, 0x86, 0x9d, 0xb0, 0xab, 0x32, 0x29, 0x4, 0x1f, 0x5e, 0x45, 0x68, 0x73, 0x8e, 0x95, 0xb8, 0xa3, 0xe2, 0xf9, 0xd4, 0xcf, 0x56, 0x4d, 0x60, 0x7b, 0x3a, 0x21, 0xc, 0x17, 0x23, 0x38, 0x15, 0xe, 0x4f, 0x54, 0x79, 0x62, 0xfb, 0xe0, 0xcd, 0xd6, 0x97, 0x8c, 0xa1, 0xba, 0xc9, 0xd2, 0xff, 0xe4, 0xa5, 0xbe, 0x93, 0x88, 0x11, 0xa, 0x27, 0x3c, 0x7d, 0x66, 0x4b, 0x50, 0x64, 0x7f, 0x52, 0x49, 0x8, 0x13, 0x3e, 0x25, 0xbc, 0xa7, 0x8a, 0x91, 0xd0, 0xcb, 0xe6, 0xfd, 0x1, 0x1a, 0x37, 0x2c, 0x6d, 0x76, 0x5b, 0x40, 0xd9, 0xc2, 0xef, 0xf4, 0xb5, 0xae, 0x83, 0x98, 0xac, 0xb7, 0x9a, 0x81, 0xc0, 0xdb, 0xf6, 0xed, 0x74, 0x6f, 0x42, 0x59, 0x18, 0x3, 0x2e, 0x35, 0x46, 0x5d, 0x70, 0x6b, 0x2a, 0x31, 0x1c, 0x7, 0x9e, 0x85, 0xa8, 0xb3, 0xf2, 0xe9, 0xc4, 0xdf, 0xeb, 0xf0, 0xdd, 0xc6, 0x87, 0x9c, 0xb1, 0xaa, 0x33, 0x28, 0x5, 0x1e, 0x5f, 0x44, 0x69, 0x72, 0x8f, 0x94, 0xb9, 0xa2, 0xe3, 0xf8, 0xd5, 0xce, 0x57, 0x4c, 0x61, 0x7a, 0x3b, 0x20, 0xd, 0x16, 0x22, 0x39, 0x14, 0xf, 0x4e, 0x55, 0x78, 0x63, 0xfa, 0xe1, 0xcc, 0xd7, 0x96, 0x8d, 0xa0, 0xbb, 0xc8, 0xd3, 0xfe, 0xe5, 0xa4, 0xbf, 0x92, 0x89, 0x10, 0xb, 0x26, 0x3d, 0x7c, 0x67, 0x4a, 0x51, 0x65, 0x7e, 0x53, 0x48, 0x9, 0x12, 0x3f, 0x24, 0xbd, 0xa6, 0x8b, 0x90, 0xd1, 0xca, 0xe7, 0xfc}, - {0x0, 0x1c, 0x38, 0x24, 0x70, 0x6c, 0x48, 0x54, 0xe0, 0xfc, 0xd8, 0xc4, 0x90, 0x8c, 0xa8, 0xb4, 0xdd, 0xc1, 0xe5, 0xf9, 0xad, 0xb1, 0x95, 0x89, 0x3d, 0x21, 0x5, 0x19, 0x4d, 0x51, 0x75, 0x69, 0xa7, 0xbb, 0x9f, 0x83, 0xd7, 0xcb, 0xef, 0xf3, 0x47, 0x5b, 0x7f, 0x63, 0x37, 0x2b, 0xf, 0x13, 0x7a, 0x66, 0x42, 0x5e, 0xa, 0x16, 0x32, 0x2e, 0x9a, 0x86, 0xa2, 0xbe, 0xea, 0xf6, 0xd2, 0xce, 0x53, 0x4f, 0x6b, 0x77, 0x23, 0x3f, 0x1b, 0x7, 0xb3, 0xaf, 0x8b, 0x97, 0xc3, 0xdf, 0xfb, 0xe7, 0x8e, 0x92, 0xb6, 0xaa, 0xfe, 0xe2, 0xc6, 0xda, 0x6e, 0x72, 0x56, 0x4a, 0x1e, 0x2, 0x26, 0x3a, 0xf4, 0xe8, 0xcc, 0xd0, 0x84, 0x98, 0xbc, 0xa0, 0x14, 0x8, 0x2c, 0x30, 0x64, 0x78, 0x5c, 0x40, 0x29, 0x35, 0x11, 0xd, 0x59, 0x45, 0x61, 0x7d, 0xc9, 0xd5, 0xf1, 0xed, 0xb9, 0xa5, 0x81, 0x9d, 0xa6, 0xba, 0x9e, 0x82, 0xd6, 0xca, 0xee, 0xf2, 0x46, 0x5a, 0x7e, 0x62, 0x36, 0x2a, 0xe, 0x12, 0x7b, 0x67, 0x43, 0x5f, 0xb, 0x17, 0x33, 0x2f, 0x9b, 0x87, 0xa3, 0xbf, 0xeb, 0xf7, 0xd3, 0xcf, 0x1, 0x1d, 0x39, 0x25, 0x71, 0x6d, 0x49, 0x55, 0xe1, 0xfd, 0xd9, 0xc5, 0x91, 0x8d, 0xa9, 0xb5, 0xdc, 0xc0, 0xe4, 0xf8, 0xac, 0xb0, 0x94, 0x88, 0x3c, 0x20, 0x4, 0x18, 0x4c, 0x50, 0x74, 0x68, 0xf5, 0xe9, 0xcd, 0xd1, 0x85, 0x99, 0xbd, 0xa1, 0x15, 0x9, 0x2d, 0x31, 0x65, 0x79, 0x5d, 0x41, 0x28, 0x34, 0x10, 0xc, 0x58, 0x44, 0x60, 0x7c, 0xc8, 0xd4, 0xf0, 0xec, 0xb8, 0xa4, 0x80, 0x9c, 0x52, 0x4e, 0x6a, 0x76, 0x22, 0x3e, 0x1a, 0x6, 0xb2, 0xae, 0x8a, 0x96, 0xc2, 0xde, 0xfa, 0xe6, 0x8f, 0x93, 0xb7, 0xab, 0xff, 0xe3, 0xc7, 0xdb, 0x6f, 0x73, 0x57, 0x4b, 0x1f, 0x3, 0x27, 0x3b}, - {0x0, 0x1d, 0x3a, 0x27, 0x74, 0x69, 0x4e, 0x53, 0xe8, 0xf5, 0xd2, 0xcf, 0x9c, 0x81, 0xa6, 0xbb, 0xcd, 0xd0, 0xf7, 0xea, 0xb9, 0xa4, 0x83, 0x9e, 0x25, 0x38, 0x1f, 0x2, 0x51, 0x4c, 0x6b, 0x76, 0x87, 0x9a, 0xbd, 0xa0, 0xf3, 0xee, 0xc9, 0xd4, 0x6f, 0x72, 0x55, 0x48, 0x1b, 0x6, 0x21, 0x3c, 0x4a, 0x57, 0x70, 0x6d, 0x3e, 0x23, 0x4, 0x19, 0xa2, 0xbf, 0x98, 0x85, 0xd6, 0xcb, 0xec, 0xf1, 0x13, 0xe, 0x29, 0x34, 0x67, 0x7a, 0x5d, 0x40, 0xfb, 0xe6, 0xc1, 0xdc, 0x8f, 0x92, 0xb5, 0xa8, 0xde, 0xc3, 0xe4, 0xf9, 0xaa, 0xb7, 0x90, 0x8d, 0x36, 0x2b, 0xc, 0x11, 0x42, 0x5f, 0x78, 0x65, 0x94, 0x89, 0xae, 0xb3, 0xe0, 0xfd, 0xda, 0xc7, 0x7c, 0x61, 0x46, 0x5b, 0x8, 0x15, 0x32, 0x2f, 0x59, 0x44, 0x63, 0x7e, 0x2d, 0x30, 0x17, 0xa, 0xb1, 0xac, 0x8b, 0x96, 0xc5, 0xd8, 0xff, 0xe2, 0x26, 0x3b, 0x1c, 0x1, 0x52, 0x4f, 0x68, 0x75, 0xce, 0xd3, 0xf4, 0xe9, 0xba, 0xa7, 0x80, 0x9d, 0xeb, 0xf6, 0xd1, 0xcc, 0x9f, 0x82, 0xa5, 0xb8, 0x3, 0x1e, 0x39, 0x24, 0x77, 0x6a, 0x4d, 0x50, 0xa1, 0xbc, 0x9b, 0x86, 0xd5, 0xc8, 0xef, 0xf2, 0x49, 0x54, 0x73, 0x6e, 0x3d, 0x20, 0x7, 0x1a, 0x6c, 0x71, 0x56, 0x4b, 0x18, 0x5, 0x22, 0x3f, 0x84, 0x99, 0xbe, 0xa3, 0xf0, 0xed, 0xca, 0xd7, 0x35, 0x28, 0xf, 0x12, 0x41, 0x5c, 0x7b, 0x66, 0xdd, 0xc0, 0xe7, 0xfa, 0xa9, 0xb4, 0x93, 0x8e, 0xf8, 0xe5, 0xc2, 0xdf, 0x8c, 0x91, 0xb6, 0xab, 0x10, 0xd, 0x2a, 0x37, 0x64, 0x79, 0x5e, 0x43, 0xb2, 0xaf, 0x88, 0x95, 0xc6, 0xdb, 0xfc, 0xe1, 0x5a, 0x47, 0x60, 0x7d, 0x2e, 0x33, 0x14, 0x9, 0x7f, 0x62, 0x45, 0x58, 0xb, 0x16, 0x31, 0x2c, 0x97, 0x8a, 0xad, 0xb0, 0xe3, 0xfe, 0xd9, 0xc4}, - {0x0, 0x1e, 0x3c, 0x22, 0x78, 0x66, 0x44, 0x5a, 0xf0, 0xee, 0xcc, 0xd2, 0x88, 0x96, 0xb4, 0xaa, 0xfd, 0xe3, 0xc1, 0xdf, 0x85, 0x9b, 0xb9, 0xa7, 0xd, 0x13, 0x31, 0x2f, 0x75, 0x6b, 0x49, 0x57, 0xe7, 0xf9, 0xdb, 0xc5, 0x9f, 0x81, 0xa3, 0xbd, 0x17, 0x9, 0x2b, 0x35, 0x6f, 0x71, 0x53, 0x4d, 0x1a, 0x4, 0x26, 0x38, 0x62, 0x7c, 0x5e, 0x40, 0xea, 0xf4, 0xd6, 0xc8, 0x92, 0x8c, 0xae, 0xb0, 0xd3, 0xcd, 0xef, 0xf1, 0xab, 0xb5, 0x97, 0x89, 0x23, 0x3d, 0x1f, 0x1, 0x5b, 0x45, 0x67, 0x79, 0x2e, 0x30, 0x12, 0xc, 0x56, 0x48, 0x6a, 0x74, 0xde, 0xc0, 0xe2, 0xfc, 0xa6, 0xb8, 0x9a, 0x84, 0x34, 0x2a, 0x8, 0x16, 0x4c, 0x52, 0x70, 0x6e, 0xc4, 0xda, 0xf8, 0xe6, 0xbc, 0xa2, 0x80, 0x9e, 0xc9, 0xd7, 0xf5, 0xeb, 0xb1, 0xaf, 0x8d, 0x93, 0x39, 0x27, 0x5, 0x1b, 0x41, 0x5f, 0x7d, 0x63, 0xbb, 0xa5, 0x87, 0x99, 0xc3, 0xdd, 0xff, 0xe1, 0x4b, 0x55, 0x77, 0x69, 0x33, 0x2d, 0xf, 0x11, 0x46, 0x58, 0x7a, 0x64, 0x3e, 0x20, 0x2, 0x1c, 0xb6, 0xa8, 0x8a, 0x94, 0xce, 0xd0, 0xf2, 0xec, 0x5c, 0x42, 0x60, 0x7e, 0x24, 0x3a, 0x18, 0x6, 0xac, 0xb2, 0x90, 0x8e, 0xd4, 0xca, 0xe8, 0xf6, 0xa1, 0xbf, 0x9d, 0x83, 0xd9, 0xc7, 0xe5, 0xfb, 0x51, 0x4f, 0x6d, 0x73, 0x29, 0x37, 0x15, 0xb, 0x68, 0x76, 0x54, 0x4a, 0x10, 0xe, 0x2c, 0x32, 0x98, 0x86, 0xa4, 0xba, 0xe0, 0xfe, 0xdc, 0xc2, 0x95, 0x8b, 0xa9, 0xb7, 0xed, 0xf3, 0xd1, 0xcf, 0x65, 0x7b, 0x59, 0x47, 0x1d, 0x3, 0x21, 0x3f, 0x8f, 0x91, 0xb3, 0xad, 0xf7, 0xe9, 0xcb, 0xd5, 0x7f, 0x61, 0x43, 0x5d, 0x7, 0x19, 0x3b, 0x25, 0x72, 0x6c, 0x4e, 0x50, 0xa, 0x14, 0x36, 0x28, 0x82, 0x9c, 0xbe, 0xa0, 0xfa, 0xe4, 0xc6, 0xd8}, - {0x0, 0x1f, 0x3e, 0x21, 0x7c, 0x63, 0x42, 0x5d, 0xf8, 0xe7, 0xc6, 0xd9, 0x84, 0x9b, 0xba, 0xa5, 0xed, 0xf2, 0xd3, 0xcc, 0x91, 0x8e, 0xaf, 0xb0, 0x15, 0xa, 0x2b, 0x34, 0x69, 0x76, 0x57, 0x48, 0xc7, 0xd8, 0xf9, 0xe6, 0xbb, 0xa4, 0x85, 0x9a, 0x3f, 0x20, 0x1, 0x1e, 0x43, 0x5c, 0x7d, 0x62, 0x2a, 0x35, 0x14, 0xb, 0x56, 0x49, 0x68, 0x77, 0xd2, 0xcd, 0xec, 0xf3, 0xae, 0xb1, 0x90, 0x8f, 0x93, 0x8c, 0xad, 0xb2, 0xef, 0xf0, 0xd1, 0xce, 0x6b, 0x74, 0x55, 0x4a, 0x17, 0x8, 0x29, 0x36, 0x7e, 0x61, 0x40, 0x5f, 0x2, 0x1d, 0x3c, 0x23, 0x86, 0x99, 0xb8, 0xa7, 0xfa, 0xe5, 0xc4, 0xdb, 0x54, 0x4b, 0x6a, 0x75, 0x28, 0x37, 0x16, 0x9, 0xac, 0xb3, 0x92, 0x8d, 0xd0, 0xcf, 0xee, 0xf1, 0xb9, 0xa6, 0x87, 0x98, 0xc5, 0xda, 0xfb, 0xe4, 0x41, 0x5e, 0x7f, 0x60, 0x3d, 0x22, 0x3, 0x1c, 0x3b, 0x24, 0x5, 0x1a, 0x47, 0x58, 0x79, 0x66, 0xc3, 0xdc, 0xfd, 0xe2, 0xbf, 0xa0, 0x81, 0x9e, 0xd6, 0xc9, 0xe8, 0xf7, 0xaa, 0xb5, 0x94, 0x8b, 0x2e, 0x31, 0x10, 0xf, 0x52, 0x4d, 0x6c, 0x73, 0xfc, 0xe3, 0xc2, 0xdd, 0x80, 0x9f, 0xbe, 0xa1, 0x4, 0x1b, 0x3a, 0x25, 0x78, 0x67, 0x46, 0x59, 0x11, 0xe, 0x2f, 0x30, 0x6d, 0x72, 0x53, 0x4c, 0xe9, 0xf6, 0xd7, 0xc8, 0x95, 0x8a, 0xab, 0xb4, 0xa8, 0xb7, 0x96, 0x89, 0xd4, 0xcb, 0xea, 0xf5, 0x50, 0x4f, 0x6e, 0x71, 0x2c, 0x33, 0x12, 0xd, 0x45, 0x5a, 0x7b, 0x64, 0x39, 0x26, 0x7, 0x18, 0xbd, 0xa2, 0x83, 0x9c, 0xc1, 0xde, 0xff, 0xe0, 0x6f, 0x70, 0x51, 0x4e, 0x13, 0xc, 0x2d, 0x32, 0x97, 0x88, 0xa9, 0xb6, 0xeb, 0xf4, 0xd5, 0xca, 0x82, 0x9d, 0xbc, 0xa3, 0xfe, 0xe1, 0xc0, 0xdf, 0x7a, 0x65, 0x44, 0x5b, 0x6, 0x19, 0x38, 0x27}, - {0x0, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, 0x1d, 0x3d, 0x5d, 0x7d, 0x9d, 0xbd, 0xdd, 0xfd, 0x3a, 0x1a, 0x7a, 0x5a, 0xba, 0x9a, 0xfa, 0xda, 0x27, 0x7, 0x67, 0x47, 0xa7, 0x87, 0xe7, 0xc7, 0x74, 0x54, 0x34, 0x14, 0xf4, 0xd4, 0xb4, 0x94, 0x69, 0x49, 0x29, 0x9, 0xe9, 0xc9, 0xa9, 0x89, 0x4e, 0x6e, 0xe, 0x2e, 0xce, 0xee, 0x8e, 0xae, 0x53, 0x73, 0x13, 0x33, 0xd3, 0xf3, 0x93, 0xb3, 0xe8, 0xc8, 0xa8, 0x88, 0x68, 0x48, 0x28, 0x8, 0xf5, 0xd5, 0xb5, 0x95, 0x75, 0x55, 0x35, 0x15, 0xd2, 0xf2, 0x92, 0xb2, 0x52, 0x72, 0x12, 0x32, 0xcf, 0xef, 0x8f, 0xaf, 0x4f, 0x6f, 0xf, 0x2f, 0x9c, 0xbc, 0xdc, 0xfc, 0x1c, 0x3c, 0x5c, 0x7c, 0x81, 0xa1, 0xc1, 0xe1, 0x1, 0x21, 0x41, 0x61, 0xa6, 0x86, 0xe6, 0xc6, 0x26, 0x6, 0x66, 0x46, 0xbb, 0x9b, 0xfb, 0xdb, 0x3b, 0x1b, 0x7b, 0x5b, 0xcd, 0xed, 0x8d, 0xad, 0x4d, 0x6d, 0xd, 0x2d, 0xd0, 0xf0, 0x90, 0xb0, 0x50, 0x70, 0x10, 0x30, 0xf7, 0xd7, 0xb7, 0x97, 0x77, 0x57, 0x37, 0x17, 0xea, 0xca, 0xaa, 0x8a, 0x6a, 0x4a, 0x2a, 0xa, 0xb9, 0x99, 0xf9, 0xd9, 0x39, 0x19, 0x79, 0x59, 0xa4, 0x84, 0xe4, 0xc4, 0x24, 0x4, 0x64, 0x44, 0x83, 0xa3, 0xc3, 0xe3, 0x3, 0x23, 0x43, 0x63, 0x9e, 0xbe, 0xde, 0xfe, 0x1e, 0x3e, 0x5e, 0x7e, 0x25, 0x5, 0x65, 0x45, 0xa5, 0x85, 0xe5, 0xc5, 0x38, 0x18, 0x78, 0x58, 0xb8, 0x98, 0xf8, 0xd8, 0x1f, 0x3f, 0x5f, 0x7f, 0x9f, 0xbf, 0xdf, 0xff, 0x2, 0x22, 0x42, 0x62, 0x82, 0xa2, 0xc2, 0xe2, 0x51, 0x71, 0x11, 0x31, 0xd1, 0xf1, 0x91, 0xb1, 0x4c, 0x6c, 0xc, 0x2c, 0xcc, 0xec, 0x8c, 0xac, 0x6b, 0x4b, 0x2b, 0xb, 0xeb, 0xcb, 0xab, 0x8b, 0x76, 0x56, 0x36, 0x16, 0xf6, 0xd6, 0xb6, 0x96}, - {0x0, 0x21, 0x42, 0x63, 0x84, 0xa5, 0xc6, 0xe7, 0x15, 0x34, 0x57, 0x76, 0x91, 0xb0, 0xd3, 0xf2, 0x2a, 0xb, 0x68, 0x49, 0xae, 0x8f, 0xec, 0xcd, 0x3f, 0x1e, 0x7d, 0x5c, 0xbb, 0x9a, 0xf9, 0xd8, 0x54, 0x75, 0x16, 0x37, 0xd0, 0xf1, 0x92, 0xb3, 0x41, 0x60, 0x3, 0x22, 0xc5, 0xe4, 0x87, 0xa6, 0x7e, 0x5f, 0x3c, 0x1d, 0xfa, 0xdb, 0xb8, 0x99, 0x6b, 0x4a, 0x29, 0x8, 0xef, 0xce, 0xad, 0x8c, 0xa8, 0x89, 0xea, 0xcb, 0x2c, 0xd, 0x6e, 0x4f, 0xbd, 0x9c, 0xff, 0xde, 0x39, 0x18, 0x7b, 0x5a, 0x82, 0xa3, 0xc0, 0xe1, 0x6, 0x27, 0x44, 0x65, 0x97, 0xb6, 0xd5, 0xf4, 0x13, 0x32, 0x51, 0x70, 0xfc, 0xdd, 0xbe, 0x9f, 0x78, 0x59, 0x3a, 0x1b, 0xe9, 0xc8, 0xab, 0x8a, 0x6d, 0x4c, 0x2f, 0xe, 0xd6, 0xf7, 0x94, 0xb5, 0x52, 0x73, 0x10, 0x31, 0xc3, 0xe2, 0x81, 0xa0, 0x47, 0x66, 0x5, 0x24, 0x4d, 0x6c, 0xf, 0x2e, 0xc9, 0xe8, 0x8b, 0xaa, 0x58, 0x79, 0x1a, 0x3b, 0xdc, 0xfd, 0x9e, 0xbf, 0x67, 0x46, 0x25, 0x4, 0xe3, 0xc2, 0xa1, 0x80, 0x72, 0x53, 0x30, 0x11, 0xf6, 0xd7, 0xb4, 0x95, 0x19, 0x38, 0x5b, 0x7a, 0x9d, 0xbc, 0xdf, 0xfe, 0xc, 0x2d, 0x4e, 0x6f, 0x88, 0xa9, 0xca, 0xeb, 0x33, 0x12, 0x71, 0x50, 0xb7, 0x96, 0xf5, 0xd4, 0x26, 0x7, 0x64, 0x45, 0xa2, 0x83, 0xe0, 0xc1, 0xe5, 0xc4, 0xa7, 0x86, 0x61, 0x40, 0x23, 0x2, 0xf0, 0xd1, 0xb2, 0x93, 0x74, 0x55, 0x36, 0x17, 0xcf, 0xee, 0x8d, 0xac, 0x4b, 0x6a, 0x9, 0x28, 0xda, 0xfb, 0x98, 0xb9, 0x5e, 0x7f, 0x1c, 0x3d, 0xb1, 0x90, 0xf3, 0xd2, 0x35, 0x14, 0x77, 0x56, 0xa4, 0x85, 0xe6, 0xc7, 0x20, 0x1, 0x62, 0x43, 0x9b, 0xba, 0xd9, 0xf8, 0x1f, 0x3e, 0x5d, 0x7c, 0x8e, 0xaf, 0xcc, 0xed, 0xa, 0x2b, 0x48, 0x69}, - {0x0, 0x22, 0x44, 0x66, 0x88, 0xaa, 0xcc, 0xee, 0xd, 0x2f, 0x49, 0x6b, 0x85, 0xa7, 0xc1, 0xe3, 0x1a, 0x38, 0x5e, 0x7c, 0x92, 0xb0, 0xd6, 0xf4, 0x17, 0x35, 0x53, 0x71, 0x9f, 0xbd, 0xdb, 0xf9, 0x34, 0x16, 0x70, 0x52, 0xbc, 0x9e, 0xf8, 0xda, 0x39, 0x1b, 0x7d, 0x5f, 0xb1, 0x93, 0xf5, 0xd7, 0x2e, 0xc, 0x6a, 0x48, 0xa6, 0x84, 0xe2, 0xc0, 0x23, 0x1, 0x67, 0x45, 0xab, 0x89, 0xef, 0xcd, 0x68, 0x4a, 0x2c, 0xe, 0xe0, 0xc2, 0xa4, 0x86, 0x65, 0x47, 0x21, 0x3, 0xed, 0xcf, 0xa9, 0x8b, 0x72, 0x50, 0x36, 0x14, 0xfa, 0xd8, 0xbe, 0x9c, 0x7f, 0x5d, 0x3b, 0x19, 0xf7, 0xd5, 0xb3, 0x91, 0x5c, 0x7e, 0x18, 0x3a, 0xd4, 0xf6, 0x90, 0xb2, 0x51, 0x73, 0x15, 0x37, 0xd9, 0xfb, 0x9d, 0xbf, 0x46, 0x64, 0x2, 0x20, 0xce, 0xec, 0x8a, 0xa8, 0x4b, 0x69, 0xf, 0x2d, 0xc3, 0xe1, 0x87, 0xa5, 0xd0, 0xf2, 0x94, 0xb6, 0x58, 0x7a, 0x1c, 0x3e, 0xdd, 0xff, 0x99, 0xbb, 0x55, 0x77, 0x11, 0x33, 0xca, 0xe8, 0x8e, 0xac, 0x42, 0x60, 0x6, 0x24, 0xc7, 0xe5, 0x83, 0xa1, 0x4f, 0x6d, 0xb, 0x29, 0xe4, 0xc6, 0xa0, 0x82, 0x6c, 0x4e, 0x28, 0xa, 0xe9, 0xcb, 0xad, 0x8f, 0x61, 0x43, 0x25, 0x7, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 0xf3, 0xd1, 0xb7, 0x95, 0x7b, 0x59, 0x3f, 0x1d, 0xb8, 0x9a, 0xfc, 0xde, 0x30, 0x12, 0x74, 0x56, 0xb5, 0x97, 0xf1, 0xd3, 0x3d, 0x1f, 0x79, 0x5b, 0xa2, 0x80, 0xe6, 0xc4, 0x2a, 0x8, 0x6e, 0x4c, 0xaf, 0x8d, 0xeb, 0xc9, 0x27, 0x5, 0x63, 0x41, 0x8c, 0xae, 0xc8, 0xea, 0x4, 0x26, 0x40, 0x62, 0x81, 0xa3, 0xc5, 0xe7, 0x9, 0x2b, 0x4d, 0x6f, 0x96, 0xb4, 0xd2, 0xf0, 0x1e, 0x3c, 0x5a, 0x78, 0x9b, 0xb9, 0xdf, 0xfd, 0x13, 0x31, 0x57, 0x75}, - {0x0, 0x23, 0x46, 0x65, 0x8c, 0xaf, 0xca, 0xe9, 0x5, 0x26, 0x43, 0x60, 0x89, 0xaa, 0xcf, 0xec, 0xa, 0x29, 0x4c, 0x6f, 0x86, 0xa5, 0xc0, 0xe3, 0xf, 0x2c, 0x49, 0x6a, 0x83, 0xa0, 0xc5, 0xe6, 0x14, 0x37, 0x52, 0x71, 0x98, 0xbb, 0xde, 0xfd, 0x11, 0x32, 0x57, 0x74, 0x9d, 0xbe, 0xdb, 0xf8, 0x1e, 0x3d, 0x58, 0x7b, 0x92, 0xb1, 0xd4, 0xf7, 0x1b, 0x38, 0x5d, 0x7e, 0x97, 0xb4, 0xd1, 0xf2, 0x28, 0xb, 0x6e, 0x4d, 0xa4, 0x87, 0xe2, 0xc1, 0x2d, 0xe, 0x6b, 0x48, 0xa1, 0x82, 0xe7, 0xc4, 0x22, 0x1, 0x64, 0x47, 0xae, 0x8d, 0xe8, 0xcb, 0x27, 0x4, 0x61, 0x42, 0xab, 0x88, 0xed, 0xce, 0x3c, 0x1f, 0x7a, 0x59, 0xb0, 0x93, 0xf6, 0xd5, 0x39, 0x1a, 0x7f, 0x5c, 0xb5, 0x96, 0xf3, 0xd0, 0x36, 0x15, 0x70, 0x53, 0xba, 0x99, 0xfc, 0xdf, 0x33, 0x10, 0x75, 0x56, 0xbf, 0x9c, 0xf9, 0xda, 0x50, 0x73, 0x16, 0x35, 0xdc, 0xff, 0x9a, 0xb9, 0x55, 0x76, 0x13, 0x30, 0xd9, 0xfa, 0x9f, 0xbc, 0x5a, 0x79, 0x1c, 0x3f, 0xd6, 0xf5, 0x90, 0xb3, 0x5f, 0x7c, 0x19, 0x3a, 0xd3, 0xf0, 0x95, 0xb6, 0x44, 0x67, 0x2, 0x21, 0xc8, 0xeb, 0x8e, 0xad, 0x41, 0x62, 0x7, 0x24, 0xcd, 0xee, 0x8b, 0xa8, 0x4e, 0x6d, 0x8, 0x2b, 0xc2, 0xe1, 0x84, 0xa7, 0x4b, 0x68, 0xd, 0x2e, 0xc7, 0xe4, 0x81, 0xa2, 0x78, 0x5b, 0x3e, 0x1d, 0xf4, 0xd7, 0xb2, 0x91, 0x7d, 0x5e, 0x3b, 0x18, 0xf1, 0xd2, 0xb7, 0x94, 0x72, 0x51, 0x34, 0x17, 0xfe, 0xdd, 0xb8, 0x9b, 0x77, 0x54, 0x31, 0x12, 0xfb, 0xd8, 0xbd, 0x9e, 0x6c, 0x4f, 0x2a, 0x9, 0xe0, 0xc3, 0xa6, 0x85, 0x69, 0x4a, 0x2f, 0xc, 0xe5, 0xc6, 0xa3, 0x80, 0x66, 0x45, 0x20, 0x3, 0xea, 0xc9, 0xac, 0x8f, 0x63, 0x40, 0x25, 0x6, 0xef, 0xcc, 0xa9, 0x8a}, - {0x0, 0x24, 0x48, 0x6c, 0x90, 0xb4, 0xd8, 0xfc, 0x3d, 0x19, 0x75, 0x51, 0xad, 0x89, 0xe5, 0xc1, 0x7a, 0x5e, 0x32, 0x16, 0xea, 0xce, 0xa2, 0x86, 0x47, 0x63, 0xf, 0x2b, 0xd7, 0xf3, 0x9f, 0xbb, 0xf4, 0xd0, 0xbc, 0x98, 0x64, 0x40, 0x2c, 0x8, 0xc9, 0xed, 0x81, 0xa5, 0x59, 0x7d, 0x11, 0x35, 0x8e, 0xaa, 0xc6, 0xe2, 0x1e, 0x3a, 0x56, 0x72, 0xb3, 0x97, 0xfb, 0xdf, 0x23, 0x7, 0x6b, 0x4f, 0xf5, 0xd1, 0xbd, 0x99, 0x65, 0x41, 0x2d, 0x9, 0xc8, 0xec, 0x80, 0xa4, 0x58, 0x7c, 0x10, 0x34, 0x8f, 0xab, 0xc7, 0xe3, 0x1f, 0x3b, 0x57, 0x73, 0xb2, 0x96, 0xfa, 0xde, 0x22, 0x6, 0x6a, 0x4e, 0x1, 0x25, 0x49, 0x6d, 0x91, 0xb5, 0xd9, 0xfd, 0x3c, 0x18, 0x74, 0x50, 0xac, 0x88, 0xe4, 0xc0, 0x7b, 0x5f, 0x33, 0x17, 0xeb, 0xcf, 0xa3, 0x87, 0x46, 0x62, 0xe, 0x2a, 0xd6, 0xf2, 0x9e, 0xba, 0xf7, 0xd3, 0xbf, 0x9b, 0x67, 0x43, 0x2f, 0xb, 0xca, 0xee, 0x82, 0xa6, 0x5a, 0x7e, 0x12, 0x36, 0x8d, 0xa9, 0xc5, 0xe1, 0x1d, 0x39, 0x55, 0x71, 0xb0, 0x94, 0xf8, 0xdc, 0x20, 0x4, 0x68, 0x4c, 0x3, 0x27, 0x4b, 0x6f, 0x93, 0xb7, 0xdb, 0xff, 0x3e, 0x1a, 0x76, 0x52, 0xae, 0x8a, 0xe6, 0xc2, 0x79, 0x5d, 0x31, 0x15, 0xe9, 0xcd, 0xa1, 0x85, 0x44, 0x60, 0xc, 0x28, 0xd4, 0xf0, 0x9c, 0xb8, 0x2, 0x26, 0x4a, 0x6e, 0x92, 0xb6, 0xda, 0xfe, 0x3f, 0x1b, 0x77, 0x53, 0xaf, 0x8b, 0xe7, 0xc3, 0x78, 0x5c, 0x30, 0x14, 0xe8, 0xcc, 0xa0, 0x84, 0x45, 0x61, 0xd, 0x29, 0xd5, 0xf1, 0x9d, 0xb9, 0xf6, 0xd2, 0xbe, 0x9a, 0x66, 0x42, 0x2e, 0xa, 0xcb, 0xef, 0x83, 0xa7, 0x5b, 0x7f, 0x13, 0x37, 0x8c, 0xa8, 0xc4, 0xe0, 0x1c, 0x38, 0x54, 0x70, 0xb1, 0x95, 0xf9, 0xdd, 0x21, 0x5, 0x69, 0x4d}, - {0x0, 0x25, 0x4a, 0x6f, 0x94, 0xb1, 0xde, 0xfb, 0x35, 0x10, 0x7f, 0x5a, 0xa1, 0x84, 0xeb, 0xce, 0x6a, 0x4f, 0x20, 0x5, 0xfe, 0xdb, 0xb4, 0x91, 0x5f, 0x7a, 0x15, 0x30, 0xcb, 0xee, 0x81, 0xa4, 0xd4, 0xf1, 0x9e, 0xbb, 0x40, 0x65, 0xa, 0x2f, 0xe1, 0xc4, 0xab, 0x8e, 0x75, 0x50, 0x3f, 0x1a, 0xbe, 0x9b, 0xf4, 0xd1, 0x2a, 0xf, 0x60, 0x45, 0x8b, 0xae, 0xc1, 0xe4, 0x1f, 0x3a, 0x55, 0x70, 0xb5, 0x90, 0xff, 0xda, 0x21, 0x4, 0x6b, 0x4e, 0x80, 0xa5, 0xca, 0xef, 0x14, 0x31, 0x5e, 0x7b, 0xdf, 0xfa, 0x95, 0xb0, 0x4b, 0x6e, 0x1, 0x24, 0xea, 0xcf, 0xa0, 0x85, 0x7e, 0x5b, 0x34, 0x11, 0x61, 0x44, 0x2b, 0xe, 0xf5, 0xd0, 0xbf, 0x9a, 0x54, 0x71, 0x1e, 0x3b, 0xc0, 0xe5, 0x8a, 0xaf, 0xb, 0x2e, 0x41, 0x64, 0x9f, 0xba, 0xd5, 0xf0, 0x3e, 0x1b, 0x74, 0x51, 0xaa, 0x8f, 0xe0, 0xc5, 0x77, 0x52, 0x3d, 0x18, 0xe3, 0xc6, 0xa9, 0x8c, 0x42, 0x67, 0x8, 0x2d, 0xd6, 0xf3, 0x9c, 0xb9, 0x1d, 0x38, 0x57, 0x72, 0x89, 0xac, 0xc3, 0xe6, 0x28, 0xd, 0x62, 0x47, 0xbc, 0x99, 0xf6, 0xd3, 0xa3, 0x86, 0xe9, 0xcc, 0x37, 0x12, 0x7d, 0x58, 0x96, 0xb3, 0xdc, 0xf9, 0x2, 0x27, 0x48, 0x6d, 0xc9, 0xec, 0x83, 0xa6, 0x5d, 0x78, 0x17, 0x32, 0xfc, 0xd9, 0xb6, 0x93, 0x68, 0x4d, 0x22, 0x7, 0xc2, 0xe7, 0x88, 0xad, 0x56, 0x73, 0x1c, 0x39, 0xf7, 0xd2, 0xbd, 0x98, 0x63, 0x46, 0x29, 0xc, 0xa8, 0x8d, 0xe2, 0xc7, 0x3c, 0x19, 0x76, 0x53, 0x9d, 0xb8, 0xd7, 0xf2, 0x9, 0x2c, 0x43, 0x66, 0x16, 0x33, 0x5c, 0x79, 0x82, 0xa7, 0xc8, 0xed, 0x23, 0x6, 0x69, 0x4c, 0xb7, 0x92, 0xfd, 0xd8, 0x7c, 0x59, 0x36, 0x13, 0xe8, 0xcd, 0xa2, 0x87, 0x49, 0x6c, 0x3, 0x26, 0xdd, 0xf8, 0x97, 0xb2}, - {0x0, 0x26, 0x4c, 0x6a, 0x98, 0xbe, 0xd4, 0xf2, 0x2d, 0xb, 0x61, 0x47, 0xb5, 0x93, 0xf9, 0xdf, 0x5a, 0x7c, 0x16, 0x30, 0xc2, 0xe4, 0x8e, 0xa8, 0x77, 0x51, 0x3b, 0x1d, 0xef, 0xc9, 0xa3, 0x85, 0xb4, 0x92, 0xf8, 0xde, 0x2c, 0xa, 0x60, 0x46, 0x99, 0xbf, 0xd5, 0xf3, 0x1, 0x27, 0x4d, 0x6b, 0xee, 0xc8, 0xa2, 0x84, 0x76, 0x50, 0x3a, 0x1c, 0xc3, 0xe5, 0x8f, 0xa9, 0x5b, 0x7d, 0x17, 0x31, 0x75, 0x53, 0x39, 0x1f, 0xed, 0xcb, 0xa1, 0x87, 0x58, 0x7e, 0x14, 0x32, 0xc0, 0xe6, 0x8c, 0xaa, 0x2f, 0x9, 0x63, 0x45, 0xb7, 0x91, 0xfb, 0xdd, 0x2, 0x24, 0x4e, 0x68, 0x9a, 0xbc, 0xd6, 0xf0, 0xc1, 0xe7, 0x8d, 0xab, 0x59, 0x7f, 0x15, 0x33, 0xec, 0xca, 0xa0, 0x86, 0x74, 0x52, 0x38, 0x1e, 0x9b, 0xbd, 0xd7, 0xf1, 0x3, 0x25, 0x4f, 0x69, 0xb6, 0x90, 0xfa, 0xdc, 0x2e, 0x8, 0x62, 0x44, 0xea, 0xcc, 0xa6, 0x80, 0x72, 0x54, 0x3e, 0x18, 0xc7, 0xe1, 0x8b, 0xad, 0x5f, 0x79, 0x13, 0x35, 0xb0, 0x96, 0xfc, 0xda, 0x28, 0xe, 0x64, 0x42, 0x9d, 0xbb, 0xd1, 0xf7, 0x5, 0x23, 0x49, 0x6f, 0x5e, 0x78, 0x12, 0x34, 0xc6, 0xe0, 0x8a, 0xac, 0x73, 0x55, 0x3f, 0x19, 0xeb, 0xcd, 0xa7, 0x81, 0x4, 0x22, 0x48, 0x6e, 0x9c, 0xba, 0xd0, 0xf6, 0x29, 0xf, 0x65, 0x43, 0xb1, 0x97, 0xfd, 0xdb, 0x9f, 0xb9, 0xd3, 0xf5, 0x7, 0x21, 0x4b, 0x6d, 0xb2, 0x94, 0xfe, 0xd8, 0x2a, 0xc, 0x66, 0x40, 0xc5, 0xe3, 0x89, 0xaf, 0x5d, 0x7b, 0x11, 0x37, 0xe8, 0xce, 0xa4, 0x82, 0x70, 0x56, 0x3c, 0x1a, 0x2b, 0xd, 0x67, 0x41, 0xb3, 0x95, 0xff, 0xd9, 0x6, 0x20, 0x4a, 0x6c, 0x9e, 0xb8, 0xd2, 0xf4, 0x71, 0x57, 0x3d, 0x1b, 0xe9, 0xcf, 0xa5, 0x83, 0x5c, 0x7a, 0x10, 0x36, 0xc4, 0xe2, 0x88, 0xae}, - {0x0, 0x27, 0x4e, 0x69, 0x9c, 0xbb, 0xd2, 0xf5, 0x25, 0x2, 0x6b, 0x4c, 0xb9, 0x9e, 0xf7, 0xd0, 0x4a, 0x6d, 0x4, 0x23, 0xd6, 0xf1, 0x98, 0xbf, 0x6f, 0x48, 0x21, 0x6, 0xf3, 0xd4, 0xbd, 0x9a, 0x94, 0xb3, 0xda, 0xfd, 0x8, 0x2f, 0x46, 0x61, 0xb1, 0x96, 0xff, 0xd8, 0x2d, 0xa, 0x63, 0x44, 0xde, 0xf9, 0x90, 0xb7, 0x42, 0x65, 0xc, 0x2b, 0xfb, 0xdc, 0xb5, 0x92, 0x67, 0x40, 0x29, 0xe, 0x35, 0x12, 0x7b, 0x5c, 0xa9, 0x8e, 0xe7, 0xc0, 0x10, 0x37, 0x5e, 0x79, 0x8c, 0xab, 0xc2, 0xe5, 0x7f, 0x58, 0x31, 0x16, 0xe3, 0xc4, 0xad, 0x8a, 0x5a, 0x7d, 0x14, 0x33, 0xc6, 0xe1, 0x88, 0xaf, 0xa1, 0x86, 0xef, 0xc8, 0x3d, 0x1a, 0x73, 0x54, 0x84, 0xa3, 0xca, 0xed, 0x18, 0x3f, 0x56, 0x71, 0xeb, 0xcc, 0xa5, 0x82, 0x77, 0x50, 0x39, 0x1e, 0xce, 0xe9, 0x80, 0xa7, 0x52, 0x75, 0x1c, 0x3b, 0x6a, 0x4d, 0x24, 0x3, 0xf6, 0xd1, 0xb8, 0x9f, 0x4f, 0x68, 0x1, 0x26, 0xd3, 0xf4, 0x9d, 0xba, 0x20, 0x7, 0x6e, 0x49, 0xbc, 0x9b, 0xf2, 0xd5, 0x5, 0x22, 0x4b, 0x6c, 0x99, 0xbe, 0xd7, 0xf0, 0xfe, 0xd9, 0xb0, 0x97, 0x62, 0x45, 0x2c, 0xb, 0xdb, 0xfc, 0x95, 0xb2, 0x47, 0x60, 0x9, 0x2e, 0xb4, 0x93, 0xfa, 0xdd, 0x28, 0xf, 0x66, 0x41, 0x91, 0xb6, 0xdf, 0xf8, 0xd, 0x2a, 0x43, 0x64, 0x5f, 0x78, 0x11, 0x36, 0xc3, 0xe4, 0x8d, 0xaa, 0x7a, 0x5d, 0x34, 0x13, 0xe6, 0xc1, 0xa8, 0x8f, 0x15, 0x32, 0x5b, 0x7c, 0x89, 0xae, 0xc7, 0xe0, 0x30, 0x17, 0x7e, 0x59, 0xac, 0x8b, 0xe2, 0xc5, 0xcb, 0xec, 0x85, 0xa2, 0x57, 0x70, 0x19, 0x3e, 0xee, 0xc9, 0xa0, 0x87, 0x72, 0x55, 0x3c, 0x1b, 0x81, 0xa6, 0xcf, 0xe8, 0x1d, 0x3a, 0x53, 0x74, 0xa4, 0x83, 0xea, 0xcd, 0x38, 0x1f, 0x76, 0x51}, - {0x0, 0x28, 0x50, 0x78, 0xa0, 0x88, 0xf0, 0xd8, 0x5d, 0x75, 0xd, 0x25, 0xfd, 0xd5, 0xad, 0x85, 0xba, 0x92, 0xea, 0xc2, 0x1a, 0x32, 0x4a, 0x62, 0xe7, 0xcf, 0xb7, 0x9f, 0x47, 0x6f, 0x17, 0x3f, 0x69, 0x41, 0x39, 0x11, 0xc9, 0xe1, 0x99, 0xb1, 0x34, 0x1c, 0x64, 0x4c, 0x94, 0xbc, 0xc4, 0xec, 0xd3, 0xfb, 0x83, 0xab, 0x73, 0x5b, 0x23, 0xb, 0x8e, 0xa6, 0xde, 0xf6, 0x2e, 0x6, 0x7e, 0x56, 0xd2, 0xfa, 0x82, 0xaa, 0x72, 0x5a, 0x22, 0xa, 0x8f, 0xa7, 0xdf, 0xf7, 0x2f, 0x7, 0x7f, 0x57, 0x68, 0x40, 0x38, 0x10, 0xc8, 0xe0, 0x98, 0xb0, 0x35, 0x1d, 0x65, 0x4d, 0x95, 0xbd, 0xc5, 0xed, 0xbb, 0x93, 0xeb, 0xc3, 0x1b, 0x33, 0x4b, 0x63, 0xe6, 0xce, 0xb6, 0x9e, 0x46, 0x6e, 0x16, 0x3e, 0x1, 0x29, 0x51, 0x79, 0xa1, 0x89, 0xf1, 0xd9, 0x5c, 0x74, 0xc, 0x24, 0xfc, 0xd4, 0xac, 0x84, 0xb9, 0x91, 0xe9, 0xc1, 0x19, 0x31, 0x49, 0x61, 0xe4, 0xcc, 0xb4, 0x9c, 0x44, 0x6c, 0x14, 0x3c, 0x3, 0x2b, 0x53, 0x7b, 0xa3, 0x8b, 0xf3, 0xdb, 0x5e, 0x76, 0xe, 0x26, 0xfe, 0xd6, 0xae, 0x86, 0xd0, 0xf8, 0x80, 0xa8, 0x70, 0x58, 0x20, 0x8, 0x8d, 0xa5, 0xdd, 0xf5, 0x2d, 0x5, 0x7d, 0x55, 0x6a, 0x42, 0x3a, 0x12, 0xca, 0xe2, 0x9a, 0xb2, 0x37, 0x1f, 0x67, 0x4f, 0x97, 0xbf, 0xc7, 0xef, 0x6b, 0x43, 0x3b, 0x13, 0xcb, 0xe3, 0x9b, 0xb3, 0x36, 0x1e, 0x66, 0x4e, 0x96, 0xbe, 0xc6, 0xee, 0xd1, 0xf9, 0x81, 0xa9, 0x71, 0x59, 0x21, 0x9, 0x8c, 0xa4, 0xdc, 0xf4, 0x2c, 0x4, 0x7c, 0x54, 0x2, 0x2a, 0x52, 0x7a, 0xa2, 0x8a, 0xf2, 0xda, 0x5f, 0x77, 0xf, 0x27, 0xff, 0xd7, 0xaf, 0x87, 0xb8, 0x90, 0xe8, 0xc0, 0x18, 0x30, 0x48, 0x60, 0xe5, 0xcd, 0xb5, 0x9d, 0x45, 0x6d, 0x15, 0x3d}, - {0x0, 0x29, 0x52, 0x7b, 0xa4, 0x8d, 0xf6, 0xdf, 0x55, 0x7c, 0x7, 0x2e, 0xf1, 0xd8, 0xa3, 0x8a, 0xaa, 0x83, 0xf8, 0xd1, 0xe, 0x27, 0x5c, 0x75, 0xff, 0xd6, 0xad, 0x84, 0x5b, 0x72, 0x9, 0x20, 0x49, 0x60, 0x1b, 0x32, 0xed, 0xc4, 0xbf, 0x96, 0x1c, 0x35, 0x4e, 0x67, 0xb8, 0x91, 0xea, 0xc3, 0xe3, 0xca, 0xb1, 0x98, 0x47, 0x6e, 0x15, 0x3c, 0xb6, 0x9f, 0xe4, 0xcd, 0x12, 0x3b, 0x40, 0x69, 0x92, 0xbb, 0xc0, 0xe9, 0x36, 0x1f, 0x64, 0x4d, 0xc7, 0xee, 0x95, 0xbc, 0x63, 0x4a, 0x31, 0x18, 0x38, 0x11, 0x6a, 0x43, 0x9c, 0xb5, 0xce, 0xe7, 0x6d, 0x44, 0x3f, 0x16, 0xc9, 0xe0, 0x9b, 0xb2, 0xdb, 0xf2, 0x89, 0xa0, 0x7f, 0x56, 0x2d, 0x4, 0x8e, 0xa7, 0xdc, 0xf5, 0x2a, 0x3, 0x78, 0x51, 0x71, 0x58, 0x23, 0xa, 0xd5, 0xfc, 0x87, 0xae, 0x24, 0xd, 0x76, 0x5f, 0x80, 0xa9, 0xd2, 0xfb, 0x39, 0x10, 0x6b, 0x42, 0x9d, 0xb4, 0xcf, 0xe6, 0x6c, 0x45, 0x3e, 0x17, 0xc8, 0xe1, 0x9a, 0xb3, 0x93, 0xba, 0xc1, 0xe8, 0x37, 0x1e, 0x65, 0x4c, 0xc6, 0xef, 0x94, 0xbd, 0x62, 0x4b, 0x30, 0x19, 0x70, 0x59, 0x22, 0xb, 0xd4, 0xfd, 0x86, 0xaf, 0x25, 0xc, 0x77, 0x5e, 0x81, 0xa8, 0xd3, 0xfa, 0xda, 0xf3, 0x88, 0xa1, 0x7e, 0x57, 0x2c, 0x5, 0x8f, 0xa6, 0xdd, 0xf4, 0x2b, 0x2, 0x79, 0x50, 0xab, 0x82, 0xf9, 0xd0, 0xf, 0x26, 0x5d, 0x74, 0xfe, 0xd7, 0xac, 0x85, 0x5a, 0x73, 0x8, 0x21, 0x1, 0x28, 0x53, 0x7a, 0xa5, 0x8c, 0xf7, 0xde, 0x54, 0x7d, 0x6, 0x2f, 0xf0, 0xd9, 0xa2, 0x8b, 0xe2, 0xcb, 0xb0, 0x99, 0x46, 0x6f, 0x14, 0x3d, 0xb7, 0x9e, 0xe5, 0xcc, 0x13, 0x3a, 0x41, 0x68, 0x48, 0x61, 0x1a, 0x33, 0xec, 0xc5, 0xbe, 0x97, 0x1d, 0x34, 0x4f, 0x66, 0xb9, 0x90, 0xeb, 0xc2}, - {0x0, 0x2a, 0x54, 0x7e, 0xa8, 0x82, 0xfc, 0xd6, 0x4d, 0x67, 0x19, 0x33, 0xe5, 0xcf, 0xb1, 0x9b, 0x9a, 0xb0, 0xce, 0xe4, 0x32, 0x18, 0x66, 0x4c, 0xd7, 0xfd, 0x83, 0xa9, 0x7f, 0x55, 0x2b, 0x1, 0x29, 0x3, 0x7d, 0x57, 0x81, 0xab, 0xd5, 0xff, 0x64, 0x4e, 0x30, 0x1a, 0xcc, 0xe6, 0x98, 0xb2, 0xb3, 0x99, 0xe7, 0xcd, 0x1b, 0x31, 0x4f, 0x65, 0xfe, 0xd4, 0xaa, 0x80, 0x56, 0x7c, 0x2, 0x28, 0x52, 0x78, 0x6, 0x2c, 0xfa, 0xd0, 0xae, 0x84, 0x1f, 0x35, 0x4b, 0x61, 0xb7, 0x9d, 0xe3, 0xc9, 0xc8, 0xe2, 0x9c, 0xb6, 0x60, 0x4a, 0x34, 0x1e, 0x85, 0xaf, 0xd1, 0xfb, 0x2d, 0x7, 0x79, 0x53, 0x7b, 0x51, 0x2f, 0x5, 0xd3, 0xf9, 0x87, 0xad, 0x36, 0x1c, 0x62, 0x48, 0x9e, 0xb4, 0xca, 0xe0, 0xe1, 0xcb, 0xb5, 0x9f, 0x49, 0x63, 0x1d, 0x37, 0xac, 0x86, 0xf8, 0xd2, 0x4, 0x2e, 0x50, 0x7a, 0xa4, 0x8e, 0xf0, 0xda, 0xc, 0x26, 0x58, 0x72, 0xe9, 0xc3, 0xbd, 0x97, 0x41, 0x6b, 0x15, 0x3f, 0x3e, 0x14, 0x6a, 0x40, 0x96, 0xbc, 0xc2, 0xe8, 0x73, 0x59, 0x27, 0xd, 0xdb, 0xf1, 0x8f, 0xa5, 0x8d, 0xa7, 0xd9, 0xf3, 0x25, 0xf, 0x71, 0x5b, 0xc0, 0xea, 0x94, 0xbe, 0x68, 0x42, 0x3c, 0x16, 0x17, 0x3d, 0x43, 0x69, 0xbf, 0x95, 0xeb, 0xc1, 0x5a, 0x70, 0xe, 0x24, 0xf2, 0xd8, 0xa6, 0x8c, 0xf6, 0xdc, 0xa2, 0x88, 0x5e, 0x74, 0xa, 0x20, 0xbb, 0x91, 0xef, 0xc5, 0x13, 0x39, 0x47, 0x6d, 0x6c, 0x46, 0x38, 0x12, 0xc4, 0xee, 0x90, 0xba, 0x21, 0xb, 0x75, 0x5f, 0x89, 0xa3, 0xdd, 0xf7, 0xdf, 0xf5, 0x8b, 0xa1, 0x77, 0x5d, 0x23, 0x9, 0x92, 0xb8, 0xc6, 0xec, 0x3a, 0x10, 0x6e, 0x44, 0x45, 0x6f, 0x11, 0x3b, 0xed, 0xc7, 0xb9, 0x93, 0x8, 0x22, 0x5c, 0x76, 0xa0, 0x8a, 0xf4, 0xde}, - {0x0, 0x2b, 0x56, 0x7d, 0xac, 0x87, 0xfa, 0xd1, 0x45, 0x6e, 0x13, 0x38, 0xe9, 0xc2, 0xbf, 0x94, 0x8a, 0xa1, 0xdc, 0xf7, 0x26, 0xd, 0x70, 0x5b, 0xcf, 0xe4, 0x99, 0xb2, 0x63, 0x48, 0x35, 0x1e, 0x9, 0x22, 0x5f, 0x74, 0xa5, 0x8e, 0xf3, 0xd8, 0x4c, 0x67, 0x1a, 0x31, 0xe0, 0xcb, 0xb6, 0x9d, 0x83, 0xa8, 0xd5, 0xfe, 0x2f, 0x4, 0x79, 0x52, 0xc6, 0xed, 0x90, 0xbb, 0x6a, 0x41, 0x3c, 0x17, 0x12, 0x39, 0x44, 0x6f, 0xbe, 0x95, 0xe8, 0xc3, 0x57, 0x7c, 0x1, 0x2a, 0xfb, 0xd0, 0xad, 0x86, 0x98, 0xb3, 0xce, 0xe5, 0x34, 0x1f, 0x62, 0x49, 0xdd, 0xf6, 0x8b, 0xa0, 0x71, 0x5a, 0x27, 0xc, 0x1b, 0x30, 0x4d, 0x66, 0xb7, 0x9c, 0xe1, 0xca, 0x5e, 0x75, 0x8, 0x23, 0xf2, 0xd9, 0xa4, 0x8f, 0x91, 0xba, 0xc7, 0xec, 0x3d, 0x16, 0x6b, 0x40, 0xd4, 0xff, 0x82, 0xa9, 0x78, 0x53, 0x2e, 0x5, 0x24, 0xf, 0x72, 0x59, 0x88, 0xa3, 0xde, 0xf5, 0x61, 0x4a, 0x37, 0x1c, 0xcd, 0xe6, 0x9b, 0xb0, 0xae, 0x85, 0xf8, 0xd3, 0x2, 0x29, 0x54, 0x7f, 0xeb, 0xc0, 0xbd, 0x96, 0x47, 0x6c, 0x11, 0x3a, 0x2d, 0x6, 0x7b, 0x50, 0x81, 0xaa, 0xd7, 0xfc, 0x68, 0x43, 0x3e, 0x15, 0xc4, 0xef, 0x92, 0xb9, 0xa7, 0x8c, 0xf1, 0xda, 0xb, 0x20, 0x5d, 0x76, 0xe2, 0xc9, 0xb4, 0x9f, 0x4e, 0x65, 0x18, 0x33, 0x36, 0x1d, 0x60, 0x4b, 0x9a, 0xb1, 0xcc, 0xe7, 0x73, 0x58, 0x25, 0xe, 0xdf, 0xf4, 0x89, 0xa2, 0xbc, 0x97, 0xea, 0xc1, 0x10, 0x3b, 0x46, 0x6d, 0xf9, 0xd2, 0xaf, 0x84, 0x55, 0x7e, 0x3, 0x28, 0x3f, 0x14, 0x69, 0x42, 0x93, 0xb8, 0xc5, 0xee, 0x7a, 0x51, 0x2c, 0x7, 0xd6, 0xfd, 0x80, 0xab, 0xb5, 0x9e, 0xe3, 0xc8, 0x19, 0x32, 0x4f, 0x64, 0xf0, 0xdb, 0xa6, 0x8d, 0x5c, 0x77, 0xa, 0x21}, - {0x0, 0x2c, 0x58, 0x74, 0xb0, 0x9c, 0xe8, 0xc4, 0x7d, 0x51, 0x25, 0x9, 0xcd, 0xe1, 0x95, 0xb9, 0xfa, 0xd6, 0xa2, 0x8e, 0x4a, 0x66, 0x12, 0x3e, 0x87, 0xab, 0xdf, 0xf3, 0x37, 0x1b, 0x6f, 0x43, 0xe9, 0xc5, 0xb1, 0x9d, 0x59, 0x75, 0x1, 0x2d, 0x94, 0xb8, 0xcc, 0xe0, 0x24, 0x8, 0x7c, 0x50, 0x13, 0x3f, 0x4b, 0x67, 0xa3, 0x8f, 0xfb, 0xd7, 0x6e, 0x42, 0x36, 0x1a, 0xde, 0xf2, 0x86, 0xaa, 0xcf, 0xe3, 0x97, 0xbb, 0x7f, 0x53, 0x27, 0xb, 0xb2, 0x9e, 0xea, 0xc6, 0x2, 0x2e, 0x5a, 0x76, 0x35, 0x19, 0x6d, 0x41, 0x85, 0xa9, 0xdd, 0xf1, 0x48, 0x64, 0x10, 0x3c, 0xf8, 0xd4, 0xa0, 0x8c, 0x26, 0xa, 0x7e, 0x52, 0x96, 0xba, 0xce, 0xe2, 0x5b, 0x77, 0x3, 0x2f, 0xeb, 0xc7, 0xb3, 0x9f, 0xdc, 0xf0, 0x84, 0xa8, 0x6c, 0x40, 0x34, 0x18, 0xa1, 0x8d, 0xf9, 0xd5, 0x11, 0x3d, 0x49, 0x65, 0x83, 0xaf, 0xdb, 0xf7, 0x33, 0x1f, 0x6b, 0x47, 0xfe, 0xd2, 0xa6, 0x8a, 0x4e, 0x62, 0x16, 0x3a, 0x79, 0x55, 0x21, 0xd, 0xc9, 0xe5, 0x91, 0xbd, 0x4, 0x28, 0x5c, 0x70, 0xb4, 0x98, 0xec, 0xc0, 0x6a, 0x46, 0x32, 0x1e, 0xda, 0xf6, 0x82, 0xae, 0x17, 0x3b, 0x4f, 0x63, 0xa7, 0x8b, 0xff, 0xd3, 0x90, 0xbc, 0xc8, 0xe4, 0x20, 0xc, 0x78, 0x54, 0xed, 0xc1, 0xb5, 0x99, 0x5d, 0x71, 0x5, 0x29, 0x4c, 0x60, 0x14, 0x38, 0xfc, 0xd0, 0xa4, 0x88, 0x31, 0x1d, 0x69, 0x45, 0x81, 0xad, 0xd9, 0xf5, 0xb6, 0x9a, 0xee, 0xc2, 0x6, 0x2a, 0x5e, 0x72, 0xcb, 0xe7, 0x93, 0xbf, 0x7b, 0x57, 0x23, 0xf, 0xa5, 0x89, 0xfd, 0xd1, 0x15, 0x39, 0x4d, 0x61, 0xd8, 0xf4, 0x80, 0xac, 0x68, 0x44, 0x30, 0x1c, 0x5f, 0x73, 0x7, 0x2b, 0xef, 0xc3, 0xb7, 0x9b, 0x22, 0xe, 0x7a, 0x56, 0x92, 0xbe, 0xca, 0xe6}, - {0x0, 0x2d, 0x5a, 0x77, 0xb4, 0x99, 0xee, 0xc3, 0x75, 0x58, 0x2f, 0x2, 0xc1, 0xec, 0x9b, 0xb6, 0xea, 0xc7, 0xb0, 0x9d, 0x5e, 0x73, 0x4, 0x29, 0x9f, 0xb2, 0xc5, 0xe8, 0x2b, 0x6, 0x71, 0x5c, 0xc9, 0xe4, 0x93, 0xbe, 0x7d, 0x50, 0x27, 0xa, 0xbc, 0x91, 0xe6, 0xcb, 0x8, 0x25, 0x52, 0x7f, 0x23, 0xe, 0x79, 0x54, 0x97, 0xba, 0xcd, 0xe0, 0x56, 0x7b, 0xc, 0x21, 0xe2, 0xcf, 0xb8, 0x95, 0x8f, 0xa2, 0xd5, 0xf8, 0x3b, 0x16, 0x61, 0x4c, 0xfa, 0xd7, 0xa0, 0x8d, 0x4e, 0x63, 0x14, 0x39, 0x65, 0x48, 0x3f, 0x12, 0xd1, 0xfc, 0x8b, 0xa6, 0x10, 0x3d, 0x4a, 0x67, 0xa4, 0x89, 0xfe, 0xd3, 0x46, 0x6b, 0x1c, 0x31, 0xf2, 0xdf, 0xa8, 0x85, 0x33, 0x1e, 0x69, 0x44, 0x87, 0xaa, 0xdd, 0xf0, 0xac, 0x81, 0xf6, 0xdb, 0x18, 0x35, 0x42, 0x6f, 0xd9, 0xf4, 0x83, 0xae, 0x6d, 0x40, 0x37, 0x1a, 0x3, 0x2e, 0x59, 0x74, 0xb7, 0x9a, 0xed, 0xc0, 0x76, 0x5b, 0x2c, 0x1, 0xc2, 0xef, 0x98, 0xb5, 0xe9, 0xc4, 0xb3, 0x9e, 0x5d, 0x70, 0x7, 0x2a, 0x9c, 0xb1, 0xc6, 0xeb, 0x28, 0x5, 0x72, 0x5f, 0xca, 0xe7, 0x90, 0xbd, 0x7e, 0x53, 0x24, 0x9, 0xbf, 0x92, 0xe5, 0xc8, 0xb, 0x26, 0x51, 0x7c, 0x20, 0xd, 0x7a, 0x57, 0x94, 0xb9, 0xce, 0xe3, 0x55, 0x78, 0xf, 0x22, 0xe1, 0xcc, 0xbb, 0x96, 0x8c, 0xa1, 0xd6, 0xfb, 0x38, 0x15, 0x62, 0x4f, 0xf9, 0xd4, 0xa3, 0x8e, 0x4d, 0x60, 0x17, 0x3a, 0x66, 0x4b, 0x3c, 0x11, 0xd2, 0xff, 0x88, 0xa5, 0x13, 0x3e, 0x49, 0x64, 0xa7, 0x8a, 0xfd, 0xd0, 0x45, 0x68, 0x1f, 0x32, 0xf1, 0xdc, 0xab, 0x86, 0x30, 0x1d, 0x6a, 0x47, 0x84, 0xa9, 0xde, 0xf3, 0xaf, 0x82, 0xf5, 0xd8, 0x1b, 0x36, 0x41, 0x6c, 0xda, 0xf7, 0x80, 0xad, 0x6e, 0x43, 0x34, 0x19}, - {0x0, 0x2e, 0x5c, 0x72, 0xb8, 0x96, 0xe4, 0xca, 0x6d, 0x43, 0x31, 0x1f, 0xd5, 0xfb, 0x89, 0xa7, 0xda, 0xf4, 0x86, 0xa8, 0x62, 0x4c, 0x3e, 0x10, 0xb7, 0x99, 0xeb, 0xc5, 0xf, 0x21, 0x53, 0x7d, 0xa9, 0x87, 0xf5, 0xdb, 0x11, 0x3f, 0x4d, 0x63, 0xc4, 0xea, 0x98, 0xb6, 0x7c, 0x52, 0x20, 0xe, 0x73, 0x5d, 0x2f, 0x1, 0xcb, 0xe5, 0x97, 0xb9, 0x1e, 0x30, 0x42, 0x6c, 0xa6, 0x88, 0xfa, 0xd4, 0x4f, 0x61, 0x13, 0x3d, 0xf7, 0xd9, 0xab, 0x85, 0x22, 0xc, 0x7e, 0x50, 0x9a, 0xb4, 0xc6, 0xe8, 0x95, 0xbb, 0xc9, 0xe7, 0x2d, 0x3, 0x71, 0x5f, 0xf8, 0xd6, 0xa4, 0x8a, 0x40, 0x6e, 0x1c, 0x32, 0xe6, 0xc8, 0xba, 0x94, 0x5e, 0x70, 0x2, 0x2c, 0x8b, 0xa5, 0xd7, 0xf9, 0x33, 0x1d, 0x6f, 0x41, 0x3c, 0x12, 0x60, 0x4e, 0x84, 0xaa, 0xd8, 0xf6, 0x51, 0x7f, 0xd, 0x23, 0xe9, 0xc7, 0xb5, 0x9b, 0x9e, 0xb0, 0xc2, 0xec, 0x26, 0x8, 0x7a, 0x54, 0xf3, 0xdd, 0xaf, 0x81, 0x4b, 0x65, 0x17, 0x39, 0x44, 0x6a, 0x18, 0x36, 0xfc, 0xd2, 0xa0, 0x8e, 0x29, 0x7, 0x75, 0x5b, 0x91, 0xbf, 0xcd, 0xe3, 0x37, 0x19, 0x6b, 0x45, 0x8f, 0xa1, 0xd3, 0xfd, 0x5a, 0x74, 0x6, 0x28, 0xe2, 0xcc, 0xbe, 0x90, 0xed, 0xc3, 0xb1, 0x9f, 0x55, 0x7b, 0x9, 0x27, 0x80, 0xae, 0xdc, 0xf2, 0x38, 0x16, 0x64, 0x4a, 0xd1, 0xff, 0x8d, 0xa3, 0x69, 0x47, 0x35, 0x1b, 0xbc, 0x92, 0xe0, 0xce, 0x4, 0x2a, 0x58, 0x76, 0xb, 0x25, 0x57, 0x79, 0xb3, 0x9d, 0xef, 0xc1, 0x66, 0x48, 0x3a, 0x14, 0xde, 0xf0, 0x82, 0xac, 0x78, 0x56, 0x24, 0xa, 0xc0, 0xee, 0x9c, 0xb2, 0x15, 0x3b, 0x49, 0x67, 0xad, 0x83, 0xf1, 0xdf, 0xa2, 0x8c, 0xfe, 0xd0, 0x1a, 0x34, 0x46, 0x68, 0xcf, 0xe1, 0x93, 0xbd, 0x77, 0x59, 0x2b, 0x5}, - {0x0, 0x2f, 0x5e, 0x71, 0xbc, 0x93, 0xe2, 0xcd, 0x65, 0x4a, 0x3b, 0x14, 0xd9, 0xf6, 0x87, 0xa8, 0xca, 0xe5, 0x94, 0xbb, 0x76, 0x59, 0x28, 0x7, 0xaf, 0x80, 0xf1, 0xde, 0x13, 0x3c, 0x4d, 0x62, 0x89, 0xa6, 0xd7, 0xf8, 0x35, 0x1a, 0x6b, 0x44, 0xec, 0xc3, 0xb2, 0x9d, 0x50, 0x7f, 0xe, 0x21, 0x43, 0x6c, 0x1d, 0x32, 0xff, 0xd0, 0xa1, 0x8e, 0x26, 0x9, 0x78, 0x57, 0x9a, 0xb5, 0xc4, 0xeb, 0xf, 0x20, 0x51, 0x7e, 0xb3, 0x9c, 0xed, 0xc2, 0x6a, 0x45, 0x34, 0x1b, 0xd6, 0xf9, 0x88, 0xa7, 0xc5, 0xea, 0x9b, 0xb4, 0x79, 0x56, 0x27, 0x8, 0xa0, 0x8f, 0xfe, 0xd1, 0x1c, 0x33, 0x42, 0x6d, 0x86, 0xa9, 0xd8, 0xf7, 0x3a, 0x15, 0x64, 0x4b, 0xe3, 0xcc, 0xbd, 0x92, 0x5f, 0x70, 0x1, 0x2e, 0x4c, 0x63, 0x12, 0x3d, 0xf0, 0xdf, 0xae, 0x81, 0x29, 0x6, 0x77, 0x58, 0x95, 0xba, 0xcb, 0xe4, 0x1e, 0x31, 0x40, 0x6f, 0xa2, 0x8d, 0xfc, 0xd3, 0x7b, 0x54, 0x25, 0xa, 0xc7, 0xe8, 0x99, 0xb6, 0xd4, 0xfb, 0x8a, 0xa5, 0x68, 0x47, 0x36, 0x19, 0xb1, 0x9e, 0xef, 0xc0, 0xd, 0x22, 0x53, 0x7c, 0x97, 0xb8, 0xc9, 0xe6, 0x2b, 0x4, 0x75, 0x5a, 0xf2, 0xdd, 0xac, 0x83, 0x4e, 0x61, 0x10, 0x3f, 0x5d, 0x72, 0x3, 0x2c, 0xe1, 0xce, 0xbf, 0x90, 0x38, 0x17, 0x66, 0x49, 0x84, 0xab, 0xda, 0xf5, 0x11, 0x3e, 0x4f, 0x60, 0xad, 0x82, 0xf3, 0xdc, 0x74, 0x5b, 0x2a, 0x5, 0xc8, 0xe7, 0x96, 0xb9, 0xdb, 0xf4, 0x85, 0xaa, 0x67, 0x48, 0x39, 0x16, 0xbe, 0x91, 0xe0, 0xcf, 0x2, 0x2d, 0x5c, 0x73, 0x98, 0xb7, 0xc6, 0xe9, 0x24, 0xb, 0x7a, 0x55, 0xfd, 0xd2, 0xa3, 0x8c, 0x41, 0x6e, 0x1f, 0x30, 0x52, 0x7d, 0xc, 0x23, 0xee, 0xc1, 0xb0, 0x9f, 0x37, 0x18, 0x69, 0x46, 0x8b, 0xa4, 0xd5, 0xfa}, - {0x0, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, 0x9d, 0xad, 0xfd, 0xcd, 0x5d, 0x6d, 0x3d, 0xd, 0x27, 0x17, 0x47, 0x77, 0xe7, 0xd7, 0x87, 0xb7, 0xba, 0x8a, 0xda, 0xea, 0x7a, 0x4a, 0x1a, 0x2a, 0x4e, 0x7e, 0x2e, 0x1e, 0x8e, 0xbe, 0xee, 0xde, 0xd3, 0xe3, 0xb3, 0x83, 0x13, 0x23, 0x73, 0x43, 0x69, 0x59, 0x9, 0x39, 0xa9, 0x99, 0xc9, 0xf9, 0xf4, 0xc4, 0x94, 0xa4, 0x34, 0x4, 0x54, 0x64, 0x9c, 0xac, 0xfc, 0xcc, 0x5c, 0x6c, 0x3c, 0xc, 0x1, 0x31, 0x61, 0x51, 0xc1, 0xf1, 0xa1, 0x91, 0xbb, 0x8b, 0xdb, 0xeb, 0x7b, 0x4b, 0x1b, 0x2b, 0x26, 0x16, 0x46, 0x76, 0xe6, 0xd6, 0x86, 0xb6, 0xd2, 0xe2, 0xb2, 0x82, 0x12, 0x22, 0x72, 0x42, 0x4f, 0x7f, 0x2f, 0x1f, 0x8f, 0xbf, 0xef, 0xdf, 0xf5, 0xc5, 0x95, 0xa5, 0x35, 0x5, 0x55, 0x65, 0x68, 0x58, 0x8, 0x38, 0xa8, 0x98, 0xc8, 0xf8, 0x25, 0x15, 0x45, 0x75, 0xe5, 0xd5, 0x85, 0xb5, 0xb8, 0x88, 0xd8, 0xe8, 0x78, 0x48, 0x18, 0x28, 0x2, 0x32, 0x62, 0x52, 0xc2, 0xf2, 0xa2, 0x92, 0x9f, 0xaf, 0xff, 0xcf, 0x5f, 0x6f, 0x3f, 0xf, 0x6b, 0x5b, 0xb, 0x3b, 0xab, 0x9b, 0xcb, 0xfb, 0xf6, 0xc6, 0x96, 0xa6, 0x36, 0x6, 0x56, 0x66, 0x4c, 0x7c, 0x2c, 0x1c, 0x8c, 0xbc, 0xec, 0xdc, 0xd1, 0xe1, 0xb1, 0x81, 0x11, 0x21, 0x71, 0x41, 0xb9, 0x89, 0xd9, 0xe9, 0x79, 0x49, 0x19, 0x29, 0x24, 0x14, 0x44, 0x74, 0xe4, 0xd4, 0x84, 0xb4, 0x9e, 0xae, 0xfe, 0xce, 0x5e, 0x6e, 0x3e, 0xe, 0x3, 0x33, 0x63, 0x53, 0xc3, 0xf3, 0xa3, 0x93, 0xf7, 0xc7, 0x97, 0xa7, 0x37, 0x7, 0x57, 0x67, 0x6a, 0x5a, 0xa, 0x3a, 0xaa, 0x9a, 0xca, 0xfa, 0xd0, 0xe0, 0xb0, 0x80, 0x10, 0x20, 0x70, 0x40, 0x4d, 0x7d, 0x2d, 0x1d, 0x8d, 0xbd, 0xed, 0xdd}, - {0x0, 0x31, 0x62, 0x53, 0xc4, 0xf5, 0xa6, 0x97, 0x95, 0xa4, 0xf7, 0xc6, 0x51, 0x60, 0x33, 0x2, 0x37, 0x6, 0x55, 0x64, 0xf3, 0xc2, 0x91, 0xa0, 0xa2, 0x93, 0xc0, 0xf1, 0x66, 0x57, 0x4, 0x35, 0x6e, 0x5f, 0xc, 0x3d, 0xaa, 0x9b, 0xc8, 0xf9, 0xfb, 0xca, 0x99, 0xa8, 0x3f, 0xe, 0x5d, 0x6c, 0x59, 0x68, 0x3b, 0xa, 0x9d, 0xac, 0xff, 0xce, 0xcc, 0xfd, 0xae, 0x9f, 0x8, 0x39, 0x6a, 0x5b, 0xdc, 0xed, 0xbe, 0x8f, 0x18, 0x29, 0x7a, 0x4b, 0x49, 0x78, 0x2b, 0x1a, 0x8d, 0xbc, 0xef, 0xde, 0xeb, 0xda, 0x89, 0xb8, 0x2f, 0x1e, 0x4d, 0x7c, 0x7e, 0x4f, 0x1c, 0x2d, 0xba, 0x8b, 0xd8, 0xe9, 0xb2, 0x83, 0xd0, 0xe1, 0x76, 0x47, 0x14, 0x25, 0x27, 0x16, 0x45, 0x74, 0xe3, 0xd2, 0x81, 0xb0, 0x85, 0xb4, 0xe7, 0xd6, 0x41, 0x70, 0x23, 0x12, 0x10, 0x21, 0x72, 0x43, 0xd4, 0xe5, 0xb6, 0x87, 0xa5, 0x94, 0xc7, 0xf6, 0x61, 0x50, 0x3, 0x32, 0x30, 0x1, 0x52, 0x63, 0xf4, 0xc5, 0x96, 0xa7, 0x92, 0xa3, 0xf0, 0xc1, 0x56, 0x67, 0x34, 0x5, 0x7, 0x36, 0x65, 0x54, 0xc3, 0xf2, 0xa1, 0x90, 0xcb, 0xfa, 0xa9, 0x98, 0xf, 0x3e, 0x6d, 0x5c, 0x5e, 0x6f, 0x3c, 0xd, 0x9a, 0xab, 0xf8, 0xc9, 0xfc, 0xcd, 0x9e, 0xaf, 0x38, 0x9, 0x5a, 0x6b, 0x69, 0x58, 0xb, 0x3a, 0xad, 0x9c, 0xcf, 0xfe, 0x79, 0x48, 0x1b, 0x2a, 0xbd, 0x8c, 0xdf, 0xee, 0xec, 0xdd, 0x8e, 0xbf, 0x28, 0x19, 0x4a, 0x7b, 0x4e, 0x7f, 0x2c, 0x1d, 0x8a, 0xbb, 0xe8, 0xd9, 0xdb, 0xea, 0xb9, 0x88, 0x1f, 0x2e, 0x7d, 0x4c, 0x17, 0x26, 0x75, 0x44, 0xd3, 0xe2, 0xb1, 0x80, 0x82, 0xb3, 0xe0, 0xd1, 0x46, 0x77, 0x24, 0x15, 0x20, 0x11, 0x42, 0x73, 0xe4, 0xd5, 0x86, 0xb7, 0xb5, 0x84, 0xd7, 0xe6, 0x71, 0x40, 0x13, 0x22}, - {0x0, 0x32, 0x64, 0x56, 0xc8, 0xfa, 0xac, 0x9e, 0x8d, 0xbf, 0xe9, 0xdb, 0x45, 0x77, 0x21, 0x13, 0x7, 0x35, 0x63, 0x51, 0xcf, 0xfd, 0xab, 0x99, 0x8a, 0xb8, 0xee, 0xdc, 0x42, 0x70, 0x26, 0x14, 0xe, 0x3c, 0x6a, 0x58, 0xc6, 0xf4, 0xa2, 0x90, 0x83, 0xb1, 0xe7, 0xd5, 0x4b, 0x79, 0x2f, 0x1d, 0x9, 0x3b, 0x6d, 0x5f, 0xc1, 0xf3, 0xa5, 0x97, 0x84, 0xb6, 0xe0, 0xd2, 0x4c, 0x7e, 0x28, 0x1a, 0x1c, 0x2e, 0x78, 0x4a, 0xd4, 0xe6, 0xb0, 0x82, 0x91, 0xa3, 0xf5, 0xc7, 0x59, 0x6b, 0x3d, 0xf, 0x1b, 0x29, 0x7f, 0x4d, 0xd3, 0xe1, 0xb7, 0x85, 0x96, 0xa4, 0xf2, 0xc0, 0x5e, 0x6c, 0x3a, 0x8, 0x12, 0x20, 0x76, 0x44, 0xda, 0xe8, 0xbe, 0x8c, 0x9f, 0xad, 0xfb, 0xc9, 0x57, 0x65, 0x33, 0x1, 0x15, 0x27, 0x71, 0x43, 0xdd, 0xef, 0xb9, 0x8b, 0x98, 0xaa, 0xfc, 0xce, 0x50, 0x62, 0x34, 0x6, 0x38, 0xa, 0x5c, 0x6e, 0xf0, 0xc2, 0x94, 0xa6, 0xb5, 0x87, 0xd1, 0xe3, 0x7d, 0x4f, 0x19, 0x2b, 0x3f, 0xd, 0x5b, 0x69, 0xf7, 0xc5, 0x93, 0xa1, 0xb2, 0x80, 0xd6, 0xe4, 0x7a, 0x48, 0x1e, 0x2c, 0x36, 0x4, 0x52, 0x60, 0xfe, 0xcc, 0x9a, 0xa8, 0xbb, 0x89, 0xdf, 0xed, 0x73, 0x41, 0x17, 0x25, 0x31, 0x3, 0x55, 0x67, 0xf9, 0xcb, 0x9d, 0xaf, 0xbc, 0x8e, 0xd8, 0xea, 0x74, 0x46, 0x10, 0x22, 0x24, 0x16, 0x40, 0x72, 0xec, 0xde, 0x88, 0xba, 0xa9, 0x9b, 0xcd, 0xff, 0x61, 0x53, 0x5, 0x37, 0x23, 0x11, 0x47, 0x75, 0xeb, 0xd9, 0x8f, 0xbd, 0xae, 0x9c, 0xca, 0xf8, 0x66, 0x54, 0x2, 0x30, 0x2a, 0x18, 0x4e, 0x7c, 0xe2, 0xd0, 0x86, 0xb4, 0xa7, 0x95, 0xc3, 0xf1, 0x6f, 0x5d, 0xb, 0x39, 0x2d, 0x1f, 0x49, 0x7b, 0xe5, 0xd7, 0x81, 0xb3, 0xa0, 0x92, 0xc4, 0xf6, 0x68, 0x5a, 0xc, 0x3e}, - {0x0, 0x33, 0x66, 0x55, 0xcc, 0xff, 0xaa, 0x99, 0x85, 0xb6, 0xe3, 0xd0, 0x49, 0x7a, 0x2f, 0x1c, 0x17, 0x24, 0x71, 0x42, 0xdb, 0xe8, 0xbd, 0x8e, 0x92, 0xa1, 0xf4, 0xc7, 0x5e, 0x6d, 0x38, 0xb, 0x2e, 0x1d, 0x48, 0x7b, 0xe2, 0xd1, 0x84, 0xb7, 0xab, 0x98, 0xcd, 0xfe, 0x67, 0x54, 0x1, 0x32, 0x39, 0xa, 0x5f, 0x6c, 0xf5, 0xc6, 0x93, 0xa0, 0xbc, 0x8f, 0xda, 0xe9, 0x70, 0x43, 0x16, 0x25, 0x5c, 0x6f, 0x3a, 0x9, 0x90, 0xa3, 0xf6, 0xc5, 0xd9, 0xea, 0xbf, 0x8c, 0x15, 0x26, 0x73, 0x40, 0x4b, 0x78, 0x2d, 0x1e, 0x87, 0xb4, 0xe1, 0xd2, 0xce, 0xfd, 0xa8, 0x9b, 0x2, 0x31, 0x64, 0x57, 0x72, 0x41, 0x14, 0x27, 0xbe, 0x8d, 0xd8, 0xeb, 0xf7, 0xc4, 0x91, 0xa2, 0x3b, 0x8, 0x5d, 0x6e, 0x65, 0x56, 0x3, 0x30, 0xa9, 0x9a, 0xcf, 0xfc, 0xe0, 0xd3, 0x86, 0xb5, 0x2c, 0x1f, 0x4a, 0x79, 0xb8, 0x8b, 0xde, 0xed, 0x74, 0x47, 0x12, 0x21, 0x3d, 0xe, 0x5b, 0x68, 0xf1, 0xc2, 0x97, 0xa4, 0xaf, 0x9c, 0xc9, 0xfa, 0x63, 0x50, 0x5, 0x36, 0x2a, 0x19, 0x4c, 0x7f, 0xe6, 0xd5, 0x80, 0xb3, 0x96, 0xa5, 0xf0, 0xc3, 0x5a, 0x69, 0x3c, 0xf, 0x13, 0x20, 0x75, 0x46, 0xdf, 0xec, 0xb9, 0x8a, 0x81, 0xb2, 0xe7, 0xd4, 0x4d, 0x7e, 0x2b, 0x18, 0x4, 0x37, 0x62, 0x51, 0xc8, 0xfb, 0xae, 0x9d, 0xe4, 0xd7, 0x82, 0xb1, 0x28, 0x1b, 0x4e, 0x7d, 0x61, 0x52, 0x7, 0x34, 0xad, 0x9e, 0xcb, 0xf8, 0xf3, 0xc0, 0x95, 0xa6, 0x3f, 0xc, 0x59, 0x6a, 0x76, 0x45, 0x10, 0x23, 0xba, 0x89, 0xdc, 0xef, 0xca, 0xf9, 0xac, 0x9f, 0x6, 0x35, 0x60, 0x53, 0x4f, 0x7c, 0x29, 0x1a, 0x83, 0xb0, 0xe5, 0xd6, 0xdd, 0xee, 0xbb, 0x88, 0x11, 0x22, 0x77, 0x44, 0x58, 0x6b, 0x3e, 0xd, 0x94, 0xa7, 0xf2, 0xc1}, - {0x0, 0x34, 0x68, 0x5c, 0xd0, 0xe4, 0xb8, 0x8c, 0xbd, 0x89, 0xd5, 0xe1, 0x6d, 0x59, 0x5, 0x31, 0x67, 0x53, 0xf, 0x3b, 0xb7, 0x83, 0xdf, 0xeb, 0xda, 0xee, 0xb2, 0x86, 0xa, 0x3e, 0x62, 0x56, 0xce, 0xfa, 0xa6, 0x92, 0x1e, 0x2a, 0x76, 0x42, 0x73, 0x47, 0x1b, 0x2f, 0xa3, 0x97, 0xcb, 0xff, 0xa9, 0x9d, 0xc1, 0xf5, 0x79, 0x4d, 0x11, 0x25, 0x14, 0x20, 0x7c, 0x48, 0xc4, 0xf0, 0xac, 0x98, 0x81, 0xb5, 0xe9, 0xdd, 0x51, 0x65, 0x39, 0xd, 0x3c, 0x8, 0x54, 0x60, 0xec, 0xd8, 0x84, 0xb0, 0xe6, 0xd2, 0x8e, 0xba, 0x36, 0x2, 0x5e, 0x6a, 0x5b, 0x6f, 0x33, 0x7, 0x8b, 0xbf, 0xe3, 0xd7, 0x4f, 0x7b, 0x27, 0x13, 0x9f, 0xab, 0xf7, 0xc3, 0xf2, 0xc6, 0x9a, 0xae, 0x22, 0x16, 0x4a, 0x7e, 0x28, 0x1c, 0x40, 0x74, 0xf8, 0xcc, 0x90, 0xa4, 0x95, 0xa1, 0xfd, 0xc9, 0x45, 0x71, 0x2d, 0x19, 0x1f, 0x2b, 0x77, 0x43, 0xcf, 0xfb, 0xa7, 0x93, 0xa2, 0x96, 0xca, 0xfe, 0x72, 0x46, 0x1a, 0x2e, 0x78, 0x4c, 0x10, 0x24, 0xa8, 0x9c, 0xc0, 0xf4, 0xc5, 0xf1, 0xad, 0x99, 0x15, 0x21, 0x7d, 0x49, 0xd1, 0xe5, 0xb9, 0x8d, 0x1, 0x35, 0x69, 0x5d, 0x6c, 0x58, 0x4, 0x30, 0xbc, 0x88, 0xd4, 0xe0, 0xb6, 0x82, 0xde, 0xea, 0x66, 0x52, 0xe, 0x3a, 0xb, 0x3f, 0x63, 0x57, 0xdb, 0xef, 0xb3, 0x87, 0x9e, 0xaa, 0xf6, 0xc2, 0x4e, 0x7a, 0x26, 0x12, 0x23, 0x17, 0x4b, 0x7f, 0xf3, 0xc7, 0x9b, 0xaf, 0xf9, 0xcd, 0x91, 0xa5, 0x29, 0x1d, 0x41, 0x75, 0x44, 0x70, 0x2c, 0x18, 0x94, 0xa0, 0xfc, 0xc8, 0x50, 0x64, 0x38, 0xc, 0x80, 0xb4, 0xe8, 0xdc, 0xed, 0xd9, 0x85, 0xb1, 0x3d, 0x9, 0x55, 0x61, 0x37, 0x3, 0x5f, 0x6b, 0xe7, 0xd3, 0x8f, 0xbb, 0x8a, 0xbe, 0xe2, 0xd6, 0x5a, 0x6e, 0x32, 0x6}, - {0x0, 0x35, 0x6a, 0x5f, 0xd4, 0xe1, 0xbe, 0x8b, 0xb5, 0x80, 0xdf, 0xea, 0x61, 0x54, 0xb, 0x3e, 0x77, 0x42, 0x1d, 0x28, 0xa3, 0x96, 0xc9, 0xfc, 0xc2, 0xf7, 0xa8, 0x9d, 0x16, 0x23, 0x7c, 0x49, 0xee, 0xdb, 0x84, 0xb1, 0x3a, 0xf, 0x50, 0x65, 0x5b, 0x6e, 0x31, 0x4, 0x8f, 0xba, 0xe5, 0xd0, 0x99, 0xac, 0xf3, 0xc6, 0x4d, 0x78, 0x27, 0x12, 0x2c, 0x19, 0x46, 0x73, 0xf8, 0xcd, 0x92, 0xa7, 0xc1, 0xf4, 0xab, 0x9e, 0x15, 0x20, 0x7f, 0x4a, 0x74, 0x41, 0x1e, 0x2b, 0xa0, 0x95, 0xca, 0xff, 0xb6, 0x83, 0xdc, 0xe9, 0x62, 0x57, 0x8, 0x3d, 0x3, 0x36, 0x69, 0x5c, 0xd7, 0xe2, 0xbd, 0x88, 0x2f, 0x1a, 0x45, 0x70, 0xfb, 0xce, 0x91, 0xa4, 0x9a, 0xaf, 0xf0, 0xc5, 0x4e, 0x7b, 0x24, 0x11, 0x58, 0x6d, 0x32, 0x7, 0x8c, 0xb9, 0xe6, 0xd3, 0xed, 0xd8, 0x87, 0xb2, 0x39, 0xc, 0x53, 0x66, 0x9f, 0xaa, 0xf5, 0xc0, 0x4b, 0x7e, 0x21, 0x14, 0x2a, 0x1f, 0x40, 0x75, 0xfe, 0xcb, 0x94, 0xa1, 0xe8, 0xdd, 0x82, 0xb7, 0x3c, 0x9, 0x56, 0x63, 0x5d, 0x68, 0x37, 0x2, 0x89, 0xbc, 0xe3, 0xd6, 0x71, 0x44, 0x1b, 0x2e, 0xa5, 0x90, 0xcf, 0xfa, 0xc4, 0xf1, 0xae, 0x9b, 0x10, 0x25, 0x7a, 0x4f, 0x6, 0x33, 0x6c, 0x59, 0xd2, 0xe7, 0xb8, 0x8d, 0xb3, 0x86, 0xd9, 0xec, 0x67, 0x52, 0xd, 0x38, 0x5e, 0x6b, 0x34, 0x1, 0x8a, 0xbf, 0xe0, 0xd5, 0xeb, 0xde, 0x81, 0xb4, 0x3f, 0xa, 0x55, 0x60, 0x29, 0x1c, 0x43, 0x76, 0xfd, 0xc8, 0x97, 0xa2, 0x9c, 0xa9, 0xf6, 0xc3, 0x48, 0x7d, 0x22, 0x17, 0xb0, 0x85, 0xda, 0xef, 0x64, 0x51, 0xe, 0x3b, 0x5, 0x30, 0x6f, 0x5a, 0xd1, 0xe4, 0xbb, 0x8e, 0xc7, 0xf2, 0xad, 0x98, 0x13, 0x26, 0x79, 0x4c, 0x72, 0x47, 0x18, 0x2d, 0xa6, 0x93, 0xcc, 0xf9}, - {0x0, 0x36, 0x6c, 0x5a, 0xd8, 0xee, 0xb4, 0x82, 0xad, 0x9b, 0xc1, 0xf7, 0x75, 0x43, 0x19, 0x2f, 0x47, 0x71, 0x2b, 0x1d, 0x9f, 0xa9, 0xf3, 0xc5, 0xea, 0xdc, 0x86, 0xb0, 0x32, 0x4, 0x5e, 0x68, 0x8e, 0xb8, 0xe2, 0xd4, 0x56, 0x60, 0x3a, 0xc, 0x23, 0x15, 0x4f, 0x79, 0xfb, 0xcd, 0x97, 0xa1, 0xc9, 0xff, 0xa5, 0x93, 0x11, 0x27, 0x7d, 0x4b, 0x64, 0x52, 0x8, 0x3e, 0xbc, 0x8a, 0xd0, 0xe6, 0x1, 0x37, 0x6d, 0x5b, 0xd9, 0xef, 0xb5, 0x83, 0xac, 0x9a, 0xc0, 0xf6, 0x74, 0x42, 0x18, 0x2e, 0x46, 0x70, 0x2a, 0x1c, 0x9e, 0xa8, 0xf2, 0xc4, 0xeb, 0xdd, 0x87, 0xb1, 0x33, 0x5, 0x5f, 0x69, 0x8f, 0xb9, 0xe3, 0xd5, 0x57, 0x61, 0x3b, 0xd, 0x22, 0x14, 0x4e, 0x78, 0xfa, 0xcc, 0x96, 0xa0, 0xc8, 0xfe, 0xa4, 0x92, 0x10, 0x26, 0x7c, 0x4a, 0x65, 0x53, 0x9, 0x3f, 0xbd, 0x8b, 0xd1, 0xe7, 0x2, 0x34, 0x6e, 0x58, 0xda, 0xec, 0xb6, 0x80, 0xaf, 0x99, 0xc3, 0xf5, 0x77, 0x41, 0x1b, 0x2d, 0x45, 0x73, 0x29, 0x1f, 0x9d, 0xab, 0xf1, 0xc7, 0xe8, 0xde, 0x84, 0xb2, 0x30, 0x6, 0x5c, 0x6a, 0x8c, 0xba, 0xe0, 0xd6, 0x54, 0x62, 0x38, 0xe, 0x21, 0x17, 0x4d, 0x7b, 0xf9, 0xcf, 0x95, 0xa3, 0xcb, 0xfd, 0xa7, 0x91, 0x13, 0x25, 0x7f, 0x49, 0x66, 0x50, 0xa, 0x3c, 0xbe, 0x88, 0xd2, 0xe4, 0x3, 0x35, 0x6f, 0x59, 0xdb, 0xed, 0xb7, 0x81, 0xae, 0x98, 0xc2, 0xf4, 0x76, 0x40, 0x1a, 0x2c, 0x44, 0x72, 0x28, 0x1e, 0x9c, 0xaa, 0xf0, 0xc6, 0xe9, 0xdf, 0x85, 0xb3, 0x31, 0x7, 0x5d, 0x6b, 0x8d, 0xbb, 0xe1, 0xd7, 0x55, 0x63, 0x39, 0xf, 0x20, 0x16, 0x4c, 0x7a, 0xf8, 0xce, 0x94, 0xa2, 0xca, 0xfc, 0xa6, 0x90, 0x12, 0x24, 0x7e, 0x48, 0x67, 0x51, 0xb, 0x3d, 0xbf, 0x89, 0xd3, 0xe5}, - {0x0, 0x37, 0x6e, 0x59, 0xdc, 0xeb, 0xb2, 0x85, 0xa5, 0x92, 0xcb, 0xfc, 0x79, 0x4e, 0x17, 0x20, 0x57, 0x60, 0x39, 0xe, 0x8b, 0xbc, 0xe5, 0xd2, 0xf2, 0xc5, 0x9c, 0xab, 0x2e, 0x19, 0x40, 0x77, 0xae, 0x99, 0xc0, 0xf7, 0x72, 0x45, 0x1c, 0x2b, 0xb, 0x3c, 0x65, 0x52, 0xd7, 0xe0, 0xb9, 0x8e, 0xf9, 0xce, 0x97, 0xa0, 0x25, 0x12, 0x4b, 0x7c, 0x5c, 0x6b, 0x32, 0x5, 0x80, 0xb7, 0xee, 0xd9, 0x41, 0x76, 0x2f, 0x18, 0x9d, 0xaa, 0xf3, 0xc4, 0xe4, 0xd3, 0x8a, 0xbd, 0x38, 0xf, 0x56, 0x61, 0x16, 0x21, 0x78, 0x4f, 0xca, 0xfd, 0xa4, 0x93, 0xb3, 0x84, 0xdd, 0xea, 0x6f, 0x58, 0x1, 0x36, 0xef, 0xd8, 0x81, 0xb6, 0x33, 0x4, 0x5d, 0x6a, 0x4a, 0x7d, 0x24, 0x13, 0x96, 0xa1, 0xf8, 0xcf, 0xb8, 0x8f, 0xd6, 0xe1, 0x64, 0x53, 0xa, 0x3d, 0x1d, 0x2a, 0x73, 0x44, 0xc1, 0xf6, 0xaf, 0x98, 0x82, 0xb5, 0xec, 0xdb, 0x5e, 0x69, 0x30, 0x7, 0x27, 0x10, 0x49, 0x7e, 0xfb, 0xcc, 0x95, 0xa2, 0xd5, 0xe2, 0xbb, 0x8c, 0x9, 0x3e, 0x67, 0x50, 0x70, 0x47, 0x1e, 0x29, 0xac, 0x9b, 0xc2, 0xf5, 0x2c, 0x1b, 0x42, 0x75, 0xf0, 0xc7, 0x9e, 0xa9, 0x89, 0xbe, 0xe7, 0xd0, 0x55, 0x62, 0x3b, 0xc, 0x7b, 0x4c, 0x15, 0x22, 0xa7, 0x90, 0xc9, 0xfe, 0xde, 0xe9, 0xb0, 0x87, 0x2, 0x35, 0x6c, 0x5b, 0xc3, 0xf4, 0xad, 0x9a, 0x1f, 0x28, 0x71, 0x46, 0x66, 0x51, 0x8, 0x3f, 0xba, 0x8d, 0xd4, 0xe3, 0x94, 0xa3, 0xfa, 0xcd, 0x48, 0x7f, 0x26, 0x11, 0x31, 0x6, 0x5f, 0x68, 0xed, 0xda, 0x83, 0xb4, 0x6d, 0x5a, 0x3, 0x34, 0xb1, 0x86, 0xdf, 0xe8, 0xc8, 0xff, 0xa6, 0x91, 0x14, 0x23, 0x7a, 0x4d, 0x3a, 0xd, 0x54, 0x63, 0xe6, 0xd1, 0x88, 0xbf, 0x9f, 0xa8, 0xf1, 0xc6, 0x43, 0x74, 0x2d, 0x1a}, - {0x0, 0x38, 0x70, 0x48, 0xe0, 0xd8, 0x90, 0xa8, 0xdd, 0xe5, 0xad, 0x95, 0x3d, 0x5, 0x4d, 0x75, 0xa7, 0x9f, 0xd7, 0xef, 0x47, 0x7f, 0x37, 0xf, 0x7a, 0x42, 0xa, 0x32, 0x9a, 0xa2, 0xea, 0xd2, 0x53, 0x6b, 0x23, 0x1b, 0xb3, 0x8b, 0xc3, 0xfb, 0x8e, 0xb6, 0xfe, 0xc6, 0x6e, 0x56, 0x1e, 0x26, 0xf4, 0xcc, 0x84, 0xbc, 0x14, 0x2c, 0x64, 0x5c, 0x29, 0x11, 0x59, 0x61, 0xc9, 0xf1, 0xb9, 0x81, 0xa6, 0x9e, 0xd6, 0xee, 0x46, 0x7e, 0x36, 0xe, 0x7b, 0x43, 0xb, 0x33, 0x9b, 0xa3, 0xeb, 0xd3, 0x1, 0x39, 0x71, 0x49, 0xe1, 0xd9, 0x91, 0xa9, 0xdc, 0xe4, 0xac, 0x94, 0x3c, 0x4, 0x4c, 0x74, 0xf5, 0xcd, 0x85, 0xbd, 0x15, 0x2d, 0x65, 0x5d, 0x28, 0x10, 0x58, 0x60, 0xc8, 0xf0, 0xb8, 0x80, 0x52, 0x6a, 0x22, 0x1a, 0xb2, 0x8a, 0xc2, 0xfa, 0x8f, 0xb7, 0xff, 0xc7, 0x6f, 0x57, 0x1f, 0x27, 0x51, 0x69, 0x21, 0x19, 0xb1, 0x89, 0xc1, 0xf9, 0x8c, 0xb4, 0xfc, 0xc4, 0x6c, 0x54, 0x1c, 0x24, 0xf6, 0xce, 0x86, 0xbe, 0x16, 0x2e, 0x66, 0x5e, 0x2b, 0x13, 0x5b, 0x63, 0xcb, 0xf3, 0xbb, 0x83, 0x2, 0x3a, 0x72, 0x4a, 0xe2, 0xda, 0x92, 0xaa, 0xdf, 0xe7, 0xaf, 0x97, 0x3f, 0x7, 0x4f, 0x77, 0xa5, 0x9d, 0xd5, 0xed, 0x45, 0x7d, 0x35, 0xd, 0x78, 0x40, 0x8, 0x30, 0x98, 0xa0, 0xe8, 0xd0, 0xf7, 0xcf, 0x87, 0xbf, 0x17, 0x2f, 0x67, 0x5f, 0x2a, 0x12, 0x5a, 0x62, 0xca, 0xf2, 0xba, 0x82, 0x50, 0x68, 0x20, 0x18, 0xb0, 0x88, 0xc0, 0xf8, 0x8d, 0xb5, 0xfd, 0xc5, 0x6d, 0x55, 0x1d, 0x25, 0xa4, 0x9c, 0xd4, 0xec, 0x44, 0x7c, 0x34, 0xc, 0x79, 0x41, 0x9, 0x31, 0x99, 0xa1, 0xe9, 0xd1, 0x3, 0x3b, 0x73, 0x4b, 0xe3, 0xdb, 0x93, 0xab, 0xde, 0xe6, 0xae, 0x96, 0x3e, 0x6, 0x4e, 0x76}, - {0x0, 0x39, 0x72, 0x4b, 0xe4, 0xdd, 0x96, 0xaf, 0xd5, 0xec, 0xa7, 0x9e, 0x31, 0x8, 0x43, 0x7a, 0xb7, 0x8e, 0xc5, 0xfc, 0x53, 0x6a, 0x21, 0x18, 0x62, 0x5b, 0x10, 0x29, 0x86, 0xbf, 0xf4, 0xcd, 0x73, 0x4a, 0x1, 0x38, 0x97, 0xae, 0xe5, 0xdc, 0xa6, 0x9f, 0xd4, 0xed, 0x42, 0x7b, 0x30, 0x9, 0xc4, 0xfd, 0xb6, 0x8f, 0x20, 0x19, 0x52, 0x6b, 0x11, 0x28, 0x63, 0x5a, 0xf5, 0xcc, 0x87, 0xbe, 0xe6, 0xdf, 0x94, 0xad, 0x2, 0x3b, 0x70, 0x49, 0x33, 0xa, 0x41, 0x78, 0xd7, 0xee, 0xa5, 0x9c, 0x51, 0x68, 0x23, 0x1a, 0xb5, 0x8c, 0xc7, 0xfe, 0x84, 0xbd, 0xf6, 0xcf, 0x60, 0x59, 0x12, 0x2b, 0x95, 0xac, 0xe7, 0xde, 0x71, 0x48, 0x3, 0x3a, 0x40, 0x79, 0x32, 0xb, 0xa4, 0x9d, 0xd6, 0xef, 0x22, 0x1b, 0x50, 0x69, 0xc6, 0xff, 0xb4, 0x8d, 0xf7, 0xce, 0x85, 0xbc, 0x13, 0x2a, 0x61, 0x58, 0xd1, 0xe8, 0xa3, 0x9a, 0x35, 0xc, 0x47, 0x7e, 0x4, 0x3d, 0x76, 0x4f, 0xe0, 0xd9, 0x92, 0xab, 0x66, 0x5f, 0x14, 0x2d, 0x82, 0xbb, 0xf0, 0xc9, 0xb3, 0x8a, 0xc1, 0xf8, 0x57, 0x6e, 0x25, 0x1c, 0xa2, 0x9b, 0xd0, 0xe9, 0x46, 0x7f, 0x34, 0xd, 0x77, 0x4e, 0x5, 0x3c, 0x93, 0xaa, 0xe1, 0xd8, 0x15, 0x2c, 0x67, 0x5e, 0xf1, 0xc8, 0x83, 0xba, 0xc0, 0xf9, 0xb2, 0x8b, 0x24, 0x1d, 0x56, 0x6f, 0x37, 0xe, 0x45, 0x7c, 0xd3, 0xea, 0xa1, 0x98, 0xe2, 0xdb, 0x90, 0xa9, 0x6, 0x3f, 0x74, 0x4d, 0x80, 0xb9, 0xf2, 0xcb, 0x64, 0x5d, 0x16, 0x2f, 0x55, 0x6c, 0x27, 0x1e, 0xb1, 0x88, 0xc3, 0xfa, 0x44, 0x7d, 0x36, 0xf, 0xa0, 0x99, 0xd2, 0xeb, 0x91, 0xa8, 0xe3, 0xda, 0x75, 0x4c, 0x7, 0x3e, 0xf3, 0xca, 0x81, 0xb8, 0x17, 0x2e, 0x65, 0x5c, 0x26, 0x1f, 0x54, 0x6d, 0xc2, 0xfb, 0xb0, 0x89}, - {0x0, 0x3a, 0x74, 0x4e, 0xe8, 0xd2, 0x9c, 0xa6, 0xcd, 0xf7, 0xb9, 0x83, 0x25, 0x1f, 0x51, 0x6b, 0x87, 0xbd, 0xf3, 0xc9, 0x6f, 0x55, 0x1b, 0x21, 0x4a, 0x70, 0x3e, 0x4, 0xa2, 0x98, 0xd6, 0xec, 0x13, 0x29, 0x67, 0x5d, 0xfb, 0xc1, 0x8f, 0xb5, 0xde, 0xe4, 0xaa, 0x90, 0x36, 0xc, 0x42, 0x78, 0x94, 0xae, 0xe0, 0xda, 0x7c, 0x46, 0x8, 0x32, 0x59, 0x63, 0x2d, 0x17, 0xb1, 0x8b, 0xc5, 0xff, 0x26, 0x1c, 0x52, 0x68, 0xce, 0xf4, 0xba, 0x80, 0xeb, 0xd1, 0x9f, 0xa5, 0x3, 0x39, 0x77, 0x4d, 0xa1, 0x9b, 0xd5, 0xef, 0x49, 0x73, 0x3d, 0x7, 0x6c, 0x56, 0x18, 0x22, 0x84, 0xbe, 0xf0, 0xca, 0x35, 0xf, 0x41, 0x7b, 0xdd, 0xe7, 0xa9, 0x93, 0xf8, 0xc2, 0x8c, 0xb6, 0x10, 0x2a, 0x64, 0x5e, 0xb2, 0x88, 0xc6, 0xfc, 0x5a, 0x60, 0x2e, 0x14, 0x7f, 0x45, 0xb, 0x31, 0x97, 0xad, 0xe3, 0xd9, 0x4c, 0x76, 0x38, 0x2, 0xa4, 0x9e, 0xd0, 0xea, 0x81, 0xbb, 0xf5, 0xcf, 0x69, 0x53, 0x1d, 0x27, 0xcb, 0xf1, 0xbf, 0x85, 0x23, 0x19, 0x57, 0x6d, 0x6, 0x3c, 0x72, 0x48, 0xee, 0xd4, 0x9a, 0xa0, 0x5f, 0x65, 0x2b, 0x11, 0xb7, 0x8d, 0xc3, 0xf9, 0x92, 0xa8, 0xe6, 0xdc, 0x7a, 0x40, 0xe, 0x34, 0xd8, 0xe2, 0xac, 0x96, 0x30, 0xa, 0x44, 0x7e, 0x15, 0x2f, 0x61, 0x5b, 0xfd, 0xc7, 0x89, 0xb3, 0x6a, 0x50, 0x1e, 0x24, 0x82, 0xb8, 0xf6, 0xcc, 0xa7, 0x9d, 0xd3, 0xe9, 0x4f, 0x75, 0x3b, 0x1, 0xed, 0xd7, 0x99, 0xa3, 0x5, 0x3f, 0x71, 0x4b, 0x20, 0x1a, 0x54, 0x6e, 0xc8, 0xf2, 0xbc, 0x86, 0x79, 0x43, 0xd, 0x37, 0x91, 0xab, 0xe5, 0xdf, 0xb4, 0x8e, 0xc0, 0xfa, 0x5c, 0x66, 0x28, 0x12, 0xfe, 0xc4, 0x8a, 0xb0, 0x16, 0x2c, 0x62, 0x58, 0x33, 0x9, 0x47, 0x7d, 0xdb, 0xe1, 0xaf, 0x95}, - {0x0, 0x3b, 0x76, 0x4d, 0xec, 0xd7, 0x9a, 0xa1, 0xc5, 0xfe, 0xb3, 0x88, 0x29, 0x12, 0x5f, 0x64, 0x97, 0xac, 0xe1, 0xda, 0x7b, 0x40, 0xd, 0x36, 0x52, 0x69, 0x24, 0x1f, 0xbe, 0x85, 0xc8, 0xf3, 0x33, 0x8, 0x45, 0x7e, 0xdf, 0xe4, 0xa9, 0x92, 0xf6, 0xcd, 0x80, 0xbb, 0x1a, 0x21, 0x6c, 0x57, 0xa4, 0x9f, 0xd2, 0xe9, 0x48, 0x73, 0x3e, 0x5, 0x61, 0x5a, 0x17, 0x2c, 0x8d, 0xb6, 0xfb, 0xc0, 0x66, 0x5d, 0x10, 0x2b, 0x8a, 0xb1, 0xfc, 0xc7, 0xa3, 0x98, 0xd5, 0xee, 0x4f, 0x74, 0x39, 0x2, 0xf1, 0xca, 0x87, 0xbc, 0x1d, 0x26, 0x6b, 0x50, 0x34, 0xf, 0x42, 0x79, 0xd8, 0xe3, 0xae, 0x95, 0x55, 0x6e, 0x23, 0x18, 0xb9, 0x82, 0xcf, 0xf4, 0x90, 0xab, 0xe6, 0xdd, 0x7c, 0x47, 0xa, 0x31, 0xc2, 0xf9, 0xb4, 0x8f, 0x2e, 0x15, 0x58, 0x63, 0x7, 0x3c, 0x71, 0x4a, 0xeb, 0xd0, 0x9d, 0xa6, 0xcc, 0xf7, 0xba, 0x81, 0x20, 0x1b, 0x56, 0x6d, 0x9, 0x32, 0x7f, 0x44, 0xe5, 0xde, 0x93, 0xa8, 0x5b, 0x60, 0x2d, 0x16, 0xb7, 0x8c, 0xc1, 0xfa, 0x9e, 0xa5, 0xe8, 0xd3, 0x72, 0x49, 0x4, 0x3f, 0xff, 0xc4, 0x89, 0xb2, 0x13, 0x28, 0x65, 0x5e, 0x3a, 0x1, 0x4c, 0x77, 0xd6, 0xed, 0xa0, 0x9b, 0x68, 0x53, 0x1e, 0x25, 0x84, 0xbf, 0xf2, 0xc9, 0xad, 0x96, 0xdb, 0xe0, 0x41, 0x7a, 0x37, 0xc, 0xaa, 0x91, 0xdc, 0xe7, 0x46, 0x7d, 0x30, 0xb, 0x6f, 0x54, 0x19, 0x22, 0x83, 0xb8, 0xf5, 0xce, 0x3d, 0x6, 0x4b, 0x70, 0xd1, 0xea, 0xa7, 0x9c, 0xf8, 0xc3, 0x8e, 0xb5, 0x14, 0x2f, 0x62, 0x59, 0x99, 0xa2, 0xef, 0xd4, 0x75, 0x4e, 0x3, 0x38, 0x5c, 0x67, 0x2a, 0x11, 0xb0, 0x8b, 0xc6, 0xfd, 0xe, 0x35, 0x78, 0x43, 0xe2, 0xd9, 0x94, 0xaf, 0xcb, 0xf0, 0xbd, 0x86, 0x27, 0x1c, 0x51, 0x6a}, - {0x0, 0x3c, 0x78, 0x44, 0xf0, 0xcc, 0x88, 0xb4, 0xfd, 0xc1, 0x85, 0xb9, 0xd, 0x31, 0x75, 0x49, 0xe7, 0xdb, 0x9f, 0xa3, 0x17, 0x2b, 0x6f, 0x53, 0x1a, 0x26, 0x62, 0x5e, 0xea, 0xd6, 0x92, 0xae, 0xd3, 0xef, 0xab, 0x97, 0x23, 0x1f, 0x5b, 0x67, 0x2e, 0x12, 0x56, 0x6a, 0xde, 0xe2, 0xa6, 0x9a, 0x34, 0x8, 0x4c, 0x70, 0xc4, 0xf8, 0xbc, 0x80, 0xc9, 0xf5, 0xb1, 0x8d, 0x39, 0x5, 0x41, 0x7d, 0xbb, 0x87, 0xc3, 0xff, 0x4b, 0x77, 0x33, 0xf, 0x46, 0x7a, 0x3e, 0x2, 0xb6, 0x8a, 0xce, 0xf2, 0x5c, 0x60, 0x24, 0x18, 0xac, 0x90, 0xd4, 0xe8, 0xa1, 0x9d, 0xd9, 0xe5, 0x51, 0x6d, 0x29, 0x15, 0x68, 0x54, 0x10, 0x2c, 0x98, 0xa4, 0xe0, 0xdc, 0x95, 0xa9, 0xed, 0xd1, 0x65, 0x59, 0x1d, 0x21, 0x8f, 0xb3, 0xf7, 0xcb, 0x7f, 0x43, 0x7, 0x3b, 0x72, 0x4e, 0xa, 0x36, 0x82, 0xbe, 0xfa, 0xc6, 0x6b, 0x57, 0x13, 0x2f, 0x9b, 0xa7, 0xe3, 0xdf, 0x96, 0xaa, 0xee, 0xd2, 0x66, 0x5a, 0x1e, 0x22, 0x8c, 0xb0, 0xf4, 0xc8, 0x7c, 0x40, 0x4, 0x38, 0x71, 0x4d, 0x9, 0x35, 0x81, 0xbd, 0xf9, 0xc5, 0xb8, 0x84, 0xc0, 0xfc, 0x48, 0x74, 0x30, 0xc, 0x45, 0x79, 0x3d, 0x1, 0xb5, 0x89, 0xcd, 0xf1, 0x5f, 0x63, 0x27, 0x1b, 0xaf, 0x93, 0xd7, 0xeb, 0xa2, 0x9e, 0xda, 0xe6, 0x52, 0x6e, 0x2a, 0x16, 0xd0, 0xec, 0xa8, 0x94, 0x20, 0x1c, 0x58, 0x64, 0x2d, 0x11, 0x55, 0x69, 0xdd, 0xe1, 0xa5, 0x99, 0x37, 0xb, 0x4f, 0x73, 0xc7, 0xfb, 0xbf, 0x83, 0xca, 0xf6, 0xb2, 0x8e, 0x3a, 0x6, 0x42, 0x7e, 0x3, 0x3f, 0x7b, 0x47, 0xf3, 0xcf, 0x8b, 0xb7, 0xfe, 0xc2, 0x86, 0xba, 0xe, 0x32, 0x76, 0x4a, 0xe4, 0xd8, 0x9c, 0xa0, 0x14, 0x28, 0x6c, 0x50, 0x19, 0x25, 0x61, 0x5d, 0xe9, 0xd5, 0x91, 0xad}, - {0x0, 0x3d, 0x7a, 0x47, 0xf4, 0xc9, 0x8e, 0xb3, 0xf5, 0xc8, 0x8f, 0xb2, 0x1, 0x3c, 0x7b, 0x46, 0xf7, 0xca, 0x8d, 0xb0, 0x3, 0x3e, 0x79, 0x44, 0x2, 0x3f, 0x78, 0x45, 0xf6, 0xcb, 0x8c, 0xb1, 0xf3, 0xce, 0x89, 0xb4, 0x7, 0x3a, 0x7d, 0x40, 0x6, 0x3b, 0x7c, 0x41, 0xf2, 0xcf, 0x88, 0xb5, 0x4, 0x39, 0x7e, 0x43, 0xf0, 0xcd, 0x8a, 0xb7, 0xf1, 0xcc, 0x8b, 0xb6, 0x5, 0x38, 0x7f, 0x42, 0xfb, 0xc6, 0x81, 0xbc, 0xf, 0x32, 0x75, 0x48, 0xe, 0x33, 0x74, 0x49, 0xfa, 0xc7, 0x80, 0xbd, 0xc, 0x31, 0x76, 0x4b, 0xf8, 0xc5, 0x82, 0xbf, 0xf9, 0xc4, 0x83, 0xbe, 0xd, 0x30, 0x77, 0x4a, 0x8, 0x35, 0x72, 0x4f, 0xfc, 0xc1, 0x86, 0xbb, 0xfd, 0xc0, 0x87, 0xba, 0x9, 0x34, 0x73, 0x4e, 0xff, 0xc2, 0x85, 0xb8, 0xb, 0x36, 0x71, 0x4c, 0xa, 0x37, 0x70, 0x4d, 0xfe, 0xc3, 0x84, 0xb9, 0xeb, 0xd6, 0x91, 0xac, 0x1f, 0x22, 0x65, 0x58, 0x1e, 0x23, 0x64, 0x59, 0xea, 0xd7, 0x90, 0xad, 0x1c, 0x21, 0x66, 0x5b, 0xe8, 0xd5, 0x92, 0xaf, 0xe9, 0xd4, 0x93, 0xae, 0x1d, 0x20, 0x67, 0x5a, 0x18, 0x25, 0x62, 0x5f, 0xec, 0xd1, 0x96, 0xab, 0xed, 0xd0, 0x97, 0xaa, 0x19, 0x24, 0x63, 0x5e, 0xef, 0xd2, 0x95, 0xa8, 0x1b, 0x26, 0x61, 0x5c, 0x1a, 0x27, 0x60, 0x5d, 0xee, 0xd3, 0x94, 0xa9, 0x10, 0x2d, 0x6a, 0x57, 0xe4, 0xd9, 0x9e, 0xa3, 0xe5, 0xd8, 0x9f, 0xa2, 0x11, 0x2c, 0x6b, 0x56, 0xe7, 0xda, 0x9d, 0xa0, 0x13, 0x2e, 0x69, 0x54, 0x12, 0x2f, 0x68, 0x55, 0xe6, 0xdb, 0x9c, 0xa1, 0xe3, 0xde, 0x99, 0xa4, 0x17, 0x2a, 0x6d, 0x50, 0x16, 0x2b, 0x6c, 0x51, 0xe2, 0xdf, 0x98, 0xa5, 0x14, 0x29, 0x6e, 0x53, 0xe0, 0xdd, 0x9a, 0xa7, 0xe1, 0xdc, 0x9b, 0xa6, 0x15, 0x28, 0x6f, 0x52}, - {0x0, 0x3e, 0x7c, 0x42, 0xf8, 0xc6, 0x84, 0xba, 0xed, 0xd3, 0x91, 0xaf, 0x15, 0x2b, 0x69, 0x57, 0xc7, 0xf9, 0xbb, 0x85, 0x3f, 0x1, 0x43, 0x7d, 0x2a, 0x14, 0x56, 0x68, 0xd2, 0xec, 0xae, 0x90, 0x93, 0xad, 0xef, 0xd1, 0x6b, 0x55, 0x17, 0x29, 0x7e, 0x40, 0x2, 0x3c, 0x86, 0xb8, 0xfa, 0xc4, 0x54, 0x6a, 0x28, 0x16, 0xac, 0x92, 0xd0, 0xee, 0xb9, 0x87, 0xc5, 0xfb, 0x41, 0x7f, 0x3d, 0x3, 0x3b, 0x5, 0x47, 0x79, 0xc3, 0xfd, 0xbf, 0x81, 0xd6, 0xe8, 0xaa, 0x94, 0x2e, 0x10, 0x52, 0x6c, 0xfc, 0xc2, 0x80, 0xbe, 0x4, 0x3a, 0x78, 0x46, 0x11, 0x2f, 0x6d, 0x53, 0xe9, 0xd7, 0x95, 0xab, 0xa8, 0x96, 0xd4, 0xea, 0x50, 0x6e, 0x2c, 0x12, 0x45, 0x7b, 0x39, 0x7, 0xbd, 0x83, 0xc1, 0xff, 0x6f, 0x51, 0x13, 0x2d, 0x97, 0xa9, 0xeb, 0xd5, 0x82, 0xbc, 0xfe, 0xc0, 0x7a, 0x44, 0x6, 0x38, 0x76, 0x48, 0xa, 0x34, 0x8e, 0xb0, 0xf2, 0xcc, 0x9b, 0xa5, 0xe7, 0xd9, 0x63, 0x5d, 0x1f, 0x21, 0xb1, 0x8f, 0xcd, 0xf3, 0x49, 0x77, 0x35, 0xb, 0x5c, 0x62, 0x20, 0x1e, 0xa4, 0x9a, 0xd8, 0xe6, 0xe5, 0xdb, 0x99, 0xa7, 0x1d, 0x23, 0x61, 0x5f, 0x8, 0x36, 0x74, 0x4a, 0xf0, 0xce, 0x8c, 0xb2, 0x22, 0x1c, 0x5e, 0x60, 0xda, 0xe4, 0xa6, 0x98, 0xcf, 0xf1, 0xb3, 0x8d, 0x37, 0x9, 0x4b, 0x75, 0x4d, 0x73, 0x31, 0xf, 0xb5, 0x8b, 0xc9, 0xf7, 0xa0, 0x9e, 0xdc, 0xe2, 0x58, 0x66, 0x24, 0x1a, 0x8a, 0xb4, 0xf6, 0xc8, 0x72, 0x4c, 0xe, 0x30, 0x67, 0x59, 0x1b, 0x25, 0x9f, 0xa1, 0xe3, 0xdd, 0xde, 0xe0, 0xa2, 0x9c, 0x26, 0x18, 0x5a, 0x64, 0x33, 0xd, 0x4f, 0x71, 0xcb, 0xf5, 0xb7, 0x89, 0x19, 0x27, 0x65, 0x5b, 0xe1, 0xdf, 0x9d, 0xa3, 0xf4, 0xca, 0x88, 0xb6, 0xc, 0x32, 0x70, 0x4e}, - {0x0, 0x3f, 0x7e, 0x41, 0xfc, 0xc3, 0x82, 0xbd, 0xe5, 0xda, 0x9b, 0xa4, 0x19, 0x26, 0x67, 0x58, 0xd7, 0xe8, 0xa9, 0x96, 0x2b, 0x14, 0x55, 0x6a, 0x32, 0xd, 0x4c, 0x73, 0xce, 0xf1, 0xb0, 0x8f, 0xb3, 0x8c, 0xcd, 0xf2, 0x4f, 0x70, 0x31, 0xe, 0x56, 0x69, 0x28, 0x17, 0xaa, 0x95, 0xd4, 0xeb, 0x64, 0x5b, 0x1a, 0x25, 0x98, 0xa7, 0xe6, 0xd9, 0x81, 0xbe, 0xff, 0xc0, 0x7d, 0x42, 0x3, 0x3c, 0x7b, 0x44, 0x5, 0x3a, 0x87, 0xb8, 0xf9, 0xc6, 0x9e, 0xa1, 0xe0, 0xdf, 0x62, 0x5d, 0x1c, 0x23, 0xac, 0x93, 0xd2, 0xed, 0x50, 0x6f, 0x2e, 0x11, 0x49, 0x76, 0x37, 0x8, 0xb5, 0x8a, 0xcb, 0xf4, 0xc8, 0xf7, 0xb6, 0x89, 0x34, 0xb, 0x4a, 0x75, 0x2d, 0x12, 0x53, 0x6c, 0xd1, 0xee, 0xaf, 0x90, 0x1f, 0x20, 0x61, 0x5e, 0xe3, 0xdc, 0x9d, 0xa2, 0xfa, 0xc5, 0x84, 0xbb, 0x6, 0x39, 0x78, 0x47, 0xf6, 0xc9, 0x88, 0xb7, 0xa, 0x35, 0x74, 0x4b, 0x13, 0x2c, 0x6d, 0x52, 0xef, 0xd0, 0x91, 0xae, 0x21, 0x1e, 0x5f, 0x60, 0xdd, 0xe2, 0xa3, 0x9c, 0xc4, 0xfb, 0xba, 0x85, 0x38, 0x7, 0x46, 0x79, 0x45, 0x7a, 0x3b, 0x4, 0xb9, 0x86, 0xc7, 0xf8, 0xa0, 0x9f, 0xde, 0xe1, 0x5c, 0x63, 0x22, 0x1d, 0x92, 0xad, 0xec, 0xd3, 0x6e, 0x51, 0x10, 0x2f, 0x77, 0x48, 0x9, 0x36, 0x8b, 0xb4, 0xf5, 0xca, 0x8d, 0xb2, 0xf3, 0xcc, 0x71, 0x4e, 0xf, 0x30, 0x68, 0x57, 0x16, 0x29, 0x94, 0xab, 0xea, 0xd5, 0x5a, 0x65, 0x24, 0x1b, 0xa6, 0x99, 0xd8, 0xe7, 0xbf, 0x80, 0xc1, 0xfe, 0x43, 0x7c, 0x3d, 0x2, 0x3e, 0x1, 0x40, 0x7f, 0xc2, 0xfd, 0xbc, 0x83, 0xdb, 0xe4, 0xa5, 0x9a, 0x27, 0x18, 0x59, 0x66, 0xe9, 0xd6, 0x97, 0xa8, 0x15, 0x2a, 0x6b, 0x54, 0xc, 0x33, 0x72, 0x4d, 0xf0, 0xcf, 0x8e, 0xb1}, - {0x0, 0x40, 0x80, 0xc0, 0x1d, 0x5d, 0x9d, 0xdd, 0x3a, 0x7a, 0xba, 0xfa, 0x27, 0x67, 0xa7, 0xe7, 0x74, 0x34, 0xf4, 0xb4, 0x69, 0x29, 0xe9, 0xa9, 0x4e, 0xe, 0xce, 0x8e, 0x53, 0x13, 0xd3, 0x93, 0xe8, 0xa8, 0x68, 0x28, 0xf5, 0xb5, 0x75, 0x35, 0xd2, 0x92, 0x52, 0x12, 0xcf, 0x8f, 0x4f, 0xf, 0x9c, 0xdc, 0x1c, 0x5c, 0x81, 0xc1, 0x1, 0x41, 0xa6, 0xe6, 0x26, 0x66, 0xbb, 0xfb, 0x3b, 0x7b, 0xcd, 0x8d, 0x4d, 0xd, 0xd0, 0x90, 0x50, 0x10, 0xf7, 0xb7, 0x77, 0x37, 0xea, 0xaa, 0x6a, 0x2a, 0xb9, 0xf9, 0x39, 0x79, 0xa4, 0xe4, 0x24, 0x64, 0x83, 0xc3, 0x3, 0x43, 0x9e, 0xde, 0x1e, 0x5e, 0x25, 0x65, 0xa5, 0xe5, 0x38, 0x78, 0xb8, 0xf8, 0x1f, 0x5f, 0x9f, 0xdf, 0x2, 0x42, 0x82, 0xc2, 0x51, 0x11, 0xd1, 0x91, 0x4c, 0xc, 0xcc, 0x8c, 0x6b, 0x2b, 0xeb, 0xab, 0x76, 0x36, 0xf6, 0xb6, 0x87, 0xc7, 0x7, 0x47, 0x9a, 0xda, 0x1a, 0x5a, 0xbd, 0xfd, 0x3d, 0x7d, 0xa0, 0xe0, 0x20, 0x60, 0xf3, 0xb3, 0x73, 0x33, 0xee, 0xae, 0x6e, 0x2e, 0xc9, 0x89, 0x49, 0x9, 0xd4, 0x94, 0x54, 0x14, 0x6f, 0x2f, 0xef, 0xaf, 0x72, 0x32, 0xf2, 0xb2, 0x55, 0x15, 0xd5, 0x95, 0x48, 0x8, 0xc8, 0x88, 0x1b, 0x5b, 0x9b, 0xdb, 0x6, 0x46, 0x86, 0xc6, 0x21, 0x61, 0xa1, 0xe1, 0x3c, 0x7c, 0xbc, 0xfc, 0x4a, 0xa, 0xca, 0x8a, 0x57, 0x17, 0xd7, 0x97, 0x70, 0x30, 0xf0, 0xb0, 0x6d, 0x2d, 0xed, 0xad, 0x3e, 0x7e, 0xbe, 0xfe, 0x23, 0x63, 0xa3, 0xe3, 0x4, 0x44, 0x84, 0xc4, 0x19, 0x59, 0x99, 0xd9, 0xa2, 0xe2, 0x22, 0x62, 0xbf, 0xff, 0x3f, 0x7f, 0x98, 0xd8, 0x18, 0x58, 0x85, 0xc5, 0x5, 0x45, 0xd6, 0x96, 0x56, 0x16, 0xcb, 0x8b, 0x4b, 0xb, 0xec, 0xac, 0x6c, 0x2c, 0xf1, 0xb1, 0x71, 0x31}, - {0x0, 0x41, 0x82, 0xc3, 0x19, 0x58, 0x9b, 0xda, 0x32, 0x73, 0xb0, 0xf1, 0x2b, 0x6a, 0xa9, 0xe8, 0x64, 0x25, 0xe6, 0xa7, 0x7d, 0x3c, 0xff, 0xbe, 0x56, 0x17, 0xd4, 0x95, 0x4f, 0xe, 0xcd, 0x8c, 0xc8, 0x89, 0x4a, 0xb, 0xd1, 0x90, 0x53, 0x12, 0xfa, 0xbb, 0x78, 0x39, 0xe3, 0xa2, 0x61, 0x20, 0xac, 0xed, 0x2e, 0x6f, 0xb5, 0xf4, 0x37, 0x76, 0x9e, 0xdf, 0x1c, 0x5d, 0x87, 0xc6, 0x5, 0x44, 0x8d, 0xcc, 0xf, 0x4e, 0x94, 0xd5, 0x16, 0x57, 0xbf, 0xfe, 0x3d, 0x7c, 0xa6, 0xe7, 0x24, 0x65, 0xe9, 0xa8, 0x6b, 0x2a, 0xf0, 0xb1, 0x72, 0x33, 0xdb, 0x9a, 0x59, 0x18, 0xc2, 0x83, 0x40, 0x1, 0x45, 0x4, 0xc7, 0x86, 0x5c, 0x1d, 0xde, 0x9f, 0x77, 0x36, 0xf5, 0xb4, 0x6e, 0x2f, 0xec, 0xad, 0x21, 0x60, 0xa3, 0xe2, 0x38, 0x79, 0xba, 0xfb, 0x13, 0x52, 0x91, 0xd0, 0xa, 0x4b, 0x88, 0xc9, 0x7, 0x46, 0x85, 0xc4, 0x1e, 0x5f, 0x9c, 0xdd, 0x35, 0x74, 0xb7, 0xf6, 0x2c, 0x6d, 0xae, 0xef, 0x63, 0x22, 0xe1, 0xa0, 0x7a, 0x3b, 0xf8, 0xb9, 0x51, 0x10, 0xd3, 0x92, 0x48, 0x9, 0xca, 0x8b, 0xcf, 0x8e, 0x4d, 0xc, 0xd6, 0x97, 0x54, 0x15, 0xfd, 0xbc, 0x7f, 0x3e, 0xe4, 0xa5, 0x66, 0x27, 0xab, 0xea, 0x29, 0x68, 0xb2, 0xf3, 0x30, 0x71, 0x99, 0xd8, 0x1b, 0x5a, 0x80, 0xc1, 0x2, 0x43, 0x8a, 0xcb, 0x8, 0x49, 0x93, 0xd2, 0x11, 0x50, 0xb8, 0xf9, 0x3a, 0x7b, 0xa1, 0xe0, 0x23, 0x62, 0xee, 0xaf, 0x6c, 0x2d, 0xf7, 0xb6, 0x75, 0x34, 0xdc, 0x9d, 0x5e, 0x1f, 0xc5, 0x84, 0x47, 0x6, 0x42, 0x3, 0xc0, 0x81, 0x5b, 0x1a, 0xd9, 0x98, 0x70, 0x31, 0xf2, 0xb3, 0x69, 0x28, 0xeb, 0xaa, 0x26, 0x67, 0xa4, 0xe5, 0x3f, 0x7e, 0xbd, 0xfc, 0x14, 0x55, 0x96, 0xd7, 0xd, 0x4c, 0x8f, 0xce}, - {0x0, 0x42, 0x84, 0xc6, 0x15, 0x57, 0x91, 0xd3, 0x2a, 0x68, 0xae, 0xec, 0x3f, 0x7d, 0xbb, 0xf9, 0x54, 0x16, 0xd0, 0x92, 0x41, 0x3, 0xc5, 0x87, 0x7e, 0x3c, 0xfa, 0xb8, 0x6b, 0x29, 0xef, 0xad, 0xa8, 0xea, 0x2c, 0x6e, 0xbd, 0xff, 0x39, 0x7b, 0x82, 0xc0, 0x6, 0x44, 0x97, 0xd5, 0x13, 0x51, 0xfc, 0xbe, 0x78, 0x3a, 0xe9, 0xab, 0x6d, 0x2f, 0xd6, 0x94, 0x52, 0x10, 0xc3, 0x81, 0x47, 0x5, 0x4d, 0xf, 0xc9, 0x8b, 0x58, 0x1a, 0xdc, 0x9e, 0x67, 0x25, 0xe3, 0xa1, 0x72, 0x30, 0xf6, 0xb4, 0x19, 0x5b, 0x9d, 0xdf, 0xc, 0x4e, 0x88, 0xca, 0x33, 0x71, 0xb7, 0xf5, 0x26, 0x64, 0xa2, 0xe0, 0xe5, 0xa7, 0x61, 0x23, 0xf0, 0xb2, 0x74, 0x36, 0xcf, 0x8d, 0x4b, 0x9, 0xda, 0x98, 0x5e, 0x1c, 0xb1, 0xf3, 0x35, 0x77, 0xa4, 0xe6, 0x20, 0x62, 0x9b, 0xd9, 0x1f, 0x5d, 0x8e, 0xcc, 0xa, 0x48, 0x9a, 0xd8, 0x1e, 0x5c, 0x8f, 0xcd, 0xb, 0x49, 0xb0, 0xf2, 0x34, 0x76, 0xa5, 0xe7, 0x21, 0x63, 0xce, 0x8c, 0x4a, 0x8, 0xdb, 0x99, 0x5f, 0x1d, 0xe4, 0xa6, 0x60, 0x22, 0xf1, 0xb3, 0x75, 0x37, 0x32, 0x70, 0xb6, 0xf4, 0x27, 0x65, 0xa3, 0xe1, 0x18, 0x5a, 0x9c, 0xde, 0xd, 0x4f, 0x89, 0xcb, 0x66, 0x24, 0xe2, 0xa0, 0x73, 0x31, 0xf7, 0xb5, 0x4c, 0xe, 0xc8, 0x8a, 0x59, 0x1b, 0xdd, 0x9f, 0xd7, 0x95, 0x53, 0x11, 0xc2, 0x80, 0x46, 0x4, 0xfd, 0xbf, 0x79, 0x3b, 0xe8, 0xaa, 0x6c, 0x2e, 0x83, 0xc1, 0x7, 0x45, 0x96, 0xd4, 0x12, 0x50, 0xa9, 0xeb, 0x2d, 0x6f, 0xbc, 0xfe, 0x38, 0x7a, 0x7f, 0x3d, 0xfb, 0xb9, 0x6a, 0x28, 0xee, 0xac, 0x55, 0x17, 0xd1, 0x93, 0x40, 0x2, 0xc4, 0x86, 0x2b, 0x69, 0xaf, 0xed, 0x3e, 0x7c, 0xba, 0xf8, 0x1, 0x43, 0x85, 0xc7, 0x14, 0x56, 0x90, 0xd2}, - {0x0, 0x43, 0x86, 0xc5, 0x11, 0x52, 0x97, 0xd4, 0x22, 0x61, 0xa4, 0xe7, 0x33, 0x70, 0xb5, 0xf6, 0x44, 0x7, 0xc2, 0x81, 0x55, 0x16, 0xd3, 0x90, 0x66, 0x25, 0xe0, 0xa3, 0x77, 0x34, 0xf1, 0xb2, 0x88, 0xcb, 0xe, 0x4d, 0x99, 0xda, 0x1f, 0x5c, 0xaa, 0xe9, 0x2c, 0x6f, 0xbb, 0xf8, 0x3d, 0x7e, 0xcc, 0x8f, 0x4a, 0x9, 0xdd, 0x9e, 0x5b, 0x18, 0xee, 0xad, 0x68, 0x2b, 0xff, 0xbc, 0x79, 0x3a, 0xd, 0x4e, 0x8b, 0xc8, 0x1c, 0x5f, 0x9a, 0xd9, 0x2f, 0x6c, 0xa9, 0xea, 0x3e, 0x7d, 0xb8, 0xfb, 0x49, 0xa, 0xcf, 0x8c, 0x58, 0x1b, 0xde, 0x9d, 0x6b, 0x28, 0xed, 0xae, 0x7a, 0x39, 0xfc, 0xbf, 0x85, 0xc6, 0x3, 0x40, 0x94, 0xd7, 0x12, 0x51, 0xa7, 0xe4, 0x21, 0x62, 0xb6, 0xf5, 0x30, 0x73, 0xc1, 0x82, 0x47, 0x4, 0xd0, 0x93, 0x56, 0x15, 0xe3, 0xa0, 0x65, 0x26, 0xf2, 0xb1, 0x74, 0x37, 0x1a, 0x59, 0x9c, 0xdf, 0xb, 0x48, 0x8d, 0xce, 0x38, 0x7b, 0xbe, 0xfd, 0x29, 0x6a, 0xaf, 0xec, 0x5e, 0x1d, 0xd8, 0x9b, 0x4f, 0xc, 0xc9, 0x8a, 0x7c, 0x3f, 0xfa, 0xb9, 0x6d, 0x2e, 0xeb, 0xa8, 0x92, 0xd1, 0x14, 0x57, 0x83, 0xc0, 0x5, 0x46, 0xb0, 0xf3, 0x36, 0x75, 0xa1, 0xe2, 0x27, 0x64, 0xd6, 0x95, 0x50, 0x13, 0xc7, 0x84, 0x41, 0x2, 0xf4, 0xb7, 0x72, 0x31, 0xe5, 0xa6, 0x63, 0x20, 0x17, 0x54, 0x91, 0xd2, 0x6, 0x45, 0x80, 0xc3, 0x35, 0x76, 0xb3, 0xf0, 0x24, 0x67, 0xa2, 0xe1, 0x53, 0x10, 0xd5, 0x96, 0x42, 0x1, 0xc4, 0x87, 0x71, 0x32, 0xf7, 0xb4, 0x60, 0x23, 0xe6, 0xa5, 0x9f, 0xdc, 0x19, 0x5a, 0x8e, 0xcd, 0x8, 0x4b, 0xbd, 0xfe, 0x3b, 0x78, 0xac, 0xef, 0x2a, 0x69, 0xdb, 0x98, 0x5d, 0x1e, 0xca, 0x89, 0x4c, 0xf, 0xf9, 0xba, 0x7f, 0x3c, 0xe8, 0xab, 0x6e, 0x2d}, - {0x0, 0x44, 0x88, 0xcc, 0xd, 0x49, 0x85, 0xc1, 0x1a, 0x5e, 0x92, 0xd6, 0x17, 0x53, 0x9f, 0xdb, 0x34, 0x70, 0xbc, 0xf8, 0x39, 0x7d, 0xb1, 0xf5, 0x2e, 0x6a, 0xa6, 0xe2, 0x23, 0x67, 0xab, 0xef, 0x68, 0x2c, 0xe0, 0xa4, 0x65, 0x21, 0xed, 0xa9, 0x72, 0x36, 0xfa, 0xbe, 0x7f, 0x3b, 0xf7, 0xb3, 0x5c, 0x18, 0xd4, 0x90, 0x51, 0x15, 0xd9, 0x9d, 0x46, 0x2, 0xce, 0x8a, 0x4b, 0xf, 0xc3, 0x87, 0xd0, 0x94, 0x58, 0x1c, 0xdd, 0x99, 0x55, 0x11, 0xca, 0x8e, 0x42, 0x6, 0xc7, 0x83, 0x4f, 0xb, 0xe4, 0xa0, 0x6c, 0x28, 0xe9, 0xad, 0x61, 0x25, 0xfe, 0xba, 0x76, 0x32, 0xf3, 0xb7, 0x7b, 0x3f, 0xb8, 0xfc, 0x30, 0x74, 0xb5, 0xf1, 0x3d, 0x79, 0xa2, 0xe6, 0x2a, 0x6e, 0xaf, 0xeb, 0x27, 0x63, 0x8c, 0xc8, 0x4, 0x40, 0x81, 0xc5, 0x9, 0x4d, 0x96, 0xd2, 0x1e, 0x5a, 0x9b, 0xdf, 0x13, 0x57, 0xbd, 0xf9, 0x35, 0x71, 0xb0, 0xf4, 0x38, 0x7c, 0xa7, 0xe3, 0x2f, 0x6b, 0xaa, 0xee, 0x22, 0x66, 0x89, 0xcd, 0x1, 0x45, 0x84, 0xc0, 0xc, 0x48, 0x93, 0xd7, 0x1b, 0x5f, 0x9e, 0xda, 0x16, 0x52, 0xd5, 0x91, 0x5d, 0x19, 0xd8, 0x9c, 0x50, 0x14, 0xcf, 0x8b, 0x47, 0x3, 0xc2, 0x86, 0x4a, 0xe, 0xe1, 0xa5, 0x69, 0x2d, 0xec, 0xa8, 0x64, 0x20, 0xfb, 0xbf, 0x73, 0x37, 0xf6, 0xb2, 0x7e, 0x3a, 0x6d, 0x29, 0xe5, 0xa1, 0x60, 0x24, 0xe8, 0xac, 0x77, 0x33, 0xff, 0xbb, 0x7a, 0x3e, 0xf2, 0xb6, 0x59, 0x1d, 0xd1, 0x95, 0x54, 0x10, 0xdc, 0x98, 0x43, 0x7, 0xcb, 0x8f, 0x4e, 0xa, 0xc6, 0x82, 0x5, 0x41, 0x8d, 0xc9, 0x8, 0x4c, 0x80, 0xc4, 0x1f, 0x5b, 0x97, 0xd3, 0x12, 0x56, 0x9a, 0xde, 0x31, 0x75, 0xb9, 0xfd, 0x3c, 0x78, 0xb4, 0xf0, 0x2b, 0x6f, 0xa3, 0xe7, 0x26, 0x62, 0xae, 0xea}, - {0x0, 0x45, 0x8a, 0xcf, 0x9, 0x4c, 0x83, 0xc6, 0x12, 0x57, 0x98, 0xdd, 0x1b, 0x5e, 0x91, 0xd4, 0x24, 0x61, 0xae, 0xeb, 0x2d, 0x68, 0xa7, 0xe2, 0x36, 0x73, 0xbc, 0xf9, 0x3f, 0x7a, 0xb5, 0xf0, 0x48, 0xd, 0xc2, 0x87, 0x41, 0x4, 0xcb, 0x8e, 0x5a, 0x1f, 0xd0, 0x95, 0x53, 0x16, 0xd9, 0x9c, 0x6c, 0x29, 0xe6, 0xa3, 0x65, 0x20, 0xef, 0xaa, 0x7e, 0x3b, 0xf4, 0xb1, 0x77, 0x32, 0xfd, 0xb8, 0x90, 0xd5, 0x1a, 0x5f, 0x99, 0xdc, 0x13, 0x56, 0x82, 0xc7, 0x8, 0x4d, 0x8b, 0xce, 0x1, 0x44, 0xb4, 0xf1, 0x3e, 0x7b, 0xbd, 0xf8, 0x37, 0x72, 0xa6, 0xe3, 0x2c, 0x69, 0xaf, 0xea, 0x25, 0x60, 0xd8, 0x9d, 0x52, 0x17, 0xd1, 0x94, 0x5b, 0x1e, 0xca, 0x8f, 0x40, 0x5, 0xc3, 0x86, 0x49, 0xc, 0xfc, 0xb9, 0x76, 0x33, 0xf5, 0xb0, 0x7f, 0x3a, 0xee, 0xab, 0x64, 0x21, 0xe7, 0xa2, 0x6d, 0x28, 0x3d, 0x78, 0xb7, 0xf2, 0x34, 0x71, 0xbe, 0xfb, 0x2f, 0x6a, 0xa5, 0xe0, 0x26, 0x63, 0xac, 0xe9, 0x19, 0x5c, 0x93, 0xd6, 0x10, 0x55, 0x9a, 0xdf, 0xb, 0x4e, 0x81, 0xc4, 0x2, 0x47, 0x88, 0xcd, 0x75, 0x30, 0xff, 0xba, 0x7c, 0x39, 0xf6, 0xb3, 0x67, 0x22, 0xed, 0xa8, 0x6e, 0x2b, 0xe4, 0xa1, 0x51, 0x14, 0xdb, 0x9e, 0x58, 0x1d, 0xd2, 0x97, 0x43, 0x6, 0xc9, 0x8c, 0x4a, 0xf, 0xc0, 0x85, 0xad, 0xe8, 0x27, 0x62, 0xa4, 0xe1, 0x2e, 0x6b, 0xbf, 0xfa, 0x35, 0x70, 0xb6, 0xf3, 0x3c, 0x79, 0x89, 0xcc, 0x3, 0x46, 0x80, 0xc5, 0xa, 0x4f, 0x9b, 0xde, 0x11, 0x54, 0x92, 0xd7, 0x18, 0x5d, 0xe5, 0xa0, 0x6f, 0x2a, 0xec, 0xa9, 0x66, 0x23, 0xf7, 0xb2, 0x7d, 0x38, 0xfe, 0xbb, 0x74, 0x31, 0xc1, 0x84, 0x4b, 0xe, 0xc8, 0x8d, 0x42, 0x7, 0xd3, 0x96, 0x59, 0x1c, 0xda, 0x9f, 0x50, 0x15}, - {0x0, 0x46, 0x8c, 0xca, 0x5, 0x43, 0x89, 0xcf, 0xa, 0x4c, 0x86, 0xc0, 0xf, 0x49, 0x83, 0xc5, 0x14, 0x52, 0x98, 0xde, 0x11, 0x57, 0x9d, 0xdb, 0x1e, 0x58, 0x92, 0xd4, 0x1b, 0x5d, 0x97, 0xd1, 0x28, 0x6e, 0xa4, 0xe2, 0x2d, 0x6b, 0xa1, 0xe7, 0x22, 0x64, 0xae, 0xe8, 0x27, 0x61, 0xab, 0xed, 0x3c, 0x7a, 0xb0, 0xf6, 0x39, 0x7f, 0xb5, 0xf3, 0x36, 0x70, 0xba, 0xfc, 0x33, 0x75, 0xbf, 0xf9, 0x50, 0x16, 0xdc, 0x9a, 0x55, 0x13, 0xd9, 0x9f, 0x5a, 0x1c, 0xd6, 0x90, 0x5f, 0x19, 0xd3, 0x95, 0x44, 0x2, 0xc8, 0x8e, 0x41, 0x7, 0xcd, 0x8b, 0x4e, 0x8, 0xc2, 0x84, 0x4b, 0xd, 0xc7, 0x81, 0x78, 0x3e, 0xf4, 0xb2, 0x7d, 0x3b, 0xf1, 0xb7, 0x72, 0x34, 0xfe, 0xb8, 0x77, 0x31, 0xfb, 0xbd, 0x6c, 0x2a, 0xe0, 0xa6, 0x69, 0x2f, 0xe5, 0xa3, 0x66, 0x20, 0xea, 0xac, 0x63, 0x25, 0xef, 0xa9, 0xa0, 0xe6, 0x2c, 0x6a, 0xa5, 0xe3, 0x29, 0x6f, 0xaa, 0xec, 0x26, 0x60, 0xaf, 0xe9, 0x23, 0x65, 0xb4, 0xf2, 0x38, 0x7e, 0xb1, 0xf7, 0x3d, 0x7b, 0xbe, 0xf8, 0x32, 0x74, 0xbb, 0xfd, 0x37, 0x71, 0x88, 0xce, 0x4, 0x42, 0x8d, 0xcb, 0x1, 0x47, 0x82, 0xc4, 0xe, 0x48, 0x87, 0xc1, 0xb, 0x4d, 0x9c, 0xda, 0x10, 0x56, 0x99, 0xdf, 0x15, 0x53, 0x96, 0xd0, 0x1a, 0x5c, 0x93, 0xd5, 0x1f, 0x59, 0xf0, 0xb6, 0x7c, 0x3a, 0xf5, 0xb3, 0x79, 0x3f, 0xfa, 0xbc, 0x76, 0x30, 0xff, 0xb9, 0x73, 0x35, 0xe4, 0xa2, 0x68, 0x2e, 0xe1, 0xa7, 0x6d, 0x2b, 0xee, 0xa8, 0x62, 0x24, 0xeb, 0xad, 0x67, 0x21, 0xd8, 0x9e, 0x54, 0x12, 0xdd, 0x9b, 0x51, 0x17, 0xd2, 0x94, 0x5e, 0x18, 0xd7, 0x91, 0x5b, 0x1d, 0xcc, 0x8a, 0x40, 0x6, 0xc9, 0x8f, 0x45, 0x3, 0xc6, 0x80, 0x4a, 0xc, 0xc3, 0x85, 0x4f, 0x9}, - {0x0, 0x47, 0x8e, 0xc9, 0x1, 0x46, 0x8f, 0xc8, 0x2, 0x45, 0x8c, 0xcb, 0x3, 0x44, 0x8d, 0xca, 0x4, 0x43, 0x8a, 0xcd, 0x5, 0x42, 0x8b, 0xcc, 0x6, 0x41, 0x88, 0xcf, 0x7, 0x40, 0x89, 0xce, 0x8, 0x4f, 0x86, 0xc1, 0x9, 0x4e, 0x87, 0xc0, 0xa, 0x4d, 0x84, 0xc3, 0xb, 0x4c, 0x85, 0xc2, 0xc, 0x4b, 0x82, 0xc5, 0xd, 0x4a, 0x83, 0xc4, 0xe, 0x49, 0x80, 0xc7, 0xf, 0x48, 0x81, 0xc6, 0x10, 0x57, 0x9e, 0xd9, 0x11, 0x56, 0x9f, 0xd8, 0x12, 0x55, 0x9c, 0xdb, 0x13, 0x54, 0x9d, 0xda, 0x14, 0x53, 0x9a, 0xdd, 0x15, 0x52, 0x9b, 0xdc, 0x16, 0x51, 0x98, 0xdf, 0x17, 0x50, 0x99, 0xde, 0x18, 0x5f, 0x96, 0xd1, 0x19, 0x5e, 0x97, 0xd0, 0x1a, 0x5d, 0x94, 0xd3, 0x1b, 0x5c, 0x95, 0xd2, 0x1c, 0x5b, 0x92, 0xd5, 0x1d, 0x5a, 0x93, 0xd4, 0x1e, 0x59, 0x90, 0xd7, 0x1f, 0x58, 0x91, 0xd6, 0x20, 0x67, 0xae, 0xe9, 0x21, 0x66, 0xaf, 0xe8, 0x22, 0x65, 0xac, 0xeb, 0x23, 0x64, 0xad, 0xea, 0x24, 0x63, 0xaa, 0xed, 0x25, 0x62, 0xab, 0xec, 0x26, 0x61, 0xa8, 0xef, 0x27, 0x60, 0xa9, 0xee, 0x28, 0x6f, 0xa6, 0xe1, 0x29, 0x6e, 0xa7, 0xe0, 0x2a, 0x6d, 0xa4, 0xe3, 0x2b, 0x6c, 0xa5, 0xe2, 0x2c, 0x6b, 0xa2, 0xe5, 0x2d, 0x6a, 0xa3, 0xe4, 0x2e, 0x69, 0xa0, 0xe7, 0x2f, 0x68, 0xa1, 0xe6, 0x30, 0x77, 0xbe, 0xf9, 0x31, 0x76, 0xbf, 0xf8, 0x32, 0x75, 0xbc, 0xfb, 0x33, 0x74, 0xbd, 0xfa, 0x34, 0x73, 0xba, 0xfd, 0x35, 0x72, 0xbb, 0xfc, 0x36, 0x71, 0xb8, 0xff, 0x37, 0x70, 0xb9, 0xfe, 0x38, 0x7f, 0xb6, 0xf1, 0x39, 0x7e, 0xb7, 0xf0, 0x3a, 0x7d, 0xb4, 0xf3, 0x3b, 0x7c, 0xb5, 0xf2, 0x3c, 0x7b, 0xb2, 0xf5, 0x3d, 0x7a, 0xb3, 0xf4, 0x3e, 0x79, 0xb0, 0xf7, 0x3f, 0x78, 0xb1, 0xf6}, - {0x0, 0x48, 0x90, 0xd8, 0x3d, 0x75, 0xad, 0xe5, 0x7a, 0x32, 0xea, 0xa2, 0x47, 0xf, 0xd7, 0x9f, 0xf4, 0xbc, 0x64, 0x2c, 0xc9, 0x81, 0x59, 0x11, 0x8e, 0xc6, 0x1e, 0x56, 0xb3, 0xfb, 0x23, 0x6b, 0xf5, 0xbd, 0x65, 0x2d, 0xc8, 0x80, 0x58, 0x10, 0x8f, 0xc7, 0x1f, 0x57, 0xb2, 0xfa, 0x22, 0x6a, 0x1, 0x49, 0x91, 0xd9, 0x3c, 0x74, 0xac, 0xe4, 0x7b, 0x33, 0xeb, 0xa3, 0x46, 0xe, 0xd6, 0x9e, 0xf7, 0xbf, 0x67, 0x2f, 0xca, 0x82, 0x5a, 0x12, 0x8d, 0xc5, 0x1d, 0x55, 0xb0, 0xf8, 0x20, 0x68, 0x3, 0x4b, 0x93, 0xdb, 0x3e, 0x76, 0xae, 0xe6, 0x79, 0x31, 0xe9, 0xa1, 0x44, 0xc, 0xd4, 0x9c, 0x2, 0x4a, 0x92, 0xda, 0x3f, 0x77, 0xaf, 0xe7, 0x78, 0x30, 0xe8, 0xa0, 0x45, 0xd, 0xd5, 0x9d, 0xf6, 0xbe, 0x66, 0x2e, 0xcb, 0x83, 0x5b, 0x13, 0x8c, 0xc4, 0x1c, 0x54, 0xb1, 0xf9, 0x21, 0x69, 0xf3, 0xbb, 0x63, 0x2b, 0xce, 0x86, 0x5e, 0x16, 0x89, 0xc1, 0x19, 0x51, 0xb4, 0xfc, 0x24, 0x6c, 0x7, 0x4f, 0x97, 0xdf, 0x3a, 0x72, 0xaa, 0xe2, 0x7d, 0x35, 0xed, 0xa5, 0x40, 0x8, 0xd0, 0x98, 0x6, 0x4e, 0x96, 0xde, 0x3b, 0x73, 0xab, 0xe3, 0x7c, 0x34, 0xec, 0xa4, 0x41, 0x9, 0xd1, 0x99, 0xf2, 0xba, 0x62, 0x2a, 0xcf, 0x87, 0x5f, 0x17, 0x88, 0xc0, 0x18, 0x50, 0xb5, 0xfd, 0x25, 0x6d, 0x4, 0x4c, 0x94, 0xdc, 0x39, 0x71, 0xa9, 0xe1, 0x7e, 0x36, 0xee, 0xa6, 0x43, 0xb, 0xd3, 0x9b, 0xf0, 0xb8, 0x60, 0x28, 0xcd, 0x85, 0x5d, 0x15, 0x8a, 0xc2, 0x1a, 0x52, 0xb7, 0xff, 0x27, 0x6f, 0xf1, 0xb9, 0x61, 0x29, 0xcc, 0x84, 0x5c, 0x14, 0x8b, 0xc3, 0x1b, 0x53, 0xb6, 0xfe, 0x26, 0x6e, 0x5, 0x4d, 0x95, 0xdd, 0x38, 0x70, 0xa8, 0xe0, 0x7f, 0x37, 0xef, 0xa7, 0x42, 0xa, 0xd2, 0x9a}, - {0x0, 0x49, 0x92, 0xdb, 0x39, 0x70, 0xab, 0xe2, 0x72, 0x3b, 0xe0, 0xa9, 0x4b, 0x2, 0xd9, 0x90, 0xe4, 0xad, 0x76, 0x3f, 0xdd, 0x94, 0x4f, 0x6, 0x96, 0xdf, 0x4, 0x4d, 0xaf, 0xe6, 0x3d, 0x74, 0xd5, 0x9c, 0x47, 0xe, 0xec, 0xa5, 0x7e, 0x37, 0xa7, 0xee, 0x35, 0x7c, 0x9e, 0xd7, 0xc, 0x45, 0x31, 0x78, 0xa3, 0xea, 0x8, 0x41, 0x9a, 0xd3, 0x43, 0xa, 0xd1, 0x98, 0x7a, 0x33, 0xe8, 0xa1, 0xb7, 0xfe, 0x25, 0x6c, 0x8e, 0xc7, 0x1c, 0x55, 0xc5, 0x8c, 0x57, 0x1e, 0xfc, 0xb5, 0x6e, 0x27, 0x53, 0x1a, 0xc1, 0x88, 0x6a, 0x23, 0xf8, 0xb1, 0x21, 0x68, 0xb3, 0xfa, 0x18, 0x51, 0x8a, 0xc3, 0x62, 0x2b, 0xf0, 0xb9, 0x5b, 0x12, 0xc9, 0x80, 0x10, 0x59, 0x82, 0xcb, 0x29, 0x60, 0xbb, 0xf2, 0x86, 0xcf, 0x14, 0x5d, 0xbf, 0xf6, 0x2d, 0x64, 0xf4, 0xbd, 0x66, 0x2f, 0xcd, 0x84, 0x5f, 0x16, 0x73, 0x3a, 0xe1, 0xa8, 0x4a, 0x3, 0xd8, 0x91, 0x1, 0x48, 0x93, 0xda, 0x38, 0x71, 0xaa, 0xe3, 0x97, 0xde, 0x5, 0x4c, 0xae, 0xe7, 0x3c, 0x75, 0xe5, 0xac, 0x77, 0x3e, 0xdc, 0x95, 0x4e, 0x7, 0xa6, 0xef, 0x34, 0x7d, 0x9f, 0xd6, 0xd, 0x44, 0xd4, 0x9d, 0x46, 0xf, 0xed, 0xa4, 0x7f, 0x36, 0x42, 0xb, 0xd0, 0x99, 0x7b, 0x32, 0xe9, 0xa0, 0x30, 0x79, 0xa2, 0xeb, 0x9, 0x40, 0x9b, 0xd2, 0xc4, 0x8d, 0x56, 0x1f, 0xfd, 0xb4, 0x6f, 0x26, 0xb6, 0xff, 0x24, 0x6d, 0x8f, 0xc6, 0x1d, 0x54, 0x20, 0x69, 0xb2, 0xfb, 0x19, 0x50, 0x8b, 0xc2, 0x52, 0x1b, 0xc0, 0x89, 0x6b, 0x22, 0xf9, 0xb0, 0x11, 0x58, 0x83, 0xca, 0x28, 0x61, 0xba, 0xf3, 0x63, 0x2a, 0xf1, 0xb8, 0x5a, 0x13, 0xc8, 0x81, 0xf5, 0xbc, 0x67, 0x2e, 0xcc, 0x85, 0x5e, 0x17, 0x87, 0xce, 0x15, 0x5c, 0xbe, 0xf7, 0x2c, 0x65}, - {0x0, 0x4a, 0x94, 0xde, 0x35, 0x7f, 0xa1, 0xeb, 0x6a, 0x20, 0xfe, 0xb4, 0x5f, 0x15, 0xcb, 0x81, 0xd4, 0x9e, 0x40, 0xa, 0xe1, 0xab, 0x75, 0x3f, 0xbe, 0xf4, 0x2a, 0x60, 0x8b, 0xc1, 0x1f, 0x55, 0xb5, 0xff, 0x21, 0x6b, 0x80, 0xca, 0x14, 0x5e, 0xdf, 0x95, 0x4b, 0x1, 0xea, 0xa0, 0x7e, 0x34, 0x61, 0x2b, 0xf5, 0xbf, 0x54, 0x1e, 0xc0, 0x8a, 0xb, 0x41, 0x9f, 0xd5, 0x3e, 0x74, 0xaa, 0xe0, 0x77, 0x3d, 0xe3, 0xa9, 0x42, 0x8, 0xd6, 0x9c, 0x1d, 0x57, 0x89, 0xc3, 0x28, 0x62, 0xbc, 0xf6, 0xa3, 0xe9, 0x37, 0x7d, 0x96, 0xdc, 0x2, 0x48, 0xc9, 0x83, 0x5d, 0x17, 0xfc, 0xb6, 0x68, 0x22, 0xc2, 0x88, 0x56, 0x1c, 0xf7, 0xbd, 0x63, 0x29, 0xa8, 0xe2, 0x3c, 0x76, 0x9d, 0xd7, 0x9, 0x43, 0x16, 0x5c, 0x82, 0xc8, 0x23, 0x69, 0xb7, 0xfd, 0x7c, 0x36, 0xe8, 0xa2, 0x49, 0x3, 0xdd, 0x97, 0xee, 0xa4, 0x7a, 0x30, 0xdb, 0x91, 0x4f, 0x5, 0x84, 0xce, 0x10, 0x5a, 0xb1, 0xfb, 0x25, 0x6f, 0x3a, 0x70, 0xae, 0xe4, 0xf, 0x45, 0x9b, 0xd1, 0x50, 0x1a, 0xc4, 0x8e, 0x65, 0x2f, 0xf1, 0xbb, 0x5b, 0x11, 0xcf, 0x85, 0x6e, 0x24, 0xfa, 0xb0, 0x31, 0x7b, 0xa5, 0xef, 0x4, 0x4e, 0x90, 0xda, 0x8f, 0xc5, 0x1b, 0x51, 0xba, 0xf0, 0x2e, 0x64, 0xe5, 0xaf, 0x71, 0x3b, 0xd0, 0x9a, 0x44, 0xe, 0x99, 0xd3, 0xd, 0x47, 0xac, 0xe6, 0x38, 0x72, 0xf3, 0xb9, 0x67, 0x2d, 0xc6, 0x8c, 0x52, 0x18, 0x4d, 0x7, 0xd9, 0x93, 0x78, 0x32, 0xec, 0xa6, 0x27, 0x6d, 0xb3, 0xf9, 0x12, 0x58, 0x86, 0xcc, 0x2c, 0x66, 0xb8, 0xf2, 0x19, 0x53, 0x8d, 0xc7, 0x46, 0xc, 0xd2, 0x98, 0x73, 0x39, 0xe7, 0xad, 0xf8, 0xb2, 0x6c, 0x26, 0xcd, 0x87, 0x59, 0x13, 0x92, 0xd8, 0x6, 0x4c, 0xa7, 0xed, 0x33, 0x79}, - {0x0, 0x4b, 0x96, 0xdd, 0x31, 0x7a, 0xa7, 0xec, 0x62, 0x29, 0xf4, 0xbf, 0x53, 0x18, 0xc5, 0x8e, 0xc4, 0x8f, 0x52, 0x19, 0xf5, 0xbe, 0x63, 0x28, 0xa6, 0xed, 0x30, 0x7b, 0x97, 0xdc, 0x1, 0x4a, 0x95, 0xde, 0x3, 0x48, 0xa4, 0xef, 0x32, 0x79, 0xf7, 0xbc, 0x61, 0x2a, 0xc6, 0x8d, 0x50, 0x1b, 0x51, 0x1a, 0xc7, 0x8c, 0x60, 0x2b, 0xf6, 0xbd, 0x33, 0x78, 0xa5, 0xee, 0x2, 0x49, 0x94, 0xdf, 0x37, 0x7c, 0xa1, 0xea, 0x6, 0x4d, 0x90, 0xdb, 0x55, 0x1e, 0xc3, 0x88, 0x64, 0x2f, 0xf2, 0xb9, 0xf3, 0xb8, 0x65, 0x2e, 0xc2, 0x89, 0x54, 0x1f, 0x91, 0xda, 0x7, 0x4c, 0xa0, 0xeb, 0x36, 0x7d, 0xa2, 0xe9, 0x34, 0x7f, 0x93, 0xd8, 0x5, 0x4e, 0xc0, 0x8b, 0x56, 0x1d, 0xf1, 0xba, 0x67, 0x2c, 0x66, 0x2d, 0xf0, 0xbb, 0x57, 0x1c, 0xc1, 0x8a, 0x4, 0x4f, 0x92, 0xd9, 0x35, 0x7e, 0xa3, 0xe8, 0x6e, 0x25, 0xf8, 0xb3, 0x5f, 0x14, 0xc9, 0x82, 0xc, 0x47, 0x9a, 0xd1, 0x3d, 0x76, 0xab, 0xe0, 0xaa, 0xe1, 0x3c, 0x77, 0x9b, 0xd0, 0xd, 0x46, 0xc8, 0x83, 0x5e, 0x15, 0xf9, 0xb2, 0x6f, 0x24, 0xfb, 0xb0, 0x6d, 0x26, 0xca, 0x81, 0x5c, 0x17, 0x99, 0xd2, 0xf, 0x44, 0xa8, 0xe3, 0x3e, 0x75, 0x3f, 0x74, 0xa9, 0xe2, 0xe, 0x45, 0x98, 0xd3, 0x5d, 0x16, 0xcb, 0x80, 0x6c, 0x27, 0xfa, 0xb1, 0x59, 0x12, 0xcf, 0x84, 0x68, 0x23, 0xfe, 0xb5, 0x3b, 0x70, 0xad, 0xe6, 0xa, 0x41, 0x9c, 0xd7, 0x9d, 0xd6, 0xb, 0x40, 0xac, 0xe7, 0x3a, 0x71, 0xff, 0xb4, 0x69, 0x22, 0xce, 0x85, 0x58, 0x13, 0xcc, 0x87, 0x5a, 0x11, 0xfd, 0xb6, 0x6b, 0x20, 0xae, 0xe5, 0x38, 0x73, 0x9f, 0xd4, 0x9, 0x42, 0x8, 0x43, 0x9e, 0xd5, 0x39, 0x72, 0xaf, 0xe4, 0x6a, 0x21, 0xfc, 0xb7, 0x5b, 0x10, 0xcd, 0x86}, - {0x0, 0x4c, 0x98, 0xd4, 0x2d, 0x61, 0xb5, 0xf9, 0x5a, 0x16, 0xc2, 0x8e, 0x77, 0x3b, 0xef, 0xa3, 0xb4, 0xf8, 0x2c, 0x60, 0x99, 0xd5, 0x1, 0x4d, 0xee, 0xa2, 0x76, 0x3a, 0xc3, 0x8f, 0x5b, 0x17, 0x75, 0x39, 0xed, 0xa1, 0x58, 0x14, 0xc0, 0x8c, 0x2f, 0x63, 0xb7, 0xfb, 0x2, 0x4e, 0x9a, 0xd6, 0xc1, 0x8d, 0x59, 0x15, 0xec, 0xa0, 0x74, 0x38, 0x9b, 0xd7, 0x3, 0x4f, 0xb6, 0xfa, 0x2e, 0x62, 0xea, 0xa6, 0x72, 0x3e, 0xc7, 0x8b, 0x5f, 0x13, 0xb0, 0xfc, 0x28, 0x64, 0x9d, 0xd1, 0x5, 0x49, 0x5e, 0x12, 0xc6, 0x8a, 0x73, 0x3f, 0xeb, 0xa7, 0x4, 0x48, 0x9c, 0xd0, 0x29, 0x65, 0xb1, 0xfd, 0x9f, 0xd3, 0x7, 0x4b, 0xb2, 0xfe, 0x2a, 0x66, 0xc5, 0x89, 0x5d, 0x11, 0xe8, 0xa4, 0x70, 0x3c, 0x2b, 0x67, 0xb3, 0xff, 0x6, 0x4a, 0x9e, 0xd2, 0x71, 0x3d, 0xe9, 0xa5, 0x5c, 0x10, 0xc4, 0x88, 0xc9, 0x85, 0x51, 0x1d, 0xe4, 0xa8, 0x7c, 0x30, 0x93, 0xdf, 0xb, 0x47, 0xbe, 0xf2, 0x26, 0x6a, 0x7d, 0x31, 0xe5, 0xa9, 0x50, 0x1c, 0xc8, 0x84, 0x27, 0x6b, 0xbf, 0xf3, 0xa, 0x46, 0x92, 0xde, 0xbc, 0xf0, 0x24, 0x68, 0x91, 0xdd, 0x9, 0x45, 0xe6, 0xaa, 0x7e, 0x32, 0xcb, 0x87, 0x53, 0x1f, 0x8, 0x44, 0x90, 0xdc, 0x25, 0x69, 0xbd, 0xf1, 0x52, 0x1e, 0xca, 0x86, 0x7f, 0x33, 0xe7, 0xab, 0x23, 0x6f, 0xbb, 0xf7, 0xe, 0x42, 0x96, 0xda, 0x79, 0x35, 0xe1, 0xad, 0x54, 0x18, 0xcc, 0x80, 0x97, 0xdb, 0xf, 0x43, 0xba, 0xf6, 0x22, 0x6e, 0xcd, 0x81, 0x55, 0x19, 0xe0, 0xac, 0x78, 0x34, 0x56, 0x1a, 0xce, 0x82, 0x7b, 0x37, 0xe3, 0xaf, 0xc, 0x40, 0x94, 0xd8, 0x21, 0x6d, 0xb9, 0xf5, 0xe2, 0xae, 0x7a, 0x36, 0xcf, 0x83, 0x57, 0x1b, 0xb8, 0xf4, 0x20, 0x6c, 0x95, 0xd9, 0xd, 0x41}, - {0x0, 0x4d, 0x9a, 0xd7, 0x29, 0x64, 0xb3, 0xfe, 0x52, 0x1f, 0xc8, 0x85, 0x7b, 0x36, 0xe1, 0xac, 0xa4, 0xe9, 0x3e, 0x73, 0x8d, 0xc0, 0x17, 0x5a, 0xf6, 0xbb, 0x6c, 0x21, 0xdf, 0x92, 0x45, 0x8, 0x55, 0x18, 0xcf, 0x82, 0x7c, 0x31, 0xe6, 0xab, 0x7, 0x4a, 0x9d, 0xd0, 0x2e, 0x63, 0xb4, 0xf9, 0xf1, 0xbc, 0x6b, 0x26, 0xd8, 0x95, 0x42, 0xf, 0xa3, 0xee, 0x39, 0x74, 0x8a, 0xc7, 0x10, 0x5d, 0xaa, 0xe7, 0x30, 0x7d, 0x83, 0xce, 0x19, 0x54, 0xf8, 0xb5, 0x62, 0x2f, 0xd1, 0x9c, 0x4b, 0x6, 0xe, 0x43, 0x94, 0xd9, 0x27, 0x6a, 0xbd, 0xf0, 0x5c, 0x11, 0xc6, 0x8b, 0x75, 0x38, 0xef, 0xa2, 0xff, 0xb2, 0x65, 0x28, 0xd6, 0x9b, 0x4c, 0x1, 0xad, 0xe0, 0x37, 0x7a, 0x84, 0xc9, 0x1e, 0x53, 0x5b, 0x16, 0xc1, 0x8c, 0x72, 0x3f, 0xe8, 0xa5, 0x9, 0x44, 0x93, 0xde, 0x20, 0x6d, 0xba, 0xf7, 0x49, 0x4, 0xd3, 0x9e, 0x60, 0x2d, 0xfa, 0xb7, 0x1b, 0x56, 0x81, 0xcc, 0x32, 0x7f, 0xa8, 0xe5, 0xed, 0xa0, 0x77, 0x3a, 0xc4, 0x89, 0x5e, 0x13, 0xbf, 0xf2, 0x25, 0x68, 0x96, 0xdb, 0xc, 0x41, 0x1c, 0x51, 0x86, 0xcb, 0x35, 0x78, 0xaf, 0xe2, 0x4e, 0x3, 0xd4, 0x99, 0x67, 0x2a, 0xfd, 0xb0, 0xb8, 0xf5, 0x22, 0x6f, 0x91, 0xdc, 0xb, 0x46, 0xea, 0xa7, 0x70, 0x3d, 0xc3, 0x8e, 0x59, 0x14, 0xe3, 0xae, 0x79, 0x34, 0xca, 0x87, 0x50, 0x1d, 0xb1, 0xfc, 0x2b, 0x66, 0x98, 0xd5, 0x2, 0x4f, 0x47, 0xa, 0xdd, 0x90, 0x6e, 0x23, 0xf4, 0xb9, 0x15, 0x58, 0x8f, 0xc2, 0x3c, 0x71, 0xa6, 0xeb, 0xb6, 0xfb, 0x2c, 0x61, 0x9f, 0xd2, 0x5, 0x48, 0xe4, 0xa9, 0x7e, 0x33, 0xcd, 0x80, 0x57, 0x1a, 0x12, 0x5f, 0x88, 0xc5, 0x3b, 0x76, 0xa1, 0xec, 0x40, 0xd, 0xda, 0x97, 0x69, 0x24, 0xf3, 0xbe}, - {0x0, 0x4e, 0x9c, 0xd2, 0x25, 0x6b, 0xb9, 0xf7, 0x4a, 0x4, 0xd6, 0x98, 0x6f, 0x21, 0xf3, 0xbd, 0x94, 0xda, 0x8, 0x46, 0xb1, 0xff, 0x2d, 0x63, 0xde, 0x90, 0x42, 0xc, 0xfb, 0xb5, 0x67, 0x29, 0x35, 0x7b, 0xa9, 0xe7, 0x10, 0x5e, 0x8c, 0xc2, 0x7f, 0x31, 0xe3, 0xad, 0x5a, 0x14, 0xc6, 0x88, 0xa1, 0xef, 0x3d, 0x73, 0x84, 0xca, 0x18, 0x56, 0xeb, 0xa5, 0x77, 0x39, 0xce, 0x80, 0x52, 0x1c, 0x6a, 0x24, 0xf6, 0xb8, 0x4f, 0x1, 0xd3, 0x9d, 0x20, 0x6e, 0xbc, 0xf2, 0x5, 0x4b, 0x99, 0xd7, 0xfe, 0xb0, 0x62, 0x2c, 0xdb, 0x95, 0x47, 0x9, 0xb4, 0xfa, 0x28, 0x66, 0x91, 0xdf, 0xd, 0x43, 0x5f, 0x11, 0xc3, 0x8d, 0x7a, 0x34, 0xe6, 0xa8, 0x15, 0x5b, 0x89, 0xc7, 0x30, 0x7e, 0xac, 0xe2, 0xcb, 0x85, 0x57, 0x19, 0xee, 0xa0, 0x72, 0x3c, 0x81, 0xcf, 0x1d, 0x53, 0xa4, 0xea, 0x38, 0x76, 0xd4, 0x9a, 0x48, 0x6, 0xf1, 0xbf, 0x6d, 0x23, 0x9e, 0xd0, 0x2, 0x4c, 0xbb, 0xf5, 0x27, 0x69, 0x40, 0xe, 0xdc, 0x92, 0x65, 0x2b, 0xf9, 0xb7, 0xa, 0x44, 0x96, 0xd8, 0x2f, 0x61, 0xb3, 0xfd, 0xe1, 0xaf, 0x7d, 0x33, 0xc4, 0x8a, 0x58, 0x16, 0xab, 0xe5, 0x37, 0x79, 0x8e, 0xc0, 0x12, 0x5c, 0x75, 0x3b, 0xe9, 0xa7, 0x50, 0x1e, 0xcc, 0x82, 0x3f, 0x71, 0xa3, 0xed, 0x1a, 0x54, 0x86, 0xc8, 0xbe, 0xf0, 0x22, 0x6c, 0x9b, 0xd5, 0x7, 0x49, 0xf4, 0xba, 0x68, 0x26, 0xd1, 0x9f, 0x4d, 0x3, 0x2a, 0x64, 0xb6, 0xf8, 0xf, 0x41, 0x93, 0xdd, 0x60, 0x2e, 0xfc, 0xb2, 0x45, 0xb, 0xd9, 0x97, 0x8b, 0xc5, 0x17, 0x59, 0xae, 0xe0, 0x32, 0x7c, 0xc1, 0x8f, 0x5d, 0x13, 0xe4, 0xaa, 0x78, 0x36, 0x1f, 0x51, 0x83, 0xcd, 0x3a, 0x74, 0xa6, 0xe8, 0x55, 0x1b, 0xc9, 0x87, 0x70, 0x3e, 0xec, 0xa2}, - {0x0, 0x4f, 0x9e, 0xd1, 0x21, 0x6e, 0xbf, 0xf0, 0x42, 0xd, 0xdc, 0x93, 0x63, 0x2c, 0xfd, 0xb2, 0x84, 0xcb, 0x1a, 0x55, 0xa5, 0xea, 0x3b, 0x74, 0xc6, 0x89, 0x58, 0x17, 0xe7, 0xa8, 0x79, 0x36, 0x15, 0x5a, 0x8b, 0xc4, 0x34, 0x7b, 0xaa, 0xe5, 0x57, 0x18, 0xc9, 0x86, 0x76, 0x39, 0xe8, 0xa7, 0x91, 0xde, 0xf, 0x40, 0xb0, 0xff, 0x2e, 0x61, 0xd3, 0x9c, 0x4d, 0x2, 0xf2, 0xbd, 0x6c, 0x23, 0x2a, 0x65, 0xb4, 0xfb, 0xb, 0x44, 0x95, 0xda, 0x68, 0x27, 0xf6, 0xb9, 0x49, 0x6, 0xd7, 0x98, 0xae, 0xe1, 0x30, 0x7f, 0x8f, 0xc0, 0x11, 0x5e, 0xec, 0xa3, 0x72, 0x3d, 0xcd, 0x82, 0x53, 0x1c, 0x3f, 0x70, 0xa1, 0xee, 0x1e, 0x51, 0x80, 0xcf, 0x7d, 0x32, 0xe3, 0xac, 0x5c, 0x13, 0xc2, 0x8d, 0xbb, 0xf4, 0x25, 0x6a, 0x9a, 0xd5, 0x4, 0x4b, 0xf9, 0xb6, 0x67, 0x28, 0xd8, 0x97, 0x46, 0x9, 0x54, 0x1b, 0xca, 0x85, 0x75, 0x3a, 0xeb, 0xa4, 0x16, 0x59, 0x88, 0xc7, 0x37, 0x78, 0xa9, 0xe6, 0xd0, 0x9f, 0x4e, 0x1, 0xf1, 0xbe, 0x6f, 0x20, 0x92, 0xdd, 0xc, 0x43, 0xb3, 0xfc, 0x2d, 0x62, 0x41, 0xe, 0xdf, 0x90, 0x60, 0x2f, 0xfe, 0xb1, 0x3, 0x4c, 0x9d, 0xd2, 0x22, 0x6d, 0xbc, 0xf3, 0xc5, 0x8a, 0x5b, 0x14, 0xe4, 0xab, 0x7a, 0x35, 0x87, 0xc8, 0x19, 0x56, 0xa6, 0xe9, 0x38, 0x77, 0x7e, 0x31, 0xe0, 0xaf, 0x5f, 0x10, 0xc1, 0x8e, 0x3c, 0x73, 0xa2, 0xed, 0x1d, 0x52, 0x83, 0xcc, 0xfa, 0xb5, 0x64, 0x2b, 0xdb, 0x94, 0x45, 0xa, 0xb8, 0xf7, 0x26, 0x69, 0x99, 0xd6, 0x7, 0x48, 0x6b, 0x24, 0xf5, 0xba, 0x4a, 0x5, 0xd4, 0x9b, 0x29, 0x66, 0xb7, 0xf8, 0x8, 0x47, 0x96, 0xd9, 0xef, 0xa0, 0x71, 0x3e, 0xce, 0x81, 0x50, 0x1f, 0xad, 0xe2, 0x33, 0x7c, 0x8c, 0xc3, 0x12, 0x5d}, - {0x0, 0x50, 0xa0, 0xf0, 0x5d, 0xd, 0xfd, 0xad, 0xba, 0xea, 0x1a, 0x4a, 0xe7, 0xb7, 0x47, 0x17, 0x69, 0x39, 0xc9, 0x99, 0x34, 0x64, 0x94, 0xc4, 0xd3, 0x83, 0x73, 0x23, 0x8e, 0xde, 0x2e, 0x7e, 0xd2, 0x82, 0x72, 0x22, 0x8f, 0xdf, 0x2f, 0x7f, 0x68, 0x38, 0xc8, 0x98, 0x35, 0x65, 0x95, 0xc5, 0xbb, 0xeb, 0x1b, 0x4b, 0xe6, 0xb6, 0x46, 0x16, 0x1, 0x51, 0xa1, 0xf1, 0x5c, 0xc, 0xfc, 0xac, 0xb9, 0xe9, 0x19, 0x49, 0xe4, 0xb4, 0x44, 0x14, 0x3, 0x53, 0xa3, 0xf3, 0x5e, 0xe, 0xfe, 0xae, 0xd0, 0x80, 0x70, 0x20, 0x8d, 0xdd, 0x2d, 0x7d, 0x6a, 0x3a, 0xca, 0x9a, 0x37, 0x67, 0x97, 0xc7, 0x6b, 0x3b, 0xcb, 0x9b, 0x36, 0x66, 0x96, 0xc6, 0xd1, 0x81, 0x71, 0x21, 0x8c, 0xdc, 0x2c, 0x7c, 0x2, 0x52, 0xa2, 0xf2, 0x5f, 0xf, 0xff, 0xaf, 0xb8, 0xe8, 0x18, 0x48, 0xe5, 0xb5, 0x45, 0x15, 0x6f, 0x3f, 0xcf, 0x9f, 0x32, 0x62, 0x92, 0xc2, 0xd5, 0x85, 0x75, 0x25, 0x88, 0xd8, 0x28, 0x78, 0x6, 0x56, 0xa6, 0xf6, 0x5b, 0xb, 0xfb, 0xab, 0xbc, 0xec, 0x1c, 0x4c, 0xe1, 0xb1, 0x41, 0x11, 0xbd, 0xed, 0x1d, 0x4d, 0xe0, 0xb0, 0x40, 0x10, 0x7, 0x57, 0xa7, 0xf7, 0x5a, 0xa, 0xfa, 0xaa, 0xd4, 0x84, 0x74, 0x24, 0x89, 0xd9, 0x29, 0x79, 0x6e, 0x3e, 0xce, 0x9e, 0x33, 0x63, 0x93, 0xc3, 0xd6, 0x86, 0x76, 0x26, 0x8b, 0xdb, 0x2b, 0x7b, 0x6c, 0x3c, 0xcc, 0x9c, 0x31, 0x61, 0x91, 0xc1, 0xbf, 0xef, 0x1f, 0x4f, 0xe2, 0xb2, 0x42, 0x12, 0x5, 0x55, 0xa5, 0xf5, 0x58, 0x8, 0xf8, 0xa8, 0x4, 0x54, 0xa4, 0xf4, 0x59, 0x9, 0xf9, 0xa9, 0xbe, 0xee, 0x1e, 0x4e, 0xe3, 0xb3, 0x43, 0x13, 0x6d, 0x3d, 0xcd, 0x9d, 0x30, 0x60, 0x90, 0xc0, 0xd7, 0x87, 0x77, 0x27, 0x8a, 0xda, 0x2a, 0x7a}, - {0x0, 0x51, 0xa2, 0xf3, 0x59, 0x8, 0xfb, 0xaa, 0xb2, 0xe3, 0x10, 0x41, 0xeb, 0xba, 0x49, 0x18, 0x79, 0x28, 0xdb, 0x8a, 0x20, 0x71, 0x82, 0xd3, 0xcb, 0x9a, 0x69, 0x38, 0x92, 0xc3, 0x30, 0x61, 0xf2, 0xa3, 0x50, 0x1, 0xab, 0xfa, 0x9, 0x58, 0x40, 0x11, 0xe2, 0xb3, 0x19, 0x48, 0xbb, 0xea, 0x8b, 0xda, 0x29, 0x78, 0xd2, 0x83, 0x70, 0x21, 0x39, 0x68, 0x9b, 0xca, 0x60, 0x31, 0xc2, 0x93, 0xf9, 0xa8, 0x5b, 0xa, 0xa0, 0xf1, 0x2, 0x53, 0x4b, 0x1a, 0xe9, 0xb8, 0x12, 0x43, 0xb0, 0xe1, 0x80, 0xd1, 0x22, 0x73, 0xd9, 0x88, 0x7b, 0x2a, 0x32, 0x63, 0x90, 0xc1, 0x6b, 0x3a, 0xc9, 0x98, 0xb, 0x5a, 0xa9, 0xf8, 0x52, 0x3, 0xf0, 0xa1, 0xb9, 0xe8, 0x1b, 0x4a, 0xe0, 0xb1, 0x42, 0x13, 0x72, 0x23, 0xd0, 0x81, 0x2b, 0x7a, 0x89, 0xd8, 0xc0, 0x91, 0x62, 0x33, 0x99, 0xc8, 0x3b, 0x6a, 0xef, 0xbe, 0x4d, 0x1c, 0xb6, 0xe7, 0x14, 0x45, 0x5d, 0xc, 0xff, 0xae, 0x4, 0x55, 0xa6, 0xf7, 0x96, 0xc7, 0x34, 0x65, 0xcf, 0x9e, 0x6d, 0x3c, 0x24, 0x75, 0x86, 0xd7, 0x7d, 0x2c, 0xdf, 0x8e, 0x1d, 0x4c, 0xbf, 0xee, 0x44, 0x15, 0xe6, 0xb7, 0xaf, 0xfe, 0xd, 0x5c, 0xf6, 0xa7, 0x54, 0x5, 0x64, 0x35, 0xc6, 0x97, 0x3d, 0x6c, 0x9f, 0xce, 0xd6, 0x87, 0x74, 0x25, 0x8f, 0xde, 0x2d, 0x7c, 0x16, 0x47, 0xb4, 0xe5, 0x4f, 0x1e, 0xed, 0xbc, 0xa4, 0xf5, 0x6, 0x57, 0xfd, 0xac, 0x5f, 0xe, 0x6f, 0x3e, 0xcd, 0x9c, 0x36, 0x67, 0x94, 0xc5, 0xdd, 0x8c, 0x7f, 0x2e, 0x84, 0xd5, 0x26, 0x77, 0xe4, 0xb5, 0x46, 0x17, 0xbd, 0xec, 0x1f, 0x4e, 0x56, 0x7, 0xf4, 0xa5, 0xf, 0x5e, 0xad, 0xfc, 0x9d, 0xcc, 0x3f, 0x6e, 0xc4, 0x95, 0x66, 0x37, 0x2f, 0x7e, 0x8d, 0xdc, 0x76, 0x27, 0xd4, 0x85}, - {0x0, 0x52, 0xa4, 0xf6, 0x55, 0x7, 0xf1, 0xa3, 0xaa, 0xf8, 0xe, 0x5c, 0xff, 0xad, 0x5b, 0x9, 0x49, 0x1b, 0xed, 0xbf, 0x1c, 0x4e, 0xb8, 0xea, 0xe3, 0xb1, 0x47, 0x15, 0xb6, 0xe4, 0x12, 0x40, 0x92, 0xc0, 0x36, 0x64, 0xc7, 0x95, 0x63, 0x31, 0x38, 0x6a, 0x9c, 0xce, 0x6d, 0x3f, 0xc9, 0x9b, 0xdb, 0x89, 0x7f, 0x2d, 0x8e, 0xdc, 0x2a, 0x78, 0x71, 0x23, 0xd5, 0x87, 0x24, 0x76, 0x80, 0xd2, 0x39, 0x6b, 0x9d, 0xcf, 0x6c, 0x3e, 0xc8, 0x9a, 0x93, 0xc1, 0x37, 0x65, 0xc6, 0x94, 0x62, 0x30, 0x70, 0x22, 0xd4, 0x86, 0x25, 0x77, 0x81, 0xd3, 0xda, 0x88, 0x7e, 0x2c, 0x8f, 0xdd, 0x2b, 0x79, 0xab, 0xf9, 0xf, 0x5d, 0xfe, 0xac, 0x5a, 0x8, 0x1, 0x53, 0xa5, 0xf7, 0x54, 0x6, 0xf0, 0xa2, 0xe2, 0xb0, 0x46, 0x14, 0xb7, 0xe5, 0x13, 0x41, 0x48, 0x1a, 0xec, 0xbe, 0x1d, 0x4f, 0xb9, 0xeb, 0x72, 0x20, 0xd6, 0x84, 0x27, 0x75, 0x83, 0xd1, 0xd8, 0x8a, 0x7c, 0x2e, 0x8d, 0xdf, 0x29, 0x7b, 0x3b, 0x69, 0x9f, 0xcd, 0x6e, 0x3c, 0xca, 0x98, 0x91, 0xc3, 0x35, 0x67, 0xc4, 0x96, 0x60, 0x32, 0xe0, 0xb2, 0x44, 0x16, 0xb5, 0xe7, 0x11, 0x43, 0x4a, 0x18, 0xee, 0xbc, 0x1f, 0x4d, 0xbb, 0xe9, 0xa9, 0xfb, 0xd, 0x5f, 0xfc, 0xae, 0x58, 0xa, 0x3, 0x51, 0xa7, 0xf5, 0x56, 0x4, 0xf2, 0xa0, 0x4b, 0x19, 0xef, 0xbd, 0x1e, 0x4c, 0xba, 0xe8, 0xe1, 0xb3, 0x45, 0x17, 0xb4, 0xe6, 0x10, 0x42, 0x2, 0x50, 0xa6, 0xf4, 0x57, 0x5, 0xf3, 0xa1, 0xa8, 0xfa, 0xc, 0x5e, 0xfd, 0xaf, 0x59, 0xb, 0xd9, 0x8b, 0x7d, 0x2f, 0x8c, 0xde, 0x28, 0x7a, 0x73, 0x21, 0xd7, 0x85, 0x26, 0x74, 0x82, 0xd0, 0x90, 0xc2, 0x34, 0x66, 0xc5, 0x97, 0x61, 0x33, 0x3a, 0x68, 0x9e, 0xcc, 0x6f, 0x3d, 0xcb, 0x99}, - {0x0, 0x53, 0xa6, 0xf5, 0x51, 0x2, 0xf7, 0xa4, 0xa2, 0xf1, 0x4, 0x57, 0xf3, 0xa0, 0x55, 0x6, 0x59, 0xa, 0xff, 0xac, 0x8, 0x5b, 0xae, 0xfd, 0xfb, 0xa8, 0x5d, 0xe, 0xaa, 0xf9, 0xc, 0x5f, 0xb2, 0xe1, 0x14, 0x47, 0xe3, 0xb0, 0x45, 0x16, 0x10, 0x43, 0xb6, 0xe5, 0x41, 0x12, 0xe7, 0xb4, 0xeb, 0xb8, 0x4d, 0x1e, 0xba, 0xe9, 0x1c, 0x4f, 0x49, 0x1a, 0xef, 0xbc, 0x18, 0x4b, 0xbe, 0xed, 0x79, 0x2a, 0xdf, 0x8c, 0x28, 0x7b, 0x8e, 0xdd, 0xdb, 0x88, 0x7d, 0x2e, 0x8a, 0xd9, 0x2c, 0x7f, 0x20, 0x73, 0x86, 0xd5, 0x71, 0x22, 0xd7, 0x84, 0x82, 0xd1, 0x24, 0x77, 0xd3, 0x80, 0x75, 0x26, 0xcb, 0x98, 0x6d, 0x3e, 0x9a, 0xc9, 0x3c, 0x6f, 0x69, 0x3a, 0xcf, 0x9c, 0x38, 0x6b, 0x9e, 0xcd, 0x92, 0xc1, 0x34, 0x67, 0xc3, 0x90, 0x65, 0x36, 0x30, 0x63, 0x96, 0xc5, 0x61, 0x32, 0xc7, 0x94, 0xf2, 0xa1, 0x54, 0x7, 0xa3, 0xf0, 0x5, 0x56, 0x50, 0x3, 0xf6, 0xa5, 0x1, 0x52, 0xa7, 0xf4, 0xab, 0xf8, 0xd, 0x5e, 0xfa, 0xa9, 0x5c, 0xf, 0x9, 0x5a, 0xaf, 0xfc, 0x58, 0xb, 0xfe, 0xad, 0x40, 0x13, 0xe6, 0xb5, 0x11, 0x42, 0xb7, 0xe4, 0xe2, 0xb1, 0x44, 0x17, 0xb3, 0xe0, 0x15, 0x46, 0x19, 0x4a, 0xbf, 0xec, 0x48, 0x1b, 0xee, 0xbd, 0xbb, 0xe8, 0x1d, 0x4e, 0xea, 0xb9, 0x4c, 0x1f, 0x8b, 0xd8, 0x2d, 0x7e, 0xda, 0x89, 0x7c, 0x2f, 0x29, 0x7a, 0x8f, 0xdc, 0x78, 0x2b, 0xde, 0x8d, 0xd2, 0x81, 0x74, 0x27, 0x83, 0xd0, 0x25, 0x76, 0x70, 0x23, 0xd6, 0x85, 0x21, 0x72, 0x87, 0xd4, 0x39, 0x6a, 0x9f, 0xcc, 0x68, 0x3b, 0xce, 0x9d, 0x9b, 0xc8, 0x3d, 0x6e, 0xca, 0x99, 0x6c, 0x3f, 0x60, 0x33, 0xc6, 0x95, 0x31, 0x62, 0x97, 0xc4, 0xc2, 0x91, 0x64, 0x37, 0x93, 0xc0, 0x35, 0x66}, - {0x0, 0x54, 0xa8, 0xfc, 0x4d, 0x19, 0xe5, 0xb1, 0x9a, 0xce, 0x32, 0x66, 0xd7, 0x83, 0x7f, 0x2b, 0x29, 0x7d, 0x81, 0xd5, 0x64, 0x30, 0xcc, 0x98, 0xb3, 0xe7, 0x1b, 0x4f, 0xfe, 0xaa, 0x56, 0x2, 0x52, 0x6, 0xfa, 0xae, 0x1f, 0x4b, 0xb7, 0xe3, 0xc8, 0x9c, 0x60, 0x34, 0x85, 0xd1, 0x2d, 0x79, 0x7b, 0x2f, 0xd3, 0x87, 0x36, 0x62, 0x9e, 0xca, 0xe1, 0xb5, 0x49, 0x1d, 0xac, 0xf8, 0x4, 0x50, 0xa4, 0xf0, 0xc, 0x58, 0xe9, 0xbd, 0x41, 0x15, 0x3e, 0x6a, 0x96, 0xc2, 0x73, 0x27, 0xdb, 0x8f, 0x8d, 0xd9, 0x25, 0x71, 0xc0, 0x94, 0x68, 0x3c, 0x17, 0x43, 0xbf, 0xeb, 0x5a, 0xe, 0xf2, 0xa6, 0xf6, 0xa2, 0x5e, 0xa, 0xbb, 0xef, 0x13, 0x47, 0x6c, 0x38, 0xc4, 0x90, 0x21, 0x75, 0x89, 0xdd, 0xdf, 0x8b, 0x77, 0x23, 0x92, 0xc6, 0x3a, 0x6e, 0x45, 0x11, 0xed, 0xb9, 0x8, 0x5c, 0xa0, 0xf4, 0x55, 0x1, 0xfd, 0xa9, 0x18, 0x4c, 0xb0, 0xe4, 0xcf, 0x9b, 0x67, 0x33, 0x82, 0xd6, 0x2a, 0x7e, 0x7c, 0x28, 0xd4, 0x80, 0x31, 0x65, 0x99, 0xcd, 0xe6, 0xb2, 0x4e, 0x1a, 0xab, 0xff, 0x3, 0x57, 0x7, 0x53, 0xaf, 0xfb, 0x4a, 0x1e, 0xe2, 0xb6, 0x9d, 0xc9, 0x35, 0x61, 0xd0, 0x84, 0x78, 0x2c, 0x2e, 0x7a, 0x86, 0xd2, 0x63, 0x37, 0xcb, 0x9f, 0xb4, 0xe0, 0x1c, 0x48, 0xf9, 0xad, 0x51, 0x5, 0xf1, 0xa5, 0x59, 0xd, 0xbc, 0xe8, 0x14, 0x40, 0x6b, 0x3f, 0xc3, 0x97, 0x26, 0x72, 0x8e, 0xda, 0xd8, 0x8c, 0x70, 0x24, 0x95, 0xc1, 0x3d, 0x69, 0x42, 0x16, 0xea, 0xbe, 0xf, 0x5b, 0xa7, 0xf3, 0xa3, 0xf7, 0xb, 0x5f, 0xee, 0xba, 0x46, 0x12, 0x39, 0x6d, 0x91, 0xc5, 0x74, 0x20, 0xdc, 0x88, 0x8a, 0xde, 0x22, 0x76, 0xc7, 0x93, 0x6f, 0x3b, 0x10, 0x44, 0xb8, 0xec, 0x5d, 0x9, 0xf5, 0xa1}, - {0x0, 0x55, 0xaa, 0xff, 0x49, 0x1c, 0xe3, 0xb6, 0x92, 0xc7, 0x38, 0x6d, 0xdb, 0x8e, 0x71, 0x24, 0x39, 0x6c, 0x93, 0xc6, 0x70, 0x25, 0xda, 0x8f, 0xab, 0xfe, 0x1, 0x54, 0xe2, 0xb7, 0x48, 0x1d, 0x72, 0x27, 0xd8, 0x8d, 0x3b, 0x6e, 0x91, 0xc4, 0xe0, 0xb5, 0x4a, 0x1f, 0xa9, 0xfc, 0x3, 0x56, 0x4b, 0x1e, 0xe1, 0xb4, 0x2, 0x57, 0xa8, 0xfd, 0xd9, 0x8c, 0x73, 0x26, 0x90, 0xc5, 0x3a, 0x6f, 0xe4, 0xb1, 0x4e, 0x1b, 0xad, 0xf8, 0x7, 0x52, 0x76, 0x23, 0xdc, 0x89, 0x3f, 0x6a, 0x95, 0xc0, 0xdd, 0x88, 0x77, 0x22, 0x94, 0xc1, 0x3e, 0x6b, 0x4f, 0x1a, 0xe5, 0xb0, 0x6, 0x53, 0xac, 0xf9, 0x96, 0xc3, 0x3c, 0x69, 0xdf, 0x8a, 0x75, 0x20, 0x4, 0x51, 0xae, 0xfb, 0x4d, 0x18, 0xe7, 0xb2, 0xaf, 0xfa, 0x5, 0x50, 0xe6, 0xb3, 0x4c, 0x19, 0x3d, 0x68, 0x97, 0xc2, 0x74, 0x21, 0xde, 0x8b, 0xd5, 0x80, 0x7f, 0x2a, 0x9c, 0xc9, 0x36, 0x63, 0x47, 0x12, 0xed, 0xb8, 0xe, 0x5b, 0xa4, 0xf1, 0xec, 0xb9, 0x46, 0x13, 0xa5, 0xf0, 0xf, 0x5a, 0x7e, 0x2b, 0xd4, 0x81, 0x37, 0x62, 0x9d, 0xc8, 0xa7, 0xf2, 0xd, 0x58, 0xee, 0xbb, 0x44, 0x11, 0x35, 0x60, 0x9f, 0xca, 0x7c, 0x29, 0xd6, 0x83, 0x9e, 0xcb, 0x34, 0x61, 0xd7, 0x82, 0x7d, 0x28, 0xc, 0x59, 0xa6, 0xf3, 0x45, 0x10, 0xef, 0xba, 0x31, 0x64, 0x9b, 0xce, 0x78, 0x2d, 0xd2, 0x87, 0xa3, 0xf6, 0x9, 0x5c, 0xea, 0xbf, 0x40, 0x15, 0x8, 0x5d, 0xa2, 0xf7, 0x41, 0x14, 0xeb, 0xbe, 0x9a, 0xcf, 0x30, 0x65, 0xd3, 0x86, 0x79, 0x2c, 0x43, 0x16, 0xe9, 0xbc, 0xa, 0x5f, 0xa0, 0xf5, 0xd1, 0x84, 0x7b, 0x2e, 0x98, 0xcd, 0x32, 0x67, 0x7a, 0x2f, 0xd0, 0x85, 0x33, 0x66, 0x99, 0xcc, 0xe8, 0xbd, 0x42, 0x17, 0xa1, 0xf4, 0xb, 0x5e}, - {0x0, 0x56, 0xac, 0xfa, 0x45, 0x13, 0xe9, 0xbf, 0x8a, 0xdc, 0x26, 0x70, 0xcf, 0x99, 0x63, 0x35, 0x9, 0x5f, 0xa5, 0xf3, 0x4c, 0x1a, 0xe0, 0xb6, 0x83, 0xd5, 0x2f, 0x79, 0xc6, 0x90, 0x6a, 0x3c, 0x12, 0x44, 0xbe, 0xe8, 0x57, 0x1, 0xfb, 0xad, 0x98, 0xce, 0x34, 0x62, 0xdd, 0x8b, 0x71, 0x27, 0x1b, 0x4d, 0xb7, 0xe1, 0x5e, 0x8, 0xf2, 0xa4, 0x91, 0xc7, 0x3d, 0x6b, 0xd4, 0x82, 0x78, 0x2e, 0x24, 0x72, 0x88, 0xde, 0x61, 0x37, 0xcd, 0x9b, 0xae, 0xf8, 0x2, 0x54, 0xeb, 0xbd, 0x47, 0x11, 0x2d, 0x7b, 0x81, 0xd7, 0x68, 0x3e, 0xc4, 0x92, 0xa7, 0xf1, 0xb, 0x5d, 0xe2, 0xb4, 0x4e, 0x18, 0x36, 0x60, 0x9a, 0xcc, 0x73, 0x25, 0xdf, 0x89, 0xbc, 0xea, 0x10, 0x46, 0xf9, 0xaf, 0x55, 0x3, 0x3f, 0x69, 0x93, 0xc5, 0x7a, 0x2c, 0xd6, 0x80, 0xb5, 0xe3, 0x19, 0x4f, 0xf0, 0xa6, 0x5c, 0xa, 0x48, 0x1e, 0xe4, 0xb2, 0xd, 0x5b, 0xa1, 0xf7, 0xc2, 0x94, 0x6e, 0x38, 0x87, 0xd1, 0x2b, 0x7d, 0x41, 0x17, 0xed, 0xbb, 0x4, 0x52, 0xa8, 0xfe, 0xcb, 0x9d, 0x67, 0x31, 0x8e, 0xd8, 0x22, 0x74, 0x5a, 0xc, 0xf6, 0xa0, 0x1f, 0x49, 0xb3, 0xe5, 0xd0, 0x86, 0x7c, 0x2a, 0x95, 0xc3, 0x39, 0x6f, 0x53, 0x5, 0xff, 0xa9, 0x16, 0x40, 0xba, 0xec, 0xd9, 0x8f, 0x75, 0x23, 0x9c, 0xca, 0x30, 0x66, 0x6c, 0x3a, 0xc0, 0x96, 0x29, 0x7f, 0x85, 0xd3, 0xe6, 0xb0, 0x4a, 0x1c, 0xa3, 0xf5, 0xf, 0x59, 0x65, 0x33, 0xc9, 0x9f, 0x20, 0x76, 0x8c, 0xda, 0xef, 0xb9, 0x43, 0x15, 0xaa, 0xfc, 0x6, 0x50, 0x7e, 0x28, 0xd2, 0x84, 0x3b, 0x6d, 0x97, 0xc1, 0xf4, 0xa2, 0x58, 0xe, 0xb1, 0xe7, 0x1d, 0x4b, 0x77, 0x21, 0xdb, 0x8d, 0x32, 0x64, 0x9e, 0xc8, 0xfd, 0xab, 0x51, 0x7, 0xb8, 0xee, 0x14, 0x42}, - {0x0, 0x57, 0xae, 0xf9, 0x41, 0x16, 0xef, 0xb8, 0x82, 0xd5, 0x2c, 0x7b, 0xc3, 0x94, 0x6d, 0x3a, 0x19, 0x4e, 0xb7, 0xe0, 0x58, 0xf, 0xf6, 0xa1, 0x9b, 0xcc, 0x35, 0x62, 0xda, 0x8d, 0x74, 0x23, 0x32, 0x65, 0x9c, 0xcb, 0x73, 0x24, 0xdd, 0x8a, 0xb0, 0xe7, 0x1e, 0x49, 0xf1, 0xa6, 0x5f, 0x8, 0x2b, 0x7c, 0x85, 0xd2, 0x6a, 0x3d, 0xc4, 0x93, 0xa9, 0xfe, 0x7, 0x50, 0xe8, 0xbf, 0x46, 0x11, 0x64, 0x33, 0xca, 0x9d, 0x25, 0x72, 0x8b, 0xdc, 0xe6, 0xb1, 0x48, 0x1f, 0xa7, 0xf0, 0x9, 0x5e, 0x7d, 0x2a, 0xd3, 0x84, 0x3c, 0x6b, 0x92, 0xc5, 0xff, 0xa8, 0x51, 0x6, 0xbe, 0xe9, 0x10, 0x47, 0x56, 0x1, 0xf8, 0xaf, 0x17, 0x40, 0xb9, 0xee, 0xd4, 0x83, 0x7a, 0x2d, 0x95, 0xc2, 0x3b, 0x6c, 0x4f, 0x18, 0xe1, 0xb6, 0xe, 0x59, 0xa0, 0xf7, 0xcd, 0x9a, 0x63, 0x34, 0x8c, 0xdb, 0x22, 0x75, 0xc8, 0x9f, 0x66, 0x31, 0x89, 0xde, 0x27, 0x70, 0x4a, 0x1d, 0xe4, 0xb3, 0xb, 0x5c, 0xa5, 0xf2, 0xd1, 0x86, 0x7f, 0x28, 0x90, 0xc7, 0x3e, 0x69, 0x53, 0x4, 0xfd, 0xaa, 0x12, 0x45, 0xbc, 0xeb, 0xfa, 0xad, 0x54, 0x3, 0xbb, 0xec, 0x15, 0x42, 0x78, 0x2f, 0xd6, 0x81, 0x39, 0x6e, 0x97, 0xc0, 0xe3, 0xb4, 0x4d, 0x1a, 0xa2, 0xf5, 0xc, 0x5b, 0x61, 0x36, 0xcf, 0x98, 0x20, 0x77, 0x8e, 0xd9, 0xac, 0xfb, 0x2, 0x55, 0xed, 0xba, 0x43, 0x14, 0x2e, 0x79, 0x80, 0xd7, 0x6f, 0x38, 0xc1, 0x96, 0xb5, 0xe2, 0x1b, 0x4c, 0xf4, 0xa3, 0x5a, 0xd, 0x37, 0x60, 0x99, 0xce, 0x76, 0x21, 0xd8, 0x8f, 0x9e, 0xc9, 0x30, 0x67, 0xdf, 0x88, 0x71, 0x26, 0x1c, 0x4b, 0xb2, 0xe5, 0x5d, 0xa, 0xf3, 0xa4, 0x87, 0xd0, 0x29, 0x7e, 0xc6, 0x91, 0x68, 0x3f, 0x5, 0x52, 0xab, 0xfc, 0x44, 0x13, 0xea, 0xbd}, - {0x0, 0x58, 0xb0, 0xe8, 0x7d, 0x25, 0xcd, 0x95, 0xfa, 0xa2, 0x4a, 0x12, 0x87, 0xdf, 0x37, 0x6f, 0xe9, 0xb1, 0x59, 0x1, 0x94, 0xcc, 0x24, 0x7c, 0x13, 0x4b, 0xa3, 0xfb, 0x6e, 0x36, 0xde, 0x86, 0xcf, 0x97, 0x7f, 0x27, 0xb2, 0xea, 0x2, 0x5a, 0x35, 0x6d, 0x85, 0xdd, 0x48, 0x10, 0xf8, 0xa0, 0x26, 0x7e, 0x96, 0xce, 0x5b, 0x3, 0xeb, 0xb3, 0xdc, 0x84, 0x6c, 0x34, 0xa1, 0xf9, 0x11, 0x49, 0x83, 0xdb, 0x33, 0x6b, 0xfe, 0xa6, 0x4e, 0x16, 0x79, 0x21, 0xc9, 0x91, 0x4, 0x5c, 0xb4, 0xec, 0x6a, 0x32, 0xda, 0x82, 0x17, 0x4f, 0xa7, 0xff, 0x90, 0xc8, 0x20, 0x78, 0xed, 0xb5, 0x5d, 0x5, 0x4c, 0x14, 0xfc, 0xa4, 0x31, 0x69, 0x81, 0xd9, 0xb6, 0xee, 0x6, 0x5e, 0xcb, 0x93, 0x7b, 0x23, 0xa5, 0xfd, 0x15, 0x4d, 0xd8, 0x80, 0x68, 0x30, 0x5f, 0x7, 0xef, 0xb7, 0x22, 0x7a, 0x92, 0xca, 0x1b, 0x43, 0xab, 0xf3, 0x66, 0x3e, 0xd6, 0x8e, 0xe1, 0xb9, 0x51, 0x9, 0x9c, 0xc4, 0x2c, 0x74, 0xf2, 0xaa, 0x42, 0x1a, 0x8f, 0xd7, 0x3f, 0x67, 0x8, 0x50, 0xb8, 0xe0, 0x75, 0x2d, 0xc5, 0x9d, 0xd4, 0x8c, 0x64, 0x3c, 0xa9, 0xf1, 0x19, 0x41, 0x2e, 0x76, 0x9e, 0xc6, 0x53, 0xb, 0xe3, 0xbb, 0x3d, 0x65, 0x8d, 0xd5, 0x40, 0x18, 0xf0, 0xa8, 0xc7, 0x9f, 0x77, 0x2f, 0xba, 0xe2, 0xa, 0x52, 0x98, 0xc0, 0x28, 0x70, 0xe5, 0xbd, 0x55, 0xd, 0x62, 0x3a, 0xd2, 0x8a, 0x1f, 0x47, 0xaf, 0xf7, 0x71, 0x29, 0xc1, 0x99, 0xc, 0x54, 0xbc, 0xe4, 0x8b, 0xd3, 0x3b, 0x63, 0xf6, 0xae, 0x46, 0x1e, 0x57, 0xf, 0xe7, 0xbf, 0x2a, 0x72, 0x9a, 0xc2, 0xad, 0xf5, 0x1d, 0x45, 0xd0, 0x88, 0x60, 0x38, 0xbe, 0xe6, 0xe, 0x56, 0xc3, 0x9b, 0x73, 0x2b, 0x44, 0x1c, 0xf4, 0xac, 0x39, 0x61, 0x89, 0xd1}, - {0x0, 0x59, 0xb2, 0xeb, 0x79, 0x20, 0xcb, 0x92, 0xf2, 0xab, 0x40, 0x19, 0x8b, 0xd2, 0x39, 0x60, 0xf9, 0xa0, 0x4b, 0x12, 0x80, 0xd9, 0x32, 0x6b, 0xb, 0x52, 0xb9, 0xe0, 0x72, 0x2b, 0xc0, 0x99, 0xef, 0xb6, 0x5d, 0x4, 0x96, 0xcf, 0x24, 0x7d, 0x1d, 0x44, 0xaf, 0xf6, 0x64, 0x3d, 0xd6, 0x8f, 0x16, 0x4f, 0xa4, 0xfd, 0x6f, 0x36, 0xdd, 0x84, 0xe4, 0xbd, 0x56, 0xf, 0x9d, 0xc4, 0x2f, 0x76, 0xc3, 0x9a, 0x71, 0x28, 0xba, 0xe3, 0x8, 0x51, 0x31, 0x68, 0x83, 0xda, 0x48, 0x11, 0xfa, 0xa3, 0x3a, 0x63, 0x88, 0xd1, 0x43, 0x1a, 0xf1, 0xa8, 0xc8, 0x91, 0x7a, 0x23, 0xb1, 0xe8, 0x3, 0x5a, 0x2c, 0x75, 0x9e, 0xc7, 0x55, 0xc, 0xe7, 0xbe, 0xde, 0x87, 0x6c, 0x35, 0xa7, 0xfe, 0x15, 0x4c, 0xd5, 0x8c, 0x67, 0x3e, 0xac, 0xf5, 0x1e, 0x47, 0x27, 0x7e, 0x95, 0xcc, 0x5e, 0x7, 0xec, 0xb5, 0x9b, 0xc2, 0x29, 0x70, 0xe2, 0xbb, 0x50, 0x9, 0x69, 0x30, 0xdb, 0x82, 0x10, 0x49, 0xa2, 0xfb, 0x62, 0x3b, 0xd0, 0x89, 0x1b, 0x42, 0xa9, 0xf0, 0x90, 0xc9, 0x22, 0x7b, 0xe9, 0xb0, 0x5b, 0x2, 0x74, 0x2d, 0xc6, 0x9f, 0xd, 0x54, 0xbf, 0xe6, 0x86, 0xdf, 0x34, 0x6d, 0xff, 0xa6, 0x4d, 0x14, 0x8d, 0xd4, 0x3f, 0x66, 0xf4, 0xad, 0x46, 0x1f, 0x7f, 0x26, 0xcd, 0x94, 0x6, 0x5f, 0xb4, 0xed, 0x58, 0x1, 0xea, 0xb3, 0x21, 0x78, 0x93, 0xca, 0xaa, 0xf3, 0x18, 0x41, 0xd3, 0x8a, 0x61, 0x38, 0xa1, 0xf8, 0x13, 0x4a, 0xd8, 0x81, 0x6a, 0x33, 0x53, 0xa, 0xe1, 0xb8, 0x2a, 0x73, 0x98, 0xc1, 0xb7, 0xee, 0x5, 0x5c, 0xce, 0x97, 0x7c, 0x25, 0x45, 0x1c, 0xf7, 0xae, 0x3c, 0x65, 0x8e, 0xd7, 0x4e, 0x17, 0xfc, 0xa5, 0x37, 0x6e, 0x85, 0xdc, 0xbc, 0xe5, 0xe, 0x57, 0xc5, 0x9c, 0x77, 0x2e}, - {0x0, 0x5a, 0xb4, 0xee, 0x75, 0x2f, 0xc1, 0x9b, 0xea, 0xb0, 0x5e, 0x4, 0x9f, 0xc5, 0x2b, 0x71, 0xc9, 0x93, 0x7d, 0x27, 0xbc, 0xe6, 0x8, 0x52, 0x23, 0x79, 0x97, 0xcd, 0x56, 0xc, 0xe2, 0xb8, 0x8f, 0xd5, 0x3b, 0x61, 0xfa, 0xa0, 0x4e, 0x14, 0x65, 0x3f, 0xd1, 0x8b, 0x10, 0x4a, 0xa4, 0xfe, 0x46, 0x1c, 0xf2, 0xa8, 0x33, 0x69, 0x87, 0xdd, 0xac, 0xf6, 0x18, 0x42, 0xd9, 0x83, 0x6d, 0x37, 0x3, 0x59, 0xb7, 0xed, 0x76, 0x2c, 0xc2, 0x98, 0xe9, 0xb3, 0x5d, 0x7, 0x9c, 0xc6, 0x28, 0x72, 0xca, 0x90, 0x7e, 0x24, 0xbf, 0xe5, 0xb, 0x51, 0x20, 0x7a, 0x94, 0xce, 0x55, 0xf, 0xe1, 0xbb, 0x8c, 0xd6, 0x38, 0x62, 0xf9, 0xa3, 0x4d, 0x17, 0x66, 0x3c, 0xd2, 0x88, 0x13, 0x49, 0xa7, 0xfd, 0x45, 0x1f, 0xf1, 0xab, 0x30, 0x6a, 0x84, 0xde, 0xaf, 0xf5, 0x1b, 0x41, 0xda, 0x80, 0x6e, 0x34, 0x6, 0x5c, 0xb2, 0xe8, 0x73, 0x29, 0xc7, 0x9d, 0xec, 0xb6, 0x58, 0x2, 0x99, 0xc3, 0x2d, 0x77, 0xcf, 0x95, 0x7b, 0x21, 0xba, 0xe0, 0xe, 0x54, 0x25, 0x7f, 0x91, 0xcb, 0x50, 0xa, 0xe4, 0xbe, 0x89, 0xd3, 0x3d, 0x67, 0xfc, 0xa6, 0x48, 0x12, 0x63, 0x39, 0xd7, 0x8d, 0x16, 0x4c, 0xa2, 0xf8, 0x40, 0x1a, 0xf4, 0xae, 0x35, 0x6f, 0x81, 0xdb, 0xaa, 0xf0, 0x1e, 0x44, 0xdf, 0x85, 0x6b, 0x31, 0x5, 0x5f, 0xb1, 0xeb, 0x70, 0x2a, 0xc4, 0x9e, 0xef, 0xb5, 0x5b, 0x1, 0x9a, 0xc0, 0x2e, 0x74, 0xcc, 0x96, 0x78, 0x22, 0xb9, 0xe3, 0xd, 0x57, 0x26, 0x7c, 0x92, 0xc8, 0x53, 0x9, 0xe7, 0xbd, 0x8a, 0xd0, 0x3e, 0x64, 0xff, 0xa5, 0x4b, 0x11, 0x60, 0x3a, 0xd4, 0x8e, 0x15, 0x4f, 0xa1, 0xfb, 0x43, 0x19, 0xf7, 0xad, 0x36, 0x6c, 0x82, 0xd8, 0xa9, 0xf3, 0x1d, 0x47, 0xdc, 0x86, 0x68, 0x32}, - {0x0, 0x5b, 0xb6, 0xed, 0x71, 0x2a, 0xc7, 0x9c, 0xe2, 0xb9, 0x54, 0xf, 0x93, 0xc8, 0x25, 0x7e, 0xd9, 0x82, 0x6f, 0x34, 0xa8, 0xf3, 0x1e, 0x45, 0x3b, 0x60, 0x8d, 0xd6, 0x4a, 0x11, 0xfc, 0xa7, 0xaf, 0xf4, 0x19, 0x42, 0xde, 0x85, 0x68, 0x33, 0x4d, 0x16, 0xfb, 0xa0, 0x3c, 0x67, 0x8a, 0xd1, 0x76, 0x2d, 0xc0, 0x9b, 0x7, 0x5c, 0xb1, 0xea, 0x94, 0xcf, 0x22, 0x79, 0xe5, 0xbe, 0x53, 0x8, 0x43, 0x18, 0xf5, 0xae, 0x32, 0x69, 0x84, 0xdf, 0xa1, 0xfa, 0x17, 0x4c, 0xd0, 0x8b, 0x66, 0x3d, 0x9a, 0xc1, 0x2c, 0x77, 0xeb, 0xb0, 0x5d, 0x6, 0x78, 0x23, 0xce, 0x95, 0x9, 0x52, 0xbf, 0xe4, 0xec, 0xb7, 0x5a, 0x1, 0x9d, 0xc6, 0x2b, 0x70, 0xe, 0x55, 0xb8, 0xe3, 0x7f, 0x24, 0xc9, 0x92, 0x35, 0x6e, 0x83, 0xd8, 0x44, 0x1f, 0xf2, 0xa9, 0xd7, 0x8c, 0x61, 0x3a, 0xa6, 0xfd, 0x10, 0x4b, 0x86, 0xdd, 0x30, 0x6b, 0xf7, 0xac, 0x41, 0x1a, 0x64, 0x3f, 0xd2, 0x89, 0x15, 0x4e, 0xa3, 0xf8, 0x5f, 0x4, 0xe9, 0xb2, 0x2e, 0x75, 0x98, 0xc3, 0xbd, 0xe6, 0xb, 0x50, 0xcc, 0x97, 0x7a, 0x21, 0x29, 0x72, 0x9f, 0xc4, 0x58, 0x3, 0xee, 0xb5, 0xcb, 0x90, 0x7d, 0x26, 0xba, 0xe1, 0xc, 0x57, 0xf0, 0xab, 0x46, 0x1d, 0x81, 0xda, 0x37, 0x6c, 0x12, 0x49, 0xa4, 0xff, 0x63, 0x38, 0xd5, 0x8e, 0xc5, 0x9e, 0x73, 0x28, 0xb4, 0xef, 0x2, 0x59, 0x27, 0x7c, 0x91, 0xca, 0x56, 0xd, 0xe0, 0xbb, 0x1c, 0x47, 0xaa, 0xf1, 0x6d, 0x36, 0xdb, 0x80, 0xfe, 0xa5, 0x48, 0x13, 0x8f, 0xd4, 0x39, 0x62, 0x6a, 0x31, 0xdc, 0x87, 0x1b, 0x40, 0xad, 0xf6, 0x88, 0xd3, 0x3e, 0x65, 0xf9, 0xa2, 0x4f, 0x14, 0xb3, 0xe8, 0x5, 0x5e, 0xc2, 0x99, 0x74, 0x2f, 0x51, 0xa, 0xe7, 0xbc, 0x20, 0x7b, 0x96, 0xcd}, - {0x0, 0x5c, 0xb8, 0xe4, 0x6d, 0x31, 0xd5, 0x89, 0xda, 0x86, 0x62, 0x3e, 0xb7, 0xeb, 0xf, 0x53, 0xa9, 0xf5, 0x11, 0x4d, 0xc4, 0x98, 0x7c, 0x20, 0x73, 0x2f, 0xcb, 0x97, 0x1e, 0x42, 0xa6, 0xfa, 0x4f, 0x13, 0xf7, 0xab, 0x22, 0x7e, 0x9a, 0xc6, 0x95, 0xc9, 0x2d, 0x71, 0xf8, 0xa4, 0x40, 0x1c, 0xe6, 0xba, 0x5e, 0x2, 0x8b, 0xd7, 0x33, 0x6f, 0x3c, 0x60, 0x84, 0xd8, 0x51, 0xd, 0xe9, 0xb5, 0x9e, 0xc2, 0x26, 0x7a, 0xf3, 0xaf, 0x4b, 0x17, 0x44, 0x18, 0xfc, 0xa0, 0x29, 0x75, 0x91, 0xcd, 0x37, 0x6b, 0x8f, 0xd3, 0x5a, 0x6, 0xe2, 0xbe, 0xed, 0xb1, 0x55, 0x9, 0x80, 0xdc, 0x38, 0x64, 0xd1, 0x8d, 0x69, 0x35, 0xbc, 0xe0, 0x4, 0x58, 0xb, 0x57, 0xb3, 0xef, 0x66, 0x3a, 0xde, 0x82, 0x78, 0x24, 0xc0, 0x9c, 0x15, 0x49, 0xad, 0xf1, 0xa2, 0xfe, 0x1a, 0x46, 0xcf, 0x93, 0x77, 0x2b, 0x21, 0x7d, 0x99, 0xc5, 0x4c, 0x10, 0xf4, 0xa8, 0xfb, 0xa7, 0x43, 0x1f, 0x96, 0xca, 0x2e, 0x72, 0x88, 0xd4, 0x30, 0x6c, 0xe5, 0xb9, 0x5d, 0x1, 0x52, 0xe, 0xea, 0xb6, 0x3f, 0x63, 0x87, 0xdb, 0x6e, 0x32, 0xd6, 0x8a, 0x3, 0x5f, 0xbb, 0xe7, 0xb4, 0xe8, 0xc, 0x50, 0xd9, 0x85, 0x61, 0x3d, 0xc7, 0x9b, 0x7f, 0x23, 0xaa, 0xf6, 0x12, 0x4e, 0x1d, 0x41, 0xa5, 0xf9, 0x70, 0x2c, 0xc8, 0x94, 0xbf, 0xe3, 0x7, 0x5b, 0xd2, 0x8e, 0x6a, 0x36, 0x65, 0x39, 0xdd, 0x81, 0x8, 0x54, 0xb0, 0xec, 0x16, 0x4a, 0xae, 0xf2, 0x7b, 0x27, 0xc3, 0x9f, 0xcc, 0x90, 0x74, 0x28, 0xa1, 0xfd, 0x19, 0x45, 0xf0, 0xac, 0x48, 0x14, 0x9d, 0xc1, 0x25, 0x79, 0x2a, 0x76, 0x92, 0xce, 0x47, 0x1b, 0xff, 0xa3, 0x59, 0x5, 0xe1, 0xbd, 0x34, 0x68, 0x8c, 0xd0, 0x83, 0xdf, 0x3b, 0x67, 0xee, 0xb2, 0x56, 0xa}, - {0x0, 0x5d, 0xba, 0xe7, 0x69, 0x34, 0xd3, 0x8e, 0xd2, 0x8f, 0x68, 0x35, 0xbb, 0xe6, 0x1, 0x5c, 0xb9, 0xe4, 0x3, 0x5e, 0xd0, 0x8d, 0x6a, 0x37, 0x6b, 0x36, 0xd1, 0x8c, 0x2, 0x5f, 0xb8, 0xe5, 0x6f, 0x32, 0xd5, 0x88, 0x6, 0x5b, 0xbc, 0xe1, 0xbd, 0xe0, 0x7, 0x5a, 0xd4, 0x89, 0x6e, 0x33, 0xd6, 0x8b, 0x6c, 0x31, 0xbf, 0xe2, 0x5, 0x58, 0x4, 0x59, 0xbe, 0xe3, 0x6d, 0x30, 0xd7, 0x8a, 0xde, 0x83, 0x64, 0x39, 0xb7, 0xea, 0xd, 0x50, 0xc, 0x51, 0xb6, 0xeb, 0x65, 0x38, 0xdf, 0x82, 0x67, 0x3a, 0xdd, 0x80, 0xe, 0x53, 0xb4, 0xe9, 0xb5, 0xe8, 0xf, 0x52, 0xdc, 0x81, 0x66, 0x3b, 0xb1, 0xec, 0xb, 0x56, 0xd8, 0x85, 0x62, 0x3f, 0x63, 0x3e, 0xd9, 0x84, 0xa, 0x57, 0xb0, 0xed, 0x8, 0x55, 0xb2, 0xef, 0x61, 0x3c, 0xdb, 0x86, 0xda, 0x87, 0x60, 0x3d, 0xb3, 0xee, 0x9, 0x54, 0xa1, 0xfc, 0x1b, 0x46, 0xc8, 0x95, 0x72, 0x2f, 0x73, 0x2e, 0xc9, 0x94, 0x1a, 0x47, 0xa0, 0xfd, 0x18, 0x45, 0xa2, 0xff, 0x71, 0x2c, 0xcb, 0x96, 0xca, 0x97, 0x70, 0x2d, 0xa3, 0xfe, 0x19, 0x44, 0xce, 0x93, 0x74, 0x29, 0xa7, 0xfa, 0x1d, 0x40, 0x1c, 0x41, 0xa6, 0xfb, 0x75, 0x28, 0xcf, 0x92, 0x77, 0x2a, 0xcd, 0x90, 0x1e, 0x43, 0xa4, 0xf9, 0xa5, 0xf8, 0x1f, 0x42, 0xcc, 0x91, 0x76, 0x2b, 0x7f, 0x22, 0xc5, 0x98, 0x16, 0x4b, 0xac, 0xf1, 0xad, 0xf0, 0x17, 0x4a, 0xc4, 0x99, 0x7e, 0x23, 0xc6, 0x9b, 0x7c, 0x21, 0xaf, 0xf2, 0x15, 0x48, 0x14, 0x49, 0xae, 0xf3, 0x7d, 0x20, 0xc7, 0x9a, 0x10, 0x4d, 0xaa, 0xf7, 0x79, 0x24, 0xc3, 0x9e, 0xc2, 0x9f, 0x78, 0x25, 0xab, 0xf6, 0x11, 0x4c, 0xa9, 0xf4, 0x13, 0x4e, 0xc0, 0x9d, 0x7a, 0x27, 0x7b, 0x26, 0xc1, 0x9c, 0x12, 0x4f, 0xa8, 0xf5}, - {0x0, 0x5e, 0xbc, 0xe2, 0x65, 0x3b, 0xd9, 0x87, 0xca, 0x94, 0x76, 0x28, 0xaf, 0xf1, 0x13, 0x4d, 0x89, 0xd7, 0x35, 0x6b, 0xec, 0xb2, 0x50, 0xe, 0x43, 0x1d, 0xff, 0xa1, 0x26, 0x78, 0x9a, 0xc4, 0xf, 0x51, 0xb3, 0xed, 0x6a, 0x34, 0xd6, 0x88, 0xc5, 0x9b, 0x79, 0x27, 0xa0, 0xfe, 0x1c, 0x42, 0x86, 0xd8, 0x3a, 0x64, 0xe3, 0xbd, 0x5f, 0x1, 0x4c, 0x12, 0xf0, 0xae, 0x29, 0x77, 0x95, 0xcb, 0x1e, 0x40, 0xa2, 0xfc, 0x7b, 0x25, 0xc7, 0x99, 0xd4, 0x8a, 0x68, 0x36, 0xb1, 0xef, 0xd, 0x53, 0x97, 0xc9, 0x2b, 0x75, 0xf2, 0xac, 0x4e, 0x10, 0x5d, 0x3, 0xe1, 0xbf, 0x38, 0x66, 0x84, 0xda, 0x11, 0x4f, 0xad, 0xf3, 0x74, 0x2a, 0xc8, 0x96, 0xdb, 0x85, 0x67, 0x39, 0xbe, 0xe0, 0x2, 0x5c, 0x98, 0xc6, 0x24, 0x7a, 0xfd, 0xa3, 0x41, 0x1f, 0x52, 0xc, 0xee, 0xb0, 0x37, 0x69, 0x8b, 0xd5, 0x3c, 0x62, 0x80, 0xde, 0x59, 0x7, 0xe5, 0xbb, 0xf6, 0xa8, 0x4a, 0x14, 0x93, 0xcd, 0x2f, 0x71, 0xb5, 0xeb, 0x9, 0x57, 0xd0, 0x8e, 0x6c, 0x32, 0x7f, 0x21, 0xc3, 0x9d, 0x1a, 0x44, 0xa6, 0xf8, 0x33, 0x6d, 0x8f, 0xd1, 0x56, 0x8, 0xea, 0xb4, 0xf9, 0xa7, 0x45, 0x1b, 0x9c, 0xc2, 0x20, 0x7e, 0xba, 0xe4, 0x6, 0x58, 0xdf, 0x81, 0x63, 0x3d, 0x70, 0x2e, 0xcc, 0x92, 0x15, 0x4b, 0xa9, 0xf7, 0x22, 0x7c, 0x9e, 0xc0, 0x47, 0x19, 0xfb, 0xa5, 0xe8, 0xb6, 0x54, 0xa, 0x8d, 0xd3, 0x31, 0x6f, 0xab, 0xf5, 0x17, 0x49, 0xce, 0x90, 0x72, 0x2c, 0x61, 0x3f, 0xdd, 0x83, 0x4, 0x5a, 0xb8, 0xe6, 0x2d, 0x73, 0x91, 0xcf, 0x48, 0x16, 0xf4, 0xaa, 0xe7, 0xb9, 0x5b, 0x5, 0x82, 0xdc, 0x3e, 0x60, 0xa4, 0xfa, 0x18, 0x46, 0xc1, 0x9f, 0x7d, 0x23, 0x6e, 0x30, 0xd2, 0x8c, 0xb, 0x55, 0xb7, 0xe9}, - {0x0, 0x5f, 0xbe, 0xe1, 0x61, 0x3e, 0xdf, 0x80, 0xc2, 0x9d, 0x7c, 0x23, 0xa3, 0xfc, 0x1d, 0x42, 0x99, 0xc6, 0x27, 0x78, 0xf8, 0xa7, 0x46, 0x19, 0x5b, 0x4, 0xe5, 0xba, 0x3a, 0x65, 0x84, 0xdb, 0x2f, 0x70, 0x91, 0xce, 0x4e, 0x11, 0xf0, 0xaf, 0xed, 0xb2, 0x53, 0xc, 0x8c, 0xd3, 0x32, 0x6d, 0xb6, 0xe9, 0x8, 0x57, 0xd7, 0x88, 0x69, 0x36, 0x74, 0x2b, 0xca, 0x95, 0x15, 0x4a, 0xab, 0xf4, 0x5e, 0x1, 0xe0, 0xbf, 0x3f, 0x60, 0x81, 0xde, 0x9c, 0xc3, 0x22, 0x7d, 0xfd, 0xa2, 0x43, 0x1c, 0xc7, 0x98, 0x79, 0x26, 0xa6, 0xf9, 0x18, 0x47, 0x5, 0x5a, 0xbb, 0xe4, 0x64, 0x3b, 0xda, 0x85, 0x71, 0x2e, 0xcf, 0x90, 0x10, 0x4f, 0xae, 0xf1, 0xb3, 0xec, 0xd, 0x52, 0xd2, 0x8d, 0x6c, 0x33, 0xe8, 0xb7, 0x56, 0x9, 0x89, 0xd6, 0x37, 0x68, 0x2a, 0x75, 0x94, 0xcb, 0x4b, 0x14, 0xf5, 0xaa, 0xbc, 0xe3, 0x2, 0x5d, 0xdd, 0x82, 0x63, 0x3c, 0x7e, 0x21, 0xc0, 0x9f, 0x1f, 0x40, 0xa1, 0xfe, 0x25, 0x7a, 0x9b, 0xc4, 0x44, 0x1b, 0xfa, 0xa5, 0xe7, 0xb8, 0x59, 0x6, 0x86, 0xd9, 0x38, 0x67, 0x93, 0xcc, 0x2d, 0x72, 0xf2, 0xad, 0x4c, 0x13, 0x51, 0xe, 0xef, 0xb0, 0x30, 0x6f, 0x8e, 0xd1, 0xa, 0x55, 0xb4, 0xeb, 0x6b, 0x34, 0xd5, 0x8a, 0xc8, 0x97, 0x76, 0x29, 0xa9, 0xf6, 0x17, 0x48, 0xe2, 0xbd, 0x5c, 0x3, 0x83, 0xdc, 0x3d, 0x62, 0x20, 0x7f, 0x9e, 0xc1, 0x41, 0x1e, 0xff, 0xa0, 0x7b, 0x24, 0xc5, 0x9a, 0x1a, 0x45, 0xa4, 0xfb, 0xb9, 0xe6, 0x7, 0x58, 0xd8, 0x87, 0x66, 0x39, 0xcd, 0x92, 0x73, 0x2c, 0xac, 0xf3, 0x12, 0x4d, 0xf, 0x50, 0xb1, 0xee, 0x6e, 0x31, 0xd0, 0x8f, 0x54, 0xb, 0xea, 0xb5, 0x35, 0x6a, 0x8b, 0xd4, 0x96, 0xc9, 0x28, 0x77, 0xf7, 0xa8, 0x49, 0x16}, - {0x0, 0x60, 0xc0, 0xa0, 0x9d, 0xfd, 0x5d, 0x3d, 0x27, 0x47, 0xe7, 0x87, 0xba, 0xda, 0x7a, 0x1a, 0x4e, 0x2e, 0x8e, 0xee, 0xd3, 0xb3, 0x13, 0x73, 0x69, 0x9, 0xa9, 0xc9, 0xf4, 0x94, 0x34, 0x54, 0x9c, 0xfc, 0x5c, 0x3c, 0x1, 0x61, 0xc1, 0xa1, 0xbb, 0xdb, 0x7b, 0x1b, 0x26, 0x46, 0xe6, 0x86, 0xd2, 0xb2, 0x12, 0x72, 0x4f, 0x2f, 0x8f, 0xef, 0xf5, 0x95, 0x35, 0x55, 0x68, 0x8, 0xa8, 0xc8, 0x25, 0x45, 0xe5, 0x85, 0xb8, 0xd8, 0x78, 0x18, 0x2, 0x62, 0xc2, 0xa2, 0x9f, 0xff, 0x5f, 0x3f, 0x6b, 0xb, 0xab, 0xcb, 0xf6, 0x96, 0x36, 0x56, 0x4c, 0x2c, 0x8c, 0xec, 0xd1, 0xb1, 0x11, 0x71, 0xb9, 0xd9, 0x79, 0x19, 0x24, 0x44, 0xe4, 0x84, 0x9e, 0xfe, 0x5e, 0x3e, 0x3, 0x63, 0xc3, 0xa3, 0xf7, 0x97, 0x37, 0x57, 0x6a, 0xa, 0xaa, 0xca, 0xd0, 0xb0, 0x10, 0x70, 0x4d, 0x2d, 0x8d, 0xed, 0x4a, 0x2a, 0x8a, 0xea, 0xd7, 0xb7, 0x17, 0x77, 0x6d, 0xd, 0xad, 0xcd, 0xf0, 0x90, 0x30, 0x50, 0x4, 0x64, 0xc4, 0xa4, 0x99, 0xf9, 0x59, 0x39, 0x23, 0x43, 0xe3, 0x83, 0xbe, 0xde, 0x7e, 0x1e, 0xd6, 0xb6, 0x16, 0x76, 0x4b, 0x2b, 0x8b, 0xeb, 0xf1, 0x91, 0x31, 0x51, 0x6c, 0xc, 0xac, 0xcc, 0x98, 0xf8, 0x58, 0x38, 0x5, 0x65, 0xc5, 0xa5, 0xbf, 0xdf, 0x7f, 0x1f, 0x22, 0x42, 0xe2, 0x82, 0x6f, 0xf, 0xaf, 0xcf, 0xf2, 0x92, 0x32, 0x52, 0x48, 0x28, 0x88, 0xe8, 0xd5, 0xb5, 0x15, 0x75, 0x21, 0x41, 0xe1, 0x81, 0xbc, 0xdc, 0x7c, 0x1c, 0x6, 0x66, 0xc6, 0xa6, 0x9b, 0xfb, 0x5b, 0x3b, 0xf3, 0x93, 0x33, 0x53, 0x6e, 0xe, 0xae, 0xce, 0xd4, 0xb4, 0x14, 0x74, 0x49, 0x29, 0x89, 0xe9, 0xbd, 0xdd, 0x7d, 0x1d, 0x20, 0x40, 0xe0, 0x80, 0x9a, 0xfa, 0x5a, 0x3a, 0x7, 0x67, 0xc7, 0xa7}, - {0x0, 0x61, 0xc2, 0xa3, 0x99, 0xf8, 0x5b, 0x3a, 0x2f, 0x4e, 0xed, 0x8c, 0xb6, 0xd7, 0x74, 0x15, 0x5e, 0x3f, 0x9c, 0xfd, 0xc7, 0xa6, 0x5, 0x64, 0x71, 0x10, 0xb3, 0xd2, 0xe8, 0x89, 0x2a, 0x4b, 0xbc, 0xdd, 0x7e, 0x1f, 0x25, 0x44, 0xe7, 0x86, 0x93, 0xf2, 0x51, 0x30, 0xa, 0x6b, 0xc8, 0xa9, 0xe2, 0x83, 0x20, 0x41, 0x7b, 0x1a, 0xb9, 0xd8, 0xcd, 0xac, 0xf, 0x6e, 0x54, 0x35, 0x96, 0xf7, 0x65, 0x4, 0xa7, 0xc6, 0xfc, 0x9d, 0x3e, 0x5f, 0x4a, 0x2b, 0x88, 0xe9, 0xd3, 0xb2, 0x11, 0x70, 0x3b, 0x5a, 0xf9, 0x98, 0xa2, 0xc3, 0x60, 0x1, 0x14, 0x75, 0xd6, 0xb7, 0x8d, 0xec, 0x4f, 0x2e, 0xd9, 0xb8, 0x1b, 0x7a, 0x40, 0x21, 0x82, 0xe3, 0xf6, 0x97, 0x34, 0x55, 0x6f, 0xe, 0xad, 0xcc, 0x87, 0xe6, 0x45, 0x24, 0x1e, 0x7f, 0xdc, 0xbd, 0xa8, 0xc9, 0x6a, 0xb, 0x31, 0x50, 0xf3, 0x92, 0xca, 0xab, 0x8, 0x69, 0x53, 0x32, 0x91, 0xf0, 0xe5, 0x84, 0x27, 0x46, 0x7c, 0x1d, 0xbe, 0xdf, 0x94, 0xf5, 0x56, 0x37, 0xd, 0x6c, 0xcf, 0xae, 0xbb, 0xda, 0x79, 0x18, 0x22, 0x43, 0xe0, 0x81, 0x76, 0x17, 0xb4, 0xd5, 0xef, 0x8e, 0x2d, 0x4c, 0x59, 0x38, 0x9b, 0xfa, 0xc0, 0xa1, 0x2, 0x63, 0x28, 0x49, 0xea, 0x8b, 0xb1, 0xd0, 0x73, 0x12, 0x7, 0x66, 0xc5, 0xa4, 0x9e, 0xff, 0x5c, 0x3d, 0xaf, 0xce, 0x6d, 0xc, 0x36, 0x57, 0xf4, 0x95, 0x80, 0xe1, 0x42, 0x23, 0x19, 0x78, 0xdb, 0xba, 0xf1, 0x90, 0x33, 0x52, 0x68, 0x9, 0xaa, 0xcb, 0xde, 0xbf, 0x1c, 0x7d, 0x47, 0x26, 0x85, 0xe4, 0x13, 0x72, 0xd1, 0xb0, 0x8a, 0xeb, 0x48, 0x29, 0x3c, 0x5d, 0xfe, 0x9f, 0xa5, 0xc4, 0x67, 0x6, 0x4d, 0x2c, 0x8f, 0xee, 0xd4, 0xb5, 0x16, 0x77, 0x62, 0x3, 0xa0, 0xc1, 0xfb, 0x9a, 0x39, 0x58}, - {0x0, 0x62, 0xc4, 0xa6, 0x95, 0xf7, 0x51, 0x33, 0x37, 0x55, 0xf3, 0x91, 0xa2, 0xc0, 0x66, 0x4, 0x6e, 0xc, 0xaa, 0xc8, 0xfb, 0x99, 0x3f, 0x5d, 0x59, 0x3b, 0x9d, 0xff, 0xcc, 0xae, 0x8, 0x6a, 0xdc, 0xbe, 0x18, 0x7a, 0x49, 0x2b, 0x8d, 0xef, 0xeb, 0x89, 0x2f, 0x4d, 0x7e, 0x1c, 0xba, 0xd8, 0xb2, 0xd0, 0x76, 0x14, 0x27, 0x45, 0xe3, 0x81, 0x85, 0xe7, 0x41, 0x23, 0x10, 0x72, 0xd4, 0xb6, 0xa5, 0xc7, 0x61, 0x3, 0x30, 0x52, 0xf4, 0x96, 0x92, 0xf0, 0x56, 0x34, 0x7, 0x65, 0xc3, 0xa1, 0xcb, 0xa9, 0xf, 0x6d, 0x5e, 0x3c, 0x9a, 0xf8, 0xfc, 0x9e, 0x38, 0x5a, 0x69, 0xb, 0xad, 0xcf, 0x79, 0x1b, 0xbd, 0xdf, 0xec, 0x8e, 0x28, 0x4a, 0x4e, 0x2c, 0x8a, 0xe8, 0xdb, 0xb9, 0x1f, 0x7d, 0x17, 0x75, 0xd3, 0xb1, 0x82, 0xe0, 0x46, 0x24, 0x20, 0x42, 0xe4, 0x86, 0xb5, 0xd7, 0x71, 0x13, 0x57, 0x35, 0x93, 0xf1, 0xc2, 0xa0, 0x6, 0x64, 0x60, 0x2, 0xa4, 0xc6, 0xf5, 0x97, 0x31, 0x53, 0x39, 0x5b, 0xfd, 0x9f, 0xac, 0xce, 0x68, 0xa, 0xe, 0x6c, 0xca, 0xa8, 0x9b, 0xf9, 0x5f, 0x3d, 0x8b, 0xe9, 0x4f, 0x2d, 0x1e, 0x7c, 0xda, 0xb8, 0xbc, 0xde, 0x78, 0x1a, 0x29, 0x4b, 0xed, 0x8f, 0xe5, 0x87, 0x21, 0x43, 0x70, 0x12, 0xb4, 0xd6, 0xd2, 0xb0, 0x16, 0x74, 0x47, 0x25, 0x83, 0xe1, 0xf2, 0x90, 0x36, 0x54, 0x67, 0x5, 0xa3, 0xc1, 0xc5, 0xa7, 0x1, 0x63, 0x50, 0x32, 0x94, 0xf6, 0x9c, 0xfe, 0x58, 0x3a, 0x9, 0x6b, 0xcd, 0xaf, 0xab, 0xc9, 0x6f, 0xd, 0x3e, 0x5c, 0xfa, 0x98, 0x2e, 0x4c, 0xea, 0x88, 0xbb, 0xd9, 0x7f, 0x1d, 0x19, 0x7b, 0xdd, 0xbf, 0x8c, 0xee, 0x48, 0x2a, 0x40, 0x22, 0x84, 0xe6, 0xd5, 0xb7, 0x11, 0x73, 0x77, 0x15, 0xb3, 0xd1, 0xe2, 0x80, 0x26, 0x44}, - {0x0, 0x63, 0xc6, 0xa5, 0x91, 0xf2, 0x57, 0x34, 0x3f, 0x5c, 0xf9, 0x9a, 0xae, 0xcd, 0x68, 0xb, 0x7e, 0x1d, 0xb8, 0xdb, 0xef, 0x8c, 0x29, 0x4a, 0x41, 0x22, 0x87, 0xe4, 0xd0, 0xb3, 0x16, 0x75, 0xfc, 0x9f, 0x3a, 0x59, 0x6d, 0xe, 0xab, 0xc8, 0xc3, 0xa0, 0x5, 0x66, 0x52, 0x31, 0x94, 0xf7, 0x82, 0xe1, 0x44, 0x27, 0x13, 0x70, 0xd5, 0xb6, 0xbd, 0xde, 0x7b, 0x18, 0x2c, 0x4f, 0xea, 0x89, 0xe5, 0x86, 0x23, 0x40, 0x74, 0x17, 0xb2, 0xd1, 0xda, 0xb9, 0x1c, 0x7f, 0x4b, 0x28, 0x8d, 0xee, 0x9b, 0xf8, 0x5d, 0x3e, 0xa, 0x69, 0xcc, 0xaf, 0xa4, 0xc7, 0x62, 0x1, 0x35, 0x56, 0xf3, 0x90, 0x19, 0x7a, 0xdf, 0xbc, 0x88, 0xeb, 0x4e, 0x2d, 0x26, 0x45, 0xe0, 0x83, 0xb7, 0xd4, 0x71, 0x12, 0x67, 0x4, 0xa1, 0xc2, 0xf6, 0x95, 0x30, 0x53, 0x58, 0x3b, 0x9e, 0xfd, 0xc9, 0xaa, 0xf, 0x6c, 0xd7, 0xb4, 0x11, 0x72, 0x46, 0x25, 0x80, 0xe3, 0xe8, 0x8b, 0x2e, 0x4d, 0x79, 0x1a, 0xbf, 0xdc, 0xa9, 0xca, 0x6f, 0xc, 0x38, 0x5b, 0xfe, 0x9d, 0x96, 0xf5, 0x50, 0x33, 0x7, 0x64, 0xc1, 0xa2, 0x2b, 0x48, 0xed, 0x8e, 0xba, 0xd9, 0x7c, 0x1f, 0x14, 0x77, 0xd2, 0xb1, 0x85, 0xe6, 0x43, 0x20, 0x55, 0x36, 0x93, 0xf0, 0xc4, 0xa7, 0x2, 0x61, 0x6a, 0x9, 0xac, 0xcf, 0xfb, 0x98, 0x3d, 0x5e, 0x32, 0x51, 0xf4, 0x97, 0xa3, 0xc0, 0x65, 0x6, 0xd, 0x6e, 0xcb, 0xa8, 0x9c, 0xff, 0x5a, 0x39, 0x4c, 0x2f, 0x8a, 0xe9, 0xdd, 0xbe, 0x1b, 0x78, 0x73, 0x10, 0xb5, 0xd6, 0xe2, 0x81, 0x24, 0x47, 0xce, 0xad, 0x8, 0x6b, 0x5f, 0x3c, 0x99, 0xfa, 0xf1, 0x92, 0x37, 0x54, 0x60, 0x3, 0xa6, 0xc5, 0xb0, 0xd3, 0x76, 0x15, 0x21, 0x42, 0xe7, 0x84, 0x8f, 0xec, 0x49, 0x2a, 0x1e, 0x7d, 0xd8, 0xbb}, - {0x0, 0x64, 0xc8, 0xac, 0x8d, 0xe9, 0x45, 0x21, 0x7, 0x63, 0xcf, 0xab, 0x8a, 0xee, 0x42, 0x26, 0xe, 0x6a, 0xc6, 0xa2, 0x83, 0xe7, 0x4b, 0x2f, 0x9, 0x6d, 0xc1, 0xa5, 0x84, 0xe0, 0x4c, 0x28, 0x1c, 0x78, 0xd4, 0xb0, 0x91, 0xf5, 0x59, 0x3d, 0x1b, 0x7f, 0xd3, 0xb7, 0x96, 0xf2, 0x5e, 0x3a, 0x12, 0x76, 0xda, 0xbe, 0x9f, 0xfb, 0x57, 0x33, 0x15, 0x71, 0xdd, 0xb9, 0x98, 0xfc, 0x50, 0x34, 0x38, 0x5c, 0xf0, 0x94, 0xb5, 0xd1, 0x7d, 0x19, 0x3f, 0x5b, 0xf7, 0x93, 0xb2, 0xd6, 0x7a, 0x1e, 0x36, 0x52, 0xfe, 0x9a, 0xbb, 0xdf, 0x73, 0x17, 0x31, 0x55, 0xf9, 0x9d, 0xbc, 0xd8, 0x74, 0x10, 0x24, 0x40, 0xec, 0x88, 0xa9, 0xcd, 0x61, 0x5, 0x23, 0x47, 0xeb, 0x8f, 0xae, 0xca, 0x66, 0x2, 0x2a, 0x4e, 0xe2, 0x86, 0xa7, 0xc3, 0x6f, 0xb, 0x2d, 0x49, 0xe5, 0x81, 0xa0, 0xc4, 0x68, 0xc, 0x70, 0x14, 0xb8, 0xdc, 0xfd, 0x99, 0x35, 0x51, 0x77, 0x13, 0xbf, 0xdb, 0xfa, 0x9e, 0x32, 0x56, 0x7e, 0x1a, 0xb6, 0xd2, 0xf3, 0x97, 0x3b, 0x5f, 0x79, 0x1d, 0xb1, 0xd5, 0xf4, 0x90, 0x3c, 0x58, 0x6c, 0x8, 0xa4, 0xc0, 0xe1, 0x85, 0x29, 0x4d, 0x6b, 0xf, 0xa3, 0xc7, 0xe6, 0x82, 0x2e, 0x4a, 0x62, 0x6, 0xaa, 0xce, 0xef, 0x8b, 0x27, 0x43, 0x65, 0x1, 0xad, 0xc9, 0xe8, 0x8c, 0x20, 0x44, 0x48, 0x2c, 0x80, 0xe4, 0xc5, 0xa1, 0xd, 0x69, 0x4f, 0x2b, 0x87, 0xe3, 0xc2, 0xa6, 0xa, 0x6e, 0x46, 0x22, 0x8e, 0xea, 0xcb, 0xaf, 0x3, 0x67, 0x41, 0x25, 0x89, 0xed, 0xcc, 0xa8, 0x4, 0x60, 0x54, 0x30, 0x9c, 0xf8, 0xd9, 0xbd, 0x11, 0x75, 0x53, 0x37, 0x9b, 0xff, 0xde, 0xba, 0x16, 0x72, 0x5a, 0x3e, 0x92, 0xf6, 0xd7, 0xb3, 0x1f, 0x7b, 0x5d, 0x39, 0x95, 0xf1, 0xd0, 0xb4, 0x18, 0x7c}, - {0x0, 0x65, 0xca, 0xaf, 0x89, 0xec, 0x43, 0x26, 0xf, 0x6a, 0xc5, 0xa0, 0x86, 0xe3, 0x4c, 0x29, 0x1e, 0x7b, 0xd4, 0xb1, 0x97, 0xf2, 0x5d, 0x38, 0x11, 0x74, 0xdb, 0xbe, 0x98, 0xfd, 0x52, 0x37, 0x3c, 0x59, 0xf6, 0x93, 0xb5, 0xd0, 0x7f, 0x1a, 0x33, 0x56, 0xf9, 0x9c, 0xba, 0xdf, 0x70, 0x15, 0x22, 0x47, 0xe8, 0x8d, 0xab, 0xce, 0x61, 0x4, 0x2d, 0x48, 0xe7, 0x82, 0xa4, 0xc1, 0x6e, 0xb, 0x78, 0x1d, 0xb2, 0xd7, 0xf1, 0x94, 0x3b, 0x5e, 0x77, 0x12, 0xbd, 0xd8, 0xfe, 0x9b, 0x34, 0x51, 0x66, 0x3, 0xac, 0xc9, 0xef, 0x8a, 0x25, 0x40, 0x69, 0xc, 0xa3, 0xc6, 0xe0, 0x85, 0x2a, 0x4f, 0x44, 0x21, 0x8e, 0xeb, 0xcd, 0xa8, 0x7, 0x62, 0x4b, 0x2e, 0x81, 0xe4, 0xc2, 0xa7, 0x8, 0x6d, 0x5a, 0x3f, 0x90, 0xf5, 0xd3, 0xb6, 0x19, 0x7c, 0x55, 0x30, 0x9f, 0xfa, 0xdc, 0xb9, 0x16, 0x73, 0xf0, 0x95, 0x3a, 0x5f, 0x79, 0x1c, 0xb3, 0xd6, 0xff, 0x9a, 0x35, 0x50, 0x76, 0x13, 0xbc, 0xd9, 0xee, 0x8b, 0x24, 0x41, 0x67, 0x2, 0xad, 0xc8, 0xe1, 0x84, 0x2b, 0x4e, 0x68, 0xd, 0xa2, 0xc7, 0xcc, 0xa9, 0x6, 0x63, 0x45, 0x20, 0x8f, 0xea, 0xc3, 0xa6, 0x9, 0x6c, 0x4a, 0x2f, 0x80, 0xe5, 0xd2, 0xb7, 0x18, 0x7d, 0x5b, 0x3e, 0x91, 0xf4, 0xdd, 0xb8, 0x17, 0x72, 0x54, 0x31, 0x9e, 0xfb, 0x88, 0xed, 0x42, 0x27, 0x1, 0x64, 0xcb, 0xae, 0x87, 0xe2, 0x4d, 0x28, 0xe, 0x6b, 0xc4, 0xa1, 0x96, 0xf3, 0x5c, 0x39, 0x1f, 0x7a, 0xd5, 0xb0, 0x99, 0xfc, 0x53, 0x36, 0x10, 0x75, 0xda, 0xbf, 0xb4, 0xd1, 0x7e, 0x1b, 0x3d, 0x58, 0xf7, 0x92, 0xbb, 0xde, 0x71, 0x14, 0x32, 0x57, 0xf8, 0x9d, 0xaa, 0xcf, 0x60, 0x5, 0x23, 0x46, 0xe9, 0x8c, 0xa5, 0xc0, 0x6f, 0xa, 0x2c, 0x49, 0xe6, 0x83}, - {0x0, 0x66, 0xcc, 0xaa, 0x85, 0xe3, 0x49, 0x2f, 0x17, 0x71, 0xdb, 0xbd, 0x92, 0xf4, 0x5e, 0x38, 0x2e, 0x48, 0xe2, 0x84, 0xab, 0xcd, 0x67, 0x1, 0x39, 0x5f, 0xf5, 0x93, 0xbc, 0xda, 0x70, 0x16, 0x5c, 0x3a, 0x90, 0xf6, 0xd9, 0xbf, 0x15, 0x73, 0x4b, 0x2d, 0x87, 0xe1, 0xce, 0xa8, 0x2, 0x64, 0x72, 0x14, 0xbe, 0xd8, 0xf7, 0x91, 0x3b, 0x5d, 0x65, 0x3, 0xa9, 0xcf, 0xe0, 0x86, 0x2c, 0x4a, 0xb8, 0xde, 0x74, 0x12, 0x3d, 0x5b, 0xf1, 0x97, 0xaf, 0xc9, 0x63, 0x5, 0x2a, 0x4c, 0xe6, 0x80, 0x96, 0xf0, 0x5a, 0x3c, 0x13, 0x75, 0xdf, 0xb9, 0x81, 0xe7, 0x4d, 0x2b, 0x4, 0x62, 0xc8, 0xae, 0xe4, 0x82, 0x28, 0x4e, 0x61, 0x7, 0xad, 0xcb, 0xf3, 0x95, 0x3f, 0x59, 0x76, 0x10, 0xba, 0xdc, 0xca, 0xac, 0x6, 0x60, 0x4f, 0x29, 0x83, 0xe5, 0xdd, 0xbb, 0x11, 0x77, 0x58, 0x3e, 0x94, 0xf2, 0x6d, 0xb, 0xa1, 0xc7, 0xe8, 0x8e, 0x24, 0x42, 0x7a, 0x1c, 0xb6, 0xd0, 0xff, 0x99, 0x33, 0x55, 0x43, 0x25, 0x8f, 0xe9, 0xc6, 0xa0, 0xa, 0x6c, 0x54, 0x32, 0x98, 0xfe, 0xd1, 0xb7, 0x1d, 0x7b, 0x31, 0x57, 0xfd, 0x9b, 0xb4, 0xd2, 0x78, 0x1e, 0x26, 0x40, 0xea, 0x8c, 0xa3, 0xc5, 0x6f, 0x9, 0x1f, 0x79, 0xd3, 0xb5, 0x9a, 0xfc, 0x56, 0x30, 0x8, 0x6e, 0xc4, 0xa2, 0x8d, 0xeb, 0x41, 0x27, 0xd5, 0xb3, 0x19, 0x7f, 0x50, 0x36, 0x9c, 0xfa, 0xc2, 0xa4, 0xe, 0x68, 0x47, 0x21, 0x8b, 0xed, 0xfb, 0x9d, 0x37, 0x51, 0x7e, 0x18, 0xb2, 0xd4, 0xec, 0x8a, 0x20, 0x46, 0x69, 0xf, 0xa5, 0xc3, 0x89, 0xef, 0x45, 0x23, 0xc, 0x6a, 0xc0, 0xa6, 0x9e, 0xf8, 0x52, 0x34, 0x1b, 0x7d, 0xd7, 0xb1, 0xa7, 0xc1, 0x6b, 0xd, 0x22, 0x44, 0xee, 0x88, 0xb0, 0xd6, 0x7c, 0x1a, 0x35, 0x53, 0xf9, 0x9f}, - {0x0, 0x67, 0xce, 0xa9, 0x81, 0xe6, 0x4f, 0x28, 0x1f, 0x78, 0xd1, 0xb6, 0x9e, 0xf9, 0x50, 0x37, 0x3e, 0x59, 0xf0, 0x97, 0xbf, 0xd8, 0x71, 0x16, 0x21, 0x46, 0xef, 0x88, 0xa0, 0xc7, 0x6e, 0x9, 0x7c, 0x1b, 0xb2, 0xd5, 0xfd, 0x9a, 0x33, 0x54, 0x63, 0x4, 0xad, 0xca, 0xe2, 0x85, 0x2c, 0x4b, 0x42, 0x25, 0x8c, 0xeb, 0xc3, 0xa4, 0xd, 0x6a, 0x5d, 0x3a, 0x93, 0xf4, 0xdc, 0xbb, 0x12, 0x75, 0xf8, 0x9f, 0x36, 0x51, 0x79, 0x1e, 0xb7, 0xd0, 0xe7, 0x80, 0x29, 0x4e, 0x66, 0x1, 0xa8, 0xcf, 0xc6, 0xa1, 0x8, 0x6f, 0x47, 0x20, 0x89, 0xee, 0xd9, 0xbe, 0x17, 0x70, 0x58, 0x3f, 0x96, 0xf1, 0x84, 0xe3, 0x4a, 0x2d, 0x5, 0x62, 0xcb, 0xac, 0x9b, 0xfc, 0x55, 0x32, 0x1a, 0x7d, 0xd4, 0xb3, 0xba, 0xdd, 0x74, 0x13, 0x3b, 0x5c, 0xf5, 0x92, 0xa5, 0xc2, 0x6b, 0xc, 0x24, 0x43, 0xea, 0x8d, 0xed, 0x8a, 0x23, 0x44, 0x6c, 0xb, 0xa2, 0xc5, 0xf2, 0x95, 0x3c, 0x5b, 0x73, 0x14, 0xbd, 0xda, 0xd3, 0xb4, 0x1d, 0x7a, 0x52, 0x35, 0x9c, 0xfb, 0xcc, 0xab, 0x2, 0x65, 0x4d, 0x2a, 0x83, 0xe4, 0x91, 0xf6, 0x5f, 0x38, 0x10, 0x77, 0xde, 0xb9, 0x8e, 0xe9, 0x40, 0x27, 0xf, 0x68, 0xc1, 0xa6, 0xaf, 0xc8, 0x61, 0x6, 0x2e, 0x49, 0xe0, 0x87, 0xb0, 0xd7, 0x7e, 0x19, 0x31, 0x56, 0xff, 0x98, 0x15, 0x72, 0xdb, 0xbc, 0x94, 0xf3, 0x5a, 0x3d, 0xa, 0x6d, 0xc4, 0xa3, 0x8b, 0xec, 0x45, 0x22, 0x2b, 0x4c, 0xe5, 0x82, 0xaa, 0xcd, 0x64, 0x3, 0x34, 0x53, 0xfa, 0x9d, 0xb5, 0xd2, 0x7b, 0x1c, 0x69, 0xe, 0xa7, 0xc0, 0xe8, 0x8f, 0x26, 0x41, 0x76, 0x11, 0xb8, 0xdf, 0xf7, 0x90, 0x39, 0x5e, 0x57, 0x30, 0x99, 0xfe, 0xd6, 0xb1, 0x18, 0x7f, 0x48, 0x2f, 0x86, 0xe1, 0xc9, 0xae, 0x7, 0x60}, - {0x0, 0x68, 0xd0, 0xb8, 0xbd, 0xd5, 0x6d, 0x5, 0x67, 0xf, 0xb7, 0xdf, 0xda, 0xb2, 0xa, 0x62, 0xce, 0xa6, 0x1e, 0x76, 0x73, 0x1b, 0xa3, 0xcb, 0xa9, 0xc1, 0x79, 0x11, 0x14, 0x7c, 0xc4, 0xac, 0x81, 0xe9, 0x51, 0x39, 0x3c, 0x54, 0xec, 0x84, 0xe6, 0x8e, 0x36, 0x5e, 0x5b, 0x33, 0x8b, 0xe3, 0x4f, 0x27, 0x9f, 0xf7, 0xf2, 0x9a, 0x22, 0x4a, 0x28, 0x40, 0xf8, 0x90, 0x95, 0xfd, 0x45, 0x2d, 0x1f, 0x77, 0xcf, 0xa7, 0xa2, 0xca, 0x72, 0x1a, 0x78, 0x10, 0xa8, 0xc0, 0xc5, 0xad, 0x15, 0x7d, 0xd1, 0xb9, 0x1, 0x69, 0x6c, 0x4, 0xbc, 0xd4, 0xb6, 0xde, 0x66, 0xe, 0xb, 0x63, 0xdb, 0xb3, 0x9e, 0xf6, 0x4e, 0x26, 0x23, 0x4b, 0xf3, 0x9b, 0xf9, 0x91, 0x29, 0x41, 0x44, 0x2c, 0x94, 0xfc, 0x50, 0x38, 0x80, 0xe8, 0xed, 0x85, 0x3d, 0x55, 0x37, 0x5f, 0xe7, 0x8f, 0x8a, 0xe2, 0x5a, 0x32, 0x3e, 0x56, 0xee, 0x86, 0x83, 0xeb, 0x53, 0x3b, 0x59, 0x31, 0x89, 0xe1, 0xe4, 0x8c, 0x34, 0x5c, 0xf0, 0x98, 0x20, 0x48, 0x4d, 0x25, 0x9d, 0xf5, 0x97, 0xff, 0x47, 0x2f, 0x2a, 0x42, 0xfa, 0x92, 0xbf, 0xd7, 0x6f, 0x7, 0x2, 0x6a, 0xd2, 0xba, 0xd8, 0xb0, 0x8, 0x60, 0x65, 0xd, 0xb5, 0xdd, 0x71, 0x19, 0xa1, 0xc9, 0xcc, 0xa4, 0x1c, 0x74, 0x16, 0x7e, 0xc6, 0xae, 0xab, 0xc3, 0x7b, 0x13, 0x21, 0x49, 0xf1, 0x99, 0x9c, 0xf4, 0x4c, 0x24, 0x46, 0x2e, 0x96, 0xfe, 0xfb, 0x93, 0x2b, 0x43, 0xef, 0x87, 0x3f, 0x57, 0x52, 0x3a, 0x82, 0xea, 0x88, 0xe0, 0x58, 0x30, 0x35, 0x5d, 0xe5, 0x8d, 0xa0, 0xc8, 0x70, 0x18, 0x1d, 0x75, 0xcd, 0xa5, 0xc7, 0xaf, 0x17, 0x7f, 0x7a, 0x12, 0xaa, 0xc2, 0x6e, 0x6, 0xbe, 0xd6, 0xd3, 0xbb, 0x3, 0x6b, 0x9, 0x61, 0xd9, 0xb1, 0xb4, 0xdc, 0x64, 0xc}, - {0x0, 0x69, 0xd2, 0xbb, 0xb9, 0xd0, 0x6b, 0x2, 0x6f, 0x6, 0xbd, 0xd4, 0xd6, 0xbf, 0x4, 0x6d, 0xde, 0xb7, 0xc, 0x65, 0x67, 0xe, 0xb5, 0xdc, 0xb1, 0xd8, 0x63, 0xa, 0x8, 0x61, 0xda, 0xb3, 0xa1, 0xc8, 0x73, 0x1a, 0x18, 0x71, 0xca, 0xa3, 0xce, 0xa7, 0x1c, 0x75, 0x77, 0x1e, 0xa5, 0xcc, 0x7f, 0x16, 0xad, 0xc4, 0xc6, 0xaf, 0x14, 0x7d, 0x10, 0x79, 0xc2, 0xab, 0xa9, 0xc0, 0x7b, 0x12, 0x5f, 0x36, 0x8d, 0xe4, 0xe6, 0x8f, 0x34, 0x5d, 0x30, 0x59, 0xe2, 0x8b, 0x89, 0xe0, 0x5b, 0x32, 0x81, 0xe8, 0x53, 0x3a, 0x38, 0x51, 0xea, 0x83, 0xee, 0x87, 0x3c, 0x55, 0x57, 0x3e, 0x85, 0xec, 0xfe, 0x97, 0x2c, 0x45, 0x47, 0x2e, 0x95, 0xfc, 0x91, 0xf8, 0x43, 0x2a, 0x28, 0x41, 0xfa, 0x93, 0x20, 0x49, 0xf2, 0x9b, 0x99, 0xf0, 0x4b, 0x22, 0x4f, 0x26, 0x9d, 0xf4, 0xf6, 0x9f, 0x24, 0x4d, 0xbe, 0xd7, 0x6c, 0x5, 0x7, 0x6e, 0xd5, 0xbc, 0xd1, 0xb8, 0x3, 0x6a, 0x68, 0x1, 0xba, 0xd3, 0x60, 0x9, 0xb2, 0xdb, 0xd9, 0xb0, 0xb, 0x62, 0xf, 0x66, 0xdd, 0xb4, 0xb6, 0xdf, 0x64, 0xd, 0x1f, 0x76, 0xcd, 0xa4, 0xa6, 0xcf, 0x74, 0x1d, 0x70, 0x19, 0xa2, 0xcb, 0xc9, 0xa0, 0x1b, 0x72, 0xc1, 0xa8, 0x13, 0x7a, 0x78, 0x11, 0xaa, 0xc3, 0xae, 0xc7, 0x7c, 0x15, 0x17, 0x7e, 0xc5, 0xac, 0xe1, 0x88, 0x33, 0x5a, 0x58, 0x31, 0x8a, 0xe3, 0x8e, 0xe7, 0x5c, 0x35, 0x37, 0x5e, 0xe5, 0x8c, 0x3f, 0x56, 0xed, 0x84, 0x86, 0xef, 0x54, 0x3d, 0x50, 0x39, 0x82, 0xeb, 0xe9, 0x80, 0x3b, 0x52, 0x40, 0x29, 0x92, 0xfb, 0xf9, 0x90, 0x2b, 0x42, 0x2f, 0x46, 0xfd, 0x94, 0x96, 0xff, 0x44, 0x2d, 0x9e, 0xf7, 0x4c, 0x25, 0x27, 0x4e, 0xf5, 0x9c, 0xf1, 0x98, 0x23, 0x4a, 0x48, 0x21, 0x9a, 0xf3}, - {0x0, 0x6a, 0xd4, 0xbe, 0xb5, 0xdf, 0x61, 0xb, 0x77, 0x1d, 0xa3, 0xc9, 0xc2, 0xa8, 0x16, 0x7c, 0xee, 0x84, 0x3a, 0x50, 0x5b, 0x31, 0x8f, 0xe5, 0x99, 0xf3, 0x4d, 0x27, 0x2c, 0x46, 0xf8, 0x92, 0xc1, 0xab, 0x15, 0x7f, 0x74, 0x1e, 0xa0, 0xca, 0xb6, 0xdc, 0x62, 0x8, 0x3, 0x69, 0xd7, 0xbd, 0x2f, 0x45, 0xfb, 0x91, 0x9a, 0xf0, 0x4e, 0x24, 0x58, 0x32, 0x8c, 0xe6, 0xed, 0x87, 0x39, 0x53, 0x9f, 0xf5, 0x4b, 0x21, 0x2a, 0x40, 0xfe, 0x94, 0xe8, 0x82, 0x3c, 0x56, 0x5d, 0x37, 0x89, 0xe3, 0x71, 0x1b, 0xa5, 0xcf, 0xc4, 0xae, 0x10, 0x7a, 0x6, 0x6c, 0xd2, 0xb8, 0xb3, 0xd9, 0x67, 0xd, 0x5e, 0x34, 0x8a, 0xe0, 0xeb, 0x81, 0x3f, 0x55, 0x29, 0x43, 0xfd, 0x97, 0x9c, 0xf6, 0x48, 0x22, 0xb0, 0xda, 0x64, 0xe, 0x5, 0x6f, 0xd1, 0xbb, 0xc7, 0xad, 0x13, 0x79, 0x72, 0x18, 0xa6, 0xcc, 0x23, 0x49, 0xf7, 0x9d, 0x96, 0xfc, 0x42, 0x28, 0x54, 0x3e, 0x80, 0xea, 0xe1, 0x8b, 0x35, 0x5f, 0xcd, 0xa7, 0x19, 0x73, 0x78, 0x12, 0xac, 0xc6, 0xba, 0xd0, 0x6e, 0x4, 0xf, 0x65, 0xdb, 0xb1, 0xe2, 0x88, 0x36, 0x5c, 0x57, 0x3d, 0x83, 0xe9, 0x95, 0xff, 0x41, 0x2b, 0x20, 0x4a, 0xf4, 0x9e, 0xc, 0x66, 0xd8, 0xb2, 0xb9, 0xd3, 0x6d, 0x7, 0x7b, 0x11, 0xaf, 0xc5, 0xce, 0xa4, 0x1a, 0x70, 0xbc, 0xd6, 0x68, 0x2, 0x9, 0x63, 0xdd, 0xb7, 0xcb, 0xa1, 0x1f, 0x75, 0x7e, 0x14, 0xaa, 0xc0, 0x52, 0x38, 0x86, 0xec, 0xe7, 0x8d, 0x33, 0x59, 0x25, 0x4f, 0xf1, 0x9b, 0x90, 0xfa, 0x44, 0x2e, 0x7d, 0x17, 0xa9, 0xc3, 0xc8, 0xa2, 0x1c, 0x76, 0xa, 0x60, 0xde, 0xb4, 0xbf, 0xd5, 0x6b, 0x1, 0x93, 0xf9, 0x47, 0x2d, 0x26, 0x4c, 0xf2, 0x98, 0xe4, 0x8e, 0x30, 0x5a, 0x51, 0x3b, 0x85, 0xef}, - {0x0, 0x6b, 0xd6, 0xbd, 0xb1, 0xda, 0x67, 0xc, 0x7f, 0x14, 0xa9, 0xc2, 0xce, 0xa5, 0x18, 0x73, 0xfe, 0x95, 0x28, 0x43, 0x4f, 0x24, 0x99, 0xf2, 0x81, 0xea, 0x57, 0x3c, 0x30, 0x5b, 0xe6, 0x8d, 0xe1, 0x8a, 0x37, 0x5c, 0x50, 0x3b, 0x86, 0xed, 0x9e, 0xf5, 0x48, 0x23, 0x2f, 0x44, 0xf9, 0x92, 0x1f, 0x74, 0xc9, 0xa2, 0xae, 0xc5, 0x78, 0x13, 0x60, 0xb, 0xb6, 0xdd, 0xd1, 0xba, 0x7, 0x6c, 0xdf, 0xb4, 0x9, 0x62, 0x6e, 0x5, 0xb8, 0xd3, 0xa0, 0xcb, 0x76, 0x1d, 0x11, 0x7a, 0xc7, 0xac, 0x21, 0x4a, 0xf7, 0x9c, 0x90, 0xfb, 0x46, 0x2d, 0x5e, 0x35, 0x88, 0xe3, 0xef, 0x84, 0x39, 0x52, 0x3e, 0x55, 0xe8, 0x83, 0x8f, 0xe4, 0x59, 0x32, 0x41, 0x2a, 0x97, 0xfc, 0xf0, 0x9b, 0x26, 0x4d, 0xc0, 0xab, 0x16, 0x7d, 0x71, 0x1a, 0xa7, 0xcc, 0xbf, 0xd4, 0x69, 0x2, 0xe, 0x65, 0xd8, 0xb3, 0xa3, 0xc8, 0x75, 0x1e, 0x12, 0x79, 0xc4, 0xaf, 0xdc, 0xb7, 0xa, 0x61, 0x6d, 0x6, 0xbb, 0xd0, 0x5d, 0x36, 0x8b, 0xe0, 0xec, 0x87, 0x3a, 0x51, 0x22, 0x49, 0xf4, 0x9f, 0x93, 0xf8, 0x45, 0x2e, 0x42, 0x29, 0x94, 0xff, 0xf3, 0x98, 0x25, 0x4e, 0x3d, 0x56, 0xeb, 0x80, 0x8c, 0xe7, 0x5a, 0x31, 0xbc, 0xd7, 0x6a, 0x1, 0xd, 0x66, 0xdb, 0xb0, 0xc3, 0xa8, 0x15, 0x7e, 0x72, 0x19, 0xa4, 0xcf, 0x7c, 0x17, 0xaa, 0xc1, 0xcd, 0xa6, 0x1b, 0x70, 0x3, 0x68, 0xd5, 0xbe, 0xb2, 0xd9, 0x64, 0xf, 0x82, 0xe9, 0x54, 0x3f, 0x33, 0x58, 0xe5, 0x8e, 0xfd, 0x96, 0x2b, 0x40, 0x4c, 0x27, 0x9a, 0xf1, 0x9d, 0xf6, 0x4b, 0x20, 0x2c, 0x47, 0xfa, 0x91, 0xe2, 0x89, 0x34, 0x5f, 0x53, 0x38, 0x85, 0xee, 0x63, 0x8, 0xb5, 0xde, 0xd2, 0xb9, 0x4, 0x6f, 0x1c, 0x77, 0xca, 0xa1, 0xad, 0xc6, 0x7b, 0x10}, - {0x0, 0x6c, 0xd8, 0xb4, 0xad, 0xc1, 0x75, 0x19, 0x47, 0x2b, 0x9f, 0xf3, 0xea, 0x86, 0x32, 0x5e, 0x8e, 0xe2, 0x56, 0x3a, 0x23, 0x4f, 0xfb, 0x97, 0xc9, 0xa5, 0x11, 0x7d, 0x64, 0x8, 0xbc, 0xd0, 0x1, 0x6d, 0xd9, 0xb5, 0xac, 0xc0, 0x74, 0x18, 0x46, 0x2a, 0x9e, 0xf2, 0xeb, 0x87, 0x33, 0x5f, 0x8f, 0xe3, 0x57, 0x3b, 0x22, 0x4e, 0xfa, 0x96, 0xc8, 0xa4, 0x10, 0x7c, 0x65, 0x9, 0xbd, 0xd1, 0x2, 0x6e, 0xda, 0xb6, 0xaf, 0xc3, 0x77, 0x1b, 0x45, 0x29, 0x9d, 0xf1, 0xe8, 0x84, 0x30, 0x5c, 0x8c, 0xe0, 0x54, 0x38, 0x21, 0x4d, 0xf9, 0x95, 0xcb, 0xa7, 0x13, 0x7f, 0x66, 0xa, 0xbe, 0xd2, 0x3, 0x6f, 0xdb, 0xb7, 0xae, 0xc2, 0x76, 0x1a, 0x44, 0x28, 0x9c, 0xf0, 0xe9, 0x85, 0x31, 0x5d, 0x8d, 0xe1, 0x55, 0x39, 0x20, 0x4c, 0xf8, 0x94, 0xca, 0xa6, 0x12, 0x7e, 0x67, 0xb, 0xbf, 0xd3, 0x4, 0x68, 0xdc, 0xb0, 0xa9, 0xc5, 0x71, 0x1d, 0x43, 0x2f, 0x9b, 0xf7, 0xee, 0x82, 0x36, 0x5a, 0x8a, 0xe6, 0x52, 0x3e, 0x27, 0x4b, 0xff, 0x93, 0xcd, 0xa1, 0x15, 0x79, 0x60, 0xc, 0xb8, 0xd4, 0x5, 0x69, 0xdd, 0xb1, 0xa8, 0xc4, 0x70, 0x1c, 0x42, 0x2e, 0x9a, 0xf6, 0xef, 0x83, 0x37, 0x5b, 0x8b, 0xe7, 0x53, 0x3f, 0x26, 0x4a, 0xfe, 0x92, 0xcc, 0xa0, 0x14, 0x78, 0x61, 0xd, 0xb9, 0xd5, 0x6, 0x6a, 0xde, 0xb2, 0xab, 0xc7, 0x73, 0x1f, 0x41, 0x2d, 0x99, 0xf5, 0xec, 0x80, 0x34, 0x58, 0x88, 0xe4, 0x50, 0x3c, 0x25, 0x49, 0xfd, 0x91, 0xcf, 0xa3, 0x17, 0x7b, 0x62, 0xe, 0xba, 0xd6, 0x7, 0x6b, 0xdf, 0xb3, 0xaa, 0xc6, 0x72, 0x1e, 0x40, 0x2c, 0x98, 0xf4, 0xed, 0x81, 0x35, 0x59, 0x89, 0xe5, 0x51, 0x3d, 0x24, 0x48, 0xfc, 0x90, 0xce, 0xa2, 0x16, 0x7a, 0x63, 0xf, 0xbb, 0xd7}, - {0x0, 0x6d, 0xda, 0xb7, 0xa9, 0xc4, 0x73, 0x1e, 0x4f, 0x22, 0x95, 0xf8, 0xe6, 0x8b, 0x3c, 0x51, 0x9e, 0xf3, 0x44, 0x29, 0x37, 0x5a, 0xed, 0x80, 0xd1, 0xbc, 0xb, 0x66, 0x78, 0x15, 0xa2, 0xcf, 0x21, 0x4c, 0xfb, 0x96, 0x88, 0xe5, 0x52, 0x3f, 0x6e, 0x3, 0xb4, 0xd9, 0xc7, 0xaa, 0x1d, 0x70, 0xbf, 0xd2, 0x65, 0x8, 0x16, 0x7b, 0xcc, 0xa1, 0xf0, 0x9d, 0x2a, 0x47, 0x59, 0x34, 0x83, 0xee, 0x42, 0x2f, 0x98, 0xf5, 0xeb, 0x86, 0x31, 0x5c, 0xd, 0x60, 0xd7, 0xba, 0xa4, 0xc9, 0x7e, 0x13, 0xdc, 0xb1, 0x6, 0x6b, 0x75, 0x18, 0xaf, 0xc2, 0x93, 0xfe, 0x49, 0x24, 0x3a, 0x57, 0xe0, 0x8d, 0x63, 0xe, 0xb9, 0xd4, 0xca, 0xa7, 0x10, 0x7d, 0x2c, 0x41, 0xf6, 0x9b, 0x85, 0xe8, 0x5f, 0x32, 0xfd, 0x90, 0x27, 0x4a, 0x54, 0x39, 0x8e, 0xe3, 0xb2, 0xdf, 0x68, 0x5, 0x1b, 0x76, 0xc1, 0xac, 0x84, 0xe9, 0x5e, 0x33, 0x2d, 0x40, 0xf7, 0x9a, 0xcb, 0xa6, 0x11, 0x7c, 0x62, 0xf, 0xb8, 0xd5, 0x1a, 0x77, 0xc0, 0xad, 0xb3, 0xde, 0x69, 0x4, 0x55, 0x38, 0x8f, 0xe2, 0xfc, 0x91, 0x26, 0x4b, 0xa5, 0xc8, 0x7f, 0x12, 0xc, 0x61, 0xd6, 0xbb, 0xea, 0x87, 0x30, 0x5d, 0x43, 0x2e, 0x99, 0xf4, 0x3b, 0x56, 0xe1, 0x8c, 0x92, 0xff, 0x48, 0x25, 0x74, 0x19, 0xae, 0xc3, 0xdd, 0xb0, 0x7, 0x6a, 0xc6, 0xab, 0x1c, 0x71, 0x6f, 0x2, 0xb5, 0xd8, 0x89, 0xe4, 0x53, 0x3e, 0x20, 0x4d, 0xfa, 0x97, 0x58, 0x35, 0x82, 0xef, 0xf1, 0x9c, 0x2b, 0x46, 0x17, 0x7a, 0xcd, 0xa0, 0xbe, 0xd3, 0x64, 0x9, 0xe7, 0x8a, 0x3d, 0x50, 0x4e, 0x23, 0x94, 0xf9, 0xa8, 0xc5, 0x72, 0x1f, 0x1, 0x6c, 0xdb, 0xb6, 0x79, 0x14, 0xa3, 0xce, 0xd0, 0xbd, 0xa, 0x67, 0x36, 0x5b, 0xec, 0x81, 0x9f, 0xf2, 0x45, 0x28}, - {0x0, 0x6e, 0xdc, 0xb2, 0xa5, 0xcb, 0x79, 0x17, 0x57, 0x39, 0x8b, 0xe5, 0xf2, 0x9c, 0x2e, 0x40, 0xae, 0xc0, 0x72, 0x1c, 0xb, 0x65, 0xd7, 0xb9, 0xf9, 0x97, 0x25, 0x4b, 0x5c, 0x32, 0x80, 0xee, 0x41, 0x2f, 0x9d, 0xf3, 0xe4, 0x8a, 0x38, 0x56, 0x16, 0x78, 0xca, 0xa4, 0xb3, 0xdd, 0x6f, 0x1, 0xef, 0x81, 0x33, 0x5d, 0x4a, 0x24, 0x96, 0xf8, 0xb8, 0xd6, 0x64, 0xa, 0x1d, 0x73, 0xc1, 0xaf, 0x82, 0xec, 0x5e, 0x30, 0x27, 0x49, 0xfb, 0x95, 0xd5, 0xbb, 0x9, 0x67, 0x70, 0x1e, 0xac, 0xc2, 0x2c, 0x42, 0xf0, 0x9e, 0x89, 0xe7, 0x55, 0x3b, 0x7b, 0x15, 0xa7, 0xc9, 0xde, 0xb0, 0x2, 0x6c, 0xc3, 0xad, 0x1f, 0x71, 0x66, 0x8, 0xba, 0xd4, 0x94, 0xfa, 0x48, 0x26, 0x31, 0x5f, 0xed, 0x83, 0x6d, 0x3, 0xb1, 0xdf, 0xc8, 0xa6, 0x14, 0x7a, 0x3a, 0x54, 0xe6, 0x88, 0x9f, 0xf1, 0x43, 0x2d, 0x19, 0x77, 0xc5, 0xab, 0xbc, 0xd2, 0x60, 0xe, 0x4e, 0x20, 0x92, 0xfc, 0xeb, 0x85, 0x37, 0x59, 0xb7, 0xd9, 0x6b, 0x5, 0x12, 0x7c, 0xce, 0xa0, 0xe0, 0x8e, 0x3c, 0x52, 0x45, 0x2b, 0x99, 0xf7, 0x58, 0x36, 0x84, 0xea, 0xfd, 0x93, 0x21, 0x4f, 0xf, 0x61, 0xd3, 0xbd, 0xaa, 0xc4, 0x76, 0x18, 0xf6, 0x98, 0x2a, 0x44, 0x53, 0x3d, 0x8f, 0xe1, 0xa1, 0xcf, 0x7d, 0x13, 0x4, 0x6a, 0xd8, 0xb6, 0x9b, 0xf5, 0x47, 0x29, 0x3e, 0x50, 0xe2, 0x8c, 0xcc, 0xa2, 0x10, 0x7e, 0x69, 0x7, 0xb5, 0xdb, 0x35, 0x5b, 0xe9, 0x87, 0x90, 0xfe, 0x4c, 0x22, 0x62, 0xc, 0xbe, 0xd0, 0xc7, 0xa9, 0x1b, 0x75, 0xda, 0xb4, 0x6, 0x68, 0x7f, 0x11, 0xa3, 0xcd, 0x8d, 0xe3, 0x51, 0x3f, 0x28, 0x46, 0xf4, 0x9a, 0x74, 0x1a, 0xa8, 0xc6, 0xd1, 0xbf, 0xd, 0x63, 0x23, 0x4d, 0xff, 0x91, 0x86, 0xe8, 0x5a, 0x34}, - {0x0, 0x6f, 0xde, 0xb1, 0xa1, 0xce, 0x7f, 0x10, 0x5f, 0x30, 0x81, 0xee, 0xfe, 0x91, 0x20, 0x4f, 0xbe, 0xd1, 0x60, 0xf, 0x1f, 0x70, 0xc1, 0xae, 0xe1, 0x8e, 0x3f, 0x50, 0x40, 0x2f, 0x9e, 0xf1, 0x61, 0xe, 0xbf, 0xd0, 0xc0, 0xaf, 0x1e, 0x71, 0x3e, 0x51, 0xe0, 0x8f, 0x9f, 0xf0, 0x41, 0x2e, 0xdf, 0xb0, 0x1, 0x6e, 0x7e, 0x11, 0xa0, 0xcf, 0x80, 0xef, 0x5e, 0x31, 0x21, 0x4e, 0xff, 0x90, 0xc2, 0xad, 0x1c, 0x73, 0x63, 0xc, 0xbd, 0xd2, 0x9d, 0xf2, 0x43, 0x2c, 0x3c, 0x53, 0xe2, 0x8d, 0x7c, 0x13, 0xa2, 0xcd, 0xdd, 0xb2, 0x3, 0x6c, 0x23, 0x4c, 0xfd, 0x92, 0x82, 0xed, 0x5c, 0x33, 0xa3, 0xcc, 0x7d, 0x12, 0x2, 0x6d, 0xdc, 0xb3, 0xfc, 0x93, 0x22, 0x4d, 0x5d, 0x32, 0x83, 0xec, 0x1d, 0x72, 0xc3, 0xac, 0xbc, 0xd3, 0x62, 0xd, 0x42, 0x2d, 0x9c, 0xf3, 0xe3, 0x8c, 0x3d, 0x52, 0x99, 0xf6, 0x47, 0x28, 0x38, 0x57, 0xe6, 0x89, 0xc6, 0xa9, 0x18, 0x77, 0x67, 0x8, 0xb9, 0xd6, 0x27, 0x48, 0xf9, 0x96, 0x86, 0xe9, 0x58, 0x37, 0x78, 0x17, 0xa6, 0xc9, 0xd9, 0xb6, 0x7, 0x68, 0xf8, 0x97, 0x26, 0x49, 0x59, 0x36, 0x87, 0xe8, 0xa7, 0xc8, 0x79, 0x16, 0x6, 0x69, 0xd8, 0xb7, 0x46, 0x29, 0x98, 0xf7, 0xe7, 0x88, 0x39, 0x56, 0x19, 0x76, 0xc7, 0xa8, 0xb8, 0xd7, 0x66, 0x9, 0x5b, 0x34, 0x85, 0xea, 0xfa, 0x95, 0x24, 0x4b, 0x4, 0x6b, 0xda, 0xb5, 0xa5, 0xca, 0x7b, 0x14, 0xe5, 0x8a, 0x3b, 0x54, 0x44, 0x2b, 0x9a, 0xf5, 0xba, 0xd5, 0x64, 0xb, 0x1b, 0x74, 0xc5, 0xaa, 0x3a, 0x55, 0xe4, 0x8b, 0x9b, 0xf4, 0x45, 0x2a, 0x65, 0xa, 0xbb, 0xd4, 0xc4, 0xab, 0x1a, 0x75, 0x84, 0xeb, 0x5a, 0x35, 0x25, 0x4a, 0xfb, 0x94, 0xdb, 0xb4, 0x5, 0x6a, 0x7a, 0x15, 0xa4, 0xcb}, - {0x0, 0x70, 0xe0, 0x90, 0xdd, 0xad, 0x3d, 0x4d, 0xa7, 0xd7, 0x47, 0x37, 0x7a, 0xa, 0x9a, 0xea, 0x53, 0x23, 0xb3, 0xc3, 0x8e, 0xfe, 0x6e, 0x1e, 0xf4, 0x84, 0x14, 0x64, 0x29, 0x59, 0xc9, 0xb9, 0xa6, 0xd6, 0x46, 0x36, 0x7b, 0xb, 0x9b, 0xeb, 0x1, 0x71, 0xe1, 0x91, 0xdc, 0xac, 0x3c, 0x4c, 0xf5, 0x85, 0x15, 0x65, 0x28, 0x58, 0xc8, 0xb8, 0x52, 0x22, 0xb2, 0xc2, 0x8f, 0xff, 0x6f, 0x1f, 0x51, 0x21, 0xb1, 0xc1, 0x8c, 0xfc, 0x6c, 0x1c, 0xf6, 0x86, 0x16, 0x66, 0x2b, 0x5b, 0xcb, 0xbb, 0x2, 0x72, 0xe2, 0x92, 0xdf, 0xaf, 0x3f, 0x4f, 0xa5, 0xd5, 0x45, 0x35, 0x78, 0x8, 0x98, 0xe8, 0xf7, 0x87, 0x17, 0x67, 0x2a, 0x5a, 0xca, 0xba, 0x50, 0x20, 0xb0, 0xc0, 0x8d, 0xfd, 0x6d, 0x1d, 0xa4, 0xd4, 0x44, 0x34, 0x79, 0x9, 0x99, 0xe9, 0x3, 0x73, 0xe3, 0x93, 0xde, 0xae, 0x3e, 0x4e, 0xa2, 0xd2, 0x42, 0x32, 0x7f, 0xf, 0x9f, 0xef, 0x5, 0x75, 0xe5, 0x95, 0xd8, 0xa8, 0x38, 0x48, 0xf1, 0x81, 0x11, 0x61, 0x2c, 0x5c, 0xcc, 0xbc, 0x56, 0x26, 0xb6, 0xc6, 0x8b, 0xfb, 0x6b, 0x1b, 0x4, 0x74, 0xe4, 0x94, 0xd9, 0xa9, 0x39, 0x49, 0xa3, 0xd3, 0x43, 0x33, 0x7e, 0xe, 0x9e, 0xee, 0x57, 0x27, 0xb7, 0xc7, 0x8a, 0xfa, 0x6a, 0x1a, 0xf0, 0x80, 0x10, 0x60, 0x2d, 0x5d, 0xcd, 0xbd, 0xf3, 0x83, 0x13, 0x63, 0x2e, 0x5e, 0xce, 0xbe, 0x54, 0x24, 0xb4, 0xc4, 0x89, 0xf9, 0x69, 0x19, 0xa0, 0xd0, 0x40, 0x30, 0x7d, 0xd, 0x9d, 0xed, 0x7, 0x77, 0xe7, 0x97, 0xda, 0xaa, 0x3a, 0x4a, 0x55, 0x25, 0xb5, 0xc5, 0x88, 0xf8, 0x68, 0x18, 0xf2, 0x82, 0x12, 0x62, 0x2f, 0x5f, 0xcf, 0xbf, 0x6, 0x76, 0xe6, 0x96, 0xdb, 0xab, 0x3b, 0x4b, 0xa1, 0xd1, 0x41, 0x31, 0x7c, 0xc, 0x9c, 0xec}, - {0x0, 0x71, 0xe2, 0x93, 0xd9, 0xa8, 0x3b, 0x4a, 0xaf, 0xde, 0x4d, 0x3c, 0x76, 0x7, 0x94, 0xe5, 0x43, 0x32, 0xa1, 0xd0, 0x9a, 0xeb, 0x78, 0x9, 0xec, 0x9d, 0xe, 0x7f, 0x35, 0x44, 0xd7, 0xa6, 0x86, 0xf7, 0x64, 0x15, 0x5f, 0x2e, 0xbd, 0xcc, 0x29, 0x58, 0xcb, 0xba, 0xf0, 0x81, 0x12, 0x63, 0xc5, 0xb4, 0x27, 0x56, 0x1c, 0x6d, 0xfe, 0x8f, 0x6a, 0x1b, 0x88, 0xf9, 0xb3, 0xc2, 0x51, 0x20, 0x11, 0x60, 0xf3, 0x82, 0xc8, 0xb9, 0x2a, 0x5b, 0xbe, 0xcf, 0x5c, 0x2d, 0x67, 0x16, 0x85, 0xf4, 0x52, 0x23, 0xb0, 0xc1, 0x8b, 0xfa, 0x69, 0x18, 0xfd, 0x8c, 0x1f, 0x6e, 0x24, 0x55, 0xc6, 0xb7, 0x97, 0xe6, 0x75, 0x4, 0x4e, 0x3f, 0xac, 0xdd, 0x38, 0x49, 0xda, 0xab, 0xe1, 0x90, 0x3, 0x72, 0xd4, 0xa5, 0x36, 0x47, 0xd, 0x7c, 0xef, 0x9e, 0x7b, 0xa, 0x99, 0xe8, 0xa2, 0xd3, 0x40, 0x31, 0x22, 0x53, 0xc0, 0xb1, 0xfb, 0x8a, 0x19, 0x68, 0x8d, 0xfc, 0x6f, 0x1e, 0x54, 0x25, 0xb6, 0xc7, 0x61, 0x10, 0x83, 0xf2, 0xb8, 0xc9, 0x5a, 0x2b, 0xce, 0xbf, 0x2c, 0x5d, 0x17, 0x66, 0xf5, 0x84, 0xa4, 0xd5, 0x46, 0x37, 0x7d, 0xc, 0x9f, 0xee, 0xb, 0x7a, 0xe9, 0x98, 0xd2, 0xa3, 0x30, 0x41, 0xe7, 0x96, 0x5, 0x74, 0x3e, 0x4f, 0xdc, 0xad, 0x48, 0x39, 0xaa, 0xdb, 0x91, 0xe0, 0x73, 0x2, 0x33, 0x42, 0xd1, 0xa0, 0xea, 0x9b, 0x8, 0x79, 0x9c, 0xed, 0x7e, 0xf, 0x45, 0x34, 0xa7, 0xd6, 0x70, 0x1, 0x92, 0xe3, 0xa9, 0xd8, 0x4b, 0x3a, 0xdf, 0xae, 0x3d, 0x4c, 0x6, 0x77, 0xe4, 0x95, 0xb5, 0xc4, 0x57, 0x26, 0x6c, 0x1d, 0x8e, 0xff, 0x1a, 0x6b, 0xf8, 0x89, 0xc3, 0xb2, 0x21, 0x50, 0xf6, 0x87, 0x14, 0x65, 0x2f, 0x5e, 0xcd, 0xbc, 0x59, 0x28, 0xbb, 0xca, 0x80, 0xf1, 0x62, 0x13}, - {0x0, 0x72, 0xe4, 0x96, 0xd5, 0xa7, 0x31, 0x43, 0xb7, 0xc5, 0x53, 0x21, 0x62, 0x10, 0x86, 0xf4, 0x73, 0x1, 0x97, 0xe5, 0xa6, 0xd4, 0x42, 0x30, 0xc4, 0xb6, 0x20, 0x52, 0x11, 0x63, 0xf5, 0x87, 0xe6, 0x94, 0x2, 0x70, 0x33, 0x41, 0xd7, 0xa5, 0x51, 0x23, 0xb5, 0xc7, 0x84, 0xf6, 0x60, 0x12, 0x95, 0xe7, 0x71, 0x3, 0x40, 0x32, 0xa4, 0xd6, 0x22, 0x50, 0xc6, 0xb4, 0xf7, 0x85, 0x13, 0x61, 0xd1, 0xa3, 0x35, 0x47, 0x4, 0x76, 0xe0, 0x92, 0x66, 0x14, 0x82, 0xf0, 0xb3, 0xc1, 0x57, 0x25, 0xa2, 0xd0, 0x46, 0x34, 0x77, 0x5, 0x93, 0xe1, 0x15, 0x67, 0xf1, 0x83, 0xc0, 0xb2, 0x24, 0x56, 0x37, 0x45, 0xd3, 0xa1, 0xe2, 0x90, 0x6, 0x74, 0x80, 0xf2, 0x64, 0x16, 0x55, 0x27, 0xb1, 0xc3, 0x44, 0x36, 0xa0, 0xd2, 0x91, 0xe3, 0x75, 0x7, 0xf3, 0x81, 0x17, 0x65, 0x26, 0x54, 0xc2, 0xb0, 0xbf, 0xcd, 0x5b, 0x29, 0x6a, 0x18, 0x8e, 0xfc, 0x8, 0x7a, 0xec, 0x9e, 0xdd, 0xaf, 0x39, 0x4b, 0xcc, 0xbe, 0x28, 0x5a, 0x19, 0x6b, 0xfd, 0x8f, 0x7b, 0x9, 0x9f, 0xed, 0xae, 0xdc, 0x4a, 0x38, 0x59, 0x2b, 0xbd, 0xcf, 0x8c, 0xfe, 0x68, 0x1a, 0xee, 0x9c, 0xa, 0x78, 0x3b, 0x49, 0xdf, 0xad, 0x2a, 0x58, 0xce, 0xbc, 0xff, 0x8d, 0x1b, 0x69, 0x9d, 0xef, 0x79, 0xb, 0x48, 0x3a, 0xac, 0xde, 0x6e, 0x1c, 0x8a, 0xf8, 0xbb, 0xc9, 0x5f, 0x2d, 0xd9, 0xab, 0x3d, 0x4f, 0xc, 0x7e, 0xe8, 0x9a, 0x1d, 0x6f, 0xf9, 0x8b, 0xc8, 0xba, 0x2c, 0x5e, 0xaa, 0xd8, 0x4e, 0x3c, 0x7f, 0xd, 0x9b, 0xe9, 0x88, 0xfa, 0x6c, 0x1e, 0x5d, 0x2f, 0xb9, 0xcb, 0x3f, 0x4d, 0xdb, 0xa9, 0xea, 0x98, 0xe, 0x7c, 0xfb, 0x89, 0x1f, 0x6d, 0x2e, 0x5c, 0xca, 0xb8, 0x4c, 0x3e, 0xa8, 0xda, 0x99, 0xeb, 0x7d, 0xf}, - {0x0, 0x73, 0xe6, 0x95, 0xd1, 0xa2, 0x37, 0x44, 0xbf, 0xcc, 0x59, 0x2a, 0x6e, 0x1d, 0x88, 0xfb, 0x63, 0x10, 0x85, 0xf6, 0xb2, 0xc1, 0x54, 0x27, 0xdc, 0xaf, 0x3a, 0x49, 0xd, 0x7e, 0xeb, 0x98, 0xc6, 0xb5, 0x20, 0x53, 0x17, 0x64, 0xf1, 0x82, 0x79, 0xa, 0x9f, 0xec, 0xa8, 0xdb, 0x4e, 0x3d, 0xa5, 0xd6, 0x43, 0x30, 0x74, 0x7, 0x92, 0xe1, 0x1a, 0x69, 0xfc, 0x8f, 0xcb, 0xb8, 0x2d, 0x5e, 0x91, 0xe2, 0x77, 0x4, 0x40, 0x33, 0xa6, 0xd5, 0x2e, 0x5d, 0xc8, 0xbb, 0xff, 0x8c, 0x19, 0x6a, 0xf2, 0x81, 0x14, 0x67, 0x23, 0x50, 0xc5, 0xb6, 0x4d, 0x3e, 0xab, 0xd8, 0x9c, 0xef, 0x7a, 0x9, 0x57, 0x24, 0xb1, 0xc2, 0x86, 0xf5, 0x60, 0x13, 0xe8, 0x9b, 0xe, 0x7d, 0x39, 0x4a, 0xdf, 0xac, 0x34, 0x47, 0xd2, 0xa1, 0xe5, 0x96, 0x3, 0x70, 0x8b, 0xf8, 0x6d, 0x1e, 0x5a, 0x29, 0xbc, 0xcf, 0x3f, 0x4c, 0xd9, 0xaa, 0xee, 0x9d, 0x8, 0x7b, 0x80, 0xf3, 0x66, 0x15, 0x51, 0x22, 0xb7, 0xc4, 0x5c, 0x2f, 0xba, 0xc9, 0x8d, 0xfe, 0x6b, 0x18, 0xe3, 0x90, 0x5, 0x76, 0x32, 0x41, 0xd4, 0xa7, 0xf9, 0x8a, 0x1f, 0x6c, 0x28, 0x5b, 0xce, 0xbd, 0x46, 0x35, 0xa0, 0xd3, 0x97, 0xe4, 0x71, 0x2, 0x9a, 0xe9, 0x7c, 0xf, 0x4b, 0x38, 0xad, 0xde, 0x25, 0x56, 0xc3, 0xb0, 0xf4, 0x87, 0x12, 0x61, 0xae, 0xdd, 0x48, 0x3b, 0x7f, 0xc, 0x99, 0xea, 0x11, 0x62, 0xf7, 0x84, 0xc0, 0xb3, 0x26, 0x55, 0xcd, 0xbe, 0x2b, 0x58, 0x1c, 0x6f, 0xfa, 0x89, 0x72, 0x1, 0x94, 0xe7, 0xa3, 0xd0, 0x45, 0x36, 0x68, 0x1b, 0x8e, 0xfd, 0xb9, 0xca, 0x5f, 0x2c, 0xd7, 0xa4, 0x31, 0x42, 0x6, 0x75, 0xe0, 0x93, 0xb, 0x78, 0xed, 0x9e, 0xda, 0xa9, 0x3c, 0x4f, 0xb4, 0xc7, 0x52, 0x21, 0x65, 0x16, 0x83, 0xf0}, - {0x0, 0x74, 0xe8, 0x9c, 0xcd, 0xb9, 0x25, 0x51, 0x87, 0xf3, 0x6f, 0x1b, 0x4a, 0x3e, 0xa2, 0xd6, 0x13, 0x67, 0xfb, 0x8f, 0xde, 0xaa, 0x36, 0x42, 0x94, 0xe0, 0x7c, 0x8, 0x59, 0x2d, 0xb1, 0xc5, 0x26, 0x52, 0xce, 0xba, 0xeb, 0x9f, 0x3, 0x77, 0xa1, 0xd5, 0x49, 0x3d, 0x6c, 0x18, 0x84, 0xf0, 0x35, 0x41, 0xdd, 0xa9, 0xf8, 0x8c, 0x10, 0x64, 0xb2, 0xc6, 0x5a, 0x2e, 0x7f, 0xb, 0x97, 0xe3, 0x4c, 0x38, 0xa4, 0xd0, 0x81, 0xf5, 0x69, 0x1d, 0xcb, 0xbf, 0x23, 0x57, 0x6, 0x72, 0xee, 0x9a, 0x5f, 0x2b, 0xb7, 0xc3, 0x92, 0xe6, 0x7a, 0xe, 0xd8, 0xac, 0x30, 0x44, 0x15, 0x61, 0xfd, 0x89, 0x6a, 0x1e, 0x82, 0xf6, 0xa7, 0xd3, 0x4f, 0x3b, 0xed, 0x99, 0x5, 0x71, 0x20, 0x54, 0xc8, 0xbc, 0x79, 0xd, 0x91, 0xe5, 0xb4, 0xc0, 0x5c, 0x28, 0xfe, 0x8a, 0x16, 0x62, 0x33, 0x47, 0xdb, 0xaf, 0x98, 0xec, 0x70, 0x4, 0x55, 0x21, 0xbd, 0xc9, 0x1f, 0x6b, 0xf7, 0x83, 0xd2, 0xa6, 0x3a, 0x4e, 0x8b, 0xff, 0x63, 0x17, 0x46, 0x32, 0xae, 0xda, 0xc, 0x78, 0xe4, 0x90, 0xc1, 0xb5, 0x29, 0x5d, 0xbe, 0xca, 0x56, 0x22, 0x73, 0x7, 0x9b, 0xef, 0x39, 0x4d, 0xd1, 0xa5, 0xf4, 0x80, 0x1c, 0x68, 0xad, 0xd9, 0x45, 0x31, 0x60, 0x14, 0x88, 0xfc, 0x2a, 0x5e, 0xc2, 0xb6, 0xe7, 0x93, 0xf, 0x7b, 0xd4, 0xa0, 0x3c, 0x48, 0x19, 0x6d, 0xf1, 0x85, 0x53, 0x27, 0xbb, 0xcf, 0x9e, 0xea, 0x76, 0x2, 0xc7, 0xb3, 0x2f, 0x5b, 0xa, 0x7e, 0xe2, 0x96, 0x40, 0x34, 0xa8, 0xdc, 0x8d, 0xf9, 0x65, 0x11, 0xf2, 0x86, 0x1a, 0x6e, 0x3f, 0x4b, 0xd7, 0xa3, 0x75, 0x1, 0x9d, 0xe9, 0xb8, 0xcc, 0x50, 0x24, 0xe1, 0x95, 0x9, 0x7d, 0x2c, 0x58, 0xc4, 0xb0, 0x66, 0x12, 0x8e, 0xfa, 0xab, 0xdf, 0x43, 0x37}, - {0x0, 0x75, 0xea, 0x9f, 0xc9, 0xbc, 0x23, 0x56, 0x8f, 0xfa, 0x65, 0x10, 0x46, 0x33, 0xac, 0xd9, 0x3, 0x76, 0xe9, 0x9c, 0xca, 0xbf, 0x20, 0x55, 0x8c, 0xf9, 0x66, 0x13, 0x45, 0x30, 0xaf, 0xda, 0x6, 0x73, 0xec, 0x99, 0xcf, 0xba, 0x25, 0x50, 0x89, 0xfc, 0x63, 0x16, 0x40, 0x35, 0xaa, 0xdf, 0x5, 0x70, 0xef, 0x9a, 0xcc, 0xb9, 0x26, 0x53, 0x8a, 0xff, 0x60, 0x15, 0x43, 0x36, 0xa9, 0xdc, 0xc, 0x79, 0xe6, 0x93, 0xc5, 0xb0, 0x2f, 0x5a, 0x83, 0xf6, 0x69, 0x1c, 0x4a, 0x3f, 0xa0, 0xd5, 0xf, 0x7a, 0xe5, 0x90, 0xc6, 0xb3, 0x2c, 0x59, 0x80, 0xf5, 0x6a, 0x1f, 0x49, 0x3c, 0xa3, 0xd6, 0xa, 0x7f, 0xe0, 0x95, 0xc3, 0xb6, 0x29, 0x5c, 0x85, 0xf0, 0x6f, 0x1a, 0x4c, 0x39, 0xa6, 0xd3, 0x9, 0x7c, 0xe3, 0x96, 0xc0, 0xb5, 0x2a, 0x5f, 0x86, 0xf3, 0x6c, 0x19, 0x4f, 0x3a, 0xa5, 0xd0, 0x18, 0x6d, 0xf2, 0x87, 0xd1, 0xa4, 0x3b, 0x4e, 0x97, 0xe2, 0x7d, 0x8, 0x5e, 0x2b, 0xb4, 0xc1, 0x1b, 0x6e, 0xf1, 0x84, 0xd2, 0xa7, 0x38, 0x4d, 0x94, 0xe1, 0x7e, 0xb, 0x5d, 0x28, 0xb7, 0xc2, 0x1e, 0x6b, 0xf4, 0x81, 0xd7, 0xa2, 0x3d, 0x48, 0x91, 0xe4, 0x7b, 0xe, 0x58, 0x2d, 0xb2, 0xc7, 0x1d, 0x68, 0xf7, 0x82, 0xd4, 0xa1, 0x3e, 0x4b, 0x92, 0xe7, 0x78, 0xd, 0x5b, 0x2e, 0xb1, 0xc4, 0x14, 0x61, 0xfe, 0x8b, 0xdd, 0xa8, 0x37, 0x42, 0x9b, 0xee, 0x71, 0x4, 0x52, 0x27, 0xb8, 0xcd, 0x17, 0x62, 0xfd, 0x88, 0xde, 0xab, 0x34, 0x41, 0x98, 0xed, 0x72, 0x7, 0x51, 0x24, 0xbb, 0xce, 0x12, 0x67, 0xf8, 0x8d, 0xdb, 0xae, 0x31, 0x44, 0x9d, 0xe8, 0x77, 0x2, 0x54, 0x21, 0xbe, 0xcb, 0x11, 0x64, 0xfb, 0x8e, 0xd8, 0xad, 0x32, 0x47, 0x9e, 0xeb, 0x74, 0x1, 0x57, 0x22, 0xbd, 0xc8}, - {0x0, 0x76, 0xec, 0x9a, 0xc5, 0xb3, 0x29, 0x5f, 0x97, 0xe1, 0x7b, 0xd, 0x52, 0x24, 0xbe, 0xc8, 0x33, 0x45, 0xdf, 0xa9, 0xf6, 0x80, 0x1a, 0x6c, 0xa4, 0xd2, 0x48, 0x3e, 0x61, 0x17, 0x8d, 0xfb, 0x66, 0x10, 0x8a, 0xfc, 0xa3, 0xd5, 0x4f, 0x39, 0xf1, 0x87, 0x1d, 0x6b, 0x34, 0x42, 0xd8, 0xae, 0x55, 0x23, 0xb9, 0xcf, 0x90, 0xe6, 0x7c, 0xa, 0xc2, 0xb4, 0x2e, 0x58, 0x7, 0x71, 0xeb, 0x9d, 0xcc, 0xba, 0x20, 0x56, 0x9, 0x7f, 0xe5, 0x93, 0x5b, 0x2d, 0xb7, 0xc1, 0x9e, 0xe8, 0x72, 0x4, 0xff, 0x89, 0x13, 0x65, 0x3a, 0x4c, 0xd6, 0xa0, 0x68, 0x1e, 0x84, 0xf2, 0xad, 0xdb, 0x41, 0x37, 0xaa, 0xdc, 0x46, 0x30, 0x6f, 0x19, 0x83, 0xf5, 0x3d, 0x4b, 0xd1, 0xa7, 0xf8, 0x8e, 0x14, 0x62, 0x99, 0xef, 0x75, 0x3, 0x5c, 0x2a, 0xb0, 0xc6, 0xe, 0x78, 0xe2, 0x94, 0xcb, 0xbd, 0x27, 0x51, 0x85, 0xf3, 0x69, 0x1f, 0x40, 0x36, 0xac, 0xda, 0x12, 0x64, 0xfe, 0x88, 0xd7, 0xa1, 0x3b, 0x4d, 0xb6, 0xc0, 0x5a, 0x2c, 0x73, 0x5, 0x9f, 0xe9, 0x21, 0x57, 0xcd, 0xbb, 0xe4, 0x92, 0x8, 0x7e, 0xe3, 0x95, 0xf, 0x79, 0x26, 0x50, 0xca, 0xbc, 0x74, 0x2, 0x98, 0xee, 0xb1, 0xc7, 0x5d, 0x2b, 0xd0, 0xa6, 0x3c, 0x4a, 0x15, 0x63, 0xf9, 0x8f, 0x47, 0x31, 0xab, 0xdd, 0x82, 0xf4, 0x6e, 0x18, 0x49, 0x3f, 0xa5, 0xd3, 0x8c, 0xfa, 0x60, 0x16, 0xde, 0xa8, 0x32, 0x44, 0x1b, 0x6d, 0xf7, 0x81, 0x7a, 0xc, 0x96, 0xe0, 0xbf, 0xc9, 0x53, 0x25, 0xed, 0x9b, 0x1, 0x77, 0x28, 0x5e, 0xc4, 0xb2, 0x2f, 0x59, 0xc3, 0xb5, 0xea, 0x9c, 0x6, 0x70, 0xb8, 0xce, 0x54, 0x22, 0x7d, 0xb, 0x91, 0xe7, 0x1c, 0x6a, 0xf0, 0x86, 0xd9, 0xaf, 0x35, 0x43, 0x8b, 0xfd, 0x67, 0x11, 0x4e, 0x38, 0xa2, 0xd4}, - {0x0, 0x77, 0xee, 0x99, 0xc1, 0xb6, 0x2f, 0x58, 0x9f, 0xe8, 0x71, 0x6, 0x5e, 0x29, 0xb0, 0xc7, 0x23, 0x54, 0xcd, 0xba, 0xe2, 0x95, 0xc, 0x7b, 0xbc, 0xcb, 0x52, 0x25, 0x7d, 0xa, 0x93, 0xe4, 0x46, 0x31, 0xa8, 0xdf, 0x87, 0xf0, 0x69, 0x1e, 0xd9, 0xae, 0x37, 0x40, 0x18, 0x6f, 0xf6, 0x81, 0x65, 0x12, 0x8b, 0xfc, 0xa4, 0xd3, 0x4a, 0x3d, 0xfa, 0x8d, 0x14, 0x63, 0x3b, 0x4c, 0xd5, 0xa2, 0x8c, 0xfb, 0x62, 0x15, 0x4d, 0x3a, 0xa3, 0xd4, 0x13, 0x64, 0xfd, 0x8a, 0xd2, 0xa5, 0x3c, 0x4b, 0xaf, 0xd8, 0x41, 0x36, 0x6e, 0x19, 0x80, 0xf7, 0x30, 0x47, 0xde, 0xa9, 0xf1, 0x86, 0x1f, 0x68, 0xca, 0xbd, 0x24, 0x53, 0xb, 0x7c, 0xe5, 0x92, 0x55, 0x22, 0xbb, 0xcc, 0x94, 0xe3, 0x7a, 0xd, 0xe9, 0x9e, 0x7, 0x70, 0x28, 0x5f, 0xc6, 0xb1, 0x76, 0x1, 0x98, 0xef, 0xb7, 0xc0, 0x59, 0x2e, 0x5, 0x72, 0xeb, 0x9c, 0xc4, 0xb3, 0x2a, 0x5d, 0x9a, 0xed, 0x74, 0x3, 0x5b, 0x2c, 0xb5, 0xc2, 0x26, 0x51, 0xc8, 0xbf, 0xe7, 0x90, 0x9, 0x7e, 0xb9, 0xce, 0x57, 0x20, 0x78, 0xf, 0x96, 0xe1, 0x43, 0x34, 0xad, 0xda, 0x82, 0xf5, 0x6c, 0x1b, 0xdc, 0xab, 0x32, 0x45, 0x1d, 0x6a, 0xf3, 0x84, 0x60, 0x17, 0x8e, 0xf9, 0xa1, 0xd6, 0x4f, 0x38, 0xff, 0x88, 0x11, 0x66, 0x3e, 0x49, 0xd0, 0xa7, 0x89, 0xfe, 0x67, 0x10, 0x48, 0x3f, 0xa6, 0xd1, 0x16, 0x61, 0xf8, 0x8f, 0xd7, 0xa0, 0x39, 0x4e, 0xaa, 0xdd, 0x44, 0x33, 0x6b, 0x1c, 0x85, 0xf2, 0x35, 0x42, 0xdb, 0xac, 0xf4, 0x83, 0x1a, 0x6d, 0xcf, 0xb8, 0x21, 0x56, 0xe, 0x79, 0xe0, 0x97, 0x50, 0x27, 0xbe, 0xc9, 0x91, 0xe6, 0x7f, 0x8, 0xec, 0x9b, 0x2, 0x75, 0x2d, 0x5a, 0xc3, 0xb4, 0x73, 0x4, 0x9d, 0xea, 0xb2, 0xc5, 0x5c, 0x2b}, - {0x0, 0x78, 0xf0, 0x88, 0xfd, 0x85, 0xd, 0x75, 0xe7, 0x9f, 0x17, 0x6f, 0x1a, 0x62, 0xea, 0x92, 0xd3, 0xab, 0x23, 0x5b, 0x2e, 0x56, 0xde, 0xa6, 0x34, 0x4c, 0xc4, 0xbc, 0xc9, 0xb1, 0x39, 0x41, 0xbb, 0xc3, 0x4b, 0x33, 0x46, 0x3e, 0xb6, 0xce, 0x5c, 0x24, 0xac, 0xd4, 0xa1, 0xd9, 0x51, 0x29, 0x68, 0x10, 0x98, 0xe0, 0x95, 0xed, 0x65, 0x1d, 0x8f, 0xf7, 0x7f, 0x7, 0x72, 0xa, 0x82, 0xfa, 0x6b, 0x13, 0x9b, 0xe3, 0x96, 0xee, 0x66, 0x1e, 0x8c, 0xf4, 0x7c, 0x4, 0x71, 0x9, 0x81, 0xf9, 0xb8, 0xc0, 0x48, 0x30, 0x45, 0x3d, 0xb5, 0xcd, 0x5f, 0x27, 0xaf, 0xd7, 0xa2, 0xda, 0x52, 0x2a, 0xd0, 0xa8, 0x20, 0x58, 0x2d, 0x55, 0xdd, 0xa5, 0x37, 0x4f, 0xc7, 0xbf, 0xca, 0xb2, 0x3a, 0x42, 0x3, 0x7b, 0xf3, 0x8b, 0xfe, 0x86, 0xe, 0x76, 0xe4, 0x9c, 0x14, 0x6c, 0x19, 0x61, 0xe9, 0x91, 0xd6, 0xae, 0x26, 0x5e, 0x2b, 0x53, 0xdb, 0xa3, 0x31, 0x49, 0xc1, 0xb9, 0xcc, 0xb4, 0x3c, 0x44, 0x5, 0x7d, 0xf5, 0x8d, 0xf8, 0x80, 0x8, 0x70, 0xe2, 0x9a, 0x12, 0x6a, 0x1f, 0x67, 0xef, 0x97, 0x6d, 0x15, 0x9d, 0xe5, 0x90, 0xe8, 0x60, 0x18, 0x8a, 0xf2, 0x7a, 0x2, 0x77, 0xf, 0x87, 0xff, 0xbe, 0xc6, 0x4e, 0x36, 0x43, 0x3b, 0xb3, 0xcb, 0x59, 0x21, 0xa9, 0xd1, 0xa4, 0xdc, 0x54, 0x2c, 0xbd, 0xc5, 0x4d, 0x35, 0x40, 0x38, 0xb0, 0xc8, 0x5a, 0x22, 0xaa, 0xd2, 0xa7, 0xdf, 0x57, 0x2f, 0x6e, 0x16, 0x9e, 0xe6, 0x93, 0xeb, 0x63, 0x1b, 0x89, 0xf1, 0x79, 0x1, 0x74, 0xc, 0x84, 0xfc, 0x6, 0x7e, 0xf6, 0x8e, 0xfb, 0x83, 0xb, 0x73, 0xe1, 0x99, 0x11, 0x69, 0x1c, 0x64, 0xec, 0x94, 0xd5, 0xad, 0x25, 0x5d, 0x28, 0x50, 0xd8, 0xa0, 0x32, 0x4a, 0xc2, 0xba, 0xcf, 0xb7, 0x3f, 0x47}, - {0x0, 0x79, 0xf2, 0x8b, 0xf9, 0x80, 0xb, 0x72, 0xef, 0x96, 0x1d, 0x64, 0x16, 0x6f, 0xe4, 0x9d, 0xc3, 0xba, 0x31, 0x48, 0x3a, 0x43, 0xc8, 0xb1, 0x2c, 0x55, 0xde, 0xa7, 0xd5, 0xac, 0x27, 0x5e, 0x9b, 0xe2, 0x69, 0x10, 0x62, 0x1b, 0x90, 0xe9, 0x74, 0xd, 0x86, 0xff, 0x8d, 0xf4, 0x7f, 0x6, 0x58, 0x21, 0xaa, 0xd3, 0xa1, 0xd8, 0x53, 0x2a, 0xb7, 0xce, 0x45, 0x3c, 0x4e, 0x37, 0xbc, 0xc5, 0x2b, 0x52, 0xd9, 0xa0, 0xd2, 0xab, 0x20, 0x59, 0xc4, 0xbd, 0x36, 0x4f, 0x3d, 0x44, 0xcf, 0xb6, 0xe8, 0x91, 0x1a, 0x63, 0x11, 0x68, 0xe3, 0x9a, 0x7, 0x7e, 0xf5, 0x8c, 0xfe, 0x87, 0xc, 0x75, 0xb0, 0xc9, 0x42, 0x3b, 0x49, 0x30, 0xbb, 0xc2, 0x5f, 0x26, 0xad, 0xd4, 0xa6, 0xdf, 0x54, 0x2d, 0x73, 0xa, 0x81, 0xf8, 0x8a, 0xf3, 0x78, 0x1, 0x9c, 0xe5, 0x6e, 0x17, 0x65, 0x1c, 0x97, 0xee, 0x56, 0x2f, 0xa4, 0xdd, 0xaf, 0xd6, 0x5d, 0x24, 0xb9, 0xc0, 0x4b, 0x32, 0x40, 0x39, 0xb2, 0xcb, 0x95, 0xec, 0x67, 0x1e, 0x6c, 0x15, 0x9e, 0xe7, 0x7a, 0x3, 0x88, 0xf1, 0x83, 0xfa, 0x71, 0x8, 0xcd, 0xb4, 0x3f, 0x46, 0x34, 0x4d, 0xc6, 0xbf, 0x22, 0x5b, 0xd0, 0xa9, 0xdb, 0xa2, 0x29, 0x50, 0xe, 0x77, 0xfc, 0x85, 0xf7, 0x8e, 0x5, 0x7c, 0xe1, 0x98, 0x13, 0x6a, 0x18, 0x61, 0xea, 0x93, 0x7d, 0x4, 0x8f, 0xf6, 0x84, 0xfd, 0x76, 0xf, 0x92, 0xeb, 0x60, 0x19, 0x6b, 0x12, 0x99, 0xe0, 0xbe, 0xc7, 0x4c, 0x35, 0x47, 0x3e, 0xb5, 0xcc, 0x51, 0x28, 0xa3, 0xda, 0xa8, 0xd1, 0x5a, 0x23, 0xe6, 0x9f, 0x14, 0x6d, 0x1f, 0x66, 0xed, 0x94, 0x9, 0x70, 0xfb, 0x82, 0xf0, 0x89, 0x2, 0x7b, 0x25, 0x5c, 0xd7, 0xae, 0xdc, 0xa5, 0x2e, 0x57, 0xca, 0xb3, 0x38, 0x41, 0x33, 0x4a, 0xc1, 0xb8}, - {0x0, 0x7a, 0xf4, 0x8e, 0xf5, 0x8f, 0x1, 0x7b, 0xf7, 0x8d, 0x3, 0x79, 0x2, 0x78, 0xf6, 0x8c, 0xf3, 0x89, 0x7, 0x7d, 0x6, 0x7c, 0xf2, 0x88, 0x4, 0x7e, 0xf0, 0x8a, 0xf1, 0x8b, 0x5, 0x7f, 0xfb, 0x81, 0xf, 0x75, 0xe, 0x74, 0xfa, 0x80, 0xc, 0x76, 0xf8, 0x82, 0xf9, 0x83, 0xd, 0x77, 0x8, 0x72, 0xfc, 0x86, 0xfd, 0x87, 0x9, 0x73, 0xff, 0x85, 0xb, 0x71, 0xa, 0x70, 0xfe, 0x84, 0xeb, 0x91, 0x1f, 0x65, 0x1e, 0x64, 0xea, 0x90, 0x1c, 0x66, 0xe8, 0x92, 0xe9, 0x93, 0x1d, 0x67, 0x18, 0x62, 0xec, 0x96, 0xed, 0x97, 0x19, 0x63, 0xef, 0x95, 0x1b, 0x61, 0x1a, 0x60, 0xee, 0x94, 0x10, 0x6a, 0xe4, 0x9e, 0xe5, 0x9f, 0x11, 0x6b, 0xe7, 0x9d, 0x13, 0x69, 0x12, 0x68, 0xe6, 0x9c, 0xe3, 0x99, 0x17, 0x6d, 0x16, 0x6c, 0xe2, 0x98, 0x14, 0x6e, 0xe0, 0x9a, 0xe1, 0x9b, 0x15, 0x6f, 0xcb, 0xb1, 0x3f, 0x45, 0x3e, 0x44, 0xca, 0xb0, 0x3c, 0x46, 0xc8, 0xb2, 0xc9, 0xb3, 0x3d, 0x47, 0x38, 0x42, 0xcc, 0xb6, 0xcd, 0xb7, 0x39, 0x43, 0xcf, 0xb5, 0x3b, 0x41, 0x3a, 0x40, 0xce, 0xb4, 0x30, 0x4a, 0xc4, 0xbe, 0xc5, 0xbf, 0x31, 0x4b, 0xc7, 0xbd, 0x33, 0x49, 0x32, 0x48, 0xc6, 0xbc, 0xc3, 0xb9, 0x37, 0x4d, 0x36, 0x4c, 0xc2, 0xb8, 0x34, 0x4e, 0xc0, 0xba, 0xc1, 0xbb, 0x35, 0x4f, 0x20, 0x5a, 0xd4, 0xae, 0xd5, 0xaf, 0x21, 0x5b, 0xd7, 0xad, 0x23, 0x59, 0x22, 0x58, 0xd6, 0xac, 0xd3, 0xa9, 0x27, 0x5d, 0x26, 0x5c, 0xd2, 0xa8, 0x24, 0x5e, 0xd0, 0xaa, 0xd1, 0xab, 0x25, 0x5f, 0xdb, 0xa1, 0x2f, 0x55, 0x2e, 0x54, 0xda, 0xa0, 0x2c, 0x56, 0xd8, 0xa2, 0xd9, 0xa3, 0x2d, 0x57, 0x28, 0x52, 0xdc, 0xa6, 0xdd, 0xa7, 0x29, 0x53, 0xdf, 0xa5, 0x2b, 0x51, 0x2a, 0x50, 0xde, 0xa4}, - {0x0, 0x7b, 0xf6, 0x8d, 0xf1, 0x8a, 0x7, 0x7c, 0xff, 0x84, 0x9, 0x72, 0xe, 0x75, 0xf8, 0x83, 0xe3, 0x98, 0x15, 0x6e, 0x12, 0x69, 0xe4, 0x9f, 0x1c, 0x67, 0xea, 0x91, 0xed, 0x96, 0x1b, 0x60, 0xdb, 0xa0, 0x2d, 0x56, 0x2a, 0x51, 0xdc, 0xa7, 0x24, 0x5f, 0xd2, 0xa9, 0xd5, 0xae, 0x23, 0x58, 0x38, 0x43, 0xce, 0xb5, 0xc9, 0xb2, 0x3f, 0x44, 0xc7, 0xbc, 0x31, 0x4a, 0x36, 0x4d, 0xc0, 0xbb, 0xab, 0xd0, 0x5d, 0x26, 0x5a, 0x21, 0xac, 0xd7, 0x54, 0x2f, 0xa2, 0xd9, 0xa5, 0xde, 0x53, 0x28, 0x48, 0x33, 0xbe, 0xc5, 0xb9, 0xc2, 0x4f, 0x34, 0xb7, 0xcc, 0x41, 0x3a, 0x46, 0x3d, 0xb0, 0xcb, 0x70, 0xb, 0x86, 0xfd, 0x81, 0xfa, 0x77, 0xc, 0x8f, 0xf4, 0x79, 0x2, 0x7e, 0x5, 0x88, 0xf3, 0x93, 0xe8, 0x65, 0x1e, 0x62, 0x19, 0x94, 0xef, 0x6c, 0x17, 0x9a, 0xe1, 0x9d, 0xe6, 0x6b, 0x10, 0x4b, 0x30, 0xbd, 0xc6, 0xba, 0xc1, 0x4c, 0x37, 0xb4, 0xcf, 0x42, 0x39, 0x45, 0x3e, 0xb3, 0xc8, 0xa8, 0xd3, 0x5e, 0x25, 0x59, 0x22, 0xaf, 0xd4, 0x57, 0x2c, 0xa1, 0xda, 0xa6, 0xdd, 0x50, 0x2b, 0x90, 0xeb, 0x66, 0x1d, 0x61, 0x1a, 0x97, 0xec, 0x6f, 0x14, 0x99, 0xe2, 0x9e, 0xe5, 0x68, 0x13, 0x73, 0x8, 0x85, 0xfe, 0x82, 0xf9, 0x74, 0xf, 0x8c, 0xf7, 0x7a, 0x1, 0x7d, 0x6, 0x8b, 0xf0, 0xe0, 0x9b, 0x16, 0x6d, 0x11, 0x6a, 0xe7, 0x9c, 0x1f, 0x64, 0xe9, 0x92, 0xee, 0x95, 0x18, 0x63, 0x3, 0x78, 0xf5, 0x8e, 0xf2, 0x89, 0x4, 0x7f, 0xfc, 0x87, 0xa, 0x71, 0xd, 0x76, 0xfb, 0x80, 0x3b, 0x40, 0xcd, 0xb6, 0xca, 0xb1, 0x3c, 0x47, 0xc4, 0xbf, 0x32, 0x49, 0x35, 0x4e, 0xc3, 0xb8, 0xd8, 0xa3, 0x2e, 0x55, 0x29, 0x52, 0xdf, 0xa4, 0x27, 0x5c, 0xd1, 0xaa, 0xd6, 0xad, 0x20, 0x5b}, - {0x0, 0x7c, 0xf8, 0x84, 0xed, 0x91, 0x15, 0x69, 0xc7, 0xbb, 0x3f, 0x43, 0x2a, 0x56, 0xd2, 0xae, 0x93, 0xef, 0x6b, 0x17, 0x7e, 0x2, 0x86, 0xfa, 0x54, 0x28, 0xac, 0xd0, 0xb9, 0xc5, 0x41, 0x3d, 0x3b, 0x47, 0xc3, 0xbf, 0xd6, 0xaa, 0x2e, 0x52, 0xfc, 0x80, 0x4, 0x78, 0x11, 0x6d, 0xe9, 0x95, 0xa8, 0xd4, 0x50, 0x2c, 0x45, 0x39, 0xbd, 0xc1, 0x6f, 0x13, 0x97, 0xeb, 0x82, 0xfe, 0x7a, 0x6, 0x76, 0xa, 0x8e, 0xf2, 0x9b, 0xe7, 0x63, 0x1f, 0xb1, 0xcd, 0x49, 0x35, 0x5c, 0x20, 0xa4, 0xd8, 0xe5, 0x99, 0x1d, 0x61, 0x8, 0x74, 0xf0, 0x8c, 0x22, 0x5e, 0xda, 0xa6, 0xcf, 0xb3, 0x37, 0x4b, 0x4d, 0x31, 0xb5, 0xc9, 0xa0, 0xdc, 0x58, 0x24, 0x8a, 0xf6, 0x72, 0xe, 0x67, 0x1b, 0x9f, 0xe3, 0xde, 0xa2, 0x26, 0x5a, 0x33, 0x4f, 0xcb, 0xb7, 0x19, 0x65, 0xe1, 0x9d, 0xf4, 0x88, 0xc, 0x70, 0xec, 0x90, 0x14, 0x68, 0x1, 0x7d, 0xf9, 0x85, 0x2b, 0x57, 0xd3, 0xaf, 0xc6, 0xba, 0x3e, 0x42, 0x7f, 0x3, 0x87, 0xfb, 0x92, 0xee, 0x6a, 0x16, 0xb8, 0xc4, 0x40, 0x3c, 0x55, 0x29, 0xad, 0xd1, 0xd7, 0xab, 0x2f, 0x53, 0x3a, 0x46, 0xc2, 0xbe, 0x10, 0x6c, 0xe8, 0x94, 0xfd, 0x81, 0x5, 0x79, 0x44, 0x38, 0xbc, 0xc0, 0xa9, 0xd5, 0x51, 0x2d, 0x83, 0xff, 0x7b, 0x7, 0x6e, 0x12, 0x96, 0xea, 0x9a, 0xe6, 0x62, 0x1e, 0x77, 0xb, 0x8f, 0xf3, 0x5d, 0x21, 0xa5, 0xd9, 0xb0, 0xcc, 0x48, 0x34, 0x9, 0x75, 0xf1, 0x8d, 0xe4, 0x98, 0x1c, 0x60, 0xce, 0xb2, 0x36, 0x4a, 0x23, 0x5f, 0xdb, 0xa7, 0xa1, 0xdd, 0x59, 0x25, 0x4c, 0x30, 0xb4, 0xc8, 0x66, 0x1a, 0x9e, 0xe2, 0x8b, 0xf7, 0x73, 0xf, 0x32, 0x4e, 0xca, 0xb6, 0xdf, 0xa3, 0x27, 0x5b, 0xf5, 0x89, 0xd, 0x71, 0x18, 0x64, 0xe0, 0x9c}, - {0x0, 0x7d, 0xfa, 0x87, 0xe9, 0x94, 0x13, 0x6e, 0xcf, 0xb2, 0x35, 0x48, 0x26, 0x5b, 0xdc, 0xa1, 0x83, 0xfe, 0x79, 0x4, 0x6a, 0x17, 0x90, 0xed, 0x4c, 0x31, 0xb6, 0xcb, 0xa5, 0xd8, 0x5f, 0x22, 0x1b, 0x66, 0xe1, 0x9c, 0xf2, 0x8f, 0x8, 0x75, 0xd4, 0xa9, 0x2e, 0x53, 0x3d, 0x40, 0xc7, 0xba, 0x98, 0xe5, 0x62, 0x1f, 0x71, 0xc, 0x8b, 0xf6, 0x57, 0x2a, 0xad, 0xd0, 0xbe, 0xc3, 0x44, 0x39, 0x36, 0x4b, 0xcc, 0xb1, 0xdf, 0xa2, 0x25, 0x58, 0xf9, 0x84, 0x3, 0x7e, 0x10, 0x6d, 0xea, 0x97, 0xb5, 0xc8, 0x4f, 0x32, 0x5c, 0x21, 0xa6, 0xdb, 0x7a, 0x7, 0x80, 0xfd, 0x93, 0xee, 0x69, 0x14, 0x2d, 0x50, 0xd7, 0xaa, 0xc4, 0xb9, 0x3e, 0x43, 0xe2, 0x9f, 0x18, 0x65, 0xb, 0x76, 0xf1, 0x8c, 0xae, 0xd3, 0x54, 0x29, 0x47, 0x3a, 0xbd, 0xc0, 0x61, 0x1c, 0x9b, 0xe6, 0x88, 0xf5, 0x72, 0xf, 0x6c, 0x11, 0x96, 0xeb, 0x85, 0xf8, 0x7f, 0x2, 0xa3, 0xde, 0x59, 0x24, 0x4a, 0x37, 0xb0, 0xcd, 0xef, 0x92, 0x15, 0x68, 0x6, 0x7b, 0xfc, 0x81, 0x20, 0x5d, 0xda, 0xa7, 0xc9, 0xb4, 0x33, 0x4e, 0x77, 0xa, 0x8d, 0xf0, 0x9e, 0xe3, 0x64, 0x19, 0xb8, 0xc5, 0x42, 0x3f, 0x51, 0x2c, 0xab, 0xd6, 0xf4, 0x89, 0xe, 0x73, 0x1d, 0x60, 0xe7, 0x9a, 0x3b, 0x46, 0xc1, 0xbc, 0xd2, 0xaf, 0x28, 0x55, 0x5a, 0x27, 0xa0, 0xdd, 0xb3, 0xce, 0x49, 0x34, 0x95, 0xe8, 0x6f, 0x12, 0x7c, 0x1, 0x86, 0xfb, 0xd9, 0xa4, 0x23, 0x5e, 0x30, 0x4d, 0xca, 0xb7, 0x16, 0x6b, 0xec, 0x91, 0xff, 0x82, 0x5, 0x78, 0x41, 0x3c, 0xbb, 0xc6, 0xa8, 0xd5, 0x52, 0x2f, 0x8e, 0xf3, 0x74, 0x9, 0x67, 0x1a, 0x9d, 0xe0, 0xc2, 0xbf, 0x38, 0x45, 0x2b, 0x56, 0xd1, 0xac, 0xd, 0x70, 0xf7, 0x8a, 0xe4, 0x99, 0x1e, 0x63}, - {0x0, 0x7e, 0xfc, 0x82, 0xe5, 0x9b, 0x19, 0x67, 0xd7, 0xa9, 0x2b, 0x55, 0x32, 0x4c, 0xce, 0xb0, 0xb3, 0xcd, 0x4f, 0x31, 0x56, 0x28, 0xaa, 0xd4, 0x64, 0x1a, 0x98, 0xe6, 0x81, 0xff, 0x7d, 0x3, 0x7b, 0x5, 0x87, 0xf9, 0x9e, 0xe0, 0x62, 0x1c, 0xac, 0xd2, 0x50, 0x2e, 0x49, 0x37, 0xb5, 0xcb, 0xc8, 0xb6, 0x34, 0x4a, 0x2d, 0x53, 0xd1, 0xaf, 0x1f, 0x61, 0xe3, 0x9d, 0xfa, 0x84, 0x6, 0x78, 0xf6, 0x88, 0xa, 0x74, 0x13, 0x6d, 0xef, 0x91, 0x21, 0x5f, 0xdd, 0xa3, 0xc4, 0xba, 0x38, 0x46, 0x45, 0x3b, 0xb9, 0xc7, 0xa0, 0xde, 0x5c, 0x22, 0x92, 0xec, 0x6e, 0x10, 0x77, 0x9, 0x8b, 0xf5, 0x8d, 0xf3, 0x71, 0xf, 0x68, 0x16, 0x94, 0xea, 0x5a, 0x24, 0xa6, 0xd8, 0xbf, 0xc1, 0x43, 0x3d, 0x3e, 0x40, 0xc2, 0xbc, 0xdb, 0xa5, 0x27, 0x59, 0xe9, 0x97, 0x15, 0x6b, 0xc, 0x72, 0xf0, 0x8e, 0xf1, 0x8f, 0xd, 0x73, 0x14, 0x6a, 0xe8, 0x96, 0x26, 0x58, 0xda, 0xa4, 0xc3, 0xbd, 0x3f, 0x41, 0x42, 0x3c, 0xbe, 0xc0, 0xa7, 0xd9, 0x5b, 0x25, 0x95, 0xeb, 0x69, 0x17, 0x70, 0xe, 0x8c, 0xf2, 0x8a, 0xf4, 0x76, 0x8, 0x6f, 0x11, 0x93, 0xed, 0x5d, 0x23, 0xa1, 0xdf, 0xb8, 0xc6, 0x44, 0x3a, 0x39, 0x47, 0xc5, 0xbb, 0xdc, 0xa2, 0x20, 0x5e, 0xee, 0x90, 0x12, 0x6c, 0xb, 0x75, 0xf7, 0x89, 0x7, 0x79, 0xfb, 0x85, 0xe2, 0x9c, 0x1e, 0x60, 0xd0, 0xae, 0x2c, 0x52, 0x35, 0x4b, 0xc9, 0xb7, 0xb4, 0xca, 0x48, 0x36, 0x51, 0x2f, 0xad, 0xd3, 0x63, 0x1d, 0x9f, 0xe1, 0x86, 0xf8, 0x7a, 0x4, 0x7c, 0x2, 0x80, 0xfe, 0x99, 0xe7, 0x65, 0x1b, 0xab, 0xd5, 0x57, 0x29, 0x4e, 0x30, 0xb2, 0xcc, 0xcf, 0xb1, 0x33, 0x4d, 0x2a, 0x54, 0xd6, 0xa8, 0x18, 0x66, 0xe4, 0x9a, 0xfd, 0x83, 0x1, 0x7f}, - {0x0, 0x7f, 0xfe, 0x81, 0xe1, 0x9e, 0x1f, 0x60, 0xdf, 0xa0, 0x21, 0x5e, 0x3e, 0x41, 0xc0, 0xbf, 0xa3, 0xdc, 0x5d, 0x22, 0x42, 0x3d, 0xbc, 0xc3, 0x7c, 0x3, 0x82, 0xfd, 0x9d, 0xe2, 0x63, 0x1c, 0x5b, 0x24, 0xa5, 0xda, 0xba, 0xc5, 0x44, 0x3b, 0x84, 0xfb, 0x7a, 0x5, 0x65, 0x1a, 0x9b, 0xe4, 0xf8, 0x87, 0x6, 0x79, 0x19, 0x66, 0xe7, 0x98, 0x27, 0x58, 0xd9, 0xa6, 0xc6, 0xb9, 0x38, 0x47, 0xb6, 0xc9, 0x48, 0x37, 0x57, 0x28, 0xa9, 0xd6, 0x69, 0x16, 0x97, 0xe8, 0x88, 0xf7, 0x76, 0x9, 0x15, 0x6a, 0xeb, 0x94, 0xf4, 0x8b, 0xa, 0x75, 0xca, 0xb5, 0x34, 0x4b, 0x2b, 0x54, 0xd5, 0xaa, 0xed, 0x92, 0x13, 0x6c, 0xc, 0x73, 0xf2, 0x8d, 0x32, 0x4d, 0xcc, 0xb3, 0xd3, 0xac, 0x2d, 0x52, 0x4e, 0x31, 0xb0, 0xcf, 0xaf, 0xd0, 0x51, 0x2e, 0x91, 0xee, 0x6f, 0x10, 0x70, 0xf, 0x8e, 0xf1, 0x71, 0xe, 0x8f, 0xf0, 0x90, 0xef, 0x6e, 0x11, 0xae, 0xd1, 0x50, 0x2f, 0x4f, 0x30, 0xb1, 0xce, 0xd2, 0xad, 0x2c, 0x53, 0x33, 0x4c, 0xcd, 0xb2, 0xd, 0x72, 0xf3, 0x8c, 0xec, 0x93, 0x12, 0x6d, 0x2a, 0x55, 0xd4, 0xab, 0xcb, 0xb4, 0x35, 0x4a, 0xf5, 0x8a, 0xb, 0x74, 0x14, 0x6b, 0xea, 0x95, 0x89, 0xf6, 0x77, 0x8, 0x68, 0x17, 0x96, 0xe9, 0x56, 0x29, 0xa8, 0xd7, 0xb7, 0xc8, 0x49, 0x36, 0xc7, 0xb8, 0x39, 0x46, 0x26, 0x59, 0xd8, 0xa7, 0x18, 0x67, 0xe6, 0x99, 0xf9, 0x86, 0x7, 0x78, 0x64, 0x1b, 0x9a, 0xe5, 0x85, 0xfa, 0x7b, 0x4, 0xbb, 0xc4, 0x45, 0x3a, 0x5a, 0x25, 0xa4, 0xdb, 0x9c, 0xe3, 0x62, 0x1d, 0x7d, 0x2, 0x83, 0xfc, 0x43, 0x3c, 0xbd, 0xc2, 0xa2, 0xdd, 0x5c, 0x23, 0x3f, 0x40, 0xc1, 0xbe, 0xde, 0xa1, 0x20, 0x5f, 0xe0, 0x9f, 0x1e, 0x61, 0x1, 0x7e, 0xff, 0x80}, - {0x0, 0x80, 0x1d, 0x9d, 0x3a, 0xba, 0x27, 0xa7, 0x74, 0xf4, 0x69, 0xe9, 0x4e, 0xce, 0x53, 0xd3, 0xe8, 0x68, 0xf5, 0x75, 0xd2, 0x52, 0xcf, 0x4f, 0x9c, 0x1c, 0x81, 0x1, 0xa6, 0x26, 0xbb, 0x3b, 0xcd, 0x4d, 0xd0, 0x50, 0xf7, 0x77, 0xea, 0x6a, 0xb9, 0x39, 0xa4, 0x24, 0x83, 0x3, 0x9e, 0x1e, 0x25, 0xa5, 0x38, 0xb8, 0x1f, 0x9f, 0x2, 0x82, 0x51, 0xd1, 0x4c, 0xcc, 0x6b, 0xeb, 0x76, 0xf6, 0x87, 0x7, 0x9a, 0x1a, 0xbd, 0x3d, 0xa0, 0x20, 0xf3, 0x73, 0xee, 0x6e, 0xc9, 0x49, 0xd4, 0x54, 0x6f, 0xef, 0x72, 0xf2, 0x55, 0xd5, 0x48, 0xc8, 0x1b, 0x9b, 0x6, 0x86, 0x21, 0xa1, 0x3c, 0xbc, 0x4a, 0xca, 0x57, 0xd7, 0x70, 0xf0, 0x6d, 0xed, 0x3e, 0xbe, 0x23, 0xa3, 0x4, 0x84, 0x19, 0x99, 0xa2, 0x22, 0xbf, 0x3f, 0x98, 0x18, 0x85, 0x5, 0xd6, 0x56, 0xcb, 0x4b, 0xec, 0x6c, 0xf1, 0x71, 0x13, 0x93, 0xe, 0x8e, 0x29, 0xa9, 0x34, 0xb4, 0x67, 0xe7, 0x7a, 0xfa, 0x5d, 0xdd, 0x40, 0xc0, 0xfb, 0x7b, 0xe6, 0x66, 0xc1, 0x41, 0xdc, 0x5c, 0x8f, 0xf, 0x92, 0x12, 0xb5, 0x35, 0xa8, 0x28, 0xde, 0x5e, 0xc3, 0x43, 0xe4, 0x64, 0xf9, 0x79, 0xaa, 0x2a, 0xb7, 0x37, 0x90, 0x10, 0x8d, 0xd, 0x36, 0xb6, 0x2b, 0xab, 0xc, 0x8c, 0x11, 0x91, 0x42, 0xc2, 0x5f, 0xdf, 0x78, 0xf8, 0x65, 0xe5, 0x94, 0x14, 0x89, 0x9, 0xae, 0x2e, 0xb3, 0x33, 0xe0, 0x60, 0xfd, 0x7d, 0xda, 0x5a, 0xc7, 0x47, 0x7c, 0xfc, 0x61, 0xe1, 0x46, 0xc6, 0x5b, 0xdb, 0x8, 0x88, 0x15, 0x95, 0x32, 0xb2, 0x2f, 0xaf, 0x59, 0xd9, 0x44, 0xc4, 0x63, 0xe3, 0x7e, 0xfe, 0x2d, 0xad, 0x30, 0xb0, 0x17, 0x97, 0xa, 0x8a, 0xb1, 0x31, 0xac, 0x2c, 0x8b, 0xb, 0x96, 0x16, 0xc5, 0x45, 0xd8, 0x58, 0xff, 0x7f, 0xe2, 0x62}, - {0x0, 0x81, 0x1f, 0x9e, 0x3e, 0xbf, 0x21, 0xa0, 0x7c, 0xfd, 0x63, 0xe2, 0x42, 0xc3, 0x5d, 0xdc, 0xf8, 0x79, 0xe7, 0x66, 0xc6, 0x47, 0xd9, 0x58, 0x84, 0x5, 0x9b, 0x1a, 0xba, 0x3b, 0xa5, 0x24, 0xed, 0x6c, 0xf2, 0x73, 0xd3, 0x52, 0xcc, 0x4d, 0x91, 0x10, 0x8e, 0xf, 0xaf, 0x2e, 0xb0, 0x31, 0x15, 0x94, 0xa, 0x8b, 0x2b, 0xaa, 0x34, 0xb5, 0x69, 0xe8, 0x76, 0xf7, 0x57, 0xd6, 0x48, 0xc9, 0xc7, 0x46, 0xd8, 0x59, 0xf9, 0x78, 0xe6, 0x67, 0xbb, 0x3a, 0xa4, 0x25, 0x85, 0x4, 0x9a, 0x1b, 0x3f, 0xbe, 0x20, 0xa1, 0x1, 0x80, 0x1e, 0x9f, 0x43, 0xc2, 0x5c, 0xdd, 0x7d, 0xfc, 0x62, 0xe3, 0x2a, 0xab, 0x35, 0xb4, 0x14, 0x95, 0xb, 0x8a, 0x56, 0xd7, 0x49, 0xc8, 0x68, 0xe9, 0x77, 0xf6, 0xd2, 0x53, 0xcd, 0x4c, 0xec, 0x6d, 0xf3, 0x72, 0xae, 0x2f, 0xb1, 0x30, 0x90, 0x11, 0x8f, 0xe, 0x93, 0x12, 0x8c, 0xd, 0xad, 0x2c, 0xb2, 0x33, 0xef, 0x6e, 0xf0, 0x71, 0xd1, 0x50, 0xce, 0x4f, 0x6b, 0xea, 0x74, 0xf5, 0x55, 0xd4, 0x4a, 0xcb, 0x17, 0x96, 0x8, 0x89, 0x29, 0xa8, 0x36, 0xb7, 0x7e, 0xff, 0x61, 0xe0, 0x40, 0xc1, 0x5f, 0xde, 0x2, 0x83, 0x1d, 0x9c, 0x3c, 0xbd, 0x23, 0xa2, 0x86, 0x7, 0x99, 0x18, 0xb8, 0x39, 0xa7, 0x26, 0xfa, 0x7b, 0xe5, 0x64, 0xc4, 0x45, 0xdb, 0x5a, 0x54, 0xd5, 0x4b, 0xca, 0x6a, 0xeb, 0x75, 0xf4, 0x28, 0xa9, 0x37, 0xb6, 0x16, 0x97, 0x9, 0x88, 0xac, 0x2d, 0xb3, 0x32, 0x92, 0x13, 0x8d, 0xc, 0xd0, 0x51, 0xcf, 0x4e, 0xee, 0x6f, 0xf1, 0x70, 0xb9, 0x38, 0xa6, 0x27, 0x87, 0x6, 0x98, 0x19, 0xc5, 0x44, 0xda, 0x5b, 0xfb, 0x7a, 0xe4, 0x65, 0x41, 0xc0, 0x5e, 0xdf, 0x7f, 0xfe, 0x60, 0xe1, 0x3d, 0xbc, 0x22, 0xa3, 0x3, 0x82, 0x1c, 0x9d}, - {0x0, 0x82, 0x19, 0x9b, 0x32, 0xb0, 0x2b, 0xa9, 0x64, 0xe6, 0x7d, 0xff, 0x56, 0xd4, 0x4f, 0xcd, 0xc8, 0x4a, 0xd1, 0x53, 0xfa, 0x78, 0xe3, 0x61, 0xac, 0x2e, 0xb5, 0x37, 0x9e, 0x1c, 0x87, 0x5, 0x8d, 0xf, 0x94, 0x16, 0xbf, 0x3d, 0xa6, 0x24, 0xe9, 0x6b, 0xf0, 0x72, 0xdb, 0x59, 0xc2, 0x40, 0x45, 0xc7, 0x5c, 0xde, 0x77, 0xf5, 0x6e, 0xec, 0x21, 0xa3, 0x38, 0xba, 0x13, 0x91, 0xa, 0x88, 0x7, 0x85, 0x1e, 0x9c, 0x35, 0xb7, 0x2c, 0xae, 0x63, 0xe1, 0x7a, 0xf8, 0x51, 0xd3, 0x48, 0xca, 0xcf, 0x4d, 0xd6, 0x54, 0xfd, 0x7f, 0xe4, 0x66, 0xab, 0x29, 0xb2, 0x30, 0x99, 0x1b, 0x80, 0x2, 0x8a, 0x8, 0x93, 0x11, 0xb8, 0x3a, 0xa1, 0x23, 0xee, 0x6c, 0xf7, 0x75, 0xdc, 0x5e, 0xc5, 0x47, 0x42, 0xc0, 0x5b, 0xd9, 0x70, 0xf2, 0x69, 0xeb, 0x26, 0xa4, 0x3f, 0xbd, 0x14, 0x96, 0xd, 0x8f, 0xe, 0x8c, 0x17, 0x95, 0x3c, 0xbe, 0x25, 0xa7, 0x6a, 0xe8, 0x73, 0xf1, 0x58, 0xda, 0x41, 0xc3, 0xc6, 0x44, 0xdf, 0x5d, 0xf4, 0x76, 0xed, 0x6f, 0xa2, 0x20, 0xbb, 0x39, 0x90, 0x12, 0x89, 0xb, 0x83, 0x1, 0x9a, 0x18, 0xb1, 0x33, 0xa8, 0x2a, 0xe7, 0x65, 0xfe, 0x7c, 0xd5, 0x57, 0xcc, 0x4e, 0x4b, 0xc9, 0x52, 0xd0, 0x79, 0xfb, 0x60, 0xe2, 0x2f, 0xad, 0x36, 0xb4, 0x1d, 0x9f, 0x4, 0x86, 0x9, 0x8b, 0x10, 0x92, 0x3b, 0xb9, 0x22, 0xa0, 0x6d, 0xef, 0x74, 0xf6, 0x5f, 0xdd, 0x46, 0xc4, 0xc1, 0x43, 0xd8, 0x5a, 0xf3, 0x71, 0xea, 0x68, 0xa5, 0x27, 0xbc, 0x3e, 0x97, 0x15, 0x8e, 0xc, 0x84, 0x6, 0x9d, 0x1f, 0xb6, 0x34, 0xaf, 0x2d, 0xe0, 0x62, 0xf9, 0x7b, 0xd2, 0x50, 0xcb, 0x49, 0x4c, 0xce, 0x55, 0xd7, 0x7e, 0xfc, 0x67, 0xe5, 0x28, 0xaa, 0x31, 0xb3, 0x1a, 0x98, 0x3, 0x81}, - {0x0, 0x83, 0x1b, 0x98, 0x36, 0xb5, 0x2d, 0xae, 0x6c, 0xef, 0x77, 0xf4, 0x5a, 0xd9, 0x41, 0xc2, 0xd8, 0x5b, 0xc3, 0x40, 0xee, 0x6d, 0xf5, 0x76, 0xb4, 0x37, 0xaf, 0x2c, 0x82, 0x1, 0x99, 0x1a, 0xad, 0x2e, 0xb6, 0x35, 0x9b, 0x18, 0x80, 0x3, 0xc1, 0x42, 0xda, 0x59, 0xf7, 0x74, 0xec, 0x6f, 0x75, 0xf6, 0x6e, 0xed, 0x43, 0xc0, 0x58, 0xdb, 0x19, 0x9a, 0x2, 0x81, 0x2f, 0xac, 0x34, 0xb7, 0x47, 0xc4, 0x5c, 0xdf, 0x71, 0xf2, 0x6a, 0xe9, 0x2b, 0xa8, 0x30, 0xb3, 0x1d, 0x9e, 0x6, 0x85, 0x9f, 0x1c, 0x84, 0x7, 0xa9, 0x2a, 0xb2, 0x31, 0xf3, 0x70, 0xe8, 0x6b, 0xc5, 0x46, 0xde, 0x5d, 0xea, 0x69, 0xf1, 0x72, 0xdc, 0x5f, 0xc7, 0x44, 0x86, 0x5, 0x9d, 0x1e, 0xb0, 0x33, 0xab, 0x28, 0x32, 0xb1, 0x29, 0xaa, 0x4, 0x87, 0x1f, 0x9c, 0x5e, 0xdd, 0x45, 0xc6, 0x68, 0xeb, 0x73, 0xf0, 0x8e, 0xd, 0x95, 0x16, 0xb8, 0x3b, 0xa3, 0x20, 0xe2, 0x61, 0xf9, 0x7a, 0xd4, 0x57, 0xcf, 0x4c, 0x56, 0xd5, 0x4d, 0xce, 0x60, 0xe3, 0x7b, 0xf8, 0x3a, 0xb9, 0x21, 0xa2, 0xc, 0x8f, 0x17, 0x94, 0x23, 0xa0, 0x38, 0xbb, 0x15, 0x96, 0xe, 0x8d, 0x4f, 0xcc, 0x54, 0xd7, 0x79, 0xfa, 0x62, 0xe1, 0xfb, 0x78, 0xe0, 0x63, 0xcd, 0x4e, 0xd6, 0x55, 0x97, 0x14, 0x8c, 0xf, 0xa1, 0x22, 0xba, 0x39, 0xc9, 0x4a, 0xd2, 0x51, 0xff, 0x7c, 0xe4, 0x67, 0xa5, 0x26, 0xbe, 0x3d, 0x93, 0x10, 0x88, 0xb, 0x11, 0x92, 0xa, 0x89, 0x27, 0xa4, 0x3c, 0xbf, 0x7d, 0xfe, 0x66, 0xe5, 0x4b, 0xc8, 0x50, 0xd3, 0x64, 0xe7, 0x7f, 0xfc, 0x52, 0xd1, 0x49, 0xca, 0x8, 0x8b, 0x13, 0x90, 0x3e, 0xbd, 0x25, 0xa6, 0xbc, 0x3f, 0xa7, 0x24, 0x8a, 0x9, 0x91, 0x12, 0xd0, 0x53, 0xcb, 0x48, 0xe6, 0x65, 0xfd, 0x7e}, - {0x0, 0x84, 0x15, 0x91, 0x2a, 0xae, 0x3f, 0xbb, 0x54, 0xd0, 0x41, 0xc5, 0x7e, 0xfa, 0x6b, 0xef, 0xa8, 0x2c, 0xbd, 0x39, 0x82, 0x6, 0x97, 0x13, 0xfc, 0x78, 0xe9, 0x6d, 0xd6, 0x52, 0xc3, 0x47, 0x4d, 0xc9, 0x58, 0xdc, 0x67, 0xe3, 0x72, 0xf6, 0x19, 0x9d, 0xc, 0x88, 0x33, 0xb7, 0x26, 0xa2, 0xe5, 0x61, 0xf0, 0x74, 0xcf, 0x4b, 0xda, 0x5e, 0xb1, 0x35, 0xa4, 0x20, 0x9b, 0x1f, 0x8e, 0xa, 0x9a, 0x1e, 0x8f, 0xb, 0xb0, 0x34, 0xa5, 0x21, 0xce, 0x4a, 0xdb, 0x5f, 0xe4, 0x60, 0xf1, 0x75, 0x32, 0xb6, 0x27, 0xa3, 0x18, 0x9c, 0xd, 0x89, 0x66, 0xe2, 0x73, 0xf7, 0x4c, 0xc8, 0x59, 0xdd, 0xd7, 0x53, 0xc2, 0x46, 0xfd, 0x79, 0xe8, 0x6c, 0x83, 0x7, 0x96, 0x12, 0xa9, 0x2d, 0xbc, 0x38, 0x7f, 0xfb, 0x6a, 0xee, 0x55, 0xd1, 0x40, 0xc4, 0x2b, 0xaf, 0x3e, 0xba, 0x1, 0x85, 0x14, 0x90, 0x29, 0xad, 0x3c, 0xb8, 0x3, 0x87, 0x16, 0x92, 0x7d, 0xf9, 0x68, 0xec, 0x57, 0xd3, 0x42, 0xc6, 0x81, 0x5, 0x94, 0x10, 0xab, 0x2f, 0xbe, 0x3a, 0xd5, 0x51, 0xc0, 0x44, 0xff, 0x7b, 0xea, 0x6e, 0x64, 0xe0, 0x71, 0xf5, 0x4e, 0xca, 0x5b, 0xdf, 0x30, 0xb4, 0x25, 0xa1, 0x1a, 0x9e, 0xf, 0x8b, 0xcc, 0x48, 0xd9, 0x5d, 0xe6, 0x62, 0xf3, 0x77, 0x98, 0x1c, 0x8d, 0x9, 0xb2, 0x36, 0xa7, 0x23, 0xb3, 0x37, 0xa6, 0x22, 0x99, 0x1d, 0x8c, 0x8, 0xe7, 0x63, 0xf2, 0x76, 0xcd, 0x49, 0xd8, 0x5c, 0x1b, 0x9f, 0xe, 0x8a, 0x31, 0xb5, 0x24, 0xa0, 0x4f, 0xcb, 0x5a, 0xde, 0x65, 0xe1, 0x70, 0xf4, 0xfe, 0x7a, 0xeb, 0x6f, 0xd4, 0x50, 0xc1, 0x45, 0xaa, 0x2e, 0xbf, 0x3b, 0x80, 0x4, 0x95, 0x11, 0x56, 0xd2, 0x43, 0xc7, 0x7c, 0xf8, 0x69, 0xed, 0x2, 0x86, 0x17, 0x93, 0x28, 0xac, 0x3d, 0xb9}, - {0x0, 0x85, 0x17, 0x92, 0x2e, 0xab, 0x39, 0xbc, 0x5c, 0xd9, 0x4b, 0xce, 0x72, 0xf7, 0x65, 0xe0, 0xb8, 0x3d, 0xaf, 0x2a, 0x96, 0x13, 0x81, 0x4, 0xe4, 0x61, 0xf3, 0x76, 0xca, 0x4f, 0xdd, 0x58, 0x6d, 0xe8, 0x7a, 0xff, 0x43, 0xc6, 0x54, 0xd1, 0x31, 0xb4, 0x26, 0xa3, 0x1f, 0x9a, 0x8, 0x8d, 0xd5, 0x50, 0xc2, 0x47, 0xfb, 0x7e, 0xec, 0x69, 0x89, 0xc, 0x9e, 0x1b, 0xa7, 0x22, 0xb0, 0x35, 0xda, 0x5f, 0xcd, 0x48, 0xf4, 0x71, 0xe3, 0x66, 0x86, 0x3, 0x91, 0x14, 0xa8, 0x2d, 0xbf, 0x3a, 0x62, 0xe7, 0x75, 0xf0, 0x4c, 0xc9, 0x5b, 0xde, 0x3e, 0xbb, 0x29, 0xac, 0x10, 0x95, 0x7, 0x82, 0xb7, 0x32, 0xa0, 0x25, 0x99, 0x1c, 0x8e, 0xb, 0xeb, 0x6e, 0xfc, 0x79, 0xc5, 0x40, 0xd2, 0x57, 0xf, 0x8a, 0x18, 0x9d, 0x21, 0xa4, 0x36, 0xb3, 0x53, 0xd6, 0x44, 0xc1, 0x7d, 0xf8, 0x6a, 0xef, 0xa9, 0x2c, 0xbe, 0x3b, 0x87, 0x2, 0x90, 0x15, 0xf5, 0x70, 0xe2, 0x67, 0xdb, 0x5e, 0xcc, 0x49, 0x11, 0x94, 0x6, 0x83, 0x3f, 0xba, 0x28, 0xad, 0x4d, 0xc8, 0x5a, 0xdf, 0x63, 0xe6, 0x74, 0xf1, 0xc4, 0x41, 0xd3, 0x56, 0xea, 0x6f, 0xfd, 0x78, 0x98, 0x1d, 0x8f, 0xa, 0xb6, 0x33, 0xa1, 0x24, 0x7c, 0xf9, 0x6b, 0xee, 0x52, 0xd7, 0x45, 0xc0, 0x20, 0xa5, 0x37, 0xb2, 0xe, 0x8b, 0x19, 0x9c, 0x73, 0xf6, 0x64, 0xe1, 0x5d, 0xd8, 0x4a, 0xcf, 0x2f, 0xaa, 0x38, 0xbd, 0x1, 0x84, 0x16, 0x93, 0xcb, 0x4e, 0xdc, 0x59, 0xe5, 0x60, 0xf2, 0x77, 0x97, 0x12, 0x80, 0x5, 0xb9, 0x3c, 0xae, 0x2b, 0x1e, 0x9b, 0x9, 0x8c, 0x30, 0xb5, 0x27, 0xa2, 0x42, 0xc7, 0x55, 0xd0, 0x6c, 0xe9, 0x7b, 0xfe, 0xa6, 0x23, 0xb1, 0x34, 0x88, 0xd, 0x9f, 0x1a, 0xfa, 0x7f, 0xed, 0x68, 0xd4, 0x51, 0xc3, 0x46}, - {0x0, 0x86, 0x11, 0x97, 0x22, 0xa4, 0x33, 0xb5, 0x44, 0xc2, 0x55, 0xd3, 0x66, 0xe0, 0x77, 0xf1, 0x88, 0xe, 0x99, 0x1f, 0xaa, 0x2c, 0xbb, 0x3d, 0xcc, 0x4a, 0xdd, 0x5b, 0xee, 0x68, 0xff, 0x79, 0xd, 0x8b, 0x1c, 0x9a, 0x2f, 0xa9, 0x3e, 0xb8, 0x49, 0xcf, 0x58, 0xde, 0x6b, 0xed, 0x7a, 0xfc, 0x85, 0x3, 0x94, 0x12, 0xa7, 0x21, 0xb6, 0x30, 0xc1, 0x47, 0xd0, 0x56, 0xe3, 0x65, 0xf2, 0x74, 0x1a, 0x9c, 0xb, 0x8d, 0x38, 0xbe, 0x29, 0xaf, 0x5e, 0xd8, 0x4f, 0xc9, 0x7c, 0xfa, 0x6d, 0xeb, 0x92, 0x14, 0x83, 0x5, 0xb0, 0x36, 0xa1, 0x27, 0xd6, 0x50, 0xc7, 0x41, 0xf4, 0x72, 0xe5, 0x63, 0x17, 0x91, 0x6, 0x80, 0x35, 0xb3, 0x24, 0xa2, 0x53, 0xd5, 0x42, 0xc4, 0x71, 0xf7, 0x60, 0xe6, 0x9f, 0x19, 0x8e, 0x8, 0xbd, 0x3b, 0xac, 0x2a, 0xdb, 0x5d, 0xca, 0x4c, 0xf9, 0x7f, 0xe8, 0x6e, 0x34, 0xb2, 0x25, 0xa3, 0x16, 0x90, 0x7, 0x81, 0x70, 0xf6, 0x61, 0xe7, 0x52, 0xd4, 0x43, 0xc5, 0xbc, 0x3a, 0xad, 0x2b, 0x9e, 0x18, 0x8f, 0x9, 0xf8, 0x7e, 0xe9, 0x6f, 0xda, 0x5c, 0xcb, 0x4d, 0x39, 0xbf, 0x28, 0xae, 0x1b, 0x9d, 0xa, 0x8c, 0x7d, 0xfb, 0x6c, 0xea, 0x5f, 0xd9, 0x4e, 0xc8, 0xb1, 0x37, 0xa0, 0x26, 0x93, 0x15, 0x82, 0x4, 0xf5, 0x73, 0xe4, 0x62, 0xd7, 0x51, 0xc6, 0x40, 0x2e, 0xa8, 0x3f, 0xb9, 0xc, 0x8a, 0x1d, 0x9b, 0x6a, 0xec, 0x7b, 0xfd, 0x48, 0xce, 0x59, 0xdf, 0xa6, 0x20, 0xb7, 0x31, 0x84, 0x2, 0x95, 0x13, 0xe2, 0x64, 0xf3, 0x75, 0xc0, 0x46, 0xd1, 0x57, 0x23, 0xa5, 0x32, 0xb4, 0x1, 0x87, 0x10, 0x96, 0x67, 0xe1, 0x76, 0xf0, 0x45, 0xc3, 0x54, 0xd2, 0xab, 0x2d, 0xba, 0x3c, 0x89, 0xf, 0x98, 0x1e, 0xef, 0x69, 0xfe, 0x78, 0xcd, 0x4b, 0xdc, 0x5a}, - {0x0, 0x87, 0x13, 0x94, 0x26, 0xa1, 0x35, 0xb2, 0x4c, 0xcb, 0x5f, 0xd8, 0x6a, 0xed, 0x79, 0xfe, 0x98, 0x1f, 0x8b, 0xc, 0xbe, 0x39, 0xad, 0x2a, 0xd4, 0x53, 0xc7, 0x40, 0xf2, 0x75, 0xe1, 0x66, 0x2d, 0xaa, 0x3e, 0xb9, 0xb, 0x8c, 0x18, 0x9f, 0x61, 0xe6, 0x72, 0xf5, 0x47, 0xc0, 0x54, 0xd3, 0xb5, 0x32, 0xa6, 0x21, 0x93, 0x14, 0x80, 0x7, 0xf9, 0x7e, 0xea, 0x6d, 0xdf, 0x58, 0xcc, 0x4b, 0x5a, 0xdd, 0x49, 0xce, 0x7c, 0xfb, 0x6f, 0xe8, 0x16, 0x91, 0x5, 0x82, 0x30, 0xb7, 0x23, 0xa4, 0xc2, 0x45, 0xd1, 0x56, 0xe4, 0x63, 0xf7, 0x70, 0x8e, 0x9, 0x9d, 0x1a, 0xa8, 0x2f, 0xbb, 0x3c, 0x77, 0xf0, 0x64, 0xe3, 0x51, 0xd6, 0x42, 0xc5, 0x3b, 0xbc, 0x28, 0xaf, 0x1d, 0x9a, 0xe, 0x89, 0xef, 0x68, 0xfc, 0x7b, 0xc9, 0x4e, 0xda, 0x5d, 0xa3, 0x24, 0xb0, 0x37, 0x85, 0x2, 0x96, 0x11, 0xb4, 0x33, 0xa7, 0x20, 0x92, 0x15, 0x81, 0x6, 0xf8, 0x7f, 0xeb, 0x6c, 0xde, 0x59, 0xcd, 0x4a, 0x2c, 0xab, 0x3f, 0xb8, 0xa, 0x8d, 0x19, 0x9e, 0x60, 0xe7, 0x73, 0xf4, 0x46, 0xc1, 0x55, 0xd2, 0x99, 0x1e, 0x8a, 0xd, 0xbf, 0x38, 0xac, 0x2b, 0xd5, 0x52, 0xc6, 0x41, 0xf3, 0x74, 0xe0, 0x67, 0x1, 0x86, 0x12, 0x95, 0x27, 0xa0, 0x34, 0xb3, 0x4d, 0xca, 0x5e, 0xd9, 0x6b, 0xec, 0x78, 0xff, 0xee, 0x69, 0xfd, 0x7a, 0xc8, 0x4f, 0xdb, 0x5c, 0xa2, 0x25, 0xb1, 0x36, 0x84, 0x3, 0x97, 0x10, 0x76, 0xf1, 0x65, 0xe2, 0x50, 0xd7, 0x43, 0xc4, 0x3a, 0xbd, 0x29, 0xae, 0x1c, 0x9b, 0xf, 0x88, 0xc3, 0x44, 0xd0, 0x57, 0xe5, 0x62, 0xf6, 0x71, 0x8f, 0x8, 0x9c, 0x1b, 0xa9, 0x2e, 0xba, 0x3d, 0x5b, 0xdc, 0x48, 0xcf, 0x7d, 0xfa, 0x6e, 0xe9, 0x17, 0x90, 0x4, 0x83, 0x31, 0xb6, 0x22, 0xa5}, - {0x0, 0x88, 0xd, 0x85, 0x1a, 0x92, 0x17, 0x9f, 0x34, 0xbc, 0x39, 0xb1, 0x2e, 0xa6, 0x23, 0xab, 0x68, 0xe0, 0x65, 0xed, 0x72, 0xfa, 0x7f, 0xf7, 0x5c, 0xd4, 0x51, 0xd9, 0x46, 0xce, 0x4b, 0xc3, 0xd0, 0x58, 0xdd, 0x55, 0xca, 0x42, 0xc7, 0x4f, 0xe4, 0x6c, 0xe9, 0x61, 0xfe, 0x76, 0xf3, 0x7b, 0xb8, 0x30, 0xb5, 0x3d, 0xa2, 0x2a, 0xaf, 0x27, 0x8c, 0x4, 0x81, 0x9, 0x96, 0x1e, 0x9b, 0x13, 0xbd, 0x35, 0xb0, 0x38, 0xa7, 0x2f, 0xaa, 0x22, 0x89, 0x1, 0x84, 0xc, 0x93, 0x1b, 0x9e, 0x16, 0xd5, 0x5d, 0xd8, 0x50, 0xcf, 0x47, 0xc2, 0x4a, 0xe1, 0x69, 0xec, 0x64, 0xfb, 0x73, 0xf6, 0x7e, 0x6d, 0xe5, 0x60, 0xe8, 0x77, 0xff, 0x7a, 0xf2, 0x59, 0xd1, 0x54, 0xdc, 0x43, 0xcb, 0x4e, 0xc6, 0x5, 0x8d, 0x8, 0x80, 0x1f, 0x97, 0x12, 0x9a, 0x31, 0xb9, 0x3c, 0xb4, 0x2b, 0xa3, 0x26, 0xae, 0x67, 0xef, 0x6a, 0xe2, 0x7d, 0xf5, 0x70, 0xf8, 0x53, 0xdb, 0x5e, 0xd6, 0x49, 0xc1, 0x44, 0xcc, 0xf, 0x87, 0x2, 0x8a, 0x15, 0x9d, 0x18, 0x90, 0x3b, 0xb3, 0x36, 0xbe, 0x21, 0xa9, 0x2c, 0xa4, 0xb7, 0x3f, 0xba, 0x32, 0xad, 0x25, 0xa0, 0x28, 0x83, 0xb, 0x8e, 0x6, 0x99, 0x11, 0x94, 0x1c, 0xdf, 0x57, 0xd2, 0x5a, 0xc5, 0x4d, 0xc8, 0x40, 0xeb, 0x63, 0xe6, 0x6e, 0xf1, 0x79, 0xfc, 0x74, 0xda, 0x52, 0xd7, 0x5f, 0xc0, 0x48, 0xcd, 0x45, 0xee, 0x66, 0xe3, 0x6b, 0xf4, 0x7c, 0xf9, 0x71, 0xb2, 0x3a, 0xbf, 0x37, 0xa8, 0x20, 0xa5, 0x2d, 0x86, 0xe, 0x8b, 0x3, 0x9c, 0x14, 0x91, 0x19, 0xa, 0x82, 0x7, 0x8f, 0x10, 0x98, 0x1d, 0x95, 0x3e, 0xb6, 0x33, 0xbb, 0x24, 0xac, 0x29, 0xa1, 0x62, 0xea, 0x6f, 0xe7, 0x78, 0xf0, 0x75, 0xfd, 0x56, 0xde, 0x5b, 0xd3, 0x4c, 0xc4, 0x41, 0xc9}, - {0x0, 0x89, 0xf, 0x86, 0x1e, 0x97, 0x11, 0x98, 0x3c, 0xb5, 0x33, 0xba, 0x22, 0xab, 0x2d, 0xa4, 0x78, 0xf1, 0x77, 0xfe, 0x66, 0xef, 0x69, 0xe0, 0x44, 0xcd, 0x4b, 0xc2, 0x5a, 0xd3, 0x55, 0xdc, 0xf0, 0x79, 0xff, 0x76, 0xee, 0x67, 0xe1, 0x68, 0xcc, 0x45, 0xc3, 0x4a, 0xd2, 0x5b, 0xdd, 0x54, 0x88, 0x1, 0x87, 0xe, 0x96, 0x1f, 0x99, 0x10, 0xb4, 0x3d, 0xbb, 0x32, 0xaa, 0x23, 0xa5, 0x2c, 0xfd, 0x74, 0xf2, 0x7b, 0xe3, 0x6a, 0xec, 0x65, 0xc1, 0x48, 0xce, 0x47, 0xdf, 0x56, 0xd0, 0x59, 0x85, 0xc, 0x8a, 0x3, 0x9b, 0x12, 0x94, 0x1d, 0xb9, 0x30, 0xb6, 0x3f, 0xa7, 0x2e, 0xa8, 0x21, 0xd, 0x84, 0x2, 0x8b, 0x13, 0x9a, 0x1c, 0x95, 0x31, 0xb8, 0x3e, 0xb7, 0x2f, 0xa6, 0x20, 0xa9, 0x75, 0xfc, 0x7a, 0xf3, 0x6b, 0xe2, 0x64, 0xed, 0x49, 0xc0, 0x46, 0xcf, 0x57, 0xde, 0x58, 0xd1, 0xe7, 0x6e, 0xe8, 0x61, 0xf9, 0x70, 0xf6, 0x7f, 0xdb, 0x52, 0xd4, 0x5d, 0xc5, 0x4c, 0xca, 0x43, 0x9f, 0x16, 0x90, 0x19, 0x81, 0x8, 0x8e, 0x7, 0xa3, 0x2a, 0xac, 0x25, 0xbd, 0x34, 0xb2, 0x3b, 0x17, 0x9e, 0x18, 0x91, 0x9, 0x80, 0x6, 0x8f, 0x2b, 0xa2, 0x24, 0xad, 0x35, 0xbc, 0x3a, 0xb3, 0x6f, 0xe6, 0x60, 0xe9, 0x71, 0xf8, 0x7e, 0xf7, 0x53, 0xda, 0x5c, 0xd5, 0x4d, 0xc4, 0x42, 0xcb, 0x1a, 0x93, 0x15, 0x9c, 0x4, 0x8d, 0xb, 0x82, 0x26, 0xaf, 0x29, 0xa0, 0x38, 0xb1, 0x37, 0xbe, 0x62, 0xeb, 0x6d, 0xe4, 0x7c, 0xf5, 0x73, 0xfa, 0x5e, 0xd7, 0x51, 0xd8, 0x40, 0xc9, 0x4f, 0xc6, 0xea, 0x63, 0xe5, 0x6c, 0xf4, 0x7d, 0xfb, 0x72, 0xd6, 0x5f, 0xd9, 0x50, 0xc8, 0x41, 0xc7, 0x4e, 0x92, 0x1b, 0x9d, 0x14, 0x8c, 0x5, 0x83, 0xa, 0xae, 0x27, 0xa1, 0x28, 0xb0, 0x39, 0xbf, 0x36}, - {0x0, 0x8a, 0x9, 0x83, 0x12, 0x98, 0x1b, 0x91, 0x24, 0xae, 0x2d, 0xa7, 0x36, 0xbc, 0x3f, 0xb5, 0x48, 0xc2, 0x41, 0xcb, 0x5a, 0xd0, 0x53, 0xd9, 0x6c, 0xe6, 0x65, 0xef, 0x7e, 0xf4, 0x77, 0xfd, 0x90, 0x1a, 0x99, 0x13, 0x82, 0x8, 0x8b, 0x1, 0xb4, 0x3e, 0xbd, 0x37, 0xa6, 0x2c, 0xaf, 0x25, 0xd8, 0x52, 0xd1, 0x5b, 0xca, 0x40, 0xc3, 0x49, 0xfc, 0x76, 0xf5, 0x7f, 0xee, 0x64, 0xe7, 0x6d, 0x3d, 0xb7, 0x34, 0xbe, 0x2f, 0xa5, 0x26, 0xac, 0x19, 0x93, 0x10, 0x9a, 0xb, 0x81, 0x2, 0x88, 0x75, 0xff, 0x7c, 0xf6, 0x67, 0xed, 0x6e, 0xe4, 0x51, 0xdb, 0x58, 0xd2, 0x43, 0xc9, 0x4a, 0xc0, 0xad, 0x27, 0xa4, 0x2e, 0xbf, 0x35, 0xb6, 0x3c, 0x89, 0x3, 0x80, 0xa, 0x9b, 0x11, 0x92, 0x18, 0xe5, 0x6f, 0xec, 0x66, 0xf7, 0x7d, 0xfe, 0x74, 0xc1, 0x4b, 0xc8, 0x42, 0xd3, 0x59, 0xda, 0x50, 0x7a, 0xf0, 0x73, 0xf9, 0x68, 0xe2, 0x61, 0xeb, 0x5e, 0xd4, 0x57, 0xdd, 0x4c, 0xc6, 0x45, 0xcf, 0x32, 0xb8, 0x3b, 0xb1, 0x20, 0xaa, 0x29, 0xa3, 0x16, 0x9c, 0x1f, 0x95, 0x4, 0x8e, 0xd, 0x87, 0xea, 0x60, 0xe3, 0x69, 0xf8, 0x72, 0xf1, 0x7b, 0xce, 0x44, 0xc7, 0x4d, 0xdc, 0x56, 0xd5, 0x5f, 0xa2, 0x28, 0xab, 0x21, 0xb0, 0x3a, 0xb9, 0x33, 0x86, 0xc, 0x8f, 0x5, 0x94, 0x1e, 0x9d, 0x17, 0x47, 0xcd, 0x4e, 0xc4, 0x55, 0xdf, 0x5c, 0xd6, 0x63, 0xe9, 0x6a, 0xe0, 0x71, 0xfb, 0x78, 0xf2, 0xf, 0x85, 0x6, 0x8c, 0x1d, 0x97, 0x14, 0x9e, 0x2b, 0xa1, 0x22, 0xa8, 0x39, 0xb3, 0x30, 0xba, 0xd7, 0x5d, 0xde, 0x54, 0xc5, 0x4f, 0xcc, 0x46, 0xf3, 0x79, 0xfa, 0x70, 0xe1, 0x6b, 0xe8, 0x62, 0x9f, 0x15, 0x96, 0x1c, 0x8d, 0x7, 0x84, 0xe, 0xbb, 0x31, 0xb2, 0x38, 0xa9, 0x23, 0xa0, 0x2a}, - {0x0, 0x8b, 0xb, 0x80, 0x16, 0x9d, 0x1d, 0x96, 0x2c, 0xa7, 0x27, 0xac, 0x3a, 0xb1, 0x31, 0xba, 0x58, 0xd3, 0x53, 0xd8, 0x4e, 0xc5, 0x45, 0xce, 0x74, 0xff, 0x7f, 0xf4, 0x62, 0xe9, 0x69, 0xe2, 0xb0, 0x3b, 0xbb, 0x30, 0xa6, 0x2d, 0xad, 0x26, 0x9c, 0x17, 0x97, 0x1c, 0x8a, 0x1, 0x81, 0xa, 0xe8, 0x63, 0xe3, 0x68, 0xfe, 0x75, 0xf5, 0x7e, 0xc4, 0x4f, 0xcf, 0x44, 0xd2, 0x59, 0xd9, 0x52, 0x7d, 0xf6, 0x76, 0xfd, 0x6b, 0xe0, 0x60, 0xeb, 0x51, 0xda, 0x5a, 0xd1, 0x47, 0xcc, 0x4c, 0xc7, 0x25, 0xae, 0x2e, 0xa5, 0x33, 0xb8, 0x38, 0xb3, 0x9, 0x82, 0x2, 0x89, 0x1f, 0x94, 0x14, 0x9f, 0xcd, 0x46, 0xc6, 0x4d, 0xdb, 0x50, 0xd0, 0x5b, 0xe1, 0x6a, 0xea, 0x61, 0xf7, 0x7c, 0xfc, 0x77, 0x95, 0x1e, 0x9e, 0x15, 0x83, 0x8, 0x88, 0x3, 0xb9, 0x32, 0xb2, 0x39, 0xaf, 0x24, 0xa4, 0x2f, 0xfa, 0x71, 0xf1, 0x7a, 0xec, 0x67, 0xe7, 0x6c, 0xd6, 0x5d, 0xdd, 0x56, 0xc0, 0x4b, 0xcb, 0x40, 0xa2, 0x29, 0xa9, 0x22, 0xb4, 0x3f, 0xbf, 0x34, 0x8e, 0x5, 0x85, 0xe, 0x98, 0x13, 0x93, 0x18, 0x4a, 0xc1, 0x41, 0xca, 0x5c, 0xd7, 0x57, 0xdc, 0x66, 0xed, 0x6d, 0xe6, 0x70, 0xfb, 0x7b, 0xf0, 0x12, 0x99, 0x19, 0x92, 0x4, 0x8f, 0xf, 0x84, 0x3e, 0xb5, 0x35, 0xbe, 0x28, 0xa3, 0x23, 0xa8, 0x87, 0xc, 0x8c, 0x7, 0x91, 0x1a, 0x9a, 0x11, 0xab, 0x20, 0xa0, 0x2b, 0xbd, 0x36, 0xb6, 0x3d, 0xdf, 0x54, 0xd4, 0x5f, 0xc9, 0x42, 0xc2, 0x49, 0xf3, 0x78, 0xf8, 0x73, 0xe5, 0x6e, 0xee, 0x65, 0x37, 0xbc, 0x3c, 0xb7, 0x21, 0xaa, 0x2a, 0xa1, 0x1b, 0x90, 0x10, 0x9b, 0xd, 0x86, 0x6, 0x8d, 0x6f, 0xe4, 0x64, 0xef, 0x79, 0xf2, 0x72, 0xf9, 0x43, 0xc8, 0x48, 0xc3, 0x55, 0xde, 0x5e, 0xd5}, - {0x0, 0x8c, 0x5, 0x89, 0xa, 0x86, 0xf, 0x83, 0x14, 0x98, 0x11, 0x9d, 0x1e, 0x92, 0x1b, 0x97, 0x28, 0xa4, 0x2d, 0xa1, 0x22, 0xae, 0x27, 0xab, 0x3c, 0xb0, 0x39, 0xb5, 0x36, 0xba, 0x33, 0xbf, 0x50, 0xdc, 0x55, 0xd9, 0x5a, 0xd6, 0x5f, 0xd3, 0x44, 0xc8, 0x41, 0xcd, 0x4e, 0xc2, 0x4b, 0xc7, 0x78, 0xf4, 0x7d, 0xf1, 0x72, 0xfe, 0x77, 0xfb, 0x6c, 0xe0, 0x69, 0xe5, 0x66, 0xea, 0x63, 0xef, 0xa0, 0x2c, 0xa5, 0x29, 0xaa, 0x26, 0xaf, 0x23, 0xb4, 0x38, 0xb1, 0x3d, 0xbe, 0x32, 0xbb, 0x37, 0x88, 0x4, 0x8d, 0x1, 0x82, 0xe, 0x87, 0xb, 0x9c, 0x10, 0x99, 0x15, 0x96, 0x1a, 0x93, 0x1f, 0xf0, 0x7c, 0xf5, 0x79, 0xfa, 0x76, 0xff, 0x73, 0xe4, 0x68, 0xe1, 0x6d, 0xee, 0x62, 0xeb, 0x67, 0xd8, 0x54, 0xdd, 0x51, 0xd2, 0x5e, 0xd7, 0x5b, 0xcc, 0x40, 0xc9, 0x45, 0xc6, 0x4a, 0xc3, 0x4f, 0x5d, 0xd1, 0x58, 0xd4, 0x57, 0xdb, 0x52, 0xde, 0x49, 0xc5, 0x4c, 0xc0, 0x43, 0xcf, 0x46, 0xca, 0x75, 0xf9, 0x70, 0xfc, 0x7f, 0xf3, 0x7a, 0xf6, 0x61, 0xed, 0x64, 0xe8, 0x6b, 0xe7, 0x6e, 0xe2, 0xd, 0x81, 0x8, 0x84, 0x7, 0x8b, 0x2, 0x8e, 0x19, 0x95, 0x1c, 0x90, 0x13, 0x9f, 0x16, 0x9a, 0x25, 0xa9, 0x20, 0xac, 0x2f, 0xa3, 0x2a, 0xa6, 0x31, 0xbd, 0x34, 0xb8, 0x3b, 0xb7, 0x3e, 0xb2, 0xfd, 0x71, 0xf8, 0x74, 0xf7, 0x7b, 0xf2, 0x7e, 0xe9, 0x65, 0xec, 0x60, 0xe3, 0x6f, 0xe6, 0x6a, 0xd5, 0x59, 0xd0, 0x5c, 0xdf, 0x53, 0xda, 0x56, 0xc1, 0x4d, 0xc4, 0x48, 0xcb, 0x47, 0xce, 0x42, 0xad, 0x21, 0xa8, 0x24, 0xa7, 0x2b, 0xa2, 0x2e, 0xb9, 0x35, 0xbc, 0x30, 0xb3, 0x3f, 0xb6, 0x3a, 0x85, 0x9, 0x80, 0xc, 0x8f, 0x3, 0x8a, 0x6, 0x91, 0x1d, 0x94, 0x18, 0x9b, 0x17, 0x9e, 0x12}, - {0x0, 0x8d, 0x7, 0x8a, 0xe, 0x83, 0x9, 0x84, 0x1c, 0x91, 0x1b, 0x96, 0x12, 0x9f, 0x15, 0x98, 0x38, 0xb5, 0x3f, 0xb2, 0x36, 0xbb, 0x31, 0xbc, 0x24, 0xa9, 0x23, 0xae, 0x2a, 0xa7, 0x2d, 0xa0, 0x70, 0xfd, 0x77, 0xfa, 0x7e, 0xf3, 0x79, 0xf4, 0x6c, 0xe1, 0x6b, 0xe6, 0x62, 0xef, 0x65, 0xe8, 0x48, 0xc5, 0x4f, 0xc2, 0x46, 0xcb, 0x41, 0xcc, 0x54, 0xd9, 0x53, 0xde, 0x5a, 0xd7, 0x5d, 0xd0, 0xe0, 0x6d, 0xe7, 0x6a, 0xee, 0x63, 0xe9, 0x64, 0xfc, 0x71, 0xfb, 0x76, 0xf2, 0x7f, 0xf5, 0x78, 0xd8, 0x55, 0xdf, 0x52, 0xd6, 0x5b, 0xd1, 0x5c, 0xc4, 0x49, 0xc3, 0x4e, 0xca, 0x47, 0xcd, 0x40, 0x90, 0x1d, 0x97, 0x1a, 0x9e, 0x13, 0x99, 0x14, 0x8c, 0x1, 0x8b, 0x6, 0x82, 0xf, 0x85, 0x8, 0xa8, 0x25, 0xaf, 0x22, 0xa6, 0x2b, 0xa1, 0x2c, 0xb4, 0x39, 0xb3, 0x3e, 0xba, 0x37, 0xbd, 0x30, 0xdd, 0x50, 0xda, 0x57, 0xd3, 0x5e, 0xd4, 0x59, 0xc1, 0x4c, 0xc6, 0x4b, 0xcf, 0x42, 0xc8, 0x45, 0xe5, 0x68, 0xe2, 0x6f, 0xeb, 0x66, 0xec, 0x61, 0xf9, 0x74, 0xfe, 0x73, 0xf7, 0x7a, 0xf0, 0x7d, 0xad, 0x20, 0xaa, 0x27, 0xa3, 0x2e, 0xa4, 0x29, 0xb1, 0x3c, 0xb6, 0x3b, 0xbf, 0x32, 0xb8, 0x35, 0x95, 0x18, 0x92, 0x1f, 0x9b, 0x16, 0x9c, 0x11, 0x89, 0x4, 0x8e, 0x3, 0x87, 0xa, 0x80, 0xd, 0x3d, 0xb0, 0x3a, 0xb7, 0x33, 0xbe, 0x34, 0xb9, 0x21, 0xac, 0x26, 0xab, 0x2f, 0xa2, 0x28, 0xa5, 0x5, 0x88, 0x2, 0x8f, 0xb, 0x86, 0xc, 0x81, 0x19, 0x94, 0x1e, 0x93, 0x17, 0x9a, 0x10, 0x9d, 0x4d, 0xc0, 0x4a, 0xc7, 0x43, 0xce, 0x44, 0xc9, 0x51, 0xdc, 0x56, 0xdb, 0x5f, 0xd2, 0x58, 0xd5, 0x75, 0xf8, 0x72, 0xff, 0x7b, 0xf6, 0x7c, 0xf1, 0x69, 0xe4, 0x6e, 0xe3, 0x67, 0xea, 0x60, 0xed}, - {0x0, 0x8e, 0x1, 0x8f, 0x2, 0x8c, 0x3, 0x8d, 0x4, 0x8a, 0x5, 0x8b, 0x6, 0x88, 0x7, 0x89, 0x8, 0x86, 0x9, 0x87, 0xa, 0x84, 0xb, 0x85, 0xc, 0x82, 0xd, 0x83, 0xe, 0x80, 0xf, 0x81, 0x10, 0x9e, 0x11, 0x9f, 0x12, 0x9c, 0x13, 0x9d, 0x14, 0x9a, 0x15, 0x9b, 0x16, 0x98, 0x17, 0x99, 0x18, 0x96, 0x19, 0x97, 0x1a, 0x94, 0x1b, 0x95, 0x1c, 0x92, 0x1d, 0x93, 0x1e, 0x90, 0x1f, 0x91, 0x20, 0xae, 0x21, 0xaf, 0x22, 0xac, 0x23, 0xad, 0x24, 0xaa, 0x25, 0xab, 0x26, 0xa8, 0x27, 0xa9, 0x28, 0xa6, 0x29, 0xa7, 0x2a, 0xa4, 0x2b, 0xa5, 0x2c, 0xa2, 0x2d, 0xa3, 0x2e, 0xa0, 0x2f, 0xa1, 0x30, 0xbe, 0x31, 0xbf, 0x32, 0xbc, 0x33, 0xbd, 0x34, 0xba, 0x35, 0xbb, 0x36, 0xb8, 0x37, 0xb9, 0x38, 0xb6, 0x39, 0xb7, 0x3a, 0xb4, 0x3b, 0xb5, 0x3c, 0xb2, 0x3d, 0xb3, 0x3e, 0xb0, 0x3f, 0xb1, 0x40, 0xce, 0x41, 0xcf, 0x42, 0xcc, 0x43, 0xcd, 0x44, 0xca, 0x45, 0xcb, 0x46, 0xc8, 0x47, 0xc9, 0x48, 0xc6, 0x49, 0xc7, 0x4a, 0xc4, 0x4b, 0xc5, 0x4c, 0xc2, 0x4d, 0xc3, 0x4e, 0xc0, 0x4f, 0xc1, 0x50, 0xde, 0x51, 0xdf, 0x52, 0xdc, 0x53, 0xdd, 0x54, 0xda, 0x55, 0xdb, 0x56, 0xd8, 0x57, 0xd9, 0x58, 0xd6, 0x59, 0xd7, 0x5a, 0xd4, 0x5b, 0xd5, 0x5c, 0xd2, 0x5d, 0xd3, 0x5e, 0xd0, 0x5f, 0xd1, 0x60, 0xee, 0x61, 0xef, 0x62, 0xec, 0x63, 0xed, 0x64, 0xea, 0x65, 0xeb, 0x66, 0xe8, 0x67, 0xe9, 0x68, 0xe6, 0x69, 0xe7, 0x6a, 0xe4, 0x6b, 0xe5, 0x6c, 0xe2, 0x6d, 0xe3, 0x6e, 0xe0, 0x6f, 0xe1, 0x70, 0xfe, 0x71, 0xff, 0x72, 0xfc, 0x73, 0xfd, 0x74, 0xfa, 0x75, 0xfb, 0x76, 0xf8, 0x77, 0xf9, 0x78, 0xf6, 0x79, 0xf7, 0x7a, 0xf4, 0x7b, 0xf5, 0x7c, 0xf2, 0x7d, 0xf3, 0x7e, 0xf0, 0x7f, 0xf1}, - {0x0, 0x8f, 0x3, 0x8c, 0x6, 0x89, 0x5, 0x8a, 0xc, 0x83, 0xf, 0x80, 0xa, 0x85, 0x9, 0x86, 0x18, 0x97, 0x1b, 0x94, 0x1e, 0x91, 0x1d, 0x92, 0x14, 0x9b, 0x17, 0x98, 0x12, 0x9d, 0x11, 0x9e, 0x30, 0xbf, 0x33, 0xbc, 0x36, 0xb9, 0x35, 0xba, 0x3c, 0xb3, 0x3f, 0xb0, 0x3a, 0xb5, 0x39, 0xb6, 0x28, 0xa7, 0x2b, 0xa4, 0x2e, 0xa1, 0x2d, 0xa2, 0x24, 0xab, 0x27, 0xa8, 0x22, 0xad, 0x21, 0xae, 0x60, 0xef, 0x63, 0xec, 0x66, 0xe9, 0x65, 0xea, 0x6c, 0xe3, 0x6f, 0xe0, 0x6a, 0xe5, 0x69, 0xe6, 0x78, 0xf7, 0x7b, 0xf4, 0x7e, 0xf1, 0x7d, 0xf2, 0x74, 0xfb, 0x77, 0xf8, 0x72, 0xfd, 0x71, 0xfe, 0x50, 0xdf, 0x53, 0xdc, 0x56, 0xd9, 0x55, 0xda, 0x5c, 0xd3, 0x5f, 0xd0, 0x5a, 0xd5, 0x59, 0xd6, 0x48, 0xc7, 0x4b, 0xc4, 0x4e, 0xc1, 0x4d, 0xc2, 0x44, 0xcb, 0x47, 0xc8, 0x42, 0xcd, 0x41, 0xce, 0xc0, 0x4f, 0xc3, 0x4c, 0xc6, 0x49, 0xc5, 0x4a, 0xcc, 0x43, 0xcf, 0x40, 0xca, 0x45, 0xc9, 0x46, 0xd8, 0x57, 0xdb, 0x54, 0xde, 0x51, 0xdd, 0x52, 0xd4, 0x5b, 0xd7, 0x58, 0xd2, 0x5d, 0xd1, 0x5e, 0xf0, 0x7f, 0xf3, 0x7c, 0xf6, 0x79, 0xf5, 0x7a, 0xfc, 0x73, 0xff, 0x70, 0xfa, 0x75, 0xf9, 0x76, 0xe8, 0x67, 0xeb, 0x64, 0xee, 0x61, 0xed, 0x62, 0xe4, 0x6b, 0xe7, 0x68, 0xe2, 0x6d, 0xe1, 0x6e, 0xa0, 0x2f, 0xa3, 0x2c, 0xa6, 0x29, 0xa5, 0x2a, 0xac, 0x23, 0xaf, 0x20, 0xaa, 0x25, 0xa9, 0x26, 0xb8, 0x37, 0xbb, 0x34, 0xbe, 0x31, 0xbd, 0x32, 0xb4, 0x3b, 0xb7, 0x38, 0xb2, 0x3d, 0xb1, 0x3e, 0x90, 0x1f, 0x93, 0x1c, 0x96, 0x19, 0x95, 0x1a, 0x9c, 0x13, 0x9f, 0x10, 0x9a, 0x15, 0x99, 0x16, 0x88, 0x7, 0x8b, 0x4, 0x8e, 0x1, 0x8d, 0x2, 0x84, 0xb, 0x87, 0x8, 0x82, 0xd, 0x81, 0xe}, - {0x0, 0x90, 0x3d, 0xad, 0x7a, 0xea, 0x47, 0xd7, 0xf4, 0x64, 0xc9, 0x59, 0x8e, 0x1e, 0xb3, 0x23, 0xf5, 0x65, 0xc8, 0x58, 0x8f, 0x1f, 0xb2, 0x22, 0x1, 0x91, 0x3c, 0xac, 0x7b, 0xeb, 0x46, 0xd6, 0xf7, 0x67, 0xca, 0x5a, 0x8d, 0x1d, 0xb0, 0x20, 0x3, 0x93, 0x3e, 0xae, 0x79, 0xe9, 0x44, 0xd4, 0x2, 0x92, 0x3f, 0xaf, 0x78, 0xe8, 0x45, 0xd5, 0xf6, 0x66, 0xcb, 0x5b, 0x8c, 0x1c, 0xb1, 0x21, 0xf3, 0x63, 0xce, 0x5e, 0x89, 0x19, 0xb4, 0x24, 0x7, 0x97, 0x3a, 0xaa, 0x7d, 0xed, 0x40, 0xd0, 0x6, 0x96, 0x3b, 0xab, 0x7c, 0xec, 0x41, 0xd1, 0xf2, 0x62, 0xcf, 0x5f, 0x88, 0x18, 0xb5, 0x25, 0x4, 0x94, 0x39, 0xa9, 0x7e, 0xee, 0x43, 0xd3, 0xf0, 0x60, 0xcd, 0x5d, 0x8a, 0x1a, 0xb7, 0x27, 0xf1, 0x61, 0xcc, 0x5c, 0x8b, 0x1b, 0xb6, 0x26, 0x5, 0x95, 0x38, 0xa8, 0x7f, 0xef, 0x42, 0xd2, 0xfb, 0x6b, 0xc6, 0x56, 0x81, 0x11, 0xbc, 0x2c, 0xf, 0x9f, 0x32, 0xa2, 0x75, 0xe5, 0x48, 0xd8, 0xe, 0x9e, 0x33, 0xa3, 0x74, 0xe4, 0x49, 0xd9, 0xfa, 0x6a, 0xc7, 0x57, 0x80, 0x10, 0xbd, 0x2d, 0xc, 0x9c, 0x31, 0xa1, 0x76, 0xe6, 0x4b, 0xdb, 0xf8, 0x68, 0xc5, 0x55, 0x82, 0x12, 0xbf, 0x2f, 0xf9, 0x69, 0xc4, 0x54, 0x83, 0x13, 0xbe, 0x2e, 0xd, 0x9d, 0x30, 0xa0, 0x77, 0xe7, 0x4a, 0xda, 0x8, 0x98, 0x35, 0xa5, 0x72, 0xe2, 0x4f, 0xdf, 0xfc, 0x6c, 0xc1, 0x51, 0x86, 0x16, 0xbb, 0x2b, 0xfd, 0x6d, 0xc0, 0x50, 0x87, 0x17, 0xba, 0x2a, 0x9, 0x99, 0x34, 0xa4, 0x73, 0xe3, 0x4e, 0xde, 0xff, 0x6f, 0xc2, 0x52, 0x85, 0x15, 0xb8, 0x28, 0xb, 0x9b, 0x36, 0xa6, 0x71, 0xe1, 0x4c, 0xdc, 0xa, 0x9a, 0x37, 0xa7, 0x70, 0xe0, 0x4d, 0xdd, 0xfe, 0x6e, 0xc3, 0x53, 0x84, 0x14, 0xb9, 0x29}, - {0x0, 0x91, 0x3f, 0xae, 0x7e, 0xef, 0x41, 0xd0, 0xfc, 0x6d, 0xc3, 0x52, 0x82, 0x13, 0xbd, 0x2c, 0xe5, 0x74, 0xda, 0x4b, 0x9b, 0xa, 0xa4, 0x35, 0x19, 0x88, 0x26, 0xb7, 0x67, 0xf6, 0x58, 0xc9, 0xd7, 0x46, 0xe8, 0x79, 0xa9, 0x38, 0x96, 0x7, 0x2b, 0xba, 0x14, 0x85, 0x55, 0xc4, 0x6a, 0xfb, 0x32, 0xa3, 0xd, 0x9c, 0x4c, 0xdd, 0x73, 0xe2, 0xce, 0x5f, 0xf1, 0x60, 0xb0, 0x21, 0x8f, 0x1e, 0xb3, 0x22, 0x8c, 0x1d, 0xcd, 0x5c, 0xf2, 0x63, 0x4f, 0xde, 0x70, 0xe1, 0x31, 0xa0, 0xe, 0x9f, 0x56, 0xc7, 0x69, 0xf8, 0x28, 0xb9, 0x17, 0x86, 0xaa, 0x3b, 0x95, 0x4, 0xd4, 0x45, 0xeb, 0x7a, 0x64, 0xf5, 0x5b, 0xca, 0x1a, 0x8b, 0x25, 0xb4, 0x98, 0x9, 0xa7, 0x36, 0xe6, 0x77, 0xd9, 0x48, 0x81, 0x10, 0xbe, 0x2f, 0xff, 0x6e, 0xc0, 0x51, 0x7d, 0xec, 0x42, 0xd3, 0x3, 0x92, 0x3c, 0xad, 0x7b, 0xea, 0x44, 0xd5, 0x5, 0x94, 0x3a, 0xab, 0x87, 0x16, 0xb8, 0x29, 0xf9, 0x68, 0xc6, 0x57, 0x9e, 0xf, 0xa1, 0x30, 0xe0, 0x71, 0xdf, 0x4e, 0x62, 0xf3, 0x5d, 0xcc, 0x1c, 0x8d, 0x23, 0xb2, 0xac, 0x3d, 0x93, 0x2, 0xd2, 0x43, 0xed, 0x7c, 0x50, 0xc1, 0x6f, 0xfe, 0x2e, 0xbf, 0x11, 0x80, 0x49, 0xd8, 0x76, 0xe7, 0x37, 0xa6, 0x8, 0x99, 0xb5, 0x24, 0x8a, 0x1b, 0xcb, 0x5a, 0xf4, 0x65, 0xc8, 0x59, 0xf7, 0x66, 0xb6, 0x27, 0x89, 0x18, 0x34, 0xa5, 0xb, 0x9a, 0x4a, 0xdb, 0x75, 0xe4, 0x2d, 0xbc, 0x12, 0x83, 0x53, 0xc2, 0x6c, 0xfd, 0xd1, 0x40, 0xee, 0x7f, 0xaf, 0x3e, 0x90, 0x1, 0x1f, 0x8e, 0x20, 0xb1, 0x61, 0xf0, 0x5e, 0xcf, 0xe3, 0x72, 0xdc, 0x4d, 0x9d, 0xc, 0xa2, 0x33, 0xfa, 0x6b, 0xc5, 0x54, 0x84, 0x15, 0xbb, 0x2a, 0x6, 0x97, 0x39, 0xa8, 0x78, 0xe9, 0x47, 0xd6}, - {0x0, 0x92, 0x39, 0xab, 0x72, 0xe0, 0x4b, 0xd9, 0xe4, 0x76, 0xdd, 0x4f, 0x96, 0x4, 0xaf, 0x3d, 0xd5, 0x47, 0xec, 0x7e, 0xa7, 0x35, 0x9e, 0xc, 0x31, 0xa3, 0x8, 0x9a, 0x43, 0xd1, 0x7a, 0xe8, 0xb7, 0x25, 0x8e, 0x1c, 0xc5, 0x57, 0xfc, 0x6e, 0x53, 0xc1, 0x6a, 0xf8, 0x21, 0xb3, 0x18, 0x8a, 0x62, 0xf0, 0x5b, 0xc9, 0x10, 0x82, 0x29, 0xbb, 0x86, 0x14, 0xbf, 0x2d, 0xf4, 0x66, 0xcd, 0x5f, 0x73, 0xe1, 0x4a, 0xd8, 0x1, 0x93, 0x38, 0xaa, 0x97, 0x5, 0xae, 0x3c, 0xe5, 0x77, 0xdc, 0x4e, 0xa6, 0x34, 0x9f, 0xd, 0xd4, 0x46, 0xed, 0x7f, 0x42, 0xd0, 0x7b, 0xe9, 0x30, 0xa2, 0x9, 0x9b, 0xc4, 0x56, 0xfd, 0x6f, 0xb6, 0x24, 0x8f, 0x1d, 0x20, 0xb2, 0x19, 0x8b, 0x52, 0xc0, 0x6b, 0xf9, 0x11, 0x83, 0x28, 0xba, 0x63, 0xf1, 0x5a, 0xc8, 0xf5, 0x67, 0xcc, 0x5e, 0x87, 0x15, 0xbe, 0x2c, 0xe6, 0x74, 0xdf, 0x4d, 0x94, 0x6, 0xad, 0x3f, 0x2, 0x90, 0x3b, 0xa9, 0x70, 0xe2, 0x49, 0xdb, 0x33, 0xa1, 0xa, 0x98, 0x41, 0xd3, 0x78, 0xea, 0xd7, 0x45, 0xee, 0x7c, 0xa5, 0x37, 0x9c, 0xe, 0x51, 0xc3, 0x68, 0xfa, 0x23, 0xb1, 0x1a, 0x88, 0xb5, 0x27, 0x8c, 0x1e, 0xc7, 0x55, 0xfe, 0x6c, 0x84, 0x16, 0xbd, 0x2f, 0xf6, 0x64, 0xcf, 0x5d, 0x60, 0xf2, 0x59, 0xcb, 0x12, 0x80, 0x2b, 0xb9, 0x95, 0x7, 0xac, 0x3e, 0xe7, 0x75, 0xde, 0x4c, 0x71, 0xe3, 0x48, 0xda, 0x3, 0x91, 0x3a, 0xa8, 0x40, 0xd2, 0x79, 0xeb, 0x32, 0xa0, 0xb, 0x99, 0xa4, 0x36, 0x9d, 0xf, 0xd6, 0x44, 0xef, 0x7d, 0x22, 0xb0, 0x1b, 0x89, 0x50, 0xc2, 0x69, 0xfb, 0xc6, 0x54, 0xff, 0x6d, 0xb4, 0x26, 0x8d, 0x1f, 0xf7, 0x65, 0xce, 0x5c, 0x85, 0x17, 0xbc, 0x2e, 0x13, 0x81, 0x2a, 0xb8, 0x61, 0xf3, 0x58, 0xca}, - {0x0, 0x93, 0x3b, 0xa8, 0x76, 0xe5, 0x4d, 0xde, 0xec, 0x7f, 0xd7, 0x44, 0x9a, 0x9, 0xa1, 0x32, 0xc5, 0x56, 0xfe, 0x6d, 0xb3, 0x20, 0x88, 0x1b, 0x29, 0xba, 0x12, 0x81, 0x5f, 0xcc, 0x64, 0xf7, 0x97, 0x4, 0xac, 0x3f, 0xe1, 0x72, 0xda, 0x49, 0x7b, 0xe8, 0x40, 0xd3, 0xd, 0x9e, 0x36, 0xa5, 0x52, 0xc1, 0x69, 0xfa, 0x24, 0xb7, 0x1f, 0x8c, 0xbe, 0x2d, 0x85, 0x16, 0xc8, 0x5b, 0xf3, 0x60, 0x33, 0xa0, 0x8, 0x9b, 0x45, 0xd6, 0x7e, 0xed, 0xdf, 0x4c, 0xe4, 0x77, 0xa9, 0x3a, 0x92, 0x1, 0xf6, 0x65, 0xcd, 0x5e, 0x80, 0x13, 0xbb, 0x28, 0x1a, 0x89, 0x21, 0xb2, 0x6c, 0xff, 0x57, 0xc4, 0xa4, 0x37, 0x9f, 0xc, 0xd2, 0x41, 0xe9, 0x7a, 0x48, 0xdb, 0x73, 0xe0, 0x3e, 0xad, 0x5, 0x96, 0x61, 0xf2, 0x5a, 0xc9, 0x17, 0x84, 0x2c, 0xbf, 0x8d, 0x1e, 0xb6, 0x25, 0xfb, 0x68, 0xc0, 0x53, 0x66, 0xf5, 0x5d, 0xce, 0x10, 0x83, 0x2b, 0xb8, 0x8a, 0x19, 0xb1, 0x22, 0xfc, 0x6f, 0xc7, 0x54, 0xa3, 0x30, 0x98, 0xb, 0xd5, 0x46, 0xee, 0x7d, 0x4f, 0xdc, 0x74, 0xe7, 0x39, 0xaa, 0x2, 0x91, 0xf1, 0x62, 0xca, 0x59, 0x87, 0x14, 0xbc, 0x2f, 0x1d, 0x8e, 0x26, 0xb5, 0x6b, 0xf8, 0x50, 0xc3, 0x34, 0xa7, 0xf, 0x9c, 0x42, 0xd1, 0x79, 0xea, 0xd8, 0x4b, 0xe3, 0x70, 0xae, 0x3d, 0x95, 0x6, 0x55, 0xc6, 0x6e, 0xfd, 0x23, 0xb0, 0x18, 0x8b, 0xb9, 0x2a, 0x82, 0x11, 0xcf, 0x5c, 0xf4, 0x67, 0x90, 0x3, 0xab, 0x38, 0xe6, 0x75, 0xdd, 0x4e, 0x7c, 0xef, 0x47, 0xd4, 0xa, 0x99, 0x31, 0xa2, 0xc2, 0x51, 0xf9, 0x6a, 0xb4, 0x27, 0x8f, 0x1c, 0x2e, 0xbd, 0x15, 0x86, 0x58, 0xcb, 0x63, 0xf0, 0x7, 0x94, 0x3c, 0xaf, 0x71, 0xe2, 0x4a, 0xd9, 0xeb, 0x78, 0xd0, 0x43, 0x9d, 0xe, 0xa6, 0x35}, - {0x0, 0x94, 0x35, 0xa1, 0x6a, 0xfe, 0x5f, 0xcb, 0xd4, 0x40, 0xe1, 0x75, 0xbe, 0x2a, 0x8b, 0x1f, 0xb5, 0x21, 0x80, 0x14, 0xdf, 0x4b, 0xea, 0x7e, 0x61, 0xf5, 0x54, 0xc0, 0xb, 0x9f, 0x3e, 0xaa, 0x77, 0xe3, 0x42, 0xd6, 0x1d, 0x89, 0x28, 0xbc, 0xa3, 0x37, 0x96, 0x2, 0xc9, 0x5d, 0xfc, 0x68, 0xc2, 0x56, 0xf7, 0x63, 0xa8, 0x3c, 0x9d, 0x9, 0x16, 0x82, 0x23, 0xb7, 0x7c, 0xe8, 0x49, 0xdd, 0xee, 0x7a, 0xdb, 0x4f, 0x84, 0x10, 0xb1, 0x25, 0x3a, 0xae, 0xf, 0x9b, 0x50, 0xc4, 0x65, 0xf1, 0x5b, 0xcf, 0x6e, 0xfa, 0x31, 0xa5, 0x4, 0x90, 0x8f, 0x1b, 0xba, 0x2e, 0xe5, 0x71, 0xd0, 0x44, 0x99, 0xd, 0xac, 0x38, 0xf3, 0x67, 0xc6, 0x52, 0x4d, 0xd9, 0x78, 0xec, 0x27, 0xb3, 0x12, 0x86, 0x2c, 0xb8, 0x19, 0x8d, 0x46, 0xd2, 0x73, 0xe7, 0xf8, 0x6c, 0xcd, 0x59, 0x92, 0x6, 0xa7, 0x33, 0xc1, 0x55, 0xf4, 0x60, 0xab, 0x3f, 0x9e, 0xa, 0x15, 0x81, 0x20, 0xb4, 0x7f, 0xeb, 0x4a, 0xde, 0x74, 0xe0, 0x41, 0xd5, 0x1e, 0x8a, 0x2b, 0xbf, 0xa0, 0x34, 0x95, 0x1, 0xca, 0x5e, 0xff, 0x6b, 0xb6, 0x22, 0x83, 0x17, 0xdc, 0x48, 0xe9, 0x7d, 0x62, 0xf6, 0x57, 0xc3, 0x8, 0x9c, 0x3d, 0xa9, 0x3, 0x97, 0x36, 0xa2, 0x69, 0xfd, 0x5c, 0xc8, 0xd7, 0x43, 0xe2, 0x76, 0xbd, 0x29, 0x88, 0x1c, 0x2f, 0xbb, 0x1a, 0x8e, 0x45, 0xd1, 0x70, 0xe4, 0xfb, 0x6f, 0xce, 0x5a, 0x91, 0x5, 0xa4, 0x30, 0x9a, 0xe, 0xaf, 0x3b, 0xf0, 0x64, 0xc5, 0x51, 0x4e, 0xda, 0x7b, 0xef, 0x24, 0xb0, 0x11, 0x85, 0x58, 0xcc, 0x6d, 0xf9, 0x32, 0xa6, 0x7, 0x93, 0x8c, 0x18, 0xb9, 0x2d, 0xe6, 0x72, 0xd3, 0x47, 0xed, 0x79, 0xd8, 0x4c, 0x87, 0x13, 0xb2, 0x26, 0x39, 0xad, 0xc, 0x98, 0x53, 0xc7, 0x66, 0xf2}, - {0x0, 0x95, 0x37, 0xa2, 0x6e, 0xfb, 0x59, 0xcc, 0xdc, 0x49, 0xeb, 0x7e, 0xb2, 0x27, 0x85, 0x10, 0xa5, 0x30, 0x92, 0x7, 0xcb, 0x5e, 0xfc, 0x69, 0x79, 0xec, 0x4e, 0xdb, 0x17, 0x82, 0x20, 0xb5, 0x57, 0xc2, 0x60, 0xf5, 0x39, 0xac, 0xe, 0x9b, 0x8b, 0x1e, 0xbc, 0x29, 0xe5, 0x70, 0xd2, 0x47, 0xf2, 0x67, 0xc5, 0x50, 0x9c, 0x9, 0xab, 0x3e, 0x2e, 0xbb, 0x19, 0x8c, 0x40, 0xd5, 0x77, 0xe2, 0xae, 0x3b, 0x99, 0xc, 0xc0, 0x55, 0xf7, 0x62, 0x72, 0xe7, 0x45, 0xd0, 0x1c, 0x89, 0x2b, 0xbe, 0xb, 0x9e, 0x3c, 0xa9, 0x65, 0xf0, 0x52, 0xc7, 0xd7, 0x42, 0xe0, 0x75, 0xb9, 0x2c, 0x8e, 0x1b, 0xf9, 0x6c, 0xce, 0x5b, 0x97, 0x2, 0xa0, 0x35, 0x25, 0xb0, 0x12, 0x87, 0x4b, 0xde, 0x7c, 0xe9, 0x5c, 0xc9, 0x6b, 0xfe, 0x32, 0xa7, 0x5, 0x90, 0x80, 0x15, 0xb7, 0x22, 0xee, 0x7b, 0xd9, 0x4c, 0x41, 0xd4, 0x76, 0xe3, 0x2f, 0xba, 0x18, 0x8d, 0x9d, 0x8, 0xaa, 0x3f, 0xf3, 0x66, 0xc4, 0x51, 0xe4, 0x71, 0xd3, 0x46, 0x8a, 0x1f, 0xbd, 0x28, 0x38, 0xad, 0xf, 0x9a, 0x56, 0xc3, 0x61, 0xf4, 0x16, 0x83, 0x21, 0xb4, 0x78, 0xed, 0x4f, 0xda, 0xca, 0x5f, 0xfd, 0x68, 0xa4, 0x31, 0x93, 0x6, 0xb3, 0x26, 0x84, 0x11, 0xdd, 0x48, 0xea, 0x7f, 0x6f, 0xfa, 0x58, 0xcd, 0x1, 0x94, 0x36, 0xa3, 0xef, 0x7a, 0xd8, 0x4d, 0x81, 0x14, 0xb6, 0x23, 0x33, 0xa6, 0x4, 0x91, 0x5d, 0xc8, 0x6a, 0xff, 0x4a, 0xdf, 0x7d, 0xe8, 0x24, 0xb1, 0x13, 0x86, 0x96, 0x3, 0xa1, 0x34, 0xf8, 0x6d, 0xcf, 0x5a, 0xb8, 0x2d, 0x8f, 0x1a, 0xd6, 0x43, 0xe1, 0x74, 0x64, 0xf1, 0x53, 0xc6, 0xa, 0x9f, 0x3d, 0xa8, 0x1d, 0x88, 0x2a, 0xbf, 0x73, 0xe6, 0x44, 0xd1, 0xc1, 0x54, 0xf6, 0x63, 0xaf, 0x3a, 0x98, 0xd}, - {0x0, 0x96, 0x31, 0xa7, 0x62, 0xf4, 0x53, 0xc5, 0xc4, 0x52, 0xf5, 0x63, 0xa6, 0x30, 0x97, 0x1, 0x95, 0x3, 0xa4, 0x32, 0xf7, 0x61, 0xc6, 0x50, 0x51, 0xc7, 0x60, 0xf6, 0x33, 0xa5, 0x2, 0x94, 0x37, 0xa1, 0x6, 0x90, 0x55, 0xc3, 0x64, 0xf2, 0xf3, 0x65, 0xc2, 0x54, 0x91, 0x7, 0xa0, 0x36, 0xa2, 0x34, 0x93, 0x5, 0xc0, 0x56, 0xf1, 0x67, 0x66, 0xf0, 0x57, 0xc1, 0x4, 0x92, 0x35, 0xa3, 0x6e, 0xf8, 0x5f, 0xc9, 0xc, 0x9a, 0x3d, 0xab, 0xaa, 0x3c, 0x9b, 0xd, 0xc8, 0x5e, 0xf9, 0x6f, 0xfb, 0x6d, 0xca, 0x5c, 0x99, 0xf, 0xa8, 0x3e, 0x3f, 0xa9, 0xe, 0x98, 0x5d, 0xcb, 0x6c, 0xfa, 0x59, 0xcf, 0x68, 0xfe, 0x3b, 0xad, 0xa, 0x9c, 0x9d, 0xb, 0xac, 0x3a, 0xff, 0x69, 0xce, 0x58, 0xcc, 0x5a, 0xfd, 0x6b, 0xae, 0x38, 0x9f, 0x9, 0x8, 0x9e, 0x39, 0xaf, 0x6a, 0xfc, 0x5b, 0xcd, 0xdc, 0x4a, 0xed, 0x7b, 0xbe, 0x28, 0x8f, 0x19, 0x18, 0x8e, 0x29, 0xbf, 0x7a, 0xec, 0x4b, 0xdd, 0x49, 0xdf, 0x78, 0xee, 0x2b, 0xbd, 0x1a, 0x8c, 0x8d, 0x1b, 0xbc, 0x2a, 0xef, 0x79, 0xde, 0x48, 0xeb, 0x7d, 0xda, 0x4c, 0x89, 0x1f, 0xb8, 0x2e, 0x2f, 0xb9, 0x1e, 0x88, 0x4d, 0xdb, 0x7c, 0xea, 0x7e, 0xe8, 0x4f, 0xd9, 0x1c, 0x8a, 0x2d, 0xbb, 0xba, 0x2c, 0x8b, 0x1d, 0xd8, 0x4e, 0xe9, 0x7f, 0xb2, 0x24, 0x83, 0x15, 0xd0, 0x46, 0xe1, 0x77, 0x76, 0xe0, 0x47, 0xd1, 0x14, 0x82, 0x25, 0xb3, 0x27, 0xb1, 0x16, 0x80, 0x45, 0xd3, 0x74, 0xe2, 0xe3, 0x75, 0xd2, 0x44, 0x81, 0x17, 0xb0, 0x26, 0x85, 0x13, 0xb4, 0x22, 0xe7, 0x71, 0xd6, 0x40, 0x41, 0xd7, 0x70, 0xe6, 0x23, 0xb5, 0x12, 0x84, 0x10, 0x86, 0x21, 0xb7, 0x72, 0xe4, 0x43, 0xd5, 0xd4, 0x42, 0xe5, 0x73, 0xb6, 0x20, 0x87, 0x11}, - {0x0, 0x97, 0x33, 0xa4, 0x66, 0xf1, 0x55, 0xc2, 0xcc, 0x5b, 0xff, 0x68, 0xaa, 0x3d, 0x99, 0xe, 0x85, 0x12, 0xb6, 0x21, 0xe3, 0x74, 0xd0, 0x47, 0x49, 0xde, 0x7a, 0xed, 0x2f, 0xb8, 0x1c, 0x8b, 0x17, 0x80, 0x24, 0xb3, 0x71, 0xe6, 0x42, 0xd5, 0xdb, 0x4c, 0xe8, 0x7f, 0xbd, 0x2a, 0x8e, 0x19, 0x92, 0x5, 0xa1, 0x36, 0xf4, 0x63, 0xc7, 0x50, 0x5e, 0xc9, 0x6d, 0xfa, 0x38, 0xaf, 0xb, 0x9c, 0x2e, 0xb9, 0x1d, 0x8a, 0x48, 0xdf, 0x7b, 0xec, 0xe2, 0x75, 0xd1, 0x46, 0x84, 0x13, 0xb7, 0x20, 0xab, 0x3c, 0x98, 0xf, 0xcd, 0x5a, 0xfe, 0x69, 0x67, 0xf0, 0x54, 0xc3, 0x1, 0x96, 0x32, 0xa5, 0x39, 0xae, 0xa, 0x9d, 0x5f, 0xc8, 0x6c, 0xfb, 0xf5, 0x62, 0xc6, 0x51, 0x93, 0x4, 0xa0, 0x37, 0xbc, 0x2b, 0x8f, 0x18, 0xda, 0x4d, 0xe9, 0x7e, 0x70, 0xe7, 0x43, 0xd4, 0x16, 0x81, 0x25, 0xb2, 0x5c, 0xcb, 0x6f, 0xf8, 0x3a, 0xad, 0x9, 0x9e, 0x90, 0x7, 0xa3, 0x34, 0xf6, 0x61, 0xc5, 0x52, 0xd9, 0x4e, 0xea, 0x7d, 0xbf, 0x28, 0x8c, 0x1b, 0x15, 0x82, 0x26, 0xb1, 0x73, 0xe4, 0x40, 0xd7, 0x4b, 0xdc, 0x78, 0xef, 0x2d, 0xba, 0x1e, 0x89, 0x87, 0x10, 0xb4, 0x23, 0xe1, 0x76, 0xd2, 0x45, 0xce, 0x59, 0xfd, 0x6a, 0xa8, 0x3f, 0x9b, 0xc, 0x2, 0x95, 0x31, 0xa6, 0x64, 0xf3, 0x57, 0xc0, 0x72, 0xe5, 0x41, 0xd6, 0x14, 0x83, 0x27, 0xb0, 0xbe, 0x29, 0x8d, 0x1a, 0xd8, 0x4f, 0xeb, 0x7c, 0xf7, 0x60, 0xc4, 0x53, 0x91, 0x6, 0xa2, 0x35, 0x3b, 0xac, 0x8, 0x9f, 0x5d, 0xca, 0x6e, 0xf9, 0x65, 0xf2, 0x56, 0xc1, 0x3, 0x94, 0x30, 0xa7, 0xa9, 0x3e, 0x9a, 0xd, 0xcf, 0x58, 0xfc, 0x6b, 0xe0, 0x77, 0xd3, 0x44, 0x86, 0x11, 0xb5, 0x22, 0x2c, 0xbb, 0x1f, 0x88, 0x4a, 0xdd, 0x79, 0xee}, - {0x0, 0x98, 0x2d, 0xb5, 0x5a, 0xc2, 0x77, 0xef, 0xb4, 0x2c, 0x99, 0x1, 0xee, 0x76, 0xc3, 0x5b, 0x75, 0xed, 0x58, 0xc0, 0x2f, 0xb7, 0x2, 0x9a, 0xc1, 0x59, 0xec, 0x74, 0x9b, 0x3, 0xb6, 0x2e, 0xea, 0x72, 0xc7, 0x5f, 0xb0, 0x28, 0x9d, 0x5, 0x5e, 0xc6, 0x73, 0xeb, 0x4, 0x9c, 0x29, 0xb1, 0x9f, 0x7, 0xb2, 0x2a, 0xc5, 0x5d, 0xe8, 0x70, 0x2b, 0xb3, 0x6, 0x9e, 0x71, 0xe9, 0x5c, 0xc4, 0xc9, 0x51, 0xe4, 0x7c, 0x93, 0xb, 0xbe, 0x26, 0x7d, 0xe5, 0x50, 0xc8, 0x27, 0xbf, 0xa, 0x92, 0xbc, 0x24, 0x91, 0x9, 0xe6, 0x7e, 0xcb, 0x53, 0x8, 0x90, 0x25, 0xbd, 0x52, 0xca, 0x7f, 0xe7, 0x23, 0xbb, 0xe, 0x96, 0x79, 0xe1, 0x54, 0xcc, 0x97, 0xf, 0xba, 0x22, 0xcd, 0x55, 0xe0, 0x78, 0x56, 0xce, 0x7b, 0xe3, 0xc, 0x94, 0x21, 0xb9, 0xe2, 0x7a, 0xcf, 0x57, 0xb8, 0x20, 0x95, 0xd, 0x8f, 0x17, 0xa2, 0x3a, 0xd5, 0x4d, 0xf8, 0x60, 0x3b, 0xa3, 0x16, 0x8e, 0x61, 0xf9, 0x4c, 0xd4, 0xfa, 0x62, 0xd7, 0x4f, 0xa0, 0x38, 0x8d, 0x15, 0x4e, 0xd6, 0x63, 0xfb, 0x14, 0x8c, 0x39, 0xa1, 0x65, 0xfd, 0x48, 0xd0, 0x3f, 0xa7, 0x12, 0x8a, 0xd1, 0x49, 0xfc, 0x64, 0x8b, 0x13, 0xa6, 0x3e, 0x10, 0x88, 0x3d, 0xa5, 0x4a, 0xd2, 0x67, 0xff, 0xa4, 0x3c, 0x89, 0x11, 0xfe, 0x66, 0xd3, 0x4b, 0x46, 0xde, 0x6b, 0xf3, 0x1c, 0x84, 0x31, 0xa9, 0xf2, 0x6a, 0xdf, 0x47, 0xa8, 0x30, 0x85, 0x1d, 0x33, 0xab, 0x1e, 0x86, 0x69, 0xf1, 0x44, 0xdc, 0x87, 0x1f, 0xaa, 0x32, 0xdd, 0x45, 0xf0, 0x68, 0xac, 0x34, 0x81, 0x19, 0xf6, 0x6e, 0xdb, 0x43, 0x18, 0x80, 0x35, 0xad, 0x42, 0xda, 0x6f, 0xf7, 0xd9, 0x41, 0xf4, 0x6c, 0x83, 0x1b, 0xae, 0x36, 0x6d, 0xf5, 0x40, 0xd8, 0x37, 0xaf, 0x1a, 0x82}, - {0x0, 0x99, 0x2f, 0xb6, 0x5e, 0xc7, 0x71, 0xe8, 0xbc, 0x25, 0x93, 0xa, 0xe2, 0x7b, 0xcd, 0x54, 0x65, 0xfc, 0x4a, 0xd3, 0x3b, 0xa2, 0x14, 0x8d, 0xd9, 0x40, 0xf6, 0x6f, 0x87, 0x1e, 0xa8, 0x31, 0xca, 0x53, 0xe5, 0x7c, 0x94, 0xd, 0xbb, 0x22, 0x76, 0xef, 0x59, 0xc0, 0x28, 0xb1, 0x7, 0x9e, 0xaf, 0x36, 0x80, 0x19, 0xf1, 0x68, 0xde, 0x47, 0x13, 0x8a, 0x3c, 0xa5, 0x4d, 0xd4, 0x62, 0xfb, 0x89, 0x10, 0xa6, 0x3f, 0xd7, 0x4e, 0xf8, 0x61, 0x35, 0xac, 0x1a, 0x83, 0x6b, 0xf2, 0x44, 0xdd, 0xec, 0x75, 0xc3, 0x5a, 0xb2, 0x2b, 0x9d, 0x4, 0x50, 0xc9, 0x7f, 0xe6, 0xe, 0x97, 0x21, 0xb8, 0x43, 0xda, 0x6c, 0xf5, 0x1d, 0x84, 0x32, 0xab, 0xff, 0x66, 0xd0, 0x49, 0xa1, 0x38, 0x8e, 0x17, 0x26, 0xbf, 0x9, 0x90, 0x78, 0xe1, 0x57, 0xce, 0x9a, 0x3, 0xb5, 0x2c, 0xc4, 0x5d, 0xeb, 0x72, 0xf, 0x96, 0x20, 0xb9, 0x51, 0xc8, 0x7e, 0xe7, 0xb3, 0x2a, 0x9c, 0x5, 0xed, 0x74, 0xc2, 0x5b, 0x6a, 0xf3, 0x45, 0xdc, 0x34, 0xad, 0x1b, 0x82, 0xd6, 0x4f, 0xf9, 0x60, 0x88, 0x11, 0xa7, 0x3e, 0xc5, 0x5c, 0xea, 0x73, 0x9b, 0x2, 0xb4, 0x2d, 0x79, 0xe0, 0x56, 0xcf, 0x27, 0xbe, 0x8, 0x91, 0xa0, 0x39, 0x8f, 0x16, 0xfe, 0x67, 0xd1, 0x48, 0x1c, 0x85, 0x33, 0xaa, 0x42, 0xdb, 0x6d, 0xf4, 0x86, 0x1f, 0xa9, 0x30, 0xd8, 0x41, 0xf7, 0x6e, 0x3a, 0xa3, 0x15, 0x8c, 0x64, 0xfd, 0x4b, 0xd2, 0xe3, 0x7a, 0xcc, 0x55, 0xbd, 0x24, 0x92, 0xb, 0x5f, 0xc6, 0x70, 0xe9, 0x1, 0x98, 0x2e, 0xb7, 0x4c, 0xd5, 0x63, 0xfa, 0x12, 0x8b, 0x3d, 0xa4, 0xf0, 0x69, 0xdf, 0x46, 0xae, 0x37, 0x81, 0x18, 0x29, 0xb0, 0x6, 0x9f, 0x77, 0xee, 0x58, 0xc1, 0x95, 0xc, 0xba, 0x23, 0xcb, 0x52, 0xe4, 0x7d}, - {0x0, 0x9a, 0x29, 0xb3, 0x52, 0xc8, 0x7b, 0xe1, 0xa4, 0x3e, 0x8d, 0x17, 0xf6, 0x6c, 0xdf, 0x45, 0x55, 0xcf, 0x7c, 0xe6, 0x7, 0x9d, 0x2e, 0xb4, 0xf1, 0x6b, 0xd8, 0x42, 0xa3, 0x39, 0x8a, 0x10, 0xaa, 0x30, 0x83, 0x19, 0xf8, 0x62, 0xd1, 0x4b, 0xe, 0x94, 0x27, 0xbd, 0x5c, 0xc6, 0x75, 0xef, 0xff, 0x65, 0xd6, 0x4c, 0xad, 0x37, 0x84, 0x1e, 0x5b, 0xc1, 0x72, 0xe8, 0x9, 0x93, 0x20, 0xba, 0x49, 0xd3, 0x60, 0xfa, 0x1b, 0x81, 0x32, 0xa8, 0xed, 0x77, 0xc4, 0x5e, 0xbf, 0x25, 0x96, 0xc, 0x1c, 0x86, 0x35, 0xaf, 0x4e, 0xd4, 0x67, 0xfd, 0xb8, 0x22, 0x91, 0xb, 0xea, 0x70, 0xc3, 0x59, 0xe3, 0x79, 0xca, 0x50, 0xb1, 0x2b, 0x98, 0x2, 0x47, 0xdd, 0x6e, 0xf4, 0x15, 0x8f, 0x3c, 0xa6, 0xb6, 0x2c, 0x9f, 0x5, 0xe4, 0x7e, 0xcd, 0x57, 0x12, 0x88, 0x3b, 0xa1, 0x40, 0xda, 0x69, 0xf3, 0x92, 0x8, 0xbb, 0x21, 0xc0, 0x5a, 0xe9, 0x73, 0x36, 0xac, 0x1f, 0x85, 0x64, 0xfe, 0x4d, 0xd7, 0xc7, 0x5d, 0xee, 0x74, 0x95, 0xf, 0xbc, 0x26, 0x63, 0xf9, 0x4a, 0xd0, 0x31, 0xab, 0x18, 0x82, 0x38, 0xa2, 0x11, 0x8b, 0x6a, 0xf0, 0x43, 0xd9, 0x9c, 0x6, 0xb5, 0x2f, 0xce, 0x54, 0xe7, 0x7d, 0x6d, 0xf7, 0x44, 0xde, 0x3f, 0xa5, 0x16, 0x8c, 0xc9, 0x53, 0xe0, 0x7a, 0x9b, 0x1, 0xb2, 0x28, 0xdb, 0x41, 0xf2, 0x68, 0x89, 0x13, 0xa0, 0x3a, 0x7f, 0xe5, 0x56, 0xcc, 0x2d, 0xb7, 0x4, 0x9e, 0x8e, 0x14, 0xa7, 0x3d, 0xdc, 0x46, 0xf5, 0x6f, 0x2a, 0xb0, 0x3, 0x99, 0x78, 0xe2, 0x51, 0xcb, 0x71, 0xeb, 0x58, 0xc2, 0x23, 0xb9, 0xa, 0x90, 0xd5, 0x4f, 0xfc, 0x66, 0x87, 0x1d, 0xae, 0x34, 0x24, 0xbe, 0xd, 0x97, 0x76, 0xec, 0x5f, 0xc5, 0x80, 0x1a, 0xa9, 0x33, 0xd2, 0x48, 0xfb, 0x61}, - {0x0, 0x9b, 0x2b, 0xb0, 0x56, 0xcd, 0x7d, 0xe6, 0xac, 0x37, 0x87, 0x1c, 0xfa, 0x61, 0xd1, 0x4a, 0x45, 0xde, 0x6e, 0xf5, 0x13, 0x88, 0x38, 0xa3, 0xe9, 0x72, 0xc2, 0x59, 0xbf, 0x24, 0x94, 0xf, 0x8a, 0x11, 0xa1, 0x3a, 0xdc, 0x47, 0xf7, 0x6c, 0x26, 0xbd, 0xd, 0x96, 0x70, 0xeb, 0x5b, 0xc0, 0xcf, 0x54, 0xe4, 0x7f, 0x99, 0x2, 0xb2, 0x29, 0x63, 0xf8, 0x48, 0xd3, 0x35, 0xae, 0x1e, 0x85, 0x9, 0x92, 0x22, 0xb9, 0x5f, 0xc4, 0x74, 0xef, 0xa5, 0x3e, 0x8e, 0x15, 0xf3, 0x68, 0xd8, 0x43, 0x4c, 0xd7, 0x67, 0xfc, 0x1a, 0x81, 0x31, 0xaa, 0xe0, 0x7b, 0xcb, 0x50, 0xb6, 0x2d, 0x9d, 0x6, 0x83, 0x18, 0xa8, 0x33, 0xd5, 0x4e, 0xfe, 0x65, 0x2f, 0xb4, 0x4, 0x9f, 0x79, 0xe2, 0x52, 0xc9, 0xc6, 0x5d, 0xed, 0x76, 0x90, 0xb, 0xbb, 0x20, 0x6a, 0xf1, 0x41, 0xda, 0x3c, 0xa7, 0x17, 0x8c, 0x12, 0x89, 0x39, 0xa2, 0x44, 0xdf, 0x6f, 0xf4, 0xbe, 0x25, 0x95, 0xe, 0xe8, 0x73, 0xc3, 0x58, 0x57, 0xcc, 0x7c, 0xe7, 0x1, 0x9a, 0x2a, 0xb1, 0xfb, 0x60, 0xd0, 0x4b, 0xad, 0x36, 0x86, 0x1d, 0x98, 0x3, 0xb3, 0x28, 0xce, 0x55, 0xe5, 0x7e, 0x34, 0xaf, 0x1f, 0x84, 0x62, 0xf9, 0x49, 0xd2, 0xdd, 0x46, 0xf6, 0x6d, 0x8b, 0x10, 0xa0, 0x3b, 0x71, 0xea, 0x5a, 0xc1, 0x27, 0xbc, 0xc, 0x97, 0x1b, 0x80, 0x30, 0xab, 0x4d, 0xd6, 0x66, 0xfd, 0xb7, 0x2c, 0x9c, 0x7, 0xe1, 0x7a, 0xca, 0x51, 0x5e, 0xc5, 0x75, 0xee, 0x8, 0x93, 0x23, 0xb8, 0xf2, 0x69, 0xd9, 0x42, 0xa4, 0x3f, 0x8f, 0x14, 0x91, 0xa, 0xba, 0x21, 0xc7, 0x5c, 0xec, 0x77, 0x3d, 0xa6, 0x16, 0x8d, 0x6b, 0xf0, 0x40, 0xdb, 0xd4, 0x4f, 0xff, 0x64, 0x82, 0x19, 0xa9, 0x32, 0x78, 0xe3, 0x53, 0xc8, 0x2e, 0xb5, 0x5, 0x9e}, - {0x0, 0x9c, 0x25, 0xb9, 0x4a, 0xd6, 0x6f, 0xf3, 0x94, 0x8, 0xb1, 0x2d, 0xde, 0x42, 0xfb, 0x67, 0x35, 0xa9, 0x10, 0x8c, 0x7f, 0xe3, 0x5a, 0xc6, 0xa1, 0x3d, 0x84, 0x18, 0xeb, 0x77, 0xce, 0x52, 0x6a, 0xf6, 0x4f, 0xd3, 0x20, 0xbc, 0x5, 0x99, 0xfe, 0x62, 0xdb, 0x47, 0xb4, 0x28, 0x91, 0xd, 0x5f, 0xc3, 0x7a, 0xe6, 0x15, 0x89, 0x30, 0xac, 0xcb, 0x57, 0xee, 0x72, 0x81, 0x1d, 0xa4, 0x38, 0xd4, 0x48, 0xf1, 0x6d, 0x9e, 0x2, 0xbb, 0x27, 0x40, 0xdc, 0x65, 0xf9, 0xa, 0x96, 0x2f, 0xb3, 0xe1, 0x7d, 0xc4, 0x58, 0xab, 0x37, 0x8e, 0x12, 0x75, 0xe9, 0x50, 0xcc, 0x3f, 0xa3, 0x1a, 0x86, 0xbe, 0x22, 0x9b, 0x7, 0xf4, 0x68, 0xd1, 0x4d, 0x2a, 0xb6, 0xf, 0x93, 0x60, 0xfc, 0x45, 0xd9, 0x8b, 0x17, 0xae, 0x32, 0xc1, 0x5d, 0xe4, 0x78, 0x1f, 0x83, 0x3a, 0xa6, 0x55, 0xc9, 0x70, 0xec, 0xb5, 0x29, 0x90, 0xc, 0xff, 0x63, 0xda, 0x46, 0x21, 0xbd, 0x4, 0x98, 0x6b, 0xf7, 0x4e, 0xd2, 0x80, 0x1c, 0xa5, 0x39, 0xca, 0x56, 0xef, 0x73, 0x14, 0x88, 0x31, 0xad, 0x5e, 0xc2, 0x7b, 0xe7, 0xdf, 0x43, 0xfa, 0x66, 0x95, 0x9, 0xb0, 0x2c, 0x4b, 0xd7, 0x6e, 0xf2, 0x1, 0x9d, 0x24, 0xb8, 0xea, 0x76, 0xcf, 0x53, 0xa0, 0x3c, 0x85, 0x19, 0x7e, 0xe2, 0x5b, 0xc7, 0x34, 0xa8, 0x11, 0x8d, 0x61, 0xfd, 0x44, 0xd8, 0x2b, 0xb7, 0xe, 0x92, 0xf5, 0x69, 0xd0, 0x4c, 0xbf, 0x23, 0x9a, 0x6, 0x54, 0xc8, 0x71, 0xed, 0x1e, 0x82, 0x3b, 0xa7, 0xc0, 0x5c, 0xe5, 0x79, 0x8a, 0x16, 0xaf, 0x33, 0xb, 0x97, 0x2e, 0xb2, 0x41, 0xdd, 0x64, 0xf8, 0x9f, 0x3, 0xba, 0x26, 0xd5, 0x49, 0xf0, 0x6c, 0x3e, 0xa2, 0x1b, 0x87, 0x74, 0xe8, 0x51, 0xcd, 0xaa, 0x36, 0x8f, 0x13, 0xe0, 0x7c, 0xc5, 0x59}, - {0x0, 0x9d, 0x27, 0xba, 0x4e, 0xd3, 0x69, 0xf4, 0x9c, 0x1, 0xbb, 0x26, 0xd2, 0x4f, 0xf5, 0x68, 0x25, 0xb8, 0x2, 0x9f, 0x6b, 0xf6, 0x4c, 0xd1, 0xb9, 0x24, 0x9e, 0x3, 0xf7, 0x6a, 0xd0, 0x4d, 0x4a, 0xd7, 0x6d, 0xf0, 0x4, 0x99, 0x23, 0xbe, 0xd6, 0x4b, 0xf1, 0x6c, 0x98, 0x5, 0xbf, 0x22, 0x6f, 0xf2, 0x48, 0xd5, 0x21, 0xbc, 0x6, 0x9b, 0xf3, 0x6e, 0xd4, 0x49, 0xbd, 0x20, 0x9a, 0x7, 0x94, 0x9, 0xb3, 0x2e, 0xda, 0x47, 0xfd, 0x60, 0x8, 0x95, 0x2f, 0xb2, 0x46, 0xdb, 0x61, 0xfc, 0xb1, 0x2c, 0x96, 0xb, 0xff, 0x62, 0xd8, 0x45, 0x2d, 0xb0, 0xa, 0x97, 0x63, 0xfe, 0x44, 0xd9, 0xde, 0x43, 0xf9, 0x64, 0x90, 0xd, 0xb7, 0x2a, 0x42, 0xdf, 0x65, 0xf8, 0xc, 0x91, 0x2b, 0xb6, 0xfb, 0x66, 0xdc, 0x41, 0xb5, 0x28, 0x92, 0xf, 0x67, 0xfa, 0x40, 0xdd, 0x29, 0xb4, 0xe, 0x93, 0x35, 0xa8, 0x12, 0x8f, 0x7b, 0xe6, 0x5c, 0xc1, 0xa9, 0x34, 0x8e, 0x13, 0xe7, 0x7a, 0xc0, 0x5d, 0x10, 0x8d, 0x37, 0xaa, 0x5e, 0xc3, 0x79, 0xe4, 0x8c, 0x11, 0xab, 0x36, 0xc2, 0x5f, 0xe5, 0x78, 0x7f, 0xe2, 0x58, 0xc5, 0x31, 0xac, 0x16, 0x8b, 0xe3, 0x7e, 0xc4, 0x59, 0xad, 0x30, 0x8a, 0x17, 0x5a, 0xc7, 0x7d, 0xe0, 0x14, 0x89, 0x33, 0xae, 0xc6, 0x5b, 0xe1, 0x7c, 0x88, 0x15, 0xaf, 0x32, 0xa1, 0x3c, 0x86, 0x1b, 0xef, 0x72, 0xc8, 0x55, 0x3d, 0xa0, 0x1a, 0x87, 0x73, 0xee, 0x54, 0xc9, 0x84, 0x19, 0xa3, 0x3e, 0xca, 0x57, 0xed, 0x70, 0x18, 0x85, 0x3f, 0xa2, 0x56, 0xcb, 0x71, 0xec, 0xeb, 0x76, 0xcc, 0x51, 0xa5, 0x38, 0x82, 0x1f, 0x77, 0xea, 0x50, 0xcd, 0x39, 0xa4, 0x1e, 0x83, 0xce, 0x53, 0xe9, 0x74, 0x80, 0x1d, 0xa7, 0x3a, 0x52, 0xcf, 0x75, 0xe8, 0x1c, 0x81, 0x3b, 0xa6}, - {0x0, 0x9e, 0x21, 0xbf, 0x42, 0xdc, 0x63, 0xfd, 0x84, 0x1a, 0xa5, 0x3b, 0xc6, 0x58, 0xe7, 0x79, 0x15, 0x8b, 0x34, 0xaa, 0x57, 0xc9, 0x76, 0xe8, 0x91, 0xf, 0xb0, 0x2e, 0xd3, 0x4d, 0xf2, 0x6c, 0x2a, 0xb4, 0xb, 0x95, 0x68, 0xf6, 0x49, 0xd7, 0xae, 0x30, 0x8f, 0x11, 0xec, 0x72, 0xcd, 0x53, 0x3f, 0xa1, 0x1e, 0x80, 0x7d, 0xe3, 0x5c, 0xc2, 0xbb, 0x25, 0x9a, 0x4, 0xf9, 0x67, 0xd8, 0x46, 0x54, 0xca, 0x75, 0xeb, 0x16, 0x88, 0x37, 0xa9, 0xd0, 0x4e, 0xf1, 0x6f, 0x92, 0xc, 0xb3, 0x2d, 0x41, 0xdf, 0x60, 0xfe, 0x3, 0x9d, 0x22, 0xbc, 0xc5, 0x5b, 0xe4, 0x7a, 0x87, 0x19, 0xa6, 0x38, 0x7e, 0xe0, 0x5f, 0xc1, 0x3c, 0xa2, 0x1d, 0x83, 0xfa, 0x64, 0xdb, 0x45, 0xb8, 0x26, 0x99, 0x7, 0x6b, 0xf5, 0x4a, 0xd4, 0x29, 0xb7, 0x8, 0x96, 0xef, 0x71, 0xce, 0x50, 0xad, 0x33, 0x8c, 0x12, 0xa8, 0x36, 0x89, 0x17, 0xea, 0x74, 0xcb, 0x55, 0x2c, 0xb2, 0xd, 0x93, 0x6e, 0xf0, 0x4f, 0xd1, 0xbd, 0x23, 0x9c, 0x2, 0xff, 0x61, 0xde, 0x40, 0x39, 0xa7, 0x18, 0x86, 0x7b, 0xe5, 0x5a, 0xc4, 0x82, 0x1c, 0xa3, 0x3d, 0xc0, 0x5e, 0xe1, 0x7f, 0x6, 0x98, 0x27, 0xb9, 0x44, 0xda, 0x65, 0xfb, 0x97, 0x9, 0xb6, 0x28, 0xd5, 0x4b, 0xf4, 0x6a, 0x13, 0x8d, 0x32, 0xac, 0x51, 0xcf, 0x70, 0xee, 0xfc, 0x62, 0xdd, 0x43, 0xbe, 0x20, 0x9f, 0x1, 0x78, 0xe6, 0x59, 0xc7, 0x3a, 0xa4, 0x1b, 0x85, 0xe9, 0x77, 0xc8, 0x56, 0xab, 0x35, 0x8a, 0x14, 0x6d, 0xf3, 0x4c, 0xd2, 0x2f, 0xb1, 0xe, 0x90, 0xd6, 0x48, 0xf7, 0x69, 0x94, 0xa, 0xb5, 0x2b, 0x52, 0xcc, 0x73, 0xed, 0x10, 0x8e, 0x31, 0xaf, 0xc3, 0x5d, 0xe2, 0x7c, 0x81, 0x1f, 0xa0, 0x3e, 0x47, 0xd9, 0x66, 0xf8, 0x5, 0x9b, 0x24, 0xba}, - {0x0, 0x9f, 0x23, 0xbc, 0x46, 0xd9, 0x65, 0xfa, 0x8c, 0x13, 0xaf, 0x30, 0xca, 0x55, 0xe9, 0x76, 0x5, 0x9a, 0x26, 0xb9, 0x43, 0xdc, 0x60, 0xff, 0x89, 0x16, 0xaa, 0x35, 0xcf, 0x50, 0xec, 0x73, 0xa, 0x95, 0x29, 0xb6, 0x4c, 0xd3, 0x6f, 0xf0, 0x86, 0x19, 0xa5, 0x3a, 0xc0, 0x5f, 0xe3, 0x7c, 0xf, 0x90, 0x2c, 0xb3, 0x49, 0xd6, 0x6a, 0xf5, 0x83, 0x1c, 0xa0, 0x3f, 0xc5, 0x5a, 0xe6, 0x79, 0x14, 0x8b, 0x37, 0xa8, 0x52, 0xcd, 0x71, 0xee, 0x98, 0x7, 0xbb, 0x24, 0xde, 0x41, 0xfd, 0x62, 0x11, 0x8e, 0x32, 0xad, 0x57, 0xc8, 0x74, 0xeb, 0x9d, 0x2, 0xbe, 0x21, 0xdb, 0x44, 0xf8, 0x67, 0x1e, 0x81, 0x3d, 0xa2, 0x58, 0xc7, 0x7b, 0xe4, 0x92, 0xd, 0xb1, 0x2e, 0xd4, 0x4b, 0xf7, 0x68, 0x1b, 0x84, 0x38, 0xa7, 0x5d, 0xc2, 0x7e, 0xe1, 0x97, 0x8, 0xb4, 0x2b, 0xd1, 0x4e, 0xf2, 0x6d, 0x28, 0xb7, 0xb, 0x94, 0x6e, 0xf1, 0x4d, 0xd2, 0xa4, 0x3b, 0x87, 0x18, 0xe2, 0x7d, 0xc1, 0x5e, 0x2d, 0xb2, 0xe, 0x91, 0x6b, 0xf4, 0x48, 0xd7, 0xa1, 0x3e, 0x82, 0x1d, 0xe7, 0x78, 0xc4, 0x5b, 0x22, 0xbd, 0x1, 0x9e, 0x64, 0xfb, 0x47, 0xd8, 0xae, 0x31, 0x8d, 0x12, 0xe8, 0x77, 0xcb, 0x54, 0x27, 0xb8, 0x4, 0x9b, 0x61, 0xfe, 0x42, 0xdd, 0xab, 0x34, 0x88, 0x17, 0xed, 0x72, 0xce, 0x51, 0x3c, 0xa3, 0x1f, 0x80, 0x7a, 0xe5, 0x59, 0xc6, 0xb0, 0x2f, 0x93, 0xc, 0xf6, 0x69, 0xd5, 0x4a, 0x39, 0xa6, 0x1a, 0x85, 0x7f, 0xe0, 0x5c, 0xc3, 0xb5, 0x2a, 0x96, 0x9, 0xf3, 0x6c, 0xd0, 0x4f, 0x36, 0xa9, 0x15, 0x8a, 0x70, 0xef, 0x53, 0xcc, 0xba, 0x25, 0x99, 0x6, 0xfc, 0x63, 0xdf, 0x40, 0x33, 0xac, 0x10, 0x8f, 0x75, 0xea, 0x56, 0xc9, 0xbf, 0x20, 0x9c, 0x3, 0xf9, 0x66, 0xda, 0x45}, - {0x0, 0xa0, 0x5d, 0xfd, 0xba, 0x1a, 0xe7, 0x47, 0x69, 0xc9, 0x34, 0x94, 0xd3, 0x73, 0x8e, 0x2e, 0xd2, 0x72, 0x8f, 0x2f, 0x68, 0xc8, 0x35, 0x95, 0xbb, 0x1b, 0xe6, 0x46, 0x1, 0xa1, 0x5c, 0xfc, 0xb9, 0x19, 0xe4, 0x44, 0x3, 0xa3, 0x5e, 0xfe, 0xd0, 0x70, 0x8d, 0x2d, 0x6a, 0xca, 0x37, 0x97, 0x6b, 0xcb, 0x36, 0x96, 0xd1, 0x71, 0x8c, 0x2c, 0x2, 0xa2, 0x5f, 0xff, 0xb8, 0x18, 0xe5, 0x45, 0x6f, 0xcf, 0x32, 0x92, 0xd5, 0x75, 0x88, 0x28, 0x6, 0xa6, 0x5b, 0xfb, 0xbc, 0x1c, 0xe1, 0x41, 0xbd, 0x1d, 0xe0, 0x40, 0x7, 0xa7, 0x5a, 0xfa, 0xd4, 0x74, 0x89, 0x29, 0x6e, 0xce, 0x33, 0x93, 0xd6, 0x76, 0x8b, 0x2b, 0x6c, 0xcc, 0x31, 0x91, 0xbf, 0x1f, 0xe2, 0x42, 0x5, 0xa5, 0x58, 0xf8, 0x4, 0xa4, 0x59, 0xf9, 0xbe, 0x1e, 0xe3, 0x43, 0x6d, 0xcd, 0x30, 0x90, 0xd7, 0x77, 0x8a, 0x2a, 0xde, 0x7e, 0x83, 0x23, 0x64, 0xc4, 0x39, 0x99, 0xb7, 0x17, 0xea, 0x4a, 0xd, 0xad, 0x50, 0xf0, 0xc, 0xac, 0x51, 0xf1, 0xb6, 0x16, 0xeb, 0x4b, 0x65, 0xc5, 0x38, 0x98, 0xdf, 0x7f, 0x82, 0x22, 0x67, 0xc7, 0x3a, 0x9a, 0xdd, 0x7d, 0x80, 0x20, 0xe, 0xae, 0x53, 0xf3, 0xb4, 0x14, 0xe9, 0x49, 0xb5, 0x15, 0xe8, 0x48, 0xf, 0xaf, 0x52, 0xf2, 0xdc, 0x7c, 0x81, 0x21, 0x66, 0xc6, 0x3b, 0x9b, 0xb1, 0x11, 0xec, 0x4c, 0xb, 0xab, 0x56, 0xf6, 0xd8, 0x78, 0x85, 0x25, 0x62, 0xc2, 0x3f, 0x9f, 0x63, 0xc3, 0x3e, 0x9e, 0xd9, 0x79, 0x84, 0x24, 0xa, 0xaa, 0x57, 0xf7, 0xb0, 0x10, 0xed, 0x4d, 0x8, 0xa8, 0x55, 0xf5, 0xb2, 0x12, 0xef, 0x4f, 0x61, 0xc1, 0x3c, 0x9c, 0xdb, 0x7b, 0x86, 0x26, 0xda, 0x7a, 0x87, 0x27, 0x60, 0xc0, 0x3d, 0x9d, 0xb3, 0x13, 0xee, 0x4e, 0x9, 0xa9, 0x54, 0xf4}, - {0x0, 0xa1, 0x5f, 0xfe, 0xbe, 0x1f, 0xe1, 0x40, 0x61, 0xc0, 0x3e, 0x9f, 0xdf, 0x7e, 0x80, 0x21, 0xc2, 0x63, 0x9d, 0x3c, 0x7c, 0xdd, 0x23, 0x82, 0xa3, 0x2, 0xfc, 0x5d, 0x1d, 0xbc, 0x42, 0xe3, 0x99, 0x38, 0xc6, 0x67, 0x27, 0x86, 0x78, 0xd9, 0xf8, 0x59, 0xa7, 0x6, 0x46, 0xe7, 0x19, 0xb8, 0x5b, 0xfa, 0x4, 0xa5, 0xe5, 0x44, 0xba, 0x1b, 0x3a, 0x9b, 0x65, 0xc4, 0x84, 0x25, 0xdb, 0x7a, 0x2f, 0x8e, 0x70, 0xd1, 0x91, 0x30, 0xce, 0x6f, 0x4e, 0xef, 0x11, 0xb0, 0xf0, 0x51, 0xaf, 0xe, 0xed, 0x4c, 0xb2, 0x13, 0x53, 0xf2, 0xc, 0xad, 0x8c, 0x2d, 0xd3, 0x72, 0x32, 0x93, 0x6d, 0xcc, 0xb6, 0x17, 0xe9, 0x48, 0x8, 0xa9, 0x57, 0xf6, 0xd7, 0x76, 0x88, 0x29, 0x69, 0xc8, 0x36, 0x97, 0x74, 0xd5, 0x2b, 0x8a, 0xca, 0x6b, 0x95, 0x34, 0x15, 0xb4, 0x4a, 0xeb, 0xab, 0xa, 0xf4, 0x55, 0x5e, 0xff, 0x1, 0xa0, 0xe0, 0x41, 0xbf, 0x1e, 0x3f, 0x9e, 0x60, 0xc1, 0x81, 0x20, 0xde, 0x7f, 0x9c, 0x3d, 0xc3, 0x62, 0x22, 0x83, 0x7d, 0xdc, 0xfd, 0x5c, 0xa2, 0x3, 0x43, 0xe2, 0x1c, 0xbd, 0xc7, 0x66, 0x98, 0x39, 0x79, 0xd8, 0x26, 0x87, 0xa6, 0x7, 0xf9, 0x58, 0x18, 0xb9, 0x47, 0xe6, 0x5, 0xa4, 0x5a, 0xfb, 0xbb, 0x1a, 0xe4, 0x45, 0x64, 0xc5, 0x3b, 0x9a, 0xda, 0x7b, 0x85, 0x24, 0x71, 0xd0, 0x2e, 0x8f, 0xcf, 0x6e, 0x90, 0x31, 0x10, 0xb1, 0x4f, 0xee, 0xae, 0xf, 0xf1, 0x50, 0xb3, 0x12, 0xec, 0x4d, 0xd, 0xac, 0x52, 0xf3, 0xd2, 0x73, 0x8d, 0x2c, 0x6c, 0xcd, 0x33, 0x92, 0xe8, 0x49, 0xb7, 0x16, 0x56, 0xf7, 0x9, 0xa8, 0x89, 0x28, 0xd6, 0x77, 0x37, 0x96, 0x68, 0xc9, 0x2a, 0x8b, 0x75, 0xd4, 0x94, 0x35, 0xcb, 0x6a, 0x4b, 0xea, 0x14, 0xb5, 0xf5, 0x54, 0xaa, 0xb}, - {0x0, 0xa2, 0x59, 0xfb, 0xb2, 0x10, 0xeb, 0x49, 0x79, 0xdb, 0x20, 0x82, 0xcb, 0x69, 0x92, 0x30, 0xf2, 0x50, 0xab, 0x9, 0x40, 0xe2, 0x19, 0xbb, 0x8b, 0x29, 0xd2, 0x70, 0x39, 0x9b, 0x60, 0xc2, 0xf9, 0x5b, 0xa0, 0x2, 0x4b, 0xe9, 0x12, 0xb0, 0x80, 0x22, 0xd9, 0x7b, 0x32, 0x90, 0x6b, 0xc9, 0xb, 0xa9, 0x52, 0xf0, 0xb9, 0x1b, 0xe0, 0x42, 0x72, 0xd0, 0x2b, 0x89, 0xc0, 0x62, 0x99, 0x3b, 0xef, 0x4d, 0xb6, 0x14, 0x5d, 0xff, 0x4, 0xa6, 0x96, 0x34, 0xcf, 0x6d, 0x24, 0x86, 0x7d, 0xdf, 0x1d, 0xbf, 0x44, 0xe6, 0xaf, 0xd, 0xf6, 0x54, 0x64, 0xc6, 0x3d, 0x9f, 0xd6, 0x74, 0x8f, 0x2d, 0x16, 0xb4, 0x4f, 0xed, 0xa4, 0x6, 0xfd, 0x5f, 0x6f, 0xcd, 0x36, 0x94, 0xdd, 0x7f, 0x84, 0x26, 0xe4, 0x46, 0xbd, 0x1f, 0x56, 0xf4, 0xf, 0xad, 0x9d, 0x3f, 0xc4, 0x66, 0x2f, 0x8d, 0x76, 0xd4, 0xc3, 0x61, 0x9a, 0x38, 0x71, 0xd3, 0x28, 0x8a, 0xba, 0x18, 0xe3, 0x41, 0x8, 0xaa, 0x51, 0xf3, 0x31, 0x93, 0x68, 0xca, 0x83, 0x21, 0xda, 0x78, 0x48, 0xea, 0x11, 0xb3, 0xfa, 0x58, 0xa3, 0x1, 0x3a, 0x98, 0x63, 0xc1, 0x88, 0x2a, 0xd1, 0x73, 0x43, 0xe1, 0x1a, 0xb8, 0xf1, 0x53, 0xa8, 0xa, 0xc8, 0x6a, 0x91, 0x33, 0x7a, 0xd8, 0x23, 0x81, 0xb1, 0x13, 0xe8, 0x4a, 0x3, 0xa1, 0x5a, 0xf8, 0x2c, 0x8e, 0x75, 0xd7, 0x9e, 0x3c, 0xc7, 0x65, 0x55, 0xf7, 0xc, 0xae, 0xe7, 0x45, 0xbe, 0x1c, 0xde, 0x7c, 0x87, 0x25, 0x6c, 0xce, 0x35, 0x97, 0xa7, 0x5, 0xfe, 0x5c, 0x15, 0xb7, 0x4c, 0xee, 0xd5, 0x77, 0x8c, 0x2e, 0x67, 0xc5, 0x3e, 0x9c, 0xac, 0xe, 0xf5, 0x57, 0x1e, 0xbc, 0x47, 0xe5, 0x27, 0x85, 0x7e, 0xdc, 0x95, 0x37, 0xcc, 0x6e, 0x5e, 0xfc, 0x7, 0xa5, 0xec, 0x4e, 0xb5, 0x17}, - {0x0, 0xa3, 0x5b, 0xf8, 0xb6, 0x15, 0xed, 0x4e, 0x71, 0xd2, 0x2a, 0x89, 0xc7, 0x64, 0x9c, 0x3f, 0xe2, 0x41, 0xb9, 0x1a, 0x54, 0xf7, 0xf, 0xac, 0x93, 0x30, 0xc8, 0x6b, 0x25, 0x86, 0x7e, 0xdd, 0xd9, 0x7a, 0x82, 0x21, 0x6f, 0xcc, 0x34, 0x97, 0xa8, 0xb, 0xf3, 0x50, 0x1e, 0xbd, 0x45, 0xe6, 0x3b, 0x98, 0x60, 0xc3, 0x8d, 0x2e, 0xd6, 0x75, 0x4a, 0xe9, 0x11, 0xb2, 0xfc, 0x5f, 0xa7, 0x4, 0xaf, 0xc, 0xf4, 0x57, 0x19, 0xba, 0x42, 0xe1, 0xde, 0x7d, 0x85, 0x26, 0x68, 0xcb, 0x33, 0x90, 0x4d, 0xee, 0x16, 0xb5, 0xfb, 0x58, 0xa0, 0x3, 0x3c, 0x9f, 0x67, 0xc4, 0x8a, 0x29, 0xd1, 0x72, 0x76, 0xd5, 0x2d, 0x8e, 0xc0, 0x63, 0x9b, 0x38, 0x7, 0xa4, 0x5c, 0xff, 0xb1, 0x12, 0xea, 0x49, 0x94, 0x37, 0xcf, 0x6c, 0x22, 0x81, 0x79, 0xda, 0xe5, 0x46, 0xbe, 0x1d, 0x53, 0xf0, 0x8, 0xab, 0x43, 0xe0, 0x18, 0xbb, 0xf5, 0x56, 0xae, 0xd, 0x32, 0x91, 0x69, 0xca, 0x84, 0x27, 0xdf, 0x7c, 0xa1, 0x2, 0xfa, 0x59, 0x17, 0xb4, 0x4c, 0xef, 0xd0, 0x73, 0x8b, 0x28, 0x66, 0xc5, 0x3d, 0x9e, 0x9a, 0x39, 0xc1, 0x62, 0x2c, 0x8f, 0x77, 0xd4, 0xeb, 0x48, 0xb0, 0x13, 0x5d, 0xfe, 0x6, 0xa5, 0x78, 0xdb, 0x23, 0x80, 0xce, 0x6d, 0x95, 0x36, 0x9, 0xaa, 0x52, 0xf1, 0xbf, 0x1c, 0xe4, 0x47, 0xec, 0x4f, 0xb7, 0x14, 0x5a, 0xf9, 0x1, 0xa2, 0x9d, 0x3e, 0xc6, 0x65, 0x2b, 0x88, 0x70, 0xd3, 0xe, 0xad, 0x55, 0xf6, 0xb8, 0x1b, 0xe3, 0x40, 0x7f, 0xdc, 0x24, 0x87, 0xc9, 0x6a, 0x92, 0x31, 0x35, 0x96, 0x6e, 0xcd, 0x83, 0x20, 0xd8, 0x7b, 0x44, 0xe7, 0x1f, 0xbc, 0xf2, 0x51, 0xa9, 0xa, 0xd7, 0x74, 0x8c, 0x2f, 0x61, 0xc2, 0x3a, 0x99, 0xa6, 0x5, 0xfd, 0x5e, 0x10, 0xb3, 0x4b, 0xe8}, - {0x0, 0xa4, 0x55, 0xf1, 0xaa, 0xe, 0xff, 0x5b, 0x49, 0xed, 0x1c, 0xb8, 0xe3, 0x47, 0xb6, 0x12, 0x92, 0x36, 0xc7, 0x63, 0x38, 0x9c, 0x6d, 0xc9, 0xdb, 0x7f, 0x8e, 0x2a, 0x71, 0xd5, 0x24, 0x80, 0x39, 0x9d, 0x6c, 0xc8, 0x93, 0x37, 0xc6, 0x62, 0x70, 0xd4, 0x25, 0x81, 0xda, 0x7e, 0x8f, 0x2b, 0xab, 0xf, 0xfe, 0x5a, 0x1, 0xa5, 0x54, 0xf0, 0xe2, 0x46, 0xb7, 0x13, 0x48, 0xec, 0x1d, 0xb9, 0x72, 0xd6, 0x27, 0x83, 0xd8, 0x7c, 0x8d, 0x29, 0x3b, 0x9f, 0x6e, 0xca, 0x91, 0x35, 0xc4, 0x60, 0xe0, 0x44, 0xb5, 0x11, 0x4a, 0xee, 0x1f, 0xbb, 0xa9, 0xd, 0xfc, 0x58, 0x3, 0xa7, 0x56, 0xf2, 0x4b, 0xef, 0x1e, 0xba, 0xe1, 0x45, 0xb4, 0x10, 0x2, 0xa6, 0x57, 0xf3, 0xa8, 0xc, 0xfd, 0x59, 0xd9, 0x7d, 0x8c, 0x28, 0x73, 0xd7, 0x26, 0x82, 0x90, 0x34, 0xc5, 0x61, 0x3a, 0x9e, 0x6f, 0xcb, 0xe4, 0x40, 0xb1, 0x15, 0x4e, 0xea, 0x1b, 0xbf, 0xad, 0x9, 0xf8, 0x5c, 0x7, 0xa3, 0x52, 0xf6, 0x76, 0xd2, 0x23, 0x87, 0xdc, 0x78, 0x89, 0x2d, 0x3f, 0x9b, 0x6a, 0xce, 0x95, 0x31, 0xc0, 0x64, 0xdd, 0x79, 0x88, 0x2c, 0x77, 0xd3, 0x22, 0x86, 0x94, 0x30, 0xc1, 0x65, 0x3e, 0x9a, 0x6b, 0xcf, 0x4f, 0xeb, 0x1a, 0xbe, 0xe5, 0x41, 0xb0, 0x14, 0x6, 0xa2, 0x53, 0xf7, 0xac, 0x8, 0xf9, 0x5d, 0x96, 0x32, 0xc3, 0x67, 0x3c, 0x98, 0x69, 0xcd, 0xdf, 0x7b, 0x8a, 0x2e, 0x75, 0xd1, 0x20, 0x84, 0x4, 0xa0, 0x51, 0xf5, 0xae, 0xa, 0xfb, 0x5f, 0x4d, 0xe9, 0x18, 0xbc, 0xe7, 0x43, 0xb2, 0x16, 0xaf, 0xb, 0xfa, 0x5e, 0x5, 0xa1, 0x50, 0xf4, 0xe6, 0x42, 0xb3, 0x17, 0x4c, 0xe8, 0x19, 0xbd, 0x3d, 0x99, 0x68, 0xcc, 0x97, 0x33, 0xc2, 0x66, 0x74, 0xd0, 0x21, 0x85, 0xde, 0x7a, 0x8b, 0x2f}, - {0x0, 0xa5, 0x57, 0xf2, 0xae, 0xb, 0xf9, 0x5c, 0x41, 0xe4, 0x16, 0xb3, 0xef, 0x4a, 0xb8, 0x1d, 0x82, 0x27, 0xd5, 0x70, 0x2c, 0x89, 0x7b, 0xde, 0xc3, 0x66, 0x94, 0x31, 0x6d, 0xc8, 0x3a, 0x9f, 0x19, 0xbc, 0x4e, 0xeb, 0xb7, 0x12, 0xe0, 0x45, 0x58, 0xfd, 0xf, 0xaa, 0xf6, 0x53, 0xa1, 0x4, 0x9b, 0x3e, 0xcc, 0x69, 0x35, 0x90, 0x62, 0xc7, 0xda, 0x7f, 0x8d, 0x28, 0x74, 0xd1, 0x23, 0x86, 0x32, 0x97, 0x65, 0xc0, 0x9c, 0x39, 0xcb, 0x6e, 0x73, 0xd6, 0x24, 0x81, 0xdd, 0x78, 0x8a, 0x2f, 0xb0, 0x15, 0xe7, 0x42, 0x1e, 0xbb, 0x49, 0xec, 0xf1, 0x54, 0xa6, 0x3, 0x5f, 0xfa, 0x8, 0xad, 0x2b, 0x8e, 0x7c, 0xd9, 0x85, 0x20, 0xd2, 0x77, 0x6a, 0xcf, 0x3d, 0x98, 0xc4, 0x61, 0x93, 0x36, 0xa9, 0xc, 0xfe, 0x5b, 0x7, 0xa2, 0x50, 0xf5, 0xe8, 0x4d, 0xbf, 0x1a, 0x46, 0xe3, 0x11, 0xb4, 0x64, 0xc1, 0x33, 0x96, 0xca, 0x6f, 0x9d, 0x38, 0x25, 0x80, 0x72, 0xd7, 0x8b, 0x2e, 0xdc, 0x79, 0xe6, 0x43, 0xb1, 0x14, 0x48, 0xed, 0x1f, 0xba, 0xa7, 0x2, 0xf0, 0x55, 0x9, 0xac, 0x5e, 0xfb, 0x7d, 0xd8, 0x2a, 0x8f, 0xd3, 0x76, 0x84, 0x21, 0x3c, 0x99, 0x6b, 0xce, 0x92, 0x37, 0xc5, 0x60, 0xff, 0x5a, 0xa8, 0xd, 0x51, 0xf4, 0x6, 0xa3, 0xbe, 0x1b, 0xe9, 0x4c, 0x10, 0xb5, 0x47, 0xe2, 0x56, 0xf3, 0x1, 0xa4, 0xf8, 0x5d, 0xaf, 0xa, 0x17, 0xb2, 0x40, 0xe5, 0xb9, 0x1c, 0xee, 0x4b, 0xd4, 0x71, 0x83, 0x26, 0x7a, 0xdf, 0x2d, 0x88, 0x95, 0x30, 0xc2, 0x67, 0x3b, 0x9e, 0x6c, 0xc9, 0x4f, 0xea, 0x18, 0xbd, 0xe1, 0x44, 0xb6, 0x13, 0xe, 0xab, 0x59, 0xfc, 0xa0, 0x5, 0xf7, 0x52, 0xcd, 0x68, 0x9a, 0x3f, 0x63, 0xc6, 0x34, 0x91, 0x8c, 0x29, 0xdb, 0x7e, 0x22, 0x87, 0x75, 0xd0}, - {0x0, 0xa6, 0x51, 0xf7, 0xa2, 0x4, 0xf3, 0x55, 0x59, 0xff, 0x8, 0xae, 0xfb, 0x5d, 0xaa, 0xc, 0xb2, 0x14, 0xe3, 0x45, 0x10, 0xb6, 0x41, 0xe7, 0xeb, 0x4d, 0xba, 0x1c, 0x49, 0xef, 0x18, 0xbe, 0x79, 0xdf, 0x28, 0x8e, 0xdb, 0x7d, 0x8a, 0x2c, 0x20, 0x86, 0x71, 0xd7, 0x82, 0x24, 0xd3, 0x75, 0xcb, 0x6d, 0x9a, 0x3c, 0x69, 0xcf, 0x38, 0x9e, 0x92, 0x34, 0xc3, 0x65, 0x30, 0x96, 0x61, 0xc7, 0xf2, 0x54, 0xa3, 0x5, 0x50, 0xf6, 0x1, 0xa7, 0xab, 0xd, 0xfa, 0x5c, 0x9, 0xaf, 0x58, 0xfe, 0x40, 0xe6, 0x11, 0xb7, 0xe2, 0x44, 0xb3, 0x15, 0x19, 0xbf, 0x48, 0xee, 0xbb, 0x1d, 0xea, 0x4c, 0x8b, 0x2d, 0xda, 0x7c, 0x29, 0x8f, 0x78, 0xde, 0xd2, 0x74, 0x83, 0x25, 0x70, 0xd6, 0x21, 0x87, 0x39, 0x9f, 0x68, 0xce, 0x9b, 0x3d, 0xca, 0x6c, 0x60, 0xc6, 0x31, 0x97, 0xc2, 0x64, 0x93, 0x35, 0xf9, 0x5f, 0xa8, 0xe, 0x5b, 0xfd, 0xa, 0xac, 0xa0, 0x6, 0xf1, 0x57, 0x2, 0xa4, 0x53, 0xf5, 0x4b, 0xed, 0x1a, 0xbc, 0xe9, 0x4f, 0xb8, 0x1e, 0x12, 0xb4, 0x43, 0xe5, 0xb0, 0x16, 0xe1, 0x47, 0x80, 0x26, 0xd1, 0x77, 0x22, 0x84, 0x73, 0xd5, 0xd9, 0x7f, 0x88, 0x2e, 0x7b, 0xdd, 0x2a, 0x8c, 0x32, 0x94, 0x63, 0xc5, 0x90, 0x36, 0xc1, 0x67, 0x6b, 0xcd, 0x3a, 0x9c, 0xc9, 0x6f, 0x98, 0x3e, 0xb, 0xad, 0x5a, 0xfc, 0xa9, 0xf, 0xf8, 0x5e, 0x52, 0xf4, 0x3, 0xa5, 0xf0, 0x56, 0xa1, 0x7, 0xb9, 0x1f, 0xe8, 0x4e, 0x1b, 0xbd, 0x4a, 0xec, 0xe0, 0x46, 0xb1, 0x17, 0x42, 0xe4, 0x13, 0xb5, 0x72, 0xd4, 0x23, 0x85, 0xd0, 0x76, 0x81, 0x27, 0x2b, 0x8d, 0x7a, 0xdc, 0x89, 0x2f, 0xd8, 0x7e, 0xc0, 0x66, 0x91, 0x37, 0x62, 0xc4, 0x33, 0x95, 0x99, 0x3f, 0xc8, 0x6e, 0x3b, 0x9d, 0x6a, 0xcc}, - {0x0, 0xa7, 0x53, 0xf4, 0xa6, 0x1, 0xf5, 0x52, 0x51, 0xf6, 0x2, 0xa5, 0xf7, 0x50, 0xa4, 0x3, 0xa2, 0x5, 0xf1, 0x56, 0x4, 0xa3, 0x57, 0xf0, 0xf3, 0x54, 0xa0, 0x7, 0x55, 0xf2, 0x6, 0xa1, 0x59, 0xfe, 0xa, 0xad, 0xff, 0x58, 0xac, 0xb, 0x8, 0xaf, 0x5b, 0xfc, 0xae, 0x9, 0xfd, 0x5a, 0xfb, 0x5c, 0xa8, 0xf, 0x5d, 0xfa, 0xe, 0xa9, 0xaa, 0xd, 0xf9, 0x5e, 0xc, 0xab, 0x5f, 0xf8, 0xb2, 0x15, 0xe1, 0x46, 0x14, 0xb3, 0x47, 0xe0, 0xe3, 0x44, 0xb0, 0x17, 0x45, 0xe2, 0x16, 0xb1, 0x10, 0xb7, 0x43, 0xe4, 0xb6, 0x11, 0xe5, 0x42, 0x41, 0xe6, 0x12, 0xb5, 0xe7, 0x40, 0xb4, 0x13, 0xeb, 0x4c, 0xb8, 0x1f, 0x4d, 0xea, 0x1e, 0xb9, 0xba, 0x1d, 0xe9, 0x4e, 0x1c, 0xbb, 0x4f, 0xe8, 0x49, 0xee, 0x1a, 0xbd, 0xef, 0x48, 0xbc, 0x1b, 0x18, 0xbf, 0x4b, 0xec, 0xbe, 0x19, 0xed, 0x4a, 0x79, 0xde, 0x2a, 0x8d, 0xdf, 0x78, 0x8c, 0x2b, 0x28, 0x8f, 0x7b, 0xdc, 0x8e, 0x29, 0xdd, 0x7a, 0xdb, 0x7c, 0x88, 0x2f, 0x7d, 0xda, 0x2e, 0x89, 0x8a, 0x2d, 0xd9, 0x7e, 0x2c, 0x8b, 0x7f, 0xd8, 0x20, 0x87, 0x73, 0xd4, 0x86, 0x21, 0xd5, 0x72, 0x71, 0xd6, 0x22, 0x85, 0xd7, 0x70, 0x84, 0x23, 0x82, 0x25, 0xd1, 0x76, 0x24, 0x83, 0x77, 0xd0, 0xd3, 0x74, 0x80, 0x27, 0x75, 0xd2, 0x26, 0x81, 0xcb, 0x6c, 0x98, 0x3f, 0x6d, 0xca, 0x3e, 0x99, 0x9a, 0x3d, 0xc9, 0x6e, 0x3c, 0x9b, 0x6f, 0xc8, 0x69, 0xce, 0x3a, 0x9d, 0xcf, 0x68, 0x9c, 0x3b, 0x38, 0x9f, 0x6b, 0xcc, 0x9e, 0x39, 0xcd, 0x6a, 0x92, 0x35, 0xc1, 0x66, 0x34, 0x93, 0x67, 0xc0, 0xc3, 0x64, 0x90, 0x37, 0x65, 0xc2, 0x36, 0x91, 0x30, 0x97, 0x63, 0xc4, 0x96, 0x31, 0xc5, 0x62, 0x61, 0xc6, 0x32, 0x95, 0xc7, 0x60, 0x94, 0x33}, - {0x0, 0xa8, 0x4d, 0xe5, 0x9a, 0x32, 0xd7, 0x7f, 0x29, 0x81, 0x64, 0xcc, 0xb3, 0x1b, 0xfe, 0x56, 0x52, 0xfa, 0x1f, 0xb7, 0xc8, 0x60, 0x85, 0x2d, 0x7b, 0xd3, 0x36, 0x9e, 0xe1, 0x49, 0xac, 0x4, 0xa4, 0xc, 0xe9, 0x41, 0x3e, 0x96, 0x73, 0xdb, 0x8d, 0x25, 0xc0, 0x68, 0x17, 0xbf, 0x5a, 0xf2, 0xf6, 0x5e, 0xbb, 0x13, 0x6c, 0xc4, 0x21, 0x89, 0xdf, 0x77, 0x92, 0x3a, 0x45, 0xed, 0x8, 0xa0, 0x55, 0xfd, 0x18, 0xb0, 0xcf, 0x67, 0x82, 0x2a, 0x7c, 0xd4, 0x31, 0x99, 0xe6, 0x4e, 0xab, 0x3, 0x7, 0xaf, 0x4a, 0xe2, 0x9d, 0x35, 0xd0, 0x78, 0x2e, 0x86, 0x63, 0xcb, 0xb4, 0x1c, 0xf9, 0x51, 0xf1, 0x59, 0xbc, 0x14, 0x6b, 0xc3, 0x26, 0x8e, 0xd8, 0x70, 0x95, 0x3d, 0x42, 0xea, 0xf, 0xa7, 0xa3, 0xb, 0xee, 0x46, 0x39, 0x91, 0x74, 0xdc, 0x8a, 0x22, 0xc7, 0x6f, 0x10, 0xb8, 0x5d, 0xf5, 0xaa, 0x2, 0xe7, 0x4f, 0x30, 0x98, 0x7d, 0xd5, 0x83, 0x2b, 0xce, 0x66, 0x19, 0xb1, 0x54, 0xfc, 0xf8, 0x50, 0xb5, 0x1d, 0x62, 0xca, 0x2f, 0x87, 0xd1, 0x79, 0x9c, 0x34, 0x4b, 0xe3, 0x6, 0xae, 0xe, 0xa6, 0x43, 0xeb, 0x94, 0x3c, 0xd9, 0x71, 0x27, 0x8f, 0x6a, 0xc2, 0xbd, 0x15, 0xf0, 0x58, 0x5c, 0xf4, 0x11, 0xb9, 0xc6, 0x6e, 0x8b, 0x23, 0x75, 0xdd, 0x38, 0x90, 0xef, 0x47, 0xa2, 0xa, 0xff, 0x57, 0xb2, 0x1a, 0x65, 0xcd, 0x28, 0x80, 0xd6, 0x7e, 0x9b, 0x33, 0x4c, 0xe4, 0x1, 0xa9, 0xad, 0x5, 0xe0, 0x48, 0x37, 0x9f, 0x7a, 0xd2, 0x84, 0x2c, 0xc9, 0x61, 0x1e, 0xb6, 0x53, 0xfb, 0x5b, 0xf3, 0x16, 0xbe, 0xc1, 0x69, 0x8c, 0x24, 0x72, 0xda, 0x3f, 0x97, 0xe8, 0x40, 0xa5, 0xd, 0x9, 0xa1, 0x44, 0xec, 0x93, 0x3b, 0xde, 0x76, 0x20, 0x88, 0x6d, 0xc5, 0xba, 0x12, 0xf7, 0x5f}, - {0x0, 0xa9, 0x4f, 0xe6, 0x9e, 0x37, 0xd1, 0x78, 0x21, 0x88, 0x6e, 0xc7, 0xbf, 0x16, 0xf0, 0x59, 0x42, 0xeb, 0xd, 0xa4, 0xdc, 0x75, 0x93, 0x3a, 0x63, 0xca, 0x2c, 0x85, 0xfd, 0x54, 0xb2, 0x1b, 0x84, 0x2d, 0xcb, 0x62, 0x1a, 0xb3, 0x55, 0xfc, 0xa5, 0xc, 0xea, 0x43, 0x3b, 0x92, 0x74, 0xdd, 0xc6, 0x6f, 0x89, 0x20, 0x58, 0xf1, 0x17, 0xbe, 0xe7, 0x4e, 0xa8, 0x1, 0x79, 0xd0, 0x36, 0x9f, 0x15, 0xbc, 0x5a, 0xf3, 0x8b, 0x22, 0xc4, 0x6d, 0x34, 0x9d, 0x7b, 0xd2, 0xaa, 0x3, 0xe5, 0x4c, 0x57, 0xfe, 0x18, 0xb1, 0xc9, 0x60, 0x86, 0x2f, 0x76, 0xdf, 0x39, 0x90, 0xe8, 0x41, 0xa7, 0xe, 0x91, 0x38, 0xde, 0x77, 0xf, 0xa6, 0x40, 0xe9, 0xb0, 0x19, 0xff, 0x56, 0x2e, 0x87, 0x61, 0xc8, 0xd3, 0x7a, 0x9c, 0x35, 0x4d, 0xe4, 0x2, 0xab, 0xf2, 0x5b, 0xbd, 0x14, 0x6c, 0xc5, 0x23, 0x8a, 0x2a, 0x83, 0x65, 0xcc, 0xb4, 0x1d, 0xfb, 0x52, 0xb, 0xa2, 0x44, 0xed, 0x95, 0x3c, 0xda, 0x73, 0x68, 0xc1, 0x27, 0x8e, 0xf6, 0x5f, 0xb9, 0x10, 0x49, 0xe0, 0x6, 0xaf, 0xd7, 0x7e, 0x98, 0x31, 0xae, 0x7, 0xe1, 0x48, 0x30, 0x99, 0x7f, 0xd6, 0x8f, 0x26, 0xc0, 0x69, 0x11, 0xb8, 0x5e, 0xf7, 0xec, 0x45, 0xa3, 0xa, 0x72, 0xdb, 0x3d, 0x94, 0xcd, 0x64, 0x82, 0x2b, 0x53, 0xfa, 0x1c, 0xb5, 0x3f, 0x96, 0x70, 0xd9, 0xa1, 0x8, 0xee, 0x47, 0x1e, 0xb7, 0x51, 0xf8, 0x80, 0x29, 0xcf, 0x66, 0x7d, 0xd4, 0x32, 0x9b, 0xe3, 0x4a, 0xac, 0x5, 0x5c, 0xf5, 0x13, 0xba, 0xc2, 0x6b, 0x8d, 0x24, 0xbb, 0x12, 0xf4, 0x5d, 0x25, 0x8c, 0x6a, 0xc3, 0x9a, 0x33, 0xd5, 0x7c, 0x4, 0xad, 0x4b, 0xe2, 0xf9, 0x50, 0xb6, 0x1f, 0x67, 0xce, 0x28, 0x81, 0xd8, 0x71, 0x97, 0x3e, 0x46, 0xef, 0x9, 0xa0}, - {0x0, 0xaa, 0x49, 0xe3, 0x92, 0x38, 0xdb, 0x71, 0x39, 0x93, 0x70, 0xda, 0xab, 0x1, 0xe2, 0x48, 0x72, 0xd8, 0x3b, 0x91, 0xe0, 0x4a, 0xa9, 0x3, 0x4b, 0xe1, 0x2, 0xa8, 0xd9, 0x73, 0x90, 0x3a, 0xe4, 0x4e, 0xad, 0x7, 0x76, 0xdc, 0x3f, 0x95, 0xdd, 0x77, 0x94, 0x3e, 0x4f, 0xe5, 0x6, 0xac, 0x96, 0x3c, 0xdf, 0x75, 0x4, 0xae, 0x4d, 0xe7, 0xaf, 0x5, 0xe6, 0x4c, 0x3d, 0x97, 0x74, 0xde, 0xd5, 0x7f, 0x9c, 0x36, 0x47, 0xed, 0xe, 0xa4, 0xec, 0x46, 0xa5, 0xf, 0x7e, 0xd4, 0x37, 0x9d, 0xa7, 0xd, 0xee, 0x44, 0x35, 0x9f, 0x7c, 0xd6, 0x9e, 0x34, 0xd7, 0x7d, 0xc, 0xa6, 0x45, 0xef, 0x31, 0x9b, 0x78, 0xd2, 0xa3, 0x9, 0xea, 0x40, 0x8, 0xa2, 0x41, 0xeb, 0x9a, 0x30, 0xd3, 0x79, 0x43, 0xe9, 0xa, 0xa0, 0xd1, 0x7b, 0x98, 0x32, 0x7a, 0xd0, 0x33, 0x99, 0xe8, 0x42, 0xa1, 0xb, 0xb7, 0x1d, 0xfe, 0x54, 0x25, 0x8f, 0x6c, 0xc6, 0x8e, 0x24, 0xc7, 0x6d, 0x1c, 0xb6, 0x55, 0xff, 0xc5, 0x6f, 0x8c, 0x26, 0x57, 0xfd, 0x1e, 0xb4, 0xfc, 0x56, 0xb5, 0x1f, 0x6e, 0xc4, 0x27, 0x8d, 0x53, 0xf9, 0x1a, 0xb0, 0xc1, 0x6b, 0x88, 0x22, 0x6a, 0xc0, 0x23, 0x89, 0xf8, 0x52, 0xb1, 0x1b, 0x21, 0x8b, 0x68, 0xc2, 0xb3, 0x19, 0xfa, 0x50, 0x18, 0xb2, 0x51, 0xfb, 0x8a, 0x20, 0xc3, 0x69, 0x62, 0xc8, 0x2b, 0x81, 0xf0, 0x5a, 0xb9, 0x13, 0x5b, 0xf1, 0x12, 0xb8, 0xc9, 0x63, 0x80, 0x2a, 0x10, 0xba, 0x59, 0xf3, 0x82, 0x28, 0xcb, 0x61, 0x29, 0x83, 0x60, 0xca, 0xbb, 0x11, 0xf2, 0x58, 0x86, 0x2c, 0xcf, 0x65, 0x14, 0xbe, 0x5d, 0xf7, 0xbf, 0x15, 0xf6, 0x5c, 0x2d, 0x87, 0x64, 0xce, 0xf4, 0x5e, 0xbd, 0x17, 0x66, 0xcc, 0x2f, 0x85, 0xcd, 0x67, 0x84, 0x2e, 0x5f, 0xf5, 0x16, 0xbc}, - {0x0, 0xab, 0x4b, 0xe0, 0x96, 0x3d, 0xdd, 0x76, 0x31, 0x9a, 0x7a, 0xd1, 0xa7, 0xc, 0xec, 0x47, 0x62, 0xc9, 0x29, 0x82, 0xf4, 0x5f, 0xbf, 0x14, 0x53, 0xf8, 0x18, 0xb3, 0xc5, 0x6e, 0x8e, 0x25, 0xc4, 0x6f, 0x8f, 0x24, 0x52, 0xf9, 0x19, 0xb2, 0xf5, 0x5e, 0xbe, 0x15, 0x63, 0xc8, 0x28, 0x83, 0xa6, 0xd, 0xed, 0x46, 0x30, 0x9b, 0x7b, 0xd0, 0x97, 0x3c, 0xdc, 0x77, 0x1, 0xaa, 0x4a, 0xe1, 0x95, 0x3e, 0xde, 0x75, 0x3, 0xa8, 0x48, 0xe3, 0xa4, 0xf, 0xef, 0x44, 0x32, 0x99, 0x79, 0xd2, 0xf7, 0x5c, 0xbc, 0x17, 0x61, 0xca, 0x2a, 0x81, 0xc6, 0x6d, 0x8d, 0x26, 0x50, 0xfb, 0x1b, 0xb0, 0x51, 0xfa, 0x1a, 0xb1, 0xc7, 0x6c, 0x8c, 0x27, 0x60, 0xcb, 0x2b, 0x80, 0xf6, 0x5d, 0xbd, 0x16, 0x33, 0x98, 0x78, 0xd3, 0xa5, 0xe, 0xee, 0x45, 0x2, 0xa9, 0x49, 0xe2, 0x94, 0x3f, 0xdf, 0x74, 0x37, 0x9c, 0x7c, 0xd7, 0xa1, 0xa, 0xea, 0x41, 0x6, 0xad, 0x4d, 0xe6, 0x90, 0x3b, 0xdb, 0x70, 0x55, 0xfe, 0x1e, 0xb5, 0xc3, 0x68, 0x88, 0x23, 0x64, 0xcf, 0x2f, 0x84, 0xf2, 0x59, 0xb9, 0x12, 0xf3, 0x58, 0xb8, 0x13, 0x65, 0xce, 0x2e, 0x85, 0xc2, 0x69, 0x89, 0x22, 0x54, 0xff, 0x1f, 0xb4, 0x91, 0x3a, 0xda, 0x71, 0x7, 0xac, 0x4c, 0xe7, 0xa0, 0xb, 0xeb, 0x40, 0x36, 0x9d, 0x7d, 0xd6, 0xa2, 0x9, 0xe9, 0x42, 0x34, 0x9f, 0x7f, 0xd4, 0x93, 0x38, 0xd8, 0x73, 0x5, 0xae, 0x4e, 0xe5, 0xc0, 0x6b, 0x8b, 0x20, 0x56, 0xfd, 0x1d, 0xb6, 0xf1, 0x5a, 0xba, 0x11, 0x67, 0xcc, 0x2c, 0x87, 0x66, 0xcd, 0x2d, 0x86, 0xf0, 0x5b, 0xbb, 0x10, 0x57, 0xfc, 0x1c, 0xb7, 0xc1, 0x6a, 0x8a, 0x21, 0x4, 0xaf, 0x4f, 0xe4, 0x92, 0x39, 0xd9, 0x72, 0x35, 0x9e, 0x7e, 0xd5, 0xa3, 0x8, 0xe8, 0x43}, - {0x0, 0xac, 0x45, 0xe9, 0x8a, 0x26, 0xcf, 0x63, 0x9, 0xa5, 0x4c, 0xe0, 0x83, 0x2f, 0xc6, 0x6a, 0x12, 0xbe, 0x57, 0xfb, 0x98, 0x34, 0xdd, 0x71, 0x1b, 0xb7, 0x5e, 0xf2, 0x91, 0x3d, 0xd4, 0x78, 0x24, 0x88, 0x61, 0xcd, 0xae, 0x2, 0xeb, 0x47, 0x2d, 0x81, 0x68, 0xc4, 0xa7, 0xb, 0xe2, 0x4e, 0x36, 0x9a, 0x73, 0xdf, 0xbc, 0x10, 0xf9, 0x55, 0x3f, 0x93, 0x7a, 0xd6, 0xb5, 0x19, 0xf0, 0x5c, 0x48, 0xe4, 0xd, 0xa1, 0xc2, 0x6e, 0x87, 0x2b, 0x41, 0xed, 0x4, 0xa8, 0xcb, 0x67, 0x8e, 0x22, 0x5a, 0xf6, 0x1f, 0xb3, 0xd0, 0x7c, 0x95, 0x39, 0x53, 0xff, 0x16, 0xba, 0xd9, 0x75, 0x9c, 0x30, 0x6c, 0xc0, 0x29, 0x85, 0xe6, 0x4a, 0xa3, 0xf, 0x65, 0xc9, 0x20, 0x8c, 0xef, 0x43, 0xaa, 0x6, 0x7e, 0xd2, 0x3b, 0x97, 0xf4, 0x58, 0xb1, 0x1d, 0x77, 0xdb, 0x32, 0x9e, 0xfd, 0x51, 0xb8, 0x14, 0x90, 0x3c, 0xd5, 0x79, 0x1a, 0xb6, 0x5f, 0xf3, 0x99, 0x35, 0xdc, 0x70, 0x13, 0xbf, 0x56, 0xfa, 0x82, 0x2e, 0xc7, 0x6b, 0x8, 0xa4, 0x4d, 0xe1, 0x8b, 0x27, 0xce, 0x62, 0x1, 0xad, 0x44, 0xe8, 0xb4, 0x18, 0xf1, 0x5d, 0x3e, 0x92, 0x7b, 0xd7, 0xbd, 0x11, 0xf8, 0x54, 0x37, 0x9b, 0x72, 0xde, 0xa6, 0xa, 0xe3, 0x4f, 0x2c, 0x80, 0x69, 0xc5, 0xaf, 0x3, 0xea, 0x46, 0x25, 0x89, 0x60, 0xcc, 0xd8, 0x74, 0x9d, 0x31, 0x52, 0xfe, 0x17, 0xbb, 0xd1, 0x7d, 0x94, 0x38, 0x5b, 0xf7, 0x1e, 0xb2, 0xca, 0x66, 0x8f, 0x23, 0x40, 0xec, 0x5, 0xa9, 0xc3, 0x6f, 0x86, 0x2a, 0x49, 0xe5, 0xc, 0xa0, 0xfc, 0x50, 0xb9, 0x15, 0x76, 0xda, 0x33, 0x9f, 0xf5, 0x59, 0xb0, 0x1c, 0x7f, 0xd3, 0x3a, 0x96, 0xee, 0x42, 0xab, 0x7, 0x64, 0xc8, 0x21, 0x8d, 0xe7, 0x4b, 0xa2, 0xe, 0x6d, 0xc1, 0x28, 0x84}, - {0x0, 0xad, 0x47, 0xea, 0x8e, 0x23, 0xc9, 0x64, 0x1, 0xac, 0x46, 0xeb, 0x8f, 0x22, 0xc8, 0x65, 0x2, 0xaf, 0x45, 0xe8, 0x8c, 0x21, 0xcb, 0x66, 0x3, 0xae, 0x44, 0xe9, 0x8d, 0x20, 0xca, 0x67, 0x4, 0xa9, 0x43, 0xee, 0x8a, 0x27, 0xcd, 0x60, 0x5, 0xa8, 0x42, 0xef, 0x8b, 0x26, 0xcc, 0x61, 0x6, 0xab, 0x41, 0xec, 0x88, 0x25, 0xcf, 0x62, 0x7, 0xaa, 0x40, 0xed, 0x89, 0x24, 0xce, 0x63, 0x8, 0xa5, 0x4f, 0xe2, 0x86, 0x2b, 0xc1, 0x6c, 0x9, 0xa4, 0x4e, 0xe3, 0x87, 0x2a, 0xc0, 0x6d, 0xa, 0xa7, 0x4d, 0xe0, 0x84, 0x29, 0xc3, 0x6e, 0xb, 0xa6, 0x4c, 0xe1, 0x85, 0x28, 0xc2, 0x6f, 0xc, 0xa1, 0x4b, 0xe6, 0x82, 0x2f, 0xc5, 0x68, 0xd, 0xa0, 0x4a, 0xe7, 0x83, 0x2e, 0xc4, 0x69, 0xe, 0xa3, 0x49, 0xe4, 0x80, 0x2d, 0xc7, 0x6a, 0xf, 0xa2, 0x48, 0xe5, 0x81, 0x2c, 0xc6, 0x6b, 0x10, 0xbd, 0x57, 0xfa, 0x9e, 0x33, 0xd9, 0x74, 0x11, 0xbc, 0x56, 0xfb, 0x9f, 0x32, 0xd8, 0x75, 0x12, 0xbf, 0x55, 0xf8, 0x9c, 0x31, 0xdb, 0x76, 0x13, 0xbe, 0x54, 0xf9, 0x9d, 0x30, 0xda, 0x77, 0x14, 0xb9, 0x53, 0xfe, 0x9a, 0x37, 0xdd, 0x70, 0x15, 0xb8, 0x52, 0xff, 0x9b, 0x36, 0xdc, 0x71, 0x16, 0xbb, 0x51, 0xfc, 0x98, 0x35, 0xdf, 0x72, 0x17, 0xba, 0x50, 0xfd, 0x99, 0x34, 0xde, 0x73, 0x18, 0xb5, 0x5f, 0xf2, 0x96, 0x3b, 0xd1, 0x7c, 0x19, 0xb4, 0x5e, 0xf3, 0x97, 0x3a, 0xd0, 0x7d, 0x1a, 0xb7, 0x5d, 0xf0, 0x94, 0x39, 0xd3, 0x7e, 0x1b, 0xb6, 0x5c, 0xf1, 0x95, 0x38, 0xd2, 0x7f, 0x1c, 0xb1, 0x5b, 0xf6, 0x92, 0x3f, 0xd5, 0x78, 0x1d, 0xb0, 0x5a, 0xf7, 0x93, 0x3e, 0xd4, 0x79, 0x1e, 0xb3, 0x59, 0xf4, 0x90, 0x3d, 0xd7, 0x7a, 0x1f, 0xb2, 0x58, 0xf5, 0x91, 0x3c, 0xd6, 0x7b}, - {0x0, 0xae, 0x41, 0xef, 0x82, 0x2c, 0xc3, 0x6d, 0x19, 0xb7, 0x58, 0xf6, 0x9b, 0x35, 0xda, 0x74, 0x32, 0x9c, 0x73, 0xdd, 0xb0, 0x1e, 0xf1, 0x5f, 0x2b, 0x85, 0x6a, 0xc4, 0xa9, 0x7, 0xe8, 0x46, 0x64, 0xca, 0x25, 0x8b, 0xe6, 0x48, 0xa7, 0x9, 0x7d, 0xd3, 0x3c, 0x92, 0xff, 0x51, 0xbe, 0x10, 0x56, 0xf8, 0x17, 0xb9, 0xd4, 0x7a, 0x95, 0x3b, 0x4f, 0xe1, 0xe, 0xa0, 0xcd, 0x63, 0x8c, 0x22, 0xc8, 0x66, 0x89, 0x27, 0x4a, 0xe4, 0xb, 0xa5, 0xd1, 0x7f, 0x90, 0x3e, 0x53, 0xfd, 0x12, 0xbc, 0xfa, 0x54, 0xbb, 0x15, 0x78, 0xd6, 0x39, 0x97, 0xe3, 0x4d, 0xa2, 0xc, 0x61, 0xcf, 0x20, 0x8e, 0xac, 0x2, 0xed, 0x43, 0x2e, 0x80, 0x6f, 0xc1, 0xb5, 0x1b, 0xf4, 0x5a, 0x37, 0x99, 0x76, 0xd8, 0x9e, 0x30, 0xdf, 0x71, 0x1c, 0xb2, 0x5d, 0xf3, 0x87, 0x29, 0xc6, 0x68, 0x5, 0xab, 0x44, 0xea, 0x8d, 0x23, 0xcc, 0x62, 0xf, 0xa1, 0x4e, 0xe0, 0x94, 0x3a, 0xd5, 0x7b, 0x16, 0xb8, 0x57, 0xf9, 0xbf, 0x11, 0xfe, 0x50, 0x3d, 0x93, 0x7c, 0xd2, 0xa6, 0x8, 0xe7, 0x49, 0x24, 0x8a, 0x65, 0xcb, 0xe9, 0x47, 0xa8, 0x6, 0x6b, 0xc5, 0x2a, 0x84, 0xf0, 0x5e, 0xb1, 0x1f, 0x72, 0xdc, 0x33, 0x9d, 0xdb, 0x75, 0x9a, 0x34, 0x59, 0xf7, 0x18, 0xb6, 0xc2, 0x6c, 0x83, 0x2d, 0x40, 0xee, 0x1, 0xaf, 0x45, 0xeb, 0x4, 0xaa, 0xc7, 0x69, 0x86, 0x28, 0x5c, 0xf2, 0x1d, 0xb3, 0xde, 0x70, 0x9f, 0x31, 0x77, 0xd9, 0x36, 0x98, 0xf5, 0x5b, 0xb4, 0x1a, 0x6e, 0xc0, 0x2f, 0x81, 0xec, 0x42, 0xad, 0x3, 0x21, 0x8f, 0x60, 0xce, 0xa3, 0xd, 0xe2, 0x4c, 0x38, 0x96, 0x79, 0xd7, 0xba, 0x14, 0xfb, 0x55, 0x13, 0xbd, 0x52, 0xfc, 0x91, 0x3f, 0xd0, 0x7e, 0xa, 0xa4, 0x4b, 0xe5, 0x88, 0x26, 0xc9, 0x67}, - {0x0, 0xaf, 0x43, 0xec, 0x86, 0x29, 0xc5, 0x6a, 0x11, 0xbe, 0x52, 0xfd, 0x97, 0x38, 0xd4, 0x7b, 0x22, 0x8d, 0x61, 0xce, 0xa4, 0xb, 0xe7, 0x48, 0x33, 0x9c, 0x70, 0xdf, 0xb5, 0x1a, 0xf6, 0x59, 0x44, 0xeb, 0x7, 0xa8, 0xc2, 0x6d, 0x81, 0x2e, 0x55, 0xfa, 0x16, 0xb9, 0xd3, 0x7c, 0x90, 0x3f, 0x66, 0xc9, 0x25, 0x8a, 0xe0, 0x4f, 0xa3, 0xc, 0x77, 0xd8, 0x34, 0x9b, 0xf1, 0x5e, 0xb2, 0x1d, 0x88, 0x27, 0xcb, 0x64, 0xe, 0xa1, 0x4d, 0xe2, 0x99, 0x36, 0xda, 0x75, 0x1f, 0xb0, 0x5c, 0xf3, 0xaa, 0x5, 0xe9, 0x46, 0x2c, 0x83, 0x6f, 0xc0, 0xbb, 0x14, 0xf8, 0x57, 0x3d, 0x92, 0x7e, 0xd1, 0xcc, 0x63, 0x8f, 0x20, 0x4a, 0xe5, 0x9, 0xa6, 0xdd, 0x72, 0x9e, 0x31, 0x5b, 0xf4, 0x18, 0xb7, 0xee, 0x41, 0xad, 0x2, 0x68, 0xc7, 0x2b, 0x84, 0xff, 0x50, 0xbc, 0x13, 0x79, 0xd6, 0x3a, 0x95, 0xd, 0xa2, 0x4e, 0xe1, 0x8b, 0x24, 0xc8, 0x67, 0x1c, 0xb3, 0x5f, 0xf0, 0x9a, 0x35, 0xd9, 0x76, 0x2f, 0x80, 0x6c, 0xc3, 0xa9, 0x6, 0xea, 0x45, 0x3e, 0x91, 0x7d, 0xd2, 0xb8, 0x17, 0xfb, 0x54, 0x49, 0xe6, 0xa, 0xa5, 0xcf, 0x60, 0x8c, 0x23, 0x58, 0xf7, 0x1b, 0xb4, 0xde, 0x71, 0x9d, 0x32, 0x6b, 0xc4, 0x28, 0x87, 0xed, 0x42, 0xae, 0x1, 0x7a, 0xd5, 0x39, 0x96, 0xfc, 0x53, 0xbf, 0x10, 0x85, 0x2a, 0xc6, 0x69, 0x3, 0xac, 0x40, 0xef, 0x94, 0x3b, 0xd7, 0x78, 0x12, 0xbd, 0x51, 0xfe, 0xa7, 0x8, 0xe4, 0x4b, 0x21, 0x8e, 0x62, 0xcd, 0xb6, 0x19, 0xf5, 0x5a, 0x30, 0x9f, 0x73, 0xdc, 0xc1, 0x6e, 0x82, 0x2d, 0x47, 0xe8, 0x4, 0xab, 0xd0, 0x7f, 0x93, 0x3c, 0x56, 0xf9, 0x15, 0xba, 0xe3, 0x4c, 0xa0, 0xf, 0x65, 0xca, 0x26, 0x89, 0xf2, 0x5d, 0xb1, 0x1e, 0x74, 0xdb, 0x37, 0x98}, - {0x0, 0xb0, 0x7d, 0xcd, 0xfa, 0x4a, 0x87, 0x37, 0xe9, 0x59, 0x94, 0x24, 0x13, 0xa3, 0x6e, 0xde, 0xcf, 0x7f, 0xb2, 0x2, 0x35, 0x85, 0x48, 0xf8, 0x26, 0x96, 0x5b, 0xeb, 0xdc, 0x6c, 0xa1, 0x11, 0x83, 0x33, 0xfe, 0x4e, 0x79, 0xc9, 0x4, 0xb4, 0x6a, 0xda, 0x17, 0xa7, 0x90, 0x20, 0xed, 0x5d, 0x4c, 0xfc, 0x31, 0x81, 0xb6, 0x6, 0xcb, 0x7b, 0xa5, 0x15, 0xd8, 0x68, 0x5f, 0xef, 0x22, 0x92, 0x1b, 0xab, 0x66, 0xd6, 0xe1, 0x51, 0x9c, 0x2c, 0xf2, 0x42, 0x8f, 0x3f, 0x8, 0xb8, 0x75, 0xc5, 0xd4, 0x64, 0xa9, 0x19, 0x2e, 0x9e, 0x53, 0xe3, 0x3d, 0x8d, 0x40, 0xf0, 0xc7, 0x77, 0xba, 0xa, 0x98, 0x28, 0xe5, 0x55, 0x62, 0xd2, 0x1f, 0xaf, 0x71, 0xc1, 0xc, 0xbc, 0x8b, 0x3b, 0xf6, 0x46, 0x57, 0xe7, 0x2a, 0x9a, 0xad, 0x1d, 0xd0, 0x60, 0xbe, 0xe, 0xc3, 0x73, 0x44, 0xf4, 0x39, 0x89, 0x36, 0x86, 0x4b, 0xfb, 0xcc, 0x7c, 0xb1, 0x1, 0xdf, 0x6f, 0xa2, 0x12, 0x25, 0x95, 0x58, 0xe8, 0xf9, 0x49, 0x84, 0x34, 0x3, 0xb3, 0x7e, 0xce, 0x10, 0xa0, 0x6d, 0xdd, 0xea, 0x5a, 0x97, 0x27, 0xb5, 0x5, 0xc8, 0x78, 0x4f, 0xff, 0x32, 0x82, 0x5c, 0xec, 0x21, 0x91, 0xa6, 0x16, 0xdb, 0x6b, 0x7a, 0xca, 0x7, 0xb7, 0x80, 0x30, 0xfd, 0x4d, 0x93, 0x23, 0xee, 0x5e, 0x69, 0xd9, 0x14, 0xa4, 0x2d, 0x9d, 0x50, 0xe0, 0xd7, 0x67, 0xaa, 0x1a, 0xc4, 0x74, 0xb9, 0x9, 0x3e, 0x8e, 0x43, 0xf3, 0xe2, 0x52, 0x9f, 0x2f, 0x18, 0xa8, 0x65, 0xd5, 0xb, 0xbb, 0x76, 0xc6, 0xf1, 0x41, 0x8c, 0x3c, 0xae, 0x1e, 0xd3, 0x63, 0x54, 0xe4, 0x29, 0x99, 0x47, 0xf7, 0x3a, 0x8a, 0xbd, 0xd, 0xc0, 0x70, 0x61, 0xd1, 0x1c, 0xac, 0x9b, 0x2b, 0xe6, 0x56, 0x88, 0x38, 0xf5, 0x45, 0x72, 0xc2, 0xf, 0xbf}, - {0x0, 0xb1, 0x7f, 0xce, 0xfe, 0x4f, 0x81, 0x30, 0xe1, 0x50, 0x9e, 0x2f, 0x1f, 0xae, 0x60, 0xd1, 0xdf, 0x6e, 0xa0, 0x11, 0x21, 0x90, 0x5e, 0xef, 0x3e, 0x8f, 0x41, 0xf0, 0xc0, 0x71, 0xbf, 0xe, 0xa3, 0x12, 0xdc, 0x6d, 0x5d, 0xec, 0x22, 0x93, 0x42, 0xf3, 0x3d, 0x8c, 0xbc, 0xd, 0xc3, 0x72, 0x7c, 0xcd, 0x3, 0xb2, 0x82, 0x33, 0xfd, 0x4c, 0x9d, 0x2c, 0xe2, 0x53, 0x63, 0xd2, 0x1c, 0xad, 0x5b, 0xea, 0x24, 0x95, 0xa5, 0x14, 0xda, 0x6b, 0xba, 0xb, 0xc5, 0x74, 0x44, 0xf5, 0x3b, 0x8a, 0x84, 0x35, 0xfb, 0x4a, 0x7a, 0xcb, 0x5, 0xb4, 0x65, 0xd4, 0x1a, 0xab, 0x9b, 0x2a, 0xe4, 0x55, 0xf8, 0x49, 0x87, 0x36, 0x6, 0xb7, 0x79, 0xc8, 0x19, 0xa8, 0x66, 0xd7, 0xe7, 0x56, 0x98, 0x29, 0x27, 0x96, 0x58, 0xe9, 0xd9, 0x68, 0xa6, 0x17, 0xc6, 0x77, 0xb9, 0x8, 0x38, 0x89, 0x47, 0xf6, 0xb6, 0x7, 0xc9, 0x78, 0x48, 0xf9, 0x37, 0x86, 0x57, 0xe6, 0x28, 0x99, 0xa9, 0x18, 0xd6, 0x67, 0x69, 0xd8, 0x16, 0xa7, 0x97, 0x26, 0xe8, 0x59, 0x88, 0x39, 0xf7, 0x46, 0x76, 0xc7, 0x9, 0xb8, 0x15, 0xa4, 0x6a, 0xdb, 0xeb, 0x5a, 0x94, 0x25, 0xf4, 0x45, 0x8b, 0x3a, 0xa, 0xbb, 0x75, 0xc4, 0xca, 0x7b, 0xb5, 0x4, 0x34, 0x85, 0x4b, 0xfa, 0x2b, 0x9a, 0x54, 0xe5, 0xd5, 0x64, 0xaa, 0x1b, 0xed, 0x5c, 0x92, 0x23, 0x13, 0xa2, 0x6c, 0xdd, 0xc, 0xbd, 0x73, 0xc2, 0xf2, 0x43, 0x8d, 0x3c, 0x32, 0x83, 0x4d, 0xfc, 0xcc, 0x7d, 0xb3, 0x2, 0xd3, 0x62, 0xac, 0x1d, 0x2d, 0x9c, 0x52, 0xe3, 0x4e, 0xff, 0x31, 0x80, 0xb0, 0x1, 0xcf, 0x7e, 0xaf, 0x1e, 0xd0, 0x61, 0x51, 0xe0, 0x2e, 0x9f, 0x91, 0x20, 0xee, 0x5f, 0x6f, 0xde, 0x10, 0xa1, 0x70, 0xc1, 0xf, 0xbe, 0x8e, 0x3f, 0xf1, 0x40}, - {0x0, 0xb2, 0x79, 0xcb, 0xf2, 0x40, 0x8b, 0x39, 0xf9, 0x4b, 0x80, 0x32, 0xb, 0xb9, 0x72, 0xc0, 0xef, 0x5d, 0x96, 0x24, 0x1d, 0xaf, 0x64, 0xd6, 0x16, 0xa4, 0x6f, 0xdd, 0xe4, 0x56, 0x9d, 0x2f, 0xc3, 0x71, 0xba, 0x8, 0x31, 0x83, 0x48, 0xfa, 0x3a, 0x88, 0x43, 0xf1, 0xc8, 0x7a, 0xb1, 0x3, 0x2c, 0x9e, 0x55, 0xe7, 0xde, 0x6c, 0xa7, 0x15, 0xd5, 0x67, 0xac, 0x1e, 0x27, 0x95, 0x5e, 0xec, 0x9b, 0x29, 0xe2, 0x50, 0x69, 0xdb, 0x10, 0xa2, 0x62, 0xd0, 0x1b, 0xa9, 0x90, 0x22, 0xe9, 0x5b, 0x74, 0xc6, 0xd, 0xbf, 0x86, 0x34, 0xff, 0x4d, 0x8d, 0x3f, 0xf4, 0x46, 0x7f, 0xcd, 0x6, 0xb4, 0x58, 0xea, 0x21, 0x93, 0xaa, 0x18, 0xd3, 0x61, 0xa1, 0x13, 0xd8, 0x6a, 0x53, 0xe1, 0x2a, 0x98, 0xb7, 0x5, 0xce, 0x7c, 0x45, 0xf7, 0x3c, 0x8e, 0x4e, 0xfc, 0x37, 0x85, 0xbc, 0xe, 0xc5, 0x77, 0x2b, 0x99, 0x52, 0xe0, 0xd9, 0x6b, 0xa0, 0x12, 0xd2, 0x60, 0xab, 0x19, 0x20, 0x92, 0x59, 0xeb, 0xc4, 0x76, 0xbd, 0xf, 0x36, 0x84, 0x4f, 0xfd, 0x3d, 0x8f, 0x44, 0xf6, 0xcf, 0x7d, 0xb6, 0x4, 0xe8, 0x5a, 0x91, 0x23, 0x1a, 0xa8, 0x63, 0xd1, 0x11, 0xa3, 0x68, 0xda, 0xe3, 0x51, 0x9a, 0x28, 0x7, 0xb5, 0x7e, 0xcc, 0xf5, 0x47, 0x8c, 0x3e, 0xfe, 0x4c, 0x87, 0x35, 0xc, 0xbe, 0x75, 0xc7, 0xb0, 0x2, 0xc9, 0x7b, 0x42, 0xf0, 0x3b, 0x89, 0x49, 0xfb, 0x30, 0x82, 0xbb, 0x9, 0xc2, 0x70, 0x5f, 0xed, 0x26, 0x94, 0xad, 0x1f, 0xd4, 0x66, 0xa6, 0x14, 0xdf, 0x6d, 0x54, 0xe6, 0x2d, 0x9f, 0x73, 0xc1, 0xa, 0xb8, 0x81, 0x33, 0xf8, 0x4a, 0x8a, 0x38, 0xf3, 0x41, 0x78, 0xca, 0x1, 0xb3, 0x9c, 0x2e, 0xe5, 0x57, 0x6e, 0xdc, 0x17, 0xa5, 0x65, 0xd7, 0x1c, 0xae, 0x97, 0x25, 0xee, 0x5c}, - {0x0, 0xb3, 0x7b, 0xc8, 0xf6, 0x45, 0x8d, 0x3e, 0xf1, 0x42, 0x8a, 0x39, 0x7, 0xb4, 0x7c, 0xcf, 0xff, 0x4c, 0x84, 0x37, 0x9, 0xba, 0x72, 0xc1, 0xe, 0xbd, 0x75, 0xc6, 0xf8, 0x4b, 0x83, 0x30, 0xe3, 0x50, 0x98, 0x2b, 0x15, 0xa6, 0x6e, 0xdd, 0x12, 0xa1, 0x69, 0xda, 0xe4, 0x57, 0x9f, 0x2c, 0x1c, 0xaf, 0x67, 0xd4, 0xea, 0x59, 0x91, 0x22, 0xed, 0x5e, 0x96, 0x25, 0x1b, 0xa8, 0x60, 0xd3, 0xdb, 0x68, 0xa0, 0x13, 0x2d, 0x9e, 0x56, 0xe5, 0x2a, 0x99, 0x51, 0xe2, 0xdc, 0x6f, 0xa7, 0x14, 0x24, 0x97, 0x5f, 0xec, 0xd2, 0x61, 0xa9, 0x1a, 0xd5, 0x66, 0xae, 0x1d, 0x23, 0x90, 0x58, 0xeb, 0x38, 0x8b, 0x43, 0xf0, 0xce, 0x7d, 0xb5, 0x6, 0xc9, 0x7a, 0xb2, 0x1, 0x3f, 0x8c, 0x44, 0xf7, 0xc7, 0x74, 0xbc, 0xf, 0x31, 0x82, 0x4a, 0xf9, 0x36, 0x85, 0x4d, 0xfe, 0xc0, 0x73, 0xbb, 0x8, 0xab, 0x18, 0xd0, 0x63, 0x5d, 0xee, 0x26, 0x95, 0x5a, 0xe9, 0x21, 0x92, 0xac, 0x1f, 0xd7, 0x64, 0x54, 0xe7, 0x2f, 0x9c, 0xa2, 0x11, 0xd9, 0x6a, 0xa5, 0x16, 0xde, 0x6d, 0x53, 0xe0, 0x28, 0x9b, 0x48, 0xfb, 0x33, 0x80, 0xbe, 0xd, 0xc5, 0x76, 0xb9, 0xa, 0xc2, 0x71, 0x4f, 0xfc, 0x34, 0x87, 0xb7, 0x4, 0xcc, 0x7f, 0x41, 0xf2, 0x3a, 0x89, 0x46, 0xf5, 0x3d, 0x8e, 0xb0, 0x3, 0xcb, 0x78, 0x70, 0xc3, 0xb, 0xb8, 0x86, 0x35, 0xfd, 0x4e, 0x81, 0x32, 0xfa, 0x49, 0x77, 0xc4, 0xc, 0xbf, 0x8f, 0x3c, 0xf4, 0x47, 0x79, 0xca, 0x2, 0xb1, 0x7e, 0xcd, 0x5, 0xb6, 0x88, 0x3b, 0xf3, 0x40, 0x93, 0x20, 0xe8, 0x5b, 0x65, 0xd6, 0x1e, 0xad, 0x62, 0xd1, 0x19, 0xaa, 0x94, 0x27, 0xef, 0x5c, 0x6c, 0xdf, 0x17, 0xa4, 0x9a, 0x29, 0xe1, 0x52, 0x9d, 0x2e, 0xe6, 0x55, 0x6b, 0xd8, 0x10, 0xa3}, - {0x0, 0xb4, 0x75, 0xc1, 0xea, 0x5e, 0x9f, 0x2b, 0xc9, 0x7d, 0xbc, 0x8, 0x23, 0x97, 0x56, 0xe2, 0x8f, 0x3b, 0xfa, 0x4e, 0x65, 0xd1, 0x10, 0xa4, 0x46, 0xf2, 0x33, 0x87, 0xac, 0x18, 0xd9, 0x6d, 0x3, 0xb7, 0x76, 0xc2, 0xe9, 0x5d, 0x9c, 0x28, 0xca, 0x7e, 0xbf, 0xb, 0x20, 0x94, 0x55, 0xe1, 0x8c, 0x38, 0xf9, 0x4d, 0x66, 0xd2, 0x13, 0xa7, 0x45, 0xf1, 0x30, 0x84, 0xaf, 0x1b, 0xda, 0x6e, 0x6, 0xb2, 0x73, 0xc7, 0xec, 0x58, 0x99, 0x2d, 0xcf, 0x7b, 0xba, 0xe, 0x25, 0x91, 0x50, 0xe4, 0x89, 0x3d, 0xfc, 0x48, 0x63, 0xd7, 0x16, 0xa2, 0x40, 0xf4, 0x35, 0x81, 0xaa, 0x1e, 0xdf, 0x6b, 0x5, 0xb1, 0x70, 0xc4, 0xef, 0x5b, 0x9a, 0x2e, 0xcc, 0x78, 0xb9, 0xd, 0x26, 0x92, 0x53, 0xe7, 0x8a, 0x3e, 0xff, 0x4b, 0x60, 0xd4, 0x15, 0xa1, 0x43, 0xf7, 0x36, 0x82, 0xa9, 0x1d, 0xdc, 0x68, 0xc, 0xb8, 0x79, 0xcd, 0xe6, 0x52, 0x93, 0x27, 0xc5, 0x71, 0xb0, 0x4, 0x2f, 0x9b, 0x5a, 0xee, 0x83, 0x37, 0xf6, 0x42, 0x69, 0xdd, 0x1c, 0xa8, 0x4a, 0xfe, 0x3f, 0x8b, 0xa0, 0x14, 0xd5, 0x61, 0xf, 0xbb, 0x7a, 0xce, 0xe5, 0x51, 0x90, 0x24, 0xc6, 0x72, 0xb3, 0x7, 0x2c, 0x98, 0x59, 0xed, 0x80, 0x34, 0xf5, 0x41, 0x6a, 0xde, 0x1f, 0xab, 0x49, 0xfd, 0x3c, 0x88, 0xa3, 0x17, 0xd6, 0x62, 0xa, 0xbe, 0x7f, 0xcb, 0xe0, 0x54, 0x95, 0x21, 0xc3, 0x77, 0xb6, 0x2, 0x29, 0x9d, 0x5c, 0xe8, 0x85, 0x31, 0xf0, 0x44, 0x6f, 0xdb, 0x1a, 0xae, 0x4c, 0xf8, 0x39, 0x8d, 0xa6, 0x12, 0xd3, 0x67, 0x9, 0xbd, 0x7c, 0xc8, 0xe3, 0x57, 0x96, 0x22, 0xc0, 0x74, 0xb5, 0x1, 0x2a, 0x9e, 0x5f, 0xeb, 0x86, 0x32, 0xf3, 0x47, 0x6c, 0xd8, 0x19, 0xad, 0x4f, 0xfb, 0x3a, 0x8e, 0xa5, 0x11, 0xd0, 0x64}, - {0x0, 0xb5, 0x77, 0xc2, 0xee, 0x5b, 0x99, 0x2c, 0xc1, 0x74, 0xb6, 0x3, 0x2f, 0x9a, 0x58, 0xed, 0x9f, 0x2a, 0xe8, 0x5d, 0x71, 0xc4, 0x6, 0xb3, 0x5e, 0xeb, 0x29, 0x9c, 0xb0, 0x5, 0xc7, 0x72, 0x23, 0x96, 0x54, 0xe1, 0xcd, 0x78, 0xba, 0xf, 0xe2, 0x57, 0x95, 0x20, 0xc, 0xb9, 0x7b, 0xce, 0xbc, 0x9, 0xcb, 0x7e, 0x52, 0xe7, 0x25, 0x90, 0x7d, 0xc8, 0xa, 0xbf, 0x93, 0x26, 0xe4, 0x51, 0x46, 0xf3, 0x31, 0x84, 0xa8, 0x1d, 0xdf, 0x6a, 0x87, 0x32, 0xf0, 0x45, 0x69, 0xdc, 0x1e, 0xab, 0xd9, 0x6c, 0xae, 0x1b, 0x37, 0x82, 0x40, 0xf5, 0x18, 0xad, 0x6f, 0xda, 0xf6, 0x43, 0x81, 0x34, 0x65, 0xd0, 0x12, 0xa7, 0x8b, 0x3e, 0xfc, 0x49, 0xa4, 0x11, 0xd3, 0x66, 0x4a, 0xff, 0x3d, 0x88, 0xfa, 0x4f, 0x8d, 0x38, 0x14, 0xa1, 0x63, 0xd6, 0x3b, 0x8e, 0x4c, 0xf9, 0xd5, 0x60, 0xa2, 0x17, 0x8c, 0x39, 0xfb, 0x4e, 0x62, 0xd7, 0x15, 0xa0, 0x4d, 0xf8, 0x3a, 0x8f, 0xa3, 0x16, 0xd4, 0x61, 0x13, 0xa6, 0x64, 0xd1, 0xfd, 0x48, 0x8a, 0x3f, 0xd2, 0x67, 0xa5, 0x10, 0x3c, 0x89, 0x4b, 0xfe, 0xaf, 0x1a, 0xd8, 0x6d, 0x41, 0xf4, 0x36, 0x83, 0x6e, 0xdb, 0x19, 0xac, 0x80, 0x35, 0xf7, 0x42, 0x30, 0x85, 0x47, 0xf2, 0xde, 0x6b, 0xa9, 0x1c, 0xf1, 0x44, 0x86, 0x33, 0x1f, 0xaa, 0x68, 0xdd, 0xca, 0x7f, 0xbd, 0x8, 0x24, 0x91, 0x53, 0xe6, 0xb, 0xbe, 0x7c, 0xc9, 0xe5, 0x50, 0x92, 0x27, 0x55, 0xe0, 0x22, 0x97, 0xbb, 0xe, 0xcc, 0x79, 0x94, 0x21, 0xe3, 0x56, 0x7a, 0xcf, 0xd, 0xb8, 0xe9, 0x5c, 0x9e, 0x2b, 0x7, 0xb2, 0x70, 0xc5, 0x28, 0x9d, 0x5f, 0xea, 0xc6, 0x73, 0xb1, 0x4, 0x76, 0xc3, 0x1, 0xb4, 0x98, 0x2d, 0xef, 0x5a, 0xb7, 0x2, 0xc0, 0x75, 0x59, 0xec, 0x2e, 0x9b}, - {0x0, 0xb6, 0x71, 0xc7, 0xe2, 0x54, 0x93, 0x25, 0xd9, 0x6f, 0xa8, 0x1e, 0x3b, 0x8d, 0x4a, 0xfc, 0xaf, 0x19, 0xde, 0x68, 0x4d, 0xfb, 0x3c, 0x8a, 0x76, 0xc0, 0x7, 0xb1, 0x94, 0x22, 0xe5, 0x53, 0x43, 0xf5, 0x32, 0x84, 0xa1, 0x17, 0xd0, 0x66, 0x9a, 0x2c, 0xeb, 0x5d, 0x78, 0xce, 0x9, 0xbf, 0xec, 0x5a, 0x9d, 0x2b, 0xe, 0xb8, 0x7f, 0xc9, 0x35, 0x83, 0x44, 0xf2, 0xd7, 0x61, 0xa6, 0x10, 0x86, 0x30, 0xf7, 0x41, 0x64, 0xd2, 0x15, 0xa3, 0x5f, 0xe9, 0x2e, 0x98, 0xbd, 0xb, 0xcc, 0x7a, 0x29, 0x9f, 0x58, 0xee, 0xcb, 0x7d, 0xba, 0xc, 0xf0, 0x46, 0x81, 0x37, 0x12, 0xa4, 0x63, 0xd5, 0xc5, 0x73, 0xb4, 0x2, 0x27, 0x91, 0x56, 0xe0, 0x1c, 0xaa, 0x6d, 0xdb, 0xfe, 0x48, 0x8f, 0x39, 0x6a, 0xdc, 0x1b, 0xad, 0x88, 0x3e, 0xf9, 0x4f, 0xb3, 0x5, 0xc2, 0x74, 0x51, 0xe7, 0x20, 0x96, 0x11, 0xa7, 0x60, 0xd6, 0xf3, 0x45, 0x82, 0x34, 0xc8, 0x7e, 0xb9, 0xf, 0x2a, 0x9c, 0x5b, 0xed, 0xbe, 0x8, 0xcf, 0x79, 0x5c, 0xea, 0x2d, 0x9b, 0x67, 0xd1, 0x16, 0xa0, 0x85, 0x33, 0xf4, 0x42, 0x52, 0xe4, 0x23, 0x95, 0xb0, 0x6, 0xc1, 0x77, 0x8b, 0x3d, 0xfa, 0x4c, 0x69, 0xdf, 0x18, 0xae, 0xfd, 0x4b, 0x8c, 0x3a, 0x1f, 0xa9, 0x6e, 0xd8, 0x24, 0x92, 0x55, 0xe3, 0xc6, 0x70, 0xb7, 0x1, 0x97, 0x21, 0xe6, 0x50, 0x75, 0xc3, 0x4, 0xb2, 0x4e, 0xf8, 0x3f, 0x89, 0xac, 0x1a, 0xdd, 0x6b, 0x38, 0x8e, 0x49, 0xff, 0xda, 0x6c, 0xab, 0x1d, 0xe1, 0x57, 0x90, 0x26, 0x3, 0xb5, 0x72, 0xc4, 0xd4, 0x62, 0xa5, 0x13, 0x36, 0x80, 0x47, 0xf1, 0xd, 0xbb, 0x7c, 0xca, 0xef, 0x59, 0x9e, 0x28, 0x7b, 0xcd, 0xa, 0xbc, 0x99, 0x2f, 0xe8, 0x5e, 0xa2, 0x14, 0xd3, 0x65, 0x40, 0xf6, 0x31, 0x87}, - {0x0, 0xb7, 0x73, 0xc4, 0xe6, 0x51, 0x95, 0x22, 0xd1, 0x66, 0xa2, 0x15, 0x37, 0x80, 0x44, 0xf3, 0xbf, 0x8, 0xcc, 0x7b, 0x59, 0xee, 0x2a, 0x9d, 0x6e, 0xd9, 0x1d, 0xaa, 0x88, 0x3f, 0xfb, 0x4c, 0x63, 0xd4, 0x10, 0xa7, 0x85, 0x32, 0xf6, 0x41, 0xb2, 0x5, 0xc1, 0x76, 0x54, 0xe3, 0x27, 0x90, 0xdc, 0x6b, 0xaf, 0x18, 0x3a, 0x8d, 0x49, 0xfe, 0xd, 0xba, 0x7e, 0xc9, 0xeb, 0x5c, 0x98, 0x2f, 0xc6, 0x71, 0xb5, 0x2, 0x20, 0x97, 0x53, 0xe4, 0x17, 0xa0, 0x64, 0xd3, 0xf1, 0x46, 0x82, 0x35, 0x79, 0xce, 0xa, 0xbd, 0x9f, 0x28, 0xec, 0x5b, 0xa8, 0x1f, 0xdb, 0x6c, 0x4e, 0xf9, 0x3d, 0x8a, 0xa5, 0x12, 0xd6, 0x61, 0x43, 0xf4, 0x30, 0x87, 0x74, 0xc3, 0x7, 0xb0, 0x92, 0x25, 0xe1, 0x56, 0x1a, 0xad, 0x69, 0xde, 0xfc, 0x4b, 0x8f, 0x38, 0xcb, 0x7c, 0xb8, 0xf, 0x2d, 0x9a, 0x5e, 0xe9, 0x91, 0x26, 0xe2, 0x55, 0x77, 0xc0, 0x4, 0xb3, 0x40, 0xf7, 0x33, 0x84, 0xa6, 0x11, 0xd5, 0x62, 0x2e, 0x99, 0x5d, 0xea, 0xc8, 0x7f, 0xbb, 0xc, 0xff, 0x48, 0x8c, 0x3b, 0x19, 0xae, 0x6a, 0xdd, 0xf2, 0x45, 0x81, 0x36, 0x14, 0xa3, 0x67, 0xd0, 0x23, 0x94, 0x50, 0xe7, 0xc5, 0x72, 0xb6, 0x1, 0x4d, 0xfa, 0x3e, 0x89, 0xab, 0x1c, 0xd8, 0x6f, 0x9c, 0x2b, 0xef, 0x58, 0x7a, 0xcd, 0x9, 0xbe, 0x57, 0xe0, 0x24, 0x93, 0xb1, 0x6, 0xc2, 0x75, 0x86, 0x31, 0xf5, 0x42, 0x60, 0xd7, 0x13, 0xa4, 0xe8, 0x5f, 0x9b, 0x2c, 0xe, 0xb9, 0x7d, 0xca, 0x39, 0x8e, 0x4a, 0xfd, 0xdf, 0x68, 0xac, 0x1b, 0x34, 0x83, 0x47, 0xf0, 0xd2, 0x65, 0xa1, 0x16, 0xe5, 0x52, 0x96, 0x21, 0x3, 0xb4, 0x70, 0xc7, 0x8b, 0x3c, 0xf8, 0x4f, 0x6d, 0xda, 0x1e, 0xa9, 0x5a, 0xed, 0x29, 0x9e, 0xbc, 0xb, 0xcf, 0x78}, - {0x0, 0xb8, 0x6d, 0xd5, 0xda, 0x62, 0xb7, 0xf, 0xa9, 0x11, 0xc4, 0x7c, 0x73, 0xcb, 0x1e, 0xa6, 0x4f, 0xf7, 0x22, 0x9a, 0x95, 0x2d, 0xf8, 0x40, 0xe6, 0x5e, 0x8b, 0x33, 0x3c, 0x84, 0x51, 0xe9, 0x9e, 0x26, 0xf3, 0x4b, 0x44, 0xfc, 0x29, 0x91, 0x37, 0x8f, 0x5a, 0xe2, 0xed, 0x55, 0x80, 0x38, 0xd1, 0x69, 0xbc, 0x4, 0xb, 0xb3, 0x66, 0xde, 0x78, 0xc0, 0x15, 0xad, 0xa2, 0x1a, 0xcf, 0x77, 0x21, 0x99, 0x4c, 0xf4, 0xfb, 0x43, 0x96, 0x2e, 0x88, 0x30, 0xe5, 0x5d, 0x52, 0xea, 0x3f, 0x87, 0x6e, 0xd6, 0x3, 0xbb, 0xb4, 0xc, 0xd9, 0x61, 0xc7, 0x7f, 0xaa, 0x12, 0x1d, 0xa5, 0x70, 0xc8, 0xbf, 0x7, 0xd2, 0x6a, 0x65, 0xdd, 0x8, 0xb0, 0x16, 0xae, 0x7b, 0xc3, 0xcc, 0x74, 0xa1, 0x19, 0xf0, 0x48, 0x9d, 0x25, 0x2a, 0x92, 0x47, 0xff, 0x59, 0xe1, 0x34, 0x8c, 0x83, 0x3b, 0xee, 0x56, 0x42, 0xfa, 0x2f, 0x97, 0x98, 0x20, 0xf5, 0x4d, 0xeb, 0x53, 0x86, 0x3e, 0x31, 0x89, 0x5c, 0xe4, 0xd, 0xb5, 0x60, 0xd8, 0xd7, 0x6f, 0xba, 0x2, 0xa4, 0x1c, 0xc9, 0x71, 0x7e, 0xc6, 0x13, 0xab, 0xdc, 0x64, 0xb1, 0x9, 0x6, 0xbe, 0x6b, 0xd3, 0x75, 0xcd, 0x18, 0xa0, 0xaf, 0x17, 0xc2, 0x7a, 0x93, 0x2b, 0xfe, 0x46, 0x49, 0xf1, 0x24, 0x9c, 0x3a, 0x82, 0x57, 0xef, 0xe0, 0x58, 0x8d, 0x35, 0x63, 0xdb, 0xe, 0xb6, 0xb9, 0x1, 0xd4, 0x6c, 0xca, 0x72, 0xa7, 0x1f, 0x10, 0xa8, 0x7d, 0xc5, 0x2c, 0x94, 0x41, 0xf9, 0xf6, 0x4e, 0x9b, 0x23, 0x85, 0x3d, 0xe8, 0x50, 0x5f, 0xe7, 0x32, 0x8a, 0xfd, 0x45, 0x90, 0x28, 0x27, 0x9f, 0x4a, 0xf2, 0x54, 0xec, 0x39, 0x81, 0x8e, 0x36, 0xe3, 0x5b, 0xb2, 0xa, 0xdf, 0x67, 0x68, 0xd0, 0x5, 0xbd, 0x1b, 0xa3, 0x76, 0xce, 0xc1, 0x79, 0xac, 0x14}, - {0x0, 0xb9, 0x6f, 0xd6, 0xde, 0x67, 0xb1, 0x8, 0xa1, 0x18, 0xce, 0x77, 0x7f, 0xc6, 0x10, 0xa9, 0x5f, 0xe6, 0x30, 0x89, 0x81, 0x38, 0xee, 0x57, 0xfe, 0x47, 0x91, 0x28, 0x20, 0x99, 0x4f, 0xf6, 0xbe, 0x7, 0xd1, 0x68, 0x60, 0xd9, 0xf, 0xb6, 0x1f, 0xa6, 0x70, 0xc9, 0xc1, 0x78, 0xae, 0x17, 0xe1, 0x58, 0x8e, 0x37, 0x3f, 0x86, 0x50, 0xe9, 0x40, 0xf9, 0x2f, 0x96, 0x9e, 0x27, 0xf1, 0x48, 0x61, 0xd8, 0xe, 0xb7, 0xbf, 0x6, 0xd0, 0x69, 0xc0, 0x79, 0xaf, 0x16, 0x1e, 0xa7, 0x71, 0xc8, 0x3e, 0x87, 0x51, 0xe8, 0xe0, 0x59, 0x8f, 0x36, 0x9f, 0x26, 0xf0, 0x49, 0x41, 0xf8, 0x2e, 0x97, 0xdf, 0x66, 0xb0, 0x9, 0x1, 0xb8, 0x6e, 0xd7, 0x7e, 0xc7, 0x11, 0xa8, 0xa0, 0x19, 0xcf, 0x76, 0x80, 0x39, 0xef, 0x56, 0x5e, 0xe7, 0x31, 0x88, 0x21, 0x98, 0x4e, 0xf7, 0xff, 0x46, 0x90, 0x29, 0xc2, 0x7b, 0xad, 0x14, 0x1c, 0xa5, 0x73, 0xca, 0x63, 0xda, 0xc, 0xb5, 0xbd, 0x4, 0xd2, 0x6b, 0x9d, 0x24, 0xf2, 0x4b, 0x43, 0xfa, 0x2c, 0x95, 0x3c, 0x85, 0x53, 0xea, 0xe2, 0x5b, 0x8d, 0x34, 0x7c, 0xc5, 0x13, 0xaa, 0xa2, 0x1b, 0xcd, 0x74, 0xdd, 0x64, 0xb2, 0xb, 0x3, 0xba, 0x6c, 0xd5, 0x23, 0x9a, 0x4c, 0xf5, 0xfd, 0x44, 0x92, 0x2b, 0x82, 0x3b, 0xed, 0x54, 0x5c, 0xe5, 0x33, 0x8a, 0xa3, 0x1a, 0xcc, 0x75, 0x7d, 0xc4, 0x12, 0xab, 0x2, 0xbb, 0x6d, 0xd4, 0xdc, 0x65, 0xb3, 0xa, 0xfc, 0x45, 0x93, 0x2a, 0x22, 0x9b, 0x4d, 0xf4, 0x5d, 0xe4, 0x32, 0x8b, 0x83, 0x3a, 0xec, 0x55, 0x1d, 0xa4, 0x72, 0xcb, 0xc3, 0x7a, 0xac, 0x15, 0xbc, 0x5, 0xd3, 0x6a, 0x62, 0xdb, 0xd, 0xb4, 0x42, 0xfb, 0x2d, 0x94, 0x9c, 0x25, 0xf3, 0x4a, 0xe3, 0x5a, 0x8c, 0x35, 0x3d, 0x84, 0x52, 0xeb}, - {0x0, 0xba, 0x69, 0xd3, 0xd2, 0x68, 0xbb, 0x1, 0xb9, 0x3, 0xd0, 0x6a, 0x6b, 0xd1, 0x2, 0xb8, 0x6f, 0xd5, 0x6, 0xbc, 0xbd, 0x7, 0xd4, 0x6e, 0xd6, 0x6c, 0xbf, 0x5, 0x4, 0xbe, 0x6d, 0xd7, 0xde, 0x64, 0xb7, 0xd, 0xc, 0xb6, 0x65, 0xdf, 0x67, 0xdd, 0xe, 0xb4, 0xb5, 0xf, 0xdc, 0x66, 0xb1, 0xb, 0xd8, 0x62, 0x63, 0xd9, 0xa, 0xb0, 0x8, 0xb2, 0x61, 0xdb, 0xda, 0x60, 0xb3, 0x9, 0xa1, 0x1b, 0xc8, 0x72, 0x73, 0xc9, 0x1a, 0xa0, 0x18, 0xa2, 0x71, 0xcb, 0xca, 0x70, 0xa3, 0x19, 0xce, 0x74, 0xa7, 0x1d, 0x1c, 0xa6, 0x75, 0xcf, 0x77, 0xcd, 0x1e, 0xa4, 0xa5, 0x1f, 0xcc, 0x76, 0x7f, 0xc5, 0x16, 0xac, 0xad, 0x17, 0xc4, 0x7e, 0xc6, 0x7c, 0xaf, 0x15, 0x14, 0xae, 0x7d, 0xc7, 0x10, 0xaa, 0x79, 0xc3, 0xc2, 0x78, 0xab, 0x11, 0xa9, 0x13, 0xc0, 0x7a, 0x7b, 0xc1, 0x12, 0xa8, 0x5f, 0xe5, 0x36, 0x8c, 0x8d, 0x37, 0xe4, 0x5e, 0xe6, 0x5c, 0x8f, 0x35, 0x34, 0x8e, 0x5d, 0xe7, 0x30, 0x8a, 0x59, 0xe3, 0xe2, 0x58, 0x8b, 0x31, 0x89, 0x33, 0xe0, 0x5a, 0x5b, 0xe1, 0x32, 0x88, 0x81, 0x3b, 0xe8, 0x52, 0x53, 0xe9, 0x3a, 0x80, 0x38, 0x82, 0x51, 0xeb, 0xea, 0x50, 0x83, 0x39, 0xee, 0x54, 0x87, 0x3d, 0x3c, 0x86, 0x55, 0xef, 0x57, 0xed, 0x3e, 0x84, 0x85, 0x3f, 0xec, 0x56, 0xfe, 0x44, 0x97, 0x2d, 0x2c, 0x96, 0x45, 0xff, 0x47, 0xfd, 0x2e, 0x94, 0x95, 0x2f, 0xfc, 0x46, 0x91, 0x2b, 0xf8, 0x42, 0x43, 0xf9, 0x2a, 0x90, 0x28, 0x92, 0x41, 0xfb, 0xfa, 0x40, 0x93, 0x29, 0x20, 0x9a, 0x49, 0xf3, 0xf2, 0x48, 0x9b, 0x21, 0x99, 0x23, 0xf0, 0x4a, 0x4b, 0xf1, 0x22, 0x98, 0x4f, 0xf5, 0x26, 0x9c, 0x9d, 0x27, 0xf4, 0x4e, 0xf6, 0x4c, 0x9f, 0x25, 0x24, 0x9e, 0x4d, 0xf7}, - {0x0, 0xbb, 0x6b, 0xd0, 0xd6, 0x6d, 0xbd, 0x6, 0xb1, 0xa, 0xda, 0x61, 0x67, 0xdc, 0xc, 0xb7, 0x7f, 0xc4, 0x14, 0xaf, 0xa9, 0x12, 0xc2, 0x79, 0xce, 0x75, 0xa5, 0x1e, 0x18, 0xa3, 0x73, 0xc8, 0xfe, 0x45, 0x95, 0x2e, 0x28, 0x93, 0x43, 0xf8, 0x4f, 0xf4, 0x24, 0x9f, 0x99, 0x22, 0xf2, 0x49, 0x81, 0x3a, 0xea, 0x51, 0x57, 0xec, 0x3c, 0x87, 0x30, 0x8b, 0x5b, 0xe0, 0xe6, 0x5d, 0x8d, 0x36, 0xe1, 0x5a, 0x8a, 0x31, 0x37, 0x8c, 0x5c, 0xe7, 0x50, 0xeb, 0x3b, 0x80, 0x86, 0x3d, 0xed, 0x56, 0x9e, 0x25, 0xf5, 0x4e, 0x48, 0xf3, 0x23, 0x98, 0x2f, 0x94, 0x44, 0xff, 0xf9, 0x42, 0x92, 0x29, 0x1f, 0xa4, 0x74, 0xcf, 0xc9, 0x72, 0xa2, 0x19, 0xae, 0x15, 0xc5, 0x7e, 0x78, 0xc3, 0x13, 0xa8, 0x60, 0xdb, 0xb, 0xb0, 0xb6, 0xd, 0xdd, 0x66, 0xd1, 0x6a, 0xba, 0x1, 0x7, 0xbc, 0x6c, 0xd7, 0xdf, 0x64, 0xb4, 0xf, 0x9, 0xb2, 0x62, 0xd9, 0x6e, 0xd5, 0x5, 0xbe, 0xb8, 0x3, 0xd3, 0x68, 0xa0, 0x1b, 0xcb, 0x70, 0x76, 0xcd, 0x1d, 0xa6, 0x11, 0xaa, 0x7a, 0xc1, 0xc7, 0x7c, 0xac, 0x17, 0x21, 0x9a, 0x4a, 0xf1, 0xf7, 0x4c, 0x9c, 0x27, 0x90, 0x2b, 0xfb, 0x40, 0x46, 0xfd, 0x2d, 0x96, 0x5e, 0xe5, 0x35, 0x8e, 0x88, 0x33, 0xe3, 0x58, 0xef, 0x54, 0x84, 0x3f, 0x39, 0x82, 0x52, 0xe9, 0x3e, 0x85, 0x55, 0xee, 0xe8, 0x53, 0x83, 0x38, 0x8f, 0x34, 0xe4, 0x5f, 0x59, 0xe2, 0x32, 0x89, 0x41, 0xfa, 0x2a, 0x91, 0x97, 0x2c, 0xfc, 0x47, 0xf0, 0x4b, 0x9b, 0x20, 0x26, 0x9d, 0x4d, 0xf6, 0xc0, 0x7b, 0xab, 0x10, 0x16, 0xad, 0x7d, 0xc6, 0x71, 0xca, 0x1a, 0xa1, 0xa7, 0x1c, 0xcc, 0x77, 0xbf, 0x4, 0xd4, 0x6f, 0x69, 0xd2, 0x2, 0xb9, 0xe, 0xb5, 0x65, 0xde, 0xd8, 0x63, 0xb3, 0x8}, - {0x0, 0xbc, 0x65, 0xd9, 0xca, 0x76, 0xaf, 0x13, 0x89, 0x35, 0xec, 0x50, 0x43, 0xff, 0x26, 0x9a, 0xf, 0xb3, 0x6a, 0xd6, 0xc5, 0x79, 0xa0, 0x1c, 0x86, 0x3a, 0xe3, 0x5f, 0x4c, 0xf0, 0x29, 0x95, 0x1e, 0xa2, 0x7b, 0xc7, 0xd4, 0x68, 0xb1, 0xd, 0x97, 0x2b, 0xf2, 0x4e, 0x5d, 0xe1, 0x38, 0x84, 0x11, 0xad, 0x74, 0xc8, 0xdb, 0x67, 0xbe, 0x2, 0x98, 0x24, 0xfd, 0x41, 0x52, 0xee, 0x37, 0x8b, 0x3c, 0x80, 0x59, 0xe5, 0xf6, 0x4a, 0x93, 0x2f, 0xb5, 0x9, 0xd0, 0x6c, 0x7f, 0xc3, 0x1a, 0xa6, 0x33, 0x8f, 0x56, 0xea, 0xf9, 0x45, 0x9c, 0x20, 0xba, 0x6, 0xdf, 0x63, 0x70, 0xcc, 0x15, 0xa9, 0x22, 0x9e, 0x47, 0xfb, 0xe8, 0x54, 0x8d, 0x31, 0xab, 0x17, 0xce, 0x72, 0x61, 0xdd, 0x4, 0xb8, 0x2d, 0x91, 0x48, 0xf4, 0xe7, 0x5b, 0x82, 0x3e, 0xa4, 0x18, 0xc1, 0x7d, 0x6e, 0xd2, 0xb, 0xb7, 0x78, 0xc4, 0x1d, 0xa1, 0xb2, 0xe, 0xd7, 0x6b, 0xf1, 0x4d, 0x94, 0x28, 0x3b, 0x87, 0x5e, 0xe2, 0x77, 0xcb, 0x12, 0xae, 0xbd, 0x1, 0xd8, 0x64, 0xfe, 0x42, 0x9b, 0x27, 0x34, 0x88, 0x51, 0xed, 0x66, 0xda, 0x3, 0xbf, 0xac, 0x10, 0xc9, 0x75, 0xef, 0x53, 0x8a, 0x36, 0x25, 0x99, 0x40, 0xfc, 0x69, 0xd5, 0xc, 0xb0, 0xa3, 0x1f, 0xc6, 0x7a, 0xe0, 0x5c, 0x85, 0x39, 0x2a, 0x96, 0x4f, 0xf3, 0x44, 0xf8, 0x21, 0x9d, 0x8e, 0x32, 0xeb, 0x57, 0xcd, 0x71, 0xa8, 0x14, 0x7, 0xbb, 0x62, 0xde, 0x4b, 0xf7, 0x2e, 0x92, 0x81, 0x3d, 0xe4, 0x58, 0xc2, 0x7e, 0xa7, 0x1b, 0x8, 0xb4, 0x6d, 0xd1, 0x5a, 0xe6, 0x3f, 0x83, 0x90, 0x2c, 0xf5, 0x49, 0xd3, 0x6f, 0xb6, 0xa, 0x19, 0xa5, 0x7c, 0xc0, 0x55, 0xe9, 0x30, 0x8c, 0x9f, 0x23, 0xfa, 0x46, 0xdc, 0x60, 0xb9, 0x5, 0x16, 0xaa, 0x73, 0xcf}, - {0x0, 0xbd, 0x67, 0xda, 0xce, 0x73, 0xa9, 0x14, 0x81, 0x3c, 0xe6, 0x5b, 0x4f, 0xf2, 0x28, 0x95, 0x1f, 0xa2, 0x78, 0xc5, 0xd1, 0x6c, 0xb6, 0xb, 0x9e, 0x23, 0xf9, 0x44, 0x50, 0xed, 0x37, 0x8a, 0x3e, 0x83, 0x59, 0xe4, 0xf0, 0x4d, 0x97, 0x2a, 0xbf, 0x2, 0xd8, 0x65, 0x71, 0xcc, 0x16, 0xab, 0x21, 0x9c, 0x46, 0xfb, 0xef, 0x52, 0x88, 0x35, 0xa0, 0x1d, 0xc7, 0x7a, 0x6e, 0xd3, 0x9, 0xb4, 0x7c, 0xc1, 0x1b, 0xa6, 0xb2, 0xf, 0xd5, 0x68, 0xfd, 0x40, 0x9a, 0x27, 0x33, 0x8e, 0x54, 0xe9, 0x63, 0xde, 0x4, 0xb9, 0xad, 0x10, 0xca, 0x77, 0xe2, 0x5f, 0x85, 0x38, 0x2c, 0x91, 0x4b, 0xf6, 0x42, 0xff, 0x25, 0x98, 0x8c, 0x31, 0xeb, 0x56, 0xc3, 0x7e, 0xa4, 0x19, 0xd, 0xb0, 0x6a, 0xd7, 0x5d, 0xe0, 0x3a, 0x87, 0x93, 0x2e, 0xf4, 0x49, 0xdc, 0x61, 0xbb, 0x6, 0x12, 0xaf, 0x75, 0xc8, 0xf8, 0x45, 0x9f, 0x22, 0x36, 0x8b, 0x51, 0xec, 0x79, 0xc4, 0x1e, 0xa3, 0xb7, 0xa, 0xd0, 0x6d, 0xe7, 0x5a, 0x80, 0x3d, 0x29, 0x94, 0x4e, 0xf3, 0x66, 0xdb, 0x1, 0xbc, 0xa8, 0x15, 0xcf, 0x72, 0xc6, 0x7b, 0xa1, 0x1c, 0x8, 0xb5, 0x6f, 0xd2, 0x47, 0xfa, 0x20, 0x9d, 0x89, 0x34, 0xee, 0x53, 0xd9, 0x64, 0xbe, 0x3, 0x17, 0xaa, 0x70, 0xcd, 0x58, 0xe5, 0x3f, 0x82, 0x96, 0x2b, 0xf1, 0x4c, 0x84, 0x39, 0xe3, 0x5e, 0x4a, 0xf7, 0x2d, 0x90, 0x5, 0xb8, 0x62, 0xdf, 0xcb, 0x76, 0xac, 0x11, 0x9b, 0x26, 0xfc, 0x41, 0x55, 0xe8, 0x32, 0x8f, 0x1a, 0xa7, 0x7d, 0xc0, 0xd4, 0x69, 0xb3, 0xe, 0xba, 0x7, 0xdd, 0x60, 0x74, 0xc9, 0x13, 0xae, 0x3b, 0x86, 0x5c, 0xe1, 0xf5, 0x48, 0x92, 0x2f, 0xa5, 0x18, 0xc2, 0x7f, 0x6b, 0xd6, 0xc, 0xb1, 0x24, 0x99, 0x43, 0xfe, 0xea, 0x57, 0x8d, 0x30}, - {0x0, 0xbe, 0x61, 0xdf, 0xc2, 0x7c, 0xa3, 0x1d, 0x99, 0x27, 0xf8, 0x46, 0x5b, 0xe5, 0x3a, 0x84, 0x2f, 0x91, 0x4e, 0xf0, 0xed, 0x53, 0x8c, 0x32, 0xb6, 0x8, 0xd7, 0x69, 0x74, 0xca, 0x15, 0xab, 0x5e, 0xe0, 0x3f, 0x81, 0x9c, 0x22, 0xfd, 0x43, 0xc7, 0x79, 0xa6, 0x18, 0x5, 0xbb, 0x64, 0xda, 0x71, 0xcf, 0x10, 0xae, 0xb3, 0xd, 0xd2, 0x6c, 0xe8, 0x56, 0x89, 0x37, 0x2a, 0x94, 0x4b, 0xf5, 0xbc, 0x2, 0xdd, 0x63, 0x7e, 0xc0, 0x1f, 0xa1, 0x25, 0x9b, 0x44, 0xfa, 0xe7, 0x59, 0x86, 0x38, 0x93, 0x2d, 0xf2, 0x4c, 0x51, 0xef, 0x30, 0x8e, 0xa, 0xb4, 0x6b, 0xd5, 0xc8, 0x76, 0xa9, 0x17, 0xe2, 0x5c, 0x83, 0x3d, 0x20, 0x9e, 0x41, 0xff, 0x7b, 0xc5, 0x1a, 0xa4, 0xb9, 0x7, 0xd8, 0x66, 0xcd, 0x73, 0xac, 0x12, 0xf, 0xb1, 0x6e, 0xd0, 0x54, 0xea, 0x35, 0x8b, 0x96, 0x28, 0xf7, 0x49, 0x65, 0xdb, 0x4, 0xba, 0xa7, 0x19, 0xc6, 0x78, 0xfc, 0x42, 0x9d, 0x23, 0x3e, 0x80, 0x5f, 0xe1, 0x4a, 0xf4, 0x2b, 0x95, 0x88, 0x36, 0xe9, 0x57, 0xd3, 0x6d, 0xb2, 0xc, 0x11, 0xaf, 0x70, 0xce, 0x3b, 0x85, 0x5a, 0xe4, 0xf9, 0x47, 0x98, 0x26, 0xa2, 0x1c, 0xc3, 0x7d, 0x60, 0xde, 0x1, 0xbf, 0x14, 0xaa, 0x75, 0xcb, 0xd6, 0x68, 0xb7, 0x9, 0x8d, 0x33, 0xec, 0x52, 0x4f, 0xf1, 0x2e, 0x90, 0xd9, 0x67, 0xb8, 0x6, 0x1b, 0xa5, 0x7a, 0xc4, 0x40, 0xfe, 0x21, 0x9f, 0x82, 0x3c, 0xe3, 0x5d, 0xf6, 0x48, 0x97, 0x29, 0x34, 0x8a, 0x55, 0xeb, 0x6f, 0xd1, 0xe, 0xb0, 0xad, 0x13, 0xcc, 0x72, 0x87, 0x39, 0xe6, 0x58, 0x45, 0xfb, 0x24, 0x9a, 0x1e, 0xa0, 0x7f, 0xc1, 0xdc, 0x62, 0xbd, 0x3, 0xa8, 0x16, 0xc9, 0x77, 0x6a, 0xd4, 0xb, 0xb5, 0x31, 0x8f, 0x50, 0xee, 0xf3, 0x4d, 0x92, 0x2c}, - {0x0, 0xbf, 0x63, 0xdc, 0xc6, 0x79, 0xa5, 0x1a, 0x91, 0x2e, 0xf2, 0x4d, 0x57, 0xe8, 0x34, 0x8b, 0x3f, 0x80, 0x5c, 0xe3, 0xf9, 0x46, 0x9a, 0x25, 0xae, 0x11, 0xcd, 0x72, 0x68, 0xd7, 0xb, 0xb4, 0x7e, 0xc1, 0x1d, 0xa2, 0xb8, 0x7, 0xdb, 0x64, 0xef, 0x50, 0x8c, 0x33, 0x29, 0x96, 0x4a, 0xf5, 0x41, 0xfe, 0x22, 0x9d, 0x87, 0x38, 0xe4, 0x5b, 0xd0, 0x6f, 0xb3, 0xc, 0x16, 0xa9, 0x75, 0xca, 0xfc, 0x43, 0x9f, 0x20, 0x3a, 0x85, 0x59, 0xe6, 0x6d, 0xd2, 0xe, 0xb1, 0xab, 0x14, 0xc8, 0x77, 0xc3, 0x7c, 0xa0, 0x1f, 0x5, 0xba, 0x66, 0xd9, 0x52, 0xed, 0x31, 0x8e, 0x94, 0x2b, 0xf7, 0x48, 0x82, 0x3d, 0xe1, 0x5e, 0x44, 0xfb, 0x27, 0x98, 0x13, 0xac, 0x70, 0xcf, 0xd5, 0x6a, 0xb6, 0x9, 0xbd, 0x2, 0xde, 0x61, 0x7b, 0xc4, 0x18, 0xa7, 0x2c, 0x93, 0x4f, 0xf0, 0xea, 0x55, 0x89, 0x36, 0xe5, 0x5a, 0x86, 0x39, 0x23, 0x9c, 0x40, 0xff, 0x74, 0xcb, 0x17, 0xa8, 0xb2, 0xd, 0xd1, 0x6e, 0xda, 0x65, 0xb9, 0x6, 0x1c, 0xa3, 0x7f, 0xc0, 0x4b, 0xf4, 0x28, 0x97, 0x8d, 0x32, 0xee, 0x51, 0x9b, 0x24, 0xf8, 0x47, 0x5d, 0xe2, 0x3e, 0x81, 0xa, 0xb5, 0x69, 0xd6, 0xcc, 0x73, 0xaf, 0x10, 0xa4, 0x1b, 0xc7, 0x78, 0x62, 0xdd, 0x1, 0xbe, 0x35, 0x8a, 0x56, 0xe9, 0xf3, 0x4c, 0x90, 0x2f, 0x19, 0xa6, 0x7a, 0xc5, 0xdf, 0x60, 0xbc, 0x3, 0x88, 0x37, 0xeb, 0x54, 0x4e, 0xf1, 0x2d, 0x92, 0x26, 0x99, 0x45, 0xfa, 0xe0, 0x5f, 0x83, 0x3c, 0xb7, 0x8, 0xd4, 0x6b, 0x71, 0xce, 0x12, 0xad, 0x67, 0xd8, 0x4, 0xbb, 0xa1, 0x1e, 0xc2, 0x7d, 0xf6, 0x49, 0x95, 0x2a, 0x30, 0x8f, 0x53, 0xec, 0x58, 0xe7, 0x3b, 0x84, 0x9e, 0x21, 0xfd, 0x42, 0xc9, 0x76, 0xaa, 0x15, 0xf, 0xb0, 0x6c, 0xd3}, - {0x0, 0xc0, 0x9d, 0x5d, 0x27, 0xe7, 0xba, 0x7a, 0x4e, 0x8e, 0xd3, 0x13, 0x69, 0xa9, 0xf4, 0x34, 0x9c, 0x5c, 0x1, 0xc1, 0xbb, 0x7b, 0x26, 0xe6, 0xd2, 0x12, 0x4f, 0x8f, 0xf5, 0x35, 0x68, 0xa8, 0x25, 0xe5, 0xb8, 0x78, 0x2, 0xc2, 0x9f, 0x5f, 0x6b, 0xab, 0xf6, 0x36, 0x4c, 0x8c, 0xd1, 0x11, 0xb9, 0x79, 0x24, 0xe4, 0x9e, 0x5e, 0x3, 0xc3, 0xf7, 0x37, 0x6a, 0xaa, 0xd0, 0x10, 0x4d, 0x8d, 0x4a, 0x8a, 0xd7, 0x17, 0x6d, 0xad, 0xf0, 0x30, 0x4, 0xc4, 0x99, 0x59, 0x23, 0xe3, 0xbe, 0x7e, 0xd6, 0x16, 0x4b, 0x8b, 0xf1, 0x31, 0x6c, 0xac, 0x98, 0x58, 0x5, 0xc5, 0xbf, 0x7f, 0x22, 0xe2, 0x6f, 0xaf, 0xf2, 0x32, 0x48, 0x88, 0xd5, 0x15, 0x21, 0xe1, 0xbc, 0x7c, 0x6, 0xc6, 0x9b, 0x5b, 0xf3, 0x33, 0x6e, 0xae, 0xd4, 0x14, 0x49, 0x89, 0xbd, 0x7d, 0x20, 0xe0, 0x9a, 0x5a, 0x7, 0xc7, 0x94, 0x54, 0x9, 0xc9, 0xb3, 0x73, 0x2e, 0xee, 0xda, 0x1a, 0x47, 0x87, 0xfd, 0x3d, 0x60, 0xa0, 0x8, 0xc8, 0x95, 0x55, 0x2f, 0xef, 0xb2, 0x72, 0x46, 0x86, 0xdb, 0x1b, 0x61, 0xa1, 0xfc, 0x3c, 0xb1, 0x71, 0x2c, 0xec, 0x96, 0x56, 0xb, 0xcb, 0xff, 0x3f, 0x62, 0xa2, 0xd8, 0x18, 0x45, 0x85, 0x2d, 0xed, 0xb0, 0x70, 0xa, 0xca, 0x97, 0x57, 0x63, 0xa3, 0xfe, 0x3e, 0x44, 0x84, 0xd9, 0x19, 0xde, 0x1e, 0x43, 0x83, 0xf9, 0x39, 0x64, 0xa4, 0x90, 0x50, 0xd, 0xcd, 0xb7, 0x77, 0x2a, 0xea, 0x42, 0x82, 0xdf, 0x1f, 0x65, 0xa5, 0xf8, 0x38, 0xc, 0xcc, 0x91, 0x51, 0x2b, 0xeb, 0xb6, 0x76, 0xfb, 0x3b, 0x66, 0xa6, 0xdc, 0x1c, 0x41, 0x81, 0xb5, 0x75, 0x28, 0xe8, 0x92, 0x52, 0xf, 0xcf, 0x67, 0xa7, 0xfa, 0x3a, 0x40, 0x80, 0xdd, 0x1d, 0x29, 0xe9, 0xb4, 0x74, 0xe, 0xce, 0x93, 0x53}, - {0x0, 0xc1, 0x9f, 0x5e, 0x23, 0xe2, 0xbc, 0x7d, 0x46, 0x87, 0xd9, 0x18, 0x65, 0xa4, 0xfa, 0x3b, 0x8c, 0x4d, 0x13, 0xd2, 0xaf, 0x6e, 0x30, 0xf1, 0xca, 0xb, 0x55, 0x94, 0xe9, 0x28, 0x76, 0xb7, 0x5, 0xc4, 0x9a, 0x5b, 0x26, 0xe7, 0xb9, 0x78, 0x43, 0x82, 0xdc, 0x1d, 0x60, 0xa1, 0xff, 0x3e, 0x89, 0x48, 0x16, 0xd7, 0xaa, 0x6b, 0x35, 0xf4, 0xcf, 0xe, 0x50, 0x91, 0xec, 0x2d, 0x73, 0xb2, 0xa, 0xcb, 0x95, 0x54, 0x29, 0xe8, 0xb6, 0x77, 0x4c, 0x8d, 0xd3, 0x12, 0x6f, 0xae, 0xf0, 0x31, 0x86, 0x47, 0x19, 0xd8, 0xa5, 0x64, 0x3a, 0xfb, 0xc0, 0x1, 0x5f, 0x9e, 0xe3, 0x22, 0x7c, 0xbd, 0xf, 0xce, 0x90, 0x51, 0x2c, 0xed, 0xb3, 0x72, 0x49, 0x88, 0xd6, 0x17, 0x6a, 0xab, 0xf5, 0x34, 0x83, 0x42, 0x1c, 0xdd, 0xa0, 0x61, 0x3f, 0xfe, 0xc5, 0x4, 0x5a, 0x9b, 0xe6, 0x27, 0x79, 0xb8, 0x14, 0xd5, 0x8b, 0x4a, 0x37, 0xf6, 0xa8, 0x69, 0x52, 0x93, 0xcd, 0xc, 0x71, 0xb0, 0xee, 0x2f, 0x98, 0x59, 0x7, 0xc6, 0xbb, 0x7a, 0x24, 0xe5, 0xde, 0x1f, 0x41, 0x80, 0xfd, 0x3c, 0x62, 0xa3, 0x11, 0xd0, 0x8e, 0x4f, 0x32, 0xf3, 0xad, 0x6c, 0x57, 0x96, 0xc8, 0x9, 0x74, 0xb5, 0xeb, 0x2a, 0x9d, 0x5c, 0x2, 0xc3, 0xbe, 0x7f, 0x21, 0xe0, 0xdb, 0x1a, 0x44, 0x85, 0xf8, 0x39, 0x67, 0xa6, 0x1e, 0xdf, 0x81, 0x40, 0x3d, 0xfc, 0xa2, 0x63, 0x58, 0x99, 0xc7, 0x6, 0x7b, 0xba, 0xe4, 0x25, 0x92, 0x53, 0xd, 0xcc, 0xb1, 0x70, 0x2e, 0xef, 0xd4, 0x15, 0x4b, 0x8a, 0xf7, 0x36, 0x68, 0xa9, 0x1b, 0xda, 0x84, 0x45, 0x38, 0xf9, 0xa7, 0x66, 0x5d, 0x9c, 0xc2, 0x3, 0x7e, 0xbf, 0xe1, 0x20, 0x97, 0x56, 0x8, 0xc9, 0xb4, 0x75, 0x2b, 0xea, 0xd1, 0x10, 0x4e, 0x8f, 0xf2, 0x33, 0x6d, 0xac}, - {0x0, 0xc2, 0x99, 0x5b, 0x2f, 0xed, 0xb6, 0x74, 0x5e, 0x9c, 0xc7, 0x5, 0x71, 0xb3, 0xe8, 0x2a, 0xbc, 0x7e, 0x25, 0xe7, 0x93, 0x51, 0xa, 0xc8, 0xe2, 0x20, 0x7b, 0xb9, 0xcd, 0xf, 0x54, 0x96, 0x65, 0xa7, 0xfc, 0x3e, 0x4a, 0x88, 0xd3, 0x11, 0x3b, 0xf9, 0xa2, 0x60, 0x14, 0xd6, 0x8d, 0x4f, 0xd9, 0x1b, 0x40, 0x82, 0xf6, 0x34, 0x6f, 0xad, 0x87, 0x45, 0x1e, 0xdc, 0xa8, 0x6a, 0x31, 0xf3, 0xca, 0x8, 0x53, 0x91, 0xe5, 0x27, 0x7c, 0xbe, 0x94, 0x56, 0xd, 0xcf, 0xbb, 0x79, 0x22, 0xe0, 0x76, 0xb4, 0xef, 0x2d, 0x59, 0x9b, 0xc0, 0x2, 0x28, 0xea, 0xb1, 0x73, 0x7, 0xc5, 0x9e, 0x5c, 0xaf, 0x6d, 0x36, 0xf4, 0x80, 0x42, 0x19, 0xdb, 0xf1, 0x33, 0x68, 0xaa, 0xde, 0x1c, 0x47, 0x85, 0x13, 0xd1, 0x8a, 0x48, 0x3c, 0xfe, 0xa5, 0x67, 0x4d, 0x8f, 0xd4, 0x16, 0x62, 0xa0, 0xfb, 0x39, 0x89, 0x4b, 0x10, 0xd2, 0xa6, 0x64, 0x3f, 0xfd, 0xd7, 0x15, 0x4e, 0x8c, 0xf8, 0x3a, 0x61, 0xa3, 0x35, 0xf7, 0xac, 0x6e, 0x1a, 0xd8, 0x83, 0x41, 0x6b, 0xa9, 0xf2, 0x30, 0x44, 0x86, 0xdd, 0x1f, 0xec, 0x2e, 0x75, 0xb7, 0xc3, 0x1, 0x5a, 0x98, 0xb2, 0x70, 0x2b, 0xe9, 0x9d, 0x5f, 0x4, 0xc6, 0x50, 0x92, 0xc9, 0xb, 0x7f, 0xbd, 0xe6, 0x24, 0xe, 0xcc, 0x97, 0x55, 0x21, 0xe3, 0xb8, 0x7a, 0x43, 0x81, 0xda, 0x18, 0x6c, 0xae, 0xf5, 0x37, 0x1d, 0xdf, 0x84, 0x46, 0x32, 0xf0, 0xab, 0x69, 0xff, 0x3d, 0x66, 0xa4, 0xd0, 0x12, 0x49, 0x8b, 0xa1, 0x63, 0x38, 0xfa, 0x8e, 0x4c, 0x17, 0xd5, 0x26, 0xe4, 0xbf, 0x7d, 0x9, 0xcb, 0x90, 0x52, 0x78, 0xba, 0xe1, 0x23, 0x57, 0x95, 0xce, 0xc, 0x9a, 0x58, 0x3, 0xc1, 0xb5, 0x77, 0x2c, 0xee, 0xc4, 0x6, 0x5d, 0x9f, 0xeb, 0x29, 0x72, 0xb0}, - {0x0, 0xc3, 0x9b, 0x58, 0x2b, 0xe8, 0xb0, 0x73, 0x56, 0x95, 0xcd, 0xe, 0x7d, 0xbe, 0xe6, 0x25, 0xac, 0x6f, 0x37, 0xf4, 0x87, 0x44, 0x1c, 0xdf, 0xfa, 0x39, 0x61, 0xa2, 0xd1, 0x12, 0x4a, 0x89, 0x45, 0x86, 0xde, 0x1d, 0x6e, 0xad, 0xf5, 0x36, 0x13, 0xd0, 0x88, 0x4b, 0x38, 0xfb, 0xa3, 0x60, 0xe9, 0x2a, 0x72, 0xb1, 0xc2, 0x1, 0x59, 0x9a, 0xbf, 0x7c, 0x24, 0xe7, 0x94, 0x57, 0xf, 0xcc, 0x8a, 0x49, 0x11, 0xd2, 0xa1, 0x62, 0x3a, 0xf9, 0xdc, 0x1f, 0x47, 0x84, 0xf7, 0x34, 0x6c, 0xaf, 0x26, 0xe5, 0xbd, 0x7e, 0xd, 0xce, 0x96, 0x55, 0x70, 0xb3, 0xeb, 0x28, 0x5b, 0x98, 0xc0, 0x3, 0xcf, 0xc, 0x54, 0x97, 0xe4, 0x27, 0x7f, 0xbc, 0x99, 0x5a, 0x2, 0xc1, 0xb2, 0x71, 0x29, 0xea, 0x63, 0xa0, 0xf8, 0x3b, 0x48, 0x8b, 0xd3, 0x10, 0x35, 0xf6, 0xae, 0x6d, 0x1e, 0xdd, 0x85, 0x46, 0x9, 0xca, 0x92, 0x51, 0x22, 0xe1, 0xb9, 0x7a, 0x5f, 0x9c, 0xc4, 0x7, 0x74, 0xb7, 0xef, 0x2c, 0xa5, 0x66, 0x3e, 0xfd, 0x8e, 0x4d, 0x15, 0xd6, 0xf3, 0x30, 0x68, 0xab, 0xd8, 0x1b, 0x43, 0x80, 0x4c, 0x8f, 0xd7, 0x14, 0x67, 0xa4, 0xfc, 0x3f, 0x1a, 0xd9, 0x81, 0x42, 0x31, 0xf2, 0xaa, 0x69, 0xe0, 0x23, 0x7b, 0xb8, 0xcb, 0x8, 0x50, 0x93, 0xb6, 0x75, 0x2d, 0xee, 0x9d, 0x5e, 0x6, 0xc5, 0x83, 0x40, 0x18, 0xdb, 0xa8, 0x6b, 0x33, 0xf0, 0xd5, 0x16, 0x4e, 0x8d, 0xfe, 0x3d, 0x65, 0xa6, 0x2f, 0xec, 0xb4, 0x77, 0x4, 0xc7, 0x9f, 0x5c, 0x79, 0xba, 0xe2, 0x21, 0x52, 0x91, 0xc9, 0xa, 0xc6, 0x5, 0x5d, 0x9e, 0xed, 0x2e, 0x76, 0xb5, 0x90, 0x53, 0xb, 0xc8, 0xbb, 0x78, 0x20, 0xe3, 0x6a, 0xa9, 0xf1, 0x32, 0x41, 0x82, 0xda, 0x19, 0x3c, 0xff, 0xa7, 0x64, 0x17, 0xd4, 0x8c, 0x4f}, - {0x0, 0xc4, 0x95, 0x51, 0x37, 0xf3, 0xa2, 0x66, 0x6e, 0xaa, 0xfb, 0x3f, 0x59, 0x9d, 0xcc, 0x8, 0xdc, 0x18, 0x49, 0x8d, 0xeb, 0x2f, 0x7e, 0xba, 0xb2, 0x76, 0x27, 0xe3, 0x85, 0x41, 0x10, 0xd4, 0xa5, 0x61, 0x30, 0xf4, 0x92, 0x56, 0x7, 0xc3, 0xcb, 0xf, 0x5e, 0x9a, 0xfc, 0x38, 0x69, 0xad, 0x79, 0xbd, 0xec, 0x28, 0x4e, 0x8a, 0xdb, 0x1f, 0x17, 0xd3, 0x82, 0x46, 0x20, 0xe4, 0xb5, 0x71, 0x57, 0x93, 0xc2, 0x6, 0x60, 0xa4, 0xf5, 0x31, 0x39, 0xfd, 0xac, 0x68, 0xe, 0xca, 0x9b, 0x5f, 0x8b, 0x4f, 0x1e, 0xda, 0xbc, 0x78, 0x29, 0xed, 0xe5, 0x21, 0x70, 0xb4, 0xd2, 0x16, 0x47, 0x83, 0xf2, 0x36, 0x67, 0xa3, 0xc5, 0x1, 0x50, 0x94, 0x9c, 0x58, 0x9, 0xcd, 0xab, 0x6f, 0x3e, 0xfa, 0x2e, 0xea, 0xbb, 0x7f, 0x19, 0xdd, 0x8c, 0x48, 0x40, 0x84, 0xd5, 0x11, 0x77, 0xb3, 0xe2, 0x26, 0xae, 0x6a, 0x3b, 0xff, 0x99, 0x5d, 0xc, 0xc8, 0xc0, 0x4, 0x55, 0x91, 0xf7, 0x33, 0x62, 0xa6, 0x72, 0xb6, 0xe7, 0x23, 0x45, 0x81, 0xd0, 0x14, 0x1c, 0xd8, 0x89, 0x4d, 0x2b, 0xef, 0xbe, 0x7a, 0xb, 0xcf, 0x9e, 0x5a, 0x3c, 0xf8, 0xa9, 0x6d, 0x65, 0xa1, 0xf0, 0x34, 0x52, 0x96, 0xc7, 0x3, 0xd7, 0x13, 0x42, 0x86, 0xe0, 0x24, 0x75, 0xb1, 0xb9, 0x7d, 0x2c, 0xe8, 0x8e, 0x4a, 0x1b, 0xdf, 0xf9, 0x3d, 0x6c, 0xa8, 0xce, 0xa, 0x5b, 0x9f, 0x97, 0x53, 0x2, 0xc6, 0xa0, 0x64, 0x35, 0xf1, 0x25, 0xe1, 0xb0, 0x74, 0x12, 0xd6, 0x87, 0x43, 0x4b, 0x8f, 0xde, 0x1a, 0x7c, 0xb8, 0xe9, 0x2d, 0x5c, 0x98, 0xc9, 0xd, 0x6b, 0xaf, 0xfe, 0x3a, 0x32, 0xf6, 0xa7, 0x63, 0x5, 0xc1, 0x90, 0x54, 0x80, 0x44, 0x15, 0xd1, 0xb7, 0x73, 0x22, 0xe6, 0xee, 0x2a, 0x7b, 0xbf, 0xd9, 0x1d, 0x4c, 0x88}, - {0x0, 0xc5, 0x97, 0x52, 0x33, 0xf6, 0xa4, 0x61, 0x66, 0xa3, 0xf1, 0x34, 0x55, 0x90, 0xc2, 0x7, 0xcc, 0x9, 0x5b, 0x9e, 0xff, 0x3a, 0x68, 0xad, 0xaa, 0x6f, 0x3d, 0xf8, 0x99, 0x5c, 0xe, 0xcb, 0x85, 0x40, 0x12, 0xd7, 0xb6, 0x73, 0x21, 0xe4, 0xe3, 0x26, 0x74, 0xb1, 0xd0, 0x15, 0x47, 0x82, 0x49, 0x8c, 0xde, 0x1b, 0x7a, 0xbf, 0xed, 0x28, 0x2f, 0xea, 0xb8, 0x7d, 0x1c, 0xd9, 0x8b, 0x4e, 0x17, 0xd2, 0x80, 0x45, 0x24, 0xe1, 0xb3, 0x76, 0x71, 0xb4, 0xe6, 0x23, 0x42, 0x87, 0xd5, 0x10, 0xdb, 0x1e, 0x4c, 0x89, 0xe8, 0x2d, 0x7f, 0xba, 0xbd, 0x78, 0x2a, 0xef, 0x8e, 0x4b, 0x19, 0xdc, 0x92, 0x57, 0x5, 0xc0, 0xa1, 0x64, 0x36, 0xf3, 0xf4, 0x31, 0x63, 0xa6, 0xc7, 0x2, 0x50, 0x95, 0x5e, 0x9b, 0xc9, 0xc, 0x6d, 0xa8, 0xfa, 0x3f, 0x38, 0xfd, 0xaf, 0x6a, 0xb, 0xce, 0x9c, 0x59, 0x2e, 0xeb, 0xb9, 0x7c, 0x1d, 0xd8, 0x8a, 0x4f, 0x48, 0x8d, 0xdf, 0x1a, 0x7b, 0xbe, 0xec, 0x29, 0xe2, 0x27, 0x75, 0xb0, 0xd1, 0x14, 0x46, 0x83, 0x84, 0x41, 0x13, 0xd6, 0xb7, 0x72, 0x20, 0xe5, 0xab, 0x6e, 0x3c, 0xf9, 0x98, 0x5d, 0xf, 0xca, 0xcd, 0x8, 0x5a, 0x9f, 0xfe, 0x3b, 0x69, 0xac, 0x67, 0xa2, 0xf0, 0x35, 0x54, 0x91, 0xc3, 0x6, 0x1, 0xc4, 0x96, 0x53, 0x32, 0xf7, 0xa5, 0x60, 0x39, 0xfc, 0xae, 0x6b, 0xa, 0xcf, 0x9d, 0x58, 0x5f, 0x9a, 0xc8, 0xd, 0x6c, 0xa9, 0xfb, 0x3e, 0xf5, 0x30, 0x62, 0xa7, 0xc6, 0x3, 0x51, 0x94, 0x93, 0x56, 0x4, 0xc1, 0xa0, 0x65, 0x37, 0xf2, 0xbc, 0x79, 0x2b, 0xee, 0x8f, 0x4a, 0x18, 0xdd, 0xda, 0x1f, 0x4d, 0x88, 0xe9, 0x2c, 0x7e, 0xbb, 0x70, 0xb5, 0xe7, 0x22, 0x43, 0x86, 0xd4, 0x11, 0x16, 0xd3, 0x81, 0x44, 0x25, 0xe0, 0xb2, 0x77}, - {0x0, 0xc6, 0x91, 0x57, 0x3f, 0xf9, 0xae, 0x68, 0x7e, 0xb8, 0xef, 0x29, 0x41, 0x87, 0xd0, 0x16, 0xfc, 0x3a, 0x6d, 0xab, 0xc3, 0x5, 0x52, 0x94, 0x82, 0x44, 0x13, 0xd5, 0xbd, 0x7b, 0x2c, 0xea, 0xe5, 0x23, 0x74, 0xb2, 0xda, 0x1c, 0x4b, 0x8d, 0x9b, 0x5d, 0xa, 0xcc, 0xa4, 0x62, 0x35, 0xf3, 0x19, 0xdf, 0x88, 0x4e, 0x26, 0xe0, 0xb7, 0x71, 0x67, 0xa1, 0xf6, 0x30, 0x58, 0x9e, 0xc9, 0xf, 0xd7, 0x11, 0x46, 0x80, 0xe8, 0x2e, 0x79, 0xbf, 0xa9, 0x6f, 0x38, 0xfe, 0x96, 0x50, 0x7, 0xc1, 0x2b, 0xed, 0xba, 0x7c, 0x14, 0xd2, 0x85, 0x43, 0x55, 0x93, 0xc4, 0x2, 0x6a, 0xac, 0xfb, 0x3d, 0x32, 0xf4, 0xa3, 0x65, 0xd, 0xcb, 0x9c, 0x5a, 0x4c, 0x8a, 0xdd, 0x1b, 0x73, 0xb5, 0xe2, 0x24, 0xce, 0x8, 0x5f, 0x99, 0xf1, 0x37, 0x60, 0xa6, 0xb0, 0x76, 0x21, 0xe7, 0x8f, 0x49, 0x1e, 0xd8, 0xb3, 0x75, 0x22, 0xe4, 0x8c, 0x4a, 0x1d, 0xdb, 0xcd, 0xb, 0x5c, 0x9a, 0xf2, 0x34, 0x63, 0xa5, 0x4f, 0x89, 0xde, 0x18, 0x70, 0xb6, 0xe1, 0x27, 0x31, 0xf7, 0xa0, 0x66, 0xe, 0xc8, 0x9f, 0x59, 0x56, 0x90, 0xc7, 0x1, 0x69, 0xaf, 0xf8, 0x3e, 0x28, 0xee, 0xb9, 0x7f, 0x17, 0xd1, 0x86, 0x40, 0xaa, 0x6c, 0x3b, 0xfd, 0x95, 0x53, 0x4, 0xc2, 0xd4, 0x12, 0x45, 0x83, 0xeb, 0x2d, 0x7a, 0xbc, 0x64, 0xa2, 0xf5, 0x33, 0x5b, 0x9d, 0xca, 0xc, 0x1a, 0xdc, 0x8b, 0x4d, 0x25, 0xe3, 0xb4, 0x72, 0x98, 0x5e, 0x9, 0xcf, 0xa7, 0x61, 0x36, 0xf0, 0xe6, 0x20, 0x77, 0xb1, 0xd9, 0x1f, 0x48, 0x8e, 0x81, 0x47, 0x10, 0xd6, 0xbe, 0x78, 0x2f, 0xe9, 0xff, 0x39, 0x6e, 0xa8, 0xc0, 0x6, 0x51, 0x97, 0x7d, 0xbb, 0xec, 0x2a, 0x42, 0x84, 0xd3, 0x15, 0x3, 0xc5, 0x92, 0x54, 0x3c, 0xfa, 0xad, 0x6b}, - {0x0, 0xc7, 0x93, 0x54, 0x3b, 0xfc, 0xa8, 0x6f, 0x76, 0xb1, 0xe5, 0x22, 0x4d, 0x8a, 0xde, 0x19, 0xec, 0x2b, 0x7f, 0xb8, 0xd7, 0x10, 0x44, 0x83, 0x9a, 0x5d, 0x9, 0xce, 0xa1, 0x66, 0x32, 0xf5, 0xc5, 0x2, 0x56, 0x91, 0xfe, 0x39, 0x6d, 0xaa, 0xb3, 0x74, 0x20, 0xe7, 0x88, 0x4f, 0x1b, 0xdc, 0x29, 0xee, 0xba, 0x7d, 0x12, 0xd5, 0x81, 0x46, 0x5f, 0x98, 0xcc, 0xb, 0x64, 0xa3, 0xf7, 0x30, 0x97, 0x50, 0x4, 0xc3, 0xac, 0x6b, 0x3f, 0xf8, 0xe1, 0x26, 0x72, 0xb5, 0xda, 0x1d, 0x49, 0x8e, 0x7b, 0xbc, 0xe8, 0x2f, 0x40, 0x87, 0xd3, 0x14, 0xd, 0xca, 0x9e, 0x59, 0x36, 0xf1, 0xa5, 0x62, 0x52, 0x95, 0xc1, 0x6, 0x69, 0xae, 0xfa, 0x3d, 0x24, 0xe3, 0xb7, 0x70, 0x1f, 0xd8, 0x8c, 0x4b, 0xbe, 0x79, 0x2d, 0xea, 0x85, 0x42, 0x16, 0xd1, 0xc8, 0xf, 0x5b, 0x9c, 0xf3, 0x34, 0x60, 0xa7, 0x33, 0xf4, 0xa0, 0x67, 0x8, 0xcf, 0x9b, 0x5c, 0x45, 0x82, 0xd6, 0x11, 0x7e, 0xb9, 0xed, 0x2a, 0xdf, 0x18, 0x4c, 0x8b, 0xe4, 0x23, 0x77, 0xb0, 0xa9, 0x6e, 0x3a, 0xfd, 0x92, 0x55, 0x1, 0xc6, 0xf6, 0x31, 0x65, 0xa2, 0xcd, 0xa, 0x5e, 0x99, 0x80, 0x47, 0x13, 0xd4, 0xbb, 0x7c, 0x28, 0xef, 0x1a, 0xdd, 0x89, 0x4e, 0x21, 0xe6, 0xb2, 0x75, 0x6c, 0xab, 0xff, 0x38, 0x57, 0x90, 0xc4, 0x3, 0xa4, 0x63, 0x37, 0xf0, 0x9f, 0x58, 0xc, 0xcb, 0xd2, 0x15, 0x41, 0x86, 0xe9, 0x2e, 0x7a, 0xbd, 0x48, 0x8f, 0xdb, 0x1c, 0x73, 0xb4, 0xe0, 0x27, 0x3e, 0xf9, 0xad, 0x6a, 0x5, 0xc2, 0x96, 0x51, 0x61, 0xa6, 0xf2, 0x35, 0x5a, 0x9d, 0xc9, 0xe, 0x17, 0xd0, 0x84, 0x43, 0x2c, 0xeb, 0xbf, 0x78, 0x8d, 0x4a, 0x1e, 0xd9, 0xb6, 0x71, 0x25, 0xe2, 0xfb, 0x3c, 0x68, 0xaf, 0xc0, 0x7, 0x53, 0x94}, - {0x0, 0xc8, 0x8d, 0x45, 0x7, 0xcf, 0x8a, 0x42, 0xe, 0xc6, 0x83, 0x4b, 0x9, 0xc1, 0x84, 0x4c, 0x1c, 0xd4, 0x91, 0x59, 0x1b, 0xd3, 0x96, 0x5e, 0x12, 0xda, 0x9f, 0x57, 0x15, 0xdd, 0x98, 0x50, 0x38, 0xf0, 0xb5, 0x7d, 0x3f, 0xf7, 0xb2, 0x7a, 0x36, 0xfe, 0xbb, 0x73, 0x31, 0xf9, 0xbc, 0x74, 0x24, 0xec, 0xa9, 0x61, 0x23, 0xeb, 0xae, 0x66, 0x2a, 0xe2, 0xa7, 0x6f, 0x2d, 0xe5, 0xa0, 0x68, 0x70, 0xb8, 0xfd, 0x35, 0x77, 0xbf, 0xfa, 0x32, 0x7e, 0xb6, 0xf3, 0x3b, 0x79, 0xb1, 0xf4, 0x3c, 0x6c, 0xa4, 0xe1, 0x29, 0x6b, 0xa3, 0xe6, 0x2e, 0x62, 0xaa, 0xef, 0x27, 0x65, 0xad, 0xe8, 0x20, 0x48, 0x80, 0xc5, 0xd, 0x4f, 0x87, 0xc2, 0xa, 0x46, 0x8e, 0xcb, 0x3, 0x41, 0x89, 0xcc, 0x4, 0x54, 0x9c, 0xd9, 0x11, 0x53, 0x9b, 0xde, 0x16, 0x5a, 0x92, 0xd7, 0x1f, 0x5d, 0x95, 0xd0, 0x18, 0xe0, 0x28, 0x6d, 0xa5, 0xe7, 0x2f, 0x6a, 0xa2, 0xee, 0x26, 0x63, 0xab, 0xe9, 0x21, 0x64, 0xac, 0xfc, 0x34, 0x71, 0xb9, 0xfb, 0x33, 0x76, 0xbe, 0xf2, 0x3a, 0x7f, 0xb7, 0xf5, 0x3d, 0x78, 0xb0, 0xd8, 0x10, 0x55, 0x9d, 0xdf, 0x17, 0x52, 0x9a, 0xd6, 0x1e, 0x5b, 0x93, 0xd1, 0x19, 0x5c, 0x94, 0xc4, 0xc, 0x49, 0x81, 0xc3, 0xb, 0x4e, 0x86, 0xca, 0x2, 0x47, 0x8f, 0xcd, 0x5, 0x40, 0x88, 0x90, 0x58, 0x1d, 0xd5, 0x97, 0x5f, 0x1a, 0xd2, 0x9e, 0x56, 0x13, 0xdb, 0x99, 0x51, 0x14, 0xdc, 0x8c, 0x44, 0x1, 0xc9, 0x8b, 0x43, 0x6, 0xce, 0x82, 0x4a, 0xf, 0xc7, 0x85, 0x4d, 0x8, 0xc0, 0xa8, 0x60, 0x25, 0xed, 0xaf, 0x67, 0x22, 0xea, 0xa6, 0x6e, 0x2b, 0xe3, 0xa1, 0x69, 0x2c, 0xe4, 0xb4, 0x7c, 0x39, 0xf1, 0xb3, 0x7b, 0x3e, 0xf6, 0xba, 0x72, 0x37, 0xff, 0xbd, 0x75, 0x30, 0xf8}, - {0x0, 0xc9, 0x8f, 0x46, 0x3, 0xca, 0x8c, 0x45, 0x6, 0xcf, 0x89, 0x40, 0x5, 0xcc, 0x8a, 0x43, 0xc, 0xc5, 0x83, 0x4a, 0xf, 0xc6, 0x80, 0x49, 0xa, 0xc3, 0x85, 0x4c, 0x9, 0xc0, 0x86, 0x4f, 0x18, 0xd1, 0x97, 0x5e, 0x1b, 0xd2, 0x94, 0x5d, 0x1e, 0xd7, 0x91, 0x58, 0x1d, 0xd4, 0x92, 0x5b, 0x14, 0xdd, 0x9b, 0x52, 0x17, 0xde, 0x98, 0x51, 0x12, 0xdb, 0x9d, 0x54, 0x11, 0xd8, 0x9e, 0x57, 0x30, 0xf9, 0xbf, 0x76, 0x33, 0xfa, 0xbc, 0x75, 0x36, 0xff, 0xb9, 0x70, 0x35, 0xfc, 0xba, 0x73, 0x3c, 0xf5, 0xb3, 0x7a, 0x3f, 0xf6, 0xb0, 0x79, 0x3a, 0xf3, 0xb5, 0x7c, 0x39, 0xf0, 0xb6, 0x7f, 0x28, 0xe1, 0xa7, 0x6e, 0x2b, 0xe2, 0xa4, 0x6d, 0x2e, 0xe7, 0xa1, 0x68, 0x2d, 0xe4, 0xa2, 0x6b, 0x24, 0xed, 0xab, 0x62, 0x27, 0xee, 0xa8, 0x61, 0x22, 0xeb, 0xad, 0x64, 0x21, 0xe8, 0xae, 0x67, 0x60, 0xa9, 0xef, 0x26, 0x63, 0xaa, 0xec, 0x25, 0x66, 0xaf, 0xe9, 0x20, 0x65, 0xac, 0xea, 0x23, 0x6c, 0xa5, 0xe3, 0x2a, 0x6f, 0xa6, 0xe0, 0x29, 0x6a, 0xa3, 0xe5, 0x2c, 0x69, 0xa0, 0xe6, 0x2f, 0x78, 0xb1, 0xf7, 0x3e, 0x7b, 0xb2, 0xf4, 0x3d, 0x7e, 0xb7, 0xf1, 0x38, 0x7d, 0xb4, 0xf2, 0x3b, 0x74, 0xbd, 0xfb, 0x32, 0x77, 0xbe, 0xf8, 0x31, 0x72, 0xbb, 0xfd, 0x34, 0x71, 0xb8, 0xfe, 0x37, 0x50, 0x99, 0xdf, 0x16, 0x53, 0x9a, 0xdc, 0x15, 0x56, 0x9f, 0xd9, 0x10, 0x55, 0x9c, 0xda, 0x13, 0x5c, 0x95, 0xd3, 0x1a, 0x5f, 0x96, 0xd0, 0x19, 0x5a, 0x93, 0xd5, 0x1c, 0x59, 0x90, 0xd6, 0x1f, 0x48, 0x81, 0xc7, 0xe, 0x4b, 0x82, 0xc4, 0xd, 0x4e, 0x87, 0xc1, 0x8, 0x4d, 0x84, 0xc2, 0xb, 0x44, 0x8d, 0xcb, 0x2, 0x47, 0x8e, 0xc8, 0x1, 0x42, 0x8b, 0xcd, 0x4, 0x41, 0x88, 0xce, 0x7}, - {0x0, 0xca, 0x89, 0x43, 0xf, 0xc5, 0x86, 0x4c, 0x1e, 0xd4, 0x97, 0x5d, 0x11, 0xdb, 0x98, 0x52, 0x3c, 0xf6, 0xb5, 0x7f, 0x33, 0xf9, 0xba, 0x70, 0x22, 0xe8, 0xab, 0x61, 0x2d, 0xe7, 0xa4, 0x6e, 0x78, 0xb2, 0xf1, 0x3b, 0x77, 0xbd, 0xfe, 0x34, 0x66, 0xac, 0xef, 0x25, 0x69, 0xa3, 0xe0, 0x2a, 0x44, 0x8e, 0xcd, 0x7, 0x4b, 0x81, 0xc2, 0x8, 0x5a, 0x90, 0xd3, 0x19, 0x55, 0x9f, 0xdc, 0x16, 0xf0, 0x3a, 0x79, 0xb3, 0xff, 0x35, 0x76, 0xbc, 0xee, 0x24, 0x67, 0xad, 0xe1, 0x2b, 0x68, 0xa2, 0xcc, 0x6, 0x45, 0x8f, 0xc3, 0x9, 0x4a, 0x80, 0xd2, 0x18, 0x5b, 0x91, 0xdd, 0x17, 0x54, 0x9e, 0x88, 0x42, 0x1, 0xcb, 0x87, 0x4d, 0xe, 0xc4, 0x96, 0x5c, 0x1f, 0xd5, 0x99, 0x53, 0x10, 0xda, 0xb4, 0x7e, 0x3d, 0xf7, 0xbb, 0x71, 0x32, 0xf8, 0xaa, 0x60, 0x23, 0xe9, 0xa5, 0x6f, 0x2c, 0xe6, 0xfd, 0x37, 0x74, 0xbe, 0xf2, 0x38, 0x7b, 0xb1, 0xe3, 0x29, 0x6a, 0xa0, 0xec, 0x26, 0x65, 0xaf, 0xc1, 0xb, 0x48, 0x82, 0xce, 0x4, 0x47, 0x8d, 0xdf, 0x15, 0x56, 0x9c, 0xd0, 0x1a, 0x59, 0x93, 0x85, 0x4f, 0xc, 0xc6, 0x8a, 0x40, 0x3, 0xc9, 0x9b, 0x51, 0x12, 0xd8, 0x94, 0x5e, 0x1d, 0xd7, 0xb9, 0x73, 0x30, 0xfa, 0xb6, 0x7c, 0x3f, 0xf5, 0xa7, 0x6d, 0x2e, 0xe4, 0xa8, 0x62, 0x21, 0xeb, 0xd, 0xc7, 0x84, 0x4e, 0x2, 0xc8, 0x8b, 0x41, 0x13, 0xd9, 0x9a, 0x50, 0x1c, 0xd6, 0x95, 0x5f, 0x31, 0xfb, 0xb8, 0x72, 0x3e, 0xf4, 0xb7, 0x7d, 0x2f, 0xe5, 0xa6, 0x6c, 0x20, 0xea, 0xa9, 0x63, 0x75, 0xbf, 0xfc, 0x36, 0x7a, 0xb0, 0xf3, 0x39, 0x6b, 0xa1, 0xe2, 0x28, 0x64, 0xae, 0xed, 0x27, 0x49, 0x83, 0xc0, 0xa, 0x46, 0x8c, 0xcf, 0x5, 0x57, 0x9d, 0xde, 0x14, 0x58, 0x92, 0xd1, 0x1b}, - {0x0, 0xcb, 0x8b, 0x40, 0xb, 0xc0, 0x80, 0x4b, 0x16, 0xdd, 0x9d, 0x56, 0x1d, 0xd6, 0x96, 0x5d, 0x2c, 0xe7, 0xa7, 0x6c, 0x27, 0xec, 0xac, 0x67, 0x3a, 0xf1, 0xb1, 0x7a, 0x31, 0xfa, 0xba, 0x71, 0x58, 0x93, 0xd3, 0x18, 0x53, 0x98, 0xd8, 0x13, 0x4e, 0x85, 0xc5, 0xe, 0x45, 0x8e, 0xce, 0x5, 0x74, 0xbf, 0xff, 0x34, 0x7f, 0xb4, 0xf4, 0x3f, 0x62, 0xa9, 0xe9, 0x22, 0x69, 0xa2, 0xe2, 0x29, 0xb0, 0x7b, 0x3b, 0xf0, 0xbb, 0x70, 0x30, 0xfb, 0xa6, 0x6d, 0x2d, 0xe6, 0xad, 0x66, 0x26, 0xed, 0x9c, 0x57, 0x17, 0xdc, 0x97, 0x5c, 0x1c, 0xd7, 0x8a, 0x41, 0x1, 0xca, 0x81, 0x4a, 0xa, 0xc1, 0xe8, 0x23, 0x63, 0xa8, 0xe3, 0x28, 0x68, 0xa3, 0xfe, 0x35, 0x75, 0xbe, 0xf5, 0x3e, 0x7e, 0xb5, 0xc4, 0xf, 0x4f, 0x84, 0xcf, 0x4, 0x44, 0x8f, 0xd2, 0x19, 0x59, 0x92, 0xd9, 0x12, 0x52, 0x99, 0x7d, 0xb6, 0xf6, 0x3d, 0x76, 0xbd, 0xfd, 0x36, 0x6b, 0xa0, 0xe0, 0x2b, 0x60, 0xab, 0xeb, 0x20, 0x51, 0x9a, 0xda, 0x11, 0x5a, 0x91, 0xd1, 0x1a, 0x47, 0x8c, 0xcc, 0x7, 0x4c, 0x87, 0xc7, 0xc, 0x25, 0xee, 0xae, 0x65, 0x2e, 0xe5, 0xa5, 0x6e, 0x33, 0xf8, 0xb8, 0x73, 0x38, 0xf3, 0xb3, 0x78, 0x9, 0xc2, 0x82, 0x49, 0x2, 0xc9, 0x89, 0x42, 0x1f, 0xd4, 0x94, 0x5f, 0x14, 0xdf, 0x9f, 0x54, 0xcd, 0x6, 0x46, 0x8d, 0xc6, 0xd, 0x4d, 0x86, 0xdb, 0x10, 0x50, 0x9b, 0xd0, 0x1b, 0x5b, 0x90, 0xe1, 0x2a, 0x6a, 0xa1, 0xea, 0x21, 0x61, 0xaa, 0xf7, 0x3c, 0x7c, 0xb7, 0xfc, 0x37, 0x77, 0xbc, 0x95, 0x5e, 0x1e, 0xd5, 0x9e, 0x55, 0x15, 0xde, 0x83, 0x48, 0x8, 0xc3, 0x88, 0x43, 0x3, 0xc8, 0xb9, 0x72, 0x32, 0xf9, 0xb2, 0x79, 0x39, 0xf2, 0xaf, 0x64, 0x24, 0xef, 0xa4, 0x6f, 0x2f, 0xe4}, - {0x0, 0xcc, 0x85, 0x49, 0x17, 0xdb, 0x92, 0x5e, 0x2e, 0xe2, 0xab, 0x67, 0x39, 0xf5, 0xbc, 0x70, 0x5c, 0x90, 0xd9, 0x15, 0x4b, 0x87, 0xce, 0x2, 0x72, 0xbe, 0xf7, 0x3b, 0x65, 0xa9, 0xe0, 0x2c, 0xb8, 0x74, 0x3d, 0xf1, 0xaf, 0x63, 0x2a, 0xe6, 0x96, 0x5a, 0x13, 0xdf, 0x81, 0x4d, 0x4, 0xc8, 0xe4, 0x28, 0x61, 0xad, 0xf3, 0x3f, 0x76, 0xba, 0xca, 0x6, 0x4f, 0x83, 0xdd, 0x11, 0x58, 0x94, 0x6d, 0xa1, 0xe8, 0x24, 0x7a, 0xb6, 0xff, 0x33, 0x43, 0x8f, 0xc6, 0xa, 0x54, 0x98, 0xd1, 0x1d, 0x31, 0xfd, 0xb4, 0x78, 0x26, 0xea, 0xa3, 0x6f, 0x1f, 0xd3, 0x9a, 0x56, 0x8, 0xc4, 0x8d, 0x41, 0xd5, 0x19, 0x50, 0x9c, 0xc2, 0xe, 0x47, 0x8b, 0xfb, 0x37, 0x7e, 0xb2, 0xec, 0x20, 0x69, 0xa5, 0x89, 0x45, 0xc, 0xc0, 0x9e, 0x52, 0x1b, 0xd7, 0xa7, 0x6b, 0x22, 0xee, 0xb0, 0x7c, 0x35, 0xf9, 0xda, 0x16, 0x5f, 0x93, 0xcd, 0x1, 0x48, 0x84, 0xf4, 0x38, 0x71, 0xbd, 0xe3, 0x2f, 0x66, 0xaa, 0x86, 0x4a, 0x3, 0xcf, 0x91, 0x5d, 0x14, 0xd8, 0xa8, 0x64, 0x2d, 0xe1, 0xbf, 0x73, 0x3a, 0xf6, 0x62, 0xae, 0xe7, 0x2b, 0x75, 0xb9, 0xf0, 0x3c, 0x4c, 0x80, 0xc9, 0x5, 0x5b, 0x97, 0xde, 0x12, 0x3e, 0xf2, 0xbb, 0x77, 0x29, 0xe5, 0xac, 0x60, 0x10, 0xdc, 0x95, 0x59, 0x7, 0xcb, 0x82, 0x4e, 0xb7, 0x7b, 0x32, 0xfe, 0xa0, 0x6c, 0x25, 0xe9, 0x99, 0x55, 0x1c, 0xd0, 0x8e, 0x42, 0xb, 0xc7, 0xeb, 0x27, 0x6e, 0xa2, 0xfc, 0x30, 0x79, 0xb5, 0xc5, 0x9, 0x40, 0x8c, 0xd2, 0x1e, 0x57, 0x9b, 0xf, 0xc3, 0x8a, 0x46, 0x18, 0xd4, 0x9d, 0x51, 0x21, 0xed, 0xa4, 0x68, 0x36, 0xfa, 0xb3, 0x7f, 0x53, 0x9f, 0xd6, 0x1a, 0x44, 0x88, 0xc1, 0xd, 0x7d, 0xb1, 0xf8, 0x34, 0x6a, 0xa6, 0xef, 0x23}, - {0x0, 0xcd, 0x87, 0x4a, 0x13, 0xde, 0x94, 0x59, 0x26, 0xeb, 0xa1, 0x6c, 0x35, 0xf8, 0xb2, 0x7f, 0x4c, 0x81, 0xcb, 0x6, 0x5f, 0x92, 0xd8, 0x15, 0x6a, 0xa7, 0xed, 0x20, 0x79, 0xb4, 0xfe, 0x33, 0x98, 0x55, 0x1f, 0xd2, 0x8b, 0x46, 0xc, 0xc1, 0xbe, 0x73, 0x39, 0xf4, 0xad, 0x60, 0x2a, 0xe7, 0xd4, 0x19, 0x53, 0x9e, 0xc7, 0xa, 0x40, 0x8d, 0xf2, 0x3f, 0x75, 0xb8, 0xe1, 0x2c, 0x66, 0xab, 0x2d, 0xe0, 0xaa, 0x67, 0x3e, 0xf3, 0xb9, 0x74, 0xb, 0xc6, 0x8c, 0x41, 0x18, 0xd5, 0x9f, 0x52, 0x61, 0xac, 0xe6, 0x2b, 0x72, 0xbf, 0xf5, 0x38, 0x47, 0x8a, 0xc0, 0xd, 0x54, 0x99, 0xd3, 0x1e, 0xb5, 0x78, 0x32, 0xff, 0xa6, 0x6b, 0x21, 0xec, 0x93, 0x5e, 0x14, 0xd9, 0x80, 0x4d, 0x7, 0xca, 0xf9, 0x34, 0x7e, 0xb3, 0xea, 0x27, 0x6d, 0xa0, 0xdf, 0x12, 0x58, 0x95, 0xcc, 0x1, 0x4b, 0x86, 0x5a, 0x97, 0xdd, 0x10, 0x49, 0x84, 0xce, 0x3, 0x7c, 0xb1, 0xfb, 0x36, 0x6f, 0xa2, 0xe8, 0x25, 0x16, 0xdb, 0x91, 0x5c, 0x5, 0xc8, 0x82, 0x4f, 0x30, 0xfd, 0xb7, 0x7a, 0x23, 0xee, 0xa4, 0x69, 0xc2, 0xf, 0x45, 0x88, 0xd1, 0x1c, 0x56, 0x9b, 0xe4, 0x29, 0x63, 0xae, 0xf7, 0x3a, 0x70, 0xbd, 0x8e, 0x43, 0x9, 0xc4, 0x9d, 0x50, 0x1a, 0xd7, 0xa8, 0x65, 0x2f, 0xe2, 0xbb, 0x76, 0x3c, 0xf1, 0x77, 0xba, 0xf0, 0x3d, 0x64, 0xa9, 0xe3, 0x2e, 0x51, 0x9c, 0xd6, 0x1b, 0x42, 0x8f, 0xc5, 0x8, 0x3b, 0xf6, 0xbc, 0x71, 0x28, 0xe5, 0xaf, 0x62, 0x1d, 0xd0, 0x9a, 0x57, 0xe, 0xc3, 0x89, 0x44, 0xef, 0x22, 0x68, 0xa5, 0xfc, 0x31, 0x7b, 0xb6, 0xc9, 0x4, 0x4e, 0x83, 0xda, 0x17, 0x5d, 0x90, 0xa3, 0x6e, 0x24, 0xe9, 0xb0, 0x7d, 0x37, 0xfa, 0x85, 0x48, 0x2, 0xcf, 0x96, 0x5b, 0x11, 0xdc}, - {0x0, 0xce, 0x81, 0x4f, 0x1f, 0xd1, 0x9e, 0x50, 0x3e, 0xf0, 0xbf, 0x71, 0x21, 0xef, 0xa0, 0x6e, 0x7c, 0xb2, 0xfd, 0x33, 0x63, 0xad, 0xe2, 0x2c, 0x42, 0x8c, 0xc3, 0xd, 0x5d, 0x93, 0xdc, 0x12, 0xf8, 0x36, 0x79, 0xb7, 0xe7, 0x29, 0x66, 0xa8, 0xc6, 0x8, 0x47, 0x89, 0xd9, 0x17, 0x58, 0x96, 0x84, 0x4a, 0x5, 0xcb, 0x9b, 0x55, 0x1a, 0xd4, 0xba, 0x74, 0x3b, 0xf5, 0xa5, 0x6b, 0x24, 0xea, 0xed, 0x23, 0x6c, 0xa2, 0xf2, 0x3c, 0x73, 0xbd, 0xd3, 0x1d, 0x52, 0x9c, 0xcc, 0x2, 0x4d, 0x83, 0x91, 0x5f, 0x10, 0xde, 0x8e, 0x40, 0xf, 0xc1, 0xaf, 0x61, 0x2e, 0xe0, 0xb0, 0x7e, 0x31, 0xff, 0x15, 0xdb, 0x94, 0x5a, 0xa, 0xc4, 0x8b, 0x45, 0x2b, 0xe5, 0xaa, 0x64, 0x34, 0xfa, 0xb5, 0x7b, 0x69, 0xa7, 0xe8, 0x26, 0x76, 0xb8, 0xf7, 0x39, 0x57, 0x99, 0xd6, 0x18, 0x48, 0x86, 0xc9, 0x7, 0xc7, 0x9, 0x46, 0x88, 0xd8, 0x16, 0x59, 0x97, 0xf9, 0x37, 0x78, 0xb6, 0xe6, 0x28, 0x67, 0xa9, 0xbb, 0x75, 0x3a, 0xf4, 0xa4, 0x6a, 0x25, 0xeb, 0x85, 0x4b, 0x4, 0xca, 0x9a, 0x54, 0x1b, 0xd5, 0x3f, 0xf1, 0xbe, 0x70, 0x20, 0xee, 0xa1, 0x6f, 0x1, 0xcf, 0x80, 0x4e, 0x1e, 0xd0, 0x9f, 0x51, 0x43, 0x8d, 0xc2, 0xc, 0x5c, 0x92, 0xdd, 0x13, 0x7d, 0xb3, 0xfc, 0x32, 0x62, 0xac, 0xe3, 0x2d, 0x2a, 0xe4, 0xab, 0x65, 0x35, 0xfb, 0xb4, 0x7a, 0x14, 0xda, 0x95, 0x5b, 0xb, 0xc5, 0x8a, 0x44, 0x56, 0x98, 0xd7, 0x19, 0x49, 0x87, 0xc8, 0x6, 0x68, 0xa6, 0xe9, 0x27, 0x77, 0xb9, 0xf6, 0x38, 0xd2, 0x1c, 0x53, 0x9d, 0xcd, 0x3, 0x4c, 0x82, 0xec, 0x22, 0x6d, 0xa3, 0xf3, 0x3d, 0x72, 0xbc, 0xae, 0x60, 0x2f, 0xe1, 0xb1, 0x7f, 0x30, 0xfe, 0x90, 0x5e, 0x11, 0xdf, 0x8f, 0x41, 0xe, 0xc0}, - {0x0, 0xcf, 0x83, 0x4c, 0x1b, 0xd4, 0x98, 0x57, 0x36, 0xf9, 0xb5, 0x7a, 0x2d, 0xe2, 0xae, 0x61, 0x6c, 0xa3, 0xef, 0x20, 0x77, 0xb8, 0xf4, 0x3b, 0x5a, 0x95, 0xd9, 0x16, 0x41, 0x8e, 0xc2, 0xd, 0xd8, 0x17, 0x5b, 0x94, 0xc3, 0xc, 0x40, 0x8f, 0xee, 0x21, 0x6d, 0xa2, 0xf5, 0x3a, 0x76, 0xb9, 0xb4, 0x7b, 0x37, 0xf8, 0xaf, 0x60, 0x2c, 0xe3, 0x82, 0x4d, 0x1, 0xce, 0x99, 0x56, 0x1a, 0xd5, 0xad, 0x62, 0x2e, 0xe1, 0xb6, 0x79, 0x35, 0xfa, 0x9b, 0x54, 0x18, 0xd7, 0x80, 0x4f, 0x3, 0xcc, 0xc1, 0xe, 0x42, 0x8d, 0xda, 0x15, 0x59, 0x96, 0xf7, 0x38, 0x74, 0xbb, 0xec, 0x23, 0x6f, 0xa0, 0x75, 0xba, 0xf6, 0x39, 0x6e, 0xa1, 0xed, 0x22, 0x43, 0x8c, 0xc0, 0xf, 0x58, 0x97, 0xdb, 0x14, 0x19, 0xd6, 0x9a, 0x55, 0x2, 0xcd, 0x81, 0x4e, 0x2f, 0xe0, 0xac, 0x63, 0x34, 0xfb, 0xb7, 0x78, 0x47, 0x88, 0xc4, 0xb, 0x5c, 0x93, 0xdf, 0x10, 0x71, 0xbe, 0xf2, 0x3d, 0x6a, 0xa5, 0xe9, 0x26, 0x2b, 0xe4, 0xa8, 0x67, 0x30, 0xff, 0xb3, 0x7c, 0x1d, 0xd2, 0x9e, 0x51, 0x6, 0xc9, 0x85, 0x4a, 0x9f, 0x50, 0x1c, 0xd3, 0x84, 0x4b, 0x7, 0xc8, 0xa9, 0x66, 0x2a, 0xe5, 0xb2, 0x7d, 0x31, 0xfe, 0xf3, 0x3c, 0x70, 0xbf, 0xe8, 0x27, 0x6b, 0xa4, 0xc5, 0xa, 0x46, 0x89, 0xde, 0x11, 0x5d, 0x92, 0xea, 0x25, 0x69, 0xa6, 0xf1, 0x3e, 0x72, 0xbd, 0xdc, 0x13, 0x5f, 0x90, 0xc7, 0x8, 0x44, 0x8b, 0x86, 0x49, 0x5, 0xca, 0x9d, 0x52, 0x1e, 0xd1, 0xb0, 0x7f, 0x33, 0xfc, 0xab, 0x64, 0x28, 0xe7, 0x32, 0xfd, 0xb1, 0x7e, 0x29, 0xe6, 0xaa, 0x65, 0x4, 0xcb, 0x87, 0x48, 0x1f, 0xd0, 0x9c, 0x53, 0x5e, 0x91, 0xdd, 0x12, 0x45, 0x8a, 0xc6, 0x9, 0x68, 0xa7, 0xeb, 0x24, 0x73, 0xbc, 0xf0, 0x3f}, - {0x0, 0xd0, 0xbd, 0x6d, 0x67, 0xb7, 0xda, 0xa, 0xce, 0x1e, 0x73, 0xa3, 0xa9, 0x79, 0x14, 0xc4, 0x81, 0x51, 0x3c, 0xec, 0xe6, 0x36, 0x5b, 0x8b, 0x4f, 0x9f, 0xf2, 0x22, 0x28, 0xf8, 0x95, 0x45, 0x1f, 0xcf, 0xa2, 0x72, 0x78, 0xa8, 0xc5, 0x15, 0xd1, 0x1, 0x6c, 0xbc, 0xb6, 0x66, 0xb, 0xdb, 0x9e, 0x4e, 0x23, 0xf3, 0xf9, 0x29, 0x44, 0x94, 0x50, 0x80, 0xed, 0x3d, 0x37, 0xe7, 0x8a, 0x5a, 0x3e, 0xee, 0x83, 0x53, 0x59, 0x89, 0xe4, 0x34, 0xf0, 0x20, 0x4d, 0x9d, 0x97, 0x47, 0x2a, 0xfa, 0xbf, 0x6f, 0x2, 0xd2, 0xd8, 0x8, 0x65, 0xb5, 0x71, 0xa1, 0xcc, 0x1c, 0x16, 0xc6, 0xab, 0x7b, 0x21, 0xf1, 0x9c, 0x4c, 0x46, 0x96, 0xfb, 0x2b, 0xef, 0x3f, 0x52, 0x82, 0x88, 0x58, 0x35, 0xe5, 0xa0, 0x70, 0x1d, 0xcd, 0xc7, 0x17, 0x7a, 0xaa, 0x6e, 0xbe, 0xd3, 0x3, 0x9, 0xd9, 0xb4, 0x64, 0x7c, 0xac, 0xc1, 0x11, 0x1b, 0xcb, 0xa6, 0x76, 0xb2, 0x62, 0xf, 0xdf, 0xd5, 0x5, 0x68, 0xb8, 0xfd, 0x2d, 0x40, 0x90, 0x9a, 0x4a, 0x27, 0xf7, 0x33, 0xe3, 0x8e, 0x5e, 0x54, 0x84, 0xe9, 0x39, 0x63, 0xb3, 0xde, 0xe, 0x4, 0xd4, 0xb9, 0x69, 0xad, 0x7d, 0x10, 0xc0, 0xca, 0x1a, 0x77, 0xa7, 0xe2, 0x32, 0x5f, 0x8f, 0x85, 0x55, 0x38, 0xe8, 0x2c, 0xfc, 0x91, 0x41, 0x4b, 0x9b, 0xf6, 0x26, 0x42, 0x92, 0xff, 0x2f, 0x25, 0xf5, 0x98, 0x48, 0x8c, 0x5c, 0x31, 0xe1, 0xeb, 0x3b, 0x56, 0x86, 0xc3, 0x13, 0x7e, 0xae, 0xa4, 0x74, 0x19, 0xc9, 0xd, 0xdd, 0xb0, 0x60, 0x6a, 0xba, 0xd7, 0x7, 0x5d, 0x8d, 0xe0, 0x30, 0x3a, 0xea, 0x87, 0x57, 0x93, 0x43, 0x2e, 0xfe, 0xf4, 0x24, 0x49, 0x99, 0xdc, 0xc, 0x61, 0xb1, 0xbb, 0x6b, 0x6, 0xd6, 0x12, 0xc2, 0xaf, 0x7f, 0x75, 0xa5, 0xc8, 0x18}, - {0x0, 0xd1, 0xbf, 0x6e, 0x63, 0xb2, 0xdc, 0xd, 0xc6, 0x17, 0x79, 0xa8, 0xa5, 0x74, 0x1a, 0xcb, 0x91, 0x40, 0x2e, 0xff, 0xf2, 0x23, 0x4d, 0x9c, 0x57, 0x86, 0xe8, 0x39, 0x34, 0xe5, 0x8b, 0x5a, 0x3f, 0xee, 0x80, 0x51, 0x5c, 0x8d, 0xe3, 0x32, 0xf9, 0x28, 0x46, 0x97, 0x9a, 0x4b, 0x25, 0xf4, 0xae, 0x7f, 0x11, 0xc0, 0xcd, 0x1c, 0x72, 0xa3, 0x68, 0xb9, 0xd7, 0x6, 0xb, 0xda, 0xb4, 0x65, 0x7e, 0xaf, 0xc1, 0x10, 0x1d, 0xcc, 0xa2, 0x73, 0xb8, 0x69, 0x7, 0xd6, 0xdb, 0xa, 0x64, 0xb5, 0xef, 0x3e, 0x50, 0x81, 0x8c, 0x5d, 0x33, 0xe2, 0x29, 0xf8, 0x96, 0x47, 0x4a, 0x9b, 0xf5, 0x24, 0x41, 0x90, 0xfe, 0x2f, 0x22, 0xf3, 0x9d, 0x4c, 0x87, 0x56, 0x38, 0xe9, 0xe4, 0x35, 0x5b, 0x8a, 0xd0, 0x1, 0x6f, 0xbe, 0xb3, 0x62, 0xc, 0xdd, 0x16, 0xc7, 0xa9, 0x78, 0x75, 0xa4, 0xca, 0x1b, 0xfc, 0x2d, 0x43, 0x92, 0x9f, 0x4e, 0x20, 0xf1, 0x3a, 0xeb, 0x85, 0x54, 0x59, 0x88, 0xe6, 0x37, 0x6d, 0xbc, 0xd2, 0x3, 0xe, 0xdf, 0xb1, 0x60, 0xab, 0x7a, 0x14, 0xc5, 0xc8, 0x19, 0x77, 0xa6, 0xc3, 0x12, 0x7c, 0xad, 0xa0, 0x71, 0x1f, 0xce, 0x5, 0xd4, 0xba, 0x6b, 0x66, 0xb7, 0xd9, 0x8, 0x52, 0x83, 0xed, 0x3c, 0x31, 0xe0, 0x8e, 0x5f, 0x94, 0x45, 0x2b, 0xfa, 0xf7, 0x26, 0x48, 0x99, 0x82, 0x53, 0x3d, 0xec, 0xe1, 0x30, 0x5e, 0x8f, 0x44, 0x95, 0xfb, 0x2a, 0x27, 0xf6, 0x98, 0x49, 0x13, 0xc2, 0xac, 0x7d, 0x70, 0xa1, 0xcf, 0x1e, 0xd5, 0x4, 0x6a, 0xbb, 0xb6, 0x67, 0x9, 0xd8, 0xbd, 0x6c, 0x2, 0xd3, 0xde, 0xf, 0x61, 0xb0, 0x7b, 0xaa, 0xc4, 0x15, 0x18, 0xc9, 0xa7, 0x76, 0x2c, 0xfd, 0x93, 0x42, 0x4f, 0x9e, 0xf0, 0x21, 0xea, 0x3b, 0x55, 0x84, 0x89, 0x58, 0x36, 0xe7}, - {0x0, 0xd2, 0xb9, 0x6b, 0x6f, 0xbd, 0xd6, 0x4, 0xde, 0xc, 0x67, 0xb5, 0xb1, 0x63, 0x8, 0xda, 0xa1, 0x73, 0x18, 0xca, 0xce, 0x1c, 0x77, 0xa5, 0x7f, 0xad, 0xc6, 0x14, 0x10, 0xc2, 0xa9, 0x7b, 0x5f, 0x8d, 0xe6, 0x34, 0x30, 0xe2, 0x89, 0x5b, 0x81, 0x53, 0x38, 0xea, 0xee, 0x3c, 0x57, 0x85, 0xfe, 0x2c, 0x47, 0x95, 0x91, 0x43, 0x28, 0xfa, 0x20, 0xf2, 0x99, 0x4b, 0x4f, 0x9d, 0xf6, 0x24, 0xbe, 0x6c, 0x7, 0xd5, 0xd1, 0x3, 0x68, 0xba, 0x60, 0xb2, 0xd9, 0xb, 0xf, 0xdd, 0xb6, 0x64, 0x1f, 0xcd, 0xa6, 0x74, 0x70, 0xa2, 0xc9, 0x1b, 0xc1, 0x13, 0x78, 0xaa, 0xae, 0x7c, 0x17, 0xc5, 0xe1, 0x33, 0x58, 0x8a, 0x8e, 0x5c, 0x37, 0xe5, 0x3f, 0xed, 0x86, 0x54, 0x50, 0x82, 0xe9, 0x3b, 0x40, 0x92, 0xf9, 0x2b, 0x2f, 0xfd, 0x96, 0x44, 0x9e, 0x4c, 0x27, 0xf5, 0xf1, 0x23, 0x48, 0x9a, 0x61, 0xb3, 0xd8, 0xa, 0xe, 0xdc, 0xb7, 0x65, 0xbf, 0x6d, 0x6, 0xd4, 0xd0, 0x2, 0x69, 0xbb, 0xc0, 0x12, 0x79, 0xab, 0xaf, 0x7d, 0x16, 0xc4, 0x1e, 0xcc, 0xa7, 0x75, 0x71, 0xa3, 0xc8, 0x1a, 0x3e, 0xec, 0x87, 0x55, 0x51, 0x83, 0xe8, 0x3a, 0xe0, 0x32, 0x59, 0x8b, 0x8f, 0x5d, 0x36, 0xe4, 0x9f, 0x4d, 0x26, 0xf4, 0xf0, 0x22, 0x49, 0x9b, 0x41, 0x93, 0xf8, 0x2a, 0x2e, 0xfc, 0x97, 0x45, 0xdf, 0xd, 0x66, 0xb4, 0xb0, 0x62, 0x9, 0xdb, 0x1, 0xd3, 0xb8, 0x6a, 0x6e, 0xbc, 0xd7, 0x5, 0x7e, 0xac, 0xc7, 0x15, 0x11, 0xc3, 0xa8, 0x7a, 0xa0, 0x72, 0x19, 0xcb, 0xcf, 0x1d, 0x76, 0xa4, 0x80, 0x52, 0x39, 0xeb, 0xef, 0x3d, 0x56, 0x84, 0x5e, 0x8c, 0xe7, 0x35, 0x31, 0xe3, 0x88, 0x5a, 0x21, 0xf3, 0x98, 0x4a, 0x4e, 0x9c, 0xf7, 0x25, 0xff, 0x2d, 0x46, 0x94, 0x90, 0x42, 0x29, 0xfb}, - {0x0, 0xd3, 0xbb, 0x68, 0x6b, 0xb8, 0xd0, 0x3, 0xd6, 0x5, 0x6d, 0xbe, 0xbd, 0x6e, 0x6, 0xd5, 0xb1, 0x62, 0xa, 0xd9, 0xda, 0x9, 0x61, 0xb2, 0x67, 0xb4, 0xdc, 0xf, 0xc, 0xdf, 0xb7, 0x64, 0x7f, 0xac, 0xc4, 0x17, 0x14, 0xc7, 0xaf, 0x7c, 0xa9, 0x7a, 0x12, 0xc1, 0xc2, 0x11, 0x79, 0xaa, 0xce, 0x1d, 0x75, 0xa6, 0xa5, 0x76, 0x1e, 0xcd, 0x18, 0xcb, 0xa3, 0x70, 0x73, 0xa0, 0xc8, 0x1b, 0xfe, 0x2d, 0x45, 0x96, 0x95, 0x46, 0x2e, 0xfd, 0x28, 0xfb, 0x93, 0x40, 0x43, 0x90, 0xf8, 0x2b, 0x4f, 0x9c, 0xf4, 0x27, 0x24, 0xf7, 0x9f, 0x4c, 0x99, 0x4a, 0x22, 0xf1, 0xf2, 0x21, 0x49, 0x9a, 0x81, 0x52, 0x3a, 0xe9, 0xea, 0x39, 0x51, 0x82, 0x57, 0x84, 0xec, 0x3f, 0x3c, 0xef, 0x87, 0x54, 0x30, 0xe3, 0x8b, 0x58, 0x5b, 0x88, 0xe0, 0x33, 0xe6, 0x35, 0x5d, 0x8e, 0x8d, 0x5e, 0x36, 0xe5, 0xe1, 0x32, 0x5a, 0x89, 0x8a, 0x59, 0x31, 0xe2, 0x37, 0xe4, 0x8c, 0x5f, 0x5c, 0x8f, 0xe7, 0x34, 0x50, 0x83, 0xeb, 0x38, 0x3b, 0xe8, 0x80, 0x53, 0x86, 0x55, 0x3d, 0xee, 0xed, 0x3e, 0x56, 0x85, 0x9e, 0x4d, 0x25, 0xf6, 0xf5, 0x26, 0x4e, 0x9d, 0x48, 0x9b, 0xf3, 0x20, 0x23, 0xf0, 0x98, 0x4b, 0x2f, 0xfc, 0x94, 0x47, 0x44, 0x97, 0xff, 0x2c, 0xf9, 0x2a, 0x42, 0x91, 0x92, 0x41, 0x29, 0xfa, 0x1f, 0xcc, 0xa4, 0x77, 0x74, 0xa7, 0xcf, 0x1c, 0xc9, 0x1a, 0x72, 0xa1, 0xa2, 0x71, 0x19, 0xca, 0xae, 0x7d, 0x15, 0xc6, 0xc5, 0x16, 0x7e, 0xad, 0x78, 0xab, 0xc3, 0x10, 0x13, 0xc0, 0xa8, 0x7b, 0x60, 0xb3, 0xdb, 0x8, 0xb, 0xd8, 0xb0, 0x63, 0xb6, 0x65, 0xd, 0xde, 0xdd, 0xe, 0x66, 0xb5, 0xd1, 0x2, 0x6a, 0xb9, 0xba, 0x69, 0x1, 0xd2, 0x7, 0xd4, 0xbc, 0x6f, 0x6c, 0xbf, 0xd7, 0x4}, - {0x0, 0xd4, 0xb5, 0x61, 0x77, 0xa3, 0xc2, 0x16, 0xee, 0x3a, 0x5b, 0x8f, 0x99, 0x4d, 0x2c, 0xf8, 0xc1, 0x15, 0x74, 0xa0, 0xb6, 0x62, 0x3, 0xd7, 0x2f, 0xfb, 0x9a, 0x4e, 0x58, 0x8c, 0xed, 0x39, 0x9f, 0x4b, 0x2a, 0xfe, 0xe8, 0x3c, 0x5d, 0x89, 0x71, 0xa5, 0xc4, 0x10, 0x6, 0xd2, 0xb3, 0x67, 0x5e, 0x8a, 0xeb, 0x3f, 0x29, 0xfd, 0x9c, 0x48, 0xb0, 0x64, 0x5, 0xd1, 0xc7, 0x13, 0x72, 0xa6, 0x23, 0xf7, 0x96, 0x42, 0x54, 0x80, 0xe1, 0x35, 0xcd, 0x19, 0x78, 0xac, 0xba, 0x6e, 0xf, 0xdb, 0xe2, 0x36, 0x57, 0x83, 0x95, 0x41, 0x20, 0xf4, 0xc, 0xd8, 0xb9, 0x6d, 0x7b, 0xaf, 0xce, 0x1a, 0xbc, 0x68, 0x9, 0xdd, 0xcb, 0x1f, 0x7e, 0xaa, 0x52, 0x86, 0xe7, 0x33, 0x25, 0xf1, 0x90, 0x44, 0x7d, 0xa9, 0xc8, 0x1c, 0xa, 0xde, 0xbf, 0x6b, 0x93, 0x47, 0x26, 0xf2, 0xe4, 0x30, 0x51, 0x85, 0x46, 0x92, 0xf3, 0x27, 0x31, 0xe5, 0x84, 0x50, 0xa8, 0x7c, 0x1d, 0xc9, 0xdf, 0xb, 0x6a, 0xbe, 0x87, 0x53, 0x32, 0xe6, 0xf0, 0x24, 0x45, 0x91, 0x69, 0xbd, 0xdc, 0x8, 0x1e, 0xca, 0xab, 0x7f, 0xd9, 0xd, 0x6c, 0xb8, 0xae, 0x7a, 0x1b, 0xcf, 0x37, 0xe3, 0x82, 0x56, 0x40, 0x94, 0xf5, 0x21, 0x18, 0xcc, 0xad, 0x79, 0x6f, 0xbb, 0xda, 0xe, 0xf6, 0x22, 0x43, 0x97, 0x81, 0x55, 0x34, 0xe0, 0x65, 0xb1, 0xd0, 0x4, 0x12, 0xc6, 0xa7, 0x73, 0x8b, 0x5f, 0x3e, 0xea, 0xfc, 0x28, 0x49, 0x9d, 0xa4, 0x70, 0x11, 0xc5, 0xd3, 0x7, 0x66, 0xb2, 0x4a, 0x9e, 0xff, 0x2b, 0x3d, 0xe9, 0x88, 0x5c, 0xfa, 0x2e, 0x4f, 0x9b, 0x8d, 0x59, 0x38, 0xec, 0x14, 0xc0, 0xa1, 0x75, 0x63, 0xb7, 0xd6, 0x2, 0x3b, 0xef, 0x8e, 0x5a, 0x4c, 0x98, 0xf9, 0x2d, 0xd5, 0x1, 0x60, 0xb4, 0xa2, 0x76, 0x17, 0xc3}, - {0x0, 0xd5, 0xb7, 0x62, 0x73, 0xa6, 0xc4, 0x11, 0xe6, 0x33, 0x51, 0x84, 0x95, 0x40, 0x22, 0xf7, 0xd1, 0x4, 0x66, 0xb3, 0xa2, 0x77, 0x15, 0xc0, 0x37, 0xe2, 0x80, 0x55, 0x44, 0x91, 0xf3, 0x26, 0xbf, 0x6a, 0x8, 0xdd, 0xcc, 0x19, 0x7b, 0xae, 0x59, 0x8c, 0xee, 0x3b, 0x2a, 0xff, 0x9d, 0x48, 0x6e, 0xbb, 0xd9, 0xc, 0x1d, 0xc8, 0xaa, 0x7f, 0x88, 0x5d, 0x3f, 0xea, 0xfb, 0x2e, 0x4c, 0x99, 0x63, 0xb6, 0xd4, 0x1, 0x10, 0xc5, 0xa7, 0x72, 0x85, 0x50, 0x32, 0xe7, 0xf6, 0x23, 0x41, 0x94, 0xb2, 0x67, 0x5, 0xd0, 0xc1, 0x14, 0x76, 0xa3, 0x54, 0x81, 0xe3, 0x36, 0x27, 0xf2, 0x90, 0x45, 0xdc, 0x9, 0x6b, 0xbe, 0xaf, 0x7a, 0x18, 0xcd, 0x3a, 0xef, 0x8d, 0x58, 0x49, 0x9c, 0xfe, 0x2b, 0xd, 0xd8, 0xba, 0x6f, 0x7e, 0xab, 0xc9, 0x1c, 0xeb, 0x3e, 0x5c, 0x89, 0x98, 0x4d, 0x2f, 0xfa, 0xc6, 0x13, 0x71, 0xa4, 0xb5, 0x60, 0x2, 0xd7, 0x20, 0xf5, 0x97, 0x42, 0x53, 0x86, 0xe4, 0x31, 0x17, 0xc2, 0xa0, 0x75, 0x64, 0xb1, 0xd3, 0x6, 0xf1, 0x24, 0x46, 0x93, 0x82, 0x57, 0x35, 0xe0, 0x79, 0xac, 0xce, 0x1b, 0xa, 0xdf, 0xbd, 0x68, 0x9f, 0x4a, 0x28, 0xfd, 0xec, 0x39, 0x5b, 0x8e, 0xa8, 0x7d, 0x1f, 0xca, 0xdb, 0xe, 0x6c, 0xb9, 0x4e, 0x9b, 0xf9, 0x2c, 0x3d, 0xe8, 0x8a, 0x5f, 0xa5, 0x70, 0x12, 0xc7, 0xd6, 0x3, 0x61, 0xb4, 0x43, 0x96, 0xf4, 0x21, 0x30, 0xe5, 0x87, 0x52, 0x74, 0xa1, 0xc3, 0x16, 0x7, 0xd2, 0xb0, 0x65, 0x92, 0x47, 0x25, 0xf0, 0xe1, 0x34, 0x56, 0x83, 0x1a, 0xcf, 0xad, 0x78, 0x69, 0xbc, 0xde, 0xb, 0xfc, 0x29, 0x4b, 0x9e, 0x8f, 0x5a, 0x38, 0xed, 0xcb, 0x1e, 0x7c, 0xa9, 0xb8, 0x6d, 0xf, 0xda, 0x2d, 0xf8, 0x9a, 0x4f, 0x5e, 0x8b, 0xe9, 0x3c}, - {0x0, 0xd6, 0xb1, 0x67, 0x7f, 0xa9, 0xce, 0x18, 0xfe, 0x28, 0x4f, 0x99, 0x81, 0x57, 0x30, 0xe6, 0xe1, 0x37, 0x50, 0x86, 0x9e, 0x48, 0x2f, 0xf9, 0x1f, 0xc9, 0xae, 0x78, 0x60, 0xb6, 0xd1, 0x7, 0xdf, 0x9, 0x6e, 0xb8, 0xa0, 0x76, 0x11, 0xc7, 0x21, 0xf7, 0x90, 0x46, 0x5e, 0x88, 0xef, 0x39, 0x3e, 0xe8, 0x8f, 0x59, 0x41, 0x97, 0xf0, 0x26, 0xc0, 0x16, 0x71, 0xa7, 0xbf, 0x69, 0xe, 0xd8, 0xa3, 0x75, 0x12, 0xc4, 0xdc, 0xa, 0x6d, 0xbb, 0x5d, 0x8b, 0xec, 0x3a, 0x22, 0xf4, 0x93, 0x45, 0x42, 0x94, 0xf3, 0x25, 0x3d, 0xeb, 0x8c, 0x5a, 0xbc, 0x6a, 0xd, 0xdb, 0xc3, 0x15, 0x72, 0xa4, 0x7c, 0xaa, 0xcd, 0x1b, 0x3, 0xd5, 0xb2, 0x64, 0x82, 0x54, 0x33, 0xe5, 0xfd, 0x2b, 0x4c, 0x9a, 0x9d, 0x4b, 0x2c, 0xfa, 0xe2, 0x34, 0x53, 0x85, 0x63, 0xb5, 0xd2, 0x4, 0x1c, 0xca, 0xad, 0x7b, 0x5b, 0x8d, 0xea, 0x3c, 0x24, 0xf2, 0x95, 0x43, 0xa5, 0x73, 0x14, 0xc2, 0xda, 0xc, 0x6b, 0xbd, 0xba, 0x6c, 0xb, 0xdd, 0xc5, 0x13, 0x74, 0xa2, 0x44, 0x92, 0xf5, 0x23, 0x3b, 0xed, 0x8a, 0x5c, 0x84, 0x52, 0x35, 0xe3, 0xfb, 0x2d, 0x4a, 0x9c, 0x7a, 0xac, 0xcb, 0x1d, 0x5, 0xd3, 0xb4, 0x62, 0x65, 0xb3, 0xd4, 0x2, 0x1a, 0xcc, 0xab, 0x7d, 0x9b, 0x4d, 0x2a, 0xfc, 0xe4, 0x32, 0x55, 0x83, 0xf8, 0x2e, 0x49, 0x9f, 0x87, 0x51, 0x36, 0xe0, 0x6, 0xd0, 0xb7, 0x61, 0x79, 0xaf, 0xc8, 0x1e, 0x19, 0xcf, 0xa8, 0x7e, 0x66, 0xb0, 0xd7, 0x1, 0xe7, 0x31, 0x56, 0x80, 0x98, 0x4e, 0x29, 0xff, 0x27, 0xf1, 0x96, 0x40, 0x58, 0x8e, 0xe9, 0x3f, 0xd9, 0xf, 0x68, 0xbe, 0xa6, 0x70, 0x17, 0xc1, 0xc6, 0x10, 0x77, 0xa1, 0xb9, 0x6f, 0x8, 0xde, 0x38, 0xee, 0x89, 0x5f, 0x47, 0x91, 0xf6, 0x20}, - {0x0, 0xd7, 0xb3, 0x64, 0x7b, 0xac, 0xc8, 0x1f, 0xf6, 0x21, 0x45, 0x92, 0x8d, 0x5a, 0x3e, 0xe9, 0xf1, 0x26, 0x42, 0x95, 0x8a, 0x5d, 0x39, 0xee, 0x7, 0xd0, 0xb4, 0x63, 0x7c, 0xab, 0xcf, 0x18, 0xff, 0x28, 0x4c, 0x9b, 0x84, 0x53, 0x37, 0xe0, 0x9, 0xde, 0xba, 0x6d, 0x72, 0xa5, 0xc1, 0x16, 0xe, 0xd9, 0xbd, 0x6a, 0x75, 0xa2, 0xc6, 0x11, 0xf8, 0x2f, 0x4b, 0x9c, 0x83, 0x54, 0x30, 0xe7, 0xe3, 0x34, 0x50, 0x87, 0x98, 0x4f, 0x2b, 0xfc, 0x15, 0xc2, 0xa6, 0x71, 0x6e, 0xb9, 0xdd, 0xa, 0x12, 0xc5, 0xa1, 0x76, 0x69, 0xbe, 0xda, 0xd, 0xe4, 0x33, 0x57, 0x80, 0x9f, 0x48, 0x2c, 0xfb, 0x1c, 0xcb, 0xaf, 0x78, 0x67, 0xb0, 0xd4, 0x3, 0xea, 0x3d, 0x59, 0x8e, 0x91, 0x46, 0x22, 0xf5, 0xed, 0x3a, 0x5e, 0x89, 0x96, 0x41, 0x25, 0xf2, 0x1b, 0xcc, 0xa8, 0x7f, 0x60, 0xb7, 0xd3, 0x4, 0xdb, 0xc, 0x68, 0xbf, 0xa0, 0x77, 0x13, 0xc4, 0x2d, 0xfa, 0x9e, 0x49, 0x56, 0x81, 0xe5, 0x32, 0x2a, 0xfd, 0x99, 0x4e, 0x51, 0x86, 0xe2, 0x35, 0xdc, 0xb, 0x6f, 0xb8, 0xa7, 0x70, 0x14, 0xc3, 0x24, 0xf3, 0x97, 0x40, 0x5f, 0x88, 0xec, 0x3b, 0xd2, 0x5, 0x61, 0xb6, 0xa9, 0x7e, 0x1a, 0xcd, 0xd5, 0x2, 0x66, 0xb1, 0xae, 0x79, 0x1d, 0xca, 0x23, 0xf4, 0x90, 0x47, 0x58, 0x8f, 0xeb, 0x3c, 0x38, 0xef, 0x8b, 0x5c, 0x43, 0x94, 0xf0, 0x27, 0xce, 0x19, 0x7d, 0xaa, 0xb5, 0x62, 0x6, 0xd1, 0xc9, 0x1e, 0x7a, 0xad, 0xb2, 0x65, 0x1, 0xd6, 0x3f, 0xe8, 0x8c, 0x5b, 0x44, 0x93, 0xf7, 0x20, 0xc7, 0x10, 0x74, 0xa3, 0xbc, 0x6b, 0xf, 0xd8, 0x31, 0xe6, 0x82, 0x55, 0x4a, 0x9d, 0xf9, 0x2e, 0x36, 0xe1, 0x85, 0x52, 0x4d, 0x9a, 0xfe, 0x29, 0xc0, 0x17, 0x73, 0xa4, 0xbb, 0x6c, 0x8, 0xdf}, - {0x0, 0xd8, 0xad, 0x75, 0x47, 0x9f, 0xea, 0x32, 0x8e, 0x56, 0x23, 0xfb, 0xc9, 0x11, 0x64, 0xbc, 0x1, 0xd9, 0xac, 0x74, 0x46, 0x9e, 0xeb, 0x33, 0x8f, 0x57, 0x22, 0xfa, 0xc8, 0x10, 0x65, 0xbd, 0x2, 0xda, 0xaf, 0x77, 0x45, 0x9d, 0xe8, 0x30, 0x8c, 0x54, 0x21, 0xf9, 0xcb, 0x13, 0x66, 0xbe, 0x3, 0xdb, 0xae, 0x76, 0x44, 0x9c, 0xe9, 0x31, 0x8d, 0x55, 0x20, 0xf8, 0xca, 0x12, 0x67, 0xbf, 0x4, 0xdc, 0xa9, 0x71, 0x43, 0x9b, 0xee, 0x36, 0x8a, 0x52, 0x27, 0xff, 0xcd, 0x15, 0x60, 0xb8, 0x5, 0xdd, 0xa8, 0x70, 0x42, 0x9a, 0xef, 0x37, 0x8b, 0x53, 0x26, 0xfe, 0xcc, 0x14, 0x61, 0xb9, 0x6, 0xde, 0xab, 0x73, 0x41, 0x99, 0xec, 0x34, 0x88, 0x50, 0x25, 0xfd, 0xcf, 0x17, 0x62, 0xba, 0x7, 0xdf, 0xaa, 0x72, 0x40, 0x98, 0xed, 0x35, 0x89, 0x51, 0x24, 0xfc, 0xce, 0x16, 0x63, 0xbb, 0x8, 0xd0, 0xa5, 0x7d, 0x4f, 0x97, 0xe2, 0x3a, 0x86, 0x5e, 0x2b, 0xf3, 0xc1, 0x19, 0x6c, 0xb4, 0x9, 0xd1, 0xa4, 0x7c, 0x4e, 0x96, 0xe3, 0x3b, 0x87, 0x5f, 0x2a, 0xf2, 0xc0, 0x18, 0x6d, 0xb5, 0xa, 0xd2, 0xa7, 0x7f, 0x4d, 0x95, 0xe0, 0x38, 0x84, 0x5c, 0x29, 0xf1, 0xc3, 0x1b, 0x6e, 0xb6, 0xb, 0xd3, 0xa6, 0x7e, 0x4c, 0x94, 0xe1, 0x39, 0x85, 0x5d, 0x28, 0xf0, 0xc2, 0x1a, 0x6f, 0xb7, 0xc, 0xd4, 0xa1, 0x79, 0x4b, 0x93, 0xe6, 0x3e, 0x82, 0x5a, 0x2f, 0xf7, 0xc5, 0x1d, 0x68, 0xb0, 0xd, 0xd5, 0xa0, 0x78, 0x4a, 0x92, 0xe7, 0x3f, 0x83, 0x5b, 0x2e, 0xf6, 0xc4, 0x1c, 0x69, 0xb1, 0xe, 0xd6, 0xa3, 0x7b, 0x49, 0x91, 0xe4, 0x3c, 0x80, 0x58, 0x2d, 0xf5, 0xc7, 0x1f, 0x6a, 0xb2, 0xf, 0xd7, 0xa2, 0x7a, 0x48, 0x90, 0xe5, 0x3d, 0x81, 0x59, 0x2c, 0xf4, 0xc6, 0x1e, 0x6b, 0xb3}, - {0x0, 0xd9, 0xaf, 0x76, 0x43, 0x9a, 0xec, 0x35, 0x86, 0x5f, 0x29, 0xf0, 0xc5, 0x1c, 0x6a, 0xb3, 0x11, 0xc8, 0xbe, 0x67, 0x52, 0x8b, 0xfd, 0x24, 0x97, 0x4e, 0x38, 0xe1, 0xd4, 0xd, 0x7b, 0xa2, 0x22, 0xfb, 0x8d, 0x54, 0x61, 0xb8, 0xce, 0x17, 0xa4, 0x7d, 0xb, 0xd2, 0xe7, 0x3e, 0x48, 0x91, 0x33, 0xea, 0x9c, 0x45, 0x70, 0xa9, 0xdf, 0x6, 0xb5, 0x6c, 0x1a, 0xc3, 0xf6, 0x2f, 0x59, 0x80, 0x44, 0x9d, 0xeb, 0x32, 0x7, 0xde, 0xa8, 0x71, 0xc2, 0x1b, 0x6d, 0xb4, 0x81, 0x58, 0x2e, 0xf7, 0x55, 0x8c, 0xfa, 0x23, 0x16, 0xcf, 0xb9, 0x60, 0xd3, 0xa, 0x7c, 0xa5, 0x90, 0x49, 0x3f, 0xe6, 0x66, 0xbf, 0xc9, 0x10, 0x25, 0xfc, 0x8a, 0x53, 0xe0, 0x39, 0x4f, 0x96, 0xa3, 0x7a, 0xc, 0xd5, 0x77, 0xae, 0xd8, 0x1, 0x34, 0xed, 0x9b, 0x42, 0xf1, 0x28, 0x5e, 0x87, 0xb2, 0x6b, 0x1d, 0xc4, 0x88, 0x51, 0x27, 0xfe, 0xcb, 0x12, 0x64, 0xbd, 0xe, 0xd7, 0xa1, 0x78, 0x4d, 0x94, 0xe2, 0x3b, 0x99, 0x40, 0x36, 0xef, 0xda, 0x3, 0x75, 0xac, 0x1f, 0xc6, 0xb0, 0x69, 0x5c, 0x85, 0xf3, 0x2a, 0xaa, 0x73, 0x5, 0xdc, 0xe9, 0x30, 0x46, 0x9f, 0x2c, 0xf5, 0x83, 0x5a, 0x6f, 0xb6, 0xc0, 0x19, 0xbb, 0x62, 0x14, 0xcd, 0xf8, 0x21, 0x57, 0x8e, 0x3d, 0xe4, 0x92, 0x4b, 0x7e, 0xa7, 0xd1, 0x8, 0xcc, 0x15, 0x63, 0xba, 0x8f, 0x56, 0x20, 0xf9, 0x4a, 0x93, 0xe5, 0x3c, 0x9, 0xd0, 0xa6, 0x7f, 0xdd, 0x4, 0x72, 0xab, 0x9e, 0x47, 0x31, 0xe8, 0x5b, 0x82, 0xf4, 0x2d, 0x18, 0xc1, 0xb7, 0x6e, 0xee, 0x37, 0x41, 0x98, 0xad, 0x74, 0x2, 0xdb, 0x68, 0xb1, 0xc7, 0x1e, 0x2b, 0xf2, 0x84, 0x5d, 0xff, 0x26, 0x50, 0x89, 0xbc, 0x65, 0x13, 0xca, 0x79, 0xa0, 0xd6, 0xf, 0x3a, 0xe3, 0x95, 0x4c}, - {0x0, 0xda, 0xa9, 0x73, 0x4f, 0x95, 0xe6, 0x3c, 0x9e, 0x44, 0x37, 0xed, 0xd1, 0xb, 0x78, 0xa2, 0x21, 0xfb, 0x88, 0x52, 0x6e, 0xb4, 0xc7, 0x1d, 0xbf, 0x65, 0x16, 0xcc, 0xf0, 0x2a, 0x59, 0x83, 0x42, 0x98, 0xeb, 0x31, 0xd, 0xd7, 0xa4, 0x7e, 0xdc, 0x6, 0x75, 0xaf, 0x93, 0x49, 0x3a, 0xe0, 0x63, 0xb9, 0xca, 0x10, 0x2c, 0xf6, 0x85, 0x5f, 0xfd, 0x27, 0x54, 0x8e, 0xb2, 0x68, 0x1b, 0xc1, 0x84, 0x5e, 0x2d, 0xf7, 0xcb, 0x11, 0x62, 0xb8, 0x1a, 0xc0, 0xb3, 0x69, 0x55, 0x8f, 0xfc, 0x26, 0xa5, 0x7f, 0xc, 0xd6, 0xea, 0x30, 0x43, 0x99, 0x3b, 0xe1, 0x92, 0x48, 0x74, 0xae, 0xdd, 0x7, 0xc6, 0x1c, 0x6f, 0xb5, 0x89, 0x53, 0x20, 0xfa, 0x58, 0x82, 0xf1, 0x2b, 0x17, 0xcd, 0xbe, 0x64, 0xe7, 0x3d, 0x4e, 0x94, 0xa8, 0x72, 0x1, 0xdb, 0x79, 0xa3, 0xd0, 0xa, 0x36, 0xec, 0x9f, 0x45, 0x15, 0xcf, 0xbc, 0x66, 0x5a, 0x80, 0xf3, 0x29, 0x8b, 0x51, 0x22, 0xf8, 0xc4, 0x1e, 0x6d, 0xb7, 0x34, 0xee, 0x9d, 0x47, 0x7b, 0xa1, 0xd2, 0x8, 0xaa, 0x70, 0x3, 0xd9, 0xe5, 0x3f, 0x4c, 0x96, 0x57, 0x8d, 0xfe, 0x24, 0x18, 0xc2, 0xb1, 0x6b, 0xc9, 0x13, 0x60, 0xba, 0x86, 0x5c, 0x2f, 0xf5, 0x76, 0xac, 0xdf, 0x5, 0x39, 0xe3, 0x90, 0x4a, 0xe8, 0x32, 0x41, 0x9b, 0xa7, 0x7d, 0xe, 0xd4, 0x91, 0x4b, 0x38, 0xe2, 0xde, 0x4, 0x77, 0xad, 0xf, 0xd5, 0xa6, 0x7c, 0x40, 0x9a, 0xe9, 0x33, 0xb0, 0x6a, 0x19, 0xc3, 0xff, 0x25, 0x56, 0x8c, 0x2e, 0xf4, 0x87, 0x5d, 0x61, 0xbb, 0xc8, 0x12, 0xd3, 0x9, 0x7a, 0xa0, 0x9c, 0x46, 0x35, 0xef, 0x4d, 0x97, 0xe4, 0x3e, 0x2, 0xd8, 0xab, 0x71, 0xf2, 0x28, 0x5b, 0x81, 0xbd, 0x67, 0x14, 0xce, 0x6c, 0xb6, 0xc5, 0x1f, 0x23, 0xf9, 0x8a, 0x50}, - {0x0, 0xdb, 0xab, 0x70, 0x4b, 0x90, 0xe0, 0x3b, 0x96, 0x4d, 0x3d, 0xe6, 0xdd, 0x6, 0x76, 0xad, 0x31, 0xea, 0x9a, 0x41, 0x7a, 0xa1, 0xd1, 0xa, 0xa7, 0x7c, 0xc, 0xd7, 0xec, 0x37, 0x47, 0x9c, 0x62, 0xb9, 0xc9, 0x12, 0x29, 0xf2, 0x82, 0x59, 0xf4, 0x2f, 0x5f, 0x84, 0xbf, 0x64, 0x14, 0xcf, 0x53, 0x88, 0xf8, 0x23, 0x18, 0xc3, 0xb3, 0x68, 0xc5, 0x1e, 0x6e, 0xb5, 0x8e, 0x55, 0x25, 0xfe, 0xc4, 0x1f, 0x6f, 0xb4, 0x8f, 0x54, 0x24, 0xff, 0x52, 0x89, 0xf9, 0x22, 0x19, 0xc2, 0xb2, 0x69, 0xf5, 0x2e, 0x5e, 0x85, 0xbe, 0x65, 0x15, 0xce, 0x63, 0xb8, 0xc8, 0x13, 0x28, 0xf3, 0x83, 0x58, 0xa6, 0x7d, 0xd, 0xd6, 0xed, 0x36, 0x46, 0x9d, 0x30, 0xeb, 0x9b, 0x40, 0x7b, 0xa0, 0xd0, 0xb, 0x97, 0x4c, 0x3c, 0xe7, 0xdc, 0x7, 0x77, 0xac, 0x1, 0xda, 0xaa, 0x71, 0x4a, 0x91, 0xe1, 0x3a, 0x95, 0x4e, 0x3e, 0xe5, 0xde, 0x5, 0x75, 0xae, 0x3, 0xd8, 0xa8, 0x73, 0x48, 0x93, 0xe3, 0x38, 0xa4, 0x7f, 0xf, 0xd4, 0xef, 0x34, 0x44, 0x9f, 0x32, 0xe9, 0x99, 0x42, 0x79, 0xa2, 0xd2, 0x9, 0xf7, 0x2c, 0x5c, 0x87, 0xbc, 0x67, 0x17, 0xcc, 0x61, 0xba, 0xca, 0x11, 0x2a, 0xf1, 0x81, 0x5a, 0xc6, 0x1d, 0x6d, 0xb6, 0x8d, 0x56, 0x26, 0xfd, 0x50, 0x8b, 0xfb, 0x20, 0x1b, 0xc0, 0xb0, 0x6b, 0x51, 0x8a, 0xfa, 0x21, 0x1a, 0xc1, 0xb1, 0x6a, 0xc7, 0x1c, 0x6c, 0xb7, 0x8c, 0x57, 0x27, 0xfc, 0x60, 0xbb, 0xcb, 0x10, 0x2b, 0xf0, 0x80, 0x5b, 0xf6, 0x2d, 0x5d, 0x86, 0xbd, 0x66, 0x16, 0xcd, 0x33, 0xe8, 0x98, 0x43, 0x78, 0xa3, 0xd3, 0x8, 0xa5, 0x7e, 0xe, 0xd5, 0xee, 0x35, 0x45, 0x9e, 0x2, 0xd9, 0xa9, 0x72, 0x49, 0x92, 0xe2, 0x39, 0x94, 0x4f, 0x3f, 0xe4, 0xdf, 0x4, 0x74, 0xaf}, - {0x0, 0xdc, 0xa5, 0x79, 0x57, 0x8b, 0xf2, 0x2e, 0xae, 0x72, 0xb, 0xd7, 0xf9, 0x25, 0x5c, 0x80, 0x41, 0x9d, 0xe4, 0x38, 0x16, 0xca, 0xb3, 0x6f, 0xef, 0x33, 0x4a, 0x96, 0xb8, 0x64, 0x1d, 0xc1, 0x82, 0x5e, 0x27, 0xfb, 0xd5, 0x9, 0x70, 0xac, 0x2c, 0xf0, 0x89, 0x55, 0x7b, 0xa7, 0xde, 0x2, 0xc3, 0x1f, 0x66, 0xba, 0x94, 0x48, 0x31, 0xed, 0x6d, 0xb1, 0xc8, 0x14, 0x3a, 0xe6, 0x9f, 0x43, 0x19, 0xc5, 0xbc, 0x60, 0x4e, 0x92, 0xeb, 0x37, 0xb7, 0x6b, 0x12, 0xce, 0xe0, 0x3c, 0x45, 0x99, 0x58, 0x84, 0xfd, 0x21, 0xf, 0xd3, 0xaa, 0x76, 0xf6, 0x2a, 0x53, 0x8f, 0xa1, 0x7d, 0x4, 0xd8, 0x9b, 0x47, 0x3e, 0xe2, 0xcc, 0x10, 0x69, 0xb5, 0x35, 0xe9, 0x90, 0x4c, 0x62, 0xbe, 0xc7, 0x1b, 0xda, 0x6, 0x7f, 0xa3, 0x8d, 0x51, 0x28, 0xf4, 0x74, 0xa8, 0xd1, 0xd, 0x23, 0xff, 0x86, 0x5a, 0x32, 0xee, 0x97, 0x4b, 0x65, 0xb9, 0xc0, 0x1c, 0x9c, 0x40, 0x39, 0xe5, 0xcb, 0x17, 0x6e, 0xb2, 0x73, 0xaf, 0xd6, 0xa, 0x24, 0xf8, 0x81, 0x5d, 0xdd, 0x1, 0x78, 0xa4, 0x8a, 0x56, 0x2f, 0xf3, 0xb0, 0x6c, 0x15, 0xc9, 0xe7, 0x3b, 0x42, 0x9e, 0x1e, 0xc2, 0xbb, 0x67, 0x49, 0x95, 0xec, 0x30, 0xf1, 0x2d, 0x54, 0x88, 0xa6, 0x7a, 0x3, 0xdf, 0x5f, 0x83, 0xfa, 0x26, 0x8, 0xd4, 0xad, 0x71, 0x2b, 0xf7, 0x8e, 0x52, 0x7c, 0xa0, 0xd9, 0x5, 0x85, 0x59, 0x20, 0xfc, 0xd2, 0xe, 0x77, 0xab, 0x6a, 0xb6, 0xcf, 0x13, 0x3d, 0xe1, 0x98, 0x44, 0xc4, 0x18, 0x61, 0xbd, 0x93, 0x4f, 0x36, 0xea, 0xa9, 0x75, 0xc, 0xd0, 0xfe, 0x22, 0x5b, 0x87, 0x7, 0xdb, 0xa2, 0x7e, 0x50, 0x8c, 0xf5, 0x29, 0xe8, 0x34, 0x4d, 0x91, 0xbf, 0x63, 0x1a, 0xc6, 0x46, 0x9a, 0xe3, 0x3f, 0x11, 0xcd, 0xb4, 0x68}, - {0x0, 0xdd, 0xa7, 0x7a, 0x53, 0x8e, 0xf4, 0x29, 0xa6, 0x7b, 0x1, 0xdc, 0xf5, 0x28, 0x52, 0x8f, 0x51, 0x8c, 0xf6, 0x2b, 0x2, 0xdf, 0xa5, 0x78, 0xf7, 0x2a, 0x50, 0x8d, 0xa4, 0x79, 0x3, 0xde, 0xa2, 0x7f, 0x5, 0xd8, 0xf1, 0x2c, 0x56, 0x8b, 0x4, 0xd9, 0xa3, 0x7e, 0x57, 0x8a, 0xf0, 0x2d, 0xf3, 0x2e, 0x54, 0x89, 0xa0, 0x7d, 0x7, 0xda, 0x55, 0x88, 0xf2, 0x2f, 0x6, 0xdb, 0xa1, 0x7c, 0x59, 0x84, 0xfe, 0x23, 0xa, 0xd7, 0xad, 0x70, 0xff, 0x22, 0x58, 0x85, 0xac, 0x71, 0xb, 0xd6, 0x8, 0xd5, 0xaf, 0x72, 0x5b, 0x86, 0xfc, 0x21, 0xae, 0x73, 0x9, 0xd4, 0xfd, 0x20, 0x5a, 0x87, 0xfb, 0x26, 0x5c, 0x81, 0xa8, 0x75, 0xf, 0xd2, 0x5d, 0x80, 0xfa, 0x27, 0xe, 0xd3, 0xa9, 0x74, 0xaa, 0x77, 0xd, 0xd0, 0xf9, 0x24, 0x5e, 0x83, 0xc, 0xd1, 0xab, 0x76, 0x5f, 0x82, 0xf8, 0x25, 0xb2, 0x6f, 0x15, 0xc8, 0xe1, 0x3c, 0x46, 0x9b, 0x14, 0xc9, 0xb3, 0x6e, 0x47, 0x9a, 0xe0, 0x3d, 0xe3, 0x3e, 0x44, 0x99, 0xb0, 0x6d, 0x17, 0xca, 0x45, 0x98, 0xe2, 0x3f, 0x16, 0xcb, 0xb1, 0x6c, 0x10, 0xcd, 0xb7, 0x6a, 0x43, 0x9e, 0xe4, 0x39, 0xb6, 0x6b, 0x11, 0xcc, 0xe5, 0x38, 0x42, 0x9f, 0x41, 0x9c, 0xe6, 0x3b, 0x12, 0xcf, 0xb5, 0x68, 0xe7, 0x3a, 0x40, 0x9d, 0xb4, 0x69, 0x13, 0xce, 0xeb, 0x36, 0x4c, 0x91, 0xb8, 0x65, 0x1f, 0xc2, 0x4d, 0x90, 0xea, 0x37, 0x1e, 0xc3, 0xb9, 0x64, 0xba, 0x67, 0x1d, 0xc0, 0xe9, 0x34, 0x4e, 0x93, 0x1c, 0xc1, 0xbb, 0x66, 0x4f, 0x92, 0xe8, 0x35, 0x49, 0x94, 0xee, 0x33, 0x1a, 0xc7, 0xbd, 0x60, 0xef, 0x32, 0x48, 0x95, 0xbc, 0x61, 0x1b, 0xc6, 0x18, 0xc5, 0xbf, 0x62, 0x4b, 0x96, 0xec, 0x31, 0xbe, 0x63, 0x19, 0xc4, 0xed, 0x30, 0x4a, 0x97}, - {0x0, 0xde, 0xa1, 0x7f, 0x5f, 0x81, 0xfe, 0x20, 0xbe, 0x60, 0x1f, 0xc1, 0xe1, 0x3f, 0x40, 0x9e, 0x61, 0xbf, 0xc0, 0x1e, 0x3e, 0xe0, 0x9f, 0x41, 0xdf, 0x1, 0x7e, 0xa0, 0x80, 0x5e, 0x21, 0xff, 0xc2, 0x1c, 0x63, 0xbd, 0x9d, 0x43, 0x3c, 0xe2, 0x7c, 0xa2, 0xdd, 0x3, 0x23, 0xfd, 0x82, 0x5c, 0xa3, 0x7d, 0x2, 0xdc, 0xfc, 0x22, 0x5d, 0x83, 0x1d, 0xc3, 0xbc, 0x62, 0x42, 0x9c, 0xe3, 0x3d, 0x99, 0x47, 0x38, 0xe6, 0xc6, 0x18, 0x67, 0xb9, 0x27, 0xf9, 0x86, 0x58, 0x78, 0xa6, 0xd9, 0x7, 0xf8, 0x26, 0x59, 0x87, 0xa7, 0x79, 0x6, 0xd8, 0x46, 0x98, 0xe7, 0x39, 0x19, 0xc7, 0xb8, 0x66, 0x5b, 0x85, 0xfa, 0x24, 0x4, 0xda, 0xa5, 0x7b, 0xe5, 0x3b, 0x44, 0x9a, 0xba, 0x64, 0x1b, 0xc5, 0x3a, 0xe4, 0x9b, 0x45, 0x65, 0xbb, 0xc4, 0x1a, 0x84, 0x5a, 0x25, 0xfb, 0xdb, 0x5, 0x7a, 0xa4, 0x2f, 0xf1, 0x8e, 0x50, 0x70, 0xae, 0xd1, 0xf, 0x91, 0x4f, 0x30, 0xee, 0xce, 0x10, 0x6f, 0xb1, 0x4e, 0x90, 0xef, 0x31, 0x11, 0xcf, 0xb0, 0x6e, 0xf0, 0x2e, 0x51, 0x8f, 0xaf, 0x71, 0xe, 0xd0, 0xed, 0x33, 0x4c, 0x92, 0xb2, 0x6c, 0x13, 0xcd, 0x53, 0x8d, 0xf2, 0x2c, 0xc, 0xd2, 0xad, 0x73, 0x8c, 0x52, 0x2d, 0xf3, 0xd3, 0xd, 0x72, 0xac, 0x32, 0xec, 0x93, 0x4d, 0x6d, 0xb3, 0xcc, 0x12, 0xb6, 0x68, 0x17, 0xc9, 0xe9, 0x37, 0x48, 0x96, 0x8, 0xd6, 0xa9, 0x77, 0x57, 0x89, 0xf6, 0x28, 0xd7, 0x9, 0x76, 0xa8, 0x88, 0x56, 0x29, 0xf7, 0x69, 0xb7, 0xc8, 0x16, 0x36, 0xe8, 0x97, 0x49, 0x74, 0xaa, 0xd5, 0xb, 0x2b, 0xf5, 0x8a, 0x54, 0xca, 0x14, 0x6b, 0xb5, 0x95, 0x4b, 0x34, 0xea, 0x15, 0xcb, 0xb4, 0x6a, 0x4a, 0x94, 0xeb, 0x35, 0xab, 0x75, 0xa, 0xd4, 0xf4, 0x2a, 0x55, 0x8b}, - {0x0, 0xdf, 0xa3, 0x7c, 0x5b, 0x84, 0xf8, 0x27, 0xb6, 0x69, 0x15, 0xca, 0xed, 0x32, 0x4e, 0x91, 0x71, 0xae, 0xd2, 0xd, 0x2a, 0xf5, 0x89, 0x56, 0xc7, 0x18, 0x64, 0xbb, 0x9c, 0x43, 0x3f, 0xe0, 0xe2, 0x3d, 0x41, 0x9e, 0xb9, 0x66, 0x1a, 0xc5, 0x54, 0x8b, 0xf7, 0x28, 0xf, 0xd0, 0xac, 0x73, 0x93, 0x4c, 0x30, 0xef, 0xc8, 0x17, 0x6b, 0xb4, 0x25, 0xfa, 0x86, 0x59, 0x7e, 0xa1, 0xdd, 0x2, 0xd9, 0x6, 0x7a, 0xa5, 0x82, 0x5d, 0x21, 0xfe, 0x6f, 0xb0, 0xcc, 0x13, 0x34, 0xeb, 0x97, 0x48, 0xa8, 0x77, 0xb, 0xd4, 0xf3, 0x2c, 0x50, 0x8f, 0x1e, 0xc1, 0xbd, 0x62, 0x45, 0x9a, 0xe6, 0x39, 0x3b, 0xe4, 0x98, 0x47, 0x60, 0xbf, 0xc3, 0x1c, 0x8d, 0x52, 0x2e, 0xf1, 0xd6, 0x9, 0x75, 0xaa, 0x4a, 0x95, 0xe9, 0x36, 0x11, 0xce, 0xb2, 0x6d, 0xfc, 0x23, 0x5f, 0x80, 0xa7, 0x78, 0x4, 0xdb, 0xaf, 0x70, 0xc, 0xd3, 0xf4, 0x2b, 0x57, 0x88, 0x19, 0xc6, 0xba, 0x65, 0x42, 0x9d, 0xe1, 0x3e, 0xde, 0x1, 0x7d, 0xa2, 0x85, 0x5a, 0x26, 0xf9, 0x68, 0xb7, 0xcb, 0x14, 0x33, 0xec, 0x90, 0x4f, 0x4d, 0x92, 0xee, 0x31, 0x16, 0xc9, 0xb5, 0x6a, 0xfb, 0x24, 0x58, 0x87, 0xa0, 0x7f, 0x3, 0xdc, 0x3c, 0xe3, 0x9f, 0x40, 0x67, 0xb8, 0xc4, 0x1b, 0x8a, 0x55, 0x29, 0xf6, 0xd1, 0xe, 0x72, 0xad, 0x76, 0xa9, 0xd5, 0xa, 0x2d, 0xf2, 0x8e, 0x51, 0xc0, 0x1f, 0x63, 0xbc, 0x9b, 0x44, 0x38, 0xe7, 0x7, 0xd8, 0xa4, 0x7b, 0x5c, 0x83, 0xff, 0x20, 0xb1, 0x6e, 0x12, 0xcd, 0xea, 0x35, 0x49, 0x96, 0x94, 0x4b, 0x37, 0xe8, 0xcf, 0x10, 0x6c, 0xb3, 0x22, 0xfd, 0x81, 0x5e, 0x79, 0xa6, 0xda, 0x5, 0xe5, 0x3a, 0x46, 0x99, 0xbe, 0x61, 0x1d, 0xc2, 0x53, 0x8c, 0xf0, 0x2f, 0x8, 0xd7, 0xab, 0x74}, - {0x0, 0xe0, 0xdd, 0x3d, 0xa7, 0x47, 0x7a, 0x9a, 0x53, 0xb3, 0x8e, 0x6e, 0xf4, 0x14, 0x29, 0xc9, 0xa6, 0x46, 0x7b, 0x9b, 0x1, 0xe1, 0xdc, 0x3c, 0xf5, 0x15, 0x28, 0xc8, 0x52, 0xb2, 0x8f, 0x6f, 0x51, 0xb1, 0x8c, 0x6c, 0xf6, 0x16, 0x2b, 0xcb, 0x2, 0xe2, 0xdf, 0x3f, 0xa5, 0x45, 0x78, 0x98, 0xf7, 0x17, 0x2a, 0xca, 0x50, 0xb0, 0x8d, 0x6d, 0xa4, 0x44, 0x79, 0x99, 0x3, 0xe3, 0xde, 0x3e, 0xa2, 0x42, 0x7f, 0x9f, 0x5, 0xe5, 0xd8, 0x38, 0xf1, 0x11, 0x2c, 0xcc, 0x56, 0xb6, 0x8b, 0x6b, 0x4, 0xe4, 0xd9, 0x39, 0xa3, 0x43, 0x7e, 0x9e, 0x57, 0xb7, 0x8a, 0x6a, 0xf0, 0x10, 0x2d, 0xcd, 0xf3, 0x13, 0x2e, 0xce, 0x54, 0xb4, 0x89, 0x69, 0xa0, 0x40, 0x7d, 0x9d, 0x7, 0xe7, 0xda, 0x3a, 0x55, 0xb5, 0x88, 0x68, 0xf2, 0x12, 0x2f, 0xcf, 0x6, 0xe6, 0xdb, 0x3b, 0xa1, 0x41, 0x7c, 0x9c, 0x59, 0xb9, 0x84, 0x64, 0xfe, 0x1e, 0x23, 0xc3, 0xa, 0xea, 0xd7, 0x37, 0xad, 0x4d, 0x70, 0x90, 0xff, 0x1f, 0x22, 0xc2, 0x58, 0xb8, 0x85, 0x65, 0xac, 0x4c, 0x71, 0x91, 0xb, 0xeb, 0xd6, 0x36, 0x8, 0xe8, 0xd5, 0x35, 0xaf, 0x4f, 0x72, 0x92, 0x5b, 0xbb, 0x86, 0x66, 0xfc, 0x1c, 0x21, 0xc1, 0xae, 0x4e, 0x73, 0x93, 0x9, 0xe9, 0xd4, 0x34, 0xfd, 0x1d, 0x20, 0xc0, 0x5a, 0xba, 0x87, 0x67, 0xfb, 0x1b, 0x26, 0xc6, 0x5c, 0xbc, 0x81, 0x61, 0xa8, 0x48, 0x75, 0x95, 0xf, 0xef, 0xd2, 0x32, 0x5d, 0xbd, 0x80, 0x60, 0xfa, 0x1a, 0x27, 0xc7, 0xe, 0xee, 0xd3, 0x33, 0xa9, 0x49, 0x74, 0x94, 0xaa, 0x4a, 0x77, 0x97, 0xd, 0xed, 0xd0, 0x30, 0xf9, 0x19, 0x24, 0xc4, 0x5e, 0xbe, 0x83, 0x63, 0xc, 0xec, 0xd1, 0x31, 0xab, 0x4b, 0x76, 0x96, 0x5f, 0xbf, 0x82, 0x62, 0xf8, 0x18, 0x25, 0xc5}, - {0x0, 0xe1, 0xdf, 0x3e, 0xa3, 0x42, 0x7c, 0x9d, 0x5b, 0xba, 0x84, 0x65, 0xf8, 0x19, 0x27, 0xc6, 0xb6, 0x57, 0x69, 0x88, 0x15, 0xf4, 0xca, 0x2b, 0xed, 0xc, 0x32, 0xd3, 0x4e, 0xaf, 0x91, 0x70, 0x71, 0x90, 0xae, 0x4f, 0xd2, 0x33, 0xd, 0xec, 0x2a, 0xcb, 0xf5, 0x14, 0x89, 0x68, 0x56, 0xb7, 0xc7, 0x26, 0x18, 0xf9, 0x64, 0x85, 0xbb, 0x5a, 0x9c, 0x7d, 0x43, 0xa2, 0x3f, 0xde, 0xe0, 0x1, 0xe2, 0x3, 0x3d, 0xdc, 0x41, 0xa0, 0x9e, 0x7f, 0xb9, 0x58, 0x66, 0x87, 0x1a, 0xfb, 0xc5, 0x24, 0x54, 0xb5, 0x8b, 0x6a, 0xf7, 0x16, 0x28, 0xc9, 0xf, 0xee, 0xd0, 0x31, 0xac, 0x4d, 0x73, 0x92, 0x93, 0x72, 0x4c, 0xad, 0x30, 0xd1, 0xef, 0xe, 0xc8, 0x29, 0x17, 0xf6, 0x6b, 0x8a, 0xb4, 0x55, 0x25, 0xc4, 0xfa, 0x1b, 0x86, 0x67, 0x59, 0xb8, 0x7e, 0x9f, 0xa1, 0x40, 0xdd, 0x3c, 0x2, 0xe3, 0xd9, 0x38, 0x6, 0xe7, 0x7a, 0x9b, 0xa5, 0x44, 0x82, 0x63, 0x5d, 0xbc, 0x21, 0xc0, 0xfe, 0x1f, 0x6f, 0x8e, 0xb0, 0x51, 0xcc, 0x2d, 0x13, 0xf2, 0x34, 0xd5, 0xeb, 0xa, 0x97, 0x76, 0x48, 0xa9, 0xa8, 0x49, 0x77, 0x96, 0xb, 0xea, 0xd4, 0x35, 0xf3, 0x12, 0x2c, 0xcd, 0x50, 0xb1, 0x8f, 0x6e, 0x1e, 0xff, 0xc1, 0x20, 0xbd, 0x5c, 0x62, 0x83, 0x45, 0xa4, 0x9a, 0x7b, 0xe6, 0x7, 0x39, 0xd8, 0x3b, 0xda, 0xe4, 0x5, 0x98, 0x79, 0x47, 0xa6, 0x60, 0x81, 0xbf, 0x5e, 0xc3, 0x22, 0x1c, 0xfd, 0x8d, 0x6c, 0x52, 0xb3, 0x2e, 0xcf, 0xf1, 0x10, 0xd6, 0x37, 0x9, 0xe8, 0x75, 0x94, 0xaa, 0x4b, 0x4a, 0xab, 0x95, 0x74, 0xe9, 0x8, 0x36, 0xd7, 0x11, 0xf0, 0xce, 0x2f, 0xb2, 0x53, 0x6d, 0x8c, 0xfc, 0x1d, 0x23, 0xc2, 0x5f, 0xbe, 0x80, 0x61, 0xa7, 0x46, 0x78, 0x99, 0x4, 0xe5, 0xdb, 0x3a}, - {0x0, 0xe2, 0xd9, 0x3b, 0xaf, 0x4d, 0x76, 0x94, 0x43, 0xa1, 0x9a, 0x78, 0xec, 0xe, 0x35, 0xd7, 0x86, 0x64, 0x5f, 0xbd, 0x29, 0xcb, 0xf0, 0x12, 0xc5, 0x27, 0x1c, 0xfe, 0x6a, 0x88, 0xb3, 0x51, 0x11, 0xf3, 0xc8, 0x2a, 0xbe, 0x5c, 0x67, 0x85, 0x52, 0xb0, 0x8b, 0x69, 0xfd, 0x1f, 0x24, 0xc6, 0x97, 0x75, 0x4e, 0xac, 0x38, 0xda, 0xe1, 0x3, 0xd4, 0x36, 0xd, 0xef, 0x7b, 0x99, 0xa2, 0x40, 0x22, 0xc0, 0xfb, 0x19, 0x8d, 0x6f, 0x54, 0xb6, 0x61, 0x83, 0xb8, 0x5a, 0xce, 0x2c, 0x17, 0xf5, 0xa4, 0x46, 0x7d, 0x9f, 0xb, 0xe9, 0xd2, 0x30, 0xe7, 0x5, 0x3e, 0xdc, 0x48, 0xaa, 0x91, 0x73, 0x33, 0xd1, 0xea, 0x8, 0x9c, 0x7e, 0x45, 0xa7, 0x70, 0x92, 0xa9, 0x4b, 0xdf, 0x3d, 0x6, 0xe4, 0xb5, 0x57, 0x6c, 0x8e, 0x1a, 0xf8, 0xc3, 0x21, 0xf6, 0x14, 0x2f, 0xcd, 0x59, 0xbb, 0x80, 0x62, 0x44, 0xa6, 0x9d, 0x7f, 0xeb, 0x9, 0x32, 0xd0, 0x7, 0xe5, 0xde, 0x3c, 0xa8, 0x4a, 0x71, 0x93, 0xc2, 0x20, 0x1b, 0xf9, 0x6d, 0x8f, 0xb4, 0x56, 0x81, 0x63, 0x58, 0xba, 0x2e, 0xcc, 0xf7, 0x15, 0x55, 0xb7, 0x8c, 0x6e, 0xfa, 0x18, 0x23, 0xc1, 0x16, 0xf4, 0xcf, 0x2d, 0xb9, 0x5b, 0x60, 0x82, 0xd3, 0x31, 0xa, 0xe8, 0x7c, 0x9e, 0xa5, 0x47, 0x90, 0x72, 0x49, 0xab, 0x3f, 0xdd, 0xe6, 0x4, 0x66, 0x84, 0xbf, 0x5d, 0xc9, 0x2b, 0x10, 0xf2, 0x25, 0xc7, 0xfc, 0x1e, 0x8a, 0x68, 0x53, 0xb1, 0xe0, 0x2, 0x39, 0xdb, 0x4f, 0xad, 0x96, 0x74, 0xa3, 0x41, 0x7a, 0x98, 0xc, 0xee, 0xd5, 0x37, 0x77, 0x95, 0xae, 0x4c, 0xd8, 0x3a, 0x1, 0xe3, 0x34, 0xd6, 0xed, 0xf, 0x9b, 0x79, 0x42, 0xa0, 0xf1, 0x13, 0x28, 0xca, 0x5e, 0xbc, 0x87, 0x65, 0xb2, 0x50, 0x6b, 0x89, 0x1d, 0xff, 0xc4, 0x26}, - {0x0, 0xe3, 0xdb, 0x38, 0xab, 0x48, 0x70, 0x93, 0x4b, 0xa8, 0x90, 0x73, 0xe0, 0x3, 0x3b, 0xd8, 0x96, 0x75, 0x4d, 0xae, 0x3d, 0xde, 0xe6, 0x5, 0xdd, 0x3e, 0x6, 0xe5, 0x76, 0x95, 0xad, 0x4e, 0x31, 0xd2, 0xea, 0x9, 0x9a, 0x79, 0x41, 0xa2, 0x7a, 0x99, 0xa1, 0x42, 0xd1, 0x32, 0xa, 0xe9, 0xa7, 0x44, 0x7c, 0x9f, 0xc, 0xef, 0xd7, 0x34, 0xec, 0xf, 0x37, 0xd4, 0x47, 0xa4, 0x9c, 0x7f, 0x62, 0x81, 0xb9, 0x5a, 0xc9, 0x2a, 0x12, 0xf1, 0x29, 0xca, 0xf2, 0x11, 0x82, 0x61, 0x59, 0xba, 0xf4, 0x17, 0x2f, 0xcc, 0x5f, 0xbc, 0x84, 0x67, 0xbf, 0x5c, 0x64, 0x87, 0x14, 0xf7, 0xcf, 0x2c, 0x53, 0xb0, 0x88, 0x6b, 0xf8, 0x1b, 0x23, 0xc0, 0x18, 0xfb, 0xc3, 0x20, 0xb3, 0x50, 0x68, 0x8b, 0xc5, 0x26, 0x1e, 0xfd, 0x6e, 0x8d, 0xb5, 0x56, 0x8e, 0x6d, 0x55, 0xb6, 0x25, 0xc6, 0xfe, 0x1d, 0xc4, 0x27, 0x1f, 0xfc, 0x6f, 0x8c, 0xb4, 0x57, 0x8f, 0x6c, 0x54, 0xb7, 0x24, 0xc7, 0xff, 0x1c, 0x52, 0xb1, 0x89, 0x6a, 0xf9, 0x1a, 0x22, 0xc1, 0x19, 0xfa, 0xc2, 0x21, 0xb2, 0x51, 0x69, 0x8a, 0xf5, 0x16, 0x2e, 0xcd, 0x5e, 0xbd, 0x85, 0x66, 0xbe, 0x5d, 0x65, 0x86, 0x15, 0xf6, 0xce, 0x2d, 0x63, 0x80, 0xb8, 0x5b, 0xc8, 0x2b, 0x13, 0xf0, 0x28, 0xcb, 0xf3, 0x10, 0x83, 0x60, 0x58, 0xbb, 0xa6, 0x45, 0x7d, 0x9e, 0xd, 0xee, 0xd6, 0x35, 0xed, 0xe, 0x36, 0xd5, 0x46, 0xa5, 0x9d, 0x7e, 0x30, 0xd3, 0xeb, 0x8, 0x9b, 0x78, 0x40, 0xa3, 0x7b, 0x98, 0xa0, 0x43, 0xd0, 0x33, 0xb, 0xe8, 0x97, 0x74, 0x4c, 0xaf, 0x3c, 0xdf, 0xe7, 0x4, 0xdc, 0x3f, 0x7, 0xe4, 0x77, 0x94, 0xac, 0x4f, 0x1, 0xe2, 0xda, 0x39, 0xaa, 0x49, 0x71, 0x92, 0x4a, 0xa9, 0x91, 0x72, 0xe1, 0x2, 0x3a, 0xd9}, - {0x0, 0xe4, 0xd5, 0x31, 0xb7, 0x53, 0x62, 0x86, 0x73, 0x97, 0xa6, 0x42, 0xc4, 0x20, 0x11, 0xf5, 0xe6, 0x2, 0x33, 0xd7, 0x51, 0xb5, 0x84, 0x60, 0x95, 0x71, 0x40, 0xa4, 0x22, 0xc6, 0xf7, 0x13, 0xd1, 0x35, 0x4, 0xe0, 0x66, 0x82, 0xb3, 0x57, 0xa2, 0x46, 0x77, 0x93, 0x15, 0xf1, 0xc0, 0x24, 0x37, 0xd3, 0xe2, 0x6, 0x80, 0x64, 0x55, 0xb1, 0x44, 0xa0, 0x91, 0x75, 0xf3, 0x17, 0x26, 0xc2, 0xbf, 0x5b, 0x6a, 0x8e, 0x8, 0xec, 0xdd, 0x39, 0xcc, 0x28, 0x19, 0xfd, 0x7b, 0x9f, 0xae, 0x4a, 0x59, 0xbd, 0x8c, 0x68, 0xee, 0xa, 0x3b, 0xdf, 0x2a, 0xce, 0xff, 0x1b, 0x9d, 0x79, 0x48, 0xac, 0x6e, 0x8a, 0xbb, 0x5f, 0xd9, 0x3d, 0xc, 0xe8, 0x1d, 0xf9, 0xc8, 0x2c, 0xaa, 0x4e, 0x7f, 0x9b, 0x88, 0x6c, 0x5d, 0xb9, 0x3f, 0xdb, 0xea, 0xe, 0xfb, 0x1f, 0x2e, 0xca, 0x4c, 0xa8, 0x99, 0x7d, 0x63, 0x87, 0xb6, 0x52, 0xd4, 0x30, 0x1, 0xe5, 0x10, 0xf4, 0xc5, 0x21, 0xa7, 0x43, 0x72, 0x96, 0x85, 0x61, 0x50, 0xb4, 0x32, 0xd6, 0xe7, 0x3, 0xf6, 0x12, 0x23, 0xc7, 0x41, 0xa5, 0x94, 0x70, 0xb2, 0x56, 0x67, 0x83, 0x5, 0xe1, 0xd0, 0x34, 0xc1, 0x25, 0x14, 0xf0, 0x76, 0x92, 0xa3, 0x47, 0x54, 0xb0, 0x81, 0x65, 0xe3, 0x7, 0x36, 0xd2, 0x27, 0xc3, 0xf2, 0x16, 0x90, 0x74, 0x45, 0xa1, 0xdc, 0x38, 0x9, 0xed, 0x6b, 0x8f, 0xbe, 0x5a, 0xaf, 0x4b, 0x7a, 0x9e, 0x18, 0xfc, 0xcd, 0x29, 0x3a, 0xde, 0xef, 0xb, 0x8d, 0x69, 0x58, 0xbc, 0x49, 0xad, 0x9c, 0x78, 0xfe, 0x1a, 0x2b, 0xcf, 0xd, 0xe9, 0xd8, 0x3c, 0xba, 0x5e, 0x6f, 0x8b, 0x7e, 0x9a, 0xab, 0x4f, 0xc9, 0x2d, 0x1c, 0xf8, 0xeb, 0xf, 0x3e, 0xda, 0x5c, 0xb8, 0x89, 0x6d, 0x98, 0x7c, 0x4d, 0xa9, 0x2f, 0xcb, 0xfa, 0x1e}, - {0x0, 0xe5, 0xd7, 0x32, 0xb3, 0x56, 0x64, 0x81, 0x7b, 0x9e, 0xac, 0x49, 0xc8, 0x2d, 0x1f, 0xfa, 0xf6, 0x13, 0x21, 0xc4, 0x45, 0xa0, 0x92, 0x77, 0x8d, 0x68, 0x5a, 0xbf, 0x3e, 0xdb, 0xe9, 0xc, 0xf1, 0x14, 0x26, 0xc3, 0x42, 0xa7, 0x95, 0x70, 0x8a, 0x6f, 0x5d, 0xb8, 0x39, 0xdc, 0xee, 0xb, 0x7, 0xe2, 0xd0, 0x35, 0xb4, 0x51, 0x63, 0x86, 0x7c, 0x99, 0xab, 0x4e, 0xcf, 0x2a, 0x18, 0xfd, 0xff, 0x1a, 0x28, 0xcd, 0x4c, 0xa9, 0x9b, 0x7e, 0x84, 0x61, 0x53, 0xb6, 0x37, 0xd2, 0xe0, 0x5, 0x9, 0xec, 0xde, 0x3b, 0xba, 0x5f, 0x6d, 0x88, 0x72, 0x97, 0xa5, 0x40, 0xc1, 0x24, 0x16, 0xf3, 0xe, 0xeb, 0xd9, 0x3c, 0xbd, 0x58, 0x6a, 0x8f, 0x75, 0x90, 0xa2, 0x47, 0xc6, 0x23, 0x11, 0xf4, 0xf8, 0x1d, 0x2f, 0xca, 0x4b, 0xae, 0x9c, 0x79, 0x83, 0x66, 0x54, 0xb1, 0x30, 0xd5, 0xe7, 0x2, 0xe3, 0x6, 0x34, 0xd1, 0x50, 0xb5, 0x87, 0x62, 0x98, 0x7d, 0x4f, 0xaa, 0x2b, 0xce, 0xfc, 0x19, 0x15, 0xf0, 0xc2, 0x27, 0xa6, 0x43, 0x71, 0x94, 0x6e, 0x8b, 0xb9, 0x5c, 0xdd, 0x38, 0xa, 0xef, 0x12, 0xf7, 0xc5, 0x20, 0xa1, 0x44, 0x76, 0x93, 0x69, 0x8c, 0xbe, 0x5b, 0xda, 0x3f, 0xd, 0xe8, 0xe4, 0x1, 0x33, 0xd6, 0x57, 0xb2, 0x80, 0x65, 0x9f, 0x7a, 0x48, 0xad, 0x2c, 0xc9, 0xfb, 0x1e, 0x1c, 0xf9, 0xcb, 0x2e, 0xaf, 0x4a, 0x78, 0x9d, 0x67, 0x82, 0xb0, 0x55, 0xd4, 0x31, 0x3, 0xe6, 0xea, 0xf, 0x3d, 0xd8, 0x59, 0xbc, 0x8e, 0x6b, 0x91, 0x74, 0x46, 0xa3, 0x22, 0xc7, 0xf5, 0x10, 0xed, 0x8, 0x3a, 0xdf, 0x5e, 0xbb, 0x89, 0x6c, 0x96, 0x73, 0x41, 0xa4, 0x25, 0xc0, 0xf2, 0x17, 0x1b, 0xfe, 0xcc, 0x29, 0xa8, 0x4d, 0x7f, 0x9a, 0x60, 0x85, 0xb7, 0x52, 0xd3, 0x36, 0x4, 0xe1}, - {0x0, 0xe6, 0xd1, 0x37, 0xbf, 0x59, 0x6e, 0x88, 0x63, 0x85, 0xb2, 0x54, 0xdc, 0x3a, 0xd, 0xeb, 0xc6, 0x20, 0x17, 0xf1, 0x79, 0x9f, 0xa8, 0x4e, 0xa5, 0x43, 0x74, 0x92, 0x1a, 0xfc, 0xcb, 0x2d, 0x91, 0x77, 0x40, 0xa6, 0x2e, 0xc8, 0xff, 0x19, 0xf2, 0x14, 0x23, 0xc5, 0x4d, 0xab, 0x9c, 0x7a, 0x57, 0xb1, 0x86, 0x60, 0xe8, 0xe, 0x39, 0xdf, 0x34, 0xd2, 0xe5, 0x3, 0x8b, 0x6d, 0x5a, 0xbc, 0x3f, 0xd9, 0xee, 0x8, 0x80, 0x66, 0x51, 0xb7, 0x5c, 0xba, 0x8d, 0x6b, 0xe3, 0x5, 0x32, 0xd4, 0xf9, 0x1f, 0x28, 0xce, 0x46, 0xa0, 0x97, 0x71, 0x9a, 0x7c, 0x4b, 0xad, 0x25, 0xc3, 0xf4, 0x12, 0xae, 0x48, 0x7f, 0x99, 0x11, 0xf7, 0xc0, 0x26, 0xcd, 0x2b, 0x1c, 0xfa, 0x72, 0x94, 0xa3, 0x45, 0x68, 0x8e, 0xb9, 0x5f, 0xd7, 0x31, 0x6, 0xe0, 0xb, 0xed, 0xda, 0x3c, 0xb4, 0x52, 0x65, 0x83, 0x7e, 0x98, 0xaf, 0x49, 0xc1, 0x27, 0x10, 0xf6, 0x1d, 0xfb, 0xcc, 0x2a, 0xa2, 0x44, 0x73, 0x95, 0xb8, 0x5e, 0x69, 0x8f, 0x7, 0xe1, 0xd6, 0x30, 0xdb, 0x3d, 0xa, 0xec, 0x64, 0x82, 0xb5, 0x53, 0xef, 0x9, 0x3e, 0xd8, 0x50, 0xb6, 0x81, 0x67, 0x8c, 0x6a, 0x5d, 0xbb, 0x33, 0xd5, 0xe2, 0x4, 0x29, 0xcf, 0xf8, 0x1e, 0x96, 0x70, 0x47, 0xa1, 0x4a, 0xac, 0x9b, 0x7d, 0xf5, 0x13, 0x24, 0xc2, 0x41, 0xa7, 0x90, 0x76, 0xfe, 0x18, 0x2f, 0xc9, 0x22, 0xc4, 0xf3, 0x15, 0x9d, 0x7b, 0x4c, 0xaa, 0x87, 0x61, 0x56, 0xb0, 0x38, 0xde, 0xe9, 0xf, 0xe4, 0x2, 0x35, 0xd3, 0x5b, 0xbd, 0x8a, 0x6c, 0xd0, 0x36, 0x1, 0xe7, 0x6f, 0x89, 0xbe, 0x58, 0xb3, 0x55, 0x62, 0x84, 0xc, 0xea, 0xdd, 0x3b, 0x16, 0xf0, 0xc7, 0x21, 0xa9, 0x4f, 0x78, 0x9e, 0x75, 0x93, 0xa4, 0x42, 0xca, 0x2c, 0x1b, 0xfd}, - {0x0, 0xe7, 0xd3, 0x34, 0xbb, 0x5c, 0x68, 0x8f, 0x6b, 0x8c, 0xb8, 0x5f, 0xd0, 0x37, 0x3, 0xe4, 0xd6, 0x31, 0x5, 0xe2, 0x6d, 0x8a, 0xbe, 0x59, 0xbd, 0x5a, 0x6e, 0x89, 0x6, 0xe1, 0xd5, 0x32, 0xb1, 0x56, 0x62, 0x85, 0xa, 0xed, 0xd9, 0x3e, 0xda, 0x3d, 0x9, 0xee, 0x61, 0x86, 0xb2, 0x55, 0x67, 0x80, 0xb4, 0x53, 0xdc, 0x3b, 0xf, 0xe8, 0xc, 0xeb, 0xdf, 0x38, 0xb7, 0x50, 0x64, 0x83, 0x7f, 0x98, 0xac, 0x4b, 0xc4, 0x23, 0x17, 0xf0, 0x14, 0xf3, 0xc7, 0x20, 0xaf, 0x48, 0x7c, 0x9b, 0xa9, 0x4e, 0x7a, 0x9d, 0x12, 0xf5, 0xc1, 0x26, 0xc2, 0x25, 0x11, 0xf6, 0x79, 0x9e, 0xaa, 0x4d, 0xce, 0x29, 0x1d, 0xfa, 0x75, 0x92, 0xa6, 0x41, 0xa5, 0x42, 0x76, 0x91, 0x1e, 0xf9, 0xcd, 0x2a, 0x18, 0xff, 0xcb, 0x2c, 0xa3, 0x44, 0x70, 0x97, 0x73, 0x94, 0xa0, 0x47, 0xc8, 0x2f, 0x1b, 0xfc, 0xfe, 0x19, 0x2d, 0xca, 0x45, 0xa2, 0x96, 0x71, 0x95, 0x72, 0x46, 0xa1, 0x2e, 0xc9, 0xfd, 0x1a, 0x28, 0xcf, 0xfb, 0x1c, 0x93, 0x74, 0x40, 0xa7, 0x43, 0xa4, 0x90, 0x77, 0xf8, 0x1f, 0x2b, 0xcc, 0x4f, 0xa8, 0x9c, 0x7b, 0xf4, 0x13, 0x27, 0xc0, 0x24, 0xc3, 0xf7, 0x10, 0x9f, 0x78, 0x4c, 0xab, 0x99, 0x7e, 0x4a, 0xad, 0x22, 0xc5, 0xf1, 0x16, 0xf2, 0x15, 0x21, 0xc6, 0x49, 0xae, 0x9a, 0x7d, 0x81, 0x66, 0x52, 0xb5, 0x3a, 0xdd, 0xe9, 0xe, 0xea, 0xd, 0x39, 0xde, 0x51, 0xb6, 0x82, 0x65, 0x57, 0xb0, 0x84, 0x63, 0xec, 0xb, 0x3f, 0xd8, 0x3c, 0xdb, 0xef, 0x8, 0x87, 0x60, 0x54, 0xb3, 0x30, 0xd7, 0xe3, 0x4, 0x8b, 0x6c, 0x58, 0xbf, 0x5b, 0xbc, 0x88, 0x6f, 0xe0, 0x7, 0x33, 0xd4, 0xe6, 0x1, 0x35, 0xd2, 0x5d, 0xba, 0x8e, 0x69, 0x8d, 0x6a, 0x5e, 0xb9, 0x36, 0xd1, 0xe5, 0x2}, - {0x0, 0xe8, 0xcd, 0x25, 0x87, 0x6f, 0x4a, 0xa2, 0x13, 0xfb, 0xde, 0x36, 0x94, 0x7c, 0x59, 0xb1, 0x26, 0xce, 0xeb, 0x3, 0xa1, 0x49, 0x6c, 0x84, 0x35, 0xdd, 0xf8, 0x10, 0xb2, 0x5a, 0x7f, 0x97, 0x4c, 0xa4, 0x81, 0x69, 0xcb, 0x23, 0x6, 0xee, 0x5f, 0xb7, 0x92, 0x7a, 0xd8, 0x30, 0x15, 0xfd, 0x6a, 0x82, 0xa7, 0x4f, 0xed, 0x5, 0x20, 0xc8, 0x79, 0x91, 0xb4, 0x5c, 0xfe, 0x16, 0x33, 0xdb, 0x98, 0x70, 0x55, 0xbd, 0x1f, 0xf7, 0xd2, 0x3a, 0x8b, 0x63, 0x46, 0xae, 0xc, 0xe4, 0xc1, 0x29, 0xbe, 0x56, 0x73, 0x9b, 0x39, 0xd1, 0xf4, 0x1c, 0xad, 0x45, 0x60, 0x88, 0x2a, 0xc2, 0xe7, 0xf, 0xd4, 0x3c, 0x19, 0xf1, 0x53, 0xbb, 0x9e, 0x76, 0xc7, 0x2f, 0xa, 0xe2, 0x40, 0xa8, 0x8d, 0x65, 0xf2, 0x1a, 0x3f, 0xd7, 0x75, 0x9d, 0xb8, 0x50, 0xe1, 0x9, 0x2c, 0xc4, 0x66, 0x8e, 0xab, 0x43, 0x2d, 0xc5, 0xe0, 0x8, 0xaa, 0x42, 0x67, 0x8f, 0x3e, 0xd6, 0xf3, 0x1b, 0xb9, 0x51, 0x74, 0x9c, 0xb, 0xe3, 0xc6, 0x2e, 0x8c, 0x64, 0x41, 0xa9, 0x18, 0xf0, 0xd5, 0x3d, 0x9f, 0x77, 0x52, 0xba, 0x61, 0x89, 0xac, 0x44, 0xe6, 0xe, 0x2b, 0xc3, 0x72, 0x9a, 0xbf, 0x57, 0xf5, 0x1d, 0x38, 0xd0, 0x47, 0xaf, 0x8a, 0x62, 0xc0, 0x28, 0xd, 0xe5, 0x54, 0xbc, 0x99, 0x71, 0xd3, 0x3b, 0x1e, 0xf6, 0xb5, 0x5d, 0x78, 0x90, 0x32, 0xda, 0xff, 0x17, 0xa6, 0x4e, 0x6b, 0x83, 0x21, 0xc9, 0xec, 0x4, 0x93, 0x7b, 0x5e, 0xb6, 0x14, 0xfc, 0xd9, 0x31, 0x80, 0x68, 0x4d, 0xa5, 0x7, 0xef, 0xca, 0x22, 0xf9, 0x11, 0x34, 0xdc, 0x7e, 0x96, 0xb3, 0x5b, 0xea, 0x2, 0x27, 0xcf, 0x6d, 0x85, 0xa0, 0x48, 0xdf, 0x37, 0x12, 0xfa, 0x58, 0xb0, 0x95, 0x7d, 0xcc, 0x24, 0x1, 0xe9, 0x4b, 0xa3, 0x86, 0x6e}, - {0x0, 0xe9, 0xcf, 0x26, 0x83, 0x6a, 0x4c, 0xa5, 0x1b, 0xf2, 0xd4, 0x3d, 0x98, 0x71, 0x57, 0xbe, 0x36, 0xdf, 0xf9, 0x10, 0xb5, 0x5c, 0x7a, 0x93, 0x2d, 0xc4, 0xe2, 0xb, 0xae, 0x47, 0x61, 0x88, 0x6c, 0x85, 0xa3, 0x4a, 0xef, 0x6, 0x20, 0xc9, 0x77, 0x9e, 0xb8, 0x51, 0xf4, 0x1d, 0x3b, 0xd2, 0x5a, 0xb3, 0x95, 0x7c, 0xd9, 0x30, 0x16, 0xff, 0x41, 0xa8, 0x8e, 0x67, 0xc2, 0x2b, 0xd, 0xe4, 0xd8, 0x31, 0x17, 0xfe, 0x5b, 0xb2, 0x94, 0x7d, 0xc3, 0x2a, 0xc, 0xe5, 0x40, 0xa9, 0x8f, 0x66, 0xee, 0x7, 0x21, 0xc8, 0x6d, 0x84, 0xa2, 0x4b, 0xf5, 0x1c, 0x3a, 0xd3, 0x76, 0x9f, 0xb9, 0x50, 0xb4, 0x5d, 0x7b, 0x92, 0x37, 0xde, 0xf8, 0x11, 0xaf, 0x46, 0x60, 0x89, 0x2c, 0xc5, 0xe3, 0xa, 0x82, 0x6b, 0x4d, 0xa4, 0x1, 0xe8, 0xce, 0x27, 0x99, 0x70, 0x56, 0xbf, 0x1a, 0xf3, 0xd5, 0x3c, 0xad, 0x44, 0x62, 0x8b, 0x2e, 0xc7, 0xe1, 0x8, 0xb6, 0x5f, 0x79, 0x90, 0x35, 0xdc, 0xfa, 0x13, 0x9b, 0x72, 0x54, 0xbd, 0x18, 0xf1, 0xd7, 0x3e, 0x80, 0x69, 0x4f, 0xa6, 0x3, 0xea, 0xcc, 0x25, 0xc1, 0x28, 0xe, 0xe7, 0x42, 0xab, 0x8d, 0x64, 0xda, 0x33, 0x15, 0xfc, 0x59, 0xb0, 0x96, 0x7f, 0xf7, 0x1e, 0x38, 0xd1, 0x74, 0x9d, 0xbb, 0x52, 0xec, 0x5, 0x23, 0xca, 0x6f, 0x86, 0xa0, 0x49, 0x75, 0x9c, 0xba, 0x53, 0xf6, 0x1f, 0x39, 0xd0, 0x6e, 0x87, 0xa1, 0x48, 0xed, 0x4, 0x22, 0xcb, 0x43, 0xaa, 0x8c, 0x65, 0xc0, 0x29, 0xf, 0xe6, 0x58, 0xb1, 0x97, 0x7e, 0xdb, 0x32, 0x14, 0xfd, 0x19, 0xf0, 0xd6, 0x3f, 0x9a, 0x73, 0x55, 0xbc, 0x2, 0xeb, 0xcd, 0x24, 0x81, 0x68, 0x4e, 0xa7, 0x2f, 0xc6, 0xe0, 0x9, 0xac, 0x45, 0x63, 0x8a, 0x34, 0xdd, 0xfb, 0x12, 0xb7, 0x5e, 0x78, 0x91}, - {0x0, 0xea, 0xc9, 0x23, 0x8f, 0x65, 0x46, 0xac, 0x3, 0xe9, 0xca, 0x20, 0x8c, 0x66, 0x45, 0xaf, 0x6, 0xec, 0xcf, 0x25, 0x89, 0x63, 0x40, 0xaa, 0x5, 0xef, 0xcc, 0x26, 0x8a, 0x60, 0x43, 0xa9, 0xc, 0xe6, 0xc5, 0x2f, 0x83, 0x69, 0x4a, 0xa0, 0xf, 0xe5, 0xc6, 0x2c, 0x80, 0x6a, 0x49, 0xa3, 0xa, 0xe0, 0xc3, 0x29, 0x85, 0x6f, 0x4c, 0xa6, 0x9, 0xe3, 0xc0, 0x2a, 0x86, 0x6c, 0x4f, 0xa5, 0x18, 0xf2, 0xd1, 0x3b, 0x97, 0x7d, 0x5e, 0xb4, 0x1b, 0xf1, 0xd2, 0x38, 0x94, 0x7e, 0x5d, 0xb7, 0x1e, 0xf4, 0xd7, 0x3d, 0x91, 0x7b, 0x58, 0xb2, 0x1d, 0xf7, 0xd4, 0x3e, 0x92, 0x78, 0x5b, 0xb1, 0x14, 0xfe, 0xdd, 0x37, 0x9b, 0x71, 0x52, 0xb8, 0x17, 0xfd, 0xde, 0x34, 0x98, 0x72, 0x51, 0xbb, 0x12, 0xf8, 0xdb, 0x31, 0x9d, 0x77, 0x54, 0xbe, 0x11, 0xfb, 0xd8, 0x32, 0x9e, 0x74, 0x57, 0xbd, 0x30, 0xda, 0xf9, 0x13, 0xbf, 0x55, 0x76, 0x9c, 0x33, 0xd9, 0xfa, 0x10, 0xbc, 0x56, 0x75, 0x9f, 0x36, 0xdc, 0xff, 0x15, 0xb9, 0x53, 0x70, 0x9a, 0x35, 0xdf, 0xfc, 0x16, 0xba, 0x50, 0x73, 0x99, 0x3c, 0xd6, 0xf5, 0x1f, 0xb3, 0x59, 0x7a, 0x90, 0x3f, 0xd5, 0xf6, 0x1c, 0xb0, 0x5a, 0x79, 0x93, 0x3a, 0xd0, 0xf3, 0x19, 0xb5, 0x5f, 0x7c, 0x96, 0x39, 0xd3, 0xf0, 0x1a, 0xb6, 0x5c, 0x7f, 0x95, 0x28, 0xc2, 0xe1, 0xb, 0xa7, 0x4d, 0x6e, 0x84, 0x2b, 0xc1, 0xe2, 0x8, 0xa4, 0x4e, 0x6d, 0x87, 0x2e, 0xc4, 0xe7, 0xd, 0xa1, 0x4b, 0x68, 0x82, 0x2d, 0xc7, 0xe4, 0xe, 0xa2, 0x48, 0x6b, 0x81, 0x24, 0xce, 0xed, 0x7, 0xab, 0x41, 0x62, 0x88, 0x27, 0xcd, 0xee, 0x4, 0xa8, 0x42, 0x61, 0x8b, 0x22, 0xc8, 0xeb, 0x1, 0xad, 0x47, 0x64, 0x8e, 0x21, 0xcb, 0xe8, 0x2, 0xae, 0x44, 0x67, 0x8d}, - {0x0, 0xeb, 0xcb, 0x20, 0x8b, 0x60, 0x40, 0xab, 0xb, 0xe0, 0xc0, 0x2b, 0x80, 0x6b, 0x4b, 0xa0, 0x16, 0xfd, 0xdd, 0x36, 0x9d, 0x76, 0x56, 0xbd, 0x1d, 0xf6, 0xd6, 0x3d, 0x96, 0x7d, 0x5d, 0xb6, 0x2c, 0xc7, 0xe7, 0xc, 0xa7, 0x4c, 0x6c, 0x87, 0x27, 0xcc, 0xec, 0x7, 0xac, 0x47, 0x67, 0x8c, 0x3a, 0xd1, 0xf1, 0x1a, 0xb1, 0x5a, 0x7a, 0x91, 0x31, 0xda, 0xfa, 0x11, 0xba, 0x51, 0x71, 0x9a, 0x58, 0xb3, 0x93, 0x78, 0xd3, 0x38, 0x18, 0xf3, 0x53, 0xb8, 0x98, 0x73, 0xd8, 0x33, 0x13, 0xf8, 0x4e, 0xa5, 0x85, 0x6e, 0xc5, 0x2e, 0xe, 0xe5, 0x45, 0xae, 0x8e, 0x65, 0xce, 0x25, 0x5, 0xee, 0x74, 0x9f, 0xbf, 0x54, 0xff, 0x14, 0x34, 0xdf, 0x7f, 0x94, 0xb4, 0x5f, 0xf4, 0x1f, 0x3f, 0xd4, 0x62, 0x89, 0xa9, 0x42, 0xe9, 0x2, 0x22, 0xc9, 0x69, 0x82, 0xa2, 0x49, 0xe2, 0x9, 0x29, 0xc2, 0xb0, 0x5b, 0x7b, 0x90, 0x3b, 0xd0, 0xf0, 0x1b, 0xbb, 0x50, 0x70, 0x9b, 0x30, 0xdb, 0xfb, 0x10, 0xa6, 0x4d, 0x6d, 0x86, 0x2d, 0xc6, 0xe6, 0xd, 0xad, 0x46, 0x66, 0x8d, 0x26, 0xcd, 0xed, 0x6, 0x9c, 0x77, 0x57, 0xbc, 0x17, 0xfc, 0xdc, 0x37, 0x97, 0x7c, 0x5c, 0xb7, 0x1c, 0xf7, 0xd7, 0x3c, 0x8a, 0x61, 0x41, 0xaa, 0x1, 0xea, 0xca, 0x21, 0x81, 0x6a, 0x4a, 0xa1, 0xa, 0xe1, 0xc1, 0x2a, 0xe8, 0x3, 0x23, 0xc8, 0x63, 0x88, 0xa8, 0x43, 0xe3, 0x8, 0x28, 0xc3, 0x68, 0x83, 0xa3, 0x48, 0xfe, 0x15, 0x35, 0xde, 0x75, 0x9e, 0xbe, 0x55, 0xf5, 0x1e, 0x3e, 0xd5, 0x7e, 0x95, 0xb5, 0x5e, 0xc4, 0x2f, 0xf, 0xe4, 0x4f, 0xa4, 0x84, 0x6f, 0xcf, 0x24, 0x4, 0xef, 0x44, 0xaf, 0x8f, 0x64, 0xd2, 0x39, 0x19, 0xf2, 0x59, 0xb2, 0x92, 0x79, 0xd9, 0x32, 0x12, 0xf9, 0x52, 0xb9, 0x99, 0x72}, - {0x0, 0xec, 0xc5, 0x29, 0x97, 0x7b, 0x52, 0xbe, 0x33, 0xdf, 0xf6, 0x1a, 0xa4, 0x48, 0x61, 0x8d, 0x66, 0x8a, 0xa3, 0x4f, 0xf1, 0x1d, 0x34, 0xd8, 0x55, 0xb9, 0x90, 0x7c, 0xc2, 0x2e, 0x7, 0xeb, 0xcc, 0x20, 0x9, 0xe5, 0x5b, 0xb7, 0x9e, 0x72, 0xff, 0x13, 0x3a, 0xd6, 0x68, 0x84, 0xad, 0x41, 0xaa, 0x46, 0x6f, 0x83, 0x3d, 0xd1, 0xf8, 0x14, 0x99, 0x75, 0x5c, 0xb0, 0xe, 0xe2, 0xcb, 0x27, 0x85, 0x69, 0x40, 0xac, 0x12, 0xfe, 0xd7, 0x3b, 0xb6, 0x5a, 0x73, 0x9f, 0x21, 0xcd, 0xe4, 0x8, 0xe3, 0xf, 0x26, 0xca, 0x74, 0x98, 0xb1, 0x5d, 0xd0, 0x3c, 0x15, 0xf9, 0x47, 0xab, 0x82, 0x6e, 0x49, 0xa5, 0x8c, 0x60, 0xde, 0x32, 0x1b, 0xf7, 0x7a, 0x96, 0xbf, 0x53, 0xed, 0x1, 0x28, 0xc4, 0x2f, 0xc3, 0xea, 0x6, 0xb8, 0x54, 0x7d, 0x91, 0x1c, 0xf0, 0xd9, 0x35, 0x8b, 0x67, 0x4e, 0xa2, 0x17, 0xfb, 0xd2, 0x3e, 0x80, 0x6c, 0x45, 0xa9, 0x24, 0xc8, 0xe1, 0xd, 0xb3, 0x5f, 0x76, 0x9a, 0x71, 0x9d, 0xb4, 0x58, 0xe6, 0xa, 0x23, 0xcf, 0x42, 0xae, 0x87, 0x6b, 0xd5, 0x39, 0x10, 0xfc, 0xdb, 0x37, 0x1e, 0xf2, 0x4c, 0xa0, 0x89, 0x65, 0xe8, 0x4, 0x2d, 0xc1, 0x7f, 0x93, 0xba, 0x56, 0xbd, 0x51, 0x78, 0x94, 0x2a, 0xc6, 0xef, 0x3, 0x8e, 0x62, 0x4b, 0xa7, 0x19, 0xf5, 0xdc, 0x30, 0x92, 0x7e, 0x57, 0xbb, 0x5, 0xe9, 0xc0, 0x2c, 0xa1, 0x4d, 0x64, 0x88, 0x36, 0xda, 0xf3, 0x1f, 0xf4, 0x18, 0x31, 0xdd, 0x63, 0x8f, 0xa6, 0x4a, 0xc7, 0x2b, 0x2, 0xee, 0x50, 0xbc, 0x95, 0x79, 0x5e, 0xb2, 0x9b, 0x77, 0xc9, 0x25, 0xc, 0xe0, 0x6d, 0x81, 0xa8, 0x44, 0xfa, 0x16, 0x3f, 0xd3, 0x38, 0xd4, 0xfd, 0x11, 0xaf, 0x43, 0x6a, 0x86, 0xb, 0xe7, 0xce, 0x22, 0x9c, 0x70, 0x59, 0xb5}, - {0x0, 0xed, 0xc7, 0x2a, 0x93, 0x7e, 0x54, 0xb9, 0x3b, 0xd6, 0xfc, 0x11, 0xa8, 0x45, 0x6f, 0x82, 0x76, 0x9b, 0xb1, 0x5c, 0xe5, 0x8, 0x22, 0xcf, 0x4d, 0xa0, 0x8a, 0x67, 0xde, 0x33, 0x19, 0xf4, 0xec, 0x1, 0x2b, 0xc6, 0x7f, 0x92, 0xb8, 0x55, 0xd7, 0x3a, 0x10, 0xfd, 0x44, 0xa9, 0x83, 0x6e, 0x9a, 0x77, 0x5d, 0xb0, 0x9, 0xe4, 0xce, 0x23, 0xa1, 0x4c, 0x66, 0x8b, 0x32, 0xdf, 0xf5, 0x18, 0xc5, 0x28, 0x2, 0xef, 0x56, 0xbb, 0x91, 0x7c, 0xfe, 0x13, 0x39, 0xd4, 0x6d, 0x80, 0xaa, 0x47, 0xb3, 0x5e, 0x74, 0x99, 0x20, 0xcd, 0xe7, 0xa, 0x88, 0x65, 0x4f, 0xa2, 0x1b, 0xf6, 0xdc, 0x31, 0x29, 0xc4, 0xee, 0x3, 0xba, 0x57, 0x7d, 0x90, 0x12, 0xff, 0xd5, 0x38, 0x81, 0x6c, 0x46, 0xab, 0x5f, 0xb2, 0x98, 0x75, 0xcc, 0x21, 0xb, 0xe6, 0x64, 0x89, 0xa3, 0x4e, 0xf7, 0x1a, 0x30, 0xdd, 0x97, 0x7a, 0x50, 0xbd, 0x4, 0xe9, 0xc3, 0x2e, 0xac, 0x41, 0x6b, 0x86, 0x3f, 0xd2, 0xf8, 0x15, 0xe1, 0xc, 0x26, 0xcb, 0x72, 0x9f, 0xb5, 0x58, 0xda, 0x37, 0x1d, 0xf0, 0x49, 0xa4, 0x8e, 0x63, 0x7b, 0x96, 0xbc, 0x51, 0xe8, 0x5, 0x2f, 0xc2, 0x40, 0xad, 0x87, 0x6a, 0xd3, 0x3e, 0x14, 0xf9, 0xd, 0xe0, 0xca, 0x27, 0x9e, 0x73, 0x59, 0xb4, 0x36, 0xdb, 0xf1, 0x1c, 0xa5, 0x48, 0x62, 0x8f, 0x52, 0xbf, 0x95, 0x78, 0xc1, 0x2c, 0x6, 0xeb, 0x69, 0x84, 0xae, 0x43, 0xfa, 0x17, 0x3d, 0xd0, 0x24, 0xc9, 0xe3, 0xe, 0xb7, 0x5a, 0x70, 0x9d, 0x1f, 0xf2, 0xd8, 0x35, 0x8c, 0x61, 0x4b, 0xa6, 0xbe, 0x53, 0x79, 0x94, 0x2d, 0xc0, 0xea, 0x7, 0x85, 0x68, 0x42, 0xaf, 0x16, 0xfb, 0xd1, 0x3c, 0xc8, 0x25, 0xf, 0xe2, 0x5b, 0xb6, 0x9c, 0x71, 0xf3, 0x1e, 0x34, 0xd9, 0x60, 0x8d, 0xa7, 0x4a}, - {0x0, 0xee, 0xc1, 0x2f, 0x9f, 0x71, 0x5e, 0xb0, 0x23, 0xcd, 0xe2, 0xc, 0xbc, 0x52, 0x7d, 0x93, 0x46, 0xa8, 0x87, 0x69, 0xd9, 0x37, 0x18, 0xf6, 0x65, 0x8b, 0xa4, 0x4a, 0xfa, 0x14, 0x3b, 0xd5, 0x8c, 0x62, 0x4d, 0xa3, 0x13, 0xfd, 0xd2, 0x3c, 0xaf, 0x41, 0x6e, 0x80, 0x30, 0xde, 0xf1, 0x1f, 0xca, 0x24, 0xb, 0xe5, 0x55, 0xbb, 0x94, 0x7a, 0xe9, 0x7, 0x28, 0xc6, 0x76, 0x98, 0xb7, 0x59, 0x5, 0xeb, 0xc4, 0x2a, 0x9a, 0x74, 0x5b, 0xb5, 0x26, 0xc8, 0xe7, 0x9, 0xb9, 0x57, 0x78, 0x96, 0x43, 0xad, 0x82, 0x6c, 0xdc, 0x32, 0x1d, 0xf3, 0x60, 0x8e, 0xa1, 0x4f, 0xff, 0x11, 0x3e, 0xd0, 0x89, 0x67, 0x48, 0xa6, 0x16, 0xf8, 0xd7, 0x39, 0xaa, 0x44, 0x6b, 0x85, 0x35, 0xdb, 0xf4, 0x1a, 0xcf, 0x21, 0xe, 0xe0, 0x50, 0xbe, 0x91, 0x7f, 0xec, 0x2, 0x2d, 0xc3, 0x73, 0x9d, 0xb2, 0x5c, 0xa, 0xe4, 0xcb, 0x25, 0x95, 0x7b, 0x54, 0xba, 0x29, 0xc7, 0xe8, 0x6, 0xb6, 0x58, 0x77, 0x99, 0x4c, 0xa2, 0x8d, 0x63, 0xd3, 0x3d, 0x12, 0xfc, 0x6f, 0x81, 0xae, 0x40, 0xf0, 0x1e, 0x31, 0xdf, 0x86, 0x68, 0x47, 0xa9, 0x19, 0xf7, 0xd8, 0x36, 0xa5, 0x4b, 0x64, 0x8a, 0x3a, 0xd4, 0xfb, 0x15, 0xc0, 0x2e, 0x1, 0xef, 0x5f, 0xb1, 0x9e, 0x70, 0xe3, 0xd, 0x22, 0xcc, 0x7c, 0x92, 0xbd, 0x53, 0xf, 0xe1, 0xce, 0x20, 0x90, 0x7e, 0x51, 0xbf, 0x2c, 0xc2, 0xed, 0x3, 0xb3, 0x5d, 0x72, 0x9c, 0x49, 0xa7, 0x88, 0x66, 0xd6, 0x38, 0x17, 0xf9, 0x6a, 0x84, 0xab, 0x45, 0xf5, 0x1b, 0x34, 0xda, 0x83, 0x6d, 0x42, 0xac, 0x1c, 0xf2, 0xdd, 0x33, 0xa0, 0x4e, 0x61, 0x8f, 0x3f, 0xd1, 0xfe, 0x10, 0xc5, 0x2b, 0x4, 0xea, 0x5a, 0xb4, 0x9b, 0x75, 0xe6, 0x8, 0x27, 0xc9, 0x79, 0x97, 0xb8, 0x56}, - {0x0, 0xef, 0xc3, 0x2c, 0x9b, 0x74, 0x58, 0xb7, 0x2b, 0xc4, 0xe8, 0x7, 0xb0, 0x5f, 0x73, 0x9c, 0x56, 0xb9, 0x95, 0x7a, 0xcd, 0x22, 0xe, 0xe1, 0x7d, 0x92, 0xbe, 0x51, 0xe6, 0x9, 0x25, 0xca, 0xac, 0x43, 0x6f, 0x80, 0x37, 0xd8, 0xf4, 0x1b, 0x87, 0x68, 0x44, 0xab, 0x1c, 0xf3, 0xdf, 0x30, 0xfa, 0x15, 0x39, 0xd6, 0x61, 0x8e, 0xa2, 0x4d, 0xd1, 0x3e, 0x12, 0xfd, 0x4a, 0xa5, 0x89, 0x66, 0x45, 0xaa, 0x86, 0x69, 0xde, 0x31, 0x1d, 0xf2, 0x6e, 0x81, 0xad, 0x42, 0xf5, 0x1a, 0x36, 0xd9, 0x13, 0xfc, 0xd0, 0x3f, 0x88, 0x67, 0x4b, 0xa4, 0x38, 0xd7, 0xfb, 0x14, 0xa3, 0x4c, 0x60, 0x8f, 0xe9, 0x6, 0x2a, 0xc5, 0x72, 0x9d, 0xb1, 0x5e, 0xc2, 0x2d, 0x1, 0xee, 0x59, 0xb6, 0x9a, 0x75, 0xbf, 0x50, 0x7c, 0x93, 0x24, 0xcb, 0xe7, 0x8, 0x94, 0x7b, 0x57, 0xb8, 0xf, 0xe0, 0xcc, 0x23, 0x8a, 0x65, 0x49, 0xa6, 0x11, 0xfe, 0xd2, 0x3d, 0xa1, 0x4e, 0x62, 0x8d, 0x3a, 0xd5, 0xf9, 0x16, 0xdc, 0x33, 0x1f, 0xf0, 0x47, 0xa8, 0x84, 0x6b, 0xf7, 0x18, 0x34, 0xdb, 0x6c, 0x83, 0xaf, 0x40, 0x26, 0xc9, 0xe5, 0xa, 0xbd, 0x52, 0x7e, 0x91, 0xd, 0xe2, 0xce, 0x21, 0x96, 0x79, 0x55, 0xba, 0x70, 0x9f, 0xb3, 0x5c, 0xeb, 0x4, 0x28, 0xc7, 0x5b, 0xb4, 0x98, 0x77, 0xc0, 0x2f, 0x3, 0xec, 0xcf, 0x20, 0xc, 0xe3, 0x54, 0xbb, 0x97, 0x78, 0xe4, 0xb, 0x27, 0xc8, 0x7f, 0x90, 0xbc, 0x53, 0x99, 0x76, 0x5a, 0xb5, 0x2, 0xed, 0xc1, 0x2e, 0xb2, 0x5d, 0x71, 0x9e, 0x29, 0xc6, 0xea, 0x5, 0x63, 0x8c, 0xa0, 0x4f, 0xf8, 0x17, 0x3b, 0xd4, 0x48, 0xa7, 0x8b, 0x64, 0xd3, 0x3c, 0x10, 0xff, 0x35, 0xda, 0xf6, 0x19, 0xae, 0x41, 0x6d, 0x82, 0x1e, 0xf1, 0xdd, 0x32, 0x85, 0x6a, 0x46, 0xa9}, - {0x0, 0xf0, 0xfd, 0xd, 0xe7, 0x17, 0x1a, 0xea, 0xd3, 0x23, 0x2e, 0xde, 0x34, 0xc4, 0xc9, 0x39, 0xbb, 0x4b, 0x46, 0xb6, 0x5c, 0xac, 0xa1, 0x51, 0x68, 0x98, 0x95, 0x65, 0x8f, 0x7f, 0x72, 0x82, 0x6b, 0x9b, 0x96, 0x66, 0x8c, 0x7c, 0x71, 0x81, 0xb8, 0x48, 0x45, 0xb5, 0x5f, 0xaf, 0xa2, 0x52, 0xd0, 0x20, 0x2d, 0xdd, 0x37, 0xc7, 0xca, 0x3a, 0x3, 0xf3, 0xfe, 0xe, 0xe4, 0x14, 0x19, 0xe9, 0xd6, 0x26, 0x2b, 0xdb, 0x31, 0xc1, 0xcc, 0x3c, 0x5, 0xf5, 0xf8, 0x8, 0xe2, 0x12, 0x1f, 0xef, 0x6d, 0x9d, 0x90, 0x60, 0x8a, 0x7a, 0x77, 0x87, 0xbe, 0x4e, 0x43, 0xb3, 0x59, 0xa9, 0xa4, 0x54, 0xbd, 0x4d, 0x40, 0xb0, 0x5a, 0xaa, 0xa7, 0x57, 0x6e, 0x9e, 0x93, 0x63, 0x89, 0x79, 0x74, 0x84, 0x6, 0xf6, 0xfb, 0xb, 0xe1, 0x11, 0x1c, 0xec, 0xd5, 0x25, 0x28, 0xd8, 0x32, 0xc2, 0xcf, 0x3f, 0xb1, 0x41, 0x4c, 0xbc, 0x56, 0xa6, 0xab, 0x5b, 0x62, 0x92, 0x9f, 0x6f, 0x85, 0x75, 0x78, 0x88, 0xa, 0xfa, 0xf7, 0x7, 0xed, 0x1d, 0x10, 0xe0, 0xd9, 0x29, 0x24, 0xd4, 0x3e, 0xce, 0xc3, 0x33, 0xda, 0x2a, 0x27, 0xd7, 0x3d, 0xcd, 0xc0, 0x30, 0x9, 0xf9, 0xf4, 0x4, 0xee, 0x1e, 0x13, 0xe3, 0x61, 0x91, 0x9c, 0x6c, 0x86, 0x76, 0x7b, 0x8b, 0xb2, 0x42, 0x4f, 0xbf, 0x55, 0xa5, 0xa8, 0x58, 0x67, 0x97, 0x9a, 0x6a, 0x80, 0x70, 0x7d, 0x8d, 0xb4, 0x44, 0x49, 0xb9, 0x53, 0xa3, 0xae, 0x5e, 0xdc, 0x2c, 0x21, 0xd1, 0x3b, 0xcb, 0xc6, 0x36, 0xf, 0xff, 0xf2, 0x2, 0xe8, 0x18, 0x15, 0xe5, 0xc, 0xfc, 0xf1, 0x1, 0xeb, 0x1b, 0x16, 0xe6, 0xdf, 0x2f, 0x22, 0xd2, 0x38, 0xc8, 0xc5, 0x35, 0xb7, 0x47, 0x4a, 0xba, 0x50, 0xa0, 0xad, 0x5d, 0x64, 0x94, 0x99, 0x69, 0x83, 0x73, 0x7e, 0x8e}, - {0x0, 0xf1, 0xff, 0xe, 0xe3, 0x12, 0x1c, 0xed, 0xdb, 0x2a, 0x24, 0xd5, 0x38, 0xc9, 0xc7, 0x36, 0xab, 0x5a, 0x54, 0xa5, 0x48, 0xb9, 0xb7, 0x46, 0x70, 0x81, 0x8f, 0x7e, 0x93, 0x62, 0x6c, 0x9d, 0x4b, 0xba, 0xb4, 0x45, 0xa8, 0x59, 0x57, 0xa6, 0x90, 0x61, 0x6f, 0x9e, 0x73, 0x82, 0x8c, 0x7d, 0xe0, 0x11, 0x1f, 0xee, 0x3, 0xf2, 0xfc, 0xd, 0x3b, 0xca, 0xc4, 0x35, 0xd8, 0x29, 0x27, 0xd6, 0x96, 0x67, 0x69, 0x98, 0x75, 0x84, 0x8a, 0x7b, 0x4d, 0xbc, 0xb2, 0x43, 0xae, 0x5f, 0x51, 0xa0, 0x3d, 0xcc, 0xc2, 0x33, 0xde, 0x2f, 0x21, 0xd0, 0xe6, 0x17, 0x19, 0xe8, 0x5, 0xf4, 0xfa, 0xb, 0xdd, 0x2c, 0x22, 0xd3, 0x3e, 0xcf, 0xc1, 0x30, 0x6, 0xf7, 0xf9, 0x8, 0xe5, 0x14, 0x1a, 0xeb, 0x76, 0x87, 0x89, 0x78, 0x95, 0x64, 0x6a, 0x9b, 0xad, 0x5c, 0x52, 0xa3, 0x4e, 0xbf, 0xb1, 0x40, 0x31, 0xc0, 0xce, 0x3f, 0xd2, 0x23, 0x2d, 0xdc, 0xea, 0x1b, 0x15, 0xe4, 0x9, 0xf8, 0xf6, 0x7, 0x9a, 0x6b, 0x65, 0x94, 0x79, 0x88, 0x86, 0x77, 0x41, 0xb0, 0xbe, 0x4f, 0xa2, 0x53, 0x5d, 0xac, 0x7a, 0x8b, 0x85, 0x74, 0x99, 0x68, 0x66, 0x97, 0xa1, 0x50, 0x5e, 0xaf, 0x42, 0xb3, 0xbd, 0x4c, 0xd1, 0x20, 0x2e, 0xdf, 0x32, 0xc3, 0xcd, 0x3c, 0xa, 0xfb, 0xf5, 0x4, 0xe9, 0x18, 0x16, 0xe7, 0xa7, 0x56, 0x58, 0xa9, 0x44, 0xb5, 0xbb, 0x4a, 0x7c, 0x8d, 0x83, 0x72, 0x9f, 0x6e, 0x60, 0x91, 0xc, 0xfd, 0xf3, 0x2, 0xef, 0x1e, 0x10, 0xe1, 0xd7, 0x26, 0x28, 0xd9, 0x34, 0xc5, 0xcb, 0x3a, 0xec, 0x1d, 0x13, 0xe2, 0xf, 0xfe, 0xf0, 0x1, 0x37, 0xc6, 0xc8, 0x39, 0xd4, 0x25, 0x2b, 0xda, 0x47, 0xb6, 0xb8, 0x49, 0xa4, 0x55, 0x5b, 0xaa, 0x9c, 0x6d, 0x63, 0x92, 0x7f, 0x8e, 0x80, 0x71}, - {0x0, 0xf2, 0xf9, 0xb, 0xef, 0x1d, 0x16, 0xe4, 0xc3, 0x31, 0x3a, 0xc8, 0x2c, 0xde, 0xd5, 0x27, 0x9b, 0x69, 0x62, 0x90, 0x74, 0x86, 0x8d, 0x7f, 0x58, 0xaa, 0xa1, 0x53, 0xb7, 0x45, 0x4e, 0xbc, 0x2b, 0xd9, 0xd2, 0x20, 0xc4, 0x36, 0x3d, 0xcf, 0xe8, 0x1a, 0x11, 0xe3, 0x7, 0xf5, 0xfe, 0xc, 0xb0, 0x42, 0x49, 0xbb, 0x5f, 0xad, 0xa6, 0x54, 0x73, 0x81, 0x8a, 0x78, 0x9c, 0x6e, 0x65, 0x97, 0x56, 0xa4, 0xaf, 0x5d, 0xb9, 0x4b, 0x40, 0xb2, 0x95, 0x67, 0x6c, 0x9e, 0x7a, 0x88, 0x83, 0x71, 0xcd, 0x3f, 0x34, 0xc6, 0x22, 0xd0, 0xdb, 0x29, 0xe, 0xfc, 0xf7, 0x5, 0xe1, 0x13, 0x18, 0xea, 0x7d, 0x8f, 0x84, 0x76, 0x92, 0x60, 0x6b, 0x99, 0xbe, 0x4c, 0x47, 0xb5, 0x51, 0xa3, 0xa8, 0x5a, 0xe6, 0x14, 0x1f, 0xed, 0x9, 0xfb, 0xf0, 0x2, 0x25, 0xd7, 0xdc, 0x2e, 0xca, 0x38, 0x33, 0xc1, 0xac, 0x5e, 0x55, 0xa7, 0x43, 0xb1, 0xba, 0x48, 0x6f, 0x9d, 0x96, 0x64, 0x80, 0x72, 0x79, 0x8b, 0x37, 0xc5, 0xce, 0x3c, 0xd8, 0x2a, 0x21, 0xd3, 0xf4, 0x6, 0xd, 0xff, 0x1b, 0xe9, 0xe2, 0x10, 0x87, 0x75, 0x7e, 0x8c, 0x68, 0x9a, 0x91, 0x63, 0x44, 0xb6, 0xbd, 0x4f, 0xab, 0x59, 0x52, 0xa0, 0x1c, 0xee, 0xe5, 0x17, 0xf3, 0x1, 0xa, 0xf8, 0xdf, 0x2d, 0x26, 0xd4, 0x30, 0xc2, 0xc9, 0x3b, 0xfa, 0x8, 0x3, 0xf1, 0x15, 0xe7, 0xec, 0x1e, 0x39, 0xcb, 0xc0, 0x32, 0xd6, 0x24, 0x2f, 0xdd, 0x61, 0x93, 0x98, 0x6a, 0x8e, 0x7c, 0x77, 0x85, 0xa2, 0x50, 0x5b, 0xa9, 0x4d, 0xbf, 0xb4, 0x46, 0xd1, 0x23, 0x28, 0xda, 0x3e, 0xcc, 0xc7, 0x35, 0x12, 0xe0, 0xeb, 0x19, 0xfd, 0xf, 0x4, 0xf6, 0x4a, 0xb8, 0xb3, 0x41, 0xa5, 0x57, 0x5c, 0xae, 0x89, 0x7b, 0x70, 0x82, 0x66, 0x94, 0x9f, 0x6d}, - {0x0, 0xf3, 0xfb, 0x8, 0xeb, 0x18, 0x10, 0xe3, 0xcb, 0x38, 0x30, 0xc3, 0x20, 0xd3, 0xdb, 0x28, 0x8b, 0x78, 0x70, 0x83, 0x60, 0x93, 0x9b, 0x68, 0x40, 0xb3, 0xbb, 0x48, 0xab, 0x58, 0x50, 0xa3, 0xb, 0xf8, 0xf0, 0x3, 0xe0, 0x13, 0x1b, 0xe8, 0xc0, 0x33, 0x3b, 0xc8, 0x2b, 0xd8, 0xd0, 0x23, 0x80, 0x73, 0x7b, 0x88, 0x6b, 0x98, 0x90, 0x63, 0x4b, 0xb8, 0xb0, 0x43, 0xa0, 0x53, 0x5b, 0xa8, 0x16, 0xe5, 0xed, 0x1e, 0xfd, 0xe, 0x6, 0xf5, 0xdd, 0x2e, 0x26, 0xd5, 0x36, 0xc5, 0xcd, 0x3e, 0x9d, 0x6e, 0x66, 0x95, 0x76, 0x85, 0x8d, 0x7e, 0x56, 0xa5, 0xad, 0x5e, 0xbd, 0x4e, 0x46, 0xb5, 0x1d, 0xee, 0xe6, 0x15, 0xf6, 0x5, 0xd, 0xfe, 0xd6, 0x25, 0x2d, 0xde, 0x3d, 0xce, 0xc6, 0x35, 0x96, 0x65, 0x6d, 0x9e, 0x7d, 0x8e, 0x86, 0x75, 0x5d, 0xae, 0xa6, 0x55, 0xb6, 0x45, 0x4d, 0xbe, 0x2c, 0xdf, 0xd7, 0x24, 0xc7, 0x34, 0x3c, 0xcf, 0xe7, 0x14, 0x1c, 0xef, 0xc, 0xff, 0xf7, 0x4, 0xa7, 0x54, 0x5c, 0xaf, 0x4c, 0xbf, 0xb7, 0x44, 0x6c, 0x9f, 0x97, 0x64, 0x87, 0x74, 0x7c, 0x8f, 0x27, 0xd4, 0xdc, 0x2f, 0xcc, 0x3f, 0x37, 0xc4, 0xec, 0x1f, 0x17, 0xe4, 0x7, 0xf4, 0xfc, 0xf, 0xac, 0x5f, 0x57, 0xa4, 0x47, 0xb4, 0xbc, 0x4f, 0x67, 0x94, 0x9c, 0x6f, 0x8c, 0x7f, 0x77, 0x84, 0x3a, 0xc9, 0xc1, 0x32, 0xd1, 0x22, 0x2a, 0xd9, 0xf1, 0x2, 0xa, 0xf9, 0x1a, 0xe9, 0xe1, 0x12, 0xb1, 0x42, 0x4a, 0xb9, 0x5a, 0xa9, 0xa1, 0x52, 0x7a, 0x89, 0x81, 0x72, 0x91, 0x62, 0x6a, 0x99, 0x31, 0xc2, 0xca, 0x39, 0xda, 0x29, 0x21, 0xd2, 0xfa, 0x9, 0x1, 0xf2, 0x11, 0xe2, 0xea, 0x19, 0xba, 0x49, 0x41, 0xb2, 0x51, 0xa2, 0xaa, 0x59, 0x71, 0x82, 0x8a, 0x79, 0x9a, 0x69, 0x61, 0x92}, - {0x0, 0xf4, 0xf5, 0x1, 0xf7, 0x3, 0x2, 0xf6, 0xf3, 0x7, 0x6, 0xf2, 0x4, 0xf0, 0xf1, 0x5, 0xfb, 0xf, 0xe, 0xfa, 0xc, 0xf8, 0xf9, 0xd, 0x8, 0xfc, 0xfd, 0x9, 0xff, 0xb, 0xa, 0xfe, 0xeb, 0x1f, 0x1e, 0xea, 0x1c, 0xe8, 0xe9, 0x1d, 0x18, 0xec, 0xed, 0x19, 0xef, 0x1b, 0x1a, 0xee, 0x10, 0xe4, 0xe5, 0x11, 0xe7, 0x13, 0x12, 0xe6, 0xe3, 0x17, 0x16, 0xe2, 0x14, 0xe0, 0xe1, 0x15, 0xcb, 0x3f, 0x3e, 0xca, 0x3c, 0xc8, 0xc9, 0x3d, 0x38, 0xcc, 0xcd, 0x39, 0xcf, 0x3b, 0x3a, 0xce, 0x30, 0xc4, 0xc5, 0x31, 0xc7, 0x33, 0x32, 0xc6, 0xc3, 0x37, 0x36, 0xc2, 0x34, 0xc0, 0xc1, 0x35, 0x20, 0xd4, 0xd5, 0x21, 0xd7, 0x23, 0x22, 0xd6, 0xd3, 0x27, 0x26, 0xd2, 0x24, 0xd0, 0xd1, 0x25, 0xdb, 0x2f, 0x2e, 0xda, 0x2c, 0xd8, 0xd9, 0x2d, 0x28, 0xdc, 0xdd, 0x29, 0xdf, 0x2b, 0x2a, 0xde, 0x8b, 0x7f, 0x7e, 0x8a, 0x7c, 0x88, 0x89, 0x7d, 0x78, 0x8c, 0x8d, 0x79, 0x8f, 0x7b, 0x7a, 0x8e, 0x70, 0x84, 0x85, 0x71, 0x87, 0x73, 0x72, 0x86, 0x83, 0x77, 0x76, 0x82, 0x74, 0x80, 0x81, 0x75, 0x60, 0x94, 0x95, 0x61, 0x97, 0x63, 0x62, 0x96, 0x93, 0x67, 0x66, 0x92, 0x64, 0x90, 0x91, 0x65, 0x9b, 0x6f, 0x6e, 0x9a, 0x6c, 0x98, 0x99, 0x6d, 0x68, 0x9c, 0x9d, 0x69, 0x9f, 0x6b, 0x6a, 0x9e, 0x40, 0xb4, 0xb5, 0x41, 0xb7, 0x43, 0x42, 0xb6, 0xb3, 0x47, 0x46, 0xb2, 0x44, 0xb0, 0xb1, 0x45, 0xbb, 0x4f, 0x4e, 0xba, 0x4c, 0xb8, 0xb9, 0x4d, 0x48, 0xbc, 0xbd, 0x49, 0xbf, 0x4b, 0x4a, 0xbe, 0xab, 0x5f, 0x5e, 0xaa, 0x5c, 0xa8, 0xa9, 0x5d, 0x58, 0xac, 0xad, 0x59, 0xaf, 0x5b, 0x5a, 0xae, 0x50, 0xa4, 0xa5, 0x51, 0xa7, 0x53, 0x52, 0xa6, 0xa3, 0x57, 0x56, 0xa2, 0x54, 0xa0, 0xa1, 0x55}, - {0x0, 0xf5, 0xf7, 0x2, 0xf3, 0x6, 0x4, 0xf1, 0xfb, 0xe, 0xc, 0xf9, 0x8, 0xfd, 0xff, 0xa, 0xeb, 0x1e, 0x1c, 0xe9, 0x18, 0xed, 0xef, 0x1a, 0x10, 0xe5, 0xe7, 0x12, 0xe3, 0x16, 0x14, 0xe1, 0xcb, 0x3e, 0x3c, 0xc9, 0x38, 0xcd, 0xcf, 0x3a, 0x30, 0xc5, 0xc7, 0x32, 0xc3, 0x36, 0x34, 0xc1, 0x20, 0xd5, 0xd7, 0x22, 0xd3, 0x26, 0x24, 0xd1, 0xdb, 0x2e, 0x2c, 0xd9, 0x28, 0xdd, 0xdf, 0x2a, 0x8b, 0x7e, 0x7c, 0x89, 0x78, 0x8d, 0x8f, 0x7a, 0x70, 0x85, 0x87, 0x72, 0x83, 0x76, 0x74, 0x81, 0x60, 0x95, 0x97, 0x62, 0x93, 0x66, 0x64, 0x91, 0x9b, 0x6e, 0x6c, 0x99, 0x68, 0x9d, 0x9f, 0x6a, 0x40, 0xb5, 0xb7, 0x42, 0xb3, 0x46, 0x44, 0xb1, 0xbb, 0x4e, 0x4c, 0xb9, 0x48, 0xbd, 0xbf, 0x4a, 0xab, 0x5e, 0x5c, 0xa9, 0x58, 0xad, 0xaf, 0x5a, 0x50, 0xa5, 0xa7, 0x52, 0xa3, 0x56, 0x54, 0xa1, 0xb, 0xfe, 0xfc, 0x9, 0xf8, 0xd, 0xf, 0xfa, 0xf0, 0x5, 0x7, 0xf2, 0x3, 0xf6, 0xf4, 0x1, 0xe0, 0x15, 0x17, 0xe2, 0x13, 0xe6, 0xe4, 0x11, 0x1b, 0xee, 0xec, 0x19, 0xe8, 0x1d, 0x1f, 0xea, 0xc0, 0x35, 0x37, 0xc2, 0x33, 0xc6, 0xc4, 0x31, 0x3b, 0xce, 0xcc, 0x39, 0xc8, 0x3d, 0x3f, 0xca, 0x2b, 0xde, 0xdc, 0x29, 0xd8, 0x2d, 0x2f, 0xda, 0xd0, 0x25, 0x27, 0xd2, 0x23, 0xd6, 0xd4, 0x21, 0x80, 0x75, 0x77, 0x82, 0x73, 0x86, 0x84, 0x71, 0x7b, 0x8e, 0x8c, 0x79, 0x88, 0x7d, 0x7f, 0x8a, 0x6b, 0x9e, 0x9c, 0x69, 0x98, 0x6d, 0x6f, 0x9a, 0x90, 0x65, 0x67, 0x92, 0x63, 0x96, 0x94, 0x61, 0x4b, 0xbe, 0xbc, 0x49, 0xb8, 0x4d, 0x4f, 0xba, 0xb0, 0x45, 0x47, 0xb2, 0x43, 0xb6, 0xb4, 0x41, 0xa0, 0x55, 0x57, 0xa2, 0x53, 0xa6, 0xa4, 0x51, 0x5b, 0xae, 0xac, 0x59, 0xa8, 0x5d, 0x5f, 0xaa}, - {0x0, 0xf6, 0xf1, 0x7, 0xff, 0x9, 0xe, 0xf8, 0xe3, 0x15, 0x12, 0xe4, 0x1c, 0xea, 0xed, 0x1b, 0xdb, 0x2d, 0x2a, 0xdc, 0x24, 0xd2, 0xd5, 0x23, 0x38, 0xce, 0xc9, 0x3f, 0xc7, 0x31, 0x36, 0xc0, 0xab, 0x5d, 0x5a, 0xac, 0x54, 0xa2, 0xa5, 0x53, 0x48, 0xbe, 0xb9, 0x4f, 0xb7, 0x41, 0x46, 0xb0, 0x70, 0x86, 0x81, 0x77, 0x8f, 0x79, 0x7e, 0x88, 0x93, 0x65, 0x62, 0x94, 0x6c, 0x9a, 0x9d, 0x6b, 0x4b, 0xbd, 0xba, 0x4c, 0xb4, 0x42, 0x45, 0xb3, 0xa8, 0x5e, 0x59, 0xaf, 0x57, 0xa1, 0xa6, 0x50, 0x90, 0x66, 0x61, 0x97, 0x6f, 0x99, 0x9e, 0x68, 0x73, 0x85, 0x82, 0x74, 0x8c, 0x7a, 0x7d, 0x8b, 0xe0, 0x16, 0x11, 0xe7, 0x1f, 0xe9, 0xee, 0x18, 0x3, 0xf5, 0xf2, 0x4, 0xfc, 0xa, 0xd, 0xfb, 0x3b, 0xcd, 0xca, 0x3c, 0xc4, 0x32, 0x35, 0xc3, 0xd8, 0x2e, 0x29, 0xdf, 0x27, 0xd1, 0xd6, 0x20, 0x96, 0x60, 0x67, 0x91, 0x69, 0x9f, 0x98, 0x6e, 0x75, 0x83, 0x84, 0x72, 0x8a, 0x7c, 0x7b, 0x8d, 0x4d, 0xbb, 0xbc, 0x4a, 0xb2, 0x44, 0x43, 0xb5, 0xae, 0x58, 0x5f, 0xa9, 0x51, 0xa7, 0xa0, 0x56, 0x3d, 0xcb, 0xcc, 0x3a, 0xc2, 0x34, 0x33, 0xc5, 0xde, 0x28, 0x2f, 0xd9, 0x21, 0xd7, 0xd0, 0x26, 0xe6, 0x10, 0x17, 0xe1, 0x19, 0xef, 0xe8, 0x1e, 0x5, 0xf3, 0xf4, 0x2, 0xfa, 0xc, 0xb, 0xfd, 0xdd, 0x2b, 0x2c, 0xda, 0x22, 0xd4, 0xd3, 0x25, 0x3e, 0xc8, 0xcf, 0x39, 0xc1, 0x37, 0x30, 0xc6, 0x6, 0xf0, 0xf7, 0x1, 0xf9, 0xf, 0x8, 0xfe, 0xe5, 0x13, 0x14, 0xe2, 0x1a, 0xec, 0xeb, 0x1d, 0x76, 0x80, 0x87, 0x71, 0x89, 0x7f, 0x78, 0x8e, 0x95, 0x63, 0x64, 0x92, 0x6a, 0x9c, 0x9b, 0x6d, 0xad, 0x5b, 0x5c, 0xaa, 0x52, 0xa4, 0xa3, 0x55, 0x4e, 0xb8, 0xbf, 0x49, 0xb1, 0x47, 0x40, 0xb6}, - {0x0, 0xf7, 0xf3, 0x4, 0xfb, 0xc, 0x8, 0xff, 0xeb, 0x1c, 0x18, 0xef, 0x10, 0xe7, 0xe3, 0x14, 0xcb, 0x3c, 0x38, 0xcf, 0x30, 0xc7, 0xc3, 0x34, 0x20, 0xd7, 0xd3, 0x24, 0xdb, 0x2c, 0x28, 0xdf, 0x8b, 0x7c, 0x78, 0x8f, 0x70, 0x87, 0x83, 0x74, 0x60, 0x97, 0x93, 0x64, 0x9b, 0x6c, 0x68, 0x9f, 0x40, 0xb7, 0xb3, 0x44, 0xbb, 0x4c, 0x48, 0xbf, 0xab, 0x5c, 0x58, 0xaf, 0x50, 0xa7, 0xa3, 0x54, 0xb, 0xfc, 0xf8, 0xf, 0xf0, 0x7, 0x3, 0xf4, 0xe0, 0x17, 0x13, 0xe4, 0x1b, 0xec, 0xe8, 0x1f, 0xc0, 0x37, 0x33, 0xc4, 0x3b, 0xcc, 0xc8, 0x3f, 0x2b, 0xdc, 0xd8, 0x2f, 0xd0, 0x27, 0x23, 0xd4, 0x80, 0x77, 0x73, 0x84, 0x7b, 0x8c, 0x88, 0x7f, 0x6b, 0x9c, 0x98, 0x6f, 0x90, 0x67, 0x63, 0x94, 0x4b, 0xbc, 0xb8, 0x4f, 0xb0, 0x47, 0x43, 0xb4, 0xa0, 0x57, 0x53, 0xa4, 0x5b, 0xac, 0xa8, 0x5f, 0x16, 0xe1, 0xe5, 0x12, 0xed, 0x1a, 0x1e, 0xe9, 0xfd, 0xa, 0xe, 0xf9, 0x6, 0xf1, 0xf5, 0x2, 0xdd, 0x2a, 0x2e, 0xd9, 0x26, 0xd1, 0xd5, 0x22, 0x36, 0xc1, 0xc5, 0x32, 0xcd, 0x3a, 0x3e, 0xc9, 0x9d, 0x6a, 0x6e, 0x99, 0x66, 0x91, 0x95, 0x62, 0x76, 0x81, 0x85, 0x72, 0x8d, 0x7a, 0x7e, 0x89, 0x56, 0xa1, 0xa5, 0x52, 0xad, 0x5a, 0x5e, 0xa9, 0xbd, 0x4a, 0x4e, 0xb9, 0x46, 0xb1, 0xb5, 0x42, 0x1d, 0xea, 0xee, 0x19, 0xe6, 0x11, 0x15, 0xe2, 0xf6, 0x1, 0x5, 0xf2, 0xd, 0xfa, 0xfe, 0x9, 0xd6, 0x21, 0x25, 0xd2, 0x2d, 0xda, 0xde, 0x29, 0x3d, 0xca, 0xce, 0x39, 0xc6, 0x31, 0x35, 0xc2, 0x96, 0x61, 0x65, 0x92, 0x6d, 0x9a, 0x9e, 0x69, 0x7d, 0x8a, 0x8e, 0x79, 0x86, 0x71, 0x75, 0x82, 0x5d, 0xaa, 0xae, 0x59, 0xa6, 0x51, 0x55, 0xa2, 0xb6, 0x41, 0x45, 0xb2, 0x4d, 0xba, 0xbe, 0x49}, - {0x0, 0xf8, 0xed, 0x15, 0xc7, 0x3f, 0x2a, 0xd2, 0x93, 0x6b, 0x7e, 0x86, 0x54, 0xac, 0xb9, 0x41, 0x3b, 0xc3, 0xd6, 0x2e, 0xfc, 0x4, 0x11, 0xe9, 0xa8, 0x50, 0x45, 0xbd, 0x6f, 0x97, 0x82, 0x7a, 0x76, 0x8e, 0x9b, 0x63, 0xb1, 0x49, 0x5c, 0xa4, 0xe5, 0x1d, 0x8, 0xf0, 0x22, 0xda, 0xcf, 0x37, 0x4d, 0xb5, 0xa0, 0x58, 0x8a, 0x72, 0x67, 0x9f, 0xde, 0x26, 0x33, 0xcb, 0x19, 0xe1, 0xf4, 0xc, 0xec, 0x14, 0x1, 0xf9, 0x2b, 0xd3, 0xc6, 0x3e, 0x7f, 0x87, 0x92, 0x6a, 0xb8, 0x40, 0x55, 0xad, 0xd7, 0x2f, 0x3a, 0xc2, 0x10, 0xe8, 0xfd, 0x5, 0x44, 0xbc, 0xa9, 0x51, 0x83, 0x7b, 0x6e, 0x96, 0x9a, 0x62, 0x77, 0x8f, 0x5d, 0xa5, 0xb0, 0x48, 0x9, 0xf1, 0xe4, 0x1c, 0xce, 0x36, 0x23, 0xdb, 0xa1, 0x59, 0x4c, 0xb4, 0x66, 0x9e, 0x8b, 0x73, 0x32, 0xca, 0xdf, 0x27, 0xf5, 0xd, 0x18, 0xe0, 0xc5, 0x3d, 0x28, 0xd0, 0x2, 0xfa, 0xef, 0x17, 0x56, 0xae, 0xbb, 0x43, 0x91, 0x69, 0x7c, 0x84, 0xfe, 0x6, 0x13, 0xeb, 0x39, 0xc1, 0xd4, 0x2c, 0x6d, 0x95, 0x80, 0x78, 0xaa, 0x52, 0x47, 0xbf, 0xb3, 0x4b, 0x5e, 0xa6, 0x74, 0x8c, 0x99, 0x61, 0x20, 0xd8, 0xcd, 0x35, 0xe7, 0x1f, 0xa, 0xf2, 0x88, 0x70, 0x65, 0x9d, 0x4f, 0xb7, 0xa2, 0x5a, 0x1b, 0xe3, 0xf6, 0xe, 0xdc, 0x24, 0x31, 0xc9, 0x29, 0xd1, 0xc4, 0x3c, 0xee, 0x16, 0x3, 0xfb, 0xba, 0x42, 0x57, 0xaf, 0x7d, 0x85, 0x90, 0x68, 0x12, 0xea, 0xff, 0x7, 0xd5, 0x2d, 0x38, 0xc0, 0x81, 0x79, 0x6c, 0x94, 0x46, 0xbe, 0xab, 0x53, 0x5f, 0xa7, 0xb2, 0x4a, 0x98, 0x60, 0x75, 0x8d, 0xcc, 0x34, 0x21, 0xd9, 0xb, 0xf3, 0xe6, 0x1e, 0x64, 0x9c, 0x89, 0x71, 0xa3, 0x5b, 0x4e, 0xb6, 0xf7, 0xf, 0x1a, 0xe2, 0x30, 0xc8, 0xdd, 0x25}, - {0x0, 0xf9, 0xef, 0x16, 0xc3, 0x3a, 0x2c, 0xd5, 0x9b, 0x62, 0x74, 0x8d, 0x58, 0xa1, 0xb7, 0x4e, 0x2b, 0xd2, 0xc4, 0x3d, 0xe8, 0x11, 0x7, 0xfe, 0xb0, 0x49, 0x5f, 0xa6, 0x73, 0x8a, 0x9c, 0x65, 0x56, 0xaf, 0xb9, 0x40, 0x95, 0x6c, 0x7a, 0x83, 0xcd, 0x34, 0x22, 0xdb, 0xe, 0xf7, 0xe1, 0x18, 0x7d, 0x84, 0x92, 0x6b, 0xbe, 0x47, 0x51, 0xa8, 0xe6, 0x1f, 0x9, 0xf0, 0x25, 0xdc, 0xca, 0x33, 0xac, 0x55, 0x43, 0xba, 0x6f, 0x96, 0x80, 0x79, 0x37, 0xce, 0xd8, 0x21, 0xf4, 0xd, 0x1b, 0xe2, 0x87, 0x7e, 0x68, 0x91, 0x44, 0xbd, 0xab, 0x52, 0x1c, 0xe5, 0xf3, 0xa, 0xdf, 0x26, 0x30, 0xc9, 0xfa, 0x3, 0x15, 0xec, 0x39, 0xc0, 0xd6, 0x2f, 0x61, 0x98, 0x8e, 0x77, 0xa2, 0x5b, 0x4d, 0xb4, 0xd1, 0x28, 0x3e, 0xc7, 0x12, 0xeb, 0xfd, 0x4, 0x4a, 0xb3, 0xa5, 0x5c, 0x89, 0x70, 0x66, 0x9f, 0x45, 0xbc, 0xaa, 0x53, 0x86, 0x7f, 0x69, 0x90, 0xde, 0x27, 0x31, 0xc8, 0x1d, 0xe4, 0xf2, 0xb, 0x6e, 0x97, 0x81, 0x78, 0xad, 0x54, 0x42, 0xbb, 0xf5, 0xc, 0x1a, 0xe3, 0x36, 0xcf, 0xd9, 0x20, 0x13, 0xea, 0xfc, 0x5, 0xd0, 0x29, 0x3f, 0xc6, 0x88, 0x71, 0x67, 0x9e, 0x4b, 0xb2, 0xa4, 0x5d, 0x38, 0xc1, 0xd7, 0x2e, 0xfb, 0x2, 0x14, 0xed, 0xa3, 0x5a, 0x4c, 0xb5, 0x60, 0x99, 0x8f, 0x76, 0xe9, 0x10, 0x6, 0xff, 0x2a, 0xd3, 0xc5, 0x3c, 0x72, 0x8b, 0x9d, 0x64, 0xb1, 0x48, 0x5e, 0xa7, 0xc2, 0x3b, 0x2d, 0xd4, 0x1, 0xf8, 0xee, 0x17, 0x59, 0xa0, 0xb6, 0x4f, 0x9a, 0x63, 0x75, 0x8c, 0xbf, 0x46, 0x50, 0xa9, 0x7c, 0x85, 0x93, 0x6a, 0x24, 0xdd, 0xcb, 0x32, 0xe7, 0x1e, 0x8, 0xf1, 0x94, 0x6d, 0x7b, 0x82, 0x57, 0xae, 0xb8, 0x41, 0xf, 0xf6, 0xe0, 0x19, 0xcc, 0x35, 0x23, 0xda}, - {0x0, 0xfa, 0xe9, 0x13, 0xcf, 0x35, 0x26, 0xdc, 0x83, 0x79, 0x6a, 0x90, 0x4c, 0xb6, 0xa5, 0x5f, 0x1b, 0xe1, 0xf2, 0x8, 0xd4, 0x2e, 0x3d, 0xc7, 0x98, 0x62, 0x71, 0x8b, 0x57, 0xad, 0xbe, 0x44, 0x36, 0xcc, 0xdf, 0x25, 0xf9, 0x3, 0x10, 0xea, 0xb5, 0x4f, 0x5c, 0xa6, 0x7a, 0x80, 0x93, 0x69, 0x2d, 0xd7, 0xc4, 0x3e, 0xe2, 0x18, 0xb, 0xf1, 0xae, 0x54, 0x47, 0xbd, 0x61, 0x9b, 0x88, 0x72, 0x6c, 0x96, 0x85, 0x7f, 0xa3, 0x59, 0x4a, 0xb0, 0xef, 0x15, 0x6, 0xfc, 0x20, 0xda, 0xc9, 0x33, 0x77, 0x8d, 0x9e, 0x64, 0xb8, 0x42, 0x51, 0xab, 0xf4, 0xe, 0x1d, 0xe7, 0x3b, 0xc1, 0xd2, 0x28, 0x5a, 0xa0, 0xb3, 0x49, 0x95, 0x6f, 0x7c, 0x86, 0xd9, 0x23, 0x30, 0xca, 0x16, 0xec, 0xff, 0x5, 0x41, 0xbb, 0xa8, 0x52, 0x8e, 0x74, 0x67, 0x9d, 0xc2, 0x38, 0x2b, 0xd1, 0xd, 0xf7, 0xe4, 0x1e, 0xd8, 0x22, 0x31, 0xcb, 0x17, 0xed, 0xfe, 0x4, 0x5b, 0xa1, 0xb2, 0x48, 0x94, 0x6e, 0x7d, 0x87, 0xc3, 0x39, 0x2a, 0xd0, 0xc, 0xf6, 0xe5, 0x1f, 0x40, 0xba, 0xa9, 0x53, 0x8f, 0x75, 0x66, 0x9c, 0xee, 0x14, 0x7, 0xfd, 0x21, 0xdb, 0xc8, 0x32, 0x6d, 0x97, 0x84, 0x7e, 0xa2, 0x58, 0x4b, 0xb1, 0xf5, 0xf, 0x1c, 0xe6, 0x3a, 0xc0, 0xd3, 0x29, 0x76, 0x8c, 0x9f, 0x65, 0xb9, 0x43, 0x50, 0xaa, 0xb4, 0x4e, 0x5d, 0xa7, 0x7b, 0x81, 0x92, 0x68, 0x37, 0xcd, 0xde, 0x24, 0xf8, 0x2, 0x11, 0xeb, 0xaf, 0x55, 0x46, 0xbc, 0x60, 0x9a, 0x89, 0x73, 0x2c, 0xd6, 0xc5, 0x3f, 0xe3, 0x19, 0xa, 0xf0, 0x82, 0x78, 0x6b, 0x91, 0x4d, 0xb7, 0xa4, 0x5e, 0x1, 0xfb, 0xe8, 0x12, 0xce, 0x34, 0x27, 0xdd, 0x99, 0x63, 0x70, 0x8a, 0x56, 0xac, 0xbf, 0x45, 0x1a, 0xe0, 0xf3, 0x9, 0xd5, 0x2f, 0x3c, 0xc6}, - {0x0, 0xfb, 0xeb, 0x10, 0xcb, 0x30, 0x20, 0xdb, 0x8b, 0x70, 0x60, 0x9b, 0x40, 0xbb, 0xab, 0x50, 0xb, 0xf0, 0xe0, 0x1b, 0xc0, 0x3b, 0x2b, 0xd0, 0x80, 0x7b, 0x6b, 0x90, 0x4b, 0xb0, 0xa0, 0x5b, 0x16, 0xed, 0xfd, 0x6, 0xdd, 0x26, 0x36, 0xcd, 0x9d, 0x66, 0x76, 0x8d, 0x56, 0xad, 0xbd, 0x46, 0x1d, 0xe6, 0xf6, 0xd, 0xd6, 0x2d, 0x3d, 0xc6, 0x96, 0x6d, 0x7d, 0x86, 0x5d, 0xa6, 0xb6, 0x4d, 0x2c, 0xd7, 0xc7, 0x3c, 0xe7, 0x1c, 0xc, 0xf7, 0xa7, 0x5c, 0x4c, 0xb7, 0x6c, 0x97, 0x87, 0x7c, 0x27, 0xdc, 0xcc, 0x37, 0xec, 0x17, 0x7, 0xfc, 0xac, 0x57, 0x47, 0xbc, 0x67, 0x9c, 0x8c, 0x77, 0x3a, 0xc1, 0xd1, 0x2a, 0xf1, 0xa, 0x1a, 0xe1, 0xb1, 0x4a, 0x5a, 0xa1, 0x7a, 0x81, 0x91, 0x6a, 0x31, 0xca, 0xda, 0x21, 0xfa, 0x1, 0x11, 0xea, 0xba, 0x41, 0x51, 0xaa, 0x71, 0x8a, 0x9a, 0x61, 0x58, 0xa3, 0xb3, 0x48, 0x93, 0x68, 0x78, 0x83, 0xd3, 0x28, 0x38, 0xc3, 0x18, 0xe3, 0xf3, 0x8, 0x53, 0xa8, 0xb8, 0x43, 0x98, 0x63, 0x73, 0x88, 0xd8, 0x23, 0x33, 0xc8, 0x13, 0xe8, 0xf8, 0x3, 0x4e, 0xb5, 0xa5, 0x5e, 0x85, 0x7e, 0x6e, 0x95, 0xc5, 0x3e, 0x2e, 0xd5, 0xe, 0xf5, 0xe5, 0x1e, 0x45, 0xbe, 0xae, 0x55, 0x8e, 0x75, 0x65, 0x9e, 0xce, 0x35, 0x25, 0xde, 0x5, 0xfe, 0xee, 0x15, 0x74, 0x8f, 0x9f, 0x64, 0xbf, 0x44, 0x54, 0xaf, 0xff, 0x4, 0x14, 0xef, 0x34, 0xcf, 0xdf, 0x24, 0x7f, 0x84, 0x94, 0x6f, 0xb4, 0x4f, 0x5f, 0xa4, 0xf4, 0xf, 0x1f, 0xe4, 0x3f, 0xc4, 0xd4, 0x2f, 0x62, 0x99, 0x89, 0x72, 0xa9, 0x52, 0x42, 0xb9, 0xe9, 0x12, 0x2, 0xf9, 0x22, 0xd9, 0xc9, 0x32, 0x69, 0x92, 0x82, 0x79, 0xa2, 0x59, 0x49, 0xb2, 0xe2, 0x19, 0x9, 0xf2, 0x29, 0xd2, 0xc2, 0x39}, - {0x0, 0xfc, 0xe5, 0x19, 0xd7, 0x2b, 0x32, 0xce, 0xb3, 0x4f, 0x56, 0xaa, 0x64, 0x98, 0x81, 0x7d, 0x7b, 0x87, 0x9e, 0x62, 0xac, 0x50, 0x49, 0xb5, 0xc8, 0x34, 0x2d, 0xd1, 0x1f, 0xe3, 0xfa, 0x6, 0xf6, 0xa, 0x13, 0xef, 0x21, 0xdd, 0xc4, 0x38, 0x45, 0xb9, 0xa0, 0x5c, 0x92, 0x6e, 0x77, 0x8b, 0x8d, 0x71, 0x68, 0x94, 0x5a, 0xa6, 0xbf, 0x43, 0x3e, 0xc2, 0xdb, 0x27, 0xe9, 0x15, 0xc, 0xf0, 0xf1, 0xd, 0x14, 0xe8, 0x26, 0xda, 0xc3, 0x3f, 0x42, 0xbe, 0xa7, 0x5b, 0x95, 0x69, 0x70, 0x8c, 0x8a, 0x76, 0x6f, 0x93, 0x5d, 0xa1, 0xb8, 0x44, 0x39, 0xc5, 0xdc, 0x20, 0xee, 0x12, 0xb, 0xf7, 0x7, 0xfb, 0xe2, 0x1e, 0xd0, 0x2c, 0x35, 0xc9, 0xb4, 0x48, 0x51, 0xad, 0x63, 0x9f, 0x86, 0x7a, 0x7c, 0x80, 0x99, 0x65, 0xab, 0x57, 0x4e, 0xb2, 0xcf, 0x33, 0x2a, 0xd6, 0x18, 0xe4, 0xfd, 0x1, 0xff, 0x3, 0x1a, 0xe6, 0x28, 0xd4, 0xcd, 0x31, 0x4c, 0xb0, 0xa9, 0x55, 0x9b, 0x67, 0x7e, 0x82, 0x84, 0x78, 0x61, 0x9d, 0x53, 0xaf, 0xb6, 0x4a, 0x37, 0xcb, 0xd2, 0x2e, 0xe0, 0x1c, 0x5, 0xf9, 0x9, 0xf5, 0xec, 0x10, 0xde, 0x22, 0x3b, 0xc7, 0xba, 0x46, 0x5f, 0xa3, 0x6d, 0x91, 0x88, 0x74, 0x72, 0x8e, 0x97, 0x6b, 0xa5, 0x59, 0x40, 0xbc, 0xc1, 0x3d, 0x24, 0xd8, 0x16, 0xea, 0xf3, 0xf, 0xe, 0xf2, 0xeb, 0x17, 0xd9, 0x25, 0x3c, 0xc0, 0xbd, 0x41, 0x58, 0xa4, 0x6a, 0x96, 0x8f, 0x73, 0x75, 0x89, 0x90, 0x6c, 0xa2, 0x5e, 0x47, 0xbb, 0xc6, 0x3a, 0x23, 0xdf, 0x11, 0xed, 0xf4, 0x8, 0xf8, 0x4, 0x1d, 0xe1, 0x2f, 0xd3, 0xca, 0x36, 0x4b, 0xb7, 0xae, 0x52, 0x9c, 0x60, 0x79, 0x85, 0x83, 0x7f, 0x66, 0x9a, 0x54, 0xa8, 0xb1, 0x4d, 0x30, 0xcc, 0xd5, 0x29, 0xe7, 0x1b, 0x2, 0xfe}, - {0x0, 0xfd, 0xe7, 0x1a, 0xd3, 0x2e, 0x34, 0xc9, 0xbb, 0x46, 0x5c, 0xa1, 0x68, 0x95, 0x8f, 0x72, 0x6b, 0x96, 0x8c, 0x71, 0xb8, 0x45, 0x5f, 0xa2, 0xd0, 0x2d, 0x37, 0xca, 0x3, 0xfe, 0xe4, 0x19, 0xd6, 0x2b, 0x31, 0xcc, 0x5, 0xf8, 0xe2, 0x1f, 0x6d, 0x90, 0x8a, 0x77, 0xbe, 0x43, 0x59, 0xa4, 0xbd, 0x40, 0x5a, 0xa7, 0x6e, 0x93, 0x89, 0x74, 0x6, 0xfb, 0xe1, 0x1c, 0xd5, 0x28, 0x32, 0xcf, 0xb1, 0x4c, 0x56, 0xab, 0x62, 0x9f, 0x85, 0x78, 0xa, 0xf7, 0xed, 0x10, 0xd9, 0x24, 0x3e, 0xc3, 0xda, 0x27, 0x3d, 0xc0, 0x9, 0xf4, 0xee, 0x13, 0x61, 0x9c, 0x86, 0x7b, 0xb2, 0x4f, 0x55, 0xa8, 0x67, 0x9a, 0x80, 0x7d, 0xb4, 0x49, 0x53, 0xae, 0xdc, 0x21, 0x3b, 0xc6, 0xf, 0xf2, 0xe8, 0x15, 0xc, 0xf1, 0xeb, 0x16, 0xdf, 0x22, 0x38, 0xc5, 0xb7, 0x4a, 0x50, 0xad, 0x64, 0x99, 0x83, 0x7e, 0x7f, 0x82, 0x98, 0x65, 0xac, 0x51, 0x4b, 0xb6, 0xc4, 0x39, 0x23, 0xde, 0x17, 0xea, 0xf0, 0xd, 0x14, 0xe9, 0xf3, 0xe, 0xc7, 0x3a, 0x20, 0xdd, 0xaf, 0x52, 0x48, 0xb5, 0x7c, 0x81, 0x9b, 0x66, 0xa9, 0x54, 0x4e, 0xb3, 0x7a, 0x87, 0x9d, 0x60, 0x12, 0xef, 0xf5, 0x8, 0xc1, 0x3c, 0x26, 0xdb, 0xc2, 0x3f, 0x25, 0xd8, 0x11, 0xec, 0xf6, 0xb, 0x79, 0x84, 0x9e, 0x63, 0xaa, 0x57, 0x4d, 0xb0, 0xce, 0x33, 0x29, 0xd4, 0x1d, 0xe0, 0xfa, 0x7, 0x75, 0x88, 0x92, 0x6f, 0xa6, 0x5b, 0x41, 0xbc, 0xa5, 0x58, 0x42, 0xbf, 0x76, 0x8b, 0x91, 0x6c, 0x1e, 0xe3, 0xf9, 0x4, 0xcd, 0x30, 0x2a, 0xd7, 0x18, 0xe5, 0xff, 0x2, 0xcb, 0x36, 0x2c, 0xd1, 0xa3, 0x5e, 0x44, 0xb9, 0x70, 0x8d, 0x97, 0x6a, 0x73, 0x8e, 0x94, 0x69, 0xa0, 0x5d, 0x47, 0xba, 0xc8, 0x35, 0x2f, 0xd2, 0x1b, 0xe6, 0xfc, 0x1}, - {0x0, 0xfe, 0xe1, 0x1f, 0xdf, 0x21, 0x3e, 0xc0, 0xa3, 0x5d, 0x42, 0xbc, 0x7c, 0x82, 0x9d, 0x63, 0x5b, 0xa5, 0xba, 0x44, 0x84, 0x7a, 0x65, 0x9b, 0xf8, 0x6, 0x19, 0xe7, 0x27, 0xd9, 0xc6, 0x38, 0xb6, 0x48, 0x57, 0xa9, 0x69, 0x97, 0x88, 0x76, 0x15, 0xeb, 0xf4, 0xa, 0xca, 0x34, 0x2b, 0xd5, 0xed, 0x13, 0xc, 0xf2, 0x32, 0xcc, 0xd3, 0x2d, 0x4e, 0xb0, 0xaf, 0x51, 0x91, 0x6f, 0x70, 0x8e, 0x71, 0x8f, 0x90, 0x6e, 0xae, 0x50, 0x4f, 0xb1, 0xd2, 0x2c, 0x33, 0xcd, 0xd, 0xf3, 0xec, 0x12, 0x2a, 0xd4, 0xcb, 0x35, 0xf5, 0xb, 0x14, 0xea, 0x89, 0x77, 0x68, 0x96, 0x56, 0xa8, 0xb7, 0x49, 0xc7, 0x39, 0x26, 0xd8, 0x18, 0xe6, 0xf9, 0x7, 0x64, 0x9a, 0x85, 0x7b, 0xbb, 0x45, 0x5a, 0xa4, 0x9c, 0x62, 0x7d, 0x83, 0x43, 0xbd, 0xa2, 0x5c, 0x3f, 0xc1, 0xde, 0x20, 0xe0, 0x1e, 0x1, 0xff, 0xe2, 0x1c, 0x3, 0xfd, 0x3d, 0xc3, 0xdc, 0x22, 0x41, 0xbf, 0xa0, 0x5e, 0x9e, 0x60, 0x7f, 0x81, 0xb9, 0x47, 0x58, 0xa6, 0x66, 0x98, 0x87, 0x79, 0x1a, 0xe4, 0xfb, 0x5, 0xc5, 0x3b, 0x24, 0xda, 0x54, 0xaa, 0xb5, 0x4b, 0x8b, 0x75, 0x6a, 0x94, 0xf7, 0x9, 0x16, 0xe8, 0x28, 0xd6, 0xc9, 0x37, 0xf, 0xf1, 0xee, 0x10, 0xd0, 0x2e, 0x31, 0xcf, 0xac, 0x52, 0x4d, 0xb3, 0x73, 0x8d, 0x92, 0x6c, 0x93, 0x6d, 0x72, 0x8c, 0x4c, 0xb2, 0xad, 0x53, 0x30, 0xce, 0xd1, 0x2f, 0xef, 0x11, 0xe, 0xf0, 0xc8, 0x36, 0x29, 0xd7, 0x17, 0xe9, 0xf6, 0x8, 0x6b, 0x95, 0x8a, 0x74, 0xb4, 0x4a, 0x55, 0xab, 0x25, 0xdb, 0xc4, 0x3a, 0xfa, 0x4, 0x1b, 0xe5, 0x86, 0x78, 0x67, 0x99, 0x59, 0xa7, 0xb8, 0x46, 0x7e, 0x80, 0x9f, 0x61, 0xa1, 0x5f, 0x40, 0xbe, 0xdd, 0x23, 0x3c, 0xc2, 0x2, 0xfc, 0xe3, 0x1d}, - {0x0, 0xff, 0xe3, 0x1c, 0xdb, 0x24, 0x38, 0xc7, 0xab, 0x54, 0x48, 0xb7, 0x70, 0x8f, 0x93, 0x6c, 0x4b, 0xb4, 0xa8, 0x57, 0x90, 0x6f, 0x73, 0x8c, 0xe0, 0x1f, 0x3, 0xfc, 0x3b, 0xc4, 0xd8, 0x27, 0x96, 0x69, 0x75, 0x8a, 0x4d, 0xb2, 0xae, 0x51, 0x3d, 0xc2, 0xde, 0x21, 0xe6, 0x19, 0x5, 0xfa, 0xdd, 0x22, 0x3e, 0xc1, 0x6, 0xf9, 0xe5, 0x1a, 0x76, 0x89, 0x95, 0x6a, 0xad, 0x52, 0x4e, 0xb1, 0x31, 0xce, 0xd2, 0x2d, 0xea, 0x15, 0x9, 0xf6, 0x9a, 0x65, 0x79, 0x86, 0x41, 0xbe, 0xa2, 0x5d, 0x7a, 0x85, 0x99, 0x66, 0xa1, 0x5e, 0x42, 0xbd, 0xd1, 0x2e, 0x32, 0xcd, 0xa, 0xf5, 0xe9, 0x16, 0xa7, 0x58, 0x44, 0xbb, 0x7c, 0x83, 0x9f, 0x60, 0xc, 0xf3, 0xef, 0x10, 0xd7, 0x28, 0x34, 0xcb, 0xec, 0x13, 0xf, 0xf0, 0x37, 0xc8, 0xd4, 0x2b, 0x47, 0xb8, 0xa4, 0x5b, 0x9c, 0x63, 0x7f, 0x80, 0x62, 0x9d, 0x81, 0x7e, 0xb9, 0x46, 0x5a, 0xa5, 0xc9, 0x36, 0x2a, 0xd5, 0x12, 0xed, 0xf1, 0xe, 0x29, 0xd6, 0xca, 0x35, 0xf2, 0xd, 0x11, 0xee, 0x82, 0x7d, 0x61, 0x9e, 0x59, 0xa6, 0xba, 0x45, 0xf4, 0xb, 0x17, 0xe8, 0x2f, 0xd0, 0xcc, 0x33, 0x5f, 0xa0, 0xbc, 0x43, 0x84, 0x7b, 0x67, 0x98, 0xbf, 0x40, 0x5c, 0xa3, 0x64, 0x9b, 0x87, 0x78, 0x14, 0xeb, 0xf7, 0x8, 0xcf, 0x30, 0x2c, 0xd3, 0x53, 0xac, 0xb0, 0x4f, 0x88, 0x77, 0x6b, 0x94, 0xf8, 0x7, 0x1b, 0xe4, 0x23, 0xdc, 0xc0, 0x3f, 0x18, 0xe7, 0xfb, 0x4, 0xc3, 0x3c, 0x20, 0xdf, 0xb3, 0x4c, 0x50, 0xaf, 0x68, 0x97, 0x8b, 0x74, 0xc5, 0x3a, 0x26, 0xd9, 0x1e, 0xe1, 0xfd, 0x2, 0x6e, 0x91, 0x8d, 0x72, 0xb5, 0x4a, 0x56, 0xa9, 0x8e, 0x71, 0x6d, 0x92, 0x55, 0xaa, 0xb6, 0x49, 0x25, 0xda, 0xc6, 0x39, 0xfe, 0x1, 0x1d, 0xe2}} - -var mulTableLow = [256][16]uint8{{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, - {0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf}, - {0x0, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e}, - {0x0, 0x3, 0x6, 0x5, 0xc, 0xf, 0xa, 0x9, 0x18, 0x1b, 0x1e, 0x1d, 0x14, 0x17, 0x12, 0x11}, - {0x0, 0x4, 0x8, 0xc, 0x10, 0x14, 0x18, 0x1c, 0x20, 0x24, 0x28, 0x2c, 0x30, 0x34, 0x38, 0x3c}, - {0x0, 0x5, 0xa, 0xf, 0x14, 0x11, 0x1e, 0x1b, 0x28, 0x2d, 0x22, 0x27, 0x3c, 0x39, 0x36, 0x33}, - {0x0, 0x6, 0xc, 0xa, 0x18, 0x1e, 0x14, 0x12, 0x30, 0x36, 0x3c, 0x3a, 0x28, 0x2e, 0x24, 0x22}, - {0x0, 0x7, 0xe, 0x9, 0x1c, 0x1b, 0x12, 0x15, 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d}, - {0x0, 0x8, 0x10, 0x18, 0x20, 0x28, 0x30, 0x38, 0x40, 0x48, 0x50, 0x58, 0x60, 0x68, 0x70, 0x78}, - {0x0, 0x9, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77}, - {0x0, 0xa, 0x14, 0x1e, 0x28, 0x22, 0x3c, 0x36, 0x50, 0x5a, 0x44, 0x4e, 0x78, 0x72, 0x6c, 0x66}, - {0x0, 0xb, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69}, - {0x0, 0xc, 0x18, 0x14, 0x30, 0x3c, 0x28, 0x24, 0x60, 0x6c, 0x78, 0x74, 0x50, 0x5c, 0x48, 0x44}, - {0x0, 0xd, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b}, - {0x0, 0xe, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a}, - {0x0, 0xf, 0x1e, 0x11, 0x3c, 0x33, 0x22, 0x2d, 0x78, 0x77, 0x66, 0x69, 0x44, 0x4b, 0x5a, 0x55}, - {0x0, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0}, - {0x0, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff}, - {0x0, 0x12, 0x24, 0x36, 0x48, 0x5a, 0x6c, 0x7e, 0x90, 0x82, 0xb4, 0xa6, 0xd8, 0xca, 0xfc, 0xee}, - {0x0, 0x13, 0x26, 0x35, 0x4c, 0x5f, 0x6a, 0x79, 0x98, 0x8b, 0xbe, 0xad, 0xd4, 0xc7, 0xf2, 0xe1}, - {0x0, 0x14, 0x28, 0x3c, 0x50, 0x44, 0x78, 0x6c, 0xa0, 0xb4, 0x88, 0x9c, 0xf0, 0xe4, 0xd8, 0xcc}, - {0x0, 0x15, 0x2a, 0x3f, 0x54, 0x41, 0x7e, 0x6b, 0xa8, 0xbd, 0x82, 0x97, 0xfc, 0xe9, 0xd6, 0xc3}, - {0x0, 0x16, 0x2c, 0x3a, 0x58, 0x4e, 0x74, 0x62, 0xb0, 0xa6, 0x9c, 0x8a, 0xe8, 0xfe, 0xc4, 0xd2}, - {0x0, 0x17, 0x2e, 0x39, 0x5c, 0x4b, 0x72, 0x65, 0xb8, 0xaf, 0x96, 0x81, 0xe4, 0xf3, 0xca, 0xdd}, - {0x0, 0x18, 0x30, 0x28, 0x60, 0x78, 0x50, 0x48, 0xc0, 0xd8, 0xf0, 0xe8, 0xa0, 0xb8, 0x90, 0x88}, - {0x0, 0x19, 0x32, 0x2b, 0x64, 0x7d, 0x56, 0x4f, 0xc8, 0xd1, 0xfa, 0xe3, 0xac, 0xb5, 0x9e, 0x87}, - {0x0, 0x1a, 0x34, 0x2e, 0x68, 0x72, 0x5c, 0x46, 0xd0, 0xca, 0xe4, 0xfe, 0xb8, 0xa2, 0x8c, 0x96}, - {0x0, 0x1b, 0x36, 0x2d, 0x6c, 0x77, 0x5a, 0x41, 0xd8, 0xc3, 0xee, 0xf5, 0xb4, 0xaf, 0x82, 0x99}, - {0x0, 0x1c, 0x38, 0x24, 0x70, 0x6c, 0x48, 0x54, 0xe0, 0xfc, 0xd8, 0xc4, 0x90, 0x8c, 0xa8, 0xb4}, - {0x0, 0x1d, 0x3a, 0x27, 0x74, 0x69, 0x4e, 0x53, 0xe8, 0xf5, 0xd2, 0xcf, 0x9c, 0x81, 0xa6, 0xbb}, - {0x0, 0x1e, 0x3c, 0x22, 0x78, 0x66, 0x44, 0x5a, 0xf0, 0xee, 0xcc, 0xd2, 0x88, 0x96, 0xb4, 0xaa}, - {0x0, 0x1f, 0x3e, 0x21, 0x7c, 0x63, 0x42, 0x5d, 0xf8, 0xe7, 0xc6, 0xd9, 0x84, 0x9b, 0xba, 0xa5}, - {0x0, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, 0x1d, 0x3d, 0x5d, 0x7d, 0x9d, 0xbd, 0xdd, 0xfd}, - {0x0, 0x21, 0x42, 0x63, 0x84, 0xa5, 0xc6, 0xe7, 0x15, 0x34, 0x57, 0x76, 0x91, 0xb0, 0xd3, 0xf2}, - {0x0, 0x22, 0x44, 0x66, 0x88, 0xaa, 0xcc, 0xee, 0xd, 0x2f, 0x49, 0x6b, 0x85, 0xa7, 0xc1, 0xe3}, - {0x0, 0x23, 0x46, 0x65, 0x8c, 0xaf, 0xca, 0xe9, 0x5, 0x26, 0x43, 0x60, 0x89, 0xaa, 0xcf, 0xec}, - {0x0, 0x24, 0x48, 0x6c, 0x90, 0xb4, 0xd8, 0xfc, 0x3d, 0x19, 0x75, 0x51, 0xad, 0x89, 0xe5, 0xc1}, - {0x0, 0x25, 0x4a, 0x6f, 0x94, 0xb1, 0xde, 0xfb, 0x35, 0x10, 0x7f, 0x5a, 0xa1, 0x84, 0xeb, 0xce}, - {0x0, 0x26, 0x4c, 0x6a, 0x98, 0xbe, 0xd4, 0xf2, 0x2d, 0xb, 0x61, 0x47, 0xb5, 0x93, 0xf9, 0xdf}, - {0x0, 0x27, 0x4e, 0x69, 0x9c, 0xbb, 0xd2, 0xf5, 0x25, 0x2, 0x6b, 0x4c, 0xb9, 0x9e, 0xf7, 0xd0}, - {0x0, 0x28, 0x50, 0x78, 0xa0, 0x88, 0xf0, 0xd8, 0x5d, 0x75, 0xd, 0x25, 0xfd, 0xd5, 0xad, 0x85}, - {0x0, 0x29, 0x52, 0x7b, 0xa4, 0x8d, 0xf6, 0xdf, 0x55, 0x7c, 0x7, 0x2e, 0xf1, 0xd8, 0xa3, 0x8a}, - {0x0, 0x2a, 0x54, 0x7e, 0xa8, 0x82, 0xfc, 0xd6, 0x4d, 0x67, 0x19, 0x33, 0xe5, 0xcf, 0xb1, 0x9b}, - {0x0, 0x2b, 0x56, 0x7d, 0xac, 0x87, 0xfa, 0xd1, 0x45, 0x6e, 0x13, 0x38, 0xe9, 0xc2, 0xbf, 0x94}, - {0x0, 0x2c, 0x58, 0x74, 0xb0, 0x9c, 0xe8, 0xc4, 0x7d, 0x51, 0x25, 0x9, 0xcd, 0xe1, 0x95, 0xb9}, - {0x0, 0x2d, 0x5a, 0x77, 0xb4, 0x99, 0xee, 0xc3, 0x75, 0x58, 0x2f, 0x2, 0xc1, 0xec, 0x9b, 0xb6}, - {0x0, 0x2e, 0x5c, 0x72, 0xb8, 0x96, 0xe4, 0xca, 0x6d, 0x43, 0x31, 0x1f, 0xd5, 0xfb, 0x89, 0xa7}, - {0x0, 0x2f, 0x5e, 0x71, 0xbc, 0x93, 0xe2, 0xcd, 0x65, 0x4a, 0x3b, 0x14, 0xd9, 0xf6, 0x87, 0xa8}, - {0x0, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, 0x9d, 0xad, 0xfd, 0xcd, 0x5d, 0x6d, 0x3d, 0xd}, - {0x0, 0x31, 0x62, 0x53, 0xc4, 0xf5, 0xa6, 0x97, 0x95, 0xa4, 0xf7, 0xc6, 0x51, 0x60, 0x33, 0x2}, - {0x0, 0x32, 0x64, 0x56, 0xc8, 0xfa, 0xac, 0x9e, 0x8d, 0xbf, 0xe9, 0xdb, 0x45, 0x77, 0x21, 0x13}, - {0x0, 0x33, 0x66, 0x55, 0xcc, 0xff, 0xaa, 0x99, 0x85, 0xb6, 0xe3, 0xd0, 0x49, 0x7a, 0x2f, 0x1c}, - {0x0, 0x34, 0x68, 0x5c, 0xd0, 0xe4, 0xb8, 0x8c, 0xbd, 0x89, 0xd5, 0xe1, 0x6d, 0x59, 0x5, 0x31}, - {0x0, 0x35, 0x6a, 0x5f, 0xd4, 0xe1, 0xbe, 0x8b, 0xb5, 0x80, 0xdf, 0xea, 0x61, 0x54, 0xb, 0x3e}, - {0x0, 0x36, 0x6c, 0x5a, 0xd8, 0xee, 0xb4, 0x82, 0xad, 0x9b, 0xc1, 0xf7, 0x75, 0x43, 0x19, 0x2f}, - {0x0, 0x37, 0x6e, 0x59, 0xdc, 0xeb, 0xb2, 0x85, 0xa5, 0x92, 0xcb, 0xfc, 0x79, 0x4e, 0x17, 0x20}, - {0x0, 0x38, 0x70, 0x48, 0xe0, 0xd8, 0x90, 0xa8, 0xdd, 0xe5, 0xad, 0x95, 0x3d, 0x5, 0x4d, 0x75}, - {0x0, 0x39, 0x72, 0x4b, 0xe4, 0xdd, 0x96, 0xaf, 0xd5, 0xec, 0xa7, 0x9e, 0x31, 0x8, 0x43, 0x7a}, - {0x0, 0x3a, 0x74, 0x4e, 0xe8, 0xd2, 0x9c, 0xa6, 0xcd, 0xf7, 0xb9, 0x83, 0x25, 0x1f, 0x51, 0x6b}, - {0x0, 0x3b, 0x76, 0x4d, 0xec, 0xd7, 0x9a, 0xa1, 0xc5, 0xfe, 0xb3, 0x88, 0x29, 0x12, 0x5f, 0x64}, - {0x0, 0x3c, 0x78, 0x44, 0xf0, 0xcc, 0x88, 0xb4, 0xfd, 0xc1, 0x85, 0xb9, 0xd, 0x31, 0x75, 0x49}, - {0x0, 0x3d, 0x7a, 0x47, 0xf4, 0xc9, 0x8e, 0xb3, 0xf5, 0xc8, 0x8f, 0xb2, 0x1, 0x3c, 0x7b, 0x46}, - {0x0, 0x3e, 0x7c, 0x42, 0xf8, 0xc6, 0x84, 0xba, 0xed, 0xd3, 0x91, 0xaf, 0x15, 0x2b, 0x69, 0x57}, - {0x0, 0x3f, 0x7e, 0x41, 0xfc, 0xc3, 0x82, 0xbd, 0xe5, 0xda, 0x9b, 0xa4, 0x19, 0x26, 0x67, 0x58}, - {0x0, 0x40, 0x80, 0xc0, 0x1d, 0x5d, 0x9d, 0xdd, 0x3a, 0x7a, 0xba, 0xfa, 0x27, 0x67, 0xa7, 0xe7}, - {0x0, 0x41, 0x82, 0xc3, 0x19, 0x58, 0x9b, 0xda, 0x32, 0x73, 0xb0, 0xf1, 0x2b, 0x6a, 0xa9, 0xe8}, - {0x0, 0x42, 0x84, 0xc6, 0x15, 0x57, 0x91, 0xd3, 0x2a, 0x68, 0xae, 0xec, 0x3f, 0x7d, 0xbb, 0xf9}, - {0x0, 0x43, 0x86, 0xc5, 0x11, 0x52, 0x97, 0xd4, 0x22, 0x61, 0xa4, 0xe7, 0x33, 0x70, 0xb5, 0xf6}, - {0x0, 0x44, 0x88, 0xcc, 0xd, 0x49, 0x85, 0xc1, 0x1a, 0x5e, 0x92, 0xd6, 0x17, 0x53, 0x9f, 0xdb}, - {0x0, 0x45, 0x8a, 0xcf, 0x9, 0x4c, 0x83, 0xc6, 0x12, 0x57, 0x98, 0xdd, 0x1b, 0x5e, 0x91, 0xd4}, - {0x0, 0x46, 0x8c, 0xca, 0x5, 0x43, 0x89, 0xcf, 0xa, 0x4c, 0x86, 0xc0, 0xf, 0x49, 0x83, 0xc5}, - {0x0, 0x47, 0x8e, 0xc9, 0x1, 0x46, 0x8f, 0xc8, 0x2, 0x45, 0x8c, 0xcb, 0x3, 0x44, 0x8d, 0xca}, - {0x0, 0x48, 0x90, 0xd8, 0x3d, 0x75, 0xad, 0xe5, 0x7a, 0x32, 0xea, 0xa2, 0x47, 0xf, 0xd7, 0x9f}, - {0x0, 0x49, 0x92, 0xdb, 0x39, 0x70, 0xab, 0xe2, 0x72, 0x3b, 0xe0, 0xa9, 0x4b, 0x2, 0xd9, 0x90}, - {0x0, 0x4a, 0x94, 0xde, 0x35, 0x7f, 0xa1, 0xeb, 0x6a, 0x20, 0xfe, 0xb4, 0x5f, 0x15, 0xcb, 0x81}, - {0x0, 0x4b, 0x96, 0xdd, 0x31, 0x7a, 0xa7, 0xec, 0x62, 0x29, 0xf4, 0xbf, 0x53, 0x18, 0xc5, 0x8e}, - {0x0, 0x4c, 0x98, 0xd4, 0x2d, 0x61, 0xb5, 0xf9, 0x5a, 0x16, 0xc2, 0x8e, 0x77, 0x3b, 0xef, 0xa3}, - {0x0, 0x4d, 0x9a, 0xd7, 0x29, 0x64, 0xb3, 0xfe, 0x52, 0x1f, 0xc8, 0x85, 0x7b, 0x36, 0xe1, 0xac}, - {0x0, 0x4e, 0x9c, 0xd2, 0x25, 0x6b, 0xb9, 0xf7, 0x4a, 0x4, 0xd6, 0x98, 0x6f, 0x21, 0xf3, 0xbd}, - {0x0, 0x4f, 0x9e, 0xd1, 0x21, 0x6e, 0xbf, 0xf0, 0x42, 0xd, 0xdc, 0x93, 0x63, 0x2c, 0xfd, 0xb2}, - {0x0, 0x50, 0xa0, 0xf0, 0x5d, 0xd, 0xfd, 0xad, 0xba, 0xea, 0x1a, 0x4a, 0xe7, 0xb7, 0x47, 0x17}, - {0x0, 0x51, 0xa2, 0xf3, 0x59, 0x8, 0xfb, 0xaa, 0xb2, 0xe3, 0x10, 0x41, 0xeb, 0xba, 0x49, 0x18}, - {0x0, 0x52, 0xa4, 0xf6, 0x55, 0x7, 0xf1, 0xa3, 0xaa, 0xf8, 0xe, 0x5c, 0xff, 0xad, 0x5b, 0x9}, - {0x0, 0x53, 0xa6, 0xf5, 0x51, 0x2, 0xf7, 0xa4, 0xa2, 0xf1, 0x4, 0x57, 0xf3, 0xa0, 0x55, 0x6}, - {0x0, 0x54, 0xa8, 0xfc, 0x4d, 0x19, 0xe5, 0xb1, 0x9a, 0xce, 0x32, 0x66, 0xd7, 0x83, 0x7f, 0x2b}, - {0x0, 0x55, 0xaa, 0xff, 0x49, 0x1c, 0xe3, 0xb6, 0x92, 0xc7, 0x38, 0x6d, 0xdb, 0x8e, 0x71, 0x24}, - {0x0, 0x56, 0xac, 0xfa, 0x45, 0x13, 0xe9, 0xbf, 0x8a, 0xdc, 0x26, 0x70, 0xcf, 0x99, 0x63, 0x35}, - {0x0, 0x57, 0xae, 0xf9, 0x41, 0x16, 0xef, 0xb8, 0x82, 0xd5, 0x2c, 0x7b, 0xc3, 0x94, 0x6d, 0x3a}, - {0x0, 0x58, 0xb0, 0xe8, 0x7d, 0x25, 0xcd, 0x95, 0xfa, 0xa2, 0x4a, 0x12, 0x87, 0xdf, 0x37, 0x6f}, - {0x0, 0x59, 0xb2, 0xeb, 0x79, 0x20, 0xcb, 0x92, 0xf2, 0xab, 0x40, 0x19, 0x8b, 0xd2, 0x39, 0x60}, - {0x0, 0x5a, 0xb4, 0xee, 0x75, 0x2f, 0xc1, 0x9b, 0xea, 0xb0, 0x5e, 0x4, 0x9f, 0xc5, 0x2b, 0x71}, - {0x0, 0x5b, 0xb6, 0xed, 0x71, 0x2a, 0xc7, 0x9c, 0xe2, 0xb9, 0x54, 0xf, 0x93, 0xc8, 0x25, 0x7e}, - {0x0, 0x5c, 0xb8, 0xe4, 0x6d, 0x31, 0xd5, 0x89, 0xda, 0x86, 0x62, 0x3e, 0xb7, 0xeb, 0xf, 0x53}, - {0x0, 0x5d, 0xba, 0xe7, 0x69, 0x34, 0xd3, 0x8e, 0xd2, 0x8f, 0x68, 0x35, 0xbb, 0xe6, 0x1, 0x5c}, - {0x0, 0x5e, 0xbc, 0xe2, 0x65, 0x3b, 0xd9, 0x87, 0xca, 0x94, 0x76, 0x28, 0xaf, 0xf1, 0x13, 0x4d}, - {0x0, 0x5f, 0xbe, 0xe1, 0x61, 0x3e, 0xdf, 0x80, 0xc2, 0x9d, 0x7c, 0x23, 0xa3, 0xfc, 0x1d, 0x42}, - {0x0, 0x60, 0xc0, 0xa0, 0x9d, 0xfd, 0x5d, 0x3d, 0x27, 0x47, 0xe7, 0x87, 0xba, 0xda, 0x7a, 0x1a}, - {0x0, 0x61, 0xc2, 0xa3, 0x99, 0xf8, 0x5b, 0x3a, 0x2f, 0x4e, 0xed, 0x8c, 0xb6, 0xd7, 0x74, 0x15}, - {0x0, 0x62, 0xc4, 0xa6, 0x95, 0xf7, 0x51, 0x33, 0x37, 0x55, 0xf3, 0x91, 0xa2, 0xc0, 0x66, 0x4}, - {0x0, 0x63, 0xc6, 0xa5, 0x91, 0xf2, 0x57, 0x34, 0x3f, 0x5c, 0xf9, 0x9a, 0xae, 0xcd, 0x68, 0xb}, - {0x0, 0x64, 0xc8, 0xac, 0x8d, 0xe9, 0x45, 0x21, 0x7, 0x63, 0xcf, 0xab, 0x8a, 0xee, 0x42, 0x26}, - {0x0, 0x65, 0xca, 0xaf, 0x89, 0xec, 0x43, 0x26, 0xf, 0x6a, 0xc5, 0xa0, 0x86, 0xe3, 0x4c, 0x29}, - {0x0, 0x66, 0xcc, 0xaa, 0x85, 0xe3, 0x49, 0x2f, 0x17, 0x71, 0xdb, 0xbd, 0x92, 0xf4, 0x5e, 0x38}, - {0x0, 0x67, 0xce, 0xa9, 0x81, 0xe6, 0x4f, 0x28, 0x1f, 0x78, 0xd1, 0xb6, 0x9e, 0xf9, 0x50, 0x37}, - {0x0, 0x68, 0xd0, 0xb8, 0xbd, 0xd5, 0x6d, 0x5, 0x67, 0xf, 0xb7, 0xdf, 0xda, 0xb2, 0xa, 0x62}, - {0x0, 0x69, 0xd2, 0xbb, 0xb9, 0xd0, 0x6b, 0x2, 0x6f, 0x6, 0xbd, 0xd4, 0xd6, 0xbf, 0x4, 0x6d}, - {0x0, 0x6a, 0xd4, 0xbe, 0xb5, 0xdf, 0x61, 0xb, 0x77, 0x1d, 0xa3, 0xc9, 0xc2, 0xa8, 0x16, 0x7c}, - {0x0, 0x6b, 0xd6, 0xbd, 0xb1, 0xda, 0x67, 0xc, 0x7f, 0x14, 0xa9, 0xc2, 0xce, 0xa5, 0x18, 0x73}, - {0x0, 0x6c, 0xd8, 0xb4, 0xad, 0xc1, 0x75, 0x19, 0x47, 0x2b, 0x9f, 0xf3, 0xea, 0x86, 0x32, 0x5e}, - {0x0, 0x6d, 0xda, 0xb7, 0xa9, 0xc4, 0x73, 0x1e, 0x4f, 0x22, 0x95, 0xf8, 0xe6, 0x8b, 0x3c, 0x51}, - {0x0, 0x6e, 0xdc, 0xb2, 0xa5, 0xcb, 0x79, 0x17, 0x57, 0x39, 0x8b, 0xe5, 0xf2, 0x9c, 0x2e, 0x40}, - {0x0, 0x6f, 0xde, 0xb1, 0xa1, 0xce, 0x7f, 0x10, 0x5f, 0x30, 0x81, 0xee, 0xfe, 0x91, 0x20, 0x4f}, - {0x0, 0x70, 0xe0, 0x90, 0xdd, 0xad, 0x3d, 0x4d, 0xa7, 0xd7, 0x47, 0x37, 0x7a, 0xa, 0x9a, 0xea}, - {0x0, 0x71, 0xe2, 0x93, 0xd9, 0xa8, 0x3b, 0x4a, 0xaf, 0xde, 0x4d, 0x3c, 0x76, 0x7, 0x94, 0xe5}, - {0x0, 0x72, 0xe4, 0x96, 0xd5, 0xa7, 0x31, 0x43, 0xb7, 0xc5, 0x53, 0x21, 0x62, 0x10, 0x86, 0xf4}, - {0x0, 0x73, 0xe6, 0x95, 0xd1, 0xa2, 0x37, 0x44, 0xbf, 0xcc, 0x59, 0x2a, 0x6e, 0x1d, 0x88, 0xfb}, - {0x0, 0x74, 0xe8, 0x9c, 0xcd, 0xb9, 0x25, 0x51, 0x87, 0xf3, 0x6f, 0x1b, 0x4a, 0x3e, 0xa2, 0xd6}, - {0x0, 0x75, 0xea, 0x9f, 0xc9, 0xbc, 0x23, 0x56, 0x8f, 0xfa, 0x65, 0x10, 0x46, 0x33, 0xac, 0xd9}, - {0x0, 0x76, 0xec, 0x9a, 0xc5, 0xb3, 0x29, 0x5f, 0x97, 0xe1, 0x7b, 0xd, 0x52, 0x24, 0xbe, 0xc8}, - {0x0, 0x77, 0xee, 0x99, 0xc1, 0xb6, 0x2f, 0x58, 0x9f, 0xe8, 0x71, 0x6, 0x5e, 0x29, 0xb0, 0xc7}, - {0x0, 0x78, 0xf0, 0x88, 0xfd, 0x85, 0xd, 0x75, 0xe7, 0x9f, 0x17, 0x6f, 0x1a, 0x62, 0xea, 0x92}, - {0x0, 0x79, 0xf2, 0x8b, 0xf9, 0x80, 0xb, 0x72, 0xef, 0x96, 0x1d, 0x64, 0x16, 0x6f, 0xe4, 0x9d}, - {0x0, 0x7a, 0xf4, 0x8e, 0xf5, 0x8f, 0x1, 0x7b, 0xf7, 0x8d, 0x3, 0x79, 0x2, 0x78, 0xf6, 0x8c}, - {0x0, 0x7b, 0xf6, 0x8d, 0xf1, 0x8a, 0x7, 0x7c, 0xff, 0x84, 0x9, 0x72, 0xe, 0x75, 0xf8, 0x83}, - {0x0, 0x7c, 0xf8, 0x84, 0xed, 0x91, 0x15, 0x69, 0xc7, 0xbb, 0x3f, 0x43, 0x2a, 0x56, 0xd2, 0xae}, - {0x0, 0x7d, 0xfa, 0x87, 0xe9, 0x94, 0x13, 0x6e, 0xcf, 0xb2, 0x35, 0x48, 0x26, 0x5b, 0xdc, 0xa1}, - {0x0, 0x7e, 0xfc, 0x82, 0xe5, 0x9b, 0x19, 0x67, 0xd7, 0xa9, 0x2b, 0x55, 0x32, 0x4c, 0xce, 0xb0}, - {0x0, 0x7f, 0xfe, 0x81, 0xe1, 0x9e, 0x1f, 0x60, 0xdf, 0xa0, 0x21, 0x5e, 0x3e, 0x41, 0xc0, 0xbf}, - {0x0, 0x80, 0x1d, 0x9d, 0x3a, 0xba, 0x27, 0xa7, 0x74, 0xf4, 0x69, 0xe9, 0x4e, 0xce, 0x53, 0xd3}, - {0x0, 0x81, 0x1f, 0x9e, 0x3e, 0xbf, 0x21, 0xa0, 0x7c, 0xfd, 0x63, 0xe2, 0x42, 0xc3, 0x5d, 0xdc}, - {0x0, 0x82, 0x19, 0x9b, 0x32, 0xb0, 0x2b, 0xa9, 0x64, 0xe6, 0x7d, 0xff, 0x56, 0xd4, 0x4f, 0xcd}, - {0x0, 0x83, 0x1b, 0x98, 0x36, 0xb5, 0x2d, 0xae, 0x6c, 0xef, 0x77, 0xf4, 0x5a, 0xd9, 0x41, 0xc2}, - {0x0, 0x84, 0x15, 0x91, 0x2a, 0xae, 0x3f, 0xbb, 0x54, 0xd0, 0x41, 0xc5, 0x7e, 0xfa, 0x6b, 0xef}, - {0x0, 0x85, 0x17, 0x92, 0x2e, 0xab, 0x39, 0xbc, 0x5c, 0xd9, 0x4b, 0xce, 0x72, 0xf7, 0x65, 0xe0}, - {0x0, 0x86, 0x11, 0x97, 0x22, 0xa4, 0x33, 0xb5, 0x44, 0xc2, 0x55, 0xd3, 0x66, 0xe0, 0x77, 0xf1}, - {0x0, 0x87, 0x13, 0x94, 0x26, 0xa1, 0x35, 0xb2, 0x4c, 0xcb, 0x5f, 0xd8, 0x6a, 0xed, 0x79, 0xfe}, - {0x0, 0x88, 0xd, 0x85, 0x1a, 0x92, 0x17, 0x9f, 0x34, 0xbc, 0x39, 0xb1, 0x2e, 0xa6, 0x23, 0xab}, - {0x0, 0x89, 0xf, 0x86, 0x1e, 0x97, 0x11, 0x98, 0x3c, 0xb5, 0x33, 0xba, 0x22, 0xab, 0x2d, 0xa4}, - {0x0, 0x8a, 0x9, 0x83, 0x12, 0x98, 0x1b, 0x91, 0x24, 0xae, 0x2d, 0xa7, 0x36, 0xbc, 0x3f, 0xb5}, - {0x0, 0x8b, 0xb, 0x80, 0x16, 0x9d, 0x1d, 0x96, 0x2c, 0xa7, 0x27, 0xac, 0x3a, 0xb1, 0x31, 0xba}, - {0x0, 0x8c, 0x5, 0x89, 0xa, 0x86, 0xf, 0x83, 0x14, 0x98, 0x11, 0x9d, 0x1e, 0x92, 0x1b, 0x97}, - {0x0, 0x8d, 0x7, 0x8a, 0xe, 0x83, 0x9, 0x84, 0x1c, 0x91, 0x1b, 0x96, 0x12, 0x9f, 0x15, 0x98}, - {0x0, 0x8e, 0x1, 0x8f, 0x2, 0x8c, 0x3, 0x8d, 0x4, 0x8a, 0x5, 0x8b, 0x6, 0x88, 0x7, 0x89}, - {0x0, 0x8f, 0x3, 0x8c, 0x6, 0x89, 0x5, 0x8a, 0xc, 0x83, 0xf, 0x80, 0xa, 0x85, 0x9, 0x86}, - {0x0, 0x90, 0x3d, 0xad, 0x7a, 0xea, 0x47, 0xd7, 0xf4, 0x64, 0xc9, 0x59, 0x8e, 0x1e, 0xb3, 0x23}, - {0x0, 0x91, 0x3f, 0xae, 0x7e, 0xef, 0x41, 0xd0, 0xfc, 0x6d, 0xc3, 0x52, 0x82, 0x13, 0xbd, 0x2c}, - {0x0, 0x92, 0x39, 0xab, 0x72, 0xe0, 0x4b, 0xd9, 0xe4, 0x76, 0xdd, 0x4f, 0x96, 0x4, 0xaf, 0x3d}, - {0x0, 0x93, 0x3b, 0xa8, 0x76, 0xe5, 0x4d, 0xde, 0xec, 0x7f, 0xd7, 0x44, 0x9a, 0x9, 0xa1, 0x32}, - {0x0, 0x94, 0x35, 0xa1, 0x6a, 0xfe, 0x5f, 0xcb, 0xd4, 0x40, 0xe1, 0x75, 0xbe, 0x2a, 0x8b, 0x1f}, - {0x0, 0x95, 0x37, 0xa2, 0x6e, 0xfb, 0x59, 0xcc, 0xdc, 0x49, 0xeb, 0x7e, 0xb2, 0x27, 0x85, 0x10}, - {0x0, 0x96, 0x31, 0xa7, 0x62, 0xf4, 0x53, 0xc5, 0xc4, 0x52, 0xf5, 0x63, 0xa6, 0x30, 0x97, 0x1}, - {0x0, 0x97, 0x33, 0xa4, 0x66, 0xf1, 0x55, 0xc2, 0xcc, 0x5b, 0xff, 0x68, 0xaa, 0x3d, 0x99, 0xe}, - {0x0, 0x98, 0x2d, 0xb5, 0x5a, 0xc2, 0x77, 0xef, 0xb4, 0x2c, 0x99, 0x1, 0xee, 0x76, 0xc3, 0x5b}, - {0x0, 0x99, 0x2f, 0xb6, 0x5e, 0xc7, 0x71, 0xe8, 0xbc, 0x25, 0x93, 0xa, 0xe2, 0x7b, 0xcd, 0x54}, - {0x0, 0x9a, 0x29, 0xb3, 0x52, 0xc8, 0x7b, 0xe1, 0xa4, 0x3e, 0x8d, 0x17, 0xf6, 0x6c, 0xdf, 0x45}, - {0x0, 0x9b, 0x2b, 0xb0, 0x56, 0xcd, 0x7d, 0xe6, 0xac, 0x37, 0x87, 0x1c, 0xfa, 0x61, 0xd1, 0x4a}, - {0x0, 0x9c, 0x25, 0xb9, 0x4a, 0xd6, 0x6f, 0xf3, 0x94, 0x8, 0xb1, 0x2d, 0xde, 0x42, 0xfb, 0x67}, - {0x0, 0x9d, 0x27, 0xba, 0x4e, 0xd3, 0x69, 0xf4, 0x9c, 0x1, 0xbb, 0x26, 0xd2, 0x4f, 0xf5, 0x68}, - {0x0, 0x9e, 0x21, 0xbf, 0x42, 0xdc, 0x63, 0xfd, 0x84, 0x1a, 0xa5, 0x3b, 0xc6, 0x58, 0xe7, 0x79}, - {0x0, 0x9f, 0x23, 0xbc, 0x46, 0xd9, 0x65, 0xfa, 0x8c, 0x13, 0xaf, 0x30, 0xca, 0x55, 0xe9, 0x76}, - {0x0, 0xa0, 0x5d, 0xfd, 0xba, 0x1a, 0xe7, 0x47, 0x69, 0xc9, 0x34, 0x94, 0xd3, 0x73, 0x8e, 0x2e}, - {0x0, 0xa1, 0x5f, 0xfe, 0xbe, 0x1f, 0xe1, 0x40, 0x61, 0xc0, 0x3e, 0x9f, 0xdf, 0x7e, 0x80, 0x21}, - {0x0, 0xa2, 0x59, 0xfb, 0xb2, 0x10, 0xeb, 0x49, 0x79, 0xdb, 0x20, 0x82, 0xcb, 0x69, 0x92, 0x30}, - {0x0, 0xa3, 0x5b, 0xf8, 0xb6, 0x15, 0xed, 0x4e, 0x71, 0xd2, 0x2a, 0x89, 0xc7, 0x64, 0x9c, 0x3f}, - {0x0, 0xa4, 0x55, 0xf1, 0xaa, 0xe, 0xff, 0x5b, 0x49, 0xed, 0x1c, 0xb8, 0xe3, 0x47, 0xb6, 0x12}, - {0x0, 0xa5, 0x57, 0xf2, 0xae, 0xb, 0xf9, 0x5c, 0x41, 0xe4, 0x16, 0xb3, 0xef, 0x4a, 0xb8, 0x1d}, - {0x0, 0xa6, 0x51, 0xf7, 0xa2, 0x4, 0xf3, 0x55, 0x59, 0xff, 0x8, 0xae, 0xfb, 0x5d, 0xaa, 0xc}, - {0x0, 0xa7, 0x53, 0xf4, 0xa6, 0x1, 0xf5, 0x52, 0x51, 0xf6, 0x2, 0xa5, 0xf7, 0x50, 0xa4, 0x3}, - {0x0, 0xa8, 0x4d, 0xe5, 0x9a, 0x32, 0xd7, 0x7f, 0x29, 0x81, 0x64, 0xcc, 0xb3, 0x1b, 0xfe, 0x56}, - {0x0, 0xa9, 0x4f, 0xe6, 0x9e, 0x37, 0xd1, 0x78, 0x21, 0x88, 0x6e, 0xc7, 0xbf, 0x16, 0xf0, 0x59}, - {0x0, 0xaa, 0x49, 0xe3, 0x92, 0x38, 0xdb, 0x71, 0x39, 0x93, 0x70, 0xda, 0xab, 0x1, 0xe2, 0x48}, - {0x0, 0xab, 0x4b, 0xe0, 0x96, 0x3d, 0xdd, 0x76, 0x31, 0x9a, 0x7a, 0xd1, 0xa7, 0xc, 0xec, 0x47}, - {0x0, 0xac, 0x45, 0xe9, 0x8a, 0x26, 0xcf, 0x63, 0x9, 0xa5, 0x4c, 0xe0, 0x83, 0x2f, 0xc6, 0x6a}, - {0x0, 0xad, 0x47, 0xea, 0x8e, 0x23, 0xc9, 0x64, 0x1, 0xac, 0x46, 0xeb, 0x8f, 0x22, 0xc8, 0x65}, - {0x0, 0xae, 0x41, 0xef, 0x82, 0x2c, 0xc3, 0x6d, 0x19, 0xb7, 0x58, 0xf6, 0x9b, 0x35, 0xda, 0x74}, - {0x0, 0xaf, 0x43, 0xec, 0x86, 0x29, 0xc5, 0x6a, 0x11, 0xbe, 0x52, 0xfd, 0x97, 0x38, 0xd4, 0x7b}, - {0x0, 0xb0, 0x7d, 0xcd, 0xfa, 0x4a, 0x87, 0x37, 0xe9, 0x59, 0x94, 0x24, 0x13, 0xa3, 0x6e, 0xde}, - {0x0, 0xb1, 0x7f, 0xce, 0xfe, 0x4f, 0x81, 0x30, 0xe1, 0x50, 0x9e, 0x2f, 0x1f, 0xae, 0x60, 0xd1}, - {0x0, 0xb2, 0x79, 0xcb, 0xf2, 0x40, 0x8b, 0x39, 0xf9, 0x4b, 0x80, 0x32, 0xb, 0xb9, 0x72, 0xc0}, - {0x0, 0xb3, 0x7b, 0xc8, 0xf6, 0x45, 0x8d, 0x3e, 0xf1, 0x42, 0x8a, 0x39, 0x7, 0xb4, 0x7c, 0xcf}, - {0x0, 0xb4, 0x75, 0xc1, 0xea, 0x5e, 0x9f, 0x2b, 0xc9, 0x7d, 0xbc, 0x8, 0x23, 0x97, 0x56, 0xe2}, - {0x0, 0xb5, 0x77, 0xc2, 0xee, 0x5b, 0x99, 0x2c, 0xc1, 0x74, 0xb6, 0x3, 0x2f, 0x9a, 0x58, 0xed}, - {0x0, 0xb6, 0x71, 0xc7, 0xe2, 0x54, 0x93, 0x25, 0xd9, 0x6f, 0xa8, 0x1e, 0x3b, 0x8d, 0x4a, 0xfc}, - {0x0, 0xb7, 0x73, 0xc4, 0xe6, 0x51, 0x95, 0x22, 0xd1, 0x66, 0xa2, 0x15, 0x37, 0x80, 0x44, 0xf3}, - {0x0, 0xb8, 0x6d, 0xd5, 0xda, 0x62, 0xb7, 0xf, 0xa9, 0x11, 0xc4, 0x7c, 0x73, 0xcb, 0x1e, 0xa6}, - {0x0, 0xb9, 0x6f, 0xd6, 0xde, 0x67, 0xb1, 0x8, 0xa1, 0x18, 0xce, 0x77, 0x7f, 0xc6, 0x10, 0xa9}, - {0x0, 0xba, 0x69, 0xd3, 0xd2, 0x68, 0xbb, 0x1, 0xb9, 0x3, 0xd0, 0x6a, 0x6b, 0xd1, 0x2, 0xb8}, - {0x0, 0xbb, 0x6b, 0xd0, 0xd6, 0x6d, 0xbd, 0x6, 0xb1, 0xa, 0xda, 0x61, 0x67, 0xdc, 0xc, 0xb7}, - {0x0, 0xbc, 0x65, 0xd9, 0xca, 0x76, 0xaf, 0x13, 0x89, 0x35, 0xec, 0x50, 0x43, 0xff, 0x26, 0x9a}, - {0x0, 0xbd, 0x67, 0xda, 0xce, 0x73, 0xa9, 0x14, 0x81, 0x3c, 0xe6, 0x5b, 0x4f, 0xf2, 0x28, 0x95}, - {0x0, 0xbe, 0x61, 0xdf, 0xc2, 0x7c, 0xa3, 0x1d, 0x99, 0x27, 0xf8, 0x46, 0x5b, 0xe5, 0x3a, 0x84}, - {0x0, 0xbf, 0x63, 0xdc, 0xc6, 0x79, 0xa5, 0x1a, 0x91, 0x2e, 0xf2, 0x4d, 0x57, 0xe8, 0x34, 0x8b}, - {0x0, 0xc0, 0x9d, 0x5d, 0x27, 0xe7, 0xba, 0x7a, 0x4e, 0x8e, 0xd3, 0x13, 0x69, 0xa9, 0xf4, 0x34}, - {0x0, 0xc1, 0x9f, 0x5e, 0x23, 0xe2, 0xbc, 0x7d, 0x46, 0x87, 0xd9, 0x18, 0x65, 0xa4, 0xfa, 0x3b}, - {0x0, 0xc2, 0x99, 0x5b, 0x2f, 0xed, 0xb6, 0x74, 0x5e, 0x9c, 0xc7, 0x5, 0x71, 0xb3, 0xe8, 0x2a}, - {0x0, 0xc3, 0x9b, 0x58, 0x2b, 0xe8, 0xb0, 0x73, 0x56, 0x95, 0xcd, 0xe, 0x7d, 0xbe, 0xe6, 0x25}, - {0x0, 0xc4, 0x95, 0x51, 0x37, 0xf3, 0xa2, 0x66, 0x6e, 0xaa, 0xfb, 0x3f, 0x59, 0x9d, 0xcc, 0x8}, - {0x0, 0xc5, 0x97, 0x52, 0x33, 0xf6, 0xa4, 0x61, 0x66, 0xa3, 0xf1, 0x34, 0x55, 0x90, 0xc2, 0x7}, - {0x0, 0xc6, 0x91, 0x57, 0x3f, 0xf9, 0xae, 0x68, 0x7e, 0xb8, 0xef, 0x29, 0x41, 0x87, 0xd0, 0x16}, - {0x0, 0xc7, 0x93, 0x54, 0x3b, 0xfc, 0xa8, 0x6f, 0x76, 0xb1, 0xe5, 0x22, 0x4d, 0x8a, 0xde, 0x19}, - {0x0, 0xc8, 0x8d, 0x45, 0x7, 0xcf, 0x8a, 0x42, 0xe, 0xc6, 0x83, 0x4b, 0x9, 0xc1, 0x84, 0x4c}, - {0x0, 0xc9, 0x8f, 0x46, 0x3, 0xca, 0x8c, 0x45, 0x6, 0xcf, 0x89, 0x40, 0x5, 0xcc, 0x8a, 0x43}, - {0x0, 0xca, 0x89, 0x43, 0xf, 0xc5, 0x86, 0x4c, 0x1e, 0xd4, 0x97, 0x5d, 0x11, 0xdb, 0x98, 0x52}, - {0x0, 0xcb, 0x8b, 0x40, 0xb, 0xc0, 0x80, 0x4b, 0x16, 0xdd, 0x9d, 0x56, 0x1d, 0xd6, 0x96, 0x5d}, - {0x0, 0xcc, 0x85, 0x49, 0x17, 0xdb, 0x92, 0x5e, 0x2e, 0xe2, 0xab, 0x67, 0x39, 0xf5, 0xbc, 0x70}, - {0x0, 0xcd, 0x87, 0x4a, 0x13, 0xde, 0x94, 0x59, 0x26, 0xeb, 0xa1, 0x6c, 0x35, 0xf8, 0xb2, 0x7f}, - {0x0, 0xce, 0x81, 0x4f, 0x1f, 0xd1, 0x9e, 0x50, 0x3e, 0xf0, 0xbf, 0x71, 0x21, 0xef, 0xa0, 0x6e}, - {0x0, 0xcf, 0x83, 0x4c, 0x1b, 0xd4, 0x98, 0x57, 0x36, 0xf9, 0xb5, 0x7a, 0x2d, 0xe2, 0xae, 0x61}, - {0x0, 0xd0, 0xbd, 0x6d, 0x67, 0xb7, 0xda, 0xa, 0xce, 0x1e, 0x73, 0xa3, 0xa9, 0x79, 0x14, 0xc4}, - {0x0, 0xd1, 0xbf, 0x6e, 0x63, 0xb2, 0xdc, 0xd, 0xc6, 0x17, 0x79, 0xa8, 0xa5, 0x74, 0x1a, 0xcb}, - {0x0, 0xd2, 0xb9, 0x6b, 0x6f, 0xbd, 0xd6, 0x4, 0xde, 0xc, 0x67, 0xb5, 0xb1, 0x63, 0x8, 0xda}, - {0x0, 0xd3, 0xbb, 0x68, 0x6b, 0xb8, 0xd0, 0x3, 0xd6, 0x5, 0x6d, 0xbe, 0xbd, 0x6e, 0x6, 0xd5}, - {0x0, 0xd4, 0xb5, 0x61, 0x77, 0xa3, 0xc2, 0x16, 0xee, 0x3a, 0x5b, 0x8f, 0x99, 0x4d, 0x2c, 0xf8}, - {0x0, 0xd5, 0xb7, 0x62, 0x73, 0xa6, 0xc4, 0x11, 0xe6, 0x33, 0x51, 0x84, 0x95, 0x40, 0x22, 0xf7}, - {0x0, 0xd6, 0xb1, 0x67, 0x7f, 0xa9, 0xce, 0x18, 0xfe, 0x28, 0x4f, 0x99, 0x81, 0x57, 0x30, 0xe6}, - {0x0, 0xd7, 0xb3, 0x64, 0x7b, 0xac, 0xc8, 0x1f, 0xf6, 0x21, 0x45, 0x92, 0x8d, 0x5a, 0x3e, 0xe9}, - {0x0, 0xd8, 0xad, 0x75, 0x47, 0x9f, 0xea, 0x32, 0x8e, 0x56, 0x23, 0xfb, 0xc9, 0x11, 0x64, 0xbc}, - {0x0, 0xd9, 0xaf, 0x76, 0x43, 0x9a, 0xec, 0x35, 0x86, 0x5f, 0x29, 0xf0, 0xc5, 0x1c, 0x6a, 0xb3}, - {0x0, 0xda, 0xa9, 0x73, 0x4f, 0x95, 0xe6, 0x3c, 0x9e, 0x44, 0x37, 0xed, 0xd1, 0xb, 0x78, 0xa2}, - {0x0, 0xdb, 0xab, 0x70, 0x4b, 0x90, 0xe0, 0x3b, 0x96, 0x4d, 0x3d, 0xe6, 0xdd, 0x6, 0x76, 0xad}, - {0x0, 0xdc, 0xa5, 0x79, 0x57, 0x8b, 0xf2, 0x2e, 0xae, 0x72, 0xb, 0xd7, 0xf9, 0x25, 0x5c, 0x80}, - {0x0, 0xdd, 0xa7, 0x7a, 0x53, 0x8e, 0xf4, 0x29, 0xa6, 0x7b, 0x1, 0xdc, 0xf5, 0x28, 0x52, 0x8f}, - {0x0, 0xde, 0xa1, 0x7f, 0x5f, 0x81, 0xfe, 0x20, 0xbe, 0x60, 0x1f, 0xc1, 0xe1, 0x3f, 0x40, 0x9e}, - {0x0, 0xdf, 0xa3, 0x7c, 0x5b, 0x84, 0xf8, 0x27, 0xb6, 0x69, 0x15, 0xca, 0xed, 0x32, 0x4e, 0x91}, - {0x0, 0xe0, 0xdd, 0x3d, 0xa7, 0x47, 0x7a, 0x9a, 0x53, 0xb3, 0x8e, 0x6e, 0xf4, 0x14, 0x29, 0xc9}, - {0x0, 0xe1, 0xdf, 0x3e, 0xa3, 0x42, 0x7c, 0x9d, 0x5b, 0xba, 0x84, 0x65, 0xf8, 0x19, 0x27, 0xc6}, - {0x0, 0xe2, 0xd9, 0x3b, 0xaf, 0x4d, 0x76, 0x94, 0x43, 0xa1, 0x9a, 0x78, 0xec, 0xe, 0x35, 0xd7}, - {0x0, 0xe3, 0xdb, 0x38, 0xab, 0x48, 0x70, 0x93, 0x4b, 0xa8, 0x90, 0x73, 0xe0, 0x3, 0x3b, 0xd8}, - {0x0, 0xe4, 0xd5, 0x31, 0xb7, 0x53, 0x62, 0x86, 0x73, 0x97, 0xa6, 0x42, 0xc4, 0x20, 0x11, 0xf5}, - {0x0, 0xe5, 0xd7, 0x32, 0xb3, 0x56, 0x64, 0x81, 0x7b, 0x9e, 0xac, 0x49, 0xc8, 0x2d, 0x1f, 0xfa}, - {0x0, 0xe6, 0xd1, 0x37, 0xbf, 0x59, 0x6e, 0x88, 0x63, 0x85, 0xb2, 0x54, 0xdc, 0x3a, 0xd, 0xeb}, - {0x0, 0xe7, 0xd3, 0x34, 0xbb, 0x5c, 0x68, 0x8f, 0x6b, 0x8c, 0xb8, 0x5f, 0xd0, 0x37, 0x3, 0xe4}, - {0x0, 0xe8, 0xcd, 0x25, 0x87, 0x6f, 0x4a, 0xa2, 0x13, 0xfb, 0xde, 0x36, 0x94, 0x7c, 0x59, 0xb1}, - {0x0, 0xe9, 0xcf, 0x26, 0x83, 0x6a, 0x4c, 0xa5, 0x1b, 0xf2, 0xd4, 0x3d, 0x98, 0x71, 0x57, 0xbe}, - {0x0, 0xea, 0xc9, 0x23, 0x8f, 0x65, 0x46, 0xac, 0x3, 0xe9, 0xca, 0x20, 0x8c, 0x66, 0x45, 0xaf}, - {0x0, 0xeb, 0xcb, 0x20, 0x8b, 0x60, 0x40, 0xab, 0xb, 0xe0, 0xc0, 0x2b, 0x80, 0x6b, 0x4b, 0xa0}, - {0x0, 0xec, 0xc5, 0x29, 0x97, 0x7b, 0x52, 0xbe, 0x33, 0xdf, 0xf6, 0x1a, 0xa4, 0x48, 0x61, 0x8d}, - {0x0, 0xed, 0xc7, 0x2a, 0x93, 0x7e, 0x54, 0xb9, 0x3b, 0xd6, 0xfc, 0x11, 0xa8, 0x45, 0x6f, 0x82}, - {0x0, 0xee, 0xc1, 0x2f, 0x9f, 0x71, 0x5e, 0xb0, 0x23, 0xcd, 0xe2, 0xc, 0xbc, 0x52, 0x7d, 0x93}, - {0x0, 0xef, 0xc3, 0x2c, 0x9b, 0x74, 0x58, 0xb7, 0x2b, 0xc4, 0xe8, 0x7, 0xb0, 0x5f, 0x73, 0x9c}, - {0x0, 0xf0, 0xfd, 0xd, 0xe7, 0x17, 0x1a, 0xea, 0xd3, 0x23, 0x2e, 0xde, 0x34, 0xc4, 0xc9, 0x39}, - {0x0, 0xf1, 0xff, 0xe, 0xe3, 0x12, 0x1c, 0xed, 0xdb, 0x2a, 0x24, 0xd5, 0x38, 0xc9, 0xc7, 0x36}, - {0x0, 0xf2, 0xf9, 0xb, 0xef, 0x1d, 0x16, 0xe4, 0xc3, 0x31, 0x3a, 0xc8, 0x2c, 0xde, 0xd5, 0x27}, - {0x0, 0xf3, 0xfb, 0x8, 0xeb, 0x18, 0x10, 0xe3, 0xcb, 0x38, 0x30, 0xc3, 0x20, 0xd3, 0xdb, 0x28}, - {0x0, 0xf4, 0xf5, 0x1, 0xf7, 0x3, 0x2, 0xf6, 0xf3, 0x7, 0x6, 0xf2, 0x4, 0xf0, 0xf1, 0x5}, - {0x0, 0xf5, 0xf7, 0x2, 0xf3, 0x6, 0x4, 0xf1, 0xfb, 0xe, 0xc, 0xf9, 0x8, 0xfd, 0xff, 0xa}, - {0x0, 0xf6, 0xf1, 0x7, 0xff, 0x9, 0xe, 0xf8, 0xe3, 0x15, 0x12, 0xe4, 0x1c, 0xea, 0xed, 0x1b}, - {0x0, 0xf7, 0xf3, 0x4, 0xfb, 0xc, 0x8, 0xff, 0xeb, 0x1c, 0x18, 0xef, 0x10, 0xe7, 0xe3, 0x14}, - {0x0, 0xf8, 0xed, 0x15, 0xc7, 0x3f, 0x2a, 0xd2, 0x93, 0x6b, 0x7e, 0x86, 0x54, 0xac, 0xb9, 0x41}, - {0x0, 0xf9, 0xef, 0x16, 0xc3, 0x3a, 0x2c, 0xd5, 0x9b, 0x62, 0x74, 0x8d, 0x58, 0xa1, 0xb7, 0x4e}, - {0x0, 0xfa, 0xe9, 0x13, 0xcf, 0x35, 0x26, 0xdc, 0x83, 0x79, 0x6a, 0x90, 0x4c, 0xb6, 0xa5, 0x5f}, - {0x0, 0xfb, 0xeb, 0x10, 0xcb, 0x30, 0x20, 0xdb, 0x8b, 0x70, 0x60, 0x9b, 0x40, 0xbb, 0xab, 0x50}, - {0x0, 0xfc, 0xe5, 0x19, 0xd7, 0x2b, 0x32, 0xce, 0xb3, 0x4f, 0x56, 0xaa, 0x64, 0x98, 0x81, 0x7d}, - {0x0, 0xfd, 0xe7, 0x1a, 0xd3, 0x2e, 0x34, 0xc9, 0xbb, 0x46, 0x5c, 0xa1, 0x68, 0x95, 0x8f, 0x72}, - {0x0, 0xfe, 0xe1, 0x1f, 0xdf, 0x21, 0x3e, 0xc0, 0xa3, 0x5d, 0x42, 0xbc, 0x7c, 0x82, 0x9d, 0x63}, - {0x0, 0xff, 0xe3, 0x1c, 0xdb, 0x24, 0x38, 0xc7, 0xab, 0x54, 0x48, 0xb7, 0x70, 0x8f, 0x93, 0x6c}} -var mulTableHigh = [256][16]uint8{{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, - {0x0, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0}, - {0x0, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, 0x1d, 0x3d, 0x5d, 0x7d, 0x9d, 0xbd, 0xdd, 0xfd}, - {0x0, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, 0x9d, 0xad, 0xfd, 0xcd, 0x5d, 0x6d, 0x3d, 0xd}, - {0x0, 0x40, 0x80, 0xc0, 0x1d, 0x5d, 0x9d, 0xdd, 0x3a, 0x7a, 0xba, 0xfa, 0x27, 0x67, 0xa7, 0xe7}, - {0x0, 0x50, 0xa0, 0xf0, 0x5d, 0xd, 0xfd, 0xad, 0xba, 0xea, 0x1a, 0x4a, 0xe7, 0xb7, 0x47, 0x17}, - {0x0, 0x60, 0xc0, 0xa0, 0x9d, 0xfd, 0x5d, 0x3d, 0x27, 0x47, 0xe7, 0x87, 0xba, 0xda, 0x7a, 0x1a}, - {0x0, 0x70, 0xe0, 0x90, 0xdd, 0xad, 0x3d, 0x4d, 0xa7, 0xd7, 0x47, 0x37, 0x7a, 0xa, 0x9a, 0xea}, - {0x0, 0x80, 0x1d, 0x9d, 0x3a, 0xba, 0x27, 0xa7, 0x74, 0xf4, 0x69, 0xe9, 0x4e, 0xce, 0x53, 0xd3}, - {0x0, 0x90, 0x3d, 0xad, 0x7a, 0xea, 0x47, 0xd7, 0xf4, 0x64, 0xc9, 0x59, 0x8e, 0x1e, 0xb3, 0x23}, - {0x0, 0xa0, 0x5d, 0xfd, 0xba, 0x1a, 0xe7, 0x47, 0x69, 0xc9, 0x34, 0x94, 0xd3, 0x73, 0x8e, 0x2e}, - {0x0, 0xb0, 0x7d, 0xcd, 0xfa, 0x4a, 0x87, 0x37, 0xe9, 0x59, 0x94, 0x24, 0x13, 0xa3, 0x6e, 0xde}, - {0x0, 0xc0, 0x9d, 0x5d, 0x27, 0xe7, 0xba, 0x7a, 0x4e, 0x8e, 0xd3, 0x13, 0x69, 0xa9, 0xf4, 0x34}, - {0x0, 0xd0, 0xbd, 0x6d, 0x67, 0xb7, 0xda, 0xa, 0xce, 0x1e, 0x73, 0xa3, 0xa9, 0x79, 0x14, 0xc4}, - {0x0, 0xe0, 0xdd, 0x3d, 0xa7, 0x47, 0x7a, 0x9a, 0x53, 0xb3, 0x8e, 0x6e, 0xf4, 0x14, 0x29, 0xc9}, - {0x0, 0xf0, 0xfd, 0xd, 0xe7, 0x17, 0x1a, 0xea, 0xd3, 0x23, 0x2e, 0xde, 0x34, 0xc4, 0xc9, 0x39}, - {0x0, 0x1d, 0x3a, 0x27, 0x74, 0x69, 0x4e, 0x53, 0xe8, 0xf5, 0xd2, 0xcf, 0x9c, 0x81, 0xa6, 0xbb}, - {0x0, 0xd, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b}, - {0x0, 0x3d, 0x7a, 0x47, 0xf4, 0xc9, 0x8e, 0xb3, 0xf5, 0xc8, 0x8f, 0xb2, 0x1, 0x3c, 0x7b, 0x46}, - {0x0, 0x2d, 0x5a, 0x77, 0xb4, 0x99, 0xee, 0xc3, 0x75, 0x58, 0x2f, 0x2, 0xc1, 0xec, 0x9b, 0xb6}, - {0x0, 0x5d, 0xba, 0xe7, 0x69, 0x34, 0xd3, 0x8e, 0xd2, 0x8f, 0x68, 0x35, 0xbb, 0xe6, 0x1, 0x5c}, - {0x0, 0x4d, 0x9a, 0xd7, 0x29, 0x64, 0xb3, 0xfe, 0x52, 0x1f, 0xc8, 0x85, 0x7b, 0x36, 0xe1, 0xac}, - {0x0, 0x7d, 0xfa, 0x87, 0xe9, 0x94, 0x13, 0x6e, 0xcf, 0xb2, 0x35, 0x48, 0x26, 0x5b, 0xdc, 0xa1}, - {0x0, 0x6d, 0xda, 0xb7, 0xa9, 0xc4, 0x73, 0x1e, 0x4f, 0x22, 0x95, 0xf8, 0xe6, 0x8b, 0x3c, 0x51}, - {0x0, 0x9d, 0x27, 0xba, 0x4e, 0xd3, 0x69, 0xf4, 0x9c, 0x1, 0xbb, 0x26, 0xd2, 0x4f, 0xf5, 0x68}, - {0x0, 0x8d, 0x7, 0x8a, 0xe, 0x83, 0x9, 0x84, 0x1c, 0x91, 0x1b, 0x96, 0x12, 0x9f, 0x15, 0x98}, - {0x0, 0xbd, 0x67, 0xda, 0xce, 0x73, 0xa9, 0x14, 0x81, 0x3c, 0xe6, 0x5b, 0x4f, 0xf2, 0x28, 0x95}, - {0x0, 0xad, 0x47, 0xea, 0x8e, 0x23, 0xc9, 0x64, 0x1, 0xac, 0x46, 0xeb, 0x8f, 0x22, 0xc8, 0x65}, - {0x0, 0xdd, 0xa7, 0x7a, 0x53, 0x8e, 0xf4, 0x29, 0xa6, 0x7b, 0x1, 0xdc, 0xf5, 0x28, 0x52, 0x8f}, - {0x0, 0xcd, 0x87, 0x4a, 0x13, 0xde, 0x94, 0x59, 0x26, 0xeb, 0xa1, 0x6c, 0x35, 0xf8, 0xb2, 0x7f}, - {0x0, 0xfd, 0xe7, 0x1a, 0xd3, 0x2e, 0x34, 0xc9, 0xbb, 0x46, 0x5c, 0xa1, 0x68, 0x95, 0x8f, 0x72}, - {0x0, 0xed, 0xc7, 0x2a, 0x93, 0x7e, 0x54, 0xb9, 0x3b, 0xd6, 0xfc, 0x11, 0xa8, 0x45, 0x6f, 0x82}, - {0x0, 0x3a, 0x74, 0x4e, 0xe8, 0xd2, 0x9c, 0xa6, 0xcd, 0xf7, 0xb9, 0x83, 0x25, 0x1f, 0x51, 0x6b}, - {0x0, 0x2a, 0x54, 0x7e, 0xa8, 0x82, 0xfc, 0xd6, 0x4d, 0x67, 0x19, 0x33, 0xe5, 0xcf, 0xb1, 0x9b}, - {0x0, 0x1a, 0x34, 0x2e, 0x68, 0x72, 0x5c, 0x46, 0xd0, 0xca, 0xe4, 0xfe, 0xb8, 0xa2, 0x8c, 0x96}, - {0x0, 0xa, 0x14, 0x1e, 0x28, 0x22, 0x3c, 0x36, 0x50, 0x5a, 0x44, 0x4e, 0x78, 0x72, 0x6c, 0x66}, - {0x0, 0x7a, 0xf4, 0x8e, 0xf5, 0x8f, 0x1, 0x7b, 0xf7, 0x8d, 0x3, 0x79, 0x2, 0x78, 0xf6, 0x8c}, - {0x0, 0x6a, 0xd4, 0xbe, 0xb5, 0xdf, 0x61, 0xb, 0x77, 0x1d, 0xa3, 0xc9, 0xc2, 0xa8, 0x16, 0x7c}, - {0x0, 0x5a, 0xb4, 0xee, 0x75, 0x2f, 0xc1, 0x9b, 0xea, 0xb0, 0x5e, 0x4, 0x9f, 0xc5, 0x2b, 0x71}, - {0x0, 0x4a, 0x94, 0xde, 0x35, 0x7f, 0xa1, 0xeb, 0x6a, 0x20, 0xfe, 0xb4, 0x5f, 0x15, 0xcb, 0x81}, - {0x0, 0xba, 0x69, 0xd3, 0xd2, 0x68, 0xbb, 0x1, 0xb9, 0x3, 0xd0, 0x6a, 0x6b, 0xd1, 0x2, 0xb8}, - {0x0, 0xaa, 0x49, 0xe3, 0x92, 0x38, 0xdb, 0x71, 0x39, 0x93, 0x70, 0xda, 0xab, 0x1, 0xe2, 0x48}, - {0x0, 0x9a, 0x29, 0xb3, 0x52, 0xc8, 0x7b, 0xe1, 0xa4, 0x3e, 0x8d, 0x17, 0xf6, 0x6c, 0xdf, 0x45}, - {0x0, 0x8a, 0x9, 0x83, 0x12, 0x98, 0x1b, 0x91, 0x24, 0xae, 0x2d, 0xa7, 0x36, 0xbc, 0x3f, 0xb5}, - {0x0, 0xfa, 0xe9, 0x13, 0xcf, 0x35, 0x26, 0xdc, 0x83, 0x79, 0x6a, 0x90, 0x4c, 0xb6, 0xa5, 0x5f}, - {0x0, 0xea, 0xc9, 0x23, 0x8f, 0x65, 0x46, 0xac, 0x3, 0xe9, 0xca, 0x20, 0x8c, 0x66, 0x45, 0xaf}, - {0x0, 0xda, 0xa9, 0x73, 0x4f, 0x95, 0xe6, 0x3c, 0x9e, 0x44, 0x37, 0xed, 0xd1, 0xb, 0x78, 0xa2}, - {0x0, 0xca, 0x89, 0x43, 0xf, 0xc5, 0x86, 0x4c, 0x1e, 0xd4, 0x97, 0x5d, 0x11, 0xdb, 0x98, 0x52}, - {0x0, 0x27, 0x4e, 0x69, 0x9c, 0xbb, 0xd2, 0xf5, 0x25, 0x2, 0x6b, 0x4c, 0xb9, 0x9e, 0xf7, 0xd0}, - {0x0, 0x37, 0x6e, 0x59, 0xdc, 0xeb, 0xb2, 0x85, 0xa5, 0x92, 0xcb, 0xfc, 0x79, 0x4e, 0x17, 0x20}, - {0x0, 0x7, 0xe, 0x9, 0x1c, 0x1b, 0x12, 0x15, 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d}, - {0x0, 0x17, 0x2e, 0x39, 0x5c, 0x4b, 0x72, 0x65, 0xb8, 0xaf, 0x96, 0x81, 0xe4, 0xf3, 0xca, 0xdd}, - {0x0, 0x67, 0xce, 0xa9, 0x81, 0xe6, 0x4f, 0x28, 0x1f, 0x78, 0xd1, 0xb6, 0x9e, 0xf9, 0x50, 0x37}, - {0x0, 0x77, 0xee, 0x99, 0xc1, 0xb6, 0x2f, 0x58, 0x9f, 0xe8, 0x71, 0x6, 0x5e, 0x29, 0xb0, 0xc7}, - {0x0, 0x47, 0x8e, 0xc9, 0x1, 0x46, 0x8f, 0xc8, 0x2, 0x45, 0x8c, 0xcb, 0x3, 0x44, 0x8d, 0xca}, - {0x0, 0x57, 0xae, 0xf9, 0x41, 0x16, 0xef, 0xb8, 0x82, 0xd5, 0x2c, 0x7b, 0xc3, 0x94, 0x6d, 0x3a}, - {0x0, 0xa7, 0x53, 0xf4, 0xa6, 0x1, 0xf5, 0x52, 0x51, 0xf6, 0x2, 0xa5, 0xf7, 0x50, 0xa4, 0x3}, - {0x0, 0xb7, 0x73, 0xc4, 0xe6, 0x51, 0x95, 0x22, 0xd1, 0x66, 0xa2, 0x15, 0x37, 0x80, 0x44, 0xf3}, - {0x0, 0x87, 0x13, 0x94, 0x26, 0xa1, 0x35, 0xb2, 0x4c, 0xcb, 0x5f, 0xd8, 0x6a, 0xed, 0x79, 0xfe}, - {0x0, 0x97, 0x33, 0xa4, 0x66, 0xf1, 0x55, 0xc2, 0xcc, 0x5b, 0xff, 0x68, 0xaa, 0x3d, 0x99, 0xe}, - {0x0, 0xe7, 0xd3, 0x34, 0xbb, 0x5c, 0x68, 0x8f, 0x6b, 0x8c, 0xb8, 0x5f, 0xd0, 0x37, 0x3, 0xe4}, - {0x0, 0xf7, 0xf3, 0x4, 0xfb, 0xc, 0x8, 0xff, 0xeb, 0x1c, 0x18, 0xef, 0x10, 0xe7, 0xe3, 0x14}, - {0x0, 0xc7, 0x93, 0x54, 0x3b, 0xfc, 0xa8, 0x6f, 0x76, 0xb1, 0xe5, 0x22, 0x4d, 0x8a, 0xde, 0x19}, - {0x0, 0xd7, 0xb3, 0x64, 0x7b, 0xac, 0xc8, 0x1f, 0xf6, 0x21, 0x45, 0x92, 0x8d, 0x5a, 0x3e, 0xe9}, - {0x0, 0x74, 0xe8, 0x9c, 0xcd, 0xb9, 0x25, 0x51, 0x87, 0xf3, 0x6f, 0x1b, 0x4a, 0x3e, 0xa2, 0xd6}, - {0x0, 0x64, 0xc8, 0xac, 0x8d, 0xe9, 0x45, 0x21, 0x7, 0x63, 0xcf, 0xab, 0x8a, 0xee, 0x42, 0x26}, - {0x0, 0x54, 0xa8, 0xfc, 0x4d, 0x19, 0xe5, 0xb1, 0x9a, 0xce, 0x32, 0x66, 0xd7, 0x83, 0x7f, 0x2b}, - {0x0, 0x44, 0x88, 0xcc, 0xd, 0x49, 0x85, 0xc1, 0x1a, 0x5e, 0x92, 0xd6, 0x17, 0x53, 0x9f, 0xdb}, - {0x0, 0x34, 0x68, 0x5c, 0xd0, 0xe4, 0xb8, 0x8c, 0xbd, 0x89, 0xd5, 0xe1, 0x6d, 0x59, 0x5, 0x31}, - {0x0, 0x24, 0x48, 0x6c, 0x90, 0xb4, 0xd8, 0xfc, 0x3d, 0x19, 0x75, 0x51, 0xad, 0x89, 0xe5, 0xc1}, - {0x0, 0x14, 0x28, 0x3c, 0x50, 0x44, 0x78, 0x6c, 0xa0, 0xb4, 0x88, 0x9c, 0xf0, 0xe4, 0xd8, 0xcc}, - {0x0, 0x4, 0x8, 0xc, 0x10, 0x14, 0x18, 0x1c, 0x20, 0x24, 0x28, 0x2c, 0x30, 0x34, 0x38, 0x3c}, - {0x0, 0xf4, 0xf5, 0x1, 0xf7, 0x3, 0x2, 0xf6, 0xf3, 0x7, 0x6, 0xf2, 0x4, 0xf0, 0xf1, 0x5}, - {0x0, 0xe4, 0xd5, 0x31, 0xb7, 0x53, 0x62, 0x86, 0x73, 0x97, 0xa6, 0x42, 0xc4, 0x20, 0x11, 0xf5}, - {0x0, 0xd4, 0xb5, 0x61, 0x77, 0xa3, 0xc2, 0x16, 0xee, 0x3a, 0x5b, 0x8f, 0x99, 0x4d, 0x2c, 0xf8}, - {0x0, 0xc4, 0x95, 0x51, 0x37, 0xf3, 0xa2, 0x66, 0x6e, 0xaa, 0xfb, 0x3f, 0x59, 0x9d, 0xcc, 0x8}, - {0x0, 0xb4, 0x75, 0xc1, 0xea, 0x5e, 0x9f, 0x2b, 0xc9, 0x7d, 0xbc, 0x8, 0x23, 0x97, 0x56, 0xe2}, - {0x0, 0xa4, 0x55, 0xf1, 0xaa, 0xe, 0xff, 0x5b, 0x49, 0xed, 0x1c, 0xb8, 0xe3, 0x47, 0xb6, 0x12}, - {0x0, 0x94, 0x35, 0xa1, 0x6a, 0xfe, 0x5f, 0xcb, 0xd4, 0x40, 0xe1, 0x75, 0xbe, 0x2a, 0x8b, 0x1f}, - {0x0, 0x84, 0x15, 0x91, 0x2a, 0xae, 0x3f, 0xbb, 0x54, 0xd0, 0x41, 0xc5, 0x7e, 0xfa, 0x6b, 0xef}, - {0x0, 0x69, 0xd2, 0xbb, 0xb9, 0xd0, 0x6b, 0x2, 0x6f, 0x6, 0xbd, 0xd4, 0xd6, 0xbf, 0x4, 0x6d}, - {0x0, 0x79, 0xf2, 0x8b, 0xf9, 0x80, 0xb, 0x72, 0xef, 0x96, 0x1d, 0x64, 0x16, 0x6f, 0xe4, 0x9d}, - {0x0, 0x49, 0x92, 0xdb, 0x39, 0x70, 0xab, 0xe2, 0x72, 0x3b, 0xe0, 0xa9, 0x4b, 0x2, 0xd9, 0x90}, - {0x0, 0x59, 0xb2, 0xeb, 0x79, 0x20, 0xcb, 0x92, 0xf2, 0xab, 0x40, 0x19, 0x8b, 0xd2, 0x39, 0x60}, - {0x0, 0x29, 0x52, 0x7b, 0xa4, 0x8d, 0xf6, 0xdf, 0x55, 0x7c, 0x7, 0x2e, 0xf1, 0xd8, 0xa3, 0x8a}, - {0x0, 0x39, 0x72, 0x4b, 0xe4, 0xdd, 0x96, 0xaf, 0xd5, 0xec, 0xa7, 0x9e, 0x31, 0x8, 0x43, 0x7a}, - {0x0, 0x9, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77}, - {0x0, 0x19, 0x32, 0x2b, 0x64, 0x7d, 0x56, 0x4f, 0xc8, 0xd1, 0xfa, 0xe3, 0xac, 0xb5, 0x9e, 0x87}, - {0x0, 0xe9, 0xcf, 0x26, 0x83, 0x6a, 0x4c, 0xa5, 0x1b, 0xf2, 0xd4, 0x3d, 0x98, 0x71, 0x57, 0xbe}, - {0x0, 0xf9, 0xef, 0x16, 0xc3, 0x3a, 0x2c, 0xd5, 0x9b, 0x62, 0x74, 0x8d, 0x58, 0xa1, 0xb7, 0x4e}, - {0x0, 0xc9, 0x8f, 0x46, 0x3, 0xca, 0x8c, 0x45, 0x6, 0xcf, 0x89, 0x40, 0x5, 0xcc, 0x8a, 0x43}, - {0x0, 0xd9, 0xaf, 0x76, 0x43, 0x9a, 0xec, 0x35, 0x86, 0x5f, 0x29, 0xf0, 0xc5, 0x1c, 0x6a, 0xb3}, - {0x0, 0xa9, 0x4f, 0xe6, 0x9e, 0x37, 0xd1, 0x78, 0x21, 0x88, 0x6e, 0xc7, 0xbf, 0x16, 0xf0, 0x59}, - {0x0, 0xb9, 0x6f, 0xd6, 0xde, 0x67, 0xb1, 0x8, 0xa1, 0x18, 0xce, 0x77, 0x7f, 0xc6, 0x10, 0xa9}, - {0x0, 0x89, 0xf, 0x86, 0x1e, 0x97, 0x11, 0x98, 0x3c, 0xb5, 0x33, 0xba, 0x22, 0xab, 0x2d, 0xa4}, - {0x0, 0x99, 0x2f, 0xb6, 0x5e, 0xc7, 0x71, 0xe8, 0xbc, 0x25, 0x93, 0xa, 0xe2, 0x7b, 0xcd, 0x54}, - {0x0, 0x4e, 0x9c, 0xd2, 0x25, 0x6b, 0xb9, 0xf7, 0x4a, 0x4, 0xd6, 0x98, 0x6f, 0x21, 0xf3, 0xbd}, - {0x0, 0x5e, 0xbc, 0xe2, 0x65, 0x3b, 0xd9, 0x87, 0xca, 0x94, 0x76, 0x28, 0xaf, 0xf1, 0x13, 0x4d}, - {0x0, 0x6e, 0xdc, 0xb2, 0xa5, 0xcb, 0x79, 0x17, 0x57, 0x39, 0x8b, 0xe5, 0xf2, 0x9c, 0x2e, 0x40}, - {0x0, 0x7e, 0xfc, 0x82, 0xe5, 0x9b, 0x19, 0x67, 0xd7, 0xa9, 0x2b, 0x55, 0x32, 0x4c, 0xce, 0xb0}, - {0x0, 0xe, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a}, - {0x0, 0x1e, 0x3c, 0x22, 0x78, 0x66, 0x44, 0x5a, 0xf0, 0xee, 0xcc, 0xd2, 0x88, 0x96, 0xb4, 0xaa}, - {0x0, 0x2e, 0x5c, 0x72, 0xb8, 0x96, 0xe4, 0xca, 0x6d, 0x43, 0x31, 0x1f, 0xd5, 0xfb, 0x89, 0xa7}, - {0x0, 0x3e, 0x7c, 0x42, 0xf8, 0xc6, 0x84, 0xba, 0xed, 0xd3, 0x91, 0xaf, 0x15, 0x2b, 0x69, 0x57}, - {0x0, 0xce, 0x81, 0x4f, 0x1f, 0xd1, 0x9e, 0x50, 0x3e, 0xf0, 0xbf, 0x71, 0x21, 0xef, 0xa0, 0x6e}, - {0x0, 0xde, 0xa1, 0x7f, 0x5f, 0x81, 0xfe, 0x20, 0xbe, 0x60, 0x1f, 0xc1, 0xe1, 0x3f, 0x40, 0x9e}, - {0x0, 0xee, 0xc1, 0x2f, 0x9f, 0x71, 0x5e, 0xb0, 0x23, 0xcd, 0xe2, 0xc, 0xbc, 0x52, 0x7d, 0x93}, - {0x0, 0xfe, 0xe1, 0x1f, 0xdf, 0x21, 0x3e, 0xc0, 0xa3, 0x5d, 0x42, 0xbc, 0x7c, 0x82, 0x9d, 0x63}, - {0x0, 0x8e, 0x1, 0x8f, 0x2, 0x8c, 0x3, 0x8d, 0x4, 0x8a, 0x5, 0x8b, 0x6, 0x88, 0x7, 0x89}, - {0x0, 0x9e, 0x21, 0xbf, 0x42, 0xdc, 0x63, 0xfd, 0x84, 0x1a, 0xa5, 0x3b, 0xc6, 0x58, 0xe7, 0x79}, - {0x0, 0xae, 0x41, 0xef, 0x82, 0x2c, 0xc3, 0x6d, 0x19, 0xb7, 0x58, 0xf6, 0x9b, 0x35, 0xda, 0x74}, - {0x0, 0xbe, 0x61, 0xdf, 0xc2, 0x7c, 0xa3, 0x1d, 0x99, 0x27, 0xf8, 0x46, 0x5b, 0xe5, 0x3a, 0x84}, - {0x0, 0x53, 0xa6, 0xf5, 0x51, 0x2, 0xf7, 0xa4, 0xa2, 0xf1, 0x4, 0x57, 0xf3, 0xa0, 0x55, 0x6}, - {0x0, 0x43, 0x86, 0xc5, 0x11, 0x52, 0x97, 0xd4, 0x22, 0x61, 0xa4, 0xe7, 0x33, 0x70, 0xb5, 0xf6}, - {0x0, 0x73, 0xe6, 0x95, 0xd1, 0xa2, 0x37, 0x44, 0xbf, 0xcc, 0x59, 0x2a, 0x6e, 0x1d, 0x88, 0xfb}, - {0x0, 0x63, 0xc6, 0xa5, 0x91, 0xf2, 0x57, 0x34, 0x3f, 0x5c, 0xf9, 0x9a, 0xae, 0xcd, 0x68, 0xb}, - {0x0, 0x13, 0x26, 0x35, 0x4c, 0x5f, 0x6a, 0x79, 0x98, 0x8b, 0xbe, 0xad, 0xd4, 0xc7, 0xf2, 0xe1}, - {0x0, 0x3, 0x6, 0x5, 0xc, 0xf, 0xa, 0x9, 0x18, 0x1b, 0x1e, 0x1d, 0x14, 0x17, 0x12, 0x11}, - {0x0, 0x33, 0x66, 0x55, 0xcc, 0xff, 0xaa, 0x99, 0x85, 0xb6, 0xe3, 0xd0, 0x49, 0x7a, 0x2f, 0x1c}, - {0x0, 0x23, 0x46, 0x65, 0x8c, 0xaf, 0xca, 0xe9, 0x5, 0x26, 0x43, 0x60, 0x89, 0xaa, 0xcf, 0xec}, - {0x0, 0xd3, 0xbb, 0x68, 0x6b, 0xb8, 0xd0, 0x3, 0xd6, 0x5, 0x6d, 0xbe, 0xbd, 0x6e, 0x6, 0xd5}, - {0x0, 0xc3, 0x9b, 0x58, 0x2b, 0xe8, 0xb0, 0x73, 0x56, 0x95, 0xcd, 0xe, 0x7d, 0xbe, 0xe6, 0x25}, - {0x0, 0xf3, 0xfb, 0x8, 0xeb, 0x18, 0x10, 0xe3, 0xcb, 0x38, 0x30, 0xc3, 0x20, 0xd3, 0xdb, 0x28}, - {0x0, 0xe3, 0xdb, 0x38, 0xab, 0x48, 0x70, 0x93, 0x4b, 0xa8, 0x90, 0x73, 0xe0, 0x3, 0x3b, 0xd8}, - {0x0, 0x93, 0x3b, 0xa8, 0x76, 0xe5, 0x4d, 0xde, 0xec, 0x7f, 0xd7, 0x44, 0x9a, 0x9, 0xa1, 0x32}, - {0x0, 0x83, 0x1b, 0x98, 0x36, 0xb5, 0x2d, 0xae, 0x6c, 0xef, 0x77, 0xf4, 0x5a, 0xd9, 0x41, 0xc2}, - {0x0, 0xb3, 0x7b, 0xc8, 0xf6, 0x45, 0x8d, 0x3e, 0xf1, 0x42, 0x8a, 0x39, 0x7, 0xb4, 0x7c, 0xcf}, - {0x0, 0xa3, 0x5b, 0xf8, 0xb6, 0x15, 0xed, 0x4e, 0x71, 0xd2, 0x2a, 0x89, 0xc7, 0x64, 0x9c, 0x3f}, - {0x0, 0xe8, 0xcd, 0x25, 0x87, 0x6f, 0x4a, 0xa2, 0x13, 0xfb, 0xde, 0x36, 0x94, 0x7c, 0x59, 0xb1}, - {0x0, 0xf8, 0xed, 0x15, 0xc7, 0x3f, 0x2a, 0xd2, 0x93, 0x6b, 0x7e, 0x86, 0x54, 0xac, 0xb9, 0x41}, - {0x0, 0xc8, 0x8d, 0x45, 0x7, 0xcf, 0x8a, 0x42, 0xe, 0xc6, 0x83, 0x4b, 0x9, 0xc1, 0x84, 0x4c}, - {0x0, 0xd8, 0xad, 0x75, 0x47, 0x9f, 0xea, 0x32, 0x8e, 0x56, 0x23, 0xfb, 0xc9, 0x11, 0x64, 0xbc}, - {0x0, 0xa8, 0x4d, 0xe5, 0x9a, 0x32, 0xd7, 0x7f, 0x29, 0x81, 0x64, 0xcc, 0xb3, 0x1b, 0xfe, 0x56}, - {0x0, 0xb8, 0x6d, 0xd5, 0xda, 0x62, 0xb7, 0xf, 0xa9, 0x11, 0xc4, 0x7c, 0x73, 0xcb, 0x1e, 0xa6}, - {0x0, 0x88, 0xd, 0x85, 0x1a, 0x92, 0x17, 0x9f, 0x34, 0xbc, 0x39, 0xb1, 0x2e, 0xa6, 0x23, 0xab}, - {0x0, 0x98, 0x2d, 0xb5, 0x5a, 0xc2, 0x77, 0xef, 0xb4, 0x2c, 0x99, 0x1, 0xee, 0x76, 0xc3, 0x5b}, - {0x0, 0x68, 0xd0, 0xb8, 0xbd, 0xd5, 0x6d, 0x5, 0x67, 0xf, 0xb7, 0xdf, 0xda, 0xb2, 0xa, 0x62}, - {0x0, 0x78, 0xf0, 0x88, 0xfd, 0x85, 0xd, 0x75, 0xe7, 0x9f, 0x17, 0x6f, 0x1a, 0x62, 0xea, 0x92}, - {0x0, 0x48, 0x90, 0xd8, 0x3d, 0x75, 0xad, 0xe5, 0x7a, 0x32, 0xea, 0xa2, 0x47, 0xf, 0xd7, 0x9f}, - {0x0, 0x58, 0xb0, 0xe8, 0x7d, 0x25, 0xcd, 0x95, 0xfa, 0xa2, 0x4a, 0x12, 0x87, 0xdf, 0x37, 0x6f}, - {0x0, 0x28, 0x50, 0x78, 0xa0, 0x88, 0xf0, 0xd8, 0x5d, 0x75, 0xd, 0x25, 0xfd, 0xd5, 0xad, 0x85}, - {0x0, 0x38, 0x70, 0x48, 0xe0, 0xd8, 0x90, 0xa8, 0xdd, 0xe5, 0xad, 0x95, 0x3d, 0x5, 0x4d, 0x75}, - {0x0, 0x8, 0x10, 0x18, 0x20, 0x28, 0x30, 0x38, 0x40, 0x48, 0x50, 0x58, 0x60, 0x68, 0x70, 0x78}, - {0x0, 0x18, 0x30, 0x28, 0x60, 0x78, 0x50, 0x48, 0xc0, 0xd8, 0xf0, 0xe8, 0xa0, 0xb8, 0x90, 0x88}, - {0x0, 0xf5, 0xf7, 0x2, 0xf3, 0x6, 0x4, 0xf1, 0xfb, 0xe, 0xc, 0xf9, 0x8, 0xfd, 0xff, 0xa}, - {0x0, 0xe5, 0xd7, 0x32, 0xb3, 0x56, 0x64, 0x81, 0x7b, 0x9e, 0xac, 0x49, 0xc8, 0x2d, 0x1f, 0xfa}, - {0x0, 0xd5, 0xb7, 0x62, 0x73, 0xa6, 0xc4, 0x11, 0xe6, 0x33, 0x51, 0x84, 0x95, 0x40, 0x22, 0xf7}, - {0x0, 0xc5, 0x97, 0x52, 0x33, 0xf6, 0xa4, 0x61, 0x66, 0xa3, 0xf1, 0x34, 0x55, 0x90, 0xc2, 0x7}, - {0x0, 0xb5, 0x77, 0xc2, 0xee, 0x5b, 0x99, 0x2c, 0xc1, 0x74, 0xb6, 0x3, 0x2f, 0x9a, 0x58, 0xed}, - {0x0, 0xa5, 0x57, 0xf2, 0xae, 0xb, 0xf9, 0x5c, 0x41, 0xe4, 0x16, 0xb3, 0xef, 0x4a, 0xb8, 0x1d}, - {0x0, 0x95, 0x37, 0xa2, 0x6e, 0xfb, 0x59, 0xcc, 0xdc, 0x49, 0xeb, 0x7e, 0xb2, 0x27, 0x85, 0x10}, - {0x0, 0x85, 0x17, 0x92, 0x2e, 0xab, 0x39, 0xbc, 0x5c, 0xd9, 0x4b, 0xce, 0x72, 0xf7, 0x65, 0xe0}, - {0x0, 0x75, 0xea, 0x9f, 0xc9, 0xbc, 0x23, 0x56, 0x8f, 0xfa, 0x65, 0x10, 0x46, 0x33, 0xac, 0xd9}, - {0x0, 0x65, 0xca, 0xaf, 0x89, 0xec, 0x43, 0x26, 0xf, 0x6a, 0xc5, 0xa0, 0x86, 0xe3, 0x4c, 0x29}, - {0x0, 0x55, 0xaa, 0xff, 0x49, 0x1c, 0xe3, 0xb6, 0x92, 0xc7, 0x38, 0x6d, 0xdb, 0x8e, 0x71, 0x24}, - {0x0, 0x45, 0x8a, 0xcf, 0x9, 0x4c, 0x83, 0xc6, 0x12, 0x57, 0x98, 0xdd, 0x1b, 0x5e, 0x91, 0xd4}, - {0x0, 0x35, 0x6a, 0x5f, 0xd4, 0xe1, 0xbe, 0x8b, 0xb5, 0x80, 0xdf, 0xea, 0x61, 0x54, 0xb, 0x3e}, - {0x0, 0x25, 0x4a, 0x6f, 0x94, 0xb1, 0xde, 0xfb, 0x35, 0x10, 0x7f, 0x5a, 0xa1, 0x84, 0xeb, 0xce}, - {0x0, 0x15, 0x2a, 0x3f, 0x54, 0x41, 0x7e, 0x6b, 0xa8, 0xbd, 0x82, 0x97, 0xfc, 0xe9, 0xd6, 0xc3}, - {0x0, 0x5, 0xa, 0xf, 0x14, 0x11, 0x1e, 0x1b, 0x28, 0x2d, 0x22, 0x27, 0x3c, 0x39, 0x36, 0x33}, - {0x0, 0xd2, 0xb9, 0x6b, 0x6f, 0xbd, 0xd6, 0x4, 0xde, 0xc, 0x67, 0xb5, 0xb1, 0x63, 0x8, 0xda}, - {0x0, 0xc2, 0x99, 0x5b, 0x2f, 0xed, 0xb6, 0x74, 0x5e, 0x9c, 0xc7, 0x5, 0x71, 0xb3, 0xe8, 0x2a}, - {0x0, 0xf2, 0xf9, 0xb, 0xef, 0x1d, 0x16, 0xe4, 0xc3, 0x31, 0x3a, 0xc8, 0x2c, 0xde, 0xd5, 0x27}, - {0x0, 0xe2, 0xd9, 0x3b, 0xaf, 0x4d, 0x76, 0x94, 0x43, 0xa1, 0x9a, 0x78, 0xec, 0xe, 0x35, 0xd7}, - {0x0, 0x92, 0x39, 0xab, 0x72, 0xe0, 0x4b, 0xd9, 0xe4, 0x76, 0xdd, 0x4f, 0x96, 0x4, 0xaf, 0x3d}, - {0x0, 0x82, 0x19, 0x9b, 0x32, 0xb0, 0x2b, 0xa9, 0x64, 0xe6, 0x7d, 0xff, 0x56, 0xd4, 0x4f, 0xcd}, - {0x0, 0xb2, 0x79, 0xcb, 0xf2, 0x40, 0x8b, 0x39, 0xf9, 0x4b, 0x80, 0x32, 0xb, 0xb9, 0x72, 0xc0}, - {0x0, 0xa2, 0x59, 0xfb, 0xb2, 0x10, 0xeb, 0x49, 0x79, 0xdb, 0x20, 0x82, 0xcb, 0x69, 0x92, 0x30}, - {0x0, 0x52, 0xa4, 0xf6, 0x55, 0x7, 0xf1, 0xa3, 0xaa, 0xf8, 0xe, 0x5c, 0xff, 0xad, 0x5b, 0x9}, - {0x0, 0x42, 0x84, 0xc6, 0x15, 0x57, 0x91, 0xd3, 0x2a, 0x68, 0xae, 0xec, 0x3f, 0x7d, 0xbb, 0xf9}, - {0x0, 0x72, 0xe4, 0x96, 0xd5, 0xa7, 0x31, 0x43, 0xb7, 0xc5, 0x53, 0x21, 0x62, 0x10, 0x86, 0xf4}, - {0x0, 0x62, 0xc4, 0xa6, 0x95, 0xf7, 0x51, 0x33, 0x37, 0x55, 0xf3, 0x91, 0xa2, 0xc0, 0x66, 0x4}, - {0x0, 0x12, 0x24, 0x36, 0x48, 0x5a, 0x6c, 0x7e, 0x90, 0x82, 0xb4, 0xa6, 0xd8, 0xca, 0xfc, 0xee}, - {0x0, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e}, - {0x0, 0x32, 0x64, 0x56, 0xc8, 0xfa, 0xac, 0x9e, 0x8d, 0xbf, 0xe9, 0xdb, 0x45, 0x77, 0x21, 0x13}, - {0x0, 0x22, 0x44, 0x66, 0x88, 0xaa, 0xcc, 0xee, 0xd, 0x2f, 0x49, 0x6b, 0x85, 0xa7, 0xc1, 0xe3}, - {0x0, 0xcf, 0x83, 0x4c, 0x1b, 0xd4, 0x98, 0x57, 0x36, 0xf9, 0xb5, 0x7a, 0x2d, 0xe2, 0xae, 0x61}, - {0x0, 0xdf, 0xa3, 0x7c, 0x5b, 0x84, 0xf8, 0x27, 0xb6, 0x69, 0x15, 0xca, 0xed, 0x32, 0x4e, 0x91}, - {0x0, 0xef, 0xc3, 0x2c, 0x9b, 0x74, 0x58, 0xb7, 0x2b, 0xc4, 0xe8, 0x7, 0xb0, 0x5f, 0x73, 0x9c}, - {0x0, 0xff, 0xe3, 0x1c, 0xdb, 0x24, 0x38, 0xc7, 0xab, 0x54, 0x48, 0xb7, 0x70, 0x8f, 0x93, 0x6c}, - {0x0, 0x8f, 0x3, 0x8c, 0x6, 0x89, 0x5, 0x8a, 0xc, 0x83, 0xf, 0x80, 0xa, 0x85, 0x9, 0x86}, - {0x0, 0x9f, 0x23, 0xbc, 0x46, 0xd9, 0x65, 0xfa, 0x8c, 0x13, 0xaf, 0x30, 0xca, 0x55, 0xe9, 0x76}, - {0x0, 0xaf, 0x43, 0xec, 0x86, 0x29, 0xc5, 0x6a, 0x11, 0xbe, 0x52, 0xfd, 0x97, 0x38, 0xd4, 0x7b}, - {0x0, 0xbf, 0x63, 0xdc, 0xc6, 0x79, 0xa5, 0x1a, 0x91, 0x2e, 0xf2, 0x4d, 0x57, 0xe8, 0x34, 0x8b}, - {0x0, 0x4f, 0x9e, 0xd1, 0x21, 0x6e, 0xbf, 0xf0, 0x42, 0xd, 0xdc, 0x93, 0x63, 0x2c, 0xfd, 0xb2}, - {0x0, 0x5f, 0xbe, 0xe1, 0x61, 0x3e, 0xdf, 0x80, 0xc2, 0x9d, 0x7c, 0x23, 0xa3, 0xfc, 0x1d, 0x42}, - {0x0, 0x6f, 0xde, 0xb1, 0xa1, 0xce, 0x7f, 0x10, 0x5f, 0x30, 0x81, 0xee, 0xfe, 0x91, 0x20, 0x4f}, - {0x0, 0x7f, 0xfe, 0x81, 0xe1, 0x9e, 0x1f, 0x60, 0xdf, 0xa0, 0x21, 0x5e, 0x3e, 0x41, 0xc0, 0xbf}, - {0x0, 0xf, 0x1e, 0x11, 0x3c, 0x33, 0x22, 0x2d, 0x78, 0x77, 0x66, 0x69, 0x44, 0x4b, 0x5a, 0x55}, - {0x0, 0x1f, 0x3e, 0x21, 0x7c, 0x63, 0x42, 0x5d, 0xf8, 0xe7, 0xc6, 0xd9, 0x84, 0x9b, 0xba, 0xa5}, - {0x0, 0x2f, 0x5e, 0x71, 0xbc, 0x93, 0xe2, 0xcd, 0x65, 0x4a, 0x3b, 0x14, 0xd9, 0xf6, 0x87, 0xa8}, - {0x0, 0x3f, 0x7e, 0x41, 0xfc, 0xc3, 0x82, 0xbd, 0xe5, 0xda, 0x9b, 0xa4, 0x19, 0x26, 0x67, 0x58}, - {0x0, 0x9c, 0x25, 0xb9, 0x4a, 0xd6, 0x6f, 0xf3, 0x94, 0x8, 0xb1, 0x2d, 0xde, 0x42, 0xfb, 0x67}, - {0x0, 0x8c, 0x5, 0x89, 0xa, 0x86, 0xf, 0x83, 0x14, 0x98, 0x11, 0x9d, 0x1e, 0x92, 0x1b, 0x97}, - {0x0, 0xbc, 0x65, 0xd9, 0xca, 0x76, 0xaf, 0x13, 0x89, 0x35, 0xec, 0x50, 0x43, 0xff, 0x26, 0x9a}, - {0x0, 0xac, 0x45, 0xe9, 0x8a, 0x26, 0xcf, 0x63, 0x9, 0xa5, 0x4c, 0xe0, 0x83, 0x2f, 0xc6, 0x6a}, - {0x0, 0xdc, 0xa5, 0x79, 0x57, 0x8b, 0xf2, 0x2e, 0xae, 0x72, 0xb, 0xd7, 0xf9, 0x25, 0x5c, 0x80}, - {0x0, 0xcc, 0x85, 0x49, 0x17, 0xdb, 0x92, 0x5e, 0x2e, 0xe2, 0xab, 0x67, 0x39, 0xf5, 0xbc, 0x70}, - {0x0, 0xfc, 0xe5, 0x19, 0xd7, 0x2b, 0x32, 0xce, 0xb3, 0x4f, 0x56, 0xaa, 0x64, 0x98, 0x81, 0x7d}, - {0x0, 0xec, 0xc5, 0x29, 0x97, 0x7b, 0x52, 0xbe, 0x33, 0xdf, 0xf6, 0x1a, 0xa4, 0x48, 0x61, 0x8d}, - {0x0, 0x1c, 0x38, 0x24, 0x70, 0x6c, 0x48, 0x54, 0xe0, 0xfc, 0xd8, 0xc4, 0x90, 0x8c, 0xa8, 0xb4}, - {0x0, 0xc, 0x18, 0x14, 0x30, 0x3c, 0x28, 0x24, 0x60, 0x6c, 0x78, 0x74, 0x50, 0x5c, 0x48, 0x44}, - {0x0, 0x3c, 0x78, 0x44, 0xf0, 0xcc, 0x88, 0xb4, 0xfd, 0xc1, 0x85, 0xb9, 0xd, 0x31, 0x75, 0x49}, - {0x0, 0x2c, 0x58, 0x74, 0xb0, 0x9c, 0xe8, 0xc4, 0x7d, 0x51, 0x25, 0x9, 0xcd, 0xe1, 0x95, 0xb9}, - {0x0, 0x5c, 0xb8, 0xe4, 0x6d, 0x31, 0xd5, 0x89, 0xda, 0x86, 0x62, 0x3e, 0xb7, 0xeb, 0xf, 0x53}, - {0x0, 0x4c, 0x98, 0xd4, 0x2d, 0x61, 0xb5, 0xf9, 0x5a, 0x16, 0xc2, 0x8e, 0x77, 0x3b, 0xef, 0xa3}, - {0x0, 0x7c, 0xf8, 0x84, 0xed, 0x91, 0x15, 0x69, 0xc7, 0xbb, 0x3f, 0x43, 0x2a, 0x56, 0xd2, 0xae}, - {0x0, 0x6c, 0xd8, 0xb4, 0xad, 0xc1, 0x75, 0x19, 0x47, 0x2b, 0x9f, 0xf3, 0xea, 0x86, 0x32, 0x5e}, - {0x0, 0x81, 0x1f, 0x9e, 0x3e, 0xbf, 0x21, 0xa0, 0x7c, 0xfd, 0x63, 0xe2, 0x42, 0xc3, 0x5d, 0xdc}, - {0x0, 0x91, 0x3f, 0xae, 0x7e, 0xef, 0x41, 0xd0, 0xfc, 0x6d, 0xc3, 0x52, 0x82, 0x13, 0xbd, 0x2c}, - {0x0, 0xa1, 0x5f, 0xfe, 0xbe, 0x1f, 0xe1, 0x40, 0x61, 0xc0, 0x3e, 0x9f, 0xdf, 0x7e, 0x80, 0x21}, - {0x0, 0xb1, 0x7f, 0xce, 0xfe, 0x4f, 0x81, 0x30, 0xe1, 0x50, 0x9e, 0x2f, 0x1f, 0xae, 0x60, 0xd1}, - {0x0, 0xc1, 0x9f, 0x5e, 0x23, 0xe2, 0xbc, 0x7d, 0x46, 0x87, 0xd9, 0x18, 0x65, 0xa4, 0xfa, 0x3b}, - {0x0, 0xd1, 0xbf, 0x6e, 0x63, 0xb2, 0xdc, 0xd, 0xc6, 0x17, 0x79, 0xa8, 0xa5, 0x74, 0x1a, 0xcb}, - {0x0, 0xe1, 0xdf, 0x3e, 0xa3, 0x42, 0x7c, 0x9d, 0x5b, 0xba, 0x84, 0x65, 0xf8, 0x19, 0x27, 0xc6}, - {0x0, 0xf1, 0xff, 0xe, 0xe3, 0x12, 0x1c, 0xed, 0xdb, 0x2a, 0x24, 0xd5, 0x38, 0xc9, 0xc7, 0x36}, - {0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf}, - {0x0, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff}, - {0x0, 0x21, 0x42, 0x63, 0x84, 0xa5, 0xc6, 0xe7, 0x15, 0x34, 0x57, 0x76, 0x91, 0xb0, 0xd3, 0xf2}, - {0x0, 0x31, 0x62, 0x53, 0xc4, 0xf5, 0xa6, 0x97, 0x95, 0xa4, 0xf7, 0xc6, 0x51, 0x60, 0x33, 0x2}, - {0x0, 0x41, 0x82, 0xc3, 0x19, 0x58, 0x9b, 0xda, 0x32, 0x73, 0xb0, 0xf1, 0x2b, 0x6a, 0xa9, 0xe8}, - {0x0, 0x51, 0xa2, 0xf3, 0x59, 0x8, 0xfb, 0xaa, 0xb2, 0xe3, 0x10, 0x41, 0xeb, 0xba, 0x49, 0x18}, - {0x0, 0x61, 0xc2, 0xa3, 0x99, 0xf8, 0x5b, 0x3a, 0x2f, 0x4e, 0xed, 0x8c, 0xb6, 0xd7, 0x74, 0x15}, - {0x0, 0x71, 0xe2, 0x93, 0xd9, 0xa8, 0x3b, 0x4a, 0xaf, 0xde, 0x4d, 0x3c, 0x76, 0x7, 0x94, 0xe5}, - {0x0, 0xa6, 0x51, 0xf7, 0xa2, 0x4, 0xf3, 0x55, 0x59, 0xff, 0x8, 0xae, 0xfb, 0x5d, 0xaa, 0xc}, - {0x0, 0xb6, 0x71, 0xc7, 0xe2, 0x54, 0x93, 0x25, 0xd9, 0x6f, 0xa8, 0x1e, 0x3b, 0x8d, 0x4a, 0xfc}, - {0x0, 0x86, 0x11, 0x97, 0x22, 0xa4, 0x33, 0xb5, 0x44, 0xc2, 0x55, 0xd3, 0x66, 0xe0, 0x77, 0xf1}, - {0x0, 0x96, 0x31, 0xa7, 0x62, 0xf4, 0x53, 0xc5, 0xc4, 0x52, 0xf5, 0x63, 0xa6, 0x30, 0x97, 0x1}, - {0x0, 0xe6, 0xd1, 0x37, 0xbf, 0x59, 0x6e, 0x88, 0x63, 0x85, 0xb2, 0x54, 0xdc, 0x3a, 0xd, 0xeb}, - {0x0, 0xf6, 0xf1, 0x7, 0xff, 0x9, 0xe, 0xf8, 0xe3, 0x15, 0x12, 0xe4, 0x1c, 0xea, 0xed, 0x1b}, - {0x0, 0xc6, 0x91, 0x57, 0x3f, 0xf9, 0xae, 0x68, 0x7e, 0xb8, 0xef, 0x29, 0x41, 0x87, 0xd0, 0x16}, - {0x0, 0xd6, 0xb1, 0x67, 0x7f, 0xa9, 0xce, 0x18, 0xfe, 0x28, 0x4f, 0x99, 0x81, 0x57, 0x30, 0xe6}, - {0x0, 0x26, 0x4c, 0x6a, 0x98, 0xbe, 0xd4, 0xf2, 0x2d, 0xb, 0x61, 0x47, 0xb5, 0x93, 0xf9, 0xdf}, - {0x0, 0x36, 0x6c, 0x5a, 0xd8, 0xee, 0xb4, 0x82, 0xad, 0x9b, 0xc1, 0xf7, 0x75, 0x43, 0x19, 0x2f}, - {0x0, 0x6, 0xc, 0xa, 0x18, 0x1e, 0x14, 0x12, 0x30, 0x36, 0x3c, 0x3a, 0x28, 0x2e, 0x24, 0x22}, - {0x0, 0x16, 0x2c, 0x3a, 0x58, 0x4e, 0x74, 0x62, 0xb0, 0xa6, 0x9c, 0x8a, 0xe8, 0xfe, 0xc4, 0xd2}, - {0x0, 0x66, 0xcc, 0xaa, 0x85, 0xe3, 0x49, 0x2f, 0x17, 0x71, 0xdb, 0xbd, 0x92, 0xf4, 0x5e, 0x38}, - {0x0, 0x76, 0xec, 0x9a, 0xc5, 0xb3, 0x29, 0x5f, 0x97, 0xe1, 0x7b, 0xd, 0x52, 0x24, 0xbe, 0xc8}, - {0x0, 0x46, 0x8c, 0xca, 0x5, 0x43, 0x89, 0xcf, 0xa, 0x4c, 0x86, 0xc0, 0xf, 0x49, 0x83, 0xc5}, - {0x0, 0x56, 0xac, 0xfa, 0x45, 0x13, 0xe9, 0xbf, 0x8a, 0xdc, 0x26, 0x70, 0xcf, 0x99, 0x63, 0x35}, - {0x0, 0xbb, 0x6b, 0xd0, 0xd6, 0x6d, 0xbd, 0x6, 0xb1, 0xa, 0xda, 0x61, 0x67, 0xdc, 0xc, 0xb7}, - {0x0, 0xab, 0x4b, 0xe0, 0x96, 0x3d, 0xdd, 0x76, 0x31, 0x9a, 0x7a, 0xd1, 0xa7, 0xc, 0xec, 0x47}, - {0x0, 0x9b, 0x2b, 0xb0, 0x56, 0xcd, 0x7d, 0xe6, 0xac, 0x37, 0x87, 0x1c, 0xfa, 0x61, 0xd1, 0x4a}, - {0x0, 0x8b, 0xb, 0x80, 0x16, 0x9d, 0x1d, 0x96, 0x2c, 0xa7, 0x27, 0xac, 0x3a, 0xb1, 0x31, 0xba}, - {0x0, 0xfb, 0xeb, 0x10, 0xcb, 0x30, 0x20, 0xdb, 0x8b, 0x70, 0x60, 0x9b, 0x40, 0xbb, 0xab, 0x50}, - {0x0, 0xeb, 0xcb, 0x20, 0x8b, 0x60, 0x40, 0xab, 0xb, 0xe0, 0xc0, 0x2b, 0x80, 0x6b, 0x4b, 0xa0}, - {0x0, 0xdb, 0xab, 0x70, 0x4b, 0x90, 0xe0, 0x3b, 0x96, 0x4d, 0x3d, 0xe6, 0xdd, 0x6, 0x76, 0xad}, - {0x0, 0xcb, 0x8b, 0x40, 0xb, 0xc0, 0x80, 0x4b, 0x16, 0xdd, 0x9d, 0x56, 0x1d, 0xd6, 0x96, 0x5d}, - {0x0, 0x3b, 0x76, 0x4d, 0xec, 0xd7, 0x9a, 0xa1, 0xc5, 0xfe, 0xb3, 0x88, 0x29, 0x12, 0x5f, 0x64}, - {0x0, 0x2b, 0x56, 0x7d, 0xac, 0x87, 0xfa, 0xd1, 0x45, 0x6e, 0x13, 0x38, 0xe9, 0xc2, 0xbf, 0x94}, - {0x0, 0x1b, 0x36, 0x2d, 0x6c, 0x77, 0x5a, 0x41, 0xd8, 0xc3, 0xee, 0xf5, 0xb4, 0xaf, 0x82, 0x99}, - {0x0, 0xb, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69}, - {0x0, 0x7b, 0xf6, 0x8d, 0xf1, 0x8a, 0x7, 0x7c, 0xff, 0x84, 0x9, 0x72, 0xe, 0x75, 0xf8, 0x83}, - {0x0, 0x6b, 0xd6, 0xbd, 0xb1, 0xda, 0x67, 0xc, 0x7f, 0x14, 0xa9, 0xc2, 0xce, 0xa5, 0x18, 0x73}, - {0x0, 0x5b, 0xb6, 0xed, 0x71, 0x2a, 0xc7, 0x9c, 0xe2, 0xb9, 0x54, 0xf, 0x93, 0xc8, 0x25, 0x7e}, - {0x0, 0x4b, 0x96, 0xdd, 0x31, 0x7a, 0xa7, 0xec, 0x62, 0x29, 0xf4, 0xbf, 0x53, 0x18, 0xc5, 0x8e}} - -// galMultiply multiplies to elements of the field. -// Uses lookup table ~40% faster -func galMultiply(a, b byte) byte { - return mulTable[a][b] -} - -// Original function: -/* -// galMultiply multiplies to elements of the field. -func galMultiply(a, b byte) byte { - if a == 0 || b == 0 { - return 0 - } - logA := int(logTable[a]) - logB := int(logTable[b]) - return expTable[logA+logB] -} -*/ - -// galDivide is inverse of galMultiply. -func galDivide(a, b byte) byte { - if a == 0 { - return 0 - } - if b == 0 { - panic("Argument 'divisor' is 0") - } - logA := int(logTable[a]) - logB := int(logTable[b]) - logResult := logA - logB - if logResult < 0 { - logResult += 255 - } - return expTable[logResult] -} - -// Computes a**n. -// -// The result will be the same as multiplying a times itself n times. -func galExp(a byte, n int) byte { - if n == 0 { - return 1 - } - if a == 0 { - return 0 - } - - logA := logTable[a] - logResult := int(logA) * n - for logResult >= 255 { - logResult -= 255 - } - return expTable[logResult] -} - -func genAvx2Matrix(matrixRows [][]byte, inputs, inIdx, outputs int, dst []byte) []byte { - if !avx2CodeGen { - panic("codegen not enabled") - } - total := inputs * outputs - - // Duplicated in+out - wantBytes := total * 32 * 2 - if cap(dst) < wantBytes { - dst = make([]byte, wantBytes) - } else { - dst = dst[:wantBytes] - } - for i, row := range matrixRows[:outputs] { - for j, idx := range row[inIdx : inIdx+inputs] { - dstIdx := (j*outputs + i) * 64 - dstPart := dst[dstIdx:] - dstPart = dstPart[:64] - lo := mulTableLow[idx][:] - hi := mulTableHigh[idx][:] - copy(dstPart[:16], lo) - copy(dstPart[16:32], lo) - copy(dstPart[32:48], hi) - copy(dstPart[48:64], hi) - } - } - return dst -} - -// xor slices writing to out. -func sliceXorGo(in, out []byte, _ *options) { - for len(out) >= 32 { - inS := in[:32] - v0 := binary.LittleEndian.Uint64(out[:8]) ^ binary.LittleEndian.Uint64(inS[:8]) - v1 := binary.LittleEndian.Uint64(out[8:16]) ^ binary.LittleEndian.Uint64(inS[8:16]) - v2 := binary.LittleEndian.Uint64(out[16:24]) ^ binary.LittleEndian.Uint64(inS[16:24]) - v3 := binary.LittleEndian.Uint64(out[24:32]) ^ binary.LittleEndian.Uint64(inS[24:32]) - binary.LittleEndian.PutUint64(out[:8], v0) - binary.LittleEndian.PutUint64(out[8:16], v1) - binary.LittleEndian.PutUint64(out[16:24], v2) - binary.LittleEndian.PutUint64(out[24:32], v3) - out = out[32:] - in = in[32:] - } - out = out[:len(in)] - for n, input := range in { - out[n] ^= input - } -} diff --git a/vendor/github.com/klauspost/reedsolomon/galoisAvx512_amd64.go b/vendor/github.com/klauspost/reedsolomon/galoisAvx512_amd64.go deleted file mode 100644 index 9a249d2..0000000 --- a/vendor/github.com/klauspost/reedsolomon/galoisAvx512_amd64.go +++ /dev/null @@ -1,339 +0,0 @@ -//go:build !noasm && !appengine && !gccgo -// +build !noasm,!appengine,!gccgo - -// Copyright 2015, Klaus Post, see LICENSE for details. -// Copyright 2019, Minio, Inc. - -package reedsolomon - -import ( - "sync" -) - -//go:noescape -func _galMulAVX512Parallel81(in, out [][]byte, matrix *[matrixSize81]byte, addTo bool) - -//go:noescape -func _galMulAVX512Parallel82(in, out [][]byte, matrix *[matrixSize82]byte, addTo bool) - -//go:noescape -func _galMulAVX512Parallel84(in, out [][]byte, matrix *[matrixSize84]byte, addTo bool) - -const ( - dimIn = 8 // Number of input rows processed simultaneously - dimOut81 = 1 // Number of output rows processed simultaneously for x1 routine - dimOut82 = 2 // Number of output rows processed simultaneously for x2 routine - dimOut84 = 4 // Number of output rows processed simultaneously for x4 routine - matrixSize81 = (16 + 16) * dimIn * dimOut81 // Dimension of slice of matrix coefficient passed into x1 routine - matrixSize82 = (16 + 16) * dimIn * dimOut82 // Dimension of slice of matrix coefficient passed into x2 routine - matrixSize84 = (16 + 16) * dimIn * dimOut84 // Dimension of slice of matrix coefficient passed into x4 routine -) - -// Construct block of matrix coefficients for single output row in parallel -func setupMatrix81(matrixRows [][]byte, inputOffset, outputOffset int, matrix *[matrixSize81]byte) { - offset := 0 - for c := inputOffset; c < inputOffset+dimIn; c++ { - for iRow := outputOffset; iRow < outputOffset+dimOut81; iRow++ { - if c < len(matrixRows[iRow]) { - coeff := matrixRows[iRow][c] - copy(matrix[offset*32:], mulTableLow[coeff][:]) - copy(matrix[offset*32+16:], mulTableHigh[coeff][:]) - } else { - // coefficients not used for this input shard (so null out) - v := matrix[offset*32 : offset*32+32] - for i := range v { - v[i] = 0 - } - } - offset += dimIn - if offset >= dimIn*dimOut81 { - offset -= dimIn*dimOut81 - 1 - } - } - } -} - -// Construct block of matrix coefficients for 2 output rows in parallel -func setupMatrix82(matrixRows [][]byte, inputOffset, outputOffset int, matrix *[matrixSize82]byte) { - offset := 0 - for c := inputOffset; c < inputOffset+dimIn; c++ { - for iRow := outputOffset; iRow < outputOffset+dimOut82; iRow++ { - if c < len(matrixRows[iRow]) { - coeff := matrixRows[iRow][c] - copy(matrix[offset*32:], mulTableLow[coeff][:]) - copy(matrix[offset*32+16:], mulTableHigh[coeff][:]) - } else { - // coefficients not used for this input shard (so null out) - v := matrix[offset*32 : offset*32+32] - for i := range v { - v[i] = 0 - } - } - offset += dimIn - if offset >= dimIn*dimOut82 { - offset -= dimIn*dimOut82 - 1 - } - } - } -} - -// Construct block of matrix coefficients for 4 output rows in parallel -func setupMatrix84(matrixRows [][]byte, inputOffset, outputOffset int, matrix *[matrixSize84]byte) { - offset := 0 - for c := inputOffset; c < inputOffset+dimIn; c++ { - for iRow := outputOffset; iRow < outputOffset+dimOut84; iRow++ { - if c < len(matrixRows[iRow]) { - coeff := matrixRows[iRow][c] - copy(matrix[offset*32:], mulTableLow[coeff][:]) - copy(matrix[offset*32+16:], mulTableHigh[coeff][:]) - } else { - // coefficients not used for this input shard (so null out) - v := matrix[offset*32 : offset*32+32] - for i := range v { - v[i] = 0 - } - } - offset += dimIn - if offset >= dimIn*dimOut84 { - offset -= dimIn*dimOut84 - 1 - } - } - } -} - -// Invoke AVX512 routine for single output row in parallel -func galMulAVX512Parallel81(in, out [][]byte, matrixRows [][]byte, inputOffset, outputOffset, start, stop int, matrix81 *[matrixSize81]byte) { - done := stop - start - if done <= 0 || len(in) == 0 || len(out) == 0 { - return - } - - inputEnd := inputOffset + dimIn - if inputEnd > len(in) { - inputEnd = len(in) - } - outputEnd := outputOffset + dimOut81 - if outputEnd > len(out) { - outputEnd = len(out) - } - - // We know the max size, alloc temp array. - var inTmp [dimIn][]byte - for i, v := range in[inputOffset:inputEnd] { - inTmp[i] = v[start:stop] - } - var outTmp [dimOut81][]byte - for i, v := range out[outputOffset:outputEnd] { - outTmp[i] = v[start:stop] - } - - addTo := inputOffset != 0 // Except for the first input column, add to previous results - _galMulAVX512Parallel81(inTmp[:inputEnd-inputOffset], outTmp[:outputEnd-outputOffset], matrix81, addTo) - - done = start + ((done >> 6) << 6) - if done < stop { - galMulAVX512LastInput(inputOffset, inputEnd, outputOffset, outputEnd, matrixRows, done, stop, out, in) - } -} - -// Invoke AVX512 routine for 2 output rows in parallel -func galMulAVX512Parallel82(in, out [][]byte, matrixRows [][]byte, inputOffset, outputOffset, start, stop int, matrix82 *[matrixSize82]byte) { - done := stop - start - if done <= 0 || len(in) == 0 || len(out) == 0 { - return - } - - inputEnd := inputOffset + dimIn - if inputEnd > len(in) { - inputEnd = len(in) - } - outputEnd := outputOffset + dimOut82 - if outputEnd > len(out) { - outputEnd = len(out) - } - - // We know the max size, alloc temp array. - var inTmp [dimIn][]byte - for i, v := range in[inputOffset:inputEnd] { - inTmp[i] = v[start:stop] - } - var outTmp [dimOut82][]byte - for i, v := range out[outputOffset:outputEnd] { - outTmp[i] = v[start:stop] - } - - addTo := inputOffset != 0 // Except for the first input column, add to previous results - _galMulAVX512Parallel82(inTmp[:inputEnd-inputOffset], outTmp[:outputEnd-outputOffset], matrix82, addTo) - - done = start + ((done >> 6) << 6) - if done < stop { - galMulAVX512LastInput(inputOffset, inputEnd, outputOffset, outputEnd, matrixRows, done, stop, out, in) - } -} - -// Invoke AVX512 routine for 4 output rows in parallel -func galMulAVX512Parallel84(in, out [][]byte, matrixRows [][]byte, inputOffset, outputOffset, start, stop int, matrix84 *[matrixSize84]byte) { - done := stop - start - if done <= 0 || len(in) == 0 || len(out) == 0 { - return - } - - inputEnd := inputOffset + dimIn - if inputEnd > len(in) { - inputEnd = len(in) - } - outputEnd := outputOffset + dimOut84 - if outputEnd > len(out) { - outputEnd = len(out) - } - - // We know the max size, alloc temp array. - var inTmp [dimIn][]byte - for i, v := range in[inputOffset:inputEnd] { - inTmp[i] = v[start:stop] - } - var outTmp [dimOut84][]byte - for i, v := range out[outputOffset:outputEnd] { - outTmp[i] = v[start:stop] - } - - addTo := inputOffset != 0 // Except for the first input column, add to previous results - _galMulAVX512Parallel84(inTmp[:inputEnd-inputOffset], outTmp[:outputEnd-outputOffset], matrix84, addTo) - - done = start + ((done >> 6) << 6) - if done < stop { - galMulAVX512LastInput(inputOffset, inputEnd, outputOffset, outputEnd, matrixRows, done, stop, out, in) - } -} - -func galMulAVX512LastInput(inputOffset int, inputEnd int, outputOffset int, outputEnd int, matrixRows [][]byte, done int, stop int, out [][]byte, in [][]byte) { - for c := inputOffset; c < inputEnd; c++ { - for iRow := outputOffset; iRow < outputEnd; iRow++ { - if c < len(matrixRows[iRow]) { - mt := mulTable[matrixRows[iRow][c]][:256] - for i := done; i < stop; i++ { - if c == 0 { // only set value for first input column - out[iRow][i] = mt[in[c][i]] - } else { // and add for all others - out[iRow][i] ^= mt[in[c][i]] - } - } - } - } - } -} - -// Perform the same as codeSomeShards, but taking advantage of -// AVX512 parallelism for up to 4x faster execution as compared to AVX2 -func (r *reedSolomon) codeSomeShardsAvx512(matrixRows, inputs, outputs [][]byte, byteCount int) { - // Process using no goroutines - outputCount := len(outputs) - start, end := 0, r.o.perRound - if end > byteCount { - end = byteCount - } - for start < byteCount { - matrix84 := [matrixSize84]byte{} - matrix82 := [matrixSize82]byte{} - matrix81 := [matrixSize81]byte{} - - outputRow := 0 - // First process (multiple) batches of 4 output rows in parallel - if outputRow+dimOut84 <= outputCount { - for ; outputRow+dimOut84 <= outputCount; outputRow += dimOut84 { - for inputRow := 0; inputRow < len(inputs); inputRow += dimIn { - setupMatrix84(matrixRows, inputRow, outputRow, &matrix84) - galMulAVX512Parallel84(inputs, outputs, matrixRows, inputRow, outputRow, start, end, &matrix84) - } - } - } - // Then process a (single) batch of 2 output rows in parallel - if outputRow+dimOut82 <= outputCount { - for inputRow := 0; inputRow < len(inputs); inputRow += dimIn { - setupMatrix82(matrixRows, inputRow, outputRow, &matrix82) - galMulAVX512Parallel82(inputs, outputs, matrixRows, inputRow, outputRow, start, end, &matrix82) - } - outputRow += dimOut82 - } - // Lastly, we may have a single output row left (for uneven parity) - if outputRow < outputCount { - for inputRow := 0; inputRow < len(inputs); inputRow += dimIn { - setupMatrix81(matrixRows, inputRow, outputRow, &matrix81) - galMulAVX512Parallel81(inputs, outputs, matrixRows, inputRow, outputRow, start, end, &matrix81) - } - } - - start = end - end += r.o.perRound - if end > byteCount { - end = byteCount - } - } -} - -// Perform the same as codeSomeShards, but taking advantage of -// AVX512 parallelism for up to 4x faster execution as compared to AVX2 -func (r *reedSolomon) codeSomeShardsAvx512P(matrixRows, inputs, outputs [][]byte, byteCount int) { - outputCount := len(outputs) - var wg sync.WaitGroup - do := byteCount / r.o.maxGoroutines - if do < r.o.minSplitSize { - do = r.o.minSplitSize - } - // Make sizes divisible by 64 - do = (do + 63) & (^63) - start := 0 - for start < byteCount { - if start+do > byteCount { - do = byteCount - start - } - wg.Add(1) - go func(grStart, grStop int) { - start, stop := grStart, grStart+r.o.perRound - if stop > grStop { - stop = grStop - } - // Loop for each round. - matrix84 := [matrixSize84]byte{} - matrix82 := [matrixSize82]byte{} - matrix81 := [matrixSize81]byte{} - for start < grStop { - outputRow := 0 - // First process (multiple) batches of 4 output rows in parallel - if outputRow+dimOut84 <= outputCount { - // 1K matrix buffer - for ; outputRow+dimOut84 <= outputCount; outputRow += dimOut84 { - for inputRow := 0; inputRow < len(inputs); inputRow += dimIn { - setupMatrix84(matrixRows, inputRow, outputRow, &matrix84) - galMulAVX512Parallel84(inputs, outputs, matrixRows, inputRow, outputRow, start, stop, &matrix84) - } - } - } - // Then process a (single) batch of 2 output rows in parallel - if outputRow+dimOut82 <= outputCount { - // 512B matrix buffer - for inputRow := 0; inputRow < len(inputs); inputRow += dimIn { - setupMatrix82(matrixRows, inputRow, outputRow, &matrix82) - galMulAVX512Parallel82(inputs, outputs, matrixRows, inputRow, outputRow, start, stop, &matrix82) - } - outputRow += dimOut82 - } - // Lastly, we may have a single output row left (for uneven parity) - if outputRow < outputCount { - for inputRow := 0; inputRow < len(inputs); inputRow += dimIn { - setupMatrix81(matrixRows, inputRow, outputRow, &matrix81) - galMulAVX512Parallel81(inputs, outputs, matrixRows, inputRow, outputRow, start, stop, &matrix81) - } - } - start = stop - stop += r.o.perRound - if stop > grStop { - stop = grStop - } - } - wg.Done() - }(start, start+do) - start += do - } - wg.Wait() -} diff --git a/vendor/github.com/klauspost/reedsolomon/galoisAvx512_amd64.s b/vendor/github.com/klauspost/reedsolomon/galoisAvx512_amd64.s deleted file mode 100644 index 09f1d0d..0000000 --- a/vendor/github.com/klauspost/reedsolomon/galoisAvx512_amd64.s +++ /dev/null @@ -1,402 +0,0 @@ -//+build !noasm -//+build !appengine -//+build !gccgo - -// Copyright 2015, Klaus Post, see LICENSE for details. -// Copyright 2019, Minio, Inc. - -#define LOAD(OFFSET) \ - MOVQ OFFSET(SI), BX \ - VMOVDQU64 (BX)(R11*1), Z0 \ - VPSRLQ $4, Z0, Z1 \ // high input - VPANDQ Z2, Z0, Z0 \ // low input - VPANDQ Z2, Z1, Z1 // high input - -#define GALOIS_MUL(MUL_LO, MUL_HI, LO, HI, OUT) \ - VPSHUFB Z0, MUL_LO, LO \ // mul low part - VPSHUFB Z1, MUL_HI, HI \ // mul high part - VPTERNLOGD $0x96, LO, HI, OUT - -#define GALOIS(C1, C2, IN, LO, HI, OUT) \ - VSHUFI64X2 $C1, IN, IN, LO \ - VSHUFI64X2 $C2, IN, IN, HI \ - GALOIS_MUL(LO, HI, LO, HI, OUT) - -// -// Process single output row from a total of 8 input rows -// -// func _galMulAVX512Parallel81(in, out [][]byte, matrix *[matrixSize81]byte, addTo bool) -TEXT ·_galMulAVX512Parallel81(SB), 7, $0 - MOVQ in+0(FP), SI - MOVQ 8(SI), R9 // R9: len(in) - SHRQ $6, R9 // len(in) / 64 - TESTQ R9, R9 - JZ done_avx512_parallel81 - - MOVQ matrix+48(FP), SI - VMOVDQU64 0x000(SI), Z16 - VMOVDQU64 0x040(SI), Z17 - VMOVDQU64 0x080(SI), Z18 - VMOVDQU64 0x0c0(SI), Z19 - - // Initialize multiplication constants - VSHUFI64X2 $0x55, Z16, Z16, Z20 - VSHUFI64X2 $0xaa, Z16, Z16, Z24 - VSHUFI64X2 $0xff, Z16, Z16, Z28 - VSHUFI64X2 $0x00, Z16, Z16, Z16 - - VSHUFI64X2 $0x55, Z17, Z17, Z21 - VSHUFI64X2 $0xaa, Z17, Z17, Z25 - VSHUFI64X2 $0xff, Z17, Z17, Z29 - VSHUFI64X2 $0x00, Z17, Z17, Z17 - - VSHUFI64X2 $0x55, Z18, Z18, Z22 - VSHUFI64X2 $0xaa, Z18, Z18, Z26 - VSHUFI64X2 $0xff, Z18, Z18, Z30 - VSHUFI64X2 $0x00, Z18, Z18, Z18 - - VSHUFI64X2 $0x55, Z19, Z19, Z23 - VSHUFI64X2 $0xaa, Z19, Z19, Z27 - VSHUFI64X2 $0xff, Z19, Z19, Z31 - VSHUFI64X2 $0x00, Z19, Z19, Z19 - - MOVQ $15, BX - VPBROADCASTB BX, Z2 - - MOVB addTo+56(FP), AX - IMULQ $-0x1, AX - KMOVQ AX, K1 - MOVQ in+0(FP), SI // SI: &in - MOVQ in_len+8(FP), AX // number of inputs - XORQ R11, R11 - MOVQ out+24(FP), DX - MOVQ (DX), DX // DX: &out[0][0] - -loopback_avx512_parallel81: - VMOVDQU64.Z (DX), K1, Z4 - - LOAD(0x00) // &in[0][0] - GALOIS_MUL(Z16, Z20, Z14, Z15, Z4) - - CMPQ AX, $1 - JE skip_avx512_parallel81 - - LOAD(0x18) // &in[1][0] - GALOIS_MUL(Z24, Z28, Z14, Z15, Z4) - - CMPQ AX, $2 - JE skip_avx512_parallel81 - - LOAD(0x30) // &in[2][0] - GALOIS_MUL(Z17, Z21, Z14, Z15, Z4) - - CMPQ AX, $3 - JE skip_avx512_parallel81 - - LOAD(0x48) // &in[3][0] - GALOIS_MUL(Z25, Z29, Z14, Z15, Z4) - - CMPQ AX, $4 - JE skip_avx512_parallel81 - - LOAD(0x60) // &in[4][0] - GALOIS_MUL(Z18, Z22, Z14, Z15, Z4) - - CMPQ AX, $5 - JE skip_avx512_parallel81 - - LOAD(0x78) // &in[5][0] - GALOIS_MUL(Z26, Z30, Z14, Z15, Z4) - - CMPQ AX, $6 - JE skip_avx512_parallel81 - - LOAD(0x90) // &in[6][0] - GALOIS_MUL(Z19, Z23, Z14, Z15, Z4) - - CMPQ AX, $7 - JE skip_avx512_parallel81 - - LOAD(0xa8) // &in[7][0] - GALOIS_MUL(Z27, Z31, Z14, Z15, Z4) - -skip_avx512_parallel81: - VMOVDQU64 Z4, (DX) - - ADDQ $64, R11 // in4+=64 - - ADDQ $64, DX // out+=64 - - SUBQ $1, R9 - JNZ loopback_avx512_parallel81 - -done_avx512_parallel81: - VZEROUPPER - RET - -// -// Process 2 output rows in parallel from a total of 8 input rows -// -// func _galMulAVX512Parallel82(in, out [][]byte, matrix *[matrixSize82]byte, addTo bool) -TEXT ·_galMulAVX512Parallel82(SB), 7, $0 - MOVQ in+0(FP), SI - MOVQ 8(SI), R9 // R9: len(in) - SHRQ $6, R9 // len(in) / 64 - TESTQ R9, R9 - JZ done_avx512_parallel82 - - MOVQ matrix+48(FP), SI - VMOVDQU64 0x000(SI), Z16 - VMOVDQU64 0x040(SI), Z17 - VMOVDQU64 0x080(SI), Z18 - VMOVDQU64 0x0c0(SI), Z19 - VMOVDQU64 0x100(SI), Z20 - VMOVDQU64 0x140(SI), Z21 - VMOVDQU64 0x180(SI), Z22 - VMOVDQU64 0x1c0(SI), Z23 - - // Initialize multiplication constants - VSHUFI64X2 $0x55, Z16, Z16, Z24 - VSHUFI64X2 $0xaa, Z16, Z16, Z25 - VSHUFI64X2 $0xff, Z16, Z16, Z26 - VSHUFI64X2 $0x00, Z16, Z16, Z16 - - VSHUFI64X2 $0x55, Z20, Z20, Z27 - VSHUFI64X2 $0xaa, Z20, Z20, Z28 - VSHUFI64X2 $0xff, Z20, Z20, Z29 - VSHUFI64X2 $0x00, Z20, Z20, Z20 - - VSHUFI64X2 $0x55, Z17, Z17, Z30 - VSHUFI64X2 $0xaa, Z17, Z17, Z31 - VSHUFI64X2 $0xff, Z17, Z17, Z11 - VSHUFI64X2 $0x00, Z17, Z17, Z17 - - VSHUFI64X2 $0x55, Z21, Z21, Z8 - VSHUFI64X2 $0xaa, Z21, Z21, Z9 - VSHUFI64X2 $0xff, Z21, Z21, Z10 - VSHUFI64X2 $0x00, Z21, Z21, Z21 - - MOVQ $15, BX - VPBROADCASTB BX, Z2 - - MOVB addTo+56(FP), AX - IMULQ $-0x1, AX - KMOVQ AX, K1 - MOVQ in+0(FP), SI // SI: &in - MOVQ in_len+8(FP), AX // number of inputs - XORQ R11, R11 - MOVQ out+24(FP), DX - MOVQ 24(DX), CX // CX: &out[1][0] - MOVQ (DX), DX // DX: &out[0][0] - -loopback_avx512_parallel82: - VMOVDQU64.Z (DX), K1, Z4 - VMOVDQU64.Z (CX), K1, Z5 - - LOAD(0x00) // &in[0][0] - GALOIS_MUL(Z16, Z24, Z14, Z15, Z4) - GALOIS_MUL(Z20, Z27, Z12, Z13, Z5) - - CMPQ AX, $1 - JE skip_avx512_parallel82 - - LOAD(0x18) // &in[1][0] - GALOIS_MUL(Z25, Z26, Z14, Z15, Z4) - GALOIS_MUL(Z28, Z29, Z12, Z13, Z5) - - CMPQ AX, $2 - JE skip_avx512_parallel82 - - LOAD(0x30) // &in[2][0] - GALOIS_MUL(Z17, Z30, Z14, Z15, Z4) - GALOIS_MUL(Z21, Z8, Z12, Z13, Z5) - - CMPQ AX, $3 - JE skip_avx512_parallel82 - - LOAD(0x48) // &in[3][0] - GALOIS_MUL(Z31, Z11, Z14, Z15, Z4) - GALOIS_MUL(Z9, Z10, Z12, Z13, Z5) - - CMPQ AX, $4 - JE skip_avx512_parallel82 - - LOAD(0x60) // &in[4][0] - GALOIS(0x00, 0x55, Z18, Z14, Z15, Z4) - GALOIS(0x00, 0x55, Z22, Z12, Z13, Z5) - - CMPQ AX, $5 - JE skip_avx512_parallel82 - - LOAD(0x78) // &in[5][0] - GALOIS(0xaa, 0xff, Z18, Z14, Z15, Z4) - GALOIS(0xaa, 0xff, Z22, Z12, Z13, Z5) - - CMPQ AX, $6 - JE skip_avx512_parallel82 - - LOAD(0x90) // &in[6][0] - GALOIS(0x00, 0x55, Z19, Z14, Z15, Z4) - GALOIS(0x00, 0x55, Z23, Z12, Z13, Z5) - - CMPQ AX, $7 - JE skip_avx512_parallel82 - - LOAD(0xa8) // &in[7][0] - GALOIS(0xaa, 0xff, Z19, Z14, Z15, Z4) - GALOIS(0xaa, 0xff, Z23, Z12, Z13, Z5) - -skip_avx512_parallel82: - VMOVDQU64 Z4, (DX) - VMOVDQU64 Z5, (CX) - - ADDQ $64, R11 // in4+=64 - - ADDQ $64, DX // out+=64 - ADDQ $64, CX // out2+=64 - - SUBQ $1, R9 - JNZ loopback_avx512_parallel82 - -done_avx512_parallel82: - VZEROUPPER - RET - -// -// Process 4 output rows in parallel from a total of 8 input rows -// -// func _galMulAVX512Parallel84(in, out [][]byte, matrix *[matrixSize84]byte, addTo bool) -TEXT ·_galMulAVX512Parallel84(SB), 7, $0 - MOVQ in+0(FP), SI - MOVQ 8(SI), R9 // R9: len(in) - SHRQ $6, R9 // len(in) / 64 - TESTQ R9, R9 - JZ done_avx512_parallel84 - - MOVQ matrix+48(FP), SI - VMOVDQU64 0x000(SI), Z16 - VMOVDQU64 0x040(SI), Z17 - VMOVDQU64 0x080(SI), Z18 - VMOVDQU64 0x0c0(SI), Z19 - VMOVDQU64 0x100(SI), Z20 - VMOVDQU64 0x140(SI), Z21 - VMOVDQU64 0x180(SI), Z22 - VMOVDQU64 0x1c0(SI), Z23 - VMOVDQU64 0x200(SI), Z24 - VMOVDQU64 0x240(SI), Z25 - VMOVDQU64 0x280(SI), Z26 - VMOVDQU64 0x2c0(SI), Z27 - VMOVDQU64 0x300(SI), Z28 - VMOVDQU64 0x340(SI), Z29 - VMOVDQU64 0x380(SI), Z30 - VMOVDQU64 0x3c0(SI), Z31 - - MOVQ $15, BX - VPBROADCASTB BX, Z2 - - MOVB addTo+56(FP), AX - IMULQ $-0x1, AX - KMOVQ AX, K1 - MOVQ in+0(FP), SI // SI: &in - MOVQ in_len+8(FP), AX // number of inputs - XORQ R11, R11 - MOVQ out+24(FP), DX - MOVQ 24(DX), CX // CX: &out[1][0] - MOVQ 48(DX), R10 // R10: &out[2][0] - MOVQ 72(DX), R12 // R12: &out[3][0] - MOVQ (DX), DX // DX: &out[0][0] - -loopback_avx512_parallel84: - VMOVDQU64.Z (DX), K1, Z4 - VMOVDQU64.Z (CX), K1, Z5 - VMOVDQU64.Z (R10), K1, Z6 - VMOVDQU64.Z (R12), K1, Z7 - - LOAD(0x00) // &in[0][0] - GALOIS(0x00, 0x55, Z16, Z14, Z15, Z4) - GALOIS(0x00, 0x55, Z20, Z12, Z13, Z5) - GALOIS(0x00, 0x55, Z24, Z10, Z11, Z6) - GALOIS(0x00, 0x55, Z28, Z8, Z9, Z7) - - CMPQ AX, $1 - JE skip_avx512_parallel84 - - LOAD(0x18) // &in[1][0] - GALOIS(0xaa, 0xff, Z16, Z14, Z15, Z4) - GALOIS(0xaa, 0xff, Z20, Z12, Z13, Z5) - GALOIS(0xaa, 0xff, Z24, Z10, Z11, Z6) - GALOIS(0xaa, 0xff, Z28, Z8, Z9, Z7) - - CMPQ AX, $2 - JE skip_avx512_parallel84 - - LOAD(0x30) // &in[2][0] - GALOIS(0x00, 0x55, Z17, Z14, Z15, Z4) - GALOIS(0x00, 0x55, Z21, Z12, Z13, Z5) - GALOIS(0x00, 0x55, Z25, Z10, Z11, Z6) - GALOIS(0x00, 0x55, Z29, Z8, Z9, Z7) - - CMPQ AX, $3 - JE skip_avx512_parallel84 - - LOAD(0x48) // &in[3][0] - GALOIS(0xaa, 0xff, Z17, Z14, Z15, Z4) - GALOIS(0xaa, 0xff, Z21, Z12, Z13, Z5) - GALOIS(0xaa, 0xff, Z25, Z10, Z11, Z6) - GALOIS(0xaa, 0xff, Z29, Z8, Z9, Z7) - - CMPQ AX, $4 - JE skip_avx512_parallel84 - - LOAD(0x60) // &in[4][0] - GALOIS(0x00, 0x55, Z18, Z14, Z15, Z4) - GALOIS(0x00, 0x55, Z22, Z12, Z13, Z5) - GALOIS(0x00, 0x55, Z26, Z10, Z11, Z6) - GALOIS(0x00, 0x55, Z30, Z8, Z9, Z7) - - CMPQ AX, $5 - JE skip_avx512_parallel84 - - LOAD(0x78) // &in[5][0] - GALOIS(0xaa, 0xff, Z18, Z14, Z15, Z4) - GALOIS(0xaa, 0xff, Z22, Z12, Z13, Z5) - GALOIS(0xaa, 0xff, Z26, Z10, Z11, Z6) - GALOIS(0xaa, 0xff, Z30, Z8, Z9, Z7) - - CMPQ AX, $6 - JE skip_avx512_parallel84 - - LOAD(0x90) // &in[6][0] - GALOIS(0x00, 0x55, Z19, Z14, Z15, Z4) - GALOIS(0x00, 0x55, Z23, Z12, Z13, Z5) - GALOIS(0x00, 0x55, Z27, Z10, Z11, Z6) - GALOIS(0x00, 0x55, Z31, Z8, Z9, Z7) - - CMPQ AX, $7 - JE skip_avx512_parallel84 - - LOAD(0xa8) // &in[7][0] - GALOIS(0xaa, 0xff, Z19, Z14, Z15, Z4) - GALOIS(0xaa, 0xff, Z23, Z12, Z13, Z5) - GALOIS(0xaa, 0xff, Z27, Z10, Z11, Z6) - GALOIS(0xaa, 0xff, Z31, Z8, Z9, Z7) - -skip_avx512_parallel84: - VMOVDQU64 Z4, (DX) - VMOVDQU64 Z5, (CX) - VMOVDQU64 Z6, (R10) - VMOVDQU64 Z7, (R12) - - ADDQ $64, R11 // in4+=64 - - ADDQ $64, DX // out+=64 - ADDQ $64, CX // out2+=64 - ADDQ $64, R10 // out3+=64 - ADDQ $64, R12 // out4+=64 - - SUBQ $1, R9 - JNZ loopback_avx512_parallel84 - -done_avx512_parallel84: - VZEROUPPER - RET diff --git a/vendor/github.com/klauspost/reedsolomon/galois_amd64.go b/vendor/github.com/klauspost/reedsolomon/galois_amd64.go deleted file mode 100644 index ae6f289..0000000 --- a/vendor/github.com/klauspost/reedsolomon/galois_amd64.go +++ /dev/null @@ -1,346 +0,0 @@ -//go:build !noasm && !appengine && !gccgo -// +build !noasm,!appengine,!gccgo - -// Copyright 2015, Klaus Post, see LICENSE for details. - -package reedsolomon - -//go:noescape -func galMulSSSE3(low, high, in, out []byte) - -//go:noescape -func galMulSSSE3Xor(low, high, in, out []byte) - -//go:noescape -func galMulAVX2Xor(low, high, in, out []byte) - -//go:noescape -func galMulAVX2(low, high, in, out []byte) - -//go:noescape -func sSE2XorSlice(in, out []byte) - -//go:noescape -func galMulAVX2Xor_64(low, high, in, out []byte) - -//go:noescape -func galMulAVX2_64(low, high, in, out []byte) - -//go:noescape -func sSE2XorSlice_64(in, out []byte) - -// This is what the assembler routines do in blocks of 16 bytes: -/* -func galMulSSSE3(low, high, in, out []byte) { - for n, input := range in { - l := input & 0xf - h := input >> 4 - out[n] = low[l] ^ high[h] - } -} - -func galMulSSSE3Xor(low, high, in, out []byte) { - for n, input := range in { - l := input & 0xf - h := input >> 4 - out[n] ^= low[l] ^ high[h] - } -} -*/ - -// bigSwitchover is the size where 64 bytes are processed per loop. -const bigSwitchover = 128 - -func galMulSlice(c byte, in, out []byte, o *options) { - if c == 1 { - copy(out, in) - return - } - if o.useAVX2 { - if len(in) >= bigSwitchover { - galMulAVX2_64(mulTableLow[c][:], mulTableHigh[c][:], in, out) - done := (len(in) >> 6) << 6 - in = in[done:] - out = out[done:] - } - if len(in) > 32 { - galMulAVX2(mulTableLow[c][:], mulTableHigh[c][:], in, out) - done := (len(in) >> 5) << 5 - in = in[done:] - out = out[done:] - } - } else if o.useSSSE3 { - galMulSSSE3(mulTableLow[c][:], mulTableHigh[c][:], in, out) - done := (len(in) >> 4) << 4 - in = in[done:] - out = out[done:] - } - out = out[:len(in)] - mt := mulTable[c][:256] - for i := range in { - out[i] = mt[in[i]] - } -} - -func galMulSliceXor(c byte, in, out []byte, o *options) { - if c == 1 { - sliceXor(in, out, o) - return - } - - if o.useAVX2 { - if len(in) >= bigSwitchover { - galMulAVX2Xor_64(mulTableLow[c][:], mulTableHigh[c][:], in, out) - done := (len(in) >> 6) << 6 - in = in[done:] - out = out[done:] - } - if len(in) >= 32 { - galMulAVX2Xor(mulTableLow[c][:], mulTableHigh[c][:], in, out) - done := (len(in) >> 5) << 5 - in = in[done:] - out = out[done:] - } - } else if o.useSSSE3 { - galMulSSSE3Xor(mulTableLow[c][:], mulTableHigh[c][:], in, out) - done := (len(in) >> 4) << 4 - in = in[done:] - out = out[done:] - } - if len(in) == 0 { - return - } - out = out[:len(in)] - mt := mulTable[c][:256] - for i := range in { - out[i] ^= mt[in[i]] - } -} - -// simple slice xor -func sliceXor(in, out []byte, o *options) { - if o.useSSE2 { - if len(in) >= bigSwitchover { - sSE2XorSlice_64(in, out) - done := (len(in) >> 6) << 6 - in = in[done:] - out = out[done:] - } - if len(in) >= 16 { - sSE2XorSlice(in, out) - done := (len(in) >> 4) << 4 - in = in[done:] - out = out[done:] - } - } else { - sliceXorGo(in, out, o) - return - } - out = out[:len(in)] - for i := range in { - out[i] ^= in[i] - } -} - -// 4-way butterfly -func ifftDIT4(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) { - if len(work[0]) == 0 { - return - } - - t01 := &multiply256LUT[log_m01] - t23 := &multiply256LUT[log_m23] - t02 := &multiply256LUT[log_m02] - if o.useAVX512 { - if log_m01 == modulus { - if log_m23 == modulus { - if log_m02 == modulus { - ifftDIT4_avx512_7(work, dist*24, t01, t23, t02) - } else { - ifftDIT4_avx512_3(work, dist*24, t01, t23, t02) - } - } else { - if log_m02 == modulus { - ifftDIT4_avx512_5(work, dist*24, t01, t23, t02) - } else { - ifftDIT4_avx512_1(work, dist*24, t01, t23, t02) - } - } - } else { - if log_m23 == modulus { - if log_m02 == modulus { - ifftDIT4_avx512_6(work, dist*24, t01, t23, t02) - } else { - ifftDIT4_avx512_2(work, dist*24, t01, t23, t02) - } - } else { - if log_m02 == modulus { - ifftDIT4_avx512_4(work, dist*24, t01, t23, t02) - } else { - ifftDIT4_avx512_0(work, dist*24, t01, t23, t02) - } - } - } - return - } else if o.useAVX2 { - if log_m01 == modulus { - if log_m23 == modulus { - if log_m02 == modulus { - ifftDIT4_avx2_7(work, dist*24, t01, t23, t02) - } else { - ifftDIT4_avx2_3(work, dist*24, t01, t23, t02) - } - } else { - if log_m02 == modulus { - ifftDIT4_avx2_5(work, dist*24, t01, t23, t02) - } else { - ifftDIT4_avx2_1(work, dist*24, t01, t23, t02) - } - } - } else { - if log_m23 == modulus { - if log_m02 == modulus { - ifftDIT4_avx2_6(work, dist*24, t01, t23, t02) - } else { - ifftDIT4_avx2_2(work, dist*24, t01, t23, t02) - } - } else { - if log_m02 == modulus { - ifftDIT4_avx2_4(work, dist*24, t01, t23, t02) - } else { - ifftDIT4_avx2_0(work, dist*24, t01, t23, t02) - } - } - } - return - } - ifftDIT4Ref(work, dist, log_m01, log_m23, log_m02, o) -} - -func fftDIT4(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) { - if len(work[0]) == 0 { - return - } - - t01 := &multiply256LUT[log_m01] - t23 := &multiply256LUT[log_m23] - t02 := &multiply256LUT[log_m02] - if o.useAVX512 { - if log_m02 == modulus { - if log_m01 == modulus { - if log_m23 == modulus { - fftDIT4_avx512_7(work, dist*24, t01, t23, t02) - } else { - fftDIT4_avx512_3(work, dist*24, t01, t23, t02) - } - } else { - if log_m23 == modulus { - fftDIT4_avx512_5(work, dist*24, t01, t23, t02) - } else { - fftDIT4_avx512_1(work, dist*24, t01, t23, t02) - } - } - } else { - if log_m01 == modulus { - if log_m23 == modulus { - fftDIT4_avx512_6(work, dist*24, t01, t23, t02) - } else { - fftDIT4_avx512_2(work, dist*24, t01, t23, t02) - } - } else { - if log_m23 == modulus { - fftDIT4_avx512_4(work, dist*24, t01, t23, t02) - } else { - fftDIT4_avx512_0(work, dist*24, t01, t23, t02) - } - } - } - return - } else if o.useAVX2 { - if log_m02 == modulus { - if log_m01 == modulus { - if log_m23 == modulus { - fftDIT4_avx2_7(work, dist*24, t01, t23, t02) - } else { - fftDIT4_avx2_3(work, dist*24, t01, t23, t02) - } - } else { - if log_m23 == modulus { - fftDIT4_avx2_5(work, dist*24, t01, t23, t02) - } else { - fftDIT4_avx2_1(work, dist*24, t01, t23, t02) - } - } - } else { - if log_m01 == modulus { - if log_m23 == modulus { - fftDIT4_avx2_6(work, dist*24, t01, t23, t02) - } else { - fftDIT4_avx2_2(work, dist*24, t01, t23, t02) - } - } else { - if log_m23 == modulus { - fftDIT4_avx2_4(work, dist*24, t01, t23, t02) - } else { - fftDIT4_avx2_0(work, dist*24, t01, t23, t02) - } - } - } - return - } - fftDIT4Ref(work, dist, log_m01, log_m23, log_m02, o) -} - -// 2-way butterfly forward -func fftDIT2(x, y []byte, log_m ffe, o *options) { - if o.useAVX2 { - if len(x) > 0 { - tmp := &multiply256LUT[log_m] - fftDIT2_avx2(x, y, tmp) - } - } else if o.useSSSE3 { - if len(x) > 0 { - tmp := &multiply256LUT[log_m] - fftDIT2_ssse3(x, y, tmp) - } - } else { - // Reference version: - refMulAdd(x, y, log_m) - sliceXor(x, y, o) - } -} - -// 2-way butterfly -func ifftDIT2(x, y []byte, log_m ffe, o *options) { - if o.useAVX2 { - if len(x) > 0 { - tmp := &multiply256LUT[log_m] - ifftDIT2_avx2(x, y, tmp) - } - } else if o.useSSSE3 { - if len(x) > 0 { - tmp := &multiply256LUT[log_m] - ifftDIT2_ssse3(x, y, tmp) - } - } else { - // Reference version: - sliceXor(x, y, o) - refMulAdd(x, y, log_m) - } -} - -func mulgf16(x, y []byte, log_m ffe, o *options) { - if o.useAVX2 { - if len(x) > 0 { - tmp := &multiply256LUT[log_m] - mulgf16_avx2(x, y, tmp) - } - } else if o.useSSSE3 { - if len(x) > 0 { - tmp := &multiply256LUT[log_m] - mulgf16_ssse3(x, y, tmp) - } - } else { - refMul(x, y, log_m) - } -} diff --git a/vendor/github.com/klauspost/reedsolomon/galois_amd64.s b/vendor/github.com/klauspost/reedsolomon/galois_amd64.s deleted file mode 100644 index f1dc8d5..0000000 --- a/vendor/github.com/klauspost/reedsolomon/galois_amd64.s +++ /dev/null @@ -1,370 +0,0 @@ -//+build !noasm -//+build !appengine -//+build !gccgo - -// Copyright 2015, Klaus Post, see LICENSE for details. - -// Based on http://www.snia.org/sites/default/files2/SDC2013/presentations/NewThinking/EthanMiller_Screaming_Fast_Galois_Field%20Arithmetic_SIMD%20Instructions.pdf -// and http://jerasure.org/jerasure/gf-complete/tree/master - -// func galMulSSSE3Xor(low, high, in, out []byte) -TEXT ·galMulSSSE3Xor(SB), 7, $0 - MOVQ low+0(FP), SI // SI: &low - MOVQ high+24(FP), DX // DX: &high - MOVOU (SI), X6 // X6 low - MOVOU (DX), X7 // X7: high - MOVQ $15, BX // BX: low mask - MOVQ BX, X8 - PXOR X5, X5 - MOVQ in+48(FP), SI // R11: &in - MOVQ in_len+56(FP), R9 // R9: len(in) - MOVQ out+72(FP), DX // DX: &out - PSHUFB X5, X8 // X8: lomask (unpacked) - SHRQ $4, R9 // len(in) / 16 - MOVQ SI, AX - MOVQ DX, BX - ANDQ $15, AX - ANDQ $15, BX - CMPQ R9, $0 - JEQ done_xor - ORQ AX, BX - CMPQ BX, $0 - JNZ loopback_xor - -loopback_xor_aligned: - MOVOA (SI), X0 // in[x] - MOVOA (DX), X4 // out[x] - MOVOA X0, X1 // in[x] - MOVOA X6, X2 // low copy - MOVOA X7, X3 // high copy - PSRLQ $4, X1 // X1: high input - PAND X8, X0 // X0: low input - PAND X8, X1 // X0: high input - PSHUFB X0, X2 // X2: mul low part - PSHUFB X1, X3 // X3: mul high part - PXOR X2, X3 // X3: Result - PXOR X4, X3 // X3: Result xor existing out - MOVOA X3, (DX) // Store - ADDQ $16, SI // in+=16 - ADDQ $16, DX // out+=16 - SUBQ $1, R9 - JNZ loopback_xor_aligned - JMP done_xor - -loopback_xor: - MOVOU (SI), X0 // in[x] - MOVOU (DX), X4 // out[x] - MOVOU X0, X1 // in[x] - MOVOU X6, X2 // low copy - MOVOU X7, X3 // high copy - PSRLQ $4, X1 // X1: high input - PAND X8, X0 // X0: low input - PAND X8, X1 // X0: high input - PSHUFB X0, X2 // X2: mul low part - PSHUFB X1, X3 // X3: mul high part - PXOR X2, X3 // X3: Result - PXOR X4, X3 // X3: Result xor existing out - MOVOU X3, (DX) // Store - ADDQ $16, SI // in+=16 - ADDQ $16, DX // out+=16 - SUBQ $1, R9 - JNZ loopback_xor - -done_xor: - RET - -// func galMulSSSE3(low, high, in, out []byte) -TEXT ·galMulSSSE3(SB), 7, $0 - MOVQ low+0(FP), SI // SI: &low - MOVQ high+24(FP), DX // DX: &high - MOVOU (SI), X6 // X6 low - MOVOU (DX), X7 // X7: high - MOVQ $15, BX // BX: low mask - MOVQ BX, X8 - PXOR X5, X5 - MOVQ in+48(FP), SI // R11: &in - MOVQ in_len+56(FP), R9 // R9: len(in) - MOVQ out+72(FP), DX // DX: &out - PSHUFB X5, X8 // X8: lomask (unpacked) - MOVQ SI, AX - MOVQ DX, BX - SHRQ $4, R9 // len(in) / 16 - ANDQ $15, AX - ANDQ $15, BX - CMPQ R9, $0 - JEQ done - ORQ AX, BX - CMPQ BX, $0 - JNZ loopback - -loopback_aligned: - MOVOA (SI), X0 // in[x] - MOVOA X0, X1 // in[x] - MOVOA X6, X2 // low copy - MOVOA X7, X3 // high copy - PSRLQ $4, X1 // X1: high input - PAND X8, X0 // X0: low input - PAND X8, X1 // X0: high input - PSHUFB X0, X2 // X2: mul low part - PSHUFB X1, X3 // X3: mul high part - PXOR X2, X3 // X3: Result - MOVOA X3, (DX) // Store - ADDQ $16, SI // in+=16 - ADDQ $16, DX // out+=16 - SUBQ $1, R9 - JNZ loopback_aligned - JMP done - -loopback: - MOVOU (SI), X0 // in[x] - MOVOU X0, X1 // in[x] - MOVOA X6, X2 // low copy - MOVOA X7, X3 // high copy - PSRLQ $4, X1 // X1: high input - PAND X8, X0 // X0: low input - PAND X8, X1 // X0: high input - PSHUFB X0, X2 // X2: mul low part - PSHUFB X1, X3 // X3: mul high part - PXOR X2, X3 // X3: Result - MOVOU X3, (DX) // Store - ADDQ $16, SI // in+=16 - ADDQ $16, DX // out+=16 - SUBQ $1, R9 - JNZ loopback - -done: - RET - -// func galMulAVX2Xor(low, high, in, out []byte) -TEXT ·galMulAVX2Xor(SB), 7, $0 - MOVQ low+0(FP), SI // SI: &low - MOVQ high+24(FP), DX // DX: &high - MOVQ $15, BX // BX: low mask - MOVQ BX, X5 - MOVOU (SI), X6 // X6: low - MOVOU (DX), X7 // X7: high - MOVQ in_len+56(FP), R9 // R9: len(in) - - VINSERTI128 $1, X6, Y6, Y6 // low - VINSERTI128 $1, X7, Y7, Y7 // high - VPBROADCASTB X5, Y8 // Y8: lomask (unpacked) - - SHRQ $5, R9 // len(in) / 32 - MOVQ out+72(FP), DX // DX: &out - MOVQ in+48(FP), SI // SI: &in - TESTQ R9, R9 - JZ done_xor_avx2 - -loopback_xor_avx2: - VMOVDQU (SI), Y0 - VMOVDQU (DX), Y4 - VPSRLQ $4, Y0, Y1 // Y1: high input - VPAND Y8, Y0, Y0 // Y0: low input - VPAND Y8, Y1, Y1 // Y1: high input - VPSHUFB Y0, Y6, Y2 // Y2: mul low part - VPSHUFB Y1, Y7, Y3 // Y3: mul high part - VPXOR Y3, Y2, Y3 // Y3: Result - VPXOR Y4, Y3, Y4 // Y4: Result - VMOVDQU Y4, (DX) - - ADDQ $32, SI // in+=32 - ADDQ $32, DX // out+=32 - SUBQ $1, R9 - JNZ loopback_xor_avx2 - -done_xor_avx2: - VZEROUPPER - RET - -// func galMulAVX2(low, high, in, out []byte) -TEXT ·galMulAVX2(SB), 7, $0 - MOVQ low+0(FP), SI // SI: &low - MOVQ high+24(FP), DX // DX: &high - MOVQ $15, BX // BX: low mask - MOVQ BX, X5 - MOVOU (SI), X6 // X6: low - MOVOU (DX), X7 // X7: high - MOVQ in_len+56(FP), R9 // R9: len(in) - - VINSERTI128 $1, X6, Y6, Y6 // low - VINSERTI128 $1, X7, Y7, Y7 // high - VPBROADCASTB X5, Y8 // Y8: lomask (unpacked) - - SHRQ $5, R9 // len(in) / 32 - MOVQ out+72(FP), DX // DX: &out - MOVQ in+48(FP), SI // SI: &in - TESTQ R9, R9 - JZ done_avx2 - -loopback_avx2: - VMOVDQU (SI), Y0 - VPSRLQ $4, Y0, Y1 // Y1: high input - VPAND Y8, Y0, Y0 // Y0: low input - VPAND Y8, Y1, Y1 // Y1: high input - VPSHUFB Y0, Y6, Y2 // Y2: mul low part - VPSHUFB Y1, Y7, Y3 // Y3: mul high part - VPXOR Y3, Y2, Y4 // Y4: Result - VMOVDQU Y4, (DX) - - ADDQ $32, SI // in+=32 - ADDQ $32, DX // out+=32 - SUBQ $1, R9 - JNZ loopback_avx2 - -done_avx2: - VZEROUPPER - RET - -// func sSE2XorSlice(in, out []byte) -TEXT ·sSE2XorSlice(SB), 7, $0 - MOVQ in+0(FP), SI // SI: &in - MOVQ in_len+8(FP), R9 // R9: len(in) - MOVQ out+24(FP), DX // DX: &out - SHRQ $4, R9 // len(in) / 16 - CMPQ R9, $0 - JEQ done_xor_sse2 - -loopback_xor_sse2: - MOVOU (SI), X0 // in[x] - MOVOU (DX), X1 // out[x] - PXOR X0, X1 - MOVOU X1, (DX) - ADDQ $16, SI // in+=16 - ADDQ $16, DX // out+=16 - SUBQ $1, R9 - JNZ loopback_xor_sse2 - -done_xor_sse2: - RET - -// func galMulAVX2Xor_64(low, high, in, out []byte) -TEXT ·galMulAVX2Xor_64(SB), 7, $0 - MOVQ low+0(FP), SI // SI: &low - MOVQ high+24(FP), DX // DX: &high - MOVQ $15, BX // BX: low mask - MOVQ BX, X5 - MOVOU (SI), X6 // X6: low - MOVOU (DX), X7 // X7: high - MOVQ in_len+56(FP), R9 // R9: len(in) - - VINSERTI128 $1, X6, Y6, Y6 // low - VINSERTI128 $1, X7, Y7, Y7 // high - VPBROADCASTB X5, Y8 // Y8: lomask (unpacked) - - SHRQ $6, R9 // len(in) / 64 - MOVQ out+72(FP), DX // DX: &out - MOVQ in+48(FP), SI // SI: &in - TESTQ R9, R9 - JZ done_xor_avx2_64 - -loopback_xor_avx2_64: - VMOVDQU (SI), Y0 - VMOVDQU 32(SI), Y10 - VMOVDQU (DX), Y4 - VMOVDQU 32(DX), Y14 - VPSRLQ $4, Y0, Y1 // Y1: high input - VPSRLQ $4, Y10, Y11 // Y11: high input 2 - VPAND Y8, Y0, Y0 // Y0: low input - VPAND Y8, Y10, Y10 // Y10: low input 2 - VPAND Y8, Y1, Y1 // Y11: high input - VPAND Y8, Y11, Y11 // Y11: high input 2 - VPSHUFB Y0, Y6, Y2 // Y2: mul low part - VPSHUFB Y10, Y6, Y12 // Y12: mul low part 2 - VPSHUFB Y1, Y7, Y3 // Y3: mul high part - VPSHUFB Y11, Y7, Y13 // Y13: mul high part 2 - VPXOR Y3, Y2, Y3 // Y3: Result - VPXOR Y13, Y12, Y13 // Y13: Result 2 - VPXOR Y4, Y3, Y4 // Y4: Result - VPXOR Y14, Y13, Y14 // Y4: Result 2 - VMOVDQU Y4, (DX) - VMOVDQU Y14, 32(DX) - - ADDQ $64, SI // in+=64 - ADDQ $64, DX // out+=64 - SUBQ $1, R9 - JNZ loopback_xor_avx2_64 - -done_xor_avx2_64: - VZEROUPPER - RET - -// func galMulAVX2_64(low, high, in, out []byte) -TEXT ·galMulAVX2_64(SB), 7, $0 - MOVQ low+0(FP), SI // SI: &low - MOVQ high+24(FP), DX // DX: &high - MOVQ $15, BX // BX: low mask - MOVQ BX, X5 - MOVOU (SI), X6 // X6: low - MOVOU (DX), X7 // X7: high - MOVQ in_len+56(FP), R9 // R9: len(in) - - VINSERTI128 $1, X6, Y6, Y6 // low - VINSERTI128 $1, X7, Y7, Y7 // high - VPBROADCASTB X5, Y8 // Y8: lomask (unpacked) - - SHRQ $6, R9 // len(in) / 64 - MOVQ out+72(FP), DX // DX: &out - MOVQ in+48(FP), SI // SI: &in - TESTQ R9, R9 - JZ done_avx2_64 - -loopback_avx2_64: - VMOVDQU (SI), Y0 - VMOVDQU 32(SI), Y10 - VPSRLQ $4, Y0, Y1 // Y1: high input - VPSRLQ $4, Y10, Y11 // Y11: high input 2 - VPAND Y8, Y0, Y0 // Y0: low input - VPAND Y8, Y10, Y10 // Y10: low input - VPAND Y8, Y1, Y1 // Y1: high input - VPAND Y8, Y11, Y11 // Y11: high input 2 - VPSHUFB Y0, Y6, Y2 // Y2: mul low part - VPSHUFB Y10, Y6, Y12 // Y12: mul low part 2 - VPSHUFB Y1, Y7, Y3 // Y3: mul high part - VPSHUFB Y11, Y7, Y13 // Y13: mul high part 2 - VPXOR Y3, Y2, Y4 // Y4: Result - VPXOR Y13, Y12, Y14 // Y14: Result 2 - VMOVDQU Y4, (DX) - VMOVDQU Y14, 32(DX) - - ADDQ $64, SI // in+=64 - ADDQ $64, DX // out+=64 - SUBQ $1, R9 - JNZ loopback_avx2_64 - -done_avx2_64: - VZEROUPPER - RET - -// func sSE2XorSlice_64(in, out []byte) -TEXT ·sSE2XorSlice_64(SB), 7, $0 - MOVQ in+0(FP), SI // SI: &in - MOVQ in_len+8(FP), R9 // R9: len(in) - MOVQ out+24(FP), DX // DX: &out - SHRQ $6, R9 // len(in) / 64 - CMPQ R9, $0 - JEQ done_xor_sse2_64 - -loopback_xor_sse2_64: - MOVOU (SI), X0 // in[x] - MOVOU 16(SI), X2 // in[x] - MOVOU 32(SI), X4 // in[x] - MOVOU 48(SI), X6 // in[x] - MOVOU (DX), X1 // out[x] - MOVOU 16(DX), X3 // out[x] - MOVOU 32(DX), X5 // out[x] - MOVOU 48(DX), X7 // out[x] - PXOR X0, X1 - PXOR X2, X3 - PXOR X4, X5 - PXOR X6, X7 - MOVOU X1, (DX) - MOVOU X3, 16(DX) - MOVOU X5, 32(DX) - MOVOU X7, 48(DX) - ADDQ $64, SI // in+=64 - ADDQ $64, DX // out+=64 - SUBQ $1, R9 - JNZ loopback_xor_sse2_64 - -done_xor_sse2_64: - RET diff --git a/vendor/github.com/klauspost/reedsolomon/galois_arm64.go b/vendor/github.com/klauspost/reedsolomon/galois_arm64.go deleted file mode 100644 index 92b67b8..0000000 --- a/vendor/github.com/klauspost/reedsolomon/galois_arm64.go +++ /dev/null @@ -1,96 +0,0 @@ -//go:build !noasm && !appengine && !gccgo -// +build !noasm,!appengine,!gccgo - -// Copyright 2015, Klaus Post, see LICENSE for details. -// Copyright 2017, Minio, Inc. - -package reedsolomon - -//go:noescape -func galMulNEON(low, high, in, out []byte) - -//go:noescape -func galMulXorNEON(low, high, in, out []byte) - -//go:noescape -func galXorNEON(in, out []byte) - -func galMulSlice(c byte, in, out []byte, o *options) { - if c == 1 { - copy(out, in) - return - } - var done int - galMulNEON(mulTableLow[c][:], mulTableHigh[c][:], in, out) - done = (len(in) >> 5) << 5 - - remain := len(in) - done - if remain > 0 { - mt := mulTable[c][:256] - for i := done; i < len(in); i++ { - out[i] = mt[in[i]] - } - } -} - -func galMulSliceXor(c byte, in, out []byte, o *options) { - if c == 1 { - sliceXor(in, out, o) - return - } - var done int - galMulXorNEON(mulTableLow[c][:], mulTableHigh[c][:], in, out) - done = (len(in) >> 5) << 5 - - remain := len(in) - done - if remain > 0 { - mt := mulTable[c][:256] - for i := done; i < len(in); i++ { - out[i] ^= mt[in[i]] - } - } -} - -// simple slice xor -func sliceXor(in, out []byte, o *options) { - - galXorNEON(in, out) - done := (len(in) >> 5) << 5 - - remain := len(in) - done - if remain > 0 { - for i := done; i < len(in); i++ { - out[i] ^= in[i] - } - } -} - -// 4-way butterfly -func ifftDIT4(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) { - ifftDIT4Ref(work, dist, log_m01, log_m23, log_m02, o) -} - -// 4-way butterfly -func fftDIT4(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) { - fftDIT4Ref(work, dist, log_m01, log_m23, log_m02, o) -} - -// 2-way butterfly forward -func fftDIT2(x, y []byte, log_m ffe, o *options) { - // Reference version: - refMulAdd(x, y, log_m) - // 64 byte aligned, always full. - galXorNEON(x, y) -} - -// 2-way butterfly -func ifftDIT2(x, y []byte, log_m ffe, o *options) { - // 64 byte aligned, always full. - galXorNEON(x, y) - // Reference version: - refMulAdd(x, y, log_m) -} - -func mulgf16(x, y []byte, log_m ffe, o *options) { - refMul(x, y, log_m) -} diff --git a/vendor/github.com/klauspost/reedsolomon/galois_arm64.s b/vendor/github.com/klauspost/reedsolomon/galois_arm64.s deleted file mode 100644 index 3ae3237..0000000 --- a/vendor/github.com/klauspost/reedsolomon/galois_arm64.s +++ /dev/null @@ -1,127 +0,0 @@ -//+build !noasm -//+build !appengine -//+build !gccgo - -// Copyright 2015, Klaus Post, see LICENSE for details. -// Copyright 2017, Minio, Inc. - -#define LOAD(LO1, LO2, HI1, HI2) \ - VLD1.P 32(R1), [LO1.B16, LO2.B16] \ - \ - \ // Get low input and high input - VUSHR $4, LO1.B16, HI1.B16 \ - VUSHR $4, LO2.B16, HI2.B16 \ - VAND V8.B16, LO1.B16, LO1.B16 \ - VAND V8.B16, LO2.B16, LO2.B16 - -#define GALOIS_MUL(MUL_LO, MUL_HI, OUT1, OUT2, TMP1, TMP2) \ - \ // Mul low part and mul high part - VTBL V0.B16, [MUL_LO.B16], OUT1.B16 \ - VTBL V10.B16, [MUL_HI.B16], OUT2.B16 \ - VTBL V1.B16, [MUL_LO.B16], TMP1.B16 \ - VTBL V11.B16, [MUL_HI.B16], TMP2.B16 \ - \ - \ // Combine results - VEOR OUT2.B16, OUT1.B16, OUT1.B16 \ - VEOR TMP2.B16, TMP1.B16, OUT2.B16 - -// func galMulNEON(low, high, in, out []byte) -TEXT ·galMulNEON(SB), 7, $0 - MOVD in_base+48(FP), R1 - MOVD in_len+56(FP), R2 // length of message - MOVD out_base+72(FP), R5 - SUBS $32, R2 - BMI complete - - MOVD low+0(FP), R10 // R10: &low - MOVD high+24(FP), R11 // R11: &high - VLD1 (R10), [V6.B16] - VLD1 (R11), [V7.B16] - - // - // Use an extra instruction below since `VDUP R3, V8.B16` generates assembler error - // WORD $0x4e010c68 // dup v8.16b, w3 - // - MOVD $0x0f, R3 - VMOV R3, V8.B[0] - VDUP V8.B[0], V8.B16 - -loop: - // Main loop - LOAD(V0, V1, V10, V11) - GALOIS_MUL(V6, V7, V4, V5, V14, V15) - - // Store result - VST1.P [V4.D2, V5.D2], 32(R5) - - SUBS $32, R2 - BPL loop - -complete: - RET - -// func galMulXorNEON(low, high, in, out []byte) -TEXT ·galMulXorNEON(SB), 7, $0 - MOVD in_base+48(FP), R1 - MOVD in_len+56(FP), R2 // length of message - MOVD out_base+72(FP), R5 - SUBS $32, R2 - BMI completeXor - - MOVD low+0(FP), R10 // R10: &low - MOVD high+24(FP), R11 // R11: &high - VLD1 (R10), [V6.B16] - VLD1 (R11), [V7.B16] - - // - // Use an extra instruction below since `VDUP R3, V8.B16` generates assembler error - // WORD $0x4e010c68 // dup v8.16b, w3 - // - MOVD $0x0f, R3 - VMOV R3, V8.B[0] - VDUP V8.B[0], V8.B16 - -loopXor: - // Main loop - VLD1 (R5), [V20.B16, V21.B16] - - LOAD(V0, V1, V10, V11) - GALOIS_MUL(V6, V7, V4, V5, V14, V15) - - VEOR V20.B16, V4.B16, V4.B16 - VEOR V21.B16, V5.B16, V5.B16 - - // Store result - VST1.P [V4.D2, V5.D2], 32(R5) - - SUBS $32, R2 - BPL loopXor - -completeXor: - RET - -// func galXorNEON(in, out []byte) -TEXT ·galXorNEON(SB), 7, $0 - MOVD in_base+0(FP), R1 - MOVD in_len+8(FP), R2 // length of message - MOVD out_base+24(FP), R5 - SUBS $32, R2 - BMI completeXor - -loopXor: - // Main loop - VLD1.P 32(R1), [V0.B16, V1.B16] - VLD1 (R5), [V20.B16, V21.B16] - - VEOR V20.B16, V0.B16, V4.B16 - VEOR V21.B16, V1.B16, V5.B16 - - // Store result - VST1.P [V4.D2, V5.D2], 32(R5) - - SUBS $32, R2 - BPL loopXor - -completeXor: - RET - diff --git a/vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.go b/vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.go deleted file mode 100644 index 24d6a02..0000000 --- a/vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.go +++ /dev/null @@ -1,1551 +0,0 @@ -// Code generated by command: go run gen.go -out ../galois_gen_amd64.s -stubs ../galois_gen_amd64.go -pkg=reedsolomon. DO NOT EDIT. - -//go:build !appengine && !noasm && !nogen && gc - -package reedsolomon - -func _dummy_() - -// mulAvxTwo_1x1 takes 1 inputs and produces 1 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_1x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x1_64 takes 1 inputs and produces 1 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_1x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x1Xor takes 1 inputs and produces 1 outputs. -// -//go:noescape -func mulAvxTwo_1x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x1_64Xor takes 1 inputs and produces 1 outputs. -// -//go:noescape -func mulAvxTwo_1x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x2 takes 1 inputs and produces 2 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_1x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x2_64 takes 1 inputs and produces 2 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_1x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x2Xor takes 1 inputs and produces 2 outputs. -// -//go:noescape -func mulAvxTwo_1x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x2_64Xor takes 1 inputs and produces 2 outputs. -// -//go:noescape -func mulAvxTwo_1x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x3 takes 1 inputs and produces 3 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_1x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x3_64 takes 1 inputs and produces 3 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_1x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x3Xor takes 1 inputs and produces 3 outputs. -// -//go:noescape -func mulAvxTwo_1x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x3_64Xor takes 1 inputs and produces 3 outputs. -// -//go:noescape -func mulAvxTwo_1x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x4 takes 1 inputs and produces 4 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_1x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x4Xor takes 1 inputs and produces 4 outputs. -// -//go:noescape -func mulAvxTwo_1x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x5 takes 1 inputs and produces 5 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_1x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x5Xor takes 1 inputs and produces 5 outputs. -// -//go:noescape -func mulAvxTwo_1x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x6 takes 1 inputs and produces 6 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_1x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x6Xor takes 1 inputs and produces 6 outputs. -// -//go:noescape -func mulAvxTwo_1x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x7 takes 1 inputs and produces 7 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_1x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x7Xor takes 1 inputs and produces 7 outputs. -// -//go:noescape -func mulAvxTwo_1x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x8 takes 1 inputs and produces 8 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_1x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x8Xor takes 1 inputs and produces 8 outputs. -// -//go:noescape -func mulAvxTwo_1x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x9 takes 1 inputs and produces 9 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_1x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x9Xor takes 1 inputs and produces 9 outputs. -// -//go:noescape -func mulAvxTwo_1x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x10 takes 1 inputs and produces 10 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_1x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_1x10Xor takes 1 inputs and produces 10 outputs. -// -//go:noescape -func mulAvxTwo_1x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x1 takes 2 inputs and produces 1 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_2x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x1_64 takes 2 inputs and produces 1 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_2x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x1Xor takes 2 inputs and produces 1 outputs. -// -//go:noescape -func mulAvxTwo_2x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x1_64Xor takes 2 inputs and produces 1 outputs. -// -//go:noescape -func mulAvxTwo_2x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x2 takes 2 inputs and produces 2 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_2x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x2_64 takes 2 inputs and produces 2 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_2x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x2Xor takes 2 inputs and produces 2 outputs. -// -//go:noescape -func mulAvxTwo_2x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x2_64Xor takes 2 inputs and produces 2 outputs. -// -//go:noescape -func mulAvxTwo_2x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x3 takes 2 inputs and produces 3 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_2x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x3_64 takes 2 inputs and produces 3 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_2x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x3Xor takes 2 inputs and produces 3 outputs. -// -//go:noescape -func mulAvxTwo_2x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x3_64Xor takes 2 inputs and produces 3 outputs. -// -//go:noescape -func mulAvxTwo_2x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x4 takes 2 inputs and produces 4 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_2x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x4Xor takes 2 inputs and produces 4 outputs. -// -//go:noescape -func mulAvxTwo_2x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x5 takes 2 inputs and produces 5 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_2x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x5Xor takes 2 inputs and produces 5 outputs. -// -//go:noescape -func mulAvxTwo_2x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x6 takes 2 inputs and produces 6 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_2x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x6Xor takes 2 inputs and produces 6 outputs. -// -//go:noescape -func mulAvxTwo_2x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x7 takes 2 inputs and produces 7 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_2x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x7Xor takes 2 inputs and produces 7 outputs. -// -//go:noescape -func mulAvxTwo_2x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x8 takes 2 inputs and produces 8 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_2x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x8Xor takes 2 inputs and produces 8 outputs. -// -//go:noescape -func mulAvxTwo_2x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x9 takes 2 inputs and produces 9 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_2x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x9Xor takes 2 inputs and produces 9 outputs. -// -//go:noescape -func mulAvxTwo_2x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x10 takes 2 inputs and produces 10 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_2x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_2x10Xor takes 2 inputs and produces 10 outputs. -// -//go:noescape -func mulAvxTwo_2x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x1 takes 3 inputs and produces 1 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_3x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x1_64 takes 3 inputs and produces 1 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_3x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x1Xor takes 3 inputs and produces 1 outputs. -// -//go:noescape -func mulAvxTwo_3x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x1_64Xor takes 3 inputs and produces 1 outputs. -// -//go:noescape -func mulAvxTwo_3x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x2 takes 3 inputs and produces 2 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_3x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x2_64 takes 3 inputs and produces 2 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_3x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x2Xor takes 3 inputs and produces 2 outputs. -// -//go:noescape -func mulAvxTwo_3x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x2_64Xor takes 3 inputs and produces 2 outputs. -// -//go:noescape -func mulAvxTwo_3x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x3 takes 3 inputs and produces 3 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_3x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x3_64 takes 3 inputs and produces 3 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_3x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x3Xor takes 3 inputs and produces 3 outputs. -// -//go:noescape -func mulAvxTwo_3x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x3_64Xor takes 3 inputs and produces 3 outputs. -// -//go:noescape -func mulAvxTwo_3x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x4 takes 3 inputs and produces 4 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_3x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x4Xor takes 3 inputs and produces 4 outputs. -// -//go:noescape -func mulAvxTwo_3x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x5 takes 3 inputs and produces 5 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_3x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x5Xor takes 3 inputs and produces 5 outputs. -// -//go:noescape -func mulAvxTwo_3x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x6 takes 3 inputs and produces 6 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_3x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x6Xor takes 3 inputs and produces 6 outputs. -// -//go:noescape -func mulAvxTwo_3x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x7 takes 3 inputs and produces 7 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_3x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x7Xor takes 3 inputs and produces 7 outputs. -// -//go:noescape -func mulAvxTwo_3x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x8 takes 3 inputs and produces 8 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_3x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x8Xor takes 3 inputs and produces 8 outputs. -// -//go:noescape -func mulAvxTwo_3x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x9 takes 3 inputs and produces 9 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_3x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x9Xor takes 3 inputs and produces 9 outputs. -// -//go:noescape -func mulAvxTwo_3x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x10 takes 3 inputs and produces 10 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_3x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_3x10Xor takes 3 inputs and produces 10 outputs. -// -//go:noescape -func mulAvxTwo_3x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x1 takes 4 inputs and produces 1 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_4x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x1_64 takes 4 inputs and produces 1 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_4x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x1Xor takes 4 inputs and produces 1 outputs. -// -//go:noescape -func mulAvxTwo_4x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x1_64Xor takes 4 inputs and produces 1 outputs. -// -//go:noescape -func mulAvxTwo_4x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x2 takes 4 inputs and produces 2 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_4x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x2_64 takes 4 inputs and produces 2 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_4x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x2Xor takes 4 inputs and produces 2 outputs. -// -//go:noescape -func mulAvxTwo_4x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x2_64Xor takes 4 inputs and produces 2 outputs. -// -//go:noescape -func mulAvxTwo_4x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x3 takes 4 inputs and produces 3 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_4x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x3_64 takes 4 inputs and produces 3 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_4x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x3Xor takes 4 inputs and produces 3 outputs. -// -//go:noescape -func mulAvxTwo_4x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x3_64Xor takes 4 inputs and produces 3 outputs. -// -//go:noescape -func mulAvxTwo_4x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x4 takes 4 inputs and produces 4 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_4x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x4Xor takes 4 inputs and produces 4 outputs. -// -//go:noescape -func mulAvxTwo_4x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x5 takes 4 inputs and produces 5 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_4x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x5Xor takes 4 inputs and produces 5 outputs. -// -//go:noescape -func mulAvxTwo_4x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x6 takes 4 inputs and produces 6 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_4x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x6Xor takes 4 inputs and produces 6 outputs. -// -//go:noescape -func mulAvxTwo_4x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x7 takes 4 inputs and produces 7 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_4x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x7Xor takes 4 inputs and produces 7 outputs. -// -//go:noescape -func mulAvxTwo_4x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x8 takes 4 inputs and produces 8 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_4x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x8Xor takes 4 inputs and produces 8 outputs. -// -//go:noescape -func mulAvxTwo_4x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x9 takes 4 inputs and produces 9 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_4x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x9Xor takes 4 inputs and produces 9 outputs. -// -//go:noescape -func mulAvxTwo_4x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x10 takes 4 inputs and produces 10 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_4x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_4x10Xor takes 4 inputs and produces 10 outputs. -// -//go:noescape -func mulAvxTwo_4x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x1 takes 5 inputs and produces 1 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_5x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x1_64 takes 5 inputs and produces 1 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_5x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x1Xor takes 5 inputs and produces 1 outputs. -// -//go:noescape -func mulAvxTwo_5x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x1_64Xor takes 5 inputs and produces 1 outputs. -// -//go:noescape -func mulAvxTwo_5x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x2 takes 5 inputs and produces 2 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_5x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x2_64 takes 5 inputs and produces 2 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_5x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x2Xor takes 5 inputs and produces 2 outputs. -// -//go:noescape -func mulAvxTwo_5x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x2_64Xor takes 5 inputs and produces 2 outputs. -// -//go:noescape -func mulAvxTwo_5x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x3 takes 5 inputs and produces 3 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_5x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x3_64 takes 5 inputs and produces 3 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_5x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x3Xor takes 5 inputs and produces 3 outputs. -// -//go:noescape -func mulAvxTwo_5x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x3_64Xor takes 5 inputs and produces 3 outputs. -// -//go:noescape -func mulAvxTwo_5x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x4 takes 5 inputs and produces 4 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_5x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x4Xor takes 5 inputs and produces 4 outputs. -// -//go:noescape -func mulAvxTwo_5x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x5 takes 5 inputs and produces 5 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_5x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x5Xor takes 5 inputs and produces 5 outputs. -// -//go:noescape -func mulAvxTwo_5x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x6 takes 5 inputs and produces 6 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_5x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x6Xor takes 5 inputs and produces 6 outputs. -// -//go:noescape -func mulAvxTwo_5x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x7 takes 5 inputs and produces 7 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_5x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x7Xor takes 5 inputs and produces 7 outputs. -// -//go:noescape -func mulAvxTwo_5x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x8 takes 5 inputs and produces 8 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_5x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x8Xor takes 5 inputs and produces 8 outputs. -// -//go:noescape -func mulAvxTwo_5x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x9 takes 5 inputs and produces 9 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_5x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x9Xor takes 5 inputs and produces 9 outputs. -// -//go:noescape -func mulAvxTwo_5x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x10 takes 5 inputs and produces 10 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_5x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_5x10Xor takes 5 inputs and produces 10 outputs. -// -//go:noescape -func mulAvxTwo_5x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x1 takes 6 inputs and produces 1 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_6x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x1_64 takes 6 inputs and produces 1 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_6x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x1Xor takes 6 inputs and produces 1 outputs. -// -//go:noescape -func mulAvxTwo_6x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x1_64Xor takes 6 inputs and produces 1 outputs. -// -//go:noescape -func mulAvxTwo_6x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x2 takes 6 inputs and produces 2 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_6x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x2_64 takes 6 inputs and produces 2 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_6x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x2Xor takes 6 inputs and produces 2 outputs. -// -//go:noescape -func mulAvxTwo_6x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x2_64Xor takes 6 inputs and produces 2 outputs. -// -//go:noescape -func mulAvxTwo_6x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x3 takes 6 inputs and produces 3 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_6x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x3_64 takes 6 inputs and produces 3 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_6x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x3Xor takes 6 inputs and produces 3 outputs. -// -//go:noescape -func mulAvxTwo_6x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x3_64Xor takes 6 inputs and produces 3 outputs. -// -//go:noescape -func mulAvxTwo_6x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x4 takes 6 inputs and produces 4 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_6x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x4Xor takes 6 inputs and produces 4 outputs. -// -//go:noescape -func mulAvxTwo_6x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x5 takes 6 inputs and produces 5 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_6x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x5Xor takes 6 inputs and produces 5 outputs. -// -//go:noescape -func mulAvxTwo_6x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x6 takes 6 inputs and produces 6 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_6x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x6Xor takes 6 inputs and produces 6 outputs. -// -//go:noescape -func mulAvxTwo_6x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x7 takes 6 inputs and produces 7 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_6x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x7Xor takes 6 inputs and produces 7 outputs. -// -//go:noescape -func mulAvxTwo_6x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x8 takes 6 inputs and produces 8 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_6x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x8Xor takes 6 inputs and produces 8 outputs. -// -//go:noescape -func mulAvxTwo_6x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x9 takes 6 inputs and produces 9 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_6x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x9Xor takes 6 inputs and produces 9 outputs. -// -//go:noescape -func mulAvxTwo_6x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x10 takes 6 inputs and produces 10 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_6x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_6x10Xor takes 6 inputs and produces 10 outputs. -// -//go:noescape -func mulAvxTwo_6x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x1 takes 7 inputs and produces 1 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_7x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x1_64 takes 7 inputs and produces 1 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_7x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x1Xor takes 7 inputs and produces 1 outputs. -// -//go:noescape -func mulAvxTwo_7x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x1_64Xor takes 7 inputs and produces 1 outputs. -// -//go:noescape -func mulAvxTwo_7x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x2 takes 7 inputs and produces 2 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_7x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x2_64 takes 7 inputs and produces 2 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_7x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x2Xor takes 7 inputs and produces 2 outputs. -// -//go:noescape -func mulAvxTwo_7x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x2_64Xor takes 7 inputs and produces 2 outputs. -// -//go:noescape -func mulAvxTwo_7x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x3 takes 7 inputs and produces 3 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_7x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x3_64 takes 7 inputs and produces 3 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_7x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x3Xor takes 7 inputs and produces 3 outputs. -// -//go:noescape -func mulAvxTwo_7x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x3_64Xor takes 7 inputs and produces 3 outputs. -// -//go:noescape -func mulAvxTwo_7x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x4 takes 7 inputs and produces 4 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_7x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x4Xor takes 7 inputs and produces 4 outputs. -// -//go:noescape -func mulAvxTwo_7x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x5 takes 7 inputs and produces 5 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_7x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x5Xor takes 7 inputs and produces 5 outputs. -// -//go:noescape -func mulAvxTwo_7x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x6 takes 7 inputs and produces 6 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_7x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x6Xor takes 7 inputs and produces 6 outputs. -// -//go:noescape -func mulAvxTwo_7x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x7 takes 7 inputs and produces 7 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_7x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x7Xor takes 7 inputs and produces 7 outputs. -// -//go:noescape -func mulAvxTwo_7x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x8 takes 7 inputs and produces 8 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_7x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x8Xor takes 7 inputs and produces 8 outputs. -// -//go:noescape -func mulAvxTwo_7x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x9 takes 7 inputs and produces 9 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_7x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x9Xor takes 7 inputs and produces 9 outputs. -// -//go:noescape -func mulAvxTwo_7x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x10 takes 7 inputs and produces 10 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_7x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_7x10Xor takes 7 inputs and produces 10 outputs. -// -//go:noescape -func mulAvxTwo_7x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x1 takes 8 inputs and produces 1 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_8x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x1_64 takes 8 inputs and produces 1 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_8x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x1Xor takes 8 inputs and produces 1 outputs. -// -//go:noescape -func mulAvxTwo_8x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x1_64Xor takes 8 inputs and produces 1 outputs. -// -//go:noescape -func mulAvxTwo_8x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x2 takes 8 inputs and produces 2 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_8x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x2_64 takes 8 inputs and produces 2 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_8x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x2Xor takes 8 inputs and produces 2 outputs. -// -//go:noescape -func mulAvxTwo_8x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x2_64Xor takes 8 inputs and produces 2 outputs. -// -//go:noescape -func mulAvxTwo_8x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x3 takes 8 inputs and produces 3 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_8x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x3_64 takes 8 inputs and produces 3 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_8x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x3Xor takes 8 inputs and produces 3 outputs. -// -//go:noescape -func mulAvxTwo_8x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x3_64Xor takes 8 inputs and produces 3 outputs. -// -//go:noescape -func mulAvxTwo_8x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x4 takes 8 inputs and produces 4 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_8x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x4Xor takes 8 inputs and produces 4 outputs. -// -//go:noescape -func mulAvxTwo_8x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x5 takes 8 inputs and produces 5 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_8x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x5Xor takes 8 inputs and produces 5 outputs. -// -//go:noescape -func mulAvxTwo_8x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x6 takes 8 inputs and produces 6 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_8x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x6Xor takes 8 inputs and produces 6 outputs. -// -//go:noescape -func mulAvxTwo_8x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x7 takes 8 inputs and produces 7 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_8x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x7Xor takes 8 inputs and produces 7 outputs. -// -//go:noescape -func mulAvxTwo_8x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x8 takes 8 inputs and produces 8 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_8x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x8Xor takes 8 inputs and produces 8 outputs. -// -//go:noescape -func mulAvxTwo_8x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x9 takes 8 inputs and produces 9 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_8x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x9Xor takes 8 inputs and produces 9 outputs. -// -//go:noescape -func mulAvxTwo_8x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x10 takes 8 inputs and produces 10 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_8x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_8x10Xor takes 8 inputs and produces 10 outputs. -// -//go:noescape -func mulAvxTwo_8x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x1 takes 9 inputs and produces 1 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_9x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x1_64 takes 9 inputs and produces 1 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_9x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x1Xor takes 9 inputs and produces 1 outputs. -// -//go:noescape -func mulAvxTwo_9x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x1_64Xor takes 9 inputs and produces 1 outputs. -// -//go:noescape -func mulAvxTwo_9x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x2 takes 9 inputs and produces 2 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_9x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x2_64 takes 9 inputs and produces 2 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_9x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x2Xor takes 9 inputs and produces 2 outputs. -// -//go:noescape -func mulAvxTwo_9x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x2_64Xor takes 9 inputs and produces 2 outputs. -// -//go:noescape -func mulAvxTwo_9x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x3 takes 9 inputs and produces 3 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_9x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x3_64 takes 9 inputs and produces 3 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_9x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x3Xor takes 9 inputs and produces 3 outputs. -// -//go:noescape -func mulAvxTwo_9x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x3_64Xor takes 9 inputs and produces 3 outputs. -// -//go:noescape -func mulAvxTwo_9x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x4 takes 9 inputs and produces 4 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_9x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x4Xor takes 9 inputs and produces 4 outputs. -// -//go:noescape -func mulAvxTwo_9x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x5 takes 9 inputs and produces 5 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_9x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x5Xor takes 9 inputs and produces 5 outputs. -// -//go:noescape -func mulAvxTwo_9x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x6 takes 9 inputs and produces 6 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_9x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x6Xor takes 9 inputs and produces 6 outputs. -// -//go:noescape -func mulAvxTwo_9x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x7 takes 9 inputs and produces 7 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_9x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x7Xor takes 9 inputs and produces 7 outputs. -// -//go:noescape -func mulAvxTwo_9x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x8 takes 9 inputs and produces 8 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_9x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x8Xor takes 9 inputs and produces 8 outputs. -// -//go:noescape -func mulAvxTwo_9x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x9 takes 9 inputs and produces 9 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_9x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x9Xor takes 9 inputs and produces 9 outputs. -// -//go:noescape -func mulAvxTwo_9x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x10 takes 9 inputs and produces 10 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_9x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_9x10Xor takes 9 inputs and produces 10 outputs. -// -//go:noescape -func mulAvxTwo_9x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x1 takes 10 inputs and produces 1 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_10x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x1_64 takes 10 inputs and produces 1 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_10x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x1Xor takes 10 inputs and produces 1 outputs. -// -//go:noescape -func mulAvxTwo_10x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x1_64Xor takes 10 inputs and produces 1 outputs. -// -//go:noescape -func mulAvxTwo_10x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x2 takes 10 inputs and produces 2 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_10x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x2_64 takes 10 inputs and produces 2 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_10x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x2Xor takes 10 inputs and produces 2 outputs. -// -//go:noescape -func mulAvxTwo_10x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x2_64Xor takes 10 inputs and produces 2 outputs. -// -//go:noescape -func mulAvxTwo_10x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x3 takes 10 inputs and produces 3 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_10x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x3_64 takes 10 inputs and produces 3 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_10x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x3Xor takes 10 inputs and produces 3 outputs. -// -//go:noescape -func mulAvxTwo_10x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x3_64Xor takes 10 inputs and produces 3 outputs. -// -//go:noescape -func mulAvxTwo_10x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x4 takes 10 inputs and produces 4 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_10x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x4Xor takes 10 inputs and produces 4 outputs. -// -//go:noescape -func mulAvxTwo_10x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x5 takes 10 inputs and produces 5 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_10x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x5Xor takes 10 inputs and produces 5 outputs. -// -//go:noescape -func mulAvxTwo_10x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x6 takes 10 inputs and produces 6 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_10x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x6Xor takes 10 inputs and produces 6 outputs. -// -//go:noescape -func mulAvxTwo_10x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x7 takes 10 inputs and produces 7 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_10x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x7Xor takes 10 inputs and produces 7 outputs. -// -//go:noescape -func mulAvxTwo_10x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x8 takes 10 inputs and produces 8 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_10x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x8Xor takes 10 inputs and produces 8 outputs. -// -//go:noescape -func mulAvxTwo_10x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x9 takes 10 inputs and produces 9 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_10x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x9Xor takes 10 inputs and produces 9 outputs. -// -//go:noescape -func mulAvxTwo_10x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x10 takes 10 inputs and produces 10 outputs. -// The output is initialized to 0. -// -//go:noescape -func mulAvxTwo_10x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -// mulAvxTwo_10x10Xor takes 10 inputs and produces 10 outputs. -// -//go:noescape -func mulAvxTwo_10x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) - -//go:noescape -func ifftDIT2_avx2(x []byte, y []byte, table *[128]uint8) - -//go:noescape -func fftDIT2_avx2(x []byte, y []byte, table *[128]uint8) - -//go:noescape -func mulgf16_avx2(x []byte, y []byte, table *[128]uint8) - -//go:noescape -func ifftDIT4_avx512_0(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func fftDIT4_avx512_0(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func ifftDIT4_avx512_1(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func fftDIT4_avx512_1(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func ifftDIT4_avx512_2(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func fftDIT4_avx512_2(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func ifftDIT4_avx512_3(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func fftDIT4_avx512_3(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func ifftDIT4_avx512_4(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func fftDIT4_avx512_4(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func ifftDIT4_avx512_5(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func fftDIT4_avx512_5(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func ifftDIT4_avx512_6(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func fftDIT4_avx512_6(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func ifftDIT4_avx512_7(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func fftDIT4_avx512_7(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func ifftDIT4_avx2_0(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func fftDIT4_avx2_0(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func ifftDIT4_avx2_1(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func fftDIT4_avx2_1(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func ifftDIT4_avx2_2(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func fftDIT4_avx2_2(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func ifftDIT4_avx2_3(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func fftDIT4_avx2_3(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func ifftDIT4_avx2_4(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func fftDIT4_avx2_4(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func ifftDIT4_avx2_5(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func fftDIT4_avx2_5(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func ifftDIT4_avx2_6(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func fftDIT4_avx2_6(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func ifftDIT4_avx2_7(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func fftDIT4_avx2_7(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) - -//go:noescape -func ifftDIT2_ssse3(x []byte, y []byte, table *[128]uint8) - -//go:noescape -func fftDIT2_ssse3(x []byte, y []byte, table *[128]uint8) - -//go:noescape -func mulgf16_ssse3(x []byte, y []byte, table *[128]uint8) diff --git a/vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.s b/vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.s deleted file mode 100644 index 890461e..0000000 --- a/vendor/github.com/klauspost/reedsolomon/galois_gen_amd64.s +++ /dev/null @@ -1,67609 +0,0 @@ -// Code generated by command: go run gen.go -out ../galois_gen_amd64.s -stubs ../galois_gen_amd64.go -pkg=reedsolomon. DO NOT EDIT. - -//go:build !appengine && !noasm && !nogen && gc - -#include "textflag.h" - -// func _dummy_() -TEXT ·_dummy_(SB), $0 -#ifdef GOAMD64_v4 -#define XOR3WAY(ignore, a, b, dst) \ - VPTERNLOGD $0x96, a, b, dst - -#else -#define XOR3WAY(ignore, a, b, dst) \ - VPXOR a, dst, dst \ - VPXOR b, dst, dst - -#endif - RET - -// func mulAvxTwo_1x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 -TEXT ·mulAvxTwo_1x1(SB), NOSPLIT, $0-88 - // Loading all tables to registers - // Destination kept in GP registers - // Full registers estimated 6 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_1x1_end - VMOVDQU (CX), Y0 - VMOVDQU 32(CX), Y1 - MOVQ in_base+24(FP), CX - MOVQ (CX), CX - MOVQ out_base+48(FP), DX - MOVQ (DX), DX - MOVQ start+72(FP), BX - - // Add start offset to output - ADDQ BX, DX - - // Add start offset to input - ADDQ BX, CX - MOVQ $0x0000000f, BX - MOVQ BX, X3 - VPBROADCASTB X3, Y3 - -mulAvxTwo_1x1_loop: - // Load and process 32 bytes from input 0 to 1 outputs - VMOVDQU (CX), Y2 - ADDQ $0x20, CX - VPSRLQ $0x04, Y2, Y4 - VPAND Y3, Y2, Y2 - VPAND Y3, Y4, Y4 - VPSHUFB Y2, Y0, Y2 - VPSHUFB Y4, Y1, Y4 - VPXOR Y2, Y4, Y2 - - // Store 1 outputs - VMOVDQU Y2, (DX) - ADDQ $0x20, DX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x1_loop - VZEROUPPER - -mulAvxTwo_1x1_end: - RET - -// func mulAvxTwo_1x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 -TEXT ·mulAvxTwo_1x1_64(SB), $0-88 - // Loading all tables to registers - // Destination kept in GP registers - // Full registers estimated 10 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_1x1_64_end - VMOVDQU (CX), Y0 - VMOVDQU 32(CX), Y1 - MOVQ in_base+24(FP), CX - MOVQ (CX), CX - MOVQ out_base+48(FP), DX - MOVQ out_base+48(FP), DX - MOVQ (DX), DX - MOVQ start+72(FP), BX - - // Add start offset to output - ADDQ BX, DX - - // Add start offset to input - ADDQ BX, CX - MOVQ $0x0000000f, BX - MOVQ BX, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_1x1_64_loop: - // Load and process 64 bytes from input 0 to 1 outputs - VMOVDQU (CX), Y2 - VMOVDQU 32(CX), Y3 - ADDQ $0x40, CX - VPSRLQ $0x04, Y2, Y6 - VPSRLQ $0x04, Y3, Y5 - VPAND Y4, Y2, Y2 - VPAND Y4, Y3, Y3 - VPAND Y4, Y6, Y6 - VPAND Y4, Y5, Y5 - VPSHUFB Y2, Y0, Y2 - VPSHUFB Y3, Y0, Y3 - VPSHUFB Y6, Y1, Y6 - VPSHUFB Y5, Y1, Y5 - VPXOR Y2, Y6, Y2 - VPXOR Y3, Y5, Y3 - - // Store 1 outputs - VMOVDQU Y2, (DX) - VMOVDQU Y3, 32(DX) - ADDQ $0x40, DX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x1_64_loop - VZEROUPPER - -mulAvxTwo_1x1_64_end: - RET - -// func mulAvxTwo_1x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_1x1Xor(SB), NOSPLIT, $0-88 - // Loading all tables to registers - // Destination kept in GP registers - // Full registers estimated 6 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_1x1Xor_end - VMOVDQU (CX), Y0 - VMOVDQU 32(CX), Y1 - MOVQ in_base+24(FP), CX - MOVQ (CX), CX - MOVQ out_base+48(FP), DX - MOVQ (DX), DX - MOVQ start+72(FP), BX - - // Add start offset to output - ADDQ BX, DX - - // Add start offset to input - ADDQ BX, CX - MOVQ $0x0000000f, BX - MOVQ BX, X3 - VPBROADCASTB X3, Y3 - -mulAvxTwo_1x1Xor_loop: - // Load and process 32 bytes from input 0 to 1 outputs - VMOVDQU (CX), Y4 - ADDQ $0x20, CX - VPSRLQ $0x04, Y4, Y5 - VPAND Y3, Y4, Y4 - VPAND Y3, Y5, Y5 - VMOVDQU (DX), Y2 - VPSHUFB Y4, Y0, Y4 - VPSHUFB Y5, Y1, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Store 1 outputs - VMOVDQU Y2, (DX) - ADDQ $0x20, DX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x1Xor_loop - VZEROUPPER - -mulAvxTwo_1x1Xor_end: - RET - -// func mulAvxTwo_1x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_1x1_64Xor(SB), $0-88 - // Loading all tables to registers - // Destination kept in GP registers - // Full registers estimated 10 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_1x1_64Xor_end - VMOVDQU (CX), Y0 - VMOVDQU 32(CX), Y1 - MOVQ in_base+24(FP), CX - MOVQ (CX), CX - MOVQ out_base+48(FP), DX - MOVQ out_base+48(FP), DX - MOVQ (DX), DX - MOVQ start+72(FP), BX - - // Add start offset to output - ADDQ BX, DX - - // Add start offset to input - ADDQ BX, CX - MOVQ $0x0000000f, BX - MOVQ BX, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_1x1_64Xor_loop: - // Load 1 outputs - VMOVDQU (DX), Y2 - VMOVDQU 32(DX), Y3 - - // Load and process 64 bytes from input 0 to 1 outputs - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y7 - ADDQ $0x40, CX - VPSRLQ $0x04, Y5, Y6 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y5, Y5 - VPAND Y4, Y7, Y7 - VPAND Y4, Y6, Y6 - VPAND Y4, Y8, Y8 - VPSHUFB Y5, Y0, Y5 - VPSHUFB Y7, Y0, Y7 - VPSHUFB Y6, Y1, Y6 - VPSHUFB Y8, Y1, Y8 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Store 1 outputs - VMOVDQU Y2, (DX) - VMOVDQU Y3, 32(DX) - ADDQ $0x40, DX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x1_64Xor_loop - VZEROUPPER - -mulAvxTwo_1x1_64Xor_end: - RET - -// func mulAvxTwo_1x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 -TEXT ·mulAvxTwo_1x2(SB), NOSPLIT, $0-88 - // Loading all tables to registers - // Destination kept in GP registers - // Full registers estimated 11 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_1x2_end - VMOVDQU (CX), Y0 - VMOVDQU 32(CX), Y1 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - MOVQ in_base+24(FP), CX - MOVQ (CX), CX - MOVQ out_base+48(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), DX - MOVQ start+72(FP), SI - - // Add start offset to output - ADDQ SI, BX - ADDQ SI, DX - - // Add start offset to input - ADDQ SI, CX - MOVQ $0x0000000f, SI - MOVQ SI, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_1x2_loop: - // Load and process 32 bytes from input 0 to 2 outputs - VMOVDQU (CX), Y8 - ADDQ $0x20, CX - VPSRLQ $0x04, Y8, Y9 - VPAND Y6, Y8, Y8 - VPAND Y6, Y9, Y9 - VPSHUFB Y8, Y0, Y5 - VPSHUFB Y9, Y1, Y7 - VPXOR Y5, Y7, Y4 - VPSHUFB Y8, Y2, Y5 - VPSHUFB Y9, Y3, Y7 - VPXOR Y5, Y7, Y5 - - // Store 2 outputs - VMOVDQU Y4, (BX) - ADDQ $0x20, BX - VMOVDQU Y5, (DX) - ADDQ $0x20, DX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x2_loop - VZEROUPPER - -mulAvxTwo_1x2_end: - RET - -// func mulAvxTwo_1x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 -TEXT ·mulAvxTwo_1x2_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 17 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_1x2_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), DX - MOVQ out_base+48(FP), BX - MOVQ out_base+48(FP), BX - MOVQ (BX), SI - MOVQ 24(BX), BX - MOVQ start+72(FP), DI - - // Add start offset to output - ADDQ DI, SI - ADDQ DI, BX - - // Add start offset to input - ADDQ DI, DX - MOVQ $0x0000000f, DI - MOVQ DI, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_1x2_64_loop: - // Load and process 64 bytes from input 0 to 2 outputs - VMOVDQU (DX), Y7 - VMOVDQU 32(DX), Y9 - ADDQ $0x40, DX - VPSRLQ $0x04, Y7, Y8 - VPSRLQ $0x04, Y9, Y10 - VPAND Y4, Y7, Y7 - VPAND Y4, Y9, Y9 - VPAND Y4, Y8, Y8 - VPAND Y4, Y10, Y10 - VMOVDQU (CX), Y2 - VMOVDQU 32(CX), Y6 - VPSHUFB Y9, Y2, Y3 - VPSHUFB Y7, Y2, Y2 - VPSHUFB Y10, Y6, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y2, Y6, Y0 - VPXOR Y3, Y5, Y1 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y6 - VPSHUFB Y9, Y2, Y3 - VPSHUFB Y7, Y2, Y2 - VPSHUFB Y10, Y6, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y2, Y6, Y2 - VPXOR Y3, Y5, Y3 - - // Store 2 outputs - VMOVDQU Y0, (SI) - VMOVDQU Y1, 32(SI) - ADDQ $0x40, SI - VMOVDQU Y2, (BX) - VMOVDQU Y3, 32(BX) - ADDQ $0x40, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x2_64_loop - VZEROUPPER - -mulAvxTwo_1x2_64_end: - RET - -// func mulAvxTwo_1x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_1x2Xor(SB), NOSPLIT, $0-88 - // Loading all tables to registers - // Destination kept in GP registers - // Full registers estimated 11 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_1x2Xor_end - VMOVDQU (CX), Y0 - VMOVDQU 32(CX), Y1 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - MOVQ in_base+24(FP), CX - MOVQ (CX), CX - MOVQ out_base+48(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), DX - MOVQ start+72(FP), SI - - // Add start offset to output - ADDQ SI, BX - ADDQ SI, DX - - // Add start offset to input - ADDQ SI, CX - MOVQ $0x0000000f, SI - MOVQ SI, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_1x2Xor_loop: - // Load and process 32 bytes from input 0 to 2 outputs - VMOVDQU (CX), Y9 - ADDQ $0x20, CX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU (BX), Y4 - VPSHUFB Y9, Y0, Y7 - VPSHUFB Y10, Y1, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU (DX), Y5 - VPSHUFB Y9, Y2, Y7 - VPSHUFB Y10, Y3, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Store 2 outputs - VMOVDQU Y4, (BX) - ADDQ $0x20, BX - VMOVDQU Y5, (DX) - ADDQ $0x20, DX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x2Xor_loop - VZEROUPPER - -mulAvxTwo_1x2Xor_end: - RET - -// func mulAvxTwo_1x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_1x2_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 17 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_1x2_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), DX - MOVQ out_base+48(FP), BX - MOVQ out_base+48(FP), BX - MOVQ (BX), SI - MOVQ 24(BX), BX - MOVQ start+72(FP), DI - - // Add start offset to output - ADDQ DI, SI - ADDQ DI, BX - - // Add start offset to input - ADDQ DI, DX - MOVQ $0x0000000f, DI - MOVQ DI, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_1x2_64Xor_loop: - // Load 2 outputs - VMOVDQU (SI), Y0 - VMOVDQU 32(SI), Y1 - VMOVDQU (BX), Y2 - VMOVDQU 32(BX), Y3 - - // Load and process 64 bytes from input 0 to 2 outputs - VMOVDQU (DX), Y9 - VMOVDQU 32(DX), Y11 - ADDQ $0x40, DX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Store 2 outputs - VMOVDQU Y0, (SI) - VMOVDQU Y1, 32(SI) - ADDQ $0x40, SI - VMOVDQU Y2, (BX) - VMOVDQU Y3, 32(BX) - ADDQ $0x40, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x2_64Xor_loop - VZEROUPPER - -mulAvxTwo_1x2_64Xor_end: - RET - -// func mulAvxTwo_1x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 -TEXT ·mulAvxTwo_1x3(SB), NOSPLIT, $0-88 - // Loading all tables to registers - // Destination kept in GP registers - // Full registers estimated 14 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_1x3_end - VMOVDQU (CX), Y0 - VMOVDQU 32(CX), Y1 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - MOVQ in_base+24(FP), CX - MOVQ (CX), CX - MOVQ out_base+48(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ start+72(FP), DI - - // Add start offset to output - ADDQ DI, BX - ADDQ DI, SI - ADDQ DI, DX - - // Add start offset to input - ADDQ DI, CX - MOVQ $0x0000000f, DI - MOVQ DI, X9 - VPBROADCASTB X9, Y9 - -mulAvxTwo_1x3_loop: - // Load and process 32 bytes from input 0 to 3 outputs - VMOVDQU (CX), Y11 - ADDQ $0x20, CX - VPSRLQ $0x04, Y11, Y12 - VPAND Y9, Y11, Y11 - VPAND Y9, Y12, Y12 - VPSHUFB Y11, Y0, Y8 - VPSHUFB Y12, Y1, Y10 - VPXOR Y8, Y10, Y6 - VPSHUFB Y11, Y2, Y8 - VPSHUFB Y12, Y3, Y10 - VPXOR Y8, Y10, Y7 - VPSHUFB Y11, Y4, Y8 - VPSHUFB Y12, Y5, Y10 - VPXOR Y8, Y10, Y8 - - // Store 3 outputs - VMOVDQU Y6, (BX) - ADDQ $0x20, BX - VMOVDQU Y7, (SI) - ADDQ $0x20, SI - VMOVDQU Y8, (DX) - ADDQ $0x20, DX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x3_loop - VZEROUPPER - -mulAvxTwo_1x3_end: - RET - -// func mulAvxTwo_1x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 -TEXT ·mulAvxTwo_1x3_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 22 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_1x3_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), DX - MOVQ out_base+48(FP), BX - MOVQ out_base+48(FP), BX - MOVQ (BX), SI - MOVQ 24(BX), DI - MOVQ 48(BX), BX - MOVQ start+72(FP), R8 - - // Add start offset to output - ADDQ R8, SI - ADDQ R8, DI - ADDQ R8, BX - - // Add start offset to input - ADDQ R8, DX - MOVQ $0x0000000f, R8 - MOVQ R8, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_1x3_64_loop: - // Load and process 64 bytes from input 0 to 3 outputs - VMOVDQU (DX), Y9 - VMOVDQU 32(DX), Y11 - ADDQ $0x40, DX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y6, Y9, Y9 - VPAND Y6, Y11, Y11 - VPAND Y6, Y10, Y10 - VPAND Y6, Y12, Y12 - VMOVDQU (CX), Y4 - VMOVDQU 32(CX), Y8 - VPSHUFB Y11, Y4, Y5 - VPSHUFB Y9, Y4, Y4 - VPSHUFB Y12, Y8, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y4, Y8, Y0 - VPXOR Y5, Y7, Y1 - VMOVDQU 64(CX), Y4 - VMOVDQU 96(CX), Y8 - VPSHUFB Y11, Y4, Y5 - VPSHUFB Y9, Y4, Y4 - VPSHUFB Y12, Y8, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y4, Y8, Y2 - VPXOR Y5, Y7, Y3 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y8 - VPSHUFB Y11, Y4, Y5 - VPSHUFB Y9, Y4, Y4 - VPSHUFB Y12, Y8, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y4, Y8, Y4 - VPXOR Y5, Y7, Y5 - - // Store 3 outputs - VMOVDQU Y0, (SI) - VMOVDQU Y1, 32(SI) - ADDQ $0x40, SI - VMOVDQU Y2, (DI) - VMOVDQU Y3, 32(DI) - ADDQ $0x40, DI - VMOVDQU Y4, (BX) - VMOVDQU Y5, 32(BX) - ADDQ $0x40, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x3_64_loop - VZEROUPPER - -mulAvxTwo_1x3_64_end: - RET - -// func mulAvxTwo_1x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_1x3Xor(SB), NOSPLIT, $0-88 - // Loading all tables to registers - // Destination kept in GP registers - // Full registers estimated 14 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_1x3Xor_end - VMOVDQU (CX), Y0 - VMOVDQU 32(CX), Y1 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - MOVQ in_base+24(FP), CX - MOVQ (CX), CX - MOVQ out_base+48(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ start+72(FP), DI - - // Add start offset to output - ADDQ DI, BX - ADDQ DI, SI - ADDQ DI, DX - - // Add start offset to input - ADDQ DI, CX - MOVQ $0x0000000f, DI - MOVQ DI, X9 - VPBROADCASTB X9, Y9 - -mulAvxTwo_1x3Xor_loop: - // Load and process 32 bytes from input 0 to 3 outputs - VMOVDQU (CX), Y12 - ADDQ $0x20, CX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU (BX), Y6 - VPSHUFB Y12, Y0, Y10 - VPSHUFB Y13, Y1, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU (SI), Y7 - VPSHUFB Y12, Y2, Y10 - VPSHUFB Y13, Y3, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU (DX), Y8 - VPSHUFB Y12, Y4, Y10 - VPSHUFB Y13, Y5, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Store 3 outputs - VMOVDQU Y6, (BX) - ADDQ $0x20, BX - VMOVDQU Y7, (SI) - ADDQ $0x20, SI - VMOVDQU Y8, (DX) - ADDQ $0x20, DX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x3Xor_loop - VZEROUPPER - -mulAvxTwo_1x3Xor_end: - RET - -// func mulAvxTwo_1x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_1x3_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 22 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_1x3_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), DX - MOVQ out_base+48(FP), BX - MOVQ out_base+48(FP), BX - MOVQ (BX), SI - MOVQ 24(BX), DI - MOVQ 48(BX), BX - MOVQ start+72(FP), R8 - - // Add start offset to output - ADDQ R8, SI - ADDQ R8, DI - ADDQ R8, BX - - // Add start offset to input - ADDQ R8, DX - MOVQ $0x0000000f, R8 - MOVQ R8, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_1x3_64Xor_loop: - // Load 3 outputs - VMOVDQU (SI), Y0 - VMOVDQU 32(SI), Y1 - VMOVDQU (DI), Y2 - VMOVDQU 32(DI), Y3 - VMOVDQU (BX), Y4 - VMOVDQU 32(BX), Y5 - - // Load and process 64 bytes from input 0 to 3 outputs - VMOVDQU (DX), Y11 - VMOVDQU 32(DX), Y13 - ADDQ $0x40, DX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Store 3 outputs - VMOVDQU Y0, (SI) - VMOVDQU Y1, 32(SI) - ADDQ $0x40, SI - VMOVDQU Y2, (DI) - VMOVDQU Y3, 32(DI) - ADDQ $0x40, DI - VMOVDQU Y4, (BX) - VMOVDQU Y5, 32(BX) - ADDQ $0x40, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x3_64Xor_loop - VZEROUPPER - -mulAvxTwo_1x3_64Xor_end: - RET - -// func mulAvxTwo_1x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 -TEXT ·mulAvxTwo_1x4(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 17 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_1x4_end - MOVQ in_base+24(FP), DX - MOVQ (DX), DX - MOVQ out_base+48(FP), BX - MOVQ (BX), SI - MOVQ 24(BX), DI - MOVQ 48(BX), R8 - MOVQ 72(BX), BX - MOVQ start+72(FP), R9 - - // Add start offset to output - ADDQ R9, SI - ADDQ R9, DI - ADDQ R9, R8 - ADDQ R9, BX - - // Add start offset to input - ADDQ R9, DX - MOVQ $0x0000000f, R9 - MOVQ R9, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_1x4_loop: - // Load and process 32 bytes from input 0 to 4 outputs - VMOVDQU (DX), Y6 - ADDQ $0x20, DX - VPSRLQ $0x04, Y6, Y7 - VPAND Y4, Y6, Y6 - VPAND Y4, Y7, Y7 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y7, Y5, Y5 - VPXOR Y3, Y5, Y0 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y7, Y5, Y5 - VPXOR Y3, Y5, Y1 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y7, Y5, Y5 - VPXOR Y3, Y5, Y2 - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y7, Y5, Y5 - VPXOR Y3, Y5, Y3 - - // Store 4 outputs - VMOVDQU Y0, (SI) - ADDQ $0x20, SI - VMOVDQU Y1, (DI) - ADDQ $0x20, DI - VMOVDQU Y2, (R8) - ADDQ $0x20, R8 - VMOVDQU Y3, (BX) - ADDQ $0x20, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x4_loop - VZEROUPPER - -mulAvxTwo_1x4_end: - RET - -// func mulAvxTwo_1x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_1x4Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 17 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_1x4Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), DX - MOVQ out_base+48(FP), BX - MOVQ (BX), SI - MOVQ 24(BX), DI - MOVQ 48(BX), R8 - MOVQ 72(BX), BX - MOVQ start+72(FP), R9 - - // Add start offset to output - ADDQ R9, SI - ADDQ R9, DI - ADDQ R9, R8 - ADDQ R9, BX - - // Add start offset to input - ADDQ R9, DX - MOVQ $0x0000000f, R9 - MOVQ R9, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_1x4Xor_loop: - // Load and process 32 bytes from input 0 to 4 outputs - VMOVDQU (DX), Y7 - ADDQ $0x20, DX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU (SI), Y0 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU (DI), Y1 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU (R8), Y2 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU (BX), Y3 - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Store 4 outputs - VMOVDQU Y0, (SI) - ADDQ $0x20, SI - VMOVDQU Y1, (DI) - ADDQ $0x20, DI - VMOVDQU Y2, (R8) - ADDQ $0x20, R8 - VMOVDQU Y3, (BX) - ADDQ $0x20, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x4Xor_loop - VZEROUPPER - -mulAvxTwo_1x4Xor_end: - RET - -// func mulAvxTwo_1x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 -TEXT ·mulAvxTwo_1x5(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 20 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_1x5_end - MOVQ in_base+24(FP), DX - MOVQ (DX), DX - MOVQ out_base+48(FP), BX - MOVQ (BX), SI - MOVQ 24(BX), DI - MOVQ 48(BX), R8 - MOVQ 72(BX), R9 - MOVQ 96(BX), BX - MOVQ start+72(FP), R10 - - // Add start offset to output - ADDQ R10, SI - ADDQ R10, DI - ADDQ R10, R8 - ADDQ R10, R9 - ADDQ R10, BX - - // Add start offset to input - ADDQ R10, DX - MOVQ $0x0000000f, R10 - MOVQ R10, X5 - VPBROADCASTB X5, Y5 - -mulAvxTwo_1x5_loop: - // Load and process 32 bytes from input 0 to 5 outputs - VMOVDQU (DX), Y7 - ADDQ $0x20, DX - VPSRLQ $0x04, Y7, Y8 - VPAND Y5, Y7, Y7 - VPAND Y5, Y8, Y8 - VMOVDQU (CX), Y4 - VMOVDQU 32(CX), Y6 - VPSHUFB Y7, Y4, Y4 - VPSHUFB Y8, Y6, Y6 - VPXOR Y4, Y6, Y0 - VMOVDQU 64(CX), Y4 - VMOVDQU 96(CX), Y6 - VPSHUFB Y7, Y4, Y4 - VPSHUFB Y8, Y6, Y6 - VPXOR Y4, Y6, Y1 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y6 - VPSHUFB Y7, Y4, Y4 - VPSHUFB Y8, Y6, Y6 - VPXOR Y4, Y6, Y2 - VMOVDQU 192(CX), Y4 - VMOVDQU 224(CX), Y6 - VPSHUFB Y7, Y4, Y4 - VPSHUFB Y8, Y6, Y6 - VPXOR Y4, Y6, Y3 - VMOVDQU 256(CX), Y4 - VMOVDQU 288(CX), Y6 - VPSHUFB Y7, Y4, Y4 - VPSHUFB Y8, Y6, Y6 - VPXOR Y4, Y6, Y4 - - // Store 5 outputs - VMOVDQU Y0, (SI) - ADDQ $0x20, SI - VMOVDQU Y1, (DI) - ADDQ $0x20, DI - VMOVDQU Y2, (R8) - ADDQ $0x20, R8 - VMOVDQU Y3, (R9) - ADDQ $0x20, R9 - VMOVDQU Y4, (BX) - ADDQ $0x20, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x5_loop - VZEROUPPER - -mulAvxTwo_1x5_end: - RET - -// func mulAvxTwo_1x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_1x5Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 20 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_1x5Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), DX - MOVQ out_base+48(FP), BX - MOVQ (BX), SI - MOVQ 24(BX), DI - MOVQ 48(BX), R8 - MOVQ 72(BX), R9 - MOVQ 96(BX), BX - MOVQ start+72(FP), R10 - - // Add start offset to output - ADDQ R10, SI - ADDQ R10, DI - ADDQ R10, R8 - ADDQ R10, R9 - ADDQ R10, BX - - // Add start offset to input - ADDQ R10, DX - MOVQ $0x0000000f, R10 - MOVQ R10, X5 - VPBROADCASTB X5, Y5 - -mulAvxTwo_1x5Xor_loop: - // Load and process 32 bytes from input 0 to 5 outputs - VMOVDQU (DX), Y8 - ADDQ $0x20, DX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU (SI), Y0 - VMOVDQU (CX), Y6 - VMOVDQU 32(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU (DI), Y1 - VMOVDQU 64(CX), Y6 - VMOVDQU 96(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU (R8), Y2 - VMOVDQU 128(CX), Y6 - VMOVDQU 160(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU (R9), Y3 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU (BX), Y4 - VMOVDQU 256(CX), Y6 - VMOVDQU 288(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Store 5 outputs - VMOVDQU Y0, (SI) - ADDQ $0x20, SI - VMOVDQU Y1, (DI) - ADDQ $0x20, DI - VMOVDQU Y2, (R8) - ADDQ $0x20, R8 - VMOVDQU Y3, (R9) - ADDQ $0x20, R9 - VMOVDQU Y4, (BX) - ADDQ $0x20, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x5Xor_loop - VZEROUPPER - -mulAvxTwo_1x5Xor_end: - RET - -// func mulAvxTwo_1x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 -TEXT ·mulAvxTwo_1x6(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 23 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_1x6_end - MOVQ in_base+24(FP), DX - MOVQ (DX), DX - MOVQ out_base+48(FP), BX - MOVQ (BX), SI - MOVQ 24(BX), DI - MOVQ 48(BX), R8 - MOVQ 72(BX), R9 - MOVQ 96(BX), R10 - MOVQ 120(BX), BX - MOVQ start+72(FP), R11 - - // Add start offset to output - ADDQ R11, SI - ADDQ R11, DI - ADDQ R11, R8 - ADDQ R11, R9 - ADDQ R11, R10 - ADDQ R11, BX - - // Add start offset to input - ADDQ R11, DX - MOVQ $0x0000000f, R11 - MOVQ R11, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_1x6_loop: - // Load and process 32 bytes from input 0 to 6 outputs - VMOVDQU (DX), Y8 - ADDQ $0x20, DX - VPSRLQ $0x04, Y8, Y9 - VPAND Y6, Y8, Y8 - VPAND Y6, Y9, Y9 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y7 - VPSHUFB Y8, Y5, Y5 - VPSHUFB Y9, Y7, Y7 - VPXOR Y5, Y7, Y0 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y7 - VPSHUFB Y8, Y5, Y5 - VPSHUFB Y9, Y7, Y7 - VPXOR Y5, Y7, Y1 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y7 - VPSHUFB Y8, Y5, Y5 - VPSHUFB Y9, Y7, Y7 - VPXOR Y5, Y7, Y2 - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y7 - VPSHUFB Y8, Y5, Y5 - VPSHUFB Y9, Y7, Y7 - VPXOR Y5, Y7, Y3 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y7 - VPSHUFB Y8, Y5, Y5 - VPSHUFB Y9, Y7, Y7 - VPXOR Y5, Y7, Y4 - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y7 - VPSHUFB Y8, Y5, Y5 - VPSHUFB Y9, Y7, Y7 - VPXOR Y5, Y7, Y5 - - // Store 6 outputs - VMOVDQU Y0, (SI) - ADDQ $0x20, SI - VMOVDQU Y1, (DI) - ADDQ $0x20, DI - VMOVDQU Y2, (R8) - ADDQ $0x20, R8 - VMOVDQU Y3, (R9) - ADDQ $0x20, R9 - VMOVDQU Y4, (R10) - ADDQ $0x20, R10 - VMOVDQU Y5, (BX) - ADDQ $0x20, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x6_loop - VZEROUPPER - -mulAvxTwo_1x6_end: - RET - -// func mulAvxTwo_1x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_1x6Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 23 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_1x6Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), DX - MOVQ out_base+48(FP), BX - MOVQ (BX), SI - MOVQ 24(BX), DI - MOVQ 48(BX), R8 - MOVQ 72(BX), R9 - MOVQ 96(BX), R10 - MOVQ 120(BX), BX - MOVQ start+72(FP), R11 - - // Add start offset to output - ADDQ R11, SI - ADDQ R11, DI - ADDQ R11, R8 - ADDQ R11, R9 - ADDQ R11, R10 - ADDQ R11, BX - - // Add start offset to input - ADDQ R11, DX - MOVQ $0x0000000f, R11 - MOVQ R11, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_1x6Xor_loop: - // Load and process 32 bytes from input 0 to 6 outputs - VMOVDQU (DX), Y9 - ADDQ $0x20, DX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU (SI), Y0 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU (DI), Y1 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU (R8), Y2 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU (R9), Y3 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU (R10), Y4 - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU (BX), Y5 - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Store 6 outputs - VMOVDQU Y0, (SI) - ADDQ $0x20, SI - VMOVDQU Y1, (DI) - ADDQ $0x20, DI - VMOVDQU Y2, (R8) - ADDQ $0x20, R8 - VMOVDQU Y3, (R9) - ADDQ $0x20, R9 - VMOVDQU Y4, (R10) - ADDQ $0x20, R10 - VMOVDQU Y5, (BX) - ADDQ $0x20, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x6Xor_loop - VZEROUPPER - -mulAvxTwo_1x6Xor_end: - RET - -// func mulAvxTwo_1x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 -TEXT ·mulAvxTwo_1x7(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 26 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_1x7_end - MOVQ in_base+24(FP), DX - MOVQ (DX), DX - MOVQ out_base+48(FP), BX - MOVQ (BX), SI - MOVQ 24(BX), DI - MOVQ 48(BX), R8 - MOVQ 72(BX), R9 - MOVQ 96(BX), R10 - MOVQ 120(BX), R11 - MOVQ 144(BX), BX - MOVQ start+72(FP), R12 - - // Add start offset to output - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, R9 - ADDQ R12, R10 - ADDQ R12, R11 - ADDQ R12, BX - - // Add start offset to input - ADDQ R12, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X7 - VPBROADCASTB X7, Y7 - -mulAvxTwo_1x7_loop: - // Load and process 32 bytes from input 0 to 7 outputs - VMOVDQU (DX), Y9 - ADDQ $0x20, DX - VPSRLQ $0x04, Y9, Y10 - VPAND Y7, Y9, Y9 - VPAND Y7, Y10, Y10 - VMOVDQU (CX), Y6 - VMOVDQU 32(CX), Y8 - VPSHUFB Y9, Y6, Y6 - VPSHUFB Y10, Y8, Y8 - VPXOR Y6, Y8, Y0 - VMOVDQU 64(CX), Y6 - VMOVDQU 96(CX), Y8 - VPSHUFB Y9, Y6, Y6 - VPSHUFB Y10, Y8, Y8 - VPXOR Y6, Y8, Y1 - VMOVDQU 128(CX), Y6 - VMOVDQU 160(CX), Y8 - VPSHUFB Y9, Y6, Y6 - VPSHUFB Y10, Y8, Y8 - VPXOR Y6, Y8, Y2 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y8 - VPSHUFB Y9, Y6, Y6 - VPSHUFB Y10, Y8, Y8 - VPXOR Y6, Y8, Y3 - VMOVDQU 256(CX), Y6 - VMOVDQU 288(CX), Y8 - VPSHUFB Y9, Y6, Y6 - VPSHUFB Y10, Y8, Y8 - VPXOR Y6, Y8, Y4 - VMOVDQU 320(CX), Y6 - VMOVDQU 352(CX), Y8 - VPSHUFB Y9, Y6, Y6 - VPSHUFB Y10, Y8, Y8 - VPXOR Y6, Y8, Y5 - VMOVDQU 384(CX), Y6 - VMOVDQU 416(CX), Y8 - VPSHUFB Y9, Y6, Y6 - VPSHUFB Y10, Y8, Y8 - VPXOR Y6, Y8, Y6 - - // Store 7 outputs - VMOVDQU Y0, (SI) - ADDQ $0x20, SI - VMOVDQU Y1, (DI) - ADDQ $0x20, DI - VMOVDQU Y2, (R8) - ADDQ $0x20, R8 - VMOVDQU Y3, (R9) - ADDQ $0x20, R9 - VMOVDQU Y4, (R10) - ADDQ $0x20, R10 - VMOVDQU Y5, (R11) - ADDQ $0x20, R11 - VMOVDQU Y6, (BX) - ADDQ $0x20, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x7_loop - VZEROUPPER - -mulAvxTwo_1x7_end: - RET - -// func mulAvxTwo_1x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_1x7Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 26 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_1x7Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), DX - MOVQ out_base+48(FP), BX - MOVQ (BX), SI - MOVQ 24(BX), DI - MOVQ 48(BX), R8 - MOVQ 72(BX), R9 - MOVQ 96(BX), R10 - MOVQ 120(BX), R11 - MOVQ 144(BX), BX - MOVQ start+72(FP), R12 - - // Add start offset to output - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, R9 - ADDQ R12, R10 - ADDQ R12, R11 - ADDQ R12, BX - - // Add start offset to input - ADDQ R12, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X7 - VPBROADCASTB X7, Y7 - -mulAvxTwo_1x7Xor_loop: - // Load and process 32 bytes from input 0 to 7 outputs - VMOVDQU (DX), Y10 - ADDQ $0x20, DX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU (SI), Y0 - VMOVDQU (CX), Y8 - VMOVDQU 32(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU (DI), Y1 - VMOVDQU 64(CX), Y8 - VMOVDQU 96(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU (R8), Y2 - VMOVDQU 128(CX), Y8 - VMOVDQU 160(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU (R9), Y3 - VMOVDQU 192(CX), Y8 - VMOVDQU 224(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU (R10), Y4 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU (R11), Y5 - VMOVDQU 320(CX), Y8 - VMOVDQU 352(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU (BX), Y6 - VMOVDQU 384(CX), Y8 - VMOVDQU 416(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Store 7 outputs - VMOVDQU Y0, (SI) - ADDQ $0x20, SI - VMOVDQU Y1, (DI) - ADDQ $0x20, DI - VMOVDQU Y2, (R8) - ADDQ $0x20, R8 - VMOVDQU Y3, (R9) - ADDQ $0x20, R9 - VMOVDQU Y4, (R10) - ADDQ $0x20, R10 - VMOVDQU Y5, (R11) - ADDQ $0x20, R11 - VMOVDQU Y6, (BX) - ADDQ $0x20, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x7Xor_loop - VZEROUPPER - -mulAvxTwo_1x7Xor_end: - RET - -// func mulAvxTwo_1x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 -TEXT ·mulAvxTwo_1x8(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 29 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_1x8_end - MOVQ in_base+24(FP), DX - MOVQ (DX), DX - MOVQ out_base+48(FP), BX - MOVQ (BX), SI - MOVQ 24(BX), DI - MOVQ 48(BX), R8 - MOVQ 72(BX), R9 - MOVQ 96(BX), R10 - MOVQ 120(BX), R11 - MOVQ 144(BX), R12 - MOVQ 168(BX), BX - MOVQ start+72(FP), R13 - - // Add start offset to output - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, R12 - ADDQ R13, BX - - // Add start offset to input - ADDQ R13, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X8 - VPBROADCASTB X8, Y8 - -mulAvxTwo_1x8_loop: - // Load and process 32 bytes from input 0 to 8 outputs - VMOVDQU (DX), Y10 - ADDQ $0x20, DX - VPSRLQ $0x04, Y10, Y11 - VPAND Y8, Y10, Y10 - VPAND Y8, Y11, Y11 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y9 - VPSHUFB Y10, Y7, Y7 - VPSHUFB Y11, Y9, Y9 - VPXOR Y7, Y9, Y0 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y9 - VPSHUFB Y10, Y7, Y7 - VPSHUFB Y11, Y9, Y9 - VPXOR Y7, Y9, Y1 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y9 - VPSHUFB Y10, Y7, Y7 - VPSHUFB Y11, Y9, Y9 - VPXOR Y7, Y9, Y2 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y9 - VPSHUFB Y10, Y7, Y7 - VPSHUFB Y11, Y9, Y9 - VPXOR Y7, Y9, Y3 - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y9 - VPSHUFB Y10, Y7, Y7 - VPSHUFB Y11, Y9, Y9 - VPXOR Y7, Y9, Y4 - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y9 - VPSHUFB Y10, Y7, Y7 - VPSHUFB Y11, Y9, Y9 - VPXOR Y7, Y9, Y5 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y9 - VPSHUFB Y10, Y7, Y7 - VPSHUFB Y11, Y9, Y9 - VPXOR Y7, Y9, Y6 - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y9 - VPSHUFB Y10, Y7, Y7 - VPSHUFB Y11, Y9, Y9 - VPXOR Y7, Y9, Y7 - - // Store 8 outputs - VMOVDQU Y0, (SI) - ADDQ $0x20, SI - VMOVDQU Y1, (DI) - ADDQ $0x20, DI - VMOVDQU Y2, (R8) - ADDQ $0x20, R8 - VMOVDQU Y3, (R9) - ADDQ $0x20, R9 - VMOVDQU Y4, (R10) - ADDQ $0x20, R10 - VMOVDQU Y5, (R11) - ADDQ $0x20, R11 - VMOVDQU Y6, (R12) - ADDQ $0x20, R12 - VMOVDQU Y7, (BX) - ADDQ $0x20, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x8_loop - VZEROUPPER - -mulAvxTwo_1x8_end: - RET - -// func mulAvxTwo_1x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_1x8Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 29 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_1x8Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), DX - MOVQ out_base+48(FP), BX - MOVQ (BX), SI - MOVQ 24(BX), DI - MOVQ 48(BX), R8 - MOVQ 72(BX), R9 - MOVQ 96(BX), R10 - MOVQ 120(BX), R11 - MOVQ 144(BX), R12 - MOVQ 168(BX), BX - MOVQ start+72(FP), R13 - - // Add start offset to output - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, R12 - ADDQ R13, BX - - // Add start offset to input - ADDQ R13, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X8 - VPBROADCASTB X8, Y8 - -mulAvxTwo_1x8Xor_loop: - // Load and process 32 bytes from input 0 to 8 outputs - VMOVDQU (DX), Y11 - ADDQ $0x20, DX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU (SI), Y0 - VMOVDQU (CX), Y9 - VMOVDQU 32(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU (DI), Y1 - VMOVDQU 64(CX), Y9 - VMOVDQU 96(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU (R8), Y2 - VMOVDQU 128(CX), Y9 - VMOVDQU 160(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU (R9), Y3 - VMOVDQU 192(CX), Y9 - VMOVDQU 224(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU (R10), Y4 - VMOVDQU 256(CX), Y9 - VMOVDQU 288(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU (R11), Y5 - VMOVDQU 320(CX), Y9 - VMOVDQU 352(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU (R12), Y6 - VMOVDQU 384(CX), Y9 - VMOVDQU 416(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU (BX), Y7 - VMOVDQU 448(CX), Y9 - VMOVDQU 480(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Store 8 outputs - VMOVDQU Y0, (SI) - ADDQ $0x20, SI - VMOVDQU Y1, (DI) - ADDQ $0x20, DI - VMOVDQU Y2, (R8) - ADDQ $0x20, R8 - VMOVDQU Y3, (R9) - ADDQ $0x20, R9 - VMOVDQU Y4, (R10) - ADDQ $0x20, R10 - VMOVDQU Y5, (R11) - ADDQ $0x20, R11 - VMOVDQU Y6, (R12) - ADDQ $0x20, R12 - VMOVDQU Y7, (BX) - ADDQ $0x20, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x8Xor_loop - VZEROUPPER - -mulAvxTwo_1x8Xor_end: - RET - -// func mulAvxTwo_1x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 -TEXT ·mulAvxTwo_1x9(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 32 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_1x9_end - MOVQ in_base+24(FP), DX - MOVQ (DX), DX - MOVQ out_base+48(FP), BX - MOVQ (BX), SI - MOVQ 24(BX), DI - MOVQ 48(BX), R8 - MOVQ 72(BX), R9 - MOVQ 96(BX), R10 - MOVQ 120(BX), R11 - MOVQ 144(BX), R12 - MOVQ 168(BX), R13 - MOVQ 192(BX), BX - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, R13 - ADDQ R14, BX - - // Add start offset to input - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X9 - VPBROADCASTB X9, Y9 - -mulAvxTwo_1x9_loop: - // Load and process 32 bytes from input 0 to 9 outputs - VMOVDQU (DX), Y11 - ADDQ $0x20, DX - VPSRLQ $0x04, Y11, Y12 - VPAND Y9, Y11, Y11 - VPAND Y9, Y12, Y12 - VMOVDQU (CX), Y8 - VMOVDQU 32(CX), Y10 - VPSHUFB Y11, Y8, Y8 - VPSHUFB Y12, Y10, Y10 - VPXOR Y8, Y10, Y0 - VMOVDQU 64(CX), Y8 - VMOVDQU 96(CX), Y10 - VPSHUFB Y11, Y8, Y8 - VPSHUFB Y12, Y10, Y10 - VPXOR Y8, Y10, Y1 - VMOVDQU 128(CX), Y8 - VMOVDQU 160(CX), Y10 - VPSHUFB Y11, Y8, Y8 - VPSHUFB Y12, Y10, Y10 - VPXOR Y8, Y10, Y2 - VMOVDQU 192(CX), Y8 - VMOVDQU 224(CX), Y10 - VPSHUFB Y11, Y8, Y8 - VPSHUFB Y12, Y10, Y10 - VPXOR Y8, Y10, Y3 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y10 - VPSHUFB Y11, Y8, Y8 - VPSHUFB Y12, Y10, Y10 - VPXOR Y8, Y10, Y4 - VMOVDQU 320(CX), Y8 - VMOVDQU 352(CX), Y10 - VPSHUFB Y11, Y8, Y8 - VPSHUFB Y12, Y10, Y10 - VPXOR Y8, Y10, Y5 - VMOVDQU 384(CX), Y8 - VMOVDQU 416(CX), Y10 - VPSHUFB Y11, Y8, Y8 - VPSHUFB Y12, Y10, Y10 - VPXOR Y8, Y10, Y6 - VMOVDQU 448(CX), Y8 - VMOVDQU 480(CX), Y10 - VPSHUFB Y11, Y8, Y8 - VPSHUFB Y12, Y10, Y10 - VPXOR Y8, Y10, Y7 - VMOVDQU 512(CX), Y8 - VMOVDQU 544(CX), Y10 - VPSHUFB Y11, Y8, Y8 - VPSHUFB Y12, Y10, Y10 - VPXOR Y8, Y10, Y8 - - // Store 9 outputs - VMOVDQU Y0, (SI) - ADDQ $0x20, SI - VMOVDQU Y1, (DI) - ADDQ $0x20, DI - VMOVDQU Y2, (R8) - ADDQ $0x20, R8 - VMOVDQU Y3, (R9) - ADDQ $0x20, R9 - VMOVDQU Y4, (R10) - ADDQ $0x20, R10 - VMOVDQU Y5, (R11) - ADDQ $0x20, R11 - VMOVDQU Y6, (R12) - ADDQ $0x20, R12 - VMOVDQU Y7, (R13) - ADDQ $0x20, R13 - VMOVDQU Y8, (BX) - ADDQ $0x20, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x9_loop - VZEROUPPER - -mulAvxTwo_1x9_end: - RET - -// func mulAvxTwo_1x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_1x9Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 32 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_1x9Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), DX - MOVQ out_base+48(FP), BX - MOVQ (BX), SI - MOVQ 24(BX), DI - MOVQ 48(BX), R8 - MOVQ 72(BX), R9 - MOVQ 96(BX), R10 - MOVQ 120(BX), R11 - MOVQ 144(BX), R12 - MOVQ 168(BX), R13 - MOVQ 192(BX), BX - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, R13 - ADDQ R14, BX - - // Add start offset to input - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X9 - VPBROADCASTB X9, Y9 - -mulAvxTwo_1x9Xor_loop: - // Load and process 32 bytes from input 0 to 9 outputs - VMOVDQU (DX), Y12 - ADDQ $0x20, DX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU (SI), Y0 - VMOVDQU (CX), Y10 - VMOVDQU 32(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU (DI), Y1 - VMOVDQU 64(CX), Y10 - VMOVDQU 96(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU (R8), Y2 - VMOVDQU 128(CX), Y10 - VMOVDQU 160(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU (R9), Y3 - VMOVDQU 192(CX), Y10 - VMOVDQU 224(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU (R10), Y4 - VMOVDQU 256(CX), Y10 - VMOVDQU 288(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU (R11), Y5 - VMOVDQU 320(CX), Y10 - VMOVDQU 352(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU (R12), Y6 - VMOVDQU 384(CX), Y10 - VMOVDQU 416(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU (R13), Y7 - VMOVDQU 448(CX), Y10 - VMOVDQU 480(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU (BX), Y8 - VMOVDQU 512(CX), Y10 - VMOVDQU 544(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Store 9 outputs - VMOVDQU Y0, (SI) - ADDQ $0x20, SI - VMOVDQU Y1, (DI) - ADDQ $0x20, DI - VMOVDQU Y2, (R8) - ADDQ $0x20, R8 - VMOVDQU Y3, (R9) - ADDQ $0x20, R9 - VMOVDQU Y4, (R10) - ADDQ $0x20, R10 - VMOVDQU Y5, (R11) - ADDQ $0x20, R11 - VMOVDQU Y6, (R12) - ADDQ $0x20, R12 - VMOVDQU Y7, (R13) - ADDQ $0x20, R13 - VMOVDQU Y8, (BX) - ADDQ $0x20, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x9Xor_loop - VZEROUPPER - -mulAvxTwo_1x9Xor_end: - RET - -// func mulAvxTwo_1x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, SSE2 -TEXT ·mulAvxTwo_1x10(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 35 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_1x10_end - MOVQ in_base+24(FP), DX - MOVQ (DX), DX - MOVQ out_base+48(FP), BX - MOVQ (BX), SI - MOVQ 24(BX), DI - MOVQ 48(BX), R8 - MOVQ 72(BX), R9 - MOVQ 96(BX), R10 - MOVQ 120(BX), R11 - MOVQ 144(BX), R12 - MOVQ 168(BX), R13 - MOVQ 192(BX), R14 - MOVQ 216(BX), BX - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, R14 - ADDQ R15, BX - - // Add start offset to input - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X10 - VPBROADCASTB X10, Y10 - -mulAvxTwo_1x10_loop: - // Load and process 32 bytes from input 0 to 10 outputs - VMOVDQU (DX), Y12 - ADDQ $0x20, DX - VPSRLQ $0x04, Y12, Y13 - VPAND Y10, Y12, Y12 - VPAND Y10, Y13, Y13 - VMOVDQU (CX), Y9 - VMOVDQU 32(CX), Y11 - VPSHUFB Y12, Y9, Y9 - VPSHUFB Y13, Y11, Y11 - VPXOR Y9, Y11, Y0 - VMOVDQU 64(CX), Y9 - VMOVDQU 96(CX), Y11 - VPSHUFB Y12, Y9, Y9 - VPSHUFB Y13, Y11, Y11 - VPXOR Y9, Y11, Y1 - VMOVDQU 128(CX), Y9 - VMOVDQU 160(CX), Y11 - VPSHUFB Y12, Y9, Y9 - VPSHUFB Y13, Y11, Y11 - VPXOR Y9, Y11, Y2 - VMOVDQU 192(CX), Y9 - VMOVDQU 224(CX), Y11 - VPSHUFB Y12, Y9, Y9 - VPSHUFB Y13, Y11, Y11 - VPXOR Y9, Y11, Y3 - VMOVDQU 256(CX), Y9 - VMOVDQU 288(CX), Y11 - VPSHUFB Y12, Y9, Y9 - VPSHUFB Y13, Y11, Y11 - VPXOR Y9, Y11, Y4 - VMOVDQU 320(CX), Y9 - VMOVDQU 352(CX), Y11 - VPSHUFB Y12, Y9, Y9 - VPSHUFB Y13, Y11, Y11 - VPXOR Y9, Y11, Y5 - VMOVDQU 384(CX), Y9 - VMOVDQU 416(CX), Y11 - VPSHUFB Y12, Y9, Y9 - VPSHUFB Y13, Y11, Y11 - VPXOR Y9, Y11, Y6 - VMOVDQU 448(CX), Y9 - VMOVDQU 480(CX), Y11 - VPSHUFB Y12, Y9, Y9 - VPSHUFB Y13, Y11, Y11 - VPXOR Y9, Y11, Y7 - VMOVDQU 512(CX), Y9 - VMOVDQU 544(CX), Y11 - VPSHUFB Y12, Y9, Y9 - VPSHUFB Y13, Y11, Y11 - VPXOR Y9, Y11, Y8 - VMOVDQU 576(CX), Y9 - VMOVDQU 608(CX), Y11 - VPSHUFB Y12, Y9, Y9 - VPSHUFB Y13, Y11, Y11 - VPXOR Y9, Y11, Y9 - - // Store 10 outputs - VMOVDQU Y0, (SI) - ADDQ $0x20, SI - VMOVDQU Y1, (DI) - ADDQ $0x20, DI - VMOVDQU Y2, (R8) - ADDQ $0x20, R8 - VMOVDQU Y3, (R9) - ADDQ $0x20, R9 - VMOVDQU Y4, (R10) - ADDQ $0x20, R10 - VMOVDQU Y5, (R11) - ADDQ $0x20, R11 - VMOVDQU Y6, (R12) - ADDQ $0x20, R12 - VMOVDQU Y7, (R13) - ADDQ $0x20, R13 - VMOVDQU Y8, (R14) - ADDQ $0x20, R14 - VMOVDQU Y9, (BX) - ADDQ $0x20, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x10_loop - VZEROUPPER - -mulAvxTwo_1x10_end: - RET - -// func mulAvxTwo_1x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_1x10Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 35 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_1x10Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), DX - MOVQ out_base+48(FP), BX - MOVQ (BX), SI - MOVQ 24(BX), DI - MOVQ 48(BX), R8 - MOVQ 72(BX), R9 - MOVQ 96(BX), R10 - MOVQ 120(BX), R11 - MOVQ 144(BX), R12 - MOVQ 168(BX), R13 - MOVQ 192(BX), R14 - MOVQ 216(BX), BX - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, R14 - ADDQ R15, BX - - // Add start offset to input - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X10 - VPBROADCASTB X10, Y10 - -mulAvxTwo_1x10Xor_loop: - // Load and process 32 bytes from input 0 to 10 outputs - VMOVDQU (DX), Y13 - ADDQ $0x20, DX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU (SI), Y0 - VMOVDQU (CX), Y11 - VMOVDQU 32(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU (DI), Y1 - VMOVDQU 64(CX), Y11 - VMOVDQU 96(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU (R8), Y2 - VMOVDQU 128(CX), Y11 - VMOVDQU 160(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU (R9), Y3 - VMOVDQU 192(CX), Y11 - VMOVDQU 224(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU (R10), Y4 - VMOVDQU 256(CX), Y11 - VMOVDQU 288(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU (R11), Y5 - VMOVDQU 320(CX), Y11 - VMOVDQU 352(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU (R12), Y6 - VMOVDQU 384(CX), Y11 - VMOVDQU 416(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU (R13), Y7 - VMOVDQU 448(CX), Y11 - VMOVDQU 480(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU (R14), Y8 - VMOVDQU 512(CX), Y11 - VMOVDQU 544(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU (BX), Y9 - VMOVDQU 576(CX), Y11 - VMOVDQU 608(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Store 10 outputs - VMOVDQU Y0, (SI) - ADDQ $0x20, SI - VMOVDQU Y1, (DI) - ADDQ $0x20, DI - VMOVDQU Y2, (R8) - ADDQ $0x20, R8 - VMOVDQU Y3, (R9) - ADDQ $0x20, R9 - VMOVDQU Y4, (R10) - ADDQ $0x20, R10 - VMOVDQU Y5, (R11) - ADDQ $0x20, R11 - VMOVDQU Y6, (R12) - ADDQ $0x20, R12 - VMOVDQU Y7, (R13) - ADDQ $0x20, R13 - VMOVDQU Y8, (R14) - ADDQ $0x20, R14 - VMOVDQU Y9, (BX) - ADDQ $0x20, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_1x10Xor_loop - VZEROUPPER - -mulAvxTwo_1x10Xor_end: - RET - -// func mulAvxTwo_2x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x1(SB), NOSPLIT, $0-88 - // Loading all tables to registers - // Destination kept in GP registers - // Full registers estimated 8 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_2x1_end - VMOVDQU (CX), Y0 - VMOVDQU 32(CX), Y1 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - MOVQ in_base+24(FP), CX - MOVQ (CX), DX - MOVQ 24(CX), CX - MOVQ out_base+48(FP), BX - MOVQ (BX), BX - MOVQ start+72(FP), SI - - // Add start offset to output - ADDQ SI, BX - - // Add start offset to input - ADDQ SI, DX - ADDQ SI, CX - MOVQ $0x0000000f, SI - MOVQ SI, X5 - VPBROADCASTB X5, Y5 - -mulAvxTwo_2x1_loop: - // Load and process 32 bytes from input 0 to 1 outputs - VMOVDQU (DX), Y6 - ADDQ $0x20, DX - VPSRLQ $0x04, Y6, Y7 - VPAND Y5, Y6, Y6 - VPAND Y5, Y7, Y7 - VPSHUFB Y6, Y0, Y6 - VPSHUFB Y7, Y1, Y7 - VPXOR Y6, Y7, Y4 - - // Load and process 32 bytes from input 1 to 1 outputs - VMOVDQU (CX), Y6 - ADDQ $0x20, CX - VPSRLQ $0x04, Y6, Y7 - VPAND Y5, Y6, Y6 - VPAND Y5, Y7, Y7 - VPSHUFB Y6, Y2, Y6 - VPSHUFB Y7, Y3, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Store 1 outputs - VMOVDQU Y4, (BX) - ADDQ $0x20, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x1_loop - VZEROUPPER - -mulAvxTwo_2x1_end: - RET - -// func mulAvxTwo_2x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x1_64(SB), $0-88 - // Loading all tables to registers - // Destination kept in GP registers - // Full registers estimated 14 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_2x1_64_end - VMOVDQU (CX), Y0 - VMOVDQU 32(CX), Y1 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - MOVQ in_base+24(FP), CX - MOVQ (CX), DX - MOVQ 24(CX), CX - MOVQ out_base+48(FP), BX - MOVQ out_base+48(FP), BX - MOVQ (BX), BX - MOVQ start+72(FP), SI - - // Add start offset to output - ADDQ SI, BX - - // Add start offset to input - ADDQ SI, DX - ADDQ SI, CX - MOVQ $0x0000000f, SI - MOVQ SI, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_2x1_64_loop: - // Load and process 64 bytes from input 0 to 1 outputs - VMOVDQU (DX), Y7 - VMOVDQU 32(DX), Y9 - ADDQ $0x40, DX - VPSRLQ $0x04, Y7, Y8 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y7, Y7 - VPAND Y6, Y9, Y9 - VPAND Y6, Y8, Y8 - VPAND Y6, Y10, Y10 - VPSHUFB Y7, Y0, Y7 - VPSHUFB Y9, Y0, Y9 - VPSHUFB Y8, Y1, Y8 - VPSHUFB Y10, Y1, Y10 - VPXOR Y7, Y8, Y4 - VPXOR Y9, Y10, Y5 - - // Load and process 64 bytes from input 1 to 1 outputs - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y9 - ADDQ $0x40, CX - VPSRLQ $0x04, Y7, Y8 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y7, Y7 - VPAND Y6, Y9, Y9 - VPAND Y6, Y8, Y8 - VPAND Y6, Y10, Y10 - VPSHUFB Y7, Y2, Y7 - VPSHUFB Y9, Y2, Y9 - VPSHUFB Y8, Y3, Y8 - VPSHUFB Y10, Y3, Y10 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Store 1 outputs - VMOVDQU Y4, (BX) - VMOVDQU Y5, 32(BX) - ADDQ $0x40, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x1_64_loop - VZEROUPPER - -mulAvxTwo_2x1_64_end: - RET - -// func mulAvxTwo_2x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x1Xor(SB), NOSPLIT, $0-88 - // Loading all tables to registers - // Destination kept in GP registers - // Full registers estimated 8 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_2x1Xor_end - VMOVDQU (CX), Y0 - VMOVDQU 32(CX), Y1 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - MOVQ in_base+24(FP), CX - MOVQ (CX), DX - MOVQ 24(CX), CX - MOVQ out_base+48(FP), BX - MOVQ (BX), BX - MOVQ start+72(FP), SI - - // Add start offset to output - ADDQ SI, BX - - // Add start offset to input - ADDQ SI, DX - ADDQ SI, CX - MOVQ $0x0000000f, SI - MOVQ SI, X5 - VPBROADCASTB X5, Y5 - -mulAvxTwo_2x1Xor_loop: - // Load and process 32 bytes from input 0 to 1 outputs - VMOVDQU (DX), Y6 - ADDQ $0x20, DX - VPSRLQ $0x04, Y6, Y7 - VPAND Y5, Y6, Y6 - VPAND Y5, Y7, Y7 - VMOVDQU (BX), Y4 - VPSHUFB Y6, Y0, Y6 - VPSHUFB Y7, Y1, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 1 to 1 outputs - VMOVDQU (CX), Y6 - ADDQ $0x20, CX - VPSRLQ $0x04, Y6, Y7 - VPAND Y5, Y6, Y6 - VPAND Y5, Y7, Y7 - VPSHUFB Y6, Y2, Y6 - VPSHUFB Y7, Y3, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Store 1 outputs - VMOVDQU Y4, (BX) - ADDQ $0x20, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x1Xor_loop - VZEROUPPER - -mulAvxTwo_2x1Xor_end: - RET - -// func mulAvxTwo_2x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x1_64Xor(SB), $0-88 - // Loading all tables to registers - // Destination kept in GP registers - // Full registers estimated 14 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_2x1_64Xor_end - VMOVDQU (CX), Y0 - VMOVDQU 32(CX), Y1 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - MOVQ in_base+24(FP), CX - MOVQ (CX), DX - MOVQ 24(CX), CX - MOVQ out_base+48(FP), BX - MOVQ out_base+48(FP), BX - MOVQ (BX), BX - MOVQ start+72(FP), SI - - // Add start offset to output - ADDQ SI, BX - - // Add start offset to input - ADDQ SI, DX - ADDQ SI, CX - MOVQ $0x0000000f, SI - MOVQ SI, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_2x1_64Xor_loop: - // Load 1 outputs - VMOVDQU (BX), Y4 - VMOVDQU 32(BX), Y5 - - // Load and process 64 bytes from input 0 to 1 outputs - VMOVDQU (DX), Y7 - VMOVDQU 32(DX), Y9 - ADDQ $0x40, DX - VPSRLQ $0x04, Y7, Y8 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y7, Y7 - VPAND Y6, Y9, Y9 - VPAND Y6, Y8, Y8 - VPAND Y6, Y10, Y10 - VPSHUFB Y7, Y0, Y7 - VPSHUFB Y9, Y0, Y9 - VPSHUFB Y8, Y1, Y8 - VPSHUFB Y10, Y1, Y10 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 1 to 1 outputs - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y9 - ADDQ $0x40, CX - VPSRLQ $0x04, Y7, Y8 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y7, Y7 - VPAND Y6, Y9, Y9 - VPAND Y6, Y8, Y8 - VPAND Y6, Y10, Y10 - VPSHUFB Y7, Y2, Y7 - VPSHUFB Y9, Y2, Y9 - VPSHUFB Y8, Y3, Y8 - VPSHUFB Y10, Y3, Y10 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Store 1 outputs - VMOVDQU Y4, (BX) - VMOVDQU Y5, 32(BX) - ADDQ $0x40, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x1_64Xor_loop - VZEROUPPER - -mulAvxTwo_2x1_64Xor_end: - RET - -// func mulAvxTwo_2x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x2(SB), NOSPLIT, $0-88 - // Loading all tables to registers - // Destination kept in GP registers - // Full registers estimated 15 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_2x2_end - VMOVDQU (CX), Y0 - VMOVDQU 32(CX), Y1 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - MOVQ in_base+24(FP), CX - MOVQ (CX), DX - MOVQ 24(CX), CX - MOVQ out_base+48(FP), BX - MOVQ (BX), SI - MOVQ 24(BX), BX - MOVQ start+72(FP), DI - - // Add start offset to output - ADDQ DI, SI - ADDQ DI, BX - - // Add start offset to input - ADDQ DI, DX - ADDQ DI, CX - MOVQ $0x0000000f, DI - MOVQ DI, X10 - VPBROADCASTB X10, Y10 - -mulAvxTwo_2x2_loop: - // Load and process 32 bytes from input 0 to 2 outputs - VMOVDQU (DX), Y13 - ADDQ $0x20, DX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VPSHUFB Y13, Y0, Y11 - VPSHUFB Y14, Y1, Y12 - VPXOR Y11, Y12, Y8 - VPSHUFB Y13, Y2, Y11 - VPSHUFB Y14, Y3, Y12 - VPXOR Y11, Y12, Y9 - - // Load and process 32 bytes from input 1 to 2 outputs - VMOVDQU (CX), Y13 - ADDQ $0x20, CX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VPSHUFB Y13, Y4, Y11 - VPSHUFB Y14, Y5, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VPSHUFB Y13, Y6, Y11 - VPSHUFB Y14, Y7, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Store 2 outputs - VMOVDQU Y8, (SI) - ADDQ $0x20, SI - VMOVDQU Y9, (BX) - ADDQ $0x20, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x2_loop - VZEROUPPER - -mulAvxTwo_2x2_end: - RET - -// func mulAvxTwo_2x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x2_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 25 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_2x2_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), DX - MOVQ out_base+48(FP), SI - MOVQ out_base+48(FP), SI - MOVQ (SI), DI - MOVQ 24(SI), SI - MOVQ start+72(FP), R8 - - // Add start offset to output - ADDQ R8, DI - ADDQ R8, SI - - // Add start offset to input - ADDQ R8, BX - ADDQ R8, DX - MOVQ $0x0000000f, R8 - MOVQ R8, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_2x2_64_loop: - // Load and process 64 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y9 - VMOVDQU 32(BX), Y11 - ADDQ $0x40, BX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y0 - VPXOR Y7, Y8, Y1 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y2 - VPXOR Y7, Y8, Y3 - - // Load and process 64 bytes from input 1 to 2 outputs - VMOVDQU (DX), Y9 - VMOVDQU 32(DX), Y11 - ADDQ $0x40, DX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Store 2 outputs - VMOVDQU Y0, (DI) - VMOVDQU Y1, 32(DI) - ADDQ $0x40, DI - VMOVDQU Y2, (SI) - VMOVDQU Y3, 32(SI) - ADDQ $0x40, SI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x2_64_loop - VZEROUPPER - -mulAvxTwo_2x2_64_end: - RET - -// func mulAvxTwo_2x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x2Xor(SB), NOSPLIT, $0-88 - // Loading all tables to registers - // Destination kept in GP registers - // Full registers estimated 15 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_2x2Xor_end - VMOVDQU (CX), Y0 - VMOVDQU 32(CX), Y1 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - MOVQ in_base+24(FP), CX - MOVQ (CX), DX - MOVQ 24(CX), CX - MOVQ out_base+48(FP), BX - MOVQ (BX), SI - MOVQ 24(BX), BX - MOVQ start+72(FP), DI - - // Add start offset to output - ADDQ DI, SI - ADDQ DI, BX - - // Add start offset to input - ADDQ DI, DX - ADDQ DI, CX - MOVQ $0x0000000f, DI - MOVQ DI, X10 - VPBROADCASTB X10, Y10 - -mulAvxTwo_2x2Xor_loop: - // Load and process 32 bytes from input 0 to 2 outputs - VMOVDQU (DX), Y13 - ADDQ $0x20, DX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU (SI), Y8 - VPSHUFB Y13, Y0, Y11 - VPSHUFB Y14, Y1, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU (BX), Y9 - VPSHUFB Y13, Y2, Y11 - VPSHUFB Y14, Y3, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 1 to 2 outputs - VMOVDQU (CX), Y13 - ADDQ $0x20, CX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VPSHUFB Y13, Y4, Y11 - VPSHUFB Y14, Y5, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VPSHUFB Y13, Y6, Y11 - VPSHUFB Y14, Y7, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Store 2 outputs - VMOVDQU Y8, (SI) - ADDQ $0x20, SI - VMOVDQU Y9, (BX) - ADDQ $0x20, BX - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x2Xor_loop - VZEROUPPER - -mulAvxTwo_2x2Xor_end: - RET - -// func mulAvxTwo_2x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x2_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 25 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_2x2_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), DX - MOVQ out_base+48(FP), SI - MOVQ out_base+48(FP), SI - MOVQ (SI), DI - MOVQ 24(SI), SI - MOVQ start+72(FP), R8 - - // Add start offset to output - ADDQ R8, DI - ADDQ R8, SI - - // Add start offset to input - ADDQ R8, BX - ADDQ R8, DX - MOVQ $0x0000000f, R8 - MOVQ R8, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_2x2_64Xor_loop: - // Load 2 outputs - VMOVDQU (DI), Y0 - VMOVDQU 32(DI), Y1 - VMOVDQU (SI), Y2 - VMOVDQU 32(SI), Y3 - - // Load and process 64 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y9 - VMOVDQU 32(BX), Y11 - ADDQ $0x40, BX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 1 to 2 outputs - VMOVDQU (DX), Y9 - VMOVDQU 32(DX), Y11 - ADDQ $0x40, DX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Store 2 outputs - VMOVDQU Y0, (DI) - VMOVDQU Y1, 32(DI) - ADDQ $0x40, DI - VMOVDQU Y2, (SI) - VMOVDQU Y3, 32(SI) - ADDQ $0x40, SI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x2_64Xor_loop - VZEROUPPER - -mulAvxTwo_2x2_64Xor_end: - RET - -// func mulAvxTwo_2x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x3(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 20 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_2x3_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), DX - MOVQ out_base+48(FP), SI - MOVQ (SI), DI - MOVQ 24(SI), R8 - MOVQ 48(SI), SI - MOVQ start+72(FP), R9 - - // Add start offset to output - ADDQ R9, DI - ADDQ R9, R8 - ADDQ R9, SI - - // Add start offset to input - ADDQ R9, BX - ADDQ R9, DX - MOVQ $0x0000000f, R9 - MOVQ R9, X3 - VPBROADCASTB X3, Y3 - -mulAvxTwo_2x3_loop: - // Load and process 32 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y6 - ADDQ $0x20, BX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU (CX), Y4 - VMOVDQU 32(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y0 - VMOVDQU 64(CX), Y4 - VMOVDQU 96(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y1 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y2 - - // Load and process 32 bytes from input 1 to 3 outputs - VMOVDQU (DX), Y6 - ADDQ $0x20, DX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 192(CX), Y4 - VMOVDQU 224(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 256(CX), Y4 - VMOVDQU 288(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 320(CX), Y4 - VMOVDQU 352(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Store 3 outputs - VMOVDQU Y0, (DI) - ADDQ $0x20, DI - VMOVDQU Y1, (R8) - ADDQ $0x20, R8 - VMOVDQU Y2, (SI) - ADDQ $0x20, SI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x3_loop - VZEROUPPER - -mulAvxTwo_2x3_end: - RET - -// func mulAvxTwo_2x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x3_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 34 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_2x3_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), DX - MOVQ out_base+48(FP), SI - MOVQ out_base+48(FP), SI - MOVQ (SI), DI - MOVQ 24(SI), R8 - MOVQ 48(SI), SI - MOVQ start+72(FP), R9 - - // Add start offset to output - ADDQ R9, DI - ADDQ R9, R8 - ADDQ R9, SI - - // Add start offset to input - ADDQ R9, BX - ADDQ R9, DX - MOVQ $0x0000000f, R9 - MOVQ R9, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_2x3_64_loop: - // Load and process 64 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y11 - VMOVDQU 32(BX), Y13 - ADDQ $0x40, BX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y0 - VPXOR Y9, Y10, Y1 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y2 - VPXOR Y9, Y10, Y3 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y4 - VPXOR Y9, Y10, Y5 - - // Load and process 64 bytes from input 1 to 3 outputs - VMOVDQU (DX), Y11 - VMOVDQU 32(DX), Y13 - ADDQ $0x40, DX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Store 3 outputs - VMOVDQU Y0, (DI) - VMOVDQU Y1, 32(DI) - ADDQ $0x40, DI - VMOVDQU Y2, (R8) - VMOVDQU Y3, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y4, (SI) - VMOVDQU Y5, 32(SI) - ADDQ $0x40, SI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x3_64_loop - VZEROUPPER - -mulAvxTwo_2x3_64_end: - RET - -// func mulAvxTwo_2x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x3Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 20 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_2x3Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), DX - MOVQ out_base+48(FP), SI - MOVQ (SI), DI - MOVQ 24(SI), R8 - MOVQ 48(SI), SI - MOVQ start+72(FP), R9 - - // Add start offset to output - ADDQ R9, DI - ADDQ R9, R8 - ADDQ R9, SI - - // Add start offset to input - ADDQ R9, BX - ADDQ R9, DX - MOVQ $0x0000000f, R9 - MOVQ R9, X3 - VPBROADCASTB X3, Y3 - -mulAvxTwo_2x3Xor_loop: - // Load and process 32 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y6 - ADDQ $0x20, BX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU (DI), Y0 - VMOVDQU (CX), Y4 - VMOVDQU 32(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU (R8), Y1 - VMOVDQU 64(CX), Y4 - VMOVDQU 96(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU (SI), Y2 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 1 to 3 outputs - VMOVDQU (DX), Y6 - ADDQ $0x20, DX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 192(CX), Y4 - VMOVDQU 224(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 256(CX), Y4 - VMOVDQU 288(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 320(CX), Y4 - VMOVDQU 352(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Store 3 outputs - VMOVDQU Y0, (DI) - ADDQ $0x20, DI - VMOVDQU Y1, (R8) - ADDQ $0x20, R8 - VMOVDQU Y2, (SI) - ADDQ $0x20, SI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x3Xor_loop - VZEROUPPER - -mulAvxTwo_2x3Xor_end: - RET - -// func mulAvxTwo_2x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x3_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 34 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_2x3_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), DX - MOVQ out_base+48(FP), SI - MOVQ out_base+48(FP), SI - MOVQ (SI), DI - MOVQ 24(SI), R8 - MOVQ 48(SI), SI - MOVQ start+72(FP), R9 - - // Add start offset to output - ADDQ R9, DI - ADDQ R9, R8 - ADDQ R9, SI - - // Add start offset to input - ADDQ R9, BX - ADDQ R9, DX - MOVQ $0x0000000f, R9 - MOVQ R9, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_2x3_64Xor_loop: - // Load 3 outputs - VMOVDQU (DI), Y0 - VMOVDQU 32(DI), Y1 - VMOVDQU (R8), Y2 - VMOVDQU 32(R8), Y3 - VMOVDQU (SI), Y4 - VMOVDQU 32(SI), Y5 - - // Load and process 64 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y11 - VMOVDQU 32(BX), Y13 - ADDQ $0x40, BX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 1 to 3 outputs - VMOVDQU (DX), Y11 - VMOVDQU 32(DX), Y13 - ADDQ $0x40, DX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Store 3 outputs - VMOVDQU Y0, (DI) - VMOVDQU Y1, 32(DI) - ADDQ $0x40, DI - VMOVDQU Y2, (R8) - VMOVDQU Y3, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y4, (SI) - VMOVDQU Y5, 32(SI) - ADDQ $0x40, SI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x3_64Xor_loop - VZEROUPPER - -mulAvxTwo_2x3_64Xor_end: - RET - -// func mulAvxTwo_2x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x4(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 25 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_2x4_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), DX - MOVQ out_base+48(FP), SI - MOVQ (SI), DI - MOVQ 24(SI), R8 - MOVQ 48(SI), R9 - MOVQ 72(SI), SI - MOVQ start+72(FP), R10 - - // Add start offset to output - ADDQ R10, DI - ADDQ R10, R8 - ADDQ R10, R9 - ADDQ R10, SI - - // Add start offset to input - ADDQ R10, BX - ADDQ R10, DX - MOVQ $0x0000000f, R10 - MOVQ R10, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_2x4_loop: - // Load and process 32 bytes from input 0 to 4 outputs - VMOVDQU (BX), Y7 - ADDQ $0x20, BX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y0 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y1 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y2 - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y3 - - // Load and process 32 bytes from input 1 to 4 outputs - VMOVDQU (DX), Y7 - ADDQ $0x20, DX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Store 4 outputs - VMOVDQU Y0, (DI) - ADDQ $0x20, DI - VMOVDQU Y1, (R8) - ADDQ $0x20, R8 - VMOVDQU Y2, (R9) - ADDQ $0x20, R9 - VMOVDQU Y3, (SI) - ADDQ $0x20, SI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x4_loop - VZEROUPPER - -mulAvxTwo_2x4_end: - RET - -// func mulAvxTwo_2x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x4Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 25 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_2x4Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), DX - MOVQ out_base+48(FP), SI - MOVQ (SI), DI - MOVQ 24(SI), R8 - MOVQ 48(SI), R9 - MOVQ 72(SI), SI - MOVQ start+72(FP), R10 - - // Add start offset to output - ADDQ R10, DI - ADDQ R10, R8 - ADDQ R10, R9 - ADDQ R10, SI - - // Add start offset to input - ADDQ R10, BX - ADDQ R10, DX - MOVQ $0x0000000f, R10 - MOVQ R10, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_2x4Xor_loop: - // Load and process 32 bytes from input 0 to 4 outputs - VMOVDQU (BX), Y7 - ADDQ $0x20, BX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU (DI), Y0 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU (R8), Y1 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU (R9), Y2 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU (SI), Y3 - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 1 to 4 outputs - VMOVDQU (DX), Y7 - ADDQ $0x20, DX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Store 4 outputs - VMOVDQU Y0, (DI) - ADDQ $0x20, DI - VMOVDQU Y1, (R8) - ADDQ $0x20, R8 - VMOVDQU Y2, (R9) - ADDQ $0x20, R9 - VMOVDQU Y3, (SI) - ADDQ $0x20, SI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x4Xor_loop - VZEROUPPER - -mulAvxTwo_2x4Xor_end: - RET - -// func mulAvxTwo_2x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x5(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 30 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_2x5_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), DX - MOVQ out_base+48(FP), SI - MOVQ (SI), DI - MOVQ 24(SI), R8 - MOVQ 48(SI), R9 - MOVQ 72(SI), R10 - MOVQ 96(SI), SI - MOVQ start+72(FP), R11 - - // Add start offset to output - ADDQ R11, DI - ADDQ R11, R8 - ADDQ R11, R9 - ADDQ R11, R10 - ADDQ R11, SI - - // Add start offset to input - ADDQ R11, BX - ADDQ R11, DX - MOVQ $0x0000000f, R11 - MOVQ R11, X5 - VPBROADCASTB X5, Y5 - -mulAvxTwo_2x5_loop: - // Load and process 32 bytes from input 0 to 5 outputs - VMOVDQU (BX), Y8 - ADDQ $0x20, BX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU (CX), Y6 - VMOVDQU 32(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y0 - VMOVDQU 64(CX), Y6 - VMOVDQU 96(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y1 - VMOVDQU 128(CX), Y6 - VMOVDQU 160(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y2 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y3 - VMOVDQU 256(CX), Y6 - VMOVDQU 288(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y4 - - // Load and process 32 bytes from input 1 to 5 outputs - VMOVDQU (DX), Y8 - ADDQ $0x20, DX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 320(CX), Y6 - VMOVDQU 352(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 384(CX), Y6 - VMOVDQU 416(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 448(CX), Y6 - VMOVDQU 480(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 512(CX), Y6 - VMOVDQU 544(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 576(CX), Y6 - VMOVDQU 608(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Store 5 outputs - VMOVDQU Y0, (DI) - ADDQ $0x20, DI - VMOVDQU Y1, (R8) - ADDQ $0x20, R8 - VMOVDQU Y2, (R9) - ADDQ $0x20, R9 - VMOVDQU Y3, (R10) - ADDQ $0x20, R10 - VMOVDQU Y4, (SI) - ADDQ $0x20, SI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x5_loop - VZEROUPPER - -mulAvxTwo_2x5_end: - RET - -// func mulAvxTwo_2x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x5Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 30 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_2x5Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), DX - MOVQ out_base+48(FP), SI - MOVQ (SI), DI - MOVQ 24(SI), R8 - MOVQ 48(SI), R9 - MOVQ 72(SI), R10 - MOVQ 96(SI), SI - MOVQ start+72(FP), R11 - - // Add start offset to output - ADDQ R11, DI - ADDQ R11, R8 - ADDQ R11, R9 - ADDQ R11, R10 - ADDQ R11, SI - - // Add start offset to input - ADDQ R11, BX - ADDQ R11, DX - MOVQ $0x0000000f, R11 - MOVQ R11, X5 - VPBROADCASTB X5, Y5 - -mulAvxTwo_2x5Xor_loop: - // Load and process 32 bytes from input 0 to 5 outputs - VMOVDQU (BX), Y8 - ADDQ $0x20, BX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU (DI), Y0 - VMOVDQU (CX), Y6 - VMOVDQU 32(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU (R8), Y1 - VMOVDQU 64(CX), Y6 - VMOVDQU 96(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU (R9), Y2 - VMOVDQU 128(CX), Y6 - VMOVDQU 160(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU (R10), Y3 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU (SI), Y4 - VMOVDQU 256(CX), Y6 - VMOVDQU 288(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 1 to 5 outputs - VMOVDQU (DX), Y8 - ADDQ $0x20, DX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 320(CX), Y6 - VMOVDQU 352(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 384(CX), Y6 - VMOVDQU 416(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 448(CX), Y6 - VMOVDQU 480(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 512(CX), Y6 - VMOVDQU 544(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 576(CX), Y6 - VMOVDQU 608(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Store 5 outputs - VMOVDQU Y0, (DI) - ADDQ $0x20, DI - VMOVDQU Y1, (R8) - ADDQ $0x20, R8 - VMOVDQU Y2, (R9) - ADDQ $0x20, R9 - VMOVDQU Y3, (R10) - ADDQ $0x20, R10 - VMOVDQU Y4, (SI) - ADDQ $0x20, SI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x5Xor_loop - VZEROUPPER - -mulAvxTwo_2x5Xor_end: - RET - -// func mulAvxTwo_2x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x6(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 35 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_2x6_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), DX - MOVQ out_base+48(FP), SI - MOVQ (SI), DI - MOVQ 24(SI), R8 - MOVQ 48(SI), R9 - MOVQ 72(SI), R10 - MOVQ 96(SI), R11 - MOVQ 120(SI), SI - MOVQ start+72(FP), R12 - - // Add start offset to output - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, R9 - ADDQ R12, R10 - ADDQ R12, R11 - ADDQ R12, SI - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_2x6_loop: - // Load and process 32 bytes from input 0 to 6 outputs - VMOVDQU (BX), Y9 - ADDQ $0x20, BX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y0 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y1 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y2 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y3 - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y4 - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y5 - - // Load and process 32 bytes from input 1 to 6 outputs - VMOVDQU (DX), Y9 - ADDQ $0x20, DX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Store 6 outputs - VMOVDQU Y0, (DI) - ADDQ $0x20, DI - VMOVDQU Y1, (R8) - ADDQ $0x20, R8 - VMOVDQU Y2, (R9) - ADDQ $0x20, R9 - VMOVDQU Y3, (R10) - ADDQ $0x20, R10 - VMOVDQU Y4, (R11) - ADDQ $0x20, R11 - VMOVDQU Y5, (SI) - ADDQ $0x20, SI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x6_loop - VZEROUPPER - -mulAvxTwo_2x6_end: - RET - -// func mulAvxTwo_2x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x6Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 35 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_2x6Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), DX - MOVQ out_base+48(FP), SI - MOVQ (SI), DI - MOVQ 24(SI), R8 - MOVQ 48(SI), R9 - MOVQ 72(SI), R10 - MOVQ 96(SI), R11 - MOVQ 120(SI), SI - MOVQ start+72(FP), R12 - - // Add start offset to output - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, R9 - ADDQ R12, R10 - ADDQ R12, R11 - ADDQ R12, SI - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_2x6Xor_loop: - // Load and process 32 bytes from input 0 to 6 outputs - VMOVDQU (BX), Y9 - ADDQ $0x20, BX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU (DI), Y0 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU (R8), Y1 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU (R9), Y2 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU (R10), Y3 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU (R11), Y4 - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU (SI), Y5 - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 1 to 6 outputs - VMOVDQU (DX), Y9 - ADDQ $0x20, DX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Store 6 outputs - VMOVDQU Y0, (DI) - ADDQ $0x20, DI - VMOVDQU Y1, (R8) - ADDQ $0x20, R8 - VMOVDQU Y2, (R9) - ADDQ $0x20, R9 - VMOVDQU Y3, (R10) - ADDQ $0x20, R10 - VMOVDQU Y4, (R11) - ADDQ $0x20, R11 - VMOVDQU Y5, (SI) - ADDQ $0x20, SI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x6Xor_loop - VZEROUPPER - -mulAvxTwo_2x6Xor_end: - RET - -// func mulAvxTwo_2x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x7(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 40 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_2x7_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), DX - MOVQ out_base+48(FP), SI - MOVQ (SI), DI - MOVQ 24(SI), R8 - MOVQ 48(SI), R9 - MOVQ 72(SI), R10 - MOVQ 96(SI), R11 - MOVQ 120(SI), R12 - MOVQ 144(SI), SI - MOVQ start+72(FP), R13 - - // Add start offset to output - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, R12 - ADDQ R13, SI - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X7 - VPBROADCASTB X7, Y7 - -mulAvxTwo_2x7_loop: - // Load and process 32 bytes from input 0 to 7 outputs - VMOVDQU (BX), Y10 - ADDQ $0x20, BX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU (CX), Y8 - VMOVDQU 32(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y0 - VMOVDQU 64(CX), Y8 - VMOVDQU 96(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y1 - VMOVDQU 128(CX), Y8 - VMOVDQU 160(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y2 - VMOVDQU 192(CX), Y8 - VMOVDQU 224(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y3 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y4 - VMOVDQU 320(CX), Y8 - VMOVDQU 352(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y5 - VMOVDQU 384(CX), Y8 - VMOVDQU 416(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y6 - - // Load and process 32 bytes from input 1 to 7 outputs - VMOVDQU (DX), Y10 - ADDQ $0x20, DX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 448(CX), Y8 - VMOVDQU 480(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 512(CX), Y8 - VMOVDQU 544(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 576(CX), Y8 - VMOVDQU 608(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 640(CX), Y8 - VMOVDQU 672(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 704(CX), Y8 - VMOVDQU 736(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 768(CX), Y8 - VMOVDQU 800(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 832(CX), Y8 - VMOVDQU 864(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Store 7 outputs - VMOVDQU Y0, (DI) - ADDQ $0x20, DI - VMOVDQU Y1, (R8) - ADDQ $0x20, R8 - VMOVDQU Y2, (R9) - ADDQ $0x20, R9 - VMOVDQU Y3, (R10) - ADDQ $0x20, R10 - VMOVDQU Y4, (R11) - ADDQ $0x20, R11 - VMOVDQU Y5, (R12) - ADDQ $0x20, R12 - VMOVDQU Y6, (SI) - ADDQ $0x20, SI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x7_loop - VZEROUPPER - -mulAvxTwo_2x7_end: - RET - -// func mulAvxTwo_2x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x7Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 40 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_2x7Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), DX - MOVQ out_base+48(FP), SI - MOVQ (SI), DI - MOVQ 24(SI), R8 - MOVQ 48(SI), R9 - MOVQ 72(SI), R10 - MOVQ 96(SI), R11 - MOVQ 120(SI), R12 - MOVQ 144(SI), SI - MOVQ start+72(FP), R13 - - // Add start offset to output - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, R12 - ADDQ R13, SI - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X7 - VPBROADCASTB X7, Y7 - -mulAvxTwo_2x7Xor_loop: - // Load and process 32 bytes from input 0 to 7 outputs - VMOVDQU (BX), Y10 - ADDQ $0x20, BX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU (DI), Y0 - VMOVDQU (CX), Y8 - VMOVDQU 32(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU (R8), Y1 - VMOVDQU 64(CX), Y8 - VMOVDQU 96(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU (R9), Y2 - VMOVDQU 128(CX), Y8 - VMOVDQU 160(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU (R10), Y3 - VMOVDQU 192(CX), Y8 - VMOVDQU 224(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU (R11), Y4 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU (R12), Y5 - VMOVDQU 320(CX), Y8 - VMOVDQU 352(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU (SI), Y6 - VMOVDQU 384(CX), Y8 - VMOVDQU 416(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 1 to 7 outputs - VMOVDQU (DX), Y10 - ADDQ $0x20, DX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 448(CX), Y8 - VMOVDQU 480(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 512(CX), Y8 - VMOVDQU 544(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 576(CX), Y8 - VMOVDQU 608(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 640(CX), Y8 - VMOVDQU 672(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 704(CX), Y8 - VMOVDQU 736(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 768(CX), Y8 - VMOVDQU 800(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 832(CX), Y8 - VMOVDQU 864(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Store 7 outputs - VMOVDQU Y0, (DI) - ADDQ $0x20, DI - VMOVDQU Y1, (R8) - ADDQ $0x20, R8 - VMOVDQU Y2, (R9) - ADDQ $0x20, R9 - VMOVDQU Y3, (R10) - ADDQ $0x20, R10 - VMOVDQU Y4, (R11) - ADDQ $0x20, R11 - VMOVDQU Y5, (R12) - ADDQ $0x20, R12 - VMOVDQU Y6, (SI) - ADDQ $0x20, SI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x7Xor_loop - VZEROUPPER - -mulAvxTwo_2x7Xor_end: - RET - -// func mulAvxTwo_2x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x8(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 45 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_2x8_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), DX - MOVQ out_base+48(FP), SI - MOVQ (SI), DI - MOVQ 24(SI), R8 - MOVQ 48(SI), R9 - MOVQ 72(SI), R10 - MOVQ 96(SI), R11 - MOVQ 120(SI), R12 - MOVQ 144(SI), R13 - MOVQ 168(SI), SI - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, R13 - ADDQ R14, SI - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X8 - VPBROADCASTB X8, Y8 - -mulAvxTwo_2x8_loop: - // Load and process 32 bytes from input 0 to 8 outputs - VMOVDQU (BX), Y11 - ADDQ $0x20, BX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU (CX), Y9 - VMOVDQU 32(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y0 - VMOVDQU 64(CX), Y9 - VMOVDQU 96(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y1 - VMOVDQU 128(CX), Y9 - VMOVDQU 160(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y2 - VMOVDQU 192(CX), Y9 - VMOVDQU 224(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y3 - VMOVDQU 256(CX), Y9 - VMOVDQU 288(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y4 - VMOVDQU 320(CX), Y9 - VMOVDQU 352(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y5 - VMOVDQU 384(CX), Y9 - VMOVDQU 416(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y6 - VMOVDQU 448(CX), Y9 - VMOVDQU 480(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y7 - - // Load and process 32 bytes from input 1 to 8 outputs - VMOVDQU (DX), Y11 - ADDQ $0x20, DX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 512(CX), Y9 - VMOVDQU 544(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 576(CX), Y9 - VMOVDQU 608(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y9 - VMOVDQU 672(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 704(CX), Y9 - VMOVDQU 736(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 768(CX), Y9 - VMOVDQU 800(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 832(CX), Y9 - VMOVDQU 864(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 896(CX), Y9 - VMOVDQU 928(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 960(CX), Y9 - VMOVDQU 992(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Store 8 outputs - VMOVDQU Y0, (DI) - ADDQ $0x20, DI - VMOVDQU Y1, (R8) - ADDQ $0x20, R8 - VMOVDQU Y2, (R9) - ADDQ $0x20, R9 - VMOVDQU Y3, (R10) - ADDQ $0x20, R10 - VMOVDQU Y4, (R11) - ADDQ $0x20, R11 - VMOVDQU Y5, (R12) - ADDQ $0x20, R12 - VMOVDQU Y6, (R13) - ADDQ $0x20, R13 - VMOVDQU Y7, (SI) - ADDQ $0x20, SI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x8_loop - VZEROUPPER - -mulAvxTwo_2x8_end: - RET - -// func mulAvxTwo_2x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x8Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 45 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_2x8Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), DX - MOVQ out_base+48(FP), SI - MOVQ (SI), DI - MOVQ 24(SI), R8 - MOVQ 48(SI), R9 - MOVQ 72(SI), R10 - MOVQ 96(SI), R11 - MOVQ 120(SI), R12 - MOVQ 144(SI), R13 - MOVQ 168(SI), SI - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, R13 - ADDQ R14, SI - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X8 - VPBROADCASTB X8, Y8 - -mulAvxTwo_2x8Xor_loop: - // Load and process 32 bytes from input 0 to 8 outputs - VMOVDQU (BX), Y11 - ADDQ $0x20, BX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU (DI), Y0 - VMOVDQU (CX), Y9 - VMOVDQU 32(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU (R8), Y1 - VMOVDQU 64(CX), Y9 - VMOVDQU 96(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU (R9), Y2 - VMOVDQU 128(CX), Y9 - VMOVDQU 160(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU (R10), Y3 - VMOVDQU 192(CX), Y9 - VMOVDQU 224(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU (R11), Y4 - VMOVDQU 256(CX), Y9 - VMOVDQU 288(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU (R12), Y5 - VMOVDQU 320(CX), Y9 - VMOVDQU 352(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU (R13), Y6 - VMOVDQU 384(CX), Y9 - VMOVDQU 416(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU (SI), Y7 - VMOVDQU 448(CX), Y9 - VMOVDQU 480(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 1 to 8 outputs - VMOVDQU (DX), Y11 - ADDQ $0x20, DX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 512(CX), Y9 - VMOVDQU 544(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 576(CX), Y9 - VMOVDQU 608(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y9 - VMOVDQU 672(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 704(CX), Y9 - VMOVDQU 736(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 768(CX), Y9 - VMOVDQU 800(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 832(CX), Y9 - VMOVDQU 864(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 896(CX), Y9 - VMOVDQU 928(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 960(CX), Y9 - VMOVDQU 992(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Store 8 outputs - VMOVDQU Y0, (DI) - ADDQ $0x20, DI - VMOVDQU Y1, (R8) - ADDQ $0x20, R8 - VMOVDQU Y2, (R9) - ADDQ $0x20, R9 - VMOVDQU Y3, (R10) - ADDQ $0x20, R10 - VMOVDQU Y4, (R11) - ADDQ $0x20, R11 - VMOVDQU Y5, (R12) - ADDQ $0x20, R12 - VMOVDQU Y6, (R13) - ADDQ $0x20, R13 - VMOVDQU Y7, (SI) - ADDQ $0x20, SI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x8Xor_loop - VZEROUPPER - -mulAvxTwo_2x8Xor_end: - RET - -// func mulAvxTwo_2x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x9(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 50 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_2x9_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), DX - MOVQ out_base+48(FP), SI - MOVQ (SI), DI - MOVQ 24(SI), R8 - MOVQ 48(SI), R9 - MOVQ 72(SI), R10 - MOVQ 96(SI), R11 - MOVQ 120(SI), R12 - MOVQ 144(SI), R13 - MOVQ 168(SI), R14 - MOVQ 192(SI), SI - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, R14 - ADDQ R15, SI - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X9 - VPBROADCASTB X9, Y9 - -mulAvxTwo_2x9_loop: - // Load and process 32 bytes from input 0 to 9 outputs - VMOVDQU (BX), Y12 - ADDQ $0x20, BX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU (CX), Y10 - VMOVDQU 32(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y0 - VMOVDQU 64(CX), Y10 - VMOVDQU 96(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y1 - VMOVDQU 128(CX), Y10 - VMOVDQU 160(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y2 - VMOVDQU 192(CX), Y10 - VMOVDQU 224(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y3 - VMOVDQU 256(CX), Y10 - VMOVDQU 288(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y4 - VMOVDQU 320(CX), Y10 - VMOVDQU 352(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y5 - VMOVDQU 384(CX), Y10 - VMOVDQU 416(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y6 - VMOVDQU 448(CX), Y10 - VMOVDQU 480(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y7 - VMOVDQU 512(CX), Y10 - VMOVDQU 544(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y8 - - // Load and process 32 bytes from input 1 to 9 outputs - VMOVDQU (DX), Y12 - ADDQ $0x20, DX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 576(CX), Y10 - VMOVDQU 608(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 640(CX), Y10 - VMOVDQU 672(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 704(CX), Y10 - VMOVDQU 736(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 768(CX), Y10 - VMOVDQU 800(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 832(CX), Y10 - VMOVDQU 864(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 896(CX), Y10 - VMOVDQU 928(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 960(CX), Y10 - VMOVDQU 992(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1024(CX), Y10 - VMOVDQU 1056(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1088(CX), Y10 - VMOVDQU 1120(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Store 9 outputs - VMOVDQU Y0, (DI) - ADDQ $0x20, DI - VMOVDQU Y1, (R8) - ADDQ $0x20, R8 - VMOVDQU Y2, (R9) - ADDQ $0x20, R9 - VMOVDQU Y3, (R10) - ADDQ $0x20, R10 - VMOVDQU Y4, (R11) - ADDQ $0x20, R11 - VMOVDQU Y5, (R12) - ADDQ $0x20, R12 - VMOVDQU Y6, (R13) - ADDQ $0x20, R13 - VMOVDQU Y7, (R14) - ADDQ $0x20, R14 - VMOVDQU Y8, (SI) - ADDQ $0x20, SI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x9_loop - VZEROUPPER - -mulAvxTwo_2x9_end: - RET - -// func mulAvxTwo_2x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x9Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 50 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_2x9Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), DX - MOVQ out_base+48(FP), SI - MOVQ (SI), DI - MOVQ 24(SI), R8 - MOVQ 48(SI), R9 - MOVQ 72(SI), R10 - MOVQ 96(SI), R11 - MOVQ 120(SI), R12 - MOVQ 144(SI), R13 - MOVQ 168(SI), R14 - MOVQ 192(SI), SI - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, R14 - ADDQ R15, SI - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X9 - VPBROADCASTB X9, Y9 - -mulAvxTwo_2x9Xor_loop: - // Load and process 32 bytes from input 0 to 9 outputs - VMOVDQU (BX), Y12 - ADDQ $0x20, BX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU (DI), Y0 - VMOVDQU (CX), Y10 - VMOVDQU 32(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU (R8), Y1 - VMOVDQU 64(CX), Y10 - VMOVDQU 96(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU (R9), Y2 - VMOVDQU 128(CX), Y10 - VMOVDQU 160(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU (R10), Y3 - VMOVDQU 192(CX), Y10 - VMOVDQU 224(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU (R11), Y4 - VMOVDQU 256(CX), Y10 - VMOVDQU 288(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU (R12), Y5 - VMOVDQU 320(CX), Y10 - VMOVDQU 352(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU (R13), Y6 - VMOVDQU 384(CX), Y10 - VMOVDQU 416(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU (R14), Y7 - VMOVDQU 448(CX), Y10 - VMOVDQU 480(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU (SI), Y8 - VMOVDQU 512(CX), Y10 - VMOVDQU 544(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 1 to 9 outputs - VMOVDQU (DX), Y12 - ADDQ $0x20, DX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 576(CX), Y10 - VMOVDQU 608(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 640(CX), Y10 - VMOVDQU 672(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 704(CX), Y10 - VMOVDQU 736(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 768(CX), Y10 - VMOVDQU 800(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 832(CX), Y10 - VMOVDQU 864(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 896(CX), Y10 - VMOVDQU 928(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 960(CX), Y10 - VMOVDQU 992(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1024(CX), Y10 - VMOVDQU 1056(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1088(CX), Y10 - VMOVDQU 1120(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Store 9 outputs - VMOVDQU Y0, (DI) - ADDQ $0x20, DI - VMOVDQU Y1, (R8) - ADDQ $0x20, R8 - VMOVDQU Y2, (R9) - ADDQ $0x20, R9 - VMOVDQU Y3, (R10) - ADDQ $0x20, R10 - VMOVDQU Y4, (R11) - ADDQ $0x20, R11 - VMOVDQU Y5, (R12) - ADDQ $0x20, R12 - VMOVDQU Y6, (R13) - ADDQ $0x20, R13 - VMOVDQU Y7, (R14) - ADDQ $0x20, R14 - VMOVDQU Y8, (SI) - ADDQ $0x20, SI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x9Xor_loop - VZEROUPPER - -mulAvxTwo_2x9Xor_end: - RET - -// func mulAvxTwo_2x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x10(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 55 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_2x10_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), DX - MOVQ out_base+48(FP), SI - MOVQ (SI), DI - MOVQ 24(SI), R8 - MOVQ 48(SI), R9 - MOVQ 72(SI), R10 - MOVQ 96(SI), R11 - MOVQ 120(SI), R12 - MOVQ 144(SI), R13 - MOVQ 168(SI), R14 - MOVQ 192(SI), R15 - MOVQ 216(SI), SI - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, SI - - // Add start offset to input - ADDQ BP, BX - ADDQ BP, DX - MOVQ $0x0000000f, BP - MOVQ BP, X10 - VPBROADCASTB X10, Y10 - -mulAvxTwo_2x10_loop: - // Load and process 32 bytes from input 0 to 10 outputs - VMOVDQU (BX), Y13 - ADDQ $0x20, BX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU (CX), Y11 - VMOVDQU 32(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y0 - VMOVDQU 64(CX), Y11 - VMOVDQU 96(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y1 - VMOVDQU 128(CX), Y11 - VMOVDQU 160(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y2 - VMOVDQU 192(CX), Y11 - VMOVDQU 224(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y3 - VMOVDQU 256(CX), Y11 - VMOVDQU 288(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y4 - VMOVDQU 320(CX), Y11 - VMOVDQU 352(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y5 - VMOVDQU 384(CX), Y11 - VMOVDQU 416(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y6 - VMOVDQU 448(CX), Y11 - VMOVDQU 480(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y7 - VMOVDQU 512(CX), Y11 - VMOVDQU 544(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y8 - VMOVDQU 576(CX), Y11 - VMOVDQU 608(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y9 - - // Load and process 32 bytes from input 1 to 10 outputs - VMOVDQU (DX), Y13 - ADDQ $0x20, DX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 640(CX), Y11 - VMOVDQU 672(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 704(CX), Y11 - VMOVDQU 736(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 768(CX), Y11 - VMOVDQU 800(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 832(CX), Y11 - VMOVDQU 864(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 896(CX), Y11 - VMOVDQU 928(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 960(CX), Y11 - VMOVDQU 992(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1024(CX), Y11 - VMOVDQU 1056(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1088(CX), Y11 - VMOVDQU 1120(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1152(CX), Y11 - VMOVDQU 1184(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1216(CX), Y11 - VMOVDQU 1248(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Store 10 outputs - VMOVDQU Y0, (DI) - ADDQ $0x20, DI - VMOVDQU Y1, (R8) - ADDQ $0x20, R8 - VMOVDQU Y2, (R9) - ADDQ $0x20, R9 - VMOVDQU Y3, (R10) - ADDQ $0x20, R10 - VMOVDQU Y4, (R11) - ADDQ $0x20, R11 - VMOVDQU Y5, (R12) - ADDQ $0x20, R12 - VMOVDQU Y6, (R13) - ADDQ $0x20, R13 - VMOVDQU Y7, (R14) - ADDQ $0x20, R14 - VMOVDQU Y8, (R15) - ADDQ $0x20, R15 - VMOVDQU Y9, (SI) - ADDQ $0x20, SI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x10_loop - VZEROUPPER - -mulAvxTwo_2x10_end: - RET - -// func mulAvxTwo_2x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_2x10Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 55 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_2x10Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), DX - MOVQ out_base+48(FP), SI - MOVQ (SI), DI - MOVQ 24(SI), R8 - MOVQ 48(SI), R9 - MOVQ 72(SI), R10 - MOVQ 96(SI), R11 - MOVQ 120(SI), R12 - MOVQ 144(SI), R13 - MOVQ 168(SI), R14 - MOVQ 192(SI), R15 - MOVQ 216(SI), SI - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, SI - - // Add start offset to input - ADDQ BP, BX - ADDQ BP, DX - MOVQ $0x0000000f, BP - MOVQ BP, X10 - VPBROADCASTB X10, Y10 - -mulAvxTwo_2x10Xor_loop: - // Load and process 32 bytes from input 0 to 10 outputs - VMOVDQU (BX), Y13 - ADDQ $0x20, BX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU (DI), Y0 - VMOVDQU (CX), Y11 - VMOVDQU 32(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU (R8), Y1 - VMOVDQU 64(CX), Y11 - VMOVDQU 96(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU (R9), Y2 - VMOVDQU 128(CX), Y11 - VMOVDQU 160(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU (R10), Y3 - VMOVDQU 192(CX), Y11 - VMOVDQU 224(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU (R11), Y4 - VMOVDQU 256(CX), Y11 - VMOVDQU 288(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU (R12), Y5 - VMOVDQU 320(CX), Y11 - VMOVDQU 352(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU (R13), Y6 - VMOVDQU 384(CX), Y11 - VMOVDQU 416(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU (R14), Y7 - VMOVDQU 448(CX), Y11 - VMOVDQU 480(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU (R15), Y8 - VMOVDQU 512(CX), Y11 - VMOVDQU 544(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU (SI), Y9 - VMOVDQU 576(CX), Y11 - VMOVDQU 608(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 1 to 10 outputs - VMOVDQU (DX), Y13 - ADDQ $0x20, DX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 640(CX), Y11 - VMOVDQU 672(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 704(CX), Y11 - VMOVDQU 736(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 768(CX), Y11 - VMOVDQU 800(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 832(CX), Y11 - VMOVDQU 864(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 896(CX), Y11 - VMOVDQU 928(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 960(CX), Y11 - VMOVDQU 992(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1024(CX), Y11 - VMOVDQU 1056(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1088(CX), Y11 - VMOVDQU 1120(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1152(CX), Y11 - VMOVDQU 1184(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1216(CX), Y11 - VMOVDQU 1248(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Store 10 outputs - VMOVDQU Y0, (DI) - ADDQ $0x20, DI - VMOVDQU Y1, (R8) - ADDQ $0x20, R8 - VMOVDQU Y2, (R9) - ADDQ $0x20, R9 - VMOVDQU Y3, (R10) - ADDQ $0x20, R10 - VMOVDQU Y4, (R11) - ADDQ $0x20, R11 - VMOVDQU Y5, (R12) - ADDQ $0x20, R12 - VMOVDQU Y6, (R13) - ADDQ $0x20, R13 - VMOVDQU Y7, (R14) - ADDQ $0x20, R14 - VMOVDQU Y8, (R15) - ADDQ $0x20, R15 - VMOVDQU Y9, (SI) - ADDQ $0x20, SI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_2x10Xor_loop - VZEROUPPER - -mulAvxTwo_2x10Xor_end: - RET - -// func mulAvxTwo_3x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x1(SB), NOSPLIT, $0-88 - // Loading all tables to registers - // Destination kept in GP registers - // Full registers estimated 10 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_3x1_end - VMOVDQU (CX), Y0 - VMOVDQU 32(CX), Y1 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - MOVQ in_base+24(FP), CX - MOVQ (CX), DX - MOVQ 24(CX), BX - MOVQ 48(CX), CX - MOVQ out_base+48(FP), SI - MOVQ (SI), SI - MOVQ start+72(FP), DI - - // Add start offset to output - ADDQ DI, SI - - // Add start offset to input - ADDQ DI, DX - ADDQ DI, BX - ADDQ DI, CX - MOVQ $0x0000000f, DI - MOVQ DI, X7 - VPBROADCASTB X7, Y7 - -mulAvxTwo_3x1_loop: - // Load and process 32 bytes from input 0 to 1 outputs - VMOVDQU (DX), Y8 - ADDQ $0x20, DX - VPSRLQ $0x04, Y8, Y9 - VPAND Y7, Y8, Y8 - VPAND Y7, Y9, Y9 - VPSHUFB Y8, Y0, Y8 - VPSHUFB Y9, Y1, Y9 - VPXOR Y8, Y9, Y6 - - // Load and process 32 bytes from input 1 to 1 outputs - VMOVDQU (BX), Y8 - ADDQ $0x20, BX - VPSRLQ $0x04, Y8, Y9 - VPAND Y7, Y8, Y8 - VPAND Y7, Y9, Y9 - VPSHUFB Y8, Y2, Y8 - VPSHUFB Y9, Y3, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 2 to 1 outputs - VMOVDQU (CX), Y8 - ADDQ $0x20, CX - VPSRLQ $0x04, Y8, Y9 - VPAND Y7, Y8, Y8 - VPAND Y7, Y9, Y9 - VPSHUFB Y8, Y4, Y8 - VPSHUFB Y9, Y5, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Store 1 outputs - VMOVDQU Y6, (SI) - ADDQ $0x20, SI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x1_loop - VZEROUPPER - -mulAvxTwo_3x1_end: - RET - -// func mulAvxTwo_3x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x1_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 18 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_3x1_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ out_base+48(FP), DI - MOVQ out_base+48(FP), DI - MOVQ (DI), DI - MOVQ start+72(FP), R8 - - // Add start offset to output - ADDQ R8, DI - - // Add start offset to input - ADDQ R8, BX - ADDQ R8, SI - ADDQ R8, DX - MOVQ $0x0000000f, R8 - MOVQ R8, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_3x1_64_loop: - // Load and process 64 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y6 - VMOVDQU 32(BX), Y5 - ADDQ $0x40, BX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y0 - VPXOR Y5, Y6, Y1 - - // Load and process 64 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y6 - VMOVDQU 32(SI), Y5 - ADDQ $0x40, SI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 2 to 1 outputs - VMOVDQU (DX), Y6 - VMOVDQU 32(DX), Y5 - ADDQ $0x40, DX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Store 1 outputs - VMOVDQU Y0, (DI) - VMOVDQU Y1, 32(DI) - ADDQ $0x40, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x1_64_loop - VZEROUPPER - -mulAvxTwo_3x1_64_end: - RET - -// func mulAvxTwo_3x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x1Xor(SB), NOSPLIT, $0-88 - // Loading all tables to registers - // Destination kept in GP registers - // Full registers estimated 10 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_3x1Xor_end - VMOVDQU (CX), Y0 - VMOVDQU 32(CX), Y1 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - MOVQ in_base+24(FP), CX - MOVQ (CX), DX - MOVQ 24(CX), BX - MOVQ 48(CX), CX - MOVQ out_base+48(FP), SI - MOVQ (SI), SI - MOVQ start+72(FP), DI - - // Add start offset to output - ADDQ DI, SI - - // Add start offset to input - ADDQ DI, DX - ADDQ DI, BX - ADDQ DI, CX - MOVQ $0x0000000f, DI - MOVQ DI, X7 - VPBROADCASTB X7, Y7 - -mulAvxTwo_3x1Xor_loop: - // Load and process 32 bytes from input 0 to 1 outputs - VMOVDQU (DX), Y8 - ADDQ $0x20, DX - VPSRLQ $0x04, Y8, Y9 - VPAND Y7, Y8, Y8 - VPAND Y7, Y9, Y9 - VMOVDQU (SI), Y6 - VPSHUFB Y8, Y0, Y8 - VPSHUFB Y9, Y1, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 1 to 1 outputs - VMOVDQU (BX), Y8 - ADDQ $0x20, BX - VPSRLQ $0x04, Y8, Y9 - VPAND Y7, Y8, Y8 - VPAND Y7, Y9, Y9 - VPSHUFB Y8, Y2, Y8 - VPSHUFB Y9, Y3, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 2 to 1 outputs - VMOVDQU (CX), Y8 - ADDQ $0x20, CX - VPSRLQ $0x04, Y8, Y9 - VPAND Y7, Y8, Y8 - VPAND Y7, Y9, Y9 - VPSHUFB Y8, Y4, Y8 - VPSHUFB Y9, Y5, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Store 1 outputs - VMOVDQU Y6, (SI) - ADDQ $0x20, SI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x1Xor_loop - VZEROUPPER - -mulAvxTwo_3x1Xor_end: - RET - -// func mulAvxTwo_3x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x1_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 18 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_3x1_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ out_base+48(FP), DI - MOVQ out_base+48(FP), DI - MOVQ (DI), DI - MOVQ start+72(FP), R8 - - // Add start offset to output - ADDQ R8, DI - - // Add start offset to input - ADDQ R8, BX - ADDQ R8, SI - ADDQ R8, DX - MOVQ $0x0000000f, R8 - MOVQ R8, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_3x1_64Xor_loop: - // Load 1 outputs - VMOVDQU (DI), Y0 - VMOVDQU 32(DI), Y1 - - // Load and process 64 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y6 - VMOVDQU 32(BX), Y5 - ADDQ $0x40, BX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y6 - VMOVDQU 32(SI), Y5 - ADDQ $0x40, SI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 2 to 1 outputs - VMOVDQU (DX), Y6 - VMOVDQU 32(DX), Y5 - ADDQ $0x40, DX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Store 1 outputs - VMOVDQU Y0, (DI) - VMOVDQU Y1, 32(DI) - ADDQ $0x40, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x1_64Xor_loop - VZEROUPPER - -mulAvxTwo_3x1_64Xor_end: - RET - -// func mulAvxTwo_3x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x2(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 19 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_3x2_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ out_base+48(FP), DI - MOVQ (DI), R8 - MOVQ 24(DI), DI - MOVQ start+72(FP), R9 - - // Add start offset to output - ADDQ R9, R8 - ADDQ R9, DI - - // Add start offset to input - ADDQ R9, BX - ADDQ R9, SI - ADDQ R9, DX - MOVQ $0x0000000f, R9 - MOVQ R9, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_3x2_loop: - // Load and process 32 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y5 - ADDQ $0x20, BX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y0 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y1 - - // Load and process 32 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y5 - ADDQ $0x20, SI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 2 to 2 outputs - VMOVDQU (DX), Y5 - ADDQ $0x20, DX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Store 2 outputs - VMOVDQU Y0, (R8) - ADDQ $0x20, R8 - VMOVDQU Y1, (DI) - ADDQ $0x20, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x2_loop - VZEROUPPER - -mulAvxTwo_3x2_end: - RET - -// func mulAvxTwo_3x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x2_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 33 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_3x2_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ out_base+48(FP), DI - MOVQ out_base+48(FP), DI - MOVQ (DI), R8 - MOVQ 24(DI), DI - MOVQ start+72(FP), R9 - - // Add start offset to output - ADDQ R9, R8 - ADDQ R9, DI - - // Add start offset to input - ADDQ R9, BX - ADDQ R9, SI - ADDQ R9, DX - MOVQ $0x0000000f, R9 - MOVQ R9, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_3x2_64_loop: - // Load and process 64 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y9 - VMOVDQU 32(BX), Y11 - ADDQ $0x40, BX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y0 - VPXOR Y7, Y8, Y1 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y2 - VPXOR Y7, Y8, Y3 - - // Load and process 64 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y9 - VMOVDQU 32(SI), Y11 - ADDQ $0x40, SI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 2 to 2 outputs - VMOVDQU (DX), Y9 - VMOVDQU 32(DX), Y11 - ADDQ $0x40, DX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Store 2 outputs - VMOVDQU Y0, (R8) - VMOVDQU Y1, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y2, (DI) - VMOVDQU Y3, 32(DI) - ADDQ $0x40, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x2_64_loop - VZEROUPPER - -mulAvxTwo_3x2_64_end: - RET - -// func mulAvxTwo_3x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x2Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 19 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_3x2Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ out_base+48(FP), DI - MOVQ (DI), R8 - MOVQ 24(DI), DI - MOVQ start+72(FP), R9 - - // Add start offset to output - ADDQ R9, R8 - ADDQ R9, DI - - // Add start offset to input - ADDQ R9, BX - ADDQ R9, SI - ADDQ R9, DX - MOVQ $0x0000000f, R9 - MOVQ R9, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_3x2Xor_loop: - // Load and process 32 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y5 - ADDQ $0x20, BX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU (R8), Y0 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU (DI), Y1 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y5 - ADDQ $0x20, SI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 2 to 2 outputs - VMOVDQU (DX), Y5 - ADDQ $0x20, DX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Store 2 outputs - VMOVDQU Y0, (R8) - ADDQ $0x20, R8 - VMOVDQU Y1, (DI) - ADDQ $0x20, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x2Xor_loop - VZEROUPPER - -mulAvxTwo_3x2Xor_end: - RET - -// func mulAvxTwo_3x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x2_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 33 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_3x2_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ out_base+48(FP), DI - MOVQ out_base+48(FP), DI - MOVQ (DI), R8 - MOVQ 24(DI), DI - MOVQ start+72(FP), R9 - - // Add start offset to output - ADDQ R9, R8 - ADDQ R9, DI - - // Add start offset to input - ADDQ R9, BX - ADDQ R9, SI - ADDQ R9, DX - MOVQ $0x0000000f, R9 - MOVQ R9, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_3x2_64Xor_loop: - // Load 2 outputs - VMOVDQU (R8), Y0 - VMOVDQU 32(R8), Y1 - VMOVDQU (DI), Y2 - VMOVDQU 32(DI), Y3 - - // Load and process 64 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y9 - VMOVDQU 32(BX), Y11 - ADDQ $0x40, BX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y9 - VMOVDQU 32(SI), Y11 - ADDQ $0x40, SI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 2 to 2 outputs - VMOVDQU (DX), Y9 - VMOVDQU 32(DX), Y11 - ADDQ $0x40, DX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Store 2 outputs - VMOVDQU Y0, (R8) - VMOVDQU Y1, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y2, (DI) - VMOVDQU Y3, 32(DI) - ADDQ $0x40, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x2_64Xor_loop - VZEROUPPER - -mulAvxTwo_3x2_64Xor_end: - RET - -// func mulAvxTwo_3x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x3(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 26 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_3x3_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ out_base+48(FP), DI - MOVQ (DI), R8 - MOVQ 24(DI), R9 - MOVQ 48(DI), DI - MOVQ start+72(FP), R10 - - // Add start offset to output - ADDQ R10, R8 - ADDQ R10, R9 - ADDQ R10, DI - - // Add start offset to input - ADDQ R10, BX - ADDQ R10, SI - ADDQ R10, DX - MOVQ $0x0000000f, R10 - MOVQ R10, X3 - VPBROADCASTB X3, Y3 - -mulAvxTwo_3x3_loop: - // Load and process 32 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y6 - ADDQ $0x20, BX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU (CX), Y4 - VMOVDQU 32(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y0 - VMOVDQU 64(CX), Y4 - VMOVDQU 96(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y1 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y2 - - // Load and process 32 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y6 - ADDQ $0x20, SI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 192(CX), Y4 - VMOVDQU 224(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 256(CX), Y4 - VMOVDQU 288(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 320(CX), Y4 - VMOVDQU 352(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 2 to 3 outputs - VMOVDQU (DX), Y6 - ADDQ $0x20, DX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 384(CX), Y4 - VMOVDQU 416(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 448(CX), Y4 - VMOVDQU 480(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 512(CX), Y4 - VMOVDQU 544(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Store 3 outputs - VMOVDQU Y0, (R8) - ADDQ $0x20, R8 - VMOVDQU Y1, (R9) - ADDQ $0x20, R9 - VMOVDQU Y2, (DI) - ADDQ $0x20, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x3_loop - VZEROUPPER - -mulAvxTwo_3x3_end: - RET - -// func mulAvxTwo_3x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x3_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 46 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_3x3_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ out_base+48(FP), DI - MOVQ out_base+48(FP), DI - MOVQ (DI), R8 - MOVQ 24(DI), R9 - MOVQ 48(DI), DI - MOVQ start+72(FP), R10 - - // Add start offset to output - ADDQ R10, R8 - ADDQ R10, R9 - ADDQ R10, DI - - // Add start offset to input - ADDQ R10, BX - ADDQ R10, SI - ADDQ R10, DX - MOVQ $0x0000000f, R10 - MOVQ R10, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_3x3_64_loop: - // Load and process 64 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y11 - VMOVDQU 32(BX), Y13 - ADDQ $0x40, BX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y0 - VPXOR Y9, Y10, Y1 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y2 - VPXOR Y9, Y10, Y3 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y4 - VPXOR Y9, Y10, Y5 - - // Load and process 64 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y11 - VMOVDQU 32(SI), Y13 - ADDQ $0x40, SI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 2 to 3 outputs - VMOVDQU (DX), Y11 - VMOVDQU 32(DX), Y13 - ADDQ $0x40, DX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Store 3 outputs - VMOVDQU Y0, (R8) - VMOVDQU Y1, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y2, (R9) - VMOVDQU Y3, 32(R9) - ADDQ $0x40, R9 - VMOVDQU Y4, (DI) - VMOVDQU Y5, 32(DI) - ADDQ $0x40, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x3_64_loop - VZEROUPPER - -mulAvxTwo_3x3_64_end: - RET - -// func mulAvxTwo_3x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x3Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 26 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_3x3Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ out_base+48(FP), DI - MOVQ (DI), R8 - MOVQ 24(DI), R9 - MOVQ 48(DI), DI - MOVQ start+72(FP), R10 - - // Add start offset to output - ADDQ R10, R8 - ADDQ R10, R9 - ADDQ R10, DI - - // Add start offset to input - ADDQ R10, BX - ADDQ R10, SI - ADDQ R10, DX - MOVQ $0x0000000f, R10 - MOVQ R10, X3 - VPBROADCASTB X3, Y3 - -mulAvxTwo_3x3Xor_loop: - // Load and process 32 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y6 - ADDQ $0x20, BX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU (R8), Y0 - VMOVDQU (CX), Y4 - VMOVDQU 32(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU (R9), Y1 - VMOVDQU 64(CX), Y4 - VMOVDQU 96(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU (DI), Y2 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y6 - ADDQ $0x20, SI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 192(CX), Y4 - VMOVDQU 224(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 256(CX), Y4 - VMOVDQU 288(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 320(CX), Y4 - VMOVDQU 352(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 2 to 3 outputs - VMOVDQU (DX), Y6 - ADDQ $0x20, DX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 384(CX), Y4 - VMOVDQU 416(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 448(CX), Y4 - VMOVDQU 480(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 512(CX), Y4 - VMOVDQU 544(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Store 3 outputs - VMOVDQU Y0, (R8) - ADDQ $0x20, R8 - VMOVDQU Y1, (R9) - ADDQ $0x20, R9 - VMOVDQU Y2, (DI) - ADDQ $0x20, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x3Xor_loop - VZEROUPPER - -mulAvxTwo_3x3Xor_end: - RET - -// func mulAvxTwo_3x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x3_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 46 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_3x3_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ out_base+48(FP), DI - MOVQ out_base+48(FP), DI - MOVQ (DI), R8 - MOVQ 24(DI), R9 - MOVQ 48(DI), DI - MOVQ start+72(FP), R10 - - // Add start offset to output - ADDQ R10, R8 - ADDQ R10, R9 - ADDQ R10, DI - - // Add start offset to input - ADDQ R10, BX - ADDQ R10, SI - ADDQ R10, DX - MOVQ $0x0000000f, R10 - MOVQ R10, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_3x3_64Xor_loop: - // Load 3 outputs - VMOVDQU (R8), Y0 - VMOVDQU 32(R8), Y1 - VMOVDQU (R9), Y2 - VMOVDQU 32(R9), Y3 - VMOVDQU (DI), Y4 - VMOVDQU 32(DI), Y5 - - // Load and process 64 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y11 - VMOVDQU 32(BX), Y13 - ADDQ $0x40, BX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y11 - VMOVDQU 32(SI), Y13 - ADDQ $0x40, SI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 2 to 3 outputs - VMOVDQU (DX), Y11 - VMOVDQU 32(DX), Y13 - ADDQ $0x40, DX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Store 3 outputs - VMOVDQU Y0, (R8) - VMOVDQU Y1, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y2, (R9) - VMOVDQU Y3, 32(R9) - ADDQ $0x40, R9 - VMOVDQU Y4, (DI) - VMOVDQU Y5, 32(DI) - ADDQ $0x40, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x3_64Xor_loop - VZEROUPPER - -mulAvxTwo_3x3_64Xor_end: - RET - -// func mulAvxTwo_3x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x4(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 33 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_3x4_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ out_base+48(FP), DI - MOVQ (DI), R8 - MOVQ 24(DI), R9 - MOVQ 48(DI), R10 - MOVQ 72(DI), DI - MOVQ start+72(FP), R11 - - // Add start offset to output - ADDQ R11, R8 - ADDQ R11, R9 - ADDQ R11, R10 - ADDQ R11, DI - - // Add start offset to input - ADDQ R11, BX - ADDQ R11, SI - ADDQ R11, DX - MOVQ $0x0000000f, R11 - MOVQ R11, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_3x4_loop: - // Load and process 32 bytes from input 0 to 4 outputs - VMOVDQU (BX), Y7 - ADDQ $0x20, BX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y0 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y1 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y2 - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y3 - - // Load and process 32 bytes from input 1 to 4 outputs - VMOVDQU (SI), Y7 - ADDQ $0x20, SI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 2 to 4 outputs - VMOVDQU (DX), Y7 - ADDQ $0x20, DX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Store 4 outputs - VMOVDQU Y0, (R8) - ADDQ $0x20, R8 - VMOVDQU Y1, (R9) - ADDQ $0x20, R9 - VMOVDQU Y2, (R10) - ADDQ $0x20, R10 - VMOVDQU Y3, (DI) - ADDQ $0x20, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x4_loop - VZEROUPPER - -mulAvxTwo_3x4_end: - RET - -// func mulAvxTwo_3x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x4Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 33 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_3x4Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ out_base+48(FP), DI - MOVQ (DI), R8 - MOVQ 24(DI), R9 - MOVQ 48(DI), R10 - MOVQ 72(DI), DI - MOVQ start+72(FP), R11 - - // Add start offset to output - ADDQ R11, R8 - ADDQ R11, R9 - ADDQ R11, R10 - ADDQ R11, DI - - // Add start offset to input - ADDQ R11, BX - ADDQ R11, SI - ADDQ R11, DX - MOVQ $0x0000000f, R11 - MOVQ R11, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_3x4Xor_loop: - // Load and process 32 bytes from input 0 to 4 outputs - VMOVDQU (BX), Y7 - ADDQ $0x20, BX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU (R8), Y0 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU (R9), Y1 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU (R10), Y2 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU (DI), Y3 - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 1 to 4 outputs - VMOVDQU (SI), Y7 - ADDQ $0x20, SI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 2 to 4 outputs - VMOVDQU (DX), Y7 - ADDQ $0x20, DX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Store 4 outputs - VMOVDQU Y0, (R8) - ADDQ $0x20, R8 - VMOVDQU Y1, (R9) - ADDQ $0x20, R9 - VMOVDQU Y2, (R10) - ADDQ $0x20, R10 - VMOVDQU Y3, (DI) - ADDQ $0x20, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x4Xor_loop - VZEROUPPER - -mulAvxTwo_3x4Xor_end: - RET - -// func mulAvxTwo_3x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x5(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 40 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_3x5_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ out_base+48(FP), DI - MOVQ (DI), R8 - MOVQ 24(DI), R9 - MOVQ 48(DI), R10 - MOVQ 72(DI), R11 - MOVQ 96(DI), DI - MOVQ start+72(FP), R12 - - // Add start offset to output - ADDQ R12, R8 - ADDQ R12, R9 - ADDQ R12, R10 - ADDQ R12, R11 - ADDQ R12, DI - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X5 - VPBROADCASTB X5, Y5 - -mulAvxTwo_3x5_loop: - // Load and process 32 bytes from input 0 to 5 outputs - VMOVDQU (BX), Y8 - ADDQ $0x20, BX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU (CX), Y6 - VMOVDQU 32(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y0 - VMOVDQU 64(CX), Y6 - VMOVDQU 96(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y1 - VMOVDQU 128(CX), Y6 - VMOVDQU 160(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y2 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y3 - VMOVDQU 256(CX), Y6 - VMOVDQU 288(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y4 - - // Load and process 32 bytes from input 1 to 5 outputs - VMOVDQU (SI), Y8 - ADDQ $0x20, SI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 320(CX), Y6 - VMOVDQU 352(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 384(CX), Y6 - VMOVDQU 416(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 448(CX), Y6 - VMOVDQU 480(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 512(CX), Y6 - VMOVDQU 544(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 576(CX), Y6 - VMOVDQU 608(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 2 to 5 outputs - VMOVDQU (DX), Y8 - ADDQ $0x20, DX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 640(CX), Y6 - VMOVDQU 672(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 704(CX), Y6 - VMOVDQU 736(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 768(CX), Y6 - VMOVDQU 800(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 832(CX), Y6 - VMOVDQU 864(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 896(CX), Y6 - VMOVDQU 928(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Store 5 outputs - VMOVDQU Y0, (R8) - ADDQ $0x20, R8 - VMOVDQU Y1, (R9) - ADDQ $0x20, R9 - VMOVDQU Y2, (R10) - ADDQ $0x20, R10 - VMOVDQU Y3, (R11) - ADDQ $0x20, R11 - VMOVDQU Y4, (DI) - ADDQ $0x20, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x5_loop - VZEROUPPER - -mulAvxTwo_3x5_end: - RET - -// func mulAvxTwo_3x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x5Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 40 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_3x5Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ out_base+48(FP), DI - MOVQ (DI), R8 - MOVQ 24(DI), R9 - MOVQ 48(DI), R10 - MOVQ 72(DI), R11 - MOVQ 96(DI), DI - MOVQ start+72(FP), R12 - - // Add start offset to output - ADDQ R12, R8 - ADDQ R12, R9 - ADDQ R12, R10 - ADDQ R12, R11 - ADDQ R12, DI - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X5 - VPBROADCASTB X5, Y5 - -mulAvxTwo_3x5Xor_loop: - // Load and process 32 bytes from input 0 to 5 outputs - VMOVDQU (BX), Y8 - ADDQ $0x20, BX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU (R8), Y0 - VMOVDQU (CX), Y6 - VMOVDQU 32(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU (R9), Y1 - VMOVDQU 64(CX), Y6 - VMOVDQU 96(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU (R10), Y2 - VMOVDQU 128(CX), Y6 - VMOVDQU 160(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU (R11), Y3 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU (DI), Y4 - VMOVDQU 256(CX), Y6 - VMOVDQU 288(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 1 to 5 outputs - VMOVDQU (SI), Y8 - ADDQ $0x20, SI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 320(CX), Y6 - VMOVDQU 352(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 384(CX), Y6 - VMOVDQU 416(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 448(CX), Y6 - VMOVDQU 480(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 512(CX), Y6 - VMOVDQU 544(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 576(CX), Y6 - VMOVDQU 608(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 2 to 5 outputs - VMOVDQU (DX), Y8 - ADDQ $0x20, DX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 640(CX), Y6 - VMOVDQU 672(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 704(CX), Y6 - VMOVDQU 736(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 768(CX), Y6 - VMOVDQU 800(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 832(CX), Y6 - VMOVDQU 864(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 896(CX), Y6 - VMOVDQU 928(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Store 5 outputs - VMOVDQU Y0, (R8) - ADDQ $0x20, R8 - VMOVDQU Y1, (R9) - ADDQ $0x20, R9 - VMOVDQU Y2, (R10) - ADDQ $0x20, R10 - VMOVDQU Y3, (R11) - ADDQ $0x20, R11 - VMOVDQU Y4, (DI) - ADDQ $0x20, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x5Xor_loop - VZEROUPPER - -mulAvxTwo_3x5Xor_end: - RET - -// func mulAvxTwo_3x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x6(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 47 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_3x6_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ out_base+48(FP), DI - MOVQ (DI), R8 - MOVQ 24(DI), R9 - MOVQ 48(DI), R10 - MOVQ 72(DI), R11 - MOVQ 96(DI), R12 - MOVQ 120(DI), DI - MOVQ start+72(FP), R13 - - // Add start offset to output - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, R12 - ADDQ R13, DI - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_3x6_loop: - // Load and process 32 bytes from input 0 to 6 outputs - VMOVDQU (BX), Y9 - ADDQ $0x20, BX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y0 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y1 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y2 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y3 - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y4 - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y5 - - // Load and process 32 bytes from input 1 to 6 outputs - VMOVDQU (SI), Y9 - ADDQ $0x20, SI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 2 to 6 outputs - VMOVDQU (DX), Y9 - ADDQ $0x20, DX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Store 6 outputs - VMOVDQU Y0, (R8) - ADDQ $0x20, R8 - VMOVDQU Y1, (R9) - ADDQ $0x20, R9 - VMOVDQU Y2, (R10) - ADDQ $0x20, R10 - VMOVDQU Y3, (R11) - ADDQ $0x20, R11 - VMOVDQU Y4, (R12) - ADDQ $0x20, R12 - VMOVDQU Y5, (DI) - ADDQ $0x20, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x6_loop - VZEROUPPER - -mulAvxTwo_3x6_end: - RET - -// func mulAvxTwo_3x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x6Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 47 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_3x6Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ out_base+48(FP), DI - MOVQ (DI), R8 - MOVQ 24(DI), R9 - MOVQ 48(DI), R10 - MOVQ 72(DI), R11 - MOVQ 96(DI), R12 - MOVQ 120(DI), DI - MOVQ start+72(FP), R13 - - // Add start offset to output - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, R12 - ADDQ R13, DI - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_3x6Xor_loop: - // Load and process 32 bytes from input 0 to 6 outputs - VMOVDQU (BX), Y9 - ADDQ $0x20, BX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU (R8), Y0 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU (R9), Y1 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU (R10), Y2 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU (R11), Y3 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU (R12), Y4 - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU (DI), Y5 - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 1 to 6 outputs - VMOVDQU (SI), Y9 - ADDQ $0x20, SI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 2 to 6 outputs - VMOVDQU (DX), Y9 - ADDQ $0x20, DX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Store 6 outputs - VMOVDQU Y0, (R8) - ADDQ $0x20, R8 - VMOVDQU Y1, (R9) - ADDQ $0x20, R9 - VMOVDQU Y2, (R10) - ADDQ $0x20, R10 - VMOVDQU Y3, (R11) - ADDQ $0x20, R11 - VMOVDQU Y4, (R12) - ADDQ $0x20, R12 - VMOVDQU Y5, (DI) - ADDQ $0x20, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x6Xor_loop - VZEROUPPER - -mulAvxTwo_3x6Xor_end: - RET - -// func mulAvxTwo_3x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x7(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 54 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_3x7_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ out_base+48(FP), DI - MOVQ (DI), R8 - MOVQ 24(DI), R9 - MOVQ 48(DI), R10 - MOVQ 72(DI), R11 - MOVQ 96(DI), R12 - MOVQ 120(DI), R13 - MOVQ 144(DI), DI - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, R13 - ADDQ R14, DI - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X7 - VPBROADCASTB X7, Y7 - -mulAvxTwo_3x7_loop: - // Load and process 32 bytes from input 0 to 7 outputs - VMOVDQU (BX), Y10 - ADDQ $0x20, BX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU (CX), Y8 - VMOVDQU 32(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y0 - VMOVDQU 64(CX), Y8 - VMOVDQU 96(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y1 - VMOVDQU 128(CX), Y8 - VMOVDQU 160(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y2 - VMOVDQU 192(CX), Y8 - VMOVDQU 224(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y3 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y4 - VMOVDQU 320(CX), Y8 - VMOVDQU 352(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y5 - VMOVDQU 384(CX), Y8 - VMOVDQU 416(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y6 - - // Load and process 32 bytes from input 1 to 7 outputs - VMOVDQU (SI), Y10 - ADDQ $0x20, SI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 448(CX), Y8 - VMOVDQU 480(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 512(CX), Y8 - VMOVDQU 544(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 576(CX), Y8 - VMOVDQU 608(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 640(CX), Y8 - VMOVDQU 672(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 704(CX), Y8 - VMOVDQU 736(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 768(CX), Y8 - VMOVDQU 800(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 832(CX), Y8 - VMOVDQU 864(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 2 to 7 outputs - VMOVDQU (DX), Y10 - ADDQ $0x20, DX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 896(CX), Y8 - VMOVDQU 928(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 960(CX), Y8 - VMOVDQU 992(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1024(CX), Y8 - VMOVDQU 1056(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1088(CX), Y8 - VMOVDQU 1120(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1152(CX), Y8 - VMOVDQU 1184(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1216(CX), Y8 - VMOVDQU 1248(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1280(CX), Y8 - VMOVDQU 1312(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Store 7 outputs - VMOVDQU Y0, (R8) - ADDQ $0x20, R8 - VMOVDQU Y1, (R9) - ADDQ $0x20, R9 - VMOVDQU Y2, (R10) - ADDQ $0x20, R10 - VMOVDQU Y3, (R11) - ADDQ $0x20, R11 - VMOVDQU Y4, (R12) - ADDQ $0x20, R12 - VMOVDQU Y5, (R13) - ADDQ $0x20, R13 - VMOVDQU Y6, (DI) - ADDQ $0x20, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x7_loop - VZEROUPPER - -mulAvxTwo_3x7_end: - RET - -// func mulAvxTwo_3x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x7Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 54 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_3x7Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ out_base+48(FP), DI - MOVQ (DI), R8 - MOVQ 24(DI), R9 - MOVQ 48(DI), R10 - MOVQ 72(DI), R11 - MOVQ 96(DI), R12 - MOVQ 120(DI), R13 - MOVQ 144(DI), DI - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, R13 - ADDQ R14, DI - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X7 - VPBROADCASTB X7, Y7 - -mulAvxTwo_3x7Xor_loop: - // Load and process 32 bytes from input 0 to 7 outputs - VMOVDQU (BX), Y10 - ADDQ $0x20, BX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU (R8), Y0 - VMOVDQU (CX), Y8 - VMOVDQU 32(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU (R9), Y1 - VMOVDQU 64(CX), Y8 - VMOVDQU 96(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU (R10), Y2 - VMOVDQU 128(CX), Y8 - VMOVDQU 160(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU (R11), Y3 - VMOVDQU 192(CX), Y8 - VMOVDQU 224(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU (R12), Y4 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU (R13), Y5 - VMOVDQU 320(CX), Y8 - VMOVDQU 352(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU (DI), Y6 - VMOVDQU 384(CX), Y8 - VMOVDQU 416(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 1 to 7 outputs - VMOVDQU (SI), Y10 - ADDQ $0x20, SI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 448(CX), Y8 - VMOVDQU 480(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 512(CX), Y8 - VMOVDQU 544(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 576(CX), Y8 - VMOVDQU 608(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 640(CX), Y8 - VMOVDQU 672(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 704(CX), Y8 - VMOVDQU 736(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 768(CX), Y8 - VMOVDQU 800(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 832(CX), Y8 - VMOVDQU 864(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 2 to 7 outputs - VMOVDQU (DX), Y10 - ADDQ $0x20, DX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 896(CX), Y8 - VMOVDQU 928(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 960(CX), Y8 - VMOVDQU 992(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1024(CX), Y8 - VMOVDQU 1056(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1088(CX), Y8 - VMOVDQU 1120(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1152(CX), Y8 - VMOVDQU 1184(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1216(CX), Y8 - VMOVDQU 1248(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1280(CX), Y8 - VMOVDQU 1312(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Store 7 outputs - VMOVDQU Y0, (R8) - ADDQ $0x20, R8 - VMOVDQU Y1, (R9) - ADDQ $0x20, R9 - VMOVDQU Y2, (R10) - ADDQ $0x20, R10 - VMOVDQU Y3, (R11) - ADDQ $0x20, R11 - VMOVDQU Y4, (R12) - ADDQ $0x20, R12 - VMOVDQU Y5, (R13) - ADDQ $0x20, R13 - VMOVDQU Y6, (DI) - ADDQ $0x20, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x7Xor_loop - VZEROUPPER - -mulAvxTwo_3x7Xor_end: - RET - -// func mulAvxTwo_3x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x8(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 61 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_3x8_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ out_base+48(FP), DI - MOVQ (DI), R8 - MOVQ 24(DI), R9 - MOVQ 48(DI), R10 - MOVQ 72(DI), R11 - MOVQ 96(DI), R12 - MOVQ 120(DI), R13 - MOVQ 144(DI), R14 - MOVQ 168(DI), DI - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, R14 - ADDQ R15, DI - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X8 - VPBROADCASTB X8, Y8 - -mulAvxTwo_3x8_loop: - // Load and process 32 bytes from input 0 to 8 outputs - VMOVDQU (BX), Y11 - ADDQ $0x20, BX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU (CX), Y9 - VMOVDQU 32(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y0 - VMOVDQU 64(CX), Y9 - VMOVDQU 96(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y1 - VMOVDQU 128(CX), Y9 - VMOVDQU 160(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y2 - VMOVDQU 192(CX), Y9 - VMOVDQU 224(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y3 - VMOVDQU 256(CX), Y9 - VMOVDQU 288(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y4 - VMOVDQU 320(CX), Y9 - VMOVDQU 352(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y5 - VMOVDQU 384(CX), Y9 - VMOVDQU 416(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y6 - VMOVDQU 448(CX), Y9 - VMOVDQU 480(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y7 - - // Load and process 32 bytes from input 1 to 8 outputs - VMOVDQU (SI), Y11 - ADDQ $0x20, SI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 512(CX), Y9 - VMOVDQU 544(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 576(CX), Y9 - VMOVDQU 608(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y9 - VMOVDQU 672(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 704(CX), Y9 - VMOVDQU 736(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 768(CX), Y9 - VMOVDQU 800(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 832(CX), Y9 - VMOVDQU 864(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 896(CX), Y9 - VMOVDQU 928(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 960(CX), Y9 - VMOVDQU 992(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 2 to 8 outputs - VMOVDQU (DX), Y11 - ADDQ $0x20, DX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1024(CX), Y9 - VMOVDQU 1056(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1088(CX), Y9 - VMOVDQU 1120(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1152(CX), Y9 - VMOVDQU 1184(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1216(CX), Y9 - VMOVDQU 1248(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y9 - VMOVDQU 1312(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1344(CX), Y9 - VMOVDQU 1376(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1408(CX), Y9 - VMOVDQU 1440(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1472(CX), Y9 - VMOVDQU 1504(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Store 8 outputs - VMOVDQU Y0, (R8) - ADDQ $0x20, R8 - VMOVDQU Y1, (R9) - ADDQ $0x20, R9 - VMOVDQU Y2, (R10) - ADDQ $0x20, R10 - VMOVDQU Y3, (R11) - ADDQ $0x20, R11 - VMOVDQU Y4, (R12) - ADDQ $0x20, R12 - VMOVDQU Y5, (R13) - ADDQ $0x20, R13 - VMOVDQU Y6, (R14) - ADDQ $0x20, R14 - VMOVDQU Y7, (DI) - ADDQ $0x20, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x8_loop - VZEROUPPER - -mulAvxTwo_3x8_end: - RET - -// func mulAvxTwo_3x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x8Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 61 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_3x8Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ out_base+48(FP), DI - MOVQ (DI), R8 - MOVQ 24(DI), R9 - MOVQ 48(DI), R10 - MOVQ 72(DI), R11 - MOVQ 96(DI), R12 - MOVQ 120(DI), R13 - MOVQ 144(DI), R14 - MOVQ 168(DI), DI - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, R14 - ADDQ R15, DI - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X8 - VPBROADCASTB X8, Y8 - -mulAvxTwo_3x8Xor_loop: - // Load and process 32 bytes from input 0 to 8 outputs - VMOVDQU (BX), Y11 - ADDQ $0x20, BX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU (R8), Y0 - VMOVDQU (CX), Y9 - VMOVDQU 32(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU (R9), Y1 - VMOVDQU 64(CX), Y9 - VMOVDQU 96(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU (R10), Y2 - VMOVDQU 128(CX), Y9 - VMOVDQU 160(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU (R11), Y3 - VMOVDQU 192(CX), Y9 - VMOVDQU 224(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU (R12), Y4 - VMOVDQU 256(CX), Y9 - VMOVDQU 288(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU (R13), Y5 - VMOVDQU 320(CX), Y9 - VMOVDQU 352(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU (R14), Y6 - VMOVDQU 384(CX), Y9 - VMOVDQU 416(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU (DI), Y7 - VMOVDQU 448(CX), Y9 - VMOVDQU 480(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 1 to 8 outputs - VMOVDQU (SI), Y11 - ADDQ $0x20, SI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 512(CX), Y9 - VMOVDQU 544(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 576(CX), Y9 - VMOVDQU 608(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y9 - VMOVDQU 672(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 704(CX), Y9 - VMOVDQU 736(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 768(CX), Y9 - VMOVDQU 800(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 832(CX), Y9 - VMOVDQU 864(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 896(CX), Y9 - VMOVDQU 928(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 960(CX), Y9 - VMOVDQU 992(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 2 to 8 outputs - VMOVDQU (DX), Y11 - ADDQ $0x20, DX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1024(CX), Y9 - VMOVDQU 1056(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1088(CX), Y9 - VMOVDQU 1120(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1152(CX), Y9 - VMOVDQU 1184(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1216(CX), Y9 - VMOVDQU 1248(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y9 - VMOVDQU 1312(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1344(CX), Y9 - VMOVDQU 1376(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1408(CX), Y9 - VMOVDQU 1440(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1472(CX), Y9 - VMOVDQU 1504(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Store 8 outputs - VMOVDQU Y0, (R8) - ADDQ $0x20, R8 - VMOVDQU Y1, (R9) - ADDQ $0x20, R9 - VMOVDQU Y2, (R10) - ADDQ $0x20, R10 - VMOVDQU Y3, (R11) - ADDQ $0x20, R11 - VMOVDQU Y4, (R12) - ADDQ $0x20, R12 - VMOVDQU Y5, (R13) - ADDQ $0x20, R13 - VMOVDQU Y6, (R14) - ADDQ $0x20, R14 - VMOVDQU Y7, (DI) - ADDQ $0x20, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x8Xor_loop - VZEROUPPER - -mulAvxTwo_3x8Xor_end: - RET - -// func mulAvxTwo_3x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x9(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 68 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_3x9_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ out_base+48(FP), DI - MOVQ (DI), R8 - MOVQ 24(DI), R9 - MOVQ 48(DI), R10 - MOVQ 72(DI), R11 - MOVQ 96(DI), R12 - MOVQ 120(DI), R13 - MOVQ 144(DI), R14 - MOVQ 168(DI), R15 - MOVQ 192(DI), DI - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, DI - - // Add start offset to input - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DX - MOVQ $0x0000000f, BP - MOVQ BP, X9 - VPBROADCASTB X9, Y9 - -mulAvxTwo_3x9_loop: - // Load and process 32 bytes from input 0 to 9 outputs - VMOVDQU (BX), Y12 - ADDQ $0x20, BX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU (CX), Y10 - VMOVDQU 32(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y0 - VMOVDQU 64(CX), Y10 - VMOVDQU 96(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y1 - VMOVDQU 128(CX), Y10 - VMOVDQU 160(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y2 - VMOVDQU 192(CX), Y10 - VMOVDQU 224(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y3 - VMOVDQU 256(CX), Y10 - VMOVDQU 288(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y4 - VMOVDQU 320(CX), Y10 - VMOVDQU 352(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y5 - VMOVDQU 384(CX), Y10 - VMOVDQU 416(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y6 - VMOVDQU 448(CX), Y10 - VMOVDQU 480(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y7 - VMOVDQU 512(CX), Y10 - VMOVDQU 544(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y8 - - // Load and process 32 bytes from input 1 to 9 outputs - VMOVDQU (SI), Y12 - ADDQ $0x20, SI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 576(CX), Y10 - VMOVDQU 608(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 640(CX), Y10 - VMOVDQU 672(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 704(CX), Y10 - VMOVDQU 736(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 768(CX), Y10 - VMOVDQU 800(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 832(CX), Y10 - VMOVDQU 864(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 896(CX), Y10 - VMOVDQU 928(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 960(CX), Y10 - VMOVDQU 992(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1024(CX), Y10 - VMOVDQU 1056(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1088(CX), Y10 - VMOVDQU 1120(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 2 to 9 outputs - VMOVDQU (DX), Y12 - ADDQ $0x20, DX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1152(CX), Y10 - VMOVDQU 1184(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1216(CX), Y10 - VMOVDQU 1248(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1280(CX), Y10 - VMOVDQU 1312(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1344(CX), Y10 - VMOVDQU 1376(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1408(CX), Y10 - VMOVDQU 1440(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 1472(CX), Y10 - VMOVDQU 1504(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 1536(CX), Y10 - VMOVDQU 1568(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1600(CX), Y10 - VMOVDQU 1632(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1664(CX), Y10 - VMOVDQU 1696(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Store 9 outputs - VMOVDQU Y0, (R8) - ADDQ $0x20, R8 - VMOVDQU Y1, (R9) - ADDQ $0x20, R9 - VMOVDQU Y2, (R10) - ADDQ $0x20, R10 - VMOVDQU Y3, (R11) - ADDQ $0x20, R11 - VMOVDQU Y4, (R12) - ADDQ $0x20, R12 - VMOVDQU Y5, (R13) - ADDQ $0x20, R13 - VMOVDQU Y6, (R14) - ADDQ $0x20, R14 - VMOVDQU Y7, (R15) - ADDQ $0x20, R15 - VMOVDQU Y8, (DI) - ADDQ $0x20, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x9_loop - VZEROUPPER - -mulAvxTwo_3x9_end: - RET - -// func mulAvxTwo_3x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x9Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 68 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_3x9Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DX - MOVQ out_base+48(FP), DI - MOVQ (DI), R8 - MOVQ 24(DI), R9 - MOVQ 48(DI), R10 - MOVQ 72(DI), R11 - MOVQ 96(DI), R12 - MOVQ 120(DI), R13 - MOVQ 144(DI), R14 - MOVQ 168(DI), R15 - MOVQ 192(DI), DI - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, DI - - // Add start offset to input - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DX - MOVQ $0x0000000f, BP - MOVQ BP, X9 - VPBROADCASTB X9, Y9 - -mulAvxTwo_3x9Xor_loop: - // Load and process 32 bytes from input 0 to 9 outputs - VMOVDQU (BX), Y12 - ADDQ $0x20, BX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU (R8), Y0 - VMOVDQU (CX), Y10 - VMOVDQU 32(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU (R9), Y1 - VMOVDQU 64(CX), Y10 - VMOVDQU 96(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU (R10), Y2 - VMOVDQU 128(CX), Y10 - VMOVDQU 160(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU (R11), Y3 - VMOVDQU 192(CX), Y10 - VMOVDQU 224(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU (R12), Y4 - VMOVDQU 256(CX), Y10 - VMOVDQU 288(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU (R13), Y5 - VMOVDQU 320(CX), Y10 - VMOVDQU 352(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU (R14), Y6 - VMOVDQU 384(CX), Y10 - VMOVDQU 416(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU (R15), Y7 - VMOVDQU 448(CX), Y10 - VMOVDQU 480(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU (DI), Y8 - VMOVDQU 512(CX), Y10 - VMOVDQU 544(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 1 to 9 outputs - VMOVDQU (SI), Y12 - ADDQ $0x20, SI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 576(CX), Y10 - VMOVDQU 608(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 640(CX), Y10 - VMOVDQU 672(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 704(CX), Y10 - VMOVDQU 736(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 768(CX), Y10 - VMOVDQU 800(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 832(CX), Y10 - VMOVDQU 864(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 896(CX), Y10 - VMOVDQU 928(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 960(CX), Y10 - VMOVDQU 992(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1024(CX), Y10 - VMOVDQU 1056(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1088(CX), Y10 - VMOVDQU 1120(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 2 to 9 outputs - VMOVDQU (DX), Y12 - ADDQ $0x20, DX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1152(CX), Y10 - VMOVDQU 1184(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1216(CX), Y10 - VMOVDQU 1248(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1280(CX), Y10 - VMOVDQU 1312(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1344(CX), Y10 - VMOVDQU 1376(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1408(CX), Y10 - VMOVDQU 1440(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 1472(CX), Y10 - VMOVDQU 1504(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 1536(CX), Y10 - VMOVDQU 1568(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1600(CX), Y10 - VMOVDQU 1632(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1664(CX), Y10 - VMOVDQU 1696(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Store 9 outputs - VMOVDQU Y0, (R8) - ADDQ $0x20, R8 - VMOVDQU Y1, (R9) - ADDQ $0x20, R9 - VMOVDQU Y2, (R10) - ADDQ $0x20, R10 - VMOVDQU Y3, (R11) - ADDQ $0x20, R11 - VMOVDQU Y4, (R12) - ADDQ $0x20, R12 - VMOVDQU Y5, (R13) - ADDQ $0x20, R13 - VMOVDQU Y6, (R14) - ADDQ $0x20, R14 - VMOVDQU Y7, (R15) - ADDQ $0x20, R15 - VMOVDQU Y8, (DI) - ADDQ $0x20, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_3x9Xor_loop - VZEROUPPER - -mulAvxTwo_3x9Xor_end: - RET - -// func mulAvxTwo_3x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x10(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 75 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_3x10_end - MOVQ in_base+24(FP), AX - MOVQ (AX), DX - MOVQ 24(AX), BX - MOVQ 48(AX), AX - MOVQ out_base+48(FP), SI - MOVQ (SI), DI - MOVQ 24(SI), R8 - MOVQ 48(SI), R9 - MOVQ 72(SI), R10 - MOVQ 96(SI), R11 - MOVQ 120(SI), R12 - MOVQ 144(SI), R13 - MOVQ 168(SI), R14 - MOVQ 192(SI), R15 - MOVQ 216(SI), SI - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, SI - - // Add start offset to input - ADDQ BP, DX - ADDQ BP, BX - ADDQ BP, AX - MOVQ $0x0000000f, BP - MOVQ BP, X10 - VPBROADCASTB X10, Y10 - MOVQ n+80(FP), BP - SHRQ $0x05, BP - -mulAvxTwo_3x10_loop: - // Load and process 32 bytes from input 0 to 10 outputs - VMOVDQU (DX), Y13 - ADDQ $0x20, DX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU (CX), Y11 - VMOVDQU 32(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y0 - VMOVDQU 64(CX), Y11 - VMOVDQU 96(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y1 - VMOVDQU 128(CX), Y11 - VMOVDQU 160(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y2 - VMOVDQU 192(CX), Y11 - VMOVDQU 224(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y3 - VMOVDQU 256(CX), Y11 - VMOVDQU 288(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y4 - VMOVDQU 320(CX), Y11 - VMOVDQU 352(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y5 - VMOVDQU 384(CX), Y11 - VMOVDQU 416(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y6 - VMOVDQU 448(CX), Y11 - VMOVDQU 480(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y7 - VMOVDQU 512(CX), Y11 - VMOVDQU 544(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y8 - VMOVDQU 576(CX), Y11 - VMOVDQU 608(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y9 - - // Load and process 32 bytes from input 1 to 10 outputs - VMOVDQU (BX), Y13 - ADDQ $0x20, BX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 640(CX), Y11 - VMOVDQU 672(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 704(CX), Y11 - VMOVDQU 736(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 768(CX), Y11 - VMOVDQU 800(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 832(CX), Y11 - VMOVDQU 864(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 896(CX), Y11 - VMOVDQU 928(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 960(CX), Y11 - VMOVDQU 992(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1024(CX), Y11 - VMOVDQU 1056(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1088(CX), Y11 - VMOVDQU 1120(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1152(CX), Y11 - VMOVDQU 1184(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1216(CX), Y11 - VMOVDQU 1248(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 2 to 10 outputs - VMOVDQU (AX), Y13 - ADDQ $0x20, AX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1280(CX), Y11 - VMOVDQU 1312(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1344(CX), Y11 - VMOVDQU 1376(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 1408(CX), Y11 - VMOVDQU 1440(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 1472(CX), Y11 - VMOVDQU 1504(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 1536(CX), Y11 - VMOVDQU 1568(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 1600(CX), Y11 - VMOVDQU 1632(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1664(CX), Y11 - VMOVDQU 1696(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1728(CX), Y11 - VMOVDQU 1760(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1792(CX), Y11 - VMOVDQU 1824(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1856(CX), Y11 - VMOVDQU 1888(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Store 10 outputs - VMOVDQU Y0, (DI) - ADDQ $0x20, DI - VMOVDQU Y1, (R8) - ADDQ $0x20, R8 - VMOVDQU Y2, (R9) - ADDQ $0x20, R9 - VMOVDQU Y3, (R10) - ADDQ $0x20, R10 - VMOVDQU Y4, (R11) - ADDQ $0x20, R11 - VMOVDQU Y5, (R12) - ADDQ $0x20, R12 - VMOVDQU Y6, (R13) - ADDQ $0x20, R13 - VMOVDQU Y7, (R14) - ADDQ $0x20, R14 - VMOVDQU Y8, (R15) - ADDQ $0x20, R15 - VMOVDQU Y9, (SI) - ADDQ $0x20, SI - - // Prepare for next loop - DECQ BP - JNZ mulAvxTwo_3x10_loop - VZEROUPPER - -mulAvxTwo_3x10_end: - RET - -// func mulAvxTwo_3x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_3x10Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 75 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_3x10Xor_end - MOVQ in_base+24(FP), AX - MOVQ (AX), DX - MOVQ 24(AX), BX - MOVQ 48(AX), AX - MOVQ out_base+48(FP), SI - MOVQ (SI), DI - MOVQ 24(SI), R8 - MOVQ 48(SI), R9 - MOVQ 72(SI), R10 - MOVQ 96(SI), R11 - MOVQ 120(SI), R12 - MOVQ 144(SI), R13 - MOVQ 168(SI), R14 - MOVQ 192(SI), R15 - MOVQ 216(SI), SI - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, SI - - // Add start offset to input - ADDQ BP, DX - ADDQ BP, BX - ADDQ BP, AX - MOVQ $0x0000000f, BP - MOVQ BP, X10 - VPBROADCASTB X10, Y10 - MOVQ n+80(FP), BP - SHRQ $0x05, BP - -mulAvxTwo_3x10Xor_loop: - // Load and process 32 bytes from input 0 to 10 outputs - VMOVDQU (DX), Y13 - ADDQ $0x20, DX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU (DI), Y0 - VMOVDQU (CX), Y11 - VMOVDQU 32(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU (R8), Y1 - VMOVDQU 64(CX), Y11 - VMOVDQU 96(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU (R9), Y2 - VMOVDQU 128(CX), Y11 - VMOVDQU 160(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU (R10), Y3 - VMOVDQU 192(CX), Y11 - VMOVDQU 224(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU (R11), Y4 - VMOVDQU 256(CX), Y11 - VMOVDQU 288(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU (R12), Y5 - VMOVDQU 320(CX), Y11 - VMOVDQU 352(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU (R13), Y6 - VMOVDQU 384(CX), Y11 - VMOVDQU 416(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU (R14), Y7 - VMOVDQU 448(CX), Y11 - VMOVDQU 480(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU (R15), Y8 - VMOVDQU 512(CX), Y11 - VMOVDQU 544(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU (SI), Y9 - VMOVDQU 576(CX), Y11 - VMOVDQU 608(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 1 to 10 outputs - VMOVDQU (BX), Y13 - ADDQ $0x20, BX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 640(CX), Y11 - VMOVDQU 672(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 704(CX), Y11 - VMOVDQU 736(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 768(CX), Y11 - VMOVDQU 800(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 832(CX), Y11 - VMOVDQU 864(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 896(CX), Y11 - VMOVDQU 928(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 960(CX), Y11 - VMOVDQU 992(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1024(CX), Y11 - VMOVDQU 1056(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1088(CX), Y11 - VMOVDQU 1120(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1152(CX), Y11 - VMOVDQU 1184(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1216(CX), Y11 - VMOVDQU 1248(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 2 to 10 outputs - VMOVDQU (AX), Y13 - ADDQ $0x20, AX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1280(CX), Y11 - VMOVDQU 1312(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1344(CX), Y11 - VMOVDQU 1376(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 1408(CX), Y11 - VMOVDQU 1440(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 1472(CX), Y11 - VMOVDQU 1504(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 1536(CX), Y11 - VMOVDQU 1568(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 1600(CX), Y11 - VMOVDQU 1632(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1664(CX), Y11 - VMOVDQU 1696(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1728(CX), Y11 - VMOVDQU 1760(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1792(CX), Y11 - VMOVDQU 1824(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1856(CX), Y11 - VMOVDQU 1888(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Store 10 outputs - VMOVDQU Y0, (DI) - ADDQ $0x20, DI - VMOVDQU Y1, (R8) - ADDQ $0x20, R8 - VMOVDQU Y2, (R9) - ADDQ $0x20, R9 - VMOVDQU Y3, (R10) - ADDQ $0x20, R10 - VMOVDQU Y4, (R11) - ADDQ $0x20, R11 - VMOVDQU Y5, (R12) - ADDQ $0x20, R12 - VMOVDQU Y6, (R13) - ADDQ $0x20, R13 - VMOVDQU Y7, (R14) - ADDQ $0x20, R14 - VMOVDQU Y8, (R15) - ADDQ $0x20, R15 - VMOVDQU Y9, (SI) - ADDQ $0x20, SI - - // Prepare for next loop - DECQ BP - JNZ mulAvxTwo_3x10Xor_loop - VZEROUPPER - -mulAvxTwo_3x10Xor_end: - RET - -// func mulAvxTwo_4x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x1(SB), NOSPLIT, $0-88 - // Loading all tables to registers - // Destination kept in GP registers - // Full registers estimated 12 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_4x1_end - VMOVDQU (CX), Y0 - VMOVDQU 32(CX), Y1 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - MOVQ in_base+24(FP), CX - MOVQ (CX), DX - MOVQ 24(CX), BX - MOVQ 48(CX), SI - MOVQ 72(CX), CX - MOVQ out_base+48(FP), DI - MOVQ (DI), DI - MOVQ start+72(FP), R8 - - // Add start offset to output - ADDQ R8, DI - - // Add start offset to input - ADDQ R8, DX - ADDQ R8, BX - ADDQ R8, SI - ADDQ R8, CX - MOVQ $0x0000000f, R8 - MOVQ R8, X9 - VPBROADCASTB X9, Y9 - -mulAvxTwo_4x1_loop: - // Load and process 32 bytes from input 0 to 1 outputs - VMOVDQU (DX), Y10 - ADDQ $0x20, DX - VPSRLQ $0x04, Y10, Y11 - VPAND Y9, Y10, Y10 - VPAND Y9, Y11, Y11 - VPSHUFB Y10, Y0, Y10 - VPSHUFB Y11, Y1, Y11 - VPXOR Y10, Y11, Y8 - - // Load and process 32 bytes from input 1 to 1 outputs - VMOVDQU (BX), Y10 - ADDQ $0x20, BX - VPSRLQ $0x04, Y10, Y11 - VPAND Y9, Y10, Y10 - VPAND Y9, Y11, Y11 - VPSHUFB Y10, Y2, Y10 - VPSHUFB Y11, Y3, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 2 to 1 outputs - VMOVDQU (SI), Y10 - ADDQ $0x20, SI - VPSRLQ $0x04, Y10, Y11 - VPAND Y9, Y10, Y10 - VPAND Y9, Y11, Y11 - VPSHUFB Y10, Y4, Y10 - VPSHUFB Y11, Y5, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 3 to 1 outputs - VMOVDQU (CX), Y10 - ADDQ $0x20, CX - VPSRLQ $0x04, Y10, Y11 - VPAND Y9, Y10, Y10 - VPAND Y9, Y11, Y11 - VPSHUFB Y10, Y6, Y10 - VPSHUFB Y11, Y7, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Store 1 outputs - VMOVDQU Y8, (DI) - ADDQ $0x20, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_4x1_loop - VZEROUPPER - -mulAvxTwo_4x1_end: - RET - -// func mulAvxTwo_4x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x1_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 22 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_4x1_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), DX - MOVQ out_base+48(FP), R8 - MOVQ out_base+48(FP), R8 - MOVQ (R8), R8 - MOVQ start+72(FP), R9 - - // Add start offset to output - ADDQ R9, R8 - - // Add start offset to input - ADDQ R9, BX - ADDQ R9, SI - ADDQ R9, DI - ADDQ R9, DX - MOVQ $0x0000000f, R9 - MOVQ R9, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_4x1_64_loop: - // Load and process 64 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y6 - VMOVDQU 32(BX), Y5 - ADDQ $0x40, BX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y0 - VPXOR Y5, Y6, Y1 - - // Load and process 64 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y6 - VMOVDQU 32(SI), Y5 - ADDQ $0x40, SI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 2 to 1 outputs - VMOVDQU (DI), Y6 - VMOVDQU 32(DI), Y5 - ADDQ $0x40, DI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 3 to 1 outputs - VMOVDQU (DX), Y6 - VMOVDQU 32(DX), Y5 - ADDQ $0x40, DX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Store 1 outputs - VMOVDQU Y0, (R8) - VMOVDQU Y1, 32(R8) - ADDQ $0x40, R8 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_4x1_64_loop - VZEROUPPER - -mulAvxTwo_4x1_64_end: - RET - -// func mulAvxTwo_4x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x1Xor(SB), NOSPLIT, $0-88 - // Loading all tables to registers - // Destination kept in GP registers - // Full registers estimated 12 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_4x1Xor_end - VMOVDQU (CX), Y0 - VMOVDQU 32(CX), Y1 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - MOVQ in_base+24(FP), CX - MOVQ (CX), DX - MOVQ 24(CX), BX - MOVQ 48(CX), SI - MOVQ 72(CX), CX - MOVQ out_base+48(FP), DI - MOVQ (DI), DI - MOVQ start+72(FP), R8 - - // Add start offset to output - ADDQ R8, DI - - // Add start offset to input - ADDQ R8, DX - ADDQ R8, BX - ADDQ R8, SI - ADDQ R8, CX - MOVQ $0x0000000f, R8 - MOVQ R8, X9 - VPBROADCASTB X9, Y9 - -mulAvxTwo_4x1Xor_loop: - // Load and process 32 bytes from input 0 to 1 outputs - VMOVDQU (DX), Y10 - ADDQ $0x20, DX - VPSRLQ $0x04, Y10, Y11 - VPAND Y9, Y10, Y10 - VPAND Y9, Y11, Y11 - VMOVDQU (DI), Y8 - VPSHUFB Y10, Y0, Y10 - VPSHUFB Y11, Y1, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 1 to 1 outputs - VMOVDQU (BX), Y10 - ADDQ $0x20, BX - VPSRLQ $0x04, Y10, Y11 - VPAND Y9, Y10, Y10 - VPAND Y9, Y11, Y11 - VPSHUFB Y10, Y2, Y10 - VPSHUFB Y11, Y3, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 2 to 1 outputs - VMOVDQU (SI), Y10 - ADDQ $0x20, SI - VPSRLQ $0x04, Y10, Y11 - VPAND Y9, Y10, Y10 - VPAND Y9, Y11, Y11 - VPSHUFB Y10, Y4, Y10 - VPSHUFB Y11, Y5, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 3 to 1 outputs - VMOVDQU (CX), Y10 - ADDQ $0x20, CX - VPSRLQ $0x04, Y10, Y11 - VPAND Y9, Y10, Y10 - VPAND Y9, Y11, Y11 - VPSHUFB Y10, Y6, Y10 - VPSHUFB Y11, Y7, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Store 1 outputs - VMOVDQU Y8, (DI) - ADDQ $0x20, DI - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_4x1Xor_loop - VZEROUPPER - -mulAvxTwo_4x1Xor_end: - RET - -// func mulAvxTwo_4x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x1_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 22 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_4x1_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), DX - MOVQ out_base+48(FP), R8 - MOVQ out_base+48(FP), R8 - MOVQ (R8), R8 - MOVQ start+72(FP), R9 - - // Add start offset to output - ADDQ R9, R8 - - // Add start offset to input - ADDQ R9, BX - ADDQ R9, SI - ADDQ R9, DI - ADDQ R9, DX - MOVQ $0x0000000f, R9 - MOVQ R9, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_4x1_64Xor_loop: - // Load 1 outputs - VMOVDQU (R8), Y0 - VMOVDQU 32(R8), Y1 - - // Load and process 64 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y6 - VMOVDQU 32(BX), Y5 - ADDQ $0x40, BX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y6 - VMOVDQU 32(SI), Y5 - ADDQ $0x40, SI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 2 to 1 outputs - VMOVDQU (DI), Y6 - VMOVDQU 32(DI), Y5 - ADDQ $0x40, DI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 3 to 1 outputs - VMOVDQU (DX), Y6 - VMOVDQU 32(DX), Y5 - ADDQ $0x40, DX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Store 1 outputs - VMOVDQU Y0, (R8) - VMOVDQU Y1, 32(R8) - ADDQ $0x40, R8 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_4x1_64Xor_loop - VZEROUPPER - -mulAvxTwo_4x1_64Xor_end: - RET - -// func mulAvxTwo_4x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x2(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 23 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_4x2_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), DX - MOVQ out_base+48(FP), R8 - MOVQ (R8), R9 - MOVQ 24(R8), R8 - MOVQ start+72(FP), R10 - - // Add start offset to output - ADDQ R10, R9 - ADDQ R10, R8 - - // Add start offset to input - ADDQ R10, BX - ADDQ R10, SI - ADDQ R10, DI - ADDQ R10, DX - MOVQ $0x0000000f, R10 - MOVQ R10, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_4x2_loop: - // Load and process 32 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y5 - ADDQ $0x20, BX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y0 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y1 - - // Load and process 32 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y5 - ADDQ $0x20, SI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y5 - ADDQ $0x20, DI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 3 to 2 outputs - VMOVDQU (DX), Y5 - ADDQ $0x20, DX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 384(CX), Y3 - VMOVDQU 416(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 448(CX), Y3 - VMOVDQU 480(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Store 2 outputs - VMOVDQU Y0, (R9) - ADDQ $0x20, R9 - VMOVDQU Y1, (R8) - ADDQ $0x20, R8 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_4x2_loop - VZEROUPPER - -mulAvxTwo_4x2_end: - RET - -// func mulAvxTwo_4x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x2_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 41 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_4x2_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), DX - MOVQ out_base+48(FP), R8 - MOVQ out_base+48(FP), R8 - MOVQ (R8), R9 - MOVQ 24(R8), R8 - MOVQ start+72(FP), R10 - - // Add start offset to output - ADDQ R10, R9 - ADDQ R10, R8 - - // Add start offset to input - ADDQ R10, BX - ADDQ R10, SI - ADDQ R10, DI - ADDQ R10, DX - MOVQ $0x0000000f, R10 - MOVQ R10, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_4x2_64_loop: - // Load and process 64 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y9 - VMOVDQU 32(BX), Y11 - ADDQ $0x40, BX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y0 - VPXOR Y7, Y8, Y1 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y2 - VPXOR Y7, Y8, Y3 - - // Load and process 64 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y9 - VMOVDQU 32(SI), Y11 - ADDQ $0x40, SI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y9 - VMOVDQU 32(DI), Y11 - ADDQ $0x40, DI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 3 to 2 outputs - VMOVDQU (DX), Y9 - VMOVDQU 32(DX), Y11 - ADDQ $0x40, DX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Store 2 outputs - VMOVDQU Y0, (R9) - VMOVDQU Y1, 32(R9) - ADDQ $0x40, R9 - VMOVDQU Y2, (R8) - VMOVDQU Y3, 32(R8) - ADDQ $0x40, R8 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_4x2_64_loop - VZEROUPPER - -mulAvxTwo_4x2_64_end: - RET - -// func mulAvxTwo_4x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x2Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 23 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_4x2Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), DX - MOVQ out_base+48(FP), R8 - MOVQ (R8), R9 - MOVQ 24(R8), R8 - MOVQ start+72(FP), R10 - - // Add start offset to output - ADDQ R10, R9 - ADDQ R10, R8 - - // Add start offset to input - ADDQ R10, BX - ADDQ R10, SI - ADDQ R10, DI - ADDQ R10, DX - MOVQ $0x0000000f, R10 - MOVQ R10, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_4x2Xor_loop: - // Load and process 32 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y5 - ADDQ $0x20, BX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU (R9), Y0 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU (R8), Y1 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y5 - ADDQ $0x20, SI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y5 - ADDQ $0x20, DI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 3 to 2 outputs - VMOVDQU (DX), Y5 - ADDQ $0x20, DX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 384(CX), Y3 - VMOVDQU 416(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 448(CX), Y3 - VMOVDQU 480(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Store 2 outputs - VMOVDQU Y0, (R9) - ADDQ $0x20, R9 - VMOVDQU Y1, (R8) - ADDQ $0x20, R8 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_4x2Xor_loop - VZEROUPPER - -mulAvxTwo_4x2Xor_end: - RET - -// func mulAvxTwo_4x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x2_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 41 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_4x2_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), DX - MOVQ out_base+48(FP), R8 - MOVQ out_base+48(FP), R8 - MOVQ (R8), R9 - MOVQ 24(R8), R8 - MOVQ start+72(FP), R10 - - // Add start offset to output - ADDQ R10, R9 - ADDQ R10, R8 - - // Add start offset to input - ADDQ R10, BX - ADDQ R10, SI - ADDQ R10, DI - ADDQ R10, DX - MOVQ $0x0000000f, R10 - MOVQ R10, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_4x2_64Xor_loop: - // Load 2 outputs - VMOVDQU (R9), Y0 - VMOVDQU 32(R9), Y1 - VMOVDQU (R8), Y2 - VMOVDQU 32(R8), Y3 - - // Load and process 64 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y9 - VMOVDQU 32(BX), Y11 - ADDQ $0x40, BX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y9 - VMOVDQU 32(SI), Y11 - ADDQ $0x40, SI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y9 - VMOVDQU 32(DI), Y11 - ADDQ $0x40, DI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 3 to 2 outputs - VMOVDQU (DX), Y9 - VMOVDQU 32(DX), Y11 - ADDQ $0x40, DX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Store 2 outputs - VMOVDQU Y0, (R9) - VMOVDQU Y1, 32(R9) - ADDQ $0x40, R9 - VMOVDQU Y2, (R8) - VMOVDQU Y3, 32(R8) - ADDQ $0x40, R8 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_4x2_64Xor_loop - VZEROUPPER - -mulAvxTwo_4x2_64Xor_end: - RET - -// func mulAvxTwo_4x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x3(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 32 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_4x3_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), DX - MOVQ out_base+48(FP), R8 - MOVQ (R8), R9 - MOVQ 24(R8), R10 - MOVQ 48(R8), R8 - MOVQ start+72(FP), R11 - - // Add start offset to output - ADDQ R11, R9 - ADDQ R11, R10 - ADDQ R11, R8 - - // Add start offset to input - ADDQ R11, BX - ADDQ R11, SI - ADDQ R11, DI - ADDQ R11, DX - MOVQ $0x0000000f, R11 - MOVQ R11, X3 - VPBROADCASTB X3, Y3 - -mulAvxTwo_4x3_loop: - // Load and process 32 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y6 - ADDQ $0x20, BX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU (CX), Y4 - VMOVDQU 32(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y0 - VMOVDQU 64(CX), Y4 - VMOVDQU 96(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y1 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y2 - - // Load and process 32 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y6 - ADDQ $0x20, SI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 192(CX), Y4 - VMOVDQU 224(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 256(CX), Y4 - VMOVDQU 288(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 320(CX), Y4 - VMOVDQU 352(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y6 - ADDQ $0x20, DI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 384(CX), Y4 - VMOVDQU 416(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 448(CX), Y4 - VMOVDQU 480(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 512(CX), Y4 - VMOVDQU 544(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 3 to 3 outputs - VMOVDQU (DX), Y6 - ADDQ $0x20, DX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 576(CX), Y4 - VMOVDQU 608(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 640(CX), Y4 - VMOVDQU 672(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 704(CX), Y4 - VMOVDQU 736(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Store 3 outputs - VMOVDQU Y0, (R9) - ADDQ $0x20, R9 - VMOVDQU Y1, (R10) - ADDQ $0x20, R10 - VMOVDQU Y2, (R8) - ADDQ $0x20, R8 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_4x3_loop - VZEROUPPER - -mulAvxTwo_4x3_end: - RET - -// func mulAvxTwo_4x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x3_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 58 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_4x3_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), DX - MOVQ out_base+48(FP), R8 - MOVQ out_base+48(FP), R8 - MOVQ (R8), R9 - MOVQ 24(R8), R10 - MOVQ 48(R8), R8 - MOVQ start+72(FP), R11 - - // Add start offset to output - ADDQ R11, R9 - ADDQ R11, R10 - ADDQ R11, R8 - - // Add start offset to input - ADDQ R11, BX - ADDQ R11, SI - ADDQ R11, DI - ADDQ R11, DX - MOVQ $0x0000000f, R11 - MOVQ R11, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_4x3_64_loop: - // Load and process 64 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y11 - VMOVDQU 32(BX), Y13 - ADDQ $0x40, BX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y0 - VPXOR Y9, Y10, Y1 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y2 - VPXOR Y9, Y10, Y3 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y4 - VPXOR Y9, Y10, Y5 - - // Load and process 64 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y11 - VMOVDQU 32(SI), Y13 - ADDQ $0x40, SI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y11 - VMOVDQU 32(DI), Y13 - ADDQ $0x40, DI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 3 to 3 outputs - VMOVDQU (DX), Y11 - VMOVDQU 32(DX), Y13 - ADDQ $0x40, DX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Store 3 outputs - VMOVDQU Y0, (R9) - VMOVDQU Y1, 32(R9) - ADDQ $0x40, R9 - VMOVDQU Y2, (R10) - VMOVDQU Y3, 32(R10) - ADDQ $0x40, R10 - VMOVDQU Y4, (R8) - VMOVDQU Y5, 32(R8) - ADDQ $0x40, R8 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_4x3_64_loop - VZEROUPPER - -mulAvxTwo_4x3_64_end: - RET - -// func mulAvxTwo_4x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x3Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 32 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_4x3Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), DX - MOVQ out_base+48(FP), R8 - MOVQ (R8), R9 - MOVQ 24(R8), R10 - MOVQ 48(R8), R8 - MOVQ start+72(FP), R11 - - // Add start offset to output - ADDQ R11, R9 - ADDQ R11, R10 - ADDQ R11, R8 - - // Add start offset to input - ADDQ R11, BX - ADDQ R11, SI - ADDQ R11, DI - ADDQ R11, DX - MOVQ $0x0000000f, R11 - MOVQ R11, X3 - VPBROADCASTB X3, Y3 - -mulAvxTwo_4x3Xor_loop: - // Load and process 32 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y6 - ADDQ $0x20, BX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU (R9), Y0 - VMOVDQU (CX), Y4 - VMOVDQU 32(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU (R10), Y1 - VMOVDQU 64(CX), Y4 - VMOVDQU 96(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU (R8), Y2 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y6 - ADDQ $0x20, SI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 192(CX), Y4 - VMOVDQU 224(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 256(CX), Y4 - VMOVDQU 288(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 320(CX), Y4 - VMOVDQU 352(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y6 - ADDQ $0x20, DI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 384(CX), Y4 - VMOVDQU 416(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 448(CX), Y4 - VMOVDQU 480(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 512(CX), Y4 - VMOVDQU 544(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 3 to 3 outputs - VMOVDQU (DX), Y6 - ADDQ $0x20, DX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 576(CX), Y4 - VMOVDQU 608(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 640(CX), Y4 - VMOVDQU 672(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 704(CX), Y4 - VMOVDQU 736(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Store 3 outputs - VMOVDQU Y0, (R9) - ADDQ $0x20, R9 - VMOVDQU Y1, (R10) - ADDQ $0x20, R10 - VMOVDQU Y2, (R8) - ADDQ $0x20, R8 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_4x3Xor_loop - VZEROUPPER - -mulAvxTwo_4x3Xor_end: - RET - -// func mulAvxTwo_4x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x3_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 58 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_4x3_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), DX - MOVQ out_base+48(FP), R8 - MOVQ out_base+48(FP), R8 - MOVQ (R8), R9 - MOVQ 24(R8), R10 - MOVQ 48(R8), R8 - MOVQ start+72(FP), R11 - - // Add start offset to output - ADDQ R11, R9 - ADDQ R11, R10 - ADDQ R11, R8 - - // Add start offset to input - ADDQ R11, BX - ADDQ R11, SI - ADDQ R11, DI - ADDQ R11, DX - MOVQ $0x0000000f, R11 - MOVQ R11, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_4x3_64Xor_loop: - // Load 3 outputs - VMOVDQU (R9), Y0 - VMOVDQU 32(R9), Y1 - VMOVDQU (R10), Y2 - VMOVDQU 32(R10), Y3 - VMOVDQU (R8), Y4 - VMOVDQU 32(R8), Y5 - - // Load and process 64 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y11 - VMOVDQU 32(BX), Y13 - ADDQ $0x40, BX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y11 - VMOVDQU 32(SI), Y13 - ADDQ $0x40, SI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y11 - VMOVDQU 32(DI), Y13 - ADDQ $0x40, DI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 3 to 3 outputs - VMOVDQU (DX), Y11 - VMOVDQU 32(DX), Y13 - ADDQ $0x40, DX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Store 3 outputs - VMOVDQU Y0, (R9) - VMOVDQU Y1, 32(R9) - ADDQ $0x40, R9 - VMOVDQU Y2, (R10) - VMOVDQU Y3, 32(R10) - ADDQ $0x40, R10 - VMOVDQU Y4, (R8) - VMOVDQU Y5, 32(R8) - ADDQ $0x40, R8 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_4x3_64Xor_loop - VZEROUPPER - -mulAvxTwo_4x3_64Xor_end: - RET - -// func mulAvxTwo_4x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x4(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 41 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_4x4_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), DX - MOVQ out_base+48(FP), R8 - MOVQ (R8), R9 - MOVQ 24(R8), R10 - MOVQ 48(R8), R11 - MOVQ 72(R8), R8 - MOVQ start+72(FP), R12 - - // Add start offset to output - ADDQ R12, R9 - ADDQ R12, R10 - ADDQ R12, R11 - ADDQ R12, R8 - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_4x4_loop: - // Load and process 32 bytes from input 0 to 4 outputs - VMOVDQU (BX), Y7 - ADDQ $0x20, BX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y0 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y1 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y2 - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y3 - - // Load and process 32 bytes from input 1 to 4 outputs - VMOVDQU (SI), Y7 - ADDQ $0x20, SI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 2 to 4 outputs - VMOVDQU (DI), Y7 - ADDQ $0x20, DI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 3 to 4 outputs - VMOVDQU (DX), Y7 - ADDQ $0x20, DX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 768(CX), Y5 - VMOVDQU 800(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 832(CX), Y5 - VMOVDQU 864(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 896(CX), Y5 - VMOVDQU 928(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 960(CX), Y5 - VMOVDQU 992(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Store 4 outputs - VMOVDQU Y0, (R9) - ADDQ $0x20, R9 - VMOVDQU Y1, (R10) - ADDQ $0x20, R10 - VMOVDQU Y2, (R11) - ADDQ $0x20, R11 - VMOVDQU Y3, (R8) - ADDQ $0x20, R8 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_4x4_loop - VZEROUPPER - -mulAvxTwo_4x4_end: - RET - -// func mulAvxTwo_4x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x4Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 41 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_4x4Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), DX - MOVQ out_base+48(FP), R8 - MOVQ (R8), R9 - MOVQ 24(R8), R10 - MOVQ 48(R8), R11 - MOVQ 72(R8), R8 - MOVQ start+72(FP), R12 - - // Add start offset to output - ADDQ R12, R9 - ADDQ R12, R10 - ADDQ R12, R11 - ADDQ R12, R8 - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_4x4Xor_loop: - // Load and process 32 bytes from input 0 to 4 outputs - VMOVDQU (BX), Y7 - ADDQ $0x20, BX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU (R9), Y0 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU (R10), Y1 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU (R11), Y2 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU (R8), Y3 - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 1 to 4 outputs - VMOVDQU (SI), Y7 - ADDQ $0x20, SI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 2 to 4 outputs - VMOVDQU (DI), Y7 - ADDQ $0x20, DI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 3 to 4 outputs - VMOVDQU (DX), Y7 - ADDQ $0x20, DX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 768(CX), Y5 - VMOVDQU 800(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 832(CX), Y5 - VMOVDQU 864(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 896(CX), Y5 - VMOVDQU 928(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 960(CX), Y5 - VMOVDQU 992(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Store 4 outputs - VMOVDQU Y0, (R9) - ADDQ $0x20, R9 - VMOVDQU Y1, (R10) - ADDQ $0x20, R10 - VMOVDQU Y2, (R11) - ADDQ $0x20, R11 - VMOVDQU Y3, (R8) - ADDQ $0x20, R8 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_4x4Xor_loop - VZEROUPPER - -mulAvxTwo_4x4Xor_end: - RET - -// func mulAvxTwo_4x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x5(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 50 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_4x5_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), DX - MOVQ out_base+48(FP), R8 - MOVQ (R8), R9 - MOVQ 24(R8), R10 - MOVQ 48(R8), R11 - MOVQ 72(R8), R12 - MOVQ 96(R8), R8 - MOVQ start+72(FP), R13 - - // Add start offset to output - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, R12 - ADDQ R13, R8 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X5 - VPBROADCASTB X5, Y5 - -mulAvxTwo_4x5_loop: - // Load and process 32 bytes from input 0 to 5 outputs - VMOVDQU (BX), Y8 - ADDQ $0x20, BX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU (CX), Y6 - VMOVDQU 32(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y0 - VMOVDQU 64(CX), Y6 - VMOVDQU 96(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y1 - VMOVDQU 128(CX), Y6 - VMOVDQU 160(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y2 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y3 - VMOVDQU 256(CX), Y6 - VMOVDQU 288(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y4 - - // Load and process 32 bytes from input 1 to 5 outputs - VMOVDQU (SI), Y8 - ADDQ $0x20, SI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 320(CX), Y6 - VMOVDQU 352(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 384(CX), Y6 - VMOVDQU 416(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 448(CX), Y6 - VMOVDQU 480(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 512(CX), Y6 - VMOVDQU 544(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 576(CX), Y6 - VMOVDQU 608(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 2 to 5 outputs - VMOVDQU (DI), Y8 - ADDQ $0x20, DI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 640(CX), Y6 - VMOVDQU 672(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 704(CX), Y6 - VMOVDQU 736(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 768(CX), Y6 - VMOVDQU 800(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 832(CX), Y6 - VMOVDQU 864(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 896(CX), Y6 - VMOVDQU 928(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 3 to 5 outputs - VMOVDQU (DX), Y8 - ADDQ $0x20, DX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 960(CX), Y6 - VMOVDQU 992(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1024(CX), Y6 - VMOVDQU 1056(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1088(CX), Y6 - VMOVDQU 1120(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1152(CX), Y6 - VMOVDQU 1184(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1216(CX), Y6 - VMOVDQU 1248(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Store 5 outputs - VMOVDQU Y0, (R9) - ADDQ $0x20, R9 - VMOVDQU Y1, (R10) - ADDQ $0x20, R10 - VMOVDQU Y2, (R11) - ADDQ $0x20, R11 - VMOVDQU Y3, (R12) - ADDQ $0x20, R12 - VMOVDQU Y4, (R8) - ADDQ $0x20, R8 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_4x5_loop - VZEROUPPER - -mulAvxTwo_4x5_end: - RET - -// func mulAvxTwo_4x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x5Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 50 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_4x5Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), DX - MOVQ out_base+48(FP), R8 - MOVQ (R8), R9 - MOVQ 24(R8), R10 - MOVQ 48(R8), R11 - MOVQ 72(R8), R12 - MOVQ 96(R8), R8 - MOVQ start+72(FP), R13 - - // Add start offset to output - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, R12 - ADDQ R13, R8 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X5 - VPBROADCASTB X5, Y5 - -mulAvxTwo_4x5Xor_loop: - // Load and process 32 bytes from input 0 to 5 outputs - VMOVDQU (BX), Y8 - ADDQ $0x20, BX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU (R9), Y0 - VMOVDQU (CX), Y6 - VMOVDQU 32(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU (R10), Y1 - VMOVDQU 64(CX), Y6 - VMOVDQU 96(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU (R11), Y2 - VMOVDQU 128(CX), Y6 - VMOVDQU 160(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU (R12), Y3 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU (R8), Y4 - VMOVDQU 256(CX), Y6 - VMOVDQU 288(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 1 to 5 outputs - VMOVDQU (SI), Y8 - ADDQ $0x20, SI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 320(CX), Y6 - VMOVDQU 352(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 384(CX), Y6 - VMOVDQU 416(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 448(CX), Y6 - VMOVDQU 480(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 512(CX), Y6 - VMOVDQU 544(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 576(CX), Y6 - VMOVDQU 608(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 2 to 5 outputs - VMOVDQU (DI), Y8 - ADDQ $0x20, DI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 640(CX), Y6 - VMOVDQU 672(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 704(CX), Y6 - VMOVDQU 736(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 768(CX), Y6 - VMOVDQU 800(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 832(CX), Y6 - VMOVDQU 864(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 896(CX), Y6 - VMOVDQU 928(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 3 to 5 outputs - VMOVDQU (DX), Y8 - ADDQ $0x20, DX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 960(CX), Y6 - VMOVDQU 992(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1024(CX), Y6 - VMOVDQU 1056(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1088(CX), Y6 - VMOVDQU 1120(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1152(CX), Y6 - VMOVDQU 1184(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1216(CX), Y6 - VMOVDQU 1248(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Store 5 outputs - VMOVDQU Y0, (R9) - ADDQ $0x20, R9 - VMOVDQU Y1, (R10) - ADDQ $0x20, R10 - VMOVDQU Y2, (R11) - ADDQ $0x20, R11 - VMOVDQU Y3, (R12) - ADDQ $0x20, R12 - VMOVDQU Y4, (R8) - ADDQ $0x20, R8 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_4x5Xor_loop - VZEROUPPER - -mulAvxTwo_4x5Xor_end: - RET - -// func mulAvxTwo_4x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x6(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 59 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_4x6_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), DX - MOVQ out_base+48(FP), R8 - MOVQ (R8), R9 - MOVQ 24(R8), R10 - MOVQ 48(R8), R11 - MOVQ 72(R8), R12 - MOVQ 96(R8), R13 - MOVQ 120(R8), R8 - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, R13 - ADDQ R14, R8 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_4x6_loop: - // Load and process 32 bytes from input 0 to 6 outputs - VMOVDQU (BX), Y9 - ADDQ $0x20, BX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y0 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y1 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y2 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y3 - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y4 - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y5 - - // Load and process 32 bytes from input 1 to 6 outputs - VMOVDQU (SI), Y9 - ADDQ $0x20, SI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 2 to 6 outputs - VMOVDQU (DI), Y9 - ADDQ $0x20, DI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 3 to 6 outputs - VMOVDQU (DX), Y9 - ADDQ $0x20, DX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1152(CX), Y7 - VMOVDQU 1184(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1216(CX), Y7 - VMOVDQU 1248(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1280(CX), Y7 - VMOVDQU 1312(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1344(CX), Y7 - VMOVDQU 1376(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1408(CX), Y7 - VMOVDQU 1440(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1472(CX), Y7 - VMOVDQU 1504(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Store 6 outputs - VMOVDQU Y0, (R9) - ADDQ $0x20, R9 - VMOVDQU Y1, (R10) - ADDQ $0x20, R10 - VMOVDQU Y2, (R11) - ADDQ $0x20, R11 - VMOVDQU Y3, (R12) - ADDQ $0x20, R12 - VMOVDQU Y4, (R13) - ADDQ $0x20, R13 - VMOVDQU Y5, (R8) - ADDQ $0x20, R8 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_4x6_loop - VZEROUPPER - -mulAvxTwo_4x6_end: - RET - -// func mulAvxTwo_4x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x6Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 59 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_4x6Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), DX - MOVQ out_base+48(FP), R8 - MOVQ (R8), R9 - MOVQ 24(R8), R10 - MOVQ 48(R8), R11 - MOVQ 72(R8), R12 - MOVQ 96(R8), R13 - MOVQ 120(R8), R8 - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, R13 - ADDQ R14, R8 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_4x6Xor_loop: - // Load and process 32 bytes from input 0 to 6 outputs - VMOVDQU (BX), Y9 - ADDQ $0x20, BX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU (R9), Y0 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU (R10), Y1 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU (R11), Y2 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU (R12), Y3 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU (R13), Y4 - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU (R8), Y5 - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 1 to 6 outputs - VMOVDQU (SI), Y9 - ADDQ $0x20, SI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 2 to 6 outputs - VMOVDQU (DI), Y9 - ADDQ $0x20, DI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 3 to 6 outputs - VMOVDQU (DX), Y9 - ADDQ $0x20, DX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1152(CX), Y7 - VMOVDQU 1184(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1216(CX), Y7 - VMOVDQU 1248(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1280(CX), Y7 - VMOVDQU 1312(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1344(CX), Y7 - VMOVDQU 1376(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1408(CX), Y7 - VMOVDQU 1440(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1472(CX), Y7 - VMOVDQU 1504(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Store 6 outputs - VMOVDQU Y0, (R9) - ADDQ $0x20, R9 - VMOVDQU Y1, (R10) - ADDQ $0x20, R10 - VMOVDQU Y2, (R11) - ADDQ $0x20, R11 - VMOVDQU Y3, (R12) - ADDQ $0x20, R12 - VMOVDQU Y4, (R13) - ADDQ $0x20, R13 - VMOVDQU Y5, (R8) - ADDQ $0x20, R8 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_4x6Xor_loop - VZEROUPPER - -mulAvxTwo_4x6Xor_end: - RET - -// func mulAvxTwo_4x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x7(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 68 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_4x7_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), DX - MOVQ out_base+48(FP), R8 - MOVQ (R8), R9 - MOVQ 24(R8), R10 - MOVQ 48(R8), R11 - MOVQ 72(R8), R12 - MOVQ 96(R8), R13 - MOVQ 120(R8), R14 - MOVQ 144(R8), R8 - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, R14 - ADDQ R15, R8 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X7 - VPBROADCASTB X7, Y7 - -mulAvxTwo_4x7_loop: - // Load and process 32 bytes from input 0 to 7 outputs - VMOVDQU (BX), Y10 - ADDQ $0x20, BX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU (CX), Y8 - VMOVDQU 32(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y0 - VMOVDQU 64(CX), Y8 - VMOVDQU 96(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y1 - VMOVDQU 128(CX), Y8 - VMOVDQU 160(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y2 - VMOVDQU 192(CX), Y8 - VMOVDQU 224(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y3 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y4 - VMOVDQU 320(CX), Y8 - VMOVDQU 352(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y5 - VMOVDQU 384(CX), Y8 - VMOVDQU 416(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y6 - - // Load and process 32 bytes from input 1 to 7 outputs - VMOVDQU (SI), Y10 - ADDQ $0x20, SI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 448(CX), Y8 - VMOVDQU 480(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 512(CX), Y8 - VMOVDQU 544(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 576(CX), Y8 - VMOVDQU 608(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 640(CX), Y8 - VMOVDQU 672(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 704(CX), Y8 - VMOVDQU 736(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 768(CX), Y8 - VMOVDQU 800(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 832(CX), Y8 - VMOVDQU 864(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 2 to 7 outputs - VMOVDQU (DI), Y10 - ADDQ $0x20, DI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 896(CX), Y8 - VMOVDQU 928(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 960(CX), Y8 - VMOVDQU 992(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1024(CX), Y8 - VMOVDQU 1056(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1088(CX), Y8 - VMOVDQU 1120(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1152(CX), Y8 - VMOVDQU 1184(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1216(CX), Y8 - VMOVDQU 1248(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1280(CX), Y8 - VMOVDQU 1312(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 3 to 7 outputs - VMOVDQU (DX), Y10 - ADDQ $0x20, DX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1344(CX), Y8 - VMOVDQU 1376(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1408(CX), Y8 - VMOVDQU 1440(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1472(CX), Y8 - VMOVDQU 1504(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1536(CX), Y8 - VMOVDQU 1568(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1600(CX), Y8 - VMOVDQU 1632(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1664(CX), Y8 - VMOVDQU 1696(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1728(CX), Y8 - VMOVDQU 1760(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Store 7 outputs - VMOVDQU Y0, (R9) - ADDQ $0x20, R9 - VMOVDQU Y1, (R10) - ADDQ $0x20, R10 - VMOVDQU Y2, (R11) - ADDQ $0x20, R11 - VMOVDQU Y3, (R12) - ADDQ $0x20, R12 - VMOVDQU Y4, (R13) - ADDQ $0x20, R13 - VMOVDQU Y5, (R14) - ADDQ $0x20, R14 - VMOVDQU Y6, (R8) - ADDQ $0x20, R8 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_4x7_loop - VZEROUPPER - -mulAvxTwo_4x7_end: - RET - -// func mulAvxTwo_4x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x7Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 68 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_4x7Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), DX - MOVQ out_base+48(FP), R8 - MOVQ (R8), R9 - MOVQ 24(R8), R10 - MOVQ 48(R8), R11 - MOVQ 72(R8), R12 - MOVQ 96(R8), R13 - MOVQ 120(R8), R14 - MOVQ 144(R8), R8 - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, R14 - ADDQ R15, R8 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X7 - VPBROADCASTB X7, Y7 - -mulAvxTwo_4x7Xor_loop: - // Load and process 32 bytes from input 0 to 7 outputs - VMOVDQU (BX), Y10 - ADDQ $0x20, BX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU (R9), Y0 - VMOVDQU (CX), Y8 - VMOVDQU 32(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU (R10), Y1 - VMOVDQU 64(CX), Y8 - VMOVDQU 96(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU (R11), Y2 - VMOVDQU 128(CX), Y8 - VMOVDQU 160(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU (R12), Y3 - VMOVDQU 192(CX), Y8 - VMOVDQU 224(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU (R13), Y4 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU (R14), Y5 - VMOVDQU 320(CX), Y8 - VMOVDQU 352(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU (R8), Y6 - VMOVDQU 384(CX), Y8 - VMOVDQU 416(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 1 to 7 outputs - VMOVDQU (SI), Y10 - ADDQ $0x20, SI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 448(CX), Y8 - VMOVDQU 480(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 512(CX), Y8 - VMOVDQU 544(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 576(CX), Y8 - VMOVDQU 608(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 640(CX), Y8 - VMOVDQU 672(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 704(CX), Y8 - VMOVDQU 736(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 768(CX), Y8 - VMOVDQU 800(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 832(CX), Y8 - VMOVDQU 864(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 2 to 7 outputs - VMOVDQU (DI), Y10 - ADDQ $0x20, DI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 896(CX), Y8 - VMOVDQU 928(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 960(CX), Y8 - VMOVDQU 992(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1024(CX), Y8 - VMOVDQU 1056(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1088(CX), Y8 - VMOVDQU 1120(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1152(CX), Y8 - VMOVDQU 1184(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1216(CX), Y8 - VMOVDQU 1248(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1280(CX), Y8 - VMOVDQU 1312(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 3 to 7 outputs - VMOVDQU (DX), Y10 - ADDQ $0x20, DX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1344(CX), Y8 - VMOVDQU 1376(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1408(CX), Y8 - VMOVDQU 1440(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1472(CX), Y8 - VMOVDQU 1504(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1536(CX), Y8 - VMOVDQU 1568(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1600(CX), Y8 - VMOVDQU 1632(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1664(CX), Y8 - VMOVDQU 1696(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1728(CX), Y8 - VMOVDQU 1760(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Store 7 outputs - VMOVDQU Y0, (R9) - ADDQ $0x20, R9 - VMOVDQU Y1, (R10) - ADDQ $0x20, R10 - VMOVDQU Y2, (R11) - ADDQ $0x20, R11 - VMOVDQU Y3, (R12) - ADDQ $0x20, R12 - VMOVDQU Y4, (R13) - ADDQ $0x20, R13 - VMOVDQU Y5, (R14) - ADDQ $0x20, R14 - VMOVDQU Y6, (R8) - ADDQ $0x20, R8 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_4x7Xor_loop - VZEROUPPER - -mulAvxTwo_4x7Xor_end: - RET - -// func mulAvxTwo_4x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x8(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 77 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_4x8_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), DX - MOVQ out_base+48(FP), R8 - MOVQ (R8), R9 - MOVQ 24(R8), R10 - MOVQ 48(R8), R11 - MOVQ 72(R8), R12 - MOVQ 96(R8), R13 - MOVQ 120(R8), R14 - MOVQ 144(R8), R15 - MOVQ 168(R8), R8 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R8 - - // Add start offset to input - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, DX - MOVQ $0x0000000f, BP - MOVQ BP, X8 - VPBROADCASTB X8, Y8 - -mulAvxTwo_4x8_loop: - // Load and process 32 bytes from input 0 to 8 outputs - VMOVDQU (BX), Y11 - ADDQ $0x20, BX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU (CX), Y9 - VMOVDQU 32(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y0 - VMOVDQU 64(CX), Y9 - VMOVDQU 96(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y1 - VMOVDQU 128(CX), Y9 - VMOVDQU 160(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y2 - VMOVDQU 192(CX), Y9 - VMOVDQU 224(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y3 - VMOVDQU 256(CX), Y9 - VMOVDQU 288(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y4 - VMOVDQU 320(CX), Y9 - VMOVDQU 352(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y5 - VMOVDQU 384(CX), Y9 - VMOVDQU 416(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y6 - VMOVDQU 448(CX), Y9 - VMOVDQU 480(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y7 - - // Load and process 32 bytes from input 1 to 8 outputs - VMOVDQU (SI), Y11 - ADDQ $0x20, SI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 512(CX), Y9 - VMOVDQU 544(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 576(CX), Y9 - VMOVDQU 608(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y9 - VMOVDQU 672(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 704(CX), Y9 - VMOVDQU 736(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 768(CX), Y9 - VMOVDQU 800(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 832(CX), Y9 - VMOVDQU 864(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 896(CX), Y9 - VMOVDQU 928(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 960(CX), Y9 - VMOVDQU 992(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 2 to 8 outputs - VMOVDQU (DI), Y11 - ADDQ $0x20, DI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1024(CX), Y9 - VMOVDQU 1056(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1088(CX), Y9 - VMOVDQU 1120(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1152(CX), Y9 - VMOVDQU 1184(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1216(CX), Y9 - VMOVDQU 1248(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y9 - VMOVDQU 1312(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1344(CX), Y9 - VMOVDQU 1376(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1408(CX), Y9 - VMOVDQU 1440(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1472(CX), Y9 - VMOVDQU 1504(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 3 to 8 outputs - VMOVDQU (DX), Y11 - ADDQ $0x20, DX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1536(CX), Y9 - VMOVDQU 1568(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1600(CX), Y9 - VMOVDQU 1632(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1664(CX), Y9 - VMOVDQU 1696(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1728(CX), Y9 - VMOVDQU 1760(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1792(CX), Y9 - VMOVDQU 1824(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1856(CX), Y9 - VMOVDQU 1888(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1920(CX), Y9 - VMOVDQU 1952(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1984(CX), Y9 - VMOVDQU 2016(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Store 8 outputs - VMOVDQU Y0, (R9) - ADDQ $0x20, R9 - VMOVDQU Y1, (R10) - ADDQ $0x20, R10 - VMOVDQU Y2, (R11) - ADDQ $0x20, R11 - VMOVDQU Y3, (R12) - ADDQ $0x20, R12 - VMOVDQU Y4, (R13) - ADDQ $0x20, R13 - VMOVDQU Y5, (R14) - ADDQ $0x20, R14 - VMOVDQU Y6, (R15) - ADDQ $0x20, R15 - VMOVDQU Y7, (R8) - ADDQ $0x20, R8 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_4x8_loop - VZEROUPPER - -mulAvxTwo_4x8_end: - RET - -// func mulAvxTwo_4x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x8Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 77 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_4x8Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), DX - MOVQ out_base+48(FP), R8 - MOVQ (R8), R9 - MOVQ 24(R8), R10 - MOVQ 48(R8), R11 - MOVQ 72(R8), R12 - MOVQ 96(R8), R13 - MOVQ 120(R8), R14 - MOVQ 144(R8), R15 - MOVQ 168(R8), R8 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R8 - - // Add start offset to input - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, DX - MOVQ $0x0000000f, BP - MOVQ BP, X8 - VPBROADCASTB X8, Y8 - -mulAvxTwo_4x8Xor_loop: - // Load and process 32 bytes from input 0 to 8 outputs - VMOVDQU (BX), Y11 - ADDQ $0x20, BX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU (R9), Y0 - VMOVDQU (CX), Y9 - VMOVDQU 32(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU (R10), Y1 - VMOVDQU 64(CX), Y9 - VMOVDQU 96(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU (R11), Y2 - VMOVDQU 128(CX), Y9 - VMOVDQU 160(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU (R12), Y3 - VMOVDQU 192(CX), Y9 - VMOVDQU 224(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU (R13), Y4 - VMOVDQU 256(CX), Y9 - VMOVDQU 288(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU (R14), Y5 - VMOVDQU 320(CX), Y9 - VMOVDQU 352(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU (R15), Y6 - VMOVDQU 384(CX), Y9 - VMOVDQU 416(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU (R8), Y7 - VMOVDQU 448(CX), Y9 - VMOVDQU 480(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 1 to 8 outputs - VMOVDQU (SI), Y11 - ADDQ $0x20, SI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 512(CX), Y9 - VMOVDQU 544(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 576(CX), Y9 - VMOVDQU 608(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y9 - VMOVDQU 672(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 704(CX), Y9 - VMOVDQU 736(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 768(CX), Y9 - VMOVDQU 800(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 832(CX), Y9 - VMOVDQU 864(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 896(CX), Y9 - VMOVDQU 928(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 960(CX), Y9 - VMOVDQU 992(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 2 to 8 outputs - VMOVDQU (DI), Y11 - ADDQ $0x20, DI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1024(CX), Y9 - VMOVDQU 1056(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1088(CX), Y9 - VMOVDQU 1120(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1152(CX), Y9 - VMOVDQU 1184(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1216(CX), Y9 - VMOVDQU 1248(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y9 - VMOVDQU 1312(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1344(CX), Y9 - VMOVDQU 1376(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1408(CX), Y9 - VMOVDQU 1440(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1472(CX), Y9 - VMOVDQU 1504(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 3 to 8 outputs - VMOVDQU (DX), Y11 - ADDQ $0x20, DX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1536(CX), Y9 - VMOVDQU 1568(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1600(CX), Y9 - VMOVDQU 1632(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1664(CX), Y9 - VMOVDQU 1696(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1728(CX), Y9 - VMOVDQU 1760(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1792(CX), Y9 - VMOVDQU 1824(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1856(CX), Y9 - VMOVDQU 1888(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1920(CX), Y9 - VMOVDQU 1952(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1984(CX), Y9 - VMOVDQU 2016(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Store 8 outputs - VMOVDQU Y0, (R9) - ADDQ $0x20, R9 - VMOVDQU Y1, (R10) - ADDQ $0x20, R10 - VMOVDQU Y2, (R11) - ADDQ $0x20, R11 - VMOVDQU Y3, (R12) - ADDQ $0x20, R12 - VMOVDQU Y4, (R13) - ADDQ $0x20, R13 - VMOVDQU Y5, (R14) - ADDQ $0x20, R14 - VMOVDQU Y6, (R15) - ADDQ $0x20, R15 - VMOVDQU Y7, (R8) - ADDQ $0x20, R8 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_4x8Xor_loop - VZEROUPPER - -mulAvxTwo_4x8Xor_end: - RET - -// func mulAvxTwo_4x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x9(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 86 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_4x9_end - MOVQ in_base+24(FP), AX - MOVQ (AX), DX - MOVQ 24(AX), BX - MOVQ 48(AX), SI - MOVQ 72(AX), AX - MOVQ out_base+48(FP), DI - MOVQ (DI), R8 - MOVQ 24(DI), R9 - MOVQ 48(DI), R10 - MOVQ 72(DI), R11 - MOVQ 96(DI), R12 - MOVQ 120(DI), R13 - MOVQ 144(DI), R14 - MOVQ 168(DI), R15 - MOVQ 192(DI), DI - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, DI - - // Add start offset to input - ADDQ BP, DX - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, AX - MOVQ $0x0000000f, BP - MOVQ BP, X9 - VPBROADCASTB X9, Y9 - MOVQ n+80(FP), BP - SHRQ $0x05, BP - -mulAvxTwo_4x9_loop: - // Load and process 32 bytes from input 0 to 9 outputs - VMOVDQU (DX), Y12 - ADDQ $0x20, DX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU (CX), Y10 - VMOVDQU 32(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y0 - VMOVDQU 64(CX), Y10 - VMOVDQU 96(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y1 - VMOVDQU 128(CX), Y10 - VMOVDQU 160(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y2 - VMOVDQU 192(CX), Y10 - VMOVDQU 224(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y3 - VMOVDQU 256(CX), Y10 - VMOVDQU 288(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y4 - VMOVDQU 320(CX), Y10 - VMOVDQU 352(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y5 - VMOVDQU 384(CX), Y10 - VMOVDQU 416(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y6 - VMOVDQU 448(CX), Y10 - VMOVDQU 480(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y7 - VMOVDQU 512(CX), Y10 - VMOVDQU 544(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y8 - - // Load and process 32 bytes from input 1 to 9 outputs - VMOVDQU (BX), Y12 - ADDQ $0x20, BX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 576(CX), Y10 - VMOVDQU 608(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 640(CX), Y10 - VMOVDQU 672(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 704(CX), Y10 - VMOVDQU 736(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 768(CX), Y10 - VMOVDQU 800(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 832(CX), Y10 - VMOVDQU 864(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 896(CX), Y10 - VMOVDQU 928(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 960(CX), Y10 - VMOVDQU 992(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1024(CX), Y10 - VMOVDQU 1056(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1088(CX), Y10 - VMOVDQU 1120(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 2 to 9 outputs - VMOVDQU (SI), Y12 - ADDQ $0x20, SI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1152(CX), Y10 - VMOVDQU 1184(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1216(CX), Y10 - VMOVDQU 1248(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1280(CX), Y10 - VMOVDQU 1312(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1344(CX), Y10 - VMOVDQU 1376(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1408(CX), Y10 - VMOVDQU 1440(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 1472(CX), Y10 - VMOVDQU 1504(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 1536(CX), Y10 - VMOVDQU 1568(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1600(CX), Y10 - VMOVDQU 1632(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1664(CX), Y10 - VMOVDQU 1696(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 3 to 9 outputs - VMOVDQU (AX), Y12 - ADDQ $0x20, AX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1728(CX), Y10 - VMOVDQU 1760(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1792(CX), Y10 - VMOVDQU 1824(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1856(CX), Y10 - VMOVDQU 1888(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1920(CX), Y10 - VMOVDQU 1952(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1984(CX), Y10 - VMOVDQU 2016(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2048(CX), Y10 - VMOVDQU 2080(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2112(CX), Y10 - VMOVDQU 2144(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2176(CX), Y10 - VMOVDQU 2208(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2240(CX), Y10 - VMOVDQU 2272(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Store 9 outputs - VMOVDQU Y0, (R8) - ADDQ $0x20, R8 - VMOVDQU Y1, (R9) - ADDQ $0x20, R9 - VMOVDQU Y2, (R10) - ADDQ $0x20, R10 - VMOVDQU Y3, (R11) - ADDQ $0x20, R11 - VMOVDQU Y4, (R12) - ADDQ $0x20, R12 - VMOVDQU Y5, (R13) - ADDQ $0x20, R13 - VMOVDQU Y6, (R14) - ADDQ $0x20, R14 - VMOVDQU Y7, (R15) - ADDQ $0x20, R15 - VMOVDQU Y8, (DI) - ADDQ $0x20, DI - - // Prepare for next loop - DECQ BP - JNZ mulAvxTwo_4x9_loop - VZEROUPPER - -mulAvxTwo_4x9_end: - RET - -// func mulAvxTwo_4x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x9Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 86 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_4x9Xor_end - MOVQ in_base+24(FP), AX - MOVQ (AX), DX - MOVQ 24(AX), BX - MOVQ 48(AX), SI - MOVQ 72(AX), AX - MOVQ out_base+48(FP), DI - MOVQ (DI), R8 - MOVQ 24(DI), R9 - MOVQ 48(DI), R10 - MOVQ 72(DI), R11 - MOVQ 96(DI), R12 - MOVQ 120(DI), R13 - MOVQ 144(DI), R14 - MOVQ 168(DI), R15 - MOVQ 192(DI), DI - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, DI - - // Add start offset to input - ADDQ BP, DX - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, AX - MOVQ $0x0000000f, BP - MOVQ BP, X9 - VPBROADCASTB X9, Y9 - MOVQ n+80(FP), BP - SHRQ $0x05, BP - -mulAvxTwo_4x9Xor_loop: - // Load and process 32 bytes from input 0 to 9 outputs - VMOVDQU (DX), Y12 - ADDQ $0x20, DX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU (R8), Y0 - VMOVDQU (CX), Y10 - VMOVDQU 32(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU (R9), Y1 - VMOVDQU 64(CX), Y10 - VMOVDQU 96(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU (R10), Y2 - VMOVDQU 128(CX), Y10 - VMOVDQU 160(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU (R11), Y3 - VMOVDQU 192(CX), Y10 - VMOVDQU 224(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU (R12), Y4 - VMOVDQU 256(CX), Y10 - VMOVDQU 288(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU (R13), Y5 - VMOVDQU 320(CX), Y10 - VMOVDQU 352(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU (R14), Y6 - VMOVDQU 384(CX), Y10 - VMOVDQU 416(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU (R15), Y7 - VMOVDQU 448(CX), Y10 - VMOVDQU 480(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU (DI), Y8 - VMOVDQU 512(CX), Y10 - VMOVDQU 544(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 1 to 9 outputs - VMOVDQU (BX), Y12 - ADDQ $0x20, BX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 576(CX), Y10 - VMOVDQU 608(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 640(CX), Y10 - VMOVDQU 672(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 704(CX), Y10 - VMOVDQU 736(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 768(CX), Y10 - VMOVDQU 800(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 832(CX), Y10 - VMOVDQU 864(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 896(CX), Y10 - VMOVDQU 928(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 960(CX), Y10 - VMOVDQU 992(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1024(CX), Y10 - VMOVDQU 1056(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1088(CX), Y10 - VMOVDQU 1120(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 2 to 9 outputs - VMOVDQU (SI), Y12 - ADDQ $0x20, SI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1152(CX), Y10 - VMOVDQU 1184(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1216(CX), Y10 - VMOVDQU 1248(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1280(CX), Y10 - VMOVDQU 1312(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1344(CX), Y10 - VMOVDQU 1376(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1408(CX), Y10 - VMOVDQU 1440(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 1472(CX), Y10 - VMOVDQU 1504(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 1536(CX), Y10 - VMOVDQU 1568(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1600(CX), Y10 - VMOVDQU 1632(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1664(CX), Y10 - VMOVDQU 1696(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 3 to 9 outputs - VMOVDQU (AX), Y12 - ADDQ $0x20, AX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1728(CX), Y10 - VMOVDQU 1760(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1792(CX), Y10 - VMOVDQU 1824(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1856(CX), Y10 - VMOVDQU 1888(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1920(CX), Y10 - VMOVDQU 1952(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1984(CX), Y10 - VMOVDQU 2016(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2048(CX), Y10 - VMOVDQU 2080(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2112(CX), Y10 - VMOVDQU 2144(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2176(CX), Y10 - VMOVDQU 2208(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2240(CX), Y10 - VMOVDQU 2272(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Store 9 outputs - VMOVDQU Y0, (R8) - ADDQ $0x20, R8 - VMOVDQU Y1, (R9) - ADDQ $0x20, R9 - VMOVDQU Y2, (R10) - ADDQ $0x20, R10 - VMOVDQU Y3, (R11) - ADDQ $0x20, R11 - VMOVDQU Y4, (R12) - ADDQ $0x20, R12 - VMOVDQU Y5, (R13) - ADDQ $0x20, R13 - VMOVDQU Y6, (R14) - ADDQ $0x20, R14 - VMOVDQU Y7, (R15) - ADDQ $0x20, R15 - VMOVDQU Y8, (DI) - ADDQ $0x20, DI - - // Prepare for next loop - DECQ BP - JNZ mulAvxTwo_4x9Xor_loop - VZEROUPPER - -mulAvxTwo_4x9Xor_end: - RET - -// func mulAvxTwo_4x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x10(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 95 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_4x10_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), DX - MOVQ out_base+48(FP), R8 - MOVQ start+72(FP), R9 - - // Add start offset to input - ADDQ R9, BX - ADDQ R9, SI - ADDQ R9, DI - ADDQ R9, DX - MOVQ $0x0000000f, R10 - MOVQ R10, X10 - VPBROADCASTB X10, Y10 - -mulAvxTwo_4x10_loop: - // Load and process 32 bytes from input 0 to 10 outputs - VMOVDQU (BX), Y13 - ADDQ $0x20, BX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU (CX), Y11 - VMOVDQU 32(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y0 - VMOVDQU 64(CX), Y11 - VMOVDQU 96(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y1 - VMOVDQU 128(CX), Y11 - VMOVDQU 160(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y2 - VMOVDQU 192(CX), Y11 - VMOVDQU 224(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y3 - VMOVDQU 256(CX), Y11 - VMOVDQU 288(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y4 - VMOVDQU 320(CX), Y11 - VMOVDQU 352(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y5 - VMOVDQU 384(CX), Y11 - VMOVDQU 416(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y6 - VMOVDQU 448(CX), Y11 - VMOVDQU 480(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y7 - VMOVDQU 512(CX), Y11 - VMOVDQU 544(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y8 - VMOVDQU 576(CX), Y11 - VMOVDQU 608(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y9 - - // Load and process 32 bytes from input 1 to 10 outputs - VMOVDQU (SI), Y13 - ADDQ $0x20, SI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 640(CX), Y11 - VMOVDQU 672(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 704(CX), Y11 - VMOVDQU 736(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 768(CX), Y11 - VMOVDQU 800(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 832(CX), Y11 - VMOVDQU 864(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 896(CX), Y11 - VMOVDQU 928(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 960(CX), Y11 - VMOVDQU 992(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1024(CX), Y11 - VMOVDQU 1056(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1088(CX), Y11 - VMOVDQU 1120(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1152(CX), Y11 - VMOVDQU 1184(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1216(CX), Y11 - VMOVDQU 1248(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 2 to 10 outputs - VMOVDQU (DI), Y13 - ADDQ $0x20, DI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1280(CX), Y11 - VMOVDQU 1312(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1344(CX), Y11 - VMOVDQU 1376(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 1408(CX), Y11 - VMOVDQU 1440(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 1472(CX), Y11 - VMOVDQU 1504(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 1536(CX), Y11 - VMOVDQU 1568(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 1600(CX), Y11 - VMOVDQU 1632(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1664(CX), Y11 - VMOVDQU 1696(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1728(CX), Y11 - VMOVDQU 1760(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1792(CX), Y11 - VMOVDQU 1824(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1856(CX), Y11 - VMOVDQU 1888(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 3 to 10 outputs - VMOVDQU (DX), Y13 - ADDQ $0x20, DX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1920(CX), Y11 - VMOVDQU 1952(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1984(CX), Y11 - VMOVDQU 2016(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2048(CX), Y11 - VMOVDQU 2080(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2112(CX), Y11 - VMOVDQU 2144(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2176(CX), Y11 - VMOVDQU 2208(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2240(CX), Y11 - VMOVDQU 2272(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2304(CX), Y11 - VMOVDQU 2336(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 2368(CX), Y11 - VMOVDQU 2400(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 2432(CX), Y11 - VMOVDQU 2464(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 2496(CX), Y11 - VMOVDQU 2528(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Store 10 outputs - MOVQ (R8), R10 - VMOVDQU Y0, (R10)(R9*1) - MOVQ 24(R8), R10 - VMOVDQU Y1, (R10)(R9*1) - MOVQ 48(R8), R10 - VMOVDQU Y2, (R10)(R9*1) - MOVQ 72(R8), R10 - VMOVDQU Y3, (R10)(R9*1) - MOVQ 96(R8), R10 - VMOVDQU Y4, (R10)(R9*1) - MOVQ 120(R8), R10 - VMOVDQU Y5, (R10)(R9*1) - MOVQ 144(R8), R10 - VMOVDQU Y6, (R10)(R9*1) - MOVQ 168(R8), R10 - VMOVDQU Y7, (R10)(R9*1) - MOVQ 192(R8), R10 - VMOVDQU Y8, (R10)(R9*1) - MOVQ 216(R8), R10 - VMOVDQU Y9, (R10)(R9*1) - - // Prepare for next loop - ADDQ $0x20, R9 - DECQ AX - JNZ mulAvxTwo_4x10_loop - VZEROUPPER - -mulAvxTwo_4x10_end: - RET - -// func mulAvxTwo_4x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_4x10Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 95 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_4x10Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), DX - MOVQ out_base+48(FP), R8 - MOVQ start+72(FP), R9 - - // Add start offset to input - ADDQ R9, BX - ADDQ R9, SI - ADDQ R9, DI - ADDQ R9, DX - MOVQ $0x0000000f, R10 - MOVQ R10, X10 - VPBROADCASTB X10, Y10 - -mulAvxTwo_4x10Xor_loop: - // Load and process 32 bytes from input 0 to 10 outputs - VMOVDQU (BX), Y13 - ADDQ $0x20, BX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - MOVQ (R8), R10 - VMOVDQU (R10)(R9*1), Y0 - VMOVDQU (CX), Y11 - VMOVDQU 32(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - MOVQ 24(R8), R10 - VMOVDQU (R10)(R9*1), Y1 - VMOVDQU 64(CX), Y11 - VMOVDQU 96(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - MOVQ 48(R8), R10 - VMOVDQU (R10)(R9*1), Y2 - VMOVDQU 128(CX), Y11 - VMOVDQU 160(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - MOVQ 72(R8), R10 - VMOVDQU (R10)(R9*1), Y3 - VMOVDQU 192(CX), Y11 - VMOVDQU 224(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - MOVQ 96(R8), R10 - VMOVDQU (R10)(R9*1), Y4 - VMOVDQU 256(CX), Y11 - VMOVDQU 288(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - MOVQ 120(R8), R10 - VMOVDQU (R10)(R9*1), Y5 - VMOVDQU 320(CX), Y11 - VMOVDQU 352(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - MOVQ 144(R8), R10 - VMOVDQU (R10)(R9*1), Y6 - VMOVDQU 384(CX), Y11 - VMOVDQU 416(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - MOVQ 168(R8), R10 - VMOVDQU (R10)(R9*1), Y7 - VMOVDQU 448(CX), Y11 - VMOVDQU 480(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - MOVQ 192(R8), R10 - VMOVDQU (R10)(R9*1), Y8 - VMOVDQU 512(CX), Y11 - VMOVDQU 544(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - MOVQ 216(R8), R10 - VMOVDQU (R10)(R9*1), Y9 - VMOVDQU 576(CX), Y11 - VMOVDQU 608(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 1 to 10 outputs - VMOVDQU (SI), Y13 - ADDQ $0x20, SI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 640(CX), Y11 - VMOVDQU 672(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 704(CX), Y11 - VMOVDQU 736(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 768(CX), Y11 - VMOVDQU 800(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 832(CX), Y11 - VMOVDQU 864(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 896(CX), Y11 - VMOVDQU 928(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 960(CX), Y11 - VMOVDQU 992(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1024(CX), Y11 - VMOVDQU 1056(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1088(CX), Y11 - VMOVDQU 1120(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1152(CX), Y11 - VMOVDQU 1184(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1216(CX), Y11 - VMOVDQU 1248(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 2 to 10 outputs - VMOVDQU (DI), Y13 - ADDQ $0x20, DI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1280(CX), Y11 - VMOVDQU 1312(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1344(CX), Y11 - VMOVDQU 1376(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 1408(CX), Y11 - VMOVDQU 1440(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 1472(CX), Y11 - VMOVDQU 1504(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 1536(CX), Y11 - VMOVDQU 1568(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 1600(CX), Y11 - VMOVDQU 1632(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1664(CX), Y11 - VMOVDQU 1696(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1728(CX), Y11 - VMOVDQU 1760(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1792(CX), Y11 - VMOVDQU 1824(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1856(CX), Y11 - VMOVDQU 1888(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 3 to 10 outputs - VMOVDQU (DX), Y13 - ADDQ $0x20, DX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1920(CX), Y11 - VMOVDQU 1952(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1984(CX), Y11 - VMOVDQU 2016(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2048(CX), Y11 - VMOVDQU 2080(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2112(CX), Y11 - VMOVDQU 2144(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2176(CX), Y11 - VMOVDQU 2208(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2240(CX), Y11 - VMOVDQU 2272(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2304(CX), Y11 - VMOVDQU 2336(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 2368(CX), Y11 - VMOVDQU 2400(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 2432(CX), Y11 - VMOVDQU 2464(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 2496(CX), Y11 - VMOVDQU 2528(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Store 10 outputs - MOVQ (R8), R10 - VMOVDQU Y0, (R10)(R9*1) - MOVQ 24(R8), R10 - VMOVDQU Y1, (R10)(R9*1) - MOVQ 48(R8), R10 - VMOVDQU Y2, (R10)(R9*1) - MOVQ 72(R8), R10 - VMOVDQU Y3, (R10)(R9*1) - MOVQ 96(R8), R10 - VMOVDQU Y4, (R10)(R9*1) - MOVQ 120(R8), R10 - VMOVDQU Y5, (R10)(R9*1) - MOVQ 144(R8), R10 - VMOVDQU Y6, (R10)(R9*1) - MOVQ 168(R8), R10 - VMOVDQU Y7, (R10)(R9*1) - MOVQ 192(R8), R10 - VMOVDQU Y8, (R10)(R9*1) - MOVQ 216(R8), R10 - VMOVDQU Y9, (R10)(R9*1) - - // Prepare for next loop - ADDQ $0x20, R9 - DECQ AX - JNZ mulAvxTwo_4x10Xor_loop - VZEROUPPER - -mulAvxTwo_4x10Xor_end: - RET - -// func mulAvxTwo_5x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x1(SB), NOSPLIT, $0-88 - // Loading all tables to registers - // Destination kept in GP registers - // Full registers estimated 14 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_5x1_end - VMOVDQU (CX), Y0 - VMOVDQU 32(CX), Y1 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y9 - MOVQ in_base+24(FP), CX - MOVQ (CX), DX - MOVQ 24(CX), BX - MOVQ 48(CX), SI - MOVQ 72(CX), DI - MOVQ 96(CX), CX - MOVQ out_base+48(FP), R8 - MOVQ (R8), R8 - MOVQ start+72(FP), R9 - - // Add start offset to output - ADDQ R9, R8 - - // Add start offset to input - ADDQ R9, DX - ADDQ R9, BX - ADDQ R9, SI - ADDQ R9, DI - ADDQ R9, CX - MOVQ $0x0000000f, R9 - MOVQ R9, X11 - VPBROADCASTB X11, Y11 - -mulAvxTwo_5x1_loop: - // Load and process 32 bytes from input 0 to 1 outputs - VMOVDQU (DX), Y12 - ADDQ $0x20, DX - VPSRLQ $0x04, Y12, Y13 - VPAND Y11, Y12, Y12 - VPAND Y11, Y13, Y13 - VPSHUFB Y12, Y0, Y12 - VPSHUFB Y13, Y1, Y13 - VPXOR Y12, Y13, Y10 - - // Load and process 32 bytes from input 1 to 1 outputs - VMOVDQU (BX), Y12 - ADDQ $0x20, BX - VPSRLQ $0x04, Y12, Y13 - VPAND Y11, Y12, Y12 - VPAND Y11, Y13, Y13 - VPSHUFB Y12, Y2, Y12 - VPSHUFB Y13, Y3, Y13 - XOR3WAY( $0x00, Y12, Y13, Y10) - - // Load and process 32 bytes from input 2 to 1 outputs - VMOVDQU (SI), Y12 - ADDQ $0x20, SI - VPSRLQ $0x04, Y12, Y13 - VPAND Y11, Y12, Y12 - VPAND Y11, Y13, Y13 - VPSHUFB Y12, Y4, Y12 - VPSHUFB Y13, Y5, Y13 - XOR3WAY( $0x00, Y12, Y13, Y10) - - // Load and process 32 bytes from input 3 to 1 outputs - VMOVDQU (DI), Y12 - ADDQ $0x20, DI - VPSRLQ $0x04, Y12, Y13 - VPAND Y11, Y12, Y12 - VPAND Y11, Y13, Y13 - VPSHUFB Y12, Y6, Y12 - VPSHUFB Y13, Y7, Y13 - XOR3WAY( $0x00, Y12, Y13, Y10) - - // Load and process 32 bytes from input 4 to 1 outputs - VMOVDQU (CX), Y12 - ADDQ $0x20, CX - VPSRLQ $0x04, Y12, Y13 - VPAND Y11, Y12, Y12 - VPAND Y11, Y13, Y13 - VPSHUFB Y12, Y8, Y12 - VPSHUFB Y13, Y9, Y13 - XOR3WAY( $0x00, Y12, Y13, Y10) - - // Store 1 outputs - VMOVDQU Y10, (R8) - ADDQ $0x20, R8 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_5x1_loop - VZEROUPPER - -mulAvxTwo_5x1_end: - RET - -// func mulAvxTwo_5x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x1_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 26 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_5x1_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), DX - MOVQ out_base+48(FP), R9 - MOVQ out_base+48(FP), R9 - MOVQ (R9), R9 - MOVQ start+72(FP), R10 - - // Add start offset to output - ADDQ R10, R9 - - // Add start offset to input - ADDQ R10, BX - ADDQ R10, SI - ADDQ R10, DI - ADDQ R10, R8 - ADDQ R10, DX - MOVQ $0x0000000f, R10 - MOVQ R10, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_5x1_64_loop: - // Load and process 64 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y6 - VMOVDQU 32(BX), Y5 - ADDQ $0x40, BX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y0 - VPXOR Y5, Y6, Y1 - - // Load and process 64 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y6 - VMOVDQU 32(SI), Y5 - ADDQ $0x40, SI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 2 to 1 outputs - VMOVDQU (DI), Y6 - VMOVDQU 32(DI), Y5 - ADDQ $0x40, DI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 3 to 1 outputs - VMOVDQU (R8), Y6 - VMOVDQU 32(R8), Y5 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 4 to 1 outputs - VMOVDQU (DX), Y6 - VMOVDQU 32(DX), Y5 - ADDQ $0x40, DX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Store 1 outputs - VMOVDQU Y0, (R9) - VMOVDQU Y1, 32(R9) - ADDQ $0x40, R9 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_5x1_64_loop - VZEROUPPER - -mulAvxTwo_5x1_64_end: - RET - -// func mulAvxTwo_5x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x1Xor(SB), NOSPLIT, $0-88 - // Loading all tables to registers - // Destination kept in GP registers - // Full registers estimated 14 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_5x1Xor_end - VMOVDQU (CX), Y0 - VMOVDQU 32(CX), Y1 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y9 - MOVQ in_base+24(FP), CX - MOVQ (CX), DX - MOVQ 24(CX), BX - MOVQ 48(CX), SI - MOVQ 72(CX), DI - MOVQ 96(CX), CX - MOVQ out_base+48(FP), R8 - MOVQ (R8), R8 - MOVQ start+72(FP), R9 - - // Add start offset to output - ADDQ R9, R8 - - // Add start offset to input - ADDQ R9, DX - ADDQ R9, BX - ADDQ R9, SI - ADDQ R9, DI - ADDQ R9, CX - MOVQ $0x0000000f, R9 - MOVQ R9, X11 - VPBROADCASTB X11, Y11 - -mulAvxTwo_5x1Xor_loop: - // Load and process 32 bytes from input 0 to 1 outputs - VMOVDQU (DX), Y12 - ADDQ $0x20, DX - VPSRLQ $0x04, Y12, Y13 - VPAND Y11, Y12, Y12 - VPAND Y11, Y13, Y13 - VMOVDQU (R8), Y10 - VPSHUFB Y12, Y0, Y12 - VPSHUFB Y13, Y1, Y13 - XOR3WAY( $0x00, Y12, Y13, Y10) - - // Load and process 32 bytes from input 1 to 1 outputs - VMOVDQU (BX), Y12 - ADDQ $0x20, BX - VPSRLQ $0x04, Y12, Y13 - VPAND Y11, Y12, Y12 - VPAND Y11, Y13, Y13 - VPSHUFB Y12, Y2, Y12 - VPSHUFB Y13, Y3, Y13 - XOR3WAY( $0x00, Y12, Y13, Y10) - - // Load and process 32 bytes from input 2 to 1 outputs - VMOVDQU (SI), Y12 - ADDQ $0x20, SI - VPSRLQ $0x04, Y12, Y13 - VPAND Y11, Y12, Y12 - VPAND Y11, Y13, Y13 - VPSHUFB Y12, Y4, Y12 - VPSHUFB Y13, Y5, Y13 - XOR3WAY( $0x00, Y12, Y13, Y10) - - // Load and process 32 bytes from input 3 to 1 outputs - VMOVDQU (DI), Y12 - ADDQ $0x20, DI - VPSRLQ $0x04, Y12, Y13 - VPAND Y11, Y12, Y12 - VPAND Y11, Y13, Y13 - VPSHUFB Y12, Y6, Y12 - VPSHUFB Y13, Y7, Y13 - XOR3WAY( $0x00, Y12, Y13, Y10) - - // Load and process 32 bytes from input 4 to 1 outputs - VMOVDQU (CX), Y12 - ADDQ $0x20, CX - VPSRLQ $0x04, Y12, Y13 - VPAND Y11, Y12, Y12 - VPAND Y11, Y13, Y13 - VPSHUFB Y12, Y8, Y12 - VPSHUFB Y13, Y9, Y13 - XOR3WAY( $0x00, Y12, Y13, Y10) - - // Store 1 outputs - VMOVDQU Y10, (R8) - ADDQ $0x20, R8 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_5x1Xor_loop - VZEROUPPER - -mulAvxTwo_5x1Xor_end: - RET - -// func mulAvxTwo_5x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x1_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 26 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_5x1_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), DX - MOVQ out_base+48(FP), R9 - MOVQ out_base+48(FP), R9 - MOVQ (R9), R9 - MOVQ start+72(FP), R10 - - // Add start offset to output - ADDQ R10, R9 - - // Add start offset to input - ADDQ R10, BX - ADDQ R10, SI - ADDQ R10, DI - ADDQ R10, R8 - ADDQ R10, DX - MOVQ $0x0000000f, R10 - MOVQ R10, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_5x1_64Xor_loop: - // Load 1 outputs - VMOVDQU (R9), Y0 - VMOVDQU 32(R9), Y1 - - // Load and process 64 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y6 - VMOVDQU 32(BX), Y5 - ADDQ $0x40, BX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y6 - VMOVDQU 32(SI), Y5 - ADDQ $0x40, SI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 2 to 1 outputs - VMOVDQU (DI), Y6 - VMOVDQU 32(DI), Y5 - ADDQ $0x40, DI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 3 to 1 outputs - VMOVDQU (R8), Y6 - VMOVDQU 32(R8), Y5 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 4 to 1 outputs - VMOVDQU (DX), Y6 - VMOVDQU 32(DX), Y5 - ADDQ $0x40, DX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Store 1 outputs - VMOVDQU Y0, (R9) - VMOVDQU Y1, 32(R9) - ADDQ $0x40, R9 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_5x1_64Xor_loop - VZEROUPPER - -mulAvxTwo_5x1_64Xor_end: - RET - -// func mulAvxTwo_5x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x2(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 27 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_5x2_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), DX - MOVQ out_base+48(FP), R9 - MOVQ (R9), R10 - MOVQ 24(R9), R9 - MOVQ start+72(FP), R11 - - // Add start offset to output - ADDQ R11, R10 - ADDQ R11, R9 - - // Add start offset to input - ADDQ R11, BX - ADDQ R11, SI - ADDQ R11, DI - ADDQ R11, R8 - ADDQ R11, DX - MOVQ $0x0000000f, R11 - MOVQ R11, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_5x2_loop: - // Load and process 32 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y5 - ADDQ $0x20, BX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y0 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y1 - - // Load and process 32 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y5 - ADDQ $0x20, SI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y5 - ADDQ $0x20, DI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y5 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 384(CX), Y3 - VMOVDQU 416(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 448(CX), Y3 - VMOVDQU 480(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 4 to 2 outputs - VMOVDQU (DX), Y5 - ADDQ $0x20, DX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 512(CX), Y3 - VMOVDQU 544(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 576(CX), Y3 - VMOVDQU 608(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Store 2 outputs - VMOVDQU Y0, (R10) - ADDQ $0x20, R10 - VMOVDQU Y1, (R9) - ADDQ $0x20, R9 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_5x2_loop - VZEROUPPER - -mulAvxTwo_5x2_end: - RET - -// func mulAvxTwo_5x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x2_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 49 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_5x2_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), DX - MOVQ out_base+48(FP), R9 - MOVQ out_base+48(FP), R9 - MOVQ (R9), R10 - MOVQ 24(R9), R9 - MOVQ start+72(FP), R11 - - // Add start offset to output - ADDQ R11, R10 - ADDQ R11, R9 - - // Add start offset to input - ADDQ R11, BX - ADDQ R11, SI - ADDQ R11, DI - ADDQ R11, R8 - ADDQ R11, DX - MOVQ $0x0000000f, R11 - MOVQ R11, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_5x2_64_loop: - // Load and process 64 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y9 - VMOVDQU 32(BX), Y11 - ADDQ $0x40, BX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y0 - VPXOR Y7, Y8, Y1 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y2 - VPXOR Y7, Y8, Y3 - - // Load and process 64 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y9 - VMOVDQU 32(SI), Y11 - ADDQ $0x40, SI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y9 - VMOVDQU 32(DI), Y11 - ADDQ $0x40, DI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y9 - VMOVDQU 32(R8), Y11 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 4 to 2 outputs - VMOVDQU (DX), Y9 - VMOVDQU 32(DX), Y11 - ADDQ $0x40, DX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Store 2 outputs - VMOVDQU Y0, (R10) - VMOVDQU Y1, 32(R10) - ADDQ $0x40, R10 - VMOVDQU Y2, (R9) - VMOVDQU Y3, 32(R9) - ADDQ $0x40, R9 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_5x2_64_loop - VZEROUPPER - -mulAvxTwo_5x2_64_end: - RET - -// func mulAvxTwo_5x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x2Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 27 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_5x2Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), DX - MOVQ out_base+48(FP), R9 - MOVQ (R9), R10 - MOVQ 24(R9), R9 - MOVQ start+72(FP), R11 - - // Add start offset to output - ADDQ R11, R10 - ADDQ R11, R9 - - // Add start offset to input - ADDQ R11, BX - ADDQ R11, SI - ADDQ R11, DI - ADDQ R11, R8 - ADDQ R11, DX - MOVQ $0x0000000f, R11 - MOVQ R11, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_5x2Xor_loop: - // Load and process 32 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y5 - ADDQ $0x20, BX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU (R10), Y0 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU (R9), Y1 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y5 - ADDQ $0x20, SI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y5 - ADDQ $0x20, DI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y5 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 384(CX), Y3 - VMOVDQU 416(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 448(CX), Y3 - VMOVDQU 480(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 4 to 2 outputs - VMOVDQU (DX), Y5 - ADDQ $0x20, DX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 512(CX), Y3 - VMOVDQU 544(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 576(CX), Y3 - VMOVDQU 608(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Store 2 outputs - VMOVDQU Y0, (R10) - ADDQ $0x20, R10 - VMOVDQU Y1, (R9) - ADDQ $0x20, R9 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_5x2Xor_loop - VZEROUPPER - -mulAvxTwo_5x2Xor_end: - RET - -// func mulAvxTwo_5x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x2_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 49 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_5x2_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), DX - MOVQ out_base+48(FP), R9 - MOVQ out_base+48(FP), R9 - MOVQ (R9), R10 - MOVQ 24(R9), R9 - MOVQ start+72(FP), R11 - - // Add start offset to output - ADDQ R11, R10 - ADDQ R11, R9 - - // Add start offset to input - ADDQ R11, BX - ADDQ R11, SI - ADDQ R11, DI - ADDQ R11, R8 - ADDQ R11, DX - MOVQ $0x0000000f, R11 - MOVQ R11, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_5x2_64Xor_loop: - // Load 2 outputs - VMOVDQU (R10), Y0 - VMOVDQU 32(R10), Y1 - VMOVDQU (R9), Y2 - VMOVDQU 32(R9), Y3 - - // Load and process 64 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y9 - VMOVDQU 32(BX), Y11 - ADDQ $0x40, BX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y9 - VMOVDQU 32(SI), Y11 - ADDQ $0x40, SI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y9 - VMOVDQU 32(DI), Y11 - ADDQ $0x40, DI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y9 - VMOVDQU 32(R8), Y11 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 4 to 2 outputs - VMOVDQU (DX), Y9 - VMOVDQU 32(DX), Y11 - ADDQ $0x40, DX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Store 2 outputs - VMOVDQU Y0, (R10) - VMOVDQU Y1, 32(R10) - ADDQ $0x40, R10 - VMOVDQU Y2, (R9) - VMOVDQU Y3, 32(R9) - ADDQ $0x40, R9 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_5x2_64Xor_loop - VZEROUPPER - -mulAvxTwo_5x2_64Xor_end: - RET - -// func mulAvxTwo_5x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x3(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 38 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_5x3_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), DX - MOVQ out_base+48(FP), R9 - MOVQ (R9), R10 - MOVQ 24(R9), R11 - MOVQ 48(R9), R9 - MOVQ start+72(FP), R12 - - // Add start offset to output - ADDQ R12, R10 - ADDQ R12, R11 - ADDQ R12, R9 - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X3 - VPBROADCASTB X3, Y3 - -mulAvxTwo_5x3_loop: - // Load and process 32 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y6 - ADDQ $0x20, BX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU (CX), Y4 - VMOVDQU 32(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y0 - VMOVDQU 64(CX), Y4 - VMOVDQU 96(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y1 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y2 - - // Load and process 32 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y6 - ADDQ $0x20, SI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 192(CX), Y4 - VMOVDQU 224(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 256(CX), Y4 - VMOVDQU 288(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 320(CX), Y4 - VMOVDQU 352(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y6 - ADDQ $0x20, DI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 384(CX), Y4 - VMOVDQU 416(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 448(CX), Y4 - VMOVDQU 480(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 512(CX), Y4 - VMOVDQU 544(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 3 to 3 outputs - VMOVDQU (R8), Y6 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 576(CX), Y4 - VMOVDQU 608(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 640(CX), Y4 - VMOVDQU 672(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 704(CX), Y4 - VMOVDQU 736(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 4 to 3 outputs - VMOVDQU (DX), Y6 - ADDQ $0x20, DX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 768(CX), Y4 - VMOVDQU 800(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 832(CX), Y4 - VMOVDQU 864(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 896(CX), Y4 - VMOVDQU 928(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Store 3 outputs - VMOVDQU Y0, (R10) - ADDQ $0x20, R10 - VMOVDQU Y1, (R11) - ADDQ $0x20, R11 - VMOVDQU Y2, (R9) - ADDQ $0x20, R9 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_5x3_loop - VZEROUPPER - -mulAvxTwo_5x3_end: - RET - -// func mulAvxTwo_5x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x3_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 70 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_5x3_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), DX - MOVQ out_base+48(FP), R9 - MOVQ out_base+48(FP), R9 - MOVQ (R9), R10 - MOVQ 24(R9), R11 - MOVQ 48(R9), R9 - MOVQ start+72(FP), R12 - - // Add start offset to output - ADDQ R12, R10 - ADDQ R12, R11 - ADDQ R12, R9 - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_5x3_64_loop: - // Load and process 64 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y11 - VMOVDQU 32(BX), Y13 - ADDQ $0x40, BX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y0 - VPXOR Y9, Y10, Y1 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y2 - VPXOR Y9, Y10, Y3 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y4 - VPXOR Y9, Y10, Y5 - - // Load and process 64 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y11 - VMOVDQU 32(SI), Y13 - ADDQ $0x40, SI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y11 - VMOVDQU 32(DI), Y13 - ADDQ $0x40, DI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 3 to 3 outputs - VMOVDQU (R8), Y11 - VMOVDQU 32(R8), Y13 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 4 to 3 outputs - VMOVDQU (DX), Y11 - VMOVDQU 32(DX), Y13 - ADDQ $0x40, DX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Store 3 outputs - VMOVDQU Y0, (R10) - VMOVDQU Y1, 32(R10) - ADDQ $0x40, R10 - VMOVDQU Y2, (R11) - VMOVDQU Y3, 32(R11) - ADDQ $0x40, R11 - VMOVDQU Y4, (R9) - VMOVDQU Y5, 32(R9) - ADDQ $0x40, R9 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_5x3_64_loop - VZEROUPPER - -mulAvxTwo_5x3_64_end: - RET - -// func mulAvxTwo_5x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x3Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 38 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_5x3Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), DX - MOVQ out_base+48(FP), R9 - MOVQ (R9), R10 - MOVQ 24(R9), R11 - MOVQ 48(R9), R9 - MOVQ start+72(FP), R12 - - // Add start offset to output - ADDQ R12, R10 - ADDQ R12, R11 - ADDQ R12, R9 - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X3 - VPBROADCASTB X3, Y3 - -mulAvxTwo_5x3Xor_loop: - // Load and process 32 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y6 - ADDQ $0x20, BX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU (R10), Y0 - VMOVDQU (CX), Y4 - VMOVDQU 32(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU (R11), Y1 - VMOVDQU 64(CX), Y4 - VMOVDQU 96(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU (R9), Y2 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y6 - ADDQ $0x20, SI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 192(CX), Y4 - VMOVDQU 224(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 256(CX), Y4 - VMOVDQU 288(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 320(CX), Y4 - VMOVDQU 352(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y6 - ADDQ $0x20, DI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 384(CX), Y4 - VMOVDQU 416(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 448(CX), Y4 - VMOVDQU 480(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 512(CX), Y4 - VMOVDQU 544(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 3 to 3 outputs - VMOVDQU (R8), Y6 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 576(CX), Y4 - VMOVDQU 608(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 640(CX), Y4 - VMOVDQU 672(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 704(CX), Y4 - VMOVDQU 736(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 4 to 3 outputs - VMOVDQU (DX), Y6 - ADDQ $0x20, DX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 768(CX), Y4 - VMOVDQU 800(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 832(CX), Y4 - VMOVDQU 864(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 896(CX), Y4 - VMOVDQU 928(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Store 3 outputs - VMOVDQU Y0, (R10) - ADDQ $0x20, R10 - VMOVDQU Y1, (R11) - ADDQ $0x20, R11 - VMOVDQU Y2, (R9) - ADDQ $0x20, R9 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_5x3Xor_loop - VZEROUPPER - -mulAvxTwo_5x3Xor_end: - RET - -// func mulAvxTwo_5x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x3_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 70 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_5x3_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), DX - MOVQ out_base+48(FP), R9 - MOVQ out_base+48(FP), R9 - MOVQ (R9), R10 - MOVQ 24(R9), R11 - MOVQ 48(R9), R9 - MOVQ start+72(FP), R12 - - // Add start offset to output - ADDQ R12, R10 - ADDQ R12, R11 - ADDQ R12, R9 - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_5x3_64Xor_loop: - // Load 3 outputs - VMOVDQU (R10), Y0 - VMOVDQU 32(R10), Y1 - VMOVDQU (R11), Y2 - VMOVDQU 32(R11), Y3 - VMOVDQU (R9), Y4 - VMOVDQU 32(R9), Y5 - - // Load and process 64 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y11 - VMOVDQU 32(BX), Y13 - ADDQ $0x40, BX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y11 - VMOVDQU 32(SI), Y13 - ADDQ $0x40, SI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y11 - VMOVDQU 32(DI), Y13 - ADDQ $0x40, DI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 3 to 3 outputs - VMOVDQU (R8), Y11 - VMOVDQU 32(R8), Y13 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 4 to 3 outputs - VMOVDQU (DX), Y11 - VMOVDQU 32(DX), Y13 - ADDQ $0x40, DX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Store 3 outputs - VMOVDQU Y0, (R10) - VMOVDQU Y1, 32(R10) - ADDQ $0x40, R10 - VMOVDQU Y2, (R11) - VMOVDQU Y3, 32(R11) - ADDQ $0x40, R11 - VMOVDQU Y4, (R9) - VMOVDQU Y5, 32(R9) - ADDQ $0x40, R9 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_5x3_64Xor_loop - VZEROUPPER - -mulAvxTwo_5x3_64Xor_end: - RET - -// func mulAvxTwo_5x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x4(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 49 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_5x4_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), DX - MOVQ out_base+48(FP), R9 - MOVQ (R9), R10 - MOVQ 24(R9), R11 - MOVQ 48(R9), R12 - MOVQ 72(R9), R9 - MOVQ start+72(FP), R13 - - // Add start offset to output - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, R12 - ADDQ R13, R9 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_5x4_loop: - // Load and process 32 bytes from input 0 to 4 outputs - VMOVDQU (BX), Y7 - ADDQ $0x20, BX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y0 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y1 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y2 - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y3 - - // Load and process 32 bytes from input 1 to 4 outputs - VMOVDQU (SI), Y7 - ADDQ $0x20, SI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 2 to 4 outputs - VMOVDQU (DI), Y7 - ADDQ $0x20, DI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 3 to 4 outputs - VMOVDQU (R8), Y7 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 768(CX), Y5 - VMOVDQU 800(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 832(CX), Y5 - VMOVDQU 864(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 896(CX), Y5 - VMOVDQU 928(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 960(CX), Y5 - VMOVDQU 992(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 4 to 4 outputs - VMOVDQU (DX), Y7 - ADDQ $0x20, DX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1024(CX), Y5 - VMOVDQU 1056(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1088(CX), Y5 - VMOVDQU 1120(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1152(CX), Y5 - VMOVDQU 1184(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1216(CX), Y5 - VMOVDQU 1248(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Store 4 outputs - VMOVDQU Y0, (R10) - ADDQ $0x20, R10 - VMOVDQU Y1, (R11) - ADDQ $0x20, R11 - VMOVDQU Y2, (R12) - ADDQ $0x20, R12 - VMOVDQU Y3, (R9) - ADDQ $0x20, R9 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_5x4_loop - VZEROUPPER - -mulAvxTwo_5x4_end: - RET - -// func mulAvxTwo_5x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x4Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 49 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_5x4Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), DX - MOVQ out_base+48(FP), R9 - MOVQ (R9), R10 - MOVQ 24(R9), R11 - MOVQ 48(R9), R12 - MOVQ 72(R9), R9 - MOVQ start+72(FP), R13 - - // Add start offset to output - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, R12 - ADDQ R13, R9 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_5x4Xor_loop: - // Load and process 32 bytes from input 0 to 4 outputs - VMOVDQU (BX), Y7 - ADDQ $0x20, BX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU (R10), Y0 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU (R11), Y1 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU (R12), Y2 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU (R9), Y3 - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 1 to 4 outputs - VMOVDQU (SI), Y7 - ADDQ $0x20, SI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 2 to 4 outputs - VMOVDQU (DI), Y7 - ADDQ $0x20, DI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 3 to 4 outputs - VMOVDQU (R8), Y7 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 768(CX), Y5 - VMOVDQU 800(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 832(CX), Y5 - VMOVDQU 864(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 896(CX), Y5 - VMOVDQU 928(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 960(CX), Y5 - VMOVDQU 992(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 4 to 4 outputs - VMOVDQU (DX), Y7 - ADDQ $0x20, DX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1024(CX), Y5 - VMOVDQU 1056(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1088(CX), Y5 - VMOVDQU 1120(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1152(CX), Y5 - VMOVDQU 1184(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1216(CX), Y5 - VMOVDQU 1248(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Store 4 outputs - VMOVDQU Y0, (R10) - ADDQ $0x20, R10 - VMOVDQU Y1, (R11) - ADDQ $0x20, R11 - VMOVDQU Y2, (R12) - ADDQ $0x20, R12 - VMOVDQU Y3, (R9) - ADDQ $0x20, R9 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_5x4Xor_loop - VZEROUPPER - -mulAvxTwo_5x4Xor_end: - RET - -// func mulAvxTwo_5x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x5(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 60 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_5x5_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), DX - MOVQ out_base+48(FP), R9 - MOVQ (R9), R10 - MOVQ 24(R9), R11 - MOVQ 48(R9), R12 - MOVQ 72(R9), R13 - MOVQ 96(R9), R9 - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, R13 - ADDQ R14, R9 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X5 - VPBROADCASTB X5, Y5 - -mulAvxTwo_5x5_loop: - // Load and process 32 bytes from input 0 to 5 outputs - VMOVDQU (BX), Y8 - ADDQ $0x20, BX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU (CX), Y6 - VMOVDQU 32(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y0 - VMOVDQU 64(CX), Y6 - VMOVDQU 96(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y1 - VMOVDQU 128(CX), Y6 - VMOVDQU 160(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y2 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y3 - VMOVDQU 256(CX), Y6 - VMOVDQU 288(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y4 - - // Load and process 32 bytes from input 1 to 5 outputs - VMOVDQU (SI), Y8 - ADDQ $0x20, SI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 320(CX), Y6 - VMOVDQU 352(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 384(CX), Y6 - VMOVDQU 416(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 448(CX), Y6 - VMOVDQU 480(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 512(CX), Y6 - VMOVDQU 544(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 576(CX), Y6 - VMOVDQU 608(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 2 to 5 outputs - VMOVDQU (DI), Y8 - ADDQ $0x20, DI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 640(CX), Y6 - VMOVDQU 672(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 704(CX), Y6 - VMOVDQU 736(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 768(CX), Y6 - VMOVDQU 800(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 832(CX), Y6 - VMOVDQU 864(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 896(CX), Y6 - VMOVDQU 928(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 3 to 5 outputs - VMOVDQU (R8), Y8 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 960(CX), Y6 - VMOVDQU 992(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1024(CX), Y6 - VMOVDQU 1056(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1088(CX), Y6 - VMOVDQU 1120(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1152(CX), Y6 - VMOVDQU 1184(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1216(CX), Y6 - VMOVDQU 1248(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 4 to 5 outputs - VMOVDQU (DX), Y8 - ADDQ $0x20, DX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1280(CX), Y6 - VMOVDQU 1312(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1344(CX), Y6 - VMOVDQU 1376(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1408(CX), Y6 - VMOVDQU 1440(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1472(CX), Y6 - VMOVDQU 1504(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1536(CX), Y6 - VMOVDQU 1568(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Store 5 outputs - VMOVDQU Y0, (R10) - ADDQ $0x20, R10 - VMOVDQU Y1, (R11) - ADDQ $0x20, R11 - VMOVDQU Y2, (R12) - ADDQ $0x20, R12 - VMOVDQU Y3, (R13) - ADDQ $0x20, R13 - VMOVDQU Y4, (R9) - ADDQ $0x20, R9 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_5x5_loop - VZEROUPPER - -mulAvxTwo_5x5_end: - RET - -// func mulAvxTwo_5x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x5Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 60 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_5x5Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), DX - MOVQ out_base+48(FP), R9 - MOVQ (R9), R10 - MOVQ 24(R9), R11 - MOVQ 48(R9), R12 - MOVQ 72(R9), R13 - MOVQ 96(R9), R9 - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, R13 - ADDQ R14, R9 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X5 - VPBROADCASTB X5, Y5 - -mulAvxTwo_5x5Xor_loop: - // Load and process 32 bytes from input 0 to 5 outputs - VMOVDQU (BX), Y8 - ADDQ $0x20, BX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU (R10), Y0 - VMOVDQU (CX), Y6 - VMOVDQU 32(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU (R11), Y1 - VMOVDQU 64(CX), Y6 - VMOVDQU 96(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU (R12), Y2 - VMOVDQU 128(CX), Y6 - VMOVDQU 160(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU (R13), Y3 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU (R9), Y4 - VMOVDQU 256(CX), Y6 - VMOVDQU 288(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 1 to 5 outputs - VMOVDQU (SI), Y8 - ADDQ $0x20, SI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 320(CX), Y6 - VMOVDQU 352(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 384(CX), Y6 - VMOVDQU 416(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 448(CX), Y6 - VMOVDQU 480(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 512(CX), Y6 - VMOVDQU 544(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 576(CX), Y6 - VMOVDQU 608(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 2 to 5 outputs - VMOVDQU (DI), Y8 - ADDQ $0x20, DI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 640(CX), Y6 - VMOVDQU 672(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 704(CX), Y6 - VMOVDQU 736(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 768(CX), Y6 - VMOVDQU 800(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 832(CX), Y6 - VMOVDQU 864(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 896(CX), Y6 - VMOVDQU 928(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 3 to 5 outputs - VMOVDQU (R8), Y8 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 960(CX), Y6 - VMOVDQU 992(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1024(CX), Y6 - VMOVDQU 1056(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1088(CX), Y6 - VMOVDQU 1120(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1152(CX), Y6 - VMOVDQU 1184(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1216(CX), Y6 - VMOVDQU 1248(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 4 to 5 outputs - VMOVDQU (DX), Y8 - ADDQ $0x20, DX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1280(CX), Y6 - VMOVDQU 1312(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1344(CX), Y6 - VMOVDQU 1376(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1408(CX), Y6 - VMOVDQU 1440(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1472(CX), Y6 - VMOVDQU 1504(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1536(CX), Y6 - VMOVDQU 1568(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Store 5 outputs - VMOVDQU Y0, (R10) - ADDQ $0x20, R10 - VMOVDQU Y1, (R11) - ADDQ $0x20, R11 - VMOVDQU Y2, (R12) - ADDQ $0x20, R12 - VMOVDQU Y3, (R13) - ADDQ $0x20, R13 - VMOVDQU Y4, (R9) - ADDQ $0x20, R9 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_5x5Xor_loop - VZEROUPPER - -mulAvxTwo_5x5Xor_end: - RET - -// func mulAvxTwo_5x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x6(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 71 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_5x6_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), DX - MOVQ out_base+48(FP), R9 - MOVQ (R9), R10 - MOVQ 24(R9), R11 - MOVQ 48(R9), R12 - MOVQ 72(R9), R13 - MOVQ 96(R9), R14 - MOVQ 120(R9), R9 - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, R14 - ADDQ R15, R9 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_5x6_loop: - // Load and process 32 bytes from input 0 to 6 outputs - VMOVDQU (BX), Y9 - ADDQ $0x20, BX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y0 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y1 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y2 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y3 - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y4 - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y5 - - // Load and process 32 bytes from input 1 to 6 outputs - VMOVDQU (SI), Y9 - ADDQ $0x20, SI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 2 to 6 outputs - VMOVDQU (DI), Y9 - ADDQ $0x20, DI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 3 to 6 outputs - VMOVDQU (R8), Y9 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1152(CX), Y7 - VMOVDQU 1184(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1216(CX), Y7 - VMOVDQU 1248(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1280(CX), Y7 - VMOVDQU 1312(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1344(CX), Y7 - VMOVDQU 1376(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1408(CX), Y7 - VMOVDQU 1440(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1472(CX), Y7 - VMOVDQU 1504(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 4 to 6 outputs - VMOVDQU (DX), Y9 - ADDQ $0x20, DX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1536(CX), Y7 - VMOVDQU 1568(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1600(CX), Y7 - VMOVDQU 1632(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1664(CX), Y7 - VMOVDQU 1696(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1728(CX), Y7 - VMOVDQU 1760(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1792(CX), Y7 - VMOVDQU 1824(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1856(CX), Y7 - VMOVDQU 1888(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Store 6 outputs - VMOVDQU Y0, (R10) - ADDQ $0x20, R10 - VMOVDQU Y1, (R11) - ADDQ $0x20, R11 - VMOVDQU Y2, (R12) - ADDQ $0x20, R12 - VMOVDQU Y3, (R13) - ADDQ $0x20, R13 - VMOVDQU Y4, (R14) - ADDQ $0x20, R14 - VMOVDQU Y5, (R9) - ADDQ $0x20, R9 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_5x6_loop - VZEROUPPER - -mulAvxTwo_5x6_end: - RET - -// func mulAvxTwo_5x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x6Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 71 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_5x6Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), DX - MOVQ out_base+48(FP), R9 - MOVQ (R9), R10 - MOVQ 24(R9), R11 - MOVQ 48(R9), R12 - MOVQ 72(R9), R13 - MOVQ 96(R9), R14 - MOVQ 120(R9), R9 - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, R14 - ADDQ R15, R9 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_5x6Xor_loop: - // Load and process 32 bytes from input 0 to 6 outputs - VMOVDQU (BX), Y9 - ADDQ $0x20, BX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU (R10), Y0 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU (R11), Y1 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU (R12), Y2 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU (R13), Y3 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU (R14), Y4 - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU (R9), Y5 - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 1 to 6 outputs - VMOVDQU (SI), Y9 - ADDQ $0x20, SI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 2 to 6 outputs - VMOVDQU (DI), Y9 - ADDQ $0x20, DI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 3 to 6 outputs - VMOVDQU (R8), Y9 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1152(CX), Y7 - VMOVDQU 1184(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1216(CX), Y7 - VMOVDQU 1248(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1280(CX), Y7 - VMOVDQU 1312(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1344(CX), Y7 - VMOVDQU 1376(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1408(CX), Y7 - VMOVDQU 1440(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1472(CX), Y7 - VMOVDQU 1504(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 4 to 6 outputs - VMOVDQU (DX), Y9 - ADDQ $0x20, DX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1536(CX), Y7 - VMOVDQU 1568(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1600(CX), Y7 - VMOVDQU 1632(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1664(CX), Y7 - VMOVDQU 1696(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1728(CX), Y7 - VMOVDQU 1760(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1792(CX), Y7 - VMOVDQU 1824(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1856(CX), Y7 - VMOVDQU 1888(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Store 6 outputs - VMOVDQU Y0, (R10) - ADDQ $0x20, R10 - VMOVDQU Y1, (R11) - ADDQ $0x20, R11 - VMOVDQU Y2, (R12) - ADDQ $0x20, R12 - VMOVDQU Y3, (R13) - ADDQ $0x20, R13 - VMOVDQU Y4, (R14) - ADDQ $0x20, R14 - VMOVDQU Y5, (R9) - ADDQ $0x20, R9 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_5x6Xor_loop - VZEROUPPER - -mulAvxTwo_5x6Xor_end: - RET - -// func mulAvxTwo_5x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x7(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 82 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_5x7_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), DX - MOVQ out_base+48(FP), R9 - MOVQ (R9), R10 - MOVQ 24(R9), R11 - MOVQ 48(R9), R12 - MOVQ 72(R9), R13 - MOVQ 96(R9), R14 - MOVQ 120(R9), R15 - MOVQ 144(R9), R9 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R9 - - // Add start offset to input - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, DX - MOVQ $0x0000000f, BP - MOVQ BP, X7 - VPBROADCASTB X7, Y7 - -mulAvxTwo_5x7_loop: - // Load and process 32 bytes from input 0 to 7 outputs - VMOVDQU (BX), Y10 - ADDQ $0x20, BX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU (CX), Y8 - VMOVDQU 32(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y0 - VMOVDQU 64(CX), Y8 - VMOVDQU 96(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y1 - VMOVDQU 128(CX), Y8 - VMOVDQU 160(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y2 - VMOVDQU 192(CX), Y8 - VMOVDQU 224(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y3 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y4 - VMOVDQU 320(CX), Y8 - VMOVDQU 352(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y5 - VMOVDQU 384(CX), Y8 - VMOVDQU 416(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y6 - - // Load and process 32 bytes from input 1 to 7 outputs - VMOVDQU (SI), Y10 - ADDQ $0x20, SI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 448(CX), Y8 - VMOVDQU 480(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 512(CX), Y8 - VMOVDQU 544(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 576(CX), Y8 - VMOVDQU 608(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 640(CX), Y8 - VMOVDQU 672(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 704(CX), Y8 - VMOVDQU 736(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 768(CX), Y8 - VMOVDQU 800(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 832(CX), Y8 - VMOVDQU 864(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 2 to 7 outputs - VMOVDQU (DI), Y10 - ADDQ $0x20, DI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 896(CX), Y8 - VMOVDQU 928(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 960(CX), Y8 - VMOVDQU 992(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1024(CX), Y8 - VMOVDQU 1056(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1088(CX), Y8 - VMOVDQU 1120(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1152(CX), Y8 - VMOVDQU 1184(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1216(CX), Y8 - VMOVDQU 1248(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1280(CX), Y8 - VMOVDQU 1312(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 3 to 7 outputs - VMOVDQU (R8), Y10 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1344(CX), Y8 - VMOVDQU 1376(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1408(CX), Y8 - VMOVDQU 1440(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1472(CX), Y8 - VMOVDQU 1504(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1536(CX), Y8 - VMOVDQU 1568(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1600(CX), Y8 - VMOVDQU 1632(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1664(CX), Y8 - VMOVDQU 1696(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1728(CX), Y8 - VMOVDQU 1760(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 4 to 7 outputs - VMOVDQU (DX), Y10 - ADDQ $0x20, DX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1792(CX), Y8 - VMOVDQU 1824(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1856(CX), Y8 - VMOVDQU 1888(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1920(CX), Y8 - VMOVDQU 1952(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1984(CX), Y8 - VMOVDQU 2016(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2048(CX), Y8 - VMOVDQU 2080(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 2112(CX), Y8 - VMOVDQU 2144(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 2176(CX), Y8 - VMOVDQU 2208(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Store 7 outputs - VMOVDQU Y0, (R10) - ADDQ $0x20, R10 - VMOVDQU Y1, (R11) - ADDQ $0x20, R11 - VMOVDQU Y2, (R12) - ADDQ $0x20, R12 - VMOVDQU Y3, (R13) - ADDQ $0x20, R13 - VMOVDQU Y4, (R14) - ADDQ $0x20, R14 - VMOVDQU Y5, (R15) - ADDQ $0x20, R15 - VMOVDQU Y6, (R9) - ADDQ $0x20, R9 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_5x7_loop - VZEROUPPER - -mulAvxTwo_5x7_end: - RET - -// func mulAvxTwo_5x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x7Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 82 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_5x7Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), DX - MOVQ out_base+48(FP), R9 - MOVQ (R9), R10 - MOVQ 24(R9), R11 - MOVQ 48(R9), R12 - MOVQ 72(R9), R13 - MOVQ 96(R9), R14 - MOVQ 120(R9), R15 - MOVQ 144(R9), R9 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R9 - - // Add start offset to input - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, DX - MOVQ $0x0000000f, BP - MOVQ BP, X7 - VPBROADCASTB X7, Y7 - -mulAvxTwo_5x7Xor_loop: - // Load and process 32 bytes from input 0 to 7 outputs - VMOVDQU (BX), Y10 - ADDQ $0x20, BX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU (R10), Y0 - VMOVDQU (CX), Y8 - VMOVDQU 32(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU (R11), Y1 - VMOVDQU 64(CX), Y8 - VMOVDQU 96(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU (R12), Y2 - VMOVDQU 128(CX), Y8 - VMOVDQU 160(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU (R13), Y3 - VMOVDQU 192(CX), Y8 - VMOVDQU 224(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU (R14), Y4 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU (R15), Y5 - VMOVDQU 320(CX), Y8 - VMOVDQU 352(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU (R9), Y6 - VMOVDQU 384(CX), Y8 - VMOVDQU 416(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 1 to 7 outputs - VMOVDQU (SI), Y10 - ADDQ $0x20, SI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 448(CX), Y8 - VMOVDQU 480(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 512(CX), Y8 - VMOVDQU 544(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 576(CX), Y8 - VMOVDQU 608(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 640(CX), Y8 - VMOVDQU 672(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 704(CX), Y8 - VMOVDQU 736(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 768(CX), Y8 - VMOVDQU 800(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 832(CX), Y8 - VMOVDQU 864(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 2 to 7 outputs - VMOVDQU (DI), Y10 - ADDQ $0x20, DI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 896(CX), Y8 - VMOVDQU 928(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 960(CX), Y8 - VMOVDQU 992(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1024(CX), Y8 - VMOVDQU 1056(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1088(CX), Y8 - VMOVDQU 1120(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1152(CX), Y8 - VMOVDQU 1184(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1216(CX), Y8 - VMOVDQU 1248(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1280(CX), Y8 - VMOVDQU 1312(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 3 to 7 outputs - VMOVDQU (R8), Y10 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1344(CX), Y8 - VMOVDQU 1376(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1408(CX), Y8 - VMOVDQU 1440(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1472(CX), Y8 - VMOVDQU 1504(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1536(CX), Y8 - VMOVDQU 1568(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1600(CX), Y8 - VMOVDQU 1632(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1664(CX), Y8 - VMOVDQU 1696(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1728(CX), Y8 - VMOVDQU 1760(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 4 to 7 outputs - VMOVDQU (DX), Y10 - ADDQ $0x20, DX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1792(CX), Y8 - VMOVDQU 1824(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1856(CX), Y8 - VMOVDQU 1888(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1920(CX), Y8 - VMOVDQU 1952(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1984(CX), Y8 - VMOVDQU 2016(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2048(CX), Y8 - VMOVDQU 2080(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 2112(CX), Y8 - VMOVDQU 2144(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 2176(CX), Y8 - VMOVDQU 2208(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Store 7 outputs - VMOVDQU Y0, (R10) - ADDQ $0x20, R10 - VMOVDQU Y1, (R11) - ADDQ $0x20, R11 - VMOVDQU Y2, (R12) - ADDQ $0x20, R12 - VMOVDQU Y3, (R13) - ADDQ $0x20, R13 - VMOVDQU Y4, (R14) - ADDQ $0x20, R14 - VMOVDQU Y5, (R15) - ADDQ $0x20, R15 - VMOVDQU Y6, (R9) - ADDQ $0x20, R9 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_5x7Xor_loop - VZEROUPPER - -mulAvxTwo_5x7Xor_end: - RET - -// func mulAvxTwo_5x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x8(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 93 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_5x8_end - MOVQ in_base+24(FP), AX - MOVQ (AX), DX - MOVQ 24(AX), BX - MOVQ 48(AX), SI - MOVQ 72(AX), DI - MOVQ 96(AX), AX - MOVQ out_base+48(FP), R8 - MOVQ (R8), R9 - MOVQ 24(R8), R10 - MOVQ 48(R8), R11 - MOVQ 72(R8), R12 - MOVQ 96(R8), R13 - MOVQ 120(R8), R14 - MOVQ 144(R8), R15 - MOVQ 168(R8), R8 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R8 - - // Add start offset to input - ADDQ BP, DX - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, AX - MOVQ $0x0000000f, BP - MOVQ BP, X8 - VPBROADCASTB X8, Y8 - MOVQ n+80(FP), BP - SHRQ $0x05, BP - -mulAvxTwo_5x8_loop: - // Load and process 32 bytes from input 0 to 8 outputs - VMOVDQU (DX), Y11 - ADDQ $0x20, DX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU (CX), Y9 - VMOVDQU 32(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y0 - VMOVDQU 64(CX), Y9 - VMOVDQU 96(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y1 - VMOVDQU 128(CX), Y9 - VMOVDQU 160(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y2 - VMOVDQU 192(CX), Y9 - VMOVDQU 224(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y3 - VMOVDQU 256(CX), Y9 - VMOVDQU 288(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y4 - VMOVDQU 320(CX), Y9 - VMOVDQU 352(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y5 - VMOVDQU 384(CX), Y9 - VMOVDQU 416(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y6 - VMOVDQU 448(CX), Y9 - VMOVDQU 480(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y7 - - // Load and process 32 bytes from input 1 to 8 outputs - VMOVDQU (BX), Y11 - ADDQ $0x20, BX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 512(CX), Y9 - VMOVDQU 544(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 576(CX), Y9 - VMOVDQU 608(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y9 - VMOVDQU 672(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 704(CX), Y9 - VMOVDQU 736(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 768(CX), Y9 - VMOVDQU 800(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 832(CX), Y9 - VMOVDQU 864(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 896(CX), Y9 - VMOVDQU 928(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 960(CX), Y9 - VMOVDQU 992(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 2 to 8 outputs - VMOVDQU (SI), Y11 - ADDQ $0x20, SI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1024(CX), Y9 - VMOVDQU 1056(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1088(CX), Y9 - VMOVDQU 1120(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1152(CX), Y9 - VMOVDQU 1184(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1216(CX), Y9 - VMOVDQU 1248(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y9 - VMOVDQU 1312(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1344(CX), Y9 - VMOVDQU 1376(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1408(CX), Y9 - VMOVDQU 1440(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1472(CX), Y9 - VMOVDQU 1504(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 3 to 8 outputs - VMOVDQU (DI), Y11 - ADDQ $0x20, DI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1536(CX), Y9 - VMOVDQU 1568(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1600(CX), Y9 - VMOVDQU 1632(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1664(CX), Y9 - VMOVDQU 1696(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1728(CX), Y9 - VMOVDQU 1760(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1792(CX), Y9 - VMOVDQU 1824(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1856(CX), Y9 - VMOVDQU 1888(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1920(CX), Y9 - VMOVDQU 1952(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1984(CX), Y9 - VMOVDQU 2016(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 4 to 8 outputs - VMOVDQU (AX), Y11 - ADDQ $0x20, AX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 2048(CX), Y9 - VMOVDQU 2080(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 2112(CX), Y9 - VMOVDQU 2144(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 2176(CX), Y9 - VMOVDQU 2208(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 2240(CX), Y9 - VMOVDQU 2272(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 2304(CX), Y9 - VMOVDQU 2336(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 2368(CX), Y9 - VMOVDQU 2400(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 2432(CX), Y9 - VMOVDQU 2464(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 2496(CX), Y9 - VMOVDQU 2528(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Store 8 outputs - VMOVDQU Y0, (R9) - ADDQ $0x20, R9 - VMOVDQU Y1, (R10) - ADDQ $0x20, R10 - VMOVDQU Y2, (R11) - ADDQ $0x20, R11 - VMOVDQU Y3, (R12) - ADDQ $0x20, R12 - VMOVDQU Y4, (R13) - ADDQ $0x20, R13 - VMOVDQU Y5, (R14) - ADDQ $0x20, R14 - VMOVDQU Y6, (R15) - ADDQ $0x20, R15 - VMOVDQU Y7, (R8) - ADDQ $0x20, R8 - - // Prepare for next loop - DECQ BP - JNZ mulAvxTwo_5x8_loop - VZEROUPPER - -mulAvxTwo_5x8_end: - RET - -// func mulAvxTwo_5x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x8Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 93 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_5x8Xor_end - MOVQ in_base+24(FP), AX - MOVQ (AX), DX - MOVQ 24(AX), BX - MOVQ 48(AX), SI - MOVQ 72(AX), DI - MOVQ 96(AX), AX - MOVQ out_base+48(FP), R8 - MOVQ (R8), R9 - MOVQ 24(R8), R10 - MOVQ 48(R8), R11 - MOVQ 72(R8), R12 - MOVQ 96(R8), R13 - MOVQ 120(R8), R14 - MOVQ 144(R8), R15 - MOVQ 168(R8), R8 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R8 - - // Add start offset to input - ADDQ BP, DX - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, AX - MOVQ $0x0000000f, BP - MOVQ BP, X8 - VPBROADCASTB X8, Y8 - MOVQ n+80(FP), BP - SHRQ $0x05, BP - -mulAvxTwo_5x8Xor_loop: - // Load and process 32 bytes from input 0 to 8 outputs - VMOVDQU (DX), Y11 - ADDQ $0x20, DX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU (R9), Y0 - VMOVDQU (CX), Y9 - VMOVDQU 32(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU (R10), Y1 - VMOVDQU 64(CX), Y9 - VMOVDQU 96(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU (R11), Y2 - VMOVDQU 128(CX), Y9 - VMOVDQU 160(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU (R12), Y3 - VMOVDQU 192(CX), Y9 - VMOVDQU 224(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU (R13), Y4 - VMOVDQU 256(CX), Y9 - VMOVDQU 288(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU (R14), Y5 - VMOVDQU 320(CX), Y9 - VMOVDQU 352(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU (R15), Y6 - VMOVDQU 384(CX), Y9 - VMOVDQU 416(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU (R8), Y7 - VMOVDQU 448(CX), Y9 - VMOVDQU 480(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 1 to 8 outputs - VMOVDQU (BX), Y11 - ADDQ $0x20, BX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 512(CX), Y9 - VMOVDQU 544(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 576(CX), Y9 - VMOVDQU 608(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y9 - VMOVDQU 672(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 704(CX), Y9 - VMOVDQU 736(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 768(CX), Y9 - VMOVDQU 800(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 832(CX), Y9 - VMOVDQU 864(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 896(CX), Y9 - VMOVDQU 928(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 960(CX), Y9 - VMOVDQU 992(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 2 to 8 outputs - VMOVDQU (SI), Y11 - ADDQ $0x20, SI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1024(CX), Y9 - VMOVDQU 1056(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1088(CX), Y9 - VMOVDQU 1120(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1152(CX), Y9 - VMOVDQU 1184(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1216(CX), Y9 - VMOVDQU 1248(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y9 - VMOVDQU 1312(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1344(CX), Y9 - VMOVDQU 1376(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1408(CX), Y9 - VMOVDQU 1440(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1472(CX), Y9 - VMOVDQU 1504(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 3 to 8 outputs - VMOVDQU (DI), Y11 - ADDQ $0x20, DI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1536(CX), Y9 - VMOVDQU 1568(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1600(CX), Y9 - VMOVDQU 1632(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1664(CX), Y9 - VMOVDQU 1696(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1728(CX), Y9 - VMOVDQU 1760(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1792(CX), Y9 - VMOVDQU 1824(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1856(CX), Y9 - VMOVDQU 1888(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1920(CX), Y9 - VMOVDQU 1952(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1984(CX), Y9 - VMOVDQU 2016(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 4 to 8 outputs - VMOVDQU (AX), Y11 - ADDQ $0x20, AX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 2048(CX), Y9 - VMOVDQU 2080(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 2112(CX), Y9 - VMOVDQU 2144(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 2176(CX), Y9 - VMOVDQU 2208(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 2240(CX), Y9 - VMOVDQU 2272(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 2304(CX), Y9 - VMOVDQU 2336(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 2368(CX), Y9 - VMOVDQU 2400(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 2432(CX), Y9 - VMOVDQU 2464(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 2496(CX), Y9 - VMOVDQU 2528(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Store 8 outputs - VMOVDQU Y0, (R9) - ADDQ $0x20, R9 - VMOVDQU Y1, (R10) - ADDQ $0x20, R10 - VMOVDQU Y2, (R11) - ADDQ $0x20, R11 - VMOVDQU Y3, (R12) - ADDQ $0x20, R12 - VMOVDQU Y4, (R13) - ADDQ $0x20, R13 - VMOVDQU Y5, (R14) - ADDQ $0x20, R14 - VMOVDQU Y6, (R15) - ADDQ $0x20, R15 - VMOVDQU Y7, (R8) - ADDQ $0x20, R8 - - // Prepare for next loop - DECQ BP - JNZ mulAvxTwo_5x8Xor_loop - VZEROUPPER - -mulAvxTwo_5x8Xor_end: - RET - -// func mulAvxTwo_5x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x9(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 104 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_5x9_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), DX - MOVQ out_base+48(FP), R9 - MOVQ start+72(FP), R10 - - // Add start offset to input - ADDQ R10, BX - ADDQ R10, SI - ADDQ R10, DI - ADDQ R10, R8 - ADDQ R10, DX - MOVQ $0x0000000f, R11 - MOVQ R11, X9 - VPBROADCASTB X9, Y9 - -mulAvxTwo_5x9_loop: - // Load and process 32 bytes from input 0 to 9 outputs - VMOVDQU (BX), Y12 - ADDQ $0x20, BX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU (CX), Y10 - VMOVDQU 32(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y0 - VMOVDQU 64(CX), Y10 - VMOVDQU 96(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y1 - VMOVDQU 128(CX), Y10 - VMOVDQU 160(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y2 - VMOVDQU 192(CX), Y10 - VMOVDQU 224(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y3 - VMOVDQU 256(CX), Y10 - VMOVDQU 288(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y4 - VMOVDQU 320(CX), Y10 - VMOVDQU 352(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y5 - VMOVDQU 384(CX), Y10 - VMOVDQU 416(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y6 - VMOVDQU 448(CX), Y10 - VMOVDQU 480(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y7 - VMOVDQU 512(CX), Y10 - VMOVDQU 544(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y8 - - // Load and process 32 bytes from input 1 to 9 outputs - VMOVDQU (SI), Y12 - ADDQ $0x20, SI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 576(CX), Y10 - VMOVDQU 608(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 640(CX), Y10 - VMOVDQU 672(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 704(CX), Y10 - VMOVDQU 736(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 768(CX), Y10 - VMOVDQU 800(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 832(CX), Y10 - VMOVDQU 864(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 896(CX), Y10 - VMOVDQU 928(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 960(CX), Y10 - VMOVDQU 992(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1024(CX), Y10 - VMOVDQU 1056(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1088(CX), Y10 - VMOVDQU 1120(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 2 to 9 outputs - VMOVDQU (DI), Y12 - ADDQ $0x20, DI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1152(CX), Y10 - VMOVDQU 1184(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1216(CX), Y10 - VMOVDQU 1248(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1280(CX), Y10 - VMOVDQU 1312(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1344(CX), Y10 - VMOVDQU 1376(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1408(CX), Y10 - VMOVDQU 1440(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 1472(CX), Y10 - VMOVDQU 1504(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 1536(CX), Y10 - VMOVDQU 1568(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1600(CX), Y10 - VMOVDQU 1632(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1664(CX), Y10 - VMOVDQU 1696(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 3 to 9 outputs - VMOVDQU (R8), Y12 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1728(CX), Y10 - VMOVDQU 1760(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1792(CX), Y10 - VMOVDQU 1824(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1856(CX), Y10 - VMOVDQU 1888(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1920(CX), Y10 - VMOVDQU 1952(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1984(CX), Y10 - VMOVDQU 2016(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2048(CX), Y10 - VMOVDQU 2080(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2112(CX), Y10 - VMOVDQU 2144(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2176(CX), Y10 - VMOVDQU 2208(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2240(CX), Y10 - VMOVDQU 2272(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 4 to 9 outputs - VMOVDQU (DX), Y12 - ADDQ $0x20, DX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 2304(CX), Y10 - VMOVDQU 2336(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 2368(CX), Y10 - VMOVDQU 2400(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 2432(CX), Y10 - VMOVDQU 2464(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 2496(CX), Y10 - VMOVDQU 2528(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 2560(CX), Y10 - VMOVDQU 2592(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2624(CX), Y10 - VMOVDQU 2656(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2688(CX), Y10 - VMOVDQU 2720(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2752(CX), Y10 - VMOVDQU 2784(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2816(CX), Y10 - VMOVDQU 2848(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Store 9 outputs - MOVQ (R9), R11 - VMOVDQU Y0, (R11)(R10*1) - MOVQ 24(R9), R11 - VMOVDQU Y1, (R11)(R10*1) - MOVQ 48(R9), R11 - VMOVDQU Y2, (R11)(R10*1) - MOVQ 72(R9), R11 - VMOVDQU Y3, (R11)(R10*1) - MOVQ 96(R9), R11 - VMOVDQU Y4, (R11)(R10*1) - MOVQ 120(R9), R11 - VMOVDQU Y5, (R11)(R10*1) - MOVQ 144(R9), R11 - VMOVDQU Y6, (R11)(R10*1) - MOVQ 168(R9), R11 - VMOVDQU Y7, (R11)(R10*1) - MOVQ 192(R9), R11 - VMOVDQU Y8, (R11)(R10*1) - - // Prepare for next loop - ADDQ $0x20, R10 - DECQ AX - JNZ mulAvxTwo_5x9_loop - VZEROUPPER - -mulAvxTwo_5x9_end: - RET - -// func mulAvxTwo_5x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x9Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 104 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_5x9Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), DX - MOVQ out_base+48(FP), R9 - MOVQ start+72(FP), R10 - - // Add start offset to input - ADDQ R10, BX - ADDQ R10, SI - ADDQ R10, DI - ADDQ R10, R8 - ADDQ R10, DX - MOVQ $0x0000000f, R11 - MOVQ R11, X9 - VPBROADCASTB X9, Y9 - -mulAvxTwo_5x9Xor_loop: - // Load and process 32 bytes from input 0 to 9 outputs - VMOVDQU (BX), Y12 - ADDQ $0x20, BX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - MOVQ (R9), R11 - VMOVDQU (R11)(R10*1), Y0 - VMOVDQU (CX), Y10 - VMOVDQU 32(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - MOVQ 24(R9), R11 - VMOVDQU (R11)(R10*1), Y1 - VMOVDQU 64(CX), Y10 - VMOVDQU 96(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - MOVQ 48(R9), R11 - VMOVDQU (R11)(R10*1), Y2 - VMOVDQU 128(CX), Y10 - VMOVDQU 160(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - MOVQ 72(R9), R11 - VMOVDQU (R11)(R10*1), Y3 - VMOVDQU 192(CX), Y10 - VMOVDQU 224(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - MOVQ 96(R9), R11 - VMOVDQU (R11)(R10*1), Y4 - VMOVDQU 256(CX), Y10 - VMOVDQU 288(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - MOVQ 120(R9), R11 - VMOVDQU (R11)(R10*1), Y5 - VMOVDQU 320(CX), Y10 - VMOVDQU 352(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - MOVQ 144(R9), R11 - VMOVDQU (R11)(R10*1), Y6 - VMOVDQU 384(CX), Y10 - VMOVDQU 416(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - MOVQ 168(R9), R11 - VMOVDQU (R11)(R10*1), Y7 - VMOVDQU 448(CX), Y10 - VMOVDQU 480(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - MOVQ 192(R9), R11 - VMOVDQU (R11)(R10*1), Y8 - VMOVDQU 512(CX), Y10 - VMOVDQU 544(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 1 to 9 outputs - VMOVDQU (SI), Y12 - ADDQ $0x20, SI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 576(CX), Y10 - VMOVDQU 608(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 640(CX), Y10 - VMOVDQU 672(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 704(CX), Y10 - VMOVDQU 736(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 768(CX), Y10 - VMOVDQU 800(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 832(CX), Y10 - VMOVDQU 864(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 896(CX), Y10 - VMOVDQU 928(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 960(CX), Y10 - VMOVDQU 992(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1024(CX), Y10 - VMOVDQU 1056(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1088(CX), Y10 - VMOVDQU 1120(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 2 to 9 outputs - VMOVDQU (DI), Y12 - ADDQ $0x20, DI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1152(CX), Y10 - VMOVDQU 1184(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1216(CX), Y10 - VMOVDQU 1248(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1280(CX), Y10 - VMOVDQU 1312(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1344(CX), Y10 - VMOVDQU 1376(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1408(CX), Y10 - VMOVDQU 1440(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 1472(CX), Y10 - VMOVDQU 1504(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 1536(CX), Y10 - VMOVDQU 1568(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1600(CX), Y10 - VMOVDQU 1632(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1664(CX), Y10 - VMOVDQU 1696(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 3 to 9 outputs - VMOVDQU (R8), Y12 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1728(CX), Y10 - VMOVDQU 1760(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1792(CX), Y10 - VMOVDQU 1824(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1856(CX), Y10 - VMOVDQU 1888(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1920(CX), Y10 - VMOVDQU 1952(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1984(CX), Y10 - VMOVDQU 2016(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2048(CX), Y10 - VMOVDQU 2080(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2112(CX), Y10 - VMOVDQU 2144(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2176(CX), Y10 - VMOVDQU 2208(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2240(CX), Y10 - VMOVDQU 2272(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 4 to 9 outputs - VMOVDQU (DX), Y12 - ADDQ $0x20, DX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 2304(CX), Y10 - VMOVDQU 2336(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 2368(CX), Y10 - VMOVDQU 2400(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 2432(CX), Y10 - VMOVDQU 2464(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 2496(CX), Y10 - VMOVDQU 2528(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 2560(CX), Y10 - VMOVDQU 2592(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2624(CX), Y10 - VMOVDQU 2656(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2688(CX), Y10 - VMOVDQU 2720(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2752(CX), Y10 - VMOVDQU 2784(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2816(CX), Y10 - VMOVDQU 2848(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Store 9 outputs - MOVQ (R9), R11 - VMOVDQU Y0, (R11)(R10*1) - MOVQ 24(R9), R11 - VMOVDQU Y1, (R11)(R10*1) - MOVQ 48(R9), R11 - VMOVDQU Y2, (R11)(R10*1) - MOVQ 72(R9), R11 - VMOVDQU Y3, (R11)(R10*1) - MOVQ 96(R9), R11 - VMOVDQU Y4, (R11)(R10*1) - MOVQ 120(R9), R11 - VMOVDQU Y5, (R11)(R10*1) - MOVQ 144(R9), R11 - VMOVDQU Y6, (R11)(R10*1) - MOVQ 168(R9), R11 - VMOVDQU Y7, (R11)(R10*1) - MOVQ 192(R9), R11 - VMOVDQU Y8, (R11)(R10*1) - - // Prepare for next loop - ADDQ $0x20, R10 - DECQ AX - JNZ mulAvxTwo_5x9Xor_loop - VZEROUPPER - -mulAvxTwo_5x9Xor_end: - RET - -// func mulAvxTwo_5x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x10(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 115 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_5x10_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), DX - MOVQ out_base+48(FP), R9 - MOVQ start+72(FP), R10 - - // Add start offset to input - ADDQ R10, BX - ADDQ R10, SI - ADDQ R10, DI - ADDQ R10, R8 - ADDQ R10, DX - MOVQ $0x0000000f, R11 - MOVQ R11, X10 - VPBROADCASTB X10, Y10 - -mulAvxTwo_5x10_loop: - // Load and process 32 bytes from input 0 to 10 outputs - VMOVDQU (BX), Y13 - ADDQ $0x20, BX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU (CX), Y11 - VMOVDQU 32(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y0 - VMOVDQU 64(CX), Y11 - VMOVDQU 96(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y1 - VMOVDQU 128(CX), Y11 - VMOVDQU 160(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y2 - VMOVDQU 192(CX), Y11 - VMOVDQU 224(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y3 - VMOVDQU 256(CX), Y11 - VMOVDQU 288(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y4 - VMOVDQU 320(CX), Y11 - VMOVDQU 352(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y5 - VMOVDQU 384(CX), Y11 - VMOVDQU 416(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y6 - VMOVDQU 448(CX), Y11 - VMOVDQU 480(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y7 - VMOVDQU 512(CX), Y11 - VMOVDQU 544(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y8 - VMOVDQU 576(CX), Y11 - VMOVDQU 608(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y9 - - // Load and process 32 bytes from input 1 to 10 outputs - VMOVDQU (SI), Y13 - ADDQ $0x20, SI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 640(CX), Y11 - VMOVDQU 672(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 704(CX), Y11 - VMOVDQU 736(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 768(CX), Y11 - VMOVDQU 800(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 832(CX), Y11 - VMOVDQU 864(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 896(CX), Y11 - VMOVDQU 928(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 960(CX), Y11 - VMOVDQU 992(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1024(CX), Y11 - VMOVDQU 1056(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1088(CX), Y11 - VMOVDQU 1120(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1152(CX), Y11 - VMOVDQU 1184(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1216(CX), Y11 - VMOVDQU 1248(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 2 to 10 outputs - VMOVDQU (DI), Y13 - ADDQ $0x20, DI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1280(CX), Y11 - VMOVDQU 1312(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1344(CX), Y11 - VMOVDQU 1376(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 1408(CX), Y11 - VMOVDQU 1440(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 1472(CX), Y11 - VMOVDQU 1504(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 1536(CX), Y11 - VMOVDQU 1568(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 1600(CX), Y11 - VMOVDQU 1632(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1664(CX), Y11 - VMOVDQU 1696(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1728(CX), Y11 - VMOVDQU 1760(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1792(CX), Y11 - VMOVDQU 1824(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1856(CX), Y11 - VMOVDQU 1888(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 3 to 10 outputs - VMOVDQU (R8), Y13 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1920(CX), Y11 - VMOVDQU 1952(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1984(CX), Y11 - VMOVDQU 2016(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2048(CX), Y11 - VMOVDQU 2080(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2112(CX), Y11 - VMOVDQU 2144(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2176(CX), Y11 - VMOVDQU 2208(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2240(CX), Y11 - VMOVDQU 2272(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2304(CX), Y11 - VMOVDQU 2336(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 2368(CX), Y11 - VMOVDQU 2400(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 2432(CX), Y11 - VMOVDQU 2464(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 2496(CX), Y11 - VMOVDQU 2528(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 4 to 10 outputs - VMOVDQU (DX), Y13 - ADDQ $0x20, DX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 2560(CX), Y11 - VMOVDQU 2592(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 2624(CX), Y11 - VMOVDQU 2656(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2688(CX), Y11 - VMOVDQU 2720(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2752(CX), Y11 - VMOVDQU 2784(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2816(CX), Y11 - VMOVDQU 2848(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2880(CX), Y11 - VMOVDQU 2912(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2944(CX), Y11 - VMOVDQU 2976(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 3008(CX), Y11 - VMOVDQU 3040(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 3072(CX), Y11 - VMOVDQU 3104(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 3136(CX), Y11 - VMOVDQU 3168(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Store 10 outputs - MOVQ (R9), R11 - VMOVDQU Y0, (R11)(R10*1) - MOVQ 24(R9), R11 - VMOVDQU Y1, (R11)(R10*1) - MOVQ 48(R9), R11 - VMOVDQU Y2, (R11)(R10*1) - MOVQ 72(R9), R11 - VMOVDQU Y3, (R11)(R10*1) - MOVQ 96(R9), R11 - VMOVDQU Y4, (R11)(R10*1) - MOVQ 120(R9), R11 - VMOVDQU Y5, (R11)(R10*1) - MOVQ 144(R9), R11 - VMOVDQU Y6, (R11)(R10*1) - MOVQ 168(R9), R11 - VMOVDQU Y7, (R11)(R10*1) - MOVQ 192(R9), R11 - VMOVDQU Y8, (R11)(R10*1) - MOVQ 216(R9), R11 - VMOVDQU Y9, (R11)(R10*1) - - // Prepare for next loop - ADDQ $0x20, R10 - DECQ AX - JNZ mulAvxTwo_5x10_loop - VZEROUPPER - -mulAvxTwo_5x10_end: - RET - -// func mulAvxTwo_5x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_5x10Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 115 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_5x10Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), DX - MOVQ out_base+48(FP), R9 - MOVQ start+72(FP), R10 - - // Add start offset to input - ADDQ R10, BX - ADDQ R10, SI - ADDQ R10, DI - ADDQ R10, R8 - ADDQ R10, DX - MOVQ $0x0000000f, R11 - MOVQ R11, X10 - VPBROADCASTB X10, Y10 - -mulAvxTwo_5x10Xor_loop: - // Load and process 32 bytes from input 0 to 10 outputs - VMOVDQU (BX), Y13 - ADDQ $0x20, BX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - MOVQ (R9), R11 - VMOVDQU (R11)(R10*1), Y0 - VMOVDQU (CX), Y11 - VMOVDQU 32(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - MOVQ 24(R9), R11 - VMOVDQU (R11)(R10*1), Y1 - VMOVDQU 64(CX), Y11 - VMOVDQU 96(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - MOVQ 48(R9), R11 - VMOVDQU (R11)(R10*1), Y2 - VMOVDQU 128(CX), Y11 - VMOVDQU 160(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - MOVQ 72(R9), R11 - VMOVDQU (R11)(R10*1), Y3 - VMOVDQU 192(CX), Y11 - VMOVDQU 224(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - MOVQ 96(R9), R11 - VMOVDQU (R11)(R10*1), Y4 - VMOVDQU 256(CX), Y11 - VMOVDQU 288(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - MOVQ 120(R9), R11 - VMOVDQU (R11)(R10*1), Y5 - VMOVDQU 320(CX), Y11 - VMOVDQU 352(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - MOVQ 144(R9), R11 - VMOVDQU (R11)(R10*1), Y6 - VMOVDQU 384(CX), Y11 - VMOVDQU 416(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - MOVQ 168(R9), R11 - VMOVDQU (R11)(R10*1), Y7 - VMOVDQU 448(CX), Y11 - VMOVDQU 480(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - MOVQ 192(R9), R11 - VMOVDQU (R11)(R10*1), Y8 - VMOVDQU 512(CX), Y11 - VMOVDQU 544(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - MOVQ 216(R9), R11 - VMOVDQU (R11)(R10*1), Y9 - VMOVDQU 576(CX), Y11 - VMOVDQU 608(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 1 to 10 outputs - VMOVDQU (SI), Y13 - ADDQ $0x20, SI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 640(CX), Y11 - VMOVDQU 672(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 704(CX), Y11 - VMOVDQU 736(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 768(CX), Y11 - VMOVDQU 800(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 832(CX), Y11 - VMOVDQU 864(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 896(CX), Y11 - VMOVDQU 928(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 960(CX), Y11 - VMOVDQU 992(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1024(CX), Y11 - VMOVDQU 1056(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1088(CX), Y11 - VMOVDQU 1120(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1152(CX), Y11 - VMOVDQU 1184(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1216(CX), Y11 - VMOVDQU 1248(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 2 to 10 outputs - VMOVDQU (DI), Y13 - ADDQ $0x20, DI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1280(CX), Y11 - VMOVDQU 1312(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1344(CX), Y11 - VMOVDQU 1376(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 1408(CX), Y11 - VMOVDQU 1440(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 1472(CX), Y11 - VMOVDQU 1504(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 1536(CX), Y11 - VMOVDQU 1568(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 1600(CX), Y11 - VMOVDQU 1632(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1664(CX), Y11 - VMOVDQU 1696(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1728(CX), Y11 - VMOVDQU 1760(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1792(CX), Y11 - VMOVDQU 1824(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1856(CX), Y11 - VMOVDQU 1888(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 3 to 10 outputs - VMOVDQU (R8), Y13 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1920(CX), Y11 - VMOVDQU 1952(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1984(CX), Y11 - VMOVDQU 2016(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2048(CX), Y11 - VMOVDQU 2080(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2112(CX), Y11 - VMOVDQU 2144(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2176(CX), Y11 - VMOVDQU 2208(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2240(CX), Y11 - VMOVDQU 2272(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2304(CX), Y11 - VMOVDQU 2336(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 2368(CX), Y11 - VMOVDQU 2400(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 2432(CX), Y11 - VMOVDQU 2464(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 2496(CX), Y11 - VMOVDQU 2528(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 4 to 10 outputs - VMOVDQU (DX), Y13 - ADDQ $0x20, DX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 2560(CX), Y11 - VMOVDQU 2592(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 2624(CX), Y11 - VMOVDQU 2656(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2688(CX), Y11 - VMOVDQU 2720(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2752(CX), Y11 - VMOVDQU 2784(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2816(CX), Y11 - VMOVDQU 2848(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2880(CX), Y11 - VMOVDQU 2912(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2944(CX), Y11 - VMOVDQU 2976(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 3008(CX), Y11 - VMOVDQU 3040(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 3072(CX), Y11 - VMOVDQU 3104(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 3136(CX), Y11 - VMOVDQU 3168(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Store 10 outputs - MOVQ (R9), R11 - VMOVDQU Y0, (R11)(R10*1) - MOVQ 24(R9), R11 - VMOVDQU Y1, (R11)(R10*1) - MOVQ 48(R9), R11 - VMOVDQU Y2, (R11)(R10*1) - MOVQ 72(R9), R11 - VMOVDQU Y3, (R11)(R10*1) - MOVQ 96(R9), R11 - VMOVDQU Y4, (R11)(R10*1) - MOVQ 120(R9), R11 - VMOVDQU Y5, (R11)(R10*1) - MOVQ 144(R9), R11 - VMOVDQU Y6, (R11)(R10*1) - MOVQ 168(R9), R11 - VMOVDQU Y7, (R11)(R10*1) - MOVQ 192(R9), R11 - VMOVDQU Y8, (R11)(R10*1) - MOVQ 216(R9), R11 - VMOVDQU Y9, (R11)(R10*1) - - // Prepare for next loop - ADDQ $0x20, R10 - DECQ AX - JNZ mulAvxTwo_5x10Xor_loop - VZEROUPPER - -mulAvxTwo_5x10Xor_end: - RET - -// func mulAvxTwo_6x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x1(SB), NOSPLIT, $0-88 - // Loading all tables to registers - // Destination kept in GP registers - // Full registers estimated 16 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_6x1_end - VMOVDQU (CX), Y0 - VMOVDQU 32(CX), Y1 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y9 - VMOVDQU 320(CX), Y10 - VMOVDQU 352(CX), Y11 - MOVQ in_base+24(FP), CX - MOVQ (CX), DX - MOVQ 24(CX), BX - MOVQ 48(CX), SI - MOVQ 72(CX), DI - MOVQ 96(CX), R8 - MOVQ 120(CX), CX - MOVQ out_base+48(FP), R9 - MOVQ (R9), R9 - MOVQ start+72(FP), R10 - - // Add start offset to output - ADDQ R10, R9 - - // Add start offset to input - ADDQ R10, DX - ADDQ R10, BX - ADDQ R10, SI - ADDQ R10, DI - ADDQ R10, R8 - ADDQ R10, CX - MOVQ $0x0000000f, R10 - MOVQ R10, X13 - VPBROADCASTB X13, Y13 - -mulAvxTwo_6x1_loop: - // Load and process 32 bytes from input 0 to 1 outputs - VMOVDQU (DX), Y14 - ADDQ $0x20, DX - VPSRLQ $0x04, Y14, Y15 - VPAND Y13, Y14, Y14 - VPAND Y13, Y15, Y15 - VPSHUFB Y14, Y0, Y14 - VPSHUFB Y15, Y1, Y15 - VPXOR Y14, Y15, Y12 - - // Load and process 32 bytes from input 1 to 1 outputs - VMOVDQU (BX), Y14 - ADDQ $0x20, BX - VPSRLQ $0x04, Y14, Y15 - VPAND Y13, Y14, Y14 - VPAND Y13, Y15, Y15 - VPSHUFB Y14, Y2, Y14 - VPSHUFB Y15, Y3, Y15 - XOR3WAY( $0x00, Y14, Y15, Y12) - - // Load and process 32 bytes from input 2 to 1 outputs - VMOVDQU (SI), Y14 - ADDQ $0x20, SI - VPSRLQ $0x04, Y14, Y15 - VPAND Y13, Y14, Y14 - VPAND Y13, Y15, Y15 - VPSHUFB Y14, Y4, Y14 - VPSHUFB Y15, Y5, Y15 - XOR3WAY( $0x00, Y14, Y15, Y12) - - // Load and process 32 bytes from input 3 to 1 outputs - VMOVDQU (DI), Y14 - ADDQ $0x20, DI - VPSRLQ $0x04, Y14, Y15 - VPAND Y13, Y14, Y14 - VPAND Y13, Y15, Y15 - VPSHUFB Y14, Y6, Y14 - VPSHUFB Y15, Y7, Y15 - XOR3WAY( $0x00, Y14, Y15, Y12) - - // Load and process 32 bytes from input 4 to 1 outputs - VMOVDQU (R8), Y14 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y14, Y15 - VPAND Y13, Y14, Y14 - VPAND Y13, Y15, Y15 - VPSHUFB Y14, Y8, Y14 - VPSHUFB Y15, Y9, Y15 - XOR3WAY( $0x00, Y14, Y15, Y12) - - // Load and process 32 bytes from input 5 to 1 outputs - VMOVDQU (CX), Y14 - ADDQ $0x20, CX - VPSRLQ $0x04, Y14, Y15 - VPAND Y13, Y14, Y14 - VPAND Y13, Y15, Y15 - VPSHUFB Y14, Y10, Y14 - VPSHUFB Y15, Y11, Y15 - XOR3WAY( $0x00, Y14, Y15, Y12) - - // Store 1 outputs - VMOVDQU Y12, (R9) - ADDQ $0x20, R9 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_6x1_loop - VZEROUPPER - -mulAvxTwo_6x1_end: - RET - -// func mulAvxTwo_6x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x1_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 30 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_6x1_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), DX - MOVQ out_base+48(FP), R10 - MOVQ out_base+48(FP), R10 - MOVQ (R10), R10 - MOVQ start+72(FP), R11 - - // Add start offset to output - ADDQ R11, R10 - - // Add start offset to input - ADDQ R11, BX - ADDQ R11, SI - ADDQ R11, DI - ADDQ R11, R8 - ADDQ R11, R9 - ADDQ R11, DX - MOVQ $0x0000000f, R11 - MOVQ R11, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_6x1_64_loop: - // Load and process 64 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y6 - VMOVDQU 32(BX), Y5 - ADDQ $0x40, BX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y0 - VPXOR Y5, Y6, Y1 - - // Load and process 64 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y6 - VMOVDQU 32(SI), Y5 - ADDQ $0x40, SI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 2 to 1 outputs - VMOVDQU (DI), Y6 - VMOVDQU 32(DI), Y5 - ADDQ $0x40, DI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 3 to 1 outputs - VMOVDQU (R8), Y6 - VMOVDQU 32(R8), Y5 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 4 to 1 outputs - VMOVDQU (R9), Y6 - VMOVDQU 32(R9), Y5 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 5 to 1 outputs - VMOVDQU (DX), Y6 - VMOVDQU 32(DX), Y5 - ADDQ $0x40, DX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Store 1 outputs - VMOVDQU Y0, (R10) - VMOVDQU Y1, 32(R10) - ADDQ $0x40, R10 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_6x1_64_loop - VZEROUPPER - -mulAvxTwo_6x1_64_end: - RET - -// func mulAvxTwo_6x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x1Xor(SB), NOSPLIT, $0-88 - // Loading all tables to registers - // Destination kept in GP registers - // Full registers estimated 16 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_6x1Xor_end - VMOVDQU (CX), Y0 - VMOVDQU 32(CX), Y1 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y9 - VMOVDQU 320(CX), Y10 - VMOVDQU 352(CX), Y11 - MOVQ in_base+24(FP), CX - MOVQ (CX), DX - MOVQ 24(CX), BX - MOVQ 48(CX), SI - MOVQ 72(CX), DI - MOVQ 96(CX), R8 - MOVQ 120(CX), CX - MOVQ out_base+48(FP), R9 - MOVQ (R9), R9 - MOVQ start+72(FP), R10 - - // Add start offset to output - ADDQ R10, R9 - - // Add start offset to input - ADDQ R10, DX - ADDQ R10, BX - ADDQ R10, SI - ADDQ R10, DI - ADDQ R10, R8 - ADDQ R10, CX - MOVQ $0x0000000f, R10 - MOVQ R10, X13 - VPBROADCASTB X13, Y13 - -mulAvxTwo_6x1Xor_loop: - // Load and process 32 bytes from input 0 to 1 outputs - VMOVDQU (DX), Y14 - ADDQ $0x20, DX - VPSRLQ $0x04, Y14, Y15 - VPAND Y13, Y14, Y14 - VPAND Y13, Y15, Y15 - VMOVDQU (R9), Y12 - VPSHUFB Y14, Y0, Y14 - VPSHUFB Y15, Y1, Y15 - XOR3WAY( $0x00, Y14, Y15, Y12) - - // Load and process 32 bytes from input 1 to 1 outputs - VMOVDQU (BX), Y14 - ADDQ $0x20, BX - VPSRLQ $0x04, Y14, Y15 - VPAND Y13, Y14, Y14 - VPAND Y13, Y15, Y15 - VPSHUFB Y14, Y2, Y14 - VPSHUFB Y15, Y3, Y15 - XOR3WAY( $0x00, Y14, Y15, Y12) - - // Load and process 32 bytes from input 2 to 1 outputs - VMOVDQU (SI), Y14 - ADDQ $0x20, SI - VPSRLQ $0x04, Y14, Y15 - VPAND Y13, Y14, Y14 - VPAND Y13, Y15, Y15 - VPSHUFB Y14, Y4, Y14 - VPSHUFB Y15, Y5, Y15 - XOR3WAY( $0x00, Y14, Y15, Y12) - - // Load and process 32 bytes from input 3 to 1 outputs - VMOVDQU (DI), Y14 - ADDQ $0x20, DI - VPSRLQ $0x04, Y14, Y15 - VPAND Y13, Y14, Y14 - VPAND Y13, Y15, Y15 - VPSHUFB Y14, Y6, Y14 - VPSHUFB Y15, Y7, Y15 - XOR3WAY( $0x00, Y14, Y15, Y12) - - // Load and process 32 bytes from input 4 to 1 outputs - VMOVDQU (R8), Y14 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y14, Y15 - VPAND Y13, Y14, Y14 - VPAND Y13, Y15, Y15 - VPSHUFB Y14, Y8, Y14 - VPSHUFB Y15, Y9, Y15 - XOR3WAY( $0x00, Y14, Y15, Y12) - - // Load and process 32 bytes from input 5 to 1 outputs - VMOVDQU (CX), Y14 - ADDQ $0x20, CX - VPSRLQ $0x04, Y14, Y15 - VPAND Y13, Y14, Y14 - VPAND Y13, Y15, Y15 - VPSHUFB Y14, Y10, Y14 - VPSHUFB Y15, Y11, Y15 - XOR3WAY( $0x00, Y14, Y15, Y12) - - // Store 1 outputs - VMOVDQU Y12, (R9) - ADDQ $0x20, R9 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_6x1Xor_loop - VZEROUPPER - -mulAvxTwo_6x1Xor_end: - RET - -// func mulAvxTwo_6x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x1_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 30 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_6x1_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), DX - MOVQ out_base+48(FP), R10 - MOVQ out_base+48(FP), R10 - MOVQ (R10), R10 - MOVQ start+72(FP), R11 - - // Add start offset to output - ADDQ R11, R10 - - // Add start offset to input - ADDQ R11, BX - ADDQ R11, SI - ADDQ R11, DI - ADDQ R11, R8 - ADDQ R11, R9 - ADDQ R11, DX - MOVQ $0x0000000f, R11 - MOVQ R11, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_6x1_64Xor_loop: - // Load 1 outputs - VMOVDQU (R10), Y0 - VMOVDQU 32(R10), Y1 - - // Load and process 64 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y6 - VMOVDQU 32(BX), Y5 - ADDQ $0x40, BX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y6 - VMOVDQU 32(SI), Y5 - ADDQ $0x40, SI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 2 to 1 outputs - VMOVDQU (DI), Y6 - VMOVDQU 32(DI), Y5 - ADDQ $0x40, DI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 3 to 1 outputs - VMOVDQU (R8), Y6 - VMOVDQU 32(R8), Y5 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 4 to 1 outputs - VMOVDQU (R9), Y6 - VMOVDQU 32(R9), Y5 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 5 to 1 outputs - VMOVDQU (DX), Y6 - VMOVDQU 32(DX), Y5 - ADDQ $0x40, DX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Store 1 outputs - VMOVDQU Y0, (R10) - VMOVDQU Y1, 32(R10) - ADDQ $0x40, R10 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_6x1_64Xor_loop - VZEROUPPER - -mulAvxTwo_6x1_64Xor_end: - RET - -// func mulAvxTwo_6x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x2(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 31 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_6x2_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), DX - MOVQ out_base+48(FP), R10 - MOVQ (R10), R11 - MOVQ 24(R10), R10 - MOVQ start+72(FP), R12 - - // Add start offset to output - ADDQ R12, R11 - ADDQ R12, R10 - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, R9 - ADDQ R12, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_6x2_loop: - // Load and process 32 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y5 - ADDQ $0x20, BX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y0 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y1 - - // Load and process 32 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y5 - ADDQ $0x20, SI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y5 - ADDQ $0x20, DI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y5 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 384(CX), Y3 - VMOVDQU 416(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 448(CX), Y3 - VMOVDQU 480(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 4 to 2 outputs - VMOVDQU (R9), Y5 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 512(CX), Y3 - VMOVDQU 544(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 576(CX), Y3 - VMOVDQU 608(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 5 to 2 outputs - VMOVDQU (DX), Y5 - ADDQ $0x20, DX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 640(CX), Y3 - VMOVDQU 672(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 704(CX), Y3 - VMOVDQU 736(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Store 2 outputs - VMOVDQU Y0, (R11) - ADDQ $0x20, R11 - VMOVDQU Y1, (R10) - ADDQ $0x20, R10 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_6x2_loop - VZEROUPPER - -mulAvxTwo_6x2_end: - RET - -// func mulAvxTwo_6x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x2_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 57 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_6x2_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), DX - MOVQ out_base+48(FP), R10 - MOVQ out_base+48(FP), R10 - MOVQ (R10), R11 - MOVQ 24(R10), R10 - MOVQ start+72(FP), R12 - - // Add start offset to output - ADDQ R12, R11 - ADDQ R12, R10 - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, R9 - ADDQ R12, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_6x2_64_loop: - // Load and process 64 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y9 - VMOVDQU 32(BX), Y11 - ADDQ $0x40, BX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y0 - VPXOR Y7, Y8, Y1 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y2 - VPXOR Y7, Y8, Y3 - - // Load and process 64 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y9 - VMOVDQU 32(SI), Y11 - ADDQ $0x40, SI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y9 - VMOVDQU 32(DI), Y11 - ADDQ $0x40, DI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y9 - VMOVDQU 32(R8), Y11 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 4 to 2 outputs - VMOVDQU (R9), Y9 - VMOVDQU 32(R9), Y11 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 5 to 2 outputs - VMOVDQU (DX), Y9 - VMOVDQU 32(DX), Y11 - ADDQ $0x40, DX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Store 2 outputs - VMOVDQU Y0, (R11) - VMOVDQU Y1, 32(R11) - ADDQ $0x40, R11 - VMOVDQU Y2, (R10) - VMOVDQU Y3, 32(R10) - ADDQ $0x40, R10 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_6x2_64_loop - VZEROUPPER - -mulAvxTwo_6x2_64_end: - RET - -// func mulAvxTwo_6x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x2Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 31 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_6x2Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), DX - MOVQ out_base+48(FP), R10 - MOVQ (R10), R11 - MOVQ 24(R10), R10 - MOVQ start+72(FP), R12 - - // Add start offset to output - ADDQ R12, R11 - ADDQ R12, R10 - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, R9 - ADDQ R12, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_6x2Xor_loop: - // Load and process 32 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y5 - ADDQ $0x20, BX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU (R11), Y0 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU (R10), Y1 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y5 - ADDQ $0x20, SI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y5 - ADDQ $0x20, DI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y5 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 384(CX), Y3 - VMOVDQU 416(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 448(CX), Y3 - VMOVDQU 480(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 4 to 2 outputs - VMOVDQU (R9), Y5 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 512(CX), Y3 - VMOVDQU 544(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 576(CX), Y3 - VMOVDQU 608(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 5 to 2 outputs - VMOVDQU (DX), Y5 - ADDQ $0x20, DX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 640(CX), Y3 - VMOVDQU 672(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 704(CX), Y3 - VMOVDQU 736(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Store 2 outputs - VMOVDQU Y0, (R11) - ADDQ $0x20, R11 - VMOVDQU Y1, (R10) - ADDQ $0x20, R10 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_6x2Xor_loop - VZEROUPPER - -mulAvxTwo_6x2Xor_end: - RET - -// func mulAvxTwo_6x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x2_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 57 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_6x2_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), DX - MOVQ out_base+48(FP), R10 - MOVQ out_base+48(FP), R10 - MOVQ (R10), R11 - MOVQ 24(R10), R10 - MOVQ start+72(FP), R12 - - // Add start offset to output - ADDQ R12, R11 - ADDQ R12, R10 - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, R9 - ADDQ R12, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_6x2_64Xor_loop: - // Load 2 outputs - VMOVDQU (R11), Y0 - VMOVDQU 32(R11), Y1 - VMOVDQU (R10), Y2 - VMOVDQU 32(R10), Y3 - - // Load and process 64 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y9 - VMOVDQU 32(BX), Y11 - ADDQ $0x40, BX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y9 - VMOVDQU 32(SI), Y11 - ADDQ $0x40, SI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y9 - VMOVDQU 32(DI), Y11 - ADDQ $0x40, DI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y9 - VMOVDQU 32(R8), Y11 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 4 to 2 outputs - VMOVDQU (R9), Y9 - VMOVDQU 32(R9), Y11 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 5 to 2 outputs - VMOVDQU (DX), Y9 - VMOVDQU 32(DX), Y11 - ADDQ $0x40, DX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Store 2 outputs - VMOVDQU Y0, (R11) - VMOVDQU Y1, 32(R11) - ADDQ $0x40, R11 - VMOVDQU Y2, (R10) - VMOVDQU Y3, 32(R10) - ADDQ $0x40, R10 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_6x2_64Xor_loop - VZEROUPPER - -mulAvxTwo_6x2_64Xor_end: - RET - -// func mulAvxTwo_6x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x3(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 44 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_6x3_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), DX - MOVQ out_base+48(FP), R10 - MOVQ (R10), R11 - MOVQ 24(R10), R12 - MOVQ 48(R10), R10 - MOVQ start+72(FP), R13 - - // Add start offset to output - ADDQ R13, R11 - ADDQ R13, R12 - ADDQ R13, R10 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X3 - VPBROADCASTB X3, Y3 - -mulAvxTwo_6x3_loop: - // Load and process 32 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y6 - ADDQ $0x20, BX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU (CX), Y4 - VMOVDQU 32(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y0 - VMOVDQU 64(CX), Y4 - VMOVDQU 96(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y1 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y2 - - // Load and process 32 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y6 - ADDQ $0x20, SI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 192(CX), Y4 - VMOVDQU 224(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 256(CX), Y4 - VMOVDQU 288(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 320(CX), Y4 - VMOVDQU 352(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y6 - ADDQ $0x20, DI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 384(CX), Y4 - VMOVDQU 416(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 448(CX), Y4 - VMOVDQU 480(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 512(CX), Y4 - VMOVDQU 544(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 3 to 3 outputs - VMOVDQU (R8), Y6 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 576(CX), Y4 - VMOVDQU 608(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 640(CX), Y4 - VMOVDQU 672(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 704(CX), Y4 - VMOVDQU 736(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 4 to 3 outputs - VMOVDQU (R9), Y6 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 768(CX), Y4 - VMOVDQU 800(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 832(CX), Y4 - VMOVDQU 864(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 896(CX), Y4 - VMOVDQU 928(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 5 to 3 outputs - VMOVDQU (DX), Y6 - ADDQ $0x20, DX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 960(CX), Y4 - VMOVDQU 992(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1024(CX), Y4 - VMOVDQU 1056(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1088(CX), Y4 - VMOVDQU 1120(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Store 3 outputs - VMOVDQU Y0, (R11) - ADDQ $0x20, R11 - VMOVDQU Y1, (R12) - ADDQ $0x20, R12 - VMOVDQU Y2, (R10) - ADDQ $0x20, R10 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_6x3_loop - VZEROUPPER - -mulAvxTwo_6x3_end: - RET - -// func mulAvxTwo_6x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x3_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 82 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_6x3_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), DX - MOVQ out_base+48(FP), R10 - MOVQ out_base+48(FP), R10 - MOVQ (R10), R11 - MOVQ 24(R10), R12 - MOVQ 48(R10), R10 - MOVQ start+72(FP), R13 - - // Add start offset to output - ADDQ R13, R11 - ADDQ R13, R12 - ADDQ R13, R10 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_6x3_64_loop: - // Load and process 64 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y11 - VMOVDQU 32(BX), Y13 - ADDQ $0x40, BX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y0 - VPXOR Y9, Y10, Y1 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y2 - VPXOR Y9, Y10, Y3 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y4 - VPXOR Y9, Y10, Y5 - - // Load and process 64 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y11 - VMOVDQU 32(SI), Y13 - ADDQ $0x40, SI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y11 - VMOVDQU 32(DI), Y13 - ADDQ $0x40, DI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 3 to 3 outputs - VMOVDQU (R8), Y11 - VMOVDQU 32(R8), Y13 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 4 to 3 outputs - VMOVDQU (R9), Y11 - VMOVDQU 32(R9), Y13 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 5 to 3 outputs - VMOVDQU (DX), Y11 - VMOVDQU 32(DX), Y13 - ADDQ $0x40, DX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Store 3 outputs - VMOVDQU Y0, (R11) - VMOVDQU Y1, 32(R11) - ADDQ $0x40, R11 - VMOVDQU Y2, (R12) - VMOVDQU Y3, 32(R12) - ADDQ $0x40, R12 - VMOVDQU Y4, (R10) - VMOVDQU Y5, 32(R10) - ADDQ $0x40, R10 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_6x3_64_loop - VZEROUPPER - -mulAvxTwo_6x3_64_end: - RET - -// func mulAvxTwo_6x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x3Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 44 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_6x3Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), DX - MOVQ out_base+48(FP), R10 - MOVQ (R10), R11 - MOVQ 24(R10), R12 - MOVQ 48(R10), R10 - MOVQ start+72(FP), R13 - - // Add start offset to output - ADDQ R13, R11 - ADDQ R13, R12 - ADDQ R13, R10 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X3 - VPBROADCASTB X3, Y3 - -mulAvxTwo_6x3Xor_loop: - // Load and process 32 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y6 - ADDQ $0x20, BX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU (R11), Y0 - VMOVDQU (CX), Y4 - VMOVDQU 32(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU (R12), Y1 - VMOVDQU 64(CX), Y4 - VMOVDQU 96(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU (R10), Y2 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y6 - ADDQ $0x20, SI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 192(CX), Y4 - VMOVDQU 224(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 256(CX), Y4 - VMOVDQU 288(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 320(CX), Y4 - VMOVDQU 352(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y6 - ADDQ $0x20, DI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 384(CX), Y4 - VMOVDQU 416(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 448(CX), Y4 - VMOVDQU 480(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 512(CX), Y4 - VMOVDQU 544(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 3 to 3 outputs - VMOVDQU (R8), Y6 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 576(CX), Y4 - VMOVDQU 608(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 640(CX), Y4 - VMOVDQU 672(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 704(CX), Y4 - VMOVDQU 736(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 4 to 3 outputs - VMOVDQU (R9), Y6 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 768(CX), Y4 - VMOVDQU 800(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 832(CX), Y4 - VMOVDQU 864(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 896(CX), Y4 - VMOVDQU 928(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 5 to 3 outputs - VMOVDQU (DX), Y6 - ADDQ $0x20, DX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 960(CX), Y4 - VMOVDQU 992(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1024(CX), Y4 - VMOVDQU 1056(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1088(CX), Y4 - VMOVDQU 1120(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Store 3 outputs - VMOVDQU Y0, (R11) - ADDQ $0x20, R11 - VMOVDQU Y1, (R12) - ADDQ $0x20, R12 - VMOVDQU Y2, (R10) - ADDQ $0x20, R10 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_6x3Xor_loop - VZEROUPPER - -mulAvxTwo_6x3Xor_end: - RET - -// func mulAvxTwo_6x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x3_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 82 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_6x3_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), DX - MOVQ out_base+48(FP), R10 - MOVQ out_base+48(FP), R10 - MOVQ (R10), R11 - MOVQ 24(R10), R12 - MOVQ 48(R10), R10 - MOVQ start+72(FP), R13 - - // Add start offset to output - ADDQ R13, R11 - ADDQ R13, R12 - ADDQ R13, R10 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_6x3_64Xor_loop: - // Load 3 outputs - VMOVDQU (R11), Y0 - VMOVDQU 32(R11), Y1 - VMOVDQU (R12), Y2 - VMOVDQU 32(R12), Y3 - VMOVDQU (R10), Y4 - VMOVDQU 32(R10), Y5 - - // Load and process 64 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y11 - VMOVDQU 32(BX), Y13 - ADDQ $0x40, BX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y11 - VMOVDQU 32(SI), Y13 - ADDQ $0x40, SI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y11 - VMOVDQU 32(DI), Y13 - ADDQ $0x40, DI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 3 to 3 outputs - VMOVDQU (R8), Y11 - VMOVDQU 32(R8), Y13 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 4 to 3 outputs - VMOVDQU (R9), Y11 - VMOVDQU 32(R9), Y13 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 5 to 3 outputs - VMOVDQU (DX), Y11 - VMOVDQU 32(DX), Y13 - ADDQ $0x40, DX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Store 3 outputs - VMOVDQU Y0, (R11) - VMOVDQU Y1, 32(R11) - ADDQ $0x40, R11 - VMOVDQU Y2, (R12) - VMOVDQU Y3, 32(R12) - ADDQ $0x40, R12 - VMOVDQU Y4, (R10) - VMOVDQU Y5, 32(R10) - ADDQ $0x40, R10 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_6x3_64Xor_loop - VZEROUPPER - -mulAvxTwo_6x3_64Xor_end: - RET - -// func mulAvxTwo_6x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x4(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 57 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_6x4_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), DX - MOVQ out_base+48(FP), R10 - MOVQ (R10), R11 - MOVQ 24(R10), R12 - MOVQ 48(R10), R13 - MOVQ 72(R10), R10 - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, R13 - ADDQ R14, R10 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_6x4_loop: - // Load and process 32 bytes from input 0 to 4 outputs - VMOVDQU (BX), Y7 - ADDQ $0x20, BX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y0 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y1 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y2 - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y3 - - // Load and process 32 bytes from input 1 to 4 outputs - VMOVDQU (SI), Y7 - ADDQ $0x20, SI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 2 to 4 outputs - VMOVDQU (DI), Y7 - ADDQ $0x20, DI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 3 to 4 outputs - VMOVDQU (R8), Y7 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 768(CX), Y5 - VMOVDQU 800(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 832(CX), Y5 - VMOVDQU 864(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 896(CX), Y5 - VMOVDQU 928(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 960(CX), Y5 - VMOVDQU 992(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 4 to 4 outputs - VMOVDQU (R9), Y7 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1024(CX), Y5 - VMOVDQU 1056(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1088(CX), Y5 - VMOVDQU 1120(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1152(CX), Y5 - VMOVDQU 1184(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1216(CX), Y5 - VMOVDQU 1248(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 5 to 4 outputs - VMOVDQU (DX), Y7 - ADDQ $0x20, DX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1280(CX), Y5 - VMOVDQU 1312(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1344(CX), Y5 - VMOVDQU 1376(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1408(CX), Y5 - VMOVDQU 1440(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1472(CX), Y5 - VMOVDQU 1504(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Store 4 outputs - VMOVDQU Y0, (R11) - ADDQ $0x20, R11 - VMOVDQU Y1, (R12) - ADDQ $0x20, R12 - VMOVDQU Y2, (R13) - ADDQ $0x20, R13 - VMOVDQU Y3, (R10) - ADDQ $0x20, R10 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_6x4_loop - VZEROUPPER - -mulAvxTwo_6x4_end: - RET - -// func mulAvxTwo_6x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x4Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 57 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_6x4Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), DX - MOVQ out_base+48(FP), R10 - MOVQ (R10), R11 - MOVQ 24(R10), R12 - MOVQ 48(R10), R13 - MOVQ 72(R10), R10 - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, R13 - ADDQ R14, R10 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_6x4Xor_loop: - // Load and process 32 bytes from input 0 to 4 outputs - VMOVDQU (BX), Y7 - ADDQ $0x20, BX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU (R11), Y0 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU (R12), Y1 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU (R13), Y2 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU (R10), Y3 - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 1 to 4 outputs - VMOVDQU (SI), Y7 - ADDQ $0x20, SI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 2 to 4 outputs - VMOVDQU (DI), Y7 - ADDQ $0x20, DI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 3 to 4 outputs - VMOVDQU (R8), Y7 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 768(CX), Y5 - VMOVDQU 800(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 832(CX), Y5 - VMOVDQU 864(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 896(CX), Y5 - VMOVDQU 928(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 960(CX), Y5 - VMOVDQU 992(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 4 to 4 outputs - VMOVDQU (R9), Y7 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1024(CX), Y5 - VMOVDQU 1056(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1088(CX), Y5 - VMOVDQU 1120(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1152(CX), Y5 - VMOVDQU 1184(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1216(CX), Y5 - VMOVDQU 1248(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 5 to 4 outputs - VMOVDQU (DX), Y7 - ADDQ $0x20, DX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1280(CX), Y5 - VMOVDQU 1312(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1344(CX), Y5 - VMOVDQU 1376(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1408(CX), Y5 - VMOVDQU 1440(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1472(CX), Y5 - VMOVDQU 1504(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Store 4 outputs - VMOVDQU Y0, (R11) - ADDQ $0x20, R11 - VMOVDQU Y1, (R12) - ADDQ $0x20, R12 - VMOVDQU Y2, (R13) - ADDQ $0x20, R13 - VMOVDQU Y3, (R10) - ADDQ $0x20, R10 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_6x4Xor_loop - VZEROUPPER - -mulAvxTwo_6x4Xor_end: - RET - -// func mulAvxTwo_6x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x5(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 70 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_6x5_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), DX - MOVQ out_base+48(FP), R10 - MOVQ (R10), R11 - MOVQ 24(R10), R12 - MOVQ 48(R10), R13 - MOVQ 72(R10), R14 - MOVQ 96(R10), R10 - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, R14 - ADDQ R15, R10 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X5 - VPBROADCASTB X5, Y5 - -mulAvxTwo_6x5_loop: - // Load and process 32 bytes from input 0 to 5 outputs - VMOVDQU (BX), Y8 - ADDQ $0x20, BX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU (CX), Y6 - VMOVDQU 32(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y0 - VMOVDQU 64(CX), Y6 - VMOVDQU 96(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y1 - VMOVDQU 128(CX), Y6 - VMOVDQU 160(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y2 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y3 - VMOVDQU 256(CX), Y6 - VMOVDQU 288(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y4 - - // Load and process 32 bytes from input 1 to 5 outputs - VMOVDQU (SI), Y8 - ADDQ $0x20, SI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 320(CX), Y6 - VMOVDQU 352(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 384(CX), Y6 - VMOVDQU 416(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 448(CX), Y6 - VMOVDQU 480(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 512(CX), Y6 - VMOVDQU 544(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 576(CX), Y6 - VMOVDQU 608(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 2 to 5 outputs - VMOVDQU (DI), Y8 - ADDQ $0x20, DI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 640(CX), Y6 - VMOVDQU 672(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 704(CX), Y6 - VMOVDQU 736(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 768(CX), Y6 - VMOVDQU 800(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 832(CX), Y6 - VMOVDQU 864(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 896(CX), Y6 - VMOVDQU 928(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 3 to 5 outputs - VMOVDQU (R8), Y8 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 960(CX), Y6 - VMOVDQU 992(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1024(CX), Y6 - VMOVDQU 1056(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1088(CX), Y6 - VMOVDQU 1120(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1152(CX), Y6 - VMOVDQU 1184(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1216(CX), Y6 - VMOVDQU 1248(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 4 to 5 outputs - VMOVDQU (R9), Y8 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1280(CX), Y6 - VMOVDQU 1312(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1344(CX), Y6 - VMOVDQU 1376(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1408(CX), Y6 - VMOVDQU 1440(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1472(CX), Y6 - VMOVDQU 1504(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1536(CX), Y6 - VMOVDQU 1568(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 5 to 5 outputs - VMOVDQU (DX), Y8 - ADDQ $0x20, DX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1600(CX), Y6 - VMOVDQU 1632(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1664(CX), Y6 - VMOVDQU 1696(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1728(CX), Y6 - VMOVDQU 1760(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1792(CX), Y6 - VMOVDQU 1824(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1856(CX), Y6 - VMOVDQU 1888(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Store 5 outputs - VMOVDQU Y0, (R11) - ADDQ $0x20, R11 - VMOVDQU Y1, (R12) - ADDQ $0x20, R12 - VMOVDQU Y2, (R13) - ADDQ $0x20, R13 - VMOVDQU Y3, (R14) - ADDQ $0x20, R14 - VMOVDQU Y4, (R10) - ADDQ $0x20, R10 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_6x5_loop - VZEROUPPER - -mulAvxTwo_6x5_end: - RET - -// func mulAvxTwo_6x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x5Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 70 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_6x5Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), DX - MOVQ out_base+48(FP), R10 - MOVQ (R10), R11 - MOVQ 24(R10), R12 - MOVQ 48(R10), R13 - MOVQ 72(R10), R14 - MOVQ 96(R10), R10 - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, R14 - ADDQ R15, R10 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X5 - VPBROADCASTB X5, Y5 - -mulAvxTwo_6x5Xor_loop: - // Load and process 32 bytes from input 0 to 5 outputs - VMOVDQU (BX), Y8 - ADDQ $0x20, BX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU (R11), Y0 - VMOVDQU (CX), Y6 - VMOVDQU 32(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU (R12), Y1 - VMOVDQU 64(CX), Y6 - VMOVDQU 96(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU (R13), Y2 - VMOVDQU 128(CX), Y6 - VMOVDQU 160(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU (R14), Y3 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU (R10), Y4 - VMOVDQU 256(CX), Y6 - VMOVDQU 288(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 1 to 5 outputs - VMOVDQU (SI), Y8 - ADDQ $0x20, SI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 320(CX), Y6 - VMOVDQU 352(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 384(CX), Y6 - VMOVDQU 416(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 448(CX), Y6 - VMOVDQU 480(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 512(CX), Y6 - VMOVDQU 544(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 576(CX), Y6 - VMOVDQU 608(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 2 to 5 outputs - VMOVDQU (DI), Y8 - ADDQ $0x20, DI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 640(CX), Y6 - VMOVDQU 672(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 704(CX), Y6 - VMOVDQU 736(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 768(CX), Y6 - VMOVDQU 800(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 832(CX), Y6 - VMOVDQU 864(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 896(CX), Y6 - VMOVDQU 928(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 3 to 5 outputs - VMOVDQU (R8), Y8 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 960(CX), Y6 - VMOVDQU 992(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1024(CX), Y6 - VMOVDQU 1056(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1088(CX), Y6 - VMOVDQU 1120(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1152(CX), Y6 - VMOVDQU 1184(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1216(CX), Y6 - VMOVDQU 1248(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 4 to 5 outputs - VMOVDQU (R9), Y8 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1280(CX), Y6 - VMOVDQU 1312(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1344(CX), Y6 - VMOVDQU 1376(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1408(CX), Y6 - VMOVDQU 1440(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1472(CX), Y6 - VMOVDQU 1504(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1536(CX), Y6 - VMOVDQU 1568(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 5 to 5 outputs - VMOVDQU (DX), Y8 - ADDQ $0x20, DX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1600(CX), Y6 - VMOVDQU 1632(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1664(CX), Y6 - VMOVDQU 1696(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1728(CX), Y6 - VMOVDQU 1760(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1792(CX), Y6 - VMOVDQU 1824(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1856(CX), Y6 - VMOVDQU 1888(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Store 5 outputs - VMOVDQU Y0, (R11) - ADDQ $0x20, R11 - VMOVDQU Y1, (R12) - ADDQ $0x20, R12 - VMOVDQU Y2, (R13) - ADDQ $0x20, R13 - VMOVDQU Y3, (R14) - ADDQ $0x20, R14 - VMOVDQU Y4, (R10) - ADDQ $0x20, R10 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_6x5Xor_loop - VZEROUPPER - -mulAvxTwo_6x5Xor_end: - RET - -// func mulAvxTwo_6x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x6(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 83 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_6x6_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), DX - MOVQ out_base+48(FP), R10 - MOVQ (R10), R11 - MOVQ 24(R10), R12 - MOVQ 48(R10), R13 - MOVQ 72(R10), R14 - MOVQ 96(R10), R15 - MOVQ 120(R10), R10 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R10 - - // Add start offset to input - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, DX - MOVQ $0x0000000f, BP - MOVQ BP, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_6x6_loop: - // Load and process 32 bytes from input 0 to 6 outputs - VMOVDQU (BX), Y9 - ADDQ $0x20, BX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y0 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y1 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y2 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y3 - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y4 - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y5 - - // Load and process 32 bytes from input 1 to 6 outputs - VMOVDQU (SI), Y9 - ADDQ $0x20, SI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 2 to 6 outputs - VMOVDQU (DI), Y9 - ADDQ $0x20, DI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 3 to 6 outputs - VMOVDQU (R8), Y9 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1152(CX), Y7 - VMOVDQU 1184(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1216(CX), Y7 - VMOVDQU 1248(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1280(CX), Y7 - VMOVDQU 1312(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1344(CX), Y7 - VMOVDQU 1376(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1408(CX), Y7 - VMOVDQU 1440(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1472(CX), Y7 - VMOVDQU 1504(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 4 to 6 outputs - VMOVDQU (R9), Y9 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1536(CX), Y7 - VMOVDQU 1568(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1600(CX), Y7 - VMOVDQU 1632(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1664(CX), Y7 - VMOVDQU 1696(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1728(CX), Y7 - VMOVDQU 1760(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1792(CX), Y7 - VMOVDQU 1824(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1856(CX), Y7 - VMOVDQU 1888(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 5 to 6 outputs - VMOVDQU (DX), Y9 - ADDQ $0x20, DX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1920(CX), Y7 - VMOVDQU 1952(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1984(CX), Y7 - VMOVDQU 2016(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2048(CX), Y7 - VMOVDQU 2080(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2112(CX), Y7 - VMOVDQU 2144(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2176(CX), Y7 - VMOVDQU 2208(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 2240(CX), Y7 - VMOVDQU 2272(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Store 6 outputs - VMOVDQU Y0, (R11) - ADDQ $0x20, R11 - VMOVDQU Y1, (R12) - ADDQ $0x20, R12 - VMOVDQU Y2, (R13) - ADDQ $0x20, R13 - VMOVDQU Y3, (R14) - ADDQ $0x20, R14 - VMOVDQU Y4, (R15) - ADDQ $0x20, R15 - VMOVDQU Y5, (R10) - ADDQ $0x20, R10 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_6x6_loop - VZEROUPPER - -mulAvxTwo_6x6_end: - RET - -// func mulAvxTwo_6x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x6Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 83 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_6x6Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), DX - MOVQ out_base+48(FP), R10 - MOVQ (R10), R11 - MOVQ 24(R10), R12 - MOVQ 48(R10), R13 - MOVQ 72(R10), R14 - MOVQ 96(R10), R15 - MOVQ 120(R10), R10 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R10 - - // Add start offset to input - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, DX - MOVQ $0x0000000f, BP - MOVQ BP, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_6x6Xor_loop: - // Load and process 32 bytes from input 0 to 6 outputs - VMOVDQU (BX), Y9 - ADDQ $0x20, BX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU (R11), Y0 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU (R12), Y1 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU (R13), Y2 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU (R14), Y3 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU (R15), Y4 - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU (R10), Y5 - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 1 to 6 outputs - VMOVDQU (SI), Y9 - ADDQ $0x20, SI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 2 to 6 outputs - VMOVDQU (DI), Y9 - ADDQ $0x20, DI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 3 to 6 outputs - VMOVDQU (R8), Y9 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1152(CX), Y7 - VMOVDQU 1184(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1216(CX), Y7 - VMOVDQU 1248(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1280(CX), Y7 - VMOVDQU 1312(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1344(CX), Y7 - VMOVDQU 1376(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1408(CX), Y7 - VMOVDQU 1440(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1472(CX), Y7 - VMOVDQU 1504(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 4 to 6 outputs - VMOVDQU (R9), Y9 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1536(CX), Y7 - VMOVDQU 1568(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1600(CX), Y7 - VMOVDQU 1632(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1664(CX), Y7 - VMOVDQU 1696(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1728(CX), Y7 - VMOVDQU 1760(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1792(CX), Y7 - VMOVDQU 1824(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1856(CX), Y7 - VMOVDQU 1888(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 5 to 6 outputs - VMOVDQU (DX), Y9 - ADDQ $0x20, DX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1920(CX), Y7 - VMOVDQU 1952(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1984(CX), Y7 - VMOVDQU 2016(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2048(CX), Y7 - VMOVDQU 2080(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2112(CX), Y7 - VMOVDQU 2144(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2176(CX), Y7 - VMOVDQU 2208(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 2240(CX), Y7 - VMOVDQU 2272(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Store 6 outputs - VMOVDQU Y0, (R11) - ADDQ $0x20, R11 - VMOVDQU Y1, (R12) - ADDQ $0x20, R12 - VMOVDQU Y2, (R13) - ADDQ $0x20, R13 - VMOVDQU Y3, (R14) - ADDQ $0x20, R14 - VMOVDQU Y4, (R15) - ADDQ $0x20, R15 - VMOVDQU Y5, (R10) - ADDQ $0x20, R10 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_6x6Xor_loop - VZEROUPPER - -mulAvxTwo_6x6Xor_end: - RET - -// func mulAvxTwo_6x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x7(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 96 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_6x7_end - MOVQ in_base+24(FP), AX - MOVQ (AX), DX - MOVQ 24(AX), BX - MOVQ 48(AX), SI - MOVQ 72(AX), DI - MOVQ 96(AX), R8 - MOVQ 120(AX), AX - MOVQ out_base+48(FP), R9 - MOVQ (R9), R10 - MOVQ 24(R9), R11 - MOVQ 48(R9), R12 - MOVQ 72(R9), R13 - MOVQ 96(R9), R14 - MOVQ 120(R9), R15 - MOVQ 144(R9), R9 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R9 - - // Add start offset to input - ADDQ BP, DX - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, AX - MOVQ $0x0000000f, BP - MOVQ BP, X7 - VPBROADCASTB X7, Y7 - MOVQ n+80(FP), BP - SHRQ $0x05, BP - -mulAvxTwo_6x7_loop: - // Load and process 32 bytes from input 0 to 7 outputs - VMOVDQU (DX), Y10 - ADDQ $0x20, DX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU (CX), Y8 - VMOVDQU 32(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y0 - VMOVDQU 64(CX), Y8 - VMOVDQU 96(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y1 - VMOVDQU 128(CX), Y8 - VMOVDQU 160(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y2 - VMOVDQU 192(CX), Y8 - VMOVDQU 224(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y3 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y4 - VMOVDQU 320(CX), Y8 - VMOVDQU 352(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y5 - VMOVDQU 384(CX), Y8 - VMOVDQU 416(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y6 - - // Load and process 32 bytes from input 1 to 7 outputs - VMOVDQU (BX), Y10 - ADDQ $0x20, BX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 448(CX), Y8 - VMOVDQU 480(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 512(CX), Y8 - VMOVDQU 544(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 576(CX), Y8 - VMOVDQU 608(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 640(CX), Y8 - VMOVDQU 672(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 704(CX), Y8 - VMOVDQU 736(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 768(CX), Y8 - VMOVDQU 800(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 832(CX), Y8 - VMOVDQU 864(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 2 to 7 outputs - VMOVDQU (SI), Y10 - ADDQ $0x20, SI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 896(CX), Y8 - VMOVDQU 928(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 960(CX), Y8 - VMOVDQU 992(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1024(CX), Y8 - VMOVDQU 1056(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1088(CX), Y8 - VMOVDQU 1120(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1152(CX), Y8 - VMOVDQU 1184(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1216(CX), Y8 - VMOVDQU 1248(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1280(CX), Y8 - VMOVDQU 1312(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 3 to 7 outputs - VMOVDQU (DI), Y10 - ADDQ $0x20, DI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1344(CX), Y8 - VMOVDQU 1376(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1408(CX), Y8 - VMOVDQU 1440(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1472(CX), Y8 - VMOVDQU 1504(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1536(CX), Y8 - VMOVDQU 1568(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1600(CX), Y8 - VMOVDQU 1632(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1664(CX), Y8 - VMOVDQU 1696(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1728(CX), Y8 - VMOVDQU 1760(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 4 to 7 outputs - VMOVDQU (R8), Y10 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1792(CX), Y8 - VMOVDQU 1824(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1856(CX), Y8 - VMOVDQU 1888(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1920(CX), Y8 - VMOVDQU 1952(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1984(CX), Y8 - VMOVDQU 2016(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2048(CX), Y8 - VMOVDQU 2080(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 2112(CX), Y8 - VMOVDQU 2144(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 2176(CX), Y8 - VMOVDQU 2208(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 5 to 7 outputs - VMOVDQU (AX), Y10 - ADDQ $0x20, AX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 2240(CX), Y8 - VMOVDQU 2272(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 2304(CX), Y8 - VMOVDQU 2336(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 2368(CX), Y8 - VMOVDQU 2400(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 2432(CX), Y8 - VMOVDQU 2464(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2496(CX), Y8 - VMOVDQU 2528(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 2560(CX), Y8 - VMOVDQU 2592(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 2624(CX), Y8 - VMOVDQU 2656(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Store 7 outputs - VMOVDQU Y0, (R10) - ADDQ $0x20, R10 - VMOVDQU Y1, (R11) - ADDQ $0x20, R11 - VMOVDQU Y2, (R12) - ADDQ $0x20, R12 - VMOVDQU Y3, (R13) - ADDQ $0x20, R13 - VMOVDQU Y4, (R14) - ADDQ $0x20, R14 - VMOVDQU Y5, (R15) - ADDQ $0x20, R15 - VMOVDQU Y6, (R9) - ADDQ $0x20, R9 - - // Prepare for next loop - DECQ BP - JNZ mulAvxTwo_6x7_loop - VZEROUPPER - -mulAvxTwo_6x7_end: - RET - -// func mulAvxTwo_6x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x7Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 96 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_6x7Xor_end - MOVQ in_base+24(FP), AX - MOVQ (AX), DX - MOVQ 24(AX), BX - MOVQ 48(AX), SI - MOVQ 72(AX), DI - MOVQ 96(AX), R8 - MOVQ 120(AX), AX - MOVQ out_base+48(FP), R9 - MOVQ (R9), R10 - MOVQ 24(R9), R11 - MOVQ 48(R9), R12 - MOVQ 72(R9), R13 - MOVQ 96(R9), R14 - MOVQ 120(R9), R15 - MOVQ 144(R9), R9 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R9 - - // Add start offset to input - ADDQ BP, DX - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, AX - MOVQ $0x0000000f, BP - MOVQ BP, X7 - VPBROADCASTB X7, Y7 - MOVQ n+80(FP), BP - SHRQ $0x05, BP - -mulAvxTwo_6x7Xor_loop: - // Load and process 32 bytes from input 0 to 7 outputs - VMOVDQU (DX), Y10 - ADDQ $0x20, DX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU (R10), Y0 - VMOVDQU (CX), Y8 - VMOVDQU 32(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU (R11), Y1 - VMOVDQU 64(CX), Y8 - VMOVDQU 96(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU (R12), Y2 - VMOVDQU 128(CX), Y8 - VMOVDQU 160(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU (R13), Y3 - VMOVDQU 192(CX), Y8 - VMOVDQU 224(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU (R14), Y4 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU (R15), Y5 - VMOVDQU 320(CX), Y8 - VMOVDQU 352(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU (R9), Y6 - VMOVDQU 384(CX), Y8 - VMOVDQU 416(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 1 to 7 outputs - VMOVDQU (BX), Y10 - ADDQ $0x20, BX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 448(CX), Y8 - VMOVDQU 480(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 512(CX), Y8 - VMOVDQU 544(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 576(CX), Y8 - VMOVDQU 608(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 640(CX), Y8 - VMOVDQU 672(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 704(CX), Y8 - VMOVDQU 736(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 768(CX), Y8 - VMOVDQU 800(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 832(CX), Y8 - VMOVDQU 864(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 2 to 7 outputs - VMOVDQU (SI), Y10 - ADDQ $0x20, SI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 896(CX), Y8 - VMOVDQU 928(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 960(CX), Y8 - VMOVDQU 992(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1024(CX), Y8 - VMOVDQU 1056(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1088(CX), Y8 - VMOVDQU 1120(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1152(CX), Y8 - VMOVDQU 1184(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1216(CX), Y8 - VMOVDQU 1248(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1280(CX), Y8 - VMOVDQU 1312(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 3 to 7 outputs - VMOVDQU (DI), Y10 - ADDQ $0x20, DI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1344(CX), Y8 - VMOVDQU 1376(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1408(CX), Y8 - VMOVDQU 1440(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1472(CX), Y8 - VMOVDQU 1504(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1536(CX), Y8 - VMOVDQU 1568(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1600(CX), Y8 - VMOVDQU 1632(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1664(CX), Y8 - VMOVDQU 1696(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1728(CX), Y8 - VMOVDQU 1760(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 4 to 7 outputs - VMOVDQU (R8), Y10 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1792(CX), Y8 - VMOVDQU 1824(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1856(CX), Y8 - VMOVDQU 1888(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1920(CX), Y8 - VMOVDQU 1952(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1984(CX), Y8 - VMOVDQU 2016(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2048(CX), Y8 - VMOVDQU 2080(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 2112(CX), Y8 - VMOVDQU 2144(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 2176(CX), Y8 - VMOVDQU 2208(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 5 to 7 outputs - VMOVDQU (AX), Y10 - ADDQ $0x20, AX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 2240(CX), Y8 - VMOVDQU 2272(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 2304(CX), Y8 - VMOVDQU 2336(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 2368(CX), Y8 - VMOVDQU 2400(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 2432(CX), Y8 - VMOVDQU 2464(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2496(CX), Y8 - VMOVDQU 2528(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 2560(CX), Y8 - VMOVDQU 2592(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 2624(CX), Y8 - VMOVDQU 2656(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Store 7 outputs - VMOVDQU Y0, (R10) - ADDQ $0x20, R10 - VMOVDQU Y1, (R11) - ADDQ $0x20, R11 - VMOVDQU Y2, (R12) - ADDQ $0x20, R12 - VMOVDQU Y3, (R13) - ADDQ $0x20, R13 - VMOVDQU Y4, (R14) - ADDQ $0x20, R14 - VMOVDQU Y5, (R15) - ADDQ $0x20, R15 - VMOVDQU Y6, (R9) - ADDQ $0x20, R9 - - // Prepare for next loop - DECQ BP - JNZ mulAvxTwo_6x7Xor_loop - VZEROUPPER - -mulAvxTwo_6x7Xor_end: - RET - -// func mulAvxTwo_6x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x8(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 109 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_6x8_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), DX - MOVQ out_base+48(FP), R10 - MOVQ start+72(FP), R11 - - // Add start offset to input - ADDQ R11, BX - ADDQ R11, SI - ADDQ R11, DI - ADDQ R11, R8 - ADDQ R11, R9 - ADDQ R11, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X8 - VPBROADCASTB X8, Y8 - -mulAvxTwo_6x8_loop: - // Load and process 32 bytes from input 0 to 8 outputs - VMOVDQU (BX), Y11 - ADDQ $0x20, BX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU (CX), Y9 - VMOVDQU 32(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y0 - VMOVDQU 64(CX), Y9 - VMOVDQU 96(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y1 - VMOVDQU 128(CX), Y9 - VMOVDQU 160(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y2 - VMOVDQU 192(CX), Y9 - VMOVDQU 224(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y3 - VMOVDQU 256(CX), Y9 - VMOVDQU 288(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y4 - VMOVDQU 320(CX), Y9 - VMOVDQU 352(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y5 - VMOVDQU 384(CX), Y9 - VMOVDQU 416(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y6 - VMOVDQU 448(CX), Y9 - VMOVDQU 480(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y7 - - // Load and process 32 bytes from input 1 to 8 outputs - VMOVDQU (SI), Y11 - ADDQ $0x20, SI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 512(CX), Y9 - VMOVDQU 544(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 576(CX), Y9 - VMOVDQU 608(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y9 - VMOVDQU 672(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 704(CX), Y9 - VMOVDQU 736(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 768(CX), Y9 - VMOVDQU 800(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 832(CX), Y9 - VMOVDQU 864(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 896(CX), Y9 - VMOVDQU 928(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 960(CX), Y9 - VMOVDQU 992(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 2 to 8 outputs - VMOVDQU (DI), Y11 - ADDQ $0x20, DI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1024(CX), Y9 - VMOVDQU 1056(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1088(CX), Y9 - VMOVDQU 1120(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1152(CX), Y9 - VMOVDQU 1184(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1216(CX), Y9 - VMOVDQU 1248(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y9 - VMOVDQU 1312(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1344(CX), Y9 - VMOVDQU 1376(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1408(CX), Y9 - VMOVDQU 1440(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1472(CX), Y9 - VMOVDQU 1504(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 3 to 8 outputs - VMOVDQU (R8), Y11 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1536(CX), Y9 - VMOVDQU 1568(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1600(CX), Y9 - VMOVDQU 1632(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1664(CX), Y9 - VMOVDQU 1696(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1728(CX), Y9 - VMOVDQU 1760(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1792(CX), Y9 - VMOVDQU 1824(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1856(CX), Y9 - VMOVDQU 1888(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1920(CX), Y9 - VMOVDQU 1952(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1984(CX), Y9 - VMOVDQU 2016(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 4 to 8 outputs - VMOVDQU (R9), Y11 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 2048(CX), Y9 - VMOVDQU 2080(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 2112(CX), Y9 - VMOVDQU 2144(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 2176(CX), Y9 - VMOVDQU 2208(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 2240(CX), Y9 - VMOVDQU 2272(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 2304(CX), Y9 - VMOVDQU 2336(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 2368(CX), Y9 - VMOVDQU 2400(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 2432(CX), Y9 - VMOVDQU 2464(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 2496(CX), Y9 - VMOVDQU 2528(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 5 to 8 outputs - VMOVDQU (DX), Y11 - ADDQ $0x20, DX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 2560(CX), Y9 - VMOVDQU 2592(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 2624(CX), Y9 - VMOVDQU 2656(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 2688(CX), Y9 - VMOVDQU 2720(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 2752(CX), Y9 - VMOVDQU 2784(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 2816(CX), Y9 - VMOVDQU 2848(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 2880(CX), Y9 - VMOVDQU 2912(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 2944(CX), Y9 - VMOVDQU 2976(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 3008(CX), Y9 - VMOVDQU 3040(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Store 8 outputs - MOVQ (R10), R12 - VMOVDQU Y0, (R12)(R11*1) - MOVQ 24(R10), R12 - VMOVDQU Y1, (R12)(R11*1) - MOVQ 48(R10), R12 - VMOVDQU Y2, (R12)(R11*1) - MOVQ 72(R10), R12 - VMOVDQU Y3, (R12)(R11*1) - MOVQ 96(R10), R12 - VMOVDQU Y4, (R12)(R11*1) - MOVQ 120(R10), R12 - VMOVDQU Y5, (R12)(R11*1) - MOVQ 144(R10), R12 - VMOVDQU Y6, (R12)(R11*1) - MOVQ 168(R10), R12 - VMOVDQU Y7, (R12)(R11*1) - - // Prepare for next loop - ADDQ $0x20, R11 - DECQ AX - JNZ mulAvxTwo_6x8_loop - VZEROUPPER - -mulAvxTwo_6x8_end: - RET - -// func mulAvxTwo_6x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x8Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 109 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_6x8Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), DX - MOVQ out_base+48(FP), R10 - MOVQ start+72(FP), R11 - - // Add start offset to input - ADDQ R11, BX - ADDQ R11, SI - ADDQ R11, DI - ADDQ R11, R8 - ADDQ R11, R9 - ADDQ R11, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X8 - VPBROADCASTB X8, Y8 - -mulAvxTwo_6x8Xor_loop: - // Load and process 32 bytes from input 0 to 8 outputs - VMOVDQU (BX), Y11 - ADDQ $0x20, BX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - MOVQ (R10), R12 - VMOVDQU (R12)(R11*1), Y0 - VMOVDQU (CX), Y9 - VMOVDQU 32(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - MOVQ 24(R10), R12 - VMOVDQU (R12)(R11*1), Y1 - VMOVDQU 64(CX), Y9 - VMOVDQU 96(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - MOVQ 48(R10), R12 - VMOVDQU (R12)(R11*1), Y2 - VMOVDQU 128(CX), Y9 - VMOVDQU 160(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - MOVQ 72(R10), R12 - VMOVDQU (R12)(R11*1), Y3 - VMOVDQU 192(CX), Y9 - VMOVDQU 224(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - MOVQ 96(R10), R12 - VMOVDQU (R12)(R11*1), Y4 - VMOVDQU 256(CX), Y9 - VMOVDQU 288(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - MOVQ 120(R10), R12 - VMOVDQU (R12)(R11*1), Y5 - VMOVDQU 320(CX), Y9 - VMOVDQU 352(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - MOVQ 144(R10), R12 - VMOVDQU (R12)(R11*1), Y6 - VMOVDQU 384(CX), Y9 - VMOVDQU 416(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - MOVQ 168(R10), R12 - VMOVDQU (R12)(R11*1), Y7 - VMOVDQU 448(CX), Y9 - VMOVDQU 480(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 1 to 8 outputs - VMOVDQU (SI), Y11 - ADDQ $0x20, SI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 512(CX), Y9 - VMOVDQU 544(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 576(CX), Y9 - VMOVDQU 608(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y9 - VMOVDQU 672(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 704(CX), Y9 - VMOVDQU 736(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 768(CX), Y9 - VMOVDQU 800(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 832(CX), Y9 - VMOVDQU 864(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 896(CX), Y9 - VMOVDQU 928(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 960(CX), Y9 - VMOVDQU 992(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 2 to 8 outputs - VMOVDQU (DI), Y11 - ADDQ $0x20, DI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1024(CX), Y9 - VMOVDQU 1056(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1088(CX), Y9 - VMOVDQU 1120(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1152(CX), Y9 - VMOVDQU 1184(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1216(CX), Y9 - VMOVDQU 1248(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y9 - VMOVDQU 1312(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1344(CX), Y9 - VMOVDQU 1376(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1408(CX), Y9 - VMOVDQU 1440(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1472(CX), Y9 - VMOVDQU 1504(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 3 to 8 outputs - VMOVDQU (R8), Y11 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1536(CX), Y9 - VMOVDQU 1568(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1600(CX), Y9 - VMOVDQU 1632(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1664(CX), Y9 - VMOVDQU 1696(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1728(CX), Y9 - VMOVDQU 1760(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1792(CX), Y9 - VMOVDQU 1824(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1856(CX), Y9 - VMOVDQU 1888(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1920(CX), Y9 - VMOVDQU 1952(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1984(CX), Y9 - VMOVDQU 2016(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 4 to 8 outputs - VMOVDQU (R9), Y11 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 2048(CX), Y9 - VMOVDQU 2080(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 2112(CX), Y9 - VMOVDQU 2144(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 2176(CX), Y9 - VMOVDQU 2208(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 2240(CX), Y9 - VMOVDQU 2272(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 2304(CX), Y9 - VMOVDQU 2336(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 2368(CX), Y9 - VMOVDQU 2400(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 2432(CX), Y9 - VMOVDQU 2464(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 2496(CX), Y9 - VMOVDQU 2528(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 5 to 8 outputs - VMOVDQU (DX), Y11 - ADDQ $0x20, DX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 2560(CX), Y9 - VMOVDQU 2592(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 2624(CX), Y9 - VMOVDQU 2656(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 2688(CX), Y9 - VMOVDQU 2720(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 2752(CX), Y9 - VMOVDQU 2784(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 2816(CX), Y9 - VMOVDQU 2848(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 2880(CX), Y9 - VMOVDQU 2912(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 2944(CX), Y9 - VMOVDQU 2976(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 3008(CX), Y9 - VMOVDQU 3040(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Store 8 outputs - MOVQ (R10), R12 - VMOVDQU Y0, (R12)(R11*1) - MOVQ 24(R10), R12 - VMOVDQU Y1, (R12)(R11*1) - MOVQ 48(R10), R12 - VMOVDQU Y2, (R12)(R11*1) - MOVQ 72(R10), R12 - VMOVDQU Y3, (R12)(R11*1) - MOVQ 96(R10), R12 - VMOVDQU Y4, (R12)(R11*1) - MOVQ 120(R10), R12 - VMOVDQU Y5, (R12)(R11*1) - MOVQ 144(R10), R12 - VMOVDQU Y6, (R12)(R11*1) - MOVQ 168(R10), R12 - VMOVDQU Y7, (R12)(R11*1) - - // Prepare for next loop - ADDQ $0x20, R11 - DECQ AX - JNZ mulAvxTwo_6x8Xor_loop - VZEROUPPER - -mulAvxTwo_6x8Xor_end: - RET - -// func mulAvxTwo_6x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x9(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 122 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_6x9_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), DX - MOVQ out_base+48(FP), R10 - MOVQ start+72(FP), R11 - - // Add start offset to input - ADDQ R11, BX - ADDQ R11, SI - ADDQ R11, DI - ADDQ R11, R8 - ADDQ R11, R9 - ADDQ R11, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X9 - VPBROADCASTB X9, Y9 - -mulAvxTwo_6x9_loop: - // Load and process 32 bytes from input 0 to 9 outputs - VMOVDQU (BX), Y12 - ADDQ $0x20, BX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU (CX), Y10 - VMOVDQU 32(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y0 - VMOVDQU 64(CX), Y10 - VMOVDQU 96(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y1 - VMOVDQU 128(CX), Y10 - VMOVDQU 160(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y2 - VMOVDQU 192(CX), Y10 - VMOVDQU 224(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y3 - VMOVDQU 256(CX), Y10 - VMOVDQU 288(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y4 - VMOVDQU 320(CX), Y10 - VMOVDQU 352(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y5 - VMOVDQU 384(CX), Y10 - VMOVDQU 416(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y6 - VMOVDQU 448(CX), Y10 - VMOVDQU 480(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y7 - VMOVDQU 512(CX), Y10 - VMOVDQU 544(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y8 - - // Load and process 32 bytes from input 1 to 9 outputs - VMOVDQU (SI), Y12 - ADDQ $0x20, SI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 576(CX), Y10 - VMOVDQU 608(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 640(CX), Y10 - VMOVDQU 672(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 704(CX), Y10 - VMOVDQU 736(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 768(CX), Y10 - VMOVDQU 800(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 832(CX), Y10 - VMOVDQU 864(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 896(CX), Y10 - VMOVDQU 928(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 960(CX), Y10 - VMOVDQU 992(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1024(CX), Y10 - VMOVDQU 1056(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1088(CX), Y10 - VMOVDQU 1120(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 2 to 9 outputs - VMOVDQU (DI), Y12 - ADDQ $0x20, DI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1152(CX), Y10 - VMOVDQU 1184(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1216(CX), Y10 - VMOVDQU 1248(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1280(CX), Y10 - VMOVDQU 1312(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1344(CX), Y10 - VMOVDQU 1376(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1408(CX), Y10 - VMOVDQU 1440(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 1472(CX), Y10 - VMOVDQU 1504(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 1536(CX), Y10 - VMOVDQU 1568(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1600(CX), Y10 - VMOVDQU 1632(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1664(CX), Y10 - VMOVDQU 1696(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 3 to 9 outputs - VMOVDQU (R8), Y12 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1728(CX), Y10 - VMOVDQU 1760(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1792(CX), Y10 - VMOVDQU 1824(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1856(CX), Y10 - VMOVDQU 1888(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1920(CX), Y10 - VMOVDQU 1952(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1984(CX), Y10 - VMOVDQU 2016(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2048(CX), Y10 - VMOVDQU 2080(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2112(CX), Y10 - VMOVDQU 2144(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2176(CX), Y10 - VMOVDQU 2208(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2240(CX), Y10 - VMOVDQU 2272(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 4 to 9 outputs - VMOVDQU (R9), Y12 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 2304(CX), Y10 - VMOVDQU 2336(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 2368(CX), Y10 - VMOVDQU 2400(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 2432(CX), Y10 - VMOVDQU 2464(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 2496(CX), Y10 - VMOVDQU 2528(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 2560(CX), Y10 - VMOVDQU 2592(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2624(CX), Y10 - VMOVDQU 2656(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2688(CX), Y10 - VMOVDQU 2720(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2752(CX), Y10 - VMOVDQU 2784(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2816(CX), Y10 - VMOVDQU 2848(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 5 to 9 outputs - VMOVDQU (DX), Y12 - ADDQ $0x20, DX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 2880(CX), Y10 - VMOVDQU 2912(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 2944(CX), Y10 - VMOVDQU 2976(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 3008(CX), Y10 - VMOVDQU 3040(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 3072(CX), Y10 - VMOVDQU 3104(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 3136(CX), Y10 - VMOVDQU 3168(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 3200(CX), Y10 - VMOVDQU 3232(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 3264(CX), Y10 - VMOVDQU 3296(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 3328(CX), Y10 - VMOVDQU 3360(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 3392(CX), Y10 - VMOVDQU 3424(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Store 9 outputs - MOVQ (R10), R12 - VMOVDQU Y0, (R12)(R11*1) - MOVQ 24(R10), R12 - VMOVDQU Y1, (R12)(R11*1) - MOVQ 48(R10), R12 - VMOVDQU Y2, (R12)(R11*1) - MOVQ 72(R10), R12 - VMOVDQU Y3, (R12)(R11*1) - MOVQ 96(R10), R12 - VMOVDQU Y4, (R12)(R11*1) - MOVQ 120(R10), R12 - VMOVDQU Y5, (R12)(R11*1) - MOVQ 144(R10), R12 - VMOVDQU Y6, (R12)(R11*1) - MOVQ 168(R10), R12 - VMOVDQU Y7, (R12)(R11*1) - MOVQ 192(R10), R12 - VMOVDQU Y8, (R12)(R11*1) - - // Prepare for next loop - ADDQ $0x20, R11 - DECQ AX - JNZ mulAvxTwo_6x9_loop - VZEROUPPER - -mulAvxTwo_6x9_end: - RET - -// func mulAvxTwo_6x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x9Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 122 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_6x9Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), DX - MOVQ out_base+48(FP), R10 - MOVQ start+72(FP), R11 - - // Add start offset to input - ADDQ R11, BX - ADDQ R11, SI - ADDQ R11, DI - ADDQ R11, R8 - ADDQ R11, R9 - ADDQ R11, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X9 - VPBROADCASTB X9, Y9 - -mulAvxTwo_6x9Xor_loop: - // Load and process 32 bytes from input 0 to 9 outputs - VMOVDQU (BX), Y12 - ADDQ $0x20, BX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - MOVQ (R10), R12 - VMOVDQU (R12)(R11*1), Y0 - VMOVDQU (CX), Y10 - VMOVDQU 32(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - MOVQ 24(R10), R12 - VMOVDQU (R12)(R11*1), Y1 - VMOVDQU 64(CX), Y10 - VMOVDQU 96(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - MOVQ 48(R10), R12 - VMOVDQU (R12)(R11*1), Y2 - VMOVDQU 128(CX), Y10 - VMOVDQU 160(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - MOVQ 72(R10), R12 - VMOVDQU (R12)(R11*1), Y3 - VMOVDQU 192(CX), Y10 - VMOVDQU 224(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - MOVQ 96(R10), R12 - VMOVDQU (R12)(R11*1), Y4 - VMOVDQU 256(CX), Y10 - VMOVDQU 288(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - MOVQ 120(R10), R12 - VMOVDQU (R12)(R11*1), Y5 - VMOVDQU 320(CX), Y10 - VMOVDQU 352(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - MOVQ 144(R10), R12 - VMOVDQU (R12)(R11*1), Y6 - VMOVDQU 384(CX), Y10 - VMOVDQU 416(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - MOVQ 168(R10), R12 - VMOVDQU (R12)(R11*1), Y7 - VMOVDQU 448(CX), Y10 - VMOVDQU 480(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - MOVQ 192(R10), R12 - VMOVDQU (R12)(R11*1), Y8 - VMOVDQU 512(CX), Y10 - VMOVDQU 544(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 1 to 9 outputs - VMOVDQU (SI), Y12 - ADDQ $0x20, SI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 576(CX), Y10 - VMOVDQU 608(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 640(CX), Y10 - VMOVDQU 672(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 704(CX), Y10 - VMOVDQU 736(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 768(CX), Y10 - VMOVDQU 800(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 832(CX), Y10 - VMOVDQU 864(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 896(CX), Y10 - VMOVDQU 928(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 960(CX), Y10 - VMOVDQU 992(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1024(CX), Y10 - VMOVDQU 1056(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1088(CX), Y10 - VMOVDQU 1120(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 2 to 9 outputs - VMOVDQU (DI), Y12 - ADDQ $0x20, DI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1152(CX), Y10 - VMOVDQU 1184(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1216(CX), Y10 - VMOVDQU 1248(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1280(CX), Y10 - VMOVDQU 1312(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1344(CX), Y10 - VMOVDQU 1376(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1408(CX), Y10 - VMOVDQU 1440(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 1472(CX), Y10 - VMOVDQU 1504(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 1536(CX), Y10 - VMOVDQU 1568(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1600(CX), Y10 - VMOVDQU 1632(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1664(CX), Y10 - VMOVDQU 1696(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 3 to 9 outputs - VMOVDQU (R8), Y12 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1728(CX), Y10 - VMOVDQU 1760(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1792(CX), Y10 - VMOVDQU 1824(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1856(CX), Y10 - VMOVDQU 1888(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1920(CX), Y10 - VMOVDQU 1952(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1984(CX), Y10 - VMOVDQU 2016(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2048(CX), Y10 - VMOVDQU 2080(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2112(CX), Y10 - VMOVDQU 2144(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2176(CX), Y10 - VMOVDQU 2208(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2240(CX), Y10 - VMOVDQU 2272(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 4 to 9 outputs - VMOVDQU (R9), Y12 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 2304(CX), Y10 - VMOVDQU 2336(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 2368(CX), Y10 - VMOVDQU 2400(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 2432(CX), Y10 - VMOVDQU 2464(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 2496(CX), Y10 - VMOVDQU 2528(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 2560(CX), Y10 - VMOVDQU 2592(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2624(CX), Y10 - VMOVDQU 2656(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2688(CX), Y10 - VMOVDQU 2720(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2752(CX), Y10 - VMOVDQU 2784(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2816(CX), Y10 - VMOVDQU 2848(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 5 to 9 outputs - VMOVDQU (DX), Y12 - ADDQ $0x20, DX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 2880(CX), Y10 - VMOVDQU 2912(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 2944(CX), Y10 - VMOVDQU 2976(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 3008(CX), Y10 - VMOVDQU 3040(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 3072(CX), Y10 - VMOVDQU 3104(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 3136(CX), Y10 - VMOVDQU 3168(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 3200(CX), Y10 - VMOVDQU 3232(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 3264(CX), Y10 - VMOVDQU 3296(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 3328(CX), Y10 - VMOVDQU 3360(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 3392(CX), Y10 - VMOVDQU 3424(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Store 9 outputs - MOVQ (R10), R12 - VMOVDQU Y0, (R12)(R11*1) - MOVQ 24(R10), R12 - VMOVDQU Y1, (R12)(R11*1) - MOVQ 48(R10), R12 - VMOVDQU Y2, (R12)(R11*1) - MOVQ 72(R10), R12 - VMOVDQU Y3, (R12)(R11*1) - MOVQ 96(R10), R12 - VMOVDQU Y4, (R12)(R11*1) - MOVQ 120(R10), R12 - VMOVDQU Y5, (R12)(R11*1) - MOVQ 144(R10), R12 - VMOVDQU Y6, (R12)(R11*1) - MOVQ 168(R10), R12 - VMOVDQU Y7, (R12)(R11*1) - MOVQ 192(R10), R12 - VMOVDQU Y8, (R12)(R11*1) - - // Prepare for next loop - ADDQ $0x20, R11 - DECQ AX - JNZ mulAvxTwo_6x9Xor_loop - VZEROUPPER - -mulAvxTwo_6x9Xor_end: - RET - -// func mulAvxTwo_6x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x10(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 135 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_6x10_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), DX - MOVQ out_base+48(FP), R10 - MOVQ start+72(FP), R11 - - // Add start offset to input - ADDQ R11, BX - ADDQ R11, SI - ADDQ R11, DI - ADDQ R11, R8 - ADDQ R11, R9 - ADDQ R11, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X10 - VPBROADCASTB X10, Y10 - -mulAvxTwo_6x10_loop: - // Load and process 32 bytes from input 0 to 10 outputs - VMOVDQU (BX), Y13 - ADDQ $0x20, BX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU (CX), Y11 - VMOVDQU 32(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y0 - VMOVDQU 64(CX), Y11 - VMOVDQU 96(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y1 - VMOVDQU 128(CX), Y11 - VMOVDQU 160(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y2 - VMOVDQU 192(CX), Y11 - VMOVDQU 224(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y3 - VMOVDQU 256(CX), Y11 - VMOVDQU 288(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y4 - VMOVDQU 320(CX), Y11 - VMOVDQU 352(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y5 - VMOVDQU 384(CX), Y11 - VMOVDQU 416(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y6 - VMOVDQU 448(CX), Y11 - VMOVDQU 480(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y7 - VMOVDQU 512(CX), Y11 - VMOVDQU 544(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y8 - VMOVDQU 576(CX), Y11 - VMOVDQU 608(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y9 - - // Load and process 32 bytes from input 1 to 10 outputs - VMOVDQU (SI), Y13 - ADDQ $0x20, SI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 640(CX), Y11 - VMOVDQU 672(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 704(CX), Y11 - VMOVDQU 736(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 768(CX), Y11 - VMOVDQU 800(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 832(CX), Y11 - VMOVDQU 864(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 896(CX), Y11 - VMOVDQU 928(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 960(CX), Y11 - VMOVDQU 992(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1024(CX), Y11 - VMOVDQU 1056(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1088(CX), Y11 - VMOVDQU 1120(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1152(CX), Y11 - VMOVDQU 1184(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1216(CX), Y11 - VMOVDQU 1248(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 2 to 10 outputs - VMOVDQU (DI), Y13 - ADDQ $0x20, DI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1280(CX), Y11 - VMOVDQU 1312(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1344(CX), Y11 - VMOVDQU 1376(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 1408(CX), Y11 - VMOVDQU 1440(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 1472(CX), Y11 - VMOVDQU 1504(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 1536(CX), Y11 - VMOVDQU 1568(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 1600(CX), Y11 - VMOVDQU 1632(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1664(CX), Y11 - VMOVDQU 1696(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1728(CX), Y11 - VMOVDQU 1760(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1792(CX), Y11 - VMOVDQU 1824(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1856(CX), Y11 - VMOVDQU 1888(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 3 to 10 outputs - VMOVDQU (R8), Y13 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1920(CX), Y11 - VMOVDQU 1952(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1984(CX), Y11 - VMOVDQU 2016(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2048(CX), Y11 - VMOVDQU 2080(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2112(CX), Y11 - VMOVDQU 2144(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2176(CX), Y11 - VMOVDQU 2208(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2240(CX), Y11 - VMOVDQU 2272(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2304(CX), Y11 - VMOVDQU 2336(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 2368(CX), Y11 - VMOVDQU 2400(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 2432(CX), Y11 - VMOVDQU 2464(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 2496(CX), Y11 - VMOVDQU 2528(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 4 to 10 outputs - VMOVDQU (R9), Y13 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 2560(CX), Y11 - VMOVDQU 2592(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 2624(CX), Y11 - VMOVDQU 2656(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2688(CX), Y11 - VMOVDQU 2720(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2752(CX), Y11 - VMOVDQU 2784(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2816(CX), Y11 - VMOVDQU 2848(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2880(CX), Y11 - VMOVDQU 2912(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2944(CX), Y11 - VMOVDQU 2976(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 3008(CX), Y11 - VMOVDQU 3040(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 3072(CX), Y11 - VMOVDQU 3104(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 3136(CX), Y11 - VMOVDQU 3168(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 5 to 10 outputs - VMOVDQU (DX), Y13 - ADDQ $0x20, DX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 3200(CX), Y11 - VMOVDQU 3232(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 3264(CX), Y11 - VMOVDQU 3296(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 3328(CX), Y11 - VMOVDQU 3360(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 3392(CX), Y11 - VMOVDQU 3424(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 3456(CX), Y11 - VMOVDQU 3488(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 3520(CX), Y11 - VMOVDQU 3552(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 3584(CX), Y11 - VMOVDQU 3616(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 3648(CX), Y11 - VMOVDQU 3680(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 3712(CX), Y11 - VMOVDQU 3744(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 3776(CX), Y11 - VMOVDQU 3808(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Store 10 outputs - MOVQ (R10), R12 - VMOVDQU Y0, (R12)(R11*1) - MOVQ 24(R10), R12 - VMOVDQU Y1, (R12)(R11*1) - MOVQ 48(R10), R12 - VMOVDQU Y2, (R12)(R11*1) - MOVQ 72(R10), R12 - VMOVDQU Y3, (R12)(R11*1) - MOVQ 96(R10), R12 - VMOVDQU Y4, (R12)(R11*1) - MOVQ 120(R10), R12 - VMOVDQU Y5, (R12)(R11*1) - MOVQ 144(R10), R12 - VMOVDQU Y6, (R12)(R11*1) - MOVQ 168(R10), R12 - VMOVDQU Y7, (R12)(R11*1) - MOVQ 192(R10), R12 - VMOVDQU Y8, (R12)(R11*1) - MOVQ 216(R10), R12 - VMOVDQU Y9, (R12)(R11*1) - - // Prepare for next loop - ADDQ $0x20, R11 - DECQ AX - JNZ mulAvxTwo_6x10_loop - VZEROUPPER - -mulAvxTwo_6x10_end: - RET - -// func mulAvxTwo_6x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_6x10Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 135 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_6x10Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), DX - MOVQ out_base+48(FP), R10 - MOVQ start+72(FP), R11 - - // Add start offset to input - ADDQ R11, BX - ADDQ R11, SI - ADDQ R11, DI - ADDQ R11, R8 - ADDQ R11, R9 - ADDQ R11, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X10 - VPBROADCASTB X10, Y10 - -mulAvxTwo_6x10Xor_loop: - // Load and process 32 bytes from input 0 to 10 outputs - VMOVDQU (BX), Y13 - ADDQ $0x20, BX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - MOVQ (R10), R12 - VMOVDQU (R12)(R11*1), Y0 - VMOVDQU (CX), Y11 - VMOVDQU 32(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - MOVQ 24(R10), R12 - VMOVDQU (R12)(R11*1), Y1 - VMOVDQU 64(CX), Y11 - VMOVDQU 96(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - MOVQ 48(R10), R12 - VMOVDQU (R12)(R11*1), Y2 - VMOVDQU 128(CX), Y11 - VMOVDQU 160(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - MOVQ 72(R10), R12 - VMOVDQU (R12)(R11*1), Y3 - VMOVDQU 192(CX), Y11 - VMOVDQU 224(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - MOVQ 96(R10), R12 - VMOVDQU (R12)(R11*1), Y4 - VMOVDQU 256(CX), Y11 - VMOVDQU 288(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - MOVQ 120(R10), R12 - VMOVDQU (R12)(R11*1), Y5 - VMOVDQU 320(CX), Y11 - VMOVDQU 352(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - MOVQ 144(R10), R12 - VMOVDQU (R12)(R11*1), Y6 - VMOVDQU 384(CX), Y11 - VMOVDQU 416(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - MOVQ 168(R10), R12 - VMOVDQU (R12)(R11*1), Y7 - VMOVDQU 448(CX), Y11 - VMOVDQU 480(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - MOVQ 192(R10), R12 - VMOVDQU (R12)(R11*1), Y8 - VMOVDQU 512(CX), Y11 - VMOVDQU 544(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - MOVQ 216(R10), R12 - VMOVDQU (R12)(R11*1), Y9 - VMOVDQU 576(CX), Y11 - VMOVDQU 608(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 1 to 10 outputs - VMOVDQU (SI), Y13 - ADDQ $0x20, SI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 640(CX), Y11 - VMOVDQU 672(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 704(CX), Y11 - VMOVDQU 736(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 768(CX), Y11 - VMOVDQU 800(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 832(CX), Y11 - VMOVDQU 864(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 896(CX), Y11 - VMOVDQU 928(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 960(CX), Y11 - VMOVDQU 992(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1024(CX), Y11 - VMOVDQU 1056(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1088(CX), Y11 - VMOVDQU 1120(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1152(CX), Y11 - VMOVDQU 1184(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1216(CX), Y11 - VMOVDQU 1248(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 2 to 10 outputs - VMOVDQU (DI), Y13 - ADDQ $0x20, DI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1280(CX), Y11 - VMOVDQU 1312(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1344(CX), Y11 - VMOVDQU 1376(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 1408(CX), Y11 - VMOVDQU 1440(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 1472(CX), Y11 - VMOVDQU 1504(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 1536(CX), Y11 - VMOVDQU 1568(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 1600(CX), Y11 - VMOVDQU 1632(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1664(CX), Y11 - VMOVDQU 1696(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1728(CX), Y11 - VMOVDQU 1760(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1792(CX), Y11 - VMOVDQU 1824(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1856(CX), Y11 - VMOVDQU 1888(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 3 to 10 outputs - VMOVDQU (R8), Y13 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1920(CX), Y11 - VMOVDQU 1952(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1984(CX), Y11 - VMOVDQU 2016(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2048(CX), Y11 - VMOVDQU 2080(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2112(CX), Y11 - VMOVDQU 2144(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2176(CX), Y11 - VMOVDQU 2208(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2240(CX), Y11 - VMOVDQU 2272(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2304(CX), Y11 - VMOVDQU 2336(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 2368(CX), Y11 - VMOVDQU 2400(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 2432(CX), Y11 - VMOVDQU 2464(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 2496(CX), Y11 - VMOVDQU 2528(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 4 to 10 outputs - VMOVDQU (R9), Y13 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 2560(CX), Y11 - VMOVDQU 2592(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 2624(CX), Y11 - VMOVDQU 2656(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2688(CX), Y11 - VMOVDQU 2720(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2752(CX), Y11 - VMOVDQU 2784(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2816(CX), Y11 - VMOVDQU 2848(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2880(CX), Y11 - VMOVDQU 2912(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2944(CX), Y11 - VMOVDQU 2976(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 3008(CX), Y11 - VMOVDQU 3040(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 3072(CX), Y11 - VMOVDQU 3104(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 3136(CX), Y11 - VMOVDQU 3168(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 5 to 10 outputs - VMOVDQU (DX), Y13 - ADDQ $0x20, DX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 3200(CX), Y11 - VMOVDQU 3232(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 3264(CX), Y11 - VMOVDQU 3296(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 3328(CX), Y11 - VMOVDQU 3360(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 3392(CX), Y11 - VMOVDQU 3424(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 3456(CX), Y11 - VMOVDQU 3488(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 3520(CX), Y11 - VMOVDQU 3552(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 3584(CX), Y11 - VMOVDQU 3616(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 3648(CX), Y11 - VMOVDQU 3680(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 3712(CX), Y11 - VMOVDQU 3744(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 3776(CX), Y11 - VMOVDQU 3808(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Store 10 outputs - MOVQ (R10), R12 - VMOVDQU Y0, (R12)(R11*1) - MOVQ 24(R10), R12 - VMOVDQU Y1, (R12)(R11*1) - MOVQ 48(R10), R12 - VMOVDQU Y2, (R12)(R11*1) - MOVQ 72(R10), R12 - VMOVDQU Y3, (R12)(R11*1) - MOVQ 96(R10), R12 - VMOVDQU Y4, (R12)(R11*1) - MOVQ 120(R10), R12 - VMOVDQU Y5, (R12)(R11*1) - MOVQ 144(R10), R12 - VMOVDQU Y6, (R12)(R11*1) - MOVQ 168(R10), R12 - VMOVDQU Y7, (R12)(R11*1) - MOVQ 192(R10), R12 - VMOVDQU Y8, (R12)(R11*1) - MOVQ 216(R10), R12 - VMOVDQU Y9, (R12)(R11*1) - - // Prepare for next loop - ADDQ $0x20, R11 - DECQ AX - JNZ mulAvxTwo_6x10Xor_loop - VZEROUPPER - -mulAvxTwo_6x10Xor_end: - RET - -// func mulAvxTwo_7x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x1(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 18 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_7x1_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ (R11), R11 - MOVQ start+72(FP), R12 - - // Add start offset to output - ADDQ R12, R11 - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, R9 - ADDQ R12, R10 - ADDQ R12, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X1 - VPBROADCASTB X1, Y1 - -mulAvxTwo_7x1_loop: - // Load and process 32 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y4 - ADDQ $0x20, BX - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU (CX), Y2 - VMOVDQU 32(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y0 - - // Load and process 32 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y4 - ADDQ $0x20, SI - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 2 to 1 outputs - VMOVDQU (DI), Y4 - ADDQ $0x20, DI - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 128(CX), Y2 - VMOVDQU 160(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 3 to 1 outputs - VMOVDQU (R8), Y4 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 192(CX), Y2 - VMOVDQU 224(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 4 to 1 outputs - VMOVDQU (R9), Y4 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 256(CX), Y2 - VMOVDQU 288(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 5 to 1 outputs - VMOVDQU (R10), Y4 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 320(CX), Y2 - VMOVDQU 352(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 6 to 1 outputs - VMOVDQU (DX), Y4 - ADDQ $0x20, DX - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 384(CX), Y2 - VMOVDQU 416(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Store 1 outputs - VMOVDQU Y0, (R11) - ADDQ $0x20, R11 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_7x1_loop - VZEROUPPER - -mulAvxTwo_7x1_end: - RET - -// func mulAvxTwo_7x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x1_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 34 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_7x1_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ out_base+48(FP), R11 - MOVQ (R11), R11 - MOVQ start+72(FP), R12 - - // Add start offset to output - ADDQ R12, R11 - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, R9 - ADDQ R12, R10 - ADDQ R12, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_7x1_64_loop: - // Load and process 64 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y6 - VMOVDQU 32(BX), Y5 - ADDQ $0x40, BX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y0 - VPXOR Y5, Y6, Y1 - - // Load and process 64 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y6 - VMOVDQU 32(SI), Y5 - ADDQ $0x40, SI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 2 to 1 outputs - VMOVDQU (DI), Y6 - VMOVDQU 32(DI), Y5 - ADDQ $0x40, DI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 3 to 1 outputs - VMOVDQU (R8), Y6 - VMOVDQU 32(R8), Y5 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 4 to 1 outputs - VMOVDQU (R9), Y6 - VMOVDQU 32(R9), Y5 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 5 to 1 outputs - VMOVDQU (R10), Y6 - VMOVDQU 32(R10), Y5 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 6 to 1 outputs - VMOVDQU (DX), Y6 - VMOVDQU 32(DX), Y5 - ADDQ $0x40, DX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 384(CX), Y3 - VMOVDQU 416(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Store 1 outputs - VMOVDQU Y0, (R11) - VMOVDQU Y1, 32(R11) - ADDQ $0x40, R11 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_7x1_64_loop - VZEROUPPER - -mulAvxTwo_7x1_64_end: - RET - -// func mulAvxTwo_7x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x1Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 18 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_7x1Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ (R11), R11 - MOVQ start+72(FP), R12 - - // Add start offset to output - ADDQ R12, R11 - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, R9 - ADDQ R12, R10 - ADDQ R12, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X1 - VPBROADCASTB X1, Y1 - -mulAvxTwo_7x1Xor_loop: - // Load and process 32 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y4 - ADDQ $0x20, BX - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU (R11), Y0 - VMOVDQU (CX), Y2 - VMOVDQU 32(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y4 - ADDQ $0x20, SI - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 2 to 1 outputs - VMOVDQU (DI), Y4 - ADDQ $0x20, DI - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 128(CX), Y2 - VMOVDQU 160(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 3 to 1 outputs - VMOVDQU (R8), Y4 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 192(CX), Y2 - VMOVDQU 224(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 4 to 1 outputs - VMOVDQU (R9), Y4 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 256(CX), Y2 - VMOVDQU 288(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 5 to 1 outputs - VMOVDQU (R10), Y4 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 320(CX), Y2 - VMOVDQU 352(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 6 to 1 outputs - VMOVDQU (DX), Y4 - ADDQ $0x20, DX - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 384(CX), Y2 - VMOVDQU 416(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Store 1 outputs - VMOVDQU Y0, (R11) - ADDQ $0x20, R11 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_7x1Xor_loop - VZEROUPPER - -mulAvxTwo_7x1Xor_end: - RET - -// func mulAvxTwo_7x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x1_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 34 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_7x1_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ out_base+48(FP), R11 - MOVQ (R11), R11 - MOVQ start+72(FP), R12 - - // Add start offset to output - ADDQ R12, R11 - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, R9 - ADDQ R12, R10 - ADDQ R12, DX - MOVQ $0x0000000f, R12 - MOVQ R12, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_7x1_64Xor_loop: - // Load 1 outputs - VMOVDQU (R11), Y0 - VMOVDQU 32(R11), Y1 - - // Load and process 64 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y6 - VMOVDQU 32(BX), Y5 - ADDQ $0x40, BX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y6 - VMOVDQU 32(SI), Y5 - ADDQ $0x40, SI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 2 to 1 outputs - VMOVDQU (DI), Y6 - VMOVDQU 32(DI), Y5 - ADDQ $0x40, DI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 3 to 1 outputs - VMOVDQU (R8), Y6 - VMOVDQU 32(R8), Y5 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 4 to 1 outputs - VMOVDQU (R9), Y6 - VMOVDQU 32(R9), Y5 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 5 to 1 outputs - VMOVDQU (R10), Y6 - VMOVDQU 32(R10), Y5 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 6 to 1 outputs - VMOVDQU (DX), Y6 - VMOVDQU 32(DX), Y5 - ADDQ $0x40, DX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 384(CX), Y3 - VMOVDQU 416(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Store 1 outputs - VMOVDQU Y0, (R11) - VMOVDQU Y1, 32(R11) - ADDQ $0x40, R11 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_7x1_64Xor_loop - VZEROUPPER - -mulAvxTwo_7x1_64Xor_end: - RET - -// func mulAvxTwo_7x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x2(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 35 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_7x2_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ (R11), R12 - MOVQ 24(R11), R11 - MOVQ start+72(FP), R13 - - // Add start offset to output - ADDQ R13, R12 - ADDQ R13, R11 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_7x2_loop: - // Load and process 32 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y5 - ADDQ $0x20, BX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y0 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y1 - - // Load and process 32 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y5 - ADDQ $0x20, SI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y5 - ADDQ $0x20, DI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y5 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 384(CX), Y3 - VMOVDQU 416(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 448(CX), Y3 - VMOVDQU 480(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 4 to 2 outputs - VMOVDQU (R9), Y5 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 512(CX), Y3 - VMOVDQU 544(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 576(CX), Y3 - VMOVDQU 608(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 5 to 2 outputs - VMOVDQU (R10), Y5 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 640(CX), Y3 - VMOVDQU 672(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 704(CX), Y3 - VMOVDQU 736(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 6 to 2 outputs - VMOVDQU (DX), Y5 - ADDQ $0x20, DX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 768(CX), Y3 - VMOVDQU 800(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 832(CX), Y3 - VMOVDQU 864(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Store 2 outputs - VMOVDQU Y0, (R12) - ADDQ $0x20, R12 - VMOVDQU Y1, (R11) - ADDQ $0x20, R11 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_7x2_loop - VZEROUPPER - -mulAvxTwo_7x2_end: - RET - -// func mulAvxTwo_7x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x2_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 65 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_7x2_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ out_base+48(FP), R11 - MOVQ (R11), R12 - MOVQ 24(R11), R11 - MOVQ start+72(FP), R13 - - // Add start offset to output - ADDQ R13, R12 - ADDQ R13, R11 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_7x2_64_loop: - // Load and process 64 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y9 - VMOVDQU 32(BX), Y11 - ADDQ $0x40, BX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y0 - VPXOR Y7, Y8, Y1 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y2 - VPXOR Y7, Y8, Y3 - - // Load and process 64 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y9 - VMOVDQU 32(SI), Y11 - ADDQ $0x40, SI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y9 - VMOVDQU 32(DI), Y11 - ADDQ $0x40, DI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y9 - VMOVDQU 32(R8), Y11 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 4 to 2 outputs - VMOVDQU (R9), Y9 - VMOVDQU 32(R9), Y11 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 5 to 2 outputs - VMOVDQU (R10), Y9 - VMOVDQU 32(R10), Y11 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 6 to 2 outputs - VMOVDQU (DX), Y9 - VMOVDQU 32(DX), Y11 - ADDQ $0x40, DX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 768(CX), Y5 - VMOVDQU 800(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 832(CX), Y5 - VMOVDQU 864(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Store 2 outputs - VMOVDQU Y0, (R12) - VMOVDQU Y1, 32(R12) - ADDQ $0x40, R12 - VMOVDQU Y2, (R11) - VMOVDQU Y3, 32(R11) - ADDQ $0x40, R11 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_7x2_64_loop - VZEROUPPER - -mulAvxTwo_7x2_64_end: - RET - -// func mulAvxTwo_7x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x2Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 35 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_7x2Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ (R11), R12 - MOVQ 24(R11), R11 - MOVQ start+72(FP), R13 - - // Add start offset to output - ADDQ R13, R12 - ADDQ R13, R11 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_7x2Xor_loop: - // Load and process 32 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y5 - ADDQ $0x20, BX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU (R12), Y0 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU (R11), Y1 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y5 - ADDQ $0x20, SI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y5 - ADDQ $0x20, DI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y5 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 384(CX), Y3 - VMOVDQU 416(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 448(CX), Y3 - VMOVDQU 480(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 4 to 2 outputs - VMOVDQU (R9), Y5 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 512(CX), Y3 - VMOVDQU 544(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 576(CX), Y3 - VMOVDQU 608(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 5 to 2 outputs - VMOVDQU (R10), Y5 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 640(CX), Y3 - VMOVDQU 672(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 704(CX), Y3 - VMOVDQU 736(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 6 to 2 outputs - VMOVDQU (DX), Y5 - ADDQ $0x20, DX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 768(CX), Y3 - VMOVDQU 800(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 832(CX), Y3 - VMOVDQU 864(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Store 2 outputs - VMOVDQU Y0, (R12) - ADDQ $0x20, R12 - VMOVDQU Y1, (R11) - ADDQ $0x20, R11 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_7x2Xor_loop - VZEROUPPER - -mulAvxTwo_7x2Xor_end: - RET - -// func mulAvxTwo_7x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x2_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 65 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_7x2_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ out_base+48(FP), R11 - MOVQ (R11), R12 - MOVQ 24(R11), R11 - MOVQ start+72(FP), R13 - - // Add start offset to output - ADDQ R13, R12 - ADDQ R13, R11 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_7x2_64Xor_loop: - // Load 2 outputs - VMOVDQU (R12), Y0 - VMOVDQU 32(R12), Y1 - VMOVDQU (R11), Y2 - VMOVDQU 32(R11), Y3 - - // Load and process 64 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y9 - VMOVDQU 32(BX), Y11 - ADDQ $0x40, BX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y9 - VMOVDQU 32(SI), Y11 - ADDQ $0x40, SI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y9 - VMOVDQU 32(DI), Y11 - ADDQ $0x40, DI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y9 - VMOVDQU 32(R8), Y11 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 4 to 2 outputs - VMOVDQU (R9), Y9 - VMOVDQU 32(R9), Y11 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 5 to 2 outputs - VMOVDQU (R10), Y9 - VMOVDQU 32(R10), Y11 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 6 to 2 outputs - VMOVDQU (DX), Y9 - VMOVDQU 32(DX), Y11 - ADDQ $0x40, DX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 768(CX), Y5 - VMOVDQU 800(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 832(CX), Y5 - VMOVDQU 864(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Store 2 outputs - VMOVDQU Y0, (R12) - VMOVDQU Y1, 32(R12) - ADDQ $0x40, R12 - VMOVDQU Y2, (R11) - VMOVDQU Y3, 32(R11) - ADDQ $0x40, R11 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_7x2_64Xor_loop - VZEROUPPER - -mulAvxTwo_7x2_64Xor_end: - RET - -// func mulAvxTwo_7x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x3(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 50 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_7x3_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ (R11), R12 - MOVQ 24(R11), R13 - MOVQ 48(R11), R11 - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, R12 - ADDQ R14, R13 - ADDQ R14, R11 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X3 - VPBROADCASTB X3, Y3 - -mulAvxTwo_7x3_loop: - // Load and process 32 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y6 - ADDQ $0x20, BX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU (CX), Y4 - VMOVDQU 32(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y0 - VMOVDQU 64(CX), Y4 - VMOVDQU 96(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y1 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y2 - - // Load and process 32 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y6 - ADDQ $0x20, SI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 192(CX), Y4 - VMOVDQU 224(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 256(CX), Y4 - VMOVDQU 288(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 320(CX), Y4 - VMOVDQU 352(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y6 - ADDQ $0x20, DI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 384(CX), Y4 - VMOVDQU 416(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 448(CX), Y4 - VMOVDQU 480(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 512(CX), Y4 - VMOVDQU 544(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 3 to 3 outputs - VMOVDQU (R8), Y6 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 576(CX), Y4 - VMOVDQU 608(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 640(CX), Y4 - VMOVDQU 672(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 704(CX), Y4 - VMOVDQU 736(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 4 to 3 outputs - VMOVDQU (R9), Y6 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 768(CX), Y4 - VMOVDQU 800(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 832(CX), Y4 - VMOVDQU 864(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 896(CX), Y4 - VMOVDQU 928(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 5 to 3 outputs - VMOVDQU (R10), Y6 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 960(CX), Y4 - VMOVDQU 992(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1024(CX), Y4 - VMOVDQU 1056(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1088(CX), Y4 - VMOVDQU 1120(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 6 to 3 outputs - VMOVDQU (DX), Y6 - ADDQ $0x20, DX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 1152(CX), Y4 - VMOVDQU 1184(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1216(CX), Y4 - VMOVDQU 1248(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1280(CX), Y4 - VMOVDQU 1312(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Store 3 outputs - VMOVDQU Y0, (R12) - ADDQ $0x20, R12 - VMOVDQU Y1, (R13) - ADDQ $0x20, R13 - VMOVDQU Y2, (R11) - ADDQ $0x20, R11 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_7x3_loop - VZEROUPPER - -mulAvxTwo_7x3_end: - RET - -// func mulAvxTwo_7x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x3_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 94 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_7x3_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ out_base+48(FP), R11 - MOVQ (R11), R12 - MOVQ 24(R11), R13 - MOVQ 48(R11), R11 - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, R12 - ADDQ R14, R13 - ADDQ R14, R11 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_7x3_64_loop: - // Load and process 64 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y11 - VMOVDQU 32(BX), Y13 - ADDQ $0x40, BX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y0 - VPXOR Y9, Y10, Y1 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y2 - VPXOR Y9, Y10, Y3 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y4 - VPXOR Y9, Y10, Y5 - - // Load and process 64 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y11 - VMOVDQU 32(SI), Y13 - ADDQ $0x40, SI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y11 - VMOVDQU 32(DI), Y13 - ADDQ $0x40, DI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 3 to 3 outputs - VMOVDQU (R8), Y11 - VMOVDQU 32(R8), Y13 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 4 to 3 outputs - VMOVDQU (R9), Y11 - VMOVDQU 32(R9), Y13 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 5 to 3 outputs - VMOVDQU (R10), Y11 - VMOVDQU 32(R10), Y13 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 6 to 3 outputs - VMOVDQU (DX), Y11 - VMOVDQU 32(DX), Y13 - ADDQ $0x40, DX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 1152(CX), Y7 - VMOVDQU 1184(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1216(CX), Y7 - VMOVDQU 1248(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y7 - VMOVDQU 1312(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Store 3 outputs - VMOVDQU Y0, (R12) - VMOVDQU Y1, 32(R12) - ADDQ $0x40, R12 - VMOVDQU Y2, (R13) - VMOVDQU Y3, 32(R13) - ADDQ $0x40, R13 - VMOVDQU Y4, (R11) - VMOVDQU Y5, 32(R11) - ADDQ $0x40, R11 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_7x3_64_loop - VZEROUPPER - -mulAvxTwo_7x3_64_end: - RET - -// func mulAvxTwo_7x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x3Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 50 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_7x3Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ (R11), R12 - MOVQ 24(R11), R13 - MOVQ 48(R11), R11 - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, R12 - ADDQ R14, R13 - ADDQ R14, R11 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X3 - VPBROADCASTB X3, Y3 - -mulAvxTwo_7x3Xor_loop: - // Load and process 32 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y6 - ADDQ $0x20, BX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU (R12), Y0 - VMOVDQU (CX), Y4 - VMOVDQU 32(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU (R13), Y1 - VMOVDQU 64(CX), Y4 - VMOVDQU 96(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU (R11), Y2 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y6 - ADDQ $0x20, SI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 192(CX), Y4 - VMOVDQU 224(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 256(CX), Y4 - VMOVDQU 288(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 320(CX), Y4 - VMOVDQU 352(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y6 - ADDQ $0x20, DI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 384(CX), Y4 - VMOVDQU 416(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 448(CX), Y4 - VMOVDQU 480(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 512(CX), Y4 - VMOVDQU 544(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 3 to 3 outputs - VMOVDQU (R8), Y6 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 576(CX), Y4 - VMOVDQU 608(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 640(CX), Y4 - VMOVDQU 672(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 704(CX), Y4 - VMOVDQU 736(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 4 to 3 outputs - VMOVDQU (R9), Y6 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 768(CX), Y4 - VMOVDQU 800(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 832(CX), Y4 - VMOVDQU 864(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 896(CX), Y4 - VMOVDQU 928(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 5 to 3 outputs - VMOVDQU (R10), Y6 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 960(CX), Y4 - VMOVDQU 992(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1024(CX), Y4 - VMOVDQU 1056(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1088(CX), Y4 - VMOVDQU 1120(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 6 to 3 outputs - VMOVDQU (DX), Y6 - ADDQ $0x20, DX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 1152(CX), Y4 - VMOVDQU 1184(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1216(CX), Y4 - VMOVDQU 1248(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1280(CX), Y4 - VMOVDQU 1312(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Store 3 outputs - VMOVDQU Y0, (R12) - ADDQ $0x20, R12 - VMOVDQU Y1, (R13) - ADDQ $0x20, R13 - VMOVDQU Y2, (R11) - ADDQ $0x20, R11 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_7x3Xor_loop - VZEROUPPER - -mulAvxTwo_7x3Xor_end: - RET - -// func mulAvxTwo_7x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x3_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 94 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_7x3_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ out_base+48(FP), R11 - MOVQ (R11), R12 - MOVQ 24(R11), R13 - MOVQ 48(R11), R11 - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, R12 - ADDQ R14, R13 - ADDQ R14, R11 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_7x3_64Xor_loop: - // Load 3 outputs - VMOVDQU (R12), Y0 - VMOVDQU 32(R12), Y1 - VMOVDQU (R13), Y2 - VMOVDQU 32(R13), Y3 - VMOVDQU (R11), Y4 - VMOVDQU 32(R11), Y5 - - // Load and process 64 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y11 - VMOVDQU 32(BX), Y13 - ADDQ $0x40, BX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y11 - VMOVDQU 32(SI), Y13 - ADDQ $0x40, SI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y11 - VMOVDQU 32(DI), Y13 - ADDQ $0x40, DI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 3 to 3 outputs - VMOVDQU (R8), Y11 - VMOVDQU 32(R8), Y13 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 4 to 3 outputs - VMOVDQU (R9), Y11 - VMOVDQU 32(R9), Y13 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 5 to 3 outputs - VMOVDQU (R10), Y11 - VMOVDQU 32(R10), Y13 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 6 to 3 outputs - VMOVDQU (DX), Y11 - VMOVDQU 32(DX), Y13 - ADDQ $0x40, DX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 1152(CX), Y7 - VMOVDQU 1184(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1216(CX), Y7 - VMOVDQU 1248(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y7 - VMOVDQU 1312(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Store 3 outputs - VMOVDQU Y0, (R12) - VMOVDQU Y1, 32(R12) - ADDQ $0x40, R12 - VMOVDQU Y2, (R13) - VMOVDQU Y3, 32(R13) - ADDQ $0x40, R13 - VMOVDQU Y4, (R11) - VMOVDQU Y5, 32(R11) - ADDQ $0x40, R11 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_7x3_64Xor_loop - VZEROUPPER - -mulAvxTwo_7x3_64Xor_end: - RET - -// func mulAvxTwo_7x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x4(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 65 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_7x4_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ (R11), R12 - MOVQ 24(R11), R13 - MOVQ 48(R11), R14 - MOVQ 72(R11), R11 - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, R14 - ADDQ R15, R11 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_7x4_loop: - // Load and process 32 bytes from input 0 to 4 outputs - VMOVDQU (BX), Y7 - ADDQ $0x20, BX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y0 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y1 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y2 - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y3 - - // Load and process 32 bytes from input 1 to 4 outputs - VMOVDQU (SI), Y7 - ADDQ $0x20, SI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 2 to 4 outputs - VMOVDQU (DI), Y7 - ADDQ $0x20, DI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 3 to 4 outputs - VMOVDQU (R8), Y7 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 768(CX), Y5 - VMOVDQU 800(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 832(CX), Y5 - VMOVDQU 864(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 896(CX), Y5 - VMOVDQU 928(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 960(CX), Y5 - VMOVDQU 992(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 4 to 4 outputs - VMOVDQU (R9), Y7 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1024(CX), Y5 - VMOVDQU 1056(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1088(CX), Y5 - VMOVDQU 1120(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1152(CX), Y5 - VMOVDQU 1184(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1216(CX), Y5 - VMOVDQU 1248(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 5 to 4 outputs - VMOVDQU (R10), Y7 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1280(CX), Y5 - VMOVDQU 1312(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1344(CX), Y5 - VMOVDQU 1376(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1408(CX), Y5 - VMOVDQU 1440(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1472(CX), Y5 - VMOVDQU 1504(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 6 to 4 outputs - VMOVDQU (DX), Y7 - ADDQ $0x20, DX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1536(CX), Y5 - VMOVDQU 1568(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1600(CX), Y5 - VMOVDQU 1632(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1664(CX), Y5 - VMOVDQU 1696(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1728(CX), Y5 - VMOVDQU 1760(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Store 4 outputs - VMOVDQU Y0, (R12) - ADDQ $0x20, R12 - VMOVDQU Y1, (R13) - ADDQ $0x20, R13 - VMOVDQU Y2, (R14) - ADDQ $0x20, R14 - VMOVDQU Y3, (R11) - ADDQ $0x20, R11 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_7x4_loop - VZEROUPPER - -mulAvxTwo_7x4_end: - RET - -// func mulAvxTwo_7x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x4Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 65 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_7x4Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ (R11), R12 - MOVQ 24(R11), R13 - MOVQ 48(R11), R14 - MOVQ 72(R11), R11 - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, R14 - ADDQ R15, R11 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_7x4Xor_loop: - // Load and process 32 bytes from input 0 to 4 outputs - VMOVDQU (BX), Y7 - ADDQ $0x20, BX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU (R12), Y0 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU (R13), Y1 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU (R14), Y2 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU (R11), Y3 - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 1 to 4 outputs - VMOVDQU (SI), Y7 - ADDQ $0x20, SI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 2 to 4 outputs - VMOVDQU (DI), Y7 - ADDQ $0x20, DI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 3 to 4 outputs - VMOVDQU (R8), Y7 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 768(CX), Y5 - VMOVDQU 800(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 832(CX), Y5 - VMOVDQU 864(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 896(CX), Y5 - VMOVDQU 928(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 960(CX), Y5 - VMOVDQU 992(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 4 to 4 outputs - VMOVDQU (R9), Y7 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1024(CX), Y5 - VMOVDQU 1056(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1088(CX), Y5 - VMOVDQU 1120(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1152(CX), Y5 - VMOVDQU 1184(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1216(CX), Y5 - VMOVDQU 1248(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 5 to 4 outputs - VMOVDQU (R10), Y7 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1280(CX), Y5 - VMOVDQU 1312(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1344(CX), Y5 - VMOVDQU 1376(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1408(CX), Y5 - VMOVDQU 1440(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1472(CX), Y5 - VMOVDQU 1504(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 6 to 4 outputs - VMOVDQU (DX), Y7 - ADDQ $0x20, DX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1536(CX), Y5 - VMOVDQU 1568(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1600(CX), Y5 - VMOVDQU 1632(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1664(CX), Y5 - VMOVDQU 1696(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1728(CX), Y5 - VMOVDQU 1760(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Store 4 outputs - VMOVDQU Y0, (R12) - ADDQ $0x20, R12 - VMOVDQU Y1, (R13) - ADDQ $0x20, R13 - VMOVDQU Y2, (R14) - ADDQ $0x20, R14 - VMOVDQU Y3, (R11) - ADDQ $0x20, R11 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_7x4Xor_loop - VZEROUPPER - -mulAvxTwo_7x4Xor_end: - RET - -// func mulAvxTwo_7x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x5(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 80 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_7x5_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ (R11), R12 - MOVQ 24(R11), R13 - MOVQ 48(R11), R14 - MOVQ 72(R11), R15 - MOVQ 96(R11), R11 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R11 - - // Add start offset to input - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, DX - MOVQ $0x0000000f, BP - MOVQ BP, X5 - VPBROADCASTB X5, Y5 - -mulAvxTwo_7x5_loop: - // Load and process 32 bytes from input 0 to 5 outputs - VMOVDQU (BX), Y8 - ADDQ $0x20, BX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU (CX), Y6 - VMOVDQU 32(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y0 - VMOVDQU 64(CX), Y6 - VMOVDQU 96(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y1 - VMOVDQU 128(CX), Y6 - VMOVDQU 160(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y2 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y3 - VMOVDQU 256(CX), Y6 - VMOVDQU 288(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y4 - - // Load and process 32 bytes from input 1 to 5 outputs - VMOVDQU (SI), Y8 - ADDQ $0x20, SI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 320(CX), Y6 - VMOVDQU 352(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 384(CX), Y6 - VMOVDQU 416(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 448(CX), Y6 - VMOVDQU 480(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 512(CX), Y6 - VMOVDQU 544(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 576(CX), Y6 - VMOVDQU 608(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 2 to 5 outputs - VMOVDQU (DI), Y8 - ADDQ $0x20, DI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 640(CX), Y6 - VMOVDQU 672(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 704(CX), Y6 - VMOVDQU 736(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 768(CX), Y6 - VMOVDQU 800(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 832(CX), Y6 - VMOVDQU 864(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 896(CX), Y6 - VMOVDQU 928(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 3 to 5 outputs - VMOVDQU (R8), Y8 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 960(CX), Y6 - VMOVDQU 992(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1024(CX), Y6 - VMOVDQU 1056(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1088(CX), Y6 - VMOVDQU 1120(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1152(CX), Y6 - VMOVDQU 1184(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1216(CX), Y6 - VMOVDQU 1248(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 4 to 5 outputs - VMOVDQU (R9), Y8 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1280(CX), Y6 - VMOVDQU 1312(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1344(CX), Y6 - VMOVDQU 1376(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1408(CX), Y6 - VMOVDQU 1440(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1472(CX), Y6 - VMOVDQU 1504(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1536(CX), Y6 - VMOVDQU 1568(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 5 to 5 outputs - VMOVDQU (R10), Y8 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1600(CX), Y6 - VMOVDQU 1632(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1664(CX), Y6 - VMOVDQU 1696(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1728(CX), Y6 - VMOVDQU 1760(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1792(CX), Y6 - VMOVDQU 1824(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1856(CX), Y6 - VMOVDQU 1888(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 6 to 5 outputs - VMOVDQU (DX), Y8 - ADDQ $0x20, DX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1920(CX), Y6 - VMOVDQU 1952(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1984(CX), Y6 - VMOVDQU 2016(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 2048(CX), Y6 - VMOVDQU 2080(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 2112(CX), Y6 - VMOVDQU 2144(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 2176(CX), Y6 - VMOVDQU 2208(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Store 5 outputs - VMOVDQU Y0, (R12) - ADDQ $0x20, R12 - VMOVDQU Y1, (R13) - ADDQ $0x20, R13 - VMOVDQU Y2, (R14) - ADDQ $0x20, R14 - VMOVDQU Y3, (R15) - ADDQ $0x20, R15 - VMOVDQU Y4, (R11) - ADDQ $0x20, R11 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_7x5_loop - VZEROUPPER - -mulAvxTwo_7x5_end: - RET - -// func mulAvxTwo_7x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x5Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 80 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_7x5Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ (R11), R12 - MOVQ 24(R11), R13 - MOVQ 48(R11), R14 - MOVQ 72(R11), R15 - MOVQ 96(R11), R11 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R11 - - // Add start offset to input - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, DX - MOVQ $0x0000000f, BP - MOVQ BP, X5 - VPBROADCASTB X5, Y5 - -mulAvxTwo_7x5Xor_loop: - // Load and process 32 bytes from input 0 to 5 outputs - VMOVDQU (BX), Y8 - ADDQ $0x20, BX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU (R12), Y0 - VMOVDQU (CX), Y6 - VMOVDQU 32(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU (R13), Y1 - VMOVDQU 64(CX), Y6 - VMOVDQU 96(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU (R14), Y2 - VMOVDQU 128(CX), Y6 - VMOVDQU 160(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU (R15), Y3 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU (R11), Y4 - VMOVDQU 256(CX), Y6 - VMOVDQU 288(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 1 to 5 outputs - VMOVDQU (SI), Y8 - ADDQ $0x20, SI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 320(CX), Y6 - VMOVDQU 352(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 384(CX), Y6 - VMOVDQU 416(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 448(CX), Y6 - VMOVDQU 480(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 512(CX), Y6 - VMOVDQU 544(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 576(CX), Y6 - VMOVDQU 608(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 2 to 5 outputs - VMOVDQU (DI), Y8 - ADDQ $0x20, DI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 640(CX), Y6 - VMOVDQU 672(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 704(CX), Y6 - VMOVDQU 736(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 768(CX), Y6 - VMOVDQU 800(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 832(CX), Y6 - VMOVDQU 864(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 896(CX), Y6 - VMOVDQU 928(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 3 to 5 outputs - VMOVDQU (R8), Y8 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 960(CX), Y6 - VMOVDQU 992(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1024(CX), Y6 - VMOVDQU 1056(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1088(CX), Y6 - VMOVDQU 1120(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1152(CX), Y6 - VMOVDQU 1184(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1216(CX), Y6 - VMOVDQU 1248(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 4 to 5 outputs - VMOVDQU (R9), Y8 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1280(CX), Y6 - VMOVDQU 1312(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1344(CX), Y6 - VMOVDQU 1376(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1408(CX), Y6 - VMOVDQU 1440(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1472(CX), Y6 - VMOVDQU 1504(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1536(CX), Y6 - VMOVDQU 1568(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 5 to 5 outputs - VMOVDQU (R10), Y8 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1600(CX), Y6 - VMOVDQU 1632(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1664(CX), Y6 - VMOVDQU 1696(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1728(CX), Y6 - VMOVDQU 1760(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1792(CX), Y6 - VMOVDQU 1824(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1856(CX), Y6 - VMOVDQU 1888(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 6 to 5 outputs - VMOVDQU (DX), Y8 - ADDQ $0x20, DX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1920(CX), Y6 - VMOVDQU 1952(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1984(CX), Y6 - VMOVDQU 2016(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 2048(CX), Y6 - VMOVDQU 2080(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 2112(CX), Y6 - VMOVDQU 2144(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 2176(CX), Y6 - VMOVDQU 2208(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Store 5 outputs - VMOVDQU Y0, (R12) - ADDQ $0x20, R12 - VMOVDQU Y1, (R13) - ADDQ $0x20, R13 - VMOVDQU Y2, (R14) - ADDQ $0x20, R14 - VMOVDQU Y3, (R15) - ADDQ $0x20, R15 - VMOVDQU Y4, (R11) - ADDQ $0x20, R11 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_7x5Xor_loop - VZEROUPPER - -mulAvxTwo_7x5Xor_end: - RET - -// func mulAvxTwo_7x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x6(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 95 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_7x6_end - MOVQ in_base+24(FP), AX - MOVQ (AX), DX - MOVQ 24(AX), BX - MOVQ 48(AX), SI - MOVQ 72(AX), DI - MOVQ 96(AX), R8 - MOVQ 120(AX), R9 - MOVQ 144(AX), AX - MOVQ out_base+48(FP), R10 - MOVQ (R10), R11 - MOVQ 24(R10), R12 - MOVQ 48(R10), R13 - MOVQ 72(R10), R14 - MOVQ 96(R10), R15 - MOVQ 120(R10), R10 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R10 - - // Add start offset to input - ADDQ BP, DX - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, AX - MOVQ $0x0000000f, BP - MOVQ BP, X6 - VPBROADCASTB X6, Y6 - MOVQ n+80(FP), BP - SHRQ $0x05, BP - -mulAvxTwo_7x6_loop: - // Load and process 32 bytes from input 0 to 6 outputs - VMOVDQU (DX), Y9 - ADDQ $0x20, DX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y0 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y1 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y2 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y3 - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y4 - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y5 - - // Load and process 32 bytes from input 1 to 6 outputs - VMOVDQU (BX), Y9 - ADDQ $0x20, BX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 2 to 6 outputs - VMOVDQU (SI), Y9 - ADDQ $0x20, SI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 3 to 6 outputs - VMOVDQU (DI), Y9 - ADDQ $0x20, DI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1152(CX), Y7 - VMOVDQU 1184(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1216(CX), Y7 - VMOVDQU 1248(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1280(CX), Y7 - VMOVDQU 1312(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1344(CX), Y7 - VMOVDQU 1376(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1408(CX), Y7 - VMOVDQU 1440(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1472(CX), Y7 - VMOVDQU 1504(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 4 to 6 outputs - VMOVDQU (R8), Y9 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1536(CX), Y7 - VMOVDQU 1568(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1600(CX), Y7 - VMOVDQU 1632(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1664(CX), Y7 - VMOVDQU 1696(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1728(CX), Y7 - VMOVDQU 1760(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1792(CX), Y7 - VMOVDQU 1824(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1856(CX), Y7 - VMOVDQU 1888(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 5 to 6 outputs - VMOVDQU (R9), Y9 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1920(CX), Y7 - VMOVDQU 1952(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1984(CX), Y7 - VMOVDQU 2016(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2048(CX), Y7 - VMOVDQU 2080(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2112(CX), Y7 - VMOVDQU 2144(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2176(CX), Y7 - VMOVDQU 2208(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 2240(CX), Y7 - VMOVDQU 2272(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 6 to 6 outputs - VMOVDQU (AX), Y9 - ADDQ $0x20, AX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 2304(CX), Y7 - VMOVDQU 2336(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 2368(CX), Y7 - VMOVDQU 2400(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2432(CX), Y7 - VMOVDQU 2464(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2496(CX), Y7 - VMOVDQU 2528(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2560(CX), Y7 - VMOVDQU 2592(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 2624(CX), Y7 - VMOVDQU 2656(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Store 6 outputs - VMOVDQU Y0, (R11) - ADDQ $0x20, R11 - VMOVDQU Y1, (R12) - ADDQ $0x20, R12 - VMOVDQU Y2, (R13) - ADDQ $0x20, R13 - VMOVDQU Y3, (R14) - ADDQ $0x20, R14 - VMOVDQU Y4, (R15) - ADDQ $0x20, R15 - VMOVDQU Y5, (R10) - ADDQ $0x20, R10 - - // Prepare for next loop - DECQ BP - JNZ mulAvxTwo_7x6_loop - VZEROUPPER - -mulAvxTwo_7x6_end: - RET - -// func mulAvxTwo_7x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x6Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 95 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_7x6Xor_end - MOVQ in_base+24(FP), AX - MOVQ (AX), DX - MOVQ 24(AX), BX - MOVQ 48(AX), SI - MOVQ 72(AX), DI - MOVQ 96(AX), R8 - MOVQ 120(AX), R9 - MOVQ 144(AX), AX - MOVQ out_base+48(FP), R10 - MOVQ (R10), R11 - MOVQ 24(R10), R12 - MOVQ 48(R10), R13 - MOVQ 72(R10), R14 - MOVQ 96(R10), R15 - MOVQ 120(R10), R10 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R10 - - // Add start offset to input - ADDQ BP, DX - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, AX - MOVQ $0x0000000f, BP - MOVQ BP, X6 - VPBROADCASTB X6, Y6 - MOVQ n+80(FP), BP - SHRQ $0x05, BP - -mulAvxTwo_7x6Xor_loop: - // Load and process 32 bytes from input 0 to 6 outputs - VMOVDQU (DX), Y9 - ADDQ $0x20, DX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU (R11), Y0 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU (R12), Y1 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU (R13), Y2 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU (R14), Y3 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU (R15), Y4 - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU (R10), Y5 - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 1 to 6 outputs - VMOVDQU (BX), Y9 - ADDQ $0x20, BX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 2 to 6 outputs - VMOVDQU (SI), Y9 - ADDQ $0x20, SI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 3 to 6 outputs - VMOVDQU (DI), Y9 - ADDQ $0x20, DI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1152(CX), Y7 - VMOVDQU 1184(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1216(CX), Y7 - VMOVDQU 1248(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1280(CX), Y7 - VMOVDQU 1312(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1344(CX), Y7 - VMOVDQU 1376(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1408(CX), Y7 - VMOVDQU 1440(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1472(CX), Y7 - VMOVDQU 1504(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 4 to 6 outputs - VMOVDQU (R8), Y9 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1536(CX), Y7 - VMOVDQU 1568(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1600(CX), Y7 - VMOVDQU 1632(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1664(CX), Y7 - VMOVDQU 1696(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1728(CX), Y7 - VMOVDQU 1760(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1792(CX), Y7 - VMOVDQU 1824(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1856(CX), Y7 - VMOVDQU 1888(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 5 to 6 outputs - VMOVDQU (R9), Y9 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1920(CX), Y7 - VMOVDQU 1952(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1984(CX), Y7 - VMOVDQU 2016(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2048(CX), Y7 - VMOVDQU 2080(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2112(CX), Y7 - VMOVDQU 2144(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2176(CX), Y7 - VMOVDQU 2208(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 2240(CX), Y7 - VMOVDQU 2272(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 6 to 6 outputs - VMOVDQU (AX), Y9 - ADDQ $0x20, AX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 2304(CX), Y7 - VMOVDQU 2336(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 2368(CX), Y7 - VMOVDQU 2400(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2432(CX), Y7 - VMOVDQU 2464(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2496(CX), Y7 - VMOVDQU 2528(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2560(CX), Y7 - VMOVDQU 2592(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 2624(CX), Y7 - VMOVDQU 2656(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Store 6 outputs - VMOVDQU Y0, (R11) - ADDQ $0x20, R11 - VMOVDQU Y1, (R12) - ADDQ $0x20, R12 - VMOVDQU Y2, (R13) - ADDQ $0x20, R13 - VMOVDQU Y3, (R14) - ADDQ $0x20, R14 - VMOVDQU Y4, (R15) - ADDQ $0x20, R15 - VMOVDQU Y5, (R10) - ADDQ $0x20, R10 - - // Prepare for next loop - DECQ BP - JNZ mulAvxTwo_7x6Xor_loop - VZEROUPPER - -mulAvxTwo_7x6Xor_end: - RET - -// func mulAvxTwo_7x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x7(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 110 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_7x7_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ start+72(FP), R12 - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, R9 - ADDQ R12, R10 - ADDQ R12, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X7 - VPBROADCASTB X7, Y7 - -mulAvxTwo_7x7_loop: - // Load and process 32 bytes from input 0 to 7 outputs - VMOVDQU (BX), Y10 - ADDQ $0x20, BX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU (CX), Y8 - VMOVDQU 32(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y0 - VMOVDQU 64(CX), Y8 - VMOVDQU 96(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y1 - VMOVDQU 128(CX), Y8 - VMOVDQU 160(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y2 - VMOVDQU 192(CX), Y8 - VMOVDQU 224(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y3 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y4 - VMOVDQU 320(CX), Y8 - VMOVDQU 352(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y5 - VMOVDQU 384(CX), Y8 - VMOVDQU 416(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y6 - - // Load and process 32 bytes from input 1 to 7 outputs - VMOVDQU (SI), Y10 - ADDQ $0x20, SI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 448(CX), Y8 - VMOVDQU 480(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 512(CX), Y8 - VMOVDQU 544(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 576(CX), Y8 - VMOVDQU 608(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 640(CX), Y8 - VMOVDQU 672(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 704(CX), Y8 - VMOVDQU 736(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 768(CX), Y8 - VMOVDQU 800(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 832(CX), Y8 - VMOVDQU 864(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 2 to 7 outputs - VMOVDQU (DI), Y10 - ADDQ $0x20, DI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 896(CX), Y8 - VMOVDQU 928(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 960(CX), Y8 - VMOVDQU 992(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1024(CX), Y8 - VMOVDQU 1056(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1088(CX), Y8 - VMOVDQU 1120(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1152(CX), Y8 - VMOVDQU 1184(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1216(CX), Y8 - VMOVDQU 1248(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1280(CX), Y8 - VMOVDQU 1312(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 3 to 7 outputs - VMOVDQU (R8), Y10 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1344(CX), Y8 - VMOVDQU 1376(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1408(CX), Y8 - VMOVDQU 1440(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1472(CX), Y8 - VMOVDQU 1504(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1536(CX), Y8 - VMOVDQU 1568(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1600(CX), Y8 - VMOVDQU 1632(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1664(CX), Y8 - VMOVDQU 1696(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1728(CX), Y8 - VMOVDQU 1760(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 4 to 7 outputs - VMOVDQU (R9), Y10 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1792(CX), Y8 - VMOVDQU 1824(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1856(CX), Y8 - VMOVDQU 1888(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1920(CX), Y8 - VMOVDQU 1952(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1984(CX), Y8 - VMOVDQU 2016(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2048(CX), Y8 - VMOVDQU 2080(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 2112(CX), Y8 - VMOVDQU 2144(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 2176(CX), Y8 - VMOVDQU 2208(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 5 to 7 outputs - VMOVDQU (R10), Y10 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 2240(CX), Y8 - VMOVDQU 2272(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 2304(CX), Y8 - VMOVDQU 2336(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 2368(CX), Y8 - VMOVDQU 2400(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 2432(CX), Y8 - VMOVDQU 2464(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2496(CX), Y8 - VMOVDQU 2528(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 2560(CX), Y8 - VMOVDQU 2592(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 2624(CX), Y8 - VMOVDQU 2656(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 6 to 7 outputs - VMOVDQU (DX), Y10 - ADDQ $0x20, DX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 2688(CX), Y8 - VMOVDQU 2720(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 2752(CX), Y8 - VMOVDQU 2784(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 2816(CX), Y8 - VMOVDQU 2848(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 2880(CX), Y8 - VMOVDQU 2912(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2944(CX), Y8 - VMOVDQU 2976(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 3008(CX), Y8 - VMOVDQU 3040(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 3072(CX), Y8 - VMOVDQU 3104(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Store 7 outputs - MOVQ (R11), R13 - VMOVDQU Y0, (R13)(R12*1) - MOVQ 24(R11), R13 - VMOVDQU Y1, (R13)(R12*1) - MOVQ 48(R11), R13 - VMOVDQU Y2, (R13)(R12*1) - MOVQ 72(R11), R13 - VMOVDQU Y3, (R13)(R12*1) - MOVQ 96(R11), R13 - VMOVDQU Y4, (R13)(R12*1) - MOVQ 120(R11), R13 - VMOVDQU Y5, (R13)(R12*1) - MOVQ 144(R11), R13 - VMOVDQU Y6, (R13)(R12*1) - - // Prepare for next loop - ADDQ $0x20, R12 - DECQ AX - JNZ mulAvxTwo_7x7_loop - VZEROUPPER - -mulAvxTwo_7x7_end: - RET - -// func mulAvxTwo_7x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x7Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 110 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_7x7Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ start+72(FP), R12 - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, R9 - ADDQ R12, R10 - ADDQ R12, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X7 - VPBROADCASTB X7, Y7 - -mulAvxTwo_7x7Xor_loop: - // Load and process 32 bytes from input 0 to 7 outputs - VMOVDQU (BX), Y10 - ADDQ $0x20, BX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - MOVQ (R11), R13 - VMOVDQU (R13)(R12*1), Y0 - VMOVDQU (CX), Y8 - VMOVDQU 32(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - MOVQ 24(R11), R13 - VMOVDQU (R13)(R12*1), Y1 - VMOVDQU 64(CX), Y8 - VMOVDQU 96(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - MOVQ 48(R11), R13 - VMOVDQU (R13)(R12*1), Y2 - VMOVDQU 128(CX), Y8 - VMOVDQU 160(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - MOVQ 72(R11), R13 - VMOVDQU (R13)(R12*1), Y3 - VMOVDQU 192(CX), Y8 - VMOVDQU 224(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - MOVQ 96(R11), R13 - VMOVDQU (R13)(R12*1), Y4 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - MOVQ 120(R11), R13 - VMOVDQU (R13)(R12*1), Y5 - VMOVDQU 320(CX), Y8 - VMOVDQU 352(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - MOVQ 144(R11), R13 - VMOVDQU (R13)(R12*1), Y6 - VMOVDQU 384(CX), Y8 - VMOVDQU 416(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 1 to 7 outputs - VMOVDQU (SI), Y10 - ADDQ $0x20, SI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 448(CX), Y8 - VMOVDQU 480(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 512(CX), Y8 - VMOVDQU 544(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 576(CX), Y8 - VMOVDQU 608(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 640(CX), Y8 - VMOVDQU 672(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 704(CX), Y8 - VMOVDQU 736(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 768(CX), Y8 - VMOVDQU 800(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 832(CX), Y8 - VMOVDQU 864(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 2 to 7 outputs - VMOVDQU (DI), Y10 - ADDQ $0x20, DI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 896(CX), Y8 - VMOVDQU 928(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 960(CX), Y8 - VMOVDQU 992(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1024(CX), Y8 - VMOVDQU 1056(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1088(CX), Y8 - VMOVDQU 1120(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1152(CX), Y8 - VMOVDQU 1184(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1216(CX), Y8 - VMOVDQU 1248(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1280(CX), Y8 - VMOVDQU 1312(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 3 to 7 outputs - VMOVDQU (R8), Y10 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1344(CX), Y8 - VMOVDQU 1376(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1408(CX), Y8 - VMOVDQU 1440(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1472(CX), Y8 - VMOVDQU 1504(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1536(CX), Y8 - VMOVDQU 1568(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1600(CX), Y8 - VMOVDQU 1632(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1664(CX), Y8 - VMOVDQU 1696(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1728(CX), Y8 - VMOVDQU 1760(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 4 to 7 outputs - VMOVDQU (R9), Y10 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1792(CX), Y8 - VMOVDQU 1824(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1856(CX), Y8 - VMOVDQU 1888(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1920(CX), Y8 - VMOVDQU 1952(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1984(CX), Y8 - VMOVDQU 2016(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2048(CX), Y8 - VMOVDQU 2080(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 2112(CX), Y8 - VMOVDQU 2144(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 2176(CX), Y8 - VMOVDQU 2208(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 5 to 7 outputs - VMOVDQU (R10), Y10 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 2240(CX), Y8 - VMOVDQU 2272(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 2304(CX), Y8 - VMOVDQU 2336(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 2368(CX), Y8 - VMOVDQU 2400(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 2432(CX), Y8 - VMOVDQU 2464(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2496(CX), Y8 - VMOVDQU 2528(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 2560(CX), Y8 - VMOVDQU 2592(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 2624(CX), Y8 - VMOVDQU 2656(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 6 to 7 outputs - VMOVDQU (DX), Y10 - ADDQ $0x20, DX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 2688(CX), Y8 - VMOVDQU 2720(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 2752(CX), Y8 - VMOVDQU 2784(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 2816(CX), Y8 - VMOVDQU 2848(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 2880(CX), Y8 - VMOVDQU 2912(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2944(CX), Y8 - VMOVDQU 2976(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 3008(CX), Y8 - VMOVDQU 3040(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 3072(CX), Y8 - VMOVDQU 3104(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Store 7 outputs - MOVQ (R11), R13 - VMOVDQU Y0, (R13)(R12*1) - MOVQ 24(R11), R13 - VMOVDQU Y1, (R13)(R12*1) - MOVQ 48(R11), R13 - VMOVDQU Y2, (R13)(R12*1) - MOVQ 72(R11), R13 - VMOVDQU Y3, (R13)(R12*1) - MOVQ 96(R11), R13 - VMOVDQU Y4, (R13)(R12*1) - MOVQ 120(R11), R13 - VMOVDQU Y5, (R13)(R12*1) - MOVQ 144(R11), R13 - VMOVDQU Y6, (R13)(R12*1) - - // Prepare for next loop - ADDQ $0x20, R12 - DECQ AX - JNZ mulAvxTwo_7x7Xor_loop - VZEROUPPER - -mulAvxTwo_7x7Xor_end: - RET - -// func mulAvxTwo_7x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x8(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 125 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_7x8_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ start+72(FP), R12 - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, R9 - ADDQ R12, R10 - ADDQ R12, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X8 - VPBROADCASTB X8, Y8 - -mulAvxTwo_7x8_loop: - // Load and process 32 bytes from input 0 to 8 outputs - VMOVDQU (BX), Y11 - ADDQ $0x20, BX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU (CX), Y9 - VMOVDQU 32(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y0 - VMOVDQU 64(CX), Y9 - VMOVDQU 96(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y1 - VMOVDQU 128(CX), Y9 - VMOVDQU 160(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y2 - VMOVDQU 192(CX), Y9 - VMOVDQU 224(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y3 - VMOVDQU 256(CX), Y9 - VMOVDQU 288(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y4 - VMOVDQU 320(CX), Y9 - VMOVDQU 352(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y5 - VMOVDQU 384(CX), Y9 - VMOVDQU 416(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y6 - VMOVDQU 448(CX), Y9 - VMOVDQU 480(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y7 - - // Load and process 32 bytes from input 1 to 8 outputs - VMOVDQU (SI), Y11 - ADDQ $0x20, SI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 512(CX), Y9 - VMOVDQU 544(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 576(CX), Y9 - VMOVDQU 608(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y9 - VMOVDQU 672(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 704(CX), Y9 - VMOVDQU 736(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 768(CX), Y9 - VMOVDQU 800(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 832(CX), Y9 - VMOVDQU 864(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 896(CX), Y9 - VMOVDQU 928(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 960(CX), Y9 - VMOVDQU 992(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 2 to 8 outputs - VMOVDQU (DI), Y11 - ADDQ $0x20, DI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1024(CX), Y9 - VMOVDQU 1056(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1088(CX), Y9 - VMOVDQU 1120(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1152(CX), Y9 - VMOVDQU 1184(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1216(CX), Y9 - VMOVDQU 1248(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y9 - VMOVDQU 1312(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1344(CX), Y9 - VMOVDQU 1376(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1408(CX), Y9 - VMOVDQU 1440(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1472(CX), Y9 - VMOVDQU 1504(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 3 to 8 outputs - VMOVDQU (R8), Y11 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1536(CX), Y9 - VMOVDQU 1568(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1600(CX), Y9 - VMOVDQU 1632(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1664(CX), Y9 - VMOVDQU 1696(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1728(CX), Y9 - VMOVDQU 1760(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1792(CX), Y9 - VMOVDQU 1824(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1856(CX), Y9 - VMOVDQU 1888(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1920(CX), Y9 - VMOVDQU 1952(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1984(CX), Y9 - VMOVDQU 2016(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 4 to 8 outputs - VMOVDQU (R9), Y11 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 2048(CX), Y9 - VMOVDQU 2080(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 2112(CX), Y9 - VMOVDQU 2144(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 2176(CX), Y9 - VMOVDQU 2208(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 2240(CX), Y9 - VMOVDQU 2272(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 2304(CX), Y9 - VMOVDQU 2336(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 2368(CX), Y9 - VMOVDQU 2400(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 2432(CX), Y9 - VMOVDQU 2464(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 2496(CX), Y9 - VMOVDQU 2528(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 5 to 8 outputs - VMOVDQU (R10), Y11 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 2560(CX), Y9 - VMOVDQU 2592(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 2624(CX), Y9 - VMOVDQU 2656(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 2688(CX), Y9 - VMOVDQU 2720(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 2752(CX), Y9 - VMOVDQU 2784(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 2816(CX), Y9 - VMOVDQU 2848(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 2880(CX), Y9 - VMOVDQU 2912(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 2944(CX), Y9 - VMOVDQU 2976(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 3008(CX), Y9 - VMOVDQU 3040(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 6 to 8 outputs - VMOVDQU (DX), Y11 - ADDQ $0x20, DX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 3072(CX), Y9 - VMOVDQU 3104(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 3136(CX), Y9 - VMOVDQU 3168(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 3200(CX), Y9 - VMOVDQU 3232(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 3264(CX), Y9 - VMOVDQU 3296(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 3328(CX), Y9 - VMOVDQU 3360(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 3392(CX), Y9 - VMOVDQU 3424(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 3456(CX), Y9 - VMOVDQU 3488(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 3520(CX), Y9 - VMOVDQU 3552(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Store 8 outputs - MOVQ (R11), R13 - VMOVDQU Y0, (R13)(R12*1) - MOVQ 24(R11), R13 - VMOVDQU Y1, (R13)(R12*1) - MOVQ 48(R11), R13 - VMOVDQU Y2, (R13)(R12*1) - MOVQ 72(R11), R13 - VMOVDQU Y3, (R13)(R12*1) - MOVQ 96(R11), R13 - VMOVDQU Y4, (R13)(R12*1) - MOVQ 120(R11), R13 - VMOVDQU Y5, (R13)(R12*1) - MOVQ 144(R11), R13 - VMOVDQU Y6, (R13)(R12*1) - MOVQ 168(R11), R13 - VMOVDQU Y7, (R13)(R12*1) - - // Prepare for next loop - ADDQ $0x20, R12 - DECQ AX - JNZ mulAvxTwo_7x8_loop - VZEROUPPER - -mulAvxTwo_7x8_end: - RET - -// func mulAvxTwo_7x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x8Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 125 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_7x8Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ start+72(FP), R12 - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, R9 - ADDQ R12, R10 - ADDQ R12, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X8 - VPBROADCASTB X8, Y8 - -mulAvxTwo_7x8Xor_loop: - // Load and process 32 bytes from input 0 to 8 outputs - VMOVDQU (BX), Y11 - ADDQ $0x20, BX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - MOVQ (R11), R13 - VMOVDQU (R13)(R12*1), Y0 - VMOVDQU (CX), Y9 - VMOVDQU 32(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - MOVQ 24(R11), R13 - VMOVDQU (R13)(R12*1), Y1 - VMOVDQU 64(CX), Y9 - VMOVDQU 96(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - MOVQ 48(R11), R13 - VMOVDQU (R13)(R12*1), Y2 - VMOVDQU 128(CX), Y9 - VMOVDQU 160(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - MOVQ 72(R11), R13 - VMOVDQU (R13)(R12*1), Y3 - VMOVDQU 192(CX), Y9 - VMOVDQU 224(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - MOVQ 96(R11), R13 - VMOVDQU (R13)(R12*1), Y4 - VMOVDQU 256(CX), Y9 - VMOVDQU 288(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - MOVQ 120(R11), R13 - VMOVDQU (R13)(R12*1), Y5 - VMOVDQU 320(CX), Y9 - VMOVDQU 352(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - MOVQ 144(R11), R13 - VMOVDQU (R13)(R12*1), Y6 - VMOVDQU 384(CX), Y9 - VMOVDQU 416(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - MOVQ 168(R11), R13 - VMOVDQU (R13)(R12*1), Y7 - VMOVDQU 448(CX), Y9 - VMOVDQU 480(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 1 to 8 outputs - VMOVDQU (SI), Y11 - ADDQ $0x20, SI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 512(CX), Y9 - VMOVDQU 544(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 576(CX), Y9 - VMOVDQU 608(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y9 - VMOVDQU 672(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 704(CX), Y9 - VMOVDQU 736(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 768(CX), Y9 - VMOVDQU 800(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 832(CX), Y9 - VMOVDQU 864(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 896(CX), Y9 - VMOVDQU 928(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 960(CX), Y9 - VMOVDQU 992(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 2 to 8 outputs - VMOVDQU (DI), Y11 - ADDQ $0x20, DI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1024(CX), Y9 - VMOVDQU 1056(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1088(CX), Y9 - VMOVDQU 1120(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1152(CX), Y9 - VMOVDQU 1184(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1216(CX), Y9 - VMOVDQU 1248(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y9 - VMOVDQU 1312(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1344(CX), Y9 - VMOVDQU 1376(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1408(CX), Y9 - VMOVDQU 1440(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1472(CX), Y9 - VMOVDQU 1504(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 3 to 8 outputs - VMOVDQU (R8), Y11 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1536(CX), Y9 - VMOVDQU 1568(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1600(CX), Y9 - VMOVDQU 1632(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1664(CX), Y9 - VMOVDQU 1696(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1728(CX), Y9 - VMOVDQU 1760(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1792(CX), Y9 - VMOVDQU 1824(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1856(CX), Y9 - VMOVDQU 1888(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1920(CX), Y9 - VMOVDQU 1952(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1984(CX), Y9 - VMOVDQU 2016(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 4 to 8 outputs - VMOVDQU (R9), Y11 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 2048(CX), Y9 - VMOVDQU 2080(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 2112(CX), Y9 - VMOVDQU 2144(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 2176(CX), Y9 - VMOVDQU 2208(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 2240(CX), Y9 - VMOVDQU 2272(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 2304(CX), Y9 - VMOVDQU 2336(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 2368(CX), Y9 - VMOVDQU 2400(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 2432(CX), Y9 - VMOVDQU 2464(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 2496(CX), Y9 - VMOVDQU 2528(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 5 to 8 outputs - VMOVDQU (R10), Y11 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 2560(CX), Y9 - VMOVDQU 2592(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 2624(CX), Y9 - VMOVDQU 2656(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 2688(CX), Y9 - VMOVDQU 2720(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 2752(CX), Y9 - VMOVDQU 2784(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 2816(CX), Y9 - VMOVDQU 2848(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 2880(CX), Y9 - VMOVDQU 2912(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 2944(CX), Y9 - VMOVDQU 2976(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 3008(CX), Y9 - VMOVDQU 3040(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 6 to 8 outputs - VMOVDQU (DX), Y11 - ADDQ $0x20, DX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 3072(CX), Y9 - VMOVDQU 3104(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 3136(CX), Y9 - VMOVDQU 3168(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 3200(CX), Y9 - VMOVDQU 3232(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 3264(CX), Y9 - VMOVDQU 3296(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 3328(CX), Y9 - VMOVDQU 3360(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 3392(CX), Y9 - VMOVDQU 3424(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 3456(CX), Y9 - VMOVDQU 3488(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 3520(CX), Y9 - VMOVDQU 3552(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Store 8 outputs - MOVQ (R11), R13 - VMOVDQU Y0, (R13)(R12*1) - MOVQ 24(R11), R13 - VMOVDQU Y1, (R13)(R12*1) - MOVQ 48(R11), R13 - VMOVDQU Y2, (R13)(R12*1) - MOVQ 72(R11), R13 - VMOVDQU Y3, (R13)(R12*1) - MOVQ 96(R11), R13 - VMOVDQU Y4, (R13)(R12*1) - MOVQ 120(R11), R13 - VMOVDQU Y5, (R13)(R12*1) - MOVQ 144(R11), R13 - VMOVDQU Y6, (R13)(R12*1) - MOVQ 168(R11), R13 - VMOVDQU Y7, (R13)(R12*1) - - // Prepare for next loop - ADDQ $0x20, R12 - DECQ AX - JNZ mulAvxTwo_7x8Xor_loop - VZEROUPPER - -mulAvxTwo_7x8Xor_end: - RET - -// func mulAvxTwo_7x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x9(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 140 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_7x9_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ start+72(FP), R12 - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, R9 - ADDQ R12, R10 - ADDQ R12, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X9 - VPBROADCASTB X9, Y9 - -mulAvxTwo_7x9_loop: - // Load and process 32 bytes from input 0 to 9 outputs - VMOVDQU (BX), Y12 - ADDQ $0x20, BX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU (CX), Y10 - VMOVDQU 32(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y0 - VMOVDQU 64(CX), Y10 - VMOVDQU 96(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y1 - VMOVDQU 128(CX), Y10 - VMOVDQU 160(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y2 - VMOVDQU 192(CX), Y10 - VMOVDQU 224(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y3 - VMOVDQU 256(CX), Y10 - VMOVDQU 288(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y4 - VMOVDQU 320(CX), Y10 - VMOVDQU 352(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y5 - VMOVDQU 384(CX), Y10 - VMOVDQU 416(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y6 - VMOVDQU 448(CX), Y10 - VMOVDQU 480(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y7 - VMOVDQU 512(CX), Y10 - VMOVDQU 544(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y8 - - // Load and process 32 bytes from input 1 to 9 outputs - VMOVDQU (SI), Y12 - ADDQ $0x20, SI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 576(CX), Y10 - VMOVDQU 608(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 640(CX), Y10 - VMOVDQU 672(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 704(CX), Y10 - VMOVDQU 736(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 768(CX), Y10 - VMOVDQU 800(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 832(CX), Y10 - VMOVDQU 864(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 896(CX), Y10 - VMOVDQU 928(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 960(CX), Y10 - VMOVDQU 992(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1024(CX), Y10 - VMOVDQU 1056(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1088(CX), Y10 - VMOVDQU 1120(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 2 to 9 outputs - VMOVDQU (DI), Y12 - ADDQ $0x20, DI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1152(CX), Y10 - VMOVDQU 1184(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1216(CX), Y10 - VMOVDQU 1248(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1280(CX), Y10 - VMOVDQU 1312(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1344(CX), Y10 - VMOVDQU 1376(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1408(CX), Y10 - VMOVDQU 1440(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 1472(CX), Y10 - VMOVDQU 1504(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 1536(CX), Y10 - VMOVDQU 1568(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1600(CX), Y10 - VMOVDQU 1632(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1664(CX), Y10 - VMOVDQU 1696(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 3 to 9 outputs - VMOVDQU (R8), Y12 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1728(CX), Y10 - VMOVDQU 1760(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1792(CX), Y10 - VMOVDQU 1824(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1856(CX), Y10 - VMOVDQU 1888(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1920(CX), Y10 - VMOVDQU 1952(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1984(CX), Y10 - VMOVDQU 2016(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2048(CX), Y10 - VMOVDQU 2080(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2112(CX), Y10 - VMOVDQU 2144(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2176(CX), Y10 - VMOVDQU 2208(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2240(CX), Y10 - VMOVDQU 2272(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 4 to 9 outputs - VMOVDQU (R9), Y12 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 2304(CX), Y10 - VMOVDQU 2336(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 2368(CX), Y10 - VMOVDQU 2400(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 2432(CX), Y10 - VMOVDQU 2464(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 2496(CX), Y10 - VMOVDQU 2528(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 2560(CX), Y10 - VMOVDQU 2592(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2624(CX), Y10 - VMOVDQU 2656(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2688(CX), Y10 - VMOVDQU 2720(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2752(CX), Y10 - VMOVDQU 2784(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2816(CX), Y10 - VMOVDQU 2848(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 5 to 9 outputs - VMOVDQU (R10), Y12 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 2880(CX), Y10 - VMOVDQU 2912(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 2944(CX), Y10 - VMOVDQU 2976(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 3008(CX), Y10 - VMOVDQU 3040(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 3072(CX), Y10 - VMOVDQU 3104(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 3136(CX), Y10 - VMOVDQU 3168(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 3200(CX), Y10 - VMOVDQU 3232(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 3264(CX), Y10 - VMOVDQU 3296(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 3328(CX), Y10 - VMOVDQU 3360(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 3392(CX), Y10 - VMOVDQU 3424(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 6 to 9 outputs - VMOVDQU (DX), Y12 - ADDQ $0x20, DX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 3456(CX), Y10 - VMOVDQU 3488(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 3520(CX), Y10 - VMOVDQU 3552(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 3584(CX), Y10 - VMOVDQU 3616(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 3648(CX), Y10 - VMOVDQU 3680(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 3712(CX), Y10 - VMOVDQU 3744(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 3776(CX), Y10 - VMOVDQU 3808(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 3840(CX), Y10 - VMOVDQU 3872(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 3904(CX), Y10 - VMOVDQU 3936(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 3968(CX), Y10 - VMOVDQU 4000(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Store 9 outputs - MOVQ (R11), R13 - VMOVDQU Y0, (R13)(R12*1) - MOVQ 24(R11), R13 - VMOVDQU Y1, (R13)(R12*1) - MOVQ 48(R11), R13 - VMOVDQU Y2, (R13)(R12*1) - MOVQ 72(R11), R13 - VMOVDQU Y3, (R13)(R12*1) - MOVQ 96(R11), R13 - VMOVDQU Y4, (R13)(R12*1) - MOVQ 120(R11), R13 - VMOVDQU Y5, (R13)(R12*1) - MOVQ 144(R11), R13 - VMOVDQU Y6, (R13)(R12*1) - MOVQ 168(R11), R13 - VMOVDQU Y7, (R13)(R12*1) - MOVQ 192(R11), R13 - VMOVDQU Y8, (R13)(R12*1) - - // Prepare for next loop - ADDQ $0x20, R12 - DECQ AX - JNZ mulAvxTwo_7x9_loop - VZEROUPPER - -mulAvxTwo_7x9_end: - RET - -// func mulAvxTwo_7x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x9Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 140 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_7x9Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ start+72(FP), R12 - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, R9 - ADDQ R12, R10 - ADDQ R12, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X9 - VPBROADCASTB X9, Y9 - -mulAvxTwo_7x9Xor_loop: - // Load and process 32 bytes from input 0 to 9 outputs - VMOVDQU (BX), Y12 - ADDQ $0x20, BX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - MOVQ (R11), R13 - VMOVDQU (R13)(R12*1), Y0 - VMOVDQU (CX), Y10 - VMOVDQU 32(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - MOVQ 24(R11), R13 - VMOVDQU (R13)(R12*1), Y1 - VMOVDQU 64(CX), Y10 - VMOVDQU 96(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - MOVQ 48(R11), R13 - VMOVDQU (R13)(R12*1), Y2 - VMOVDQU 128(CX), Y10 - VMOVDQU 160(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - MOVQ 72(R11), R13 - VMOVDQU (R13)(R12*1), Y3 - VMOVDQU 192(CX), Y10 - VMOVDQU 224(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - MOVQ 96(R11), R13 - VMOVDQU (R13)(R12*1), Y4 - VMOVDQU 256(CX), Y10 - VMOVDQU 288(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - MOVQ 120(R11), R13 - VMOVDQU (R13)(R12*1), Y5 - VMOVDQU 320(CX), Y10 - VMOVDQU 352(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - MOVQ 144(R11), R13 - VMOVDQU (R13)(R12*1), Y6 - VMOVDQU 384(CX), Y10 - VMOVDQU 416(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - MOVQ 168(R11), R13 - VMOVDQU (R13)(R12*1), Y7 - VMOVDQU 448(CX), Y10 - VMOVDQU 480(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - MOVQ 192(R11), R13 - VMOVDQU (R13)(R12*1), Y8 - VMOVDQU 512(CX), Y10 - VMOVDQU 544(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 1 to 9 outputs - VMOVDQU (SI), Y12 - ADDQ $0x20, SI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 576(CX), Y10 - VMOVDQU 608(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 640(CX), Y10 - VMOVDQU 672(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 704(CX), Y10 - VMOVDQU 736(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 768(CX), Y10 - VMOVDQU 800(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 832(CX), Y10 - VMOVDQU 864(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 896(CX), Y10 - VMOVDQU 928(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 960(CX), Y10 - VMOVDQU 992(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1024(CX), Y10 - VMOVDQU 1056(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1088(CX), Y10 - VMOVDQU 1120(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 2 to 9 outputs - VMOVDQU (DI), Y12 - ADDQ $0x20, DI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1152(CX), Y10 - VMOVDQU 1184(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1216(CX), Y10 - VMOVDQU 1248(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1280(CX), Y10 - VMOVDQU 1312(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1344(CX), Y10 - VMOVDQU 1376(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1408(CX), Y10 - VMOVDQU 1440(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 1472(CX), Y10 - VMOVDQU 1504(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 1536(CX), Y10 - VMOVDQU 1568(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1600(CX), Y10 - VMOVDQU 1632(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1664(CX), Y10 - VMOVDQU 1696(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 3 to 9 outputs - VMOVDQU (R8), Y12 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1728(CX), Y10 - VMOVDQU 1760(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1792(CX), Y10 - VMOVDQU 1824(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1856(CX), Y10 - VMOVDQU 1888(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1920(CX), Y10 - VMOVDQU 1952(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1984(CX), Y10 - VMOVDQU 2016(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2048(CX), Y10 - VMOVDQU 2080(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2112(CX), Y10 - VMOVDQU 2144(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2176(CX), Y10 - VMOVDQU 2208(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2240(CX), Y10 - VMOVDQU 2272(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 4 to 9 outputs - VMOVDQU (R9), Y12 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 2304(CX), Y10 - VMOVDQU 2336(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 2368(CX), Y10 - VMOVDQU 2400(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 2432(CX), Y10 - VMOVDQU 2464(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 2496(CX), Y10 - VMOVDQU 2528(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 2560(CX), Y10 - VMOVDQU 2592(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2624(CX), Y10 - VMOVDQU 2656(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2688(CX), Y10 - VMOVDQU 2720(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2752(CX), Y10 - VMOVDQU 2784(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2816(CX), Y10 - VMOVDQU 2848(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 5 to 9 outputs - VMOVDQU (R10), Y12 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 2880(CX), Y10 - VMOVDQU 2912(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 2944(CX), Y10 - VMOVDQU 2976(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 3008(CX), Y10 - VMOVDQU 3040(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 3072(CX), Y10 - VMOVDQU 3104(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 3136(CX), Y10 - VMOVDQU 3168(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 3200(CX), Y10 - VMOVDQU 3232(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 3264(CX), Y10 - VMOVDQU 3296(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 3328(CX), Y10 - VMOVDQU 3360(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 3392(CX), Y10 - VMOVDQU 3424(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 6 to 9 outputs - VMOVDQU (DX), Y12 - ADDQ $0x20, DX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 3456(CX), Y10 - VMOVDQU 3488(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 3520(CX), Y10 - VMOVDQU 3552(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 3584(CX), Y10 - VMOVDQU 3616(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 3648(CX), Y10 - VMOVDQU 3680(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 3712(CX), Y10 - VMOVDQU 3744(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 3776(CX), Y10 - VMOVDQU 3808(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 3840(CX), Y10 - VMOVDQU 3872(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 3904(CX), Y10 - VMOVDQU 3936(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 3968(CX), Y10 - VMOVDQU 4000(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Store 9 outputs - MOVQ (R11), R13 - VMOVDQU Y0, (R13)(R12*1) - MOVQ 24(R11), R13 - VMOVDQU Y1, (R13)(R12*1) - MOVQ 48(R11), R13 - VMOVDQU Y2, (R13)(R12*1) - MOVQ 72(R11), R13 - VMOVDQU Y3, (R13)(R12*1) - MOVQ 96(R11), R13 - VMOVDQU Y4, (R13)(R12*1) - MOVQ 120(R11), R13 - VMOVDQU Y5, (R13)(R12*1) - MOVQ 144(R11), R13 - VMOVDQU Y6, (R13)(R12*1) - MOVQ 168(R11), R13 - VMOVDQU Y7, (R13)(R12*1) - MOVQ 192(R11), R13 - VMOVDQU Y8, (R13)(R12*1) - - // Prepare for next loop - ADDQ $0x20, R12 - DECQ AX - JNZ mulAvxTwo_7x9Xor_loop - VZEROUPPER - -mulAvxTwo_7x9Xor_end: - RET - -// func mulAvxTwo_7x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x10(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 155 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_7x10_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ start+72(FP), R12 - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, R9 - ADDQ R12, R10 - ADDQ R12, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X10 - VPBROADCASTB X10, Y10 - -mulAvxTwo_7x10_loop: - // Load and process 32 bytes from input 0 to 10 outputs - VMOVDQU (BX), Y13 - ADDQ $0x20, BX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU (CX), Y11 - VMOVDQU 32(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y0 - VMOVDQU 64(CX), Y11 - VMOVDQU 96(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y1 - VMOVDQU 128(CX), Y11 - VMOVDQU 160(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y2 - VMOVDQU 192(CX), Y11 - VMOVDQU 224(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y3 - VMOVDQU 256(CX), Y11 - VMOVDQU 288(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y4 - VMOVDQU 320(CX), Y11 - VMOVDQU 352(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y5 - VMOVDQU 384(CX), Y11 - VMOVDQU 416(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y6 - VMOVDQU 448(CX), Y11 - VMOVDQU 480(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y7 - VMOVDQU 512(CX), Y11 - VMOVDQU 544(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y8 - VMOVDQU 576(CX), Y11 - VMOVDQU 608(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y9 - - // Load and process 32 bytes from input 1 to 10 outputs - VMOVDQU (SI), Y13 - ADDQ $0x20, SI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 640(CX), Y11 - VMOVDQU 672(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 704(CX), Y11 - VMOVDQU 736(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 768(CX), Y11 - VMOVDQU 800(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 832(CX), Y11 - VMOVDQU 864(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 896(CX), Y11 - VMOVDQU 928(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 960(CX), Y11 - VMOVDQU 992(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1024(CX), Y11 - VMOVDQU 1056(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1088(CX), Y11 - VMOVDQU 1120(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1152(CX), Y11 - VMOVDQU 1184(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1216(CX), Y11 - VMOVDQU 1248(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 2 to 10 outputs - VMOVDQU (DI), Y13 - ADDQ $0x20, DI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1280(CX), Y11 - VMOVDQU 1312(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1344(CX), Y11 - VMOVDQU 1376(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 1408(CX), Y11 - VMOVDQU 1440(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 1472(CX), Y11 - VMOVDQU 1504(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 1536(CX), Y11 - VMOVDQU 1568(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 1600(CX), Y11 - VMOVDQU 1632(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1664(CX), Y11 - VMOVDQU 1696(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1728(CX), Y11 - VMOVDQU 1760(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1792(CX), Y11 - VMOVDQU 1824(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1856(CX), Y11 - VMOVDQU 1888(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 3 to 10 outputs - VMOVDQU (R8), Y13 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1920(CX), Y11 - VMOVDQU 1952(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1984(CX), Y11 - VMOVDQU 2016(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2048(CX), Y11 - VMOVDQU 2080(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2112(CX), Y11 - VMOVDQU 2144(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2176(CX), Y11 - VMOVDQU 2208(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2240(CX), Y11 - VMOVDQU 2272(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2304(CX), Y11 - VMOVDQU 2336(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 2368(CX), Y11 - VMOVDQU 2400(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 2432(CX), Y11 - VMOVDQU 2464(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 2496(CX), Y11 - VMOVDQU 2528(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 4 to 10 outputs - VMOVDQU (R9), Y13 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 2560(CX), Y11 - VMOVDQU 2592(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 2624(CX), Y11 - VMOVDQU 2656(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2688(CX), Y11 - VMOVDQU 2720(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2752(CX), Y11 - VMOVDQU 2784(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2816(CX), Y11 - VMOVDQU 2848(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2880(CX), Y11 - VMOVDQU 2912(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2944(CX), Y11 - VMOVDQU 2976(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 3008(CX), Y11 - VMOVDQU 3040(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 3072(CX), Y11 - VMOVDQU 3104(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 3136(CX), Y11 - VMOVDQU 3168(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 5 to 10 outputs - VMOVDQU (R10), Y13 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 3200(CX), Y11 - VMOVDQU 3232(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 3264(CX), Y11 - VMOVDQU 3296(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 3328(CX), Y11 - VMOVDQU 3360(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 3392(CX), Y11 - VMOVDQU 3424(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 3456(CX), Y11 - VMOVDQU 3488(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 3520(CX), Y11 - VMOVDQU 3552(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 3584(CX), Y11 - VMOVDQU 3616(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 3648(CX), Y11 - VMOVDQU 3680(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 3712(CX), Y11 - VMOVDQU 3744(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 3776(CX), Y11 - VMOVDQU 3808(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 6 to 10 outputs - VMOVDQU (DX), Y13 - ADDQ $0x20, DX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 3840(CX), Y11 - VMOVDQU 3872(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 3904(CX), Y11 - VMOVDQU 3936(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 3968(CX), Y11 - VMOVDQU 4000(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 4032(CX), Y11 - VMOVDQU 4064(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 4096(CX), Y11 - VMOVDQU 4128(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 4160(CX), Y11 - VMOVDQU 4192(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 4224(CX), Y11 - VMOVDQU 4256(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 4288(CX), Y11 - VMOVDQU 4320(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 4352(CX), Y11 - VMOVDQU 4384(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 4416(CX), Y11 - VMOVDQU 4448(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Store 10 outputs - MOVQ (R11), R13 - VMOVDQU Y0, (R13)(R12*1) - MOVQ 24(R11), R13 - VMOVDQU Y1, (R13)(R12*1) - MOVQ 48(R11), R13 - VMOVDQU Y2, (R13)(R12*1) - MOVQ 72(R11), R13 - VMOVDQU Y3, (R13)(R12*1) - MOVQ 96(R11), R13 - VMOVDQU Y4, (R13)(R12*1) - MOVQ 120(R11), R13 - VMOVDQU Y5, (R13)(R12*1) - MOVQ 144(R11), R13 - VMOVDQU Y6, (R13)(R12*1) - MOVQ 168(R11), R13 - VMOVDQU Y7, (R13)(R12*1) - MOVQ 192(R11), R13 - VMOVDQU Y8, (R13)(R12*1) - MOVQ 216(R11), R13 - VMOVDQU Y9, (R13)(R12*1) - - // Prepare for next loop - ADDQ $0x20, R12 - DECQ AX - JNZ mulAvxTwo_7x10_loop - VZEROUPPER - -mulAvxTwo_7x10_end: - RET - -// func mulAvxTwo_7x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_7x10Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 155 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_7x10Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), DX - MOVQ out_base+48(FP), R11 - MOVQ start+72(FP), R12 - - // Add start offset to input - ADDQ R12, BX - ADDQ R12, SI - ADDQ R12, DI - ADDQ R12, R8 - ADDQ R12, R9 - ADDQ R12, R10 - ADDQ R12, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X10 - VPBROADCASTB X10, Y10 - -mulAvxTwo_7x10Xor_loop: - // Load and process 32 bytes from input 0 to 10 outputs - VMOVDQU (BX), Y13 - ADDQ $0x20, BX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - MOVQ (R11), R13 - VMOVDQU (R13)(R12*1), Y0 - VMOVDQU (CX), Y11 - VMOVDQU 32(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - MOVQ 24(R11), R13 - VMOVDQU (R13)(R12*1), Y1 - VMOVDQU 64(CX), Y11 - VMOVDQU 96(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - MOVQ 48(R11), R13 - VMOVDQU (R13)(R12*1), Y2 - VMOVDQU 128(CX), Y11 - VMOVDQU 160(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - MOVQ 72(R11), R13 - VMOVDQU (R13)(R12*1), Y3 - VMOVDQU 192(CX), Y11 - VMOVDQU 224(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - MOVQ 96(R11), R13 - VMOVDQU (R13)(R12*1), Y4 - VMOVDQU 256(CX), Y11 - VMOVDQU 288(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - MOVQ 120(R11), R13 - VMOVDQU (R13)(R12*1), Y5 - VMOVDQU 320(CX), Y11 - VMOVDQU 352(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - MOVQ 144(R11), R13 - VMOVDQU (R13)(R12*1), Y6 - VMOVDQU 384(CX), Y11 - VMOVDQU 416(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - MOVQ 168(R11), R13 - VMOVDQU (R13)(R12*1), Y7 - VMOVDQU 448(CX), Y11 - VMOVDQU 480(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - MOVQ 192(R11), R13 - VMOVDQU (R13)(R12*1), Y8 - VMOVDQU 512(CX), Y11 - VMOVDQU 544(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - MOVQ 216(R11), R13 - VMOVDQU (R13)(R12*1), Y9 - VMOVDQU 576(CX), Y11 - VMOVDQU 608(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 1 to 10 outputs - VMOVDQU (SI), Y13 - ADDQ $0x20, SI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 640(CX), Y11 - VMOVDQU 672(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 704(CX), Y11 - VMOVDQU 736(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 768(CX), Y11 - VMOVDQU 800(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 832(CX), Y11 - VMOVDQU 864(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 896(CX), Y11 - VMOVDQU 928(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 960(CX), Y11 - VMOVDQU 992(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1024(CX), Y11 - VMOVDQU 1056(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1088(CX), Y11 - VMOVDQU 1120(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1152(CX), Y11 - VMOVDQU 1184(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1216(CX), Y11 - VMOVDQU 1248(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 2 to 10 outputs - VMOVDQU (DI), Y13 - ADDQ $0x20, DI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1280(CX), Y11 - VMOVDQU 1312(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1344(CX), Y11 - VMOVDQU 1376(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 1408(CX), Y11 - VMOVDQU 1440(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 1472(CX), Y11 - VMOVDQU 1504(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 1536(CX), Y11 - VMOVDQU 1568(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 1600(CX), Y11 - VMOVDQU 1632(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1664(CX), Y11 - VMOVDQU 1696(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1728(CX), Y11 - VMOVDQU 1760(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1792(CX), Y11 - VMOVDQU 1824(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1856(CX), Y11 - VMOVDQU 1888(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 3 to 10 outputs - VMOVDQU (R8), Y13 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1920(CX), Y11 - VMOVDQU 1952(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1984(CX), Y11 - VMOVDQU 2016(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2048(CX), Y11 - VMOVDQU 2080(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2112(CX), Y11 - VMOVDQU 2144(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2176(CX), Y11 - VMOVDQU 2208(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2240(CX), Y11 - VMOVDQU 2272(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2304(CX), Y11 - VMOVDQU 2336(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 2368(CX), Y11 - VMOVDQU 2400(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 2432(CX), Y11 - VMOVDQU 2464(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 2496(CX), Y11 - VMOVDQU 2528(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 4 to 10 outputs - VMOVDQU (R9), Y13 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 2560(CX), Y11 - VMOVDQU 2592(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 2624(CX), Y11 - VMOVDQU 2656(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2688(CX), Y11 - VMOVDQU 2720(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2752(CX), Y11 - VMOVDQU 2784(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2816(CX), Y11 - VMOVDQU 2848(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2880(CX), Y11 - VMOVDQU 2912(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2944(CX), Y11 - VMOVDQU 2976(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 3008(CX), Y11 - VMOVDQU 3040(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 3072(CX), Y11 - VMOVDQU 3104(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 3136(CX), Y11 - VMOVDQU 3168(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 5 to 10 outputs - VMOVDQU (R10), Y13 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 3200(CX), Y11 - VMOVDQU 3232(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 3264(CX), Y11 - VMOVDQU 3296(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 3328(CX), Y11 - VMOVDQU 3360(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 3392(CX), Y11 - VMOVDQU 3424(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 3456(CX), Y11 - VMOVDQU 3488(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 3520(CX), Y11 - VMOVDQU 3552(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 3584(CX), Y11 - VMOVDQU 3616(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 3648(CX), Y11 - VMOVDQU 3680(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 3712(CX), Y11 - VMOVDQU 3744(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 3776(CX), Y11 - VMOVDQU 3808(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 6 to 10 outputs - VMOVDQU (DX), Y13 - ADDQ $0x20, DX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 3840(CX), Y11 - VMOVDQU 3872(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 3904(CX), Y11 - VMOVDQU 3936(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 3968(CX), Y11 - VMOVDQU 4000(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 4032(CX), Y11 - VMOVDQU 4064(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 4096(CX), Y11 - VMOVDQU 4128(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 4160(CX), Y11 - VMOVDQU 4192(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 4224(CX), Y11 - VMOVDQU 4256(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 4288(CX), Y11 - VMOVDQU 4320(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 4352(CX), Y11 - VMOVDQU 4384(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 4416(CX), Y11 - VMOVDQU 4448(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Store 10 outputs - MOVQ (R11), R13 - VMOVDQU Y0, (R13)(R12*1) - MOVQ 24(R11), R13 - VMOVDQU Y1, (R13)(R12*1) - MOVQ 48(R11), R13 - VMOVDQU Y2, (R13)(R12*1) - MOVQ 72(R11), R13 - VMOVDQU Y3, (R13)(R12*1) - MOVQ 96(R11), R13 - VMOVDQU Y4, (R13)(R12*1) - MOVQ 120(R11), R13 - VMOVDQU Y5, (R13)(R12*1) - MOVQ 144(R11), R13 - VMOVDQU Y6, (R13)(R12*1) - MOVQ 168(R11), R13 - VMOVDQU Y7, (R13)(R12*1) - MOVQ 192(R11), R13 - VMOVDQU Y8, (R13)(R12*1) - MOVQ 216(R11), R13 - VMOVDQU Y9, (R13)(R12*1) - - // Prepare for next loop - ADDQ $0x20, R12 - DECQ AX - JNZ mulAvxTwo_7x10Xor_loop - VZEROUPPER - -mulAvxTwo_7x10Xor_end: - RET - -// func mulAvxTwo_8x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x1(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 20 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_8x1_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ (R12), R12 - MOVQ start+72(FP), R13 - - // Add start offset to output - ADDQ R13, R12 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X1 - VPBROADCASTB X1, Y1 - -mulAvxTwo_8x1_loop: - // Load and process 32 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y4 - ADDQ $0x20, BX - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU (CX), Y2 - VMOVDQU 32(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y0 - - // Load and process 32 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y4 - ADDQ $0x20, SI - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 2 to 1 outputs - VMOVDQU (DI), Y4 - ADDQ $0x20, DI - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 128(CX), Y2 - VMOVDQU 160(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 3 to 1 outputs - VMOVDQU (R8), Y4 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 192(CX), Y2 - VMOVDQU 224(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 4 to 1 outputs - VMOVDQU (R9), Y4 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 256(CX), Y2 - VMOVDQU 288(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 5 to 1 outputs - VMOVDQU (R10), Y4 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 320(CX), Y2 - VMOVDQU 352(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 6 to 1 outputs - VMOVDQU (R11), Y4 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 384(CX), Y2 - VMOVDQU 416(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 7 to 1 outputs - VMOVDQU (DX), Y4 - ADDQ $0x20, DX - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 448(CX), Y2 - VMOVDQU 480(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Store 1 outputs - VMOVDQU Y0, (R12) - ADDQ $0x20, R12 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_8x1_loop - VZEROUPPER - -mulAvxTwo_8x1_end: - RET - -// func mulAvxTwo_8x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x1_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 38 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_8x1_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ out_base+48(FP), R12 - MOVQ (R12), R12 - MOVQ start+72(FP), R13 - - // Add start offset to output - ADDQ R13, R12 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_8x1_64_loop: - // Load and process 64 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y6 - VMOVDQU 32(BX), Y5 - ADDQ $0x40, BX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y0 - VPXOR Y5, Y6, Y1 - - // Load and process 64 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y6 - VMOVDQU 32(SI), Y5 - ADDQ $0x40, SI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 2 to 1 outputs - VMOVDQU (DI), Y6 - VMOVDQU 32(DI), Y5 - ADDQ $0x40, DI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 3 to 1 outputs - VMOVDQU (R8), Y6 - VMOVDQU 32(R8), Y5 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 4 to 1 outputs - VMOVDQU (R9), Y6 - VMOVDQU 32(R9), Y5 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 5 to 1 outputs - VMOVDQU (R10), Y6 - VMOVDQU 32(R10), Y5 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 6 to 1 outputs - VMOVDQU (R11), Y6 - VMOVDQU 32(R11), Y5 - ADDQ $0x40, R11 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 384(CX), Y3 - VMOVDQU 416(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 7 to 1 outputs - VMOVDQU (DX), Y6 - VMOVDQU 32(DX), Y5 - ADDQ $0x40, DX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 448(CX), Y3 - VMOVDQU 480(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Store 1 outputs - VMOVDQU Y0, (R12) - VMOVDQU Y1, 32(R12) - ADDQ $0x40, R12 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_8x1_64_loop - VZEROUPPER - -mulAvxTwo_8x1_64_end: - RET - -// func mulAvxTwo_8x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x1Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 20 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_8x1Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ (R12), R12 - MOVQ start+72(FP), R13 - - // Add start offset to output - ADDQ R13, R12 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X1 - VPBROADCASTB X1, Y1 - -mulAvxTwo_8x1Xor_loop: - // Load and process 32 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y4 - ADDQ $0x20, BX - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU (R12), Y0 - VMOVDQU (CX), Y2 - VMOVDQU 32(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y4 - ADDQ $0x20, SI - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 2 to 1 outputs - VMOVDQU (DI), Y4 - ADDQ $0x20, DI - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 128(CX), Y2 - VMOVDQU 160(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 3 to 1 outputs - VMOVDQU (R8), Y4 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 192(CX), Y2 - VMOVDQU 224(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 4 to 1 outputs - VMOVDQU (R9), Y4 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 256(CX), Y2 - VMOVDQU 288(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 5 to 1 outputs - VMOVDQU (R10), Y4 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 320(CX), Y2 - VMOVDQU 352(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 6 to 1 outputs - VMOVDQU (R11), Y4 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 384(CX), Y2 - VMOVDQU 416(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 7 to 1 outputs - VMOVDQU (DX), Y4 - ADDQ $0x20, DX - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 448(CX), Y2 - VMOVDQU 480(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Store 1 outputs - VMOVDQU Y0, (R12) - ADDQ $0x20, R12 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_8x1Xor_loop - VZEROUPPER - -mulAvxTwo_8x1Xor_end: - RET - -// func mulAvxTwo_8x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x1_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 38 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_8x1_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ out_base+48(FP), R12 - MOVQ (R12), R12 - MOVQ start+72(FP), R13 - - // Add start offset to output - ADDQ R13, R12 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, DX - MOVQ $0x0000000f, R13 - MOVQ R13, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_8x1_64Xor_loop: - // Load 1 outputs - VMOVDQU (R12), Y0 - VMOVDQU 32(R12), Y1 - - // Load and process 64 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y6 - VMOVDQU 32(BX), Y5 - ADDQ $0x40, BX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y6 - VMOVDQU 32(SI), Y5 - ADDQ $0x40, SI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 2 to 1 outputs - VMOVDQU (DI), Y6 - VMOVDQU 32(DI), Y5 - ADDQ $0x40, DI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 3 to 1 outputs - VMOVDQU (R8), Y6 - VMOVDQU 32(R8), Y5 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 4 to 1 outputs - VMOVDQU (R9), Y6 - VMOVDQU 32(R9), Y5 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 5 to 1 outputs - VMOVDQU (R10), Y6 - VMOVDQU 32(R10), Y5 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 6 to 1 outputs - VMOVDQU (R11), Y6 - VMOVDQU 32(R11), Y5 - ADDQ $0x40, R11 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 384(CX), Y3 - VMOVDQU 416(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 7 to 1 outputs - VMOVDQU (DX), Y6 - VMOVDQU 32(DX), Y5 - ADDQ $0x40, DX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 448(CX), Y3 - VMOVDQU 480(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Store 1 outputs - VMOVDQU Y0, (R12) - VMOVDQU Y1, 32(R12) - ADDQ $0x40, R12 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_8x1_64Xor_loop - VZEROUPPER - -mulAvxTwo_8x1_64Xor_end: - RET - -// func mulAvxTwo_8x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x2(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 39 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_8x2_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ (R12), R13 - MOVQ 24(R12), R12 - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, R13 - ADDQ R14, R12 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_8x2_loop: - // Load and process 32 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y5 - ADDQ $0x20, BX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y0 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y1 - - // Load and process 32 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y5 - ADDQ $0x20, SI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y5 - ADDQ $0x20, DI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y5 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 384(CX), Y3 - VMOVDQU 416(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 448(CX), Y3 - VMOVDQU 480(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 4 to 2 outputs - VMOVDQU (R9), Y5 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 512(CX), Y3 - VMOVDQU 544(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 576(CX), Y3 - VMOVDQU 608(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 5 to 2 outputs - VMOVDQU (R10), Y5 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 640(CX), Y3 - VMOVDQU 672(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 704(CX), Y3 - VMOVDQU 736(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 6 to 2 outputs - VMOVDQU (R11), Y5 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 768(CX), Y3 - VMOVDQU 800(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 832(CX), Y3 - VMOVDQU 864(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 7 to 2 outputs - VMOVDQU (DX), Y5 - ADDQ $0x20, DX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 896(CX), Y3 - VMOVDQU 928(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 960(CX), Y3 - VMOVDQU 992(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Store 2 outputs - VMOVDQU Y0, (R13) - ADDQ $0x20, R13 - VMOVDQU Y1, (R12) - ADDQ $0x20, R12 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_8x2_loop - VZEROUPPER - -mulAvxTwo_8x2_end: - RET - -// func mulAvxTwo_8x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x2_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 73 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_8x2_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ out_base+48(FP), R12 - MOVQ (R12), R13 - MOVQ 24(R12), R12 - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, R13 - ADDQ R14, R12 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_8x2_64_loop: - // Load and process 64 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y9 - VMOVDQU 32(BX), Y11 - ADDQ $0x40, BX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y0 - VPXOR Y7, Y8, Y1 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y2 - VPXOR Y7, Y8, Y3 - - // Load and process 64 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y9 - VMOVDQU 32(SI), Y11 - ADDQ $0x40, SI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y9 - VMOVDQU 32(DI), Y11 - ADDQ $0x40, DI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y9 - VMOVDQU 32(R8), Y11 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 4 to 2 outputs - VMOVDQU (R9), Y9 - VMOVDQU 32(R9), Y11 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 5 to 2 outputs - VMOVDQU (R10), Y9 - VMOVDQU 32(R10), Y11 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 6 to 2 outputs - VMOVDQU (R11), Y9 - VMOVDQU 32(R11), Y11 - ADDQ $0x40, R11 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 768(CX), Y5 - VMOVDQU 800(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 832(CX), Y5 - VMOVDQU 864(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 7 to 2 outputs - VMOVDQU (DX), Y9 - VMOVDQU 32(DX), Y11 - ADDQ $0x40, DX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 896(CX), Y5 - VMOVDQU 928(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 960(CX), Y5 - VMOVDQU 992(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Store 2 outputs - VMOVDQU Y0, (R13) - VMOVDQU Y1, 32(R13) - ADDQ $0x40, R13 - VMOVDQU Y2, (R12) - VMOVDQU Y3, 32(R12) - ADDQ $0x40, R12 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_8x2_64_loop - VZEROUPPER - -mulAvxTwo_8x2_64_end: - RET - -// func mulAvxTwo_8x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x2Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 39 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_8x2Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ (R12), R13 - MOVQ 24(R12), R12 - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, R13 - ADDQ R14, R12 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_8x2Xor_loop: - // Load and process 32 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y5 - ADDQ $0x20, BX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU (R13), Y0 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU (R12), Y1 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y5 - ADDQ $0x20, SI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y5 - ADDQ $0x20, DI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y5 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 384(CX), Y3 - VMOVDQU 416(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 448(CX), Y3 - VMOVDQU 480(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 4 to 2 outputs - VMOVDQU (R9), Y5 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 512(CX), Y3 - VMOVDQU 544(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 576(CX), Y3 - VMOVDQU 608(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 5 to 2 outputs - VMOVDQU (R10), Y5 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 640(CX), Y3 - VMOVDQU 672(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 704(CX), Y3 - VMOVDQU 736(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 6 to 2 outputs - VMOVDQU (R11), Y5 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 768(CX), Y3 - VMOVDQU 800(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 832(CX), Y3 - VMOVDQU 864(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 7 to 2 outputs - VMOVDQU (DX), Y5 - ADDQ $0x20, DX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 896(CX), Y3 - VMOVDQU 928(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 960(CX), Y3 - VMOVDQU 992(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Store 2 outputs - VMOVDQU Y0, (R13) - ADDQ $0x20, R13 - VMOVDQU Y1, (R12) - ADDQ $0x20, R12 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_8x2Xor_loop - VZEROUPPER - -mulAvxTwo_8x2Xor_end: - RET - -// func mulAvxTwo_8x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x2_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 73 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_8x2_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ out_base+48(FP), R12 - MOVQ (R12), R13 - MOVQ 24(R12), R12 - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, R13 - ADDQ R14, R12 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_8x2_64Xor_loop: - // Load 2 outputs - VMOVDQU (R13), Y0 - VMOVDQU 32(R13), Y1 - VMOVDQU (R12), Y2 - VMOVDQU 32(R12), Y3 - - // Load and process 64 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y9 - VMOVDQU 32(BX), Y11 - ADDQ $0x40, BX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y9 - VMOVDQU 32(SI), Y11 - ADDQ $0x40, SI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y9 - VMOVDQU 32(DI), Y11 - ADDQ $0x40, DI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y9 - VMOVDQU 32(R8), Y11 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 4 to 2 outputs - VMOVDQU (R9), Y9 - VMOVDQU 32(R9), Y11 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 5 to 2 outputs - VMOVDQU (R10), Y9 - VMOVDQU 32(R10), Y11 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 6 to 2 outputs - VMOVDQU (R11), Y9 - VMOVDQU 32(R11), Y11 - ADDQ $0x40, R11 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 768(CX), Y5 - VMOVDQU 800(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 832(CX), Y5 - VMOVDQU 864(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 7 to 2 outputs - VMOVDQU (DX), Y9 - VMOVDQU 32(DX), Y11 - ADDQ $0x40, DX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 896(CX), Y5 - VMOVDQU 928(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 960(CX), Y5 - VMOVDQU 992(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Store 2 outputs - VMOVDQU Y0, (R13) - VMOVDQU Y1, 32(R13) - ADDQ $0x40, R13 - VMOVDQU Y2, (R12) - VMOVDQU Y3, 32(R12) - ADDQ $0x40, R12 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_8x2_64Xor_loop - VZEROUPPER - -mulAvxTwo_8x2_64Xor_end: - RET - -// func mulAvxTwo_8x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x3(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 56 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_8x3_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ (R12), R13 - MOVQ 24(R12), R14 - MOVQ 48(R12), R12 - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, R13 - ADDQ R15, R14 - ADDQ R15, R12 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X3 - VPBROADCASTB X3, Y3 - -mulAvxTwo_8x3_loop: - // Load and process 32 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y6 - ADDQ $0x20, BX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU (CX), Y4 - VMOVDQU 32(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y0 - VMOVDQU 64(CX), Y4 - VMOVDQU 96(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y1 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y2 - - // Load and process 32 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y6 - ADDQ $0x20, SI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 192(CX), Y4 - VMOVDQU 224(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 256(CX), Y4 - VMOVDQU 288(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 320(CX), Y4 - VMOVDQU 352(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y6 - ADDQ $0x20, DI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 384(CX), Y4 - VMOVDQU 416(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 448(CX), Y4 - VMOVDQU 480(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 512(CX), Y4 - VMOVDQU 544(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 3 to 3 outputs - VMOVDQU (R8), Y6 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 576(CX), Y4 - VMOVDQU 608(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 640(CX), Y4 - VMOVDQU 672(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 704(CX), Y4 - VMOVDQU 736(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 4 to 3 outputs - VMOVDQU (R9), Y6 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 768(CX), Y4 - VMOVDQU 800(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 832(CX), Y4 - VMOVDQU 864(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 896(CX), Y4 - VMOVDQU 928(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 5 to 3 outputs - VMOVDQU (R10), Y6 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 960(CX), Y4 - VMOVDQU 992(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1024(CX), Y4 - VMOVDQU 1056(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1088(CX), Y4 - VMOVDQU 1120(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 6 to 3 outputs - VMOVDQU (R11), Y6 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 1152(CX), Y4 - VMOVDQU 1184(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1216(CX), Y4 - VMOVDQU 1248(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1280(CX), Y4 - VMOVDQU 1312(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 7 to 3 outputs - VMOVDQU (DX), Y6 - ADDQ $0x20, DX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 1344(CX), Y4 - VMOVDQU 1376(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1408(CX), Y4 - VMOVDQU 1440(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1472(CX), Y4 - VMOVDQU 1504(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Store 3 outputs - VMOVDQU Y0, (R13) - ADDQ $0x20, R13 - VMOVDQU Y1, (R14) - ADDQ $0x20, R14 - VMOVDQU Y2, (R12) - ADDQ $0x20, R12 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_8x3_loop - VZEROUPPER - -mulAvxTwo_8x3_end: - RET - -// func mulAvxTwo_8x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x3_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 106 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_8x3_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ out_base+48(FP), R12 - MOVQ (R12), R13 - MOVQ 24(R12), R14 - MOVQ 48(R12), R12 - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, R13 - ADDQ R15, R14 - ADDQ R15, R12 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_8x3_64_loop: - // Load and process 64 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y11 - VMOVDQU 32(BX), Y13 - ADDQ $0x40, BX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y0 - VPXOR Y9, Y10, Y1 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y2 - VPXOR Y9, Y10, Y3 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y4 - VPXOR Y9, Y10, Y5 - - // Load and process 64 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y11 - VMOVDQU 32(SI), Y13 - ADDQ $0x40, SI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y11 - VMOVDQU 32(DI), Y13 - ADDQ $0x40, DI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 3 to 3 outputs - VMOVDQU (R8), Y11 - VMOVDQU 32(R8), Y13 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 4 to 3 outputs - VMOVDQU (R9), Y11 - VMOVDQU 32(R9), Y13 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 5 to 3 outputs - VMOVDQU (R10), Y11 - VMOVDQU 32(R10), Y13 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 6 to 3 outputs - VMOVDQU (R11), Y11 - VMOVDQU 32(R11), Y13 - ADDQ $0x40, R11 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 1152(CX), Y7 - VMOVDQU 1184(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1216(CX), Y7 - VMOVDQU 1248(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y7 - VMOVDQU 1312(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 7 to 3 outputs - VMOVDQU (DX), Y11 - VMOVDQU 32(DX), Y13 - ADDQ $0x40, DX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 1344(CX), Y7 - VMOVDQU 1376(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1408(CX), Y7 - VMOVDQU 1440(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1472(CX), Y7 - VMOVDQU 1504(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Store 3 outputs - VMOVDQU Y0, (R13) - VMOVDQU Y1, 32(R13) - ADDQ $0x40, R13 - VMOVDQU Y2, (R14) - VMOVDQU Y3, 32(R14) - ADDQ $0x40, R14 - VMOVDQU Y4, (R12) - VMOVDQU Y5, 32(R12) - ADDQ $0x40, R12 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_8x3_64_loop - VZEROUPPER - -mulAvxTwo_8x3_64_end: - RET - -// func mulAvxTwo_8x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x3Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 56 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_8x3Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ (R12), R13 - MOVQ 24(R12), R14 - MOVQ 48(R12), R12 - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, R13 - ADDQ R15, R14 - ADDQ R15, R12 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X3 - VPBROADCASTB X3, Y3 - -mulAvxTwo_8x3Xor_loop: - // Load and process 32 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y6 - ADDQ $0x20, BX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU (R13), Y0 - VMOVDQU (CX), Y4 - VMOVDQU 32(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU (R14), Y1 - VMOVDQU 64(CX), Y4 - VMOVDQU 96(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU (R12), Y2 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y6 - ADDQ $0x20, SI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 192(CX), Y4 - VMOVDQU 224(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 256(CX), Y4 - VMOVDQU 288(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 320(CX), Y4 - VMOVDQU 352(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y6 - ADDQ $0x20, DI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 384(CX), Y4 - VMOVDQU 416(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 448(CX), Y4 - VMOVDQU 480(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 512(CX), Y4 - VMOVDQU 544(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 3 to 3 outputs - VMOVDQU (R8), Y6 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 576(CX), Y4 - VMOVDQU 608(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 640(CX), Y4 - VMOVDQU 672(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 704(CX), Y4 - VMOVDQU 736(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 4 to 3 outputs - VMOVDQU (R9), Y6 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 768(CX), Y4 - VMOVDQU 800(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 832(CX), Y4 - VMOVDQU 864(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 896(CX), Y4 - VMOVDQU 928(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 5 to 3 outputs - VMOVDQU (R10), Y6 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 960(CX), Y4 - VMOVDQU 992(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1024(CX), Y4 - VMOVDQU 1056(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1088(CX), Y4 - VMOVDQU 1120(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 6 to 3 outputs - VMOVDQU (R11), Y6 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 1152(CX), Y4 - VMOVDQU 1184(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1216(CX), Y4 - VMOVDQU 1248(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1280(CX), Y4 - VMOVDQU 1312(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 7 to 3 outputs - VMOVDQU (DX), Y6 - ADDQ $0x20, DX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 1344(CX), Y4 - VMOVDQU 1376(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1408(CX), Y4 - VMOVDQU 1440(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1472(CX), Y4 - VMOVDQU 1504(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Store 3 outputs - VMOVDQU Y0, (R13) - ADDQ $0x20, R13 - VMOVDQU Y1, (R14) - ADDQ $0x20, R14 - VMOVDQU Y2, (R12) - ADDQ $0x20, R12 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_8x3Xor_loop - VZEROUPPER - -mulAvxTwo_8x3Xor_end: - RET - -// func mulAvxTwo_8x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x3_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 106 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_8x3_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ out_base+48(FP), R12 - MOVQ (R12), R13 - MOVQ 24(R12), R14 - MOVQ 48(R12), R12 - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, R13 - ADDQ R15, R14 - ADDQ R15, R12 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_8x3_64Xor_loop: - // Load 3 outputs - VMOVDQU (R13), Y0 - VMOVDQU 32(R13), Y1 - VMOVDQU (R14), Y2 - VMOVDQU 32(R14), Y3 - VMOVDQU (R12), Y4 - VMOVDQU 32(R12), Y5 - - // Load and process 64 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y11 - VMOVDQU 32(BX), Y13 - ADDQ $0x40, BX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y11 - VMOVDQU 32(SI), Y13 - ADDQ $0x40, SI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y11 - VMOVDQU 32(DI), Y13 - ADDQ $0x40, DI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 3 to 3 outputs - VMOVDQU (R8), Y11 - VMOVDQU 32(R8), Y13 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 4 to 3 outputs - VMOVDQU (R9), Y11 - VMOVDQU 32(R9), Y13 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 5 to 3 outputs - VMOVDQU (R10), Y11 - VMOVDQU 32(R10), Y13 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 6 to 3 outputs - VMOVDQU (R11), Y11 - VMOVDQU 32(R11), Y13 - ADDQ $0x40, R11 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 1152(CX), Y7 - VMOVDQU 1184(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1216(CX), Y7 - VMOVDQU 1248(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y7 - VMOVDQU 1312(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 7 to 3 outputs - VMOVDQU (DX), Y11 - VMOVDQU 32(DX), Y13 - ADDQ $0x40, DX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 1344(CX), Y7 - VMOVDQU 1376(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1408(CX), Y7 - VMOVDQU 1440(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1472(CX), Y7 - VMOVDQU 1504(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Store 3 outputs - VMOVDQU Y0, (R13) - VMOVDQU Y1, 32(R13) - ADDQ $0x40, R13 - VMOVDQU Y2, (R14) - VMOVDQU Y3, 32(R14) - ADDQ $0x40, R14 - VMOVDQU Y4, (R12) - VMOVDQU Y5, 32(R12) - ADDQ $0x40, R12 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_8x3_64Xor_loop - VZEROUPPER - -mulAvxTwo_8x3_64Xor_end: - RET - -// func mulAvxTwo_8x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x4(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 73 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_8x4_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ (R12), R13 - MOVQ 24(R12), R14 - MOVQ 48(R12), R15 - MOVQ 72(R12), R12 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R12 - - // Add start offset to input - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, DX - MOVQ $0x0000000f, BP - MOVQ BP, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_8x4_loop: - // Load and process 32 bytes from input 0 to 4 outputs - VMOVDQU (BX), Y7 - ADDQ $0x20, BX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y0 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y1 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y2 - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y3 - - // Load and process 32 bytes from input 1 to 4 outputs - VMOVDQU (SI), Y7 - ADDQ $0x20, SI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 2 to 4 outputs - VMOVDQU (DI), Y7 - ADDQ $0x20, DI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 3 to 4 outputs - VMOVDQU (R8), Y7 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 768(CX), Y5 - VMOVDQU 800(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 832(CX), Y5 - VMOVDQU 864(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 896(CX), Y5 - VMOVDQU 928(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 960(CX), Y5 - VMOVDQU 992(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 4 to 4 outputs - VMOVDQU (R9), Y7 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1024(CX), Y5 - VMOVDQU 1056(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1088(CX), Y5 - VMOVDQU 1120(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1152(CX), Y5 - VMOVDQU 1184(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1216(CX), Y5 - VMOVDQU 1248(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 5 to 4 outputs - VMOVDQU (R10), Y7 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1280(CX), Y5 - VMOVDQU 1312(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1344(CX), Y5 - VMOVDQU 1376(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1408(CX), Y5 - VMOVDQU 1440(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1472(CX), Y5 - VMOVDQU 1504(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 6 to 4 outputs - VMOVDQU (R11), Y7 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1536(CX), Y5 - VMOVDQU 1568(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1600(CX), Y5 - VMOVDQU 1632(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1664(CX), Y5 - VMOVDQU 1696(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1728(CX), Y5 - VMOVDQU 1760(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 7 to 4 outputs - VMOVDQU (DX), Y7 - ADDQ $0x20, DX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1792(CX), Y5 - VMOVDQU 1824(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1856(CX), Y5 - VMOVDQU 1888(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1920(CX), Y5 - VMOVDQU 1952(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1984(CX), Y5 - VMOVDQU 2016(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Store 4 outputs - VMOVDQU Y0, (R13) - ADDQ $0x20, R13 - VMOVDQU Y1, (R14) - ADDQ $0x20, R14 - VMOVDQU Y2, (R15) - ADDQ $0x20, R15 - VMOVDQU Y3, (R12) - ADDQ $0x20, R12 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_8x4_loop - VZEROUPPER - -mulAvxTwo_8x4_end: - RET - -// func mulAvxTwo_8x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x4Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 73 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_8x4Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ (R12), R13 - MOVQ 24(R12), R14 - MOVQ 48(R12), R15 - MOVQ 72(R12), R12 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R12 - - // Add start offset to input - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, DX - MOVQ $0x0000000f, BP - MOVQ BP, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_8x4Xor_loop: - // Load and process 32 bytes from input 0 to 4 outputs - VMOVDQU (BX), Y7 - ADDQ $0x20, BX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU (R13), Y0 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU (R14), Y1 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU (R15), Y2 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU (R12), Y3 - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 1 to 4 outputs - VMOVDQU (SI), Y7 - ADDQ $0x20, SI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 2 to 4 outputs - VMOVDQU (DI), Y7 - ADDQ $0x20, DI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 3 to 4 outputs - VMOVDQU (R8), Y7 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 768(CX), Y5 - VMOVDQU 800(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 832(CX), Y5 - VMOVDQU 864(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 896(CX), Y5 - VMOVDQU 928(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 960(CX), Y5 - VMOVDQU 992(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 4 to 4 outputs - VMOVDQU (R9), Y7 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1024(CX), Y5 - VMOVDQU 1056(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1088(CX), Y5 - VMOVDQU 1120(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1152(CX), Y5 - VMOVDQU 1184(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1216(CX), Y5 - VMOVDQU 1248(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 5 to 4 outputs - VMOVDQU (R10), Y7 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1280(CX), Y5 - VMOVDQU 1312(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1344(CX), Y5 - VMOVDQU 1376(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1408(CX), Y5 - VMOVDQU 1440(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1472(CX), Y5 - VMOVDQU 1504(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 6 to 4 outputs - VMOVDQU (R11), Y7 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1536(CX), Y5 - VMOVDQU 1568(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1600(CX), Y5 - VMOVDQU 1632(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1664(CX), Y5 - VMOVDQU 1696(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1728(CX), Y5 - VMOVDQU 1760(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 7 to 4 outputs - VMOVDQU (DX), Y7 - ADDQ $0x20, DX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1792(CX), Y5 - VMOVDQU 1824(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1856(CX), Y5 - VMOVDQU 1888(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1920(CX), Y5 - VMOVDQU 1952(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1984(CX), Y5 - VMOVDQU 2016(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Store 4 outputs - VMOVDQU Y0, (R13) - ADDQ $0x20, R13 - VMOVDQU Y1, (R14) - ADDQ $0x20, R14 - VMOVDQU Y2, (R15) - ADDQ $0x20, R15 - VMOVDQU Y3, (R12) - ADDQ $0x20, R12 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_8x4Xor_loop - VZEROUPPER - -mulAvxTwo_8x4Xor_end: - RET - -// func mulAvxTwo_8x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x5(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 90 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_8x5_end - MOVQ in_base+24(FP), AX - MOVQ (AX), DX - MOVQ 24(AX), BX - MOVQ 48(AX), SI - MOVQ 72(AX), DI - MOVQ 96(AX), R8 - MOVQ 120(AX), R9 - MOVQ 144(AX), R10 - MOVQ 168(AX), AX - MOVQ out_base+48(FP), R11 - MOVQ (R11), R12 - MOVQ 24(R11), R13 - MOVQ 48(R11), R14 - MOVQ 72(R11), R15 - MOVQ 96(R11), R11 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R11 - - // Add start offset to input - ADDQ BP, DX - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, AX - MOVQ $0x0000000f, BP - MOVQ BP, X5 - VPBROADCASTB X5, Y5 - MOVQ n+80(FP), BP - SHRQ $0x05, BP - -mulAvxTwo_8x5_loop: - // Load and process 32 bytes from input 0 to 5 outputs - VMOVDQU (DX), Y8 - ADDQ $0x20, DX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU (CX), Y6 - VMOVDQU 32(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y0 - VMOVDQU 64(CX), Y6 - VMOVDQU 96(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y1 - VMOVDQU 128(CX), Y6 - VMOVDQU 160(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y2 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y3 - VMOVDQU 256(CX), Y6 - VMOVDQU 288(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y4 - - // Load and process 32 bytes from input 1 to 5 outputs - VMOVDQU (BX), Y8 - ADDQ $0x20, BX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 320(CX), Y6 - VMOVDQU 352(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 384(CX), Y6 - VMOVDQU 416(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 448(CX), Y6 - VMOVDQU 480(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 512(CX), Y6 - VMOVDQU 544(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 576(CX), Y6 - VMOVDQU 608(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 2 to 5 outputs - VMOVDQU (SI), Y8 - ADDQ $0x20, SI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 640(CX), Y6 - VMOVDQU 672(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 704(CX), Y6 - VMOVDQU 736(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 768(CX), Y6 - VMOVDQU 800(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 832(CX), Y6 - VMOVDQU 864(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 896(CX), Y6 - VMOVDQU 928(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 3 to 5 outputs - VMOVDQU (DI), Y8 - ADDQ $0x20, DI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 960(CX), Y6 - VMOVDQU 992(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1024(CX), Y6 - VMOVDQU 1056(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1088(CX), Y6 - VMOVDQU 1120(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1152(CX), Y6 - VMOVDQU 1184(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1216(CX), Y6 - VMOVDQU 1248(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 4 to 5 outputs - VMOVDQU (R8), Y8 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1280(CX), Y6 - VMOVDQU 1312(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1344(CX), Y6 - VMOVDQU 1376(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1408(CX), Y6 - VMOVDQU 1440(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1472(CX), Y6 - VMOVDQU 1504(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1536(CX), Y6 - VMOVDQU 1568(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 5 to 5 outputs - VMOVDQU (R9), Y8 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1600(CX), Y6 - VMOVDQU 1632(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1664(CX), Y6 - VMOVDQU 1696(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1728(CX), Y6 - VMOVDQU 1760(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1792(CX), Y6 - VMOVDQU 1824(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1856(CX), Y6 - VMOVDQU 1888(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 6 to 5 outputs - VMOVDQU (R10), Y8 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1920(CX), Y6 - VMOVDQU 1952(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1984(CX), Y6 - VMOVDQU 2016(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 2048(CX), Y6 - VMOVDQU 2080(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 2112(CX), Y6 - VMOVDQU 2144(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 2176(CX), Y6 - VMOVDQU 2208(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 7 to 5 outputs - VMOVDQU (AX), Y8 - ADDQ $0x20, AX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 2240(CX), Y6 - VMOVDQU 2272(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 2304(CX), Y6 - VMOVDQU 2336(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 2368(CX), Y6 - VMOVDQU 2400(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 2432(CX), Y6 - VMOVDQU 2464(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 2496(CX), Y6 - VMOVDQU 2528(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Store 5 outputs - VMOVDQU Y0, (R12) - ADDQ $0x20, R12 - VMOVDQU Y1, (R13) - ADDQ $0x20, R13 - VMOVDQU Y2, (R14) - ADDQ $0x20, R14 - VMOVDQU Y3, (R15) - ADDQ $0x20, R15 - VMOVDQU Y4, (R11) - ADDQ $0x20, R11 - - // Prepare for next loop - DECQ BP - JNZ mulAvxTwo_8x5_loop - VZEROUPPER - -mulAvxTwo_8x5_end: - RET - -// func mulAvxTwo_8x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x5Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 90 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_8x5Xor_end - MOVQ in_base+24(FP), AX - MOVQ (AX), DX - MOVQ 24(AX), BX - MOVQ 48(AX), SI - MOVQ 72(AX), DI - MOVQ 96(AX), R8 - MOVQ 120(AX), R9 - MOVQ 144(AX), R10 - MOVQ 168(AX), AX - MOVQ out_base+48(FP), R11 - MOVQ (R11), R12 - MOVQ 24(R11), R13 - MOVQ 48(R11), R14 - MOVQ 72(R11), R15 - MOVQ 96(R11), R11 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R11 - - // Add start offset to input - ADDQ BP, DX - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, AX - MOVQ $0x0000000f, BP - MOVQ BP, X5 - VPBROADCASTB X5, Y5 - MOVQ n+80(FP), BP - SHRQ $0x05, BP - -mulAvxTwo_8x5Xor_loop: - // Load and process 32 bytes from input 0 to 5 outputs - VMOVDQU (DX), Y8 - ADDQ $0x20, DX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU (R12), Y0 - VMOVDQU (CX), Y6 - VMOVDQU 32(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU (R13), Y1 - VMOVDQU 64(CX), Y6 - VMOVDQU 96(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU (R14), Y2 - VMOVDQU 128(CX), Y6 - VMOVDQU 160(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU (R15), Y3 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU (R11), Y4 - VMOVDQU 256(CX), Y6 - VMOVDQU 288(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 1 to 5 outputs - VMOVDQU (BX), Y8 - ADDQ $0x20, BX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 320(CX), Y6 - VMOVDQU 352(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 384(CX), Y6 - VMOVDQU 416(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 448(CX), Y6 - VMOVDQU 480(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 512(CX), Y6 - VMOVDQU 544(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 576(CX), Y6 - VMOVDQU 608(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 2 to 5 outputs - VMOVDQU (SI), Y8 - ADDQ $0x20, SI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 640(CX), Y6 - VMOVDQU 672(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 704(CX), Y6 - VMOVDQU 736(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 768(CX), Y6 - VMOVDQU 800(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 832(CX), Y6 - VMOVDQU 864(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 896(CX), Y6 - VMOVDQU 928(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 3 to 5 outputs - VMOVDQU (DI), Y8 - ADDQ $0x20, DI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 960(CX), Y6 - VMOVDQU 992(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1024(CX), Y6 - VMOVDQU 1056(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1088(CX), Y6 - VMOVDQU 1120(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1152(CX), Y6 - VMOVDQU 1184(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1216(CX), Y6 - VMOVDQU 1248(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 4 to 5 outputs - VMOVDQU (R8), Y8 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1280(CX), Y6 - VMOVDQU 1312(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1344(CX), Y6 - VMOVDQU 1376(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1408(CX), Y6 - VMOVDQU 1440(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1472(CX), Y6 - VMOVDQU 1504(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1536(CX), Y6 - VMOVDQU 1568(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 5 to 5 outputs - VMOVDQU (R9), Y8 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1600(CX), Y6 - VMOVDQU 1632(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1664(CX), Y6 - VMOVDQU 1696(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1728(CX), Y6 - VMOVDQU 1760(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1792(CX), Y6 - VMOVDQU 1824(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1856(CX), Y6 - VMOVDQU 1888(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 6 to 5 outputs - VMOVDQU (R10), Y8 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1920(CX), Y6 - VMOVDQU 1952(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1984(CX), Y6 - VMOVDQU 2016(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 2048(CX), Y6 - VMOVDQU 2080(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 2112(CX), Y6 - VMOVDQU 2144(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 2176(CX), Y6 - VMOVDQU 2208(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 7 to 5 outputs - VMOVDQU (AX), Y8 - ADDQ $0x20, AX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 2240(CX), Y6 - VMOVDQU 2272(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 2304(CX), Y6 - VMOVDQU 2336(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 2368(CX), Y6 - VMOVDQU 2400(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 2432(CX), Y6 - VMOVDQU 2464(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 2496(CX), Y6 - VMOVDQU 2528(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Store 5 outputs - VMOVDQU Y0, (R12) - ADDQ $0x20, R12 - VMOVDQU Y1, (R13) - ADDQ $0x20, R13 - VMOVDQU Y2, (R14) - ADDQ $0x20, R14 - VMOVDQU Y3, (R15) - ADDQ $0x20, R15 - VMOVDQU Y4, (R11) - ADDQ $0x20, R11 - - // Prepare for next loop - DECQ BP - JNZ mulAvxTwo_8x5Xor_loop - VZEROUPPER - -mulAvxTwo_8x5Xor_end: - RET - -// func mulAvxTwo_8x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x6(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 107 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_8x6_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ start+72(FP), R13 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_8x6_loop: - // Load and process 32 bytes from input 0 to 6 outputs - VMOVDQU (BX), Y9 - ADDQ $0x20, BX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y0 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y1 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y2 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y3 - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y4 - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y5 - - // Load and process 32 bytes from input 1 to 6 outputs - VMOVDQU (SI), Y9 - ADDQ $0x20, SI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 2 to 6 outputs - VMOVDQU (DI), Y9 - ADDQ $0x20, DI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 3 to 6 outputs - VMOVDQU (R8), Y9 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1152(CX), Y7 - VMOVDQU 1184(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1216(CX), Y7 - VMOVDQU 1248(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1280(CX), Y7 - VMOVDQU 1312(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1344(CX), Y7 - VMOVDQU 1376(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1408(CX), Y7 - VMOVDQU 1440(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1472(CX), Y7 - VMOVDQU 1504(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 4 to 6 outputs - VMOVDQU (R9), Y9 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1536(CX), Y7 - VMOVDQU 1568(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1600(CX), Y7 - VMOVDQU 1632(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1664(CX), Y7 - VMOVDQU 1696(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1728(CX), Y7 - VMOVDQU 1760(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1792(CX), Y7 - VMOVDQU 1824(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1856(CX), Y7 - VMOVDQU 1888(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 5 to 6 outputs - VMOVDQU (R10), Y9 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1920(CX), Y7 - VMOVDQU 1952(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1984(CX), Y7 - VMOVDQU 2016(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2048(CX), Y7 - VMOVDQU 2080(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2112(CX), Y7 - VMOVDQU 2144(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2176(CX), Y7 - VMOVDQU 2208(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 2240(CX), Y7 - VMOVDQU 2272(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 6 to 6 outputs - VMOVDQU (R11), Y9 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 2304(CX), Y7 - VMOVDQU 2336(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 2368(CX), Y7 - VMOVDQU 2400(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2432(CX), Y7 - VMOVDQU 2464(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2496(CX), Y7 - VMOVDQU 2528(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2560(CX), Y7 - VMOVDQU 2592(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 2624(CX), Y7 - VMOVDQU 2656(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 7 to 6 outputs - VMOVDQU (DX), Y9 - ADDQ $0x20, DX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 2688(CX), Y7 - VMOVDQU 2720(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 2752(CX), Y7 - VMOVDQU 2784(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2816(CX), Y7 - VMOVDQU 2848(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2880(CX), Y7 - VMOVDQU 2912(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2944(CX), Y7 - VMOVDQU 2976(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 3008(CX), Y7 - VMOVDQU 3040(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Store 6 outputs - MOVQ (R12), R14 - VMOVDQU Y0, (R14)(R13*1) - MOVQ 24(R12), R14 - VMOVDQU Y1, (R14)(R13*1) - MOVQ 48(R12), R14 - VMOVDQU Y2, (R14)(R13*1) - MOVQ 72(R12), R14 - VMOVDQU Y3, (R14)(R13*1) - MOVQ 96(R12), R14 - VMOVDQU Y4, (R14)(R13*1) - MOVQ 120(R12), R14 - VMOVDQU Y5, (R14)(R13*1) - - // Prepare for next loop - ADDQ $0x20, R13 - DECQ AX - JNZ mulAvxTwo_8x6_loop - VZEROUPPER - -mulAvxTwo_8x6_end: - RET - -// func mulAvxTwo_8x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x6Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 107 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_8x6Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ start+72(FP), R13 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_8x6Xor_loop: - // Load and process 32 bytes from input 0 to 6 outputs - VMOVDQU (BX), Y9 - ADDQ $0x20, BX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - MOVQ (R12), R14 - VMOVDQU (R14)(R13*1), Y0 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - MOVQ 24(R12), R14 - VMOVDQU (R14)(R13*1), Y1 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - MOVQ 48(R12), R14 - VMOVDQU (R14)(R13*1), Y2 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - MOVQ 72(R12), R14 - VMOVDQU (R14)(R13*1), Y3 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - MOVQ 96(R12), R14 - VMOVDQU (R14)(R13*1), Y4 - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - MOVQ 120(R12), R14 - VMOVDQU (R14)(R13*1), Y5 - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 1 to 6 outputs - VMOVDQU (SI), Y9 - ADDQ $0x20, SI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 2 to 6 outputs - VMOVDQU (DI), Y9 - ADDQ $0x20, DI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 3 to 6 outputs - VMOVDQU (R8), Y9 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1152(CX), Y7 - VMOVDQU 1184(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1216(CX), Y7 - VMOVDQU 1248(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1280(CX), Y7 - VMOVDQU 1312(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1344(CX), Y7 - VMOVDQU 1376(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1408(CX), Y7 - VMOVDQU 1440(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1472(CX), Y7 - VMOVDQU 1504(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 4 to 6 outputs - VMOVDQU (R9), Y9 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1536(CX), Y7 - VMOVDQU 1568(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1600(CX), Y7 - VMOVDQU 1632(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1664(CX), Y7 - VMOVDQU 1696(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1728(CX), Y7 - VMOVDQU 1760(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1792(CX), Y7 - VMOVDQU 1824(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1856(CX), Y7 - VMOVDQU 1888(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 5 to 6 outputs - VMOVDQU (R10), Y9 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1920(CX), Y7 - VMOVDQU 1952(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1984(CX), Y7 - VMOVDQU 2016(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2048(CX), Y7 - VMOVDQU 2080(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2112(CX), Y7 - VMOVDQU 2144(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2176(CX), Y7 - VMOVDQU 2208(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 2240(CX), Y7 - VMOVDQU 2272(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 6 to 6 outputs - VMOVDQU (R11), Y9 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 2304(CX), Y7 - VMOVDQU 2336(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 2368(CX), Y7 - VMOVDQU 2400(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2432(CX), Y7 - VMOVDQU 2464(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2496(CX), Y7 - VMOVDQU 2528(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2560(CX), Y7 - VMOVDQU 2592(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 2624(CX), Y7 - VMOVDQU 2656(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 7 to 6 outputs - VMOVDQU (DX), Y9 - ADDQ $0x20, DX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 2688(CX), Y7 - VMOVDQU 2720(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 2752(CX), Y7 - VMOVDQU 2784(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2816(CX), Y7 - VMOVDQU 2848(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2880(CX), Y7 - VMOVDQU 2912(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2944(CX), Y7 - VMOVDQU 2976(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 3008(CX), Y7 - VMOVDQU 3040(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Store 6 outputs - MOVQ (R12), R14 - VMOVDQU Y0, (R14)(R13*1) - MOVQ 24(R12), R14 - VMOVDQU Y1, (R14)(R13*1) - MOVQ 48(R12), R14 - VMOVDQU Y2, (R14)(R13*1) - MOVQ 72(R12), R14 - VMOVDQU Y3, (R14)(R13*1) - MOVQ 96(R12), R14 - VMOVDQU Y4, (R14)(R13*1) - MOVQ 120(R12), R14 - VMOVDQU Y5, (R14)(R13*1) - - // Prepare for next loop - ADDQ $0x20, R13 - DECQ AX - JNZ mulAvxTwo_8x6Xor_loop - VZEROUPPER - -mulAvxTwo_8x6Xor_end: - RET - -// func mulAvxTwo_8x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x7(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 124 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_8x7_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ start+72(FP), R13 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X7 - VPBROADCASTB X7, Y7 - -mulAvxTwo_8x7_loop: - // Load and process 32 bytes from input 0 to 7 outputs - VMOVDQU (BX), Y10 - ADDQ $0x20, BX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU (CX), Y8 - VMOVDQU 32(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y0 - VMOVDQU 64(CX), Y8 - VMOVDQU 96(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y1 - VMOVDQU 128(CX), Y8 - VMOVDQU 160(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y2 - VMOVDQU 192(CX), Y8 - VMOVDQU 224(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y3 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y4 - VMOVDQU 320(CX), Y8 - VMOVDQU 352(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y5 - VMOVDQU 384(CX), Y8 - VMOVDQU 416(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y6 - - // Load and process 32 bytes from input 1 to 7 outputs - VMOVDQU (SI), Y10 - ADDQ $0x20, SI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 448(CX), Y8 - VMOVDQU 480(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 512(CX), Y8 - VMOVDQU 544(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 576(CX), Y8 - VMOVDQU 608(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 640(CX), Y8 - VMOVDQU 672(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 704(CX), Y8 - VMOVDQU 736(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 768(CX), Y8 - VMOVDQU 800(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 832(CX), Y8 - VMOVDQU 864(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 2 to 7 outputs - VMOVDQU (DI), Y10 - ADDQ $0x20, DI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 896(CX), Y8 - VMOVDQU 928(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 960(CX), Y8 - VMOVDQU 992(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1024(CX), Y8 - VMOVDQU 1056(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1088(CX), Y8 - VMOVDQU 1120(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1152(CX), Y8 - VMOVDQU 1184(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1216(CX), Y8 - VMOVDQU 1248(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1280(CX), Y8 - VMOVDQU 1312(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 3 to 7 outputs - VMOVDQU (R8), Y10 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1344(CX), Y8 - VMOVDQU 1376(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1408(CX), Y8 - VMOVDQU 1440(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1472(CX), Y8 - VMOVDQU 1504(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1536(CX), Y8 - VMOVDQU 1568(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1600(CX), Y8 - VMOVDQU 1632(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1664(CX), Y8 - VMOVDQU 1696(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1728(CX), Y8 - VMOVDQU 1760(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 4 to 7 outputs - VMOVDQU (R9), Y10 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1792(CX), Y8 - VMOVDQU 1824(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1856(CX), Y8 - VMOVDQU 1888(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1920(CX), Y8 - VMOVDQU 1952(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1984(CX), Y8 - VMOVDQU 2016(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2048(CX), Y8 - VMOVDQU 2080(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 2112(CX), Y8 - VMOVDQU 2144(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 2176(CX), Y8 - VMOVDQU 2208(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 5 to 7 outputs - VMOVDQU (R10), Y10 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 2240(CX), Y8 - VMOVDQU 2272(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 2304(CX), Y8 - VMOVDQU 2336(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 2368(CX), Y8 - VMOVDQU 2400(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 2432(CX), Y8 - VMOVDQU 2464(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2496(CX), Y8 - VMOVDQU 2528(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 2560(CX), Y8 - VMOVDQU 2592(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 2624(CX), Y8 - VMOVDQU 2656(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 6 to 7 outputs - VMOVDQU (R11), Y10 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 2688(CX), Y8 - VMOVDQU 2720(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 2752(CX), Y8 - VMOVDQU 2784(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 2816(CX), Y8 - VMOVDQU 2848(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 2880(CX), Y8 - VMOVDQU 2912(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2944(CX), Y8 - VMOVDQU 2976(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 3008(CX), Y8 - VMOVDQU 3040(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 3072(CX), Y8 - VMOVDQU 3104(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 7 to 7 outputs - VMOVDQU (DX), Y10 - ADDQ $0x20, DX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 3136(CX), Y8 - VMOVDQU 3168(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 3200(CX), Y8 - VMOVDQU 3232(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 3264(CX), Y8 - VMOVDQU 3296(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 3328(CX), Y8 - VMOVDQU 3360(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 3392(CX), Y8 - VMOVDQU 3424(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 3456(CX), Y8 - VMOVDQU 3488(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 3520(CX), Y8 - VMOVDQU 3552(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Store 7 outputs - MOVQ (R12), R14 - VMOVDQU Y0, (R14)(R13*1) - MOVQ 24(R12), R14 - VMOVDQU Y1, (R14)(R13*1) - MOVQ 48(R12), R14 - VMOVDQU Y2, (R14)(R13*1) - MOVQ 72(R12), R14 - VMOVDQU Y3, (R14)(R13*1) - MOVQ 96(R12), R14 - VMOVDQU Y4, (R14)(R13*1) - MOVQ 120(R12), R14 - VMOVDQU Y5, (R14)(R13*1) - MOVQ 144(R12), R14 - VMOVDQU Y6, (R14)(R13*1) - - // Prepare for next loop - ADDQ $0x20, R13 - DECQ AX - JNZ mulAvxTwo_8x7_loop - VZEROUPPER - -mulAvxTwo_8x7_end: - RET - -// func mulAvxTwo_8x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x7Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 124 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_8x7Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ start+72(FP), R13 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X7 - VPBROADCASTB X7, Y7 - -mulAvxTwo_8x7Xor_loop: - // Load and process 32 bytes from input 0 to 7 outputs - VMOVDQU (BX), Y10 - ADDQ $0x20, BX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - MOVQ (R12), R14 - VMOVDQU (R14)(R13*1), Y0 - VMOVDQU (CX), Y8 - VMOVDQU 32(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - MOVQ 24(R12), R14 - VMOVDQU (R14)(R13*1), Y1 - VMOVDQU 64(CX), Y8 - VMOVDQU 96(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - MOVQ 48(R12), R14 - VMOVDQU (R14)(R13*1), Y2 - VMOVDQU 128(CX), Y8 - VMOVDQU 160(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - MOVQ 72(R12), R14 - VMOVDQU (R14)(R13*1), Y3 - VMOVDQU 192(CX), Y8 - VMOVDQU 224(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - MOVQ 96(R12), R14 - VMOVDQU (R14)(R13*1), Y4 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - MOVQ 120(R12), R14 - VMOVDQU (R14)(R13*1), Y5 - VMOVDQU 320(CX), Y8 - VMOVDQU 352(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - MOVQ 144(R12), R14 - VMOVDQU (R14)(R13*1), Y6 - VMOVDQU 384(CX), Y8 - VMOVDQU 416(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 1 to 7 outputs - VMOVDQU (SI), Y10 - ADDQ $0x20, SI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 448(CX), Y8 - VMOVDQU 480(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 512(CX), Y8 - VMOVDQU 544(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 576(CX), Y8 - VMOVDQU 608(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 640(CX), Y8 - VMOVDQU 672(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 704(CX), Y8 - VMOVDQU 736(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 768(CX), Y8 - VMOVDQU 800(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 832(CX), Y8 - VMOVDQU 864(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 2 to 7 outputs - VMOVDQU (DI), Y10 - ADDQ $0x20, DI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 896(CX), Y8 - VMOVDQU 928(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 960(CX), Y8 - VMOVDQU 992(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1024(CX), Y8 - VMOVDQU 1056(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1088(CX), Y8 - VMOVDQU 1120(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1152(CX), Y8 - VMOVDQU 1184(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1216(CX), Y8 - VMOVDQU 1248(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1280(CX), Y8 - VMOVDQU 1312(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 3 to 7 outputs - VMOVDQU (R8), Y10 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1344(CX), Y8 - VMOVDQU 1376(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1408(CX), Y8 - VMOVDQU 1440(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1472(CX), Y8 - VMOVDQU 1504(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1536(CX), Y8 - VMOVDQU 1568(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1600(CX), Y8 - VMOVDQU 1632(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1664(CX), Y8 - VMOVDQU 1696(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1728(CX), Y8 - VMOVDQU 1760(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 4 to 7 outputs - VMOVDQU (R9), Y10 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1792(CX), Y8 - VMOVDQU 1824(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1856(CX), Y8 - VMOVDQU 1888(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1920(CX), Y8 - VMOVDQU 1952(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1984(CX), Y8 - VMOVDQU 2016(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2048(CX), Y8 - VMOVDQU 2080(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 2112(CX), Y8 - VMOVDQU 2144(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 2176(CX), Y8 - VMOVDQU 2208(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 5 to 7 outputs - VMOVDQU (R10), Y10 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 2240(CX), Y8 - VMOVDQU 2272(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 2304(CX), Y8 - VMOVDQU 2336(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 2368(CX), Y8 - VMOVDQU 2400(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 2432(CX), Y8 - VMOVDQU 2464(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2496(CX), Y8 - VMOVDQU 2528(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 2560(CX), Y8 - VMOVDQU 2592(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 2624(CX), Y8 - VMOVDQU 2656(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 6 to 7 outputs - VMOVDQU (R11), Y10 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 2688(CX), Y8 - VMOVDQU 2720(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 2752(CX), Y8 - VMOVDQU 2784(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 2816(CX), Y8 - VMOVDQU 2848(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 2880(CX), Y8 - VMOVDQU 2912(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2944(CX), Y8 - VMOVDQU 2976(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 3008(CX), Y8 - VMOVDQU 3040(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 3072(CX), Y8 - VMOVDQU 3104(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 7 to 7 outputs - VMOVDQU (DX), Y10 - ADDQ $0x20, DX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 3136(CX), Y8 - VMOVDQU 3168(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 3200(CX), Y8 - VMOVDQU 3232(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 3264(CX), Y8 - VMOVDQU 3296(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 3328(CX), Y8 - VMOVDQU 3360(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 3392(CX), Y8 - VMOVDQU 3424(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 3456(CX), Y8 - VMOVDQU 3488(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 3520(CX), Y8 - VMOVDQU 3552(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Store 7 outputs - MOVQ (R12), R14 - VMOVDQU Y0, (R14)(R13*1) - MOVQ 24(R12), R14 - VMOVDQU Y1, (R14)(R13*1) - MOVQ 48(R12), R14 - VMOVDQU Y2, (R14)(R13*1) - MOVQ 72(R12), R14 - VMOVDQU Y3, (R14)(R13*1) - MOVQ 96(R12), R14 - VMOVDQU Y4, (R14)(R13*1) - MOVQ 120(R12), R14 - VMOVDQU Y5, (R14)(R13*1) - MOVQ 144(R12), R14 - VMOVDQU Y6, (R14)(R13*1) - - // Prepare for next loop - ADDQ $0x20, R13 - DECQ AX - JNZ mulAvxTwo_8x7Xor_loop - VZEROUPPER - -mulAvxTwo_8x7Xor_end: - RET - -// func mulAvxTwo_8x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x8(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 141 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_8x8_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ start+72(FP), R13 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X8 - VPBROADCASTB X8, Y8 - -mulAvxTwo_8x8_loop: - // Load and process 32 bytes from input 0 to 8 outputs - VMOVDQU (BX), Y11 - ADDQ $0x20, BX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU (CX), Y9 - VMOVDQU 32(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y0 - VMOVDQU 64(CX), Y9 - VMOVDQU 96(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y1 - VMOVDQU 128(CX), Y9 - VMOVDQU 160(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y2 - VMOVDQU 192(CX), Y9 - VMOVDQU 224(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y3 - VMOVDQU 256(CX), Y9 - VMOVDQU 288(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y4 - VMOVDQU 320(CX), Y9 - VMOVDQU 352(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y5 - VMOVDQU 384(CX), Y9 - VMOVDQU 416(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y6 - VMOVDQU 448(CX), Y9 - VMOVDQU 480(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y7 - - // Load and process 32 bytes from input 1 to 8 outputs - VMOVDQU (SI), Y11 - ADDQ $0x20, SI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 512(CX), Y9 - VMOVDQU 544(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 576(CX), Y9 - VMOVDQU 608(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y9 - VMOVDQU 672(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 704(CX), Y9 - VMOVDQU 736(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 768(CX), Y9 - VMOVDQU 800(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 832(CX), Y9 - VMOVDQU 864(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 896(CX), Y9 - VMOVDQU 928(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 960(CX), Y9 - VMOVDQU 992(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 2 to 8 outputs - VMOVDQU (DI), Y11 - ADDQ $0x20, DI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1024(CX), Y9 - VMOVDQU 1056(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1088(CX), Y9 - VMOVDQU 1120(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1152(CX), Y9 - VMOVDQU 1184(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1216(CX), Y9 - VMOVDQU 1248(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y9 - VMOVDQU 1312(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1344(CX), Y9 - VMOVDQU 1376(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1408(CX), Y9 - VMOVDQU 1440(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1472(CX), Y9 - VMOVDQU 1504(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 3 to 8 outputs - VMOVDQU (R8), Y11 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1536(CX), Y9 - VMOVDQU 1568(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1600(CX), Y9 - VMOVDQU 1632(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1664(CX), Y9 - VMOVDQU 1696(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1728(CX), Y9 - VMOVDQU 1760(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1792(CX), Y9 - VMOVDQU 1824(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1856(CX), Y9 - VMOVDQU 1888(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1920(CX), Y9 - VMOVDQU 1952(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1984(CX), Y9 - VMOVDQU 2016(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 4 to 8 outputs - VMOVDQU (R9), Y11 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 2048(CX), Y9 - VMOVDQU 2080(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 2112(CX), Y9 - VMOVDQU 2144(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 2176(CX), Y9 - VMOVDQU 2208(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 2240(CX), Y9 - VMOVDQU 2272(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 2304(CX), Y9 - VMOVDQU 2336(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 2368(CX), Y9 - VMOVDQU 2400(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 2432(CX), Y9 - VMOVDQU 2464(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 2496(CX), Y9 - VMOVDQU 2528(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 5 to 8 outputs - VMOVDQU (R10), Y11 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 2560(CX), Y9 - VMOVDQU 2592(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 2624(CX), Y9 - VMOVDQU 2656(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 2688(CX), Y9 - VMOVDQU 2720(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 2752(CX), Y9 - VMOVDQU 2784(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 2816(CX), Y9 - VMOVDQU 2848(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 2880(CX), Y9 - VMOVDQU 2912(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 2944(CX), Y9 - VMOVDQU 2976(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 3008(CX), Y9 - VMOVDQU 3040(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 6 to 8 outputs - VMOVDQU (R11), Y11 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 3072(CX), Y9 - VMOVDQU 3104(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 3136(CX), Y9 - VMOVDQU 3168(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 3200(CX), Y9 - VMOVDQU 3232(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 3264(CX), Y9 - VMOVDQU 3296(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 3328(CX), Y9 - VMOVDQU 3360(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 3392(CX), Y9 - VMOVDQU 3424(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 3456(CX), Y9 - VMOVDQU 3488(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 3520(CX), Y9 - VMOVDQU 3552(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 7 to 8 outputs - VMOVDQU (DX), Y11 - ADDQ $0x20, DX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 3584(CX), Y9 - VMOVDQU 3616(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 3648(CX), Y9 - VMOVDQU 3680(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 3712(CX), Y9 - VMOVDQU 3744(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 3776(CX), Y9 - VMOVDQU 3808(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 3840(CX), Y9 - VMOVDQU 3872(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 3904(CX), Y9 - VMOVDQU 3936(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 3968(CX), Y9 - VMOVDQU 4000(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 4032(CX), Y9 - VMOVDQU 4064(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Store 8 outputs - MOVQ (R12), R14 - VMOVDQU Y0, (R14)(R13*1) - MOVQ 24(R12), R14 - VMOVDQU Y1, (R14)(R13*1) - MOVQ 48(R12), R14 - VMOVDQU Y2, (R14)(R13*1) - MOVQ 72(R12), R14 - VMOVDQU Y3, (R14)(R13*1) - MOVQ 96(R12), R14 - VMOVDQU Y4, (R14)(R13*1) - MOVQ 120(R12), R14 - VMOVDQU Y5, (R14)(R13*1) - MOVQ 144(R12), R14 - VMOVDQU Y6, (R14)(R13*1) - MOVQ 168(R12), R14 - VMOVDQU Y7, (R14)(R13*1) - - // Prepare for next loop - ADDQ $0x20, R13 - DECQ AX - JNZ mulAvxTwo_8x8_loop - VZEROUPPER - -mulAvxTwo_8x8_end: - RET - -// func mulAvxTwo_8x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x8Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 141 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_8x8Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ start+72(FP), R13 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X8 - VPBROADCASTB X8, Y8 - -mulAvxTwo_8x8Xor_loop: - // Load and process 32 bytes from input 0 to 8 outputs - VMOVDQU (BX), Y11 - ADDQ $0x20, BX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - MOVQ (R12), R14 - VMOVDQU (R14)(R13*1), Y0 - VMOVDQU (CX), Y9 - VMOVDQU 32(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - MOVQ 24(R12), R14 - VMOVDQU (R14)(R13*1), Y1 - VMOVDQU 64(CX), Y9 - VMOVDQU 96(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - MOVQ 48(R12), R14 - VMOVDQU (R14)(R13*1), Y2 - VMOVDQU 128(CX), Y9 - VMOVDQU 160(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - MOVQ 72(R12), R14 - VMOVDQU (R14)(R13*1), Y3 - VMOVDQU 192(CX), Y9 - VMOVDQU 224(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - MOVQ 96(R12), R14 - VMOVDQU (R14)(R13*1), Y4 - VMOVDQU 256(CX), Y9 - VMOVDQU 288(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - MOVQ 120(R12), R14 - VMOVDQU (R14)(R13*1), Y5 - VMOVDQU 320(CX), Y9 - VMOVDQU 352(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - MOVQ 144(R12), R14 - VMOVDQU (R14)(R13*1), Y6 - VMOVDQU 384(CX), Y9 - VMOVDQU 416(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - MOVQ 168(R12), R14 - VMOVDQU (R14)(R13*1), Y7 - VMOVDQU 448(CX), Y9 - VMOVDQU 480(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 1 to 8 outputs - VMOVDQU (SI), Y11 - ADDQ $0x20, SI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 512(CX), Y9 - VMOVDQU 544(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 576(CX), Y9 - VMOVDQU 608(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y9 - VMOVDQU 672(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 704(CX), Y9 - VMOVDQU 736(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 768(CX), Y9 - VMOVDQU 800(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 832(CX), Y9 - VMOVDQU 864(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 896(CX), Y9 - VMOVDQU 928(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 960(CX), Y9 - VMOVDQU 992(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 2 to 8 outputs - VMOVDQU (DI), Y11 - ADDQ $0x20, DI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1024(CX), Y9 - VMOVDQU 1056(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1088(CX), Y9 - VMOVDQU 1120(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1152(CX), Y9 - VMOVDQU 1184(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1216(CX), Y9 - VMOVDQU 1248(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y9 - VMOVDQU 1312(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1344(CX), Y9 - VMOVDQU 1376(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1408(CX), Y9 - VMOVDQU 1440(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1472(CX), Y9 - VMOVDQU 1504(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 3 to 8 outputs - VMOVDQU (R8), Y11 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1536(CX), Y9 - VMOVDQU 1568(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1600(CX), Y9 - VMOVDQU 1632(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1664(CX), Y9 - VMOVDQU 1696(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1728(CX), Y9 - VMOVDQU 1760(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1792(CX), Y9 - VMOVDQU 1824(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1856(CX), Y9 - VMOVDQU 1888(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1920(CX), Y9 - VMOVDQU 1952(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1984(CX), Y9 - VMOVDQU 2016(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 4 to 8 outputs - VMOVDQU (R9), Y11 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 2048(CX), Y9 - VMOVDQU 2080(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 2112(CX), Y9 - VMOVDQU 2144(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 2176(CX), Y9 - VMOVDQU 2208(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 2240(CX), Y9 - VMOVDQU 2272(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 2304(CX), Y9 - VMOVDQU 2336(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 2368(CX), Y9 - VMOVDQU 2400(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 2432(CX), Y9 - VMOVDQU 2464(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 2496(CX), Y9 - VMOVDQU 2528(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 5 to 8 outputs - VMOVDQU (R10), Y11 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 2560(CX), Y9 - VMOVDQU 2592(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 2624(CX), Y9 - VMOVDQU 2656(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 2688(CX), Y9 - VMOVDQU 2720(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 2752(CX), Y9 - VMOVDQU 2784(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 2816(CX), Y9 - VMOVDQU 2848(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 2880(CX), Y9 - VMOVDQU 2912(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 2944(CX), Y9 - VMOVDQU 2976(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 3008(CX), Y9 - VMOVDQU 3040(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 6 to 8 outputs - VMOVDQU (R11), Y11 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 3072(CX), Y9 - VMOVDQU 3104(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 3136(CX), Y9 - VMOVDQU 3168(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 3200(CX), Y9 - VMOVDQU 3232(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 3264(CX), Y9 - VMOVDQU 3296(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 3328(CX), Y9 - VMOVDQU 3360(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 3392(CX), Y9 - VMOVDQU 3424(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 3456(CX), Y9 - VMOVDQU 3488(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 3520(CX), Y9 - VMOVDQU 3552(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 7 to 8 outputs - VMOVDQU (DX), Y11 - ADDQ $0x20, DX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 3584(CX), Y9 - VMOVDQU 3616(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 3648(CX), Y9 - VMOVDQU 3680(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 3712(CX), Y9 - VMOVDQU 3744(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 3776(CX), Y9 - VMOVDQU 3808(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 3840(CX), Y9 - VMOVDQU 3872(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 3904(CX), Y9 - VMOVDQU 3936(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 3968(CX), Y9 - VMOVDQU 4000(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 4032(CX), Y9 - VMOVDQU 4064(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Store 8 outputs - MOVQ (R12), R14 - VMOVDQU Y0, (R14)(R13*1) - MOVQ 24(R12), R14 - VMOVDQU Y1, (R14)(R13*1) - MOVQ 48(R12), R14 - VMOVDQU Y2, (R14)(R13*1) - MOVQ 72(R12), R14 - VMOVDQU Y3, (R14)(R13*1) - MOVQ 96(R12), R14 - VMOVDQU Y4, (R14)(R13*1) - MOVQ 120(R12), R14 - VMOVDQU Y5, (R14)(R13*1) - MOVQ 144(R12), R14 - VMOVDQU Y6, (R14)(R13*1) - MOVQ 168(R12), R14 - VMOVDQU Y7, (R14)(R13*1) - - // Prepare for next loop - ADDQ $0x20, R13 - DECQ AX - JNZ mulAvxTwo_8x8Xor_loop - VZEROUPPER - -mulAvxTwo_8x8Xor_end: - RET - -// func mulAvxTwo_8x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x9(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 158 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_8x9_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ start+72(FP), R13 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X9 - VPBROADCASTB X9, Y9 - -mulAvxTwo_8x9_loop: - // Load and process 32 bytes from input 0 to 9 outputs - VMOVDQU (BX), Y12 - ADDQ $0x20, BX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU (CX), Y10 - VMOVDQU 32(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y0 - VMOVDQU 64(CX), Y10 - VMOVDQU 96(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y1 - VMOVDQU 128(CX), Y10 - VMOVDQU 160(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y2 - VMOVDQU 192(CX), Y10 - VMOVDQU 224(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y3 - VMOVDQU 256(CX), Y10 - VMOVDQU 288(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y4 - VMOVDQU 320(CX), Y10 - VMOVDQU 352(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y5 - VMOVDQU 384(CX), Y10 - VMOVDQU 416(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y6 - VMOVDQU 448(CX), Y10 - VMOVDQU 480(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y7 - VMOVDQU 512(CX), Y10 - VMOVDQU 544(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y8 - - // Load and process 32 bytes from input 1 to 9 outputs - VMOVDQU (SI), Y12 - ADDQ $0x20, SI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 576(CX), Y10 - VMOVDQU 608(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 640(CX), Y10 - VMOVDQU 672(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 704(CX), Y10 - VMOVDQU 736(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 768(CX), Y10 - VMOVDQU 800(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 832(CX), Y10 - VMOVDQU 864(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 896(CX), Y10 - VMOVDQU 928(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 960(CX), Y10 - VMOVDQU 992(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1024(CX), Y10 - VMOVDQU 1056(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1088(CX), Y10 - VMOVDQU 1120(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 2 to 9 outputs - VMOVDQU (DI), Y12 - ADDQ $0x20, DI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1152(CX), Y10 - VMOVDQU 1184(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1216(CX), Y10 - VMOVDQU 1248(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1280(CX), Y10 - VMOVDQU 1312(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1344(CX), Y10 - VMOVDQU 1376(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1408(CX), Y10 - VMOVDQU 1440(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 1472(CX), Y10 - VMOVDQU 1504(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 1536(CX), Y10 - VMOVDQU 1568(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1600(CX), Y10 - VMOVDQU 1632(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1664(CX), Y10 - VMOVDQU 1696(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 3 to 9 outputs - VMOVDQU (R8), Y12 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1728(CX), Y10 - VMOVDQU 1760(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1792(CX), Y10 - VMOVDQU 1824(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1856(CX), Y10 - VMOVDQU 1888(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1920(CX), Y10 - VMOVDQU 1952(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1984(CX), Y10 - VMOVDQU 2016(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2048(CX), Y10 - VMOVDQU 2080(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2112(CX), Y10 - VMOVDQU 2144(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2176(CX), Y10 - VMOVDQU 2208(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2240(CX), Y10 - VMOVDQU 2272(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 4 to 9 outputs - VMOVDQU (R9), Y12 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 2304(CX), Y10 - VMOVDQU 2336(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 2368(CX), Y10 - VMOVDQU 2400(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 2432(CX), Y10 - VMOVDQU 2464(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 2496(CX), Y10 - VMOVDQU 2528(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 2560(CX), Y10 - VMOVDQU 2592(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2624(CX), Y10 - VMOVDQU 2656(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2688(CX), Y10 - VMOVDQU 2720(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2752(CX), Y10 - VMOVDQU 2784(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2816(CX), Y10 - VMOVDQU 2848(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 5 to 9 outputs - VMOVDQU (R10), Y12 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 2880(CX), Y10 - VMOVDQU 2912(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 2944(CX), Y10 - VMOVDQU 2976(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 3008(CX), Y10 - VMOVDQU 3040(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 3072(CX), Y10 - VMOVDQU 3104(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 3136(CX), Y10 - VMOVDQU 3168(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 3200(CX), Y10 - VMOVDQU 3232(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 3264(CX), Y10 - VMOVDQU 3296(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 3328(CX), Y10 - VMOVDQU 3360(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 3392(CX), Y10 - VMOVDQU 3424(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 6 to 9 outputs - VMOVDQU (R11), Y12 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 3456(CX), Y10 - VMOVDQU 3488(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 3520(CX), Y10 - VMOVDQU 3552(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 3584(CX), Y10 - VMOVDQU 3616(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 3648(CX), Y10 - VMOVDQU 3680(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 3712(CX), Y10 - VMOVDQU 3744(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 3776(CX), Y10 - VMOVDQU 3808(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 3840(CX), Y10 - VMOVDQU 3872(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 3904(CX), Y10 - VMOVDQU 3936(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 3968(CX), Y10 - VMOVDQU 4000(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 7 to 9 outputs - VMOVDQU (DX), Y12 - ADDQ $0x20, DX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 4032(CX), Y10 - VMOVDQU 4064(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 4096(CX), Y10 - VMOVDQU 4128(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 4160(CX), Y10 - VMOVDQU 4192(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 4224(CX), Y10 - VMOVDQU 4256(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 4288(CX), Y10 - VMOVDQU 4320(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 4352(CX), Y10 - VMOVDQU 4384(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 4416(CX), Y10 - VMOVDQU 4448(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 4480(CX), Y10 - VMOVDQU 4512(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 4544(CX), Y10 - VMOVDQU 4576(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Store 9 outputs - MOVQ (R12), R14 - VMOVDQU Y0, (R14)(R13*1) - MOVQ 24(R12), R14 - VMOVDQU Y1, (R14)(R13*1) - MOVQ 48(R12), R14 - VMOVDQU Y2, (R14)(R13*1) - MOVQ 72(R12), R14 - VMOVDQU Y3, (R14)(R13*1) - MOVQ 96(R12), R14 - VMOVDQU Y4, (R14)(R13*1) - MOVQ 120(R12), R14 - VMOVDQU Y5, (R14)(R13*1) - MOVQ 144(R12), R14 - VMOVDQU Y6, (R14)(R13*1) - MOVQ 168(R12), R14 - VMOVDQU Y7, (R14)(R13*1) - MOVQ 192(R12), R14 - VMOVDQU Y8, (R14)(R13*1) - - // Prepare for next loop - ADDQ $0x20, R13 - DECQ AX - JNZ mulAvxTwo_8x9_loop - VZEROUPPER - -mulAvxTwo_8x9_end: - RET - -// func mulAvxTwo_8x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x9Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 158 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_8x9Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ start+72(FP), R13 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X9 - VPBROADCASTB X9, Y9 - -mulAvxTwo_8x9Xor_loop: - // Load and process 32 bytes from input 0 to 9 outputs - VMOVDQU (BX), Y12 - ADDQ $0x20, BX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - MOVQ (R12), R14 - VMOVDQU (R14)(R13*1), Y0 - VMOVDQU (CX), Y10 - VMOVDQU 32(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - MOVQ 24(R12), R14 - VMOVDQU (R14)(R13*1), Y1 - VMOVDQU 64(CX), Y10 - VMOVDQU 96(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - MOVQ 48(R12), R14 - VMOVDQU (R14)(R13*1), Y2 - VMOVDQU 128(CX), Y10 - VMOVDQU 160(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - MOVQ 72(R12), R14 - VMOVDQU (R14)(R13*1), Y3 - VMOVDQU 192(CX), Y10 - VMOVDQU 224(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - MOVQ 96(R12), R14 - VMOVDQU (R14)(R13*1), Y4 - VMOVDQU 256(CX), Y10 - VMOVDQU 288(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - MOVQ 120(R12), R14 - VMOVDQU (R14)(R13*1), Y5 - VMOVDQU 320(CX), Y10 - VMOVDQU 352(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - MOVQ 144(R12), R14 - VMOVDQU (R14)(R13*1), Y6 - VMOVDQU 384(CX), Y10 - VMOVDQU 416(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - MOVQ 168(R12), R14 - VMOVDQU (R14)(R13*1), Y7 - VMOVDQU 448(CX), Y10 - VMOVDQU 480(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - MOVQ 192(R12), R14 - VMOVDQU (R14)(R13*1), Y8 - VMOVDQU 512(CX), Y10 - VMOVDQU 544(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 1 to 9 outputs - VMOVDQU (SI), Y12 - ADDQ $0x20, SI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 576(CX), Y10 - VMOVDQU 608(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 640(CX), Y10 - VMOVDQU 672(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 704(CX), Y10 - VMOVDQU 736(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 768(CX), Y10 - VMOVDQU 800(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 832(CX), Y10 - VMOVDQU 864(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 896(CX), Y10 - VMOVDQU 928(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 960(CX), Y10 - VMOVDQU 992(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1024(CX), Y10 - VMOVDQU 1056(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1088(CX), Y10 - VMOVDQU 1120(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 2 to 9 outputs - VMOVDQU (DI), Y12 - ADDQ $0x20, DI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1152(CX), Y10 - VMOVDQU 1184(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1216(CX), Y10 - VMOVDQU 1248(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1280(CX), Y10 - VMOVDQU 1312(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1344(CX), Y10 - VMOVDQU 1376(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1408(CX), Y10 - VMOVDQU 1440(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 1472(CX), Y10 - VMOVDQU 1504(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 1536(CX), Y10 - VMOVDQU 1568(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1600(CX), Y10 - VMOVDQU 1632(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1664(CX), Y10 - VMOVDQU 1696(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 3 to 9 outputs - VMOVDQU (R8), Y12 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1728(CX), Y10 - VMOVDQU 1760(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1792(CX), Y10 - VMOVDQU 1824(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1856(CX), Y10 - VMOVDQU 1888(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1920(CX), Y10 - VMOVDQU 1952(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1984(CX), Y10 - VMOVDQU 2016(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2048(CX), Y10 - VMOVDQU 2080(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2112(CX), Y10 - VMOVDQU 2144(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2176(CX), Y10 - VMOVDQU 2208(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2240(CX), Y10 - VMOVDQU 2272(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 4 to 9 outputs - VMOVDQU (R9), Y12 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 2304(CX), Y10 - VMOVDQU 2336(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 2368(CX), Y10 - VMOVDQU 2400(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 2432(CX), Y10 - VMOVDQU 2464(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 2496(CX), Y10 - VMOVDQU 2528(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 2560(CX), Y10 - VMOVDQU 2592(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2624(CX), Y10 - VMOVDQU 2656(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2688(CX), Y10 - VMOVDQU 2720(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2752(CX), Y10 - VMOVDQU 2784(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2816(CX), Y10 - VMOVDQU 2848(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 5 to 9 outputs - VMOVDQU (R10), Y12 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 2880(CX), Y10 - VMOVDQU 2912(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 2944(CX), Y10 - VMOVDQU 2976(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 3008(CX), Y10 - VMOVDQU 3040(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 3072(CX), Y10 - VMOVDQU 3104(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 3136(CX), Y10 - VMOVDQU 3168(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 3200(CX), Y10 - VMOVDQU 3232(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 3264(CX), Y10 - VMOVDQU 3296(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 3328(CX), Y10 - VMOVDQU 3360(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 3392(CX), Y10 - VMOVDQU 3424(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 6 to 9 outputs - VMOVDQU (R11), Y12 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 3456(CX), Y10 - VMOVDQU 3488(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 3520(CX), Y10 - VMOVDQU 3552(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 3584(CX), Y10 - VMOVDQU 3616(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 3648(CX), Y10 - VMOVDQU 3680(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 3712(CX), Y10 - VMOVDQU 3744(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 3776(CX), Y10 - VMOVDQU 3808(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 3840(CX), Y10 - VMOVDQU 3872(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 3904(CX), Y10 - VMOVDQU 3936(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 3968(CX), Y10 - VMOVDQU 4000(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 7 to 9 outputs - VMOVDQU (DX), Y12 - ADDQ $0x20, DX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 4032(CX), Y10 - VMOVDQU 4064(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 4096(CX), Y10 - VMOVDQU 4128(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 4160(CX), Y10 - VMOVDQU 4192(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 4224(CX), Y10 - VMOVDQU 4256(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 4288(CX), Y10 - VMOVDQU 4320(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 4352(CX), Y10 - VMOVDQU 4384(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 4416(CX), Y10 - VMOVDQU 4448(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 4480(CX), Y10 - VMOVDQU 4512(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 4544(CX), Y10 - VMOVDQU 4576(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Store 9 outputs - MOVQ (R12), R14 - VMOVDQU Y0, (R14)(R13*1) - MOVQ 24(R12), R14 - VMOVDQU Y1, (R14)(R13*1) - MOVQ 48(R12), R14 - VMOVDQU Y2, (R14)(R13*1) - MOVQ 72(R12), R14 - VMOVDQU Y3, (R14)(R13*1) - MOVQ 96(R12), R14 - VMOVDQU Y4, (R14)(R13*1) - MOVQ 120(R12), R14 - VMOVDQU Y5, (R14)(R13*1) - MOVQ 144(R12), R14 - VMOVDQU Y6, (R14)(R13*1) - MOVQ 168(R12), R14 - VMOVDQU Y7, (R14)(R13*1) - MOVQ 192(R12), R14 - VMOVDQU Y8, (R14)(R13*1) - - // Prepare for next loop - ADDQ $0x20, R13 - DECQ AX - JNZ mulAvxTwo_8x9Xor_loop - VZEROUPPER - -mulAvxTwo_8x9Xor_end: - RET - -// func mulAvxTwo_8x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x10(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 175 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_8x10_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ start+72(FP), R13 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X10 - VPBROADCASTB X10, Y10 - -mulAvxTwo_8x10_loop: - // Load and process 32 bytes from input 0 to 10 outputs - VMOVDQU (BX), Y13 - ADDQ $0x20, BX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU (CX), Y11 - VMOVDQU 32(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y0 - VMOVDQU 64(CX), Y11 - VMOVDQU 96(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y1 - VMOVDQU 128(CX), Y11 - VMOVDQU 160(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y2 - VMOVDQU 192(CX), Y11 - VMOVDQU 224(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y3 - VMOVDQU 256(CX), Y11 - VMOVDQU 288(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y4 - VMOVDQU 320(CX), Y11 - VMOVDQU 352(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y5 - VMOVDQU 384(CX), Y11 - VMOVDQU 416(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y6 - VMOVDQU 448(CX), Y11 - VMOVDQU 480(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y7 - VMOVDQU 512(CX), Y11 - VMOVDQU 544(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y8 - VMOVDQU 576(CX), Y11 - VMOVDQU 608(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y9 - - // Load and process 32 bytes from input 1 to 10 outputs - VMOVDQU (SI), Y13 - ADDQ $0x20, SI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 640(CX), Y11 - VMOVDQU 672(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 704(CX), Y11 - VMOVDQU 736(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 768(CX), Y11 - VMOVDQU 800(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 832(CX), Y11 - VMOVDQU 864(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 896(CX), Y11 - VMOVDQU 928(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 960(CX), Y11 - VMOVDQU 992(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1024(CX), Y11 - VMOVDQU 1056(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1088(CX), Y11 - VMOVDQU 1120(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1152(CX), Y11 - VMOVDQU 1184(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1216(CX), Y11 - VMOVDQU 1248(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 2 to 10 outputs - VMOVDQU (DI), Y13 - ADDQ $0x20, DI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1280(CX), Y11 - VMOVDQU 1312(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1344(CX), Y11 - VMOVDQU 1376(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 1408(CX), Y11 - VMOVDQU 1440(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 1472(CX), Y11 - VMOVDQU 1504(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 1536(CX), Y11 - VMOVDQU 1568(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 1600(CX), Y11 - VMOVDQU 1632(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1664(CX), Y11 - VMOVDQU 1696(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1728(CX), Y11 - VMOVDQU 1760(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1792(CX), Y11 - VMOVDQU 1824(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1856(CX), Y11 - VMOVDQU 1888(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 3 to 10 outputs - VMOVDQU (R8), Y13 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1920(CX), Y11 - VMOVDQU 1952(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1984(CX), Y11 - VMOVDQU 2016(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2048(CX), Y11 - VMOVDQU 2080(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2112(CX), Y11 - VMOVDQU 2144(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2176(CX), Y11 - VMOVDQU 2208(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2240(CX), Y11 - VMOVDQU 2272(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2304(CX), Y11 - VMOVDQU 2336(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 2368(CX), Y11 - VMOVDQU 2400(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 2432(CX), Y11 - VMOVDQU 2464(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 2496(CX), Y11 - VMOVDQU 2528(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 4 to 10 outputs - VMOVDQU (R9), Y13 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 2560(CX), Y11 - VMOVDQU 2592(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 2624(CX), Y11 - VMOVDQU 2656(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2688(CX), Y11 - VMOVDQU 2720(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2752(CX), Y11 - VMOVDQU 2784(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2816(CX), Y11 - VMOVDQU 2848(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2880(CX), Y11 - VMOVDQU 2912(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2944(CX), Y11 - VMOVDQU 2976(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 3008(CX), Y11 - VMOVDQU 3040(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 3072(CX), Y11 - VMOVDQU 3104(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 3136(CX), Y11 - VMOVDQU 3168(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 5 to 10 outputs - VMOVDQU (R10), Y13 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 3200(CX), Y11 - VMOVDQU 3232(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 3264(CX), Y11 - VMOVDQU 3296(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 3328(CX), Y11 - VMOVDQU 3360(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 3392(CX), Y11 - VMOVDQU 3424(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 3456(CX), Y11 - VMOVDQU 3488(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 3520(CX), Y11 - VMOVDQU 3552(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 3584(CX), Y11 - VMOVDQU 3616(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 3648(CX), Y11 - VMOVDQU 3680(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 3712(CX), Y11 - VMOVDQU 3744(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 3776(CX), Y11 - VMOVDQU 3808(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 6 to 10 outputs - VMOVDQU (R11), Y13 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 3840(CX), Y11 - VMOVDQU 3872(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 3904(CX), Y11 - VMOVDQU 3936(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 3968(CX), Y11 - VMOVDQU 4000(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 4032(CX), Y11 - VMOVDQU 4064(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 4096(CX), Y11 - VMOVDQU 4128(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 4160(CX), Y11 - VMOVDQU 4192(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 4224(CX), Y11 - VMOVDQU 4256(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 4288(CX), Y11 - VMOVDQU 4320(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 4352(CX), Y11 - VMOVDQU 4384(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 4416(CX), Y11 - VMOVDQU 4448(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 7 to 10 outputs - VMOVDQU (DX), Y13 - ADDQ $0x20, DX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 4480(CX), Y11 - VMOVDQU 4512(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 4544(CX), Y11 - VMOVDQU 4576(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 4608(CX), Y11 - VMOVDQU 4640(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 4672(CX), Y11 - VMOVDQU 4704(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 4736(CX), Y11 - VMOVDQU 4768(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 4800(CX), Y11 - VMOVDQU 4832(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 4864(CX), Y11 - VMOVDQU 4896(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 4928(CX), Y11 - VMOVDQU 4960(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 4992(CX), Y11 - VMOVDQU 5024(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 5056(CX), Y11 - VMOVDQU 5088(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Store 10 outputs - MOVQ (R12), R14 - VMOVDQU Y0, (R14)(R13*1) - MOVQ 24(R12), R14 - VMOVDQU Y1, (R14)(R13*1) - MOVQ 48(R12), R14 - VMOVDQU Y2, (R14)(R13*1) - MOVQ 72(R12), R14 - VMOVDQU Y3, (R14)(R13*1) - MOVQ 96(R12), R14 - VMOVDQU Y4, (R14)(R13*1) - MOVQ 120(R12), R14 - VMOVDQU Y5, (R14)(R13*1) - MOVQ 144(R12), R14 - VMOVDQU Y6, (R14)(R13*1) - MOVQ 168(R12), R14 - VMOVDQU Y7, (R14)(R13*1) - MOVQ 192(R12), R14 - VMOVDQU Y8, (R14)(R13*1) - MOVQ 216(R12), R14 - VMOVDQU Y9, (R14)(R13*1) - - // Prepare for next loop - ADDQ $0x20, R13 - DECQ AX - JNZ mulAvxTwo_8x10_loop - VZEROUPPER - -mulAvxTwo_8x10_end: - RET - -// func mulAvxTwo_8x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_8x10Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 175 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_8x10Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), DX - MOVQ out_base+48(FP), R12 - MOVQ start+72(FP), R13 - - // Add start offset to input - ADDQ R13, BX - ADDQ R13, SI - ADDQ R13, DI - ADDQ R13, R8 - ADDQ R13, R9 - ADDQ R13, R10 - ADDQ R13, R11 - ADDQ R13, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X10 - VPBROADCASTB X10, Y10 - -mulAvxTwo_8x10Xor_loop: - // Load and process 32 bytes from input 0 to 10 outputs - VMOVDQU (BX), Y13 - ADDQ $0x20, BX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - MOVQ (R12), R14 - VMOVDQU (R14)(R13*1), Y0 - VMOVDQU (CX), Y11 - VMOVDQU 32(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - MOVQ 24(R12), R14 - VMOVDQU (R14)(R13*1), Y1 - VMOVDQU 64(CX), Y11 - VMOVDQU 96(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - MOVQ 48(R12), R14 - VMOVDQU (R14)(R13*1), Y2 - VMOVDQU 128(CX), Y11 - VMOVDQU 160(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - MOVQ 72(R12), R14 - VMOVDQU (R14)(R13*1), Y3 - VMOVDQU 192(CX), Y11 - VMOVDQU 224(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - MOVQ 96(R12), R14 - VMOVDQU (R14)(R13*1), Y4 - VMOVDQU 256(CX), Y11 - VMOVDQU 288(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - MOVQ 120(R12), R14 - VMOVDQU (R14)(R13*1), Y5 - VMOVDQU 320(CX), Y11 - VMOVDQU 352(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - MOVQ 144(R12), R14 - VMOVDQU (R14)(R13*1), Y6 - VMOVDQU 384(CX), Y11 - VMOVDQU 416(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - MOVQ 168(R12), R14 - VMOVDQU (R14)(R13*1), Y7 - VMOVDQU 448(CX), Y11 - VMOVDQU 480(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - MOVQ 192(R12), R14 - VMOVDQU (R14)(R13*1), Y8 - VMOVDQU 512(CX), Y11 - VMOVDQU 544(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - MOVQ 216(R12), R14 - VMOVDQU (R14)(R13*1), Y9 - VMOVDQU 576(CX), Y11 - VMOVDQU 608(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 1 to 10 outputs - VMOVDQU (SI), Y13 - ADDQ $0x20, SI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 640(CX), Y11 - VMOVDQU 672(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 704(CX), Y11 - VMOVDQU 736(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 768(CX), Y11 - VMOVDQU 800(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 832(CX), Y11 - VMOVDQU 864(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 896(CX), Y11 - VMOVDQU 928(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 960(CX), Y11 - VMOVDQU 992(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1024(CX), Y11 - VMOVDQU 1056(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1088(CX), Y11 - VMOVDQU 1120(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1152(CX), Y11 - VMOVDQU 1184(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1216(CX), Y11 - VMOVDQU 1248(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 2 to 10 outputs - VMOVDQU (DI), Y13 - ADDQ $0x20, DI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1280(CX), Y11 - VMOVDQU 1312(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1344(CX), Y11 - VMOVDQU 1376(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 1408(CX), Y11 - VMOVDQU 1440(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 1472(CX), Y11 - VMOVDQU 1504(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 1536(CX), Y11 - VMOVDQU 1568(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 1600(CX), Y11 - VMOVDQU 1632(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1664(CX), Y11 - VMOVDQU 1696(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1728(CX), Y11 - VMOVDQU 1760(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1792(CX), Y11 - VMOVDQU 1824(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1856(CX), Y11 - VMOVDQU 1888(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 3 to 10 outputs - VMOVDQU (R8), Y13 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1920(CX), Y11 - VMOVDQU 1952(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1984(CX), Y11 - VMOVDQU 2016(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2048(CX), Y11 - VMOVDQU 2080(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2112(CX), Y11 - VMOVDQU 2144(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2176(CX), Y11 - VMOVDQU 2208(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2240(CX), Y11 - VMOVDQU 2272(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2304(CX), Y11 - VMOVDQU 2336(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 2368(CX), Y11 - VMOVDQU 2400(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 2432(CX), Y11 - VMOVDQU 2464(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 2496(CX), Y11 - VMOVDQU 2528(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 4 to 10 outputs - VMOVDQU (R9), Y13 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 2560(CX), Y11 - VMOVDQU 2592(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 2624(CX), Y11 - VMOVDQU 2656(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2688(CX), Y11 - VMOVDQU 2720(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2752(CX), Y11 - VMOVDQU 2784(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2816(CX), Y11 - VMOVDQU 2848(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2880(CX), Y11 - VMOVDQU 2912(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2944(CX), Y11 - VMOVDQU 2976(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 3008(CX), Y11 - VMOVDQU 3040(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 3072(CX), Y11 - VMOVDQU 3104(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 3136(CX), Y11 - VMOVDQU 3168(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 5 to 10 outputs - VMOVDQU (R10), Y13 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 3200(CX), Y11 - VMOVDQU 3232(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 3264(CX), Y11 - VMOVDQU 3296(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 3328(CX), Y11 - VMOVDQU 3360(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 3392(CX), Y11 - VMOVDQU 3424(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 3456(CX), Y11 - VMOVDQU 3488(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 3520(CX), Y11 - VMOVDQU 3552(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 3584(CX), Y11 - VMOVDQU 3616(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 3648(CX), Y11 - VMOVDQU 3680(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 3712(CX), Y11 - VMOVDQU 3744(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 3776(CX), Y11 - VMOVDQU 3808(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 6 to 10 outputs - VMOVDQU (R11), Y13 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 3840(CX), Y11 - VMOVDQU 3872(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 3904(CX), Y11 - VMOVDQU 3936(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 3968(CX), Y11 - VMOVDQU 4000(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 4032(CX), Y11 - VMOVDQU 4064(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 4096(CX), Y11 - VMOVDQU 4128(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 4160(CX), Y11 - VMOVDQU 4192(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 4224(CX), Y11 - VMOVDQU 4256(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 4288(CX), Y11 - VMOVDQU 4320(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 4352(CX), Y11 - VMOVDQU 4384(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 4416(CX), Y11 - VMOVDQU 4448(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 7 to 10 outputs - VMOVDQU (DX), Y13 - ADDQ $0x20, DX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 4480(CX), Y11 - VMOVDQU 4512(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 4544(CX), Y11 - VMOVDQU 4576(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 4608(CX), Y11 - VMOVDQU 4640(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 4672(CX), Y11 - VMOVDQU 4704(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 4736(CX), Y11 - VMOVDQU 4768(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 4800(CX), Y11 - VMOVDQU 4832(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 4864(CX), Y11 - VMOVDQU 4896(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 4928(CX), Y11 - VMOVDQU 4960(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 4992(CX), Y11 - VMOVDQU 5024(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 5056(CX), Y11 - VMOVDQU 5088(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Store 10 outputs - MOVQ (R12), R14 - VMOVDQU Y0, (R14)(R13*1) - MOVQ 24(R12), R14 - VMOVDQU Y1, (R14)(R13*1) - MOVQ 48(R12), R14 - VMOVDQU Y2, (R14)(R13*1) - MOVQ 72(R12), R14 - VMOVDQU Y3, (R14)(R13*1) - MOVQ 96(R12), R14 - VMOVDQU Y4, (R14)(R13*1) - MOVQ 120(R12), R14 - VMOVDQU Y5, (R14)(R13*1) - MOVQ 144(R12), R14 - VMOVDQU Y6, (R14)(R13*1) - MOVQ 168(R12), R14 - VMOVDQU Y7, (R14)(R13*1) - MOVQ 192(R12), R14 - VMOVDQU Y8, (R14)(R13*1) - MOVQ 216(R12), R14 - VMOVDQU Y9, (R14)(R13*1) - - // Prepare for next loop - ADDQ $0x20, R13 - DECQ AX - JNZ mulAvxTwo_8x10Xor_loop - VZEROUPPER - -mulAvxTwo_8x10Xor_end: - RET - -// func mulAvxTwo_9x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x1(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 22 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_9x1_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ (R13), R13 - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, R13 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X1 - VPBROADCASTB X1, Y1 - -mulAvxTwo_9x1_loop: - // Load and process 32 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y4 - ADDQ $0x20, BX - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU (CX), Y2 - VMOVDQU 32(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y0 - - // Load and process 32 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y4 - ADDQ $0x20, SI - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 2 to 1 outputs - VMOVDQU (DI), Y4 - ADDQ $0x20, DI - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 128(CX), Y2 - VMOVDQU 160(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 3 to 1 outputs - VMOVDQU (R8), Y4 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 192(CX), Y2 - VMOVDQU 224(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 4 to 1 outputs - VMOVDQU (R9), Y4 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 256(CX), Y2 - VMOVDQU 288(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 5 to 1 outputs - VMOVDQU (R10), Y4 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 320(CX), Y2 - VMOVDQU 352(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 6 to 1 outputs - VMOVDQU (R11), Y4 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 384(CX), Y2 - VMOVDQU 416(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 7 to 1 outputs - VMOVDQU (R12), Y4 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 448(CX), Y2 - VMOVDQU 480(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 8 to 1 outputs - VMOVDQU (DX), Y4 - ADDQ $0x20, DX - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 512(CX), Y2 - VMOVDQU 544(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Store 1 outputs - VMOVDQU Y0, (R13) - ADDQ $0x20, R13 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_9x1_loop - VZEROUPPER - -mulAvxTwo_9x1_end: - RET - -// func mulAvxTwo_9x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x1_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 42 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_9x1_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ out_base+48(FP), R13 - MOVQ (R13), R13 - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, R13 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_9x1_64_loop: - // Load and process 64 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y6 - VMOVDQU 32(BX), Y5 - ADDQ $0x40, BX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y0 - VPXOR Y5, Y6, Y1 - - // Load and process 64 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y6 - VMOVDQU 32(SI), Y5 - ADDQ $0x40, SI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 2 to 1 outputs - VMOVDQU (DI), Y6 - VMOVDQU 32(DI), Y5 - ADDQ $0x40, DI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 3 to 1 outputs - VMOVDQU (R8), Y6 - VMOVDQU 32(R8), Y5 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 4 to 1 outputs - VMOVDQU (R9), Y6 - VMOVDQU 32(R9), Y5 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 5 to 1 outputs - VMOVDQU (R10), Y6 - VMOVDQU 32(R10), Y5 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 6 to 1 outputs - VMOVDQU (R11), Y6 - VMOVDQU 32(R11), Y5 - ADDQ $0x40, R11 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 384(CX), Y3 - VMOVDQU 416(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 7 to 1 outputs - VMOVDQU (R12), Y6 - VMOVDQU 32(R12), Y5 - ADDQ $0x40, R12 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 448(CX), Y3 - VMOVDQU 480(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 8 to 1 outputs - VMOVDQU (DX), Y6 - VMOVDQU 32(DX), Y5 - ADDQ $0x40, DX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 512(CX), Y3 - VMOVDQU 544(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Store 1 outputs - VMOVDQU Y0, (R13) - VMOVDQU Y1, 32(R13) - ADDQ $0x40, R13 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_9x1_64_loop - VZEROUPPER - -mulAvxTwo_9x1_64_end: - RET - -// func mulAvxTwo_9x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x1Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 22 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_9x1Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ (R13), R13 - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, R13 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X1 - VPBROADCASTB X1, Y1 - -mulAvxTwo_9x1Xor_loop: - // Load and process 32 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y4 - ADDQ $0x20, BX - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU (R13), Y0 - VMOVDQU (CX), Y2 - VMOVDQU 32(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y4 - ADDQ $0x20, SI - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 2 to 1 outputs - VMOVDQU (DI), Y4 - ADDQ $0x20, DI - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 128(CX), Y2 - VMOVDQU 160(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 3 to 1 outputs - VMOVDQU (R8), Y4 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 192(CX), Y2 - VMOVDQU 224(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 4 to 1 outputs - VMOVDQU (R9), Y4 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 256(CX), Y2 - VMOVDQU 288(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 5 to 1 outputs - VMOVDQU (R10), Y4 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 320(CX), Y2 - VMOVDQU 352(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 6 to 1 outputs - VMOVDQU (R11), Y4 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 384(CX), Y2 - VMOVDQU 416(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 7 to 1 outputs - VMOVDQU (R12), Y4 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 448(CX), Y2 - VMOVDQU 480(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 8 to 1 outputs - VMOVDQU (DX), Y4 - ADDQ $0x20, DX - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 512(CX), Y2 - VMOVDQU 544(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Store 1 outputs - VMOVDQU Y0, (R13) - ADDQ $0x20, R13 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_9x1Xor_loop - VZEROUPPER - -mulAvxTwo_9x1Xor_end: - RET - -// func mulAvxTwo_9x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x1_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 42 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_9x1_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ out_base+48(FP), R13 - MOVQ (R13), R13 - MOVQ start+72(FP), R14 - - // Add start offset to output - ADDQ R14, R13 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, DX - MOVQ $0x0000000f, R14 - MOVQ R14, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_9x1_64Xor_loop: - // Load 1 outputs - VMOVDQU (R13), Y0 - VMOVDQU 32(R13), Y1 - - // Load and process 64 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y6 - VMOVDQU 32(BX), Y5 - ADDQ $0x40, BX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y6 - VMOVDQU 32(SI), Y5 - ADDQ $0x40, SI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 2 to 1 outputs - VMOVDQU (DI), Y6 - VMOVDQU 32(DI), Y5 - ADDQ $0x40, DI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 3 to 1 outputs - VMOVDQU (R8), Y6 - VMOVDQU 32(R8), Y5 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 4 to 1 outputs - VMOVDQU (R9), Y6 - VMOVDQU 32(R9), Y5 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 5 to 1 outputs - VMOVDQU (R10), Y6 - VMOVDQU 32(R10), Y5 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 6 to 1 outputs - VMOVDQU (R11), Y6 - VMOVDQU 32(R11), Y5 - ADDQ $0x40, R11 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 384(CX), Y3 - VMOVDQU 416(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 7 to 1 outputs - VMOVDQU (R12), Y6 - VMOVDQU 32(R12), Y5 - ADDQ $0x40, R12 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 448(CX), Y3 - VMOVDQU 480(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 8 to 1 outputs - VMOVDQU (DX), Y6 - VMOVDQU 32(DX), Y5 - ADDQ $0x40, DX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 512(CX), Y3 - VMOVDQU 544(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Store 1 outputs - VMOVDQU Y0, (R13) - VMOVDQU Y1, 32(R13) - ADDQ $0x40, R13 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_9x1_64Xor_loop - VZEROUPPER - -mulAvxTwo_9x1_64Xor_end: - RET - -// func mulAvxTwo_9x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x2(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 43 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_9x2_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ (R13), R14 - MOVQ 24(R13), R13 - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, R14 - ADDQ R15, R13 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_9x2_loop: - // Load and process 32 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y5 - ADDQ $0x20, BX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y0 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y1 - - // Load and process 32 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y5 - ADDQ $0x20, SI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y5 - ADDQ $0x20, DI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y5 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 384(CX), Y3 - VMOVDQU 416(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 448(CX), Y3 - VMOVDQU 480(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 4 to 2 outputs - VMOVDQU (R9), Y5 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 512(CX), Y3 - VMOVDQU 544(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 576(CX), Y3 - VMOVDQU 608(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 5 to 2 outputs - VMOVDQU (R10), Y5 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 640(CX), Y3 - VMOVDQU 672(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 704(CX), Y3 - VMOVDQU 736(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 6 to 2 outputs - VMOVDQU (R11), Y5 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 768(CX), Y3 - VMOVDQU 800(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 832(CX), Y3 - VMOVDQU 864(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 7 to 2 outputs - VMOVDQU (R12), Y5 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 896(CX), Y3 - VMOVDQU 928(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 960(CX), Y3 - VMOVDQU 992(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 8 to 2 outputs - VMOVDQU (DX), Y5 - ADDQ $0x20, DX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 1024(CX), Y3 - VMOVDQU 1056(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 1088(CX), Y3 - VMOVDQU 1120(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Store 2 outputs - VMOVDQU Y0, (R14) - ADDQ $0x20, R14 - VMOVDQU Y1, (R13) - ADDQ $0x20, R13 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_9x2_loop - VZEROUPPER - -mulAvxTwo_9x2_end: - RET - -// func mulAvxTwo_9x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x2_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 81 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_9x2_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ out_base+48(FP), R13 - MOVQ (R13), R14 - MOVQ 24(R13), R13 - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, R14 - ADDQ R15, R13 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_9x2_64_loop: - // Load and process 64 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y9 - VMOVDQU 32(BX), Y11 - ADDQ $0x40, BX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y0 - VPXOR Y7, Y8, Y1 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y2 - VPXOR Y7, Y8, Y3 - - // Load and process 64 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y9 - VMOVDQU 32(SI), Y11 - ADDQ $0x40, SI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y9 - VMOVDQU 32(DI), Y11 - ADDQ $0x40, DI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y9 - VMOVDQU 32(R8), Y11 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 4 to 2 outputs - VMOVDQU (R9), Y9 - VMOVDQU 32(R9), Y11 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 5 to 2 outputs - VMOVDQU (R10), Y9 - VMOVDQU 32(R10), Y11 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 6 to 2 outputs - VMOVDQU (R11), Y9 - VMOVDQU 32(R11), Y11 - ADDQ $0x40, R11 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 768(CX), Y5 - VMOVDQU 800(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 832(CX), Y5 - VMOVDQU 864(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 7 to 2 outputs - VMOVDQU (R12), Y9 - VMOVDQU 32(R12), Y11 - ADDQ $0x40, R12 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 896(CX), Y5 - VMOVDQU 928(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 960(CX), Y5 - VMOVDQU 992(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 8 to 2 outputs - VMOVDQU (DX), Y9 - VMOVDQU 32(DX), Y11 - ADDQ $0x40, DX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 1024(CX), Y5 - VMOVDQU 1056(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1088(CX), Y5 - VMOVDQU 1120(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Store 2 outputs - VMOVDQU Y0, (R14) - VMOVDQU Y1, 32(R14) - ADDQ $0x40, R14 - VMOVDQU Y2, (R13) - VMOVDQU Y3, 32(R13) - ADDQ $0x40, R13 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_9x2_64_loop - VZEROUPPER - -mulAvxTwo_9x2_64_end: - RET - -// func mulAvxTwo_9x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x2Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 43 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_9x2Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ (R13), R14 - MOVQ 24(R13), R13 - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, R14 - ADDQ R15, R13 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_9x2Xor_loop: - // Load and process 32 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y5 - ADDQ $0x20, BX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU (R14), Y0 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU (R13), Y1 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y5 - ADDQ $0x20, SI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y5 - ADDQ $0x20, DI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y5 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 384(CX), Y3 - VMOVDQU 416(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 448(CX), Y3 - VMOVDQU 480(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 4 to 2 outputs - VMOVDQU (R9), Y5 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 512(CX), Y3 - VMOVDQU 544(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 576(CX), Y3 - VMOVDQU 608(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 5 to 2 outputs - VMOVDQU (R10), Y5 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 640(CX), Y3 - VMOVDQU 672(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 704(CX), Y3 - VMOVDQU 736(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 6 to 2 outputs - VMOVDQU (R11), Y5 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 768(CX), Y3 - VMOVDQU 800(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 832(CX), Y3 - VMOVDQU 864(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 7 to 2 outputs - VMOVDQU (R12), Y5 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 896(CX), Y3 - VMOVDQU 928(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 960(CX), Y3 - VMOVDQU 992(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 8 to 2 outputs - VMOVDQU (DX), Y5 - ADDQ $0x20, DX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 1024(CX), Y3 - VMOVDQU 1056(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 1088(CX), Y3 - VMOVDQU 1120(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Store 2 outputs - VMOVDQU Y0, (R14) - ADDQ $0x20, R14 - VMOVDQU Y1, (R13) - ADDQ $0x20, R13 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_9x2Xor_loop - VZEROUPPER - -mulAvxTwo_9x2Xor_end: - RET - -// func mulAvxTwo_9x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x2_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 81 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_9x2_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ out_base+48(FP), R13 - MOVQ (R13), R14 - MOVQ 24(R13), R13 - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, R14 - ADDQ R15, R13 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_9x2_64Xor_loop: - // Load 2 outputs - VMOVDQU (R14), Y0 - VMOVDQU 32(R14), Y1 - VMOVDQU (R13), Y2 - VMOVDQU 32(R13), Y3 - - // Load and process 64 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y9 - VMOVDQU 32(BX), Y11 - ADDQ $0x40, BX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y9 - VMOVDQU 32(SI), Y11 - ADDQ $0x40, SI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y9 - VMOVDQU 32(DI), Y11 - ADDQ $0x40, DI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y9 - VMOVDQU 32(R8), Y11 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 4 to 2 outputs - VMOVDQU (R9), Y9 - VMOVDQU 32(R9), Y11 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 5 to 2 outputs - VMOVDQU (R10), Y9 - VMOVDQU 32(R10), Y11 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 6 to 2 outputs - VMOVDQU (R11), Y9 - VMOVDQU 32(R11), Y11 - ADDQ $0x40, R11 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 768(CX), Y5 - VMOVDQU 800(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 832(CX), Y5 - VMOVDQU 864(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 7 to 2 outputs - VMOVDQU (R12), Y9 - VMOVDQU 32(R12), Y11 - ADDQ $0x40, R12 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 896(CX), Y5 - VMOVDQU 928(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 960(CX), Y5 - VMOVDQU 992(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 8 to 2 outputs - VMOVDQU (DX), Y9 - VMOVDQU 32(DX), Y11 - ADDQ $0x40, DX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 1024(CX), Y5 - VMOVDQU 1056(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1088(CX), Y5 - VMOVDQU 1120(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Store 2 outputs - VMOVDQU Y0, (R14) - VMOVDQU Y1, 32(R14) - ADDQ $0x40, R14 - VMOVDQU Y2, (R13) - VMOVDQU Y3, 32(R13) - ADDQ $0x40, R13 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_9x2_64Xor_loop - VZEROUPPER - -mulAvxTwo_9x2_64Xor_end: - RET - -// func mulAvxTwo_9x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x3(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 62 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_9x3_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ (R13), R14 - MOVQ 24(R13), R15 - MOVQ 48(R13), R13 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R13 - - // Add start offset to input - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, DX - MOVQ $0x0000000f, BP - MOVQ BP, X3 - VPBROADCASTB X3, Y3 - -mulAvxTwo_9x3_loop: - // Load and process 32 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y6 - ADDQ $0x20, BX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU (CX), Y4 - VMOVDQU 32(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y0 - VMOVDQU 64(CX), Y4 - VMOVDQU 96(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y1 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y2 - - // Load and process 32 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y6 - ADDQ $0x20, SI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 192(CX), Y4 - VMOVDQU 224(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 256(CX), Y4 - VMOVDQU 288(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 320(CX), Y4 - VMOVDQU 352(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y6 - ADDQ $0x20, DI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 384(CX), Y4 - VMOVDQU 416(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 448(CX), Y4 - VMOVDQU 480(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 512(CX), Y4 - VMOVDQU 544(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 3 to 3 outputs - VMOVDQU (R8), Y6 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 576(CX), Y4 - VMOVDQU 608(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 640(CX), Y4 - VMOVDQU 672(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 704(CX), Y4 - VMOVDQU 736(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 4 to 3 outputs - VMOVDQU (R9), Y6 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 768(CX), Y4 - VMOVDQU 800(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 832(CX), Y4 - VMOVDQU 864(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 896(CX), Y4 - VMOVDQU 928(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 5 to 3 outputs - VMOVDQU (R10), Y6 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 960(CX), Y4 - VMOVDQU 992(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1024(CX), Y4 - VMOVDQU 1056(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1088(CX), Y4 - VMOVDQU 1120(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 6 to 3 outputs - VMOVDQU (R11), Y6 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 1152(CX), Y4 - VMOVDQU 1184(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1216(CX), Y4 - VMOVDQU 1248(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1280(CX), Y4 - VMOVDQU 1312(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 7 to 3 outputs - VMOVDQU (R12), Y6 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 1344(CX), Y4 - VMOVDQU 1376(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1408(CX), Y4 - VMOVDQU 1440(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1472(CX), Y4 - VMOVDQU 1504(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 8 to 3 outputs - VMOVDQU (DX), Y6 - ADDQ $0x20, DX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 1536(CX), Y4 - VMOVDQU 1568(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1600(CX), Y4 - VMOVDQU 1632(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1664(CX), Y4 - VMOVDQU 1696(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Store 3 outputs - VMOVDQU Y0, (R14) - ADDQ $0x20, R14 - VMOVDQU Y1, (R15) - ADDQ $0x20, R15 - VMOVDQU Y2, (R13) - ADDQ $0x20, R13 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_9x3_loop - VZEROUPPER - -mulAvxTwo_9x3_end: - RET - -// func mulAvxTwo_9x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x3_64(SB), $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 118 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_9x3_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ out_base+48(FP), R13 - MOVQ (R13), R14 - MOVQ 24(R13), R15 - MOVQ 48(R13), R13 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R13 - - // Add start offset to input - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, DX - MOVQ $0x0000000f, BP - MOVQ BP, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_9x3_64_loop: - // Load and process 64 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y11 - VMOVDQU 32(BX), Y13 - ADDQ $0x40, BX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y0 - VPXOR Y9, Y10, Y1 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y2 - VPXOR Y9, Y10, Y3 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y4 - VPXOR Y9, Y10, Y5 - - // Load and process 64 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y11 - VMOVDQU 32(SI), Y13 - ADDQ $0x40, SI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y11 - VMOVDQU 32(DI), Y13 - ADDQ $0x40, DI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 3 to 3 outputs - VMOVDQU (R8), Y11 - VMOVDQU 32(R8), Y13 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 4 to 3 outputs - VMOVDQU (R9), Y11 - VMOVDQU 32(R9), Y13 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 5 to 3 outputs - VMOVDQU (R10), Y11 - VMOVDQU 32(R10), Y13 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 6 to 3 outputs - VMOVDQU (R11), Y11 - VMOVDQU 32(R11), Y13 - ADDQ $0x40, R11 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 1152(CX), Y7 - VMOVDQU 1184(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1216(CX), Y7 - VMOVDQU 1248(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y7 - VMOVDQU 1312(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 7 to 3 outputs - VMOVDQU (R12), Y11 - VMOVDQU 32(R12), Y13 - ADDQ $0x40, R12 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 1344(CX), Y7 - VMOVDQU 1376(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1408(CX), Y7 - VMOVDQU 1440(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1472(CX), Y7 - VMOVDQU 1504(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 8 to 3 outputs - VMOVDQU (DX), Y11 - VMOVDQU 32(DX), Y13 - ADDQ $0x40, DX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 1536(CX), Y7 - VMOVDQU 1568(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1600(CX), Y7 - VMOVDQU 1632(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1664(CX), Y7 - VMOVDQU 1696(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Store 3 outputs - VMOVDQU Y0, (R14) - VMOVDQU Y1, 32(R14) - ADDQ $0x40, R14 - VMOVDQU Y2, (R15) - VMOVDQU Y3, 32(R15) - ADDQ $0x40, R15 - VMOVDQU Y4, (R13) - VMOVDQU Y5, 32(R13) - ADDQ $0x40, R13 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_9x3_64_loop - VZEROUPPER - -mulAvxTwo_9x3_64_end: - RET - -// func mulAvxTwo_9x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x3Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 62 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_9x3Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ (R13), R14 - MOVQ 24(R13), R15 - MOVQ 48(R13), R13 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R13 - - // Add start offset to input - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, DX - MOVQ $0x0000000f, BP - MOVQ BP, X3 - VPBROADCASTB X3, Y3 - -mulAvxTwo_9x3Xor_loop: - // Load and process 32 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y6 - ADDQ $0x20, BX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU (R14), Y0 - VMOVDQU (CX), Y4 - VMOVDQU 32(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU (R15), Y1 - VMOVDQU 64(CX), Y4 - VMOVDQU 96(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU (R13), Y2 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y6 - ADDQ $0x20, SI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 192(CX), Y4 - VMOVDQU 224(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 256(CX), Y4 - VMOVDQU 288(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 320(CX), Y4 - VMOVDQU 352(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y6 - ADDQ $0x20, DI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 384(CX), Y4 - VMOVDQU 416(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 448(CX), Y4 - VMOVDQU 480(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 512(CX), Y4 - VMOVDQU 544(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 3 to 3 outputs - VMOVDQU (R8), Y6 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 576(CX), Y4 - VMOVDQU 608(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 640(CX), Y4 - VMOVDQU 672(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 704(CX), Y4 - VMOVDQU 736(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 4 to 3 outputs - VMOVDQU (R9), Y6 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 768(CX), Y4 - VMOVDQU 800(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 832(CX), Y4 - VMOVDQU 864(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 896(CX), Y4 - VMOVDQU 928(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 5 to 3 outputs - VMOVDQU (R10), Y6 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 960(CX), Y4 - VMOVDQU 992(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1024(CX), Y4 - VMOVDQU 1056(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1088(CX), Y4 - VMOVDQU 1120(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 6 to 3 outputs - VMOVDQU (R11), Y6 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 1152(CX), Y4 - VMOVDQU 1184(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1216(CX), Y4 - VMOVDQU 1248(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1280(CX), Y4 - VMOVDQU 1312(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 7 to 3 outputs - VMOVDQU (R12), Y6 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 1344(CX), Y4 - VMOVDQU 1376(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1408(CX), Y4 - VMOVDQU 1440(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1472(CX), Y4 - VMOVDQU 1504(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 8 to 3 outputs - VMOVDQU (DX), Y6 - ADDQ $0x20, DX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 1536(CX), Y4 - VMOVDQU 1568(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1600(CX), Y4 - VMOVDQU 1632(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1664(CX), Y4 - VMOVDQU 1696(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Store 3 outputs - VMOVDQU Y0, (R14) - ADDQ $0x20, R14 - VMOVDQU Y1, (R15) - ADDQ $0x20, R15 - VMOVDQU Y2, (R13) - ADDQ $0x20, R13 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_9x3Xor_loop - VZEROUPPER - -mulAvxTwo_9x3Xor_end: - RET - -// func mulAvxTwo_9x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x3_64Xor(SB), $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 118 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_9x3_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ out_base+48(FP), R13 - MOVQ (R13), R14 - MOVQ 24(R13), R15 - MOVQ 48(R13), R13 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R13 - - // Add start offset to input - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, DX - MOVQ $0x0000000f, BP - MOVQ BP, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_9x3_64Xor_loop: - // Load 3 outputs - VMOVDQU (R14), Y0 - VMOVDQU 32(R14), Y1 - VMOVDQU (R15), Y2 - VMOVDQU 32(R15), Y3 - VMOVDQU (R13), Y4 - VMOVDQU 32(R13), Y5 - - // Load and process 64 bytes from input 0 to 3 outputs - VMOVDQU (BX), Y11 - VMOVDQU 32(BX), Y13 - ADDQ $0x40, BX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 1 to 3 outputs - VMOVDQU (SI), Y11 - VMOVDQU 32(SI), Y13 - ADDQ $0x40, SI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 2 to 3 outputs - VMOVDQU (DI), Y11 - VMOVDQU 32(DI), Y13 - ADDQ $0x40, DI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 3 to 3 outputs - VMOVDQU (R8), Y11 - VMOVDQU 32(R8), Y13 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 4 to 3 outputs - VMOVDQU (R9), Y11 - VMOVDQU 32(R9), Y13 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 5 to 3 outputs - VMOVDQU (R10), Y11 - VMOVDQU 32(R10), Y13 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 6 to 3 outputs - VMOVDQU (R11), Y11 - VMOVDQU 32(R11), Y13 - ADDQ $0x40, R11 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 1152(CX), Y7 - VMOVDQU 1184(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1216(CX), Y7 - VMOVDQU 1248(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y7 - VMOVDQU 1312(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 7 to 3 outputs - VMOVDQU (R12), Y11 - VMOVDQU 32(R12), Y13 - ADDQ $0x40, R12 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 1344(CX), Y7 - VMOVDQU 1376(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1408(CX), Y7 - VMOVDQU 1440(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1472(CX), Y7 - VMOVDQU 1504(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 8 to 3 outputs - VMOVDQU (DX), Y11 - VMOVDQU 32(DX), Y13 - ADDQ $0x40, DX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 1536(CX), Y7 - VMOVDQU 1568(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1600(CX), Y7 - VMOVDQU 1632(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1664(CX), Y7 - VMOVDQU 1696(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Store 3 outputs - VMOVDQU Y0, (R14) - VMOVDQU Y1, 32(R14) - ADDQ $0x40, R14 - VMOVDQU Y2, (R15) - VMOVDQU Y3, 32(R15) - ADDQ $0x40, R15 - VMOVDQU Y4, (R13) - VMOVDQU Y5, 32(R13) - ADDQ $0x40, R13 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_9x3_64Xor_loop - VZEROUPPER - -mulAvxTwo_9x3_64Xor_end: - RET - -// func mulAvxTwo_9x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x4(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 81 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_9x4_end - MOVQ in_base+24(FP), AX - MOVQ (AX), DX - MOVQ 24(AX), BX - MOVQ 48(AX), SI - MOVQ 72(AX), DI - MOVQ 96(AX), R8 - MOVQ 120(AX), R9 - MOVQ 144(AX), R10 - MOVQ 168(AX), R11 - MOVQ 192(AX), AX - MOVQ out_base+48(FP), R12 - MOVQ (R12), R13 - MOVQ 24(R12), R14 - MOVQ 48(R12), R15 - MOVQ 72(R12), R12 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R12 - - // Add start offset to input - ADDQ BP, DX - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, AX - MOVQ $0x0000000f, BP - MOVQ BP, X4 - VPBROADCASTB X4, Y4 - MOVQ n+80(FP), BP - SHRQ $0x05, BP - -mulAvxTwo_9x4_loop: - // Load and process 32 bytes from input 0 to 4 outputs - VMOVDQU (DX), Y7 - ADDQ $0x20, DX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y0 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y1 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y2 - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y3 - - // Load and process 32 bytes from input 1 to 4 outputs - VMOVDQU (BX), Y7 - ADDQ $0x20, BX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 2 to 4 outputs - VMOVDQU (SI), Y7 - ADDQ $0x20, SI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 3 to 4 outputs - VMOVDQU (DI), Y7 - ADDQ $0x20, DI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 768(CX), Y5 - VMOVDQU 800(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 832(CX), Y5 - VMOVDQU 864(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 896(CX), Y5 - VMOVDQU 928(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 960(CX), Y5 - VMOVDQU 992(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 4 to 4 outputs - VMOVDQU (R8), Y7 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1024(CX), Y5 - VMOVDQU 1056(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1088(CX), Y5 - VMOVDQU 1120(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1152(CX), Y5 - VMOVDQU 1184(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1216(CX), Y5 - VMOVDQU 1248(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 5 to 4 outputs - VMOVDQU (R9), Y7 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1280(CX), Y5 - VMOVDQU 1312(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1344(CX), Y5 - VMOVDQU 1376(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1408(CX), Y5 - VMOVDQU 1440(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1472(CX), Y5 - VMOVDQU 1504(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 6 to 4 outputs - VMOVDQU (R10), Y7 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1536(CX), Y5 - VMOVDQU 1568(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1600(CX), Y5 - VMOVDQU 1632(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1664(CX), Y5 - VMOVDQU 1696(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1728(CX), Y5 - VMOVDQU 1760(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 7 to 4 outputs - VMOVDQU (R11), Y7 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1792(CX), Y5 - VMOVDQU 1824(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1856(CX), Y5 - VMOVDQU 1888(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1920(CX), Y5 - VMOVDQU 1952(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1984(CX), Y5 - VMOVDQU 2016(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 8 to 4 outputs - VMOVDQU (AX), Y7 - ADDQ $0x20, AX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 2048(CX), Y5 - VMOVDQU 2080(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 2112(CX), Y5 - VMOVDQU 2144(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 2176(CX), Y5 - VMOVDQU 2208(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 2240(CX), Y5 - VMOVDQU 2272(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Store 4 outputs - VMOVDQU Y0, (R13) - ADDQ $0x20, R13 - VMOVDQU Y1, (R14) - ADDQ $0x20, R14 - VMOVDQU Y2, (R15) - ADDQ $0x20, R15 - VMOVDQU Y3, (R12) - ADDQ $0x20, R12 - - // Prepare for next loop - DECQ BP - JNZ mulAvxTwo_9x4_loop - VZEROUPPER - -mulAvxTwo_9x4_end: - RET - -// func mulAvxTwo_9x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x4Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 81 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_9x4Xor_end - MOVQ in_base+24(FP), AX - MOVQ (AX), DX - MOVQ 24(AX), BX - MOVQ 48(AX), SI - MOVQ 72(AX), DI - MOVQ 96(AX), R8 - MOVQ 120(AX), R9 - MOVQ 144(AX), R10 - MOVQ 168(AX), R11 - MOVQ 192(AX), AX - MOVQ out_base+48(FP), R12 - MOVQ (R12), R13 - MOVQ 24(R12), R14 - MOVQ 48(R12), R15 - MOVQ 72(R12), R12 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R13 - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R12 - - // Add start offset to input - ADDQ BP, DX - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, AX - MOVQ $0x0000000f, BP - MOVQ BP, X4 - VPBROADCASTB X4, Y4 - MOVQ n+80(FP), BP - SHRQ $0x05, BP - -mulAvxTwo_9x4Xor_loop: - // Load and process 32 bytes from input 0 to 4 outputs - VMOVDQU (DX), Y7 - ADDQ $0x20, DX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU (R13), Y0 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU (R14), Y1 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU (R15), Y2 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU (R12), Y3 - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 1 to 4 outputs - VMOVDQU (BX), Y7 - ADDQ $0x20, BX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 2 to 4 outputs - VMOVDQU (SI), Y7 - ADDQ $0x20, SI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 3 to 4 outputs - VMOVDQU (DI), Y7 - ADDQ $0x20, DI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 768(CX), Y5 - VMOVDQU 800(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 832(CX), Y5 - VMOVDQU 864(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 896(CX), Y5 - VMOVDQU 928(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 960(CX), Y5 - VMOVDQU 992(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 4 to 4 outputs - VMOVDQU (R8), Y7 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1024(CX), Y5 - VMOVDQU 1056(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1088(CX), Y5 - VMOVDQU 1120(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1152(CX), Y5 - VMOVDQU 1184(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1216(CX), Y5 - VMOVDQU 1248(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 5 to 4 outputs - VMOVDQU (R9), Y7 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1280(CX), Y5 - VMOVDQU 1312(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1344(CX), Y5 - VMOVDQU 1376(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1408(CX), Y5 - VMOVDQU 1440(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1472(CX), Y5 - VMOVDQU 1504(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 6 to 4 outputs - VMOVDQU (R10), Y7 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1536(CX), Y5 - VMOVDQU 1568(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1600(CX), Y5 - VMOVDQU 1632(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1664(CX), Y5 - VMOVDQU 1696(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1728(CX), Y5 - VMOVDQU 1760(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 7 to 4 outputs - VMOVDQU (R11), Y7 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1792(CX), Y5 - VMOVDQU 1824(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1856(CX), Y5 - VMOVDQU 1888(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1920(CX), Y5 - VMOVDQU 1952(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1984(CX), Y5 - VMOVDQU 2016(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 8 to 4 outputs - VMOVDQU (AX), Y7 - ADDQ $0x20, AX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 2048(CX), Y5 - VMOVDQU 2080(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 2112(CX), Y5 - VMOVDQU 2144(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 2176(CX), Y5 - VMOVDQU 2208(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 2240(CX), Y5 - VMOVDQU 2272(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Store 4 outputs - VMOVDQU Y0, (R13) - ADDQ $0x20, R13 - VMOVDQU Y1, (R14) - ADDQ $0x20, R14 - VMOVDQU Y2, (R15) - ADDQ $0x20, R15 - VMOVDQU Y3, (R12) - ADDQ $0x20, R12 - - // Prepare for next loop - DECQ BP - JNZ mulAvxTwo_9x4Xor_loop - VZEROUPPER - -mulAvxTwo_9x4Xor_end: - RET - -// func mulAvxTwo_9x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x5(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 100 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_9x5_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ start+72(FP), R14 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X5 - VPBROADCASTB X5, Y5 - -mulAvxTwo_9x5_loop: - // Load and process 32 bytes from input 0 to 5 outputs - VMOVDQU (BX), Y8 - ADDQ $0x20, BX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU (CX), Y6 - VMOVDQU 32(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y0 - VMOVDQU 64(CX), Y6 - VMOVDQU 96(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y1 - VMOVDQU 128(CX), Y6 - VMOVDQU 160(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y2 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y3 - VMOVDQU 256(CX), Y6 - VMOVDQU 288(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y4 - - // Load and process 32 bytes from input 1 to 5 outputs - VMOVDQU (SI), Y8 - ADDQ $0x20, SI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 320(CX), Y6 - VMOVDQU 352(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 384(CX), Y6 - VMOVDQU 416(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 448(CX), Y6 - VMOVDQU 480(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 512(CX), Y6 - VMOVDQU 544(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 576(CX), Y6 - VMOVDQU 608(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 2 to 5 outputs - VMOVDQU (DI), Y8 - ADDQ $0x20, DI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 640(CX), Y6 - VMOVDQU 672(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 704(CX), Y6 - VMOVDQU 736(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 768(CX), Y6 - VMOVDQU 800(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 832(CX), Y6 - VMOVDQU 864(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 896(CX), Y6 - VMOVDQU 928(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 3 to 5 outputs - VMOVDQU (R8), Y8 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 960(CX), Y6 - VMOVDQU 992(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1024(CX), Y6 - VMOVDQU 1056(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1088(CX), Y6 - VMOVDQU 1120(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1152(CX), Y6 - VMOVDQU 1184(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1216(CX), Y6 - VMOVDQU 1248(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 4 to 5 outputs - VMOVDQU (R9), Y8 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1280(CX), Y6 - VMOVDQU 1312(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1344(CX), Y6 - VMOVDQU 1376(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1408(CX), Y6 - VMOVDQU 1440(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1472(CX), Y6 - VMOVDQU 1504(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1536(CX), Y6 - VMOVDQU 1568(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 5 to 5 outputs - VMOVDQU (R10), Y8 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1600(CX), Y6 - VMOVDQU 1632(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1664(CX), Y6 - VMOVDQU 1696(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1728(CX), Y6 - VMOVDQU 1760(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1792(CX), Y6 - VMOVDQU 1824(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1856(CX), Y6 - VMOVDQU 1888(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 6 to 5 outputs - VMOVDQU (R11), Y8 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1920(CX), Y6 - VMOVDQU 1952(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1984(CX), Y6 - VMOVDQU 2016(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 2048(CX), Y6 - VMOVDQU 2080(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 2112(CX), Y6 - VMOVDQU 2144(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 2176(CX), Y6 - VMOVDQU 2208(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 7 to 5 outputs - VMOVDQU (R12), Y8 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 2240(CX), Y6 - VMOVDQU 2272(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 2304(CX), Y6 - VMOVDQU 2336(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 2368(CX), Y6 - VMOVDQU 2400(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 2432(CX), Y6 - VMOVDQU 2464(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 2496(CX), Y6 - VMOVDQU 2528(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 8 to 5 outputs - VMOVDQU (DX), Y8 - ADDQ $0x20, DX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 2560(CX), Y6 - VMOVDQU 2592(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 2624(CX), Y6 - VMOVDQU 2656(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 2688(CX), Y6 - VMOVDQU 2720(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 2752(CX), Y6 - VMOVDQU 2784(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 2816(CX), Y6 - VMOVDQU 2848(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Store 5 outputs - MOVQ (R13), R15 - VMOVDQU Y0, (R15)(R14*1) - MOVQ 24(R13), R15 - VMOVDQU Y1, (R15)(R14*1) - MOVQ 48(R13), R15 - VMOVDQU Y2, (R15)(R14*1) - MOVQ 72(R13), R15 - VMOVDQU Y3, (R15)(R14*1) - MOVQ 96(R13), R15 - VMOVDQU Y4, (R15)(R14*1) - - // Prepare for next loop - ADDQ $0x20, R14 - DECQ AX - JNZ mulAvxTwo_9x5_loop - VZEROUPPER - -mulAvxTwo_9x5_end: - RET - -// func mulAvxTwo_9x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x5Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 100 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_9x5Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ start+72(FP), R14 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X5 - VPBROADCASTB X5, Y5 - -mulAvxTwo_9x5Xor_loop: - // Load and process 32 bytes from input 0 to 5 outputs - VMOVDQU (BX), Y8 - ADDQ $0x20, BX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - MOVQ (R13), R15 - VMOVDQU (R15)(R14*1), Y0 - VMOVDQU (CX), Y6 - VMOVDQU 32(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - MOVQ 24(R13), R15 - VMOVDQU (R15)(R14*1), Y1 - VMOVDQU 64(CX), Y6 - VMOVDQU 96(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - MOVQ 48(R13), R15 - VMOVDQU (R15)(R14*1), Y2 - VMOVDQU 128(CX), Y6 - VMOVDQU 160(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - MOVQ 72(R13), R15 - VMOVDQU (R15)(R14*1), Y3 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - MOVQ 96(R13), R15 - VMOVDQU (R15)(R14*1), Y4 - VMOVDQU 256(CX), Y6 - VMOVDQU 288(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 1 to 5 outputs - VMOVDQU (SI), Y8 - ADDQ $0x20, SI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 320(CX), Y6 - VMOVDQU 352(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 384(CX), Y6 - VMOVDQU 416(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 448(CX), Y6 - VMOVDQU 480(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 512(CX), Y6 - VMOVDQU 544(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 576(CX), Y6 - VMOVDQU 608(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 2 to 5 outputs - VMOVDQU (DI), Y8 - ADDQ $0x20, DI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 640(CX), Y6 - VMOVDQU 672(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 704(CX), Y6 - VMOVDQU 736(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 768(CX), Y6 - VMOVDQU 800(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 832(CX), Y6 - VMOVDQU 864(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 896(CX), Y6 - VMOVDQU 928(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 3 to 5 outputs - VMOVDQU (R8), Y8 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 960(CX), Y6 - VMOVDQU 992(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1024(CX), Y6 - VMOVDQU 1056(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1088(CX), Y6 - VMOVDQU 1120(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1152(CX), Y6 - VMOVDQU 1184(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1216(CX), Y6 - VMOVDQU 1248(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 4 to 5 outputs - VMOVDQU (R9), Y8 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1280(CX), Y6 - VMOVDQU 1312(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1344(CX), Y6 - VMOVDQU 1376(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1408(CX), Y6 - VMOVDQU 1440(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1472(CX), Y6 - VMOVDQU 1504(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1536(CX), Y6 - VMOVDQU 1568(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 5 to 5 outputs - VMOVDQU (R10), Y8 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1600(CX), Y6 - VMOVDQU 1632(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1664(CX), Y6 - VMOVDQU 1696(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1728(CX), Y6 - VMOVDQU 1760(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1792(CX), Y6 - VMOVDQU 1824(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1856(CX), Y6 - VMOVDQU 1888(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 6 to 5 outputs - VMOVDQU (R11), Y8 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1920(CX), Y6 - VMOVDQU 1952(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1984(CX), Y6 - VMOVDQU 2016(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 2048(CX), Y6 - VMOVDQU 2080(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 2112(CX), Y6 - VMOVDQU 2144(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 2176(CX), Y6 - VMOVDQU 2208(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 7 to 5 outputs - VMOVDQU (R12), Y8 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 2240(CX), Y6 - VMOVDQU 2272(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 2304(CX), Y6 - VMOVDQU 2336(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 2368(CX), Y6 - VMOVDQU 2400(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 2432(CX), Y6 - VMOVDQU 2464(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 2496(CX), Y6 - VMOVDQU 2528(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 8 to 5 outputs - VMOVDQU (DX), Y8 - ADDQ $0x20, DX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 2560(CX), Y6 - VMOVDQU 2592(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 2624(CX), Y6 - VMOVDQU 2656(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 2688(CX), Y6 - VMOVDQU 2720(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 2752(CX), Y6 - VMOVDQU 2784(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 2816(CX), Y6 - VMOVDQU 2848(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Store 5 outputs - MOVQ (R13), R15 - VMOVDQU Y0, (R15)(R14*1) - MOVQ 24(R13), R15 - VMOVDQU Y1, (R15)(R14*1) - MOVQ 48(R13), R15 - VMOVDQU Y2, (R15)(R14*1) - MOVQ 72(R13), R15 - VMOVDQU Y3, (R15)(R14*1) - MOVQ 96(R13), R15 - VMOVDQU Y4, (R15)(R14*1) - - // Prepare for next loop - ADDQ $0x20, R14 - DECQ AX - JNZ mulAvxTwo_9x5Xor_loop - VZEROUPPER - -mulAvxTwo_9x5Xor_end: - RET - -// func mulAvxTwo_9x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x6(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 119 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_9x6_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ start+72(FP), R14 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_9x6_loop: - // Load and process 32 bytes from input 0 to 6 outputs - VMOVDQU (BX), Y9 - ADDQ $0x20, BX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y0 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y1 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y2 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y3 - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y4 - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y5 - - // Load and process 32 bytes from input 1 to 6 outputs - VMOVDQU (SI), Y9 - ADDQ $0x20, SI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 2 to 6 outputs - VMOVDQU (DI), Y9 - ADDQ $0x20, DI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 3 to 6 outputs - VMOVDQU (R8), Y9 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1152(CX), Y7 - VMOVDQU 1184(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1216(CX), Y7 - VMOVDQU 1248(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1280(CX), Y7 - VMOVDQU 1312(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1344(CX), Y7 - VMOVDQU 1376(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1408(CX), Y7 - VMOVDQU 1440(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1472(CX), Y7 - VMOVDQU 1504(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 4 to 6 outputs - VMOVDQU (R9), Y9 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1536(CX), Y7 - VMOVDQU 1568(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1600(CX), Y7 - VMOVDQU 1632(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1664(CX), Y7 - VMOVDQU 1696(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1728(CX), Y7 - VMOVDQU 1760(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1792(CX), Y7 - VMOVDQU 1824(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1856(CX), Y7 - VMOVDQU 1888(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 5 to 6 outputs - VMOVDQU (R10), Y9 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1920(CX), Y7 - VMOVDQU 1952(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1984(CX), Y7 - VMOVDQU 2016(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2048(CX), Y7 - VMOVDQU 2080(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2112(CX), Y7 - VMOVDQU 2144(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2176(CX), Y7 - VMOVDQU 2208(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 2240(CX), Y7 - VMOVDQU 2272(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 6 to 6 outputs - VMOVDQU (R11), Y9 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 2304(CX), Y7 - VMOVDQU 2336(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 2368(CX), Y7 - VMOVDQU 2400(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2432(CX), Y7 - VMOVDQU 2464(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2496(CX), Y7 - VMOVDQU 2528(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2560(CX), Y7 - VMOVDQU 2592(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 2624(CX), Y7 - VMOVDQU 2656(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 7 to 6 outputs - VMOVDQU (R12), Y9 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 2688(CX), Y7 - VMOVDQU 2720(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 2752(CX), Y7 - VMOVDQU 2784(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2816(CX), Y7 - VMOVDQU 2848(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2880(CX), Y7 - VMOVDQU 2912(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2944(CX), Y7 - VMOVDQU 2976(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 3008(CX), Y7 - VMOVDQU 3040(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 8 to 6 outputs - VMOVDQU (DX), Y9 - ADDQ $0x20, DX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 3072(CX), Y7 - VMOVDQU 3104(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 3136(CX), Y7 - VMOVDQU 3168(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 3200(CX), Y7 - VMOVDQU 3232(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 3264(CX), Y7 - VMOVDQU 3296(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 3328(CX), Y7 - VMOVDQU 3360(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 3392(CX), Y7 - VMOVDQU 3424(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Store 6 outputs - MOVQ (R13), R15 - VMOVDQU Y0, (R15)(R14*1) - MOVQ 24(R13), R15 - VMOVDQU Y1, (R15)(R14*1) - MOVQ 48(R13), R15 - VMOVDQU Y2, (R15)(R14*1) - MOVQ 72(R13), R15 - VMOVDQU Y3, (R15)(R14*1) - MOVQ 96(R13), R15 - VMOVDQU Y4, (R15)(R14*1) - MOVQ 120(R13), R15 - VMOVDQU Y5, (R15)(R14*1) - - // Prepare for next loop - ADDQ $0x20, R14 - DECQ AX - JNZ mulAvxTwo_9x6_loop - VZEROUPPER - -mulAvxTwo_9x6_end: - RET - -// func mulAvxTwo_9x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x6Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 119 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_9x6Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ start+72(FP), R14 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_9x6Xor_loop: - // Load and process 32 bytes from input 0 to 6 outputs - VMOVDQU (BX), Y9 - ADDQ $0x20, BX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - MOVQ (R13), R15 - VMOVDQU (R15)(R14*1), Y0 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - MOVQ 24(R13), R15 - VMOVDQU (R15)(R14*1), Y1 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - MOVQ 48(R13), R15 - VMOVDQU (R15)(R14*1), Y2 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - MOVQ 72(R13), R15 - VMOVDQU (R15)(R14*1), Y3 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - MOVQ 96(R13), R15 - VMOVDQU (R15)(R14*1), Y4 - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - MOVQ 120(R13), R15 - VMOVDQU (R15)(R14*1), Y5 - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 1 to 6 outputs - VMOVDQU (SI), Y9 - ADDQ $0x20, SI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 2 to 6 outputs - VMOVDQU (DI), Y9 - ADDQ $0x20, DI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 3 to 6 outputs - VMOVDQU (R8), Y9 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1152(CX), Y7 - VMOVDQU 1184(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1216(CX), Y7 - VMOVDQU 1248(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1280(CX), Y7 - VMOVDQU 1312(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1344(CX), Y7 - VMOVDQU 1376(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1408(CX), Y7 - VMOVDQU 1440(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1472(CX), Y7 - VMOVDQU 1504(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 4 to 6 outputs - VMOVDQU (R9), Y9 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1536(CX), Y7 - VMOVDQU 1568(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1600(CX), Y7 - VMOVDQU 1632(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1664(CX), Y7 - VMOVDQU 1696(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1728(CX), Y7 - VMOVDQU 1760(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1792(CX), Y7 - VMOVDQU 1824(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1856(CX), Y7 - VMOVDQU 1888(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 5 to 6 outputs - VMOVDQU (R10), Y9 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1920(CX), Y7 - VMOVDQU 1952(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1984(CX), Y7 - VMOVDQU 2016(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2048(CX), Y7 - VMOVDQU 2080(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2112(CX), Y7 - VMOVDQU 2144(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2176(CX), Y7 - VMOVDQU 2208(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 2240(CX), Y7 - VMOVDQU 2272(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 6 to 6 outputs - VMOVDQU (R11), Y9 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 2304(CX), Y7 - VMOVDQU 2336(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 2368(CX), Y7 - VMOVDQU 2400(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2432(CX), Y7 - VMOVDQU 2464(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2496(CX), Y7 - VMOVDQU 2528(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2560(CX), Y7 - VMOVDQU 2592(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 2624(CX), Y7 - VMOVDQU 2656(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 7 to 6 outputs - VMOVDQU (R12), Y9 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 2688(CX), Y7 - VMOVDQU 2720(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 2752(CX), Y7 - VMOVDQU 2784(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2816(CX), Y7 - VMOVDQU 2848(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2880(CX), Y7 - VMOVDQU 2912(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2944(CX), Y7 - VMOVDQU 2976(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 3008(CX), Y7 - VMOVDQU 3040(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 8 to 6 outputs - VMOVDQU (DX), Y9 - ADDQ $0x20, DX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 3072(CX), Y7 - VMOVDQU 3104(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 3136(CX), Y7 - VMOVDQU 3168(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 3200(CX), Y7 - VMOVDQU 3232(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 3264(CX), Y7 - VMOVDQU 3296(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 3328(CX), Y7 - VMOVDQU 3360(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 3392(CX), Y7 - VMOVDQU 3424(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Store 6 outputs - MOVQ (R13), R15 - VMOVDQU Y0, (R15)(R14*1) - MOVQ 24(R13), R15 - VMOVDQU Y1, (R15)(R14*1) - MOVQ 48(R13), R15 - VMOVDQU Y2, (R15)(R14*1) - MOVQ 72(R13), R15 - VMOVDQU Y3, (R15)(R14*1) - MOVQ 96(R13), R15 - VMOVDQU Y4, (R15)(R14*1) - MOVQ 120(R13), R15 - VMOVDQU Y5, (R15)(R14*1) - - // Prepare for next loop - ADDQ $0x20, R14 - DECQ AX - JNZ mulAvxTwo_9x6Xor_loop - VZEROUPPER - -mulAvxTwo_9x6Xor_end: - RET - -// func mulAvxTwo_9x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x7(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 138 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_9x7_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ start+72(FP), R14 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X7 - VPBROADCASTB X7, Y7 - -mulAvxTwo_9x7_loop: - // Load and process 32 bytes from input 0 to 7 outputs - VMOVDQU (BX), Y10 - ADDQ $0x20, BX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU (CX), Y8 - VMOVDQU 32(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y0 - VMOVDQU 64(CX), Y8 - VMOVDQU 96(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y1 - VMOVDQU 128(CX), Y8 - VMOVDQU 160(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y2 - VMOVDQU 192(CX), Y8 - VMOVDQU 224(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y3 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y4 - VMOVDQU 320(CX), Y8 - VMOVDQU 352(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y5 - VMOVDQU 384(CX), Y8 - VMOVDQU 416(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y6 - - // Load and process 32 bytes from input 1 to 7 outputs - VMOVDQU (SI), Y10 - ADDQ $0x20, SI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 448(CX), Y8 - VMOVDQU 480(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 512(CX), Y8 - VMOVDQU 544(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 576(CX), Y8 - VMOVDQU 608(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 640(CX), Y8 - VMOVDQU 672(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 704(CX), Y8 - VMOVDQU 736(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 768(CX), Y8 - VMOVDQU 800(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 832(CX), Y8 - VMOVDQU 864(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 2 to 7 outputs - VMOVDQU (DI), Y10 - ADDQ $0x20, DI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 896(CX), Y8 - VMOVDQU 928(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 960(CX), Y8 - VMOVDQU 992(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1024(CX), Y8 - VMOVDQU 1056(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1088(CX), Y8 - VMOVDQU 1120(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1152(CX), Y8 - VMOVDQU 1184(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1216(CX), Y8 - VMOVDQU 1248(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1280(CX), Y8 - VMOVDQU 1312(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 3 to 7 outputs - VMOVDQU (R8), Y10 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1344(CX), Y8 - VMOVDQU 1376(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1408(CX), Y8 - VMOVDQU 1440(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1472(CX), Y8 - VMOVDQU 1504(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1536(CX), Y8 - VMOVDQU 1568(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1600(CX), Y8 - VMOVDQU 1632(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1664(CX), Y8 - VMOVDQU 1696(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1728(CX), Y8 - VMOVDQU 1760(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 4 to 7 outputs - VMOVDQU (R9), Y10 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1792(CX), Y8 - VMOVDQU 1824(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1856(CX), Y8 - VMOVDQU 1888(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1920(CX), Y8 - VMOVDQU 1952(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1984(CX), Y8 - VMOVDQU 2016(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2048(CX), Y8 - VMOVDQU 2080(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 2112(CX), Y8 - VMOVDQU 2144(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 2176(CX), Y8 - VMOVDQU 2208(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 5 to 7 outputs - VMOVDQU (R10), Y10 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 2240(CX), Y8 - VMOVDQU 2272(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 2304(CX), Y8 - VMOVDQU 2336(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 2368(CX), Y8 - VMOVDQU 2400(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 2432(CX), Y8 - VMOVDQU 2464(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2496(CX), Y8 - VMOVDQU 2528(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 2560(CX), Y8 - VMOVDQU 2592(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 2624(CX), Y8 - VMOVDQU 2656(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 6 to 7 outputs - VMOVDQU (R11), Y10 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 2688(CX), Y8 - VMOVDQU 2720(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 2752(CX), Y8 - VMOVDQU 2784(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 2816(CX), Y8 - VMOVDQU 2848(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 2880(CX), Y8 - VMOVDQU 2912(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2944(CX), Y8 - VMOVDQU 2976(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 3008(CX), Y8 - VMOVDQU 3040(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 3072(CX), Y8 - VMOVDQU 3104(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 7 to 7 outputs - VMOVDQU (R12), Y10 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 3136(CX), Y8 - VMOVDQU 3168(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 3200(CX), Y8 - VMOVDQU 3232(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 3264(CX), Y8 - VMOVDQU 3296(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 3328(CX), Y8 - VMOVDQU 3360(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 3392(CX), Y8 - VMOVDQU 3424(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 3456(CX), Y8 - VMOVDQU 3488(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 3520(CX), Y8 - VMOVDQU 3552(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 8 to 7 outputs - VMOVDQU (DX), Y10 - ADDQ $0x20, DX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 3584(CX), Y8 - VMOVDQU 3616(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 3648(CX), Y8 - VMOVDQU 3680(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 3712(CX), Y8 - VMOVDQU 3744(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 3776(CX), Y8 - VMOVDQU 3808(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 3840(CX), Y8 - VMOVDQU 3872(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 3904(CX), Y8 - VMOVDQU 3936(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 3968(CX), Y8 - VMOVDQU 4000(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Store 7 outputs - MOVQ (R13), R15 - VMOVDQU Y0, (R15)(R14*1) - MOVQ 24(R13), R15 - VMOVDQU Y1, (R15)(R14*1) - MOVQ 48(R13), R15 - VMOVDQU Y2, (R15)(R14*1) - MOVQ 72(R13), R15 - VMOVDQU Y3, (R15)(R14*1) - MOVQ 96(R13), R15 - VMOVDQU Y4, (R15)(R14*1) - MOVQ 120(R13), R15 - VMOVDQU Y5, (R15)(R14*1) - MOVQ 144(R13), R15 - VMOVDQU Y6, (R15)(R14*1) - - // Prepare for next loop - ADDQ $0x20, R14 - DECQ AX - JNZ mulAvxTwo_9x7_loop - VZEROUPPER - -mulAvxTwo_9x7_end: - RET - -// func mulAvxTwo_9x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x7Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 138 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_9x7Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ start+72(FP), R14 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X7 - VPBROADCASTB X7, Y7 - -mulAvxTwo_9x7Xor_loop: - // Load and process 32 bytes from input 0 to 7 outputs - VMOVDQU (BX), Y10 - ADDQ $0x20, BX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - MOVQ (R13), R15 - VMOVDQU (R15)(R14*1), Y0 - VMOVDQU (CX), Y8 - VMOVDQU 32(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - MOVQ 24(R13), R15 - VMOVDQU (R15)(R14*1), Y1 - VMOVDQU 64(CX), Y8 - VMOVDQU 96(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - MOVQ 48(R13), R15 - VMOVDQU (R15)(R14*1), Y2 - VMOVDQU 128(CX), Y8 - VMOVDQU 160(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - MOVQ 72(R13), R15 - VMOVDQU (R15)(R14*1), Y3 - VMOVDQU 192(CX), Y8 - VMOVDQU 224(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - MOVQ 96(R13), R15 - VMOVDQU (R15)(R14*1), Y4 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - MOVQ 120(R13), R15 - VMOVDQU (R15)(R14*1), Y5 - VMOVDQU 320(CX), Y8 - VMOVDQU 352(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - MOVQ 144(R13), R15 - VMOVDQU (R15)(R14*1), Y6 - VMOVDQU 384(CX), Y8 - VMOVDQU 416(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 1 to 7 outputs - VMOVDQU (SI), Y10 - ADDQ $0x20, SI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 448(CX), Y8 - VMOVDQU 480(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 512(CX), Y8 - VMOVDQU 544(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 576(CX), Y8 - VMOVDQU 608(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 640(CX), Y8 - VMOVDQU 672(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 704(CX), Y8 - VMOVDQU 736(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 768(CX), Y8 - VMOVDQU 800(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 832(CX), Y8 - VMOVDQU 864(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 2 to 7 outputs - VMOVDQU (DI), Y10 - ADDQ $0x20, DI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 896(CX), Y8 - VMOVDQU 928(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 960(CX), Y8 - VMOVDQU 992(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1024(CX), Y8 - VMOVDQU 1056(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1088(CX), Y8 - VMOVDQU 1120(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1152(CX), Y8 - VMOVDQU 1184(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1216(CX), Y8 - VMOVDQU 1248(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1280(CX), Y8 - VMOVDQU 1312(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 3 to 7 outputs - VMOVDQU (R8), Y10 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1344(CX), Y8 - VMOVDQU 1376(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1408(CX), Y8 - VMOVDQU 1440(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1472(CX), Y8 - VMOVDQU 1504(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1536(CX), Y8 - VMOVDQU 1568(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1600(CX), Y8 - VMOVDQU 1632(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1664(CX), Y8 - VMOVDQU 1696(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1728(CX), Y8 - VMOVDQU 1760(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 4 to 7 outputs - VMOVDQU (R9), Y10 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1792(CX), Y8 - VMOVDQU 1824(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1856(CX), Y8 - VMOVDQU 1888(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1920(CX), Y8 - VMOVDQU 1952(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1984(CX), Y8 - VMOVDQU 2016(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2048(CX), Y8 - VMOVDQU 2080(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 2112(CX), Y8 - VMOVDQU 2144(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 2176(CX), Y8 - VMOVDQU 2208(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 5 to 7 outputs - VMOVDQU (R10), Y10 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 2240(CX), Y8 - VMOVDQU 2272(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 2304(CX), Y8 - VMOVDQU 2336(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 2368(CX), Y8 - VMOVDQU 2400(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 2432(CX), Y8 - VMOVDQU 2464(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2496(CX), Y8 - VMOVDQU 2528(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 2560(CX), Y8 - VMOVDQU 2592(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 2624(CX), Y8 - VMOVDQU 2656(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 6 to 7 outputs - VMOVDQU (R11), Y10 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 2688(CX), Y8 - VMOVDQU 2720(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 2752(CX), Y8 - VMOVDQU 2784(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 2816(CX), Y8 - VMOVDQU 2848(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 2880(CX), Y8 - VMOVDQU 2912(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2944(CX), Y8 - VMOVDQU 2976(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 3008(CX), Y8 - VMOVDQU 3040(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 3072(CX), Y8 - VMOVDQU 3104(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 7 to 7 outputs - VMOVDQU (R12), Y10 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 3136(CX), Y8 - VMOVDQU 3168(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 3200(CX), Y8 - VMOVDQU 3232(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 3264(CX), Y8 - VMOVDQU 3296(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 3328(CX), Y8 - VMOVDQU 3360(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 3392(CX), Y8 - VMOVDQU 3424(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 3456(CX), Y8 - VMOVDQU 3488(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 3520(CX), Y8 - VMOVDQU 3552(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 8 to 7 outputs - VMOVDQU (DX), Y10 - ADDQ $0x20, DX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 3584(CX), Y8 - VMOVDQU 3616(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 3648(CX), Y8 - VMOVDQU 3680(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 3712(CX), Y8 - VMOVDQU 3744(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 3776(CX), Y8 - VMOVDQU 3808(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 3840(CX), Y8 - VMOVDQU 3872(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 3904(CX), Y8 - VMOVDQU 3936(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 3968(CX), Y8 - VMOVDQU 4000(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Store 7 outputs - MOVQ (R13), R15 - VMOVDQU Y0, (R15)(R14*1) - MOVQ 24(R13), R15 - VMOVDQU Y1, (R15)(R14*1) - MOVQ 48(R13), R15 - VMOVDQU Y2, (R15)(R14*1) - MOVQ 72(R13), R15 - VMOVDQU Y3, (R15)(R14*1) - MOVQ 96(R13), R15 - VMOVDQU Y4, (R15)(R14*1) - MOVQ 120(R13), R15 - VMOVDQU Y5, (R15)(R14*1) - MOVQ 144(R13), R15 - VMOVDQU Y6, (R15)(R14*1) - - // Prepare for next loop - ADDQ $0x20, R14 - DECQ AX - JNZ mulAvxTwo_9x7Xor_loop - VZEROUPPER - -mulAvxTwo_9x7Xor_end: - RET - -// func mulAvxTwo_9x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x8(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 157 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_9x8_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ start+72(FP), R14 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X8 - VPBROADCASTB X8, Y8 - -mulAvxTwo_9x8_loop: - // Load and process 32 bytes from input 0 to 8 outputs - VMOVDQU (BX), Y11 - ADDQ $0x20, BX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU (CX), Y9 - VMOVDQU 32(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y0 - VMOVDQU 64(CX), Y9 - VMOVDQU 96(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y1 - VMOVDQU 128(CX), Y9 - VMOVDQU 160(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y2 - VMOVDQU 192(CX), Y9 - VMOVDQU 224(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y3 - VMOVDQU 256(CX), Y9 - VMOVDQU 288(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y4 - VMOVDQU 320(CX), Y9 - VMOVDQU 352(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y5 - VMOVDQU 384(CX), Y9 - VMOVDQU 416(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y6 - VMOVDQU 448(CX), Y9 - VMOVDQU 480(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y7 - - // Load and process 32 bytes from input 1 to 8 outputs - VMOVDQU (SI), Y11 - ADDQ $0x20, SI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 512(CX), Y9 - VMOVDQU 544(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 576(CX), Y9 - VMOVDQU 608(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y9 - VMOVDQU 672(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 704(CX), Y9 - VMOVDQU 736(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 768(CX), Y9 - VMOVDQU 800(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 832(CX), Y9 - VMOVDQU 864(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 896(CX), Y9 - VMOVDQU 928(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 960(CX), Y9 - VMOVDQU 992(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 2 to 8 outputs - VMOVDQU (DI), Y11 - ADDQ $0x20, DI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1024(CX), Y9 - VMOVDQU 1056(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1088(CX), Y9 - VMOVDQU 1120(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1152(CX), Y9 - VMOVDQU 1184(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1216(CX), Y9 - VMOVDQU 1248(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y9 - VMOVDQU 1312(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1344(CX), Y9 - VMOVDQU 1376(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1408(CX), Y9 - VMOVDQU 1440(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1472(CX), Y9 - VMOVDQU 1504(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 3 to 8 outputs - VMOVDQU (R8), Y11 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1536(CX), Y9 - VMOVDQU 1568(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1600(CX), Y9 - VMOVDQU 1632(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1664(CX), Y9 - VMOVDQU 1696(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1728(CX), Y9 - VMOVDQU 1760(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1792(CX), Y9 - VMOVDQU 1824(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1856(CX), Y9 - VMOVDQU 1888(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1920(CX), Y9 - VMOVDQU 1952(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1984(CX), Y9 - VMOVDQU 2016(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 4 to 8 outputs - VMOVDQU (R9), Y11 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 2048(CX), Y9 - VMOVDQU 2080(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 2112(CX), Y9 - VMOVDQU 2144(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 2176(CX), Y9 - VMOVDQU 2208(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 2240(CX), Y9 - VMOVDQU 2272(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 2304(CX), Y9 - VMOVDQU 2336(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 2368(CX), Y9 - VMOVDQU 2400(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 2432(CX), Y9 - VMOVDQU 2464(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 2496(CX), Y9 - VMOVDQU 2528(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 5 to 8 outputs - VMOVDQU (R10), Y11 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 2560(CX), Y9 - VMOVDQU 2592(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 2624(CX), Y9 - VMOVDQU 2656(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 2688(CX), Y9 - VMOVDQU 2720(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 2752(CX), Y9 - VMOVDQU 2784(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 2816(CX), Y9 - VMOVDQU 2848(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 2880(CX), Y9 - VMOVDQU 2912(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 2944(CX), Y9 - VMOVDQU 2976(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 3008(CX), Y9 - VMOVDQU 3040(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 6 to 8 outputs - VMOVDQU (R11), Y11 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 3072(CX), Y9 - VMOVDQU 3104(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 3136(CX), Y9 - VMOVDQU 3168(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 3200(CX), Y9 - VMOVDQU 3232(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 3264(CX), Y9 - VMOVDQU 3296(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 3328(CX), Y9 - VMOVDQU 3360(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 3392(CX), Y9 - VMOVDQU 3424(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 3456(CX), Y9 - VMOVDQU 3488(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 3520(CX), Y9 - VMOVDQU 3552(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 7 to 8 outputs - VMOVDQU (R12), Y11 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 3584(CX), Y9 - VMOVDQU 3616(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 3648(CX), Y9 - VMOVDQU 3680(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 3712(CX), Y9 - VMOVDQU 3744(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 3776(CX), Y9 - VMOVDQU 3808(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 3840(CX), Y9 - VMOVDQU 3872(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 3904(CX), Y9 - VMOVDQU 3936(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 3968(CX), Y9 - VMOVDQU 4000(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 4032(CX), Y9 - VMOVDQU 4064(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 8 to 8 outputs - VMOVDQU (DX), Y11 - ADDQ $0x20, DX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 4096(CX), Y9 - VMOVDQU 4128(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 4160(CX), Y9 - VMOVDQU 4192(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 4224(CX), Y9 - VMOVDQU 4256(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 4288(CX), Y9 - VMOVDQU 4320(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 4352(CX), Y9 - VMOVDQU 4384(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 4416(CX), Y9 - VMOVDQU 4448(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 4480(CX), Y9 - VMOVDQU 4512(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 4544(CX), Y9 - VMOVDQU 4576(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Store 8 outputs - MOVQ (R13), R15 - VMOVDQU Y0, (R15)(R14*1) - MOVQ 24(R13), R15 - VMOVDQU Y1, (R15)(R14*1) - MOVQ 48(R13), R15 - VMOVDQU Y2, (R15)(R14*1) - MOVQ 72(R13), R15 - VMOVDQU Y3, (R15)(R14*1) - MOVQ 96(R13), R15 - VMOVDQU Y4, (R15)(R14*1) - MOVQ 120(R13), R15 - VMOVDQU Y5, (R15)(R14*1) - MOVQ 144(R13), R15 - VMOVDQU Y6, (R15)(R14*1) - MOVQ 168(R13), R15 - VMOVDQU Y7, (R15)(R14*1) - - // Prepare for next loop - ADDQ $0x20, R14 - DECQ AX - JNZ mulAvxTwo_9x8_loop - VZEROUPPER - -mulAvxTwo_9x8_end: - RET - -// func mulAvxTwo_9x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x8Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 157 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_9x8Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ start+72(FP), R14 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X8 - VPBROADCASTB X8, Y8 - -mulAvxTwo_9x8Xor_loop: - // Load and process 32 bytes from input 0 to 8 outputs - VMOVDQU (BX), Y11 - ADDQ $0x20, BX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - MOVQ (R13), R15 - VMOVDQU (R15)(R14*1), Y0 - VMOVDQU (CX), Y9 - VMOVDQU 32(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - MOVQ 24(R13), R15 - VMOVDQU (R15)(R14*1), Y1 - VMOVDQU 64(CX), Y9 - VMOVDQU 96(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - MOVQ 48(R13), R15 - VMOVDQU (R15)(R14*1), Y2 - VMOVDQU 128(CX), Y9 - VMOVDQU 160(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - MOVQ 72(R13), R15 - VMOVDQU (R15)(R14*1), Y3 - VMOVDQU 192(CX), Y9 - VMOVDQU 224(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - MOVQ 96(R13), R15 - VMOVDQU (R15)(R14*1), Y4 - VMOVDQU 256(CX), Y9 - VMOVDQU 288(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - MOVQ 120(R13), R15 - VMOVDQU (R15)(R14*1), Y5 - VMOVDQU 320(CX), Y9 - VMOVDQU 352(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - MOVQ 144(R13), R15 - VMOVDQU (R15)(R14*1), Y6 - VMOVDQU 384(CX), Y9 - VMOVDQU 416(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - MOVQ 168(R13), R15 - VMOVDQU (R15)(R14*1), Y7 - VMOVDQU 448(CX), Y9 - VMOVDQU 480(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 1 to 8 outputs - VMOVDQU (SI), Y11 - ADDQ $0x20, SI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 512(CX), Y9 - VMOVDQU 544(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 576(CX), Y9 - VMOVDQU 608(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y9 - VMOVDQU 672(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 704(CX), Y9 - VMOVDQU 736(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 768(CX), Y9 - VMOVDQU 800(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 832(CX), Y9 - VMOVDQU 864(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 896(CX), Y9 - VMOVDQU 928(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 960(CX), Y9 - VMOVDQU 992(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 2 to 8 outputs - VMOVDQU (DI), Y11 - ADDQ $0x20, DI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1024(CX), Y9 - VMOVDQU 1056(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1088(CX), Y9 - VMOVDQU 1120(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1152(CX), Y9 - VMOVDQU 1184(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1216(CX), Y9 - VMOVDQU 1248(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y9 - VMOVDQU 1312(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1344(CX), Y9 - VMOVDQU 1376(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1408(CX), Y9 - VMOVDQU 1440(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1472(CX), Y9 - VMOVDQU 1504(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 3 to 8 outputs - VMOVDQU (R8), Y11 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1536(CX), Y9 - VMOVDQU 1568(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1600(CX), Y9 - VMOVDQU 1632(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1664(CX), Y9 - VMOVDQU 1696(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1728(CX), Y9 - VMOVDQU 1760(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1792(CX), Y9 - VMOVDQU 1824(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1856(CX), Y9 - VMOVDQU 1888(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1920(CX), Y9 - VMOVDQU 1952(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1984(CX), Y9 - VMOVDQU 2016(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 4 to 8 outputs - VMOVDQU (R9), Y11 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 2048(CX), Y9 - VMOVDQU 2080(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 2112(CX), Y9 - VMOVDQU 2144(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 2176(CX), Y9 - VMOVDQU 2208(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 2240(CX), Y9 - VMOVDQU 2272(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 2304(CX), Y9 - VMOVDQU 2336(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 2368(CX), Y9 - VMOVDQU 2400(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 2432(CX), Y9 - VMOVDQU 2464(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 2496(CX), Y9 - VMOVDQU 2528(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 5 to 8 outputs - VMOVDQU (R10), Y11 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 2560(CX), Y9 - VMOVDQU 2592(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 2624(CX), Y9 - VMOVDQU 2656(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 2688(CX), Y9 - VMOVDQU 2720(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 2752(CX), Y9 - VMOVDQU 2784(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 2816(CX), Y9 - VMOVDQU 2848(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 2880(CX), Y9 - VMOVDQU 2912(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 2944(CX), Y9 - VMOVDQU 2976(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 3008(CX), Y9 - VMOVDQU 3040(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 6 to 8 outputs - VMOVDQU (R11), Y11 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 3072(CX), Y9 - VMOVDQU 3104(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 3136(CX), Y9 - VMOVDQU 3168(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 3200(CX), Y9 - VMOVDQU 3232(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 3264(CX), Y9 - VMOVDQU 3296(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 3328(CX), Y9 - VMOVDQU 3360(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 3392(CX), Y9 - VMOVDQU 3424(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 3456(CX), Y9 - VMOVDQU 3488(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 3520(CX), Y9 - VMOVDQU 3552(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 7 to 8 outputs - VMOVDQU (R12), Y11 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 3584(CX), Y9 - VMOVDQU 3616(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 3648(CX), Y9 - VMOVDQU 3680(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 3712(CX), Y9 - VMOVDQU 3744(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 3776(CX), Y9 - VMOVDQU 3808(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 3840(CX), Y9 - VMOVDQU 3872(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 3904(CX), Y9 - VMOVDQU 3936(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 3968(CX), Y9 - VMOVDQU 4000(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 4032(CX), Y9 - VMOVDQU 4064(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 8 to 8 outputs - VMOVDQU (DX), Y11 - ADDQ $0x20, DX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 4096(CX), Y9 - VMOVDQU 4128(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 4160(CX), Y9 - VMOVDQU 4192(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 4224(CX), Y9 - VMOVDQU 4256(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 4288(CX), Y9 - VMOVDQU 4320(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 4352(CX), Y9 - VMOVDQU 4384(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 4416(CX), Y9 - VMOVDQU 4448(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 4480(CX), Y9 - VMOVDQU 4512(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 4544(CX), Y9 - VMOVDQU 4576(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Store 8 outputs - MOVQ (R13), R15 - VMOVDQU Y0, (R15)(R14*1) - MOVQ 24(R13), R15 - VMOVDQU Y1, (R15)(R14*1) - MOVQ 48(R13), R15 - VMOVDQU Y2, (R15)(R14*1) - MOVQ 72(R13), R15 - VMOVDQU Y3, (R15)(R14*1) - MOVQ 96(R13), R15 - VMOVDQU Y4, (R15)(R14*1) - MOVQ 120(R13), R15 - VMOVDQU Y5, (R15)(R14*1) - MOVQ 144(R13), R15 - VMOVDQU Y6, (R15)(R14*1) - MOVQ 168(R13), R15 - VMOVDQU Y7, (R15)(R14*1) - - // Prepare for next loop - ADDQ $0x20, R14 - DECQ AX - JNZ mulAvxTwo_9x8Xor_loop - VZEROUPPER - -mulAvxTwo_9x8Xor_end: - RET - -// func mulAvxTwo_9x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x9(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 176 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_9x9_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ start+72(FP), R14 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X9 - VPBROADCASTB X9, Y9 - -mulAvxTwo_9x9_loop: - // Load and process 32 bytes from input 0 to 9 outputs - VMOVDQU (BX), Y12 - ADDQ $0x20, BX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU (CX), Y10 - VMOVDQU 32(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y0 - VMOVDQU 64(CX), Y10 - VMOVDQU 96(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y1 - VMOVDQU 128(CX), Y10 - VMOVDQU 160(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y2 - VMOVDQU 192(CX), Y10 - VMOVDQU 224(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y3 - VMOVDQU 256(CX), Y10 - VMOVDQU 288(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y4 - VMOVDQU 320(CX), Y10 - VMOVDQU 352(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y5 - VMOVDQU 384(CX), Y10 - VMOVDQU 416(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y6 - VMOVDQU 448(CX), Y10 - VMOVDQU 480(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y7 - VMOVDQU 512(CX), Y10 - VMOVDQU 544(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y8 - - // Load and process 32 bytes from input 1 to 9 outputs - VMOVDQU (SI), Y12 - ADDQ $0x20, SI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 576(CX), Y10 - VMOVDQU 608(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 640(CX), Y10 - VMOVDQU 672(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 704(CX), Y10 - VMOVDQU 736(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 768(CX), Y10 - VMOVDQU 800(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 832(CX), Y10 - VMOVDQU 864(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 896(CX), Y10 - VMOVDQU 928(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 960(CX), Y10 - VMOVDQU 992(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1024(CX), Y10 - VMOVDQU 1056(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1088(CX), Y10 - VMOVDQU 1120(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 2 to 9 outputs - VMOVDQU (DI), Y12 - ADDQ $0x20, DI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1152(CX), Y10 - VMOVDQU 1184(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1216(CX), Y10 - VMOVDQU 1248(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1280(CX), Y10 - VMOVDQU 1312(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1344(CX), Y10 - VMOVDQU 1376(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1408(CX), Y10 - VMOVDQU 1440(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 1472(CX), Y10 - VMOVDQU 1504(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 1536(CX), Y10 - VMOVDQU 1568(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1600(CX), Y10 - VMOVDQU 1632(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1664(CX), Y10 - VMOVDQU 1696(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 3 to 9 outputs - VMOVDQU (R8), Y12 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1728(CX), Y10 - VMOVDQU 1760(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1792(CX), Y10 - VMOVDQU 1824(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1856(CX), Y10 - VMOVDQU 1888(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1920(CX), Y10 - VMOVDQU 1952(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1984(CX), Y10 - VMOVDQU 2016(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2048(CX), Y10 - VMOVDQU 2080(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2112(CX), Y10 - VMOVDQU 2144(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2176(CX), Y10 - VMOVDQU 2208(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2240(CX), Y10 - VMOVDQU 2272(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 4 to 9 outputs - VMOVDQU (R9), Y12 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 2304(CX), Y10 - VMOVDQU 2336(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 2368(CX), Y10 - VMOVDQU 2400(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 2432(CX), Y10 - VMOVDQU 2464(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 2496(CX), Y10 - VMOVDQU 2528(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 2560(CX), Y10 - VMOVDQU 2592(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2624(CX), Y10 - VMOVDQU 2656(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2688(CX), Y10 - VMOVDQU 2720(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2752(CX), Y10 - VMOVDQU 2784(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2816(CX), Y10 - VMOVDQU 2848(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 5 to 9 outputs - VMOVDQU (R10), Y12 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 2880(CX), Y10 - VMOVDQU 2912(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 2944(CX), Y10 - VMOVDQU 2976(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 3008(CX), Y10 - VMOVDQU 3040(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 3072(CX), Y10 - VMOVDQU 3104(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 3136(CX), Y10 - VMOVDQU 3168(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 3200(CX), Y10 - VMOVDQU 3232(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 3264(CX), Y10 - VMOVDQU 3296(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 3328(CX), Y10 - VMOVDQU 3360(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 3392(CX), Y10 - VMOVDQU 3424(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 6 to 9 outputs - VMOVDQU (R11), Y12 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 3456(CX), Y10 - VMOVDQU 3488(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 3520(CX), Y10 - VMOVDQU 3552(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 3584(CX), Y10 - VMOVDQU 3616(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 3648(CX), Y10 - VMOVDQU 3680(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 3712(CX), Y10 - VMOVDQU 3744(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 3776(CX), Y10 - VMOVDQU 3808(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 3840(CX), Y10 - VMOVDQU 3872(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 3904(CX), Y10 - VMOVDQU 3936(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 3968(CX), Y10 - VMOVDQU 4000(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 7 to 9 outputs - VMOVDQU (R12), Y12 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 4032(CX), Y10 - VMOVDQU 4064(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 4096(CX), Y10 - VMOVDQU 4128(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 4160(CX), Y10 - VMOVDQU 4192(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 4224(CX), Y10 - VMOVDQU 4256(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 4288(CX), Y10 - VMOVDQU 4320(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 4352(CX), Y10 - VMOVDQU 4384(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 4416(CX), Y10 - VMOVDQU 4448(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 4480(CX), Y10 - VMOVDQU 4512(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 4544(CX), Y10 - VMOVDQU 4576(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 8 to 9 outputs - VMOVDQU (DX), Y12 - ADDQ $0x20, DX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 4608(CX), Y10 - VMOVDQU 4640(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 4672(CX), Y10 - VMOVDQU 4704(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 4736(CX), Y10 - VMOVDQU 4768(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 4800(CX), Y10 - VMOVDQU 4832(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 4864(CX), Y10 - VMOVDQU 4896(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 4928(CX), Y10 - VMOVDQU 4960(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 4992(CX), Y10 - VMOVDQU 5024(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 5056(CX), Y10 - VMOVDQU 5088(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 5120(CX), Y10 - VMOVDQU 5152(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Store 9 outputs - MOVQ (R13), R15 - VMOVDQU Y0, (R15)(R14*1) - MOVQ 24(R13), R15 - VMOVDQU Y1, (R15)(R14*1) - MOVQ 48(R13), R15 - VMOVDQU Y2, (R15)(R14*1) - MOVQ 72(R13), R15 - VMOVDQU Y3, (R15)(R14*1) - MOVQ 96(R13), R15 - VMOVDQU Y4, (R15)(R14*1) - MOVQ 120(R13), R15 - VMOVDQU Y5, (R15)(R14*1) - MOVQ 144(R13), R15 - VMOVDQU Y6, (R15)(R14*1) - MOVQ 168(R13), R15 - VMOVDQU Y7, (R15)(R14*1) - MOVQ 192(R13), R15 - VMOVDQU Y8, (R15)(R14*1) - - // Prepare for next loop - ADDQ $0x20, R14 - DECQ AX - JNZ mulAvxTwo_9x9_loop - VZEROUPPER - -mulAvxTwo_9x9_end: - RET - -// func mulAvxTwo_9x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x9Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 176 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_9x9Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ start+72(FP), R14 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X9 - VPBROADCASTB X9, Y9 - -mulAvxTwo_9x9Xor_loop: - // Load and process 32 bytes from input 0 to 9 outputs - VMOVDQU (BX), Y12 - ADDQ $0x20, BX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - MOVQ (R13), R15 - VMOVDQU (R15)(R14*1), Y0 - VMOVDQU (CX), Y10 - VMOVDQU 32(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - MOVQ 24(R13), R15 - VMOVDQU (R15)(R14*1), Y1 - VMOVDQU 64(CX), Y10 - VMOVDQU 96(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - MOVQ 48(R13), R15 - VMOVDQU (R15)(R14*1), Y2 - VMOVDQU 128(CX), Y10 - VMOVDQU 160(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - MOVQ 72(R13), R15 - VMOVDQU (R15)(R14*1), Y3 - VMOVDQU 192(CX), Y10 - VMOVDQU 224(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - MOVQ 96(R13), R15 - VMOVDQU (R15)(R14*1), Y4 - VMOVDQU 256(CX), Y10 - VMOVDQU 288(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - MOVQ 120(R13), R15 - VMOVDQU (R15)(R14*1), Y5 - VMOVDQU 320(CX), Y10 - VMOVDQU 352(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - MOVQ 144(R13), R15 - VMOVDQU (R15)(R14*1), Y6 - VMOVDQU 384(CX), Y10 - VMOVDQU 416(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - MOVQ 168(R13), R15 - VMOVDQU (R15)(R14*1), Y7 - VMOVDQU 448(CX), Y10 - VMOVDQU 480(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - MOVQ 192(R13), R15 - VMOVDQU (R15)(R14*1), Y8 - VMOVDQU 512(CX), Y10 - VMOVDQU 544(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 1 to 9 outputs - VMOVDQU (SI), Y12 - ADDQ $0x20, SI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 576(CX), Y10 - VMOVDQU 608(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 640(CX), Y10 - VMOVDQU 672(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 704(CX), Y10 - VMOVDQU 736(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 768(CX), Y10 - VMOVDQU 800(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 832(CX), Y10 - VMOVDQU 864(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 896(CX), Y10 - VMOVDQU 928(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 960(CX), Y10 - VMOVDQU 992(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1024(CX), Y10 - VMOVDQU 1056(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1088(CX), Y10 - VMOVDQU 1120(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 2 to 9 outputs - VMOVDQU (DI), Y12 - ADDQ $0x20, DI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1152(CX), Y10 - VMOVDQU 1184(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1216(CX), Y10 - VMOVDQU 1248(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1280(CX), Y10 - VMOVDQU 1312(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1344(CX), Y10 - VMOVDQU 1376(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1408(CX), Y10 - VMOVDQU 1440(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 1472(CX), Y10 - VMOVDQU 1504(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 1536(CX), Y10 - VMOVDQU 1568(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1600(CX), Y10 - VMOVDQU 1632(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1664(CX), Y10 - VMOVDQU 1696(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 3 to 9 outputs - VMOVDQU (R8), Y12 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1728(CX), Y10 - VMOVDQU 1760(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1792(CX), Y10 - VMOVDQU 1824(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1856(CX), Y10 - VMOVDQU 1888(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1920(CX), Y10 - VMOVDQU 1952(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1984(CX), Y10 - VMOVDQU 2016(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2048(CX), Y10 - VMOVDQU 2080(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2112(CX), Y10 - VMOVDQU 2144(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2176(CX), Y10 - VMOVDQU 2208(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2240(CX), Y10 - VMOVDQU 2272(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 4 to 9 outputs - VMOVDQU (R9), Y12 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 2304(CX), Y10 - VMOVDQU 2336(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 2368(CX), Y10 - VMOVDQU 2400(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 2432(CX), Y10 - VMOVDQU 2464(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 2496(CX), Y10 - VMOVDQU 2528(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 2560(CX), Y10 - VMOVDQU 2592(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2624(CX), Y10 - VMOVDQU 2656(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2688(CX), Y10 - VMOVDQU 2720(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2752(CX), Y10 - VMOVDQU 2784(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2816(CX), Y10 - VMOVDQU 2848(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 5 to 9 outputs - VMOVDQU (R10), Y12 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 2880(CX), Y10 - VMOVDQU 2912(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 2944(CX), Y10 - VMOVDQU 2976(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 3008(CX), Y10 - VMOVDQU 3040(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 3072(CX), Y10 - VMOVDQU 3104(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 3136(CX), Y10 - VMOVDQU 3168(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 3200(CX), Y10 - VMOVDQU 3232(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 3264(CX), Y10 - VMOVDQU 3296(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 3328(CX), Y10 - VMOVDQU 3360(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 3392(CX), Y10 - VMOVDQU 3424(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 6 to 9 outputs - VMOVDQU (R11), Y12 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 3456(CX), Y10 - VMOVDQU 3488(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 3520(CX), Y10 - VMOVDQU 3552(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 3584(CX), Y10 - VMOVDQU 3616(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 3648(CX), Y10 - VMOVDQU 3680(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 3712(CX), Y10 - VMOVDQU 3744(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 3776(CX), Y10 - VMOVDQU 3808(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 3840(CX), Y10 - VMOVDQU 3872(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 3904(CX), Y10 - VMOVDQU 3936(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 3968(CX), Y10 - VMOVDQU 4000(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 7 to 9 outputs - VMOVDQU (R12), Y12 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 4032(CX), Y10 - VMOVDQU 4064(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 4096(CX), Y10 - VMOVDQU 4128(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 4160(CX), Y10 - VMOVDQU 4192(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 4224(CX), Y10 - VMOVDQU 4256(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 4288(CX), Y10 - VMOVDQU 4320(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 4352(CX), Y10 - VMOVDQU 4384(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 4416(CX), Y10 - VMOVDQU 4448(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 4480(CX), Y10 - VMOVDQU 4512(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 4544(CX), Y10 - VMOVDQU 4576(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 8 to 9 outputs - VMOVDQU (DX), Y12 - ADDQ $0x20, DX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 4608(CX), Y10 - VMOVDQU 4640(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 4672(CX), Y10 - VMOVDQU 4704(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 4736(CX), Y10 - VMOVDQU 4768(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 4800(CX), Y10 - VMOVDQU 4832(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 4864(CX), Y10 - VMOVDQU 4896(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 4928(CX), Y10 - VMOVDQU 4960(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 4992(CX), Y10 - VMOVDQU 5024(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 5056(CX), Y10 - VMOVDQU 5088(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 5120(CX), Y10 - VMOVDQU 5152(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Store 9 outputs - MOVQ (R13), R15 - VMOVDQU Y0, (R15)(R14*1) - MOVQ 24(R13), R15 - VMOVDQU Y1, (R15)(R14*1) - MOVQ 48(R13), R15 - VMOVDQU Y2, (R15)(R14*1) - MOVQ 72(R13), R15 - VMOVDQU Y3, (R15)(R14*1) - MOVQ 96(R13), R15 - VMOVDQU Y4, (R15)(R14*1) - MOVQ 120(R13), R15 - VMOVDQU Y5, (R15)(R14*1) - MOVQ 144(R13), R15 - VMOVDQU Y6, (R15)(R14*1) - MOVQ 168(R13), R15 - VMOVDQU Y7, (R15)(R14*1) - MOVQ 192(R13), R15 - VMOVDQU Y8, (R15)(R14*1) - - // Prepare for next loop - ADDQ $0x20, R14 - DECQ AX - JNZ mulAvxTwo_9x9Xor_loop - VZEROUPPER - -mulAvxTwo_9x9Xor_end: - RET - -// func mulAvxTwo_9x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x10(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 195 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_9x10_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ start+72(FP), R14 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X10 - VPBROADCASTB X10, Y10 - -mulAvxTwo_9x10_loop: - // Load and process 32 bytes from input 0 to 10 outputs - VMOVDQU (BX), Y13 - ADDQ $0x20, BX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU (CX), Y11 - VMOVDQU 32(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y0 - VMOVDQU 64(CX), Y11 - VMOVDQU 96(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y1 - VMOVDQU 128(CX), Y11 - VMOVDQU 160(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y2 - VMOVDQU 192(CX), Y11 - VMOVDQU 224(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y3 - VMOVDQU 256(CX), Y11 - VMOVDQU 288(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y4 - VMOVDQU 320(CX), Y11 - VMOVDQU 352(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y5 - VMOVDQU 384(CX), Y11 - VMOVDQU 416(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y6 - VMOVDQU 448(CX), Y11 - VMOVDQU 480(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y7 - VMOVDQU 512(CX), Y11 - VMOVDQU 544(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y8 - VMOVDQU 576(CX), Y11 - VMOVDQU 608(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y9 - - // Load and process 32 bytes from input 1 to 10 outputs - VMOVDQU (SI), Y13 - ADDQ $0x20, SI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 640(CX), Y11 - VMOVDQU 672(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 704(CX), Y11 - VMOVDQU 736(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 768(CX), Y11 - VMOVDQU 800(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 832(CX), Y11 - VMOVDQU 864(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 896(CX), Y11 - VMOVDQU 928(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 960(CX), Y11 - VMOVDQU 992(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1024(CX), Y11 - VMOVDQU 1056(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1088(CX), Y11 - VMOVDQU 1120(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1152(CX), Y11 - VMOVDQU 1184(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1216(CX), Y11 - VMOVDQU 1248(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 2 to 10 outputs - VMOVDQU (DI), Y13 - ADDQ $0x20, DI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1280(CX), Y11 - VMOVDQU 1312(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1344(CX), Y11 - VMOVDQU 1376(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 1408(CX), Y11 - VMOVDQU 1440(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 1472(CX), Y11 - VMOVDQU 1504(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 1536(CX), Y11 - VMOVDQU 1568(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 1600(CX), Y11 - VMOVDQU 1632(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1664(CX), Y11 - VMOVDQU 1696(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1728(CX), Y11 - VMOVDQU 1760(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1792(CX), Y11 - VMOVDQU 1824(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1856(CX), Y11 - VMOVDQU 1888(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 3 to 10 outputs - VMOVDQU (R8), Y13 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1920(CX), Y11 - VMOVDQU 1952(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1984(CX), Y11 - VMOVDQU 2016(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2048(CX), Y11 - VMOVDQU 2080(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2112(CX), Y11 - VMOVDQU 2144(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2176(CX), Y11 - VMOVDQU 2208(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2240(CX), Y11 - VMOVDQU 2272(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2304(CX), Y11 - VMOVDQU 2336(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 2368(CX), Y11 - VMOVDQU 2400(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 2432(CX), Y11 - VMOVDQU 2464(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 2496(CX), Y11 - VMOVDQU 2528(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 4 to 10 outputs - VMOVDQU (R9), Y13 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 2560(CX), Y11 - VMOVDQU 2592(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 2624(CX), Y11 - VMOVDQU 2656(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2688(CX), Y11 - VMOVDQU 2720(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2752(CX), Y11 - VMOVDQU 2784(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2816(CX), Y11 - VMOVDQU 2848(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2880(CX), Y11 - VMOVDQU 2912(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2944(CX), Y11 - VMOVDQU 2976(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 3008(CX), Y11 - VMOVDQU 3040(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 3072(CX), Y11 - VMOVDQU 3104(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 3136(CX), Y11 - VMOVDQU 3168(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 5 to 10 outputs - VMOVDQU (R10), Y13 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 3200(CX), Y11 - VMOVDQU 3232(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 3264(CX), Y11 - VMOVDQU 3296(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 3328(CX), Y11 - VMOVDQU 3360(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 3392(CX), Y11 - VMOVDQU 3424(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 3456(CX), Y11 - VMOVDQU 3488(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 3520(CX), Y11 - VMOVDQU 3552(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 3584(CX), Y11 - VMOVDQU 3616(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 3648(CX), Y11 - VMOVDQU 3680(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 3712(CX), Y11 - VMOVDQU 3744(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 3776(CX), Y11 - VMOVDQU 3808(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 6 to 10 outputs - VMOVDQU (R11), Y13 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 3840(CX), Y11 - VMOVDQU 3872(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 3904(CX), Y11 - VMOVDQU 3936(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 3968(CX), Y11 - VMOVDQU 4000(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 4032(CX), Y11 - VMOVDQU 4064(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 4096(CX), Y11 - VMOVDQU 4128(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 4160(CX), Y11 - VMOVDQU 4192(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 4224(CX), Y11 - VMOVDQU 4256(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 4288(CX), Y11 - VMOVDQU 4320(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 4352(CX), Y11 - VMOVDQU 4384(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 4416(CX), Y11 - VMOVDQU 4448(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 7 to 10 outputs - VMOVDQU (R12), Y13 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 4480(CX), Y11 - VMOVDQU 4512(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 4544(CX), Y11 - VMOVDQU 4576(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 4608(CX), Y11 - VMOVDQU 4640(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 4672(CX), Y11 - VMOVDQU 4704(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 4736(CX), Y11 - VMOVDQU 4768(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 4800(CX), Y11 - VMOVDQU 4832(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 4864(CX), Y11 - VMOVDQU 4896(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 4928(CX), Y11 - VMOVDQU 4960(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 4992(CX), Y11 - VMOVDQU 5024(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 5056(CX), Y11 - VMOVDQU 5088(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 8 to 10 outputs - VMOVDQU (DX), Y13 - ADDQ $0x20, DX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 5120(CX), Y11 - VMOVDQU 5152(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 5184(CX), Y11 - VMOVDQU 5216(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 5248(CX), Y11 - VMOVDQU 5280(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 5312(CX), Y11 - VMOVDQU 5344(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 5376(CX), Y11 - VMOVDQU 5408(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 5440(CX), Y11 - VMOVDQU 5472(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 5504(CX), Y11 - VMOVDQU 5536(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 5568(CX), Y11 - VMOVDQU 5600(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 5632(CX), Y11 - VMOVDQU 5664(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 5696(CX), Y11 - VMOVDQU 5728(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Store 10 outputs - MOVQ (R13), R15 - VMOVDQU Y0, (R15)(R14*1) - MOVQ 24(R13), R15 - VMOVDQU Y1, (R15)(R14*1) - MOVQ 48(R13), R15 - VMOVDQU Y2, (R15)(R14*1) - MOVQ 72(R13), R15 - VMOVDQU Y3, (R15)(R14*1) - MOVQ 96(R13), R15 - VMOVDQU Y4, (R15)(R14*1) - MOVQ 120(R13), R15 - VMOVDQU Y5, (R15)(R14*1) - MOVQ 144(R13), R15 - VMOVDQU Y6, (R15)(R14*1) - MOVQ 168(R13), R15 - VMOVDQU Y7, (R15)(R14*1) - MOVQ 192(R13), R15 - VMOVDQU Y8, (R15)(R14*1) - MOVQ 216(R13), R15 - VMOVDQU Y9, (R15)(R14*1) - - // Prepare for next loop - ADDQ $0x20, R14 - DECQ AX - JNZ mulAvxTwo_9x10_loop - VZEROUPPER - -mulAvxTwo_9x10_end: - RET - -// func mulAvxTwo_9x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_9x10Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 195 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_9x10Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), DX - MOVQ out_base+48(FP), R13 - MOVQ start+72(FP), R14 - - // Add start offset to input - ADDQ R14, BX - ADDQ R14, SI - ADDQ R14, DI - ADDQ R14, R8 - ADDQ R14, R9 - ADDQ R14, R10 - ADDQ R14, R11 - ADDQ R14, R12 - ADDQ R14, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X10 - VPBROADCASTB X10, Y10 - -mulAvxTwo_9x10Xor_loop: - // Load and process 32 bytes from input 0 to 10 outputs - VMOVDQU (BX), Y13 - ADDQ $0x20, BX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - MOVQ (R13), R15 - VMOVDQU (R15)(R14*1), Y0 - VMOVDQU (CX), Y11 - VMOVDQU 32(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - MOVQ 24(R13), R15 - VMOVDQU (R15)(R14*1), Y1 - VMOVDQU 64(CX), Y11 - VMOVDQU 96(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - MOVQ 48(R13), R15 - VMOVDQU (R15)(R14*1), Y2 - VMOVDQU 128(CX), Y11 - VMOVDQU 160(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - MOVQ 72(R13), R15 - VMOVDQU (R15)(R14*1), Y3 - VMOVDQU 192(CX), Y11 - VMOVDQU 224(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - MOVQ 96(R13), R15 - VMOVDQU (R15)(R14*1), Y4 - VMOVDQU 256(CX), Y11 - VMOVDQU 288(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - MOVQ 120(R13), R15 - VMOVDQU (R15)(R14*1), Y5 - VMOVDQU 320(CX), Y11 - VMOVDQU 352(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - MOVQ 144(R13), R15 - VMOVDQU (R15)(R14*1), Y6 - VMOVDQU 384(CX), Y11 - VMOVDQU 416(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - MOVQ 168(R13), R15 - VMOVDQU (R15)(R14*1), Y7 - VMOVDQU 448(CX), Y11 - VMOVDQU 480(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - MOVQ 192(R13), R15 - VMOVDQU (R15)(R14*1), Y8 - VMOVDQU 512(CX), Y11 - VMOVDQU 544(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - MOVQ 216(R13), R15 - VMOVDQU (R15)(R14*1), Y9 - VMOVDQU 576(CX), Y11 - VMOVDQU 608(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 1 to 10 outputs - VMOVDQU (SI), Y13 - ADDQ $0x20, SI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 640(CX), Y11 - VMOVDQU 672(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 704(CX), Y11 - VMOVDQU 736(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 768(CX), Y11 - VMOVDQU 800(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 832(CX), Y11 - VMOVDQU 864(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 896(CX), Y11 - VMOVDQU 928(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 960(CX), Y11 - VMOVDQU 992(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1024(CX), Y11 - VMOVDQU 1056(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1088(CX), Y11 - VMOVDQU 1120(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1152(CX), Y11 - VMOVDQU 1184(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1216(CX), Y11 - VMOVDQU 1248(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 2 to 10 outputs - VMOVDQU (DI), Y13 - ADDQ $0x20, DI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1280(CX), Y11 - VMOVDQU 1312(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1344(CX), Y11 - VMOVDQU 1376(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 1408(CX), Y11 - VMOVDQU 1440(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 1472(CX), Y11 - VMOVDQU 1504(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 1536(CX), Y11 - VMOVDQU 1568(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 1600(CX), Y11 - VMOVDQU 1632(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1664(CX), Y11 - VMOVDQU 1696(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1728(CX), Y11 - VMOVDQU 1760(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1792(CX), Y11 - VMOVDQU 1824(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1856(CX), Y11 - VMOVDQU 1888(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 3 to 10 outputs - VMOVDQU (R8), Y13 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1920(CX), Y11 - VMOVDQU 1952(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1984(CX), Y11 - VMOVDQU 2016(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2048(CX), Y11 - VMOVDQU 2080(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2112(CX), Y11 - VMOVDQU 2144(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2176(CX), Y11 - VMOVDQU 2208(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2240(CX), Y11 - VMOVDQU 2272(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2304(CX), Y11 - VMOVDQU 2336(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 2368(CX), Y11 - VMOVDQU 2400(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 2432(CX), Y11 - VMOVDQU 2464(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 2496(CX), Y11 - VMOVDQU 2528(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 4 to 10 outputs - VMOVDQU (R9), Y13 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 2560(CX), Y11 - VMOVDQU 2592(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 2624(CX), Y11 - VMOVDQU 2656(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2688(CX), Y11 - VMOVDQU 2720(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2752(CX), Y11 - VMOVDQU 2784(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2816(CX), Y11 - VMOVDQU 2848(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2880(CX), Y11 - VMOVDQU 2912(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2944(CX), Y11 - VMOVDQU 2976(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 3008(CX), Y11 - VMOVDQU 3040(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 3072(CX), Y11 - VMOVDQU 3104(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 3136(CX), Y11 - VMOVDQU 3168(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 5 to 10 outputs - VMOVDQU (R10), Y13 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 3200(CX), Y11 - VMOVDQU 3232(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 3264(CX), Y11 - VMOVDQU 3296(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 3328(CX), Y11 - VMOVDQU 3360(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 3392(CX), Y11 - VMOVDQU 3424(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 3456(CX), Y11 - VMOVDQU 3488(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 3520(CX), Y11 - VMOVDQU 3552(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 3584(CX), Y11 - VMOVDQU 3616(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 3648(CX), Y11 - VMOVDQU 3680(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 3712(CX), Y11 - VMOVDQU 3744(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 3776(CX), Y11 - VMOVDQU 3808(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 6 to 10 outputs - VMOVDQU (R11), Y13 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 3840(CX), Y11 - VMOVDQU 3872(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 3904(CX), Y11 - VMOVDQU 3936(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 3968(CX), Y11 - VMOVDQU 4000(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 4032(CX), Y11 - VMOVDQU 4064(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 4096(CX), Y11 - VMOVDQU 4128(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 4160(CX), Y11 - VMOVDQU 4192(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 4224(CX), Y11 - VMOVDQU 4256(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 4288(CX), Y11 - VMOVDQU 4320(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 4352(CX), Y11 - VMOVDQU 4384(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 4416(CX), Y11 - VMOVDQU 4448(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 7 to 10 outputs - VMOVDQU (R12), Y13 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 4480(CX), Y11 - VMOVDQU 4512(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 4544(CX), Y11 - VMOVDQU 4576(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 4608(CX), Y11 - VMOVDQU 4640(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 4672(CX), Y11 - VMOVDQU 4704(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 4736(CX), Y11 - VMOVDQU 4768(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 4800(CX), Y11 - VMOVDQU 4832(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 4864(CX), Y11 - VMOVDQU 4896(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 4928(CX), Y11 - VMOVDQU 4960(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 4992(CX), Y11 - VMOVDQU 5024(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 5056(CX), Y11 - VMOVDQU 5088(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 8 to 10 outputs - VMOVDQU (DX), Y13 - ADDQ $0x20, DX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 5120(CX), Y11 - VMOVDQU 5152(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 5184(CX), Y11 - VMOVDQU 5216(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 5248(CX), Y11 - VMOVDQU 5280(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 5312(CX), Y11 - VMOVDQU 5344(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 5376(CX), Y11 - VMOVDQU 5408(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 5440(CX), Y11 - VMOVDQU 5472(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 5504(CX), Y11 - VMOVDQU 5536(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 5568(CX), Y11 - VMOVDQU 5600(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 5632(CX), Y11 - VMOVDQU 5664(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 5696(CX), Y11 - VMOVDQU 5728(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Store 10 outputs - MOVQ (R13), R15 - VMOVDQU Y0, (R15)(R14*1) - MOVQ 24(R13), R15 - VMOVDQU Y1, (R15)(R14*1) - MOVQ 48(R13), R15 - VMOVDQU Y2, (R15)(R14*1) - MOVQ 72(R13), R15 - VMOVDQU Y3, (R15)(R14*1) - MOVQ 96(R13), R15 - VMOVDQU Y4, (R15)(R14*1) - MOVQ 120(R13), R15 - VMOVDQU Y5, (R15)(R14*1) - MOVQ 144(R13), R15 - VMOVDQU Y6, (R15)(R14*1) - MOVQ 168(R13), R15 - VMOVDQU Y7, (R15)(R14*1) - MOVQ 192(R13), R15 - VMOVDQU Y8, (R15)(R14*1) - MOVQ 216(R13), R15 - VMOVDQU Y9, (R15)(R14*1) - - // Prepare for next loop - ADDQ $0x20, R14 - DECQ AX - JNZ mulAvxTwo_9x10Xor_loop - VZEROUPPER - -mulAvxTwo_9x10Xor_end: - RET - -// func mulAvxTwo_10x1(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x1(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 24 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_10x1_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), R13 - MOVQ 216(DX), DX - MOVQ out_base+48(FP), R14 - MOVQ (R14), R14 - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, R14 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X1 - VPBROADCASTB X1, Y1 - -mulAvxTwo_10x1_loop: - // Load and process 32 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y4 - ADDQ $0x20, BX - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU (CX), Y2 - VMOVDQU 32(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - VPXOR Y2, Y3, Y0 - - // Load and process 32 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y4 - ADDQ $0x20, SI - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 2 to 1 outputs - VMOVDQU (DI), Y4 - ADDQ $0x20, DI - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 128(CX), Y2 - VMOVDQU 160(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 3 to 1 outputs - VMOVDQU (R8), Y4 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 192(CX), Y2 - VMOVDQU 224(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 4 to 1 outputs - VMOVDQU (R9), Y4 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 256(CX), Y2 - VMOVDQU 288(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 5 to 1 outputs - VMOVDQU (R10), Y4 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 320(CX), Y2 - VMOVDQU 352(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 6 to 1 outputs - VMOVDQU (R11), Y4 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 384(CX), Y2 - VMOVDQU 416(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 7 to 1 outputs - VMOVDQU (R12), Y4 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 448(CX), Y2 - VMOVDQU 480(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 8 to 1 outputs - VMOVDQU (R13), Y4 - ADDQ $0x20, R13 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 512(CX), Y2 - VMOVDQU 544(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 9 to 1 outputs - VMOVDQU (DX), Y4 - ADDQ $0x20, DX - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 576(CX), Y2 - VMOVDQU 608(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Store 1 outputs - VMOVDQU Y0, (R14) - ADDQ $0x20, R14 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_10x1_loop - VZEROUPPER - -mulAvxTwo_10x1_end: - RET - -// func mulAvxTwo_10x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x1_64(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 46 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_10x1_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), R13 - MOVQ 216(DX), DX - MOVQ out_base+48(FP), R14 - MOVQ out_base+48(FP), R14 - MOVQ (R14), R14 - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, R14 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_10x1_64_loop: - // Load and process 64 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y6 - VMOVDQU 32(BX), Y5 - ADDQ $0x40, BX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - VPXOR Y3, Y4, Y0 - VPXOR Y5, Y6, Y1 - - // Load and process 64 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y6 - VMOVDQU 32(SI), Y5 - ADDQ $0x40, SI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 2 to 1 outputs - VMOVDQU (DI), Y6 - VMOVDQU 32(DI), Y5 - ADDQ $0x40, DI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 3 to 1 outputs - VMOVDQU (R8), Y6 - VMOVDQU 32(R8), Y5 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 4 to 1 outputs - VMOVDQU (R9), Y6 - VMOVDQU 32(R9), Y5 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 5 to 1 outputs - VMOVDQU (R10), Y6 - VMOVDQU 32(R10), Y5 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 6 to 1 outputs - VMOVDQU (R11), Y6 - VMOVDQU 32(R11), Y5 - ADDQ $0x40, R11 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 384(CX), Y3 - VMOVDQU 416(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 7 to 1 outputs - VMOVDQU (R12), Y6 - VMOVDQU 32(R12), Y5 - ADDQ $0x40, R12 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 448(CX), Y3 - VMOVDQU 480(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 8 to 1 outputs - VMOVDQU (R13), Y6 - VMOVDQU 32(R13), Y5 - ADDQ $0x40, R13 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 512(CX), Y3 - VMOVDQU 544(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 9 to 1 outputs - VMOVDQU (DX), Y6 - VMOVDQU 32(DX), Y5 - ADDQ $0x40, DX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 576(CX), Y3 - VMOVDQU 608(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Store 1 outputs - VMOVDQU Y0, (R14) - VMOVDQU Y1, 32(R14) - ADDQ $0x40, R14 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_10x1_64_loop - VZEROUPPER - -mulAvxTwo_10x1_64_end: - RET - -// func mulAvxTwo_10x1Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x1Xor(SB), NOSPLIT, $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 24 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_10x1Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), R13 - MOVQ 216(DX), DX - MOVQ out_base+48(FP), R14 - MOVQ (R14), R14 - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, R14 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X1 - VPBROADCASTB X1, Y1 - -mulAvxTwo_10x1Xor_loop: - // Load and process 32 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y4 - ADDQ $0x20, BX - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU (R14), Y0 - VMOVDQU (CX), Y2 - VMOVDQU 32(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y4 - ADDQ $0x20, SI - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 64(CX), Y2 - VMOVDQU 96(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 2 to 1 outputs - VMOVDQU (DI), Y4 - ADDQ $0x20, DI - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 128(CX), Y2 - VMOVDQU 160(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 3 to 1 outputs - VMOVDQU (R8), Y4 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 192(CX), Y2 - VMOVDQU 224(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 4 to 1 outputs - VMOVDQU (R9), Y4 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 256(CX), Y2 - VMOVDQU 288(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 5 to 1 outputs - VMOVDQU (R10), Y4 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 320(CX), Y2 - VMOVDQU 352(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 6 to 1 outputs - VMOVDQU (R11), Y4 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 384(CX), Y2 - VMOVDQU 416(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 7 to 1 outputs - VMOVDQU (R12), Y4 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 448(CX), Y2 - VMOVDQU 480(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 8 to 1 outputs - VMOVDQU (R13), Y4 - ADDQ $0x20, R13 - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 512(CX), Y2 - VMOVDQU 544(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Load and process 32 bytes from input 9 to 1 outputs - VMOVDQU (DX), Y4 - ADDQ $0x20, DX - VPSRLQ $0x04, Y4, Y5 - VPAND Y1, Y4, Y4 - VPAND Y1, Y5, Y5 - VMOVDQU 576(CX), Y2 - VMOVDQU 608(CX), Y3 - VPSHUFB Y4, Y2, Y2 - VPSHUFB Y5, Y3, Y3 - XOR3WAY( $0x00, Y2, Y3, Y0) - - // Store 1 outputs - VMOVDQU Y0, (R14) - ADDQ $0x20, R14 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_10x1Xor_loop - VZEROUPPER - -mulAvxTwo_10x1Xor_end: - RET - -// func mulAvxTwo_10x1_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x1_64Xor(SB), $0-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 46 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_10x1_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), R13 - MOVQ 216(DX), DX - MOVQ out_base+48(FP), R14 - MOVQ out_base+48(FP), R14 - MOVQ (R14), R14 - MOVQ start+72(FP), R15 - - // Add start offset to output - ADDQ R15, R14 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, DX - MOVQ $0x0000000f, R15 - MOVQ R15, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_10x1_64Xor_loop: - // Load 1 outputs - VMOVDQU (R14), Y0 - VMOVDQU 32(R14), Y1 - - // Load and process 64 bytes from input 0 to 1 outputs - VMOVDQU (BX), Y6 - VMOVDQU 32(BX), Y5 - ADDQ $0x40, BX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 1 to 1 outputs - VMOVDQU (SI), Y6 - VMOVDQU 32(SI), Y5 - ADDQ $0x40, SI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 2 to 1 outputs - VMOVDQU (DI), Y6 - VMOVDQU 32(DI), Y5 - ADDQ $0x40, DI - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 3 to 1 outputs - VMOVDQU (R8), Y6 - VMOVDQU 32(R8), Y5 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 4 to 1 outputs - VMOVDQU (R9), Y6 - VMOVDQU 32(R9), Y5 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 5 to 1 outputs - VMOVDQU (R10), Y6 - VMOVDQU 32(R10), Y5 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 6 to 1 outputs - VMOVDQU (R11), Y6 - VMOVDQU 32(R11), Y5 - ADDQ $0x40, R11 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 384(CX), Y3 - VMOVDQU 416(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 7 to 1 outputs - VMOVDQU (R12), Y6 - VMOVDQU 32(R12), Y5 - ADDQ $0x40, R12 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 448(CX), Y3 - VMOVDQU 480(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 8 to 1 outputs - VMOVDQU (R13), Y6 - VMOVDQU 32(R13), Y5 - ADDQ $0x40, R13 - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 512(CX), Y3 - VMOVDQU 544(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Load and process 64 bytes from input 9 to 1 outputs - VMOVDQU (DX), Y6 - VMOVDQU 32(DX), Y5 - ADDQ $0x40, DX - VPSRLQ $0x04, Y6, Y7 - VPSRLQ $0x04, Y5, Y8 - VPAND Y2, Y6, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y7, Y7 - VPAND Y2, Y8, Y8 - VMOVDQU 576(CX), Y3 - VMOVDQU 608(CX), Y4 - VPSHUFB Y5, Y3, Y5 - VPSHUFB Y6, Y3, Y3 - VPSHUFB Y8, Y4, Y6 - VPSHUFB Y7, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - XOR3WAY( $0x00, Y5, Y6, Y1) - - // Store 1 outputs - VMOVDQU Y0, (R14) - VMOVDQU Y1, 32(R14) - ADDQ $0x40, R14 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_10x1_64Xor_loop - VZEROUPPER - -mulAvxTwo_10x1_64Xor_end: - RET - -// func mulAvxTwo_10x2(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x2(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 47 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_10x2_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), R13 - MOVQ 216(DX), DX - MOVQ out_base+48(FP), R14 - MOVQ (R14), R15 - MOVQ 24(R14), R14 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R15 - ADDQ BP, R14 - - // Add start offset to input - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, DX - MOVQ $0x0000000f, BP - MOVQ BP, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_10x2_loop: - // Load and process 32 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y5 - ADDQ $0x20, BX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y0 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - VPXOR Y3, Y4, Y1 - - // Load and process 32 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y5 - ADDQ $0x20, SI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y5 - ADDQ $0x20, DI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y5 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 384(CX), Y3 - VMOVDQU 416(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 448(CX), Y3 - VMOVDQU 480(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 4 to 2 outputs - VMOVDQU (R9), Y5 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 512(CX), Y3 - VMOVDQU 544(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 576(CX), Y3 - VMOVDQU 608(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 5 to 2 outputs - VMOVDQU (R10), Y5 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 640(CX), Y3 - VMOVDQU 672(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 704(CX), Y3 - VMOVDQU 736(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 6 to 2 outputs - VMOVDQU (R11), Y5 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 768(CX), Y3 - VMOVDQU 800(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 832(CX), Y3 - VMOVDQU 864(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 7 to 2 outputs - VMOVDQU (R12), Y5 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 896(CX), Y3 - VMOVDQU 928(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 960(CX), Y3 - VMOVDQU 992(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 8 to 2 outputs - VMOVDQU (R13), Y5 - ADDQ $0x20, R13 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 1024(CX), Y3 - VMOVDQU 1056(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 1088(CX), Y3 - VMOVDQU 1120(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 9 to 2 outputs - VMOVDQU (DX), Y5 - ADDQ $0x20, DX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 1152(CX), Y3 - VMOVDQU 1184(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 1216(CX), Y3 - VMOVDQU 1248(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Store 2 outputs - VMOVDQU Y0, (R15) - ADDQ $0x20, R15 - VMOVDQU Y1, (R14) - ADDQ $0x20, R14 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_10x2_loop - VZEROUPPER - -mulAvxTwo_10x2_end: - RET - -// func mulAvxTwo_10x2_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x2_64(SB), $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 89 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_10x2_64_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), R13 - MOVQ 216(DX), DX - MOVQ out_base+48(FP), R14 - MOVQ out_base+48(FP), R14 - MOVQ (R14), R15 - MOVQ 24(R14), R14 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R15 - ADDQ BP, R14 - - // Add start offset to input - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, DX - MOVQ $0x0000000f, BP - MOVQ BP, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_10x2_64_loop: - // Load and process 64 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y9 - VMOVDQU 32(BX), Y11 - ADDQ $0x40, BX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y0 - VPXOR Y7, Y8, Y1 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - VPXOR Y5, Y6, Y2 - VPXOR Y7, Y8, Y3 - - // Load and process 64 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y9 - VMOVDQU 32(SI), Y11 - ADDQ $0x40, SI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y9 - VMOVDQU 32(DI), Y11 - ADDQ $0x40, DI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y9 - VMOVDQU 32(R8), Y11 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 4 to 2 outputs - VMOVDQU (R9), Y9 - VMOVDQU 32(R9), Y11 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 5 to 2 outputs - VMOVDQU (R10), Y9 - VMOVDQU 32(R10), Y11 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 6 to 2 outputs - VMOVDQU (R11), Y9 - VMOVDQU 32(R11), Y11 - ADDQ $0x40, R11 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 768(CX), Y5 - VMOVDQU 800(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 832(CX), Y5 - VMOVDQU 864(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 7 to 2 outputs - VMOVDQU (R12), Y9 - VMOVDQU 32(R12), Y11 - ADDQ $0x40, R12 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 896(CX), Y5 - VMOVDQU 928(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 960(CX), Y5 - VMOVDQU 992(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 8 to 2 outputs - VMOVDQU (R13), Y9 - VMOVDQU 32(R13), Y11 - ADDQ $0x40, R13 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 1024(CX), Y5 - VMOVDQU 1056(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1088(CX), Y5 - VMOVDQU 1120(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 9 to 2 outputs - VMOVDQU (DX), Y9 - VMOVDQU 32(DX), Y11 - ADDQ $0x40, DX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 1152(CX), Y5 - VMOVDQU 1184(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1216(CX), Y5 - VMOVDQU 1248(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Store 2 outputs - VMOVDQU Y0, (R15) - VMOVDQU Y1, 32(R15) - ADDQ $0x40, R15 - VMOVDQU Y2, (R14) - VMOVDQU Y3, 32(R14) - ADDQ $0x40, R14 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_10x2_64_loop - VZEROUPPER - -mulAvxTwo_10x2_64_end: - RET - -// func mulAvxTwo_10x2Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x2Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 47 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_10x2Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), R13 - MOVQ 216(DX), DX - MOVQ out_base+48(FP), R14 - MOVQ (R14), R15 - MOVQ 24(R14), R14 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R15 - ADDQ BP, R14 - - // Add start offset to input - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, DX - MOVQ $0x0000000f, BP - MOVQ BP, X2 - VPBROADCASTB X2, Y2 - -mulAvxTwo_10x2Xor_loop: - // Load and process 32 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y5 - ADDQ $0x20, BX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU (R15), Y0 - VMOVDQU (CX), Y3 - VMOVDQU 32(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU (R14), Y1 - VMOVDQU 64(CX), Y3 - VMOVDQU 96(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y5 - ADDQ $0x20, SI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 128(CX), Y3 - VMOVDQU 160(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 192(CX), Y3 - VMOVDQU 224(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y5 - ADDQ $0x20, DI - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 256(CX), Y3 - VMOVDQU 288(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 320(CX), Y3 - VMOVDQU 352(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y5 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 384(CX), Y3 - VMOVDQU 416(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 448(CX), Y3 - VMOVDQU 480(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 4 to 2 outputs - VMOVDQU (R9), Y5 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 512(CX), Y3 - VMOVDQU 544(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 576(CX), Y3 - VMOVDQU 608(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 5 to 2 outputs - VMOVDQU (R10), Y5 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 640(CX), Y3 - VMOVDQU 672(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 704(CX), Y3 - VMOVDQU 736(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 6 to 2 outputs - VMOVDQU (R11), Y5 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 768(CX), Y3 - VMOVDQU 800(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 832(CX), Y3 - VMOVDQU 864(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 7 to 2 outputs - VMOVDQU (R12), Y5 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 896(CX), Y3 - VMOVDQU 928(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 960(CX), Y3 - VMOVDQU 992(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 8 to 2 outputs - VMOVDQU (R13), Y5 - ADDQ $0x20, R13 - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 1024(CX), Y3 - VMOVDQU 1056(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 1088(CX), Y3 - VMOVDQU 1120(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Load and process 32 bytes from input 9 to 2 outputs - VMOVDQU (DX), Y5 - ADDQ $0x20, DX - VPSRLQ $0x04, Y5, Y6 - VPAND Y2, Y5, Y5 - VPAND Y2, Y6, Y6 - VMOVDQU 1152(CX), Y3 - VMOVDQU 1184(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y0) - VMOVDQU 1216(CX), Y3 - VMOVDQU 1248(CX), Y4 - VPSHUFB Y5, Y3, Y3 - VPSHUFB Y6, Y4, Y4 - XOR3WAY( $0x00, Y3, Y4, Y1) - - // Store 2 outputs - VMOVDQU Y0, (R15) - ADDQ $0x20, R15 - VMOVDQU Y1, (R14) - ADDQ $0x20, R14 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_10x2Xor_loop - VZEROUPPER - -mulAvxTwo_10x2Xor_end: - RET - -// func mulAvxTwo_10x2_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x2_64Xor(SB), $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 89 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_10x2_64Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), R13 - MOVQ 216(DX), DX - MOVQ out_base+48(FP), R14 - MOVQ out_base+48(FP), R14 - MOVQ (R14), R15 - MOVQ 24(R14), R14 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R15 - ADDQ BP, R14 - - // Add start offset to input - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, R13 - ADDQ BP, DX - MOVQ $0x0000000f, BP - MOVQ BP, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_10x2_64Xor_loop: - // Load 2 outputs - VMOVDQU (R15), Y0 - VMOVDQU 32(R15), Y1 - VMOVDQU (R14), Y2 - VMOVDQU 32(R14), Y3 - - // Load and process 64 bytes from input 0 to 2 outputs - VMOVDQU (BX), Y9 - VMOVDQU 32(BX), Y11 - ADDQ $0x40, BX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 1 to 2 outputs - VMOVDQU (SI), Y9 - VMOVDQU 32(SI), Y11 - ADDQ $0x40, SI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 2 to 2 outputs - VMOVDQU (DI), Y9 - VMOVDQU 32(DI), Y11 - ADDQ $0x40, DI - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 3 to 2 outputs - VMOVDQU (R8), Y9 - VMOVDQU 32(R8), Y11 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 4 to 2 outputs - VMOVDQU (R9), Y9 - VMOVDQU 32(R9), Y11 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 5 to 2 outputs - VMOVDQU (R10), Y9 - VMOVDQU 32(R10), Y11 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 6 to 2 outputs - VMOVDQU (R11), Y9 - VMOVDQU 32(R11), Y11 - ADDQ $0x40, R11 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 768(CX), Y5 - VMOVDQU 800(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 832(CX), Y5 - VMOVDQU 864(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 7 to 2 outputs - VMOVDQU (R12), Y9 - VMOVDQU 32(R12), Y11 - ADDQ $0x40, R12 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 896(CX), Y5 - VMOVDQU 928(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 960(CX), Y5 - VMOVDQU 992(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 8 to 2 outputs - VMOVDQU (R13), Y9 - VMOVDQU 32(R13), Y11 - ADDQ $0x40, R13 - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 1024(CX), Y5 - VMOVDQU 1056(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1088(CX), Y5 - VMOVDQU 1120(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Load and process 64 bytes from input 9 to 2 outputs - VMOVDQU (DX), Y9 - VMOVDQU 32(DX), Y11 - ADDQ $0x40, DX - VPSRLQ $0x04, Y9, Y10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y4, Y9, Y9 - VPAND Y4, Y11, Y11 - VPAND Y4, Y10, Y10 - VPAND Y4, Y12, Y12 - VMOVDQU 1152(CX), Y5 - VMOVDQU 1184(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1216(CX), Y5 - VMOVDQU 1248(CX), Y6 - VPSHUFB Y11, Y5, Y7 - VPSHUFB Y9, Y5, Y5 - VPSHUFB Y12, Y6, Y8 - VPSHUFB Y10, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - XOR3WAY( $0x00, Y7, Y8, Y3) - - // Store 2 outputs - VMOVDQU Y0, (R15) - VMOVDQU Y1, 32(R15) - ADDQ $0x40, R15 - VMOVDQU Y2, (R14) - VMOVDQU Y3, 32(R14) - ADDQ $0x40, R14 - - // Prepare for next loop - DECQ AX - JNZ mulAvxTwo_10x2_64Xor_loop - VZEROUPPER - -mulAvxTwo_10x2_64Xor_end: - RET - -// func mulAvxTwo_10x3(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x3(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 68 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_10x3_end - MOVQ in_base+24(FP), AX - MOVQ (AX), DX - MOVQ 24(AX), BX - MOVQ 48(AX), SI - MOVQ 72(AX), DI - MOVQ 96(AX), R8 - MOVQ 120(AX), R9 - MOVQ 144(AX), R10 - MOVQ 168(AX), R11 - MOVQ 192(AX), R12 - MOVQ 216(AX), AX - MOVQ out_base+48(FP), R13 - MOVQ (R13), R14 - MOVQ 24(R13), R15 - MOVQ 48(R13), R13 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R13 - - // Add start offset to input - ADDQ BP, DX - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, AX - MOVQ $0x0000000f, BP - MOVQ BP, X3 - VPBROADCASTB X3, Y3 - MOVQ n+80(FP), BP - SHRQ $0x05, BP - -mulAvxTwo_10x3_loop: - // Load and process 32 bytes from input 0 to 3 outputs - VMOVDQU (DX), Y6 - ADDQ $0x20, DX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU (CX), Y4 - VMOVDQU 32(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y0 - VMOVDQU 64(CX), Y4 - VMOVDQU 96(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y1 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - VPXOR Y4, Y5, Y2 - - // Load and process 32 bytes from input 1 to 3 outputs - VMOVDQU (BX), Y6 - ADDQ $0x20, BX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 192(CX), Y4 - VMOVDQU 224(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 256(CX), Y4 - VMOVDQU 288(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 320(CX), Y4 - VMOVDQU 352(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 2 to 3 outputs - VMOVDQU (SI), Y6 - ADDQ $0x20, SI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 384(CX), Y4 - VMOVDQU 416(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 448(CX), Y4 - VMOVDQU 480(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 512(CX), Y4 - VMOVDQU 544(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 3 to 3 outputs - VMOVDQU (DI), Y6 - ADDQ $0x20, DI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 576(CX), Y4 - VMOVDQU 608(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 640(CX), Y4 - VMOVDQU 672(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 704(CX), Y4 - VMOVDQU 736(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 4 to 3 outputs - VMOVDQU (R8), Y6 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 768(CX), Y4 - VMOVDQU 800(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 832(CX), Y4 - VMOVDQU 864(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 896(CX), Y4 - VMOVDQU 928(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 5 to 3 outputs - VMOVDQU (R9), Y6 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 960(CX), Y4 - VMOVDQU 992(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1024(CX), Y4 - VMOVDQU 1056(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1088(CX), Y4 - VMOVDQU 1120(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 6 to 3 outputs - VMOVDQU (R10), Y6 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 1152(CX), Y4 - VMOVDQU 1184(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1216(CX), Y4 - VMOVDQU 1248(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1280(CX), Y4 - VMOVDQU 1312(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 7 to 3 outputs - VMOVDQU (R11), Y6 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 1344(CX), Y4 - VMOVDQU 1376(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1408(CX), Y4 - VMOVDQU 1440(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1472(CX), Y4 - VMOVDQU 1504(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 8 to 3 outputs - VMOVDQU (R12), Y6 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 1536(CX), Y4 - VMOVDQU 1568(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1600(CX), Y4 - VMOVDQU 1632(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1664(CX), Y4 - VMOVDQU 1696(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 9 to 3 outputs - VMOVDQU (AX), Y6 - ADDQ $0x20, AX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 1728(CX), Y4 - VMOVDQU 1760(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1792(CX), Y4 - VMOVDQU 1824(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1856(CX), Y4 - VMOVDQU 1888(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Store 3 outputs - VMOVDQU Y0, (R14) - ADDQ $0x20, R14 - VMOVDQU Y1, (R15) - ADDQ $0x20, R15 - VMOVDQU Y2, (R13) - ADDQ $0x20, R13 - - // Prepare for next loop - DECQ BP - JNZ mulAvxTwo_10x3_loop - VZEROUPPER - -mulAvxTwo_10x3_end: - RET - -// func mulAvxTwo_10x3_64(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x3_64(SB), $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 130 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_10x3_64_end - MOVQ in_base+24(FP), AX - MOVQ (AX), DX - MOVQ 24(AX), BX - MOVQ 48(AX), SI - MOVQ 72(AX), DI - MOVQ 96(AX), R8 - MOVQ 120(AX), R9 - MOVQ 144(AX), R10 - MOVQ 168(AX), R11 - MOVQ 192(AX), R12 - MOVQ 216(AX), AX - MOVQ out_base+48(FP), R13 - MOVQ out_base+48(FP), R13 - MOVQ (R13), R14 - MOVQ 24(R13), R15 - MOVQ 48(R13), R13 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R13 - - // Add start offset to input - ADDQ BP, DX - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, AX - MOVQ $0x0000000f, BP - MOVQ BP, X6 - VPBROADCASTB X6, Y6 - - // Reload length to save a register - MOVQ n+80(FP), BP - SHRQ $0x06, BP - -mulAvxTwo_10x3_64_loop: - // Load and process 64 bytes from input 0 to 3 outputs - VMOVDQU (DX), Y11 - VMOVDQU 32(DX), Y13 - ADDQ $0x40, DX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y0 - VPXOR Y9, Y10, Y1 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y2 - VPXOR Y9, Y10, Y3 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - VPXOR Y7, Y8, Y4 - VPXOR Y9, Y10, Y5 - - // Load and process 64 bytes from input 1 to 3 outputs - VMOVDQU (BX), Y11 - VMOVDQU 32(BX), Y13 - ADDQ $0x40, BX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 2 to 3 outputs - VMOVDQU (SI), Y11 - VMOVDQU 32(SI), Y13 - ADDQ $0x40, SI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 3 to 3 outputs - VMOVDQU (DI), Y11 - VMOVDQU 32(DI), Y13 - ADDQ $0x40, DI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 4 to 3 outputs - VMOVDQU (R8), Y11 - VMOVDQU 32(R8), Y13 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 5 to 3 outputs - VMOVDQU (R9), Y11 - VMOVDQU 32(R9), Y13 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 6 to 3 outputs - VMOVDQU (R10), Y11 - VMOVDQU 32(R10), Y13 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 1152(CX), Y7 - VMOVDQU 1184(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1216(CX), Y7 - VMOVDQU 1248(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y7 - VMOVDQU 1312(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 7 to 3 outputs - VMOVDQU (R11), Y11 - VMOVDQU 32(R11), Y13 - ADDQ $0x40, R11 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 1344(CX), Y7 - VMOVDQU 1376(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1408(CX), Y7 - VMOVDQU 1440(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1472(CX), Y7 - VMOVDQU 1504(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 8 to 3 outputs - VMOVDQU (R12), Y11 - VMOVDQU 32(R12), Y13 - ADDQ $0x40, R12 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 1536(CX), Y7 - VMOVDQU 1568(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1600(CX), Y7 - VMOVDQU 1632(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1664(CX), Y7 - VMOVDQU 1696(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 9 to 3 outputs - VMOVDQU (AX), Y11 - VMOVDQU 32(AX), Y13 - ADDQ $0x40, AX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 1728(CX), Y7 - VMOVDQU 1760(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1792(CX), Y7 - VMOVDQU 1824(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1856(CX), Y7 - VMOVDQU 1888(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Store 3 outputs - VMOVDQU Y0, (R14) - VMOVDQU Y1, 32(R14) - ADDQ $0x40, R14 - VMOVDQU Y2, (R15) - VMOVDQU Y3, 32(R15) - ADDQ $0x40, R15 - VMOVDQU Y4, (R13) - VMOVDQU Y5, 32(R13) - ADDQ $0x40, R13 - - // Prepare for next loop - DECQ BP - JNZ mulAvxTwo_10x3_64_loop - VZEROUPPER - -mulAvxTwo_10x3_64_end: - RET - -// func mulAvxTwo_10x3Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x3Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 68 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_10x3Xor_end - MOVQ in_base+24(FP), AX - MOVQ (AX), DX - MOVQ 24(AX), BX - MOVQ 48(AX), SI - MOVQ 72(AX), DI - MOVQ 96(AX), R8 - MOVQ 120(AX), R9 - MOVQ 144(AX), R10 - MOVQ 168(AX), R11 - MOVQ 192(AX), R12 - MOVQ 216(AX), AX - MOVQ out_base+48(FP), R13 - MOVQ (R13), R14 - MOVQ 24(R13), R15 - MOVQ 48(R13), R13 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R13 - - // Add start offset to input - ADDQ BP, DX - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, AX - MOVQ $0x0000000f, BP - MOVQ BP, X3 - VPBROADCASTB X3, Y3 - MOVQ n+80(FP), BP - SHRQ $0x05, BP - -mulAvxTwo_10x3Xor_loop: - // Load and process 32 bytes from input 0 to 3 outputs - VMOVDQU (DX), Y6 - ADDQ $0x20, DX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU (R14), Y0 - VMOVDQU (CX), Y4 - VMOVDQU 32(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU (R15), Y1 - VMOVDQU 64(CX), Y4 - VMOVDQU 96(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU (R13), Y2 - VMOVDQU 128(CX), Y4 - VMOVDQU 160(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 1 to 3 outputs - VMOVDQU (BX), Y6 - ADDQ $0x20, BX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 192(CX), Y4 - VMOVDQU 224(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 256(CX), Y4 - VMOVDQU 288(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 320(CX), Y4 - VMOVDQU 352(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 2 to 3 outputs - VMOVDQU (SI), Y6 - ADDQ $0x20, SI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 384(CX), Y4 - VMOVDQU 416(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 448(CX), Y4 - VMOVDQU 480(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 512(CX), Y4 - VMOVDQU 544(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 3 to 3 outputs - VMOVDQU (DI), Y6 - ADDQ $0x20, DI - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 576(CX), Y4 - VMOVDQU 608(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 640(CX), Y4 - VMOVDQU 672(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 704(CX), Y4 - VMOVDQU 736(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 4 to 3 outputs - VMOVDQU (R8), Y6 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 768(CX), Y4 - VMOVDQU 800(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 832(CX), Y4 - VMOVDQU 864(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 896(CX), Y4 - VMOVDQU 928(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 5 to 3 outputs - VMOVDQU (R9), Y6 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 960(CX), Y4 - VMOVDQU 992(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1024(CX), Y4 - VMOVDQU 1056(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1088(CX), Y4 - VMOVDQU 1120(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 6 to 3 outputs - VMOVDQU (R10), Y6 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 1152(CX), Y4 - VMOVDQU 1184(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1216(CX), Y4 - VMOVDQU 1248(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1280(CX), Y4 - VMOVDQU 1312(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 7 to 3 outputs - VMOVDQU (R11), Y6 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 1344(CX), Y4 - VMOVDQU 1376(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1408(CX), Y4 - VMOVDQU 1440(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1472(CX), Y4 - VMOVDQU 1504(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 8 to 3 outputs - VMOVDQU (R12), Y6 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 1536(CX), Y4 - VMOVDQU 1568(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1600(CX), Y4 - VMOVDQU 1632(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1664(CX), Y4 - VMOVDQU 1696(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Load and process 32 bytes from input 9 to 3 outputs - VMOVDQU (AX), Y6 - ADDQ $0x20, AX - VPSRLQ $0x04, Y6, Y7 - VPAND Y3, Y6, Y6 - VPAND Y3, Y7, Y7 - VMOVDQU 1728(CX), Y4 - VMOVDQU 1760(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y0) - VMOVDQU 1792(CX), Y4 - VMOVDQU 1824(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y1) - VMOVDQU 1856(CX), Y4 - VMOVDQU 1888(CX), Y5 - VPSHUFB Y6, Y4, Y4 - VPSHUFB Y7, Y5, Y5 - XOR3WAY( $0x00, Y4, Y5, Y2) - - // Store 3 outputs - VMOVDQU Y0, (R14) - ADDQ $0x20, R14 - VMOVDQU Y1, (R15) - ADDQ $0x20, R15 - VMOVDQU Y2, (R13) - ADDQ $0x20, R13 - - // Prepare for next loop - DECQ BP - JNZ mulAvxTwo_10x3Xor_loop - VZEROUPPER - -mulAvxTwo_10x3Xor_end: - RET - -// func mulAvxTwo_10x3_64Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x3_64Xor(SB), $8-88 - // Loading no tables to registers - // Destination kept in GP registers - // Full registers estimated 130 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x06, AX - TESTQ AX, AX - JZ mulAvxTwo_10x3_64Xor_end - MOVQ in_base+24(FP), AX - MOVQ (AX), DX - MOVQ 24(AX), BX - MOVQ 48(AX), SI - MOVQ 72(AX), DI - MOVQ 96(AX), R8 - MOVQ 120(AX), R9 - MOVQ 144(AX), R10 - MOVQ 168(AX), R11 - MOVQ 192(AX), R12 - MOVQ 216(AX), AX - MOVQ out_base+48(FP), R13 - MOVQ out_base+48(FP), R13 - MOVQ (R13), R14 - MOVQ 24(R13), R15 - MOVQ 48(R13), R13 - MOVQ start+72(FP), BP - - // Add start offset to output - ADDQ BP, R14 - ADDQ BP, R15 - ADDQ BP, R13 - - // Add start offset to input - ADDQ BP, DX - ADDQ BP, BX - ADDQ BP, SI - ADDQ BP, DI - ADDQ BP, R8 - ADDQ BP, R9 - ADDQ BP, R10 - ADDQ BP, R11 - ADDQ BP, R12 - ADDQ BP, AX - MOVQ $0x0000000f, BP - MOVQ BP, X6 - VPBROADCASTB X6, Y6 - - // Reload length to save a register - MOVQ n+80(FP), BP - SHRQ $0x06, BP - -mulAvxTwo_10x3_64Xor_loop: - // Load 3 outputs - VMOVDQU (R14), Y0 - VMOVDQU 32(R14), Y1 - VMOVDQU (R15), Y2 - VMOVDQU 32(R15), Y3 - VMOVDQU (R13), Y4 - VMOVDQU 32(R13), Y5 - - // Load and process 64 bytes from input 0 to 3 outputs - VMOVDQU (DX), Y11 - VMOVDQU 32(DX), Y13 - ADDQ $0x40, DX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 1 to 3 outputs - VMOVDQU (BX), Y11 - VMOVDQU 32(BX), Y13 - ADDQ $0x40, BX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 2 to 3 outputs - VMOVDQU (SI), Y11 - VMOVDQU 32(SI), Y13 - ADDQ $0x40, SI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 3 to 3 outputs - VMOVDQU (DI), Y11 - VMOVDQU 32(DI), Y13 - ADDQ $0x40, DI - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 4 to 3 outputs - VMOVDQU (R8), Y11 - VMOVDQU 32(R8), Y13 - ADDQ $0x40, R8 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 5 to 3 outputs - VMOVDQU (R9), Y11 - VMOVDQU 32(R9), Y13 - ADDQ $0x40, R9 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 6 to 3 outputs - VMOVDQU (R10), Y11 - VMOVDQU 32(R10), Y13 - ADDQ $0x40, R10 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 1152(CX), Y7 - VMOVDQU 1184(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1216(CX), Y7 - VMOVDQU 1248(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y7 - VMOVDQU 1312(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 7 to 3 outputs - VMOVDQU (R11), Y11 - VMOVDQU 32(R11), Y13 - ADDQ $0x40, R11 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 1344(CX), Y7 - VMOVDQU 1376(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1408(CX), Y7 - VMOVDQU 1440(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1472(CX), Y7 - VMOVDQU 1504(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 8 to 3 outputs - VMOVDQU (R12), Y11 - VMOVDQU 32(R12), Y13 - ADDQ $0x40, R12 - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 1536(CX), Y7 - VMOVDQU 1568(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1600(CX), Y7 - VMOVDQU 1632(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1664(CX), Y7 - VMOVDQU 1696(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Load and process 64 bytes from input 9 to 3 outputs - VMOVDQU (AX), Y11 - VMOVDQU 32(AX), Y13 - ADDQ $0x40, AX - VPSRLQ $0x04, Y11, Y12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y6, Y11, Y11 - VPAND Y6, Y13, Y13 - VPAND Y6, Y12, Y12 - VPAND Y6, Y14, Y14 - VMOVDQU 1728(CX), Y7 - VMOVDQU 1760(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1792(CX), Y7 - VMOVDQU 1824(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1856(CX), Y7 - VMOVDQU 1888(CX), Y8 - VPSHUFB Y13, Y7, Y9 - VPSHUFB Y11, Y7, Y7 - VPSHUFB Y14, Y8, Y10 - VPSHUFB Y12, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - XOR3WAY( $0x00, Y9, Y10, Y5) - - // Store 3 outputs - VMOVDQU Y0, (R14) - VMOVDQU Y1, 32(R14) - ADDQ $0x40, R14 - VMOVDQU Y2, (R15) - VMOVDQU Y3, 32(R15) - ADDQ $0x40, R15 - VMOVDQU Y4, (R13) - VMOVDQU Y5, 32(R13) - ADDQ $0x40, R13 - - // Prepare for next loop - DECQ BP - JNZ mulAvxTwo_10x3_64Xor_loop - VZEROUPPER - -mulAvxTwo_10x3_64Xor_end: - RET - -// func mulAvxTwo_10x4(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x4(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 89 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_10x4_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), R13 - MOVQ 216(DX), DX - MOVQ out_base+48(FP), R14 - MOVQ start+72(FP), R15 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, DX - MOVQ $0x0000000f, BP - MOVQ BP, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_10x4_loop: - // Load and process 32 bytes from input 0 to 4 outputs - VMOVDQU (BX), Y7 - ADDQ $0x20, BX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y0 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y1 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y2 - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - VPXOR Y5, Y6, Y3 - - // Load and process 32 bytes from input 1 to 4 outputs - VMOVDQU (SI), Y7 - ADDQ $0x20, SI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 2 to 4 outputs - VMOVDQU (DI), Y7 - ADDQ $0x20, DI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 3 to 4 outputs - VMOVDQU (R8), Y7 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 768(CX), Y5 - VMOVDQU 800(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 832(CX), Y5 - VMOVDQU 864(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 896(CX), Y5 - VMOVDQU 928(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 960(CX), Y5 - VMOVDQU 992(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 4 to 4 outputs - VMOVDQU (R9), Y7 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1024(CX), Y5 - VMOVDQU 1056(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1088(CX), Y5 - VMOVDQU 1120(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1152(CX), Y5 - VMOVDQU 1184(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1216(CX), Y5 - VMOVDQU 1248(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 5 to 4 outputs - VMOVDQU (R10), Y7 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1280(CX), Y5 - VMOVDQU 1312(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1344(CX), Y5 - VMOVDQU 1376(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1408(CX), Y5 - VMOVDQU 1440(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1472(CX), Y5 - VMOVDQU 1504(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 6 to 4 outputs - VMOVDQU (R11), Y7 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1536(CX), Y5 - VMOVDQU 1568(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1600(CX), Y5 - VMOVDQU 1632(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1664(CX), Y5 - VMOVDQU 1696(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1728(CX), Y5 - VMOVDQU 1760(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 7 to 4 outputs - VMOVDQU (R12), Y7 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1792(CX), Y5 - VMOVDQU 1824(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1856(CX), Y5 - VMOVDQU 1888(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1920(CX), Y5 - VMOVDQU 1952(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1984(CX), Y5 - VMOVDQU 2016(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 8 to 4 outputs - VMOVDQU (R13), Y7 - ADDQ $0x20, R13 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 2048(CX), Y5 - VMOVDQU 2080(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 2112(CX), Y5 - VMOVDQU 2144(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 2176(CX), Y5 - VMOVDQU 2208(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 2240(CX), Y5 - VMOVDQU 2272(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 9 to 4 outputs - VMOVDQU (DX), Y7 - ADDQ $0x20, DX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 2304(CX), Y5 - VMOVDQU 2336(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 2368(CX), Y5 - VMOVDQU 2400(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 2432(CX), Y5 - VMOVDQU 2464(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 2496(CX), Y5 - VMOVDQU 2528(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Store 4 outputs - MOVQ (R14), BP - VMOVDQU Y0, (BP)(R15*1) - MOVQ 24(R14), BP - VMOVDQU Y1, (BP)(R15*1) - MOVQ 48(R14), BP - VMOVDQU Y2, (BP)(R15*1) - MOVQ 72(R14), BP - VMOVDQU Y3, (BP)(R15*1) - - // Prepare for next loop - ADDQ $0x20, R15 - DECQ AX - JNZ mulAvxTwo_10x4_loop - VZEROUPPER - -mulAvxTwo_10x4_end: - RET - -// func mulAvxTwo_10x4Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x4Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 89 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_10x4Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), R13 - MOVQ 216(DX), DX - MOVQ out_base+48(FP), R14 - MOVQ start+72(FP), R15 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, DX - MOVQ $0x0000000f, BP - MOVQ BP, X4 - VPBROADCASTB X4, Y4 - -mulAvxTwo_10x4Xor_loop: - // Load and process 32 bytes from input 0 to 4 outputs - VMOVDQU (BX), Y7 - ADDQ $0x20, BX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - MOVQ (R14), BP - VMOVDQU (BP)(R15*1), Y0 - VMOVDQU (CX), Y5 - VMOVDQU 32(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - MOVQ 24(R14), BP - VMOVDQU (BP)(R15*1), Y1 - VMOVDQU 64(CX), Y5 - VMOVDQU 96(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - MOVQ 48(R14), BP - VMOVDQU (BP)(R15*1), Y2 - VMOVDQU 128(CX), Y5 - VMOVDQU 160(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - MOVQ 72(R14), BP - VMOVDQU (BP)(R15*1), Y3 - VMOVDQU 192(CX), Y5 - VMOVDQU 224(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 1 to 4 outputs - VMOVDQU (SI), Y7 - ADDQ $0x20, SI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 256(CX), Y5 - VMOVDQU 288(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 320(CX), Y5 - VMOVDQU 352(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 384(CX), Y5 - VMOVDQU 416(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 448(CX), Y5 - VMOVDQU 480(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 2 to 4 outputs - VMOVDQU (DI), Y7 - ADDQ $0x20, DI - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 512(CX), Y5 - VMOVDQU 544(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 576(CX), Y5 - VMOVDQU 608(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 640(CX), Y5 - VMOVDQU 672(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 704(CX), Y5 - VMOVDQU 736(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 3 to 4 outputs - VMOVDQU (R8), Y7 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 768(CX), Y5 - VMOVDQU 800(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 832(CX), Y5 - VMOVDQU 864(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 896(CX), Y5 - VMOVDQU 928(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 960(CX), Y5 - VMOVDQU 992(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 4 to 4 outputs - VMOVDQU (R9), Y7 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1024(CX), Y5 - VMOVDQU 1056(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1088(CX), Y5 - VMOVDQU 1120(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1152(CX), Y5 - VMOVDQU 1184(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1216(CX), Y5 - VMOVDQU 1248(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 5 to 4 outputs - VMOVDQU (R10), Y7 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1280(CX), Y5 - VMOVDQU 1312(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1344(CX), Y5 - VMOVDQU 1376(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1408(CX), Y5 - VMOVDQU 1440(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1472(CX), Y5 - VMOVDQU 1504(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 6 to 4 outputs - VMOVDQU (R11), Y7 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1536(CX), Y5 - VMOVDQU 1568(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1600(CX), Y5 - VMOVDQU 1632(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1664(CX), Y5 - VMOVDQU 1696(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1728(CX), Y5 - VMOVDQU 1760(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 7 to 4 outputs - VMOVDQU (R12), Y7 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 1792(CX), Y5 - VMOVDQU 1824(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 1856(CX), Y5 - VMOVDQU 1888(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 1920(CX), Y5 - VMOVDQU 1952(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 1984(CX), Y5 - VMOVDQU 2016(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 8 to 4 outputs - VMOVDQU (R13), Y7 - ADDQ $0x20, R13 - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 2048(CX), Y5 - VMOVDQU 2080(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 2112(CX), Y5 - VMOVDQU 2144(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 2176(CX), Y5 - VMOVDQU 2208(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 2240(CX), Y5 - VMOVDQU 2272(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Load and process 32 bytes from input 9 to 4 outputs - VMOVDQU (DX), Y7 - ADDQ $0x20, DX - VPSRLQ $0x04, Y7, Y8 - VPAND Y4, Y7, Y7 - VPAND Y4, Y8, Y8 - VMOVDQU 2304(CX), Y5 - VMOVDQU 2336(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y0) - VMOVDQU 2368(CX), Y5 - VMOVDQU 2400(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y1) - VMOVDQU 2432(CX), Y5 - VMOVDQU 2464(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU 2496(CX), Y5 - VMOVDQU 2528(CX), Y6 - VPSHUFB Y7, Y5, Y5 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y5, Y6, Y3) - - // Store 4 outputs - MOVQ (R14), BP - VMOVDQU Y0, (BP)(R15*1) - MOVQ 24(R14), BP - VMOVDQU Y1, (BP)(R15*1) - MOVQ 48(R14), BP - VMOVDQU Y2, (BP)(R15*1) - MOVQ 72(R14), BP - VMOVDQU Y3, (BP)(R15*1) - - // Prepare for next loop - ADDQ $0x20, R15 - DECQ AX - JNZ mulAvxTwo_10x4Xor_loop - VZEROUPPER - -mulAvxTwo_10x4Xor_end: - RET - -// func mulAvxTwo_10x5(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x5(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 110 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_10x5_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), R13 - MOVQ 216(DX), DX - MOVQ out_base+48(FP), R14 - MOVQ start+72(FP), R15 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, DX - MOVQ $0x0000000f, BP - MOVQ BP, X5 - VPBROADCASTB X5, Y5 - -mulAvxTwo_10x5_loop: - // Load and process 32 bytes from input 0 to 5 outputs - VMOVDQU (BX), Y8 - ADDQ $0x20, BX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU (CX), Y6 - VMOVDQU 32(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y0 - VMOVDQU 64(CX), Y6 - VMOVDQU 96(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y1 - VMOVDQU 128(CX), Y6 - VMOVDQU 160(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y2 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y3 - VMOVDQU 256(CX), Y6 - VMOVDQU 288(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - VPXOR Y6, Y7, Y4 - - // Load and process 32 bytes from input 1 to 5 outputs - VMOVDQU (SI), Y8 - ADDQ $0x20, SI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 320(CX), Y6 - VMOVDQU 352(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 384(CX), Y6 - VMOVDQU 416(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 448(CX), Y6 - VMOVDQU 480(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 512(CX), Y6 - VMOVDQU 544(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 576(CX), Y6 - VMOVDQU 608(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 2 to 5 outputs - VMOVDQU (DI), Y8 - ADDQ $0x20, DI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 640(CX), Y6 - VMOVDQU 672(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 704(CX), Y6 - VMOVDQU 736(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 768(CX), Y6 - VMOVDQU 800(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 832(CX), Y6 - VMOVDQU 864(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 896(CX), Y6 - VMOVDQU 928(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 3 to 5 outputs - VMOVDQU (R8), Y8 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 960(CX), Y6 - VMOVDQU 992(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1024(CX), Y6 - VMOVDQU 1056(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1088(CX), Y6 - VMOVDQU 1120(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1152(CX), Y6 - VMOVDQU 1184(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1216(CX), Y6 - VMOVDQU 1248(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 4 to 5 outputs - VMOVDQU (R9), Y8 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1280(CX), Y6 - VMOVDQU 1312(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1344(CX), Y6 - VMOVDQU 1376(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1408(CX), Y6 - VMOVDQU 1440(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1472(CX), Y6 - VMOVDQU 1504(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1536(CX), Y6 - VMOVDQU 1568(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 5 to 5 outputs - VMOVDQU (R10), Y8 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1600(CX), Y6 - VMOVDQU 1632(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1664(CX), Y6 - VMOVDQU 1696(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1728(CX), Y6 - VMOVDQU 1760(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1792(CX), Y6 - VMOVDQU 1824(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1856(CX), Y6 - VMOVDQU 1888(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 6 to 5 outputs - VMOVDQU (R11), Y8 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1920(CX), Y6 - VMOVDQU 1952(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1984(CX), Y6 - VMOVDQU 2016(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 2048(CX), Y6 - VMOVDQU 2080(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 2112(CX), Y6 - VMOVDQU 2144(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 2176(CX), Y6 - VMOVDQU 2208(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 7 to 5 outputs - VMOVDQU (R12), Y8 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 2240(CX), Y6 - VMOVDQU 2272(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 2304(CX), Y6 - VMOVDQU 2336(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 2368(CX), Y6 - VMOVDQU 2400(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 2432(CX), Y6 - VMOVDQU 2464(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 2496(CX), Y6 - VMOVDQU 2528(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 8 to 5 outputs - VMOVDQU (R13), Y8 - ADDQ $0x20, R13 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 2560(CX), Y6 - VMOVDQU 2592(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 2624(CX), Y6 - VMOVDQU 2656(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 2688(CX), Y6 - VMOVDQU 2720(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 2752(CX), Y6 - VMOVDQU 2784(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 2816(CX), Y6 - VMOVDQU 2848(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 9 to 5 outputs - VMOVDQU (DX), Y8 - ADDQ $0x20, DX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 2880(CX), Y6 - VMOVDQU 2912(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 2944(CX), Y6 - VMOVDQU 2976(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 3008(CX), Y6 - VMOVDQU 3040(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 3072(CX), Y6 - VMOVDQU 3104(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 3136(CX), Y6 - VMOVDQU 3168(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Store 5 outputs - MOVQ (R14), BP - VMOVDQU Y0, (BP)(R15*1) - MOVQ 24(R14), BP - VMOVDQU Y1, (BP)(R15*1) - MOVQ 48(R14), BP - VMOVDQU Y2, (BP)(R15*1) - MOVQ 72(R14), BP - VMOVDQU Y3, (BP)(R15*1) - MOVQ 96(R14), BP - VMOVDQU Y4, (BP)(R15*1) - - // Prepare for next loop - ADDQ $0x20, R15 - DECQ AX - JNZ mulAvxTwo_10x5_loop - VZEROUPPER - -mulAvxTwo_10x5_end: - RET - -// func mulAvxTwo_10x5Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x5Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 110 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_10x5Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), R13 - MOVQ 216(DX), DX - MOVQ out_base+48(FP), R14 - MOVQ start+72(FP), R15 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, DX - MOVQ $0x0000000f, BP - MOVQ BP, X5 - VPBROADCASTB X5, Y5 - -mulAvxTwo_10x5Xor_loop: - // Load and process 32 bytes from input 0 to 5 outputs - VMOVDQU (BX), Y8 - ADDQ $0x20, BX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - MOVQ (R14), BP - VMOVDQU (BP)(R15*1), Y0 - VMOVDQU (CX), Y6 - VMOVDQU 32(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - MOVQ 24(R14), BP - VMOVDQU (BP)(R15*1), Y1 - VMOVDQU 64(CX), Y6 - VMOVDQU 96(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - MOVQ 48(R14), BP - VMOVDQU (BP)(R15*1), Y2 - VMOVDQU 128(CX), Y6 - VMOVDQU 160(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - MOVQ 72(R14), BP - VMOVDQU (BP)(R15*1), Y3 - VMOVDQU 192(CX), Y6 - VMOVDQU 224(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - MOVQ 96(R14), BP - VMOVDQU (BP)(R15*1), Y4 - VMOVDQU 256(CX), Y6 - VMOVDQU 288(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 1 to 5 outputs - VMOVDQU (SI), Y8 - ADDQ $0x20, SI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 320(CX), Y6 - VMOVDQU 352(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 384(CX), Y6 - VMOVDQU 416(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 448(CX), Y6 - VMOVDQU 480(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 512(CX), Y6 - VMOVDQU 544(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 576(CX), Y6 - VMOVDQU 608(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 2 to 5 outputs - VMOVDQU (DI), Y8 - ADDQ $0x20, DI - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 640(CX), Y6 - VMOVDQU 672(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 704(CX), Y6 - VMOVDQU 736(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 768(CX), Y6 - VMOVDQU 800(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 832(CX), Y6 - VMOVDQU 864(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 896(CX), Y6 - VMOVDQU 928(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 3 to 5 outputs - VMOVDQU (R8), Y8 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 960(CX), Y6 - VMOVDQU 992(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1024(CX), Y6 - VMOVDQU 1056(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1088(CX), Y6 - VMOVDQU 1120(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1152(CX), Y6 - VMOVDQU 1184(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1216(CX), Y6 - VMOVDQU 1248(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 4 to 5 outputs - VMOVDQU (R9), Y8 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1280(CX), Y6 - VMOVDQU 1312(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1344(CX), Y6 - VMOVDQU 1376(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1408(CX), Y6 - VMOVDQU 1440(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1472(CX), Y6 - VMOVDQU 1504(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1536(CX), Y6 - VMOVDQU 1568(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 5 to 5 outputs - VMOVDQU (R10), Y8 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1600(CX), Y6 - VMOVDQU 1632(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1664(CX), Y6 - VMOVDQU 1696(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 1728(CX), Y6 - VMOVDQU 1760(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 1792(CX), Y6 - VMOVDQU 1824(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 1856(CX), Y6 - VMOVDQU 1888(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 6 to 5 outputs - VMOVDQU (R11), Y8 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 1920(CX), Y6 - VMOVDQU 1952(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 1984(CX), Y6 - VMOVDQU 2016(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 2048(CX), Y6 - VMOVDQU 2080(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 2112(CX), Y6 - VMOVDQU 2144(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 2176(CX), Y6 - VMOVDQU 2208(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 7 to 5 outputs - VMOVDQU (R12), Y8 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 2240(CX), Y6 - VMOVDQU 2272(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 2304(CX), Y6 - VMOVDQU 2336(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 2368(CX), Y6 - VMOVDQU 2400(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 2432(CX), Y6 - VMOVDQU 2464(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 2496(CX), Y6 - VMOVDQU 2528(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 8 to 5 outputs - VMOVDQU (R13), Y8 - ADDQ $0x20, R13 - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 2560(CX), Y6 - VMOVDQU 2592(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 2624(CX), Y6 - VMOVDQU 2656(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 2688(CX), Y6 - VMOVDQU 2720(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 2752(CX), Y6 - VMOVDQU 2784(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 2816(CX), Y6 - VMOVDQU 2848(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Load and process 32 bytes from input 9 to 5 outputs - VMOVDQU (DX), Y8 - ADDQ $0x20, DX - VPSRLQ $0x04, Y8, Y9 - VPAND Y5, Y8, Y8 - VPAND Y5, Y9, Y9 - VMOVDQU 2880(CX), Y6 - VMOVDQU 2912(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y0) - VMOVDQU 2944(CX), Y6 - VMOVDQU 2976(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y1) - VMOVDQU 3008(CX), Y6 - VMOVDQU 3040(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y2) - VMOVDQU 3072(CX), Y6 - VMOVDQU 3104(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y3) - VMOVDQU 3136(CX), Y6 - VMOVDQU 3168(CX), Y7 - VPSHUFB Y8, Y6, Y6 - VPSHUFB Y9, Y7, Y7 - XOR3WAY( $0x00, Y6, Y7, Y4) - - // Store 5 outputs - MOVQ (R14), BP - VMOVDQU Y0, (BP)(R15*1) - MOVQ 24(R14), BP - VMOVDQU Y1, (BP)(R15*1) - MOVQ 48(R14), BP - VMOVDQU Y2, (BP)(R15*1) - MOVQ 72(R14), BP - VMOVDQU Y3, (BP)(R15*1) - MOVQ 96(R14), BP - VMOVDQU Y4, (BP)(R15*1) - - // Prepare for next loop - ADDQ $0x20, R15 - DECQ AX - JNZ mulAvxTwo_10x5Xor_loop - VZEROUPPER - -mulAvxTwo_10x5Xor_end: - RET - -// func mulAvxTwo_10x6(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x6(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 131 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_10x6_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), R13 - MOVQ 216(DX), DX - MOVQ out_base+48(FP), R14 - MOVQ start+72(FP), R15 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, DX - MOVQ $0x0000000f, BP - MOVQ BP, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_10x6_loop: - // Load and process 32 bytes from input 0 to 6 outputs - VMOVDQU (BX), Y9 - ADDQ $0x20, BX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y0 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y1 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y2 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y3 - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y4 - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - VPXOR Y7, Y8, Y5 - - // Load and process 32 bytes from input 1 to 6 outputs - VMOVDQU (SI), Y9 - ADDQ $0x20, SI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 2 to 6 outputs - VMOVDQU (DI), Y9 - ADDQ $0x20, DI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 3 to 6 outputs - VMOVDQU (R8), Y9 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1152(CX), Y7 - VMOVDQU 1184(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1216(CX), Y7 - VMOVDQU 1248(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1280(CX), Y7 - VMOVDQU 1312(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1344(CX), Y7 - VMOVDQU 1376(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1408(CX), Y7 - VMOVDQU 1440(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1472(CX), Y7 - VMOVDQU 1504(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 4 to 6 outputs - VMOVDQU (R9), Y9 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1536(CX), Y7 - VMOVDQU 1568(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1600(CX), Y7 - VMOVDQU 1632(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1664(CX), Y7 - VMOVDQU 1696(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1728(CX), Y7 - VMOVDQU 1760(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1792(CX), Y7 - VMOVDQU 1824(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1856(CX), Y7 - VMOVDQU 1888(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 5 to 6 outputs - VMOVDQU (R10), Y9 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1920(CX), Y7 - VMOVDQU 1952(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1984(CX), Y7 - VMOVDQU 2016(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2048(CX), Y7 - VMOVDQU 2080(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2112(CX), Y7 - VMOVDQU 2144(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2176(CX), Y7 - VMOVDQU 2208(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 2240(CX), Y7 - VMOVDQU 2272(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 6 to 6 outputs - VMOVDQU (R11), Y9 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 2304(CX), Y7 - VMOVDQU 2336(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 2368(CX), Y7 - VMOVDQU 2400(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2432(CX), Y7 - VMOVDQU 2464(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2496(CX), Y7 - VMOVDQU 2528(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2560(CX), Y7 - VMOVDQU 2592(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 2624(CX), Y7 - VMOVDQU 2656(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 7 to 6 outputs - VMOVDQU (R12), Y9 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 2688(CX), Y7 - VMOVDQU 2720(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 2752(CX), Y7 - VMOVDQU 2784(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2816(CX), Y7 - VMOVDQU 2848(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2880(CX), Y7 - VMOVDQU 2912(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2944(CX), Y7 - VMOVDQU 2976(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 3008(CX), Y7 - VMOVDQU 3040(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 8 to 6 outputs - VMOVDQU (R13), Y9 - ADDQ $0x20, R13 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 3072(CX), Y7 - VMOVDQU 3104(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 3136(CX), Y7 - VMOVDQU 3168(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 3200(CX), Y7 - VMOVDQU 3232(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 3264(CX), Y7 - VMOVDQU 3296(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 3328(CX), Y7 - VMOVDQU 3360(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 3392(CX), Y7 - VMOVDQU 3424(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 9 to 6 outputs - VMOVDQU (DX), Y9 - ADDQ $0x20, DX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 3456(CX), Y7 - VMOVDQU 3488(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 3520(CX), Y7 - VMOVDQU 3552(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 3584(CX), Y7 - VMOVDQU 3616(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 3648(CX), Y7 - VMOVDQU 3680(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 3712(CX), Y7 - VMOVDQU 3744(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 3776(CX), Y7 - VMOVDQU 3808(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Store 6 outputs - MOVQ (R14), BP - VMOVDQU Y0, (BP)(R15*1) - MOVQ 24(R14), BP - VMOVDQU Y1, (BP)(R15*1) - MOVQ 48(R14), BP - VMOVDQU Y2, (BP)(R15*1) - MOVQ 72(R14), BP - VMOVDQU Y3, (BP)(R15*1) - MOVQ 96(R14), BP - VMOVDQU Y4, (BP)(R15*1) - MOVQ 120(R14), BP - VMOVDQU Y5, (BP)(R15*1) - - // Prepare for next loop - ADDQ $0x20, R15 - DECQ AX - JNZ mulAvxTwo_10x6_loop - VZEROUPPER - -mulAvxTwo_10x6_end: - RET - -// func mulAvxTwo_10x6Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x6Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 131 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_10x6Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), R13 - MOVQ 216(DX), DX - MOVQ out_base+48(FP), R14 - MOVQ start+72(FP), R15 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, DX - MOVQ $0x0000000f, BP - MOVQ BP, X6 - VPBROADCASTB X6, Y6 - -mulAvxTwo_10x6Xor_loop: - // Load and process 32 bytes from input 0 to 6 outputs - VMOVDQU (BX), Y9 - ADDQ $0x20, BX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - MOVQ (R14), BP - VMOVDQU (BP)(R15*1), Y0 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - MOVQ 24(R14), BP - VMOVDQU (BP)(R15*1), Y1 - VMOVDQU 64(CX), Y7 - VMOVDQU 96(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - MOVQ 48(R14), BP - VMOVDQU (BP)(R15*1), Y2 - VMOVDQU 128(CX), Y7 - VMOVDQU 160(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - MOVQ 72(R14), BP - VMOVDQU (BP)(R15*1), Y3 - VMOVDQU 192(CX), Y7 - VMOVDQU 224(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - MOVQ 96(R14), BP - VMOVDQU (BP)(R15*1), Y4 - VMOVDQU 256(CX), Y7 - VMOVDQU 288(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - MOVQ 120(R14), BP - VMOVDQU (BP)(R15*1), Y5 - VMOVDQU 320(CX), Y7 - VMOVDQU 352(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 1 to 6 outputs - VMOVDQU (SI), Y9 - ADDQ $0x20, SI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 384(CX), Y7 - VMOVDQU 416(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 448(CX), Y7 - VMOVDQU 480(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 512(CX), Y7 - VMOVDQU 544(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 576(CX), Y7 - VMOVDQU 608(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 640(CX), Y7 - VMOVDQU 672(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 704(CX), Y7 - VMOVDQU 736(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 2 to 6 outputs - VMOVDQU (DI), Y9 - ADDQ $0x20, DI - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 768(CX), Y7 - VMOVDQU 800(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 832(CX), Y7 - VMOVDQU 864(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 896(CX), Y7 - VMOVDQU 928(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 960(CX), Y7 - VMOVDQU 992(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1024(CX), Y7 - VMOVDQU 1056(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1088(CX), Y7 - VMOVDQU 1120(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 3 to 6 outputs - VMOVDQU (R8), Y9 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1152(CX), Y7 - VMOVDQU 1184(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1216(CX), Y7 - VMOVDQU 1248(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1280(CX), Y7 - VMOVDQU 1312(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1344(CX), Y7 - VMOVDQU 1376(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1408(CX), Y7 - VMOVDQU 1440(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1472(CX), Y7 - VMOVDQU 1504(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 4 to 6 outputs - VMOVDQU (R9), Y9 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1536(CX), Y7 - VMOVDQU 1568(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1600(CX), Y7 - VMOVDQU 1632(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 1664(CX), Y7 - VMOVDQU 1696(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 1728(CX), Y7 - VMOVDQU 1760(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 1792(CX), Y7 - VMOVDQU 1824(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 1856(CX), Y7 - VMOVDQU 1888(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 5 to 6 outputs - VMOVDQU (R10), Y9 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 1920(CX), Y7 - VMOVDQU 1952(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 1984(CX), Y7 - VMOVDQU 2016(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2048(CX), Y7 - VMOVDQU 2080(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2112(CX), Y7 - VMOVDQU 2144(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2176(CX), Y7 - VMOVDQU 2208(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 2240(CX), Y7 - VMOVDQU 2272(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 6 to 6 outputs - VMOVDQU (R11), Y9 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 2304(CX), Y7 - VMOVDQU 2336(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 2368(CX), Y7 - VMOVDQU 2400(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2432(CX), Y7 - VMOVDQU 2464(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2496(CX), Y7 - VMOVDQU 2528(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2560(CX), Y7 - VMOVDQU 2592(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 2624(CX), Y7 - VMOVDQU 2656(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 7 to 6 outputs - VMOVDQU (R12), Y9 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 2688(CX), Y7 - VMOVDQU 2720(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 2752(CX), Y7 - VMOVDQU 2784(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 2816(CX), Y7 - VMOVDQU 2848(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 2880(CX), Y7 - VMOVDQU 2912(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 2944(CX), Y7 - VMOVDQU 2976(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 3008(CX), Y7 - VMOVDQU 3040(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 8 to 6 outputs - VMOVDQU (R13), Y9 - ADDQ $0x20, R13 - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 3072(CX), Y7 - VMOVDQU 3104(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 3136(CX), Y7 - VMOVDQU 3168(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 3200(CX), Y7 - VMOVDQU 3232(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 3264(CX), Y7 - VMOVDQU 3296(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 3328(CX), Y7 - VMOVDQU 3360(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 3392(CX), Y7 - VMOVDQU 3424(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Load and process 32 bytes from input 9 to 6 outputs - VMOVDQU (DX), Y9 - ADDQ $0x20, DX - VPSRLQ $0x04, Y9, Y10 - VPAND Y6, Y9, Y9 - VPAND Y6, Y10, Y10 - VMOVDQU 3456(CX), Y7 - VMOVDQU 3488(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y0) - VMOVDQU 3520(CX), Y7 - VMOVDQU 3552(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y1) - VMOVDQU 3584(CX), Y7 - VMOVDQU 3616(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y2) - VMOVDQU 3648(CX), Y7 - VMOVDQU 3680(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y3) - VMOVDQU 3712(CX), Y7 - VMOVDQU 3744(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y4) - VMOVDQU 3776(CX), Y7 - VMOVDQU 3808(CX), Y8 - VPSHUFB Y9, Y7, Y7 - VPSHUFB Y10, Y8, Y8 - XOR3WAY( $0x00, Y7, Y8, Y5) - - // Store 6 outputs - MOVQ (R14), BP - VMOVDQU Y0, (BP)(R15*1) - MOVQ 24(R14), BP - VMOVDQU Y1, (BP)(R15*1) - MOVQ 48(R14), BP - VMOVDQU Y2, (BP)(R15*1) - MOVQ 72(R14), BP - VMOVDQU Y3, (BP)(R15*1) - MOVQ 96(R14), BP - VMOVDQU Y4, (BP)(R15*1) - MOVQ 120(R14), BP - VMOVDQU Y5, (BP)(R15*1) - - // Prepare for next loop - ADDQ $0x20, R15 - DECQ AX - JNZ mulAvxTwo_10x6Xor_loop - VZEROUPPER - -mulAvxTwo_10x6Xor_end: - RET - -// func mulAvxTwo_10x7(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x7(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 152 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_10x7_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), R13 - MOVQ 216(DX), DX - MOVQ out_base+48(FP), R14 - MOVQ start+72(FP), R15 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, DX - MOVQ $0x0000000f, BP - MOVQ BP, X7 - VPBROADCASTB X7, Y7 - -mulAvxTwo_10x7_loop: - // Load and process 32 bytes from input 0 to 7 outputs - VMOVDQU (BX), Y10 - ADDQ $0x20, BX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU (CX), Y8 - VMOVDQU 32(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y0 - VMOVDQU 64(CX), Y8 - VMOVDQU 96(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y1 - VMOVDQU 128(CX), Y8 - VMOVDQU 160(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y2 - VMOVDQU 192(CX), Y8 - VMOVDQU 224(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y3 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y4 - VMOVDQU 320(CX), Y8 - VMOVDQU 352(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y5 - VMOVDQU 384(CX), Y8 - VMOVDQU 416(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - VPXOR Y8, Y9, Y6 - - // Load and process 32 bytes from input 1 to 7 outputs - VMOVDQU (SI), Y10 - ADDQ $0x20, SI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 448(CX), Y8 - VMOVDQU 480(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 512(CX), Y8 - VMOVDQU 544(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 576(CX), Y8 - VMOVDQU 608(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 640(CX), Y8 - VMOVDQU 672(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 704(CX), Y8 - VMOVDQU 736(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 768(CX), Y8 - VMOVDQU 800(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 832(CX), Y8 - VMOVDQU 864(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 2 to 7 outputs - VMOVDQU (DI), Y10 - ADDQ $0x20, DI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 896(CX), Y8 - VMOVDQU 928(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 960(CX), Y8 - VMOVDQU 992(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1024(CX), Y8 - VMOVDQU 1056(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1088(CX), Y8 - VMOVDQU 1120(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1152(CX), Y8 - VMOVDQU 1184(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1216(CX), Y8 - VMOVDQU 1248(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1280(CX), Y8 - VMOVDQU 1312(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 3 to 7 outputs - VMOVDQU (R8), Y10 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1344(CX), Y8 - VMOVDQU 1376(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1408(CX), Y8 - VMOVDQU 1440(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1472(CX), Y8 - VMOVDQU 1504(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1536(CX), Y8 - VMOVDQU 1568(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1600(CX), Y8 - VMOVDQU 1632(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1664(CX), Y8 - VMOVDQU 1696(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1728(CX), Y8 - VMOVDQU 1760(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 4 to 7 outputs - VMOVDQU (R9), Y10 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1792(CX), Y8 - VMOVDQU 1824(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1856(CX), Y8 - VMOVDQU 1888(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1920(CX), Y8 - VMOVDQU 1952(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1984(CX), Y8 - VMOVDQU 2016(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2048(CX), Y8 - VMOVDQU 2080(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 2112(CX), Y8 - VMOVDQU 2144(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 2176(CX), Y8 - VMOVDQU 2208(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 5 to 7 outputs - VMOVDQU (R10), Y10 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 2240(CX), Y8 - VMOVDQU 2272(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 2304(CX), Y8 - VMOVDQU 2336(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 2368(CX), Y8 - VMOVDQU 2400(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 2432(CX), Y8 - VMOVDQU 2464(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2496(CX), Y8 - VMOVDQU 2528(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 2560(CX), Y8 - VMOVDQU 2592(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 2624(CX), Y8 - VMOVDQU 2656(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 6 to 7 outputs - VMOVDQU (R11), Y10 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 2688(CX), Y8 - VMOVDQU 2720(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 2752(CX), Y8 - VMOVDQU 2784(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 2816(CX), Y8 - VMOVDQU 2848(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 2880(CX), Y8 - VMOVDQU 2912(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2944(CX), Y8 - VMOVDQU 2976(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 3008(CX), Y8 - VMOVDQU 3040(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 3072(CX), Y8 - VMOVDQU 3104(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 7 to 7 outputs - VMOVDQU (R12), Y10 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 3136(CX), Y8 - VMOVDQU 3168(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 3200(CX), Y8 - VMOVDQU 3232(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 3264(CX), Y8 - VMOVDQU 3296(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 3328(CX), Y8 - VMOVDQU 3360(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 3392(CX), Y8 - VMOVDQU 3424(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 3456(CX), Y8 - VMOVDQU 3488(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 3520(CX), Y8 - VMOVDQU 3552(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 8 to 7 outputs - VMOVDQU (R13), Y10 - ADDQ $0x20, R13 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 3584(CX), Y8 - VMOVDQU 3616(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 3648(CX), Y8 - VMOVDQU 3680(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 3712(CX), Y8 - VMOVDQU 3744(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 3776(CX), Y8 - VMOVDQU 3808(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 3840(CX), Y8 - VMOVDQU 3872(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 3904(CX), Y8 - VMOVDQU 3936(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 3968(CX), Y8 - VMOVDQU 4000(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 9 to 7 outputs - VMOVDQU (DX), Y10 - ADDQ $0x20, DX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 4032(CX), Y8 - VMOVDQU 4064(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 4096(CX), Y8 - VMOVDQU 4128(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 4160(CX), Y8 - VMOVDQU 4192(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 4224(CX), Y8 - VMOVDQU 4256(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 4288(CX), Y8 - VMOVDQU 4320(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 4352(CX), Y8 - VMOVDQU 4384(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 4416(CX), Y8 - VMOVDQU 4448(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Store 7 outputs - MOVQ (R14), BP - VMOVDQU Y0, (BP)(R15*1) - MOVQ 24(R14), BP - VMOVDQU Y1, (BP)(R15*1) - MOVQ 48(R14), BP - VMOVDQU Y2, (BP)(R15*1) - MOVQ 72(R14), BP - VMOVDQU Y3, (BP)(R15*1) - MOVQ 96(R14), BP - VMOVDQU Y4, (BP)(R15*1) - MOVQ 120(R14), BP - VMOVDQU Y5, (BP)(R15*1) - MOVQ 144(R14), BP - VMOVDQU Y6, (BP)(R15*1) - - // Prepare for next loop - ADDQ $0x20, R15 - DECQ AX - JNZ mulAvxTwo_10x7_loop - VZEROUPPER - -mulAvxTwo_10x7_end: - RET - -// func mulAvxTwo_10x7Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x7Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 152 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_10x7Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), R13 - MOVQ 216(DX), DX - MOVQ out_base+48(FP), R14 - MOVQ start+72(FP), R15 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, DX - MOVQ $0x0000000f, BP - MOVQ BP, X7 - VPBROADCASTB X7, Y7 - -mulAvxTwo_10x7Xor_loop: - // Load and process 32 bytes from input 0 to 7 outputs - VMOVDQU (BX), Y10 - ADDQ $0x20, BX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - MOVQ (R14), BP - VMOVDQU (BP)(R15*1), Y0 - VMOVDQU (CX), Y8 - VMOVDQU 32(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - MOVQ 24(R14), BP - VMOVDQU (BP)(R15*1), Y1 - VMOVDQU 64(CX), Y8 - VMOVDQU 96(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - MOVQ 48(R14), BP - VMOVDQU (BP)(R15*1), Y2 - VMOVDQU 128(CX), Y8 - VMOVDQU 160(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - MOVQ 72(R14), BP - VMOVDQU (BP)(R15*1), Y3 - VMOVDQU 192(CX), Y8 - VMOVDQU 224(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - MOVQ 96(R14), BP - VMOVDQU (BP)(R15*1), Y4 - VMOVDQU 256(CX), Y8 - VMOVDQU 288(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - MOVQ 120(R14), BP - VMOVDQU (BP)(R15*1), Y5 - VMOVDQU 320(CX), Y8 - VMOVDQU 352(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - MOVQ 144(R14), BP - VMOVDQU (BP)(R15*1), Y6 - VMOVDQU 384(CX), Y8 - VMOVDQU 416(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 1 to 7 outputs - VMOVDQU (SI), Y10 - ADDQ $0x20, SI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 448(CX), Y8 - VMOVDQU 480(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 512(CX), Y8 - VMOVDQU 544(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 576(CX), Y8 - VMOVDQU 608(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 640(CX), Y8 - VMOVDQU 672(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 704(CX), Y8 - VMOVDQU 736(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 768(CX), Y8 - VMOVDQU 800(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 832(CX), Y8 - VMOVDQU 864(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 2 to 7 outputs - VMOVDQU (DI), Y10 - ADDQ $0x20, DI - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 896(CX), Y8 - VMOVDQU 928(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 960(CX), Y8 - VMOVDQU 992(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1024(CX), Y8 - VMOVDQU 1056(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1088(CX), Y8 - VMOVDQU 1120(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1152(CX), Y8 - VMOVDQU 1184(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1216(CX), Y8 - VMOVDQU 1248(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1280(CX), Y8 - VMOVDQU 1312(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 3 to 7 outputs - VMOVDQU (R8), Y10 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1344(CX), Y8 - VMOVDQU 1376(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1408(CX), Y8 - VMOVDQU 1440(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1472(CX), Y8 - VMOVDQU 1504(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1536(CX), Y8 - VMOVDQU 1568(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 1600(CX), Y8 - VMOVDQU 1632(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 1664(CX), Y8 - VMOVDQU 1696(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 1728(CX), Y8 - VMOVDQU 1760(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 4 to 7 outputs - VMOVDQU (R9), Y10 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 1792(CX), Y8 - VMOVDQU 1824(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 1856(CX), Y8 - VMOVDQU 1888(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 1920(CX), Y8 - VMOVDQU 1952(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 1984(CX), Y8 - VMOVDQU 2016(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2048(CX), Y8 - VMOVDQU 2080(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 2112(CX), Y8 - VMOVDQU 2144(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 2176(CX), Y8 - VMOVDQU 2208(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 5 to 7 outputs - VMOVDQU (R10), Y10 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 2240(CX), Y8 - VMOVDQU 2272(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 2304(CX), Y8 - VMOVDQU 2336(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 2368(CX), Y8 - VMOVDQU 2400(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 2432(CX), Y8 - VMOVDQU 2464(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2496(CX), Y8 - VMOVDQU 2528(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 2560(CX), Y8 - VMOVDQU 2592(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 2624(CX), Y8 - VMOVDQU 2656(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 6 to 7 outputs - VMOVDQU (R11), Y10 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 2688(CX), Y8 - VMOVDQU 2720(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 2752(CX), Y8 - VMOVDQU 2784(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 2816(CX), Y8 - VMOVDQU 2848(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 2880(CX), Y8 - VMOVDQU 2912(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 2944(CX), Y8 - VMOVDQU 2976(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 3008(CX), Y8 - VMOVDQU 3040(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 3072(CX), Y8 - VMOVDQU 3104(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 7 to 7 outputs - VMOVDQU (R12), Y10 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 3136(CX), Y8 - VMOVDQU 3168(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 3200(CX), Y8 - VMOVDQU 3232(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 3264(CX), Y8 - VMOVDQU 3296(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 3328(CX), Y8 - VMOVDQU 3360(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 3392(CX), Y8 - VMOVDQU 3424(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 3456(CX), Y8 - VMOVDQU 3488(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 3520(CX), Y8 - VMOVDQU 3552(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 8 to 7 outputs - VMOVDQU (R13), Y10 - ADDQ $0x20, R13 - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 3584(CX), Y8 - VMOVDQU 3616(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 3648(CX), Y8 - VMOVDQU 3680(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 3712(CX), Y8 - VMOVDQU 3744(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 3776(CX), Y8 - VMOVDQU 3808(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 3840(CX), Y8 - VMOVDQU 3872(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 3904(CX), Y8 - VMOVDQU 3936(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 3968(CX), Y8 - VMOVDQU 4000(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Load and process 32 bytes from input 9 to 7 outputs - VMOVDQU (DX), Y10 - ADDQ $0x20, DX - VPSRLQ $0x04, Y10, Y11 - VPAND Y7, Y10, Y10 - VPAND Y7, Y11, Y11 - VMOVDQU 4032(CX), Y8 - VMOVDQU 4064(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y0) - VMOVDQU 4096(CX), Y8 - VMOVDQU 4128(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y1) - VMOVDQU 4160(CX), Y8 - VMOVDQU 4192(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y2) - VMOVDQU 4224(CX), Y8 - VMOVDQU 4256(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y3) - VMOVDQU 4288(CX), Y8 - VMOVDQU 4320(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y4) - VMOVDQU 4352(CX), Y8 - VMOVDQU 4384(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y5) - VMOVDQU 4416(CX), Y8 - VMOVDQU 4448(CX), Y9 - VPSHUFB Y10, Y8, Y8 - VPSHUFB Y11, Y9, Y9 - XOR3WAY( $0x00, Y8, Y9, Y6) - - // Store 7 outputs - MOVQ (R14), BP - VMOVDQU Y0, (BP)(R15*1) - MOVQ 24(R14), BP - VMOVDQU Y1, (BP)(R15*1) - MOVQ 48(R14), BP - VMOVDQU Y2, (BP)(R15*1) - MOVQ 72(R14), BP - VMOVDQU Y3, (BP)(R15*1) - MOVQ 96(R14), BP - VMOVDQU Y4, (BP)(R15*1) - MOVQ 120(R14), BP - VMOVDQU Y5, (BP)(R15*1) - MOVQ 144(R14), BP - VMOVDQU Y6, (BP)(R15*1) - - // Prepare for next loop - ADDQ $0x20, R15 - DECQ AX - JNZ mulAvxTwo_10x7Xor_loop - VZEROUPPER - -mulAvxTwo_10x7Xor_end: - RET - -// func mulAvxTwo_10x8(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x8(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 173 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_10x8_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), R13 - MOVQ 216(DX), DX - MOVQ out_base+48(FP), R14 - MOVQ start+72(FP), R15 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, DX - MOVQ $0x0000000f, BP - MOVQ BP, X8 - VPBROADCASTB X8, Y8 - -mulAvxTwo_10x8_loop: - // Load and process 32 bytes from input 0 to 8 outputs - VMOVDQU (BX), Y11 - ADDQ $0x20, BX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU (CX), Y9 - VMOVDQU 32(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y0 - VMOVDQU 64(CX), Y9 - VMOVDQU 96(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y1 - VMOVDQU 128(CX), Y9 - VMOVDQU 160(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y2 - VMOVDQU 192(CX), Y9 - VMOVDQU 224(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y3 - VMOVDQU 256(CX), Y9 - VMOVDQU 288(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y4 - VMOVDQU 320(CX), Y9 - VMOVDQU 352(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y5 - VMOVDQU 384(CX), Y9 - VMOVDQU 416(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y6 - VMOVDQU 448(CX), Y9 - VMOVDQU 480(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - VPXOR Y9, Y10, Y7 - - // Load and process 32 bytes from input 1 to 8 outputs - VMOVDQU (SI), Y11 - ADDQ $0x20, SI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 512(CX), Y9 - VMOVDQU 544(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 576(CX), Y9 - VMOVDQU 608(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y9 - VMOVDQU 672(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 704(CX), Y9 - VMOVDQU 736(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 768(CX), Y9 - VMOVDQU 800(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 832(CX), Y9 - VMOVDQU 864(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 896(CX), Y9 - VMOVDQU 928(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 960(CX), Y9 - VMOVDQU 992(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 2 to 8 outputs - VMOVDQU (DI), Y11 - ADDQ $0x20, DI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1024(CX), Y9 - VMOVDQU 1056(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1088(CX), Y9 - VMOVDQU 1120(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1152(CX), Y9 - VMOVDQU 1184(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1216(CX), Y9 - VMOVDQU 1248(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y9 - VMOVDQU 1312(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1344(CX), Y9 - VMOVDQU 1376(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1408(CX), Y9 - VMOVDQU 1440(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1472(CX), Y9 - VMOVDQU 1504(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 3 to 8 outputs - VMOVDQU (R8), Y11 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1536(CX), Y9 - VMOVDQU 1568(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1600(CX), Y9 - VMOVDQU 1632(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1664(CX), Y9 - VMOVDQU 1696(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1728(CX), Y9 - VMOVDQU 1760(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1792(CX), Y9 - VMOVDQU 1824(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1856(CX), Y9 - VMOVDQU 1888(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1920(CX), Y9 - VMOVDQU 1952(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1984(CX), Y9 - VMOVDQU 2016(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 4 to 8 outputs - VMOVDQU (R9), Y11 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 2048(CX), Y9 - VMOVDQU 2080(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 2112(CX), Y9 - VMOVDQU 2144(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 2176(CX), Y9 - VMOVDQU 2208(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 2240(CX), Y9 - VMOVDQU 2272(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 2304(CX), Y9 - VMOVDQU 2336(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 2368(CX), Y9 - VMOVDQU 2400(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 2432(CX), Y9 - VMOVDQU 2464(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 2496(CX), Y9 - VMOVDQU 2528(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 5 to 8 outputs - VMOVDQU (R10), Y11 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 2560(CX), Y9 - VMOVDQU 2592(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 2624(CX), Y9 - VMOVDQU 2656(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 2688(CX), Y9 - VMOVDQU 2720(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 2752(CX), Y9 - VMOVDQU 2784(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 2816(CX), Y9 - VMOVDQU 2848(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 2880(CX), Y9 - VMOVDQU 2912(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 2944(CX), Y9 - VMOVDQU 2976(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 3008(CX), Y9 - VMOVDQU 3040(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 6 to 8 outputs - VMOVDQU (R11), Y11 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 3072(CX), Y9 - VMOVDQU 3104(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 3136(CX), Y9 - VMOVDQU 3168(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 3200(CX), Y9 - VMOVDQU 3232(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 3264(CX), Y9 - VMOVDQU 3296(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 3328(CX), Y9 - VMOVDQU 3360(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 3392(CX), Y9 - VMOVDQU 3424(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 3456(CX), Y9 - VMOVDQU 3488(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 3520(CX), Y9 - VMOVDQU 3552(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 7 to 8 outputs - VMOVDQU (R12), Y11 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 3584(CX), Y9 - VMOVDQU 3616(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 3648(CX), Y9 - VMOVDQU 3680(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 3712(CX), Y9 - VMOVDQU 3744(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 3776(CX), Y9 - VMOVDQU 3808(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 3840(CX), Y9 - VMOVDQU 3872(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 3904(CX), Y9 - VMOVDQU 3936(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 3968(CX), Y9 - VMOVDQU 4000(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 4032(CX), Y9 - VMOVDQU 4064(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 8 to 8 outputs - VMOVDQU (R13), Y11 - ADDQ $0x20, R13 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 4096(CX), Y9 - VMOVDQU 4128(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 4160(CX), Y9 - VMOVDQU 4192(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 4224(CX), Y9 - VMOVDQU 4256(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 4288(CX), Y9 - VMOVDQU 4320(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 4352(CX), Y9 - VMOVDQU 4384(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 4416(CX), Y9 - VMOVDQU 4448(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 4480(CX), Y9 - VMOVDQU 4512(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 4544(CX), Y9 - VMOVDQU 4576(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 9 to 8 outputs - VMOVDQU (DX), Y11 - ADDQ $0x20, DX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 4608(CX), Y9 - VMOVDQU 4640(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 4672(CX), Y9 - VMOVDQU 4704(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 4736(CX), Y9 - VMOVDQU 4768(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 4800(CX), Y9 - VMOVDQU 4832(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 4864(CX), Y9 - VMOVDQU 4896(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 4928(CX), Y9 - VMOVDQU 4960(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 4992(CX), Y9 - VMOVDQU 5024(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 5056(CX), Y9 - VMOVDQU 5088(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Store 8 outputs - MOVQ (R14), BP - VMOVDQU Y0, (BP)(R15*1) - MOVQ 24(R14), BP - VMOVDQU Y1, (BP)(R15*1) - MOVQ 48(R14), BP - VMOVDQU Y2, (BP)(R15*1) - MOVQ 72(R14), BP - VMOVDQU Y3, (BP)(R15*1) - MOVQ 96(R14), BP - VMOVDQU Y4, (BP)(R15*1) - MOVQ 120(R14), BP - VMOVDQU Y5, (BP)(R15*1) - MOVQ 144(R14), BP - VMOVDQU Y6, (BP)(R15*1) - MOVQ 168(R14), BP - VMOVDQU Y7, (BP)(R15*1) - - // Prepare for next loop - ADDQ $0x20, R15 - DECQ AX - JNZ mulAvxTwo_10x8_loop - VZEROUPPER - -mulAvxTwo_10x8_end: - RET - -// func mulAvxTwo_10x8Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x8Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 173 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_10x8Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), R13 - MOVQ 216(DX), DX - MOVQ out_base+48(FP), R14 - MOVQ start+72(FP), R15 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, DX - MOVQ $0x0000000f, BP - MOVQ BP, X8 - VPBROADCASTB X8, Y8 - -mulAvxTwo_10x8Xor_loop: - // Load and process 32 bytes from input 0 to 8 outputs - VMOVDQU (BX), Y11 - ADDQ $0x20, BX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - MOVQ (R14), BP - VMOVDQU (BP)(R15*1), Y0 - VMOVDQU (CX), Y9 - VMOVDQU 32(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - MOVQ 24(R14), BP - VMOVDQU (BP)(R15*1), Y1 - VMOVDQU 64(CX), Y9 - VMOVDQU 96(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - MOVQ 48(R14), BP - VMOVDQU (BP)(R15*1), Y2 - VMOVDQU 128(CX), Y9 - VMOVDQU 160(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - MOVQ 72(R14), BP - VMOVDQU (BP)(R15*1), Y3 - VMOVDQU 192(CX), Y9 - VMOVDQU 224(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - MOVQ 96(R14), BP - VMOVDQU (BP)(R15*1), Y4 - VMOVDQU 256(CX), Y9 - VMOVDQU 288(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - MOVQ 120(R14), BP - VMOVDQU (BP)(R15*1), Y5 - VMOVDQU 320(CX), Y9 - VMOVDQU 352(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - MOVQ 144(R14), BP - VMOVDQU (BP)(R15*1), Y6 - VMOVDQU 384(CX), Y9 - VMOVDQU 416(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - MOVQ 168(R14), BP - VMOVDQU (BP)(R15*1), Y7 - VMOVDQU 448(CX), Y9 - VMOVDQU 480(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 1 to 8 outputs - VMOVDQU (SI), Y11 - ADDQ $0x20, SI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 512(CX), Y9 - VMOVDQU 544(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 576(CX), Y9 - VMOVDQU 608(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 640(CX), Y9 - VMOVDQU 672(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 704(CX), Y9 - VMOVDQU 736(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 768(CX), Y9 - VMOVDQU 800(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 832(CX), Y9 - VMOVDQU 864(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 896(CX), Y9 - VMOVDQU 928(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 960(CX), Y9 - VMOVDQU 992(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 2 to 8 outputs - VMOVDQU (DI), Y11 - ADDQ $0x20, DI - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1024(CX), Y9 - VMOVDQU 1056(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1088(CX), Y9 - VMOVDQU 1120(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1152(CX), Y9 - VMOVDQU 1184(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1216(CX), Y9 - VMOVDQU 1248(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1280(CX), Y9 - VMOVDQU 1312(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1344(CX), Y9 - VMOVDQU 1376(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1408(CX), Y9 - VMOVDQU 1440(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1472(CX), Y9 - VMOVDQU 1504(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 3 to 8 outputs - VMOVDQU (R8), Y11 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 1536(CX), Y9 - VMOVDQU 1568(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 1600(CX), Y9 - VMOVDQU 1632(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 1664(CX), Y9 - VMOVDQU 1696(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 1728(CX), Y9 - VMOVDQU 1760(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 1792(CX), Y9 - VMOVDQU 1824(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 1856(CX), Y9 - VMOVDQU 1888(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 1920(CX), Y9 - VMOVDQU 1952(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 1984(CX), Y9 - VMOVDQU 2016(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 4 to 8 outputs - VMOVDQU (R9), Y11 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 2048(CX), Y9 - VMOVDQU 2080(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 2112(CX), Y9 - VMOVDQU 2144(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 2176(CX), Y9 - VMOVDQU 2208(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 2240(CX), Y9 - VMOVDQU 2272(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 2304(CX), Y9 - VMOVDQU 2336(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 2368(CX), Y9 - VMOVDQU 2400(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 2432(CX), Y9 - VMOVDQU 2464(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 2496(CX), Y9 - VMOVDQU 2528(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 5 to 8 outputs - VMOVDQU (R10), Y11 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 2560(CX), Y9 - VMOVDQU 2592(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 2624(CX), Y9 - VMOVDQU 2656(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 2688(CX), Y9 - VMOVDQU 2720(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 2752(CX), Y9 - VMOVDQU 2784(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 2816(CX), Y9 - VMOVDQU 2848(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 2880(CX), Y9 - VMOVDQU 2912(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 2944(CX), Y9 - VMOVDQU 2976(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 3008(CX), Y9 - VMOVDQU 3040(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 6 to 8 outputs - VMOVDQU (R11), Y11 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 3072(CX), Y9 - VMOVDQU 3104(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 3136(CX), Y9 - VMOVDQU 3168(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 3200(CX), Y9 - VMOVDQU 3232(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 3264(CX), Y9 - VMOVDQU 3296(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 3328(CX), Y9 - VMOVDQU 3360(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 3392(CX), Y9 - VMOVDQU 3424(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 3456(CX), Y9 - VMOVDQU 3488(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 3520(CX), Y9 - VMOVDQU 3552(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 7 to 8 outputs - VMOVDQU (R12), Y11 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 3584(CX), Y9 - VMOVDQU 3616(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 3648(CX), Y9 - VMOVDQU 3680(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 3712(CX), Y9 - VMOVDQU 3744(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 3776(CX), Y9 - VMOVDQU 3808(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 3840(CX), Y9 - VMOVDQU 3872(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 3904(CX), Y9 - VMOVDQU 3936(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 3968(CX), Y9 - VMOVDQU 4000(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 4032(CX), Y9 - VMOVDQU 4064(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 8 to 8 outputs - VMOVDQU (R13), Y11 - ADDQ $0x20, R13 - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 4096(CX), Y9 - VMOVDQU 4128(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 4160(CX), Y9 - VMOVDQU 4192(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 4224(CX), Y9 - VMOVDQU 4256(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 4288(CX), Y9 - VMOVDQU 4320(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 4352(CX), Y9 - VMOVDQU 4384(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 4416(CX), Y9 - VMOVDQU 4448(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 4480(CX), Y9 - VMOVDQU 4512(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 4544(CX), Y9 - VMOVDQU 4576(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Load and process 32 bytes from input 9 to 8 outputs - VMOVDQU (DX), Y11 - ADDQ $0x20, DX - VPSRLQ $0x04, Y11, Y12 - VPAND Y8, Y11, Y11 - VPAND Y8, Y12, Y12 - VMOVDQU 4608(CX), Y9 - VMOVDQU 4640(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y0) - VMOVDQU 4672(CX), Y9 - VMOVDQU 4704(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y1) - VMOVDQU 4736(CX), Y9 - VMOVDQU 4768(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y2) - VMOVDQU 4800(CX), Y9 - VMOVDQU 4832(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y3) - VMOVDQU 4864(CX), Y9 - VMOVDQU 4896(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU 4928(CX), Y9 - VMOVDQU 4960(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y5) - VMOVDQU 4992(CX), Y9 - VMOVDQU 5024(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y6) - VMOVDQU 5056(CX), Y9 - VMOVDQU 5088(CX), Y10 - VPSHUFB Y11, Y9, Y9 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y9, Y10, Y7) - - // Store 8 outputs - MOVQ (R14), BP - VMOVDQU Y0, (BP)(R15*1) - MOVQ 24(R14), BP - VMOVDQU Y1, (BP)(R15*1) - MOVQ 48(R14), BP - VMOVDQU Y2, (BP)(R15*1) - MOVQ 72(R14), BP - VMOVDQU Y3, (BP)(R15*1) - MOVQ 96(R14), BP - VMOVDQU Y4, (BP)(R15*1) - MOVQ 120(R14), BP - VMOVDQU Y5, (BP)(R15*1) - MOVQ 144(R14), BP - VMOVDQU Y6, (BP)(R15*1) - MOVQ 168(R14), BP - VMOVDQU Y7, (BP)(R15*1) - - // Prepare for next loop - ADDQ $0x20, R15 - DECQ AX - JNZ mulAvxTwo_10x8Xor_loop - VZEROUPPER - -mulAvxTwo_10x8Xor_end: - RET - -// func mulAvxTwo_10x9(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x9(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 194 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_10x9_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), R13 - MOVQ 216(DX), DX - MOVQ out_base+48(FP), R14 - MOVQ start+72(FP), R15 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, DX - MOVQ $0x0000000f, BP - MOVQ BP, X9 - VPBROADCASTB X9, Y9 - -mulAvxTwo_10x9_loop: - // Load and process 32 bytes from input 0 to 9 outputs - VMOVDQU (BX), Y12 - ADDQ $0x20, BX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU (CX), Y10 - VMOVDQU 32(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y0 - VMOVDQU 64(CX), Y10 - VMOVDQU 96(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y1 - VMOVDQU 128(CX), Y10 - VMOVDQU 160(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y2 - VMOVDQU 192(CX), Y10 - VMOVDQU 224(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y3 - VMOVDQU 256(CX), Y10 - VMOVDQU 288(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y4 - VMOVDQU 320(CX), Y10 - VMOVDQU 352(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y5 - VMOVDQU 384(CX), Y10 - VMOVDQU 416(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y6 - VMOVDQU 448(CX), Y10 - VMOVDQU 480(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y7 - VMOVDQU 512(CX), Y10 - VMOVDQU 544(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - VPXOR Y10, Y11, Y8 - - // Load and process 32 bytes from input 1 to 9 outputs - VMOVDQU (SI), Y12 - ADDQ $0x20, SI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 576(CX), Y10 - VMOVDQU 608(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 640(CX), Y10 - VMOVDQU 672(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 704(CX), Y10 - VMOVDQU 736(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 768(CX), Y10 - VMOVDQU 800(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 832(CX), Y10 - VMOVDQU 864(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 896(CX), Y10 - VMOVDQU 928(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 960(CX), Y10 - VMOVDQU 992(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1024(CX), Y10 - VMOVDQU 1056(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1088(CX), Y10 - VMOVDQU 1120(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 2 to 9 outputs - VMOVDQU (DI), Y12 - ADDQ $0x20, DI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1152(CX), Y10 - VMOVDQU 1184(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1216(CX), Y10 - VMOVDQU 1248(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1280(CX), Y10 - VMOVDQU 1312(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1344(CX), Y10 - VMOVDQU 1376(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1408(CX), Y10 - VMOVDQU 1440(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 1472(CX), Y10 - VMOVDQU 1504(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 1536(CX), Y10 - VMOVDQU 1568(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1600(CX), Y10 - VMOVDQU 1632(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1664(CX), Y10 - VMOVDQU 1696(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 3 to 9 outputs - VMOVDQU (R8), Y12 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1728(CX), Y10 - VMOVDQU 1760(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1792(CX), Y10 - VMOVDQU 1824(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1856(CX), Y10 - VMOVDQU 1888(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1920(CX), Y10 - VMOVDQU 1952(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1984(CX), Y10 - VMOVDQU 2016(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2048(CX), Y10 - VMOVDQU 2080(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2112(CX), Y10 - VMOVDQU 2144(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2176(CX), Y10 - VMOVDQU 2208(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2240(CX), Y10 - VMOVDQU 2272(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 4 to 9 outputs - VMOVDQU (R9), Y12 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 2304(CX), Y10 - VMOVDQU 2336(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 2368(CX), Y10 - VMOVDQU 2400(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 2432(CX), Y10 - VMOVDQU 2464(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 2496(CX), Y10 - VMOVDQU 2528(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 2560(CX), Y10 - VMOVDQU 2592(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2624(CX), Y10 - VMOVDQU 2656(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2688(CX), Y10 - VMOVDQU 2720(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2752(CX), Y10 - VMOVDQU 2784(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2816(CX), Y10 - VMOVDQU 2848(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 5 to 9 outputs - VMOVDQU (R10), Y12 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 2880(CX), Y10 - VMOVDQU 2912(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 2944(CX), Y10 - VMOVDQU 2976(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 3008(CX), Y10 - VMOVDQU 3040(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 3072(CX), Y10 - VMOVDQU 3104(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 3136(CX), Y10 - VMOVDQU 3168(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 3200(CX), Y10 - VMOVDQU 3232(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 3264(CX), Y10 - VMOVDQU 3296(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 3328(CX), Y10 - VMOVDQU 3360(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 3392(CX), Y10 - VMOVDQU 3424(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 6 to 9 outputs - VMOVDQU (R11), Y12 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 3456(CX), Y10 - VMOVDQU 3488(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 3520(CX), Y10 - VMOVDQU 3552(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 3584(CX), Y10 - VMOVDQU 3616(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 3648(CX), Y10 - VMOVDQU 3680(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 3712(CX), Y10 - VMOVDQU 3744(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 3776(CX), Y10 - VMOVDQU 3808(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 3840(CX), Y10 - VMOVDQU 3872(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 3904(CX), Y10 - VMOVDQU 3936(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 3968(CX), Y10 - VMOVDQU 4000(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 7 to 9 outputs - VMOVDQU (R12), Y12 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 4032(CX), Y10 - VMOVDQU 4064(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 4096(CX), Y10 - VMOVDQU 4128(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 4160(CX), Y10 - VMOVDQU 4192(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 4224(CX), Y10 - VMOVDQU 4256(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 4288(CX), Y10 - VMOVDQU 4320(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 4352(CX), Y10 - VMOVDQU 4384(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 4416(CX), Y10 - VMOVDQU 4448(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 4480(CX), Y10 - VMOVDQU 4512(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 4544(CX), Y10 - VMOVDQU 4576(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 8 to 9 outputs - VMOVDQU (R13), Y12 - ADDQ $0x20, R13 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 4608(CX), Y10 - VMOVDQU 4640(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 4672(CX), Y10 - VMOVDQU 4704(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 4736(CX), Y10 - VMOVDQU 4768(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 4800(CX), Y10 - VMOVDQU 4832(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 4864(CX), Y10 - VMOVDQU 4896(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 4928(CX), Y10 - VMOVDQU 4960(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 4992(CX), Y10 - VMOVDQU 5024(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 5056(CX), Y10 - VMOVDQU 5088(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 5120(CX), Y10 - VMOVDQU 5152(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 9 to 9 outputs - VMOVDQU (DX), Y12 - ADDQ $0x20, DX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 5184(CX), Y10 - VMOVDQU 5216(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 5248(CX), Y10 - VMOVDQU 5280(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 5312(CX), Y10 - VMOVDQU 5344(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 5376(CX), Y10 - VMOVDQU 5408(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 5440(CX), Y10 - VMOVDQU 5472(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 5504(CX), Y10 - VMOVDQU 5536(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 5568(CX), Y10 - VMOVDQU 5600(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 5632(CX), Y10 - VMOVDQU 5664(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 5696(CX), Y10 - VMOVDQU 5728(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Store 9 outputs - MOVQ (R14), BP - VMOVDQU Y0, (BP)(R15*1) - MOVQ 24(R14), BP - VMOVDQU Y1, (BP)(R15*1) - MOVQ 48(R14), BP - VMOVDQU Y2, (BP)(R15*1) - MOVQ 72(R14), BP - VMOVDQU Y3, (BP)(R15*1) - MOVQ 96(R14), BP - VMOVDQU Y4, (BP)(R15*1) - MOVQ 120(R14), BP - VMOVDQU Y5, (BP)(R15*1) - MOVQ 144(R14), BP - VMOVDQU Y6, (BP)(R15*1) - MOVQ 168(R14), BP - VMOVDQU Y7, (BP)(R15*1) - MOVQ 192(R14), BP - VMOVDQU Y8, (BP)(R15*1) - - // Prepare for next loop - ADDQ $0x20, R15 - DECQ AX - JNZ mulAvxTwo_10x9_loop - VZEROUPPER - -mulAvxTwo_10x9_end: - RET - -// func mulAvxTwo_10x9Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x9Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 194 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_10x9Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), R13 - MOVQ 216(DX), DX - MOVQ out_base+48(FP), R14 - MOVQ start+72(FP), R15 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, DX - MOVQ $0x0000000f, BP - MOVQ BP, X9 - VPBROADCASTB X9, Y9 - -mulAvxTwo_10x9Xor_loop: - // Load and process 32 bytes from input 0 to 9 outputs - VMOVDQU (BX), Y12 - ADDQ $0x20, BX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - MOVQ (R14), BP - VMOVDQU (BP)(R15*1), Y0 - VMOVDQU (CX), Y10 - VMOVDQU 32(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - MOVQ 24(R14), BP - VMOVDQU (BP)(R15*1), Y1 - VMOVDQU 64(CX), Y10 - VMOVDQU 96(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - MOVQ 48(R14), BP - VMOVDQU (BP)(R15*1), Y2 - VMOVDQU 128(CX), Y10 - VMOVDQU 160(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - MOVQ 72(R14), BP - VMOVDQU (BP)(R15*1), Y3 - VMOVDQU 192(CX), Y10 - VMOVDQU 224(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - MOVQ 96(R14), BP - VMOVDQU (BP)(R15*1), Y4 - VMOVDQU 256(CX), Y10 - VMOVDQU 288(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - MOVQ 120(R14), BP - VMOVDQU (BP)(R15*1), Y5 - VMOVDQU 320(CX), Y10 - VMOVDQU 352(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - MOVQ 144(R14), BP - VMOVDQU (BP)(R15*1), Y6 - VMOVDQU 384(CX), Y10 - VMOVDQU 416(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - MOVQ 168(R14), BP - VMOVDQU (BP)(R15*1), Y7 - VMOVDQU 448(CX), Y10 - VMOVDQU 480(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - MOVQ 192(R14), BP - VMOVDQU (BP)(R15*1), Y8 - VMOVDQU 512(CX), Y10 - VMOVDQU 544(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 1 to 9 outputs - VMOVDQU (SI), Y12 - ADDQ $0x20, SI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 576(CX), Y10 - VMOVDQU 608(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 640(CX), Y10 - VMOVDQU 672(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 704(CX), Y10 - VMOVDQU 736(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 768(CX), Y10 - VMOVDQU 800(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 832(CX), Y10 - VMOVDQU 864(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 896(CX), Y10 - VMOVDQU 928(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 960(CX), Y10 - VMOVDQU 992(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1024(CX), Y10 - VMOVDQU 1056(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1088(CX), Y10 - VMOVDQU 1120(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 2 to 9 outputs - VMOVDQU (DI), Y12 - ADDQ $0x20, DI - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1152(CX), Y10 - VMOVDQU 1184(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1216(CX), Y10 - VMOVDQU 1248(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1280(CX), Y10 - VMOVDQU 1312(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1344(CX), Y10 - VMOVDQU 1376(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1408(CX), Y10 - VMOVDQU 1440(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 1472(CX), Y10 - VMOVDQU 1504(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 1536(CX), Y10 - VMOVDQU 1568(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 1600(CX), Y10 - VMOVDQU 1632(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 1664(CX), Y10 - VMOVDQU 1696(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 3 to 9 outputs - VMOVDQU (R8), Y12 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 1728(CX), Y10 - VMOVDQU 1760(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 1792(CX), Y10 - VMOVDQU 1824(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 1856(CX), Y10 - VMOVDQU 1888(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 1920(CX), Y10 - VMOVDQU 1952(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 1984(CX), Y10 - VMOVDQU 2016(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2048(CX), Y10 - VMOVDQU 2080(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2112(CX), Y10 - VMOVDQU 2144(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2176(CX), Y10 - VMOVDQU 2208(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2240(CX), Y10 - VMOVDQU 2272(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 4 to 9 outputs - VMOVDQU (R9), Y12 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 2304(CX), Y10 - VMOVDQU 2336(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 2368(CX), Y10 - VMOVDQU 2400(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 2432(CX), Y10 - VMOVDQU 2464(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 2496(CX), Y10 - VMOVDQU 2528(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 2560(CX), Y10 - VMOVDQU 2592(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 2624(CX), Y10 - VMOVDQU 2656(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 2688(CX), Y10 - VMOVDQU 2720(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 2752(CX), Y10 - VMOVDQU 2784(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 2816(CX), Y10 - VMOVDQU 2848(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 5 to 9 outputs - VMOVDQU (R10), Y12 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 2880(CX), Y10 - VMOVDQU 2912(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 2944(CX), Y10 - VMOVDQU 2976(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 3008(CX), Y10 - VMOVDQU 3040(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 3072(CX), Y10 - VMOVDQU 3104(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 3136(CX), Y10 - VMOVDQU 3168(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 3200(CX), Y10 - VMOVDQU 3232(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 3264(CX), Y10 - VMOVDQU 3296(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 3328(CX), Y10 - VMOVDQU 3360(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 3392(CX), Y10 - VMOVDQU 3424(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 6 to 9 outputs - VMOVDQU (R11), Y12 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 3456(CX), Y10 - VMOVDQU 3488(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 3520(CX), Y10 - VMOVDQU 3552(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 3584(CX), Y10 - VMOVDQU 3616(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 3648(CX), Y10 - VMOVDQU 3680(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 3712(CX), Y10 - VMOVDQU 3744(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 3776(CX), Y10 - VMOVDQU 3808(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 3840(CX), Y10 - VMOVDQU 3872(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 3904(CX), Y10 - VMOVDQU 3936(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 3968(CX), Y10 - VMOVDQU 4000(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 7 to 9 outputs - VMOVDQU (R12), Y12 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 4032(CX), Y10 - VMOVDQU 4064(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 4096(CX), Y10 - VMOVDQU 4128(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 4160(CX), Y10 - VMOVDQU 4192(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 4224(CX), Y10 - VMOVDQU 4256(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 4288(CX), Y10 - VMOVDQU 4320(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 4352(CX), Y10 - VMOVDQU 4384(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 4416(CX), Y10 - VMOVDQU 4448(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 4480(CX), Y10 - VMOVDQU 4512(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 4544(CX), Y10 - VMOVDQU 4576(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 8 to 9 outputs - VMOVDQU (R13), Y12 - ADDQ $0x20, R13 - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 4608(CX), Y10 - VMOVDQU 4640(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 4672(CX), Y10 - VMOVDQU 4704(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 4736(CX), Y10 - VMOVDQU 4768(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 4800(CX), Y10 - VMOVDQU 4832(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 4864(CX), Y10 - VMOVDQU 4896(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 4928(CX), Y10 - VMOVDQU 4960(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 4992(CX), Y10 - VMOVDQU 5024(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 5056(CX), Y10 - VMOVDQU 5088(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 5120(CX), Y10 - VMOVDQU 5152(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Load and process 32 bytes from input 9 to 9 outputs - VMOVDQU (DX), Y12 - ADDQ $0x20, DX - VPSRLQ $0x04, Y12, Y13 - VPAND Y9, Y12, Y12 - VPAND Y9, Y13, Y13 - VMOVDQU 5184(CX), Y10 - VMOVDQU 5216(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y0) - VMOVDQU 5248(CX), Y10 - VMOVDQU 5280(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y1) - VMOVDQU 5312(CX), Y10 - VMOVDQU 5344(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y2) - VMOVDQU 5376(CX), Y10 - VMOVDQU 5408(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y3) - VMOVDQU 5440(CX), Y10 - VMOVDQU 5472(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y4) - VMOVDQU 5504(CX), Y10 - VMOVDQU 5536(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y5) - VMOVDQU 5568(CX), Y10 - VMOVDQU 5600(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y6) - VMOVDQU 5632(CX), Y10 - VMOVDQU 5664(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y7) - VMOVDQU 5696(CX), Y10 - VMOVDQU 5728(CX), Y11 - VPSHUFB Y12, Y10, Y10 - VPSHUFB Y13, Y11, Y11 - XOR3WAY( $0x00, Y10, Y11, Y8) - - // Store 9 outputs - MOVQ (R14), BP - VMOVDQU Y0, (BP)(R15*1) - MOVQ 24(R14), BP - VMOVDQU Y1, (BP)(R15*1) - MOVQ 48(R14), BP - VMOVDQU Y2, (BP)(R15*1) - MOVQ 72(R14), BP - VMOVDQU Y3, (BP)(R15*1) - MOVQ 96(R14), BP - VMOVDQU Y4, (BP)(R15*1) - MOVQ 120(R14), BP - VMOVDQU Y5, (BP)(R15*1) - MOVQ 144(R14), BP - VMOVDQU Y6, (BP)(R15*1) - MOVQ 168(R14), BP - VMOVDQU Y7, (BP)(R15*1) - MOVQ 192(R14), BP - VMOVDQU Y8, (BP)(R15*1) - - // Prepare for next loop - ADDQ $0x20, R15 - DECQ AX - JNZ mulAvxTwo_10x9Xor_loop - VZEROUPPER - -mulAvxTwo_10x9Xor_end: - RET - -// func mulAvxTwo_10x10(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x10(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 215 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_10x10_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), R13 - MOVQ 216(DX), DX - MOVQ out_base+48(FP), R14 - MOVQ start+72(FP), R15 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, DX - MOVQ $0x0000000f, BP - MOVQ BP, X10 - VPBROADCASTB X10, Y10 - -mulAvxTwo_10x10_loop: - // Load and process 32 bytes from input 0 to 10 outputs - VMOVDQU (BX), Y13 - ADDQ $0x20, BX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU (CX), Y11 - VMOVDQU 32(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y0 - VMOVDQU 64(CX), Y11 - VMOVDQU 96(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y1 - VMOVDQU 128(CX), Y11 - VMOVDQU 160(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y2 - VMOVDQU 192(CX), Y11 - VMOVDQU 224(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y3 - VMOVDQU 256(CX), Y11 - VMOVDQU 288(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y4 - VMOVDQU 320(CX), Y11 - VMOVDQU 352(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y5 - VMOVDQU 384(CX), Y11 - VMOVDQU 416(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y6 - VMOVDQU 448(CX), Y11 - VMOVDQU 480(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y7 - VMOVDQU 512(CX), Y11 - VMOVDQU 544(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y8 - VMOVDQU 576(CX), Y11 - VMOVDQU 608(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - VPXOR Y11, Y12, Y9 - - // Load and process 32 bytes from input 1 to 10 outputs - VMOVDQU (SI), Y13 - ADDQ $0x20, SI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 640(CX), Y11 - VMOVDQU 672(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 704(CX), Y11 - VMOVDQU 736(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 768(CX), Y11 - VMOVDQU 800(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 832(CX), Y11 - VMOVDQU 864(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 896(CX), Y11 - VMOVDQU 928(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 960(CX), Y11 - VMOVDQU 992(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1024(CX), Y11 - VMOVDQU 1056(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1088(CX), Y11 - VMOVDQU 1120(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1152(CX), Y11 - VMOVDQU 1184(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1216(CX), Y11 - VMOVDQU 1248(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 2 to 10 outputs - VMOVDQU (DI), Y13 - ADDQ $0x20, DI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1280(CX), Y11 - VMOVDQU 1312(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1344(CX), Y11 - VMOVDQU 1376(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 1408(CX), Y11 - VMOVDQU 1440(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 1472(CX), Y11 - VMOVDQU 1504(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 1536(CX), Y11 - VMOVDQU 1568(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 1600(CX), Y11 - VMOVDQU 1632(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1664(CX), Y11 - VMOVDQU 1696(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1728(CX), Y11 - VMOVDQU 1760(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1792(CX), Y11 - VMOVDQU 1824(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1856(CX), Y11 - VMOVDQU 1888(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 3 to 10 outputs - VMOVDQU (R8), Y13 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1920(CX), Y11 - VMOVDQU 1952(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1984(CX), Y11 - VMOVDQU 2016(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2048(CX), Y11 - VMOVDQU 2080(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2112(CX), Y11 - VMOVDQU 2144(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2176(CX), Y11 - VMOVDQU 2208(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2240(CX), Y11 - VMOVDQU 2272(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2304(CX), Y11 - VMOVDQU 2336(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 2368(CX), Y11 - VMOVDQU 2400(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 2432(CX), Y11 - VMOVDQU 2464(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 2496(CX), Y11 - VMOVDQU 2528(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 4 to 10 outputs - VMOVDQU (R9), Y13 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 2560(CX), Y11 - VMOVDQU 2592(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 2624(CX), Y11 - VMOVDQU 2656(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2688(CX), Y11 - VMOVDQU 2720(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2752(CX), Y11 - VMOVDQU 2784(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2816(CX), Y11 - VMOVDQU 2848(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2880(CX), Y11 - VMOVDQU 2912(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2944(CX), Y11 - VMOVDQU 2976(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 3008(CX), Y11 - VMOVDQU 3040(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 3072(CX), Y11 - VMOVDQU 3104(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 3136(CX), Y11 - VMOVDQU 3168(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 5 to 10 outputs - VMOVDQU (R10), Y13 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 3200(CX), Y11 - VMOVDQU 3232(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 3264(CX), Y11 - VMOVDQU 3296(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 3328(CX), Y11 - VMOVDQU 3360(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 3392(CX), Y11 - VMOVDQU 3424(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 3456(CX), Y11 - VMOVDQU 3488(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 3520(CX), Y11 - VMOVDQU 3552(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 3584(CX), Y11 - VMOVDQU 3616(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 3648(CX), Y11 - VMOVDQU 3680(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 3712(CX), Y11 - VMOVDQU 3744(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 3776(CX), Y11 - VMOVDQU 3808(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 6 to 10 outputs - VMOVDQU (R11), Y13 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 3840(CX), Y11 - VMOVDQU 3872(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 3904(CX), Y11 - VMOVDQU 3936(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 3968(CX), Y11 - VMOVDQU 4000(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 4032(CX), Y11 - VMOVDQU 4064(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 4096(CX), Y11 - VMOVDQU 4128(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 4160(CX), Y11 - VMOVDQU 4192(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 4224(CX), Y11 - VMOVDQU 4256(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 4288(CX), Y11 - VMOVDQU 4320(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 4352(CX), Y11 - VMOVDQU 4384(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 4416(CX), Y11 - VMOVDQU 4448(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 7 to 10 outputs - VMOVDQU (R12), Y13 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 4480(CX), Y11 - VMOVDQU 4512(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 4544(CX), Y11 - VMOVDQU 4576(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 4608(CX), Y11 - VMOVDQU 4640(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 4672(CX), Y11 - VMOVDQU 4704(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 4736(CX), Y11 - VMOVDQU 4768(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 4800(CX), Y11 - VMOVDQU 4832(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 4864(CX), Y11 - VMOVDQU 4896(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 4928(CX), Y11 - VMOVDQU 4960(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 4992(CX), Y11 - VMOVDQU 5024(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 5056(CX), Y11 - VMOVDQU 5088(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 8 to 10 outputs - VMOVDQU (R13), Y13 - ADDQ $0x20, R13 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 5120(CX), Y11 - VMOVDQU 5152(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 5184(CX), Y11 - VMOVDQU 5216(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 5248(CX), Y11 - VMOVDQU 5280(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 5312(CX), Y11 - VMOVDQU 5344(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 5376(CX), Y11 - VMOVDQU 5408(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 5440(CX), Y11 - VMOVDQU 5472(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 5504(CX), Y11 - VMOVDQU 5536(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 5568(CX), Y11 - VMOVDQU 5600(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 5632(CX), Y11 - VMOVDQU 5664(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 5696(CX), Y11 - VMOVDQU 5728(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 9 to 10 outputs - VMOVDQU (DX), Y13 - ADDQ $0x20, DX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 5760(CX), Y11 - VMOVDQU 5792(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 5824(CX), Y11 - VMOVDQU 5856(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 5888(CX), Y11 - VMOVDQU 5920(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 5952(CX), Y11 - VMOVDQU 5984(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 6016(CX), Y11 - VMOVDQU 6048(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 6080(CX), Y11 - VMOVDQU 6112(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 6144(CX), Y11 - VMOVDQU 6176(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 6208(CX), Y11 - VMOVDQU 6240(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 6272(CX), Y11 - VMOVDQU 6304(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 6336(CX), Y11 - VMOVDQU 6368(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Store 10 outputs - MOVQ (R14), BP - VMOVDQU Y0, (BP)(R15*1) - MOVQ 24(R14), BP - VMOVDQU Y1, (BP)(R15*1) - MOVQ 48(R14), BP - VMOVDQU Y2, (BP)(R15*1) - MOVQ 72(R14), BP - VMOVDQU Y3, (BP)(R15*1) - MOVQ 96(R14), BP - VMOVDQU Y4, (BP)(R15*1) - MOVQ 120(R14), BP - VMOVDQU Y5, (BP)(R15*1) - MOVQ 144(R14), BP - VMOVDQU Y6, (BP)(R15*1) - MOVQ 168(R14), BP - VMOVDQU Y7, (BP)(R15*1) - MOVQ 192(R14), BP - VMOVDQU Y8, (BP)(R15*1) - MOVQ 216(R14), BP - VMOVDQU Y9, (BP)(R15*1) - - // Prepare for next loop - ADDQ $0x20, R15 - DECQ AX - JNZ mulAvxTwo_10x10_loop - VZEROUPPER - -mulAvxTwo_10x10_end: - RET - -// func mulAvxTwo_10x10Xor(matrix []byte, in [][]byte, out [][]byte, start int, n int) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·mulAvxTwo_10x10Xor(SB), NOSPLIT, $8-88 - // Loading no tables to registers - // Destination kept on stack - // Full registers estimated 215 YMM used - MOVQ n+80(FP), AX - MOVQ matrix_base+0(FP), CX - SHRQ $0x05, AX - TESTQ AX, AX - JZ mulAvxTwo_10x10Xor_end - MOVQ in_base+24(FP), DX - MOVQ (DX), BX - MOVQ 24(DX), SI - MOVQ 48(DX), DI - MOVQ 72(DX), R8 - MOVQ 96(DX), R9 - MOVQ 120(DX), R10 - MOVQ 144(DX), R11 - MOVQ 168(DX), R12 - MOVQ 192(DX), R13 - MOVQ 216(DX), DX - MOVQ out_base+48(FP), R14 - MOVQ start+72(FP), R15 - - // Add start offset to input - ADDQ R15, BX - ADDQ R15, SI - ADDQ R15, DI - ADDQ R15, R8 - ADDQ R15, R9 - ADDQ R15, R10 - ADDQ R15, R11 - ADDQ R15, R12 - ADDQ R15, R13 - ADDQ R15, DX - MOVQ $0x0000000f, BP - MOVQ BP, X10 - VPBROADCASTB X10, Y10 - -mulAvxTwo_10x10Xor_loop: - // Load and process 32 bytes from input 0 to 10 outputs - VMOVDQU (BX), Y13 - ADDQ $0x20, BX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - MOVQ (R14), BP - VMOVDQU (BP)(R15*1), Y0 - VMOVDQU (CX), Y11 - VMOVDQU 32(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - MOVQ 24(R14), BP - VMOVDQU (BP)(R15*1), Y1 - VMOVDQU 64(CX), Y11 - VMOVDQU 96(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - MOVQ 48(R14), BP - VMOVDQU (BP)(R15*1), Y2 - VMOVDQU 128(CX), Y11 - VMOVDQU 160(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - MOVQ 72(R14), BP - VMOVDQU (BP)(R15*1), Y3 - VMOVDQU 192(CX), Y11 - VMOVDQU 224(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - MOVQ 96(R14), BP - VMOVDQU (BP)(R15*1), Y4 - VMOVDQU 256(CX), Y11 - VMOVDQU 288(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - MOVQ 120(R14), BP - VMOVDQU (BP)(R15*1), Y5 - VMOVDQU 320(CX), Y11 - VMOVDQU 352(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - MOVQ 144(R14), BP - VMOVDQU (BP)(R15*1), Y6 - VMOVDQU 384(CX), Y11 - VMOVDQU 416(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - MOVQ 168(R14), BP - VMOVDQU (BP)(R15*1), Y7 - VMOVDQU 448(CX), Y11 - VMOVDQU 480(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - MOVQ 192(R14), BP - VMOVDQU (BP)(R15*1), Y8 - VMOVDQU 512(CX), Y11 - VMOVDQU 544(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - MOVQ 216(R14), BP - VMOVDQU (BP)(R15*1), Y9 - VMOVDQU 576(CX), Y11 - VMOVDQU 608(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 1 to 10 outputs - VMOVDQU (SI), Y13 - ADDQ $0x20, SI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 640(CX), Y11 - VMOVDQU 672(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 704(CX), Y11 - VMOVDQU 736(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 768(CX), Y11 - VMOVDQU 800(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 832(CX), Y11 - VMOVDQU 864(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 896(CX), Y11 - VMOVDQU 928(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 960(CX), Y11 - VMOVDQU 992(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1024(CX), Y11 - VMOVDQU 1056(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1088(CX), Y11 - VMOVDQU 1120(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1152(CX), Y11 - VMOVDQU 1184(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1216(CX), Y11 - VMOVDQU 1248(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 2 to 10 outputs - VMOVDQU (DI), Y13 - ADDQ $0x20, DI - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1280(CX), Y11 - VMOVDQU 1312(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1344(CX), Y11 - VMOVDQU 1376(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 1408(CX), Y11 - VMOVDQU 1440(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 1472(CX), Y11 - VMOVDQU 1504(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 1536(CX), Y11 - VMOVDQU 1568(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 1600(CX), Y11 - VMOVDQU 1632(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 1664(CX), Y11 - VMOVDQU 1696(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 1728(CX), Y11 - VMOVDQU 1760(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 1792(CX), Y11 - VMOVDQU 1824(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 1856(CX), Y11 - VMOVDQU 1888(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 3 to 10 outputs - VMOVDQU (R8), Y13 - ADDQ $0x20, R8 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 1920(CX), Y11 - VMOVDQU 1952(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 1984(CX), Y11 - VMOVDQU 2016(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2048(CX), Y11 - VMOVDQU 2080(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2112(CX), Y11 - VMOVDQU 2144(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2176(CX), Y11 - VMOVDQU 2208(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2240(CX), Y11 - VMOVDQU 2272(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2304(CX), Y11 - VMOVDQU 2336(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 2368(CX), Y11 - VMOVDQU 2400(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 2432(CX), Y11 - VMOVDQU 2464(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 2496(CX), Y11 - VMOVDQU 2528(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 4 to 10 outputs - VMOVDQU (R9), Y13 - ADDQ $0x20, R9 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 2560(CX), Y11 - VMOVDQU 2592(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 2624(CX), Y11 - VMOVDQU 2656(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 2688(CX), Y11 - VMOVDQU 2720(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 2752(CX), Y11 - VMOVDQU 2784(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 2816(CX), Y11 - VMOVDQU 2848(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 2880(CX), Y11 - VMOVDQU 2912(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 2944(CX), Y11 - VMOVDQU 2976(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 3008(CX), Y11 - VMOVDQU 3040(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 3072(CX), Y11 - VMOVDQU 3104(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 3136(CX), Y11 - VMOVDQU 3168(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 5 to 10 outputs - VMOVDQU (R10), Y13 - ADDQ $0x20, R10 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 3200(CX), Y11 - VMOVDQU 3232(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 3264(CX), Y11 - VMOVDQU 3296(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 3328(CX), Y11 - VMOVDQU 3360(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 3392(CX), Y11 - VMOVDQU 3424(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 3456(CX), Y11 - VMOVDQU 3488(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 3520(CX), Y11 - VMOVDQU 3552(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 3584(CX), Y11 - VMOVDQU 3616(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 3648(CX), Y11 - VMOVDQU 3680(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 3712(CX), Y11 - VMOVDQU 3744(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 3776(CX), Y11 - VMOVDQU 3808(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 6 to 10 outputs - VMOVDQU (R11), Y13 - ADDQ $0x20, R11 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 3840(CX), Y11 - VMOVDQU 3872(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 3904(CX), Y11 - VMOVDQU 3936(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 3968(CX), Y11 - VMOVDQU 4000(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 4032(CX), Y11 - VMOVDQU 4064(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 4096(CX), Y11 - VMOVDQU 4128(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 4160(CX), Y11 - VMOVDQU 4192(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 4224(CX), Y11 - VMOVDQU 4256(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 4288(CX), Y11 - VMOVDQU 4320(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 4352(CX), Y11 - VMOVDQU 4384(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 4416(CX), Y11 - VMOVDQU 4448(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 7 to 10 outputs - VMOVDQU (R12), Y13 - ADDQ $0x20, R12 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 4480(CX), Y11 - VMOVDQU 4512(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 4544(CX), Y11 - VMOVDQU 4576(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 4608(CX), Y11 - VMOVDQU 4640(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 4672(CX), Y11 - VMOVDQU 4704(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 4736(CX), Y11 - VMOVDQU 4768(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 4800(CX), Y11 - VMOVDQU 4832(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 4864(CX), Y11 - VMOVDQU 4896(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 4928(CX), Y11 - VMOVDQU 4960(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 4992(CX), Y11 - VMOVDQU 5024(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 5056(CX), Y11 - VMOVDQU 5088(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 8 to 10 outputs - VMOVDQU (R13), Y13 - ADDQ $0x20, R13 - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 5120(CX), Y11 - VMOVDQU 5152(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 5184(CX), Y11 - VMOVDQU 5216(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 5248(CX), Y11 - VMOVDQU 5280(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 5312(CX), Y11 - VMOVDQU 5344(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 5376(CX), Y11 - VMOVDQU 5408(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 5440(CX), Y11 - VMOVDQU 5472(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 5504(CX), Y11 - VMOVDQU 5536(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 5568(CX), Y11 - VMOVDQU 5600(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 5632(CX), Y11 - VMOVDQU 5664(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 5696(CX), Y11 - VMOVDQU 5728(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Load and process 32 bytes from input 9 to 10 outputs - VMOVDQU (DX), Y13 - ADDQ $0x20, DX - VPSRLQ $0x04, Y13, Y14 - VPAND Y10, Y13, Y13 - VPAND Y10, Y14, Y14 - VMOVDQU 5760(CX), Y11 - VMOVDQU 5792(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y0) - VMOVDQU 5824(CX), Y11 - VMOVDQU 5856(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y1) - VMOVDQU 5888(CX), Y11 - VMOVDQU 5920(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y2) - VMOVDQU 5952(CX), Y11 - VMOVDQU 5984(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y3) - VMOVDQU 6016(CX), Y11 - VMOVDQU 6048(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y4) - VMOVDQU 6080(CX), Y11 - VMOVDQU 6112(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y5) - VMOVDQU 6144(CX), Y11 - VMOVDQU 6176(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y6) - VMOVDQU 6208(CX), Y11 - VMOVDQU 6240(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y7) - VMOVDQU 6272(CX), Y11 - VMOVDQU 6304(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y8) - VMOVDQU 6336(CX), Y11 - VMOVDQU 6368(CX), Y12 - VPSHUFB Y13, Y11, Y11 - VPSHUFB Y14, Y12, Y12 - XOR3WAY( $0x00, Y11, Y12, Y9) - - // Store 10 outputs - MOVQ (R14), BP - VMOVDQU Y0, (BP)(R15*1) - MOVQ 24(R14), BP - VMOVDQU Y1, (BP)(R15*1) - MOVQ 48(R14), BP - VMOVDQU Y2, (BP)(R15*1) - MOVQ 72(R14), BP - VMOVDQU Y3, (BP)(R15*1) - MOVQ 96(R14), BP - VMOVDQU Y4, (BP)(R15*1) - MOVQ 120(R14), BP - VMOVDQU Y5, (BP)(R15*1) - MOVQ 144(R14), BP - VMOVDQU Y6, (BP)(R15*1) - MOVQ 168(R14), BP - VMOVDQU Y7, (BP)(R15*1) - MOVQ 192(R14), BP - VMOVDQU Y8, (BP)(R15*1) - MOVQ 216(R14), BP - VMOVDQU Y9, (BP)(R15*1) - - // Prepare for next loop - ADDQ $0x20, R15 - DECQ AX - JNZ mulAvxTwo_10x10Xor_loop - VZEROUPPER - -mulAvxTwo_10x10Xor_end: - RET - -// func ifftDIT2_avx2(x []byte, y []byte, table *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·ifftDIT2_avx2(SB), NOSPLIT, $0-56 - MOVQ table+48(FP), AX - VBROADCASTI128 (AX), Y0 - VBROADCASTI128 64(AX), Y1 - VBROADCASTI128 16(AX), Y2 - VBROADCASTI128 80(AX), Y3 - VBROADCASTI128 32(AX), Y4 - VBROADCASTI128 96(AX), Y5 - VBROADCASTI128 48(AX), Y6 - VBROADCASTI128 112(AX), Y7 - MOVQ x_len+8(FP), AX - MOVQ x_base+0(FP), CX - MOVQ y_base+24(FP), DX - MOVQ $0x0000000f, BX - MOVQ BX, X8 - VPBROADCASTB X8, Y8 - -loop: - VMOVDQU (CX), Y9 - VMOVDQU 32(CX), Y10 - VMOVDQU (DX), Y11 - VMOVDQU 32(DX), Y12 - VPXOR Y11, Y9, Y11 - VPXOR Y12, Y10, Y12 - VMOVDQU Y11, (DX) - VMOVDQU Y12, 32(DX) - VPSRLQ $0x04, Y11, Y13 - VPAND Y8, Y11, Y11 - VPAND Y8, Y13, Y13 - VPSHUFB Y11, Y0, Y14 - VPSHUFB Y11, Y1, Y11 - VPSHUFB Y13, Y2, Y15 - VPSHUFB Y13, Y3, Y13 - VPXOR Y14, Y15, Y14 - VPXOR Y11, Y13, Y11 - VPAND Y12, Y8, Y13 - VPSRLQ $0x04, Y12, Y12 - VPAND Y8, Y12, Y12 - VPSHUFB Y13, Y4, Y15 - VPSHUFB Y13, Y5, Y13 - VPXOR Y14, Y15, Y14 - VPXOR Y11, Y13, Y11 - VPSHUFB Y12, Y6, Y15 - VPSHUFB Y12, Y7, Y13 - XOR3WAY( $0x00, Y14, Y15, Y9) - XOR3WAY( $0x00, Y11, Y13, Y10) - VMOVDQU Y9, (CX) - VMOVDQU Y10, 32(CX) - ADDQ $0x40, CX - ADDQ $0x40, DX - SUBQ $0x40, AX - JNZ loop - VZEROUPPER - RET - -// func fftDIT2_avx2(x []byte, y []byte, table *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·fftDIT2_avx2(SB), NOSPLIT, $0-56 - MOVQ table+48(FP), AX - VBROADCASTI128 (AX), Y0 - VBROADCASTI128 64(AX), Y1 - VBROADCASTI128 16(AX), Y2 - VBROADCASTI128 80(AX), Y3 - VBROADCASTI128 32(AX), Y4 - VBROADCASTI128 96(AX), Y5 - VBROADCASTI128 48(AX), Y6 - VBROADCASTI128 112(AX), Y7 - MOVQ x_len+8(FP), AX - MOVQ x_base+0(FP), CX - MOVQ y_base+24(FP), DX - MOVQ $0x0000000f, BX - MOVQ BX, X8 - VPBROADCASTB X8, Y8 - -loop: - VMOVDQU (CX), Y9 - VMOVDQU 32(CX), Y10 - VMOVDQU (DX), Y11 - VMOVDQU 32(DX), Y12 - VPSRLQ $0x04, Y11, Y13 - VPAND Y8, Y11, Y11 - VPAND Y8, Y13, Y13 - VPSHUFB Y11, Y0, Y14 - VPSHUFB Y11, Y1, Y11 - VPSHUFB Y13, Y2, Y15 - VPSHUFB Y13, Y3, Y13 - VPXOR Y14, Y15, Y14 - VPXOR Y11, Y13, Y11 - VPAND Y12, Y8, Y13 - VPSRLQ $0x04, Y12, Y12 - VPAND Y8, Y12, Y12 - VPSHUFB Y13, Y4, Y15 - VPSHUFB Y13, Y5, Y13 - VPXOR Y14, Y15, Y14 - VPXOR Y11, Y13, Y11 - VPSHUFB Y12, Y6, Y15 - VPSHUFB Y12, Y7, Y13 - XOR3WAY( $0x00, Y14, Y15, Y9) - XOR3WAY( $0x00, Y11, Y13, Y10) - VMOVDQU Y9, (CX) - VMOVDQU Y10, 32(CX) - VMOVDQU (DX), Y11 - VMOVDQU 32(DX), Y12 - VPXOR Y11, Y9, Y11 - VPXOR Y12, Y10, Y12 - VMOVDQU Y11, (DX) - VMOVDQU Y12, 32(DX) - ADDQ $0x40, CX - ADDQ $0x40, DX - SUBQ $0x40, AX - JNZ loop - VZEROUPPER - RET - -// func mulgf16_avx2(x []byte, y []byte, table *[128]uint8) -// Requires: AVX, AVX2, SSE2 -TEXT ·mulgf16_avx2(SB), NOSPLIT, $0-56 - MOVQ table+48(FP), AX - VBROADCASTI128 (AX), Y0 - VBROADCASTI128 64(AX), Y1 - VBROADCASTI128 16(AX), Y2 - VBROADCASTI128 80(AX), Y3 - VBROADCASTI128 32(AX), Y4 - VBROADCASTI128 96(AX), Y5 - VBROADCASTI128 48(AX), Y6 - VBROADCASTI128 112(AX), Y7 - MOVQ x_len+8(FP), AX - MOVQ x_base+0(FP), CX - MOVQ y_base+24(FP), DX - MOVQ $0x0000000f, BX - MOVQ BX, X8 - VPBROADCASTB X8, Y8 - -loop: - VMOVDQU (DX), Y9 - VMOVDQU 32(DX), Y10 - VPSRLQ $0x04, Y9, Y11 - VPAND Y8, Y9, Y9 - VPAND Y8, Y11, Y11 - VPSHUFB Y9, Y0, Y12 - VPSHUFB Y9, Y1, Y9 - VPSHUFB Y11, Y2, Y13 - VPSHUFB Y11, Y3, Y11 - VPXOR Y12, Y13, Y12 - VPXOR Y9, Y11, Y9 - VPAND Y10, Y8, Y11 - VPSRLQ $0x04, Y10, Y10 - VPAND Y8, Y10, Y10 - VPSHUFB Y11, Y4, Y13 - VPSHUFB Y11, Y5, Y11 - VPXOR Y12, Y13, Y12 - VPXOR Y9, Y11, Y9 - VPSHUFB Y10, Y6, Y13 - VPSHUFB Y10, Y7, Y11 - VPXOR Y12, Y13, Y12 - VPXOR Y9, Y11, Y9 - VMOVDQU Y12, (CX) - VMOVDQU Y9, 32(CX) - ADDQ $0x40, CX - ADDQ $0x40, DX - SUBQ $0x40, AX - JNZ loop - VZEROUPPER - RET - -// func ifftDIT4_avx512_0(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·ifftDIT4_avx512_0(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), CX - MOVQ table02+48(FP), DX - VBROADCASTI128 (DX), Y1 - VBROADCASTI128 64(DX), Y0 - VMOVAPS Z1, Z16 - VMOVAPS Z0, Z17 - VBROADCASTI128 16(DX), Y1 - VBROADCASTI128 80(DX), Y0 - VMOVAPS Z1, Z18 - VMOVAPS Z0, Z19 - VBROADCASTI128 32(DX), Y1 - VBROADCASTI128 96(DX), Y0 - VMOVAPS Z1, Z20 - VMOVAPS Z0, Z21 - VBROADCASTI128 48(DX), Y1 - VBROADCASTI128 112(DX), Y0 - VMOVAPS Z1, Z22 - VMOVAPS Z0, Z23 - VBROADCASTI128 (AX), Y1 - VBROADCASTI128 64(AX), Y0 - VMOVAPS Z1, Z24 - VMOVAPS Z0, Z25 - VBROADCASTI128 16(AX), Y1 - VBROADCASTI128 80(AX), Y0 - VMOVAPS Z1, Z26 - VMOVAPS Z0, Z27 - VBROADCASTI128 32(AX), Y1 - VBROADCASTI128 96(AX), Y0 - VMOVAPS Z1, Z28 - VMOVAPS Z0, Z29 - VBROADCASTI128 48(AX), Y1 - VBROADCASTI128 112(AX), Y0 - VMOVAPS Z1, Z30 - VMOVAPS Z0, Z31 - MOVQ $0x0000000f, AX - MOVQ AX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), AX - MOVQ work_base+0(FP), DX - MOVQ 8(DX), BX - XORQ SI, SI - MOVQ (DX)(SI*1), DI - ADDQ AX, SI - MOVQ (DX)(SI*1), R8 - ADDQ AX, SI - MOVQ (DX)(SI*1), R9 - ADDQ AX, SI - MOVQ (DX)(SI*1), AX - -loop: - VMOVDQU (DI), Y1 - VMOVDQU 32(DI), Y2 - VMOVDQU (R8), Y3 - VMOVDQU 32(R8), Y4 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VPSRLQ $0x04, Y3, Y6 - VPAND Y0, Y3, Y5 - VPAND Y0, Y6, Y6 - VPSHUFB Y5, Y24, Y7 - VPSHUFB Y5, Y25, Y5 - VPSHUFB Y6, Y26, Y8 - VPSHUFB Y6, Y27, Y6 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y6, Y5 - VPAND Y4, Y0, Y6 - VPSRLQ $0x04, Y4, Y8 - VPAND Y0, Y8, Y8 - VPSHUFB Y6, Y28, Y9 - VPSHUFB Y6, Y29, Y6 - VPXOR Y7, Y9, Y7 - VPXOR Y5, Y6, Y5 - VPSHUFB Y8, Y30, Y9 - VPSHUFB Y8, Y31, Y6 - VPTERNLOGD $0x96, Y7, Y9, Y1 - VPTERNLOGD $0x96, Y5, Y6, Y2 - VMOVDQU (R9), Y5 - VMOVDQU 32(R9), Y6 - VMOVDQU (AX), Y7 - VMOVDQU 32(AX), Y8 - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (CX), Y11 - VBROADCASTI128 64(CX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(CX), Y12 - VBROADCASTI128 80(CX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(CX), Y13 - VBROADCASTI128 96(CX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(CX), Y13 - VBROADCASTI128 112(CX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y5 - VPTERNLOGD $0x96, Y9, Y10, Y6 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VPSRLQ $0x04, Y5, Y10 - VPAND Y0, Y5, Y9 - VPAND Y0, Y10, Y10 - VPSHUFB Y9, Y16, Y11 - VPSHUFB Y9, Y17, Y9 - VPSHUFB Y10, Y18, Y12 - VPSHUFB Y10, Y19, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y6, Y0, Y10 - VPSRLQ $0x04, Y6, Y12 - VPAND Y0, Y12, Y12 - VPSHUFB Y10, Y20, Y13 - VPSHUFB Y10, Y21, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VPSHUFB Y12, Y22, Y13 - VPSHUFB Y12, Y23, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y1 - VPTERNLOGD $0x96, Y9, Y10, Y2 - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VPSHUFB Y9, Y16, Y11 - VPSHUFB Y9, Y17, Y9 - VPSHUFB Y10, Y18, Y12 - VPSHUFB Y10, Y19, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VPSHUFB Y10, Y20, Y13 - VPSHUFB Y10, Y21, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VPSHUFB Y12, Y22, Y13 - VPSHUFB Y12, Y23, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y3 - VPTERNLOGD $0x96, Y9, Y10, Y4 - VMOVDQU Y1, (DI) - VMOVDQU Y2, 32(DI) - ADDQ $0x40, DI - VMOVDQU Y3, (R8) - VMOVDQU Y4, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y5, (R9) - VMOVDQU Y6, 32(R9) - ADDQ $0x40, R9 - VMOVDQU Y7, (AX) - VMOVDQU Y8, 32(AX) - ADDQ $0x40, AX - SUBQ $0x40, BX - JNZ loop - VZEROUPPER - RET - -// func fftDIT4_avx512_0(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·fftDIT4_avx512_0(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), CX - MOVQ table02+48(FP), DX - VBROADCASTI128 (DX), Y1 - VBROADCASTI128 64(DX), Y0 - VMOVAPS Z1, Z16 - VMOVAPS Z0, Z17 - VBROADCASTI128 16(DX), Y1 - VBROADCASTI128 80(DX), Y0 - VMOVAPS Z1, Z18 - VMOVAPS Z0, Z19 - VBROADCASTI128 32(DX), Y1 - VBROADCASTI128 96(DX), Y0 - VMOVAPS Z1, Z20 - VMOVAPS Z0, Z21 - VBROADCASTI128 48(DX), Y1 - VBROADCASTI128 112(DX), Y0 - VMOVAPS Z1, Z22 - VMOVAPS Z0, Z23 - VBROADCASTI128 (AX), Y1 - VBROADCASTI128 64(AX), Y0 - VMOVAPS Z1, Z24 - VMOVAPS Z0, Z25 - VBROADCASTI128 16(AX), Y1 - VBROADCASTI128 80(AX), Y0 - VMOVAPS Z1, Z26 - VMOVAPS Z0, Z27 - VBROADCASTI128 32(AX), Y1 - VBROADCASTI128 96(AX), Y0 - VMOVAPS Z1, Z28 - VMOVAPS Z0, Z29 - VBROADCASTI128 48(AX), Y1 - VBROADCASTI128 112(AX), Y0 - VMOVAPS Z1, Z30 - VMOVAPS Z0, Z31 - MOVQ $0x0000000f, AX - MOVQ AX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), AX - MOVQ work_base+0(FP), DX - MOVQ 8(DX), BX - XORQ SI, SI - MOVQ (DX)(SI*1), DI - ADDQ AX, SI - MOVQ (DX)(SI*1), R8 - ADDQ AX, SI - MOVQ (DX)(SI*1), R9 - ADDQ AX, SI - MOVQ (DX)(SI*1), AX - -loop: - VMOVDQU (DI), Y1 - VMOVDQU 32(DI), Y2 - VMOVDQU (R9), Y5 - VMOVDQU 32(R9), Y6 - VMOVDQU (R8), Y3 - VMOVDQU 32(R8), Y4 - VMOVDQU (AX), Y7 - VMOVDQU 32(AX), Y8 - VPSRLQ $0x04, Y5, Y10 - VPAND Y0, Y5, Y9 - VPAND Y0, Y10, Y10 - VPSHUFB Y9, Y16, Y11 - VPSHUFB Y9, Y17, Y9 - VPSHUFB Y10, Y18, Y12 - VPSHUFB Y10, Y19, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y6, Y0, Y10 - VPSRLQ $0x04, Y6, Y12 - VPAND Y0, Y12, Y12 - VPSHUFB Y10, Y20, Y13 - VPSHUFB Y10, Y21, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VPSHUFB Y12, Y22, Y13 - VPSHUFB Y12, Y23, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y1 - VPTERNLOGD $0x96, Y9, Y10, Y2 - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VPSHUFB Y9, Y16, Y11 - VPSHUFB Y9, Y17, Y9 - VPSHUFB Y10, Y18, Y12 - VPSHUFB Y10, Y19, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VPSHUFB Y10, Y20, Y13 - VPSHUFB Y10, Y21, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VPSHUFB Y12, Y22, Y13 - VPSHUFB Y12, Y23, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y3 - VPTERNLOGD $0x96, Y9, Y10, Y4 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VPSRLQ $0x04, Y3, Y10 - VPAND Y0, Y3, Y9 - VPAND Y0, Y10, Y10 - VPSHUFB Y9, Y24, Y11 - VPSHUFB Y9, Y25, Y9 - VPSHUFB Y10, Y26, Y12 - VPSHUFB Y10, Y27, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y4, Y0, Y10 - VPSRLQ $0x04, Y4, Y12 - VPAND Y0, Y12, Y12 - VPSHUFB Y10, Y28, Y13 - VPSHUFB Y10, Y29, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VPSHUFB Y12, Y30, Y13 - VPSHUFB Y12, Y31, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y1 - VPTERNLOGD $0x96, Y9, Y10, Y2 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VMOVDQU Y1, (DI) - VMOVDQU Y2, 32(DI) - ADDQ $0x40, DI - VMOVDQU Y3, (R8) - VMOVDQU Y4, 32(R8) - ADDQ $0x40, R8 - VPSRLQ $0x04, Y7, Y2 - VPAND Y0, Y7, Y1 - VPAND Y0, Y2, Y2 - VBROADCASTI128 (CX), Y3 - VBROADCASTI128 64(CX), Y4 - VPSHUFB Y1, Y3, Y3 - VPSHUFB Y1, Y4, Y1 - VBROADCASTI128 16(CX), Y4 - VBROADCASTI128 80(CX), Y9 - VPSHUFB Y2, Y4, Y4 - VPSHUFB Y2, Y9, Y2 - VPXOR Y3, Y4, Y3 - VPXOR Y1, Y2, Y1 - VPAND Y8, Y0, Y2 - VPSRLQ $0x04, Y8, Y4 - VPAND Y0, Y4, Y4 - VBROADCASTI128 32(CX), Y9 - VBROADCASTI128 96(CX), Y10 - VPSHUFB Y2, Y9, Y9 - VPSHUFB Y2, Y10, Y2 - VPXOR Y3, Y9, Y3 - VPXOR Y1, Y2, Y1 - VBROADCASTI128 48(CX), Y9 - VBROADCASTI128 112(CX), Y2 - VPSHUFB Y4, Y9, Y9 - VPSHUFB Y4, Y2, Y2 - VPTERNLOGD $0x96, Y3, Y9, Y5 - VPTERNLOGD $0x96, Y1, Y2, Y6 - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VMOVDQU Y5, (R9) - VMOVDQU Y6, 32(R9) - ADDQ $0x40, R9 - VMOVDQU Y7, (AX) - VMOVDQU Y8, 32(AX) - ADDQ $0x40, AX - SUBQ $0x40, BX - JNZ loop - VZEROUPPER - RET - -// func ifftDIT4_avx512_1(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·ifftDIT4_avx512_1(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), AX - MOVQ table02+48(FP), CX - VBROADCASTI128 (CX), Y1 - VBROADCASTI128 64(CX), Y0 - VMOVAPS Z1, Z16 - VMOVAPS Z0, Z17 - VBROADCASTI128 16(CX), Y1 - VBROADCASTI128 80(CX), Y0 - VMOVAPS Z1, Z18 - VMOVAPS Z0, Z19 - VBROADCASTI128 32(CX), Y1 - VBROADCASTI128 96(CX), Y0 - VMOVAPS Z1, Z20 - VMOVAPS Z0, Z21 - VBROADCASTI128 48(CX), Y1 - VBROADCASTI128 112(CX), Y0 - VMOVAPS Z1, Z22 - VMOVAPS Z0, Z23 - VBROADCASTI128 (AX), Y1 - VBROADCASTI128 64(AX), Y0 - VMOVAPS Z1, Z24 - VMOVAPS Z0, Z25 - VBROADCASTI128 16(AX), Y1 - VBROADCASTI128 80(AX), Y0 - VMOVAPS Z1, Z26 - VMOVAPS Z0, Z27 - VBROADCASTI128 32(AX), Y1 - VBROADCASTI128 96(AX), Y0 - VMOVAPS Z1, Z28 - VMOVAPS Z0, Z29 - VBROADCASTI128 48(AX), Y1 - VBROADCASTI128 112(AX), Y0 - VMOVAPS Z1, Z30 - VMOVAPS Z0, Z31 - MOVQ $0x0000000f, AX - MOVQ AX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), AX - MOVQ work_base+0(FP), CX - MOVQ 8(CX), DX - XORQ BX, BX - MOVQ (CX)(BX*1), SI - ADDQ AX, BX - MOVQ (CX)(BX*1), DI - ADDQ AX, BX - MOVQ (CX)(BX*1), R8 - ADDQ AX, BX - MOVQ (CX)(BX*1), AX - -loop: - VMOVDQU (SI), Y1 - VMOVDQU 32(SI), Y2 - VMOVDQU (DI), Y3 - VMOVDQU 32(DI), Y4 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VMOVDQU (R8), Y5 - VMOVDQU 32(R8), Y6 - VMOVDQU (AX), Y7 - VMOVDQU 32(AX), Y8 - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VPSHUFB Y9, Y24, Y11 - VPSHUFB Y9, Y25, Y9 - VPSHUFB Y10, Y26, Y12 - VPSHUFB Y10, Y27, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VPSHUFB Y10, Y28, Y13 - VPSHUFB Y10, Y29, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VPSHUFB Y12, Y30, Y13 - VPSHUFB Y12, Y31, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y5 - VPTERNLOGD $0x96, Y9, Y10, Y6 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VPSRLQ $0x04, Y5, Y10 - VPAND Y0, Y5, Y9 - VPAND Y0, Y10, Y10 - VPSHUFB Y9, Y16, Y11 - VPSHUFB Y9, Y17, Y9 - VPSHUFB Y10, Y18, Y12 - VPSHUFB Y10, Y19, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y6, Y0, Y10 - VPSRLQ $0x04, Y6, Y12 - VPAND Y0, Y12, Y12 - VPSHUFB Y10, Y20, Y13 - VPSHUFB Y10, Y21, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VPSHUFB Y12, Y22, Y13 - VPSHUFB Y12, Y23, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y1 - VPTERNLOGD $0x96, Y9, Y10, Y2 - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VPSHUFB Y9, Y16, Y11 - VPSHUFB Y9, Y17, Y9 - VPSHUFB Y10, Y18, Y12 - VPSHUFB Y10, Y19, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VPSHUFB Y10, Y20, Y13 - VPSHUFB Y10, Y21, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VPSHUFB Y12, Y22, Y13 - VPSHUFB Y12, Y23, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y3 - VPTERNLOGD $0x96, Y9, Y10, Y4 - VMOVDQU Y1, (SI) - VMOVDQU Y2, 32(SI) - ADDQ $0x40, SI - VMOVDQU Y3, (DI) - VMOVDQU Y4, 32(DI) - ADDQ $0x40, DI - VMOVDQU Y5, (R8) - VMOVDQU Y6, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y7, (AX) - VMOVDQU Y8, 32(AX) - ADDQ $0x40, AX - SUBQ $0x40, DX - JNZ loop - VZEROUPPER - RET - -// func fftDIT4_avx512_1(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·fftDIT4_avx512_1(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), CX - MOVQ table02+48(FP), DX - VBROADCASTI128 (AX), Y1 - VBROADCASTI128 64(AX), Y0 - VMOVAPS Z1, Z16 - VMOVAPS Z0, Z17 - VBROADCASTI128 16(AX), Y1 - VBROADCASTI128 80(AX), Y0 - VMOVAPS Z1, Z18 - VMOVAPS Z0, Z19 - VBROADCASTI128 32(AX), Y1 - VBROADCASTI128 96(AX), Y0 - VMOVAPS Z1, Z20 - VMOVAPS Z0, Z21 - VBROADCASTI128 48(AX), Y1 - VBROADCASTI128 112(AX), Y0 - VMOVAPS Z1, Z22 - VMOVAPS Z0, Z23 - VBROADCASTI128 (CX), Y1 - VBROADCASTI128 64(CX), Y0 - VMOVAPS Z1, Z24 - VMOVAPS Z0, Z25 - VBROADCASTI128 16(CX), Y1 - VBROADCASTI128 80(CX), Y0 - VMOVAPS Z1, Z26 - VMOVAPS Z0, Z27 - VBROADCASTI128 32(CX), Y1 - VBROADCASTI128 96(CX), Y0 - VMOVAPS Z1, Z28 - VMOVAPS Z0, Z29 - VBROADCASTI128 48(CX), Y1 - VBROADCASTI128 112(CX), Y0 - VMOVAPS Z1, Z30 - VMOVAPS Z0, Z31 - MOVQ $0x0000000f, AX - MOVQ AX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), AX - MOVQ work_base+0(FP), CX - MOVQ 8(CX), DX - XORQ BX, BX - MOVQ (CX)(BX*1), SI - ADDQ AX, BX - MOVQ (CX)(BX*1), DI - ADDQ AX, BX - MOVQ (CX)(BX*1), R8 - ADDQ AX, BX - MOVQ (CX)(BX*1), AX - -loop: - VMOVDQU (SI), Y1 - VMOVDQU 32(SI), Y2 - VMOVDQU (R8), Y5 - VMOVDQU 32(R8), Y6 - VMOVDQU (DI), Y3 - VMOVDQU 32(DI), Y4 - VMOVDQU (AX), Y7 - VMOVDQU 32(AX), Y8 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VPSRLQ $0x04, Y3, Y10 - VPAND Y0, Y3, Y9 - VPAND Y0, Y10, Y10 - VPSHUFB Y9, Y16, Y11 - VPSHUFB Y9, Y17, Y9 - VPSHUFB Y10, Y18, Y12 - VPSHUFB Y10, Y19, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y4, Y0, Y10 - VPSRLQ $0x04, Y4, Y12 - VPAND Y0, Y12, Y12 - VPSHUFB Y10, Y20, Y13 - VPSHUFB Y10, Y21, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VPSHUFB Y12, Y22, Y13 - VPSHUFB Y12, Y23, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y1 - VPTERNLOGD $0x96, Y9, Y10, Y2 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VMOVDQU Y1, (SI) - VMOVDQU Y2, 32(SI) - ADDQ $0x40, SI - VMOVDQU Y3, (DI) - VMOVDQU Y4, 32(DI) - ADDQ $0x40, DI - VPSRLQ $0x04, Y7, Y2 - VPAND Y0, Y7, Y1 - VPAND Y0, Y2, Y2 - VPSHUFB Y1, Y24, Y3 - VPSHUFB Y1, Y25, Y1 - VPSHUFB Y2, Y26, Y4 - VPSHUFB Y2, Y27, Y2 - VPXOR Y3, Y4, Y3 - VPXOR Y1, Y2, Y1 - VPAND Y8, Y0, Y2 - VPSRLQ $0x04, Y8, Y4 - VPAND Y0, Y4, Y4 - VPSHUFB Y2, Y28, Y9 - VPSHUFB Y2, Y29, Y2 - VPXOR Y3, Y9, Y3 - VPXOR Y1, Y2, Y1 - VPSHUFB Y4, Y30, Y9 - VPSHUFB Y4, Y31, Y2 - VPTERNLOGD $0x96, Y3, Y9, Y5 - VPTERNLOGD $0x96, Y1, Y2, Y6 - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VMOVDQU Y5, (R8) - VMOVDQU Y6, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y7, (AX) - VMOVDQU Y8, 32(AX) - ADDQ $0x40, AX - SUBQ $0x40, DX - JNZ loop - VZEROUPPER - RET - -// func ifftDIT4_avx512_2(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·ifftDIT4_avx512_2(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), CX - MOVQ table02+48(FP), CX - VBROADCASTI128 (CX), Y1 - VBROADCASTI128 64(CX), Y0 - VMOVAPS Z1, Z16 - VMOVAPS Z0, Z17 - VBROADCASTI128 16(CX), Y1 - VBROADCASTI128 80(CX), Y0 - VMOVAPS Z1, Z18 - VMOVAPS Z0, Z19 - VBROADCASTI128 32(CX), Y1 - VBROADCASTI128 96(CX), Y0 - VMOVAPS Z1, Z20 - VMOVAPS Z0, Z21 - VBROADCASTI128 48(CX), Y1 - VBROADCASTI128 112(CX), Y0 - VMOVAPS Z1, Z22 - VMOVAPS Z0, Z23 - VBROADCASTI128 (AX), Y1 - VBROADCASTI128 64(AX), Y0 - VMOVAPS Z1, Z24 - VMOVAPS Z0, Z25 - VBROADCASTI128 16(AX), Y1 - VBROADCASTI128 80(AX), Y0 - VMOVAPS Z1, Z26 - VMOVAPS Z0, Z27 - VBROADCASTI128 32(AX), Y1 - VBROADCASTI128 96(AX), Y0 - VMOVAPS Z1, Z28 - VMOVAPS Z0, Z29 - VBROADCASTI128 48(AX), Y1 - VBROADCASTI128 112(AX), Y0 - VMOVAPS Z1, Z30 - VMOVAPS Z0, Z31 - MOVQ $0x0000000f, AX - MOVQ AX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), AX - MOVQ work_base+0(FP), CX - MOVQ 8(CX), DX - XORQ BX, BX - MOVQ (CX)(BX*1), SI - ADDQ AX, BX - MOVQ (CX)(BX*1), DI - ADDQ AX, BX - MOVQ (CX)(BX*1), R8 - ADDQ AX, BX - MOVQ (CX)(BX*1), AX - -loop: - VMOVDQU (SI), Y1 - VMOVDQU 32(SI), Y2 - VMOVDQU (DI), Y3 - VMOVDQU 32(DI), Y4 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VPSRLQ $0x04, Y3, Y6 - VPAND Y0, Y3, Y5 - VPAND Y0, Y6, Y6 - VPSHUFB Y5, Y24, Y7 - VPSHUFB Y5, Y25, Y5 - VPSHUFB Y6, Y26, Y8 - VPSHUFB Y6, Y27, Y6 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y6, Y5 - VPAND Y4, Y0, Y6 - VPSRLQ $0x04, Y4, Y8 - VPAND Y0, Y8, Y8 - VPSHUFB Y6, Y28, Y9 - VPSHUFB Y6, Y29, Y6 - VPXOR Y7, Y9, Y7 - VPXOR Y5, Y6, Y5 - VPSHUFB Y8, Y30, Y9 - VPSHUFB Y8, Y31, Y6 - VPTERNLOGD $0x96, Y7, Y9, Y1 - VPTERNLOGD $0x96, Y5, Y6, Y2 - VMOVDQU (R8), Y5 - VMOVDQU 32(R8), Y6 - VMOVDQU (AX), Y7 - VMOVDQU 32(AX), Y8 - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VPSRLQ $0x04, Y5, Y10 - VPAND Y0, Y5, Y9 - VPAND Y0, Y10, Y10 - VPSHUFB Y9, Y16, Y11 - VPSHUFB Y9, Y17, Y9 - VPSHUFB Y10, Y18, Y12 - VPSHUFB Y10, Y19, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y6, Y0, Y10 - VPSRLQ $0x04, Y6, Y12 - VPAND Y0, Y12, Y12 - VPSHUFB Y10, Y20, Y13 - VPSHUFB Y10, Y21, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VPSHUFB Y12, Y22, Y13 - VPSHUFB Y12, Y23, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y1 - VPTERNLOGD $0x96, Y9, Y10, Y2 - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VPSHUFB Y9, Y16, Y11 - VPSHUFB Y9, Y17, Y9 - VPSHUFB Y10, Y18, Y12 - VPSHUFB Y10, Y19, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VPSHUFB Y10, Y20, Y13 - VPSHUFB Y10, Y21, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VPSHUFB Y12, Y22, Y13 - VPSHUFB Y12, Y23, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y3 - VPTERNLOGD $0x96, Y9, Y10, Y4 - VMOVDQU Y1, (SI) - VMOVDQU Y2, 32(SI) - ADDQ $0x40, SI - VMOVDQU Y3, (DI) - VMOVDQU Y4, 32(DI) - ADDQ $0x40, DI - VMOVDQU Y5, (R8) - VMOVDQU Y6, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y7, (AX) - VMOVDQU Y8, 32(AX) - ADDQ $0x40, AX - SUBQ $0x40, DX - JNZ loop - VZEROUPPER - RET - -// func fftDIT4_avx512_2(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·fftDIT4_avx512_2(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), AX - MOVQ table02+48(FP), CX - VBROADCASTI128 (CX), Y1 - VBROADCASTI128 64(CX), Y0 - VMOVAPS Z1, Z16 - VMOVAPS Z0, Z17 - VBROADCASTI128 16(CX), Y1 - VBROADCASTI128 80(CX), Y0 - VMOVAPS Z1, Z18 - VMOVAPS Z0, Z19 - VBROADCASTI128 32(CX), Y1 - VBROADCASTI128 96(CX), Y0 - VMOVAPS Z1, Z20 - VMOVAPS Z0, Z21 - VBROADCASTI128 48(CX), Y1 - VBROADCASTI128 112(CX), Y0 - VMOVAPS Z1, Z22 - VMOVAPS Z0, Z23 - VBROADCASTI128 (AX), Y1 - VBROADCASTI128 64(AX), Y0 - VMOVAPS Z1, Z24 - VMOVAPS Z0, Z25 - VBROADCASTI128 16(AX), Y1 - VBROADCASTI128 80(AX), Y0 - VMOVAPS Z1, Z26 - VMOVAPS Z0, Z27 - VBROADCASTI128 32(AX), Y1 - VBROADCASTI128 96(AX), Y0 - VMOVAPS Z1, Z28 - VMOVAPS Z0, Z29 - VBROADCASTI128 48(AX), Y1 - VBROADCASTI128 112(AX), Y0 - VMOVAPS Z1, Z30 - VMOVAPS Z0, Z31 - MOVQ $0x0000000f, AX - MOVQ AX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), AX - MOVQ work_base+0(FP), CX - MOVQ 8(CX), DX - XORQ BX, BX - MOVQ (CX)(BX*1), SI - ADDQ AX, BX - MOVQ (CX)(BX*1), DI - ADDQ AX, BX - MOVQ (CX)(BX*1), R8 - ADDQ AX, BX - MOVQ (CX)(BX*1), AX - -loop: - VMOVDQU (SI), Y1 - VMOVDQU 32(SI), Y2 - VMOVDQU (R8), Y5 - VMOVDQU 32(R8), Y6 - VMOVDQU (DI), Y3 - VMOVDQU 32(DI), Y4 - VMOVDQU (AX), Y7 - VMOVDQU 32(AX), Y8 - VPSRLQ $0x04, Y5, Y10 - VPAND Y0, Y5, Y9 - VPAND Y0, Y10, Y10 - VPSHUFB Y9, Y16, Y11 - VPSHUFB Y9, Y17, Y9 - VPSHUFB Y10, Y18, Y12 - VPSHUFB Y10, Y19, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y6, Y0, Y10 - VPSRLQ $0x04, Y6, Y12 - VPAND Y0, Y12, Y12 - VPSHUFB Y10, Y20, Y13 - VPSHUFB Y10, Y21, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VPSHUFB Y12, Y22, Y13 - VPSHUFB Y12, Y23, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y1 - VPTERNLOGD $0x96, Y9, Y10, Y2 - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VPSHUFB Y9, Y16, Y11 - VPSHUFB Y9, Y17, Y9 - VPSHUFB Y10, Y18, Y12 - VPSHUFB Y10, Y19, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VPSHUFB Y10, Y20, Y13 - VPSHUFB Y10, Y21, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VPSHUFB Y12, Y22, Y13 - VPSHUFB Y12, Y23, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y3 - VPTERNLOGD $0x96, Y9, Y10, Y4 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VMOVDQU Y1, (SI) - VMOVDQU Y2, 32(SI) - ADDQ $0x40, SI - VMOVDQU Y3, (DI) - VMOVDQU Y4, 32(DI) - ADDQ $0x40, DI - VPSRLQ $0x04, Y7, Y2 - VPAND Y0, Y7, Y1 - VPAND Y0, Y2, Y2 - VPSHUFB Y1, Y24, Y3 - VPSHUFB Y1, Y25, Y1 - VPSHUFB Y2, Y26, Y4 - VPSHUFB Y2, Y27, Y2 - VPXOR Y3, Y4, Y3 - VPXOR Y1, Y2, Y1 - VPAND Y8, Y0, Y2 - VPSRLQ $0x04, Y8, Y4 - VPAND Y0, Y4, Y4 - VPSHUFB Y2, Y28, Y9 - VPSHUFB Y2, Y29, Y2 - VPXOR Y3, Y9, Y3 - VPXOR Y1, Y2, Y1 - VPSHUFB Y4, Y30, Y9 - VPSHUFB Y4, Y31, Y2 - VPTERNLOGD $0x96, Y3, Y9, Y5 - VPTERNLOGD $0x96, Y1, Y2, Y6 - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VMOVDQU Y5, (R8) - VMOVDQU Y6, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y7, (AX) - VMOVDQU Y8, 32(AX) - ADDQ $0x40, AX - SUBQ $0x40, DX - JNZ loop - VZEROUPPER - RET - -// func ifftDIT4_avx512_3(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·ifftDIT4_avx512_3(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), AX - MOVQ table02+48(FP), AX - VBROADCASTI128 (AX), Y1 - VBROADCASTI128 64(AX), Y0 - VMOVAPS Z1, Z16 - VMOVAPS Z0, Z17 - VBROADCASTI128 16(AX), Y1 - VBROADCASTI128 80(AX), Y0 - VMOVAPS Z1, Z18 - VMOVAPS Z0, Z19 - VBROADCASTI128 32(AX), Y1 - VBROADCASTI128 96(AX), Y0 - VMOVAPS Z1, Z20 - VMOVAPS Z0, Z21 - VBROADCASTI128 48(AX), Y1 - VBROADCASTI128 112(AX), Y0 - VMOVAPS Z1, Z22 - VMOVAPS Z0, Z23 - MOVQ $0x0000000f, AX - MOVQ AX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), AX - MOVQ work_base+0(FP), CX - MOVQ 8(CX), DX - XORQ BX, BX - MOVQ (CX)(BX*1), SI - ADDQ AX, BX - MOVQ (CX)(BX*1), DI - ADDQ AX, BX - MOVQ (CX)(BX*1), R8 - ADDQ AX, BX - MOVQ (CX)(BX*1), AX - -loop: - VMOVDQU (SI), Y1 - VMOVDQU 32(SI), Y2 - VMOVDQU (DI), Y3 - VMOVDQU 32(DI), Y4 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VMOVDQU (R8), Y5 - VMOVDQU 32(R8), Y6 - VMOVDQU (AX), Y7 - VMOVDQU 32(AX), Y8 - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VPSRLQ $0x04, Y5, Y10 - VPAND Y0, Y5, Y9 - VPAND Y0, Y10, Y10 - VPSHUFB Y9, Y16, Y11 - VPSHUFB Y9, Y17, Y9 - VPSHUFB Y10, Y18, Y12 - VPSHUFB Y10, Y19, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y6, Y0, Y10 - VPSRLQ $0x04, Y6, Y12 - VPAND Y0, Y12, Y12 - VPSHUFB Y10, Y20, Y13 - VPSHUFB Y10, Y21, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VPSHUFB Y12, Y22, Y13 - VPSHUFB Y12, Y23, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y1 - VPTERNLOGD $0x96, Y9, Y10, Y2 - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VPSHUFB Y9, Y16, Y11 - VPSHUFB Y9, Y17, Y9 - VPSHUFB Y10, Y18, Y12 - VPSHUFB Y10, Y19, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VPSHUFB Y10, Y20, Y13 - VPSHUFB Y10, Y21, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VPSHUFB Y12, Y22, Y13 - VPSHUFB Y12, Y23, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y3 - VPTERNLOGD $0x96, Y9, Y10, Y4 - VMOVDQU Y1, (SI) - VMOVDQU Y2, 32(SI) - ADDQ $0x40, SI - VMOVDQU Y3, (DI) - VMOVDQU Y4, 32(DI) - ADDQ $0x40, DI - VMOVDQU Y5, (R8) - VMOVDQU Y6, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y7, (AX) - VMOVDQU Y8, 32(AX) - ADDQ $0x40, AX - SUBQ $0x40, DX - JNZ loop - VZEROUPPER - RET - -// func fftDIT4_avx512_3(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·fftDIT4_avx512_3(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), AX - MOVQ table02+48(FP), CX - VBROADCASTI128 (AX), Y1 - VBROADCASTI128 64(AX), Y0 - VMOVAPS Z1, Z16 - VMOVAPS Z0, Z17 - VBROADCASTI128 16(AX), Y1 - VBROADCASTI128 80(AX), Y0 - VMOVAPS Z1, Z18 - VMOVAPS Z0, Z19 - VBROADCASTI128 32(AX), Y1 - VBROADCASTI128 96(AX), Y0 - VMOVAPS Z1, Z20 - VMOVAPS Z0, Z21 - VBROADCASTI128 48(AX), Y1 - VBROADCASTI128 112(AX), Y0 - VMOVAPS Z1, Z22 - VMOVAPS Z0, Z23 - MOVQ $0x0000000f, AX - MOVQ AX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), AX - MOVQ work_base+0(FP), CX - MOVQ 8(CX), DX - XORQ BX, BX - MOVQ (CX)(BX*1), SI - ADDQ AX, BX - MOVQ (CX)(BX*1), DI - ADDQ AX, BX - MOVQ (CX)(BX*1), R8 - ADDQ AX, BX - MOVQ (CX)(BX*1), AX - -loop: - VMOVDQU (SI), Y1 - VMOVDQU 32(SI), Y2 - VMOVDQU (R8), Y5 - VMOVDQU 32(R8), Y6 - VMOVDQU (DI), Y3 - VMOVDQU 32(DI), Y4 - VMOVDQU (AX), Y7 - VMOVDQU 32(AX), Y8 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VMOVDQU Y1, (SI) - VMOVDQU Y2, 32(SI) - ADDQ $0x40, SI - VMOVDQU Y3, (DI) - VMOVDQU Y4, 32(DI) - ADDQ $0x40, DI - VPSRLQ $0x04, Y7, Y2 - VPAND Y0, Y7, Y1 - VPAND Y0, Y2, Y2 - VPSHUFB Y1, Y16, Y3 - VPSHUFB Y1, Y17, Y1 - VPSHUFB Y2, Y18, Y4 - VPSHUFB Y2, Y19, Y2 - VPXOR Y3, Y4, Y3 - VPXOR Y1, Y2, Y1 - VPAND Y8, Y0, Y2 - VPSRLQ $0x04, Y8, Y4 - VPAND Y0, Y4, Y4 - VPSHUFB Y2, Y20, Y9 - VPSHUFB Y2, Y21, Y2 - VPXOR Y3, Y9, Y3 - VPXOR Y1, Y2, Y1 - VPSHUFB Y4, Y22, Y9 - VPSHUFB Y4, Y23, Y2 - VPTERNLOGD $0x96, Y3, Y9, Y5 - VPTERNLOGD $0x96, Y1, Y2, Y6 - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VMOVDQU Y5, (R8) - VMOVDQU Y6, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y7, (AX) - VMOVDQU Y8, 32(AX) - ADDQ $0x40, AX - SUBQ $0x40, DX - JNZ loop - VZEROUPPER - RET - -// func ifftDIT4_avx512_4(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·ifftDIT4_avx512_4(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), CX - MOVQ table02+48(FP), DX - VBROADCASTI128 (AX), Y1 - VBROADCASTI128 64(AX), Y0 - VMOVAPS Z1, Z16 - VMOVAPS Z0, Z17 - VBROADCASTI128 16(AX), Y1 - VBROADCASTI128 80(AX), Y0 - VMOVAPS Z1, Z18 - VMOVAPS Z0, Z19 - VBROADCASTI128 32(AX), Y1 - VBROADCASTI128 96(AX), Y0 - VMOVAPS Z1, Z20 - VMOVAPS Z0, Z21 - VBROADCASTI128 48(AX), Y1 - VBROADCASTI128 112(AX), Y0 - VMOVAPS Z1, Z22 - VMOVAPS Z0, Z23 - VBROADCASTI128 (CX), Y1 - VBROADCASTI128 64(CX), Y0 - VMOVAPS Z1, Z24 - VMOVAPS Z0, Z25 - VBROADCASTI128 16(CX), Y1 - VBROADCASTI128 80(CX), Y0 - VMOVAPS Z1, Z26 - VMOVAPS Z0, Z27 - VBROADCASTI128 32(CX), Y1 - VBROADCASTI128 96(CX), Y0 - VMOVAPS Z1, Z28 - VMOVAPS Z0, Z29 - VBROADCASTI128 48(CX), Y1 - VBROADCASTI128 112(CX), Y0 - VMOVAPS Z1, Z30 - VMOVAPS Z0, Z31 - MOVQ $0x0000000f, AX - MOVQ AX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), AX - MOVQ work_base+0(FP), CX - MOVQ 8(CX), DX - XORQ BX, BX - MOVQ (CX)(BX*1), SI - ADDQ AX, BX - MOVQ (CX)(BX*1), DI - ADDQ AX, BX - MOVQ (CX)(BX*1), R8 - ADDQ AX, BX - MOVQ (CX)(BX*1), AX - -loop: - VMOVDQU (SI), Y1 - VMOVDQU 32(SI), Y2 - VMOVDQU (DI), Y3 - VMOVDQU 32(DI), Y4 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VPSRLQ $0x04, Y3, Y6 - VPAND Y0, Y3, Y5 - VPAND Y0, Y6, Y6 - VPSHUFB Y5, Y16, Y7 - VPSHUFB Y5, Y17, Y5 - VPSHUFB Y6, Y18, Y8 - VPSHUFB Y6, Y19, Y6 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y6, Y5 - VPAND Y4, Y0, Y6 - VPSRLQ $0x04, Y4, Y8 - VPAND Y0, Y8, Y8 - VPSHUFB Y6, Y20, Y9 - VPSHUFB Y6, Y21, Y6 - VPXOR Y7, Y9, Y7 - VPXOR Y5, Y6, Y5 - VPSHUFB Y8, Y22, Y9 - VPSHUFB Y8, Y23, Y6 - VPTERNLOGD $0x96, Y7, Y9, Y1 - VPTERNLOGD $0x96, Y5, Y6, Y2 - VMOVDQU (R8), Y5 - VMOVDQU 32(R8), Y6 - VMOVDQU (AX), Y7 - VMOVDQU 32(AX), Y8 - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VPSHUFB Y9, Y24, Y11 - VPSHUFB Y9, Y25, Y9 - VPSHUFB Y10, Y26, Y12 - VPSHUFB Y10, Y27, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VPSHUFB Y10, Y28, Y13 - VPSHUFB Y10, Y29, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VPSHUFB Y12, Y30, Y13 - VPSHUFB Y12, Y31, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y5 - VPTERNLOGD $0x96, Y9, Y10, Y6 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VMOVDQU Y1, (SI) - VMOVDQU Y2, 32(SI) - ADDQ $0x40, SI - VMOVDQU Y3, (DI) - VMOVDQU Y4, 32(DI) - ADDQ $0x40, DI - VMOVDQU Y5, (R8) - VMOVDQU Y6, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y7, (AX) - VMOVDQU Y8, 32(AX) - ADDQ $0x40, AX - SUBQ $0x40, DX - JNZ loop - VZEROUPPER - RET - -// func fftDIT4_avx512_4(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·fftDIT4_avx512_4(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), CX - MOVQ table02+48(FP), CX - VBROADCASTI128 (CX), Y1 - VBROADCASTI128 64(CX), Y0 - VMOVAPS Z1, Z16 - VMOVAPS Z0, Z17 - VBROADCASTI128 16(CX), Y1 - VBROADCASTI128 80(CX), Y0 - VMOVAPS Z1, Z18 - VMOVAPS Z0, Z19 - VBROADCASTI128 32(CX), Y1 - VBROADCASTI128 96(CX), Y0 - VMOVAPS Z1, Z20 - VMOVAPS Z0, Z21 - VBROADCASTI128 48(CX), Y1 - VBROADCASTI128 112(CX), Y0 - VMOVAPS Z1, Z22 - VMOVAPS Z0, Z23 - VBROADCASTI128 (AX), Y1 - VBROADCASTI128 64(AX), Y0 - VMOVAPS Z1, Z24 - VMOVAPS Z0, Z25 - VBROADCASTI128 16(AX), Y1 - VBROADCASTI128 80(AX), Y0 - VMOVAPS Z1, Z26 - VMOVAPS Z0, Z27 - VBROADCASTI128 32(AX), Y1 - VBROADCASTI128 96(AX), Y0 - VMOVAPS Z1, Z28 - VMOVAPS Z0, Z29 - VBROADCASTI128 48(AX), Y1 - VBROADCASTI128 112(AX), Y0 - VMOVAPS Z1, Z30 - VMOVAPS Z0, Z31 - MOVQ $0x0000000f, AX - MOVQ AX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), AX - MOVQ work_base+0(FP), CX - MOVQ 8(CX), DX - XORQ BX, BX - MOVQ (CX)(BX*1), SI - ADDQ AX, BX - MOVQ (CX)(BX*1), DI - ADDQ AX, BX - MOVQ (CX)(BX*1), R8 - ADDQ AX, BX - MOVQ (CX)(BX*1), AX - -loop: - VMOVDQU (SI), Y1 - VMOVDQU 32(SI), Y2 - VMOVDQU (R8), Y5 - VMOVDQU 32(R8), Y6 - VMOVDQU (DI), Y3 - VMOVDQU 32(DI), Y4 - VMOVDQU (AX), Y7 - VMOVDQU 32(AX), Y8 - VPSRLQ $0x04, Y5, Y10 - VPAND Y0, Y5, Y9 - VPAND Y0, Y10, Y10 - VPSHUFB Y9, Y16, Y11 - VPSHUFB Y9, Y17, Y9 - VPSHUFB Y10, Y18, Y12 - VPSHUFB Y10, Y19, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y6, Y0, Y10 - VPSRLQ $0x04, Y6, Y12 - VPAND Y0, Y12, Y12 - VPSHUFB Y10, Y20, Y13 - VPSHUFB Y10, Y21, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VPSHUFB Y12, Y22, Y13 - VPSHUFB Y12, Y23, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y1 - VPTERNLOGD $0x96, Y9, Y10, Y2 - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VPSHUFB Y9, Y16, Y11 - VPSHUFB Y9, Y17, Y9 - VPSHUFB Y10, Y18, Y12 - VPSHUFB Y10, Y19, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VPSHUFB Y10, Y20, Y13 - VPSHUFB Y10, Y21, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VPSHUFB Y12, Y22, Y13 - VPSHUFB Y12, Y23, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y3 - VPTERNLOGD $0x96, Y9, Y10, Y4 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VPSRLQ $0x04, Y3, Y10 - VPAND Y0, Y3, Y9 - VPAND Y0, Y10, Y10 - VPSHUFB Y9, Y24, Y11 - VPSHUFB Y9, Y25, Y9 - VPSHUFB Y10, Y26, Y12 - VPSHUFB Y10, Y27, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y4, Y0, Y10 - VPSRLQ $0x04, Y4, Y12 - VPAND Y0, Y12, Y12 - VPSHUFB Y10, Y28, Y13 - VPSHUFB Y10, Y29, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VPSHUFB Y12, Y30, Y13 - VPSHUFB Y12, Y31, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y1 - VPTERNLOGD $0x96, Y9, Y10, Y2 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VMOVDQU Y1, (SI) - VMOVDQU Y2, 32(SI) - ADDQ $0x40, SI - VMOVDQU Y3, (DI) - VMOVDQU Y4, 32(DI) - ADDQ $0x40, DI - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VMOVDQU Y5, (R8) - VMOVDQU Y6, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y7, (AX) - VMOVDQU Y8, 32(AX) - ADDQ $0x40, AX - SUBQ $0x40, DX - JNZ loop - VZEROUPPER - RET - -// func ifftDIT4_avx512_5(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·ifftDIT4_avx512_5(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), AX - MOVQ table02+48(FP), CX - VBROADCASTI128 (AX), Y1 - VBROADCASTI128 64(AX), Y0 - VMOVAPS Z1, Z16 - VMOVAPS Z0, Z17 - VBROADCASTI128 16(AX), Y1 - VBROADCASTI128 80(AX), Y0 - VMOVAPS Z1, Z18 - VMOVAPS Z0, Z19 - VBROADCASTI128 32(AX), Y1 - VBROADCASTI128 96(AX), Y0 - VMOVAPS Z1, Z20 - VMOVAPS Z0, Z21 - VBROADCASTI128 48(AX), Y1 - VBROADCASTI128 112(AX), Y0 - VMOVAPS Z1, Z22 - VMOVAPS Z0, Z23 - MOVQ $0x0000000f, AX - MOVQ AX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), AX - MOVQ work_base+0(FP), CX - MOVQ 8(CX), DX - XORQ BX, BX - MOVQ (CX)(BX*1), SI - ADDQ AX, BX - MOVQ (CX)(BX*1), DI - ADDQ AX, BX - MOVQ (CX)(BX*1), R8 - ADDQ AX, BX - MOVQ (CX)(BX*1), AX - -loop: - VMOVDQU (SI), Y1 - VMOVDQU 32(SI), Y2 - VMOVDQU (DI), Y3 - VMOVDQU 32(DI), Y4 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VMOVDQU (R8), Y5 - VMOVDQU 32(R8), Y6 - VMOVDQU (AX), Y7 - VMOVDQU 32(AX), Y8 - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VPSHUFB Y9, Y16, Y11 - VPSHUFB Y9, Y17, Y9 - VPSHUFB Y10, Y18, Y12 - VPSHUFB Y10, Y19, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VPSHUFB Y10, Y20, Y13 - VPSHUFB Y10, Y21, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VPSHUFB Y12, Y22, Y13 - VPSHUFB Y12, Y23, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y5 - VPTERNLOGD $0x96, Y9, Y10, Y6 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VMOVDQU Y1, (SI) - VMOVDQU Y2, 32(SI) - ADDQ $0x40, SI - VMOVDQU Y3, (DI) - VMOVDQU Y4, 32(DI) - ADDQ $0x40, DI - VMOVDQU Y5, (R8) - VMOVDQU Y6, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y7, (AX) - VMOVDQU Y8, 32(AX) - ADDQ $0x40, AX - SUBQ $0x40, DX - JNZ loop - VZEROUPPER - RET - -// func fftDIT4_avx512_5(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·fftDIT4_avx512_5(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), CX - MOVQ table02+48(FP), CX - VBROADCASTI128 (AX), Y1 - VBROADCASTI128 64(AX), Y0 - VMOVAPS Z1, Z16 - VMOVAPS Z0, Z17 - VBROADCASTI128 16(AX), Y1 - VBROADCASTI128 80(AX), Y0 - VMOVAPS Z1, Z18 - VMOVAPS Z0, Z19 - VBROADCASTI128 32(AX), Y1 - VBROADCASTI128 96(AX), Y0 - VMOVAPS Z1, Z20 - VMOVAPS Z0, Z21 - VBROADCASTI128 48(AX), Y1 - VBROADCASTI128 112(AX), Y0 - VMOVAPS Z1, Z22 - VMOVAPS Z0, Z23 - MOVQ $0x0000000f, AX - MOVQ AX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), AX - MOVQ work_base+0(FP), CX - MOVQ 8(CX), DX - XORQ BX, BX - MOVQ (CX)(BX*1), SI - ADDQ AX, BX - MOVQ (CX)(BX*1), DI - ADDQ AX, BX - MOVQ (CX)(BX*1), R8 - ADDQ AX, BX - MOVQ (CX)(BX*1), AX - -loop: - VMOVDQU (SI), Y1 - VMOVDQU 32(SI), Y2 - VMOVDQU (R8), Y5 - VMOVDQU 32(R8), Y6 - VMOVDQU (DI), Y3 - VMOVDQU 32(DI), Y4 - VMOVDQU (AX), Y7 - VMOVDQU 32(AX), Y8 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VPSRLQ $0x04, Y3, Y10 - VPAND Y0, Y3, Y9 - VPAND Y0, Y10, Y10 - VPSHUFB Y9, Y16, Y11 - VPSHUFB Y9, Y17, Y9 - VPSHUFB Y10, Y18, Y12 - VPSHUFB Y10, Y19, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y4, Y0, Y10 - VPSRLQ $0x04, Y4, Y12 - VPAND Y0, Y12, Y12 - VPSHUFB Y10, Y20, Y13 - VPSHUFB Y10, Y21, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VPSHUFB Y12, Y22, Y13 - VPSHUFB Y12, Y23, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y1 - VPTERNLOGD $0x96, Y9, Y10, Y2 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VMOVDQU Y1, (SI) - VMOVDQU Y2, 32(SI) - ADDQ $0x40, SI - VMOVDQU Y3, (DI) - VMOVDQU Y4, 32(DI) - ADDQ $0x40, DI - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VMOVDQU Y5, (R8) - VMOVDQU Y6, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y7, (AX) - VMOVDQU Y8, 32(AX) - ADDQ $0x40, AX - SUBQ $0x40, DX - JNZ loop - VZEROUPPER - RET - -// func ifftDIT4_avx512_6(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·ifftDIT4_avx512_6(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), CX - MOVQ table02+48(FP), CX - VBROADCASTI128 (AX), Y1 - VBROADCASTI128 64(AX), Y0 - VMOVAPS Z1, Z16 - VMOVAPS Z0, Z17 - VBROADCASTI128 16(AX), Y1 - VBROADCASTI128 80(AX), Y0 - VMOVAPS Z1, Z18 - VMOVAPS Z0, Z19 - VBROADCASTI128 32(AX), Y1 - VBROADCASTI128 96(AX), Y0 - VMOVAPS Z1, Z20 - VMOVAPS Z0, Z21 - VBROADCASTI128 48(AX), Y1 - VBROADCASTI128 112(AX), Y0 - VMOVAPS Z1, Z22 - VMOVAPS Z0, Z23 - MOVQ $0x0000000f, AX - MOVQ AX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), AX - MOVQ work_base+0(FP), CX - MOVQ 8(CX), DX - XORQ BX, BX - MOVQ (CX)(BX*1), SI - ADDQ AX, BX - MOVQ (CX)(BX*1), DI - ADDQ AX, BX - MOVQ (CX)(BX*1), R8 - ADDQ AX, BX - MOVQ (CX)(BX*1), AX - -loop: - VMOVDQU (SI), Y1 - VMOVDQU 32(SI), Y2 - VMOVDQU (DI), Y3 - VMOVDQU 32(DI), Y4 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VPSRLQ $0x04, Y3, Y6 - VPAND Y0, Y3, Y5 - VPAND Y0, Y6, Y6 - VPSHUFB Y5, Y16, Y7 - VPSHUFB Y5, Y17, Y5 - VPSHUFB Y6, Y18, Y8 - VPSHUFB Y6, Y19, Y6 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y6, Y5 - VPAND Y4, Y0, Y6 - VPSRLQ $0x04, Y4, Y8 - VPAND Y0, Y8, Y8 - VPSHUFB Y6, Y20, Y9 - VPSHUFB Y6, Y21, Y6 - VPXOR Y7, Y9, Y7 - VPXOR Y5, Y6, Y5 - VPSHUFB Y8, Y22, Y9 - VPSHUFB Y8, Y23, Y6 - VPTERNLOGD $0x96, Y7, Y9, Y1 - VPTERNLOGD $0x96, Y5, Y6, Y2 - VMOVDQU (R8), Y5 - VMOVDQU 32(R8), Y6 - VMOVDQU (AX), Y7 - VMOVDQU 32(AX), Y8 - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VMOVDQU Y1, (SI) - VMOVDQU Y2, 32(SI) - ADDQ $0x40, SI - VMOVDQU Y3, (DI) - VMOVDQU Y4, 32(DI) - ADDQ $0x40, DI - VMOVDQU Y5, (R8) - VMOVDQU Y6, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y7, (AX) - VMOVDQU Y8, 32(AX) - ADDQ $0x40, AX - SUBQ $0x40, DX - JNZ loop - VZEROUPPER - RET - -// func fftDIT4_avx512_6(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·fftDIT4_avx512_6(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), AX - MOVQ table02+48(FP), AX - VBROADCASTI128 (AX), Y1 - VBROADCASTI128 64(AX), Y0 - VMOVAPS Z1, Z16 - VMOVAPS Z0, Z17 - VBROADCASTI128 16(AX), Y1 - VBROADCASTI128 80(AX), Y0 - VMOVAPS Z1, Z18 - VMOVAPS Z0, Z19 - VBROADCASTI128 32(AX), Y1 - VBROADCASTI128 96(AX), Y0 - VMOVAPS Z1, Z20 - VMOVAPS Z0, Z21 - VBROADCASTI128 48(AX), Y1 - VBROADCASTI128 112(AX), Y0 - VMOVAPS Z1, Z22 - VMOVAPS Z0, Z23 - MOVQ $0x0000000f, AX - MOVQ AX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), AX - MOVQ work_base+0(FP), CX - MOVQ 8(CX), DX - XORQ BX, BX - MOVQ (CX)(BX*1), SI - ADDQ AX, BX - MOVQ (CX)(BX*1), DI - ADDQ AX, BX - MOVQ (CX)(BX*1), R8 - ADDQ AX, BX - MOVQ (CX)(BX*1), AX - -loop: - VMOVDQU (SI), Y1 - VMOVDQU 32(SI), Y2 - VMOVDQU (R8), Y5 - VMOVDQU 32(R8), Y6 - VMOVDQU (DI), Y3 - VMOVDQU 32(DI), Y4 - VMOVDQU (AX), Y7 - VMOVDQU 32(AX), Y8 - VPSRLQ $0x04, Y5, Y10 - VPAND Y0, Y5, Y9 - VPAND Y0, Y10, Y10 - VPSHUFB Y9, Y16, Y11 - VPSHUFB Y9, Y17, Y9 - VPSHUFB Y10, Y18, Y12 - VPSHUFB Y10, Y19, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y6, Y0, Y10 - VPSRLQ $0x04, Y6, Y12 - VPAND Y0, Y12, Y12 - VPSHUFB Y10, Y20, Y13 - VPSHUFB Y10, Y21, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VPSHUFB Y12, Y22, Y13 - VPSHUFB Y12, Y23, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y1 - VPTERNLOGD $0x96, Y9, Y10, Y2 - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VPSHUFB Y9, Y16, Y11 - VPSHUFB Y9, Y17, Y9 - VPSHUFB Y10, Y18, Y12 - VPSHUFB Y10, Y19, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VPSHUFB Y10, Y20, Y13 - VPSHUFB Y10, Y21, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VPSHUFB Y12, Y22, Y13 - VPSHUFB Y12, Y23, Y10 - VPTERNLOGD $0x96, Y11, Y13, Y3 - VPTERNLOGD $0x96, Y9, Y10, Y4 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VMOVDQU Y1, (SI) - VMOVDQU Y2, 32(SI) - ADDQ $0x40, SI - VMOVDQU Y3, (DI) - VMOVDQU Y4, 32(DI) - ADDQ $0x40, DI - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VMOVDQU Y5, (R8) - VMOVDQU Y6, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y7, (AX) - VMOVDQU Y8, 32(AX) - ADDQ $0x40, AX - SUBQ $0x40, DX - JNZ loop - VZEROUPPER - RET - -// func ifftDIT4_avx512_7(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, SSE2 -TEXT ·ifftDIT4_avx512_7(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), AX - MOVQ table02+48(FP), AX - MOVQ $0x0000000f, AX - MOVQ AX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), AX - MOVQ work_base+0(FP), CX - MOVQ 8(CX), DX - XORQ BX, BX - MOVQ (CX)(BX*1), SI - ADDQ AX, BX - MOVQ (CX)(BX*1), DI - ADDQ AX, BX - MOVQ (CX)(BX*1), R8 - ADDQ AX, BX - MOVQ (CX)(BX*1), AX - -loop: - VMOVDQU (SI), Y0 - VMOVDQU 32(SI), Y1 - VMOVDQU (DI), Y2 - VMOVDQU 32(DI), Y3 - VPXOR Y0, Y2, Y2 - VPXOR Y1, Y3, Y3 - VMOVDQU (R8), Y4 - VMOVDQU 32(R8), Y5 - VMOVDQU (AX), Y6 - VMOVDQU 32(AX), Y7 - VPXOR Y4, Y6, Y6 - VPXOR Y5, Y7, Y7 - VPXOR Y0, Y4, Y4 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VMOVDQU Y0, (SI) - VMOVDQU Y1, 32(SI) - ADDQ $0x40, SI - VMOVDQU Y2, (DI) - VMOVDQU Y3, 32(DI) - ADDQ $0x40, DI - VMOVDQU Y4, (R8) - VMOVDQU Y5, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y6, (AX) - VMOVDQU Y7, 32(AX) - ADDQ $0x40, AX - SUBQ $0x40, DX - JNZ loop - VZEROUPPER - RET - -// func fftDIT4_avx512_7(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, SSE2 -TEXT ·fftDIT4_avx512_7(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), AX - MOVQ table02+48(FP), AX - MOVQ $0x0000000f, AX - MOVQ AX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), AX - MOVQ work_base+0(FP), CX - MOVQ 8(CX), DX - XORQ BX, BX - MOVQ (CX)(BX*1), SI - ADDQ AX, BX - MOVQ (CX)(BX*1), DI - ADDQ AX, BX - MOVQ (CX)(BX*1), R8 - ADDQ AX, BX - MOVQ (CX)(BX*1), AX - -loop: - VMOVDQU (SI), Y0 - VMOVDQU 32(SI), Y1 - VMOVDQU (R8), Y4 - VMOVDQU 32(R8), Y5 - VMOVDQU (DI), Y2 - VMOVDQU 32(DI), Y3 - VMOVDQU (AX), Y6 - VMOVDQU 32(AX), Y7 - VPXOR Y0, Y4, Y4 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y0, Y2, Y2 - VPXOR Y1, Y3, Y3 - VMOVDQU Y0, (SI) - VMOVDQU Y1, 32(SI) - ADDQ $0x40, SI - VMOVDQU Y2, (DI) - VMOVDQU Y3, 32(DI) - ADDQ $0x40, DI - VPXOR Y4, Y6, Y6 - VPXOR Y5, Y7, Y7 - VMOVDQU Y4, (R8) - VMOVDQU Y5, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y6, (AX) - VMOVDQU Y7, 32(AX) - ADDQ $0x40, AX - SUBQ $0x40, DX - JNZ loop - VZEROUPPER - RET - -// func ifftDIT4_avx2_0(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·ifftDIT4_avx2_0(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), CX - MOVQ table02+48(FP), DX - MOVQ $0x0000000f, BX - MOVQ BX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), BX - MOVQ work_base+0(FP), SI - MOVQ 8(SI), DI - XORQ R8, R8 - MOVQ (SI)(R8*1), R9 - ADDQ BX, R8 - MOVQ (SI)(R8*1), R10 - ADDQ BX, R8 - MOVQ (SI)(R8*1), R11 - ADDQ BX, R8 - MOVQ (SI)(R8*1), BX - -loop: - VMOVDQU (R9), Y1 - VMOVDQU 32(R9), Y2 - VMOVDQU (R10), Y3 - VMOVDQU 32(R10), Y4 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VPSRLQ $0x04, Y3, Y6 - VPAND Y0, Y3, Y5 - VPAND Y0, Y6, Y6 - VBROADCASTI128 (AX), Y7 - VBROADCASTI128 64(AX), Y8 - VPSHUFB Y5, Y7, Y7 - VPSHUFB Y5, Y8, Y5 - VBROADCASTI128 16(AX), Y8 - VBROADCASTI128 80(AX), Y9 - VPSHUFB Y6, Y8, Y8 - VPSHUFB Y6, Y9, Y6 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y6, Y5 - VPAND Y4, Y0, Y6 - VPSRLQ $0x04, Y4, Y8 - VPAND Y0, Y8, Y8 - VBROADCASTI128 32(AX), Y9 - VBROADCASTI128 96(AX), Y10 - VPSHUFB Y6, Y9, Y9 - VPSHUFB Y6, Y10, Y6 - VPXOR Y7, Y9, Y7 - VPXOR Y5, Y6, Y5 - VBROADCASTI128 48(AX), Y9 - VBROADCASTI128 112(AX), Y6 - VPSHUFB Y8, Y9, Y9 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y7, Y9, Y1) - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU (R11), Y5 - VMOVDQU 32(R11), Y6 - VMOVDQU (BX), Y7 - VMOVDQU 32(BX), Y8 - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (CX), Y11 - VBROADCASTI128 64(CX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(CX), Y12 - VBROADCASTI128 80(CX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(CX), Y13 - VBROADCASTI128 96(CX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(CX), Y13 - VBROADCASTI128 112(CX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y5) - XOR3WAY( $0x00, Y9, Y10, Y6) - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VPSRLQ $0x04, Y5, Y10 - VPAND Y0, Y5, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (DX), Y11 - VBROADCASTI128 64(DX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(DX), Y12 - VBROADCASTI128 80(DX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y6, Y0, Y10 - VPSRLQ $0x04, Y6, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(DX), Y13 - VBROADCASTI128 96(DX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(DX), Y13 - VBROADCASTI128 112(DX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y1) - XOR3WAY( $0x00, Y9, Y10, Y2) - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (DX), Y11 - VBROADCASTI128 64(DX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(DX), Y12 - VBROADCASTI128 80(DX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(DX), Y13 - VBROADCASTI128 96(DX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(DX), Y13 - VBROADCASTI128 112(DX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y3) - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU Y1, (R9) - VMOVDQU Y2, 32(R9) - ADDQ $0x40, R9 - VMOVDQU Y3, (R10) - VMOVDQU Y4, 32(R10) - ADDQ $0x40, R10 - VMOVDQU Y5, (R11) - VMOVDQU Y6, 32(R11) - ADDQ $0x40, R11 - VMOVDQU Y7, (BX) - VMOVDQU Y8, 32(BX) - ADDQ $0x40, BX - SUBQ $0x40, DI - JNZ loop - VZEROUPPER - RET - -// func fftDIT4_avx2_0(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·fftDIT4_avx2_0(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), CX - MOVQ table02+48(FP), DX - MOVQ $0x0000000f, BX - MOVQ BX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), BX - MOVQ work_base+0(FP), SI - MOVQ 8(SI), DI - XORQ R8, R8 - MOVQ (SI)(R8*1), R9 - ADDQ BX, R8 - MOVQ (SI)(R8*1), R10 - ADDQ BX, R8 - MOVQ (SI)(R8*1), R11 - ADDQ BX, R8 - MOVQ (SI)(R8*1), BX - -loop: - VMOVDQU (R9), Y1 - VMOVDQU 32(R9), Y2 - VMOVDQU (R11), Y5 - VMOVDQU 32(R11), Y6 - VMOVDQU (R10), Y3 - VMOVDQU 32(R10), Y4 - VMOVDQU (BX), Y7 - VMOVDQU 32(BX), Y8 - VPSRLQ $0x04, Y5, Y10 - VPAND Y0, Y5, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (DX), Y11 - VBROADCASTI128 64(DX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(DX), Y12 - VBROADCASTI128 80(DX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y6, Y0, Y10 - VPSRLQ $0x04, Y6, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(DX), Y13 - VBROADCASTI128 96(DX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(DX), Y13 - VBROADCASTI128 112(DX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y1) - XOR3WAY( $0x00, Y9, Y10, Y2) - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (DX), Y11 - VBROADCASTI128 64(DX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(DX), Y12 - VBROADCASTI128 80(DX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(DX), Y13 - VBROADCASTI128 96(DX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(DX), Y13 - VBROADCASTI128 112(DX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y3) - XOR3WAY( $0x00, Y9, Y10, Y4) - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VPSRLQ $0x04, Y3, Y10 - VPAND Y0, Y3, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (AX), Y11 - VBROADCASTI128 64(AX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(AX), Y12 - VBROADCASTI128 80(AX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y4, Y0, Y10 - VPSRLQ $0x04, Y4, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(AX), Y13 - VBROADCASTI128 96(AX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(AX), Y13 - VBROADCASTI128 112(AX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y1) - XOR3WAY( $0x00, Y9, Y10, Y2) - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VMOVDQU Y1, (R9) - VMOVDQU Y2, 32(R9) - ADDQ $0x40, R9 - VMOVDQU Y3, (R10) - VMOVDQU Y4, 32(R10) - ADDQ $0x40, R10 - VPSRLQ $0x04, Y7, Y2 - VPAND Y0, Y7, Y1 - VPAND Y0, Y2, Y2 - VBROADCASTI128 (CX), Y3 - VBROADCASTI128 64(CX), Y4 - VPSHUFB Y1, Y3, Y3 - VPSHUFB Y1, Y4, Y1 - VBROADCASTI128 16(CX), Y4 - VBROADCASTI128 80(CX), Y9 - VPSHUFB Y2, Y4, Y4 - VPSHUFB Y2, Y9, Y2 - VPXOR Y3, Y4, Y3 - VPXOR Y1, Y2, Y1 - VPAND Y8, Y0, Y2 - VPSRLQ $0x04, Y8, Y4 - VPAND Y0, Y4, Y4 - VBROADCASTI128 32(CX), Y9 - VBROADCASTI128 96(CX), Y10 - VPSHUFB Y2, Y9, Y9 - VPSHUFB Y2, Y10, Y2 - VPXOR Y3, Y9, Y3 - VPXOR Y1, Y2, Y1 - VBROADCASTI128 48(CX), Y9 - VBROADCASTI128 112(CX), Y2 - VPSHUFB Y4, Y9, Y9 - VPSHUFB Y4, Y2, Y2 - XOR3WAY( $0x00, Y3, Y9, Y5) - XOR3WAY( $0x00, Y1, Y2, Y6) - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VMOVDQU Y5, (R11) - VMOVDQU Y6, 32(R11) - ADDQ $0x40, R11 - VMOVDQU Y7, (BX) - VMOVDQU Y8, 32(BX) - ADDQ $0x40, BX - SUBQ $0x40, DI - JNZ loop - VZEROUPPER - RET - -// func ifftDIT4_avx2_1(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·ifftDIT4_avx2_1(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), AX - MOVQ table02+48(FP), CX - MOVQ $0x0000000f, DX - MOVQ DX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), DX - MOVQ work_base+0(FP), BX - MOVQ 8(BX), SI - XORQ DI, DI - MOVQ (BX)(DI*1), R8 - ADDQ DX, DI - MOVQ (BX)(DI*1), R9 - ADDQ DX, DI - MOVQ (BX)(DI*1), R10 - ADDQ DX, DI - MOVQ (BX)(DI*1), DX - -loop: - VMOVDQU (R8), Y1 - VMOVDQU 32(R8), Y2 - VMOVDQU (R9), Y3 - VMOVDQU 32(R9), Y4 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VMOVDQU (R10), Y5 - VMOVDQU 32(R10), Y6 - VMOVDQU (DX), Y7 - VMOVDQU 32(DX), Y8 - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (AX), Y11 - VBROADCASTI128 64(AX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(AX), Y12 - VBROADCASTI128 80(AX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(AX), Y13 - VBROADCASTI128 96(AX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(AX), Y13 - VBROADCASTI128 112(AX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y5) - XOR3WAY( $0x00, Y9, Y10, Y6) - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VPSRLQ $0x04, Y5, Y10 - VPAND Y0, Y5, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (CX), Y11 - VBROADCASTI128 64(CX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(CX), Y12 - VBROADCASTI128 80(CX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y6, Y0, Y10 - VPSRLQ $0x04, Y6, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(CX), Y13 - VBROADCASTI128 96(CX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(CX), Y13 - VBROADCASTI128 112(CX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y1) - XOR3WAY( $0x00, Y9, Y10, Y2) - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (CX), Y11 - VBROADCASTI128 64(CX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(CX), Y12 - VBROADCASTI128 80(CX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(CX), Y13 - VBROADCASTI128 96(CX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(CX), Y13 - VBROADCASTI128 112(CX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y3) - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU Y1, (R8) - VMOVDQU Y2, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y3, (R9) - VMOVDQU Y4, 32(R9) - ADDQ $0x40, R9 - VMOVDQU Y5, (R10) - VMOVDQU Y6, 32(R10) - ADDQ $0x40, R10 - VMOVDQU Y7, (DX) - VMOVDQU Y8, 32(DX) - ADDQ $0x40, DX - SUBQ $0x40, SI - JNZ loop - VZEROUPPER - RET - -// func fftDIT4_avx2_1(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·fftDIT4_avx2_1(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), CX - MOVQ table02+48(FP), DX - MOVQ $0x0000000f, DX - MOVQ DX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), DX - MOVQ work_base+0(FP), BX - MOVQ 8(BX), SI - XORQ DI, DI - MOVQ (BX)(DI*1), R8 - ADDQ DX, DI - MOVQ (BX)(DI*1), R9 - ADDQ DX, DI - MOVQ (BX)(DI*1), R10 - ADDQ DX, DI - MOVQ (BX)(DI*1), DX - -loop: - VMOVDQU (R8), Y1 - VMOVDQU 32(R8), Y2 - VMOVDQU (R10), Y5 - VMOVDQU 32(R10), Y6 - VMOVDQU (R9), Y3 - VMOVDQU 32(R9), Y4 - VMOVDQU (DX), Y7 - VMOVDQU 32(DX), Y8 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VPSRLQ $0x04, Y3, Y10 - VPAND Y0, Y3, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (AX), Y11 - VBROADCASTI128 64(AX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(AX), Y12 - VBROADCASTI128 80(AX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y4, Y0, Y10 - VPSRLQ $0x04, Y4, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(AX), Y13 - VBROADCASTI128 96(AX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(AX), Y13 - VBROADCASTI128 112(AX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y1) - XOR3WAY( $0x00, Y9, Y10, Y2) - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VMOVDQU Y1, (R8) - VMOVDQU Y2, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y3, (R9) - VMOVDQU Y4, 32(R9) - ADDQ $0x40, R9 - VPSRLQ $0x04, Y7, Y2 - VPAND Y0, Y7, Y1 - VPAND Y0, Y2, Y2 - VBROADCASTI128 (CX), Y3 - VBROADCASTI128 64(CX), Y4 - VPSHUFB Y1, Y3, Y3 - VPSHUFB Y1, Y4, Y1 - VBROADCASTI128 16(CX), Y4 - VBROADCASTI128 80(CX), Y9 - VPSHUFB Y2, Y4, Y4 - VPSHUFB Y2, Y9, Y2 - VPXOR Y3, Y4, Y3 - VPXOR Y1, Y2, Y1 - VPAND Y8, Y0, Y2 - VPSRLQ $0x04, Y8, Y4 - VPAND Y0, Y4, Y4 - VBROADCASTI128 32(CX), Y9 - VBROADCASTI128 96(CX), Y10 - VPSHUFB Y2, Y9, Y9 - VPSHUFB Y2, Y10, Y2 - VPXOR Y3, Y9, Y3 - VPXOR Y1, Y2, Y1 - VBROADCASTI128 48(CX), Y9 - VBROADCASTI128 112(CX), Y2 - VPSHUFB Y4, Y9, Y9 - VPSHUFB Y4, Y2, Y2 - XOR3WAY( $0x00, Y3, Y9, Y5) - XOR3WAY( $0x00, Y1, Y2, Y6) - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VMOVDQU Y5, (R10) - VMOVDQU Y6, 32(R10) - ADDQ $0x40, R10 - VMOVDQU Y7, (DX) - VMOVDQU Y8, 32(DX) - ADDQ $0x40, DX - SUBQ $0x40, SI - JNZ loop - VZEROUPPER - RET - -// func ifftDIT4_avx2_2(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·ifftDIT4_avx2_2(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), CX - MOVQ table02+48(FP), CX - MOVQ $0x0000000f, DX - MOVQ DX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), DX - MOVQ work_base+0(FP), BX - MOVQ 8(BX), SI - XORQ DI, DI - MOVQ (BX)(DI*1), R8 - ADDQ DX, DI - MOVQ (BX)(DI*1), R9 - ADDQ DX, DI - MOVQ (BX)(DI*1), R10 - ADDQ DX, DI - MOVQ (BX)(DI*1), DX - -loop: - VMOVDQU (R8), Y1 - VMOVDQU 32(R8), Y2 - VMOVDQU (R9), Y3 - VMOVDQU 32(R9), Y4 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VPSRLQ $0x04, Y3, Y6 - VPAND Y0, Y3, Y5 - VPAND Y0, Y6, Y6 - VBROADCASTI128 (AX), Y7 - VBROADCASTI128 64(AX), Y8 - VPSHUFB Y5, Y7, Y7 - VPSHUFB Y5, Y8, Y5 - VBROADCASTI128 16(AX), Y8 - VBROADCASTI128 80(AX), Y9 - VPSHUFB Y6, Y8, Y8 - VPSHUFB Y6, Y9, Y6 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y6, Y5 - VPAND Y4, Y0, Y6 - VPSRLQ $0x04, Y4, Y8 - VPAND Y0, Y8, Y8 - VBROADCASTI128 32(AX), Y9 - VBROADCASTI128 96(AX), Y10 - VPSHUFB Y6, Y9, Y9 - VPSHUFB Y6, Y10, Y6 - VPXOR Y7, Y9, Y7 - VPXOR Y5, Y6, Y5 - VBROADCASTI128 48(AX), Y9 - VBROADCASTI128 112(AX), Y6 - VPSHUFB Y8, Y9, Y9 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y7, Y9, Y1) - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU (R10), Y5 - VMOVDQU 32(R10), Y6 - VMOVDQU (DX), Y7 - VMOVDQU 32(DX), Y8 - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VPSRLQ $0x04, Y5, Y10 - VPAND Y0, Y5, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (CX), Y11 - VBROADCASTI128 64(CX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(CX), Y12 - VBROADCASTI128 80(CX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y6, Y0, Y10 - VPSRLQ $0x04, Y6, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(CX), Y13 - VBROADCASTI128 96(CX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(CX), Y13 - VBROADCASTI128 112(CX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y1) - XOR3WAY( $0x00, Y9, Y10, Y2) - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (CX), Y11 - VBROADCASTI128 64(CX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(CX), Y12 - VBROADCASTI128 80(CX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(CX), Y13 - VBROADCASTI128 96(CX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(CX), Y13 - VBROADCASTI128 112(CX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y3) - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU Y1, (R8) - VMOVDQU Y2, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y3, (R9) - VMOVDQU Y4, 32(R9) - ADDQ $0x40, R9 - VMOVDQU Y5, (R10) - VMOVDQU Y6, 32(R10) - ADDQ $0x40, R10 - VMOVDQU Y7, (DX) - VMOVDQU Y8, 32(DX) - ADDQ $0x40, DX - SUBQ $0x40, SI - JNZ loop - VZEROUPPER - RET - -// func fftDIT4_avx2_2(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·fftDIT4_avx2_2(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), AX - MOVQ table02+48(FP), CX - MOVQ $0x0000000f, DX - MOVQ DX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), DX - MOVQ work_base+0(FP), BX - MOVQ 8(BX), SI - XORQ DI, DI - MOVQ (BX)(DI*1), R8 - ADDQ DX, DI - MOVQ (BX)(DI*1), R9 - ADDQ DX, DI - MOVQ (BX)(DI*1), R10 - ADDQ DX, DI - MOVQ (BX)(DI*1), DX - -loop: - VMOVDQU (R8), Y1 - VMOVDQU 32(R8), Y2 - VMOVDQU (R10), Y5 - VMOVDQU 32(R10), Y6 - VMOVDQU (R9), Y3 - VMOVDQU 32(R9), Y4 - VMOVDQU (DX), Y7 - VMOVDQU 32(DX), Y8 - VPSRLQ $0x04, Y5, Y10 - VPAND Y0, Y5, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (CX), Y11 - VBROADCASTI128 64(CX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(CX), Y12 - VBROADCASTI128 80(CX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y6, Y0, Y10 - VPSRLQ $0x04, Y6, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(CX), Y13 - VBROADCASTI128 96(CX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(CX), Y13 - VBROADCASTI128 112(CX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y1) - XOR3WAY( $0x00, Y9, Y10, Y2) - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (CX), Y11 - VBROADCASTI128 64(CX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(CX), Y12 - VBROADCASTI128 80(CX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(CX), Y13 - VBROADCASTI128 96(CX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(CX), Y13 - VBROADCASTI128 112(CX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y3) - XOR3WAY( $0x00, Y9, Y10, Y4) - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VMOVDQU Y1, (R8) - VMOVDQU Y2, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y3, (R9) - VMOVDQU Y4, 32(R9) - ADDQ $0x40, R9 - VPSRLQ $0x04, Y7, Y2 - VPAND Y0, Y7, Y1 - VPAND Y0, Y2, Y2 - VBROADCASTI128 (AX), Y3 - VBROADCASTI128 64(AX), Y4 - VPSHUFB Y1, Y3, Y3 - VPSHUFB Y1, Y4, Y1 - VBROADCASTI128 16(AX), Y4 - VBROADCASTI128 80(AX), Y9 - VPSHUFB Y2, Y4, Y4 - VPSHUFB Y2, Y9, Y2 - VPXOR Y3, Y4, Y3 - VPXOR Y1, Y2, Y1 - VPAND Y8, Y0, Y2 - VPSRLQ $0x04, Y8, Y4 - VPAND Y0, Y4, Y4 - VBROADCASTI128 32(AX), Y9 - VBROADCASTI128 96(AX), Y10 - VPSHUFB Y2, Y9, Y9 - VPSHUFB Y2, Y10, Y2 - VPXOR Y3, Y9, Y3 - VPXOR Y1, Y2, Y1 - VBROADCASTI128 48(AX), Y9 - VBROADCASTI128 112(AX), Y2 - VPSHUFB Y4, Y9, Y9 - VPSHUFB Y4, Y2, Y2 - XOR3WAY( $0x00, Y3, Y9, Y5) - XOR3WAY( $0x00, Y1, Y2, Y6) - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VMOVDQU Y5, (R10) - VMOVDQU Y6, 32(R10) - ADDQ $0x40, R10 - VMOVDQU Y7, (DX) - VMOVDQU Y8, 32(DX) - ADDQ $0x40, DX - SUBQ $0x40, SI - JNZ loop - VZEROUPPER - RET - -// func ifftDIT4_avx2_3(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·ifftDIT4_avx2_3(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), AX - MOVQ table02+48(FP), AX - MOVQ $0x0000000f, CX - MOVQ CX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), CX - MOVQ work_base+0(FP), DX - MOVQ 8(DX), BX - XORQ SI, SI - MOVQ (DX)(SI*1), DI - ADDQ CX, SI - MOVQ (DX)(SI*1), R8 - ADDQ CX, SI - MOVQ (DX)(SI*1), R9 - ADDQ CX, SI - MOVQ (DX)(SI*1), CX - -loop: - VMOVDQU (DI), Y1 - VMOVDQU 32(DI), Y2 - VMOVDQU (R8), Y3 - VMOVDQU 32(R8), Y4 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VMOVDQU (R9), Y5 - VMOVDQU 32(R9), Y6 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VPSRLQ $0x04, Y5, Y10 - VPAND Y0, Y5, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (AX), Y11 - VBROADCASTI128 64(AX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(AX), Y12 - VBROADCASTI128 80(AX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y6, Y0, Y10 - VPSRLQ $0x04, Y6, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(AX), Y13 - VBROADCASTI128 96(AX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(AX), Y13 - VBROADCASTI128 112(AX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y1) - XOR3WAY( $0x00, Y9, Y10, Y2) - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (AX), Y11 - VBROADCASTI128 64(AX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(AX), Y12 - VBROADCASTI128 80(AX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(AX), Y13 - VBROADCASTI128 96(AX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(AX), Y13 - VBROADCASTI128 112(AX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y3) - XOR3WAY( $0x00, Y9, Y10, Y4) - VMOVDQU Y1, (DI) - VMOVDQU Y2, 32(DI) - ADDQ $0x40, DI - VMOVDQU Y3, (R8) - VMOVDQU Y4, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y5, (R9) - VMOVDQU Y6, 32(R9) - ADDQ $0x40, R9 - VMOVDQU Y7, (CX) - VMOVDQU Y8, 32(CX) - ADDQ $0x40, CX - SUBQ $0x40, BX - JNZ loop - VZEROUPPER - RET - -// func fftDIT4_avx2_3(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·fftDIT4_avx2_3(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), AX - MOVQ table02+48(FP), CX - MOVQ $0x0000000f, CX - MOVQ CX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), CX - MOVQ work_base+0(FP), DX - MOVQ 8(DX), BX - XORQ SI, SI - MOVQ (DX)(SI*1), DI - ADDQ CX, SI - MOVQ (DX)(SI*1), R8 - ADDQ CX, SI - MOVQ (DX)(SI*1), R9 - ADDQ CX, SI - MOVQ (DX)(SI*1), CX - -loop: - VMOVDQU (DI), Y1 - VMOVDQU 32(DI), Y2 - VMOVDQU (R9), Y5 - VMOVDQU 32(R9), Y6 - VMOVDQU (R8), Y3 - VMOVDQU 32(R8), Y4 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VMOVDQU Y1, (DI) - VMOVDQU Y2, 32(DI) - ADDQ $0x40, DI - VMOVDQU Y3, (R8) - VMOVDQU Y4, 32(R8) - ADDQ $0x40, R8 - VPSRLQ $0x04, Y7, Y2 - VPAND Y0, Y7, Y1 - VPAND Y0, Y2, Y2 - VBROADCASTI128 (AX), Y3 - VBROADCASTI128 64(AX), Y4 - VPSHUFB Y1, Y3, Y3 - VPSHUFB Y1, Y4, Y1 - VBROADCASTI128 16(AX), Y4 - VBROADCASTI128 80(AX), Y9 - VPSHUFB Y2, Y4, Y4 - VPSHUFB Y2, Y9, Y2 - VPXOR Y3, Y4, Y3 - VPXOR Y1, Y2, Y1 - VPAND Y8, Y0, Y2 - VPSRLQ $0x04, Y8, Y4 - VPAND Y0, Y4, Y4 - VBROADCASTI128 32(AX), Y9 - VBROADCASTI128 96(AX), Y10 - VPSHUFB Y2, Y9, Y9 - VPSHUFB Y2, Y10, Y2 - VPXOR Y3, Y9, Y3 - VPXOR Y1, Y2, Y1 - VBROADCASTI128 48(AX), Y9 - VBROADCASTI128 112(AX), Y2 - VPSHUFB Y4, Y9, Y9 - VPSHUFB Y4, Y2, Y2 - XOR3WAY( $0x00, Y3, Y9, Y5) - XOR3WAY( $0x00, Y1, Y2, Y6) - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VMOVDQU Y5, (R9) - VMOVDQU Y6, 32(R9) - ADDQ $0x40, R9 - VMOVDQU Y7, (CX) - VMOVDQU Y8, 32(CX) - ADDQ $0x40, CX - SUBQ $0x40, BX - JNZ loop - VZEROUPPER - RET - -// func ifftDIT4_avx2_4(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·ifftDIT4_avx2_4(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), CX - MOVQ table02+48(FP), DX - MOVQ $0x0000000f, DX - MOVQ DX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), DX - MOVQ work_base+0(FP), BX - MOVQ 8(BX), SI - XORQ DI, DI - MOVQ (BX)(DI*1), R8 - ADDQ DX, DI - MOVQ (BX)(DI*1), R9 - ADDQ DX, DI - MOVQ (BX)(DI*1), R10 - ADDQ DX, DI - MOVQ (BX)(DI*1), DX - -loop: - VMOVDQU (R8), Y1 - VMOVDQU 32(R8), Y2 - VMOVDQU (R9), Y3 - VMOVDQU 32(R9), Y4 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VPSRLQ $0x04, Y3, Y6 - VPAND Y0, Y3, Y5 - VPAND Y0, Y6, Y6 - VBROADCASTI128 (AX), Y7 - VBROADCASTI128 64(AX), Y8 - VPSHUFB Y5, Y7, Y7 - VPSHUFB Y5, Y8, Y5 - VBROADCASTI128 16(AX), Y8 - VBROADCASTI128 80(AX), Y9 - VPSHUFB Y6, Y8, Y8 - VPSHUFB Y6, Y9, Y6 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y6, Y5 - VPAND Y4, Y0, Y6 - VPSRLQ $0x04, Y4, Y8 - VPAND Y0, Y8, Y8 - VBROADCASTI128 32(AX), Y9 - VBROADCASTI128 96(AX), Y10 - VPSHUFB Y6, Y9, Y9 - VPSHUFB Y6, Y10, Y6 - VPXOR Y7, Y9, Y7 - VPXOR Y5, Y6, Y5 - VBROADCASTI128 48(AX), Y9 - VBROADCASTI128 112(AX), Y6 - VPSHUFB Y8, Y9, Y9 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y7, Y9, Y1) - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU (R10), Y5 - VMOVDQU 32(R10), Y6 - VMOVDQU (DX), Y7 - VMOVDQU 32(DX), Y8 - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (CX), Y11 - VBROADCASTI128 64(CX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(CX), Y12 - VBROADCASTI128 80(CX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(CX), Y13 - VBROADCASTI128 96(CX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(CX), Y13 - VBROADCASTI128 112(CX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y5) - XOR3WAY( $0x00, Y9, Y10, Y6) - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VMOVDQU Y1, (R8) - VMOVDQU Y2, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y3, (R9) - VMOVDQU Y4, 32(R9) - ADDQ $0x40, R9 - VMOVDQU Y5, (R10) - VMOVDQU Y6, 32(R10) - ADDQ $0x40, R10 - VMOVDQU Y7, (DX) - VMOVDQU Y8, 32(DX) - ADDQ $0x40, DX - SUBQ $0x40, SI - JNZ loop - VZEROUPPER - RET - -// func fftDIT4_avx2_4(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·fftDIT4_avx2_4(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), CX - MOVQ table02+48(FP), CX - MOVQ $0x0000000f, DX - MOVQ DX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), DX - MOVQ work_base+0(FP), BX - MOVQ 8(BX), SI - XORQ DI, DI - MOVQ (BX)(DI*1), R8 - ADDQ DX, DI - MOVQ (BX)(DI*1), R9 - ADDQ DX, DI - MOVQ (BX)(DI*1), R10 - ADDQ DX, DI - MOVQ (BX)(DI*1), DX - -loop: - VMOVDQU (R8), Y1 - VMOVDQU 32(R8), Y2 - VMOVDQU (R10), Y5 - VMOVDQU 32(R10), Y6 - VMOVDQU (R9), Y3 - VMOVDQU 32(R9), Y4 - VMOVDQU (DX), Y7 - VMOVDQU 32(DX), Y8 - VPSRLQ $0x04, Y5, Y10 - VPAND Y0, Y5, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (CX), Y11 - VBROADCASTI128 64(CX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(CX), Y12 - VBROADCASTI128 80(CX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y6, Y0, Y10 - VPSRLQ $0x04, Y6, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(CX), Y13 - VBROADCASTI128 96(CX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(CX), Y13 - VBROADCASTI128 112(CX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y1) - XOR3WAY( $0x00, Y9, Y10, Y2) - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (CX), Y11 - VBROADCASTI128 64(CX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(CX), Y12 - VBROADCASTI128 80(CX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(CX), Y13 - VBROADCASTI128 96(CX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(CX), Y13 - VBROADCASTI128 112(CX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y3) - XOR3WAY( $0x00, Y9, Y10, Y4) - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VPSRLQ $0x04, Y3, Y10 - VPAND Y0, Y3, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (AX), Y11 - VBROADCASTI128 64(AX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(AX), Y12 - VBROADCASTI128 80(AX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y4, Y0, Y10 - VPSRLQ $0x04, Y4, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(AX), Y13 - VBROADCASTI128 96(AX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(AX), Y13 - VBROADCASTI128 112(AX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y1) - XOR3WAY( $0x00, Y9, Y10, Y2) - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VMOVDQU Y1, (R8) - VMOVDQU Y2, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y3, (R9) - VMOVDQU Y4, 32(R9) - ADDQ $0x40, R9 - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VMOVDQU Y5, (R10) - VMOVDQU Y6, 32(R10) - ADDQ $0x40, R10 - VMOVDQU Y7, (DX) - VMOVDQU Y8, 32(DX) - ADDQ $0x40, DX - SUBQ $0x40, SI - JNZ loop - VZEROUPPER - RET - -// func ifftDIT4_avx2_5(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·ifftDIT4_avx2_5(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), AX - MOVQ table02+48(FP), CX - MOVQ $0x0000000f, CX - MOVQ CX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), CX - MOVQ work_base+0(FP), DX - MOVQ 8(DX), BX - XORQ SI, SI - MOVQ (DX)(SI*1), DI - ADDQ CX, SI - MOVQ (DX)(SI*1), R8 - ADDQ CX, SI - MOVQ (DX)(SI*1), R9 - ADDQ CX, SI - MOVQ (DX)(SI*1), CX - -loop: - VMOVDQU (DI), Y1 - VMOVDQU 32(DI), Y2 - VMOVDQU (R8), Y3 - VMOVDQU 32(R8), Y4 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VMOVDQU (R9), Y5 - VMOVDQU 32(R9), Y6 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (AX), Y11 - VBROADCASTI128 64(AX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(AX), Y12 - VBROADCASTI128 80(AX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(AX), Y13 - VBROADCASTI128 96(AX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(AX), Y13 - VBROADCASTI128 112(AX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y5) - XOR3WAY( $0x00, Y9, Y10, Y6) - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VMOVDQU Y1, (DI) - VMOVDQU Y2, 32(DI) - ADDQ $0x40, DI - VMOVDQU Y3, (R8) - VMOVDQU Y4, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y5, (R9) - VMOVDQU Y6, 32(R9) - ADDQ $0x40, R9 - VMOVDQU Y7, (CX) - VMOVDQU Y8, 32(CX) - ADDQ $0x40, CX - SUBQ $0x40, BX - JNZ loop - VZEROUPPER - RET - -// func fftDIT4_avx2_5(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·fftDIT4_avx2_5(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), CX - MOVQ table02+48(FP), CX - MOVQ $0x0000000f, CX - MOVQ CX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), CX - MOVQ work_base+0(FP), DX - MOVQ 8(DX), BX - XORQ SI, SI - MOVQ (DX)(SI*1), DI - ADDQ CX, SI - MOVQ (DX)(SI*1), R8 - ADDQ CX, SI - MOVQ (DX)(SI*1), R9 - ADDQ CX, SI - MOVQ (DX)(SI*1), CX - -loop: - VMOVDQU (DI), Y1 - VMOVDQU 32(DI), Y2 - VMOVDQU (R9), Y5 - VMOVDQU 32(R9), Y6 - VMOVDQU (R8), Y3 - VMOVDQU 32(R8), Y4 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VPSRLQ $0x04, Y3, Y10 - VPAND Y0, Y3, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (AX), Y11 - VBROADCASTI128 64(AX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(AX), Y12 - VBROADCASTI128 80(AX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y4, Y0, Y10 - VPSRLQ $0x04, Y4, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(AX), Y13 - VBROADCASTI128 96(AX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(AX), Y13 - VBROADCASTI128 112(AX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y1) - XOR3WAY( $0x00, Y9, Y10, Y2) - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VMOVDQU Y1, (DI) - VMOVDQU Y2, 32(DI) - ADDQ $0x40, DI - VMOVDQU Y3, (R8) - VMOVDQU Y4, 32(R8) - ADDQ $0x40, R8 - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VMOVDQU Y5, (R9) - VMOVDQU Y6, 32(R9) - ADDQ $0x40, R9 - VMOVDQU Y7, (CX) - VMOVDQU Y8, 32(CX) - ADDQ $0x40, CX - SUBQ $0x40, BX - JNZ loop - VZEROUPPER - RET - -// func ifftDIT4_avx2_6(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·ifftDIT4_avx2_6(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), CX - MOVQ table02+48(FP), CX - MOVQ $0x0000000f, CX - MOVQ CX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), CX - MOVQ work_base+0(FP), DX - MOVQ 8(DX), BX - XORQ SI, SI - MOVQ (DX)(SI*1), DI - ADDQ CX, SI - MOVQ (DX)(SI*1), R8 - ADDQ CX, SI - MOVQ (DX)(SI*1), R9 - ADDQ CX, SI - MOVQ (DX)(SI*1), CX - -loop: - VMOVDQU (DI), Y1 - VMOVDQU 32(DI), Y2 - VMOVDQU (R8), Y3 - VMOVDQU 32(R8), Y4 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VPSRLQ $0x04, Y3, Y6 - VPAND Y0, Y3, Y5 - VPAND Y0, Y6, Y6 - VBROADCASTI128 (AX), Y7 - VBROADCASTI128 64(AX), Y8 - VPSHUFB Y5, Y7, Y7 - VPSHUFB Y5, Y8, Y5 - VBROADCASTI128 16(AX), Y8 - VBROADCASTI128 80(AX), Y9 - VPSHUFB Y6, Y8, Y8 - VPSHUFB Y6, Y9, Y6 - VPXOR Y7, Y8, Y7 - VPXOR Y5, Y6, Y5 - VPAND Y4, Y0, Y6 - VPSRLQ $0x04, Y4, Y8 - VPAND Y0, Y8, Y8 - VBROADCASTI128 32(AX), Y9 - VBROADCASTI128 96(AX), Y10 - VPSHUFB Y6, Y9, Y9 - VPSHUFB Y6, Y10, Y6 - VPXOR Y7, Y9, Y7 - VPXOR Y5, Y6, Y5 - VBROADCASTI128 48(AX), Y9 - VBROADCASTI128 112(AX), Y6 - VPSHUFB Y8, Y9, Y9 - VPSHUFB Y8, Y6, Y6 - XOR3WAY( $0x00, Y7, Y9, Y1) - XOR3WAY( $0x00, Y5, Y6, Y2) - VMOVDQU (R9), Y5 - VMOVDQU 32(R9), Y6 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VMOVDQU Y1, (DI) - VMOVDQU Y2, 32(DI) - ADDQ $0x40, DI - VMOVDQU Y3, (R8) - VMOVDQU Y4, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y5, (R9) - VMOVDQU Y6, 32(R9) - ADDQ $0x40, R9 - VMOVDQU Y7, (CX) - VMOVDQU Y8, 32(CX) - ADDQ $0x40, CX - SUBQ $0x40, BX - JNZ loop - VZEROUPPER - RET - -// func fftDIT4_avx2_6(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2 -TEXT ·fftDIT4_avx2_6(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), AX - MOVQ table02+48(FP), AX - MOVQ $0x0000000f, CX - MOVQ CX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), CX - MOVQ work_base+0(FP), DX - MOVQ 8(DX), BX - XORQ SI, SI - MOVQ (DX)(SI*1), DI - ADDQ CX, SI - MOVQ (DX)(SI*1), R8 - ADDQ CX, SI - MOVQ (DX)(SI*1), R9 - ADDQ CX, SI - MOVQ (DX)(SI*1), CX - -loop: - VMOVDQU (DI), Y1 - VMOVDQU 32(DI), Y2 - VMOVDQU (R9), Y5 - VMOVDQU 32(R9), Y6 - VMOVDQU (R8), Y3 - VMOVDQU 32(R8), Y4 - VMOVDQU (CX), Y7 - VMOVDQU 32(CX), Y8 - VPSRLQ $0x04, Y5, Y10 - VPAND Y0, Y5, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (AX), Y11 - VBROADCASTI128 64(AX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(AX), Y12 - VBROADCASTI128 80(AX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y6, Y0, Y10 - VPSRLQ $0x04, Y6, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(AX), Y13 - VBROADCASTI128 96(AX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(AX), Y13 - VBROADCASTI128 112(AX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y1) - XOR3WAY( $0x00, Y9, Y10, Y2) - VPSRLQ $0x04, Y7, Y10 - VPAND Y0, Y7, Y9 - VPAND Y0, Y10, Y10 - VBROADCASTI128 (AX), Y11 - VBROADCASTI128 64(AX), Y12 - VPSHUFB Y9, Y11, Y11 - VPSHUFB Y9, Y12, Y9 - VBROADCASTI128 16(AX), Y12 - VBROADCASTI128 80(AX), Y13 - VPSHUFB Y10, Y12, Y12 - VPSHUFB Y10, Y13, Y10 - VPXOR Y11, Y12, Y11 - VPXOR Y9, Y10, Y9 - VPAND Y8, Y0, Y10 - VPSRLQ $0x04, Y8, Y12 - VPAND Y0, Y12, Y12 - VBROADCASTI128 32(AX), Y13 - VBROADCASTI128 96(AX), Y14 - VPSHUFB Y10, Y13, Y13 - VPSHUFB Y10, Y14, Y10 - VPXOR Y11, Y13, Y11 - VPXOR Y9, Y10, Y9 - VBROADCASTI128 48(AX), Y13 - VBROADCASTI128 112(AX), Y10 - VPSHUFB Y12, Y13, Y13 - VPSHUFB Y12, Y10, Y10 - XOR3WAY( $0x00, Y11, Y13, Y3) - XOR3WAY( $0x00, Y9, Y10, Y4) - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y4, Y8, Y8 - VPXOR Y1, Y3, Y3 - VPXOR Y2, Y4, Y4 - VMOVDQU Y1, (DI) - VMOVDQU Y2, 32(DI) - ADDQ $0x40, DI - VMOVDQU Y3, (R8) - VMOVDQU Y4, 32(R8) - ADDQ $0x40, R8 - VPXOR Y5, Y7, Y7 - VPXOR Y6, Y8, Y8 - VMOVDQU Y5, (R9) - VMOVDQU Y6, 32(R9) - ADDQ $0x40, R9 - VMOVDQU Y7, (CX) - VMOVDQU Y8, 32(CX) - ADDQ $0x40, CX - SUBQ $0x40, BX - JNZ loop - VZEROUPPER - RET - -// func ifftDIT4_avx2_7(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, SSE2 -TEXT ·ifftDIT4_avx2_7(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), AX - MOVQ table02+48(FP), AX - MOVQ $0x0000000f, AX - MOVQ AX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), AX - MOVQ work_base+0(FP), CX - MOVQ 8(CX), DX - XORQ BX, BX - MOVQ (CX)(BX*1), SI - ADDQ AX, BX - MOVQ (CX)(BX*1), DI - ADDQ AX, BX - MOVQ (CX)(BX*1), R8 - ADDQ AX, BX - MOVQ (CX)(BX*1), AX - -loop: - VMOVDQU (SI), Y0 - VMOVDQU 32(SI), Y1 - VMOVDQU (DI), Y2 - VMOVDQU 32(DI), Y3 - VPXOR Y0, Y2, Y2 - VPXOR Y1, Y3, Y3 - VMOVDQU (R8), Y4 - VMOVDQU 32(R8), Y5 - VMOVDQU (AX), Y6 - VMOVDQU 32(AX), Y7 - VPXOR Y4, Y6, Y6 - VPXOR Y5, Y7, Y7 - VPXOR Y0, Y4, Y4 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VMOVDQU Y0, (SI) - VMOVDQU Y1, 32(SI) - ADDQ $0x40, SI - VMOVDQU Y2, (DI) - VMOVDQU Y3, 32(DI) - ADDQ $0x40, DI - VMOVDQU Y4, (R8) - VMOVDQU Y5, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y6, (AX) - VMOVDQU Y7, 32(AX) - ADDQ $0x40, AX - SUBQ $0x40, DX - JNZ loop - VZEROUPPER - RET - -// func fftDIT4_avx2_7(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8) -// Requires: AVX, AVX2, SSE2 -TEXT ·fftDIT4_avx2_7(SB), NOSPLIT, $0-56 - // dist must be multiplied by 24 (size of slice header) - MOVQ table01+32(FP), AX - MOVQ table23+40(FP), AX - MOVQ table02+48(FP), AX - MOVQ $0x0000000f, AX - MOVQ AX, X0 - VPBROADCASTB X0, Y0 - MOVQ dist+24(FP), AX - MOVQ work_base+0(FP), CX - MOVQ 8(CX), DX - XORQ BX, BX - MOVQ (CX)(BX*1), SI - ADDQ AX, BX - MOVQ (CX)(BX*1), DI - ADDQ AX, BX - MOVQ (CX)(BX*1), R8 - ADDQ AX, BX - MOVQ (CX)(BX*1), AX - -loop: - VMOVDQU (SI), Y0 - VMOVDQU 32(SI), Y1 - VMOVDQU (R8), Y4 - VMOVDQU 32(R8), Y5 - VMOVDQU (DI), Y2 - VMOVDQU 32(DI), Y3 - VMOVDQU (AX), Y6 - VMOVDQU 32(AX), Y7 - VPXOR Y0, Y4, Y4 - VPXOR Y1, Y5, Y5 - VPXOR Y2, Y6, Y6 - VPXOR Y3, Y7, Y7 - VPXOR Y0, Y2, Y2 - VPXOR Y1, Y3, Y3 - VMOVDQU Y0, (SI) - VMOVDQU Y1, 32(SI) - ADDQ $0x40, SI - VMOVDQU Y2, (DI) - VMOVDQU Y3, 32(DI) - ADDQ $0x40, DI - VPXOR Y4, Y6, Y6 - VPXOR Y5, Y7, Y7 - VMOVDQU Y4, (R8) - VMOVDQU Y5, 32(R8) - ADDQ $0x40, R8 - VMOVDQU Y6, (AX) - VMOVDQU Y7, 32(AX) - ADDQ $0x40, AX - SUBQ $0x40, DX - JNZ loop - VZEROUPPER - RET - -// func ifftDIT2_ssse3(x []byte, y []byte, table *[128]uint8) -// Requires: SSE, SSE2, SSSE3 -TEXT ·ifftDIT2_ssse3(SB), NOSPLIT, $0-56 - MOVQ table+48(FP), AX - MOVUPS (AX), X0 - MOVUPS 64(AX), X1 - MOVUPS 16(AX), X2 - MOVUPS 80(AX), X3 - MOVUPS 32(AX), X4 - MOVUPS 96(AX), X5 - XORPS X6, X6 - MOVQ $0x0000000f, CX - MOVQ CX, X7 - PSHUFB X6, X7 - MOVQ x_len+8(FP), CX - MOVQ x_base+0(FP), DX - MOVQ y_base+24(FP), BX - -loop: - MOVUPS (DX), X6 - MOVUPS 32(DX), X8 - MOVUPS (BX), X9 - MOVUPS 32(BX), X10 - PXOR X6, X9 - PXOR X8, X10 - MOVUPS X9, (BX) - MOVUPS X10, 32(BX) - MOVAPS X9, X11 - PSRLQ $0x04, X11 - MOVAPS X9, X9 - PAND X7, X9 - PAND X7, X11 - MOVUPS X0, X12 - MOVUPS X1, X13 - PSHUFB X9, X12 - PSHUFB X9, X13 - MOVUPS X2, X9 - MOVUPS X3, X14 - PSHUFB X11, X9 - PSHUFB X11, X14 - PXOR X9, X12 - PXOR X14, X13 - MOVAPS X10, X9 - MOVAPS X10, X10 - PAND X7, X9 - PSRLQ $0x04, X10 - PAND X7, X10 - MOVUPS X4, X11 - MOVUPS X5, X14 - PSHUFB X9, X11 - PSHUFB X9, X14 - PXOR X11, X12 - PXOR X14, X13 - MOVUPS 48(AX), X11 - MOVUPS 112(AX), X14 - PSHUFB X10, X11 - PSHUFB X10, X14 - PXOR X11, X12 - PXOR X14, X13 - PXOR X12, X6 - PXOR X13, X8 - MOVUPS X6, (DX) - MOVUPS X8, 32(DX) - MOVUPS 16(DX), X6 - MOVUPS 48(DX), X8 - MOVUPS 16(BX), X9 - MOVUPS 48(BX), X10 - PXOR X6, X9 - PXOR X8, X10 - MOVUPS X9, 16(BX) - MOVUPS X10, 48(BX) - MOVAPS X9, X11 - PSRLQ $0x04, X11 - MOVAPS X9, X9 - PAND X7, X9 - PAND X7, X11 - MOVUPS X0, X12 - MOVUPS X1, X13 - PSHUFB X9, X12 - PSHUFB X9, X13 - MOVUPS X2, X9 - MOVUPS X3, X14 - PSHUFB X11, X9 - PSHUFB X11, X14 - PXOR X9, X12 - PXOR X14, X13 - MOVAPS X10, X9 - MOVAPS X10, X10 - PAND X7, X9 - PSRLQ $0x04, X10 - PAND X7, X10 - MOVUPS X4, X11 - MOVUPS X5, X14 - PSHUFB X9, X11 - PSHUFB X9, X14 - PXOR X11, X12 - PXOR X14, X13 - MOVUPS 48(AX), X11 - MOVUPS 112(AX), X14 - PSHUFB X10, X11 - PSHUFB X10, X14 - PXOR X11, X12 - PXOR X14, X13 - PXOR X12, X6 - PXOR X13, X8 - MOVUPS X6, 16(DX) - MOVUPS X8, 48(DX) - ADDQ $0x40, DX - ADDQ $0x40, BX - SUBQ $0x40, CX - JNZ loop - RET - -// func fftDIT2_ssse3(x []byte, y []byte, table *[128]uint8) -// Requires: SSE, SSE2, SSSE3 -TEXT ·fftDIT2_ssse3(SB), NOSPLIT, $0-56 - MOVQ table+48(FP), AX - MOVUPS (AX), X0 - MOVUPS 64(AX), X1 - MOVUPS 16(AX), X2 - MOVUPS 80(AX), X3 - MOVUPS 32(AX), X4 - MOVUPS 96(AX), X5 - XORPS X6, X6 - MOVQ $0x0000000f, CX - MOVQ CX, X7 - PSHUFB X6, X7 - MOVQ x_len+8(FP), CX - MOVQ x_base+0(FP), DX - MOVQ y_base+24(FP), BX - -loop: - MOVUPS (BX), X9 - MOVUPS 32(BX), X10 - MOVAPS X9, X8 - PSRLQ $0x04, X8 - MOVAPS X9, X6 - PAND X7, X6 - PAND X7, X8 - MOVUPS X0, X11 - MOVUPS X1, X12 - PSHUFB X6, X11 - PSHUFB X6, X12 - MOVUPS X2, X6 - MOVUPS X3, X13 - PSHUFB X8, X6 - PSHUFB X8, X13 - PXOR X6, X11 - PXOR X13, X12 - MOVAPS X10, X6 - MOVAPS X10, X8 - PAND X7, X6 - PSRLQ $0x04, X8 - PAND X7, X8 - MOVUPS X4, X13 - MOVUPS X5, X14 - PSHUFB X6, X13 - PSHUFB X6, X14 - PXOR X13, X11 - PXOR X14, X12 - MOVUPS 48(AX), X13 - MOVUPS 112(AX), X14 - PSHUFB X8, X13 - PSHUFB X8, X14 - PXOR X13, X11 - PXOR X14, X12 - MOVUPS (DX), X6 - MOVUPS 32(DX), X8 - PXOR X11, X6 - PXOR X12, X8 - MOVUPS X6, (DX) - MOVUPS X8, 32(DX) - PXOR X6, X9 - PXOR X8, X10 - MOVUPS X9, (BX) - MOVUPS X10, 32(BX) - MOVUPS 16(BX), X9 - MOVUPS 48(BX), X10 - MOVAPS X9, X8 - PSRLQ $0x04, X8 - MOVAPS X9, X6 - PAND X7, X6 - PAND X7, X8 - MOVUPS X0, X11 - MOVUPS X1, X12 - PSHUFB X6, X11 - PSHUFB X6, X12 - MOVUPS X2, X6 - MOVUPS X3, X13 - PSHUFB X8, X6 - PSHUFB X8, X13 - PXOR X6, X11 - PXOR X13, X12 - MOVAPS X10, X6 - MOVAPS X10, X8 - PAND X7, X6 - PSRLQ $0x04, X8 - PAND X7, X8 - MOVUPS X4, X13 - MOVUPS X5, X14 - PSHUFB X6, X13 - PSHUFB X6, X14 - PXOR X13, X11 - PXOR X14, X12 - MOVUPS 48(AX), X13 - MOVUPS 112(AX), X14 - PSHUFB X8, X13 - PSHUFB X8, X14 - PXOR X13, X11 - PXOR X14, X12 - MOVUPS 16(DX), X6 - MOVUPS 48(DX), X8 - PXOR X11, X6 - PXOR X12, X8 - MOVUPS X6, 16(DX) - MOVUPS X8, 48(DX) - PXOR X6, X9 - PXOR X8, X10 - MOVUPS X9, 16(BX) - MOVUPS X10, 48(BX) - ADDQ $0x40, DX - ADDQ $0x40, BX - SUBQ $0x40, CX - JNZ loop - RET - -// func mulgf16_ssse3(x []byte, y []byte, table *[128]uint8) -// Requires: SSE, SSE2, SSSE3 -TEXT ·mulgf16_ssse3(SB), NOSPLIT, $0-56 - MOVQ table+48(FP), AX - MOVUPS (AX), X0 - MOVUPS 64(AX), X1 - MOVUPS 16(AX), X2 - MOVUPS 80(AX), X3 - MOVUPS 32(AX), X4 - MOVUPS 96(AX), X5 - MOVUPS 48(AX), X6 - MOVUPS 112(AX), X7 - MOVQ x_len+8(FP), AX - MOVQ x_base+0(FP), CX - MOVQ y_base+24(FP), DX - XORPS X8, X8 - MOVQ $0x0000000f, BX - MOVQ BX, X9 - PSHUFB X8, X9 - -loop: - MOVUPS (DX), X8 - MOVUPS 32(DX), X10 - MOVAPS X8, X11 - PSRLQ $0x04, X11 - MOVAPS X8, X8 - PAND X9, X8 - PAND X9, X11 - MOVUPS X0, X12 - MOVUPS X1, X13 - PSHUFB X8, X12 - PSHUFB X8, X13 - MOVUPS X2, X8 - MOVUPS X3, X14 - PSHUFB X11, X8 - PSHUFB X11, X14 - PXOR X8, X12 - PXOR X14, X13 - MOVAPS X10, X8 - MOVAPS X10, X10 - PAND X9, X8 - PSRLQ $0x04, X10 - PAND X9, X10 - MOVUPS X4, X11 - MOVUPS X5, X14 - PSHUFB X8, X11 - PSHUFB X8, X14 - PXOR X11, X12 - PXOR X14, X13 - MOVUPS X6, X11 - MOVUPS X7, X14 - PSHUFB X10, X11 - PSHUFB X10, X14 - PXOR X11, X12 - PXOR X14, X13 - MOVUPS X12, (CX) - MOVUPS X13, 32(CX) - MOVUPS 16(DX), X8 - MOVUPS 48(DX), X10 - MOVAPS X8, X11 - PSRLQ $0x04, X11 - MOVAPS X8, X8 - PAND X9, X8 - PAND X9, X11 - MOVUPS X0, X12 - MOVUPS X1, X13 - PSHUFB X8, X12 - PSHUFB X8, X13 - MOVUPS X2, X8 - MOVUPS X3, X14 - PSHUFB X11, X8 - PSHUFB X11, X14 - PXOR X8, X12 - PXOR X14, X13 - MOVAPS X10, X8 - MOVAPS X10, X10 - PAND X9, X8 - PSRLQ $0x04, X10 - PAND X9, X10 - MOVUPS X4, X11 - MOVUPS X5, X14 - PSHUFB X8, X11 - PSHUFB X8, X14 - PXOR X11, X12 - PXOR X14, X13 - MOVUPS X6, X11 - MOVUPS X7, X14 - PSHUFB X10, X11 - PSHUFB X10, X14 - PXOR X11, X12 - PXOR X14, X13 - MOVUPS X12, 16(CX) - MOVUPS X13, 48(CX) - ADDQ $0x40, CX - ADDQ $0x40, DX - SUBQ $0x40, AX - JNZ loop - RET diff --git a/vendor/github.com/klauspost/reedsolomon/galois_gen_none.go b/vendor/github.com/klauspost/reedsolomon/galois_gen_none.go deleted file mode 100644 index 303d6a9..0000000 --- a/vendor/github.com/klauspost/reedsolomon/galois_gen_none.go +++ /dev/null @@ -1,18 +0,0 @@ -//go:build !amd64 || noasm || appengine || gccgo || nogen -// +build !amd64 noasm appengine gccgo nogen - -package reedsolomon - -const maxAvx2Inputs = 1 -const maxAvx2Outputs = 1 -const minAvx2Size = 1 -const avxSizeMask = 0 -const avx2CodeGen = false - -func galMulSlicesAvx2(matrix []byte, in, out [][]byte, start, stop int) int { - panic("avx2 codegen not available") -} - -func galMulSlicesAvx2Xor(matrix []byte, in, out [][]byte, start, stop int) int { - panic("avx2 codegen not available") -} diff --git a/vendor/github.com/klauspost/reedsolomon/galois_gen_switch_amd64.go b/vendor/github.com/klauspost/reedsolomon/galois_gen_switch_amd64.go deleted file mode 100644 index 3078114..0000000 --- a/vendor/github.com/klauspost/reedsolomon/galois_gen_switch_amd64.go +++ /dev/null @@ -1,694 +0,0 @@ -// Code generated by command: go generate gen.go. DO NOT EDIT. - -//go:build !appengine && !noasm && gc && !nogen -// +build !appengine,!noasm,gc,!nogen - -package reedsolomon - -import ( - "fmt" -) - -const ( - avx2CodeGen = true - maxAvx2Inputs = 10 - maxAvx2Outputs = 10 - minAvx2Size = 64 - avxSizeMask = maxInt - (minAvx2Size - 1) -) - -func galMulSlicesAvx2(matrix []byte, in, out [][]byte, start, stop int) int { - n := (stop - start) & avxSizeMask - - switch len(in) { - case 1: - switch len(out) { - case 1: - mulAvxTwo_1x1_64(matrix, in, out, start, n) - return n - case 2: - mulAvxTwo_1x2_64(matrix, in, out, start, n) - return n - case 3: - mulAvxTwo_1x3_64(matrix, in, out, start, n) - return n - case 4: - mulAvxTwo_1x4(matrix, in, out, start, n) - return n - case 5: - mulAvxTwo_1x5(matrix, in, out, start, n) - return n - case 6: - mulAvxTwo_1x6(matrix, in, out, start, n) - return n - case 7: - mulAvxTwo_1x7(matrix, in, out, start, n) - return n - case 8: - mulAvxTwo_1x8(matrix, in, out, start, n) - return n - case 9: - mulAvxTwo_1x9(matrix, in, out, start, n) - return n - case 10: - mulAvxTwo_1x10(matrix, in, out, start, n) - return n - } - case 2: - switch len(out) { - case 1: - mulAvxTwo_2x1_64(matrix, in, out, start, n) - return n - case 2: - mulAvxTwo_2x2_64(matrix, in, out, start, n) - return n - case 3: - mulAvxTwo_2x3_64(matrix, in, out, start, n) - return n - case 4: - mulAvxTwo_2x4(matrix, in, out, start, n) - return n - case 5: - mulAvxTwo_2x5(matrix, in, out, start, n) - return n - case 6: - mulAvxTwo_2x6(matrix, in, out, start, n) - return n - case 7: - mulAvxTwo_2x7(matrix, in, out, start, n) - return n - case 8: - mulAvxTwo_2x8(matrix, in, out, start, n) - return n - case 9: - mulAvxTwo_2x9(matrix, in, out, start, n) - return n - case 10: - mulAvxTwo_2x10(matrix, in, out, start, n) - return n - } - case 3: - switch len(out) { - case 1: - mulAvxTwo_3x1_64(matrix, in, out, start, n) - return n - case 2: - mulAvxTwo_3x2_64(matrix, in, out, start, n) - return n - case 3: - mulAvxTwo_3x3_64(matrix, in, out, start, n) - return n - case 4: - mulAvxTwo_3x4(matrix, in, out, start, n) - return n - case 5: - mulAvxTwo_3x5(matrix, in, out, start, n) - return n - case 6: - mulAvxTwo_3x6(matrix, in, out, start, n) - return n - case 7: - mulAvxTwo_3x7(matrix, in, out, start, n) - return n - case 8: - mulAvxTwo_3x8(matrix, in, out, start, n) - return n - case 9: - mulAvxTwo_3x9(matrix, in, out, start, n) - return n - case 10: - mulAvxTwo_3x10(matrix, in, out, start, n) - return n - } - case 4: - switch len(out) { - case 1: - mulAvxTwo_4x1_64(matrix, in, out, start, n) - return n - case 2: - mulAvxTwo_4x2_64(matrix, in, out, start, n) - return n - case 3: - mulAvxTwo_4x3_64(matrix, in, out, start, n) - return n - case 4: - mulAvxTwo_4x4(matrix, in, out, start, n) - return n - case 5: - mulAvxTwo_4x5(matrix, in, out, start, n) - return n - case 6: - mulAvxTwo_4x6(matrix, in, out, start, n) - return n - case 7: - mulAvxTwo_4x7(matrix, in, out, start, n) - return n - case 8: - mulAvxTwo_4x8(matrix, in, out, start, n) - return n - case 9: - mulAvxTwo_4x9(matrix, in, out, start, n) - return n - case 10: - mulAvxTwo_4x10(matrix, in, out, start, n) - return n - } - case 5: - switch len(out) { - case 1: - mulAvxTwo_5x1_64(matrix, in, out, start, n) - return n - case 2: - mulAvxTwo_5x2_64(matrix, in, out, start, n) - return n - case 3: - mulAvxTwo_5x3_64(matrix, in, out, start, n) - return n - case 4: - mulAvxTwo_5x4(matrix, in, out, start, n) - return n - case 5: - mulAvxTwo_5x5(matrix, in, out, start, n) - return n - case 6: - mulAvxTwo_5x6(matrix, in, out, start, n) - return n - case 7: - mulAvxTwo_5x7(matrix, in, out, start, n) - return n - case 8: - mulAvxTwo_5x8(matrix, in, out, start, n) - return n - case 9: - mulAvxTwo_5x9(matrix, in, out, start, n) - return n - case 10: - mulAvxTwo_5x10(matrix, in, out, start, n) - return n - } - case 6: - switch len(out) { - case 1: - mulAvxTwo_6x1_64(matrix, in, out, start, n) - return n - case 2: - mulAvxTwo_6x2_64(matrix, in, out, start, n) - return n - case 3: - mulAvxTwo_6x3_64(matrix, in, out, start, n) - return n - case 4: - mulAvxTwo_6x4(matrix, in, out, start, n) - return n - case 5: - mulAvxTwo_6x5(matrix, in, out, start, n) - return n - case 6: - mulAvxTwo_6x6(matrix, in, out, start, n) - return n - case 7: - mulAvxTwo_6x7(matrix, in, out, start, n) - return n - case 8: - mulAvxTwo_6x8(matrix, in, out, start, n) - return n - case 9: - mulAvxTwo_6x9(matrix, in, out, start, n) - return n - case 10: - mulAvxTwo_6x10(matrix, in, out, start, n) - return n - } - case 7: - switch len(out) { - case 1: - mulAvxTwo_7x1_64(matrix, in, out, start, n) - return n - case 2: - mulAvxTwo_7x2_64(matrix, in, out, start, n) - return n - case 3: - mulAvxTwo_7x3_64(matrix, in, out, start, n) - return n - case 4: - mulAvxTwo_7x4(matrix, in, out, start, n) - return n - case 5: - mulAvxTwo_7x5(matrix, in, out, start, n) - return n - case 6: - mulAvxTwo_7x6(matrix, in, out, start, n) - return n - case 7: - mulAvxTwo_7x7(matrix, in, out, start, n) - return n - case 8: - mulAvxTwo_7x8(matrix, in, out, start, n) - return n - case 9: - mulAvxTwo_7x9(matrix, in, out, start, n) - return n - case 10: - mulAvxTwo_7x10(matrix, in, out, start, n) - return n - } - case 8: - switch len(out) { - case 1: - mulAvxTwo_8x1_64(matrix, in, out, start, n) - return n - case 2: - mulAvxTwo_8x2_64(matrix, in, out, start, n) - return n - case 3: - mulAvxTwo_8x3_64(matrix, in, out, start, n) - return n - case 4: - mulAvxTwo_8x4(matrix, in, out, start, n) - return n - case 5: - mulAvxTwo_8x5(matrix, in, out, start, n) - return n - case 6: - mulAvxTwo_8x6(matrix, in, out, start, n) - return n - case 7: - mulAvxTwo_8x7(matrix, in, out, start, n) - return n - case 8: - mulAvxTwo_8x8(matrix, in, out, start, n) - return n - case 9: - mulAvxTwo_8x9(matrix, in, out, start, n) - return n - case 10: - mulAvxTwo_8x10(matrix, in, out, start, n) - return n - } - case 9: - switch len(out) { - case 1: - mulAvxTwo_9x1_64(matrix, in, out, start, n) - return n - case 2: - mulAvxTwo_9x2_64(matrix, in, out, start, n) - return n - case 3: - mulAvxTwo_9x3_64(matrix, in, out, start, n) - return n - case 4: - mulAvxTwo_9x4(matrix, in, out, start, n) - return n - case 5: - mulAvxTwo_9x5(matrix, in, out, start, n) - return n - case 6: - mulAvxTwo_9x6(matrix, in, out, start, n) - return n - case 7: - mulAvxTwo_9x7(matrix, in, out, start, n) - return n - case 8: - mulAvxTwo_9x8(matrix, in, out, start, n) - return n - case 9: - mulAvxTwo_9x9(matrix, in, out, start, n) - return n - case 10: - mulAvxTwo_9x10(matrix, in, out, start, n) - return n - } - case 10: - switch len(out) { - case 1: - mulAvxTwo_10x1_64(matrix, in, out, start, n) - return n - case 2: - mulAvxTwo_10x2_64(matrix, in, out, start, n) - return n - case 3: - mulAvxTwo_10x3_64(matrix, in, out, start, n) - return n - case 4: - mulAvxTwo_10x4(matrix, in, out, start, n) - return n - case 5: - mulAvxTwo_10x5(matrix, in, out, start, n) - return n - case 6: - mulAvxTwo_10x6(matrix, in, out, start, n) - return n - case 7: - mulAvxTwo_10x7(matrix, in, out, start, n) - return n - case 8: - mulAvxTwo_10x8(matrix, in, out, start, n) - return n - case 9: - mulAvxTwo_10x9(matrix, in, out, start, n) - return n - case 10: - mulAvxTwo_10x10(matrix, in, out, start, n) - return n - } - } - panic(fmt.Sprintf("unhandled size: %dx%d", len(in), len(out))) -} - -func galMulSlicesAvx2Xor(matrix []byte, in, out [][]byte, start, stop int) int { - n := (stop - start) & avxSizeMask - - switch len(in) { - case 1: - switch len(out) { - case 1: - mulAvxTwo_1x1_64Xor(matrix, in, out, start, n) - return n - case 2: - mulAvxTwo_1x2_64Xor(matrix, in, out, start, n) - return n - case 3: - mulAvxTwo_1x3_64Xor(matrix, in, out, start, n) - return n - case 4: - mulAvxTwo_1x4Xor(matrix, in, out, start, n) - return n - case 5: - mulAvxTwo_1x5Xor(matrix, in, out, start, n) - return n - case 6: - mulAvxTwo_1x6Xor(matrix, in, out, start, n) - return n - case 7: - mulAvxTwo_1x7Xor(matrix, in, out, start, n) - return n - case 8: - mulAvxTwo_1x8Xor(matrix, in, out, start, n) - return n - case 9: - mulAvxTwo_1x9Xor(matrix, in, out, start, n) - return n - case 10: - mulAvxTwo_1x10Xor(matrix, in, out, start, n) - return n - } - case 2: - switch len(out) { - case 1: - mulAvxTwo_2x1_64Xor(matrix, in, out, start, n) - return n - case 2: - mulAvxTwo_2x2_64Xor(matrix, in, out, start, n) - return n - case 3: - mulAvxTwo_2x3_64Xor(matrix, in, out, start, n) - return n - case 4: - mulAvxTwo_2x4Xor(matrix, in, out, start, n) - return n - case 5: - mulAvxTwo_2x5Xor(matrix, in, out, start, n) - return n - case 6: - mulAvxTwo_2x6Xor(matrix, in, out, start, n) - return n - case 7: - mulAvxTwo_2x7Xor(matrix, in, out, start, n) - return n - case 8: - mulAvxTwo_2x8Xor(matrix, in, out, start, n) - return n - case 9: - mulAvxTwo_2x9Xor(matrix, in, out, start, n) - return n - case 10: - mulAvxTwo_2x10Xor(matrix, in, out, start, n) - return n - } - case 3: - switch len(out) { - case 1: - mulAvxTwo_3x1_64Xor(matrix, in, out, start, n) - return n - case 2: - mulAvxTwo_3x2_64Xor(matrix, in, out, start, n) - return n - case 3: - mulAvxTwo_3x3_64Xor(matrix, in, out, start, n) - return n - case 4: - mulAvxTwo_3x4Xor(matrix, in, out, start, n) - return n - case 5: - mulAvxTwo_3x5Xor(matrix, in, out, start, n) - return n - case 6: - mulAvxTwo_3x6Xor(matrix, in, out, start, n) - return n - case 7: - mulAvxTwo_3x7Xor(matrix, in, out, start, n) - return n - case 8: - mulAvxTwo_3x8Xor(matrix, in, out, start, n) - return n - case 9: - mulAvxTwo_3x9Xor(matrix, in, out, start, n) - return n - case 10: - mulAvxTwo_3x10Xor(matrix, in, out, start, n) - return n - } - case 4: - switch len(out) { - case 1: - mulAvxTwo_4x1_64Xor(matrix, in, out, start, n) - return n - case 2: - mulAvxTwo_4x2_64Xor(matrix, in, out, start, n) - return n - case 3: - mulAvxTwo_4x3_64Xor(matrix, in, out, start, n) - return n - case 4: - mulAvxTwo_4x4Xor(matrix, in, out, start, n) - return n - case 5: - mulAvxTwo_4x5Xor(matrix, in, out, start, n) - return n - case 6: - mulAvxTwo_4x6Xor(matrix, in, out, start, n) - return n - case 7: - mulAvxTwo_4x7Xor(matrix, in, out, start, n) - return n - case 8: - mulAvxTwo_4x8Xor(matrix, in, out, start, n) - return n - case 9: - mulAvxTwo_4x9Xor(matrix, in, out, start, n) - return n - case 10: - mulAvxTwo_4x10Xor(matrix, in, out, start, n) - return n - } - case 5: - switch len(out) { - case 1: - mulAvxTwo_5x1_64Xor(matrix, in, out, start, n) - return n - case 2: - mulAvxTwo_5x2_64Xor(matrix, in, out, start, n) - return n - case 3: - mulAvxTwo_5x3_64Xor(matrix, in, out, start, n) - return n - case 4: - mulAvxTwo_5x4Xor(matrix, in, out, start, n) - return n - case 5: - mulAvxTwo_5x5Xor(matrix, in, out, start, n) - return n - case 6: - mulAvxTwo_5x6Xor(matrix, in, out, start, n) - return n - case 7: - mulAvxTwo_5x7Xor(matrix, in, out, start, n) - return n - case 8: - mulAvxTwo_5x8Xor(matrix, in, out, start, n) - return n - case 9: - mulAvxTwo_5x9Xor(matrix, in, out, start, n) - return n - case 10: - mulAvxTwo_5x10Xor(matrix, in, out, start, n) - return n - } - case 6: - switch len(out) { - case 1: - mulAvxTwo_6x1_64Xor(matrix, in, out, start, n) - return n - case 2: - mulAvxTwo_6x2_64Xor(matrix, in, out, start, n) - return n - case 3: - mulAvxTwo_6x3_64Xor(matrix, in, out, start, n) - return n - case 4: - mulAvxTwo_6x4Xor(matrix, in, out, start, n) - return n - case 5: - mulAvxTwo_6x5Xor(matrix, in, out, start, n) - return n - case 6: - mulAvxTwo_6x6Xor(matrix, in, out, start, n) - return n - case 7: - mulAvxTwo_6x7Xor(matrix, in, out, start, n) - return n - case 8: - mulAvxTwo_6x8Xor(matrix, in, out, start, n) - return n - case 9: - mulAvxTwo_6x9Xor(matrix, in, out, start, n) - return n - case 10: - mulAvxTwo_6x10Xor(matrix, in, out, start, n) - return n - } - case 7: - switch len(out) { - case 1: - mulAvxTwo_7x1_64Xor(matrix, in, out, start, n) - return n - case 2: - mulAvxTwo_7x2_64Xor(matrix, in, out, start, n) - return n - case 3: - mulAvxTwo_7x3_64Xor(matrix, in, out, start, n) - return n - case 4: - mulAvxTwo_7x4Xor(matrix, in, out, start, n) - return n - case 5: - mulAvxTwo_7x5Xor(matrix, in, out, start, n) - return n - case 6: - mulAvxTwo_7x6Xor(matrix, in, out, start, n) - return n - case 7: - mulAvxTwo_7x7Xor(matrix, in, out, start, n) - return n - case 8: - mulAvxTwo_7x8Xor(matrix, in, out, start, n) - return n - case 9: - mulAvxTwo_7x9Xor(matrix, in, out, start, n) - return n - case 10: - mulAvxTwo_7x10Xor(matrix, in, out, start, n) - return n - } - case 8: - switch len(out) { - case 1: - mulAvxTwo_8x1_64Xor(matrix, in, out, start, n) - return n - case 2: - mulAvxTwo_8x2_64Xor(matrix, in, out, start, n) - return n - case 3: - mulAvxTwo_8x3_64Xor(matrix, in, out, start, n) - return n - case 4: - mulAvxTwo_8x4Xor(matrix, in, out, start, n) - return n - case 5: - mulAvxTwo_8x5Xor(matrix, in, out, start, n) - return n - case 6: - mulAvxTwo_8x6Xor(matrix, in, out, start, n) - return n - case 7: - mulAvxTwo_8x7Xor(matrix, in, out, start, n) - return n - case 8: - mulAvxTwo_8x8Xor(matrix, in, out, start, n) - return n - case 9: - mulAvxTwo_8x9Xor(matrix, in, out, start, n) - return n - case 10: - mulAvxTwo_8x10Xor(matrix, in, out, start, n) - return n - } - case 9: - switch len(out) { - case 1: - mulAvxTwo_9x1_64Xor(matrix, in, out, start, n) - return n - case 2: - mulAvxTwo_9x2_64Xor(matrix, in, out, start, n) - return n - case 3: - mulAvxTwo_9x3_64Xor(matrix, in, out, start, n) - return n - case 4: - mulAvxTwo_9x4Xor(matrix, in, out, start, n) - return n - case 5: - mulAvxTwo_9x5Xor(matrix, in, out, start, n) - return n - case 6: - mulAvxTwo_9x6Xor(matrix, in, out, start, n) - return n - case 7: - mulAvxTwo_9x7Xor(matrix, in, out, start, n) - return n - case 8: - mulAvxTwo_9x8Xor(matrix, in, out, start, n) - return n - case 9: - mulAvxTwo_9x9Xor(matrix, in, out, start, n) - return n - case 10: - mulAvxTwo_9x10Xor(matrix, in, out, start, n) - return n - } - case 10: - switch len(out) { - case 1: - mulAvxTwo_10x1_64Xor(matrix, in, out, start, n) - return n - case 2: - mulAvxTwo_10x2_64Xor(matrix, in, out, start, n) - return n - case 3: - mulAvxTwo_10x3_64Xor(matrix, in, out, start, n) - return n - case 4: - mulAvxTwo_10x4Xor(matrix, in, out, start, n) - return n - case 5: - mulAvxTwo_10x5Xor(matrix, in, out, start, n) - return n - case 6: - mulAvxTwo_10x6Xor(matrix, in, out, start, n) - return n - case 7: - mulAvxTwo_10x7Xor(matrix, in, out, start, n) - return n - case 8: - mulAvxTwo_10x8Xor(matrix, in, out, start, n) - return n - case 9: - mulAvxTwo_10x9Xor(matrix, in, out, start, n) - return n - case 10: - mulAvxTwo_10x10Xor(matrix, in, out, start, n) - return n - } - } - panic(fmt.Sprintf("unhandled size: %dx%d", len(in), len(out))) -} diff --git a/vendor/github.com/klauspost/reedsolomon/galois_noasm.go b/vendor/github.com/klauspost/reedsolomon/galois_noasm.go deleted file mode 100644 index 47e24d7..0000000 --- a/vendor/github.com/klauspost/reedsolomon/galois_noasm.go +++ /dev/null @@ -1,69 +0,0 @@ -//go:build (!amd64 || noasm || appengine || gccgo) && (!arm64 || noasm || appengine || gccgo) && (!ppc64le || noasm || appengine || gccgo) -// +build !amd64 noasm appengine gccgo -// +build !arm64 noasm appengine gccgo -// +build !ppc64le noasm appengine gccgo - -// Copyright 2015, Klaus Post, see LICENSE for details. - -package reedsolomon - -func galMulSlice(c byte, in, out []byte, o *options) { - out = out[:len(in)] - if c == 1 { - copy(out, in) - return - } - mt := mulTable[c][:256] - for n, input := range in { - out[n] = mt[input] - } -} - -func galMulSliceXor(c byte, in, out []byte, o *options) { - out = out[:len(in)] - if c == 1 { - sliceXor(in, out, o) - return - } - mt := mulTable[c][:256] - for n, input := range in { - out[n] ^= mt[input] - } -} - -// simple slice xor -func sliceXor(in, out []byte, o *options) { - sliceXorGo(in, out, o) -} - -func init() { - defaultOptions.useAVX512 = false -} - -// 4-way butterfly -func ifftDIT4(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) { - ifftDIT4Ref(work, dist, log_m01, log_m23, log_m02, o) -} - -// 4-way butterfly -func fftDIT4(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) { - fftDIT4Ref(work, dist, log_m01, log_m23, log_m02, o) -} - -// 2-way butterfly forward -func fftDIT2(x, y []byte, log_m ffe, o *options) { - // Reference version: - refMulAdd(x, y, log_m) - sliceXorGo(x, y, o) -} - -// 2-way butterfly inverse -func ifftDIT2(x, y []byte, log_m ffe, o *options) { - // Reference version: - sliceXorGo(x, y, o) - refMulAdd(x, y, log_m) -} - -func mulgf16(x, y []byte, log_m ffe, o *options) { - refMul(x, y, log_m) -} diff --git a/vendor/github.com/klauspost/reedsolomon/galois_notamd64.go b/vendor/github.com/klauspost/reedsolomon/galois_notamd64.go deleted file mode 100644 index e67905b..0000000 --- a/vendor/github.com/klauspost/reedsolomon/galois_notamd64.go +++ /dev/null @@ -1,14 +0,0 @@ -//go:build !amd64 || noasm || appengine || gccgo -// +build !amd64 noasm appengine gccgo - -// Copyright 2020, Klaus Post, see LICENSE for details. - -package reedsolomon - -func (r *reedSolomon) codeSomeShardsAvx512(matrixRows, inputs, outputs [][]byte, byteCount int) { - panic("codeSomeShardsAvx512 should not be called if built without asm") -} - -func (r *reedSolomon) codeSomeShardsAvx512P(matrixRows, inputs, outputs [][]byte, byteCount int) { - panic("codeSomeShardsAvx512P should not be called if built without asm") -} diff --git a/vendor/github.com/klauspost/reedsolomon/galois_ppc64le.go b/vendor/github.com/klauspost/reedsolomon/galois_ppc64le.go deleted file mode 100644 index 415828a..0000000 --- a/vendor/github.com/klauspost/reedsolomon/galois_ppc64le.go +++ /dev/null @@ -1,102 +0,0 @@ -//go:build !noasm && !appengine && !gccgo -// +build !noasm,!appengine,!gccgo - -// Copyright 2015, Klaus Post, see LICENSE for details. -// Copyright 2018, Minio, Inc. - -package reedsolomon - -//go:noescape -func galMulPpc(low, high, in, out []byte) - -//go:noescape -func galMulPpcXor(low, high, in, out []byte) - -// This is what the assembler routines do in blocks of 16 bytes: -/* -func galMulPpc(low, high, in, out []byte) { - for n, input := range in { - l := input & 0xf - h := input >> 4 - out[n] = low[l] ^ high[h] - } -} -func galMulPpcXor(low, high, in, out []byte) { - for n, input := range in { - l := input & 0xf - h := input >> 4 - out[n] ^= low[l] ^ high[h] - } -} -*/ - -func galMulSlice(c byte, in, out []byte, o *options) { - if c == 1 { - copy(out, in) - return - } - done := (len(in) >> 4) << 4 - if done > 0 { - galMulPpc(mulTableLow[c][:], mulTableHigh[c][:], in[:done], out) - } - remain := len(in) - done - if remain > 0 { - mt := mulTable[c][:256] - for i := done; i < len(in); i++ { - out[i] = mt[in[i]] - } - } -} - -func galMulSliceXor(c byte, in, out []byte, o *options) { - if c == 1 { - sliceXor(in, out, o) - return - } - done := (len(in) >> 4) << 4 - if done > 0 { - galMulPpcXor(mulTableLow[c][:], mulTableHigh[c][:], in[:done], out) - } - remain := len(in) - done - if remain > 0 { - mt := mulTable[c][:256] - for i := done; i < len(in); i++ { - out[i] ^= mt[in[i]] - } - } -} - -// slice galois add -func sliceXor(in, out []byte, o *options) { - for n, input := range in { - out[n] ^= input - } -} - -// 4-way butterfly -func ifftDIT4(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) { - ifftDIT4Ref(work, dist, log_m01, log_m23, log_m02, o) -} - -// 4-way butterfly -func fftDIT4(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) { - fftDIT4Ref(work, dist, log_m01, log_m23, log_m02, o) -} - -// 2-way butterfly forward -func fftDIT2(x, y []byte, log_m ffe, o *options) { - // Reference version: - refMulAdd(x, y, log_m) - sliceXor(x, y, o) -} - -// 2-way butterfly inverse -func ifftDIT2(x, y []byte, log_m ffe, o *options) { - // Reference version: - sliceXor(x, y, o) - refMulAdd(x, y, log_m) -} - -func mulgf16(x, y []byte, log_m ffe, o *options) { - refMul(x, y, log_m) -} diff --git a/vendor/github.com/klauspost/reedsolomon/galois_ppc64le.s b/vendor/github.com/klauspost/reedsolomon/galois_ppc64le.s deleted file mode 100644 index 7213c61..0000000 --- a/vendor/github.com/klauspost/reedsolomon/galois_ppc64le.s +++ /dev/null @@ -1,126 +0,0 @@ -//+build !noasm -//+build !appengine -//+build !gccgo - -// Copyright 2015, Klaus Post, see LICENSE for details. -// Copyright 2018, Minio, Inc. - -#include "textflag.h" - -#define LOW R3 -#define HIGH R4 -#define IN R5 -#define LEN R6 -#define OUT R7 -#define CONSTANTS R8 -#define OFFSET R9 -#define OFFSET1 R10 -#define OFFSET2 R11 - -#define X6 VS34 -#define X6_ V2 -#define X7 VS35 -#define X7_ V3 -#define MSG VS36 -#define MSG_ V4 -#define MSG_HI VS37 -#define MSG_HI_ V5 -#define RESULT VS38 -#define RESULT_ V6 -#define ROTATE VS39 -#define ROTATE_ V7 -#define MASK VS40 -#define MASK_ V8 -#define FLIP VS41 -#define FLIP_ V9 - -// func galMulPpc(low, high, in, out []byte) -TEXT ·galMulPpc(SB), NOFRAME|NOSPLIT, $0-96 - MOVD low+0(FP), LOW - MOVD high+24(FP), HIGH - MOVD in+48(FP), IN - MOVD in_len+56(FP), LEN - MOVD out+72(FP), OUT - - MOVD $16, OFFSET1 - MOVD $32, OFFSET2 - - MOVD $·constants(SB), CONSTANTS - LXVD2X (CONSTANTS)(R0), ROTATE - LXVD2X (CONSTANTS)(OFFSET1), MASK - LXVD2X (CONSTANTS)(OFFSET2), FLIP - - LXVD2X (LOW)(R0), X6 - LXVD2X (HIGH)(R0), X7 - VPERM X6_, V31, FLIP_, X6_ - VPERM X7_, V31, FLIP_, X7_ - - MOVD $0, OFFSET - -loop: - LXVD2X (IN)(OFFSET), MSG - - VSRB MSG_, ROTATE_, MSG_HI_ - VAND MSG_, MASK_, MSG_ - VPERM X6_, V31, MSG_, MSG_ - VPERM X7_, V31, MSG_HI_, MSG_HI_ - - VXOR MSG_, MSG_HI_, MSG_ - - STXVD2X MSG, (OUT)(OFFSET) - - ADD $16, OFFSET, OFFSET - CMP LEN, OFFSET - BGT loop - RET - -// func galMulPpcXorlow, high, in, out []byte) -TEXT ·galMulPpcXor(SB), NOFRAME|NOSPLIT, $0-96 - MOVD low+0(FP), LOW - MOVD high+24(FP), HIGH - MOVD in+48(FP), IN - MOVD in_len+56(FP), LEN - MOVD out+72(FP), OUT - - MOVD $16, OFFSET1 - MOVD $32, OFFSET2 - - MOVD $·constants(SB), CONSTANTS - LXVD2X (CONSTANTS)(R0), ROTATE - LXVD2X (CONSTANTS)(OFFSET1), MASK - LXVD2X (CONSTANTS)(OFFSET2), FLIP - - LXVD2X (LOW)(R0), X6 - LXVD2X (HIGH)(R0), X7 - VPERM X6_, V31, FLIP_, X6_ - VPERM X7_, V31, FLIP_, X7_ - - MOVD $0, OFFSET - -loopXor: - LXVD2X (IN)(OFFSET), MSG - LXVD2X (OUT)(OFFSET), RESULT - - VSRB MSG_, ROTATE_, MSG_HI_ - VAND MSG_, MASK_, MSG_ - VPERM X6_, V31, MSG_, MSG_ - VPERM X7_, V31, MSG_HI_, MSG_HI_ - - VXOR MSG_, MSG_HI_, MSG_ - VXOR MSG_, RESULT_, RESULT_ - - STXVD2X RESULT, (OUT)(OFFSET) - - ADD $16, OFFSET, OFFSET - CMP LEN, OFFSET - BGT loopXor - RET - -DATA ·constants+0x0(SB)/8, $0x0404040404040404 -DATA ·constants+0x8(SB)/8, $0x0404040404040404 -DATA ·constants+0x10(SB)/8, $0x0f0f0f0f0f0f0f0f -DATA ·constants+0x18(SB)/8, $0x0f0f0f0f0f0f0f0f -DATA ·constants+0x20(SB)/8, $0x0706050403020100 -DATA ·constants+0x28(SB)/8, $0x0f0e0d0c0b0a0908 - -GLOBL ·constants(SB), 8, $48 diff --git a/vendor/github.com/klauspost/reedsolomon/inversion_tree.go b/vendor/github.com/klauspost/reedsolomon/inversion_tree.go deleted file mode 100644 index 3f97f81..0000000 --- a/vendor/github.com/klauspost/reedsolomon/inversion_tree.go +++ /dev/null @@ -1,164 +0,0 @@ -/** - * A thread-safe tree which caches inverted matrices. - * - * Copyright 2016, Peter Collins - */ - -package reedsolomon - -import ( - "errors" - "sync" -) - -// The tree uses a Reader-Writer mutex to make it thread-safe -// when accessing cached matrices and inserting new ones. -type inversionTree struct { - mutex sync.RWMutex - root inversionNode -} - -type inversionNode struct { - matrix matrix - children []*inversionNode -} - -// newInversionTree initializes a tree for storing inverted matrices. -// Note that the root node is the identity matrix as it implies -// there were no errors with the original data. -func newInversionTree(dataShards, parityShards int) *inversionTree { - identity, _ := identityMatrix(dataShards) - return &inversionTree{ - root: inversionNode{ - matrix: identity, - children: make([]*inversionNode, dataShards+parityShards), - }, - } -} - -// GetInvertedMatrix returns the cached inverted matrix or nil if it -// is not found in the tree keyed on the indices of invalid rows. -func (t *inversionTree) GetInvertedMatrix(invalidIndices []int) matrix { - if t == nil { - return nil - } - // Lock the tree for reading before accessing the tree. - t.mutex.RLock() - defer t.mutex.RUnlock() - - // If no invalid indices were give we should return the root - // identity matrix. - if len(invalidIndices) == 0 { - return t.root.matrix - } - - // Recursively search for the inverted matrix in the tree, passing in - // 0 as the parent index as we start at the root of the tree. - return t.root.getInvertedMatrix(invalidIndices, 0) -} - -// errAlreadySet is returned if the root node matrix is overwritten -var errAlreadySet = errors.New("the root node identity matrix is already set") - -// InsertInvertedMatrix inserts a new inverted matrix into the tree -// keyed by the indices of invalid rows. The total number of shards -// is required for creating the proper length lists of child nodes for -// each node. -func (t *inversionTree) InsertInvertedMatrix(invalidIndices []int, matrix matrix, shards int) error { - if t == nil { - return nil - } - // If no invalid indices were given then we are done because the - // root node is already set with the identity matrix. - if len(invalidIndices) == 0 { - return errAlreadySet - } - - if !matrix.IsSquare() { - return errNotSquare - } - - // Lock the tree for writing and reading before accessing the tree. - t.mutex.Lock() - defer t.mutex.Unlock() - - // Recursively create nodes for the inverted matrix in the tree until - // we reach the node to insert the matrix to. We start by passing in - // 0 as the parent index as we start at the root of the tree. - t.root.insertInvertedMatrix(invalidIndices, matrix, shards, 0) - - return nil -} - -func (n *inversionNode) getInvertedMatrix(invalidIndices []int, parent int) matrix { - // Get the child node to search next from the list of children. The - // list of children starts relative to the parent index passed in - // because the indices of invalid rows is sorted (by default). As we - // search recursively, the first invalid index gets popped off the list, - // so when searching through the list of children, use that first invalid - // index to find the child node. - firstIndex := invalidIndices[0] - node := n.children[firstIndex-parent] - - // If the child node doesn't exist in the list yet, fail fast by - // returning, so we can construct and insert the proper inverted matrix. - if node == nil { - return nil - } - - // If there's more than one invalid index left in the list we should - // keep searching recursively. - if len(invalidIndices) > 1 { - // Search recursively on the child node by passing in the invalid indices - // with the first index popped off the front. Also the parent index to - // pass down is the first index plus one. - return node.getInvertedMatrix(invalidIndices[1:], firstIndex+1) - } - // If there aren't any more invalid indices to search, we've found our - // node. Return it, however keep in mind that the matrix could still be - // nil because intermediary nodes in the tree are created sometimes with - // their inversion matrices uninitialized. - return node.matrix -} - -func (n *inversionNode) insertInvertedMatrix(invalidIndices []int, matrix matrix, shards, parent int) { - // As above, get the child node to search next from the list of children. - // The list of children starts relative to the parent index passed in - // because the indices of invalid rows is sorted (by default). As we - // search recursively, the first invalid index gets popped off the list, - // so when searching through the list of children, use that first invalid - // index to find the child node. - firstIndex := invalidIndices[0] - node := n.children[firstIndex-parent] - - // If the child node doesn't exist in the list yet, create a new - // node because we have the writer lock and add it to the list - // of children. - if node == nil { - // Make the length of the list of children equal to the number - // of shards minus the first invalid index because the list of - // invalid indices is sorted, so only this length of errors - // are possible in the tree. - node = &inversionNode{ - children: make([]*inversionNode, shards-firstIndex), - } - // Insert the new node into the tree at the first index relative - // to the parent index that was given in this recursive call. - n.children[firstIndex-parent] = node - } - - // If there's more than one invalid index left in the list we should - // keep searching recursively in order to find the node to add our - // matrix. - if len(invalidIndices) > 1 { - // As above, search recursively on the child node by passing in - // the invalid indices with the first index popped off the front. - // Also the total number of shards and parent index are passed down - // which is equal to the first index plus one. - node.insertInvertedMatrix(invalidIndices[1:], matrix, shards, firstIndex+1) - } else { - // If there aren't any more invalid indices to search, we've found our - // node. Cache the inverted matrix in this node. - node.matrix = matrix - } -} diff --git a/vendor/github.com/klauspost/reedsolomon/leopard.go b/vendor/github.com/klauspost/reedsolomon/leopard.go deleted file mode 100644 index e9d122a..0000000 --- a/vendor/github.com/klauspost/reedsolomon/leopard.go +++ /dev/null @@ -1,1234 +0,0 @@ -package reedsolomon - -// This is a O(n*log n) implementation of Reed-Solomon -// codes, ported from the C++ library https://github.com/catid/leopard. -// -// The implementation is based on the paper -// -// S.-J. Lin, T. Y. Al-Naffouri, Y. S. Han, and W.-H. Chung, -// "Novel Polynomial Basis with Fast Fourier Transform -// and Its Application to Reed-Solomon Erasure Codes" -// IEEE Trans. on Information Theory, pp. 6284-6299, November, 2016. - -import ( - "bytes" - "io" - "math/bits" - "sync" - "unsafe" - - "github.com/klauspost/cpuid/v2" -) - -// leopardFF16 is like reedSolomon but for more than 256 total shards. -type leopardFF16 struct { - dataShards int // Number of data shards, should not be modified. - parityShards int // Number of parity shards, should not be modified. - totalShards int // Total number of shards. Calculated, and should not be modified. - - workPool sync.Pool - - o options -} - -// newFF16 is like New, but for more than 256 total shards. -func newFF16(dataShards, parityShards int, opt options) (*leopardFF16, error) { - initConstants() - - if dataShards <= 0 || parityShards <= 0 { - return nil, ErrInvShardNum - } - - if dataShards+parityShards > 65536 { - return nil, ErrMaxShardNum - } - - r := &leopardFF16{ - dataShards: dataShards, - parityShards: parityShards, - totalShards: dataShards + parityShards, - o: opt, - } - return r, nil -} - -var _ = Extensions(&leopardFF16{}) - -func (r *leopardFF16) ShardSizeMultiple() int { - return 64 -} - -func (r *leopardFF16) DataShards() int { - return r.dataShards -} - -func (r *leopardFF16) ParityShards() int { - return r.parityShards -} - -func (r *leopardFF16) TotalShards() int { - return r.parityShards -} - -type ffe uint16 - -const ( - bitwidth = 16 - order = 1 << bitwidth - modulus = order - 1 - polynomial = 0x1002D -) - -var ( - fftSkew *[modulus]ffe - logWalsh *[order]ffe -) - -// Logarithm Tables -var ( - logLUT *[order]ffe - expLUT *[order]ffe -) - -// Stores the partial products of x * y at offset x + y * 65536 -// Repeated accesses from the same y value are faster -var mul16LUTs *[order]mul16LUT - -type mul16LUT struct { - // Contains Lo product as a single lookup. - // Should be XORed with Hi lookup for result. - Lo [256]ffe - Hi [256]ffe -} - -// Stores lookup for avx2 -var multiply256LUT *[order][8 * 16]byte - -func (r *leopardFF16) Encode(shards [][]byte) error { - if len(shards) != r.totalShards { - return ErrTooFewShards - } - - if err := checkShards(shards, false); err != nil { - return err - } - return r.encode(shards) -} - -func (r *leopardFF16) encode(shards [][]byte) error { - shardSize := shardSize(shards) - if shardSize%64 != 0 { - return ErrShardSize - } - - m := ceilPow2(r.parityShards) - var work [][]byte - if w, ok := r.workPool.Get().([][]byte); ok { - work = w - } - if cap(work) >= m*2 { - work = work[:m*2] - } else { - work = make([][]byte, m*2) - } - for i := range work { - if cap(work[i]) < shardSize { - work[i] = make([]byte, shardSize) - } else { - work[i] = work[i][:shardSize] - } - } - defer r.workPool.Put(work) - - mtrunc := m - if r.dataShards < mtrunc { - mtrunc = r.dataShards - } - - skewLUT := fftSkew[m-1:] - - sh := shards - ifftDITEncoder( - sh[:r.dataShards], - mtrunc, - work, - nil, // No xor output - m, - skewLUT, - &r.o, - ) - - lastCount := r.dataShards % m - if m >= r.dataShards { - goto skip_body - } - - // For sets of m data pieces: - for i := m; i+m <= r.dataShards; i += m { - sh = sh[m:] - skewLUT = skewLUT[m:] - - // work <- work xor IFFT(data + i, m, m + i) - - ifftDITEncoder( - sh, // data source - m, - work[m:], // temporary workspace - work, // xor destination - m, - skewLUT, - &r.o, - ) - } - - // Handle final partial set of m pieces: - if lastCount != 0 { - sh = sh[m:] - skewLUT = skewLUT[m:] - - // work <- work xor IFFT(data + i, m, m + i) - - ifftDITEncoder( - sh, // data source - lastCount, - work[m:], // temporary workspace - work, // xor destination - m, - skewLUT, - &r.o, - ) - } - -skip_body: - // work <- FFT(work, m, 0) - fftDIT(work, r.parityShards, m, fftSkew[:], &r.o) - - for i, w := range work[:r.parityShards] { - sh := shards[i+r.dataShards] - if cap(sh) >= shardSize { - sh = append(sh[:0], w...) - } else { - sh = w - } - shards[i+r.dataShards] = sh - } - - return nil -} - -func (r *leopardFF16) EncodeIdx(dataShard []byte, idx int, parity [][]byte) error { - return ErrNotSupported -} - -func (r *leopardFF16) Join(dst io.Writer, shards [][]byte, outSize int) error { - // Do we have enough shards? - if len(shards) < r.dataShards { - return ErrTooFewShards - } - shards = shards[:r.dataShards] - - // Do we have enough data? - size := 0 - for _, shard := range shards { - if shard == nil { - return ErrReconstructRequired - } - size += len(shard) - - // Do we have enough data already? - if size >= outSize { - break - } - } - if size < outSize { - return ErrShortData - } - - // Copy data to dst - write := outSize - for _, shard := range shards { - if write < len(shard) { - _, err := dst.Write(shard[:write]) - return err - } - n, err := dst.Write(shard) - if err != nil { - return err - } - write -= n - } - return nil -} - -func (r *leopardFF16) Update(shards [][]byte, newDatashards [][]byte) error { - return ErrNotSupported -} - -func (r *leopardFF16) Split(data []byte) ([][]byte, error) { - if len(data) == 0 { - return nil, ErrShortData - } - dataLen := len(data) - // Calculate number of bytes per data shard. - perShard := (len(data) + r.dataShards - 1) / r.dataShards - perShard = ((perShard + 63) / 64) * 64 - - if cap(data) > len(data) { - data = data[:cap(data)] - } - - // Only allocate memory if necessary - var padding []byte - if len(data) < (r.totalShards * perShard) { - // calculate maximum number of full shards in `data` slice - fullShards := len(data) / perShard - padding = make([]byte, r.totalShards*perShard-perShard*fullShards) - copy(padding, data[perShard*fullShards:]) - data = data[0 : perShard*fullShards] - } else { - for i := dataLen; i < dataLen+r.dataShards; i++ { - data[i] = 0 - } - } - - // Split into equal-length shards. - dst := make([][]byte, r.totalShards) - i := 0 - for ; i < len(dst) && len(data) >= perShard; i++ { - dst[i] = data[:perShard:perShard] - data = data[perShard:] - } - - for j := 0; i+j < len(dst); j++ { - dst[i+j] = padding[:perShard:perShard] - padding = padding[perShard:] - } - - return dst, nil -} - -func (r *leopardFF16) ReconstructSome(shards [][]byte, required []bool) error { - return r.ReconstructData(shards) -} - -func (r *leopardFF16) Reconstruct(shards [][]byte) error { - return r.reconstruct(shards, true) -} - -func (r *leopardFF16) ReconstructData(shards [][]byte) error { - return r.reconstruct(shards, false) -} - -func (r *leopardFF16) Verify(shards [][]byte) (bool, error) { - if len(shards) != r.totalShards { - return false, ErrTooFewShards - } - if err := checkShards(shards, false); err != nil { - return false, err - } - - // Re-encode parity shards to temporary storage. - shardSize := len(shards[0]) - outputs := make([][]byte, r.totalShards) - copy(outputs, shards[:r.dataShards]) - for i := r.dataShards; i < r.totalShards; i++ { - outputs[i] = make([]byte, shardSize) - } - if err := r.Encode(outputs); err != nil { - return false, err - } - - // Compare. - for i := r.dataShards; i < r.totalShards; i++ { - if !bytes.Equal(outputs[i], shards[i]) { - return false, nil - } - } - return true, nil -} - -func (r *leopardFF16) reconstruct(shards [][]byte, recoverAll bool) error { - if len(shards) != r.totalShards { - return ErrTooFewShards - } - - if err := checkShards(shards, true); err != nil { - return err - } - - // Quick check: are all of the shards present? If so, there's - // nothing to do. - numberPresent := 0 - dataPresent := 0 - for i := 0; i < r.totalShards; i++ { - if len(shards[i]) != 0 { - numberPresent++ - if i < r.dataShards { - dataPresent++ - } - } - } - if numberPresent == r.totalShards || !recoverAll && dataPresent == r.dataShards { - // Cool. All of the shards have data. We don't - // need to do anything. - return nil - } - - // Use only if we are missing less than 1/4 parity. - useBits := r.totalShards-numberPresent <= r.parityShards/4 - - // Check if we have enough to reconstruct. - if numberPresent < r.dataShards { - return ErrTooFewShards - } - - shardSize := shardSize(shards) - if shardSize%64 != 0 { - return ErrShardSize - } - - m := ceilPow2(r.parityShards) - n := ceilPow2(m + r.dataShards) - - const LEO_ERROR_BITFIELD_OPT = true - - // Fill in error locations. - var errorBits errorBitfield - var errLocs [order]ffe - for i := 0; i < r.parityShards; i++ { - if len(shards[i+r.dataShards]) == 0 { - errLocs[i] = 1 - if LEO_ERROR_BITFIELD_OPT && recoverAll { - errorBits.set(i) - } - } - } - for i := r.parityShards; i < m; i++ { - errLocs[i] = 1 - if LEO_ERROR_BITFIELD_OPT && recoverAll { - errorBits.set(i) - } - } - for i := 0; i < r.dataShards; i++ { - if len(shards[i]) == 0 { - errLocs[i+m] = 1 - if LEO_ERROR_BITFIELD_OPT { - errorBits.set(i + m) - } - } - } - - if LEO_ERROR_BITFIELD_OPT && useBits { - errorBits.prepare() - } - - // Evaluate error locator polynomial - fwht(&errLocs, order, m+r.dataShards) - - for i := 0; i < order; i++ { - errLocs[i] = ffe((uint(errLocs[i]) * uint(logWalsh[i])) % modulus) - } - - fwht(&errLocs, order, order) - - var work [][]byte - if w, ok := r.workPool.Get().([][]byte); ok { - work = w - } - if cap(work) >= n { - work = work[:n] - } else { - work = make([][]byte, n) - } - for i := range work { - if cap(work[i]) < shardSize { - work[i] = make([]byte, shardSize) - } else { - work[i] = work[i][:shardSize] - } - } - defer r.workPool.Put(work) - - // work <- recovery data - - for i := 0; i < r.parityShards; i++ { - if len(shards[i+r.dataShards]) != 0 { - mulgf16(work[i], shards[i+r.dataShards], errLocs[i], &r.o) - } else { - memclr(work[i]) - } - } - for i := r.parityShards; i < m; i++ { - memclr(work[i]) - } - - // work <- original data - - for i := 0; i < r.dataShards; i++ { - if len(shards[i]) != 0 { - mulgf16(work[m+i], shards[i], errLocs[m+i], &r.o) - } else { - memclr(work[m+i]) - } - } - for i := m + r.dataShards; i < n; i++ { - memclr(work[i]) - } - - // work <- IFFT(work, n, 0) - - ifftDITDecoder( - m+r.dataShards, - work, - n, - fftSkew[:], - &r.o, - ) - - // work <- FormalDerivative(work, n) - - for i := 1; i < n; i++ { - width := ((i ^ (i - 1)) + 1) >> 1 - slicesXor(work[i-width:i], work[i:i+width], &r.o) - } - - // work <- FFT(work, n, 0) truncated to m + dataShards - - outputCount := m + r.dataShards - - if LEO_ERROR_BITFIELD_OPT && useBits { - errorBits.fftDIT(work, outputCount, n, fftSkew[:], &r.o) - } else { - fftDIT(work, outputCount, n, fftSkew[:], &r.o) - } - - // Reveal erasures - // - // Original = -ErrLocator * FFT( Derivative( IFFT( ErrLocator * ReceivedData ) ) ) - // mul_mem(x, y, log_m, ) equals x[] = y[] * log_m - // - // mem layout: [Recovery Data (Power of Two = M)] [Original Data (K)] [Zero Padding out to N] - end := r.dataShards - if recoverAll { - end = r.totalShards - } - for i := 0; i < end; i++ { - if len(shards[i]) != 0 { - continue - } - if cap(shards[i]) >= shardSize { - shards[i] = shards[i][:shardSize] - } else { - shards[i] = make([]byte, shardSize) - } - if i >= r.dataShards { - // Parity shard. - mulgf16(shards[i], work[i-r.dataShards], modulus-errLocs[i-r.dataShards], &r.o) - } else { - // Data shard. - mulgf16(shards[i], work[i+m], modulus-errLocs[i+m], &r.o) - } - } - return nil -} - -// Basic no-frills version for decoder -func ifftDITDecoder(mtrunc int, work [][]byte, m int, skewLUT []ffe, o *options) { - // Decimation in time: Unroll 2 layers at a time - dist := 1 - dist4 := 4 - for dist4 <= m { - // For each set of dist*4 elements: - for r := 0; r < mtrunc; r += dist4 { - iend := r + dist - log_m01 := skewLUT[iend-1] - log_m02 := skewLUT[iend+dist-1] - log_m23 := skewLUT[iend+dist*2-1] - - // For each set of dist elements: - for i := r; i < iend; i++ { - ifftDIT4(work[i:], dist, log_m01, log_m23, log_m02, o) - } - } - dist = dist4 - dist4 <<= 2 - } - - // If there is one layer left: - if dist < m { - // Assuming that dist = m / 2 - if dist*2 != m { - panic("internal error") - } - - log_m := skewLUT[dist-1] - - if log_m == modulus { - slicesXor(work[dist:2*dist], work[:dist], o) - } else { - for i := 0; i < dist; i++ { - ifftDIT2( - work[i], - work[i+dist], - log_m, - o, - ) - } - } - } -} - -// In-place FFT for encoder and decoder -func fftDIT(work [][]byte, mtrunc, m int, skewLUT []ffe, o *options) { - // Decimation in time: Unroll 2 layers at a time - dist4 := m - dist := m >> 2 - for dist != 0 { - // For each set of dist*4 elements: - for r := 0; r < mtrunc; r += dist4 { - iend := r + dist - log_m01 := skewLUT[iend-1] - log_m02 := skewLUT[iend+dist-1] - log_m23 := skewLUT[iend+dist*2-1] - - // For each set of dist elements: - for i := r; i < iend; i++ { - fftDIT4( - work[i:], - dist, - log_m01, - log_m23, - log_m02, - o, - ) - } - } - dist4 = dist - dist >>= 2 - } - - // If there is one layer left: - if dist4 == 2 { - for r := 0; r < mtrunc; r += 2 { - log_m := skewLUT[r+1-1] - - if log_m == modulus { - sliceXor(work[r], work[r+1], o) - } else { - fftDIT2(work[r], work[r+1], log_m, o) - } - } - } -} - -// 4-way butterfly -func fftDIT4Ref(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) { - // First layer: - if log_m02 == modulus { - sliceXor(work[0], work[dist*2], o) - sliceXor(work[dist], work[dist*3], o) - } else { - fftDIT2(work[0], work[dist*2], log_m02, o) - fftDIT2(work[dist], work[dist*3], log_m02, o) - } - - // Second layer: - if log_m01 == modulus { - sliceXor(work[0], work[dist], o) - } else { - fftDIT2(work[0], work[dist], log_m01, o) - } - - if log_m23 == modulus { - sliceXor(work[dist*2], work[dist*3], o) - } else { - fftDIT2(work[dist*2], work[dist*3], log_m23, o) - } -} - -// Unrolled IFFT for encoder -func ifftDITEncoder(data [][]byte, mtrunc int, work [][]byte, xorRes [][]byte, m int, skewLUT []ffe, o *options) { - // I tried rolling the memcpy/memset into the first layer of the FFT and - // found that it only yields a 4% performance improvement, which is not - // worth the extra complexity. - for i := 0; i < mtrunc; i++ { - copy(work[i], data[i]) - } - for i := mtrunc; i < m; i++ { - memclr(work[i]) - } - - // I tried splitting up the first few layers into L3-cache sized blocks but - // found that it only provides about 5% performance boost, which is not - // worth the extra complexity. - - // Decimation in time: Unroll 2 layers at a time - dist := 1 - dist4 := 4 - for dist4 <= m { - // For each set of dist*4 elements: - for r := 0; r < mtrunc; r += dist4 { - iend := r + dist - log_m01 := skewLUT[iend] - log_m02 := skewLUT[iend+dist] - log_m23 := skewLUT[iend+dist*2] - - // For each set of dist elements: - for i := r; i < iend; i++ { - ifftDIT4( - work[i:], - dist, - log_m01, - log_m23, - log_m02, - o, - ) - } - } - - dist = dist4 - dist4 <<= 2 - // I tried alternating sweeps left->right and right->left to reduce cache misses. - // It provides about 1% performance boost when done for both FFT and IFFT, so it - // does not seem to be worth the extra complexity. - } - - // If there is one layer left: - if dist < m { - // Assuming that dist = m / 2 - if dist*2 != m { - panic("internal error") - } - - logm := skewLUT[dist] - - if logm == modulus { - slicesXor(work[dist:dist*2], work[:dist], o) - } else { - for i := 0; i < dist; i++ { - ifftDIT2(work[i], work[i+dist], logm, o) - } - } - } - - // I tried unrolling this but it does not provide more than 5% performance - // improvement for 16-bit finite fields, so it's not worth the complexity. - if xorRes != nil { - slicesXor(xorRes[:m], work[:m], o) - } -} - -func ifftDIT4Ref(work [][]byte, dist int, log_m01, log_m23, log_m02 ffe, o *options) { - // First layer: - if log_m01 == modulus { - sliceXor(work[0], work[dist], o) - } else { - ifftDIT2(work[0], work[dist], log_m01, o) - } - - if log_m23 == modulus { - sliceXor(work[dist*2], work[dist*3], o) - } else { - ifftDIT2(work[dist*2], work[dist*3], log_m23, o) - } - - // Second layer: - if log_m02 == modulus { - sliceXor(work[0], work[dist*2], o) - sliceXor(work[dist], work[dist*3], o) - } else { - ifftDIT2(work[0], work[dist*2], log_m02, o) - ifftDIT2(work[dist], work[dist*3], log_m02, o) - } -} - -// Reference version of muladd: x[] ^= y[] * log_m -func refMulAdd(x, y []byte, log_m ffe) { - lut := &mul16LUTs[log_m] - - for len(x) >= 64 { - // Assert sizes for no bounds checks in loop - hiA := y[32:64] - loA := y[:32] - dst := x[:64] // Needed, but not checked... - for i, lo := range loA { - hi := hiA[i] - prod := lut.Lo[lo] ^ lut.Hi[hi] - - dst[i] ^= byte(prod) - dst[i+32] ^= byte(prod >> 8) - } - x = x[64:] - y = y[64:] - } -} - -func memclr(s []byte) { - for i := range s { - s[i] = 0 - } -} - -// slicesXor calls xor for every slice pair in v1, v2. -func slicesXor(v1, v2 [][]byte, o *options) { - for i, v := range v1 { - sliceXor(v2[i], v, o) - } -} - -// Reference version of mul: x[] = y[] * log_m -func refMul(x, y []byte, log_m ffe) { - lut := &mul16LUTs[log_m] - - for off := 0; off < len(x); off += 64 { - loA := y[off : off+32] - hiA := y[off+32:] - hiA = hiA[:len(loA)] - for i, lo := range loA { - hi := hiA[i] - prod := lut.Lo[lo] ^ lut.Hi[hi] - - x[off+i] = byte(prod) - x[off+i+32] = byte(prod >> 8) - } - } -} - -// Returns a * Log(b) -func mulLog(a, log_b ffe) ffe { - /* - Note that this operation is not a normal multiplication in a finite - field because the right operand is already a logarithm. This is done - because it moves K table lookups from the Decode() method into the - initialization step that is less performance critical. The LogWalsh[] - table below contains precalculated logarithms so it is easier to do - all the other multiplies in that form as well. - */ - if a == 0 { - return 0 - } - return expLUT[addMod(logLUT[a], log_b)] -} - -// z = x + y (mod kModulus) -func addMod(a, b ffe) ffe { - sum := uint(a) + uint(b) - - // Partial reduction step, allowing for kModulus to be returned - return ffe(sum + sum>>bitwidth) -} - -// z = x - y (mod kModulus) -func subMod(a, b ffe) ffe { - dif := uint(a) - uint(b) - - // Partial reduction step, allowing for kModulus to be returned - return ffe(dif + dif>>bitwidth) -} - -// ceilPow2 returns power of two at or above n. -func ceilPow2(n int) int { - const w = int(unsafe.Sizeof(n) * 8) - return 1 << (w - bits.LeadingZeros(uint(n-1))) -} - -// Decimation in time (DIT) Fast Walsh-Hadamard Transform -// Unrolls pairs of layers to perform cross-layer operations in registers -// mtrunc: Number of elements that are non-zero at the front of data -func fwht(data *[order]ffe, m, mtrunc int) { - // Decimation in time: Unroll 2 layers at a time - dist := 1 - dist4 := 4 - for dist4 <= m { - // For each set of dist*4 elements: - for r := 0; r < mtrunc; r += dist4 { - // For each set of dist elements: - // Use 16 bit indices to avoid bounds check on [65536]ffe. - dist := uint16(dist) - off := uint16(r) - for i := uint16(0); i < dist; i++ { - // fwht4(data[i:], dist) inlined... - // Reading values appear faster than updating pointers. - // Casting to uint is not faster. - t0 := data[off] - t1 := data[off+dist] - t2 := data[off+dist*2] - t3 := data[off+dist*3] - - t0, t1 = fwht2alt(t0, t1) - t2, t3 = fwht2alt(t2, t3) - t0, t2 = fwht2alt(t0, t2) - t1, t3 = fwht2alt(t1, t3) - - data[off] = t0 - data[off+dist] = t1 - data[off+dist*2] = t2 - data[off+dist*3] = t3 - off++ - } - } - dist = dist4 - dist4 <<= 2 - } - - // If there is one layer left: - if dist < m { - dist := uint16(dist) - for i := uint16(0); i < dist; i++ { - fwht2(&data[i], &data[i+dist]) - } - } -} - -func fwht4(data []ffe, s int) { - s2 := s << 1 - - t0 := &data[0] - t1 := &data[s] - t2 := &data[s2] - t3 := &data[s2+s] - - fwht2(t0, t1) - fwht2(t2, t3) - fwht2(t0, t2) - fwht2(t1, t3) -} - -// {a, b} = {a + b, a - b} (Mod Q) -func fwht2(a, b *ffe) { - sum := addMod(*a, *b) - dif := subMod(*a, *b) - *a = sum - *b = dif -} - -// fwht2alt is as fwht2, but returns result. -func fwht2alt(a, b ffe) (ffe, ffe) { - return addMod(a, b), subMod(a, b) -} - -var initOnce sync.Once - -func initConstants() { - initOnce.Do(func() { - initLUTs() - initFFTSkew() - initMul16LUT() - }) -} - -// Initialize logLUT, expLUT. -func initLUTs() { - cantorBasis := [bitwidth]ffe{ - 0x0001, 0xACCA, 0x3C0E, 0x163E, - 0xC582, 0xED2E, 0x914C, 0x4012, - 0x6C98, 0x10D8, 0x6A72, 0xB900, - 0xFDB8, 0xFB34, 0xFF38, 0x991E, - } - - expLUT = &[order]ffe{} - logLUT = &[order]ffe{} - - // LFSR table generation: - state := 1 - for i := ffe(0); i < modulus; i++ { - expLUT[state] = i - state <<= 1 - if state >= order { - state ^= polynomial - } - } - expLUT[0] = modulus - - // Conversion to Cantor basis: - - logLUT[0] = 0 - for i := 0; i < bitwidth; i++ { - basis := cantorBasis[i] - width := 1 << i - - for j := 0; j < width; j++ { - logLUT[j+width] = logLUT[j] ^ basis - } - } - - for i := 0; i < order; i++ { - logLUT[i] = expLUT[logLUT[i]] - } - - for i := 0; i < order; i++ { - expLUT[logLUT[i]] = ffe(i) - } - - expLUT[modulus] = expLUT[0] -} - -// Initialize fftSkew. -func initFFTSkew() { - var temp [bitwidth - 1]ffe - - // Generate FFT skew vector {1}: - - for i := 1; i < bitwidth; i++ { - temp[i-1] = ffe(1 << i) - } - - fftSkew = &[modulus]ffe{} - logWalsh = &[order]ffe{} - - for m := 0; m < bitwidth-1; m++ { - step := 1 << (m + 1) - - fftSkew[1<>4)+16)] - lut.Hi[i] = tmp[((i&15)+32)] ^ tmp[((i>>4)+48)] - } - } - if cpuid.CPU.Has(cpuid.SSSE3) || cpuid.CPU.Has(cpuid.AVX2) || cpuid.CPU.Has(cpuid.AVX512F) { - multiply256LUT = &[order][16 * 8]byte{} - - for logM := range multiply256LUT[:] { - // For each 4 bits of the finite field width in bits: - shift := 0 - for i := 0; i < 4; i++ { - // Construct 16 entry LUT for PSHUFB - prodLo := multiply256LUT[logM][i*16 : i*16+16] - prodHi := multiply256LUT[logM][4*16+i*16 : 4*16+i*16+16] - for x := range prodLo[:] { - prod := mulLog(ffe(x<> 8) - } - shift += 4 - } - } - } -} - -const kWordMips = 5 -const kWords = order / 64 -const kBigMips = 6 -const kBigWords = (kWords + 63) / 64 -const kBiggestMips = 4 - -// errorBitfield contains progressive errors to help indicate which -// shards need reconstruction. -type errorBitfield struct { - Words [kWordMips][kWords]uint64 - BigWords [kBigMips][kBigWords]uint64 - BiggestWords [kBiggestMips]uint64 -} - -func (e *errorBitfield) set(i int) { - e.Words[0][i/64] |= uint64(1) << (i & 63) -} - -func (e *errorBitfield) isNeededFn(mipLevel int) func(bit int) bool { - if mipLevel >= 16 { - return func(bit int) bool { - return true - } - } - if mipLevel >= 12 { - w := e.BiggestWords[mipLevel-12] - return func(bit int) bool { - bit /= 4096 - return 0 != (w & (uint64(1) << bit)) - } - } - if mipLevel >= 6 { - w := e.BigWords[mipLevel-6][:] - return func(bit int) bool { - bit /= 64 - return 0 != (w[bit/64] & (uint64(1) << (bit & 63))) - } - } - if mipLevel > 0 { - w := e.Words[mipLevel-1][:] - return func(bit int) bool { - return 0 != (w[bit/64] & (uint64(1) << (bit & 63))) - } - } - return nil -} - -func (e *errorBitfield) isNeeded(mipLevel int, bit uint) bool { - if mipLevel >= 16 { - return true - } - if mipLevel >= 12 { - bit /= 4096 - return 0 != (e.BiggestWords[mipLevel-12] & (uint64(1) << bit)) - } - if mipLevel >= 6 { - bit /= 64 - return 0 != (e.BigWords[mipLevel-6][bit/64] & (uint64(1) << (bit % 64))) - } - return 0 != (e.Words[mipLevel-1][bit/64] & (uint64(1) << (bit % 64))) -} - -var kHiMasks = [5]uint64{ - 0xAAAAAAAAAAAAAAAA, - 0xCCCCCCCCCCCCCCCC, - 0xF0F0F0F0F0F0F0F0, - 0xFF00FF00FF00FF00, - 0xFFFF0000FFFF0000, -} - -func (e *errorBitfield) prepare() { - // First mip level is for final layer of FFT: pairs of data - for i := 0; i < kWords; i++ { - w_i := e.Words[0][i] - hi2lo0 := w_i | ((w_i & kHiMasks[0]) >> 1) - lo2hi0 := (w_i & (kHiMasks[0] >> 1)) << 1 - w_i = hi2lo0 | lo2hi0 - e.Words[0][i] = w_i - - bits := 2 - for j := 1; j < kWordMips; j++ { - hi2lo_j := w_i | ((w_i & kHiMasks[j]) >> bits) - lo2hi_j := (w_i & (kHiMasks[j] >> bits)) << bits - w_i = hi2lo_j | lo2hi_j - e.Words[j][i] = w_i - bits <<= 1 - } - } - - for i := 0; i < kBigWords; i++ { - w_i := uint64(0) - bit := uint64(1) - src := e.Words[kWordMips-1][i*64 : i*64+64] - for _, w := range src { - w_i |= (w | (w >> 32) | (w << 32)) & bit - bit <<= 1 - } - e.BigWords[0][i] = w_i - - bits := 1 - for j := 1; j < kBigMips; j++ { - hi2lo_j := w_i | ((w_i & kHiMasks[j-1]) >> bits) - lo2hi_j := (w_i & (kHiMasks[j-1] >> bits)) << bits - w_i = hi2lo_j | lo2hi_j - e.BigWords[j][i] = w_i - bits <<= 1 - } - } - - w_i := uint64(0) - bit := uint64(1) - for _, w := range e.BigWords[kBigMips-1][:kBigWords] { - w_i |= (w | (w >> 32) | (w << 32)) & bit - bit <<= 1 - } - e.BiggestWords[0] = w_i - - bits := uint64(1) - for j := 1; j < kBiggestMips; j++ { - hi2lo_j := w_i | ((w_i & kHiMasks[j-1]) >> bits) - lo2hi_j := (w_i & (kHiMasks[j-1] >> bits)) << bits - w_i = hi2lo_j | lo2hi_j - e.BiggestWords[j] = w_i - bits <<= 1 - } -} - -func (e *errorBitfield) fftDIT(work [][]byte, mtrunc, m int, skewLUT []ffe, o *options) { - // Decimation in time: Unroll 2 layers at a time - mipLevel := bits.Len32(uint32(m)) - 1 - - dist4 := m - dist := m >> 2 - needed := e.isNeededFn(mipLevel) - for dist != 0 { - // For each set of dist*4 elements: - for r := 0; r < mtrunc; r += dist4 { - if !needed(r) { - continue - } - iEnd := r + dist - logM01 := skewLUT[iEnd-1] - logM02 := skewLUT[iEnd+dist-1] - logM23 := skewLUT[iEnd+dist*2-1] - - // For each set of dist elements: - for i := r; i < iEnd; i++ { - fftDIT4( - work[i:], - dist, - logM01, - logM23, - logM02, - o) - } - } - dist4 = dist - dist >>= 2 - mipLevel -= 2 - needed = e.isNeededFn(mipLevel) - } - - // If there is one layer left: - if dist4 == 2 { - for r := 0; r < mtrunc; r += 2 { - if !needed(r) { - continue - } - logM := skewLUT[r+1-1] - - if logM == modulus { - sliceXor(work[r], work[r+1], o) - } else { - fftDIT2(work[r], work[r+1], logM, o) - } - } - } -} diff --git a/vendor/github.com/klauspost/reedsolomon/matrix.go b/vendor/github.com/klauspost/reedsolomon/matrix.go deleted file mode 100644 index 22669c2..0000000 --- a/vendor/github.com/klauspost/reedsolomon/matrix.go +++ /dev/null @@ -1,282 +0,0 @@ -/** - * Matrix Algebra over an 8-bit Galois Field - * - * Copyright 2015, Klaus Post - * Copyright 2015, Backblaze, Inc. - */ - -package reedsolomon - -import ( - "errors" - "fmt" - "strconv" - "strings" -) - -// byte[row][col] -type matrix [][]byte - -// newMatrix returns a matrix of zeros. -func newMatrix(rows, cols int) (matrix, error) { - if rows <= 0 { - return nil, errInvalidRowSize - } - if cols <= 0 { - return nil, errInvalidColSize - } - - m := matrix(make([][]byte, rows)) - for i := range m { - m[i] = make([]byte, cols) - } - return m, nil -} - -// NewMatrixData initializes a matrix with the given row-major data. -// Note that data is not copied from input. -func newMatrixData(data [][]byte) (matrix, error) { - m := matrix(data) - err := m.Check() - if err != nil { - return nil, err - } - return m, nil -} - -// IdentityMatrix returns an identity matrix of the given size. -func identityMatrix(size int) (matrix, error) { - m, err := newMatrix(size, size) - if err != nil { - return nil, err - } - for i := range m { - m[i][i] = 1 - } - return m, nil -} - -// errInvalidRowSize will be returned if attempting to create a matrix with negative or zero row number. -var errInvalidRowSize = errors.New("invalid row size") - -// errInvalidColSize will be returned if attempting to create a matrix with negative or zero column number. -var errInvalidColSize = errors.New("invalid column size") - -// errColSizeMismatch is returned if the size of matrix columns mismatch. -var errColSizeMismatch = errors.New("column size is not the same for all rows") - -func (m matrix) Check() error { - rows := len(m) - if rows <= 0 { - return errInvalidRowSize - } - cols := len(m[0]) - if cols <= 0 { - return errInvalidColSize - } - - for _, col := range m { - if len(col) != cols { - return errColSizeMismatch - } - } - return nil -} - -// String returns a human-readable string of the matrix contents. -// -// Example: [[1, 2], [3, 4]] -func (m matrix) String() string { - rowOut := make([]string, 0, len(m)) - for _, row := range m { - colOut := make([]string, 0, len(row)) - for _, col := range row { - colOut = append(colOut, strconv.Itoa(int(col))) - } - rowOut = append(rowOut, "["+strings.Join(colOut, ", ")+"]") - } - return "[" + strings.Join(rowOut, ", ") + "]" -} - -// Multiply multiplies this matrix (the one on the left) by another -// matrix (the one on the right) and returns a new matrix with the result. -func (m matrix) Multiply(right matrix) (matrix, error) { - if len(m[0]) != len(right) { - return nil, fmt.Errorf("columns on left (%d) is different than rows on right (%d)", len(m[0]), len(right)) - } - result, _ := newMatrix(len(m), len(right[0])) - for r, row := range result { - for c := range row { - var value byte - for i := range m[0] { - value ^= galMultiply(m[r][i], right[i][c]) - } - result[r][c] = value - } - } - return result, nil -} - -// Augment returns the concatenation of this matrix and the matrix on the right. -func (m matrix) Augment(right matrix) (matrix, error) { - if len(m) != len(right) { - return nil, errMatrixSize - } - - result, _ := newMatrix(len(m), len(m[0])+len(right[0])) - for r, row := range m { - for c := range row { - result[r][c] = m[r][c] - } - cols := len(m[0]) - for c := range right[0] { - result[r][cols+c] = right[r][c] - } - } - return result, nil -} - -// errMatrixSize is returned if matrix dimensions are doesn't match. -var errMatrixSize = errors.New("matrix sizes do not match") - -func (m matrix) SameSize(n matrix) error { - if len(m) != len(n) { - return errMatrixSize - } - for i := range m { - if len(m[i]) != len(n[i]) { - return errMatrixSize - } - } - return nil -} - -// SubMatrix returns a part of this matrix. Data is copied. -func (m matrix) SubMatrix(rmin, cmin, rmax, cmax int) (matrix, error) { - result, err := newMatrix(rmax-rmin, cmax-cmin) - if err != nil { - return nil, err - } - // OPTME: If used heavily, use copy function to copy slice - for r := rmin; r < rmax; r++ { - for c := cmin; c < cmax; c++ { - result[r-rmin][c-cmin] = m[r][c] - } - } - return result, nil -} - -// SwapRows Exchanges two rows in the matrix. -func (m matrix) SwapRows(r1, r2 int) error { - if r1 < 0 || len(m) <= r1 || r2 < 0 || len(m) <= r2 { - return errInvalidRowSize - } - m[r2], m[r1] = m[r1], m[r2] - return nil -} - -// IsSquare will return true if the matrix is square -// and nil if the matrix is square -func (m matrix) IsSquare() bool { - return len(m) == len(m[0]) -} - -// errSingular is returned if the matrix is singular and cannot be inversed -var errSingular = errors.New("matrix is singular") - -// errNotSquare is returned if attempting to inverse a non-square matrix. -var errNotSquare = errors.New("only square matrices can be inverted") - -// Invert returns the inverse of this matrix. -// Returns ErrSingular when the matrix is singular and doesn't have an inverse. -// The matrix must be square, otherwise ErrNotSquare is returned. -func (m matrix) Invert() (matrix, error) { - if !m.IsSquare() { - return nil, errNotSquare - } - - size := len(m) - work, _ := identityMatrix(size) - work, _ = m.Augment(work) - - err := work.gaussianElimination() - if err != nil { - return nil, err - } - - return work.SubMatrix(0, size, size, size*2) -} - -func (m matrix) gaussianElimination() error { - rows := len(m) - columns := len(m[0]) - // Clear out the part below the main diagonal and scale the main - // diagonal to be 1. - for r := 0; r < rows; r++ { - // If the element on the diagonal is 0, find a row below - // that has a non-zero and swap them. - if m[r][r] == 0 { - for rowBelow := r + 1; rowBelow < rows; rowBelow++ { - if m[rowBelow][r] != 0 { - err := m.SwapRows(r, rowBelow) - if err != nil { - return err - } - break - } - } - } - // If we couldn't find one, the matrix is singular. - if m[r][r] == 0 { - return errSingular - } - // Scale to 1. - if m[r][r] != 1 { - scale := galDivide(1, m[r][r]) - for c := 0; c < columns; c++ { - m[r][c] = galMultiply(m[r][c], scale) - } - } - // Make everything below the 1 be a 0 by subtracting - // a multiple of it. (Subtraction and addition are - // both exclusive or in the Galois field.) - for rowBelow := r + 1; rowBelow < rows; rowBelow++ { - if m[rowBelow][r] != 0 { - scale := m[rowBelow][r] - for c := 0; c < columns; c++ { - m[rowBelow][c] ^= galMultiply(scale, m[r][c]) - } - } - } - } - - // Now clear the part above the main diagonal. - for d := 0; d < rows; d++ { - for rowAbove := 0; rowAbove < d; rowAbove++ { - if m[rowAbove][d] != 0 { - scale := m[rowAbove][d] - for c := 0; c < columns; c++ { - m[rowAbove][c] ^= galMultiply(scale, m[d][c]) - } - - } - } - } - return nil -} - -// Create a Vandermonde matrix, which is guaranteed to have the -// property that any subset of rows that forms a square matrix -// is invertible. -func vandermonde(rows, cols int) (matrix, error) { - result, err := newMatrix(rows, cols) - if err != nil { - return nil, err - } - for r, row := range result { - for c := range row { - result[r][c] = galExp(byte(r), c) - } - } - return result, nil -} diff --git a/vendor/github.com/klauspost/reedsolomon/options.go b/vendor/github.com/klauspost/reedsolomon/options.go deleted file mode 100644 index 83dd2cd..0000000 --- a/vendor/github.com/klauspost/reedsolomon/options.go +++ /dev/null @@ -1,234 +0,0 @@ -package reedsolomon - -import ( - "runtime" - - "github.com/klauspost/cpuid/v2" -) - -// Option allows to override processing parameters. -type Option func(*options) - -type options struct { - maxGoroutines int - minSplitSize int - shardSize int - perRound int - - useAVX512, useAVX2, useSSSE3, useSSE2 bool - useJerasureMatrix bool - usePAR1Matrix bool - useCauchy bool - fastOneParity bool - inversionCache bool - customMatrix [][]byte - withLeopard *bool - - // stream options - concReads bool - concWrites bool - streamBS int -} - -var defaultOptions = options{ - maxGoroutines: 384, - minSplitSize: -1, - fastOneParity: false, - inversionCache: true, - - // Detect CPU capabilities. - useSSSE3: cpuid.CPU.Supports(cpuid.SSSE3), - useSSE2: cpuid.CPU.Supports(cpuid.SSE2), - useAVX2: cpuid.CPU.Supports(cpuid.AVX2), - useAVX512: cpuid.CPU.Supports(cpuid.AVX512F, cpuid.AVX512BW), -} - -func init() { - if runtime.GOMAXPROCS(0) <= 1 { - defaultOptions.maxGoroutines = 1 - } -} - -// WithMaxGoroutines is the maximum number of goroutines number for encoding & decoding. -// Jobs will be split into this many parts, unless each goroutine would have to process -// less than minSplitSize bytes (set with WithMinSplitSize). -// For the best speed, keep this well above the GOMAXPROCS number for more fine grained -// scheduling. -// If n <= 0, it is ignored. -func WithMaxGoroutines(n int) Option { - return func(o *options) { - if n > 0 { - o.maxGoroutines = n - } - } -} - -// WithAutoGoroutines will adjust the number of goroutines for optimal speed with a -// specific shard size. -// Send in the shard size you expect to send. Other shard sizes will work, but may not -// run at the optimal speed. -// Overwrites WithMaxGoroutines. -// If shardSize <= 0, it is ignored. -func WithAutoGoroutines(shardSize int) Option { - return func(o *options) { - o.shardSize = shardSize - } -} - -// WithMinSplitSize is the minimum encoding size in bytes per goroutine. -// By default this parameter is determined by CPU cache characteristics. -// See WithMaxGoroutines on how jobs are split. -// If n <= 0, it is ignored. -func WithMinSplitSize(n int) Option { - return func(o *options) { - if n > 0 { - o.minSplitSize = n - } - } -} - -// WithConcurrentStreams will enable concurrent reads and writes on the streams. -// Default: Disabled, meaning only one stream will be read/written at the time. -// Ignored if not used on a stream input. -func WithConcurrentStreams(enabled bool) Option { - return func(o *options) { - o.concReads, o.concWrites = enabled, enabled - } -} - -// WithConcurrentStreamReads will enable concurrent reads from the input streams. -// Default: Disabled, meaning only one stream will be read at the time. -// Ignored if not used on a stream input. -func WithConcurrentStreamReads(enabled bool) Option { - return func(o *options) { - o.concReads = enabled - } -} - -// WithConcurrentStreamWrites will enable concurrent writes to the the output streams. -// Default: Disabled, meaning only one stream will be written at the time. -// Ignored if not used on a stream input. -func WithConcurrentStreamWrites(enabled bool) Option { - return func(o *options) { - o.concWrites = enabled - } -} - -// WithInversionCache allows to control the inversion cache. -// This will cache reconstruction matrices so they can be reused. -// Enabled by default. -func WithInversionCache(enabled bool) Option { - return func(o *options) { - o.inversionCache = enabled - } -} - -// WithStreamBlockSize allows to set a custom block size per round of reads/writes. -// If not set, any shard size set with WithAutoGoroutines will be used. -// If WithAutoGoroutines is also unset, 4MB will be used. -// Ignored if not used on stream. -func WithStreamBlockSize(n int) Option { - return func(o *options) { - o.streamBS = n - } -} - -// WithSSSE3 allows to enable/disable SSSE3 instructions. -// If not set, SSSE3 will be turned on or off automatically based on CPU ID information. -func WithSSSE3(enabled bool) Option { - return func(o *options) { - o.useSSSE3 = enabled - } -} - -// WithAVX2 allows to enable/disable AVX2 instructions. -// If not set, AVX2 will be turned on or off automatically based on CPU ID information. -func WithAVX2(enabled bool) Option { - return func(o *options) { - o.useAVX2 = enabled - } -} - -// WithSSE2 allows to enable/disable SSE2 instructions. -// If not set, SSE2 will be turned on or off automatically based on CPU ID information. -func WithSSE2(enabled bool) Option { - return func(o *options) { - o.useSSE2 = enabled - } -} - -// WithAVX512 allows to enable/disable AVX512 instructions. -// If not set, AVX512 will be turned on or off automatically based on CPU ID information. -func WithAVX512(enabled bool) Option { - return func(o *options) { - o.useAVX512 = enabled - } -} - -// WithJerasureMatrix causes the encoder to build the Reed-Solomon-Vandermonde -// matrix in the same way as done by the Jerasure library. -// The first row and column of the coding matrix only contains 1's in this method -// so the first parity chunk is always equal to XOR of all data chunks. -func WithJerasureMatrix() Option { - return func(o *options) { - o.useJerasureMatrix = true - o.usePAR1Matrix = false - o.useCauchy = false - } -} - -// WithPAR1Matrix causes the encoder to build the matrix how PARv1 -// does. Note that the method they use is buggy, and may lead to cases -// where recovery is impossible, even if there are enough parity -// shards. -func WithPAR1Matrix() Option { - return func(o *options) { - o.useJerasureMatrix = false - o.usePAR1Matrix = true - o.useCauchy = false - } -} - -// WithCauchyMatrix will make the encoder build a Cauchy style matrix. -// The output of this is not compatible with the standard output. -// A Cauchy matrix is faster to generate. This does not affect data throughput, -// but will result in slightly faster start-up time. -func WithCauchyMatrix() Option { - return func(o *options) { - o.useJerasureMatrix = false - o.usePAR1Matrix = false - o.useCauchy = true - } -} - -// WithFastOneParityMatrix will switch the matrix to a simple xor -// if there is only one parity shard. -// The PAR1 matrix already has this property so it has little effect there. -func WithFastOneParityMatrix() Option { - return func(o *options) { - o.fastOneParity = true - } -} - -// WithCustomMatrix causes the encoder to use the manually specified matrix. -// customMatrix represents only the parity chunks. -// customMatrix must have at least ParityShards rows and DataShards columns. -// It can be used for interoperability with libraries which generate -// the matrix differently or to implement more complex coding schemes like LRC -// (locally reconstructible codes). -func WithCustomMatrix(customMatrix [][]byte) Option { - return func(o *options) { - o.customMatrix = customMatrix - } -} - -// WithLeopardGF16 will always use leopard GF16 for encoding, -// even when there is less than 256 shards. -// This will likely improve reconstruction time for some setups. -// This is not compatible with Leopard output for <= 256 shards. -// Note that Leopard places certain restrictions on use see other documentation. -func WithLeopardGF16(enabled bool) Option { - return func(o *options) { - o.withLeopard = &enabled - } -} diff --git a/vendor/github.com/klauspost/reedsolomon/reedsolomon.go b/vendor/github.com/klauspost/reedsolomon/reedsolomon.go deleted file mode 100644 index a2e5886..0000000 --- a/vendor/github.com/klauspost/reedsolomon/reedsolomon.go +++ /dev/null @@ -1,1451 +0,0 @@ -/** - * Reed-Solomon Coding over 8-bit values. - * - * Copyright 2015, Klaus Post - * Copyright 2015, Backblaze, Inc. - */ - -// Package reedsolomon enables Erasure Coding in Go -// -// For usage and examples, see https://github.com/klauspost/reedsolomon -package reedsolomon - -import ( - "bytes" - "errors" - "io" - "runtime" - "sync" - - "github.com/klauspost/cpuid/v2" -) - -// Encoder is an interface to encode Reed-Salomon parity sets for your data. -type Encoder interface { - // Encode parity for a set of data shards. - // Input is 'shards' containing data shards followed by parity shards. - // The number of shards must match the number given to New(). - // Each shard is a byte array, and they must all be the same size. - // The parity shards will always be overwritten and the data shards - // will remain the same, so it is safe for you to read from the - // data shards while this is running. - Encode(shards [][]byte) error - - // EncodeIdx will add parity for a single data shard. - // Parity shards should start out as 0. The caller must zero them. - // Data shards must be delivered exactly once. There is no check for this. - // The parity shards will always be updated and the data shards will remain the same. - EncodeIdx(dataShard []byte, idx int, parity [][]byte) error - - // Verify returns true if the parity shards contain correct data. - // The data is the same format as Encode. No data is modified, so - // you are allowed to read from data while this is running. - Verify(shards [][]byte) (bool, error) - - // Reconstruct will recreate the missing shards if possible. - // - // Given a list of shards, some of which contain data, fills in the - // ones that don't have data. - // - // The length of the array must be equal to the total number of shards. - // You indicate that a shard is missing by setting it to nil or zero-length. - // If a shard is zero-length but has sufficient capacity, that memory will - // be used, otherwise a new []byte will be allocated. - // - // If there are too few shards to reconstruct the missing - // ones, ErrTooFewShards will be returned. - // - // The reconstructed shard set is complete, but integrity is not verified. - // Use the Verify function to check if data set is ok. - Reconstruct(shards [][]byte) error - - // ReconstructData will recreate any missing data shards, if possible. - // - // Given a list of shards, some of which contain data, fills in the - // data shards that don't have data. - // - // The length of the array must be equal to Shards. - // You indicate that a shard is missing by setting it to nil or zero-length. - // If a shard is zero-length but has sufficient capacity, that memory will - // be used, otherwise a new []byte will be allocated. - // - // If there are too few shards to reconstruct the missing - // ones, ErrTooFewShards will be returned. - // - // As the reconstructed shard set may contain missing parity shards, - // calling the Verify function is likely to fail. - ReconstructData(shards [][]byte) error - - // ReconstructSome will recreate only requested data shards, if possible. - // - // Given a list of shards, some of which contain data, fills in the - // data shards indicated by true values in the "required" parameter. - // The length of "required" array must be equal to DataShards. - // - // The length of "shards" array must be equal to Shards. - // You indicate that a shard is missing by setting it to nil or zero-length. - // If a shard is zero-length but has sufficient capacity, that memory will - // be used, otherwise a new []byte will be allocated. - // - // If there are too few shards to reconstruct the missing - // ones, ErrTooFewShards will be returned. - // - // As the reconstructed shard set may contain missing parity shards, - // calling the Verify function is likely to fail. - ReconstructSome(shards [][]byte, required []bool) error - - // Update parity is use for change a few data shards and update it's parity. - // Input 'newDatashards' containing data shards changed. - // Input 'shards' containing old data shards (if data shard not changed, it can be nil) and old parity shards. - // new parity shards will in shards[DataShards:] - // Update is very useful if DataShards much larger than ParityShards and changed data shards is few. It will - // faster than Encode and not need read all data shards to encode. - Update(shards [][]byte, newDatashards [][]byte) error - - // Split a data slice into the number of shards given to the encoder, - // and create empty parity shards. - // - // The data will be split into equally sized shards. - // If the data size isn't dividable by the number of shards, - // the last shard will contain extra zeros. - // - // There must be at least 1 byte otherwise ErrShortData will be - // returned. - // - // The data will not be copied, except for the last shard, so you - // should not modify the data of the input slice afterwards. - Split(data []byte) ([][]byte, error) - - // Join the shards and write the data segment to dst. - // - // Only the data shards are considered. - // You must supply the exact output size you want. - // If there are to few shards given, ErrTooFewShards will be returned. - // If the total data size is less than outSize, ErrShortData will be returned. - Join(dst io.Writer, shards [][]byte, outSize int) error -} - -// Extensions is an optional interface. -// All returned instances will support this interface. -type Extensions interface { - // ShardSizeMultiple will return the size the shard sizes must be a multiple of. - ShardSizeMultiple() int - - // DataShards will return the number of data shards. - DataShards() int - - // ParityShards will return the number of parity shards. - ParityShards() int - - // TotalShards will return the total number of shards. - TotalShards() int -} - -const ( - avx2CodeGenMinSize = 64 - avx2CodeGenMinShards = 3 - avx2CodeGenMaxGoroutines = 8 - - intSize = 32 << (^uint(0) >> 63) // 32 or 64 - maxInt = 1<<(intSize-1) - 1 -) - -// reedSolomon contains a matrix for a specific -// distribution of datashards and parity shards. -// Construct if using New() -type reedSolomon struct { - dataShards int // Number of data shards, should not be modified. - parityShards int // Number of parity shards, should not be modified. - totalShards int // Total number of shards. Calculated, and should not be modified. - m matrix - tree *inversionTree - parity [][]byte - o options - mPool sync.Pool -} - -var _ = Extensions(&reedSolomon{}) - -func (r *reedSolomon) ShardSizeMultiple() int { - return 1 -} - -func (r *reedSolomon) DataShards() int { - return r.dataShards -} - -func (r *reedSolomon) ParityShards() int { - return r.parityShards -} - -func (r *reedSolomon) TotalShards() int { - return r.parityShards -} - -// ErrInvShardNum will be returned by New, if you attempt to create -// an Encoder with less than one data shard or less than zero parity -// shards. -var ErrInvShardNum = errors.New("cannot create Encoder with less than one data shard or less than zero parity shards") - -// ErrMaxShardNum will be returned by New, if you attempt to create an -// Encoder where data and parity shards are bigger than the order of -// GF(2^8). -var ErrMaxShardNum = errors.New("cannot create Encoder with more than 256 data+parity shards") - -// ErrNotSupported is returned when an operation is not supported. -var ErrNotSupported = errors.New("operation not supported") - -// buildMatrix creates the matrix to use for encoding, given the -// number of data shards and the number of total shards. -// -// The top square of the matrix is guaranteed to be an identity -// matrix, which means that the data shards are unchanged after -// encoding. -func buildMatrix(dataShards, totalShards int) (matrix, error) { - // Start with a Vandermonde matrix. This matrix would work, - // in theory, but doesn't have the property that the data - // shards are unchanged after encoding. - vm, err := vandermonde(totalShards, dataShards) - if err != nil { - return nil, err - } - - // Multiply by the inverse of the top square of the matrix. - // This will make the top square be the identity matrix, but - // preserve the property that any square subset of rows is - // invertible. - top, err := vm.SubMatrix(0, 0, dataShards, dataShards) - if err != nil { - return nil, err - } - - topInv, err := top.Invert() - if err != nil { - return nil, err - } - - return vm.Multiply(topInv) -} - -// buildMatrixJerasure creates the same encoding matrix as Jerasure library -// -// The top square of the matrix is guaranteed to be an identity -// matrix, which means that the data shards are unchanged after -// encoding. -func buildMatrixJerasure(dataShards, totalShards int) (matrix, error) { - // Start with a Vandermonde matrix. This matrix would work, - // in theory, but doesn't have the property that the data - // shards are unchanged after encoding. - vm, err := vandermonde(totalShards, dataShards) - if err != nil { - return nil, err - } - - // Jerasure does this: - // first row is always 100..00 - vm[0][0] = 1 - for i := 1; i < dataShards; i++ { - vm[0][i] = 0 - } - // last row is always 000..01 - for i := 0; i < dataShards-1; i++ { - vm[totalShards-1][i] = 0 - } - vm[totalShards-1][dataShards-1] = 1 - - for i := 0; i < dataShards; i++ { - // Find the row where i'th col is not 0 - r := i - for ; r < totalShards && vm[r][i] == 0; r++ { - } - if r != i { - // Swap it with i'th row if not already - t := vm[r] - vm[r] = vm[i] - vm[i] = t - } - // Multiply by the inverted matrix (same as vm.Multiply(vm[0:dataShards].Invert())) - if vm[i][i] != 1 { - // Make vm[i][i] = 1 by dividing the column by vm[i][i] - tmp := galDivide(1, vm[i][i]) - for j := 0; j < totalShards; j++ { - vm[j][i] = galMultiply(vm[j][i], tmp) - } - } - for j := 0; j < dataShards; j++ { - // Make vm[i][j] = 0 where j != i by adding vm[i][j]*vm[.][i] to each column - tmp := vm[i][j] - if j != i && tmp != 0 { - for r := 0; r < totalShards; r++ { - vm[r][j] = galAdd(vm[r][j], galMultiply(tmp, vm[r][i])) - } - } - } - } - - // Make vm[dataShards] row all ones - divide each column j by vm[dataShards][j] - for j := 0; j < dataShards; j++ { - tmp := vm[dataShards][j] - if tmp != 1 { - tmp = galDivide(1, tmp) - for i := dataShards; i < totalShards; i++ { - vm[i][j] = galMultiply(vm[i][j], tmp) - } - } - } - - // Make vm[dataShards...totalShards-1][0] column all ones - divide each row - for i := dataShards + 1; i < totalShards; i++ { - tmp := vm[i][0] - if tmp != 1 { - tmp = galDivide(1, tmp) - for j := 0; j < dataShards; j++ { - vm[i][j] = galMultiply(vm[i][j], tmp) - } - } - } - - return vm, nil -} - -// buildMatrixPAR1 creates the matrix to use for encoding according to -// the PARv1 spec, given the number of data shards and the number of -// total shards. Note that the method they use is buggy, and may lead -// to cases where recovery is impossible, even if there are enough -// parity shards. -// -// The top square of the matrix is guaranteed to be an identity -// matrix, which means that the data shards are unchanged after -// encoding. -func buildMatrixPAR1(dataShards, totalShards int) (matrix, error) { - result, err := newMatrix(totalShards, dataShards) - if err != nil { - return nil, err - } - - for r, row := range result { - // The top portion of the matrix is the identity - // matrix, and the bottom is a transposed Vandermonde - // matrix starting at 1 instead of 0. - if r < dataShards { - result[r][r] = 1 - } else { - for c := range row { - result[r][c] = galExp(byte(c+1), r-dataShards) - } - } - } - return result, nil -} - -func buildMatrixCauchy(dataShards, totalShards int) (matrix, error) { - result, err := newMatrix(totalShards, dataShards) - if err != nil { - return nil, err - } - - for r, row := range result { - // The top portion of the matrix is the identity - // matrix, and the bottom is a transposed Cauchy matrix. - if r < dataShards { - result[r][r] = 1 - } else { - for c := range row { - result[r][c] = invTable[(byte(r ^ c))] - } - } - } - return result, nil -} - -// buildXorMatrix can be used to build a matrix with pure XOR -// operations if there is only one parity shard. -func buildXorMatrix(dataShards, totalShards int) (matrix, error) { - if dataShards+1 != totalShards { - return nil, errors.New("internal error") - } - result, err := newMatrix(totalShards, dataShards) - if err != nil { - return nil, err - } - - for r, row := range result { - // The top portion of the matrix is the identity - // matrix. - if r < dataShards { - result[r][r] = 1 - } else { - // Set all values to 1 (XOR) - for c := range row { - result[r][c] = 1 - } - } - } - return result, nil -} - -// New creates a new encoder and initializes it to -// the number of data shards and parity shards that -// you want to use. You can reuse this encoder. -// Note that the maximum number of total shards is 65536, with some -// restrictions for a total larger than 256: -// -// - Shard sizes must be multiple of 64 -// - The methods Join/Split/Update/EncodeIdx are not supported -// -// If no options are supplied, default options are used. -func New(dataShards, parityShards int, opts ...Option) (Encoder, error) { - o := defaultOptions - for _, opt := range opts { - opt(&o) - } - - if (dataShards+parityShards > 256 && o.withLeopard == nil) || - (o.withLeopard != nil && *o.withLeopard == true && parityShards > 0) { - return newFF16(dataShards, parityShards, o) - } - if dataShards+parityShards > 256 { - return nil, ErrMaxShardNum - } - - r := reedSolomon{ - dataShards: dataShards, - parityShards: parityShards, - totalShards: dataShards + parityShards, - o: o, - } - - if dataShards <= 0 || parityShards < 0 { - return nil, ErrInvShardNum - } - - if parityShards == 0 { - return &r, nil - } - - var err error - switch { - case r.o.customMatrix != nil: - if len(r.o.customMatrix) < parityShards { - return nil, errors.New("coding matrix must contain at least parityShards rows") - } - r.m = make([][]byte, r.totalShards) - for i := 0; i < dataShards; i++ { - r.m[i] = make([]byte, dataShards) - r.m[i][i] = 1 - } - for k, row := range r.o.customMatrix { - if len(row) < dataShards { - return nil, errors.New("coding matrix must contain at least dataShards columns") - } - r.m[dataShards+k] = make([]byte, dataShards) - copy(r.m[dataShards+k], row) - } - case r.o.fastOneParity && parityShards == 1: - r.m, err = buildXorMatrix(dataShards, r.totalShards) - case r.o.useCauchy: - r.m, err = buildMatrixCauchy(dataShards, r.totalShards) - case r.o.usePAR1Matrix: - r.m, err = buildMatrixPAR1(dataShards, r.totalShards) - case r.o.useJerasureMatrix: - r.m, err = buildMatrixJerasure(dataShards, r.totalShards) - default: - r.m, err = buildMatrix(dataShards, r.totalShards) - } - if err != nil { - return nil, err - } - - // Calculate what we want per round - r.o.perRound = cpuid.CPU.Cache.L2 - - divide := parityShards + 1 - if avx2CodeGen && r.o.useAVX2 && (dataShards > maxAvx2Inputs || parityShards > maxAvx2Outputs) { - // Base on L1 cache if we have many inputs. - r.o.perRound = cpuid.CPU.Cache.L1D - divide = 0 - if dataShards > maxAvx2Inputs { - divide += maxAvx2Inputs - } else { - divide += dataShards - } - if parityShards > maxAvx2Inputs { - divide += maxAvx2Outputs - } else { - divide += parityShards - } - } - - if r.o.perRound <= 0 { - // Set to 128K if undetectable. - r.o.perRound = 128 << 10 - } - - if cpuid.CPU.ThreadsPerCore > 1 && r.o.maxGoroutines > cpuid.CPU.PhysicalCores { - // If multiple threads per core, make sure they don't contend for cache. - r.o.perRound /= cpuid.CPU.ThreadsPerCore - } - - // 1 input + parity must fit in cache, and we add one more to be safer. - r.o.perRound = r.o.perRound / divide - // Align to 64 bytes. - r.o.perRound = ((r.o.perRound + 63) / 64) * 64 - - if r.o.minSplitSize <= 0 { - // Set minsplit as high as we can, but still have parity in L1. - cacheSize := cpuid.CPU.Cache.L1D - if cacheSize <= 0 { - cacheSize = 32 << 10 - } - - r.o.minSplitSize = cacheSize / (parityShards + 1) - // Min 1K - if r.o.minSplitSize < 1024 { - r.o.minSplitSize = 1024 - } - } - - if r.o.shardSize > 0 { - p := runtime.GOMAXPROCS(0) - if p == 1 || r.o.shardSize <= r.o.minSplitSize*2 { - // Not worth it. - r.o.maxGoroutines = 1 - } else { - g := r.o.shardSize / r.o.perRound - - // Overprovision by a factor of 2. - if g < p*2 && r.o.perRound > r.o.minSplitSize*2 { - g = p * 2 - r.o.perRound /= 2 - } - - // Have g be multiple of p - g += p - 1 - g -= g % p - - r.o.maxGoroutines = g - } - } - - // Generated AVX2 does not need data to stay in L1 cache between runs. - // We will be purely limited by RAM speed. - if r.canAVX2C(avx2CodeGenMinSize, maxAvx2Inputs, maxAvx2Outputs) && r.o.maxGoroutines > avx2CodeGenMaxGoroutines { - r.o.maxGoroutines = avx2CodeGenMaxGoroutines - } - - // Inverted matrices are cached in a tree keyed by the indices - // of the invalid rows of the data to reconstruct. - // The inversion root node will have the identity matrix as - // its inversion matrix because it implies there are no errors - // with the original data. - if r.o.inversionCache { - r.tree = newInversionTree(dataShards, parityShards) - } - - r.parity = make([][]byte, parityShards) - for i := range r.parity { - r.parity[i] = r.m[dataShards+i] - } - - if avx2CodeGen && r.o.useAVX2 { - sz := r.dataShards * r.parityShards * 2 * 32 - r.mPool.New = func() interface{} { - return make([]byte, sz) - } - } - return &r, err -} - -// ErrTooFewShards is returned if too few shards where given to -// Encode/Verify/Reconstruct/Update. It will also be returned from Reconstruct -// if there were too few shards to reconstruct the missing data. -var ErrTooFewShards = errors.New("too few shards given") - -// Encode parity for a set of data shards. -// An array 'shards' containing data shards followed by parity shards. -// The number of shards must match the number given to New. -// Each shard is a byte array, and they must all be the same size. -// The parity shards will always be overwritten and the data shards -// will remain the same. -func (r *reedSolomon) Encode(shards [][]byte) error { - if len(shards) != r.totalShards { - return ErrTooFewShards - } - - err := checkShards(shards, false) - if err != nil { - return err - } - - // Get the slice of output buffers. - output := shards[r.dataShards:] - - // Do the coding. - r.codeSomeShards(r.parity, shards[0:r.dataShards], output[:r.parityShards], len(shards[0])) - return nil -} - -// EncodeIdx will add parity for a single data shard. -// Parity shards should start out zeroed. The caller must zero them before first call. -// Data shards should only be delivered once. There is no check for this. -// The parity shards will always be updated and the data shards will remain the unchanged. -func (r *reedSolomon) EncodeIdx(dataShard []byte, idx int, parity [][]byte) error { - if len(parity) != r.parityShards { - return ErrTooFewShards - } - if len(parity) == 0 { - return nil - } - if idx < 0 || idx >= r.dataShards { - return ErrInvShardNum - } - err := checkShards(parity, false) - if err != nil { - return err - } - if len(parity[0]) != len(dataShard) { - return ErrShardSize - } - - // Process using no goroutines for now. - start, end := 0, r.o.perRound - if end > len(dataShard) { - end = len(dataShard) - } - - for start < len(dataShard) { - in := dataShard[start:end] - for iRow := 0; iRow < r.parityShards; iRow++ { - galMulSliceXor(r.parity[iRow][idx], in, parity[iRow][start:end], &r.o) - } - start = end - end += r.o.perRound - if end > len(dataShard) { - end = len(dataShard) - } - } - return nil -} - -// ErrInvalidInput is returned if invalid input parameter of Update. -var ErrInvalidInput = errors.New("invalid input") - -func (r *reedSolomon) Update(shards [][]byte, newDatashards [][]byte) error { - if len(shards) != r.totalShards { - return ErrTooFewShards - } - - if len(newDatashards) != r.dataShards { - return ErrTooFewShards - } - - err := checkShards(shards, true) - if err != nil { - return err - } - - err = checkShards(newDatashards, true) - if err != nil { - return err - } - - for i := range newDatashards { - if newDatashards[i] != nil && shards[i] == nil { - return ErrInvalidInput - } - } - for _, p := range shards[r.dataShards:] { - if p == nil { - return ErrInvalidInput - } - } - - shardSize := shardSize(shards) - - // Get the slice of output buffers. - output := shards[r.dataShards:] - - // Do the coding. - r.updateParityShards(r.parity, shards[0:r.dataShards], newDatashards[0:r.dataShards], output, r.parityShards, shardSize) - return nil -} - -func (r *reedSolomon) updateParityShards(matrixRows, oldinputs, newinputs, outputs [][]byte, outputCount, byteCount int) { - if len(outputs) == 0 { - return - } - - if r.o.maxGoroutines > 1 && byteCount > r.o.minSplitSize { - r.updateParityShardsP(matrixRows, oldinputs, newinputs, outputs, outputCount, byteCount) - return - } - - for c := 0; c < r.dataShards; c++ { - in := newinputs[c] - if in == nil { - continue - } - oldin := oldinputs[c] - // oldinputs data will be changed - sliceXor(in, oldin, &r.o) - for iRow := 0; iRow < outputCount; iRow++ { - galMulSliceXor(matrixRows[iRow][c], oldin, outputs[iRow], &r.o) - } - } -} - -func (r *reedSolomon) updateParityShardsP(matrixRows, oldinputs, newinputs, outputs [][]byte, outputCount, byteCount int) { - var wg sync.WaitGroup - do := byteCount / r.o.maxGoroutines - if do < r.o.minSplitSize { - do = r.o.minSplitSize - } - start := 0 - for start < byteCount { - if start+do > byteCount { - do = byteCount - start - } - wg.Add(1) - go func(start, stop int) { - for c := 0; c < r.dataShards; c++ { - in := newinputs[c] - if in == nil { - continue - } - oldin := oldinputs[c] - // oldinputs data will be change - sliceXor(in[start:stop], oldin[start:stop], &r.o) - for iRow := 0; iRow < outputCount; iRow++ { - galMulSliceXor(matrixRows[iRow][c], oldin[start:stop], outputs[iRow][start:stop], &r.o) - } - } - wg.Done() - }(start, start+do) - start += do - } - wg.Wait() -} - -// Verify returns true if the parity shards contain the right data. -// The data is the same format as Encode. No data is modified. -func (r *reedSolomon) Verify(shards [][]byte) (bool, error) { - if len(shards) != r.totalShards { - return false, ErrTooFewShards - } - err := checkShards(shards, false) - if err != nil { - return false, err - } - - // Slice of buffers being checked. - toCheck := shards[r.dataShards:] - - // Do the checking. - return r.checkSomeShards(r.parity, shards[:r.dataShards], toCheck[:r.parityShards], len(shards[0])), nil -} - -func (r *reedSolomon) canAVX2C(byteCount int, inputs, outputs int) bool { - return avx2CodeGen && r.o.useAVX2 && - byteCount >= avx2CodeGenMinSize && inputs+outputs >= avx2CodeGenMinShards && - inputs <= maxAvx2Inputs && outputs <= maxAvx2Outputs -} - -// Multiplies a subset of rows from a coding matrix by a full set of -// input totalShards to produce some output totalShards. -// 'matrixRows' is The rows from the matrix to use. -// 'inputs' An array of byte arrays, each of which is one input shard. -// The number of inputs used is determined by the length of each matrix row. -// outputs Byte arrays where the computed totalShards are stored. -// The number of outputs computed, and the -// number of matrix rows used, is determined by -// outputCount, which is the number of outputs to compute. -func (r *reedSolomon) codeSomeShards(matrixRows, inputs, outputs [][]byte, byteCount int) { - if len(outputs) == 0 { - return - } - switch { - case r.o.useAVX512 && r.o.maxGoroutines > 1 && byteCount > r.o.minSplitSize && len(inputs) >= 4 && len(outputs) >= 2: - r.codeSomeShardsAvx512P(matrixRows, inputs, outputs, byteCount) - return - case r.o.useAVX512 && len(inputs) >= 4 && len(outputs) >= 2: - r.codeSomeShardsAvx512(matrixRows, inputs, outputs, byteCount) - return - case byteCount > r.o.minSplitSize: - r.codeSomeShardsP(matrixRows, inputs, outputs, byteCount) - return - } - - // Process using no goroutines - start, end := 0, r.o.perRound - if end > len(inputs[0]) { - end = len(inputs[0]) - } - if r.canAVX2C(byteCount, len(inputs), len(outputs)) { - m := genAvx2Matrix(matrixRows, len(inputs), 0, len(outputs), r.mPool.Get().([]byte)) - start += galMulSlicesAvx2(m, inputs, outputs, 0, byteCount) - r.mPool.Put(m) - end = len(inputs[0]) - } else if len(inputs)+len(outputs) > avx2CodeGenMinShards && r.canAVX2C(byteCount, maxAvx2Inputs, maxAvx2Outputs) { - end = len(inputs[0]) - inIdx := 0 - m := r.mPool.Get().([]byte) - defer r.mPool.Put(m) - ins := inputs - for len(ins) > 0 { - inPer := ins - if len(inPer) > maxAvx2Inputs { - inPer = inPer[:maxAvx2Inputs] - } - outs := outputs - outIdx := 0 - for len(outs) > 0 { - outPer := outs - if len(outPer) > maxAvx2Outputs { - outPer = outPer[:maxAvx2Outputs] - } - m = genAvx2Matrix(matrixRows[outIdx:], len(inPer), inIdx, len(outPer), m) - if inIdx == 0 { - galMulSlicesAvx2(m, inPer, outPer, 0, byteCount) - } else { - galMulSlicesAvx2Xor(m, inPer, outPer, 0, byteCount) - } - start = byteCount & avxSizeMask - outIdx += len(outPer) - outs = outs[len(outPer):] - } - inIdx += len(inPer) - ins = ins[len(inPer):] - } - if start >= end { - return - } - } - for start < len(inputs[0]) { - for c := 0; c < len(inputs); c++ { - in := inputs[c][start:end] - for iRow := 0; iRow < len(outputs); iRow++ { - if c == 0 { - galMulSlice(matrixRows[iRow][c], in, outputs[iRow][start:end], &r.o) - } else { - galMulSliceXor(matrixRows[iRow][c], in, outputs[iRow][start:end], &r.o) - } - } - } - start = end - end += r.o.perRound - if end > len(inputs[0]) { - end = len(inputs[0]) - } - } -} - -// Perform the same as codeSomeShards, but split the workload into -// several goroutines. -func (r *reedSolomon) codeSomeShardsP(matrixRows, inputs, outputs [][]byte, byteCount int) { - var wg sync.WaitGroup - gor := r.o.maxGoroutines - - var avx2Matrix []byte - useAvx2 := r.canAVX2C(byteCount, len(inputs), len(outputs)) - if useAvx2 { - avx2Matrix = genAvx2Matrix(matrixRows, len(inputs), 0, len(outputs), r.mPool.Get().([]byte)) - defer r.mPool.Put(avx2Matrix) - } else if byteCount < 10<<20 && len(inputs)+len(outputs) > avx2CodeGenMinShards && - r.canAVX2C(byteCount/4, maxAvx2Inputs, maxAvx2Outputs) { - // It appears there is a switchover point at around 10MB where - // Regular processing is faster... - r.codeSomeShardsAVXP(matrixRows, inputs, outputs, byteCount) - return - } - - do := byteCount / gor - if do < r.o.minSplitSize { - do = r.o.minSplitSize - } - - exec := func(start, stop int) { - if useAvx2 && stop-start >= 64 { - start += galMulSlicesAvx2(avx2Matrix, inputs, outputs, start, stop) - } - - lstart, lstop := start, start+r.o.perRound - if lstop > stop { - lstop = stop - } - for lstart < stop { - for c := 0; c < len(inputs); c++ { - in := inputs[c][lstart:lstop] - for iRow := 0; iRow < len(outputs); iRow++ { - if c == 0 { - galMulSlice(matrixRows[iRow][c], in, outputs[iRow][lstart:lstop], &r.o) - } else { - galMulSliceXor(matrixRows[iRow][c], in, outputs[iRow][lstart:lstop], &r.o) - } - } - } - lstart = lstop - lstop += r.o.perRound - if lstop > stop { - lstop = stop - } - } - wg.Done() - } - if gor <= 1 { - wg.Add(1) - exec(0, byteCount) - return - } - - // Make sizes divisible by 64 - do = (do + 63) & (^63) - start := 0 - for start < byteCount { - if start+do > byteCount { - do = byteCount - start - } - - wg.Add(1) - go exec(start, start+do) - start += do - } - wg.Wait() -} - -// Perform the same as codeSomeShards, but split the workload into -// several goroutines. -func (r *reedSolomon) codeSomeShardsAVXP(matrixRows, inputs, outputs [][]byte, byteCount int) { - var wg sync.WaitGroup - gor := r.o.maxGoroutines - - type state struct { - input [][]byte - output [][]byte - m []byte - first bool - } - // Make a plan... - plan := make([]state, 0, ((len(inputs)+maxAvx2Inputs-1)/maxAvx2Inputs)*((len(outputs)+maxAvx2Outputs-1)/maxAvx2Outputs)) - - tmp := r.mPool.Get().([]byte) - defer func(b []byte) { - r.mPool.Put(b) - }(tmp) - - // Flips between input first to output first. - // We put the smallest data load in the inner loop. - if len(inputs) > len(outputs) { - inIdx := 0 - ins := inputs - for len(ins) > 0 { - inPer := ins - if len(inPer) > maxAvx2Inputs { - inPer = inPer[:maxAvx2Inputs] - } - outs := outputs - outIdx := 0 - for len(outs) > 0 { - outPer := outs - if len(outPer) > maxAvx2Outputs { - outPer = outPer[:maxAvx2Outputs] - } - // Generate local matrix - m := genAvx2Matrix(matrixRows[outIdx:], len(inPer), inIdx, len(outPer), tmp) - tmp = tmp[len(m):] - plan = append(plan, state{ - input: inPer, - output: outPer, - m: m, - first: inIdx == 0, - }) - outIdx += len(outPer) - outs = outs[len(outPer):] - } - inIdx += len(inPer) - ins = ins[len(inPer):] - } - } else { - outs := outputs - outIdx := 0 - for len(outs) > 0 { - outPer := outs - if len(outPer) > maxAvx2Outputs { - outPer = outPer[:maxAvx2Outputs] - } - - inIdx := 0 - ins := inputs - for len(ins) > 0 { - inPer := ins - if len(inPer) > maxAvx2Inputs { - inPer = inPer[:maxAvx2Inputs] - } - // Generate local matrix - m := genAvx2Matrix(matrixRows[outIdx:], len(inPer), inIdx, len(outPer), tmp) - tmp = tmp[len(m):] - //fmt.Println("bytes:", len(inPer)*r.o.perRound, "out:", len(outPer)*r.o.perRound) - plan = append(plan, state{ - input: inPer, - output: outPer, - m: m, - first: inIdx == 0, - }) - inIdx += len(inPer) - ins = ins[len(inPer):] - } - outIdx += len(outPer) - outs = outs[len(outPer):] - } - } - - do := byteCount / gor - if do < r.o.minSplitSize { - do = r.o.minSplitSize - } - - exec := func(start, stop int) { - lstart, lstop := start, start+r.o.perRound - if lstop > stop { - lstop = stop - } - for lstart < stop { - if lstop-lstart >= minAvx2Size { - // Execute plan... - for _, p := range plan { - if p.first { - galMulSlicesAvx2(p.m, p.input, p.output, lstart, lstop) - } else { - galMulSlicesAvx2Xor(p.m, p.input, p.output, lstart, lstop) - } - } - lstart += (lstop - lstart) & avxSizeMask - if lstart == lstop { - lstop += r.o.perRound - if lstop > stop { - lstop = stop - } - continue - } - } - - for c := range inputs { - in := inputs[c][lstart:lstop] - for iRow := 0; iRow < len(outputs); iRow++ { - if c == 0 { - galMulSlice(matrixRows[iRow][c], in, outputs[iRow][lstart:lstop], &r.o) - } else { - galMulSliceXor(matrixRows[iRow][c], in, outputs[iRow][lstart:lstop], &r.o) - } - } - } - lstart = lstop - lstop += r.o.perRound - if lstop > stop { - lstop = stop - } - } - wg.Done() - } - if gor == 1 { - wg.Add(1) - exec(0, byteCount) - return - } - - // Make sizes divisible by 64 - do = (do + 63) & (^63) - start := 0 - for start < byteCount { - if start+do > byteCount { - do = byteCount - start - } - - wg.Add(1) - go exec(start, start+do) - start += do - } - wg.Wait() -} - -// checkSomeShards is mostly the same as codeSomeShards, -// except this will check values and return -// as soon as a difference is found. -func (r *reedSolomon) checkSomeShards(matrixRows, inputs, toCheck [][]byte, byteCount int) bool { - if len(toCheck) == 0 { - return true - } - - outputs := make([][]byte, len(toCheck)) - for i := range outputs { - outputs[i] = make([]byte, byteCount) - } - r.codeSomeShards(matrixRows, inputs, outputs, byteCount) - - for i, calc := range outputs { - if !bytes.Equal(calc, toCheck[i]) { - return false - } - } - return true -} - -// ErrShardNoData will be returned if there are no shards, -// or if the length of all shards is zero. -var ErrShardNoData = errors.New("no shard data") - -// ErrShardSize is returned if shard length isn't the same for all -// shards. -var ErrShardSize = errors.New("shard sizes do not match") - -// checkShards will check if shards are the same size -// or 0, if allowed. An error is returned if this fails. -// An error is also returned if all shards are size 0. -func checkShards(shards [][]byte, nilok bool) error { - size := shardSize(shards) - if size == 0 { - return ErrShardNoData - } - for _, shard := range shards { - if len(shard) != size { - if len(shard) != 0 || !nilok { - return ErrShardSize - } - } - } - return nil -} - -// shardSize return the size of a single shard. -// The first non-zero size is returned, -// or 0 if all shards are size 0. -func shardSize(shards [][]byte) int { - for _, shard := range shards { - if len(shard) != 0 { - return len(shard) - } - } - return 0 -} - -// Reconstruct will recreate the missing shards, if possible. -// -// Given a list of shards, some of which contain data, fills in the -// ones that don't have data. -// -// The length of the array must be equal to shards. -// You indicate that a shard is missing by setting it to nil or zero-length. -// If a shard is zero-length but has sufficient capacity, that memory will -// be used, otherwise a new []byte will be allocated. -// -// If there are too few shards to reconstruct the missing -// ones, ErrTooFewShards will be returned. -// -// The reconstructed shard set is complete, but integrity is not verified. -// Use the Verify function to check if data set is ok. -func (r *reedSolomon) Reconstruct(shards [][]byte) error { - return r.reconstruct(shards, false, nil) -} - -// ReconstructData will recreate any missing data shards, if possible. -// -// Given a list of shards, some of which contain data, fills in the -// data shards that don't have data. -// -// The length of the array must be equal to shards. -// You indicate that a shard is missing by setting it to nil or zero-length. -// If a shard is zero-length but has sufficient capacity, that memory will -// be used, otherwise a new []byte will be allocated. -// -// If there are too few shards to reconstruct the missing -// ones, ErrTooFewShards will be returned. -// -// As the reconstructed shard set may contain missing parity shards, -// calling the Verify function is likely to fail. -func (r *reedSolomon) ReconstructData(shards [][]byte) error { - return r.reconstruct(shards, true, nil) -} - -// ReconstructSome will recreate only requested data shards, if possible. -// -// Given a list of shards, some of which contain data, fills in the -// data shards indicated by true values in the "required" parameter. -// The length of "required" array must be equal to dataShards. -// -// The length of "shards" array must be equal to shards. -// You indicate that a shard is missing by setting it to nil or zero-length. -// If a shard is zero-length but has sufficient capacity, that memory will -// be used, otherwise a new []byte will be allocated. -// -// If there are too few shards to reconstruct the missing -// ones, ErrTooFewShards will be returned. -// -// As the reconstructed shard set may contain missing parity shards, -// calling the Verify function is likely to fail. -func (r *reedSolomon) ReconstructSome(shards [][]byte, required []bool) error { - return r.reconstruct(shards, true, required) -} - -// reconstruct will recreate the missing data totalShards, and unless -// dataOnly is true, also the missing parity totalShards -// -// The length of "shards" array must be equal to totalShards. -// You indicate that a shard is missing by setting it to nil. -// -// If there are too few totalShards to reconstruct the missing -// ones, ErrTooFewShards will be returned. -func (r *reedSolomon) reconstruct(shards [][]byte, dataOnly bool, required []bool) error { - if len(shards) != r.totalShards || required != nil && len(required) < r.dataShards { - return ErrTooFewShards - } - // Check arguments. - err := checkShards(shards, true) - if err != nil { - return err - } - - shardSize := shardSize(shards) - - // Quick check: are all of the shards present? If so, there's - // nothing to do. - numberPresent := 0 - dataPresent := 0 - missingRequired := 0 - for i := 0; i < r.totalShards; i++ { - if len(shards[i]) != 0 { - numberPresent++ - if i < r.dataShards { - dataPresent++ - } - } else if required != nil && required[i] { - missingRequired++ - } - } - if numberPresent == r.totalShards || dataOnly && dataPresent == r.dataShards || - required != nil && missingRequired == 0 { - // Cool. All of the shards have data. We don't - // need to do anything. - return nil - } - - // More complete sanity check - if numberPresent < r.dataShards { - return ErrTooFewShards - } - - // Pull out an array holding just the shards that - // correspond to the rows of the submatrix. These shards - // will be the input to the decoding process that re-creates - // the missing data shards. - // - // Also, create an array of indices of the valid rows we do have - // and the invalid rows we don't have up until we have enough valid rows. - subShards := make([][]byte, r.dataShards) - validIndices := make([]int, r.dataShards) - invalidIndices := make([]int, 0) - subMatrixRow := 0 - for matrixRow := 0; matrixRow < r.totalShards && subMatrixRow < r.dataShards; matrixRow++ { - if len(shards[matrixRow]) != 0 { - subShards[subMatrixRow] = shards[matrixRow] - validIndices[subMatrixRow] = matrixRow - subMatrixRow++ - } else { - invalidIndices = append(invalidIndices, matrixRow) - } - } - - // Attempt to get the cached inverted matrix out of the tree - // based on the indices of the invalid rows. - dataDecodeMatrix := r.tree.GetInvertedMatrix(invalidIndices) - - // If the inverted matrix isn't cached in the tree yet we must - // construct it ourselves and insert it into the tree for the - // future. In this way the inversion tree is lazily loaded. - if dataDecodeMatrix == nil { - // Pull out the rows of the matrix that correspond to the - // shards that we have and build a square matrix. This - // matrix could be used to generate the shards that we have - // from the original data. - subMatrix, _ := newMatrix(r.dataShards, r.dataShards) - for subMatrixRow, validIndex := range validIndices { - for c := 0; c < r.dataShards; c++ { - subMatrix[subMatrixRow][c] = r.m[validIndex][c] - } - } - // Invert the matrix, so we can go from the encoded shards - // back to the original data. Then pull out the row that - // generates the shard that we want to decode. Note that - // since this matrix maps back to the original data, it can - // be used to create a data shard, but not a parity shard. - dataDecodeMatrix, err = subMatrix.Invert() - if err != nil { - return err - } - - // Cache the inverted matrix in the tree for future use keyed on the - // indices of the invalid rows. - err = r.tree.InsertInvertedMatrix(invalidIndices, dataDecodeMatrix, r.totalShards) - if err != nil { - return err - } - } - - // Re-create any data shards that were missing. - // - // The input to the coding is all of the shards we actually - // have, and the output is the missing data shards. The computation - // is done using the special decode matrix we just built. - outputs := make([][]byte, r.parityShards) - matrixRows := make([][]byte, r.parityShards) - outputCount := 0 - - for iShard := 0; iShard < r.dataShards; iShard++ { - if len(shards[iShard]) == 0 && (required == nil || required[iShard]) { - if cap(shards[iShard]) >= shardSize { - shards[iShard] = shards[iShard][0:shardSize] - } else { - shards[iShard] = make([]byte, shardSize) - } - outputs[outputCount] = shards[iShard] - matrixRows[outputCount] = dataDecodeMatrix[iShard] - outputCount++ - } - } - r.codeSomeShards(matrixRows, subShards, outputs[:outputCount], shardSize) - - if dataOnly { - // Exit out early if we are only interested in the data shards - return nil - } - - // Now that we have all of the data shards intact, we can - // compute any of the parity that is missing. - // - // The input to the coding is ALL of the data shards, including - // any that we just calculated. The output is whichever of the - // data shards were missing. - outputCount = 0 - for iShard := r.dataShards; iShard < r.totalShards; iShard++ { - if len(shards[iShard]) == 0 && (required == nil || required[iShard]) { - if cap(shards[iShard]) >= shardSize { - shards[iShard] = shards[iShard][0:shardSize] - } else { - shards[iShard] = make([]byte, shardSize) - } - outputs[outputCount] = shards[iShard] - matrixRows[outputCount] = r.parity[iShard-r.dataShards] - outputCount++ - } - } - r.codeSomeShards(matrixRows, shards[:r.dataShards], outputs[:outputCount], shardSize) - return nil -} - -// ErrShortData will be returned by Split(), if there isn't enough data -// to fill the number of shards. -var ErrShortData = errors.New("not enough data to fill the number of requested shards") - -// Split a data slice into the number of shards given to the encoder, -// and create empty parity shards if necessary. -// -// The data will be split into equally sized shards. -// If the data size isn't divisible by the number of shards, -// the last shard will contain extra zeros. -// -// There must be at least 1 byte otherwise ErrShortData will be -// returned. -// -// The data will not be copied, except for the last shard, so you -// should not modify the data of the input slice afterwards. -func (r *reedSolomon) Split(data []byte) ([][]byte, error) { - if len(data) == 0 { - return nil, ErrShortData - } - dataLen := len(data) - // Calculate number of bytes per data shard. - perShard := (len(data) + r.dataShards - 1) / r.dataShards - - if cap(data) > len(data) { - data = data[:cap(data)] - } - - // Only allocate memory if necessary - var padding []byte - if len(data) < (r.totalShards * perShard) { - // calculate maximum number of full shards in `data` slice - fullShards := len(data) / perShard - padding = make([]byte, r.totalShards*perShard-perShard*fullShards) - copy(padding, data[perShard*fullShards:]) - data = data[0 : perShard*fullShards] - } else { - for i := dataLen; i < dataLen+r.dataShards; i++ { - data[i] = 0 - } - } - - // Split into equal-length shards. - dst := make([][]byte, r.totalShards) - i := 0 - for ; i < len(dst) && len(data) >= perShard; i++ { - dst[i] = data[:perShard:perShard] - data = data[perShard:] - } - - for j := 0; i+j < len(dst); j++ { - dst[i+j] = padding[:perShard:perShard] - padding = padding[perShard:] - } - - return dst, nil -} - -// ErrReconstructRequired is returned if too few data shards are intact and a -// reconstruction is required before you can successfully join the shards. -var ErrReconstructRequired = errors.New("reconstruction required as one or more required data shards are nil") - -// Join the shards and write the data segment to dst. -// -// Only the data shards are considered. -// You must supply the exact output size you want. -// -// If there are to few shards given, ErrTooFewShards will be returned. -// If the total data size is less than outSize, ErrShortData will be returned. -// If one or more required data shards are nil, ErrReconstructRequired will be returned. -func (r *reedSolomon) Join(dst io.Writer, shards [][]byte, outSize int) error { - // Do we have enough shards? - if len(shards) < r.dataShards { - return ErrTooFewShards - } - shards = shards[:r.dataShards] - - // Do we have enough data? - size := 0 - for _, shard := range shards { - if shard == nil { - return ErrReconstructRequired - } - size += len(shard) - - // Do we have enough data already? - if size >= outSize { - break - } - } - if size < outSize { - return ErrShortData - } - - // Copy data to dst - write := outSize - for _, shard := range shards { - if write < len(shard) { - _, err := dst.Write(shard[:write]) - return err - } - n, err := dst.Write(shard) - if err != nil { - return err - } - write -= n - } - return nil -} diff --git a/vendor/github.com/klauspost/reedsolomon/streaming.go b/vendor/github.com/klauspost/reedsolomon/streaming.go deleted file mode 100644 index e3aaf00..0000000 --- a/vendor/github.com/klauspost/reedsolomon/streaming.go +++ /dev/null @@ -1,607 +0,0 @@ -/** - * Reed-Solomon Coding over 8-bit values. - * - * Copyright 2015, Klaus Post - * Copyright 2015, Backblaze, Inc. - */ - -package reedsolomon - -import ( - "bytes" - "errors" - "fmt" - "io" - "sync" -) - -// StreamEncoder is an interface to encode Reed-Salomon parity sets for your data. -// It provides a fully streaming interface, and processes data in blocks of up to 4MB. -// -// For small shard sizes, 10MB and below, it is recommended to use the in-memory interface, -// since the streaming interface has a start up overhead. -// -// For all operations, no readers and writers should not assume any order/size of -// individual reads/writes. -// -// For usage examples, see "stream-encoder.go" and "streamdecoder.go" in the examples -// folder. -type StreamEncoder interface { - // Encode parity shards for a set of data shards. - // - // Input is 'shards' containing readers for data shards followed by parity shards - // io.Writer. - // - // The number of shards must match the number given to NewStream(). - // - // Each reader must supply the same number of bytes. - // - // The parity shards will be written to the writer. - // The number of bytes written will match the input size. - // - // If a data stream returns an error, a StreamReadError type error - // will be returned. If a parity writer returns an error, a - // StreamWriteError will be returned. - Encode(data []io.Reader, parity []io.Writer) error - - // Verify returns true if the parity shards contain correct data. - // - // The number of shards must match the number total data+parity shards - // given to NewStream(). - // - // Each reader must supply the same number of bytes. - // If a shard stream returns an error, a StreamReadError type error - // will be returned. - Verify(shards []io.Reader) (bool, error) - - // Reconstruct will recreate the missing shards if possible. - // - // Given a list of valid shards (to read) and invalid shards (to write) - // - // You indicate that a shard is missing by setting it to nil in the 'valid' - // slice and at the same time setting a non-nil writer in "fill". - // An index cannot contain both non-nil 'valid' and 'fill' entry. - // If both are provided 'ErrReconstructMismatch' is returned. - // - // If there are too few shards to reconstruct the missing - // ones, ErrTooFewShards will be returned. - // - // The reconstructed shard set is complete, but integrity is not verified. - // Use the Verify function to check if data set is ok. - Reconstruct(valid []io.Reader, fill []io.Writer) error - - // Split a an input stream into the number of shards given to the encoder. - // - // The data will be split into equally sized shards. - // If the data size isn't dividable by the number of shards, - // the last shard will contain extra zeros. - // - // You must supply the total size of your input. - // 'ErrShortData' will be returned if it is unable to retrieve the - // number of bytes indicated. - Split(data io.Reader, dst []io.Writer, size int64) (err error) - - // Join the shards and write the data segment to dst. - // - // Only the data shards are considered. - // - // You must supply the exact output size you want. - // If there are to few shards given, ErrTooFewShards will be returned. - // If the total data size is less than outSize, ErrShortData will be returned. - Join(dst io.Writer, shards []io.Reader, outSize int64) error -} - -// StreamReadError is returned when a read error is encountered -// that relates to a supplied stream. -// This will allow you to find out which reader has failed. -type StreamReadError struct { - Err error // The error - Stream int // The stream number on which the error occurred -} - -// Error returns the error as a string -func (s StreamReadError) Error() string { - return fmt.Sprintf("error reading stream %d: %s", s.Stream, s.Err) -} - -// String returns the error as a string -func (s StreamReadError) String() string { - return s.Error() -} - -// StreamWriteError is returned when a write error is encountered -// that relates to a supplied stream. This will allow you to -// find out which reader has failed. -type StreamWriteError struct { - Err error // The error - Stream int // The stream number on which the error occurred -} - -// Error returns the error as a string -func (s StreamWriteError) Error() string { - return fmt.Sprintf("error writing stream %d: %s", s.Stream, s.Err) -} - -// String returns the error as a string -func (s StreamWriteError) String() string { - return s.Error() -} - -// rsStream contains a matrix for a specific -// distribution of datashards and parity shards. -// Construct if using NewStream() -type rsStream struct { - r *reedSolomon - o options - - // Shard reader - readShards func(dst [][]byte, in []io.Reader) error - // Shard writer - writeShards func(out []io.Writer, in [][]byte) error - - blockPool sync.Pool -} - -// NewStream creates a new encoder and initializes it to -// the number of data shards and parity shards that -// you want to use. You can reuse this encoder. -// Note that the maximum number of data shards is 256. -func NewStream(dataShards, parityShards int, o ...Option) (StreamEncoder, error) { - if dataShards+parityShards > 256 { - return nil, ErrMaxShardNum - } - - r := rsStream{o: defaultOptions} - for _, opt := range o { - opt(&r.o) - } - // Override block size if shard size is set. - if r.o.streamBS == 0 && r.o.shardSize > 0 { - r.o.streamBS = r.o.shardSize - } - if r.o.streamBS <= 0 { - r.o.streamBS = 4 << 20 - } - if r.o.shardSize == 0 && r.o.maxGoroutines == defaultOptions.maxGoroutines { - o = append(o, WithAutoGoroutines(r.o.streamBS)) - } - - enc, err := New(dataShards, parityShards, o...) - if err != nil { - return nil, err - } - r.r = enc.(*reedSolomon) - - r.blockPool.New = func() interface{} { - out := make([][]byte, dataShards+parityShards) - for i := range out { - out[i] = make([]byte, r.o.streamBS) - } - return out - } - r.readShards = readShards - r.writeShards = writeShards - if r.o.concReads { - r.readShards = cReadShards - } - if r.o.concWrites { - r.writeShards = cWriteShards - } - - return &r, err -} - -// NewStreamC creates a new encoder and initializes it to -// the number of data shards and parity shards given. -// -// This functions as 'NewStream', but allows you to enable CONCURRENT reads and writes. -func NewStreamC(dataShards, parityShards int, conReads, conWrites bool, o ...Option) (StreamEncoder, error) { - return NewStream(dataShards, parityShards, append(o, WithConcurrentStreamReads(conReads), WithConcurrentStreamWrites(conWrites))...) -} - -func (r *rsStream) createSlice() [][]byte { - out := r.blockPool.Get().([][]byte) - for i := range out { - out[i] = out[i][:r.o.streamBS] - } - return out -} - -// Encodes parity shards for a set of data shards. -// -// Input is 'shards' containing readers for data shards followed by parity shards -// io.Writer. -// -// The number of shards must match the number given to NewStream(). -// -// Each reader must supply the same number of bytes. -// -// The parity shards will be written to the writer. -// The number of bytes written will match the input size. -// -// If a data stream returns an error, a StreamReadError type error -// will be returned. If a parity writer returns an error, a -// StreamWriteError will be returned. -func (r *rsStream) Encode(data []io.Reader, parity []io.Writer) error { - if len(data) != r.r.dataShards { - return ErrTooFewShards - } - - if len(parity) != r.r.parityShards { - return ErrTooFewShards - } - - all := r.createSlice() - defer r.blockPool.Put(all) - in := all[:r.r.dataShards] - out := all[r.r.dataShards:] - read := 0 - - for { - err := r.readShards(in, data) - switch err { - case nil: - case io.EOF: - if read == 0 { - return ErrShardNoData - } - return nil - default: - return err - } - out = trimShards(out, shardSize(in)) - read += shardSize(in) - err = r.r.Encode(all) - if err != nil { - return err - } - err = r.writeShards(parity, out) - if err != nil { - return err - } - } -} - -// Trim the shards so they are all the same size -func trimShards(in [][]byte, size int) [][]byte { - for i := range in { - if len(in[i]) != 0 { - in[i] = in[i][0:size] - } - if len(in[i]) < size { - in[i] = in[i][:0] - } - } - return in -} - -func readShards(dst [][]byte, in []io.Reader) error { - if len(in) != len(dst) { - panic("internal error: in and dst size do not match") - } - size := -1 - for i := range in { - if in[i] == nil { - dst[i] = dst[i][:0] - continue - } - n, err := io.ReadFull(in[i], dst[i]) - // The error is EOF only if no bytes were read. - // If an EOF happens after reading some but not all the bytes, - // ReadFull returns ErrUnexpectedEOF. - switch err { - case io.ErrUnexpectedEOF, io.EOF: - if size < 0 { - size = n - } else if n != size { - // Shard sizes must match. - return ErrShardSize - } - dst[i] = dst[i][0:n] - case nil: - continue - default: - return StreamReadError{Err: err, Stream: i} - } - } - if size == 0 { - return io.EOF - } - return nil -} - -func writeShards(out []io.Writer, in [][]byte) error { - if len(out) != len(in) { - panic("internal error: in and out size do not match") - } - for i := range in { - if out[i] == nil { - continue - } - n, err := out[i].Write(in[i]) - if err != nil { - return StreamWriteError{Err: err, Stream: i} - } - // - if n != len(in[i]) { - return StreamWriteError{Err: io.ErrShortWrite, Stream: i} - } - } - return nil -} - -type readResult struct { - n int - size int - err error -} - -// cReadShards reads shards concurrently -func cReadShards(dst [][]byte, in []io.Reader) error { - if len(in) != len(dst) { - panic("internal error: in and dst size do not match") - } - var wg sync.WaitGroup - wg.Add(len(in)) - res := make(chan readResult, len(in)) - for i := range in { - if in[i] == nil { - dst[i] = dst[i][:0] - wg.Done() - continue - } - go func(i int) { - defer wg.Done() - n, err := io.ReadFull(in[i], dst[i]) - // The error is EOF only if no bytes were read. - // If an EOF happens after reading some but not all the bytes, - // ReadFull returns ErrUnexpectedEOF. - res <- readResult{size: n, err: err, n: i} - - }(i) - } - wg.Wait() - close(res) - size := -1 - for r := range res { - switch r.err { - case io.ErrUnexpectedEOF, io.EOF: - if size < 0 { - size = r.size - } else if r.size != size { - // Shard sizes must match. - return ErrShardSize - } - dst[r.n] = dst[r.n][0:r.size] - case nil: - default: - return StreamReadError{Err: r.err, Stream: r.n} - } - } - if size == 0 { - return io.EOF - } - return nil -} - -// cWriteShards writes shards concurrently -func cWriteShards(out []io.Writer, in [][]byte) error { - if len(out) != len(in) { - panic("internal error: in and out size do not match") - } - var errs = make(chan error, len(out)) - var wg sync.WaitGroup - wg.Add(len(out)) - for i := range in { - go func(i int) { - defer wg.Done() - if out[i] == nil { - errs <- nil - return - } - n, err := out[i].Write(in[i]) - if err != nil { - errs <- StreamWriteError{Err: err, Stream: i} - return - } - if n != len(in[i]) { - errs <- StreamWriteError{Err: io.ErrShortWrite, Stream: i} - } - }(i) - } - wg.Wait() - close(errs) - for err := range errs { - if err != nil { - return err - } - } - - return nil -} - -// Verify returns true if the parity shards contain correct data. -// -// The number of shards must match the number total data+parity shards -// given to NewStream(). -// -// Each reader must supply the same number of bytes. -// If a shard stream returns an error, a StreamReadError type error -// will be returned. -func (r *rsStream) Verify(shards []io.Reader) (bool, error) { - if len(shards) != r.r.totalShards { - return false, ErrTooFewShards - } - - read := 0 - all := r.createSlice() - defer r.blockPool.Put(all) - for { - err := r.readShards(all, shards) - if err == io.EOF { - if read == 0 { - return false, ErrShardNoData - } - return true, nil - } - if err != nil { - return false, err - } - read += shardSize(all) - ok, err := r.r.Verify(all) - if !ok || err != nil { - return ok, err - } - } -} - -// ErrReconstructMismatch is returned by the StreamEncoder, if you supply -// "valid" and "fill" streams on the same index. -// Therefore it is impossible to see if you consider the shard valid -// or would like to have it reconstructed. -var ErrReconstructMismatch = errors.New("valid shards and fill shards are mutually exclusive") - -// Reconstruct will recreate the missing shards if possible. -// -// Given a list of valid shards (to read) and invalid shards (to write) -// -// You indicate that a shard is missing by setting it to nil in the 'valid' -// slice and at the same time setting a non-nil writer in "fill". -// An index cannot contain both non-nil 'valid' and 'fill' entry. -// -// If there are too few shards to reconstruct the missing -// ones, ErrTooFewShards will be returned. -// -// The reconstructed shard set is complete when explicitly asked for all missing shards. -// However its integrity is not automatically verified. -// Use the Verify function to check in case the data set is complete. -func (r *rsStream) Reconstruct(valid []io.Reader, fill []io.Writer) error { - if len(valid) != r.r.totalShards { - return ErrTooFewShards - } - if len(fill) != r.r.totalShards { - return ErrTooFewShards - } - - all := r.createSlice() - defer r.blockPool.Put(all) - reconDataOnly := true - for i := range valid { - if valid[i] != nil && fill[i] != nil { - return ErrReconstructMismatch - } - if i >= r.r.dataShards && fill[i] != nil { - reconDataOnly = false - } - } - - read := 0 - for { - err := r.readShards(all, valid) - if err == io.EOF { - if read == 0 { - return ErrShardNoData - } - return nil - } - if err != nil { - return err - } - read += shardSize(all) - all = trimShards(all, shardSize(all)) - - if reconDataOnly { - err = r.r.ReconstructData(all) // just reconstruct missing data shards - } else { - err = r.r.Reconstruct(all) // reconstruct all missing shards - } - if err != nil { - return err - } - err = r.writeShards(fill, all) - if err != nil { - return err - } - } -} - -// Join the shards and write the data segment to dst. -// -// Only the data shards are considered. -// -// You must supply the exact output size you want. -// If there are to few shards given, ErrTooFewShards will be returned. -// If the total data size is less than outSize, ErrShortData will be returned. -func (r *rsStream) Join(dst io.Writer, shards []io.Reader, outSize int64) error { - // Do we have enough shards? - if len(shards) < r.r.dataShards { - return ErrTooFewShards - } - - // Trim off parity shards if any - shards = shards[:r.r.dataShards] - for i := range shards { - if shards[i] == nil { - return StreamReadError{Err: ErrShardNoData, Stream: i} - } - } - // Join all shards - src := io.MultiReader(shards...) - - // Copy data to dst - n, err := io.CopyN(dst, src, outSize) - if err == io.EOF { - return ErrShortData - } - if err != nil { - return err - } - if n != outSize { - return ErrShortData - } - return nil -} - -// Split a an input stream into the number of shards given to the encoder. -// -// The data will be split into equally sized shards. -// If the data size isn't dividable by the number of shards, -// the last shard will contain extra zeros. -// -// You must supply the total size of your input. -// 'ErrShortData' will be returned if it is unable to retrieve the -// number of bytes indicated. -func (r *rsStream) Split(data io.Reader, dst []io.Writer, size int64) error { - if size == 0 { - return ErrShortData - } - if len(dst) != r.r.dataShards { - return ErrInvShardNum - } - - for i := range dst { - if dst[i] == nil { - return StreamWriteError{Err: ErrShardNoData, Stream: i} - } - } - - // Calculate number of bytes per shard. - perShard := (size + int64(r.r.dataShards) - 1) / int64(r.r.dataShards) - - // Pad data to r.Shards*perShard. - padding := make([]byte, (int64(r.r.totalShards)*perShard)-size) - data = io.MultiReader(data, bytes.NewBuffer(padding)) - - // Split into equal-length shards and copy. - for i := range dst { - n, err := io.CopyN(dst[i], data, perShard) - if err != io.EOF && err != nil { - return err - } - if n != perShard { - return ErrShortData - } - } - - return nil -} diff --git a/vendor/github.com/kuking/go-frodokem/.gitignore b/vendor/github.com/kuking/go-frodokem/.gitignore deleted file mode 100644 index 3a02bf1..0000000 --- a/vendor/github.com/kuking/go-frodokem/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -*.exe -*.exe~ -*.dll -*.so -*.dylib -*.test -*.out - -.idea -bin/ - diff --git a/vendor/github.com/kuking/go-frodokem/LICENSE b/vendor/github.com/kuking/go-frodokem/LICENSE deleted file mode 100644 index cb89df3..0000000 --- a/vendor/github.com/kuking/go-frodokem/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2020 Ed Riccardi - -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/kuking/go-frodokem/Makefile b/vendor/github.com/kuking/go-frodokem/Makefile deleted file mode 100644 index 6374be6..0000000 --- a/vendor/github.com/kuking/go-frodokem/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -all: clean build test bench coverage - -clean: - go clean -testcache -cache - rm -f bin/soak_test bin/demo - -build: - go build - go build -o bin/soak_test mains/soak/soak.go - go build -o bin/demo mains/demo/demo.go - -test: - go test - -bench: - go test -run=Benchmark -bench=. -benchmem - -coverage: - go test -cover -coverprofile=coverage.out - go tool cover -func=coverage.out - - diff --git a/vendor/github.com/kuking/go-frodokem/README.md b/vendor/github.com/kuking/go-frodokem/README.md deleted file mode 100644 index d548558..0000000 --- a/vendor/github.com/kuking/go-frodokem/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# FrodoKEM in Golang -Golang implementation of FrodoKEM: a Practical quantum-secure key encapsulation from generic lattices (https://frodokem.org). -This implementation passes all KAT tests from the reference specification for all defined key sizes (640 / 976 / 1344) and variants (AES / SHAKE). - -## API -There is a demo app that uses every method in the API. i.e. methods for listing variants, for creating key pairs, -encapsulating & dencapsulating kems, auxiliary methods reporting cipher-text length, key-length, variant name, etc. -You can find it here: [demo.go](mains/demo/demo.go). The built binary will be placed in `bin/demo` (use `make build` to -generate it). - -You can also read the documentation using `go doc -all` in this package, or look at [impl.go](impl.go) and -[types.go](types.go). - -_Complete usage Snippet:_ -```go -import frodo "github.com/kuking/go-frodokem" - -kem := frodo.Frodo640AES() -pk, sk := kem.Keygen() // public-key, secret-key -ct, ssEnc, _ := kem.Encapsulate(pk) // cipher-text, shared-secret -ssDec, _ := kem.Dencapsulate(sk, ct) // recovered shared-secret -// ssEnc == ssDec -``` - -For a full key agreement example, see [agreement_test.go](agreement_test.go). - -#### Note on Concurrency -This library is stateless. A FrodoKEM struct (as returned by i.e. `frodo.Frodo640AES()`) can be used concurrently. -Keys are immutable `[]byte` and they can be shared between concurrent goroutines. - -## Author -Eduardo E.S. Riccardi, you can contact me via [linkedin](https://uk.linkedin.com/in/kukino), or you could find my email -address [here](https://kukino.uk/ed@kukino.uk.pub). - -## Releases - -v1.0.2 - 12 November 2021 - Updated XZ dependency version (only used in tests) - -v1.0.1 - 25 June 2020 - Fixed a possible timing attack [#2](https://github.com/kuking/go-frodokem/issues/2) - -v1.0.0 - 10 June 2020 - Feature complete. - -## Pending -- implement optimisations with SIMD instructions - diff --git a/vendor/github.com/kuking/go-frodokem/impl.go b/vendor/github.com/kuking/go-frodokem/impl.go deleted file mode 100644 index 71395be..0000000 --- a/vendor/github.com/kuking/go-frodokem/impl.go +++ /dev/null @@ -1,535 +0,0 @@ -package go_frodokem - -import ( - "crypto/aes" - "encoding/binary" - "errors" - "golang.org/x/crypto/sha3" - "math" -) - -// Returns the name of this particular FrodoKEM variant, i.e. Frodo640AES -func (k *FrodoKEM) Name() string { - return k.name -} - -// Returns the shared secret (in bytes) this variant generates -func (k *FrodoKEM) SharedSecretLen() int { - return k.lenSS / 8 -} - -// Returns the public key length (in bytes) for this variant -func (k *FrodoKEM) PublicKeyLen() int { - return k.lenPkBytes -} - -// Returns the secret key length (in bytes) for this variant -func (k *FrodoKEM) SecretKeyLen() int { - return k.lenSkBytes -} - -// Returns the cipher-text length (in bytes) encapsulating the shared secret for this variant -func (k *FrodoKEM) CipherTextLen() int { - return k.lenCtBytes -} - -// Generate a key-pair -func (k *FrodoKEM) Keygen() (pk []uint8, sk []uint8) { - sSeedSEz := make([]byte, k.lenS/8+k.lenSeedSE/8+k.lenZ/8) - k.rng(sSeedSEz) // fmt.Println("randomness(", len(sSeedSEz), ")", strings.ToUpper(hex.EncodeToString(sSeedSEz))) - s := sSeedSEz[0 : k.lenS/8] - seedSE := sSeedSEz[k.lenS/8 : k.lenS/8+k.lenSeedSE/8] // fmt.Println("seedSE", hex.EncodeToString(seedSE)) - z := sSeedSEz[k.lenS/8+k.lenSeedSE/8 : k.lenS/8+k.lenSeedSE/8+k.lenZ/8] - seedA := k.shake(z, k.lenSeedA/8) // fmt.Println("seedA(", len(seedA), ")", strings.ToUpper(hex.EncodeToString(seedA))) - A := k.gen(seedA) - r := unpackUint16(k.shake(append([]byte{0x5f}, seedSE...), 2*k.n*k.nBar*k.lenChi/8)) //fmt.Println("r(", len(r), ")", r) - Stransposed := k.sampleMatrix(r[0:k.n*k.nBar], k.nBar, k.n) //fmt.Println("S^T", Stransposed) - S := matrixTranspose(Stransposed) - E := k.sampleMatrix(r[k.n*k.nBar:2*k.n*k.nBar], k.n, k.nBar) - B := matrixAddWithMod(matrixMulWithMod(A, S, k.q), E, k.q) - b := k.pack(B) // fmt.Println("b", hex.EncodeToString(b)) - pk = append(seedA, b...) - pkh := k.shake(pk, k.lenPkh/8) // fmt.Println("pkh", strings.ToUpper(hex.EncodeToString(pkh))) - stb := make([]uint8, len(Stransposed)*len(Stransposed[0])*2) - stbI := 0 - for i := 0; i < len(Stransposed); i++ { - for j := 0; j < len(Stransposed[i]); j++ { - stb[stbI] = uint8(Stransposed[i][j] & 0xff) - stbI++ - stb[stbI] = uint8(Stransposed[i][j] >> 8) - stbI++ - } - } - sk = append(s, seedA...) - sk = append(sk, b...) - sk = append(sk, stb...) - sk = append(sk, pkh...) - return -} - -// Generate a KEM returning the cipher-text and shared-secret -func (k *FrodoKEM) Encapsulate(pk []uint8) (ct []uint8, ssEnc []uint8, err error) { - if len(pk) != k.lenSeedA/8+k.d*k.n*k.nBar/8 { - err = errors.New("incorrect public key length") - return - } - seedA := pk[0 : k.lenSeedA/8] - b := pk[k.lenSeedA/8:] - mu := make([]uint8, k.lenMu/8) - k.rng(mu) - //fmt.Println("seedA", hex.EncodeToString(seedA)) - //fmt.Println("b", hex.EncodeToString(b)) - //fmt.Println("mu", hex.EncodeToString(mu)) - pkh := k.shake(pk, k.lenPkh/8) // fmt.Println("pkh", hex.EncodeToString(pkh)) - seedSE_k := k.shake(append(pkh, mu...), k.lenSeedSE/8+k.lenK/8) - seedSE := seedSE_k[0 : k.lenSeedSE/8] - _k := seedSE_k[k.lenSeedSE/8 : k.lenSeedSE/8+k.lenK/8] - r := unpackUint16(k.shake(append([]byte{0x96}, seedSE...), (2*k.mBar*k.n*k.mBar*k.mBar)*k.lenChi/8)) - Sprime := k.sampleMatrix(r[0:k.mBar*k.n], k.mBar, k.n) // fmt.Println("S'", Sprime) - Eprime := k.sampleMatrix(r[k.mBar*k.n:2*k.mBar*k.n], k.mBar, k.n) // fmt.Println("E'", Eprime) - A := k.gen(seedA) - Bprime := matrixAddWithMod(matrixMulWithMod2(Sprime, A, k.q), Eprime, k.q) // fmt.Println("b'", Bprime) - c1 := k.pack(Bprime) // fmt.Println("c1", hex.EncodeToString(c1)) - Eprimeprime := k.sampleMatrix(r[2*k.mBar*k.n:2*k.mBar*k.n+k.mBar*k.nBar], k.mBar, k.nBar) // fmt.Println("E''", Eprimeprime) - B := k.unpack(b, k.n, k.nBar) - V := matrixAddWithMod(matrixMulWithMod2(Sprime, B, k.q), Eprimeprime, k.q) - C := uMatrixAdd(V, k.encode(mu), k.q) - c2 := k.pack(C) // fmt.Println("c2", hex.EncodeToString(c2)) - ct = append(c1, c2...) - ssEnc = k.shake(append(ct, _k...), k.lenSS/8) - return -} - -// Returns the shared secret by using the provided cipher-text and secret-key -func (k *FrodoKEM) Dencapsulate(sk []uint8, ct []uint8) (ssDec []uint8, err error) { - if len(ct) != k.lenCtBytes { - err = errors.New("incorrect cipher length") - return - } - if len(sk) != k.lenSkBytes { - err = errors.New("incorrect secret key length") - return - } - - c1, c2 := k.unwrapCt(ct) - s, seedA, b, Stransposed, pkh := k.unwrapSk(sk) - S := matrixTranspose(Stransposed) - Bprime := k.unpack(c1, k.mBar, k.n) - C := k.unpack(c2, k.mBar, k.nBar) - BprimeS := matrixMulWithMod(Bprime, S, k.q) - M := matrixSubWithMod(C, BprimeS, k.q) - muPrime := k.decode(M) // fmt.Println("mu'", hex.EncodeToString(muPrime)) - - seedSEprime_kprime := k.shake(append(pkh, muPrime...), k.lenSeedSE/8+k.lenK/8) - seedSEprime := seedSEprime_kprime[0 : k.lenSeedSE/8] // fmt.Println("seedSE'", hex.EncodeToString(seedSEprime)) - kprime := seedSEprime_kprime[k.lenSeedSE/8:] // fmt.Println("k'", hex.EncodeToString(kprime)) - - r := unpackUint16(k.shake(append([]byte{0x96}, seedSEprime...), (2*k.mBar*k.n+k.mBar*k.mBar)*k.lenChi/8)) // fmt.Println("r", r) - - Sprime := k.sampleMatrix(r[0:k.mBar*k.n], k.mBar, k.n) - Eprime := k.sampleMatrix(r[k.mBar*k.n:2*k.mBar*k.n], k.mBar, k.n) - A := k.gen(seedA) - Bprimeprime := matrixAddWithMod(matrixMulWithMod2(Sprime, A, k.q), Eprime, k.q) - - Eprimeprime := k.sampleMatrix(r[2*k.mBar*k.n:2*k.mBar*k.n+k.mBar*k.nBar], k.mBar, k.nBar) - B := k.unpack(b, k.n, k.nBar) - V := matrixAddWithMod(matrixMulWithMod2(Sprime, B, k.q), Eprimeprime, k.q) - Cprime := uMatrixAdd(V, k.encode(muPrime), k.q) - - if constantUint16Equals(Bprime, Bprimeprime)+constantUint16Equals(C, Cprime) == 2 { - ssDec = k.shake(append(ct, kprime...), k.lenSS/8) - } else { - ssDec = k.shake(append(ct, s...), k.lenSS/8) - } - return -} - -// Overrides the default random number generator (crypto/rand) -func (k *FrodoKEM) OverrideRng(newRng func([]byte)) { - k.rng = newRng -} - -func (k *FrodoKEM) unwrapCt(ct []uint8) (c1 []uint8, c2 []uint8) { - ofs := 0 - size := k.mBar * k.n * k.d / 8 - c1 = ct[ofs:size] // fmt.Println("c1", hex.EncodeToString(c1)) - ofs += size - size = k.mBar * k.mBar * k.d / 8 - c2 = ct[ofs : ofs+size] // fmt.Println("c2", hex.EncodeToString(c2)) - return -} - -func (k *FrodoKEM) unwrapSk(sk []uint8) (s []uint8, seedA []uint8, b []uint8, Stransposed [][]int16, pkh []uint8) { - ofs := 0 - size := k.lenS / 8 - s = sk[ofs:size] // fmt.Println("s", hex.EncodeToString(s)) - ofs += size - size = k.lenSeedA / 8 - seedA = sk[ofs : ofs+size] // fmt.Println("seedA", hex.EncodeToString(seedA)) - ofs += size - size = k.d * k.n * k.nBar / 8 - b = sk[ofs : ofs+size] // fmt.Println("b", hex.EncodeToString(b)) - - ofs += size - size = k.n * k.nBar * 2 - Sbytes := sk[ofs : ofs+size] - - idx := 0 - Stransposed = make([][]int16, k.nBar) - for i := 0; i < k.nBar; i++ { - Stransposed[i] = make([]int16, k.n) - for j := 0; j < k.n; j++ { - Stransposed[i][j] = int16(Sbytes[idx]) - idx++ - Stransposed[i][j] |= int16(Sbytes[idx]) << 8 - idx++ - } - } - // fmt.Println("S^T", Stransposed) - - ofs += size - size = k.lenPkh / 8 - pkh = sk[ofs : ofs+size] // fmt.Println("pkh", hex.EncodeToString(pkh)) - - return -} - -func (k *FrodoKEM) sample(r uint16) (e int16) { - t := int(r >> 1) - e = 0 - for z := 0; z < len(k.tChi)-1; z++ { - if t > int(k.tChi[z]) { - e += 1 - } - } - r0 := r % 2 - if r0 == 1 { - e = -e - } - return -} - -func (k *FrodoKEM) sampleMatrix(r []uint16, n1 int, n2 int) (E [][]int16) { - E = make([][]int16, n1) - for i := 0; i < n1; i++ { - E[i] = make([]int16, n2) - for j := 0; j < n2; j++ { - E[i][j] = k.sample(r[i*n2+j]) - } - } - return E -} - -// FrodoKEM specification, Algorithm 3: Frodo.Pack -func (k *FrodoKEM) pack(C [][]uint16) (r []byte) { - rows := len(C) - cols := len(C[0]) - r = make([]byte, k.d*rows*cols/8) - var ri = 0 - var packed uint8 - var bits uint8 - for i := 0; i < rows; i++ { - for j := 0; j < cols; j++ { - val := C[i][j] - for b := 0; b < k.d; b++ { - packed <<= 1 - packed |= uint16BitN(val, k.d-b-1) - if bits++; bits == 8 { - r[ri] = packed - ri++ - packed = 0 - bits = 0 - } - } - } - } - if bits != 0 { - r[ri] = packed - } - return r -} - -// FrodoKEM specification, Algorithm 4: Frodo.Unpack -func (k *FrodoKEM) unpack(b []uint8, n1 int, n2 int) (C [][]uint16) { - bIdx := 0 - BBit := 7 - C = make([][]uint16, n1) - for i := 0; i < n1; i++ { - C[i] = make([]uint16, n2) - for j := 0; j < n2; j++ { - var val uint16 - for l := 0; l < k.d; l++ { - val <<= 1 - val |= uint16(uint8BitN(b[bIdx], BBit)) - if BBit--; BBit < 0 { - BBit = 7 - bIdx++ - } - } - C[i][j] = val - } - } - return -} - -// FrodoKEM specification, Algorithm 1 -func (k *FrodoKEM) encode(b []uint8) (K [][]uint16) { - multiplier := int(k.q) - if multiplier == 0 { - multiplier = 65536 - } - if k.b > 0 { - multiplier /= 2 << (k.b - 1) - } - bIdx := 0 - BBit := 0 - K = make([][]uint16, k.mBar) - for i := 0; i < k.mBar; i++ { - K[i] = make([]uint16, k.nBar) - for j := 0; j < k.nBar; j++ { - var val uint16 - for l := 0; l < k.b; l++ { - val |= uint16(uint8BitN(b[bIdx], BBit)) << l - if BBit++; BBit > 7 { - BBit = 0 - bIdx++ - } - } - K[i][j] = val * uint16(multiplier) - } - } - return -} - -// FrodoKEM specification, Algorithm 2 -func (k *FrodoKEM) decode(K [][]uint16) (b []uint8) { - b = make([]uint8, k.b*k.mBar*k.nBar/8) - fixedQ := float64(k.q) - if k.q == 0 { - fixedQ = float64(65535) - } - twoPowerB := int32(2 << (k.b - 1)) - twoPowerBf := float64(int(2 << (k.b - 1))) - bIdx := 0 - BBit := 0 - for i := 0; i < k.mBar; i++ { - for j := 0; j < k.nBar; j++ { - tmp := uint8(int32(math.Round(float64(K[i][j])*twoPowerBf/fixedQ)) % twoPowerB) //FIXME: please do this better - for l := 0; l < k.b; l++ { - if uint8BitN(tmp, l) == 1 { - b[bIdx] = uint8setBitN(b[bIdx], BBit) - } - BBit++ - if BBit == 8 { - bIdx++ - BBit = 0 - } - } - } - } - return -} - -func (k *FrodoKEM) genSHAKE128(seedA []byte) (A [][]uint16) { - var c = make([]byte, 2*k.n) - var tmp = make([]byte, 2+len(seedA)) - copy(tmp[2:], seedA) - A = make([][]uint16, k.n) - for i := 0; i < k.n; i++ { - A[i] = make([]uint16, k.n) - binary.LittleEndian.PutUint16(tmp[0:], uint16(i)) - sha3.ShakeSum128(c, tmp) - for j := 0; j < k.n; j++ { - A[i][j] = binary.LittleEndian.Uint16(c[j*2 : (j+1)*2]) - if k.q != 0 { - A[i][j] %= k.q - } - } - } - return -} - -func (k *FrodoKEM) genAES128(seedA []byte) (A [][]uint16) { - A = make([][]uint16, k.n) - cipher, err := aes.NewCipher(seedA) - if err != nil { - panic(err) - } - var b = [16]byte{} - var c = [16]byte{} - for i := 0; i < k.n; i++ { - A[i] = make([]uint16, k.n) - for j := 0; j < k.n; j += 8 { - binary.LittleEndian.PutUint16(b[0:2], uint16(i)) - binary.LittleEndian.PutUint16(b[2:4], uint16(j)) - cipher.Encrypt(c[:], b[:]) - for l := 0; l < 8; l++ { - A[i][j+l] = binary.LittleEndian.Uint16(c[l*2 : (l+1)*2]) - if k.q != 0 { - A[i][j+l] %= k.q - } - } - - } - } - return -} - -// constant time [][]uint16 equals, 1=true, 0=false -func constantUint16Equals(a [][]uint16, b [][]uint16) (ret int) { - ret = 1 - if len(a) != len(b) { - panic("Can not compare matrices of different size") - } - for i := 0; i < len(a); i++ { - if len(a[i]) != len(b[i]) { - panic("Can not compare matrices of different size") - } - for j := 0; j < len(a[i]); j++ { - if a[i][j] != b[i][j] { - ret = 0 - } - } - } - return -} - -func matrixAddWithMod(X [][]uint16, Y [][]int16, q uint16) (R [][]uint16) { - nrowsx := len(X) - ncolsx := len(X[0]) - nrowsy := len(Y) - ncolsy := len(Y[0]) - if nrowsx != nrowsy || ncolsx != ncolsy { - panic("can't add these matrices") - } - R = make([][]uint16, nrowsx) - for i := 0; i < nrowsx; i++ { - R[i] = make([]uint16, ncolsx) - for j := 0; j < ncolsx; j++ { - R[i][j] = uint16(int16(X[i][j]) + Y[i][j]) - if q != 0 { - R[i][j] %= q - } - } - } - return -} - -func uMatrixAdd(X [][]uint16, Y [][]uint16, q uint16) (R [][]uint16) { - nrowsx := len(X) - ncolsx := len(X[0]) - nrowsy := len(Y) - ncolsy := len(Y[0]) - if nrowsx != nrowsy || ncolsx != ncolsy { - panic("can't add these matrices") - } - R = make([][]uint16, nrowsx) - for i := 0; i < nrowsx; i++ { - R[i] = make([]uint16, ncolsx) - for j := 0; j < ncolsx; j++ { - R[i][j] = X[i][j] + Y[i][j] - if q != 0 { - R[i][j] %= q - } - } - } - return -} - -func matrixSubWithMod(X [][]uint16, Y [][]uint16, q uint16) (R [][]uint16) { - nrowsx := len(X) - ncolsx := len(X[0]) - nrowsy := len(Y) - ncolsy := len(Y[0]) - if nrowsx != nrowsy || ncolsx != ncolsy { - panic("can't sub these matrices") - } - R = make([][]uint16, nrowsx) - for i := 0; i < nrowsx; i++ { - R[i] = make([]uint16, ncolsx) - for j := 0; j < ncolsx; j++ { - R[i][j] = X[i][j] - Y[i][j] - if q != 0 { - R[i][j] %= q - } - } - } - return -} - -func matrixMulWithMod(X [][]uint16, Y [][]int16, q uint16) (R [][]uint16) { - nrowsx := len(X) - ncolsx := len(X[0]) - //nrowsy := len(y) - ncolsy := len(Y[0]) - R = make([][]uint16, nrowsx) - for i := 0; i < nrowsx; i++ { - R[i] = make([]uint16, ncolsy) - for j := 0; j < ncolsy; j++ { - var res uint16 - for k := 0; k < ncolsx; k++ { - res += uint16(int16(X[i][k]) * Y[k][j]) - } - if q != 0 { - res %= q - } - R[i][j] = res - } - } - return -} - -func matrixMulWithMod2(X [][]int16, Y [][]uint16, q uint16) (R [][]uint16) { - nrowsx := len(X) - ncolsx := len(X[0]) - //nrowsy := len(y) - ncolsy := len(Y[0]) - R = make([][]uint16, nrowsx) - for i := 0; i < nrowsx; i++ { - R[i] = make([]uint16, ncolsy) - for j := 0; j < ncolsy; j++ { - var res uint16 - for k := 0; k < ncolsx; k++ { - res += uint16(X[i][k] * int16(Y[k][j])) - } - if q != 0 { - res %= q - } - R[i][j] = res - } - } - return -} - -func matrixTranspose(O [][]int16) (T [][]int16) { - T = make([][]int16, len(O[0])) - for x := 0; x < len(T); x++ { - T[x] = make([]int16, len(O)) - for y := 0; y < len(O); y++ { - T[x][y] = O[y][x] - } - } - return -} - -func unpackUint16(bytes []byte) (r []uint16) { - r = make([]uint16, len(bytes)/2) - j := 0 - for i := 0; i+1 < len(bytes); i += 2 { - r[j] = binary.LittleEndian.Uint16(bytes[i : i+2]) - j++ - } - return r -} - -func uint8setBitN(val uint8, i int) uint8 { - return val | (1 << i) -} - -func uint16BitN(val uint16, i int) uint8 { - return uint8((val >> i) & 1) -} - -func uint8BitN(val uint8, i int) uint8 { - return (val >> i) & 1 -} diff --git a/vendor/github.com/kuking/go-frodokem/types.go b/vendor/github.com/kuking/go-frodokem/types.go deleted file mode 100644 index 045db1c..0000000 --- a/vendor/github.com/kuking/go-frodokem/types.go +++ /dev/null @@ -1,202 +0,0 @@ -package go_frodokem - -import ( - "crypto/rand" - "golang.org/x/crypto/sha3" -) - -var variants = []FrodoKEM{ - Frodo640AES(), Frodo640SHAKE(), - Frodo976AES(), Frodo976SHAKE(), - Frodo1344AES(), Frodo1344SHAKE(), -} - -// Returns all the FrodoKEM variants supported as an array -func Variants() []FrodoKEM { - return variants -} - -type FrodoKEM struct { - // error_distribution - name string - errDistribution []uint16 - tChi []uint16 - d int - q uint16 - n int - nBar int - mBar int - b int - lenSeedA int - lenZ int - lenMu int - lenSeedSE int - lenS int - lenK int - lenPkh int - lenSS int - lenChi int - lenSkBytes int - lenPkBytes int - lenCtBytes int - shake func(msg []byte, digestLength int) []byte - gen func([]byte) [][]uint16 - rng func([]byte) -} - -// Returns a new FrodoKEM 640 AES variant (Generates 128 bits of secret) -func Frodo640AES() (f FrodoKEM) { - f = FrodoKEM{ - name: "Frodo640AES", - errDistribution: []uint16{9288, 8720, 7216, 5264, 3384, 1918, 958, 422, 164, 56, 17, 4, 1}, - d: 15, - q: 32768, - n: 640, - nBar: 8, - mBar: 8, - b: 2, - lenSeedA: 128, - lenZ: 128, - lenMu: 128, - lenSeedSE: 128, - lenS: 128, - lenK: 128, - lenPkh: 128, - lenSS: 128, - lenChi: 16, - lenSkBytes: 19888, - lenPkBytes: 9616, - lenCtBytes: 9720, - shake: shake128, - rng: cryptoRand, - } - f.tChi = cdfZeroCentredSymmetric(f.errDistribution) - f.gen = f.genAES128 - return -} - -// Returns a new FrodoKEM 640 SHAKE variant (Generates 128 bits of secret) -func Frodo640SHAKE() (f FrodoKEM) { - f = Frodo640AES() - f.name = "Frodo640Shake" - f.shake = shake128 - f.gen = f.genSHAKE128 - return -} - -// Returns a new FrodoKEM 976 AES variant (Generates 192 bits of secret) -func Frodo976AES() (f FrodoKEM) { - f = FrodoKEM{ - name: "Frodo976AES", - errDistribution: []uint16{11278, 10277, 7774, 4882, 2545, 1101, 396, 118, 29, 6, 1}, - d: 16, - q: 0, // means no mod in 16 bits uint - n: 976, - nBar: 8, - mBar: 8, - b: 3, - lenSeedA: 128, - lenZ: 128, - lenMu: 192, - lenSeedSE: 192, - lenS: 192, - lenK: 192, - lenPkh: 192, - lenSS: 192, - lenChi: 16, - lenSkBytes: 31296, - lenPkBytes: 15632, - lenCtBytes: 15744, - shake: shake256, - rng: cryptoRand, - } - f.tChi = cdfZeroCentredSymmetric(f.errDistribution) - f.gen = f.genAES128 - return -} - -// Returns a new FrodoKEM 976 SHAKE variant (Generates 192 bits of secret) -func Frodo976SHAKE() (f FrodoKEM) { - f = Frodo976AES() - f.name = "Frodo976Shake" - f.gen = f.genSHAKE128 - return -} - -// Returns a new FrodoKEM 1344 AES variant (Generates 256 bits of secret) -func Frodo1344AES() (f FrodoKEM) { - f = FrodoKEM{ - name: "Frodo1344AES", - errDistribution: []uint16{18286, 14320, 6876, 2023, 364, 40, 2}, - d: 16, - q: 0, - n: 1344, - nBar: 8, - mBar: 8, - b: 4, - lenSeedA: 128, - lenZ: 128, - lenMu: 256, - lenSeedSE: 256, - lenS: 256, - lenK: 256, - lenPkh: 256, - lenSS: 256, - lenChi: 16, - lenSkBytes: 43088, - lenPkBytes: 21520, - lenCtBytes: 21632, - shake: shake256, - rng: cryptoRand, - } - f.tChi = cdfZeroCentredSymmetric(f.errDistribution) - f.gen = f.genAES128 - return -} - -// Returns a new FrodoKEM 1344 SHAKE variant (Generates 256 bits of secret) -func Frodo1344SHAKE() (f FrodoKEM) { - f = Frodo1344AES() - f.name = "Frodo1344Shake" - f.gen = f.genSHAKE128 - return -} - -func sumUint16s(arr []uint16) (r uint16) { - r = 0 - for _, v := range arr { - r += v - } - return -} - -func cdfZeroCentredSymmetric(chi []uint16) (tChi []uint16) { - tChi = make([]uint16, len(chi)) - tChi[0] = (chi[0] / 2) - 1 - for z := 1; z < len(chi); z++ { - tChi[z] = tChi[0] + sumUint16s(chi[1:z+1]) - } - return -} - -func cryptoRand(target []byte) { - n, err := rand.Read(target) - if err != nil { - panic(err) - } - if len(target) != n { - panic("could not generate enough randomness") - } -} - -func shake128(msg []byte, size int) (hash []byte) { - hash = make([]byte, size) - sha3.ShakeSum128(hash, msg) - return -} - -func shake256(msg []byte, size int) (hash []byte) { - hash = make([]byte, size) - sha3.ShakeSum256(hash, msg) - return -} diff --git a/vendor/github.com/mattn/go-isatty/LICENSE b/vendor/github.com/mattn/go-isatty/LICENSE deleted file mode 100644 index 65dc692..0000000 --- a/vendor/github.com/mattn/go-isatty/LICENSE +++ /dev/null @@ -1,9 +0,0 @@ -Copyright (c) Yasuhiro MATSUMOTO - -MIT License (Expat) - -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/mattn/go-isatty/README.md b/vendor/github.com/mattn/go-isatty/README.md deleted file mode 100644 index 3841835..0000000 --- a/vendor/github.com/mattn/go-isatty/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# go-isatty - -[![Godoc Reference](https://godoc.org/github.com/mattn/go-isatty?status.svg)](http://godoc.org/github.com/mattn/go-isatty) -[![Codecov](https://codecov.io/gh/mattn/go-isatty/branch/master/graph/badge.svg)](https://codecov.io/gh/mattn/go-isatty) -[![Coverage Status](https://coveralls.io/repos/github/mattn/go-isatty/badge.svg?branch=master)](https://coveralls.io/github/mattn/go-isatty?branch=master) -[![Go Report Card](https://goreportcard.com/badge/mattn/go-isatty)](https://goreportcard.com/report/mattn/go-isatty) - -isatty for golang - -## Usage - -```go -package main - -import ( - "fmt" - "github.com/mattn/go-isatty" - "os" -) - -func main() { - if isatty.IsTerminal(os.Stdout.Fd()) { - fmt.Println("Is Terminal") - } else if isatty.IsCygwinTerminal(os.Stdout.Fd()) { - fmt.Println("Is Cygwin/MSYS2 Terminal") - } else { - fmt.Println("Is Not Terminal") - } -} -``` - -## Installation - -``` -$ go get github.com/mattn/go-isatty -``` - -## License - -MIT - -## Author - -Yasuhiro Matsumoto (a.k.a mattn) - -## Thanks - -* k-takata: base idea for IsCygwinTerminal - - https://github.com/k-takata/go-iscygpty diff --git a/vendor/github.com/mattn/go-isatty/doc.go b/vendor/github.com/mattn/go-isatty/doc.go deleted file mode 100644 index 17d4f90..0000000 --- a/vendor/github.com/mattn/go-isatty/doc.go +++ /dev/null @@ -1,2 +0,0 @@ -// Package isatty implements interface to isatty -package isatty diff --git a/vendor/github.com/mattn/go-isatty/go.test.sh b/vendor/github.com/mattn/go-isatty/go.test.sh deleted file mode 100644 index 012162b..0000000 --- a/vendor/github.com/mattn/go-isatty/go.test.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash - -set -e -echo "" > coverage.txt - -for d in $(go list ./... | grep -v vendor); do - go test -race -coverprofile=profile.out -covermode=atomic "$d" - if [ -f profile.out ]; then - cat profile.out >> coverage.txt - rm profile.out - fi -done diff --git a/vendor/github.com/mattn/go-isatty/isatty_bsd.go b/vendor/github.com/mattn/go-isatty/isatty_bsd.go deleted file mode 100644 index 39bbcf0..0000000 --- a/vendor/github.com/mattn/go-isatty/isatty_bsd.go +++ /dev/null @@ -1,19 +0,0 @@ -//go:build (darwin || freebsd || openbsd || netbsd || dragonfly) && !appengine -// +build darwin freebsd openbsd netbsd dragonfly -// +build !appengine - -package isatty - -import "golang.org/x/sys/unix" - -// IsTerminal return true if the file descriptor is terminal. -func IsTerminal(fd uintptr) bool { - _, err := unix.IoctlGetTermios(int(fd), unix.TIOCGETA) - return err == nil -} - -// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2 -// terminal. This is also always false on this environment. -func IsCygwinTerminal(fd uintptr) bool { - return false -} diff --git a/vendor/github.com/mattn/go-isatty/isatty_others.go b/vendor/github.com/mattn/go-isatty/isatty_others.go deleted file mode 100644 index 3150322..0000000 --- a/vendor/github.com/mattn/go-isatty/isatty_others.go +++ /dev/null @@ -1,16 +0,0 @@ -//go:build appengine || js || nacl || wasm -// +build appengine js nacl wasm - -package isatty - -// IsTerminal returns true if the file descriptor is terminal which -// is always false on js and appengine classic which is a sandboxed PaaS. -func IsTerminal(fd uintptr) bool { - return false -} - -// IsCygwinTerminal() return true if the file descriptor is a cygwin or msys2 -// terminal. This is also always false on this environment. -func IsCygwinTerminal(fd uintptr) bool { - return false -} diff --git a/vendor/github.com/mattn/go-isatty/isatty_plan9.go b/vendor/github.com/mattn/go-isatty/isatty_plan9.go deleted file mode 100644 index bae7f9b..0000000 --- a/vendor/github.com/mattn/go-isatty/isatty_plan9.go +++ /dev/null @@ -1,23 +0,0 @@ -//go:build plan9 -// +build plan9 - -package isatty - -import ( - "syscall" -) - -// IsTerminal returns true if the given file descriptor is a terminal. -func IsTerminal(fd uintptr) bool { - path, err := syscall.Fd2path(int(fd)) - if err != nil { - return false - } - return path == "/dev/cons" || path == "/mnt/term/dev/cons" -} - -// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2 -// terminal. This is also always false on this environment. -func IsCygwinTerminal(fd uintptr) bool { - return false -} diff --git a/vendor/github.com/mattn/go-isatty/isatty_solaris.go b/vendor/github.com/mattn/go-isatty/isatty_solaris.go deleted file mode 100644 index 0c3acf2..0000000 --- a/vendor/github.com/mattn/go-isatty/isatty_solaris.go +++ /dev/null @@ -1,21 +0,0 @@ -//go:build solaris && !appengine -// +build solaris,!appengine - -package isatty - -import ( - "golang.org/x/sys/unix" -) - -// IsTerminal returns true if the given file descriptor is a terminal. -// see: https://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libc/port/gen/isatty.c -func IsTerminal(fd uintptr) bool { - _, err := unix.IoctlGetTermio(int(fd), unix.TCGETA) - return err == nil -} - -// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2 -// terminal. This is also always false on this environment. -func IsCygwinTerminal(fd uintptr) bool { - return false -} diff --git a/vendor/github.com/mattn/go-isatty/isatty_tcgets.go b/vendor/github.com/mattn/go-isatty/isatty_tcgets.go deleted file mode 100644 index 6778765..0000000 --- a/vendor/github.com/mattn/go-isatty/isatty_tcgets.go +++ /dev/null @@ -1,19 +0,0 @@ -//go:build (linux || aix || zos) && !appengine -// +build linux aix zos -// +build !appengine - -package isatty - -import "golang.org/x/sys/unix" - -// IsTerminal return true if the file descriptor is terminal. -func IsTerminal(fd uintptr) bool { - _, err := unix.IoctlGetTermios(int(fd), unix.TCGETS) - return err == nil -} - -// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2 -// terminal. This is also always false on this environment. -func IsCygwinTerminal(fd uintptr) bool { - return false -} diff --git a/vendor/github.com/mattn/go-isatty/isatty_windows.go b/vendor/github.com/mattn/go-isatty/isatty_windows.go deleted file mode 100644 index 8e3c991..0000000 --- a/vendor/github.com/mattn/go-isatty/isatty_windows.go +++ /dev/null @@ -1,125 +0,0 @@ -//go:build windows && !appengine -// +build windows,!appengine - -package isatty - -import ( - "errors" - "strings" - "syscall" - "unicode/utf16" - "unsafe" -) - -const ( - objectNameInfo uintptr = 1 - fileNameInfo = 2 - fileTypePipe = 3 -) - -var ( - kernel32 = syscall.NewLazyDLL("kernel32.dll") - ntdll = syscall.NewLazyDLL("ntdll.dll") - procGetConsoleMode = kernel32.NewProc("GetConsoleMode") - procGetFileInformationByHandleEx = kernel32.NewProc("GetFileInformationByHandleEx") - procGetFileType = kernel32.NewProc("GetFileType") - procNtQueryObject = ntdll.NewProc("NtQueryObject") -) - -func init() { - // Check if GetFileInformationByHandleEx is available. - if procGetFileInformationByHandleEx.Find() != nil { - procGetFileInformationByHandleEx = nil - } -} - -// IsTerminal return true if the file descriptor is terminal. -func IsTerminal(fd uintptr) bool { - var st uint32 - r, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, fd, uintptr(unsafe.Pointer(&st)), 0) - return r != 0 && e == 0 -} - -// Check pipe name is used for cygwin/msys2 pty. -// Cygwin/MSYS2 PTY has a name like: -// \{cygwin,msys}-XXXXXXXXXXXXXXXX-ptyN-{from,to}-master -func isCygwinPipeName(name string) bool { - token := strings.Split(name, "-") - if len(token) < 5 { - return false - } - - if token[0] != `\msys` && - token[0] != `\cygwin` && - token[0] != `\Device\NamedPipe\msys` && - token[0] != `\Device\NamedPipe\cygwin` { - return false - } - - if token[1] == "" { - return false - } - - if !strings.HasPrefix(token[2], "pty") { - return false - } - - if token[3] != `from` && token[3] != `to` { - return false - } - - if token[4] != "master" { - return false - } - - return true -} - -// getFileNameByHandle use the undocomented ntdll NtQueryObject to get file full name from file handler -// since GetFileInformationByHandleEx is not available under windows Vista and still some old fashion -// guys are using Windows XP, this is a workaround for those guys, it will also work on system from -// Windows vista to 10 -// see https://stackoverflow.com/a/18792477 for details -func getFileNameByHandle(fd uintptr) (string, error) { - if procNtQueryObject == nil { - return "", errors.New("ntdll.dll: NtQueryObject not supported") - } - - var buf [4 + syscall.MAX_PATH]uint16 - var result int - r, _, e := syscall.Syscall6(procNtQueryObject.Addr(), 5, - fd, objectNameInfo, uintptr(unsafe.Pointer(&buf)), uintptr(2*len(buf)), uintptr(unsafe.Pointer(&result)), 0) - if r != 0 { - return "", e - } - return string(utf16.Decode(buf[4 : 4+buf[0]/2])), nil -} - -// IsCygwinTerminal() return true if the file descriptor is a cygwin or msys2 -// terminal. -func IsCygwinTerminal(fd uintptr) bool { - if procGetFileInformationByHandleEx == nil { - name, err := getFileNameByHandle(fd) - if err != nil { - return false - } - return isCygwinPipeName(name) - } - - // Cygwin/msys's pty is a pipe. - ft, _, e := syscall.Syscall(procGetFileType.Addr(), 1, fd, 0, 0) - if ft != fileTypePipe || e != 0 { - return false - } - - var buf [2 + syscall.MAX_PATH]uint16 - r, _, e := syscall.Syscall6(procGetFileInformationByHandleEx.Addr(), - 4, fd, fileNameInfo, uintptr(unsafe.Pointer(&buf)), - uintptr(len(buf)*2), 0, 0) - if r == 0 || e != 0 { - return false - } - - l := *(*uint32)(unsafe.Pointer(&buf)) - return isCygwinPipeName(string(utf16.Decode(buf[2 : 2+l/2]))) -} diff --git a/vendor/github.com/pkg/errors/.gitignore b/vendor/github.com/pkg/errors/.gitignore deleted file mode 100644 index daf913b..0000000 --- a/vendor/github.com/pkg/errors/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Compiled Object files, Static and Dynamic libs (Shared Objects) -*.o -*.a -*.so - -# Folders -_obj -_test - -# Architecture specific extensions/prefixes -*.[568vq] -[568vq].out - -*.cgo1.go -*.cgo2.c -_cgo_defun.c -_cgo_gotypes.go -_cgo_export.* - -_testmain.go - -*.exe -*.test -*.prof diff --git a/vendor/github.com/pkg/errors/.travis.yml b/vendor/github.com/pkg/errors/.travis.yml deleted file mode 100644 index 9159de0..0000000 --- a/vendor/github.com/pkg/errors/.travis.yml +++ /dev/null @@ -1,10 +0,0 @@ -language: go -go_import_path: github.com/pkg/errors -go: - - 1.11.x - - 1.12.x - - 1.13.x - - tip - -script: - - make check diff --git a/vendor/github.com/pkg/errors/LICENSE b/vendor/github.com/pkg/errors/LICENSE deleted file mode 100644 index 835ba3e..0000000 --- a/vendor/github.com/pkg/errors/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -Copyright (c) 2015, Dave Cheney -All rights reserved. - -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. - -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 HOLDER 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/github.com/pkg/errors/Makefile b/vendor/github.com/pkg/errors/Makefile deleted file mode 100644 index ce9d7cd..0000000 --- a/vendor/github.com/pkg/errors/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -PKGS := github.com/pkg/errors -SRCDIRS := $(shell go list -f '{{.Dir}}' $(PKGS)) -GO := go - -check: test vet gofmt misspell unconvert staticcheck ineffassign unparam - -test: - $(GO) test $(PKGS) - -vet: | test - $(GO) vet $(PKGS) - -staticcheck: - $(GO) get honnef.co/go/tools/cmd/staticcheck - staticcheck -checks all $(PKGS) - -misspell: - $(GO) get github.com/client9/misspell/cmd/misspell - misspell \ - -locale GB \ - -error \ - *.md *.go - -unconvert: - $(GO) get github.com/mdempsky/unconvert - unconvert -v $(PKGS) - -ineffassign: - $(GO) get github.com/gordonklaus/ineffassign - find $(SRCDIRS) -name '*.go' | xargs ineffassign - -pedantic: check errcheck - -unparam: - $(GO) get mvdan.cc/unparam - unparam ./... - -errcheck: - $(GO) get github.com/kisielk/errcheck - errcheck $(PKGS) - -gofmt: - @echo Checking code is gofmted - @test -z "$(shell gofmt -s -l -d -e $(SRCDIRS) | tee /dev/stderr)" diff --git a/vendor/github.com/pkg/errors/README.md b/vendor/github.com/pkg/errors/README.md deleted file mode 100644 index 54dfdcb..0000000 --- a/vendor/github.com/pkg/errors/README.md +++ /dev/null @@ -1,59 +0,0 @@ -# errors [![Travis-CI](https://travis-ci.org/pkg/errors.svg)](https://travis-ci.org/pkg/errors) [![AppVeyor](https://ci.appveyor.com/api/projects/status/b98mptawhudj53ep/branch/master?svg=true)](https://ci.appveyor.com/project/davecheney/errors/branch/master) [![GoDoc](https://godoc.org/github.com/pkg/errors?status.svg)](http://godoc.org/github.com/pkg/errors) [![Report card](https://goreportcard.com/badge/github.com/pkg/errors)](https://goreportcard.com/report/github.com/pkg/errors) [![Sourcegraph](https://sourcegraph.com/github.com/pkg/errors/-/badge.svg)](https://sourcegraph.com/github.com/pkg/errors?badge) - -Package errors provides simple error handling primitives. - -`go get github.com/pkg/errors` - -The traditional error handling idiom in Go is roughly akin to -```go -if err != nil { - return err -} -``` -which applied recursively up the call stack results in error reports without context or debugging information. The errors package allows programmers to add context to the failure path in their code in a way that does not destroy the original value of the error. - -## Adding context to an error - -The errors.Wrap function returns a new error that adds context to the original error. For example -```go -_, err := ioutil.ReadAll(r) -if err != nil { - return errors.Wrap(err, "read failed") -} -``` -## Retrieving the cause of an error - -Using `errors.Wrap` constructs a stack of errors, adding context to the preceding error. Depending on the nature of the error it may be necessary to reverse the operation of errors.Wrap to retrieve the original error for inspection. Any error value which implements this interface can be inspected by `errors.Cause`. -```go -type causer interface { - Cause() error -} -``` -`errors.Cause` will recursively retrieve the topmost error which does not implement `causer`, which is assumed to be the original cause. For example: -```go -switch err := errors.Cause(err).(type) { -case *MyError: - // handle specifically -default: - // unknown error -} -``` - -[Read the package documentation for more information](https://godoc.org/github.com/pkg/errors). - -## Roadmap - -With the upcoming [Go2 error proposals](https://go.googlesource.com/proposal/+/master/design/go2draft.md) this package is moving into maintenance mode. The roadmap for a 1.0 release is as follows: - -- 0.9. Remove pre Go 1.9 and Go 1.10 support, address outstanding pull requests (if possible) -- 1.0. Final release. - -## Contributing - -Because of the Go2 errors changes, this package is not accepting proposals for new functionality. With that said, we welcome pull requests, bug fixes and issue reports. - -Before sending a PR, please discuss your change by raising an issue. - -## License - -BSD-2-Clause diff --git a/vendor/github.com/pkg/errors/appveyor.yml b/vendor/github.com/pkg/errors/appveyor.yml deleted file mode 100644 index a932ead..0000000 --- a/vendor/github.com/pkg/errors/appveyor.yml +++ /dev/null @@ -1,32 +0,0 @@ -version: build-{build}.{branch} - -clone_folder: C:\gopath\src\github.com\pkg\errors -shallow_clone: true # for startup speed - -environment: - GOPATH: C:\gopath - -platform: - - x64 - -# http://www.appveyor.com/docs/installed-software -install: - # some helpful output for debugging builds - - go version - - go env - # pre-installed MinGW at C:\MinGW is 32bit only - # but MSYS2 at C:\msys64 has mingw64 - - set PATH=C:\msys64\mingw64\bin;%PATH% - - gcc --version - - g++ --version - -build_script: - - go install -v ./... - -test_script: - - set PATH=C:\gopath\bin;%PATH% - - go test -v ./... - -#artifacts: -# - path: '%GOPATH%\bin\*.exe' -deploy: off diff --git a/vendor/github.com/pkg/errors/errors.go b/vendor/github.com/pkg/errors/errors.go deleted file mode 100644 index 161aea2..0000000 --- a/vendor/github.com/pkg/errors/errors.go +++ /dev/null @@ -1,288 +0,0 @@ -// Package errors provides simple error handling primitives. -// -// The traditional error handling idiom in Go is roughly akin to -// -// if err != nil { -// return err -// } -// -// which when applied recursively up the call stack results in error reports -// without context or debugging information. The errors package allows -// programmers to add context to the failure path in their code in a way -// that does not destroy the original value of the error. -// -// Adding context to an error -// -// The errors.Wrap function returns a new error that adds context to the -// original error by recording a stack trace at the point Wrap is called, -// together with the supplied message. For example -// -// _, err := ioutil.ReadAll(r) -// if err != nil { -// return errors.Wrap(err, "read failed") -// } -// -// If additional control is required, the errors.WithStack and -// errors.WithMessage functions destructure errors.Wrap into its component -// operations: annotating an error with a stack trace and with a message, -// respectively. -// -// Retrieving the cause of an error -// -// Using errors.Wrap constructs a stack of errors, adding context to the -// preceding error. Depending on the nature of the error it may be necessary -// to reverse the operation of errors.Wrap to retrieve the original error -// for inspection. Any error value which implements this interface -// -// type causer interface { -// Cause() error -// } -// -// can be inspected by errors.Cause. errors.Cause will recursively retrieve -// the topmost error that does not implement causer, which is assumed to be -// the original cause. For example: -// -// switch err := errors.Cause(err).(type) { -// case *MyError: -// // handle specifically -// default: -// // unknown error -// } -// -// Although the causer interface is not exported by this package, it is -// considered a part of its stable public interface. -// -// Formatted printing of errors -// -// All error values returned from this package implement fmt.Formatter and can -// be formatted by the fmt package. The following verbs are supported: -// -// %s print the error. If the error has a Cause it will be -// printed recursively. -// %v see %s -// %+v extended format. Each Frame of the error's StackTrace will -// be printed in detail. -// -// Retrieving the stack trace of an error or wrapper -// -// New, Errorf, Wrap, and Wrapf record a stack trace at the point they are -// invoked. This information can be retrieved with the following interface: -// -// type stackTracer interface { -// StackTrace() errors.StackTrace -// } -// -// The returned errors.StackTrace type is defined as -// -// type StackTrace []Frame -// -// The Frame type represents a call site in the stack trace. Frame supports -// the fmt.Formatter interface that can be used for printing information about -// the stack trace of this error. For example: -// -// if err, ok := err.(stackTracer); ok { -// for _, f := range err.StackTrace() { -// fmt.Printf("%+s:%d\n", f, f) -// } -// } -// -// Although the stackTracer interface is not exported by this package, it is -// considered a part of its stable public interface. -// -// See the documentation for Frame.Format for more details. -package errors - -import ( - "fmt" - "io" -) - -// New returns an error with the supplied message. -// New also records the stack trace at the point it was called. -func New(message string) error { - return &fundamental{ - msg: message, - stack: callers(), - } -} - -// Errorf formats according to a format specifier and returns the string -// as a value that satisfies error. -// Errorf also records the stack trace at the point it was called. -func Errorf(format string, args ...interface{}) error { - return &fundamental{ - msg: fmt.Sprintf(format, args...), - stack: callers(), - } -} - -// fundamental is an error that has a message and a stack, but no caller. -type fundamental struct { - msg string - *stack -} - -func (f *fundamental) Error() string { return f.msg } - -func (f *fundamental) Format(s fmt.State, verb rune) { - switch verb { - case 'v': - if s.Flag('+') { - io.WriteString(s, f.msg) - f.stack.Format(s, verb) - return - } - fallthrough - case 's': - io.WriteString(s, f.msg) - case 'q': - fmt.Fprintf(s, "%q", f.msg) - } -} - -// WithStack annotates err with a stack trace at the point WithStack was called. -// If err is nil, WithStack returns nil. -func WithStack(err error) error { - if err == nil { - return nil - } - return &withStack{ - err, - callers(), - } -} - -type withStack struct { - error - *stack -} - -func (w *withStack) Cause() error { return w.error } - -// Unwrap provides compatibility for Go 1.13 error chains. -func (w *withStack) Unwrap() error { return w.error } - -func (w *withStack) Format(s fmt.State, verb rune) { - switch verb { - case 'v': - if s.Flag('+') { - fmt.Fprintf(s, "%+v", w.Cause()) - w.stack.Format(s, verb) - return - } - fallthrough - case 's': - io.WriteString(s, w.Error()) - case 'q': - fmt.Fprintf(s, "%q", w.Error()) - } -} - -// Wrap returns an error annotating err with a stack trace -// at the point Wrap is called, and the supplied message. -// If err is nil, Wrap returns nil. -func Wrap(err error, message string) error { - if err == nil { - return nil - } - err = &withMessage{ - cause: err, - msg: message, - } - return &withStack{ - err, - callers(), - } -} - -// Wrapf returns an error annotating err with a stack trace -// at the point Wrapf is called, and the format specifier. -// If err is nil, Wrapf returns nil. -func Wrapf(err error, format string, args ...interface{}) error { - if err == nil { - return nil - } - err = &withMessage{ - cause: err, - msg: fmt.Sprintf(format, args...), - } - return &withStack{ - err, - callers(), - } -} - -// WithMessage annotates err with a new message. -// If err is nil, WithMessage returns nil. -func WithMessage(err error, message string) error { - if err == nil { - return nil - } - return &withMessage{ - cause: err, - msg: message, - } -} - -// WithMessagef annotates err with the format specifier. -// If err is nil, WithMessagef returns nil. -func WithMessagef(err error, format string, args ...interface{}) error { - if err == nil { - return nil - } - return &withMessage{ - cause: err, - msg: fmt.Sprintf(format, args...), - } -} - -type withMessage struct { - cause error - msg string -} - -func (w *withMessage) Error() string { return w.msg + ": " + w.cause.Error() } -func (w *withMessage) Cause() error { return w.cause } - -// Unwrap provides compatibility for Go 1.13 error chains. -func (w *withMessage) Unwrap() error { return w.cause } - -func (w *withMessage) Format(s fmt.State, verb rune) { - switch verb { - case 'v': - if s.Flag('+') { - fmt.Fprintf(s, "%+v\n", w.Cause()) - io.WriteString(s, w.msg) - return - } - fallthrough - case 's', 'q': - io.WriteString(s, w.Error()) - } -} - -// Cause returns the underlying cause of the error, if possible. -// An error value has a cause if it implements the following -// interface: -// -// type causer interface { -// Cause() error -// } -// -// If the error does not implement Cause, the original error will -// be returned. If the error is nil, nil will be returned without further -// investigation. -func Cause(err error) error { - type causer interface { - Cause() error - } - - for err != nil { - cause, ok := err.(causer) - if !ok { - break - } - err = cause.Cause() - } - return err -} diff --git a/vendor/github.com/pkg/errors/go113.go b/vendor/github.com/pkg/errors/go113.go deleted file mode 100644 index be0d10d..0000000 --- a/vendor/github.com/pkg/errors/go113.go +++ /dev/null @@ -1,38 +0,0 @@ -// +build go1.13 - -package errors - -import ( - stderrors "errors" -) - -// Is reports whether any error in err's chain matches target. -// -// The chain consists of err itself followed by the sequence of errors obtained by -// repeatedly calling Unwrap. -// -// An error is considered to match a target if it is equal to that target or if -// it implements a method Is(error) bool such that Is(target) returns true. -func Is(err, target error) bool { return stderrors.Is(err, target) } - -// As finds the first error in err's chain that matches target, and if so, sets -// target to that error value and returns true. -// -// The chain consists of err itself followed by the sequence of errors obtained by -// repeatedly calling Unwrap. -// -// An error matches target if the error's concrete value is assignable to the value -// pointed to by target, or if the error has a method As(interface{}) bool such that -// As(target) returns true. In the latter case, the As method is responsible for -// setting target. -// -// As will panic if target is not a non-nil pointer to either a type that implements -// error, or to any interface type. As returns false if err is nil. -func As(err error, target interface{}) bool { return stderrors.As(err, target) } - -// Unwrap returns the result of calling the Unwrap method on err, if err's -// type contains an Unwrap method returning error. -// Otherwise, Unwrap returns nil. -func Unwrap(err error) error { - return stderrors.Unwrap(err) -} diff --git a/vendor/github.com/pkg/errors/stack.go b/vendor/github.com/pkg/errors/stack.go deleted file mode 100644 index 779a834..0000000 --- a/vendor/github.com/pkg/errors/stack.go +++ /dev/null @@ -1,177 +0,0 @@ -package errors - -import ( - "fmt" - "io" - "path" - "runtime" - "strconv" - "strings" -) - -// Frame represents a program counter inside a stack frame. -// For historical reasons if Frame is interpreted as a uintptr -// its value represents the program counter + 1. -type Frame uintptr - -// pc returns the program counter for this frame; -// multiple frames may have the same PC value. -func (f Frame) pc() uintptr { return uintptr(f) - 1 } - -// file returns the full path to the file that contains the -// function for this Frame's pc. -func (f Frame) file() string { - fn := runtime.FuncForPC(f.pc()) - if fn == nil { - return "unknown" - } - file, _ := fn.FileLine(f.pc()) - return file -} - -// line returns the line number of source code of the -// function for this Frame's pc. -func (f Frame) line() int { - fn := runtime.FuncForPC(f.pc()) - if fn == nil { - return 0 - } - _, line := fn.FileLine(f.pc()) - return line -} - -// name returns the name of this function, if known. -func (f Frame) name() string { - fn := runtime.FuncForPC(f.pc()) - if fn == nil { - return "unknown" - } - return fn.Name() -} - -// Format formats the frame according to the fmt.Formatter interface. -// -// %s source file -// %d source line -// %n function name -// %v equivalent to %s:%d -// -// Format accepts flags that alter the printing of some verbs, as follows: -// -// %+s function name and path of source file relative to the compile time -// GOPATH separated by \n\t (\n\t) -// %+v equivalent to %+s:%d -func (f Frame) Format(s fmt.State, verb rune) { - switch verb { - case 's': - switch { - case s.Flag('+'): - io.WriteString(s, f.name()) - io.WriteString(s, "\n\t") - io.WriteString(s, f.file()) - default: - io.WriteString(s, path.Base(f.file())) - } - case 'd': - io.WriteString(s, strconv.Itoa(f.line())) - case 'n': - io.WriteString(s, funcname(f.name())) - case 'v': - f.Format(s, 's') - io.WriteString(s, ":") - f.Format(s, 'd') - } -} - -// MarshalText formats a stacktrace Frame as a text string. The output is the -// same as that of fmt.Sprintf("%+v", f), but without newlines or tabs. -func (f Frame) MarshalText() ([]byte, error) { - name := f.name() - if name == "unknown" { - return []byte(name), nil - } - return []byte(fmt.Sprintf("%s %s:%d", name, f.file(), f.line())), nil -} - -// StackTrace is stack of Frames from innermost (newest) to outermost (oldest). -type StackTrace []Frame - -// Format formats the stack of Frames according to the fmt.Formatter interface. -// -// %s lists source files for each Frame in the stack -// %v lists the source file and line number for each Frame in the stack -// -// Format accepts flags that alter the printing of some verbs, as follows: -// -// %+v Prints filename, function, and line number for each Frame in the stack. -func (st StackTrace) Format(s fmt.State, verb rune) { - switch verb { - case 'v': - switch { - case s.Flag('+'): - for _, f := range st { - io.WriteString(s, "\n") - f.Format(s, verb) - } - case s.Flag('#'): - fmt.Fprintf(s, "%#v", []Frame(st)) - default: - st.formatSlice(s, verb) - } - case 's': - st.formatSlice(s, verb) - } -} - -// formatSlice will format this StackTrace into the given buffer as a slice of -// Frame, only valid when called with '%s' or '%v'. -func (st StackTrace) formatSlice(s fmt.State, verb rune) { - io.WriteString(s, "[") - for i, f := range st { - if i > 0 { - io.WriteString(s, " ") - } - f.Format(s, verb) - } - io.WriteString(s, "]") -} - -// stack represents a stack of program counters. -type stack []uintptr - -func (s *stack) Format(st fmt.State, verb rune) { - switch verb { - case 'v': - switch { - case st.Flag('+'): - for _, pc := range *s { - f := Frame(pc) - fmt.Fprintf(st, "\n%+v", f) - } - } - } -} - -func (s *stack) StackTrace() StackTrace { - f := make([]Frame, len(*s)) - for i := 0; i < len(f); i++ { - f[i] = Frame((*s)[i]) - } - return f -} - -func callers() *stack { - const depth = 32 - var pcs [depth]uintptr - n := runtime.Callers(3, pcs[:]) - var st stack = pcs[0:n] - return &st -} - -// funcname removes the path prefix component of a function's name reported by func.Name(). -func funcname(name string) string { - i := strings.LastIndex(name, "/") - name = name[i+1:] - i = strings.Index(name, ".") - return name[i+1:] -} diff --git a/vendor/github.com/templexxx/cpufeat/.gitignore b/vendor/github.com/templexxx/cpufeat/.gitignore deleted file mode 100644 index 08baa1a..0000000 --- a/vendor/github.com/templexxx/cpufeat/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -# Binaries for programs and plugins -*.exe -*.dll -*.so -*.dylib - -# Test binary, build with `go test -c` -*.test - -# Output of the go coverage tool, specifically when used with LiteIDE -*.out - -# Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736 -.glide/ -.idea diff --git a/vendor/github.com/templexxx/cpufeat/LICENSE b/vendor/github.com/templexxx/cpufeat/LICENSE deleted file mode 100644 index ea5ea89..0000000 --- a/vendor/github.com/templexxx/cpufeat/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. - -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 Inc. 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. \ No newline at end of file diff --git a/vendor/github.com/templexxx/cpufeat/README.md b/vendor/github.com/templexxx/cpufeat/README.md deleted file mode 100644 index 16afe53..0000000 --- a/vendor/github.com/templexxx/cpufeat/README.md +++ /dev/null @@ -1 +0,0 @@ -see: https://github.com/templexxx/cpu diff --git a/vendor/github.com/templexxx/cpufeat/cpu.go b/vendor/github.com/templexxx/cpufeat/cpu.go deleted file mode 100644 index dd5a949..0000000 --- a/vendor/github.com/templexxx/cpufeat/cpu.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package cpu implements processor feature detection -// used by the Go standard libary. -package cpufeat - -var X86 x86 - -// The booleans in x86 contain the correspondingly named cpuid feature bit. -// HasAVX and HasAVX2 are only set if the OS does support XMM and YMM registers -// in addition to the cpuid feature bit being set. -// The struct is padded to avoid false sharing. -type x86 struct { - _ [CacheLineSize]byte - HasAES bool - HasAVX bool - HasAVX2 bool - HasAVX512 bool - HasBMI1 bool - HasBMI2 bool - HasERMS bool - HasOSXSAVE bool - HasPCLMULQDQ bool - HasPOPCNT bool - HasSSE2 bool - HasSSE3 bool - HasSSSE3 bool - HasSSE41 bool - HasSSE42 bool - _ [CacheLineSize]byte -} diff --git a/vendor/github.com/templexxx/cpufeat/cpu_arm.go b/vendor/github.com/templexxx/cpufeat/cpu_arm.go deleted file mode 100644 index b3eb5a9..0000000 --- a/vendor/github.com/templexxx/cpufeat/cpu_arm.go +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package cpufeat - -const CacheLineSize = 32 diff --git a/vendor/github.com/templexxx/cpufeat/cpu_arm64.go b/vendor/github.com/templexxx/cpufeat/cpu_arm64.go deleted file mode 100644 index b3eb5a9..0000000 --- a/vendor/github.com/templexxx/cpufeat/cpu_arm64.go +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package cpufeat - -const CacheLineSize = 32 diff --git a/vendor/github.com/templexxx/cpufeat/cpu_mips.go b/vendor/github.com/templexxx/cpufeat/cpu_mips.go deleted file mode 100644 index b3eb5a9..0000000 --- a/vendor/github.com/templexxx/cpufeat/cpu_mips.go +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package cpufeat - -const CacheLineSize = 32 diff --git a/vendor/github.com/templexxx/cpufeat/cpu_mips64.go b/vendor/github.com/templexxx/cpufeat/cpu_mips64.go deleted file mode 100644 index b3eb5a9..0000000 --- a/vendor/github.com/templexxx/cpufeat/cpu_mips64.go +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package cpufeat - -const CacheLineSize = 32 diff --git a/vendor/github.com/templexxx/cpufeat/cpu_mips64le.go b/vendor/github.com/templexxx/cpufeat/cpu_mips64le.go deleted file mode 100644 index b3eb5a9..0000000 --- a/vendor/github.com/templexxx/cpufeat/cpu_mips64le.go +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package cpufeat - -const CacheLineSize = 32 diff --git a/vendor/github.com/templexxx/cpufeat/cpu_mipsle.go b/vendor/github.com/templexxx/cpufeat/cpu_mipsle.go deleted file mode 100644 index b3eb5a9..0000000 --- a/vendor/github.com/templexxx/cpufeat/cpu_mipsle.go +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package cpufeat - -const CacheLineSize = 32 diff --git a/vendor/github.com/templexxx/cpufeat/cpu_ppc64.go b/vendor/github.com/templexxx/cpufeat/cpu_ppc64.go deleted file mode 100644 index 1e738e3..0000000 --- a/vendor/github.com/templexxx/cpufeat/cpu_ppc64.go +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package cpufeat - -const CacheLineSize = 128 diff --git a/vendor/github.com/templexxx/cpufeat/cpu_ppc64le.go b/vendor/github.com/templexxx/cpufeat/cpu_ppc64le.go deleted file mode 100644 index 1e738e3..0000000 --- a/vendor/github.com/templexxx/cpufeat/cpu_ppc64le.go +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package cpufeat - -const CacheLineSize = 128 diff --git a/vendor/github.com/templexxx/cpufeat/cpu_s390x.go b/vendor/github.com/templexxx/cpufeat/cpu_s390x.go deleted file mode 100644 index 17be8fe..0000000 --- a/vendor/github.com/templexxx/cpufeat/cpu_s390x.go +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package cpufeat - -const CacheLineSize = 256 diff --git a/vendor/github.com/templexxx/cpufeat/cpu_x86.go b/vendor/github.com/templexxx/cpufeat/cpu_x86.go deleted file mode 100644 index 19d6d22..0000000 --- a/vendor/github.com/templexxx/cpufeat/cpu_x86.go +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build 386 amd64 amd64p32 - -package cpufeat - -const CacheLineSize = 64 - -// cpuid is implemented in cpu_x86.s. -func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) - -// xgetbv with ecx = 0 is implemented in cpu_x86.s. -func xgetbv() (eax, edx uint32) - -func init() { - maxId, _, _, _ := cpuid(0, 0) - - if maxId < 1 { - return - } - - _, _, ecx1, edx1 := cpuid(1, 0) - X86.HasSSE2 = isSet(26, edx1) - - X86.HasSSE3 = isSet(0, ecx1) - X86.HasPCLMULQDQ = isSet(1, ecx1) - X86.HasSSSE3 = isSet(9, ecx1) - X86.HasSSE41 = isSet(19, ecx1) - X86.HasSSE42 = isSet(20, ecx1) - X86.HasPOPCNT = isSet(23, ecx1) - X86.HasAES = isSet(25, ecx1) - X86.HasOSXSAVE = isSet(27, ecx1) - - osSupportsAVX := false - osSupportAVX512 := false - // For XGETBV, OSXSAVE bit is required and sufficient. - if X86.HasOSXSAVE { - eax, _ := xgetbv() - // Check if XMM and YMM registers have OS support. - osSupportsAVX = isSet(1, eax) && isSet(2, eax) - // Check is ZMM registers have OS support. - osSupportAVX512 = (eax>>5)&7 == 7 && (eax>>1)&3 == 3 - } - - X86.HasAVX = isSet(28, ecx1) && osSupportsAVX - - if maxId < 7 { - return - } - - _, ebx7, _, _ := cpuid(7, 0) - X86.HasBMI1 = isSet(3, ebx7) - X86.HasAVX2 = isSet(5, ebx7) && osSupportsAVX - X86.HasBMI2 = isSet(8, ebx7) - X86.HasERMS = isSet(9, ebx7) - X86.HasAVX512 = hasAVX512(ebx7) && osSupportAVX512 -} - -func isSet(bitpos uint, value uint32) bool { - return value&(1< 0 { - wordBytes := w * wordSize - fastXORWords(dst[:wordBytes], a[:wordBytes], b[:wordBytes]) - } - for i := n - n%wordSize; i < n; i++ { - dst[i] = a[i] ^ b[i] - } -} - -func safeXORBytes(dst, a, b []byte, n int) { - ex := n % 8 - for i := 0; i < ex; i++ { - dst[i] = a[i] ^ b[i] - } - - for i := ex; i < n; i += 8 { - _dst := dst[i : i+8] - _a := a[i : i+8] - _b := b[i : i+8] - _dst[0] = _a[0] ^ _b[0] - _dst[1] = _a[1] ^ _b[1] - _dst[2] = _a[2] ^ _b[2] - _dst[3] = _a[3] ^ _b[3] - - _dst[4] = _a[4] ^ _b[4] - _dst[5] = _a[5] ^ _b[5] - _dst[6] = _a[6] ^ _b[6] - _dst[7] = _a[7] ^ _b[7] - } -} - -// fastXORWords XORs multiples of 4 or 8 bytes (depending on architecture.) -// The arguments are assumed to be of equal length. -func fastXORWords(dst, a, b []byte) { - dw := *(*[]uintptr)(unsafe.Pointer(&dst)) - aw := *(*[]uintptr)(unsafe.Pointer(&a)) - bw := *(*[]uintptr)(unsafe.Pointer(&b)) - n := len(b) / wordSize - ex := n % 8 - for i := 0; i < ex; i++ { - dw[i] = aw[i] ^ bw[i] - } - - for i := ex; i < n; i += 8 { - _dw := dw[i : i+8] - _aw := aw[i : i+8] - _bw := bw[i : i+8] - _dw[0] = _aw[0] ^ _bw[0] - _dw[1] = _aw[1] ^ _bw[1] - _dw[2] = _aw[2] ^ _bw[2] - _dw[3] = _aw[3] ^ _bw[3] - _dw[4] = _aw[4] ^ _bw[4] - _dw[5] = _aw[5] ^ _bw[5] - _dw[6] = _aw[6] ^ _bw[6] - _dw[7] = _aw[7] ^ _bw[7] - } -} diff --git a/vendor/github.com/templexxx/xor/sse2_amd64.s b/vendor/github.com/templexxx/xor/sse2_amd64.s deleted file mode 100644 index d7f702b..0000000 --- a/vendor/github.com/templexxx/xor/sse2_amd64.s +++ /dev/null @@ -1,574 +0,0 @@ -#include "textflag.h" - -// addr of mem -#define DST BX -#define SRC SI -#define SRC0 TMP4 -#define SRC1 TMP5 - -// loop args -// num of vect -#define VECT CX -#define LEN DX -// pos of matrix -#define POS R8 - -// tmp store -// num of vect or ... -#define TMP1 R9 -// pos of matrix or ... -#define TMP2 R10 -// store addr of data/parity or ... -#define TMP3 R11 -#define TMP4 R12 -#define TMP5 R13 -#define TMP6 R14 - -// func bytesSrc0(dst, src0, src1 []byte) -TEXT ·xorSrc0(SB), NOSPLIT, $0 - MOVQ len+32(FP), LEN - CMPQ LEN, $0 - JE ret - MOVQ dst+0(FP), DST - MOVQ src0+24(FP), SRC0 - MOVQ src1+48(FP), SRC1 - TESTQ $15, LEN - JNZ not_aligned - -aligned: - MOVQ $0, POS - -loop16b: - MOVOU (SRC0)(POS*1), X0 - XORPD (SRC1)(POS*1), X0 - MOVOU X0, (DST)(POS*1) - ADDQ $16, POS - CMPQ LEN, POS - JNE loop16b - RET - -loop_1b: - MOVB -1(SRC0)(LEN*1), TMP1 - MOVB -1(SRC1)(LEN*1), TMP2 - XORB TMP1, TMP2 - MOVB TMP2, -1(DST)(LEN*1) - SUBQ $1, LEN - TESTQ $7, LEN - JNZ loop_1b - CMPQ LEN, $0 - JE ret - TESTQ $15, LEN - JZ aligned - -not_aligned: - TESTQ $7, LEN - JNE loop_1b - MOVQ LEN, TMP1 - ANDQ $15, TMP1 - -loop_8b: - MOVQ -8(SRC0)(LEN*1), TMP2 - MOVQ -8(SRC1)(LEN*1), TMP3 - XORQ TMP2, TMP3 - MOVQ TMP3, -8(DST)(LEN*1) - SUBQ $8, LEN - SUBQ $8, TMP1 - JG loop_8b - - CMPQ LEN, $16 - JGE aligned - RET - -ret: - RET - -// func bytesSrc1(dst, src0, src1 []byte) -TEXT ·xorSrc1(SB), NOSPLIT, $0 - MOVQ len+56(FP), LEN - CMPQ LEN, $0 - JE ret - MOVQ dst+0(FP), DST - MOVQ src0+24(FP), SRC0 - MOVQ src1+48(FP), SRC1 - TESTQ $15, LEN - JNZ not_aligned - -aligned: - MOVQ $0, POS - -loop16b: - MOVOU (SRC0)(POS*1), X0 - XORPD (SRC1)(POS*1), X0 - MOVOU X0, (DST)(POS*1) - ADDQ $16, POS - CMPQ LEN, POS - JNE loop16b - RET - -loop_1b: - MOVB -1(SRC0)(LEN*1), TMP1 - MOVB -1(SRC1)(LEN*1), TMP2 - XORB TMP1, TMP2 - MOVB TMP2, -1(DST)(LEN*1) - SUBQ $1, LEN - TESTQ $7, LEN - JNZ loop_1b - CMPQ LEN, $0 - JE ret - TESTQ $15, LEN - JZ aligned - -not_aligned: - TESTQ $7, LEN - JNE loop_1b - MOVQ LEN, TMP1 - ANDQ $15, TMP1 - -loop_8b: - MOVQ -8(SRC0)(LEN*1), TMP2 - MOVQ -8(SRC1)(LEN*1), TMP3 - XORQ TMP2, TMP3 - MOVQ TMP3, -8(DST)(LEN*1) - SUBQ $8, LEN - SUBQ $8, TMP1 - JG loop_8b - - CMPQ LEN, $16 - JGE aligned - RET - -ret: - RET - -// func bytesSSE2mini(dst, src0, src1 []byte, size int) -TEXT ·bytesSSE2mini(SB), NOSPLIT, $0 - MOVQ len+72(FP), LEN - CMPQ LEN, $0 - JE ret - MOVQ dst+0(FP), DST - MOVQ src0+24(FP), SRC0 - MOVQ src1+48(FP), SRC1 - TESTQ $15, LEN - JNZ not_aligned - -aligned: - MOVQ $0, POS - -loop16b: - MOVOU (SRC0)(POS*1), X0 - XORPD (SRC1)(POS*1), X0 - - // MOVOU (SRC1)(POS*1), X4 - // PXOR X4, X0 - MOVOU X0, (DST)(POS*1) - ADDQ $16, POS - CMPQ LEN, POS - JNE loop16b - RET - -loop_1b: - MOVB -1(SRC0)(LEN*1), TMP1 - MOVB -1(SRC1)(LEN*1), TMP2 - XORB TMP1, TMP2 - MOVB TMP2, -1(DST)(LEN*1) - SUBQ $1, LEN - TESTQ $7, LEN - JNZ loop_1b - CMPQ LEN, $0 - JE ret - TESTQ $15, LEN - JZ aligned - -not_aligned: - TESTQ $7, LEN - JNE loop_1b - MOVQ LEN, TMP1 - ANDQ $15, TMP1 - -loop_8b: - MOVQ -8(SRC0)(LEN*1), TMP2 - MOVQ -8(SRC1)(LEN*1), TMP3 - XORQ TMP2, TMP3 - MOVQ TMP3, -8(DST)(LEN*1) - SUBQ $8, LEN - SUBQ $8, TMP1 - JG loop_8b - - CMPQ LEN, $16 - JGE aligned - RET - -ret: - RET - -// func bytesSSE2small(dst, src0, src1 []byte, size int) -TEXT ·bytesSSE2small(SB), NOSPLIT, $0 - MOVQ len+72(FP), LEN - CMPQ LEN, $0 - JE ret - MOVQ dst+0(FP), DST - MOVQ src0+24(FP), SRC0 - MOVQ src1+48(FP), SRC1 - TESTQ $63, LEN - JNZ not_aligned - -aligned: - MOVQ $0, POS - -loop64b: - MOVOU (SRC0)(POS*1), X0 - MOVOU 16(SRC0)(POS*1), X1 - MOVOU 32(SRC0)(POS*1), X2 - MOVOU 48(SRC0)(POS*1), X3 - - MOVOU (SRC1)(POS*1), X4 - MOVOU 16(SRC1)(POS*1), X5 - MOVOU 32(SRC1)(POS*1), X6 - MOVOU 48(SRC1)(POS*1), X7 - - PXOR X4, X0 - PXOR X5, X1 - PXOR X6, X2 - PXOR X7, X3 - - MOVOU X0, (DST)(POS*1) - MOVOU X1, 16(DST)(POS*1) - MOVOU X2, 32(DST)(POS*1) - MOVOU X3, 48(DST)(POS*1) - - ADDQ $64, POS - CMPQ LEN, POS - JNE loop64b - RET - -loop_1b: - MOVB -1(SRC0)(LEN*1), TMP1 - MOVB -1(SRC1)(LEN*1), TMP2 - XORB TMP1, TMP2 - MOVB TMP2, -1(DST)(LEN*1) - SUBQ $1, LEN - TESTQ $7, LEN - JNZ loop_1b - CMPQ LEN, $0 - JE ret - TESTQ $63, LEN - JZ aligned - -not_aligned: - TESTQ $7, LEN - JNE loop_1b - MOVQ LEN, TMP1 - ANDQ $63, TMP1 - -loop_8b: - MOVQ -8(SRC0)(LEN*1), TMP2 - MOVQ -8(SRC1)(LEN*1), TMP3 - XORQ TMP2, TMP3 - MOVQ TMP3, -8(DST)(LEN*1) - SUBQ $8, LEN - SUBQ $8, TMP1 - JG loop_8b - - CMPQ LEN, $64 - JGE aligned - RET - -ret: - RET - -// func bytesSSE2big(dst, src0, src1 []byte, size int) -TEXT ·bytesSSE2big(SB), NOSPLIT, $0 - MOVQ len+72(FP), LEN - CMPQ LEN, $0 - JE ret - MOVQ dst+0(FP), DST - MOVQ src0+24(FP), SRC0 - MOVQ src1+48(FP), SRC1 - TESTQ $63, LEN - JNZ not_aligned - -aligned: - MOVQ $0, POS - -loop64b: - MOVOU (SRC0)(POS*1), X0 - MOVOU 16(SRC0)(POS*1), X1 - MOVOU 32(SRC0)(POS*1), X2 - MOVOU 48(SRC0)(POS*1), X3 - - MOVOU (SRC1)(POS*1), X4 - MOVOU 16(SRC1)(POS*1), X5 - MOVOU 32(SRC1)(POS*1), X6 - MOVOU 48(SRC1)(POS*1), X7 - - PXOR X4, X0 - PXOR X5, X1 - PXOR X6, X2 - PXOR X7, X3 - - LONG $0xe70f4266; WORD $0x0304 // MOVNTDQ - LONG $0xe70f4266; WORD $0x034c; BYTE $0x10 - LONG $0xe70f4266; WORD $0x0354; BYTE $0x20 - LONG $0xe70f4266; WORD $0x035c; BYTE $0x30 - - ADDQ $64, POS - CMPQ LEN, POS - JNE loop64b - RET - -loop_1b: - MOVB -1(SRC0)(LEN*1), TMP1 - MOVB -1(SRC1)(LEN*1), TMP2 - XORB TMP1, TMP2 - MOVB TMP2, -1(DST)(LEN*1) - SUBQ $1, LEN - TESTQ $7, LEN - JNZ loop_1b - CMPQ LEN, $0 - JE ret - TESTQ $63, LEN - JZ aligned - -not_aligned: - TESTQ $7, LEN - JNE loop_1b - MOVQ LEN, TMP1 - ANDQ $63, TMP1 - -loop_8b: - MOVQ -8(SRC0)(LEN*1), TMP2 - MOVQ -8(SRC1)(LEN*1), TMP3 - XORQ TMP2, TMP3 - MOVQ TMP3, -8(DST)(LEN*1) - SUBQ $8, LEN - SUBQ $8, TMP1 - JG loop_8b - - CMPQ LEN, $64 - JGE aligned - RET - -ret: - RET - -// func matrixSSE2small(dst []byte, src [][]byte) -TEXT ·matrixSSE2small(SB), NOSPLIT, $0 - MOVQ dst+0(FP), DST - MOVQ src+24(FP), SRC - MOVQ vec+32(FP), VECT - MOVQ len+8(FP), LEN - TESTQ $63, LEN - JNZ not_aligned - -aligned: - MOVQ $0, POS - -loop64b: - MOVQ VECT, TMP1 - SUBQ $2, TMP1 - MOVQ $0, TMP2 - MOVQ (SRC)(TMP2*1), TMP3 - MOVQ TMP3, TMP4 - MOVOU (TMP3)(POS*1), X0 - MOVOU 16(TMP4)(POS*1), X1 - MOVOU 32(TMP3)(POS*1), X2 - MOVOU 48(TMP4)(POS*1), X3 - -next_vect: - ADDQ $24, TMP2 - MOVQ (SRC)(TMP2*1), TMP3 - MOVQ TMP3, TMP4 - MOVOU (TMP3)(POS*1), X4 - MOVOU 16(TMP4)(POS*1), X5 - MOVOU 32(TMP3)(POS*1), X6 - MOVOU 48(TMP4)(POS*1), X7 - PXOR X4, X0 - PXOR X5, X1 - PXOR X6, X2 - PXOR X7, X3 - SUBQ $1, TMP1 - JGE next_vect - - MOVOU X0, (DST)(POS*1) - MOVOU X1, 16(DST)(POS*1) - MOVOU X2, 32(DST)(POS*1) - MOVOU X3, 48(DST)(POS*1) - - ADDQ $64, POS - CMPQ LEN, POS - JNE loop64b - RET - -loop_1b: - MOVQ VECT, TMP1 - MOVQ $0, TMP2 - MOVQ (SRC)(TMP2*1), TMP3 - SUBQ $2, TMP1 - MOVB -1(TMP3)(LEN*1), TMP5 - -next_vect_1b: - ADDQ $24, TMP2 - MOVQ (SRC)(TMP2*1), TMP3 - MOVB -1(TMP3)(LEN*1), TMP6 - XORB TMP6, TMP5 - SUBQ $1, TMP1 - JGE next_vect_1b - - MOVB TMP5, -1(DST)(LEN*1) - SUBQ $1, LEN - TESTQ $7, LEN - JNZ loop_1b - - CMPQ LEN, $0 - JE ret - TESTQ $63, LEN - JZ aligned - -not_aligned: - TESTQ $7, LEN - JNE loop_1b - MOVQ LEN, TMP4 - ANDQ $63, TMP4 - -loop_8b: - MOVQ VECT, TMP1 - MOVQ $0, TMP2 - MOVQ (SRC)(TMP2*1), TMP3 - SUBQ $2, TMP1 - MOVQ -8(TMP3)(LEN*1), TMP5 - -next_vect_8b: - ADDQ $24, TMP2 - MOVQ (SRC)(TMP2*1), TMP3 - MOVQ -8(TMP3)(LEN*1), TMP6 - XORQ TMP6, TMP5 - SUBQ $1, TMP1 - JGE next_vect_8b - - MOVQ TMP5, -8(DST)(LEN*1) - SUBQ $8, LEN - SUBQ $8, TMP4 - JG loop_8b - - CMPQ LEN, $64 - JGE aligned - RET - -ret: - RET - -// func matrixSSE2big(dst []byte, src [][]byte) -TEXT ·matrixSSE2big(SB), NOSPLIT, $0 - MOVQ dst+0(FP), DST - MOVQ src+24(FP), SRC - MOVQ vec+32(FP), VECT - MOVQ len+8(FP), LEN - TESTQ $63, LEN - JNZ not_aligned - -aligned: - MOVQ $0, POS - -loop64b: - MOVQ VECT, TMP1 - SUBQ $2, TMP1 - MOVQ $0, TMP2 - MOVQ (SRC)(TMP2*1), TMP3 - MOVQ TMP3, TMP4 - MOVOU (TMP3)(POS*1), X0 - MOVOU 16(TMP4)(POS*1), X1 - MOVOU 32(TMP3)(POS*1), X2 - MOVOU 48(TMP4)(POS*1), X3 - -next_vect: - ADDQ $24, TMP2 - MOVQ (SRC)(TMP2*1), TMP3 - MOVQ TMP3, TMP4 - MOVOU (TMP3)(POS*1), X4 - MOVOU 16(TMP4)(POS*1), X5 - MOVOU 32(TMP3)(POS*1), X6 - MOVOU 48(TMP4)(POS*1), X7 - PXOR X4, X0 - PXOR X5, X1 - PXOR X6, X2 - PXOR X7, X3 - SUBQ $1, TMP1 - JGE next_vect - - LONG $0xe70f4266; WORD $0x0304 - LONG $0xe70f4266; WORD $0x034c; BYTE $0x10 - LONG $0xe70f4266; WORD $0x0354; BYTE $0x20 - LONG $0xe70f4266; WORD $0x035c; BYTE $0x30 - - ADDQ $64, POS - CMPQ LEN, POS - JNE loop64b - RET - -loop_1b: - MOVQ VECT, TMP1 - MOVQ $0, TMP2 - MOVQ (SRC)(TMP2*1), TMP3 - SUBQ $2, TMP1 - MOVB -1(TMP3)(LEN*1), TMP5 - -next_vect_1b: - ADDQ $24, TMP2 - MOVQ (SRC)(TMP2*1), TMP3 - MOVB -1(TMP3)(LEN*1), TMP6 - XORB TMP6, TMP5 - SUBQ $1, TMP1 - JGE next_vect_1b - - MOVB TMP5, -1(DST)(LEN*1) - SUBQ $1, LEN - TESTQ $7, LEN - JNZ loop_1b - - CMPQ LEN, $0 - JE ret - TESTQ $63, LEN - JZ aligned - -not_aligned: - TESTQ $7, LEN - JNE loop_1b - MOVQ LEN, TMP4 - ANDQ $63, TMP4 - -loop_8b: - MOVQ VECT, TMP1 - MOVQ $0, TMP2 - MOVQ (SRC)(TMP2*1), TMP3 - SUBQ $2, TMP1 - MOVQ -8(TMP3)(LEN*1), TMP5 - -next_vect_8b: - ADDQ $24, TMP2 - MOVQ (SRC)(TMP2*1), TMP3 - MOVQ -8(TMP3)(LEN*1), TMP6 - XORQ TMP6, TMP5 - SUBQ $1, TMP1 - JGE next_vect_8b - - MOVQ TMP5, -8(DST)(LEN*1) - SUBQ $8, LEN - SUBQ $8, TMP4 - JG loop_8b - - CMPQ LEN, $64 - JGE aligned - RET - -ret: - RET - -TEXT ·hasSSE2(SB), NOSPLIT, $0 - XORQ AX, AX - INCL AX - CPUID - SHRQ $26, DX - ANDQ $1, DX - MOVB DX, ret+0(FP) - RET - diff --git a/vendor/github.com/templexxx/xor/xor.go b/vendor/github.com/templexxx/xor/xor.go deleted file mode 100644 index 2fa5616..0000000 --- a/vendor/github.com/templexxx/xor/xor.go +++ /dev/null @@ -1,49 +0,0 @@ -package xor - -// SIMD Extensions -const ( - none = iota - avx2 - // first introduced by Intel with the initial version of the Pentium 4 in 2001 - // so I think we can assume all amd64 has sse2 - sse2 -) - -var extension = none - -// Bytes : chose the shortest one as xor size -// it's better to use it for big data ( > 64bytes ) -func Bytes(dst, src0, src1 []byte) { - size := len(dst) - if size > len(src0) { - size = len(src0) - } - if size > len(src1) { - size = len(src1) - } - xorBytes(dst, src0, src1, size) -} - -// BytesSameLen : all slice's length must be equal -// cut size branch, save time for small data -func BytesSameLen(dst, src0, src1 []byte) { - xorSrc1(dst, src0, src1) -} - -// BytesSrc0 : src1 >= src0, dst >= src0 -// xor src0's len bytes -func BytesSrc0(dst, src0, src1 []byte) { - xorSrc0(dst, src0, src1) -} - -// BytesSrc1 : src0 >= src1, dst >= src1 -// xor src1's len bytes -func BytesSrc1(dst, src0, src1 []byte) { - xorSrc1(dst, src0, src1) -} - -// Matrix : all slice's length must be equal && != 0 -// len(src) must >= 2 -func Matrix(dst []byte, src [][]byte) { - xorMatrix(dst, src) -} diff --git a/vendor/github.com/templexxx/xor/xor_amd64.go b/vendor/github.com/templexxx/xor/xor_amd64.go deleted file mode 100644 index b449bc0..0000000 --- a/vendor/github.com/templexxx/xor/xor_amd64.go +++ /dev/null @@ -1,120 +0,0 @@ -package xor - -import "github.com/templexxx/cpufeat" - -func init() { - getEXT() -} - -func getEXT() { - if cpufeat.X86.HasAVX2 { - extension = avx2 - } else { - extension = sse2 - } - return -} - -func xorBytes(dst, src0, src1 []byte, size int) { - switch extension { - case avx2: - bytesAVX2(dst, src0, src1, size) - default: - bytesSSE2(dst, src0, src1, size) - } -} - -// non-temporal hint store -const nontmp = 8 * 1024 -const avx2loopsize = 128 - -func bytesAVX2(dst, src0, src1 []byte, size int) { - if size < avx2loopsize { - bytesAVX2mini(dst, src0, src1, size) - } else if size >= avx2loopsize && size <= nontmp { - bytesAVX2small(dst, src0, src1, size) - } else { - bytesAVX2big(dst, src0, src1, size) - } -} - -const sse2loopsize = 64 - -func bytesSSE2(dst, src0, src1 []byte, size int) { - if size < sse2loopsize { - bytesSSE2mini(dst, src0, src1, size) - } else if size >= sse2loopsize && size <= nontmp { - bytesSSE2small(dst, src0, src1, size) - } else { - bytesSSE2big(dst, src0, src1, size) - } -} - -func xorMatrix(dst []byte, src [][]byte) { - switch extension { - case avx2: - matrixAVX2(dst, src) - default: - matrixSSE2(dst, src) - } -} - -func matrixAVX2(dst []byte, src [][]byte) { - size := len(dst) - if size > nontmp { - matrixAVX2big(dst, src) - } else { - matrixAVX2small(dst, src) - } -} - -func matrixSSE2(dst []byte, src [][]byte) { - size := len(dst) - if size > nontmp { - matrixSSE2big(dst, src) - } else { - matrixSSE2small(dst, src) - } -} - -//go:noescape -func xorSrc0(dst, src0, src1 []byte) - -//go:noescape -func xorSrc1(dst, src0, src1 []byte) - -//go:noescape -func bytesAVX2mini(dst, src0, src1 []byte, size int) - -//go:noescape -func bytesAVX2big(dst, src0, src1 []byte, size int) - -//go:noescape -func bytesAVX2small(dst, src0, src1 []byte, size int) - -//go:noescape -func bytesSSE2mini(dst, src0, src1 []byte, size int) - -//go:noescape -func bytesSSE2small(dst, src0, src1 []byte, size int) - -//go:noescape -func bytesSSE2big(dst, src0, src1 []byte, size int) - -//go:noescape -func matrixAVX2small(dst []byte, src [][]byte) - -//go:noescape -func matrixAVX2big(dst []byte, src [][]byte) - -//go:noescape -func matrixSSE2small(dst []byte, src [][]byte) - -//go:noescape -func matrixSSE2big(dst []byte, src [][]byte) - -//go:noescape -func hasAVX2() bool - -//go:noescape -func hasSSE2() bool diff --git a/vendor/github.com/templexxx/xor/xor_other.go b/vendor/github.com/templexxx/xor/xor_other.go deleted file mode 100644 index 4aa2967..0000000 --- a/vendor/github.com/templexxx/xor/xor_other.go +++ /dev/null @@ -1,19 +0,0 @@ -// +build !amd64 noasm - -package xor - -func xorBytes(dst, src0, src1 []byte, size int) { - bytesNoSIMD(dst, src0, src1, size) -} - -func xorMatrix(dst []byte, src [][]byte) { - matrixNoSIMD(dst, src) -} - -func xorSrc0(dst, src0, src1 []byte) { - bytesNoSIMD(dst, src0, src1, len(src0)) -} - -func xorSrc1(dst, src0, src1 []byte) { - bytesNoSIMD(dst, src0, src1, len(src1)) -} diff --git a/vendor/github.com/tjfoc/gmsm/LICENSE b/vendor/github.com/tjfoc/gmsm/LICENSE deleted file mode 100644 index 8dada3e..0000000 --- a/vendor/github.com/tjfoc/gmsm/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor 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, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - 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. diff --git a/vendor/github.com/tjfoc/gmsm/sm4/sm4.go b/vendor/github.com/tjfoc/gmsm/sm4/sm4.go deleted file mode 100644 index 9956af2..0000000 --- a/vendor/github.com/tjfoc/gmsm/sm4/sm4.go +++ /dev/null @@ -1,491 +0,0 @@ -/* -Copyright Suzhou Tongji Fintech Research Institute 2017 All Rights Reserved. -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. - -sm4 acceleration -modified by Jack, 2017 Oct -*/ - -package sm4 - -import ( - "bytes" - "crypto/cipher" - "errors" - "strconv" -) - -const BlockSize = 16 -var IV=make([]byte,BlockSize) -type SM4Key []byte - -// Cipher is an instance of SM4 encryption. -type Sm4Cipher struct { - subkeys []uint32 - block1 []uint32 - block2 []byte -} - -// sm4密钥参量 -var fk = [4]uint32{ - 0xa3b1bac6, 0x56aa3350, 0x677d9197, 0xb27022dc, -} - -// sm4密钥参量 -var ck = [32]uint32{ - 0x00070e15, 0x1c232a31, 0x383f464d, 0x545b6269, - 0x70777e85, 0x8c939aa1, 0xa8afb6bd, 0xc4cbd2d9, - 0xe0e7eef5, 0xfc030a11, 0x181f262d, 0x343b4249, - 0x50575e65, 0x6c737a81, 0x888f969d, 0xa4abb2b9, - 0xc0c7ced5, 0xdce3eaf1, 0xf8ff060d, 0x141b2229, - 0x30373e45, 0x4c535a61, 0x686f767d, 0x848b9299, - 0xa0a7aeb5, 0xbcc3cad1, 0xd8dfe6ed, 0xf4fb0209, - 0x10171e25, 0x2c333a41, 0x484f565d, 0x646b7279, -} - -// sm4密钥参量 -var sbox = [256]uint8{ - 0xd6, 0x90, 0xe9, 0xfe, 0xcc, 0xe1, 0x3d, 0xb7, 0x16, 0xb6, 0x14, 0xc2, 0x28, 0xfb, 0x2c, 0x05, - 0x2b, 0x67, 0x9a, 0x76, 0x2a, 0xbe, 0x04, 0xc3, 0xaa, 0x44, 0x13, 0x26, 0x49, 0x86, 0x06, 0x99, - 0x9c, 0x42, 0x50, 0xf4, 0x91, 0xef, 0x98, 0x7a, 0x33, 0x54, 0x0b, 0x43, 0xed, 0xcf, 0xac, 0x62, - 0xe4, 0xb3, 0x1c, 0xa9, 0xc9, 0x08, 0xe8, 0x95, 0x80, 0xdf, 0x94, 0xfa, 0x75, 0x8f, 0x3f, 0xa6, - 0x47, 0x07, 0xa7, 0xfc, 0xf3, 0x73, 0x17, 0xba, 0x83, 0x59, 0x3c, 0x19, 0xe6, 0x85, 0x4f, 0xa8, - 0x68, 0x6b, 0x81, 0xb2, 0x71, 0x64, 0xda, 0x8b, 0xf8, 0xeb, 0x0f, 0x4b, 0x70, 0x56, 0x9d, 0x35, - 0x1e, 0x24, 0x0e, 0x5e, 0x63, 0x58, 0xd1, 0xa2, 0x25, 0x22, 0x7c, 0x3b, 0x01, 0x21, 0x78, 0x87, - 0xd4, 0x00, 0x46, 0x57, 0x9f, 0xd3, 0x27, 0x52, 0x4c, 0x36, 0x02, 0xe7, 0xa0, 0xc4, 0xc8, 0x9e, - 0xea, 0xbf, 0x8a, 0xd2, 0x40, 0xc7, 0x38, 0xb5, 0xa3, 0xf7, 0xf2, 0xce, 0xf9, 0x61, 0x15, 0xa1, - 0xe0, 0xae, 0x5d, 0xa4, 0x9b, 0x34, 0x1a, 0x55, 0xad, 0x93, 0x32, 0x30, 0xf5, 0x8c, 0xb1, 0xe3, - 0x1d, 0xf6, 0xe2, 0x2e, 0x82, 0x66, 0xca, 0x60, 0xc0, 0x29, 0x23, 0xab, 0x0d, 0x53, 0x4e, 0x6f, - 0xd5, 0xdb, 0x37, 0x45, 0xde, 0xfd, 0x8e, 0x2f, 0x03, 0xff, 0x6a, 0x72, 0x6d, 0x6c, 0x5b, 0x51, - 0x8d, 0x1b, 0xaf, 0x92, 0xbb, 0xdd, 0xbc, 0x7f, 0x11, 0xd9, 0x5c, 0x41, 0x1f, 0x10, 0x5a, 0xd8, - 0x0a, 0xc1, 0x31, 0x88, 0xa5, 0xcd, 0x7b, 0xbd, 0x2d, 0x74, 0xd0, 0x12, 0xb8, 0xe5, 0xb4, 0xb0, - 0x89, 0x69, 0x97, 0x4a, 0x0c, 0x96, 0x77, 0x7e, 0x65, 0xb9, 0xf1, 0x09, 0xc5, 0x6e, 0xc6, 0x84, - 0x18, 0xf0, 0x7d, 0xec, 0x3a, 0xdc, 0x4d, 0x20, 0x79, 0xee, 0x5f, 0x3e, 0xd7, 0xcb, 0x39, 0x48, -} - -var sbox0 = [256]uint32{ - 0xd55b5b8e, 0x924242d0, 0xeaa7a74d, 0xfdfbfb06, 0xcf3333fc, 0xe2878765, 0x3df4f4c9, 0xb5dede6b, 0x1658584e, 0xb4dada6e, 0x14505044, 0xc10b0bca, 0x28a0a088, 0xf8efef17, 0x2cb0b09c, 0x05141411, - 0x2bacac87, 0x669d9dfb, 0x986a6af2, 0x77d9d9ae, 0x2aa8a882, 0xbcfafa46, 0x04101014, 0xc00f0fcf, 0xa8aaaa02, 0x45111154, 0x134c4c5f, 0x269898be, 0x4825256d, 0x841a1a9e, 0x0618181e, 0x9b6666fd, - 0x9e7272ec, 0x4309094a, 0x51414110, 0xf7d3d324, 0x934646d5, 0xecbfbf53, 0x9a6262f8, 0x7be9e992, 0x33ccccff, 0x55515104, 0x0b2c2c27, 0x420d0d4f, 0xeeb7b759, 0xcc3f3ff3, 0xaeb2b21c, 0x638989ea, - 0xe7939374, 0xb1cece7f, 0x1c70706c, 0xaba6a60d, 0xca2727ed, 0x08202028, 0xeba3a348, 0x975656c1, 0x82020280, 0xdc7f7fa3, 0x965252c4, 0xf9ebeb12, 0x74d5d5a1, 0x8d3e3eb3, 0x3ffcfcc3, 0xa49a9a3e, - 0x461d1d5b, 0x071c1c1b, 0xa59e9e3b, 0xfff3f30c, 0xf0cfcf3f, 0x72cdcdbf, 0x175c5c4b, 0xb8eaea52, 0x810e0e8f, 0x5865653d, 0x3cf0f0cc, 0x1964647d, 0xe59b9b7e, 0x87161691, 0x4e3d3d73, 0xaaa2a208, - 0x69a1a1c8, 0x6aadadc7, 0x83060685, 0xb0caca7a, 0x70c5c5b5, 0x659191f4, 0xd96b6bb2, 0x892e2ea7, 0xfbe3e318, 0xe8afaf47, 0x0f3c3c33, 0x4a2d2d67, 0x71c1c1b0, 0x5759590e, 0x9f7676e9, 0x35d4d4e1, - 0x1e787866, 0x249090b4, 0x0e383836, 0x5f797926, 0x628d8def, 0x59616138, 0xd2474795, 0xa08a8a2a, 0x259494b1, 0x228888aa, 0x7df1f18c, 0x3bececd7, 0x01040405, 0x218484a5, 0x79e1e198, 0x851e1e9b, - 0xd7535384, 0x00000000, 0x4719195e, 0x565d5d0b, 0x9d7e7ee3, 0xd04f4f9f, 0x279c9cbb, 0x5349491a, 0x4d31317c, 0x36d8d8ee, 0x0208080a, 0xe49f9f7b, 0xa2828220, 0xc71313d4, 0xcb2323e8, 0x9c7a7ae6, - 0xe9abab42, 0xbdfefe43, 0x882a2aa2, 0xd14b4b9a, 0x41010140, 0xc41f1fdb, 0x38e0e0d8, 0xb7d6d661, 0xa18e8e2f, 0xf4dfdf2b, 0xf1cbcb3a, 0xcd3b3bf6, 0xfae7e71d, 0x608585e5, 0x15545441, 0xa3868625, - 0xe3838360, 0xacbaba16, 0x5c757529, 0xa6929234, 0x996e6ef7, 0x34d0d0e4, 0x1a686872, 0x54555501, 0xafb6b619, 0x914e4edf, 0x32c8c8fa, 0x30c0c0f0, 0xf6d7d721, 0x8e3232bc, 0xb3c6c675, 0xe08f8f6f, - 0x1d747469, 0xf5dbdb2e, 0xe18b8b6a, 0x2eb8b896, 0x800a0a8a, 0x679999fe, 0xc92b2be2, 0x618181e0, 0xc30303c0, 0x29a4a48d, 0x238c8caf, 0xa9aeae07, 0x0d343439, 0x524d4d1f, 0x4f393976, 0x6ebdbdd3, - 0xd6575781, 0xd86f6fb7, 0x37dcdceb, 0x44151551, 0xdd7b7ba6, 0xfef7f709, 0x8c3a3ab6, 0x2fbcbc93, 0x030c0c0f, 0xfcffff03, 0x6ba9a9c2, 0x73c9c9ba, 0x6cb5b5d9, 0x6db1b1dc, 0x5a6d6d37, 0x50454515, - 0x8f3636b9, 0x1b6c6c77, 0xadbebe13, 0x904a4ada, 0xb9eeee57, 0xde7777a9, 0xbef2f24c, 0x7efdfd83, 0x11444455, 0xda6767bd, 0x5d71712c, 0x40050545, 0x1f7c7c63, 0x10404050, 0x5b696932, 0xdb6363b8, - 0x0a282822, 0xc20707c5, 0x31c4c4f5, 0x8a2222a8, 0xa7969631, 0xce3737f9, 0x7aeded97, 0xbff6f649, 0x2db4b499, 0x75d1d1a4, 0xd3434390, 0x1248485a, 0xbae2e258, 0xe6979771, 0xb6d2d264, 0xb2c2c270, - 0x8b2626ad, 0x68a5a5cd, 0x955e5ecb, 0x4b292962, 0x0c30303c, 0x945a5ace, 0x76ddddab, 0x7ff9f986, 0x649595f1, 0xbbe6e65d, 0xf2c7c735, 0x0924242d, 0xc61717d1, 0x6fb9b9d6, 0xc51b1bde, 0x86121294, - 0x18606078, 0xf3c3c330, 0x7cf5f589, 0xefb3b35c, 0x3ae8e8d2, 0xdf7373ac, 0x4c353579, 0x208080a0, 0x78e5e59d, 0xedbbbb56, 0x5e7d7d23, 0x3ef8f8c6, 0xd45f5f8b, 0xc82f2fe7, 0x39e4e4dd, 0x49212168, -} - -var sbox1 = [256]uint32{ - 0x5b5b8ed5, 0x4242d092, 0xa7a74dea, 0xfbfb06fd, 0x3333fccf, 0x878765e2, 0xf4f4c93d, 0xdede6bb5, 0x58584e16, 0xdada6eb4, 0x50504414, 0x0b0bcac1, 0xa0a08828, 0xefef17f8, 0xb0b09c2c, 0x14141105, - 0xacac872b, 0x9d9dfb66, 0x6a6af298, 0xd9d9ae77, 0xa8a8822a, 0xfafa46bc, 0x10101404, 0x0f0fcfc0, 0xaaaa02a8, 0x11115445, 0x4c4c5f13, 0x9898be26, 0x25256d48, 0x1a1a9e84, 0x18181e06, 0x6666fd9b, - 0x7272ec9e, 0x09094a43, 0x41411051, 0xd3d324f7, 0x4646d593, 0xbfbf53ec, 0x6262f89a, 0xe9e9927b, 0xccccff33, 0x51510455, 0x2c2c270b, 0x0d0d4f42, 0xb7b759ee, 0x3f3ff3cc, 0xb2b21cae, 0x8989ea63, - 0x939374e7, 0xcece7fb1, 0x70706c1c, 0xa6a60dab, 0x2727edca, 0x20202808, 0xa3a348eb, 0x5656c197, 0x02028082, 0x7f7fa3dc, 0x5252c496, 0xebeb12f9, 0xd5d5a174, 0x3e3eb38d, 0xfcfcc33f, 0x9a9a3ea4, - 0x1d1d5b46, 0x1c1c1b07, 0x9e9e3ba5, 0xf3f30cff, 0xcfcf3ff0, 0xcdcdbf72, 0x5c5c4b17, 0xeaea52b8, 0x0e0e8f81, 0x65653d58, 0xf0f0cc3c, 0x64647d19, 0x9b9b7ee5, 0x16169187, 0x3d3d734e, 0xa2a208aa, - 0xa1a1c869, 0xadadc76a, 0x06068583, 0xcaca7ab0, 0xc5c5b570, 0x9191f465, 0x6b6bb2d9, 0x2e2ea789, 0xe3e318fb, 0xafaf47e8, 0x3c3c330f, 0x2d2d674a, 0xc1c1b071, 0x59590e57, 0x7676e99f, 0xd4d4e135, - 0x7878661e, 0x9090b424, 0x3838360e, 0x7979265f, 0x8d8def62, 0x61613859, 0x474795d2, 0x8a8a2aa0, 0x9494b125, 0x8888aa22, 0xf1f18c7d, 0xececd73b, 0x04040501, 0x8484a521, 0xe1e19879, 0x1e1e9b85, - 0x535384d7, 0x00000000, 0x19195e47, 0x5d5d0b56, 0x7e7ee39d, 0x4f4f9fd0, 0x9c9cbb27, 0x49491a53, 0x31317c4d, 0xd8d8ee36, 0x08080a02, 0x9f9f7be4, 0x828220a2, 0x1313d4c7, 0x2323e8cb, 0x7a7ae69c, - 0xabab42e9, 0xfefe43bd, 0x2a2aa288, 0x4b4b9ad1, 0x01014041, 0x1f1fdbc4, 0xe0e0d838, 0xd6d661b7, 0x8e8e2fa1, 0xdfdf2bf4, 0xcbcb3af1, 0x3b3bf6cd, 0xe7e71dfa, 0x8585e560, 0x54544115, 0x868625a3, - 0x838360e3, 0xbaba16ac, 0x7575295c, 0x929234a6, 0x6e6ef799, 0xd0d0e434, 0x6868721a, 0x55550154, 0xb6b619af, 0x4e4edf91, 0xc8c8fa32, 0xc0c0f030, 0xd7d721f6, 0x3232bc8e, 0xc6c675b3, 0x8f8f6fe0, - 0x7474691d, 0xdbdb2ef5, 0x8b8b6ae1, 0xb8b8962e, 0x0a0a8a80, 0x9999fe67, 0x2b2be2c9, 0x8181e061, 0x0303c0c3, 0xa4a48d29, 0x8c8caf23, 0xaeae07a9, 0x3434390d, 0x4d4d1f52, 0x3939764f, 0xbdbdd36e, - 0x575781d6, 0x6f6fb7d8, 0xdcdceb37, 0x15155144, 0x7b7ba6dd, 0xf7f709fe, 0x3a3ab68c, 0xbcbc932f, 0x0c0c0f03, 0xffff03fc, 0xa9a9c26b, 0xc9c9ba73, 0xb5b5d96c, 0xb1b1dc6d, 0x6d6d375a, 0x45451550, - 0x3636b98f, 0x6c6c771b, 0xbebe13ad, 0x4a4ada90, 0xeeee57b9, 0x7777a9de, 0xf2f24cbe, 0xfdfd837e, 0x44445511, 0x6767bdda, 0x71712c5d, 0x05054540, 0x7c7c631f, 0x40405010, 0x6969325b, 0x6363b8db, - 0x2828220a, 0x0707c5c2, 0xc4c4f531, 0x2222a88a, 0x969631a7, 0x3737f9ce, 0xeded977a, 0xf6f649bf, 0xb4b4992d, 0xd1d1a475, 0x434390d3, 0x48485a12, 0xe2e258ba, 0x979771e6, 0xd2d264b6, 0xc2c270b2, - 0x2626ad8b, 0xa5a5cd68, 0x5e5ecb95, 0x2929624b, 0x30303c0c, 0x5a5ace94, 0xddddab76, 0xf9f9867f, 0x9595f164, 0xe6e65dbb, 0xc7c735f2, 0x24242d09, 0x1717d1c6, 0xb9b9d66f, 0x1b1bdec5, 0x12129486, - 0x60607818, 0xc3c330f3, 0xf5f5897c, 0xb3b35cef, 0xe8e8d23a, 0x7373acdf, 0x3535794c, 0x8080a020, 0xe5e59d78, 0xbbbb56ed, 0x7d7d235e, 0xf8f8c63e, 0x5f5f8bd4, 0x2f2fe7c8, 0xe4e4dd39, 0x21216849, -} - -var sbox2 = [256]uint32{ - 0x5b8ed55b, 0x42d09242, 0xa74deaa7, 0xfb06fdfb, 0x33fccf33, 0x8765e287, 0xf4c93df4, 0xde6bb5de, 0x584e1658, 0xda6eb4da, 0x50441450, 0x0bcac10b, 0xa08828a0, 0xef17f8ef, 0xb09c2cb0, 0x14110514, - 0xac872bac, 0x9dfb669d, 0x6af2986a, 0xd9ae77d9, 0xa8822aa8, 0xfa46bcfa, 0x10140410, 0x0fcfc00f, 0xaa02a8aa, 0x11544511, 0x4c5f134c, 0x98be2698, 0x256d4825, 0x1a9e841a, 0x181e0618, 0x66fd9b66, - 0x72ec9e72, 0x094a4309, 0x41105141, 0xd324f7d3, 0x46d59346, 0xbf53ecbf, 0x62f89a62, 0xe9927be9, 0xccff33cc, 0x51045551, 0x2c270b2c, 0x0d4f420d, 0xb759eeb7, 0x3ff3cc3f, 0xb21caeb2, 0x89ea6389, - 0x9374e793, 0xce7fb1ce, 0x706c1c70, 0xa60daba6, 0x27edca27, 0x20280820, 0xa348eba3, 0x56c19756, 0x02808202, 0x7fa3dc7f, 0x52c49652, 0xeb12f9eb, 0xd5a174d5, 0x3eb38d3e, 0xfcc33ffc, 0x9a3ea49a, - 0x1d5b461d, 0x1c1b071c, 0x9e3ba59e, 0xf30cfff3, 0xcf3ff0cf, 0xcdbf72cd, 0x5c4b175c, 0xea52b8ea, 0x0e8f810e, 0x653d5865, 0xf0cc3cf0, 0x647d1964, 0x9b7ee59b, 0x16918716, 0x3d734e3d, 0xa208aaa2, - 0xa1c869a1, 0xadc76aad, 0x06858306, 0xca7ab0ca, 0xc5b570c5, 0x91f46591, 0x6bb2d96b, 0x2ea7892e, 0xe318fbe3, 0xaf47e8af, 0x3c330f3c, 0x2d674a2d, 0xc1b071c1, 0x590e5759, 0x76e99f76, 0xd4e135d4, - 0x78661e78, 0x90b42490, 0x38360e38, 0x79265f79, 0x8def628d, 0x61385961, 0x4795d247, 0x8a2aa08a, 0x94b12594, 0x88aa2288, 0xf18c7df1, 0xecd73bec, 0x04050104, 0x84a52184, 0xe19879e1, 0x1e9b851e, - 0x5384d753, 0x00000000, 0x195e4719, 0x5d0b565d, 0x7ee39d7e, 0x4f9fd04f, 0x9cbb279c, 0x491a5349, 0x317c4d31, 0xd8ee36d8, 0x080a0208, 0x9f7be49f, 0x8220a282, 0x13d4c713, 0x23e8cb23, 0x7ae69c7a, - 0xab42e9ab, 0xfe43bdfe, 0x2aa2882a, 0x4b9ad14b, 0x01404101, 0x1fdbc41f, 0xe0d838e0, 0xd661b7d6, 0x8e2fa18e, 0xdf2bf4df, 0xcb3af1cb, 0x3bf6cd3b, 0xe71dfae7, 0x85e56085, 0x54411554, 0x8625a386, - 0x8360e383, 0xba16acba, 0x75295c75, 0x9234a692, 0x6ef7996e, 0xd0e434d0, 0x68721a68, 0x55015455, 0xb619afb6, 0x4edf914e, 0xc8fa32c8, 0xc0f030c0, 0xd721f6d7, 0x32bc8e32, 0xc675b3c6, 0x8f6fe08f, - 0x74691d74, 0xdb2ef5db, 0x8b6ae18b, 0xb8962eb8, 0x0a8a800a, 0x99fe6799, 0x2be2c92b, 0x81e06181, 0x03c0c303, 0xa48d29a4, 0x8caf238c, 0xae07a9ae, 0x34390d34, 0x4d1f524d, 0x39764f39, 0xbdd36ebd, - 0x5781d657, 0x6fb7d86f, 0xdceb37dc, 0x15514415, 0x7ba6dd7b, 0xf709fef7, 0x3ab68c3a, 0xbc932fbc, 0x0c0f030c, 0xff03fcff, 0xa9c26ba9, 0xc9ba73c9, 0xb5d96cb5, 0xb1dc6db1, 0x6d375a6d, 0x45155045, - 0x36b98f36, 0x6c771b6c, 0xbe13adbe, 0x4ada904a, 0xee57b9ee, 0x77a9de77, 0xf24cbef2, 0xfd837efd, 0x44551144, 0x67bdda67, 0x712c5d71, 0x05454005, 0x7c631f7c, 0x40501040, 0x69325b69, 0x63b8db63, - 0x28220a28, 0x07c5c207, 0xc4f531c4, 0x22a88a22, 0x9631a796, 0x37f9ce37, 0xed977aed, 0xf649bff6, 0xb4992db4, 0xd1a475d1, 0x4390d343, 0x485a1248, 0xe258bae2, 0x9771e697, 0xd264b6d2, 0xc270b2c2, - 0x26ad8b26, 0xa5cd68a5, 0x5ecb955e, 0x29624b29, 0x303c0c30, 0x5ace945a, 0xddab76dd, 0xf9867ff9, 0x95f16495, 0xe65dbbe6, 0xc735f2c7, 0x242d0924, 0x17d1c617, 0xb9d66fb9, 0x1bdec51b, 0x12948612, - 0x60781860, 0xc330f3c3, 0xf5897cf5, 0xb35cefb3, 0xe8d23ae8, 0x73acdf73, 0x35794c35, 0x80a02080, 0xe59d78e5, 0xbb56edbb, 0x7d235e7d, 0xf8c63ef8, 0x5f8bd45f, 0x2fe7c82f, 0xe4dd39e4, 0x21684921, -} - -var sbox3 = [256]uint32{ - 0x8ed55b5b, 0xd0924242, 0x4deaa7a7, 0x06fdfbfb, 0xfccf3333, 0x65e28787, 0xc93df4f4, 0x6bb5dede, 0x4e165858, 0x6eb4dada, 0x44145050, 0xcac10b0b, 0x8828a0a0, 0x17f8efef, 0x9c2cb0b0, 0x11051414, - 0x872bacac, 0xfb669d9d, 0xf2986a6a, 0xae77d9d9, 0x822aa8a8, 0x46bcfafa, 0x14041010, 0xcfc00f0f, 0x02a8aaaa, 0x54451111, 0x5f134c4c, 0xbe269898, 0x6d482525, 0x9e841a1a, 0x1e061818, 0xfd9b6666, - 0xec9e7272, 0x4a430909, 0x10514141, 0x24f7d3d3, 0xd5934646, 0x53ecbfbf, 0xf89a6262, 0x927be9e9, 0xff33cccc, 0x04555151, 0x270b2c2c, 0x4f420d0d, 0x59eeb7b7, 0xf3cc3f3f, 0x1caeb2b2, 0xea638989, - 0x74e79393, 0x7fb1cece, 0x6c1c7070, 0x0daba6a6, 0xedca2727, 0x28082020, 0x48eba3a3, 0xc1975656, 0x80820202, 0xa3dc7f7f, 0xc4965252, 0x12f9ebeb, 0xa174d5d5, 0xb38d3e3e, 0xc33ffcfc, 0x3ea49a9a, - 0x5b461d1d, 0x1b071c1c, 0x3ba59e9e, 0x0cfff3f3, 0x3ff0cfcf, 0xbf72cdcd, 0x4b175c5c, 0x52b8eaea, 0x8f810e0e, 0x3d586565, 0xcc3cf0f0, 0x7d196464, 0x7ee59b9b, 0x91871616, 0x734e3d3d, 0x08aaa2a2, - 0xc869a1a1, 0xc76aadad, 0x85830606, 0x7ab0caca, 0xb570c5c5, 0xf4659191, 0xb2d96b6b, 0xa7892e2e, 0x18fbe3e3, 0x47e8afaf, 0x330f3c3c, 0x674a2d2d, 0xb071c1c1, 0x0e575959, 0xe99f7676, 0xe135d4d4, - 0x661e7878, 0xb4249090, 0x360e3838, 0x265f7979, 0xef628d8d, 0x38596161, 0x95d24747, 0x2aa08a8a, 0xb1259494, 0xaa228888, 0x8c7df1f1, 0xd73becec, 0x05010404, 0xa5218484, 0x9879e1e1, 0x9b851e1e, - 0x84d75353, 0x00000000, 0x5e471919, 0x0b565d5d, 0xe39d7e7e, 0x9fd04f4f, 0xbb279c9c, 0x1a534949, 0x7c4d3131, 0xee36d8d8, 0x0a020808, 0x7be49f9f, 0x20a28282, 0xd4c71313, 0xe8cb2323, 0xe69c7a7a, - 0x42e9abab, 0x43bdfefe, 0xa2882a2a, 0x9ad14b4b, 0x40410101, 0xdbc41f1f, 0xd838e0e0, 0x61b7d6d6, 0x2fa18e8e, 0x2bf4dfdf, 0x3af1cbcb, 0xf6cd3b3b, 0x1dfae7e7, 0xe5608585, 0x41155454, 0x25a38686, - 0x60e38383, 0x16acbaba, 0x295c7575, 0x34a69292, 0xf7996e6e, 0xe434d0d0, 0x721a6868, 0x01545555, 0x19afb6b6, 0xdf914e4e, 0xfa32c8c8, 0xf030c0c0, 0x21f6d7d7, 0xbc8e3232, 0x75b3c6c6, 0x6fe08f8f, - 0x691d7474, 0x2ef5dbdb, 0x6ae18b8b, 0x962eb8b8, 0x8a800a0a, 0xfe679999, 0xe2c92b2b, 0xe0618181, 0xc0c30303, 0x8d29a4a4, 0xaf238c8c, 0x07a9aeae, 0x390d3434, 0x1f524d4d, 0x764f3939, 0xd36ebdbd, - 0x81d65757, 0xb7d86f6f, 0xeb37dcdc, 0x51441515, 0xa6dd7b7b, 0x09fef7f7, 0xb68c3a3a, 0x932fbcbc, 0x0f030c0c, 0x03fcffff, 0xc26ba9a9, 0xba73c9c9, 0xd96cb5b5, 0xdc6db1b1, 0x375a6d6d, 0x15504545, - 0xb98f3636, 0x771b6c6c, 0x13adbebe, 0xda904a4a, 0x57b9eeee, 0xa9de7777, 0x4cbef2f2, 0x837efdfd, 0x55114444, 0xbdda6767, 0x2c5d7171, 0x45400505, 0x631f7c7c, 0x50104040, 0x325b6969, 0xb8db6363, - 0x220a2828, 0xc5c20707, 0xf531c4c4, 0xa88a2222, 0x31a79696, 0xf9ce3737, 0x977aeded, 0x49bff6f6, 0x992db4b4, 0xa475d1d1, 0x90d34343, 0x5a124848, 0x58bae2e2, 0x71e69797, 0x64b6d2d2, 0x70b2c2c2, - 0xad8b2626, 0xcd68a5a5, 0xcb955e5e, 0x624b2929, 0x3c0c3030, 0xce945a5a, 0xab76dddd, 0x867ff9f9, 0xf1649595, 0x5dbbe6e6, 0x35f2c7c7, 0x2d092424, 0xd1c61717, 0xd66fb9b9, 0xdec51b1b, 0x94861212, - 0x78186060, 0x30f3c3c3, 0x897cf5f5, 0x5cefb3b3, 0xd23ae8e8, 0xacdf7373, 0x794c3535, 0xa0208080, 0x9d78e5e5, 0x56edbbbb, 0x235e7d7d, 0xc63ef8f8, 0x8bd45f5f, 0xe7c82f2f, 0xdd39e4e4, 0x68492121, -} - -func rl(x uint32, i uint8) uint32 { return (x << (i % 32)) | (x >> (32 - (i % 32))) } - -func l0(b uint32) uint32 { return b ^ rl(b, 13) ^ rl(b, 23) } - -func feistel0(x0, x1, x2, x3, rk uint32) uint32 { return x0 ^ l0(p(x1^x2^x3^rk)) } - -//非线性变换τ(.) -func p(a uint32) uint32 { - return (uint32(sbox[a>>24]) << 24) ^ (uint32(sbox[(a>>16)&0xff]) << 16) ^ (uint32(sbox[(a>>8)&0xff]) << 8) ^ uint32(sbox[(a)&0xff]) -} - -func permuteInitialBlock(b []uint32, block []byte) { - for i := 0; i < 4; i++ { - b[i] = (uint32(block[i*4]) << 24) | (uint32(block[i*4+1]) << 16) | - (uint32(block[i*4+2]) << 8) | (uint32(block[i*4+3])) - } -} - -func permuteFinalBlock(b []byte, block []uint32) { - for i := 0; i < 4; i++ { - b[i*4] = uint8(block[i] >> 24) - b[i*4+1] = uint8(block[i] >> 16) - b[i*4+2] = uint8(block[i] >> 8) - b[i*4+3] = uint8(block[i]) - } -} - -//修改后的加密核心函数 -func cryptBlock(subkeys []uint32, b []uint32, r []byte, dst, src []byte, decrypt bool) { - permuteInitialBlock(b, src) - - // bounds check elimination in major encryption loop - // https://go101.org/article/bounds-check-elimination.html - _ = b[3] - if decrypt { - for i := 0; i < 8; i++ { - s := subkeys[31-4*i-3 : 31-4*i-3+4] - x := b[1] ^ b[2] ^ b[3] ^ s[3] - b[0] = b[0] ^ sbox0[x&0xff] ^ sbox1[(x>>8)&0xff] ^ sbox2[(x>>16)&0xff] ^ sbox3[(x>>24)&0xff] - x = b[0] ^ b[2] ^ b[3] ^ s[2] - b[1] = b[1] ^ sbox0[x&0xff] ^ sbox1[(x>>8)&0xff] ^ sbox2[(x>>16)&0xff] ^ sbox3[(x>>24)&0xff] - x = b[0] ^ b[1] ^ b[3] ^ s[1] - b[2] = b[2] ^ sbox0[x&0xff] ^ sbox1[(x>>8)&0xff] ^ sbox2[(x>>16)&0xff] ^ sbox3[(x>>24)&0xff] - x = b[1] ^ b[2] ^ b[0] ^ s[0] - b[3] = b[3] ^ sbox0[x&0xff] ^ sbox1[(x>>8)&0xff] ^ sbox2[(x>>16)&0xff] ^ sbox3[(x>>24)&0xff] - } - } else { - for i := 0; i < 8; i++ { - s := subkeys[4*i : 4*i+4] - x := b[1] ^ b[2] ^ b[3] ^ s[0] - b[0] = b[0] ^ sbox0[x&0xff] ^ sbox1[(x>>8)&0xff] ^ sbox2[(x>>16)&0xff] ^ sbox3[(x>>24)&0xff] - x = b[0] ^ b[2] ^ b[3] ^ s[1] - b[1] = b[1] ^ sbox0[x&0xff] ^ sbox1[(x>>8)&0xff] ^ sbox2[(x>>16)&0xff] ^ sbox3[(x>>24)&0xff] - x = b[0] ^ b[1] ^ b[3] ^ s[2] - b[2] = b[2] ^ sbox0[x&0xff] ^ sbox1[(x>>8)&0xff] ^ sbox2[(x>>16)&0xff] ^ sbox3[(x>>24)&0xff] - x = b[1] ^ b[2] ^ b[0] ^ s[3] - b[3] = b[3] ^ sbox0[x&0xff] ^ sbox1[(x>>8)&0xff] ^ sbox2[(x>>16)&0xff] ^ sbox3[(x>>24)&0xff] - } - } - b[0], b[1], b[2], b[3] = b[3], b[2], b[1], b[0] - permuteFinalBlock(r, b) - copy(dst, r) -} - -func generateSubKeys(key []byte) []uint32 { - subkeys := make([]uint32, 32) - b := make([]uint32, 4) - permuteInitialBlock(b, key) - b[0] ^= fk[0] - b[1] ^= fk[1] - b[2] ^= fk[2] - b[3] ^= fk[3] - for i := 0; i < 32; i++ { - subkeys[i] = feistel0(b[0], b[1], b[2], b[3], ck[i]) - b[0], b[1], b[2], b[3] = b[1], b[2], b[3], subkeys[i] - } - return subkeys -} - -// NewCipher creates and returns a new cipher.Block. -func NewCipher(key []byte) (cipher.Block, error) { - if len(key) != BlockSize { - return nil, errors.New("SM4: invalid key size " + strconv.Itoa(len(key))) - } - c := new(Sm4Cipher) - c.subkeys = generateSubKeys(key) - c.block1 = make([]uint32, 4) - c.block2 = make([]byte, 16) - return c, nil -} - -func (c *Sm4Cipher) BlockSize() int { - return BlockSize -} - -func (c *Sm4Cipher) Encrypt(dst, src []byte) { - cryptBlock(c.subkeys, c.block1, c.block2, dst, src, false) -} - - - -func (c *Sm4Cipher) Decrypt(dst, src []byte) { - cryptBlock(c.subkeys, c.block1, c.block2, dst, src, true) -} - - - -func xor(in, iv []byte) (out []byte) { - if len(in) != len(iv) { - return nil - } - - out = make([]byte, len(in)) - for i := 0; i < len(in); i++ { - out[i] = in[i] ^ iv[i] - } - return -} - -func pkcs7Padding(src []byte) []byte { - padding := BlockSize - len(src)%BlockSize - padtext := bytes.Repeat([]byte{byte(padding)}, padding) - return append(src, padtext...) -} - -func pkcs7UnPadding(src []byte) ([]byte, error) { - length := len(src) - unpadding := int(src[length-1]) - if unpadding > BlockSize || unpadding == 0 { - return nil, errors.New("Invalid pkcs7 padding (unpadding > BlockSize || unpadding == 0)") - } - - pad := src[len(src)-unpadding:] - for i := 0; i < unpadding; i++ { - if pad[i] != byte(unpadding) { - return nil, errors.New("Invalid pkcs7 padding (pad[i] != unpadding)") - } - } - - return src[:(length - unpadding)], nil -} -func SetIV(iv []byte)error{ - if len(iv)!=BlockSize{ - return errors.New("SM4: invalid iv size") - } - IV=iv - return nil -} - -func Sm4Cbc(key []byte, in []byte, mode bool) (out []byte, err error) { - if len(key) != BlockSize { - return nil, errors.New("SM4: invalid key size " + strconv.Itoa(len(key))) - } - var inData []byte - if mode { - inData = pkcs7Padding(in) - } else { - inData = in - } - iv:=make([]byte,BlockSize) - copy(iv,IV) - out = make([]byte, len(inData)) - c, err := NewCipher(key) - if err != nil { - panic(err) - } - if mode { - for i := 0; i < len(inData)/16; i++ { - in_tmp := xor(inData[i*16:i*16+16], iv) - out_tmp := make([]byte, 16) - c.Encrypt(out_tmp, in_tmp) - copy(out[i*16:i*16+16], out_tmp) - iv = out_tmp - } - } else { - for i := 0; i < len(inData)/16; i++ { - in_tmp := inData[i*16 : i*16+16] - out_tmp := make([]byte, 16) - c.Decrypt(out_tmp, in_tmp) - out_tmp = xor(out_tmp, iv) - copy(out[i*16:i*16+16], out_tmp) - iv = in_tmp - } - out, _ = pkcs7UnPadding(out) - } - - return out, nil -} -func Sm4Ecb(key []byte, in []byte, mode bool) (out []byte, err error) { - if len(key) != BlockSize { - return nil, errors.New("SM4: invalid key size " + strconv.Itoa(len(key))) - } - var inData []byte - if mode { - inData = pkcs7Padding(in) - } else { - inData = in - } - out = make([]byte, len(inData)) - c, err := NewCipher(key) - if err != nil { - panic(err) - } - if mode { - for i := 0; i < len(inData)/16; i++ { - in_tmp := inData[i*16 : i*16+16] - out_tmp := make([]byte, 16) - c.Encrypt(out_tmp, in_tmp) - copy(out[i*16:i*16+16], out_tmp) - } - } else { - for i := 0; i < len(inData)/16; i++ { - in_tmp := inData[i*16 : i*16+16] - out_tmp := make([]byte, 16) - c.Decrypt(out_tmp, in_tmp) - copy(out[i*16:i*16+16], out_tmp) - } - out, _ = pkcs7UnPadding(out) - } - - return out, nil -} - -//密码反馈模式(Cipher FeedBack (CFB)) -//https://blog.csdn.net/zy_strive_2012/article/details/102520356 -//https://blog.csdn.net/sinat_23338865/article/details/72869841 -func Sm4CFB(key []byte, in []byte, mode bool) (out []byte, err error) { - if len(key) != BlockSize { - return nil, errors.New("SM4: invalid key size " + strconv.Itoa(len(key))) - } - var inData []byte - if mode { - inData = pkcs7Padding(in) - } else { - inData = in - } - - out = make([]byte, len(inData)) - c, err := NewCipher(key) - if err != nil { - panic(err) - } - - K := make([]byte, BlockSize) - cipherBlock := make([]byte, BlockSize) - plainBlock := make([]byte, BlockSize) - if mode { //加密 - for i := 0; i < len(inData)/16; i++ { - if i == 0 { - c.Encrypt(K, IV) - cipherBlock = xor(K[:BlockSize], inData[i*16:i*16+16]) - copy(out[i*16:i*16+16], cipherBlock) - //copy(cipherBlock,out_tmp) - continue - } - c.Encrypt(K, cipherBlock) - cipherBlock = xor(K[:BlockSize], inData[i*16:i*16+16]) - copy(out[i*16:i*16+16], cipherBlock) - //copy(cipherBlock,out_tmp) - } - - } else { //解密 - var i int = 0 - for ; i < len(inData)/16; i++ { - if i == 0 { - c.Encrypt(K, IV) //这里是加密,而不是调用解密方法Decrypt - plainBlock = xor(K[:BlockSize], inData[i*16:i*16+16]) //获取明文分组 - copy(out[i*16:i*16+16], plainBlock) - continue - } - c.Encrypt(K, inData[(i-1)*16:(i-1)*16+16]) - plainBlock = xor(K[:BlockSize], inData[i*16:i*16+16]) //获取明文分组 - copy(out[i*16:i*16+16], plainBlock) - - } - - out, _ = pkcs7UnPadding(out) - } - - return out, nil -} - -//输出反馈模式(Output feedback, OFB) -//https://blog.csdn.net/chengqiuming/article/details/82390910 -//https://blog.csdn.net/sinat_23338865/article/details/72869841 -func Sm4OFB(key []byte, in []byte, mode bool) (out []byte, err error) { - if len(key) != BlockSize { - return nil, errors.New("SM4: invalid key size " + strconv.Itoa(len(key))) - } - var inData []byte - if mode { - inData = pkcs7Padding(in) - } else { - inData = in - } - - out = make([]byte, len(inData)) - c, err := NewCipher(key) - if err != nil { - panic(err) - } - - K := make([]byte, BlockSize) - cipherBlock := make([]byte, BlockSize) - plainBlock := make([]byte, BlockSize) - shiftIV := make([]byte, BlockSize) - if mode { //加密 - for i := 0; i < len(inData)/16; i++ { - if i == 0 { - c.Encrypt(K, IV) - cipherBlock = xor(K[:BlockSize], inData[i*16:i*16+16]) - copy(out[i*16:i*16+16], cipherBlock) - copy(shiftIV, K[:BlockSize]) - continue - } - c.Encrypt(K, shiftIV) - cipherBlock = xor(K[:BlockSize], inData[i*16:i*16+16]) - copy(out[i*16:i*16+16], cipherBlock) - copy(shiftIV, K[:BlockSize]) - } - - } else { //解密 - for i := 0; i < len(inData)/16; i++ { - if i == 0 { - c.Encrypt(K, IV) //这里是加密,而不是调用解密方法Decrypt - plainBlock = xor(K[:BlockSize], inData[i*16:i*16+16]) //获取明文分组 - copy(out[i*16:i*16+16], plainBlock) - copy(shiftIV, K[:BlockSize]) - continue - } - c.Encrypt(K, shiftIV) - plainBlock = xor(K[:BlockSize], inData[i*16:i*16+16]) //获取明文分组 - copy(out[i*16:i*16+16], plainBlock) - copy(shiftIV, K[:BlockSize]) - } - out, _ = pkcs7UnPadding(out) - } - - return out, nil -} diff --git a/vendor/github.com/tjfoc/gmsm/sm4/sm4_gcm.go b/vendor/github.com/tjfoc/gmsm/sm4/sm4_gcm.go deleted file mode 100644 index 6257c21..0000000 --- a/vendor/github.com/tjfoc/gmsm/sm4/sm4_gcm.go +++ /dev/null @@ -1,333 +0,0 @@ -/* -Copyright Hyperledger-TWGC All Rights Reserved. -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. - -writed by Zhiwei Yan, 2020 Oct -*/ -package sm4 - -import ( - "errors" - "strconv" -) - -//Paper: The Galois/Counter Mode of Operation (GCM) David A. Mcgrew,John Viega .2004. -func Sm4GCM(key []byte, IV ,in, A []byte, mode bool) ([]byte, []byte, error) { - if len(key) != BlockSize { - return nil,nil, errors.New("SM4: invalid key size " + strconv.Itoa(len(key))) - } - if mode { - C,T:=GCMEncrypt(key,IV,in,A) - return C,T,nil - }else{ - P,_T:=GCMDecrypt(key,IV,in,A) - return P,_T,nil - } -} - -func GetH(key []byte) (H []byte){ - c,err := NewCipher(key) - if err != nil { - panic(err) - } - - zores:=make([]byte, BlockSize) - H =make([]byte, BlockSize) - c.Encrypt(H,zores) - return H -} - -//ut = a + b -func addition(a ,b []byte) (out []byte){ - Len:=len(a) - if Len != len(b) { - return nil - } - out = make([]byte, Len) - for i := 0; i < Len; i++ { - out[i] = a[i] ^ b[i] - } - return out -} - -func Rightshift(V []byte){ - n:=len(V) - for i:=n-1;i>=0;i-- { - V[i]=V[i]>>1 - if i!=0{ - V[i]=((V[i-1]&0x01)<<7)|V[i] - } - } -} - -func findYi( Y []byte,index int) int{ - var temp byte - i := uint(index) - temp=Y[i/8] - temp=temp>>(7-i%8) - if temp & 0x01 == 1{ - return 1 - }else{ - return 0 - } -} - - -func multiplication(X,Y []byte) (Z []byte){ - - R:=make([]byte,BlockSize) - R[0]=0xe1 - Z=make([]byte,BlockSize) - V:=make([]byte,BlockSize) - copy(V,X) - for i:=0;i<=127;i++{ - if findYi(Y,i)==1{ - Z=addition(Z,V) - } - if V[BlockSize-1]&0x01==0{ - Rightshift(V) - }else{ - Rightshift(V) - V=addition(V,R) - } - } - return Z -} - -func GHASH(H []byte,A []byte,C []byte) (X[]byte){ - - calculm_v:=func(m ,v int) (int,int) { - if(m==0 && v!=0){ - m=1 - v=v*8 - }else if(m!=0 && v==0) { - v=BlockSize*8 - }else if(m!=0 && v!=0){ - m=m+1 - v=v*8 - }else { //m==0 && v==0 - m=1 - v=0 - } - return m,v - } - m:=len(A)/BlockSize - v:=len(A)%BlockSize - m,v=calculm_v(m,v) - - n:=len(C)/BlockSize - u:=(len(C)%BlockSize) - n,u=calculm_v(n,u) - - //i=0 - X=make([]byte,BlockSize*(m+n+2)) //X0 = 0 - for i:=0;im-1 对于数组来说是 0-->m-2 - } - - //i=m - zeros:=make([]byte,(128-v)/8) - Am:=make([]byte,v/8) - copy(Am[:],A[(m-1)*BlockSize:]) - Am=append(Am,zeros...) - copy(X[m*BlockSize:m*BlockSize+BlockSize],multiplication( addition(X[(m-1)*BlockSize:(m-1)*BlockSize+BlockSize],Am),H)) - - //i=m+1...m+n-1 - for i:=m+1;i<=(m+n-1);i++{ - copy(X[i*BlockSize:i*BlockSize+BlockSize],multiplication( addition(X[(i-1)*BlockSize:(i-1)*BlockSize+BlockSize],C[(i-m-1)*BlockSize:(i-m-1)*BlockSize+BlockSize]),H)) - } - - //i=m+n - zeros =make([]byte,(128-u)/8) - Cn:=make([]byte,u/8) - copy(Cn[:],C[(n-1)*BlockSize:]) - Cn=append(Cn,zeros...) - copy(X[(m+n)*BlockSize:(m+n)*BlockSize+BlockSize],multiplication( addition(X[(m+n-1)*BlockSize:(m+n-1)*BlockSize+BlockSize],Cn),H)) - - //i=m+n+1 - var lenAB []byte - calculateLenToBytes :=func(len int) []byte{ - data:=make([]byte,8) - data[0]=byte((len>>56)&0xff) - data[1]=byte((len>>48)&0xff) - data[2]=byte((len>>40)&0xff) - data[3]=byte((len>>32)&0xff) - data[4]=byte((len>>24)&0xff) - data[5]=byte((len>>16)&0xff) - data[6]=byte((len>>8)&0xff) - data[7]=byte((len>>0)&0xff) - return data - } - lenAB=append(lenAB,calculateLenToBytes(len(A))...) - lenAB=append(lenAB,calculateLenToBytes(len(C))...) - copy(X[(m+n+1)*BlockSize:(m+n+1)*BlockSize+BlockSize],multiplication(addition(X[(m+n)*BlockSize:(m+n)*BlockSize+BlockSize],lenAB),H)) - return X[(m+n+1)*BlockSize:(m+n+1)*BlockSize+BlockSize] -} - - -func GetY0(H,IV []byte) []byte{ - if len(IV)*8 == 96 { - zero31one1:=[]byte{0x00,0x00,0x00,0x01} - IV=append(IV,zero31one1...) - return IV - }else{ - return GHASH(H,[]byte{},IV) - - } - -} - -func incr(n int ,Y_i []byte) (Y_ii []byte) { - - Y_ii=make([]byte,BlockSize*n) - copy(Y_ii,Y_i) - - addYone:=func(yi,yii []byte){ - copy(yii[:],yi[:]) - - Len:=len(yi) - var rc byte=0x00 - for i:=Len-1;i>=0;i--{ - if(i==Len-1){ - if(yii[i]<0xff){ - yii[i]=yii[i]+0x01 - rc=0x00 - }else{ - yii[i]=0x00 - rc=0x01 - } - }else{ - if yii[i]+rc<0xff { - yii[i]=yii[i]+rc - rc=0x00 - }else{ - yii[i]=0x00 - rc=0x01 - } - } - } - } - for i:=1;i - - -[![GoDoc][1]][2] [![Powered][9]][10] [![MIT licensed][11]][12] [![Build Status][3]][4] [![Go Report Card][5]][6] [![Coverage Statusd][7]][8] - -[1]: https://godoc.org/github.com/xtaci/kcp-go?status.svg -[2]: https://godoc.org/github.com/xtaci/kcp-go -[3]: https://travis-ci.org/xtaci/kcp-go.svg?branch=master -[4]: https://travis-ci.org/xtaci/kcp-go -[5]: https://goreportcard.com/badge/github.com/xtaci/kcp-go -[6]: https://goreportcard.com/report/github.com/xtaci/kcp-go -[7]: https://codecov.io/gh/xtaci/kcp-go/branch/master/graph/badge.svg -[8]: https://codecov.io/gh/xtaci/kcp-go -[9]: https://img.shields.io/badge/KCP-Powered-blue.svg -[10]: https://github.com/skywind3000/kcp -[11]: https://img.shields.io/badge/license-MIT-blue.svg -[12]: LICENSE - -## Introduction - -**kcp-go** is a **Production-Grade Reliable-UDP** library for [golang](https://golang.org/). - -This library intents to provide a **smooth, resilient, ordered, error-checked and anonymous** delivery of streams over **UDP** packets, it has been battle-tested with opensource project [kcptun](https://github.com/xtaci/kcptun). Millions of devices(from low-end MIPS routers to high-end servers) have deployed **kcp-go** powered program in a variety of forms like **online games, live broadcasting, file synchronization and network acceleration**. - -[Lastest Release](https://github.com/xtaci/kcp-go/releases) - -## Features - -1. Designed for **Latency-sensitive** scenarios. -1. **Cache friendly** and **Memory optimized** design, offers extremely **High Performance** core. -1. Handles **>5K concurrent connections** on a single commodity server. -1. Compatible with [net.Conn](https://golang.org/pkg/net/#Conn) and [net.Listener](https://golang.org/pkg/net/#Listener), a drop-in replacement for [net.TCPConn](https://golang.org/pkg/net/#TCPConn). -1. [FEC(Forward Error Correction)](https://en.wikipedia.org/wiki/Forward_error_correction) Support with [Reed-Solomon Codes](https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction) -1. Packet level encryption support with [AES](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard), [TEA](https://en.wikipedia.org/wiki/Tiny_Encryption_Algorithm), [3DES](https://en.wikipedia.org/wiki/Triple_DES), [Blowfish](https://en.wikipedia.org/wiki/Blowfish_(cipher)), [Cast5](https://en.wikipedia.org/wiki/CAST-128), [Salsa20]( https://en.wikipedia.org/wiki/Salsa20), etc. in [CFB](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_Feedback_.28CFB.29) mode, which generates completely anonymous packet. -1. Only **A fixed number of goroutines** will be created for the entire server application, costs in **context switch** between goroutines have been taken into consideration. -1. Compatible with [skywind3000's](https://github.com/skywind3000) C version with various improvements. -1. Platform-dependent optimizations: [sendmmsg](http://man7.org/linux/man-pages/man2/sendmmsg.2.html) and [recvmmsg](http://man7.org/linux/man-pages/man2/recvmmsg.2.html) were expoloited for linux. - -## Documentation - -For complete documentation, see the associated [Godoc](https://godoc.org/github.com/xtaci/kcp-go). - -## Specification - -Frame Format - -``` -NONCE: - 16bytes cryptographically secure random number, nonce changes for every packet. - -CRC32: - CRC-32 checksum of data using the IEEE polynomial - -FEC TYPE: - typeData = 0xF1 - typeParity = 0xF2 - -FEC SEQID: - monotonically increasing in range: [0, (0xffffffff/shardSize) * shardSize - 1] - -SIZE: - The size of KCP frame plus 2 -``` - -``` -+-----------------+ -| SESSION | -+-----------------+ -| KCP(ARQ) | -+-----------------+ -| FEC(OPTIONAL) | -+-----------------+ -| CRYPTO(OPTIONAL)| -+-----------------+ -| UDP(PACKET) | -+-----------------+ -| IP | -+-----------------+ -| LINK | -+-----------------+ -| PHY | -+-----------------+ -(LAYER MODEL OF KCP-GO) -``` - - -## Examples - -1. [simple examples](https://github.com/xtaci/kcp-go/tree/master/examples) -2. [kcptun client](https://github.com/xtaci/kcptun/blob/master/client/main.go) -3. [kcptun server](https://github.com/xtaci/kcptun/blob/master/server/main.go) - -## Benchmark -``` - Model Name: MacBook Pro - Model Identifier: MacBookPro14,1 - Processor Name: Intel Core i5 - Processor Speed: 3.1 GHz - Number of Processors: 1 - Total Number of Cores: 2 - L2 Cache (per Core): 256 KB - L3 Cache: 4 MB - Memory: 8 GB -``` -``` -$ go test -v -run=^$ -bench . -beginning tests, encryption:salsa20, fec:10/3 -goos: darwin -goarch: amd64 -pkg: github.com/xtaci/kcp-go -BenchmarkSM4-4 50000 32180 ns/op 93.23 MB/s 0 B/op 0 allocs/op -BenchmarkAES128-4 500000 3285 ns/op 913.21 MB/s 0 B/op 0 allocs/op -BenchmarkAES192-4 300000 3623 ns/op 827.85 MB/s 0 B/op 0 allocs/op -BenchmarkAES256-4 300000 3874 ns/op 774.20 MB/s 0 B/op 0 allocs/op -BenchmarkTEA-4 100000 15384 ns/op 195.00 MB/s 0 B/op 0 allocs/op -BenchmarkXOR-4 20000000 89.9 ns/op 33372.00 MB/s 0 B/op 0 allocs/op -BenchmarkBlowfish-4 50000 26927 ns/op 111.41 MB/s 0 B/op 0 allocs/op -BenchmarkNone-4 30000000 45.7 ns/op 65597.94 MB/s 0 B/op 0 allocs/op -BenchmarkCast5-4 50000 34258 ns/op 87.57 MB/s 0 B/op 0 allocs/op -Benchmark3DES-4 10000 117149 ns/op 25.61 MB/s 0 B/op 0 allocs/op -BenchmarkTwofish-4 50000 33538 ns/op 89.45 MB/s 0 B/op 0 allocs/op -BenchmarkXTEA-4 30000 45666 ns/op 65.69 MB/s 0 B/op 0 allocs/op -BenchmarkSalsa20-4 500000 3308 ns/op 906.76 MB/s 0 B/op 0 allocs/op -BenchmarkCRC32-4 20000000 65.2 ns/op 15712.43 MB/s -BenchmarkCsprngSystem-4 1000000 1150 ns/op 13.91 MB/s -BenchmarkCsprngMD5-4 10000000 145 ns/op 110.26 MB/s -BenchmarkCsprngSHA1-4 10000000 158 ns/op 126.54 MB/s -BenchmarkCsprngNonceMD5-4 10000000 153 ns/op 104.22 MB/s -BenchmarkCsprngNonceAES128-4 100000000 19.1 ns/op 837.81 MB/s -BenchmarkFECDecode-4 1000000 1119 ns/op 1339.61 MB/s 1606 B/op 2 allocs/op -BenchmarkFECEncode-4 2000000 832 ns/op 1801.83 MB/s 17 B/op 0 allocs/op -BenchmarkFlush-4 5000000 272 ns/op 0 B/op 0 allocs/op -BenchmarkEchoSpeed4K-4 5000 259617 ns/op 15.78 MB/s 5451 B/op 149 allocs/op -BenchmarkEchoSpeed64K-4 1000 1706084 ns/op 38.41 MB/s 56002 B/op 1604 allocs/op -BenchmarkEchoSpeed512K-4 100 14345505 ns/op 36.55 MB/s 482597 B/op 13045 allocs/op -BenchmarkEchoSpeed1M-4 30 34859104 ns/op 30.08 MB/s 1143773 B/op 27186 allocs/op -BenchmarkSinkSpeed4K-4 50000 31369 ns/op 130.57 MB/s 1566 B/op 30 allocs/op -BenchmarkSinkSpeed64K-4 5000 329065 ns/op 199.16 MB/s 21529 B/op 453 allocs/op -BenchmarkSinkSpeed256K-4 500 2373354 ns/op 220.91 MB/s 166332 B/op 3554 allocs/op -BenchmarkSinkSpeed1M-4 300 5117927 ns/op 204.88 MB/s 310378 B/op 6988 allocs/op -PASS -ok github.com/xtaci/kcp-go 50.349s -``` - - -## Typical Flame Graph -![Flame Graph in kcptun](flame.png) - -## Key Design Considerations - -1. slice vs. container/list - -`kcp.flush()` loops through the send queue for retransmission checking for every 20ms(interval). - -I've wrote a benchmark for comparing sequential loop through *slice* and *container/list* here: - -https://github.com/xtaci/notes/blob/master/golang/benchmark2/cachemiss_test.go - -``` -BenchmarkLoopSlice-4 2000000000 0.39 ns/op -BenchmarkLoopList-4 100000000 54.6 ns/op -``` - -List structure introduces **heavy cache misses** compared to slice which owns better **locality**, 5000 connections with 32 window size and 20ms interval will cost 6us/0.03%(cpu) using slice, and 8.7ms/43.5%(cpu) for list for each `kcp.flush()`. - -2. Timing accuracy vs. syscall clock_gettime - -Timing is **critical** to **RTT estimator**, inaccurate timing leads to false retransmissions in KCP, but calling `time.Now()` costs 42 cycles(10.5ns on 4GHz CPU, 15.6ns on my MacBook Pro 2.7GHz). - -The benchmark for time.Now() lies here: - -https://github.com/xtaci/notes/blob/master/golang/benchmark2/syscall_test.go - -``` -BenchmarkNow-4 100000000 15.6 ns/op -``` - -In kcp-go, after each `kcp.output()` function call, current clock time will be updated upon return, and for a single `kcp.flush()` operation, current time will be queried from system once. For most of the time, 5000 connections costs 5000 * 15.6ns = 78us(a fixed cost while no packet needs to be sent), as for 10MB/s data transfering with 1400 MTU, `kcp.output()` will be called around 7500 times and costs 117us for `time.Now()` in **every second**. - -3. Memory management - -Primary memory allocation are done from a global buffer pool xmit.Buf, in kcp-go, when we need to allocate some bytes, we can get from that pool, and a fixed-capacity 1500 bytes(mtuLimit) will be returned, the rx queue, tx queue and fec queue all receive bytes from there, and they will return the bytes to the pool after using to prevent unnecessary zer0ing of bytes. The pool mechanism maintained a high watermark for slice objects, these in-flight objects from the pool will survive from the perodical garbage collection, meanwhile the pool kept the ability to return the memory to runtime if in idle. - -4. Information security - -kcp-go is shipped with builtin packet encryption powered by various block encryption algorithms and works in [Cipher Feedback Mode](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_Feedback_(CFB)), for each packet to be sent, the encryption process will start from encrypting a [nonce](https://en.wikipedia.org/wiki/Cryptographic_nonce) from the [system entropy](https://en.wikipedia.org/wiki//dev/random), so encryption to same plaintexts never leads to a same ciphertexts thereafter. - -The contents of the packets are completely anonymous with encryption, including the headers(FEC,KCP), checksums and contents. Note that, no matter which encryption method you choose on you upper layer, if you disable encryption, the transmit will be insecure somehow, since the header is ***PLAINTEXT*** to everyone it would be susceptible to header tampering, such as jamming the *sliding window size*, *round-trip time*, *FEC property* and *checksums*. ```AES-128``` is suggested for minimal encryption since modern CPUs are shipped with [AES-NI](https://en.wikipedia.org/wiki/AES_instruction_set) instructions and performs even better than `salsa20`(check the table above). - -Other possible attacks to kcp-go includes: a) [traffic analysis](https://en.wikipedia.org/wiki/Traffic_analysis), dataflow on specific websites may have pattern while interchanging data, but this type of eavesdropping has been mitigated by adapting [smux](https://github.com/xtaci/smux) to mix data streams so as to introduce noises, perfect solution to this has not appeared yet, theroretically by shuffling/mixing messages on larger scale network may mitigate this problem. b) [replay attack](https://en.wikipedia.org/wiki/Replay_attack), since the asymmetrical encryption has not been introduced into kcp-go for some reason, capturing the packets and replay them on a different machine is possible, (notice: hijacking the session and decrypting the contents is still *impossible*), so upper layers should contain a asymmetrical encryption system to guarantee the authenticity of each message(to process message exactly once), such as HTTPS/OpenSSL/LibreSSL, only by signing the requests with private keys can eliminate this type of attack. - -## Connection Termination - -Control messages like **SYN/FIN/RST** in TCP **are not defined** in KCP, you need some **keepalive/heartbeat mechanism** in the application-level. A real world example is to use some **multiplexing** protocol over session, such as [smux](https://github.com/xtaci/smux)(with embedded keepalive mechanism), see [kcptun](https://github.com/xtaci/kcptun) for example. - -## FAQ - -Q: I'm handling >5K connections on my server, the CPU utilization is so high. - -A: A standalone `agent` or `gate` server for running kcp-go is suggested, not only for CPU utilization, but also important to the **precision** of RTT measurements(timing) which indirectly affects retransmission. By increasing update `interval` with `SetNoDelay` like `conn.SetNoDelay(1, 40, 1, 1)` will dramatically reduce system load, but lower the performance. - -Q: When should I enable FEC? - -A: Forward error correction is critical to long-distance transmission, because a packet loss will lead to a huge penalty in time. And for the complicated packet routing network in modern world, round-trip time based loss check will not always be efficient, the big deviation of RTT samples in the long way usually leads to a larger RTO value in typical rtt estimator, which in other words, slows down the transmission. - -Q: Should I enable encryption? - -A: Yes, for the safety of protocol, even if the upper layer has encrypted. - -## Who is using this? - -1. https://github.com/xtaci/kcptun -- A Secure Tunnel Based On KCP over UDP. -2. https://github.com/getlantern/lantern -- Lantern delivers fast access to the open Internet. -3. https://github.com/smallnest/rpcx -- A RPC service framework based on net/rpc like alibaba Dubbo and weibo Motan. -4. https://github.com/gonet2/agent -- A gateway for games with stream multiplexing. -5. https://github.com/syncthing/syncthing -- Open Source Continuous File Synchronization. - -## Links - -1. https://github.com/xtaci/smux/ -- A Stream Multiplexing Library for golang with least memory -1. https://github.com/xtaci/libkcp -- FEC enhanced KCP session library for iOS/Android in C++ -1. https://github.com/skywind3000/kcp -- A Fast and Reliable ARQ Protocol -1. https://github.com/klauspost/reedsolomon -- Reed-Solomon Erasure Coding in Go - -## Consulting - -WeChat(付费技术咨询) - -kcptun diff --git a/vendor/github.com/xtaci/kcp-go/batchconn.go b/vendor/github.com/xtaci/kcp-go/batchconn.go deleted file mode 100644 index 6c30701..0000000 --- a/vendor/github.com/xtaci/kcp-go/batchconn.go +++ /dev/null @@ -1,12 +0,0 @@ -package kcp - -import "golang.org/x/net/ipv4" - -const ( - batchSize = 16 -) - -type batchConn interface { - WriteBatch(ms []ipv4.Message, flags int) (int, error) - ReadBatch(ms []ipv4.Message, flags int) (int, error) -} diff --git a/vendor/github.com/xtaci/kcp-go/crypt.go b/vendor/github.com/xtaci/kcp-go/crypt.go deleted file mode 100644 index 958fdea..0000000 --- a/vendor/github.com/xtaci/kcp-go/crypt.go +++ /dev/null @@ -1,785 +0,0 @@ -package kcp - -import ( - "crypto/aes" - "crypto/cipher" - "crypto/des" - "crypto/sha1" - - "github.com/templexxx/xor" - "github.com/tjfoc/gmsm/sm4" - - "golang.org/x/crypto/blowfish" - "golang.org/x/crypto/cast5" - "golang.org/x/crypto/pbkdf2" - "golang.org/x/crypto/salsa20" - "golang.org/x/crypto/tea" - "golang.org/x/crypto/twofish" - "golang.org/x/crypto/xtea" -) - -var ( - initialVector = []byte{167, 115, 79, 156, 18, 172, 27, 1, 164, 21, 242, 193, 252, 120, 230, 107} - saltxor = `sH3CIVoF#rWLtJo6` -) - -// BlockCrypt defines encryption/decryption methods for a given byte slice. -// Notes on implementing: the data to be encrypted contains a builtin -// nonce at the first 16 bytes -type BlockCrypt interface { - // Encrypt encrypts the whole block in src into dst. - // Dst and src may point at the same memory. - Encrypt(dst, src []byte) - - // Decrypt decrypts the whole block in src into dst. - // Dst and src may point at the same memory. - Decrypt(dst, src []byte) -} - -type salsa20BlockCrypt struct { - key [32]byte -} - -// NewSalsa20BlockCrypt https://en.wikipedia.org/wiki/Salsa20 -func NewSalsa20BlockCrypt(key []byte) (BlockCrypt, error) { - c := new(salsa20BlockCrypt) - copy(c.key[:], key) - return c, nil -} - -func (c *salsa20BlockCrypt) Encrypt(dst, src []byte) { - salsa20.XORKeyStream(dst[8:], src[8:], src[:8], &c.key) - copy(dst[:8], src[:8]) -} -func (c *salsa20BlockCrypt) Decrypt(dst, src []byte) { - salsa20.XORKeyStream(dst[8:], src[8:], src[:8], &c.key) - copy(dst[:8], src[:8]) -} - -type sm4BlockCrypt struct { - encbuf [sm4.BlockSize]byte - decbuf [2 * sm4.BlockSize]byte - block cipher.Block -} - -// NewSM4BlockCrypt https://github.com/tjfoc/gmsm/tree/master/sm4 -func NewSM4BlockCrypt(key []byte) (BlockCrypt, error) { - c := new(sm4BlockCrypt) - block, err := sm4.NewCipher(key) - if err != nil { - return nil, err - } - c.block = block - return c, nil -} - -func (c *sm4BlockCrypt) Encrypt(dst, src []byte) { encrypt(c.block, dst, src, c.encbuf[:]) } -func (c *sm4BlockCrypt) Decrypt(dst, src []byte) { decrypt(c.block, dst, src, c.decbuf[:]) } - -type twofishBlockCrypt struct { - encbuf [twofish.BlockSize]byte - decbuf [2 * twofish.BlockSize]byte - block cipher.Block -} - -// NewTwofishBlockCrypt https://en.wikipedia.org/wiki/Twofish -func NewTwofishBlockCrypt(key []byte) (BlockCrypt, error) { - c := new(twofishBlockCrypt) - block, err := twofish.NewCipher(key) - if err != nil { - return nil, err - } - c.block = block - return c, nil -} - -func (c *twofishBlockCrypt) Encrypt(dst, src []byte) { encrypt(c.block, dst, src, c.encbuf[:]) } -func (c *twofishBlockCrypt) Decrypt(dst, src []byte) { decrypt(c.block, dst, src, c.decbuf[:]) } - -type tripleDESBlockCrypt struct { - encbuf [des.BlockSize]byte - decbuf [2 * des.BlockSize]byte - block cipher.Block -} - -// NewTripleDESBlockCrypt https://en.wikipedia.org/wiki/Triple_DES -func NewTripleDESBlockCrypt(key []byte) (BlockCrypt, error) { - c := new(tripleDESBlockCrypt) - block, err := des.NewTripleDESCipher(key) - if err != nil { - return nil, err - } - c.block = block - return c, nil -} - -func (c *tripleDESBlockCrypt) Encrypt(dst, src []byte) { encrypt(c.block, dst, src, c.encbuf[:]) } -func (c *tripleDESBlockCrypt) Decrypt(dst, src []byte) { decrypt(c.block, dst, src, c.decbuf[:]) } - -type cast5BlockCrypt struct { - encbuf [cast5.BlockSize]byte - decbuf [2 * cast5.BlockSize]byte - block cipher.Block -} - -// NewCast5BlockCrypt https://en.wikipedia.org/wiki/CAST-128 -func NewCast5BlockCrypt(key []byte) (BlockCrypt, error) { - c := new(cast5BlockCrypt) - block, err := cast5.NewCipher(key) - if err != nil { - return nil, err - } - c.block = block - return c, nil -} - -func (c *cast5BlockCrypt) Encrypt(dst, src []byte) { encrypt(c.block, dst, src, c.encbuf[:]) } -func (c *cast5BlockCrypt) Decrypt(dst, src []byte) { decrypt(c.block, dst, src, c.decbuf[:]) } - -type blowfishBlockCrypt struct { - encbuf [blowfish.BlockSize]byte - decbuf [2 * blowfish.BlockSize]byte - block cipher.Block -} - -// NewBlowfishBlockCrypt https://en.wikipedia.org/wiki/Blowfish_(cipher) -func NewBlowfishBlockCrypt(key []byte) (BlockCrypt, error) { - c := new(blowfishBlockCrypt) - block, err := blowfish.NewCipher(key) - if err != nil { - return nil, err - } - c.block = block - return c, nil -} - -func (c *blowfishBlockCrypt) Encrypt(dst, src []byte) { encrypt(c.block, dst, src, c.encbuf[:]) } -func (c *blowfishBlockCrypt) Decrypt(dst, src []byte) { decrypt(c.block, dst, src, c.decbuf[:]) } - -type aesBlockCrypt struct { - encbuf [aes.BlockSize]byte - decbuf [2 * aes.BlockSize]byte - block cipher.Block -} - -// NewAESBlockCrypt https://en.wikipedia.org/wiki/Advanced_Encryption_Standard -func NewAESBlockCrypt(key []byte) (BlockCrypt, error) { - c := new(aesBlockCrypt) - block, err := aes.NewCipher(key) - if err != nil { - return nil, err - } - c.block = block - return c, nil -} - -func (c *aesBlockCrypt) Encrypt(dst, src []byte) { encrypt(c.block, dst, src, c.encbuf[:]) } -func (c *aesBlockCrypt) Decrypt(dst, src []byte) { decrypt(c.block, dst, src, c.decbuf[:]) } - -type teaBlockCrypt struct { - encbuf [tea.BlockSize]byte - decbuf [2 * tea.BlockSize]byte - block cipher.Block -} - -// NewTEABlockCrypt https://en.wikipedia.org/wiki/Tiny_Encryption_Algorithm -func NewTEABlockCrypt(key []byte) (BlockCrypt, error) { - c := new(teaBlockCrypt) - block, err := tea.NewCipherWithRounds(key, 16) - if err != nil { - return nil, err - } - c.block = block - return c, nil -} - -func (c *teaBlockCrypt) Encrypt(dst, src []byte) { encrypt(c.block, dst, src, c.encbuf[:]) } -func (c *teaBlockCrypt) Decrypt(dst, src []byte) { decrypt(c.block, dst, src, c.decbuf[:]) } - -type xteaBlockCrypt struct { - encbuf [xtea.BlockSize]byte - decbuf [2 * xtea.BlockSize]byte - block cipher.Block -} - -// NewXTEABlockCrypt https://en.wikipedia.org/wiki/XTEA -func NewXTEABlockCrypt(key []byte) (BlockCrypt, error) { - c := new(xteaBlockCrypt) - block, err := xtea.NewCipher(key) - if err != nil { - return nil, err - } - c.block = block - return c, nil -} - -func (c *xteaBlockCrypt) Encrypt(dst, src []byte) { encrypt(c.block, dst, src, c.encbuf[:]) } -func (c *xteaBlockCrypt) Decrypt(dst, src []byte) { decrypt(c.block, dst, src, c.decbuf[:]) } - -type simpleXORBlockCrypt struct { - xortbl []byte -} - -// NewSimpleXORBlockCrypt simple xor with key expanding -func NewSimpleXORBlockCrypt(key []byte) (BlockCrypt, error) { - c := new(simpleXORBlockCrypt) - c.xortbl = pbkdf2.Key(key, []byte(saltxor), 32, mtuLimit, sha1.New) - return c, nil -} - -func (c *simpleXORBlockCrypt) Encrypt(dst, src []byte) { xor.Bytes(dst, src, c.xortbl) } -func (c *simpleXORBlockCrypt) Decrypt(dst, src []byte) { xor.Bytes(dst, src, c.xortbl) } - -type noneBlockCrypt struct{} - -// NewNoneBlockCrypt does nothing but copying -func NewNoneBlockCrypt(key []byte) (BlockCrypt, error) { - return new(noneBlockCrypt), nil -} - -func (c *noneBlockCrypt) Encrypt(dst, src []byte) { copy(dst, src) } -func (c *noneBlockCrypt) Decrypt(dst, src []byte) { copy(dst, src) } - -// packet encryption with local CFB mode -func encrypt(block cipher.Block, dst, src, buf []byte) { - switch block.BlockSize() { - case 8: - encrypt8(block, dst, src, buf) - case 16: - encrypt16(block, dst, src, buf) - default: - encryptVariant(block, dst, src, buf) - } -} - -// optimized encryption for the ciphers which works in 8-bytes -func encrypt8(block cipher.Block, dst, src, buf []byte) { - tbl := buf[:8] - block.Encrypt(tbl, initialVector) - n := len(src) / 8 - base := 0 - repeat := n / 8 - left := n % 8 - for i := 0; i < repeat; i++ { - s := src[base:][0:64] - d := dst[base:][0:64] - // 1 - xor.BytesSrc1(d[0:8], s[0:8], tbl) - block.Encrypt(tbl, d[0:8]) - // 2 - xor.BytesSrc1(d[8:16], s[8:16], tbl) - block.Encrypt(tbl, d[8:16]) - // 3 - xor.BytesSrc1(d[16:24], s[16:24], tbl) - block.Encrypt(tbl, d[16:24]) - // 4 - xor.BytesSrc1(d[24:32], s[24:32], tbl) - block.Encrypt(tbl, d[24:32]) - // 5 - xor.BytesSrc1(d[32:40], s[32:40], tbl) - block.Encrypt(tbl, d[32:40]) - // 6 - xor.BytesSrc1(d[40:48], s[40:48], tbl) - block.Encrypt(tbl, d[40:48]) - // 7 - xor.BytesSrc1(d[48:56], s[48:56], tbl) - block.Encrypt(tbl, d[48:56]) - // 8 - xor.BytesSrc1(d[56:64], s[56:64], tbl) - block.Encrypt(tbl, d[56:64]) - base += 64 - } - - switch left { - case 7: - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += 8 - fallthrough - case 6: - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += 8 - fallthrough - case 5: - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += 8 - fallthrough - case 4: - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += 8 - fallthrough - case 3: - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += 8 - fallthrough - case 2: - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += 8 - fallthrough - case 1: - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += 8 - fallthrough - case 0: - xor.BytesSrc0(dst[base:], src[base:], tbl) - } -} - -// optimized encryption for the ciphers which works in 16-bytes -func encrypt16(block cipher.Block, dst, src, buf []byte) { - tbl := buf[:16] - block.Encrypt(tbl, initialVector) - n := len(src) / 16 - base := 0 - repeat := n / 8 - left := n % 8 - for i := 0; i < repeat; i++ { - s := src[base:][0:128] - d := dst[base:][0:128] - // 1 - xor.BytesSrc1(d[0:16], s[0:16], tbl) - block.Encrypt(tbl, d[0:16]) - // 2 - xor.BytesSrc1(d[16:32], s[16:32], tbl) - block.Encrypt(tbl, d[16:32]) - // 3 - xor.BytesSrc1(d[32:48], s[32:48], tbl) - block.Encrypt(tbl, d[32:48]) - // 4 - xor.BytesSrc1(d[48:64], s[48:64], tbl) - block.Encrypt(tbl, d[48:64]) - // 5 - xor.BytesSrc1(d[64:80], s[64:80], tbl) - block.Encrypt(tbl, d[64:80]) - // 6 - xor.BytesSrc1(d[80:96], s[80:96], tbl) - block.Encrypt(tbl, d[80:96]) - // 7 - xor.BytesSrc1(d[96:112], s[96:112], tbl) - block.Encrypt(tbl, d[96:112]) - // 8 - xor.BytesSrc1(d[112:128], s[112:128], tbl) - block.Encrypt(tbl, d[112:128]) - base += 128 - } - - switch left { - case 7: - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += 16 - fallthrough - case 6: - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += 16 - fallthrough - case 5: - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += 16 - fallthrough - case 4: - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += 16 - fallthrough - case 3: - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += 16 - fallthrough - case 2: - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += 16 - fallthrough - case 1: - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += 16 - fallthrough - case 0: - xor.BytesSrc0(dst[base:], src[base:], tbl) - } -} - -func encryptVariant(block cipher.Block, dst, src, buf []byte) { - blocksize := block.BlockSize() - tbl := buf[:blocksize] - block.Encrypt(tbl, initialVector) - n := len(src) / blocksize - base := 0 - repeat := n / 8 - left := n % 8 - for i := 0; i < repeat; i++ { - // 1 - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += blocksize - - // 2 - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += blocksize - - // 3 - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += blocksize - - // 4 - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += blocksize - - // 5 - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += blocksize - - // 6 - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += blocksize - - // 7 - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += blocksize - - // 8 - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += blocksize - } - - switch left { - case 7: - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += blocksize - fallthrough - case 6: - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += blocksize - fallthrough - case 5: - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += blocksize - fallthrough - case 4: - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += blocksize - fallthrough - case 3: - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += blocksize - fallthrough - case 2: - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += blocksize - fallthrough - case 1: - xor.BytesSrc1(dst[base:], src[base:], tbl) - block.Encrypt(tbl, dst[base:]) - base += blocksize - fallthrough - case 0: - xor.BytesSrc0(dst[base:], src[base:], tbl) - } -} - -// decryption -func decrypt(block cipher.Block, dst, src, buf []byte) { - switch block.BlockSize() { - case 8: - decrypt8(block, dst, src, buf) - case 16: - decrypt16(block, dst, src, buf) - default: - decryptVariant(block, dst, src, buf) - } -} - -func decrypt8(block cipher.Block, dst, src, buf []byte) { - tbl := buf[0:8] - next := buf[8:16] - block.Encrypt(tbl, initialVector) - n := len(src) / 8 - base := 0 - repeat := n / 8 - left := n % 8 - for i := 0; i < repeat; i++ { - s := src[base:][0:64] - d := dst[base:][0:64] - // 1 - block.Encrypt(next, s[0:8]) - xor.BytesSrc1(d[0:8], s[0:8], tbl) - // 2 - block.Encrypt(tbl, s[8:16]) - xor.BytesSrc1(d[8:16], s[8:16], next) - // 3 - block.Encrypt(next, s[16:24]) - xor.BytesSrc1(d[16:24], s[16:24], tbl) - // 4 - block.Encrypt(tbl, s[24:32]) - xor.BytesSrc1(d[24:32], s[24:32], next) - // 5 - block.Encrypt(next, s[32:40]) - xor.BytesSrc1(d[32:40], s[32:40], tbl) - // 6 - block.Encrypt(tbl, s[40:48]) - xor.BytesSrc1(d[40:48], s[40:48], next) - // 7 - block.Encrypt(next, s[48:56]) - xor.BytesSrc1(d[48:56], s[48:56], tbl) - // 8 - block.Encrypt(tbl, s[56:64]) - xor.BytesSrc1(d[56:64], s[56:64], next) - base += 64 - } - - switch left { - case 7: - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - tbl, next = next, tbl - base += 8 - fallthrough - case 6: - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - tbl, next = next, tbl - base += 8 - fallthrough - case 5: - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - tbl, next = next, tbl - base += 8 - fallthrough - case 4: - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - tbl, next = next, tbl - base += 8 - fallthrough - case 3: - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - tbl, next = next, tbl - base += 8 - fallthrough - case 2: - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - tbl, next = next, tbl - base += 8 - fallthrough - case 1: - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - tbl, next = next, tbl - base += 8 - fallthrough - case 0: - xor.BytesSrc0(dst[base:], src[base:], tbl) - } -} - -func decrypt16(block cipher.Block, dst, src, buf []byte) { - tbl := buf[0:16] - next := buf[16:32] - block.Encrypt(tbl, initialVector) - n := len(src) / 16 - base := 0 - repeat := n / 8 - left := n % 8 - for i := 0; i < repeat; i++ { - s := src[base:][0:128] - d := dst[base:][0:128] - // 1 - block.Encrypt(next, s[0:16]) - xor.BytesSrc1(d[0:16], s[0:16], tbl) - // 2 - block.Encrypt(tbl, s[16:32]) - xor.BytesSrc1(d[16:32], s[16:32], next) - // 3 - block.Encrypt(next, s[32:48]) - xor.BytesSrc1(d[32:48], s[32:48], tbl) - // 4 - block.Encrypt(tbl, s[48:64]) - xor.BytesSrc1(d[48:64], s[48:64], next) - // 5 - block.Encrypt(next, s[64:80]) - xor.BytesSrc1(d[64:80], s[64:80], tbl) - // 6 - block.Encrypt(tbl, s[80:96]) - xor.BytesSrc1(d[80:96], s[80:96], next) - // 7 - block.Encrypt(next, s[96:112]) - xor.BytesSrc1(d[96:112], s[96:112], tbl) - // 8 - block.Encrypt(tbl, s[112:128]) - xor.BytesSrc1(d[112:128], s[112:128], next) - base += 128 - } - - switch left { - case 7: - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - tbl, next = next, tbl - base += 16 - fallthrough - case 6: - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - tbl, next = next, tbl - base += 16 - fallthrough - case 5: - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - tbl, next = next, tbl - base += 16 - fallthrough - case 4: - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - tbl, next = next, tbl - base += 16 - fallthrough - case 3: - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - tbl, next = next, tbl - base += 16 - fallthrough - case 2: - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - tbl, next = next, tbl - base += 16 - fallthrough - case 1: - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - tbl, next = next, tbl - base += 16 - fallthrough - case 0: - xor.BytesSrc0(dst[base:], src[base:], tbl) - } -} - -func decryptVariant(block cipher.Block, dst, src, buf []byte) { - blocksize := block.BlockSize() - tbl := buf[:blocksize] - next := buf[blocksize:] - block.Encrypt(tbl, initialVector) - n := len(src) / blocksize - base := 0 - repeat := n / 8 - left := n % 8 - for i := 0; i < repeat; i++ { - // 1 - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - base += blocksize - - // 2 - block.Encrypt(tbl, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], next) - base += blocksize - - // 3 - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - base += blocksize - - // 4 - block.Encrypt(tbl, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], next) - base += blocksize - - // 5 - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - base += blocksize - - // 6 - block.Encrypt(tbl, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], next) - base += blocksize - - // 7 - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - base += blocksize - - // 8 - block.Encrypt(tbl, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], next) - base += blocksize - } - - switch left { - case 7: - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - tbl, next = next, tbl - base += blocksize - fallthrough - case 6: - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - tbl, next = next, tbl - base += blocksize - fallthrough - case 5: - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - tbl, next = next, tbl - base += blocksize - fallthrough - case 4: - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - tbl, next = next, tbl - base += blocksize - fallthrough - case 3: - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - tbl, next = next, tbl - base += blocksize - fallthrough - case 2: - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - tbl, next = next, tbl - base += blocksize - fallthrough - case 1: - block.Encrypt(next, src[base:]) - xor.BytesSrc1(dst[base:], src[base:], tbl) - tbl, next = next, tbl - base += blocksize - fallthrough - case 0: - xor.BytesSrc0(dst[base:], src[base:], tbl) - } -} diff --git a/vendor/github.com/xtaci/kcp-go/donate.png b/vendor/github.com/xtaci/kcp-go/donate.png deleted file mode 100644 index 0f353d96e902936aed15a7312a6e8b4b332fe960..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4420 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 diff --git a/vendor/github.com/xtaci/kcp-go/entropy.go b/vendor/github.com/xtaci/kcp-go/entropy.go deleted file mode 100644 index 156c1cd..0000000 --- a/vendor/github.com/xtaci/kcp-go/entropy.go +++ /dev/null @@ -1,52 +0,0 @@ -package kcp - -import ( - "crypto/aes" - "crypto/cipher" - "crypto/md5" - "crypto/rand" - "io" -) - -// Entropy defines a entropy source -type Entropy interface { - Init() - Fill(nonce []byte) -} - -// nonceMD5 nonce generator for packet header -type nonceMD5 struct { - seed [md5.Size]byte -} - -func (n *nonceMD5) Init() { /*nothing required*/ } - -func (n *nonceMD5) Fill(nonce []byte) { - if n.seed[0] == 0 { // entropy update - io.ReadFull(rand.Reader, n.seed[:]) - } - n.seed = md5.Sum(n.seed[:]) - copy(nonce, n.seed[:]) -} - -// nonceAES128 nonce generator for packet headers -type nonceAES128 struct { - seed [aes.BlockSize]byte - block cipher.Block -} - -func (n *nonceAES128) Init() { - var key [16]byte //aes-128 - io.ReadFull(rand.Reader, key[:]) - io.ReadFull(rand.Reader, n.seed[:]) - block, _ := aes.NewCipher(key[:]) - n.block = block -} - -func (n *nonceAES128) Fill(nonce []byte) { - if n.seed[0] == 0 { // entropy update - io.ReadFull(rand.Reader, n.seed[:]) - } - n.block.Encrypt(n.seed[:], n.seed[:]) - copy(nonce, n.seed[:]) -} diff --git a/vendor/github.com/xtaci/kcp-go/fec.go b/vendor/github.com/xtaci/kcp-go/fec.go deleted file mode 100644 index 97cd40b..0000000 --- a/vendor/github.com/xtaci/kcp-go/fec.go +++ /dev/null @@ -1,337 +0,0 @@ -package kcp - -import ( - "encoding/binary" - "sync/atomic" - - "github.com/klauspost/reedsolomon" -) - -const ( - fecHeaderSize = 6 - fecHeaderSizePlus2 = fecHeaderSize + 2 // plus 2B data size - typeData = 0xf1 - typeParity = 0xf2 - fecExpire = 60000 -) - -// fecPacket is a decoded FEC packet -type fecPacket []byte - -func (bts fecPacket) seqid() uint32 { return binary.LittleEndian.Uint32(bts) } -func (bts fecPacket) flag() uint16 { return binary.LittleEndian.Uint16(bts[4:]) } -func (bts fecPacket) data() []byte { return bts[6:] } - -// fecElement has auxcilliary time field -type fecElement struct { - fecPacket - ts uint32 -} - -// fecDecoder for decoding incoming packets -type fecDecoder struct { - rxlimit int // queue size limit - dataShards int - parityShards int - shardSize int - rx []fecElement // ordered receive queue - - // caches - decodeCache [][]byte - flagCache []bool - - // zeros - zeros []byte - - // RS decoder - codec reedsolomon.Encoder -} - -func newFECDecoder(rxlimit, dataShards, parityShards int) *fecDecoder { - if dataShards <= 0 || parityShards <= 0 { - return nil - } - if rxlimit < dataShards+parityShards { - return nil - } - - dec := new(fecDecoder) - dec.rxlimit = rxlimit - dec.dataShards = dataShards - dec.parityShards = parityShards - dec.shardSize = dataShards + parityShards - codec, err := reedsolomon.New(dataShards, parityShards) - if err != nil { - return nil - } - dec.codec = codec - dec.decodeCache = make([][]byte, dec.shardSize) - dec.flagCache = make([]bool, dec.shardSize) - dec.zeros = make([]byte, mtuLimit) - return dec -} - -// decode a fec packet -func (dec *fecDecoder) decode(in fecPacket) (recovered [][]byte) { - // insertion - n := len(dec.rx) - 1 - insertIdx := 0 - for i := n; i >= 0; i-- { - if in.seqid() == dec.rx[i].seqid() { // de-duplicate - return nil - } else if _itimediff(in.seqid(), dec.rx[i].seqid()) > 0 { // insertion - insertIdx = i + 1 - break - } - } - - // make a copy - pkt := fecPacket(xmitBuf.Get().([]byte)[:len(in)]) - copy(pkt, in) - elem := fecElement{pkt, currentMs()} - - // insert into ordered rx queue - if insertIdx == n+1 { - dec.rx = append(dec.rx, elem) - } else { - dec.rx = append(dec.rx, fecElement{}) - copy(dec.rx[insertIdx+1:], dec.rx[insertIdx:]) // shift right - dec.rx[insertIdx] = elem - } - - // shard range for current packet - shardBegin := pkt.seqid() - pkt.seqid()%uint32(dec.shardSize) - shardEnd := shardBegin + uint32(dec.shardSize) - 1 - - // max search range in ordered queue for current shard - searchBegin := insertIdx - int(pkt.seqid()%uint32(dec.shardSize)) - if searchBegin < 0 { - searchBegin = 0 - } - searchEnd := searchBegin + dec.shardSize - 1 - if searchEnd >= len(dec.rx) { - searchEnd = len(dec.rx) - 1 - } - - // re-construct datashards - if searchEnd-searchBegin+1 >= dec.dataShards { - var numshard, numDataShard, first, maxlen int - - // zero caches - shards := dec.decodeCache - shardsflag := dec.flagCache - for k := range dec.decodeCache { - shards[k] = nil - shardsflag[k] = false - } - - // shard assembly - for i := searchBegin; i <= searchEnd; i++ { - seqid := dec.rx[i].seqid() - if _itimediff(seqid, shardEnd) > 0 { - break - } else if _itimediff(seqid, shardBegin) >= 0 { - shards[seqid%uint32(dec.shardSize)] = dec.rx[i].data() - shardsflag[seqid%uint32(dec.shardSize)] = true - numshard++ - if dec.rx[i].flag() == typeData { - numDataShard++ - } - if numshard == 1 { - first = i - } - if len(dec.rx[i].data()) > maxlen { - maxlen = len(dec.rx[i].data()) - } - } - } - - if numDataShard == dec.dataShards { - // case 1: no loss on data shards - dec.rx = dec.freeRange(first, numshard, dec.rx) - } else if numshard >= dec.dataShards { - // case 2: loss on data shards, but it's recoverable from parity shards - for k := range shards { - if shards[k] != nil { - dlen := len(shards[k]) - shards[k] = shards[k][:maxlen] - copy(shards[k][dlen:], dec.zeros) - } else if k < dec.dataShards { - shards[k] = xmitBuf.Get().([]byte)[:0] - } - } - if err := dec.codec.ReconstructData(shards); err == nil { - for k := range shards[:dec.dataShards] { - if !shardsflag[k] { - // recovered data should be recycled - recovered = append(recovered, shards[k]) - } - } - } - dec.rx = dec.freeRange(first, numshard, dec.rx) - } - } - - // keep rxlimit - if len(dec.rx) > dec.rxlimit { - if dec.rx[0].flag() == typeData { // track the unrecoverable data - atomic.AddUint64(&DefaultSnmp.FECShortShards, 1) - } - dec.rx = dec.freeRange(0, 1, dec.rx) - } - - // timeout policy - current := currentMs() - numExpired := 0 - for k := range dec.rx { - if _itimediff(current, dec.rx[k].ts) > fecExpire { - numExpired++ - continue - } - break - } - if numExpired > 0 { - dec.rx = dec.freeRange(0, numExpired, dec.rx) - } - return -} - -// free a range of fecPacket -func (dec *fecDecoder) freeRange(first, n int, q []fecElement) []fecElement { - for i := first; i < first+n; i++ { // recycle buffer - xmitBuf.Put([]byte(q[i].fecPacket)) - } - - if first == 0 && n < cap(q)/2 { - return q[n:] - } - copy(q[first:], q[first+n:]) - return q[:len(q)-n] -} - -// release all segments back to xmitBuf -func (dec *fecDecoder) release() { - if n := len(dec.rx); n > 0 { - dec.rx = dec.freeRange(0, n, dec.rx) - } -} - -type ( - // fecEncoder for encoding outgoing packets - fecEncoder struct { - dataShards int - parityShards int - shardSize int - paws uint32 // Protect Against Wrapped Sequence numbers - next uint32 // next seqid - - shardCount int // count the number of datashards collected - maxSize int // track maximum data length in datashard - - headerOffset int // FEC header offset - payloadOffset int // FEC payload offset - - // caches - shardCache [][]byte - encodeCache [][]byte - - // zeros - zeros []byte - - // RS encoder - codec reedsolomon.Encoder - } -) - -func newFECEncoder(dataShards, parityShards, offset int) *fecEncoder { - if dataShards <= 0 || parityShards <= 0 { - return nil - } - enc := new(fecEncoder) - enc.dataShards = dataShards - enc.parityShards = parityShards - enc.shardSize = dataShards + parityShards - enc.paws = 0xffffffff / uint32(enc.shardSize) * uint32(enc.shardSize) - enc.headerOffset = offset - enc.payloadOffset = enc.headerOffset + fecHeaderSize - - codec, err := reedsolomon.New(dataShards, parityShards) - if err != nil { - return nil - } - enc.codec = codec - - // caches - enc.encodeCache = make([][]byte, enc.shardSize) - enc.shardCache = make([][]byte, enc.shardSize) - for k := range enc.shardCache { - enc.shardCache[k] = make([]byte, mtuLimit) - } - enc.zeros = make([]byte, mtuLimit) - return enc -} - -// encodes the packet, outputs parity shards if we have collected quorum datashards -// notice: the contents of 'ps' will be re-written in successive calling -func (enc *fecEncoder) encode(b []byte) (ps [][]byte) { - // The header format: - // | FEC SEQID(4B) | FEC TYPE(2B) | SIZE (2B) | PAYLOAD(SIZE-2) | - // |<-headerOffset |<-payloadOffset - enc.markData(b[enc.headerOffset:]) - binary.LittleEndian.PutUint16(b[enc.payloadOffset:], uint16(len(b[enc.payloadOffset:]))) - - // copy data from payloadOffset to fec shard cache - sz := len(b) - enc.shardCache[enc.shardCount] = enc.shardCache[enc.shardCount][:sz] - copy(enc.shardCache[enc.shardCount][enc.payloadOffset:], b[enc.payloadOffset:]) - enc.shardCount++ - - // track max datashard length - if sz > enc.maxSize { - enc.maxSize = sz - } - - // Generation of Reed-Solomon Erasure Code - if enc.shardCount == enc.dataShards { - // fill '0' into the tail of each datashard - for i := 0; i < enc.dataShards; i++ { - shard := enc.shardCache[i] - slen := len(shard) - copy(shard[slen:enc.maxSize], enc.zeros) - } - - // construct equal-sized slice with stripped header - cache := enc.encodeCache - for k := range cache { - cache[k] = enc.shardCache[k][enc.payloadOffset:enc.maxSize] - } - - // encoding - if err := enc.codec.Encode(cache); err == nil { - ps = enc.shardCache[enc.dataShards:] - for k := range ps { - enc.markParity(ps[k][enc.headerOffset:]) - ps[k] = ps[k][:enc.maxSize] - } - } - - // counters resetting - enc.shardCount = 0 - enc.maxSize = 0 - } - - return -} - -func (enc *fecEncoder) markData(data []byte) { - binary.LittleEndian.PutUint32(data, enc.next) - binary.LittleEndian.PutUint16(data[4:], typeData) - enc.next++ -} - -func (enc *fecEncoder) markParity(data []byte) { - binary.LittleEndian.PutUint32(data, enc.next) - binary.LittleEndian.PutUint16(data[4:], typeParity) - // sequence wrap will only happen at parity shard - enc.next = (enc.next + 1) % enc.paws -} diff --git a/vendor/github.com/xtaci/kcp-go/flame.png b/vendor/github.com/xtaci/kcp-go/flame.png deleted file mode 100644 index 672f649ef9c72635be58e330cc901a8937db0fa8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57142 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 diff --git a/vendor/github.com/xtaci/kcp-go/kcp-go.png b/vendor/github.com/xtaci/kcp-go/kcp-go.png deleted file mode 100644 index 151b7c4f7c49c1a8382552322787a3e7f04ac3c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9153 zcmdUzMOPe5(?HR|H88ll1b5fq65QP-xZB|F?m>dP1P=oQx4~UQa0~9dJiG5Ne2ebe zrx#VVsB^0OMyo2zpdk|?LqS2I$;nEoeQ@MsnIQr`cHFHzAQTiTj;*Ams+^=GxvHy^ zm92v%6qIaqx;BE2`Y5nKUkwrIGbS`ckyokqks)RhI*$Z4c^VXw_+SDHW4q^9XrfM- z;%z-BT_#UUtcE27N=Bv=GiVe>CpEF9rC(mZoX%hP-KMhNCxpE?U_r%bOuW1(nlR+K zg{)D?SC+KYwCr*lAef2xsmCQ}LpkJ2NH^6HjZ zS=_Ki~j=B@q`W;!B2A}>R%92w1dBq zzek*7$m!&PWS_UK!y`v`YZMP6;&w<3OvP@plo(mr;LLPv4`=#svb-5oZv3HHS%}Tx zqXfgUXNowshQp5ncg%TUzNTe0Q~bVAgAe|yMx-dL&zFH`HEAWcAJPi)IVc~7QwV5; zt7D^Zh=YwhAtV0_a%q3jA>c*T%5+MbXyfB$QnN}t+qQz2mRlkaq-KsHy*?X@gr_w` zIF$p~%a=OT?X16y;4|!}5%GGzuPT87pe;KEZE?YDdGjqmR}U=`W5 zU1uJsIM}Eg4J{R9#>Spx!!s3%rfc0t3)LM|f)Xx_XGOQ)Pd2`zFVxQ|LAQgn11!pQ z#`qmvok51dxznmSw4d*dt2y1joKxk27XPT&AC{Bas`T0b7958SH7Lbxju)iYyiq*|sq zW%h&@4CaQW^(3?(T5U)*6EZ?lp-E@s(N7E0r;QsRYHqA-K5Bb>8CYjtdD*?i-gi6L zj}-;<=B@j{80qXww$YgHJ)rVVO=98T)$+Xs0dNnAMTot~Xy0K`K@1ba=zP##+h{Og z98734G0H4>Z6Oj1$tgE5Oal&1s9FQM1K_U--7>5lSlk((EBMnkb30;PFuF5}5XfT& z!6-zW4fP8q90dheSb`0CXB3uM@G=EU6dg7wjN+>-WlCHrg}+o7vsebjj}bsA@k;zW zWiRD$a`Omo>8Fm!8}io?qPe5=viAeyvoFzU}lv?nzdxuQ8^2djwpjKn<^sG=aiy!i6ac71fw0J(jzW=`=hn# zYfMX&UWRol-@=L&*^9hY&FBfzex%i=`HsPlNsj6J`1l0)Xg}Is2|dzW>HozTHO{z5 zewWoO%29u<;H;oLCbZ+eMZG1x{T%;=v&?5M#pbbvyG3u6f7N^y0lqV&RU!&T#<~?6hhp3bc<_z3&_K7D+a`3niXseXn3r7lcIR0J!e%7nV z=+H`A^sg1xbJUYu6<8Ht?O0uFnYP6^WOMKK;BeMilF7MArips}??7dsQ0y5nKLbudTj7^w`d<>Js`Nz7V9k8ZMD78BiO!ME(WeFK z0XezUMU_sjqw4q)rHo0VT!f#DKh+ rPWxmb2Fy&lpd?t7ZrM6=*p4DcCmHBREt%LHs&& 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 diff --git a/vendor/github.com/xtaci/kcp-go/kcp.go b/vendor/github.com/xtaci/kcp-go/kcp.go deleted file mode 100644 index 342e69a..0000000 --- a/vendor/github.com/xtaci/kcp-go/kcp.go +++ /dev/null @@ -1,1070 +0,0 @@ -package kcp - -import ( - "encoding/binary" - "sync/atomic" - "time" -) - -const ( - IKCP_RTO_NDL = 30 // no delay min rto - IKCP_RTO_MIN = 100 // normal min rto - IKCP_RTO_DEF = 200 - IKCP_RTO_MAX = 60000 - IKCP_CMD_PUSH = 81 // cmd: push data - IKCP_CMD_ACK = 82 // cmd: ack - IKCP_CMD_WASK = 83 // cmd: window probe (ask) - IKCP_CMD_WINS = 84 // cmd: window size (tell) - IKCP_ASK_SEND = 1 // need to send IKCP_CMD_WASK - IKCP_ASK_TELL = 2 // need to send IKCP_CMD_WINS - IKCP_WND_SND = 32 - IKCP_WND_RCV = 32 - IKCP_MTU_DEF = 1400 - IKCP_ACK_FAST = 3 - IKCP_INTERVAL = 100 - IKCP_OVERHEAD = 24 - IKCP_DEADLINK = 20 - IKCP_THRESH_INIT = 2 - IKCP_THRESH_MIN = 2 - IKCP_PROBE_INIT = 7000 // 7 secs to probe window size - IKCP_PROBE_LIMIT = 120000 // up to 120 secs to probe window - IKCP_SN_OFFSET = 12 -) - -// monotonic reference time point -var refTime time.Time = time.Now() - -// currentMs returns current elasped monotonic milliseconds since program startup -func currentMs() uint32 { return uint32(time.Now().Sub(refTime) / time.Millisecond) } - -// output_callback is a prototype which ought capture conn and call conn.Write -type output_callback func(buf []byte, size int) - -/* encode 8 bits unsigned int */ -func ikcp_encode8u(p []byte, c byte) []byte { - p[0] = c - return p[1:] -} - -/* decode 8 bits unsigned int */ -func ikcp_decode8u(p []byte, c *byte) []byte { - *c = p[0] - return p[1:] -} - -/* encode 16 bits unsigned int (lsb) */ -func ikcp_encode16u(p []byte, w uint16) []byte { - binary.LittleEndian.PutUint16(p, w) - return p[2:] -} - -/* decode 16 bits unsigned int (lsb) */ -func ikcp_decode16u(p []byte, w *uint16) []byte { - *w = binary.LittleEndian.Uint16(p) - return p[2:] -} - -/* encode 32 bits unsigned int (lsb) */ -func ikcp_encode32u(p []byte, l uint32) []byte { - binary.LittleEndian.PutUint32(p, l) - return p[4:] -} - -/* decode 32 bits unsigned int (lsb) */ -func ikcp_decode32u(p []byte, l *uint32) []byte { - *l = binary.LittleEndian.Uint32(p) - return p[4:] -} - -func _imin_(a, b uint32) uint32 { - if a <= b { - return a - } - return b -} - -func _imax_(a, b uint32) uint32 { - if a >= b { - return a - } - return b -} - -func _ibound_(lower, middle, upper uint32) uint32 { - return _imin_(_imax_(lower, middle), upper) -} - -func _itimediff(later, earlier uint32) int32 { - return (int32)(later - earlier) -} - -// segment defines a KCP segment -type segment struct { - conv uint32 - cmd uint8 - frg uint8 - wnd uint16 - ts uint32 - sn uint32 - una uint32 - rto uint32 - xmit uint32 - resendts uint32 - fastack uint32 - acked uint32 // mark if the seg has acked - data []byte -} - -// encode a segment into buffer -func (seg *segment) encode(ptr []byte) []byte { - ptr = ikcp_encode32u(ptr, seg.conv) - ptr = ikcp_encode8u(ptr, seg.cmd) - ptr = ikcp_encode8u(ptr, seg.frg) - ptr = ikcp_encode16u(ptr, seg.wnd) - ptr = ikcp_encode32u(ptr, seg.ts) - ptr = ikcp_encode32u(ptr, seg.sn) - ptr = ikcp_encode32u(ptr, seg.una) - ptr = ikcp_encode32u(ptr, uint32(len(seg.data))) - atomic.AddUint64(&DefaultSnmp.OutSegs, 1) - return ptr -} - -// KCP defines a single KCP connection -type KCP struct { - conv, mtu, mss, state uint32 - snd_una, snd_nxt, rcv_nxt uint32 - ssthresh uint32 - rx_rttvar, rx_srtt int32 - rx_rto, rx_minrto uint32 - snd_wnd, rcv_wnd, rmt_wnd, cwnd, probe uint32 - interval, ts_flush uint32 - nodelay, updated uint32 - ts_probe, probe_wait uint32 - dead_link, incr uint32 - - fastresend int32 - nocwnd, stream int32 - - snd_queue []segment - rcv_queue []segment - snd_buf []segment - rcv_buf []segment - - acklist []ackItem - - buffer []byte - reserved int - output output_callback -} - -type ackItem struct { - sn uint32 - ts uint32 -} - -// NewKCP create a new kcp state machine -// -// 'conv' must be equal in the connection peers, or else data will be silently rejected. -// -// 'output' function will be called whenever these is data to be sent on wire. -func NewKCP(conv uint32, output output_callback) *KCP { - kcp := new(KCP) - kcp.conv = conv - kcp.snd_wnd = IKCP_WND_SND - kcp.rcv_wnd = IKCP_WND_RCV - kcp.rmt_wnd = IKCP_WND_RCV - kcp.mtu = IKCP_MTU_DEF - kcp.mss = kcp.mtu - IKCP_OVERHEAD - kcp.buffer = make([]byte, kcp.mtu) - kcp.rx_rto = IKCP_RTO_DEF - kcp.rx_minrto = IKCP_RTO_MIN - kcp.interval = IKCP_INTERVAL - kcp.ts_flush = IKCP_INTERVAL - kcp.ssthresh = IKCP_THRESH_INIT - kcp.dead_link = IKCP_DEADLINK - kcp.output = output - return kcp -} - -// newSegment creates a KCP segment -func (kcp *KCP) newSegment(size int) (seg segment) { - seg.data = xmitBuf.Get().([]byte)[:size] - return -} - -// delSegment recycles a KCP segment -func (kcp *KCP) delSegment(seg *segment) { - if seg.data != nil { - xmitBuf.Put(seg.data) - seg.data = nil - } -} - -// ReserveBytes keeps n bytes untouched from the beginning of the buffer, -// the output_callback function should be aware of this. -// -// Return false if n >= mss -func (kcp *KCP) ReserveBytes(n int) bool { - if n >= int(kcp.mtu-IKCP_OVERHEAD) || n < 0 { - return false - } - kcp.reserved = n - kcp.mss = kcp.mtu - IKCP_OVERHEAD - uint32(n) - return true -} - -// PeekSize checks the size of next message in the recv queue -func (kcp *KCP) PeekSize() (length int) { - if len(kcp.rcv_queue) == 0 { - return -1 - } - - seg := &kcp.rcv_queue[0] - if seg.frg == 0 { - return len(seg.data) - } - - if len(kcp.rcv_queue) < int(seg.frg+1) { - return -1 - } - - for k := range kcp.rcv_queue { - seg := &kcp.rcv_queue[k] - length += len(seg.data) - if seg.frg == 0 { - break - } - } - return -} - -// Receive data from kcp state machine -// -// Return number of bytes read. -// -// Return -1 when there is no readable data. -// -// Return -2 if len(buffer) is smaller than kcp.PeekSize(). -func (kcp *KCP) Recv(buffer []byte) (n int) { - peeksize := kcp.PeekSize() - if peeksize < 0 { - return -1 - } - - if peeksize > len(buffer) { - return -2 - } - - var fast_recover bool - if len(kcp.rcv_queue) >= int(kcp.rcv_wnd) { - fast_recover = true - } - - // merge fragment - count := 0 - for k := range kcp.rcv_queue { - seg := &kcp.rcv_queue[k] - copy(buffer, seg.data) - buffer = buffer[len(seg.data):] - n += len(seg.data) - count++ - kcp.delSegment(seg) - if seg.frg == 0 { - break - } - } - if count > 0 { - kcp.rcv_queue = kcp.remove_front(kcp.rcv_queue, count) - } - - // move available data from rcv_buf -> rcv_queue - count = 0 - for k := range kcp.rcv_buf { - seg := &kcp.rcv_buf[k] - if seg.sn == kcp.rcv_nxt && len(kcp.rcv_queue)+count < int(kcp.rcv_wnd) { - kcp.rcv_nxt++ - count++ - } else { - break - } - } - - if count > 0 { - kcp.rcv_queue = append(kcp.rcv_queue, kcp.rcv_buf[:count]...) - kcp.rcv_buf = kcp.remove_front(kcp.rcv_buf, count) - } - - // fast recover - if len(kcp.rcv_queue) < int(kcp.rcv_wnd) && fast_recover { - // ready to send back IKCP_CMD_WINS in ikcp_flush - // tell remote my window size - kcp.probe |= IKCP_ASK_TELL - } - return -} - -// Send is user/upper level send, returns below zero for error -func (kcp *KCP) Send(buffer []byte) int { - var count int - if len(buffer) == 0 { - return -1 - } - - // append to previous segment in streaming mode (if possible) - if kcp.stream != 0 { - n := len(kcp.snd_queue) - if n > 0 { - seg := &kcp.snd_queue[n-1] - if len(seg.data) < int(kcp.mss) { - capacity := int(kcp.mss) - len(seg.data) - extend := capacity - if len(buffer) < capacity { - extend = len(buffer) - } - - // grow slice, the underlying cap is guaranteed to - // be larger than kcp.mss - oldlen := len(seg.data) - seg.data = seg.data[:oldlen+extend] - copy(seg.data[oldlen:], buffer) - buffer = buffer[extend:] - } - } - - if len(buffer) == 0 { - return 0 - } - } - - if len(buffer) <= int(kcp.mss) { - count = 1 - } else { - count = (len(buffer) + int(kcp.mss) - 1) / int(kcp.mss) - } - - if count > 255 { - return -2 - } - - if count == 0 { - count = 1 - } - - for i := 0; i < count; i++ { - var size int - if len(buffer) > int(kcp.mss) { - size = int(kcp.mss) - } else { - size = len(buffer) - } - seg := kcp.newSegment(size) - copy(seg.data, buffer[:size]) - if kcp.stream == 0 { // message mode - seg.frg = uint8(count - i - 1) - } else { // stream mode - seg.frg = 0 - } - kcp.snd_queue = append(kcp.snd_queue, seg) - buffer = buffer[size:] - } - return 0 -} - -func (kcp *KCP) update_ack(rtt int32) { - // https://tools.ietf.org/html/rfc6298 - var rto uint32 - if kcp.rx_srtt == 0 { - kcp.rx_srtt = rtt - kcp.rx_rttvar = rtt >> 1 - } else { - delta := rtt - kcp.rx_srtt - kcp.rx_srtt += delta >> 3 - if delta < 0 { - delta = -delta - } - if rtt < kcp.rx_srtt-kcp.rx_rttvar { - // if the new RTT sample is below the bottom of the range of - // what an RTT measurement is expected to be. - // give an 8x reduced weight versus its normal weighting - kcp.rx_rttvar += (delta - kcp.rx_rttvar) >> 5 - } else { - kcp.rx_rttvar += (delta - kcp.rx_rttvar) >> 2 - } - } - rto = uint32(kcp.rx_srtt) + _imax_(kcp.interval, uint32(kcp.rx_rttvar)<<2) - kcp.rx_rto = _ibound_(kcp.rx_minrto, rto, IKCP_RTO_MAX) -} - -func (kcp *KCP) shrink_buf() { - if len(kcp.snd_buf) > 0 { - seg := &kcp.snd_buf[0] - kcp.snd_una = seg.sn - } else { - kcp.snd_una = kcp.snd_nxt - } -} - -func (kcp *KCP) parse_ack(sn uint32) { - if _itimediff(sn, kcp.snd_una) < 0 || _itimediff(sn, kcp.snd_nxt) >= 0 { - return - } - - for k := range kcp.snd_buf { - seg := &kcp.snd_buf[k] - if sn == seg.sn { - // mark and free space, but leave the segment here, - // and wait until `una` to delete this, then we don't - // have to shift the segments behind forward, - // which is an expensive operation for large window - seg.acked = 1 - kcp.delSegment(seg) - break - } - if _itimediff(sn, seg.sn) < 0 { - break - } - } -} - -func (kcp *KCP) parse_fastack(sn, ts uint32) { - if _itimediff(sn, kcp.snd_una) < 0 || _itimediff(sn, kcp.snd_nxt) >= 0 { - return - } - - for k := range kcp.snd_buf { - seg := &kcp.snd_buf[k] - if _itimediff(sn, seg.sn) < 0 { - break - } else if sn != seg.sn && _itimediff(seg.ts, ts) <= 0 { - seg.fastack++ - } - } -} - -func (kcp *KCP) parse_una(una uint32) { - count := 0 - for k := range kcp.snd_buf { - seg := &kcp.snd_buf[k] - if _itimediff(una, seg.sn) > 0 { - kcp.delSegment(seg) - count++ - } else { - break - } - } - if count > 0 { - kcp.snd_buf = kcp.remove_front(kcp.snd_buf, count) - } -} - -// ack append -func (kcp *KCP) ack_push(sn, ts uint32) { - kcp.acklist = append(kcp.acklist, ackItem{sn, ts}) -} - -// returns true if data has repeated -func (kcp *KCP) parse_data(newseg segment) bool { - sn := newseg.sn - if _itimediff(sn, kcp.rcv_nxt+kcp.rcv_wnd) >= 0 || - _itimediff(sn, kcp.rcv_nxt) < 0 { - return true - } - - n := len(kcp.rcv_buf) - 1 - insert_idx := 0 - repeat := false - for i := n; i >= 0; i-- { - seg := &kcp.rcv_buf[i] - if seg.sn == sn { - repeat = true - break - } - if _itimediff(sn, seg.sn) > 0 { - insert_idx = i + 1 - break - } - } - - if !repeat { - // replicate the content if it's new - dataCopy := xmitBuf.Get().([]byte)[:len(newseg.data)] - copy(dataCopy, newseg.data) - newseg.data = dataCopy - - if insert_idx == n+1 { - kcp.rcv_buf = append(kcp.rcv_buf, newseg) - } else { - kcp.rcv_buf = append(kcp.rcv_buf, segment{}) - copy(kcp.rcv_buf[insert_idx+1:], kcp.rcv_buf[insert_idx:]) - kcp.rcv_buf[insert_idx] = newseg - } - } - - // move available data from rcv_buf -> rcv_queue - count := 0 - for k := range kcp.rcv_buf { - seg := &kcp.rcv_buf[k] - if seg.sn == kcp.rcv_nxt && len(kcp.rcv_queue)+count < int(kcp.rcv_wnd) { - kcp.rcv_nxt++ - count++ - } else { - break - } - } - if count > 0 { - kcp.rcv_queue = append(kcp.rcv_queue, kcp.rcv_buf[:count]...) - kcp.rcv_buf = kcp.remove_front(kcp.rcv_buf, count) - } - - return repeat -} - -// Input a packet into kcp state machine. -// -// 'regular' indicates it's a real data packet from remote, and it means it's not generated from ReedSolomon -// codecs. -// -// 'ackNoDelay' will trigger immediate ACK, but surely it will not be efficient in bandwidth -func (kcp *KCP) Input(data []byte, regular, ackNoDelay bool) int { - snd_una := kcp.snd_una - if len(data) < IKCP_OVERHEAD { - return -1 - } - - var latest uint32 // the latest ack packet - var flag int - var inSegs uint64 - - for { - var ts, sn, length, una, conv uint32 - var wnd uint16 - var cmd, frg uint8 - - if len(data) < int(IKCP_OVERHEAD) { - break - } - - data = ikcp_decode32u(data, &conv) - if conv != kcp.conv { - return -1 - } - - data = ikcp_decode8u(data, &cmd) - data = ikcp_decode8u(data, &frg) - data = ikcp_decode16u(data, &wnd) - data = ikcp_decode32u(data, &ts) - data = ikcp_decode32u(data, &sn) - data = ikcp_decode32u(data, &una) - data = ikcp_decode32u(data, &length) - if len(data) < int(length) { - return -2 - } - - if cmd != IKCP_CMD_PUSH && cmd != IKCP_CMD_ACK && - cmd != IKCP_CMD_WASK && cmd != IKCP_CMD_WINS { - return -3 - } - - // only trust window updates from regular packets. i.e: latest update - if regular { - kcp.rmt_wnd = uint32(wnd) - } - kcp.parse_una(una) - kcp.shrink_buf() - - if cmd == IKCP_CMD_ACK { - kcp.parse_ack(sn) - kcp.parse_fastack(sn, ts) - flag |= 1 - latest = ts - } else if cmd == IKCP_CMD_PUSH { - repeat := true - if _itimediff(sn, kcp.rcv_nxt+kcp.rcv_wnd) < 0 { - kcp.ack_push(sn, ts) - if _itimediff(sn, kcp.rcv_nxt) >= 0 { - var seg segment - seg.conv = conv - seg.cmd = cmd - seg.frg = frg - seg.wnd = wnd - seg.ts = ts - seg.sn = sn - seg.una = una - seg.data = data[:length] // delayed data copying - repeat = kcp.parse_data(seg) - } - } - if regular && repeat { - atomic.AddUint64(&DefaultSnmp.RepeatSegs, 1) - } - } else if cmd == IKCP_CMD_WASK { - // ready to send back IKCP_CMD_WINS in Ikcp_flush - // tell remote my window size - kcp.probe |= IKCP_ASK_TELL - } else if cmd == IKCP_CMD_WINS { - // do nothing - } else { - return -3 - } - - inSegs++ - data = data[length:] - } - atomic.AddUint64(&DefaultSnmp.InSegs, inSegs) - - // update rtt with the latest ts - // ignore the FEC packet - if flag != 0 && regular { - current := currentMs() - if _itimediff(current, latest) >= 0 { - kcp.update_ack(_itimediff(current, latest)) - } - } - - // cwnd update when packet arrived - if kcp.nocwnd == 0 { - if _itimediff(kcp.snd_una, snd_una) > 0 { - if kcp.cwnd < kcp.rmt_wnd { - mss := kcp.mss - if kcp.cwnd < kcp.ssthresh { - kcp.cwnd++ - kcp.incr += mss - } else { - if kcp.incr < mss { - kcp.incr = mss - } - kcp.incr += (mss*mss)/kcp.incr + (mss / 16) - if (kcp.cwnd+1)*mss <= kcp.incr { - kcp.cwnd++ - } - } - if kcp.cwnd > kcp.rmt_wnd { - kcp.cwnd = kcp.rmt_wnd - kcp.incr = kcp.rmt_wnd * mss - } - } - } - } - - if ackNoDelay && len(kcp.acklist) > 0 { // ack immediately - kcp.flush(true) - } - return 0 -} - -func (kcp *KCP) wnd_unused() uint16 { - if len(kcp.rcv_queue) < int(kcp.rcv_wnd) { - return uint16(int(kcp.rcv_wnd) - len(kcp.rcv_queue)) - } - return 0 -} - -// flush pending data -func (kcp *KCP) flush(ackOnly bool) uint32 { - var seg segment - seg.conv = kcp.conv - seg.cmd = IKCP_CMD_ACK - seg.wnd = kcp.wnd_unused() - seg.una = kcp.rcv_nxt - - buffer := kcp.buffer - ptr := buffer[kcp.reserved:] // keep n bytes untouched - - // makeSpace makes room for writing - makeSpace := func(space int) { - size := len(buffer) - len(ptr) - if size+space > int(kcp.mtu) { - kcp.output(buffer, size) - ptr = buffer[kcp.reserved:] - } - } - - // flush bytes in buffer if there is any - flushBuffer := func() { - size := len(buffer) - len(ptr) - if size > kcp.reserved { - kcp.output(buffer, size) - } - } - - // flush acknowledges - for i, ack := range kcp.acklist { - makeSpace(IKCP_OVERHEAD) - // filter jitters caused by bufferbloat - if ack.sn >= kcp.rcv_nxt || len(kcp.acklist)-1 == i { - seg.sn, seg.ts = ack.sn, ack.ts - ptr = seg.encode(ptr) - } - } - kcp.acklist = kcp.acklist[0:0] - - if ackOnly { // flash remain ack segments - flushBuffer() - return kcp.interval - } - - // probe window size (if remote window size equals zero) - if kcp.rmt_wnd == 0 { - current := currentMs() - if kcp.probe_wait == 0 { - kcp.probe_wait = IKCP_PROBE_INIT - kcp.ts_probe = current + kcp.probe_wait - } else { - if _itimediff(current, kcp.ts_probe) >= 0 { - if kcp.probe_wait < IKCP_PROBE_INIT { - kcp.probe_wait = IKCP_PROBE_INIT - } - kcp.probe_wait += kcp.probe_wait / 2 - if kcp.probe_wait > IKCP_PROBE_LIMIT { - kcp.probe_wait = IKCP_PROBE_LIMIT - } - kcp.ts_probe = current + kcp.probe_wait - kcp.probe |= IKCP_ASK_SEND - } - } - } else { - kcp.ts_probe = 0 - kcp.probe_wait = 0 - } - - // flush window probing commands - if (kcp.probe & IKCP_ASK_SEND) != 0 { - seg.cmd = IKCP_CMD_WASK - makeSpace(IKCP_OVERHEAD) - ptr = seg.encode(ptr) - } - - // flush window probing commands - if (kcp.probe & IKCP_ASK_TELL) != 0 { - seg.cmd = IKCP_CMD_WINS - makeSpace(IKCP_OVERHEAD) - ptr = seg.encode(ptr) - } - - kcp.probe = 0 - - // calculate window size - cwnd := _imin_(kcp.snd_wnd, kcp.rmt_wnd) - if kcp.nocwnd == 0 { - cwnd = _imin_(kcp.cwnd, cwnd) - } - - // sliding window, controlled by snd_nxt && sna_una+cwnd - newSegsCount := 0 - for k := range kcp.snd_queue { - if _itimediff(kcp.snd_nxt, kcp.snd_una+cwnd) >= 0 { - break - } - newseg := kcp.snd_queue[k] - newseg.conv = kcp.conv - newseg.cmd = IKCP_CMD_PUSH - newseg.sn = kcp.snd_nxt - kcp.snd_buf = append(kcp.snd_buf, newseg) - kcp.snd_nxt++ - newSegsCount++ - } - if newSegsCount > 0 { - kcp.snd_queue = kcp.remove_front(kcp.snd_queue, newSegsCount) - } - - // calculate resent - resent := uint32(kcp.fastresend) - if kcp.fastresend <= 0 { - resent = 0xffffffff - } - - // check for retransmissions - current := currentMs() - var change, lostSegs, fastRetransSegs, earlyRetransSegs uint64 - minrto := int32(kcp.interval) - - ref := kcp.snd_buf[:len(kcp.snd_buf)] // for bounds check elimination - for k := range ref { - segment := &ref[k] - needsend := false - if segment.acked == 1 { - continue - } - if segment.xmit == 0 { // initial transmit - needsend = true - segment.rto = kcp.rx_rto - segment.resendts = current + segment.rto - } else if segment.fastack >= resent { // fast retransmit - needsend = true - segment.fastack = 0 - segment.rto = kcp.rx_rto - segment.resendts = current + segment.rto - change++ - fastRetransSegs++ - } else if segment.fastack > 0 && newSegsCount == 0 { // early retransmit - needsend = true - segment.fastack = 0 - segment.rto = kcp.rx_rto - segment.resendts = current + segment.rto - change++ - earlyRetransSegs++ - } else if _itimediff(current, segment.resendts) >= 0 { // RTO - needsend = true - if kcp.nodelay == 0 { - segment.rto += kcp.rx_rto - } else { - segment.rto += kcp.rx_rto / 2 - } - segment.fastack = 0 - segment.resendts = current + segment.rto - lostSegs++ - } - - if needsend { - current = currentMs() - segment.xmit++ - segment.ts = current - segment.wnd = seg.wnd - segment.una = seg.una - - need := IKCP_OVERHEAD + len(segment.data) - makeSpace(need) - ptr = segment.encode(ptr) - copy(ptr, segment.data) - ptr = ptr[len(segment.data):] - - if segment.xmit >= kcp.dead_link { - kcp.state = 0xFFFFFFFF - } - } - - // get the nearest rto - if rto := _itimediff(segment.resendts, current); rto > 0 && rto < minrto { - minrto = rto - } - } - - // flash remain segments - flushBuffer() - - // counter updates - sum := lostSegs - if lostSegs > 0 { - atomic.AddUint64(&DefaultSnmp.LostSegs, lostSegs) - } - if fastRetransSegs > 0 { - atomic.AddUint64(&DefaultSnmp.FastRetransSegs, fastRetransSegs) - sum += fastRetransSegs - } - if earlyRetransSegs > 0 { - atomic.AddUint64(&DefaultSnmp.EarlyRetransSegs, earlyRetransSegs) - sum += earlyRetransSegs - } - if sum > 0 { - atomic.AddUint64(&DefaultSnmp.RetransSegs, sum) - } - - // cwnd update - if kcp.nocwnd == 0 { - // update ssthresh - // rate halving, https://tools.ietf.org/html/rfc6937 - if change > 0 { - inflight := kcp.snd_nxt - kcp.snd_una - kcp.ssthresh = inflight / 2 - if kcp.ssthresh < IKCP_THRESH_MIN { - kcp.ssthresh = IKCP_THRESH_MIN - } - kcp.cwnd = kcp.ssthresh + resent - kcp.incr = kcp.cwnd * kcp.mss - } - - // congestion control, https://tools.ietf.org/html/rfc5681 - if lostSegs > 0 { - kcp.ssthresh = cwnd / 2 - if kcp.ssthresh < IKCP_THRESH_MIN { - kcp.ssthresh = IKCP_THRESH_MIN - } - kcp.cwnd = 1 - kcp.incr = kcp.mss - } - - if kcp.cwnd < 1 { - kcp.cwnd = 1 - kcp.incr = kcp.mss - } - } - - return uint32(minrto) -} - -// (deprecated) -// -// Update updates state (call it repeatedly, every 10ms-100ms), or you can ask -// ikcp_check when to call it again (without ikcp_input/_send calling). -// 'current' - current timestamp in millisec. -func (kcp *KCP) Update() { - var slap int32 - - current := currentMs() - if kcp.updated == 0 { - kcp.updated = 1 - kcp.ts_flush = current - } - - slap = _itimediff(current, kcp.ts_flush) - - if slap >= 10000 || slap < -10000 { - kcp.ts_flush = current - slap = 0 - } - - if slap >= 0 { - kcp.ts_flush += kcp.interval - if _itimediff(current, kcp.ts_flush) >= 0 { - kcp.ts_flush = current + kcp.interval - } - kcp.flush(false) - } -} - -// (deprecated) -// -// Check determines when should you invoke ikcp_update: -// returns when you should invoke ikcp_update in millisec, if there -// is no ikcp_input/_send calling. you can call ikcp_update in that -// time, instead of call update repeatly. -// Important to reduce unnacessary ikcp_update invoking. use it to -// schedule ikcp_update (eg. implementing an epoll-like mechanism, -// or optimize ikcp_update when handling massive kcp connections) -func (kcp *KCP) Check() uint32 { - current := currentMs() - ts_flush := kcp.ts_flush - tm_flush := int32(0x7fffffff) - tm_packet := int32(0x7fffffff) - minimal := uint32(0) - if kcp.updated == 0 { - return current - } - - if _itimediff(current, ts_flush) >= 10000 || - _itimediff(current, ts_flush) < -10000 { - ts_flush = current - } - - if _itimediff(current, ts_flush) >= 0 { - return current - } - - tm_flush = _itimediff(ts_flush, current) - - for k := range kcp.snd_buf { - seg := &kcp.snd_buf[k] - diff := _itimediff(seg.resendts, current) - if diff <= 0 { - return current - } - if diff < tm_packet { - tm_packet = diff - } - } - - minimal = uint32(tm_packet) - if tm_packet >= tm_flush { - minimal = uint32(tm_flush) - } - if minimal >= kcp.interval { - minimal = kcp.interval - } - - return current + minimal -} - -// SetMtu changes MTU size, default is 1400 -func (kcp *KCP) SetMtu(mtu int) int { - if mtu < 50 || mtu < IKCP_OVERHEAD { - return -1 - } - if kcp.reserved >= int(kcp.mtu-IKCP_OVERHEAD) || kcp.reserved < 0 { - return -1 - } - - buffer := make([]byte, mtu) - if buffer == nil { - return -2 - } - kcp.mtu = uint32(mtu) - kcp.mss = kcp.mtu - IKCP_OVERHEAD - uint32(kcp.reserved) - kcp.buffer = buffer - return 0 -} - -// NoDelay options -// fastest: ikcp_nodelay(kcp, 1, 20, 2, 1) -// nodelay: 0:disable(default), 1:enable -// interval: internal update timer interval in millisec, default is 100ms -// resend: 0:disable fast resend(default), 1:enable fast resend -// nc: 0:normal congestion control(default), 1:disable congestion control -func (kcp *KCP) NoDelay(nodelay, interval, resend, nc int) int { - if nodelay >= 0 { - kcp.nodelay = uint32(nodelay) - if nodelay != 0 { - kcp.rx_minrto = IKCP_RTO_NDL - } else { - kcp.rx_minrto = IKCP_RTO_MIN - } - } - if interval >= 0 { - if interval > 5000 { - interval = 5000 - } else if interval < 10 { - interval = 10 - } - kcp.interval = uint32(interval) - } - if resend >= 0 { - kcp.fastresend = int32(resend) - } - if nc >= 0 { - kcp.nocwnd = int32(nc) - } - return 0 -} - -// WndSize sets maximum window size: sndwnd=32, rcvwnd=32 by default -func (kcp *KCP) WndSize(sndwnd, rcvwnd int) int { - if sndwnd > 0 { - kcp.snd_wnd = uint32(sndwnd) - } - if rcvwnd > 0 { - kcp.rcv_wnd = uint32(rcvwnd) - } - return 0 -} - -// WaitSnd gets how many packet is waiting to be sent -func (kcp *KCP) WaitSnd() int { - return len(kcp.snd_buf) + len(kcp.snd_queue) -} - -// remove front n elements from queue -// if the number of elements to remove is more than half of the size. -// just shift the rear elements to front, otherwise just reslice q to q[n:] -// then the cost of runtime.growslice can always be less than n/2 -func (kcp *KCP) remove_front(q []segment, n int) []segment { - if n > cap(q)/2 { - newn := copy(q, q[n:]) - return q[:newn] - } - return q[n:] -} - -// Release all cached outgoing segments -func (kcp *KCP) ReleaseTX() { - for k := range kcp.snd_queue { - if kcp.snd_queue[k].data != nil { - xmitBuf.Put(kcp.snd_queue[k].data) - } - } - for k := range kcp.snd_buf { - if kcp.snd_buf[k].data != nil { - xmitBuf.Put(kcp.snd_buf[k].data) - } - } - kcp.snd_queue = nil - kcp.snd_buf = nil -} diff --git a/vendor/github.com/xtaci/kcp-go/readloop.go b/vendor/github.com/xtaci/kcp-go/readloop.go deleted file mode 100644 index bc48e84..0000000 --- a/vendor/github.com/xtaci/kcp-go/readloop.go +++ /dev/null @@ -1,48 +0,0 @@ -package kcp - -import ( - "sync/atomic" - - "github.com/pkg/errors" -) - -func (s *UDPSession) defaultReadLoop() { - buf := make([]byte, mtuLimit) - var src string - for { - if n, addr, err := s.conn.ReadFrom(buf); err == nil { - // make sure the packet is from the same source - if src == "" { // set source address - src = addr.String() - } else if addr.String() != src { - atomic.AddUint64(&DefaultSnmp.InErrs, 1) - continue - } - - if n >= s.headerSize+IKCP_OVERHEAD { - s.packetInput(buf[:n]) - } else { - atomic.AddUint64(&DefaultSnmp.InErrs, 1) - } - } else { - s.notifyReadError(errors.WithStack(err)) - return - } - } -} - -func (l *Listener) defaultMonitor() { - buf := make([]byte, mtuLimit) - for { - if n, from, err := l.conn.ReadFrom(buf); err == nil { - if n >= l.headerSize+IKCP_OVERHEAD { - l.packetInput(buf[:n], from) - } else { - atomic.AddUint64(&DefaultSnmp.InErrs, 1) - } - } else { - l.notifyReadError(errors.WithStack(err)) - return - } - } -} diff --git a/vendor/github.com/xtaci/kcp-go/readloop_generic.go b/vendor/github.com/xtaci/kcp-go/readloop_generic.go deleted file mode 100644 index 5dbe4f4..0000000 --- a/vendor/github.com/xtaci/kcp-go/readloop_generic.go +++ /dev/null @@ -1,11 +0,0 @@ -// +build !linux - -package kcp - -func (s *UDPSession) readLoop() { - s.defaultReadLoop() -} - -func (l *Listener) monitor() { - l.defaultMonitor() -} diff --git a/vendor/github.com/xtaci/kcp-go/readloop_linux.go b/vendor/github.com/xtaci/kcp-go/readloop_linux.go deleted file mode 100644 index 6226478..0000000 --- a/vendor/github.com/xtaci/kcp-go/readloop_linux.go +++ /dev/null @@ -1,120 +0,0 @@ -// +build linux - -package kcp - -import ( - "net" - "os" - "sync/atomic" - - "github.com/pkg/errors" - "golang.org/x/net/ipv4" - "golang.org/x/net/ipv6" -) - -// the read loop for a client session -func (s *UDPSession) readLoop() { - // default version - if s.xconn == nil { - s.defaultReadLoop() - return - } - - // x/net version - var src string - msgs := make([]ipv4.Message, batchSize) - for k := range msgs { - msgs[k].Buffers = [][]byte{make([]byte, mtuLimit)} - } - - for { - if count, err := s.xconn.ReadBatch(msgs, 0); err == nil { - for i := 0; i < count; i++ { - msg := &msgs[i] - // make sure the packet is from the same source - if src == "" { // set source address if nil - src = msg.Addr.String() - } else if msg.Addr.String() != src { - atomic.AddUint64(&DefaultSnmp.InErrs, 1) - continue - } - - if msg.N < s.headerSize+IKCP_OVERHEAD { - atomic.AddUint64(&DefaultSnmp.InErrs, 1) - continue - } - - // source and size has validated - s.packetInput(msg.Buffers[0][:msg.N]) - } - } else { - // compatibility issue: - // for linux kernel<=2.6.32, support for sendmmsg is not available - // an error of type os.SyscallError will be returned - if operr, ok := err.(*net.OpError); ok { - if se, ok := operr.Err.(*os.SyscallError); ok { - if se.Syscall == "recvmmsg" { - s.defaultReadLoop() - return - } - } - } - s.notifyReadError(errors.WithStack(err)) - return - } - } -} - -// monitor incoming data for all connections of server -func (l *Listener) monitor() { - var xconn batchConn - if _, ok := l.conn.(*net.UDPConn); ok { - addr, err := net.ResolveUDPAddr("udp", l.conn.LocalAddr().String()) - if err == nil { - if addr.IP.To4() != nil { - xconn = ipv4.NewPacketConn(l.conn) - } else { - xconn = ipv6.NewPacketConn(l.conn) - } - } - } - - // default version - if xconn == nil { - l.defaultMonitor() - return - } - - // x/net version - msgs := make([]ipv4.Message, batchSize) - for k := range msgs { - msgs[k].Buffers = [][]byte{make([]byte, mtuLimit)} - } - - for { - if count, err := xconn.ReadBatch(msgs, 0); err == nil { - for i := 0; i < count; i++ { - msg := &msgs[i] - if msg.N >= l.headerSize+IKCP_OVERHEAD { - l.packetInput(msg.Buffers[0][:msg.N], msg.Addr) - } else { - atomic.AddUint64(&DefaultSnmp.InErrs, 1) - } - } - } else { - // compatibility issue: - // for linux kernel<=2.6.32, support for sendmmsg is not available - // an error of type os.SyscallError will be returned - if operr, ok := err.(*net.OpError); ok { - if se, ok := operr.Err.(*os.SyscallError); ok { - if se.Syscall == "recvmmsg" { - l.defaultMonitor() - return - } - } - } - l.notifyReadError(errors.WithStack(err)) - return - } - } -} diff --git a/vendor/github.com/xtaci/kcp-go/sess.go b/vendor/github.com/xtaci/kcp-go/sess.go deleted file mode 100644 index 2384816..0000000 --- a/vendor/github.com/xtaci/kcp-go/sess.go +++ /dev/null @@ -1,1054 +0,0 @@ -// Package kcp-go is a Reliable-UDP library for golang. -// -// This library intents to provide a smooth, resilient, ordered, -// error-checked and anonymous delivery of streams over UDP packets. -// -// The interfaces of this package aims to be compatible with -// net.Conn in standard library, but offers powerful features for advanced users. -package kcp - -import ( - "crypto/rand" - "encoding/binary" - "hash/crc32" - "io" - "net" - "sync" - "sync/atomic" - "time" - - "github.com/pkg/errors" - "golang.org/x/net/ipv4" - "golang.org/x/net/ipv6" -) - -const ( - // 16-bytes nonce for each packet - nonceSize = 16 - - // 4-bytes packet checksum - crcSize = 4 - - // overall crypto header size - cryptHeaderSize = nonceSize + crcSize - - // maximum packet size - mtuLimit = 1500 - - // FEC keeps rxFECMulti* (dataShard+parityShard) ordered packets in memory - rxFECMulti = 3 - - // accept backlog - acceptBacklog = 128 -) - -var ( - errInvalidOperation = errors.New("invalid operation") - errTimeout = errors.New("timeout") -) - -var ( - // a system-wide packet buffer shared among sending, receiving and FEC - // to mitigate high-frequency memory allocation for packets - xmitBuf sync.Pool -) - -func init() { - xmitBuf.New = func() interface{} { - return make([]byte, mtuLimit) - } -} - -type ( - // UDPSession defines a KCP session implemented by UDP - UDPSession struct { - conn net.PacketConn // the underlying packet connection - kcp *KCP // KCP ARQ protocol - l *Listener // pointing to the Listener object if it's been accepted by a Listener - block BlockCrypt // block encryption object - - // kcp receiving is based on packets - // recvbuf turns packets into stream - recvbuf []byte - bufptr []byte - - // FEC codec - fecDecoder *fecDecoder - fecEncoder *fecEncoder - - // settings - remote net.Addr // remote peer address - rd time.Time // read deadline - wd time.Time // write deadline - headerSize int // the header size additional to a KCP frame - ackNoDelay bool // send ack immediately for each incoming packet(testing purpose) - writeDelay bool // delay kcp.flush() for Write() for bulk transfer - dup int // duplicate udp packets(testing purpose) - - // notifications - die chan struct{} // notify current session has Closed - dieOnce sync.Once - chReadEvent chan struct{} // notify Read() can be called without blocking - chWriteEvent chan struct{} // notify Write() can be called without blocking - - // socket error handling - socketReadError atomic.Value - socketWriteError atomic.Value - chSocketReadError chan struct{} - chSocketWriteError chan struct{} - socketReadErrorOnce sync.Once - socketWriteErrorOnce sync.Once - - // nonce generator - nonce Entropy - - // packets waiting to be sent on wire - txqueue []ipv4.Message - xconn batchConn // for x/net - xconnWriteError error - - mu sync.Mutex - } - - setReadBuffer interface { - SetReadBuffer(bytes int) error - } - - setWriteBuffer interface { - SetWriteBuffer(bytes int) error - } - - setDSCP interface { - SetDSCP(int) error - } -) - -// newUDPSession create a new udp session for client or server -func newUDPSession(conv uint32, dataShards, parityShards int, l *Listener, conn net.PacketConn, remote net.Addr, block BlockCrypt) *UDPSession { - sess := new(UDPSession) - sess.die = make(chan struct{}) - sess.nonce = new(nonceAES128) - sess.nonce.Init() - sess.chReadEvent = make(chan struct{}, 1) - sess.chWriteEvent = make(chan struct{}, 1) - sess.chSocketReadError = make(chan struct{}) - sess.chSocketWriteError = make(chan struct{}) - sess.remote = remote - sess.conn = conn - sess.l = l - sess.block = block - sess.recvbuf = make([]byte, mtuLimit) - - // cast to writebatch conn - if _, ok := conn.(*net.UDPConn); ok { - addr, err := net.ResolveUDPAddr("udp", conn.LocalAddr().String()) - if err == nil { - if addr.IP.To4() != nil { - sess.xconn = ipv4.NewPacketConn(conn) - } else { - sess.xconn = ipv6.NewPacketConn(conn) - } - } - } - - // FEC codec initialization - sess.fecDecoder = newFECDecoder(rxFECMulti*(dataShards+parityShards), dataShards, parityShards) - if sess.block != nil { - sess.fecEncoder = newFECEncoder(dataShards, parityShards, cryptHeaderSize) - } else { - sess.fecEncoder = newFECEncoder(dataShards, parityShards, 0) - } - - // calculate additional header size introduced by FEC and encryption - if sess.block != nil { - sess.headerSize += cryptHeaderSize - } - if sess.fecEncoder != nil { - sess.headerSize += fecHeaderSizePlus2 - } - - sess.kcp = NewKCP(conv, func(buf []byte, size int) { - if size >= IKCP_OVERHEAD+sess.headerSize { - sess.output(buf[:size]) - } - }) - sess.kcp.ReserveBytes(sess.headerSize) - - if sess.l == nil { // it's a client connection - go sess.readLoop() - atomic.AddUint64(&DefaultSnmp.ActiveOpens, 1) - } else { - atomic.AddUint64(&DefaultSnmp.PassiveOpens, 1) - } - - // start per-session updater - go sess.updater() - - currestab := atomic.AddUint64(&DefaultSnmp.CurrEstab, 1) - maxconn := atomic.LoadUint64(&DefaultSnmp.MaxConn) - if currestab > maxconn { - atomic.CompareAndSwapUint64(&DefaultSnmp.MaxConn, maxconn, currestab) - } - - return sess -} - -// Read implements net.Conn -func (s *UDPSession) Read(b []byte) (n int, err error) { - for { - s.mu.Lock() - if len(s.bufptr) > 0 { // copy from buffer into b - n = copy(b, s.bufptr) - s.bufptr = s.bufptr[n:] - s.mu.Unlock() - atomic.AddUint64(&DefaultSnmp.BytesReceived, uint64(n)) - return n, nil - } - - if size := s.kcp.PeekSize(); size > 0 { // peek data size from kcp - if len(b) >= size { // receive data into 'b' directly - s.kcp.Recv(b) - s.mu.Unlock() - atomic.AddUint64(&DefaultSnmp.BytesReceived, uint64(size)) - return size, nil - } - - // if necessary resize the stream buffer to guarantee a sufficent buffer space - if cap(s.recvbuf) < size { - s.recvbuf = make([]byte, size) - } - - // resize the length of recvbuf to correspond to data size - s.recvbuf = s.recvbuf[:size] - s.kcp.Recv(s.recvbuf) - n = copy(b, s.recvbuf) // copy to 'b' - s.bufptr = s.recvbuf[n:] // pointer update - s.mu.Unlock() - atomic.AddUint64(&DefaultSnmp.BytesReceived, uint64(n)) - return n, nil - } - - // deadline for current reading operation - var timeout *time.Timer - var c <-chan time.Time - if !s.rd.IsZero() { - if time.Now().After(s.rd) { - s.mu.Unlock() - return 0, errors.WithStack(errTimeout) - } - - delay := s.rd.Sub(time.Now()) - timeout = time.NewTimer(delay) - c = timeout.C - } - s.mu.Unlock() - - // wait for read event or timeout or error - select { - case <-s.chReadEvent: - if timeout != nil { - timeout.Stop() - } - case <-c: - return 0, errors.WithStack(errTimeout) - case <-s.chSocketReadError: - return 0, s.socketReadError.Load().(error) - case <-s.die: - return 0, errors.WithStack(io.ErrClosedPipe) - } - } -} - -// Write implements net.Conn -func (s *UDPSession) Write(b []byte) (n int, err error) { return s.WriteBuffers([][]byte{b}) } - -// WriteBuffers write a vector of byte slices to the underlying connection -func (s *UDPSession) WriteBuffers(v [][]byte) (n int, err error) { - for { - select { - case <-s.chSocketWriteError: - return 0, s.socketWriteError.Load().(error) - case <-s.die: - return 0, errors.WithStack(io.ErrClosedPipe) - default: - } - - s.mu.Lock() - - // make sure write do not overflow the max sliding window on both side - waitsnd := s.kcp.WaitSnd() - if waitsnd < int(s.kcp.snd_wnd) && waitsnd < int(s.kcp.rmt_wnd) { - for _, b := range v { - n += len(b) - for { - if len(b) <= int(s.kcp.mss) { - s.kcp.Send(b) - break - } else { - s.kcp.Send(b[:s.kcp.mss]) - b = b[s.kcp.mss:] - } - } - } - - waitsnd = s.kcp.WaitSnd() - if waitsnd >= int(s.kcp.snd_wnd) || waitsnd >= int(s.kcp.rmt_wnd) || !s.writeDelay { - s.kcp.flush(false) - s.uncork() - } - s.mu.Unlock() - atomic.AddUint64(&DefaultSnmp.BytesSent, uint64(n)) - return n, nil - } - - var timeout *time.Timer - var c <-chan time.Time - if !s.wd.IsZero() { - if time.Now().After(s.wd) { - s.mu.Unlock() - return 0, errors.WithStack(errTimeout) - } - delay := s.wd.Sub(time.Now()) - timeout = time.NewTimer(delay) - c = timeout.C - } - s.mu.Unlock() - - select { - case <-s.chWriteEvent: - if timeout != nil { - timeout.Stop() - } - case <-c: - return 0, errors.WithStack(errTimeout) - case <-s.chSocketWriteError: - return 0, s.socketWriteError.Load().(error) - case <-s.die: - return 0, errors.WithStack(io.ErrClosedPipe) - } - } -} - -// uncork sends data in txqueue if there is any -func (s *UDPSession) uncork() { - if len(s.txqueue) > 0 { - s.tx(s.txqueue) - // recycle - for k := range s.txqueue { - xmitBuf.Put(s.txqueue[k].Buffers[0]) - s.txqueue[k].Buffers = nil - } - s.txqueue = s.txqueue[:0] - } - return -} - -// Close closes the connection. -func (s *UDPSession) Close() error { - var once bool - s.dieOnce.Do(func() { - close(s.die) - once = true - }) - - if once { - atomic.AddUint64(&DefaultSnmp.CurrEstab, ^uint64(0)) - - // try best to send all queued messages - s.mu.Lock() - s.kcp.flush(false) - s.uncork() - // release pending segments - s.kcp.ReleaseTX() - if s.fecDecoder != nil { - s.fecDecoder.release() - } - s.mu.Unlock() - - if s.l != nil { // belongs to listener - s.l.closeSession(s.remote) - return nil - } else { // client socket close - return s.conn.Close() - } - } else { - return errors.WithStack(io.ErrClosedPipe) - } -} - -// LocalAddr returns the local network address. The Addr returned is shared by all invocations of LocalAddr, so do not modify it. -func (s *UDPSession) LocalAddr() net.Addr { return s.conn.LocalAddr() } - -// RemoteAddr returns the remote network address. The Addr returned is shared by all invocations of RemoteAddr, so do not modify it. -func (s *UDPSession) RemoteAddr() net.Addr { return s.remote } - -// SetDeadline sets the deadline associated with the listener. A zero time value disables the deadline. -func (s *UDPSession) SetDeadline(t time.Time) error { - s.mu.Lock() - defer s.mu.Unlock() - s.rd = t - s.wd = t - s.notifyReadEvent() - s.notifyWriteEvent() - return nil -} - -// SetReadDeadline implements the Conn SetReadDeadline method. -func (s *UDPSession) SetReadDeadline(t time.Time) error { - s.mu.Lock() - defer s.mu.Unlock() - s.rd = t - s.notifyReadEvent() - return nil -} - -// SetWriteDeadline implements the Conn SetWriteDeadline method. -func (s *UDPSession) SetWriteDeadline(t time.Time) error { - s.mu.Lock() - defer s.mu.Unlock() - s.wd = t - s.notifyWriteEvent() - return nil -} - -// SetWriteDelay delays write for bulk transfer until the next update interval -func (s *UDPSession) SetWriteDelay(delay bool) { - s.mu.Lock() - defer s.mu.Unlock() - s.writeDelay = delay -} - -// SetWindowSize set maximum window size -func (s *UDPSession) SetWindowSize(sndwnd, rcvwnd int) { - s.mu.Lock() - defer s.mu.Unlock() - s.kcp.WndSize(sndwnd, rcvwnd) -} - -// SetMtu sets the maximum transmission unit(not including UDP header) -func (s *UDPSession) SetMtu(mtu int) bool { - if mtu > mtuLimit { - return false - } - - s.mu.Lock() - defer s.mu.Unlock() - s.kcp.SetMtu(mtu) - return true -} - -// SetStreamMode toggles the stream mode on/off -func (s *UDPSession) SetStreamMode(enable bool) { - s.mu.Lock() - defer s.mu.Unlock() - if enable { - s.kcp.stream = 1 - } else { - s.kcp.stream = 0 - } -} - -// SetACKNoDelay changes ack flush option, set true to flush ack immediately, -func (s *UDPSession) SetACKNoDelay(nodelay bool) { - s.mu.Lock() - defer s.mu.Unlock() - s.ackNoDelay = nodelay -} - -// (deprecated) -// -// SetDUP duplicates udp packets for kcp output. -func (s *UDPSession) SetDUP(dup int) { - s.mu.Lock() - defer s.mu.Unlock() - s.dup = dup -} - -// SetNoDelay calls nodelay() of kcp -// https://github.com/skywind3000/kcp/blob/master/README.en.md#protocol-configuration -func (s *UDPSession) SetNoDelay(nodelay, interval, resend, nc int) { - s.mu.Lock() - defer s.mu.Unlock() - s.kcp.NoDelay(nodelay, interval, resend, nc) -} - -// SetDSCP sets the 6bit DSCP field in IPv4 header, or 8bit Traffic Class in IPv6 header. -// -// if the underlying connection has implemented `func SetDSCP(int) error`, SetDSCP() will invoke -// this function instead. -// -// It has no effect if it's accepted from Listener. -func (s *UDPSession) SetDSCP(dscp int) error { - s.mu.Lock() - defer s.mu.Unlock() - if s.l != nil { - return errInvalidOperation - } - - // interface enabled - if ts, ok := s.conn.(setDSCP); ok { - return ts.SetDSCP(dscp) - } - - if nc, ok := s.conn.(net.Conn); ok { - var succeed bool - if err := ipv4.NewConn(nc).SetTOS(dscp << 2); err == nil { - succeed = true - } - if err := ipv6.NewConn(nc).SetTrafficClass(dscp); err == nil { - succeed = true - } - - if succeed { - return nil - } - } - return errInvalidOperation -} - -// SetReadBuffer sets the socket read buffer, no effect if it's accepted from Listener -func (s *UDPSession) SetReadBuffer(bytes int) error { - s.mu.Lock() - defer s.mu.Unlock() - if s.l == nil { - if nc, ok := s.conn.(setReadBuffer); ok { - return nc.SetReadBuffer(bytes) - } - } - return errInvalidOperation -} - -// SetWriteBuffer sets the socket write buffer, no effect if it's accepted from Listener -func (s *UDPSession) SetWriteBuffer(bytes int) error { - s.mu.Lock() - defer s.mu.Unlock() - if s.l == nil { - if nc, ok := s.conn.(setWriteBuffer); ok { - return nc.SetWriteBuffer(bytes) - } - } - return errInvalidOperation -} - -// post-processing for sending a packet from kcp core -// steps: -// 1. FEC packet generation -// 2. CRC32 integrity -// 3. Encryption -// 4. TxQueue -func (s *UDPSession) output(buf []byte) { - var ecc [][]byte - - // 1. FEC encoding - if s.fecEncoder != nil { - ecc = s.fecEncoder.encode(buf) - } - - // 2&3. crc32 & encryption - if s.block != nil { - s.nonce.Fill(buf[:nonceSize]) - checksum := crc32.ChecksumIEEE(buf[cryptHeaderSize:]) - binary.LittleEndian.PutUint32(buf[nonceSize:], checksum) - s.block.Encrypt(buf, buf) - - for k := range ecc { - s.nonce.Fill(ecc[k][:nonceSize]) - checksum := crc32.ChecksumIEEE(ecc[k][cryptHeaderSize:]) - binary.LittleEndian.PutUint32(ecc[k][nonceSize:], checksum) - s.block.Encrypt(ecc[k], ecc[k]) - } - } - - // 4. TxQueue - var msg ipv4.Message - for i := 0; i < s.dup+1; i++ { - bts := xmitBuf.Get().([]byte)[:len(buf)] - copy(bts, buf) - msg.Buffers = [][]byte{bts} - msg.Addr = s.remote - s.txqueue = append(s.txqueue, msg) - } - - for k := range ecc { - bts := xmitBuf.Get().([]byte)[:len(ecc[k])] - copy(bts, ecc[k]) - msg.Buffers = [][]byte{bts} - msg.Addr = s.remote - s.txqueue = append(s.txqueue, msg) - } -} - -// sess updater to trigger protocol -func (s *UDPSession) updater() { - timer := time.NewTimer(0) - for { - select { - case <-timer.C: - s.mu.Lock() - interval := time.Duration(s.kcp.flush(false)) * time.Millisecond - waitsnd := s.kcp.WaitSnd() - if waitsnd < int(s.kcp.snd_wnd) && waitsnd < int(s.kcp.rmt_wnd) { - s.notifyWriteEvent() - } - s.uncork() - s.mu.Unlock() - timer.Reset(interval) - case <-s.die: - timer.Stop() - return - } - } -} - -// GetConv gets conversation id of a session -func (s *UDPSession) GetConv() uint32 { return s.kcp.conv } - -func (s *UDPSession) notifyReadEvent() { - select { - case s.chReadEvent <- struct{}{}: - default: - } -} - -func (s *UDPSession) notifyWriteEvent() { - select { - case s.chWriteEvent <- struct{}{}: - default: - } -} - -func (s *UDPSession) notifyReadError(err error) { - s.socketReadErrorOnce.Do(func() { - s.socketReadError.Store(err) - close(s.chSocketReadError) - }) -} - -func (s *UDPSession) notifyWriteError(err error) { - s.socketWriteErrorOnce.Do(func() { - s.socketWriteError.Store(err) - close(s.chSocketWriteError) - }) -} - -// packet input stage -func (s *UDPSession) packetInput(data []byte) { - dataValid := false - if s.block != nil { - s.block.Decrypt(data, data) - data = data[nonceSize:] - checksum := crc32.ChecksumIEEE(data[crcSize:]) - if checksum == binary.LittleEndian.Uint32(data) { - data = data[crcSize:] - dataValid = true - } else { - atomic.AddUint64(&DefaultSnmp.InCsumErrors, 1) - } - } else if s.block == nil { - dataValid = true - } - - if dataValid { - s.kcpInput(data) - } -} - -func (s *UDPSession) kcpInput(data []byte) { - var kcpInErrors, fecErrs, fecRecovered, fecParityShards uint64 - - if s.fecDecoder != nil { - if len(data) > fecHeaderSize { // must be larger than fec header size - f := fecPacket(data) - if f.flag() == typeData || f.flag() == typeParity { // header check - if f.flag() == typeParity { - fecParityShards++ - } - - // lock - s.mu.Lock() - recovers := s.fecDecoder.decode(f) - if f.flag() == typeData { - if ret := s.kcp.Input(data[fecHeaderSizePlus2:], true, s.ackNoDelay); ret != 0 { - kcpInErrors++ - } - } - - for _, r := range recovers { - if len(r) >= 2 { // must be larger than 2bytes - sz := binary.LittleEndian.Uint16(r) - if int(sz) <= len(r) && sz >= 2 { - if ret := s.kcp.Input(r[2:sz], false, s.ackNoDelay); ret == 0 { - fecRecovered++ - } else { - kcpInErrors++ - } - } else { - fecErrs++ - } - } else { - fecErrs++ - } - // recycle the recovers - xmitBuf.Put(r) - } - - // to notify the readers to receive the data - if n := s.kcp.PeekSize(); n > 0 { - s.notifyReadEvent() - } - // to notify the writers - waitsnd := s.kcp.WaitSnd() - if waitsnd < int(s.kcp.snd_wnd) && waitsnd < int(s.kcp.rmt_wnd) { - s.notifyWriteEvent() - } - - s.uncork() - s.mu.Unlock() - } else { - atomic.AddUint64(&DefaultSnmp.InErrs, 1) - } - } else { - atomic.AddUint64(&DefaultSnmp.InErrs, 1) - } - } else { - s.mu.Lock() - if ret := s.kcp.Input(data, true, s.ackNoDelay); ret != 0 { - kcpInErrors++ - } - if n := s.kcp.PeekSize(); n > 0 { - s.notifyReadEvent() - } - waitsnd := s.kcp.WaitSnd() - if waitsnd < int(s.kcp.snd_wnd) && waitsnd < int(s.kcp.rmt_wnd) { - s.notifyWriteEvent() - } - s.uncork() - s.mu.Unlock() - } - - atomic.AddUint64(&DefaultSnmp.InPkts, 1) - atomic.AddUint64(&DefaultSnmp.InBytes, uint64(len(data))) - if fecParityShards > 0 { - atomic.AddUint64(&DefaultSnmp.FECParityShards, fecParityShards) - } - if kcpInErrors > 0 { - atomic.AddUint64(&DefaultSnmp.KCPInErrors, kcpInErrors) - } - if fecErrs > 0 { - atomic.AddUint64(&DefaultSnmp.FECErrs, fecErrs) - } - if fecRecovered > 0 { - atomic.AddUint64(&DefaultSnmp.FECRecovered, fecRecovered) - } - -} - -type ( - // Listener defines a server which will be waiting to accept incoming connections - Listener struct { - block BlockCrypt // block encryption - dataShards int // FEC data shard - parityShards int // FEC parity shard - fecDecoder *fecDecoder // FEC mock initialization - conn net.PacketConn // the underlying packet connection - - sessions map[string]*UDPSession // all sessions accepted by this Listener - sessionLock sync.Mutex - chAccepts chan *UDPSession // Listen() backlog - chSessionClosed chan net.Addr // session close queue - headerSize int // the additional header to a KCP frame - - die chan struct{} // notify the listener has closed - dieOnce sync.Once - - // socket error handling - socketReadError atomic.Value - chSocketReadError chan struct{} - socketReadErrorOnce sync.Once - - rd atomic.Value // read deadline for Accept() - } -) - -// packet input stage -func (l *Listener) packetInput(data []byte, addr net.Addr) { - dataValid := false - if l.block != nil { - l.block.Decrypt(data, data) - data = data[nonceSize:] - checksum := crc32.ChecksumIEEE(data[crcSize:]) - if checksum == binary.LittleEndian.Uint32(data) { - data = data[crcSize:] - dataValid = true - } else { - atomic.AddUint64(&DefaultSnmp.InCsumErrors, 1) - } - } else if l.block == nil { - dataValid = true - } - - if dataValid { - l.sessionLock.Lock() - s, ok := l.sessions[addr.String()] - l.sessionLock.Unlock() - - var conv, sn uint32 - convValid := false - if l.fecDecoder != nil { - isfec := binary.LittleEndian.Uint16(data[4:]) - if isfec == typeData { - conv = binary.LittleEndian.Uint32(data[fecHeaderSizePlus2:]) - sn = binary.LittleEndian.Uint32(data[fecHeaderSizePlus2+IKCP_SN_OFFSET:]) - convValid = true - } - } else { - conv = binary.LittleEndian.Uint32(data) - sn = binary.LittleEndian.Uint32(data[IKCP_SN_OFFSET:]) - convValid = true - } - - if ok { // existing connection - if !convValid || conv == s.kcp.conv { // parity or valid data shard - s.kcpInput(data) - } else if sn == 0 { // should replace current connection - s.Close() - s = nil - } - } - - if s == nil && convValid { // new session - if len(l.chAccepts) < cap(l.chAccepts) { // do not let the new sessions overwhelm accept queue - s := newUDPSession(conv, l.dataShards, l.parityShards, l, l.conn, addr, l.block) - s.kcpInput(data) - l.sessionLock.Lock() - l.sessions[addr.String()] = s - l.sessionLock.Unlock() - l.chAccepts <- s - } - } - } -} - -func (l *Listener) notifyReadError(err error) { - l.socketReadErrorOnce.Do(func() { - l.socketReadError.Store(err) - close(l.chSocketReadError) - - // propagate read error to all sessions - l.sessionLock.Lock() - for _, s := range l.sessions { - s.notifyReadError(err) - } - l.sessionLock.Unlock() - }) -} - -// SetReadBuffer sets the socket read buffer for the Listener -func (l *Listener) SetReadBuffer(bytes int) error { - if nc, ok := l.conn.(setReadBuffer); ok { - return nc.SetReadBuffer(bytes) - } - return errInvalidOperation -} - -// SetWriteBuffer sets the socket write buffer for the Listener -func (l *Listener) SetWriteBuffer(bytes int) error { - if nc, ok := l.conn.(setWriteBuffer); ok { - return nc.SetWriteBuffer(bytes) - } - return errInvalidOperation -} - -// SetDSCP sets the 6bit DSCP field in IPv4 header, or 8bit Traffic Class in IPv6 header. -// -// if the underlying connection has implemented `func SetDSCP(int) error`, SetDSCP() will invoke -// this function instead. -func (l *Listener) SetDSCP(dscp int) error { - // interface enabled - if ts, ok := l.conn.(setDSCP); ok { - return ts.SetDSCP(dscp) - } - - if nc, ok := l.conn.(net.Conn); ok { - var succeed bool - if err := ipv4.NewConn(nc).SetTOS(dscp << 2); err == nil { - succeed = true - } - if err := ipv6.NewConn(nc).SetTrafficClass(dscp); err == nil { - succeed = true - } - - if succeed { - return nil - } - } - return errInvalidOperation -} - -// Accept implements the Accept method in the Listener interface; it waits for the next call and returns a generic Conn. -func (l *Listener) Accept() (net.Conn, error) { - return l.AcceptKCP() -} - -// AcceptKCP accepts a KCP connection -func (l *Listener) AcceptKCP() (*UDPSession, error) { - var timeout <-chan time.Time - if tdeadline, ok := l.rd.Load().(time.Time); ok && !tdeadline.IsZero() { - timeout = time.After(tdeadline.Sub(time.Now())) - } - - select { - case <-timeout: - return nil, errors.WithStack(errTimeout) - case c := <-l.chAccepts: - return c, nil - case <-l.chSocketReadError: - return nil, l.socketReadError.Load().(error) - case <-l.die: - return nil, errors.WithStack(io.ErrClosedPipe) - } -} - -// SetDeadline sets the deadline associated with the listener. A zero time value disables the deadline. -func (l *Listener) SetDeadline(t time.Time) error { - l.SetReadDeadline(t) - l.SetWriteDeadline(t) - return nil -} - -// SetReadDeadline implements the Conn SetReadDeadline method. -func (l *Listener) SetReadDeadline(t time.Time) error { - l.rd.Store(t) - return nil -} - -// SetWriteDeadline implements the Conn SetWriteDeadline method. -func (l *Listener) SetWriteDeadline(t time.Time) error { return errInvalidOperation } - -// Close stops listening on the UDP address, and closes the socket -func (l *Listener) Close() error { - var once bool - l.dieOnce.Do(func() { - close(l.die) - once = true - }) - - if once { - return l.conn.Close() - } else { - return errors.WithStack(io.ErrClosedPipe) - } -} - -// closeSession notify the listener that a session has closed -func (l *Listener) closeSession(remote net.Addr) (ret bool) { - l.sessionLock.Lock() - defer l.sessionLock.Unlock() - if _, ok := l.sessions[remote.String()]; ok { - delete(l.sessions, remote.String()) - return true - } - return false -} - -// Addr returns the listener's network address, The Addr returned is shared by all invocations of Addr, so do not modify it. -func (l *Listener) Addr() net.Addr { return l.conn.LocalAddr() } - -// Listen listens for incoming KCP packets addressed to the local address laddr on the network "udp", -func Listen(laddr string) (net.Listener, error) { return ListenWithOptions(laddr, nil, 0, 0) } - -// ListenWithOptions listens for incoming KCP packets addressed to the local address laddr on the network "udp" with packet encryption. -// -// 'block' is the block encryption algorithm to encrypt packets. -// -// 'dataShards', 'parityShards' specifiy how many parity packets will be generated following the data packets. -// -// Check https://github.com/klauspost/reedsolomon for details -func ListenWithOptions(laddr string, block BlockCrypt, dataShards, parityShards int) (*Listener, error) { - udpaddr, err := net.ResolveUDPAddr("udp", laddr) - if err != nil { - return nil, errors.WithStack(err) - } - conn, err := net.ListenUDP("udp", udpaddr) - if err != nil { - return nil, errors.WithStack(err) - } - - return ServeConn(block, dataShards, parityShards, conn) -} - -// ServeConn serves KCP protocol for a single packet connection. -func ServeConn(block BlockCrypt, dataShards, parityShards int, conn net.PacketConn) (*Listener, error) { - l := new(Listener) - l.conn = conn - l.sessions = make(map[string]*UDPSession) - l.chAccepts = make(chan *UDPSession, acceptBacklog) - l.chSessionClosed = make(chan net.Addr) - l.die = make(chan struct{}) - l.dataShards = dataShards - l.parityShards = parityShards - l.block = block - l.fecDecoder = newFECDecoder(rxFECMulti*(dataShards+parityShards), dataShards, parityShards) - l.chSocketReadError = make(chan struct{}) - - // calculate header size - if l.block != nil { - l.headerSize += cryptHeaderSize - } - if l.fecDecoder != nil { - l.headerSize += fecHeaderSizePlus2 - } - - go l.monitor() - return l, nil -} - -// Dial connects to the remote address "raddr" on the network "udp" without encryption and FEC -func Dial(raddr string) (net.Conn, error) { return DialWithOptions(raddr, nil, 0, 0) } - -// DialWithOptions connects to the remote address "raddr" on the network "udp" with packet encryption -// -// 'block' is the block encryption algorithm to encrypt packets. -// -// 'dataShards', 'parityShards' specifiy how many parity packets will be generated following the data packets. -// -// Check https://github.com/klauspost/reedsolomon for details -func DialWithOptions(raddr string, block BlockCrypt, dataShards, parityShards int) (*UDPSession, error) { - // network type detection - udpaddr, err := net.ResolveUDPAddr("udp", raddr) - if err != nil { - return nil, errors.WithStack(err) - } - network := "udp4" - if udpaddr.IP.To4() == nil { - network = "udp" - } - - conn, err := net.ListenUDP(network, nil) - if err != nil { - return nil, errors.WithStack(err) - } - - return NewConn(raddr, block, dataShards, parityShards, conn) -} - -// NewConn3 establishes a session and talks KCP protocol over a packet connection. -func NewConn3(convid uint32, raddr net.Addr, block BlockCrypt, dataShards, parityShards int, conn net.PacketConn) (*UDPSession, error) { - return newUDPSession(convid, dataShards, parityShards, nil, conn, raddr, block), nil -} - -// NewConn2 establishes a session and talks KCP protocol over a packet connection. -func NewConn2(raddr net.Addr, block BlockCrypt, dataShards, parityShards int, conn net.PacketConn) (*UDPSession, error) { - var convid uint32 - binary.Read(rand.Reader, binary.LittleEndian, &convid) - return NewConn3(convid, raddr, block, dataShards, parityShards, conn) -} - -// NewConn establishes a session and talks KCP protocol over a packet connection. -func NewConn(raddr string, block BlockCrypt, dataShards, parityShards int, conn net.PacketConn) (*UDPSession, error) { - udpaddr, err := net.ResolveUDPAddr("udp", raddr) - if err != nil { - return nil, errors.WithStack(err) - } - return NewConn2(udpaddr, block, dataShards, parityShards, conn) -} diff --git a/vendor/github.com/xtaci/kcp-go/snmp.go b/vendor/github.com/xtaci/kcp-go/snmp.go deleted file mode 100644 index 607118e..0000000 --- a/vendor/github.com/xtaci/kcp-go/snmp.go +++ /dev/null @@ -1,164 +0,0 @@ -package kcp - -import ( - "fmt" - "sync/atomic" -) - -// Snmp defines network statistics indicator -type Snmp struct { - BytesSent uint64 // bytes sent from upper level - BytesReceived uint64 // bytes received to upper level - MaxConn uint64 // max number of connections ever reached - ActiveOpens uint64 // accumulated active open connections - PassiveOpens uint64 // accumulated passive open connections - CurrEstab uint64 // current number of established connections - InErrs uint64 // UDP read errors reported from net.PacketConn - InCsumErrors uint64 // checksum errors from CRC32 - KCPInErrors uint64 // packet iput errors reported from KCP - InPkts uint64 // incoming packets count - OutPkts uint64 // outgoing packets count - InSegs uint64 // incoming KCP segments - OutSegs uint64 // outgoing KCP segments - InBytes uint64 // UDP bytes received - OutBytes uint64 // UDP bytes sent - RetransSegs uint64 // accmulated retransmited segments - FastRetransSegs uint64 // accmulated fast retransmitted segments - EarlyRetransSegs uint64 // accmulated early retransmitted segments - LostSegs uint64 // number of segs infered as lost - RepeatSegs uint64 // number of segs duplicated - FECRecovered uint64 // correct packets recovered from FEC - FECErrs uint64 // incorrect packets recovered from FEC - FECParityShards uint64 // FEC segments received - FECShortShards uint64 // number of data shards that's not enough for recovery -} - -func newSnmp() *Snmp { - return new(Snmp) -} - -// Header returns all field names -func (s *Snmp) Header() []string { - return []string{ - "BytesSent", - "BytesReceived", - "MaxConn", - "ActiveOpens", - "PassiveOpens", - "CurrEstab", - "InErrs", - "InCsumErrors", - "KCPInErrors", - "InPkts", - "OutPkts", - "InSegs", - "OutSegs", - "InBytes", - "OutBytes", - "RetransSegs", - "FastRetransSegs", - "EarlyRetransSegs", - "LostSegs", - "RepeatSegs", - "FECParityShards", - "FECErrs", - "FECRecovered", - "FECShortShards", - } -} - -// ToSlice returns current snmp info as slice -func (s *Snmp) ToSlice() []string { - snmp := s.Copy() - return []string{ - fmt.Sprint(snmp.BytesSent), - fmt.Sprint(snmp.BytesReceived), - fmt.Sprint(snmp.MaxConn), - fmt.Sprint(snmp.ActiveOpens), - fmt.Sprint(snmp.PassiveOpens), - fmt.Sprint(snmp.CurrEstab), - fmt.Sprint(snmp.InErrs), - fmt.Sprint(snmp.InCsumErrors), - fmt.Sprint(snmp.KCPInErrors), - fmt.Sprint(snmp.InPkts), - fmt.Sprint(snmp.OutPkts), - fmt.Sprint(snmp.InSegs), - fmt.Sprint(snmp.OutSegs), - fmt.Sprint(snmp.InBytes), - fmt.Sprint(snmp.OutBytes), - fmt.Sprint(snmp.RetransSegs), - fmt.Sprint(snmp.FastRetransSegs), - fmt.Sprint(snmp.EarlyRetransSegs), - fmt.Sprint(snmp.LostSegs), - fmt.Sprint(snmp.RepeatSegs), - fmt.Sprint(snmp.FECParityShards), - fmt.Sprint(snmp.FECErrs), - fmt.Sprint(snmp.FECRecovered), - fmt.Sprint(snmp.FECShortShards), - } -} - -// Copy make a copy of current snmp snapshot -func (s *Snmp) Copy() *Snmp { - d := newSnmp() - d.BytesSent = atomic.LoadUint64(&s.BytesSent) - d.BytesReceived = atomic.LoadUint64(&s.BytesReceived) - d.MaxConn = atomic.LoadUint64(&s.MaxConn) - d.ActiveOpens = atomic.LoadUint64(&s.ActiveOpens) - d.PassiveOpens = atomic.LoadUint64(&s.PassiveOpens) - d.CurrEstab = atomic.LoadUint64(&s.CurrEstab) - d.InErrs = atomic.LoadUint64(&s.InErrs) - d.InCsumErrors = atomic.LoadUint64(&s.InCsumErrors) - d.KCPInErrors = atomic.LoadUint64(&s.KCPInErrors) - d.InPkts = atomic.LoadUint64(&s.InPkts) - d.OutPkts = atomic.LoadUint64(&s.OutPkts) - d.InSegs = atomic.LoadUint64(&s.InSegs) - d.OutSegs = atomic.LoadUint64(&s.OutSegs) - d.InBytes = atomic.LoadUint64(&s.InBytes) - d.OutBytes = atomic.LoadUint64(&s.OutBytes) - d.RetransSegs = atomic.LoadUint64(&s.RetransSegs) - d.FastRetransSegs = atomic.LoadUint64(&s.FastRetransSegs) - d.EarlyRetransSegs = atomic.LoadUint64(&s.EarlyRetransSegs) - d.LostSegs = atomic.LoadUint64(&s.LostSegs) - d.RepeatSegs = atomic.LoadUint64(&s.RepeatSegs) - d.FECParityShards = atomic.LoadUint64(&s.FECParityShards) - d.FECErrs = atomic.LoadUint64(&s.FECErrs) - d.FECRecovered = atomic.LoadUint64(&s.FECRecovered) - d.FECShortShards = atomic.LoadUint64(&s.FECShortShards) - return d -} - -// Reset values to zero -func (s *Snmp) Reset() { - atomic.StoreUint64(&s.BytesSent, 0) - atomic.StoreUint64(&s.BytesReceived, 0) - atomic.StoreUint64(&s.MaxConn, 0) - atomic.StoreUint64(&s.ActiveOpens, 0) - atomic.StoreUint64(&s.PassiveOpens, 0) - atomic.StoreUint64(&s.CurrEstab, 0) - atomic.StoreUint64(&s.InErrs, 0) - atomic.StoreUint64(&s.InCsumErrors, 0) - atomic.StoreUint64(&s.KCPInErrors, 0) - atomic.StoreUint64(&s.InPkts, 0) - atomic.StoreUint64(&s.OutPkts, 0) - atomic.StoreUint64(&s.InSegs, 0) - atomic.StoreUint64(&s.OutSegs, 0) - atomic.StoreUint64(&s.InBytes, 0) - atomic.StoreUint64(&s.OutBytes, 0) - atomic.StoreUint64(&s.RetransSegs, 0) - atomic.StoreUint64(&s.FastRetransSegs, 0) - atomic.StoreUint64(&s.EarlyRetransSegs, 0) - atomic.StoreUint64(&s.LostSegs, 0) - atomic.StoreUint64(&s.RepeatSegs, 0) - atomic.StoreUint64(&s.FECParityShards, 0) - atomic.StoreUint64(&s.FECErrs, 0) - atomic.StoreUint64(&s.FECRecovered, 0) - atomic.StoreUint64(&s.FECShortShards, 0) -} - -// DefaultSnmp is the global KCP connection statistics collector -var DefaultSnmp *Snmp - -func init() { - DefaultSnmp = newSnmp() -} diff --git a/vendor/github.com/xtaci/kcp-go/tx.go b/vendor/github.com/xtaci/kcp-go/tx.go deleted file mode 100644 index 3397b82..0000000 --- a/vendor/github.com/xtaci/kcp-go/tx.go +++ /dev/null @@ -1,24 +0,0 @@ -package kcp - -import ( - "sync/atomic" - - "github.com/pkg/errors" - "golang.org/x/net/ipv4" -) - -func (s *UDPSession) defaultTx(txqueue []ipv4.Message) { - nbytes := 0 - npkts := 0 - for k := range txqueue { - if n, err := s.conn.WriteTo(txqueue[k].Buffers[0], txqueue[k].Addr); err == nil { - nbytes += n - npkts++ - } else { - s.notifyWriteError(errors.WithStack(err)) - break - } - } - atomic.AddUint64(&DefaultSnmp.OutPkts, uint64(npkts)) - atomic.AddUint64(&DefaultSnmp.OutBytes, uint64(nbytes)) -} diff --git a/vendor/github.com/xtaci/kcp-go/tx_generic.go b/vendor/github.com/xtaci/kcp-go/tx_generic.go deleted file mode 100644 index 0b4f349..0000000 --- a/vendor/github.com/xtaci/kcp-go/tx_generic.go +++ /dev/null @@ -1,11 +0,0 @@ -// +build !linux - -package kcp - -import ( - "golang.org/x/net/ipv4" -) - -func (s *UDPSession) tx(txqueue []ipv4.Message) { - s.defaultTx(txqueue) -} diff --git a/vendor/github.com/xtaci/kcp-go/tx_linux.go b/vendor/github.com/xtaci/kcp-go/tx_linux.go deleted file mode 100644 index 4f19df5..0000000 --- a/vendor/github.com/xtaci/kcp-go/tx_linux.go +++ /dev/null @@ -1,51 +0,0 @@ -// +build linux - -package kcp - -import ( - "net" - "os" - "sync/atomic" - - "github.com/pkg/errors" - "golang.org/x/net/ipv4" -) - -func (s *UDPSession) tx(txqueue []ipv4.Message) { - // default version - if s.xconn == nil || s.xconnWriteError != nil { - s.defaultTx(txqueue) - return - } - - // x/net version - nbytes := 0 - npkts := 0 - for len(txqueue) > 0 { - if n, err := s.xconn.WriteBatch(txqueue, 0); err == nil { - for k := range txqueue[:n] { - nbytes += len(txqueue[k].Buffers[0]) - } - npkts += n - txqueue = txqueue[n:] - } else { - // compatibility issue: - // for linux kernel<=2.6.32, support for sendmmsg is not available - // an error of type os.SyscallError will be returned - if operr, ok := err.(*net.OpError); ok { - if se, ok := operr.Err.(*os.SyscallError); ok { - if se.Syscall == "sendmmsg" { - s.xconnWriteError = se - s.defaultTx(txqueue) - return - } - } - } - s.notifyWriteError(errors.WithStack(err)) - break - } - } - - atomic.AddUint64(&DefaultSnmp.OutPkts, uint64(npkts)) - atomic.AddUint64(&DefaultSnmp.OutBytes, uint64(nbytes)) -} diff --git a/vendor/github.com/xtaci/kcp-go/wechat_donate.jpg b/vendor/github.com/xtaci/kcp-go/wechat_donate.jpg deleted file mode 100644 index ad72505ce56882faf47353fbc27c54826df29526..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35307 zcmc$_Wmp_t(=Iyr;DZhBuE8w?cXxLNg1cLAcXtTx?h@SH9fAf3kU)SW5Xc#x=l%Bi zw*1-W&*|anVRf&*>#klktE*~N|K0fe832-(mXij+zyJU+&=276Hb4S^01uA<4~KvN zkAR4XfC$7u1|lH=vCz;_FmSQ(aB;A3aKHrQ#9(|fd>kBNS`sn}N@{9qJR&+qIx0qT zDr%}%5Ew*6L?99ngp3TL0^@+G{;#*cLjWuw%puG<91Io!77GRr3+C?#fD{0Lg@uE8 z<@;Y75D6Iu0TCV+4tkmhdIEa-zfQe=!y&-H!Xy6O0-!;U!-C*I&||IxuV?t5sj}n7wEymK``3|aG5kX_ad+&f+agHNahZTB$Owwr{7XrL-#JDimwf_ z+e1-6Jrx2w^nXYIvVZk30MeSm0!sNDUscM4_5oS326l3C0HvCGm<})*#EFoN0~H4| zj>jn&)(L5|U8XRbFD6&-gulx&G!INGqf_&wPYsxSbVVF}MvuZklG03dPE zKu91?X%0fmIAw)3Hxx?^VM;?Imnu!}GAZkc*(k|)pez;A&o=mSsK<};J)E4nK!5^Z zT9ogqaX4+$K$Y! z;S6PqiQM3O_1K9l@;M#nH)>h{5cf&i{sKT$xUWt)eLafJCA>X<>C% zn@R!cz_P}nIz-Ex$VL~V&B8ARf;Hfx_^E_EP8Sm6ut6KBiwmg~O(}ZY>F`QO;%^XA zaf0wP6^}MF78}?Rf>Ug?PI6KS{v8k9%`Rqcv@F&EeaVr|Aoc(NIjuo*b`lBYG7Ku^ z;mQD@CPagrvq<{bb}Ed#S%YbzS=|}7Iy%n}#h>R?5e)e6^ad@$E`8!)Qa2ceAcmrG zNs~4avZnQLBOIaEkY`L?pl)M95rAbRPSU%bQUf>C*mshoMPn)Ovz8iHqRnSGI!rP0 z|27zK1YXjj1B6uSlx!3d6S{35?fJQun2tAefrZ!~-yq*S=1{5;TAb;{Do{0{vH{c( zNSvbpx8Nd{Q)%7m7IS6jEprR$*3159Y=d=70gwTx-ENGChA9YOx!thH)~Sn<6<3d; zS;|k5geWnW`e9Bqs87woE5*JAySTHOipe&%9`?>JG=?-MpaB4bN$k2^Y*6DP;Dqh~ zrW27d6JTx?X;HK+oJDEY?-D@oHt~)qmcd(Yi8GB~I|-sdN-(&<6fp7H{XZKPpeh>x zEB7u$NOyB9dh*T`Eq`+tq(++}_ZBpX6#eTGM~n&eU_XT&OQ3|Fi^5bELv`XWfNTIp zi+^$F6+?)|)eGsunI=LKRv!T1i1eo`k@p=HLMI%-wh_Y7O^*LH7zA=LkP68^!?t-U zaOHwdAFz%xNMw51R{$KYL{`yPl%tqz7W)W-WhosNdgsWcszC$M1aOF=DX1#15Io2Fvh>%|BL$K}&bnQQv5b~f zWa4FYSc70x#?S)l!`)ezN$l?>Aj(j>qy(h1#8KSL2>-&VVB%X*5aph*WK=qGTET!$ z6tL+tFMRncA^=HHV!$O#oIMg-#xfjb6C3A%B@aela>W+d_#wXPDRrX`^&FUTzC=i` z&W4xbPxIpwesI;>WKt4~EM{lKNl zBtDm_HCB$=wI6_f;AAEHy}Ec}as{Q8n)<90O9~HrUlagjs9T29d>8&Mfng~f5fA`| zClR(78iYwUcdR9Ieq{s+o&CkQu6nE8mSNtC}LI zUWTn`Dg*#v`&HO4(i`0({v1V0I?f4A1_@f2LWx1AuXx5Q+=Ey_0I4`5Me-r1_2@vp zGD{uDCqd|h`5l?ycPfll*n=kpTZK2rfLnRm^}s%wnSsoO9x$I|G1!n^-G>MpByf`m z1q1LORw%-J*B79Jc_gQwfEi5J)$M9zRvmzOBoGD!$OTn5PejlBX8IgA@IL{H}KK+;XO)ARRlqy$dgZC$(aow3QY|NI*?6acEN!OM9 zB5rT$-lTo}XpFCtj{wM1tDNSIIetSfZA204e}3g&E{2=Z}$Q zBLBcT@<0^Y$W7y`)A?LzX+uDucElX!Q02(qdGg%ZEh6~)SFE9Ah88JU|M_j{V}lsB z{_lbuUHkU2iZr}~KvtoJobRysAlPY)vk3z36J1P#q2Psr&rlfv9Y$CJR+`T!P!al) zGo5B2O7%6-@To=i02s&OK8^QCb}aFOHuFEm$#-0Do_F2?e{M=_^Qk^s?;Xv!H;b9I zx84KzBoZKE2vHL-sZiPw04f*V>(djqbB@GSR&y(*2|nM40z^nhN(e;XTmvltaL&@4 zH$)$07o0uDlXP8E-b=A{2Yz~Izc4RsvNhI0X2;8etz)UbFr2_!43w(C_76^_9`cZe z2bf0xLeM>uan4Rif(rPa9MoJuS&3UxLP*I?OXa{U>KN^s;yl11r~%;rDZ2fq?7?nbNzBOckDZdqS^6KmT*Vltuk7p7v2Q$>@V2LzreG>6Kj6 z46w&GsPIq;0RE-&SYkc|D{zW4f*<&hl}g%lau3|DLkJ515YqNK4F7PqcyD0jL!;`; z(EXUHw}>{W;Z~~m?0}m{E8ce2tJT=5I`Vnq8M{iG7W$|H)BuxjA%I4#j8|~D0jcAV zz*1Ma_d%a0Rlg|1*GU|2q&UxD698Zgkv_zYt9|=*xiK!ZebQ%dwlGZa4qG{v^LCd4f2Qd8$*#A-X&6dD-!4IX9sn+3Y-4d%9uYjE3d z++RknIV@l)!nF0B^Fh&=n8+O1NmxzbC_?7^Bn&yKAgF6$qalqP*CJk*@Tal41jBv< zAB_s0Nq^9=ytR3m!n889b2#!#sP)B7JH0W?qRKAdb{Ij<@ze&{+X1c1bu zS@|d7(|aMdGOh4MDl=e2&LZgD0r({7iUa-6kv^v+#8nOk6N|SaE|@9To=!wb515We z9iu#tnQuJ$rwl%RjXM%y39$b&FX{K#Hg6iBf*u;P(3OE)QTr7xNM8uK8 z?xa-tiVQ%dBn#TeaRqYIx86nT4yG*N{GLcJHcg9QAH?B3^4R{dt+K6SMzXV$Z0EUt z_RPKiFlL!|Wcew910B@W50{PmF;ZCSbDM>?ro6T5O)!YeA$sSl>y69BczR2VRRBPLbtk_;Zb#R?HzfEsH86J(GD zOyGgk2+$s7Z|3rK7&ui4tz`E9iUg0KsU~`sXf{ber}h`X9F{S@QGF9dzf^}tHe5y8 ztiee^PXuYER0rQKg#!*EKcB03|LdZePNpo$aRUY$7|;A7ick)DMl%6zcz^s0WhO8` zvg7HRJ_?Ik%k01pC=CqKWaMa10ts1FlM+)3X1!rd;d8W-tt4Mv5IZ10^zpWoMV>+g z4gt^{8k40^iC|k`!;(-9K2yTD2+J&Fq13X=4ad-k%F|DhV{N7)9_Jz#oeu=hiiN-t zGzG(|@kuf$(n~|Z0ElVvBLtrli+5yIwM7RP;y{;!v^^l%IxK>nl!*$ggPnw5 zRanV`S#Kp8*i9!eZdhQnr1P$3&8x|^ z_(jx4J{VS#RkiLA2)i^z}HJAuRtWs|zt3;^Rta?_4~L{}6ZNsAAP$1x(;qBv|Z+t=%msI)#q zzhD|!gCr&-Tijfw%Dgi`a#r6FxV2+-Ktp7#igiafEJZcq(xgkxh@}oeGQgSU!*-RG zX6)ukXOAgg5jRseL}ZG#SF~3PHCH}E3l61Gl(Za<@c6V$$8aZ<5T+`?QkEyN`jf5vqARd9etb+|CK zDIALrVAo{-j1HrYRGB=@|Bn6wiuq4?=O{l1fZajJQ=ENQ(wEG!Ve#??O|5Xk-$up8@%=-?oL-acv0&LRYM4 zRwlLtgq;p@;Yk7C$OSv)J+C_lGmSimKzaiiy0#X551fgKx`fF2qpS;}R zI2BL-7){Qrz)?s!+Q_uh3evkwrk&b$U-N$ik8RJ>9+ zCS4Hn=ky>#;a4OWV^H&FrH`RhKo(Oyf!}z&rh|8e?71h>xBz0+KWqa|=)(r%!a& z4ZxjsYQ$47zNeOO*LQ}Z{S&8;bV6esBZQ*PAOLm>6@cz$m^mvY+OQt0gC-b2ntG27 zyNnTafClQq&k%&HVYyJ}5v0OQ=Mg$raLRRJq^=rTX|F#d%1dad*06>6) zg-3uzgoS}acqIePLLtGz0bvM0_K3mh$FNn*=tW zF^dA1q%V08fiHv@K4TL9y&=|qE$W@p>rh`>E=R~P71AJdL^;nt;Woz!1s{@cLRbm8 zki(F%#Sw}xNl5UKHXnVmLf!5&CFr;QXg7uiC4t^yj?){yTo=wGE*nj!snzv`Fbwam zf>WxD8v{iH4u({95<%Hl`X36VR!|BF|Kamr4Kpkkjv2G={yoMbZKzb+tkplMzWqQ>p6 zcZ_c?Sdcr+nlwS7PPqxbA#;$cPD*9+Zcqic{VH_`WFR()kzPMcZU+`wa%(Oos1fVr z0Q)JGiO>o&jn%df2x8^ACv0c~wd`rCMS%AGc zB^q0knR{v%TDR!5wc*J-vPda-_XhwTti5G%b?Q`m4%rWiD!QM<^{tvezDG$A@4@US zt80`Jlc7EyDbol8ItFSZ3*gbRu_nuFY{P5Pc`+3T3(2(?N3hKOOes98{h6^rRkUJD z!>R^DDB7haTyP? zYBp`Ad@GLMFmzUGGH+uNhx1AACBkYbxmU zQGi3EbA=6ij88UU(qpPS7N=dascOPymKlnVO2;pI${6Kn5oonSnuVq*@cdVSL@5*dRuI>L-_8kL)^hjR}zs4pV&c8pQb1%(RkC4 zbG&mjI3|DWqsy#uDy7Tdx2O00Jxost#sq~s<}%1V4Nk#fyK=5E{qbUM$F_kpoM%-x zZ#^G>9>f{7w*`(=EOr#4$y{v&P1f%iklA8ktDo{?>QI^2LknhRM=7TMKKSjjV9-9^*5QN-+^%|y z{$9;cfij@_PIKbnvOCEpB(^y+YExoD!h7mC{)7`lO7v#xw1@GcdQSuof`Zn1BA60` zX=NZ9{X>d5+A7V*H{3Rvv>(aj0MFv^PyIS~bKJL)FA4%#wFkl+8XfR#ME{OjA9U3I z0>Z_-j$;a-!}jri8#d{Ghiw;bTJ?5CC>`CplHC`wK{yCCAnD&I&I@++X)iCn-oJif z@`eOn&4z2N^u8GLK;_ zjyE>|#zU&Ft-M}R19FRXYARQi^tCD*{WlHtx0#U(`CUEU>+(U#P5RMZ zo;!~Jj{%97DK57=s{a&~_3mHU+Jg$d3)-Gn_gBLNJr1_d(JCcQ!dSw}hOrx9Vt1#I zU;F4cpNNnA`Nn=Z#eX-!G5ldTmXo00>XcN0j%at!(@FWMn{zD0XtJltKgO~{s;a&> zz9GY_UCdM#-G~sIXxlZ9^Q+klYIc4A=~#JgDZZc%r-@OUe%F=yA}%Hr5v=dmbK|-1 zZ%&)xhTt+-6zvi*lS_isRQ&xuhBDU(7 zXX81TXOvq~h03~BEMTCyQ~tMvCwGcUyLEK4?`19xj>CG<>jMB(+hZtvq^?=wk3aV7 z4OAxa=TCg2{!r!oPe#Agz}WOu{yX_AG`X+HUpE@uqV@)gdL@|jBE8u?%Dle$4YMag z@pk+eDdug2C-aHB}ZV=Xo#DH=wSc+ELMv3h4N){SY8~UG z@}UGlg{%hXt*bD?l~L$*ze z+yC9;AeU6p5uJx9PVQ!HA}>fC=!n+$(IjH;2AU%Ze`h05)sCr^m9?MVK+JmeNSwej#G}b$H>ED59mtlP zV&f#~6o=DTO@y6m6Lys&1-q$XD?ijtCFQSa-W|yvc`vc=vBdGkQllSE918Rs>zIg` ztGtV;r8~4KOCcUh4)flmPOB^@xz(@(XT|Htn;+^1T9gP%d1pH}%>Fu@Ni^r-LjlIR z1jpUP5Km7n_JUSpb!M5`dtqiI6O{`-+1|a!A%=&-T=#LoN&Vd+;T zWBH?(k@&QR_S%AD3B^6`R~GQYc)7AP=HE!d3U-sjqSOex2u|Qmb{RWVwS=dlZzmb0 zS8%rH$>; zik`<5#HGdH8j02-(G^geE-L!98G;-F?>gHA$G)PU(5&qCOoifYV$ccsHp^{}Grx5) zI>1nB+V;h_D`RyeV1-F|Ia9b^Mdd+0-Nb2%o;>8b-S~%b6?g(lB+c5hJ z!0OxQ6nx4r{~AZeA`ZrQYx6v$EIRrCn$Yj-jB14HMjRE3sM@PacAHEKuEpBHp}&$3 zAn|b?Nq{;GxmTl$Lr~u!{o8CoIUhXFy0q$oWrqv>7@HTx)=_pJHsxUI^4P}Qo3Gh0 zWk14TDmwn5`dNsdPnaQr8)HATAs|YjC@whn9j^l>%)$78H;}rMPGw6|k)<`sgGa$W zS=Oc%OAq}5Ya2s*N~5pa25-1swv>XBzFif$q!`k&>Jg5suWfs6tBsD+v63}GpI|8& z_a$MGm~V@*ihu-#VHle%&o@-rNc0urfmwI#9!*Z5!tj^k%N5fafASXTI^u+Xg zmht?tJoavI@^brzpLCrKc8KQNDGPr?$@^5PRze9jp`$O4Vu%H&CuUt;x{i+87}0}& zemL$+xdJ0#6Y>_e&CKi=sCXd(WHf~~u$#1uc#O8AaoQ=n>a>x{^$zC(Wwt( zQ?|;J=70o)q#qxRNJK%Q2?`Z4BY1`Sj_LBlAFdZ52d#ws-0wa8B^Q*; zdO3yNtmV;YTHE`dz9Vq3$q7mi)?fwrX@69Y)_qYQPoNpL9^nn9i*t!zF9E~cMM@Uz z34M(*jFKZ3OARBK)-shikHR3SznU~jz`m!Q9(pm5E<@jI@>OAWWBgX08xv)|60xVw z)Lhc@YsB%9gZNXN^tTewtQXyax7}p$2n$oryAK*@*@nZ0=cKCA&?+{J4bdo>}iL2Ih?ZNhQ=jN2=7vv0%!VOHsw55PDvd;aru^Ma3>g(l;kUGLF;&kkR6LGWABOTut3J zsT#de=p)+Z&jHeQipo!0++XctL;$zC{&LM@`VPh{SQ82@PFrtmWpUR!UUWnD-P7q` zhV?xicJ-&PTI1JlbC{pxZb{ByO<4g>m;tWYLD(s>lx3R~iQoS5!%!jJBxVF)M@9ug z*MQycaKh% zHo}YPv5wX?tlU3&d1H-7N>gmxd3n_SO-`H^+~D)wtG0-Ttr9;6wZ8I7y_xo*V%TUD zMBKY3f2C)5Kj(OkbXP_53|D&l^d(-|b4=~N2Z;l{ZddqpjbfRUlr z&vuEn>hpQljo=YH7W;)4fAnF3m?h5K zS2`uTs3TTR`V&C%*SWcVmye-3w;=A-`GlnC5fj{=cA4sHikQbUw0xBhUBey5sIG}O z;L*vcKudFMs4Lyl0!_dd?Yu(qRyDYkpJ&$lMCw>xo# zPaUV)w)AV2t7VM$3y!{fb-sJeq6Sh49dc_hm9xUsZzZti=+~c$yK4t=s@EL!VRO}i zGne

    vfDVV9opWVM)obi|wj5owLbM$*?Wkn!Jjt#icL3;m?h>wcAZ^lQ^I~UlZUI3yO%6b=$Y3qf6H(Vk z34Y`os04C2Sf1;|eAP9x_sH6Ux!(HqD01EuFkW#$UpKTP=+qkHO_uZ;0k&3^L$t==ULGSXjgAv zFCew;mbo=`e&j5qsfaVZUxYokptToRbG7`qm=JMg(&T3ZH0Cf!_H2;3jb(4smD}f2uq5Yz&p}MJLRlmU?0^O(sG8SQ5#&q4Gb*X05&6Yu@ zo^NQapQ_b$cR1Xw_NJvS5<^cm+OaGIAt9&J`zBPU5vsa#x9f$QgW`F>p&XTTO2!G^ z6Uv;ERS5s+7-}_}Lw(id1uwBsd`Nx_N-fD7J7UU+nOd=NkHwbC9s3JjLR1o}F-}HJ zs~z)Qn(K6fN~UeW_)yw{oZ^R^&@*Nz~MK($wjAxgxAn(cd01)N^}E-r6b* z{snX~RLV9{ugRq77|nFbmA4`Ge|4AlONj}M04C=-rdyU;3yVglxHGNiIF}oPVQnTb(Cj(ZHRTP z$Sc}$V>j7$*J;0(F8L|lq9w(asMg-S*QULK z+h{F0FSDg|0?t{%qUKAQt6_!2Cg-*g>lwYjoPvfN|K=!j zuO=6`pGV-fmszYt#A}^R-6w0gLXYC+gsF(W=DvwA_=#Qit-x+Ax=mJJ#5JDh`>Nqw z=BKhT-`xw0y&_uT^45H(EVoK5p|-&06UIMEPqZu-@AU~7tlK^KoUhwiQQLMIjgGBocy-zEhVwAo>#vwMUKrY9Dx$b0xip)^F3(3EXCYU z@;0Lx*vj;b4)u)a+9}M8uwfC?@$G3>qMQkzw++=ns>|E5G)q`UwIlRXywQ&NZKI;W z%*a(`(KtTi4w=s(o<>vNN8k;acfNDo&eGa~A+2g!%&yIqky&+{<-9E4Q+e0%(A!3- z9n@sEHPv}naUA8D?HqryVo7svfrzrzt=#Os$#2Ui;v}=}TwlSl$06)IIV`V-N>^4x zLLm+;adu~0e{)sONNgJuws)u*Y+SnCBmryUH_^6re!co;Fpy{Zr z4SE}|wF#tP=?wU4d$K@0CI97TBvJgqSa5bqoY!_|st=l=t4G+pCnE*(c*_rAMR)C} zEtG5vGU_@qWr1G)6~bx$E5*7c+IBzMXd-swSnU|PuI)Kcr9%MUxb*c)wZkRS7_{s?Gcd`?}&!wWJzU${CyvK9ukn=cw%Zst5bCGb<>Q}N>r-p{8eTEHm-LCeCDq>|;IW^M@HgFDdh`!It*px~Q2zx47H|_btUR1Wbe~NfWbBSq#u;6UwR0a;`rV^X(7&`X zh6v+QKUu|W2&vy#NyqEMaB_TinBNJS(m&$0?%yr9kTir(_P=o{(uEv!U+LdtF0K7~&@ zm%38%+3!I(irF*L%{Y!vBGNw;z5s>5dhs1tQ;H1=Xc^1q6z;VhKBZ42O9A10M^*OW z5bY0UpmCNH2DLo*7qt{tl4dMSc7f7IlI4Inoes&QtaGTXpV)z1o1(Ci)N@BJn8JV3 zu|Px^((S4BX;^(<=Uwtv`|lfeoA>`E}y#f>==t2o%?RBjVH9L zI>kOXm&lf)H-r|{rn!vqEtte9fJDj_FIp_rY(j_O$%G}Q-#9!F( zQVf|HIr!@+HV-vjO5Hs5{klqEMLjO3IgzH8gqKVqW`2W4rWEHl1?| z^;IY$pSqtoM1ON`Jc!5sW^wNNmQegAjZkm<&Vv$)46Zd|O_)eCna0>z;}_e4k*y^`a$l(4t^^VLZam0uqb9)lzXsnvCK?UVgcvHn0Q*q8;K+b5aaYzx* zgNA3f&Fyj=&$_X6htLO1NB}DJnLfGr#3MMuaZw7MkP@03!z!xY<#}ndF<*G(ja+Eu zERL}rmzs45@GH5&N5t1Lavl1}jhnsg+!O;Smh&Egb(*Nl>jK z9QqT@>HH4L6w@P{sx0q6{@P-9EB+IW3%c4Sc!zMo-RExc#$nd!-{oPf1ckaWMLYD7 zvl2#p2%#Kp`-g3jnHbeabF9+3<1RdZpiZ;&z$US&eS9OY>;^H7J@6}jQc30w5+e-t zNyrnOqOoIYNHe3YZeX^A=0TpwTC=#>V=CTcL5ZKEOJ9fR-gc3b!yI4x7vM5VhFtYl zeCC7fI<|!VFq49jW9m>rZG*GRpDII9Pz+?yGO)~GBVyMc+}&g0m*CPj&cAn*2fdnd zeY1*=jp9UvmK{YdPD81UG?i!YPnuy=T0L`m9B+s)#yV0#;$F$_OURdGYoB4&@>HqFM(dx1T3sJwth^OJ>E*j&UHE6Lg zh6fU9ia=7lm`p+dZd4p*kW%_Wo(<}p84d;xBQ`yUmFB$@jXMq8esRr$ai$pQ!Ms6t zN`Z7DEk6C94jbOo#{E$JCf!4CY4X(cB5^oLW_^O|+mE1BX{(bAlv)F*|0zGX3hME* zLVp)4Las*iQiA+wb##=mJIWYmcrDg3&ehG3e?3%?@g};bDACCi_ukSk!Rap`KTXJc z;Q52)_o@1$^+;$;dqzzj(Lb)*b;~1SMd)rMsr>w@uhRnGq0XeSJ;}%iMvCTT{s^n( z*NFWK2eD{eXuX%WB-;ruv4l6a^B#N-Q8oVRrgaQGr@oG>lnwe3tHEz4njB`&(OpS5 z{~f|4E$r!d1X5_Nh!D-` zZs~h|heLno>LnRrJKBS>UQMMo109q72xvOUTWJ@;&n0BjM&)-f$EVL*@DN(*1H`!I zBQfa&NZDDR`%;aGH>dR;d>&1-$1Ia=zD7f=*@#E^xw4Vm?w>pY7Y)x3@9{qLKLilO z7fFlFCaK7_tyE6fIl(Fu_ooJz;N|jpkM7t+65W18BK@MhK>ez=O!5>7WUn`2!>vQ^ zt$wvE)3$J2C`WP5h&7gD(Q^fJHe=BqXY;|%j5_W8$QPE0GhIm{L}<)B%w$m^84c<(54@pO~-VwM@k>teRKtL>{u!gj&<0C zyOTFl_2s8i-LO=X%#ms{sp@(ORS1$#2jm-zu0Bu2<-39-J**vaw23X#BR0#-+HG{9 z4T3*wx>n*gz&T-@_s07$S%a>!^fM_o4h7o8R_PH;;}}slJo7et_N&D-4LMw0S*2Y2 z445mvD_bADUYE#S7OV+KIqjaT9K-t}K24x@w5!hSMT0(1oF6%bwj7}Lnql-cONX-b z#OfRY9`2?ItCk>S{O?|n`ZsfZp>-k(E17SaHou3z5Lhfq9I3QXROZOW88I<#$E1xN zmWg3cTz4s}%USn7e8oeK#trp-?_OGb#*K!N%`>JWk~c#m-FKRBSf1)NzOUvWaF9 z?;J!1$D`G;OWI6-8`?+YHOY;$I)*QKX&Tsu#a>>>VjX2AuuD4ds_L9u@<4mPRK8_rd1l5@Q6pmIfzS3Hii9#46$Ge zO!0l1fPdc(`OC)(%>358EbH_5Lm4>l#ZK4xS!9RWfQYrtl_biHkXQ^d3CDWBKY^$A z9z0#+*l#^4#{#bLF4(8*DxNp%RwZG8_g87$gqAzD1Eb1EpkFGxLw)?}#2;{EexB&K zq7LIc#mYQr{oz6VK&?R_@+`6PRv6Sb2E0Z{eJHK@86!FO^+X`zhGf_~!K_z?eUCaz zg>r^3>XdlI4gFXk>=yX#XMmj~V*@ma^t!fP7uxbxv}w+`Mch>l-qjaRZW0ftO84=A zH+_aaDnfsP4X9RI*`2j2D#=$B=17?KsXk1su$tQF@v8SmvdvE{XBS%JlWDvu#5vu$ z>hfCT<6P($?u#ZOrC^w*eaY&2pMy{CI8@K`7NK!9z|41eT5FEb^UPQxeaW6$eBMj! z_hfdQOvFB7Y<3eh$wxm#4)&z^g2 zMm1aCL*52Mo~u+!8icW=IZe_mwlNgml5z72S=)OrY}|ZoI+Cy$3tNZVjg+O%>5aXG zKPZ|Fgs$}QtkbD3$p7ZEdh=o5VYiQGd*Z853v1I4@j0o@FzY3OK8$0BY|ArCjG&h6 zQMDZ=x$b?QUMJX5Z1&zM^8>i8GcJSbC|K;T+w@@_aeT+;6h|2=DzWQF0yLo+O~OA> z?m%%(j+9>Hx;=fjC03`If3)sG4u~61P}6n~a^9KBf>fMY3JA4!e7}#p94?N1yoo9& zdvibfOz|h653?&R{mtvh7E)`1@^C!O8Crao>hTE`B!vBpyv0ZdngdtO=W>HCU2yqX$WLyxJWjH{(I#a$h@|LcgG`a@tIBQ(}q`y6Rkyt6k`|D}c=t%}wE z&r6wq0tZOIf@-^MA7{vBd--Xqhu>XvQ?KaRN@Be-K`d-+I$ikw@sX+GYkiJJ(aa%T z+>|VyZny@fetvfPF21ImZdYB;gQnbm&)szNQ>RV^I-Jv??BVaB6Mt^5;_kriU)EeS z(Ix7)(q%=*!)q1omR^WjUSz!-+V?etXsJej0ouxB^?C1%_%$2z4=N4TM@P!)vy`2i zG$RWS^X04VId$Aibyaw+5(TU!ql;5}cz?gf1r5-gqe2GME0ZyPEtoQgqw{lhORQ1- zaUonLF|TTRH`~bNcNDh(9qAj{*O5jntVoP3_!u3~3nDV8P}%TdBvLES`R?a|HNm}Z z1gG5H=2!H6EuQE3u0uJGv%j;=C1!V=G9LbUhj~3BxZ_4LIJf^}xvI^&c0(9BDPpTl z!?!Zrmp_~}o%aXj-RF* zu93JCA>u1;9r3*g&H(o*REUs`0g@RzH0fY+@04|$@z}4WBQ_~>z}ZBz?#w=~puOP% zC$rBK{!zy1`=@GP*m{ySFnGSOuh}z5Y1k^qyo#&UImys#3#spZO=^ms9OuPXag~`jOA@i>CsxDwYTt%cM9Ej47lT#e~_{ZFz)TMGGPHw@n#NiZ2 zKZ-s!bm zPyRTbQ6k|G!V?9-nqq`!8h3)novv8xG|M!=yfOAH;<;pocsq-Q^f9VSPP0zzfLcGX_w11Pa}Pfufc~p_uHC=9kCsiu^NVJ5I^i5 zjNiGQ_6Xz4ddE@NOK+TdnR>duPe{{*sf>ok!3V&b;o}aTA zp~-gjz|E1$?E>W=7j~<^fS+gsOTW7@(PqD@!9a6E=?`VX3BA9}MI1-q`pPqY*%6DG zY$@vUrh?H+M?-DYOcg23XrZZaq0hgL*s1-4g={Vhzl<-#nhJ(&dPBHw?pAq&4i6%X z?A6FG1zZah6}?%K8L{^p7~a(AW~?_Eb5d+*@#|V>GR&nCR8J{S@)4Dk_o|=h%YtYC zqaTJ#@$*txOt*rw#>tcCuF5!Y`4fB0dAAOyUj&>cqsmfA{p4d|IM*gq8nwri6&x#v zp6sMk5H;l@cg`het;rihIpvHRt1q@RUl}7B2vCNtG=}U>z3i+$r+r|B#UEQ52?w>& zq8_vL;5H@jiOTWT=l19+iqO!WQ~HK`DdMa@=xn_%1rwopw*;9MWzlCGcllx$sHlYEIiXQl5*BEb!N)4B)wv}pKEYva$fEw$A{ z?fh$&)HqC@^qBOTp9eT>AO}TOkMR6CDaz(kd9U`Ex{f~R>__I${otL5bu>u)bazm( zJ%{-wPL#o=Q(9^0?Dq%r1LO+&s#ye+=V9dKY<(`Tl*m6)2J^^wnx8kuw=Hxo z$tm=d_$P7x#Kc8XSx`=7O}H{~lDsxbC?_ia(+CIo+gV-VZ7pAQZCrKa(^h%7GI9O4 zPIR0k(f@S?4Na1`3`=xbGu_i0QAKHcmM(xA_zNe35SwHtGNZ2LQON3id{@y zBRORekA~CCC4HD$+%*_X%f-#(_OX;sRKmQZ_0ZJWz3JvZZxSGjK;I;||M7W5cDAOz z*De@wYdl)# z1Ua-b*yPVydr+op>r0LPKOV5X!v2DnDahr?oO?zecUam1MpM=B`KbfDQL$9>KZ~}b z$5GG8M3nv3LYXp=^`vI|6?+r!iy*tF+I2J;SIpX)GE+2qg%le4TV(tuPyYDkg{tgK z(-?aFf7pA(x<)PMWAzdI9K|FYm3O2e`1t9^H#T^rt$)OFzFR5Cx<=1(b$m>7^U#lI{?sJC_pw55Di`TmK&y*IaWwJ9FmDnSCbibD!B&YGJ&T zr|+LX{nYgbgm)9OmApwf;yV;TbLl_G7qZp7cq?u&1&18rucH5ItXWDwp&LC89AeEn z2~hV~j+RGC-wPU(h9-$v4*%I&y=yjd?He?ZDl zJbF?n?8dF%J&M7{L@M;3uC!{@F%w-u6_mzsHcpo zx$q=E8Hik&=vEaVCQOQbnW(-qjG8bH#G1=acJMDs?sa`PH_vL5yg|MNY5!`oPrd*0 znWQo44#4Tgrh0_AMcTbeHRqI&l}&0HA2{40LPZ~PMV z5UUi}bNMH}Kgr((gikmHC!o`**eO;J!Fgo$STpQtGS11AEjFp1Z4UoN(2iBEG@^Z` zJMQyjaaWHmk1D(b?C`#?v6QK&t}HmlTIDVd|>V^S&htRtejF_X~q2{_!ZcZLkkJ@#l&04pp1X;-G|2xGivJkybHxB ziHb-l)zG4lAqoEjQn-di-*41G<5a^Z7Tizy1(C1bMcqrWc6CA~#M@Is?Nlf~qT!0e zhv^WEJ(W^M27+*c zN5z2X{|x!!GTSw;O|!yH0qd#urX;QqW%Nj>E#S>S0bo22>F09u0@W5LdD;A^f>3r%rh}*)wa9z{S|5_4}a+a=wUORjd^>+I2*qUr^ALvqx4`8B->;v zphGuNuE!;wsrovX)U>XiYJ1RU@Elb5c=fgw`8KX$9QE=3@0Y7B&kz{7+5b6m1`g?j z{7O;|eQr${@1n|?Rdm|m-b@v2HzDkR<8(Y#gsm zM>Di1nE`|Jm)3Dg`c}F)ufMC|gioruGs-5=2q;X|-#cQY-U| zU`nBbG5dY%=;u7q{1eS$7Nh%?A5|0eumiOTgXz-aob@h;!k0$KlQeqmY{b8C2P_}~)7H0#yAnKD#RM~z*; zVu7xAGl;?VBT~Cr@YErSdF$Cl<^x%d1NA6t>(L)jM01JIc!h=UWE=2}TmJulUZw?XTVY@1o1 z8i}NL65N`{m&;GL>gCeDvB76sEDYz`r^^4wN~Ff>UmMF`2mkjSG$p*7%%;sZYP8lq z`BAZKaBv*N+^j$U--{G{UPQp2)V^7)2cPgh1zLISa$mamJd9%S-|SN$8~;MR1RJMy z_ZFUVFI%mCur)u2#kPR2lw_=}#rg5n-@iOlIz?y=k~I3NU4V-Z(^bMQ+337beC_v( ziov|XOZ6J|RmKrI&*}0YZkFp>&P90LW|SosE}{BTP1D$C)mlTqf0lAeZmV3xjeW|UV(F%2J)XMgrrN51*lX6$wfhloWwmzv_#ZTW@S@MX z;#Y2V`p?{;_p`JD7JOg2{B#Xd@7q1XV=nBaMcuo4k1BEHTW!zmF|!Bn`#v|hvq;Mf z^qrwm!O60bu|<|E$C(JLSVOsSMVI{nFk`u}H?t(HuY%UPuHo_*6mOQiCE4_;)lQ$j z8zZg3>dN2wOc3ffQGR9CSEKmx!Xjl^dd715F!tJZn1H+W^43SB;=+LNs=eytZ8Fqg z4L3W#EWb`h%f|zA`S!@mulLG&&4W_TB^uZc+@FVq@;D3|$4o;>jf6d3r1q5@pI$y!d?FGYaGcX|iEvNa2; zHgp$2{?s1b)#rF=YnEMwS-C^-@`=|NS@WV`D{~v}fSXlg&6?bm+(Q=mx_sOs$@S>b zDU~IxxNdzVNNjyC*|Mx|un3XhvGK{bI7L{Qd$8tG|QC zERROvfjwIBjb%F}6fQ=2S1x_w39RX14?Nf0;~N2-NTN+6ZOZNW3Dqmz1KiJ*o7nwU$UOts@}ce^RT4g{d*|fUDJDx3?q0ko4JY%8^RVyRZaS5gvnlNdY z!_sBV@I0kso=ghfdL>}&VbR!W;_&)|AQN>ome=BZp_AqK62&X_puKNY4LTYI3nM{v z$mS-Fe?X;qbLyi<4_x4s!Smy{9(4YZq6){*_8(Bv5$s&v zsZHke_7BL8`Brn~nfK?Krod8%}~->NlxkBs_f&V#%nVicr-?=WWE@D4|ViDPeo>0%G(Z#k_tLL-;60JEIcQ zrnNilmidmn-Y3?#{$O{pYp9M>ZEiTf_s*MpY@o2Lh3QeH#e%hsXyagdVbSs~+Bu*zg}A$ku{b2Z`kzsvy!gMr>wW`I(~cTb*VjKWDMUW6~@0nSeDehViok# zo!O4xQr%^E_w(}YL?yH)%OvZ1o(1!-;u+P>kz+cm-f_-V^U0*Q!3d^;Ad2A>jUgs! zaT^&g;-K!*VSB>Jt!yci@7CGg69*tXP0c%qZpS^A>(tfuVpKoMRdski^CzX+l5ZHx zBxKA-R_>e)N~3MlP#dI^H$!S~HQRKYDzB}ch^#c#3yQevXL#t^?S0L%9sr`7+ib@Z z|A0vRrt|0@cyAz5%J&ZET2VRIi(5tAO8VQwvK(ot3mbajf&+~iQ!b8tL*MDC#6t(k z?~c;eBsr7+)+*f@2~(-Ot9XN`r1AY(HS-ylb|{-qj8ARVSN4ygM;qZ5(FgP@(SO@3 z|EE3uY2#$akB)g%=lMkH`la-02Em+gUnwgwY6o5D+gY2 zfva)P3wvEciLu>Y^P3h^rN11n`K!0B&m!YptlXlLS(yOGrN{!`mrNc7{=}c%V%{N0 z{j7HU6v3n58D~+XFSRlbLJY=+m?J8CB|FCn)?=G3Jfy3KqU5{ z7f1guL5(~jFZ6;7yerB=Jysm|Igk$8Q7Z}->y24j4EpbCuOY1lQLV{QK%5l3S^V8Vny+O(x02LjO01bOy-(Q zu58X4tRN)9H{)Brpqr)AQwDP#s>6NF;*!^k%w)`hgMxD!8v9CZQ_$C>diNK7d5hop z#w$lPy-=?!43u=#XM7bP{fL2-D*GBa7-O^)vUD0x$lV{R60J*NZaP>a{%e7l2v->X zw$sE&??LSvR;gAV6&ac<2k)KpUe4r08x!HT;-`lKpj4W~VgfwMfW&20gJxgmA1z z!ed0v+Kzd2C!W7SI=9@ zP7*ibzFKcH30lIKEdGA2qBuh?`}*9>;xp}1j>oUZepLZiKG4WVvQ>l5M1Fc^k4V^y zedw?5mL)D&LOxI^p8NwUa!BdVP9;w47K}OmYQ?%%lcw}2g1Ikz&d?4dG zQ2DlMD$$$i>=yO;CDqK|4<|Z%T1UX{W@8`L1-h37As>JR@@Cqb^#ratZO%7T7N=gC z)8fqidn35O@7O_v>r}WrNZ{2VVN6EN>D1u}{e0d>VumT9Sh*ix2?%*oDJqHEIbIvh z(UIhjXTRp+J8X~(#T3YqgF zzJF_1e>p*GnfK4CX48)B34y_8HWYCL%BEXs{Ag;w`e}SmLC@Xww-%`!Pj_EPfPtEm z^%ep0Uw>E z;5LT$A+MKexAdL!!qvRp^%hht6*@ z<(BzOUtJ{c@tA+uFjzmNqN1JK1WnnyDpZ3d-^IFR)Iu{f=ADVW;j15!9r+b=<8ewo zODAOubF%L`85gCfnfs{(i{ zr$<_kiAJi0g1=Xm|Arcuk!|U8DgHnxRL*#+PW3y^?%P_6uppVAGnOgi!rwPt{gH^VDawykd z>}W>cJJQ@NZbLC({8gcIa>21tbZO{4|FMt*H79#PoW4K)VeEG35X#KEtN#9hmVx?+ z33z+&v`ysdhHY)n@hJ>!2)|x{^1Me%CGK@CoVCFky?Th#_7JSTarjJj&Mswyiq|G? z3X@Dd5d`NBU6U0p#8WN6-#WswCcwc=ZfZYSOwb13j9#Zsf=wSKaroXlXy1P3?p6KO z49CX9^#)CX2osen{%x)MB59x>Iiyc_1 z+%sIoi^PXN;M@ALt$D(P6Hf%?K9=!|f6vU^=@8hh54tG_pl34Pz|f$FJsgSOyEV-dU!J#pdEQf{ zDjLmC;s4J+p#uPlAx>JswcBJ*XJN5I!YXV{pVY4pkBxRwywsb8_mnf`Bb-HU;lH6d zKP&8w_Ou&BHQ1y?Havh_kT46dySFGU5CUfTRZ5Zg6d+ZvR_i1Sm1p_?&ZdJeYUcLq?JBAqis7 z79^T1bfASp36|O_E>SzPZ;CURpP|S6UW3k11vGrJ4B(3C<^G|RCsS?u(dkE9h+76bV4$hg|Zki zh3mpoEAmrcDyW*)4x#N^lZ-(mc)|-LbP2UQK^OyvDt;d| zmfFE$;#>Gs^N0*-hdF$9a9vf|(6MyRcodR07by!RE(KUW+URn@M z4VHfddb2Ov?Z?ty9J$Z^$v~=2%B5MWUv)*^bRgjjRZdahmxo)P{j@+lt|v@!4Rd*e20r-m~2v7+r8&-A%^4>{`5B=1-dFz}ux4^GT-Ef9j&Q~v~ji39| zWphA1R;d;Dw|?9PqAV%u(CUEMA+zRCl4m2sEqmqn7Y{axKJr&3uO=0-WCp-A5)x2~ zfHksB$QNe(C0dc6osA+aLLVgKHIbl3#v2P;P$Lr{Enyi9KRM>TqYHhKJ*9D2er46= zD_F{x#N!#_h&nBqn|56rT5_;*2sJRJ;_0GNcFMFkTXggvUwyJUKoA~Q!w>;0c2GZZ zgN|_#(C8X(R1jk!OQ^ca!SdObkXm3*G>AX5o@vo?L$mSr7y7bEtiA^mJ18LvGXAu7 zYr}^e2>I$y7aXfm4tzN;Ya1qfMvCa7iKdAQ#b+FuS7e{$Bsq8``j)&5K!)W843*wl zHeYKCdTF8vryu6+%Vw^B`U5({sW;kDHBedY178JBa_5#&Q|4F-B;(3>Y~%b zH$-XYsr*9S^9*;+5O7;(A8Z8N z*40`B^okD27vZR;h9WFh70JeVfXqUEqNC$-pxe*WvW%8X!c5^qg!%tdD-5VxP{m2oxa1%9q66?nG6ev9 zc{sxgX4_iw%J8+am50<>=p%?)crRPiG&{m{>?!2y4{TcZ;O0&Yb|qm}eSbh@S`*Qn zb8U>R7i?e;b>L7lT_iBOd9hO~7egFQmEhr+%lc#=BX6Q1t31J<`9{seW*X6OQ25?o zw3XqdWaxxR8nD_~f$u{kA75-s|6Rwj5BGy96X9J;d+o&wG_7h z%t?;fHd^?yf5I5^oCa6ljM>0JV81N&x>+4RFlDc@I18PkpJrMAhiA#l*IN&&g1G1x z8h%dYs@NQVKsSmB^0%KR%2Mob&BB3O&QFd=;VG_1Xvm8^V0+xdgmpBWmw%{oljmJ;^ z_El|AC#D1SoN?rAMNL2(2ea3>`mDNvl6#j==GRV965r!94jbvBb8pjo}mG4Db_ zn9&U-EshrhDlMk!Om!_jE_ zPgSIGD|G&n#)b_#@urB+3ZW+vkqx)FJJ8->Suf?e2>EGMFO*t^mf{>%mqpdZT@AuA zwM=&t?sm#4{6q4#^0v0N(uNR+U&*9?c!X6Ptrt{QzPowWOHnuZYBVd-vbbeTKakiR zUB-)?se<0_T+VtAoXgebCtCb?hq$}2RdLT>53?`^CO)>J9eDle`1bw`B+983b8C@2 zc%@oJKhVn}dhsK#ftF&2J1Xj8Y*Go>;`#^Who-yl=Q;?$%}Vn{IhhXrvLt?F4xG6S zh7(X~`i+_qu#|G2RYsc5`A@xci>rV*Zt_}4npiX~-~wZ(T4Avw!UIo7IUk*kJJoJ% z8S5NM(rQ5Z^+hIfbWtZ{beN1&X_AsNE405v zX6)EMh8+3@|J{@ljQRiLpFMyh|M!w~tR{r8=T!q>K^r8U`*+FhLb%+B`39jj$#Txx zckP?X;o;ntpJp#SCnfGh(!$xv0{bZXxC^5zj1xT7Qm=}d3hqkT^YTyYP-oBD44sXd z%TsfC*;k|yK9WATQ^`^YUK`dLjvV;g7rLos%9;u1@w&|Ut{cd;OG)p@9ls&B(SGzy z+$OXa)wew#bOapAk8U_N^;YdcHoev_XNxy=P1bJ2bQDhf?+_Jm{HOEh)(y9d-(f60 zkz)DG=#jALGh3cZ)9n7my)2&L*u*uO^tw)|JgiRwTQ29^WK8oLcs=M!4A3KrD#H?8$&?%`x{6Uu1n6i3->HKcEYp^3~jS3qh^V8dLb~rXG_K zR(xzvd{O7+lSaL&BJ@e*GLs2i%miCX$H1QcXtjZ_l7>-tl}epes~-C2#|A~pHpoYt z`Yn&~rM(`Ee>t}=k21@1{z`w1Tb|MHTlU$teHE&5u1eWr&q;=4AjTZ5R8?_#JCC3A zp&Y<9eq3ZO{sA4FUNXyZd~XGG%%(l^Nvb1ZX^`dE88I1d$u}-Y<+?yIGH94%;|yil zv79uGB2zB9D7fa4O(+iIu-<%fWIT8Uay#7P%XVy)9p(8fY#{njS46V4|GQOvn;cVAaj$eV8vCbZ&CSX51hBabc+aFXj@E5VX+Eyk81;~{6J88H4^8RGF z>GTJ*QzgShd6tZkh;X17k3aL$=wQkEL?->9_$hJn?K61lL-IXi;0INv*S_i{YWXcS zx*81S+t-)soykp{t)dg}ot>Eg|GmF&uSQ~xiok0}hv6=r2y@q?axV zv1^w{g&{C{%lGMAJ7vcYV~#!(fEi@N_r=p}7Q{*}uUMOZEcolN$@z=bC#3ZCveB|8 zMjOiQ5Nx26N&6tJVAadCnKc%8)7CG*lY9j`AWep+Pev~jw^GKuoq96`D{c!6jw$+T zmh!Hd0mpwrK*i(q+B&%U2Q+S)x@mzT?D&l=JYA`6(Ej|^P;}_st&d{%?QvAyKNJz? zbN%vjC#P1abI(U0t^R=KI>gEM&D!%!i~5Z=jKygFH@NtF8X8wxv6ar451LO{h=MUc zNl|l0hiWjHoow;kJ@0c7>$_&ss%m#RI@kO#@7}Bw8Y7#<%OJ47nLPmzq-^U4RRJ8U z=gE*qKvb^%v8;%VW+CQxqNuLgggHV!PD!v_FIL?^98sqegN(3TmS&mLlJA#kVyGl9 z%Y{wqQAdJe<&xwwzQDwc&RH4_ZmnDaDl4O9*Kf~7vK zbnKl765`Ov<~V*QrrlFG`8Ll#snJp5dUQ#*l*J$y>2ZCHtj>~mml_v8=C5R5O>O)s zP`o6+7UXVwZU3UvMyC(QaqH?7bsqX`ZK=F8?m60Op!yG<4MM<_n zCC&Bl*&K0qZ!hVLPcWwh>IGfwH<8UP zic|<`B8R}7UgV^(Qj;Fr`?l<7q@1)i-@+P7amr*P%>`(nQ+n7uvCjr zckv@BvB$O7^o0PPD5KtH_q3I%1SeUdbpqEI{bZQQk9<>n1Y$Oe z=S$-5E??J(MbkjH&N+K}c4<*Lerukc=ONN6GMqZ1)2;B5IIs?*Uf~+$MzhJPgKZEx zDS{B7>6m`<^bF$H4v3NV{_-%G#;_IDzW&TRr0VnQ_34ElgbP{kvQA>piq#*mA2cxn zy97`-Dx=y{jrvjVs31|IF+9$nPkReEcj>`-N|g3F*c^xNZGYl!#BQtS#(zN_e_?>H zX&6%M{YchCU)Yq%w)6Mc7aHg?S*`Xd zqgQSncyB?%wh|2zj}39J@jsmtYgBIE63o_4(%5}q0=PJ$Dyr)6Nt0_&48l`6d)!Ma z(WV?te{~vVQ&x%}z})9P8Tg5@@DB(>-QfYRF!P@KN5IQFU8BkJN3{L}^W6ZKV*Rzv z*L&{Cz|gh@(J$QlIiGF%MDe}ectdBazqtKAJw6UR2D^;)C{f&t#})*PGXjMHA=aW8 z>f+Zn*tqb&E(b4patakmZTO_(A5iz|*^m`5VPYK3GEUxW0^A|De=%au-6+n}rdScn zPl*uBYG&M|vvWFcQp8lKeVDML6aRdE0Zs3r4MYZc?0_?LOWg;ixc!p{TzGzx0af?D zR@5qKxhH^VtOVd{1~d)@5Ihk3At2WWzq8DS$(YX5>Y`?G4NPYs)9HS2Rh{eg9(+-_ zT9^D=0Ks{^?fI)z6NYjZu;Iw50hHD9x_l<3#?Q)5Ubl@4R#3J|yihMuyI9`nz9mLQ zFAl!3iQb#$%juXFIS6G<(2Vm~q9pSYxEVQkWKe1A#)(Qo7|5eOG~eA#m%JWrw?#?A z%oGpNI`aTT;V(?gI7J-V*zxsv*0yGzHmeeUrqYXvsP5HJcb>8}JK5-W#xyj;FnU#; z1uJzDMK7%u%X%uGv6!ArGeY`aZ|^PBKLUIK0rAK==A;_Rd5jsbx7n$$+(*ny=(aX( zhU8h6WhpbiI+|mT#s9TWan#DsA>@Xn^c$piLZR#wYY-N+7d&tB2{(JVw81#H(mbVX zKvM}94L`i#hQ4SPEw=ve|6x(im%R%e5Nx~K3PMVWfF*~-I%VX;m`FBSCJ$Z`z4TR8 zub-+_YGlSS(pDp(*$b7hlUYS5%tqqke{C#@@lW~kxN-$<-_T#uJ>PMzmEDCTFi4ENZ$QOgsZR~V)_^)nC)j5B*zfmlj<7VgX@?-^uv9m_TNU9<+-UGjG5OvkaJ}x7 z;2wn9F{6^N^1Mwfc8KnHf@M)mATMJr9jAs-X~3HD9#?!+QA6S%_K(<|5eUHwv?x5q(Xzi{ixYRWeBFC<>y z>bPyh&wEE3s62H{cjX`DMB@pUCnsyWIR5Of1k6MD0A(HEQ8k{E>|^~T-4F`WVeQ7p z@A^$9FYdij%qHZ4vK{la<#b8~r>AIHr*cBWF?nQcMPoBFIIqT;r=i-i(*o{=i{2s@ z(NGW?CJYzfOc?zGQpr`Fhm)b8d}obBpqBS7a+}auH8?PhncmSRK4gFRB}A}G(9uu^ z&wO(BJ*%_hhyH}0&=K=QecvWVOgAha4JWx!buOKW|0!nCgjl}y;-|LolFHY=g&GuE zw&;G-;3c}b@QokK1qNQd;Dwjo0EGOjDQ{z0hfR@>@TXJ@$voa0C1f%LyK~BO9cXZ=aN~JAR>Bs_MyO33ws$ zFnDvEI!H@9c)ye%=@1!{yot}cRE}FBaHj=R*Jr*@rleUc9M&fCt?_eN{It02(((;r zI>ztR;$-pzYn%cKR$XDt27)b570zdpy&|l#%cP(5n5QibOeAlO5StUy=-@y#W-)*h z{@0%Xb4r7hc?njU@zd}ZgmKCJaPMt@2nV@6_RJqpFcYh;+%sHnB0|lrF}n7jn)A!? z_un9DV>)!V?O|fJbYMZ}ygUZu=tIFCRYvgyz<))ddYG(>B2v zkIlRF^ld29G2WQ4jrRLO?|nJJ9;R$h>sfr-x0SKsTmw-CvOZp_3O!oLKYQoB#S2}SukicMvS#mGe5 z68gsRBEEZE+s`4(sx99xeZM`j(U&j(Wurf+96XXS7XKlaX{|b!KT^=!09NizHb8YW zn98=k&3bf=H$PI({T2tm&v`bovF}_3M@r`VE}woc_x0+-lgmk!C0ns-3W6?^?&_AUWetwao257v&~$znd+>Q41f?M_>*Ty zTf3YyEjyaqaif@zxryTB^_&UsA}#qYk>^x7Mv_{|-Yba7VVcJ_NJ|lnz0$s$h&}7yb1^PC%O|Ne# zj_W^6Rf=IEC{T)~RM$4Sw}E<>$)Xkg>68r6D$_8#R`yXV1VF3s{0JD!C0XG!{8V!8 zGDM`sb&@|IY6|h0m`|q$TTl|zb-@v%Ya2F(v(XEsww%1)EwA(Wc5stjlqgTi5{g4x zmHHnL*3kLYj^iT2hRs*38f`3?#()Z)(vxiS4tBE|HMtN6i$Xji(DQ1ttagm6=;h!U^#EM`|A zv{eG6RCcg?DNr0bjE*r1@tLK??;X!It03<5WZJSR$(nf69N92%f=f~N2S@g6&tO_W zN^m(i&CO9wbtV10SN{1+`e6ndNObG zDrlX)+|@jM=~~1s#EK+IB6Lr83EF>l+@s+1;y}>qYtzr#@VhBezMF?;r%i(;pE`ar#(@bxQfKCi`qbhJvctk5Brr@?P52e zG|%7jn2Q|H*(K&g?1K^FKeATzmY-REo?KQa-zn7k0Pmvb;qwJhoDaWJTcrlOL#yY+ z?EKoQEUXW{fX~z_Yu56L_bPom&$2jyKmsrDO+o#t`Slh2lb2wdSwOveQO3USIUNY(ss>of14p*gz_t2Y%5GX^02P+gHv?t?_$U&WrXc{qc{qCusvG!V4(G82 zfVgw|M#z8amfjkxk-Wuk6ufNj`RiyhDVp=#>BxNj;YEhi6%(rsGwRulw=JHvs-&iB z8kE{NqP6wiv^qr?3wm_l20t`ybM0Trx~!?pN&Paebc*561$Hfb`Umjk%2FC|@VxNn z;z_KN{L}FkJ#r8XJ(X^|{pMG@P;4WA*1FB%AT|hoQoI;6^R)u*2GZDX)tx`8YAL-V zCRaOv-_~_!_k%UQ(^kGN^wHXvofA!|83JctO|r^5lRVjOqN4iPAR)ojG?w$D%%CTo zW_f8$whrzV)VUzmPbJSgE}!oTW8G7*Drb$1Y89S9n!n;`iLda8-#nPAFQn#jfB(`Z z{U|8t*pte#f{*dwQ#}>VW@brtlHI)F#c{OlvB*lSS%FM~A`}RX@lfX}bqalw_DV2v zkSV)oz~Pwp!45#8Bx}@=k-fKH0wnmxyQdFKGsDhL$H3Du2;TePstz^)k>p3&hT8Ul zS}vhFYlPVq-`sxF?S>+9!WtVN>f3}3 zl82njrxa@KCw;eUXJ^Oz2BM1BE-?|XNV<5Mx+@&iX|~gYqny1gFNh!yvkH#9BC1&B z)M*3%;R;k?>LLOQqff?`c;%Vru|512Mm9p*t<(RbeLT=lu2z1@$5pGsBB|k_HkyU> z$m#O8Pbn1c8$g*-&q zdS9CV;@ELH*(c`s9T9$K5_UTRyThHwkPTKoB#_H(n{jx36Mb;}M#M(_kS8S&d&qJ*ugOql~Mkj#TAifs029*EspygQ=$c z)^G0i+%;+Ux`aft`^N+$#k|Wk7+)c|I=Cvn9(xQi6Tn22ir)m(B?=U1khty!Pz@qm zKc%sHiqU2Q^=zIJmYUR!fcb}wl2dJVii7t7!|eh6V@+rcYEPyTACmE}h#h~;lK?;O zO8pNW;!Nt`i}sYE{Xem3ejW!_BN&`{V9s3d-vG6i{(oZ<0S<0T7h8|v9etlnj_3E6 z67wsrLKE`#+B4 z4_I*~DpsX5EUL7^+kR&q1c1s91!(W~|5t?EUoD<%|F1YDiy1$9Q|TRKsw3mXH$Y_R z-FyE#b9x#iW$O2|WGQy$4Z}^2dDVRIGmj#c!26cVA{Hax|D-l`-%Zl!X|Y~ExPBC5 zgMan3+qwy-Hptg3uE=rIhXuB#_q-=Ru&ec~o}6Hf8-3@{d`I&R?Aix!9#b{zNv5n@ z)XLj-1Mw>@+@S-LN}Iuava4?)Z~D&ZPpGv2UB)k{wBKFEW-b-l;nTMT3&o!!8Wlg? zas|3jIeHv#ycuLQs(Af)%%6M77ee<}LEo0?Cp6M|$~s-xZc(q$9qx!8WTuMNd*UVw zmHK+&1Ee!~ZT=&!>Z3wE0GWExWyy&s;wQe#o_W{s8~VU@rZSr1L20#>z4hsM&kffTR&y!R@74R@ndr9g@3P(de@ko_}M8;kzON zS6o}MfA^XdKJjZ9k1wbR(7OQ2-MKgYXB0<()_A*spEbMgW_^)=pcXqzT!5_q7Gd)1$Gx%@jADDFC18}eFJ8+FMbDB#&5p<8#S5@5L|_o0D{DFy950w6FmIE3UUN} zuh!Nj9nQQucaCc1UcVu5O!w~sv6_FqTTfaqzbq|YqoUbqAus{0xrQ?>ipC1mjcqJJ z>>q@7@l3nTiEPkaixJb5Z)ts}VnNz1_3O%7_EKMYh*Oct!k;u!mQ*g+4J~Pl7YCu7 z$v$;*Yu@6k_Ct=wu^X;Wqnx8FF{WY*oSehsNsGb38Q}w%S!>t63LFzDf7eq{<#UAXuVHBZWwI z=eB*4{dK_TroJ&Vjz#VGI>;0IAdGQ0iaiRkh9OgNxODollAhJ+k-8F(V~ms-RzqPU zm6{=}!aH`$r)_UGn29@e6qHt3)~0Ckw7&YQBKpjhk~*@wGMYo-$@Cy92=Dy4qC=7i zeu`@Ck^&S6$oXf9@Rdm=*c7szsQl@HtyQRmeFUD`?GhdWXYp${+Nl?z0jFE@pX8fR zg)h`gFprCkk9WNf#O%E)c0dF@J;Yo$Wt*xJaZdzch8k?~zRnw>z=j8$A3v?9Z$Sh) zKW;Y6;c9oB*_zZSF;>ypjn)|^&FaKM1B)}-ki?PxfQ$;Ys*4`RcuF|$PL>_2bYiaJ zUW+zYAH`XSy6grC;0lGV&3u#I9u3-H;n^82ym>veF44$&w`C8(BD9&le5BzgJCp}^ z90+HxWz&{CgkZwsLzlGr&)#eHq7d%L{nM9pe(6TL-##ha9`u1b?s8ke-NnSCn>Hi8 zL}>#JfJUa|v$s$E=#pnwy2{szCO<-z9y`lOyJ)0Fu(G5&81d65nQI{#ck(rx$UunT z4%u68@Z{4TfFNK39F9wWROZQfeKWsx76PbP2;?L2mGc0Bxr6;eg>Cxh{S)Kg2)tTyx^jKgzll4G7~^)ERm8(|(`%Xpla&U1hW zt3a+Jbc2&@`Aq++z>+;LvrLf{=`V&wJ{3v6!qXKP+HQQE>ObLgu8p3dx1xAgeA}3Ni*GT+xDa_1CMnuU!Uf|`5NQ*Q!w4g2@?`K>j+bvbPPYXrhbKXiOpxXnC>iU z#X-zpK-hJ1u6>Iz##4t}v0WJo4MJ0~%g7Ygim+Id; zKM)ZRL_xpp?0uY4hH`9*8xIt2!_dWseGVY!xN6IIM6R)qOMoTEErHu=y?g!^o zf8c;t=ubh{P7e+Yo6~_`=Y-#fJvq3rJj~Qpi;L!Juubsb$6U|Xc_{8)+nk5uBZ7>9 zQu5h!=Byai!d=5-mNr#c&0j00EFtQ(4mvwvQxwZ*vBu(SuI8SZ_MPGQ8CeXF^r_%+!!j1N)YN%=!gNz;=NiuarRWe!JQpclGSiUrR^jpQ5q$5-;76NIIQ zoQEWN=7Ab~6>brd;Ugl6CPx+sn6WtJ07l1!p?+2_yslmP?FD_4pX*1x&xXOzmtSr6 zv-|Ja2ODqpQ&fck2BIAC!U;Kx}1`2!4&gp7?tNu`4F0+&Oa>+4@*BRv}X4~Q3h zHZ|E+jXgN%-ZOdua+zrTY@#!UujV$3OR@!4S*D*?zTarnb~5`L>mgVR~%{ zm1(o6<+C-Z$=%uejcPXO$a>?dQyJaZ$oaZxwcd(@VfxL00&7g4^!E~PsKEJ*Ic-YK z{NW^)DjP|~kbD*70Sg(i>n$viv|1@jYI;g87YI1Y0nsmqaZClQ<>P50{OnnQ7bmN> zgIs1Ja?%uTz9N3?4~0LVUnbO6gCJ!cE~Lh%M}{pr31;Sa^>!Ss(pF8H8POMJ z{5E??8fi+41F`cF2>FRb!A}*G)vuY>ES3Jh07(G0|8K}PCoT1g@osfJreXSr5vQ5g zbELw0`9IlF)ls1K-?rkkSBEIII-h<_Ky_R&O?z+I2e5vc^1Js&=|6qJoV?EF{{Yc{ F|JmoHbYK7g diff --git a/vendor/golang.org/x/crypto/LICENSE b/vendor/golang.org/x/crypto/LICENSE deleted file mode 100644 index 6a66aea..0000000 --- a/vendor/golang.org/x/crypto/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. - -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 Inc. 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/crypto/PATENTS b/vendor/golang.org/x/crypto/PATENTS deleted file mode 100644 index 7330990..0000000 --- a/vendor/golang.org/x/crypto/PATENTS +++ /dev/null @@ -1,22 +0,0 @@ -Additional IP Rights Grant (Patents) - -"This implementation" means the copyrightable works distributed by -Google as part of the Go project. - -Google hereby grants to You a perpetual, worldwide, non-exclusive, -no-charge, royalty-free, irrevocable (except as stated in this section) -patent license to make, have made, use, offer to sell, sell, import, -transfer and otherwise run, modify and propagate the contents of this -implementation of Go, where such license applies only to those patent -claims, both currently owned or controlled by Google and acquired in -the future, licensable by Google that are necessarily infringed by this -implementation of Go. This grant does not include claims that would be -infringed only as a consequence of further modification of this -implementation. If you or your agent or exclusive licensee institute or -order or agree to the institution of patent litigation against any -entity (including a cross-claim or counterclaim in a lawsuit) alleging -that this implementation of Go or any code incorporated within this -implementation of Go constitutes direct or contributory patent -infringement, or inducement of patent infringement, then any patent -rights granted to you under this License for this implementation of Go -shall terminate as of the date such litigation is filed. diff --git a/vendor/golang.org/x/crypto/argon2/argon2.go b/vendor/golang.org/x/crypto/argon2/argon2.go deleted file mode 100644 index 29f0a2d..0000000 --- a/vendor/golang.org/x/crypto/argon2/argon2.go +++ /dev/null @@ -1,283 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package argon2 implements the key derivation function Argon2. -// Argon2 was selected as the winner of the Password Hashing Competition and can -// be used to derive cryptographic keys from passwords. -// -// For a detailed specification of Argon2 see [1]. -// -// If you aren't sure which function you need, use Argon2id (IDKey) and -// the parameter recommendations for your scenario. -// -// # Argon2i -// -// Argon2i (implemented by Key) is the side-channel resistant version of Argon2. -// It uses data-independent memory access, which is preferred for password -// hashing and password-based key derivation. Argon2i requires more passes over -// memory than Argon2id to protect from trade-off attacks. The recommended -// parameters (taken from [2]) for non-interactive operations are time=3 and to -// use the maximum available memory. -// -// # Argon2id -// -// Argon2id (implemented by IDKey) is a hybrid version of Argon2 combining -// Argon2i and Argon2d. It uses data-independent memory access for the first -// half of the first iteration over the memory and data-dependent memory access -// for the rest. Argon2id is side-channel resistant and provides better brute- -// force cost savings due to time-memory tradeoffs than Argon2i. The recommended -// parameters for non-interactive operations (taken from [2]) are time=1 and to -// use the maximum available memory. -// -// [1] https://github.com/P-H-C/phc-winner-argon2/blob/master/argon2-specs.pdf -// [2] https://tools.ietf.org/html/draft-irtf-cfrg-argon2-03#section-9.3 -package argon2 - -import ( - "encoding/binary" - "sync" - - "golang.org/x/crypto/blake2b" -) - -// The Argon2 version implemented by this package. -const Version = 0x13 - -const ( - argon2d = iota - argon2i - argon2id -) - -// Key derives a key from the password, salt, and cost parameters using Argon2i -// returning a byte slice of length keyLen that can be used as cryptographic -// key. The CPU cost and parallelism degree must be greater than zero. -// -// For example, you can get a derived key for e.g. AES-256 (which needs a -// 32-byte key) by doing: -// -// key := argon2.Key([]byte("some password"), salt, 3, 32*1024, 4, 32) -// -// The draft RFC recommends[2] time=3, and memory=32*1024 is a sensible number. -// If using that amount of memory (32 MB) is not possible in some contexts then -// the time parameter can be increased to compensate. -// -// The time parameter specifies the number of passes over the memory and the -// memory parameter specifies the size of the memory in KiB. For example -// memory=32*1024 sets the memory cost to ~32 MB. The number of threads can be -// adjusted to the number of available CPUs. The cost parameters should be -// increased as memory latency and CPU parallelism increases. Remember to get a -// good random salt. -func Key(password, salt []byte, time, memory uint32, threads uint8, keyLen uint32) []byte { - return deriveKey(argon2i, password, salt, nil, nil, time, memory, threads, keyLen) -} - -// IDKey derives a key from the password, salt, and cost parameters using -// Argon2id returning a byte slice of length keyLen that can be used as -// cryptographic key. The CPU cost and parallelism degree must be greater than -// zero. -// -// For example, you can get a derived key for e.g. AES-256 (which needs a -// 32-byte key) by doing: -// -// key := argon2.IDKey([]byte("some password"), salt, 1, 64*1024, 4, 32) -// -// The draft RFC recommends[2] time=1, and memory=64*1024 is a sensible number. -// If using that amount of memory (64 MB) is not possible in some contexts then -// the time parameter can be increased to compensate. -// -// The time parameter specifies the number of passes over the memory and the -// memory parameter specifies the size of the memory in KiB. For example -// memory=64*1024 sets the memory cost to ~64 MB. The number of threads can be -// adjusted to the numbers of available CPUs. The cost parameters should be -// increased as memory latency and CPU parallelism increases. Remember to get a -// good random salt. -func IDKey(password, salt []byte, time, memory uint32, threads uint8, keyLen uint32) []byte { - return deriveKey(argon2id, password, salt, nil, nil, time, memory, threads, keyLen) -} - -func deriveKey(mode int, password, salt, secret, data []byte, time, memory uint32, threads uint8, keyLen uint32) []byte { - if time < 1 { - panic("argon2: number of rounds too small") - } - if threads < 1 { - panic("argon2: parallelism degree too low") - } - h0 := initHash(password, salt, secret, data, time, memory, uint32(threads), keyLen, mode) - - memory = memory / (syncPoints * uint32(threads)) * (syncPoints * uint32(threads)) - if memory < 2*syncPoints*uint32(threads) { - memory = 2 * syncPoints * uint32(threads) - } - B := initBlocks(&h0, memory, uint32(threads)) - processBlocks(B, time, memory, uint32(threads), mode) - return extractKey(B, memory, uint32(threads), keyLen) -} - -const ( - blockLength = 128 - syncPoints = 4 -) - -type block [blockLength]uint64 - -func initHash(password, salt, key, data []byte, time, memory, threads, keyLen uint32, mode int) [blake2b.Size + 8]byte { - var ( - h0 [blake2b.Size + 8]byte - params [24]byte - tmp [4]byte - ) - - b2, _ := blake2b.New512(nil) - binary.LittleEndian.PutUint32(params[0:4], threads) - binary.LittleEndian.PutUint32(params[4:8], keyLen) - binary.LittleEndian.PutUint32(params[8:12], memory) - binary.LittleEndian.PutUint32(params[12:16], time) - binary.LittleEndian.PutUint32(params[16:20], uint32(Version)) - binary.LittleEndian.PutUint32(params[20:24], uint32(mode)) - b2.Write(params[:]) - binary.LittleEndian.PutUint32(tmp[:], uint32(len(password))) - b2.Write(tmp[:]) - b2.Write(password) - binary.LittleEndian.PutUint32(tmp[:], uint32(len(salt))) - b2.Write(tmp[:]) - b2.Write(salt) - binary.LittleEndian.PutUint32(tmp[:], uint32(len(key))) - b2.Write(tmp[:]) - b2.Write(key) - binary.LittleEndian.PutUint32(tmp[:], uint32(len(data))) - b2.Write(tmp[:]) - b2.Write(data) - b2.Sum(h0[:0]) - return h0 -} - -func initBlocks(h0 *[blake2b.Size + 8]byte, memory, threads uint32) []block { - var block0 [1024]byte - B := make([]block, memory) - for lane := uint32(0); lane < threads; lane++ { - j := lane * (memory / threads) - binary.LittleEndian.PutUint32(h0[blake2b.Size+4:], lane) - - binary.LittleEndian.PutUint32(h0[blake2b.Size:], 0) - blake2bHash(block0[:], h0[:]) - for i := range B[j+0] { - B[j+0][i] = binary.LittleEndian.Uint64(block0[i*8:]) - } - - binary.LittleEndian.PutUint32(h0[blake2b.Size:], 1) - blake2bHash(block0[:], h0[:]) - for i := range B[j+1] { - B[j+1][i] = binary.LittleEndian.Uint64(block0[i*8:]) - } - } - return B -} - -func processBlocks(B []block, time, memory, threads uint32, mode int) { - lanes := memory / threads - segments := lanes / syncPoints - - processSegment := func(n, slice, lane uint32, wg *sync.WaitGroup) { - var addresses, in, zero block - if mode == argon2i || (mode == argon2id && n == 0 && slice < syncPoints/2) { - in[0] = uint64(n) - in[1] = uint64(lane) - in[2] = uint64(slice) - in[3] = uint64(memory) - in[4] = uint64(time) - in[5] = uint64(mode) - } - - index := uint32(0) - if n == 0 && slice == 0 { - index = 2 // we have already generated the first two blocks - if mode == argon2i || mode == argon2id { - in[6]++ - processBlock(&addresses, &in, &zero) - processBlock(&addresses, &addresses, &zero) - } - } - - offset := lane*lanes + slice*segments + index - var random uint64 - for index < segments { - prev := offset - 1 - if index == 0 && slice == 0 { - prev += lanes // last block in lane - } - if mode == argon2i || (mode == argon2id && n == 0 && slice < syncPoints/2) { - if index%blockLength == 0 { - in[6]++ - processBlock(&addresses, &in, &zero) - processBlock(&addresses, &addresses, &zero) - } - random = addresses[index%blockLength] - } else { - random = B[prev][0] - } - newOffset := indexAlpha(random, lanes, segments, threads, n, slice, lane, index) - processBlockXOR(&B[offset], &B[prev], &B[newOffset]) - index, offset = index+1, offset+1 - } - wg.Done() - } - - for n := uint32(0); n < time; n++ { - for slice := uint32(0); slice < syncPoints; slice++ { - var wg sync.WaitGroup - for lane := uint32(0); lane < threads; lane++ { - wg.Add(1) - go processSegment(n, slice, lane, &wg) - } - wg.Wait() - } - } - -} - -func extractKey(B []block, memory, threads, keyLen uint32) []byte { - lanes := memory / threads - for lane := uint32(0); lane < threads-1; lane++ { - for i, v := range B[(lane*lanes)+lanes-1] { - B[memory-1][i] ^= v - } - } - - var block [1024]byte - for i, v := range B[memory-1] { - binary.LittleEndian.PutUint64(block[i*8:], v) - } - key := make([]byte, keyLen) - blake2bHash(key, block[:]) - return key -} - -func indexAlpha(rand uint64, lanes, segments, threads, n, slice, lane, index uint32) uint32 { - refLane := uint32(rand>>32) % threads - if n == 0 && slice == 0 { - refLane = lane - } - m, s := 3*segments, ((slice+1)%syncPoints)*segments - if lane == refLane { - m += index - } - if n == 0 { - m, s = slice*segments, 0 - if slice == 0 || lane == refLane { - m += index - } - } - if index == 0 || lane == refLane { - m-- - } - return phi(rand, uint64(m), uint64(s), refLane, lanes) -} - -func phi(rand, m, s uint64, lane, lanes uint32) uint32 { - p := rand & 0xFFFFFFFF - p = (p * p) >> 32 - p = (p * m) >> 32 - return lane*lanes + uint32((s+m-(p+1))%uint64(lanes)) -} diff --git a/vendor/golang.org/x/crypto/argon2/blake2b.go b/vendor/golang.org/x/crypto/argon2/blake2b.go deleted file mode 100644 index 10f4694..0000000 --- a/vendor/golang.org/x/crypto/argon2/blake2b.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package argon2 - -import ( - "encoding/binary" - "hash" - - "golang.org/x/crypto/blake2b" -) - -// blake2bHash computes an arbitrary long hash value of in -// and writes the hash to out. -func blake2bHash(out []byte, in []byte) { - var b2 hash.Hash - if n := len(out); n < blake2b.Size { - b2, _ = blake2b.New(n, nil) - } else { - b2, _ = blake2b.New512(nil) - } - - var buffer [blake2b.Size]byte - binary.LittleEndian.PutUint32(buffer[:4], uint32(len(out))) - b2.Write(buffer[:4]) - b2.Write(in) - - if len(out) <= blake2b.Size { - b2.Sum(out[:0]) - return - } - - outLen := len(out) - b2.Sum(buffer[:0]) - b2.Reset() - copy(out, buffer[:32]) - out = out[32:] - for len(out) > blake2b.Size { - b2.Write(buffer[:]) - b2.Sum(buffer[:0]) - copy(out, buffer[:32]) - out = out[32:] - b2.Reset() - } - - if outLen%blake2b.Size > 0 { // outLen > 64 - r := ((outLen + 31) / 32) - 2 // ⌈τ /32⌉-2 - b2, _ = blake2b.New(outLen-32*r, nil) - } - b2.Write(buffer[:]) - b2.Sum(out[:0]) -} diff --git a/vendor/golang.org/x/crypto/argon2/blamka_amd64.go b/vendor/golang.org/x/crypto/argon2/blamka_amd64.go deleted file mode 100644 index a014ac9..0000000 --- a/vendor/golang.org/x/crypto/argon2/blamka_amd64.go +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build amd64 && gc && !purego -// +build amd64,gc,!purego - -package argon2 - -import "golang.org/x/sys/cpu" - -func init() { - useSSE4 = cpu.X86.HasSSE41 -} - -//go:noescape -func mixBlocksSSE2(out, a, b, c *block) - -//go:noescape -func xorBlocksSSE2(out, a, b, c *block) - -//go:noescape -func blamkaSSE4(b *block) - -func processBlockSSE(out, in1, in2 *block, xor bool) { - var t block - mixBlocksSSE2(&t, in1, in2, &t) - if useSSE4 { - blamkaSSE4(&t) - } else { - for i := 0; i < blockLength; i += 16 { - blamkaGeneric( - &t[i+0], &t[i+1], &t[i+2], &t[i+3], - &t[i+4], &t[i+5], &t[i+6], &t[i+7], - &t[i+8], &t[i+9], &t[i+10], &t[i+11], - &t[i+12], &t[i+13], &t[i+14], &t[i+15], - ) - } - for i := 0; i < blockLength/8; i += 2 { - blamkaGeneric( - &t[i], &t[i+1], &t[16+i], &t[16+i+1], - &t[32+i], &t[32+i+1], &t[48+i], &t[48+i+1], - &t[64+i], &t[64+i+1], &t[80+i], &t[80+i+1], - &t[96+i], &t[96+i+1], &t[112+i], &t[112+i+1], - ) - } - } - if xor { - xorBlocksSSE2(out, in1, in2, &t) - } else { - mixBlocksSSE2(out, in1, in2, &t) - } -} - -func processBlock(out, in1, in2 *block) { - processBlockSSE(out, in1, in2, false) -} - -func processBlockXOR(out, in1, in2 *block) { - processBlockSSE(out, in1, in2, true) -} diff --git a/vendor/golang.org/x/crypto/argon2/blamka_amd64.s b/vendor/golang.org/x/crypto/argon2/blamka_amd64.s deleted file mode 100644 index b2cc051..0000000 --- a/vendor/golang.org/x/crypto/argon2/blamka_amd64.s +++ /dev/null @@ -1,244 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build amd64 && gc && !purego -// +build amd64,gc,!purego - -#include "textflag.h" - -DATA ·c40<>+0x00(SB)/8, $0x0201000706050403 -DATA ·c40<>+0x08(SB)/8, $0x0a09080f0e0d0c0b -GLOBL ·c40<>(SB), (NOPTR+RODATA), $16 - -DATA ·c48<>+0x00(SB)/8, $0x0100070605040302 -DATA ·c48<>+0x08(SB)/8, $0x09080f0e0d0c0b0a -GLOBL ·c48<>(SB), (NOPTR+RODATA), $16 - -#define SHUFFLE(v2, v3, v4, v5, v6, v7, t1, t2) \ - MOVO v4, t1; \ - MOVO v5, v4; \ - MOVO t1, v5; \ - MOVO v6, t1; \ - PUNPCKLQDQ v6, t2; \ - PUNPCKHQDQ v7, v6; \ - PUNPCKHQDQ t2, v6; \ - PUNPCKLQDQ v7, t2; \ - MOVO t1, v7; \ - MOVO v2, t1; \ - PUNPCKHQDQ t2, v7; \ - PUNPCKLQDQ v3, t2; \ - PUNPCKHQDQ t2, v2; \ - PUNPCKLQDQ t1, t2; \ - PUNPCKHQDQ t2, v3 - -#define SHUFFLE_INV(v2, v3, v4, v5, v6, v7, t1, t2) \ - MOVO v4, t1; \ - MOVO v5, v4; \ - MOVO t1, v5; \ - MOVO v2, t1; \ - PUNPCKLQDQ v2, t2; \ - PUNPCKHQDQ v3, v2; \ - PUNPCKHQDQ t2, v2; \ - PUNPCKLQDQ v3, t2; \ - MOVO t1, v3; \ - MOVO v6, t1; \ - PUNPCKHQDQ t2, v3; \ - PUNPCKLQDQ v7, t2; \ - PUNPCKHQDQ t2, v6; \ - PUNPCKLQDQ t1, t2; \ - PUNPCKHQDQ t2, v7 - -#define HALF_ROUND(v0, v1, v2, v3, v4, v5, v6, v7, t0, c40, c48) \ - MOVO v0, t0; \ - PMULULQ v2, t0; \ - PADDQ v2, v0; \ - PADDQ t0, v0; \ - PADDQ t0, v0; \ - PXOR v0, v6; \ - PSHUFD $0xB1, v6, v6; \ - MOVO v4, t0; \ - PMULULQ v6, t0; \ - PADDQ v6, v4; \ - PADDQ t0, v4; \ - PADDQ t0, v4; \ - PXOR v4, v2; \ - PSHUFB c40, v2; \ - MOVO v0, t0; \ - PMULULQ v2, t0; \ - PADDQ v2, v0; \ - PADDQ t0, v0; \ - PADDQ t0, v0; \ - PXOR v0, v6; \ - PSHUFB c48, v6; \ - MOVO v4, t0; \ - PMULULQ v6, t0; \ - PADDQ v6, v4; \ - PADDQ t0, v4; \ - PADDQ t0, v4; \ - PXOR v4, v2; \ - MOVO v2, t0; \ - PADDQ v2, t0; \ - PSRLQ $63, v2; \ - PXOR t0, v2; \ - MOVO v1, t0; \ - PMULULQ v3, t0; \ - PADDQ v3, v1; \ - PADDQ t0, v1; \ - PADDQ t0, v1; \ - PXOR v1, v7; \ - PSHUFD $0xB1, v7, v7; \ - MOVO v5, t0; \ - PMULULQ v7, t0; \ - PADDQ v7, v5; \ - PADDQ t0, v5; \ - PADDQ t0, v5; \ - PXOR v5, v3; \ - PSHUFB c40, v3; \ - MOVO v1, t0; \ - PMULULQ v3, t0; \ - PADDQ v3, v1; \ - PADDQ t0, v1; \ - PADDQ t0, v1; \ - PXOR v1, v7; \ - PSHUFB c48, v7; \ - MOVO v5, t0; \ - PMULULQ v7, t0; \ - PADDQ v7, v5; \ - PADDQ t0, v5; \ - PADDQ t0, v5; \ - PXOR v5, v3; \ - MOVO v3, t0; \ - PADDQ v3, t0; \ - PSRLQ $63, v3; \ - PXOR t0, v3 - -#define LOAD_MSG_0(block, off) \ - MOVOU 8*(off+0)(block), X0; \ - MOVOU 8*(off+2)(block), X1; \ - MOVOU 8*(off+4)(block), X2; \ - MOVOU 8*(off+6)(block), X3; \ - MOVOU 8*(off+8)(block), X4; \ - MOVOU 8*(off+10)(block), X5; \ - MOVOU 8*(off+12)(block), X6; \ - MOVOU 8*(off+14)(block), X7 - -#define STORE_MSG_0(block, off) \ - MOVOU X0, 8*(off+0)(block); \ - MOVOU X1, 8*(off+2)(block); \ - MOVOU X2, 8*(off+4)(block); \ - MOVOU X3, 8*(off+6)(block); \ - MOVOU X4, 8*(off+8)(block); \ - MOVOU X5, 8*(off+10)(block); \ - MOVOU X6, 8*(off+12)(block); \ - MOVOU X7, 8*(off+14)(block) - -#define LOAD_MSG_1(block, off) \ - MOVOU 8*off+0*8(block), X0; \ - MOVOU 8*off+16*8(block), X1; \ - MOVOU 8*off+32*8(block), X2; \ - MOVOU 8*off+48*8(block), X3; \ - MOVOU 8*off+64*8(block), X4; \ - MOVOU 8*off+80*8(block), X5; \ - MOVOU 8*off+96*8(block), X6; \ - MOVOU 8*off+112*8(block), X7 - -#define STORE_MSG_1(block, off) \ - MOVOU X0, 8*off+0*8(block); \ - MOVOU X1, 8*off+16*8(block); \ - MOVOU X2, 8*off+32*8(block); \ - MOVOU X3, 8*off+48*8(block); \ - MOVOU X4, 8*off+64*8(block); \ - MOVOU X5, 8*off+80*8(block); \ - MOVOU X6, 8*off+96*8(block); \ - MOVOU X7, 8*off+112*8(block) - -#define BLAMKA_ROUND_0(block, off, t0, t1, c40, c48) \ - LOAD_MSG_0(block, off); \ - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, t0, c40, c48); \ - SHUFFLE(X2, X3, X4, X5, X6, X7, t0, t1); \ - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, t0, c40, c48); \ - SHUFFLE_INV(X2, X3, X4, X5, X6, X7, t0, t1); \ - STORE_MSG_0(block, off) - -#define BLAMKA_ROUND_1(block, off, t0, t1, c40, c48) \ - LOAD_MSG_1(block, off); \ - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, t0, c40, c48); \ - SHUFFLE(X2, X3, X4, X5, X6, X7, t0, t1); \ - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, t0, c40, c48); \ - SHUFFLE_INV(X2, X3, X4, X5, X6, X7, t0, t1); \ - STORE_MSG_1(block, off) - -// func blamkaSSE4(b *block) -TEXT ·blamkaSSE4(SB), 4, $0-8 - MOVQ b+0(FP), AX - - MOVOU ·c40<>(SB), X10 - MOVOU ·c48<>(SB), X11 - - BLAMKA_ROUND_0(AX, 0, X8, X9, X10, X11) - BLAMKA_ROUND_0(AX, 16, X8, X9, X10, X11) - BLAMKA_ROUND_0(AX, 32, X8, X9, X10, X11) - BLAMKA_ROUND_0(AX, 48, X8, X9, X10, X11) - BLAMKA_ROUND_0(AX, 64, X8, X9, X10, X11) - BLAMKA_ROUND_0(AX, 80, X8, X9, X10, X11) - BLAMKA_ROUND_0(AX, 96, X8, X9, X10, X11) - BLAMKA_ROUND_0(AX, 112, X8, X9, X10, X11) - - BLAMKA_ROUND_1(AX, 0, X8, X9, X10, X11) - BLAMKA_ROUND_1(AX, 2, X8, X9, X10, X11) - BLAMKA_ROUND_1(AX, 4, X8, X9, X10, X11) - BLAMKA_ROUND_1(AX, 6, X8, X9, X10, X11) - BLAMKA_ROUND_1(AX, 8, X8, X9, X10, X11) - BLAMKA_ROUND_1(AX, 10, X8, X9, X10, X11) - BLAMKA_ROUND_1(AX, 12, X8, X9, X10, X11) - BLAMKA_ROUND_1(AX, 14, X8, X9, X10, X11) - RET - -// func mixBlocksSSE2(out, a, b, c *block) -TEXT ·mixBlocksSSE2(SB), 4, $0-32 - MOVQ out+0(FP), DX - MOVQ a+8(FP), AX - MOVQ b+16(FP), BX - MOVQ a+24(FP), CX - MOVQ $128, BP - -loop: - MOVOU 0(AX), X0 - MOVOU 0(BX), X1 - MOVOU 0(CX), X2 - PXOR X1, X0 - PXOR X2, X0 - MOVOU X0, 0(DX) - ADDQ $16, AX - ADDQ $16, BX - ADDQ $16, CX - ADDQ $16, DX - SUBQ $2, BP - JA loop - RET - -// func xorBlocksSSE2(out, a, b, c *block) -TEXT ·xorBlocksSSE2(SB), 4, $0-32 - MOVQ out+0(FP), DX - MOVQ a+8(FP), AX - MOVQ b+16(FP), BX - MOVQ a+24(FP), CX - MOVQ $128, BP - -loop: - MOVOU 0(AX), X0 - MOVOU 0(BX), X1 - MOVOU 0(CX), X2 - MOVOU 0(DX), X3 - PXOR X1, X0 - PXOR X2, X0 - PXOR X3, X0 - MOVOU X0, 0(DX) - ADDQ $16, AX - ADDQ $16, BX - ADDQ $16, CX - ADDQ $16, DX - SUBQ $2, BP - JA loop - RET diff --git a/vendor/golang.org/x/crypto/argon2/blamka_generic.go b/vendor/golang.org/x/crypto/argon2/blamka_generic.go deleted file mode 100644 index a481b22..0000000 --- a/vendor/golang.org/x/crypto/argon2/blamka_generic.go +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package argon2 - -var useSSE4 bool - -func processBlockGeneric(out, in1, in2 *block, xor bool) { - var t block - for i := range t { - t[i] = in1[i] ^ in2[i] - } - for i := 0; i < blockLength; i += 16 { - blamkaGeneric( - &t[i+0], &t[i+1], &t[i+2], &t[i+3], - &t[i+4], &t[i+5], &t[i+6], &t[i+7], - &t[i+8], &t[i+9], &t[i+10], &t[i+11], - &t[i+12], &t[i+13], &t[i+14], &t[i+15], - ) - } - for i := 0; i < blockLength/8; i += 2 { - blamkaGeneric( - &t[i], &t[i+1], &t[16+i], &t[16+i+1], - &t[32+i], &t[32+i+1], &t[48+i], &t[48+i+1], - &t[64+i], &t[64+i+1], &t[80+i], &t[80+i+1], - &t[96+i], &t[96+i+1], &t[112+i], &t[112+i+1], - ) - } - if xor { - for i := range t { - out[i] ^= in1[i] ^ in2[i] ^ t[i] - } - } else { - for i := range t { - out[i] = in1[i] ^ in2[i] ^ t[i] - } - } -} - -func blamkaGeneric(t00, t01, t02, t03, t04, t05, t06, t07, t08, t09, t10, t11, t12, t13, t14, t15 *uint64) { - v00, v01, v02, v03 := *t00, *t01, *t02, *t03 - v04, v05, v06, v07 := *t04, *t05, *t06, *t07 - v08, v09, v10, v11 := *t08, *t09, *t10, *t11 - v12, v13, v14, v15 := *t12, *t13, *t14, *t15 - - v00 += v04 + 2*uint64(uint32(v00))*uint64(uint32(v04)) - v12 ^= v00 - v12 = v12>>32 | v12<<32 - v08 += v12 + 2*uint64(uint32(v08))*uint64(uint32(v12)) - v04 ^= v08 - v04 = v04>>24 | v04<<40 - - v00 += v04 + 2*uint64(uint32(v00))*uint64(uint32(v04)) - v12 ^= v00 - v12 = v12>>16 | v12<<48 - v08 += v12 + 2*uint64(uint32(v08))*uint64(uint32(v12)) - v04 ^= v08 - v04 = v04>>63 | v04<<1 - - v01 += v05 + 2*uint64(uint32(v01))*uint64(uint32(v05)) - v13 ^= v01 - v13 = v13>>32 | v13<<32 - v09 += v13 + 2*uint64(uint32(v09))*uint64(uint32(v13)) - v05 ^= v09 - v05 = v05>>24 | v05<<40 - - v01 += v05 + 2*uint64(uint32(v01))*uint64(uint32(v05)) - v13 ^= v01 - v13 = v13>>16 | v13<<48 - v09 += v13 + 2*uint64(uint32(v09))*uint64(uint32(v13)) - v05 ^= v09 - v05 = v05>>63 | v05<<1 - - v02 += v06 + 2*uint64(uint32(v02))*uint64(uint32(v06)) - v14 ^= v02 - v14 = v14>>32 | v14<<32 - v10 += v14 + 2*uint64(uint32(v10))*uint64(uint32(v14)) - v06 ^= v10 - v06 = v06>>24 | v06<<40 - - v02 += v06 + 2*uint64(uint32(v02))*uint64(uint32(v06)) - v14 ^= v02 - v14 = v14>>16 | v14<<48 - v10 += v14 + 2*uint64(uint32(v10))*uint64(uint32(v14)) - v06 ^= v10 - v06 = v06>>63 | v06<<1 - - v03 += v07 + 2*uint64(uint32(v03))*uint64(uint32(v07)) - v15 ^= v03 - v15 = v15>>32 | v15<<32 - v11 += v15 + 2*uint64(uint32(v11))*uint64(uint32(v15)) - v07 ^= v11 - v07 = v07>>24 | v07<<40 - - v03 += v07 + 2*uint64(uint32(v03))*uint64(uint32(v07)) - v15 ^= v03 - v15 = v15>>16 | v15<<48 - v11 += v15 + 2*uint64(uint32(v11))*uint64(uint32(v15)) - v07 ^= v11 - v07 = v07>>63 | v07<<1 - - v00 += v05 + 2*uint64(uint32(v00))*uint64(uint32(v05)) - v15 ^= v00 - v15 = v15>>32 | v15<<32 - v10 += v15 + 2*uint64(uint32(v10))*uint64(uint32(v15)) - v05 ^= v10 - v05 = v05>>24 | v05<<40 - - v00 += v05 + 2*uint64(uint32(v00))*uint64(uint32(v05)) - v15 ^= v00 - v15 = v15>>16 | v15<<48 - v10 += v15 + 2*uint64(uint32(v10))*uint64(uint32(v15)) - v05 ^= v10 - v05 = v05>>63 | v05<<1 - - v01 += v06 + 2*uint64(uint32(v01))*uint64(uint32(v06)) - v12 ^= v01 - v12 = v12>>32 | v12<<32 - v11 += v12 + 2*uint64(uint32(v11))*uint64(uint32(v12)) - v06 ^= v11 - v06 = v06>>24 | v06<<40 - - v01 += v06 + 2*uint64(uint32(v01))*uint64(uint32(v06)) - v12 ^= v01 - v12 = v12>>16 | v12<<48 - v11 += v12 + 2*uint64(uint32(v11))*uint64(uint32(v12)) - v06 ^= v11 - v06 = v06>>63 | v06<<1 - - v02 += v07 + 2*uint64(uint32(v02))*uint64(uint32(v07)) - v13 ^= v02 - v13 = v13>>32 | v13<<32 - v08 += v13 + 2*uint64(uint32(v08))*uint64(uint32(v13)) - v07 ^= v08 - v07 = v07>>24 | v07<<40 - - v02 += v07 + 2*uint64(uint32(v02))*uint64(uint32(v07)) - v13 ^= v02 - v13 = v13>>16 | v13<<48 - v08 += v13 + 2*uint64(uint32(v08))*uint64(uint32(v13)) - v07 ^= v08 - v07 = v07>>63 | v07<<1 - - v03 += v04 + 2*uint64(uint32(v03))*uint64(uint32(v04)) - v14 ^= v03 - v14 = v14>>32 | v14<<32 - v09 += v14 + 2*uint64(uint32(v09))*uint64(uint32(v14)) - v04 ^= v09 - v04 = v04>>24 | v04<<40 - - v03 += v04 + 2*uint64(uint32(v03))*uint64(uint32(v04)) - v14 ^= v03 - v14 = v14>>16 | v14<<48 - v09 += v14 + 2*uint64(uint32(v09))*uint64(uint32(v14)) - v04 ^= v09 - v04 = v04>>63 | v04<<1 - - *t00, *t01, *t02, *t03 = v00, v01, v02, v03 - *t04, *t05, *t06, *t07 = v04, v05, v06, v07 - *t08, *t09, *t10, *t11 = v08, v09, v10, v11 - *t12, *t13, *t14, *t15 = v12, v13, v14, v15 -} diff --git a/vendor/golang.org/x/crypto/argon2/blamka_ref.go b/vendor/golang.org/x/crypto/argon2/blamka_ref.go deleted file mode 100644 index 167c59d..0000000 --- a/vendor/golang.org/x/crypto/argon2/blamka_ref.go +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !amd64 || purego || !gc -// +build !amd64 purego !gc - -package argon2 - -func processBlock(out, in1, in2 *block) { - processBlockGeneric(out, in1, in2, false) -} - -func processBlockXOR(out, in1, in2 *block) { - processBlockGeneric(out, in1, in2, true) -} diff --git a/vendor/golang.org/x/crypto/bcrypt/base64.go b/vendor/golang.org/x/crypto/bcrypt/base64.go deleted file mode 100644 index fc31160..0000000 --- a/vendor/golang.org/x/crypto/bcrypt/base64.go +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package bcrypt - -import "encoding/base64" - -const alphabet = "./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" - -var bcEncoding = base64.NewEncoding(alphabet) - -func base64Encode(src []byte) []byte { - n := bcEncoding.EncodedLen(len(src)) - dst := make([]byte, n) - bcEncoding.Encode(dst, src) - for dst[n-1] == '=' { - n-- - } - return dst[:n] -} - -func base64Decode(src []byte) ([]byte, error) { - numOfEquals := 4 - (len(src) % 4) - for i := 0; i < numOfEquals; i++ { - src = append(src, '=') - } - - dst := make([]byte, bcEncoding.DecodedLen(len(src))) - n, err := bcEncoding.Decode(dst, src) - if err != nil { - return nil, err - } - return dst[:n], nil -} diff --git a/vendor/golang.org/x/crypto/bcrypt/bcrypt.go b/vendor/golang.org/x/crypto/bcrypt/bcrypt.go deleted file mode 100644 index aeb73f8..0000000 --- a/vendor/golang.org/x/crypto/bcrypt/bcrypt.go +++ /dev/null @@ -1,295 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package bcrypt implements Provos and Mazières's bcrypt adaptive hashing -// algorithm. See http://www.usenix.org/event/usenix99/provos/provos.pdf -package bcrypt // import "golang.org/x/crypto/bcrypt" - -// The code is a port of Provos and Mazières's C implementation. -import ( - "crypto/rand" - "crypto/subtle" - "errors" - "fmt" - "io" - "strconv" - - "golang.org/x/crypto/blowfish" -) - -const ( - MinCost int = 4 // the minimum allowable cost as passed in to GenerateFromPassword - MaxCost int = 31 // the maximum allowable cost as passed in to GenerateFromPassword - DefaultCost int = 10 // the cost that will actually be set if a cost below MinCost is passed into GenerateFromPassword -) - -// The error returned from CompareHashAndPassword when a password and hash do -// not match. -var ErrMismatchedHashAndPassword = errors.New("crypto/bcrypt: hashedPassword is not the hash of the given password") - -// The error returned from CompareHashAndPassword when a hash is too short to -// be a bcrypt hash. -var ErrHashTooShort = errors.New("crypto/bcrypt: hashedSecret too short to be a bcrypted password") - -// The error returned from CompareHashAndPassword when a hash was created with -// a bcrypt algorithm newer than this implementation. -type HashVersionTooNewError byte - -func (hv HashVersionTooNewError) Error() string { - return fmt.Sprintf("crypto/bcrypt: bcrypt algorithm version '%c' requested is newer than current version '%c'", byte(hv), majorVersion) -} - -// The error returned from CompareHashAndPassword when a hash starts with something other than '$' -type InvalidHashPrefixError byte - -func (ih InvalidHashPrefixError) Error() string { - return fmt.Sprintf("crypto/bcrypt: bcrypt hashes must start with '$', but hashedSecret started with '%c'", byte(ih)) -} - -type InvalidCostError int - -func (ic InvalidCostError) Error() string { - return fmt.Sprintf("crypto/bcrypt: cost %d is outside allowed range (%d,%d)", int(ic), int(MinCost), int(MaxCost)) -} - -const ( - majorVersion = '2' - minorVersion = 'a' - maxSaltSize = 16 - maxCryptedHashSize = 23 - encodedSaltSize = 22 - encodedHashSize = 31 - minHashSize = 59 -) - -// magicCipherData is an IV for the 64 Blowfish encryption calls in -// bcrypt(). It's the string "OrpheanBeholderScryDoubt" in big-endian bytes. -var magicCipherData = []byte{ - 0x4f, 0x72, 0x70, 0x68, - 0x65, 0x61, 0x6e, 0x42, - 0x65, 0x68, 0x6f, 0x6c, - 0x64, 0x65, 0x72, 0x53, - 0x63, 0x72, 0x79, 0x44, - 0x6f, 0x75, 0x62, 0x74, -} - -type hashed struct { - hash []byte - salt []byte - cost int // allowed range is MinCost to MaxCost - major byte - minor byte -} - -// GenerateFromPassword returns the bcrypt hash of the password at the given -// cost. If the cost given is less than MinCost, the cost will be set to -// DefaultCost, instead. Use CompareHashAndPassword, as defined in this package, -// to compare the returned hashed password with its cleartext version. -func GenerateFromPassword(password []byte, cost int) ([]byte, error) { - p, err := newFromPassword(password, cost) - if err != nil { - return nil, err - } - return p.Hash(), nil -} - -// CompareHashAndPassword compares a bcrypt hashed password with its possible -// plaintext equivalent. Returns nil on success, or an error on failure. -func CompareHashAndPassword(hashedPassword, password []byte) error { - p, err := newFromHash(hashedPassword) - if err != nil { - return err - } - - otherHash, err := bcrypt(password, p.cost, p.salt) - if err != nil { - return err - } - - otherP := &hashed{otherHash, p.salt, p.cost, p.major, p.minor} - if subtle.ConstantTimeCompare(p.Hash(), otherP.Hash()) == 1 { - return nil - } - - return ErrMismatchedHashAndPassword -} - -// Cost returns the hashing cost used to create the given hashed -// password. When, in the future, the hashing cost of a password system needs -// to be increased in order to adjust for greater computational power, this -// function allows one to establish which passwords need to be updated. -func Cost(hashedPassword []byte) (int, error) { - p, err := newFromHash(hashedPassword) - if err != nil { - return 0, err - } - return p.cost, nil -} - -func newFromPassword(password []byte, cost int) (*hashed, error) { - if cost < MinCost { - cost = DefaultCost - } - p := new(hashed) - p.major = majorVersion - p.minor = minorVersion - - err := checkCost(cost) - if err != nil { - return nil, err - } - p.cost = cost - - unencodedSalt := make([]byte, maxSaltSize) - _, err = io.ReadFull(rand.Reader, unencodedSalt) - if err != nil { - return nil, err - } - - p.salt = base64Encode(unencodedSalt) - hash, err := bcrypt(password, p.cost, p.salt) - if err != nil { - return nil, err - } - p.hash = hash - return p, err -} - -func newFromHash(hashedSecret []byte) (*hashed, error) { - if len(hashedSecret) < minHashSize { - return nil, ErrHashTooShort - } - p := new(hashed) - n, err := p.decodeVersion(hashedSecret) - if err != nil { - return nil, err - } - hashedSecret = hashedSecret[n:] - n, err = p.decodeCost(hashedSecret) - if err != nil { - return nil, err - } - hashedSecret = hashedSecret[n:] - - // The "+2" is here because we'll have to append at most 2 '=' to the salt - // when base64 decoding it in expensiveBlowfishSetup(). - p.salt = make([]byte, encodedSaltSize, encodedSaltSize+2) - copy(p.salt, hashedSecret[:encodedSaltSize]) - - hashedSecret = hashedSecret[encodedSaltSize:] - p.hash = make([]byte, len(hashedSecret)) - copy(p.hash, hashedSecret) - - return p, nil -} - -func bcrypt(password []byte, cost int, salt []byte) ([]byte, error) { - cipherData := make([]byte, len(magicCipherData)) - copy(cipherData, magicCipherData) - - c, err := expensiveBlowfishSetup(password, uint32(cost), salt) - if err != nil { - return nil, err - } - - for i := 0; i < 24; i += 8 { - for j := 0; j < 64; j++ { - c.Encrypt(cipherData[i:i+8], cipherData[i:i+8]) - } - } - - // Bug compatibility with C bcrypt implementations. We only encode 23 of - // the 24 bytes encrypted. - hsh := base64Encode(cipherData[:maxCryptedHashSize]) - return hsh, nil -} - -func expensiveBlowfishSetup(key []byte, cost uint32, salt []byte) (*blowfish.Cipher, error) { - csalt, err := base64Decode(salt) - if err != nil { - return nil, err - } - - // Bug compatibility with C bcrypt implementations. They use the trailing - // NULL in the key string during expansion. - // We copy the key to prevent changing the underlying array. - ckey := append(key[:len(key):len(key)], 0) - - c, err := blowfish.NewSaltedCipher(ckey, csalt) - if err != nil { - return nil, err - } - - var i, rounds uint64 - rounds = 1 << cost - for i = 0; i < rounds; i++ { - blowfish.ExpandKey(ckey, c) - blowfish.ExpandKey(csalt, c) - } - - return c, nil -} - -func (p *hashed) Hash() []byte { - arr := make([]byte, 60) - arr[0] = '$' - arr[1] = p.major - n := 2 - if p.minor != 0 { - arr[2] = p.minor - n = 3 - } - arr[n] = '$' - n++ - copy(arr[n:], []byte(fmt.Sprintf("%02d", p.cost))) - n += 2 - arr[n] = '$' - n++ - copy(arr[n:], p.salt) - n += encodedSaltSize - copy(arr[n:], p.hash) - n += encodedHashSize - return arr[:n] -} - -func (p *hashed) decodeVersion(sbytes []byte) (int, error) { - if sbytes[0] != '$' { - return -1, InvalidHashPrefixError(sbytes[0]) - } - if sbytes[1] > majorVersion { - return -1, HashVersionTooNewError(sbytes[1]) - } - p.major = sbytes[1] - n := 3 - if sbytes[2] != '$' { - p.minor = sbytes[2] - n++ - } - return n, nil -} - -// sbytes should begin where decodeVersion left off. -func (p *hashed) decodeCost(sbytes []byte) (int, error) { - cost, err := strconv.Atoi(string(sbytes[0:2])) - if err != nil { - return -1, err - } - err = checkCost(cost) - if err != nil { - return -1, err - } - p.cost = cost - return 3, nil -} - -func (p *hashed) String() string { - return fmt.Sprintf("&{hash: %#v, salt: %#v, cost: %d, major: %c, minor: %c}", string(p.hash), p.salt, p.cost, p.major, p.minor) -} - -func checkCost(cost int) error { - if cost < MinCost || cost > MaxCost { - return InvalidCostError(cost) - } - return nil -} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b.go b/vendor/golang.org/x/crypto/blake2b/blake2b.go deleted file mode 100644 index d2e98d4..0000000 --- a/vendor/golang.org/x/crypto/blake2b/blake2b.go +++ /dev/null @@ -1,291 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package blake2b implements the BLAKE2b hash algorithm defined by RFC 7693 -// and the extendable output function (XOF) BLAKE2Xb. -// -// BLAKE2b is optimized for 64-bit platforms—including NEON-enabled ARMs—and -// produces digests of any size between 1 and 64 bytes. -// For a detailed specification of BLAKE2b see https://blake2.net/blake2.pdf -// and for BLAKE2Xb see https://blake2.net/blake2x.pdf -// -// If you aren't sure which function you need, use BLAKE2b (Sum512 or New512). -// If you need a secret-key MAC (message authentication code), use the New512 -// function with a non-nil key. -// -// BLAKE2X is a construction to compute hash values larger than 64 bytes. It -// can produce hash values between 0 and 4 GiB. -package blake2b - -import ( - "encoding/binary" - "errors" - "hash" -) - -const ( - // The blocksize of BLAKE2b in bytes. - BlockSize = 128 - // The hash size of BLAKE2b-512 in bytes. - Size = 64 - // The hash size of BLAKE2b-384 in bytes. - Size384 = 48 - // The hash size of BLAKE2b-256 in bytes. - Size256 = 32 -) - -var ( - useAVX2 bool - useAVX bool - useSSE4 bool -) - -var ( - errKeySize = errors.New("blake2b: invalid key size") - errHashSize = errors.New("blake2b: invalid hash size") -) - -var iv = [8]uint64{ - 0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1, - 0x510e527fade682d1, 0x9b05688c2b3e6c1f, 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179, -} - -// Sum512 returns the BLAKE2b-512 checksum of the data. -func Sum512(data []byte) [Size]byte { - var sum [Size]byte - checkSum(&sum, Size, data) - return sum -} - -// Sum384 returns the BLAKE2b-384 checksum of the data. -func Sum384(data []byte) [Size384]byte { - var sum [Size]byte - var sum384 [Size384]byte - checkSum(&sum, Size384, data) - copy(sum384[:], sum[:Size384]) - return sum384 -} - -// Sum256 returns the BLAKE2b-256 checksum of the data. -func Sum256(data []byte) [Size256]byte { - var sum [Size]byte - var sum256 [Size256]byte - checkSum(&sum, Size256, data) - copy(sum256[:], sum[:Size256]) - return sum256 -} - -// New512 returns a new hash.Hash computing the BLAKE2b-512 checksum. A non-nil -// key turns the hash into a MAC. The key must be between zero and 64 bytes long. -func New512(key []byte) (hash.Hash, error) { return newDigest(Size, key) } - -// New384 returns a new hash.Hash computing the BLAKE2b-384 checksum. A non-nil -// key turns the hash into a MAC. The key must be between zero and 64 bytes long. -func New384(key []byte) (hash.Hash, error) { return newDigest(Size384, key) } - -// New256 returns a new hash.Hash computing the BLAKE2b-256 checksum. A non-nil -// key turns the hash into a MAC. The key must be between zero and 64 bytes long. -func New256(key []byte) (hash.Hash, error) { return newDigest(Size256, key) } - -// New returns a new hash.Hash computing the BLAKE2b checksum with a custom length. -// A non-nil key turns the hash into a MAC. The key must be between zero and 64 bytes long. -// The hash size can be a value between 1 and 64 but it is highly recommended to use -// values equal or greater than: -// - 32 if BLAKE2b is used as a hash function (The key is zero bytes long). -// - 16 if BLAKE2b is used as a MAC function (The key is at least 16 bytes long). -// When the key is nil, the returned hash.Hash implements BinaryMarshaler -// and BinaryUnmarshaler for state (de)serialization as documented by hash.Hash. -func New(size int, key []byte) (hash.Hash, error) { return newDigest(size, key) } - -func newDigest(hashSize int, key []byte) (*digest, error) { - if hashSize < 1 || hashSize > Size { - return nil, errHashSize - } - if len(key) > Size { - return nil, errKeySize - } - d := &digest{ - size: hashSize, - keyLen: len(key), - } - copy(d.key[:], key) - d.Reset() - return d, nil -} - -func checkSum(sum *[Size]byte, hashSize int, data []byte) { - h := iv - h[0] ^= uint64(hashSize) | (1 << 16) | (1 << 24) - var c [2]uint64 - - if length := len(data); length > BlockSize { - n := length &^ (BlockSize - 1) - if length == n { - n -= BlockSize - } - hashBlocks(&h, &c, 0, data[:n]) - data = data[n:] - } - - var block [BlockSize]byte - offset := copy(block[:], data) - remaining := uint64(BlockSize - offset) - if c[0] < remaining { - c[1]-- - } - c[0] -= remaining - - hashBlocks(&h, &c, 0xFFFFFFFFFFFFFFFF, block[:]) - - for i, v := range h[:(hashSize+7)/8] { - binary.LittleEndian.PutUint64(sum[8*i:], v) - } -} - -type digest struct { - h [8]uint64 - c [2]uint64 - size int - block [BlockSize]byte - offset int - - key [BlockSize]byte - keyLen int -} - -const ( - magic = "b2b" - marshaledSize = len(magic) + 8*8 + 2*8 + 1 + BlockSize + 1 -) - -func (d *digest) MarshalBinary() ([]byte, error) { - if d.keyLen != 0 { - return nil, errors.New("crypto/blake2b: cannot marshal MACs") - } - b := make([]byte, 0, marshaledSize) - b = append(b, magic...) - for i := 0; i < 8; i++ { - b = appendUint64(b, d.h[i]) - } - b = appendUint64(b, d.c[0]) - b = appendUint64(b, d.c[1]) - // Maximum value for size is 64 - b = append(b, byte(d.size)) - b = append(b, d.block[:]...) - b = append(b, byte(d.offset)) - return b, nil -} - -func (d *digest) UnmarshalBinary(b []byte) error { - if len(b) < len(magic) || string(b[:len(magic)]) != magic { - return errors.New("crypto/blake2b: invalid hash state identifier") - } - if len(b) != marshaledSize { - return errors.New("crypto/blake2b: invalid hash state size") - } - b = b[len(magic):] - for i := 0; i < 8; i++ { - b, d.h[i] = consumeUint64(b) - } - b, d.c[0] = consumeUint64(b) - b, d.c[1] = consumeUint64(b) - d.size = int(b[0]) - b = b[1:] - copy(d.block[:], b[:BlockSize]) - b = b[BlockSize:] - d.offset = int(b[0]) - return nil -} - -func (d *digest) BlockSize() int { return BlockSize } - -func (d *digest) Size() int { return d.size } - -func (d *digest) Reset() { - d.h = iv - d.h[0] ^= uint64(d.size) | (uint64(d.keyLen) << 8) | (1 << 16) | (1 << 24) - d.offset, d.c[0], d.c[1] = 0, 0, 0 - if d.keyLen > 0 { - d.block = d.key - d.offset = BlockSize - } -} - -func (d *digest) Write(p []byte) (n int, err error) { - n = len(p) - - if d.offset > 0 { - remaining := BlockSize - d.offset - if n <= remaining { - d.offset += copy(d.block[d.offset:], p) - return - } - copy(d.block[d.offset:], p[:remaining]) - hashBlocks(&d.h, &d.c, 0, d.block[:]) - d.offset = 0 - p = p[remaining:] - } - - if length := len(p); length > BlockSize { - nn := length &^ (BlockSize - 1) - if length == nn { - nn -= BlockSize - } - hashBlocks(&d.h, &d.c, 0, p[:nn]) - p = p[nn:] - } - - if len(p) > 0 { - d.offset += copy(d.block[:], p) - } - - return -} - -func (d *digest) Sum(sum []byte) []byte { - var hash [Size]byte - d.finalize(&hash) - return append(sum, hash[:d.size]...) -} - -func (d *digest) finalize(hash *[Size]byte) { - var block [BlockSize]byte - copy(block[:], d.block[:d.offset]) - remaining := uint64(BlockSize - d.offset) - - c := d.c - if c[0] < remaining { - c[1]-- - } - c[0] -= remaining - - h := d.h - hashBlocks(&h, &c, 0xFFFFFFFFFFFFFFFF, block[:]) - - for i, v := range h { - binary.LittleEndian.PutUint64(hash[8*i:], v) - } -} - -func appendUint64(b []byte, x uint64) []byte { - var a [8]byte - binary.BigEndian.PutUint64(a[:], x) - return append(b, a[:]...) -} - -func appendUint32(b []byte, x uint32) []byte { - var a [4]byte - binary.BigEndian.PutUint32(a[:], x) - return append(b, a[:]...) -} - -func consumeUint64(b []byte) ([]byte, uint64) { - x := binary.BigEndian.Uint64(b) - return b[8:], x -} - -func consumeUint32(b []byte) ([]byte, uint32) { - x := binary.BigEndian.Uint32(b) - return b[4:], x -} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.go b/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.go deleted file mode 100644 index 56bfaaa..0000000 --- a/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.7 && amd64 && gc && !purego -// +build go1.7,amd64,gc,!purego - -package blake2b - -import "golang.org/x/sys/cpu" - -func init() { - useAVX2 = cpu.X86.HasAVX2 - useAVX = cpu.X86.HasAVX - useSSE4 = cpu.X86.HasSSE41 -} - -//go:noescape -func hashBlocksAVX2(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) - -//go:noescape -func hashBlocksAVX(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) - -//go:noescape -func hashBlocksSSE4(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) - -func hashBlocks(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) { - switch { - case useAVX2: - hashBlocksAVX2(h, c, flag, blocks) - case useAVX: - hashBlocksAVX(h, c, flag, blocks) - case useSSE4: - hashBlocksSSE4(h, c, flag, blocks) - default: - hashBlocksGeneric(h, c, flag, blocks) - } -} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.s b/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.s deleted file mode 100644 index 4b9daa1..0000000 --- a/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.s +++ /dev/null @@ -1,745 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.7 && amd64 && gc && !purego -// +build go1.7,amd64,gc,!purego - -#include "textflag.h" - -DATA ·AVX2_iv0<>+0x00(SB)/8, $0x6a09e667f3bcc908 -DATA ·AVX2_iv0<>+0x08(SB)/8, $0xbb67ae8584caa73b -DATA ·AVX2_iv0<>+0x10(SB)/8, $0x3c6ef372fe94f82b -DATA ·AVX2_iv0<>+0x18(SB)/8, $0xa54ff53a5f1d36f1 -GLOBL ·AVX2_iv0<>(SB), (NOPTR+RODATA), $32 - -DATA ·AVX2_iv1<>+0x00(SB)/8, $0x510e527fade682d1 -DATA ·AVX2_iv1<>+0x08(SB)/8, $0x9b05688c2b3e6c1f -DATA ·AVX2_iv1<>+0x10(SB)/8, $0x1f83d9abfb41bd6b -DATA ·AVX2_iv1<>+0x18(SB)/8, $0x5be0cd19137e2179 -GLOBL ·AVX2_iv1<>(SB), (NOPTR+RODATA), $32 - -DATA ·AVX2_c40<>+0x00(SB)/8, $0x0201000706050403 -DATA ·AVX2_c40<>+0x08(SB)/8, $0x0a09080f0e0d0c0b -DATA ·AVX2_c40<>+0x10(SB)/8, $0x0201000706050403 -DATA ·AVX2_c40<>+0x18(SB)/8, $0x0a09080f0e0d0c0b -GLOBL ·AVX2_c40<>(SB), (NOPTR+RODATA), $32 - -DATA ·AVX2_c48<>+0x00(SB)/8, $0x0100070605040302 -DATA ·AVX2_c48<>+0x08(SB)/8, $0x09080f0e0d0c0b0a -DATA ·AVX2_c48<>+0x10(SB)/8, $0x0100070605040302 -DATA ·AVX2_c48<>+0x18(SB)/8, $0x09080f0e0d0c0b0a -GLOBL ·AVX2_c48<>(SB), (NOPTR+RODATA), $32 - -DATA ·AVX_iv0<>+0x00(SB)/8, $0x6a09e667f3bcc908 -DATA ·AVX_iv0<>+0x08(SB)/8, $0xbb67ae8584caa73b -GLOBL ·AVX_iv0<>(SB), (NOPTR+RODATA), $16 - -DATA ·AVX_iv1<>+0x00(SB)/8, $0x3c6ef372fe94f82b -DATA ·AVX_iv1<>+0x08(SB)/8, $0xa54ff53a5f1d36f1 -GLOBL ·AVX_iv1<>(SB), (NOPTR+RODATA), $16 - -DATA ·AVX_iv2<>+0x00(SB)/8, $0x510e527fade682d1 -DATA ·AVX_iv2<>+0x08(SB)/8, $0x9b05688c2b3e6c1f -GLOBL ·AVX_iv2<>(SB), (NOPTR+RODATA), $16 - -DATA ·AVX_iv3<>+0x00(SB)/8, $0x1f83d9abfb41bd6b -DATA ·AVX_iv3<>+0x08(SB)/8, $0x5be0cd19137e2179 -GLOBL ·AVX_iv3<>(SB), (NOPTR+RODATA), $16 - -DATA ·AVX_c40<>+0x00(SB)/8, $0x0201000706050403 -DATA ·AVX_c40<>+0x08(SB)/8, $0x0a09080f0e0d0c0b -GLOBL ·AVX_c40<>(SB), (NOPTR+RODATA), $16 - -DATA ·AVX_c48<>+0x00(SB)/8, $0x0100070605040302 -DATA ·AVX_c48<>+0x08(SB)/8, $0x09080f0e0d0c0b0a -GLOBL ·AVX_c48<>(SB), (NOPTR+RODATA), $16 - -#define VPERMQ_0x39_Y1_Y1 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xc9; BYTE $0x39 -#define VPERMQ_0x93_Y1_Y1 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xc9; BYTE $0x93 -#define VPERMQ_0x4E_Y2_Y2 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xd2; BYTE $0x4e -#define VPERMQ_0x93_Y3_Y3 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xdb; BYTE $0x93 -#define VPERMQ_0x39_Y3_Y3 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xdb; BYTE $0x39 - -#define ROUND_AVX2(m0, m1, m2, m3, t, c40, c48) \ - VPADDQ m0, Y0, Y0; \ - VPADDQ Y1, Y0, Y0; \ - VPXOR Y0, Y3, Y3; \ - VPSHUFD $-79, Y3, Y3; \ - VPADDQ Y3, Y2, Y2; \ - VPXOR Y2, Y1, Y1; \ - VPSHUFB c40, Y1, Y1; \ - VPADDQ m1, Y0, Y0; \ - VPADDQ Y1, Y0, Y0; \ - VPXOR Y0, Y3, Y3; \ - VPSHUFB c48, Y3, Y3; \ - VPADDQ Y3, Y2, Y2; \ - VPXOR Y2, Y1, Y1; \ - VPADDQ Y1, Y1, t; \ - VPSRLQ $63, Y1, Y1; \ - VPXOR t, Y1, Y1; \ - VPERMQ_0x39_Y1_Y1; \ - VPERMQ_0x4E_Y2_Y2; \ - VPERMQ_0x93_Y3_Y3; \ - VPADDQ m2, Y0, Y0; \ - VPADDQ Y1, Y0, Y0; \ - VPXOR Y0, Y3, Y3; \ - VPSHUFD $-79, Y3, Y3; \ - VPADDQ Y3, Y2, Y2; \ - VPXOR Y2, Y1, Y1; \ - VPSHUFB c40, Y1, Y1; \ - VPADDQ m3, Y0, Y0; \ - VPADDQ Y1, Y0, Y0; \ - VPXOR Y0, Y3, Y3; \ - VPSHUFB c48, Y3, Y3; \ - VPADDQ Y3, Y2, Y2; \ - VPXOR Y2, Y1, Y1; \ - VPADDQ Y1, Y1, t; \ - VPSRLQ $63, Y1, Y1; \ - VPXOR t, Y1, Y1; \ - VPERMQ_0x39_Y3_Y3; \ - VPERMQ_0x4E_Y2_Y2; \ - VPERMQ_0x93_Y1_Y1 - -#define VMOVQ_SI_X11_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x1E -#define VMOVQ_SI_X12_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x26 -#define VMOVQ_SI_X13_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x2E -#define VMOVQ_SI_X14_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x36 -#define VMOVQ_SI_X15_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x3E - -#define VMOVQ_SI_X11(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x5E; BYTE $n -#define VMOVQ_SI_X12(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x66; BYTE $n -#define VMOVQ_SI_X13(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x6E; BYTE $n -#define VMOVQ_SI_X14(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x76; BYTE $n -#define VMOVQ_SI_X15(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x7E; BYTE $n - -#define VPINSRQ_1_SI_X11_0 BYTE $0xC4; BYTE $0x63; BYTE $0xA1; BYTE $0x22; BYTE $0x1E; BYTE $0x01 -#define VPINSRQ_1_SI_X12_0 BYTE $0xC4; BYTE $0x63; BYTE $0x99; BYTE $0x22; BYTE $0x26; BYTE $0x01 -#define VPINSRQ_1_SI_X13_0 BYTE $0xC4; BYTE $0x63; BYTE $0x91; BYTE $0x22; BYTE $0x2E; BYTE $0x01 -#define VPINSRQ_1_SI_X14_0 BYTE $0xC4; BYTE $0x63; BYTE $0x89; BYTE $0x22; BYTE $0x36; BYTE $0x01 -#define VPINSRQ_1_SI_X15_0 BYTE $0xC4; BYTE $0x63; BYTE $0x81; BYTE $0x22; BYTE $0x3E; BYTE $0x01 - -#define VPINSRQ_1_SI_X11(n) BYTE $0xC4; BYTE $0x63; BYTE $0xA1; BYTE $0x22; BYTE $0x5E; BYTE $n; BYTE $0x01 -#define VPINSRQ_1_SI_X12(n) BYTE $0xC4; BYTE $0x63; BYTE $0x99; BYTE $0x22; BYTE $0x66; BYTE $n; BYTE $0x01 -#define VPINSRQ_1_SI_X13(n) BYTE $0xC4; BYTE $0x63; BYTE $0x91; BYTE $0x22; BYTE $0x6E; BYTE $n; BYTE $0x01 -#define VPINSRQ_1_SI_X14(n) BYTE $0xC4; BYTE $0x63; BYTE $0x89; BYTE $0x22; BYTE $0x76; BYTE $n; BYTE $0x01 -#define VPINSRQ_1_SI_X15(n) BYTE $0xC4; BYTE $0x63; BYTE $0x81; BYTE $0x22; BYTE $0x7E; BYTE $n; BYTE $0x01 - -#define VMOVQ_R8_X15 BYTE $0xC4; BYTE $0x41; BYTE $0xF9; BYTE $0x6E; BYTE $0xF8 -#define VPINSRQ_1_R9_X15 BYTE $0xC4; BYTE $0x43; BYTE $0x81; BYTE $0x22; BYTE $0xF9; BYTE $0x01 - -// load msg: Y12 = (i0, i1, i2, i3) -// i0, i1, i2, i3 must not be 0 -#define LOAD_MSG_AVX2_Y12(i0, i1, i2, i3) \ - VMOVQ_SI_X12(i0*8); \ - VMOVQ_SI_X11(i2*8); \ - VPINSRQ_1_SI_X12(i1*8); \ - VPINSRQ_1_SI_X11(i3*8); \ - VINSERTI128 $1, X11, Y12, Y12 - -// load msg: Y13 = (i0, i1, i2, i3) -// i0, i1, i2, i3 must not be 0 -#define LOAD_MSG_AVX2_Y13(i0, i1, i2, i3) \ - VMOVQ_SI_X13(i0*8); \ - VMOVQ_SI_X11(i2*8); \ - VPINSRQ_1_SI_X13(i1*8); \ - VPINSRQ_1_SI_X11(i3*8); \ - VINSERTI128 $1, X11, Y13, Y13 - -// load msg: Y14 = (i0, i1, i2, i3) -// i0, i1, i2, i3 must not be 0 -#define LOAD_MSG_AVX2_Y14(i0, i1, i2, i3) \ - VMOVQ_SI_X14(i0*8); \ - VMOVQ_SI_X11(i2*8); \ - VPINSRQ_1_SI_X14(i1*8); \ - VPINSRQ_1_SI_X11(i3*8); \ - VINSERTI128 $1, X11, Y14, Y14 - -// load msg: Y15 = (i0, i1, i2, i3) -// i0, i1, i2, i3 must not be 0 -#define LOAD_MSG_AVX2_Y15(i0, i1, i2, i3) \ - VMOVQ_SI_X15(i0*8); \ - VMOVQ_SI_X11(i2*8); \ - VPINSRQ_1_SI_X15(i1*8); \ - VPINSRQ_1_SI_X11(i3*8); \ - VINSERTI128 $1, X11, Y15, Y15 - -#define LOAD_MSG_AVX2_0_2_4_6_1_3_5_7_8_10_12_14_9_11_13_15() \ - VMOVQ_SI_X12_0; \ - VMOVQ_SI_X11(4*8); \ - VPINSRQ_1_SI_X12(2*8); \ - VPINSRQ_1_SI_X11(6*8); \ - VINSERTI128 $1, X11, Y12, Y12; \ - LOAD_MSG_AVX2_Y13(1, 3, 5, 7); \ - LOAD_MSG_AVX2_Y14(8, 10, 12, 14); \ - LOAD_MSG_AVX2_Y15(9, 11, 13, 15) - -#define LOAD_MSG_AVX2_14_4_9_13_10_8_15_6_1_0_11_5_12_2_7_3() \ - LOAD_MSG_AVX2_Y12(14, 4, 9, 13); \ - LOAD_MSG_AVX2_Y13(10, 8, 15, 6); \ - VMOVQ_SI_X11(11*8); \ - VPSHUFD $0x4E, 0*8(SI), X14; \ - VPINSRQ_1_SI_X11(5*8); \ - VINSERTI128 $1, X11, Y14, Y14; \ - LOAD_MSG_AVX2_Y15(12, 2, 7, 3) - -#define LOAD_MSG_AVX2_11_12_5_15_8_0_2_13_10_3_7_9_14_6_1_4() \ - VMOVQ_SI_X11(5*8); \ - VMOVDQU 11*8(SI), X12; \ - VPINSRQ_1_SI_X11(15*8); \ - VINSERTI128 $1, X11, Y12, Y12; \ - VMOVQ_SI_X13(8*8); \ - VMOVQ_SI_X11(2*8); \ - VPINSRQ_1_SI_X13_0; \ - VPINSRQ_1_SI_X11(13*8); \ - VINSERTI128 $1, X11, Y13, Y13; \ - LOAD_MSG_AVX2_Y14(10, 3, 7, 9); \ - LOAD_MSG_AVX2_Y15(14, 6, 1, 4) - -#define LOAD_MSG_AVX2_7_3_13_11_9_1_12_14_2_5_4_15_6_10_0_8() \ - LOAD_MSG_AVX2_Y12(7, 3, 13, 11); \ - LOAD_MSG_AVX2_Y13(9, 1, 12, 14); \ - LOAD_MSG_AVX2_Y14(2, 5, 4, 15); \ - VMOVQ_SI_X15(6*8); \ - VMOVQ_SI_X11_0; \ - VPINSRQ_1_SI_X15(10*8); \ - VPINSRQ_1_SI_X11(8*8); \ - VINSERTI128 $1, X11, Y15, Y15 - -#define LOAD_MSG_AVX2_9_5_2_10_0_7_4_15_14_11_6_3_1_12_8_13() \ - LOAD_MSG_AVX2_Y12(9, 5, 2, 10); \ - VMOVQ_SI_X13_0; \ - VMOVQ_SI_X11(4*8); \ - VPINSRQ_1_SI_X13(7*8); \ - VPINSRQ_1_SI_X11(15*8); \ - VINSERTI128 $1, X11, Y13, Y13; \ - LOAD_MSG_AVX2_Y14(14, 11, 6, 3); \ - LOAD_MSG_AVX2_Y15(1, 12, 8, 13) - -#define LOAD_MSG_AVX2_2_6_0_8_12_10_11_3_4_7_15_1_13_5_14_9() \ - VMOVQ_SI_X12(2*8); \ - VMOVQ_SI_X11_0; \ - VPINSRQ_1_SI_X12(6*8); \ - VPINSRQ_1_SI_X11(8*8); \ - VINSERTI128 $1, X11, Y12, Y12; \ - LOAD_MSG_AVX2_Y13(12, 10, 11, 3); \ - LOAD_MSG_AVX2_Y14(4, 7, 15, 1); \ - LOAD_MSG_AVX2_Y15(13, 5, 14, 9) - -#define LOAD_MSG_AVX2_12_1_14_4_5_15_13_10_0_6_9_8_7_3_2_11() \ - LOAD_MSG_AVX2_Y12(12, 1, 14, 4); \ - LOAD_MSG_AVX2_Y13(5, 15, 13, 10); \ - VMOVQ_SI_X14_0; \ - VPSHUFD $0x4E, 8*8(SI), X11; \ - VPINSRQ_1_SI_X14(6*8); \ - VINSERTI128 $1, X11, Y14, Y14; \ - LOAD_MSG_AVX2_Y15(7, 3, 2, 11) - -#define LOAD_MSG_AVX2_13_7_12_3_11_14_1_9_5_15_8_2_0_4_6_10() \ - LOAD_MSG_AVX2_Y12(13, 7, 12, 3); \ - LOAD_MSG_AVX2_Y13(11, 14, 1, 9); \ - LOAD_MSG_AVX2_Y14(5, 15, 8, 2); \ - VMOVQ_SI_X15_0; \ - VMOVQ_SI_X11(6*8); \ - VPINSRQ_1_SI_X15(4*8); \ - VPINSRQ_1_SI_X11(10*8); \ - VINSERTI128 $1, X11, Y15, Y15 - -#define LOAD_MSG_AVX2_6_14_11_0_15_9_3_8_12_13_1_10_2_7_4_5() \ - VMOVQ_SI_X12(6*8); \ - VMOVQ_SI_X11(11*8); \ - VPINSRQ_1_SI_X12(14*8); \ - VPINSRQ_1_SI_X11_0; \ - VINSERTI128 $1, X11, Y12, Y12; \ - LOAD_MSG_AVX2_Y13(15, 9, 3, 8); \ - VMOVQ_SI_X11(1*8); \ - VMOVDQU 12*8(SI), X14; \ - VPINSRQ_1_SI_X11(10*8); \ - VINSERTI128 $1, X11, Y14, Y14; \ - VMOVQ_SI_X15(2*8); \ - VMOVDQU 4*8(SI), X11; \ - VPINSRQ_1_SI_X15(7*8); \ - VINSERTI128 $1, X11, Y15, Y15 - -#define LOAD_MSG_AVX2_10_8_7_1_2_4_6_5_15_9_3_13_11_14_12_0() \ - LOAD_MSG_AVX2_Y12(10, 8, 7, 1); \ - VMOVQ_SI_X13(2*8); \ - VPSHUFD $0x4E, 5*8(SI), X11; \ - VPINSRQ_1_SI_X13(4*8); \ - VINSERTI128 $1, X11, Y13, Y13; \ - LOAD_MSG_AVX2_Y14(15, 9, 3, 13); \ - VMOVQ_SI_X15(11*8); \ - VMOVQ_SI_X11(12*8); \ - VPINSRQ_1_SI_X15(14*8); \ - VPINSRQ_1_SI_X11_0; \ - VINSERTI128 $1, X11, Y15, Y15 - -// func hashBlocksAVX2(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) -TEXT ·hashBlocksAVX2(SB), 4, $320-48 // frame size = 288 + 32 byte alignment - MOVQ h+0(FP), AX - MOVQ c+8(FP), BX - MOVQ flag+16(FP), CX - MOVQ blocks_base+24(FP), SI - MOVQ blocks_len+32(FP), DI - - MOVQ SP, DX - ADDQ $31, DX - ANDQ $~31, DX - - MOVQ CX, 16(DX) - XORQ CX, CX - MOVQ CX, 24(DX) - - VMOVDQU ·AVX2_c40<>(SB), Y4 - VMOVDQU ·AVX2_c48<>(SB), Y5 - - VMOVDQU 0(AX), Y8 - VMOVDQU 32(AX), Y9 - VMOVDQU ·AVX2_iv0<>(SB), Y6 - VMOVDQU ·AVX2_iv1<>(SB), Y7 - - MOVQ 0(BX), R8 - MOVQ 8(BX), R9 - MOVQ R9, 8(DX) - -loop: - ADDQ $128, R8 - MOVQ R8, 0(DX) - CMPQ R8, $128 - JGE noinc - INCQ R9 - MOVQ R9, 8(DX) - -noinc: - VMOVDQA Y8, Y0 - VMOVDQA Y9, Y1 - VMOVDQA Y6, Y2 - VPXOR 0(DX), Y7, Y3 - - LOAD_MSG_AVX2_0_2_4_6_1_3_5_7_8_10_12_14_9_11_13_15() - VMOVDQA Y12, 32(DX) - VMOVDQA Y13, 64(DX) - VMOVDQA Y14, 96(DX) - VMOVDQA Y15, 128(DX) - ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) - LOAD_MSG_AVX2_14_4_9_13_10_8_15_6_1_0_11_5_12_2_7_3() - VMOVDQA Y12, 160(DX) - VMOVDQA Y13, 192(DX) - VMOVDQA Y14, 224(DX) - VMOVDQA Y15, 256(DX) - - ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) - LOAD_MSG_AVX2_11_12_5_15_8_0_2_13_10_3_7_9_14_6_1_4() - ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) - LOAD_MSG_AVX2_7_3_13_11_9_1_12_14_2_5_4_15_6_10_0_8() - ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) - LOAD_MSG_AVX2_9_5_2_10_0_7_4_15_14_11_6_3_1_12_8_13() - ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) - LOAD_MSG_AVX2_2_6_0_8_12_10_11_3_4_7_15_1_13_5_14_9() - ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) - LOAD_MSG_AVX2_12_1_14_4_5_15_13_10_0_6_9_8_7_3_2_11() - ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) - LOAD_MSG_AVX2_13_7_12_3_11_14_1_9_5_15_8_2_0_4_6_10() - ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) - LOAD_MSG_AVX2_6_14_11_0_15_9_3_8_12_13_1_10_2_7_4_5() - ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) - LOAD_MSG_AVX2_10_8_7_1_2_4_6_5_15_9_3_13_11_14_12_0() - ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) - - ROUND_AVX2(32(DX), 64(DX), 96(DX), 128(DX), Y10, Y4, Y5) - ROUND_AVX2(160(DX), 192(DX), 224(DX), 256(DX), Y10, Y4, Y5) - - VPXOR Y0, Y8, Y8 - VPXOR Y1, Y9, Y9 - VPXOR Y2, Y8, Y8 - VPXOR Y3, Y9, Y9 - - LEAQ 128(SI), SI - SUBQ $128, DI - JNE loop - - MOVQ R8, 0(BX) - MOVQ R9, 8(BX) - - VMOVDQU Y8, 0(AX) - VMOVDQU Y9, 32(AX) - VZEROUPPER - - RET - -#define VPUNPCKLQDQ_X2_X2_X15 BYTE $0xC5; BYTE $0x69; BYTE $0x6C; BYTE $0xFA -#define VPUNPCKLQDQ_X3_X3_X15 BYTE $0xC5; BYTE $0x61; BYTE $0x6C; BYTE $0xFB -#define VPUNPCKLQDQ_X7_X7_X15 BYTE $0xC5; BYTE $0x41; BYTE $0x6C; BYTE $0xFF -#define VPUNPCKLQDQ_X13_X13_X15 BYTE $0xC4; BYTE $0x41; BYTE $0x11; BYTE $0x6C; BYTE $0xFD -#define VPUNPCKLQDQ_X14_X14_X15 BYTE $0xC4; BYTE $0x41; BYTE $0x09; BYTE $0x6C; BYTE $0xFE - -#define VPUNPCKHQDQ_X15_X2_X2 BYTE $0xC4; BYTE $0xC1; BYTE $0x69; BYTE $0x6D; BYTE $0xD7 -#define VPUNPCKHQDQ_X15_X3_X3 BYTE $0xC4; BYTE $0xC1; BYTE $0x61; BYTE $0x6D; BYTE $0xDF -#define VPUNPCKHQDQ_X15_X6_X6 BYTE $0xC4; BYTE $0xC1; BYTE $0x49; BYTE $0x6D; BYTE $0xF7 -#define VPUNPCKHQDQ_X15_X7_X7 BYTE $0xC4; BYTE $0xC1; BYTE $0x41; BYTE $0x6D; BYTE $0xFF -#define VPUNPCKHQDQ_X15_X3_X2 BYTE $0xC4; BYTE $0xC1; BYTE $0x61; BYTE $0x6D; BYTE $0xD7 -#define VPUNPCKHQDQ_X15_X7_X6 BYTE $0xC4; BYTE $0xC1; BYTE $0x41; BYTE $0x6D; BYTE $0xF7 -#define VPUNPCKHQDQ_X15_X13_X3 BYTE $0xC4; BYTE $0xC1; BYTE $0x11; BYTE $0x6D; BYTE $0xDF -#define VPUNPCKHQDQ_X15_X13_X7 BYTE $0xC4; BYTE $0xC1; BYTE $0x11; BYTE $0x6D; BYTE $0xFF - -#define SHUFFLE_AVX() \ - VMOVDQA X6, X13; \ - VMOVDQA X2, X14; \ - VMOVDQA X4, X6; \ - VPUNPCKLQDQ_X13_X13_X15; \ - VMOVDQA X5, X4; \ - VMOVDQA X6, X5; \ - VPUNPCKHQDQ_X15_X7_X6; \ - VPUNPCKLQDQ_X7_X7_X15; \ - VPUNPCKHQDQ_X15_X13_X7; \ - VPUNPCKLQDQ_X3_X3_X15; \ - VPUNPCKHQDQ_X15_X2_X2; \ - VPUNPCKLQDQ_X14_X14_X15; \ - VPUNPCKHQDQ_X15_X3_X3; \ - -#define SHUFFLE_AVX_INV() \ - VMOVDQA X2, X13; \ - VMOVDQA X4, X14; \ - VPUNPCKLQDQ_X2_X2_X15; \ - VMOVDQA X5, X4; \ - VPUNPCKHQDQ_X15_X3_X2; \ - VMOVDQA X14, X5; \ - VPUNPCKLQDQ_X3_X3_X15; \ - VMOVDQA X6, X14; \ - VPUNPCKHQDQ_X15_X13_X3; \ - VPUNPCKLQDQ_X7_X7_X15; \ - VPUNPCKHQDQ_X15_X6_X6; \ - VPUNPCKLQDQ_X14_X14_X15; \ - VPUNPCKHQDQ_X15_X7_X7; \ - -#define HALF_ROUND_AVX(v0, v1, v2, v3, v4, v5, v6, v7, m0, m1, m2, m3, t0, c40, c48) \ - VPADDQ m0, v0, v0; \ - VPADDQ v2, v0, v0; \ - VPADDQ m1, v1, v1; \ - VPADDQ v3, v1, v1; \ - VPXOR v0, v6, v6; \ - VPXOR v1, v7, v7; \ - VPSHUFD $-79, v6, v6; \ - VPSHUFD $-79, v7, v7; \ - VPADDQ v6, v4, v4; \ - VPADDQ v7, v5, v5; \ - VPXOR v4, v2, v2; \ - VPXOR v5, v3, v3; \ - VPSHUFB c40, v2, v2; \ - VPSHUFB c40, v3, v3; \ - VPADDQ m2, v0, v0; \ - VPADDQ v2, v0, v0; \ - VPADDQ m3, v1, v1; \ - VPADDQ v3, v1, v1; \ - VPXOR v0, v6, v6; \ - VPXOR v1, v7, v7; \ - VPSHUFB c48, v6, v6; \ - VPSHUFB c48, v7, v7; \ - VPADDQ v6, v4, v4; \ - VPADDQ v7, v5, v5; \ - VPXOR v4, v2, v2; \ - VPXOR v5, v3, v3; \ - VPADDQ v2, v2, t0; \ - VPSRLQ $63, v2, v2; \ - VPXOR t0, v2, v2; \ - VPADDQ v3, v3, t0; \ - VPSRLQ $63, v3, v3; \ - VPXOR t0, v3, v3 - -// load msg: X12 = (i0, i1), X13 = (i2, i3), X14 = (i4, i5), X15 = (i6, i7) -// i0, i1, i2, i3, i4, i5, i6, i7 must not be 0 -#define LOAD_MSG_AVX(i0, i1, i2, i3, i4, i5, i6, i7) \ - VMOVQ_SI_X12(i0*8); \ - VMOVQ_SI_X13(i2*8); \ - VMOVQ_SI_X14(i4*8); \ - VMOVQ_SI_X15(i6*8); \ - VPINSRQ_1_SI_X12(i1*8); \ - VPINSRQ_1_SI_X13(i3*8); \ - VPINSRQ_1_SI_X14(i5*8); \ - VPINSRQ_1_SI_X15(i7*8) - -// load msg: X12 = (0, 2), X13 = (4, 6), X14 = (1, 3), X15 = (5, 7) -#define LOAD_MSG_AVX_0_2_4_6_1_3_5_7() \ - VMOVQ_SI_X12_0; \ - VMOVQ_SI_X13(4*8); \ - VMOVQ_SI_X14(1*8); \ - VMOVQ_SI_X15(5*8); \ - VPINSRQ_1_SI_X12(2*8); \ - VPINSRQ_1_SI_X13(6*8); \ - VPINSRQ_1_SI_X14(3*8); \ - VPINSRQ_1_SI_X15(7*8) - -// load msg: X12 = (1, 0), X13 = (11, 5), X14 = (12, 2), X15 = (7, 3) -#define LOAD_MSG_AVX_1_0_11_5_12_2_7_3() \ - VPSHUFD $0x4E, 0*8(SI), X12; \ - VMOVQ_SI_X13(11*8); \ - VMOVQ_SI_X14(12*8); \ - VMOVQ_SI_X15(7*8); \ - VPINSRQ_1_SI_X13(5*8); \ - VPINSRQ_1_SI_X14(2*8); \ - VPINSRQ_1_SI_X15(3*8) - -// load msg: X12 = (11, 12), X13 = (5, 15), X14 = (8, 0), X15 = (2, 13) -#define LOAD_MSG_AVX_11_12_5_15_8_0_2_13() \ - VMOVDQU 11*8(SI), X12; \ - VMOVQ_SI_X13(5*8); \ - VMOVQ_SI_X14(8*8); \ - VMOVQ_SI_X15(2*8); \ - VPINSRQ_1_SI_X13(15*8); \ - VPINSRQ_1_SI_X14_0; \ - VPINSRQ_1_SI_X15(13*8) - -// load msg: X12 = (2, 5), X13 = (4, 15), X14 = (6, 10), X15 = (0, 8) -#define LOAD_MSG_AVX_2_5_4_15_6_10_0_8() \ - VMOVQ_SI_X12(2*8); \ - VMOVQ_SI_X13(4*8); \ - VMOVQ_SI_X14(6*8); \ - VMOVQ_SI_X15_0; \ - VPINSRQ_1_SI_X12(5*8); \ - VPINSRQ_1_SI_X13(15*8); \ - VPINSRQ_1_SI_X14(10*8); \ - VPINSRQ_1_SI_X15(8*8) - -// load msg: X12 = (9, 5), X13 = (2, 10), X14 = (0, 7), X15 = (4, 15) -#define LOAD_MSG_AVX_9_5_2_10_0_7_4_15() \ - VMOVQ_SI_X12(9*8); \ - VMOVQ_SI_X13(2*8); \ - VMOVQ_SI_X14_0; \ - VMOVQ_SI_X15(4*8); \ - VPINSRQ_1_SI_X12(5*8); \ - VPINSRQ_1_SI_X13(10*8); \ - VPINSRQ_1_SI_X14(7*8); \ - VPINSRQ_1_SI_X15(15*8) - -// load msg: X12 = (2, 6), X13 = (0, 8), X14 = (12, 10), X15 = (11, 3) -#define LOAD_MSG_AVX_2_6_0_8_12_10_11_3() \ - VMOVQ_SI_X12(2*8); \ - VMOVQ_SI_X13_0; \ - VMOVQ_SI_X14(12*8); \ - VMOVQ_SI_X15(11*8); \ - VPINSRQ_1_SI_X12(6*8); \ - VPINSRQ_1_SI_X13(8*8); \ - VPINSRQ_1_SI_X14(10*8); \ - VPINSRQ_1_SI_X15(3*8) - -// load msg: X12 = (0, 6), X13 = (9, 8), X14 = (7, 3), X15 = (2, 11) -#define LOAD_MSG_AVX_0_6_9_8_7_3_2_11() \ - MOVQ 0*8(SI), X12; \ - VPSHUFD $0x4E, 8*8(SI), X13; \ - MOVQ 7*8(SI), X14; \ - MOVQ 2*8(SI), X15; \ - VPINSRQ_1_SI_X12(6*8); \ - VPINSRQ_1_SI_X14(3*8); \ - VPINSRQ_1_SI_X15(11*8) - -// load msg: X12 = (6, 14), X13 = (11, 0), X14 = (15, 9), X15 = (3, 8) -#define LOAD_MSG_AVX_6_14_11_0_15_9_3_8() \ - MOVQ 6*8(SI), X12; \ - MOVQ 11*8(SI), X13; \ - MOVQ 15*8(SI), X14; \ - MOVQ 3*8(SI), X15; \ - VPINSRQ_1_SI_X12(14*8); \ - VPINSRQ_1_SI_X13_0; \ - VPINSRQ_1_SI_X14(9*8); \ - VPINSRQ_1_SI_X15(8*8) - -// load msg: X12 = (5, 15), X13 = (8, 2), X14 = (0, 4), X15 = (6, 10) -#define LOAD_MSG_AVX_5_15_8_2_0_4_6_10() \ - MOVQ 5*8(SI), X12; \ - MOVQ 8*8(SI), X13; \ - MOVQ 0*8(SI), X14; \ - MOVQ 6*8(SI), X15; \ - VPINSRQ_1_SI_X12(15*8); \ - VPINSRQ_1_SI_X13(2*8); \ - VPINSRQ_1_SI_X14(4*8); \ - VPINSRQ_1_SI_X15(10*8) - -// load msg: X12 = (12, 13), X13 = (1, 10), X14 = (2, 7), X15 = (4, 5) -#define LOAD_MSG_AVX_12_13_1_10_2_7_4_5() \ - VMOVDQU 12*8(SI), X12; \ - MOVQ 1*8(SI), X13; \ - MOVQ 2*8(SI), X14; \ - VPINSRQ_1_SI_X13(10*8); \ - VPINSRQ_1_SI_X14(7*8); \ - VMOVDQU 4*8(SI), X15 - -// load msg: X12 = (15, 9), X13 = (3, 13), X14 = (11, 14), X15 = (12, 0) -#define LOAD_MSG_AVX_15_9_3_13_11_14_12_0() \ - MOVQ 15*8(SI), X12; \ - MOVQ 3*8(SI), X13; \ - MOVQ 11*8(SI), X14; \ - MOVQ 12*8(SI), X15; \ - VPINSRQ_1_SI_X12(9*8); \ - VPINSRQ_1_SI_X13(13*8); \ - VPINSRQ_1_SI_X14(14*8); \ - VPINSRQ_1_SI_X15_0 - -// func hashBlocksAVX(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) -TEXT ·hashBlocksAVX(SB), 4, $288-48 // frame size = 272 + 16 byte alignment - MOVQ h+0(FP), AX - MOVQ c+8(FP), BX - MOVQ flag+16(FP), CX - MOVQ blocks_base+24(FP), SI - MOVQ blocks_len+32(FP), DI - - MOVQ SP, R10 - ADDQ $15, R10 - ANDQ $~15, R10 - - VMOVDQU ·AVX_c40<>(SB), X0 - VMOVDQU ·AVX_c48<>(SB), X1 - VMOVDQA X0, X8 - VMOVDQA X1, X9 - - VMOVDQU ·AVX_iv3<>(SB), X0 - VMOVDQA X0, 0(R10) - XORQ CX, 0(R10) // 0(R10) = ·AVX_iv3 ^ (CX || 0) - - VMOVDQU 0(AX), X10 - VMOVDQU 16(AX), X11 - VMOVDQU 32(AX), X2 - VMOVDQU 48(AX), X3 - - MOVQ 0(BX), R8 - MOVQ 8(BX), R9 - -loop: - ADDQ $128, R8 - CMPQ R8, $128 - JGE noinc - INCQ R9 - -noinc: - VMOVQ_R8_X15 - VPINSRQ_1_R9_X15 - - VMOVDQA X10, X0 - VMOVDQA X11, X1 - VMOVDQU ·AVX_iv0<>(SB), X4 - VMOVDQU ·AVX_iv1<>(SB), X5 - VMOVDQU ·AVX_iv2<>(SB), X6 - - VPXOR X15, X6, X6 - VMOVDQA 0(R10), X7 - - LOAD_MSG_AVX_0_2_4_6_1_3_5_7() - VMOVDQA X12, 16(R10) - VMOVDQA X13, 32(R10) - VMOVDQA X14, 48(R10) - VMOVDQA X15, 64(R10) - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) - SHUFFLE_AVX() - LOAD_MSG_AVX(8, 10, 12, 14, 9, 11, 13, 15) - VMOVDQA X12, 80(R10) - VMOVDQA X13, 96(R10) - VMOVDQA X14, 112(R10) - VMOVDQA X15, 128(R10) - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) - SHUFFLE_AVX_INV() - - LOAD_MSG_AVX(14, 4, 9, 13, 10, 8, 15, 6) - VMOVDQA X12, 144(R10) - VMOVDQA X13, 160(R10) - VMOVDQA X14, 176(R10) - VMOVDQA X15, 192(R10) - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) - SHUFFLE_AVX() - LOAD_MSG_AVX_1_0_11_5_12_2_7_3() - VMOVDQA X12, 208(R10) - VMOVDQA X13, 224(R10) - VMOVDQA X14, 240(R10) - VMOVDQA X15, 256(R10) - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) - SHUFFLE_AVX_INV() - - LOAD_MSG_AVX_11_12_5_15_8_0_2_13() - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) - SHUFFLE_AVX() - LOAD_MSG_AVX(10, 3, 7, 9, 14, 6, 1, 4) - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) - SHUFFLE_AVX_INV() - - LOAD_MSG_AVX(7, 3, 13, 11, 9, 1, 12, 14) - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) - SHUFFLE_AVX() - LOAD_MSG_AVX_2_5_4_15_6_10_0_8() - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) - SHUFFLE_AVX_INV() - - LOAD_MSG_AVX_9_5_2_10_0_7_4_15() - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) - SHUFFLE_AVX() - LOAD_MSG_AVX(14, 11, 6, 3, 1, 12, 8, 13) - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) - SHUFFLE_AVX_INV() - - LOAD_MSG_AVX_2_6_0_8_12_10_11_3() - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) - SHUFFLE_AVX() - LOAD_MSG_AVX(4, 7, 15, 1, 13, 5, 14, 9) - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) - SHUFFLE_AVX_INV() - - LOAD_MSG_AVX(12, 1, 14, 4, 5, 15, 13, 10) - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) - SHUFFLE_AVX() - LOAD_MSG_AVX_0_6_9_8_7_3_2_11() - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) - SHUFFLE_AVX_INV() - - LOAD_MSG_AVX(13, 7, 12, 3, 11, 14, 1, 9) - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) - SHUFFLE_AVX() - LOAD_MSG_AVX_5_15_8_2_0_4_6_10() - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) - SHUFFLE_AVX_INV() - - LOAD_MSG_AVX_6_14_11_0_15_9_3_8() - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) - SHUFFLE_AVX() - LOAD_MSG_AVX_12_13_1_10_2_7_4_5() - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) - SHUFFLE_AVX_INV() - - LOAD_MSG_AVX(10, 8, 7, 1, 2, 4, 6, 5) - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) - SHUFFLE_AVX() - LOAD_MSG_AVX_15_9_3_13_11_14_12_0() - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) - SHUFFLE_AVX_INV() - - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 16(R10), 32(R10), 48(R10), 64(R10), X15, X8, X9) - SHUFFLE_AVX() - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 80(R10), 96(R10), 112(R10), 128(R10), X15, X8, X9) - SHUFFLE_AVX_INV() - - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 144(R10), 160(R10), 176(R10), 192(R10), X15, X8, X9) - SHUFFLE_AVX() - HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 208(R10), 224(R10), 240(R10), 256(R10), X15, X8, X9) - SHUFFLE_AVX_INV() - - VMOVDQU 32(AX), X14 - VMOVDQU 48(AX), X15 - VPXOR X0, X10, X10 - VPXOR X1, X11, X11 - VPXOR X2, X14, X14 - VPXOR X3, X15, X15 - VPXOR X4, X10, X10 - VPXOR X5, X11, X11 - VPXOR X6, X14, X2 - VPXOR X7, X15, X3 - VMOVDQU X2, 32(AX) - VMOVDQU X3, 48(AX) - - LEAQ 128(SI), SI - SUBQ $128, DI - JNE loop - - VMOVDQU X10, 0(AX) - VMOVDQU X11, 16(AX) - - MOVQ R8, 0(BX) - MOVQ R9, 8(BX) - VZEROUPPER - - RET diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.go b/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.go deleted file mode 100644 index 5fa1b32..0000000 --- a/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.go +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !go1.7 && amd64 && gc && !purego -// +build !go1.7,amd64,gc,!purego - -package blake2b - -import "golang.org/x/sys/cpu" - -func init() { - useSSE4 = cpu.X86.HasSSE41 -} - -//go:noescape -func hashBlocksSSE4(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) - -func hashBlocks(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) { - if useSSE4 { - hashBlocksSSE4(h, c, flag, blocks) - } else { - hashBlocksGeneric(h, c, flag, blocks) - } -} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.s b/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.s deleted file mode 100644 index ae75eb9..0000000 --- a/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.s +++ /dev/null @@ -1,279 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build amd64 && gc && !purego -// +build amd64,gc,!purego - -#include "textflag.h" - -DATA ·iv0<>+0x00(SB)/8, $0x6a09e667f3bcc908 -DATA ·iv0<>+0x08(SB)/8, $0xbb67ae8584caa73b -GLOBL ·iv0<>(SB), (NOPTR+RODATA), $16 - -DATA ·iv1<>+0x00(SB)/8, $0x3c6ef372fe94f82b -DATA ·iv1<>+0x08(SB)/8, $0xa54ff53a5f1d36f1 -GLOBL ·iv1<>(SB), (NOPTR+RODATA), $16 - -DATA ·iv2<>+0x00(SB)/8, $0x510e527fade682d1 -DATA ·iv2<>+0x08(SB)/8, $0x9b05688c2b3e6c1f -GLOBL ·iv2<>(SB), (NOPTR+RODATA), $16 - -DATA ·iv3<>+0x00(SB)/8, $0x1f83d9abfb41bd6b -DATA ·iv3<>+0x08(SB)/8, $0x5be0cd19137e2179 -GLOBL ·iv3<>(SB), (NOPTR+RODATA), $16 - -DATA ·c40<>+0x00(SB)/8, $0x0201000706050403 -DATA ·c40<>+0x08(SB)/8, $0x0a09080f0e0d0c0b -GLOBL ·c40<>(SB), (NOPTR+RODATA), $16 - -DATA ·c48<>+0x00(SB)/8, $0x0100070605040302 -DATA ·c48<>+0x08(SB)/8, $0x09080f0e0d0c0b0a -GLOBL ·c48<>(SB), (NOPTR+RODATA), $16 - -#define SHUFFLE(v2, v3, v4, v5, v6, v7, t1, t2) \ - MOVO v4, t1; \ - MOVO v5, v4; \ - MOVO t1, v5; \ - MOVO v6, t1; \ - PUNPCKLQDQ v6, t2; \ - PUNPCKHQDQ v7, v6; \ - PUNPCKHQDQ t2, v6; \ - PUNPCKLQDQ v7, t2; \ - MOVO t1, v7; \ - MOVO v2, t1; \ - PUNPCKHQDQ t2, v7; \ - PUNPCKLQDQ v3, t2; \ - PUNPCKHQDQ t2, v2; \ - PUNPCKLQDQ t1, t2; \ - PUNPCKHQDQ t2, v3 - -#define SHUFFLE_INV(v2, v3, v4, v5, v6, v7, t1, t2) \ - MOVO v4, t1; \ - MOVO v5, v4; \ - MOVO t1, v5; \ - MOVO v2, t1; \ - PUNPCKLQDQ v2, t2; \ - PUNPCKHQDQ v3, v2; \ - PUNPCKHQDQ t2, v2; \ - PUNPCKLQDQ v3, t2; \ - MOVO t1, v3; \ - MOVO v6, t1; \ - PUNPCKHQDQ t2, v3; \ - PUNPCKLQDQ v7, t2; \ - PUNPCKHQDQ t2, v6; \ - PUNPCKLQDQ t1, t2; \ - PUNPCKHQDQ t2, v7 - -#define HALF_ROUND(v0, v1, v2, v3, v4, v5, v6, v7, m0, m1, m2, m3, t0, c40, c48) \ - PADDQ m0, v0; \ - PADDQ m1, v1; \ - PADDQ v2, v0; \ - PADDQ v3, v1; \ - PXOR v0, v6; \ - PXOR v1, v7; \ - PSHUFD $0xB1, v6, v6; \ - PSHUFD $0xB1, v7, v7; \ - PADDQ v6, v4; \ - PADDQ v7, v5; \ - PXOR v4, v2; \ - PXOR v5, v3; \ - PSHUFB c40, v2; \ - PSHUFB c40, v3; \ - PADDQ m2, v0; \ - PADDQ m3, v1; \ - PADDQ v2, v0; \ - PADDQ v3, v1; \ - PXOR v0, v6; \ - PXOR v1, v7; \ - PSHUFB c48, v6; \ - PSHUFB c48, v7; \ - PADDQ v6, v4; \ - PADDQ v7, v5; \ - PXOR v4, v2; \ - PXOR v5, v3; \ - MOVOU v2, t0; \ - PADDQ v2, t0; \ - PSRLQ $63, v2; \ - PXOR t0, v2; \ - MOVOU v3, t0; \ - PADDQ v3, t0; \ - PSRLQ $63, v3; \ - PXOR t0, v3 - -#define LOAD_MSG(m0, m1, m2, m3, src, i0, i1, i2, i3, i4, i5, i6, i7) \ - MOVQ i0*8(src), m0; \ - PINSRQ $1, i1*8(src), m0; \ - MOVQ i2*8(src), m1; \ - PINSRQ $1, i3*8(src), m1; \ - MOVQ i4*8(src), m2; \ - PINSRQ $1, i5*8(src), m2; \ - MOVQ i6*8(src), m3; \ - PINSRQ $1, i7*8(src), m3 - -// func hashBlocksSSE4(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) -TEXT ·hashBlocksSSE4(SB), 4, $288-48 // frame size = 272 + 16 byte alignment - MOVQ h+0(FP), AX - MOVQ c+8(FP), BX - MOVQ flag+16(FP), CX - MOVQ blocks_base+24(FP), SI - MOVQ blocks_len+32(FP), DI - - MOVQ SP, R10 - ADDQ $15, R10 - ANDQ $~15, R10 - - MOVOU ·iv3<>(SB), X0 - MOVO X0, 0(R10) - XORQ CX, 0(R10) // 0(R10) = ·iv3 ^ (CX || 0) - - MOVOU ·c40<>(SB), X13 - MOVOU ·c48<>(SB), X14 - - MOVOU 0(AX), X12 - MOVOU 16(AX), X15 - - MOVQ 0(BX), R8 - MOVQ 8(BX), R9 - -loop: - ADDQ $128, R8 - CMPQ R8, $128 - JGE noinc - INCQ R9 - -noinc: - MOVQ R8, X8 - PINSRQ $1, R9, X8 - - MOVO X12, X0 - MOVO X15, X1 - MOVOU 32(AX), X2 - MOVOU 48(AX), X3 - MOVOU ·iv0<>(SB), X4 - MOVOU ·iv1<>(SB), X5 - MOVOU ·iv2<>(SB), X6 - - PXOR X8, X6 - MOVO 0(R10), X7 - - LOAD_MSG(X8, X9, X10, X11, SI, 0, 2, 4, 6, 1, 3, 5, 7) - MOVO X8, 16(R10) - MOVO X9, 32(R10) - MOVO X10, 48(R10) - MOVO X11, 64(R10) - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) - SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) - LOAD_MSG(X8, X9, X10, X11, SI, 8, 10, 12, 14, 9, 11, 13, 15) - MOVO X8, 80(R10) - MOVO X9, 96(R10) - MOVO X10, 112(R10) - MOVO X11, 128(R10) - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) - SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) - - LOAD_MSG(X8, X9, X10, X11, SI, 14, 4, 9, 13, 10, 8, 15, 6) - MOVO X8, 144(R10) - MOVO X9, 160(R10) - MOVO X10, 176(R10) - MOVO X11, 192(R10) - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) - SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) - LOAD_MSG(X8, X9, X10, X11, SI, 1, 0, 11, 5, 12, 2, 7, 3) - MOVO X8, 208(R10) - MOVO X9, 224(R10) - MOVO X10, 240(R10) - MOVO X11, 256(R10) - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) - SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) - - LOAD_MSG(X8, X9, X10, X11, SI, 11, 12, 5, 15, 8, 0, 2, 13) - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) - SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) - LOAD_MSG(X8, X9, X10, X11, SI, 10, 3, 7, 9, 14, 6, 1, 4) - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) - SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) - - LOAD_MSG(X8, X9, X10, X11, SI, 7, 3, 13, 11, 9, 1, 12, 14) - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) - SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) - LOAD_MSG(X8, X9, X10, X11, SI, 2, 5, 4, 15, 6, 10, 0, 8) - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) - SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) - - LOAD_MSG(X8, X9, X10, X11, SI, 9, 5, 2, 10, 0, 7, 4, 15) - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) - SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) - LOAD_MSG(X8, X9, X10, X11, SI, 14, 11, 6, 3, 1, 12, 8, 13) - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) - SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) - - LOAD_MSG(X8, X9, X10, X11, SI, 2, 6, 0, 8, 12, 10, 11, 3) - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) - SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) - LOAD_MSG(X8, X9, X10, X11, SI, 4, 7, 15, 1, 13, 5, 14, 9) - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) - SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) - - LOAD_MSG(X8, X9, X10, X11, SI, 12, 1, 14, 4, 5, 15, 13, 10) - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) - SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) - LOAD_MSG(X8, X9, X10, X11, SI, 0, 6, 9, 8, 7, 3, 2, 11) - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) - SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) - - LOAD_MSG(X8, X9, X10, X11, SI, 13, 7, 12, 3, 11, 14, 1, 9) - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) - SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) - LOAD_MSG(X8, X9, X10, X11, SI, 5, 15, 8, 2, 0, 4, 6, 10) - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) - SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) - - LOAD_MSG(X8, X9, X10, X11, SI, 6, 14, 11, 0, 15, 9, 3, 8) - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) - SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) - LOAD_MSG(X8, X9, X10, X11, SI, 12, 13, 1, 10, 2, 7, 4, 5) - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) - SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) - - LOAD_MSG(X8, X9, X10, X11, SI, 10, 8, 7, 1, 2, 4, 6, 5) - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) - SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) - LOAD_MSG(X8, X9, X10, X11, SI, 15, 9, 3, 13, 11, 14, 12, 0) - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) - SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) - - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, 16(R10), 32(R10), 48(R10), 64(R10), X11, X13, X14) - SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, 80(R10), 96(R10), 112(R10), 128(R10), X11, X13, X14) - SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) - - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, 144(R10), 160(R10), 176(R10), 192(R10), X11, X13, X14) - SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) - HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, 208(R10), 224(R10), 240(R10), 256(R10), X11, X13, X14) - SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) - - MOVOU 32(AX), X10 - MOVOU 48(AX), X11 - PXOR X0, X12 - PXOR X1, X15 - PXOR X2, X10 - PXOR X3, X11 - PXOR X4, X12 - PXOR X5, X15 - PXOR X6, X10 - PXOR X7, X11 - MOVOU X10, 32(AX) - MOVOU X11, 48(AX) - - LEAQ 128(SI), SI - SUBQ $128, DI - JNE loop - - MOVOU X12, 0(AX) - MOVOU X15, 16(AX) - - MOVQ R8, 0(BX) - MOVQ R9, 8(BX) - - RET diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b_generic.go b/vendor/golang.org/x/crypto/blake2b/blake2b_generic.go deleted file mode 100644 index 3168a8a..0000000 --- a/vendor/golang.org/x/crypto/blake2b/blake2b_generic.go +++ /dev/null @@ -1,182 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package blake2b - -import ( - "encoding/binary" - "math/bits" -) - -// the precomputed values for BLAKE2b -// there are 12 16-byte arrays - one for each round -// the entries are calculated from the sigma constants. -var precomputed = [12][16]byte{ - {0, 2, 4, 6, 1, 3, 5, 7, 8, 10, 12, 14, 9, 11, 13, 15}, - {14, 4, 9, 13, 10, 8, 15, 6, 1, 0, 11, 5, 12, 2, 7, 3}, - {11, 12, 5, 15, 8, 0, 2, 13, 10, 3, 7, 9, 14, 6, 1, 4}, - {7, 3, 13, 11, 9, 1, 12, 14, 2, 5, 4, 15, 6, 10, 0, 8}, - {9, 5, 2, 10, 0, 7, 4, 15, 14, 11, 6, 3, 1, 12, 8, 13}, - {2, 6, 0, 8, 12, 10, 11, 3, 4, 7, 15, 1, 13, 5, 14, 9}, - {12, 1, 14, 4, 5, 15, 13, 10, 0, 6, 9, 8, 7, 3, 2, 11}, - {13, 7, 12, 3, 11, 14, 1, 9, 5, 15, 8, 2, 0, 4, 6, 10}, - {6, 14, 11, 0, 15, 9, 3, 8, 12, 13, 1, 10, 2, 7, 4, 5}, - {10, 8, 7, 1, 2, 4, 6, 5, 15, 9, 3, 13, 11, 14, 12, 0}, - {0, 2, 4, 6, 1, 3, 5, 7, 8, 10, 12, 14, 9, 11, 13, 15}, // equal to the first - {14, 4, 9, 13, 10, 8, 15, 6, 1, 0, 11, 5, 12, 2, 7, 3}, // equal to the second -} - -func hashBlocksGeneric(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) { - var m [16]uint64 - c0, c1 := c[0], c[1] - - for i := 0; i < len(blocks); { - c0 += BlockSize - if c0 < BlockSize { - c1++ - } - - v0, v1, v2, v3, v4, v5, v6, v7 := h[0], h[1], h[2], h[3], h[4], h[5], h[6], h[7] - v8, v9, v10, v11, v12, v13, v14, v15 := iv[0], iv[1], iv[2], iv[3], iv[4], iv[5], iv[6], iv[7] - v12 ^= c0 - v13 ^= c1 - v14 ^= flag - - for j := range m { - m[j] = binary.LittleEndian.Uint64(blocks[i:]) - i += 8 - } - - for j := range precomputed { - s := &(precomputed[j]) - - v0 += m[s[0]] - v0 += v4 - v12 ^= v0 - v12 = bits.RotateLeft64(v12, -32) - v8 += v12 - v4 ^= v8 - v4 = bits.RotateLeft64(v4, -24) - v1 += m[s[1]] - v1 += v5 - v13 ^= v1 - v13 = bits.RotateLeft64(v13, -32) - v9 += v13 - v5 ^= v9 - v5 = bits.RotateLeft64(v5, -24) - v2 += m[s[2]] - v2 += v6 - v14 ^= v2 - v14 = bits.RotateLeft64(v14, -32) - v10 += v14 - v6 ^= v10 - v6 = bits.RotateLeft64(v6, -24) - v3 += m[s[3]] - v3 += v7 - v15 ^= v3 - v15 = bits.RotateLeft64(v15, -32) - v11 += v15 - v7 ^= v11 - v7 = bits.RotateLeft64(v7, -24) - - v0 += m[s[4]] - v0 += v4 - v12 ^= v0 - v12 = bits.RotateLeft64(v12, -16) - v8 += v12 - v4 ^= v8 - v4 = bits.RotateLeft64(v4, -63) - v1 += m[s[5]] - v1 += v5 - v13 ^= v1 - v13 = bits.RotateLeft64(v13, -16) - v9 += v13 - v5 ^= v9 - v5 = bits.RotateLeft64(v5, -63) - v2 += m[s[6]] - v2 += v6 - v14 ^= v2 - v14 = bits.RotateLeft64(v14, -16) - v10 += v14 - v6 ^= v10 - v6 = bits.RotateLeft64(v6, -63) - v3 += m[s[7]] - v3 += v7 - v15 ^= v3 - v15 = bits.RotateLeft64(v15, -16) - v11 += v15 - v7 ^= v11 - v7 = bits.RotateLeft64(v7, -63) - - v0 += m[s[8]] - v0 += v5 - v15 ^= v0 - v15 = bits.RotateLeft64(v15, -32) - v10 += v15 - v5 ^= v10 - v5 = bits.RotateLeft64(v5, -24) - v1 += m[s[9]] - v1 += v6 - v12 ^= v1 - v12 = bits.RotateLeft64(v12, -32) - v11 += v12 - v6 ^= v11 - v6 = bits.RotateLeft64(v6, -24) - v2 += m[s[10]] - v2 += v7 - v13 ^= v2 - v13 = bits.RotateLeft64(v13, -32) - v8 += v13 - v7 ^= v8 - v7 = bits.RotateLeft64(v7, -24) - v3 += m[s[11]] - v3 += v4 - v14 ^= v3 - v14 = bits.RotateLeft64(v14, -32) - v9 += v14 - v4 ^= v9 - v4 = bits.RotateLeft64(v4, -24) - - v0 += m[s[12]] - v0 += v5 - v15 ^= v0 - v15 = bits.RotateLeft64(v15, -16) - v10 += v15 - v5 ^= v10 - v5 = bits.RotateLeft64(v5, -63) - v1 += m[s[13]] - v1 += v6 - v12 ^= v1 - v12 = bits.RotateLeft64(v12, -16) - v11 += v12 - v6 ^= v11 - v6 = bits.RotateLeft64(v6, -63) - v2 += m[s[14]] - v2 += v7 - v13 ^= v2 - v13 = bits.RotateLeft64(v13, -16) - v8 += v13 - v7 ^= v8 - v7 = bits.RotateLeft64(v7, -63) - v3 += m[s[15]] - v3 += v4 - v14 ^= v3 - v14 = bits.RotateLeft64(v14, -16) - v9 += v14 - v4 ^= v9 - v4 = bits.RotateLeft64(v4, -63) - - } - - h[0] ^= v0 ^ v8 - h[1] ^= v1 ^ v9 - h[2] ^= v2 ^ v10 - h[3] ^= v3 ^ v11 - h[4] ^= v4 ^ v12 - h[5] ^= v5 ^ v13 - h[6] ^= v6 ^ v14 - h[7] ^= v7 ^ v15 - } - c[0], c[1] = c0, c1 -} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b_ref.go b/vendor/golang.org/x/crypto/blake2b/blake2b_ref.go deleted file mode 100644 index b0137cd..0000000 --- a/vendor/golang.org/x/crypto/blake2b/blake2b_ref.go +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !amd64 || purego || !gc -// +build !amd64 purego !gc - -package blake2b - -func hashBlocks(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) { - hashBlocksGeneric(h, c, flag, blocks) -} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2x.go b/vendor/golang.org/x/crypto/blake2b/blake2x.go deleted file mode 100644 index 52c414d..0000000 --- a/vendor/golang.org/x/crypto/blake2b/blake2x.go +++ /dev/null @@ -1,177 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package blake2b - -import ( - "encoding/binary" - "errors" - "io" -) - -// XOF defines the interface to hash functions that -// support arbitrary-length output. -type XOF interface { - // Write absorbs more data into the hash's state. It panics if called - // after Read. - io.Writer - - // Read reads more output from the hash. It returns io.EOF if the limit - // has been reached. - io.Reader - - // Clone returns a copy of the XOF in its current state. - Clone() XOF - - // Reset resets the XOF to its initial state. - Reset() -} - -// OutputLengthUnknown can be used as the size argument to NewXOF to indicate -// the length of the output is not known in advance. -const OutputLengthUnknown = 0 - -// magicUnknownOutputLength is a magic value for the output size that indicates -// an unknown number of output bytes. -const magicUnknownOutputLength = (1 << 32) - 1 - -// maxOutputLength is the absolute maximum number of bytes to produce when the -// number of output bytes is unknown. -const maxOutputLength = (1 << 32) * 64 - -// NewXOF creates a new variable-output-length hash. The hash either produce a -// known number of bytes (1 <= size < 2**32-1), or an unknown number of bytes -// (size == OutputLengthUnknown). In the latter case, an absolute limit of -// 256GiB applies. -// -// A non-nil key turns the hash into a MAC. The key must between -// zero and 32 bytes long. -func NewXOF(size uint32, key []byte) (XOF, error) { - if len(key) > Size { - return nil, errKeySize - } - if size == magicUnknownOutputLength { - // 2^32-1 indicates an unknown number of bytes and thus isn't a - // valid length. - return nil, errors.New("blake2b: XOF length too large") - } - if size == OutputLengthUnknown { - size = magicUnknownOutputLength - } - x := &xof{ - d: digest{ - size: Size, - keyLen: len(key), - }, - length: size, - } - copy(x.d.key[:], key) - x.Reset() - return x, nil -} - -type xof struct { - d digest - length uint32 - remaining uint64 - cfg, root, block [Size]byte - offset int - nodeOffset uint32 - readMode bool -} - -func (x *xof) Write(p []byte) (n int, err error) { - if x.readMode { - panic("blake2b: write to XOF after read") - } - return x.d.Write(p) -} - -func (x *xof) Clone() XOF { - clone := *x - return &clone -} - -func (x *xof) Reset() { - x.cfg[0] = byte(Size) - binary.LittleEndian.PutUint32(x.cfg[4:], uint32(Size)) // leaf length - binary.LittleEndian.PutUint32(x.cfg[12:], x.length) // XOF length - x.cfg[17] = byte(Size) // inner hash size - - x.d.Reset() - x.d.h[1] ^= uint64(x.length) << 32 - - x.remaining = uint64(x.length) - if x.remaining == magicUnknownOutputLength { - x.remaining = maxOutputLength - } - x.offset, x.nodeOffset = 0, 0 - x.readMode = false -} - -func (x *xof) Read(p []byte) (n int, err error) { - if !x.readMode { - x.d.finalize(&x.root) - x.readMode = true - } - - if x.remaining == 0 { - return 0, io.EOF - } - - n = len(p) - if uint64(n) > x.remaining { - n = int(x.remaining) - p = p[:n] - } - - if x.offset > 0 { - blockRemaining := Size - x.offset - if n < blockRemaining { - x.offset += copy(p, x.block[x.offset:]) - x.remaining -= uint64(n) - return - } - copy(p, x.block[x.offset:]) - p = p[blockRemaining:] - x.offset = 0 - x.remaining -= uint64(blockRemaining) - } - - for len(p) >= Size { - binary.LittleEndian.PutUint32(x.cfg[8:], x.nodeOffset) - x.nodeOffset++ - - x.d.initConfig(&x.cfg) - x.d.Write(x.root[:]) - x.d.finalize(&x.block) - - copy(p, x.block[:]) - p = p[Size:] - x.remaining -= uint64(Size) - } - - if todo := len(p); todo > 0 { - if x.remaining < uint64(Size) { - x.cfg[0] = byte(x.remaining) - } - binary.LittleEndian.PutUint32(x.cfg[8:], x.nodeOffset) - x.nodeOffset++ - - x.d.initConfig(&x.cfg) - x.d.Write(x.root[:]) - x.d.finalize(&x.block) - - x.offset = copy(p, x.block[:todo]) - x.remaining -= uint64(todo) - } - return -} - -func (d *digest) initConfig(cfg *[Size]byte) { - d.offset, d.c[0], d.c[1] = 0, 0, 0 - for i := range d.h { - d.h[i] = iv[i] ^ binary.LittleEndian.Uint64(cfg[i*8:]) - } -} diff --git a/vendor/golang.org/x/crypto/blake2b/register.go b/vendor/golang.org/x/crypto/blake2b/register.go deleted file mode 100644 index 9d86339..0000000 --- a/vendor/golang.org/x/crypto/blake2b/register.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.9 -// +build go1.9 - -package blake2b - -import ( - "crypto" - "hash" -) - -func init() { - newHash256 := func() hash.Hash { - h, _ := New256(nil) - return h - } - newHash384 := func() hash.Hash { - h, _ := New384(nil) - return h - } - - newHash512 := func() hash.Hash { - h, _ := New512(nil) - return h - } - - crypto.RegisterHash(crypto.BLAKE2b_256, newHash256) - crypto.RegisterHash(crypto.BLAKE2b_384, newHash384) - crypto.RegisterHash(crypto.BLAKE2b_512, newHash512) -} diff --git a/vendor/golang.org/x/crypto/blowfish/block.go b/vendor/golang.org/x/crypto/blowfish/block.go deleted file mode 100644 index 9d80f19..0000000 --- a/vendor/golang.org/x/crypto/blowfish/block.go +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright 2010 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package blowfish - -// getNextWord returns the next big-endian uint32 value from the byte slice -// at the given position in a circular manner, updating the position. -func getNextWord(b []byte, pos *int) uint32 { - var w uint32 - j := *pos - for i := 0; i < 4; i++ { - w = w<<8 | uint32(b[j]) - j++ - if j >= len(b) { - j = 0 - } - } - *pos = j - return w -} - -// ExpandKey performs a key expansion on the given *Cipher. Specifically, it -// performs the Blowfish algorithm's key schedule which sets up the *Cipher's -// pi and substitution tables for calls to Encrypt. This is used, primarily, -// by the bcrypt package to reuse the Blowfish key schedule during its -// set up. It's unlikely that you need to use this directly. -func ExpandKey(key []byte, c *Cipher) { - j := 0 - for i := 0; i < 18; i++ { - // Using inlined getNextWord for performance. - var d uint32 - for k := 0; k < 4; k++ { - d = d<<8 | uint32(key[j]) - j++ - if j >= len(key) { - j = 0 - } - } - c.p[i] ^= d - } - - var l, r uint32 - for i := 0; i < 18; i += 2 { - l, r = encryptBlock(l, r, c) - c.p[i], c.p[i+1] = l, r - } - - for i := 0; i < 256; i += 2 { - l, r = encryptBlock(l, r, c) - c.s0[i], c.s0[i+1] = l, r - } - for i := 0; i < 256; i += 2 { - l, r = encryptBlock(l, r, c) - c.s1[i], c.s1[i+1] = l, r - } - for i := 0; i < 256; i += 2 { - l, r = encryptBlock(l, r, c) - c.s2[i], c.s2[i+1] = l, r - } - for i := 0; i < 256; i += 2 { - l, r = encryptBlock(l, r, c) - c.s3[i], c.s3[i+1] = l, r - } -} - -// This is similar to ExpandKey, but folds the salt during the key -// schedule. While ExpandKey is essentially expandKeyWithSalt with an all-zero -// salt passed in, reusing ExpandKey turns out to be a place of inefficiency -// and specializing it here is useful. -func expandKeyWithSalt(key []byte, salt []byte, c *Cipher) { - j := 0 - for i := 0; i < 18; i++ { - c.p[i] ^= getNextWord(key, &j) - } - - j = 0 - var l, r uint32 - for i := 0; i < 18; i += 2 { - l ^= getNextWord(salt, &j) - r ^= getNextWord(salt, &j) - l, r = encryptBlock(l, r, c) - c.p[i], c.p[i+1] = l, r - } - - for i := 0; i < 256; i += 2 { - l ^= getNextWord(salt, &j) - r ^= getNextWord(salt, &j) - l, r = encryptBlock(l, r, c) - c.s0[i], c.s0[i+1] = l, r - } - - for i := 0; i < 256; i += 2 { - l ^= getNextWord(salt, &j) - r ^= getNextWord(salt, &j) - l, r = encryptBlock(l, r, c) - c.s1[i], c.s1[i+1] = l, r - } - - for i := 0; i < 256; i += 2 { - l ^= getNextWord(salt, &j) - r ^= getNextWord(salt, &j) - l, r = encryptBlock(l, r, c) - c.s2[i], c.s2[i+1] = l, r - } - - for i := 0; i < 256; i += 2 { - l ^= getNextWord(salt, &j) - r ^= getNextWord(salt, &j) - l, r = encryptBlock(l, r, c) - c.s3[i], c.s3[i+1] = l, r - } -} - -func encryptBlock(l, r uint32, c *Cipher) (uint32, uint32) { - xl, xr := l, r - xl ^= c.p[0] - xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[1] - xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[2] - xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[3] - xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[4] - xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[5] - xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[6] - xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[7] - xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[8] - xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[9] - xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[10] - xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[11] - xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[12] - xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[13] - xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[14] - xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[15] - xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[16] - xr ^= c.p[17] - return xr, xl -} - -func decryptBlock(l, r uint32, c *Cipher) (uint32, uint32) { - xl, xr := l, r - xl ^= c.p[17] - xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[16] - xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[15] - xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[14] - xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[13] - xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[12] - xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[11] - xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[10] - xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[9] - xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[8] - xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[7] - xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[6] - xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[5] - xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[4] - xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[3] - xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[2] - xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[1] - xr ^= c.p[0] - return xr, xl -} diff --git a/vendor/golang.org/x/crypto/blowfish/cipher.go b/vendor/golang.org/x/crypto/blowfish/cipher.go deleted file mode 100644 index 213bf20..0000000 --- a/vendor/golang.org/x/crypto/blowfish/cipher.go +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2010 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package blowfish implements Bruce Schneier's Blowfish encryption algorithm. -// -// Blowfish is a legacy cipher and its short block size makes it vulnerable to -// birthday bound attacks (see https://sweet32.info). It should only be used -// where compatibility with legacy systems, not security, is the goal. -// -// Deprecated: any new system should use AES (from crypto/aes, if necessary in -// an AEAD mode like crypto/cipher.NewGCM) or XChaCha20-Poly1305 (from -// golang.org/x/crypto/chacha20poly1305). -package blowfish // import "golang.org/x/crypto/blowfish" - -// The code is a port of Bruce Schneier's C implementation. -// See https://www.schneier.com/blowfish.html. - -import "strconv" - -// The Blowfish block size in bytes. -const BlockSize = 8 - -// A Cipher is an instance of Blowfish encryption using a particular key. -type Cipher struct { - p [18]uint32 - s0, s1, s2, s3 [256]uint32 -} - -type KeySizeError int - -func (k KeySizeError) Error() string { - return "crypto/blowfish: invalid key size " + strconv.Itoa(int(k)) -} - -// NewCipher creates and returns a Cipher. -// The key argument should be the Blowfish key, from 1 to 56 bytes. -func NewCipher(key []byte) (*Cipher, error) { - var result Cipher - if k := len(key); k < 1 || k > 56 { - return nil, KeySizeError(k) - } - initCipher(&result) - ExpandKey(key, &result) - return &result, nil -} - -// NewSaltedCipher creates a returns a Cipher that folds a salt into its key -// schedule. For most purposes, NewCipher, instead of NewSaltedCipher, is -// sufficient and desirable. For bcrypt compatibility, the key can be over 56 -// bytes. -func NewSaltedCipher(key, salt []byte) (*Cipher, error) { - if len(salt) == 0 { - return NewCipher(key) - } - var result Cipher - if k := len(key); k < 1 { - return nil, KeySizeError(k) - } - initCipher(&result) - expandKeyWithSalt(key, salt, &result) - return &result, nil -} - -// BlockSize returns the Blowfish block size, 8 bytes. -// It is necessary to satisfy the Block interface in the -// package "crypto/cipher". -func (c *Cipher) BlockSize() int { return BlockSize } - -// Encrypt encrypts the 8-byte buffer src using the key k -// and stores the result in dst. -// Note that for amounts of data larger than a block, -// it is not safe to just call Encrypt on successive blocks; -// instead, use an encryption mode like CBC (see crypto/cipher/cbc.go). -func (c *Cipher) Encrypt(dst, src []byte) { - l := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3]) - r := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7]) - l, r = encryptBlock(l, r, c) - dst[0], dst[1], dst[2], dst[3] = byte(l>>24), byte(l>>16), byte(l>>8), byte(l) - dst[4], dst[5], dst[6], dst[7] = byte(r>>24), byte(r>>16), byte(r>>8), byte(r) -} - -// Decrypt decrypts the 8-byte buffer src using the key k -// and stores the result in dst. -func (c *Cipher) Decrypt(dst, src []byte) { - l := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3]) - r := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7]) - l, r = decryptBlock(l, r, c) - dst[0], dst[1], dst[2], dst[3] = byte(l>>24), byte(l>>16), byte(l>>8), byte(l) - dst[4], dst[5], dst[6], dst[7] = byte(r>>24), byte(r>>16), byte(r>>8), byte(r) -} - -func initCipher(c *Cipher) { - copy(c.p[0:], p[0:]) - copy(c.s0[0:], s0[0:]) - copy(c.s1[0:], s1[0:]) - copy(c.s2[0:], s2[0:]) - copy(c.s3[0:], s3[0:]) -} diff --git a/vendor/golang.org/x/crypto/blowfish/const.go b/vendor/golang.org/x/crypto/blowfish/const.go deleted file mode 100644 index d040775..0000000 --- a/vendor/golang.org/x/crypto/blowfish/const.go +++ /dev/null @@ -1,199 +0,0 @@ -// Copyright 2010 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// The startup permutation array and substitution boxes. -// They are the hexadecimal digits of PI; see: -// https://www.schneier.com/code/constants.txt. - -package blowfish - -var s0 = [256]uint32{ - 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, - 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, - 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, 0x0d95748f, 0x728eb658, - 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, - 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, - 0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, - 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, 0x55ca396a, 0x2aab10b6, - 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, - 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, - 0x7a325381, 0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, - 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d, 0xe98575b1, - 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, - 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, - 0x670c9c61, 0xabd388f0, 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, - 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, 0xa1f1651d, 0x39af0176, - 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, - 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, - 0x1bfedf72, 0x429b023d, 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, - 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b, - 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, - 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, - 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, - 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a, - 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, - 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, - 0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, - 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, 0x695b27b0, 0xbbca58c8, - 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, - 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, - 0x62fb1341, 0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, - 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0, 0xafc725e0, - 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, - 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, - 0xea752dfe, 0x8b021fa1, 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, - 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705, - 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, - 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e, - 0x226800bb, 0x57b8e0af, 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, - 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9, - 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, - 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f, - 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, - 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a, -} - -var s1 = [256]uint32{ - 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, - 0x9cee60b8, 0x8fedb266, 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, - 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65, - 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, - 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, - 0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, - 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, 0xb03ada37, 0xf0500c0d, - 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, - 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, - 0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, - 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, 0x4e548b38, 0x4f6db908, - 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, - 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, - 0x501adde6, 0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, - 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 0xef1c1847, 0x3215d908, - 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, - 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, - 0x3c11183b, 0x5924a509, 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, - 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa, - 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, - 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, - 0x1939260f, 0x19c27960, 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, - 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5, - 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, - 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, - 0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, - 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca, - 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, - 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, - 0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, - 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, 0xcdb30aeb, 0x532e3054, - 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, - 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, - 0xdb6c4f15, 0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, - 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2, 0x5b8d2646, - 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, - 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, - 0x1dadf43e, 0x233f7061, 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, - 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e, - 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, - 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, - 0x675fda79, 0xe3674340, 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, - 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7, -} - -var s2 = [256]uint32{ - 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, - 0xbcf46b2e, 0xd4a20068, 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, - 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af, - 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, - 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, - 0x0a2c86da, 0xe9b66dfb, 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, - 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec, - 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, - 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, - 0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, - 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, 0x55a867bc, 0xa1159a58, - 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, - 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, - 0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, - 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, 0x257b7834, 0x602a9c60, - 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, - 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, - 0xde720c8c, 0x2da2f728, 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, - 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0x0a476341, 0x992eff74, - 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, - 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, - 0xb5390f92, 0x690fed0b, 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, - 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979, - 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, - 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, - 0x3d25bdd8, 0xe2e1c3c9, 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, - 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086, - 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, - 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, - 0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, - 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84, - 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, - 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, - 0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, - 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, 0xdcb7da83, 0x573906fe, - 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, - 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, - 0x006058aa, 0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, - 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, 0x6f05e409, 0x4b7c0188, - 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, - 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, - 0xa28514d9, 0x6c51133c, 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, - 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0, -} - -var s3 = [256]uint32{ - 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, - 0xd3822740, 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, - 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f, 0xbc946e79, - 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, - 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, - 0x63ef8ce2, 0x9a86ee22, 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, - 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1, - 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, - 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797, - 0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, - 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6, - 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, - 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba, - 0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, - 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, 0x7533d928, 0xb155fdf5, - 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, - 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, - 0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, - 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, 0xb39a460a, 0x6445c0dd, - 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, - 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, - 0x8d6612ae, 0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, - 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08, 0x4eb4e2cc, - 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, - 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, - 0xbb3a792b, 0x344525bd, 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, - 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a, - 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, - 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, - 0x0f91fc71, 0x9b941525, 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, - 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b, - 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, - 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e, - 0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, - 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, 0xf523f357, 0xa6327623, - 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, - 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, - 0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, - 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, 0x53113ec0, 0x1640e3d3, - 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, - 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, - 0x01c36ae4, 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, - 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6, -} - -var p = [18]uint32{ - 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0, - 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, - 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b, -} diff --git a/vendor/golang.org/x/crypto/cast5/cast5.go b/vendor/golang.org/x/crypto/cast5/cast5.go deleted file mode 100644 index ddcbeb6..0000000 --- a/vendor/golang.org/x/crypto/cast5/cast5.go +++ /dev/null @@ -1,533 +0,0 @@ -// Copyright 2010 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package cast5 implements CAST5, as defined in RFC 2144. -// -// CAST5 is a legacy cipher and its short block size makes it vulnerable to -// birthday bound attacks (see https://sweet32.info). It should only be used -// where compatibility with legacy systems, not security, is the goal. -// -// Deprecated: any new system should use AES (from crypto/aes, if necessary in -// an AEAD mode like crypto/cipher.NewGCM) or XChaCha20-Poly1305 (from -// golang.org/x/crypto/chacha20poly1305). -package cast5 // import "golang.org/x/crypto/cast5" - -import "errors" - -const BlockSize = 8 -const KeySize = 16 - -type Cipher struct { - masking [16]uint32 - rotate [16]uint8 -} - -func NewCipher(key []byte) (c *Cipher, err error) { - if len(key) != KeySize { - return nil, errors.New("CAST5: keys must be 16 bytes") - } - - c = new(Cipher) - c.keySchedule(key) - return -} - -func (c *Cipher) BlockSize() int { - return BlockSize -} - -func (c *Cipher) Encrypt(dst, src []byte) { - l := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3]) - r := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7]) - - l, r = r, l^f1(r, c.masking[0], c.rotate[0]) - l, r = r, l^f2(r, c.masking[1], c.rotate[1]) - l, r = r, l^f3(r, c.masking[2], c.rotate[2]) - l, r = r, l^f1(r, c.masking[3], c.rotate[3]) - - l, r = r, l^f2(r, c.masking[4], c.rotate[4]) - l, r = r, l^f3(r, c.masking[5], c.rotate[5]) - l, r = r, l^f1(r, c.masking[6], c.rotate[6]) - l, r = r, l^f2(r, c.masking[7], c.rotate[7]) - - l, r = r, l^f3(r, c.masking[8], c.rotate[8]) - l, r = r, l^f1(r, c.masking[9], c.rotate[9]) - l, r = r, l^f2(r, c.masking[10], c.rotate[10]) - l, r = r, l^f3(r, c.masking[11], c.rotate[11]) - - l, r = r, l^f1(r, c.masking[12], c.rotate[12]) - l, r = r, l^f2(r, c.masking[13], c.rotate[13]) - l, r = r, l^f3(r, c.masking[14], c.rotate[14]) - l, r = r, l^f1(r, c.masking[15], c.rotate[15]) - - dst[0] = uint8(r >> 24) - dst[1] = uint8(r >> 16) - dst[2] = uint8(r >> 8) - dst[3] = uint8(r) - dst[4] = uint8(l >> 24) - dst[5] = uint8(l >> 16) - dst[6] = uint8(l >> 8) - dst[7] = uint8(l) -} - -func (c *Cipher) Decrypt(dst, src []byte) { - l := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3]) - r := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7]) - - l, r = r, l^f1(r, c.masking[15], c.rotate[15]) - l, r = r, l^f3(r, c.masking[14], c.rotate[14]) - l, r = r, l^f2(r, c.masking[13], c.rotate[13]) - l, r = r, l^f1(r, c.masking[12], c.rotate[12]) - - l, r = r, l^f3(r, c.masking[11], c.rotate[11]) - l, r = r, l^f2(r, c.masking[10], c.rotate[10]) - l, r = r, l^f1(r, c.masking[9], c.rotate[9]) - l, r = r, l^f3(r, c.masking[8], c.rotate[8]) - - l, r = r, l^f2(r, c.masking[7], c.rotate[7]) - l, r = r, l^f1(r, c.masking[6], c.rotate[6]) - l, r = r, l^f3(r, c.masking[5], c.rotate[5]) - l, r = r, l^f2(r, c.masking[4], c.rotate[4]) - - l, r = r, l^f1(r, c.masking[3], c.rotate[3]) - l, r = r, l^f3(r, c.masking[2], c.rotate[2]) - l, r = r, l^f2(r, c.masking[1], c.rotate[1]) - l, r = r, l^f1(r, c.masking[0], c.rotate[0]) - - dst[0] = uint8(r >> 24) - dst[1] = uint8(r >> 16) - dst[2] = uint8(r >> 8) - dst[3] = uint8(r) - dst[4] = uint8(l >> 24) - dst[5] = uint8(l >> 16) - dst[6] = uint8(l >> 8) - dst[7] = uint8(l) -} - -type keyScheduleA [4][7]uint8 -type keyScheduleB [4][5]uint8 - -// keyScheduleRound contains the magic values for a round of the key schedule. -// The keyScheduleA deals with the lines like: -// z0z1z2z3 = x0x1x2x3 ^ S5[xD] ^ S6[xF] ^ S7[xC] ^ S8[xE] ^ S7[x8] -// Conceptually, both x and z are in the same array, x first. The first -// element describes which word of this array gets written to and the -// second, which word gets read. So, for the line above, it's "4, 0", because -// it's writing to the first word of z, which, being after x, is word 4, and -// reading from the first word of x: word 0. -// -// Next are the indexes into the S-boxes. Now the array is treated as bytes. So -// "xD" is 0xd. The first byte of z is written as "16 + 0", just to be clear -// that it's z that we're indexing. -// -// keyScheduleB deals with lines like: -// K1 = S5[z8] ^ S6[z9] ^ S7[z7] ^ S8[z6] ^ S5[z2] -// "K1" is ignored because key words are always written in order. So the five -// elements are the S-box indexes. They use the same form as in keyScheduleA, -// above. - -type keyScheduleRound struct{} -type keySchedule []keyScheduleRound - -var schedule = []struct { - a keyScheduleA - b keyScheduleB -}{ - { - keyScheduleA{ - {4, 0, 0xd, 0xf, 0xc, 0xe, 0x8}, - {5, 2, 16 + 0, 16 + 2, 16 + 1, 16 + 3, 0xa}, - {6, 3, 16 + 7, 16 + 6, 16 + 5, 16 + 4, 9}, - {7, 1, 16 + 0xa, 16 + 9, 16 + 0xb, 16 + 8, 0xb}, - }, - keyScheduleB{ - {16 + 8, 16 + 9, 16 + 7, 16 + 6, 16 + 2}, - {16 + 0xa, 16 + 0xb, 16 + 5, 16 + 4, 16 + 6}, - {16 + 0xc, 16 + 0xd, 16 + 3, 16 + 2, 16 + 9}, - {16 + 0xe, 16 + 0xf, 16 + 1, 16 + 0, 16 + 0xc}, - }, - }, - { - keyScheduleA{ - {0, 6, 16 + 5, 16 + 7, 16 + 4, 16 + 6, 16 + 0}, - {1, 4, 0, 2, 1, 3, 16 + 2}, - {2, 5, 7, 6, 5, 4, 16 + 1}, - {3, 7, 0xa, 9, 0xb, 8, 16 + 3}, - }, - keyScheduleB{ - {3, 2, 0xc, 0xd, 8}, - {1, 0, 0xe, 0xf, 0xd}, - {7, 6, 8, 9, 3}, - {5, 4, 0xa, 0xb, 7}, - }, - }, - { - keyScheduleA{ - {4, 0, 0xd, 0xf, 0xc, 0xe, 8}, - {5, 2, 16 + 0, 16 + 2, 16 + 1, 16 + 3, 0xa}, - {6, 3, 16 + 7, 16 + 6, 16 + 5, 16 + 4, 9}, - {7, 1, 16 + 0xa, 16 + 9, 16 + 0xb, 16 + 8, 0xb}, - }, - keyScheduleB{ - {16 + 3, 16 + 2, 16 + 0xc, 16 + 0xd, 16 + 9}, - {16 + 1, 16 + 0, 16 + 0xe, 16 + 0xf, 16 + 0xc}, - {16 + 7, 16 + 6, 16 + 8, 16 + 9, 16 + 2}, - {16 + 5, 16 + 4, 16 + 0xa, 16 + 0xb, 16 + 6}, - }, - }, - { - keyScheduleA{ - {0, 6, 16 + 5, 16 + 7, 16 + 4, 16 + 6, 16 + 0}, - {1, 4, 0, 2, 1, 3, 16 + 2}, - {2, 5, 7, 6, 5, 4, 16 + 1}, - {3, 7, 0xa, 9, 0xb, 8, 16 + 3}, - }, - keyScheduleB{ - {8, 9, 7, 6, 3}, - {0xa, 0xb, 5, 4, 7}, - {0xc, 0xd, 3, 2, 8}, - {0xe, 0xf, 1, 0, 0xd}, - }, - }, -} - -func (c *Cipher) keySchedule(in []byte) { - var t [8]uint32 - var k [32]uint32 - - for i := 0; i < 4; i++ { - j := i * 4 - t[i] = uint32(in[j])<<24 | uint32(in[j+1])<<16 | uint32(in[j+2])<<8 | uint32(in[j+3]) - } - - x := []byte{6, 7, 4, 5} - ki := 0 - - for half := 0; half < 2; half++ { - for _, round := range schedule { - for j := 0; j < 4; j++ { - var a [7]uint8 - copy(a[:], round.a[j][:]) - w := t[a[1]] - w ^= sBox[4][(t[a[2]>>2]>>(24-8*(a[2]&3)))&0xff] - w ^= sBox[5][(t[a[3]>>2]>>(24-8*(a[3]&3)))&0xff] - w ^= sBox[6][(t[a[4]>>2]>>(24-8*(a[4]&3)))&0xff] - w ^= sBox[7][(t[a[5]>>2]>>(24-8*(a[5]&3)))&0xff] - w ^= sBox[x[j]][(t[a[6]>>2]>>(24-8*(a[6]&3)))&0xff] - t[a[0]] = w - } - - for j := 0; j < 4; j++ { - var b [5]uint8 - copy(b[:], round.b[j][:]) - w := sBox[4][(t[b[0]>>2]>>(24-8*(b[0]&3)))&0xff] - w ^= sBox[5][(t[b[1]>>2]>>(24-8*(b[1]&3)))&0xff] - w ^= sBox[6][(t[b[2]>>2]>>(24-8*(b[2]&3)))&0xff] - w ^= sBox[7][(t[b[3]>>2]>>(24-8*(b[3]&3)))&0xff] - w ^= sBox[4+j][(t[b[4]>>2]>>(24-8*(b[4]&3)))&0xff] - k[ki] = w - ki++ - } - } - } - - for i := 0; i < 16; i++ { - c.masking[i] = k[i] - c.rotate[i] = uint8(k[16+i] & 0x1f) - } -} - -// These are the three 'f' functions. See RFC 2144, section 2.2. -func f1(d, m uint32, r uint8) uint32 { - t := m + d - I := (t << r) | (t >> (32 - r)) - return ((sBox[0][I>>24] ^ sBox[1][(I>>16)&0xff]) - sBox[2][(I>>8)&0xff]) + sBox[3][I&0xff] -} - -func f2(d, m uint32, r uint8) uint32 { - t := m ^ d - I := (t << r) | (t >> (32 - r)) - return ((sBox[0][I>>24] - sBox[1][(I>>16)&0xff]) + sBox[2][(I>>8)&0xff]) ^ sBox[3][I&0xff] -} - -func f3(d, m uint32, r uint8) uint32 { - t := m - d - I := (t << r) | (t >> (32 - r)) - return ((sBox[0][I>>24] + sBox[1][(I>>16)&0xff]) ^ sBox[2][(I>>8)&0xff]) - sBox[3][I&0xff] -} - -var sBox = [8][256]uint32{ - { - 0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f, 0x9c004dd3, 0x6003e540, 0xcf9fc949, - 0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, 0x6e63a0e0, 0x15c361d2, 0xc2e7661d, 0x22d4ff8e, - 0x28683b6f, 0xc07fd059, 0xff2379c8, 0x775f50e2, 0x43c340d3, 0xdf2f8656, 0x887ca41a, 0xa2d2bd2d, - 0xa1c9e0d6, 0x346c4819, 0x61b76d87, 0x22540f2f, 0x2abe32e1, 0xaa54166b, 0x22568e3a, 0xa2d341d0, - 0x66db40c8, 0xa784392f, 0x004dff2f, 0x2db9d2de, 0x97943fac, 0x4a97c1d8, 0x527644b7, 0xb5f437a7, - 0xb82cbaef, 0xd751d159, 0x6ff7f0ed, 0x5a097a1f, 0x827b68d0, 0x90ecf52e, 0x22b0c054, 0xbc8e5935, - 0x4b6d2f7f, 0x50bb64a2, 0xd2664910, 0xbee5812d, 0xb7332290, 0xe93b159f, 0xb48ee411, 0x4bff345d, - 0xfd45c240, 0xad31973f, 0xc4f6d02e, 0x55fc8165, 0xd5b1caad, 0xa1ac2dae, 0xa2d4b76d, 0xc19b0c50, - 0x882240f2, 0x0c6e4f38, 0xa4e4bfd7, 0x4f5ba272, 0x564c1d2f, 0xc59c5319, 0xb949e354, 0xb04669fe, - 0xb1b6ab8a, 0xc71358dd, 0x6385c545, 0x110f935d, 0x57538ad5, 0x6a390493, 0xe63d37e0, 0x2a54f6b3, - 0x3a787d5f, 0x6276a0b5, 0x19a6fcdf, 0x7a42206a, 0x29f9d4d5, 0xf61b1891, 0xbb72275e, 0xaa508167, - 0x38901091, 0xc6b505eb, 0x84c7cb8c, 0x2ad75a0f, 0x874a1427, 0xa2d1936b, 0x2ad286af, 0xaa56d291, - 0xd7894360, 0x425c750d, 0x93b39e26, 0x187184c9, 0x6c00b32d, 0x73e2bb14, 0xa0bebc3c, 0x54623779, - 0x64459eab, 0x3f328b82, 0x7718cf82, 0x59a2cea6, 0x04ee002e, 0x89fe78e6, 0x3fab0950, 0x325ff6c2, - 0x81383f05, 0x6963c5c8, 0x76cb5ad6, 0xd49974c9, 0xca180dcf, 0x380782d5, 0xc7fa5cf6, 0x8ac31511, - 0x35e79e13, 0x47da91d0, 0xf40f9086, 0xa7e2419e, 0x31366241, 0x051ef495, 0xaa573b04, 0x4a805d8d, - 0x548300d0, 0x00322a3c, 0xbf64cddf, 0xba57a68e, 0x75c6372b, 0x50afd341, 0xa7c13275, 0x915a0bf5, - 0x6b54bfab, 0x2b0b1426, 0xab4cc9d7, 0x449ccd82, 0xf7fbf265, 0xab85c5f3, 0x1b55db94, 0xaad4e324, - 0xcfa4bd3f, 0x2deaa3e2, 0x9e204d02, 0xc8bd25ac, 0xeadf55b3, 0xd5bd9e98, 0xe31231b2, 0x2ad5ad6c, - 0x954329de, 0xadbe4528, 0xd8710f69, 0xaa51c90f, 0xaa786bf6, 0x22513f1e, 0xaa51a79b, 0x2ad344cc, - 0x7b5a41f0, 0xd37cfbad, 0x1b069505, 0x41ece491, 0xb4c332e6, 0x032268d4, 0xc9600acc, 0xce387e6d, - 0xbf6bb16c, 0x6a70fb78, 0x0d03d9c9, 0xd4df39de, 0xe01063da, 0x4736f464, 0x5ad328d8, 0xb347cc96, - 0x75bb0fc3, 0x98511bfb, 0x4ffbcc35, 0xb58bcf6a, 0xe11f0abc, 0xbfc5fe4a, 0xa70aec10, 0xac39570a, - 0x3f04442f, 0x6188b153, 0xe0397a2e, 0x5727cb79, 0x9ceb418f, 0x1cacd68d, 0x2ad37c96, 0x0175cb9d, - 0xc69dff09, 0xc75b65f0, 0xd9db40d8, 0xec0e7779, 0x4744ead4, 0xb11c3274, 0xdd24cb9e, 0x7e1c54bd, - 0xf01144f9, 0xd2240eb1, 0x9675b3fd, 0xa3ac3755, 0xd47c27af, 0x51c85f4d, 0x56907596, 0xa5bb15e6, - 0x580304f0, 0xca042cf1, 0x011a37ea, 0x8dbfaadb, 0x35ba3e4a, 0x3526ffa0, 0xc37b4d09, 0xbc306ed9, - 0x98a52666, 0x5648f725, 0xff5e569d, 0x0ced63d0, 0x7c63b2cf, 0x700b45e1, 0xd5ea50f1, 0x85a92872, - 0xaf1fbda7, 0xd4234870, 0xa7870bf3, 0x2d3b4d79, 0x42e04198, 0x0cd0ede7, 0x26470db8, 0xf881814c, - 0x474d6ad7, 0x7c0c5e5c, 0xd1231959, 0x381b7298, 0xf5d2f4db, 0xab838653, 0x6e2f1e23, 0x83719c9e, - 0xbd91e046, 0x9a56456e, 0xdc39200c, 0x20c8c571, 0x962bda1c, 0xe1e696ff, 0xb141ab08, 0x7cca89b9, - 0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, 0x427b169c, 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf, - }, - { - 0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a, 0xeec5207a, 0x55889c94, 0x72fc0651, - 0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, 0x99c430ef, 0x5f0c0794, 0x18dcdb7d, 0xa1d6eff3, - 0xa0b52f7b, 0x59e83605, 0xee15b094, 0xe9ffd909, 0xdc440086, 0xef944459, 0xba83ccb3, 0xe0c3cdfb, - 0xd1da4181, 0x3b092ab1, 0xf997f1c1, 0xa5e6cf7b, 0x01420ddb, 0xe4e7ef5b, 0x25a1ff41, 0xe180f806, - 0x1fc41080, 0x179bee7a, 0xd37ac6a9, 0xfe5830a4, 0x98de8b7f, 0x77e83f4e, 0x79929269, 0x24fa9f7b, - 0xe113c85b, 0xacc40083, 0xd7503525, 0xf7ea615f, 0x62143154, 0x0d554b63, 0x5d681121, 0xc866c359, - 0x3d63cf73, 0xcee234c0, 0xd4d87e87, 0x5c672b21, 0x071f6181, 0x39f7627f, 0x361e3084, 0xe4eb573b, - 0x602f64a4, 0xd63acd9c, 0x1bbc4635, 0x9e81032d, 0x2701f50c, 0x99847ab4, 0xa0e3df79, 0xba6cf38c, - 0x10843094, 0x2537a95e, 0xf46f6ffe, 0xa1ff3b1f, 0x208cfb6a, 0x8f458c74, 0xd9e0a227, 0x4ec73a34, - 0xfc884f69, 0x3e4de8df, 0xef0e0088, 0x3559648d, 0x8a45388c, 0x1d804366, 0x721d9bfd, 0xa58684bb, - 0xe8256333, 0x844e8212, 0x128d8098, 0xfed33fb4, 0xce280ae1, 0x27e19ba5, 0xd5a6c252, 0xe49754bd, - 0xc5d655dd, 0xeb667064, 0x77840b4d, 0xa1b6a801, 0x84db26a9, 0xe0b56714, 0x21f043b7, 0xe5d05860, - 0x54f03084, 0x066ff472, 0xa31aa153, 0xdadc4755, 0xb5625dbf, 0x68561be6, 0x83ca6b94, 0x2d6ed23b, - 0xeccf01db, 0xa6d3d0ba, 0xb6803d5c, 0xaf77a709, 0x33b4a34c, 0x397bc8d6, 0x5ee22b95, 0x5f0e5304, - 0x81ed6f61, 0x20e74364, 0xb45e1378, 0xde18639b, 0x881ca122, 0xb96726d1, 0x8049a7e8, 0x22b7da7b, - 0x5e552d25, 0x5272d237, 0x79d2951c, 0xc60d894c, 0x488cb402, 0x1ba4fe5b, 0xa4b09f6b, 0x1ca815cf, - 0xa20c3005, 0x8871df63, 0xb9de2fcb, 0x0cc6c9e9, 0x0beeff53, 0xe3214517, 0xb4542835, 0x9f63293c, - 0xee41e729, 0x6e1d2d7c, 0x50045286, 0x1e6685f3, 0xf33401c6, 0x30a22c95, 0x31a70850, 0x60930f13, - 0x73f98417, 0xa1269859, 0xec645c44, 0x52c877a9, 0xcdff33a6, 0xa02b1741, 0x7cbad9a2, 0x2180036f, - 0x50d99c08, 0xcb3f4861, 0xc26bd765, 0x64a3f6ab, 0x80342676, 0x25a75e7b, 0xe4e6d1fc, 0x20c710e6, - 0xcdf0b680, 0x17844d3b, 0x31eef84d, 0x7e0824e4, 0x2ccb49eb, 0x846a3bae, 0x8ff77888, 0xee5d60f6, - 0x7af75673, 0x2fdd5cdb, 0xa11631c1, 0x30f66f43, 0xb3faec54, 0x157fd7fa, 0xef8579cc, 0xd152de58, - 0xdb2ffd5e, 0x8f32ce19, 0x306af97a, 0x02f03ef8, 0x99319ad5, 0xc242fa0f, 0xa7e3ebb0, 0xc68e4906, - 0xb8da230c, 0x80823028, 0xdcdef3c8, 0xd35fb171, 0x088a1bc8, 0xbec0c560, 0x61a3c9e8, 0xbca8f54d, - 0xc72feffa, 0x22822e99, 0x82c570b4, 0xd8d94e89, 0x8b1c34bc, 0x301e16e6, 0x273be979, 0xb0ffeaa6, - 0x61d9b8c6, 0x00b24869, 0xb7ffce3f, 0x08dc283b, 0x43daf65a, 0xf7e19798, 0x7619b72f, 0x8f1c9ba4, - 0xdc8637a0, 0x16a7d3b1, 0x9fc393b7, 0xa7136eeb, 0xc6bcc63e, 0x1a513742, 0xef6828bc, 0x520365d6, - 0x2d6a77ab, 0x3527ed4b, 0x821fd216, 0x095c6e2e, 0xdb92f2fb, 0x5eea29cb, 0x145892f5, 0x91584f7f, - 0x5483697b, 0x2667a8cc, 0x85196048, 0x8c4bacea, 0x833860d4, 0x0d23e0f9, 0x6c387e8a, 0x0ae6d249, - 0xb284600c, 0xd835731d, 0xdcb1c647, 0xac4c56ea, 0x3ebd81b3, 0x230eabb0, 0x6438bc87, 0xf0b5b1fa, - 0x8f5ea2b3, 0xfc184642, 0x0a036b7a, 0x4fb089bd, 0x649da589, 0xa345415e, 0x5c038323, 0x3e5d3bb9, - 0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, 0x7160a539, 0x73bfbe70, 0x83877605, 0x4523ecf1, - }, - { - 0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff, 0x369fe44b, 0x8c1fc644, 0xaececa90, - 0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, 0x920e8806, 0xf0ad0548, 0xe13c8d83, 0x927010d5, - 0x11107d9f, 0x07647db9, 0xb2e3e4d4, 0x3d4f285e, 0xb9afa820, 0xfade82e0, 0xa067268b, 0x8272792e, - 0x553fb2c0, 0x489ae22b, 0xd4ef9794, 0x125e3fbc, 0x21fffcee, 0x825b1bfd, 0x9255c5ed, 0x1257a240, - 0x4e1a8302, 0xbae07fff, 0x528246e7, 0x8e57140e, 0x3373f7bf, 0x8c9f8188, 0xa6fc4ee8, 0xc982b5a5, - 0xa8c01db7, 0x579fc264, 0x67094f31, 0xf2bd3f5f, 0x40fff7c1, 0x1fb78dfc, 0x8e6bd2c1, 0x437be59b, - 0x99b03dbf, 0xb5dbc64b, 0x638dc0e6, 0x55819d99, 0xa197c81c, 0x4a012d6e, 0xc5884a28, 0xccc36f71, - 0xb843c213, 0x6c0743f1, 0x8309893c, 0x0feddd5f, 0x2f7fe850, 0xd7c07f7e, 0x02507fbf, 0x5afb9a04, - 0xa747d2d0, 0x1651192e, 0xaf70bf3e, 0x58c31380, 0x5f98302e, 0x727cc3c4, 0x0a0fb402, 0x0f7fef82, - 0x8c96fdad, 0x5d2c2aae, 0x8ee99a49, 0x50da88b8, 0x8427f4a0, 0x1eac5790, 0x796fb449, 0x8252dc15, - 0xefbd7d9b, 0xa672597d, 0xada840d8, 0x45f54504, 0xfa5d7403, 0xe83ec305, 0x4f91751a, 0x925669c2, - 0x23efe941, 0xa903f12e, 0x60270df2, 0x0276e4b6, 0x94fd6574, 0x927985b2, 0x8276dbcb, 0x02778176, - 0xf8af918d, 0x4e48f79e, 0x8f616ddf, 0xe29d840e, 0x842f7d83, 0x340ce5c8, 0x96bbb682, 0x93b4b148, - 0xef303cab, 0x984faf28, 0x779faf9b, 0x92dc560d, 0x224d1e20, 0x8437aa88, 0x7d29dc96, 0x2756d3dc, - 0x8b907cee, 0xb51fd240, 0xe7c07ce3, 0xe566b4a1, 0xc3e9615e, 0x3cf8209d, 0x6094d1e3, 0xcd9ca341, - 0x5c76460e, 0x00ea983b, 0xd4d67881, 0xfd47572c, 0xf76cedd9, 0xbda8229c, 0x127dadaa, 0x438a074e, - 0x1f97c090, 0x081bdb8a, 0x93a07ebe, 0xb938ca15, 0x97b03cff, 0x3dc2c0f8, 0x8d1ab2ec, 0x64380e51, - 0x68cc7bfb, 0xd90f2788, 0x12490181, 0x5de5ffd4, 0xdd7ef86a, 0x76a2e214, 0xb9a40368, 0x925d958f, - 0x4b39fffa, 0xba39aee9, 0xa4ffd30b, 0xfaf7933b, 0x6d498623, 0x193cbcfa, 0x27627545, 0x825cf47a, - 0x61bd8ba0, 0xd11e42d1, 0xcead04f4, 0x127ea392, 0x10428db7, 0x8272a972, 0x9270c4a8, 0x127de50b, - 0x285ba1c8, 0x3c62f44f, 0x35c0eaa5, 0xe805d231, 0x428929fb, 0xb4fcdf82, 0x4fb66a53, 0x0e7dc15b, - 0x1f081fab, 0x108618ae, 0xfcfd086d, 0xf9ff2889, 0x694bcc11, 0x236a5cae, 0x12deca4d, 0x2c3f8cc5, - 0xd2d02dfe, 0xf8ef5896, 0xe4cf52da, 0x95155b67, 0x494a488c, 0xb9b6a80c, 0x5c8f82bc, 0x89d36b45, - 0x3a609437, 0xec00c9a9, 0x44715253, 0x0a874b49, 0xd773bc40, 0x7c34671c, 0x02717ef6, 0x4feb5536, - 0xa2d02fff, 0xd2bf60c4, 0xd43f03c0, 0x50b4ef6d, 0x07478cd1, 0x006e1888, 0xa2e53f55, 0xb9e6d4bc, - 0xa2048016, 0x97573833, 0xd7207d67, 0xde0f8f3d, 0x72f87b33, 0xabcc4f33, 0x7688c55d, 0x7b00a6b0, - 0x947b0001, 0x570075d2, 0xf9bb88f8, 0x8942019e, 0x4264a5ff, 0x856302e0, 0x72dbd92b, 0xee971b69, - 0x6ea22fde, 0x5f08ae2b, 0xaf7a616d, 0xe5c98767, 0xcf1febd2, 0x61efc8c2, 0xf1ac2571, 0xcc8239c2, - 0x67214cb8, 0xb1e583d1, 0xb7dc3e62, 0x7f10bdce, 0xf90a5c38, 0x0ff0443d, 0x606e6dc6, 0x60543a49, - 0x5727c148, 0x2be98a1d, 0x8ab41738, 0x20e1be24, 0xaf96da0f, 0x68458425, 0x99833be5, 0x600d457d, - 0x282f9350, 0x8334b362, 0xd91d1120, 0x2b6d8da0, 0x642b1e31, 0x9c305a00, 0x52bce688, 0x1b03588a, - 0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, 0xdfef4636, 0xa133c501, 0xe9d3531c, 0xee353783, - }, - { - 0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb, 0x64ad8c57, 0x85510443, 0xfa020ed1, - 0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, 0xfd059d43, 0x6497b7b1, 0xf3641f63, 0x241e4adf, - 0x28147f5f, 0x4fa2b8cd, 0xc9430040, 0x0cc32220, 0xfdd30b30, 0xc0a5374f, 0x1d2d00d9, 0x24147b15, - 0xee4d111a, 0x0fca5167, 0x71ff904c, 0x2d195ffe, 0x1a05645f, 0x0c13fefe, 0x081b08ca, 0x05170121, - 0x80530100, 0xe83e5efe, 0xac9af4f8, 0x7fe72701, 0xd2b8ee5f, 0x06df4261, 0xbb9e9b8a, 0x7293ea25, - 0xce84ffdf, 0xf5718801, 0x3dd64b04, 0xa26f263b, 0x7ed48400, 0x547eebe6, 0x446d4ca0, 0x6cf3d6f5, - 0x2649abdf, 0xaea0c7f5, 0x36338cc1, 0x503f7e93, 0xd3772061, 0x11b638e1, 0x72500e03, 0xf80eb2bb, - 0xabe0502e, 0xec8d77de, 0x57971e81, 0xe14f6746, 0xc9335400, 0x6920318f, 0x081dbb99, 0xffc304a5, - 0x4d351805, 0x7f3d5ce3, 0xa6c866c6, 0x5d5bcca9, 0xdaec6fea, 0x9f926f91, 0x9f46222f, 0x3991467d, - 0xa5bf6d8e, 0x1143c44f, 0x43958302, 0xd0214eeb, 0x022083b8, 0x3fb6180c, 0x18f8931e, 0x281658e6, - 0x26486e3e, 0x8bd78a70, 0x7477e4c1, 0xb506e07c, 0xf32d0a25, 0x79098b02, 0xe4eabb81, 0x28123b23, - 0x69dead38, 0x1574ca16, 0xdf871b62, 0x211c40b7, 0xa51a9ef9, 0x0014377b, 0x041e8ac8, 0x09114003, - 0xbd59e4d2, 0xe3d156d5, 0x4fe876d5, 0x2f91a340, 0x557be8de, 0x00eae4a7, 0x0ce5c2ec, 0x4db4bba6, - 0xe756bdff, 0xdd3369ac, 0xec17b035, 0x06572327, 0x99afc8b0, 0x56c8c391, 0x6b65811c, 0x5e146119, - 0x6e85cb75, 0xbe07c002, 0xc2325577, 0x893ff4ec, 0x5bbfc92d, 0xd0ec3b25, 0xb7801ab7, 0x8d6d3b24, - 0x20c763ef, 0xc366a5fc, 0x9c382880, 0x0ace3205, 0xaac9548a, 0xeca1d7c7, 0x041afa32, 0x1d16625a, - 0x6701902c, 0x9b757a54, 0x31d477f7, 0x9126b031, 0x36cc6fdb, 0xc70b8b46, 0xd9e66a48, 0x56e55a79, - 0x026a4ceb, 0x52437eff, 0x2f8f76b4, 0x0df980a5, 0x8674cde3, 0xedda04eb, 0x17a9be04, 0x2c18f4df, - 0xb7747f9d, 0xab2af7b4, 0xefc34d20, 0x2e096b7c, 0x1741a254, 0xe5b6a035, 0x213d42f6, 0x2c1c7c26, - 0x61c2f50f, 0x6552daf9, 0xd2c231f8, 0x25130f69, 0xd8167fa2, 0x0418f2c8, 0x001a96a6, 0x0d1526ab, - 0x63315c21, 0x5e0a72ec, 0x49bafefd, 0x187908d9, 0x8d0dbd86, 0x311170a7, 0x3e9b640c, 0xcc3e10d7, - 0xd5cad3b6, 0x0caec388, 0xf73001e1, 0x6c728aff, 0x71eae2a1, 0x1f9af36e, 0xcfcbd12f, 0xc1de8417, - 0xac07be6b, 0xcb44a1d8, 0x8b9b0f56, 0x013988c3, 0xb1c52fca, 0xb4be31cd, 0xd8782806, 0x12a3a4e2, - 0x6f7de532, 0x58fd7eb6, 0xd01ee900, 0x24adffc2, 0xf4990fc5, 0x9711aac5, 0x001d7b95, 0x82e5e7d2, - 0x109873f6, 0x00613096, 0xc32d9521, 0xada121ff, 0x29908415, 0x7fbb977f, 0xaf9eb3db, 0x29c9ed2a, - 0x5ce2a465, 0xa730f32c, 0xd0aa3fe8, 0x8a5cc091, 0xd49e2ce7, 0x0ce454a9, 0xd60acd86, 0x015f1919, - 0x77079103, 0xdea03af6, 0x78a8565e, 0xdee356df, 0x21f05cbe, 0x8b75e387, 0xb3c50651, 0xb8a5c3ef, - 0xd8eeb6d2, 0xe523be77, 0xc2154529, 0x2f69efdf, 0xafe67afb, 0xf470c4b2, 0xf3e0eb5b, 0xd6cc9876, - 0x39e4460c, 0x1fda8538, 0x1987832f, 0xca007367, 0xa99144f8, 0x296b299e, 0x492fc295, 0x9266beab, - 0xb5676e69, 0x9bd3ddda, 0xdf7e052f, 0xdb25701c, 0x1b5e51ee, 0xf65324e6, 0x6afce36c, 0x0316cc04, - 0x8644213e, 0xb7dc59d0, 0x7965291f, 0xccd6fd43, 0x41823979, 0x932bcdf6, 0xb657c34d, 0x4edfd282, - 0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2, - }, - { - 0x7ec90c04, 0x2c6e74b9, 0x9b0e66df, 0xa6337911, 0xb86a7fff, 0x1dd358f5, 0x44dd9d44, 0x1731167f, - 0x08fbf1fa, 0xe7f511cc, 0xd2051b00, 0x735aba00, 0x2ab722d8, 0x386381cb, 0xacf6243a, 0x69befd7a, - 0xe6a2e77f, 0xf0c720cd, 0xc4494816, 0xccf5c180, 0x38851640, 0x15b0a848, 0xe68b18cb, 0x4caadeff, - 0x5f480a01, 0x0412b2aa, 0x259814fc, 0x41d0efe2, 0x4e40b48d, 0x248eb6fb, 0x8dba1cfe, 0x41a99b02, - 0x1a550a04, 0xba8f65cb, 0x7251f4e7, 0x95a51725, 0xc106ecd7, 0x97a5980a, 0xc539b9aa, 0x4d79fe6a, - 0xf2f3f763, 0x68af8040, 0xed0c9e56, 0x11b4958b, 0xe1eb5a88, 0x8709e6b0, 0xd7e07156, 0x4e29fea7, - 0x6366e52d, 0x02d1c000, 0xc4ac8e05, 0x9377f571, 0x0c05372a, 0x578535f2, 0x2261be02, 0xd642a0c9, - 0xdf13a280, 0x74b55bd2, 0x682199c0, 0xd421e5ec, 0x53fb3ce8, 0xc8adedb3, 0x28a87fc9, 0x3d959981, - 0x5c1ff900, 0xfe38d399, 0x0c4eff0b, 0x062407ea, 0xaa2f4fb1, 0x4fb96976, 0x90c79505, 0xb0a8a774, - 0xef55a1ff, 0xe59ca2c2, 0xa6b62d27, 0xe66a4263, 0xdf65001f, 0x0ec50966, 0xdfdd55bc, 0x29de0655, - 0x911e739a, 0x17af8975, 0x32c7911c, 0x89f89468, 0x0d01e980, 0x524755f4, 0x03b63cc9, 0x0cc844b2, - 0xbcf3f0aa, 0x87ac36e9, 0xe53a7426, 0x01b3d82b, 0x1a9e7449, 0x64ee2d7e, 0xcddbb1da, 0x01c94910, - 0xb868bf80, 0x0d26f3fd, 0x9342ede7, 0x04a5c284, 0x636737b6, 0x50f5b616, 0xf24766e3, 0x8eca36c1, - 0x136e05db, 0xfef18391, 0xfb887a37, 0xd6e7f7d4, 0xc7fb7dc9, 0x3063fcdf, 0xb6f589de, 0xec2941da, - 0x26e46695, 0xb7566419, 0xf654efc5, 0xd08d58b7, 0x48925401, 0xc1bacb7f, 0xe5ff550f, 0xb6083049, - 0x5bb5d0e8, 0x87d72e5a, 0xab6a6ee1, 0x223a66ce, 0xc62bf3cd, 0x9e0885f9, 0x68cb3e47, 0x086c010f, - 0xa21de820, 0xd18b69de, 0xf3f65777, 0xfa02c3f6, 0x407edac3, 0xcbb3d550, 0x1793084d, 0xb0d70eba, - 0x0ab378d5, 0xd951fb0c, 0xded7da56, 0x4124bbe4, 0x94ca0b56, 0x0f5755d1, 0xe0e1e56e, 0x6184b5be, - 0x580a249f, 0x94f74bc0, 0xe327888e, 0x9f7b5561, 0xc3dc0280, 0x05687715, 0x646c6bd7, 0x44904db3, - 0x66b4f0a3, 0xc0f1648a, 0x697ed5af, 0x49e92ff6, 0x309e374f, 0x2cb6356a, 0x85808573, 0x4991f840, - 0x76f0ae02, 0x083be84d, 0x28421c9a, 0x44489406, 0x736e4cb8, 0xc1092910, 0x8bc95fc6, 0x7d869cf4, - 0x134f616f, 0x2e77118d, 0xb31b2be1, 0xaa90b472, 0x3ca5d717, 0x7d161bba, 0x9cad9010, 0xaf462ba2, - 0x9fe459d2, 0x45d34559, 0xd9f2da13, 0xdbc65487, 0xf3e4f94e, 0x176d486f, 0x097c13ea, 0x631da5c7, - 0x445f7382, 0x175683f4, 0xcdc66a97, 0x70be0288, 0xb3cdcf72, 0x6e5dd2f3, 0x20936079, 0x459b80a5, - 0xbe60e2db, 0xa9c23101, 0xeba5315c, 0x224e42f2, 0x1c5c1572, 0xf6721b2c, 0x1ad2fff3, 0x8c25404e, - 0x324ed72f, 0x4067b7fd, 0x0523138e, 0x5ca3bc78, 0xdc0fd66e, 0x75922283, 0x784d6b17, 0x58ebb16e, - 0x44094f85, 0x3f481d87, 0xfcfeae7b, 0x77b5ff76, 0x8c2302bf, 0xaaf47556, 0x5f46b02a, 0x2b092801, - 0x3d38f5f7, 0x0ca81f36, 0x52af4a8a, 0x66d5e7c0, 0xdf3b0874, 0x95055110, 0x1b5ad7a8, 0xf61ed5ad, - 0x6cf6e479, 0x20758184, 0xd0cefa65, 0x88f7be58, 0x4a046826, 0x0ff6f8f3, 0xa09c7f70, 0x5346aba0, - 0x5ce96c28, 0xe176eda3, 0x6bac307f, 0x376829d2, 0x85360fa9, 0x17e3fe2a, 0x24b79767, 0xf5a96b20, - 0xd6cd2595, 0x68ff1ebf, 0x7555442c, 0xf19f06be, 0xf9e0659a, 0xeeb9491d, 0x34010718, 0xbb30cab8, - 0xe822fe15, 0x88570983, 0x750e6249, 0xda627e55, 0x5e76ffa8, 0xb1534546, 0x6d47de08, 0xefe9e7d4, - }, - { - 0xf6fa8f9d, 0x2cac6ce1, 0x4ca34867, 0xe2337f7c, 0x95db08e7, 0x016843b4, 0xeced5cbc, 0x325553ac, - 0xbf9f0960, 0xdfa1e2ed, 0x83f0579d, 0x63ed86b9, 0x1ab6a6b8, 0xde5ebe39, 0xf38ff732, 0x8989b138, - 0x33f14961, 0xc01937bd, 0xf506c6da, 0xe4625e7e, 0xa308ea99, 0x4e23e33c, 0x79cbd7cc, 0x48a14367, - 0xa3149619, 0xfec94bd5, 0xa114174a, 0xeaa01866, 0xa084db2d, 0x09a8486f, 0xa888614a, 0x2900af98, - 0x01665991, 0xe1992863, 0xc8f30c60, 0x2e78ef3c, 0xd0d51932, 0xcf0fec14, 0xf7ca07d2, 0xd0a82072, - 0xfd41197e, 0x9305a6b0, 0xe86be3da, 0x74bed3cd, 0x372da53c, 0x4c7f4448, 0xdab5d440, 0x6dba0ec3, - 0x083919a7, 0x9fbaeed9, 0x49dbcfb0, 0x4e670c53, 0x5c3d9c01, 0x64bdb941, 0x2c0e636a, 0xba7dd9cd, - 0xea6f7388, 0xe70bc762, 0x35f29adb, 0x5c4cdd8d, 0xf0d48d8c, 0xb88153e2, 0x08a19866, 0x1ae2eac8, - 0x284caf89, 0xaa928223, 0x9334be53, 0x3b3a21bf, 0x16434be3, 0x9aea3906, 0xefe8c36e, 0xf890cdd9, - 0x80226dae, 0xc340a4a3, 0xdf7e9c09, 0xa694a807, 0x5b7c5ecc, 0x221db3a6, 0x9a69a02f, 0x68818a54, - 0xceb2296f, 0x53c0843a, 0xfe893655, 0x25bfe68a, 0xb4628abc, 0xcf222ebf, 0x25ac6f48, 0xa9a99387, - 0x53bddb65, 0xe76ffbe7, 0xe967fd78, 0x0ba93563, 0x8e342bc1, 0xe8a11be9, 0x4980740d, 0xc8087dfc, - 0x8de4bf99, 0xa11101a0, 0x7fd37975, 0xda5a26c0, 0xe81f994f, 0x9528cd89, 0xfd339fed, 0xb87834bf, - 0x5f04456d, 0x22258698, 0xc9c4c83b, 0x2dc156be, 0x4f628daa, 0x57f55ec5, 0xe2220abe, 0xd2916ebf, - 0x4ec75b95, 0x24f2c3c0, 0x42d15d99, 0xcd0d7fa0, 0x7b6e27ff, 0xa8dc8af0, 0x7345c106, 0xf41e232f, - 0x35162386, 0xe6ea8926, 0x3333b094, 0x157ec6f2, 0x372b74af, 0x692573e4, 0xe9a9d848, 0xf3160289, - 0x3a62ef1d, 0xa787e238, 0xf3a5f676, 0x74364853, 0x20951063, 0x4576698d, 0xb6fad407, 0x592af950, - 0x36f73523, 0x4cfb6e87, 0x7da4cec0, 0x6c152daa, 0xcb0396a8, 0xc50dfe5d, 0xfcd707ab, 0x0921c42f, - 0x89dff0bb, 0x5fe2be78, 0x448f4f33, 0x754613c9, 0x2b05d08d, 0x48b9d585, 0xdc049441, 0xc8098f9b, - 0x7dede786, 0xc39a3373, 0x42410005, 0x6a091751, 0x0ef3c8a6, 0x890072d6, 0x28207682, 0xa9a9f7be, - 0xbf32679d, 0xd45b5b75, 0xb353fd00, 0xcbb0e358, 0x830f220a, 0x1f8fb214, 0xd372cf08, 0xcc3c4a13, - 0x8cf63166, 0x061c87be, 0x88c98f88, 0x6062e397, 0x47cf8e7a, 0xb6c85283, 0x3cc2acfb, 0x3fc06976, - 0x4e8f0252, 0x64d8314d, 0xda3870e3, 0x1e665459, 0xc10908f0, 0x513021a5, 0x6c5b68b7, 0x822f8aa0, - 0x3007cd3e, 0x74719eef, 0xdc872681, 0x073340d4, 0x7e432fd9, 0x0c5ec241, 0x8809286c, 0xf592d891, - 0x08a930f6, 0x957ef305, 0xb7fbffbd, 0xc266e96f, 0x6fe4ac98, 0xb173ecc0, 0xbc60b42a, 0x953498da, - 0xfba1ae12, 0x2d4bd736, 0x0f25faab, 0xa4f3fceb, 0xe2969123, 0x257f0c3d, 0x9348af49, 0x361400bc, - 0xe8816f4a, 0x3814f200, 0xa3f94043, 0x9c7a54c2, 0xbc704f57, 0xda41e7f9, 0xc25ad33a, 0x54f4a084, - 0xb17f5505, 0x59357cbe, 0xedbd15c8, 0x7f97c5ab, 0xba5ac7b5, 0xb6f6deaf, 0x3a479c3a, 0x5302da25, - 0x653d7e6a, 0x54268d49, 0x51a477ea, 0x5017d55b, 0xd7d25d88, 0x44136c76, 0x0404a8c8, 0xb8e5a121, - 0xb81a928a, 0x60ed5869, 0x97c55b96, 0xeaec991b, 0x29935913, 0x01fdb7f1, 0x088e8dfa, 0x9ab6f6f5, - 0x3b4cbf9f, 0x4a5de3ab, 0xe6051d35, 0xa0e1d855, 0xd36b4cf1, 0xf544edeb, 0xb0e93524, 0xbebb8fbd, - 0xa2d762cf, 0x49c92f54, 0x38b5f331, 0x7128a454, 0x48392905, 0xa65b1db8, 0x851c97bd, 0xd675cf2f, - }, - { - 0x85e04019, 0x332bf567, 0x662dbfff, 0xcfc65693, 0x2a8d7f6f, 0xab9bc912, 0xde6008a1, 0x2028da1f, - 0x0227bce7, 0x4d642916, 0x18fac300, 0x50f18b82, 0x2cb2cb11, 0xb232e75c, 0x4b3695f2, 0xb28707de, - 0xa05fbcf6, 0xcd4181e9, 0xe150210c, 0xe24ef1bd, 0xb168c381, 0xfde4e789, 0x5c79b0d8, 0x1e8bfd43, - 0x4d495001, 0x38be4341, 0x913cee1d, 0x92a79c3f, 0x089766be, 0xbaeeadf4, 0x1286becf, 0xb6eacb19, - 0x2660c200, 0x7565bde4, 0x64241f7a, 0x8248dca9, 0xc3b3ad66, 0x28136086, 0x0bd8dfa8, 0x356d1cf2, - 0x107789be, 0xb3b2e9ce, 0x0502aa8f, 0x0bc0351e, 0x166bf52a, 0xeb12ff82, 0xe3486911, 0xd34d7516, - 0x4e7b3aff, 0x5f43671b, 0x9cf6e037, 0x4981ac83, 0x334266ce, 0x8c9341b7, 0xd0d854c0, 0xcb3a6c88, - 0x47bc2829, 0x4725ba37, 0xa66ad22b, 0x7ad61f1e, 0x0c5cbafa, 0x4437f107, 0xb6e79962, 0x42d2d816, - 0x0a961288, 0xe1a5c06e, 0x13749e67, 0x72fc081a, 0xb1d139f7, 0xf9583745, 0xcf19df58, 0xbec3f756, - 0xc06eba30, 0x07211b24, 0x45c28829, 0xc95e317f, 0xbc8ec511, 0x38bc46e9, 0xc6e6fa14, 0xbae8584a, - 0xad4ebc46, 0x468f508b, 0x7829435f, 0xf124183b, 0x821dba9f, 0xaff60ff4, 0xea2c4e6d, 0x16e39264, - 0x92544a8b, 0x009b4fc3, 0xaba68ced, 0x9ac96f78, 0x06a5b79a, 0xb2856e6e, 0x1aec3ca9, 0xbe838688, - 0x0e0804e9, 0x55f1be56, 0xe7e5363b, 0xb3a1f25d, 0xf7debb85, 0x61fe033c, 0x16746233, 0x3c034c28, - 0xda6d0c74, 0x79aac56c, 0x3ce4e1ad, 0x51f0c802, 0x98f8f35a, 0x1626a49f, 0xeed82b29, 0x1d382fe3, - 0x0c4fb99a, 0xbb325778, 0x3ec6d97b, 0x6e77a6a9, 0xcb658b5c, 0xd45230c7, 0x2bd1408b, 0x60c03eb7, - 0xb9068d78, 0xa33754f4, 0xf430c87d, 0xc8a71302, 0xb96d8c32, 0xebd4e7be, 0xbe8b9d2d, 0x7979fb06, - 0xe7225308, 0x8b75cf77, 0x11ef8da4, 0xe083c858, 0x8d6b786f, 0x5a6317a6, 0xfa5cf7a0, 0x5dda0033, - 0xf28ebfb0, 0xf5b9c310, 0xa0eac280, 0x08b9767a, 0xa3d9d2b0, 0x79d34217, 0x021a718d, 0x9ac6336a, - 0x2711fd60, 0x438050e3, 0x069908a8, 0x3d7fedc4, 0x826d2bef, 0x4eeb8476, 0x488dcf25, 0x36c9d566, - 0x28e74e41, 0xc2610aca, 0x3d49a9cf, 0xbae3b9df, 0xb65f8de6, 0x92aeaf64, 0x3ac7d5e6, 0x9ea80509, - 0xf22b017d, 0xa4173f70, 0xdd1e16c3, 0x15e0d7f9, 0x50b1b887, 0x2b9f4fd5, 0x625aba82, 0x6a017962, - 0x2ec01b9c, 0x15488aa9, 0xd716e740, 0x40055a2c, 0x93d29a22, 0xe32dbf9a, 0x058745b9, 0x3453dc1e, - 0xd699296e, 0x496cff6f, 0x1c9f4986, 0xdfe2ed07, 0xb87242d1, 0x19de7eae, 0x053e561a, 0x15ad6f8c, - 0x66626c1c, 0x7154c24c, 0xea082b2a, 0x93eb2939, 0x17dcb0f0, 0x58d4f2ae, 0x9ea294fb, 0x52cf564c, - 0x9883fe66, 0x2ec40581, 0x763953c3, 0x01d6692e, 0xd3a0c108, 0xa1e7160e, 0xe4f2dfa6, 0x693ed285, - 0x74904698, 0x4c2b0edd, 0x4f757656, 0x5d393378, 0xa132234f, 0x3d321c5d, 0xc3f5e194, 0x4b269301, - 0xc79f022f, 0x3c997e7e, 0x5e4f9504, 0x3ffafbbd, 0x76f7ad0e, 0x296693f4, 0x3d1fce6f, 0xc61e45be, - 0xd3b5ab34, 0xf72bf9b7, 0x1b0434c0, 0x4e72b567, 0x5592a33d, 0xb5229301, 0xcfd2a87f, 0x60aeb767, - 0x1814386b, 0x30bcc33d, 0x38a0c07d, 0xfd1606f2, 0xc363519b, 0x589dd390, 0x5479f8e6, 0x1cb8d647, - 0x97fd61a9, 0xea7759f4, 0x2d57539d, 0x569a58cf, 0xe84e63ad, 0x462e1b78, 0x6580f87e, 0xf3817914, - 0x91da55f4, 0x40a230f3, 0xd1988f35, 0xb6e318d2, 0x3ffa50bc, 0x3d40f021, 0xc3c0bdae, 0x4958c24c, - 0x518f36b2, 0x84b1d370, 0x0fedce83, 0x878ddada, 0xf2a279c7, 0x94e01be8, 0x90716f4b, 0x954b8aa3, - }, - { - 0xe216300d, 0xbbddfffc, 0xa7ebdabd, 0x35648095, 0x7789f8b7, 0xe6c1121b, 0x0e241600, 0x052ce8b5, - 0x11a9cfb0, 0xe5952f11, 0xece7990a, 0x9386d174, 0x2a42931c, 0x76e38111, 0xb12def3a, 0x37ddddfc, - 0xde9adeb1, 0x0a0cc32c, 0xbe197029, 0x84a00940, 0xbb243a0f, 0xb4d137cf, 0xb44e79f0, 0x049eedfd, - 0x0b15a15d, 0x480d3168, 0x8bbbde5a, 0x669ded42, 0xc7ece831, 0x3f8f95e7, 0x72df191b, 0x7580330d, - 0x94074251, 0x5c7dcdfa, 0xabbe6d63, 0xaa402164, 0xb301d40a, 0x02e7d1ca, 0x53571dae, 0x7a3182a2, - 0x12a8ddec, 0xfdaa335d, 0x176f43e8, 0x71fb46d4, 0x38129022, 0xce949ad4, 0xb84769ad, 0x965bd862, - 0x82f3d055, 0x66fb9767, 0x15b80b4e, 0x1d5b47a0, 0x4cfde06f, 0xc28ec4b8, 0x57e8726e, 0x647a78fc, - 0x99865d44, 0x608bd593, 0x6c200e03, 0x39dc5ff6, 0x5d0b00a3, 0xae63aff2, 0x7e8bd632, 0x70108c0c, - 0xbbd35049, 0x2998df04, 0x980cf42a, 0x9b6df491, 0x9e7edd53, 0x06918548, 0x58cb7e07, 0x3b74ef2e, - 0x522fffb1, 0xd24708cc, 0x1c7e27cd, 0xa4eb215b, 0x3cf1d2e2, 0x19b47a38, 0x424f7618, 0x35856039, - 0x9d17dee7, 0x27eb35e6, 0xc9aff67b, 0x36baf5b8, 0x09c467cd, 0xc18910b1, 0xe11dbf7b, 0x06cd1af8, - 0x7170c608, 0x2d5e3354, 0xd4de495a, 0x64c6d006, 0xbcc0c62c, 0x3dd00db3, 0x708f8f34, 0x77d51b42, - 0x264f620f, 0x24b8d2bf, 0x15c1b79e, 0x46a52564, 0xf8d7e54e, 0x3e378160, 0x7895cda5, 0x859c15a5, - 0xe6459788, 0xc37bc75f, 0xdb07ba0c, 0x0676a3ab, 0x7f229b1e, 0x31842e7b, 0x24259fd7, 0xf8bef472, - 0x835ffcb8, 0x6df4c1f2, 0x96f5b195, 0xfd0af0fc, 0xb0fe134c, 0xe2506d3d, 0x4f9b12ea, 0xf215f225, - 0xa223736f, 0x9fb4c428, 0x25d04979, 0x34c713f8, 0xc4618187, 0xea7a6e98, 0x7cd16efc, 0x1436876c, - 0xf1544107, 0xbedeee14, 0x56e9af27, 0xa04aa441, 0x3cf7c899, 0x92ecbae6, 0xdd67016d, 0x151682eb, - 0xa842eedf, 0xfdba60b4, 0xf1907b75, 0x20e3030f, 0x24d8c29e, 0xe139673b, 0xefa63fb8, 0x71873054, - 0xb6f2cf3b, 0x9f326442, 0xcb15a4cc, 0xb01a4504, 0xf1e47d8d, 0x844a1be5, 0xbae7dfdc, 0x42cbda70, - 0xcd7dae0a, 0x57e85b7a, 0xd53f5af6, 0x20cf4d8c, 0xcea4d428, 0x79d130a4, 0x3486ebfb, 0x33d3cddc, - 0x77853b53, 0x37effcb5, 0xc5068778, 0xe580b3e6, 0x4e68b8f4, 0xc5c8b37e, 0x0d809ea2, 0x398feb7c, - 0x132a4f94, 0x43b7950e, 0x2fee7d1c, 0x223613bd, 0xdd06caa2, 0x37df932b, 0xc4248289, 0xacf3ebc3, - 0x5715f6b7, 0xef3478dd, 0xf267616f, 0xc148cbe4, 0x9052815e, 0x5e410fab, 0xb48a2465, 0x2eda7fa4, - 0xe87b40e4, 0xe98ea084, 0x5889e9e1, 0xefd390fc, 0xdd07d35b, 0xdb485694, 0x38d7e5b2, 0x57720101, - 0x730edebc, 0x5b643113, 0x94917e4f, 0x503c2fba, 0x646f1282, 0x7523d24a, 0xe0779695, 0xf9c17a8f, - 0x7a5b2121, 0xd187b896, 0x29263a4d, 0xba510cdf, 0x81f47c9f, 0xad1163ed, 0xea7b5965, 0x1a00726e, - 0x11403092, 0x00da6d77, 0x4a0cdd61, 0xad1f4603, 0x605bdfb0, 0x9eedc364, 0x22ebe6a8, 0xcee7d28a, - 0xa0e736a0, 0x5564a6b9, 0x10853209, 0xc7eb8f37, 0x2de705ca, 0x8951570f, 0xdf09822b, 0xbd691a6c, - 0xaa12e4f2, 0x87451c0f, 0xe0f6a27a, 0x3ada4819, 0x4cf1764f, 0x0d771c2b, 0x67cdb156, 0x350d8384, - 0x5938fa0f, 0x42399ef3, 0x36997b07, 0x0e84093d, 0x4aa93e61, 0x8360d87b, 0x1fa98b0c, 0x1149382c, - 0xe97625a5, 0x0614d1b7, 0x0e25244b, 0x0c768347, 0x589e8d82, 0x0d2059d1, 0xa466bb1e, 0xf8da0a82, - 0x04f19130, 0xba6e4ec0, 0x99265164, 0x1ee7230d, 0x50b2ad80, 0xeaee6801, 0x8db2a283, 0xea8bf59e, - }, -} diff --git a/vendor/golang.org/x/crypto/internal/alias/alias.go b/vendor/golang.org/x/crypto/internal/alias/alias.go deleted file mode 100644 index 69c17f8..0000000 --- a/vendor/golang.org/x/crypto/internal/alias/alias.go +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !purego -// +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 deleted file mode 100644 index 4775b0a..0000000 --- a/vendor/golang.org/x/crypto/internal/alias/alias_purego.go +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build purego -// +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/pbkdf2/pbkdf2.go b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go deleted file mode 100644 index 904b57e..0000000 --- a/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go +++ /dev/null @@ -1,77 +0,0 @@ -// 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 pbkdf2 implements the key derivation function PBKDF2 as defined in RFC -2898 / PKCS #5 v2.0. - -A key derivation function is useful when encrypting data based on a password -or any other not-fully-random data. It uses a pseudorandom function to derive -a secure encryption key based on the password. - -While v2.0 of the standard defines only one pseudorandom function to use, -HMAC-SHA1, the drafted v2.1 specification allows use of all five FIPS Approved -Hash Functions SHA-1, SHA-224, SHA-256, SHA-384 and SHA-512 for HMAC. To -choose, you can pass the `New` functions from the different SHA packages to -pbkdf2.Key. -*/ -package pbkdf2 // import "golang.org/x/crypto/pbkdf2" - -import ( - "crypto/hmac" - "hash" -) - -// Key derives a key from the password, salt and iteration count, returning a -// []byte of length keylen that can be used as cryptographic key. The key is -// derived based on the method described as PBKDF2 with the HMAC variant using -// the supplied hash function. -// -// For example, to use a HMAC-SHA-1 based PBKDF2 key derivation function, you -// can get a derived key for e.g. AES-256 (which needs a 32-byte key) by -// doing: -// -// dk := pbkdf2.Key([]byte("some password"), salt, 4096, 32, sha1.New) -// -// Remember to get a good random salt. At least 8 bytes is recommended by the -// RFC. -// -// Using a higher iteration count will increase the cost of an exhaustive -// search but will also make derivation proportionally slower. -func Key(password, salt []byte, iter, keyLen int, h func() hash.Hash) []byte { - prf := hmac.New(h, password) - hashLen := prf.Size() - numBlocks := (keyLen + hashLen - 1) / hashLen - - var buf [4]byte - dk := make([]byte, 0, numBlocks*hashLen) - U := make([]byte, hashLen) - for block := 1; block <= numBlocks; block++ { - // N.B.: || means concatenation, ^ means XOR - // for each block T_i = U_1 ^ U_2 ^ ... ^ U_iter - // U_1 = PRF(password, salt || uint(i)) - prf.Reset() - prf.Write(salt) - buf[0] = byte(block >> 24) - buf[1] = byte(block >> 16) - buf[2] = byte(block >> 8) - buf[3] = byte(block) - prf.Write(buf[:4]) - dk = prf.Sum(dk) - T := dk[len(dk)-hashLen:] - copy(U, T) - - // U_n = PRF(password, U_(n-1)) - for n := 2; n <= iter; n++ { - prf.Reset() - prf.Write(U) - U = U[:0] - U = prf.Sum(U) - for x := range U { - T[x] ^= U[x] - } - } - } - return dk[:keyLen] -} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/hsalsa20.go b/vendor/golang.org/x/crypto/salsa20/salsa/hsalsa20.go deleted file mode 100644 index 4c96147..0000000 --- a/vendor/golang.org/x/crypto/salsa20/salsa/hsalsa20.go +++ /dev/null @@ -1,144 +0,0 @@ -// 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 salsa provides low-level access to functions in the Salsa family. -package salsa // import "golang.org/x/crypto/salsa20/salsa" - -// Sigma is the Salsa20 constant for 256-bit keys. -var Sigma = [16]byte{'e', 'x', 'p', 'a', 'n', 'd', ' ', '3', '2', '-', 'b', 'y', 't', 'e', ' ', 'k'} - -// HSalsa20 applies the HSalsa20 core function to a 16-byte input in, 32-byte -// key k, and 16-byte constant c, and puts the result into the 32-byte array -// out. -func HSalsa20(out *[32]byte, in *[16]byte, k *[32]byte, c *[16]byte) { - x0 := uint32(c[0]) | uint32(c[1])<<8 | uint32(c[2])<<16 | uint32(c[3])<<24 - x1 := uint32(k[0]) | uint32(k[1])<<8 | uint32(k[2])<<16 | uint32(k[3])<<24 - x2 := uint32(k[4]) | uint32(k[5])<<8 | uint32(k[6])<<16 | uint32(k[7])<<24 - x3 := uint32(k[8]) | uint32(k[9])<<8 | uint32(k[10])<<16 | uint32(k[11])<<24 - x4 := uint32(k[12]) | uint32(k[13])<<8 | uint32(k[14])<<16 | uint32(k[15])<<24 - x5 := uint32(c[4]) | uint32(c[5])<<8 | uint32(c[6])<<16 | uint32(c[7])<<24 - x6 := uint32(in[0]) | uint32(in[1])<<8 | uint32(in[2])<<16 | uint32(in[3])<<24 - x7 := uint32(in[4]) | uint32(in[5])<<8 | uint32(in[6])<<16 | uint32(in[7])<<24 - x8 := uint32(in[8]) | uint32(in[9])<<8 | uint32(in[10])<<16 | uint32(in[11])<<24 - x9 := uint32(in[12]) | uint32(in[13])<<8 | uint32(in[14])<<16 | uint32(in[15])<<24 - x10 := uint32(c[8]) | uint32(c[9])<<8 | uint32(c[10])<<16 | uint32(c[11])<<24 - x11 := uint32(k[16]) | uint32(k[17])<<8 | uint32(k[18])<<16 | uint32(k[19])<<24 - x12 := uint32(k[20]) | uint32(k[21])<<8 | uint32(k[22])<<16 | uint32(k[23])<<24 - x13 := uint32(k[24]) | uint32(k[25])<<8 | uint32(k[26])<<16 | uint32(k[27])<<24 - x14 := uint32(k[28]) | uint32(k[29])<<8 | uint32(k[30])<<16 | uint32(k[31])<<24 - x15 := uint32(c[12]) | uint32(c[13])<<8 | uint32(c[14])<<16 | uint32(c[15])<<24 - - for i := 0; i < 20; i += 2 { - u := x0 + x12 - x4 ^= u<<7 | u>>(32-7) - u = x4 + x0 - x8 ^= u<<9 | u>>(32-9) - u = x8 + x4 - x12 ^= u<<13 | u>>(32-13) - u = x12 + x8 - x0 ^= u<<18 | u>>(32-18) - - u = x5 + x1 - x9 ^= u<<7 | u>>(32-7) - u = x9 + x5 - x13 ^= u<<9 | u>>(32-9) - u = x13 + x9 - x1 ^= u<<13 | u>>(32-13) - u = x1 + x13 - x5 ^= u<<18 | u>>(32-18) - - u = x10 + x6 - x14 ^= u<<7 | u>>(32-7) - u = x14 + x10 - x2 ^= u<<9 | u>>(32-9) - u = x2 + x14 - x6 ^= u<<13 | u>>(32-13) - u = x6 + x2 - x10 ^= u<<18 | u>>(32-18) - - u = x15 + x11 - x3 ^= u<<7 | u>>(32-7) - u = x3 + x15 - x7 ^= u<<9 | u>>(32-9) - u = x7 + x3 - x11 ^= u<<13 | u>>(32-13) - u = x11 + x7 - x15 ^= u<<18 | u>>(32-18) - - u = x0 + x3 - x1 ^= u<<7 | u>>(32-7) - u = x1 + x0 - x2 ^= u<<9 | u>>(32-9) - u = x2 + x1 - x3 ^= u<<13 | u>>(32-13) - u = x3 + x2 - x0 ^= u<<18 | u>>(32-18) - - u = x5 + x4 - x6 ^= u<<7 | u>>(32-7) - u = x6 + x5 - x7 ^= u<<9 | u>>(32-9) - u = x7 + x6 - x4 ^= u<<13 | u>>(32-13) - u = x4 + x7 - x5 ^= u<<18 | u>>(32-18) - - u = x10 + x9 - x11 ^= u<<7 | u>>(32-7) - u = x11 + x10 - x8 ^= u<<9 | u>>(32-9) - u = x8 + x11 - x9 ^= u<<13 | u>>(32-13) - u = x9 + x8 - x10 ^= u<<18 | u>>(32-18) - - u = x15 + x14 - x12 ^= u<<7 | u>>(32-7) - u = x12 + x15 - x13 ^= u<<9 | u>>(32-9) - u = x13 + x12 - x14 ^= u<<13 | u>>(32-13) - u = x14 + x13 - x15 ^= u<<18 | u>>(32-18) - } - out[0] = byte(x0) - out[1] = byte(x0 >> 8) - out[2] = byte(x0 >> 16) - out[3] = byte(x0 >> 24) - - out[4] = byte(x5) - out[5] = byte(x5 >> 8) - out[6] = byte(x5 >> 16) - out[7] = byte(x5 >> 24) - - out[8] = byte(x10) - out[9] = byte(x10 >> 8) - out[10] = byte(x10 >> 16) - out[11] = byte(x10 >> 24) - - out[12] = byte(x15) - out[13] = byte(x15 >> 8) - out[14] = byte(x15 >> 16) - out[15] = byte(x15 >> 24) - - out[16] = byte(x6) - out[17] = byte(x6 >> 8) - out[18] = byte(x6 >> 16) - out[19] = byte(x6 >> 24) - - out[20] = byte(x7) - out[21] = byte(x7 >> 8) - out[22] = byte(x7 >> 16) - out[23] = byte(x7 >> 24) - - out[24] = byte(x8) - out[25] = byte(x8 >> 8) - out[26] = byte(x8 >> 16) - out[27] = byte(x8 >> 24) - - out[28] = byte(x9) - out[29] = byte(x9 >> 8) - out[30] = byte(x9 >> 16) - out[31] = byte(x9 >> 24) -} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/salsa208.go b/vendor/golang.org/x/crypto/salsa20/salsa/salsa208.go deleted file mode 100644 index 9bfc092..0000000 --- a/vendor/golang.org/x/crypto/salsa20/salsa/salsa208.go +++ /dev/null @@ -1,199 +0,0 @@ -// 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 salsa - -// Core208 applies the Salsa20/8 core function to the 64-byte array in and puts -// the result into the 64-byte array out. The input and output may be the same array. -func Core208(out *[64]byte, in *[64]byte) { - j0 := uint32(in[0]) | uint32(in[1])<<8 | uint32(in[2])<<16 | uint32(in[3])<<24 - j1 := uint32(in[4]) | uint32(in[5])<<8 | uint32(in[6])<<16 | uint32(in[7])<<24 - j2 := uint32(in[8]) | uint32(in[9])<<8 | uint32(in[10])<<16 | uint32(in[11])<<24 - j3 := uint32(in[12]) | uint32(in[13])<<8 | uint32(in[14])<<16 | uint32(in[15])<<24 - j4 := uint32(in[16]) | uint32(in[17])<<8 | uint32(in[18])<<16 | uint32(in[19])<<24 - j5 := uint32(in[20]) | uint32(in[21])<<8 | uint32(in[22])<<16 | uint32(in[23])<<24 - j6 := uint32(in[24]) | uint32(in[25])<<8 | uint32(in[26])<<16 | uint32(in[27])<<24 - j7 := uint32(in[28]) | uint32(in[29])<<8 | uint32(in[30])<<16 | uint32(in[31])<<24 - j8 := uint32(in[32]) | uint32(in[33])<<8 | uint32(in[34])<<16 | uint32(in[35])<<24 - j9 := uint32(in[36]) | uint32(in[37])<<8 | uint32(in[38])<<16 | uint32(in[39])<<24 - j10 := uint32(in[40]) | uint32(in[41])<<8 | uint32(in[42])<<16 | uint32(in[43])<<24 - j11 := uint32(in[44]) | uint32(in[45])<<8 | uint32(in[46])<<16 | uint32(in[47])<<24 - j12 := uint32(in[48]) | uint32(in[49])<<8 | uint32(in[50])<<16 | uint32(in[51])<<24 - j13 := uint32(in[52]) | uint32(in[53])<<8 | uint32(in[54])<<16 | uint32(in[55])<<24 - j14 := uint32(in[56]) | uint32(in[57])<<8 | uint32(in[58])<<16 | uint32(in[59])<<24 - j15 := uint32(in[60]) | uint32(in[61])<<8 | uint32(in[62])<<16 | uint32(in[63])<<24 - - x0, x1, x2, x3, x4, x5, x6, x7, x8 := j0, j1, j2, j3, j4, j5, j6, j7, j8 - x9, x10, x11, x12, x13, x14, x15 := j9, j10, j11, j12, j13, j14, j15 - - for i := 0; i < 8; i += 2 { - u := x0 + x12 - x4 ^= u<<7 | u>>(32-7) - u = x4 + x0 - x8 ^= u<<9 | u>>(32-9) - u = x8 + x4 - x12 ^= u<<13 | u>>(32-13) - u = x12 + x8 - x0 ^= u<<18 | u>>(32-18) - - u = x5 + x1 - x9 ^= u<<7 | u>>(32-7) - u = x9 + x5 - x13 ^= u<<9 | u>>(32-9) - u = x13 + x9 - x1 ^= u<<13 | u>>(32-13) - u = x1 + x13 - x5 ^= u<<18 | u>>(32-18) - - u = x10 + x6 - x14 ^= u<<7 | u>>(32-7) - u = x14 + x10 - x2 ^= u<<9 | u>>(32-9) - u = x2 + x14 - x6 ^= u<<13 | u>>(32-13) - u = x6 + x2 - x10 ^= u<<18 | u>>(32-18) - - u = x15 + x11 - x3 ^= u<<7 | u>>(32-7) - u = x3 + x15 - x7 ^= u<<9 | u>>(32-9) - u = x7 + x3 - x11 ^= u<<13 | u>>(32-13) - u = x11 + x7 - x15 ^= u<<18 | u>>(32-18) - - u = x0 + x3 - x1 ^= u<<7 | u>>(32-7) - u = x1 + x0 - x2 ^= u<<9 | u>>(32-9) - u = x2 + x1 - x3 ^= u<<13 | u>>(32-13) - u = x3 + x2 - x0 ^= u<<18 | u>>(32-18) - - u = x5 + x4 - x6 ^= u<<7 | u>>(32-7) - u = x6 + x5 - x7 ^= u<<9 | u>>(32-9) - u = x7 + x6 - x4 ^= u<<13 | u>>(32-13) - u = x4 + x7 - x5 ^= u<<18 | u>>(32-18) - - u = x10 + x9 - x11 ^= u<<7 | u>>(32-7) - u = x11 + x10 - x8 ^= u<<9 | u>>(32-9) - u = x8 + x11 - x9 ^= u<<13 | u>>(32-13) - u = x9 + x8 - x10 ^= u<<18 | u>>(32-18) - - u = x15 + x14 - x12 ^= u<<7 | u>>(32-7) - u = x12 + x15 - x13 ^= u<<9 | u>>(32-9) - u = x13 + x12 - x14 ^= u<<13 | u>>(32-13) - u = x14 + x13 - x15 ^= u<<18 | u>>(32-18) - } - x0 += j0 - x1 += j1 - x2 += j2 - x3 += j3 - x4 += j4 - x5 += j5 - x6 += j6 - x7 += j7 - x8 += j8 - x9 += j9 - x10 += j10 - x11 += j11 - x12 += j12 - x13 += j13 - x14 += j14 - x15 += j15 - - out[0] = byte(x0) - out[1] = byte(x0 >> 8) - out[2] = byte(x0 >> 16) - out[3] = byte(x0 >> 24) - - out[4] = byte(x1) - out[5] = byte(x1 >> 8) - out[6] = byte(x1 >> 16) - out[7] = byte(x1 >> 24) - - out[8] = byte(x2) - out[9] = byte(x2 >> 8) - out[10] = byte(x2 >> 16) - out[11] = byte(x2 >> 24) - - out[12] = byte(x3) - out[13] = byte(x3 >> 8) - out[14] = byte(x3 >> 16) - out[15] = byte(x3 >> 24) - - out[16] = byte(x4) - out[17] = byte(x4 >> 8) - out[18] = byte(x4 >> 16) - out[19] = byte(x4 >> 24) - - out[20] = byte(x5) - out[21] = byte(x5 >> 8) - out[22] = byte(x5 >> 16) - out[23] = byte(x5 >> 24) - - out[24] = byte(x6) - out[25] = byte(x6 >> 8) - out[26] = byte(x6 >> 16) - out[27] = byte(x6 >> 24) - - out[28] = byte(x7) - out[29] = byte(x7 >> 8) - out[30] = byte(x7 >> 16) - out[31] = byte(x7 >> 24) - - out[32] = byte(x8) - out[33] = byte(x8 >> 8) - out[34] = byte(x8 >> 16) - out[35] = byte(x8 >> 24) - - out[36] = byte(x9) - out[37] = byte(x9 >> 8) - out[38] = byte(x9 >> 16) - out[39] = byte(x9 >> 24) - - out[40] = byte(x10) - out[41] = byte(x10 >> 8) - out[42] = byte(x10 >> 16) - out[43] = byte(x10 >> 24) - - out[44] = byte(x11) - out[45] = byte(x11 >> 8) - out[46] = byte(x11 >> 16) - out[47] = byte(x11 >> 24) - - out[48] = byte(x12) - out[49] = byte(x12 >> 8) - out[50] = byte(x12 >> 16) - out[51] = byte(x12 >> 24) - - out[52] = byte(x13) - out[53] = byte(x13 >> 8) - out[54] = byte(x13 >> 16) - out[55] = byte(x13 >> 24) - - out[56] = byte(x14) - out[57] = byte(x14 >> 8) - out[58] = byte(x14 >> 16) - out[59] = byte(x14 >> 24) - - out[60] = byte(x15) - out[61] = byte(x15 >> 8) - out[62] = byte(x15 >> 16) - out[63] = byte(x15 >> 24) -} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.go b/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.go deleted file mode 100644 index c400dfc..0000000 --- a/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.go +++ /dev/null @@ -1,24 +0,0 @@ -// 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 amd64 && !purego && gc -// +build amd64,!purego,gc - -package salsa - -//go:noescape - -// salsa2020XORKeyStream is implemented in salsa20_amd64.s. -func salsa2020XORKeyStream(out, in *byte, n uint64, nonce, key *byte) - -// XORKeyStream crypts bytes from in to out using the given key and counters. -// In and out must overlap entirely or not at all. Counter -// contains the raw salsa20 counter bytes (both nonce and block counter). -func XORKeyStream(out, in []byte, counter *[16]byte, key *[32]byte) { - if len(in) == 0 { - return - } - _ = out[len(in)-1] - salsa2020XORKeyStream(&out[0], &in[0], uint64(len(in)), &counter[0], &key[0]) -} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.s b/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.s deleted file mode 100644 index c089277..0000000 --- a/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.s +++ /dev/null @@ -1,881 +0,0 @@ -// 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 amd64 && !purego && gc -// +build amd64,!purego,gc - -// This code was translated into a form compatible with 6a from the public -// domain sources in SUPERCOP: https://bench.cr.yp.to/supercop.html - -// func salsa2020XORKeyStream(out, in *byte, n uint64, nonce, key *byte) -// This needs up to 64 bytes at 360(R12); hence the non-obvious frame size. -TEXT ·salsa2020XORKeyStream(SB),0,$456-40 // frame = 424 + 32 byte alignment - MOVQ out+0(FP),DI - MOVQ in+8(FP),SI - MOVQ n+16(FP),DX - MOVQ nonce+24(FP),CX - MOVQ key+32(FP),R8 - - MOVQ SP,R12 - ADDQ $31, R12 - ANDQ $~31, R12 - - MOVQ DX,R9 - MOVQ CX,DX - MOVQ R8,R10 - CMPQ R9,$0 - JBE DONE - START: - MOVL 20(R10),CX - MOVL 0(R10),R8 - MOVL 0(DX),AX - MOVL 16(R10),R11 - MOVL CX,0(R12) - MOVL R8, 4 (R12) - MOVL AX, 8 (R12) - MOVL R11, 12 (R12) - MOVL 8(DX),CX - MOVL 24(R10),R8 - MOVL 4(R10),AX - MOVL 4(DX),R11 - MOVL CX,16(R12) - MOVL R8, 20 (R12) - MOVL AX, 24 (R12) - MOVL R11, 28 (R12) - MOVL 12(DX),CX - MOVL 12(R10),DX - MOVL 28(R10),R8 - MOVL 8(R10),AX - MOVL DX,32(R12) - MOVL CX, 36 (R12) - MOVL R8, 40 (R12) - MOVL AX, 44 (R12) - MOVQ $1634760805,DX - MOVQ $857760878,CX - MOVQ $2036477234,R8 - MOVQ $1797285236,AX - MOVL DX,48(R12) - MOVL CX, 52 (R12) - MOVL R8, 56 (R12) - MOVL AX, 60 (R12) - CMPQ R9,$256 - JB BYTESBETWEEN1AND255 - MOVOA 48(R12),X0 - PSHUFL $0X55,X0,X1 - PSHUFL $0XAA,X0,X2 - PSHUFL $0XFF,X0,X3 - PSHUFL $0X00,X0,X0 - MOVOA X1,64(R12) - MOVOA X2,80(R12) - MOVOA X3,96(R12) - MOVOA X0,112(R12) - MOVOA 0(R12),X0 - PSHUFL $0XAA,X0,X1 - PSHUFL $0XFF,X0,X2 - PSHUFL $0X00,X0,X3 - PSHUFL $0X55,X0,X0 - MOVOA X1,128(R12) - MOVOA X2,144(R12) - MOVOA X3,160(R12) - MOVOA X0,176(R12) - MOVOA 16(R12),X0 - PSHUFL $0XFF,X0,X1 - PSHUFL $0X55,X0,X2 - PSHUFL $0XAA,X0,X0 - MOVOA X1,192(R12) - MOVOA X2,208(R12) - MOVOA X0,224(R12) - MOVOA 32(R12),X0 - PSHUFL $0X00,X0,X1 - PSHUFL $0XAA,X0,X2 - PSHUFL $0XFF,X0,X0 - MOVOA X1,240(R12) - MOVOA X2,256(R12) - MOVOA X0,272(R12) - BYTESATLEAST256: - MOVL 16(R12),DX - MOVL 36 (R12),CX - MOVL DX,288(R12) - MOVL CX,304(R12) - SHLQ $32,CX - ADDQ CX,DX - ADDQ $1,DX - MOVQ DX,CX - SHRQ $32,CX - MOVL DX, 292 (R12) - MOVL CX, 308 (R12) - ADDQ $1,DX - MOVQ DX,CX - SHRQ $32,CX - MOVL DX, 296 (R12) - MOVL CX, 312 (R12) - ADDQ $1,DX - MOVQ DX,CX - SHRQ $32,CX - MOVL DX, 300 (R12) - MOVL CX, 316 (R12) - ADDQ $1,DX - MOVQ DX,CX - SHRQ $32,CX - MOVL DX,16(R12) - MOVL CX, 36 (R12) - MOVQ R9,352(R12) - MOVQ $20,DX - MOVOA 64(R12),X0 - MOVOA 80(R12),X1 - MOVOA 96(R12),X2 - MOVOA 256(R12),X3 - MOVOA 272(R12),X4 - MOVOA 128(R12),X5 - MOVOA 144(R12),X6 - MOVOA 176(R12),X7 - MOVOA 192(R12),X8 - MOVOA 208(R12),X9 - MOVOA 224(R12),X10 - MOVOA 304(R12),X11 - MOVOA 112(R12),X12 - MOVOA 160(R12),X13 - MOVOA 240(R12),X14 - MOVOA 288(R12),X15 - MAINLOOP1: - MOVOA X1,320(R12) - MOVOA X2,336(R12) - MOVOA X13,X1 - PADDL X12,X1 - MOVOA X1,X2 - PSLLL $7,X1 - PXOR X1,X14 - PSRLL $25,X2 - PXOR X2,X14 - MOVOA X7,X1 - PADDL X0,X1 - MOVOA X1,X2 - PSLLL $7,X1 - PXOR X1,X11 - PSRLL $25,X2 - PXOR X2,X11 - MOVOA X12,X1 - PADDL X14,X1 - MOVOA X1,X2 - PSLLL $9,X1 - PXOR X1,X15 - PSRLL $23,X2 - PXOR X2,X15 - MOVOA X0,X1 - PADDL X11,X1 - MOVOA X1,X2 - PSLLL $9,X1 - PXOR X1,X9 - PSRLL $23,X2 - PXOR X2,X9 - MOVOA X14,X1 - PADDL X15,X1 - MOVOA X1,X2 - PSLLL $13,X1 - PXOR X1,X13 - PSRLL $19,X2 - PXOR X2,X13 - MOVOA X11,X1 - PADDL X9,X1 - MOVOA X1,X2 - PSLLL $13,X1 - PXOR X1,X7 - PSRLL $19,X2 - PXOR X2,X7 - MOVOA X15,X1 - PADDL X13,X1 - MOVOA X1,X2 - PSLLL $18,X1 - PXOR X1,X12 - PSRLL $14,X2 - PXOR X2,X12 - MOVOA 320(R12),X1 - MOVOA X12,320(R12) - MOVOA X9,X2 - PADDL X7,X2 - MOVOA X2,X12 - PSLLL $18,X2 - PXOR X2,X0 - PSRLL $14,X12 - PXOR X12,X0 - MOVOA X5,X2 - PADDL X1,X2 - MOVOA X2,X12 - PSLLL $7,X2 - PXOR X2,X3 - PSRLL $25,X12 - PXOR X12,X3 - MOVOA 336(R12),X2 - MOVOA X0,336(R12) - MOVOA X6,X0 - PADDL X2,X0 - MOVOA X0,X12 - PSLLL $7,X0 - PXOR X0,X4 - PSRLL $25,X12 - PXOR X12,X4 - MOVOA X1,X0 - PADDL X3,X0 - MOVOA X0,X12 - PSLLL $9,X0 - PXOR X0,X10 - PSRLL $23,X12 - PXOR X12,X10 - MOVOA X2,X0 - PADDL X4,X0 - MOVOA X0,X12 - PSLLL $9,X0 - PXOR X0,X8 - PSRLL $23,X12 - PXOR X12,X8 - MOVOA X3,X0 - PADDL X10,X0 - MOVOA X0,X12 - PSLLL $13,X0 - PXOR X0,X5 - PSRLL $19,X12 - PXOR X12,X5 - MOVOA X4,X0 - PADDL X8,X0 - MOVOA X0,X12 - PSLLL $13,X0 - PXOR X0,X6 - PSRLL $19,X12 - PXOR X12,X6 - MOVOA X10,X0 - PADDL X5,X0 - MOVOA X0,X12 - PSLLL $18,X0 - PXOR X0,X1 - PSRLL $14,X12 - PXOR X12,X1 - MOVOA 320(R12),X0 - MOVOA X1,320(R12) - MOVOA X4,X1 - PADDL X0,X1 - MOVOA X1,X12 - PSLLL $7,X1 - PXOR X1,X7 - PSRLL $25,X12 - PXOR X12,X7 - MOVOA X8,X1 - PADDL X6,X1 - MOVOA X1,X12 - PSLLL $18,X1 - PXOR X1,X2 - PSRLL $14,X12 - PXOR X12,X2 - MOVOA 336(R12),X12 - MOVOA X2,336(R12) - MOVOA X14,X1 - PADDL X12,X1 - MOVOA X1,X2 - PSLLL $7,X1 - PXOR X1,X5 - PSRLL $25,X2 - PXOR X2,X5 - MOVOA X0,X1 - PADDL X7,X1 - MOVOA X1,X2 - PSLLL $9,X1 - PXOR X1,X10 - PSRLL $23,X2 - PXOR X2,X10 - MOVOA X12,X1 - PADDL X5,X1 - MOVOA X1,X2 - PSLLL $9,X1 - PXOR X1,X8 - PSRLL $23,X2 - PXOR X2,X8 - MOVOA X7,X1 - PADDL X10,X1 - MOVOA X1,X2 - PSLLL $13,X1 - PXOR X1,X4 - PSRLL $19,X2 - PXOR X2,X4 - MOVOA X5,X1 - PADDL X8,X1 - MOVOA X1,X2 - PSLLL $13,X1 - PXOR X1,X14 - PSRLL $19,X2 - PXOR X2,X14 - MOVOA X10,X1 - PADDL X4,X1 - MOVOA X1,X2 - PSLLL $18,X1 - PXOR X1,X0 - PSRLL $14,X2 - PXOR X2,X0 - MOVOA 320(R12),X1 - MOVOA X0,320(R12) - MOVOA X8,X0 - PADDL X14,X0 - MOVOA X0,X2 - PSLLL $18,X0 - PXOR X0,X12 - PSRLL $14,X2 - PXOR X2,X12 - MOVOA X11,X0 - PADDL X1,X0 - MOVOA X0,X2 - PSLLL $7,X0 - PXOR X0,X6 - PSRLL $25,X2 - PXOR X2,X6 - MOVOA 336(R12),X2 - MOVOA X12,336(R12) - MOVOA X3,X0 - PADDL X2,X0 - MOVOA X0,X12 - PSLLL $7,X0 - PXOR X0,X13 - PSRLL $25,X12 - PXOR X12,X13 - MOVOA X1,X0 - PADDL X6,X0 - MOVOA X0,X12 - PSLLL $9,X0 - PXOR X0,X15 - PSRLL $23,X12 - PXOR X12,X15 - MOVOA X2,X0 - PADDL X13,X0 - MOVOA X0,X12 - PSLLL $9,X0 - PXOR X0,X9 - PSRLL $23,X12 - PXOR X12,X9 - MOVOA X6,X0 - PADDL X15,X0 - MOVOA X0,X12 - PSLLL $13,X0 - PXOR X0,X11 - PSRLL $19,X12 - PXOR X12,X11 - MOVOA X13,X0 - PADDL X9,X0 - MOVOA X0,X12 - PSLLL $13,X0 - PXOR X0,X3 - PSRLL $19,X12 - PXOR X12,X3 - MOVOA X15,X0 - PADDL X11,X0 - MOVOA X0,X12 - PSLLL $18,X0 - PXOR X0,X1 - PSRLL $14,X12 - PXOR X12,X1 - MOVOA X9,X0 - PADDL X3,X0 - MOVOA X0,X12 - PSLLL $18,X0 - PXOR X0,X2 - PSRLL $14,X12 - PXOR X12,X2 - MOVOA 320(R12),X12 - MOVOA 336(R12),X0 - SUBQ $2,DX - JA MAINLOOP1 - PADDL 112(R12),X12 - PADDL 176(R12),X7 - PADDL 224(R12),X10 - PADDL 272(R12),X4 - MOVD X12,DX - MOVD X7,CX - MOVD X10,R8 - MOVD X4,R9 - PSHUFL $0X39,X12,X12 - PSHUFL $0X39,X7,X7 - PSHUFL $0X39,X10,X10 - PSHUFL $0X39,X4,X4 - XORL 0(SI),DX - XORL 4(SI),CX - XORL 8(SI),R8 - XORL 12(SI),R9 - MOVL DX,0(DI) - MOVL CX,4(DI) - MOVL R8,8(DI) - MOVL R9,12(DI) - MOVD X12,DX - MOVD X7,CX - MOVD X10,R8 - MOVD X4,R9 - PSHUFL $0X39,X12,X12 - PSHUFL $0X39,X7,X7 - PSHUFL $0X39,X10,X10 - PSHUFL $0X39,X4,X4 - XORL 64(SI),DX - XORL 68(SI),CX - XORL 72(SI),R8 - XORL 76(SI),R9 - MOVL DX,64(DI) - MOVL CX,68(DI) - MOVL R8,72(DI) - MOVL R9,76(DI) - MOVD X12,DX - MOVD X7,CX - MOVD X10,R8 - MOVD X4,R9 - PSHUFL $0X39,X12,X12 - PSHUFL $0X39,X7,X7 - PSHUFL $0X39,X10,X10 - PSHUFL $0X39,X4,X4 - XORL 128(SI),DX - XORL 132(SI),CX - XORL 136(SI),R8 - XORL 140(SI),R9 - MOVL DX,128(DI) - MOVL CX,132(DI) - MOVL R8,136(DI) - MOVL R9,140(DI) - MOVD X12,DX - MOVD X7,CX - MOVD X10,R8 - MOVD X4,R9 - XORL 192(SI),DX - XORL 196(SI),CX - XORL 200(SI),R8 - XORL 204(SI),R9 - MOVL DX,192(DI) - MOVL CX,196(DI) - MOVL R8,200(DI) - MOVL R9,204(DI) - PADDL 240(R12),X14 - PADDL 64(R12),X0 - PADDL 128(R12),X5 - PADDL 192(R12),X8 - MOVD X14,DX - MOVD X0,CX - MOVD X5,R8 - MOVD X8,R9 - PSHUFL $0X39,X14,X14 - PSHUFL $0X39,X0,X0 - PSHUFL $0X39,X5,X5 - PSHUFL $0X39,X8,X8 - XORL 16(SI),DX - XORL 20(SI),CX - XORL 24(SI),R8 - XORL 28(SI),R9 - MOVL DX,16(DI) - MOVL CX,20(DI) - MOVL R8,24(DI) - MOVL R9,28(DI) - MOVD X14,DX - MOVD X0,CX - MOVD X5,R8 - MOVD X8,R9 - PSHUFL $0X39,X14,X14 - PSHUFL $0X39,X0,X0 - PSHUFL $0X39,X5,X5 - PSHUFL $0X39,X8,X8 - XORL 80(SI),DX - XORL 84(SI),CX - XORL 88(SI),R8 - XORL 92(SI),R9 - MOVL DX,80(DI) - MOVL CX,84(DI) - MOVL R8,88(DI) - MOVL R9,92(DI) - MOVD X14,DX - MOVD X0,CX - MOVD X5,R8 - MOVD X8,R9 - PSHUFL $0X39,X14,X14 - PSHUFL $0X39,X0,X0 - PSHUFL $0X39,X5,X5 - PSHUFL $0X39,X8,X8 - XORL 144(SI),DX - XORL 148(SI),CX - XORL 152(SI),R8 - XORL 156(SI),R9 - MOVL DX,144(DI) - MOVL CX,148(DI) - MOVL R8,152(DI) - MOVL R9,156(DI) - MOVD X14,DX - MOVD X0,CX - MOVD X5,R8 - MOVD X8,R9 - XORL 208(SI),DX - XORL 212(SI),CX - XORL 216(SI),R8 - XORL 220(SI),R9 - MOVL DX,208(DI) - MOVL CX,212(DI) - MOVL R8,216(DI) - MOVL R9,220(DI) - PADDL 288(R12),X15 - PADDL 304(R12),X11 - PADDL 80(R12),X1 - PADDL 144(R12),X6 - MOVD X15,DX - MOVD X11,CX - MOVD X1,R8 - MOVD X6,R9 - PSHUFL $0X39,X15,X15 - PSHUFL $0X39,X11,X11 - PSHUFL $0X39,X1,X1 - PSHUFL $0X39,X6,X6 - XORL 32(SI),DX - XORL 36(SI),CX - XORL 40(SI),R8 - XORL 44(SI),R9 - MOVL DX,32(DI) - MOVL CX,36(DI) - MOVL R8,40(DI) - MOVL R9,44(DI) - MOVD X15,DX - MOVD X11,CX - MOVD X1,R8 - MOVD X6,R9 - PSHUFL $0X39,X15,X15 - PSHUFL $0X39,X11,X11 - PSHUFL $0X39,X1,X1 - PSHUFL $0X39,X6,X6 - XORL 96(SI),DX - XORL 100(SI),CX - XORL 104(SI),R8 - XORL 108(SI),R9 - MOVL DX,96(DI) - MOVL CX,100(DI) - MOVL R8,104(DI) - MOVL R9,108(DI) - MOVD X15,DX - MOVD X11,CX - MOVD X1,R8 - MOVD X6,R9 - PSHUFL $0X39,X15,X15 - PSHUFL $0X39,X11,X11 - PSHUFL $0X39,X1,X1 - PSHUFL $0X39,X6,X6 - XORL 160(SI),DX - XORL 164(SI),CX - XORL 168(SI),R8 - XORL 172(SI),R9 - MOVL DX,160(DI) - MOVL CX,164(DI) - MOVL R8,168(DI) - MOVL R9,172(DI) - MOVD X15,DX - MOVD X11,CX - MOVD X1,R8 - MOVD X6,R9 - XORL 224(SI),DX - XORL 228(SI),CX - XORL 232(SI),R8 - XORL 236(SI),R9 - MOVL DX,224(DI) - MOVL CX,228(DI) - MOVL R8,232(DI) - MOVL R9,236(DI) - PADDL 160(R12),X13 - PADDL 208(R12),X9 - PADDL 256(R12),X3 - PADDL 96(R12),X2 - MOVD X13,DX - MOVD X9,CX - MOVD X3,R8 - MOVD X2,R9 - PSHUFL $0X39,X13,X13 - PSHUFL $0X39,X9,X9 - PSHUFL $0X39,X3,X3 - PSHUFL $0X39,X2,X2 - XORL 48(SI),DX - XORL 52(SI),CX - XORL 56(SI),R8 - XORL 60(SI),R9 - MOVL DX,48(DI) - MOVL CX,52(DI) - MOVL R8,56(DI) - MOVL R9,60(DI) - MOVD X13,DX - MOVD X9,CX - MOVD X3,R8 - MOVD X2,R9 - PSHUFL $0X39,X13,X13 - PSHUFL $0X39,X9,X9 - PSHUFL $0X39,X3,X3 - PSHUFL $0X39,X2,X2 - XORL 112(SI),DX - XORL 116(SI),CX - XORL 120(SI),R8 - XORL 124(SI),R9 - MOVL DX,112(DI) - MOVL CX,116(DI) - MOVL R8,120(DI) - MOVL R9,124(DI) - MOVD X13,DX - MOVD X9,CX - MOVD X3,R8 - MOVD X2,R9 - PSHUFL $0X39,X13,X13 - PSHUFL $0X39,X9,X9 - PSHUFL $0X39,X3,X3 - PSHUFL $0X39,X2,X2 - XORL 176(SI),DX - XORL 180(SI),CX - XORL 184(SI),R8 - XORL 188(SI),R9 - MOVL DX,176(DI) - MOVL CX,180(DI) - MOVL R8,184(DI) - MOVL R9,188(DI) - MOVD X13,DX - MOVD X9,CX - MOVD X3,R8 - MOVD X2,R9 - XORL 240(SI),DX - XORL 244(SI),CX - XORL 248(SI),R8 - XORL 252(SI),R9 - MOVL DX,240(DI) - MOVL CX,244(DI) - MOVL R8,248(DI) - MOVL R9,252(DI) - MOVQ 352(R12),R9 - SUBQ $256,R9 - ADDQ $256,SI - ADDQ $256,DI - CMPQ R9,$256 - JAE BYTESATLEAST256 - CMPQ R9,$0 - JBE DONE - BYTESBETWEEN1AND255: - CMPQ R9,$64 - JAE NOCOPY - MOVQ DI,DX - LEAQ 360(R12),DI - MOVQ R9,CX - REP; MOVSB - LEAQ 360(R12),DI - LEAQ 360(R12),SI - NOCOPY: - MOVQ R9,352(R12) - MOVOA 48(R12),X0 - MOVOA 0(R12),X1 - MOVOA 16(R12),X2 - MOVOA 32(R12),X3 - MOVOA X1,X4 - MOVQ $20,CX - MAINLOOP2: - PADDL X0,X4 - MOVOA X0,X5 - MOVOA X4,X6 - PSLLL $7,X4 - PSRLL $25,X6 - PXOR X4,X3 - PXOR X6,X3 - PADDL X3,X5 - MOVOA X3,X4 - MOVOA X5,X6 - PSLLL $9,X5 - PSRLL $23,X6 - PXOR X5,X2 - PSHUFL $0X93,X3,X3 - PXOR X6,X2 - PADDL X2,X4 - MOVOA X2,X5 - MOVOA X4,X6 - PSLLL $13,X4 - PSRLL $19,X6 - PXOR X4,X1 - PSHUFL $0X4E,X2,X2 - PXOR X6,X1 - PADDL X1,X5 - MOVOA X3,X4 - MOVOA X5,X6 - PSLLL $18,X5 - PSRLL $14,X6 - PXOR X5,X0 - PSHUFL $0X39,X1,X1 - PXOR X6,X0 - PADDL X0,X4 - MOVOA X0,X5 - MOVOA X4,X6 - PSLLL $7,X4 - PSRLL $25,X6 - PXOR X4,X1 - PXOR X6,X1 - PADDL X1,X5 - MOVOA X1,X4 - MOVOA X5,X6 - PSLLL $9,X5 - PSRLL $23,X6 - PXOR X5,X2 - PSHUFL $0X93,X1,X1 - PXOR X6,X2 - PADDL X2,X4 - MOVOA X2,X5 - MOVOA X4,X6 - PSLLL $13,X4 - PSRLL $19,X6 - PXOR X4,X3 - PSHUFL $0X4E,X2,X2 - PXOR X6,X3 - PADDL X3,X5 - MOVOA X1,X4 - MOVOA X5,X6 - PSLLL $18,X5 - PSRLL $14,X6 - PXOR X5,X0 - PSHUFL $0X39,X3,X3 - PXOR X6,X0 - PADDL X0,X4 - MOVOA X0,X5 - MOVOA X4,X6 - PSLLL $7,X4 - PSRLL $25,X6 - PXOR X4,X3 - PXOR X6,X3 - PADDL X3,X5 - MOVOA X3,X4 - MOVOA X5,X6 - PSLLL $9,X5 - PSRLL $23,X6 - PXOR X5,X2 - PSHUFL $0X93,X3,X3 - PXOR X6,X2 - PADDL X2,X4 - MOVOA X2,X5 - MOVOA X4,X6 - PSLLL $13,X4 - PSRLL $19,X6 - PXOR X4,X1 - PSHUFL $0X4E,X2,X2 - PXOR X6,X1 - PADDL X1,X5 - MOVOA X3,X4 - MOVOA X5,X6 - PSLLL $18,X5 - PSRLL $14,X6 - PXOR X5,X0 - PSHUFL $0X39,X1,X1 - PXOR X6,X0 - PADDL X0,X4 - MOVOA X0,X5 - MOVOA X4,X6 - PSLLL $7,X4 - PSRLL $25,X6 - PXOR X4,X1 - PXOR X6,X1 - PADDL X1,X5 - MOVOA X1,X4 - MOVOA X5,X6 - PSLLL $9,X5 - PSRLL $23,X6 - PXOR X5,X2 - PSHUFL $0X93,X1,X1 - PXOR X6,X2 - PADDL X2,X4 - MOVOA X2,X5 - MOVOA X4,X6 - PSLLL $13,X4 - PSRLL $19,X6 - PXOR X4,X3 - PSHUFL $0X4E,X2,X2 - PXOR X6,X3 - SUBQ $4,CX - PADDL X3,X5 - MOVOA X1,X4 - MOVOA X5,X6 - PSLLL $18,X5 - PXOR X7,X7 - PSRLL $14,X6 - PXOR X5,X0 - PSHUFL $0X39,X3,X3 - PXOR X6,X0 - JA MAINLOOP2 - PADDL 48(R12),X0 - PADDL 0(R12),X1 - PADDL 16(R12),X2 - PADDL 32(R12),X3 - MOVD X0,CX - MOVD X1,R8 - MOVD X2,R9 - MOVD X3,AX - PSHUFL $0X39,X0,X0 - PSHUFL $0X39,X1,X1 - PSHUFL $0X39,X2,X2 - PSHUFL $0X39,X3,X3 - XORL 0(SI),CX - XORL 48(SI),R8 - XORL 32(SI),R9 - XORL 16(SI),AX - MOVL CX,0(DI) - MOVL R8,48(DI) - MOVL R9,32(DI) - MOVL AX,16(DI) - MOVD X0,CX - MOVD X1,R8 - MOVD X2,R9 - MOVD X3,AX - PSHUFL $0X39,X0,X0 - PSHUFL $0X39,X1,X1 - PSHUFL $0X39,X2,X2 - PSHUFL $0X39,X3,X3 - XORL 20(SI),CX - XORL 4(SI),R8 - XORL 52(SI),R9 - XORL 36(SI),AX - MOVL CX,20(DI) - MOVL R8,4(DI) - MOVL R9,52(DI) - MOVL AX,36(DI) - MOVD X0,CX - MOVD X1,R8 - MOVD X2,R9 - MOVD X3,AX - PSHUFL $0X39,X0,X0 - PSHUFL $0X39,X1,X1 - PSHUFL $0X39,X2,X2 - PSHUFL $0X39,X3,X3 - XORL 40(SI),CX - XORL 24(SI),R8 - XORL 8(SI),R9 - XORL 56(SI),AX - MOVL CX,40(DI) - MOVL R8,24(DI) - MOVL R9,8(DI) - MOVL AX,56(DI) - MOVD X0,CX - MOVD X1,R8 - MOVD X2,R9 - MOVD X3,AX - XORL 60(SI),CX - XORL 44(SI),R8 - XORL 28(SI),R9 - XORL 12(SI),AX - MOVL CX,60(DI) - MOVL R8,44(DI) - MOVL R9,28(DI) - MOVL AX,12(DI) - MOVQ 352(R12),R9 - MOVL 16(R12),CX - MOVL 36 (R12),R8 - ADDQ $1,CX - SHLQ $32,R8 - ADDQ R8,CX - MOVQ CX,R8 - SHRQ $32,R8 - MOVL CX,16(R12) - MOVL R8, 36 (R12) - CMPQ R9,$64 - JA BYTESATLEAST65 - JAE BYTESATLEAST64 - MOVQ DI,SI - MOVQ DX,DI - MOVQ R9,CX - REP; MOVSB - BYTESATLEAST64: - DONE: - RET - BYTESATLEAST65: - SUBQ $64,R9 - ADDQ $64,DI - ADDQ $64,SI - JMP BYTESBETWEEN1AND255 diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_noasm.go b/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_noasm.go deleted file mode 100644 index 4392cc1..0000000 --- a/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_noasm.go +++ /dev/null @@ -1,15 +0,0 @@ -// 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 !amd64 || purego || !gc -// +build !amd64 purego !gc - -package salsa - -// XORKeyStream crypts bytes from in to out using the given key and counters. -// In and out must overlap entirely or not at all. Counter -// contains the raw salsa20 counter bytes (both nonce and block counter). -func XORKeyStream(out, in []byte, counter *[16]byte, key *[32]byte) { - genericXORKeyStream(out, in, counter, key) -} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_ref.go b/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_ref.go deleted file mode 100644 index 68169c6..0000000 --- a/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_ref.go +++ /dev/null @@ -1,231 +0,0 @@ -// 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 salsa - -const rounds = 20 - -// core applies the Salsa20 core function to 16-byte input in, 32-byte key k, -// and 16-byte constant c, and puts the result into 64-byte array out. -func core(out *[64]byte, in *[16]byte, k *[32]byte, c *[16]byte) { - j0 := uint32(c[0]) | uint32(c[1])<<8 | uint32(c[2])<<16 | uint32(c[3])<<24 - j1 := uint32(k[0]) | uint32(k[1])<<8 | uint32(k[2])<<16 | uint32(k[3])<<24 - j2 := uint32(k[4]) | uint32(k[5])<<8 | uint32(k[6])<<16 | uint32(k[7])<<24 - j3 := uint32(k[8]) | uint32(k[9])<<8 | uint32(k[10])<<16 | uint32(k[11])<<24 - j4 := uint32(k[12]) | uint32(k[13])<<8 | uint32(k[14])<<16 | uint32(k[15])<<24 - j5 := uint32(c[4]) | uint32(c[5])<<8 | uint32(c[6])<<16 | uint32(c[7])<<24 - j6 := uint32(in[0]) | uint32(in[1])<<8 | uint32(in[2])<<16 | uint32(in[3])<<24 - j7 := uint32(in[4]) | uint32(in[5])<<8 | uint32(in[6])<<16 | uint32(in[7])<<24 - j8 := uint32(in[8]) | uint32(in[9])<<8 | uint32(in[10])<<16 | uint32(in[11])<<24 - j9 := uint32(in[12]) | uint32(in[13])<<8 | uint32(in[14])<<16 | uint32(in[15])<<24 - j10 := uint32(c[8]) | uint32(c[9])<<8 | uint32(c[10])<<16 | uint32(c[11])<<24 - j11 := uint32(k[16]) | uint32(k[17])<<8 | uint32(k[18])<<16 | uint32(k[19])<<24 - j12 := uint32(k[20]) | uint32(k[21])<<8 | uint32(k[22])<<16 | uint32(k[23])<<24 - j13 := uint32(k[24]) | uint32(k[25])<<8 | uint32(k[26])<<16 | uint32(k[27])<<24 - j14 := uint32(k[28]) | uint32(k[29])<<8 | uint32(k[30])<<16 | uint32(k[31])<<24 - j15 := uint32(c[12]) | uint32(c[13])<<8 | uint32(c[14])<<16 | uint32(c[15])<<24 - - x0, x1, x2, x3, x4, x5, x6, x7, x8 := j0, j1, j2, j3, j4, j5, j6, j7, j8 - x9, x10, x11, x12, x13, x14, x15 := j9, j10, j11, j12, j13, j14, j15 - - for i := 0; i < rounds; i += 2 { - u := x0 + x12 - x4 ^= u<<7 | u>>(32-7) - u = x4 + x0 - x8 ^= u<<9 | u>>(32-9) - u = x8 + x4 - x12 ^= u<<13 | u>>(32-13) - u = x12 + x8 - x0 ^= u<<18 | u>>(32-18) - - u = x5 + x1 - x9 ^= u<<7 | u>>(32-7) - u = x9 + x5 - x13 ^= u<<9 | u>>(32-9) - u = x13 + x9 - x1 ^= u<<13 | u>>(32-13) - u = x1 + x13 - x5 ^= u<<18 | u>>(32-18) - - u = x10 + x6 - x14 ^= u<<7 | u>>(32-7) - u = x14 + x10 - x2 ^= u<<9 | u>>(32-9) - u = x2 + x14 - x6 ^= u<<13 | u>>(32-13) - u = x6 + x2 - x10 ^= u<<18 | u>>(32-18) - - u = x15 + x11 - x3 ^= u<<7 | u>>(32-7) - u = x3 + x15 - x7 ^= u<<9 | u>>(32-9) - u = x7 + x3 - x11 ^= u<<13 | u>>(32-13) - u = x11 + x7 - x15 ^= u<<18 | u>>(32-18) - - u = x0 + x3 - x1 ^= u<<7 | u>>(32-7) - u = x1 + x0 - x2 ^= u<<9 | u>>(32-9) - u = x2 + x1 - x3 ^= u<<13 | u>>(32-13) - u = x3 + x2 - x0 ^= u<<18 | u>>(32-18) - - u = x5 + x4 - x6 ^= u<<7 | u>>(32-7) - u = x6 + x5 - x7 ^= u<<9 | u>>(32-9) - u = x7 + x6 - x4 ^= u<<13 | u>>(32-13) - u = x4 + x7 - x5 ^= u<<18 | u>>(32-18) - - u = x10 + x9 - x11 ^= u<<7 | u>>(32-7) - u = x11 + x10 - x8 ^= u<<9 | u>>(32-9) - u = x8 + x11 - x9 ^= u<<13 | u>>(32-13) - u = x9 + x8 - x10 ^= u<<18 | u>>(32-18) - - u = x15 + x14 - x12 ^= u<<7 | u>>(32-7) - u = x12 + x15 - x13 ^= u<<9 | u>>(32-9) - u = x13 + x12 - x14 ^= u<<13 | u>>(32-13) - u = x14 + x13 - x15 ^= u<<18 | u>>(32-18) - } - x0 += j0 - x1 += j1 - x2 += j2 - x3 += j3 - x4 += j4 - x5 += j5 - x6 += j6 - x7 += j7 - x8 += j8 - x9 += j9 - x10 += j10 - x11 += j11 - x12 += j12 - x13 += j13 - x14 += j14 - x15 += j15 - - out[0] = byte(x0) - out[1] = byte(x0 >> 8) - out[2] = byte(x0 >> 16) - out[3] = byte(x0 >> 24) - - out[4] = byte(x1) - out[5] = byte(x1 >> 8) - out[6] = byte(x1 >> 16) - out[7] = byte(x1 >> 24) - - out[8] = byte(x2) - out[9] = byte(x2 >> 8) - out[10] = byte(x2 >> 16) - out[11] = byte(x2 >> 24) - - out[12] = byte(x3) - out[13] = byte(x3 >> 8) - out[14] = byte(x3 >> 16) - out[15] = byte(x3 >> 24) - - out[16] = byte(x4) - out[17] = byte(x4 >> 8) - out[18] = byte(x4 >> 16) - out[19] = byte(x4 >> 24) - - out[20] = byte(x5) - out[21] = byte(x5 >> 8) - out[22] = byte(x5 >> 16) - out[23] = byte(x5 >> 24) - - out[24] = byte(x6) - out[25] = byte(x6 >> 8) - out[26] = byte(x6 >> 16) - out[27] = byte(x6 >> 24) - - out[28] = byte(x7) - out[29] = byte(x7 >> 8) - out[30] = byte(x7 >> 16) - out[31] = byte(x7 >> 24) - - out[32] = byte(x8) - out[33] = byte(x8 >> 8) - out[34] = byte(x8 >> 16) - out[35] = byte(x8 >> 24) - - out[36] = byte(x9) - out[37] = byte(x9 >> 8) - out[38] = byte(x9 >> 16) - out[39] = byte(x9 >> 24) - - out[40] = byte(x10) - out[41] = byte(x10 >> 8) - out[42] = byte(x10 >> 16) - out[43] = byte(x10 >> 24) - - out[44] = byte(x11) - out[45] = byte(x11 >> 8) - out[46] = byte(x11 >> 16) - out[47] = byte(x11 >> 24) - - out[48] = byte(x12) - out[49] = byte(x12 >> 8) - out[50] = byte(x12 >> 16) - out[51] = byte(x12 >> 24) - - out[52] = byte(x13) - out[53] = byte(x13 >> 8) - out[54] = byte(x13 >> 16) - out[55] = byte(x13 >> 24) - - out[56] = byte(x14) - out[57] = byte(x14 >> 8) - out[58] = byte(x14 >> 16) - out[59] = byte(x14 >> 24) - - out[60] = byte(x15) - out[61] = byte(x15 >> 8) - out[62] = byte(x15 >> 16) - out[63] = byte(x15 >> 24) -} - -// genericXORKeyStream is the generic implementation of XORKeyStream to be used -// when no assembly implementation is available. -func genericXORKeyStream(out, in []byte, counter *[16]byte, key *[32]byte) { - var block [64]byte - var counterCopy [16]byte - copy(counterCopy[:], counter[:]) - - for len(in) >= 64 { - core(&block, &counterCopy, key, &Sigma) - for i, x := range block { - out[i] = in[i] ^ x - } - u := uint32(1) - for i := 8; i < 16; i++ { - u += uint32(counterCopy[i]) - counterCopy[i] = byte(u) - u >>= 8 - } - in = in[64:] - out = out[64:] - } - - if len(in) > 0 { - core(&block, &counterCopy, key, &Sigma) - for i, v := range in { - out[i] = v ^ block[i] - } - } -} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa20.go b/vendor/golang.org/x/crypto/salsa20/salsa20.go deleted file mode 100644 index 8f4f896..0000000 --- a/vendor/golang.org/x/crypto/salsa20/salsa20.go +++ /dev/null @@ -1,58 +0,0 @@ -// 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 salsa20 implements the Salsa20 stream cipher as specified in https://cr.yp.to/snuffle/spec.pdf. - -Salsa20 differs from many other stream ciphers in that it is message orientated -rather than byte orientated. Keystream blocks are not preserved between calls, -therefore each side must encrypt/decrypt data with the same segmentation. - -Another aspect of this difference is that part of the counter is exposed as -a nonce in each call. Encrypting two different messages with the same (key, -nonce) pair leads to trivial plaintext recovery. This is analogous to -encrypting two different messages with the same key with a traditional stream -cipher. - -This package also implements XSalsa20: a version of Salsa20 with a 24-byte -nonce as specified in https://cr.yp.to/snuffle/xsalsa-20081128.pdf. Simply -passing a 24-byte slice as the nonce triggers XSalsa20. -*/ -package salsa20 // import "golang.org/x/crypto/salsa20" - -// TODO(agl): implement XORKeyStream12 and XORKeyStream8 - the reduced round variants of Salsa20. - -import ( - "golang.org/x/crypto/internal/alias" - "golang.org/x/crypto/salsa20/salsa" -) - -// XORKeyStream crypts bytes from in to out using the given key and nonce. -// In and out must overlap entirely or not at all. Nonce must -// be either 8 or 24 bytes long. -func XORKeyStream(out, in []byte, nonce []byte, key *[32]byte) { - if len(out) < len(in) { - panic("salsa20: output smaller than input") - } - if alias.InexactOverlap(out[:len(in)], in) { - panic("salsa20: invalid buffer overlap") - } - - var subNonce [16]byte - - if len(nonce) == 24 { - var subKey [32]byte - var hNonce [16]byte - copy(hNonce[:], nonce[:16]) - salsa.HSalsa20(&subKey, &hNonce, key, &salsa.Sigma) - copy(subNonce[:], nonce[16:]) - key = &subKey - } else if len(nonce) == 8 { - copy(subNonce[:], nonce[:]) - } else { - panic("salsa20: nonce must be 8 or 24 bytes") - } - - salsa.XORKeyStream(out, in, &subNonce, key) -} diff --git a/vendor/golang.org/x/crypto/scrypt/scrypt.go b/vendor/golang.org/x/crypto/scrypt/scrypt.go deleted file mode 100644 index c971a99..0000000 --- a/vendor/golang.org/x/crypto/scrypt/scrypt.go +++ /dev/null @@ -1,212 +0,0 @@ -// 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 scrypt implements the scrypt key derivation function as defined in -// Colin Percival's paper "Stronger Key Derivation via Sequential Memory-Hard -// Functions" (https://www.tarsnap.com/scrypt/scrypt.pdf). -package scrypt // import "golang.org/x/crypto/scrypt" - -import ( - "crypto/sha256" - "encoding/binary" - "errors" - "math/bits" - - "golang.org/x/crypto/pbkdf2" -) - -const maxInt = int(^uint(0) >> 1) - -// blockCopy copies n numbers from src into dst. -func blockCopy(dst, src []uint32, n int) { - copy(dst, src[:n]) -} - -// blockXOR XORs numbers from dst with n numbers from src. -func blockXOR(dst, src []uint32, n int) { - for i, v := range src[:n] { - dst[i] ^= v - } -} - -// salsaXOR applies Salsa20/8 to the XOR of 16 numbers from tmp and in, -// and puts the result into both tmp and out. -func salsaXOR(tmp *[16]uint32, in, out []uint32) { - w0 := tmp[0] ^ in[0] - w1 := tmp[1] ^ in[1] - w2 := tmp[2] ^ in[2] - w3 := tmp[3] ^ in[3] - w4 := tmp[4] ^ in[4] - w5 := tmp[5] ^ in[5] - w6 := tmp[6] ^ in[6] - w7 := tmp[7] ^ in[7] - w8 := tmp[8] ^ in[8] - w9 := tmp[9] ^ in[9] - w10 := tmp[10] ^ in[10] - w11 := tmp[11] ^ in[11] - w12 := tmp[12] ^ in[12] - w13 := tmp[13] ^ in[13] - w14 := tmp[14] ^ in[14] - w15 := tmp[15] ^ in[15] - - x0, x1, x2, x3, x4, x5, x6, x7, x8 := w0, w1, w2, w3, w4, w5, w6, w7, w8 - x9, x10, x11, x12, x13, x14, x15 := w9, w10, w11, w12, w13, w14, w15 - - for i := 0; i < 8; i += 2 { - x4 ^= bits.RotateLeft32(x0+x12, 7) - x8 ^= bits.RotateLeft32(x4+x0, 9) - x12 ^= bits.RotateLeft32(x8+x4, 13) - x0 ^= bits.RotateLeft32(x12+x8, 18) - - x9 ^= bits.RotateLeft32(x5+x1, 7) - x13 ^= bits.RotateLeft32(x9+x5, 9) - x1 ^= bits.RotateLeft32(x13+x9, 13) - x5 ^= bits.RotateLeft32(x1+x13, 18) - - x14 ^= bits.RotateLeft32(x10+x6, 7) - x2 ^= bits.RotateLeft32(x14+x10, 9) - x6 ^= bits.RotateLeft32(x2+x14, 13) - x10 ^= bits.RotateLeft32(x6+x2, 18) - - x3 ^= bits.RotateLeft32(x15+x11, 7) - x7 ^= bits.RotateLeft32(x3+x15, 9) - x11 ^= bits.RotateLeft32(x7+x3, 13) - x15 ^= bits.RotateLeft32(x11+x7, 18) - - x1 ^= bits.RotateLeft32(x0+x3, 7) - x2 ^= bits.RotateLeft32(x1+x0, 9) - x3 ^= bits.RotateLeft32(x2+x1, 13) - x0 ^= bits.RotateLeft32(x3+x2, 18) - - x6 ^= bits.RotateLeft32(x5+x4, 7) - x7 ^= bits.RotateLeft32(x6+x5, 9) - x4 ^= bits.RotateLeft32(x7+x6, 13) - x5 ^= bits.RotateLeft32(x4+x7, 18) - - x11 ^= bits.RotateLeft32(x10+x9, 7) - x8 ^= bits.RotateLeft32(x11+x10, 9) - x9 ^= bits.RotateLeft32(x8+x11, 13) - x10 ^= bits.RotateLeft32(x9+x8, 18) - - x12 ^= bits.RotateLeft32(x15+x14, 7) - x13 ^= bits.RotateLeft32(x12+x15, 9) - x14 ^= bits.RotateLeft32(x13+x12, 13) - x15 ^= bits.RotateLeft32(x14+x13, 18) - } - x0 += w0 - x1 += w1 - x2 += w2 - x3 += w3 - x4 += w4 - x5 += w5 - x6 += w6 - x7 += w7 - x8 += w8 - x9 += w9 - x10 += w10 - x11 += w11 - x12 += w12 - x13 += w13 - x14 += w14 - x15 += w15 - - out[0], tmp[0] = x0, x0 - out[1], tmp[1] = x1, x1 - out[2], tmp[2] = x2, x2 - out[3], tmp[3] = x3, x3 - out[4], tmp[4] = x4, x4 - out[5], tmp[5] = x5, x5 - out[6], tmp[6] = x6, x6 - out[7], tmp[7] = x7, x7 - out[8], tmp[8] = x8, x8 - out[9], tmp[9] = x9, x9 - out[10], tmp[10] = x10, x10 - out[11], tmp[11] = x11, x11 - out[12], tmp[12] = x12, x12 - out[13], tmp[13] = x13, x13 - out[14], tmp[14] = x14, x14 - out[15], tmp[15] = x15, x15 -} - -func blockMix(tmp *[16]uint32, in, out []uint32, r int) { - blockCopy(tmp[:], in[(2*r-1)*16:], 16) - for i := 0; i < 2*r; i += 2 { - salsaXOR(tmp, in[i*16:], out[i*8:]) - salsaXOR(tmp, in[i*16+16:], out[i*8+r*16:]) - } -} - -func integer(b []uint32, r int) uint64 { - j := (2*r - 1) * 16 - return uint64(b[j]) | uint64(b[j+1])<<32 -} - -func smix(b []byte, r, N int, v, xy []uint32) { - var tmp [16]uint32 - R := 32 * r - x := xy - y := xy[R:] - - j := 0 - for i := 0; i < R; i++ { - x[i] = binary.LittleEndian.Uint32(b[j:]) - j += 4 - } - for i := 0; i < N; i += 2 { - blockCopy(v[i*R:], x, R) - blockMix(&tmp, x, y, r) - - blockCopy(v[(i+1)*R:], y, R) - blockMix(&tmp, y, x, r) - } - for i := 0; i < N; i += 2 { - j := int(integer(x, r) & uint64(N-1)) - blockXOR(x, v[j*R:], R) - blockMix(&tmp, x, y, r) - - j = int(integer(y, r) & uint64(N-1)) - blockXOR(y, v[j*R:], R) - blockMix(&tmp, y, x, r) - } - j = 0 - for _, v := range x[:R] { - binary.LittleEndian.PutUint32(b[j:], v) - j += 4 - } -} - -// Key derives a key from the password, salt, and cost parameters, returning -// a byte slice of length keyLen that can be used as cryptographic key. -// -// N is a CPU/memory cost parameter, which must be a power of two greater than 1. -// r and p must satisfy r * p < 2³⁰. If the parameters do not satisfy the -// limits, the function returns a nil byte slice and an error. -// -// For example, you can get a derived key for e.g. AES-256 (which needs a -// 32-byte key) by doing: -// -// dk, err := scrypt.Key([]byte("some password"), salt, 32768, 8, 1, 32) -// -// The recommended parameters for interactive logins as of 2017 are N=32768, r=8 -// and p=1. The parameters N, r, and p should be increased as memory latency and -// CPU parallelism increases; consider setting N to the highest power of 2 you -// can derive within 100 milliseconds. Remember to get a good random salt. -func Key(password, salt []byte, N, r, p, keyLen int) ([]byte, error) { - if N <= 1 || N&(N-1) != 0 { - return nil, errors.New("scrypt: N must be > 1 and a power of 2") - } - if uint64(r)*uint64(p) >= 1<<30 || r > maxInt/128/p || r > maxInt/256 || N > maxInt/128/r { - return nil, errors.New("scrypt: parameters are too large") - } - - xy := make([]uint32, 64*r) - v := make([]uint32, 32*N*r) - b := pbkdf2.Key(password, salt, 1, p*128*r, sha256.New) - - for i := 0; i < p; i++ { - smix(b[i*128*r:], r, N, v, xy) - } - - return pbkdf2.Key(password, b, 1, keyLen, sha256.New), nil -} diff --git a/vendor/golang.org/x/crypto/sha3/doc.go b/vendor/golang.org/x/crypto/sha3/doc.go deleted file mode 100644 index decd8cf..0000000 --- a/vendor/golang.org/x/crypto/sha3/doc.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package sha3 implements the SHA-3 fixed-output-length hash functions and -// the SHAKE variable-output-length hash functions defined by FIPS-202. -// -// Both types of hash function use the "sponge" construction and the Keccak -// permutation. For a detailed specification see http://keccak.noekeon.org/ -// -// # Guidance -// -// If you aren't sure what function you need, use SHAKE256 with at least 64 -// bytes of output. The SHAKE instances are faster than the SHA3 instances; -// the latter have to allocate memory to conform to the hash.Hash interface. -// -// If you need a secret-key MAC (message authentication code), prepend the -// secret key to the input, hash with SHAKE256 and read at least 32 bytes of -// output. -// -// # Security strengths -// -// The SHA3-x (x equals 224, 256, 384, or 512) functions have a security -// strength against preimage attacks of x bits. Since they only produce "x" -// bits of output, their collision-resistance is only "x/2" bits. -// -// The SHAKE-256 and -128 functions have a generic security strength of 256 and -// 128 bits against all attacks, provided that at least 2x bits of their output -// is used. Requesting more than 64 or 32 bytes of output, respectively, does -// not increase the collision-resistance of the SHAKE functions. -// -// # The sponge construction -// -// A sponge builds a pseudo-random function from a public pseudo-random -// permutation, by applying the permutation to a state of "rate + capacity" -// bytes, but hiding "capacity" of the bytes. -// -// A sponge starts out with a zero state. To hash an input using a sponge, up -// to "rate" bytes of the input are XORed into the sponge's state. The sponge -// is then "full" and the permutation is applied to "empty" it. This process is -// repeated until all the input has been "absorbed". The input is then padded. -// The digest is "squeezed" from the sponge in the same way, except that output -// is copied out instead of input being XORed in. -// -// A sponge is parameterized by its generic security strength, which is equal -// to half its capacity; capacity + rate is equal to the permutation's width. -// Since the KeccakF-1600 permutation is 1600 bits (200 bytes) wide, this means -// that the security strength of a sponge instance is equal to (1600 - bitrate) / 2. -// -// # Recommendations -// -// The SHAKE functions are recommended for most new uses. They can produce -// output of arbitrary length. SHAKE256, with an output length of at least -// 64 bytes, provides 256-bit security against all attacks. The Keccak team -// recommends it for most applications upgrading from SHA2-512. (NIST chose a -// much stronger, but much slower, sponge instance for SHA3-512.) -// -// The SHA-3 functions are "drop-in" replacements for the SHA-2 functions. -// They produce output of the same length, with the same security strengths -// against all attacks. This means, in particular, that SHA3-256 only has -// 128-bit collision resistance, because its output length is 32 bytes. -package sha3 // import "golang.org/x/crypto/sha3" diff --git a/vendor/golang.org/x/crypto/sha3/hashes.go b/vendor/golang.org/x/crypto/sha3/hashes.go deleted file mode 100644 index 0d8043f..0000000 --- a/vendor/golang.org/x/crypto/sha3/hashes.go +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package sha3 - -// This file provides functions for creating instances of the SHA-3 -// and SHAKE hash functions, as well as utility functions for hashing -// bytes. - -import ( - "hash" -) - -// New224 creates a new SHA3-224 hash. -// Its generic security strength is 224 bits against preimage attacks, -// and 112 bits against collision attacks. -func New224() hash.Hash { - if h := new224Asm(); h != nil { - return h - } - return &state{rate: 144, outputLen: 28, dsbyte: 0x06} -} - -// New256 creates a new SHA3-256 hash. -// Its generic security strength is 256 bits against preimage attacks, -// and 128 bits against collision attacks. -func New256() hash.Hash { - if h := new256Asm(); h != nil { - return h - } - return &state{rate: 136, outputLen: 32, dsbyte: 0x06} -} - -// New384 creates a new SHA3-384 hash. -// Its generic security strength is 384 bits against preimage attacks, -// and 192 bits against collision attacks. -func New384() hash.Hash { - if h := new384Asm(); h != nil { - return h - } - return &state{rate: 104, outputLen: 48, dsbyte: 0x06} -} - -// New512 creates a new SHA3-512 hash. -// Its generic security strength is 512 bits against preimage attacks, -// and 256 bits against collision attacks. -func New512() hash.Hash { - if h := new512Asm(); h != nil { - return h - } - return &state{rate: 72, outputLen: 64, dsbyte: 0x06} -} - -// NewLegacyKeccak256 creates a new Keccak-256 hash. -// -// Only use this function if you require compatibility with an existing cryptosystem -// that uses non-standard padding. All other users should use New256 instead. -func NewLegacyKeccak256() hash.Hash { return &state{rate: 136, outputLen: 32, dsbyte: 0x01} } - -// NewLegacyKeccak512 creates a new Keccak-512 hash. -// -// Only use this function if you require compatibility with an existing cryptosystem -// that uses non-standard padding. All other users should use New512 instead. -func NewLegacyKeccak512() hash.Hash { return &state{rate: 72, outputLen: 64, dsbyte: 0x01} } - -// Sum224 returns the SHA3-224 digest of the data. -func Sum224(data []byte) (digest [28]byte) { - h := New224() - h.Write(data) - h.Sum(digest[:0]) - return -} - -// Sum256 returns the SHA3-256 digest of the data. -func Sum256(data []byte) (digest [32]byte) { - h := New256() - h.Write(data) - h.Sum(digest[:0]) - return -} - -// Sum384 returns the SHA3-384 digest of the data. -func Sum384(data []byte) (digest [48]byte) { - h := New384() - h.Write(data) - h.Sum(digest[:0]) - return -} - -// Sum512 returns the SHA3-512 digest of the data. -func Sum512(data []byte) (digest [64]byte) { - h := New512() - h.Write(data) - h.Sum(digest[:0]) - return -} diff --git a/vendor/golang.org/x/crypto/sha3/hashes_generic.go b/vendor/golang.org/x/crypto/sha3/hashes_generic.go deleted file mode 100644 index c74fc20..0000000 --- a/vendor/golang.org/x/crypto/sha3/hashes_generic.go +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !gc || purego || !s390x -// +build !gc purego !s390x - -package sha3 - -import ( - "hash" -) - -// new224Asm returns an assembly implementation of SHA3-224 if available, -// otherwise it returns nil. -func new224Asm() hash.Hash { return nil } - -// new256Asm returns an assembly implementation of SHA3-256 if available, -// otherwise it returns nil. -func new256Asm() hash.Hash { return nil } - -// new384Asm returns an assembly implementation of SHA3-384 if available, -// otherwise it returns nil. -func new384Asm() hash.Hash { return nil } - -// new512Asm returns an assembly implementation of SHA3-512 if available, -// otherwise it returns nil. -func new512Asm() hash.Hash { return nil } diff --git a/vendor/golang.org/x/crypto/sha3/keccakf.go b/vendor/golang.org/x/crypto/sha3/keccakf.go deleted file mode 100644 index 0f4ae8b..0000000 --- a/vendor/golang.org/x/crypto/sha3/keccakf.go +++ /dev/null @@ -1,413 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !amd64 || purego || !gc -// +build !amd64 purego !gc - -package sha3 - -// rc stores the round constants for use in the ι step. -var rc = [24]uint64{ - 0x0000000000000001, - 0x0000000000008082, - 0x800000000000808A, - 0x8000000080008000, - 0x000000000000808B, - 0x0000000080000001, - 0x8000000080008081, - 0x8000000000008009, - 0x000000000000008A, - 0x0000000000000088, - 0x0000000080008009, - 0x000000008000000A, - 0x000000008000808B, - 0x800000000000008B, - 0x8000000000008089, - 0x8000000000008003, - 0x8000000000008002, - 0x8000000000000080, - 0x000000000000800A, - 0x800000008000000A, - 0x8000000080008081, - 0x8000000000008080, - 0x0000000080000001, - 0x8000000080008008, -} - -// keccakF1600 applies the Keccak permutation to a 1600b-wide -// state represented as a slice of 25 uint64s. -func keccakF1600(a *[25]uint64) { - // Implementation translated from Keccak-inplace.c - // in the keccak reference code. - var t, bc0, bc1, bc2, bc3, bc4, d0, d1, d2, d3, d4 uint64 - - for i := 0; i < 24; i += 4 { - // Combines the 5 steps in each round into 2 steps. - // Unrolls 4 rounds per loop and spreads some steps across rounds. - - // Round 1 - bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] - bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] - bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] - bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] - bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] - d0 = bc4 ^ (bc1<<1 | bc1>>63) - d1 = bc0 ^ (bc2<<1 | bc2>>63) - d2 = bc1 ^ (bc3<<1 | bc3>>63) - d3 = bc2 ^ (bc4<<1 | bc4>>63) - d4 = bc3 ^ (bc0<<1 | bc0>>63) - - bc0 = a[0] ^ d0 - t = a[6] ^ d1 - bc1 = t<<44 | t>>(64-44) - t = a[12] ^ d2 - bc2 = t<<43 | t>>(64-43) - t = a[18] ^ d3 - bc3 = t<<21 | t>>(64-21) - t = a[24] ^ d4 - bc4 = t<<14 | t>>(64-14) - a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i] - a[6] = bc1 ^ (bc3 &^ bc2) - a[12] = bc2 ^ (bc4 &^ bc3) - a[18] = bc3 ^ (bc0 &^ bc4) - a[24] = bc4 ^ (bc1 &^ bc0) - - t = a[10] ^ d0 - bc2 = t<<3 | t>>(64-3) - t = a[16] ^ d1 - bc3 = t<<45 | t>>(64-45) - t = a[22] ^ d2 - bc4 = t<<61 | t>>(64-61) - t = a[3] ^ d3 - bc0 = t<<28 | t>>(64-28) - t = a[9] ^ d4 - bc1 = t<<20 | t>>(64-20) - a[10] = bc0 ^ (bc2 &^ bc1) - a[16] = bc1 ^ (bc3 &^ bc2) - a[22] = bc2 ^ (bc4 &^ bc3) - a[3] = bc3 ^ (bc0 &^ bc4) - a[9] = bc4 ^ (bc1 &^ bc0) - - t = a[20] ^ d0 - bc4 = t<<18 | t>>(64-18) - t = a[1] ^ d1 - bc0 = t<<1 | t>>(64-1) - t = a[7] ^ d2 - bc1 = t<<6 | t>>(64-6) - t = a[13] ^ d3 - bc2 = t<<25 | t>>(64-25) - t = a[19] ^ d4 - bc3 = t<<8 | t>>(64-8) - a[20] = bc0 ^ (bc2 &^ bc1) - a[1] = bc1 ^ (bc3 &^ bc2) - a[7] = bc2 ^ (bc4 &^ bc3) - a[13] = bc3 ^ (bc0 &^ bc4) - a[19] = bc4 ^ (bc1 &^ bc0) - - t = a[5] ^ d0 - bc1 = t<<36 | t>>(64-36) - t = a[11] ^ d1 - bc2 = t<<10 | t>>(64-10) - t = a[17] ^ d2 - bc3 = t<<15 | t>>(64-15) - t = a[23] ^ d3 - bc4 = t<<56 | t>>(64-56) - t = a[4] ^ d4 - bc0 = t<<27 | t>>(64-27) - a[5] = bc0 ^ (bc2 &^ bc1) - a[11] = bc1 ^ (bc3 &^ bc2) - a[17] = bc2 ^ (bc4 &^ bc3) - a[23] = bc3 ^ (bc0 &^ bc4) - a[4] = bc4 ^ (bc1 &^ bc0) - - t = a[15] ^ d0 - bc3 = t<<41 | t>>(64-41) - t = a[21] ^ d1 - bc4 = t<<2 | t>>(64-2) - t = a[2] ^ d2 - bc0 = t<<62 | t>>(64-62) - t = a[8] ^ d3 - bc1 = t<<55 | t>>(64-55) - t = a[14] ^ d4 - bc2 = t<<39 | t>>(64-39) - a[15] = bc0 ^ (bc2 &^ bc1) - a[21] = bc1 ^ (bc3 &^ bc2) - a[2] = bc2 ^ (bc4 &^ bc3) - a[8] = bc3 ^ (bc0 &^ bc4) - a[14] = bc4 ^ (bc1 &^ bc0) - - // Round 2 - bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] - bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] - bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] - bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] - bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] - d0 = bc4 ^ (bc1<<1 | bc1>>63) - d1 = bc0 ^ (bc2<<1 | bc2>>63) - d2 = bc1 ^ (bc3<<1 | bc3>>63) - d3 = bc2 ^ (bc4<<1 | bc4>>63) - d4 = bc3 ^ (bc0<<1 | bc0>>63) - - bc0 = a[0] ^ d0 - t = a[16] ^ d1 - bc1 = t<<44 | t>>(64-44) - t = a[7] ^ d2 - bc2 = t<<43 | t>>(64-43) - t = a[23] ^ d3 - bc3 = t<<21 | t>>(64-21) - t = a[14] ^ d4 - bc4 = t<<14 | t>>(64-14) - a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+1] - a[16] = bc1 ^ (bc3 &^ bc2) - a[7] = bc2 ^ (bc4 &^ bc3) - a[23] = bc3 ^ (bc0 &^ bc4) - a[14] = bc4 ^ (bc1 &^ bc0) - - t = a[20] ^ d0 - bc2 = t<<3 | t>>(64-3) - t = a[11] ^ d1 - bc3 = t<<45 | t>>(64-45) - t = a[2] ^ d2 - bc4 = t<<61 | t>>(64-61) - t = a[18] ^ d3 - bc0 = t<<28 | t>>(64-28) - t = a[9] ^ d4 - bc1 = t<<20 | t>>(64-20) - a[20] = bc0 ^ (bc2 &^ bc1) - a[11] = bc1 ^ (bc3 &^ bc2) - a[2] = bc2 ^ (bc4 &^ bc3) - a[18] = bc3 ^ (bc0 &^ bc4) - a[9] = bc4 ^ (bc1 &^ bc0) - - t = a[15] ^ d0 - bc4 = t<<18 | t>>(64-18) - t = a[6] ^ d1 - bc0 = t<<1 | t>>(64-1) - t = a[22] ^ d2 - bc1 = t<<6 | t>>(64-6) - t = a[13] ^ d3 - bc2 = t<<25 | t>>(64-25) - t = a[4] ^ d4 - bc3 = t<<8 | t>>(64-8) - a[15] = bc0 ^ (bc2 &^ bc1) - a[6] = bc1 ^ (bc3 &^ bc2) - a[22] = bc2 ^ (bc4 &^ bc3) - a[13] = bc3 ^ (bc0 &^ bc4) - a[4] = bc4 ^ (bc1 &^ bc0) - - t = a[10] ^ d0 - bc1 = t<<36 | t>>(64-36) - t = a[1] ^ d1 - bc2 = t<<10 | t>>(64-10) - t = a[17] ^ d2 - bc3 = t<<15 | t>>(64-15) - t = a[8] ^ d3 - bc4 = t<<56 | t>>(64-56) - t = a[24] ^ d4 - bc0 = t<<27 | t>>(64-27) - a[10] = bc0 ^ (bc2 &^ bc1) - a[1] = bc1 ^ (bc3 &^ bc2) - a[17] = bc2 ^ (bc4 &^ bc3) - a[8] = bc3 ^ (bc0 &^ bc4) - a[24] = bc4 ^ (bc1 &^ bc0) - - t = a[5] ^ d0 - bc3 = t<<41 | t>>(64-41) - t = a[21] ^ d1 - bc4 = t<<2 | t>>(64-2) - t = a[12] ^ d2 - bc0 = t<<62 | t>>(64-62) - t = a[3] ^ d3 - bc1 = t<<55 | t>>(64-55) - t = a[19] ^ d4 - bc2 = t<<39 | t>>(64-39) - a[5] = bc0 ^ (bc2 &^ bc1) - a[21] = bc1 ^ (bc3 &^ bc2) - a[12] = bc2 ^ (bc4 &^ bc3) - a[3] = bc3 ^ (bc0 &^ bc4) - a[19] = bc4 ^ (bc1 &^ bc0) - - // Round 3 - bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] - bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] - bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] - bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] - bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] - d0 = bc4 ^ (bc1<<1 | bc1>>63) - d1 = bc0 ^ (bc2<<1 | bc2>>63) - d2 = bc1 ^ (bc3<<1 | bc3>>63) - d3 = bc2 ^ (bc4<<1 | bc4>>63) - d4 = bc3 ^ (bc0<<1 | bc0>>63) - - bc0 = a[0] ^ d0 - t = a[11] ^ d1 - bc1 = t<<44 | t>>(64-44) - t = a[22] ^ d2 - bc2 = t<<43 | t>>(64-43) - t = a[8] ^ d3 - bc3 = t<<21 | t>>(64-21) - t = a[19] ^ d4 - bc4 = t<<14 | t>>(64-14) - a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+2] - a[11] = bc1 ^ (bc3 &^ bc2) - a[22] = bc2 ^ (bc4 &^ bc3) - a[8] = bc3 ^ (bc0 &^ bc4) - a[19] = bc4 ^ (bc1 &^ bc0) - - t = a[15] ^ d0 - bc2 = t<<3 | t>>(64-3) - t = a[1] ^ d1 - bc3 = t<<45 | t>>(64-45) - t = a[12] ^ d2 - bc4 = t<<61 | t>>(64-61) - t = a[23] ^ d3 - bc0 = t<<28 | t>>(64-28) - t = a[9] ^ d4 - bc1 = t<<20 | t>>(64-20) - a[15] = bc0 ^ (bc2 &^ bc1) - a[1] = bc1 ^ (bc3 &^ bc2) - a[12] = bc2 ^ (bc4 &^ bc3) - a[23] = bc3 ^ (bc0 &^ bc4) - a[9] = bc4 ^ (bc1 &^ bc0) - - t = a[5] ^ d0 - bc4 = t<<18 | t>>(64-18) - t = a[16] ^ d1 - bc0 = t<<1 | t>>(64-1) - t = a[2] ^ d2 - bc1 = t<<6 | t>>(64-6) - t = a[13] ^ d3 - bc2 = t<<25 | t>>(64-25) - t = a[24] ^ d4 - bc3 = t<<8 | t>>(64-8) - a[5] = bc0 ^ (bc2 &^ bc1) - a[16] = bc1 ^ (bc3 &^ bc2) - a[2] = bc2 ^ (bc4 &^ bc3) - a[13] = bc3 ^ (bc0 &^ bc4) - a[24] = bc4 ^ (bc1 &^ bc0) - - t = a[20] ^ d0 - bc1 = t<<36 | t>>(64-36) - t = a[6] ^ d1 - bc2 = t<<10 | t>>(64-10) - t = a[17] ^ d2 - bc3 = t<<15 | t>>(64-15) - t = a[3] ^ d3 - bc4 = t<<56 | t>>(64-56) - t = a[14] ^ d4 - bc0 = t<<27 | t>>(64-27) - a[20] = bc0 ^ (bc2 &^ bc1) - a[6] = bc1 ^ (bc3 &^ bc2) - a[17] = bc2 ^ (bc4 &^ bc3) - a[3] = bc3 ^ (bc0 &^ bc4) - a[14] = bc4 ^ (bc1 &^ bc0) - - t = a[10] ^ d0 - bc3 = t<<41 | t>>(64-41) - t = a[21] ^ d1 - bc4 = t<<2 | t>>(64-2) - t = a[7] ^ d2 - bc0 = t<<62 | t>>(64-62) - t = a[18] ^ d3 - bc1 = t<<55 | t>>(64-55) - t = a[4] ^ d4 - bc2 = t<<39 | t>>(64-39) - a[10] = bc0 ^ (bc2 &^ bc1) - a[21] = bc1 ^ (bc3 &^ bc2) - a[7] = bc2 ^ (bc4 &^ bc3) - a[18] = bc3 ^ (bc0 &^ bc4) - a[4] = bc4 ^ (bc1 &^ bc0) - - // Round 4 - bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] - bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] - bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] - bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] - bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] - d0 = bc4 ^ (bc1<<1 | bc1>>63) - d1 = bc0 ^ (bc2<<1 | bc2>>63) - d2 = bc1 ^ (bc3<<1 | bc3>>63) - d3 = bc2 ^ (bc4<<1 | bc4>>63) - d4 = bc3 ^ (bc0<<1 | bc0>>63) - - bc0 = a[0] ^ d0 - t = a[1] ^ d1 - bc1 = t<<44 | t>>(64-44) - t = a[2] ^ d2 - bc2 = t<<43 | t>>(64-43) - t = a[3] ^ d3 - bc3 = t<<21 | t>>(64-21) - t = a[4] ^ d4 - bc4 = t<<14 | t>>(64-14) - a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+3] - a[1] = bc1 ^ (bc3 &^ bc2) - a[2] = bc2 ^ (bc4 &^ bc3) - a[3] = bc3 ^ (bc0 &^ bc4) - a[4] = bc4 ^ (bc1 &^ bc0) - - t = a[5] ^ d0 - bc2 = t<<3 | t>>(64-3) - t = a[6] ^ d1 - bc3 = t<<45 | t>>(64-45) - t = a[7] ^ d2 - bc4 = t<<61 | t>>(64-61) - t = a[8] ^ d3 - bc0 = t<<28 | t>>(64-28) - t = a[9] ^ d4 - bc1 = t<<20 | t>>(64-20) - a[5] = bc0 ^ (bc2 &^ bc1) - a[6] = bc1 ^ (bc3 &^ bc2) - a[7] = bc2 ^ (bc4 &^ bc3) - a[8] = bc3 ^ (bc0 &^ bc4) - a[9] = bc4 ^ (bc1 &^ bc0) - - t = a[10] ^ d0 - bc4 = t<<18 | t>>(64-18) - t = a[11] ^ d1 - bc0 = t<<1 | t>>(64-1) - t = a[12] ^ d2 - bc1 = t<<6 | t>>(64-6) - t = a[13] ^ d3 - bc2 = t<<25 | t>>(64-25) - t = a[14] ^ d4 - bc3 = t<<8 | t>>(64-8) - a[10] = bc0 ^ (bc2 &^ bc1) - a[11] = bc1 ^ (bc3 &^ bc2) - a[12] = bc2 ^ (bc4 &^ bc3) - a[13] = bc3 ^ (bc0 &^ bc4) - a[14] = bc4 ^ (bc1 &^ bc0) - - t = a[15] ^ d0 - bc1 = t<<36 | t>>(64-36) - t = a[16] ^ d1 - bc2 = t<<10 | t>>(64-10) - t = a[17] ^ d2 - bc3 = t<<15 | t>>(64-15) - t = a[18] ^ d3 - bc4 = t<<56 | t>>(64-56) - t = a[19] ^ d4 - bc0 = t<<27 | t>>(64-27) - a[15] = bc0 ^ (bc2 &^ bc1) - a[16] = bc1 ^ (bc3 &^ bc2) - a[17] = bc2 ^ (bc4 &^ bc3) - a[18] = bc3 ^ (bc0 &^ bc4) - a[19] = bc4 ^ (bc1 &^ bc0) - - t = a[20] ^ d0 - bc3 = t<<41 | t>>(64-41) - t = a[21] ^ d1 - bc4 = t<<2 | t>>(64-2) - t = a[22] ^ d2 - bc0 = t<<62 | t>>(64-62) - t = a[23] ^ d3 - bc1 = t<<55 | t>>(64-55) - t = a[24] ^ d4 - bc2 = t<<39 | t>>(64-39) - a[20] = bc0 ^ (bc2 &^ bc1) - a[21] = bc1 ^ (bc3 &^ bc2) - a[22] = bc2 ^ (bc4 &^ bc3) - a[23] = bc3 ^ (bc0 &^ bc4) - a[24] = bc4 ^ (bc1 &^ bc0) - } -} diff --git a/vendor/golang.org/x/crypto/sha3/keccakf_amd64.go b/vendor/golang.org/x/crypto/sha3/keccakf_amd64.go deleted file mode 100644 index 248a382..0000000 --- a/vendor/golang.org/x/crypto/sha3/keccakf_amd64.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build amd64 && !purego && gc -// +build amd64,!purego,gc - -package sha3 - -// This function is implemented in keccakf_amd64.s. - -//go:noescape - -func keccakF1600(a *[25]uint64) diff --git a/vendor/golang.org/x/crypto/sha3/keccakf_amd64.s b/vendor/golang.org/x/crypto/sha3/keccakf_amd64.s deleted file mode 100644 index 4cfa543..0000000 --- a/vendor/golang.org/x/crypto/sha3/keccakf_amd64.s +++ /dev/null @@ -1,391 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build amd64 && !purego && gc -// +build amd64,!purego,gc - -// This code was translated into a form compatible with 6a from the public -// domain sources at https://github.com/gvanas/KeccakCodePackage - -// Offsets in state -#define _ba (0*8) -#define _be (1*8) -#define _bi (2*8) -#define _bo (3*8) -#define _bu (4*8) -#define _ga (5*8) -#define _ge (6*8) -#define _gi (7*8) -#define _go (8*8) -#define _gu (9*8) -#define _ka (10*8) -#define _ke (11*8) -#define _ki (12*8) -#define _ko (13*8) -#define _ku (14*8) -#define _ma (15*8) -#define _me (16*8) -#define _mi (17*8) -#define _mo (18*8) -#define _mu (19*8) -#define _sa (20*8) -#define _se (21*8) -#define _si (22*8) -#define _so (23*8) -#define _su (24*8) - -// Temporary registers -#define rT1 AX - -// Round vars -#define rpState DI -#define rpStack SP - -#define rDa BX -#define rDe CX -#define rDi DX -#define rDo R8 -#define rDu R9 - -#define rBa R10 -#define rBe R11 -#define rBi R12 -#define rBo R13 -#define rBu R14 - -#define rCa SI -#define rCe BP -#define rCi rBi -#define rCo rBo -#define rCu R15 - -#define MOVQ_RBI_RCE MOVQ rBi, rCe -#define XORQ_RT1_RCA XORQ rT1, rCa -#define XORQ_RT1_RCE XORQ rT1, rCe -#define XORQ_RBA_RCU XORQ rBa, rCu -#define XORQ_RBE_RCU XORQ rBe, rCu -#define XORQ_RDU_RCU XORQ rDu, rCu -#define XORQ_RDA_RCA XORQ rDa, rCa -#define XORQ_RDE_RCE XORQ rDe, rCe - -#define mKeccakRound(iState, oState, rc, B_RBI_RCE, G_RT1_RCA, G_RT1_RCE, G_RBA_RCU, K_RT1_RCA, K_RT1_RCE, K_RBA_RCU, M_RT1_RCA, M_RT1_RCE, M_RBE_RCU, S_RDU_RCU, S_RDA_RCA, S_RDE_RCE) \ - /* Prepare round */ \ - MOVQ rCe, rDa; \ - ROLQ $1, rDa; \ - \ - MOVQ _bi(iState), rCi; \ - XORQ _gi(iState), rDi; \ - XORQ rCu, rDa; \ - XORQ _ki(iState), rCi; \ - XORQ _mi(iState), rDi; \ - XORQ rDi, rCi; \ - \ - MOVQ rCi, rDe; \ - ROLQ $1, rDe; \ - \ - MOVQ _bo(iState), rCo; \ - XORQ _go(iState), rDo; \ - XORQ rCa, rDe; \ - XORQ _ko(iState), rCo; \ - XORQ _mo(iState), rDo; \ - XORQ rDo, rCo; \ - \ - MOVQ rCo, rDi; \ - ROLQ $1, rDi; \ - \ - MOVQ rCu, rDo; \ - XORQ rCe, rDi; \ - ROLQ $1, rDo; \ - \ - MOVQ rCa, rDu; \ - XORQ rCi, rDo; \ - ROLQ $1, rDu; \ - \ - /* Result b */ \ - MOVQ _ba(iState), rBa; \ - MOVQ _ge(iState), rBe; \ - XORQ rCo, rDu; \ - MOVQ _ki(iState), rBi; \ - MOVQ _mo(iState), rBo; \ - MOVQ _su(iState), rBu; \ - XORQ rDe, rBe; \ - ROLQ $44, rBe; \ - XORQ rDi, rBi; \ - XORQ rDa, rBa; \ - ROLQ $43, rBi; \ - \ - MOVQ rBe, rCa; \ - MOVQ rc, rT1; \ - ORQ rBi, rCa; \ - XORQ rBa, rT1; \ - XORQ rT1, rCa; \ - MOVQ rCa, _ba(oState); \ - \ - XORQ rDu, rBu; \ - ROLQ $14, rBu; \ - MOVQ rBa, rCu; \ - ANDQ rBe, rCu; \ - XORQ rBu, rCu; \ - MOVQ rCu, _bu(oState); \ - \ - XORQ rDo, rBo; \ - ROLQ $21, rBo; \ - MOVQ rBo, rT1; \ - ANDQ rBu, rT1; \ - XORQ rBi, rT1; \ - MOVQ rT1, _bi(oState); \ - \ - NOTQ rBi; \ - ORQ rBa, rBu; \ - ORQ rBo, rBi; \ - XORQ rBo, rBu; \ - XORQ rBe, rBi; \ - MOVQ rBu, _bo(oState); \ - MOVQ rBi, _be(oState); \ - B_RBI_RCE; \ - \ - /* Result g */ \ - MOVQ _gu(iState), rBe; \ - XORQ rDu, rBe; \ - MOVQ _ka(iState), rBi; \ - ROLQ $20, rBe; \ - XORQ rDa, rBi; \ - ROLQ $3, rBi; \ - MOVQ _bo(iState), rBa; \ - MOVQ rBe, rT1; \ - ORQ rBi, rT1; \ - XORQ rDo, rBa; \ - MOVQ _me(iState), rBo; \ - MOVQ _si(iState), rBu; \ - ROLQ $28, rBa; \ - XORQ rBa, rT1; \ - MOVQ rT1, _ga(oState); \ - G_RT1_RCA; \ - \ - XORQ rDe, rBo; \ - ROLQ $45, rBo; \ - MOVQ rBi, rT1; \ - ANDQ rBo, rT1; \ - XORQ rBe, rT1; \ - MOVQ rT1, _ge(oState); \ - G_RT1_RCE; \ - \ - XORQ rDi, rBu; \ - ROLQ $61, rBu; \ - MOVQ rBu, rT1; \ - ORQ rBa, rT1; \ - XORQ rBo, rT1; \ - MOVQ rT1, _go(oState); \ - \ - ANDQ rBe, rBa; \ - XORQ rBu, rBa; \ - MOVQ rBa, _gu(oState); \ - NOTQ rBu; \ - G_RBA_RCU; \ - \ - ORQ rBu, rBo; \ - XORQ rBi, rBo; \ - MOVQ rBo, _gi(oState); \ - \ - /* Result k */ \ - MOVQ _be(iState), rBa; \ - MOVQ _gi(iState), rBe; \ - MOVQ _ko(iState), rBi; \ - MOVQ _mu(iState), rBo; \ - MOVQ _sa(iState), rBu; \ - XORQ rDi, rBe; \ - ROLQ $6, rBe; \ - XORQ rDo, rBi; \ - ROLQ $25, rBi; \ - MOVQ rBe, rT1; \ - ORQ rBi, rT1; \ - XORQ rDe, rBa; \ - ROLQ $1, rBa; \ - XORQ rBa, rT1; \ - MOVQ rT1, _ka(oState); \ - K_RT1_RCA; \ - \ - XORQ rDu, rBo; \ - ROLQ $8, rBo; \ - MOVQ rBi, rT1; \ - ANDQ rBo, rT1; \ - XORQ rBe, rT1; \ - MOVQ rT1, _ke(oState); \ - K_RT1_RCE; \ - \ - XORQ rDa, rBu; \ - ROLQ $18, rBu; \ - NOTQ rBo; \ - MOVQ rBo, rT1; \ - ANDQ rBu, rT1; \ - XORQ rBi, rT1; \ - MOVQ rT1, _ki(oState); \ - \ - MOVQ rBu, rT1; \ - ORQ rBa, rT1; \ - XORQ rBo, rT1; \ - MOVQ rT1, _ko(oState); \ - \ - ANDQ rBe, rBa; \ - XORQ rBu, rBa; \ - MOVQ rBa, _ku(oState); \ - K_RBA_RCU; \ - \ - /* Result m */ \ - MOVQ _ga(iState), rBe; \ - XORQ rDa, rBe; \ - MOVQ _ke(iState), rBi; \ - ROLQ $36, rBe; \ - XORQ rDe, rBi; \ - MOVQ _bu(iState), rBa; \ - ROLQ $10, rBi; \ - MOVQ rBe, rT1; \ - MOVQ _mi(iState), rBo; \ - ANDQ rBi, rT1; \ - XORQ rDu, rBa; \ - MOVQ _so(iState), rBu; \ - ROLQ $27, rBa; \ - XORQ rBa, rT1; \ - MOVQ rT1, _ma(oState); \ - M_RT1_RCA; \ - \ - XORQ rDi, rBo; \ - ROLQ $15, rBo; \ - MOVQ rBi, rT1; \ - ORQ rBo, rT1; \ - XORQ rBe, rT1; \ - MOVQ rT1, _me(oState); \ - M_RT1_RCE; \ - \ - XORQ rDo, rBu; \ - ROLQ $56, rBu; \ - NOTQ rBo; \ - MOVQ rBo, rT1; \ - ORQ rBu, rT1; \ - XORQ rBi, rT1; \ - MOVQ rT1, _mi(oState); \ - \ - ORQ rBa, rBe; \ - XORQ rBu, rBe; \ - MOVQ rBe, _mu(oState); \ - \ - ANDQ rBa, rBu; \ - XORQ rBo, rBu; \ - MOVQ rBu, _mo(oState); \ - M_RBE_RCU; \ - \ - /* Result s */ \ - MOVQ _bi(iState), rBa; \ - MOVQ _go(iState), rBe; \ - MOVQ _ku(iState), rBi; \ - XORQ rDi, rBa; \ - MOVQ _ma(iState), rBo; \ - ROLQ $62, rBa; \ - XORQ rDo, rBe; \ - MOVQ _se(iState), rBu; \ - ROLQ $55, rBe; \ - \ - XORQ rDu, rBi; \ - MOVQ rBa, rDu; \ - XORQ rDe, rBu; \ - ROLQ $2, rBu; \ - ANDQ rBe, rDu; \ - XORQ rBu, rDu; \ - MOVQ rDu, _su(oState); \ - \ - ROLQ $39, rBi; \ - S_RDU_RCU; \ - NOTQ rBe; \ - XORQ rDa, rBo; \ - MOVQ rBe, rDa; \ - ANDQ rBi, rDa; \ - XORQ rBa, rDa; \ - MOVQ rDa, _sa(oState); \ - S_RDA_RCA; \ - \ - ROLQ $41, rBo; \ - MOVQ rBi, rDe; \ - ORQ rBo, rDe; \ - XORQ rBe, rDe; \ - MOVQ rDe, _se(oState); \ - S_RDE_RCE; \ - \ - MOVQ rBo, rDi; \ - MOVQ rBu, rDo; \ - ANDQ rBu, rDi; \ - ORQ rBa, rDo; \ - XORQ rBi, rDi; \ - XORQ rBo, rDo; \ - MOVQ rDi, _si(oState); \ - MOVQ rDo, _so(oState) \ - -// func keccakF1600(state *[25]uint64) -TEXT ·keccakF1600(SB), 0, $200-8 - MOVQ state+0(FP), rpState - - // Convert the user state into an internal state - NOTQ _be(rpState) - NOTQ _bi(rpState) - NOTQ _go(rpState) - NOTQ _ki(rpState) - NOTQ _mi(rpState) - NOTQ _sa(rpState) - - // Execute the KeccakF permutation - MOVQ _ba(rpState), rCa - MOVQ _be(rpState), rCe - MOVQ _bu(rpState), rCu - - XORQ _ga(rpState), rCa - XORQ _ge(rpState), rCe - XORQ _gu(rpState), rCu - - XORQ _ka(rpState), rCa - XORQ _ke(rpState), rCe - XORQ _ku(rpState), rCu - - XORQ _ma(rpState), rCa - XORQ _me(rpState), rCe - XORQ _mu(rpState), rCu - - XORQ _sa(rpState), rCa - XORQ _se(rpState), rCe - MOVQ _si(rpState), rDi - MOVQ _so(rpState), rDo - XORQ _su(rpState), rCu - - mKeccakRound(rpState, rpStack, $0x0000000000000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x0000000000008082, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpState, rpStack, $0x800000000000808a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x8000000080008000, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpState, rpStack, $0x000000000000808b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x0000000080000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpState, rpStack, $0x8000000080008081, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x8000000000008009, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpState, rpStack, $0x000000000000008a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x0000000000000088, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpState, rpStack, $0x0000000080008009, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x000000008000000a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpState, rpStack, $0x000000008000808b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x800000000000008b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpState, rpStack, $0x8000000000008089, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x8000000000008003, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpState, rpStack, $0x8000000000008002, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x8000000000000080, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpState, rpStack, $0x000000000000800a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x800000008000000a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpState, rpStack, $0x8000000080008081, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x8000000000008080, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpState, rpStack, $0x0000000080000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x8000000080008008, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP) - - // Revert the internal state to the user state - NOTQ _be(rpState) - NOTQ _bi(rpState) - NOTQ _go(rpState) - NOTQ _ki(rpState) - NOTQ _mi(rpState) - NOTQ _sa(rpState) - - RET diff --git a/vendor/golang.org/x/crypto/sha3/register.go b/vendor/golang.org/x/crypto/sha3/register.go deleted file mode 100644 index 8b4453a..0000000 --- a/vendor/golang.org/x/crypto/sha3/register.go +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.4 -// +build go1.4 - -package sha3 - -import ( - "crypto" -) - -func init() { - crypto.RegisterHash(crypto.SHA3_224, New224) - crypto.RegisterHash(crypto.SHA3_256, New256) - crypto.RegisterHash(crypto.SHA3_384, New384) - crypto.RegisterHash(crypto.SHA3_512, New512) -} diff --git a/vendor/golang.org/x/crypto/sha3/sha3.go b/vendor/golang.org/x/crypto/sha3/sha3.go deleted file mode 100644 index fa182be..0000000 --- a/vendor/golang.org/x/crypto/sha3/sha3.go +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package sha3 - -// spongeDirection indicates the direction bytes are flowing through the sponge. -type spongeDirection int - -const ( - // spongeAbsorbing indicates that the sponge is absorbing input. - spongeAbsorbing spongeDirection = iota - // spongeSqueezing indicates that the sponge is being squeezed. - spongeSqueezing -) - -const ( - // maxRate is the maximum size of the internal buffer. SHAKE-256 - // currently needs the largest buffer. - maxRate = 168 -) - -type state struct { - // Generic sponge components. - a [25]uint64 // main state of the hash - buf []byte // points into storage - rate int // the number of bytes of state to use - - // dsbyte contains the "domain separation" bits and the first bit of - // the padding. Sections 6.1 and 6.2 of [1] separate the outputs of the - // SHA-3 and SHAKE functions by appending bitstrings to the message. - // Using a little-endian bit-ordering convention, these are "01" for SHA-3 - // and "1111" for SHAKE, or 00000010b and 00001111b, respectively. Then the - // padding rule from section 5.1 is applied to pad the message to a multiple - // of the rate, which involves adding a "1" bit, zero or more "0" bits, and - // a final "1" bit. We merge the first "1" bit from the padding into dsbyte, - // giving 00000110b (0x06) and 00011111b (0x1f). - // [1] http://csrc.nist.gov/publications/drafts/fips-202/fips_202_draft.pdf - // "Draft FIPS 202: SHA-3 Standard: Permutation-Based Hash and - // Extendable-Output Functions (May 2014)" - dsbyte byte - - storage storageBuf - - // Specific to SHA-3 and SHAKE. - outputLen int // the default output size in bytes - state spongeDirection // whether the sponge is absorbing or squeezing -} - -// BlockSize returns the rate of sponge underlying this hash function. -func (d *state) BlockSize() int { return d.rate } - -// Size returns the output size of the hash function in bytes. -func (d *state) Size() int { return d.outputLen } - -// Reset clears the internal state by zeroing the sponge state and -// the byte buffer, and setting Sponge.state to absorbing. -func (d *state) Reset() { - // Zero the permutation's state. - for i := range d.a { - d.a[i] = 0 - } - d.state = spongeAbsorbing - d.buf = d.storage.asBytes()[:0] -} - -func (d *state) clone() *state { - ret := *d - if ret.state == spongeAbsorbing { - ret.buf = ret.storage.asBytes()[:len(ret.buf)] - } else { - ret.buf = ret.storage.asBytes()[d.rate-cap(d.buf) : d.rate] - } - - return &ret -} - -// permute applies the KeccakF-1600 permutation. It handles -// any input-output buffering. -func (d *state) permute() { - switch d.state { - case spongeAbsorbing: - // If we're absorbing, we need to xor the input into the state - // before applying the permutation. - xorIn(d, d.buf) - d.buf = d.storage.asBytes()[:0] - keccakF1600(&d.a) - case spongeSqueezing: - // If we're squeezing, we need to apply the permutation before - // copying more output. - keccakF1600(&d.a) - d.buf = d.storage.asBytes()[:d.rate] - copyOut(d, d.buf) - } -} - -// pads appends the domain separation bits in dsbyte, applies -// the multi-bitrate 10..1 padding rule, and permutes the state. -func (d *state) padAndPermute(dsbyte byte) { - if d.buf == nil { - d.buf = d.storage.asBytes()[:0] - } - // Pad with this instance's domain-separator bits. We know that there's - // at least one byte of space in d.buf because, if it were full, - // permute would have been called to empty it. dsbyte also contains the - // first one bit for the padding. See the comment in the state struct. - d.buf = append(d.buf, dsbyte) - zerosStart := len(d.buf) - d.buf = d.storage.asBytes()[:d.rate] - for i := zerosStart; i < d.rate; i++ { - d.buf[i] = 0 - } - // This adds the final one bit for the padding. Because of the way that - // bits are numbered from the LSB upwards, the final bit is the MSB of - // the last byte. - d.buf[d.rate-1] ^= 0x80 - // Apply the permutation - d.permute() - d.state = spongeSqueezing - d.buf = d.storage.asBytes()[:d.rate] - copyOut(d, d.buf) -} - -// Write absorbs more data into the hash's state. It produces an error -// if more data is written to the ShakeHash after writing -func (d *state) Write(p []byte) (written int, err error) { - if d.state != spongeAbsorbing { - panic("sha3: write to sponge after read") - } - if d.buf == nil { - d.buf = d.storage.asBytes()[:0] - } - written = len(p) - - for len(p) > 0 { - if len(d.buf) == 0 && len(p) >= d.rate { - // The fast path; absorb a full "rate" bytes of input and apply the permutation. - xorIn(d, p[:d.rate]) - p = p[d.rate:] - keccakF1600(&d.a) - } else { - // The slow path; buffer the input until we can fill the sponge, and then xor it in. - todo := d.rate - len(d.buf) - if todo > len(p) { - todo = len(p) - } - d.buf = append(d.buf, p[:todo]...) - p = p[todo:] - - // If the sponge is full, apply the permutation. - if len(d.buf) == d.rate { - d.permute() - } - } - } - - return -} - -// Read squeezes an arbitrary number of bytes from the sponge. -func (d *state) Read(out []byte) (n int, err error) { - // If we're still absorbing, pad and apply the permutation. - if d.state == spongeAbsorbing { - d.padAndPermute(d.dsbyte) - } - - n = len(out) - - // Now, do the squeezing. - for len(out) > 0 { - n := copy(out, d.buf) - d.buf = d.buf[n:] - out = out[n:] - - // Apply the permutation if we've squeezed the sponge dry. - if len(d.buf) == 0 { - d.permute() - } - } - - return -} - -// Sum applies padding to the hash state and then squeezes out the desired -// number of output bytes. -func (d *state) Sum(in []byte) []byte { - // Make a copy of the original hash so that caller can keep writing - // and summing. - dup := d.clone() - hash := make([]byte, dup.outputLen) - dup.Read(hash) - return append(in, hash...) -} diff --git a/vendor/golang.org/x/crypto/sha3/sha3_s390x.go b/vendor/golang.org/x/crypto/sha3/sha3_s390x.go deleted file mode 100644 index 63a3edb..0000000 --- a/vendor/golang.org/x/crypto/sha3/sha3_s390x.go +++ /dev/null @@ -1,287 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build gc && !purego -// +build gc,!purego - -package sha3 - -// This file contains code for using the 'compute intermediate -// message digest' (KIMD) and 'compute last message digest' (KLMD) -// instructions to compute SHA-3 and SHAKE hashes on IBM Z. - -import ( - "hash" - - "golang.org/x/sys/cpu" -) - -// codes represent 7-bit KIMD/KLMD function codes as defined in -// the Principles of Operation. -type code uint64 - -const ( - // function codes for KIMD/KLMD - sha3_224 code = 32 - sha3_256 = 33 - sha3_384 = 34 - sha3_512 = 35 - shake_128 = 36 - shake_256 = 37 - nopad = 0x100 -) - -// kimd is a wrapper for the 'compute intermediate message digest' instruction. -// src must be a multiple of the rate for the given function code. -// -//go:noescape -func kimd(function code, chain *[200]byte, src []byte) - -// klmd is a wrapper for the 'compute last message digest' instruction. -// src padding is handled by the instruction. -// -//go:noescape -func klmd(function code, chain *[200]byte, dst, src []byte) - -type asmState struct { - a [200]byte // 1600 bit state - buf []byte // care must be taken to ensure cap(buf) is a multiple of rate - rate int // equivalent to block size - storage [3072]byte // underlying storage for buf - outputLen int // output length if fixed, 0 if not - function code // KIMD/KLMD function code - state spongeDirection // whether the sponge is absorbing or squeezing -} - -func newAsmState(function code) *asmState { - var s asmState - s.function = function - switch function { - case sha3_224: - s.rate = 144 - s.outputLen = 28 - case sha3_256: - s.rate = 136 - s.outputLen = 32 - case sha3_384: - s.rate = 104 - s.outputLen = 48 - case sha3_512: - s.rate = 72 - s.outputLen = 64 - case shake_128: - s.rate = 168 - case shake_256: - s.rate = 136 - default: - panic("sha3: unrecognized function code") - } - - // limit s.buf size to a multiple of s.rate - s.resetBuf() - return &s -} - -func (s *asmState) clone() *asmState { - c := *s - c.buf = c.storage[:len(s.buf):cap(s.buf)] - return &c -} - -// copyIntoBuf copies b into buf. It will panic if there is not enough space to -// store all of b. -func (s *asmState) copyIntoBuf(b []byte) { - bufLen := len(s.buf) - s.buf = s.buf[:len(s.buf)+len(b)] - copy(s.buf[bufLen:], b) -} - -// resetBuf points buf at storage, sets the length to 0 and sets cap to be a -// multiple of the rate. -func (s *asmState) resetBuf() { - max := (cap(s.storage) / s.rate) * s.rate - s.buf = s.storage[:0:max] -} - -// Write (via the embedded io.Writer interface) adds more data to the running hash. -// It never returns an error. -func (s *asmState) Write(b []byte) (int, error) { - if s.state != spongeAbsorbing { - panic("sha3: write to sponge after read") - } - length := len(b) - for len(b) > 0 { - if len(s.buf) == 0 && len(b) >= cap(s.buf) { - // Hash the data directly and push any remaining bytes - // into the buffer. - remainder := len(b) % s.rate - kimd(s.function, &s.a, b[:len(b)-remainder]) - if remainder != 0 { - s.copyIntoBuf(b[len(b)-remainder:]) - } - return length, nil - } - - if len(s.buf) == cap(s.buf) { - // flush the buffer - kimd(s.function, &s.a, s.buf) - s.buf = s.buf[:0] - } - - // copy as much as we can into the buffer - n := len(b) - if len(b) > cap(s.buf)-len(s.buf) { - n = cap(s.buf) - len(s.buf) - } - s.copyIntoBuf(b[:n]) - b = b[n:] - } - return length, nil -} - -// Read squeezes an arbitrary number of bytes from the sponge. -func (s *asmState) Read(out []byte) (n int, err error) { - n = len(out) - - // need to pad if we were absorbing - if s.state == spongeAbsorbing { - s.state = spongeSqueezing - - // write hash directly into out if possible - if len(out)%s.rate == 0 { - klmd(s.function, &s.a, out, s.buf) // len(out) may be 0 - s.buf = s.buf[:0] - return - } - - // write hash into buffer - max := cap(s.buf) - if max > len(out) { - max = (len(out)/s.rate)*s.rate + s.rate - } - klmd(s.function, &s.a, s.buf[:max], s.buf) - s.buf = s.buf[:max] - } - - for len(out) > 0 { - // flush the buffer - if len(s.buf) != 0 { - c := copy(out, s.buf) - out = out[c:] - s.buf = s.buf[c:] - continue - } - - // write hash directly into out if possible - if len(out)%s.rate == 0 { - klmd(s.function|nopad, &s.a, out, nil) - return - } - - // write hash into buffer - s.resetBuf() - if cap(s.buf) > len(out) { - s.buf = s.buf[:(len(out)/s.rate)*s.rate+s.rate] - } - klmd(s.function|nopad, &s.a, s.buf, nil) - } - return -} - -// Sum appends the current hash to b and returns the resulting slice. -// It does not change the underlying hash state. -func (s *asmState) Sum(b []byte) []byte { - if s.outputLen == 0 { - panic("sha3: cannot call Sum on SHAKE functions") - } - - // Copy the state to preserve the original. - a := s.a - - // Hash the buffer. Note that we don't clear it because we - // aren't updating the state. - klmd(s.function, &a, nil, s.buf) - return append(b, a[:s.outputLen]...) -} - -// Reset resets the Hash to its initial state. -func (s *asmState) Reset() { - for i := range s.a { - s.a[i] = 0 - } - s.resetBuf() - s.state = spongeAbsorbing -} - -// Size returns the number of bytes Sum will return. -func (s *asmState) Size() int { - return s.outputLen -} - -// BlockSize returns the hash's underlying block size. -// The Write method must be able to accept any amount -// of data, but it may operate more efficiently if all writes -// are a multiple of the block size. -func (s *asmState) BlockSize() int { - return s.rate -} - -// Clone returns a copy of the ShakeHash in its current state. -func (s *asmState) Clone() ShakeHash { - return s.clone() -} - -// new224Asm returns an assembly implementation of SHA3-224 if available, -// otherwise it returns nil. -func new224Asm() hash.Hash { - if cpu.S390X.HasSHA3 { - return newAsmState(sha3_224) - } - return nil -} - -// new256Asm returns an assembly implementation of SHA3-256 if available, -// otherwise it returns nil. -func new256Asm() hash.Hash { - if cpu.S390X.HasSHA3 { - return newAsmState(sha3_256) - } - return nil -} - -// new384Asm returns an assembly implementation of SHA3-384 if available, -// otherwise it returns nil. -func new384Asm() hash.Hash { - if cpu.S390X.HasSHA3 { - return newAsmState(sha3_384) - } - return nil -} - -// new512Asm returns an assembly implementation of SHA3-512 if available, -// otherwise it returns nil. -func new512Asm() hash.Hash { - if cpu.S390X.HasSHA3 { - return newAsmState(sha3_512) - } - return nil -} - -// newShake128Asm returns an assembly implementation of SHAKE-128 if available, -// otherwise it returns nil. -func newShake128Asm() ShakeHash { - if cpu.S390X.HasSHA3 { - return newAsmState(shake_128) - } - return nil -} - -// newShake256Asm returns an assembly implementation of SHAKE-256 if available, -// otherwise it returns nil. -func newShake256Asm() ShakeHash { - if cpu.S390X.HasSHA3 { - return newAsmState(shake_256) - } - return nil -} diff --git a/vendor/golang.org/x/crypto/sha3/sha3_s390x.s b/vendor/golang.org/x/crypto/sha3/sha3_s390x.s deleted file mode 100644 index a0e051b..0000000 --- a/vendor/golang.org/x/crypto/sha3/sha3_s390x.s +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build gc && !purego -// +build gc,!purego - -#include "textflag.h" - -// func kimd(function code, chain *[200]byte, src []byte) -TEXT ·kimd(SB), NOFRAME|NOSPLIT, $0-40 - MOVD function+0(FP), R0 - MOVD chain+8(FP), R1 - LMG src+16(FP), R2, R3 // R2=base, R3=len - -continue: - WORD $0xB93E0002 // KIMD --, R2 - BVS continue // continue if interrupted - MOVD $0, R0 // reset R0 for pre-go1.8 compilers - RET - -// func klmd(function code, chain *[200]byte, dst, src []byte) -TEXT ·klmd(SB), NOFRAME|NOSPLIT, $0-64 - // TODO: SHAKE support - MOVD function+0(FP), R0 - MOVD chain+8(FP), R1 - LMG dst+16(FP), R2, R3 // R2=base, R3=len - LMG src+40(FP), R4, R5 // R4=base, R5=len - -continue: - WORD $0xB93F0024 // KLMD R2, R4 - BVS continue // continue if interrupted - MOVD $0, R0 // reset R0 for pre-go1.8 compilers - RET diff --git a/vendor/golang.org/x/crypto/sha3/shake.go b/vendor/golang.org/x/crypto/sha3/shake.go deleted file mode 100644 index d7be295..0000000 --- a/vendor/golang.org/x/crypto/sha3/shake.go +++ /dev/null @@ -1,173 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package sha3 - -// This file defines the ShakeHash interface, and provides -// functions for creating SHAKE and cSHAKE instances, as well as utility -// functions for hashing bytes to arbitrary-length output. -// -// -// SHAKE implementation is based on FIPS PUB 202 [1] -// cSHAKE implementations is based on NIST SP 800-185 [2] -// -// [1] https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf -// [2] https://doi.org/10.6028/NIST.SP.800-185 - -import ( - "encoding/binary" - "io" -) - -// ShakeHash defines the interface to hash functions that -// support arbitrary-length output. -type ShakeHash interface { - // Write absorbs more data into the hash's state. It panics if input is - // written to it after output has been read from it. - io.Writer - - // Read reads more output from the hash; reading affects the hash's - // state. (ShakeHash.Read is thus very different from Hash.Sum) - // It never returns an error. - io.Reader - - // Clone returns a copy of the ShakeHash in its current state. - Clone() ShakeHash - - // Reset resets the ShakeHash to its initial state. - Reset() -} - -// cSHAKE specific context -type cshakeState struct { - *state // SHA-3 state context and Read/Write operations - - // initBlock is the cSHAKE specific initialization set of bytes. It is initialized - // by newCShake function and stores concatenation of N followed by S, encoded - // by the method specified in 3.3 of [1]. - // It is stored here in order for Reset() to be able to put context into - // initial state. - initBlock []byte -} - -// Consts for configuring initial SHA-3 state -const ( - dsbyteShake = 0x1f - dsbyteCShake = 0x04 - rate128 = 168 - rate256 = 136 -) - -func bytepad(input []byte, w int) []byte { - // leftEncode always returns max 9 bytes - buf := make([]byte, 0, 9+len(input)+w) - buf = append(buf, leftEncode(uint64(w))...) - buf = append(buf, input...) - padlen := w - (len(buf) % w) - return append(buf, make([]byte, padlen)...) -} - -func leftEncode(value uint64) []byte { - var b [9]byte - binary.BigEndian.PutUint64(b[1:], value) - // Trim all but last leading zero bytes - i := byte(1) - for i < 8 && b[i] == 0 { - i++ - } - // Prepend number of encoded bytes - b[i-1] = 9 - i - return b[i-1:] -} - -func newCShake(N, S []byte, rate int, dsbyte byte) ShakeHash { - c := cshakeState{state: &state{rate: rate, dsbyte: dsbyte}} - - // leftEncode returns max 9 bytes - c.initBlock = make([]byte, 0, 9*2+len(N)+len(S)) - c.initBlock = append(c.initBlock, leftEncode(uint64(len(N)*8))...) - c.initBlock = append(c.initBlock, N...) - c.initBlock = append(c.initBlock, leftEncode(uint64(len(S)*8))...) - c.initBlock = append(c.initBlock, S...) - c.Write(bytepad(c.initBlock, c.rate)) - return &c -} - -// Reset resets the hash to initial state. -func (c *cshakeState) Reset() { - c.state.Reset() - c.Write(bytepad(c.initBlock, c.rate)) -} - -// Clone returns copy of a cSHAKE context within its current state. -func (c *cshakeState) Clone() ShakeHash { - b := make([]byte, len(c.initBlock)) - copy(b, c.initBlock) - return &cshakeState{state: c.clone(), initBlock: b} -} - -// Clone returns copy of SHAKE context within its current state. -func (c *state) Clone() ShakeHash { - return c.clone() -} - -// NewShake128 creates a new SHAKE128 variable-output-length ShakeHash. -// Its generic security strength is 128 bits against all attacks if at -// least 32 bytes of its output are used. -func NewShake128() ShakeHash { - if h := newShake128Asm(); h != nil { - return h - } - return &state{rate: rate128, dsbyte: dsbyteShake} -} - -// NewShake256 creates a new SHAKE256 variable-output-length ShakeHash. -// Its generic security strength is 256 bits against all attacks if -// at least 64 bytes of its output are used. -func NewShake256() ShakeHash { - if h := newShake256Asm(); h != nil { - return h - } - return &state{rate: rate256, dsbyte: dsbyteShake} -} - -// NewCShake128 creates a new instance of cSHAKE128 variable-output-length ShakeHash, -// a customizable variant of SHAKE128. -// N is used to define functions based on cSHAKE, it can be empty when plain cSHAKE is -// desired. S is a customization byte string used for domain separation - two cSHAKE -// computations on same input with different S yield unrelated outputs. -// When N and S are both empty, this is equivalent to NewShake128. -func NewCShake128(N, S []byte) ShakeHash { - if len(N) == 0 && len(S) == 0 { - return NewShake128() - } - return newCShake(N, S, rate128, dsbyteCShake) -} - -// NewCShake256 creates a new instance of cSHAKE256 variable-output-length ShakeHash, -// a customizable variant of SHAKE256. -// N is used to define functions based on cSHAKE, it can be empty when plain cSHAKE is -// desired. S is a customization byte string used for domain separation - two cSHAKE -// computations on same input with different S yield unrelated outputs. -// When N and S are both empty, this is equivalent to NewShake256. -func NewCShake256(N, S []byte) ShakeHash { - if len(N) == 0 && len(S) == 0 { - return NewShake256() - } - return newCShake(N, S, rate256, dsbyteCShake) -} - -// ShakeSum128 writes an arbitrary-length digest of data into hash. -func ShakeSum128(hash, data []byte) { - h := NewShake128() - h.Write(data) - h.Read(hash) -} - -// ShakeSum256 writes an arbitrary-length digest of data into hash. -func ShakeSum256(hash, data []byte) { - h := NewShake256() - h.Write(data) - h.Read(hash) -} diff --git a/vendor/golang.org/x/crypto/sha3/shake_generic.go b/vendor/golang.org/x/crypto/sha3/shake_generic.go deleted file mode 100644 index 5c0710e..0000000 --- a/vendor/golang.org/x/crypto/sha3/shake_generic.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !gc || purego || !s390x -// +build !gc purego !s390x - -package sha3 - -// newShake128Asm returns an assembly implementation of SHAKE-128 if available, -// otherwise it returns nil. -func newShake128Asm() ShakeHash { - return nil -} - -// newShake256Asm returns an assembly implementation of SHAKE-256 if available, -// otherwise it returns nil. -func newShake256Asm() ShakeHash { - return nil -} diff --git a/vendor/golang.org/x/crypto/sha3/xor.go b/vendor/golang.org/x/crypto/sha3/xor.go deleted file mode 100644 index 59c8eb9..0000000 --- a/vendor/golang.org/x/crypto/sha3/xor.go +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build (!amd64 && !386 && !ppc64le) || purego -// +build !amd64,!386,!ppc64le purego - -package sha3 - -// A storageBuf is an aligned array of maxRate bytes. -type storageBuf [maxRate]byte - -func (b *storageBuf) asBytes() *[maxRate]byte { - return (*[maxRate]byte)(b) -} - -var ( - xorIn = xorInGeneric - copyOut = copyOutGeneric - xorInUnaligned = xorInGeneric - copyOutUnaligned = copyOutGeneric -) - -const xorImplementationUnaligned = "generic" diff --git a/vendor/golang.org/x/crypto/sha3/xor_generic.go b/vendor/golang.org/x/crypto/sha3/xor_generic.go deleted file mode 100644 index 8d94771..0000000 --- a/vendor/golang.org/x/crypto/sha3/xor_generic.go +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package sha3 - -import "encoding/binary" - -// xorInGeneric xors the bytes in buf into the state; it -// makes no non-portable assumptions about memory layout -// or alignment. -func xorInGeneric(d *state, buf []byte) { - n := len(buf) / 8 - - for i := 0; i < n; i++ { - a := binary.LittleEndian.Uint64(buf) - d.a[i] ^= a - buf = buf[8:] - } -} - -// copyOutGeneric copies uint64s to a byte buffer. -func copyOutGeneric(d *state, b []byte) { - for i := 0; len(b) >= 8; i++ { - binary.LittleEndian.PutUint64(b, d.a[i]) - b = b[8:] - } -} diff --git a/vendor/golang.org/x/crypto/sha3/xor_unaligned.go b/vendor/golang.org/x/crypto/sha3/xor_unaligned.go deleted file mode 100644 index 1ce6062..0000000 --- a/vendor/golang.org/x/crypto/sha3/xor_unaligned.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build (amd64 || 386 || ppc64le) && !purego -// +build amd64 386 ppc64le -// +build !purego - -package sha3 - -import "unsafe" - -// A storageBuf is an aligned array of maxRate bytes. -type storageBuf [maxRate / 8]uint64 - -func (b *storageBuf) asBytes() *[maxRate]byte { - return (*[maxRate]byte)(unsafe.Pointer(b)) -} - -// xorInUnaligned uses unaligned reads and writes to update d.a to contain d.a -// XOR buf. -func xorInUnaligned(d *state, buf []byte) { - n := len(buf) - bw := (*[maxRate / 8]uint64)(unsafe.Pointer(&buf[0]))[: n/8 : n/8] - if n >= 72 { - d.a[0] ^= bw[0] - d.a[1] ^= bw[1] - d.a[2] ^= bw[2] - d.a[3] ^= bw[3] - d.a[4] ^= bw[4] - d.a[5] ^= bw[5] - d.a[6] ^= bw[6] - d.a[7] ^= bw[7] - d.a[8] ^= bw[8] - } - if n >= 104 { - d.a[9] ^= bw[9] - d.a[10] ^= bw[10] - d.a[11] ^= bw[11] - d.a[12] ^= bw[12] - } - if n >= 136 { - d.a[13] ^= bw[13] - d.a[14] ^= bw[14] - d.a[15] ^= bw[15] - d.a[16] ^= bw[16] - } - if n >= 144 { - d.a[17] ^= bw[17] - } - if n >= 168 { - d.a[18] ^= bw[18] - d.a[19] ^= bw[19] - d.a[20] ^= bw[20] - } -} - -func copyOutUnaligned(d *state, buf []byte) { - ab := (*[maxRate]uint8)(unsafe.Pointer(&d.a[0])) - copy(buf, ab[:]) -} - -var ( - xorIn = xorInUnaligned - copyOut = copyOutUnaligned -) - -const xorImplementationUnaligned = "unaligned" diff --git a/vendor/golang.org/x/crypto/tea/cipher.go b/vendor/golang.org/x/crypto/tea/cipher.go deleted file mode 100644 index c1ff90e..0000000 --- a/vendor/golang.org/x/crypto/tea/cipher.go +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package tea implements the TEA algorithm, as defined in Needham and -// Wheeler's 1994 technical report, “TEA, a Tiny Encryption Algorithm”. See -// http://www.cix.co.uk/~klockstone/tea.pdf for details. -// -// TEA is a legacy cipher and its short block size makes it vulnerable to -// birthday bound attacks (see https://sweet32.info). It should only be used -// where compatibility with legacy systems, not security, is the goal. -// -// Deprecated: any new system should use AES (from crypto/aes, if necessary in -// an AEAD mode like crypto/cipher.NewGCM) or XChaCha20-Poly1305 (from -// golang.org/x/crypto/chacha20poly1305). -package tea - -import ( - "crypto/cipher" - "encoding/binary" - "errors" -) - -const ( - // BlockSize is the size of a TEA block, in bytes. - BlockSize = 8 - - // KeySize is the size of a TEA key, in bytes. - KeySize = 16 - - // delta is the TEA key schedule constant. - delta = 0x9e3779b9 - - // numRounds is the standard number of rounds in TEA. - numRounds = 64 -) - -// tea is an instance of the TEA cipher with a particular key. -type tea struct { - key [16]byte - rounds int -} - -// NewCipher returns an instance of the TEA cipher with the standard number of -// rounds. The key argument must be 16 bytes long. -func NewCipher(key []byte) (cipher.Block, error) { - return NewCipherWithRounds(key, numRounds) -} - -// NewCipherWithRounds returns an instance of the TEA cipher with a given -// number of rounds, which must be even. The key argument must be 16 bytes -// long. -func NewCipherWithRounds(key []byte, rounds int) (cipher.Block, error) { - if len(key) != 16 { - return nil, errors.New("tea: incorrect key size") - } - - if rounds&1 != 0 { - return nil, errors.New("tea: odd number of rounds specified") - } - - c := &tea{ - rounds: rounds, - } - copy(c.key[:], key) - - return c, nil -} - -// BlockSize returns the TEA block size, which is eight bytes. It is necessary -// to satisfy the Block interface in the package "crypto/cipher". -func (*tea) BlockSize() int { - return BlockSize -} - -// Encrypt encrypts the 8 byte buffer src using the key in t and stores the -// result in dst. Note that for amounts of data larger than a block, it is not -// safe to just call Encrypt on successive blocks; instead, use an encryption -// mode like CBC (see crypto/cipher/cbc.go). -func (t *tea) Encrypt(dst, src []byte) { - e := binary.BigEndian - v0, v1 := e.Uint32(src), e.Uint32(src[4:]) - k0, k1, k2, k3 := e.Uint32(t.key[0:]), e.Uint32(t.key[4:]), e.Uint32(t.key[8:]), e.Uint32(t.key[12:]) - - sum := uint32(0) - delta := uint32(delta) - - for i := 0; i < t.rounds/2; i++ { - sum += delta - v0 += ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1) - v1 += ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3) - } - - e.PutUint32(dst, v0) - e.PutUint32(dst[4:], v1) -} - -// Decrypt decrypts the 8 byte buffer src using the key in t and stores the -// result in dst. -func (t *tea) Decrypt(dst, src []byte) { - e := binary.BigEndian - v0, v1 := e.Uint32(src), e.Uint32(src[4:]) - k0, k1, k2, k3 := e.Uint32(t.key[0:]), e.Uint32(t.key[4:]), e.Uint32(t.key[8:]), e.Uint32(t.key[12:]) - - delta := uint32(delta) - sum := delta * uint32(t.rounds/2) // in general, sum = delta * n - - for i := 0; i < t.rounds/2; i++ { - v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3) - v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1) - sum -= delta - } - - e.PutUint32(dst, v0) - e.PutUint32(dst[4:], v1) -} diff --git a/vendor/golang.org/x/crypto/twofish/twofish.go b/vendor/golang.org/x/crypto/twofish/twofish.go deleted file mode 100644 index 1197d75..0000000 --- a/vendor/golang.org/x/crypto/twofish/twofish.go +++ /dev/null @@ -1,348 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package twofish implements Bruce Schneier's Twofish encryption algorithm. -// -// Deprecated: Twofish is a legacy cipher and should not be used for new -// applications. Also, this package does not and will not provide an optimized -// implementation. Instead, use AES (from crypto/aes, if necessary in an AEAD -// mode like crypto/cipher.NewGCM) or XChaCha20-Poly1305 (from -// golang.org/x/crypto/chacha20poly1305). -package twofish // import "golang.org/x/crypto/twofish" - -// Twofish is defined in https://www.schneier.com/paper-twofish-paper.pdf [TWOFISH] - -// This code is a port of the LibTom C implementation. -// See http://libtom.org/?page=features&newsitems=5&whatfile=crypt. -// LibTomCrypt is free for all purposes under the public domain. -// It was heavily inspired by the go blowfish package. - -import "strconv" - -// BlockSize is the constant block size of Twofish. -const BlockSize = 16 - -const mdsPolynomial = 0x169 // x^8 + x^6 + x^5 + x^3 + 1, see [TWOFISH] 4.2 -const rsPolynomial = 0x14d // x^8 + x^6 + x^3 + x^2 + 1, see [TWOFISH] 4.3 - -// A Cipher is an instance of Twofish encryption using a particular key. -type Cipher struct { - s [4][256]uint32 - k [40]uint32 -} - -type KeySizeError int - -func (k KeySizeError) Error() string { - return "crypto/twofish: invalid key size " + strconv.Itoa(int(k)) -} - -// NewCipher creates and returns a Cipher. -// The key argument should be the Twofish key, 16, 24 or 32 bytes. -func NewCipher(key []byte) (*Cipher, error) { - keylen := len(key) - - if keylen != 16 && keylen != 24 && keylen != 32 { - return nil, KeySizeError(keylen) - } - - // k is the number of 64 bit words in key - k := keylen / 8 - - // Create the S[..] words - var S [4 * 4]byte - for i := 0; i < k; i++ { - // Computes [y0 y1 y2 y3] = rs . [x0 x1 x2 x3 x4 x5 x6 x7] - for j, rsRow := range rs { - for k, rsVal := range rsRow { - S[4*i+j] ^= gfMult(key[8*i+k], rsVal, rsPolynomial) - } - } - } - - // Calculate subkeys - c := new(Cipher) - var tmp [4]byte - for i := byte(0); i < 20; i++ { - // A = h(p * 2x, Me) - for j := range tmp { - tmp[j] = 2 * i - } - A := h(tmp[:], key, 0) - - // B = rolc(h(p * (2x + 1), Mo), 8) - for j := range tmp { - tmp[j] = 2*i + 1 - } - B := h(tmp[:], key, 1) - B = rol(B, 8) - - c.k[2*i] = A + B - - // K[2i+1] = (A + 2B) <<< 9 - c.k[2*i+1] = rol(2*B+A, 9) - } - - // Calculate sboxes - switch k { - case 2: - for i := range c.s[0] { - c.s[0][i] = mdsColumnMult(sbox[1][sbox[0][sbox[0][byte(i)]^S[0]]^S[4]], 0) - c.s[1][i] = mdsColumnMult(sbox[0][sbox[0][sbox[1][byte(i)]^S[1]]^S[5]], 1) - c.s[2][i] = mdsColumnMult(sbox[1][sbox[1][sbox[0][byte(i)]^S[2]]^S[6]], 2) - c.s[3][i] = mdsColumnMult(sbox[0][sbox[1][sbox[1][byte(i)]^S[3]]^S[7]], 3) - } - case 3: - for i := range c.s[0] { - c.s[0][i] = mdsColumnMult(sbox[1][sbox[0][sbox[0][sbox[1][byte(i)]^S[0]]^S[4]]^S[8]], 0) - c.s[1][i] = mdsColumnMult(sbox[0][sbox[0][sbox[1][sbox[1][byte(i)]^S[1]]^S[5]]^S[9]], 1) - c.s[2][i] = mdsColumnMult(sbox[1][sbox[1][sbox[0][sbox[0][byte(i)]^S[2]]^S[6]]^S[10]], 2) - c.s[3][i] = mdsColumnMult(sbox[0][sbox[1][sbox[1][sbox[0][byte(i)]^S[3]]^S[7]]^S[11]], 3) - } - default: - for i := range c.s[0] { - c.s[0][i] = mdsColumnMult(sbox[1][sbox[0][sbox[0][sbox[1][sbox[1][byte(i)]^S[0]]^S[4]]^S[8]]^S[12]], 0) - c.s[1][i] = mdsColumnMult(sbox[0][sbox[0][sbox[1][sbox[1][sbox[0][byte(i)]^S[1]]^S[5]]^S[9]]^S[13]], 1) - c.s[2][i] = mdsColumnMult(sbox[1][sbox[1][sbox[0][sbox[0][sbox[0][byte(i)]^S[2]]^S[6]]^S[10]]^S[14]], 2) - c.s[3][i] = mdsColumnMult(sbox[0][sbox[1][sbox[1][sbox[0][sbox[1][byte(i)]^S[3]]^S[7]]^S[11]]^S[15]], 3) - } - } - - return c, nil -} - -// BlockSize returns the Twofish block size, 16 bytes. -func (c *Cipher) BlockSize() int { return BlockSize } - -// store32l stores src in dst in little-endian form. -func store32l(dst []byte, src uint32) { - dst[0] = byte(src) - dst[1] = byte(src >> 8) - dst[2] = byte(src >> 16) - dst[3] = byte(src >> 24) - return -} - -// load32l reads a little-endian uint32 from src. -func load32l(src []byte) uint32 { - return uint32(src[0]) | uint32(src[1])<<8 | uint32(src[2])<<16 | uint32(src[3])<<24 -} - -// rol returns x after a left circular rotation of y bits. -func rol(x, y uint32) uint32 { - return (x << (y & 31)) | (x >> (32 - (y & 31))) -} - -// ror returns x after a right circular rotation of y bits. -func ror(x, y uint32) uint32 { - return (x >> (y & 31)) | (x << (32 - (y & 31))) -} - -// The RS matrix. See [TWOFISH] 4.3 -var rs = [4][8]byte{ - {0x01, 0xA4, 0x55, 0x87, 0x5A, 0x58, 0xDB, 0x9E}, - {0xA4, 0x56, 0x82, 0xF3, 0x1E, 0xC6, 0x68, 0xE5}, - {0x02, 0xA1, 0xFC, 0xC1, 0x47, 0xAE, 0x3D, 0x19}, - {0xA4, 0x55, 0x87, 0x5A, 0x58, 0xDB, 0x9E, 0x03}, -} - -// sbox tables -var sbox = [2][256]byte{ - { - 0xa9, 0x67, 0xb3, 0xe8, 0x04, 0xfd, 0xa3, 0x76, 0x9a, 0x92, 0x80, 0x78, 0xe4, 0xdd, 0xd1, 0x38, - 0x0d, 0xc6, 0x35, 0x98, 0x18, 0xf7, 0xec, 0x6c, 0x43, 0x75, 0x37, 0x26, 0xfa, 0x13, 0x94, 0x48, - 0xf2, 0xd0, 0x8b, 0x30, 0x84, 0x54, 0xdf, 0x23, 0x19, 0x5b, 0x3d, 0x59, 0xf3, 0xae, 0xa2, 0x82, - 0x63, 0x01, 0x83, 0x2e, 0xd9, 0x51, 0x9b, 0x7c, 0xa6, 0xeb, 0xa5, 0xbe, 0x16, 0x0c, 0xe3, 0x61, - 0xc0, 0x8c, 0x3a, 0xf5, 0x73, 0x2c, 0x25, 0x0b, 0xbb, 0x4e, 0x89, 0x6b, 0x53, 0x6a, 0xb4, 0xf1, - 0xe1, 0xe6, 0xbd, 0x45, 0xe2, 0xf4, 0xb6, 0x66, 0xcc, 0x95, 0x03, 0x56, 0xd4, 0x1c, 0x1e, 0xd7, - 0xfb, 0xc3, 0x8e, 0xb5, 0xe9, 0xcf, 0xbf, 0xba, 0xea, 0x77, 0x39, 0xaf, 0x33, 0xc9, 0x62, 0x71, - 0x81, 0x79, 0x09, 0xad, 0x24, 0xcd, 0xf9, 0xd8, 0xe5, 0xc5, 0xb9, 0x4d, 0x44, 0x08, 0x86, 0xe7, - 0xa1, 0x1d, 0xaa, 0xed, 0x06, 0x70, 0xb2, 0xd2, 0x41, 0x7b, 0xa0, 0x11, 0x31, 0xc2, 0x27, 0x90, - 0x20, 0xf6, 0x60, 0xff, 0x96, 0x5c, 0xb1, 0xab, 0x9e, 0x9c, 0x52, 0x1b, 0x5f, 0x93, 0x0a, 0xef, - 0x91, 0x85, 0x49, 0xee, 0x2d, 0x4f, 0x8f, 0x3b, 0x47, 0x87, 0x6d, 0x46, 0xd6, 0x3e, 0x69, 0x64, - 0x2a, 0xce, 0xcb, 0x2f, 0xfc, 0x97, 0x05, 0x7a, 0xac, 0x7f, 0xd5, 0x1a, 0x4b, 0x0e, 0xa7, 0x5a, - 0x28, 0x14, 0x3f, 0x29, 0x88, 0x3c, 0x4c, 0x02, 0xb8, 0xda, 0xb0, 0x17, 0x55, 0x1f, 0x8a, 0x7d, - 0x57, 0xc7, 0x8d, 0x74, 0xb7, 0xc4, 0x9f, 0x72, 0x7e, 0x15, 0x22, 0x12, 0x58, 0x07, 0x99, 0x34, - 0x6e, 0x50, 0xde, 0x68, 0x65, 0xbc, 0xdb, 0xf8, 0xc8, 0xa8, 0x2b, 0x40, 0xdc, 0xfe, 0x32, 0xa4, - 0xca, 0x10, 0x21, 0xf0, 0xd3, 0x5d, 0x0f, 0x00, 0x6f, 0x9d, 0x36, 0x42, 0x4a, 0x5e, 0xc1, 0xe0, - }, - { - 0x75, 0xf3, 0xc6, 0xf4, 0xdb, 0x7b, 0xfb, 0xc8, 0x4a, 0xd3, 0xe6, 0x6b, 0x45, 0x7d, 0xe8, 0x4b, - 0xd6, 0x32, 0xd8, 0xfd, 0x37, 0x71, 0xf1, 0xe1, 0x30, 0x0f, 0xf8, 0x1b, 0x87, 0xfa, 0x06, 0x3f, - 0x5e, 0xba, 0xae, 0x5b, 0x8a, 0x00, 0xbc, 0x9d, 0x6d, 0xc1, 0xb1, 0x0e, 0x80, 0x5d, 0xd2, 0xd5, - 0xa0, 0x84, 0x07, 0x14, 0xb5, 0x90, 0x2c, 0xa3, 0xb2, 0x73, 0x4c, 0x54, 0x92, 0x74, 0x36, 0x51, - 0x38, 0xb0, 0xbd, 0x5a, 0xfc, 0x60, 0x62, 0x96, 0x6c, 0x42, 0xf7, 0x10, 0x7c, 0x28, 0x27, 0x8c, - 0x13, 0x95, 0x9c, 0xc7, 0x24, 0x46, 0x3b, 0x70, 0xca, 0xe3, 0x85, 0xcb, 0x11, 0xd0, 0x93, 0xb8, - 0xa6, 0x83, 0x20, 0xff, 0x9f, 0x77, 0xc3, 0xcc, 0x03, 0x6f, 0x08, 0xbf, 0x40, 0xe7, 0x2b, 0xe2, - 0x79, 0x0c, 0xaa, 0x82, 0x41, 0x3a, 0xea, 0xb9, 0xe4, 0x9a, 0xa4, 0x97, 0x7e, 0xda, 0x7a, 0x17, - 0x66, 0x94, 0xa1, 0x1d, 0x3d, 0xf0, 0xde, 0xb3, 0x0b, 0x72, 0xa7, 0x1c, 0xef, 0xd1, 0x53, 0x3e, - 0x8f, 0x33, 0x26, 0x5f, 0xec, 0x76, 0x2a, 0x49, 0x81, 0x88, 0xee, 0x21, 0xc4, 0x1a, 0xeb, 0xd9, - 0xc5, 0x39, 0x99, 0xcd, 0xad, 0x31, 0x8b, 0x01, 0x18, 0x23, 0xdd, 0x1f, 0x4e, 0x2d, 0xf9, 0x48, - 0x4f, 0xf2, 0x65, 0x8e, 0x78, 0x5c, 0x58, 0x19, 0x8d, 0xe5, 0x98, 0x57, 0x67, 0x7f, 0x05, 0x64, - 0xaf, 0x63, 0xb6, 0xfe, 0xf5, 0xb7, 0x3c, 0xa5, 0xce, 0xe9, 0x68, 0x44, 0xe0, 0x4d, 0x43, 0x69, - 0x29, 0x2e, 0xac, 0x15, 0x59, 0xa8, 0x0a, 0x9e, 0x6e, 0x47, 0xdf, 0x34, 0x35, 0x6a, 0xcf, 0xdc, - 0x22, 0xc9, 0xc0, 0x9b, 0x89, 0xd4, 0xed, 0xab, 0x12, 0xa2, 0x0d, 0x52, 0xbb, 0x02, 0x2f, 0xa9, - 0xd7, 0x61, 0x1e, 0xb4, 0x50, 0x04, 0xf6, 0xc2, 0x16, 0x25, 0x86, 0x56, 0x55, 0x09, 0xbe, 0x91, - }, -} - -// gfMult returns a·b in GF(2^8)/p -func gfMult(a, b byte, p uint32) byte { - B := [2]uint32{0, uint32(b)} - P := [2]uint32{0, p} - var result uint32 - - // branchless GF multiplier - for i := 0; i < 7; i++ { - result ^= B[a&1] - a >>= 1 - B[1] = P[B[1]>>7] ^ (B[1] << 1) - } - result ^= B[a&1] - return byte(result) -} - -// mdsColumnMult calculates y{col} where [y0 y1 y2 y3] = MDS · [x0] -func mdsColumnMult(in byte, col int) uint32 { - mul01 := in - mul5B := gfMult(in, 0x5B, mdsPolynomial) - mulEF := gfMult(in, 0xEF, mdsPolynomial) - - switch col { - case 0: - return uint32(mul01) | uint32(mul5B)<<8 | uint32(mulEF)<<16 | uint32(mulEF)<<24 - case 1: - return uint32(mulEF) | uint32(mulEF)<<8 | uint32(mul5B)<<16 | uint32(mul01)<<24 - case 2: - return uint32(mul5B) | uint32(mulEF)<<8 | uint32(mul01)<<16 | uint32(mulEF)<<24 - case 3: - return uint32(mul5B) | uint32(mul01)<<8 | uint32(mulEF)<<16 | uint32(mul5B)<<24 - } - - panic("unreachable") -} - -// h implements the S-box generation function. See [TWOFISH] 4.3.5 -func h(in, key []byte, offset int) uint32 { - var y [4]byte - for x := range y { - y[x] = in[x] - } - switch len(key) / 8 { - case 4: - y[0] = sbox[1][y[0]] ^ key[4*(6+offset)+0] - y[1] = sbox[0][y[1]] ^ key[4*(6+offset)+1] - y[2] = sbox[0][y[2]] ^ key[4*(6+offset)+2] - y[3] = sbox[1][y[3]] ^ key[4*(6+offset)+3] - fallthrough - case 3: - y[0] = sbox[1][y[0]] ^ key[4*(4+offset)+0] - y[1] = sbox[1][y[1]] ^ key[4*(4+offset)+1] - y[2] = sbox[0][y[2]] ^ key[4*(4+offset)+2] - y[3] = sbox[0][y[3]] ^ key[4*(4+offset)+3] - fallthrough - case 2: - y[0] = sbox[1][sbox[0][sbox[0][y[0]]^key[4*(2+offset)+0]]^key[4*(0+offset)+0]] - y[1] = sbox[0][sbox[0][sbox[1][y[1]]^key[4*(2+offset)+1]]^key[4*(0+offset)+1]] - y[2] = sbox[1][sbox[1][sbox[0][y[2]]^key[4*(2+offset)+2]]^key[4*(0+offset)+2]] - y[3] = sbox[0][sbox[1][sbox[1][y[3]]^key[4*(2+offset)+3]]^key[4*(0+offset)+3]] - } - // [y0 y1 y2 y3] = MDS . [x0 x1 x2 x3] - var mdsMult uint32 - for i := range y { - mdsMult ^= mdsColumnMult(y[i], i) - } - return mdsMult -} - -// Encrypt encrypts a 16-byte block from src to dst, which may overlap. -// Note that for amounts of data larger than a block, -// it is not safe to just call Encrypt on successive blocks; -// instead, use an encryption mode like CBC (see crypto/cipher/cbc.go). -func (c *Cipher) Encrypt(dst, src []byte) { - S1 := c.s[0] - S2 := c.s[1] - S3 := c.s[2] - S4 := c.s[3] - - // Load input - ia := load32l(src[0:4]) - ib := load32l(src[4:8]) - ic := load32l(src[8:12]) - id := load32l(src[12:16]) - - // Pre-whitening - ia ^= c.k[0] - ib ^= c.k[1] - ic ^= c.k[2] - id ^= c.k[3] - - for i := 0; i < 8; i++ { - k := c.k[8+i*4 : 12+i*4] - t2 := S2[byte(ib)] ^ S3[byte(ib>>8)] ^ S4[byte(ib>>16)] ^ S1[byte(ib>>24)] - t1 := S1[byte(ia)] ^ S2[byte(ia>>8)] ^ S3[byte(ia>>16)] ^ S4[byte(ia>>24)] + t2 - ic = ror(ic^(t1+k[0]), 1) - id = rol(id, 1) ^ (t2 + t1 + k[1]) - - t2 = S2[byte(id)] ^ S3[byte(id>>8)] ^ S4[byte(id>>16)] ^ S1[byte(id>>24)] - t1 = S1[byte(ic)] ^ S2[byte(ic>>8)] ^ S3[byte(ic>>16)] ^ S4[byte(ic>>24)] + t2 - ia = ror(ia^(t1+k[2]), 1) - ib = rol(ib, 1) ^ (t2 + t1 + k[3]) - } - - // Output with "undo last swap" - ta := ic ^ c.k[4] - tb := id ^ c.k[5] - tc := ia ^ c.k[6] - td := ib ^ c.k[7] - - store32l(dst[0:4], ta) - store32l(dst[4:8], tb) - store32l(dst[8:12], tc) - store32l(dst[12:16], td) -} - -// Decrypt decrypts a 16-byte block from src to dst, which may overlap. -func (c *Cipher) Decrypt(dst, src []byte) { - S1 := c.s[0] - S2 := c.s[1] - S3 := c.s[2] - S4 := c.s[3] - - // Load input - ta := load32l(src[0:4]) - tb := load32l(src[4:8]) - tc := load32l(src[8:12]) - td := load32l(src[12:16]) - - // Undo undo final swap - ia := tc ^ c.k[6] - ib := td ^ c.k[7] - ic := ta ^ c.k[4] - id := tb ^ c.k[5] - - for i := 8; i > 0; i-- { - k := c.k[4+i*4 : 8+i*4] - t2 := S2[byte(id)] ^ S3[byte(id>>8)] ^ S4[byte(id>>16)] ^ S1[byte(id>>24)] - t1 := S1[byte(ic)] ^ S2[byte(ic>>8)] ^ S3[byte(ic>>16)] ^ S4[byte(ic>>24)] + t2 - ia = rol(ia, 1) ^ (t1 + k[2]) - ib = ror(ib^(t2+t1+k[3]), 1) - - t2 = S2[byte(ib)] ^ S3[byte(ib>>8)] ^ S4[byte(ib>>16)] ^ S1[byte(ib>>24)] - t1 = S1[byte(ia)] ^ S2[byte(ia>>8)] ^ S3[byte(ia>>16)] ^ S4[byte(ia>>24)] + t2 - ic = rol(ic, 1) ^ (t1 + k[0]) - id = ror(id^(t2+t1+k[1]), 1) - } - - // Undo pre-whitening - ia ^= c.k[0] - ib ^= c.k[1] - ic ^= c.k[2] - id ^= c.k[3] - - store32l(dst[0:4], ia) - store32l(dst[4:8], ib) - store32l(dst[8:12], ic) - store32l(dst[12:16], id) -} diff --git a/vendor/golang.org/x/crypto/xtea/block.go b/vendor/golang.org/x/crypto/xtea/block.go deleted file mode 100644 index fcb4e4d..0000000 --- a/vendor/golang.org/x/crypto/xtea/block.go +++ /dev/null @@ -1,66 +0,0 @@ -// 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. - -/* - Implementation adapted from Needham and Wheeler's paper: - http://www.cix.co.uk/~klockstone/xtea.pdf - - A precalculated look up table is used during encryption/decryption for values that are based purely on the key. -*/ - -package xtea - -// XTEA is based on 64 rounds. -const numRounds = 64 - -// blockToUint32 reads an 8 byte slice into two uint32s. -// The block is treated as big endian. -func blockToUint32(src []byte) (uint32, uint32) { - r0 := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3]) - r1 := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7]) - return r0, r1 -} - -// uint32ToBlock writes two uint32s into an 8 byte data block. -// Values are written as big endian. -func uint32ToBlock(v0, v1 uint32, dst []byte) { - dst[0] = byte(v0 >> 24) - dst[1] = byte(v0 >> 16) - dst[2] = byte(v0 >> 8) - dst[3] = byte(v0) - dst[4] = byte(v1 >> 24) - dst[5] = byte(v1 >> 16) - dst[6] = byte(v1 >> 8) - dst[7] = byte(v1 >> 0) -} - -// encryptBlock encrypts a single 8 byte block using XTEA. -func encryptBlock(c *Cipher, dst, src []byte) { - v0, v1 := blockToUint32(src) - - // Two rounds of XTEA applied per loop - for i := 0; i < numRounds; { - v0 += ((v1<<4 ^ v1>>5) + v1) ^ c.table[i] - i++ - v1 += ((v0<<4 ^ v0>>5) + v0) ^ c.table[i] - i++ - } - - uint32ToBlock(v0, v1, dst) -} - -// decryptBlock decrypts a single 8 byte block using XTEA. -func decryptBlock(c *Cipher, dst, src []byte) { - v0, v1 := blockToUint32(src) - - // Two rounds of XTEA applied per loop - for i := numRounds; i > 0; { - i-- - v1 -= ((v0<<4 ^ v0>>5) + v0) ^ c.table[i] - i-- - v0 -= ((v1<<4 ^ v1>>5) + v1) ^ c.table[i] - } - - uint32ToBlock(v0, v1, dst) -} diff --git a/vendor/golang.org/x/crypto/xtea/cipher.go b/vendor/golang.org/x/crypto/xtea/cipher.go deleted file mode 100644 index a4c2fd0..0000000 --- a/vendor/golang.org/x/crypto/xtea/cipher.go +++ /dev/null @@ -1,90 +0,0 @@ -// 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 xtea implements XTEA encryption, as defined in Needham and Wheeler's -// 1997 technical report, "Tea extensions." -// -// XTEA is a legacy cipher and its short block size makes it vulnerable to -// birthday bound attacks (see https://sweet32.info). It should only be used -// where compatibility with legacy systems, not security, is the goal. -// -// Deprecated: any new system should use AES (from crypto/aes, if necessary in -// an AEAD mode like crypto/cipher.NewGCM) or XChaCha20-Poly1305 (from -// golang.org/x/crypto/chacha20poly1305). -package xtea // import "golang.org/x/crypto/xtea" - -// For details, see http://www.cix.co.uk/~klockstone/xtea.pdf - -import "strconv" - -// The XTEA block size in bytes. -const BlockSize = 8 - -// A Cipher is an instance of an XTEA cipher using a particular key. -type Cipher struct { - // table contains a series of precalculated values that are used each round. - table [64]uint32 -} - -type KeySizeError int - -func (k KeySizeError) Error() string { - return "crypto/xtea: invalid key size " + strconv.Itoa(int(k)) -} - -// NewCipher creates and returns a new Cipher. -// The key argument should be the XTEA key. -// XTEA only supports 128 bit (16 byte) keys. -func NewCipher(key []byte) (*Cipher, error) { - k := len(key) - switch k { - default: - return nil, KeySizeError(k) - case 16: - break - } - - c := new(Cipher) - initCipher(c, key) - - return c, nil -} - -// BlockSize returns the XTEA block size, 8 bytes. -// It is necessary to satisfy the Block interface in the -// package "crypto/cipher". -func (c *Cipher) BlockSize() int { return BlockSize } - -// Encrypt encrypts the 8 byte buffer src using the key and stores the result in dst. -// Note that for amounts of data larger than a block, -// it is not safe to just call Encrypt on successive blocks; -// instead, use an encryption mode like CBC (see crypto/cipher/cbc.go). -func (c *Cipher) Encrypt(dst, src []byte) { encryptBlock(c, dst, src) } - -// Decrypt decrypts the 8 byte buffer src using the key and stores the result in dst. -func (c *Cipher) Decrypt(dst, src []byte) { decryptBlock(c, dst, src) } - -// initCipher initializes the cipher context by creating a look up table -// of precalculated values that are based on the key. -func initCipher(c *Cipher, key []byte) { - // Load the key into four uint32s - var k [4]uint32 - for i := 0; i < len(k); i++ { - j := i << 2 // Multiply by 4 - k[i] = uint32(key[j+0])<<24 | uint32(key[j+1])<<16 | uint32(key[j+2])<<8 | uint32(key[j+3]) - } - - // Precalculate the table - const delta = 0x9E3779B9 - var sum uint32 - - // Two rounds of XTEA applied per loop - for i := 0; i < numRounds; { - c.table[i] = sum + k[sum&3] - i++ - sum += delta - c.table[i] = sum + k[(sum>>11)&3] - i++ - } -} diff --git a/vendor/golang.org/x/net/AUTHORS b/vendor/golang.org/x/net/AUTHORS deleted file mode 100644 index 15167cd..0000000 --- a/vendor/golang.org/x/net/AUTHORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code refers to The Go Authors for copyright purposes. -# The master list of authors is in the main Go distribution, -# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/net/CONTRIBUTORS b/vendor/golang.org/x/net/CONTRIBUTORS deleted file mode 100644 index 1c4577e..0000000 --- a/vendor/golang.org/x/net/CONTRIBUTORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code was written by the Go contributors. -# The master list of contributors is in the main Go distribution, -# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/net/LICENSE b/vendor/golang.org/x/net/LICENSE deleted file mode 100644 index 6a66aea..0000000 --- a/vendor/golang.org/x/net/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. - -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 Inc. 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/net/PATENTS b/vendor/golang.org/x/net/PATENTS deleted file mode 100644 index 7330990..0000000 --- a/vendor/golang.org/x/net/PATENTS +++ /dev/null @@ -1,22 +0,0 @@ -Additional IP Rights Grant (Patents) - -"This implementation" means the copyrightable works distributed by -Google as part of the Go project. - -Google hereby grants to You a perpetual, worldwide, non-exclusive, -no-charge, royalty-free, irrevocable (except as stated in this section) -patent license to make, have made, use, offer to sell, sell, import, -transfer and otherwise run, modify and propagate the contents of this -implementation of Go, where such license applies only to those patent -claims, both currently owned or controlled by Google and acquired in -the future, licensable by Google that are necessarily infringed by this -implementation of Go. This grant does not include claims that would be -infringed only as a consequence of further modification of this -implementation. If you or your agent or exclusive licensee institute or -order or agree to the institution of patent litigation against any -entity (including a cross-claim or counterclaim in a lawsuit) alleging -that this implementation of Go or any code incorporated within this -implementation of Go constitutes direct or contributory patent -infringement, or inducement of patent infringement, then any patent -rights granted to you under this License for this implementation of Go -shall terminate as of the date such litigation is filed. diff --git a/vendor/golang.org/x/net/bpf/asm.go b/vendor/golang.org/x/net/bpf/asm.go deleted file mode 100644 index 15e21b1..0000000 --- a/vendor/golang.org/x/net/bpf/asm.go +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -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 deleted file mode 100644 index 12f3ee8..0000000 --- a/vendor/golang.org/x/net/bpf/constants.go +++ /dev/null @@ -1,222 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -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 deleted file mode 100644 index ae62feb..0000000 --- a/vendor/golang.org/x/net/bpf/doc.go +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -/* - -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 deleted file mode 100644 index 3cffcaa..0000000 --- a/vendor/golang.org/x/net/bpf/instructions.go +++ /dev/null @@ -1,726 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -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 deleted file mode 100644 index 43e35f0..0000000 --- a/vendor/golang.org/x/net/bpf/setter.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 73f57f1..0000000 --- a/vendor/golang.org/x/net/bpf/vm.go +++ /dev/null @@ -1,150 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -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 deleted file mode 100644 index cf8947c..0000000 --- a/vendor/golang.org/x/net/bpf/vm_instructions.go +++ /dev/null @@ -1,182 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -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 := int(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 := int(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/internal/iana/const.go b/vendor/golang.org/x/net/internal/iana/const.go deleted file mode 100644 index cea712f..0000000 --- a/vendor/golang.org/x/net/internal/iana/const.go +++ /dev/null @@ -1,223 +0,0 @@ -// 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 deleted file mode 100644 index 4bdaaaf..0000000 --- a/vendor/golang.org/x/net/internal/socket/cmsghdr.go +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos -// +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 deleted file mode 100644 index 0d30e0a..0000000 --- a/vendor/golang.org/x/net/internal/socket/cmsghdr_bsd.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || darwin || dragonfly || freebsd || netbsd || openbsd -// +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 deleted file mode 100644 index 4936e8a..0000000 --- a/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_32bit.go +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build (arm || mips || mipsle || 386 || ppc) && linux -// +build arm mips mipsle 386 ppc -// +build 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 deleted file mode 100644 index 1ba4310..0000000 --- a/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_64bit.go +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build (arm64 || amd64 || ppc64 || ppc64le || mips64 || mips64le || riscv64 || s390x) && linux -// +build arm64 amd64 ppc64 ppc64le mips64 mips64le riscv64 s390x -// +build 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 deleted file mode 100644 index d3dbe1b..0000000 --- a/vendor/golang.org/x/net/internal/socket/cmsghdr_solaris_64bit.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build amd64 && solaris -// +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 deleted file mode 100644 index 1d9f2ed..0000000 --- a/vendor/golang.org/x/net/internal/socket/cmsghdr_stub.go +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !zos -// +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 deleted file mode 100644 index aa1b062..0000000 --- a/vendor/golang.org/x/net/internal/socket/cmsghdr_unix.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris -// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris - -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 deleted file mode 100644 index 98be146..0000000 --- a/vendor/golang.org/x/net/internal/socket/cmsghdr_zos_s390x.go +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package socket - -import "syscall" - -func (h *cmsghdr) set(l, lvl, typ int) { - h.Len = int32(l) - h.Level = int32(lvl) - h.Type = int32(typ) -} - -func controlHeaderLen() int { - return syscall.CmsgLen(0) -} - -func controlMessageLen(dataLen int) int { - return syscall.CmsgLen(dataLen) -} - -func controlMessageSpace(dataLen int) int { - return syscall.CmsgSpace(dataLen) -} diff --git a/vendor/golang.org/x/net/internal/socket/complete_dontwait.go b/vendor/golang.org/x/net/internal/socket/complete_dontwait.go deleted file mode 100644 index 5b1d50a..0000000 --- a/vendor/golang.org/x/net/internal/socket/complete_dontwait.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris -// +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 deleted file mode 100644 index be63409..0000000 --- a/vendor/golang.org/x/net/internal/socket/complete_nodontwait.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || windows || zos -// +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 deleted file mode 100644 index 90ab4ca..0000000 --- a/vendor/golang.org/x/net/internal/socket/empty.s +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build darwin && go1.12 -// +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 deleted file mode 100644 index 78f4129..0000000 --- a/vendor/golang.org/x/net/internal/socket/error_unix.go +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos -// +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 deleted file mode 100644 index 6a6379a..0000000 --- a/vendor/golang.org/x/net/internal/socket/error_windows.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 2b8fbb3..0000000 --- a/vendor/golang.org/x/net/internal/socket/iovec_32bit.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build (arm || mips || mipsle || 386 || ppc) && (darwin || dragonfly || freebsd || linux || netbsd || openbsd) -// +build arm mips mipsle 386 ppc -// +build 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 deleted file mode 100644 index 3dc5def..0000000 --- a/vendor/golang.org/x/net/internal/socket/iovec_64bit.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build (arm64 || amd64 || ppc64 || ppc64le || mips64 || mips64le || riscv64 || s390x) && (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || zos) -// +build arm64 amd64 ppc64 ppc64le mips64 mips64le riscv64 s390x -// +build 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 deleted file mode 100644 index f7da2bc..0000000 --- a/vendor/golang.org/x/net/internal/socket/iovec_solaris_64bit.go +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build amd64 && solaris -// +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 deleted file mode 100644 index 14caf52..0000000 --- a/vendor/golang.org/x/net/internal/socket/iovec_stub.go +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !zos -// +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 deleted file mode 100644 index 113e773..0000000 --- a/vendor/golang.org/x/net/internal/socket/mmsghdr_stub.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !aix && !linux && !netbsd -// +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 deleted file mode 100644 index 40ebeda..0000000 --- a/vendor/golang.org/x/net/internal/socket/mmsghdr_unix.go +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || linux || netbsd -// +build aix linux netbsd - -package socket - -import ( - "net" - "sync" -) - -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 -} - -var defaultMmsghdrsPool = mmsghdrsPool{ - p: sync.Pool{ - New: func() interface{} { - return new(mmsghdrsPacker) - }, - }, -} - -type mmsghdrsPool struct { - p sync.Pool -} - -func (p *mmsghdrsPool) Get() *mmsghdrsPacker { - return p.p.Get().(*mmsghdrsPacker) -} - -func (p *mmsghdrsPool) Put(packer *mmsghdrsPacker) { - p.p.Put(packer) -} diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_bsd.go b/vendor/golang.org/x/net/internal/socket/msghdr_bsd.go deleted file mode 100644 index 25f6847..0000000 --- a/vendor/golang.org/x/net/internal/socket/msghdr_bsd.go +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || darwin || dragonfly || freebsd || netbsd || openbsd -// +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 deleted file mode 100644 index 5b8e00f..0000000 --- a/vendor/golang.org/x/net/internal/socket/msghdr_bsdvar.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || darwin || dragonfly || freebsd || netbsd -// +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 deleted file mode 100644 index c3c7cc4..0000000 --- a/vendor/golang.org/x/net/internal/socket/msghdr_linux.go +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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)) - } else { - h.Name = nil - h.Namelen = 0 - } -} - -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 deleted file mode 100644 index b4658fb..0000000 --- a/vendor/golang.org/x/net/internal/socket/msghdr_linux_32bit.go +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build (arm || mips || mipsle || 386 || ppc) && linux -// +build arm mips mipsle 386 ppc -// +build 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 deleted file mode 100644 index c9c592d..0000000 --- a/vendor/golang.org/x/net/internal/socket/msghdr_linux_64bit.go +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build (arm64 || amd64 || ppc64 || ppc64le || mips64 || mips64le || riscv64 || s390x) && linux -// +build arm64 amd64 ppc64 ppc64le mips64 mips64le riscv64 s390x -// +build 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 deleted file mode 100644 index 71a69e2..0000000 --- a/vendor/golang.org/x/net/internal/socket/msghdr_openbsd.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 3098f5d..0000000 --- a/vendor/golang.org/x/net/internal/socket/msghdr_solaris_64bit.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build amd64 && solaris -// +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 deleted file mode 100644 index eb79151..0000000 --- a/vendor/golang.org/x/net/internal/socket/msghdr_stub.go +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !zos -// +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 deleted file mode 100644 index 324e9ee..0000000 --- a/vendor/golang.org/x/net/internal/socket/msghdr_zos_s390x.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build s390x && zos -// +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 deleted file mode 100644 index de0ad42..0000000 --- a/vendor/golang.org/x/net/internal/socket/norace.go +++ /dev/null @@ -1,13 +0,0 @@ -// 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 -// +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 deleted file mode 100644 index f0a28a6..0000000 --- a/vendor/golang.org/x/net/internal/socket/race.go +++ /dev/null @@ -1,38 +0,0 @@ -// 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 -// +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 deleted file mode 100644 index 87e8107..0000000 --- a/vendor/golang.org/x/net/internal/socket/rawconn.go +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 3fcb51b..0000000 --- a/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux -// +build linux - -package socket - -import ( - "net" - "os" -) - -func (c *Conn) recvMsgs(ms []Message, flags int) (int, error) { - for i := range ms { - ms[i].raceWrite() - } - packer := defaultMmsghdrsPool.Get() - defer defaultMmsghdrsPool.Put(packer) - var parseFn func([]byte, string) (net.Addr, error) - if c.network != "tcp" { - parseFn = parseInetAddr - } - hs := packer.pack(ms, parseFn, nil) - var operr error - var n int - fn := func(s uintptr) bool { - n, operr = recvmmsg(s, hs, flags) - return ioComplete(flags, operr) - } - if err := c.c.Read(fn); err != nil { - return n, err - } - if operr != nil { - return n, os.NewSyscallError("recvmmsg", operr) - } - 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() - } - packer := defaultMmsghdrsPool.Get() - defer defaultMmsghdrsPool.Put(packer) - var marshalFn func(net.Addr, []byte) int - if c.network != "tcp" { - marshalFn = marshalInetAddr - } - hs := packer.pack(ms, nil, marshalFn) - var operr error - var n int - fn := func(s uintptr) bool { - n, operr = sendmmsg(s, hs, flags) - return ioComplete(flags, operr) - } - if err := c.c.Write(fn); err != nil { - return n, err - } - if operr != nil { - return n, os.NewSyscallError("sendmmsg", operr) - } - 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 deleted file mode 100644 index ba53f56..0000000 --- a/vendor/golang.org/x/net/internal/socket/rawconn_msg.go +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || windows || zos -// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris windows zos - -package socket - -import ( - "os" -) - -func (c *Conn) recvMsg(m *Message, flags int) error { - m.raceWrite() - var h msghdr - vs := make([]iovec, len(m.Buffers)) - var sa []byte - if c.network != "tcp" { - sa = make([]byte, sizeofSockaddrInet6) - } - h.pack(vs, m.Buffers, m.OOB, sa) - var operr error - var n int - fn := func(s uintptr) bool { - n, operr = recvmsg(s, &h, flags) - return ioComplete(flags, operr) - } - if err := c.c.Read(fn); err != nil { - return err - } - if operr != nil { - return os.NewSyscallError("recvmsg", operr) - } - if c.network != "tcp" { - var err error - m.Addr, err = parseInetAddr(sa[:], c.network) - if err != nil { - return err - } - } - m.N = n - m.NN = h.controllen() - m.Flags = h.flags() - return nil -} - -func (c *Conn) sendMsg(m *Message, flags int) error { - m.raceRead() - var h msghdr - vs := make([]iovec, len(m.Buffers)) - var sa []byte - if m.Addr != nil { - var a [sizeofSockaddrInet6]byte - n := marshalInetAddr(m.Addr, a[:]) - sa = a[:n] - } - h.pack(vs, m.Buffers, m.OOB, sa) - var operr error - var n int - fn := func(s uintptr) bool { - n, operr = sendmsg(s, &h, 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 deleted file mode 100644 index 02f3285..0000000 --- a/vendor/golang.org/x/net/internal/socket/rawconn_nommsg.go +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !linux -// +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 deleted file mode 100644 index dd78587..0000000 --- a/vendor/golang.org/x/net/internal/socket/rawconn_nomsg.go +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !windows && !zos -// +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 deleted file mode 100644 index dba47bf..0000000 --- a/vendor/golang.org/x/net/internal/socket/socket.go +++ /dev/null @@ -1,280 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package 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 deleted file mode 100644 index 4a26af1..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index b6cd770..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_bsd.go +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || darwin || dragonfly || freebsd || openbsd -// +build aix darwin dragonfly freebsd openbsd - -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 deleted file mode 100644 index 5d99f23..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_const_unix.go +++ /dev/null @@ -1,21 +0,0 @@ -// 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 -// +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_linkname.go b/vendor/golang.org/x/net/internal/socket/sys_linkname.go deleted file mode 100644 index 21734af..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_linkname.go +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || (go1.12 && darwin) -// +build aix go1.12,darwin - -package socket - -import ( - "syscall" - "unsafe" -) - -//go:linkname syscall_getsockopt syscall.getsockopt -func syscall_getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *uint32) 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 -} - -//go:linkname syscall_setsockopt syscall.setsockopt -func syscall_setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) error - -func setsockopt(s uintptr, level, name int, b []byte) error { - return syscall_setsockopt(int(s), level, name, unsafe.Pointer(&b[0]), uintptr(len(b))) -} - -//go:linkname syscall_recvmsg syscall.recvmsg -func syscall_recvmsg(s int, msg *syscall.Msghdr, flags int) (n int, err error) - -func recvmsg(s uintptr, h *msghdr, flags int) (int, error) { - return syscall_recvmsg(int(s), (*syscall.Msghdr)(unsafe.Pointer(h)), flags) -} - -//go:linkname syscall_sendmsg syscall.sendmsg -func syscall_sendmsg(s int, msg *syscall.Msghdr, flags int) (n int, err error) - -func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { - return syscall_sendmsg(int(s), (*syscall.Msghdr)(unsafe.Pointer(h)), flags) -} diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux.go b/vendor/golang.org/x/net/internal/socket/sys_linux.go deleted file mode 100644 index 76f5b8a..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_linux.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux && !s390x && !386 -// +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 deleted file mode 100644 index 6512153..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_linux_386.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package socket - -import ( - "syscall" - "unsafe" -) - -const ( - sysSETSOCKOPT = 0xe - sysGETSOCKOPT = 0xf - sysSENDMSG = 0x10 - sysRECVMSG = 0x11 - 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 getsockopt(s uintptr, level, name int, b []byte) (int, error) { - l := uint32(len(b)) - _, errno := socketcall(sysGETSOCKOPT, 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 := socketcall(sysSETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)), 0) - return errnoErr(errno) -} - -func recvmsg(s uintptr, h *msghdr, flags int) (int, error) { - n, errno := socketcall(sysRECVMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) - return int(n), errnoErr(errno) -} - -func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { - n, errno := socketcall(sysSENDMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) - return int(n), errnoErr(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 deleted file mode 100644 index 93e7d75..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_linux_386.s +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -#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 deleted file mode 100644 index 9decee2..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_linux_amd64.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index d753b43..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_linux_arm.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index b670894..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_linux_arm64.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 9c0d740..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_linux_mips.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 071a4ab..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_linux_mips64.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 071a4ab..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_linux_mips64le.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 9c0d740..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_linux_mipsle.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 90cfaa9..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_linux_ppc.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -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 deleted file mode 100644 index 21c1e3f..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 21c1e3f..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64le.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 5b128fb..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_linux_riscv64.go +++ /dev/null @@ -1,13 +0,0 @@ -// 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 -// +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 deleted file mode 100644 index 6512153..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package socket - -import ( - "syscall" - "unsafe" -) - -const ( - sysSETSOCKOPT = 0xe - sysGETSOCKOPT = 0xf - sysSENDMSG = 0x10 - sysRECVMSG = 0x11 - 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 getsockopt(s uintptr, level, name int, b []byte) (int, error) { - l := uint32(len(b)) - _, errno := socketcall(sysGETSOCKOPT, 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 := socketcall(sysSETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)), 0) - return errnoErr(errno) -} - -func recvmsg(s uintptr, h *msghdr, flags int) (int, error) { - n, errno := socketcall(sysRECVMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) - return int(n), errnoErr(errno) -} - -func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { - n, errno := socketcall(sysSENDMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) - return int(n), errnoErr(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 deleted file mode 100644 index 06d7562..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.s +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -#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 deleted file mode 100644 index 431851c..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_netbsd.go +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 42b8f23..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_posix.go +++ /dev/null @@ -1,185 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || windows || zos -// +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_solaris.go b/vendor/golang.org/x/net/internal/socket/sys_solaris.go deleted file mode 100644 index e79ca95..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_solaris.go +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package socket - -import ( - "syscall" - "unsafe" -) - -//go:cgo_import_dynamic libc___xnet_getsockopt __xnet_getsockopt "libsocket.so" -//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so" -//go:cgo_import_dynamic libc___xnet_recvmsg __xnet_recvmsg "libsocket.so" -//go:cgo_import_dynamic libc___xnet_sendmsg __xnet_sendmsg "libsocket.so" - -//go:linkname procGetsockopt libc___xnet_getsockopt -//go:linkname procSetsockopt libc_setsockopt -//go:linkname procRecvmsg libc___xnet_recvmsg -//go:linkname procSendmsg libc___xnet_sendmsg - -var ( - procGetsockopt uintptr - procSetsockopt uintptr - procRecvmsg uintptr - procSendmsg uintptr -) - -func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (uintptr, uintptr, syscall.Errno) -func rawSysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (uintptr, uintptr, syscall.Errno) - -func getsockopt(s uintptr, level, name int, b []byte) (int, error) { - l := uint32(len(b)) - _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procGetsockopt)), 5, 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 := sysvicall6(uintptr(unsafe.Pointer(&procSetsockopt)), 5, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)), 0) - return errnoErr(errno) -} - -func recvmsg(s uintptr, h *msghdr, flags int) (int, error) { - n, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procRecvmsg)), 3, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) - return int(n), errnoErr(errno) -} - -func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { - n, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procSendmsg)), 3, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) - return int(n), errnoErr(errno) -} - -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_solaris_amd64.s b/vendor/golang.org/x/net/internal/socket/sys_solaris_amd64.s deleted file mode 100644 index a18ac5e..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_solaris_amd64.s +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -#include "textflag.h" - -TEXT ·sysvicall6(SB),NOSPLIT,$0-88 - JMP syscall·sysvicall6(SB) - -TEXT ·rawSysvicall6(SB),NOSPLIT,$0-88 - JMP syscall·rawSysvicall6(SB) diff --git a/vendor/golang.org/x/net/internal/socket/sys_stub.go b/vendor/golang.org/x/net/internal/socket/sys_stub.go deleted file mode 100644 index 381e45e..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_stub.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !windows && !zos -// +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, h *msghdr, flags int) (int, error) { - return 0, errNotImplemented -} - -func sendmsg(s uintptr, h *msghdr, 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 deleted file mode 100644 index c98ebae..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_unix.go +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build dragonfly || freebsd || (linux && !s390x && !386) || netbsd || openbsd -// +build dragonfly freebsd linux,!s390x,!386 netbsd openbsd - -package socket - -import ( - "syscall" - "unsafe" -) - -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, h *msghdr, flags int) (int, error) { - n, _, errno := syscall.Syscall(syscall.SYS_RECVMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags)) - return int(n), errnoErr(errno) -} - -func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { - n, _, errno := syscall.Syscall(syscall.SYS_SENDMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags)) - return int(n), errnoErr(errno) -} diff --git a/vendor/golang.org/x/net/internal/socket/sys_windows.go b/vendor/golang.org/x/net/internal/socket/sys_windows.go deleted file mode 100644 index 2de0d68..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_windows.go +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package socket - -import ( - "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, h *msghdr, flags int) (int, error) { - return 0, errNotImplemented -} - -func sendmsg(s uintptr, h *msghdr, 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 deleted file mode 100644 index 1e38b92..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_zos_s390x.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package socket - -import ( - "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, h *msghdr, flags int) (int, error) { - n, _, errno := syscall_syscall(syscall.SYS___RECVMSG_A, s, uintptr(unsafe.Pointer(h)), uintptr(flags)) - return int(n), errnoErr(errno) -} - -func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { - 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 deleted file mode 100644 index 60d5839..0000000 --- a/vendor/golang.org/x/net/internal/socket/sys_zos_s390x.s +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -#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 deleted file mode 100644 index 00691bd..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_aix_ppc64.go +++ /dev/null @@ -1,40 +0,0 @@ -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs defs_aix.go - -// Added for go1.11 compatibility -//go:build aix -// +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_386.go b/vendor/golang.org/x/net/internal/socket/zsys_darwin_386.go deleted file mode 100644 index 5acf6db..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_darwin_386.go +++ /dev/null @@ -1,30 +0,0 @@ -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs defs_darwin.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_darwin_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_darwin_amd64.go deleted file mode 100644 index 98dcfe4..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_darwin_amd64.go +++ /dev/null @@ -1,32 +0,0 @@ -// 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_arm.go b/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm.go deleted file mode 100644 index 5acf6db..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm.go +++ /dev/null @@ -1,30 +0,0 @@ -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs defs_darwin.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_darwin_arm64.go b/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm64.go deleted file mode 100644 index 98dcfe4..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm64.go +++ /dev/null @@ -1,32 +0,0 @@ -// 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 deleted file mode 100644 index 636d129..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_dragonfly_amd64.go +++ /dev/null @@ -1,32 +0,0 @@ -// 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 deleted file mode 100644 index 87707fe..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_freebsd_386.go +++ /dev/null @@ -1,30 +0,0 @@ -// 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 deleted file mode 100644 index 7db7781..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_freebsd_amd64.go +++ /dev/null @@ -1,32 +0,0 @@ -// 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 deleted file mode 100644 index 87707fe..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm.go +++ /dev/null @@ -1,30 +0,0 @@ -// 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 deleted file mode 100644 index 7db7781..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm64.go +++ /dev/null @@ -1,32 +0,0 @@ -// 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_linux_386.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_386.go deleted file mode 100644 index 4c19269..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_386.go +++ /dev/null @@ -1,35 +0,0 @@ -// 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 deleted file mode 100644 index 3dcd5c8..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go +++ /dev/null @@ -1,38 +0,0 @@ -// 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 deleted file mode 100644 index 4c19269..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go +++ /dev/null @@ -1,35 +0,0 @@ -// 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 deleted file mode 100644 index 3dcd5c8..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go +++ /dev/null @@ -1,38 +0,0 @@ -// 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_mips.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go deleted file mode 100644 index 4c19269..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go +++ /dev/null @@ -1,35 +0,0 @@ -// 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 deleted file mode 100644 index 3dcd5c8..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go +++ /dev/null @@ -1,38 +0,0 @@ -// 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 deleted file mode 100644 index 3dcd5c8..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go +++ /dev/null @@ -1,38 +0,0 @@ -// 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 deleted file mode 100644 index 4c19269..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go +++ /dev/null @@ -1,35 +0,0 @@ -// 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 deleted file mode 100644 index 59b71da..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc.go +++ /dev/null @@ -1,35 +0,0 @@ -// 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 deleted file mode 100644 index 3dcd5c8..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go +++ /dev/null @@ -1,38 +0,0 @@ -// 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 deleted file mode 100644 index 3dcd5c8..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go +++ /dev/null @@ -1,38 +0,0 @@ -// 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 deleted file mode 100644 index c066272..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_riscv64.go +++ /dev/null @@ -1,40 +0,0 @@ -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs defs_linux.go - -//go:build riscv64 -// +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 deleted file mode 100644 index 3dcd5c8..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go +++ /dev/null @@ -1,38 +0,0 @@ -// 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 deleted file mode 100644 index f95572d..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go +++ /dev/null @@ -1,35 +0,0 @@ -// 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 deleted file mode 100644 index a92fd60..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go +++ /dev/null @@ -1,38 +0,0 @@ -// 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 deleted file mode 100644 index f95572d..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go +++ /dev/null @@ -1,35 +0,0 @@ -// 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 deleted file mode 100644 index a92fd60..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm64.go +++ /dev/null @@ -1,38 +0,0 @@ -// 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 deleted file mode 100644 index e792ec2..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_openbsd_386.go +++ /dev/null @@ -1,30 +0,0 @@ -// 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 deleted file mode 100644 index b68ff2d..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_openbsd_amd64.go +++ /dev/null @@ -1,32 +0,0 @@ -// 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 deleted file mode 100644 index e792ec2..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm.go +++ /dev/null @@ -1,30 +0,0 @@ -// 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 deleted file mode 100644 index b68ff2d..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm64.go +++ /dev/null @@ -1,32 +0,0 @@ -// 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 deleted file mode 100644 index 3c9576e..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_openbsd_mips64.go +++ /dev/null @@ -1,30 +0,0 @@ -// 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 deleted file mode 100644 index 359cfec..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_solaris_amd64.go +++ /dev/null @@ -1,32 +0,0 @@ -// 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 deleted file mode 100644 index 49b62c8..0000000 --- a/vendor/golang.org/x/net/internal/socket/zsys_zos_s390x.go +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -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 deleted file mode 100644 index 1a3a4fc..0000000 --- a/vendor/golang.org/x/net/ipv4/batch.go +++ /dev/null @@ -1,194 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index a2b02ca..0000000 --- a/vendor/golang.org/x/net/ipv4/control.go +++ /dev/null @@ -1,144 +0,0 @@ -// 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 deleted file mode 100644 index b7385df..0000000 --- a/vendor/golang.org/x/net/ipv4/control_bsd.go +++ /dev/null @@ -1,44 +0,0 @@ -// 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 -// +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 deleted file mode 100644 index 0e748db..0000000 --- a/vendor/golang.org/x/net/ipv4/control_pktinfo.go +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build darwin || linux || solaris -// +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 deleted file mode 100644 index f27322c..0000000 --- a/vendor/golang.org/x/net/ipv4/control_stub.go +++ /dev/null @@ -1,14 +0,0 @@ -// 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 -// +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 deleted file mode 100644 index 2413e02..0000000 --- a/vendor/golang.org/x/net/ipv4/control_unix.go +++ /dev/null @@ -1,76 +0,0 @@ -// 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 -// +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 deleted file mode 100644 index 82c6306..0000000 --- a/vendor/golang.org/x/net/ipv4/control_windows.go +++ /dev/null @@ -1,12 +0,0 @@ -// 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 deleted file mode 100644 index de11c42..0000000 --- a/vendor/golang.org/x/net/ipv4/control_zos.go +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -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 deleted file mode 100644 index c191c22..0000000 --- a/vendor/golang.org/x/net/ipv4/dgramopt.go +++ /dev/null @@ -1,264 +0,0 @@ -// 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 deleted file mode 100644 index 2458349..0000000 --- a/vendor/golang.org/x/net/ipv4/doc.go +++ /dev/null @@ -1,244 +0,0 @@ -// 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 deleted file mode 100644 index 4a6d7a8..0000000 --- a/vendor/golang.org/x/net/ipv4/endpoint.go +++ /dev/null @@ -1,186 +0,0 @@ -// 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 deleted file mode 100644 index 51c1237..0000000 --- a/vendor/golang.org/x/net/ipv4/genericopt.go +++ /dev/null @@ -1,55 +0,0 @@ -// 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 deleted file mode 100644 index a00a3ea..0000000 --- a/vendor/golang.org/x/net/ipv4/header.go +++ /dev/null @@ -1,172 +0,0 @@ -// 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 deleted file mode 100644 index e845a73..0000000 --- a/vendor/golang.org/x/net/ipv4/helper.go +++ /dev/null @@ -1,77 +0,0 @@ -// 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 deleted file mode 100644 index 4375b40..0000000 --- a/vendor/golang.org/x/net/ipv4/iana.go +++ /dev/null @@ -1,38 +0,0 @@ -// 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 deleted file mode 100644 index 9902bb3..0000000 --- a/vendor/golang.org/x/net/ipv4/icmp.go +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 6e1c5c8..0000000 --- a/vendor/golang.org/x/net/ipv4/icmp_linux.go +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index cd4ee6e..0000000 --- a/vendor/golang.org/x/net/ipv4/icmp_stub.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !linux -// +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 deleted file mode 100644 index 7d784e0..0000000 --- a/vendor/golang.org/x/net/ipv4/packet.go +++ /dev/null @@ -1,117 +0,0 @@ -// 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 deleted file mode 100644 index f95f811..0000000 --- a/vendor/golang.org/x/net/ipv4/payload.go +++ /dev/null @@ -1,23 +0,0 @@ -// 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 deleted file mode 100644 index 1bb370e..0000000 --- a/vendor/golang.org/x/net/ipv4/payload_cmsg.go +++ /dev/null @@ -1,85 +0,0 @@ -// 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 -// +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 deleted file mode 100644 index 53f0794..0000000 --- a/vendor/golang.org/x/net/ipv4/payload_nocmsg.go +++ /dev/null @@ -1,40 +0,0 @@ -// 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 -// +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 deleted file mode 100644 index 22e90c0..0000000 --- a/vendor/golang.org/x/net/ipv4/sockopt.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index eb07c1c..0000000 --- a/vendor/golang.org/x/net/ipv4/sockopt_posix.go +++ /dev/null @@ -1,72 +0,0 @@ -// 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 -// +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 deleted file mode 100644 index cf03689..0000000 --- a/vendor/golang.org/x/net/ipv4/sockopt_stub.go +++ /dev/null @@ -1,43 +0,0 @@ -// 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 -// +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 deleted file mode 100644 index 02730cd..0000000 --- a/vendor/golang.org/x/net/ipv4/sys_aix.go +++ /dev/null @@ -1,44 +0,0 @@ -// 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 -// +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 deleted file mode 100644 index 22322b3..0000000 --- a/vendor/golang.org/x/net/ipv4/sys_asmreq.go +++ /dev/null @@ -1,123 +0,0 @@ -// 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 -// +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 deleted file mode 100644 index fde6401..0000000 --- a/vendor/golang.org/x/net/ipv4/sys_asmreq_stub.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !aix && !darwin && !dragonfly && !freebsd && !netbsd && !openbsd && !solaris && !windows -// +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 deleted file mode 100644 index 54eb990..0000000 --- a/vendor/golang.org/x/net/ipv4/sys_asmreqn.go +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build darwin || freebsd || linux -// +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 deleted file mode 100644 index dcb15f2..0000000 --- a/vendor/golang.org/x/net/ipv4/sys_asmreqn_stub.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !darwin && !freebsd && !linux -// +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 deleted file mode 100644 index fb11e32..0000000 --- a/vendor/golang.org/x/net/ipv4/sys_bpf.go +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux -// +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 deleted file mode 100644 index fc53a0d..0000000 --- a/vendor/golang.org/x/net/ipv4/sys_bpf_stub.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !linux -// +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 deleted file mode 100644 index e191b2f..0000000 --- a/vendor/golang.org/x/net/ipv4/sys_bsd.go +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build netbsd || openbsd -// +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 deleted file mode 100644 index cac6f3c..0000000 --- a/vendor/golang.org/x/net/ipv4/sys_darwin.go +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 0620d0e..0000000 --- a/vendor/golang.org/x/net/ipv4/sys_dragonfly.go +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 8961228..0000000 --- a/vendor/golang.org/x/net/ipv4/sys_freebsd.go +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 4588a5f..0000000 --- a/vendor/golang.org/x/net/ipv4/sys_linux.go +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 0bb9f3e..0000000 --- a/vendor/golang.org/x/net/ipv4/sys_solaris.go +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -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 deleted file mode 100644 index 6a4e7ab..0000000 --- a/vendor/golang.org/x/net/ipv4/sys_ssmreq.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build darwin || freebsd || linux || solaris -// +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 deleted file mode 100644 index 157159f..0000000 --- a/vendor/golang.org/x/net/ipv4/sys_ssmreq_stub.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !darwin && !freebsd && !linux && !solaris -// +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 deleted file mode 100644 index d550851..0000000 --- a/vendor/golang.org/x/net/ipv4/sys_stub.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !windows && !zos -// +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 deleted file mode 100644 index c5e9506..0000000 --- a/vendor/golang.org/x/net/ipv4/sys_windows.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index be20640..0000000 --- a/vendor/golang.org/x/net/ipv4/sys_zos.go +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -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 deleted file mode 100644 index b7f2d6e..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_aix_ppc64.go +++ /dev/null @@ -1,17 +0,0 @@ -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs defs_aix.go - -// Added for go1.11 compatibility -//go:build aix -// +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 deleted file mode 100644 index 6c1b705..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_darwin.go +++ /dev/null @@ -1,59 +0,0 @@ -// 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 deleted file mode 100644 index 2155df1..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_dragonfly.go +++ /dev/null @@ -1,13 +0,0 @@ -// 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 deleted file mode 100644 index ae40482..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_freebsd_386.go +++ /dev/null @@ -1,52 +0,0 @@ -// 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 deleted file mode 100644 index 9018186..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_freebsd_amd64.go +++ /dev/null @@ -1,54 +0,0 @@ -// 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 deleted file mode 100644 index 9018186..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm.go +++ /dev/null @@ -1,54 +0,0 @@ -// 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 deleted file mode 100644 index 0feb9a7..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm64.go +++ /dev/null @@ -1,52 +0,0 @@ -// 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 deleted file mode 100644 index d510357..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_386.go +++ /dev/null @@ -1,72 +0,0 @@ -// 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 deleted file mode 100644 index eb10cc7..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go +++ /dev/null @@ -1,74 +0,0 @@ -// 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 deleted file mode 100644 index d510357..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go +++ /dev/null @@ -1,72 +0,0 @@ -// 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 deleted file mode 100644 index eb10cc7..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go +++ /dev/null @@ -1,74 +0,0 @@ -// 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_mips.go b/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go deleted file mode 100644 index d510357..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go +++ /dev/null @@ -1,72 +0,0 @@ -// 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 deleted file mode 100644 index eb10cc7..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go +++ /dev/null @@ -1,74 +0,0 @@ -// 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 deleted file mode 100644 index eb10cc7..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go +++ /dev/null @@ -1,74 +0,0 @@ -// 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 deleted file mode 100644 index d510357..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go +++ /dev/null @@ -1,72 +0,0 @@ -// 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 deleted file mode 100644 index 29202e4..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go +++ /dev/null @@ -1,72 +0,0 @@ -// 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 deleted file mode 100644 index eb10cc7..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go +++ /dev/null @@ -1,74 +0,0 @@ -// 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 deleted file mode 100644 index eb10cc7..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go +++ /dev/null @@ -1,74 +0,0 @@ -// 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 deleted file mode 100644 index e2edebd..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_riscv64.go +++ /dev/null @@ -1,77 +0,0 @@ -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs defs_linux.go - -//go:build riscv64 -// +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 deleted file mode 100644 index eb10cc7..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go +++ /dev/null @@ -1,74 +0,0 @@ -// 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 deleted file mode 100644 index a2ef2f6..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_netbsd.go +++ /dev/null @@ -1,13 +0,0 @@ -// 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 deleted file mode 100644 index b293a33..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_openbsd.go +++ /dev/null @@ -1,13 +0,0 @@ -// 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 deleted file mode 100644 index e1a961b..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_solaris.go +++ /dev/null @@ -1,57 +0,0 @@ -// 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 deleted file mode 100644 index 692abf6..0000000 --- a/vendor/golang.org/x/net/ipv4/zsys_zos_s390x.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// 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 deleted file mode 100644 index 2ccb984..0000000 --- a/vendor/golang.org/x/net/ipv6/batch.go +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 2da6444..0000000 --- a/vendor/golang.org/x/net/ipv6/control.go +++ /dev/null @@ -1,187 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 2733ddb..0000000 --- a/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build darwin -// +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 deleted file mode 100644 index 9c90844..0000000 --- a/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos -// +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 deleted file mode 100644 index b7e8643..0000000 --- a/vendor/golang.org/x/net/ipv6/control_stub.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !windows && !zos -// +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 deleted file mode 100644 index 63e475d..0000000 --- a/vendor/golang.org/x/net/ipv6/control_unix.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos -// +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 deleted file mode 100644 index 8882d81..0000000 --- a/vendor/golang.org/x/net/ipv6/control_windows.go +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 1f422e7..0000000 --- a/vendor/golang.org/x/net/ipv6/dgramopt.go +++ /dev/null @@ -1,301 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 ture, -// the offset should be an offset in bytes into the data of where the -// checksum field is located. -func (c *dgramOpt) SetChecksum(on bool, offset int) error { - 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 deleted file mode 100644 index e0be9d5..0000000 --- a/vendor/golang.org/x/net/ipv6/doc.go +++ /dev/null @@ -1,243 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package 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 deleted file mode 100644 index f534a0b..0000000 --- a/vendor/golang.org/x/net/ipv6/endpoint.go +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 0326aed..0000000 --- a/vendor/golang.org/x/net/ipv6/genericopt.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index e05cb08..0000000 --- a/vendor/golang.org/x/net/ipv6/header.go +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index c2d508f..0000000 --- a/vendor/golang.org/x/net/ipv6/helper.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 32db1aa..0000000 --- a/vendor/golang.org/x/net/ipv6/iana.go +++ /dev/null @@ -1,86 +0,0 @@ -// 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 deleted file mode 100644 index b7f48e2..0000000 --- a/vendor/golang.org/x/net/ipv6/icmp.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 120bf87..0000000 --- a/vendor/golang.org/x/net/ipv6/icmp_bsd.go +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || darwin || dragonfly || freebsd || netbsd || openbsd -// +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 deleted file mode 100644 index 647f6b4..0000000 --- a/vendor/golang.org/x/net/ipv6/icmp_linux.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 7c23bb1..0000000 --- a/vendor/golang.org/x/net/ipv6/icmp_solaris.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index d60136a..0000000 --- a/vendor/golang.org/x/net/ipv6/icmp_stub.go +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !windows && !zos -// +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 deleted file mode 100644 index 443cd07..0000000 --- a/vendor/golang.org/x/net/ipv6/icmp_windows.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index ddf8f09..0000000 --- a/vendor/golang.org/x/net/ipv6/icmp_zos.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -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 deleted file mode 100644 index a8197f1..0000000 --- a/vendor/golang.org/x/net/ipv6/payload.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index b0692e4..0000000 --- a/vendor/golang.org/x/net/ipv6/payload_cmsg.go +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos -// +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 deleted file mode 100644 index cd0ff50..0000000 --- a/vendor/golang.org/x/net/ipv6/payload_nocmsg.go +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !zos -// +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 deleted file mode 100644 index cc3907d..0000000 --- a/vendor/golang.org/x/net/ipv6/sockopt.go +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 37c6287..0000000 --- a/vendor/golang.org/x/net/ipv6/sockopt_posix.go +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || windows || zos -// +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 deleted file mode 100644 index 32fd866..0000000 --- a/vendor/golang.org/x/net/ipv6/sockopt_stub.go +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !windows && !zos -// +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 deleted file mode 100644 index a47182a..0000000 --- a/vendor/golang.org/x/net/ipv6/sys_aix.go +++ /dev/null @@ -1,80 +0,0 @@ -// 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 -// +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 deleted file mode 100644 index 6ff9950..0000000 --- a/vendor/golang.org/x/net/ipv6/sys_asmreq.go +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || windows -// +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 deleted file mode 100644 index 485290c..0000000 --- a/vendor/golang.org/x/net/ipv6/sys_asmreq_stub.go +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !windows -// +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 deleted file mode 100644 index b5661fb..0000000 --- a/vendor/golang.org/x/net/ipv6/sys_bpf.go +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux -// +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 deleted file mode 100644 index cb00661..0000000 --- a/vendor/golang.org/x/net/ipv6/sys_bpf_stub.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !linux -// +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 deleted file mode 100644 index bde41a6..0000000 --- a/vendor/golang.org/x/net/ipv6/sys_bsd.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build dragonfly || netbsd || openbsd -// +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 deleted file mode 100644 index b80ec80..0000000 --- a/vendor/golang.org/x/net/ipv6/sys_darwin.go +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 6282cf9..0000000 --- a/vendor/golang.org/x/net/ipv6/sys_freebsd.go +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 82e2121..0000000 --- a/vendor/golang.org/x/net/ipv6/sys_linux.go +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 1fc30ad..0000000 --- a/vendor/golang.org/x/net/ipv6/sys_solaris.go +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -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 deleted file mode 100644 index 023488a..0000000 --- a/vendor/golang.org/x/net/ipv6/sys_ssmreq.go +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || darwin || freebsd || linux || solaris || zos -// +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 deleted file mode 100644 index acdf2e5..0000000 --- a/vendor/golang.org/x/net/ipv6/sys_ssmreq_stub.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !aix && !darwin && !freebsd && !linux && !solaris && !zos -// +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 deleted file mode 100644 index 5807bba..0000000 --- a/vendor/golang.org/x/net/ipv6/sys_stub.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !windows && !zos -// +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 deleted file mode 100644 index fda8a29..0000000 --- a/vendor/golang.org/x/net/ipv6/sys_windows.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 31adc86..0000000 --- a/vendor/golang.org/x/net/ipv6/sys_zos.go +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -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 deleted file mode 100644 index f604b0f..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_aix_ppc64.go +++ /dev/null @@ -1,69 +0,0 @@ -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs defs_aix.go - -// Added for go1.11 compatibility -//go:build aix -// +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 deleted file mode 100644 index dd6f7b2..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_darwin.go +++ /dev/null @@ -1,64 +0,0 @@ -// 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 deleted file mode 100644 index 6b45a94..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_dragonfly.go +++ /dev/null @@ -1,42 +0,0 @@ -// 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 deleted file mode 100644 index 8da5592..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_freebsd_386.go +++ /dev/null @@ -1,64 +0,0 @@ -// 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 deleted file mode 100644 index 72a1a65..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_freebsd_amd64.go +++ /dev/null @@ -1,66 +0,0 @@ -// 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 deleted file mode 100644 index 72a1a65..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm.go +++ /dev/null @@ -1,66 +0,0 @@ -// 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 deleted file mode 100644 index 5b39eb8..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm64.go +++ /dev/null @@ -1,64 +0,0 @@ -// 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 deleted file mode 100644 index ad71871..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_386.go +++ /dev/null @@ -1,72 +0,0 @@ -// 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 deleted file mode 100644 index 2514ab9..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go +++ /dev/null @@ -1,74 +0,0 @@ -// 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 deleted file mode 100644 index ad71871..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go +++ /dev/null @@ -1,72 +0,0 @@ -// 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 deleted file mode 100644 index 2514ab9..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go +++ /dev/null @@ -1,74 +0,0 @@ -// 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_mips.go b/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go deleted file mode 100644 index ad71871..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go +++ /dev/null @@ -1,72 +0,0 @@ -// 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 deleted file mode 100644 index 2514ab9..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go +++ /dev/null @@ -1,74 +0,0 @@ -// 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 deleted file mode 100644 index 2514ab9..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go +++ /dev/null @@ -1,74 +0,0 @@ -// 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 deleted file mode 100644 index ad71871..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go +++ /dev/null @@ -1,72 +0,0 @@ -// 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 deleted file mode 100644 index d06c2ad..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go +++ /dev/null @@ -1,72 +0,0 @@ -// 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 deleted file mode 100644 index 2514ab9..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go +++ /dev/null @@ -1,74 +0,0 @@ -// 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 deleted file mode 100644 index 2514ab9..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go +++ /dev/null @@ -1,74 +0,0 @@ -// 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 deleted file mode 100644 index d4f78e4..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_riscv64.go +++ /dev/null @@ -1,77 +0,0 @@ -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs defs_linux.go - -//go:build riscv64 -// +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 deleted file mode 100644 index 2514ab9..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go +++ /dev/null @@ -1,74 +0,0 @@ -// 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 deleted file mode 100644 index f7335d5..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_netbsd.go +++ /dev/null @@ -1,42 +0,0 @@ -// 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 deleted file mode 100644 index 6d15928..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_openbsd.go +++ /dev/null @@ -1,42 +0,0 @@ -// 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 deleted file mode 100644 index 1716197..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_solaris.go +++ /dev/null @@ -1,63 +0,0 @@ -// 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 deleted file mode 100644 index 7c75645..0000000 --- a/vendor/golang.org/x/net/ipv6/zsys_zos_s390x.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// 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/sys/LICENSE b/vendor/golang.org/x/sys/LICENSE deleted file mode 100644 index 6a66aea..0000000 --- a/vendor/golang.org/x/sys/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. - -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 Inc. 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/sys/PATENTS b/vendor/golang.org/x/sys/PATENTS deleted file mode 100644 index 7330990..0000000 --- a/vendor/golang.org/x/sys/PATENTS +++ /dev/null @@ -1,22 +0,0 @@ -Additional IP Rights Grant (Patents) - -"This implementation" means the copyrightable works distributed by -Google as part of the Go project. - -Google hereby grants to You a perpetual, worldwide, non-exclusive, -no-charge, royalty-free, irrevocable (except as stated in this section) -patent license to make, have made, use, offer to sell, sell, import, -transfer and otherwise run, modify and propagate the contents of this -implementation of Go, where such license applies only to those patent -claims, both currently owned or controlled by Google and acquired in -the future, licensable by Google that are necessarily infringed by this -implementation of Go. This grant does not include claims that would be -infringed only as a consequence of further modification of this -implementation. If you or your agent or exclusive licensee institute or -order or agree to the institution of patent litigation against any -entity (including a cross-claim or counterclaim in a lawsuit) alleging -that this implementation of Go or any code incorporated within this -implementation of Go constitutes direct or contributory patent -infringement, or inducement of patent infringement, then any patent -rights granted to you under this License for this implementation of Go -shall terminate as of the date such litigation is filed. diff --git a/vendor/golang.org/x/sys/cpu/asm_aix_ppc64.s b/vendor/golang.org/x/sys/cpu/asm_aix_ppc64.s deleted file mode 100644 index db9171c..0000000 --- a/vendor/golang.org/x/sys/cpu/asm_aix_ppc64.s +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build gc -// +build gc - -#include "textflag.h" - -// -// System calls for ppc64, AIX are implemented in runtime/syscall_aix.go -// - -TEXT ·syscall6(SB),NOSPLIT,$0-88 - JMP syscall·syscall6(SB) - -TEXT ·rawSyscall6(SB),NOSPLIT,$0-88 - JMP syscall·rawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/cpu/byteorder.go b/vendor/golang.org/x/sys/cpu/byteorder.go deleted file mode 100644 index 271055b..0000000 --- a/vendor/golang.org/x/sys/cpu/byteorder.go +++ /dev/null @@ -1,66 +0,0 @@ -// 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 cpu - -import ( - "runtime" -) - -// byteOrder is a subset of encoding/binary.ByteOrder. -type byteOrder interface { - Uint32([]byte) uint32 - Uint64([]byte) uint64 -} - -type littleEndian struct{} -type bigEndian struct{} - -func (littleEndian) Uint32(b []byte) uint32 { - _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 - return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 -} - -func (littleEndian) Uint64(b []byte) uint64 { - _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 - return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | - uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 -} - -func (bigEndian) Uint32(b []byte) uint32 { - _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 - return uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24 -} - -func (bigEndian) Uint64(b []byte) uint64 { - _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 - return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | - uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56 -} - -// hostByteOrder returns littleEndian on little-endian machines and -// bigEndian on big-endian machines. -func hostByteOrder() byteOrder { - switch runtime.GOARCH { - case "386", "amd64", "amd64p32", - "alpha", - "arm", "arm64", - "loong64", - "mipsle", "mips64le", "mips64p32le", - "nios2", - "ppc64le", - "riscv", "riscv64", - "sh": - return littleEndian{} - case "armbe", "arm64be", - "m68k", - "mips", "mips64", "mips64p32", - "ppc", "ppc64", - "s390", "s390x", - "shbe", - "sparc", "sparc64": - return bigEndian{} - } - panic("unknown architecture") -} diff --git a/vendor/golang.org/x/sys/cpu/cpu.go b/vendor/golang.org/x/sys/cpu/cpu.go deleted file mode 100644 index 83f112c..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu.go +++ /dev/null @@ -1,287 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package cpu implements processor feature detection for -// various CPU architectures. -package cpu - -import ( - "os" - "strings" -) - -// Initialized reports whether the CPU features were initialized. -// -// For some GOOS/GOARCH combinations initialization of the CPU features depends -// on reading an operating specific file, e.g. /proc/self/auxv on linux/arm -// Initialized will report false if reading the file fails. -var Initialized bool - -// CacheLinePad is used to pad structs to avoid false sharing. -type CacheLinePad struct{ _ [cacheLineSize]byte } - -// X86 contains the supported CPU features of the -// current X86/AMD64 platform. If the current platform -// is not X86/AMD64 then all feature flags are false. -// -// X86 is padded to avoid false sharing. Further the HasAVX -// and HasAVX2 are only set if the OS supports XMM and YMM -// registers in addition to the CPUID feature bit being set. -var X86 struct { - _ CacheLinePad - HasAES bool // AES hardware implementation (AES NI) - HasADX bool // Multi-precision add-carry instruction extensions - HasAVX bool // Advanced vector extension - HasAVX2 bool // Advanced vector extension 2 - HasAVX512 bool // Advanced vector extension 512 - HasAVX512F bool // Advanced vector extension 512 Foundation Instructions - HasAVX512CD bool // Advanced vector extension 512 Conflict Detection Instructions - HasAVX512ER bool // Advanced vector extension 512 Exponential and Reciprocal Instructions - HasAVX512PF bool // Advanced vector extension 512 Prefetch Instructions Instructions - HasAVX512VL bool // Advanced vector extension 512 Vector Length Extensions - HasAVX512BW bool // Advanced vector extension 512 Byte and Word Instructions - HasAVX512DQ bool // Advanced vector extension 512 Doubleword and Quadword Instructions - HasAVX512IFMA bool // Advanced vector extension 512 Integer Fused Multiply Add - HasAVX512VBMI bool // Advanced vector extension 512 Vector Byte Manipulation Instructions - HasAVX5124VNNIW bool // Advanced vector extension 512 Vector Neural Network Instructions Word variable precision - HasAVX5124FMAPS bool // Advanced vector extension 512 Fused Multiply Accumulation Packed Single precision - HasAVX512VPOPCNTDQ bool // Advanced vector extension 512 Double and quad word population count instructions - HasAVX512VPCLMULQDQ bool // Advanced vector extension 512 Vector carry-less multiply operations - HasAVX512VNNI bool // Advanced vector extension 512 Vector Neural Network Instructions - HasAVX512GFNI bool // Advanced vector extension 512 Galois field New Instructions - HasAVX512VAES bool // Advanced vector extension 512 Vector AES instructions - HasAVX512VBMI2 bool // Advanced vector extension 512 Vector Byte Manipulation Instructions 2 - HasAVX512BITALG bool // Advanced vector extension 512 Bit Algorithms - HasAVX512BF16 bool // Advanced vector extension 512 BFloat16 Instructions - HasBMI1 bool // Bit manipulation instruction set 1 - HasBMI2 bool // Bit manipulation instruction set 2 - HasCX16 bool // Compare and exchange 16 Bytes - HasERMS bool // Enhanced REP for MOVSB and STOSB - HasFMA bool // Fused-multiply-add instructions - HasOSXSAVE bool // OS supports XSAVE/XRESTOR for saving/restoring XMM registers. - HasPCLMULQDQ bool // PCLMULQDQ instruction - most often used for AES-GCM - HasPOPCNT bool // Hamming weight instruction POPCNT. - HasRDRAND bool // RDRAND instruction (on-chip random number generator) - HasRDSEED bool // RDSEED instruction (on-chip random number generator) - HasSSE2 bool // Streaming SIMD extension 2 (always available on amd64) - HasSSE3 bool // Streaming SIMD extension 3 - HasSSSE3 bool // Supplemental streaming SIMD extension 3 - HasSSE41 bool // Streaming SIMD extension 4 and 4.1 - HasSSE42 bool // Streaming SIMD extension 4 and 4.2 - _ CacheLinePad -} - -// ARM64 contains the supported CPU features of the -// current ARMv8(aarch64) platform. If the current platform -// is not arm64 then all feature flags are false. -var ARM64 struct { - _ CacheLinePad - HasFP bool // Floating-point instruction set (always available) - HasASIMD bool // Advanced SIMD (always available) - HasEVTSTRM bool // Event stream support - HasAES bool // AES hardware implementation - HasPMULL bool // Polynomial multiplication instruction set - HasSHA1 bool // SHA1 hardware implementation - HasSHA2 bool // SHA2 hardware implementation - HasCRC32 bool // CRC32 hardware implementation - HasATOMICS bool // Atomic memory operation instruction set - HasFPHP bool // Half precision floating-point instruction set - HasASIMDHP bool // Advanced SIMD half precision instruction set - HasCPUID bool // CPUID identification scheme registers - HasASIMDRDM bool // Rounding double multiply add/subtract instruction set - HasJSCVT bool // Javascript conversion from floating-point to integer - HasFCMA bool // Floating-point multiplication and addition of complex numbers - HasLRCPC bool // Release Consistent processor consistent support - HasDCPOP bool // Persistent memory support - HasSHA3 bool // SHA3 hardware implementation - HasSM3 bool // SM3 hardware implementation - HasSM4 bool // SM4 hardware implementation - HasASIMDDP bool // Advanced SIMD double precision instruction set - HasSHA512 bool // SHA512 hardware implementation - HasSVE bool // Scalable Vector Extensions - HasASIMDFHM bool // Advanced SIMD multiplication FP16 to FP32 - _ CacheLinePad -} - -// ARM contains the supported CPU features of the current ARM (32-bit) platform. -// All feature flags are false if: -// 1. the current platform is not arm, or -// 2. the current operating system is not Linux. -var ARM struct { - _ CacheLinePad - HasSWP bool // SWP instruction support - HasHALF bool // Half-word load and store support - HasTHUMB bool // ARM Thumb instruction set - Has26BIT bool // Address space limited to 26-bits - HasFASTMUL bool // 32-bit operand, 64-bit result multiplication support - HasFPA bool // Floating point arithmetic support - HasVFP bool // Vector floating point support - HasEDSP bool // DSP Extensions support - HasJAVA bool // Java instruction set - HasIWMMXT bool // Intel Wireless MMX technology support - HasCRUNCH bool // MaverickCrunch context switching and handling - HasTHUMBEE bool // Thumb EE instruction set - HasNEON bool // NEON instruction set - HasVFPv3 bool // Vector floating point version 3 support - HasVFPv3D16 bool // Vector floating point version 3 D8-D15 - HasTLS bool // Thread local storage support - HasVFPv4 bool // Vector floating point version 4 support - HasIDIVA bool // Integer divide instruction support in ARM mode - HasIDIVT bool // Integer divide instruction support in Thumb mode - HasVFPD32 bool // Vector floating point version 3 D15-D31 - HasLPAE bool // Large Physical Address Extensions - HasEVTSTRM bool // Event stream support - HasAES bool // AES hardware implementation - HasPMULL bool // Polynomial multiplication instruction set - HasSHA1 bool // SHA1 hardware implementation - HasSHA2 bool // SHA2 hardware implementation - HasCRC32 bool // CRC32 hardware implementation - _ 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. -var MIPS64X struct { - _ CacheLinePad - HasMSA bool // MIPS SIMD architecture - _ CacheLinePad -} - -// PPC64 contains the supported CPU features of the current ppc64/ppc64le platforms. -// If the current platform is not ppc64/ppc64le then all feature flags are false. -// -// For ppc64/ppc64le, it is safe to check only for ISA level starting on ISA v3.00, -// since there are no optional categories. There are some exceptions that also -// require kernel support to work (DARN, SCV), so there are feature bits for -// those as well. The struct is padded to avoid false sharing. -var PPC64 struct { - _ CacheLinePad - HasDARN bool // Hardware random number generator (requires kernel enablement) - HasSCV bool // Syscall vectored (requires kernel enablement) - IsPOWER8 bool // ISA v2.07 (POWER8) - IsPOWER9 bool // ISA v3.00 (POWER9), implies IsPOWER8 - _ CacheLinePad -} - -// S390X contains the supported CPU features of the current IBM Z -// (s390x) platform. If the current platform is not IBM Z then all -// feature flags are false. -// -// S390X is padded to avoid false sharing. Further HasVX is only set -// if the OS supports vector registers in addition to the STFLE -// feature bit being set. -var S390X struct { - _ CacheLinePad - HasZARCH bool // z/Architecture mode is active [mandatory] - HasSTFLE bool // store facility list extended - HasLDISP bool // long (20-bit) displacements - HasEIMM bool // 32-bit immediates - HasDFP bool // decimal floating point - HasETF3EH bool // ETF-3 enhanced - HasMSA bool // message security assist (CPACF) - HasAES bool // KM-AES{128,192,256} functions - HasAESCBC bool // KMC-AES{128,192,256} functions - HasAESCTR bool // KMCTR-AES{128,192,256} functions - HasAESGCM bool // KMA-GCM-AES{128,192,256} functions - HasGHASH bool // KIMD-GHASH function - HasSHA1 bool // K{I,L}MD-SHA-1 functions - HasSHA256 bool // K{I,L}MD-SHA-256 functions - HasSHA512 bool // K{I,L}MD-SHA-512 functions - HasSHA3 bool // K{I,L}MD-SHA3-{224,256,384,512} and K{I,L}MD-SHAKE-{128,256} functions - HasVX bool // vector facility - HasVXE bool // vector-enhancements facility 1 - _ CacheLinePad -} - -func init() { - archInit() - initOptions() - processOptions() -} - -// options contains the cpu debug options that can be used in GODEBUG. -// Options are arch dependent and are added by the arch specific initOptions functions. -// Features that are mandatory for the specific GOARCH should have the Required field set -// (e.g. SSE2 on amd64). -var options []option - -// Option names should be lower case. e.g. avx instead of AVX. -type option struct { - Name string - Feature *bool - Specified bool // whether feature value was specified in GODEBUG - Enable bool // whether feature should be enabled - Required bool // whether feature is mandatory and can not be disabled -} - -func processOptions() { - env := os.Getenv("GODEBUG") -field: - for env != "" { - field := "" - i := strings.IndexByte(env, ',') - if i < 0 { - field, env = env, "" - } else { - field, env = env[:i], env[i+1:] - } - if len(field) < 4 || field[:4] != "cpu." { - continue - } - i = strings.IndexByte(field, '=') - if i < 0 { - print("GODEBUG sys/cpu: no value specified for \"", field, "\"\n") - continue - } - key, value := field[4:i], field[i+1:] // e.g. "SSE2", "on" - - var enable bool - switch value { - case "on": - enable = true - case "off": - enable = false - default: - print("GODEBUG sys/cpu: value \"", value, "\" not supported for cpu option \"", key, "\"\n") - continue field - } - - if key == "all" { - for i := range options { - options[i].Specified = true - options[i].Enable = enable || options[i].Required - } - continue field - } - - for i := range options { - if options[i].Name == key { - options[i].Specified = true - options[i].Enable = enable - continue field - } - } - - print("GODEBUG sys/cpu: unknown cpu feature \"", key, "\"\n") - } - - for _, o := range options { - if !o.Specified { - continue - } - - if o.Enable && !*o.Feature { - print("GODEBUG sys/cpu: can not enable \"", o.Name, "\", missing CPU support\n") - continue - } - - if !o.Enable && o.Required { - print("GODEBUG sys/cpu: can not disable \"", o.Name, "\", required CPU feature\n") - continue - } - - *o.Feature = o.Enable - } -} diff --git a/vendor/golang.org/x/sys/cpu/cpu_aix.go b/vendor/golang.org/x/sys/cpu/cpu_aix.go deleted file mode 100644 index 8aaeef5..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_aix.go +++ /dev/null @@ -1,34 +0,0 @@ -// 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 -// +build aix - -package cpu - -const ( - // getsystemcfg constants - _SC_IMPL = 2 - _IMPL_POWER8 = 0x10000 - _IMPL_POWER9 = 0x20000 -) - -func archInit() { - impl := getsystemcfg(_SC_IMPL) - if impl&_IMPL_POWER8 != 0 { - PPC64.IsPOWER8 = true - } - if impl&_IMPL_POWER9 != 0 { - PPC64.IsPOWER8 = true - PPC64.IsPOWER9 = true - } - - Initialized = true -} - -func getsystemcfg(label int) (n uint64) { - r0, _ := callgetsystemcfg(label) - n = uint64(r0) - return -} diff --git a/vendor/golang.org/x/sys/cpu/cpu_arm.go b/vendor/golang.org/x/sys/cpu/cpu_arm.go deleted file mode 100644 index 301b752..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_arm.go +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package cpu - -const cacheLineSize = 32 - -// HWCAP/HWCAP2 bits. -// These are specific to Linux. -const ( - hwcap_SWP = 1 << 0 - hwcap_HALF = 1 << 1 - hwcap_THUMB = 1 << 2 - hwcap_26BIT = 1 << 3 - hwcap_FAST_MULT = 1 << 4 - hwcap_FPA = 1 << 5 - hwcap_VFP = 1 << 6 - hwcap_EDSP = 1 << 7 - hwcap_JAVA = 1 << 8 - hwcap_IWMMXT = 1 << 9 - hwcap_CRUNCH = 1 << 10 - hwcap_THUMBEE = 1 << 11 - hwcap_NEON = 1 << 12 - hwcap_VFPv3 = 1 << 13 - hwcap_VFPv3D16 = 1 << 14 - hwcap_TLS = 1 << 15 - hwcap_VFPv4 = 1 << 16 - hwcap_IDIVA = 1 << 17 - hwcap_IDIVT = 1 << 18 - hwcap_VFPD32 = 1 << 19 - hwcap_LPAE = 1 << 20 - hwcap_EVTSTRM = 1 << 21 - - hwcap2_AES = 1 << 0 - hwcap2_PMULL = 1 << 1 - hwcap2_SHA1 = 1 << 2 - hwcap2_SHA2 = 1 << 3 - hwcap2_CRC32 = 1 << 4 -) - -func initOptions() { - options = []option{ - {Name: "pmull", Feature: &ARM.HasPMULL}, - {Name: "sha1", Feature: &ARM.HasSHA1}, - {Name: "sha2", Feature: &ARM.HasSHA2}, - {Name: "swp", Feature: &ARM.HasSWP}, - {Name: "thumb", Feature: &ARM.HasTHUMB}, - {Name: "thumbee", Feature: &ARM.HasTHUMBEE}, - {Name: "tls", Feature: &ARM.HasTLS}, - {Name: "vfp", Feature: &ARM.HasVFP}, - {Name: "vfpd32", Feature: &ARM.HasVFPD32}, - {Name: "vfpv3", Feature: &ARM.HasVFPv3}, - {Name: "vfpv3d16", Feature: &ARM.HasVFPv3D16}, - {Name: "vfpv4", Feature: &ARM.HasVFPv4}, - {Name: "half", Feature: &ARM.HasHALF}, - {Name: "26bit", Feature: &ARM.Has26BIT}, - {Name: "fastmul", Feature: &ARM.HasFASTMUL}, - {Name: "fpa", Feature: &ARM.HasFPA}, - {Name: "edsp", Feature: &ARM.HasEDSP}, - {Name: "java", Feature: &ARM.HasJAVA}, - {Name: "iwmmxt", Feature: &ARM.HasIWMMXT}, - {Name: "crunch", Feature: &ARM.HasCRUNCH}, - {Name: "neon", Feature: &ARM.HasNEON}, - {Name: "idivt", Feature: &ARM.HasIDIVT}, - {Name: "idiva", Feature: &ARM.HasIDIVA}, - {Name: "lpae", Feature: &ARM.HasLPAE}, - {Name: "evtstrm", Feature: &ARM.HasEVTSTRM}, - {Name: "aes", Feature: &ARM.HasAES}, - {Name: "crc32", Feature: &ARM.HasCRC32}, - } - -} diff --git a/vendor/golang.org/x/sys/cpu/cpu_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_arm64.go deleted file mode 100644 index f3eb993..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_arm64.go +++ /dev/null @@ -1,172 +0,0 @@ -// 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 cpu - -import "runtime" - -// cacheLineSize is used to prevent false sharing of cache lines. -// We choose 128 because Apple Silicon, a.k.a. M1, has 128-byte cache line size. -// It doesn't cost much and is much more future-proof. -const cacheLineSize = 128 - -func initOptions() { - options = []option{ - {Name: "fp", Feature: &ARM64.HasFP}, - {Name: "asimd", Feature: &ARM64.HasASIMD}, - {Name: "evstrm", Feature: &ARM64.HasEVTSTRM}, - {Name: "aes", Feature: &ARM64.HasAES}, - {Name: "fphp", Feature: &ARM64.HasFPHP}, - {Name: "jscvt", Feature: &ARM64.HasJSCVT}, - {Name: "lrcpc", Feature: &ARM64.HasLRCPC}, - {Name: "pmull", Feature: &ARM64.HasPMULL}, - {Name: "sha1", Feature: &ARM64.HasSHA1}, - {Name: "sha2", Feature: &ARM64.HasSHA2}, - {Name: "sha3", Feature: &ARM64.HasSHA3}, - {Name: "sha512", Feature: &ARM64.HasSHA512}, - {Name: "sm3", Feature: &ARM64.HasSM3}, - {Name: "sm4", Feature: &ARM64.HasSM4}, - {Name: "sve", Feature: &ARM64.HasSVE}, - {Name: "crc32", Feature: &ARM64.HasCRC32}, - {Name: "atomics", Feature: &ARM64.HasATOMICS}, - {Name: "asimdhp", Feature: &ARM64.HasASIMDHP}, - {Name: "cpuid", Feature: &ARM64.HasCPUID}, - {Name: "asimrdm", Feature: &ARM64.HasASIMDRDM}, - {Name: "fcma", Feature: &ARM64.HasFCMA}, - {Name: "dcpop", Feature: &ARM64.HasDCPOP}, - {Name: "asimddp", Feature: &ARM64.HasASIMDDP}, - {Name: "asimdfhm", Feature: &ARM64.HasASIMDFHM}, - } -} - -func archInit() { - switch runtime.GOOS { - case "freebsd": - readARM64Registers() - case "linux", "netbsd", "openbsd": - doinit() - default: - // Many platforms don't seem to allow reading these registers. - setMinimalFeatures() - } -} - -// setMinimalFeatures fakes the minimal ARM64 features expected by -// TestARM64minimalFeatures. -func setMinimalFeatures() { - ARM64.HasASIMD = true - ARM64.HasFP = true -} - -func readARM64Registers() { - Initialized = true - - parseARM64SystemRegisters(getisar0(), getisar1(), getpfr0()) -} - -func parseARM64SystemRegisters(isar0, isar1, pfr0 uint64) { - // ID_AA64ISAR0_EL1 - switch extractBits(isar0, 4, 7) { - case 1: - ARM64.HasAES = true - case 2: - ARM64.HasAES = true - ARM64.HasPMULL = true - } - - switch extractBits(isar0, 8, 11) { - case 1: - ARM64.HasSHA1 = true - } - - switch extractBits(isar0, 12, 15) { - case 1: - ARM64.HasSHA2 = true - case 2: - ARM64.HasSHA2 = true - ARM64.HasSHA512 = true - } - - switch extractBits(isar0, 16, 19) { - case 1: - ARM64.HasCRC32 = true - } - - switch extractBits(isar0, 20, 23) { - case 2: - ARM64.HasATOMICS = true - } - - switch extractBits(isar0, 28, 31) { - case 1: - ARM64.HasASIMDRDM = true - } - - switch extractBits(isar0, 32, 35) { - case 1: - ARM64.HasSHA3 = true - } - - switch extractBits(isar0, 36, 39) { - case 1: - ARM64.HasSM3 = true - } - - switch extractBits(isar0, 40, 43) { - case 1: - ARM64.HasSM4 = true - } - - switch extractBits(isar0, 44, 47) { - case 1: - ARM64.HasASIMDDP = true - } - - // ID_AA64ISAR1_EL1 - switch extractBits(isar1, 0, 3) { - case 1: - ARM64.HasDCPOP = true - } - - switch extractBits(isar1, 12, 15) { - case 1: - ARM64.HasJSCVT = true - } - - switch extractBits(isar1, 16, 19) { - case 1: - ARM64.HasFCMA = true - } - - switch extractBits(isar1, 20, 23) { - case 1: - ARM64.HasLRCPC = true - } - - // ID_AA64PFR0_EL1 - switch extractBits(pfr0, 16, 19) { - case 0: - ARM64.HasFP = true - case 1: - ARM64.HasFP = true - ARM64.HasFPHP = true - } - - switch extractBits(pfr0, 20, 23) { - case 0: - ARM64.HasASIMD = true - case 1: - ARM64.HasASIMD = true - ARM64.HasASIMDHP = true - } - - switch extractBits(pfr0, 32, 35) { - case 1: - ARM64.HasSVE = true - } -} - -func extractBits(data uint64, start, end uint) uint { - return (uint)(data>>start) & ((1 << (end - start + 1)) - 1) -} diff --git a/vendor/golang.org/x/sys/cpu/cpu_arm64.s b/vendor/golang.org/x/sys/cpu/cpu_arm64.s deleted file mode 100644 index c61f95a..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_arm64.s +++ /dev/null @@ -1,32 +0,0 @@ -// 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 -// +build gc - -#include "textflag.h" - -// func getisar0() uint64 -TEXT ·getisar0(SB),NOSPLIT,$0-8 - // get Instruction Set Attributes 0 into x0 - // mrs x0, ID_AA64ISAR0_EL1 = d5380600 - WORD $0xd5380600 - MOVD R0, ret+0(FP) - RET - -// func getisar1() uint64 -TEXT ·getisar1(SB),NOSPLIT,$0-8 - // get Instruction Set Attributes 1 into x0 - // mrs x0, ID_AA64ISAR1_EL1 = d5380620 - WORD $0xd5380620 - MOVD R0, ret+0(FP) - RET - -// func getpfr0() uint64 -TEXT ·getpfr0(SB),NOSPLIT,$0-8 - // get Processor Feature Register 0 into x0 - // mrs x0, ID_AA64PFR0_EL1 = d5380400 - WORD $0xd5380400 - MOVD R0, ret+0(FP) - RET diff --git a/vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go deleted file mode 100644 index ccf542a..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go +++ /dev/null @@ -1,12 +0,0 @@ -// 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 -// +build gc - -package cpu - -func getisar0() uint64 -func getisar1() uint64 -func getpfr0() uint64 diff --git a/vendor/golang.org/x/sys/cpu/cpu_gc_s390x.go b/vendor/golang.org/x/sys/cpu/cpu_gc_s390x.go deleted file mode 100644 index 0af2f24..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_gc_s390x.go +++ /dev/null @@ -1,22 +0,0 @@ -// 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 -// +build gc - -package cpu - -// haveAsmFunctions reports whether the other functions in this file can -// be safely called. -func haveAsmFunctions() bool { return true } - -// The following feature detection functions are defined in cpu_s390x.s. -// They are likely to be expensive to call so the results should be cached. -func stfle() facilityList -func kmQuery() queryResult -func kmcQuery() queryResult -func kmctrQuery() queryResult -func kmaQuery() queryResult -func kimdQuery() queryResult -func klmdQuery() queryResult diff --git a/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go b/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go deleted file mode 100644 index fa7cdb9..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build (386 || amd64 || amd64p32) && gc -// +build 386 amd64 amd64p32 -// +build gc - -package cpu - -// cpuid is implemented in cpu_x86.s for gc compiler -// and in cpu_gccgo.c for gccgo. -func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) - -// xgetbv with ecx = 0 is implemented in cpu_x86.s for gc compiler -// and in cpu_gccgo.c for gccgo. -func xgetbv() (eax, edx uint32) diff --git a/vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go deleted file mode 100644 index 2aff318..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go +++ /dev/null @@ -1,12 +0,0 @@ -// 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 gccgo -// +build gccgo - -package cpu - -func getisar0() uint64 { return 0 } -func getisar1() uint64 { return 0 } -func getpfr0() uint64 { return 0 } diff --git a/vendor/golang.org/x/sys/cpu/cpu_gccgo_s390x.go b/vendor/golang.org/x/sys/cpu/cpu_gccgo_s390x.go deleted file mode 100644 index 4bfbda6..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_gccgo_s390x.go +++ /dev/null @@ -1,23 +0,0 @@ -// 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 gccgo -// +build gccgo - -package cpu - -// haveAsmFunctions reports whether the other functions in this file can -// be safely called. -func haveAsmFunctions() bool { return false } - -// TODO(mundaym): the following feature detection functions are currently -// stubs. See https://golang.org/cl/162887 for how to fix this. -// They are likely to be expensive to call so the results should be cached. -func stfle() facilityList { panic("not implemented for gccgo") } -func kmQuery() queryResult { panic("not implemented for gccgo") } -func kmcQuery() queryResult { panic("not implemented for gccgo") } -func kmctrQuery() queryResult { panic("not implemented for gccgo") } -func kmaQuery() queryResult { panic("not implemented for gccgo") } -func kimdQuery() queryResult { panic("not implemented for gccgo") } -func klmdQuery() queryResult { panic("not implemented for gccgo") } diff --git a/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c b/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c deleted file mode 100644 index a4605e6..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build 386 amd64 amd64p32 -// +build gccgo - -#include -#include -#include - -// Need to wrap __get_cpuid_count because it's declared as static. -int -gccgoGetCpuidCount(uint32_t leaf, uint32_t subleaf, - uint32_t *eax, uint32_t *ebx, - uint32_t *ecx, uint32_t *edx) -{ - return __get_cpuid_count(leaf, subleaf, eax, ebx, ecx, edx); -} - -#pragma GCC diagnostic ignored "-Wunknown-pragmas" -#pragma GCC push_options -#pragma GCC target("xsave") -#pragma clang attribute push (__attribute__((target("xsave"))), apply_to=function) - -// xgetbv reads the contents of an XCR (Extended Control Register) -// specified in the ECX register into registers EDX:EAX. -// Currently, the only supported value for XCR is 0. -void -gccgoXgetbv(uint32_t *eax, uint32_t *edx) -{ - uint64_t v = _xgetbv(0); - *eax = v & 0xffffffff; - *edx = v >> 32; -} - -#pragma clang attribute pop -#pragma GCC pop_options diff --git a/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go b/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go deleted file mode 100644 index 863d415..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build (386 || amd64 || amd64p32) && gccgo -// +build 386 amd64 amd64p32 -// +build gccgo - -package cpu - -//extern gccgoGetCpuidCount -func gccgoGetCpuidCount(eaxArg, ecxArg uint32, eax, ebx, ecx, edx *uint32) - -func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) { - var a, b, c, d uint32 - gccgoGetCpuidCount(eaxArg, ecxArg, &a, &b, &c, &d) - return a, b, c, d -} - -//extern gccgoXgetbv -func gccgoXgetbv(eax, edx *uint32) - -func xgetbv() (eax, edx uint32) { - var a, d uint32 - gccgoXgetbv(&a, &d) - return a, d -} - -// gccgo doesn't build on Darwin, per: -// https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/gcc.rb#L76 -func darwinSupportsAVX512() bool { - return false -} diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux.go b/vendor/golang.org/x/sys/cpu/cpu_linux.go deleted file mode 100644 index 159a686..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_linux.go +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !386 && !amd64 && !amd64p32 && !arm64 -// +build !386,!amd64,!amd64p32,!arm64 - -package cpu - -func archInit() { - if err := readHWCAP(); err != nil { - return - } - doinit() - Initialized = true -} diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_arm.go b/vendor/golang.org/x/sys/cpu/cpu_linux_arm.go deleted file mode 100644 index 2057006..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_linux_arm.go +++ /dev/null @@ -1,39 +0,0 @@ -// 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 cpu - -func doinit() { - ARM.HasSWP = isSet(hwCap, hwcap_SWP) - ARM.HasHALF = isSet(hwCap, hwcap_HALF) - ARM.HasTHUMB = isSet(hwCap, hwcap_THUMB) - ARM.Has26BIT = isSet(hwCap, hwcap_26BIT) - ARM.HasFASTMUL = isSet(hwCap, hwcap_FAST_MULT) - ARM.HasFPA = isSet(hwCap, hwcap_FPA) - ARM.HasVFP = isSet(hwCap, hwcap_VFP) - ARM.HasEDSP = isSet(hwCap, hwcap_EDSP) - ARM.HasJAVA = isSet(hwCap, hwcap_JAVA) - ARM.HasIWMMXT = isSet(hwCap, hwcap_IWMMXT) - ARM.HasCRUNCH = isSet(hwCap, hwcap_CRUNCH) - ARM.HasTHUMBEE = isSet(hwCap, hwcap_THUMBEE) - ARM.HasNEON = isSet(hwCap, hwcap_NEON) - ARM.HasVFPv3 = isSet(hwCap, hwcap_VFPv3) - ARM.HasVFPv3D16 = isSet(hwCap, hwcap_VFPv3D16) - ARM.HasTLS = isSet(hwCap, hwcap_TLS) - ARM.HasVFPv4 = isSet(hwCap, hwcap_VFPv4) - ARM.HasIDIVA = isSet(hwCap, hwcap_IDIVA) - ARM.HasIDIVT = isSet(hwCap, hwcap_IDIVT) - ARM.HasVFPD32 = isSet(hwCap, hwcap_VFPD32) - ARM.HasLPAE = isSet(hwCap, hwcap_LPAE) - ARM.HasEVTSTRM = isSet(hwCap, hwcap_EVTSTRM) - ARM.HasAES = isSet(hwCap2, hwcap2_AES) - ARM.HasPMULL = isSet(hwCap2, hwcap2_PMULL) - ARM.HasSHA1 = isSet(hwCap2, hwcap2_SHA1) - ARM.HasSHA2 = isSet(hwCap2, hwcap2_SHA2) - ARM.HasCRC32 = isSet(hwCap2, hwcap2_CRC32) -} - -func isSet(hwc uint, value uint) bool { - return hwc&value != 0 -} diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go deleted file mode 100644 index 79a38a0..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package cpu - -// HWCAP/HWCAP2 bits. These are exposed by Linux. -const ( - hwcap_FP = 1 << 0 - hwcap_ASIMD = 1 << 1 - hwcap_EVTSTRM = 1 << 2 - hwcap_AES = 1 << 3 - hwcap_PMULL = 1 << 4 - hwcap_SHA1 = 1 << 5 - hwcap_SHA2 = 1 << 6 - hwcap_CRC32 = 1 << 7 - hwcap_ATOMICS = 1 << 8 - hwcap_FPHP = 1 << 9 - hwcap_ASIMDHP = 1 << 10 - hwcap_CPUID = 1 << 11 - hwcap_ASIMDRDM = 1 << 12 - hwcap_JSCVT = 1 << 13 - hwcap_FCMA = 1 << 14 - hwcap_LRCPC = 1 << 15 - hwcap_DCPOP = 1 << 16 - hwcap_SHA3 = 1 << 17 - hwcap_SM3 = 1 << 18 - hwcap_SM4 = 1 << 19 - hwcap_ASIMDDP = 1 << 20 - hwcap_SHA512 = 1 << 21 - hwcap_SVE = 1 << 22 - hwcap_ASIMDFHM = 1 << 23 -) - -func doinit() { - if err := readHWCAP(); err != nil { - // failed to read /proc/self/auxv, try reading registers directly - readARM64Registers() - return - } - - // HWCAP feature bits - ARM64.HasFP = isSet(hwCap, hwcap_FP) - ARM64.HasASIMD = isSet(hwCap, hwcap_ASIMD) - ARM64.HasEVTSTRM = isSet(hwCap, hwcap_EVTSTRM) - ARM64.HasAES = isSet(hwCap, hwcap_AES) - ARM64.HasPMULL = isSet(hwCap, hwcap_PMULL) - ARM64.HasSHA1 = isSet(hwCap, hwcap_SHA1) - ARM64.HasSHA2 = isSet(hwCap, hwcap_SHA2) - ARM64.HasCRC32 = isSet(hwCap, hwcap_CRC32) - ARM64.HasATOMICS = isSet(hwCap, hwcap_ATOMICS) - ARM64.HasFPHP = isSet(hwCap, hwcap_FPHP) - ARM64.HasASIMDHP = isSet(hwCap, hwcap_ASIMDHP) - ARM64.HasCPUID = isSet(hwCap, hwcap_CPUID) - ARM64.HasASIMDRDM = isSet(hwCap, hwcap_ASIMDRDM) - ARM64.HasJSCVT = isSet(hwCap, hwcap_JSCVT) - ARM64.HasFCMA = isSet(hwCap, hwcap_FCMA) - ARM64.HasLRCPC = isSet(hwCap, hwcap_LRCPC) - ARM64.HasDCPOP = isSet(hwCap, hwcap_DCPOP) - ARM64.HasSHA3 = isSet(hwCap, hwcap_SHA3) - ARM64.HasSM3 = isSet(hwCap, hwcap_SM3) - ARM64.HasSM4 = isSet(hwCap, hwcap_SM4) - ARM64.HasASIMDDP = isSet(hwCap, hwcap_ASIMDDP) - ARM64.HasSHA512 = isSet(hwCap, hwcap_SHA512) - ARM64.HasSVE = isSet(hwCap, hwcap_SVE) - ARM64.HasASIMDFHM = isSet(hwCap, hwcap_ASIMDFHM) -} - -func isSet(hwc uint, value uint) bool { - return hwc&value != 0 -} diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_mips64x.go b/vendor/golang.org/x/sys/cpu/cpu_linux_mips64x.go deleted file mode 100644 index 6000db4..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_linux_mips64x.go +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux && (mips64 || mips64le) -// +build linux -// +build mips64 mips64le - -package cpu - -// HWCAP bits. These are exposed by the Linux kernel 5.4. -const ( - // CPU features - hwcap_MIPS_MSA = 1 << 1 -) - -func doinit() { - // HWCAP feature bits - MIPS64X.HasMSA = isSet(hwCap, hwcap_MIPS_MSA) -} - -func isSet(hwc uint, value uint) bool { - return hwc&value != 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 deleted file mode 100644 index f4992b1..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go +++ /dev/null @@ -1,10 +0,0 @@ -// 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 linux && !arm && !arm64 && !mips64 && !mips64le && !ppc64 && !ppc64le && !s390x -// +build linux,!arm,!arm64,!mips64,!mips64le,!ppc64,!ppc64le,!s390x - -package cpu - -func doinit() {} diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go b/vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go deleted file mode 100644 index 021356d..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux && (ppc64 || ppc64le) -// +build linux -// +build ppc64 ppc64le - -package cpu - -// HWCAP/HWCAP2 bits. These are exposed by the kernel. -const ( - // ISA Level - _PPC_FEATURE2_ARCH_2_07 = 0x80000000 - _PPC_FEATURE2_ARCH_3_00 = 0x00800000 - - // CPU features - _PPC_FEATURE2_DARN = 0x00200000 - _PPC_FEATURE2_SCV = 0x00100000 -) - -func doinit() { - // HWCAP2 feature bits - PPC64.IsPOWER8 = isSet(hwCap2, _PPC_FEATURE2_ARCH_2_07) - PPC64.IsPOWER9 = isSet(hwCap2, _PPC_FEATURE2_ARCH_3_00) - PPC64.HasDARN = isSet(hwCap2, _PPC_FEATURE2_DARN) - PPC64.HasSCV = isSet(hwCap2, _PPC_FEATURE2_SCV) -} - -func isSet(hwc uint, value uint) bool { - return hwc&value != 0 -} diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_s390x.go b/vendor/golang.org/x/sys/cpu/cpu_linux_s390x.go deleted file mode 100644 index 1517ac6..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_linux_s390x.go +++ /dev/null @@ -1,40 +0,0 @@ -// 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 cpu - -const ( - // bit mask values from /usr/include/bits/hwcap.h - hwcap_ZARCH = 2 - hwcap_STFLE = 4 - hwcap_MSA = 8 - hwcap_LDISP = 16 - hwcap_EIMM = 32 - hwcap_DFP = 64 - hwcap_ETF3EH = 256 - hwcap_VX = 2048 - hwcap_VXE = 8192 -) - -func initS390Xbase() { - // test HWCAP bit vector - has := func(featureMask uint) bool { - return hwCap&featureMask == featureMask - } - - // mandatory - S390X.HasZARCH = has(hwcap_ZARCH) - - // optional - S390X.HasSTFLE = has(hwcap_STFLE) - S390X.HasLDISP = has(hwcap_LDISP) - S390X.HasEIMM = has(hwcap_EIMM) - S390X.HasETF3EH = has(hwcap_ETF3EH) - S390X.HasDFP = has(hwcap_DFP) - S390X.HasMSA = has(hwcap_MSA) - S390X.HasVX = has(hwcap_VX) - if S390X.HasVX { - S390X.HasVXE = has(hwcap_VXE) - } -} diff --git a/vendor/golang.org/x/sys/cpu/cpu_loong64.go b/vendor/golang.org/x/sys/cpu/cpu_loong64.go deleted file mode 100644 index 0f57b05..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_loong64.go +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2022 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build loong64 -// +build loong64 - -package cpu - -const cacheLineSize = 64 - -func initOptions() { -} diff --git a/vendor/golang.org/x/sys/cpu/cpu_mips64x.go b/vendor/golang.org/x/sys/cpu/cpu_mips64x.go deleted file mode 100644 index f4063c6..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_mips64x.go +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build mips64 || mips64le -// +build mips64 mips64le - -package cpu - -const cacheLineSize = 32 - -func initOptions() { - options = []option{ - {Name: "msa", Feature: &MIPS64X.HasMSA}, - } -} diff --git a/vendor/golang.org/x/sys/cpu/cpu_mipsx.go b/vendor/golang.org/x/sys/cpu/cpu_mipsx.go deleted file mode 100644 index 07c4e36..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_mipsx.go +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build mips || mipsle -// +build mips mipsle - -package cpu - -const cacheLineSize = 32 - -func initOptions() {} diff --git a/vendor/golang.org/x/sys/cpu/cpu_netbsd_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_netbsd_arm64.go deleted file mode 100644 index ebfb3fc..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_netbsd_arm64.go +++ /dev/null @@ -1,173 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package cpu - -import ( - "syscall" - "unsafe" -) - -// Minimal copy of functionality from x/sys/unix so the cpu package can call -// sysctl without depending on x/sys/unix. - -const ( - _CTL_QUERY = -2 - - _SYSCTL_VERS_1 = 0x1000000 -) - -var _zero uintptr - -func sysctl(mib []int32, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { - _p0 = unsafe.Pointer(&mib[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, errno := syscall.Syscall6( - syscall.SYS___SYSCTL, - uintptr(_p0), - uintptr(len(mib)), - uintptr(unsafe.Pointer(old)), - uintptr(unsafe.Pointer(oldlen)), - uintptr(unsafe.Pointer(new)), - uintptr(newlen)) - if errno != 0 { - return errno - } - return nil -} - -type sysctlNode struct { - Flags uint32 - Num int32 - Name [32]int8 - Ver uint32 - __rsvd uint32 - Un [16]byte - _sysctl_size [8]byte - _sysctl_func [8]byte - _sysctl_parent [8]byte - _sysctl_desc [8]byte -} - -func sysctlNodes(mib []int32) ([]sysctlNode, error) { - var olen uintptr - - // Get a list of all sysctl nodes below the given MIB by performing - // a sysctl for the given MIB with CTL_QUERY appended. - mib = append(mib, _CTL_QUERY) - qnode := sysctlNode{Flags: _SYSCTL_VERS_1} - qp := (*byte)(unsafe.Pointer(&qnode)) - sz := unsafe.Sizeof(qnode) - if err := sysctl(mib, nil, &olen, qp, sz); err != nil { - return nil, err - } - - // Now that we know the size, get the actual nodes. - nodes := make([]sysctlNode, olen/sz) - np := (*byte)(unsafe.Pointer(&nodes[0])) - if err := sysctl(mib, np, &olen, qp, sz); err != nil { - return nil, err - } - - return nodes, nil -} - -func nametomib(name string) ([]int32, error) { - // Split name into components. - var parts []string - last := 0 - for i := 0; i < len(name); i++ { - if name[i] == '.' { - parts = append(parts, name[last:i]) - last = i + 1 - } - } - parts = append(parts, name[last:]) - - mib := []int32{} - // Discover the nodes and construct the MIB OID. - for partno, part := range parts { - nodes, err := sysctlNodes(mib) - if err != nil { - return nil, err - } - for _, node := range nodes { - n := make([]byte, 0) - for i := range node.Name { - if node.Name[i] != 0 { - n = append(n, byte(node.Name[i])) - } - } - if string(n) == part { - mib = append(mib, int32(node.Num)) - break - } - } - if len(mib) != partno+1 { - return nil, err - } - } - - return mib, nil -} - -// aarch64SysctlCPUID is struct aarch64_sysctl_cpu_id from NetBSD's -type aarch64SysctlCPUID struct { - midr uint64 /* Main ID Register */ - revidr uint64 /* Revision ID Register */ - mpidr uint64 /* Multiprocessor Affinity Register */ - aa64dfr0 uint64 /* A64 Debug Feature Register 0 */ - aa64dfr1 uint64 /* A64 Debug Feature Register 1 */ - aa64isar0 uint64 /* A64 Instruction Set Attribute Register 0 */ - aa64isar1 uint64 /* A64 Instruction Set Attribute Register 1 */ - aa64mmfr0 uint64 /* A64 Memory Model Feature Register 0 */ - aa64mmfr1 uint64 /* A64 Memory Model Feature Register 1 */ - aa64mmfr2 uint64 /* A64 Memory Model Feature Register 2 */ - aa64pfr0 uint64 /* A64 Processor Feature Register 0 */ - aa64pfr1 uint64 /* A64 Processor Feature Register 1 */ - aa64zfr0 uint64 /* A64 SVE Feature ID Register 0 */ - mvfr0 uint32 /* Media and VFP Feature Register 0 */ - mvfr1 uint32 /* Media and VFP Feature Register 1 */ - mvfr2 uint32 /* Media and VFP Feature Register 2 */ - pad uint32 - clidr uint64 /* Cache Level ID Register */ - ctr uint64 /* Cache Type Register */ -} - -func sysctlCPUID(name string) (*aarch64SysctlCPUID, error) { - mib, err := nametomib(name) - if err != nil { - return nil, err - } - - out := aarch64SysctlCPUID{} - n := unsafe.Sizeof(out) - _, _, errno := syscall.Syscall6( - syscall.SYS___SYSCTL, - uintptr(unsafe.Pointer(&mib[0])), - uintptr(len(mib)), - uintptr(unsafe.Pointer(&out)), - uintptr(unsafe.Pointer(&n)), - uintptr(0), - uintptr(0)) - if errno != 0 { - return nil, errno - } - return &out, nil -} - -func doinit() { - cpuid, err := sysctlCPUID("machdep.cpu0.cpu_id") - if err != nil { - setMinimalFeatures() - return - } - parseARM64SystemRegisters(cpuid.aa64isar0, cpuid.aa64isar1, cpuid.aa64pfr0) - - Initialized = true -} diff --git a/vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.go deleted file mode 100644 index 85b64d5..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2022 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package cpu - -import ( - "syscall" - "unsafe" -) - -// Minimal copy of functionality from x/sys/unix so the cpu package can call -// sysctl without depending on x/sys/unix. - -const ( - // From OpenBSD's sys/sysctl.h. - _CTL_MACHDEP = 7 - - // From OpenBSD's machine/cpu.h. - _CPU_ID_AA64ISAR0 = 2 - _CPU_ID_AA64ISAR1 = 3 -) - -// Implemented in the runtime package (runtime/sys_openbsd3.go) -func syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) - -//go:linkname syscall_syscall6 syscall.syscall6 - -func sysctl(mib []uint32, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - _, _, errno := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(unsafe.Pointer(&mib[0])), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) - if errno != 0 { - return errno - } - return nil -} - -var libc_sysctl_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sysctl sysctl "libc.so" - -func sysctlUint64(mib []uint32) (uint64, bool) { - var out uint64 - nout := unsafe.Sizeof(out) - if err := sysctl(mib, (*byte)(unsafe.Pointer(&out)), &nout, nil, 0); err != nil { - return 0, false - } - return out, true -} - -func doinit() { - setMinimalFeatures() - - // Get ID_AA64ISAR0 and ID_AA64ISAR1 from sysctl. - isar0, ok := sysctlUint64([]uint32{_CTL_MACHDEP, _CPU_ID_AA64ISAR0}) - if !ok { - return - } - isar1, ok := sysctlUint64([]uint32{_CTL_MACHDEP, _CPU_ID_AA64ISAR1}) - if !ok { - return - } - parseARM64SystemRegisters(isar0, isar1, 0) - - Initialized = true -} diff --git a/vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.s b/vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.s deleted file mode 100644 index 054ba05..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.s +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2022 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -#include "textflag.h" - -TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sysctl(SB) - -GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 -DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) diff --git a/vendor/golang.org/x/sys/cpu/cpu_other_arm.go b/vendor/golang.org/x/sys/cpu/cpu_other_arm.go deleted file mode 100644 index d7b4fb4..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_other_arm.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !linux && arm -// +build !linux,arm - -package cpu - -func archInit() {} diff --git a/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go deleted file mode 100644 index f3cde12..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go +++ /dev/null @@ -1,10 +0,0 @@ -// 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 !linux && !netbsd && !openbsd && arm64 -// +build !linux,!netbsd,!openbsd,arm64 - -package cpu - -func doinit() {} diff --git a/vendor/golang.org/x/sys/cpu/cpu_other_mips64x.go b/vendor/golang.org/x/sys/cpu/cpu_other_mips64x.go deleted file mode 100644 index 0dafe96..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_other_mips64x.go +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !linux && (mips64 || mips64le) -// +build !linux -// +build mips64 mips64le - -package cpu - -func archInit() { - Initialized = true -} diff --git a/vendor/golang.org/x/sys/cpu/cpu_other_riscv64.go b/vendor/golang.org/x/sys/cpu/cpu_other_riscv64.go deleted file mode 100644 index dd10eb7..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_other_riscv64.go +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2022 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !linux && riscv64 -// +build !linux,riscv64 - -package cpu - -func archInit() { - Initialized = true -} diff --git a/vendor/golang.org/x/sys/cpu/cpu_ppc64x.go b/vendor/golang.org/x/sys/cpu/cpu_ppc64x.go deleted file mode 100644 index 4e8acd1..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_ppc64x.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build ppc64 || ppc64le -// +build ppc64 ppc64le - -package cpu - -const cacheLineSize = 128 - -func initOptions() { - options = []option{ - {Name: "darn", Feature: &PPC64.HasDARN}, - {Name: "scv", Feature: &PPC64.HasSCV}, - } -} diff --git a/vendor/golang.org/x/sys/cpu/cpu_riscv64.go b/vendor/golang.org/x/sys/cpu/cpu_riscv64.go deleted file mode 100644 index bd6c128..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_riscv64.go +++ /dev/null @@ -1,12 +0,0 @@ -// 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 -// +build riscv64 - -package cpu - -const cacheLineSize = 32 - -func initOptions() {} diff --git a/vendor/golang.org/x/sys/cpu/cpu_s390x.go b/vendor/golang.org/x/sys/cpu/cpu_s390x.go deleted file mode 100644 index 5881b88..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_s390x.go +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package cpu - -const cacheLineSize = 256 - -func initOptions() { - options = []option{ - {Name: "zarch", Feature: &S390X.HasZARCH, Required: true}, - {Name: "stfle", Feature: &S390X.HasSTFLE, Required: true}, - {Name: "ldisp", Feature: &S390X.HasLDISP, Required: true}, - {Name: "eimm", Feature: &S390X.HasEIMM, Required: true}, - {Name: "dfp", Feature: &S390X.HasDFP}, - {Name: "etf3eh", Feature: &S390X.HasETF3EH}, - {Name: "msa", Feature: &S390X.HasMSA}, - {Name: "aes", Feature: &S390X.HasAES}, - {Name: "aescbc", Feature: &S390X.HasAESCBC}, - {Name: "aesctr", Feature: &S390X.HasAESCTR}, - {Name: "aesgcm", Feature: &S390X.HasAESGCM}, - {Name: "ghash", Feature: &S390X.HasGHASH}, - {Name: "sha1", Feature: &S390X.HasSHA1}, - {Name: "sha256", Feature: &S390X.HasSHA256}, - {Name: "sha3", Feature: &S390X.HasSHA3}, - {Name: "sha512", Feature: &S390X.HasSHA512}, - {Name: "vx", Feature: &S390X.HasVX}, - {Name: "vxe", Feature: &S390X.HasVXE}, - } -} - -// bitIsSet reports whether the bit at index is set. The bit index -// is in big endian order, so bit index 0 is the leftmost bit. -func bitIsSet(bits []uint64, index uint) bool { - return bits[index/64]&((1<<63)>>(index%64)) != 0 -} - -// facility is a bit index for the named facility. -type facility uint8 - -const ( - // mandatory facilities - zarch facility = 1 // z architecture mode is active - stflef facility = 7 // store-facility-list-extended - ldisp facility = 18 // long-displacement - eimm facility = 21 // extended-immediate - - // miscellaneous facilities - dfp facility = 42 // decimal-floating-point - etf3eh facility = 30 // extended-translation 3 enhancement - - // cryptography facilities - msa facility = 17 // message-security-assist - msa3 facility = 76 // message-security-assist extension 3 - msa4 facility = 77 // message-security-assist extension 4 - msa5 facility = 57 // message-security-assist extension 5 - msa8 facility = 146 // message-security-assist extension 8 - msa9 facility = 155 // message-security-assist extension 9 - - // vector facilities - vx facility = 129 // vector facility - vxe facility = 135 // vector-enhancements 1 - vxe2 facility = 148 // vector-enhancements 2 -) - -// facilityList contains the result of an STFLE call. -// Bits are numbered in big endian order so the -// leftmost bit (the MSB) is at index 0. -type facilityList struct { - bits [4]uint64 -} - -// Has reports whether the given facilities are present. -func (s *facilityList) Has(fs ...facility) bool { - if len(fs) == 0 { - panic("no facility bits provided") - } - for _, f := range fs { - if !bitIsSet(s.bits[:], uint(f)) { - return false - } - } - return true -} - -// function is the code for the named cryptographic function. -type function uint8 - -const ( - // KM{,A,C,CTR} function codes - aes128 function = 18 // AES-128 - aes192 function = 19 // AES-192 - aes256 function = 20 // AES-256 - - // K{I,L}MD function codes - sha1 function = 1 // SHA-1 - sha256 function = 2 // SHA-256 - sha512 function = 3 // SHA-512 - sha3_224 function = 32 // SHA3-224 - sha3_256 function = 33 // SHA3-256 - sha3_384 function = 34 // SHA3-384 - sha3_512 function = 35 // SHA3-512 - shake128 function = 36 // SHAKE-128 - shake256 function = 37 // SHAKE-256 - - // KLMD function codes - ghash function = 65 // GHASH -) - -// queryResult contains the result of a Query function -// call. Bits are numbered in big endian order so the -// leftmost bit (the MSB) is at index 0. -type queryResult struct { - bits [2]uint64 -} - -// Has reports whether the given functions are present. -func (q *queryResult) Has(fns ...function) bool { - if len(fns) == 0 { - panic("no function codes provided") - } - for _, f := range fns { - if !bitIsSet(q.bits[:], uint(f)) { - return false - } - } - return true -} - -func doinit() { - initS390Xbase() - - // We need implementations of stfle, km and so on - // to detect cryptographic features. - if !haveAsmFunctions() { - return - } - - // optional cryptographic functions - if S390X.HasMSA { - aes := []function{aes128, aes192, aes256} - - // cipher message - km, kmc := kmQuery(), kmcQuery() - S390X.HasAES = km.Has(aes...) - S390X.HasAESCBC = kmc.Has(aes...) - if S390X.HasSTFLE { - facilities := stfle() - if facilities.Has(msa4) { - kmctr := kmctrQuery() - S390X.HasAESCTR = kmctr.Has(aes...) - } - if facilities.Has(msa8) { - kma := kmaQuery() - S390X.HasAESGCM = kma.Has(aes...) - } - } - - // compute message digest - kimd := kimdQuery() // intermediate (no padding) - klmd := klmdQuery() // last (padding) - S390X.HasSHA1 = kimd.Has(sha1) && klmd.Has(sha1) - S390X.HasSHA256 = kimd.Has(sha256) && klmd.Has(sha256) - S390X.HasSHA512 = kimd.Has(sha512) && klmd.Has(sha512) - S390X.HasGHASH = kimd.Has(ghash) // KLMD-GHASH does not exist - sha3 := []function{ - sha3_224, sha3_256, sha3_384, sha3_512, - shake128, shake256, - } - S390X.HasSHA3 = kimd.Has(sha3...) && klmd.Has(sha3...) - } -} diff --git a/vendor/golang.org/x/sys/cpu/cpu_s390x.s b/vendor/golang.org/x/sys/cpu/cpu_s390x.s deleted file mode 100644 index 96f81e2..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_s390x.s +++ /dev/null @@ -1,58 +0,0 @@ -// 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 -// +build gc - -#include "textflag.h" - -// func stfle() facilityList -TEXT ·stfle(SB), NOSPLIT|NOFRAME, $0-32 - MOVD $ret+0(FP), R1 - MOVD $3, R0 // last doubleword index to store - XC $32, (R1), (R1) // clear 4 doublewords (32 bytes) - WORD $0xb2b01000 // store facility list extended (STFLE) - RET - -// func kmQuery() queryResult -TEXT ·kmQuery(SB), NOSPLIT|NOFRAME, $0-16 - MOVD $0, R0 // set function code to 0 (KM-Query) - MOVD $ret+0(FP), R1 // address of 16-byte return value - WORD $0xB92E0024 // cipher message (KM) - RET - -// func kmcQuery() queryResult -TEXT ·kmcQuery(SB), NOSPLIT|NOFRAME, $0-16 - MOVD $0, R0 // set function code to 0 (KMC-Query) - MOVD $ret+0(FP), R1 // address of 16-byte return value - WORD $0xB92F0024 // cipher message with chaining (KMC) - RET - -// func kmctrQuery() queryResult -TEXT ·kmctrQuery(SB), NOSPLIT|NOFRAME, $0-16 - MOVD $0, R0 // set function code to 0 (KMCTR-Query) - MOVD $ret+0(FP), R1 // address of 16-byte return value - WORD $0xB92D4024 // cipher message with counter (KMCTR) - RET - -// func kmaQuery() queryResult -TEXT ·kmaQuery(SB), NOSPLIT|NOFRAME, $0-16 - MOVD $0, R0 // set function code to 0 (KMA-Query) - MOVD $ret+0(FP), R1 // address of 16-byte return value - WORD $0xb9296024 // cipher message with authentication (KMA) - RET - -// func kimdQuery() queryResult -TEXT ·kimdQuery(SB), NOSPLIT|NOFRAME, $0-16 - MOVD $0, R0 // set function code to 0 (KIMD-Query) - MOVD $ret+0(FP), R1 // address of 16-byte return value - WORD $0xB93E0024 // compute intermediate message digest (KIMD) - RET - -// func klmdQuery() queryResult -TEXT ·klmdQuery(SB), NOSPLIT|NOFRAME, $0-16 - MOVD $0, R0 // set function code to 0 (KLMD-Query) - MOVD $ret+0(FP), R1 // address of 16-byte return value - WORD $0xB93F0024 // compute last message digest (KLMD) - RET diff --git a/vendor/golang.org/x/sys/cpu/cpu_wasm.go b/vendor/golang.org/x/sys/cpu/cpu_wasm.go deleted file mode 100644 index 7747d88..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_wasm.go +++ /dev/null @@ -1,18 +0,0 @@ -// 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 wasm -// +build wasm - -package cpu - -// We're compiling the cpu package for an unknown (software-abstracted) CPU. -// Make CacheLinePad an empty struct and hope that the usual struct alignment -// rules are good enough. - -const cacheLineSize = 0 - -func initOptions() {} - -func archInit() {} diff --git a/vendor/golang.org/x/sys/cpu/cpu_x86.go b/vendor/golang.org/x/sys/cpu/cpu_x86.go deleted file mode 100644 index f5aacfc..0000000 --- a/vendor/golang.org/x/sys/cpu/cpu_x86.go +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build 386 || amd64 || amd64p32 -// +build 386 amd64 amd64p32 - -package cpu - -import "runtime" - -const cacheLineSize = 64 - -func initOptions() { - options = []option{ - {Name: "adx", Feature: &X86.HasADX}, - {Name: "aes", Feature: &X86.HasAES}, - {Name: "avx", Feature: &X86.HasAVX}, - {Name: "avx2", Feature: &X86.HasAVX2}, - {Name: "avx512", Feature: &X86.HasAVX512}, - {Name: "avx512f", Feature: &X86.HasAVX512F}, - {Name: "avx512cd", Feature: &X86.HasAVX512CD}, - {Name: "avx512er", Feature: &X86.HasAVX512ER}, - {Name: "avx512pf", Feature: &X86.HasAVX512PF}, - {Name: "avx512vl", Feature: &X86.HasAVX512VL}, - {Name: "avx512bw", Feature: &X86.HasAVX512BW}, - {Name: "avx512dq", Feature: &X86.HasAVX512DQ}, - {Name: "avx512ifma", Feature: &X86.HasAVX512IFMA}, - {Name: "avx512vbmi", Feature: &X86.HasAVX512VBMI}, - {Name: "avx512vnniw", Feature: &X86.HasAVX5124VNNIW}, - {Name: "avx5124fmaps", Feature: &X86.HasAVX5124FMAPS}, - {Name: "avx512vpopcntdq", Feature: &X86.HasAVX512VPOPCNTDQ}, - {Name: "avx512vpclmulqdq", Feature: &X86.HasAVX512VPCLMULQDQ}, - {Name: "avx512vnni", Feature: &X86.HasAVX512VNNI}, - {Name: "avx512gfni", Feature: &X86.HasAVX512GFNI}, - {Name: "avx512vaes", Feature: &X86.HasAVX512VAES}, - {Name: "avx512vbmi2", Feature: &X86.HasAVX512VBMI2}, - {Name: "avx512bitalg", Feature: &X86.HasAVX512BITALG}, - {Name: "avx512bf16", Feature: &X86.HasAVX512BF16}, - {Name: "bmi1", Feature: &X86.HasBMI1}, - {Name: "bmi2", Feature: &X86.HasBMI2}, - {Name: "cx16", Feature: &X86.HasCX16}, - {Name: "erms", Feature: &X86.HasERMS}, - {Name: "fma", Feature: &X86.HasFMA}, - {Name: "osxsave", Feature: &X86.HasOSXSAVE}, - {Name: "pclmulqdq", Feature: &X86.HasPCLMULQDQ}, - {Name: "popcnt", Feature: &X86.HasPOPCNT}, - {Name: "rdrand", Feature: &X86.HasRDRAND}, - {Name: "rdseed", Feature: &X86.HasRDSEED}, - {Name: "sse3", Feature: &X86.HasSSE3}, - {Name: "sse41", Feature: &X86.HasSSE41}, - {Name: "sse42", Feature: &X86.HasSSE42}, - {Name: "ssse3", Feature: &X86.HasSSSE3}, - - // These capabilities should always be enabled on amd64: - {Name: "sse2", Feature: &X86.HasSSE2, Required: runtime.GOARCH == "amd64"}, - } -} - -func archInit() { - - Initialized = true - - maxID, _, _, _ := cpuid(0, 0) - - if maxID < 1 { - return - } - - _, _, ecx1, edx1 := cpuid(1, 0) - X86.HasSSE2 = isSet(26, edx1) - - X86.HasSSE3 = isSet(0, ecx1) - X86.HasPCLMULQDQ = isSet(1, ecx1) - X86.HasSSSE3 = isSet(9, ecx1) - X86.HasFMA = isSet(12, ecx1) - X86.HasCX16 = isSet(13, ecx1) - X86.HasSSE41 = isSet(19, ecx1) - X86.HasSSE42 = isSet(20, ecx1) - X86.HasPOPCNT = isSet(23, ecx1) - X86.HasAES = isSet(25, ecx1) - X86.HasOSXSAVE = isSet(27, ecx1) - X86.HasRDRAND = isSet(30, ecx1) - - var osSupportsAVX, osSupportsAVX512 bool - // For XGETBV, OSXSAVE bit is required and sufficient. - if X86.HasOSXSAVE { - eax, _ := xgetbv() - // Check if XMM and YMM registers have OS support. - osSupportsAVX = isSet(1, eax) && isSet(2, eax) - - if runtime.GOOS == "darwin" { - // Darwin doesn't save/restore AVX-512 mask registers correctly across signal handlers. - // Since users can't rely on mask register contents, let's not advertise AVX-512 support. - // See issue 49233. - osSupportsAVX512 = false - } else { - // Check if OPMASK and ZMM registers have OS support. - osSupportsAVX512 = osSupportsAVX && isSet(5, eax) && isSet(6, eax) && isSet(7, eax) - } - } - - X86.HasAVX = isSet(28, ecx1) && osSupportsAVX - - if maxID < 7 { - return - } - - _, ebx7, ecx7, edx7 := cpuid(7, 0) - X86.HasBMI1 = isSet(3, ebx7) - X86.HasAVX2 = isSet(5, ebx7) && osSupportsAVX - X86.HasBMI2 = isSet(8, ebx7) - X86.HasERMS = isSet(9, ebx7) - X86.HasRDSEED = isSet(18, ebx7) - X86.HasADX = isSet(19, ebx7) - - X86.HasAVX512 = isSet(16, ebx7) && osSupportsAVX512 // Because avx-512 foundation is the core required extension - if X86.HasAVX512 { - X86.HasAVX512F = true - X86.HasAVX512CD = isSet(28, ebx7) - X86.HasAVX512ER = isSet(27, ebx7) - X86.HasAVX512PF = isSet(26, ebx7) - X86.HasAVX512VL = isSet(31, ebx7) - X86.HasAVX512BW = isSet(30, ebx7) - X86.HasAVX512DQ = isSet(17, ebx7) - X86.HasAVX512IFMA = isSet(21, ebx7) - X86.HasAVX512VBMI = isSet(1, ecx7) - X86.HasAVX5124VNNIW = isSet(2, edx7) - X86.HasAVX5124FMAPS = isSet(3, edx7) - X86.HasAVX512VPOPCNTDQ = isSet(14, ecx7) - X86.HasAVX512VPCLMULQDQ = isSet(10, ecx7) - X86.HasAVX512VNNI = isSet(11, ecx7) - X86.HasAVX512GFNI = isSet(8, ecx7) - X86.HasAVX512VAES = isSet(9, ecx7) - X86.HasAVX512VBMI2 = isSet(6, ecx7) - X86.HasAVX512BITALG = isSet(12, ecx7) - - eax71, _, _, _ := cpuid(7, 1) - X86.HasAVX512BF16 = isSet(5, eax71) - } -} - -func isSet(bitpos uint, value uint32) bool { - return value&(1<> 63)) -) - -// For those platforms don't have a 'cpuid' equivalent we use HWCAP/HWCAP2 -// These are initialized in cpu_$GOARCH.go -// and should not be changed after they are initialized. -var hwCap uint -var hwCap2 uint - -func readHWCAP() error { - buf, err := ioutil.ReadFile(procAuxv) - if err != nil { - // e.g. on android /proc/self/auxv is not accessible, so silently - // ignore the error and leave Initialized = false. On some - // architectures (e.g. arm64) doinit() implements a fallback - // readout and will set Initialized = true again. - return err - } - bo := hostByteOrder() - for len(buf) >= 2*(uintSize/8) { - var tag, val uint - switch uintSize { - case 32: - tag = uint(bo.Uint32(buf[0:])) - val = uint(bo.Uint32(buf[4:])) - buf = buf[8:] - case 64: - tag = uint(bo.Uint64(buf[0:])) - val = uint(bo.Uint64(buf[8:])) - buf = buf[16:] - } - switch tag { - case _AT_HWCAP: - hwCap = val - case _AT_HWCAP2: - hwCap2 = val - } - } - return nil -} diff --git a/vendor/golang.org/x/sys/cpu/syscall_aix_gccgo.go b/vendor/golang.org/x/sys/cpu/syscall_aix_gccgo.go deleted file mode 100644 index 9613415..0000000 --- a/vendor/golang.org/x/sys/cpu/syscall_aix_gccgo.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Recreate a getsystemcfg syscall handler instead of -// using the one provided by x/sys/unix to avoid having -// the dependency between them. (See golang.org/issue/32102) -// Moreover, this file will be used during the building of -// gccgo's libgo and thus must not used a CGo method. - -//go:build aix && gccgo -// +build aix,gccgo - -package cpu - -import ( - "syscall" -) - -//extern getsystemcfg -func gccgoGetsystemcfg(label uint32) (r uint64) - -func callgetsystemcfg(label int) (r1 uintptr, e1 syscall.Errno) { - r1 = uintptr(gccgoGetsystemcfg(uint32(label))) - e1 = syscall.GetErrno() - return -} diff --git a/vendor/golang.org/x/sys/cpu/syscall_aix_ppc64_gc.go b/vendor/golang.org/x/sys/cpu/syscall_aix_ppc64_gc.go deleted file mode 100644 index 904be42..0000000 --- a/vendor/golang.org/x/sys/cpu/syscall_aix_ppc64_gc.go +++ /dev/null @@ -1,36 +0,0 @@ -// 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. - -// Minimal copy of x/sys/unix so the cpu package can make a -// system call on AIX without depending on x/sys/unix. -// (See golang.org/issue/32102) - -//go:build aix && ppc64 && gc -// +build aix,ppc64,gc - -package cpu - -import ( - "syscall" - "unsafe" -) - -//go:cgo_import_dynamic libc_getsystemcfg getsystemcfg "libc.a/shr_64.o" - -//go:linkname libc_getsystemcfg libc_getsystemcfg - -type syscallFunc uintptr - -var libc_getsystemcfg syscallFunc - -type errno = syscall.Errno - -// Implemented in runtime/syscall_aix.go. -func rawSyscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err errno) -func syscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err errno) - -func callgetsystemcfg(label int) (r1 uintptr, e1 errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getsystemcfg)), 1, uintptr(label), 0, 0, 0, 0, 0) - return -} diff --git a/vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go b/vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go deleted file mode 100644 index e07899b..0000000 --- a/vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package unsafeheader contains header declarations for the Go runtime's -// slice and string implementations. -// -// This package allows x/sys to use types equivalent to -// reflect.SliceHeader and reflect.StringHeader without introducing -// a dependency on the (relatively heavy) "reflect" package. -package unsafeheader - -import ( - "unsafe" -) - -// Slice is the runtime representation of a slice. -// It cannot be used safely or portably and its representation may change in a later release. -type Slice struct { - Data unsafe.Pointer - Len int - Cap int -} - -// String is the runtime representation of a string. -// It cannot be used safely or portably and its representation may change in a later release. -type String struct { - Data unsafe.Pointer - Len int -} diff --git a/vendor/golang.org/x/sys/unix/.gitignore b/vendor/golang.org/x/sys/unix/.gitignore deleted file mode 100644 index e3e0fc6..0000000 --- a/vendor/golang.org/x/sys/unix/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -_obj/ -unix.test diff --git a/vendor/golang.org/x/sys/unix/README.md b/vendor/golang.org/x/sys/unix/README.md deleted file mode 100644 index 7d3c060..0000000 --- a/vendor/golang.org/x/sys/unix/README.md +++ /dev/null @@ -1,184 +0,0 @@ -# Building `sys/unix` - -The sys/unix package provides access to the raw system call interface of the -underlying operating system. See: https://godoc.org/golang.org/x/sys/unix - -Porting Go to a new architecture/OS combination or adding syscalls, types, or -constants to an existing architecture/OS pair requires some manual effort; -however, there are tools that automate much of the process. - -## Build Systems - -There are currently two ways we generate the necessary files. We are currently -migrating the build system to use containers so the builds are reproducible. -This is being done on an OS-by-OS basis. Please update this documentation as -components of the build system change. - -### Old Build System (currently for `GOOS != "linux"`) - -The old build system generates the Go files based on the C header files -present on your system. This means that files -for a given GOOS/GOARCH pair must be generated on a system with that OS and -architecture. This also means that the generated code can differ from system -to system, based on differences in the header files. - -To avoid this, if you are using the old build system, only generate the Go -files on an installation with unmodified header files. It is also important to -keep track of which version of the OS the files were generated from (ex. -Darwin 14 vs Darwin 15). This makes it easier to track the progress of changes -and have each OS upgrade correspond to a single change. - -To build the files for your current OS and architecture, make sure GOOS and -GOARCH are set correctly and run `mkall.sh`. This will generate the files for -your specific system. Running `mkall.sh -n` shows the commands that will be run. - -Requirements: bash, go - -### New Build System (currently for `GOOS == "linux"`) - -The new build system uses a Docker container to generate the go files directly -from source checkouts of the kernel and various system libraries. This means -that on any platform that supports Docker, all the files using the new build -system can be generated at once, and generated files will not change based on -what the person running the scripts has installed on their computer. - -The OS specific files for the new build system are located in the `${GOOS}` -directory, and the build is coordinated by the `${GOOS}/mkall.go` program. When -the kernel or system library updates, modify the Dockerfile at -`${GOOS}/Dockerfile` to checkout the new release of the source. - -To build all the files under the new build system, you must be on an amd64/Linux -system and have your GOOS and GOARCH set accordingly. Running `mkall.sh` will -then generate all of the files for all of the GOOS/GOARCH pairs in the new build -system. Running `mkall.sh -n` shows the commands that will be run. - -Requirements: bash, go, docker - -## Component files - -This section describes the various files used in the code generation process. -It also contains instructions on how to modify these files to add a new -architecture/OS or to add additional syscalls, types, or constants. Note that -if you are using the new build system, the scripts/programs cannot be called normally. -They must be called from within the docker container. - -### asm files - -The hand-written assembly file at `asm_${GOOS}_${GOARCH}.s` implements system -call dispatch. There are three entry points: -``` - func Syscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr) - func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) - func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr) -``` -The first and second are the standard ones; they differ only in how many -arguments can be passed to the kernel. The third is for low-level use by the -ForkExec wrapper. Unlike the first two, it does not call into the scheduler to -let it know that a system call is running. - -When porting Go to a new architecture/OS, this file must be implemented for -each GOOS/GOARCH pair. - -### mksysnum - -Mksysnum is a Go program located at `${GOOS}/mksysnum.go` (or `mksysnum_${GOOS}.go` -for the old system). This program takes in a list of header files containing the -syscall number declarations and parses them to produce the corresponding list of -Go numeric constants. See `zsysnum_${GOOS}_${GOARCH}.go` for the generated -constants. - -Adding new syscall numbers is mostly done by running the build on a sufficiently -new installation of the target OS (or updating the source checkouts for the -new build system). However, depending on the OS, you may need to update the -parsing in mksysnum. - -### mksyscall.go - -The `syscall.go`, `syscall_${GOOS}.go`, `syscall_${GOOS}_${GOARCH}.go` are -hand-written Go files which implement system calls (for unix, the specific OS, -or the specific OS/Architecture pair respectively) that need special handling -and list `//sys` comments giving prototypes for ones that can be generated. - -The mksyscall.go program takes the `//sys` and `//sysnb` comments and converts -them into syscalls. This requires the name of the prototype in the comment to -match a syscall number in the `zsysnum_${GOOS}_${GOARCH}.go` file. The function -prototype can be exported (capitalized) or not. - -Adding a new syscall often just requires adding a new `//sys` function prototype -with the desired arguments and a capitalized name so it is exported. However, if -you want the interface to the syscall to be different, often one will make an -unexported `//sys` prototype, and then write a custom wrapper in -`syscall_${GOOS}.go`. - -### types files - -For each OS, there is a hand-written Go file at `${GOOS}/types.go` (or -`types_${GOOS}.go` on the old system). This file includes standard C headers and -creates Go type aliases to the corresponding C types. The file is then fed -through godef to get the Go compatible definitions. Finally, the generated code -is fed though mkpost.go to format the code correctly and remove any hidden or -private identifiers. This cleaned-up code is written to -`ztypes_${GOOS}_${GOARCH}.go`. - -The hardest part about preparing this file is figuring out which headers to -include and which symbols need to be `#define`d to get the actual data -structures that pass through to the kernel system calls. Some C libraries -preset alternate versions for binary compatibility and translate them on the -way in and out of system calls, but there is almost always a `#define` that can -get the real ones. -See `types_darwin.go` and `linux/types.go` for examples. - -To add a new type, add in the necessary include statement at the top of the -file (if it is not already there) and add in a type alias line. Note that if -your type is significantly different on different architectures, you may need -some `#if/#elif` macros in your include statements. - -### mkerrors.sh - -This script is used to generate the system's various constants. This doesn't -just include the error numbers and error strings, but also the signal numbers -and a wide variety of miscellaneous constants. The constants come from the list -of include files in the `includes_${uname}` variable. A regex then picks out -the desired `#define` statements, and generates the corresponding Go constants. -The error numbers and strings are generated from `#include `, and the -signal numbers and strings are generated from `#include `. All of -these constants are written to `zerrors_${GOOS}_${GOARCH}.go` via a C program, -`_errors.c`, which prints out all the constants. - -To add a constant, add the header that includes it to the appropriate variable. -Then, edit the regex (if necessary) to match the desired constant. Avoid making -the regex too broad to avoid matching unintended constants. - -### internal/mkmerge - -This program is used to extract duplicate const, func, and type declarations -from the generated architecture-specific files listed below, and merge these -into a common file for each OS. - -The merge is performed in the following steps: -1. Construct the set of common code that is idential in all architecture-specific files. -2. Write this common code to the merged file. -3. Remove the common code from all architecture-specific files. - - -## Generated files - -### `zerrors_${GOOS}_${GOARCH}.go` - -A file containing all of the system's generated error numbers, error strings, -signal numbers, and constants. Generated by `mkerrors.sh` (see above). - -### `zsyscall_${GOOS}_${GOARCH}.go` - -A file containing all the generated syscalls for a specific GOOS and GOARCH. -Generated by `mksyscall.go` (see above). - -### `zsysnum_${GOOS}_${GOARCH}.go` - -A list of numeric constants for all the syscall number of the specific GOOS -and GOARCH. Generated by mksysnum (see above). - -### `ztypes_${GOOS}_${GOARCH}.go` - -A file containing Go types for passing into (or returning from) syscalls. -Generated by godefs and the types file (see above). diff --git a/vendor/golang.org/x/sys/unix/affinity_linux.go b/vendor/golang.org/x/sys/unix/affinity_linux.go deleted file mode 100644 index 6e5c81a..0000000 --- a/vendor/golang.org/x/sys/unix/affinity_linux.go +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// CPU affinity functions - -package unix - -import ( - "math/bits" - "unsafe" -) - -const cpuSetSize = _CPU_SETSIZE / _NCPUBITS - -// CPUSet represents a CPU affinity mask. -type CPUSet [cpuSetSize]cpuMask - -func schedAffinity(trap uintptr, pid int, set *CPUSet) error { - _, _, e := RawSyscall(trap, uintptr(pid), uintptr(unsafe.Sizeof(*set)), uintptr(unsafe.Pointer(set))) - if e != 0 { - return errnoErr(e) - } - return nil -} - -// SchedGetaffinity gets the CPU affinity mask of the thread specified by pid. -// If pid is 0 the calling thread is used. -func SchedGetaffinity(pid int, set *CPUSet) error { - return schedAffinity(SYS_SCHED_GETAFFINITY, pid, set) -} - -// SchedSetaffinity sets the CPU affinity mask of the thread specified by pid. -// If pid is 0 the calling thread is used. -func SchedSetaffinity(pid int, set *CPUSet) error { - return schedAffinity(SYS_SCHED_SETAFFINITY, pid, set) -} - -// Zero clears the set s, so that it contains no CPUs. -func (s *CPUSet) Zero() { - for i := range s { - s[i] = 0 - } -} - -func cpuBitsIndex(cpu int) int { - return cpu / _NCPUBITS -} - -func cpuBitsMask(cpu int) cpuMask { - return cpuMask(1 << (uint(cpu) % _NCPUBITS)) -} - -// Set adds cpu to the set s. -func (s *CPUSet) Set(cpu int) { - i := cpuBitsIndex(cpu) - if i < len(s) { - s[i] |= cpuBitsMask(cpu) - } -} - -// Clear removes cpu from the set s. -func (s *CPUSet) Clear(cpu int) { - i := cpuBitsIndex(cpu) - if i < len(s) { - s[i] &^= cpuBitsMask(cpu) - } -} - -// IsSet reports whether cpu is in the set s. -func (s *CPUSet) IsSet(cpu int) bool { - i := cpuBitsIndex(cpu) - if i < len(s) { - return s[i]&cpuBitsMask(cpu) != 0 - } - return false -} - -// Count returns the number of CPUs in the set s. -func (s *CPUSet) Count() int { - c := 0 - for _, b := range s { - c += bits.OnesCount64(uint64(b)) - } - return c -} diff --git a/vendor/golang.org/x/sys/unix/aliases.go b/vendor/golang.org/x/sys/unix/aliases.go deleted file mode 100644 index abc89c1..0000000 --- a/vendor/golang.org/x/sys/unix/aliases.go +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos) && go1.9 -// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos -// +build go1.9 - -package unix - -import "syscall" - -type Signal = syscall.Signal -type Errno = syscall.Errno -type SysProcAttr = syscall.SysProcAttr diff --git a/vendor/golang.org/x/sys/unix/asm_aix_ppc64.s b/vendor/golang.org/x/sys/unix/asm_aix_ppc64.s deleted file mode 100644 index db9171c..0000000 --- a/vendor/golang.org/x/sys/unix/asm_aix_ppc64.s +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build gc -// +build gc - -#include "textflag.h" - -// -// System calls for ppc64, AIX are implemented in runtime/syscall_aix.go -// - -TEXT ·syscall6(SB),NOSPLIT,$0-88 - JMP syscall·syscall6(SB) - -TEXT ·rawSyscall6(SB),NOSPLIT,$0-88 - JMP syscall·rawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_bsd_386.s b/vendor/golang.org/x/sys/unix/asm_bsd_386.s deleted file mode 100644 index e0fcd9b..0000000 --- a/vendor/golang.org/x/sys/unix/asm_bsd_386.s +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build (freebsd || netbsd || openbsd) && gc -// +build freebsd netbsd openbsd -// +build gc - -#include "textflag.h" - -// System call support for 386 BSD - -// Just jump to package syscall's implementation for all these functions. -// The runtime may know about them. - -TEXT ·Syscall(SB),NOSPLIT,$0-28 - JMP syscall·Syscall(SB) - -TEXT ·Syscall6(SB),NOSPLIT,$0-40 - JMP syscall·Syscall6(SB) - -TEXT ·Syscall9(SB),NOSPLIT,$0-52 - JMP syscall·Syscall9(SB) - -TEXT ·RawSyscall(SB),NOSPLIT,$0-28 - JMP syscall·RawSyscall(SB) - -TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 - JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_bsd_amd64.s b/vendor/golang.org/x/sys/unix/asm_bsd_amd64.s deleted file mode 100644 index 2b99c34..0000000 --- a/vendor/golang.org/x/sys/unix/asm_bsd_amd64.s +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build (darwin || dragonfly || freebsd || netbsd || openbsd) && gc -// +build darwin dragonfly freebsd netbsd openbsd -// +build gc - -#include "textflag.h" - -// System call support for AMD64 BSD - -// Just jump to package syscall's implementation for all these functions. -// The runtime may know about them. - -TEXT ·Syscall(SB),NOSPLIT,$0-56 - JMP syscall·Syscall(SB) - -TEXT ·Syscall6(SB),NOSPLIT,$0-80 - JMP syscall·Syscall6(SB) - -TEXT ·Syscall9(SB),NOSPLIT,$0-104 - JMP syscall·Syscall9(SB) - -TEXT ·RawSyscall(SB),NOSPLIT,$0-56 - JMP syscall·RawSyscall(SB) - -TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 - JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_bsd_arm.s b/vendor/golang.org/x/sys/unix/asm_bsd_arm.s deleted file mode 100644 index d702d4a..0000000 --- a/vendor/golang.org/x/sys/unix/asm_bsd_arm.s +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build (freebsd || netbsd || openbsd) && gc -// +build freebsd netbsd openbsd -// +build gc - -#include "textflag.h" - -// System call support for ARM BSD - -// Just jump to package syscall's implementation for all these functions. -// The runtime may know about them. - -TEXT ·Syscall(SB),NOSPLIT,$0-28 - B syscall·Syscall(SB) - -TEXT ·Syscall6(SB),NOSPLIT,$0-40 - B syscall·Syscall6(SB) - -TEXT ·Syscall9(SB),NOSPLIT,$0-52 - B syscall·Syscall9(SB) - -TEXT ·RawSyscall(SB),NOSPLIT,$0-28 - B syscall·RawSyscall(SB) - -TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 - B syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_bsd_arm64.s b/vendor/golang.org/x/sys/unix/asm_bsd_arm64.s deleted file mode 100644 index fe36a73..0000000 --- a/vendor/golang.org/x/sys/unix/asm_bsd_arm64.s +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build (darwin || freebsd || netbsd || openbsd) && gc -// +build darwin freebsd netbsd openbsd -// +build gc - -#include "textflag.h" - -// System call support for ARM64 BSD - -// Just jump to package syscall's implementation for all these functions. -// The runtime may know about them. - -TEXT ·Syscall(SB),NOSPLIT,$0-56 - JMP syscall·Syscall(SB) - -TEXT ·Syscall6(SB),NOSPLIT,$0-80 - JMP syscall·Syscall6(SB) - -TEXT ·Syscall9(SB),NOSPLIT,$0-104 - JMP syscall·Syscall9(SB) - -TEXT ·RawSyscall(SB),NOSPLIT,$0-56 - JMP syscall·RawSyscall(SB) - -TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 - JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_bsd_riscv64.s b/vendor/golang.org/x/sys/unix/asm_bsd_riscv64.s deleted file mode 100644 index d560019..0000000 --- a/vendor/golang.org/x/sys/unix/asm_bsd_riscv64.s +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build (darwin || freebsd || netbsd || openbsd) && gc -// +build darwin freebsd netbsd openbsd -// +build gc - -#include "textflag.h" - -// System call support for RISCV64 BSD - -// Just jump to package syscall's implementation for all these functions. -// The runtime may know about them. - -TEXT ·Syscall(SB),NOSPLIT,$0-56 - JMP syscall·Syscall(SB) - -TEXT ·Syscall6(SB),NOSPLIT,$0-80 - JMP syscall·Syscall6(SB) - -TEXT ·Syscall9(SB),NOSPLIT,$0-104 - JMP syscall·Syscall9(SB) - -TEXT ·RawSyscall(SB),NOSPLIT,$0-56 - JMP syscall·RawSyscall(SB) - -TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 - JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_386.s b/vendor/golang.org/x/sys/unix/asm_linux_386.s deleted file mode 100644 index 8fd101d..0000000 --- a/vendor/golang.org/x/sys/unix/asm_linux_386.s +++ /dev/null @@ -1,66 +0,0 @@ -// 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 gc -// +build gc - -#include "textflag.h" - -// -// System calls for 386, Linux -// - -// See ../runtime/sys_linux_386.s for the reason why we always use int 0x80 -// instead of the glibc-specific "CALL 0x10(GS)". -#define INVOKE_SYSCALL INT $0x80 - -// Just jump to package syscall's implementation for all these functions. -// The runtime may know about them. - -TEXT ·Syscall(SB),NOSPLIT,$0-28 - JMP syscall·Syscall(SB) - -TEXT ·Syscall6(SB),NOSPLIT,$0-40 - JMP syscall·Syscall6(SB) - -TEXT ·SyscallNoError(SB),NOSPLIT,$0-24 - CALL runtime·entersyscall(SB) - MOVL trap+0(FP), AX // syscall entry - MOVL a1+4(FP), BX - MOVL a2+8(FP), CX - MOVL a3+12(FP), DX - MOVL $0, SI - MOVL $0, DI - INVOKE_SYSCALL - MOVL AX, r1+16(FP) - MOVL DX, r2+20(FP) - CALL runtime·exitsyscall(SB) - RET - -TEXT ·RawSyscall(SB),NOSPLIT,$0-28 - JMP syscall·RawSyscall(SB) - -TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 - JMP syscall·RawSyscall6(SB) - -TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24 - MOVL trap+0(FP), AX // syscall entry - MOVL a1+4(FP), BX - MOVL a2+8(FP), CX - MOVL a3+12(FP), DX - MOVL $0, SI - MOVL $0, DI - INVOKE_SYSCALL - MOVL AX, r1+16(FP) - MOVL DX, r2+20(FP) - RET - -TEXT ·socketcall(SB),NOSPLIT,$0-36 - JMP syscall·socketcall(SB) - -TEXT ·rawsocketcall(SB),NOSPLIT,$0-36 - JMP syscall·rawsocketcall(SB) - -TEXT ·seek(SB),NOSPLIT,$0-28 - JMP syscall·seek(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_amd64.s b/vendor/golang.org/x/sys/unix/asm_linux_amd64.s deleted file mode 100644 index 7ed38e4..0000000 --- a/vendor/golang.org/x/sys/unix/asm_linux_amd64.s +++ /dev/null @@ -1,58 +0,0 @@ -// 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 gc -// +build gc - -#include "textflag.h" - -// -// System calls for AMD64, Linux -// - -// Just jump to package syscall's implementation for all these functions. -// The runtime may know about them. - -TEXT ·Syscall(SB),NOSPLIT,$0-56 - JMP syscall·Syscall(SB) - -TEXT ·Syscall6(SB),NOSPLIT,$0-80 - JMP syscall·Syscall6(SB) - -TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 - CALL runtime·entersyscall(SB) - MOVQ a1+8(FP), DI - MOVQ a2+16(FP), SI - MOVQ a3+24(FP), DX - MOVQ $0, R10 - MOVQ $0, R8 - MOVQ $0, R9 - MOVQ trap+0(FP), AX // syscall entry - SYSCALL - MOVQ AX, r1+32(FP) - MOVQ DX, r2+40(FP) - CALL runtime·exitsyscall(SB) - RET - -TEXT ·RawSyscall(SB),NOSPLIT,$0-56 - JMP syscall·RawSyscall(SB) - -TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 - JMP syscall·RawSyscall6(SB) - -TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 - MOVQ a1+8(FP), DI - MOVQ a2+16(FP), SI - MOVQ a3+24(FP), DX - MOVQ $0, R10 - MOVQ $0, R8 - MOVQ $0, R9 - MOVQ trap+0(FP), AX // syscall entry - SYSCALL - MOVQ AX, r1+32(FP) - MOVQ DX, r2+40(FP) - RET - -TEXT ·gettimeofday(SB),NOSPLIT,$0-16 - JMP syscall·gettimeofday(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_arm.s b/vendor/golang.org/x/sys/unix/asm_linux_arm.s deleted file mode 100644 index 8ef1d51..0000000 --- a/vendor/golang.org/x/sys/unix/asm_linux_arm.s +++ /dev/null @@ -1,57 +0,0 @@ -// 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 gc -// +build gc - -#include "textflag.h" - -// -// System calls for arm, Linux -// - -// Just jump to package syscall's implementation for all these functions. -// The runtime may know about them. - -TEXT ·Syscall(SB),NOSPLIT,$0-28 - B syscall·Syscall(SB) - -TEXT ·Syscall6(SB),NOSPLIT,$0-40 - B syscall·Syscall6(SB) - -TEXT ·SyscallNoError(SB),NOSPLIT,$0-24 - BL runtime·entersyscall(SB) - MOVW trap+0(FP), R7 - MOVW a1+4(FP), R0 - MOVW a2+8(FP), R1 - MOVW a3+12(FP), R2 - MOVW $0, R3 - MOVW $0, R4 - MOVW $0, R5 - SWI $0 - MOVW R0, r1+16(FP) - MOVW $0, R0 - MOVW R0, r2+20(FP) - BL runtime·exitsyscall(SB) - RET - -TEXT ·RawSyscall(SB),NOSPLIT,$0-28 - B syscall·RawSyscall(SB) - -TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 - B syscall·RawSyscall6(SB) - -TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24 - MOVW trap+0(FP), R7 // syscall entry - MOVW a1+4(FP), R0 - MOVW a2+8(FP), R1 - MOVW a3+12(FP), R2 - SWI $0 - MOVW R0, r1+16(FP) - MOVW $0, R0 - MOVW R0, r2+20(FP) - RET - -TEXT ·seek(SB),NOSPLIT,$0-28 - B syscall·seek(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_arm64.s b/vendor/golang.org/x/sys/unix/asm_linux_arm64.s deleted file mode 100644 index 98ae027..0000000 --- a/vendor/golang.org/x/sys/unix/asm_linux_arm64.s +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux && arm64 && gc -// +build linux -// +build arm64 -// +build gc - -#include "textflag.h" - -// Just jump to package syscall's implementation for all these functions. -// The runtime may know about them. - -TEXT ·Syscall(SB),NOSPLIT,$0-56 - B syscall·Syscall(SB) - -TEXT ·Syscall6(SB),NOSPLIT,$0-80 - B syscall·Syscall6(SB) - -TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 - BL runtime·entersyscall(SB) - MOVD a1+8(FP), R0 - MOVD a2+16(FP), R1 - MOVD a3+24(FP), R2 - MOVD $0, R3 - MOVD $0, R4 - MOVD $0, R5 - MOVD trap+0(FP), R8 // syscall entry - SVC - MOVD R0, r1+32(FP) // r1 - MOVD R1, r2+40(FP) // r2 - BL runtime·exitsyscall(SB) - RET - -TEXT ·RawSyscall(SB),NOSPLIT,$0-56 - B syscall·RawSyscall(SB) - -TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 - B syscall·RawSyscall6(SB) - -TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 - MOVD a1+8(FP), R0 - MOVD a2+16(FP), R1 - MOVD a3+24(FP), R2 - MOVD $0, R3 - MOVD $0, R4 - MOVD $0, R5 - MOVD trap+0(FP), R8 // syscall entry - SVC - MOVD R0, r1+32(FP) - MOVD R1, r2+40(FP) - RET diff --git a/vendor/golang.org/x/sys/unix/asm_linux_loong64.s b/vendor/golang.org/x/sys/unix/asm_linux_loong64.s deleted file mode 100644 index 5653572..0000000 --- a/vendor/golang.org/x/sys/unix/asm_linux_loong64.s +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2022 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux && loong64 && gc -// +build linux -// +build loong64 -// +build gc - -#include "textflag.h" - - -// Just jump to package syscall's implementation for all these functions. -// The runtime may know about them. - -TEXT ·Syscall(SB),NOSPLIT,$0-56 - JMP syscall·Syscall(SB) - -TEXT ·Syscall6(SB),NOSPLIT,$0-80 - JMP syscall·Syscall6(SB) - -TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 - JAL runtime·entersyscall(SB) - MOVV a1+8(FP), R4 - MOVV a2+16(FP), R5 - MOVV a3+24(FP), R6 - MOVV R0, R7 - MOVV R0, R8 - MOVV R0, R9 - MOVV trap+0(FP), R11 // syscall entry - SYSCALL - MOVV R4, r1+32(FP) - MOVV R0, r2+40(FP) // r2 is not used. Always set to 0 - JAL runtime·exitsyscall(SB) - RET - -TEXT ·RawSyscall(SB),NOSPLIT,$0-56 - JMP syscall·RawSyscall(SB) - -TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 - JMP syscall·RawSyscall6(SB) - -TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 - MOVV a1+8(FP), R4 - MOVV a2+16(FP), R5 - MOVV a3+24(FP), R6 - MOVV R0, R7 - MOVV R0, R8 - MOVV R0, R9 - MOVV trap+0(FP), R11 // syscall entry - SYSCALL - MOVV R4, r1+32(FP) - MOVV R0, r2+40(FP) // r2 is not used. Always set to 0 - RET diff --git a/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s b/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s deleted file mode 100644 index 21231d2..0000000 --- a/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux && (mips64 || mips64le) && gc -// +build linux -// +build mips64 mips64le -// +build gc - -#include "textflag.h" - -// -// System calls for mips64, Linux -// - -// Just jump to package syscall's implementation for all these functions. -// The runtime may know about them. - -TEXT ·Syscall(SB),NOSPLIT,$0-56 - JMP syscall·Syscall(SB) - -TEXT ·Syscall6(SB),NOSPLIT,$0-80 - JMP syscall·Syscall6(SB) - -TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 - JAL runtime·entersyscall(SB) - MOVV a1+8(FP), R4 - MOVV a2+16(FP), R5 - MOVV a3+24(FP), R6 - MOVV R0, R7 - MOVV R0, R8 - MOVV R0, R9 - MOVV trap+0(FP), R2 // syscall entry - SYSCALL - MOVV R2, r1+32(FP) - MOVV R3, r2+40(FP) - JAL runtime·exitsyscall(SB) - RET - -TEXT ·RawSyscall(SB),NOSPLIT,$0-56 - JMP syscall·RawSyscall(SB) - -TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 - JMP syscall·RawSyscall6(SB) - -TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 - MOVV a1+8(FP), R4 - MOVV a2+16(FP), R5 - MOVV a3+24(FP), R6 - MOVV R0, R7 - MOVV R0, R8 - MOVV R0, R9 - MOVV trap+0(FP), R2 // syscall entry - SYSCALL - MOVV R2, r1+32(FP) - MOVV R3, r2+40(FP) - RET diff --git a/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s b/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s deleted file mode 100644 index 6783b26..0000000 --- a/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux && (mips || mipsle) && gc -// +build linux -// +build mips mipsle -// +build gc - -#include "textflag.h" - -// -// System calls for mips, Linux -// - -// Just jump to package syscall's implementation for all these functions. -// The runtime may know about them. - -TEXT ·Syscall(SB),NOSPLIT,$0-28 - JMP syscall·Syscall(SB) - -TEXT ·Syscall6(SB),NOSPLIT,$0-40 - JMP syscall·Syscall6(SB) - -TEXT ·Syscall9(SB),NOSPLIT,$0-52 - JMP syscall·Syscall9(SB) - -TEXT ·SyscallNoError(SB),NOSPLIT,$0-24 - JAL runtime·entersyscall(SB) - MOVW a1+4(FP), R4 - MOVW a2+8(FP), R5 - MOVW a3+12(FP), R6 - MOVW R0, R7 - MOVW trap+0(FP), R2 // syscall entry - SYSCALL - MOVW R2, r1+16(FP) // r1 - MOVW R3, r2+20(FP) // r2 - JAL runtime·exitsyscall(SB) - RET - -TEXT ·RawSyscall(SB),NOSPLIT,$0-28 - JMP syscall·RawSyscall(SB) - -TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 - JMP syscall·RawSyscall6(SB) - -TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24 - MOVW a1+4(FP), R4 - MOVW a2+8(FP), R5 - MOVW a3+12(FP), R6 - MOVW trap+0(FP), R2 // syscall entry - SYSCALL - MOVW R2, r1+16(FP) - MOVW R3, r2+20(FP) - RET diff --git a/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s b/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s deleted file mode 100644 index 19d4989..0000000 --- a/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux && (ppc64 || ppc64le) && gc -// +build linux -// +build ppc64 ppc64le -// +build gc - -#include "textflag.h" - -// -// System calls for ppc64, Linux -// - -// Just jump to package syscall's implementation for all these functions. -// The runtime may know about them. - -TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 - BL runtime·entersyscall(SB) - MOVD a1+8(FP), R3 - MOVD a2+16(FP), R4 - MOVD a3+24(FP), R5 - MOVD R0, R6 - MOVD R0, R7 - MOVD R0, R8 - MOVD trap+0(FP), R9 // syscall entry - SYSCALL R9 - MOVD R3, r1+32(FP) - MOVD R4, r2+40(FP) - BL runtime·exitsyscall(SB) - RET - -TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 - MOVD a1+8(FP), R3 - MOVD a2+16(FP), R4 - MOVD a3+24(FP), R5 - MOVD R0, R6 - MOVD R0, R7 - MOVD R0, R8 - MOVD trap+0(FP), R9 // syscall entry - SYSCALL R9 - MOVD R3, r1+32(FP) - MOVD R4, r2+40(FP) - RET diff --git a/vendor/golang.org/x/sys/unix/asm_linux_riscv64.s b/vendor/golang.org/x/sys/unix/asm_linux_riscv64.s deleted file mode 100644 index e42eb81..0000000 --- a/vendor/golang.org/x/sys/unix/asm_linux_riscv64.s +++ /dev/null @@ -1,49 +0,0 @@ -// 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 && gc -// +build riscv64 -// +build gc - -#include "textflag.h" - -// -// System calls for linux/riscv64. -// -// Where available, just jump to package syscall's implementation of -// these functions. - -TEXT ·Syscall(SB),NOSPLIT,$0-56 - JMP syscall·Syscall(SB) - -TEXT ·Syscall6(SB),NOSPLIT,$0-80 - JMP syscall·Syscall6(SB) - -TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 - CALL runtime·entersyscall(SB) - MOV a1+8(FP), A0 - MOV a2+16(FP), A1 - MOV a3+24(FP), A2 - MOV trap+0(FP), A7 // syscall entry - ECALL - MOV A0, r1+32(FP) // r1 - MOV A1, r2+40(FP) // r2 - CALL runtime·exitsyscall(SB) - RET - -TEXT ·RawSyscall(SB),NOSPLIT,$0-56 - JMP syscall·RawSyscall(SB) - -TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 - JMP syscall·RawSyscall6(SB) - -TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 - MOV a1+8(FP), A0 - MOV a2+16(FP), A1 - MOV a3+24(FP), A2 - MOV trap+0(FP), A7 // syscall entry - ECALL - MOV A0, r1+32(FP) - MOV A1, r2+40(FP) - RET diff --git a/vendor/golang.org/x/sys/unix/asm_linux_s390x.s b/vendor/golang.org/x/sys/unix/asm_linux_s390x.s deleted file mode 100644 index c46aab3..0000000 --- a/vendor/golang.org/x/sys/unix/asm_linux_s390x.s +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux && s390x && gc -// +build linux -// +build s390x -// +build gc - -#include "textflag.h" - -// -// System calls for s390x, Linux -// - -// Just jump to package syscall's implementation for all these functions. -// The runtime may know about them. - -TEXT ·Syscall(SB),NOSPLIT,$0-56 - BR syscall·Syscall(SB) - -TEXT ·Syscall6(SB),NOSPLIT,$0-80 - BR syscall·Syscall6(SB) - -TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 - BL runtime·entersyscall(SB) - MOVD a1+8(FP), R2 - MOVD a2+16(FP), R3 - MOVD a3+24(FP), R4 - MOVD $0, R5 - MOVD $0, R6 - MOVD $0, R7 - MOVD trap+0(FP), R1 // syscall entry - SYSCALL - MOVD R2, r1+32(FP) - MOVD R3, r2+40(FP) - BL runtime·exitsyscall(SB) - RET - -TEXT ·RawSyscall(SB),NOSPLIT,$0-56 - BR syscall·RawSyscall(SB) - -TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 - BR syscall·RawSyscall6(SB) - -TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 - MOVD a1+8(FP), R2 - MOVD a2+16(FP), R3 - MOVD a3+24(FP), R4 - MOVD $0, R5 - MOVD $0, R6 - MOVD $0, R7 - MOVD trap+0(FP), R1 // syscall entry - SYSCALL - MOVD R2, r1+32(FP) - MOVD R3, r2+40(FP) - RET diff --git a/vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s b/vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s deleted file mode 100644 index 5e7a116..0000000 --- a/vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s +++ /dev/null @@ -1,30 +0,0 @@ -// 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 -// +build gc - -#include "textflag.h" - -// -// System call support for mips64, OpenBSD -// - -// Just jump to package syscall's implementation for all these functions. -// The runtime may know about them. - -TEXT ·Syscall(SB),NOSPLIT,$0-56 - JMP syscall·Syscall(SB) - -TEXT ·Syscall6(SB),NOSPLIT,$0-80 - JMP syscall·Syscall6(SB) - -TEXT ·Syscall9(SB),NOSPLIT,$0-104 - JMP syscall·Syscall9(SB) - -TEXT ·RawSyscall(SB),NOSPLIT,$0-56 - JMP syscall·RawSyscall(SB) - -TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 - JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s b/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s deleted file mode 100644 index f8c5394..0000000 --- a/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build gc -// +build gc - -#include "textflag.h" - -// -// System calls for amd64, Solaris are implemented in runtime/syscall_solaris.go -// - -TEXT ·sysvicall6(SB),NOSPLIT,$0-88 - JMP syscall·sysvicall6(SB) - -TEXT ·rawSysvicall6(SB),NOSPLIT,$0-88 - JMP syscall·rawSysvicall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_zos_s390x.s b/vendor/golang.org/x/sys/unix/asm_zos_s390x.s deleted file mode 100644 index 3b54e18..0000000 --- a/vendor/golang.org/x/sys/unix/asm_zos_s390x.s +++ /dev/null @@ -1,426 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build zos && s390x && gc -// +build zos -// +build s390x -// +build gc - -#include "textflag.h" - -#define PSALAA 1208(R0) -#define GTAB64(x) 80(x) -#define LCA64(x) 88(x) -#define CAA(x) 8(x) -#define EDCHPXV(x) 1016(x) // in the CAA -#define SAVSTACK_ASYNC(x) 336(x) // in the LCA - -// SS_*, where x=SAVSTACK_ASYNC -#define SS_LE(x) 0(x) -#define SS_GO(x) 8(x) -#define SS_ERRNO(x) 16(x) -#define SS_ERRNOJR(x) 20(x) - -#define LE_CALL BYTE $0x0D; BYTE $0x76; // BL R7, R6 - -TEXT ·clearErrno(SB),NOSPLIT,$0-0 - BL addrerrno<>(SB) - MOVD $0, 0(R3) - RET - -// Returns the address of errno in R3. -TEXT addrerrno<>(SB),NOSPLIT|NOFRAME,$0-0 - // Get library control area (LCA). - MOVW PSALAA, R8 - MOVD LCA64(R8), R8 - - // Get __errno FuncDesc. - MOVD CAA(R8), R9 - MOVD EDCHPXV(R9), R9 - ADD $(0x156*16), R9 - LMG 0(R9), R5, R6 - - // Switch to saved LE stack. - MOVD SAVSTACK_ASYNC(R8), R9 - MOVD 0(R9), R4 - MOVD $0, 0(R9) - - // Call __errno function. - LE_CALL - NOPH - - // Switch back to Go stack. - XOR R0, R0 // Restore R0 to $0. - MOVD R4, 0(R9) // Save stack pointer. - RET - -TEXT ·syscall_syscall(SB),NOSPLIT,$0-56 - BL runtime·entersyscall(SB) - MOVD a1+8(FP), R1 - MOVD a2+16(FP), R2 - MOVD a3+24(FP), R3 - - // Get library control area (LCA). - MOVW PSALAA, R8 - MOVD LCA64(R8), R8 - - // Get function. - MOVD CAA(R8), R9 - MOVD EDCHPXV(R9), R9 - MOVD trap+0(FP), R5 - SLD $4, R5 - ADD R5, R9 - LMG 0(R9), R5, R6 - - // Restore LE stack. - MOVD SAVSTACK_ASYNC(R8), R9 - MOVD 0(R9), R4 - MOVD $0, 0(R9) - - // Call function. - LE_CALL - NOPH - XOR R0, R0 // Restore R0 to $0. - MOVD R4, 0(R9) // Save stack pointer. - - MOVD R3, r1+32(FP) - MOVD R0, r2+40(FP) - MOVD R0, err+48(FP) - MOVW R3, R4 - CMP R4, $-1 - BNE done - BL addrerrno<>(SB) - MOVWZ 0(R3), R3 - MOVD R3, err+48(FP) -done: - BL runtime·exitsyscall(SB) - RET - -TEXT ·syscall_rawsyscall(SB),NOSPLIT,$0-56 - MOVD a1+8(FP), R1 - MOVD a2+16(FP), R2 - MOVD a3+24(FP), R3 - - // Get library control area (LCA). - MOVW PSALAA, R8 - MOVD LCA64(R8), R8 - - // Get function. - MOVD CAA(R8), R9 - MOVD EDCHPXV(R9), R9 - MOVD trap+0(FP), R5 - SLD $4, R5 - ADD R5, R9 - LMG 0(R9), R5, R6 - - // Restore LE stack. - MOVD SAVSTACK_ASYNC(R8), R9 - MOVD 0(R9), R4 - MOVD $0, 0(R9) - - // Call function. - LE_CALL - NOPH - XOR R0, R0 // Restore R0 to $0. - MOVD R4, 0(R9) // Save stack pointer. - - MOVD R3, r1+32(FP) - MOVD R0, r2+40(FP) - MOVD R0, err+48(FP) - MOVW R3, R4 - CMP R4, $-1 - BNE done - BL addrerrno<>(SB) - MOVWZ 0(R3), R3 - MOVD R3, err+48(FP) -done: - RET - -TEXT ·syscall_syscall6(SB),NOSPLIT,$0-80 - BL runtime·entersyscall(SB) - MOVD a1+8(FP), R1 - MOVD a2+16(FP), R2 - MOVD a3+24(FP), R3 - - // Get library control area (LCA). - MOVW PSALAA, R8 - MOVD LCA64(R8), R8 - - // Get function. - MOVD CAA(R8), R9 - MOVD EDCHPXV(R9), R9 - MOVD trap+0(FP), R5 - SLD $4, R5 - ADD R5, R9 - LMG 0(R9), R5, R6 - - // Restore LE stack. - MOVD SAVSTACK_ASYNC(R8), R9 - MOVD 0(R9), R4 - MOVD $0, 0(R9) - - // Fill in parameter list. - MOVD a4+32(FP), R12 - MOVD R12, (2176+24)(R4) - MOVD a5+40(FP), R12 - MOVD R12, (2176+32)(R4) - MOVD a6+48(FP), R12 - MOVD R12, (2176+40)(R4) - - // Call function. - LE_CALL - NOPH - XOR R0, R0 // Restore R0 to $0. - MOVD R4, 0(R9) // Save stack pointer. - - MOVD R3, r1+56(FP) - MOVD R0, r2+64(FP) - MOVD R0, err+72(FP) - MOVW R3, R4 - CMP R4, $-1 - BNE done - BL addrerrno<>(SB) - MOVWZ 0(R3), R3 - MOVD R3, err+72(FP) -done: - BL runtime·exitsyscall(SB) - RET - -TEXT ·syscall_rawsyscall6(SB),NOSPLIT,$0-80 - MOVD a1+8(FP), R1 - MOVD a2+16(FP), R2 - MOVD a3+24(FP), R3 - - // Get library control area (LCA). - MOVW PSALAA, R8 - MOVD LCA64(R8), R8 - - // Get function. - MOVD CAA(R8), R9 - MOVD EDCHPXV(R9), R9 - MOVD trap+0(FP), R5 - SLD $4, R5 - ADD R5, R9 - LMG 0(R9), R5, R6 - - // Restore LE stack. - MOVD SAVSTACK_ASYNC(R8), R9 - MOVD 0(R9), R4 - MOVD $0, 0(R9) - - // Fill in parameter list. - MOVD a4+32(FP), R12 - MOVD R12, (2176+24)(R4) - MOVD a5+40(FP), R12 - MOVD R12, (2176+32)(R4) - MOVD a6+48(FP), R12 - MOVD R12, (2176+40)(R4) - - // Call function. - LE_CALL - NOPH - XOR R0, R0 // Restore R0 to $0. - MOVD R4, 0(R9) // Save stack pointer. - - MOVD R3, r1+56(FP) - MOVD R0, r2+64(FP) - MOVD R0, err+72(FP) - MOVW R3, R4 - CMP R4, $-1 - BNE done - BL ·rrno<>(SB) - MOVWZ 0(R3), R3 - MOVD R3, err+72(FP) -done: - RET - -TEXT ·syscall_syscall9(SB),NOSPLIT,$0 - BL runtime·entersyscall(SB) - MOVD a1+8(FP), R1 - MOVD a2+16(FP), R2 - MOVD a3+24(FP), R3 - - // Get library control area (LCA). - MOVW PSALAA, R8 - MOVD LCA64(R8), R8 - - // Get function. - MOVD CAA(R8), R9 - MOVD EDCHPXV(R9), R9 - MOVD trap+0(FP), R5 - SLD $4, R5 - ADD R5, R9 - LMG 0(R9), R5, R6 - - // Restore LE stack. - MOVD SAVSTACK_ASYNC(R8), R9 - MOVD 0(R9), R4 - MOVD $0, 0(R9) - - // Fill in parameter list. - MOVD a4+32(FP), R12 - MOVD R12, (2176+24)(R4) - MOVD a5+40(FP), R12 - MOVD R12, (2176+32)(R4) - MOVD a6+48(FP), R12 - MOVD R12, (2176+40)(R4) - MOVD a7+56(FP), R12 - MOVD R12, (2176+48)(R4) - MOVD a8+64(FP), R12 - MOVD R12, (2176+56)(R4) - MOVD a9+72(FP), R12 - MOVD R12, (2176+64)(R4) - - // Call function. - LE_CALL - NOPH - XOR R0, R0 // Restore R0 to $0. - MOVD R4, 0(R9) // Save stack pointer. - - MOVD R3, r1+80(FP) - MOVD R0, r2+88(FP) - MOVD R0, err+96(FP) - MOVW R3, R4 - CMP R4, $-1 - BNE done - BL addrerrno<>(SB) - MOVWZ 0(R3), R3 - MOVD R3, err+96(FP) -done: - BL runtime·exitsyscall(SB) - RET - -TEXT ·syscall_rawsyscall9(SB),NOSPLIT,$0 - MOVD a1+8(FP), R1 - MOVD a2+16(FP), R2 - MOVD a3+24(FP), R3 - - // Get library control area (LCA). - MOVW PSALAA, R8 - MOVD LCA64(R8), R8 - - // Get function. - MOVD CAA(R8), R9 - MOVD EDCHPXV(R9), R9 - MOVD trap+0(FP), R5 - SLD $4, R5 - ADD R5, R9 - LMG 0(R9), R5, R6 - - // Restore LE stack. - MOVD SAVSTACK_ASYNC(R8), R9 - MOVD 0(R9), R4 - MOVD $0, 0(R9) - - // Fill in parameter list. - MOVD a4+32(FP), R12 - MOVD R12, (2176+24)(R4) - MOVD a5+40(FP), R12 - MOVD R12, (2176+32)(R4) - MOVD a6+48(FP), R12 - MOVD R12, (2176+40)(R4) - MOVD a7+56(FP), R12 - MOVD R12, (2176+48)(R4) - MOVD a8+64(FP), R12 - MOVD R12, (2176+56)(R4) - MOVD a9+72(FP), R12 - MOVD R12, (2176+64)(R4) - - // Call function. - LE_CALL - NOPH - XOR R0, R0 // Restore R0 to $0. - MOVD R4, 0(R9) // Save stack pointer. - - MOVD R3, r1+80(FP) - MOVD R0, r2+88(FP) - MOVD R0, err+96(FP) - MOVW R3, R4 - CMP R4, $-1 - BNE done - BL addrerrno<>(SB) - MOVWZ 0(R3), R3 - MOVD R3, err+96(FP) -done: - RET - -// func svcCall(fnptr unsafe.Pointer, argv *unsafe.Pointer, dsa *uint64) -TEXT ·svcCall(SB),NOSPLIT,$0 - BL runtime·save_g(SB) // Save g and stack pointer - MOVW PSALAA, R8 - MOVD LCA64(R8), R8 - MOVD SAVSTACK_ASYNC(R8), R9 - MOVD R15, 0(R9) - - MOVD argv+8(FP), R1 // Move function arguments into registers - MOVD dsa+16(FP), g - MOVD fnptr+0(FP), R15 - - BYTE $0x0D // Branch to function - BYTE $0xEF - - BL runtime·load_g(SB) // Restore g and stack pointer - MOVW PSALAA, R8 - MOVD LCA64(R8), R8 - MOVD SAVSTACK_ASYNC(R8), R9 - MOVD 0(R9), R15 - - RET - -// func svcLoad(name *byte) unsafe.Pointer -TEXT ·svcLoad(SB),NOSPLIT,$0 - MOVD R15, R2 // Save go stack pointer - MOVD name+0(FP), R0 // Move SVC args into registers - MOVD $0x80000000, R1 - MOVD $0, R15 - BYTE $0x0A // SVC 08 LOAD - BYTE $0x08 - MOVW R15, R3 // Save return code from SVC - MOVD R2, R15 // Restore go stack pointer - CMP R3, $0 // Check SVC return code - BNE error - - MOVD $-2, R3 // Reset last bit of entry point to zero - AND R0, R3 - MOVD R3, addr+8(FP) // Return entry point returned by SVC - CMP R0, R3 // Check if last bit of entry point was set - BNE done - - MOVD R15, R2 // Save go stack pointer - MOVD $0, R15 // Move SVC args into registers (entry point still in r0 from SVC 08) - BYTE $0x0A // SVC 09 DELETE - BYTE $0x09 - MOVD R2, R15 // Restore go stack pointer - -error: - MOVD $0, addr+8(FP) // Return 0 on failure -done: - XOR R0, R0 // Reset r0 to 0 - RET - -// func svcUnload(name *byte, fnptr unsafe.Pointer) int64 -TEXT ·svcUnload(SB),NOSPLIT,$0 - MOVD R15, R2 // Save go stack pointer - MOVD name+0(FP), R0 // Move SVC args into registers - MOVD addr+8(FP), R15 - BYTE $0x0A // SVC 09 - BYTE $0x09 - XOR R0, R0 // Reset r0 to 0 - MOVD R15, R1 // Save SVC return code - MOVD R2, R15 // Restore go stack pointer - MOVD R1, rc+0(FP) // Return SVC return code - RET - -// func gettid() uint64 -TEXT ·gettid(SB), NOSPLIT, $0 - // Get library control area (LCA). - MOVW PSALAA, R8 - MOVD LCA64(R8), R8 - - // Get CEECAATHDID - MOVD CAA(R8), R9 - MOVD 0x3D0(R9), R9 - MOVD R9, ret+0(FP) - - RET diff --git a/vendor/golang.org/x/sys/unix/bluetooth_linux.go b/vendor/golang.org/x/sys/unix/bluetooth_linux.go deleted file mode 100644 index a178a61..0000000 --- a/vendor/golang.org/x/sys/unix/bluetooth_linux.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Bluetooth sockets and messages - -package unix - -// Bluetooth Protocols -const ( - BTPROTO_L2CAP = 0 - BTPROTO_HCI = 1 - BTPROTO_SCO = 2 - BTPROTO_RFCOMM = 3 - BTPROTO_BNEP = 4 - BTPROTO_CMTP = 5 - BTPROTO_HIDP = 6 - BTPROTO_AVDTP = 7 -) - -const ( - HCI_CHANNEL_RAW = 0 - HCI_CHANNEL_USER = 1 - HCI_CHANNEL_MONITOR = 2 - HCI_CHANNEL_CONTROL = 3 - HCI_CHANNEL_LOGGING = 4 -) - -// Socketoption Level -const ( - SOL_BLUETOOTH = 0x112 - SOL_HCI = 0x0 - SOL_L2CAP = 0x6 - SOL_RFCOMM = 0x12 - SOL_SCO = 0x11 -) diff --git a/vendor/golang.org/x/sys/unix/cap_freebsd.go b/vendor/golang.org/x/sys/unix/cap_freebsd.go deleted file mode 100644 index 0b7c6ad..0000000 --- a/vendor/golang.org/x/sys/unix/cap_freebsd.go +++ /dev/null @@ -1,196 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build freebsd -// +build freebsd - -package unix - -import ( - "errors" - "fmt" -) - -// Go implementation of C mostly found in /usr/src/sys/kern/subr_capability.c - -const ( - // This is the version of CapRights this package understands. See C implementation for parallels. - capRightsGoVersion = CAP_RIGHTS_VERSION_00 - capArSizeMin = CAP_RIGHTS_VERSION_00 + 2 - capArSizeMax = capRightsGoVersion + 2 -) - -var ( - bit2idx = []int{ - -1, 0, 1, -1, 2, -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, - 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - } -) - -func capidxbit(right uint64) int { - return int((right >> 57) & 0x1f) -} - -func rightToIndex(right uint64) (int, error) { - idx := capidxbit(right) - if idx < 0 || idx >= len(bit2idx) { - return -2, fmt.Errorf("index for right 0x%x out of range", right) - } - return bit2idx[idx], nil -} - -func caprver(right uint64) int { - return int(right >> 62) -} - -func capver(rights *CapRights) int { - return caprver(rights.Rights[0]) -} - -func caparsize(rights *CapRights) int { - return capver(rights) + 2 -} - -// CapRightsSet sets the permissions in setrights in rights. -func CapRightsSet(rights *CapRights, setrights []uint64) error { - // This is essentially a copy of cap_rights_vset() - if capver(rights) != CAP_RIGHTS_VERSION_00 { - return fmt.Errorf("bad rights version %d", capver(rights)) - } - - n := caparsize(rights) - if n < capArSizeMin || n > capArSizeMax { - return errors.New("bad rights size") - } - - for _, right := range setrights { - if caprver(right) != CAP_RIGHTS_VERSION_00 { - return errors.New("bad right version") - } - i, err := rightToIndex(right) - if err != nil { - return err - } - if i >= n { - return errors.New("index overflow") - } - if capidxbit(rights.Rights[i]) != capidxbit(right) { - return errors.New("index mismatch") - } - rights.Rights[i] |= right - if capidxbit(rights.Rights[i]) != capidxbit(right) { - return errors.New("index mismatch (after assign)") - } - } - - return nil -} - -// CapRightsClear clears the permissions in clearrights from rights. -func CapRightsClear(rights *CapRights, clearrights []uint64) error { - // This is essentially a copy of cap_rights_vclear() - if capver(rights) != CAP_RIGHTS_VERSION_00 { - return fmt.Errorf("bad rights version %d", capver(rights)) - } - - n := caparsize(rights) - if n < capArSizeMin || n > capArSizeMax { - return errors.New("bad rights size") - } - - for _, right := range clearrights { - if caprver(right) != CAP_RIGHTS_VERSION_00 { - return errors.New("bad right version") - } - i, err := rightToIndex(right) - if err != nil { - return err - } - if i >= n { - return errors.New("index overflow") - } - if capidxbit(rights.Rights[i]) != capidxbit(right) { - return errors.New("index mismatch") - } - rights.Rights[i] &= ^(right & 0x01FFFFFFFFFFFFFF) - if capidxbit(rights.Rights[i]) != capidxbit(right) { - return errors.New("index mismatch (after assign)") - } - } - - return nil -} - -// CapRightsIsSet checks whether all the permissions in setrights are present in rights. -func CapRightsIsSet(rights *CapRights, setrights []uint64) (bool, error) { - // This is essentially a copy of cap_rights_is_vset() - if capver(rights) != CAP_RIGHTS_VERSION_00 { - return false, fmt.Errorf("bad rights version %d", capver(rights)) - } - - n := caparsize(rights) - if n < capArSizeMin || n > capArSizeMax { - return false, errors.New("bad rights size") - } - - for _, right := range setrights { - if caprver(right) != CAP_RIGHTS_VERSION_00 { - return false, errors.New("bad right version") - } - i, err := rightToIndex(right) - if err != nil { - return false, err - } - if i >= n { - return false, errors.New("index overflow") - } - if capidxbit(rights.Rights[i]) != capidxbit(right) { - return false, errors.New("index mismatch") - } - if (rights.Rights[i] & right) != right { - return false, nil - } - } - - return true, nil -} - -func capright(idx uint64, bit uint64) uint64 { - return ((1 << (57 + idx)) | bit) -} - -// CapRightsInit returns a pointer to an initialised CapRights structure filled with rights. -// See man cap_rights_init(3) and rights(4). -func CapRightsInit(rights []uint64) (*CapRights, error) { - var r CapRights - r.Rights[0] = (capRightsGoVersion << 62) | capright(0, 0) - r.Rights[1] = capright(1, 0) - - err := CapRightsSet(&r, rights) - if err != nil { - return nil, err - } - return &r, nil -} - -// CapRightsLimit reduces the operations permitted on fd to at most those contained in rights. -// The capability rights on fd can never be increased by CapRightsLimit. -// See man cap_rights_limit(2) and rights(4). -func CapRightsLimit(fd uintptr, rights *CapRights) error { - return capRightsLimit(int(fd), rights) -} - -// CapRightsGet returns a CapRights structure containing the operations permitted on fd. -// See man cap_rights_get(3) and rights(4). -func CapRightsGet(fd uintptr) (*CapRights, error) { - r, err := CapRightsInit(nil) - if err != nil { - return nil, err - } - err = capRightsGet(capRightsGoVersion, int(fd), r) - if err != nil { - return nil, err - } - return r, nil -} diff --git a/vendor/golang.org/x/sys/unix/constants.go b/vendor/golang.org/x/sys/unix/constants.go deleted file mode 100644 index 394a396..0000000 --- a/vendor/golang.org/x/sys/unix/constants.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos -// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos - -package unix - -const ( - R_OK = 0x4 - W_OK = 0x2 - X_OK = 0x1 -) diff --git a/vendor/golang.org/x/sys/unix/dev_aix_ppc.go b/vendor/golang.org/x/sys/unix/dev_aix_ppc.go deleted file mode 100644 index 65a9985..0000000 --- a/vendor/golang.org/x/sys/unix/dev_aix_ppc.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix && ppc -// +build aix,ppc - -// Functions to access/create device major and minor numbers matching the -// encoding used by AIX. - -package unix - -// Major returns the major component of a Linux device number. -func Major(dev uint64) uint32 { - return uint32((dev >> 16) & 0xffff) -} - -// Minor returns the minor component of a Linux device number. -func Minor(dev uint64) uint32 { - return uint32(dev & 0xffff) -} - -// Mkdev returns a Linux device number generated from the given major and minor -// components. -func Mkdev(major, minor uint32) uint64 { - return uint64(((major) << 16) | (minor)) -} diff --git a/vendor/golang.org/x/sys/unix/dev_aix_ppc64.go b/vendor/golang.org/x/sys/unix/dev_aix_ppc64.go deleted file mode 100644 index 8fc08ad..0000000 --- a/vendor/golang.org/x/sys/unix/dev_aix_ppc64.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix && ppc64 -// +build aix,ppc64 - -// Functions to access/create device major and minor numbers matching the -// encoding used AIX. - -package unix - -// Major returns the major component of a Linux device number. -func Major(dev uint64) uint32 { - return uint32((dev & 0x3fffffff00000000) >> 32) -} - -// Minor returns the minor component of a Linux device number. -func Minor(dev uint64) uint32 { - return uint32((dev & 0x00000000ffffffff) >> 0) -} - -// Mkdev returns a Linux device number generated from the given major and minor -// components. -func Mkdev(major, minor uint32) uint64 { - var DEVNO64 uint64 - DEVNO64 = 0x8000000000000000 - return ((uint64(major) << 32) | (uint64(minor) & 0x00000000FFFFFFFF) | DEVNO64) -} diff --git a/vendor/golang.org/x/sys/unix/dev_darwin.go b/vendor/golang.org/x/sys/unix/dev_darwin.go deleted file mode 100644 index 8d1dc0f..0000000 --- a/vendor/golang.org/x/sys/unix/dev_darwin.go +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Functions to access/create device major and minor numbers matching the -// encoding used in Darwin's sys/types.h header. - -package unix - -// Major returns the major component of a Darwin device number. -func Major(dev uint64) uint32 { - return uint32((dev >> 24) & 0xff) -} - -// Minor returns the minor component of a Darwin device number. -func Minor(dev uint64) uint32 { - return uint32(dev & 0xffffff) -} - -// Mkdev returns a Darwin device number generated from the given major and minor -// components. -func Mkdev(major, minor uint32) uint64 { - return (uint64(major) << 24) | uint64(minor) -} diff --git a/vendor/golang.org/x/sys/unix/dev_dragonfly.go b/vendor/golang.org/x/sys/unix/dev_dragonfly.go deleted file mode 100644 index 8502f20..0000000 --- a/vendor/golang.org/x/sys/unix/dev_dragonfly.go +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Functions to access/create device major and minor numbers matching the -// encoding used in Dragonfly's sys/types.h header. -// -// The information below is extracted and adapted from sys/types.h: -// -// Minor gives a cookie instead of an index since in order to avoid changing the -// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for -// devices that don't use them. - -package unix - -// Major returns the major component of a DragonFlyBSD device number. -func Major(dev uint64) uint32 { - return uint32((dev >> 8) & 0xff) -} - -// Minor returns the minor component of a DragonFlyBSD device number. -func Minor(dev uint64) uint32 { - return uint32(dev & 0xffff00ff) -} - -// Mkdev returns a DragonFlyBSD device number generated from the given major and -// minor components. -func Mkdev(major, minor uint32) uint64 { - return (uint64(major) << 8) | uint64(minor) -} diff --git a/vendor/golang.org/x/sys/unix/dev_freebsd.go b/vendor/golang.org/x/sys/unix/dev_freebsd.go deleted file mode 100644 index eba3b4b..0000000 --- a/vendor/golang.org/x/sys/unix/dev_freebsd.go +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Functions to access/create device major and minor numbers matching the -// encoding used in FreeBSD's sys/types.h header. -// -// The information below is extracted and adapted from sys/types.h: -// -// Minor gives a cookie instead of an index since in order to avoid changing the -// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for -// devices that don't use them. - -package unix - -// Major returns the major component of a FreeBSD device number. -func Major(dev uint64) uint32 { - return uint32((dev >> 8) & 0xff) -} - -// Minor returns the minor component of a FreeBSD device number. -func Minor(dev uint64) uint32 { - return uint32(dev & 0xffff00ff) -} - -// Mkdev returns a FreeBSD device number generated from the given major and -// minor components. -func Mkdev(major, minor uint32) uint64 { - return (uint64(major) << 8) | uint64(minor) -} diff --git a/vendor/golang.org/x/sys/unix/dev_linux.go b/vendor/golang.org/x/sys/unix/dev_linux.go deleted file mode 100644 index d165d6f..0000000 --- a/vendor/golang.org/x/sys/unix/dev_linux.go +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Functions to access/create device major and minor numbers matching the -// encoding used by the Linux kernel and glibc. -// -// The information below is extracted and adapted from bits/sysmacros.h in the -// glibc sources: -// -// dev_t in glibc is 64-bit, with 32-bit major and minor numbers. glibc's -// default encoding is MMMM Mmmm mmmM MMmm, where M is a hex digit of the major -// number and m is a hex digit of the minor number. This is backward compatible -// with legacy systems where dev_t is 16 bits wide, encoded as MMmm. It is also -// backward compatible with the Linux kernel, which for some architectures uses -// 32-bit dev_t, encoded as mmmM MMmm. - -package unix - -// Major returns the major component of a Linux device number. -func Major(dev uint64) uint32 { - major := uint32((dev & 0x00000000000fff00) >> 8) - major |= uint32((dev & 0xfffff00000000000) >> 32) - return major -} - -// Minor returns the minor component of a Linux device number. -func Minor(dev uint64) uint32 { - minor := uint32((dev & 0x00000000000000ff) >> 0) - minor |= uint32((dev & 0x00000ffffff00000) >> 12) - return minor -} - -// Mkdev returns a Linux device number generated from the given major and minor -// components. -func Mkdev(major, minor uint32) uint64 { - dev := (uint64(major) & 0x00000fff) << 8 - dev |= (uint64(major) & 0xfffff000) << 32 - dev |= (uint64(minor) & 0x000000ff) << 0 - dev |= (uint64(minor) & 0xffffff00) << 12 - return dev -} diff --git a/vendor/golang.org/x/sys/unix/dev_netbsd.go b/vendor/golang.org/x/sys/unix/dev_netbsd.go deleted file mode 100644 index b4a203d..0000000 --- a/vendor/golang.org/x/sys/unix/dev_netbsd.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Functions to access/create device major and minor numbers matching the -// encoding used in NetBSD's sys/types.h header. - -package unix - -// Major returns the major component of a NetBSD device number. -func Major(dev uint64) uint32 { - return uint32((dev & 0x000fff00) >> 8) -} - -// Minor returns the minor component of a NetBSD device number. -func Minor(dev uint64) uint32 { - minor := uint32((dev & 0x000000ff) >> 0) - minor |= uint32((dev & 0xfff00000) >> 12) - return minor -} - -// Mkdev returns a NetBSD device number generated from the given major and minor -// components. -func Mkdev(major, minor uint32) uint64 { - dev := (uint64(major) << 8) & 0x000fff00 - dev |= (uint64(minor) << 12) & 0xfff00000 - dev |= (uint64(minor) << 0) & 0x000000ff - return dev -} diff --git a/vendor/golang.org/x/sys/unix/dev_openbsd.go b/vendor/golang.org/x/sys/unix/dev_openbsd.go deleted file mode 100644 index f3430c4..0000000 --- a/vendor/golang.org/x/sys/unix/dev_openbsd.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Functions to access/create device major and minor numbers matching the -// encoding used in OpenBSD's sys/types.h header. - -package unix - -// Major returns the major component of an OpenBSD device number. -func Major(dev uint64) uint32 { - return uint32((dev & 0x0000ff00) >> 8) -} - -// Minor returns the minor component of an OpenBSD device number. -func Minor(dev uint64) uint32 { - minor := uint32((dev & 0x000000ff) >> 0) - minor |= uint32((dev & 0xffff0000) >> 8) - return minor -} - -// Mkdev returns an OpenBSD device number generated from the given major and minor -// components. -func Mkdev(major, minor uint32) uint64 { - dev := (uint64(major) << 8) & 0x0000ff00 - dev |= (uint64(minor) << 8) & 0xffff0000 - dev |= (uint64(minor) << 0) & 0x000000ff - return dev -} diff --git a/vendor/golang.org/x/sys/unix/dev_zos.go b/vendor/golang.org/x/sys/unix/dev_zos.go deleted file mode 100644 index a388e59..0000000 --- a/vendor/golang.org/x/sys/unix/dev_zos.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build zos && s390x -// +build zos,s390x - -// Functions to access/create device major and minor numbers matching the -// encoding used by z/OS. -// -// The information below is extracted and adapted from macros. - -package unix - -// Major returns the major component of a z/OS device number. -func Major(dev uint64) uint32 { - return uint32((dev >> 16) & 0x0000FFFF) -} - -// Minor returns the minor component of a z/OS device number. -func Minor(dev uint64) uint32 { - return uint32(dev & 0x0000FFFF) -} - -// Mkdev returns a z/OS device number generated from the given major and minor -// components. -func Mkdev(major, minor uint32) uint64 { - return (uint64(major) << 16) | uint64(minor) -} diff --git a/vendor/golang.org/x/sys/unix/dirent.go b/vendor/golang.org/x/sys/unix/dirent.go deleted file mode 100644 index e74e5ea..0000000 --- a/vendor/golang.org/x/sys/unix/dirent.go +++ /dev/null @@ -1,103 +0,0 @@ -// 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 aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris -// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris - -package unix - -import "unsafe" - -// readInt returns the size-bytes unsigned integer in native byte order at offset off. -func readInt(b []byte, off, size uintptr) (u uint64, ok bool) { - if len(b) < int(off+size) { - return 0, false - } - if isBigEndian { - return readIntBE(b[off:], size), true - } - return readIntLE(b[off:], size), true -} - -func readIntBE(b []byte, size uintptr) uint64 { - switch size { - case 1: - return uint64(b[0]) - case 2: - _ = b[1] // bounds check hint to compiler; see golang.org/issue/14808 - return uint64(b[1]) | uint64(b[0])<<8 - case 4: - _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 - return uint64(b[3]) | uint64(b[2])<<8 | uint64(b[1])<<16 | uint64(b[0])<<24 - case 8: - _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 - return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | - uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56 - default: - panic("syscall: readInt with unsupported size") - } -} - -func readIntLE(b []byte, size uintptr) uint64 { - switch size { - case 1: - return uint64(b[0]) - case 2: - _ = b[1] // bounds check hint to compiler; see golang.org/issue/14808 - return uint64(b[0]) | uint64(b[1])<<8 - case 4: - _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 - return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 - case 8: - _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 - return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | - uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 - default: - panic("syscall: readInt with unsupported size") - } -} - -// ParseDirent parses up to max directory entries in buf, -// appending the names to names. It returns the number of -// bytes consumed from buf, the number of entries added -// to names, and the new names slice. -func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) { - origlen := len(buf) - count = 0 - for max != 0 && len(buf) > 0 { - reclen, ok := direntReclen(buf) - if !ok || reclen > uint64(len(buf)) { - return origlen, count, names - } - rec := buf[:reclen] - buf = buf[reclen:] - ino, ok := direntIno(rec) - if !ok { - break - } - if ino == 0 { // File absent in directory. - continue - } - const namoff = uint64(unsafe.Offsetof(Dirent{}.Name)) - namlen, ok := direntNamlen(rec) - if !ok || namoff+namlen > uint64(len(rec)) { - break - } - name := rec[namoff : namoff+namlen] - for i, c := range name { - if c == 0 { - name = name[:i] - break - } - } - // Check for useless names before allocating a string. - if string(name) == "." || string(name) == ".." { - continue - } - max-- - count++ - names = append(names, string(name)) - } - return origlen - len(buf), count, names -} diff --git a/vendor/golang.org/x/sys/unix/endian_big.go b/vendor/golang.org/x/sys/unix/endian_big.go deleted file mode 100644 index a520265..0000000 --- a/vendor/golang.org/x/sys/unix/endian_big.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. -// -//go:build armbe || arm64be || m68k || mips || mips64 || mips64p32 || ppc || ppc64 || s390 || s390x || shbe || sparc || sparc64 -// +build armbe arm64be m68k mips mips64 mips64p32 ppc ppc64 s390 s390x shbe sparc sparc64 - -package unix - -const isBigEndian = true diff --git a/vendor/golang.org/x/sys/unix/endian_little.go b/vendor/golang.org/x/sys/unix/endian_little.go deleted file mode 100644 index b0f2bc4..0000000 --- a/vendor/golang.org/x/sys/unix/endian_little.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. -// -//go:build 386 || amd64 || amd64p32 || alpha || arm || arm64 || loong64 || mipsle || mips64le || mips64p32le || nios2 || ppc64le || riscv || riscv64 || sh -// +build 386 amd64 amd64p32 alpha arm arm64 loong64 mipsle mips64le mips64p32le nios2 ppc64le riscv riscv64 sh - -package unix - -const isBigEndian = false diff --git a/vendor/golang.org/x/sys/unix/env_unix.go b/vendor/golang.org/x/sys/unix/env_unix.go deleted file mode 100644 index 29ccc4d..0000000 --- a/vendor/golang.org/x/sys/unix/env_unix.go +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2010 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos -// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos - -// Unix environment variables. - -package unix - -import "syscall" - -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() -} - -func Unsetenv(key string) error { - return syscall.Unsetenv(key) -} diff --git a/vendor/golang.org/x/sys/unix/epoll_zos.go b/vendor/golang.org/x/sys/unix/epoll_zos.go deleted file mode 100644 index cedaf7e..0000000 --- a/vendor/golang.org/x/sys/unix/epoll_zos.go +++ /dev/null @@ -1,221 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build zos && s390x -// +build zos,s390x - -package unix - -import ( - "sync" -) - -// This file simulates epoll on z/OS using poll. - -// Analogous to epoll_event on Linux. -// TODO(neeilan): Pad is because the Linux kernel expects a 96-bit struct. We never pass this to the kernel; remove? -type EpollEvent struct { - Events uint32 - Fd int32 - Pad int32 -} - -const ( - EPOLLERR = 0x8 - EPOLLHUP = 0x10 - EPOLLIN = 0x1 - EPOLLMSG = 0x400 - EPOLLOUT = 0x4 - EPOLLPRI = 0x2 - EPOLLRDBAND = 0x80 - EPOLLRDNORM = 0x40 - EPOLLWRBAND = 0x200 - EPOLLWRNORM = 0x100 - EPOLL_CTL_ADD = 0x1 - EPOLL_CTL_DEL = 0x2 - EPOLL_CTL_MOD = 0x3 - // The following constants are part of the epoll API, but represent - // currently unsupported functionality on z/OS. - // EPOLL_CLOEXEC = 0x80000 - // EPOLLET = 0x80000000 - // EPOLLONESHOT = 0x40000000 - // EPOLLRDHUP = 0x2000 // Typically used with edge-triggered notis - // EPOLLEXCLUSIVE = 0x10000000 // Exclusive wake-up mode - // EPOLLWAKEUP = 0x20000000 // Relies on Linux's BLOCK_SUSPEND capability -) - -// TODO(neeilan): We can eliminate these epToPoll / pToEpoll calls by using identical mask values for POLL/EPOLL -// constants where possible The lower 16 bits of epoll events (uint32) can fit any system poll event (int16). - -// epToPollEvt converts epoll event field to poll equivalent. -// In epoll, Events is a 32-bit field, while poll uses 16 bits. -func epToPollEvt(events uint32) int16 { - var ep2p = map[uint32]int16{ - EPOLLIN: POLLIN, - EPOLLOUT: POLLOUT, - EPOLLHUP: POLLHUP, - EPOLLPRI: POLLPRI, - EPOLLERR: POLLERR, - } - - var pollEvts int16 = 0 - for epEvt, pEvt := range ep2p { - if (events & epEvt) != 0 { - pollEvts |= pEvt - } - } - - return pollEvts -} - -// pToEpollEvt converts 16 bit poll event bitfields to 32-bit epoll event fields. -func pToEpollEvt(revents int16) uint32 { - var p2ep = map[int16]uint32{ - POLLIN: EPOLLIN, - POLLOUT: EPOLLOUT, - POLLHUP: EPOLLHUP, - POLLPRI: EPOLLPRI, - POLLERR: EPOLLERR, - } - - var epollEvts uint32 = 0 - for pEvt, epEvt := range p2ep { - if (revents & pEvt) != 0 { - epollEvts |= epEvt - } - } - - return epollEvts -} - -// Per-process epoll implementation. -type epollImpl struct { - mu sync.Mutex - epfd2ep map[int]*eventPoll - nextEpfd int -} - -// eventPoll holds a set of file descriptors being watched by the process. A process can have multiple epoll instances. -// On Linux, this is an in-kernel data structure accessed through a fd. -type eventPoll struct { - mu sync.Mutex - fds map[int]*EpollEvent -} - -// epoll impl for this process. -var impl epollImpl = epollImpl{ - epfd2ep: make(map[int]*eventPoll), - nextEpfd: 0, -} - -func (e *epollImpl) epollcreate(size int) (epfd int, err error) { - e.mu.Lock() - defer e.mu.Unlock() - epfd = e.nextEpfd - e.nextEpfd++ - - e.epfd2ep[epfd] = &eventPoll{ - fds: make(map[int]*EpollEvent), - } - return epfd, nil -} - -func (e *epollImpl) epollcreate1(flag int) (fd int, err error) { - return e.epollcreate(4) -} - -func (e *epollImpl) epollctl(epfd int, op int, fd int, event *EpollEvent) (err error) { - e.mu.Lock() - defer e.mu.Unlock() - - ep, ok := e.epfd2ep[epfd] - if !ok { - - return EBADF - } - - switch op { - case EPOLL_CTL_ADD: - // TODO(neeilan): When we make epfds and fds disjoint, detect epoll - // loops here (instances watching each other) and return ELOOP. - if _, ok := ep.fds[fd]; ok { - return EEXIST - } - ep.fds[fd] = event - case EPOLL_CTL_MOD: - if _, ok := ep.fds[fd]; !ok { - return ENOENT - } - ep.fds[fd] = event - case EPOLL_CTL_DEL: - if _, ok := ep.fds[fd]; !ok { - return ENOENT - } - delete(ep.fds, fd) - - } - return nil -} - -// Must be called while holding ep.mu -func (ep *eventPoll) getFds() []int { - fds := make([]int, len(ep.fds)) - for fd := range ep.fds { - fds = append(fds, fd) - } - return fds -} - -func (e *epollImpl) epollwait(epfd int, events []EpollEvent, msec int) (n int, err error) { - e.mu.Lock() // in [rare] case of concurrent epollcreate + epollwait - ep, ok := e.epfd2ep[epfd] - - if !ok { - e.mu.Unlock() - return 0, EBADF - } - - pollfds := make([]PollFd, 4) - for fd, epollevt := range ep.fds { - pollfds = append(pollfds, PollFd{Fd: int32(fd), Events: epToPollEvt(epollevt.Events)}) - } - e.mu.Unlock() - - n, err = Poll(pollfds, msec) - if err != nil { - return n, err - } - - i := 0 - for _, pFd := range pollfds { - if pFd.Revents != 0 { - events[i] = EpollEvent{Fd: pFd.Fd, Events: pToEpollEvt(pFd.Revents)} - i++ - } - - if i == n { - break - } - } - - return n, nil -} - -func EpollCreate(size int) (fd int, err error) { - return impl.epollcreate(size) -} - -func EpollCreate1(flag int) (fd int, err error) { - return impl.epollcreate1(flag) -} - -func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { - return impl.epollctl(epfd, op, fd, event) -} - -// Because EpollWait mutates events, the caller is expected to coordinate -// concurrent access if calling with the same epfd from multiple goroutines. -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - return impl.epollwait(epfd, events, msec) -} diff --git a/vendor/golang.org/x/sys/unix/fcntl.go b/vendor/golang.org/x/sys/unix/fcntl.go deleted file mode 100644 index e9b9912..0000000 --- a/vendor/golang.org/x/sys/unix/fcntl.go +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build dragonfly || freebsd || linux || netbsd || openbsd -// +build dragonfly freebsd linux netbsd openbsd - -package unix - -import "unsafe" - -// fcntl64Syscall is usually SYS_FCNTL, but is overridden on 32-bit Linux -// systems by fcntl_linux_32bit.go to be SYS_FCNTL64. -var fcntl64Syscall uintptr = SYS_FCNTL - -func fcntl(fd int, cmd, arg int) (int, error) { - valptr, _, errno := Syscall(fcntl64Syscall, uintptr(fd), uintptr(cmd), uintptr(arg)) - var err error - if errno != 0 { - err = errno - } - return int(valptr), err -} - -// FcntlInt performs a fcntl syscall on fd with the provided command and argument. -func FcntlInt(fd uintptr, cmd, arg int) (int, error) { - return fcntl(int(fd), cmd, arg) -} - -// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command. -func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error { - _, _, errno := Syscall(fcntl64Syscall, fd, uintptr(cmd), uintptr(unsafe.Pointer(lk))) - if errno == 0 { - return nil - } - return errno -} diff --git a/vendor/golang.org/x/sys/unix/fcntl_darwin.go b/vendor/golang.org/x/sys/unix/fcntl_darwin.go deleted file mode 100644 index a9911c7..0000000 --- a/vendor/golang.org/x/sys/unix/fcntl_darwin.go +++ /dev/null @@ -1,24 +0,0 @@ -// 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 unix - -import "unsafe" - -// FcntlInt performs a fcntl syscall on fd with the provided command and argument. -func FcntlInt(fd uintptr, cmd, arg int) (int, error) { - return fcntl(int(fd), cmd, arg) -} - -// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command. -func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error { - _, err := fcntl(int(fd), cmd, int(uintptr(unsafe.Pointer(lk)))) - return err -} - -// FcntlFstore performs a fcntl syscall for the F_PREALLOCATE command. -func FcntlFstore(fd uintptr, cmd int, fstore *Fstore_t) error { - _, err := fcntl(int(fd), cmd, int(uintptr(unsafe.Pointer(fstore)))) - return err -} diff --git a/vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go b/vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go deleted file mode 100644 index 29d4480..0000000 --- a/vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build (linux && 386) || (linux && arm) || (linux && mips) || (linux && mipsle) || (linux && ppc) -// +build linux,386 linux,arm linux,mips linux,mipsle linux,ppc - -package unix - -func init() { - // On 32-bit Linux systems, the fcntl syscall that matches Go's - // Flock_t type is SYS_FCNTL64, not SYS_FCNTL. - fcntl64Syscall = SYS_FCNTL64 -} diff --git a/vendor/golang.org/x/sys/unix/fdset.go b/vendor/golang.org/x/sys/unix/fdset.go deleted file mode 100644 index a8068f9..0000000 --- a/vendor/golang.org/x/sys/unix/fdset.go +++ /dev/null @@ -1,30 +0,0 @@ -// 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 -// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos - -package unix - -// Set adds fd to the set fds. -func (fds *FdSet) Set(fd int) { - fds.Bits[fd/NFDBITS] |= (1 << (uintptr(fd) % NFDBITS)) -} - -// Clear removes fd from the set fds. -func (fds *FdSet) Clear(fd int) { - fds.Bits[fd/NFDBITS] &^= (1 << (uintptr(fd) % NFDBITS)) -} - -// IsSet returns whether fd is in the set fds. -func (fds *FdSet) IsSet(fd int) bool { - return fds.Bits[fd/NFDBITS]&(1<<(uintptr(fd)%NFDBITS)) != 0 -} - -// Zero clears the set fds. -func (fds *FdSet) Zero() { - for i := range fds.Bits { - fds.Bits[i] = 0 - } -} diff --git a/vendor/golang.org/x/sys/unix/fstatfs_zos.go b/vendor/golang.org/x/sys/unix/fstatfs_zos.go deleted file mode 100644 index e377cc9..0000000 --- a/vendor/golang.org/x/sys/unix/fstatfs_zos.go +++ /dev/null @@ -1,164 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build zos && s390x -// +build zos,s390x - -package unix - -import ( - "unsafe" -) - -// This file simulates fstatfs on z/OS using fstatvfs and w_getmntent. - -func Fstatfs(fd int, stat *Statfs_t) (err error) { - var stat_v Statvfs_t - err = Fstatvfs(fd, &stat_v) - if err == nil { - // populate stat - stat.Type = 0 - stat.Bsize = stat_v.Bsize - stat.Blocks = stat_v.Blocks - stat.Bfree = stat_v.Bfree - stat.Bavail = stat_v.Bavail - stat.Files = stat_v.Files - stat.Ffree = stat_v.Ffree - stat.Fsid = stat_v.Fsid - stat.Namelen = stat_v.Namemax - stat.Frsize = stat_v.Frsize - stat.Flags = stat_v.Flag - for passn := 0; passn < 5; passn++ { - switch passn { - case 0: - err = tryGetmntent64(stat) - break - case 1: - err = tryGetmntent128(stat) - break - case 2: - err = tryGetmntent256(stat) - break - case 3: - err = tryGetmntent512(stat) - break - case 4: - err = tryGetmntent1024(stat) - break - default: - break - } - //proceed to return if: err is nil (found), err is nonnil but not ERANGE (another error occurred) - if err == nil || err != nil && err != ERANGE { - break - } - } - } - return err -} - -func tryGetmntent64(stat *Statfs_t) (err error) { - var mnt_ent_buffer struct { - header W_Mnth - filesys_info [64]W_Mntent - } - var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer)) - fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size) - if err != nil { - return err - } - err = ERANGE //return ERANGE if no match is found in this batch - for i := 0; i < fs_count; i++ { - if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) { - stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0]) - err = nil - break - } - } - return err -} - -func tryGetmntent128(stat *Statfs_t) (err error) { - var mnt_ent_buffer struct { - header W_Mnth - filesys_info [128]W_Mntent - } - var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer)) - fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size) - if err != nil { - return err - } - err = ERANGE //return ERANGE if no match is found in this batch - for i := 0; i < fs_count; i++ { - if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) { - stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0]) - err = nil - break - } - } - return err -} - -func tryGetmntent256(stat *Statfs_t) (err error) { - var mnt_ent_buffer struct { - header W_Mnth - filesys_info [256]W_Mntent - } - var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer)) - fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size) - if err != nil { - return err - } - err = ERANGE //return ERANGE if no match is found in this batch - for i := 0; i < fs_count; i++ { - if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) { - stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0]) - err = nil - break - } - } - return err -} - -func tryGetmntent512(stat *Statfs_t) (err error) { - var mnt_ent_buffer struct { - header W_Mnth - filesys_info [512]W_Mntent - } - var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer)) - fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size) - if err != nil { - return err - } - err = ERANGE //return ERANGE if no match is found in this batch - for i := 0; i < fs_count; i++ { - if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) { - stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0]) - err = nil - break - } - } - return err -} - -func tryGetmntent1024(stat *Statfs_t) (err error) { - var mnt_ent_buffer struct { - header W_Mnth - filesys_info [1024]W_Mntent - } - var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer)) - fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size) - if err != nil { - return err - } - err = ERANGE //return ERANGE if no match is found in this batch - for i := 0; i < fs_count; i++ { - if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) { - stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0]) - err = nil - break - } - } - return err -} diff --git a/vendor/golang.org/x/sys/unix/gccgo.go b/vendor/golang.org/x/sys/unix/gccgo.go deleted file mode 100644 index 0dee232..0000000 --- a/vendor/golang.org/x/sys/unix/gccgo.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build gccgo && !aix -// +build gccgo,!aix - -package unix - -import "syscall" - -// We can't use the gc-syntax .s files for gccgo. On the plus side -// much of the functionality can be written directly in Go. - -func realSyscallNoError(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r uintptr) - -func realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r, errno uintptr) - -func SyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) { - syscall.Entersyscall() - r := realSyscallNoError(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0) - syscall.Exitsyscall() - return r, 0 -} - -func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { - syscall.Entersyscall() - r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0) - syscall.Exitsyscall() - return r, 0, syscall.Errno(errno) -} - -func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) { - syscall.Entersyscall() - r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0) - syscall.Exitsyscall() - return r, 0, syscall.Errno(errno) -} - -func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) { - syscall.Entersyscall() - r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9) - syscall.Exitsyscall() - return r, 0, syscall.Errno(errno) -} - -func RawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) { - r := realSyscallNoError(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0) - return r, 0 -} - -func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { - r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0) - return r, 0, syscall.Errno(errno) -} - -func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) { - r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0) - return r, 0, syscall.Errno(errno) -} diff --git a/vendor/golang.org/x/sys/unix/gccgo_c.c b/vendor/golang.org/x/sys/unix/gccgo_c.c deleted file mode 100644 index 2cb1fef..0000000 --- a/vendor/golang.org/x/sys/unix/gccgo_c.c +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build gccgo -// +build !aix - -#include -#include -#include - -#define _STRINGIFY2_(x) #x -#define _STRINGIFY_(x) _STRINGIFY2_(x) -#define GOSYM_PREFIX _STRINGIFY_(__USER_LABEL_PREFIX__) - -// Call syscall from C code because the gccgo support for calling from -// Go to C does not support varargs functions. - -struct ret { - uintptr_t r; - uintptr_t err; -}; - -struct ret gccgoRealSyscall(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9) - __asm__(GOSYM_PREFIX GOPKGPATH ".realSyscall"); - -struct ret -gccgoRealSyscall(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9) -{ - struct ret r; - - errno = 0; - r.r = syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9); - r.err = errno; - return r; -} - -uintptr_t gccgoRealSyscallNoError(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9) - __asm__(GOSYM_PREFIX GOPKGPATH ".realSyscallNoError"); - -uintptr_t -gccgoRealSyscallNoError(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9) -{ - return syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9); -} diff --git a/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go b/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go deleted file mode 100644 index e60e49a..0000000 --- a/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build gccgo && linux && amd64 -// +build gccgo,linux,amd64 - -package unix - -import "syscall" - -//extern gettimeofday -func realGettimeofday(*Timeval, *byte) int32 - -func gettimeofday(tv *Timeval) (err syscall.Errno) { - r := realGettimeofday(tv, nil) - if r < 0 { - return syscall.GetErrno() - } - return 0 -} diff --git a/vendor/golang.org/x/sys/unix/ifreq_linux.go b/vendor/golang.org/x/sys/unix/ifreq_linux.go deleted file mode 100644 index 15721a5..0000000 --- a/vendor/golang.org/x/sys/unix/ifreq_linux.go +++ /dev/null @@ -1,142 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux -// +build linux - -package unix - -import ( - "unsafe" -) - -// Helpers for dealing with ifreq since it contains a union and thus requires a -// lot of unsafe.Pointer casts to use properly. - -// An Ifreq is a type-safe wrapper around the raw ifreq struct. An Ifreq -// contains an interface name and a union of arbitrary data which can be -// accessed using the Ifreq's methods. To create an Ifreq, use the NewIfreq -// function. -// -// Use the Name method to access the stored interface name. The union data -// fields can be get and set using the following methods: -// - Uint16/SetUint16: flags -// - Uint32/SetUint32: ifindex, metric, mtu -type Ifreq struct{ raw ifreq } - -// NewIfreq creates an Ifreq with the input network interface name after -// validating the name does not exceed IFNAMSIZ-1 (trailing NULL required) -// bytes. -func NewIfreq(name string) (*Ifreq, error) { - // Leave room for terminating NULL byte. - if len(name) >= IFNAMSIZ { - return nil, EINVAL - } - - var ifr ifreq - copy(ifr.Ifrn[:], name) - - return &Ifreq{raw: ifr}, nil -} - -// TODO(mdlayher): get/set methods for hardware address sockaddr, char array, etc. - -// Name returns the interface name associated with the Ifreq. -func (ifr *Ifreq) Name() string { - return ByteSliceToString(ifr.raw.Ifrn[:]) -} - -// According to netdevice(7), only AF_INET addresses are returned for numerous -// sockaddr ioctls. For convenience, we expose these as Inet4Addr since the Port -// field and other data is always empty. - -// Inet4Addr returns the Ifreq union data from an embedded sockaddr as a C -// in_addr/Go []byte (4-byte IPv4 address) value. If the sockaddr family is not -// AF_INET, an error is returned. -func (ifr *Ifreq) Inet4Addr() ([]byte, error) { - raw := *(*RawSockaddrInet4)(unsafe.Pointer(&ifr.raw.Ifru[:SizeofSockaddrInet4][0])) - if raw.Family != AF_INET { - // Cannot safely interpret raw.Addr bytes as an IPv4 address. - return nil, EINVAL - } - - return raw.Addr[:], nil -} - -// SetInet4Addr sets a C in_addr/Go []byte (4-byte IPv4 address) value in an -// embedded sockaddr within the Ifreq's union data. v must be 4 bytes in length -// or an error will be returned. -func (ifr *Ifreq) SetInet4Addr(v []byte) error { - if len(v) != 4 { - return EINVAL - } - - var addr [4]byte - copy(addr[:], v) - - ifr.clear() - *(*RawSockaddrInet4)( - unsafe.Pointer(&ifr.raw.Ifru[:SizeofSockaddrInet4][0]), - ) = RawSockaddrInet4{ - // Always set IP family as ioctls would require it anyway. - Family: AF_INET, - Addr: addr, - } - - return nil -} - -// Uint16 returns the Ifreq union data as a C short/Go uint16 value. -func (ifr *Ifreq) Uint16() uint16 { - return *(*uint16)(unsafe.Pointer(&ifr.raw.Ifru[:2][0])) -} - -// SetUint16 sets a C short/Go uint16 value as the Ifreq's union data. -func (ifr *Ifreq) SetUint16(v uint16) { - ifr.clear() - *(*uint16)(unsafe.Pointer(&ifr.raw.Ifru[:2][0])) = v -} - -// Uint32 returns the Ifreq union data as a C int/Go uint32 value. -func (ifr *Ifreq) Uint32() uint32 { - return *(*uint32)(unsafe.Pointer(&ifr.raw.Ifru[:4][0])) -} - -// SetUint32 sets a C int/Go uint32 value as the Ifreq's union data. -func (ifr *Ifreq) SetUint32(v uint32) { - ifr.clear() - *(*uint32)(unsafe.Pointer(&ifr.raw.Ifru[:4][0])) = v -} - -// clear zeroes the ifreq's union field to prevent trailing garbage data from -// being sent to the kernel if an ifreq is reused. -func (ifr *Ifreq) clear() { - for i := range ifr.raw.Ifru { - ifr.raw.Ifru[i] = 0 - } -} - -// TODO(mdlayher): export as IfreqData? For now we can provide helpers such as -// IoctlGetEthtoolDrvinfo which use these APIs under the hood. - -// An ifreqData is an Ifreq which carries pointer data. To produce an ifreqData, -// use the Ifreq.withData method. -type ifreqData struct { - name [IFNAMSIZ]byte - // A type separate from ifreq is required in order to comply with the - // unsafe.Pointer rules since the "pointer-ness" of data would not be - // preserved if it were cast into the byte array of a raw ifreq. - data unsafe.Pointer - // Pad to the same size as ifreq. - _ [len(ifreq{}.Ifru) - SizeofPtr]byte -} - -// withData produces an ifreqData with the pointer p set for ioctls which require -// arbitrary pointer data. -func (ifr Ifreq) withData(p unsafe.Pointer) ifreqData { - return ifreqData{ - name: ifr.raw.Ifrn, - data: p, - } -} diff --git a/vendor/golang.org/x/sys/unix/ioctl.go b/vendor/golang.org/x/sys/unix/ioctl.go deleted file mode 100644 index 6c7ad05..0000000 --- a/vendor/golang.org/x/sys/unix/ioctl.go +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris -// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris - -package unix - -import ( - "runtime" - "unsafe" -) - -// ioctl itself should not be exposed directly, but additional get/set -// functions for specific types are permissible. - -// IoctlSetInt performs an ioctl operation which sets an integer value -// on fd, using the specified request number. -func IoctlSetInt(fd int, req uint, value int) error { - return ioctl(fd, req, uintptr(value)) -} - -// IoctlSetPointerInt performs an ioctl operation which sets an -// integer value on fd, using the specified request number. The ioctl -// argument is called with a pointer to the integer value, rather than -// passing the integer value directly. -func IoctlSetPointerInt(fd int, req uint, value int) error { - v := int32(value) - return ioctl(fd, req, uintptr(unsafe.Pointer(&v))) -} - -// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument. -// -// To change fd's window size, the req argument should be TIOCSWINSZ. -func IoctlSetWinsize(fd int, req uint, value *Winsize) error { - // TODO: if we get the chance, remove the req parameter and - // hardcode TIOCSWINSZ. - err := ioctl(fd, req, uintptr(unsafe.Pointer(value))) - runtime.KeepAlive(value) - return err -} - -// IoctlSetTermios performs an ioctl on fd with a *Termios. -// -// The req value will usually be TCSETA or TIOCSETA. -func IoctlSetTermios(fd int, req uint, value *Termios) error { - // TODO: if we get the chance, remove the req parameter. - err := ioctl(fd, req, uintptr(unsafe.Pointer(value))) - runtime.KeepAlive(value) - return err -} - -// IoctlGetInt performs an ioctl operation which gets an integer value -// from fd, using the specified request number. -// -// A few ioctl requests use the return value as an output parameter; -// for those, IoctlRetInt should be used instead of this function. -func IoctlGetInt(fd int, req uint) (int, error) { - var value int - err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) - return value, err -} - -func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { - var value Winsize - err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) - return &value, err -} - -func IoctlGetTermios(fd int, req uint) (*Termios, error) { - var value Termios - err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) - return &value, err -} diff --git a/vendor/golang.org/x/sys/unix/ioctl_linux.go b/vendor/golang.org/x/sys/unix/ioctl_linux.go deleted file mode 100644 index 0d12c08..0000000 --- a/vendor/golang.org/x/sys/unix/ioctl_linux.go +++ /dev/null @@ -1,233 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package unix - -import "unsafe" - -// IoctlRetInt performs an ioctl operation specified by req on a device -// associated with opened file descriptor fd, and returns a non-negative -// integer that is returned by the ioctl syscall. -func IoctlRetInt(fd int, req uint) (int, error) { - ret, _, err := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), 0) - if err != 0 { - return 0, err - } - return int(ret), nil -} - -func IoctlGetUint32(fd int, req uint) (uint32, error) { - var value uint32 - err := ioctlPtr(fd, req, unsafe.Pointer(&value)) - return value, err -} - -func IoctlGetRTCTime(fd int) (*RTCTime, error) { - var value RTCTime - err := ioctlPtr(fd, RTC_RD_TIME, unsafe.Pointer(&value)) - return &value, err -} - -func IoctlSetRTCTime(fd int, value *RTCTime) error { - return ioctlPtr(fd, RTC_SET_TIME, unsafe.Pointer(value)) -} - -func IoctlGetRTCWkAlrm(fd int) (*RTCWkAlrm, error) { - var value RTCWkAlrm - err := ioctlPtr(fd, RTC_WKALM_RD, unsafe.Pointer(&value)) - return &value, err -} - -func IoctlSetRTCWkAlrm(fd int, value *RTCWkAlrm) error { - return ioctlPtr(fd, RTC_WKALM_SET, unsafe.Pointer(value)) -} - -// IoctlGetEthtoolDrvinfo fetches ethtool driver information for the network -// device specified by ifname. -func IoctlGetEthtoolDrvinfo(fd int, ifname string) (*EthtoolDrvinfo, error) { - ifr, err := NewIfreq(ifname) - if err != nil { - return nil, err - } - - value := EthtoolDrvinfo{Cmd: ETHTOOL_GDRVINFO} - ifrd := ifr.withData(unsafe.Pointer(&value)) - - err = ioctlIfreqData(fd, SIOCETHTOOL, &ifrd) - return &value, err -} - -// IoctlGetWatchdogInfo fetches information about a watchdog device from the -// Linux watchdog API. For more information, see: -// https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html. -func IoctlGetWatchdogInfo(fd int) (*WatchdogInfo, error) { - var value WatchdogInfo - err := ioctlPtr(fd, WDIOC_GETSUPPORT, unsafe.Pointer(&value)) - return &value, err -} - -// IoctlWatchdogKeepalive issues a keepalive ioctl to a watchdog device. For -// more information, see: -// https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html. -func IoctlWatchdogKeepalive(fd int) error { - // arg is ignored and not a pointer, so ioctl is fine instead of ioctlPtr. - return ioctl(fd, WDIOC_KEEPALIVE, 0) -} - -// IoctlFileCloneRange performs an FICLONERANGE ioctl operation to clone the -// range of data conveyed in value to the file associated with the file -// descriptor destFd. See the ioctl_ficlonerange(2) man page for details. -func IoctlFileCloneRange(destFd int, value *FileCloneRange) error { - return ioctlPtr(destFd, FICLONERANGE, unsafe.Pointer(value)) -} - -// IoctlFileClone performs an FICLONE ioctl operation to clone the entire file -// associated with the file description srcFd to the file associated with the -// file descriptor destFd. See the ioctl_ficlone(2) man page for details. -func IoctlFileClone(destFd, srcFd int) error { - return ioctl(destFd, FICLONE, uintptr(srcFd)) -} - -type FileDedupeRange struct { - Src_offset uint64 - Src_length uint64 - Reserved1 uint16 - Reserved2 uint32 - Info []FileDedupeRangeInfo -} - -type FileDedupeRangeInfo struct { - Dest_fd int64 - Dest_offset uint64 - Bytes_deduped uint64 - Status int32 - Reserved uint32 -} - -// IoctlFileDedupeRange performs an FIDEDUPERANGE ioctl operation to share the -// range of data conveyed in value from the file associated with the file -// descriptor srcFd to the value.Info destinations. See the -// ioctl_fideduperange(2) man page for details. -func IoctlFileDedupeRange(srcFd int, value *FileDedupeRange) error { - buf := make([]byte, SizeofRawFileDedupeRange+ - len(value.Info)*SizeofRawFileDedupeRangeInfo) - rawrange := (*RawFileDedupeRange)(unsafe.Pointer(&buf[0])) - rawrange.Src_offset = value.Src_offset - rawrange.Src_length = value.Src_length - rawrange.Dest_count = uint16(len(value.Info)) - rawrange.Reserved1 = value.Reserved1 - rawrange.Reserved2 = value.Reserved2 - - for i := range value.Info { - rawinfo := (*RawFileDedupeRangeInfo)(unsafe.Pointer( - uintptr(unsafe.Pointer(&buf[0])) + uintptr(SizeofRawFileDedupeRange) + - uintptr(i*SizeofRawFileDedupeRangeInfo))) - rawinfo.Dest_fd = value.Info[i].Dest_fd - rawinfo.Dest_offset = value.Info[i].Dest_offset - rawinfo.Bytes_deduped = value.Info[i].Bytes_deduped - rawinfo.Status = value.Info[i].Status - rawinfo.Reserved = value.Info[i].Reserved - } - - err := ioctlPtr(srcFd, FIDEDUPERANGE, unsafe.Pointer(&buf[0])) - - // Output - for i := range value.Info { - rawinfo := (*RawFileDedupeRangeInfo)(unsafe.Pointer( - uintptr(unsafe.Pointer(&buf[0])) + uintptr(SizeofRawFileDedupeRange) + - uintptr(i*SizeofRawFileDedupeRangeInfo))) - value.Info[i].Dest_fd = rawinfo.Dest_fd - value.Info[i].Dest_offset = rawinfo.Dest_offset - value.Info[i].Bytes_deduped = rawinfo.Bytes_deduped - value.Info[i].Status = rawinfo.Status - value.Info[i].Reserved = rawinfo.Reserved - } - - return err -} - -func IoctlHIDGetDesc(fd int, value *HIDRawReportDescriptor) error { - return ioctlPtr(fd, HIDIOCGRDESC, unsafe.Pointer(value)) -} - -func IoctlHIDGetRawInfo(fd int) (*HIDRawDevInfo, error) { - var value HIDRawDevInfo - err := ioctlPtr(fd, HIDIOCGRAWINFO, unsafe.Pointer(&value)) - return &value, err -} - -func IoctlHIDGetRawName(fd int) (string, error) { - var value [_HIDIOCGRAWNAME_LEN]byte - err := ioctlPtr(fd, _HIDIOCGRAWNAME, unsafe.Pointer(&value[0])) - return ByteSliceToString(value[:]), err -} - -func IoctlHIDGetRawPhys(fd int) (string, error) { - var value [_HIDIOCGRAWPHYS_LEN]byte - err := ioctlPtr(fd, _HIDIOCGRAWPHYS, unsafe.Pointer(&value[0])) - return ByteSliceToString(value[:]), err -} - -func IoctlHIDGetRawUniq(fd int) (string, error) { - var value [_HIDIOCGRAWUNIQ_LEN]byte - err := ioctlPtr(fd, _HIDIOCGRAWUNIQ, unsafe.Pointer(&value[0])) - return ByteSliceToString(value[:]), err -} - -// IoctlIfreq performs an ioctl using an Ifreq structure for input and/or -// output. See the netdevice(7) man page for details. -func IoctlIfreq(fd int, req uint, value *Ifreq) error { - // It is possible we will add more fields to *Ifreq itself later to prevent - // misuse, so pass the raw *ifreq directly. - return ioctlPtr(fd, req, unsafe.Pointer(&value.raw)) -} - -// TODO(mdlayher): export if and when IfreqData is exported. - -// ioctlIfreqData performs an ioctl using an ifreqData structure for input -// and/or output. See the netdevice(7) man page for details. -func ioctlIfreqData(fd int, req uint, value *ifreqData) error { - // The memory layout of IfreqData (type-safe) and ifreq (not type-safe) are - // identical so pass *IfreqData directly. - return ioctlPtr(fd, req, unsafe.Pointer(value)) -} - -// IoctlKCMClone attaches a new file descriptor to a multiplexor by cloning an -// existing KCM socket, returning a structure containing the file descriptor of -// the new socket. -func IoctlKCMClone(fd int) (*KCMClone, error) { - var info KCMClone - if err := ioctlPtr(fd, SIOCKCMCLONE, unsafe.Pointer(&info)); err != nil { - return nil, err - } - - return &info, nil -} - -// IoctlKCMAttach attaches a TCP socket and associated BPF program file -// descriptor to a multiplexor. -func IoctlKCMAttach(fd int, info KCMAttach) error { - return ioctlPtr(fd, SIOCKCMATTACH, unsafe.Pointer(&info)) -} - -// IoctlKCMUnattach unattaches a TCP socket file descriptor from a multiplexor. -func IoctlKCMUnattach(fd int, info KCMUnattach) error { - return ioctlPtr(fd, SIOCKCMUNATTACH, unsafe.Pointer(&info)) -} - -// IoctlLoopGetStatus64 gets the status of the loop device associated with the -// file descriptor fd using the LOOP_GET_STATUS64 operation. -func IoctlLoopGetStatus64(fd int) (*LoopInfo64, error) { - var value LoopInfo64 - if err := ioctlPtr(fd, LOOP_GET_STATUS64, unsafe.Pointer(&value)); err != nil { - return nil, err - } - return &value, nil -} - -// IoctlLoopSetStatus64 sets the status of the loop device associated with the -// file descriptor fd using the LOOP_SET_STATUS64 operation. -func IoctlLoopSetStatus64(fd int, value *LoopInfo64) error { - return ioctlPtr(fd, LOOP_SET_STATUS64, unsafe.Pointer(value)) -} diff --git a/vendor/golang.org/x/sys/unix/ioctl_zos.go b/vendor/golang.org/x/sys/unix/ioctl_zos.go deleted file mode 100644 index 5384e7d..0000000 --- a/vendor/golang.org/x/sys/unix/ioctl_zos.go +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build zos && s390x -// +build zos,s390x - -package unix - -import ( - "runtime" - "unsafe" -) - -// ioctl itself should not be exposed directly, but additional get/set -// functions for specific types are permissible. - -// IoctlSetInt performs an ioctl operation which sets an integer value -// on fd, using the specified request number. -func IoctlSetInt(fd int, req uint, value int) error { - return ioctl(fd, req, uintptr(value)) -} - -// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument. -// -// To change fd's window size, the req argument should be TIOCSWINSZ. -func IoctlSetWinsize(fd int, req uint, value *Winsize) error { - // TODO: if we get the chance, remove the req parameter and - // hardcode TIOCSWINSZ. - err := ioctl(fd, req, uintptr(unsafe.Pointer(value))) - runtime.KeepAlive(value) - return err -} - -// IoctlSetTermios performs an ioctl on fd with a *Termios. -// -// The req value is expected to be TCSETS, TCSETSW, or TCSETSF -func IoctlSetTermios(fd int, req uint, value *Termios) error { - if (req != TCSETS) && (req != TCSETSW) && (req != TCSETSF) { - return ENOSYS - } - err := Tcsetattr(fd, int(req), value) - runtime.KeepAlive(value) - return err -} - -// IoctlGetInt performs an ioctl operation which gets an integer value -// from fd, using the specified request number. -// -// A few ioctl requests use the return value as an output parameter; -// for those, IoctlRetInt should be used instead of this function. -func IoctlGetInt(fd int, req uint) (int, error) { - var value int - err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) - return value, err -} - -func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { - var value Winsize - err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) - return &value, err -} - -// IoctlGetTermios performs an ioctl on fd with a *Termios. -// -// The req value is expected to be TCGETS -func IoctlGetTermios(fd int, req uint) (*Termios, error) { - var value Termios - if req != TCGETS { - return &value, ENOSYS - } - err := Tcgetattr(fd, &value) - return &value, err -} diff --git a/vendor/golang.org/x/sys/unix/mkall.sh b/vendor/golang.org/x/sys/unix/mkall.sh deleted file mode 100644 index 1b2b424..0000000 --- a/vendor/golang.org/x/sys/unix/mkall.sh +++ /dev/null @@ -1,231 +0,0 @@ -#!/usr/bin/env bash -# 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. - -# This script runs or (given -n) prints suggested commands to generate files for -# the Architecture/OS specified by the GOARCH and GOOS environment variables. -# See README.md for more information about how the build system works. - -GOOSARCH="${GOOS}_${GOARCH}" - -# defaults -mksyscall="go run mksyscall.go" -mkerrors="./mkerrors.sh" -zerrors="zerrors_$GOOSARCH.go" -mksysctl="" -zsysctl="zsysctl_$GOOSARCH.go" -mksysnum= -mktypes= -mkasm= -run="sh" -cmd="" - -case "$1" in --syscalls) - for i in zsyscall*go - do - # Run the command line that appears in the first line - # of the generated file to regenerate it. - sed 1q $i | sed 's;^// ;;' | sh > _$i && gofmt < _$i > $i - rm _$i - done - exit 0 - ;; --n) - run="cat" - cmd="echo" - shift -esac - -case "$#" in -0) - ;; -*) - echo 'usage: mkall.sh [-n]' 1>&2 - exit 2 -esac - -if [[ "$GOOS" = "linux" ]]; then - # Use the Docker-based build system - # Files generated through docker (use $cmd so you can Ctl-C the build or run) - $cmd docker build --tag generate:$GOOS $GOOS - $cmd docker run --interactive --tty --volume $(cd -- "$(dirname -- "$0")/.." && /bin/pwd):/build generate:$GOOS - exit -fi - -GOOSARCH_in=syscall_$GOOSARCH.go -case "$GOOSARCH" in -_* | *_ | _) - echo 'undefined $GOOS_$GOARCH:' "$GOOSARCH" 1>&2 - exit 1 - ;; -aix_ppc) - mkerrors="$mkerrors -maix32" - mksyscall="go run mksyscall_aix_ppc.go -aix" - mktypes="GOARCH=$GOARCH go tool cgo -godefs" - ;; -aix_ppc64) - mkerrors="$mkerrors -maix64" - mksyscall="go run mksyscall_aix_ppc64.go -aix" - mktypes="GOARCH=$GOARCH go tool cgo -godefs" - ;; -darwin_amd64) - mkerrors="$mkerrors -m64" - mktypes="GOARCH=$GOARCH go tool cgo -godefs" - mkasm="go run mkasm.go" - ;; -darwin_arm64) - mkerrors="$mkerrors -m64" - mktypes="GOARCH=$GOARCH go tool cgo -godefs" - mkasm="go run mkasm.go" - ;; -dragonfly_amd64) - mkerrors="$mkerrors -m64" - mksyscall="go run mksyscall.go -dragonfly" - mksysnum="go run mksysnum.go 'https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master'" - mktypes="GOARCH=$GOARCH go tool cgo -godefs" - ;; -freebsd_386) - mkerrors="$mkerrors -m32" - mksyscall="go run mksyscall.go -l32" - mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'" - mktypes="GOARCH=$GOARCH go tool cgo -godefs" - ;; -freebsd_amd64) - mkerrors="$mkerrors -m64" - mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'" - mktypes="GOARCH=$GOARCH go tool cgo -godefs" - ;; -freebsd_arm) - mkerrors="$mkerrors" - mksyscall="go run mksyscall.go -l32 -arm" - mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'" - # Let the type of C char be signed for making the bare syscall - # API consistent across platforms. - mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" - ;; -freebsd_arm64) - mkerrors="$mkerrors -m64" - mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'" - mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" - ;; -freebsd_riscv64) - mkerrors="$mkerrors -m64" - mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'" - mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" - ;; -netbsd_386) - mkerrors="$mkerrors -m32" - mksyscall="go run mksyscall.go -l32 -netbsd" - mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'" - mktypes="GOARCH=$GOARCH go tool cgo -godefs" - ;; -netbsd_amd64) - mkerrors="$mkerrors -m64" - mksyscall="go run mksyscall.go -netbsd" - mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'" - mktypes="GOARCH=$GOARCH go tool cgo -godefs" - ;; -netbsd_arm) - mkerrors="$mkerrors" - mksyscall="go run mksyscall.go -l32 -netbsd -arm" - mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'" - # Let the type of C char be signed for making the bare syscall - # API consistent across platforms. - mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" - ;; -netbsd_arm64) - mkerrors="$mkerrors -m64" - mksyscall="go run mksyscall.go -netbsd" - mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'" - mktypes="GOARCH=$GOARCH go tool cgo -godefs" - ;; -openbsd_386) - mkasm="go run mkasm.go" - mkerrors="$mkerrors -m32" - mksyscall="go run mksyscall.go -l32 -openbsd -libc" - mksysctl="go run mksysctl_openbsd.go" - mktypes="GOARCH=$GOARCH go tool cgo -godefs" - ;; -openbsd_amd64) - mkasm="go run mkasm.go" - mkerrors="$mkerrors -m64" - mksyscall="go run mksyscall.go -openbsd -libc" - mksysctl="go run mksysctl_openbsd.go" - mktypes="GOARCH=$GOARCH go tool cgo -godefs" - ;; -openbsd_arm) - mkasm="go run mkasm.go" - mkerrors="$mkerrors" - mksyscall="go run mksyscall.go -l32 -openbsd -arm -libc" - mksysctl="go run mksysctl_openbsd.go" - # Let the type of C char be signed for making the bare syscall - # API consistent across platforms. - mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" - ;; -openbsd_arm64) - mkasm="go run mkasm.go" - mkerrors="$mkerrors -m64" - mksyscall="go run mksyscall.go -openbsd -libc" - mksysctl="go run mksysctl_openbsd.go" - # Let the type of C char be signed for making the bare syscall - # API consistent across platforms. - mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" - ;; -openbsd_mips64) - mkerrors="$mkerrors -m64" - mksyscall="go run mksyscall.go -openbsd" - mksysctl="go run mksysctl_openbsd.go" - mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'" - # Let the type of C char be signed for making the bare syscall - # API consistent across platforms. - mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" - ;; -solaris_amd64) - mksyscall="go run mksyscall_solaris.go" - mkerrors="$mkerrors -m64" - mksysnum= - mktypes="GOARCH=$GOARCH go tool cgo -godefs" - ;; -illumos_amd64) - mksyscall="go run mksyscall_solaris.go" - mkerrors= - mksysnum= - mktypes="GOARCH=$GOARCH go tool cgo -godefs" - ;; -*) - echo 'unrecognized $GOOS_$GOARCH: ' "$GOOSARCH" 1>&2 - exit 1 - ;; -esac - -( - if [ -n "$mkerrors" ]; then echo "$mkerrors |gofmt >$zerrors"; fi - case "$GOOS" in - *) - syscall_goos="syscall_$GOOS.go" - case "$GOOS" in - darwin | dragonfly | freebsd | netbsd | openbsd) - syscall_goos="syscall_bsd.go $syscall_goos" - ;; - esac - if [ -n "$mksyscall" ]; then - if [ "$GOOSARCH" == "aix_ppc64" ]; then - # aix/ppc64 script generates files instead of writing to stdin. - echo "$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in && gofmt -w zsyscall_$GOOSARCH.go && gofmt -w zsyscall_"$GOOSARCH"_gccgo.go && gofmt -w zsyscall_"$GOOSARCH"_gc.go " ; - elif [ "$GOOS" == "illumos" ]; then - # illumos code generation requires a --illumos switch - echo "$mksyscall -illumos -tags illumos,$GOARCH syscall_illumos.go |gofmt > zsyscall_illumos_$GOARCH.go"; - # illumos implies solaris, so solaris code generation is also required - echo "$mksyscall -tags solaris,$GOARCH syscall_solaris.go syscall_solaris_$GOARCH.go |gofmt >zsyscall_solaris_$GOARCH.go"; - else - echo "$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go"; - fi - fi - esac - if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi - if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi - if [ -n "$mktypes" ]; then echo "$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go"; fi - if [ -n "$mkasm" ]; then echo "$mkasm $GOOS $GOARCH"; fi -) | $run diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh deleted file mode 100644 index 2ab44aa..0000000 --- a/vendor/golang.org/x/sys/unix/mkerrors.sh +++ /dev/null @@ -1,778 +0,0 @@ -#!/usr/bin/env bash -# 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. - -# Generate Go code listing errors and other #defined constant -# values (ENAMETOOLONG etc.), by asking the preprocessor -# about the definitions. - -unset LANG -export LC_ALL=C -export LC_CTYPE=C - -if test -z "$GOARCH" -o -z "$GOOS"; then - echo 1>&2 "GOARCH or GOOS not defined in environment" - exit 1 -fi - -# Check that we are using the new build system if we should -if [[ "$GOOS" = "linux" ]] && [[ "$GOLANG_SYS_BUILD" != "docker" ]]; then - echo 1>&2 "In the Docker based build system, mkerrors should not be called directly." - echo 1>&2 "See README.md" - exit 1 -fi - -if [[ "$GOOS" = "aix" ]]; then - CC=${CC:-gcc} -else - CC=${CC:-cc} -fi - -if [[ "$GOOS" = "solaris" ]]; then - # Assumes GNU versions of utilities in PATH. - export PATH=/usr/gnu/bin:$PATH -fi - -uname=$(uname) - -includes_AIX=' -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define AF_LOCAL AF_UNIX -' - -includes_Darwin=' -#define _DARWIN_C_SOURCE -#define KERNEL 1 -#define _DARWIN_USE_64_BIT_INODE -#define __APPLE_USE_RFC_3542 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// for backwards compatibility because moved TIOCREMOTE to Kernel.framework after MacOSX12.0.sdk. -#define TIOCREMOTE 0x80047469 -' - -includes_DragonFly=' -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -' - -includes_FreeBSD=' -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if __FreeBSD__ >= 10 -#define IFT_CARP 0xf8 // IFT_CARP is deprecated in FreeBSD 10 -#undef SIOCAIFADDR -#define SIOCAIFADDR _IOW(105, 26, struct oifaliasreq) // ifaliasreq contains if_data -#undef SIOCSIFPHYADDR -#define SIOCSIFPHYADDR _IOW(105, 70, struct oifaliasreq) // ifaliasreq contains if_data -#endif -' - -includes_Linux=' -#define _LARGEFILE_SOURCE -#define _LARGEFILE64_SOURCE -#ifndef __LP64__ -#define _FILE_OFFSET_BITS 64 -#endif -#define _GNU_SOURCE - -// is broken on powerpc64, as it fails to include definitions of -// these structures. We just include them copied from . -#if defined(__powerpc__) -struct sgttyb { - char sg_ispeed; - char sg_ospeed; - char sg_erase; - char sg_kill; - short sg_flags; -}; - -struct tchars { - char t_intrc; - char t_quitc; - char t_startc; - char t_stopc; - char t_eofc; - char t_brkc; -}; - -struct ltchars { - char t_suspc; - char t_dsuspc; - char t_rprntc; - char t_flushc; - char t_werasc; - char t_lnextc; -}; -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#if defined(__sparc__) -// On sparc{,64}, the kernel defines struct termios2 itself which clashes with the -// definition in glibc. As only the error constants are needed here, include the -// generic termibits.h (which is included by termbits.h on sparc). -#include -#else -#include -#endif - -#ifndef MSG_FASTOPEN -#define MSG_FASTOPEN 0x20000000 -#endif - -#ifndef PTRACE_GETREGS -#define PTRACE_GETREGS 0xc -#endif - -#ifndef PTRACE_SETREGS -#define PTRACE_SETREGS 0xd -#endif - -#ifndef SOL_NETLINK -#define SOL_NETLINK 270 -#endif - -#ifndef SOL_SMC -#define SOL_SMC 286 -#endif - -#ifdef SOL_BLUETOOTH -// SPARC includes this in /usr/include/sparc64-linux-gnu/bits/socket.h -// but it is already in bluetooth_linux.go -#undef SOL_BLUETOOTH -#endif - -// Certain constants are missing from the fs/crypto UAPI -#define FS_KEY_DESC_PREFIX "fscrypt:" -#define FS_KEY_DESC_PREFIX_SIZE 8 -#define FS_MAX_KEY_SIZE 64 - -// The code generator produces -0x1 for (~0), but an unsigned value is necessary -// for the tipc_subscr timeout __u32 field. -#undef TIPC_WAIT_FOREVER -#define TIPC_WAIT_FOREVER 0xffffffff - -// Copied from linux/l2tp.h -// Including linux/l2tp.h here causes conflicts between linux/in.h -// and netinet/in.h included via net/route.h above. -#define IPPROTO_L2TP 115 - -// Copied from linux/hid.h. -// Keep in sync with the size of the referenced fields. -#define _HIDIOCGRAWNAME_LEN 128 // sizeof_field(struct hid_device, name) -#define _HIDIOCGRAWPHYS_LEN 64 // sizeof_field(struct hid_device, phys) -#define _HIDIOCGRAWUNIQ_LEN 64 // sizeof_field(struct hid_device, uniq) - -#define _HIDIOCGRAWNAME HIDIOCGRAWNAME(_HIDIOCGRAWNAME_LEN) -#define _HIDIOCGRAWPHYS HIDIOCGRAWPHYS(_HIDIOCGRAWPHYS_LEN) -#define _HIDIOCGRAWUNIQ HIDIOCGRAWUNIQ(_HIDIOCGRAWUNIQ_LEN) - -' - -includes_NetBSD=' -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// Needed since refers to it... -#define schedppq 1 -' - -includes_OpenBSD=' -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// We keep some constants not supported in OpenBSD 5.5 and beyond for -// the promise of compatibility. -#define EMUL_ENABLED 0x1 -#define EMUL_NATIVE 0x2 -#define IPV6_FAITH 0x1d -#define IPV6_OPTIONS 0x1 -#define IPV6_RTHDR_STRICT 0x1 -#define IPV6_SOCKOPT_RESERVED1 0x3 -#define SIOCGIFGENERIC 0xc020693a -#define SIOCSIFGENERIC 0x80206939 -#define WALTSIG 0x4 -' - -includes_SunOS=' -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -' - - -includes=' -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -' -ccflags="$@" - -# Write go tool cgo -godefs input. -( - echo package unix - echo - echo '/*' - indirect="includes_$(uname)" - echo "${!indirect} $includes" - echo '*/' - echo 'import "C"' - echo 'import "syscall"' - echo - echo 'const (' - - # The gcc command line prints all the #defines - # it encounters while processing the input - echo "${!indirect} $includes" | $CC -x c - -E -dM $ccflags | - awk ' - $1 != "#define" || $2 ~ /\(/ || $3 == "" {next} - - $2 ~ /^E([ABCD]X|[BIS]P|[SD]I|S|FL)$/ {next} # 386 registers - $2 ~ /^(SIGEV_|SIGSTKSZ|SIGRT(MIN|MAX))/ {next} - $2 ~ /^(SCM_SRCRT)$/ {next} - $2 ~ /^(MAP_FAILED)$/ {next} - $2 ~ /^ELF_.*$/ {next}# contains ELF_ARCH, etc. - - $2 ~ /^EXTATTR_NAMESPACE_NAMES/ || - $2 ~ /^EXTATTR_NAMESPACE_[A-Z]+_STRING/ {next} - - $2 !~ /^ECCAPBITS/ && - $2 !~ /^ETH_/ && - $2 !~ /^EPROC_/ && - $2 !~ /^EQUIV_/ && - $2 !~ /^EXPR_/ && - $2 !~ /^EVIOC/ && - $2 ~ /^E[A-Z0-9_]+$/ || - $2 ~ /^B[0-9_]+$/ || - $2 ~ /^(OLD|NEW)DEV$/ || - $2 == "BOTHER" || - $2 ~ /^CI?BAUD(EX)?$/ || - $2 == "IBSHIFT" || - $2 ~ /^V[A-Z0-9]+$/ || - $2 ~ /^CS[A-Z0-9]/ || - $2 ~ /^I(SIG|CANON|CRNL|UCLC|EXTEN|MAXBEL|STRIP|UTF8)$/ || - $2 ~ /^IGN/ || - $2 ~ /^IX(ON|ANY|OFF)$/ || - $2 ~ /^IN(LCR|PCK)$/ || - $2 !~ "X86_CR3_PCID_NOFLUSH" && - $2 ~ /(^FLU?SH)|(FLU?SH$)/ || - $2 ~ /^C(LOCAL|READ|MSPAR|RTSCTS)$/ || - $2 == "BRKINT" || - $2 == "HUPCL" || - $2 == "PENDIN" || - $2 == "TOSTOP" || - $2 == "XCASE" || - $2 == "ALTWERASE" || - $2 == "NOKERNINFO" || - $2 == "NFDBITS" || - $2 ~ /^PAR/ || - $2 ~ /^SIG[^_]/ || - $2 ~ /^O[CNPFPL][A-Z]+[^_][A-Z]+$/ || - $2 ~ /^(NL|CR|TAB|BS|VT|FF)DLY$/ || - $2 ~ /^(NL|CR|TAB|BS|VT|FF)[0-9]$/ || - $2 ~ /^O?XTABS$/ || - $2 ~ /^TC[IO](ON|OFF)$/ || - $2 ~ /^IN_/ || - $2 ~ /^KCM/ || - $2 ~ /^LANDLOCK_/ || - $2 ~ /^LOCK_(SH|EX|NB|UN)$/ || - $2 ~ /^LO_(KEY|NAME)_SIZE$/ || - $2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ || - $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT)_/ || - $2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ || - $2 ~ /^NFC_.*_(MAX)?SIZE$/ || - $2 ~ /^RAW_PAYLOAD_/ || - $2 ~ /^TP_STATUS_/ || - $2 ~ /^FALLOC_/ || - $2 ~ /^ICMPV?6?_(FILTER|SEC)/ || - $2 == "SOMAXCONN" || - $2 == "NAME_MAX" || - $2 == "IFNAMSIZ" || - $2 ~ /^CTL_(HW|KERN|MAXNAME|NET|QUERY)$/ || - $2 ~ /^KERN_(HOSTNAME|OS(RELEASE|TYPE)|VERSION)$/ || - $2 ~ /^HW_MACHINE$/ || - $2 ~ /^SYSCTL_VERS/ || - $2 !~ "MNT_BITS" && - $2 ~ /^(MS|MNT|MOUNT|UMOUNT)_/ || - $2 ~ /^NS_GET_/ || - $2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ || - $2 ~ /^(O|F|[ES]?FD|NAME|S|PTRACE|PT|PIOD|TFD)_/ || - $2 ~ /^KEXEC_/ || - $2 ~ /^LINUX_REBOOT_CMD_/ || - $2 ~ /^LINUX_REBOOT_MAGIC[12]$/ || - $2 ~ /^MODULE_INIT_/ || - $2 !~ "NLA_TYPE_MASK" && - $2 !~ /^RTC_VL_(ACCURACY|BACKUP|DATA)/ && - $2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTC|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P|NETNSA)_/ || - $2 ~ /^FIORDCHK$/ || - $2 ~ /^SIOC/ || - $2 ~ /^TIOC/ || - $2 ~ /^TCGET/ || - $2 ~ /^TCSET/ || - $2 ~ /^TC(FLSH|SBRKP?|XONC)$/ || - $2 !~ "RTF_BITS" && - $2 ~ /^(IFF|IFT|NET_RT|RTM(GRP)?|RTF|RTV|RTA|RTAX)_/ || - $2 ~ /^BIOC/ || - $2 ~ /^DIOC/ || - $2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ || - $2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|LOCKS|MEMLOCK|MSGQUEUE|NICE|NOFILE|NPROC|RSS|RTPRIO|RTTIME|SIGPENDING|STACK)|RLIM_INFINITY/ || - $2 ~ /^PRIO_(PROCESS|PGRP|USER)/ || - $2 ~ /^CLONE_[A-Z_]+/ || - $2 !~ /^(BPF_TIMEVAL|BPF_FIB_LOOKUP_[A-Z]+)$/ && - $2 ~ /^(BPF|DLT)_/ || - $2 ~ /^AUDIT_/ || - $2 ~ /^(CLOCK|TIMER)_/ || - $2 ~ /^CAN_/ || - $2 ~ /^CAP_/ || - $2 ~ /^CP_/ || - $2 ~ /^CPUSTATES$/ || - $2 ~ /^CTLIOCGINFO$/ || - $2 ~ /^ALG_/ || - $2 ~ /^FI(CLONE|DEDUPERANGE)/ || - $2 ~ /^FS_(POLICY_FLAGS|KEY_DESC|ENCRYPTION_MODE|[A-Z0-9_]+_KEY_SIZE)/ || - $2 ~ /^FS_IOC_.*(ENCRYPTION|VERITY|[GS]ETFLAGS)/ || - $2 ~ /^FS_VERITY_/ || - $2 ~ /^FSCRYPT_/ || - $2 ~ /^DM_/ || - $2 ~ /^GRND_/ || - $2 ~ /^RND/ || - $2 ~ /^KEY_(SPEC|REQKEY_DEFL)_/ || - $2 ~ /^KEYCTL_/ || - $2 ~ /^PERF_/ || - $2 ~ /^SECCOMP_MODE_/ || - $2 ~ /^SEEK_/ || - $2 ~ /^SPLICE_/ || - $2 ~ /^SYNC_FILE_RANGE_/ || - $2 !~ /IOC_MAGIC/ && - $2 ~ /^[A-Z][A-Z0-9_]+_MAGIC2?$/ || - $2 ~ /^(VM|VMADDR)_/ || - $2 ~ /^IOCTL_VM_SOCKETS_/ || - $2 ~ /^(TASKSTATS|TS)_/ || - $2 ~ /^CGROUPSTATS_/ || - $2 ~ /^GENL_/ || - $2 ~ /^STATX_/ || - $2 ~ /^RENAME/ || - $2 ~ /^UBI_IOC[A-Z]/ || - $2 ~ /^UTIME_/ || - $2 ~ /^XATTR_(CREATE|REPLACE|NO(DEFAULT|FOLLOW|SECURITY)|SHOWCOMPRESSION)/ || - $2 ~ /^ATTR_(BIT_MAP_COUNT|(CMN|VOL|FILE)_)/ || - $2 ~ /^FSOPT_/ || - $2 ~ /^WDIO[CFS]_/ || - $2 ~ /^NFN/ || - $2 ~ /^XDP_/ || - $2 ~ /^RWF_/ || - $2 ~ /^(HDIO|WIN|SMART)_/ || - $2 ~ /^CRYPTO_/ || - $2 ~ /^TIPC_/ || - $2 !~ "DEVLINK_RELOAD_LIMITS_VALID_MASK" && - $2 ~ /^DEVLINK_/ || - $2 ~ /^ETHTOOL_/ || - $2 ~ /^LWTUNNEL_IP/ || - $2 ~ /^ITIMER_/ || - $2 !~ "WMESGLEN" && - $2 ~ /^W[A-Z0-9]+$/ || - $2 ~ /^P_/ || - $2 ~/^PPPIOC/ || - $2 ~ /^FAN_|FANOTIFY_/ || - $2 == "HID_MAX_DESCRIPTOR_SIZE" || - $2 ~ /^_?HIDIOC/ || - $2 ~ /^BUS_(USB|HIL|BLUETOOTH|VIRTUAL)$/ || - $2 ~ /^MTD/ || - $2 ~ /^OTP/ || - $2 ~ /^MEM/ || - $2 ~ /^WG/ || - $2 ~ /^FIB_RULE_/ || - $2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {printf("\t%s = C.%s\n", $2, $2)} - $2 ~ /^__WCOREFLAG$/ {next} - $2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)} - - {next} - ' | sort - - echo ')' -) >_const.go - -# Pull out the error names for later. -errors=$( - echo '#include ' | $CC -x c - -E -dM $ccflags | - awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print $2 }' | - sort -) - -# Pull out the signal names for later. -signals=$( - echo '#include ' | $CC -x c - -E -dM $ccflags | - awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' | - egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' | - sort -) - -# Again, writing regexps to a file. -echo '#include ' | $CC -x c - -E -dM $ccflags | - awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print "^\t" $2 "[ \t]*=" }' | - sort >_error.grep -echo '#include ' | $CC -x c - -E -dM $ccflags | - awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print "^\t" $2 "[ \t]*=" }' | - egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' | - sort >_signal.grep - -echo '// mkerrors.sh' "$@" -echo '// Code generated by the command above; see README.md. DO NOT EDIT.' -echo -echo "//go:build ${GOARCH} && ${GOOS}" -echo "// +build ${GOARCH},${GOOS}" -echo -go tool cgo -godefs -- "$@" _const.go >_error.out -cat _error.out | grep -vf _error.grep | grep -vf _signal.grep -echo -echo '// Errors' -echo 'const (' -cat _error.out | grep -f _error.grep | sed 's/=\(.*\)/= syscall.Errno(\1)/' -echo ')' - -echo -echo '// Signals' -echo 'const (' -cat _error.out | grep -f _signal.grep | sed 's/=\(.*\)/= syscall.Signal(\1)/' -echo ')' - -# Run C program to print error and syscall strings. -( - echo -E " -#include -#include -#include -#include -#include -#include - -#define nelem(x) (sizeof(x)/sizeof((x)[0])) - -enum { A = 'A', Z = 'Z', a = 'a', z = 'z' }; // avoid need for single quotes below - -struct tuple { - int num; - const char *name; -}; - -struct tuple errors[] = { -" - for i in $errors - do - echo -E ' {'$i', "'$i'" },' - done - - echo -E " -}; - -struct tuple signals[] = { -" - for i in $signals - do - echo -E ' {'$i', "'$i'" },' - done - - # Use -E because on some systems bash builtin interprets \n itself. - echo -E ' -}; - -static int -tuplecmp(const void *a, const void *b) -{ - return ((struct tuple *)a)->num - ((struct tuple *)b)->num; -} - -int -main(void) -{ - int i, e; - char buf[1024], *p; - - printf("\n\n// Error table\n"); - printf("var errorList = [...]struct {\n"); - printf("\tnum syscall.Errno\n"); - printf("\tname string\n"); - printf("\tdesc string\n"); - printf("} {\n"); - qsort(errors, nelem(errors), sizeof errors[0], tuplecmp); - for(i=0; i 0 && errors[i-1].num == e) - continue; - strcpy(buf, strerror(e)); - // lowercase first letter: Bad -> bad, but STREAM -> STREAM. - if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z) - buf[0] += a - A; - printf("\t{ %d, \"%s\", \"%s\" },\n", e, errors[i].name, buf); - } - printf("}\n\n"); - - printf("\n\n// Signal table\n"); - printf("var signalList = [...]struct {\n"); - printf("\tnum syscall.Signal\n"); - printf("\tname string\n"); - printf("\tdesc string\n"); - printf("} {\n"); - qsort(signals, nelem(signals), sizeof signals[0], tuplecmp); - for(i=0; i 0 && signals[i-1].num == e) - continue; - strcpy(buf, strsignal(e)); - // lowercase first letter: Bad -> bad, but STREAM -> STREAM. - if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z) - buf[0] += a - A; - // cut trailing : number. - p = strrchr(buf, ":"[0]); - if(p) - *p = '\0'; - printf("\t{ %d, \"%s\", \"%s\" },\n", e, signals[i].name, buf); - } - printf("}\n\n"); - - return 0; -} - -' -) >_errors.c - -$CC $ccflags -o _errors _errors.c && $GORUN ./_errors && rm -f _errors.c _errors _const.go _error.grep _signal.grep _error.out diff --git a/vendor/golang.org/x/sys/unix/pagesize_unix.go b/vendor/golang.org/x/sys/unix/pagesize_unix.go deleted file mode 100644 index 53f1b4c..0000000 --- a/vendor/golang.org/x/sys/unix/pagesize_unix.go +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris -// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris - -// For Unix, get the pagesize from the runtime. - -package unix - -import "syscall" - -func Getpagesize() int { - return syscall.Getpagesize() -} diff --git a/vendor/golang.org/x/sys/unix/pledge_openbsd.go b/vendor/golang.org/x/sys/unix/pledge_openbsd.go deleted file mode 100644 index eb48294..0000000 --- a/vendor/golang.org/x/sys/unix/pledge_openbsd.go +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package unix - -import ( - "errors" - "fmt" - "strconv" - "syscall" - "unsafe" -) - -// Pledge implements the pledge syscall. -// -// The pledge syscall does not accept execpromises on OpenBSD releases -// before 6.3. -// -// execpromises must be empty when Pledge is called on OpenBSD -// releases predating 6.3, otherwise an error will be returned. -// -// For more information see pledge(2). -func Pledge(promises, execpromises string) error { - maj, min, err := majmin() - if err != nil { - return err - } - - err = pledgeAvailable(maj, min, execpromises) - if err != nil { - return err - } - - pptr, err := syscall.BytePtrFromString(promises) - if err != nil { - return err - } - - // This variable will hold either a nil unsafe.Pointer or - // an unsafe.Pointer to a string (execpromises). - var expr unsafe.Pointer - - // If we're running on OpenBSD > 6.2, pass execpromises to the syscall. - if maj > 6 || (maj == 6 && min > 2) { - exptr, err := syscall.BytePtrFromString(execpromises) - if err != nil { - return err - } - expr = unsafe.Pointer(exptr) - } - - _, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(unsafe.Pointer(pptr)), uintptr(expr), 0) - if e != 0 { - return e - } - - return nil -} - -// PledgePromises implements the pledge syscall. -// -// This changes the promises and leaves the execpromises untouched. -// -// For more information see pledge(2). -func PledgePromises(promises string) error { - maj, min, err := majmin() - if err != nil { - return err - } - - err = pledgeAvailable(maj, min, "") - if err != nil { - return err - } - - // This variable holds the execpromises and is always nil. - var expr unsafe.Pointer - - pptr, err := syscall.BytePtrFromString(promises) - if err != nil { - return err - } - - _, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(unsafe.Pointer(pptr)), uintptr(expr), 0) - if e != 0 { - return e - } - - return nil -} - -// PledgeExecpromises implements the pledge syscall. -// -// This changes the execpromises and leaves the promises untouched. -// -// For more information see pledge(2). -func PledgeExecpromises(execpromises string) error { - maj, min, err := majmin() - if err != nil { - return err - } - - err = pledgeAvailable(maj, min, execpromises) - if err != nil { - return err - } - - // This variable holds the promises and is always nil. - var pptr unsafe.Pointer - - exptr, err := syscall.BytePtrFromString(execpromises) - if err != nil { - return err - } - - _, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(pptr), uintptr(unsafe.Pointer(exptr)), 0) - if e != 0 { - return e - } - - return nil -} - -// majmin returns major and minor version number for an OpenBSD system. -func majmin() (major int, minor int, err error) { - var v Utsname - err = Uname(&v) - if err != nil { - return - } - - major, err = strconv.Atoi(string(v.Release[0])) - if err != nil { - err = errors.New("cannot parse major version number returned by uname") - return - } - - minor, err = strconv.Atoi(string(v.Release[2])) - if err != nil { - err = errors.New("cannot parse minor version number returned by uname") - return - } - - return -} - -// pledgeAvailable checks for availability of the pledge(2) syscall -// based on the running OpenBSD version. -func pledgeAvailable(maj, min int, execpromises string) error { - // If OpenBSD <= 5.9, pledge is not available. - if (maj == 5 && min != 9) || maj < 5 { - return fmt.Errorf("pledge syscall is not available on OpenBSD %d.%d", maj, min) - } - - // If OpenBSD <= 6.2 and execpromises is not empty, - // return an error - execpromises is not available before 6.3 - if (maj < 6 || (maj == 6 && min <= 2)) && execpromises != "" { - return fmt.Errorf("cannot use execpromises on OpenBSD %d.%d", maj, min) - } - - return nil -} diff --git a/vendor/golang.org/x/sys/unix/ptrace_darwin.go b/vendor/golang.org/x/sys/unix/ptrace_darwin.go deleted file mode 100644 index 463c3ef..0000000 --- a/vendor/golang.org/x/sys/unix/ptrace_darwin.go +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build darwin && !ios -// +build darwin,!ios - -package unix - -func ptrace(request int, pid int, addr uintptr, data uintptr) error { - return ptrace1(request, pid, addr, data) -} diff --git a/vendor/golang.org/x/sys/unix/ptrace_ios.go b/vendor/golang.org/x/sys/unix/ptrace_ios.go deleted file mode 100644 index ed0509a..0000000 --- a/vendor/golang.org/x/sys/unix/ptrace_ios.go +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build ios -// +build ios - -package unix - -func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { - return ENOTSUP -} diff --git a/vendor/golang.org/x/sys/unix/race.go b/vendor/golang.org/x/sys/unix/race.go deleted file mode 100644 index 6f6c5fe..0000000 --- a/vendor/golang.org/x/sys/unix/race.go +++ /dev/null @@ -1,31 +0,0 @@ -// 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 (darwin && race) || (linux && race) || (freebsd && race) -// +build darwin,race linux,race freebsd,race - -package unix - -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/unix/race0.go b/vendor/golang.org/x/sys/unix/race0.go deleted file mode 100644 index 706e132..0000000 --- a/vendor/golang.org/x/sys/unix/race0.go +++ /dev/null @@ -1,26 +0,0 @@ -// 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 && !race) || (linux && !race) || (freebsd && !race) || netbsd || openbsd || solaris || dragonfly || zos -// +build aix darwin,!race linux,!race freebsd,!race netbsd openbsd solaris dragonfly zos - -package unix - -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/unix/readdirent_getdents.go b/vendor/golang.org/x/sys/unix/readdirent_getdents.go deleted file mode 100644 index 4d62575..0000000 --- a/vendor/golang.org/x/sys/unix/readdirent_getdents.go +++ /dev/null @@ -1,13 +0,0 @@ -// 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 || dragonfly || freebsd || linux || netbsd || openbsd -// +build aix dragonfly freebsd linux netbsd openbsd - -package unix - -// ReadDirent reads directory entries from fd and writes them into buf. -func ReadDirent(fd int, buf []byte) (n int, err error) { - return Getdents(fd, buf) -} diff --git a/vendor/golang.org/x/sys/unix/readdirent_getdirentries.go b/vendor/golang.org/x/sys/unix/readdirent_getdirentries.go deleted file mode 100644 index 2a4ba47..0000000 --- a/vendor/golang.org/x/sys/unix/readdirent_getdirentries.go +++ /dev/null @@ -1,20 +0,0 @@ -// 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 darwin -// +build darwin - -package unix - -import "unsafe" - -// ReadDirent reads directory entries from fd and writes them into buf. -func ReadDirent(fd int, buf []byte) (n int, err error) { - // Final argument is (basep *uintptr) and the syscall doesn't take nil. - // 64 bits should be enough. (32 bits isn't even on 386). Since the - // actual system call is getdirentries64, 64 is a good guess. - // TODO(rsc): Can we use a single global basep for all calls? - var base = (*uintptr)(unsafe.Pointer(new(uint64))) - return Getdirentries(fd, buf, base) -} diff --git a/vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go b/vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go deleted file mode 100644 index 5144dee..0000000 --- a/vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go +++ /dev/null @@ -1,16 +0,0 @@ -// 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 unix - -// Round the length of a raw sockaddr up to align it properly. -func cmsgAlignOf(salen int) int { - salign := SizeofPtr - if SizeofPtr == 8 && !supportsABI(_dragonflyABIChangeVersion) { - // 64-bit Dragonfly before the September 2019 ABI changes still requires - // 32-bit aligned access to network subsystem. - salign = 4 - } - return (salen + salign - 1) & ^(salign - 1) -} diff --git a/vendor/golang.org/x/sys/unix/sockcmsg_linux.go b/vendor/golang.org/x/sys/unix/sockcmsg_linux.go deleted file mode 100644 index 5f63147..0000000 --- a/vendor/golang.org/x/sys/unix/sockcmsg_linux.go +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Socket control messages - -package unix - -import "unsafe" - -// UnixCredentials encodes credentials into a socket control message -// for sending to another process. This can be used for -// authentication. -func UnixCredentials(ucred *Ucred) []byte { - b := make([]byte, CmsgSpace(SizeofUcred)) - h := (*Cmsghdr)(unsafe.Pointer(&b[0])) - h.Level = SOL_SOCKET - h.Type = SCM_CREDENTIALS - h.SetLen(CmsgLen(SizeofUcred)) - *(*Ucred)(h.data(0)) = *ucred - return b -} - -// ParseUnixCredentials decodes a socket control message that contains -// credentials in a Ucred structure. To receive such a message, the -// SO_PASSCRED option must be enabled on the socket. -func ParseUnixCredentials(m *SocketControlMessage) (*Ucred, error) { - if m.Header.Level != SOL_SOCKET { - return nil, EINVAL - } - if m.Header.Type != SCM_CREDENTIALS { - return nil, EINVAL - } - ucred := *(*Ucred)(unsafe.Pointer(&m.Data[0])) - return &ucred, nil -} - -// PktInfo4 encodes Inet4Pktinfo into a socket control message of type IP_PKTINFO. -func PktInfo4(info *Inet4Pktinfo) []byte { - b := make([]byte, CmsgSpace(SizeofInet4Pktinfo)) - h := (*Cmsghdr)(unsafe.Pointer(&b[0])) - h.Level = SOL_IP - h.Type = IP_PKTINFO - h.SetLen(CmsgLen(SizeofInet4Pktinfo)) - *(*Inet4Pktinfo)(h.data(0)) = *info - return b -} - -// PktInfo6 encodes Inet6Pktinfo into a socket control message of type IPV6_PKTINFO. -func PktInfo6(info *Inet6Pktinfo) []byte { - b := make([]byte, CmsgSpace(SizeofInet6Pktinfo)) - h := (*Cmsghdr)(unsafe.Pointer(&b[0])) - h.Level = SOL_IPV6 - h.Type = IPV6_PKTINFO - h.SetLen(CmsgLen(SizeofInet6Pktinfo)) - *(*Inet6Pktinfo)(h.data(0)) = *info - return b -} - -// ParseOrigDstAddr decodes a socket control message containing the original -// destination address. To receive such a message the IP_RECVORIGDSTADDR or -// IPV6_RECVORIGDSTADDR option must be enabled on the socket. -func ParseOrigDstAddr(m *SocketControlMessage) (Sockaddr, error) { - switch { - case m.Header.Level == SOL_IP && m.Header.Type == IP_ORIGDSTADDR: - pp := (*RawSockaddrInet4)(unsafe.Pointer(&m.Data[0])) - 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 m.Header.Level == SOL_IPV6 && m.Header.Type == IPV6_ORIGDSTADDR: - pp := (*RawSockaddrInet6)(unsafe.Pointer(&m.Data[0])) - 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 - - default: - return nil, EINVAL - } -} diff --git a/vendor/golang.org/x/sys/unix/sockcmsg_unix.go b/vendor/golang.org/x/sys/unix/sockcmsg_unix.go deleted file mode 100644 index 453a942..0000000 --- a/vendor/golang.org/x/sys/unix/sockcmsg_unix.go +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos -// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos - -// Socket control messages - -package unix - -import ( - "unsafe" -) - -// CmsgLen returns the value to store in the Len field of the Cmsghdr -// structure, taking into account any necessary alignment. -func CmsgLen(datalen int) int { - return cmsgAlignOf(SizeofCmsghdr) + datalen -} - -// CmsgSpace returns the number of bytes an ancillary element with -// payload of the passed data length occupies. -func CmsgSpace(datalen int) int { - return cmsgAlignOf(SizeofCmsghdr) + cmsgAlignOf(datalen) -} - -func (h *Cmsghdr) data(offset uintptr) unsafe.Pointer { - return unsafe.Pointer(uintptr(unsafe.Pointer(h)) + uintptr(cmsgAlignOf(SizeofCmsghdr)) + offset) -} - -// SocketControlMessage represents a socket control message. -type SocketControlMessage struct { - Header Cmsghdr - Data []byte -} - -// ParseSocketControlMessage parses b as an array of socket control -// messages. -func ParseSocketControlMessage(b []byte) ([]SocketControlMessage, error) { - var msgs []SocketControlMessage - i := 0 - for i+CmsgLen(0) <= len(b) { - h, dbuf, err := socketControlMessageHeaderAndData(b[i:]) - if err != nil { - return nil, err - } - m := SocketControlMessage{Header: *h, Data: dbuf} - msgs = append(msgs, m) - i += cmsgAlignOf(int(h.Len)) - } - return msgs, nil -} - -func socketControlMessageHeaderAndData(b []byte) (*Cmsghdr, []byte, error) { - h := (*Cmsghdr)(unsafe.Pointer(&b[0])) - if h.Len < SizeofCmsghdr || uint64(h.Len) > uint64(len(b)) { - return nil, nil, EINVAL - } - return h, b[cmsgAlignOf(SizeofCmsghdr):h.Len], nil -} - -// UnixRights encodes a set of open file descriptors into a socket -// control message for sending to another process. -func UnixRights(fds ...int) []byte { - datalen := len(fds) * 4 - b := make([]byte, CmsgSpace(datalen)) - h := (*Cmsghdr)(unsafe.Pointer(&b[0])) - h.Level = SOL_SOCKET - h.Type = SCM_RIGHTS - h.SetLen(CmsgLen(datalen)) - for i, fd := range fds { - *(*int32)(h.data(4 * uintptr(i))) = int32(fd) - } - return b -} - -// ParseUnixRights decodes a socket control message that contains an -// integer array of open file descriptors from another process. -func ParseUnixRights(m *SocketControlMessage) ([]int, error) { - if m.Header.Level != SOL_SOCKET { - return nil, EINVAL - } - if m.Header.Type != SCM_RIGHTS { - return nil, EINVAL - } - fds := make([]int, len(m.Data)>>2) - for i, j := 0, 0; i < len(m.Data); i += 4 { - fds[j] = int(*(*int32)(unsafe.Pointer(&m.Data[i]))) - j++ - } - return fds, nil -} diff --git a/vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go b/vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go deleted file mode 100644 index 0840fe4..0000000 --- a/vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go +++ /dev/null @@ -1,47 +0,0 @@ -// 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 || freebsd || linux || netbsd || openbsd || solaris || zos -// +build aix darwin freebsd linux netbsd openbsd solaris zos - -package unix - -import ( - "runtime" -) - -// Round the length of a raw sockaddr up to align it properly. -func cmsgAlignOf(salen int) int { - salign := SizeofPtr - - // dragonfly needs to check ABI version at runtime, see cmsgAlignOf in - // sockcmsg_dragonfly.go - switch runtime.GOOS { - case "aix": - // There is no alignment on AIX. - salign = 1 - case "darwin", "ios", "illumos", "solaris": - // NOTE: It seems like 64-bit Darwin, Illumos and Solaris - // kernels still require 32-bit aligned access to network - // subsystem. - if SizeofPtr == 8 { - salign = 4 - } - case "netbsd", "openbsd": - // NetBSD and OpenBSD armv7 require 64-bit alignment. - if runtime.GOARCH == "arm" { - salign = 8 - } - // NetBSD aarch64 requires 128-bit alignment. - if runtime.GOOS == "netbsd" && runtime.GOARCH == "arm64" { - salign = 16 - } - case "zos": - // z/OS socket macros use [32-bit] sizeof(int) alignment, - // not pointer width. - salign = SizeofInt - } - - return (salen + salign - 1) & ^(salign - 1) -} diff --git a/vendor/golang.org/x/sys/unix/syscall.go b/vendor/golang.org/x/sys/unix/syscall.go deleted file mode 100644 index 63e8c83..0000000 --- a/vendor/golang.org/x/sys/unix/syscall.go +++ /dev/null @@ -1,87 +0,0 @@ -// 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 aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos -// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos - -// Package unix contains an interface to the low-level operating system -// primitives. OS details vary depending on the underlying system, and -// by default, godoc will display OS-specific documentation for the current -// system. If you want godoc to display OS 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 unix // import "golang.org/x/sys/unix" - -import ( - "bytes" - "strings" - "unsafe" -) - -// ByteSliceFromString returns a NUL-terminated slice of bytes -// containing the text of s. If s contains a NUL byte at any -// location, it returns (nil, EINVAL). -func ByteSliceFromString(s string) ([]byte, error) { - if strings.IndexByte(s, 0) != -1 { - return nil, 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, 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. -var _zero uintptr diff --git a/vendor/golang.org/x/sys/unix/syscall_aix.go b/vendor/golang.org/x/sys/unix/syscall_aix.go deleted file mode 100644 index 2db1b51..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_aix.go +++ /dev/null @@ -1,600 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix -// +build aix - -// Aix system calls. -// This file is compiled as ordinary Go code, -// but it is also input to mksyscall, -// which parses the //sys lines and generates system call stubs. -// Note that sometimes we use a lowercase //sys name and -// wrap it in our own nicer implementation. - -package unix - -import "unsafe" - -/* - * Wrapped - */ - -func Access(path string, mode uint32) (err error) { - return Faccessat(AT_FDCWD, path, mode, 0) -} - -func Chmod(path string, mode uint32) (err error) { - return Fchmodat(AT_FDCWD, path, mode, 0) -} - -func Chown(path string, uid int, gid int) (err error) { - return Fchownat(AT_FDCWD, path, uid, gid, 0) -} - -func Creat(path string, mode uint32) (fd int, err error) { - return Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode) -} - -//sys utimes(path string, times *[2]Timeval) (err error) - -func Utimes(path string, tv []Timeval) error { - if len(tv) != 2 { - return EINVAL - } - return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) -} - -//sys utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) - -func UtimesNano(path string, ts []Timespec) error { - if len(ts) != 2 { - return EINVAL - } - return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) -} - -func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { - if ts == nil { - return utimensat(dirfd, path, nil, flags) - } - if len(ts) != 2 { - return EINVAL - } - return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) -} - -func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { - if sa.Port < 0 || sa.Port > 0xFFFF { - return nil, 0, 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), SizeofSockaddrInet4, nil -} - -func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { - if sa.Port < 0 || sa.Port > 0xFFFF { - return nil, 0, 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), SizeofSockaddrInet6, nil -} - -func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { - name := sa.Name - n := len(name) - if n > len(sa.raw.Path) { - return nil, 0, EINVAL - } - if n == len(sa.raw.Path) && name[0] != '@' { - return nil, 0, EINVAL - } - sa.raw.Family = AF_UNIX - for i := 0; i < n; i++ { - sa.raw.Path[i] = uint8(name[i]) - } - // length is family (uint16), name, NUL. - sl := _Socklen(2) - if n > 0 { - sl += _Socklen(n) + 1 - } - if sa.raw.Path[0] == '@' { - sa.raw.Path[0] = 0 - // Don't count trailing NUL for abstract address. - sl-- - } - - return unsafe.Pointer(&sa.raw), sl, nil -} - -func Getsockname(fd int) (sa Sockaddr, err error) { - var rsa RawSockaddrAny - var len _Socklen = SizeofSockaddrAny - if err = getsockname(fd, &rsa, &len); err != nil { - return - } - return anyToSockaddr(fd, &rsa) -} - -//sys getcwd(buf []byte) (err error) - -const ImplementsGetwd = true - -func Getwd() (ret string, err error) { - for len := uint64(4096); ; len *= 2 { - b := make([]byte, len) - err := getcwd(b) - if err == nil { - i := 0 - for b[i] != 0 { - i++ - } - return string(b[0:i]), nil - } - if err != ERANGE { - return "", err - } - } -} - -func Getcwd(buf []byte) (n int, err error) { - err = getcwd(buf) - if err == nil { - i := 0 - for buf[i] != 0 { - i++ - } - n = i + 1 - } - return -} - -func Getgroups() (gids []int, err error) { - n, err := getgroups(0, nil) - if err != nil { - return nil, err - } - if n == 0 { - return nil, nil - } - - // Sanity check group count. Max is 16 on BSD. - if n < 0 || n > 1000 { - return nil, EINVAL - } - - a := make([]_Gid_t, n) - n, err = getgroups(n, &a[0]) - if err != nil { - return nil, err - } - gids = make([]int, n) - for i, v := range a[0:n] { - gids[i] = int(v) - } - return -} - -func Setgroups(gids []int) (err error) { - if len(gids) == 0 { - return setgroups(0, nil) - } - - a := make([]_Gid_t, len(gids)) - for i, v := range gids { - a[i] = _Gid_t(v) - } - return setgroups(len(a), &a[0]) -} - -/* - * Socket - */ - -//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) - -func Accept(fd int) (nfd int, sa Sockaddr, err error) { - var rsa RawSockaddrAny - var len _Socklen = SizeofSockaddrAny - nfd, err = accept(fd, &rsa, &len) - if nfd == -1 { - return - } - sa, err = anyToSockaddr(fd, &rsa) - if err != nil { - Close(nfd) - nfd = 0 - } - return -} - -func recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { - var msg Msghdr - msg.Name = (*byte)(unsafe.Pointer(rsa)) - msg.Namelen = uint32(SizeofSockaddrAny) - var dummy byte - if len(oob) > 0 { - // receive at least one normal byte - if emptyIovecs(iov) { - var iova [1]Iovec - iova[0].Base = &dummy - iova[0].SetLen(1) - iov = iova[:] - } - msg.Control = (*byte)(unsafe.Pointer(&oob[0])) - msg.SetControllen(len(oob)) - } - if len(iov) > 0 { - msg.Iov = &iov[0] - msg.SetIovlen(len(iov)) - } - if n, err = recvmsg(fd, &msg, flags); n == -1 { - return - } - oobn = int(msg.Controllen) - recvflags = int(msg.Flags) - return -} - -func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { - var msg Msghdr - msg.Name = (*byte)(unsafe.Pointer(ptr)) - msg.Namelen = uint32(salen) - var dummy byte - var empty bool - if len(oob) > 0 { - // send at least one normal byte - empty = emptyIovecs(iov) - if empty { - var iova [1]Iovec - iova[0].Base = &dummy - iova[0].SetLen(1) - iov = iova[:] - } - msg.Control = (*byte)(unsafe.Pointer(&oob[0])) - msg.SetControllen(len(oob)) - } - if len(iov) > 0 { - msg.Iov = &iov[0] - msg.SetIovlen(len(iov)) - } - if n, err = sendmsg(fd, &msg, flags); err != nil { - return 0, err - } - if len(oob) > 0 && empty { - n = 0 - } - return n, nil -} - -func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { - switch rsa.Addr.Family { - - case AF_UNIX: - pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) - sa := new(SockaddrUnix) - - // Some versions of AIX have a bug in getsockname (see IV78655). - // We can't rely on sa.Len being set correctly. - n := SizeofSockaddrUnix - 3 // subtract leading Family, Len, terminating NUL. - for i := 0; i < n; i++ { - if pp.Path[i] == 0 { - n = i - break - } - } - - bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] - sa.Name = string(bytes) - 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, EAFNOSUPPORT -} - -func Gettimeofday(tv *Timeval) (err error) { - err = gettimeofday(tv, nil) - return -} - -func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - if raceenabled { - raceReleaseMerge(unsafe.Pointer(&ioSync)) - } - return sendfile(outfd, infd, offset, count) -} - -// TODO -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - return -1, ENOSYS -} - -func direntIno(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) -} - -func direntReclen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) -} - -func direntNamlen(buf []byte) (uint64, bool) { - reclen, ok := direntReclen(buf) - if !ok { - return 0, false - } - return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true -} - -//sys getdirent(fd int, buf []byte) (n int, err error) - -func Getdents(fd int, buf []byte) (n int, err error) { - return getdirent(fd, buf) -} - -//sys wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error) - -func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { - var status _C_int - var r Pid_t - err = ERESTART - // AIX wait4 may return with ERESTART errno, while the processus is still - // active. - for err == ERESTART { - r, err = wait4(Pid_t(pid), &status, options, rusage) - } - wpid = int(r) - if wstatus != nil { - *wstatus = WaitStatus(status) - } - return -} - -/* - * Wait - */ - -type WaitStatus uint32 - -func (w WaitStatus) Stopped() bool { return w&0x40 != 0 } -func (w WaitStatus) StopSignal() Signal { - if !w.Stopped() { - return -1 - } - return Signal(w>>8) & 0xFF -} - -func (w WaitStatus) Exited() bool { return w&0xFF == 0 } -func (w WaitStatus) ExitStatus() int { - if !w.Exited() { - return -1 - } - return int((w >> 8) & 0xFF) -} - -func (w WaitStatus) Signaled() bool { return w&0x40 == 0 && w&0xFF != 0 } -func (w WaitStatus) Signal() Signal { - if !w.Signaled() { - return -1 - } - return Signal(w>>16) & 0xFF -} - -func (w WaitStatus) Continued() bool { return w&0x01000000 != 0 } - -func (w WaitStatus) CoreDump() bool { return w&0x80 == 0x80 } - -func (w WaitStatus) TrapCause() int { return -1 } - -//sys ioctl(fd int, req uint, arg uintptr) (err error) - -// fcntl must never be called with cmd=F_DUP2FD because it doesn't work on AIX -// There is no way to create a custom fcntl and to keep //sys fcntl easily, -// Therefore, the programmer must call dup2 instead of fcntl in this case. - -// FcntlInt performs a fcntl syscall on fd with the provided command and argument. -//sys FcntlInt(fd uintptr, cmd int, arg int) (r int,err error) = fcntl - -// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command. -//sys FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) = fcntl - -//sys fcntl(fd int, cmd int, arg int) (val int, err error) - -//sys fsyncRange(fd int, how int, start int64, length int64) (err error) = fsync_range - -func Fsync(fd int) error { - return fsyncRange(fd, O_SYNC, 0, 0) -} - -/* - * Direct access - */ - -//sys Acct(path string) (err error) -//sys Chdir(path string) (err error) -//sys Chroot(path string) (err error) -//sys Close(fd int) (err error) -//sys Dup(oldfd int) (fd int, err error) -//sys Exit(code int) -//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) -//sys Fchdir(fd int) (err error) -//sys Fchmod(fd int, mode uint32) (err error) -//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) -//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) -//sys Fdatasync(fd int) (err error) -// readdir_r -//sysnb Getpgid(pid int) (pgid int, err error) - -//sys Getpgrp() (pid int) - -//sysnb Getpid() (pid int) -//sysnb Getppid() (ppid int) -//sys Getpriority(which int, who int) (prio int, err error) -//sysnb Getrusage(who int, rusage *Rusage) (err error) -//sysnb Getsid(pid int) (sid int, err error) -//sysnb Kill(pid int, sig Signal) (err error) -//sys Klogctl(typ int, buf []byte) (n int, err error) = syslog -//sys Mkdir(dirfd int, path string, mode uint32) (err error) -//sys Mkdirat(dirfd int, path string, mode uint32) (err error) -//sys Mkfifo(path string, mode uint32) (err error) -//sys Mknod(path string, mode uint32, dev int) (err error) -//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) -//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) -//sys Open(path string, mode int, perm uint32) (fd int, err error) = open64 -//sys Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) -//sys read(fd int, p []byte) (n int, err error) -//sys Readlink(path string, buf []byte) (n int, err error) -//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) -//sys Setdomainname(p []byte) (err error) -//sys Sethostname(p []byte) (err error) -//sysnb Setpgid(pid int, pgid int) (err error) -//sysnb Setsid() (pid int, err error) -//sysnb Settimeofday(tv *Timeval) (err error) - -//sys Setuid(uid int) (err error) -//sys Setgid(uid int) (err error) - -//sys Setpriority(which int, who int, prio int) (err error) -//sys Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) -//sys Sync() -//sysnb Times(tms *Tms) (ticks uintptr, err error) -//sysnb Umask(mask int) (oldmask int) -//sysnb Uname(buf *Utsname) (err error) -//sys Unlink(path string) (err error) -//sys Unlinkat(dirfd int, path string, flags int) (err error) -//sys Ustat(dev int, ubuf *Ustat_t) (err error) -//sys write(fd int, p []byte) (n int, err error) -//sys readlen(fd int, p *byte, np int) (n int, err error) = read -//sys writelen(fd int, p *byte, np int) (n int, err error) = write - -//sys Dup2(oldfd int, newfd int) (err error) -//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = posix_fadvise64 -//sys Fchown(fd int, uid int, gid int) (err error) -//sys fstat(fd int, stat *Stat_t) (err error) -//sys fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = fstatat -//sys Fstatfs(fd int, buf *Statfs_t) (err error) -//sys Ftruncate(fd int, length int64) (err error) -//sysnb Getegid() (egid int) -//sysnb Geteuid() (euid int) -//sysnb Getgid() (gid int) -//sysnb Getuid() (uid int) -//sys Lchown(path string, uid int, gid int) (err error) -//sys Listen(s int, n int) (err error) -//sys lstat(path string, stat *Stat_t) (err error) -//sys Pause() (err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) = pread64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = pwrite64 -//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) -//sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) -//sysnb Setregid(rgid int, egid int) (err error) -//sysnb Setreuid(ruid int, euid int) (err error) -//sys Shutdown(fd int, how int) (err error) -//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) -//sys stat(path string, statptr *Stat_t) (err error) -//sys Statfs(path string, buf *Statfs_t) (err error) -//sys Truncate(path string, length int64) (err error) - -//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) -//sysnb setgroups(n int, list *_Gid_t) (err error) -//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) -//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) -//sysnb socket(domain int, typ int, proto int) (fd int, err error) -//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) -//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) -//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) - -// In order to use msghdr structure with Control, Controllen, nrecvmsg and nsendmsg must be used. -//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = nrecvmsg -//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = nsendmsg - -//sys munmap(addr uintptr, length uintptr) (err error) - -var mapper = &mmapper{ - active: make(map[*byte][]byte), - mmap: mmap, - munmap: munmap, -} - -func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { - return mapper.Mmap(fd, offset, length, prot, flags) -} - -func Munmap(b []byte) (err error) { - return mapper.Munmap(b) -} - -//sys Madvise(b []byte, advice int) (err error) -//sys Mprotect(b []byte, prot int) (err error) -//sys Mlock(b []byte) (err error) -//sys Mlockall(flags int) (err error) -//sys Msync(b []byte, flags int) (err error) -//sys Munlock(b []byte) (err error) -//sys Munlockall() (err error) - -//sysnb pipe(p *[2]_C_int) (err error) - -func Pipe(p []int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err = pipe(&pp) - if err == nil { - p[0] = int(pp[0]) - p[1] = int(pp[1]) - } - return -} - -//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) - -func Poll(fds []PollFd, timeout int) (n int, err error) { - if len(fds) == 0 { - return poll(nil, 0, timeout) - } - return poll(&fds[0], len(fds), timeout) -} - -//sys gettimeofday(tv *Timeval, tzp *Timezone) (err error) -//sysnb Time(t *Time_t) (tt Time_t, err error) -//sys Utime(path string, buf *Utimbuf) (err error) - -//sys Getsystemcfg(label int) (n uint64) - -//sys umount(target string) (err error) - -func Unmount(target string, flags int) (err error) { - if flags != 0 { - // AIX doesn't have any flags for umount. - return ENOSYS - } - return umount(target) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go b/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go deleted file mode 100644 index e92a0be..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix && ppc -// +build aix,ppc - -package unix - -//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) = getrlimit64 -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) = setrlimit64 -//sys Seek(fd int, offset int64, whence int) (off int64, err error) = lseek64 - -//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: int32(sec), Nsec: int32(nsec)} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: int32(sec), Usec: int32(usec)} -} - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint32(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = int32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} - -func Fstat(fd int, stat *Stat_t) error { - return fstat(fd, stat) -} - -func Fstatat(dirfd int, path string, stat *Stat_t, flags int) error { - return fstatat(dirfd, path, stat, flags) -} - -func Lstat(path string, stat *Stat_t) error { - return lstat(path, stat) -} - -func Stat(path string, statptr *Stat_t) error { - return stat(path, statptr) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go b/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go deleted file mode 100644 index 16eed17..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix && ppc64 -// +build aix,ppc64 - -package unix - -//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) -//sys Seek(fd int, offset int64, whence int) (off int64, err error) = lseek - -//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) = mmap64 - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: nsec} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: int64(sec), Usec: int32(usec)} -} - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint64(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = int32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} - -// In order to only have Timespec structure, type of Stat_t's fields -// Atim, Mtim and Ctim is changed from StTimespec to Timespec during -// ztypes generation. -// On ppc64, Timespec.Nsec is an int64 while StTimespec.Nsec is an -// int32, so the fields' value must be modified. -func fixStatTimFields(stat *Stat_t) { - stat.Atim.Nsec >>= 32 - stat.Mtim.Nsec >>= 32 - stat.Ctim.Nsec >>= 32 -} - -func Fstat(fd int, stat *Stat_t) error { - err := fstat(fd, stat) - if err != nil { - return err - } - fixStatTimFields(stat) - return nil -} - -func Fstatat(dirfd int, path string, stat *Stat_t, flags int) error { - err := fstatat(dirfd, path, stat, flags) - if err != nil { - return err - } - fixStatTimFields(stat) - return nil -} - -func Lstat(path string, stat *Stat_t) error { - err := lstat(path, stat) - if err != nil { - return err - } - fixStatTimFields(stat) - return nil -} - -func Stat(path string, statptr *Stat_t) error { - err := stat(path, statptr) - if err != nil { - return err - } - fixStatTimFields(statptr) - return nil -} diff --git a/vendor/golang.org/x/sys/unix/syscall_bsd.go b/vendor/golang.org/x/sys/unix/syscall_bsd.go deleted file mode 100644 index eda4267..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_bsd.go +++ /dev/null @@ -1,625 +0,0 @@ -// 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 darwin || dragonfly || freebsd || netbsd || openbsd -// +build darwin dragonfly freebsd netbsd openbsd - -// BSD system call wrappers shared by *BSD based systems -// including OS X (Darwin) and FreeBSD. Like the other -// syscall_*.go files it is compiled as Go code but also -// used as input to mksyscall which parses the //sys -// lines and generates system call stubs. - -package unix - -import ( - "runtime" - "syscall" - "unsafe" -) - -const ImplementsGetwd = true - -func Getwd() (string, error) { - var buf [PathMax]byte - _, err := Getcwd(buf[0:]) - if err != nil { - return "", err - } - n := clen(buf[:]) - if n < 1 { - return "", EINVAL - } - return string(buf[:n]), nil -} - -/* - * Wrapped - */ - -//sysnb getgroups(ngid int, gid *_Gid_t) (n int, err error) -//sysnb setgroups(ngid int, gid *_Gid_t) (err error) - -func Getgroups() (gids []int, err error) { - n, err := getgroups(0, nil) - if err != nil { - return nil, err - } - if n == 0 { - return nil, nil - } - - // Sanity check group count. Max is 16 on BSD. - if n < 0 || n > 1000 { - return nil, EINVAL - } - - a := make([]_Gid_t, n) - n, err = getgroups(n, &a[0]) - if err != nil { - return nil, err - } - gids = make([]int, n) - for i, v := range a[0:n] { - gids[i] = int(v) - } - return -} - -func Setgroups(gids []int) (err error) { - if len(gids) == 0 { - return setgroups(0, nil) - } - - a := make([]_Gid_t, len(gids)) - for i, v := range gids { - a[i] = _Gid_t(v) - } - return setgroups(len(a), &a[0]) -} - -// Wait status is 7 bits at bottom, either 0 (exited), -// 0x7F (stopped), or a signal number that caused an exit. -// The 0x80 bit is whether there was a core dump. -// An extra number (exit code, signal causing a stop) -// is in the high bits. - -type WaitStatus uint32 - -const ( - mask = 0x7F - core = 0x80 - shift = 8 - - exited = 0 - killed = 9 - stopped = 0x7F -) - -func (w WaitStatus) Exited() bool { return w&mask == exited } - -func (w WaitStatus) ExitStatus() int { - if w&mask != exited { - return -1 - } - return int(w >> shift) -} - -func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != 0 } - -func (w WaitStatus) Signal() syscall.Signal { - sig := syscall.Signal(w & mask) - if sig == stopped || sig == 0 { - return -1 - } - return sig -} - -func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 } - -func (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP } - -func (w WaitStatus) Killed() bool { return w&mask == killed && syscall.Signal(w>>shift) != SIGKILL } - -func (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP } - -func (w WaitStatus) StopSignal() syscall.Signal { - if !w.Stopped() { - return -1 - } - return syscall.Signal(w>>shift) & 0xFF -} - -func (w WaitStatus) TrapCause() int { return -1 } - -//sys wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) - -func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { - var status _C_int - wpid, err = wait4(pid, &status, options, rusage) - if wstatus != nil { - *wstatus = WaitStatus(status) - } - return -} - -//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) -//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sysnb socket(domain int, typ int, proto int) (fd int, err error) -//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) -//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) -//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sys Shutdown(s int, how int) (err error) - -func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { - if sa.Port < 0 || sa.Port > 0xFFFF { - return nil, 0, EINVAL - } - sa.raw.Len = SizeofSockaddrInet4 - 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), _Socklen(sa.raw.Len), nil -} - -func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { - if sa.Port < 0 || sa.Port > 0xFFFF { - return nil, 0, EINVAL - } - sa.raw.Len = SizeofSockaddrInet6 - 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), _Socklen(sa.raw.Len), nil -} - -func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { - name := sa.Name - n := len(name) - if n >= len(sa.raw.Path) || n == 0 { - return nil, 0, EINVAL - } - sa.raw.Len = byte(3 + n) // 2 for Family, Len; 1 for NUL - sa.raw.Family = AF_UNIX - for i := 0; i < n; i++ { - sa.raw.Path[i] = int8(name[i]) - } - return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil -} - -func (sa *SockaddrDatalink) sockaddr() (unsafe.Pointer, _Socklen, error) { - if sa.Index == 0 { - return nil, 0, EINVAL - } - sa.raw.Len = sa.Len - sa.raw.Family = AF_LINK - sa.raw.Index = sa.Index - sa.raw.Type = sa.Type - sa.raw.Nlen = sa.Nlen - sa.raw.Alen = sa.Alen - sa.raw.Slen = sa.Slen - sa.raw.Data = sa.Data - return unsafe.Pointer(&sa.raw), SizeofSockaddrDatalink, nil -} - -func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { - switch rsa.Addr.Family { - case AF_LINK: - pp := (*RawSockaddrDatalink)(unsafe.Pointer(rsa)) - sa := new(SockaddrDatalink) - sa.Len = pp.Len - sa.Family = pp.Family - sa.Index = pp.Index - sa.Type = pp.Type - sa.Nlen = pp.Nlen - sa.Alen = pp.Alen - sa.Slen = pp.Slen - sa.Data = pp.Data - return sa, nil - - case AF_UNIX: - pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) - if pp.Len < 2 || pp.Len > SizeofSockaddrUnix { - return nil, EINVAL - } - sa := new(SockaddrUnix) - - // Some BSDs include the trailing NUL in the length, whereas - // others do not. Work around this by subtracting the leading - // family and len. The path is then scanned to see if a NUL - // terminator still exists within the length. - n := int(pp.Len) - 2 // subtract leading Family, Len - for i := 0; i < n; i++ { - if pp.Path[i] == 0 { - // found early NUL; assume Len included the NUL - // or was overestimating. - n = i - break - } - } - bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] - sa.Name = string(bytes) - 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 anyToSockaddrGOOS(fd, rsa) -} - -func Accept(fd int) (nfd int, sa Sockaddr, err error) { - var rsa RawSockaddrAny - var len _Socklen = SizeofSockaddrAny - nfd, err = accept(fd, &rsa, &len) - if err != nil { - return - } - if (runtime.GOOS == "darwin" || runtime.GOOS == "ios") && len == 0 { - // Accepted socket has no address. - // This is likely due to a bug in xnu kernels, - // where instead of ECONNABORTED error socket - // is accepted, but has no address. - Close(nfd) - return 0, nil, ECONNABORTED - } - sa, err = anyToSockaddr(fd, &rsa) - if err != nil { - Close(nfd) - nfd = 0 - } - return -} - -func Getsockname(fd int) (sa Sockaddr, err error) { - var rsa RawSockaddrAny - var len _Socklen = SizeofSockaddrAny - if err = getsockname(fd, &rsa, &len); err != nil { - return - } - // TODO(jsing): DragonFly has a "bug" (see issue 3349), which should be - // reported upstream. - if runtime.GOOS == "dragonfly" && rsa.Addr.Family == AF_UNSPEC && rsa.Addr.Len == 0 { - rsa.Addr.Family = AF_UNIX - rsa.Addr.Len = SizeofSockaddrUnix - } - return anyToSockaddr(fd, &rsa) -} - -//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) - -// GetsockoptString returns the string value of the socket option opt for the -// socket associated with fd at the given socket level. -func GetsockoptString(fd, level, opt int) (string, error) { - buf := make([]byte, 256) - vallen := _Socklen(len(buf)) - err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen) - if err != nil { - return "", err - } - return string(buf[:vallen-1]), nil -} - -//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) -//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) -//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) - -func recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { - var msg Msghdr - msg.Name = (*byte)(unsafe.Pointer(rsa)) - msg.Namelen = uint32(SizeofSockaddrAny) - var dummy byte - if len(oob) > 0 { - // receive at least one normal byte - if emptyIovecs(iov) { - var iova [1]Iovec - iova[0].Base = &dummy - iova[0].SetLen(1) - iov = iova[:] - } - msg.Control = (*byte)(unsafe.Pointer(&oob[0])) - msg.SetControllen(len(oob)) - } - if len(iov) > 0 { - msg.Iov = &iov[0] - msg.SetIovlen(len(iov)) - } - if n, err = recvmsg(fd, &msg, flags); err != nil { - return - } - oobn = int(msg.Controllen) - recvflags = int(msg.Flags) - return -} - -//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) - -func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { - var msg Msghdr - msg.Name = (*byte)(unsafe.Pointer(ptr)) - msg.Namelen = uint32(salen) - var dummy byte - var empty bool - if len(oob) > 0 { - // send at least one normal byte - empty = emptyIovecs(iov) - if empty { - var iova [1]Iovec - iova[0].Base = &dummy - iova[0].SetLen(1) - iov = iova[:] - } - msg.Control = (*byte)(unsafe.Pointer(&oob[0])) - msg.SetControllen(len(oob)) - } - if len(iov) > 0 { - msg.Iov = &iov[0] - msg.SetIovlen(len(iov)) - } - if n, err = sendmsg(fd, &msg, flags); err != nil { - return 0, err - } - if len(oob) > 0 && empty { - n = 0 - } - return n, nil -} - -//sys kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) - -func Kevent(kq int, changes, events []Kevent_t, timeout *Timespec) (n int, err error) { - var change, event unsafe.Pointer - if len(changes) > 0 { - change = unsafe.Pointer(&changes[0]) - } - if len(events) > 0 { - event = unsafe.Pointer(&events[0]) - } - return kevent(kq, change, len(changes), event, len(events), timeout) -} - -// sysctlmib translates name to mib number and appends any additional args. -func sysctlmib(name string, args ...int) ([]_C_int, error) { - // Translate name to mib number. - mib, err := nametomib(name) - if err != nil { - return nil, err - } - - for _, a := range args { - mib = append(mib, _C_int(a)) - } - - return mib, nil -} - -func Sysctl(name string) (string, error) { - return SysctlArgs(name) -} - -func SysctlArgs(name string, args ...int) (string, error) { - buf, err := SysctlRaw(name, args...) - if err != nil { - return "", err - } - n := len(buf) - - // Throw away terminating NUL. - if n > 0 && buf[n-1] == '\x00' { - n-- - } - return string(buf[0:n]), nil -} - -func SysctlUint32(name string) (uint32, error) { - return SysctlUint32Args(name) -} - -func SysctlUint32Args(name string, args ...int) (uint32, error) { - mib, err := sysctlmib(name, args...) - if err != nil { - return 0, err - } - - n := uintptr(4) - buf := make([]byte, 4) - if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil { - return 0, err - } - if n != 4 { - return 0, EIO - } - return *(*uint32)(unsafe.Pointer(&buf[0])), nil -} - -func SysctlUint64(name string, args ...int) (uint64, error) { - mib, err := sysctlmib(name, args...) - if err != nil { - return 0, err - } - - n := uintptr(8) - buf := make([]byte, 8) - if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil { - return 0, err - } - if n != 8 { - return 0, EIO - } - return *(*uint64)(unsafe.Pointer(&buf[0])), nil -} - -func SysctlRaw(name string, args ...int) ([]byte, error) { - mib, err := sysctlmib(name, args...) - if err != nil { - return nil, err - } - - // Find size. - n := uintptr(0) - if err := sysctl(mib, nil, &n, nil, 0); err != nil { - return nil, err - } - if n == 0 { - return nil, nil - } - - // Read into buffer of that size. - buf := make([]byte, n) - if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil { - return nil, err - } - - // The actual call may return less than the original reported required - // size so ensure we deal with that. - return buf[:n], nil -} - -func SysctlClockinfo(name string) (*Clockinfo, error) { - mib, err := sysctlmib(name) - if err != nil { - return nil, err - } - - n := uintptr(SizeofClockinfo) - var ci Clockinfo - if err := sysctl(mib, (*byte)(unsafe.Pointer(&ci)), &n, nil, 0); err != nil { - return nil, err - } - if n != SizeofClockinfo { - return nil, EIO - } - return &ci, nil -} - -func SysctlTimeval(name string) (*Timeval, error) { - mib, err := sysctlmib(name) - if err != nil { - return nil, err - } - - var tv Timeval - n := uintptr(unsafe.Sizeof(tv)) - if err := sysctl(mib, (*byte)(unsafe.Pointer(&tv)), &n, nil, 0); err != nil { - return nil, err - } - if n != unsafe.Sizeof(tv) { - return nil, EIO - } - return &tv, nil -} - -//sys utimes(path string, timeval *[2]Timeval) (err error) - -func Utimes(path string, tv []Timeval) error { - if tv == nil { - return utimes(path, nil) - } - if len(tv) != 2 { - return EINVAL - } - return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) -} - -func UtimesNano(path string, ts []Timespec) error { - if ts == nil { - err := utimensat(AT_FDCWD, path, nil, 0) - if err != ENOSYS { - return err - } - return utimes(path, nil) - } - if len(ts) != 2 { - return EINVAL - } - err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) - if err != ENOSYS { - return err - } - // Not as efficient as it could be because Timespec and - // Timeval have different types in the different OSes - tv := [2]Timeval{ - NsecToTimeval(TimespecToNsec(ts[0])), - NsecToTimeval(TimespecToNsec(ts[1])), - } - return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) -} - -func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { - if ts == nil { - return utimensat(dirfd, path, nil, flags) - } - if len(ts) != 2 { - return EINVAL - } - return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) -} - -//sys futimes(fd int, timeval *[2]Timeval) (err error) - -func Futimes(fd int, tv []Timeval) error { - if tv == nil { - return futimes(fd, nil) - } - if len(tv) != 2 { - return EINVAL - } - return futimes(fd, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) -} - -//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) - -func Poll(fds []PollFd, timeout int) (n int, err error) { - if len(fds) == 0 { - return poll(nil, 0, timeout) - } - return poll(&fds[0], len(fds), timeout) -} - -// TODO: wrap -// Acct(name nil-string) (err error) -// Gethostuuid(uuid *byte, timeout *Timespec) (err error) -// Ptrace(req int, pid int, addr uintptr, data int) (ret uintptr, err error) - -var mapper = &mmapper{ - active: make(map[*byte][]byte), - mmap: mmap, - munmap: munmap, -} - -func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { - return mapper.Mmap(fd, offset, length, prot, flags) -} - -func Munmap(b []byte) (err error) { - return mapper.Munmap(b) -} - -//sys Madvise(b []byte, behav int) (err error) -//sys Mlock(b []byte) (err error) -//sys Mlockall(flags int) (err error) -//sys Mprotect(b []byte, prot int) (err error) -//sys Msync(b []byte, flags int) (err error) -//sys Munlock(b []byte) (err error) -//sys Munlockall() (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go deleted file mode 100644 index 1f63382..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ /dev/null @@ -1,830 +0,0 @@ -// Copyright 2009,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. - -// Darwin system calls. -// This file is compiled as ordinary Go code, -// but it is also input to mksyscall, -// which parses the //sys lines and generates system call stubs. -// Note that sometimes we use a lowercase //sys name and wrap -// it in our own nicer implementation, either here or in -// syscall_bsd.go or syscall_unix.go. - -package unix - -import ( - "fmt" - "runtime" - "syscall" - "unsafe" -) - -//sys closedir(dir uintptr) (err error) -//sys readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) - -func fdopendir(fd int) (dir uintptr, err error) { - r0, _, e1 := syscall_syscallPtr(libc_fdopendir_trampoline_addr, uintptr(fd), 0, 0) - dir = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fdopendir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fdopendir fdopendir "/usr/lib/libSystem.B.dylib" - -func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { - // Simulate Getdirentries using fdopendir/readdir_r/closedir. - // We store the number of entries to skip in the seek - // offset of fd. See issue #31368. - // It's not the full required semantics, but should handle the case - // of calling Getdirentries or ReadDirent repeatedly. - // It won't handle assigning the results of lseek to *basep, or handle - // the directory being edited underfoot. - skip, err := Seek(fd, 0, 1 /* SEEK_CUR */) - if err != nil { - return 0, err - } - - // We need to duplicate the incoming file descriptor - // because the caller expects to retain control of it, but - // fdopendir expects to take control of its argument. - // Just Dup'ing the file descriptor is not enough, as the - // result shares underlying state. Use Openat to make a really - // new file descriptor referring to the same directory. - fd2, err := Openat(fd, ".", O_RDONLY, 0) - if err != nil { - return 0, err - } - d, err := fdopendir(fd2) - if err != nil { - Close(fd2) - return 0, err - } - defer closedir(d) - - var cnt int64 - for { - var entry Dirent - var entryp *Dirent - e := readdir_r(d, &entry, &entryp) - if e != 0 { - return n, errnoErr(e) - } - if entryp == nil { - break - } - if skip > 0 { - skip-- - cnt++ - continue - } - - reclen := int(entry.Reclen) - if reclen > len(buf) { - // Not enough room. Return for now. - // The counter will let us know where we should start up again. - // Note: this strategy for suspending in the middle and - // restarting is O(n^2) in the length of the directory. Oh well. - break - } - - // Copy entry into return buffer. - s := unsafe.Slice((*byte)(unsafe.Pointer(&entry)), reclen) - copy(buf, s) - - buf = buf[reclen:] - n += reclen - cnt++ - } - // Set the seek offset of the input fd to record - // how many files we've already returned. - _, err = Seek(fd, cnt, 0 /* SEEK_SET */) - if err != nil { - return n, err - } - - return n, nil -} - -// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. -type SockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [12]int8 - raw RawSockaddrDatalink -} - -// SockaddrCtl implements the Sockaddr interface for AF_SYSTEM type sockets. -type SockaddrCtl struct { - ID uint32 - Unit uint32 - raw RawSockaddrCtl -} - -func (sa *SockaddrCtl) sockaddr() (unsafe.Pointer, _Socklen, error) { - sa.raw.Sc_len = SizeofSockaddrCtl - sa.raw.Sc_family = AF_SYSTEM - sa.raw.Ss_sysaddr = AF_SYS_CONTROL - sa.raw.Sc_id = sa.ID - sa.raw.Sc_unit = sa.Unit - return unsafe.Pointer(&sa.raw), SizeofSockaddrCtl, nil -} - -// SockaddrVM implements the Sockaddr interface for AF_VSOCK type sockets. -// SockaddrVM provides access to Darwin VM sockets: a mechanism that enables -// bidirectional communication between a hypervisor and its guest virtual -// machines. -type SockaddrVM struct { - // CID and Port specify a context ID and port address for a VM socket. - // Guests have a unique CID, and hosts may have a well-known CID of: - // - VMADDR_CID_HYPERVISOR: refers to the hypervisor process. - // - VMADDR_CID_LOCAL: refers to local communication (loopback). - // - VMADDR_CID_HOST: refers to other processes on the host. - CID uint32 - Port uint32 - raw RawSockaddrVM -} - -func (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) { - sa.raw.Len = SizeofSockaddrVM - sa.raw.Family = AF_VSOCK - sa.raw.Port = sa.Port - sa.raw.Cid = sa.CID - - return unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil -} - -func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { - switch rsa.Addr.Family { - case AF_SYSTEM: - pp := (*RawSockaddrCtl)(unsafe.Pointer(rsa)) - if pp.Ss_sysaddr == AF_SYS_CONTROL { - sa := new(SockaddrCtl) - sa.ID = pp.Sc_id - sa.Unit = pp.Sc_unit - return sa, nil - } - case AF_VSOCK: - pp := (*RawSockaddrVM)(unsafe.Pointer(rsa)) - sa := &SockaddrVM{ - CID: pp.Cid, - Port: pp.Port, - } - return sa, nil - } - return nil, EAFNOSUPPORT -} - -// Some external packages rely on SYS___SYSCTL being defined to implement their -// own sysctl wrappers. Provide it here, even though direct syscalls are no -// longer supported on darwin. -const SYS___SYSCTL = SYS_SYSCTL - -// Translate "kern.hostname" to []_C_int{0,1,2,3}. -func nametomib(name string) (mib []_C_int, err error) { - const siz = unsafe.Sizeof(mib[0]) - - // NOTE(rsc): It seems strange to set the buffer to have - // size CTL_MAXNAME+2 but use only CTL_MAXNAME - // as the size. I don't know why the +2 is here, but the - // kernel uses +2 for its own implementation of this function. - // I am scared that if we don't include the +2 here, the kernel - // will silently write 2 words farther than we specify - // and we'll get memory corruption. - var buf [CTL_MAXNAME + 2]_C_int - n := uintptr(CTL_MAXNAME) * siz - - p := (*byte)(unsafe.Pointer(&buf[0])) - bytes, err := ByteSliceFromString(name) - if err != nil { - return nil, err - } - - // Magic sysctl: "setting" 0.3 to a string name - // lets you read back the array of integers form. - if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil { - return nil, err - } - return buf[0 : n/siz], nil -} - -func direntIno(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) -} - -func direntReclen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) -} - -func direntNamlen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) -} - -func PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) } -func PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) } - -//sysnb pipe(p *[2]int32) (err error) - -func Pipe(p []int) (err error) { - if len(p) != 2 { - return EINVAL - } - var x [2]int32 - err = pipe(&x) - if err == nil { - p[0] = int(x[0]) - p[1] = int(x[1]) - } - return -} - -func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { - var _p0 unsafe.Pointer - var bufsize uintptr - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) - } - return getfsstat(_p0, bufsize, flags) -} - -func xattrPointer(dest []byte) *byte { - // It's only when dest is set to NULL that the OS X implementations of - // getxattr() and listxattr() return the current sizes of the named attributes. - // An empty byte array is not sufficient. To maintain the same behaviour as the - // linux implementation, we wrap around the system calls and pass in NULL when - // dest is empty. - var destp *byte - if len(dest) > 0 { - destp = &dest[0] - } - return destp -} - -//sys getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) - -func Getxattr(path string, attr string, dest []byte) (sz int, err error) { - return getxattr(path, attr, xattrPointer(dest), len(dest), 0, 0) -} - -func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) { - return getxattr(link, attr, xattrPointer(dest), len(dest), 0, XATTR_NOFOLLOW) -} - -//sys fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) - -func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { - return fgetxattr(fd, attr, xattrPointer(dest), len(dest), 0, 0) -} - -//sys setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) - -func Setxattr(path string, attr string, data []byte, flags int) (err error) { - // The parameters for the OS X implementation vary slightly compared to the - // linux system call, specifically the position parameter: - // - // linux: - // int setxattr( - // const char *path, - // const char *name, - // const void *value, - // size_t size, - // int flags - // ); - // - // darwin: - // int setxattr( - // const char *path, - // const char *name, - // void *value, - // size_t size, - // u_int32_t position, - // int options - // ); - // - // position specifies the offset within the extended attribute. In the - // current implementation, only the resource fork extended attribute makes - // use of this argument. For all others, position is reserved. We simply - // default to setting it to zero. - return setxattr(path, attr, xattrPointer(data), len(data), 0, flags) -} - -func Lsetxattr(link string, attr string, data []byte, flags int) (err error) { - return setxattr(link, attr, xattrPointer(data), len(data), 0, flags|XATTR_NOFOLLOW) -} - -//sys fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) - -func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) { - return fsetxattr(fd, attr, xattrPointer(data), len(data), 0, 0) -} - -//sys removexattr(path string, attr string, options int) (err error) - -func Removexattr(path string, attr string) (err error) { - // We wrap around and explicitly zero out the options provided to the OS X - // implementation of removexattr, we do so for interoperability with the - // linux variant. - return removexattr(path, attr, 0) -} - -func Lremovexattr(link string, attr string) (err error) { - return removexattr(link, attr, XATTR_NOFOLLOW) -} - -//sys fremovexattr(fd int, attr string, options int) (err error) - -func Fremovexattr(fd int, attr string) (err error) { - return fremovexattr(fd, attr, 0) -} - -//sys listxattr(path string, dest *byte, size int, options int) (sz int, err error) - -func Listxattr(path string, dest []byte) (sz int, err error) { - return listxattr(path, xattrPointer(dest), len(dest), 0) -} - -func Llistxattr(link string, dest []byte) (sz int, err error) { - return listxattr(link, xattrPointer(dest), len(dest), XATTR_NOFOLLOW) -} - -//sys flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) - -func Flistxattr(fd int, dest []byte) (sz int, err error) { - return flistxattr(fd, xattrPointer(dest), len(dest), 0) -} - -//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) - -/* - * Wrapped - */ - -//sys fcntl(fd int, cmd int, arg int) (val int, err error) - -//sys kill(pid int, signum int, posix int) (err error) - -func Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(signum), 1) } - -//sys ioctl(fd int, req uint, arg uintptr) (err error) - -func IoctlCtlInfo(fd int, ctlInfo *CtlInfo) error { - err := ioctl(fd, CTLIOCGINFO, uintptr(unsafe.Pointer(ctlInfo))) - runtime.KeepAlive(ctlInfo) - return err -} - -// IfreqMTU is struct ifreq used to get or set a network device's MTU. -type IfreqMTU struct { - Name [IFNAMSIZ]byte - MTU int32 -} - -// IoctlGetIfreqMTU performs the SIOCGIFMTU ioctl operation on fd to get the MTU -// of the network device specified by ifname. -func IoctlGetIfreqMTU(fd int, ifname string) (*IfreqMTU, error) { - var ifreq IfreqMTU - copy(ifreq.Name[:], ifname) - err := ioctl(fd, SIOCGIFMTU, uintptr(unsafe.Pointer(&ifreq))) - return &ifreq, err -} - -// IoctlSetIfreqMTU performs the SIOCSIFMTU ioctl operation on fd to set the MTU -// of the network device specified by ifreq.Name. -func IoctlSetIfreqMTU(fd int, ifreq *IfreqMTU) error { - err := ioctl(fd, SIOCSIFMTU, uintptr(unsafe.Pointer(ifreq))) - runtime.KeepAlive(ifreq) - return err -} - -//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS_SYSCTL - -func Uname(uname *Utsname) error { - mib := []_C_int{CTL_KERN, KERN_OSTYPE} - n := unsafe.Sizeof(uname.Sysname) - if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil { - return err - } - - mib = []_C_int{CTL_KERN, KERN_HOSTNAME} - n = unsafe.Sizeof(uname.Nodename) - if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil { - return err - } - - mib = []_C_int{CTL_KERN, KERN_OSRELEASE} - n = unsafe.Sizeof(uname.Release) - if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil { - return err - } - - mib = []_C_int{CTL_KERN, KERN_VERSION} - n = unsafe.Sizeof(uname.Version) - if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil { - return err - } - - // The version might have newlines or tabs in it, convert them to - // spaces. - for i, b := range uname.Version { - if b == '\n' || b == '\t' { - if i == len(uname.Version)-1 { - uname.Version[i] = 0 - } else { - uname.Version[i] = ' ' - } - } - } - - mib = []_C_int{CTL_HW, HW_MACHINE} - n = unsafe.Sizeof(uname.Machine) - if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil { - return err - } - - return nil -} - -func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - if raceenabled { - raceReleaseMerge(unsafe.Pointer(&ioSync)) - } - var length = int64(count) - err = sendfile(infd, outfd, *offset, &length, nil, 0) - written = int(length) - return -} - -func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) { - var value IPMreqn - vallen := _Socklen(SizeofIPMreqn) - errno := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) - return &value, errno -} - -func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) { - return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) -} - -// GetsockoptXucred is a getsockopt wrapper that returns an Xucred struct. -// The usual level and opt are SOL_LOCAL and LOCAL_PEERCRED, respectively. -func GetsockoptXucred(fd, level, opt int) (*Xucred, error) { - x := new(Xucred) - vallen := _Socklen(SizeofXucred) - err := getsockopt(fd, level, opt, unsafe.Pointer(x), &vallen) - return x, err -} - -func GetsockoptTCPConnectionInfo(fd, level, opt int) (*TCPConnectionInfo, error) { - var value TCPConnectionInfo - vallen := _Socklen(SizeofTCPConnectionInfo) - err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) - return &value, err -} - -func SysctlKinfoProc(name string, args ...int) (*KinfoProc, error) { - mib, err := sysctlmib(name, args...) - if err != nil { - return nil, err - } - - var kinfo KinfoProc - n := uintptr(SizeofKinfoProc) - if err := sysctl(mib, (*byte)(unsafe.Pointer(&kinfo)), &n, nil, 0); err != nil { - return nil, err - } - if n != SizeofKinfoProc { - return nil, EIO - } - return &kinfo, nil -} - -func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { - mib, err := sysctlmib(name, args...) - if err != nil { - return nil, err - } - - // Find size. - n := uintptr(0) - if err := sysctl(mib, nil, &n, nil, 0); err != nil { - return nil, err - } - if n == 0 { - return nil, nil - } - if n%SizeofKinfoProc != 0 { - return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc) - } - - // Read into buffer of that size. - buf := make([]KinfoProc, n/SizeofKinfoProc) - if err := sysctl(mib, (*byte)(unsafe.Pointer(&buf[0])), &n, nil, 0); err != nil { - return nil, err - } - if n%SizeofKinfoProc != 0 { - return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc) - } - - // The actual call may return less than the original reported required - // size so ensure we deal with that. - return buf[:n/SizeofKinfoProc], nil -} - -//sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) - -//sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error) -//sys shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) -//sys shmdt(addr uintptr) (err error) -//sys shmget(key int, size int, flag int) (id int, err error) - -/* - * Exposed directly - */ -//sys Access(path string, mode uint32) (err error) -//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) -//sys Chdir(path string) (err error) -//sys Chflags(path string, flags int) (err error) -//sys Chmod(path string, mode uint32) (err error) -//sys Chown(path string, uid int, gid int) (err error) -//sys Chroot(path string) (err error) -//sys ClockGettime(clockid int32, time *Timespec) (err error) -//sys Close(fd int) (err error) -//sys Clonefile(src string, dst string, flags int) (err error) -//sys Clonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) (err error) -//sys Dup(fd int) (nfd int, err error) -//sys Dup2(from int, to int) (err error) -//sys Exchangedata(path1 string, path2 string, options int) (err error) -//sys Exit(code int) -//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) -//sys Fchdir(fd int) (err error) -//sys Fchflags(fd int, flags int) (err error) -//sys Fchmod(fd int, mode uint32) (err error) -//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) -//sys Fchown(fd int, uid int, gid int) (err error) -//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) -//sys Fclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error) -//sys Flock(fd int, how int) (err error) -//sys Fpathconf(fd int, name int) (val int, err error) -//sys Fsync(fd int) (err error) -//sys Ftruncate(fd int, length int64) (err error) -//sys Getcwd(buf []byte) (n int, err error) -//sys Getdtablesize() (size int) -//sysnb Getegid() (egid int) -//sysnb Geteuid() (uid int) -//sysnb Getgid() (gid int) -//sysnb Getpgid(pid int) (pgid int, err error) -//sysnb Getpgrp() (pgrp int) -//sysnb Getpid() (pid int) -//sysnb Getppid() (ppid int) -//sys Getpriority(which int, who int) (prio int, err error) -//sysnb Getrlimit(which int, lim *Rlimit) (err error) -//sysnb Getrusage(who int, rusage *Rusage) (err error) -//sysnb Getsid(pid int) (sid int, err error) -//sysnb Gettimeofday(tp *Timeval) (err error) -//sysnb Getuid() (uid int) -//sysnb Issetugid() (tainted bool) -//sys Kqueue() (fd int, err error) -//sys Lchown(path string, uid int, gid int) (err error) -//sys Link(path string, link string) (err error) -//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) -//sys Listen(s int, backlog int) (err error) -//sys Mkdir(path string, mode uint32) (err error) -//sys Mkdirat(dirfd int, path string, mode uint32) (err error) -//sys Mkfifo(path string, mode uint32) (err error) -//sys Mknod(path string, mode uint32, dev int) (err error) -//sys Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) -//sys Open(path string, mode int, perm uint32) (fd int, err error) -//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) -//sys Pathconf(path string, name int) (val int, err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) -//sys read(fd int, p []byte) (n int, err error) -//sys Readlink(path string, buf []byte) (n int, err error) -//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) -//sys Rename(from string, to string) (err error) -//sys Renameat(fromfd int, from string, tofd int, to string) (err error) -//sys Revoke(path string) (err error) -//sys Rmdir(path string) (err error) -//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK -//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) -//sys Setegid(egid int) (err error) -//sysnb Seteuid(euid int) (err error) -//sysnb Setgid(gid int) (err error) -//sys Setlogin(name string) (err error) -//sysnb Setpgid(pid int, pgid int) (err error) -//sys Setpriority(which int, who int, prio int) (err error) -//sys Setprivexec(flag int) (err error) -//sysnb Setregid(rgid int, egid int) (err error) -//sysnb Setreuid(ruid int, euid int) (err error) -//sysnb Setrlimit(which int, lim *Rlimit) (err error) -//sysnb Setsid() (pid int, err error) -//sysnb Settimeofday(tp *Timeval) (err error) -//sysnb Setuid(uid int) (err error) -//sys Symlink(path string, link string) (err error) -//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) -//sys Sync() (err error) -//sys Truncate(path string, length int64) (err error) -//sys Umask(newmask int) (oldmask int) -//sys Undelete(path string) (err error) -//sys Unlink(path string) (err error) -//sys Unlinkat(dirfd int, path string, flags int) (err error) -//sys Unmount(path string, flags int) (err error) -//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 readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ -//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE - -/* - * Unimplemented - */ -// Profil -// Sigaction -// Sigprocmask -// Getlogin -// Sigpending -// Sigaltstack -// Ioctl -// Reboot -// Execve -// Vfork -// Sbrk -// Sstk -// Ovadvise -// Mincore -// Setitimer -// Swapon -// Select -// Sigsuspend -// Readv -// Writev -// Nfssvc -// Getfh -// Quotactl -// Csops -// Waitid -// Add_profil -// Kdebug_trace -// Sigreturn -// Atsocket -// Kqueue_from_portset_np -// Kqueue_portset -// Getattrlist -// Setattrlist -// Getdirentriesattr -// Searchfs -// Delete -// Copyfile -// Watchevent -// Waitevent -// Modwatch -// Fsctl -// Initgroups -// Posix_spawn -// Nfsclnt -// Fhopen -// Minherit -// Semsys -// Msgsys -// Shmsys -// Semctl -// Semget -// Semop -// Msgctl -// Msgget -// Msgsnd -// Msgrcv -// Shm_open -// Shm_unlink -// Sem_open -// Sem_close -// Sem_unlink -// Sem_wait -// Sem_trywait -// Sem_post -// Sem_getvalue -// Sem_init -// Sem_destroy -// Open_extended -// Umask_extended -// Stat_extended -// Lstat_extended -// Fstat_extended -// Chmod_extended -// Fchmod_extended -// Access_extended -// Settid -// Gettid -// Setsgroups -// Getsgroups -// Setwgroups -// Getwgroups -// Mkfifo_extended -// Mkdir_extended -// Identitysvc -// Shared_region_check_np -// Shared_region_map_np -// __pthread_mutex_destroy -// __pthread_mutex_init -// __pthread_mutex_lock -// __pthread_mutex_trylock -// __pthread_mutex_unlock -// __pthread_cond_init -// __pthread_cond_destroy -// __pthread_cond_broadcast -// __pthread_cond_signal -// Setsid_with_pid -// __pthread_cond_timedwait -// Aio_fsync -// Aio_return -// Aio_suspend -// Aio_cancel -// Aio_error -// Aio_read -// Aio_write -// Lio_listio -// __pthread_cond_wait -// Iopolicysys -// __pthread_kill -// __pthread_sigmask -// __sigwait -// __disable_threadsignal -// __pthread_markcancel -// __pthread_canceled -// __semwait_signal -// Proc_info -// sendfile -// Stat64_extended -// Lstat64_extended -// Fstat64_extended -// __pthread_chdir -// __pthread_fchdir -// Audit -// Auditon -// Getauid -// Setauid -// Getaudit -// Setaudit -// Getaudit_addr -// Setaudit_addr -// Auditctl -// Bsdthread_create -// Bsdthread_terminate -// Stack_snapshot -// Bsdthread_register -// Workq_open -// Workq_ops -// __mac_execve -// __mac_syscall -// __mac_get_file -// __mac_set_file -// __mac_get_link -// __mac_set_link -// __mac_get_proc -// __mac_set_proc -// __mac_get_fd -// __mac_set_fd -// __mac_get_pid -// __mac_get_lcid -// __mac_get_lctx -// __mac_set_lctx -// Setlcid -// Read_nocancel -// Write_nocancel -// Open_nocancel -// Close_nocancel -// Wait4_nocancel -// Recvmsg_nocancel -// Sendmsg_nocancel -// Recvfrom_nocancel -// Accept_nocancel -// Fcntl_nocancel -// Select_nocancel -// Fsync_nocancel -// Connect_nocancel -// Sigsuspend_nocancel -// Readv_nocancel -// Writev_nocancel -// Sendto_nocancel -// Pread_nocancel -// Pwrite_nocancel -// Waitid_nocancel -// Poll_nocancel -// Msgsnd_nocancel -// Msgrcv_nocancel -// Sem_wait_nocancel -// Aio_suspend_nocancel -// __sigwait_nocancel -// __semwait_signal_nocancel -// __mac_mount -// __mac_get_mount -// __mac_getfsstat diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go deleted file mode 100644 index b37310c..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go +++ /dev/null @@ -1,51 +0,0 @@ -// 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 amd64 && darwin -// +build amd64,darwin - -package unix - -import "syscall" - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: nsec} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: int32(usec)} -} - -func SetKevent(k *Kevent_t, fd, mode, flags int) { - k.Ident = uint64(fd) - k.Filter = int16(mode) - k.Flags = uint16(flags) -} - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint64(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = int32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} - -func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) - -//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 -//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 -//sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64 -//sys getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT64 -//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 -//sys ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) = SYS_ptrace -//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 -//sys Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64 diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go deleted file mode 100644 index d51ec99..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build arm64 && darwin -// +build arm64,darwin - -package unix - -import "syscall" - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: nsec} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: int32(usec)} -} - -func SetKevent(k *Kevent_t, fd, mode, flags int) { - k.Ident = uint64(fd) - k.Filter = int16(mode) - k.Flags = uint16(flags) -} - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint64(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = int32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} - -func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic - -//sys Fstat(fd int, stat *Stat_t) (err error) -//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) -//sys Fstatfs(fd int, stat *Statfs_t) (err error) -//sys getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT -//sys Lstat(path string, stat *Stat_t) (err error) -//sys ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) = SYS_ptrace -//sys Stat(path string, stat *Stat_t) (err error) -//sys Statfs(path string, stat *Statfs_t) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go b/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go deleted file mode 100644 index 53c9664..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build darwin && go1.12 -// +build darwin,go1.12 - -package unix - -import _ "unsafe" - -// Implemented in the runtime package (runtime/sys_darwin.go) -func syscall_syscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) -func syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) -func syscall_syscall6X(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) -func syscall_syscall9(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) // 32-bit only -func syscall_rawSyscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) -func syscall_rawSyscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) -func syscall_syscallPtr(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) - -//go:linkname syscall_syscall syscall.syscall -//go:linkname syscall_syscall6 syscall.syscall6 -//go:linkname syscall_syscall6X syscall.syscall6X -//go:linkname syscall_syscall9 syscall.syscall9 -//go:linkname syscall_rawSyscall syscall.rawSyscall -//go:linkname syscall_rawSyscall6 syscall.rawSyscall6 -//go:linkname syscall_syscallPtr syscall.syscallPtr diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go deleted file mode 100644 index 61c0d0d..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go +++ /dev/null @@ -1,544 +0,0 @@ -// 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. - -// DragonFly BSD system calls. -// This file is compiled as ordinary Go code, -// but it is also input to mksyscall, -// which parses the //sys lines and generates system call stubs. -// Note that sometimes we use a lowercase //sys name and wrap -// it in our own nicer implementation, either here or in -// syscall_bsd.go or syscall_unix.go. - -package unix - -import ( - "sync" - "unsafe" -) - -// See version list in https://github.com/DragonFlyBSD/DragonFlyBSD/blob/master/sys/sys/param.h -var ( - osreldateOnce sync.Once - osreldate uint32 -) - -// First __DragonFly_version after September 2019 ABI changes -// http://lists.dragonflybsd.org/pipermail/users/2019-September/358280.html -const _dragonflyABIChangeVersion = 500705 - -func supportsABI(ver uint32) bool { - osreldateOnce.Do(func() { osreldate, _ = SysctlUint32("kern.osreldate") }) - return osreldate >= ver -} - -// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. -type SockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [12]int8 - Rcf uint16 - Route [16]uint16 - raw RawSockaddrDatalink -} - -func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { - return nil, EAFNOSUPPORT -} - -// Translate "kern.hostname" to []_C_int{0,1,2,3}. -func nametomib(name string) (mib []_C_int, err error) { - const siz = unsafe.Sizeof(mib[0]) - - // NOTE(rsc): It seems strange to set the buffer to have - // size CTL_MAXNAME+2 but use only CTL_MAXNAME - // as the size. I don't know why the +2 is here, but the - // kernel uses +2 for its own implementation of this function. - // I am scared that if we don't include the +2 here, the kernel - // will silently write 2 words farther than we specify - // and we'll get memory corruption. - var buf [CTL_MAXNAME + 2]_C_int - n := uintptr(CTL_MAXNAME) * siz - - p := (*byte)(unsafe.Pointer(&buf[0])) - bytes, err := ByteSliceFromString(name) - if err != nil { - return nil, err - } - - // Magic sysctl: "setting" 0.3 to a string name - // lets you read back the array of integers form. - if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil { - return nil, err - } - return buf[0 : n/siz], nil -} - -func direntIno(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) -} - -func direntReclen(buf []byte) (uint64, bool) { - namlen, ok := direntNamlen(buf) - if !ok { - return 0, false - } - return (16 + namlen + 1 + 7) &^ 7, true -} - -func direntNamlen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) -} - -//sysnb pipe() (r int, w int, err error) - -func Pipe(p []int) (err error) { - if len(p) != 2 { - return EINVAL - } - r, w, err := pipe() - if err == nil { - p[0], p[1] = r, w - } - return -} - -//sysnb pipe2(p *[2]_C_int, flags int) (r int, w int, err error) - -func Pipe2(p []int, flags int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - // pipe2 on dragonfly takes an fds array as an argument, but still - // returns the file descriptors. - r, w, err := pipe2(&pp, flags) - if err == nil { - p[0], p[1] = r, w - } - return err -} - -//sys extpread(fd int, p []byte, flags int, offset int64) (n int, err error) - -func pread(fd int, p []byte, offset int64) (n int, err error) { - return extpread(fd, p, 0, offset) -} - -//sys extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - return extpwrite(fd, p, 0, offset) -} - -func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) { - var rsa RawSockaddrAny - var len _Socklen = SizeofSockaddrAny - nfd, err = accept4(fd, &rsa, &len, flags) - if err != nil { - return - } - if len > SizeofSockaddrAny { - panic("RawSockaddrAny too small") - } - sa, err = anyToSockaddr(fd, &rsa) - if err != nil { - Close(nfd) - nfd = 0 - } - return -} - -//sys Getcwd(buf []byte) (n int, err error) = SYS___GETCWD - -func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { - var _p0 unsafe.Pointer - var bufsize uintptr - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) - } - r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -//sys ioctl(fd int, req uint, arg uintptr) (err error) - -//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL - -func sysctlUname(mib []_C_int, old *byte, oldlen *uintptr) error { - err := sysctl(mib, old, oldlen, nil, 0) - if err != nil { - // Utsname members on Dragonfly are only 32 bytes and - // the syscall returns ENOMEM in case the actual value - // is longer. - if err == ENOMEM { - err = nil - } - } - return err -} - -func Uname(uname *Utsname) error { - mib := []_C_int{CTL_KERN, KERN_OSTYPE} - n := unsafe.Sizeof(uname.Sysname) - if err := sysctlUname(mib, &uname.Sysname[0], &n); err != nil { - return err - } - uname.Sysname[unsafe.Sizeof(uname.Sysname)-1] = 0 - - mib = []_C_int{CTL_KERN, KERN_HOSTNAME} - n = unsafe.Sizeof(uname.Nodename) - if err := sysctlUname(mib, &uname.Nodename[0], &n); err != nil { - return err - } - uname.Nodename[unsafe.Sizeof(uname.Nodename)-1] = 0 - - mib = []_C_int{CTL_KERN, KERN_OSRELEASE} - n = unsafe.Sizeof(uname.Release) - if err := sysctlUname(mib, &uname.Release[0], &n); err != nil { - return err - } - uname.Release[unsafe.Sizeof(uname.Release)-1] = 0 - - mib = []_C_int{CTL_KERN, KERN_VERSION} - n = unsafe.Sizeof(uname.Version) - if err := sysctlUname(mib, &uname.Version[0], &n); err != nil { - return err - } - - // The version might have newlines or tabs in it, convert them to - // spaces. - for i, b := range uname.Version { - if b == '\n' || b == '\t' { - if i == len(uname.Version)-1 { - uname.Version[i] = 0 - } else { - uname.Version[i] = ' ' - } - } - } - - mib = []_C_int{CTL_HW, HW_MACHINE} - n = unsafe.Sizeof(uname.Machine) - if err := sysctlUname(mib, &uname.Machine[0], &n); err != nil { - return err - } - uname.Machine[unsafe.Sizeof(uname.Machine)-1] = 0 - - return nil -} - -func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - if raceenabled { - raceReleaseMerge(unsafe.Pointer(&ioSync)) - } - return sendfile(outfd, infd, offset, count) -} - -/* - * Exposed directly - */ -//sys Access(path string, mode uint32) (err error) -//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) -//sys Chdir(path string) (err error) -//sys Chflags(path string, flags int) (err error) -//sys Chmod(path string, mode uint32) (err error) -//sys Chown(path string, uid int, gid int) (err error) -//sys Chroot(path string) (err error) -//sys Close(fd int) (err error) -//sys Dup(fd int) (nfd int, err error) -//sys Dup2(from int, to int) (err error) -//sys Exit(code int) -//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) -//sys Fchdir(fd int) (err error) -//sys Fchflags(fd int, flags int) (err error) -//sys Fchmod(fd int, mode uint32) (err error) -//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) -//sys Fchown(fd int, uid int, gid int) (err error) -//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) -//sys Flock(fd int, how int) (err error) -//sys Fpathconf(fd int, name int) (val int, err error) -//sys Fstat(fd int, stat *Stat_t) (err error) -//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) -//sys Fstatfs(fd int, stat *Statfs_t) (err error) -//sys Fsync(fd int) (err error) -//sys Ftruncate(fd int, length int64) (err error) -//sys Getdents(fd int, buf []byte) (n int, err error) -//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) -//sys Getdtablesize() (size int) -//sysnb Getegid() (egid int) -//sysnb Geteuid() (uid int) -//sysnb Getgid() (gid int) -//sysnb Getpgid(pid int) (pgid int, err error) -//sysnb Getpgrp() (pgrp int) -//sysnb Getpid() (pid int) -//sysnb Getppid() (ppid int) -//sys Getpriority(which int, who int) (prio int, err error) -//sysnb Getrlimit(which int, lim *Rlimit) (err error) -//sysnb Getrusage(who int, rusage *Rusage) (err error) -//sysnb Getsid(pid int) (sid int, err error) -//sysnb Gettimeofday(tv *Timeval) (err error) -//sysnb Getuid() (uid int) -//sys Issetugid() (tainted bool) -//sys Kill(pid int, signum syscall.Signal) (err error) -//sys Kqueue() (fd int, err error) -//sys Lchown(path string, uid int, gid int) (err error) -//sys Link(path string, link string) (err error) -//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) -//sys Listen(s int, backlog int) (err error) -//sys Lstat(path string, stat *Stat_t) (err error) -//sys Mkdir(path string, mode uint32) (err error) -//sys Mkdirat(dirfd int, path string, mode uint32) (err error) -//sys Mkfifo(path string, mode uint32) (err error) -//sys Mknod(path string, mode uint32, dev int) (err error) -//sys Mknodat(fd int, path string, mode uint32, dev int) (err error) -//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) -//sys Open(path string, mode int, perm uint32) (fd int, err error) -//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) -//sys Pathconf(path string, name int) (val int, err error) -//sys read(fd int, p []byte) (n int, err error) -//sys Readlink(path string, buf []byte) (n int, err error) -//sys Rename(from string, to string) (err error) -//sys Renameat(fromfd int, from string, tofd int, to string) (err error) -//sys Revoke(path string) (err error) -//sys Rmdir(path string) (err error) -//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK -//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) -//sysnb Setegid(egid int) (err error) -//sysnb Seteuid(euid int) (err error) -//sysnb Setgid(gid int) (err error) -//sys Setlogin(name string) (err error) -//sysnb Setpgid(pid int, pgid int) (err error) -//sys Setpriority(which int, who int, prio int) (err error) -//sysnb Setregid(rgid int, egid int) (err error) -//sysnb Setreuid(ruid int, euid int) (err error) -//sysnb Setresgid(rgid int, egid int, sgid int) (err error) -//sysnb Setresuid(ruid int, euid int, suid int) (err error) -//sysnb Setrlimit(which int, lim *Rlimit) (err error) -//sysnb Setsid() (pid int, err error) -//sysnb Settimeofday(tp *Timeval) (err error) -//sysnb Setuid(uid int) (err error) -//sys Stat(path string, stat *Stat_t) (err error) -//sys Statfs(path string, stat *Statfs_t) (err error) -//sys Symlink(path string, link string) (err error) -//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) -//sys Sync() (err error) -//sys Truncate(path string, length int64) (err error) -//sys Umask(newmask int) (oldmask int) -//sys Undelete(path string) (err error) -//sys Unlink(path string) (err error) -//sys Unlinkat(dirfd int, path string, flags int) (err error) -//sys Unmount(path string, flags int) (err error) -//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 readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ -//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE -//sys accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) -//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) - -/* - * Unimplemented - * TODO(jsing): Update this list for DragonFly. - */ -// Profil -// Sigaction -// Sigprocmask -// Getlogin -// Sigpending -// Sigaltstack -// Reboot -// Execve -// Vfork -// Sbrk -// Sstk -// Ovadvise -// Mincore -// Setitimer -// Swapon -// Select -// Sigsuspend -// Readv -// Writev -// Nfssvc -// Getfh -// Quotactl -// Mount -// Csops -// Waitid -// Add_profil -// Kdebug_trace -// Sigreturn -// Atsocket -// Kqueue_from_portset_np -// Kqueue_portset -// Getattrlist -// Setattrlist -// Getdirentriesattr -// Searchfs -// Delete -// Copyfile -// Watchevent -// Waitevent -// Modwatch -// Getxattr -// Fgetxattr -// Setxattr -// Fsetxattr -// Removexattr -// Fremovexattr -// Listxattr -// Flistxattr -// Fsctl -// Initgroups -// Posix_spawn -// Nfsclnt -// Fhopen -// Minherit -// Semsys -// Msgsys -// Shmsys -// Semctl -// Semget -// Semop -// Msgctl -// Msgget -// Msgsnd -// Msgrcv -// Shmat -// Shmctl -// Shmdt -// Shmget -// Shm_open -// Shm_unlink -// Sem_open -// Sem_close -// Sem_unlink -// Sem_wait -// Sem_trywait -// Sem_post -// Sem_getvalue -// Sem_init -// Sem_destroy -// Open_extended -// Umask_extended -// Stat_extended -// Lstat_extended -// Fstat_extended -// Chmod_extended -// Fchmod_extended -// Access_extended -// Settid -// Gettid -// Setsgroups -// Getsgroups -// Setwgroups -// Getwgroups -// Mkfifo_extended -// Mkdir_extended -// Identitysvc -// Shared_region_check_np -// Shared_region_map_np -// __pthread_mutex_destroy -// __pthread_mutex_init -// __pthread_mutex_lock -// __pthread_mutex_trylock -// __pthread_mutex_unlock -// __pthread_cond_init -// __pthread_cond_destroy -// __pthread_cond_broadcast -// __pthread_cond_signal -// Setsid_with_pid -// __pthread_cond_timedwait -// Aio_fsync -// Aio_return -// Aio_suspend -// Aio_cancel -// Aio_error -// Aio_read -// Aio_write -// Lio_listio -// __pthread_cond_wait -// Iopolicysys -// __pthread_kill -// __pthread_sigmask -// __sigwait -// __disable_threadsignal -// __pthread_markcancel -// __pthread_canceled -// __semwait_signal -// Proc_info -// Stat64_extended -// Lstat64_extended -// Fstat64_extended -// __pthread_chdir -// __pthread_fchdir -// Audit -// Auditon -// Getauid -// Setauid -// Getaudit -// Setaudit -// Getaudit_addr -// Setaudit_addr -// Auditctl -// Bsdthread_create -// Bsdthread_terminate -// Stack_snapshot -// Bsdthread_register -// Workq_open -// Workq_ops -// __mac_execve -// __mac_syscall -// __mac_get_file -// __mac_set_file -// __mac_get_link -// __mac_set_link -// __mac_get_proc -// __mac_set_proc -// __mac_get_fd -// __mac_set_fd -// __mac_get_pid -// __mac_get_lcid -// __mac_get_lctx -// __mac_set_lctx -// Setlcid -// Read_nocancel -// Write_nocancel -// Open_nocancel -// Close_nocancel -// Wait4_nocancel -// Recvmsg_nocancel -// Sendmsg_nocancel -// Recvfrom_nocancel -// Accept_nocancel -// Fcntl_nocancel -// Select_nocancel -// Fsync_nocancel -// Connect_nocancel -// Sigsuspend_nocancel -// Readv_nocancel -// Writev_nocancel -// Sendto_nocancel -// Pread_nocancel -// Pwrite_nocancel -// Waitid_nocancel -// Msgsnd_nocancel -// Msgrcv_nocancel -// Sem_wait_nocancel -// Aio_suspend_nocancel -// __sigwait_nocancel -// __semwait_signal_nocancel -// __mac_mount -// __mac_get_mount -// __mac_getfsstat diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go deleted file mode 100644 index 4e2d321..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go +++ /dev/null @@ -1,57 +0,0 @@ -// 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 amd64 && dragonfly -// +build amd64,dragonfly - -package unix - -import ( - "syscall" - "unsafe" -) - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: nsec} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: usec} -} - -func SetKevent(k *Kevent_t, fd, mode, flags int) { - k.Ident = uint64(fd) - k.Filter = int16(mode) - k.Flags = uint16(flags) -} - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint64(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = int32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} - -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - var writtenOut uint64 = 0 - _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0) - - written = int(writtenOut) - - if e1 != 0 { - err = e1 - } - return -} - -func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd.go b/vendor/golang.org/x/sys/unix/syscall_freebsd.go deleted file mode 100644 index de7c23e..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_freebsd.go +++ /dev/null @@ -1,614 +0,0 @@ -// Copyright 2009,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. - -// FreeBSD system calls. -// This file is compiled as ordinary Go code, -// but it is also input to mksyscall, -// which parses the //sys lines and generates system call stubs. -// Note that sometimes we use a lowercase //sys name and wrap -// it in our own nicer implementation, either here or in -// syscall_bsd.go or syscall_unix.go. - -package unix - -import ( - "sync" - "unsafe" -) - -// See https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/versions.html. -var ( - osreldateOnce sync.Once - osreldate uint32 -) - -func supportsABI(ver uint32) bool { - osreldateOnce.Do(func() { osreldate, _ = SysctlUint32("kern.osreldate") }) - return osreldate >= ver -} - -// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. -type SockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [46]int8 - raw RawSockaddrDatalink -} - -func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { - return nil, EAFNOSUPPORT -} - -// Translate "kern.hostname" to []_C_int{0,1,2,3}. -func nametomib(name string) (mib []_C_int, err error) { - const siz = unsafe.Sizeof(mib[0]) - - // NOTE(rsc): It seems strange to set the buffer to have - // size CTL_MAXNAME+2 but use only CTL_MAXNAME - // as the size. I don't know why the +2 is here, but the - // kernel uses +2 for its own implementation of this function. - // I am scared that if we don't include the +2 here, the kernel - // will silently write 2 words farther than we specify - // and we'll get memory corruption. - var buf [CTL_MAXNAME + 2]_C_int - n := uintptr(CTL_MAXNAME) * siz - - p := (*byte)(unsafe.Pointer(&buf[0])) - bytes, err := ByteSliceFromString(name) - if err != nil { - return nil, err - } - - // Magic sysctl: "setting" 0.3 to a string name - // lets you read back the array of integers form. - if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil { - return nil, err - } - return buf[0 : n/siz], nil -} - -func direntIno(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) -} - -func direntReclen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) -} - -func direntNamlen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) -} - -func Pipe(p []int) (err error) { - return Pipe2(p, 0) -} - -//sysnb pipe2(p *[2]_C_int, flags int) (err error) - -func Pipe2(p []int, flags int) error { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err := pipe2(&pp, flags) - if err == nil { - p[0] = int(pp[0]) - p[1] = int(pp[1]) - } - return err -} - -func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) { - var value IPMreqn - vallen := _Socklen(SizeofIPMreqn) - errno := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) - return &value, errno -} - -func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) { - return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) -} - -// GetsockoptXucred is a getsockopt wrapper that returns an Xucred struct. -// The usual level and opt are SOL_LOCAL and LOCAL_PEERCRED, respectively. -func GetsockoptXucred(fd, level, opt int) (*Xucred, error) { - x := new(Xucred) - vallen := _Socklen(SizeofXucred) - err := getsockopt(fd, level, opt, unsafe.Pointer(x), &vallen) - return x, err -} - -func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) { - var rsa RawSockaddrAny - var len _Socklen = SizeofSockaddrAny - nfd, err = accept4(fd, &rsa, &len, flags) - if err != nil { - return - } - if len > SizeofSockaddrAny { - panic("RawSockaddrAny too small") - } - sa, err = anyToSockaddr(fd, &rsa) - if err != nil { - Close(nfd) - nfd = 0 - } - return -} - -//sys Getcwd(buf []byte) (n int, err error) = SYS___GETCWD - -func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { - var ( - _p0 unsafe.Pointer - bufsize uintptr - ) - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) - } - r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -//sys ioctl(fd int, req uint, arg uintptr) (err error) - -//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL - -func Uname(uname *Utsname) error { - mib := []_C_int{CTL_KERN, KERN_OSTYPE} - n := unsafe.Sizeof(uname.Sysname) - if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil { - return err - } - - mib = []_C_int{CTL_KERN, KERN_HOSTNAME} - n = unsafe.Sizeof(uname.Nodename) - if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil { - return err - } - - mib = []_C_int{CTL_KERN, KERN_OSRELEASE} - n = unsafe.Sizeof(uname.Release) - if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil { - return err - } - - mib = []_C_int{CTL_KERN, KERN_VERSION} - n = unsafe.Sizeof(uname.Version) - if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil { - return err - } - - // The version might have newlines or tabs in it, convert them to - // spaces. - for i, b := range uname.Version { - if b == '\n' || b == '\t' { - if i == len(uname.Version)-1 { - uname.Version[i] = 0 - } else { - uname.Version[i] = ' ' - } - } - } - - mib = []_C_int{CTL_HW, HW_MACHINE} - n = unsafe.Sizeof(uname.Machine) - if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil { - return err - } - - return nil -} - -func Stat(path string, st *Stat_t) (err error) { - return Fstatat(AT_FDCWD, path, st, 0) -} - -func Lstat(path string, st *Stat_t) (err error) { - return Fstatat(AT_FDCWD, path, st, AT_SYMLINK_NOFOLLOW) -} - -func Getdents(fd int, buf []byte) (n int, err error) { - return Getdirentries(fd, buf, nil) -} - -func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { - if basep == nil || unsafe.Sizeof(*basep) == 8 { - return getdirentries(fd, buf, (*uint64)(unsafe.Pointer(basep))) - } - // The syscall needs a 64-bit base. On 32-bit machines - // we can't just use the basep passed in. See #32498. - var base uint64 = uint64(*basep) - n, err = getdirentries(fd, buf, &base) - *basep = uintptr(base) - if base>>32 != 0 { - // We can't stuff the base back into a uintptr, so any - // future calls would be suspect. Generate an error. - // EIO is allowed by getdirentries. - err = EIO - } - return -} - -func Mknod(path string, mode uint32, dev uint64) (err error) { - return Mknodat(AT_FDCWD, path, mode, dev) -} - -func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - if raceenabled { - raceReleaseMerge(unsafe.Pointer(&ioSync)) - } - return sendfile(outfd, infd, offset, count) -} - -//sys ptrace(request int, pid int, addr uintptr, data int) (err error) - -func PtraceAttach(pid int) (err error) { - return ptrace(PT_ATTACH, pid, 0, 0) -} - -func PtraceCont(pid int, signal int) (err error) { - return ptrace(PT_CONTINUE, pid, 1, signal) -} - -func PtraceDetach(pid int) (err error) { - return ptrace(PT_DETACH, pid, 1, 0) -} - -func PtraceGetFpRegs(pid int, fpregsout *FpReg) (err error) { - return ptrace(PT_GETFPREGS, pid, uintptr(unsafe.Pointer(fpregsout)), 0) -} - -func PtraceGetRegs(pid int, regsout *Reg) (err error) { - return ptrace(PT_GETREGS, pid, uintptr(unsafe.Pointer(regsout)), 0) -} - -func PtraceLwpEvents(pid int, enable int) (err error) { - return ptrace(PT_LWP_EVENTS, pid, 0, enable) -} - -func PtraceLwpInfo(pid int, info uintptr) (err error) { - return ptrace(PT_LWPINFO, pid, info, int(unsafe.Sizeof(PtraceLwpInfoStruct{}))) -} - -func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) { - return PtraceIO(PIOD_READ_D, pid, addr, out, SizeofLong) -} - -func PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) { - return PtraceIO(PIOD_READ_I, pid, addr, out, SizeofLong) -} - -func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) { - return PtraceIO(PIOD_WRITE_D, pid, addr, data, SizeofLong) -} - -func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) { - return PtraceIO(PIOD_WRITE_I, pid, addr, data, SizeofLong) -} - -func PtraceSetRegs(pid int, regs *Reg) (err error) { - return ptrace(PT_SETREGS, pid, uintptr(unsafe.Pointer(regs)), 0) -} - -func PtraceSingleStep(pid int) (err error) { - return ptrace(PT_STEP, pid, 1, 0) -} - -/* - * Exposed directly - */ -//sys Access(path string, mode uint32) (err error) -//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) -//sys CapEnter() (err error) -//sys capRightsGet(version int, fd int, rightsp *CapRights) (err error) = SYS___CAP_RIGHTS_GET -//sys capRightsLimit(fd int, rightsp *CapRights) (err error) -//sys Chdir(path string) (err error) -//sys Chflags(path string, flags int) (err error) -//sys Chmod(path string, mode uint32) (err error) -//sys Chown(path string, uid int, gid int) (err error) -//sys Chroot(path string) (err error) -//sys Close(fd int) (err error) -//sys Dup(fd int) (nfd int, err error) -//sys Dup2(from int, to int) (err error) -//sys Exit(code int) -//sys ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) -//sys ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) -//sys ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) -//sys ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) -//sys ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) -//sys ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) -//sys ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) -//sys ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) -//sys ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) -//sys ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) -//sys ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) -//sys ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) -//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE -//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) -//sys Fchdir(fd int) (err error) -//sys Fchflags(fd int, flags int) (err error) -//sys Fchmod(fd int, mode uint32) (err error) -//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) -//sys Fchown(fd int, uid int, gid int) (err error) -//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) -//sys Flock(fd int, how int) (err error) -//sys Fpathconf(fd int, name int) (val int, err error) -//sys Fstat(fd int, stat *Stat_t) (err error) -//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) -//sys Fstatfs(fd int, stat *Statfs_t) (err error) -//sys Fsync(fd int) (err error) -//sys Ftruncate(fd int, length int64) (err error) -//sys getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) -//sys Getdtablesize() (size int) -//sysnb Getegid() (egid int) -//sysnb Geteuid() (uid int) -//sysnb Getgid() (gid int) -//sysnb Getpgid(pid int) (pgid int, err error) -//sysnb Getpgrp() (pgrp int) -//sysnb Getpid() (pid int) -//sysnb Getppid() (ppid int) -//sys Getpriority(which int, who int) (prio int, err error) -//sysnb Getrlimit(which int, lim *Rlimit) (err error) -//sysnb Getrusage(who int, rusage *Rusage) (err error) -//sysnb Getsid(pid int) (sid int, err error) -//sysnb Gettimeofday(tv *Timeval) (err error) -//sysnb Getuid() (uid int) -//sys Issetugid() (tainted bool) -//sys Kill(pid int, signum syscall.Signal) (err error) -//sys Kqueue() (fd int, err error) -//sys Lchown(path string, uid int, gid int) (err error) -//sys Link(path string, link string) (err error) -//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) -//sys Listen(s int, backlog int) (err error) -//sys Mkdir(path string, mode uint32) (err error) -//sys Mkdirat(dirfd int, path string, mode uint32) (err error) -//sys Mkfifo(path string, mode uint32) (err error) -//sys Mknodat(fd int, path string, mode uint32, dev uint64) (err error) -//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) -//sys Open(path string, mode int, perm uint32) (fd int, err error) -//sys Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) -//sys Pathconf(path string, name int) (val int, err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) -//sys read(fd int, p []byte) (n int, err error) -//sys Readlink(path string, buf []byte) (n int, err error) -//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) -//sys Rename(from string, to string) (err error) -//sys Renameat(fromfd int, from string, tofd int, to string) (err error) -//sys Revoke(path string) (err error) -//sys Rmdir(path string) (err error) -//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK -//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) -//sysnb Setegid(egid int) (err error) -//sysnb Seteuid(euid int) (err error) -//sysnb Setgid(gid int) (err error) -//sys Setlogin(name string) (err error) -//sysnb Setpgid(pid int, pgid int) (err error) -//sys Setpriority(which int, who int, prio int) (err error) -//sysnb Setregid(rgid int, egid int) (err error) -//sysnb Setreuid(ruid int, euid int) (err error) -//sysnb Setresgid(rgid int, egid int, sgid int) (err error) -//sysnb Setresuid(ruid int, euid int, suid int) (err error) -//sysnb Setrlimit(which int, lim *Rlimit) (err error) -//sysnb Setsid() (pid int, err error) -//sysnb Settimeofday(tp *Timeval) (err error) -//sysnb Setuid(uid int) (err error) -//sys Statfs(path string, stat *Statfs_t) (err error) -//sys Symlink(path string, link string) (err error) -//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) -//sys Sync() (err error) -//sys Truncate(path string, length int64) (err error) -//sys Umask(newmask int) (oldmask int) -//sys Undelete(path string) (err error) -//sys Unlink(path string) (err error) -//sys Unlinkat(dirfd int, path string, flags int) (err error) -//sys Unmount(path string, flags int) (err error) -//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 readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ -//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE -//sys accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) -//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) - -/* - * Unimplemented - */ -// Profil -// Sigaction -// Sigprocmask -// Getlogin -// Sigpending -// Sigaltstack -// Ioctl -// Reboot -// Execve -// Vfork -// Sbrk -// Sstk -// Ovadvise -// Mincore -// Setitimer -// Swapon -// Select -// Sigsuspend -// Readv -// Writev -// Nfssvc -// Getfh -// Quotactl -// Mount -// Csops -// Waitid -// Add_profil -// Kdebug_trace -// Sigreturn -// Atsocket -// Kqueue_from_portset_np -// Kqueue_portset -// Getattrlist -// Setattrlist -// Getdents -// Getdirentriesattr -// Searchfs -// Delete -// Copyfile -// Watchevent -// Waitevent -// Modwatch -// Fsctl -// Initgroups -// Posix_spawn -// Nfsclnt -// Fhopen -// Minherit -// Semsys -// Msgsys -// Shmsys -// Semctl -// Semget -// Semop -// Msgctl -// Msgget -// Msgsnd -// Msgrcv -// Shmat -// Shmctl -// Shmdt -// Shmget -// Shm_open -// Shm_unlink -// Sem_open -// Sem_close -// Sem_unlink -// Sem_wait -// Sem_trywait -// Sem_post -// Sem_getvalue -// Sem_init -// Sem_destroy -// Open_extended -// Umask_extended -// Stat_extended -// Lstat_extended -// Fstat_extended -// Chmod_extended -// Fchmod_extended -// Access_extended -// Settid -// Gettid -// Setsgroups -// Getsgroups -// Setwgroups -// Getwgroups -// Mkfifo_extended -// Mkdir_extended -// Identitysvc -// Shared_region_check_np -// Shared_region_map_np -// __pthread_mutex_destroy -// __pthread_mutex_init -// __pthread_mutex_lock -// __pthread_mutex_trylock -// __pthread_mutex_unlock -// __pthread_cond_init -// __pthread_cond_destroy -// __pthread_cond_broadcast -// __pthread_cond_signal -// Setsid_with_pid -// __pthread_cond_timedwait -// Aio_fsync -// Aio_return -// Aio_suspend -// Aio_cancel -// Aio_error -// Aio_read -// Aio_write -// Lio_listio -// __pthread_cond_wait -// Iopolicysys -// __pthread_kill -// __pthread_sigmask -// __sigwait -// __disable_threadsignal -// __pthread_markcancel -// __pthread_canceled -// __semwait_signal -// Proc_info -// Stat64_extended -// Lstat64_extended -// Fstat64_extended -// __pthread_chdir -// __pthread_fchdir -// Audit -// Auditon -// Getauid -// Setauid -// Getaudit -// Setaudit -// Getaudit_addr -// Setaudit_addr -// Auditctl -// Bsdthread_create -// Bsdthread_terminate -// Stack_snapshot -// Bsdthread_register -// Workq_open -// Workq_ops -// __mac_execve -// __mac_syscall -// __mac_get_file -// __mac_set_file -// __mac_get_link -// __mac_set_link -// __mac_get_proc -// __mac_set_proc -// __mac_get_fd -// __mac_set_fd -// __mac_get_pid -// __mac_get_lcid -// __mac_get_lctx -// __mac_set_lctx -// Setlcid -// Read_nocancel -// Write_nocancel -// Open_nocancel -// Close_nocancel -// Wait4_nocancel -// Recvmsg_nocancel -// Sendmsg_nocancel -// Recvfrom_nocancel -// Accept_nocancel -// Fcntl_nocancel -// Select_nocancel -// Fsync_nocancel -// Connect_nocancel -// Sigsuspend_nocancel -// Readv_nocancel -// Writev_nocancel -// Sendto_nocancel -// Pread_nocancel -// Pwrite_nocancel -// Waitid_nocancel -// Poll_nocancel -// Msgsnd_nocancel -// Msgrcv_nocancel -// Sem_wait_nocancel -// Aio_suspend_nocancel -// __sigwait_nocancel -// __semwait_signal_nocancel -// __mac_mount -// __mac_get_mount -// __mac_getfsstat diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go deleted file mode 100644 index b11ede8..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go +++ /dev/null @@ -1,67 +0,0 @@ -// 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 386 && freebsd -// +build 386,freebsd - -package unix - -import ( - "syscall" - "unsafe" -) - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: int32(sec), Nsec: int32(nsec)} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: int32(sec), Usec: int32(usec)} -} - -func SetKevent(k *Kevent_t, fd, mode, flags int) { - k.Ident = uint32(fd) - k.Filter = int16(mode) - k.Flags = uint16(flags) -} - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint32(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = int32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} - -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - var writtenOut uint64 = 0 - _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0) - - written = int(writtenOut) - - if e1 != 0 { - err = e1 - } - return -} - -func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) - -func PtraceGetFsBase(pid int, fsbase *int64) (err error) { - return ptrace(PT_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0) -} - -func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) { - ioDesc := PtraceIoDesc{Op: int32(req), Offs: uintptr(unsafe.Pointer(addr)), Addr: uintptr(unsafe.Pointer(&out[0])), Len: uint32(countin)} - err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0) - return int(ioDesc.Len), err -} diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go deleted file mode 100644 index 9ed8eec..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go +++ /dev/null @@ -1,67 +0,0 @@ -// 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 amd64 && freebsd -// +build amd64,freebsd - -package unix - -import ( - "syscall" - "unsafe" -) - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: nsec} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: usec} -} - -func SetKevent(k *Kevent_t, fd, mode, flags int) { - k.Ident = uint64(fd) - k.Filter = int16(mode) - k.Flags = uint16(flags) -} - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint64(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = int32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} - -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - var writtenOut uint64 = 0 - _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0) - - written = int(writtenOut) - - if e1 != 0 { - err = e1 - } - return -} - -func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) - -func PtraceGetFsBase(pid int, fsbase *int64) (err error) { - return ptrace(PT_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0) -} - -func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) { - ioDesc := PtraceIoDesc{Op: int32(req), Offs: uintptr(unsafe.Pointer(addr)), Addr: uintptr(unsafe.Pointer(&out[0])), Len: uint64(countin)} - err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0) - return int(ioDesc.Len), err -} diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go deleted file mode 100644 index f8ac982..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go +++ /dev/null @@ -1,63 +0,0 @@ -// 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 arm && freebsd -// +build arm,freebsd - -package unix - -import ( - "syscall" - "unsafe" -) - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: int32(nsec)} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: int32(usec)} -} - -func SetKevent(k *Kevent_t, fd, mode, flags int) { - k.Ident = uint32(fd) - k.Filter = int16(mode) - k.Flags = uint16(flags) -} - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint32(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = int32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} - -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - var writtenOut uint64 = 0 - _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0) - - written = int(writtenOut) - - if e1 != 0 { - err = e1 - } - return -} - -func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) - -func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) { - ioDesc := PtraceIoDesc{Op: int32(req), Offs: uintptr(unsafe.Pointer(addr)), Addr: uintptr(unsafe.Pointer(&out[0])), Len: uint32(countin)} - err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0) - return int(ioDesc.Len), err -} diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go deleted file mode 100644 index 8e93203..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build arm64 && freebsd -// +build arm64,freebsd - -package unix - -import ( - "syscall" - "unsafe" -) - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: nsec} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: usec} -} - -func SetKevent(k *Kevent_t, fd, mode, flags int) { - k.Ident = uint64(fd) - k.Filter = int16(mode) - k.Flags = uint16(flags) -} - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint64(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = int32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} - -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - var writtenOut uint64 = 0 - _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0) - - written = int(writtenOut) - - if e1 != 0 { - err = e1 - } - return -} - -func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) - -func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) { - ioDesc := PtraceIoDesc{Op: int32(req), Offs: uintptr(unsafe.Pointer(addr)), Addr: uintptr(unsafe.Pointer(&out[0])), Len: uint64(countin)} - err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0) - return int(ioDesc.Len), err -} diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go deleted file mode 100644 index cbe1222..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2022 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build riscv64 && freebsd -// +build riscv64,freebsd - -package unix - -import ( - "syscall" - "unsafe" -) - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: nsec} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: usec} -} - -func SetKevent(k *Kevent_t, fd, mode, flags int) { - k.Ident = uint64(fd) - k.Filter = int16(mode) - k.Flags = uint16(flags) -} - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint64(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = int32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} - -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - var writtenOut uint64 = 0 - _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0) - - written = int(writtenOut) - - if e1 != 0 { - err = e1 - } - return -} - -func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) - -func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) { - ioDesc := PtraceIoDesc{Op: int32(req), Offs: uintptr(unsafe.Pointer(addr)), Addr: uintptr(unsafe.Pointer(&out[0])), Len: uint64(countin)} - err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0) - return int(ioDesc.Len), err -} diff --git a/vendor/golang.org/x/sys/unix/syscall_illumos.go b/vendor/golang.org/x/sys/unix/syscall_illumos.go deleted file mode 100644 index e48244a..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_illumos.go +++ /dev/null @@ -1,185 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// illumos system calls not present on Solaris. - -//go:build amd64 && illumos -// +build amd64,illumos - -package unix - -import ( - "fmt" - "runtime" - "unsafe" -) - -func bytes2iovec(bs [][]byte) []Iovec { - iovecs := make([]Iovec, len(bs)) - for i, b := range bs { - iovecs[i].SetLen(len(b)) - if len(b) > 0 { - iovecs[i].Base = &b[0] - } else { - iovecs[i].Base = (*byte)(unsafe.Pointer(&_zero)) - } - } - return iovecs -} - -//sys readv(fd int, iovs []Iovec) (n int, err error) - -func Readv(fd int, iovs [][]byte) (n int, err error) { - iovecs := bytes2iovec(iovs) - n, err = readv(fd, iovecs) - return n, err -} - -//sys preadv(fd int, iovs []Iovec, off int64) (n int, err error) - -func Preadv(fd int, iovs [][]byte, off int64) (n int, err error) { - iovecs := bytes2iovec(iovs) - n, err = preadv(fd, iovecs, off) - return n, err -} - -//sys writev(fd int, iovs []Iovec) (n int, err error) - -func Writev(fd int, iovs [][]byte) (n int, err error) { - iovecs := bytes2iovec(iovs) - n, err = writev(fd, iovecs) - return n, err -} - -//sys pwritev(fd int, iovs []Iovec, off int64) (n int, err error) - -func Pwritev(fd int, iovs [][]byte, off int64) (n int, err error) { - iovecs := bytes2iovec(iovs) - n, err = pwritev(fd, iovecs, off) - return n, err -} - -//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) = libsocket.accept4 - -func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) { - var rsa RawSockaddrAny - var len _Socklen = SizeofSockaddrAny - nfd, err = accept4(fd, &rsa, &len, flags) - if err != nil { - return - } - if len > SizeofSockaddrAny { - panic("RawSockaddrAny too small") - } - sa, err = anyToSockaddr(fd, &rsa) - if err != nil { - Close(nfd) - nfd = 0 - } - return -} - -//sys putmsg(fd int, clptr *strbuf, dataptr *strbuf, flags int) (err error) - -func Putmsg(fd int, cl []byte, data []byte, flags int) (err error) { - var clp, datap *strbuf - if len(cl) > 0 { - clp = &strbuf{ - Len: int32(len(cl)), - Buf: (*int8)(unsafe.Pointer(&cl[0])), - } - } - if len(data) > 0 { - datap = &strbuf{ - Len: int32(len(data)), - Buf: (*int8)(unsafe.Pointer(&data[0])), - } - } - return putmsg(fd, clp, datap, flags) -} - -//sys getmsg(fd int, clptr *strbuf, dataptr *strbuf, flags *int) (err error) - -func Getmsg(fd int, cl []byte, data []byte) (retCl []byte, retData []byte, flags int, err error) { - var clp, datap *strbuf - if len(cl) > 0 { - clp = &strbuf{ - Maxlen: int32(len(cl)), - Buf: (*int8)(unsafe.Pointer(&cl[0])), - } - } - if len(data) > 0 { - datap = &strbuf{ - Maxlen: int32(len(data)), - Buf: (*int8)(unsafe.Pointer(&data[0])), - } - } - - if err = getmsg(fd, clp, datap, &flags); err != nil { - return nil, nil, 0, err - } - - if len(cl) > 0 { - retCl = cl[:clp.Len] - } - if len(data) > 0 { - retData = data[:datap.Len] - } - return retCl, retData, flags, nil -} - -func IoctlSetIntRetInt(fd int, req uint, arg int) (int, error) { - return ioctlRet(fd, req, uintptr(arg)) -} - -func IoctlSetString(fd int, req uint, val string) error { - bs := make([]byte, len(val)+1) - copy(bs[:len(bs)-1], val) - err := ioctl(fd, req, uintptr(unsafe.Pointer(&bs[0]))) - runtime.KeepAlive(&bs[0]) - return err -} - -// Lifreq Helpers - -func (l *Lifreq) SetName(name string) error { - if len(name) >= len(l.Name) { - return fmt.Errorf("name cannot be more than %d characters", len(l.Name)-1) - } - for i := range name { - l.Name[i] = int8(name[i]) - } - return nil -} - -func (l *Lifreq) SetLifruInt(d int) { - *(*int)(unsafe.Pointer(&l.Lifru[0])) = d -} - -func (l *Lifreq) GetLifruInt() int { - return *(*int)(unsafe.Pointer(&l.Lifru[0])) -} - -func (l *Lifreq) SetLifruUint(d uint) { - *(*uint)(unsafe.Pointer(&l.Lifru[0])) = d -} - -func (l *Lifreq) GetLifruUint() uint { - return *(*uint)(unsafe.Pointer(&l.Lifru[0])) -} - -func IoctlLifreq(fd int, req uint, l *Lifreq) error { - return ioctl(fd, req, uintptr(unsafe.Pointer(l))) -} - -// Strioctl Helpers - -func (s *Strioctl) SetInt(i int) { - s.Len = int32(unsafe.Sizeof(i)) - s.Dp = (*int8)(unsafe.Pointer(&i)) -} - -func IoctlSetStrioctlRetInt(fd int, req uint, s *Strioctl) (int, error) { - return ioctlRet(fd, req, uintptr(unsafe.Pointer(s))) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go deleted file mode 100644 index 4714691..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_linux.go +++ /dev/null @@ -1,2467 +0,0 @@ -// 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. - -// Linux system calls. -// This file is compiled as ordinary Go code, -// but it is also input to mksyscall, -// which parses the //sys lines and generates system call stubs. -// Note that sometimes we use a lowercase //sys name and -// wrap it in our own nicer implementation. - -package unix - -import ( - "encoding/binary" - "strconv" - "syscall" - "time" - "unsafe" -) - -/* - * Wrapped - */ - -func Access(path string, mode uint32) (err error) { - return Faccessat(AT_FDCWD, path, mode, 0) -} - -func Chmod(path string, mode uint32) (err error) { - return Fchmodat(AT_FDCWD, path, mode, 0) -} - -func Chown(path string, uid int, gid int) (err error) { - return Fchownat(AT_FDCWD, path, uid, gid, 0) -} - -func Creat(path string, mode uint32) (fd int, err error) { - return Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode) -} - -func EpollCreate(size int) (fd int, err error) { - if size <= 0 { - return -1, EINVAL - } - return EpollCreate1(0) -} - -//sys FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) -//sys fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) - -func FanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname string) (err error) { - if pathname == "" { - return fanotifyMark(fd, flags, mask, dirFd, nil) - } - p, err := BytePtrFromString(pathname) - if err != nil { - return err - } - return fanotifyMark(fd, flags, mask, dirFd, p) -} - -//sys fchmodat(dirfd int, path string, mode uint32) (err error) - -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - // Linux fchmodat doesn't support the flags parameter. Mimick glibc's behavior - // and check the flags. Otherwise the mode would be applied to the symlink - // destination which is not what the user expects. - if flags&^AT_SYMLINK_NOFOLLOW != 0 { - return EINVAL - } else if flags&AT_SYMLINK_NOFOLLOW != 0 { - return EOPNOTSUPP - } - return fchmodat(dirfd, path, mode) -} - -func InotifyInit() (fd int, err error) { - return InotifyInit1(0) -} - -//sys ioctl(fd int, req uint, arg uintptr) (err error) = SYS_IOCTL -//sys ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL - -// ioctl itself should not be exposed directly, but additional get/set functions -// for specific types are permissible. These are defined in ioctl.go and -// ioctl_linux.go. -// -// The third argument to ioctl is often a pointer but sometimes an integer. -// Callers should use ioctlPtr when the third argument is a pointer and ioctl -// when the third argument is an integer. -// -// TODO: some existing code incorrectly uses ioctl when it should use ioctlPtr. - -//sys Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) - -func Link(oldpath string, newpath string) (err error) { - return Linkat(AT_FDCWD, oldpath, AT_FDCWD, newpath, 0) -} - -func Mkdir(path string, mode uint32) (err error) { - return Mkdirat(AT_FDCWD, path, mode) -} - -func Mknod(path string, mode uint32, dev int) (err error) { - return Mknodat(AT_FDCWD, path, mode, dev) -} - -func Open(path string, mode int, perm uint32) (fd int, err error) { - return openat(AT_FDCWD, path, mode|O_LARGEFILE, perm) -} - -//sys openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) - -func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { - return openat(dirfd, path, flags|O_LARGEFILE, mode) -} - -//sys openat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error) - -func Openat2(dirfd int, path string, how *OpenHow) (fd int, err error) { - return openat2(dirfd, path, how, SizeofOpenHow) -} - -func Pipe(p []int) error { - return Pipe2(p, 0) -} - -//sysnb pipe2(p *[2]_C_int, flags int) (err error) - -func Pipe2(p []int, flags int) error { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err := pipe2(&pp, flags) - if err == nil { - p[0] = int(pp[0]) - p[1] = int(pp[1]) - } - return err -} - -//sys ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) - -func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { - if len(fds) == 0 { - return ppoll(nil, 0, timeout, sigmask) - } - return ppoll(&fds[0], len(fds), timeout, sigmask) -} - -func Poll(fds []PollFd, timeout int) (n int, err error) { - var ts *Timespec - if timeout >= 0 { - ts = new(Timespec) - *ts = NsecToTimespec(int64(timeout) * 1e6) - } - return Ppoll(fds, ts, nil) -} - -//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) - -func Readlink(path string, buf []byte) (n int, err error) { - return Readlinkat(AT_FDCWD, path, buf) -} - -func Rename(oldpath string, newpath string) (err error) { - return Renameat(AT_FDCWD, oldpath, AT_FDCWD, newpath) -} - -func Rmdir(path string) error { - return Unlinkat(AT_FDCWD, path, AT_REMOVEDIR) -} - -//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) - -func Symlink(oldpath string, newpath string) (err error) { - return Symlinkat(oldpath, AT_FDCWD, newpath) -} - -func Unlink(path string) error { - return Unlinkat(AT_FDCWD, path, 0) -} - -//sys Unlinkat(dirfd int, path string, flags int) (err error) - -func Utimes(path string, tv []Timeval) error { - if tv == nil { - err := utimensat(AT_FDCWD, path, nil, 0) - if err != ENOSYS { - return err - } - return utimes(path, nil) - } - if len(tv) != 2 { - return EINVAL - } - var ts [2]Timespec - ts[0] = NsecToTimespec(TimevalToNsec(tv[0])) - ts[1] = NsecToTimespec(TimevalToNsec(tv[1])) - err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) - if err != ENOSYS { - return err - } - return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) -} - -//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) - -func UtimesNano(path string, ts []Timespec) error { - return UtimesNanoAt(AT_FDCWD, path, ts, 0) -} - -func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { - if ts == nil { - return utimensat(dirfd, path, nil, flags) - } - if len(ts) != 2 { - return EINVAL - } - return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) -} - -func Futimesat(dirfd int, path string, tv []Timeval) error { - if tv == nil { - return futimesat(dirfd, path, nil) - } - if len(tv) != 2 { - return EINVAL - } - return futimesat(dirfd, path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) -} - -func Futimes(fd int, tv []Timeval) (err error) { - // Believe it or not, this is the best we can do on Linux - // (and is what glibc does). - return Utimes("/proc/self/fd/"+strconv.Itoa(fd), tv) -} - -const ImplementsGetwd = true - -//sys Getcwd(buf []byte) (n int, err error) - -func Getwd() (wd string, err error) { - var buf [PathMax]byte - n, err := Getcwd(buf[0:]) - if err != nil { - return "", err - } - // Getcwd returns the number of bytes written to buf, including the NUL. - if n < 1 || n > len(buf) || buf[n-1] != 0 { - return "", EINVAL - } - // In some cases, Linux can return a path that starts with the - // "(unreachable)" prefix, which can potentially be a valid relative - // path. To work around that, return ENOENT if path is not absolute. - if buf[0] != '/' { - return "", ENOENT - } - - return string(buf[0 : n-1]), nil -} - -func Getgroups() (gids []int, err error) { - n, err := getgroups(0, nil) - if err != nil { - return nil, err - } - if n == 0 { - return nil, nil - } - - // Sanity check group count. Max is 1<<16 on Linux. - if n < 0 || n > 1<<20 { - return nil, EINVAL - } - - a := make([]_Gid_t, n) - n, err = getgroups(n, &a[0]) - if err != nil { - return nil, err - } - gids = make([]int, n) - for i, v := range a[0:n] { - gids[i] = int(v) - } - return -} - -func Setgroups(gids []int) (err error) { - if len(gids) == 0 { - return setgroups(0, nil) - } - - a := make([]_Gid_t, len(gids)) - for i, v := range gids { - a[i] = _Gid_t(v) - } - return setgroups(len(a), &a[0]) -} - -type WaitStatus uint32 - -// Wait status is 7 bits at bottom, either 0 (exited), -// 0x7F (stopped), or a signal number that caused an exit. -// The 0x80 bit is whether there was a core dump. -// An extra number (exit code, signal causing a stop) -// is in the high bits. At least that's the idea. -// There are various irregularities. For example, the -// "continued" status is 0xFFFF, distinguishing itself -// from stopped via the core dump bit. - -const ( - mask = 0x7F - core = 0x80 - exited = 0x00 - stopped = 0x7F - shift = 8 -) - -func (w WaitStatus) Exited() bool { return w&mask == exited } - -func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != exited } - -func (w WaitStatus) Stopped() bool { return w&0xFF == stopped } - -func (w WaitStatus) Continued() bool { return w == 0xFFFF } - -func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 } - -func (w WaitStatus) ExitStatus() int { - if !w.Exited() { - return -1 - } - return int(w>>shift) & 0xFF -} - -func (w WaitStatus) Signal() syscall.Signal { - if !w.Signaled() { - return -1 - } - return syscall.Signal(w & mask) -} - -func (w WaitStatus) StopSignal() syscall.Signal { - if !w.Stopped() { - return -1 - } - return syscall.Signal(w>>shift) & 0xFF -} - -func (w WaitStatus) TrapCause() int { - if w.StopSignal() != SIGTRAP { - return -1 - } - return int(w>>shift) >> 8 -} - -//sys wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) - -func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { - var status _C_int - wpid, err = wait4(pid, &status, options, rusage) - if wstatus != nil { - *wstatus = WaitStatus(status) - } - return -} - -//sys Waitid(idType int, id int, info *Siginfo, options int, rusage *Rusage) (err error) - -func Mkfifo(path string, mode uint32) error { - return Mknod(path, mode|S_IFIFO, 0) -} - -func Mkfifoat(dirfd int, path string, mode uint32) error { - return Mknodat(dirfd, path, mode|S_IFIFO, 0) -} - -func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { - if sa.Port < 0 || sa.Port > 0xFFFF { - return nil, 0, 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), SizeofSockaddrInet4, nil -} - -func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { - if sa.Port < 0 || sa.Port > 0xFFFF { - return nil, 0, 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), SizeofSockaddrInet6, nil -} - -func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { - name := sa.Name - n := len(name) - if n >= len(sa.raw.Path) { - return nil, 0, 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 := _Socklen(2) - if n > 0 { - sl += _Socklen(n) + 1 - } - if sa.raw.Path[0] == '@' { - sa.raw.Path[0] = 0 - // Don't count trailing NUL for abstract address. - sl-- - } - - return unsafe.Pointer(&sa.raw), sl, nil -} - -// SockaddrLinklayer implements the Sockaddr interface for AF_PACKET type sockets. -type SockaddrLinklayer struct { - Protocol uint16 - Ifindex int - Hatype uint16 - Pkttype uint8 - Halen uint8 - Addr [8]byte - raw RawSockaddrLinklayer -} - -func (sa *SockaddrLinklayer) sockaddr() (unsafe.Pointer, _Socklen, error) { - if sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff { - return nil, 0, EINVAL - } - sa.raw.Family = AF_PACKET - sa.raw.Protocol = sa.Protocol - sa.raw.Ifindex = int32(sa.Ifindex) - sa.raw.Hatype = sa.Hatype - sa.raw.Pkttype = sa.Pkttype - sa.raw.Halen = sa.Halen - sa.raw.Addr = sa.Addr - return unsafe.Pointer(&sa.raw), SizeofSockaddrLinklayer, nil -} - -// SockaddrNetlink implements the Sockaddr interface for AF_NETLINK type sockets. -type SockaddrNetlink struct { - Family uint16 - Pad uint16 - Pid uint32 - Groups uint32 - raw RawSockaddrNetlink -} - -func (sa *SockaddrNetlink) sockaddr() (unsafe.Pointer, _Socklen, error) { - sa.raw.Family = AF_NETLINK - sa.raw.Pad = sa.Pad - sa.raw.Pid = sa.Pid - sa.raw.Groups = sa.Groups - return unsafe.Pointer(&sa.raw), SizeofSockaddrNetlink, nil -} - -// SockaddrHCI implements the Sockaddr interface for AF_BLUETOOTH type sockets -// using the HCI protocol. -type SockaddrHCI struct { - Dev uint16 - Channel uint16 - raw RawSockaddrHCI -} - -func (sa *SockaddrHCI) sockaddr() (unsafe.Pointer, _Socklen, error) { - sa.raw.Family = AF_BLUETOOTH - sa.raw.Dev = sa.Dev - sa.raw.Channel = sa.Channel - return unsafe.Pointer(&sa.raw), SizeofSockaddrHCI, nil -} - -// SockaddrL2 implements the Sockaddr interface for AF_BLUETOOTH type sockets -// using the L2CAP protocol. -type SockaddrL2 struct { - PSM uint16 - CID uint16 - Addr [6]uint8 - AddrType uint8 - raw RawSockaddrL2 -} - -func (sa *SockaddrL2) sockaddr() (unsafe.Pointer, _Socklen, error) { - sa.raw.Family = AF_BLUETOOTH - 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++ { - sa.raw.Bdaddr[i] = sa.Addr[len(sa.Addr)-1-i] - } - cid := (*[2]byte)(unsafe.Pointer(&sa.raw.Cid)) - cid[0] = byte(sa.CID) - cid[1] = byte(sa.CID >> 8) - sa.raw.Bdaddr_type = sa.AddrType - return unsafe.Pointer(&sa.raw), SizeofSockaddrL2, nil -} - -// SockaddrRFCOMM implements the Sockaddr interface for AF_BLUETOOTH type sockets -// using the RFCOMM protocol. -// -// Server example: -// -// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM) -// _ = unix.Bind(fd, &unix.SockaddrRFCOMM{ -// Channel: 1, -// Addr: [6]uint8{0, 0, 0, 0, 0, 0}, // BDADDR_ANY or 00:00:00:00:00:00 -// }) -// _ = Listen(fd, 1) -// nfd, sa, _ := Accept(fd) -// fmt.Printf("conn addr=%v fd=%d", sa.(*unix.SockaddrRFCOMM).Addr, nfd) -// Read(nfd, buf) -// -// Client example: -// -// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM) -// _ = Connect(fd, &SockaddrRFCOMM{ -// Channel: 1, -// Addr: [6]byte{0x11, 0x22, 0x33, 0xaa, 0xbb, 0xcc}, // CC:BB:AA:33:22:11 -// }) -// Write(fd, []byte(`hello`)) -type SockaddrRFCOMM struct { - // Addr represents a bluetooth address, byte ordering is little-endian. - Addr [6]uint8 - - // Channel is a designated bluetooth channel, only 1-30 are available for use. - // Since Linux 2.6.7 and further zero value is the first available channel. - Channel uint8 - - raw RawSockaddrRFCOMM -} - -func (sa *SockaddrRFCOMM) sockaddr() (unsafe.Pointer, _Socklen, error) { - sa.raw.Family = AF_BLUETOOTH - sa.raw.Channel = sa.Channel - sa.raw.Bdaddr = sa.Addr - return unsafe.Pointer(&sa.raw), SizeofSockaddrRFCOMM, nil -} - -// SockaddrCAN implements the Sockaddr interface for AF_CAN type sockets. -// The RxID and TxID fields are used for transport protocol addressing in -// (CAN_TP16, CAN_TP20, CAN_MCNET, and CAN_ISOTP), they can be left with -// zero values for CAN_RAW and CAN_BCM sockets as they have no meaning. -// -// The SockaddrCAN struct must be bound to the socket file descriptor -// using Bind before the CAN socket can be used. -// -// // Read one raw CAN frame -// fd, _ := Socket(AF_CAN, SOCK_RAW, CAN_RAW) -// addr := &SockaddrCAN{Ifindex: index} -// Bind(fd, addr) -// frame := make([]byte, 16) -// Read(fd, frame) -// -// The full SocketCAN documentation can be found in the linux kernel -// archives at: https://www.kernel.org/doc/Documentation/networking/can.txt -type SockaddrCAN struct { - Ifindex int - RxID uint32 - TxID uint32 - raw RawSockaddrCAN -} - -func (sa *SockaddrCAN) sockaddr() (unsafe.Pointer, _Socklen, error) { - if sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff { - return nil, 0, EINVAL - } - sa.raw.Family = AF_CAN - sa.raw.Ifindex = int32(sa.Ifindex) - rx := (*[4]byte)(unsafe.Pointer(&sa.RxID)) - for i := 0; i < 4; i++ { - sa.raw.Addr[i] = rx[i] - } - tx := (*[4]byte)(unsafe.Pointer(&sa.TxID)) - for i := 0; i < 4; i++ { - sa.raw.Addr[i+4] = tx[i] - } - return unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil -} - -// SockaddrCANJ1939 implements the Sockaddr interface for AF_CAN using J1939 -// protocol (https://en.wikipedia.org/wiki/SAE_J1939). For more information -// on the purposes of the fields, check the official linux kernel documentation -// available here: https://www.kernel.org/doc/Documentation/networking/j1939.rst -type SockaddrCANJ1939 struct { - Ifindex int - Name uint64 - PGN uint32 - Addr uint8 - raw RawSockaddrCAN -} - -func (sa *SockaddrCANJ1939) sockaddr() (unsafe.Pointer, _Socklen, error) { - if sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff { - return nil, 0, EINVAL - } - sa.raw.Family = AF_CAN - sa.raw.Ifindex = int32(sa.Ifindex) - n := (*[8]byte)(unsafe.Pointer(&sa.Name)) - for i := 0; i < 8; i++ { - sa.raw.Addr[i] = n[i] - } - p := (*[4]byte)(unsafe.Pointer(&sa.PGN)) - for i := 0; i < 4; i++ { - sa.raw.Addr[i+8] = p[i] - } - sa.raw.Addr[12] = sa.Addr - return unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil -} - -// SockaddrALG implements the Sockaddr interface for AF_ALG type sockets. -// SockaddrALG enables userspace access to the Linux kernel's cryptography -// subsystem. The Type and Name fields specify which type of hash or cipher -// should be used with a given socket. -// -// To create a file descriptor that provides access to a hash or cipher, both -// Bind and Accept must be used. Once the setup process is complete, input -// data can be written to the socket, processed by the kernel, and then read -// back as hash output or ciphertext. -// -// Here is an example of using an AF_ALG socket with SHA1 hashing. -// The initial socket setup process is as follows: -// -// // Open a socket to perform SHA1 hashing. -// fd, _ := unix.Socket(unix.AF_ALG, unix.SOCK_SEQPACKET, 0) -// addr := &unix.SockaddrALG{Type: "hash", Name: "sha1"} -// unix.Bind(fd, addr) -// // Note: unix.Accept does not work at this time; must invoke accept() -// // manually using unix.Syscall. -// hashfd, _, _ := unix.Syscall(unix.SYS_ACCEPT, uintptr(fd), 0, 0) -// -// Once a file descriptor has been returned from Accept, it may be used to -// perform SHA1 hashing. The descriptor is not safe for concurrent use, but -// may be re-used repeatedly with subsequent Write and Read operations. -// -// When hashing a small byte slice or string, a single Write and Read may -// be used: -// -// // Assume hashfd is already configured using the setup process. -// hash := os.NewFile(hashfd, "sha1") -// // Hash an input string and read the results. Each Write discards -// // previous hash state. Read always reads the current state. -// b := make([]byte, 20) -// for i := 0; i < 2; i++ { -// io.WriteString(hash, "Hello, world.") -// hash.Read(b) -// fmt.Println(hex.EncodeToString(b)) -// } -// // Output: -// // 2ae01472317d1935a84797ec1983ae243fc6aa28 -// // 2ae01472317d1935a84797ec1983ae243fc6aa28 -// -// For hashing larger byte slices, or byte streams such as those read from -// a file or socket, use Sendto with MSG_MORE to instruct the kernel to update -// the hash digest instead of creating a new one for a given chunk and finalizing it. -// -// // Assume hashfd and addr are already configured using the setup process. -// hash := os.NewFile(hashfd, "sha1") -// // Hash the contents of a file. -// f, _ := os.Open("/tmp/linux-4.10-rc7.tar.xz") -// b := make([]byte, 4096) -// for { -// n, err := f.Read(b) -// if err == io.EOF { -// break -// } -// unix.Sendto(hashfd, b[:n], unix.MSG_MORE, addr) -// } -// hash.Read(b) -// fmt.Println(hex.EncodeToString(b)) -// // Output: 85cdcad0c06eef66f805ecce353bec9accbeecc5 -// -// For more information, see: http://www.chronox.de/crypto-API/crypto/userspace-if.html. -type SockaddrALG struct { - Type string - Name string - Feature uint32 - Mask uint32 - raw RawSockaddrALG -} - -func (sa *SockaddrALG) sockaddr() (unsafe.Pointer, _Socklen, error) { - // Leave room for NUL byte terminator. - if len(sa.Type) > 13 { - return nil, 0, EINVAL - } - if len(sa.Name) > 63 { - return nil, 0, EINVAL - } - - sa.raw.Family = AF_ALG - sa.raw.Feat = sa.Feature - sa.raw.Mask = sa.Mask - - typ, err := ByteSliceFromString(sa.Type) - if err != nil { - return nil, 0, err - } - name, err := ByteSliceFromString(sa.Name) - if err != nil { - return nil, 0, err - } - - copy(sa.raw.Type[:], typ) - copy(sa.raw.Name[:], name) - - return unsafe.Pointer(&sa.raw), SizeofSockaddrALG, nil -} - -// SockaddrVM implements the Sockaddr interface for AF_VSOCK type sockets. -// SockaddrVM provides access to Linux VM sockets: a mechanism that enables -// bidirectional communication between a hypervisor and its guest virtual -// machines. -type SockaddrVM struct { - // CID and Port specify a context ID and port address for a VM socket. - // Guests have a unique CID, and hosts may have a well-known CID of: - // - VMADDR_CID_HYPERVISOR: refers to the hypervisor process. - // - VMADDR_CID_LOCAL: refers to local communication (loopback). - // - VMADDR_CID_HOST: refers to other processes on the host. - CID uint32 - Port uint32 - Flags uint8 - raw RawSockaddrVM -} - -func (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) { - sa.raw.Family = AF_VSOCK - sa.raw.Port = sa.Port - sa.raw.Cid = sa.CID - sa.raw.Flags = sa.Flags - - return unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil -} - -type SockaddrXDP struct { - Flags uint16 - Ifindex uint32 - QueueID uint32 - SharedUmemFD uint32 - raw RawSockaddrXDP -} - -func (sa *SockaddrXDP) sockaddr() (unsafe.Pointer, _Socklen, error) { - sa.raw.Family = AF_XDP - sa.raw.Flags = sa.Flags - sa.raw.Ifindex = sa.Ifindex - sa.raw.Queue_id = sa.QueueID - sa.raw.Shared_umem_fd = sa.SharedUmemFD - - return unsafe.Pointer(&sa.raw), SizeofSockaddrXDP, nil -} - -// This constant mirrors the #define of PX_PROTO_OE in -// linux/if_pppox.h. We're defining this by hand here instead of -// autogenerating through mkerrors.sh because including -// linux/if_pppox.h causes some declaration conflicts with other -// includes (linux/if_pppox.h includes linux/in.h, which conflicts -// with netinet/in.h). Given that we only need a single zero constant -// out of that file, it's cleaner to just define it by hand here. -const px_proto_oe = 0 - -type SockaddrPPPoE struct { - SID uint16 - Remote []byte - Dev string - raw RawSockaddrPPPoX -} - -func (sa *SockaddrPPPoE) sockaddr() (unsafe.Pointer, _Socklen, error) { - if len(sa.Remote) != 6 { - return nil, 0, EINVAL - } - if len(sa.Dev) > IFNAMSIZ-1 { - return nil, 0, EINVAL - } - - *(*uint16)(unsafe.Pointer(&sa.raw[0])) = AF_PPPOX - // This next field is in host-endian byte order. We can't use the - // same unsafe pointer cast as above, because this value is not - // 32-bit aligned and some architectures don't allow unaligned - // access. - // - // However, the value of px_proto_oe is 0, so we can use - // encoding/binary helpers to write the bytes without worrying - // about the ordering. - binary.BigEndian.PutUint32(sa.raw[2:6], px_proto_oe) - // This field is deliberately big-endian, unlike the previous - // one. The kernel expects SID to be in network byte order. - binary.BigEndian.PutUint16(sa.raw[6:8], sa.SID) - copy(sa.raw[8:14], sa.Remote) - for i := 14; i < 14+IFNAMSIZ; i++ { - sa.raw[i] = 0 - } - copy(sa.raw[14:], sa.Dev) - return unsafe.Pointer(&sa.raw), SizeofSockaddrPPPoX, nil -} - -// SockaddrTIPC implements the Sockaddr interface for AF_TIPC type sockets. -// For more information on TIPC, see: http://tipc.sourceforge.net/. -type SockaddrTIPC struct { - // Scope is the publication scopes when binding service/service range. - // Should be set to TIPC_CLUSTER_SCOPE or TIPC_NODE_SCOPE. - Scope int - - // Addr is the type of address used to manipulate a socket. Addr must be - // one of: - // - *TIPCSocketAddr: "id" variant in the C addr union - // - *TIPCServiceRange: "nameseq" variant in the C addr union - // - *TIPCServiceName: "name" variant in the C addr union - // - // If nil, EINVAL will be returned when the structure is used. - Addr TIPCAddr - - raw RawSockaddrTIPC -} - -// TIPCAddr is implemented by types that can be used as an address for -// SockaddrTIPC. It is only implemented by *TIPCSocketAddr, *TIPCServiceRange, -// and *TIPCServiceName. -type TIPCAddr interface { - tipcAddrtype() uint8 - tipcAddr() [12]byte -} - -func (sa *TIPCSocketAddr) tipcAddr() [12]byte { - var out [12]byte - copy(out[:], (*(*[unsafe.Sizeof(TIPCSocketAddr{})]byte)(unsafe.Pointer(sa)))[:]) - return out -} - -func (sa *TIPCSocketAddr) tipcAddrtype() uint8 { return TIPC_SOCKET_ADDR } - -func (sa *TIPCServiceRange) tipcAddr() [12]byte { - var out [12]byte - copy(out[:], (*(*[unsafe.Sizeof(TIPCServiceRange{})]byte)(unsafe.Pointer(sa)))[:]) - return out -} - -func (sa *TIPCServiceRange) tipcAddrtype() uint8 { return TIPC_SERVICE_RANGE } - -func (sa *TIPCServiceName) tipcAddr() [12]byte { - var out [12]byte - copy(out[:], (*(*[unsafe.Sizeof(TIPCServiceName{})]byte)(unsafe.Pointer(sa)))[:]) - return out -} - -func (sa *TIPCServiceName) tipcAddrtype() uint8 { return TIPC_SERVICE_ADDR } - -func (sa *SockaddrTIPC) sockaddr() (unsafe.Pointer, _Socklen, error) { - if sa.Addr == nil { - return nil, 0, EINVAL - } - sa.raw.Family = AF_TIPC - sa.raw.Scope = int8(sa.Scope) - sa.raw.Addrtype = sa.Addr.tipcAddrtype() - sa.raw.Addr = sa.Addr.tipcAddr() - return unsafe.Pointer(&sa.raw), SizeofSockaddrTIPC, nil -} - -// SockaddrL2TPIP implements the Sockaddr interface for IPPROTO_L2TP/AF_INET sockets. -type SockaddrL2TPIP struct { - Addr [4]byte - ConnId uint32 - raw RawSockaddrL2TPIP -} - -func (sa *SockaddrL2TPIP) sockaddr() (unsafe.Pointer, _Socklen, error) { - sa.raw.Family = AF_INET - sa.raw.Conn_id = sa.ConnId - sa.raw.Addr = sa.Addr - return unsafe.Pointer(&sa.raw), SizeofSockaddrL2TPIP, nil -} - -// SockaddrL2TPIP6 implements the Sockaddr interface for IPPROTO_L2TP/AF_INET6 sockets. -type SockaddrL2TPIP6 struct { - Addr [16]byte - ZoneId uint32 - ConnId uint32 - raw RawSockaddrL2TPIP6 -} - -func (sa *SockaddrL2TPIP6) sockaddr() (unsafe.Pointer, _Socklen, error) { - sa.raw.Family = AF_INET6 - sa.raw.Conn_id = sa.ConnId - sa.raw.Scope_id = sa.ZoneId - sa.raw.Addr = sa.Addr - return unsafe.Pointer(&sa.raw), SizeofSockaddrL2TPIP6, nil -} - -// SockaddrIUCV implements the Sockaddr interface for AF_IUCV sockets. -type SockaddrIUCV struct { - UserID string - Name string - raw RawSockaddrIUCV -} - -func (sa *SockaddrIUCV) sockaddr() (unsafe.Pointer, _Socklen, error) { - sa.raw.Family = AF_IUCV - // 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++ { - sa.raw.Nodeid[i] = ' ' - sa.raw.User_id[i] = ' ' - sa.raw.Name[i] = ' ' - } - if len(sa.UserID) > 8 || len(sa.Name) > 8 { - return nil, 0, EINVAL - } - for i, b := range []byte(sa.UserID[:]) { - sa.raw.User_id[i] = int8(b) - } - for i, b := range []byte(sa.Name[:]) { - sa.raw.Name[i] = int8(b) - } - return unsafe.Pointer(&sa.raw), SizeofSockaddrIUCV, nil -} - -type SockaddrNFC struct { - DeviceIdx uint32 - TargetIdx uint32 - NFCProtocol uint32 - raw RawSockaddrNFC -} - -func (sa *SockaddrNFC) sockaddr() (unsafe.Pointer, _Socklen, error) { - sa.raw.Sa_family = AF_NFC - sa.raw.Dev_idx = sa.DeviceIdx - sa.raw.Target_idx = sa.TargetIdx - sa.raw.Nfc_protocol = sa.NFCProtocol - return unsafe.Pointer(&sa.raw), SizeofSockaddrNFC, nil -} - -type SockaddrNFCLLCP struct { - DeviceIdx uint32 - TargetIdx uint32 - NFCProtocol uint32 - DestinationSAP uint8 - SourceSAP uint8 - ServiceName string - raw RawSockaddrNFCLLCP -} - -func (sa *SockaddrNFCLLCP) sockaddr() (unsafe.Pointer, _Socklen, error) { - sa.raw.Sa_family = AF_NFC - sa.raw.Dev_idx = sa.DeviceIdx - sa.raw.Target_idx = sa.TargetIdx - sa.raw.Nfc_protocol = sa.NFCProtocol - sa.raw.Dsap = sa.DestinationSAP - sa.raw.Ssap = sa.SourceSAP - if len(sa.ServiceName) > len(sa.raw.Service_name) { - return nil, 0, EINVAL - } - copy(sa.raw.Service_name[:], sa.ServiceName) - sa.raw.SetServiceNameLen(len(sa.ServiceName)) - return unsafe.Pointer(&sa.raw), SizeofSockaddrNFCLLCP, nil -} - -var socketProtocol = func(fd int) (int, error) { - return GetsockoptInt(fd, SOL_SOCKET, SO_PROTOCOL) -} - -func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { - switch rsa.Addr.Family { - case AF_NETLINK: - pp := (*RawSockaddrNetlink)(unsafe.Pointer(rsa)) - sa := new(SockaddrNetlink) - sa.Family = pp.Family - sa.Pad = pp.Pad - sa.Pid = pp.Pid - sa.Groups = pp.Groups - return sa, nil - - case AF_PACKET: - pp := (*RawSockaddrLinklayer)(unsafe.Pointer(rsa)) - sa := new(SockaddrLinklayer) - sa.Protocol = pp.Protocol - sa.Ifindex = int(pp.Ifindex) - sa.Hatype = pp.Hatype - sa.Pkttype = pp.Pkttype - sa.Halen = pp.Halen - sa.Addr = pp.Addr - return sa, nil - - 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++ - } - bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] - sa.Name = string(bytes) - return sa, nil - - case AF_INET: - proto, err := socketProtocol(fd) - if err != nil { - return nil, err - } - - switch proto { - case IPPROTO_L2TP: - pp := (*RawSockaddrL2TPIP)(unsafe.Pointer(rsa)) - sa := new(SockaddrL2TPIP) - sa.ConnId = pp.Conn_id - sa.Addr = pp.Addr - return sa, nil - default: - 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: - proto, err := socketProtocol(fd) - if err != nil { - return nil, err - } - - switch proto { - case IPPROTO_L2TP: - pp := (*RawSockaddrL2TPIP6)(unsafe.Pointer(rsa)) - sa := new(SockaddrL2TPIP6) - sa.ConnId = pp.Conn_id - sa.ZoneId = pp.Scope_id - sa.Addr = pp.Addr - return sa, nil - default: - 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 - } - - case AF_VSOCK: - pp := (*RawSockaddrVM)(unsafe.Pointer(rsa)) - sa := &SockaddrVM{ - CID: pp.Cid, - Port: pp.Port, - Flags: pp.Flags, - } - return sa, nil - case AF_BLUETOOTH: - proto, err := socketProtocol(fd) - if err != nil { - return nil, err - } - // only BTPROTO_L2CAP and BTPROTO_RFCOMM can accept connections - switch proto { - case BTPROTO_L2CAP: - pp := (*RawSockaddrL2)(unsafe.Pointer(rsa)) - sa := &SockaddrL2{ - PSM: pp.Psm, - CID: pp.Cid, - Addr: pp.Bdaddr, - AddrType: pp.Bdaddr_type, - } - return sa, nil - case BTPROTO_RFCOMM: - pp := (*RawSockaddrRFCOMM)(unsafe.Pointer(rsa)) - sa := &SockaddrRFCOMM{ - Channel: pp.Channel, - Addr: pp.Bdaddr, - } - return sa, nil - } - case AF_XDP: - pp := (*RawSockaddrXDP)(unsafe.Pointer(rsa)) - sa := &SockaddrXDP{ - Flags: pp.Flags, - Ifindex: pp.Ifindex, - QueueID: pp.Queue_id, - SharedUmemFD: pp.Shared_umem_fd, - } - return sa, nil - case AF_PPPOX: - pp := (*RawSockaddrPPPoX)(unsafe.Pointer(rsa)) - if binary.BigEndian.Uint32(pp[2:6]) != px_proto_oe { - return nil, EINVAL - } - sa := &SockaddrPPPoE{ - SID: binary.BigEndian.Uint16(pp[6:8]), - Remote: pp[8:14], - } - for i := 14; i < 14+IFNAMSIZ; i++ { - if pp[i] == 0 { - sa.Dev = string(pp[14:i]) - break - } - } - return sa, nil - case AF_TIPC: - pp := (*RawSockaddrTIPC)(unsafe.Pointer(rsa)) - - sa := &SockaddrTIPC{ - Scope: int(pp.Scope), - } - - // Determine which union variant is present in pp.Addr by checking - // pp.Addrtype. - switch pp.Addrtype { - case TIPC_SERVICE_RANGE: - sa.Addr = (*TIPCServiceRange)(unsafe.Pointer(&pp.Addr)) - case TIPC_SERVICE_ADDR: - sa.Addr = (*TIPCServiceName)(unsafe.Pointer(&pp.Addr)) - case TIPC_SOCKET_ADDR: - sa.Addr = (*TIPCSocketAddr)(unsafe.Pointer(&pp.Addr)) - default: - return nil, EINVAL - } - - return sa, nil - case AF_IUCV: - pp := (*RawSockaddrIUCV)(unsafe.Pointer(rsa)) - - var user [8]byte - var name [8]byte - - for i := 0; i < 8; i++ { - user[i] = byte(pp.User_id[i]) - name[i] = byte(pp.Name[i]) - } - - sa := &SockaddrIUCV{ - UserID: string(user[:]), - Name: string(name[:]), - } - return sa, nil - - case AF_CAN: - proto, err := socketProtocol(fd) - if err != nil { - return nil, err - } - - pp := (*RawSockaddrCAN)(unsafe.Pointer(rsa)) - - switch proto { - case CAN_J1939: - sa := &SockaddrCANJ1939{ - Ifindex: int(pp.Ifindex), - } - name := (*[8]byte)(unsafe.Pointer(&sa.Name)) - for i := 0; i < 8; i++ { - name[i] = pp.Addr[i] - } - pgn := (*[4]byte)(unsafe.Pointer(&sa.PGN)) - for i := 0; i < 4; i++ { - pgn[i] = pp.Addr[i+8] - } - addr := (*[1]byte)(unsafe.Pointer(&sa.Addr)) - addr[0] = pp.Addr[12] - return sa, nil - default: - sa := &SockaddrCAN{ - Ifindex: int(pp.Ifindex), - } - rx := (*[4]byte)(unsafe.Pointer(&sa.RxID)) - for i := 0; i < 4; i++ { - rx[i] = pp.Addr[i] - } - tx := (*[4]byte)(unsafe.Pointer(&sa.TxID)) - for i := 0; i < 4; i++ { - tx[i] = pp.Addr[i+4] - } - return sa, nil - } - case AF_NFC: - proto, err := socketProtocol(fd) - if err != nil { - return nil, err - } - switch proto { - case NFC_SOCKPROTO_RAW: - pp := (*RawSockaddrNFC)(unsafe.Pointer(rsa)) - sa := &SockaddrNFC{ - DeviceIdx: pp.Dev_idx, - TargetIdx: pp.Target_idx, - NFCProtocol: pp.Nfc_protocol, - } - return sa, nil - case NFC_SOCKPROTO_LLCP: - pp := (*RawSockaddrNFCLLCP)(unsafe.Pointer(rsa)) - if uint64(pp.Service_name_len) > uint64(len(pp.Service_name)) { - return nil, EINVAL - } - sa := &SockaddrNFCLLCP{ - DeviceIdx: pp.Dev_idx, - TargetIdx: pp.Target_idx, - NFCProtocol: pp.Nfc_protocol, - DestinationSAP: pp.Dsap, - SourceSAP: pp.Ssap, - ServiceName: string(pp.Service_name[:pp.Service_name_len]), - } - return sa, nil - default: - return nil, EINVAL - } - } - return nil, EAFNOSUPPORT -} - -func Accept(fd int) (nfd int, sa Sockaddr, err error) { - var rsa RawSockaddrAny - var len _Socklen = SizeofSockaddrAny - nfd, err = accept4(fd, &rsa, &len, 0) - if err != nil { - return - } - sa, err = anyToSockaddr(fd, &rsa) - if err != nil { - Close(nfd) - nfd = 0 - } - return -} - -func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) { - var rsa RawSockaddrAny - var len _Socklen = SizeofSockaddrAny - nfd, err = accept4(fd, &rsa, &len, flags) - if err != nil { - return - } - if len > SizeofSockaddrAny { - panic("RawSockaddrAny too small") - } - sa, err = anyToSockaddr(fd, &rsa) - if err != nil { - Close(nfd) - nfd = 0 - } - return -} - -func Getsockname(fd int) (sa Sockaddr, err error) { - var rsa RawSockaddrAny - var len _Socklen = SizeofSockaddrAny - if err = getsockname(fd, &rsa, &len); err != nil { - return - } - return anyToSockaddr(fd, &rsa) -} - -func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) { - var value IPMreqn - vallen := _Socklen(SizeofIPMreqn) - err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) - return &value, err -} - -func GetsockoptUcred(fd, level, opt int) (*Ucred, error) { - var value Ucred - vallen := _Socklen(SizeofUcred) - err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) - return &value, err -} - -func GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) { - var value TCPInfo - vallen := _Socklen(SizeofTCPInfo) - err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) - return &value, err -} - -// GetsockoptString returns the string value of the socket option opt for the -// socket associated with fd at the given socket level. -func GetsockoptString(fd, level, opt int) (string, error) { - buf := make([]byte, 256) - vallen := _Socklen(len(buf)) - err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen) - if err != nil { - if err == ERANGE { - buf = make([]byte, vallen) - err = getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen) - } - if err != nil { - return "", err - } - } - return string(buf[:vallen-1]), nil -} - -func GetsockoptTpacketStats(fd, level, opt int) (*TpacketStats, error) { - var value TpacketStats - vallen := _Socklen(SizeofTpacketStats) - err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) - return &value, err -} - -func GetsockoptTpacketStatsV3(fd, level, opt int) (*TpacketStatsV3, error) { - var value TpacketStatsV3 - vallen := _Socklen(SizeofTpacketStatsV3) - err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) - return &value, err -} - -func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) { - return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) -} - -func SetsockoptPacketMreq(fd, level, opt int, mreq *PacketMreq) error { - return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) -} - -// SetsockoptSockFprog attaches a classic BPF or an extended BPF program to a -// socket to filter incoming packets. See 'man 7 socket' for usage information. -func SetsockoptSockFprog(fd, level, opt int, fprog *SockFprog) error { - return setsockopt(fd, level, opt, unsafe.Pointer(fprog), unsafe.Sizeof(*fprog)) -} - -func SetsockoptCanRawFilter(fd, level, opt int, filter []CanFilter) error { - var p unsafe.Pointer - if len(filter) > 0 { - p = unsafe.Pointer(&filter[0]) - } - return setsockopt(fd, level, opt, p, uintptr(len(filter)*SizeofCanFilter)) -} - -func SetsockoptTpacketReq(fd, level, opt int, tp *TpacketReq) error { - return setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp)) -} - -func SetsockoptTpacketReq3(fd, level, opt int, tp *TpacketReq3) error { - return setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp)) -} - -func SetsockoptTCPRepairOpt(fd, level, opt int, o []TCPRepairOpt) (err error) { - if len(o) == 0 { - return EINVAL - } - return setsockopt(fd, level, opt, unsafe.Pointer(&o[0]), uintptr(SizeofTCPRepairOpt*len(o))) -} - -// Keyctl Commands (http://man7.org/linux/man-pages/man2/keyctl.2.html) - -// KeyctlInt calls keyctl commands in which each argument is an int. -// These commands are KEYCTL_REVOKE, KEYCTL_CHOWN, KEYCTL_CLEAR, KEYCTL_LINK, -// KEYCTL_UNLINK, KEYCTL_NEGATE, KEYCTL_SET_REQKEY_KEYRING, KEYCTL_SET_TIMEOUT, -// KEYCTL_ASSUME_AUTHORITY, KEYCTL_SESSION_TO_PARENT, KEYCTL_REJECT, -// KEYCTL_INVALIDATE, and KEYCTL_GET_PERSISTENT. -//sys KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) = SYS_KEYCTL - -// KeyctlBuffer calls keyctl commands in which the third and fourth -// arguments are a buffer and its length, respectively. -// These commands are KEYCTL_UPDATE, KEYCTL_READ, and KEYCTL_INSTANTIATE. -//sys KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) = SYS_KEYCTL - -// KeyctlString calls keyctl commands which return a string. -// These commands are KEYCTL_DESCRIBE and KEYCTL_GET_SECURITY. -func KeyctlString(cmd int, id int) (string, error) { - // We must loop as the string data may change in between the syscalls. - // We could allocate a large buffer here to reduce the chance that the - // syscall needs to be called twice; however, this is unnecessary as - // the performance loss is negligible. - var buffer []byte - for { - // Try to fill the buffer with data - length, err := KeyctlBuffer(cmd, id, buffer, 0) - if err != nil { - return "", err - } - - // Check if the data was written - if length <= len(buffer) { - // Exclude the null terminator - return string(buffer[:length-1]), nil - } - - // Make a bigger buffer if needed - buffer = make([]byte, length) - } -} - -// Keyctl commands with special signatures. - -// KeyctlGetKeyringID implements the KEYCTL_GET_KEYRING_ID command. -// See the full documentation at: -// http://man7.org/linux/man-pages/man3/keyctl_get_keyring_ID.3.html -func KeyctlGetKeyringID(id int, create bool) (ringid int, err error) { - createInt := 0 - if create { - createInt = 1 - } - return KeyctlInt(KEYCTL_GET_KEYRING_ID, id, createInt, 0, 0) -} - -// KeyctlSetperm implements the KEYCTL_SETPERM command. The perm value is the -// key handle permission mask as described in the "keyctl setperm" section of -// http://man7.org/linux/man-pages/man1/keyctl.1.html. -// See the full documentation at: -// http://man7.org/linux/man-pages/man3/keyctl_setperm.3.html -func KeyctlSetperm(id int, perm uint32) error { - _, err := KeyctlInt(KEYCTL_SETPERM, id, int(perm), 0, 0) - return err -} - -//sys keyctlJoin(cmd int, arg2 string) (ret int, err error) = SYS_KEYCTL - -// KeyctlJoinSessionKeyring implements the KEYCTL_JOIN_SESSION_KEYRING command. -// See the full documentation at: -// http://man7.org/linux/man-pages/man3/keyctl_join_session_keyring.3.html -func KeyctlJoinSessionKeyring(name string) (ringid int, err error) { - return keyctlJoin(KEYCTL_JOIN_SESSION_KEYRING, name) -} - -//sys keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) = SYS_KEYCTL - -// KeyctlSearch implements the KEYCTL_SEARCH command. -// See the full documentation at: -// http://man7.org/linux/man-pages/man3/keyctl_search.3.html -func KeyctlSearch(ringid int, keyType, description string, destRingid int) (id int, err error) { - return keyctlSearch(KEYCTL_SEARCH, ringid, keyType, description, destRingid) -} - -//sys keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) = SYS_KEYCTL - -// KeyctlInstantiateIOV implements the KEYCTL_INSTANTIATE_IOV command. This -// command is similar to KEYCTL_INSTANTIATE, except that the payload is a slice -// of Iovec (each of which represents a buffer) instead of a single buffer. -// See the full documentation at: -// http://man7.org/linux/man-pages/man3/keyctl_instantiate_iov.3.html -func KeyctlInstantiateIOV(id int, payload []Iovec, ringid int) error { - return keyctlIOV(KEYCTL_INSTANTIATE_IOV, id, payload, ringid) -} - -//sys keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) = SYS_KEYCTL - -// KeyctlDHCompute implements the KEYCTL_DH_COMPUTE command. This command -// computes a Diffie-Hellman shared secret based on the provide params. The -// secret is written to the provided buffer and the returned size is the number -// of bytes written (returning an error if there is insufficient space in the -// buffer). If a nil buffer is passed in, this function returns the minimum -// buffer length needed to store the appropriate data. Note that this differs -// from KEYCTL_READ's behavior which always returns the requested payload size. -// See the full documentation at: -// http://man7.org/linux/man-pages/man3/keyctl_dh_compute.3.html -func KeyctlDHCompute(params *KeyctlDHParams, buffer []byte) (size int, err error) { - return keyctlDH(KEYCTL_DH_COMPUTE, params, buffer) -} - -// KeyctlRestrictKeyring implements the KEYCTL_RESTRICT_KEYRING command. This -// command limits the set of keys that can be linked to the keyring, regardless -// of keyring permissions. The command requires the "setattr" permission. -// -// When called with an empty keyType the command locks the keyring, preventing -// any further keys from being linked to the keyring. -// -// The "asymmetric" keyType defines restrictions requiring key payloads to be -// DER encoded X.509 certificates signed by keys in another keyring. Restrictions -// for "asymmetric" include "builtin_trusted", "builtin_and_secondary_trusted", -// "key_or_keyring:", and "key_or_keyring::chain". -// -// As of Linux 4.12, only the "asymmetric" keyType defines type-specific -// restrictions. -// -// See the full documentation at: -// http://man7.org/linux/man-pages/man3/keyctl_restrict_keyring.3.html -// http://man7.org/linux/man-pages/man2/keyctl.2.html -func KeyctlRestrictKeyring(ringid int, keyType string, restriction string) error { - if keyType == "" { - return keyctlRestrictKeyring(KEYCTL_RESTRICT_KEYRING, ringid) - } - return keyctlRestrictKeyringByType(KEYCTL_RESTRICT_KEYRING, ringid, keyType, restriction) -} - -//sys keyctlRestrictKeyringByType(cmd int, arg2 int, keyType string, restriction string) (err error) = SYS_KEYCTL -//sys keyctlRestrictKeyring(cmd int, arg2 int) (err error) = SYS_KEYCTL - -func recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { - var msg Msghdr - msg.Name = (*byte)(unsafe.Pointer(rsa)) - msg.Namelen = uint32(SizeofSockaddrAny) - var dummy byte - if len(oob) > 0 { - if emptyIovecs(iov) { - var sockType int - sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE) - if err != nil { - return - } - // receive at least one normal byte - if sockType != SOCK_DGRAM { - var iova [1]Iovec - iova[0].Base = &dummy - iova[0].SetLen(1) - iov = iova[:] - } - } - msg.Control = &oob[0] - msg.SetControllen(len(oob)) - } - if len(iov) > 0 { - msg.Iov = &iov[0] - msg.SetIovlen(len(iov)) - } - if n, err = recvmsg(fd, &msg, flags); err != nil { - return - } - oobn = int(msg.Controllen) - recvflags = int(msg.Flags) - return -} - -func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { - var msg Msghdr - msg.Name = (*byte)(ptr) - msg.Namelen = uint32(salen) - var dummy byte - var empty bool - if len(oob) > 0 { - empty = emptyIovecs(iov) - if empty { - var sockType int - sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE) - if err != nil { - return 0, err - } - // send at least one normal byte - if sockType != SOCK_DGRAM { - var iova [1]Iovec - iova[0].Base = &dummy - iova[0].SetLen(1) - } - } - msg.Control = &oob[0] - msg.SetControllen(len(oob)) - } - if len(iov) > 0 { - msg.Iov = &iov[0] - msg.SetIovlen(len(iov)) - } - if n, err = sendmsg(fd, &msg, flags); err != nil { - return 0, err - } - if len(oob) > 0 && empty { - n = 0 - } - return n, nil -} - -// BindToDevice binds the socket associated with fd to device. -func BindToDevice(fd int, device string) (err error) { - return SetsockoptString(fd, SOL_SOCKET, SO_BINDTODEVICE, device) -} - -//sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error) - -func ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err error) { - // The peek requests are machine-size oriented, so we wrap it - // to retrieve arbitrary-length data. - - // The ptrace syscall differs from glibc's ptrace. - // Peeks returns the word in *data, not as the return value. - - var buf [SizeofPtr]byte - - // Leading edge. PEEKTEXT/PEEKDATA don't require aligned - // access (PEEKUSER warns that it might), but if we don't - // align our reads, we might straddle an unmapped page - // boundary and not get the bytes leading up to the page - // boundary. - n := 0 - if addr%SizeofPtr != 0 { - err = ptrace(req, pid, addr-addr%SizeofPtr, uintptr(unsafe.Pointer(&buf[0]))) - if err != nil { - return 0, err - } - n += copy(out, buf[addr%SizeofPtr:]) - out = out[n:] - } - - // Remainder. - for len(out) > 0 { - // We use an internal buffer to guarantee alignment. - // It's not documented if this is necessary, but we're paranoid. - err = ptrace(req, pid, addr+uintptr(n), uintptr(unsafe.Pointer(&buf[0]))) - if err != nil { - return n, err - } - copied := copy(out, buf[0:]) - n += copied - out = out[copied:] - } - - return n, nil -} - -func PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) { - return ptracePeek(PTRACE_PEEKTEXT, pid, addr, out) -} - -func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) { - return ptracePeek(PTRACE_PEEKDATA, pid, addr, out) -} - -func PtracePeekUser(pid int, addr uintptr, out []byte) (count int, err error) { - return ptracePeek(PTRACE_PEEKUSR, pid, addr, out) -} - -func ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (count int, err error) { - // As for ptracePeek, we need to align our accesses to deal - // with the possibility of straddling an invalid page. - - // Leading edge. - n := 0 - if addr%SizeofPtr != 0 { - var buf [SizeofPtr]byte - err = ptrace(peekReq, pid, addr-addr%SizeofPtr, uintptr(unsafe.Pointer(&buf[0]))) - if err != nil { - return 0, err - } - n += copy(buf[addr%SizeofPtr:], data) - word := *((*uintptr)(unsafe.Pointer(&buf[0]))) - err = ptrace(pokeReq, pid, addr-addr%SizeofPtr, word) - if err != nil { - return 0, err - } - data = data[n:] - } - - // Interior. - for len(data) > SizeofPtr { - word := *((*uintptr)(unsafe.Pointer(&data[0]))) - err = ptrace(pokeReq, pid, addr+uintptr(n), word) - if err != nil { - return n, err - } - n += SizeofPtr - data = data[SizeofPtr:] - } - - // Trailing edge. - if len(data) > 0 { - var buf [SizeofPtr]byte - err = ptrace(peekReq, pid, addr+uintptr(n), uintptr(unsafe.Pointer(&buf[0]))) - if err != nil { - return n, err - } - copy(buf[0:], data) - word := *((*uintptr)(unsafe.Pointer(&buf[0]))) - err = ptrace(pokeReq, pid, addr+uintptr(n), word) - if err != nil { - return n, err - } - n += len(data) - } - - return n, nil -} - -func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) { - return ptracePoke(PTRACE_POKETEXT, PTRACE_PEEKTEXT, pid, addr, data) -} - -func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) { - return ptracePoke(PTRACE_POKEDATA, PTRACE_PEEKDATA, pid, addr, data) -} - -func PtracePokeUser(pid int, addr uintptr, data []byte) (count int, err error) { - return ptracePoke(PTRACE_POKEUSR, PTRACE_PEEKUSR, pid, addr, data) -} - -func PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) { - return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) -} - -func PtraceSetRegs(pid int, regs *PtraceRegs) (err error) { - return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) -} - -func PtraceSetOptions(pid int, options int) (err error) { - return ptrace(PTRACE_SETOPTIONS, pid, 0, uintptr(options)) -} - -func PtraceGetEventMsg(pid int) (msg uint, err error) { - var data _C_long - err = ptrace(PTRACE_GETEVENTMSG, pid, 0, uintptr(unsafe.Pointer(&data))) - msg = uint(data) - return -} - -func PtraceCont(pid int, signal int) (err error) { - return ptrace(PTRACE_CONT, pid, 0, uintptr(signal)) -} - -func PtraceSyscall(pid int, signal int) (err error) { - return ptrace(PTRACE_SYSCALL, pid, 0, uintptr(signal)) -} - -func PtraceSingleStep(pid int) (err error) { return ptrace(PTRACE_SINGLESTEP, pid, 0, 0) } - -func PtraceInterrupt(pid int) (err error) { return ptrace(PTRACE_INTERRUPT, pid, 0, 0) } - -func PtraceAttach(pid int) (err error) { return ptrace(PTRACE_ATTACH, pid, 0, 0) } - -func PtraceSeize(pid int) (err error) { return ptrace(PTRACE_SEIZE, pid, 0, 0) } - -func PtraceDetach(pid int) (err error) { return ptrace(PTRACE_DETACH, pid, 0, 0) } - -//sys reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) - -func Reboot(cmd int) (err error) { - return reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, "") -} - -func direntIno(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) -} - -func direntReclen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) -} - -func direntNamlen(buf []byte) (uint64, bool) { - reclen, ok := direntReclen(buf) - if !ok { - return 0, false - } - return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true -} - -//sys mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) - -func Mount(source string, target string, fstype string, flags uintptr, data string) (err error) { - // Certain file systems get rather angry and EINVAL if you give - // them an empty string of data, rather than NULL. - if data == "" { - return mount(source, target, fstype, flags, nil) - } - datap, err := BytePtrFromString(data) - if err != nil { - return err - } - return mount(source, target, fstype, flags, datap) -} - -//sys mountSetattr(dirfd int, pathname string, flags uint, attr *MountAttr, size uintptr) (err error) = SYS_MOUNT_SETATTR - -// MountSetattr is a wrapper for mount_setattr(2). -// https://man7.org/linux/man-pages/man2/mount_setattr.2.html -// -// Requires kernel >= 5.12. -func MountSetattr(dirfd int, pathname string, flags uint, attr *MountAttr) error { - return mountSetattr(dirfd, pathname, flags, attr, unsafe.Sizeof(*attr)) -} - -func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - if raceenabled { - raceReleaseMerge(unsafe.Pointer(&ioSync)) - } - return sendfile(outfd, infd, offset, count) -} - -// Sendto -// Recvfrom -// Socketpair - -/* - * Direct access - */ -//sys Acct(path string) (err error) -//sys AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) -//sys Adjtimex(buf *Timex) (state int, err error) -//sysnb Capget(hdr *CapUserHeader, data *CapUserData) (err error) -//sysnb Capset(hdr *CapUserHeader, data *CapUserData) (err error) -//sys Chdir(path string) (err error) -//sys Chroot(path string) (err error) -//sys ClockGetres(clockid int32, res *Timespec) (err error) -//sys ClockGettime(clockid int32, time *Timespec) (err error) -//sys ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) -//sys Close(fd int) (err error) -//sys CloseRange(first uint, last uint, flags uint) (err error) -//sys CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) -//sys DeleteModule(name string, flags int) (err error) -//sys Dup(oldfd int) (fd int, err error) - -func Dup2(oldfd, newfd int) error { - return Dup3(oldfd, newfd, 0) -} - -//sys Dup3(oldfd int, newfd int, flags int) (err error) -//sysnb EpollCreate1(flag int) (fd int, err error) -//sysnb EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) -//sys Eventfd(initval uint, flags int) (fd int, err error) = SYS_EVENTFD2 -//sys Exit(code int) = SYS_EXIT_GROUP -//sys Fallocate(fd int, mode uint32, off int64, len int64) (err error) -//sys Fchdir(fd int) (err error) -//sys Fchmod(fd int, mode uint32) (err error) -//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) -//sys Fdatasync(fd int) (err error) -//sys Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) -//sys FinitModule(fd int, params string, flags int) (err error) -//sys Flistxattr(fd int, dest []byte) (sz int, err error) -//sys Flock(fd int, how int) (err error) -//sys Fremovexattr(fd int, attr string) (err error) -//sys Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) -//sys Fsync(fd int) (err error) -//sys Fsmount(fd int, flags int, mountAttrs int) (fsfd int, err error) -//sys Fsopen(fsName string, flags int) (fd int, err error) -//sys Fspick(dirfd int, pathName string, flags int) (fd int, err error) -//sys Getdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64 -//sysnb Getpgid(pid int) (pgid int, err error) - -func Getpgrp() (pid int) { - pid, _ = Getpgid(0) - return -} - -//sysnb Getpid() (pid int) -//sysnb Getppid() (ppid int) -//sys Getpriority(which int, who int) (prio int, err error) -//sys Getrandom(buf []byte, flags int) (n int, err error) -//sysnb Getrusage(who int, rusage *Rusage) (err error) -//sysnb Getsid(pid int) (sid int, err error) -//sysnb Gettid() (tid int) -//sys Getxattr(path string, attr string, dest []byte) (sz int, err error) -//sys InitModule(moduleImage []byte, params string) (err error) -//sys InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) -//sysnb InotifyInit1(flags int) (fd int, err error) -//sysnb InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) -//sysnb Kill(pid int, sig syscall.Signal) (err error) -//sys Klogctl(typ int, buf []byte) (n int, err error) = SYS_SYSLOG -//sys Lgetxattr(path string, attr string, dest []byte) (sz int, err error) -//sys Listxattr(path string, dest []byte) (sz int, err error) -//sys Llistxattr(path string, dest []byte) (sz int, err error) -//sys Lremovexattr(path string, attr string) (err error) -//sys Lsetxattr(path string, attr string, data []byte, flags int) (err error) -//sys MemfdCreate(name string, flags int) (fd int, err error) -//sys Mkdirat(dirfd int, path string, mode uint32) (err error) -//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) -//sys MoveMount(fromDirfd int, fromPathName string, toDirfd int, toPathName string, flags int) (err error) -//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) -//sys OpenTree(dfd int, fileName string, flags uint) (r int, err error) -//sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) -//sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT -//sysnb Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64 -//sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) -//sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) = SYS_PSELECT6 -//sys read(fd int, p []byte) (n int, err error) -//sys Removexattr(path string, attr string) (err error) -//sys Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) -//sys RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) -//sys Setdomainname(p []byte) (err error) -//sys Sethostname(p []byte) (err error) -//sysnb Setpgid(pid int, pgid int) (err error) -//sysnb Setsid() (pid int, err error) -//sysnb Settimeofday(tv *Timeval) (err error) -//sys Setns(fd int, nstype int) (err error) - -// PrctlRetInt performs a prctl operation specified by option and further -// optional arguments arg2 through arg5 depending on option. It returns a -// non-negative integer that is returned by the prctl syscall. -func PrctlRetInt(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (int, error) { - ret, _, err := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) - if err != 0 { - return 0, err - } - return int(ret), nil -} - -func Setuid(uid int) (err error) { - return syscall.Setuid(uid) -} - -func Setgid(gid int) (err error) { - return syscall.Setgid(gid) -} - -func Setreuid(ruid, euid int) (err error) { - return syscall.Setreuid(ruid, euid) -} - -func Setregid(rgid, egid int) (err error) { - return syscall.Setregid(rgid, egid) -} - -func Setresuid(ruid, euid, suid int) (err error) { - return syscall.Setresuid(ruid, euid, suid) -} - -func Setresgid(rgid, egid, sgid int) (err error) { - return syscall.Setresgid(rgid, egid, sgid) -} - -// SetfsgidRetGid sets fsgid for current thread and returns previous fsgid set. -// setfsgid(2) will return a non-nil error only if its caller lacks CAP_SETUID capability. -// If the call fails due to other reasons, current fsgid will be returned. -func SetfsgidRetGid(gid int) (int, error) { - return setfsgid(gid) -} - -// SetfsuidRetUid sets fsuid for current thread and returns previous fsuid set. -// setfsgid(2) will return a non-nil error only if its caller lacks CAP_SETUID capability -// If the call fails due to other reasons, current fsuid will be returned. -func SetfsuidRetUid(uid int) (int, error) { - return setfsuid(uid) -} - -func Setfsgid(gid int) error { - _, err := setfsgid(gid) - return err -} - -func Setfsuid(uid int) error { - _, err := setfsuid(uid) - return err -} - -func Signalfd(fd int, sigmask *Sigset_t, flags int) (newfd int, err error) { - return signalfd(fd, sigmask, _C__NSIG/8, flags) -} - -//sys Setpriority(which int, who int, prio int) (err error) -//sys Setxattr(path string, attr string, data []byte, flags int) (err error) -//sys signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) = SYS_SIGNALFD4 -//sys Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) -//sys Sync() -//sys Syncfs(fd int) (err error) -//sysnb Sysinfo(info *Sysinfo_t) (err error) -//sys Tee(rfd int, wfd int, len int, flags int) (n int64, err error) -//sysnb TimerfdCreate(clockid int, flags int) (fd int, err error) -//sysnb TimerfdGettime(fd int, currValue *ItimerSpec) (err error) -//sysnb TimerfdSettime(fd int, flags int, newValue *ItimerSpec, oldValue *ItimerSpec) (err error) -//sysnb Tgkill(tgid int, tid int, sig syscall.Signal) (err error) -//sysnb Times(tms *Tms) (ticks uintptr, err error) -//sysnb Umask(mask int) (oldmask int) -//sysnb Uname(buf *Utsname) (err error) -//sys Unmount(target string, flags int) (err error) = SYS_UMOUNT2 -//sys Unshare(flags int) (err error) -//sys write(fd int, p []byte) (n int, err error) -//sys exitThread(code int) (err error) = SYS_EXIT -//sys readlen(fd int, p *byte, np int) (n int, err error) = SYS_READ -//sys writelen(fd int, p *byte, np int) (n int, err error) = SYS_WRITE -//sys readv(fd int, iovs []Iovec) (n int, err error) = SYS_READV -//sys writev(fd int, iovs []Iovec) (n int, err error) = SYS_WRITEV -//sys preadv(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) = SYS_PREADV -//sys pwritev(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) = SYS_PWRITEV -//sys preadv2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PREADV2 -//sys pwritev2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PWRITEV2 - -func bytes2iovec(bs [][]byte) []Iovec { - iovecs := make([]Iovec, len(bs)) - for i, b := range bs { - iovecs[i].SetLen(len(b)) - if len(b) > 0 { - iovecs[i].Base = &b[0] - } else { - iovecs[i].Base = (*byte)(unsafe.Pointer(&_zero)) - } - } - return iovecs -} - -// offs2lohi splits offs into its lower and upper unsigned long. On 64-bit -// systems, hi will always be 0. On 32-bit systems, offs will be split in half. -// preadv/pwritev chose this calling convention so they don't need to add a -// padding-register for alignment on ARM. -func offs2lohi(offs int64) (lo, hi uintptr) { - return uintptr(offs), uintptr(uint64(offs) >> SizeofLong) -} - -func Readv(fd int, iovs [][]byte) (n int, err error) { - iovecs := bytes2iovec(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 := bytes2iovec(iovs) - lo, hi := offs2lohi(offset) - n, err = preadv(fd, iovecs, lo, hi) - readvRacedetect(iovecs, n, err) - return n, err -} - -func Preadv2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) { - iovecs := bytes2iovec(iovs) - lo, hi := offs2lohi(offset) - n, err = preadv2(fd, iovecs, lo, hi, flags) - readvRacedetect(iovecs, n, err) - return n, err -} - -func readvRacedetect(iovecs []Iovec, n int, err error) { - if !raceenabled { - return - } - for i := 0; n > 0 && i < len(iovecs); i++ { - m := int(iovecs[i].Len) - if m > n { - m = n - } - n -= m - if m > 0 { - raceWriteRange(unsafe.Pointer(iovecs[i].Base), m) - } - } - if err == nil { - raceAcquire(unsafe.Pointer(&ioSync)) - } -} - -func Writev(fd int, iovs [][]byte) (n int, err error) { - iovecs := bytes2iovec(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 := bytes2iovec(iovs) - if raceenabled { - raceReleaseMerge(unsafe.Pointer(&ioSync)) - } - lo, hi := offs2lohi(offset) - n, err = pwritev(fd, iovecs, lo, hi) - writevRacedetect(iovecs, n) - return n, err -} - -func Pwritev2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) { - iovecs := bytes2iovec(iovs) - if raceenabled { - raceReleaseMerge(unsafe.Pointer(&ioSync)) - } - lo, hi := offs2lohi(offset) - n, err = pwritev2(fd, iovecs, lo, hi, flags) - writevRacedetect(iovecs, n) - return n, err -} - -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) - } - } -} - -// mmap varies by architecture; see syscall_linux_*.go. -//sys munmap(addr uintptr, length uintptr) (err error) - -var mapper = &mmapper{ - active: make(map[*byte][]byte), - mmap: mmap, - munmap: munmap, -} - -func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { - return mapper.Mmap(fd, offset, length, prot, flags) -} - -func Munmap(b []byte) (err error) { - return mapper.Munmap(b) -} - -//sys Madvise(b []byte, advice int) (err error) -//sys Mprotect(b []byte, prot int) (err error) -//sys Mlock(b []byte) (err error) -//sys Mlockall(flags int) (err error) -//sys Msync(b []byte, flags int) (err error) -//sys Munlock(b []byte) (err error) -//sys Munlockall() (err error) - -// Vmsplice splices user pages from a slice of Iovecs into a pipe specified by fd, -// using the specified flags. -func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) { - var p unsafe.Pointer - if len(iovs) > 0 { - p = unsafe.Pointer(&iovs[0]) - } - - n, _, errno := Syscall6(SYS_VMSPLICE, uintptr(fd), uintptr(p), uintptr(len(iovs)), uintptr(flags), 0, 0) - if errno != 0 { - return 0, syscall.Errno(errno) - } - - return int(n), nil -} - -func isGroupMember(gid int) bool { - groups, err := Getgroups() - if err != nil { - return false - } - - for _, g := range groups { - if g == gid { - return true - } - } - return false -} - -//sys faccessat(dirfd int, path string, mode uint32) (err error) -//sys Faccessat2(dirfd int, path string, mode uint32, flags int) (err error) - -func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - if flags == 0 { - return faccessat(dirfd, path, mode) - } - - if err := Faccessat2(dirfd, path, mode, flags); err != ENOSYS && err != EPERM { - return err - } - - // The Linux kernel faccessat system call does not take any flags. - // The glibc faccessat implements the flags itself; see - // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/faccessat.c;hb=HEAD - // Because people naturally expect syscall.Faccessat to act - // like C faccessat, we do the same. - - if flags & ^(AT_SYMLINK_NOFOLLOW|AT_EACCESS) != 0 { - return EINVAL - } - - var st Stat_t - if err := Fstatat(dirfd, path, &st, flags&AT_SYMLINK_NOFOLLOW); err != nil { - return err - } - - mode &= 7 - if mode == 0 { - return nil - } - - var uid int - if flags&AT_EACCESS != 0 { - uid = Geteuid() - } else { - uid = Getuid() - } - - if uid == 0 { - if mode&1 == 0 { - // Root can read and write any file. - return nil - } - if st.Mode&0111 != 0 { - // Root can execute any file that anybody can execute. - return nil - } - return EACCES - } - - var fmode uint32 - if uint32(uid) == st.Uid { - fmode = (st.Mode >> 6) & 7 - } else { - var gid int - if flags&AT_EACCESS != 0 { - gid = Getegid() - } else { - gid = Getgid() - } - - if uint32(gid) == st.Gid || isGroupMember(int(st.Gid)) { - fmode = (st.Mode >> 3) & 7 - } else { - fmode = st.Mode & 7 - } - } - - if fmode&mode == mode { - return nil - } - - return EACCES -} - -//sys nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) = SYS_NAME_TO_HANDLE_AT -//sys openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) = SYS_OPEN_BY_HANDLE_AT - -// fileHandle is the argument to nameToHandleAt and openByHandleAt. We -// originally tried to generate it via unix/linux/types.go with "type -// fileHandle C.struct_file_handle" but that generated empty structs -// for mips64 and mips64le. Instead, hard code it for now (it's the -// same everywhere else) until the mips64 generator issue is fixed. -type fileHandle struct { - Bytes uint32 - Type int32 -} - -// FileHandle represents the C struct file_handle used by -// name_to_handle_at (see NameToHandleAt) and open_by_handle_at (see -// OpenByHandleAt). -type FileHandle struct { - *fileHandle -} - -// NewFileHandle constructs a FileHandle. -func NewFileHandle(handleType int32, handle []byte) FileHandle { - const hdrSize = unsafe.Sizeof(fileHandle{}) - buf := make([]byte, hdrSize+uintptr(len(handle))) - copy(buf[hdrSize:], handle) - fh := (*fileHandle)(unsafe.Pointer(&buf[0])) - fh.Type = handleType - fh.Bytes = uint32(len(handle)) - return FileHandle{fh} -} - -func (fh *FileHandle) Size() int { return int(fh.fileHandle.Bytes) } -func (fh *FileHandle) Type() int32 { return fh.fileHandle.Type } -func (fh *FileHandle) Bytes() []byte { - n := fh.Size() - if n == 0 { - return nil - } - return (*[1 << 30]byte)(unsafe.Pointer(uintptr(unsafe.Pointer(&fh.fileHandle.Type)) + 4))[:n:n] -} - -// NameToHandleAt wraps the name_to_handle_at system call; it obtains -// a handle for a path name. -func NameToHandleAt(dirfd int, path string, flags int) (handle FileHandle, mountID int, err error) { - var mid _C_int - // Try first with a small buffer, assuming the handle will - // only be 32 bytes. - size := uint32(32 + unsafe.Sizeof(fileHandle{})) - didResize := false - for { - buf := make([]byte, size) - fh := (*fileHandle)(unsafe.Pointer(&buf[0])) - fh.Bytes = size - uint32(unsafe.Sizeof(fileHandle{})) - err = nameToHandleAt(dirfd, path, fh, &mid, flags) - if err == EOVERFLOW { - if didResize { - // We shouldn't need to resize more than once - return - } - didResize = true - size = fh.Bytes + uint32(unsafe.Sizeof(fileHandle{})) - continue - } - if err != nil { - return - } - return FileHandle{fh}, int(mid), nil - } -} - -// OpenByHandleAt wraps the open_by_handle_at system call; it opens a -// file via a handle as previously returned by NameToHandleAt. -func OpenByHandleAt(mountFD int, handle FileHandle, flags int) (fd int, err error) { - return openByHandleAt(mountFD, handle.fileHandle, flags) -} - -// Klogset wraps the sys_syslog system call; it sets console_loglevel to -// the value specified by arg and passes a dummy pointer to bufp. -func Klogset(typ int, arg int) (err error) { - var p unsafe.Pointer - _, _, errno := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(p), uintptr(arg)) - if errno != 0 { - return errnoErr(errno) - } - return nil -} - -// RemoteIovec is Iovec with the pointer replaced with an integer. -// It is used for ProcessVMReadv and ProcessVMWritev, where the pointer -// refers to a location in a different process' address space, which -// would confuse the Go garbage collector. -type RemoteIovec struct { - Base uintptr - Len int -} - -//sys ProcessVMReadv(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) = SYS_PROCESS_VM_READV -//sys ProcessVMWritev(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) = SYS_PROCESS_VM_WRITEV - -//sys PidfdOpen(pid int, flags int) (fd int, err error) = SYS_PIDFD_OPEN -//sys PidfdGetfd(pidfd int, targetfd int, flags int) (fd int, err error) = SYS_PIDFD_GETFD -//sys PidfdSendSignal(pidfd int, sig Signal, info *Siginfo, flags int) (err error) = SYS_PIDFD_SEND_SIGNAL - -//sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error) -//sys shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) -//sys shmdt(addr uintptr) (err error) -//sys shmget(key int, size int, flag int) (id int, err error) - -//sys getitimer(which int, currValue *Itimerval) (err error) -//sys setitimer(which int, newValue *Itimerval, oldValue *Itimerval) (err error) - -// MakeItimerval creates an Itimerval from interval and value durations. -func MakeItimerval(interval, value time.Duration) Itimerval { - return Itimerval{ - Interval: NsecToTimeval(interval.Nanoseconds()), - Value: NsecToTimeval(value.Nanoseconds()), - } -} - -// A value which may be passed to the which parameter for Getitimer and -// Setitimer. -type ItimerWhich int - -// Possible which values for Getitimer and Setitimer. -const ( - ItimerReal ItimerWhich = ITIMER_REAL - ItimerVirtual ItimerWhich = ITIMER_VIRTUAL - ItimerProf ItimerWhich = ITIMER_PROF -) - -// Getitimer wraps getitimer(2) to return the current value of the timer -// specified by which. -func Getitimer(which ItimerWhich) (Itimerval, error) { - var it Itimerval - if err := getitimer(int(which), &it); err != nil { - return Itimerval{}, err - } - - return it, nil -} - -// Setitimer wraps setitimer(2) to arm or disarm the timer specified by which. -// It returns the previous value of the timer. -// -// If the Itimerval argument is the zero value, the timer will be disarmed. -func Setitimer(which ItimerWhich, it Itimerval) (Itimerval, error) { - var prev Itimerval - if err := setitimer(int(which), &it, &prev); err != nil { - return Itimerval{}, err - } - - return prev, nil -} - -/* - * Unimplemented - */ -// AfsSyscall -// ArchPrctl -// Brk -// ClockNanosleep -// ClockSettime -// Clone -// EpollCtlOld -// EpollPwait -// EpollWaitOld -// Execve -// Fork -// Futex -// GetKernelSyms -// GetMempolicy -// GetRobustList -// GetThreadArea -// Getpmsg -// IoCancel -// IoDestroy -// IoGetevents -// IoSetup -// IoSubmit -// IoprioGet -// IoprioSet -// KexecLoad -// LookupDcookie -// Mbind -// MigratePages -// Mincore -// ModifyLdt -// Mount -// MovePages -// MqGetsetattr -// MqNotify -// MqOpen -// MqTimedreceive -// MqTimedsend -// MqUnlink -// Mremap -// Msgctl -// Msgget -// Msgrcv -// Msgsnd -// Nfsservctl -// Personality -// Pselect6 -// Ptrace -// Putpmsg -// Quotactl -// Readahead -// Readv -// RemapFilePages -// RestartSyscall -// RtSigaction -// RtSigpending -// RtSigprocmask -// RtSigqueueinfo -// RtSigreturn -// RtSigsuspend -// RtSigtimedwait -// SchedGetPriorityMax -// SchedGetPriorityMin -// SchedGetparam -// SchedGetscheduler -// SchedRrGetInterval -// SchedSetparam -// SchedYield -// Security -// Semctl -// Semget -// Semop -// Semtimedop -// SetMempolicy -// SetRobustList -// SetThreadArea -// SetTidAddress -// Sigaltstack -// Swapoff -// Swapon -// Sysfs -// TimerCreate -// TimerDelete -// TimerGetoverrun -// TimerGettime -// TimerSettime -// Tkill (obsolete) -// Tuxcall -// Umount2 -// Uselib -// Utimensat -// Vfork -// Vhangup -// Vserver -// _Sysctl diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_386.go b/vendor/golang.org/x/sys/unix/syscall_linux_386.go deleted file mode 100644 index ff5b589..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_linux_386.go +++ /dev/null @@ -1,342 +0,0 @@ -// 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 386 && linux -// +build 386,linux - -package unix - -import ( - "unsafe" -) - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: int32(sec), Nsec: int32(nsec)} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: int32(sec), Usec: int32(usec)} -} - -// 64-bit file system and 32-bit uid calls -// (386 default is 32-bit file system and 16-bit uid). -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) -//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64_64 -//sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32 -//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 -//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 -//sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 -//sysnb Getegid() (egid int) = SYS_GETEGID32 -//sysnb Geteuid() (euid int) = SYS_GETEUID32 -//sysnb Getgid() (gid int) = SYS_GETGID32 -//sysnb Getuid() (uid int) = SYS_GETUID32 -//sys Ioperm(from int, num int, on int) (err error) -//sys Iopl(level int) (err error) -//sys Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32 -//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 -//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 -//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) -//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 -//sys setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32 -//sys setfsuid(uid int) (prev int, err error) = SYS_SETFSUID32 -//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) -//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 -//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) -//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 -//sys Ustat(dev int, ubuf *Ustat_t) (err error) -//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) = SYS_GETGROUPS32 -//sysnb setgroups(n int, list *_Gid_t) (err error) = SYS_SETGROUPS32 -//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT - -//sys mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) -//sys Pause() (err error) - -func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { - page := uintptr(offset / 4096) - if offset != int64(page)*4096 { - return 0, EINVAL - } - return mmap2(addr, length, prot, flags, fd, page) -} - -type rlimit32 struct { - Cur uint32 - Max uint32 -} - -//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT - -const rlimInf32 = ^uint32(0) -const rlimInf64 = ^uint64(0) - -func Getrlimit(resource int, rlim *Rlimit) (err error) { - err = Prlimit(0, resource, nil, rlim) - if err != ENOSYS { - return err - } - - rl := rlimit32{} - err = getrlimit(resource, &rl) - if err != nil { - return - } - - if rl.Cur == rlimInf32 { - rlim.Cur = rlimInf64 - } else { - rlim.Cur = uint64(rl.Cur) - } - - if rl.Max == rlimInf32 { - rlim.Max = rlimInf64 - } else { - rlim.Max = uint64(rl.Max) - } - return -} - -//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT - -func Setrlimit(resource int, rlim *Rlimit) (err error) { - err = Prlimit(0, resource, rlim, nil) - if err != ENOSYS { - return err - } - - rl := rlimit32{} - if rlim.Cur == rlimInf64 { - rl.Cur = rlimInf32 - } else if rlim.Cur < uint64(rlimInf32) { - rl.Cur = uint32(rlim.Cur) - } else { - return EINVAL - } - if rlim.Max == rlimInf64 { - rl.Max = rlimInf32 - } else if rlim.Max < uint64(rlimInf32) { - rl.Max = uint32(rlim.Max) - } else { - return EINVAL - } - - return setrlimit(resource, &rl) -} - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - newoffset, errno := seek(fd, offset, whence) - if errno != 0 { - return 0, errno - } - return newoffset, nil -} - -//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) -//sysnb Gettimeofday(tv *Timeval) (err error) -//sysnb Time(t *Time_t) (tt Time_t, err error) -//sys Utime(path string, buf *Utimbuf) (err error) -//sys utimes(path string, times *[2]Timeval) (err error) - -// On x86 Linux, all the socket calls go through an extra indirection, -// I think because the 5-register system call interface can't handle -// the 6-argument calls like sendto and recvfrom. Instead the -// arguments to the underlying system call are the number below -// and a pointer to an array of uintptr. We hide the pointer in the -// socketcall assembly to avoid allocation on every system call. - -const ( - // see linux/net.h - _SOCKET = 1 - _BIND = 2 - _CONNECT = 3 - _LISTEN = 4 - _ACCEPT = 5 - _GETSOCKNAME = 6 - _GETPEERNAME = 7 - _SOCKETPAIR = 8 - _SEND = 9 - _RECV = 10 - _SENDTO = 11 - _RECVFROM = 12 - _SHUTDOWN = 13 - _SETSOCKOPT = 14 - _GETSOCKOPT = 15 - _SENDMSG = 16 - _RECVMSG = 17 - _ACCEPT4 = 18 - _RECVMMSG = 19 - _SENDMMSG = 20 -) - -func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { - fd, e := socketcall(_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - if e != 0 { - err = e - } - return -} - -func getsockname(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, e := rawsocketcall(_GETSOCKNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) - if e != 0 { - err = e - } - return -} - -func getpeername(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, e := rawsocketcall(_GETPEERNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) - if e != 0 { - err = e - } - return -} - -func socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) { - _, e := rawsocketcall(_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0) - if e != 0 { - err = e - } - return -} - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, e := socketcall(_BIND, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) - if e != 0 { - err = e - } - return -} - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, e := socketcall(_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) - if e != 0 { - err = e - } - return -} - -func socket(domain int, typ int, proto int) (fd int, err error) { - fd, e := rawsocketcall(_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0) - if e != 0 { - err = e - } - return -} - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, e := socketcall(_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e != 0 { - err = e - } - return -} - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, e := socketcall(_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), vallen, 0) - if e != 0 { - err = e - } - return -} - -func recvfrom(s int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var base uintptr - if len(p) > 0 { - base = uintptr(unsafe.Pointer(&p[0])) - } - n, e := socketcall(_RECVFROM, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - if e != 0 { - err = e - } - return -} - -func sendto(s int, p []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var base uintptr - if len(p) > 0 { - base = uintptr(unsafe.Pointer(&p[0])) - } - _, e := socketcall(_SENDTO, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e != 0 { - err = e - } - return -} - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - n, e := socketcall(_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) - if e != 0 { - err = e - } - return -} - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - n, e := socketcall(_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) - if e != 0 { - err = e - } - return -} - -func Listen(s int, n int) (err error) { - _, e := socketcall(_LISTEN, uintptr(s), uintptr(n), 0, 0, 0, 0) - if e != 0 { - err = e - } - return -} - -func Shutdown(s, how int) (err error) { - _, e := socketcall(_SHUTDOWN, uintptr(s), uintptr(how), 0, 0, 0, 0) - if e != 0 { - err = e - } - return -} - -func Fstatfs(fd int, buf *Statfs_t) (err error) { - _, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) - if e != 0 { - err = e - } - return -} - -func Statfs(path string, buf *Statfs_t) (err error) { - pathp, err := BytePtrFromString(path) - if err != nil { - return err - } - _, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) - if e != 0 { - err = e - } - return -} - -func (r *PtraceRegs) PC() uint64 { return uint64(uint32(r.Eip)) } - -func (r *PtraceRegs) SetPC(pc uint64) { r.Eip = int32(pc) } - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint32(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = uint32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} - -func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { - rsa.Service_name_len = uint32(length) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_alarm.go b/vendor/golang.org/x/sys/unix/syscall_linux_alarm.go deleted file mode 100644 index 08086ac..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_linux_alarm.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2022 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux && (386 || amd64 || mips || mipsle || mips64 || mipsle || ppc64 || ppc64le || ppc || s390x || sparc64) -// +build linux -// +build 386 amd64 mips mipsle mips64 mipsle ppc64 ppc64le ppc s390x sparc64 - -package unix - -// SYS_ALARM is not defined on arm or riscv, but is available for other GOARCH -// values. - -//sys Alarm(seconds uint) (remaining uint, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go deleted file mode 100644 index 9b27035..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go +++ /dev/null @@ -1,147 +0,0 @@ -// 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 amd64 && linux -// +build amd64,linux - -package unix - -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) -//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 -//sys Fchown(fd int, uid int, gid int) (err error) -//sys Fstat(fd int, stat *Stat_t) (err error) -//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT -//sys Fstatfs(fd int, buf *Statfs_t) (err error) -//sys Ftruncate(fd int, length int64) (err error) -//sysnb Getegid() (egid int) -//sysnb Geteuid() (euid int) -//sysnb Getgid() (gid int) -//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) -//sysnb Getuid() (uid int) -//sys Ioperm(from int, num int, on int) (err error) -//sys Iopl(level int) (err error) -//sys Lchown(path string, uid int, gid int) (err error) -//sys Listen(s int, n int) (err error) - -func Lstat(path string, stat *Stat_t) (err error) { - return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW) -} - -//sys MemfdSecret(flags int) (fd int, err error) -//sys Pause() (err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 -//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) -//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - var ts *Timespec - if timeout != nil { - ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} - } - return Pselect(nfd, r, w, e, ts, nil) -} - -//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) -//sys setfsgid(gid int) (prev int, err error) -//sys setfsuid(uid int) (prev int, err error) -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) -//sys Shutdown(fd int, how int) (err error) -//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) - -func Stat(path string, stat *Stat_t) (err error) { - // Use fstatat, because Android's seccomp policy blocks stat. - return Fstatat(AT_FDCWD, path, stat, 0) -} - -//sys Statfs(path string, buf *Statfs_t) (err error) -//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) -//sys Truncate(path string, length int64) (err error) -//sys Ustat(dev int, ubuf *Ustat_t) (err error) -//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) -//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) -//sysnb setgroups(n int, list *_Gid_t) (err error) -//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) -//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) -//sysnb socket(domain int, typ int, proto int) (fd int, err error) -//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) -//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) -//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) -//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) -//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) -//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) - -//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) - -func Gettimeofday(tv *Timeval) (err error) { - errno := gettimeofday(tv) - if errno != 0 { - return errno - } - return nil -} - -func Time(t *Time_t) (tt Time_t, err error) { - var tv Timeval - errno := gettimeofday(&tv) - if errno != 0 { - return 0, errno - } - if t != nil { - *t = Time_t(tv.Sec) - } - return Time_t(tv.Sec), nil -} - -//sys Utime(path string, buf *Utimbuf) (err error) -//sys utimes(path string, times *[2]Timeval) (err error) - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: nsec} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: usec} -} - -func (r *PtraceRegs) PC() uint64 { return r.Rip } - -func (r *PtraceRegs) SetPC(pc uint64) { r.Rip = pc } - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint64(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint64(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = uint64(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint64(length) -} - -func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { - rsa.Service_name_len = uint64(length) -} - -//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) - -func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { - cmdlineLen := len(cmdline) - if cmdlineLen > 0 { - // Account for the additional NULL byte added by - // BytePtrFromString in kexecFileLoad. The kexec_file_load - // syscall expects a NULL-terminated string. - cmdlineLen++ - } - return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go deleted file mode 100644 index 8b0f0f3..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build amd64 && linux && gc -// +build amd64,linux,gc - -package unix - -import "syscall" - -//go:noescape -func gettimeofday(tv *Timeval) (err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go deleted file mode 100644 index 856ad1d..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go +++ /dev/null @@ -1,244 +0,0 @@ -// 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 arm && linux -// +build arm,linux - -package unix - -import ( - "unsafe" -) - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: int32(sec), Nsec: int32(nsec)} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: int32(sec), Usec: int32(usec)} -} - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - newoffset, errno := seek(fd, offset, whence) - if errno != 0 { - return 0, errno - } - return newoffset, nil -} - -//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) -//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) = SYS_GETGROUPS32 -//sysnb setgroups(n int, list *_Gid_t) (err error) = SYS_SETGROUPS32 -//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) -//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) -//sysnb socket(domain int, typ int, proto int) (fd int, err error) -//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) -//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) -//sysnb socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) -//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) -//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) - -// 64-bit file system and 32-bit uid calls -// (16-bit uid calls are not always supported in newer kernels) -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) -//sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32 -//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 -//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 -//sysnb Getegid() (egid int) = SYS_GETEGID32 -//sysnb Geteuid() (euid int) = SYS_GETEUID32 -//sysnb Getgid() (gid int) = SYS_GETGID32 -//sysnb Getuid() (uid int) = SYS_GETUID32 -//sys Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32 -//sys Listen(s int, n int) (err error) -//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 -//sys Pause() (err error) -//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) -//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 -//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT -//sys setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32 -//sys setfsuid(uid int) (prev int, err error) = SYS_SETFSUID32 -//sys Shutdown(fd int, how int) (err error) -//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) -//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 -//sys Ustat(dev int, ubuf *Ustat_t) (err error) - -//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) -//sysnb Gettimeofday(tv *Timeval) (err error) - -func Time(t *Time_t) (Time_t, error) { - var tv Timeval - err := Gettimeofday(&tv) - if err != nil { - return 0, err - } - if t != nil { - *t = Time_t(tv.Sec) - } - return Time_t(tv.Sec), nil -} - -func Utime(path string, buf *Utimbuf) error { - tv := []Timeval{ - {Sec: buf.Actime}, - {Sec: buf.Modtime}, - } - return Utimes(path, tv) -} - -//sys utimes(path string, times *[2]Timeval) (err error) - -//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 -//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 -//sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall6(SYS_ARM_FADVISE64_64, uintptr(fd), uintptr(advice), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -//sys mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) - -func Fstatfs(fd int, buf *Statfs_t) (err error) { - _, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) - if e != 0 { - err = e - } - return -} - -func Statfs(path string, buf *Statfs_t) (err error) { - pathp, err := BytePtrFromString(path) - if err != nil { - return err - } - _, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) - if e != 0 { - err = e - } - return -} - -func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { - page := uintptr(offset / 4096) - if offset != int64(page)*4096 { - return 0, EINVAL - } - return mmap2(addr, length, prot, flags, fd, page) -} - -type rlimit32 struct { - Cur uint32 - Max uint32 -} - -//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_UGETRLIMIT - -const rlimInf32 = ^uint32(0) -const rlimInf64 = ^uint64(0) - -func Getrlimit(resource int, rlim *Rlimit) (err error) { - err = Prlimit(0, resource, nil, rlim) - if err != ENOSYS { - return err - } - - rl := rlimit32{} - err = getrlimit(resource, &rl) - if err != nil { - return - } - - if rl.Cur == rlimInf32 { - rlim.Cur = rlimInf64 - } else { - rlim.Cur = uint64(rl.Cur) - } - - if rl.Max == rlimInf32 { - rlim.Max = rlimInf64 - } else { - rlim.Max = uint64(rl.Max) - } - return -} - -//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT - -func Setrlimit(resource int, rlim *Rlimit) (err error) { - err = Prlimit(0, resource, rlim, nil) - if err != ENOSYS { - return err - } - - rl := rlimit32{} - if rlim.Cur == rlimInf64 { - rl.Cur = rlimInf32 - } else if rlim.Cur < uint64(rlimInf32) { - rl.Cur = uint32(rlim.Cur) - } else { - return EINVAL - } - if rlim.Max == rlimInf64 { - rl.Max = rlimInf32 - } else if rlim.Max < uint64(rlimInf32) { - rl.Max = uint32(rlim.Max) - } else { - return EINVAL - } - - return setrlimit(resource, &rl) -} - -func (r *PtraceRegs) PC() uint64 { return uint64(r.Uregs[15]) } - -func (r *PtraceRegs) SetPC(pc uint64) { r.Uregs[15] = uint32(pc) } - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint32(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = uint32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} - -func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { - rsa.Service_name_len = uint32(length) -} - -//sys armSyncFileRange(fd int, flags int, off int64, n int64) (err error) = SYS_ARM_SYNC_FILE_RANGE - -func SyncFileRange(fd int, off int64, n int64, flags int) error { - // The sync_file_range and arm_sync_file_range syscalls differ only in the - // order of their arguments. - return armSyncFileRange(fd, flags, off, n) -} - -//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) - -func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { - cmdlineLen := len(cmdline) - if cmdlineLen > 0 { - // Account for the additional NULL byte added by - // BytePtrFromString in kexecFileLoad. The kexec_file_load - // syscall expects a NULL-terminated string. - cmdlineLen++ - } - return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go deleted file mode 100644 index 6422704..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build arm64 && linux -// +build arm64,linux - -package unix - -import "unsafe" - -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT -//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 -//sys Fchown(fd int, uid int, gid int) (err error) -//sys Fstat(fd int, stat *Stat_t) (err error) -//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) -//sys Fstatfs(fd int, buf *Statfs_t) (err error) -//sys Ftruncate(fd int, length int64) (err error) -//sysnb Getegid() (egid int) -//sysnb Geteuid() (euid int) -//sysnb Getgid() (gid int) -//sysnb getrlimit(resource int, rlim *Rlimit) (err error) -//sysnb Getuid() (uid int) -//sys Listen(s int, n int) (err error) -//sys MemfdSecret(flags int) (fd int, err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 -//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) -//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - var ts *Timespec - if timeout != nil { - ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} - } - return Pselect(nfd, r, w, e, ts, nil) -} - -//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) -//sys setfsgid(gid int) (prev int, err error) -//sys setfsuid(uid int) (prev int, err error) -//sysnb setrlimit(resource int, rlim *Rlimit) (err error) -//sys Shutdown(fd int, how int) (err error) -//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) - -func Stat(path string, stat *Stat_t) (err error) { - return Fstatat(AT_FDCWD, path, stat, 0) -} - -func Lchown(path string, uid int, gid int) (err error) { - return Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW) -} - -func Lstat(path string, stat *Stat_t) (err error) { - return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW) -} - -//sys Statfs(path string, buf *Statfs_t) (err error) -//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) -//sys Truncate(path string, length int64) (err error) - -func Ustat(dev int, ubuf *Ustat_t) (err error) { - return ENOSYS -} - -//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) -//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) -//sysnb setgroups(n int, list *_Gid_t) (err error) -//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) -//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) -//sysnb socket(domain int, typ int, proto int) (fd int, err error) -//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) -//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) -//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) -//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) -//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) -//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) - -//sysnb Gettimeofday(tv *Timeval) (err error) - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: nsec} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: usec} -} - -func futimesat(dirfd int, path string, tv *[2]Timeval) (err error) { - if tv == nil { - return utimensat(dirfd, path, nil, 0) - } - - ts := []Timespec{ - NsecToTimespec(TimevalToNsec(tv[0])), - NsecToTimespec(TimevalToNsec(tv[1])), - } - return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) -} - -func Time(t *Time_t) (Time_t, error) { - var tv Timeval - err := Gettimeofday(&tv) - if err != nil { - return 0, err - } - if t != nil { - *t = Time_t(tv.Sec) - } - return Time_t(tv.Sec), nil -} - -func Utime(path string, buf *Utimbuf) error { - tv := []Timeval{ - {Sec: buf.Actime}, - {Sec: buf.Modtime}, - } - return Utimes(path, tv) -} - -func utimes(path string, tv *[2]Timeval) (err error) { - if tv == nil { - return utimensat(AT_FDCWD, path, nil, 0) - } - - ts := []Timespec{ - NsecToTimespec(TimevalToNsec(tv[0])), - NsecToTimespec(TimevalToNsec(tv[1])), - } - return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) -} - -// Getrlimit prefers the prlimit64 system call. See issue 38604. -func Getrlimit(resource int, rlim *Rlimit) error { - err := Prlimit(0, resource, nil, rlim) - if err != ENOSYS { - return err - } - return getrlimit(resource, rlim) -} - -// Setrlimit prefers the prlimit64 system call. See issue 38604. -func Setrlimit(resource int, rlim *Rlimit) error { - err := Prlimit(0, resource, rlim, nil) - if err != ENOSYS { - return err - } - return setrlimit(resource, rlim) -} - -func (r *PtraceRegs) PC() uint64 { return r.Pc } - -func (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc } - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint64(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint64(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = uint64(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint64(length) -} - -func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { - rsa.Service_name_len = uint64(length) -} - -func Pause() error { - _, err := ppoll(nil, 0, nil, nil) - return err -} - -//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) - -func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { - cmdlineLen := len(cmdline) - if cmdlineLen > 0 { - // Account for the additional NULL byte added by - // BytePtrFromString in kexecFileLoad. The kexec_file_load - // syscall expects a NULL-terminated string. - cmdlineLen++ - } - return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_gc.go b/vendor/golang.org/x/sys/unix/syscall_linux_gc.go deleted file mode 100644 index 2b1168d..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_linux_gc.go +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux && gc -// +build linux,gc - -package unix - -// SyscallNoError may be used instead of Syscall for syscalls that don't fail. -func SyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) - -// RawSyscallNoError may be used instead of RawSyscall for syscalls that don't -// fail. -func RawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go b/vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go deleted file mode 100644 index 9843fb4..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux && gc && 386 -// +build linux,gc,386 - -package unix - -import "syscall" - -// Underlying system call writes to newoffset via pointer. -// Implemented in assembly to avoid allocation. -func seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno) - -func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno) -func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go deleted file mode 100644 index a6008fc..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go +++ /dev/null @@ -1,14 +0,0 @@ -// 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 arm && gc && linux -// +build arm,gc,linux - -package unix - -import "syscall" - -// Underlying system call writes to newoffset via pointer. -// Implemented in assembly to avoid allocation. -func seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go b/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go deleted file mode 100644 index 7740af2..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux && gccgo && 386 -// +build linux,gccgo,386 - -package unix - -import ( - "syscall" - "unsafe" -) - -func seek(fd int, offset int64, whence int) (int64, syscall.Errno) { - var newoffset int64 - offsetLow := uint32(offset & 0xffffffff) - offsetHigh := uint32((offset >> 32) & 0xffffffff) - _, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0) - return newoffset, err -} - -func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno) { - fd, _, err := Syscall(SYS_SOCKETCALL, uintptr(call), uintptr(unsafe.Pointer(&a0)), 0) - return int(fd), err -} - -func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno) { - fd, _, err := RawSyscall(SYS_SOCKETCALL, uintptr(call), uintptr(unsafe.Pointer(&a0)), 0) - return int(fd), err -} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go deleted file mode 100644 index e16a122..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux && gccgo && arm -// +build linux,gccgo,arm - -package unix - -import ( - "syscall" - "unsafe" -) - -func seek(fd int, offset int64, whence int) (int64, syscall.Errno) { - var newoffset int64 - offsetLow := uint32(offset & 0xffffffff) - offsetHigh := uint32((offset >> 32) & 0xffffffff) - _, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0) - return newoffset, err -} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go deleted file mode 100644 index 59dab51..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go +++ /dev/null @@ -1,222 +0,0 @@ -// Copyright 2022 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build loong64 && linux -// +build loong64,linux - -package unix - -import "unsafe" - -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT -//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 -//sys Fchown(fd int, uid int, gid int) (err error) -//sys Fstatfs(fd int, buf *Statfs_t) (err error) -//sys Ftruncate(fd int, length int64) (err error) -//sysnb Getegid() (egid int) -//sysnb Geteuid() (euid int) -//sysnb Getgid() (gid int) -//sysnb Getuid() (uid int) -//sys Listen(s int, n int) (err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 -//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - var ts *Timespec - if timeout != nil { - ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} - } - return Pselect(nfd, r, w, e, ts, nil) -} - -//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) -//sys setfsgid(gid int) (prev int, err error) -//sys setfsuid(uid int) (prev int, err error) -//sys Shutdown(fd int, how int) (err error) -//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) - -func timespecFromStatxTimestamp(x StatxTimestamp) Timespec { - return Timespec{ - Sec: x.Sec, - Nsec: int64(x.Nsec), - } -} - -func Fstatat(fd int, path string, stat *Stat_t, flags int) error { - var r Statx_t - // Do it the glibc way, add AT_NO_AUTOMOUNT. - if err := Statx(fd, path, AT_NO_AUTOMOUNT|flags, STATX_BASIC_STATS, &r); err != nil { - return err - } - - stat.Dev = Mkdev(r.Dev_major, r.Dev_minor) - stat.Ino = r.Ino - stat.Mode = uint32(r.Mode) - stat.Nlink = r.Nlink - stat.Uid = r.Uid - stat.Gid = r.Gid - stat.Rdev = Mkdev(r.Rdev_major, r.Rdev_minor) - // hope we don't get to process files so large to overflow these size - // fields... - stat.Size = int64(r.Size) - stat.Blksize = int32(r.Blksize) - stat.Blocks = int64(r.Blocks) - stat.Atim = timespecFromStatxTimestamp(r.Atime) - stat.Mtim = timespecFromStatxTimestamp(r.Mtime) - stat.Ctim = timespecFromStatxTimestamp(r.Ctime) - - return nil -} - -func Fstat(fd int, stat *Stat_t) (err error) { - return Fstatat(fd, "", stat, AT_EMPTY_PATH) -} - -func Stat(path string, stat *Stat_t) (err error) { - return Fstatat(AT_FDCWD, path, stat, 0) -} - -func Lchown(path string, uid int, gid int) (err error) { - return Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW) -} - -func Lstat(path string, stat *Stat_t) (err error) { - return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW) -} - -//sys Statfs(path string, buf *Statfs_t) (err error) -//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) -//sys Truncate(path string, length int64) (err error) - -func Ustat(dev int, ubuf *Ustat_t) (err error) { - return ENOSYS -} - -//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) -//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) -//sysnb setgroups(n int, list *_Gid_t) (err error) -//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) -//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) -//sysnb socket(domain int, typ int, proto int) (fd int, err error) -//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) -//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) -//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) -//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) -//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) -//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) - -//sysnb Gettimeofday(tv *Timeval) (err error) - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: nsec} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: usec} -} - -func Getrlimit(resource int, rlim *Rlimit) (err error) { - err = Prlimit(0, resource, nil, rlim) - return -} - -func Setrlimit(resource int, rlim *Rlimit) (err error) { - err = Prlimit(0, resource, rlim, nil) - return -} - -func futimesat(dirfd int, path string, tv *[2]Timeval) (err error) { - if tv == nil { - return utimensat(dirfd, path, nil, 0) - } - - ts := []Timespec{ - NsecToTimespec(TimevalToNsec(tv[0])), - NsecToTimespec(TimevalToNsec(tv[1])), - } - return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) -} - -func Time(t *Time_t) (Time_t, error) { - var tv Timeval - err := Gettimeofday(&tv) - if err != nil { - return 0, err - } - if t != nil { - *t = Time_t(tv.Sec) - } - return Time_t(tv.Sec), nil -} - -func Utime(path string, buf *Utimbuf) error { - tv := []Timeval{ - {Sec: buf.Actime}, - {Sec: buf.Modtime}, - } - return Utimes(path, tv) -} - -func utimes(path string, tv *[2]Timeval) (err error) { - if tv == nil { - return utimensat(AT_FDCWD, path, nil, 0) - } - - ts := []Timespec{ - NsecToTimespec(TimevalToNsec(tv[0])), - NsecToTimespec(TimevalToNsec(tv[1])), - } - return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) -} - -func (r *PtraceRegs) PC() uint64 { return r.Era } - -func (r *PtraceRegs) SetPC(era uint64) { r.Era = era } - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint64(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint64(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = uint64(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint64(length) -} - -func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { - rsa.Service_name_len = uint64(length) -} - -func Pause() error { - _, err := ppoll(nil, 0, nil, nil) - return err -} - -func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { - return Renameat2(olddirfd, oldpath, newdirfd, newpath, 0) -} - -//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) - -func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { - cmdlineLen := len(cmdline) - if cmdlineLen > 0 { - // Account for the additional NULL byte added by - // BytePtrFromString in kexecFileLoad. The kexec_file_load - // syscall expects a NULL-terminated string. - cmdlineLen++ - } - return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go deleted file mode 100644 index bfef09a..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go +++ /dev/null @@ -1,191 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux && (mips64 || mips64le) -// +build linux -// +build mips64 mips64le - -package unix - -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) -//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 -//sys Fchown(fd int, uid int, gid int) (err error) -//sys Fstatfs(fd int, buf *Statfs_t) (err error) -//sys Ftruncate(fd int, length int64) (err error) -//sysnb Getegid() (egid int) -//sysnb Geteuid() (euid int) -//sysnb Getgid() (gid int) -//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) -//sysnb Getuid() (uid int) -//sys Lchown(path string, uid int, gid int) (err error) -//sys Listen(s int, n int) (err error) -//sys Pause() (err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 -//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) -//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - var ts *Timespec - if timeout != nil { - ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} - } - return Pselect(nfd, r, w, e, ts, nil) -} - -//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) -//sys setfsgid(gid int) (prev int, err error) -//sys setfsuid(uid int) (prev int, err error) -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) -//sys Shutdown(fd int, how int) (err error) -//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) -//sys Statfs(path string, buf *Statfs_t) (err error) -//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) -//sys Truncate(path string, length int64) (err error) -//sys Ustat(dev int, ubuf *Ustat_t) (err error) -//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) -//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) -//sysnb setgroups(n int, list *_Gid_t) (err error) -//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) -//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) -//sysnb socket(domain int, typ int, proto int) (fd int, err error) -//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) -//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) -//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) -//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) -//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) -//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) - -//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) -//sysnb Gettimeofday(tv *Timeval) (err error) - -func Time(t *Time_t) (tt Time_t, err error) { - var tv Timeval - err = Gettimeofday(&tv) - if err != nil { - return 0, err - } - if t != nil { - *t = Time_t(tv.Sec) - } - return Time_t(tv.Sec), nil -} - -//sys Utime(path string, buf *Utimbuf) (err error) -//sys utimes(path string, times *[2]Timeval) (err error) - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: nsec} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: usec} -} - -func Ioperm(from int, num int, on int) (err error) { - return ENOSYS -} - -func Iopl(level int) (err error) { - return ENOSYS -} - -type stat_t struct { - Dev uint32 - Pad0 [3]int32 - Ino uint64 - Mode uint32 - Nlink uint32 - Uid uint32 - Gid uint32 - Rdev uint32 - Pad1 [3]uint32 - Size int64 - Atime uint32 - Atime_nsec uint32 - Mtime uint32 - Mtime_nsec uint32 - Ctime uint32 - Ctime_nsec uint32 - Blksize uint32 - Pad2 uint32 - Blocks int64 -} - -//sys fstat(fd int, st *stat_t) (err error) -//sys fstatat(dirfd int, path string, st *stat_t, flags int) (err error) = SYS_NEWFSTATAT -//sys lstat(path string, st *stat_t) (err error) -//sys stat(path string, st *stat_t) (err error) - -func Fstat(fd int, s *Stat_t) (err error) { - st := &stat_t{} - err = fstat(fd, st) - fillStat_t(s, st) - return -} - -func Fstatat(dirfd int, path string, s *Stat_t, flags int) (err error) { - st := &stat_t{} - err = fstatat(dirfd, path, st, flags) - fillStat_t(s, st) - return -} - -func Lstat(path string, s *Stat_t) (err error) { - st := &stat_t{} - err = lstat(path, st) - fillStat_t(s, st) - return -} - -func Stat(path string, s *Stat_t) (err error) { - st := &stat_t{} - err = stat(path, st) - fillStat_t(s, st) - return -} - -func fillStat_t(s *Stat_t, st *stat_t) { - s.Dev = st.Dev - s.Ino = st.Ino - s.Mode = st.Mode - s.Nlink = st.Nlink - s.Uid = st.Uid - s.Gid = st.Gid - s.Rdev = st.Rdev - s.Size = st.Size - s.Atim = Timespec{int64(st.Atime), int64(st.Atime_nsec)} - s.Mtim = Timespec{int64(st.Mtime), int64(st.Mtime_nsec)} - s.Ctim = Timespec{int64(st.Ctime), int64(st.Ctime_nsec)} - s.Blksize = st.Blksize - s.Blocks = st.Blocks -} - -func (r *PtraceRegs) PC() uint64 { return r.Epc } - -func (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc } - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint64(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint64(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = uint64(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint64(length) -} - -func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { - rsa.Service_name_len = uint64(length) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go deleted file mode 100644 index ab30250..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go +++ /dev/null @@ -1,203 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux && (mips || mipsle) -// +build linux -// +build mips mipsle - -package unix - -import ( - "syscall" - "unsafe" -) - -func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) - -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) -//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 -//sys Fchown(fd int, uid int, gid int) (err error) -//sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 -//sysnb Getegid() (egid int) -//sysnb Geteuid() (euid int) -//sysnb Getgid() (gid int) -//sysnb Getuid() (uid int) -//sys Lchown(path string, uid int, gid int) (err error) -//sys Listen(s int, n int) (err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 -//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) -//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT -//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 -//sys setfsgid(gid int) (prev int, err error) -//sys setfsuid(uid int) (prev int, err error) -//sys Shutdown(fd int, how int) (err error) -//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) -//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) -//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 -//sys Ustat(dev int, ubuf *Ustat_t) (err error) -//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) -//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) -//sysnb setgroups(n int, list *_Gid_t) (err error) -//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) -//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) -//sysnb socket(domain int, typ int, proto int) (fd int, err error) -//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) -//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) -//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) -//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) -//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) - -//sys Ioperm(from int, num int, on int) (err error) -//sys Iopl(level int) (err error) - -//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) -//sysnb Gettimeofday(tv *Timeval) (err error) -//sysnb Time(t *Time_t) (tt Time_t, err error) -//sys Utime(path string, buf *Utimbuf) (err error) -//sys utimes(path string, times *[2]Timeval) (err error) - -//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 -//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 -//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 -//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 - -//sys Pause() (err error) - -func Fstatfs(fd int, buf *Statfs_t) (err error) { - _, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) - if e != 0 { - err = errnoErr(e) - } - return -} - -func Statfs(path string, buf *Statfs_t) (err error) { - p, err := BytePtrFromString(path) - if err != nil { - return err - } - _, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(p)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) - if e != 0 { - err = errnoErr(e) - } - return -} - -func Seek(fd int, offset int64, whence int) (off int64, err error) { - _, _, e := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offset>>32), uintptr(offset), uintptr(unsafe.Pointer(&off)), uintptr(whence), 0) - if e != 0 { - err = errnoErr(e) - } - return -} - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: int32(sec), Nsec: int32(nsec)} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: int32(sec), Usec: int32(usec)} -} - -//sys mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) - -func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { - page := uintptr(offset / 4096) - if offset != int64(page)*4096 { - return 0, EINVAL - } - return mmap2(addr, length, prot, flags, fd, page) -} - -const rlimInf32 = ^uint32(0) -const rlimInf64 = ^uint64(0) - -type rlimit32 struct { - Cur uint32 - Max uint32 -} - -//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT - -func Getrlimit(resource int, rlim *Rlimit) (err error) { - err = Prlimit(0, resource, nil, rlim) - if err != ENOSYS { - return err - } - - rl := rlimit32{} - err = getrlimit(resource, &rl) - if err != nil { - return - } - - if rl.Cur == rlimInf32 { - rlim.Cur = rlimInf64 - } else { - rlim.Cur = uint64(rl.Cur) - } - - if rl.Max == rlimInf32 { - rlim.Max = rlimInf64 - } else { - rlim.Max = uint64(rl.Max) - } - return -} - -//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT - -func Setrlimit(resource int, rlim *Rlimit) (err error) { - err = Prlimit(0, resource, rlim, nil) - if err != ENOSYS { - return err - } - - rl := rlimit32{} - if rlim.Cur == rlimInf64 { - rl.Cur = rlimInf32 - } else if rlim.Cur < uint64(rlimInf32) { - rl.Cur = uint32(rlim.Cur) - } else { - return EINVAL - } - if rlim.Max == rlimInf64 { - rl.Max = rlimInf32 - } else if rlim.Max < uint64(rlimInf32) { - rl.Max = uint32(rlim.Max) - } else { - return EINVAL - } - - return setrlimit(resource, &rl) -} - -func (r *PtraceRegs) PC() uint64 { return r.Epc } - -func (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc } - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint32(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = uint32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} - -func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { - rsa.Service_name_len = uint32(length) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go deleted file mode 100644 index eac1cf1..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go +++ /dev/null @@ -1,232 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux && ppc -// +build linux,ppc - -package unix - -import ( - "syscall" - "unsafe" -) - -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) -//sys Fchown(fd int, uid int, gid int) (err error) -//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 -//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 -//sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 -//sysnb Getegid() (egid int) -//sysnb Geteuid() (euid int) -//sysnb Getgid() (gid int) -//sysnb Getuid() (uid int) -//sys Ioperm(from int, num int, on int) (err error) -//sys Iopl(level int) (err error) -//sys Lchown(path string, uid int, gid int) (err error) -//sys Listen(s int, n int) (err error) -//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 -//sys Pause() (err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 -//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) -//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT -//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 -//sys setfsgid(gid int) (prev int, err error) -//sys setfsuid(uid int) (prev int, err error) -//sys Shutdown(fd int, how int) (err error) -//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) -//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 -//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 -//sys Ustat(dev int, ubuf *Ustat_t) (err error) -//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) -//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) -//sysnb setgroups(n int, list *_Gid_t) (err error) -//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) -//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) -//sysnb socket(domain int, typ int, proto int) (fd int, err error) -//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) -//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) -//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) -//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) -//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) - -//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) -//sysnb Gettimeofday(tv *Timeval) (err error) -//sysnb Time(t *Time_t) (tt Time_t, err error) -//sys Utime(path string, buf *Utimbuf) (err error) -//sys utimes(path string, times *[2]Timeval) (err error) - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall6(SYS_FADVISE64_64, uintptr(fd), uintptr(advice), uintptr(offset>>32), uintptr(offset), uintptr(length>>32), uintptr(length)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func seek(fd int, offset int64, whence int) (int64, syscall.Errno) { - var newoffset int64 - offsetLow := uint32(offset & 0xffffffff) - offsetHigh := uint32((offset >> 32) & 0xffffffff) - _, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0) - return newoffset, err -} - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - newoffset, errno := seek(fd, offset, whence) - if errno != 0 { - return 0, errno - } - return newoffset, nil -} - -func Fstatfs(fd int, buf *Statfs_t) (err error) { - _, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) - if e != 0 { - err = e - } - return -} - -func Statfs(path string, buf *Statfs_t) (err error) { - pathp, err := BytePtrFromString(path) - if err != nil { - return err - } - _, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) - if e != 0 { - err = e - } - return -} - -//sys mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) - -func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { - page := uintptr(offset / 4096) - if offset != int64(page)*4096 { - return 0, EINVAL - } - return mmap2(addr, length, prot, flags, fd, page) -} - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: int32(sec), Nsec: int32(nsec)} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: int32(sec), Usec: int32(usec)} -} - -type rlimit32 struct { - Cur uint32 - Max uint32 -} - -//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_UGETRLIMIT - -const rlimInf32 = ^uint32(0) -const rlimInf64 = ^uint64(0) - -func Getrlimit(resource int, rlim *Rlimit) (err error) { - err = Prlimit(0, resource, nil, rlim) - if err != ENOSYS { - return err - } - - rl := rlimit32{} - err = getrlimit(resource, &rl) - if err != nil { - return - } - - if rl.Cur == rlimInf32 { - rlim.Cur = rlimInf64 - } else { - rlim.Cur = uint64(rl.Cur) - } - - if rl.Max == rlimInf32 { - rlim.Max = rlimInf64 - } else { - rlim.Max = uint64(rl.Max) - } - return -} - -//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT - -func Setrlimit(resource int, rlim *Rlimit) (err error) { - err = Prlimit(0, resource, rlim, nil) - if err != ENOSYS { - return err - } - - rl := rlimit32{} - if rlim.Cur == rlimInf64 { - rl.Cur = rlimInf32 - } else if rlim.Cur < uint64(rlimInf32) { - rl.Cur = uint32(rlim.Cur) - } else { - return EINVAL - } - if rlim.Max == rlimInf64 { - rl.Max = rlimInf32 - } else if rlim.Max < uint64(rlimInf32) { - rl.Max = uint32(rlim.Max) - } else { - return EINVAL - } - - return setrlimit(resource, &rl) -} - -func (r *PtraceRegs) PC() uint32 { return r.Nip } - -func (r *PtraceRegs) SetPC(pc uint32) { r.Nip = pc } - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint32(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = uint32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} - -func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { - rsa.Service_name_len = uint32(length) -} - -//sys syncFileRange2(fd int, flags int, off int64, n int64) (err error) = SYS_SYNC_FILE_RANGE2 - -func SyncFileRange(fd int, off int64, n int64, flags int) error { - // The sync_file_range and sync_file_range2 syscalls differ only in the - // order of their arguments. - return syncFileRange2(fd, flags, off, n) -} - -//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) - -func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { - cmdlineLen := len(cmdline) - if cmdlineLen > 0 { - // Account for the additional NULL byte added by - // BytePtrFromString in kexecFileLoad. The kexec_file_load - // syscall expects a NULL-terminated string. - cmdlineLen++ - } - return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go deleted file mode 100644 index 4df5661..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go +++ /dev/null @@ -1,118 +0,0 @@ -// 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 linux && (ppc64 || ppc64le) -// +build linux -// +build ppc64 ppc64le - -package unix - -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) -//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 -//sys Fchown(fd int, uid int, gid int) (err error) -//sys Fstat(fd int, stat *Stat_t) (err error) -//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT -//sys Fstatfs(fd int, buf *Statfs_t) (err error) -//sys Ftruncate(fd int, length int64) (err error) -//sysnb Getegid() (egid int) -//sysnb Geteuid() (euid int) -//sysnb Getgid() (gid int) -//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) = SYS_UGETRLIMIT -//sysnb Getuid() (uid int) -//sys Ioperm(from int, num int, on int) (err error) -//sys Iopl(level int) (err error) -//sys Lchown(path string, uid int, gid int) (err error) -//sys Listen(s int, n int) (err error) -//sys Lstat(path string, stat *Stat_t) (err error) -//sys Pause() (err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 -//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) -//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK -//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT -//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) -//sys setfsgid(gid int) (prev int, err error) -//sys setfsuid(uid int) (prev int, err error) -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) -//sys Shutdown(fd int, how int) (err error) -//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) -//sys Stat(path string, stat *Stat_t) (err error) -//sys Statfs(path string, buf *Statfs_t) (err error) -//sys Truncate(path string, length int64) (err error) -//sys Ustat(dev int, ubuf *Ustat_t) (err error) -//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) -//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) -//sysnb setgroups(n int, list *_Gid_t) (err error) -//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) -//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) -//sysnb socket(domain int, typ int, proto int) (fd int, err error) -//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) -//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) -//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) -//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) -//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) -//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) - -//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) -//sysnb Gettimeofday(tv *Timeval) (err error) -//sysnb Time(t *Time_t) (tt Time_t, err error) -//sys Utime(path string, buf *Utimbuf) (err error) -//sys utimes(path string, times *[2]Timeval) (err error) - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: nsec} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: usec} -} - -func (r *PtraceRegs) PC() uint64 { return r.Nip } - -func (r *PtraceRegs) SetPC(pc uint64) { r.Nip = pc } - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint64(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint64(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = uint64(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint64(length) -} - -func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { - rsa.Service_name_len = uint64(length) -} - -//sys syncFileRange2(fd int, flags int, off int64, n int64) (err error) = SYS_SYNC_FILE_RANGE2 - -func SyncFileRange(fd int, off int64, n int64, flags int) error { - // The sync_file_range and sync_file_range2 syscalls differ only in the - // order of their arguments. - return syncFileRange2(fd, flags, off, n) -} - -//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) - -func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { - cmdlineLen := len(cmdline) - if cmdlineLen > 0 { - // Account for the additional NULL byte added by - // BytePtrFromString in kexecFileLoad. The kexec_file_load - // syscall expects a NULL-terminated string. - cmdlineLen++ - } - return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go deleted file mode 100644 index 5f4243d..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build riscv64 && linux -// +build riscv64,linux - -package unix - -import "unsafe" - -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT -//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 -//sys Fchown(fd int, uid int, gid int) (err error) -//sys Fstat(fd int, stat *Stat_t) (err error) -//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) -//sys Fstatfs(fd int, buf *Statfs_t) (err error) -//sys Ftruncate(fd int, length int64) (err error) -//sysnb Getegid() (egid int) -//sysnb Geteuid() (euid int) -//sysnb Getgid() (gid int) -//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) -//sysnb Getuid() (uid int) -//sys Listen(s int, n int) (err error) -//sys MemfdSecret(flags int) (fd int, err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 -//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - var ts *Timespec - if timeout != nil { - ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} - } - return Pselect(nfd, r, w, e, ts, nil) -} - -//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) -//sys setfsgid(gid int) (prev int, err error) -//sys setfsuid(uid int) (prev int, err error) -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) -//sys Shutdown(fd int, how int) (err error) -//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) - -func Stat(path string, stat *Stat_t) (err error) { - return Fstatat(AT_FDCWD, path, stat, 0) -} - -func Lchown(path string, uid int, gid int) (err error) { - return Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW) -} - -func Lstat(path string, stat *Stat_t) (err error) { - return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW) -} - -//sys Statfs(path string, buf *Statfs_t) (err error) -//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) -//sys Truncate(path string, length int64) (err error) - -func Ustat(dev int, ubuf *Ustat_t) (err error) { - return ENOSYS -} - -//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) -//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) -//sysnb setgroups(n int, list *_Gid_t) (err error) -//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) -//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) -//sysnb socket(domain int, typ int, proto int) (fd int, err error) -//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) -//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) -//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) -//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) -//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) -//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) - -//sysnb Gettimeofday(tv *Timeval) (err error) - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: nsec} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: usec} -} - -func futimesat(dirfd int, path string, tv *[2]Timeval) (err error) { - if tv == nil { - return utimensat(dirfd, path, nil, 0) - } - - ts := []Timespec{ - NsecToTimespec(TimevalToNsec(tv[0])), - NsecToTimespec(TimevalToNsec(tv[1])), - } - return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) -} - -func Time(t *Time_t) (Time_t, error) { - var tv Timeval - err := Gettimeofday(&tv) - if err != nil { - return 0, err - } - if t != nil { - *t = Time_t(tv.Sec) - } - return Time_t(tv.Sec), nil -} - -func Utime(path string, buf *Utimbuf) error { - tv := []Timeval{ - {Sec: buf.Actime}, - {Sec: buf.Modtime}, - } - return Utimes(path, tv) -} - -func utimes(path string, tv *[2]Timeval) (err error) { - if tv == nil { - return utimensat(AT_FDCWD, path, nil, 0) - } - - ts := []Timespec{ - NsecToTimespec(TimevalToNsec(tv[0])), - NsecToTimespec(TimevalToNsec(tv[1])), - } - return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) -} - -func (r *PtraceRegs) PC() uint64 { return r.Pc } - -func (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc } - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint64(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint64(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = uint64(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint64(length) -} - -func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { - rsa.Service_name_len = uint64(length) -} - -func Pause() error { - _, err := ppoll(nil, 0, nil, nil) - return err -} - -func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { - return Renameat2(olddirfd, oldpath, newdirfd, newpath, 0) -} - -//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) - -func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { - cmdlineLen := len(cmdline) - if cmdlineLen > 0 { - // Account for the additional NULL byte added by - // BytePtrFromString in kexecFileLoad. The kexec_file_load - // syscall expects a NULL-terminated string. - cmdlineLen++ - } - return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go deleted file mode 100644 index d0a7d40..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go +++ /dev/null @@ -1,298 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build s390x && linux -// +build s390x,linux - -package unix - -import ( - "unsafe" -) - -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) -//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 -//sys Fchown(fd int, uid int, gid int) (err error) -//sys Fstat(fd int, stat *Stat_t) (err error) -//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT -//sys Fstatfs(fd int, buf *Statfs_t) (err error) -//sys Ftruncate(fd int, length int64) (err error) -//sysnb Getegid() (egid int) -//sysnb Geteuid() (euid int) -//sysnb Getgid() (gid int) -//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) -//sysnb Getuid() (uid int) -//sys Lchown(path string, uid int, gid int) (err error) -//sys Lstat(path string, stat *Stat_t) (err error) -//sys Pause() (err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 -//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) -//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK -//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) -//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) -//sys setfsgid(gid int) (prev int, err error) -//sys setfsuid(uid int) (prev int, err error) -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) -//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) -//sys Stat(path string, stat *Stat_t) (err error) -//sys Statfs(path string, buf *Statfs_t) (err error) -//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) -//sys Truncate(path string, length int64) (err error) -//sys Ustat(dev int, ubuf *Ustat_t) (err error) -//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) -//sysnb setgroups(n int, list *_Gid_t) (err error) - -//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) -//sysnb Gettimeofday(tv *Timeval) (err error) - -func Time(t *Time_t) (tt Time_t, err error) { - var tv Timeval - err = Gettimeofday(&tv) - if err != nil { - return 0, err - } - if t != nil { - *t = Time_t(tv.Sec) - } - return Time_t(tv.Sec), nil -} - -//sys Utime(path string, buf *Utimbuf) (err error) -//sys utimes(path string, times *[2]Timeval) (err error) - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: nsec} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: usec} -} - -func Ioperm(from int, num int, on int) (err error) { - return ENOSYS -} - -func Iopl(level int) (err error) { - return ENOSYS -} - -func (r *PtraceRegs) PC() uint64 { return r.Psw.Addr } - -func (r *PtraceRegs) SetPC(pc uint64) { r.Psw.Addr = pc } - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint64(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint64(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = uint64(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint64(length) -} - -func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { - rsa.Service_name_len = uint64(length) -} - -// Linux on s390x uses the old mmap interface, which requires arguments to be passed in a struct. -// mmap2 also requires arguments to be passed in a struct; it is currently not exposed in . -func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { - mmap_args := [6]uintptr{addr, length, uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)} - r0, _, e1 := Syscall(SYS_MMAP, uintptr(unsafe.Pointer(&mmap_args[0])), 0, 0) - xaddr = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// On s390x Linux, all the socket calls go through an extra indirection. -// The arguments to the underlying system call (SYS_SOCKETCALL) are the -// number below and a pointer to an array of uintptr. -const ( - // see linux/net.h - netSocket = 1 - netBind = 2 - netConnect = 3 - netListen = 4 - netAccept = 5 - netGetSockName = 6 - netGetPeerName = 7 - netSocketPair = 8 - netSend = 9 - netRecv = 10 - netSendTo = 11 - netRecvFrom = 12 - netShutdown = 13 - netSetSockOpt = 14 - netGetSockOpt = 15 - netSendMsg = 16 - netRecvMsg = 17 - netAccept4 = 18 - netRecvMMsg = 19 - netSendMMsg = 20 -) - -func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (int, error) { - args := [4]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags)} - fd, _, err := Syscall(SYS_SOCKETCALL, netAccept4, uintptr(unsafe.Pointer(&args)), 0) - if err != 0 { - return 0, err - } - return int(fd), nil -} - -func getsockname(s int, rsa *RawSockaddrAny, addrlen *_Socklen) error { - args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))} - _, _, err := RawSyscall(SYS_SOCKETCALL, netGetSockName, uintptr(unsafe.Pointer(&args)), 0) - if err != 0 { - return err - } - return nil -} - -func getpeername(s int, rsa *RawSockaddrAny, addrlen *_Socklen) error { - args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))} - _, _, err := RawSyscall(SYS_SOCKETCALL, netGetPeerName, uintptr(unsafe.Pointer(&args)), 0) - if err != 0 { - return err - } - return nil -} - -func socketpair(domain int, typ int, flags int, fd *[2]int32) error { - args := [4]uintptr{uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd))} - _, _, err := RawSyscall(SYS_SOCKETCALL, netSocketPair, uintptr(unsafe.Pointer(&args)), 0) - if err != 0 { - return err - } - return nil -} - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) error { - args := [3]uintptr{uintptr(s), uintptr(addr), uintptr(addrlen)} - _, _, err := Syscall(SYS_SOCKETCALL, netBind, uintptr(unsafe.Pointer(&args)), 0) - if err != 0 { - return err - } - return nil -} - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) error { - args := [3]uintptr{uintptr(s), uintptr(addr), uintptr(addrlen)} - _, _, err := Syscall(SYS_SOCKETCALL, netConnect, uintptr(unsafe.Pointer(&args)), 0) - if err != 0 { - return err - } - return nil -} - -func socket(domain int, typ int, proto int) (int, error) { - args := [3]uintptr{uintptr(domain), uintptr(typ), uintptr(proto)} - fd, _, err := RawSyscall(SYS_SOCKETCALL, netSocket, uintptr(unsafe.Pointer(&args)), 0) - if err != 0 { - return 0, err - } - return int(fd), nil -} - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) error { - args := [5]uintptr{uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen))} - _, _, err := Syscall(SYS_SOCKETCALL, netGetSockOpt, uintptr(unsafe.Pointer(&args)), 0) - if err != 0 { - return err - } - return nil -} - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) error { - args := [5]uintptr{uintptr(s), uintptr(level), uintptr(name), uintptr(val), vallen} - _, _, err := Syscall(SYS_SOCKETCALL, netSetSockOpt, uintptr(unsafe.Pointer(&args)), 0) - if err != 0 { - return err - } - return nil -} - -func recvfrom(s int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (int, error) { - var base uintptr - if len(p) > 0 { - base = uintptr(unsafe.Pointer(&p[0])) - } - args := [6]uintptr{uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))} - n, _, err := Syscall(SYS_SOCKETCALL, netRecvFrom, uintptr(unsafe.Pointer(&args)), 0) - if err != 0 { - return 0, err - } - return int(n), nil -} - -func sendto(s int, p []byte, flags int, to unsafe.Pointer, addrlen _Socklen) error { - var base uintptr - if len(p) > 0 { - base = uintptr(unsafe.Pointer(&p[0])) - } - args := [6]uintptr{uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(to), uintptr(addrlen)} - _, _, err := Syscall(SYS_SOCKETCALL, netSendTo, uintptr(unsafe.Pointer(&args)), 0) - if err != 0 { - return err - } - return nil -} - -func recvmsg(s int, msg *Msghdr, flags int) (int, error) { - args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)} - n, _, err := Syscall(SYS_SOCKETCALL, netRecvMsg, uintptr(unsafe.Pointer(&args)), 0) - if err != 0 { - return 0, err - } - return int(n), nil -} - -func sendmsg(s int, msg *Msghdr, flags int) (int, error) { - args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)} - n, _, err := Syscall(SYS_SOCKETCALL, netSendMsg, uintptr(unsafe.Pointer(&args)), 0) - if err != 0 { - return 0, err - } - return int(n), nil -} - -func Listen(s int, n int) error { - args := [2]uintptr{uintptr(s), uintptr(n)} - _, _, err := Syscall(SYS_SOCKETCALL, netListen, uintptr(unsafe.Pointer(&args)), 0) - if err != 0 { - return err - } - return nil -} - -func Shutdown(s, how int) error { - args := [2]uintptr{uintptr(s), uintptr(how)} - _, _, err := Syscall(SYS_SOCKETCALL, netShutdown, uintptr(unsafe.Pointer(&args)), 0) - if err != 0 { - return err - } - return nil -} - -//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) - -func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { - cmdlineLen := len(cmdline) - if cmdlineLen > 0 { - // Account for the additional NULL byte added by - // BytePtrFromString in kexecFileLoad. The kexec_file_load - // syscall expects a NULL-terminated string. - cmdlineLen++ - } - return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go deleted file mode 100644 index f5c793b..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go +++ /dev/null @@ -1,114 +0,0 @@ -// 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 sparc64 && linux -// +build sparc64,linux - -package unix - -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) -//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 -//sys Fchown(fd int, uid int, gid int) (err error) -//sys Fstat(fd int, stat *Stat_t) (err error) -//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 -//sys Fstatfs(fd int, buf *Statfs_t) (err error) -//sys Ftruncate(fd int, length int64) (err error) -//sysnb Getegid() (egid int) -//sysnb Geteuid() (euid int) -//sysnb Getgid() (gid int) -//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) -//sysnb Getuid() (uid int) -//sys Lchown(path string, uid int, gid int) (err error) -//sys Listen(s int, n int) (err error) -//sys Lstat(path string, stat *Stat_t) (err error) -//sys Pause() (err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 -//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) -//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK -//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) -//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) -//sys setfsgid(gid int) (prev int, err error) -//sys setfsuid(uid int) (prev int, err error) -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) -//sys Shutdown(fd int, how int) (err error) -//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) -//sys Stat(path string, stat *Stat_t) (err error) -//sys Statfs(path string, buf *Statfs_t) (err error) -//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) -//sys Truncate(path string, length int64) (err error) -//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) -//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) -//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) -//sysnb setgroups(n int, list *_Gid_t) (err error) -//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) -//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) -//sysnb socket(domain int, typ int, proto int) (fd int, err error) -//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) -//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) -//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) -//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) -//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) -//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) -//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) - -func Ioperm(from int, num int, on int) (err error) { - return ENOSYS -} - -func Iopl(level int) (err error) { - return ENOSYS -} - -//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) -//sysnb Gettimeofday(tv *Timeval) (err error) - -func Time(t *Time_t) (tt Time_t, err error) { - var tv Timeval - err = Gettimeofday(&tv) - if err != nil { - return 0, err - } - if t != nil { - *t = Time_t(tv.Sec) - } - return Time_t(tv.Sec), nil -} - -//sys Utime(path string, buf *Utimbuf) (err error) -//sys utimes(path string, times *[2]Timeval) (err error) - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: nsec} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: int32(usec)} -} - -func (r *PtraceRegs) PC() uint64 { return r.Tpc } - -func (r *PtraceRegs) SetPC(pc uint64) { r.Tpc = pc } - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint64(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint64(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = uint64(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint64(length) -} - -func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { - rsa.Service_name_len = uint64(length) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd.go b/vendor/golang.org/x/sys/unix/syscall_netbsd.go deleted file mode 100644 index 666f0a1..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_netbsd.go +++ /dev/null @@ -1,609 +0,0 @@ -// Copyright 2009,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. - -// NetBSD system calls. -// This file is compiled as ordinary Go code, -// but it is also input to mksyscall, -// which parses the //sys lines and generates system call stubs. -// Note that sometimes we use a lowercase //sys name and wrap -// it in our own nicer implementation, either here or in -// syscall_bsd.go or syscall_unix.go. - -package unix - -import ( - "runtime" - "syscall" - "unsafe" -) - -// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. -type SockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [12]int8 - raw RawSockaddrDatalink -} - -func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { - return nil, EAFNOSUPPORT -} - -func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) - -func sysctlNodes(mib []_C_int) (nodes []Sysctlnode, err error) { - var olen uintptr - - // Get a list of all sysctl nodes below the given MIB by performing - // a sysctl for the given MIB with CTL_QUERY appended. - mib = append(mib, CTL_QUERY) - qnode := Sysctlnode{Flags: SYSCTL_VERS_1} - qp := (*byte)(unsafe.Pointer(&qnode)) - sz := unsafe.Sizeof(qnode) - if err = sysctl(mib, nil, &olen, qp, sz); err != nil { - return nil, err - } - - // Now that we know the size, get the actual nodes. - nodes = make([]Sysctlnode, olen/sz) - np := (*byte)(unsafe.Pointer(&nodes[0])) - if err = sysctl(mib, np, &olen, qp, sz); err != nil { - return nil, err - } - - return nodes, nil -} - -func nametomib(name string) (mib []_C_int, err error) { - // Split name into components. - var parts []string - last := 0 - for i := 0; i < len(name); i++ { - if name[i] == '.' { - parts = append(parts, name[last:i]) - last = i + 1 - } - } - parts = append(parts, name[last:]) - - // Discover the nodes and construct the MIB OID. - for partno, part := range parts { - nodes, err := sysctlNodes(mib) - if err != nil { - return nil, err - } - for _, node := range nodes { - n := make([]byte, 0) - for i := range node.Name { - if node.Name[i] != 0 { - n = append(n, byte(node.Name[i])) - } - } - if string(n) == part { - mib = append(mib, _C_int(node.Num)) - break - } - } - if len(mib) != partno+1 { - return nil, EINVAL - } - } - - return mib, nil -} - -func direntIno(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) -} - -func direntReclen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) -} - -func direntNamlen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) -} - -func Pipe(p []int) (err error) { - return Pipe2(p, 0) -} - -//sysnb pipe2(p *[2]_C_int, flags int) (err error) - -func Pipe2(p []int, flags int) error { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err := pipe2(&pp, flags) - if err == nil { - p[0] = int(pp[0]) - p[1] = int(pp[1]) - } - return err -} - -//sys Getdents(fd int, buf []byte) (n int, err error) - -func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { - n, err = Getdents(fd, buf) - if err != nil || basep == nil { - return - } - - var off int64 - off, err = Seek(fd, 0, 1 /* SEEK_CUR */) - if err != nil { - *basep = ^uintptr(0) - return - } - *basep = uintptr(off) - if unsafe.Sizeof(*basep) == 8 { - return - } - if off>>32 != 0 { - // We can't stuff the offset back into a uintptr, so any - // future calls would be suspect. Generate an error. - // EIO is allowed by getdirentries. - err = EIO - } - return -} - -//sys Getcwd(buf []byte) (n int, err error) = SYS___GETCWD - -// TODO -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - return -1, ENOSYS -} - -//sys ioctl(fd int, req uint, arg uintptr) (err error) - -//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL - -func IoctlGetPtmget(fd int, req uint) (*Ptmget, error) { - var value Ptmget - err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) - runtime.KeepAlive(value) - return &value, err -} - -func Uname(uname *Utsname) error { - mib := []_C_int{CTL_KERN, KERN_OSTYPE} - n := unsafe.Sizeof(uname.Sysname) - if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil { - return err - } - - mib = []_C_int{CTL_KERN, KERN_HOSTNAME} - n = unsafe.Sizeof(uname.Nodename) - if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil { - return err - } - - mib = []_C_int{CTL_KERN, KERN_OSRELEASE} - n = unsafe.Sizeof(uname.Release) - if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil { - return err - } - - mib = []_C_int{CTL_KERN, KERN_VERSION} - n = unsafe.Sizeof(uname.Version) - if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil { - return err - } - - // The version might have newlines or tabs in it, convert them to - // spaces. - for i, b := range uname.Version { - if b == '\n' || b == '\t' { - if i == len(uname.Version)-1 { - uname.Version[i] = 0 - } else { - uname.Version[i] = ' ' - } - } - } - - mib = []_C_int{CTL_HW, HW_MACHINE} - n = unsafe.Sizeof(uname.Machine) - if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil { - return err - } - - return nil -} - -func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - if raceenabled { - raceReleaseMerge(unsafe.Pointer(&ioSync)) - } - return sendfile(outfd, infd, offset, count) -} - -func Fstatvfs(fd int, buf *Statvfs_t) (err error) { - return Fstatvfs1(fd, buf, ST_WAIT) -} - -func Statvfs(path string, buf *Statvfs_t) (err error) { - return Statvfs1(path, buf, ST_WAIT) -} - -/* - * Exposed directly - */ -//sys Access(path string, mode uint32) (err error) -//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) -//sys Chdir(path string) (err error) -//sys Chflags(path string, flags int) (err error) -//sys Chmod(path string, mode uint32) (err error) -//sys Chown(path string, uid int, gid int) (err error) -//sys Chroot(path string) (err error) -//sys Close(fd int) (err error) -//sys Dup(fd int) (nfd int, err error) -//sys Dup2(from int, to int) (err error) -//sys Dup3(from int, to int, flags int) (err error) -//sys Exit(code int) -//sys ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) -//sys ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) -//sys ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) -//sys ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) -//sys ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) -//sys ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) -//sys ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) -//sys ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) -//sys ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) -//sys ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) -//sys ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) -//sys ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) -//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) -//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE -//sys Fchdir(fd int) (err error) -//sys Fchflags(fd int, flags int) (err error) -//sys Fchmod(fd int, mode uint32) (err error) -//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) -//sys Fchown(fd int, uid int, gid int) (err error) -//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) -//sys Flock(fd int, how int) (err error) -//sys Fpathconf(fd int, name int) (val int, err error) -//sys Fstat(fd int, stat *Stat_t) (err error) -//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) -//sys Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) = SYS_FSTATVFS1 -//sys Fsync(fd int) (err error) -//sys Ftruncate(fd int, length int64) (err error) -//sysnb Getegid() (egid int) -//sysnb Geteuid() (uid int) -//sysnb Getgid() (gid int) -//sysnb Getpgid(pid int) (pgid int, err error) -//sysnb Getpgrp() (pgrp int) -//sysnb Getpid() (pid int) -//sysnb Getppid() (ppid int) -//sys Getpriority(which int, who int) (prio int, err error) -//sysnb Getrlimit(which int, lim *Rlimit) (err error) -//sysnb Getrusage(who int, rusage *Rusage) (err error) -//sysnb Getsid(pid int) (sid int, err error) -//sysnb Gettimeofday(tv *Timeval) (err error) -//sysnb Getuid() (uid int) -//sys Issetugid() (tainted bool) -//sys Kill(pid int, signum syscall.Signal) (err error) -//sys Kqueue() (fd int, err error) -//sys Lchown(path string, uid int, gid int) (err error) -//sys Link(path string, link string) (err error) -//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) -//sys Listen(s int, backlog int) (err error) -//sys Lstat(path string, stat *Stat_t) (err error) -//sys Mkdir(path string, mode uint32) (err error) -//sys Mkdirat(dirfd int, path string, mode uint32) (err error) -//sys Mkfifo(path string, mode uint32) (err error) -//sys Mkfifoat(dirfd int, path string, mode uint32) (err error) -//sys Mknod(path string, mode uint32, dev int) (err error) -//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) -//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) -//sys Open(path string, mode int, perm uint32) (fd int, err error) -//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) -//sys Pathconf(path string, name int) (val int, err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) -//sys read(fd int, p []byte) (n int, err error) -//sys Readlink(path string, buf []byte) (n int, err error) -//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) -//sys Rename(from string, to string) (err error) -//sys Renameat(fromfd int, from string, tofd int, to string) (err error) -//sys Revoke(path string) (err error) -//sys Rmdir(path string) (err error) -//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK -//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) -//sysnb Setegid(egid int) (err error) -//sysnb Seteuid(euid int) (err error) -//sysnb Setgid(gid int) (err error) -//sysnb Setpgid(pid int, pgid int) (err error) -//sys Setpriority(which int, who int, prio int) (err error) -//sysnb Setregid(rgid int, egid int) (err error) -//sysnb Setreuid(ruid int, euid int) (err error) -//sysnb Setrlimit(which int, lim *Rlimit) (err error) -//sysnb Setsid() (pid int, err error) -//sysnb Settimeofday(tp *Timeval) (err error) -//sysnb Setuid(uid int) (err error) -//sys Stat(path string, stat *Stat_t) (err error) -//sys Statvfs1(path string, buf *Statvfs_t, flags int) (err error) = SYS_STATVFS1 -//sys Symlink(path string, link string) (err error) -//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) -//sys Sync() (err error) -//sys Truncate(path string, length int64) (err error) -//sys Umask(newmask int) (oldmask int) -//sys Unlink(path string) (err error) -//sys Unlinkat(dirfd int, path string, flags int) (err error) -//sys Unmount(path string, flags int) (err error) -//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 readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ -//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE -//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) - -/* - * Unimplemented - */ -// ____semctl13 -// __clone -// __fhopen40 -// __fhstat40 -// __fhstatvfs140 -// __fstat30 -// __getcwd -// __getfh30 -// __getlogin -// __lstat30 -// __mount50 -// __msgctl13 -// __msync13 -// __ntp_gettime30 -// __posix_chown -// __posix_fchown -// __posix_lchown -// __posix_rename -// __setlogin -// __shmctl13 -// __sigaction_sigtramp -// __sigaltstack14 -// __sigpending14 -// __sigprocmask14 -// __sigsuspend14 -// __sigtimedwait -// __stat30 -// __syscall -// __vfork14 -// _ksem_close -// _ksem_destroy -// _ksem_getvalue -// _ksem_init -// _ksem_open -// _ksem_post -// _ksem_trywait -// _ksem_unlink -// _ksem_wait -// _lwp_continue -// _lwp_create -// _lwp_ctl -// _lwp_detach -// _lwp_exit -// _lwp_getname -// _lwp_getprivate -// _lwp_kill -// _lwp_park -// _lwp_self -// _lwp_setname -// _lwp_setprivate -// _lwp_suspend -// _lwp_unpark -// _lwp_unpark_all -// _lwp_wait -// _lwp_wakeup -// _pset_bind -// _sched_getaffinity -// _sched_getparam -// _sched_setaffinity -// _sched_setparam -// acct -// aio_cancel -// aio_error -// aio_fsync -// aio_read -// aio_return -// aio_suspend -// aio_write -// break -// clock_getres -// clock_gettime -// clock_settime -// compat_09_ogetdomainname -// compat_09_osetdomainname -// compat_09_ouname -// compat_10_omsgsys -// compat_10_osemsys -// compat_10_oshmsys -// compat_12_fstat12 -// compat_12_getdirentries -// compat_12_lstat12 -// compat_12_msync -// compat_12_oreboot -// compat_12_oswapon -// compat_12_stat12 -// compat_13_sigaction13 -// compat_13_sigaltstack13 -// compat_13_sigpending13 -// compat_13_sigprocmask13 -// compat_13_sigreturn13 -// compat_13_sigsuspend13 -// compat_14___semctl -// compat_14_msgctl -// compat_14_shmctl -// compat_16___sigaction14 -// compat_16___sigreturn14 -// compat_20_fhstatfs -// compat_20_fstatfs -// compat_20_getfsstat -// compat_20_statfs -// compat_30___fhstat30 -// compat_30___fstat13 -// compat_30___lstat13 -// compat_30___stat13 -// compat_30_fhopen -// compat_30_fhstat -// compat_30_fhstatvfs1 -// compat_30_getdents -// compat_30_getfh -// compat_30_ntp_gettime -// compat_30_socket -// compat_40_mount -// compat_43_fstat43 -// compat_43_lstat43 -// compat_43_oaccept -// compat_43_ocreat -// compat_43_oftruncate -// compat_43_ogetdirentries -// compat_43_ogetdtablesize -// compat_43_ogethostid -// compat_43_ogethostname -// compat_43_ogetkerninfo -// compat_43_ogetpagesize -// compat_43_ogetpeername -// compat_43_ogetrlimit -// compat_43_ogetsockname -// compat_43_okillpg -// compat_43_olseek -// compat_43_ommap -// compat_43_oquota -// compat_43_orecv -// compat_43_orecvfrom -// compat_43_orecvmsg -// compat_43_osend -// compat_43_osendmsg -// compat_43_osethostid -// compat_43_osethostname -// compat_43_osetrlimit -// compat_43_osigblock -// compat_43_osigsetmask -// compat_43_osigstack -// compat_43_osigvec -// compat_43_otruncate -// compat_43_owait -// compat_43_stat43 -// execve -// extattr_delete_fd -// extattr_delete_file -// extattr_delete_link -// extattr_get_fd -// extattr_get_file -// extattr_get_link -// extattr_list_fd -// extattr_list_file -// extattr_list_link -// extattr_set_fd -// extattr_set_file -// extattr_set_link -// extattrctl -// fchroot -// fdatasync -// fgetxattr -// fktrace -// flistxattr -// fork -// fremovexattr -// fsetxattr -// fstatvfs1 -// fsync_range -// getcontext -// getitimer -// getvfsstat -// getxattr -// ktrace -// lchflags -// lchmod -// lfs_bmapv -// lfs_markv -// lfs_segclean -// lfs_segwait -// lgetxattr -// lio_listio -// listxattr -// llistxattr -// lremovexattr -// lseek -// lsetxattr -// lutimes -// madvise -// mincore -// minherit -// modctl -// mq_close -// mq_getattr -// mq_notify -// mq_open -// mq_receive -// mq_send -// mq_setattr -// mq_timedreceive -// mq_timedsend -// mq_unlink -// mremap -// msgget -// msgrcv -// msgsnd -// nfssvc -// ntp_adjtime -// pmc_control -// pmc_get_info -// pollts -// preadv -// profil -// pselect -// pset_assign -// pset_create -// pset_destroy -// ptrace -// pwritev -// quotactl -// rasctl -// readv -// reboot -// removexattr -// sa_enable -// sa_preempt -// sa_register -// sa_setconcurrency -// sa_stacks -// sa_yield -// sbrk -// sched_yield -// semconfig -// semget -// semop -// setcontext -// setitimer -// setxattr -// shmat -// shmdt -// shmget -// sstk -// statvfs1 -// swapctl -// sysarch -// syscall -// timer_create -// timer_delete -// timer_getoverrun -// timer_gettime -// timer_settime -// undelete -// utrace -// uuidgen -// vadvise -// vfork -// writev diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go deleted file mode 100644 index 5199d28..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go +++ /dev/null @@ -1,38 +0,0 @@ -// 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 386 && netbsd -// +build 386,netbsd - -package unix - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: int32(nsec)} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: int32(usec)} -} - -func SetKevent(k *Kevent_t, fd, mode, flags int) { - k.Ident = uint32(fd) - k.Filter = uint32(mode) - k.Flags = uint32(flags) -} - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint32(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = int32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go deleted file mode 100644 index 70a9c52..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go +++ /dev/null @@ -1,38 +0,0 @@ -// 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 amd64 && netbsd -// +build amd64,netbsd - -package unix - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: nsec} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: int32(usec)} -} - -func SetKevent(k *Kevent_t, fd, mode, flags int) { - k.Ident = uint64(fd) - k.Filter = uint32(mode) - k.Flags = uint32(flags) -} - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint64(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = int32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go deleted file mode 100644 index 3eb5942..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build arm && netbsd -// +build arm,netbsd - -package unix - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: int32(nsec)} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: int32(usec)} -} - -func SetKevent(k *Kevent_t, fd, mode, flags int) { - k.Ident = uint32(fd) - k.Filter = uint32(mode) - k.Flags = uint32(flags) -} - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint32(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = int32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go deleted file mode 100644 index fc6ccfd..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go +++ /dev/null @@ -1,38 +0,0 @@ -// 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 arm64 && netbsd -// +build arm64,netbsd - -package unix - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: nsec} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: int32(usec)} -} - -func SetKevent(k *Kevent_t, fd, mode, flags int) { - k.Ident = uint64(fd) - k.Filter = uint32(mode) - k.Flags = uint32(flags) -} - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint64(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = int32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/vendor/golang.org/x/sys/unix/syscall_openbsd.go deleted file mode 100644 index 78daceb..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_openbsd.go +++ /dev/null @@ -1,389 +0,0 @@ -// Copyright 2009,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. - -// OpenBSD system calls. -// This file is compiled as ordinary Go code, -// but it is also input to mksyscall, -// which parses the //sys lines and generates system call stubs. -// Note that sometimes we use a lowercase //sys name and wrap -// it in our own nicer implementation, either here or in -// syscall_bsd.go or syscall_unix.go. - -package unix - -import ( - "sort" - "syscall" - "unsafe" -) - -// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. -type SockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [24]int8 - raw RawSockaddrDatalink -} - -func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { - return nil, EAFNOSUPPORT -} - -func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) - -func nametomib(name string) (mib []_C_int, err error) { - i := sort.Search(len(sysctlMib), func(i int) bool { - return sysctlMib[i].ctlname >= name - }) - if i < len(sysctlMib) && sysctlMib[i].ctlname == name { - return sysctlMib[i].ctloid, nil - } - return nil, EINVAL -} - -func direntIno(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) -} - -func direntReclen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) -} - -func direntNamlen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) -} - -func SysctlUvmexp(name string) (*Uvmexp, error) { - mib, err := sysctlmib(name) - if err != nil { - return nil, err - } - - n := uintptr(SizeofUvmexp) - var u Uvmexp - if err := sysctl(mib, (*byte)(unsafe.Pointer(&u)), &n, nil, 0); err != nil { - return nil, err - } - if n != SizeofUvmexp { - return nil, EIO - } - return &u, nil -} - -func Pipe(p []int) (err error) { - return Pipe2(p, 0) -} - -//sysnb pipe2(p *[2]_C_int, flags int) (err error) - -func Pipe2(p []int, flags int) error { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err := pipe2(&pp, flags) - if err == nil { - p[0] = int(pp[0]) - p[1] = int(pp[1]) - } - return err -} - -//sys Getdents(fd int, buf []byte) (n int, err error) - -func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { - n, err = Getdents(fd, buf) - if err != nil || basep == nil { - return - } - - var off int64 - off, err = Seek(fd, 0, 1 /* SEEK_CUR */) - if err != nil { - *basep = ^uintptr(0) - return - } - *basep = uintptr(off) - if unsafe.Sizeof(*basep) == 8 { - return - } - if off>>32 != 0 { - // We can't stuff the offset back into a uintptr, so any - // future calls would be suspect. Generate an error. - // EIO was allowed by getdirentries. - err = EIO - } - return -} - -//sys Getcwd(buf []byte) (n int, err error) = SYS___GETCWD - -func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - if raceenabled { - raceReleaseMerge(unsafe.Pointer(&ioSync)) - } - return sendfile(outfd, infd, offset, count) -} - -// TODO -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - return -1, ENOSYS -} - -func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { - var _p0 unsafe.Pointer - var bufsize uintptr - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) - } - r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -//sys ioctl(fd int, req uint, arg uintptr) (err error) - -//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL - -//sys ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) - -func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { - if len(fds) == 0 { - return ppoll(nil, 0, timeout, sigmask) - } - return ppoll(&fds[0], len(fds), timeout, sigmask) -} - -func Uname(uname *Utsname) error { - mib := []_C_int{CTL_KERN, KERN_OSTYPE} - n := unsafe.Sizeof(uname.Sysname) - if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil { - return err - } - - mib = []_C_int{CTL_KERN, KERN_HOSTNAME} - n = unsafe.Sizeof(uname.Nodename) - if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil { - return err - } - - mib = []_C_int{CTL_KERN, KERN_OSRELEASE} - n = unsafe.Sizeof(uname.Release) - if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil { - return err - } - - mib = []_C_int{CTL_KERN, KERN_VERSION} - n = unsafe.Sizeof(uname.Version) - if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil { - return err - } - - // The version might have newlines or tabs in it, convert them to - // spaces. - for i, b := range uname.Version { - if b == '\n' || b == '\t' { - if i == len(uname.Version)-1 { - uname.Version[i] = 0 - } else { - uname.Version[i] = ' ' - } - } - } - - mib = []_C_int{CTL_HW, HW_MACHINE} - n = unsafe.Sizeof(uname.Machine) - if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil { - return err - } - - return nil -} - -/* - * Exposed directly - */ -//sys Access(path string, mode uint32) (err error) -//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) -//sys Chdir(path string) (err error) -//sys Chflags(path string, flags int) (err error) -//sys Chmod(path string, mode uint32) (err error) -//sys Chown(path string, uid int, gid int) (err error) -//sys Chroot(path string) (err error) -//sys Close(fd int) (err error) -//sys Dup(fd int) (nfd int, err error) -//sys Dup2(from int, to int) (err error) -//sys Dup3(from int, to int, flags int) (err error) -//sys Exit(code int) -//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) -//sys Fchdir(fd int) (err error) -//sys Fchflags(fd int, flags int) (err error) -//sys Fchmod(fd int, mode uint32) (err error) -//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) -//sys Fchown(fd int, uid int, gid int) (err error) -//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) -//sys Flock(fd int, how int) (err error) -//sys Fpathconf(fd int, name int) (val int, err error) -//sys Fstat(fd int, stat *Stat_t) (err error) -//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) -//sys Fstatfs(fd int, stat *Statfs_t) (err error) -//sys Fsync(fd int) (err error) -//sys Ftruncate(fd int, length int64) (err error) -//sysnb Getegid() (egid int) -//sysnb Geteuid() (uid int) -//sysnb Getgid() (gid int) -//sysnb Getpgid(pid int) (pgid int, err error) -//sysnb Getpgrp() (pgrp int) -//sysnb Getpid() (pid int) -//sysnb Getppid() (ppid int) -//sys Getpriority(which int, who int) (prio int, err error) -//sysnb Getrlimit(which int, lim *Rlimit) (err error) -//sysnb Getrtable() (rtable int, err error) -//sysnb Getrusage(who int, rusage *Rusage) (err error) -//sysnb Getsid(pid int) (sid int, err error) -//sysnb Gettimeofday(tv *Timeval) (err error) -//sysnb Getuid() (uid int) -//sys Issetugid() (tainted bool) -//sys Kill(pid int, signum syscall.Signal) (err error) -//sys Kqueue() (fd int, err error) -//sys Lchown(path string, uid int, gid int) (err error) -//sys Link(path string, link string) (err error) -//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) -//sys Listen(s int, backlog int) (err error) -//sys Lstat(path string, stat *Stat_t) (err error) -//sys Mkdir(path string, mode uint32) (err error) -//sys Mkdirat(dirfd int, path string, mode uint32) (err error) -//sys Mkfifo(path string, mode uint32) (err error) -//sys Mkfifoat(dirfd int, path string, mode uint32) (err error) -//sys Mknod(path string, mode uint32, dev int) (err error) -//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) -//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) -//sys Open(path string, mode int, perm uint32) (fd int, err error) -//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) -//sys Pathconf(path string, name int) (val int, err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) -//sys read(fd int, p []byte) (n int, err error) -//sys Readlink(path string, buf []byte) (n int, err error) -//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) -//sys Rename(from string, to string) (err error) -//sys Renameat(fromfd int, from string, tofd int, to string) (err error) -//sys Revoke(path string) (err error) -//sys Rmdir(path string) (err error) -//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK -//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) -//sysnb Setegid(egid int) (err error) -//sysnb Seteuid(euid int) (err error) -//sysnb Setgid(gid int) (err error) -//sys Setlogin(name string) (err error) -//sysnb Setpgid(pid int, pgid int) (err error) -//sys Setpriority(which int, who int, prio int) (err error) -//sysnb Setregid(rgid int, egid int) (err error) -//sysnb Setreuid(ruid int, euid int) (err error) -//sysnb Setresgid(rgid int, egid int, sgid int) (err error) -//sysnb Setresuid(ruid int, euid int, suid int) (err error) -//sysnb Setrlimit(which int, lim *Rlimit) (err error) -//sysnb Setrtable(rtable int) (err error) -//sysnb Setsid() (pid int, err error) -//sysnb Settimeofday(tp *Timeval) (err error) -//sysnb Setuid(uid int) (err error) -//sys Stat(path string, stat *Stat_t) (err error) -//sys Statfs(path string, stat *Statfs_t) (err error) -//sys Symlink(path string, link string) (err error) -//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) -//sys Sync() (err error) -//sys Truncate(path string, length int64) (err error) -//sys Umask(newmask int) (oldmask int) -//sys Unlink(path string) (err error) -//sys Unlinkat(dirfd int, path string, flags int) (err error) -//sys Unmount(path string, flags int) (err error) -//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 readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ -//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE -//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) - -/* - * Unimplemented - */ -// __getcwd -// __semctl -// __syscall -// __sysctl -// adjfreq -// break -// clock_getres -// clock_gettime -// clock_settime -// closefrom -// execve -// fhopen -// fhstat -// fhstatfs -// fork -// futimens -// getfh -// getgid -// getitimer -// getlogin -// getresgid -// getresuid -// getthrid -// ktrace -// lfs_bmapv -// lfs_markv -// lfs_segclean -// lfs_segwait -// mincore -// minherit -// mount -// mquery -// msgctl -// msgget -// msgrcv -// msgsnd -// nfssvc -// nnpfspioctl -// preadv -// profil -// pwritev -// quotactl -// readv -// reboot -// renameat -// rfork -// sched_yield -// semget -// semop -// setgroups -// setitimer -// setsockopt -// shmat -// shmctl -// shmdt -// shmget -// sigaction -// sigaltstack -// sigpending -// sigprocmask -// sigreturn -// sigsuspend -// sysarch -// syscall -// threxit -// thrsigdivert -// thrsleep -// thrwakeup -// vfork -// writev diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go deleted file mode 100644 index 6baabcd..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go +++ /dev/null @@ -1,42 +0,0 @@ -// 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 386 && openbsd -// +build 386,openbsd - -package unix - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: int32(nsec)} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: int32(usec)} -} - -func SetKevent(k *Kevent_t, fd, mode, flags int) { - k.Ident = uint32(fd) - k.Filter = int16(mode) - k.Flags = uint16(flags) -} - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint32(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = uint32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} - -// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions -// of openbsd/386 the syscall is called sysctl instead of __sysctl. -const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go deleted file mode 100644 index bab2536..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go +++ /dev/null @@ -1,42 +0,0 @@ -// 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 amd64 && openbsd -// +build amd64,openbsd - -package unix - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: nsec} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: usec} -} - -func SetKevent(k *Kevent_t, fd, mode, flags int) { - k.Ident = uint64(fd) - k.Filter = int16(mode) - k.Flags = uint16(flags) -} - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint64(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = uint32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} - -// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions -// of openbsd/amd64 the syscall is called sysctl instead of __sysctl. -const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go deleted file mode 100644 index 8eed3c4..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build arm && openbsd -// +build arm,openbsd - -package unix - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: int32(nsec)} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: int32(usec)} -} - -func SetKevent(k *Kevent_t, fd, mode, flags int) { - k.Ident = uint32(fd) - k.Filter = int16(mode) - k.Flags = uint16(flags) -} - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint32(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = uint32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} - -// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions -// of openbsd/arm the syscall is called sysctl instead of __sysctl. -const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go deleted file mode 100644 index 483dde9..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go +++ /dev/null @@ -1,42 +0,0 @@ -// 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 arm64 && openbsd -// +build arm64,openbsd - -package unix - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: nsec} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: usec} -} - -func SetKevent(k *Kevent_t, fd, mode, flags int) { - k.Ident = uint64(fd) - k.Filter = int16(mode) - k.Flags = uint16(flags) -} - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint64(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = uint32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} - -// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions -// of openbsd/amd64 the syscall is called sysctl instead of __sysctl. -const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_libc.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_libc.go deleted file mode 100644 index 5930a89..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_openbsd_libc.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2022 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build (openbsd && 386) || (openbsd && amd64) || (openbsd && arm) || (openbsd && arm64) -// +build openbsd,386 openbsd,amd64 openbsd,arm openbsd,arm64 - -package unix - -import _ "unsafe" - -// Implemented in the runtime package (runtime/sys_openbsd3.go) -func syscall_syscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) -func syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) -func syscall_syscall10(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 uintptr) (r1, r2 uintptr, err Errno) -func syscall_rawSyscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) -func syscall_rawSyscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) - -//go:linkname syscall_syscall syscall.syscall -//go:linkname syscall_syscall6 syscall.syscall6 -//go:linkname syscall_syscall10 syscall.syscall10 -//go:linkname syscall_rawSyscall syscall.rawSyscall -//go:linkname syscall_rawSyscall6 syscall.rawSyscall6 - -func syscall_syscall9(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) { - return syscall_syscall10(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, 0) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go deleted file mode 100644 index 1378489..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go +++ /dev/null @@ -1,39 +0,0 @@ -// 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 unix - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: nsec} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: usec} -} - -func SetKevent(k *Kevent_t, fd, mode, flags int) { - k.Ident = uint64(fd) - k.Filter = int16(mode) - k.Flags = uint16(flags) -} - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint64(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = uint32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} - -// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions -// of OpenBSD the syscall is called sysctl instead of __sysctl. -const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go deleted file mode 100644 index 8c6f409..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_solaris.go +++ /dev/null @@ -1,1028 +0,0 @@ -// 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. - -// Solaris system calls. -// This file is compiled as ordinary Go code, -// but it is also input to mksyscall, -// which parses the //sys lines and generates system call stubs. -// Note that sometimes we use a lowercase //sys name and wrap -// it in our own nicer implementation, either here or in -// syscall_solaris.go or syscall_unix.go. - -package unix - -import ( - "fmt" - "os" - "runtime" - "sync" - "syscall" - "unsafe" -) - -// Implemented in runtime/syscall_solaris.go. -type syscallFunc uintptr - -func rawSysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) -func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) - -// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. -type SockaddrDatalink struct { - Family uint16 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [244]int8 - raw RawSockaddrDatalink -} - -func direntIno(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) -} - -func direntReclen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) -} - -func direntNamlen(buf []byte) (uint64, bool) { - reclen, ok := direntReclen(buf) - if !ok { - return 0, false - } - return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true -} - -//sysnb pipe(p *[2]_C_int) (n int, err error) - -func Pipe(p []int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - n, err := pipe(&pp) - if n != 0 { - return err - } - if err == nil { - p[0] = int(pp[0]) - p[1] = int(pp[1]) - } - return nil -} - -//sysnb pipe2(p *[2]_C_int, flags int) (err error) - -func Pipe2(p []int, flags int) error { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err := pipe2(&pp, flags) - if err == nil { - p[0] = int(pp[0]) - p[1] = int(pp[1]) - } - return err -} - -func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { - if sa.Port < 0 || sa.Port > 0xFFFF { - return nil, 0, 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), SizeofSockaddrInet4, nil -} - -func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { - if sa.Port < 0 || sa.Port > 0xFFFF { - return nil, 0, 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), SizeofSockaddrInet6, nil -} - -func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { - name := sa.Name - n := len(name) - if n >= len(sa.raw.Path) { - return nil, 0, 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 := _Socklen(2) - if n > 0 { - sl += _Socklen(n) + 1 - } - if sa.raw.Path[0] == '@' { - sa.raw.Path[0] = 0 - // Don't count trailing NUL for abstract address. - sl-- - } - - return unsafe.Pointer(&sa.raw), sl, nil -} - -//sys getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getsockname - -func Getsockname(fd int) (sa Sockaddr, err error) { - var rsa RawSockaddrAny - var len _Socklen = SizeofSockaddrAny - if err = getsockname(fd, &rsa, &len); err != nil { - return - } - return anyToSockaddr(fd, &rsa) -} - -// GetsockoptString returns the string value of the socket option opt for the -// socket associated with fd at the given socket level. -func GetsockoptString(fd, level, opt int) (string, error) { - buf := make([]byte, 256) - vallen := _Socklen(len(buf)) - err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen) - if err != nil { - return "", err - } - return string(buf[:vallen-1]), nil -} - -const ImplementsGetwd = true - -//sys Getcwd(buf []byte) (n int, err error) - -func Getwd() (wd string, err error) { - var buf [PathMax]byte - // Getcwd will return an error if it failed for any reason. - _, err = Getcwd(buf[0:]) - if err != nil { - return "", err - } - n := clen(buf[:]) - if n < 1 { - return "", EINVAL - } - return string(buf[:n]), nil -} - -/* - * Wrapped - */ - -//sysnb getgroups(ngid int, gid *_Gid_t) (n int, err error) -//sysnb setgroups(ngid int, gid *_Gid_t) (err error) - -func Getgroups() (gids []int, err error) { - n, err := getgroups(0, nil) - // Check for error and sanity check group count. Newer versions of - // Solaris allow up to 1024 (NGROUPS_MAX). - if n < 0 || n > 1024 { - if err != nil { - return nil, err - } - return nil, EINVAL - } else if n == 0 { - return nil, nil - } - - a := make([]_Gid_t, n) - n, err = getgroups(n, &a[0]) - if n == -1 { - return nil, err - } - gids = make([]int, n) - for i, v := range a[0:n] { - gids[i] = int(v) - } - return -} - -func Setgroups(gids []int) (err error) { - if len(gids) == 0 { - return setgroups(0, nil) - } - - a := make([]_Gid_t, len(gids)) - for i, v := range gids { - a[i] = _Gid_t(v) - } - return setgroups(len(a), &a[0]) -} - -// ReadDirent reads directory entries from fd and writes them into buf. -func ReadDirent(fd int, buf []byte) (n int, err error) { - // Final argument is (basep *uintptr) and the syscall doesn't take nil. - // TODO(rsc): Can we use a single global basep for all calls? - return Getdents(fd, buf, new(uintptr)) -} - -// Wait status is 7 bits at bottom, either 0 (exited), -// 0x7F (stopped), or a signal number that caused an exit. -// The 0x80 bit is whether there was a core dump. -// An extra number (exit code, signal causing a stop) -// is in the high bits. - -type WaitStatus uint32 - -const ( - mask = 0x7F - core = 0x80 - shift = 8 - - exited = 0 - stopped = 0x7F -) - -func (w WaitStatus) Exited() bool { return w&mask == exited } - -func (w WaitStatus) ExitStatus() int { - if w&mask != exited { - return -1 - } - return int(w >> shift) -} - -func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != 0 } - -func (w WaitStatus) Signal() syscall.Signal { - sig := syscall.Signal(w & mask) - if sig == stopped || sig == 0 { - return -1 - } - return sig -} - -func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 } - -func (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP } - -func (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP } - -func (w WaitStatus) StopSignal() syscall.Signal { - if !w.Stopped() { - return -1 - } - return syscall.Signal(w>>shift) & 0xFF -} - -func (w WaitStatus) TrapCause() int { return -1 } - -//sys wait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32, err error) - -func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (int, error) { - var status _C_int - rpid, err := wait4(int32(pid), &status, options, rusage) - wpid := int(rpid) - if wpid == -1 { - return wpid, err - } - if wstatus != nil { - *wstatus = WaitStatus(status) - } - return wpid, nil -} - -//sys gethostname(buf []byte) (n int, err error) - -func Gethostname() (name string, err error) { - var buf [MaxHostNameLen]byte - n, err := gethostname(buf[:]) - if n != 0 { - return "", err - } - n = clen(buf[:]) - if n < 1 { - return "", EFAULT - } - return string(buf[:n]), nil -} - -//sys utimes(path string, times *[2]Timeval) (err error) - -func Utimes(path string, tv []Timeval) (err error) { - if tv == nil { - return utimes(path, nil) - } - if len(tv) != 2 { - return EINVAL - } - return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) -} - -//sys utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) - -func UtimesNano(path string, ts []Timespec) error { - if ts == nil { - return utimensat(AT_FDCWD, path, nil, 0) - } - if len(ts) != 2 { - return EINVAL - } - return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) -} - -func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { - if ts == nil { - return utimensat(dirfd, path, nil, flags) - } - if len(ts) != 2 { - return EINVAL - } - return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) -} - -//sys fcntl(fd int, cmd int, arg int) (val int, err error) - -// FcntlInt performs a fcntl syscall on fd with the provided command and argument. -func FcntlInt(fd uintptr, cmd, arg int) (int, error) { - valptr, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0) - var err error - if errno != 0 { - err = errno - } - return int(valptr), err -} - -// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command. -func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(unsafe.Pointer(lk)), 0, 0, 0) - if e1 != 0 { - return e1 - } - return nil -} - -//sys futimesat(fildes int, path *byte, times *[2]Timeval) (err error) - -func Futimesat(dirfd int, path string, tv []Timeval) error { - pathp, err := BytePtrFromString(path) - if err != nil { - return err - } - if tv == nil { - return futimesat(dirfd, pathp, nil) - } - if len(tv) != 2 { - return EINVAL - } - return futimesat(dirfd, pathp, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) -} - -// Solaris doesn't have an futimes function because it allows NULL to be -// specified as the path for futimesat. However, Go doesn't like -// NULL-style string interfaces, so this simple wrapper is provided. -func Futimes(fd int, tv []Timeval) error { - if tv == nil { - return futimesat(fd, nil, nil) - } - if len(tv) != 2 { - return EINVAL - } - return futimesat(fd, nil, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) -} - -func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { - switch rsa.Addr.Family { - case AF_UNIX: - pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) - sa := new(SockaddrUnix) - // Assume path ends at NUL. - // This is not technically the Solaris 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++ - } - bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] - sa.Name = string(bytes) - 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, EAFNOSUPPORT -} - -//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) = libsocket.accept - -func Accept(fd int) (nfd int, sa Sockaddr, err error) { - var rsa RawSockaddrAny - var len _Socklen = SizeofSockaddrAny - nfd, err = accept(fd, &rsa, &len) - if nfd == -1 { - return - } - sa, err = anyToSockaddr(fd, &rsa) - if err != nil { - Close(nfd) - nfd = 0 - } - return -} - -//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_recvmsg - -func recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { - var msg Msghdr - msg.Name = (*byte)(unsafe.Pointer(rsa)) - msg.Namelen = uint32(SizeofSockaddrAny) - var dummy byte - if len(oob) > 0 { - // receive at least one normal byte - if emptyIovecs(iov) { - var iova [1]Iovec - iova[0].Base = &dummy - iova[0].SetLen(1) - iov = iova[:] - } - msg.Accrightslen = int32(len(oob)) - } - if len(iov) > 0 { - msg.Iov = &iov[0] - msg.SetIovlen(len(iov)) - } - if n, err = recvmsg(fd, &msg, flags); n == -1 { - return - } - oobn = int(msg.Accrightslen) - return -} - -//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_sendmsg - -func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { - var msg Msghdr - msg.Name = (*byte)(unsafe.Pointer(ptr)) - msg.Namelen = uint32(salen) - var dummy byte - var empty bool - if len(oob) > 0 { - // send at least one normal byte - empty = emptyIovecs(iov) - if empty { - var iova [1]Iovec - iova[0].Base = &dummy - iova[0].SetLen(1) - iov = iova[:] - } - msg.Accrightslen = int32(len(oob)) - } - if len(iov) > 0 { - msg.Iov = &iov[0] - msg.SetIovlen(len(iov)) - } - if n, err = sendmsg(fd, &msg, flags); err != nil { - return 0, err - } - if len(oob) > 0 && empty { - n = 0 - } - return n, nil -} - -//sys acct(path *byte) (err error) - -func Acct(path string) (err error) { - if len(path) == 0 { - // Assume caller wants to disable accounting. - return acct(nil) - } - - pathp, err := BytePtrFromString(path) - if err != nil { - return err - } - return acct(pathp) -} - -//sys __makedev(version int, major uint, minor uint) (val uint64) - -func Mkdev(major, minor uint32) uint64 { - return __makedev(NEWDEV, uint(major), uint(minor)) -} - -//sys __major(version int, dev uint64) (val uint) - -func Major(dev uint64) uint32 { - return uint32(__major(NEWDEV, dev)) -} - -//sys __minor(version int, dev uint64) (val uint) - -func Minor(dev uint64) uint32 { - return uint32(__minor(NEWDEV, dev)) -} - -/* - * Expose the ioctl function - */ - -//sys ioctlRet(fd int, req uint, arg uintptr) (ret int, err error) = libc.ioctl - -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, err = ioctlRet(fd, req, arg) - return err -} - -func IoctlSetTermio(fd int, req uint, value *Termio) error { - err := ioctl(fd, req, uintptr(unsafe.Pointer(value))) - runtime.KeepAlive(value) - return err -} - -func IoctlGetTermio(fd int, req uint) (*Termio, error) { - var value Termio - err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) - return &value, err -} - -//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) - -func Poll(fds []PollFd, timeout int) (n int, err error) { - if len(fds) == 0 { - return poll(nil, 0, timeout) - } - return poll(&fds[0], len(fds), timeout) -} - -func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - if raceenabled { - raceReleaseMerge(unsafe.Pointer(&ioSync)) - } - return sendfile(outfd, infd, offset, count) -} - -/* - * Exposed directly - */ -//sys Access(path string, mode uint32) (err error) -//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) -//sys Chdir(path string) (err error) -//sys Chmod(path string, mode uint32) (err error) -//sys Chown(path string, uid int, gid int) (err error) -//sys Chroot(path string) (err error) -//sys Close(fd int) (err error) -//sys Creat(path string, mode uint32) (fd int, err error) -//sys Dup(fd int) (nfd int, err error) -//sys Dup2(oldfd int, newfd int) (err error) -//sys Exit(code int) -//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) -//sys Fchdir(fd int) (err error) -//sys Fchmod(fd int, mode uint32) (err error) -//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) -//sys Fchown(fd int, uid int, gid int) (err error) -//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) -//sys Fdatasync(fd int) (err error) -//sys Flock(fd int, how int) (err error) -//sys Fpathconf(fd int, name int) (val int, err error) -//sys Fstat(fd int, stat *Stat_t) (err error) -//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) -//sys Fstatvfs(fd int, vfsstat *Statvfs_t) (err error) -//sys Getdents(fd int, buf []byte, basep *uintptr) (n int, err error) -//sysnb Getgid() (gid int) -//sysnb Getpid() (pid int) -//sysnb Getpgid(pid int) (pgid int, err error) -//sysnb Getpgrp() (pgid int, err error) -//sys Geteuid() (euid int) -//sys Getegid() (egid int) -//sys Getppid() (ppid int) -//sys Getpriority(which int, who int) (n int, err error) -//sysnb Getrlimit(which int, lim *Rlimit) (err error) -//sysnb Getrusage(who int, rusage *Rusage) (err error) -//sysnb Getsid(pid int) (sid int, err error) -//sysnb Gettimeofday(tv *Timeval) (err error) -//sysnb Getuid() (uid int) -//sys Kill(pid int, signum syscall.Signal) (err error) -//sys Lchown(path string, uid int, gid int) (err error) -//sys Link(path string, link string) (err error) -//sys Listen(s int, backlog int) (err error) = libsocket.__xnet_llisten -//sys Lstat(path string, stat *Stat_t) (err error) -//sys Madvise(b []byte, advice int) (err error) -//sys Mkdir(path string, mode uint32) (err error) -//sys Mkdirat(dirfd int, path string, mode uint32) (err error) -//sys Mkfifo(path string, mode uint32) (err error) -//sys Mkfifoat(dirfd int, path string, mode uint32) (err error) -//sys Mknod(path string, mode uint32, dev int) (err error) -//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) -//sys Mlock(b []byte) (err error) -//sys Mlockall(flags int) (err error) -//sys Mprotect(b []byte, prot int) (err error) -//sys Msync(b []byte, flags int) (err error) -//sys Munlock(b []byte) (err error) -//sys Munlockall() (err error) -//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) -//sys Open(path string, mode int, perm uint32) (fd int, err error) -//sys Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) -//sys Pathconf(path string, name int) (val int, err error) -//sys Pause() (err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) -//sys read(fd int, p []byte) (n int, err error) -//sys Readlink(path string, buf []byte) (n int, err error) -//sys Rename(from string, to string) (err error) -//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) -//sys Rmdir(path string) (err error) -//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = lseek -//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) -//sysnb Setegid(egid int) (err error) -//sysnb Seteuid(euid int) (err error) -//sysnb Setgid(gid int) (err error) -//sys Sethostname(p []byte) (err error) -//sysnb Setpgid(pid int, pgid int) (err error) -//sys Setpriority(which int, who int, prio int) (err error) -//sysnb Setregid(rgid int, egid int) (err error) -//sysnb Setreuid(ruid int, euid int) (err error) -//sysnb Setrlimit(which int, lim *Rlimit) (err error) -//sysnb Setsid() (pid int, err error) -//sysnb Setuid(uid int) (err error) -//sys Shutdown(s int, how int) (err error) = libsocket.shutdown -//sys Stat(path string, stat *Stat_t) (err error) -//sys Statvfs(path string, vfsstat *Statvfs_t) (err error) -//sys Symlink(path string, link string) (err error) -//sys Sync() (err error) -//sys Sysconf(which int) (n int64, err error) -//sysnb Times(tms *Tms) (ticks uintptr, err error) -//sys Truncate(path string, length int64) (err error) -//sys Fsync(fd int) (err error) -//sys Ftruncate(fd int, length int64) (err error) -//sys Umask(mask int) (oldmask int) -//sysnb Uname(buf *Utsname) (err error) -//sys Unmount(target string, flags int) (err error) = libc.umount -//sys Unlink(path string) (err error) -//sys Unlinkat(dirfd int, path string, flags int) (err error) -//sys Ustat(dev int, ubuf *Ustat_t) (err error) -//sys Utime(path string, buf *Utimbuf) (err error) -//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_bind -//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_connect -//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 sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = libsendfile.sendfile -//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_sendto -//sys socket(domain int, typ int, proto int) (fd int, err error) = libsocket.__xnet_socket -//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) = libsocket.__xnet_socketpair -//sys write(fd int, p []byte) (n int, err error) -//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) = libsocket.__xnet_getsockopt -//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getpeername -//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) = libsocket.setsockopt -//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) = libsocket.recvfrom - -func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procread)), 3, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf), 0, 0, 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwrite)), 3, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf), 0, 0, 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -var mapper = &mmapper{ - active: make(map[*byte][]byte), - mmap: mmap, - munmap: munmap, -} - -func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { - return mapper.Mmap(fd, offset, length, prot, flags) -} - -func Munmap(b []byte) (err error) { - return mapper.Munmap(b) -} - -// Event Ports - -type fileObjCookie struct { - fobj *fileObj - cookie interface{} -} - -// EventPort provides a safe abstraction on top of Solaris/illumos Event Ports. -type EventPort struct { - port int - mu sync.Mutex - fds map[uintptr]*fileObjCookie - paths map[string]*fileObjCookie - // The user cookie presents an interesting challenge from a memory management perspective. - // There are two paths by which we can discover that it is no longer in use: - // 1. The user calls port_dissociate before any events fire - // 2. An event fires and we return it to the user - // The tricky situation is if the event has fired in the kernel but - // the user hasn't requested/received it yet. - // If the user wants to port_dissociate before the event has been processed, - // we should handle things gracefully. To do so, we need to keep an extra - // reference to the cookie around until the event is processed - // thus the otherwise seemingly extraneous "cookies" map - // The key of this map is a pointer to the corresponding fCookie - cookies map[*fileObjCookie]struct{} -} - -// PortEvent is an abstraction of the port_event C struct. -// Compare Source against PORT_SOURCE_FILE or PORT_SOURCE_FD -// to see if Path or Fd was the event source. The other will be -// uninitialized. -type PortEvent struct { - Cookie interface{} - Events int32 - Fd uintptr - Path string - Source uint16 - fobj *fileObj -} - -// NewEventPort creates a new EventPort including the -// underlying call to port_create(3c). -func NewEventPort() (*EventPort, error) { - port, err := port_create() - if err != nil { - return nil, err - } - e := &EventPort{ - port: port, - fds: make(map[uintptr]*fileObjCookie), - paths: make(map[string]*fileObjCookie), - cookies: make(map[*fileObjCookie]struct{}), - } - return e, nil -} - -//sys port_create() (n int, err error) -//sys port_associate(port int, source int, object uintptr, events int, user *byte) (n int, err error) -//sys port_dissociate(port int, source int, object uintptr) (n int, err error) -//sys port_get(port int, pe *portEvent, timeout *Timespec) (n int, err error) -//sys port_getn(port int, pe *portEvent, max uint32, nget *uint32, timeout *Timespec) (n int, err error) - -// Close closes the event port. -func (e *EventPort) Close() error { - e.mu.Lock() - defer e.mu.Unlock() - err := Close(e.port) - if err != nil { - return err - } - e.fds = nil - e.paths = nil - e.cookies = nil - return nil -} - -// PathIsWatched checks to see if path is associated with this EventPort. -func (e *EventPort) PathIsWatched(path string) bool { - e.mu.Lock() - defer e.mu.Unlock() - _, found := e.paths[path] - return found -} - -// FdIsWatched checks to see if fd is associated with this EventPort. -func (e *EventPort) FdIsWatched(fd uintptr) bool { - e.mu.Lock() - defer e.mu.Unlock() - _, found := e.fds[fd] - return found -} - -// AssociatePath wraps port_associate(3c) for a filesystem path including -// creating the necessary file_obj from the provided stat information. -func (e *EventPort) AssociatePath(path string, stat os.FileInfo, events int, cookie interface{}) error { - e.mu.Lock() - defer e.mu.Unlock() - if _, found := e.paths[path]; found { - return fmt.Errorf("%v is already associated with this Event Port", path) - } - fCookie, err := createFileObjCookie(path, stat, cookie) - if err != nil { - return err - } - _, err = port_associate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(fCookie.fobj)), events, (*byte)(unsafe.Pointer(fCookie))) - if err != nil { - return err - } - e.paths[path] = fCookie - e.cookies[fCookie] = struct{}{} - return nil -} - -// DissociatePath wraps port_dissociate(3c) for a filesystem path. -func (e *EventPort) DissociatePath(path string) error { - e.mu.Lock() - defer e.mu.Unlock() - f, ok := e.paths[path] - if !ok { - return fmt.Errorf("%v is not associated with this Event Port", path) - } - _, err := port_dissociate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(f.fobj))) - // If the path is no longer associated with this event port (ENOENT) - // we should delete it from our map. We can still return ENOENT to the caller. - // But we need to save the cookie - if err != nil && err != ENOENT { - return err - } - if err == nil { - // dissociate was successful, safe to delete the cookie - fCookie := e.paths[path] - delete(e.cookies, fCookie) - } - delete(e.paths, path) - return err -} - -// AssociateFd wraps calls to port_associate(3c) on file descriptors. -func (e *EventPort) AssociateFd(fd uintptr, events int, cookie interface{}) error { - e.mu.Lock() - defer e.mu.Unlock() - if _, found := e.fds[fd]; found { - return fmt.Errorf("%v is already associated with this Event Port", fd) - } - fCookie, err := createFileObjCookie("", nil, cookie) - if err != nil { - return err - } - _, err = port_associate(e.port, PORT_SOURCE_FD, fd, events, (*byte)(unsafe.Pointer(fCookie))) - if err != nil { - return err - } - e.fds[fd] = fCookie - e.cookies[fCookie] = struct{}{} - return nil -} - -// DissociateFd wraps calls to port_dissociate(3c) on file descriptors. -func (e *EventPort) DissociateFd(fd uintptr) error { - e.mu.Lock() - defer e.mu.Unlock() - _, ok := e.fds[fd] - if !ok { - return fmt.Errorf("%v is not associated with this Event Port", fd) - } - _, err := port_dissociate(e.port, PORT_SOURCE_FD, fd) - if err != nil && err != ENOENT { - return err - } - if err == nil { - // dissociate was successful, safe to delete the cookie - fCookie := e.fds[fd] - delete(e.cookies, fCookie) - } - delete(e.fds, fd) - return err -} - -func createFileObjCookie(name string, stat os.FileInfo, cookie interface{}) (*fileObjCookie, error) { - fCookie := new(fileObjCookie) - fCookie.cookie = cookie - if name != "" && stat != nil { - fCookie.fobj = new(fileObj) - bs, err := ByteSliceFromString(name) - if err != nil { - return nil, err - } - fCookie.fobj.Name = (*int8)(unsafe.Pointer(&bs[0])) - s := stat.Sys().(*syscall.Stat_t) - fCookie.fobj.Atim.Sec = s.Atim.Sec - fCookie.fobj.Atim.Nsec = s.Atim.Nsec - fCookie.fobj.Mtim.Sec = s.Mtim.Sec - fCookie.fobj.Mtim.Nsec = s.Mtim.Nsec - fCookie.fobj.Ctim.Sec = s.Ctim.Sec - fCookie.fobj.Ctim.Nsec = s.Ctim.Nsec - } - return fCookie, nil -} - -// GetOne wraps port_get(3c) and returns a single PortEvent. -func (e *EventPort) GetOne(t *Timespec) (*PortEvent, error) { - pe := new(portEvent) - _, err := port_get(e.port, pe, t) - if err != nil { - return nil, err - } - p := new(PortEvent) - e.mu.Lock() - defer e.mu.Unlock() - err = e.peIntToExt(pe, p) - if err != nil { - return nil, err - } - return p, nil -} - -// peIntToExt converts a cgo portEvent struct into the friendlier PortEvent -// NOTE: Always call this function while holding the e.mu mutex -func (e *EventPort) peIntToExt(peInt *portEvent, peExt *PortEvent) error { - if e.cookies == nil { - return fmt.Errorf("this EventPort is already closed") - } - peExt.Events = peInt.Events - peExt.Source = peInt.Source - fCookie := (*fileObjCookie)(unsafe.Pointer(peInt.User)) - _, found := e.cookies[fCookie] - - if !found { - panic("unexpected event port address; may be due to kernel bug; see https://go.dev/issue/54254") - } - peExt.Cookie = fCookie.cookie - delete(e.cookies, fCookie) - - switch peInt.Source { - case PORT_SOURCE_FD: - peExt.Fd = uintptr(peInt.Object) - // Only remove the fds entry if it exists and this cookie matches - if fobj, ok := e.fds[peExt.Fd]; ok { - if fobj == fCookie { - delete(e.fds, peExt.Fd) - } - } - case PORT_SOURCE_FILE: - peExt.fobj = fCookie.fobj - peExt.Path = BytePtrToString((*byte)(unsafe.Pointer(peExt.fobj.Name))) - // Only remove the paths entry if it exists and this cookie matches - if fobj, ok := e.paths[peExt.Path]; ok { - if fobj == fCookie { - delete(e.paths, peExt.Path) - } - } - } - return nil -} - -// Pending wraps port_getn(3c) and returns how many events are pending. -func (e *EventPort) Pending() (int, error) { - var n uint32 = 0 - _, err := port_getn(e.port, nil, 0, &n, nil) - return int(n), err -} - -// Get wraps port_getn(3c) and fills a slice of PortEvent. -// It will block until either min events have been received -// or the timeout has been exceeded. It will return how many -// events were actually received along with any error information. -func (e *EventPort) Get(s []PortEvent, min int, timeout *Timespec) (int, error) { - if min == 0 { - return 0, fmt.Errorf("need to request at least one event or use Pending() instead") - } - if len(s) < min { - return 0, fmt.Errorf("len(s) (%d) is less than min events requested (%d)", len(s), min) - } - got := uint32(min) - max := uint32(len(s)) - var err error - ps := make([]portEvent, max) - _, err = port_getn(e.port, &ps[0], max, &got, timeout) - // got will be trustworthy with ETIME, but not any other error. - if err != nil && err != ETIME { - return 0, err - } - e.mu.Lock() - defer e.mu.Unlock() - valid := 0 - for i := 0; i < int(got); i++ { - err2 := e.peIntToExt(&ps[i], &s[i]) - if err2 != nil { - if valid == 0 && err == nil { - // If err2 is the only error and there are no valid events - // to return, return it to the caller. - err = err2 - } - break - } - valid = i + 1 - } - return valid, err -} diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go deleted file mode 100644 index 0bd25ef..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go +++ /dev/null @@ -1,28 +0,0 @@ -// 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 amd64 && solaris -// +build amd64,solaris - -package unix - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: nsec} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: sec, Usec: usec} -} - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint64(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = int32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_unix.go b/vendor/golang.org/x/sys/unix/syscall_unix.go deleted file mode 100644 index 9f75356..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_unix.go +++ /dev/null @@ -1,550 +0,0 @@ -// 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 aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris -// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris - -package unix - -import ( - "bytes" - "sort" - "sync" - "syscall" - "unsafe" -) - -var ( - Stdin = 0 - Stdout = 1 - Stderr = 2 -) - -// Do the interface allocations only once for common -// Errno values. -var ( - errEAGAIN error = syscall.EAGAIN - errEINVAL error = syscall.EINVAL - errENOENT error = syscall.ENOENT -) - -var ( - signalNameMapOnce sync.Once - signalNameMap map[string]syscall.Signal -) - -// errnoErr returns common boxed Errno values, to prevent -// allocations at runtime. -func errnoErr(e syscall.Errno) error { - switch e { - case 0: - return nil - case EAGAIN: - return errEAGAIN - case EINVAL: - return errEINVAL - case ENOENT: - return errENOENT - } - return e -} - -// ErrnoName returns the error name for error number e. -func ErrnoName(e syscall.Errno) string { - i := sort.Search(len(errorList), func(i int) bool { - return errorList[i].num >= e - }) - if i < len(errorList) && errorList[i].num == e { - return errorList[i].name - } - return "" -} - -// SignalName returns the signal name for signal number s. -func SignalName(s syscall.Signal) string { - i := sort.Search(len(signalList), func(i int) bool { - return signalList[i].num >= s - }) - if i < len(signalList) && signalList[i].num == s { - return signalList[i].name - } - return "" -} - -// SignalNum returns the syscall.Signal for signal named s, -// or 0 if a signal with such name is not found. -// The signal name should start with "SIG". -func SignalNum(s string) syscall.Signal { - signalNameMapOnce.Do(func() { - signalNameMap = make(map[string]syscall.Signal, len(signalList)) - for _, signal := range signalList { - signalNameMap[signal.name] = signal.num - } - }) - return signalNameMap[s] -} - -// clen returns the index of the first NULL byte in n or len(n) if n contains no NULL byte. -func clen(n []byte) int { - i := bytes.IndexByte(n, 0) - if i == -1 { - i = len(n) - } - return i -} - -// Mmap manager, for use by operating system-specific implementations. - -type mmapper struct { - sync.Mutex - active map[*byte][]byte // active mappings; key is last byte in mapping - mmap func(addr, length uintptr, prot, flags, fd int, offset int64) (uintptr, error) - munmap func(addr uintptr, length uintptr) error -} - -func (m *mmapper) Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { - if length <= 0 { - return nil, EINVAL - } - - // Map the requested memory. - addr, errno := m.mmap(0, uintptr(length), prot, flags, fd, offset) - if errno != nil { - return nil, errno - } - - // Use unsafe to convert addr into a []byte. - b := unsafe.Slice((*byte)(unsafe.Pointer(addr)), length) - - // Register mapping in m and return it. - p := &b[cap(b)-1] - m.Lock() - defer m.Unlock() - m.active[p] = b - return b, nil -} - -func (m *mmapper) Munmap(data []byte) (err error) { - if len(data) == 0 || len(data) != cap(data) { - return EINVAL - } - - // Find the base of the mapping. - p := &data[cap(data)-1] - m.Lock() - defer m.Unlock() - b := m.active[p] - if b == nil || &b[0] != &data[0] { - return EINVAL - } - - // Unmap the memory and update m. - if errno := m.munmap(uintptr(unsafe.Pointer(&b[0])), uintptr(len(b))); errno != nil { - return errno - } - delete(m.active, p) - return nil -} - -func Read(fd int, p []byte) (n int, err error) { - n, err = read(fd, p) - if raceenabled { - if n > 0 { - raceWriteRange(unsafe.Pointer(&p[0]), n) - } - if err == nil { - raceAcquire(unsafe.Pointer(&ioSync)) - } - } - return -} - -func Write(fd int, p []byte) (n int, err error) { - if raceenabled { - raceReleaseMerge(unsafe.Pointer(&ioSync)) - } - n, err = write(fd, p) - if raceenabled && n > 0 { - raceReadRange(unsafe.Pointer(&p[0]), n) - } - return -} - -func Pread(fd int, p []byte, offset int64) (n int, err error) { - n, err = pread(fd, p, offset) - if raceenabled { - if n > 0 { - raceWriteRange(unsafe.Pointer(&p[0]), n) - } - if err == nil { - raceAcquire(unsafe.Pointer(&ioSync)) - } - } - return -} - -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { - if raceenabled { - raceReleaseMerge(unsafe.Pointer(&ioSync)) - } - n, err = pwrite(fd, p, offset) - if raceenabled && n > 0 { - raceReadRange(unsafe.Pointer(&p[0]), n) - } - return -} - -// For testing: clients can set this flag to force -// creation of IPv6 sockets to return EAFNOSUPPORT. -var SocketDisableIPv6 bool - -// Sockaddr represents a socket address. -type Sockaddr interface { - sockaddr() (ptr unsafe.Pointer, len _Socklen, err error) // lowercase; only we can define Sockaddrs -} - -// SockaddrInet4 implements the Sockaddr interface for AF_INET type sockets. -type SockaddrInet4 struct { - Port int - Addr [4]byte - raw RawSockaddrInet4 -} - -// SockaddrInet6 implements the Sockaddr interface for AF_INET6 type sockets. -type SockaddrInet6 struct { - Port int - ZoneId uint32 - Addr [16]byte - raw RawSockaddrInet6 -} - -// SockaddrUnix implements the Sockaddr interface for AF_UNIX type sockets. -type SockaddrUnix struct { - Name string - raw RawSockaddrUnix -} - -func Bind(fd int, sa Sockaddr) (err error) { - ptr, n, err := sa.sockaddr() - if err != nil { - return err - } - return bind(fd, ptr, n) -} - -func Connect(fd int, sa Sockaddr) (err error) { - ptr, n, err := sa.sockaddr() - if err != nil { - return err - } - return connect(fd, ptr, n) -} - -func Getpeername(fd int) (sa Sockaddr, err error) { - var rsa RawSockaddrAny - var len _Socklen = SizeofSockaddrAny - if err = getpeername(fd, &rsa, &len); err != nil { - return - } - return anyToSockaddr(fd, &rsa) -} - -func GetsockoptByte(fd, level, opt int) (value byte, err error) { - var n byte - vallen := _Socklen(1) - err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen) - return n, err -} - -func GetsockoptInt(fd, level, opt int) (value int, err error) { - var n int32 - vallen := _Socklen(4) - err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen) - return int(n), err -} - -func GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, err error) { - vallen := _Socklen(4) - err = getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen) - return value, err -} - -func GetsockoptIPMreq(fd, level, opt int) (*IPMreq, error) { - var value IPMreq - vallen := _Socklen(SizeofIPMreq) - err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) - return &value, err -} - -func GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) { - var value IPv6Mreq - vallen := _Socklen(SizeofIPv6Mreq) - err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) - return &value, err -} - -func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) { - var value IPv6MTUInfo - vallen := _Socklen(SizeofIPv6MTUInfo) - err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) - return &value, err -} - -func GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) { - var value ICMPv6Filter - vallen := _Socklen(SizeofICMPv6Filter) - err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) - return &value, err -} - -func GetsockoptLinger(fd, level, opt int) (*Linger, error) { - var linger Linger - vallen := _Socklen(SizeofLinger) - err := getsockopt(fd, level, opt, unsafe.Pointer(&linger), &vallen) - return &linger, err -} - -func GetsockoptTimeval(fd, level, opt int) (*Timeval, error) { - var tv Timeval - vallen := _Socklen(unsafe.Sizeof(tv)) - err := getsockopt(fd, level, opt, unsafe.Pointer(&tv), &vallen) - return &tv, err -} - -func GetsockoptUint64(fd, level, opt int) (value uint64, err error) { - var n uint64 - vallen := _Socklen(8) - err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen) - return n, err -} - -func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) { - var rsa RawSockaddrAny - var len _Socklen = SizeofSockaddrAny - if n, err = recvfrom(fd, p, flags, &rsa, &len); err != nil { - return - } - if rsa.Addr.Family != AF_UNSPEC { - from, err = anyToSockaddr(fd, &rsa) - } - return -} - -func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { - var iov [1]Iovec - if len(p) > 0 { - iov[0].Base = &p[0] - iov[0].SetLen(len(p)) - } - var rsa RawSockaddrAny - n, oobn, recvflags, err = recvmsgRaw(fd, iov[:], oob, flags, &rsa) - // source address is only specified if the socket is unconnected - if rsa.Addr.Family != AF_UNSPEC { - from, err = anyToSockaddr(fd, &rsa) - } - return -} - -// RecvmsgBuffers receives a message from a socket using the recvmsg -// system call. The flags are passed to recvmsg. Any non-control data -// read is scattered into the buffers slices. The results are: -// - n is the number of non-control data read into bufs -// - oobn is the number of control data read into oob; this may be interpreted using [ParseSocketControlMessage] -// - recvflags is flags returned by recvmsg -// - from is the address of the sender -func RecvmsgBuffers(fd int, buffers [][]byte, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { - iov := make([]Iovec, len(buffers)) - for i := range buffers { - if len(buffers[i]) > 0 { - iov[i].Base = &buffers[i][0] - iov[i].SetLen(len(buffers[i])) - } else { - iov[i].Base = (*byte)(unsafe.Pointer(&_zero)) - } - } - var rsa RawSockaddrAny - n, oobn, recvflags, err = recvmsgRaw(fd, iov, oob, flags, &rsa) - if err == nil && rsa.Addr.Family != AF_UNSPEC { - from, err = anyToSockaddr(fd, &rsa) - } - return -} - -func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { - _, err = SendmsgN(fd, p, oob, to, flags) - return -} - -func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { - var iov [1]Iovec - if len(p) > 0 { - iov[0].Base = &p[0] - iov[0].SetLen(len(p)) - } - var ptr unsafe.Pointer - var salen _Socklen - if to != nil { - ptr, salen, err = to.sockaddr() - if err != nil { - return 0, err - } - } - return sendmsgN(fd, iov[:], oob, ptr, salen, flags) -} - -// SendmsgBuffers sends a message on a socket to an address using the sendmsg -// system call. The flags are passed to sendmsg. Any non-control data written -// is gathered from buffers. The function returns the number of bytes written -// to the socket. -func SendmsgBuffers(fd int, buffers [][]byte, oob []byte, to Sockaddr, flags int) (n int, err error) { - iov := make([]Iovec, len(buffers)) - for i := range buffers { - if len(buffers[i]) > 0 { - iov[i].Base = &buffers[i][0] - iov[i].SetLen(len(buffers[i])) - } else { - iov[i].Base = (*byte)(unsafe.Pointer(&_zero)) - } - } - var ptr unsafe.Pointer - var salen _Socklen - if to != nil { - ptr, salen, err = to.sockaddr() - if err != nil { - return 0, err - } - } - return sendmsgN(fd, iov, oob, ptr, salen, flags) -} - -func Send(s int, buf []byte, flags int) (err error) { - return sendto(s, buf, flags, nil, 0) -} - -func Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) { - ptr, n, err := to.sockaddr() - if err != nil { - return err - } - return sendto(fd, p, flags, ptr, n) -} - -func SetsockoptByte(fd, level, opt int, value byte) (err error) { - return setsockopt(fd, level, opt, unsafe.Pointer(&value), 1) -} - -func SetsockoptInt(fd, level, opt int, value int) (err error) { - var n = int32(value) - return setsockopt(fd, level, opt, unsafe.Pointer(&n), 4) -} - -func SetsockoptInet4Addr(fd, level, opt int, value [4]byte) (err error) { - return setsockopt(fd, level, opt, unsafe.Pointer(&value[0]), 4) -} - -func SetsockoptIPMreq(fd, level, opt int, mreq *IPMreq) (err error) { - return setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPMreq) -} - -func SetsockoptIPv6Mreq(fd, level, opt int, mreq *IPv6Mreq) (err error) { - return setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPv6Mreq) -} - -func SetsockoptICMPv6Filter(fd, level, opt int, filter *ICMPv6Filter) error { - return setsockopt(fd, level, opt, unsafe.Pointer(filter), SizeofICMPv6Filter) -} - -func SetsockoptLinger(fd, level, opt int, l *Linger) (err error) { - return setsockopt(fd, level, opt, unsafe.Pointer(l), SizeofLinger) -} - -func SetsockoptString(fd, level, opt int, s string) (err error) { - var p unsafe.Pointer - if len(s) > 0 { - p = unsafe.Pointer(&[]byte(s)[0]) - } - return setsockopt(fd, level, opt, p, uintptr(len(s))) -} - -func SetsockoptTimeval(fd, level, opt int, tv *Timeval) (err error) { - return setsockopt(fd, level, opt, unsafe.Pointer(tv), unsafe.Sizeof(*tv)) -} - -func SetsockoptUint64(fd, level, opt int, value uint64) (err error) { - return setsockopt(fd, level, opt, unsafe.Pointer(&value), 8) -} - -func Socket(domain, typ, proto int) (fd int, err error) { - if domain == AF_INET6 && SocketDisableIPv6 { - return -1, EAFNOSUPPORT - } - fd, err = socket(domain, typ, proto) - return -} - -func Socketpair(domain, typ, proto int) (fd [2]int, err error) { - var fdx [2]int32 - err = socketpair(domain, typ, proto, &fdx) - if err == nil { - fd[0] = int(fdx[0]) - fd[1] = int(fdx[1]) - } - return -} - -var ioSync int64 - -func CloseOnExec(fd int) { fcntl(fd, F_SETFD, FD_CLOEXEC) } - -func SetNonblock(fd int, nonblocking bool) (err error) { - flag, err := fcntl(fd, F_GETFL, 0) - if err != nil { - return err - } - if nonblocking { - flag |= O_NONBLOCK - } else { - flag &= ^O_NONBLOCK - } - _, err = fcntl(fd, F_SETFL, flag) - return err -} - -// Exec calls execve(2), which replaces the calling executable in the process -// tree. argv0 should be the full path to an executable ("/bin/ls") and the -// executable name should also be the first argument in argv (["ls", "-l"]). -// envv are the environment variables that should be passed to the new -// process (["USER=go", "PWD=/tmp"]). -func Exec(argv0 string, argv []string, envv []string) error { - return syscall.Exec(argv0, argv, envv) -} - -// Lutimes sets the access and modification times tv on path. If path refers to -// a symlink, it is not dereferenced and the timestamps are set on the symlink. -// If tv is nil, the access and modification times are set to the current time. -// Otherwise tv must contain exactly 2 elements, with access time as the first -// element and modification time as the second element. -func Lutimes(path string, tv []Timeval) error { - if tv == nil { - return UtimesNanoAt(AT_FDCWD, path, nil, AT_SYMLINK_NOFOLLOW) - } - if len(tv) != 2 { - return EINVAL - } - ts := []Timespec{ - NsecToTimespec(TimevalToNsec(tv[0])), - NsecToTimespec(TimevalToNsec(tv[1])), - } - return UtimesNanoAt(AT_FDCWD, path, ts, AT_SYMLINK_NOFOLLOW) -} - -// emptyIovec reports whether there are no bytes in the slice of Iovec. -func emptyIovecs(iov []Iovec) bool { - for i := range iov { - if iov[i].Len > 0 { - return false - } - } - return true -} diff --git a/vendor/golang.org/x/sys/unix/syscall_unix_gc.go b/vendor/golang.org/x/sys/unix/syscall_unix_gc.go deleted file mode 100644 index 5898e9a..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_unix_gc.go +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build (darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris) && gc && !ppc64le && !ppc64 -// +build darwin dragonfly freebsd linux netbsd openbsd solaris -// +build gc -// +build !ppc64le -// +build !ppc64 - -package unix - -import "syscall" - -func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) -func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) -func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) -func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go b/vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go deleted file mode 100644 index f6f707a..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux && (ppc64le || ppc64) && gc -// +build linux -// +build ppc64le ppc64 -// +build gc - -package unix - -import "syscall" - -func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { - return syscall.Syscall(trap, a1, a2, a3) -} -func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) { - return syscall.Syscall6(trap, a1, a2, a3, a4, a5, a6) -} -func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { - return syscall.RawSyscall(trap, a1, a2, a3) -} -func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) { - return syscall.RawSyscall6(trap, a1, a2, a3, a4, a5, a6) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go deleted file mode 100644 index f8616f4..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go +++ /dev/null @@ -1,1823 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build zos && s390x -// +build zos,s390x - -package unix - -import ( - "bytes" - "runtime" - "sort" - "sync" - "syscall" - "unsafe" -) - -const ( - O_CLOEXEC = 0 // Dummy value (not supported). - AF_LOCAL = AF_UNIX // AF_LOCAL is an alias for AF_UNIX -) - -func syscall_syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) -func syscall_rawsyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) -func syscall_syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) -func syscall_rawsyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) -func syscall_syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) -func syscall_rawsyscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) - -func copyStat(stat *Stat_t, statLE *Stat_LE_t) { - stat.Dev = uint64(statLE.Dev) - stat.Ino = uint64(statLE.Ino) - stat.Nlink = uint64(statLE.Nlink) - stat.Mode = uint32(statLE.Mode) - stat.Uid = uint32(statLE.Uid) - stat.Gid = uint32(statLE.Gid) - stat.Rdev = uint64(statLE.Rdev) - stat.Size = statLE.Size - stat.Atim.Sec = int64(statLE.Atim) - stat.Atim.Nsec = 0 //zos doesn't return nanoseconds - stat.Mtim.Sec = int64(statLE.Mtim) - stat.Mtim.Nsec = 0 //zos doesn't return nanoseconds - stat.Ctim.Sec = int64(statLE.Ctim) - stat.Ctim.Nsec = 0 //zos doesn't return nanoseconds - stat.Blksize = int64(statLE.Blksize) - stat.Blocks = statLE.Blocks -} - -func svcCall(fnptr unsafe.Pointer, argv *unsafe.Pointer, dsa *uint64) -func svcLoad(name *byte) unsafe.Pointer -func svcUnload(name *byte, fnptr unsafe.Pointer) int64 - -func (d *Dirent) NameString() string { - if d == nil { - return "" - } - return string(d.Name[:d.Namlen]) -} - -func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { - if sa.Port < 0 || sa.Port > 0xFFFF { - return nil, 0, EINVAL - } - sa.raw.Len = SizeofSockaddrInet4 - 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), _Socklen(sa.raw.Len), nil -} - -func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { - if sa.Port < 0 || sa.Port > 0xFFFF { - return nil, 0, EINVAL - } - sa.raw.Len = SizeofSockaddrInet6 - 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), _Socklen(sa.raw.Len), nil -} - -func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { - name := sa.Name - n := len(name) - if n >= len(sa.raw.Path) || n == 0 { - return nil, 0, EINVAL - } - sa.raw.Len = byte(3 + n) // 2 for Family, Len; 1 for NUL - sa.raw.Family = AF_UNIX - for i := 0; i < n; i++ { - sa.raw.Path[i] = int8(name[i]) - } - return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil -} - -func anyToSockaddr(_ int, rsa *RawSockaddrAny) (Sockaddr, error) { - // TODO(neeilan): Implement use of first param (fd) - switch rsa.Addr.Family { - case AF_UNIX: - pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) - sa := new(SockaddrUnix) - // For z/OS, only replace NUL with @ when the - // length is not zero. - if pp.Len != 0 && 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. - // - // For z/OS, the length of the name is a field - // in the structure. To be on the safe side, we - // will still scan the name for a NUL but only - // to the length provided in the structure. - // - // 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 < int(pp.Len) && pp.Path[n] != 0 { - n++ - } - bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] - sa.Name = string(bytes) - 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, EAFNOSUPPORT -} - -func Accept(fd int) (nfd int, sa Sockaddr, err error) { - var rsa RawSockaddrAny - var len _Socklen = SizeofSockaddrAny - nfd, err = accept(fd, &rsa, &len) - if err != nil { - return - } - // TODO(neeilan): Remove 0 in call - sa, err = anyToSockaddr(0, &rsa) - if err != nil { - Close(nfd) - nfd = 0 - } - return -} - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint64(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = int32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = int32(length) -} - -//sys fcntl(fd int, cmd int, arg int) (val int, err error) -//sys read(fd int, p []byte) (n int, err error) -//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ -//sys write(fd int, p []byte) (n int, err error) - -//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) = SYS___ACCEPT_A -//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = SYS___BIND_A -//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = SYS___CONNECT_A -//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) -//sysnb setgroups(n int, list *_Gid_t) (err error) -//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) -//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) -//sysnb socket(domain int, typ int, proto int) (fd int, err error) -//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) -//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = SYS___GETPEERNAME_A -//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = SYS___GETSOCKNAME_A -//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) = SYS___RECVFROM_A -//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) = SYS___SENDTO_A -//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = SYS___RECVMSG_A -//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = SYS___SENDMSG_A -//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) = SYS_MMAP -//sys munmap(addr uintptr, length uintptr) (err error) = SYS_MUNMAP -//sys ioctl(fd int, req uint, arg uintptr) (err error) = SYS_IOCTL - -//sys Access(path string, mode uint32) (err error) = SYS___ACCESS_A -//sys Chdir(path string) (err error) = SYS___CHDIR_A -//sys Chown(path string, uid int, gid int) (err error) = SYS___CHOWN_A -//sys Chmod(path string, mode uint32) (err error) = SYS___CHMOD_A -//sys Creat(path string, mode uint32) (fd int, err error) = SYS___CREAT_A -//sys Dup(oldfd int) (fd int, err error) -//sys Dup2(oldfd int, newfd int) (err error) -//sys Errno2() (er2 int) = SYS___ERRNO2 -//sys Err2ad() (eadd *int) = SYS___ERR2AD -//sys Exit(code int) -//sys Fchdir(fd int) (err error) -//sys Fchmod(fd int, mode uint32) (err error) -//sys Fchown(fd int, uid int, gid int) (err error) -//sys FcntlInt(fd uintptr, cmd int, arg int) (retval int, err error) = SYS_FCNTL -//sys fstat(fd int, stat *Stat_LE_t) (err error) - -func Fstat(fd int, stat *Stat_t) (err error) { - var statLE Stat_LE_t - err = fstat(fd, &statLE) - copyStat(stat, &statLE) - return -} - -//sys Fstatvfs(fd int, stat *Statvfs_t) (err error) = SYS_FSTATVFS -//sys Fsync(fd int) (err error) -//sys Ftruncate(fd int, length int64) (err error) -//sys Getpagesize() (pgsize int) = SYS_GETPAGESIZE -//sys Mprotect(b []byte, prot int) (err error) = SYS_MPROTECT -//sys Msync(b []byte, flags int) (err error) = SYS_MSYNC -//sys Poll(fds []PollFd, timeout int) (n int, err error) = SYS_POLL -//sys Times(tms *Tms) (ticks uintptr, err error) = SYS_TIMES -//sys W_Getmntent(buff *byte, size int) (lastsys int, err error) = SYS_W_GETMNTENT -//sys W_Getmntent_A(buff *byte, size int) (lastsys int, err error) = SYS___W_GETMNTENT_A - -//sys mount_LE(path string, filesystem string, fstype string, mtm uint32, parmlen int32, parm string) (err error) = SYS___MOUNT_A -//sys unmount(filesystem string, mtm int) (err error) = SYS___UMOUNT_A -//sys Chroot(path string) (err error) = SYS___CHROOT_A -//sys Select(nmsgsfds int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (ret int, err error) = SYS_SELECT -//sysnb Uname(buf *Utsname) (err error) = SYS___UNAME_A - -func Ptsname(fd int) (name string, err error) { - r0, _, e1 := syscall_syscall(SYS___PTSNAME_A, uintptr(fd), 0, 0) - name = u2s(unsafe.Pointer(r0)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func u2s(cstr unsafe.Pointer) string { - str := (*[1024]uint8)(cstr) - i := 0 - for str[i] != 0 { - i++ - } - return string(str[:i]) -} - -func Close(fd int) (err error) { - _, _, e1 := syscall_syscall(SYS_CLOSE, uintptr(fd), 0, 0) - for i := 0; e1 == EAGAIN && i < 10; i++ { - _, _, _ = syscall_syscall(SYS_USLEEP, uintptr(10), 0, 0) - _, _, e1 = syscall_syscall(SYS_CLOSE, uintptr(fd), 0, 0) - } - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var mapper = &mmapper{ - active: make(map[*byte][]byte), - mmap: mmap, - munmap: munmap, -} - -// Dummy function: there are no semantics for Madvise on z/OS -func Madvise(b []byte, advice int) (err error) { - return -} - -func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { - return mapper.Mmap(fd, offset, length, prot, flags) -} - -func Munmap(b []byte) (err error) { - return mapper.Munmap(b) -} - -//sys Gethostname(buf []byte) (err error) = SYS___GETHOSTNAME_A -//sysnb Getegid() (egid int) -//sysnb Geteuid() (uid int) -//sysnb Getgid() (gid int) -//sysnb Getpid() (pid int) -//sysnb Getpgid(pid int) (pgid int, err error) = SYS_GETPGID - -func Getpgrp() (pid int) { - pid, _ = Getpgid(0) - return -} - -//sysnb Getppid() (pid int) -//sys Getpriority(which int, who int) (prio int, err error) -//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) = SYS_GETRLIMIT - -//sysnb getrusage(who int, rusage *rusage_zos) (err error) = SYS_GETRUSAGE - -func Getrusage(who int, rusage *Rusage) (err error) { - var ruz rusage_zos - err = getrusage(who, &ruz) - //Only the first two fields of Rusage are set - rusage.Utime.Sec = ruz.Utime.Sec - rusage.Utime.Usec = int64(ruz.Utime.Usec) - rusage.Stime.Sec = ruz.Stime.Sec - rusage.Stime.Usec = int64(ruz.Stime.Usec) - return -} - -//sysnb Getsid(pid int) (sid int, err error) = SYS_GETSID -//sysnb Getuid() (uid int) -//sysnb Kill(pid int, sig Signal) (err error) -//sys Lchown(path string, uid int, gid int) (err error) = SYS___LCHOWN_A -//sys Link(path string, link string) (err error) = SYS___LINK_A -//sys Listen(s int, n int) (err error) -//sys lstat(path string, stat *Stat_LE_t) (err error) = SYS___LSTAT_A - -func Lstat(path string, stat *Stat_t) (err error) { - var statLE Stat_LE_t - err = lstat(path, &statLE) - copyStat(stat, &statLE) - return -} - -//sys Mkdir(path string, mode uint32) (err error) = SYS___MKDIR_A -//sys Mkfifo(path string, mode uint32) (err error) = SYS___MKFIFO_A -//sys Mknod(path string, mode uint32, dev int) (err error) = SYS___MKNOD_A -//sys Pread(fd int, p []byte, offset int64) (n int, err error) -//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) -//sys Readlink(path string, buf []byte) (n int, err error) = SYS___READLINK_A -//sys Rename(from string, to string) (err error) = SYS___RENAME_A -//sys Rmdir(path string) (err error) = SYS___RMDIR_A -//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK -//sys Setpriority(which int, who int, prio int) (err error) -//sysnb Setpgid(pid int, pgid int) (err error) = SYS_SETPGID -//sysnb Setrlimit(resource int, lim *Rlimit) (err error) -//sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID -//sysnb Setreuid(ruid int, euid int) (err error) = SYS_SETREUID -//sysnb Setsid() (pid int, err error) = SYS_SETSID -//sys Setuid(uid int) (err error) = SYS_SETUID -//sys Setgid(uid int) (err error) = SYS_SETGID -//sys Shutdown(fd int, how int) (err error) -//sys stat(path string, statLE *Stat_LE_t) (err error) = SYS___STAT_A - -func Stat(path string, sta *Stat_t) (err error) { - var statLE Stat_LE_t - err = stat(path, &statLE) - copyStat(sta, &statLE) - return -} - -//sys Symlink(path string, link string) (err error) = SYS___SYMLINK_A -//sys Sync() = SYS_SYNC -//sys Truncate(path string, length int64) (err error) = SYS___TRUNCATE_A -//sys Tcgetattr(fildes int, termptr *Termios) (err error) = SYS_TCGETATTR -//sys Tcsetattr(fildes int, when int, termptr *Termios) (err error) = SYS_TCSETATTR -//sys Umask(mask int) (oldmask int) -//sys Unlink(path string) (err error) = SYS___UNLINK_A -//sys Utime(path string, utim *Utimbuf) (err error) = SYS___UTIME_A - -//sys open(path string, mode int, perm uint32) (fd int, err error) = SYS___OPEN_A - -func Open(path string, mode int, perm uint32) (fd int, err error) { - return open(path, mode, perm) -} - -func Mkfifoat(dirfd int, path string, mode uint32) (err error) { - wd, err := Getwd() - if err != nil { - return err - } - - if err := Fchdir(dirfd); err != nil { - return err - } - defer Chdir(wd) - - return Mkfifo(path, mode) -} - -//sys remove(path string) (err error) - -func Remove(path string) error { - return remove(path) -} - -const ImplementsGetwd = true - -func Getcwd(buf []byte) (n int, err error) { - var p unsafe.Pointer - if len(buf) > 0 { - p = unsafe.Pointer(&buf[0]) - } else { - p = unsafe.Pointer(&_zero) - } - _, _, e := syscall_syscall(SYS___GETCWD_A, uintptr(p), uintptr(len(buf)), 0) - n = clen(buf) + 1 - if e != 0 { - err = errnoErr(e) - } - return -} - -func Getwd() (wd string, err error) { - var buf [PathMax]byte - n, err := Getcwd(buf[0:]) - if err != nil { - return "", err - } - // Getcwd returns the number of bytes written to buf, including the NUL. - if n < 1 || n > len(buf) || buf[n-1] != 0 { - return "", EINVAL - } - return string(buf[0 : n-1]), nil -} - -func Getgroups() (gids []int, err error) { - n, err := getgroups(0, nil) - if err != nil { - return nil, err - } - if n == 0 { - return nil, nil - } - - // Sanity check group count. Max is 1<<16 on Linux. - if n < 0 || n > 1<<20 { - return nil, EINVAL - } - - a := make([]_Gid_t, n) - n, err = getgroups(n, &a[0]) - if err != nil { - return nil, err - } - gids = make([]int, n) - for i, v := range a[0:n] { - gids[i] = int(v) - } - return -} - -func Setgroups(gids []int) (err error) { - if len(gids) == 0 { - return setgroups(0, nil) - } - - a := make([]_Gid_t, len(gids)) - for i, v := range gids { - a[i] = _Gid_t(v) - } - return setgroups(len(a), &a[0]) -} - -func gettid() uint64 - -func Gettid() (tid int) { - return int(gettid()) -} - -type WaitStatus uint32 - -// Wait status is 7 bits at bottom, either 0 (exited), -// 0x7F (stopped), or a signal number that caused an exit. -// The 0x80 bit is whether there was a core dump. -// An extra number (exit code, signal causing a stop) -// is in the high bits. At least that's the idea. -// There are various irregularities. For example, the -// "continued" status is 0xFFFF, distinguishing itself -// from stopped via the core dump bit. - -const ( - mask = 0x7F - core = 0x80 - exited = 0x00 - stopped = 0x7F - shift = 8 -) - -func (w WaitStatus) Exited() bool { return w&mask == exited } - -func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != exited } - -func (w WaitStatus) Stopped() bool { return w&0xFF == stopped } - -func (w WaitStatus) Continued() bool { return w == 0xFFFF } - -func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 } - -func (w WaitStatus) ExitStatus() int { - if !w.Exited() { - return -1 - } - return int(w>>shift) & 0xFF -} - -func (w WaitStatus) Signal() Signal { - if !w.Signaled() { - return -1 - } - return Signal(w & mask) -} - -func (w WaitStatus) StopSignal() Signal { - if !w.Stopped() { - return -1 - } - return Signal(w>>shift) & 0xFF -} - -func (w WaitStatus) TrapCause() int { return -1 } - -//sys waitpid(pid int, wstatus *_C_int, options int) (wpid int, err error) - -func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { - // TODO(mundaym): z/OS doesn't have wait4. I don't think getrusage does what we want. - // At the moment rusage will not be touched. - var status _C_int - wpid, err = waitpid(pid, &status, options) - if wstatus != nil { - *wstatus = WaitStatus(status) - } - return -} - -//sysnb gettimeofday(tv *timeval_zos) (err error) - -func Gettimeofday(tv *Timeval) (err error) { - var tvz timeval_zos - err = gettimeofday(&tvz) - tv.Sec = tvz.Sec - tv.Usec = int64(tvz.Usec) - return -} - -func Time(t *Time_t) (tt Time_t, err error) { - var tv Timeval - err = Gettimeofday(&tv) - if err != nil { - return 0, err - } - if t != nil { - *t = Time_t(tv.Sec) - } - return Time_t(tv.Sec), nil -} - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: sec, Nsec: nsec} -} - -func setTimeval(sec, usec int64) Timeval { //fix - return Timeval{Sec: sec, Usec: usec} -} - -//sysnb pipe(p *[2]_C_int) (err error) - -func Pipe(p []int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err = pipe(&pp) - if err == nil { - p[0] = int(pp[0]) - p[1] = int(pp[1]) - } - return -} - -//sys utimes(path string, timeval *[2]Timeval) (err error) = SYS___UTIMES_A - -func Utimes(path string, tv []Timeval) (err error) { - if len(tv) != 2 { - return EINVAL - } - return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) -} - -func UtimesNano(path string, ts []Timespec) error { - if len(ts) != 2 { - return EINVAL - } - // Not as efficient as it could be because Timespec and - // Timeval have different types in the different OSes - tv := [2]Timeval{ - NsecToTimeval(TimespecToNsec(ts[0])), - NsecToTimeval(TimespecToNsec(ts[1])), - } - return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) -} - -func Getsockname(fd int) (sa Sockaddr, err error) { - var rsa RawSockaddrAny - var len _Socklen = SizeofSockaddrAny - if err = getsockname(fd, &rsa, &len); err != nil { - return - } - // TODO(neeilan) : Remove this 0 ( added to get sys/unix compiling on z/OS ) - return anyToSockaddr(0, &rsa) -} - -const ( - // identifier constants - nwmHeaderIdentifier = 0xd5e6d4c8 - nwmFilterIdentifier = 0xd5e6d4c6 - nwmTCPConnIdentifier = 0xd5e6d4c3 - nwmRecHeaderIdentifier = 0xd5e6d4d9 - nwmIPStatsIdentifier = 0xd5e6d4c9d7e2e340 - nwmIPGStatsIdentifier = 0xd5e6d4c9d7c7e2e3 - nwmTCPStatsIdentifier = 0xd5e6d4e3c3d7e2e3 - nwmUDPStatsIdentifier = 0xd5e6d4e4c4d7e2e3 - nwmICMPGStatsEntry = 0xd5e6d4c9c3d4d7c7 - nwmICMPTStatsEntry = 0xd5e6d4c9c3d4d7e3 - - // nwmHeader constants - nwmVersion1 = 1 - nwmVersion2 = 2 - nwmCurrentVer = 2 - - nwmTCPConnType = 1 - nwmGlobalStatsType = 14 - - // nwmFilter constants - nwmFilterLclAddrMask = 0x20000000 // Local address - nwmFilterSrcAddrMask = 0x20000000 // Source address - nwmFilterLclPortMask = 0x10000000 // Local port - nwmFilterSrcPortMask = 0x10000000 // Source port - - // nwmConnEntry constants - nwmTCPStateClosed = 1 - nwmTCPStateListen = 2 - nwmTCPStateSynSent = 3 - nwmTCPStateSynRcvd = 4 - nwmTCPStateEstab = 5 - nwmTCPStateFinWait1 = 6 - nwmTCPStateFinWait2 = 7 - nwmTCPStateClosWait = 8 - nwmTCPStateLastAck = 9 - nwmTCPStateClosing = 10 - nwmTCPStateTimeWait = 11 - nwmTCPStateDeletTCB = 12 - - // Existing constants on linux - BPF_TCP_CLOSE = 1 - BPF_TCP_LISTEN = 2 - BPF_TCP_SYN_SENT = 3 - BPF_TCP_SYN_RECV = 4 - BPF_TCP_ESTABLISHED = 5 - BPF_TCP_FIN_WAIT1 = 6 - BPF_TCP_FIN_WAIT2 = 7 - BPF_TCP_CLOSE_WAIT = 8 - BPF_TCP_LAST_ACK = 9 - BPF_TCP_CLOSING = 10 - BPF_TCP_TIME_WAIT = 11 - BPF_TCP_NEW_SYN_RECV = -1 - BPF_TCP_MAX_STATES = -2 -) - -type nwmTriplet struct { - offset uint32 - length uint32 - number uint32 -} - -type nwmQuadruplet struct { - offset uint32 - length uint32 - number uint32 - match uint32 -} - -type nwmHeader struct { - ident uint32 - length uint32 - version uint16 - nwmType uint16 - bytesNeeded uint32 - options uint32 - _ [16]byte - inputDesc nwmTriplet - outputDesc nwmQuadruplet -} - -type nwmFilter struct { - ident uint32 - flags uint32 - resourceName [8]byte - resourceId uint32 - listenerId uint32 - local [28]byte // union of sockaddr4 and sockaddr6 - remote [28]byte // union of sockaddr4 and sockaddr6 - _ uint16 - _ uint16 - asid uint16 - _ [2]byte - tnLuName [8]byte - tnMonGrp uint32 - tnAppl [8]byte - applData [40]byte - nInterface [16]byte - dVipa [16]byte - dVipaPfx uint16 - dVipaPort uint16 - dVipaFamily byte - _ [3]byte - destXCF [16]byte - destXCFPfx uint16 - destXCFFamily byte - _ [1]byte - targIP [16]byte - targIPPfx uint16 - targIPFamily byte - _ [1]byte - _ [20]byte -} - -type nwmRecHeader struct { - ident uint32 - length uint32 - number byte - _ [3]byte -} - -type nwmTCPStatsEntry struct { - ident uint64 - currEstab uint32 - activeOpened uint32 - passiveOpened uint32 - connClosed uint32 - estabResets uint32 - attemptFails uint32 - passiveDrops uint32 - timeWaitReused uint32 - inSegs uint64 - predictAck uint32 - predictData uint32 - inDupAck uint32 - inBadSum uint32 - inBadLen uint32 - inShort uint32 - inDiscOldTime uint32 - inAllBeforeWin uint32 - inSomeBeforeWin uint32 - inAllAfterWin uint32 - inSomeAfterWin uint32 - inOutOfOrder uint32 - inAfterClose uint32 - inWinProbes uint32 - inWinUpdates uint32 - outWinUpdates uint32 - outSegs uint64 - outDelayAcks uint32 - outRsts uint32 - retransSegs uint32 - retransTimeouts uint32 - retransDrops uint32 - pmtuRetrans uint32 - pmtuErrors uint32 - outWinProbes uint32 - probeDrops uint32 - keepAliveProbes uint32 - keepAliveDrops uint32 - finwait2Drops uint32 - acceptCount uint64 - inBulkQSegs uint64 - inDiscards uint64 - connFloods uint32 - connStalls uint32 - cfgEphemDef uint16 - ephemInUse uint16 - ephemHiWater uint16 - flags byte - _ [1]byte - ephemExhaust uint32 - smcRCurrEstabLnks uint32 - smcRLnkActTimeOut uint32 - smcRActLnkOpened uint32 - smcRPasLnkOpened uint32 - smcRLnksClosed uint32 - smcRCurrEstab uint32 - smcRActiveOpened uint32 - smcRPassiveOpened uint32 - smcRConnClosed uint32 - smcRInSegs uint64 - smcROutSegs uint64 - smcRInRsts uint32 - smcROutRsts uint32 - smcDCurrEstabLnks uint32 - smcDActLnkOpened uint32 - smcDPasLnkOpened uint32 - smcDLnksClosed uint32 - smcDCurrEstab uint32 - smcDActiveOpened uint32 - smcDPassiveOpened uint32 - smcDConnClosed uint32 - smcDInSegs uint64 - smcDOutSegs uint64 - smcDInRsts uint32 - smcDOutRsts uint32 -} - -type nwmConnEntry struct { - ident uint32 - local [28]byte // union of sockaddr4 and sockaddr6 - remote [28]byte // union of sockaddr4 and sockaddr6 - startTime [8]byte // uint64, changed to prevent padding from being inserted - lastActivity [8]byte // uint64 - bytesIn [8]byte // uint64 - bytesOut [8]byte // uint64 - inSegs [8]byte // uint64 - outSegs [8]byte // uint64 - state uint16 - activeOpen byte - flag01 byte - outBuffered uint32 - inBuffered uint32 - maxSndWnd uint32 - reXmtCount uint32 - congestionWnd uint32 - ssThresh uint32 - roundTripTime uint32 - roundTripVar uint32 - sendMSS uint32 - sndWnd uint32 - rcvBufSize uint32 - sndBufSize uint32 - outOfOrderCount uint32 - lcl0WindowCount uint32 - rmt0WindowCount uint32 - dupacks uint32 - flag02 byte - sockOpt6Cont byte - asid uint16 - resourceName [8]byte - resourceId uint32 - subtask uint32 - sockOpt byte - sockOpt6 byte - clusterConnFlag byte - proto byte - targetAppl [8]byte - luName [8]byte - clientUserId [8]byte - logMode [8]byte - timeStamp uint32 - timeStampAge uint32 - serverResourceId uint32 - intfName [16]byte - ttlsStatPol byte - ttlsStatConn byte - ttlsSSLProt uint16 - ttlsNegCiph [2]byte - ttlsSecType byte - ttlsFIPS140Mode byte - ttlsUserID [8]byte - applData [40]byte - inOldestTime [8]byte // uint64 - outOldestTime [8]byte // uint64 - tcpTrustedPartner byte - _ [3]byte - bulkDataIntfName [16]byte - ttlsNegCiph4 [4]byte - smcReason uint32 - lclSMCLinkId uint32 - rmtSMCLinkId uint32 - smcStatus byte - smcFlags byte - _ [2]byte - rcvWnd uint32 - lclSMCBufSz uint32 - rmtSMCBufSz uint32 - ttlsSessID [32]byte - ttlsSessIDLen int16 - _ [1]byte - smcDStatus byte - smcDReason uint32 -} - -var svcNameTable [][]byte = [][]byte{ - []byte("\xc5\xe9\xc2\xd5\xd4\xc9\xc6\xf4"), // svc_EZBNMIF4 -} - -const ( - svc_EZBNMIF4 = 0 -) - -func GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) { - jobname := []byte("\x5c\x40\x40\x40\x40\x40\x40\x40") // "*" - responseBuffer := [4096]byte{0} - var bufferAlet, reasonCode uint32 = 0, 0 - var bufferLen, returnValue, returnCode int32 = 4096, 0, 0 - - dsa := [18]uint64{0} - var argv [7]unsafe.Pointer - argv[0] = unsafe.Pointer(&jobname[0]) - argv[1] = unsafe.Pointer(&responseBuffer[0]) - argv[2] = unsafe.Pointer(&bufferAlet) - argv[3] = unsafe.Pointer(&bufferLen) - argv[4] = unsafe.Pointer(&returnValue) - argv[5] = unsafe.Pointer(&returnCode) - argv[6] = unsafe.Pointer(&reasonCode) - - request := (*struct { - header nwmHeader - filter nwmFilter - })(unsafe.Pointer(&responseBuffer[0])) - - EZBNMIF4 := svcLoad(&svcNameTable[svc_EZBNMIF4][0]) - if EZBNMIF4 == nil { - return nil, errnoErr(EINVAL) - } - - // GetGlobalStats EZBNMIF4 call - request.header.ident = nwmHeaderIdentifier - request.header.length = uint32(unsafe.Sizeof(request.header)) - request.header.version = nwmCurrentVer - request.header.nwmType = nwmGlobalStatsType - request.header.options = 0x80000000 - - svcCall(EZBNMIF4, &argv[0], &dsa[0]) - - // outputDesc field is filled by EZBNMIF4 on success - if returnCode != 0 || request.header.outputDesc.offset == 0 { - return nil, errnoErr(EINVAL) - } - - // Check that EZBNMIF4 returned a nwmRecHeader - recHeader := (*nwmRecHeader)(unsafe.Pointer(&responseBuffer[request.header.outputDesc.offset])) - if recHeader.ident != nwmRecHeaderIdentifier { - return nil, errnoErr(EINVAL) - } - - // Parse nwmTriplets to get offsets of returned entries - var sections []*uint64 - var sectionDesc *nwmTriplet = (*nwmTriplet)(unsafe.Pointer(&responseBuffer[0])) - for i := uint32(0); i < uint32(recHeader.number); i++ { - offset := request.header.outputDesc.offset + uint32(unsafe.Sizeof(*recHeader)) + i*uint32(unsafe.Sizeof(*sectionDesc)) - sectionDesc = (*nwmTriplet)(unsafe.Pointer(&responseBuffer[offset])) - for j := uint32(0); j < sectionDesc.number; j++ { - offset = request.header.outputDesc.offset + sectionDesc.offset + j*sectionDesc.length - sections = append(sections, (*uint64)(unsafe.Pointer(&responseBuffer[offset]))) - } - } - - // Find nwmTCPStatsEntry in returned entries - var tcpStats *nwmTCPStatsEntry = nil - for _, ptr := range sections { - switch *ptr { - case nwmTCPStatsIdentifier: - if tcpStats != nil { - return nil, errnoErr(EINVAL) - } - tcpStats = (*nwmTCPStatsEntry)(unsafe.Pointer(ptr)) - case nwmIPStatsIdentifier: - case nwmIPGStatsIdentifier: - case nwmUDPStatsIdentifier: - case nwmICMPGStatsEntry: - case nwmICMPTStatsEntry: - default: - return nil, errnoErr(EINVAL) - } - } - if tcpStats == nil { - return nil, errnoErr(EINVAL) - } - - // GetConnectionDetail EZBNMIF4 call - responseBuffer = [4096]byte{0} - dsa = [18]uint64{0} - bufferAlet, reasonCode = 0, 0 - bufferLen, returnValue, returnCode = 4096, 0, 0 - nameptr := (*uint32)(unsafe.Pointer(uintptr(0x21c))) // Get jobname of current process - nameptr = (*uint32)(unsafe.Pointer(uintptr(*nameptr + 12))) - argv[0] = unsafe.Pointer(uintptr(*nameptr)) - - request.header.ident = nwmHeaderIdentifier - request.header.length = uint32(unsafe.Sizeof(request.header)) - request.header.version = nwmCurrentVer - request.header.nwmType = nwmTCPConnType - request.header.options = 0x80000000 - - request.filter.ident = nwmFilterIdentifier - - var localSockaddr RawSockaddrAny - socklen := _Socklen(SizeofSockaddrAny) - err := getsockname(fd, &localSockaddr, &socklen) - if err != nil { - return nil, errnoErr(EINVAL) - } - if localSockaddr.Addr.Family == AF_INET { - localSockaddr := (*RawSockaddrInet4)(unsafe.Pointer(&localSockaddr.Addr)) - localSockFilter := (*RawSockaddrInet4)(unsafe.Pointer(&request.filter.local[0])) - localSockFilter.Family = AF_INET - var i int - for i = 0; i < 4; i++ { - if localSockaddr.Addr[i] != 0 { - break - } - } - if i != 4 { - request.filter.flags |= nwmFilterLclAddrMask - for i = 0; i < 4; i++ { - localSockFilter.Addr[i] = localSockaddr.Addr[i] - } - } - if localSockaddr.Port != 0 { - request.filter.flags |= nwmFilterLclPortMask - localSockFilter.Port = localSockaddr.Port - } - } else if localSockaddr.Addr.Family == AF_INET6 { - localSockaddr := (*RawSockaddrInet6)(unsafe.Pointer(&localSockaddr.Addr)) - localSockFilter := (*RawSockaddrInet6)(unsafe.Pointer(&request.filter.local[0])) - localSockFilter.Family = AF_INET6 - var i int - for i = 0; i < 16; i++ { - if localSockaddr.Addr[i] != 0 { - break - } - } - if i != 16 { - request.filter.flags |= nwmFilterLclAddrMask - for i = 0; i < 16; i++ { - localSockFilter.Addr[i] = localSockaddr.Addr[i] - } - } - if localSockaddr.Port != 0 { - request.filter.flags |= nwmFilterLclPortMask - localSockFilter.Port = localSockaddr.Port - } - } - - svcCall(EZBNMIF4, &argv[0], &dsa[0]) - - // outputDesc field is filled by EZBNMIF4 on success - if returnCode != 0 || request.header.outputDesc.offset == 0 { - return nil, errnoErr(EINVAL) - } - - // Check that EZBNMIF4 returned a nwmConnEntry - conn := (*nwmConnEntry)(unsafe.Pointer(&responseBuffer[request.header.outputDesc.offset])) - if conn.ident != nwmTCPConnIdentifier { - return nil, errnoErr(EINVAL) - } - - // Copy data from the returned data structures into tcpInfo - // Stats from nwmConnEntry are specific to that connection. - // Stats from nwmTCPStatsEntry are global (to the interface?) - // Fields may not be an exact match. Some fields have no equivalent. - var tcpinfo TCPInfo - tcpinfo.State = uint8(conn.state) - tcpinfo.Ca_state = 0 // dummy - tcpinfo.Retransmits = uint8(tcpStats.retransSegs) - tcpinfo.Probes = uint8(tcpStats.outWinProbes) - tcpinfo.Backoff = 0 // dummy - tcpinfo.Options = 0 // dummy - tcpinfo.Rto = tcpStats.retransTimeouts - tcpinfo.Ato = tcpStats.outDelayAcks - tcpinfo.Snd_mss = conn.sendMSS - tcpinfo.Rcv_mss = conn.sendMSS // dummy - tcpinfo.Unacked = 0 // dummy - tcpinfo.Sacked = 0 // dummy - tcpinfo.Lost = 0 // dummy - tcpinfo.Retrans = conn.reXmtCount - tcpinfo.Fackets = 0 // dummy - tcpinfo.Last_data_sent = uint32(*(*uint64)(unsafe.Pointer(&conn.lastActivity[0]))) - tcpinfo.Last_ack_sent = uint32(*(*uint64)(unsafe.Pointer(&conn.outOldestTime[0]))) - tcpinfo.Last_data_recv = uint32(*(*uint64)(unsafe.Pointer(&conn.inOldestTime[0]))) - tcpinfo.Last_ack_recv = uint32(*(*uint64)(unsafe.Pointer(&conn.inOldestTime[0]))) - tcpinfo.Pmtu = conn.sendMSS // dummy, NWMIfRouteMtu is a candidate - tcpinfo.Rcv_ssthresh = conn.ssThresh - tcpinfo.Rtt = conn.roundTripTime - tcpinfo.Rttvar = conn.roundTripVar - tcpinfo.Snd_ssthresh = conn.ssThresh // dummy - tcpinfo.Snd_cwnd = conn.congestionWnd - tcpinfo.Advmss = conn.sendMSS // dummy - tcpinfo.Reordering = 0 // dummy - tcpinfo.Rcv_rtt = conn.roundTripTime // dummy - tcpinfo.Rcv_space = conn.sendMSS // dummy - tcpinfo.Total_retrans = conn.reXmtCount - - svcUnload(&svcNameTable[svc_EZBNMIF4][0], EZBNMIF4) - - return &tcpinfo, nil -} - -// GetsockoptString returns the string value of the socket option opt for the -// socket associated with fd at the given socket level. -func GetsockoptString(fd, level, opt int) (string, error) { - buf := make([]byte, 256) - vallen := _Socklen(len(buf)) - err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen) - if err != nil { - return "", err - } - - return string(buf[:vallen-1]), nil -} - -func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { - var msg Msghdr - var rsa RawSockaddrAny - msg.Name = (*byte)(unsafe.Pointer(&rsa)) - msg.Namelen = SizeofSockaddrAny - var iov Iovec - if len(p) > 0 { - iov.Base = (*byte)(unsafe.Pointer(&p[0])) - iov.SetLen(len(p)) - } - var dummy byte - if len(oob) > 0 { - // receive at least one normal byte - if len(p) == 0 { - iov.Base = &dummy - iov.SetLen(1) - } - msg.Control = (*byte)(unsafe.Pointer(&oob[0])) - msg.SetControllen(len(oob)) - } - msg.Iov = &iov - msg.Iovlen = 1 - if n, err = recvmsg(fd, &msg, flags); err != nil { - return - } - oobn = int(msg.Controllen) - recvflags = int(msg.Flags) - // source address is only specified if the socket is unconnected - if rsa.Addr.Family != AF_UNSPEC { - // TODO(neeilan): Remove 0 arg added to get this compiling on z/OS - from, err = anyToSockaddr(0, &rsa) - } - return -} - -func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { - _, err = SendmsgN(fd, p, oob, to, flags) - return -} - -func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { - var ptr unsafe.Pointer - var salen _Socklen - if to != nil { - var err error - ptr, salen, err = to.sockaddr() - if err != nil { - return 0, err - } - } - var msg Msghdr - msg.Name = (*byte)(unsafe.Pointer(ptr)) - msg.Namelen = int32(salen) - var iov Iovec - if len(p) > 0 { - iov.Base = (*byte)(unsafe.Pointer(&p[0])) - iov.SetLen(len(p)) - } - var dummy byte - if len(oob) > 0 { - // send at least one normal byte - if len(p) == 0 { - iov.Base = &dummy - iov.SetLen(1) - } - msg.Control = (*byte)(unsafe.Pointer(&oob[0])) - msg.SetControllen(len(oob)) - } - msg.Iov = &iov - msg.Iovlen = 1 - if n, err = sendmsg(fd, &msg, flags); err != nil { - return 0, err - } - if len(oob) > 0 && len(p) == 0 { - n = 0 - } - return n, nil -} - -func Opendir(name string) (uintptr, error) { - p, err := BytePtrFromString(name) - if err != nil { - return 0, err - } - dir, _, e := syscall_syscall(SYS___OPENDIR_A, uintptr(unsafe.Pointer(p)), 0, 0) - runtime.KeepAlive(unsafe.Pointer(p)) - if e != 0 { - err = errnoErr(e) - } - return dir, err -} - -// clearsyscall.Errno resets the errno value to 0. -func clearErrno() - -func Readdir(dir uintptr) (*Dirent, error) { - var ent Dirent - var res uintptr - // __readdir_r_a returns errno at the end of the directory stream, rather than 0. - // Therefore to avoid false positives we clear errno before calling it. - - // TODO(neeilan): Commented this out to get sys/unix compiling on z/OS. Uncomment and fix. Error: "undefined: clearsyscall" - //clearsyscall.Errno() // TODO(mundaym): check pre-emption rules. - - e, _, _ := syscall_syscall(SYS___READDIR_R_A, dir, uintptr(unsafe.Pointer(&ent)), uintptr(unsafe.Pointer(&res))) - var err error - if e != 0 { - err = errnoErr(Errno(e)) - } - if res == 0 { - return nil, err - } - return &ent, err -} - -func Closedir(dir uintptr) error { - _, _, e := syscall_syscall(SYS_CLOSEDIR, dir, 0, 0) - if e != 0 { - return errnoErr(e) - } - return nil -} - -func Seekdir(dir uintptr, pos int) { - _, _, _ = syscall_syscall(SYS_SEEKDIR, dir, uintptr(pos), 0) -} - -func Telldir(dir uintptr) (int, error) { - p, _, e := syscall_syscall(SYS_TELLDIR, dir, 0, 0) - pos := int(p) - if pos == -1 { - return pos, errnoErr(e) - } - return pos, nil -} - -// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command. -func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error { - // struct flock is packed on z/OS. We can't emulate that in Go so - // instead we pack it here. - var flock [24]byte - *(*int16)(unsafe.Pointer(&flock[0])) = lk.Type - *(*int16)(unsafe.Pointer(&flock[2])) = lk.Whence - *(*int64)(unsafe.Pointer(&flock[4])) = lk.Start - *(*int64)(unsafe.Pointer(&flock[12])) = lk.Len - *(*int32)(unsafe.Pointer(&flock[20])) = lk.Pid - _, _, errno := syscall_syscall(SYS_FCNTL, fd, uintptr(cmd), uintptr(unsafe.Pointer(&flock))) - lk.Type = *(*int16)(unsafe.Pointer(&flock[0])) - lk.Whence = *(*int16)(unsafe.Pointer(&flock[2])) - lk.Start = *(*int64)(unsafe.Pointer(&flock[4])) - lk.Len = *(*int64)(unsafe.Pointer(&flock[12])) - lk.Pid = *(*int32)(unsafe.Pointer(&flock[20])) - if errno == 0 { - return nil - } - return errno -} - -func Flock(fd int, how int) error { - - var flock_type int16 - var fcntl_cmd int - - switch how { - case LOCK_SH | LOCK_NB: - flock_type = F_RDLCK - fcntl_cmd = F_SETLK - case LOCK_EX | LOCK_NB: - flock_type = F_WRLCK - fcntl_cmd = F_SETLK - case LOCK_EX: - flock_type = F_WRLCK - fcntl_cmd = F_SETLKW - case LOCK_UN: - flock_type = F_UNLCK - fcntl_cmd = F_SETLKW - default: - } - - flock := Flock_t{ - Type: int16(flock_type), - Whence: int16(0), - Start: int64(0), - Len: int64(0), - Pid: int32(Getppid()), - } - - err := FcntlFlock(uintptr(fd), fcntl_cmd, &flock) - return err -} - -func Mlock(b []byte) (err error) { - _, _, e1 := syscall_syscall(SYS___MLOCKALL, _BPX_NONSWAP, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func Mlock2(b []byte, flags int) (err error) { - _, _, e1 := syscall_syscall(SYS___MLOCKALL, _BPX_NONSWAP, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func Mlockall(flags int) (err error) { - _, _, e1 := syscall_syscall(SYS___MLOCKALL, _BPX_NONSWAP, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func Munlock(b []byte) (err error) { - _, _, e1 := syscall_syscall(SYS___MLOCKALL, _BPX_SWAP, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func Munlockall() (err error) { - _, _, e1 := syscall_syscall(SYS___MLOCKALL, _BPX_SWAP, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func ClockGettime(clockid int32, ts *Timespec) error { - - var ticks_per_sec uint32 = 100 //TODO(kenan): value is currently hardcoded; need sysconf() call otherwise - var nsec_per_sec int64 = 1000000000 - - if ts == nil { - return EFAULT - } - if clockid == CLOCK_REALTIME || clockid == CLOCK_MONOTONIC { - var nanotime int64 = runtime.Nanotime1() - ts.Sec = nanotime / nsec_per_sec - ts.Nsec = nanotime % nsec_per_sec - } else if clockid == CLOCK_PROCESS_CPUTIME_ID || clockid == CLOCK_THREAD_CPUTIME_ID { - var tm Tms - _, err := Times(&tm) - if err != nil { - return EFAULT - } - ts.Sec = int64(tm.Utime / ticks_per_sec) - ts.Nsec = int64(tm.Utime) * nsec_per_sec / int64(ticks_per_sec) - } else { - return EINVAL - } - return nil -} - -func Statfs(path string, stat *Statfs_t) (err error) { - fd, err := open(path, O_RDONLY, 0) - defer Close(fd) - if err != nil { - return err - } - return Fstatfs(fd, stat) -} - -var ( - Stdin = 0 - Stdout = 1 - Stderr = 2 -) - -// Do the interface allocations only once for common -// Errno values. -var ( - errEAGAIN error = syscall.EAGAIN - errEINVAL error = syscall.EINVAL - errENOENT error = syscall.ENOENT -) - -var ( - signalNameMapOnce sync.Once - signalNameMap map[string]syscall.Signal -) - -// errnoErr returns common boxed Errno values, to prevent -// allocations at runtime. -func errnoErr(e Errno) error { - switch e { - case 0: - return nil - case EAGAIN: - return errEAGAIN - case EINVAL: - return errEINVAL - case ENOENT: - return errENOENT - } - return e -} - -// ErrnoName returns the error name for error number e. -func ErrnoName(e Errno) string { - i := sort.Search(len(errorList), func(i int) bool { - return errorList[i].num >= e - }) - if i < len(errorList) && errorList[i].num == e { - return errorList[i].name - } - return "" -} - -// SignalName returns the signal name for signal number s. -func SignalName(s syscall.Signal) string { - i := sort.Search(len(signalList), func(i int) bool { - return signalList[i].num >= s - }) - if i < len(signalList) && signalList[i].num == s { - return signalList[i].name - } - return "" -} - -// SignalNum returns the syscall.Signal for signal named s, -// or 0 if a signal with such name is not found. -// The signal name should start with "SIG". -func SignalNum(s string) syscall.Signal { - signalNameMapOnce.Do(func() { - signalNameMap = make(map[string]syscall.Signal, len(signalList)) - for _, signal := range signalList { - signalNameMap[signal.name] = signal.num - } - }) - return signalNameMap[s] -} - -// clen returns the index of the first NULL byte in n or len(n) if n contains no NULL byte. -func clen(n []byte) int { - i := bytes.IndexByte(n, 0) - if i == -1 { - i = len(n) - } - return i -} - -// Mmap manager, for use by operating system-specific implementations. - -type mmapper struct { - sync.Mutex - active map[*byte][]byte // active mappings; key is last byte in mapping - mmap func(addr, length uintptr, prot, flags, fd int, offset int64) (uintptr, error) - munmap func(addr uintptr, length uintptr) error -} - -func (m *mmapper) Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { - if length <= 0 { - return nil, EINVAL - } - - // Map the requested memory. - addr, errno := m.mmap(0, uintptr(length), prot, flags, fd, offset) - if errno != nil { - return nil, errno - } - - // Slice memory layout - var sl = struct { - addr uintptr - len int - cap int - }{addr, length, length} - - // Use unsafe to turn sl into a []byte. - b := *(*[]byte)(unsafe.Pointer(&sl)) - - // Register mapping in m and return it. - p := &b[cap(b)-1] - m.Lock() - defer m.Unlock() - m.active[p] = b - return b, nil -} - -func (m *mmapper) Munmap(data []byte) (err error) { - if len(data) == 0 || len(data) != cap(data) { - return EINVAL - } - - // Find the base of the mapping. - p := &data[cap(data)-1] - m.Lock() - defer m.Unlock() - b := m.active[p] - if b == nil || &b[0] != &data[0] { - return EINVAL - } - - // Unmap the memory and update m. - if errno := m.munmap(uintptr(unsafe.Pointer(&b[0])), uintptr(len(b))); errno != nil { - return errno - } - delete(m.active, p) - return nil -} - -func Read(fd int, p []byte) (n int, err error) { - n, err = read(fd, p) - if raceenabled { - if n > 0 { - raceWriteRange(unsafe.Pointer(&p[0]), n) - } - if err == nil { - raceAcquire(unsafe.Pointer(&ioSync)) - } - } - return -} - -func Write(fd int, p []byte) (n int, err error) { - if raceenabled { - raceReleaseMerge(unsafe.Pointer(&ioSync)) - } - n, err = write(fd, p) - if raceenabled && n > 0 { - raceReadRange(unsafe.Pointer(&p[0]), n) - } - return -} - -// For testing: clients can set this flag to force -// creation of IPv6 sockets to return EAFNOSUPPORT. -var SocketDisableIPv6 bool - -// Sockaddr represents a socket address. -type Sockaddr interface { - sockaddr() (ptr unsafe.Pointer, len _Socklen, err error) // lowercase; only we can define Sockaddrs -} - -// SockaddrInet4 implements the Sockaddr interface for AF_INET type sockets. -type SockaddrInet4 struct { - Port int - Addr [4]byte - raw RawSockaddrInet4 -} - -// SockaddrInet6 implements the Sockaddr interface for AF_INET6 type sockets. -type SockaddrInet6 struct { - Port int - ZoneId uint32 - Addr [16]byte - raw RawSockaddrInet6 -} - -// SockaddrUnix implements the Sockaddr interface for AF_UNIX type sockets. -type SockaddrUnix struct { - Name string - raw RawSockaddrUnix -} - -func Bind(fd int, sa Sockaddr) (err error) { - ptr, n, err := sa.sockaddr() - if err != nil { - return err - } - return bind(fd, ptr, n) -} - -func Connect(fd int, sa Sockaddr) (err error) { - ptr, n, err := sa.sockaddr() - if err != nil { - return err - } - return connect(fd, ptr, n) -} - -func Getpeername(fd int) (sa Sockaddr, err error) { - var rsa RawSockaddrAny - var len _Socklen = SizeofSockaddrAny - if err = getpeername(fd, &rsa, &len); err != nil { - return - } - return anyToSockaddr(fd, &rsa) -} - -func GetsockoptByte(fd, level, opt int) (value byte, err error) { - var n byte - vallen := _Socklen(1) - err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen) - return n, err -} - -func GetsockoptInt(fd, level, opt int) (value int, err error) { - var n int32 - vallen := _Socklen(4) - err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen) - return int(n), err -} - -func GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, err error) { - vallen := _Socklen(4) - err = getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen) - return value, err -} - -func GetsockoptIPMreq(fd, level, opt int) (*IPMreq, error) { - var value IPMreq - vallen := _Socklen(SizeofIPMreq) - err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) - return &value, err -} - -func GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) { - var value IPv6Mreq - vallen := _Socklen(SizeofIPv6Mreq) - err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) - return &value, err -} - -func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) { - var value IPv6MTUInfo - vallen := _Socklen(SizeofIPv6MTUInfo) - err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) - return &value, err -} - -func GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) { - var value ICMPv6Filter - vallen := _Socklen(SizeofICMPv6Filter) - err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) - return &value, err -} - -func GetsockoptLinger(fd, level, opt int) (*Linger, error) { - var linger Linger - vallen := _Socklen(SizeofLinger) - err := getsockopt(fd, level, opt, unsafe.Pointer(&linger), &vallen) - return &linger, err -} - -func GetsockoptTimeval(fd, level, opt int) (*Timeval, error) { - var tv Timeval - vallen := _Socklen(unsafe.Sizeof(tv)) - err := getsockopt(fd, level, opt, unsafe.Pointer(&tv), &vallen) - return &tv, err -} - -func GetsockoptUint64(fd, level, opt int) (value uint64, err error) { - var n uint64 - vallen := _Socklen(8) - err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen) - return n, err -} - -func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) { - var rsa RawSockaddrAny - var len _Socklen = SizeofSockaddrAny - if n, err = recvfrom(fd, p, flags, &rsa, &len); err != nil { - return - } - if rsa.Addr.Family != AF_UNSPEC { - from, err = anyToSockaddr(fd, &rsa) - } - return -} - -func Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) { - ptr, n, err := to.sockaddr() - if err != nil { - return err - } - return sendto(fd, p, flags, ptr, n) -} - -func SetsockoptByte(fd, level, opt int, value byte) (err error) { - return setsockopt(fd, level, opt, unsafe.Pointer(&value), 1) -} - -func SetsockoptInt(fd, level, opt int, value int) (err error) { - var n = int32(value) - return setsockopt(fd, level, opt, unsafe.Pointer(&n), 4) -} - -func SetsockoptInet4Addr(fd, level, opt int, value [4]byte) (err error) { - return setsockopt(fd, level, opt, unsafe.Pointer(&value[0]), 4) -} - -func SetsockoptIPMreq(fd, level, opt int, mreq *IPMreq) (err error) { - return setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPMreq) -} - -func SetsockoptIPv6Mreq(fd, level, opt int, mreq *IPv6Mreq) (err error) { - return setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPv6Mreq) -} - -func SetsockoptICMPv6Filter(fd, level, opt int, filter *ICMPv6Filter) error { - return setsockopt(fd, level, opt, unsafe.Pointer(filter), SizeofICMPv6Filter) -} - -func SetsockoptLinger(fd, level, opt int, l *Linger) (err error) { - return setsockopt(fd, level, opt, unsafe.Pointer(l), SizeofLinger) -} - -func SetsockoptString(fd, level, opt int, s string) (err error) { - var p unsafe.Pointer - if len(s) > 0 { - p = unsafe.Pointer(&[]byte(s)[0]) - } - return setsockopt(fd, level, opt, p, uintptr(len(s))) -} - -func SetsockoptTimeval(fd, level, opt int, tv *Timeval) (err error) { - return setsockopt(fd, level, opt, unsafe.Pointer(tv), unsafe.Sizeof(*tv)) -} - -func SetsockoptUint64(fd, level, opt int, value uint64) (err error) { - return setsockopt(fd, level, opt, unsafe.Pointer(&value), 8) -} - -func Socket(domain, typ, proto int) (fd int, err error) { - if domain == AF_INET6 && SocketDisableIPv6 { - return -1, EAFNOSUPPORT - } - fd, err = socket(domain, typ, proto) - return -} - -func Socketpair(domain, typ, proto int) (fd [2]int, err error) { - var fdx [2]int32 - err = socketpair(domain, typ, proto, &fdx) - if err == nil { - fd[0] = int(fdx[0]) - fd[1] = int(fdx[1]) - } - return -} - -var ioSync int64 - -func CloseOnExec(fd int) { fcntl(fd, F_SETFD, FD_CLOEXEC) } - -func SetNonblock(fd int, nonblocking bool) (err error) { - flag, err := fcntl(fd, F_GETFL, 0) - if err != nil { - return err - } - if nonblocking { - flag |= O_NONBLOCK - } else { - flag &= ^O_NONBLOCK - } - _, err = fcntl(fd, F_SETFL, flag) - return err -} - -// Exec calls execve(2), which replaces the calling executable in the process -// tree. argv0 should be the full path to an executable ("/bin/ls") and the -// executable name should also be the first argument in argv (["ls", "-l"]). -// envv are the environment variables that should be passed to the new -// process (["USER=go", "PWD=/tmp"]). -func Exec(argv0 string, argv []string, envv []string) error { - return syscall.Exec(argv0, argv, envv) -} - -func Mount(source string, target string, fstype string, flags uintptr, data string) (err error) { - if needspace := 8 - len(fstype); needspace <= 0 { - fstype = fstype[:8] - } else { - fstype += " "[:needspace] - } - return mount_LE(target, source, fstype, uint32(flags), int32(len(data)), data) -} - -func Unmount(name string, mtm int) (err error) { - // mountpoint is always a full path and starts with a '/' - // check if input string is not a mountpoint but a filesystem name - if name[0] != '/' { - return unmount(name, mtm) - } - // treat name as mountpoint - b2s := func(arr []byte) string { - nulli := bytes.IndexByte(arr, 0) - if nulli == -1 { - return string(arr) - } else { - return string(arr[:nulli]) - } - } - var buffer struct { - header W_Mnth - fsinfo [64]W_Mntent - } - fsCount, err := W_Getmntent_A((*byte)(unsafe.Pointer(&buffer)), int(unsafe.Sizeof(buffer))) - if err != nil { - return err - } - if fsCount == 0 { - return EINVAL - } - for i := 0; i < fsCount; i++ { - if b2s(buffer.fsinfo[i].Mountpoint[:]) == name { - err = unmount(b2s(buffer.fsinfo[i].Fsname[:]), mtm) - break - } - } - return err -} diff --git a/vendor/golang.org/x/sys/unix/sysvshm_linux.go b/vendor/golang.org/x/sys/unix/sysvshm_linux.go deleted file mode 100644 index 2c3a443..0000000 --- a/vendor/golang.org/x/sys/unix/sysvshm_linux.go +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux -// +build linux - -package unix - -import "runtime" - -// SysvShmCtl performs control operations on the shared memory segment -// specified by id. -func SysvShmCtl(id, cmd int, desc *SysvShmDesc) (result int, err error) { - if runtime.GOARCH == "arm" || - runtime.GOARCH == "mips64" || runtime.GOARCH == "mips64le" { - cmd |= ipc_64 - } - - return shmctl(id, cmd, desc) -} diff --git a/vendor/golang.org/x/sys/unix/sysvshm_unix.go b/vendor/golang.org/x/sys/unix/sysvshm_unix.go deleted file mode 100644 index 5bb41d1..0000000 --- a/vendor/golang.org/x/sys/unix/sysvshm_unix.go +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build (darwin && !ios) || linux -// +build darwin,!ios linux - -package unix - -import "unsafe" - -// SysvShmAttach attaches the Sysv shared memory segment associated with the -// shared memory identifier id. -func SysvShmAttach(id int, addr uintptr, flag int) ([]byte, error) { - addr, errno := shmat(id, addr, flag) - if errno != nil { - return nil, errno - } - - // Retrieve the size of the shared memory to enable slice creation - var info SysvShmDesc - - _, err := SysvShmCtl(id, IPC_STAT, &info) - if err != nil { - // release the shared memory if we can't find the size - - // ignoring error from shmdt as there's nothing sensible to return here - shmdt(addr) - return nil, err - } - - // Use unsafe to convert addr into a []byte. - b := unsafe.Slice((*byte)(unsafe.Pointer(addr)), int(info.Segsz)) - return b, nil -} - -// SysvShmDetach unmaps the shared memory slice returned from SysvShmAttach. -// -// It is not safe to use the slice after calling this function. -func SysvShmDetach(data []byte) error { - if len(data) == 0 { - return EINVAL - } - - return shmdt(uintptr(unsafe.Pointer(&data[0]))) -} - -// SysvShmGet returns the Sysv shared memory identifier associated with key. -// If the IPC_CREAT flag is specified a new segment is created. -func SysvShmGet(key, size, flag int) (id int, err error) { - return shmget(key, size, flag) -} diff --git a/vendor/golang.org/x/sys/unix/sysvshm_unix_other.go b/vendor/golang.org/x/sys/unix/sysvshm_unix_other.go deleted file mode 100644 index 71bddef..0000000 --- a/vendor/golang.org/x/sys/unix/sysvshm_unix_other.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build darwin && !ios -// +build darwin,!ios - -package unix - -// SysvShmCtl performs control operations on the shared memory segment -// specified by id. -func SysvShmCtl(id, cmd int, desc *SysvShmDesc) (result int, err error) { - return shmctl(id, cmd, desc) -} diff --git a/vendor/golang.org/x/sys/unix/timestruct.go b/vendor/golang.org/x/sys/unix/timestruct.go deleted file mode 100644 index 3d89304..0000000 --- a/vendor/golang.org/x/sys/unix/timestruct.go +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos -// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos - -package unix - -import "time" - -// TimespecToNSec returns the time stored in ts as nanoseconds. -func TimespecToNsec(ts Timespec) int64 { return ts.Nano() } - -// NsecToTimespec converts a number of nanoseconds into a Timespec. -func NsecToTimespec(nsec int64) Timespec { - sec := nsec / 1e9 - nsec = nsec % 1e9 - if nsec < 0 { - nsec += 1e9 - sec-- - } - return setTimespec(sec, nsec) -} - -// TimeToTimespec converts t into a Timespec. -// On some 32-bit systems the range of valid Timespec values are smaller -// than that of time.Time values. So if t is out of the valid range of -// Timespec, it returns a zero Timespec and ERANGE. -func TimeToTimespec(t time.Time) (Timespec, error) { - sec := t.Unix() - nsec := int64(t.Nanosecond()) - ts := setTimespec(sec, nsec) - - // Currently all targets have either int32 or int64 for Timespec.Sec. - // If there were a new target with floating point type for it, we have - // to consider the rounding error. - if int64(ts.Sec) != sec { - return Timespec{}, ERANGE - } - return ts, nil -} - -// TimevalToNsec returns the time stored in tv as nanoseconds. -func TimevalToNsec(tv Timeval) int64 { return tv.Nano() } - -// NsecToTimeval converts a number of nanoseconds into a Timeval. -func NsecToTimeval(nsec int64) Timeval { - nsec += 999 // round up to microsecond - usec := nsec % 1e9 / 1e3 - sec := nsec / 1e9 - if usec < 0 { - usec += 1e6 - sec-- - } - return setTimeval(sec, usec) -} - -// Unix returns the time stored in ts as seconds plus nanoseconds. -func (ts *Timespec) Unix() (sec int64, nsec int64) { - return int64(ts.Sec), int64(ts.Nsec) -} - -// Unix returns the time stored in tv as seconds plus nanoseconds. -func (tv *Timeval) Unix() (sec int64, nsec int64) { - return int64(tv.Sec), int64(tv.Usec) * 1000 -} - -// Nano returns the time stored in ts as nanoseconds. -func (ts *Timespec) Nano() int64 { - return int64(ts.Sec)*1e9 + int64(ts.Nsec) -} - -// Nano returns the time stored in tv as nanoseconds. -func (tv *Timeval) Nano() int64 { - return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000 -} diff --git a/vendor/golang.org/x/sys/unix/unveil_openbsd.go b/vendor/golang.org/x/sys/unix/unveil_openbsd.go deleted file mode 100644 index 168d5ae..0000000 --- a/vendor/golang.org/x/sys/unix/unveil_openbsd.go +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package unix - -import ( - "syscall" - "unsafe" -) - -// Unveil implements the unveil syscall. -// For more information see unveil(2). -// Note that the special case of blocking further -// unveil calls is handled by UnveilBlock. -func Unveil(path string, flags string) error { - pathPtr, err := syscall.BytePtrFromString(path) - if err != nil { - return err - } - flagsPtr, err := syscall.BytePtrFromString(flags) - if err != nil { - return err - } - _, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(unsafe.Pointer(pathPtr)), uintptr(unsafe.Pointer(flagsPtr)), 0) - if e != 0 { - return e - } - return nil -} - -// UnveilBlock blocks future unveil calls. -// For more information see unveil(2). -func UnveilBlock() error { - // Both pointers must be nil. - var pathUnsafe, flagsUnsafe unsafe.Pointer - _, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(pathUnsafe), uintptr(flagsUnsafe), 0) - if e != 0 { - return e - } - return nil -} diff --git a/vendor/golang.org/x/sys/unix/xattr_bsd.go b/vendor/golang.org/x/sys/unix/xattr_bsd.go deleted file mode 100644 index 663b377..0000000 --- a/vendor/golang.org/x/sys/unix/xattr_bsd.go +++ /dev/null @@ -1,276 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build freebsd || netbsd -// +build freebsd netbsd - -package unix - -import ( - "strings" - "unsafe" -) - -// Derive extattr namespace and attribute name - -func xattrnamespace(fullattr string) (ns int, attr string, err error) { - s := strings.IndexByte(fullattr, '.') - if s == -1 { - return -1, "", ENOATTR - } - - namespace := fullattr[0:s] - attr = fullattr[s+1:] - - switch namespace { - case "user": - return EXTATTR_NAMESPACE_USER, attr, nil - case "system": - return EXTATTR_NAMESPACE_SYSTEM, attr, nil - default: - return -1, "", ENOATTR - } -} - -func initxattrdest(dest []byte, idx int) (d unsafe.Pointer) { - if len(dest) > idx { - return unsafe.Pointer(&dest[idx]) - } else { - return unsafe.Pointer(_zero) - } -} - -// FreeBSD and NetBSD implement their own syscalls to handle extended attributes - -func Getxattr(file string, attr string, dest []byte) (sz int, err error) { - d := initxattrdest(dest, 0) - destsize := len(dest) - - nsid, a, err := xattrnamespace(attr) - if err != nil { - return -1, err - } - - return ExtattrGetFile(file, nsid, a, uintptr(d), destsize) -} - -func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { - d := initxattrdest(dest, 0) - destsize := len(dest) - - nsid, a, err := xattrnamespace(attr) - if err != nil { - return -1, err - } - - return ExtattrGetFd(fd, nsid, a, uintptr(d), destsize) -} - -func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) { - d := initxattrdest(dest, 0) - destsize := len(dest) - - nsid, a, err := xattrnamespace(attr) - if err != nil { - return -1, err - } - - return ExtattrGetLink(link, nsid, a, uintptr(d), destsize) -} - -// flags are unused on FreeBSD - -func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) { - var d unsafe.Pointer - if len(data) > 0 { - d = unsafe.Pointer(&data[0]) - } - datasiz := len(data) - - nsid, a, err := xattrnamespace(attr) - if err != nil { - return - } - - _, err = ExtattrSetFd(fd, nsid, a, uintptr(d), datasiz) - return -} - -func Setxattr(file string, attr string, data []byte, flags int) (err error) { - var d unsafe.Pointer - if len(data) > 0 { - d = unsafe.Pointer(&data[0]) - } - datasiz := len(data) - - nsid, a, err := xattrnamespace(attr) - if err != nil { - return - } - - _, err = ExtattrSetFile(file, nsid, a, uintptr(d), datasiz) - return -} - -func Lsetxattr(link string, attr string, data []byte, flags int) (err error) { - var d unsafe.Pointer - if len(data) > 0 { - d = unsafe.Pointer(&data[0]) - } - datasiz := len(data) - - nsid, a, err := xattrnamespace(attr) - if err != nil { - return - } - - _, err = ExtattrSetLink(link, nsid, a, uintptr(d), datasiz) - return -} - -func Removexattr(file string, attr string) (err error) { - nsid, a, err := xattrnamespace(attr) - if err != nil { - return - } - - err = ExtattrDeleteFile(file, nsid, a) - return -} - -func Fremovexattr(fd int, attr string) (err error) { - nsid, a, err := xattrnamespace(attr) - if err != nil { - return - } - - err = ExtattrDeleteFd(fd, nsid, a) - return -} - -func Lremovexattr(link string, attr string) (err error) { - nsid, a, err := xattrnamespace(attr) - if err != nil { - return - } - - err = ExtattrDeleteLink(link, nsid, a) - return -} - -func Listxattr(file string, dest []byte) (sz int, err error) { - destsiz := len(dest) - - // FreeBSD won't allow you to list xattrs from multiple namespaces - s, pos := 0, 0 - for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { - stmp, e := ListxattrNS(file, nsid, dest[pos:]) - - /* Errors accessing system attrs are ignored so that - * we can implement the Linux-like behavior of omitting errors that - * we don't have read permissions on - * - * Linux will still error if we ask for user attributes on a file that - * we don't have read permissions on, so don't ignore those errors - */ - if e != nil { - if e == EPERM && nsid != EXTATTR_NAMESPACE_USER { - continue - } - return s, e - } - - s += stmp - pos = s - if pos > destsiz { - pos = destsiz - } - } - - return s, nil -} - -func ListxattrNS(file string, nsid int, dest []byte) (sz int, err error) { - d := initxattrdest(dest, 0) - destsiz := len(dest) - - s, e := ExtattrListFile(file, nsid, uintptr(d), destsiz) - if e != nil { - return 0, err - } - - return s, nil -} - -func Flistxattr(fd int, dest []byte) (sz int, err error) { - destsiz := len(dest) - - s, pos := 0, 0 - for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { - stmp, e := FlistxattrNS(fd, nsid, dest[pos:]) - - if e != nil { - if e == EPERM && nsid != EXTATTR_NAMESPACE_USER { - continue - } - return s, e - } - - s += stmp - pos = s - if pos > destsiz { - pos = destsiz - } - } - - return s, nil -} - -func FlistxattrNS(fd int, nsid int, dest []byte) (sz int, err error) { - d := initxattrdest(dest, 0) - destsiz := len(dest) - - s, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz) - if e != nil { - return 0, err - } - - return s, nil -} - -func Llistxattr(link string, dest []byte) (sz int, err error) { - destsiz := len(dest) - - s, pos := 0, 0 - for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { - stmp, e := LlistxattrNS(link, nsid, dest[pos:]) - - if e != nil { - if e == EPERM && nsid != EXTATTR_NAMESPACE_USER { - continue - } - return s, e - } - - s += stmp - pos = s - if pos > destsiz { - pos = destsiz - } - } - - return s, nil -} - -func LlistxattrNS(link string, nsid int, dest []byte) (sz int, err error) { - d := initxattrdest(dest, 0) - destsiz := len(dest) - - s, e := ExtattrListLink(link, nsid, uintptr(d), destsiz) - if e != nil { - return 0, err - } - - return s, nil -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go b/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go deleted file mode 100644 index ca9799b..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go +++ /dev/null @@ -1,1385 +0,0 @@ -// mkerrors.sh -maix32 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build ppc && aix -// +build ppc,aix - -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs -- -maix32 _const.go - -package unix - -import "syscall" - -const ( - AF_APPLETALK = 0x10 - AF_BYPASS = 0x19 - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_ECMA = 0x8 - AF_HYLINK = 0xf - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x18 - AF_INTF = 0x14 - AF_ISO = 0x7 - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x1e - AF_NDD = 0x17 - AF_NETWARE = 0x16 - AF_NS = 0x6 - AF_OSI = 0x7 - AF_PUP = 0x4 - AF_RIF = 0x15 - AF_ROUTE = 0x11 - AF_SNA = 0xb - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - ALTWERASE = 0x400000 - ARPHRD_802_3 = 0x6 - ARPHRD_802_5 = 0x6 - ARPHRD_ETHER = 0x1 - ARPHRD_FDDI = 0x1 - B0 = 0x0 - B110 = 0x3 - B1200 = 0x9 - B134 = 0x4 - B150 = 0x5 - B1800 = 0xa - B19200 = 0xe - B200 = 0x6 - B2400 = 0xb - B300 = 0x7 - B38400 = 0xf - B4800 = 0xc - B50 = 0x1 - B600 = 0x8 - B75 = 0x2 - B9600 = 0xd - BRKINT = 0x2 - BS0 = 0x0 - BS1 = 0x1000 - BSDLY = 0x1000 - CAP_AACCT = 0x6 - CAP_ARM_APPLICATION = 0x5 - CAP_BYPASS_RAC_VMM = 0x3 - CAP_CLEAR = 0x0 - CAP_CREDENTIALS = 0x7 - CAP_EFFECTIVE = 0x1 - CAP_EWLM_AGENT = 0x4 - CAP_INHERITABLE = 0x2 - CAP_MAXIMUM = 0x7 - CAP_NUMA_ATTACH = 0x2 - CAP_PERMITTED = 0x3 - CAP_PROPAGATE = 0x1 - CAP_PROPOGATE = 0x1 - CAP_SET = 0x1 - CBAUD = 0xf - CFLUSH = 0xf - CIBAUD = 0xf0000 - CLOCAL = 0x800 - CLOCK_MONOTONIC = 0xa - CLOCK_PROCESS_CPUTIME_ID = 0xb - CLOCK_REALTIME = 0x9 - CLOCK_THREAD_CPUTIME_ID = 0xc - CR0 = 0x0 - CR1 = 0x100 - CR2 = 0x200 - CR3 = 0x300 - CRDLY = 0x300 - CREAD = 0x80 - CS5 = 0x0 - CS6 = 0x10 - CS7 = 0x20 - CS8 = 0x30 - CSIOCGIFCONF = -0x3ff796dc - CSIZE = 0x30 - CSMAP_DIR = "/usr/lib/nls/csmap/" - CSTART = '\021' - CSTOP = '\023' - CSTOPB = 0x40 - CSUSP = 0x1a - ECHO = 0x8 - ECHOCTL = 0x20000 - ECHOE = 0x10 - ECHOK = 0x20 - ECHOKE = 0x80000 - ECHONL = 0x40 - ECHOPRT = 0x40000 - ECH_ICMPID = 0x2 - ETHERNET_CSMACD = 0x6 - EVENP = 0x80 - EXCONTINUE = 0x0 - EXDLOK = 0x3 - EXIO = 0x2 - EXPGIO = 0x0 - EXRESUME = 0x2 - EXRETURN = 0x1 - EXSIG = 0x4 - EXTA = 0xe - EXTB = 0xf - EXTRAP = 0x1 - EYEC_RTENTRYA = 0x257274656e747241 - EYEC_RTENTRYF = 0x257274656e747246 - E_ACC = 0x0 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0xfffe - FF0 = 0x0 - FF1 = 0x2000 - FFDLY = 0x2000 - FLUSHBAND = 0x40 - FLUSHLOW = 0x8 - FLUSHO = 0x100000 - FLUSHR = 0x1 - FLUSHRW = 0x3 - FLUSHW = 0x2 - F_CLOSEM = 0xa - F_DUP2FD = 0xe - F_DUPFD = 0x0 - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0x5 - F_GETLK64 = 0xb - F_GETOWN = 0x8 - F_LOCK = 0x1 - F_OK = 0x0 - F_RDLCK = 0x1 - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0x6 - F_SETLK64 = 0xc - F_SETLKW = 0x7 - F_SETLKW64 = 0xd - F_SETOWN = 0x9 - F_TEST = 0x3 - F_TLOCK = 0x2 - F_TSTLK = 0xf - F_ULOCK = 0x0 - F_UNLCK = 0x3 - F_WRLCK = 0x2 - HUPCL = 0x400 - IBSHIFT = 0x10 - ICANON = 0x2 - ICMP6_FILTER = 0x26 - ICMP6_SEC_SEND_DEL = 0x46 - ICMP6_SEC_SEND_GET = 0x47 - ICMP6_SEC_SEND_SET = 0x44 - ICMP6_SEC_SEND_SET_CGA_ADDR = 0x45 - ICRNL = 0x100 - IEXTEN = 0x200000 - IFA_FIRSTALIAS = 0x2000 - IFA_ROUTE = 0x1 - IFF_64BIT = 0x4000000 - IFF_ALLCAST = 0x20000 - IFF_ALLMULTI = 0x200 - IFF_BPF = 0x8000000 - IFF_BRIDGE = 0x40000 - IFF_BROADCAST = 0x2 - IFF_CANTCHANGE = 0x80c52 - IFF_CHECKSUM_OFFLOAD = 0x10000000 - IFF_D1 = 0x8000 - IFF_D2 = 0x4000 - IFF_D3 = 0x2000 - IFF_D4 = 0x1000 - IFF_DEBUG = 0x4 - IFF_DEVHEALTH = 0x4000 - IFF_DO_HW_LOOPBACK = 0x10000 - IFF_GROUP_ROUTING = 0x2000000 - IFF_IFBUFMGT = 0x800000 - IFF_LINK0 = 0x100000 - IFF_LINK1 = 0x200000 - IFF_LINK2 = 0x400000 - IFF_LOOPBACK = 0x8 - IFF_MULTICAST = 0x80000 - IFF_NOARP = 0x80 - IFF_NOECHO = 0x800 - IFF_NOTRAILERS = 0x20 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PROMISC = 0x100 - IFF_PSEG = 0x40000000 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_SNAP = 0x8000 - IFF_TCP_DISABLE_CKSUM = 0x20000000 - IFF_TCP_NOCKSUM = 0x1000000 - IFF_UP = 0x1 - IFF_VIPA = 0x80000000 - IFNAMSIZ = 0x10 - IFO_FLUSH = 0x1 - IFT_1822 = 0x2 - IFT_AAL5 = 0x31 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ATM = 0x25 - IFT_CEPT = 0x13 - IFT_CLUSTER = 0x3e - IFT_DS3 = 0x1e - IFT_EON = 0x19 - IFT_ETHER = 0x6 - IFT_FCS = 0x3a - IFT_FDDI = 0xf - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_GIFTUNNEL = 0x3c - IFT_HDH1822 = 0x3 - IFT_HF = 0x3d - IFT_HIPPI = 0x2f - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IB = 0xc7 - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88026 = 0xa - IFT_LAPB = 0x10 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_NSIP = 0x1b - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PPP = 0x17 - IFT_PROPMUX = 0x36 - IFT_PROPVIRTUAL = 0x35 - IFT_PTPSERIAL = 0x16 - IFT_RS232 = 0x21 - IFT_SDLC = 0x11 - IFT_SIP = 0x1f - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SN = 0x38 - IFT_SONET = 0x27 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_SP = 0x39 - IFT_STARLAN = 0xb - IFT_T1 = 0x12 - IFT_TUNNEL = 0x3b - IFT_ULTRA = 0x1d - IFT_V35 = 0x2d - IFT_VIPA = 0x37 - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x10000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LOOPBACKNET = 0x7f - IN_USE = 0x1 - IPPROTO_AH = 0x33 - IPPROTO_BIP = 0x53 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GIF = 0x8c - IPPROTO_GRE = 0x2f - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IGMP = 0x2 - IPPROTO_IP = 0x0 - IPPROTO_IPIP = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_LOCAL = 0x3f - IPPROTO_MAX = 0x100 - IPPROTO_MH = 0x87 - IPPROTO_NONE = 0x3b - IPPROTO_PUP = 0xc - IPPROTO_QOS = 0x2d - IPPROTO_RAW = 0xff - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_SCTP = 0x84 - IPPROTO_TCP = 0x6 - IPPROTO_TP = 0x1d - IPPROTO_UDP = 0x11 - IPV6_ADDRFORM = 0x16 - IPV6_ADDR_PREFERENCES = 0x4a - IPV6_ADD_MEMBERSHIP = 0xc - IPV6_AIXRAWSOCKET = 0x39 - IPV6_CHECKSUM = 0x27 - IPV6_DONTFRAG = 0x2d - IPV6_DROP_MEMBERSHIP = 0xd - IPV6_DSTOPTS = 0x36 - IPV6_FLOWINFO_FLOWLABEL = 0xffffff - IPV6_FLOWINFO_PRIFLOW = 0xfffffff - IPV6_FLOWINFO_PRIORITY = 0xf000000 - IPV6_FLOWINFO_SRFLAG = 0x10000000 - IPV6_FLOWINFO_VERSION = 0xf0000000 - IPV6_HOPLIMIT = 0x28 - IPV6_HOPOPTS = 0x34 - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MIPDSTOPTS = 0x36 - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_NOPROBE = 0x1c - IPV6_PATHMTU = 0x2e - IPV6_PKTINFO = 0x21 - IPV6_PKTOPTIONS = 0x24 - IPV6_PRIORITY_10 = 0xa000000 - IPV6_PRIORITY_11 = 0xb000000 - IPV6_PRIORITY_12 = 0xc000000 - IPV6_PRIORITY_13 = 0xd000000 - IPV6_PRIORITY_14 = 0xe000000 - IPV6_PRIORITY_15 = 0xf000000 - IPV6_PRIORITY_8 = 0x8000000 - IPV6_PRIORITY_9 = 0x9000000 - IPV6_PRIORITY_BULK = 0x4000000 - IPV6_PRIORITY_CONTROL = 0x7000000 - IPV6_PRIORITY_FILLER = 0x1000000 - IPV6_PRIORITY_INTERACTIVE = 0x6000000 - IPV6_PRIORITY_RESERVED1 = 0x3000000 - IPV6_PRIORITY_RESERVED2 = 0x5000000 - IPV6_PRIORITY_UNATTENDED = 0x2000000 - IPV6_PRIORITY_UNCHARACTERIZED = 0x0 - IPV6_RECVDSTOPTS = 0x38 - IPV6_RECVHOPLIMIT = 0x29 - IPV6_RECVHOPOPTS = 0x35 - IPV6_RECVHOPS = 0x22 - IPV6_RECVIF = 0x1e - IPV6_RECVPATHMTU = 0x2f - IPV6_RECVPKTINFO = 0x23 - IPV6_RECVRTHDR = 0x33 - IPV6_RECVSRCRT = 0x1d - IPV6_RECVTCLASS = 0x2a - IPV6_RTHDR = 0x32 - IPV6_RTHDRDSTOPTS = 0x37 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_RTHDR_TYPE_2 = 0x2 - IPV6_SENDIF = 0x1f - IPV6_SRFLAG_LOOSE = 0x0 - IPV6_SRFLAG_STRICT = 0x10000000 - IPV6_TCLASS = 0x2b - IPV6_TOKEN_LENGTH = 0x40 - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2c - IPV6_V6ONLY = 0x25 - IPV6_VERSION = 0x60000000 - IP_ADDRFORM = 0x16 - IP_ADD_MEMBERSHIP = 0xc - IP_ADD_SOURCE_MEMBERSHIP = 0x3c - IP_BLOCK_SOURCE = 0x3a - IP_BROADCAST_IF = 0x10 - IP_CACHE_LINE_SIZE = 0x80 - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DHCPMODE = 0x11 - IP_DONTFRAG = 0x19 - IP_DROP_MEMBERSHIP = 0xd - IP_DROP_SOURCE_MEMBERSHIP = 0x3d - IP_FINDPMTU = 0x1a - IP_HDRINCL = 0x2 - IP_INC_MEMBERSHIPS = 0x14 - IP_INIT_MEMBERSHIP = 0x14 - IP_MAXPACKET = 0xffff - IP_MF = 0x2000 - IP_MSS = 0x240 - IP_MULTICAST_HOPS = 0xa - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_OPT = 0x1b - IP_OPTIONS = 0x1 - IP_PMTUAGE = 0x1b - IP_RECVDSTADDR = 0x7 - IP_RECVIF = 0x14 - IP_RECVIFINFO = 0xf - IP_RECVINTERFACE = 0x20 - IP_RECVMACHDR = 0xe - IP_RECVOPTS = 0x5 - IP_RECVRETOPTS = 0x6 - IP_RECVTTL = 0x22 - IP_RETOPTS = 0x8 - IP_SOURCE_FILTER = 0x48 - IP_TOS = 0x3 - IP_TTL = 0x4 - IP_UNBLOCK_SOURCE = 0x3b - IP_UNICAST_HOPS = 0x4 - ISIG = 0x1 - ISTRIP = 0x20 - IUCLC = 0x800 - IXANY = 0x1000 - IXOFF = 0x400 - IXON = 0x200 - I_FLUSH = 0x20005305 - LNOFLSH = 0x8000 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_DONTNEED = 0x4 - MADV_NORMAL = 0x0 - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_SPACEAVAIL = 0x5 - MADV_WILLNEED = 0x3 - MAP_ANON = 0x10 - MAP_ANONYMOUS = 0x10 - MAP_FILE = 0x0 - MAP_FIXED = 0x100 - MAP_PRIVATE = 0x2 - MAP_SHARED = 0x1 - MAP_TYPE = 0xf0 - MAP_VARIABLE = 0x0 - MCAST_BLOCK_SOURCE = 0x40 - MCAST_EXCLUDE = 0x2 - MCAST_INCLUDE = 0x1 - MCAST_JOIN_GROUP = 0x3e - MCAST_JOIN_SOURCE_GROUP = 0x42 - MCAST_LEAVE_GROUP = 0x3f - MCAST_LEAVE_SOURCE_GROUP = 0x43 - MCAST_SOURCE_FILTER = 0x49 - MCAST_UNBLOCK_SOURCE = 0x41 - MCL_CURRENT = 0x100 - MCL_FUTURE = 0x200 - MSG_ANY = 0x4 - MSG_ARGEXT = 0x400 - MSG_BAND = 0x2 - MSG_COMPAT = 0x8000 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_EOR = 0x8 - MSG_HIPRI = 0x1 - MSG_MAXIOVLEN = 0x10 - MSG_MPEG2 = 0x80 - MSG_NONBLOCK = 0x4000 - MSG_NOSIGNAL = 0x100 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 - MSG_WAITFORONE = 0x200 - MS_ASYNC = 0x10 - MS_EINTR = 0x80 - MS_INVALIDATE = 0x40 - MS_PER_SEC = 0x3e8 - MS_SYNC = 0x20 - NFDBITS = 0x20 - NL0 = 0x0 - NL1 = 0x4000 - NL2 = 0x8000 - NL3 = 0xc000 - NLDLY = 0x4000 - NOFLSH = 0x80 - NOFLUSH = 0x80000000 - OCRNL = 0x8 - OFDEL = 0x80 - OFILL = 0x40 - OLCUC = 0x2 - ONLCR = 0x4 - ONLRET = 0x20 - ONOCR = 0x10 - ONOEOT = 0x80000 - OPOST = 0x1 - OXTABS = 0x40000 - O_ACCMODE = 0x23 - O_APPEND = 0x8 - O_CIO = 0x80 - O_CIOR = 0x800000000 - O_CLOEXEC = 0x800000 - O_CREAT = 0x100 - O_DEFER = 0x2000 - O_DELAY = 0x4000 - O_DIRECT = 0x8000000 - O_DIRECTORY = 0x80000 - O_DSYNC = 0x400000 - O_EFSOFF = 0x400000000 - O_EFSON = 0x200000000 - O_EXCL = 0x400 - O_EXEC = 0x20 - O_LARGEFILE = 0x4000000 - O_NDELAY = 0x8000 - O_NOCACHE = 0x100000 - O_NOCTTY = 0x800 - O_NOFOLLOW = 0x1000000 - O_NONBLOCK = 0x4 - O_NONE = 0x3 - O_NSHARE = 0x10000 - O_RAW = 0x100000000 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_RSHARE = 0x1000 - O_RSYNC = 0x200000 - O_SEARCH = 0x20 - O_SNAPSHOT = 0x40 - O_SYNC = 0x10 - O_TRUNC = 0x200 - O_TTY_INIT = 0x0 - O_WRONLY = 0x1 - PARENB = 0x100 - PAREXT = 0x100000 - PARMRK = 0x8 - PARODD = 0x200 - PENDIN = 0x20000000 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - PR_64BIT = 0x20 - PR_ADDR = 0x2 - PR_ARGEXT = 0x400 - PR_ATOMIC = 0x1 - PR_CONNREQUIRED = 0x4 - PR_FASTHZ = 0x5 - PR_INP = 0x40 - PR_INTRLEVEL = 0x8000 - PR_MLS = 0x100 - PR_MLS_1_LABEL = 0x200 - PR_NOEOR = 0x4000 - PR_RIGHTS = 0x10 - PR_SLOWHZ = 0x2 - PR_WANTRCVD = 0x8 - RLIMIT_AS = 0x6 - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_NOFILE = 0x7 - RLIMIT_NPROC = 0x9 - RLIMIT_RSS = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffff - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_MAX = 0x8 - RTAX_NETMASK = 0x2 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DOWNSTREAM = 0x100 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_NETMASK = 0x4 - RTC_IA64 = 0x3 - RTC_POWER = 0x1 - RTC_POWER_PC = 0x2 - RTF_ACTIVE_DGD = 0x1000000 - RTF_BCE = 0x80000 - RTF_BLACKHOLE = 0x1000 - RTF_BROADCAST = 0x400000 - RTF_BUL = 0x2000 - RTF_CLONE = 0x10000 - RTF_CLONED = 0x20000 - RTF_CLONING = 0x100 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_FREE_IN_PROG = 0x4000000 - RTF_GATEWAY = 0x2 - RTF_HOST = 0x4 - RTF_LLINFO = 0x400 - RTF_LOCAL = 0x200000 - RTF_MASK = 0x80 - RTF_MODIFIED = 0x20 - RTF_MULTICAST = 0x800000 - RTF_PERMANENT6 = 0x8000000 - RTF_PINNED = 0x100000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_PROTO3 = 0x40000 - RTF_REJECT = 0x8 - RTF_SMALLMTU = 0x40000 - RTF_STATIC = 0x800 - RTF_STOPSRCH = 0x2000000 - RTF_UNREACHABLE = 0x10000000 - RTF_UP = 0x1 - RTF_XRESOLVE = 0x200 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_EXPIRE = 0xf - RTM_GET = 0x4 - RTM_GETNEXT = 0x11 - RTM_IFINFO = 0xe - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_OLDADD = 0x9 - RTM_OLDDEL = 0xa - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTLOST = 0x10 - RTM_RTTUNIT = 0xf4240 - RTM_SAMEADDR = 0x12 - RTM_SET = 0x13 - RTM_VERSION = 0x2 - RTM_VERSION_GR = 0x4 - RTM_VERSION_GR_COMPAT = 0x3 - RTM_VERSION_POLICY = 0x5 - RTM_VERSION_POLICY_EXT = 0x6 - RTM_VERSION_POLICY_PRFN = 0x7 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - RUSAGE_THREAD = 0x1 - SCM_RIGHTS = 0x1 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIGMAX64 = 0xff - SIGQUEUE_MAX = 0x20 - SIOCADDIFVIPA = 0x20006942 - SIOCADDMTU = -0x7ffb9690 - SIOCADDMULTI = -0x7fdf96cf - SIOCADDNETID = -0x7fd796a9 - SIOCADDRT = -0x7fcf8df6 - SIOCAIFADDR = -0x7fbf96e6 - SIOCATMARK = 0x40047307 - SIOCDARP = -0x7fb396e0 - SIOCDELIFVIPA = 0x20006943 - SIOCDELMTU = -0x7ffb968f - SIOCDELMULTI = -0x7fdf96ce - SIOCDELPMTU = -0x7fd78ff6 - SIOCDELRT = -0x7fcf8df5 - SIOCDIFADDR = -0x7fd796e7 - SIOCDNETOPT = -0x3ffe9680 - SIOCDX25XLATE = -0x7fd7969b - SIOCFIFADDR = -0x7fdf966d - SIOCGARP = -0x3fb396da - SIOCGETMTUS = 0x2000696f - SIOCGETSGCNT = -0x3feb8acc - SIOCGETVIFCNT = -0x3feb8acd - SIOCGHIWAT = 0x40047301 - SIOCGIFADDR = -0x3fd796df - SIOCGIFADDRS = 0x2000698c - SIOCGIFBAUDRATE = -0x3fdf9669 - SIOCGIFBRDADDR = -0x3fd796dd - SIOCGIFCONF = -0x3ff796bb - SIOCGIFCONFGLOB = -0x3ff79670 - SIOCGIFDSTADDR = -0x3fd796de - SIOCGIFFLAGS = -0x3fd796ef - SIOCGIFGIDLIST = 0x20006968 - SIOCGIFHWADDR = -0x3fab966b - SIOCGIFMETRIC = -0x3fd796e9 - SIOCGIFMTU = -0x3fd796aa - SIOCGIFNETMASK = -0x3fd796db - SIOCGIFOPTIONS = -0x3fd796d6 - SIOCGISNO = -0x3fd79695 - SIOCGLOADF = -0x3ffb967e - SIOCGLOWAT = 0x40047303 - SIOCGNETOPT = -0x3ffe96a5 - SIOCGNETOPT1 = -0x3fdf967f - SIOCGNMTUS = 0x2000696e - SIOCGPGRP = 0x40047309 - SIOCGSIZIFCONF = 0x4004696a - SIOCGSRCFILTER = -0x3fe796cb - SIOCGTUNEPHASE = -0x3ffb9676 - SIOCGX25XLATE = -0x3fd7969c - SIOCIFATTACH = -0x7fdf9699 - SIOCIFDETACH = -0x7fdf969a - SIOCIFGETPKEY = -0x7fdf969b - SIOCIF_ATM_DARP = -0x7fdf9683 - SIOCIF_ATM_DUMPARP = -0x7fdf9685 - SIOCIF_ATM_GARP = -0x7fdf9682 - SIOCIF_ATM_IDLE = -0x7fdf9686 - SIOCIF_ATM_SARP = -0x7fdf9681 - SIOCIF_ATM_SNMPARP = -0x7fdf9687 - SIOCIF_ATM_SVC = -0x7fdf9684 - SIOCIF_ATM_UBR = -0x7fdf9688 - SIOCIF_DEVHEALTH = -0x7ffb966c - SIOCIF_IB_ARP_INCOMP = -0x7fdf9677 - SIOCIF_IB_ARP_TIMER = -0x7fdf9678 - SIOCIF_IB_CLEAR_PINFO = -0x3fdf966f - SIOCIF_IB_DEL_ARP = -0x7fdf967f - SIOCIF_IB_DEL_PINFO = -0x3fdf9670 - SIOCIF_IB_DUMP_ARP = -0x7fdf9680 - SIOCIF_IB_GET_ARP = -0x7fdf967e - SIOCIF_IB_GET_INFO = -0x3f879675 - SIOCIF_IB_GET_STATS = -0x3f879672 - SIOCIF_IB_NOTIFY_ADDR_REM = -0x3f87966a - SIOCIF_IB_RESET_STATS = -0x3f879671 - SIOCIF_IB_RESIZE_CQ = -0x7fdf9679 - SIOCIF_IB_SET_ARP = -0x7fdf967d - SIOCIF_IB_SET_PKEY = -0x7fdf967c - SIOCIF_IB_SET_PORT = -0x7fdf967b - SIOCIF_IB_SET_QKEY = -0x7fdf9676 - SIOCIF_IB_SET_QSIZE = -0x7fdf967a - SIOCLISTIFVIPA = 0x20006944 - SIOCSARP = -0x7fb396e2 - SIOCSHIWAT = 0x80047300 - SIOCSIFADDR = -0x7fd796f4 - SIOCSIFADDRORI = -0x7fdb9673 - SIOCSIFBRDADDR = -0x7fd796ed - SIOCSIFDSTADDR = -0x7fd796f2 - SIOCSIFFLAGS = -0x7fd796f0 - SIOCSIFGIDLIST = 0x20006969 - SIOCSIFMETRIC = -0x7fd796e8 - SIOCSIFMTU = -0x7fd796a8 - SIOCSIFNETDUMP = -0x7fd796e4 - SIOCSIFNETMASK = -0x7fd796ea - SIOCSIFOPTIONS = -0x7fd796d7 - SIOCSIFSUBCHAN = -0x7fd796e5 - SIOCSISNO = -0x7fd79694 - SIOCSLOADF = -0x3ffb967d - SIOCSLOWAT = 0x80047302 - SIOCSNETOPT = -0x7ffe96a6 - SIOCSPGRP = 0x80047308 - SIOCSX25XLATE = -0x7fd7969d - SOCK_CONN_DGRAM = 0x6 - SOCK_DGRAM = 0x2 - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x400 - SO_ACCEPTCONN = 0x2 - SO_AUDIT = 0x8000 - SO_BROADCAST = 0x20 - SO_CKSUMRECV = 0x800 - SO_DEBUG = 0x1 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_KERNACCEPT = 0x2000 - SO_LINGER = 0x80 - SO_NOMULTIPATH = 0x4000 - SO_NOREUSEADDR = 0x1000 - SO_OOBINLINE = 0x100 - SO_PEERID = 0x1009 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_TIMESTAMPNS = 0x100a - SO_TYPE = 0x1008 - SO_USELOOPBACK = 0x40 - SO_USE_IFBUFS = 0x400 - S_BANDURG = 0x400 - S_EMODFMT = 0x3c000000 - S_ENFMT = 0x400 - S_ERROR = 0x100 - S_HANGUP = 0x200 - S_HIPRI = 0x2 - S_ICRYPTO = 0x80000 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFJOURNAL = 0x10000 - S_IFLNK = 0xa000 - S_IFMPX = 0x2200 - S_IFMT = 0xf000 - S_IFPDIR = 0x4000000 - S_IFPSDIR = 0x8000000 - S_IFPSSDIR = 0xc000000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IFSYSEA = 0x30000000 - S_INPUT = 0x1 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_ITCB = 0x1000000 - S_ITP = 0x800000 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXACL = 0x2000000 - S_IXATTR = 0x40000 - S_IXGRP = 0x8 - S_IXINTERFACE = 0x100000 - S_IXMOD = 0x40000000 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - S_MSG = 0x8 - S_OUTPUT = 0x4 - S_RDBAND = 0x20 - S_RDNORM = 0x10 - S_RESERVED1 = 0x20000 - S_RESERVED2 = 0x200000 - S_RESERVED3 = 0x400000 - S_RESERVED4 = 0x80000000 - S_RESFMT1 = 0x10000000 - S_RESFMT10 = 0x34000000 - S_RESFMT11 = 0x38000000 - S_RESFMT12 = 0x3c000000 - S_RESFMT2 = 0x14000000 - S_RESFMT3 = 0x18000000 - S_RESFMT4 = 0x1c000000 - S_RESFMT5 = 0x20000000 - S_RESFMT6 = 0x24000000 - S_RESFMT7 = 0x28000000 - S_RESFMT8 = 0x2c000000 - S_WRBAND = 0x80 - S_WRNORM = 0x40 - TAB0 = 0x0 - TAB1 = 0x400 - TAB2 = 0x800 - TAB3 = 0xc00 - TABDLY = 0xc00 - TCFLSH = 0x540c - TCGETA = 0x5405 - TCGETS = 0x5401 - TCIFLUSH = 0x0 - TCIOFF = 0x2 - TCIOFLUSH = 0x2 - TCION = 0x3 - TCOFLUSH = 0x1 - TCOOFF = 0x0 - TCOON = 0x1 - TCP_24DAYS_WORTH_OF_SLOWTICKS = 0x3f4800 - TCP_ACLADD = 0x23 - TCP_ACLBIND = 0x26 - TCP_ACLCLEAR = 0x22 - TCP_ACLDEL = 0x24 - TCP_ACLDENY = 0x8 - TCP_ACLFLUSH = 0x21 - TCP_ACLGID = 0x1 - TCP_ACLLS = 0x25 - TCP_ACLSUBNET = 0x4 - TCP_ACLUID = 0x2 - TCP_CWND_DF = 0x16 - TCP_CWND_IF = 0x15 - TCP_DELAY_ACK_FIN = 0x2 - TCP_DELAY_ACK_SYN = 0x1 - TCP_FASTNAME = 0x101080a - TCP_KEEPCNT = 0x13 - TCP_KEEPIDLE = 0x11 - TCP_KEEPINTVL = 0x12 - TCP_LSPRIV = 0x29 - TCP_LUID = 0x20 - TCP_MAXBURST = 0x8 - TCP_MAXDF = 0x64 - TCP_MAXIF = 0x64 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAXWINDOWSCALE = 0xe - TCP_MAX_SACK = 0x4 - TCP_MSS = 0x5b4 - TCP_NODELAY = 0x1 - TCP_NODELAYACK = 0x14 - TCP_NOREDUCE_CWND_EXIT_FRXMT = 0x19 - TCP_NOREDUCE_CWND_IN_FRXMT = 0x18 - TCP_NOTENTER_SSTART = 0x17 - TCP_OPT = 0x19 - TCP_RFC1323 = 0x4 - TCP_SETPRIV = 0x27 - TCP_STDURG = 0x10 - TCP_TIMESTAMP_OPTLEN = 0xc - TCP_UNSETPRIV = 0x28 - TCSAFLUSH = 0x2 - TCSBRK = 0x5409 - TCSETA = 0x5406 - TCSETAF = 0x5408 - TCSETAW = 0x5407 - TCSETS = 0x5402 - TCSETSF = 0x5404 - TCSETSW = 0x5403 - TCXONC = 0x540b - TIMER_ABSTIME = 0x3e7 - TIMER_MAX = 0x20 - TIOC = 0x5400 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCONS = 0x80047462 - TIOCEXCL = 0x2000740d - TIOCFLUSH = 0x80047410 - TIOCGETC = 0x40067412 - TIOCGETD = 0x40047400 - TIOCGETP = 0x40067408 - TIOCGLTC = 0x40067474 - TIOCGPGRP = 0x40047477 - TIOCGSID = 0x40047448 - TIOCGSIZE = 0x40087468 - TIOCGWINSZ = 0x40087468 - TIOCHPCL = 0x20007402 - TIOCLBIC = 0x8004747e - TIOCLBIS = 0x8004747f - TIOCLGET = 0x4004747c - TIOCLSET = 0x8004747d - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGET = 0x4004746a - TIOCMIWAIT = 0x80047464 - TIOCMODG = 0x40047403 - TIOCMODS = 0x80047404 - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCREMOTE = 0x80047469 - TIOCSBRK = 0x2000747b - TIOCSDTR = 0x20007479 - TIOCSETC = 0x80067411 - TIOCSETD = 0x80047401 - TIOCSETN = 0x8006740a - TIOCSETP = 0x80067409 - TIOCSLTC = 0x80067475 - TIOCSPGRP = 0x80047476 - TIOCSSIZE = 0x80087467 - TIOCSTART = 0x2000746e - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCUCNTL = 0x80047466 - TOSTOP = 0x10000 - UTIME_NOW = -0x2 - UTIME_OMIT = -0x3 - VDISCRD = 0xc - VDSUSP = 0xa - VEOF = 0x4 - VEOL = 0x5 - VEOL2 = 0x6 - VERASE = 0x2 - VINTR = 0x0 - VKILL = 0x3 - VLNEXT = 0xe - VMIN = 0x4 - VQUIT = 0x1 - VREPRINT = 0xb - VSTART = 0x7 - VSTOP = 0x8 - VSTRT = 0x7 - VSUSP = 0x9 - VT0 = 0x0 - VT1 = 0x8000 - VTDELAY = 0x2000 - VTDLY = 0x8000 - VTIME = 0x5 - VWERSE = 0xd - WPARSTART = 0x1 - WPARSTOP = 0x2 - WPARTTYNAME = "Global" - XCASE = 0x4 - XTABS = 0xc00 - _FDATAFLUSH = 0x2000000000 -) - -// Errors -const ( - E2BIG = syscall.Errno(0x7) - EACCES = syscall.Errno(0xd) - EADDRINUSE = syscall.Errno(0x43) - EADDRNOTAVAIL = syscall.Errno(0x44) - EAFNOSUPPORT = syscall.Errno(0x42) - EAGAIN = syscall.Errno(0xb) - EALREADY = syscall.Errno(0x38) - EBADF = syscall.Errno(0x9) - EBADMSG = syscall.Errno(0x78) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x75) - ECHILD = syscall.Errno(0xa) - ECHRNG = syscall.Errno(0x25) - ECLONEME = syscall.Errno(0x52) - ECONNABORTED = syscall.Errno(0x48) - ECONNREFUSED = syscall.Errno(0x4f) - ECONNRESET = syscall.Errno(0x49) - ECORRUPT = syscall.Errno(0x59) - EDEADLK = syscall.Errno(0x2d) - EDESTADDREQ = syscall.Errno(0x3a) - EDESTADDRREQ = syscall.Errno(0x3a) - EDIST = syscall.Errno(0x35) - EDOM = syscall.Errno(0x21) - EDQUOT = syscall.Errno(0x58) - EEXIST = syscall.Errno(0x11) - EFAULT = syscall.Errno(0xe) - EFBIG = syscall.Errno(0x1b) - EFORMAT = syscall.Errno(0x30) - EHOSTDOWN = syscall.Errno(0x50) - EHOSTUNREACH = syscall.Errno(0x51) - EIDRM = syscall.Errno(0x24) - EILSEQ = syscall.Errno(0x74) - EINPROGRESS = syscall.Errno(0x37) - EINTR = syscall.Errno(0x4) - EINVAL = syscall.Errno(0x16) - EIO = syscall.Errno(0x5) - EISCONN = syscall.Errno(0x4b) - EISDIR = syscall.Errno(0x15) - EL2HLT = syscall.Errno(0x2c) - EL2NSYNC = syscall.Errno(0x26) - EL3HLT = syscall.Errno(0x27) - EL3RST = syscall.Errno(0x28) - ELNRNG = syscall.Errno(0x29) - ELOOP = syscall.Errno(0x55) - EMEDIA = syscall.Errno(0x6e) - EMFILE = syscall.Errno(0x18) - EMLINK = syscall.Errno(0x1f) - EMSGSIZE = syscall.Errno(0x3b) - EMULTIHOP = syscall.Errno(0x7d) - ENAMETOOLONG = syscall.Errno(0x56) - ENETDOWN = syscall.Errno(0x45) - ENETRESET = syscall.Errno(0x47) - ENETUNREACH = syscall.Errno(0x46) - ENFILE = syscall.Errno(0x17) - ENOATTR = syscall.Errno(0x70) - ENOBUFS = syscall.Errno(0x4a) - ENOCONNECT = syscall.Errno(0x32) - ENOCSI = syscall.Errno(0x2b) - ENODATA = syscall.Errno(0x7a) - ENODEV = syscall.Errno(0x13) - ENOENT = syscall.Errno(0x2) - ENOEXEC = syscall.Errno(0x8) - ENOLCK = syscall.Errno(0x31) - ENOLINK = syscall.Errno(0x7e) - ENOMEM = syscall.Errno(0xc) - ENOMSG = syscall.Errno(0x23) - ENOPROTOOPT = syscall.Errno(0x3d) - ENOSPC = syscall.Errno(0x1c) - ENOSR = syscall.Errno(0x76) - ENOSTR = syscall.Errno(0x7b) - ENOSYS = syscall.Errno(0x6d) - ENOTBLK = syscall.Errno(0xf) - ENOTCONN = syscall.Errno(0x4c) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x11) - ENOTREADY = syscall.Errno(0x2e) - ENOTRECOVERABLE = syscall.Errno(0x5e) - ENOTRUST = syscall.Errno(0x72) - ENOTSOCK = syscall.Errno(0x39) - ENOTSUP = syscall.Errno(0x7c) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x40) - EOVERFLOW = syscall.Errno(0x7f) - EOWNERDEAD = syscall.Errno(0x5f) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x41) - EPIPE = syscall.Errno(0x20) - EPROCLIM = syscall.Errno(0x53) - EPROTO = syscall.Errno(0x79) - EPROTONOSUPPORT = syscall.Errno(0x3e) - EPROTOTYPE = syscall.Errno(0x3c) - ERANGE = syscall.Errno(0x22) - EREMOTE = syscall.Errno(0x5d) - ERESTART = syscall.Errno(0x52) - EROFS = syscall.Errno(0x1e) - ESAD = syscall.Errno(0x71) - ESHUTDOWN = syscall.Errno(0x4d) - ESOCKTNOSUPPORT = syscall.Errno(0x3f) - ESOFT = syscall.Errno(0x6f) - ESPIPE = syscall.Errno(0x1d) - ESRCH = syscall.Errno(0x3) - ESTALE = syscall.Errno(0x34) - ESYSERROR = syscall.Errno(0x5a) - ETIME = syscall.Errno(0x77) - ETIMEDOUT = syscall.Errno(0x4e) - ETOOMANYREFS = syscall.Errno(0x73) - ETXTBSY = syscall.Errno(0x1a) - EUNATCH = syscall.Errno(0x2a) - EUSERS = syscall.Errno(0x54) - EWOULDBLOCK = syscall.Errno(0xb) - EWRPROTECT = syscall.Errno(0x2f) - EXDEV = syscall.Errno(0x12) -) - -// Signals -const ( - SIGABRT = syscall.Signal(0x6) - SIGAIO = syscall.Signal(0x17) - SIGALRM = syscall.Signal(0xe) - SIGALRM1 = syscall.Signal(0x26) - SIGBUS = syscall.Signal(0xa) - SIGCAPI = syscall.Signal(0x31) - SIGCHLD = syscall.Signal(0x14) - SIGCLD = syscall.Signal(0x14) - SIGCONT = syscall.Signal(0x13) - SIGCPUFAIL = syscall.Signal(0x3b) - SIGDANGER = syscall.Signal(0x21) - SIGEMT = syscall.Signal(0x7) - SIGFPE = syscall.Signal(0x8) - SIGGRANT = syscall.Signal(0x3c) - SIGHUP = syscall.Signal(0x1) - SIGILL = syscall.Signal(0x4) - SIGINT = syscall.Signal(0x2) - SIGIO = syscall.Signal(0x17) - SIGIOINT = syscall.Signal(0x10) - SIGIOT = syscall.Signal(0x6) - SIGKAP = syscall.Signal(0x3c) - SIGKILL = syscall.Signal(0x9) - SIGLOST = syscall.Signal(0x6) - SIGMAX = syscall.Signal(0x3f) - SIGMAX32 = syscall.Signal(0x3f) - SIGMIGRATE = syscall.Signal(0x23) - SIGMSG = syscall.Signal(0x1b) - SIGPIPE = syscall.Signal(0xd) - SIGPOLL = syscall.Signal(0x17) - SIGPRE = syscall.Signal(0x24) - SIGPROF = syscall.Signal(0x20) - SIGPTY = syscall.Signal(0x17) - SIGPWR = syscall.Signal(0x1d) - SIGQUIT = syscall.Signal(0x3) - SIGRECONFIG = syscall.Signal(0x3a) - SIGRETRACT = syscall.Signal(0x3d) - SIGSAK = syscall.Signal(0x3f) - SIGSEGV = syscall.Signal(0xb) - SIGSOUND = syscall.Signal(0x3e) - SIGSTOP = syscall.Signal(0x11) - SIGSYS = syscall.Signal(0xc) - SIGSYSERROR = syscall.Signal(0x30) - SIGTALRM = syscall.Signal(0x26) - SIGTERM = syscall.Signal(0xf) - SIGTRAP = syscall.Signal(0x5) - SIGTSTP = syscall.Signal(0x12) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x10) - SIGUSR1 = syscall.Signal(0x1e) - SIGUSR2 = syscall.Signal(0x1f) - SIGVIRT = syscall.Signal(0x25) - SIGVTALRM = syscall.Signal(0x22) - SIGWAITING = syscall.Signal(0x27) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "not owner"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "I/O error"}, - {6, "ENXIO", "no such device or address"}, - {7, "E2BIG", "arg list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file number"}, - {10, "ECHILD", "no child processes"}, - {11, "EWOULDBLOCK", "resource temporarily unavailable"}, - {12, "ENOMEM", "not enough space"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device busy"}, - {17, "ENOTEMPTY", "file exists"}, - {18, "EXDEV", "cross-device link"}, - {19, "ENODEV", "no such device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "file table overflow"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "not a typewriter"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "argument out of domain"}, - {34, "ERANGE", "result too large"}, - {35, "ENOMSG", "no message of desired type"}, - {36, "EIDRM", "identifier removed"}, - {37, "ECHRNG", "channel number out of range"}, - {38, "EL2NSYNC", "level 2 not synchronized"}, - {39, "EL3HLT", "level 3 halted"}, - {40, "EL3RST", "level 3 reset"}, - {41, "ELNRNG", "link number out of range"}, - {42, "EUNATCH", "protocol driver not attached"}, - {43, "ENOCSI", "no CSI structure available"}, - {44, "EL2HLT", "level 2 halted"}, - {45, "EDEADLK", "deadlock condition if locked"}, - {46, "ENOTREADY", "device not ready"}, - {47, "EWRPROTECT", "write-protected media"}, - {48, "EFORMAT", "unformatted or incompatible media"}, - {49, "ENOLCK", "no locks available"}, - {50, "ENOCONNECT", "cannot Establish Connection"}, - {52, "ESTALE", "missing file or filesystem"}, - {53, "EDIST", "requests blocked by Administrator"}, - {55, "EINPROGRESS", "operation now in progress"}, - {56, "EALREADY", "operation already in progress"}, - {57, "ENOTSOCK", "socket operation on non-socket"}, - {58, "EDESTADDREQ", "destination address required"}, - {59, "EMSGSIZE", "message too long"}, - {60, "EPROTOTYPE", "protocol wrong type for socket"}, - {61, "ENOPROTOOPT", "protocol not available"}, - {62, "EPROTONOSUPPORT", "protocol not supported"}, - {63, "ESOCKTNOSUPPORT", "socket type not supported"}, - {64, "EOPNOTSUPP", "operation not supported on socket"}, - {65, "EPFNOSUPPORT", "protocol family not supported"}, - {66, "EAFNOSUPPORT", "addr family not supported by protocol"}, - {67, "EADDRINUSE", "address already in use"}, - {68, "EADDRNOTAVAIL", "can't assign requested address"}, - {69, "ENETDOWN", "network is down"}, - {70, "ENETUNREACH", "network is unreachable"}, - {71, "ENETRESET", "network dropped connection on reset"}, - {72, "ECONNABORTED", "software caused connection abort"}, - {73, "ECONNRESET", "connection reset by peer"}, - {74, "ENOBUFS", "no buffer space available"}, - {75, "EISCONN", "socket is already connected"}, - {76, "ENOTCONN", "socket is not connected"}, - {77, "ESHUTDOWN", "can't send after socket shutdown"}, - {78, "ETIMEDOUT", "connection timed out"}, - {79, "ECONNREFUSED", "connection refused"}, - {80, "EHOSTDOWN", "host is down"}, - {81, "EHOSTUNREACH", "no route to host"}, - {82, "ERESTART", "restart the system call"}, - {83, "EPROCLIM", "too many processes"}, - {84, "EUSERS", "too many users"}, - {85, "ELOOP", "too many levels of symbolic links"}, - {86, "ENAMETOOLONG", "file name too long"}, - {88, "EDQUOT", "disk quota exceeded"}, - {89, "ECORRUPT", "invalid file system control data detected"}, - {90, "ESYSERROR", "for future use "}, - {93, "EREMOTE", "item is not local to host"}, - {94, "ENOTRECOVERABLE", "state not recoverable "}, - {95, "EOWNERDEAD", "previous owner died "}, - {109, "ENOSYS", "function not implemented"}, - {110, "EMEDIA", "media surface error"}, - {111, "ESOFT", "I/O completed, but needs relocation"}, - {112, "ENOATTR", "no attribute found"}, - {113, "ESAD", "security Authentication Denied"}, - {114, "ENOTRUST", "not a Trusted Program"}, - {115, "ETOOMANYREFS", "too many references: can't splice"}, - {116, "EILSEQ", "invalid wide character"}, - {117, "ECANCELED", "asynchronous I/O cancelled"}, - {118, "ENOSR", "out of STREAMS resources"}, - {119, "ETIME", "system call timed out"}, - {120, "EBADMSG", "next message has wrong type"}, - {121, "EPROTO", "error in protocol"}, - {122, "ENODATA", "no message on stream head read q"}, - {123, "ENOSTR", "fd not associated with a stream"}, - {124, "ENOTSUP", "unsupported attribute value"}, - {125, "EMULTIHOP", "multihop is not allowed"}, - {126, "ENOLINK", "the server link has been severed"}, - {127, "EOVERFLOW", "value too large to be stored in data type"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, - {6, "SIGIOT", "IOT/Abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGURG", "urgent I/O condition"}, - {17, "SIGSTOP", "stopped (signal)"}, - {18, "SIGTSTP", "stopped"}, - {19, "SIGCONT", "continued"}, - {20, "SIGCHLD", "child exited"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGIO", "I/O possible/complete"}, - {24, "SIGXCPU", "cputime limit exceeded"}, - {25, "SIGXFSZ", "filesize limit exceeded"}, - {27, "SIGMSG", "input device data"}, - {28, "SIGWINCH", "window size changes"}, - {29, "SIGPWR", "power-failure"}, - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, - {32, "SIGPROF", "profiling timer expired"}, - {33, "SIGDANGER", "paging space low"}, - {34, "SIGVTALRM", "virtual timer expired"}, - {35, "SIGMIGRATE", "signal 35"}, - {36, "SIGPRE", "signal 36"}, - {37, "SIGVIRT", "signal 37"}, - {38, "SIGTALRM", "signal 38"}, - {39, "SIGWAITING", "signal 39"}, - {48, "SIGSYSERROR", "signal 48"}, - {49, "SIGCAPI", "signal 49"}, - {58, "SIGRECONFIG", "signal 58"}, - {59, "SIGCPUFAIL", "CPU Failure Predicted"}, - {60, "SIGKAP", "monitor mode granted"}, - {61, "SIGRETRACT", "monitor mode retracted"}, - {62, "SIGSOUND", "sound completed"}, - {63, "SIGSAK", "secure attention"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go deleted file mode 100644 index 200c8c2..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go +++ /dev/null @@ -1,1386 +0,0 @@ -// mkerrors.sh -maix64 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build ppc64 && aix -// +build ppc64,aix - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -maix64 _const.go - -package unix - -import "syscall" - -const ( - AF_APPLETALK = 0x10 - AF_BYPASS = 0x19 - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_ECMA = 0x8 - AF_HYLINK = 0xf - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x18 - AF_INTF = 0x14 - AF_ISO = 0x7 - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x1e - AF_NDD = 0x17 - AF_NETWARE = 0x16 - AF_NS = 0x6 - AF_OSI = 0x7 - AF_PUP = 0x4 - AF_RIF = 0x15 - AF_ROUTE = 0x11 - AF_SNA = 0xb - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - ALTWERASE = 0x400000 - ARPHRD_802_3 = 0x6 - ARPHRD_802_5 = 0x6 - ARPHRD_ETHER = 0x1 - ARPHRD_FDDI = 0x1 - B0 = 0x0 - B110 = 0x3 - B1200 = 0x9 - B134 = 0x4 - B150 = 0x5 - B1800 = 0xa - B19200 = 0xe - B200 = 0x6 - B2400 = 0xb - B300 = 0x7 - B38400 = 0xf - B4800 = 0xc - B50 = 0x1 - B600 = 0x8 - B75 = 0x2 - B9600 = 0xd - BRKINT = 0x2 - BS0 = 0x0 - BS1 = 0x1000 - BSDLY = 0x1000 - CAP_AACCT = 0x6 - CAP_ARM_APPLICATION = 0x5 - CAP_BYPASS_RAC_VMM = 0x3 - CAP_CLEAR = 0x0 - CAP_CREDENTIALS = 0x7 - CAP_EFFECTIVE = 0x1 - CAP_EWLM_AGENT = 0x4 - CAP_INHERITABLE = 0x2 - CAP_MAXIMUM = 0x7 - CAP_NUMA_ATTACH = 0x2 - CAP_PERMITTED = 0x3 - CAP_PROPAGATE = 0x1 - CAP_PROPOGATE = 0x1 - CAP_SET = 0x1 - CBAUD = 0xf - CFLUSH = 0xf - CIBAUD = 0xf0000 - CLOCAL = 0x800 - CLOCK_MONOTONIC = 0xa - CLOCK_PROCESS_CPUTIME_ID = 0xb - CLOCK_REALTIME = 0x9 - CLOCK_THREAD_CPUTIME_ID = 0xc - CR0 = 0x0 - CR1 = 0x100 - CR2 = 0x200 - CR3 = 0x300 - CRDLY = 0x300 - CREAD = 0x80 - CS5 = 0x0 - CS6 = 0x10 - CS7 = 0x20 - CS8 = 0x30 - CSIOCGIFCONF = -0x3fef96dc - CSIZE = 0x30 - CSMAP_DIR = "/usr/lib/nls/csmap/" - CSTART = '\021' - CSTOP = '\023' - CSTOPB = 0x40 - CSUSP = 0x1a - ECHO = 0x8 - ECHOCTL = 0x20000 - ECHOE = 0x10 - ECHOK = 0x20 - ECHOKE = 0x80000 - ECHONL = 0x40 - ECHOPRT = 0x40000 - ECH_ICMPID = 0x2 - ETHERNET_CSMACD = 0x6 - EVENP = 0x80 - EXCONTINUE = 0x0 - EXDLOK = 0x3 - EXIO = 0x2 - EXPGIO = 0x0 - EXRESUME = 0x2 - EXRETURN = 0x1 - EXSIG = 0x4 - EXTA = 0xe - EXTB = 0xf - EXTRAP = 0x1 - EYEC_RTENTRYA = 0x257274656e747241 - EYEC_RTENTRYF = 0x257274656e747246 - E_ACC = 0x0 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0xfffe - FF0 = 0x0 - FF1 = 0x2000 - FFDLY = 0x2000 - FLUSHBAND = 0x40 - FLUSHLOW = 0x8 - FLUSHO = 0x100000 - FLUSHR = 0x1 - FLUSHRW = 0x3 - FLUSHW = 0x2 - F_CLOSEM = 0xa - F_DUP2FD = 0xe - F_DUPFD = 0x0 - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0xb - F_GETLK64 = 0xb - F_GETOWN = 0x8 - F_LOCK = 0x1 - F_OK = 0x0 - F_RDLCK = 0x1 - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0xc - F_SETLK64 = 0xc - F_SETLKW = 0xd - F_SETLKW64 = 0xd - F_SETOWN = 0x9 - F_TEST = 0x3 - F_TLOCK = 0x2 - F_TSTLK = 0xf - F_ULOCK = 0x0 - F_UNLCK = 0x3 - F_WRLCK = 0x2 - HUPCL = 0x400 - IBSHIFT = 0x10 - ICANON = 0x2 - ICMP6_FILTER = 0x26 - ICMP6_SEC_SEND_DEL = 0x46 - ICMP6_SEC_SEND_GET = 0x47 - ICMP6_SEC_SEND_SET = 0x44 - ICMP6_SEC_SEND_SET_CGA_ADDR = 0x45 - ICRNL = 0x100 - IEXTEN = 0x200000 - IFA_FIRSTALIAS = 0x2000 - IFA_ROUTE = 0x1 - IFF_64BIT = 0x4000000 - IFF_ALLCAST = 0x20000 - IFF_ALLMULTI = 0x200 - IFF_BPF = 0x8000000 - IFF_BRIDGE = 0x40000 - IFF_BROADCAST = 0x2 - IFF_CANTCHANGE = 0x80c52 - IFF_CHECKSUM_OFFLOAD = 0x10000000 - IFF_D1 = 0x8000 - IFF_D2 = 0x4000 - IFF_D3 = 0x2000 - IFF_D4 = 0x1000 - IFF_DEBUG = 0x4 - IFF_DEVHEALTH = 0x4000 - IFF_DO_HW_LOOPBACK = 0x10000 - IFF_GROUP_ROUTING = 0x2000000 - IFF_IFBUFMGT = 0x800000 - IFF_LINK0 = 0x100000 - IFF_LINK1 = 0x200000 - IFF_LINK2 = 0x400000 - IFF_LOOPBACK = 0x8 - IFF_MULTICAST = 0x80000 - IFF_NOARP = 0x80 - IFF_NOECHO = 0x800 - IFF_NOTRAILERS = 0x20 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PROMISC = 0x100 - IFF_PSEG = 0x40000000 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_SNAP = 0x8000 - IFF_TCP_DISABLE_CKSUM = 0x20000000 - IFF_TCP_NOCKSUM = 0x1000000 - IFF_UP = 0x1 - IFF_VIPA = 0x80000000 - IFNAMSIZ = 0x10 - IFO_FLUSH = 0x1 - IFT_1822 = 0x2 - IFT_AAL5 = 0x31 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ATM = 0x25 - IFT_CEPT = 0x13 - IFT_CLUSTER = 0x3e - IFT_DS3 = 0x1e - IFT_EON = 0x19 - IFT_ETHER = 0x6 - IFT_FCS = 0x3a - IFT_FDDI = 0xf - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_GIFTUNNEL = 0x3c - IFT_HDH1822 = 0x3 - IFT_HF = 0x3d - IFT_HIPPI = 0x2f - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IB = 0xc7 - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88026 = 0xa - IFT_LAPB = 0x10 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_NSIP = 0x1b - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PPP = 0x17 - IFT_PROPMUX = 0x36 - IFT_PROPVIRTUAL = 0x35 - IFT_PTPSERIAL = 0x16 - IFT_RS232 = 0x21 - IFT_SDLC = 0x11 - IFT_SIP = 0x1f - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SN = 0x38 - IFT_SONET = 0x27 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_SP = 0x39 - IFT_STARLAN = 0xb - IFT_T1 = 0x12 - IFT_TUNNEL = 0x3b - IFT_ULTRA = 0x1d - IFT_V35 = 0x2d - IFT_VIPA = 0x37 - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x10000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LOOPBACKNET = 0x7f - IN_USE = 0x1 - IPPROTO_AH = 0x33 - IPPROTO_BIP = 0x53 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GIF = 0x8c - IPPROTO_GRE = 0x2f - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IGMP = 0x2 - IPPROTO_IP = 0x0 - IPPROTO_IPIP = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_LOCAL = 0x3f - IPPROTO_MAX = 0x100 - IPPROTO_MH = 0x87 - IPPROTO_NONE = 0x3b - IPPROTO_PUP = 0xc - IPPROTO_QOS = 0x2d - IPPROTO_RAW = 0xff - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_SCTP = 0x84 - IPPROTO_TCP = 0x6 - IPPROTO_TP = 0x1d - IPPROTO_UDP = 0x11 - IPV6_ADDRFORM = 0x16 - IPV6_ADDR_PREFERENCES = 0x4a - IPV6_ADD_MEMBERSHIP = 0xc - IPV6_AIXRAWSOCKET = 0x39 - IPV6_CHECKSUM = 0x27 - IPV6_DONTFRAG = 0x2d - IPV6_DROP_MEMBERSHIP = 0xd - IPV6_DSTOPTS = 0x36 - IPV6_FLOWINFO_FLOWLABEL = 0xffffff - IPV6_FLOWINFO_PRIFLOW = 0xfffffff - IPV6_FLOWINFO_PRIORITY = 0xf000000 - IPV6_FLOWINFO_SRFLAG = 0x10000000 - IPV6_FLOWINFO_VERSION = 0xf0000000 - IPV6_HOPLIMIT = 0x28 - IPV6_HOPOPTS = 0x34 - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MIPDSTOPTS = 0x36 - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_NOPROBE = 0x1c - IPV6_PATHMTU = 0x2e - IPV6_PKTINFO = 0x21 - IPV6_PKTOPTIONS = 0x24 - IPV6_PRIORITY_10 = 0xa000000 - IPV6_PRIORITY_11 = 0xb000000 - IPV6_PRIORITY_12 = 0xc000000 - IPV6_PRIORITY_13 = 0xd000000 - IPV6_PRIORITY_14 = 0xe000000 - IPV6_PRIORITY_15 = 0xf000000 - IPV6_PRIORITY_8 = 0x8000000 - IPV6_PRIORITY_9 = 0x9000000 - IPV6_PRIORITY_BULK = 0x4000000 - IPV6_PRIORITY_CONTROL = 0x7000000 - IPV6_PRIORITY_FILLER = 0x1000000 - IPV6_PRIORITY_INTERACTIVE = 0x6000000 - IPV6_PRIORITY_RESERVED1 = 0x3000000 - IPV6_PRIORITY_RESERVED2 = 0x5000000 - IPV6_PRIORITY_UNATTENDED = 0x2000000 - IPV6_PRIORITY_UNCHARACTERIZED = 0x0 - IPV6_RECVDSTOPTS = 0x38 - IPV6_RECVHOPLIMIT = 0x29 - IPV6_RECVHOPOPTS = 0x35 - IPV6_RECVHOPS = 0x22 - IPV6_RECVIF = 0x1e - IPV6_RECVPATHMTU = 0x2f - IPV6_RECVPKTINFO = 0x23 - IPV6_RECVRTHDR = 0x33 - IPV6_RECVSRCRT = 0x1d - IPV6_RECVTCLASS = 0x2a - IPV6_RTHDR = 0x32 - IPV6_RTHDRDSTOPTS = 0x37 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_RTHDR_TYPE_2 = 0x2 - IPV6_SENDIF = 0x1f - IPV6_SRFLAG_LOOSE = 0x0 - IPV6_SRFLAG_STRICT = 0x10000000 - IPV6_TCLASS = 0x2b - IPV6_TOKEN_LENGTH = 0x40 - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2c - IPV6_V6ONLY = 0x25 - IPV6_VERSION = 0x60000000 - IP_ADDRFORM = 0x16 - IP_ADD_MEMBERSHIP = 0xc - IP_ADD_SOURCE_MEMBERSHIP = 0x3c - IP_BLOCK_SOURCE = 0x3a - IP_BROADCAST_IF = 0x10 - IP_CACHE_LINE_SIZE = 0x80 - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DHCPMODE = 0x11 - IP_DONTFRAG = 0x19 - IP_DROP_MEMBERSHIP = 0xd - IP_DROP_SOURCE_MEMBERSHIP = 0x3d - IP_FINDPMTU = 0x1a - IP_HDRINCL = 0x2 - IP_INC_MEMBERSHIPS = 0x14 - IP_INIT_MEMBERSHIP = 0x14 - IP_MAXPACKET = 0xffff - IP_MF = 0x2000 - IP_MSS = 0x240 - IP_MULTICAST_HOPS = 0xa - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_OPT = 0x1b - IP_OPTIONS = 0x1 - IP_PMTUAGE = 0x1b - IP_RECVDSTADDR = 0x7 - IP_RECVIF = 0x14 - IP_RECVIFINFO = 0xf - IP_RECVINTERFACE = 0x20 - IP_RECVMACHDR = 0xe - IP_RECVOPTS = 0x5 - IP_RECVRETOPTS = 0x6 - IP_RECVTTL = 0x22 - IP_RETOPTS = 0x8 - IP_SOURCE_FILTER = 0x48 - IP_TOS = 0x3 - IP_TTL = 0x4 - IP_UNBLOCK_SOURCE = 0x3b - IP_UNICAST_HOPS = 0x4 - ISIG = 0x1 - ISTRIP = 0x20 - IUCLC = 0x800 - IXANY = 0x1000 - IXOFF = 0x400 - IXON = 0x200 - I_FLUSH = 0x20005305 - LNOFLSH = 0x8000 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_DONTNEED = 0x4 - MADV_NORMAL = 0x0 - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_SPACEAVAIL = 0x5 - MADV_WILLNEED = 0x3 - MAP_ANON = 0x10 - MAP_ANONYMOUS = 0x10 - MAP_FILE = 0x0 - MAP_FIXED = 0x100 - MAP_PRIVATE = 0x2 - MAP_SHARED = 0x1 - MAP_TYPE = 0xf0 - MAP_VARIABLE = 0x0 - MCAST_BLOCK_SOURCE = 0x40 - MCAST_EXCLUDE = 0x2 - MCAST_INCLUDE = 0x1 - MCAST_JOIN_GROUP = 0x3e - MCAST_JOIN_SOURCE_GROUP = 0x42 - MCAST_LEAVE_GROUP = 0x3f - MCAST_LEAVE_SOURCE_GROUP = 0x43 - MCAST_SOURCE_FILTER = 0x49 - MCAST_UNBLOCK_SOURCE = 0x41 - MCL_CURRENT = 0x100 - MCL_FUTURE = 0x200 - MSG_ANY = 0x4 - MSG_ARGEXT = 0x400 - MSG_BAND = 0x2 - MSG_COMPAT = 0x8000 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_EOR = 0x8 - MSG_HIPRI = 0x1 - MSG_MAXIOVLEN = 0x10 - MSG_MPEG2 = 0x80 - MSG_NONBLOCK = 0x4000 - MSG_NOSIGNAL = 0x100 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 - MSG_WAITFORONE = 0x200 - MS_ASYNC = 0x10 - MS_EINTR = 0x80 - MS_INVALIDATE = 0x40 - MS_PER_SEC = 0x3e8 - MS_SYNC = 0x20 - NFDBITS = 0x40 - NL0 = 0x0 - NL1 = 0x4000 - NL2 = 0x8000 - NL3 = 0xc000 - NLDLY = 0x4000 - NOFLSH = 0x80 - NOFLUSH = 0x80000000 - OCRNL = 0x8 - OFDEL = 0x80 - OFILL = 0x40 - OLCUC = 0x2 - ONLCR = 0x4 - ONLRET = 0x20 - ONOCR = 0x10 - ONOEOT = 0x80000 - OPOST = 0x1 - OXTABS = 0x40000 - O_ACCMODE = 0x23 - O_APPEND = 0x8 - O_CIO = 0x80 - O_CIOR = 0x800000000 - O_CLOEXEC = 0x800000 - O_CREAT = 0x100 - O_DEFER = 0x2000 - O_DELAY = 0x4000 - O_DIRECT = 0x8000000 - O_DIRECTORY = 0x80000 - O_DSYNC = 0x400000 - O_EFSOFF = 0x400000000 - O_EFSON = 0x200000000 - O_EXCL = 0x400 - O_EXEC = 0x20 - O_LARGEFILE = 0x4000000 - O_NDELAY = 0x8000 - O_NOCACHE = 0x100000 - O_NOCTTY = 0x800 - O_NOFOLLOW = 0x1000000 - O_NONBLOCK = 0x4 - O_NONE = 0x3 - O_NSHARE = 0x10000 - O_RAW = 0x100000000 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_RSHARE = 0x1000 - O_RSYNC = 0x200000 - O_SEARCH = 0x20 - O_SNAPSHOT = 0x40 - O_SYNC = 0x10 - O_TRUNC = 0x200 - O_TTY_INIT = 0x0 - O_WRONLY = 0x1 - PARENB = 0x100 - PAREXT = 0x100000 - PARMRK = 0x8 - PARODD = 0x200 - PENDIN = 0x20000000 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - PR_64BIT = 0x20 - PR_ADDR = 0x2 - PR_ARGEXT = 0x400 - PR_ATOMIC = 0x1 - PR_CONNREQUIRED = 0x4 - PR_FASTHZ = 0x5 - PR_INP = 0x40 - PR_INTRLEVEL = 0x8000 - PR_MLS = 0x100 - PR_MLS_1_LABEL = 0x200 - PR_NOEOR = 0x4000 - PR_RIGHTS = 0x10 - PR_SLOWHZ = 0x2 - PR_WANTRCVD = 0x8 - RLIMIT_AS = 0x6 - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_NOFILE = 0x7 - RLIMIT_NPROC = 0x9 - RLIMIT_RSS = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_MAX = 0x8 - RTAX_NETMASK = 0x2 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DOWNSTREAM = 0x100 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_NETMASK = 0x4 - RTC_IA64 = 0x3 - RTC_POWER = 0x1 - RTC_POWER_PC = 0x2 - RTF_ACTIVE_DGD = 0x1000000 - RTF_BCE = 0x80000 - RTF_BLACKHOLE = 0x1000 - RTF_BROADCAST = 0x400000 - RTF_BUL = 0x2000 - RTF_CLONE = 0x10000 - RTF_CLONED = 0x20000 - RTF_CLONING = 0x100 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_FREE_IN_PROG = 0x4000000 - RTF_GATEWAY = 0x2 - RTF_HOST = 0x4 - RTF_LLINFO = 0x400 - RTF_LOCAL = 0x200000 - RTF_MASK = 0x80 - RTF_MODIFIED = 0x20 - RTF_MULTICAST = 0x800000 - RTF_PERMANENT6 = 0x8000000 - RTF_PINNED = 0x100000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_PROTO3 = 0x40000 - RTF_REJECT = 0x8 - RTF_SMALLMTU = 0x40000 - RTF_STATIC = 0x800 - RTF_STOPSRCH = 0x2000000 - RTF_UNREACHABLE = 0x10000000 - RTF_UP = 0x1 - RTF_XRESOLVE = 0x200 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_EXPIRE = 0xf - RTM_GET = 0x4 - RTM_GETNEXT = 0x11 - RTM_IFINFO = 0xe - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_OLDADD = 0x9 - RTM_OLDDEL = 0xa - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTLOST = 0x10 - RTM_RTTUNIT = 0xf4240 - RTM_SAMEADDR = 0x12 - RTM_SET = 0x13 - RTM_VERSION = 0x2 - RTM_VERSION_GR = 0x4 - RTM_VERSION_GR_COMPAT = 0x3 - RTM_VERSION_POLICY = 0x5 - RTM_VERSION_POLICY_EXT = 0x6 - RTM_VERSION_POLICY_PRFN = 0x7 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - RUSAGE_THREAD = 0x1 - SCM_RIGHTS = 0x1 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIGMAX64 = 0xff - SIGQUEUE_MAX = 0x20 - SIOCADDIFVIPA = 0x20006942 - SIOCADDMTU = -0x7ffb9690 - SIOCADDMULTI = -0x7fdf96cf - SIOCADDNETID = -0x7fd796a9 - SIOCADDRT = -0x7fc78df6 - SIOCAIFADDR = -0x7fbf96e6 - SIOCATMARK = 0x40047307 - SIOCDARP = -0x7fb396e0 - SIOCDELIFVIPA = 0x20006943 - SIOCDELMTU = -0x7ffb968f - SIOCDELMULTI = -0x7fdf96ce - SIOCDELPMTU = -0x7fd78ff6 - SIOCDELRT = -0x7fc78df5 - SIOCDIFADDR = -0x7fd796e7 - SIOCDNETOPT = -0x3ffe9680 - SIOCDX25XLATE = -0x7fd7969b - SIOCFIFADDR = -0x7fdf966d - SIOCGARP = -0x3fb396da - SIOCGETMTUS = 0x2000696f - SIOCGETSGCNT = -0x3feb8acc - SIOCGETVIFCNT = -0x3feb8acd - SIOCGHIWAT = 0x40047301 - SIOCGIFADDR = -0x3fd796df - SIOCGIFADDRS = 0x2000698c - SIOCGIFBAUDRATE = -0x3fdf9669 - SIOCGIFBRDADDR = -0x3fd796dd - SIOCGIFCONF = -0x3fef96bb - SIOCGIFCONFGLOB = -0x3fef9670 - SIOCGIFDSTADDR = -0x3fd796de - SIOCGIFFLAGS = -0x3fd796ef - SIOCGIFGIDLIST = 0x20006968 - SIOCGIFHWADDR = -0x3fab966b - SIOCGIFMETRIC = -0x3fd796e9 - SIOCGIFMTU = -0x3fd796aa - SIOCGIFNETMASK = -0x3fd796db - SIOCGIFOPTIONS = -0x3fd796d6 - SIOCGISNO = -0x3fd79695 - SIOCGLOADF = -0x3ffb967e - SIOCGLOWAT = 0x40047303 - SIOCGNETOPT = -0x3ffe96a5 - SIOCGNETOPT1 = -0x3fdf967f - SIOCGNMTUS = 0x2000696e - SIOCGPGRP = 0x40047309 - SIOCGSIZIFCONF = 0x4004696a - SIOCGSRCFILTER = -0x3fe796cb - SIOCGTUNEPHASE = -0x3ffb9676 - SIOCGX25XLATE = -0x3fd7969c - SIOCIFATTACH = -0x7fdf9699 - SIOCIFDETACH = -0x7fdf969a - SIOCIFGETPKEY = -0x7fdf969b - SIOCIF_ATM_DARP = -0x7fdf9683 - SIOCIF_ATM_DUMPARP = -0x7fdf9685 - SIOCIF_ATM_GARP = -0x7fdf9682 - SIOCIF_ATM_IDLE = -0x7fdf9686 - SIOCIF_ATM_SARP = -0x7fdf9681 - SIOCIF_ATM_SNMPARP = -0x7fdf9687 - SIOCIF_ATM_SVC = -0x7fdf9684 - SIOCIF_ATM_UBR = -0x7fdf9688 - SIOCIF_DEVHEALTH = -0x7ffb966c - SIOCIF_IB_ARP_INCOMP = -0x7fdf9677 - SIOCIF_IB_ARP_TIMER = -0x7fdf9678 - SIOCIF_IB_CLEAR_PINFO = -0x3fdf966f - SIOCIF_IB_DEL_ARP = -0x7fdf967f - SIOCIF_IB_DEL_PINFO = -0x3fdf9670 - SIOCIF_IB_DUMP_ARP = -0x7fdf9680 - SIOCIF_IB_GET_ARP = -0x7fdf967e - SIOCIF_IB_GET_INFO = -0x3f879675 - SIOCIF_IB_GET_STATS = -0x3f879672 - SIOCIF_IB_NOTIFY_ADDR_REM = -0x3f87966a - SIOCIF_IB_RESET_STATS = -0x3f879671 - SIOCIF_IB_RESIZE_CQ = -0x7fdf9679 - SIOCIF_IB_SET_ARP = -0x7fdf967d - SIOCIF_IB_SET_PKEY = -0x7fdf967c - SIOCIF_IB_SET_PORT = -0x7fdf967b - SIOCIF_IB_SET_QKEY = -0x7fdf9676 - SIOCIF_IB_SET_QSIZE = -0x7fdf967a - SIOCLISTIFVIPA = 0x20006944 - SIOCSARP = -0x7fb396e2 - SIOCSHIWAT = 0xffffffff80047300 - SIOCSIFADDR = -0x7fd796f4 - SIOCSIFADDRORI = -0x7fdb9673 - SIOCSIFBRDADDR = -0x7fd796ed - SIOCSIFDSTADDR = -0x7fd796f2 - SIOCSIFFLAGS = -0x7fd796f0 - SIOCSIFGIDLIST = 0x20006969 - SIOCSIFMETRIC = -0x7fd796e8 - SIOCSIFMTU = -0x7fd796a8 - SIOCSIFNETDUMP = -0x7fd796e4 - SIOCSIFNETMASK = -0x7fd796ea - SIOCSIFOPTIONS = -0x7fd796d7 - SIOCSIFSUBCHAN = -0x7fd796e5 - SIOCSISNO = -0x7fd79694 - SIOCSLOADF = -0x3ffb967d - SIOCSLOWAT = 0xffffffff80047302 - SIOCSNETOPT = -0x7ffe96a6 - SIOCSPGRP = 0xffffffff80047308 - SIOCSX25XLATE = -0x7fd7969d - SOCK_CONN_DGRAM = 0x6 - SOCK_DGRAM = 0x2 - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x400 - SO_ACCEPTCONN = 0x2 - SO_AUDIT = 0x8000 - SO_BROADCAST = 0x20 - SO_CKSUMRECV = 0x800 - SO_DEBUG = 0x1 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_KERNACCEPT = 0x2000 - SO_LINGER = 0x80 - SO_NOMULTIPATH = 0x4000 - SO_NOREUSEADDR = 0x1000 - SO_OOBINLINE = 0x100 - SO_PEERID = 0x1009 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_TIMESTAMPNS = 0x100a - SO_TYPE = 0x1008 - SO_USELOOPBACK = 0x40 - SO_USE_IFBUFS = 0x400 - S_BANDURG = 0x400 - S_EMODFMT = 0x3c000000 - S_ENFMT = 0x400 - S_ERROR = 0x100 - S_HANGUP = 0x200 - S_HIPRI = 0x2 - S_ICRYPTO = 0x80000 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFJOURNAL = 0x10000 - S_IFLNK = 0xa000 - S_IFMPX = 0x2200 - S_IFMT = 0xf000 - S_IFPDIR = 0x4000000 - S_IFPSDIR = 0x8000000 - S_IFPSSDIR = 0xc000000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IFSYSEA = 0x30000000 - S_INPUT = 0x1 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_ITCB = 0x1000000 - S_ITP = 0x800000 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXACL = 0x2000000 - S_IXATTR = 0x40000 - S_IXGRP = 0x8 - S_IXINTERFACE = 0x100000 - S_IXMOD = 0x40000000 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - S_MSG = 0x8 - S_OUTPUT = 0x4 - S_RDBAND = 0x20 - S_RDNORM = 0x10 - S_RESERVED1 = 0x20000 - S_RESERVED2 = 0x200000 - S_RESERVED3 = 0x400000 - S_RESERVED4 = 0x80000000 - S_RESFMT1 = 0x10000000 - S_RESFMT10 = 0x34000000 - S_RESFMT11 = 0x38000000 - S_RESFMT12 = 0x3c000000 - S_RESFMT2 = 0x14000000 - S_RESFMT3 = 0x18000000 - S_RESFMT4 = 0x1c000000 - S_RESFMT5 = 0x20000000 - S_RESFMT6 = 0x24000000 - S_RESFMT7 = 0x28000000 - S_RESFMT8 = 0x2c000000 - S_WRBAND = 0x80 - S_WRNORM = 0x40 - TAB0 = 0x0 - TAB1 = 0x400 - TAB2 = 0x800 - TAB3 = 0xc00 - TABDLY = 0xc00 - TCFLSH = 0x540c - TCGETA = 0x5405 - TCGETS = 0x5401 - TCIFLUSH = 0x0 - TCIOFF = 0x2 - TCIOFLUSH = 0x2 - TCION = 0x3 - TCOFLUSH = 0x1 - TCOOFF = 0x0 - TCOON = 0x1 - TCP_24DAYS_WORTH_OF_SLOWTICKS = 0x3f4800 - TCP_ACLADD = 0x23 - TCP_ACLBIND = 0x26 - TCP_ACLCLEAR = 0x22 - TCP_ACLDEL = 0x24 - TCP_ACLDENY = 0x8 - TCP_ACLFLUSH = 0x21 - TCP_ACLGID = 0x1 - TCP_ACLLS = 0x25 - TCP_ACLSUBNET = 0x4 - TCP_ACLUID = 0x2 - TCP_CWND_DF = 0x16 - TCP_CWND_IF = 0x15 - TCP_DELAY_ACK_FIN = 0x2 - TCP_DELAY_ACK_SYN = 0x1 - TCP_FASTNAME = 0x101080a - TCP_KEEPCNT = 0x13 - TCP_KEEPIDLE = 0x11 - TCP_KEEPINTVL = 0x12 - TCP_LSPRIV = 0x29 - TCP_LUID = 0x20 - TCP_MAXBURST = 0x8 - TCP_MAXDF = 0x64 - TCP_MAXIF = 0x64 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAXWINDOWSCALE = 0xe - TCP_MAX_SACK = 0x4 - TCP_MSS = 0x5b4 - TCP_NODELAY = 0x1 - TCP_NODELAYACK = 0x14 - TCP_NOREDUCE_CWND_EXIT_FRXMT = 0x19 - TCP_NOREDUCE_CWND_IN_FRXMT = 0x18 - TCP_NOTENTER_SSTART = 0x17 - TCP_OPT = 0x19 - TCP_RFC1323 = 0x4 - TCP_SETPRIV = 0x27 - TCP_STDURG = 0x10 - TCP_TIMESTAMP_OPTLEN = 0xc - TCP_UNSETPRIV = 0x28 - TCSAFLUSH = 0x2 - TCSBRK = 0x5409 - TCSETA = 0x5406 - TCSETAF = 0x5408 - TCSETAW = 0x5407 - TCSETS = 0x5402 - TCSETSF = 0x5404 - TCSETSW = 0x5403 - TCXONC = 0x540b - TIMER_ABSTIME = 0x3e7 - TIMER_MAX = 0x20 - TIOC = 0x5400 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCONS = 0xffffffff80047462 - TIOCEXCL = 0x2000740d - TIOCFLUSH = 0xffffffff80047410 - TIOCGETC = 0x40067412 - TIOCGETD = 0x40047400 - TIOCGETP = 0x40067408 - TIOCGLTC = 0x40067474 - TIOCGPGRP = 0x40047477 - TIOCGSID = 0x40047448 - TIOCGSIZE = 0x40087468 - TIOCGWINSZ = 0x40087468 - TIOCHPCL = 0x20007402 - TIOCLBIC = 0xffffffff8004747e - TIOCLBIS = 0xffffffff8004747f - TIOCLGET = 0x4004747c - TIOCLSET = 0xffffffff8004747d - TIOCMBIC = 0xffffffff8004746b - TIOCMBIS = 0xffffffff8004746c - TIOCMGET = 0x4004746a - TIOCMIWAIT = 0xffffffff80047464 - TIOCMODG = 0x40047403 - TIOCMODS = 0xffffffff80047404 - TIOCMSET = 0xffffffff8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0xffffffff80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCREMOTE = 0xffffffff80047469 - TIOCSBRK = 0x2000747b - TIOCSDTR = 0x20007479 - TIOCSETC = 0xffffffff80067411 - TIOCSETD = 0xffffffff80047401 - TIOCSETN = 0xffffffff8006740a - TIOCSETP = 0xffffffff80067409 - TIOCSLTC = 0xffffffff80067475 - TIOCSPGRP = 0xffffffff80047476 - TIOCSSIZE = 0xffffffff80087467 - TIOCSTART = 0x2000746e - TIOCSTI = 0xffffffff80017472 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0xffffffff80087467 - TIOCUCNTL = 0xffffffff80047466 - TOSTOP = 0x10000 - UTIME_NOW = -0x2 - UTIME_OMIT = -0x3 - VDISCRD = 0xc - VDSUSP = 0xa - VEOF = 0x4 - VEOL = 0x5 - VEOL2 = 0x6 - VERASE = 0x2 - VINTR = 0x0 - VKILL = 0x3 - VLNEXT = 0xe - VMIN = 0x4 - VQUIT = 0x1 - VREPRINT = 0xb - VSTART = 0x7 - VSTOP = 0x8 - VSTRT = 0x7 - VSUSP = 0x9 - VT0 = 0x0 - VT1 = 0x8000 - VTDELAY = 0x2000 - VTDLY = 0x8000 - VTIME = 0x5 - VWERSE = 0xd - WPARSTART = 0x1 - WPARSTOP = 0x2 - WPARTTYNAME = "Global" - XCASE = 0x4 - XTABS = 0xc00 - _FDATAFLUSH = 0x2000000000 -) - -// Errors -const ( - E2BIG = syscall.Errno(0x7) - EACCES = syscall.Errno(0xd) - EADDRINUSE = syscall.Errno(0x43) - EADDRNOTAVAIL = syscall.Errno(0x44) - EAFNOSUPPORT = syscall.Errno(0x42) - EAGAIN = syscall.Errno(0xb) - EALREADY = syscall.Errno(0x38) - EBADF = syscall.Errno(0x9) - EBADMSG = syscall.Errno(0x78) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x75) - ECHILD = syscall.Errno(0xa) - ECHRNG = syscall.Errno(0x25) - ECLONEME = syscall.Errno(0x52) - ECONNABORTED = syscall.Errno(0x48) - ECONNREFUSED = syscall.Errno(0x4f) - ECONNRESET = syscall.Errno(0x49) - ECORRUPT = syscall.Errno(0x59) - EDEADLK = syscall.Errno(0x2d) - EDESTADDREQ = syscall.Errno(0x3a) - EDESTADDRREQ = syscall.Errno(0x3a) - EDIST = syscall.Errno(0x35) - EDOM = syscall.Errno(0x21) - EDQUOT = syscall.Errno(0x58) - EEXIST = syscall.Errno(0x11) - EFAULT = syscall.Errno(0xe) - EFBIG = syscall.Errno(0x1b) - EFORMAT = syscall.Errno(0x30) - EHOSTDOWN = syscall.Errno(0x50) - EHOSTUNREACH = syscall.Errno(0x51) - EIDRM = syscall.Errno(0x24) - EILSEQ = syscall.Errno(0x74) - EINPROGRESS = syscall.Errno(0x37) - EINTR = syscall.Errno(0x4) - EINVAL = syscall.Errno(0x16) - EIO = syscall.Errno(0x5) - EISCONN = syscall.Errno(0x4b) - EISDIR = syscall.Errno(0x15) - EL2HLT = syscall.Errno(0x2c) - EL2NSYNC = syscall.Errno(0x26) - EL3HLT = syscall.Errno(0x27) - EL3RST = syscall.Errno(0x28) - ELNRNG = syscall.Errno(0x29) - ELOOP = syscall.Errno(0x55) - EMEDIA = syscall.Errno(0x6e) - EMFILE = syscall.Errno(0x18) - EMLINK = syscall.Errno(0x1f) - EMSGSIZE = syscall.Errno(0x3b) - EMULTIHOP = syscall.Errno(0x7d) - ENAMETOOLONG = syscall.Errno(0x56) - ENETDOWN = syscall.Errno(0x45) - ENETRESET = syscall.Errno(0x47) - ENETUNREACH = syscall.Errno(0x46) - ENFILE = syscall.Errno(0x17) - ENOATTR = syscall.Errno(0x70) - ENOBUFS = syscall.Errno(0x4a) - ENOCONNECT = syscall.Errno(0x32) - ENOCSI = syscall.Errno(0x2b) - ENODATA = syscall.Errno(0x7a) - ENODEV = syscall.Errno(0x13) - ENOENT = syscall.Errno(0x2) - ENOEXEC = syscall.Errno(0x8) - ENOLCK = syscall.Errno(0x31) - ENOLINK = syscall.Errno(0x7e) - ENOMEM = syscall.Errno(0xc) - ENOMSG = syscall.Errno(0x23) - ENOPROTOOPT = syscall.Errno(0x3d) - ENOSPC = syscall.Errno(0x1c) - ENOSR = syscall.Errno(0x76) - ENOSTR = syscall.Errno(0x7b) - ENOSYS = syscall.Errno(0x6d) - ENOTBLK = syscall.Errno(0xf) - ENOTCONN = syscall.Errno(0x4c) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x11) - ENOTREADY = syscall.Errno(0x2e) - ENOTRECOVERABLE = syscall.Errno(0x5e) - ENOTRUST = syscall.Errno(0x72) - ENOTSOCK = syscall.Errno(0x39) - ENOTSUP = syscall.Errno(0x7c) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x40) - EOVERFLOW = syscall.Errno(0x7f) - EOWNERDEAD = syscall.Errno(0x5f) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x41) - EPIPE = syscall.Errno(0x20) - EPROCLIM = syscall.Errno(0x53) - EPROTO = syscall.Errno(0x79) - EPROTONOSUPPORT = syscall.Errno(0x3e) - EPROTOTYPE = syscall.Errno(0x3c) - ERANGE = syscall.Errno(0x22) - EREMOTE = syscall.Errno(0x5d) - ERESTART = syscall.Errno(0x52) - EROFS = syscall.Errno(0x1e) - ESAD = syscall.Errno(0x71) - ESHUTDOWN = syscall.Errno(0x4d) - ESOCKTNOSUPPORT = syscall.Errno(0x3f) - ESOFT = syscall.Errno(0x6f) - ESPIPE = syscall.Errno(0x1d) - ESRCH = syscall.Errno(0x3) - ESTALE = syscall.Errno(0x34) - ESYSERROR = syscall.Errno(0x5a) - ETIME = syscall.Errno(0x77) - ETIMEDOUT = syscall.Errno(0x4e) - ETOOMANYREFS = syscall.Errno(0x73) - ETXTBSY = syscall.Errno(0x1a) - EUNATCH = syscall.Errno(0x2a) - EUSERS = syscall.Errno(0x54) - EWOULDBLOCK = syscall.Errno(0xb) - EWRPROTECT = syscall.Errno(0x2f) - EXDEV = syscall.Errno(0x12) -) - -// Signals -const ( - SIGABRT = syscall.Signal(0x6) - SIGAIO = syscall.Signal(0x17) - SIGALRM = syscall.Signal(0xe) - SIGALRM1 = syscall.Signal(0x26) - SIGBUS = syscall.Signal(0xa) - SIGCAPI = syscall.Signal(0x31) - SIGCHLD = syscall.Signal(0x14) - SIGCLD = syscall.Signal(0x14) - SIGCONT = syscall.Signal(0x13) - SIGCPUFAIL = syscall.Signal(0x3b) - SIGDANGER = syscall.Signal(0x21) - SIGEMT = syscall.Signal(0x7) - SIGFPE = syscall.Signal(0x8) - SIGGRANT = syscall.Signal(0x3c) - SIGHUP = syscall.Signal(0x1) - SIGILL = syscall.Signal(0x4) - SIGINT = syscall.Signal(0x2) - SIGIO = syscall.Signal(0x17) - SIGIOINT = syscall.Signal(0x10) - SIGIOT = syscall.Signal(0x6) - SIGKAP = syscall.Signal(0x3c) - SIGKILL = syscall.Signal(0x9) - SIGLOST = syscall.Signal(0x6) - SIGMAX = syscall.Signal(0xff) - SIGMAX32 = syscall.Signal(0x3f) - SIGMIGRATE = syscall.Signal(0x23) - SIGMSG = syscall.Signal(0x1b) - SIGPIPE = syscall.Signal(0xd) - SIGPOLL = syscall.Signal(0x17) - SIGPRE = syscall.Signal(0x24) - SIGPROF = syscall.Signal(0x20) - SIGPTY = syscall.Signal(0x17) - SIGPWR = syscall.Signal(0x1d) - SIGQUIT = syscall.Signal(0x3) - SIGRECONFIG = syscall.Signal(0x3a) - SIGRETRACT = syscall.Signal(0x3d) - SIGSAK = syscall.Signal(0x3f) - SIGSEGV = syscall.Signal(0xb) - SIGSOUND = syscall.Signal(0x3e) - SIGSTOP = syscall.Signal(0x11) - SIGSYS = syscall.Signal(0xc) - SIGSYSERROR = syscall.Signal(0x30) - SIGTALRM = syscall.Signal(0x26) - SIGTERM = syscall.Signal(0xf) - SIGTRAP = syscall.Signal(0x5) - SIGTSTP = syscall.Signal(0x12) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x10) - SIGUSR1 = syscall.Signal(0x1e) - SIGUSR2 = syscall.Signal(0x1f) - SIGVIRT = syscall.Signal(0x25) - SIGVTALRM = syscall.Signal(0x22) - SIGWAITING = syscall.Signal(0x27) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "not owner"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "I/O error"}, - {6, "ENXIO", "no such device or address"}, - {7, "E2BIG", "arg list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file number"}, - {10, "ECHILD", "no child processes"}, - {11, "EWOULDBLOCK", "resource temporarily unavailable"}, - {12, "ENOMEM", "not enough space"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device busy"}, - {17, "ENOTEMPTY", "file exists"}, - {18, "EXDEV", "cross-device link"}, - {19, "ENODEV", "no such device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "file table overflow"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "not a typewriter"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "argument out of domain"}, - {34, "ERANGE", "result too large"}, - {35, "ENOMSG", "no message of desired type"}, - {36, "EIDRM", "identifier removed"}, - {37, "ECHRNG", "channel number out of range"}, - {38, "EL2NSYNC", "level 2 not synchronized"}, - {39, "EL3HLT", "level 3 halted"}, - {40, "EL3RST", "level 3 reset"}, - {41, "ELNRNG", "link number out of range"}, - {42, "EUNATCH", "protocol driver not attached"}, - {43, "ENOCSI", "no CSI structure available"}, - {44, "EL2HLT", "level 2 halted"}, - {45, "EDEADLK", "deadlock condition if locked"}, - {46, "ENOTREADY", "device not ready"}, - {47, "EWRPROTECT", "write-protected media"}, - {48, "EFORMAT", "unformatted or incompatible media"}, - {49, "ENOLCK", "no locks available"}, - {50, "ENOCONNECT", "cannot Establish Connection"}, - {52, "ESTALE", "missing file or filesystem"}, - {53, "EDIST", "requests blocked by Administrator"}, - {55, "EINPROGRESS", "operation now in progress"}, - {56, "EALREADY", "operation already in progress"}, - {57, "ENOTSOCK", "socket operation on non-socket"}, - {58, "EDESTADDREQ", "destination address required"}, - {59, "EMSGSIZE", "message too long"}, - {60, "EPROTOTYPE", "protocol wrong type for socket"}, - {61, "ENOPROTOOPT", "protocol not available"}, - {62, "EPROTONOSUPPORT", "protocol not supported"}, - {63, "ESOCKTNOSUPPORT", "socket type not supported"}, - {64, "EOPNOTSUPP", "operation not supported on socket"}, - {65, "EPFNOSUPPORT", "protocol family not supported"}, - {66, "EAFNOSUPPORT", "addr family not supported by protocol"}, - {67, "EADDRINUSE", "address already in use"}, - {68, "EADDRNOTAVAIL", "can't assign requested address"}, - {69, "ENETDOWN", "network is down"}, - {70, "ENETUNREACH", "network is unreachable"}, - {71, "ENETRESET", "network dropped connection on reset"}, - {72, "ECONNABORTED", "software caused connection abort"}, - {73, "ECONNRESET", "connection reset by peer"}, - {74, "ENOBUFS", "no buffer space available"}, - {75, "EISCONN", "socket is already connected"}, - {76, "ENOTCONN", "socket is not connected"}, - {77, "ESHUTDOWN", "can't send after socket shutdown"}, - {78, "ETIMEDOUT", "connection timed out"}, - {79, "ECONNREFUSED", "connection refused"}, - {80, "EHOSTDOWN", "host is down"}, - {81, "EHOSTUNREACH", "no route to host"}, - {82, "ERESTART", "restart the system call"}, - {83, "EPROCLIM", "too many processes"}, - {84, "EUSERS", "too many users"}, - {85, "ELOOP", "too many levels of symbolic links"}, - {86, "ENAMETOOLONG", "file name too long"}, - {88, "EDQUOT", "disk quota exceeded"}, - {89, "ECORRUPT", "invalid file system control data detected"}, - {90, "ESYSERROR", "for future use "}, - {93, "EREMOTE", "item is not local to host"}, - {94, "ENOTRECOVERABLE", "state not recoverable "}, - {95, "EOWNERDEAD", "previous owner died "}, - {109, "ENOSYS", "function not implemented"}, - {110, "EMEDIA", "media surface error"}, - {111, "ESOFT", "I/O completed, but needs relocation"}, - {112, "ENOATTR", "no attribute found"}, - {113, "ESAD", "security Authentication Denied"}, - {114, "ENOTRUST", "not a Trusted Program"}, - {115, "ETOOMANYREFS", "too many references: can't splice"}, - {116, "EILSEQ", "invalid wide character"}, - {117, "ECANCELED", "asynchronous I/O cancelled"}, - {118, "ENOSR", "out of STREAMS resources"}, - {119, "ETIME", "system call timed out"}, - {120, "EBADMSG", "next message has wrong type"}, - {121, "EPROTO", "error in protocol"}, - {122, "ENODATA", "no message on stream head read q"}, - {123, "ENOSTR", "fd not associated with a stream"}, - {124, "ENOTSUP", "unsupported attribute value"}, - {125, "EMULTIHOP", "multihop is not allowed"}, - {126, "ENOLINK", "the server link has been severed"}, - {127, "EOVERFLOW", "value too large to be stored in data type"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, - {6, "SIGIOT", "IOT/Abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGURG", "urgent I/O condition"}, - {17, "SIGSTOP", "stopped (signal)"}, - {18, "SIGTSTP", "stopped"}, - {19, "SIGCONT", "continued"}, - {20, "SIGCHLD", "child exited"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGIO", "I/O possible/complete"}, - {24, "SIGXCPU", "cputime limit exceeded"}, - {25, "SIGXFSZ", "filesize limit exceeded"}, - {27, "SIGMSG", "input device data"}, - {28, "SIGWINCH", "window size changes"}, - {29, "SIGPWR", "power-failure"}, - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, - {32, "SIGPROF", "profiling timer expired"}, - {33, "SIGDANGER", "paging space low"}, - {34, "SIGVTALRM", "virtual timer expired"}, - {35, "SIGMIGRATE", "signal 35"}, - {36, "SIGPRE", "signal 36"}, - {37, "SIGVIRT", "signal 37"}, - {38, "SIGTALRM", "signal 38"}, - {39, "SIGWAITING", "signal 39"}, - {48, "SIGSYSERROR", "signal 48"}, - {49, "SIGCAPI", "signal 49"}, - {58, "SIGRECONFIG", "signal 58"}, - {59, "SIGCPUFAIL", "CPU Failure Predicted"}, - {60, "SIGGRANT", "monitor mode granted"}, - {61, "SIGRETRACT", "monitor mode retracted"}, - {62, "SIGSOUND", "sound completed"}, - {63, "SIGMAX32", "secure attention"}, - {255, "SIGMAX", "signal 255"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go deleted file mode 100644 index 476a1c7..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go +++ /dev/null @@ -1,1892 +0,0 @@ -// mkerrors.sh -m64 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build amd64 && darwin -// +build amd64,darwin - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -m64 _const.go - -package unix - -import "syscall" - -const ( - AF_APPLETALK = 0x10 - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1c - AF_ECMA = 0x8 - AF_HYLINK = 0xf - AF_IEEE80211 = 0x25 - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x1e - AF_IPX = 0x17 - AF_ISDN = 0x1c - AF_ISO = 0x7 - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x29 - AF_NATM = 0x1f - AF_NDRV = 0x1b - AF_NETBIOS = 0x21 - AF_NS = 0x6 - AF_OSI = 0x7 - AF_PPP = 0x22 - AF_PUP = 0x4 - AF_RESERVED_36 = 0x24 - AF_ROUTE = 0x11 - AF_SIP = 0x18 - AF_SNA = 0xb - AF_SYSTEM = 0x20 - AF_SYS_CONTROL = 0x2 - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - AF_UTUN = 0x26 - AF_VSOCK = 0x28 - ALTWERASE = 0x200 - ATTR_BIT_MAP_COUNT = 0x5 - ATTR_CMN_ACCESSMASK = 0x20000 - ATTR_CMN_ACCTIME = 0x1000 - ATTR_CMN_ADDEDTIME = 0x10000000 - ATTR_CMN_BKUPTIME = 0x2000 - ATTR_CMN_CHGTIME = 0x800 - ATTR_CMN_CRTIME = 0x200 - ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000 - ATTR_CMN_DEVID = 0x2 - ATTR_CMN_DOCUMENT_ID = 0x100000 - ATTR_CMN_ERROR = 0x20000000 - ATTR_CMN_EXTENDED_SECURITY = 0x400000 - ATTR_CMN_FILEID = 0x2000000 - ATTR_CMN_FLAGS = 0x40000 - ATTR_CMN_FNDRINFO = 0x4000 - ATTR_CMN_FSID = 0x4 - ATTR_CMN_FULLPATH = 0x8000000 - ATTR_CMN_GEN_COUNT = 0x80000 - ATTR_CMN_GRPID = 0x10000 - ATTR_CMN_GRPUUID = 0x1000000 - ATTR_CMN_MODTIME = 0x400 - ATTR_CMN_NAME = 0x1 - ATTR_CMN_NAMEDATTRCOUNT = 0x80000 - ATTR_CMN_NAMEDATTRLIST = 0x100000 - ATTR_CMN_OBJID = 0x20 - ATTR_CMN_OBJPERMANENTID = 0x40 - ATTR_CMN_OBJTAG = 0x10 - ATTR_CMN_OBJTYPE = 0x8 - ATTR_CMN_OWNERID = 0x8000 - ATTR_CMN_PARENTID = 0x4000000 - ATTR_CMN_PAROBJID = 0x80 - ATTR_CMN_RETURNED_ATTRS = 0x80000000 - ATTR_CMN_SCRIPT = 0x100 - ATTR_CMN_SETMASK = 0x51c7ff00 - ATTR_CMN_USERACCESS = 0x200000 - ATTR_CMN_UUID = 0x800000 - ATTR_CMN_VALIDMASK = 0xffffffff - ATTR_CMN_VOLSETMASK = 0x6700 - ATTR_FILE_ALLOCSIZE = 0x4 - ATTR_FILE_CLUMPSIZE = 0x10 - ATTR_FILE_DATAALLOCSIZE = 0x400 - ATTR_FILE_DATAEXTENTS = 0x800 - ATTR_FILE_DATALENGTH = 0x200 - ATTR_FILE_DEVTYPE = 0x20 - ATTR_FILE_FILETYPE = 0x40 - ATTR_FILE_FORKCOUNT = 0x80 - ATTR_FILE_FORKLIST = 0x100 - ATTR_FILE_IOBLOCKSIZE = 0x8 - ATTR_FILE_LINKCOUNT = 0x1 - ATTR_FILE_RSRCALLOCSIZE = 0x2000 - ATTR_FILE_RSRCEXTENTS = 0x4000 - ATTR_FILE_RSRCLENGTH = 0x1000 - ATTR_FILE_SETMASK = 0x20 - ATTR_FILE_TOTALSIZE = 0x2 - ATTR_FILE_VALIDMASK = 0x37ff - ATTR_VOL_ALLOCATIONCLUMP = 0x40 - ATTR_VOL_ATTRIBUTES = 0x40000000 - ATTR_VOL_CAPABILITIES = 0x20000 - ATTR_VOL_DIRCOUNT = 0x400 - ATTR_VOL_ENCODINGSUSED = 0x10000 - ATTR_VOL_FILECOUNT = 0x200 - ATTR_VOL_FSTYPE = 0x1 - ATTR_VOL_INFO = 0x80000000 - ATTR_VOL_IOBLOCKSIZE = 0x80 - ATTR_VOL_MAXOBJCOUNT = 0x800 - ATTR_VOL_MINALLOCATION = 0x20 - ATTR_VOL_MOUNTEDDEVICE = 0x8000 - ATTR_VOL_MOUNTFLAGS = 0x4000 - ATTR_VOL_MOUNTPOINT = 0x1000 - ATTR_VOL_NAME = 0x2000 - ATTR_VOL_OBJCOUNT = 0x100 - ATTR_VOL_QUOTA_SIZE = 0x10000000 - ATTR_VOL_RESERVED_SIZE = 0x20000000 - ATTR_VOL_SETMASK = 0x80002000 - ATTR_VOL_SIGNATURE = 0x2 - ATTR_VOL_SIZE = 0x4 - ATTR_VOL_SPACEAVAIL = 0x10 - ATTR_VOL_SPACEFREE = 0x8 - ATTR_VOL_SPACEUSED = 0x800000 - ATTR_VOL_UUID = 0x40000 - ATTR_VOL_VALIDMASK = 0xf087ffff - B0 = 0x0 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B230400 = 0x38400 - B2400 = 0x960 - B28800 = 0x7080 - B300 = 0x12c - B38400 = 0x9600 - B4800 = 0x12c0 - B50 = 0x32 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B9600 = 0x2580 - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc00c4279 - BIOCGETIF = 0x4020426b - BIOCGHDRCMPLT = 0x40044274 - BIOCGRSIG = 0x40044272 - BIOCGRTIMEOUT = 0x4010426e - BIOCGSEESENT = 0x40044276 - BIOCGSTATS = 0x4008426f - BIOCIMMEDIATE = 0x80044270 - BIOCPROMISC = 0x20004269 - BIOCSBLEN = 0xc0044266 - BIOCSDLT = 0x80044278 - BIOCSETF = 0x80104267 - BIOCSETFNR = 0x8010427e - BIOCSETIF = 0x8020426c - BIOCSHDRCMPLT = 0x80044275 - BIOCSRSIG = 0x80044273 - BIOCSRTIMEOUT = 0x8010426d - BIOCSSEESENT = 0x80044277 - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x4 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_DIV = 0x30 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x80000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_W = 0x0 - BPF_X = 0x8 - BRKINT = 0x2 - BS0 = 0x0 - BS1 = 0x8000 - BSDLY = 0x8000 - CFLUSH = 0xf - CLOCAL = 0x8000 - CLOCK_MONOTONIC = 0x6 - CLOCK_MONOTONIC_RAW = 0x4 - CLOCK_MONOTONIC_RAW_APPROX = 0x5 - CLOCK_PROCESS_CPUTIME_ID = 0xc - CLOCK_REALTIME = 0x0 - CLOCK_THREAD_CPUTIME_ID = 0x10 - CLOCK_UPTIME_RAW = 0x8 - CLOCK_UPTIME_RAW_APPROX = 0x9 - CLONE_NOFOLLOW = 0x1 - CLONE_NOOWNERCOPY = 0x2 - CR0 = 0x0 - CR1 = 0x1000 - CR2 = 0x2000 - CR3 = 0x3000 - CRDLY = 0x3000 - CREAD = 0x800 - CRTSCTS = 0x30000 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0x14 - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTLIOCGINFO = 0xc0644e03 - CTL_HW = 0x6 - CTL_KERN = 0x1 - CTL_MAXNAME = 0xc - CTL_NET = 0x4 - DLT_A429 = 0xb8 - DLT_A653_ICM = 0xb9 - DLT_AIRONET_HEADER = 0x78 - DLT_AOS = 0xde - DLT_APPLE_IP_OVER_IEEE1394 = 0x8a - DLT_ARCNET = 0x7 - DLT_ARCNET_LINUX = 0x81 - DLT_ATM_CLIP = 0x13 - DLT_ATM_RFC1483 = 0xb - DLT_AURORA = 0x7e - DLT_AX25 = 0x3 - DLT_AX25_KISS = 0xca - DLT_BACNET_MS_TP = 0xa5 - DLT_BLUETOOTH_HCI_H4 = 0xbb - DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 - DLT_CAN20B = 0xbe - DLT_CAN_SOCKETCAN = 0xe3 - DLT_CHAOS = 0x5 - DLT_CHDLC = 0x68 - DLT_CISCO_IOS = 0x76 - DLT_C_HDLC = 0x68 - DLT_C_HDLC_WITH_DIR = 0xcd - DLT_DBUS = 0xe7 - DLT_DECT = 0xdd - DLT_DOCSIS = 0x8f - DLT_DVB_CI = 0xeb - DLT_ECONET = 0x73 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0x6d - DLT_ERF = 0xc5 - DLT_ERF_ETH = 0xaf - DLT_ERF_POS = 0xb0 - DLT_FC_2 = 0xe0 - DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 - DLT_FDDI = 0xa - DLT_FLEXRAY = 0xd2 - DLT_FRELAY = 0x6b - DLT_FRELAY_WITH_DIR = 0xce - DLT_GCOM_SERIAL = 0xad - DLT_GCOM_T1E1 = 0xac - DLT_GPF_F = 0xab - DLT_GPF_T = 0xaa - DLT_GPRS_LLC = 0xa9 - DLT_GSMTAP_ABIS = 0xda - DLT_GSMTAP_UM = 0xd9 - DLT_HHDLC = 0x79 - DLT_IBM_SN = 0x92 - DLT_IBM_SP = 0x91 - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_IEEE802_11_RADIO_AVS = 0xa3 - DLT_IEEE802_15_4 = 0xc3 - DLT_IEEE802_15_4_LINUX = 0xbf - DLT_IEEE802_15_4_NOFCS = 0xe6 - DLT_IEEE802_15_4_NONASK_PHY = 0xd7 - DLT_IEEE802_16_MAC_CPS = 0xbc - DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 - DLT_IPFILTER = 0x74 - DLT_IPMB = 0xc7 - DLT_IPMB_LINUX = 0xd1 - DLT_IPNET = 0xe2 - DLT_IPOIB = 0xf2 - DLT_IPV4 = 0xe4 - DLT_IPV6 = 0xe5 - DLT_IP_OVER_FC = 0x7a - DLT_JUNIPER_ATM1 = 0x89 - DLT_JUNIPER_ATM2 = 0x87 - DLT_JUNIPER_ATM_CEMIC = 0xee - DLT_JUNIPER_CHDLC = 0xb5 - DLT_JUNIPER_ES = 0x84 - DLT_JUNIPER_ETHER = 0xb2 - DLT_JUNIPER_FIBRECHANNEL = 0xea - DLT_JUNIPER_FRELAY = 0xb4 - DLT_JUNIPER_GGSN = 0x85 - DLT_JUNIPER_ISM = 0xc2 - DLT_JUNIPER_MFR = 0x86 - DLT_JUNIPER_MLFR = 0x83 - DLT_JUNIPER_MLPPP = 0x82 - DLT_JUNIPER_MONITOR = 0xa4 - DLT_JUNIPER_PIC_PEER = 0xae - DLT_JUNIPER_PPP = 0xb3 - DLT_JUNIPER_PPPOE = 0xa7 - DLT_JUNIPER_PPPOE_ATM = 0xa8 - DLT_JUNIPER_SERVICES = 0x88 - DLT_JUNIPER_SRX_E2E = 0xe9 - DLT_JUNIPER_ST = 0xc8 - DLT_JUNIPER_VP = 0xb7 - DLT_JUNIPER_VS = 0xe8 - DLT_LAPB_WITH_DIR = 0xcf - DLT_LAPD = 0xcb - DLT_LIN = 0xd4 - DLT_LINUX_EVDEV = 0xd8 - DLT_LINUX_IRDA = 0x90 - DLT_LINUX_LAPD = 0xb1 - DLT_LINUX_PPP_WITHDIRECTION = 0xa6 - DLT_LINUX_SLL = 0x71 - DLT_LOOP = 0x6c - DLT_LTALK = 0x72 - DLT_MATCHING_MAX = 0x10a - DLT_MATCHING_MIN = 0x68 - DLT_MFR = 0xb6 - DLT_MOST = 0xd3 - DLT_MPEG_2_TS = 0xf3 - DLT_MPLS = 0xdb - DLT_MTP2 = 0x8c - DLT_MTP2_WITH_PHDR = 0x8b - DLT_MTP3 = 0x8d - DLT_MUX27010 = 0xec - DLT_NETANALYZER = 0xf0 - DLT_NETANALYZER_TRANSPARENT = 0xf1 - DLT_NFC_LLCP = 0xf5 - DLT_NFLOG = 0xef - DLT_NG40 = 0xf4 - DLT_NULL = 0x0 - DLT_PCI_EXP = 0x7d - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x12 - DLT_PPI = 0xc0 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0x10 - DLT_PPP_ETHER = 0x33 - DLT_PPP_PPPD = 0xa6 - DLT_PPP_SERIAL = 0x32 - DLT_PPP_WITH_DIR = 0xcc - DLT_PPP_WITH_DIRECTION = 0xa6 - DLT_PRISM_HEADER = 0x77 - DLT_PRONET = 0x4 - DLT_RAIF1 = 0xc6 - DLT_RAW = 0xc - DLT_RIO = 0x7c - DLT_SCCP = 0x8e - DLT_SITA = 0xc4 - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xf - DLT_STANAG_5066_D_PDU = 0xed - DLT_SUNATM = 0x7b - DLT_SYMANTEC_FIREWALL = 0x63 - DLT_TZSP = 0x80 - DLT_USB = 0xba - DLT_USB_DARWIN = 0x10a - DLT_USB_LINUX = 0xbd - DLT_USB_LINUX_MMAPPED = 0xdc - DLT_USER0 = 0x93 - DLT_USER1 = 0x94 - DLT_USER10 = 0x9d - DLT_USER11 = 0x9e - DLT_USER12 = 0x9f - DLT_USER13 = 0xa0 - DLT_USER14 = 0xa1 - DLT_USER15 = 0xa2 - DLT_USER2 = 0x95 - DLT_USER3 = 0x96 - DLT_USER4 = 0x97 - DLT_USER5 = 0x98 - DLT_USER6 = 0x99 - DLT_USER7 = 0x9a - DLT_USER8 = 0x9b - DLT_USER9 = 0x9c - DLT_WIHART = 0xdf - DLT_X2E_SERIAL = 0xd5 - DLT_X2E_XORAYA = 0xd6 - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - DT_WHT = 0xe - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EVFILT_AIO = -0x3 - EVFILT_EXCEPT = -0xf - EVFILT_FS = -0x9 - EVFILT_MACHPORT = -0x8 - EVFILT_PROC = -0x5 - EVFILT_READ = -0x1 - EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0x11 - EVFILT_THREADMARKER = 0x11 - EVFILT_TIMER = -0x7 - EVFILT_USER = -0xa - EVFILT_VM = -0xc - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_DISPATCH = 0x80 - EV_DISPATCH2 = 0x180 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG0 = 0x1000 - EV_FLAG1 = 0x2000 - EV_ONESHOT = 0x10 - EV_OOBAND = 0x2000 - EV_POLL = 0x1000 - EV_RECEIPT = 0x40 - EV_SYSFLAGS = 0xf000 - EV_UDATA_SPECIFIC = 0x100 - EV_VANISHED = 0x200 - EXTA = 0x4b00 - EXTB = 0x9600 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x400 - FF0 = 0x0 - FF1 = 0x4000 - FFDLY = 0x4000 - FLUSHO = 0x800000 - FSOPT_ATTR_CMN_EXTENDED = 0x20 - FSOPT_NOFOLLOW = 0x1 - FSOPT_NOINMEMUPDATE = 0x2 - FSOPT_PACK_INVAL_ATTRS = 0x8 - FSOPT_REPORT_FULLSIZE = 0x4 - FSOPT_RETURN_REALDEV = 0x200 - F_ADDFILESIGS = 0x3d - F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 - F_ADDFILESIGS_INFO = 0x67 - F_ADDFILESIGS_RETURN = 0x61 - F_ADDFILESUPPL = 0x68 - F_ADDSIGS = 0x3b - F_ALLOCATEALL = 0x4 - F_ALLOCATECONTIG = 0x2 - F_BARRIERFSYNC = 0x55 - F_CHECK_LV = 0x62 - F_CHKCLEAN = 0x29 - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0x43 - F_FINDSIGS = 0x4e - F_FLUSH_DATA = 0x28 - F_FREEZE_FS = 0x35 - F_FULLFSYNC = 0x33 - F_GETCODEDIR = 0x48 - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0x7 - F_GETLKPID = 0x42 - F_GETNOSIGPIPE = 0x4a - F_GETOWN = 0x5 - F_GETPATH = 0x32 - F_GETPATH_MTMINFO = 0x47 - F_GETPATH_NOFIRMLINK = 0x66 - F_GETPROTECTIONCLASS = 0x3f - F_GETPROTECTIONLEVEL = 0x4d - F_GETSIGSINFO = 0x69 - F_GLOBAL_NOCACHE = 0x37 - F_LOG2PHYS = 0x31 - F_LOG2PHYS_EXT = 0x41 - F_NOCACHE = 0x30 - F_NODIRECT = 0x3e - F_OK = 0x0 - F_PATHPKG_CHECK = 0x34 - F_PEOFPOSMODE = 0x3 - F_PREALLOCATE = 0x2a - F_PUNCHHOLE = 0x63 - F_RDADVISE = 0x2c - F_RDAHEAD = 0x2d - F_RDLCK = 0x1 - F_SETBACKINGSTORE = 0x46 - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0x8 - F_SETLKW = 0x9 - F_SETLKWTIMEOUT = 0xa - F_SETNOSIGPIPE = 0x49 - F_SETOWN = 0x6 - F_SETPROTECTIONCLASS = 0x40 - F_SETSIZE = 0x2b - F_SINGLE_WRITER = 0x4c - F_SPECULATIVE_READ = 0x65 - F_THAW_FS = 0x36 - F_TRANSCODEKEY = 0x4b - F_TRIM_ACTIVE_FILE = 0x64 - F_UNLCK = 0x2 - F_VOLPOSMODE = 0x4 - F_WRLCK = 0x3 - HUPCL = 0x4000 - HW_MACHINE = 0x1 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFF_ALLMULTI = 0x200 - IFF_ALTPHYS = 0x4000 - IFF_BROADCAST = 0x2 - IFF_DEBUG = 0x4 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_NOTRAILERS = 0x20 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PROMISC = 0x100 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_1822 = 0x2 - IFT_6LOWPAN = 0x40 - IFT_AAL5 = 0x31 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ATM = 0x25 - IFT_BRIDGE = 0xd1 - IFT_CARP = 0xf8 - IFT_CELLULAR = 0xff - IFT_CEPT = 0x13 - IFT_DS3 = 0x1e - IFT_ENC = 0xf4 - IFT_EON = 0x19 - IFT_ETHER = 0x6 - IFT_FAITH = 0x38 - IFT_FDDI = 0xf - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_GIF = 0x37 - IFT_HDH1822 = 0x3 - IFT_HIPPI = 0x2f - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IEEE1394 = 0x90 - IFT_IEEE8023ADLAG = 0x88 - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88026 = 0xa - IFT_L2VLAN = 0x87 - IFT_LAPB = 0x10 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_NSIP = 0x1b - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PDP = 0xff - IFT_PFLOG = 0xf5 - IFT_PFSYNC = 0xf6 - IFT_PKTAP = 0xfe - IFT_PPP = 0x17 - IFT_PROPMUX = 0x36 - IFT_PROPVIRTUAL = 0x35 - IFT_PTPSERIAL = 0x16 - IFT_RS232 = 0x21 - IFT_SDLC = 0x11 - IFT_SIP = 0x1f - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SONET = 0x27 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_STARLAN = 0xb - IFT_STF = 0x39 - IFT_T1 = 0x12 - IFT_ULTRA = 0x1d - IFT_V35 = 0x2d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LINKLOCALNETNUM = 0xa9fe0000 - IN_LOOPBACKNET = 0x7f - IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x400473d1 - IPPROTO_3PC = 0x22 - IPPROTO_ADFS = 0x44 - IPPROTO_AH = 0x33 - IPPROTO_AHIP = 0x3d - IPPROTO_APES = 0x63 - IPPROTO_ARGUS = 0xd - IPPROTO_AX25 = 0x5d - IPPROTO_BHA = 0x31 - IPPROTO_BLT = 0x1e - IPPROTO_BRSATMON = 0x4c - IPPROTO_CFTP = 0x3e - IPPROTO_CHAOS = 0x10 - IPPROTO_CMTP = 0x26 - IPPROTO_CPHB = 0x49 - IPPROTO_CPNX = 0x48 - IPPROTO_DDP = 0x25 - IPPROTO_DGP = 0x56 - IPPROTO_DIVERT = 0xfe - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_EMCON = 0xe - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GMTP = 0x64 - IPPROTO_GRE = 0x2f - IPPROTO_HELLO = 0x3f - IPPROTO_HMP = 0x14 - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IDPR = 0x23 - IPPROTO_IDRP = 0x2d - IPPROTO_IGMP = 0x2 - IPPROTO_IGP = 0x55 - IPPROTO_IGRP = 0x58 - IPPROTO_IL = 0x28 - IPPROTO_INLSP = 0x34 - IPPROTO_INP = 0x20 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPCV = 0x47 - IPPROTO_IPEIP = 0x5e - IPPROTO_IPIP = 0x4 - IPPROTO_IPPC = 0x43 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_IRTP = 0x1c - IPPROTO_KRYPTOLAN = 0x41 - IPPROTO_LARP = 0x5b - IPPROTO_LEAF1 = 0x19 - IPPROTO_LEAF2 = 0x1a - IPPROTO_MAX = 0x100 - IPPROTO_MAXID = 0x34 - IPPROTO_MEAS = 0x13 - IPPROTO_MHRP = 0x30 - IPPROTO_MICP = 0x5f - IPPROTO_MTP = 0x5c - IPPROTO_MUX = 0x12 - IPPROTO_ND = 0x4d - IPPROTO_NHRP = 0x36 - IPPROTO_NONE = 0x3b - IPPROTO_NSP = 0x1f - IPPROTO_NVPII = 0xb - IPPROTO_OSPFIGP = 0x59 - IPPROTO_PGM = 0x71 - IPPROTO_PIGP = 0x9 - IPPROTO_PIM = 0x67 - IPPROTO_PRM = 0x15 - IPPROTO_PUP = 0xc - IPPROTO_PVP = 0x4b - IPPROTO_RAW = 0xff - IPPROTO_RCCMON = 0xa - IPPROTO_RDP = 0x1b - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_RVD = 0x42 - IPPROTO_SATEXPAK = 0x40 - IPPROTO_SATMON = 0x45 - IPPROTO_SCCSP = 0x60 - IPPROTO_SCTP = 0x84 - IPPROTO_SDRP = 0x2a - IPPROTO_SEP = 0x21 - IPPROTO_SRPC = 0x5a - IPPROTO_ST = 0x7 - IPPROTO_SVMTP = 0x52 - IPPROTO_SWIPE = 0x35 - IPPROTO_TCF = 0x57 - IPPROTO_TCP = 0x6 - IPPROTO_TP = 0x1d - IPPROTO_TPXX = 0x27 - IPPROTO_TRUNK1 = 0x17 - IPPROTO_TRUNK2 = 0x18 - IPPROTO_TTP = 0x54 - IPPROTO_UDP = 0x11 - IPPROTO_VINES = 0x53 - IPPROTO_VISA = 0x46 - IPPROTO_VMTP = 0x51 - IPPROTO_WBEXPAK = 0x4f - IPPROTO_WBMON = 0x4e - IPPROTO_WSN = 0x4a - IPPROTO_XNET = 0xf - IPPROTO_XTP = 0x24 - IPV6_2292DSTOPTS = 0x17 - IPV6_2292HOPLIMIT = 0x14 - IPV6_2292HOPOPTS = 0x16 - IPV6_2292NEXTHOP = 0x15 - IPV6_2292PKTINFO = 0x13 - IPV6_2292PKTOPTIONS = 0x19 - IPV6_2292RTHDR = 0x18 - IPV6_3542DSTOPTS = 0x32 - IPV6_3542HOPLIMIT = 0x2f - IPV6_3542HOPOPTS = 0x31 - IPV6_3542NEXTHOP = 0x30 - IPV6_3542PKTINFO = 0x2e - IPV6_3542RTHDR = 0x33 - IPV6_ADDR_MC_FLAGS_PREFIX = 0x20 - IPV6_ADDR_MC_FLAGS_TRANSIENT = 0x10 - IPV6_ADDR_MC_FLAGS_UNICAST_BASED = 0x30 - IPV6_AUTOFLOWLABEL = 0x3b - IPV6_BINDV6ONLY = 0x1b - IPV6_BOUND_IF = 0x7d - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_DONTFRAG = 0x3e - IPV6_DSTOPTS = 0x32 - IPV6_FAITH = 0x1d - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FLOW_ECN_MASK = 0x3000 - IPV6_FRAGTTL = 0x3c - IPV6_FW_ADD = 0x1e - IPV6_FW_DEL = 0x1f - IPV6_FW_FLUSH = 0x20 - IPV6_FW_GET = 0x22 - IPV6_FW_ZERO = 0x21 - IPV6_HLIMDEC = 0x1 - IPV6_HOPLIMIT = 0x2f - IPV6_HOPOPTS = 0x31 - IPV6_IPSEC_POLICY = 0x1c - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXOPTHDR = 0x800 - IPV6_MAXPACKET = 0xffff - IPV6_MAX_GROUP_SRC_FILTER = 0x200 - IPV6_MAX_MEMBERSHIPS = 0xfff - IPV6_MAX_SOCK_SRC_FILTER = 0x80 - IPV6_MIN_MEMBERSHIPS = 0x1f - IPV6_MMTU = 0x500 - IPV6_MSFILTER = 0x4a - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_PATHMTU = 0x2c - IPV6_PKTINFO = 0x2e - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_PREFER_TEMPADDR = 0x3f - IPV6_RECVDSTOPTS = 0x28 - IPV6_RECVHOPLIMIT = 0x25 - IPV6_RECVHOPOPTS = 0x27 - IPV6_RECVPATHMTU = 0x2b - IPV6_RECVPKTINFO = 0x3d - IPV6_RECVRTHDR = 0x26 - IPV6_RECVTCLASS = 0x23 - IPV6_RTHDR = 0x33 - IPV6_RTHDRDSTOPTS = 0x39 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x24 - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2a - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IP_ADD_MEMBERSHIP = 0xc - IP_ADD_SOURCE_MEMBERSHIP = 0x46 - IP_BLOCK_SOURCE = 0x48 - IP_BOUND_IF = 0x19 - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DONTFRAG = 0x1c - IP_DROP_MEMBERSHIP = 0xd - IP_DROP_SOURCE_MEMBERSHIP = 0x47 - IP_DUMMYNET_CONFIGURE = 0x3c - IP_DUMMYNET_DEL = 0x3d - IP_DUMMYNET_FLUSH = 0x3e - IP_DUMMYNET_GET = 0x40 - IP_FAITH = 0x16 - IP_FW_ADD = 0x28 - IP_FW_DEL = 0x29 - IP_FW_FLUSH = 0x2a - IP_FW_GET = 0x2c - IP_FW_RESETLOG = 0x2d - IP_FW_ZERO = 0x2b - IP_HDRINCL = 0x2 - IP_IPSEC_POLICY = 0x15 - IP_MAXPACKET = 0xffff - IP_MAX_GROUP_SRC_FILTER = 0x200 - IP_MAX_MEMBERSHIPS = 0xfff - IP_MAX_SOCK_MUTE_FILTER = 0x80 - IP_MAX_SOCK_SRC_FILTER = 0x80 - IP_MF = 0x2000 - IP_MIN_MEMBERSHIPS = 0x1f - IP_MSFILTER = 0x4a - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_IFINDEX = 0x42 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_MULTICAST_VIF = 0xe - IP_NAT__XXX = 0x37 - IP_OFFMASK = 0x1fff - IP_OLD_FW_ADD = 0x32 - IP_OLD_FW_DEL = 0x33 - IP_OLD_FW_FLUSH = 0x34 - IP_OLD_FW_GET = 0x36 - IP_OLD_FW_RESETLOG = 0x38 - IP_OLD_FW_ZERO = 0x35 - IP_OPTIONS = 0x1 - IP_PKTINFO = 0x1a - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVIF = 0x14 - IP_RECVOPTS = 0x5 - IP_RECVPKTINFO = 0x1a - IP_RECVRETOPTS = 0x6 - IP_RECVTOS = 0x1b - IP_RECVTTL = 0x18 - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_RSVP_OFF = 0x10 - IP_RSVP_ON = 0xf - IP_RSVP_VIF_OFF = 0x12 - IP_RSVP_VIF_ON = 0x11 - IP_STRIPHDR = 0x17 - IP_TOS = 0x3 - IP_TRAFFIC_MGT_BACKGROUND = 0x41 - IP_TTL = 0x4 - IP_UNBLOCK_SOURCE = 0x49 - ISIG = 0x80 - ISTRIP = 0x20 - IUTF8 = 0x4000 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - KERN_HOSTNAME = 0xa - KERN_OSRELEASE = 0x2 - KERN_OSTYPE = 0x1 - KERN_VERSION = 0x4 - LOCAL_PEERCRED = 0x1 - LOCAL_PEEREPID = 0x3 - LOCAL_PEEREUUID = 0x5 - LOCAL_PEERPID = 0x2 - LOCAL_PEERTOKEN = 0x6 - LOCAL_PEERUUID = 0x4 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_CAN_REUSE = 0x9 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x5 - MADV_FREE_REUSABLE = 0x7 - MADV_FREE_REUSE = 0x8 - MADV_NORMAL = 0x0 - MADV_PAGEOUT = 0xa - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_WILLNEED = 0x3 - MADV_ZERO_WIRED_PAGES = 0x6 - MAP_32BIT = 0x8000 - MAP_ANON = 0x1000 - MAP_ANONYMOUS = 0x1000 - MAP_COPY = 0x2 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_HASSEMAPHORE = 0x200 - MAP_JIT = 0x800 - MAP_NOCACHE = 0x400 - MAP_NOEXTEND = 0x100 - MAP_NORESERVE = 0x40 - MAP_PRIVATE = 0x2 - MAP_RENAME = 0x20 - MAP_RESERVED0080 = 0x80 - MAP_RESILIENT_CODESIGN = 0x2000 - MAP_RESILIENT_MEDIA = 0x4000 - MAP_SHARED = 0x1 - MAP_TRANSLATED_ALLOW_EXECUTE = 0x20000 - MAP_UNIX03 = 0x40000 - MCAST_BLOCK_SOURCE = 0x54 - MCAST_EXCLUDE = 0x2 - MCAST_INCLUDE = 0x1 - MCAST_JOIN_GROUP = 0x50 - MCAST_JOIN_SOURCE_GROUP = 0x52 - MCAST_LEAVE_GROUP = 0x51 - MCAST_LEAVE_SOURCE_GROUP = 0x53 - MCAST_UNBLOCK_SOURCE = 0x55 - MCAST_UNDEFINED = 0x0 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MNT_ASYNC = 0x40 - MNT_AUTOMOUNTED = 0x400000 - MNT_CMDFLAGS = 0xf0000 - MNT_CPROTECT = 0x80 - MNT_DEFWRITE = 0x2000000 - MNT_DONTBROWSE = 0x100000 - MNT_DOVOLFS = 0x8000 - MNT_DWAIT = 0x4 - MNT_EXPORTED = 0x100 - MNT_EXT_ROOT_DATA_VOL = 0x1 - MNT_FORCE = 0x80000 - MNT_IGNORE_OWNERSHIP = 0x200000 - MNT_JOURNALED = 0x800000 - MNT_LOCAL = 0x1000 - MNT_MULTILABEL = 0x4000000 - MNT_NOATIME = 0x10000000 - MNT_NOBLOCK = 0x20000 - MNT_NODEV = 0x10 - MNT_NOEXEC = 0x4 - MNT_NOSUID = 0x8 - MNT_NOUSERXATTR = 0x1000000 - MNT_NOWAIT = 0x2 - MNT_QUARANTINE = 0x400 - MNT_QUOTA = 0x2000 - MNT_RDONLY = 0x1 - MNT_RELOAD = 0x40000 - MNT_REMOVABLE = 0x200 - MNT_ROOTFS = 0x4000 - MNT_SNAPSHOT = 0x40000000 - MNT_STRICTATIME = 0x80000000 - MNT_SYNCHRONOUS = 0x2 - MNT_UNION = 0x20 - MNT_UNKNOWNPERMISSIONS = 0x200000 - MNT_UPDATE = 0x10000 - MNT_VISFLAGMASK = 0xd7f0f7ff - MNT_WAIT = 0x1 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOF = 0x100 - MSG_EOR = 0x8 - MSG_FLUSH = 0x400 - MSG_HAVEMORE = 0x2000 - MSG_HOLD = 0x800 - MSG_NEEDSA = 0x10000 - MSG_NOSIGNAL = 0x80000 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_RCVMORE = 0x4000 - MSG_SEND = 0x1000 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 - MSG_WAITSTREAM = 0x200 - MS_ASYNC = 0x1 - MS_DEACTIVATE = 0x8 - MS_INVALIDATE = 0x2 - MS_KILLPAGES = 0x4 - MS_SYNC = 0x10 - NAME_MAX = 0xff - NET_RT_DUMP = 0x1 - NET_RT_DUMP2 = 0x7 - NET_RT_FLAGS = 0x2 - NET_RT_FLAGS_PRIV = 0xa - NET_RT_IFLIST = 0x3 - NET_RT_IFLIST2 = 0x6 - NET_RT_MAXID = 0xb - NET_RT_STAT = 0x4 - NET_RT_TRASH = 0x5 - NFDBITS = 0x20 - NL0 = 0x0 - NL1 = 0x100 - NL2 = 0x200 - NL3 = 0x300 - NLDLY = 0x300 - NOFLSH = 0x80000000 - NOKERNINFO = 0x2000000 - NOTE_ABSOLUTE = 0x8 - NOTE_ATTRIB = 0x8 - NOTE_BACKGROUND = 0x40 - NOTE_CHILD = 0x4 - NOTE_CRITICAL = 0x20 - NOTE_DELETE = 0x1 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXITSTATUS = 0x4000000 - NOTE_EXIT_CSERROR = 0x40000 - NOTE_EXIT_DECRYPTFAIL = 0x10000 - NOTE_EXIT_DETAIL = 0x2000000 - NOTE_EXIT_DETAIL_MASK = 0x70000 - NOTE_EXIT_MEMORY = 0x20000 - NOTE_EXIT_REPARENTED = 0x80000 - NOTE_EXTEND = 0x4 - NOTE_FFAND = 0x40000000 - NOTE_FFCOPY = 0xc0000000 - NOTE_FFCTRLMASK = 0xc0000000 - NOTE_FFLAGSMASK = 0xffffff - NOTE_FFNOP = 0x0 - NOTE_FFOR = 0x80000000 - NOTE_FORK = 0x40000000 - NOTE_FUNLOCK = 0x100 - NOTE_LEEWAY = 0x10 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_MACHTIME = 0x100 - NOTE_MACH_CONTINUOUS_TIME = 0x80 - NOTE_NONE = 0x80 - NOTE_NSECONDS = 0x4 - NOTE_OOB = 0x2 - NOTE_PCTRLMASK = -0x100000 - NOTE_PDATAMASK = 0xfffff - NOTE_REAP = 0x10000000 - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_SECONDS = 0x1 - NOTE_SIGNAL = 0x8000000 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_TRIGGER = 0x1000000 - NOTE_USECONDS = 0x2 - NOTE_VM_ERROR = 0x10000000 - NOTE_VM_PRESSURE = 0x80000000 - NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 - NOTE_VM_PRESSURE_TERMINATE = 0x40000000 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - OFDEL = 0x20000 - OFILL = 0x80 - ONLCR = 0x2 - ONLRET = 0x40 - ONOCR = 0x20 - ONOEOT = 0x8 - OPOST = 0x1 - OXTABS = 0x4 - O_ACCMODE = 0x3 - O_ALERT = 0x20000000 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x1000000 - O_CREAT = 0x200 - O_DIRECTORY = 0x100000 - O_DP_GETRAWENCRYPTED = 0x1 - O_DP_GETRAWUNENCRYPTED = 0x2 - O_DSYNC = 0x400000 - O_EVTONLY = 0x8000 - O_EXCL = 0x800 - O_EXLOCK = 0x20 - O_FSYNC = 0x80 - O_NDELAY = 0x4 - O_NOCTTY = 0x20000 - O_NOFOLLOW = 0x100 - O_NOFOLLOW_ANY = 0x20000000 - O_NONBLOCK = 0x4 - O_POPUP = 0x80000000 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_SHLOCK = 0x10 - O_SYMLINK = 0x200000 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - PT_ATTACH = 0xa - PT_ATTACHEXC = 0xe - PT_CONTINUE = 0x7 - PT_DENY_ATTACH = 0x1f - PT_DETACH = 0xb - PT_FIRSTMACH = 0x20 - PT_FORCEQUOTA = 0x1e - PT_KILL = 0x8 - PT_READ_D = 0x2 - PT_READ_I = 0x1 - PT_READ_U = 0x3 - PT_SIGEXC = 0xc - PT_STEP = 0x9 - PT_THUPDATE = 0xd - PT_TRACE_ME = 0x0 - PT_WRITE_D = 0x5 - PT_WRITE_I = 0x4 - PT_WRITE_U = 0x6 - RLIMIT_AS = 0x5 - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_CPU_USAGE_MONITOR = 0x2 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_MEMLOCK = 0x6 - RLIMIT_NOFILE = 0x8 - RLIMIT_NPROC = 0x7 - RLIMIT_RSS = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_MAX = 0x8 - RTAX_NETMASK = 0x2 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_NETMASK = 0x4 - RTF_BLACKHOLE = 0x1000 - RTF_BROADCAST = 0x400000 - RTF_CLONING = 0x100 - RTF_CONDEMNED = 0x2000000 - RTF_DEAD = 0x20000000 - RTF_DELCLONE = 0x80 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_GATEWAY = 0x2 - RTF_GLOBAL = 0x40000000 - RTF_HOST = 0x4 - RTF_IFREF = 0x4000000 - RTF_IFSCOPE = 0x1000000 - RTF_LLDATA = 0x400 - RTF_LLINFO = 0x400 - RTF_LOCAL = 0x200000 - RTF_MODIFIED = 0x20 - RTF_MULTICAST = 0x800000 - RTF_NOIFREF = 0x2000 - RTF_PINNED = 0x100000 - RTF_PRCLONING = 0x10000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_PROTO3 = 0x40000 - RTF_PROXY = 0x8000000 - RTF_REJECT = 0x8 - RTF_ROUTER = 0x10000000 - RTF_STATIC = 0x800 - RTF_UP = 0x1 - RTF_WASCLONED = 0x20000 - RTF_XRESOLVE = 0x200 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_DELMADDR = 0x10 - RTM_GET = 0x4 - RTM_GET2 = 0x14 - RTM_IFINFO = 0xe - RTM_IFINFO2 = 0x12 - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_NEWMADDR = 0xf - RTM_NEWMADDR2 = 0x13 - RTM_OLDADD = 0x9 - RTM_OLDDEL = 0xa - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - SCM_CREDS = 0x3 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x2 - SCM_TIMESTAMP_MONOTONIC = 0x4 - SEEK_CUR = 0x1 - SEEK_DATA = 0x4 - SEEK_END = 0x2 - SEEK_HOLE = 0x3 - SEEK_SET = 0x0 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80206931 - SIOCAIFADDR = 0x8040691a - SIOCARPIPLL = 0xc0206928 - SIOCATMARK = 0x40047307 - SIOCAUTOADDR = 0xc0206926 - SIOCAUTONETMASK = 0x80206927 - SIOCDELMULTI = 0x80206932 - SIOCDIFADDR = 0x80206919 - SIOCDIFPHYADDR = 0x80206941 - SIOCGDRVSPEC = 0xc028697b - SIOCGETVLAN = 0xc020697f - SIOCGHIWAT = 0x40047301 - SIOCGIF6LOWPAN = 0xc02069c5 - SIOCGIFADDR = 0xc0206921 - SIOCGIFALTMTU = 0xc0206948 - SIOCGIFASYNCMAP = 0xc020697c - SIOCGIFBOND = 0xc0206947 - SIOCGIFBRDADDR = 0xc0206923 - SIOCGIFCAP = 0xc020695b - SIOCGIFCONF = 0xc00c6924 - SIOCGIFDEVMTU = 0xc0206944 - SIOCGIFDSTADDR = 0xc0206922 - SIOCGIFFLAGS = 0xc0206911 - SIOCGIFFUNCTIONALTYPE = 0xc02069ad - SIOCGIFGENERIC = 0xc020693a - SIOCGIFKPI = 0xc0206987 - SIOCGIFMAC = 0xc0206982 - SIOCGIFMEDIA = 0xc02c6938 - SIOCGIFMETRIC = 0xc0206917 - SIOCGIFMTU = 0xc0206933 - SIOCGIFNETMASK = 0xc0206925 - SIOCGIFPDSTADDR = 0xc0206940 - SIOCGIFPHYS = 0xc0206935 - SIOCGIFPSRCADDR = 0xc020693f - SIOCGIFSTATUS = 0xc331693d - SIOCGIFVLAN = 0xc020697f - SIOCGIFWAKEFLAGS = 0xc0206988 - SIOCGIFXMEDIA = 0xc02c6948 - SIOCGLOWAT = 0x40047303 - SIOCGPGRP = 0x40047309 - SIOCIFCREATE = 0xc0206978 - SIOCIFCREATE2 = 0xc020697a - SIOCIFDESTROY = 0x80206979 - SIOCIFGCLONERS = 0xc0106981 - SIOCRSLVMULTI = 0xc010693b - SIOCSDRVSPEC = 0x8028697b - SIOCSETVLAN = 0x8020697e - SIOCSHIWAT = 0x80047300 - SIOCSIF6LOWPAN = 0x802069c4 - SIOCSIFADDR = 0x8020690c - SIOCSIFALTMTU = 0x80206945 - SIOCSIFASYNCMAP = 0x8020697d - SIOCSIFBOND = 0x80206946 - SIOCSIFBRDADDR = 0x80206913 - SIOCSIFCAP = 0x8020695a - SIOCSIFDSTADDR = 0x8020690e - SIOCSIFFLAGS = 0x80206910 - SIOCSIFGENERIC = 0x80206939 - SIOCSIFKPI = 0x80206986 - SIOCSIFLLADDR = 0x8020693c - SIOCSIFMAC = 0x80206983 - SIOCSIFMEDIA = 0xc0206937 - SIOCSIFMETRIC = 0x80206918 - SIOCSIFMTU = 0x80206934 - SIOCSIFNETMASK = 0x80206916 - SIOCSIFPHYADDR = 0x8040693e - SIOCSIFPHYS = 0x80206936 - SIOCSIFVLAN = 0x8020697e - SIOCSLOWAT = 0x80047302 - SIOCSPGRP = 0x80047308 - SOCK_DGRAM = 0x2 - SOCK_MAXADDRLEN = 0xff - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_LOCAL = 0x0 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 - SO_DONTROUTE = 0x10 - SO_DONTTRUNC = 0x2000 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LABEL = 0x1010 - SO_LINGER = 0x80 - SO_LINGER_SEC = 0x1080 - SO_NETSVC_MARKING_LEVEL = 0x1119 - SO_NET_SERVICE_TYPE = 0x1116 - SO_NKE = 0x1021 - SO_NOADDRERR = 0x1023 - SO_NOSIGPIPE = 0x1022 - SO_NOTIFYCONFLICT = 0x1026 - SO_NP_EXTENSIONS = 0x1083 - SO_NREAD = 0x1020 - SO_NUMRCVPKT = 0x1112 - SO_NWRITE = 0x1024 - SO_OOBINLINE = 0x100 - SO_PEERLABEL = 0x1011 - SO_RANDOMPORT = 0x1082 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_REUSESHAREUID = 0x1025 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_TIMESTAMP = 0x400 - SO_TIMESTAMP_MONOTONIC = 0x800 - SO_TRACKER_ATTRIBUTE_FLAGS_APP_APPROVED = 0x1 - SO_TRACKER_ATTRIBUTE_FLAGS_DOMAIN_SHORT = 0x4 - SO_TRACKER_ATTRIBUTE_FLAGS_TRACKER = 0x2 - SO_TRACKER_TRANSPARENCY_VERSION = 0x3 - SO_TYPE = 0x1008 - SO_UPCALLCLOSEWAIT = 0x1027 - SO_USELOOPBACK = 0x40 - SO_WANTMORE = 0x4000 - SO_WANTOOBFLAG = 0x8000 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFLNK = 0xa000 - S_IFMT = 0xf000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IFWHT = 0xe000 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISTXT = 0x200 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXGRP = 0x8 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - TAB0 = 0x0 - TAB1 = 0x400 - TAB2 = 0x800 - TAB3 = 0x4 - TABDLY = 0xc04 - TCIFLUSH = 0x1 - TCIOFF = 0x3 - TCIOFLUSH = 0x3 - TCION = 0x4 - TCOFLUSH = 0x2 - TCOOFF = 0x1 - TCOON = 0x2 - TCPOPT_CC = 0xb - TCPOPT_CCECHO = 0xd - TCPOPT_CCNEW = 0xc - TCPOPT_EOL = 0x0 - TCPOPT_FASTOPEN = 0x22 - TCPOPT_MAXSEG = 0x2 - TCPOPT_NOP = 0x1 - TCPOPT_SACK = 0x5 - TCPOPT_SACK_HDR = 0x1010500 - TCPOPT_SACK_PERMITTED = 0x4 - TCPOPT_SACK_PERMIT_HDR = 0x1010402 - TCPOPT_SIGNATURE = 0x13 - TCPOPT_TIMESTAMP = 0x8 - TCPOPT_TSTAMP_HDR = 0x101080a - TCPOPT_WINDOW = 0x3 - TCP_CONNECTIONTIMEOUT = 0x20 - TCP_CONNECTION_INFO = 0x106 - TCP_ENABLE_ECN = 0x104 - TCP_FASTOPEN = 0x105 - TCP_KEEPALIVE = 0x10 - TCP_KEEPCNT = 0x102 - TCP_KEEPINTVL = 0x101 - TCP_MAXHLEN = 0x3c - TCP_MAXOLEN = 0x28 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x4 - TCP_MAX_WINSHIFT = 0xe - TCP_MINMSS = 0xd8 - TCP_MSS = 0x200 - TCP_NODELAY = 0x1 - TCP_NOOPT = 0x8 - TCP_NOPUSH = 0x4 - TCP_NOTSENT_LOWAT = 0x201 - TCP_RXT_CONNDROPTIME = 0x80 - TCP_RXT_FINDROP = 0x100 - TCP_SENDMOREACKS = 0x103 - TCSAFLUSH = 0x2 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCONS = 0x80047462 - TIOCDCDTIMESTAMP = 0x40107458 - TIOCDRAIN = 0x2000745e - TIOCDSIMICROCODE = 0x20007455 - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLUSH = 0x80047410 - TIOCGDRAINWAIT = 0x40047456 - TIOCGETA = 0x40487413 - TIOCGETD = 0x4004741a - TIOCGPGRP = 0x40047477 - TIOCGWINSZ = 0x40087468 - TIOCIXOFF = 0x20007480 - TIOCIXON = 0x20007481 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGDTRWAIT = 0x4004745a - TIOCMGET = 0x4004746a - TIOCMODG = 0x40047403 - TIOCMODS = 0x80047404 - TIOCMSDTRWAIT = 0x8004745b - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCPTYGNAME = 0x40807453 - TIOCPTYGRANT = 0x20007454 - TIOCPTYUNLK = 0x20007452 - TIOCREMOTE = 0x80047469 - TIOCSBRK = 0x2000747b - TIOCSCONS = 0x20007463 - TIOCSCTTY = 0x20007461 - TIOCSDRAINWAIT = 0x80047457 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x80487414 - TIOCSETAF = 0x80487416 - TIOCSETAW = 0x80487415 - TIOCSETD = 0x8004741b - TIOCSIG = 0x2000745f - TIOCSPGRP = 0x80047476 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x20007465 - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCTIMESTAMP = 0x40107459 - TIOCUCNTL = 0x80047466 - TOSTOP = 0x400000 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMADDR_CID_ANY = 0xffffffff - VMADDR_CID_HOST = 0x2 - VMADDR_CID_HYPERVISOR = 0x0 - VMADDR_CID_RESERVED = 0x1 - VMADDR_PORT_ANY = 0xffffffff - VMIN = 0x10 - VM_LOADAVG = 0x2 - VM_MACHFACTOR = 0x4 - VM_MAXID = 0x6 - VM_METER = 0x1 - VM_SWAPUSAGE = 0x5 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VT0 = 0x0 - VT1 = 0x10000 - VTDLY = 0x10000 - VTIME = 0x11 - VWERASE = 0x4 - WCONTINUED = 0x10 - WCOREFLAG = 0x80 - WEXITED = 0x4 - WNOHANG = 0x1 - WNOWAIT = 0x20 - WORDSIZE = 0x40 - WSTOPPED = 0x8 - WUNTRACED = 0x2 - XATTR_CREATE = 0x2 - XATTR_NODEFAULT = 0x10 - XATTR_NOFOLLOW = 0x1 - XATTR_NOSECURITY = 0x8 - XATTR_REPLACE = 0x4 - XATTR_SHOWCOMPRESSION = 0x20 -) - -// Errors -const ( - E2BIG = syscall.Errno(0x7) - EACCES = syscall.Errno(0xd) - EADDRINUSE = syscall.Errno(0x30) - EADDRNOTAVAIL = syscall.Errno(0x31) - EAFNOSUPPORT = syscall.Errno(0x2f) - EAGAIN = syscall.Errno(0x23) - EALREADY = syscall.Errno(0x25) - EAUTH = syscall.Errno(0x50) - EBADARCH = syscall.Errno(0x56) - EBADEXEC = syscall.Errno(0x55) - EBADF = syscall.Errno(0x9) - EBADMACHO = syscall.Errno(0x58) - EBADMSG = syscall.Errno(0x5e) - EBADRPC = syscall.Errno(0x48) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x59) - ECHILD = syscall.Errno(0xa) - ECONNABORTED = syscall.Errno(0x35) - ECONNREFUSED = syscall.Errno(0x3d) - ECONNRESET = syscall.Errno(0x36) - EDEADLK = syscall.Errno(0xb) - EDESTADDRREQ = syscall.Errno(0x27) - EDEVERR = syscall.Errno(0x53) - EDOM = syscall.Errno(0x21) - EDQUOT = syscall.Errno(0x45) - EEXIST = syscall.Errno(0x11) - EFAULT = syscall.Errno(0xe) - EFBIG = syscall.Errno(0x1b) - EFTYPE = syscall.Errno(0x4f) - EHOSTDOWN = syscall.Errno(0x40) - EHOSTUNREACH = syscall.Errno(0x41) - EIDRM = syscall.Errno(0x5a) - EILSEQ = syscall.Errno(0x5c) - EINPROGRESS = syscall.Errno(0x24) - EINTR = syscall.Errno(0x4) - EINVAL = syscall.Errno(0x16) - EIO = syscall.Errno(0x5) - EISCONN = syscall.Errno(0x38) - EISDIR = syscall.Errno(0x15) - ELAST = syscall.Errno(0x6a) - ELOOP = syscall.Errno(0x3e) - EMFILE = syscall.Errno(0x18) - EMLINK = syscall.Errno(0x1f) - EMSGSIZE = syscall.Errno(0x28) - EMULTIHOP = syscall.Errno(0x5f) - ENAMETOOLONG = syscall.Errno(0x3f) - ENEEDAUTH = syscall.Errno(0x51) - ENETDOWN = syscall.Errno(0x32) - ENETRESET = syscall.Errno(0x34) - ENETUNREACH = syscall.Errno(0x33) - ENFILE = syscall.Errno(0x17) - ENOATTR = syscall.Errno(0x5d) - ENOBUFS = syscall.Errno(0x37) - ENODATA = syscall.Errno(0x60) - ENODEV = syscall.Errno(0x13) - ENOENT = syscall.Errno(0x2) - ENOEXEC = syscall.Errno(0x8) - ENOLCK = syscall.Errno(0x4d) - ENOLINK = syscall.Errno(0x61) - ENOMEM = syscall.Errno(0xc) - ENOMSG = syscall.Errno(0x5b) - ENOPOLICY = syscall.Errno(0x67) - ENOPROTOOPT = syscall.Errno(0x2a) - ENOSPC = syscall.Errno(0x1c) - ENOSR = syscall.Errno(0x62) - ENOSTR = syscall.Errno(0x63) - ENOSYS = syscall.Errno(0x4e) - ENOTBLK = syscall.Errno(0xf) - ENOTCONN = syscall.Errno(0x39) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x42) - ENOTRECOVERABLE = syscall.Errno(0x68) - ENOTSOCK = syscall.Errno(0x26) - ENOTSUP = syscall.Errno(0x2d) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x66) - EOVERFLOW = syscall.Errno(0x54) - EOWNERDEAD = syscall.Errno(0x69) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x2e) - EPIPE = syscall.Errno(0x20) - EPROCLIM = syscall.Errno(0x43) - EPROCUNAVAIL = syscall.Errno(0x4c) - EPROGMISMATCH = syscall.Errno(0x4b) - EPROGUNAVAIL = syscall.Errno(0x4a) - EPROTO = syscall.Errno(0x64) - EPROTONOSUPPORT = syscall.Errno(0x2b) - EPROTOTYPE = syscall.Errno(0x29) - EPWROFF = syscall.Errno(0x52) - EQFULL = syscall.Errno(0x6a) - ERANGE = syscall.Errno(0x22) - EREMOTE = syscall.Errno(0x47) - EROFS = syscall.Errno(0x1e) - ERPCMISMATCH = syscall.Errno(0x49) - ESHLIBVERS = syscall.Errno(0x57) - ESHUTDOWN = syscall.Errno(0x3a) - ESOCKTNOSUPPORT = syscall.Errno(0x2c) - ESPIPE = syscall.Errno(0x1d) - ESRCH = syscall.Errno(0x3) - ESTALE = syscall.Errno(0x46) - ETIME = syscall.Errno(0x65) - ETIMEDOUT = syscall.Errno(0x3c) - ETOOMANYREFS = syscall.Errno(0x3b) - ETXTBSY = syscall.Errno(0x1a) - EUSERS = syscall.Errno(0x44) - EWOULDBLOCK = syscall.Errno(0x23) - EXDEV = syscall.Errno(0x12) -) - -// Signals -const ( - SIGABRT = syscall.Signal(0x6) - SIGALRM = syscall.Signal(0xe) - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x14) - SIGCONT = syscall.Signal(0x13) - SIGEMT = syscall.Signal(0x7) - SIGFPE = syscall.Signal(0x8) - SIGHUP = syscall.Signal(0x1) - SIGILL = syscall.Signal(0x4) - SIGINFO = syscall.Signal(0x1d) - SIGINT = syscall.Signal(0x2) - SIGIO = syscall.Signal(0x17) - SIGIOT = syscall.Signal(0x6) - SIGKILL = syscall.Signal(0x9) - SIGPIPE = syscall.Signal(0xd) - SIGPROF = syscall.Signal(0x1b) - SIGQUIT = syscall.Signal(0x3) - SIGSEGV = syscall.Signal(0xb) - SIGSTOP = syscall.Signal(0x11) - SIGSYS = syscall.Signal(0xc) - SIGTERM = syscall.Signal(0xf) - SIGTRAP = syscall.Signal(0x5) - SIGTSTP = syscall.Signal(0x12) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x10) - SIGUSR1 = syscall.Signal(0x1e) - SIGUSR2 = syscall.Signal(0x1f) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "device not configured"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EDEADLK", "resource deadlock avoided"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "resource busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "cross-device link"}, - {19, "ENODEV", "operation not supported by device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "result too large"}, - {35, "EAGAIN", "resource temporarily unavailable"}, - {36, "EINPROGRESS", "operation now in progress"}, - {37, "EALREADY", "operation already in progress"}, - {38, "ENOTSOCK", "socket operation on non-socket"}, - {39, "EDESTADDRREQ", "destination address required"}, - {40, "EMSGSIZE", "message too long"}, - {41, "EPROTOTYPE", "protocol wrong type for socket"}, - {42, "ENOPROTOOPT", "protocol not available"}, - {43, "EPROTONOSUPPORT", "protocol not supported"}, - {44, "ESOCKTNOSUPPORT", "socket type not supported"}, - {45, "ENOTSUP", "operation not supported"}, - {46, "EPFNOSUPPORT", "protocol family not supported"}, - {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, - {48, "EADDRINUSE", "address already in use"}, - {49, "EADDRNOTAVAIL", "can't assign requested address"}, - {50, "ENETDOWN", "network is down"}, - {51, "ENETUNREACH", "network is unreachable"}, - {52, "ENETRESET", "network dropped connection on reset"}, - {53, "ECONNABORTED", "software caused connection abort"}, - {54, "ECONNRESET", "connection reset by peer"}, - {55, "ENOBUFS", "no buffer space available"}, - {56, "EISCONN", "socket is already connected"}, - {57, "ENOTCONN", "socket is not connected"}, - {58, "ESHUTDOWN", "can't send after socket shutdown"}, - {59, "ETOOMANYREFS", "too many references: can't splice"}, - {60, "ETIMEDOUT", "operation timed out"}, - {61, "ECONNREFUSED", "connection refused"}, - {62, "ELOOP", "too many levels of symbolic links"}, - {63, "ENAMETOOLONG", "file name too long"}, - {64, "EHOSTDOWN", "host is down"}, - {65, "EHOSTUNREACH", "no route to host"}, - {66, "ENOTEMPTY", "directory not empty"}, - {67, "EPROCLIM", "too many processes"}, - {68, "EUSERS", "too many users"}, - {69, "EDQUOT", "disc quota exceeded"}, - {70, "ESTALE", "stale NFS file handle"}, - {71, "EREMOTE", "too many levels of remote in path"}, - {72, "EBADRPC", "RPC struct is bad"}, - {73, "ERPCMISMATCH", "RPC version wrong"}, - {74, "EPROGUNAVAIL", "RPC prog. not avail"}, - {75, "EPROGMISMATCH", "program version wrong"}, - {76, "EPROCUNAVAIL", "bad procedure for program"}, - {77, "ENOLCK", "no locks available"}, - {78, "ENOSYS", "function not implemented"}, - {79, "EFTYPE", "inappropriate file type or format"}, - {80, "EAUTH", "authentication error"}, - {81, "ENEEDAUTH", "need authenticator"}, - {82, "EPWROFF", "device power is off"}, - {83, "EDEVERR", "device error"}, - {84, "EOVERFLOW", "value too large to be stored in data type"}, - {85, "EBADEXEC", "bad executable (or shared library)"}, - {86, "EBADARCH", "bad CPU type in executable"}, - {87, "ESHLIBVERS", "shared library version mismatch"}, - {88, "EBADMACHO", "malformed Mach-o file"}, - {89, "ECANCELED", "operation canceled"}, - {90, "EIDRM", "identifier removed"}, - {91, "ENOMSG", "no message of desired type"}, - {92, "EILSEQ", "illegal byte sequence"}, - {93, "ENOATTR", "attribute not found"}, - {94, "EBADMSG", "bad message"}, - {95, "EMULTIHOP", "EMULTIHOP (Reserved)"}, - {96, "ENODATA", "no message available on STREAM"}, - {97, "ENOLINK", "ENOLINK (Reserved)"}, - {98, "ENOSR", "no STREAM resources"}, - {99, "ENOSTR", "not a STREAM"}, - {100, "EPROTO", "protocol error"}, - {101, "ETIME", "STREAM ioctl timeout"}, - {102, "EOPNOTSUPP", "operation not supported on socket"}, - {103, "ENOPOLICY", "policy not found"}, - {104, "ENOTRECOVERABLE", "state not recoverable"}, - {105, "EOWNERDEAD", "previous owner died"}, - {106, "EQFULL", "interface output queue is full"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, - {6, "SIGABRT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGURG", "urgent I/O condition"}, - {17, "SIGSTOP", "suspended (signal)"}, - {18, "SIGTSTP", "suspended"}, - {19, "SIGCONT", "continued"}, - {20, "SIGCHLD", "child exited"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGIO", "I/O possible"}, - {24, "SIGXCPU", "cputime limit exceeded"}, - {25, "SIGXFSZ", "filesize limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window size changes"}, - {29, "SIGINFO", "information request"}, - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go deleted file mode 100644 index e36f517..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go +++ /dev/null @@ -1,1892 +0,0 @@ -// mkerrors.sh -m64 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm64 && darwin -// +build arm64,darwin - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -m64 _const.go - -package unix - -import "syscall" - -const ( - AF_APPLETALK = 0x10 - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1c - AF_ECMA = 0x8 - AF_HYLINK = 0xf - AF_IEEE80211 = 0x25 - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x1e - AF_IPX = 0x17 - AF_ISDN = 0x1c - AF_ISO = 0x7 - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x29 - AF_NATM = 0x1f - AF_NDRV = 0x1b - AF_NETBIOS = 0x21 - AF_NS = 0x6 - AF_OSI = 0x7 - AF_PPP = 0x22 - AF_PUP = 0x4 - AF_RESERVED_36 = 0x24 - AF_ROUTE = 0x11 - AF_SIP = 0x18 - AF_SNA = 0xb - AF_SYSTEM = 0x20 - AF_SYS_CONTROL = 0x2 - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - AF_UTUN = 0x26 - AF_VSOCK = 0x28 - ALTWERASE = 0x200 - ATTR_BIT_MAP_COUNT = 0x5 - ATTR_CMN_ACCESSMASK = 0x20000 - ATTR_CMN_ACCTIME = 0x1000 - ATTR_CMN_ADDEDTIME = 0x10000000 - ATTR_CMN_BKUPTIME = 0x2000 - ATTR_CMN_CHGTIME = 0x800 - ATTR_CMN_CRTIME = 0x200 - ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000 - ATTR_CMN_DEVID = 0x2 - ATTR_CMN_DOCUMENT_ID = 0x100000 - ATTR_CMN_ERROR = 0x20000000 - ATTR_CMN_EXTENDED_SECURITY = 0x400000 - ATTR_CMN_FILEID = 0x2000000 - ATTR_CMN_FLAGS = 0x40000 - ATTR_CMN_FNDRINFO = 0x4000 - ATTR_CMN_FSID = 0x4 - ATTR_CMN_FULLPATH = 0x8000000 - ATTR_CMN_GEN_COUNT = 0x80000 - ATTR_CMN_GRPID = 0x10000 - ATTR_CMN_GRPUUID = 0x1000000 - ATTR_CMN_MODTIME = 0x400 - ATTR_CMN_NAME = 0x1 - ATTR_CMN_NAMEDATTRCOUNT = 0x80000 - ATTR_CMN_NAMEDATTRLIST = 0x100000 - ATTR_CMN_OBJID = 0x20 - ATTR_CMN_OBJPERMANENTID = 0x40 - ATTR_CMN_OBJTAG = 0x10 - ATTR_CMN_OBJTYPE = 0x8 - ATTR_CMN_OWNERID = 0x8000 - ATTR_CMN_PARENTID = 0x4000000 - ATTR_CMN_PAROBJID = 0x80 - ATTR_CMN_RETURNED_ATTRS = 0x80000000 - ATTR_CMN_SCRIPT = 0x100 - ATTR_CMN_SETMASK = 0x51c7ff00 - ATTR_CMN_USERACCESS = 0x200000 - ATTR_CMN_UUID = 0x800000 - ATTR_CMN_VALIDMASK = 0xffffffff - ATTR_CMN_VOLSETMASK = 0x6700 - ATTR_FILE_ALLOCSIZE = 0x4 - ATTR_FILE_CLUMPSIZE = 0x10 - ATTR_FILE_DATAALLOCSIZE = 0x400 - ATTR_FILE_DATAEXTENTS = 0x800 - ATTR_FILE_DATALENGTH = 0x200 - ATTR_FILE_DEVTYPE = 0x20 - ATTR_FILE_FILETYPE = 0x40 - ATTR_FILE_FORKCOUNT = 0x80 - ATTR_FILE_FORKLIST = 0x100 - ATTR_FILE_IOBLOCKSIZE = 0x8 - ATTR_FILE_LINKCOUNT = 0x1 - ATTR_FILE_RSRCALLOCSIZE = 0x2000 - ATTR_FILE_RSRCEXTENTS = 0x4000 - ATTR_FILE_RSRCLENGTH = 0x1000 - ATTR_FILE_SETMASK = 0x20 - ATTR_FILE_TOTALSIZE = 0x2 - ATTR_FILE_VALIDMASK = 0x37ff - ATTR_VOL_ALLOCATIONCLUMP = 0x40 - ATTR_VOL_ATTRIBUTES = 0x40000000 - ATTR_VOL_CAPABILITIES = 0x20000 - ATTR_VOL_DIRCOUNT = 0x400 - ATTR_VOL_ENCODINGSUSED = 0x10000 - ATTR_VOL_FILECOUNT = 0x200 - ATTR_VOL_FSTYPE = 0x1 - ATTR_VOL_INFO = 0x80000000 - ATTR_VOL_IOBLOCKSIZE = 0x80 - ATTR_VOL_MAXOBJCOUNT = 0x800 - ATTR_VOL_MINALLOCATION = 0x20 - ATTR_VOL_MOUNTEDDEVICE = 0x8000 - ATTR_VOL_MOUNTFLAGS = 0x4000 - ATTR_VOL_MOUNTPOINT = 0x1000 - ATTR_VOL_NAME = 0x2000 - ATTR_VOL_OBJCOUNT = 0x100 - ATTR_VOL_QUOTA_SIZE = 0x10000000 - ATTR_VOL_RESERVED_SIZE = 0x20000000 - ATTR_VOL_SETMASK = 0x80002000 - ATTR_VOL_SIGNATURE = 0x2 - ATTR_VOL_SIZE = 0x4 - ATTR_VOL_SPACEAVAIL = 0x10 - ATTR_VOL_SPACEFREE = 0x8 - ATTR_VOL_SPACEUSED = 0x800000 - ATTR_VOL_UUID = 0x40000 - ATTR_VOL_VALIDMASK = 0xf087ffff - B0 = 0x0 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B230400 = 0x38400 - B2400 = 0x960 - B28800 = 0x7080 - B300 = 0x12c - B38400 = 0x9600 - B4800 = 0x12c0 - B50 = 0x32 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B9600 = 0x2580 - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc00c4279 - BIOCGETIF = 0x4020426b - BIOCGHDRCMPLT = 0x40044274 - BIOCGRSIG = 0x40044272 - BIOCGRTIMEOUT = 0x4010426e - BIOCGSEESENT = 0x40044276 - BIOCGSTATS = 0x4008426f - BIOCIMMEDIATE = 0x80044270 - BIOCPROMISC = 0x20004269 - BIOCSBLEN = 0xc0044266 - BIOCSDLT = 0x80044278 - BIOCSETF = 0x80104267 - BIOCSETFNR = 0x8010427e - BIOCSETIF = 0x8020426c - BIOCSHDRCMPLT = 0x80044275 - BIOCSRSIG = 0x80044273 - BIOCSRTIMEOUT = 0x8010426d - BIOCSSEESENT = 0x80044277 - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x4 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_DIV = 0x30 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x80000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_W = 0x0 - BPF_X = 0x8 - BRKINT = 0x2 - BS0 = 0x0 - BS1 = 0x8000 - BSDLY = 0x8000 - CFLUSH = 0xf - CLOCAL = 0x8000 - CLOCK_MONOTONIC = 0x6 - CLOCK_MONOTONIC_RAW = 0x4 - CLOCK_MONOTONIC_RAW_APPROX = 0x5 - CLOCK_PROCESS_CPUTIME_ID = 0xc - CLOCK_REALTIME = 0x0 - CLOCK_THREAD_CPUTIME_ID = 0x10 - CLOCK_UPTIME_RAW = 0x8 - CLOCK_UPTIME_RAW_APPROX = 0x9 - CLONE_NOFOLLOW = 0x1 - CLONE_NOOWNERCOPY = 0x2 - CR0 = 0x0 - CR1 = 0x1000 - CR2 = 0x2000 - CR3 = 0x3000 - CRDLY = 0x3000 - CREAD = 0x800 - CRTSCTS = 0x30000 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0x14 - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTLIOCGINFO = 0xc0644e03 - CTL_HW = 0x6 - CTL_KERN = 0x1 - CTL_MAXNAME = 0xc - CTL_NET = 0x4 - DLT_A429 = 0xb8 - DLT_A653_ICM = 0xb9 - DLT_AIRONET_HEADER = 0x78 - DLT_AOS = 0xde - DLT_APPLE_IP_OVER_IEEE1394 = 0x8a - DLT_ARCNET = 0x7 - DLT_ARCNET_LINUX = 0x81 - DLT_ATM_CLIP = 0x13 - DLT_ATM_RFC1483 = 0xb - DLT_AURORA = 0x7e - DLT_AX25 = 0x3 - DLT_AX25_KISS = 0xca - DLT_BACNET_MS_TP = 0xa5 - DLT_BLUETOOTH_HCI_H4 = 0xbb - DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 - DLT_CAN20B = 0xbe - DLT_CAN_SOCKETCAN = 0xe3 - DLT_CHAOS = 0x5 - DLT_CHDLC = 0x68 - DLT_CISCO_IOS = 0x76 - DLT_C_HDLC = 0x68 - DLT_C_HDLC_WITH_DIR = 0xcd - DLT_DBUS = 0xe7 - DLT_DECT = 0xdd - DLT_DOCSIS = 0x8f - DLT_DVB_CI = 0xeb - DLT_ECONET = 0x73 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0x6d - DLT_ERF = 0xc5 - DLT_ERF_ETH = 0xaf - DLT_ERF_POS = 0xb0 - DLT_FC_2 = 0xe0 - DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 - DLT_FDDI = 0xa - DLT_FLEXRAY = 0xd2 - DLT_FRELAY = 0x6b - DLT_FRELAY_WITH_DIR = 0xce - DLT_GCOM_SERIAL = 0xad - DLT_GCOM_T1E1 = 0xac - DLT_GPF_F = 0xab - DLT_GPF_T = 0xaa - DLT_GPRS_LLC = 0xa9 - DLT_GSMTAP_ABIS = 0xda - DLT_GSMTAP_UM = 0xd9 - DLT_HHDLC = 0x79 - DLT_IBM_SN = 0x92 - DLT_IBM_SP = 0x91 - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_IEEE802_11_RADIO_AVS = 0xa3 - DLT_IEEE802_15_4 = 0xc3 - DLT_IEEE802_15_4_LINUX = 0xbf - DLT_IEEE802_15_4_NOFCS = 0xe6 - DLT_IEEE802_15_4_NONASK_PHY = 0xd7 - DLT_IEEE802_16_MAC_CPS = 0xbc - DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 - DLT_IPFILTER = 0x74 - DLT_IPMB = 0xc7 - DLT_IPMB_LINUX = 0xd1 - DLT_IPNET = 0xe2 - DLT_IPOIB = 0xf2 - DLT_IPV4 = 0xe4 - DLT_IPV6 = 0xe5 - DLT_IP_OVER_FC = 0x7a - DLT_JUNIPER_ATM1 = 0x89 - DLT_JUNIPER_ATM2 = 0x87 - DLT_JUNIPER_ATM_CEMIC = 0xee - DLT_JUNIPER_CHDLC = 0xb5 - DLT_JUNIPER_ES = 0x84 - DLT_JUNIPER_ETHER = 0xb2 - DLT_JUNIPER_FIBRECHANNEL = 0xea - DLT_JUNIPER_FRELAY = 0xb4 - DLT_JUNIPER_GGSN = 0x85 - DLT_JUNIPER_ISM = 0xc2 - DLT_JUNIPER_MFR = 0x86 - DLT_JUNIPER_MLFR = 0x83 - DLT_JUNIPER_MLPPP = 0x82 - DLT_JUNIPER_MONITOR = 0xa4 - DLT_JUNIPER_PIC_PEER = 0xae - DLT_JUNIPER_PPP = 0xb3 - DLT_JUNIPER_PPPOE = 0xa7 - DLT_JUNIPER_PPPOE_ATM = 0xa8 - DLT_JUNIPER_SERVICES = 0x88 - DLT_JUNIPER_SRX_E2E = 0xe9 - DLT_JUNIPER_ST = 0xc8 - DLT_JUNIPER_VP = 0xb7 - DLT_JUNIPER_VS = 0xe8 - DLT_LAPB_WITH_DIR = 0xcf - DLT_LAPD = 0xcb - DLT_LIN = 0xd4 - DLT_LINUX_EVDEV = 0xd8 - DLT_LINUX_IRDA = 0x90 - DLT_LINUX_LAPD = 0xb1 - DLT_LINUX_PPP_WITHDIRECTION = 0xa6 - DLT_LINUX_SLL = 0x71 - DLT_LOOP = 0x6c - DLT_LTALK = 0x72 - DLT_MATCHING_MAX = 0x10a - DLT_MATCHING_MIN = 0x68 - DLT_MFR = 0xb6 - DLT_MOST = 0xd3 - DLT_MPEG_2_TS = 0xf3 - DLT_MPLS = 0xdb - DLT_MTP2 = 0x8c - DLT_MTP2_WITH_PHDR = 0x8b - DLT_MTP3 = 0x8d - DLT_MUX27010 = 0xec - DLT_NETANALYZER = 0xf0 - DLT_NETANALYZER_TRANSPARENT = 0xf1 - DLT_NFC_LLCP = 0xf5 - DLT_NFLOG = 0xef - DLT_NG40 = 0xf4 - DLT_NULL = 0x0 - DLT_PCI_EXP = 0x7d - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x12 - DLT_PPI = 0xc0 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0x10 - DLT_PPP_ETHER = 0x33 - DLT_PPP_PPPD = 0xa6 - DLT_PPP_SERIAL = 0x32 - DLT_PPP_WITH_DIR = 0xcc - DLT_PPP_WITH_DIRECTION = 0xa6 - DLT_PRISM_HEADER = 0x77 - DLT_PRONET = 0x4 - DLT_RAIF1 = 0xc6 - DLT_RAW = 0xc - DLT_RIO = 0x7c - DLT_SCCP = 0x8e - DLT_SITA = 0xc4 - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xf - DLT_STANAG_5066_D_PDU = 0xed - DLT_SUNATM = 0x7b - DLT_SYMANTEC_FIREWALL = 0x63 - DLT_TZSP = 0x80 - DLT_USB = 0xba - DLT_USB_DARWIN = 0x10a - DLT_USB_LINUX = 0xbd - DLT_USB_LINUX_MMAPPED = 0xdc - DLT_USER0 = 0x93 - DLT_USER1 = 0x94 - DLT_USER10 = 0x9d - DLT_USER11 = 0x9e - DLT_USER12 = 0x9f - DLT_USER13 = 0xa0 - DLT_USER14 = 0xa1 - DLT_USER15 = 0xa2 - DLT_USER2 = 0x95 - DLT_USER3 = 0x96 - DLT_USER4 = 0x97 - DLT_USER5 = 0x98 - DLT_USER6 = 0x99 - DLT_USER7 = 0x9a - DLT_USER8 = 0x9b - DLT_USER9 = 0x9c - DLT_WIHART = 0xdf - DLT_X2E_SERIAL = 0xd5 - DLT_X2E_XORAYA = 0xd6 - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - DT_WHT = 0xe - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EVFILT_AIO = -0x3 - EVFILT_EXCEPT = -0xf - EVFILT_FS = -0x9 - EVFILT_MACHPORT = -0x8 - EVFILT_PROC = -0x5 - EVFILT_READ = -0x1 - EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0x11 - EVFILT_THREADMARKER = 0x11 - EVFILT_TIMER = -0x7 - EVFILT_USER = -0xa - EVFILT_VM = -0xc - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_DISPATCH = 0x80 - EV_DISPATCH2 = 0x180 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG0 = 0x1000 - EV_FLAG1 = 0x2000 - EV_ONESHOT = 0x10 - EV_OOBAND = 0x2000 - EV_POLL = 0x1000 - EV_RECEIPT = 0x40 - EV_SYSFLAGS = 0xf000 - EV_UDATA_SPECIFIC = 0x100 - EV_VANISHED = 0x200 - EXTA = 0x4b00 - EXTB = 0x9600 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x400 - FF0 = 0x0 - FF1 = 0x4000 - FFDLY = 0x4000 - FLUSHO = 0x800000 - FSOPT_ATTR_CMN_EXTENDED = 0x20 - FSOPT_NOFOLLOW = 0x1 - FSOPT_NOINMEMUPDATE = 0x2 - FSOPT_PACK_INVAL_ATTRS = 0x8 - FSOPT_REPORT_FULLSIZE = 0x4 - FSOPT_RETURN_REALDEV = 0x200 - F_ADDFILESIGS = 0x3d - F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 - F_ADDFILESIGS_INFO = 0x67 - F_ADDFILESIGS_RETURN = 0x61 - F_ADDFILESUPPL = 0x68 - F_ADDSIGS = 0x3b - F_ALLOCATEALL = 0x4 - F_ALLOCATECONTIG = 0x2 - F_BARRIERFSYNC = 0x55 - F_CHECK_LV = 0x62 - F_CHKCLEAN = 0x29 - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0x43 - F_FINDSIGS = 0x4e - F_FLUSH_DATA = 0x28 - F_FREEZE_FS = 0x35 - F_FULLFSYNC = 0x33 - F_GETCODEDIR = 0x48 - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0x7 - F_GETLKPID = 0x42 - F_GETNOSIGPIPE = 0x4a - F_GETOWN = 0x5 - F_GETPATH = 0x32 - F_GETPATH_MTMINFO = 0x47 - F_GETPATH_NOFIRMLINK = 0x66 - F_GETPROTECTIONCLASS = 0x3f - F_GETPROTECTIONLEVEL = 0x4d - F_GETSIGSINFO = 0x69 - F_GLOBAL_NOCACHE = 0x37 - F_LOG2PHYS = 0x31 - F_LOG2PHYS_EXT = 0x41 - F_NOCACHE = 0x30 - F_NODIRECT = 0x3e - F_OK = 0x0 - F_PATHPKG_CHECK = 0x34 - F_PEOFPOSMODE = 0x3 - F_PREALLOCATE = 0x2a - F_PUNCHHOLE = 0x63 - F_RDADVISE = 0x2c - F_RDAHEAD = 0x2d - F_RDLCK = 0x1 - F_SETBACKINGSTORE = 0x46 - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0x8 - F_SETLKW = 0x9 - F_SETLKWTIMEOUT = 0xa - F_SETNOSIGPIPE = 0x49 - F_SETOWN = 0x6 - F_SETPROTECTIONCLASS = 0x40 - F_SETSIZE = 0x2b - F_SINGLE_WRITER = 0x4c - F_SPECULATIVE_READ = 0x65 - F_THAW_FS = 0x36 - F_TRANSCODEKEY = 0x4b - F_TRIM_ACTIVE_FILE = 0x64 - F_UNLCK = 0x2 - F_VOLPOSMODE = 0x4 - F_WRLCK = 0x3 - HUPCL = 0x4000 - HW_MACHINE = 0x1 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFF_ALLMULTI = 0x200 - IFF_ALTPHYS = 0x4000 - IFF_BROADCAST = 0x2 - IFF_DEBUG = 0x4 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_NOTRAILERS = 0x20 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PROMISC = 0x100 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_1822 = 0x2 - IFT_6LOWPAN = 0x40 - IFT_AAL5 = 0x31 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ATM = 0x25 - IFT_BRIDGE = 0xd1 - IFT_CARP = 0xf8 - IFT_CELLULAR = 0xff - IFT_CEPT = 0x13 - IFT_DS3 = 0x1e - IFT_ENC = 0xf4 - IFT_EON = 0x19 - IFT_ETHER = 0x6 - IFT_FAITH = 0x38 - IFT_FDDI = 0xf - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_GIF = 0x37 - IFT_HDH1822 = 0x3 - IFT_HIPPI = 0x2f - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IEEE1394 = 0x90 - IFT_IEEE8023ADLAG = 0x88 - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88026 = 0xa - IFT_L2VLAN = 0x87 - IFT_LAPB = 0x10 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_NSIP = 0x1b - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PDP = 0xff - IFT_PFLOG = 0xf5 - IFT_PFSYNC = 0xf6 - IFT_PKTAP = 0xfe - IFT_PPP = 0x17 - IFT_PROPMUX = 0x36 - IFT_PROPVIRTUAL = 0x35 - IFT_PTPSERIAL = 0x16 - IFT_RS232 = 0x21 - IFT_SDLC = 0x11 - IFT_SIP = 0x1f - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SONET = 0x27 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_STARLAN = 0xb - IFT_STF = 0x39 - IFT_T1 = 0x12 - IFT_ULTRA = 0x1d - IFT_V35 = 0x2d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LINKLOCALNETNUM = 0xa9fe0000 - IN_LOOPBACKNET = 0x7f - IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x400473d1 - IPPROTO_3PC = 0x22 - IPPROTO_ADFS = 0x44 - IPPROTO_AH = 0x33 - IPPROTO_AHIP = 0x3d - IPPROTO_APES = 0x63 - IPPROTO_ARGUS = 0xd - IPPROTO_AX25 = 0x5d - IPPROTO_BHA = 0x31 - IPPROTO_BLT = 0x1e - IPPROTO_BRSATMON = 0x4c - IPPROTO_CFTP = 0x3e - IPPROTO_CHAOS = 0x10 - IPPROTO_CMTP = 0x26 - IPPROTO_CPHB = 0x49 - IPPROTO_CPNX = 0x48 - IPPROTO_DDP = 0x25 - IPPROTO_DGP = 0x56 - IPPROTO_DIVERT = 0xfe - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_EMCON = 0xe - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GMTP = 0x64 - IPPROTO_GRE = 0x2f - IPPROTO_HELLO = 0x3f - IPPROTO_HMP = 0x14 - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IDPR = 0x23 - IPPROTO_IDRP = 0x2d - IPPROTO_IGMP = 0x2 - IPPROTO_IGP = 0x55 - IPPROTO_IGRP = 0x58 - IPPROTO_IL = 0x28 - IPPROTO_INLSP = 0x34 - IPPROTO_INP = 0x20 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPCV = 0x47 - IPPROTO_IPEIP = 0x5e - IPPROTO_IPIP = 0x4 - IPPROTO_IPPC = 0x43 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_IRTP = 0x1c - IPPROTO_KRYPTOLAN = 0x41 - IPPROTO_LARP = 0x5b - IPPROTO_LEAF1 = 0x19 - IPPROTO_LEAF2 = 0x1a - IPPROTO_MAX = 0x100 - IPPROTO_MAXID = 0x34 - IPPROTO_MEAS = 0x13 - IPPROTO_MHRP = 0x30 - IPPROTO_MICP = 0x5f - IPPROTO_MTP = 0x5c - IPPROTO_MUX = 0x12 - IPPROTO_ND = 0x4d - IPPROTO_NHRP = 0x36 - IPPROTO_NONE = 0x3b - IPPROTO_NSP = 0x1f - IPPROTO_NVPII = 0xb - IPPROTO_OSPFIGP = 0x59 - IPPROTO_PGM = 0x71 - IPPROTO_PIGP = 0x9 - IPPROTO_PIM = 0x67 - IPPROTO_PRM = 0x15 - IPPROTO_PUP = 0xc - IPPROTO_PVP = 0x4b - IPPROTO_RAW = 0xff - IPPROTO_RCCMON = 0xa - IPPROTO_RDP = 0x1b - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_RVD = 0x42 - IPPROTO_SATEXPAK = 0x40 - IPPROTO_SATMON = 0x45 - IPPROTO_SCCSP = 0x60 - IPPROTO_SCTP = 0x84 - IPPROTO_SDRP = 0x2a - IPPROTO_SEP = 0x21 - IPPROTO_SRPC = 0x5a - IPPROTO_ST = 0x7 - IPPROTO_SVMTP = 0x52 - IPPROTO_SWIPE = 0x35 - IPPROTO_TCF = 0x57 - IPPROTO_TCP = 0x6 - IPPROTO_TP = 0x1d - IPPROTO_TPXX = 0x27 - IPPROTO_TRUNK1 = 0x17 - IPPROTO_TRUNK2 = 0x18 - IPPROTO_TTP = 0x54 - IPPROTO_UDP = 0x11 - IPPROTO_VINES = 0x53 - IPPROTO_VISA = 0x46 - IPPROTO_VMTP = 0x51 - IPPROTO_WBEXPAK = 0x4f - IPPROTO_WBMON = 0x4e - IPPROTO_WSN = 0x4a - IPPROTO_XNET = 0xf - IPPROTO_XTP = 0x24 - IPV6_2292DSTOPTS = 0x17 - IPV6_2292HOPLIMIT = 0x14 - IPV6_2292HOPOPTS = 0x16 - IPV6_2292NEXTHOP = 0x15 - IPV6_2292PKTINFO = 0x13 - IPV6_2292PKTOPTIONS = 0x19 - IPV6_2292RTHDR = 0x18 - IPV6_3542DSTOPTS = 0x32 - IPV6_3542HOPLIMIT = 0x2f - IPV6_3542HOPOPTS = 0x31 - IPV6_3542NEXTHOP = 0x30 - IPV6_3542PKTINFO = 0x2e - IPV6_3542RTHDR = 0x33 - IPV6_ADDR_MC_FLAGS_PREFIX = 0x20 - IPV6_ADDR_MC_FLAGS_TRANSIENT = 0x10 - IPV6_ADDR_MC_FLAGS_UNICAST_BASED = 0x30 - IPV6_AUTOFLOWLABEL = 0x3b - IPV6_BINDV6ONLY = 0x1b - IPV6_BOUND_IF = 0x7d - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_DONTFRAG = 0x3e - IPV6_DSTOPTS = 0x32 - IPV6_FAITH = 0x1d - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FLOW_ECN_MASK = 0x3000 - IPV6_FRAGTTL = 0x3c - IPV6_FW_ADD = 0x1e - IPV6_FW_DEL = 0x1f - IPV6_FW_FLUSH = 0x20 - IPV6_FW_GET = 0x22 - IPV6_FW_ZERO = 0x21 - IPV6_HLIMDEC = 0x1 - IPV6_HOPLIMIT = 0x2f - IPV6_HOPOPTS = 0x31 - IPV6_IPSEC_POLICY = 0x1c - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXOPTHDR = 0x800 - IPV6_MAXPACKET = 0xffff - IPV6_MAX_GROUP_SRC_FILTER = 0x200 - IPV6_MAX_MEMBERSHIPS = 0xfff - IPV6_MAX_SOCK_SRC_FILTER = 0x80 - IPV6_MIN_MEMBERSHIPS = 0x1f - IPV6_MMTU = 0x500 - IPV6_MSFILTER = 0x4a - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_PATHMTU = 0x2c - IPV6_PKTINFO = 0x2e - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_PREFER_TEMPADDR = 0x3f - IPV6_RECVDSTOPTS = 0x28 - IPV6_RECVHOPLIMIT = 0x25 - IPV6_RECVHOPOPTS = 0x27 - IPV6_RECVPATHMTU = 0x2b - IPV6_RECVPKTINFO = 0x3d - IPV6_RECVRTHDR = 0x26 - IPV6_RECVTCLASS = 0x23 - IPV6_RTHDR = 0x33 - IPV6_RTHDRDSTOPTS = 0x39 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x24 - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2a - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IP_ADD_MEMBERSHIP = 0xc - IP_ADD_SOURCE_MEMBERSHIP = 0x46 - IP_BLOCK_SOURCE = 0x48 - IP_BOUND_IF = 0x19 - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DONTFRAG = 0x1c - IP_DROP_MEMBERSHIP = 0xd - IP_DROP_SOURCE_MEMBERSHIP = 0x47 - IP_DUMMYNET_CONFIGURE = 0x3c - IP_DUMMYNET_DEL = 0x3d - IP_DUMMYNET_FLUSH = 0x3e - IP_DUMMYNET_GET = 0x40 - IP_FAITH = 0x16 - IP_FW_ADD = 0x28 - IP_FW_DEL = 0x29 - IP_FW_FLUSH = 0x2a - IP_FW_GET = 0x2c - IP_FW_RESETLOG = 0x2d - IP_FW_ZERO = 0x2b - IP_HDRINCL = 0x2 - IP_IPSEC_POLICY = 0x15 - IP_MAXPACKET = 0xffff - IP_MAX_GROUP_SRC_FILTER = 0x200 - IP_MAX_MEMBERSHIPS = 0xfff - IP_MAX_SOCK_MUTE_FILTER = 0x80 - IP_MAX_SOCK_SRC_FILTER = 0x80 - IP_MF = 0x2000 - IP_MIN_MEMBERSHIPS = 0x1f - IP_MSFILTER = 0x4a - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_IFINDEX = 0x42 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_MULTICAST_VIF = 0xe - IP_NAT__XXX = 0x37 - IP_OFFMASK = 0x1fff - IP_OLD_FW_ADD = 0x32 - IP_OLD_FW_DEL = 0x33 - IP_OLD_FW_FLUSH = 0x34 - IP_OLD_FW_GET = 0x36 - IP_OLD_FW_RESETLOG = 0x38 - IP_OLD_FW_ZERO = 0x35 - IP_OPTIONS = 0x1 - IP_PKTINFO = 0x1a - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVIF = 0x14 - IP_RECVOPTS = 0x5 - IP_RECVPKTINFO = 0x1a - IP_RECVRETOPTS = 0x6 - IP_RECVTOS = 0x1b - IP_RECVTTL = 0x18 - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_RSVP_OFF = 0x10 - IP_RSVP_ON = 0xf - IP_RSVP_VIF_OFF = 0x12 - IP_RSVP_VIF_ON = 0x11 - IP_STRIPHDR = 0x17 - IP_TOS = 0x3 - IP_TRAFFIC_MGT_BACKGROUND = 0x41 - IP_TTL = 0x4 - IP_UNBLOCK_SOURCE = 0x49 - ISIG = 0x80 - ISTRIP = 0x20 - IUTF8 = 0x4000 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - KERN_HOSTNAME = 0xa - KERN_OSRELEASE = 0x2 - KERN_OSTYPE = 0x1 - KERN_VERSION = 0x4 - LOCAL_PEERCRED = 0x1 - LOCAL_PEEREPID = 0x3 - LOCAL_PEEREUUID = 0x5 - LOCAL_PEERPID = 0x2 - LOCAL_PEERTOKEN = 0x6 - LOCAL_PEERUUID = 0x4 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_CAN_REUSE = 0x9 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x5 - MADV_FREE_REUSABLE = 0x7 - MADV_FREE_REUSE = 0x8 - MADV_NORMAL = 0x0 - MADV_PAGEOUT = 0xa - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_WILLNEED = 0x3 - MADV_ZERO_WIRED_PAGES = 0x6 - MAP_32BIT = 0x8000 - MAP_ANON = 0x1000 - MAP_ANONYMOUS = 0x1000 - MAP_COPY = 0x2 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_HASSEMAPHORE = 0x200 - MAP_JIT = 0x800 - MAP_NOCACHE = 0x400 - MAP_NOEXTEND = 0x100 - MAP_NORESERVE = 0x40 - MAP_PRIVATE = 0x2 - MAP_RENAME = 0x20 - MAP_RESERVED0080 = 0x80 - MAP_RESILIENT_CODESIGN = 0x2000 - MAP_RESILIENT_MEDIA = 0x4000 - MAP_SHARED = 0x1 - MAP_TRANSLATED_ALLOW_EXECUTE = 0x20000 - MAP_UNIX03 = 0x40000 - MCAST_BLOCK_SOURCE = 0x54 - MCAST_EXCLUDE = 0x2 - MCAST_INCLUDE = 0x1 - MCAST_JOIN_GROUP = 0x50 - MCAST_JOIN_SOURCE_GROUP = 0x52 - MCAST_LEAVE_GROUP = 0x51 - MCAST_LEAVE_SOURCE_GROUP = 0x53 - MCAST_UNBLOCK_SOURCE = 0x55 - MCAST_UNDEFINED = 0x0 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MNT_ASYNC = 0x40 - MNT_AUTOMOUNTED = 0x400000 - MNT_CMDFLAGS = 0xf0000 - MNT_CPROTECT = 0x80 - MNT_DEFWRITE = 0x2000000 - MNT_DONTBROWSE = 0x100000 - MNT_DOVOLFS = 0x8000 - MNT_DWAIT = 0x4 - MNT_EXPORTED = 0x100 - MNT_EXT_ROOT_DATA_VOL = 0x1 - MNT_FORCE = 0x80000 - MNT_IGNORE_OWNERSHIP = 0x200000 - MNT_JOURNALED = 0x800000 - MNT_LOCAL = 0x1000 - MNT_MULTILABEL = 0x4000000 - MNT_NOATIME = 0x10000000 - MNT_NOBLOCK = 0x20000 - MNT_NODEV = 0x10 - MNT_NOEXEC = 0x4 - MNT_NOSUID = 0x8 - MNT_NOUSERXATTR = 0x1000000 - MNT_NOWAIT = 0x2 - MNT_QUARANTINE = 0x400 - MNT_QUOTA = 0x2000 - MNT_RDONLY = 0x1 - MNT_RELOAD = 0x40000 - MNT_REMOVABLE = 0x200 - MNT_ROOTFS = 0x4000 - MNT_SNAPSHOT = 0x40000000 - MNT_STRICTATIME = 0x80000000 - MNT_SYNCHRONOUS = 0x2 - MNT_UNION = 0x20 - MNT_UNKNOWNPERMISSIONS = 0x200000 - MNT_UPDATE = 0x10000 - MNT_VISFLAGMASK = 0xd7f0f7ff - MNT_WAIT = 0x1 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOF = 0x100 - MSG_EOR = 0x8 - MSG_FLUSH = 0x400 - MSG_HAVEMORE = 0x2000 - MSG_HOLD = 0x800 - MSG_NEEDSA = 0x10000 - MSG_NOSIGNAL = 0x80000 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_RCVMORE = 0x4000 - MSG_SEND = 0x1000 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 - MSG_WAITSTREAM = 0x200 - MS_ASYNC = 0x1 - MS_DEACTIVATE = 0x8 - MS_INVALIDATE = 0x2 - MS_KILLPAGES = 0x4 - MS_SYNC = 0x10 - NAME_MAX = 0xff - NET_RT_DUMP = 0x1 - NET_RT_DUMP2 = 0x7 - NET_RT_FLAGS = 0x2 - NET_RT_FLAGS_PRIV = 0xa - NET_RT_IFLIST = 0x3 - NET_RT_IFLIST2 = 0x6 - NET_RT_MAXID = 0xb - NET_RT_STAT = 0x4 - NET_RT_TRASH = 0x5 - NFDBITS = 0x20 - NL0 = 0x0 - NL1 = 0x100 - NL2 = 0x200 - NL3 = 0x300 - NLDLY = 0x300 - NOFLSH = 0x80000000 - NOKERNINFO = 0x2000000 - NOTE_ABSOLUTE = 0x8 - NOTE_ATTRIB = 0x8 - NOTE_BACKGROUND = 0x40 - NOTE_CHILD = 0x4 - NOTE_CRITICAL = 0x20 - NOTE_DELETE = 0x1 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXITSTATUS = 0x4000000 - NOTE_EXIT_CSERROR = 0x40000 - NOTE_EXIT_DECRYPTFAIL = 0x10000 - NOTE_EXIT_DETAIL = 0x2000000 - NOTE_EXIT_DETAIL_MASK = 0x70000 - NOTE_EXIT_MEMORY = 0x20000 - NOTE_EXIT_REPARENTED = 0x80000 - NOTE_EXTEND = 0x4 - NOTE_FFAND = 0x40000000 - NOTE_FFCOPY = 0xc0000000 - NOTE_FFCTRLMASK = 0xc0000000 - NOTE_FFLAGSMASK = 0xffffff - NOTE_FFNOP = 0x0 - NOTE_FFOR = 0x80000000 - NOTE_FORK = 0x40000000 - NOTE_FUNLOCK = 0x100 - NOTE_LEEWAY = 0x10 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_MACHTIME = 0x100 - NOTE_MACH_CONTINUOUS_TIME = 0x80 - NOTE_NONE = 0x80 - NOTE_NSECONDS = 0x4 - NOTE_OOB = 0x2 - NOTE_PCTRLMASK = -0x100000 - NOTE_PDATAMASK = 0xfffff - NOTE_REAP = 0x10000000 - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_SECONDS = 0x1 - NOTE_SIGNAL = 0x8000000 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_TRIGGER = 0x1000000 - NOTE_USECONDS = 0x2 - NOTE_VM_ERROR = 0x10000000 - NOTE_VM_PRESSURE = 0x80000000 - NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 - NOTE_VM_PRESSURE_TERMINATE = 0x40000000 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - OFDEL = 0x20000 - OFILL = 0x80 - ONLCR = 0x2 - ONLRET = 0x40 - ONOCR = 0x20 - ONOEOT = 0x8 - OPOST = 0x1 - OXTABS = 0x4 - O_ACCMODE = 0x3 - O_ALERT = 0x20000000 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x1000000 - O_CREAT = 0x200 - O_DIRECTORY = 0x100000 - O_DP_GETRAWENCRYPTED = 0x1 - O_DP_GETRAWUNENCRYPTED = 0x2 - O_DSYNC = 0x400000 - O_EVTONLY = 0x8000 - O_EXCL = 0x800 - O_EXLOCK = 0x20 - O_FSYNC = 0x80 - O_NDELAY = 0x4 - O_NOCTTY = 0x20000 - O_NOFOLLOW = 0x100 - O_NOFOLLOW_ANY = 0x20000000 - O_NONBLOCK = 0x4 - O_POPUP = 0x80000000 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_SHLOCK = 0x10 - O_SYMLINK = 0x200000 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - PT_ATTACH = 0xa - PT_ATTACHEXC = 0xe - PT_CONTINUE = 0x7 - PT_DENY_ATTACH = 0x1f - PT_DETACH = 0xb - PT_FIRSTMACH = 0x20 - PT_FORCEQUOTA = 0x1e - PT_KILL = 0x8 - PT_READ_D = 0x2 - PT_READ_I = 0x1 - PT_READ_U = 0x3 - PT_SIGEXC = 0xc - PT_STEP = 0x9 - PT_THUPDATE = 0xd - PT_TRACE_ME = 0x0 - PT_WRITE_D = 0x5 - PT_WRITE_I = 0x4 - PT_WRITE_U = 0x6 - RLIMIT_AS = 0x5 - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_CPU_USAGE_MONITOR = 0x2 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_MEMLOCK = 0x6 - RLIMIT_NOFILE = 0x8 - RLIMIT_NPROC = 0x7 - RLIMIT_RSS = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_MAX = 0x8 - RTAX_NETMASK = 0x2 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_NETMASK = 0x4 - RTF_BLACKHOLE = 0x1000 - RTF_BROADCAST = 0x400000 - RTF_CLONING = 0x100 - RTF_CONDEMNED = 0x2000000 - RTF_DEAD = 0x20000000 - RTF_DELCLONE = 0x80 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_GATEWAY = 0x2 - RTF_GLOBAL = 0x40000000 - RTF_HOST = 0x4 - RTF_IFREF = 0x4000000 - RTF_IFSCOPE = 0x1000000 - RTF_LLDATA = 0x400 - RTF_LLINFO = 0x400 - RTF_LOCAL = 0x200000 - RTF_MODIFIED = 0x20 - RTF_MULTICAST = 0x800000 - RTF_NOIFREF = 0x2000 - RTF_PINNED = 0x100000 - RTF_PRCLONING = 0x10000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_PROTO3 = 0x40000 - RTF_PROXY = 0x8000000 - RTF_REJECT = 0x8 - RTF_ROUTER = 0x10000000 - RTF_STATIC = 0x800 - RTF_UP = 0x1 - RTF_WASCLONED = 0x20000 - RTF_XRESOLVE = 0x200 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_DELMADDR = 0x10 - RTM_GET = 0x4 - RTM_GET2 = 0x14 - RTM_IFINFO = 0xe - RTM_IFINFO2 = 0x12 - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_NEWMADDR = 0xf - RTM_NEWMADDR2 = 0x13 - RTM_OLDADD = 0x9 - RTM_OLDDEL = 0xa - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - SCM_CREDS = 0x3 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x2 - SCM_TIMESTAMP_MONOTONIC = 0x4 - SEEK_CUR = 0x1 - SEEK_DATA = 0x4 - SEEK_END = 0x2 - SEEK_HOLE = 0x3 - SEEK_SET = 0x0 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80206931 - SIOCAIFADDR = 0x8040691a - SIOCARPIPLL = 0xc0206928 - SIOCATMARK = 0x40047307 - SIOCAUTOADDR = 0xc0206926 - SIOCAUTONETMASK = 0x80206927 - SIOCDELMULTI = 0x80206932 - SIOCDIFADDR = 0x80206919 - SIOCDIFPHYADDR = 0x80206941 - SIOCGDRVSPEC = 0xc028697b - SIOCGETVLAN = 0xc020697f - SIOCGHIWAT = 0x40047301 - SIOCGIF6LOWPAN = 0xc02069c5 - SIOCGIFADDR = 0xc0206921 - SIOCGIFALTMTU = 0xc0206948 - SIOCGIFASYNCMAP = 0xc020697c - SIOCGIFBOND = 0xc0206947 - SIOCGIFBRDADDR = 0xc0206923 - SIOCGIFCAP = 0xc020695b - SIOCGIFCONF = 0xc00c6924 - SIOCGIFDEVMTU = 0xc0206944 - SIOCGIFDSTADDR = 0xc0206922 - SIOCGIFFLAGS = 0xc0206911 - SIOCGIFFUNCTIONALTYPE = 0xc02069ad - SIOCGIFGENERIC = 0xc020693a - SIOCGIFKPI = 0xc0206987 - SIOCGIFMAC = 0xc0206982 - SIOCGIFMEDIA = 0xc02c6938 - SIOCGIFMETRIC = 0xc0206917 - SIOCGIFMTU = 0xc0206933 - SIOCGIFNETMASK = 0xc0206925 - SIOCGIFPDSTADDR = 0xc0206940 - SIOCGIFPHYS = 0xc0206935 - SIOCGIFPSRCADDR = 0xc020693f - SIOCGIFSTATUS = 0xc331693d - SIOCGIFVLAN = 0xc020697f - SIOCGIFWAKEFLAGS = 0xc0206988 - SIOCGIFXMEDIA = 0xc02c6948 - SIOCGLOWAT = 0x40047303 - SIOCGPGRP = 0x40047309 - SIOCIFCREATE = 0xc0206978 - SIOCIFCREATE2 = 0xc020697a - SIOCIFDESTROY = 0x80206979 - SIOCIFGCLONERS = 0xc0106981 - SIOCRSLVMULTI = 0xc010693b - SIOCSDRVSPEC = 0x8028697b - SIOCSETVLAN = 0x8020697e - SIOCSHIWAT = 0x80047300 - SIOCSIF6LOWPAN = 0x802069c4 - SIOCSIFADDR = 0x8020690c - SIOCSIFALTMTU = 0x80206945 - SIOCSIFASYNCMAP = 0x8020697d - SIOCSIFBOND = 0x80206946 - SIOCSIFBRDADDR = 0x80206913 - SIOCSIFCAP = 0x8020695a - SIOCSIFDSTADDR = 0x8020690e - SIOCSIFFLAGS = 0x80206910 - SIOCSIFGENERIC = 0x80206939 - SIOCSIFKPI = 0x80206986 - SIOCSIFLLADDR = 0x8020693c - SIOCSIFMAC = 0x80206983 - SIOCSIFMEDIA = 0xc0206937 - SIOCSIFMETRIC = 0x80206918 - SIOCSIFMTU = 0x80206934 - SIOCSIFNETMASK = 0x80206916 - SIOCSIFPHYADDR = 0x8040693e - SIOCSIFPHYS = 0x80206936 - SIOCSIFVLAN = 0x8020697e - SIOCSLOWAT = 0x80047302 - SIOCSPGRP = 0x80047308 - SOCK_DGRAM = 0x2 - SOCK_MAXADDRLEN = 0xff - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_LOCAL = 0x0 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 - SO_DONTROUTE = 0x10 - SO_DONTTRUNC = 0x2000 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LABEL = 0x1010 - SO_LINGER = 0x80 - SO_LINGER_SEC = 0x1080 - SO_NETSVC_MARKING_LEVEL = 0x1119 - SO_NET_SERVICE_TYPE = 0x1116 - SO_NKE = 0x1021 - SO_NOADDRERR = 0x1023 - SO_NOSIGPIPE = 0x1022 - SO_NOTIFYCONFLICT = 0x1026 - SO_NP_EXTENSIONS = 0x1083 - SO_NREAD = 0x1020 - SO_NUMRCVPKT = 0x1112 - SO_NWRITE = 0x1024 - SO_OOBINLINE = 0x100 - SO_PEERLABEL = 0x1011 - SO_RANDOMPORT = 0x1082 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_REUSESHAREUID = 0x1025 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_TIMESTAMP = 0x400 - SO_TIMESTAMP_MONOTONIC = 0x800 - SO_TRACKER_ATTRIBUTE_FLAGS_APP_APPROVED = 0x1 - SO_TRACKER_ATTRIBUTE_FLAGS_DOMAIN_SHORT = 0x4 - SO_TRACKER_ATTRIBUTE_FLAGS_TRACKER = 0x2 - SO_TRACKER_TRANSPARENCY_VERSION = 0x3 - SO_TYPE = 0x1008 - SO_UPCALLCLOSEWAIT = 0x1027 - SO_USELOOPBACK = 0x40 - SO_WANTMORE = 0x4000 - SO_WANTOOBFLAG = 0x8000 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFLNK = 0xa000 - S_IFMT = 0xf000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IFWHT = 0xe000 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISTXT = 0x200 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXGRP = 0x8 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - TAB0 = 0x0 - TAB1 = 0x400 - TAB2 = 0x800 - TAB3 = 0x4 - TABDLY = 0xc04 - TCIFLUSH = 0x1 - TCIOFF = 0x3 - TCIOFLUSH = 0x3 - TCION = 0x4 - TCOFLUSH = 0x2 - TCOOFF = 0x1 - TCOON = 0x2 - TCPOPT_CC = 0xb - TCPOPT_CCECHO = 0xd - TCPOPT_CCNEW = 0xc - TCPOPT_EOL = 0x0 - TCPOPT_FASTOPEN = 0x22 - TCPOPT_MAXSEG = 0x2 - TCPOPT_NOP = 0x1 - TCPOPT_SACK = 0x5 - TCPOPT_SACK_HDR = 0x1010500 - TCPOPT_SACK_PERMITTED = 0x4 - TCPOPT_SACK_PERMIT_HDR = 0x1010402 - TCPOPT_SIGNATURE = 0x13 - TCPOPT_TIMESTAMP = 0x8 - TCPOPT_TSTAMP_HDR = 0x101080a - TCPOPT_WINDOW = 0x3 - TCP_CONNECTIONTIMEOUT = 0x20 - TCP_CONNECTION_INFO = 0x106 - TCP_ENABLE_ECN = 0x104 - TCP_FASTOPEN = 0x105 - TCP_KEEPALIVE = 0x10 - TCP_KEEPCNT = 0x102 - TCP_KEEPINTVL = 0x101 - TCP_MAXHLEN = 0x3c - TCP_MAXOLEN = 0x28 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x4 - TCP_MAX_WINSHIFT = 0xe - TCP_MINMSS = 0xd8 - TCP_MSS = 0x200 - TCP_NODELAY = 0x1 - TCP_NOOPT = 0x8 - TCP_NOPUSH = 0x4 - TCP_NOTSENT_LOWAT = 0x201 - TCP_RXT_CONNDROPTIME = 0x80 - TCP_RXT_FINDROP = 0x100 - TCP_SENDMOREACKS = 0x103 - TCSAFLUSH = 0x2 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCONS = 0x80047462 - TIOCDCDTIMESTAMP = 0x40107458 - TIOCDRAIN = 0x2000745e - TIOCDSIMICROCODE = 0x20007455 - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLUSH = 0x80047410 - TIOCGDRAINWAIT = 0x40047456 - TIOCGETA = 0x40487413 - TIOCGETD = 0x4004741a - TIOCGPGRP = 0x40047477 - TIOCGWINSZ = 0x40087468 - TIOCIXOFF = 0x20007480 - TIOCIXON = 0x20007481 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGDTRWAIT = 0x4004745a - TIOCMGET = 0x4004746a - TIOCMODG = 0x40047403 - TIOCMODS = 0x80047404 - TIOCMSDTRWAIT = 0x8004745b - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCPTYGNAME = 0x40807453 - TIOCPTYGRANT = 0x20007454 - TIOCPTYUNLK = 0x20007452 - TIOCREMOTE = 0x80047469 - TIOCSBRK = 0x2000747b - TIOCSCONS = 0x20007463 - TIOCSCTTY = 0x20007461 - TIOCSDRAINWAIT = 0x80047457 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x80487414 - TIOCSETAF = 0x80487416 - TIOCSETAW = 0x80487415 - TIOCSETD = 0x8004741b - TIOCSIG = 0x2000745f - TIOCSPGRP = 0x80047476 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x20007465 - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCTIMESTAMP = 0x40107459 - TIOCUCNTL = 0x80047466 - TOSTOP = 0x400000 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMADDR_CID_ANY = 0xffffffff - VMADDR_CID_HOST = 0x2 - VMADDR_CID_HYPERVISOR = 0x0 - VMADDR_CID_RESERVED = 0x1 - VMADDR_PORT_ANY = 0xffffffff - VMIN = 0x10 - VM_LOADAVG = 0x2 - VM_MACHFACTOR = 0x4 - VM_MAXID = 0x6 - VM_METER = 0x1 - VM_SWAPUSAGE = 0x5 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VT0 = 0x0 - VT1 = 0x10000 - VTDLY = 0x10000 - VTIME = 0x11 - VWERASE = 0x4 - WCONTINUED = 0x10 - WCOREFLAG = 0x80 - WEXITED = 0x4 - WNOHANG = 0x1 - WNOWAIT = 0x20 - WORDSIZE = 0x40 - WSTOPPED = 0x8 - WUNTRACED = 0x2 - XATTR_CREATE = 0x2 - XATTR_NODEFAULT = 0x10 - XATTR_NOFOLLOW = 0x1 - XATTR_NOSECURITY = 0x8 - XATTR_REPLACE = 0x4 - XATTR_SHOWCOMPRESSION = 0x20 -) - -// Errors -const ( - E2BIG = syscall.Errno(0x7) - EACCES = syscall.Errno(0xd) - EADDRINUSE = syscall.Errno(0x30) - EADDRNOTAVAIL = syscall.Errno(0x31) - EAFNOSUPPORT = syscall.Errno(0x2f) - EAGAIN = syscall.Errno(0x23) - EALREADY = syscall.Errno(0x25) - EAUTH = syscall.Errno(0x50) - EBADARCH = syscall.Errno(0x56) - EBADEXEC = syscall.Errno(0x55) - EBADF = syscall.Errno(0x9) - EBADMACHO = syscall.Errno(0x58) - EBADMSG = syscall.Errno(0x5e) - EBADRPC = syscall.Errno(0x48) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x59) - ECHILD = syscall.Errno(0xa) - ECONNABORTED = syscall.Errno(0x35) - ECONNREFUSED = syscall.Errno(0x3d) - ECONNRESET = syscall.Errno(0x36) - EDEADLK = syscall.Errno(0xb) - EDESTADDRREQ = syscall.Errno(0x27) - EDEVERR = syscall.Errno(0x53) - EDOM = syscall.Errno(0x21) - EDQUOT = syscall.Errno(0x45) - EEXIST = syscall.Errno(0x11) - EFAULT = syscall.Errno(0xe) - EFBIG = syscall.Errno(0x1b) - EFTYPE = syscall.Errno(0x4f) - EHOSTDOWN = syscall.Errno(0x40) - EHOSTUNREACH = syscall.Errno(0x41) - EIDRM = syscall.Errno(0x5a) - EILSEQ = syscall.Errno(0x5c) - EINPROGRESS = syscall.Errno(0x24) - EINTR = syscall.Errno(0x4) - EINVAL = syscall.Errno(0x16) - EIO = syscall.Errno(0x5) - EISCONN = syscall.Errno(0x38) - EISDIR = syscall.Errno(0x15) - ELAST = syscall.Errno(0x6a) - ELOOP = syscall.Errno(0x3e) - EMFILE = syscall.Errno(0x18) - EMLINK = syscall.Errno(0x1f) - EMSGSIZE = syscall.Errno(0x28) - EMULTIHOP = syscall.Errno(0x5f) - ENAMETOOLONG = syscall.Errno(0x3f) - ENEEDAUTH = syscall.Errno(0x51) - ENETDOWN = syscall.Errno(0x32) - ENETRESET = syscall.Errno(0x34) - ENETUNREACH = syscall.Errno(0x33) - ENFILE = syscall.Errno(0x17) - ENOATTR = syscall.Errno(0x5d) - ENOBUFS = syscall.Errno(0x37) - ENODATA = syscall.Errno(0x60) - ENODEV = syscall.Errno(0x13) - ENOENT = syscall.Errno(0x2) - ENOEXEC = syscall.Errno(0x8) - ENOLCK = syscall.Errno(0x4d) - ENOLINK = syscall.Errno(0x61) - ENOMEM = syscall.Errno(0xc) - ENOMSG = syscall.Errno(0x5b) - ENOPOLICY = syscall.Errno(0x67) - ENOPROTOOPT = syscall.Errno(0x2a) - ENOSPC = syscall.Errno(0x1c) - ENOSR = syscall.Errno(0x62) - ENOSTR = syscall.Errno(0x63) - ENOSYS = syscall.Errno(0x4e) - ENOTBLK = syscall.Errno(0xf) - ENOTCONN = syscall.Errno(0x39) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x42) - ENOTRECOVERABLE = syscall.Errno(0x68) - ENOTSOCK = syscall.Errno(0x26) - ENOTSUP = syscall.Errno(0x2d) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x66) - EOVERFLOW = syscall.Errno(0x54) - EOWNERDEAD = syscall.Errno(0x69) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x2e) - EPIPE = syscall.Errno(0x20) - EPROCLIM = syscall.Errno(0x43) - EPROCUNAVAIL = syscall.Errno(0x4c) - EPROGMISMATCH = syscall.Errno(0x4b) - EPROGUNAVAIL = syscall.Errno(0x4a) - EPROTO = syscall.Errno(0x64) - EPROTONOSUPPORT = syscall.Errno(0x2b) - EPROTOTYPE = syscall.Errno(0x29) - EPWROFF = syscall.Errno(0x52) - EQFULL = syscall.Errno(0x6a) - ERANGE = syscall.Errno(0x22) - EREMOTE = syscall.Errno(0x47) - EROFS = syscall.Errno(0x1e) - ERPCMISMATCH = syscall.Errno(0x49) - ESHLIBVERS = syscall.Errno(0x57) - ESHUTDOWN = syscall.Errno(0x3a) - ESOCKTNOSUPPORT = syscall.Errno(0x2c) - ESPIPE = syscall.Errno(0x1d) - ESRCH = syscall.Errno(0x3) - ESTALE = syscall.Errno(0x46) - ETIME = syscall.Errno(0x65) - ETIMEDOUT = syscall.Errno(0x3c) - ETOOMANYREFS = syscall.Errno(0x3b) - ETXTBSY = syscall.Errno(0x1a) - EUSERS = syscall.Errno(0x44) - EWOULDBLOCK = syscall.Errno(0x23) - EXDEV = syscall.Errno(0x12) -) - -// Signals -const ( - SIGABRT = syscall.Signal(0x6) - SIGALRM = syscall.Signal(0xe) - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x14) - SIGCONT = syscall.Signal(0x13) - SIGEMT = syscall.Signal(0x7) - SIGFPE = syscall.Signal(0x8) - SIGHUP = syscall.Signal(0x1) - SIGILL = syscall.Signal(0x4) - SIGINFO = syscall.Signal(0x1d) - SIGINT = syscall.Signal(0x2) - SIGIO = syscall.Signal(0x17) - SIGIOT = syscall.Signal(0x6) - SIGKILL = syscall.Signal(0x9) - SIGPIPE = syscall.Signal(0xd) - SIGPROF = syscall.Signal(0x1b) - SIGQUIT = syscall.Signal(0x3) - SIGSEGV = syscall.Signal(0xb) - SIGSTOP = syscall.Signal(0x11) - SIGSYS = syscall.Signal(0xc) - SIGTERM = syscall.Signal(0xf) - SIGTRAP = syscall.Signal(0x5) - SIGTSTP = syscall.Signal(0x12) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x10) - SIGUSR1 = syscall.Signal(0x1e) - SIGUSR2 = syscall.Signal(0x1f) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "device not configured"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EDEADLK", "resource deadlock avoided"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "resource busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "cross-device link"}, - {19, "ENODEV", "operation not supported by device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "result too large"}, - {35, "EAGAIN", "resource temporarily unavailable"}, - {36, "EINPROGRESS", "operation now in progress"}, - {37, "EALREADY", "operation already in progress"}, - {38, "ENOTSOCK", "socket operation on non-socket"}, - {39, "EDESTADDRREQ", "destination address required"}, - {40, "EMSGSIZE", "message too long"}, - {41, "EPROTOTYPE", "protocol wrong type for socket"}, - {42, "ENOPROTOOPT", "protocol not available"}, - {43, "EPROTONOSUPPORT", "protocol not supported"}, - {44, "ESOCKTNOSUPPORT", "socket type not supported"}, - {45, "ENOTSUP", "operation not supported"}, - {46, "EPFNOSUPPORT", "protocol family not supported"}, - {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, - {48, "EADDRINUSE", "address already in use"}, - {49, "EADDRNOTAVAIL", "can't assign requested address"}, - {50, "ENETDOWN", "network is down"}, - {51, "ENETUNREACH", "network is unreachable"}, - {52, "ENETRESET", "network dropped connection on reset"}, - {53, "ECONNABORTED", "software caused connection abort"}, - {54, "ECONNRESET", "connection reset by peer"}, - {55, "ENOBUFS", "no buffer space available"}, - {56, "EISCONN", "socket is already connected"}, - {57, "ENOTCONN", "socket is not connected"}, - {58, "ESHUTDOWN", "can't send after socket shutdown"}, - {59, "ETOOMANYREFS", "too many references: can't splice"}, - {60, "ETIMEDOUT", "operation timed out"}, - {61, "ECONNREFUSED", "connection refused"}, - {62, "ELOOP", "too many levels of symbolic links"}, - {63, "ENAMETOOLONG", "file name too long"}, - {64, "EHOSTDOWN", "host is down"}, - {65, "EHOSTUNREACH", "no route to host"}, - {66, "ENOTEMPTY", "directory not empty"}, - {67, "EPROCLIM", "too many processes"}, - {68, "EUSERS", "too many users"}, - {69, "EDQUOT", "disc quota exceeded"}, - {70, "ESTALE", "stale NFS file handle"}, - {71, "EREMOTE", "too many levels of remote in path"}, - {72, "EBADRPC", "RPC struct is bad"}, - {73, "ERPCMISMATCH", "RPC version wrong"}, - {74, "EPROGUNAVAIL", "RPC prog. not avail"}, - {75, "EPROGMISMATCH", "program version wrong"}, - {76, "EPROCUNAVAIL", "bad procedure for program"}, - {77, "ENOLCK", "no locks available"}, - {78, "ENOSYS", "function not implemented"}, - {79, "EFTYPE", "inappropriate file type or format"}, - {80, "EAUTH", "authentication error"}, - {81, "ENEEDAUTH", "need authenticator"}, - {82, "EPWROFF", "device power is off"}, - {83, "EDEVERR", "device error"}, - {84, "EOVERFLOW", "value too large to be stored in data type"}, - {85, "EBADEXEC", "bad executable (or shared library)"}, - {86, "EBADARCH", "bad CPU type in executable"}, - {87, "ESHLIBVERS", "shared library version mismatch"}, - {88, "EBADMACHO", "malformed Mach-o file"}, - {89, "ECANCELED", "operation canceled"}, - {90, "EIDRM", "identifier removed"}, - {91, "ENOMSG", "no message of desired type"}, - {92, "EILSEQ", "illegal byte sequence"}, - {93, "ENOATTR", "attribute not found"}, - {94, "EBADMSG", "bad message"}, - {95, "EMULTIHOP", "EMULTIHOP (Reserved)"}, - {96, "ENODATA", "no message available on STREAM"}, - {97, "ENOLINK", "ENOLINK (Reserved)"}, - {98, "ENOSR", "no STREAM resources"}, - {99, "ENOSTR", "not a STREAM"}, - {100, "EPROTO", "protocol error"}, - {101, "ETIME", "STREAM ioctl timeout"}, - {102, "EOPNOTSUPP", "operation not supported on socket"}, - {103, "ENOPOLICY", "policy not found"}, - {104, "ENOTRECOVERABLE", "state not recoverable"}, - {105, "EOWNERDEAD", "previous owner died"}, - {106, "EQFULL", "interface output queue is full"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, - {6, "SIGABRT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGURG", "urgent I/O condition"}, - {17, "SIGSTOP", "suspended (signal)"}, - {18, "SIGTSTP", "suspended"}, - {19, "SIGCONT", "continued"}, - {20, "SIGCHLD", "child exited"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGIO", "I/O possible"}, - {24, "SIGXCPU", "cputime limit exceeded"}, - {25, "SIGXFSZ", "filesize limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window size changes"}, - {29, "SIGINFO", "information request"}, - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go deleted file mode 100644 index 17bba0e..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go +++ /dev/null @@ -1,1738 +0,0 @@ -// mkerrors.sh -m64 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build amd64 && dragonfly -// +build amd64,dragonfly - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -m64 _const.go - -package unix - -import "syscall" - -const ( - AF_APPLETALK = 0x10 - AF_ATM = 0x1e - AF_BLUETOOTH = 0x21 - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1a - AF_ECMA = 0x8 - AF_HYLINK = 0xf - AF_IEEE80211 = 0x23 - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x1c - AF_IPX = 0x17 - AF_ISDN = 0x1a - AF_ISO = 0x7 - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x24 - AF_MPLS = 0x22 - AF_NATM = 0x1d - AF_NETBIOS = 0x6 - AF_NETGRAPH = 0x20 - AF_OSI = 0x7 - AF_PUP = 0x4 - AF_ROUTE = 0x11 - AF_SIP = 0x18 - AF_SNA = 0xb - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - ALTWERASE = 0x200 - B0 = 0x0 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B230400 = 0x38400 - B2400 = 0x960 - B28800 = 0x7080 - B300 = 0x12c - B38400 = 0x9600 - B460800 = 0x70800 - B4800 = 0x12c0 - B50 = 0x32 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B921600 = 0xe1000 - B9600 = 0x2580 - BIOCFEEDBACK = 0x8004427d - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc0104279 - BIOCGETIF = 0x4020426b - BIOCGFEEDBACK = 0x4004427c - BIOCGHDRCMPLT = 0x40044274 - BIOCGRSIG = 0x40044272 - BIOCGRTIMEOUT = 0x4010426e - BIOCGSEESENT = 0x40044276 - BIOCGSTATS = 0x4008426f - BIOCIMMEDIATE = 0x80044270 - BIOCLOCK = 0x2000427a - BIOCPROMISC = 0x20004269 - BIOCSBLEN = 0xc0044266 - BIOCSDLT = 0x80044278 - BIOCSETF = 0x80104267 - BIOCSETIF = 0x8020426c - BIOCSETWF = 0x8010427b - BIOCSFEEDBACK = 0x8004427d - BIOCSHDRCMPLT = 0x80044275 - BIOCSRSIG = 0x80044273 - BIOCSRTIMEOUT = 0x8010426d - BIOCSSEESENT = 0x80044277 - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x8 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_DEFAULTBUFSIZE = 0x1000 - BPF_DIV = 0x30 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x80000 - BPF_MAXINSNS = 0x200 - BPF_MAX_CLONES = 0x80 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MOD = 0x90 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_W = 0x0 - BPF_X = 0x8 - BPF_XOR = 0xa0 - BRKINT = 0x2 - CFLUSH = 0xf - CLOCAL = 0x8000 - CLOCK_MONOTONIC = 0x4 - CLOCK_MONOTONIC_FAST = 0xc - CLOCK_MONOTONIC_PRECISE = 0xb - CLOCK_PROCESS_CPUTIME_ID = 0xf - CLOCK_PROF = 0x2 - CLOCK_REALTIME = 0x0 - CLOCK_REALTIME_FAST = 0xa - CLOCK_REALTIME_PRECISE = 0x9 - CLOCK_SECOND = 0xd - CLOCK_THREAD_CPUTIME_ID = 0xe - CLOCK_UPTIME = 0x5 - CLOCK_UPTIME_FAST = 0x8 - CLOCK_UPTIME_PRECISE = 0x7 - CLOCK_VIRTUAL = 0x1 - CPUSTATES = 0x5 - CP_IDLE = 0x4 - CP_INTR = 0x3 - CP_NICE = 0x1 - CP_SYS = 0x2 - CP_USER = 0x0 - CREAD = 0x800 - CRTSCTS = 0x30000 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0x14 - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTL_HW = 0x6 - CTL_KERN = 0x1 - CTL_MAXNAME = 0xc - CTL_NET = 0x4 - DLT_A429 = 0xb8 - DLT_A653_ICM = 0xb9 - DLT_AIRONET_HEADER = 0x78 - DLT_AOS = 0xde - DLT_APPLE_IP_OVER_IEEE1394 = 0x8a - DLT_ARCNET = 0x7 - DLT_ARCNET_LINUX = 0x81 - DLT_ATM_CLIP = 0x13 - DLT_ATM_RFC1483 = 0xb - DLT_AURORA = 0x7e - DLT_AX25 = 0x3 - DLT_AX25_KISS = 0xca - DLT_BACNET_MS_TP = 0xa5 - DLT_BLUETOOTH_BREDR_BB = 0xff - DLT_BLUETOOTH_HCI_H4 = 0xbb - DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 - DLT_BLUETOOTH_LE_LL = 0xfb - DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 - DLT_BLUETOOTH_LINUX_MONITOR = 0xfe - DLT_CAN20B = 0xbe - DLT_CAN_SOCKETCAN = 0xe3 - DLT_CHAOS = 0x5 - DLT_CHDLC = 0x68 - DLT_CISCO_IOS = 0x76 - DLT_C_HDLC = 0x68 - DLT_C_HDLC_WITH_DIR = 0xcd - DLT_DBUS = 0xe7 - DLT_DECT = 0xdd - DLT_DOCSIS = 0x8f - DLT_DVB_CI = 0xeb - DLT_ECONET = 0x73 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0x6d - DLT_EPON = 0x103 - DLT_ERF = 0xc5 - DLT_ERF_ETH = 0xaf - DLT_ERF_POS = 0xb0 - DLT_FC_2 = 0xe0 - DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 - DLT_FDDI = 0xa - DLT_FLEXRAY = 0xd2 - DLT_FRELAY = 0x6b - DLT_FRELAY_WITH_DIR = 0xce - DLT_GCOM_SERIAL = 0xad - DLT_GCOM_T1E1 = 0xac - DLT_GPF_F = 0xab - DLT_GPF_T = 0xaa - DLT_GPRS_LLC = 0xa9 - DLT_GSMTAP_ABIS = 0xda - DLT_GSMTAP_UM = 0xd9 - DLT_HHDLC = 0x79 - DLT_IBM_SN = 0x92 - DLT_IBM_SP = 0x91 - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_IEEE802_11_RADIO_AVS = 0xa3 - DLT_IEEE802_15_4 = 0xc3 - DLT_IEEE802_15_4_LINUX = 0xbf - DLT_IEEE802_15_4_NOFCS = 0xe6 - DLT_IEEE802_15_4_NONASK_PHY = 0xd7 - DLT_IEEE802_16_MAC_CPS = 0xbc - DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 - DLT_INFINIBAND = 0xf7 - DLT_IPFILTER = 0x74 - DLT_IPMB = 0xc7 - DLT_IPMB_LINUX = 0xd1 - DLT_IPMI_HPM_2 = 0x104 - DLT_IPNET = 0xe2 - DLT_IPOIB = 0xf2 - DLT_IPV4 = 0xe4 - DLT_IPV6 = 0xe5 - DLT_IP_OVER_FC = 0x7a - DLT_ISO_14443 = 0x108 - DLT_JUNIPER_ATM1 = 0x89 - DLT_JUNIPER_ATM2 = 0x87 - DLT_JUNIPER_ATM_CEMIC = 0xee - DLT_JUNIPER_CHDLC = 0xb5 - DLT_JUNIPER_ES = 0x84 - DLT_JUNIPER_ETHER = 0xb2 - DLT_JUNIPER_FIBRECHANNEL = 0xea - DLT_JUNIPER_FRELAY = 0xb4 - DLT_JUNIPER_GGSN = 0x85 - DLT_JUNIPER_ISM = 0xc2 - DLT_JUNIPER_MFR = 0x86 - DLT_JUNIPER_MLFR = 0x83 - DLT_JUNIPER_MLPPP = 0x82 - DLT_JUNIPER_MONITOR = 0xa4 - DLT_JUNIPER_PIC_PEER = 0xae - DLT_JUNIPER_PPP = 0xb3 - DLT_JUNIPER_PPPOE = 0xa7 - DLT_JUNIPER_PPPOE_ATM = 0xa8 - DLT_JUNIPER_SERVICES = 0x88 - DLT_JUNIPER_SRX_E2E = 0xe9 - DLT_JUNIPER_ST = 0xc8 - DLT_JUNIPER_VP = 0xb7 - DLT_JUNIPER_VS = 0xe8 - DLT_LAPB_WITH_DIR = 0xcf - DLT_LAPD = 0xcb - DLT_LIN = 0xd4 - DLT_LINUX_EVDEV = 0xd8 - DLT_LINUX_IRDA = 0x90 - DLT_LINUX_LAPD = 0xb1 - DLT_LINUX_SLL = 0x71 - DLT_LOOP = 0x6c - DLT_LTALK = 0x72 - DLT_MATCHING_MAX = 0x109 - DLT_MATCHING_MIN = 0x68 - DLT_MFR = 0xb6 - DLT_MOST = 0xd3 - DLT_MPEG_2_TS = 0xf3 - DLT_MPLS = 0xdb - DLT_MTP2 = 0x8c - DLT_MTP2_WITH_PHDR = 0x8b - DLT_MTP3 = 0x8d - DLT_MUX27010 = 0xec - DLT_NETANALYZER = 0xf0 - DLT_NETANALYZER_TRANSPARENT = 0xf1 - DLT_NETLINK = 0xfd - DLT_NFC_LLCP = 0xf5 - DLT_NFLOG = 0xef - DLT_NG40 = 0xf4 - DLT_NULL = 0x0 - DLT_PCI_EXP = 0x7d - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x12 - DLT_PKTAP = 0x102 - DLT_PPI = 0xc0 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0x10 - DLT_PPP_ETHER = 0x33 - DLT_PPP_PPPD = 0xa6 - DLT_PPP_SERIAL = 0x32 - DLT_PPP_WITH_DIR = 0xcc - DLT_PRISM_HEADER = 0x77 - DLT_PROFIBUS_DL = 0x101 - DLT_PRONET = 0x4 - DLT_RAIF1 = 0xc6 - DLT_RAW = 0xc - DLT_RDS = 0x109 - DLT_REDBACK_SMARTEDGE = 0x20 - DLT_RIO = 0x7c - DLT_RTAC_SERIAL = 0xfa - DLT_SCCP = 0x8e - DLT_SCTP = 0xf8 - DLT_SITA = 0xc4 - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xf - DLT_STANAG_5066_D_PDU = 0xed - DLT_SUNATM = 0x7b - DLT_SYMANTEC_FIREWALL = 0x63 - DLT_TZSP = 0x80 - DLT_USB = 0xba - DLT_USBPCAP = 0xf9 - DLT_USB_FREEBSD = 0xba - DLT_USB_LINUX = 0xbd - DLT_USB_LINUX_MMAPPED = 0xdc - DLT_USER0 = 0x93 - DLT_USER1 = 0x94 - DLT_USER10 = 0x9d - DLT_USER11 = 0x9e - DLT_USER12 = 0x9f - DLT_USER13 = 0xa0 - DLT_USER14 = 0xa1 - DLT_USER15 = 0xa2 - DLT_USER2 = 0x95 - DLT_USER3 = 0x96 - DLT_USER4 = 0x97 - DLT_USER5 = 0x98 - DLT_USER6 = 0x99 - DLT_USER7 = 0x9a - DLT_USER8 = 0x9b - DLT_USER9 = 0x9c - DLT_WATTSTOPPER_DLM = 0x107 - DLT_WIHART = 0xdf - DLT_WIRESHARK_UPPER_PDU = 0xfc - DLT_X2E_SERIAL = 0xd5 - DLT_X2E_XORAYA = 0xd6 - DLT_ZWAVE_R1_R2 = 0x105 - DLT_ZWAVE_R3 = 0x106 - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DBF = 0xf - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - DT_WHT = 0xe - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EVFILT_AIO = -0x3 - EVFILT_EXCEPT = -0x8 - EVFILT_FS = -0xa - EVFILT_MARKER = 0xf - EVFILT_PROC = -0x5 - EVFILT_READ = -0x1 - EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0xa - EVFILT_TIMER = -0x7 - EVFILT_USER = -0x9 - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_DISPATCH = 0x80 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG1 = 0x2000 - EV_HUP = 0x800 - EV_NODATA = 0x1000 - EV_ONESHOT = 0x10 - EV_RECEIPT = 0x40 - EV_SYSFLAGS = 0xf800 - EXTA = 0x4b00 - EXTB = 0x9600 - EXTEXIT_LWP = 0x10000 - EXTEXIT_PROC = 0x0 - EXTEXIT_SETINT = 0x1 - EXTEXIT_SIMPLE = 0x0 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x400 - FLUSHO = 0x800000 - F_DUP2FD = 0xa - F_DUP2FD_CLOEXEC = 0x12 - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0x11 - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0x7 - F_GETOWN = 0x5 - F_OK = 0x0 - F_RDLCK = 0x1 - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0x8 - F_SETLKW = 0x9 - F_SETOWN = 0x6 - F_UNLCK = 0x2 - F_WRLCK = 0x3 - HUPCL = 0x4000 - HW_MACHINE = 0x1 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFAN_ARRIVAL = 0x0 - IFAN_DEPARTURE = 0x1 - IFF_ALLMULTI = 0x200 - IFF_ALTPHYS = 0x4000 - IFF_BROADCAST = 0x2 - IFF_CANTCHANGE = 0x318e72 - IFF_DEBUG = 0x4 - IFF_IDIRECT = 0x200000 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MONITOR = 0x40000 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_NPOLLING = 0x100000 - IFF_OACTIVE = 0x400 - IFF_OACTIVE_COMPAT = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_POLLING = 0x10000 - IFF_POLLING_COMPAT = 0x10000 - IFF_PPROMISC = 0x20000 - IFF_PROMISC = 0x100 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_SMART = 0x20 - IFF_STATICARP = 0x80000 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_1822 = 0x2 - IFT_A12MPPSWITCH = 0x82 - IFT_AAL2 = 0xbb - IFT_AAL5 = 0x31 - IFT_ADSL = 0x5e - IFT_AFLANE8023 = 0x3b - IFT_AFLANE8025 = 0x3c - IFT_ARAP = 0x58 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ASYNC = 0x54 - IFT_ATM = 0x25 - IFT_ATMDXI = 0x69 - IFT_ATMFUNI = 0x6a - IFT_ATMIMA = 0x6b - IFT_ATMLOGICAL = 0x50 - IFT_ATMRADIO = 0xbd - IFT_ATMSUBINTERFACE = 0x86 - IFT_ATMVCIENDPT = 0xc2 - IFT_ATMVIRTUAL = 0x95 - IFT_BGPPOLICYACCOUNTING = 0xa2 - IFT_BRIDGE = 0xd1 - IFT_BSC = 0x53 - IFT_CARP = 0xf8 - IFT_CCTEMUL = 0x3d - IFT_CEPT = 0x13 - IFT_CES = 0x85 - IFT_CHANNEL = 0x46 - IFT_CNR = 0x55 - IFT_COFFEE = 0x84 - IFT_COMPOSITELINK = 0x9b - IFT_DCN = 0x8d - IFT_DIGITALPOWERLINE = 0x8a - IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba - IFT_DLSW = 0x4a - IFT_DOCSCABLEDOWNSTREAM = 0x80 - IFT_DOCSCABLEMACLAYER = 0x7f - IFT_DOCSCABLEUPSTREAM = 0x81 - IFT_DS0 = 0x51 - IFT_DS0BUNDLE = 0x52 - IFT_DS1FDL = 0xaa - IFT_DS3 = 0x1e - IFT_DTM = 0x8c - IFT_DVBASILN = 0xac - IFT_DVBASIOUT = 0xad - IFT_DVBRCCDOWNSTREAM = 0x93 - IFT_DVBRCCMACLAYER = 0x92 - IFT_DVBRCCUPSTREAM = 0x94 - IFT_ENC = 0xf4 - IFT_EON = 0x19 - IFT_EPLRS = 0x57 - IFT_ESCON = 0x49 - IFT_ETHER = 0x6 - IFT_FAST = 0x7d - IFT_FASTETHER = 0x3e - IFT_FASTETHERFX = 0x45 - IFT_FDDI = 0xf - IFT_FIBRECHANNEL = 0x38 - IFT_FRAMERELAYINTERCONNECT = 0x3a - IFT_FRAMERELAYMPI = 0x5c - IFT_FRDLCIENDPT = 0xc1 - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_FRF16MFRBUNDLE = 0xa3 - IFT_FRFORWARD = 0x9e - IFT_G703AT2MB = 0x43 - IFT_G703AT64K = 0x42 - IFT_GIF = 0xf0 - IFT_GIGABITETHERNET = 0x75 - IFT_GR303IDT = 0xb2 - IFT_GR303RDT = 0xb1 - IFT_H323GATEKEEPER = 0xa4 - IFT_H323PROXY = 0xa5 - IFT_HDH1822 = 0x3 - IFT_HDLC = 0x76 - IFT_HDSL2 = 0xa8 - IFT_HIPERLAN2 = 0xb7 - IFT_HIPPI = 0x2f - IFT_HIPPIINTERFACE = 0x39 - IFT_HOSTPAD = 0x5a - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IBM370PARCHAN = 0x48 - IFT_IDSL = 0x9a - IFT_IEEE1394 = 0x90 - IFT_IEEE80211 = 0x47 - IFT_IEEE80212 = 0x37 - IFT_IEEE8023ADLAG = 0xa1 - IFT_IFGSN = 0x91 - IFT_IMT = 0xbe - IFT_INTERLEAVE = 0x7c - IFT_IP = 0x7e - IFT_IPFORWARD = 0x8e - IFT_IPOVERATM = 0x72 - IFT_IPOVERCDLC = 0x6d - IFT_IPOVERCLAW = 0x6e - IFT_IPSWITCH = 0x4e - IFT_ISDN = 0x3f - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISDNS = 0x4b - IFT_ISDNU = 0x4c - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88025CRFPINT = 0x62 - IFT_ISO88025DTR = 0x56 - IFT_ISO88025FIBER = 0x73 - IFT_ISO88026 = 0xa - IFT_ISUP = 0xb3 - IFT_L2VLAN = 0x87 - IFT_L3IPVLAN = 0x88 - IFT_L3IPXVLAN = 0x89 - IFT_LAPB = 0x10 - IFT_LAPD = 0x4d - IFT_LAPF = 0x77 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MEDIAMAILOVERIP = 0x8b - IFT_MFSIGLINK = 0xa7 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_MPC = 0x71 - IFT_MPLS = 0xa6 - IFT_MPLSTUNNEL = 0x96 - IFT_MSDSL = 0x8f - IFT_MVL = 0xbf - IFT_MYRINET = 0x63 - IFT_NFAS = 0xaf - IFT_NSIP = 0x1b - IFT_OPTICALCHANNEL = 0xc3 - IFT_OPTICALTRANSPORT = 0xc4 - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PFLOG = 0xf5 - IFT_PFSYNC = 0xf6 - IFT_PLC = 0xae - IFT_POS = 0xab - IFT_PPP = 0x17 - IFT_PPPMULTILINKBUNDLE = 0x6c - IFT_PROPBWAP2MP = 0xb8 - IFT_PROPCNLS = 0x59 - IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 - IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 - IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 - IFT_PROPMUX = 0x36 - IFT_PROPVIRTUAL = 0x35 - IFT_PROPWIRELESSP2P = 0x9d - IFT_PTPSERIAL = 0x16 - IFT_PVC = 0xf1 - IFT_QLLC = 0x44 - IFT_RADIOMAC = 0xbc - IFT_RADSL = 0x5f - IFT_REACHDSL = 0xc0 - IFT_RFC1483 = 0x9f - IFT_RS232 = 0x21 - IFT_RSRB = 0x4f - IFT_SDLC = 0x11 - IFT_SDSL = 0x60 - IFT_SHDSL = 0xa9 - IFT_SIP = 0x1f - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SONET = 0x27 - IFT_SONETOVERHEADCHANNEL = 0xb9 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_SRP = 0x97 - IFT_SS7SIGLINK = 0x9c - IFT_STACKTOSTACK = 0x6f - IFT_STARLAN = 0xb - IFT_STF = 0xf3 - IFT_T1 = 0x12 - IFT_TDLC = 0x74 - IFT_TERMPAD = 0x5b - IFT_TR008 = 0xb0 - IFT_TRANSPHDLC = 0x7b - IFT_TUNNEL = 0x83 - IFT_ULTRA = 0x1d - IFT_USB = 0xa0 - IFT_V11 = 0x40 - IFT_V35 = 0x2d - IFT_V36 = 0x41 - IFT_V37 = 0x78 - IFT_VDSL = 0x61 - IFT_VIRTUALIPADDRESS = 0x70 - IFT_VOICEEM = 0x64 - IFT_VOICEENCAP = 0x67 - IFT_VOICEFXO = 0x65 - IFT_VOICEFXS = 0x66 - IFT_VOICEOVERATM = 0x98 - IFT_VOICEOVERFRAMERELAY = 0x99 - IFT_VOICEOVERIP = 0x68 - IFT_X213 = 0x5d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25HUNTGROUP = 0x7a - IFT_X25MLP = 0x79 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LOOPBACKNET = 0x7f - IN_RFC3021_MASK = 0xfffffffe - IPPROTO_3PC = 0x22 - IPPROTO_ADFS = 0x44 - IPPROTO_AH = 0x33 - IPPROTO_AHIP = 0x3d - IPPROTO_APES = 0x63 - IPPROTO_ARGUS = 0xd - IPPROTO_AX25 = 0x5d - IPPROTO_BHA = 0x31 - IPPROTO_BLT = 0x1e - IPPROTO_BRSATMON = 0x4c - IPPROTO_CARP = 0x70 - IPPROTO_CFTP = 0x3e - IPPROTO_CHAOS = 0x10 - IPPROTO_CMTP = 0x26 - IPPROTO_CPHB = 0x49 - IPPROTO_CPNX = 0x48 - IPPROTO_DDP = 0x25 - IPPROTO_DGP = 0x56 - IPPROTO_DIVERT = 0xfe - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_EMCON = 0xe - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GMTP = 0x64 - IPPROTO_GRE = 0x2f - IPPROTO_HELLO = 0x3f - IPPROTO_HMP = 0x14 - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IDPR = 0x23 - IPPROTO_IDRP = 0x2d - IPPROTO_IGMP = 0x2 - IPPROTO_IGP = 0x55 - IPPROTO_IGRP = 0x58 - IPPROTO_IL = 0x28 - IPPROTO_INLSP = 0x34 - IPPROTO_INP = 0x20 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPCV = 0x47 - IPPROTO_IPEIP = 0x5e - IPPROTO_IPIP = 0x4 - IPPROTO_IPPC = 0x43 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_IRTP = 0x1c - IPPROTO_KRYPTOLAN = 0x41 - IPPROTO_LARP = 0x5b - IPPROTO_LEAF1 = 0x19 - IPPROTO_LEAF2 = 0x1a - IPPROTO_MAX = 0x100 - IPPROTO_MAXID = 0x34 - IPPROTO_MEAS = 0x13 - IPPROTO_MHRP = 0x30 - IPPROTO_MICP = 0x5f - IPPROTO_MOBILE = 0x37 - IPPROTO_MTP = 0x5c - IPPROTO_MUX = 0x12 - IPPROTO_ND = 0x4d - IPPROTO_NHRP = 0x36 - IPPROTO_NONE = 0x3b - IPPROTO_NSP = 0x1f - IPPROTO_NVPII = 0xb - IPPROTO_OSPFIGP = 0x59 - IPPROTO_PFSYNC = 0xf0 - IPPROTO_PGM = 0x71 - IPPROTO_PIGP = 0x9 - IPPROTO_PIM = 0x67 - IPPROTO_PRM = 0x15 - IPPROTO_PUP = 0xc - IPPROTO_PVP = 0x4b - IPPROTO_RAW = 0xff - IPPROTO_RCCMON = 0xa - IPPROTO_RDP = 0x1b - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_RVD = 0x42 - IPPROTO_SATEXPAK = 0x40 - IPPROTO_SATMON = 0x45 - IPPROTO_SCCSP = 0x60 - IPPROTO_SDRP = 0x2a - IPPROTO_SEP = 0x21 - IPPROTO_SKIP = 0x39 - IPPROTO_SRPC = 0x5a - IPPROTO_ST = 0x7 - IPPROTO_SVMTP = 0x52 - IPPROTO_SWIPE = 0x35 - IPPROTO_TCF = 0x57 - IPPROTO_TCP = 0x6 - IPPROTO_TLSP = 0x38 - IPPROTO_TP = 0x1d - IPPROTO_TPXX = 0x27 - IPPROTO_TRUNK1 = 0x17 - IPPROTO_TRUNK2 = 0x18 - IPPROTO_TTP = 0x54 - IPPROTO_UDP = 0x11 - IPPROTO_UNKNOWN = 0x102 - IPPROTO_VINES = 0x53 - IPPROTO_VISA = 0x46 - IPPROTO_VMTP = 0x51 - IPPROTO_WBEXPAK = 0x4f - IPPROTO_WBMON = 0x4e - IPPROTO_WSN = 0x4a - IPPROTO_XNET = 0xf - IPPROTO_XTP = 0x24 - IPV6_AUTOFLOWLABEL = 0x3b - IPV6_BINDV6ONLY = 0x1b - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_DONTFRAG = 0x3e - IPV6_DSTOPTS = 0x32 - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FRAGTTL = 0x78 - IPV6_FW_ADD = 0x1e - IPV6_FW_DEL = 0x1f - IPV6_FW_FLUSH = 0x20 - IPV6_FW_GET = 0x22 - IPV6_FW_ZERO = 0x21 - IPV6_HLIMDEC = 0x1 - IPV6_HOPLIMIT = 0x2f - IPV6_HOPOPTS = 0x31 - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXPACKET = 0xffff - IPV6_MINHLIM = 0x28 - IPV6_MMTU = 0x500 - IPV6_MSFILTER = 0x4a - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_PATHMTU = 0x2c - IPV6_PKTINFO = 0x2e - IPV6_PKTOPTIONS = 0x34 - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_PREFER_TEMPADDR = 0x3f - IPV6_RECVDSTOPTS = 0x28 - IPV6_RECVHOPLIMIT = 0x25 - IPV6_RECVHOPOPTS = 0x27 - IPV6_RECVPATHMTU = 0x2b - IPV6_RECVPKTINFO = 0x24 - IPV6_RECVRTHDR = 0x26 - IPV6_RECVTCLASS = 0x39 - IPV6_RTHDR = 0x33 - IPV6_RTHDRDSTOPTS = 0x23 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x3d - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2a - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IP_ADD_MEMBERSHIP = 0xc - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DROP_MEMBERSHIP = 0xd - IP_DUMMYNET_CONFIGURE = 0x3c - IP_DUMMYNET_DEL = 0x3d - IP_DUMMYNET_FLUSH = 0x3e - IP_DUMMYNET_GET = 0x40 - IP_FW_ADD = 0x32 - IP_FW_DEL = 0x33 - IP_FW_FLUSH = 0x34 - IP_FW_GET = 0x36 - IP_FW_RESETLOG = 0x37 - IP_FW_TBL_ADD = 0x2a - IP_FW_TBL_CREATE = 0x28 - IP_FW_TBL_DEL = 0x2b - IP_FW_TBL_DESTROY = 0x29 - IP_FW_TBL_EXPIRE = 0x2f - IP_FW_TBL_FLUSH = 0x2c - IP_FW_TBL_GET = 0x2d - IP_FW_TBL_ZERO = 0x2e - IP_FW_X = 0x31 - IP_FW_ZERO = 0x35 - IP_HDRINCL = 0x2 - IP_MAXPACKET = 0xffff - IP_MAX_MEMBERSHIPS = 0x14 - IP_MF = 0x2000 - IP_MINTTL = 0x42 - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_MULTICAST_VIF = 0xe - IP_OFFMASK = 0x1fff - IP_OPTIONS = 0x1 - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVIF = 0x14 - IP_RECVOPTS = 0x5 - IP_RECVRETOPTS = 0x6 - IP_RECVTTL = 0x41 - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_RSVP_OFF = 0x10 - IP_RSVP_ON = 0xf - IP_RSVP_VIF_OFF = 0x12 - IP_RSVP_VIF_ON = 0x11 - IP_TOS = 0x3 - IP_TTL = 0x4 - ISIG = 0x80 - ISTRIP = 0x20 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - KERN_HOSTNAME = 0xa - KERN_OSRELEASE = 0x2 - KERN_OSTYPE = 0x1 - KERN_VERSION = 0x4 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_AUTOSYNC = 0x7 - MADV_CONTROL_END = 0xb - MADV_CONTROL_START = 0xa - MADV_CORE = 0x9 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x5 - MADV_INVAL = 0xa - MADV_NOCORE = 0x8 - MADV_NORMAL = 0x0 - MADV_NOSYNC = 0x6 - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_SETMAP = 0xb - MADV_WILLNEED = 0x3 - MAP_ANON = 0x1000 - MAP_ANONYMOUS = 0x1000 - MAP_COPY = 0x2 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_HASSEMAPHORE = 0x200 - MAP_INHERIT = 0x80 - MAP_NOCORE = 0x20000 - MAP_NOEXTEND = 0x100 - MAP_NORESERVE = 0x40 - MAP_NOSYNC = 0x800 - MAP_PRIVATE = 0x2 - MAP_RENAME = 0x20 - MAP_SHARED = 0x1 - MAP_SIZEALIGN = 0x40000 - MAP_STACK = 0x400 - MAP_TRYFIXED = 0x10000 - MAP_VPAGETABLE = 0x2000 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MNT_ASYNC = 0x40 - MNT_AUTOMOUNTED = 0x20 - MNT_CMDFLAGS = 0xf0000 - MNT_DEFEXPORTED = 0x200 - MNT_DELEXPORT = 0x20000 - MNT_EXKERB = 0x800 - MNT_EXPORTANON = 0x400 - MNT_EXPORTED = 0x100 - MNT_EXPUBLIC = 0x20000000 - MNT_EXRDONLY = 0x80 - MNT_FORCE = 0x80000 - MNT_IGNORE = 0x800000 - MNT_LAZY = 0x4 - MNT_LOCAL = 0x1000 - MNT_NOATIME = 0x10000000 - MNT_NOCLUSTERR = 0x40000000 - MNT_NOCLUSTERW = 0x80000000 - MNT_NODEV = 0x10 - MNT_NOEXEC = 0x4 - MNT_NOSUID = 0x8 - MNT_NOSYMFOLLOW = 0x400000 - MNT_NOWAIT = 0x2 - MNT_QUOTA = 0x2000 - MNT_RDONLY = 0x1 - MNT_RELOAD = 0x40000 - MNT_ROOTFS = 0x4000 - MNT_SOFTDEP = 0x200000 - MNT_SUIDDIR = 0x100000 - MNT_SYNCHRONOUS = 0x2 - MNT_TRIM = 0x1000000 - MNT_UPDATE = 0x10000 - MNT_USER = 0x8000 - MNT_VISFLAGMASK = 0xf1f0ffff - MNT_WAIT = 0x1 - MSG_CMSG_CLOEXEC = 0x1000 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOF = 0x100 - MSG_EOR = 0x8 - MSG_FBLOCKING = 0x10000 - MSG_FMASK = 0xffff0000 - MSG_FNONBLOCKING = 0x20000 - MSG_NOSIGNAL = 0x400 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_SYNC = 0x800 - MSG_TRUNC = 0x10 - MSG_UNUSED09 = 0x200 - MSG_WAITALL = 0x40 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x2 - MS_SYNC = 0x0 - NAME_MAX = 0xff - NET_RT_DUMP = 0x1 - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x3 - NET_RT_MAXID = 0x4 - NFDBITS = 0x40 - NOFLSH = 0x80000000 - NOKERNINFO = 0x2000000 - NOTE_ATTRIB = 0x8 - NOTE_CHILD = 0x4 - NOTE_DELETE = 0x1 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXTEND = 0x4 - NOTE_FFAND = 0x40000000 - NOTE_FFCOPY = 0xc0000000 - NOTE_FFCTRLMASK = 0xc0000000 - NOTE_FFLAGSMASK = 0xffffff - NOTE_FFNOP = 0x0 - NOTE_FFOR = 0x80000000 - NOTE_FORK = 0x40000000 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_OOB = 0x2 - NOTE_PCTRLMASK = 0xf0000000 - NOTE_PDATAMASK = 0xfffff - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_TRIGGER = 0x1000000 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - ONLCR = 0x2 - ONLRET = 0x40 - ONOCR = 0x20 - ONOEOT = 0x8 - OPOST = 0x1 - OXTABS = 0x4 - O_ACCMODE = 0x3 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x20000 - O_CREAT = 0x200 - O_DIRECT = 0x10000 - O_DIRECTORY = 0x8000000 - O_EXCL = 0x800 - O_EXLOCK = 0x20 - O_FAPPEND = 0x100000 - O_FASYNCWRITE = 0x800000 - O_FBLOCKING = 0x40000 - O_FMASK = 0xfc0000 - O_FNONBLOCKING = 0x80000 - O_FOFFSET = 0x200000 - O_FSYNC = 0x80 - O_FSYNCWRITE = 0x400000 - O_NDELAY = 0x4 - O_NOCTTY = 0x8000 - O_NOFOLLOW = 0x100 - O_NONBLOCK = 0x4 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_SHLOCK = 0x10 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - RLIMIT_AS = 0xa - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_MEMLOCK = 0x6 - RLIMIT_NOFILE = 0x8 - RLIMIT_NPROC = 0x7 - RLIMIT_RSS = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_MAX = 0xb - RTAX_MPLS1 = 0x8 - RTAX_MPLS2 = 0x9 - RTAX_MPLS3 = 0xa - RTAX_NETMASK = 0x2 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_MPLS1 = 0x100 - RTA_MPLS2 = 0x200 - RTA_MPLS3 = 0x400 - RTA_NETMASK = 0x4 - RTF_BLACKHOLE = 0x1000 - RTF_BROADCAST = 0x400000 - RTF_CLONING = 0x100 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_GATEWAY = 0x2 - RTF_HOST = 0x4 - RTF_LLINFO = 0x400 - RTF_LOCAL = 0x200000 - RTF_MODIFIED = 0x20 - RTF_MPLSOPS = 0x1000000 - RTF_MULTICAST = 0x800000 - RTF_PINNED = 0x100000 - RTF_PRCLONING = 0x10000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_PROTO3 = 0x40000 - RTF_REJECT = 0x8 - RTF_STATIC = 0x800 - RTF_UP = 0x1 - RTF_WASCLONED = 0x20000 - RTF_XRESOLVE = 0x200 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_DELMADDR = 0x10 - RTM_GET = 0x4 - RTM_IEEE80211 = 0x12 - RTM_IFANNOUNCE = 0x11 - RTM_IFINFO = 0xe - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_NEWMADDR = 0xf - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_VERSION = 0x7 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_IWCAPSEGS = 0x400 - RTV_IWMAXSEGS = 0x200 - RTV_MSL = 0x100 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - SCM_CREDS = 0x3 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x2 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80206931 - SIOCAIFADDR = 0x8040691a - SIOCAIFGROUP = 0x80286987 - SIOCALIFADDR = 0x8118691b - SIOCATMARK = 0x40047307 - SIOCDELMULTI = 0x80206932 - SIOCDIFADDR = 0x80206919 - SIOCDIFGROUP = 0x80286989 - SIOCDIFPHYADDR = 0x80206949 - SIOCDLIFADDR = 0x8118691d - SIOCGDRVSPEC = 0xc028697b - SIOCGETSGCNT = 0xc0207210 - SIOCGETVIFCNT = 0xc028720f - SIOCGHIWAT = 0x40047301 - SIOCGIFADDR = 0xc0206921 - SIOCGIFALIAS = 0xc0406929 - SIOCGIFBRDADDR = 0xc0206923 - SIOCGIFCAP = 0xc020691f - SIOCGIFCONF = 0xc0106924 - SIOCGIFDATA = 0xc0206926 - SIOCGIFDSTADDR = 0xc0206922 - SIOCGIFFLAGS = 0xc0206911 - SIOCGIFGENERIC = 0xc020693a - SIOCGIFGMEMB = 0xc028698a - SIOCGIFGROUP = 0xc0286988 - SIOCGIFINDEX = 0xc0206920 - SIOCGIFMEDIA = 0xc0306938 - SIOCGIFMETRIC = 0xc0206917 - SIOCGIFMTU = 0xc0206933 - SIOCGIFNETMASK = 0xc0206925 - SIOCGIFPDSTADDR = 0xc0206948 - SIOCGIFPHYS = 0xc0206935 - SIOCGIFPOLLCPU = 0xc020697e - SIOCGIFPSRCADDR = 0xc0206947 - SIOCGIFSTATUS = 0xc331693b - SIOCGIFTSOLEN = 0xc0206980 - SIOCGLIFADDR = 0xc118691c - SIOCGLIFPHYADDR = 0xc118694b - SIOCGLOWAT = 0x40047303 - SIOCGPGRP = 0x40047309 - SIOCGPRIVATE_0 = 0xc0206950 - SIOCGPRIVATE_1 = 0xc0206951 - SIOCIFCREATE = 0xc020697a - SIOCIFCREATE2 = 0xc020697c - SIOCIFDESTROY = 0x80206979 - SIOCIFGCLONERS = 0xc0106978 - SIOCSDRVSPEC = 0x8028697b - SIOCSHIWAT = 0x80047300 - SIOCSIFADDR = 0x8020690c - SIOCSIFBRDADDR = 0x80206913 - SIOCSIFCAP = 0x8020691e - SIOCSIFDSTADDR = 0x8020690e - SIOCSIFFLAGS = 0x80206910 - SIOCSIFGENERIC = 0x80206939 - SIOCSIFLLADDR = 0x8020693c - SIOCSIFMEDIA = 0xc0206937 - SIOCSIFMETRIC = 0x80206918 - SIOCSIFMTU = 0x80206934 - SIOCSIFNAME = 0x80206928 - SIOCSIFNETMASK = 0x80206916 - SIOCSIFPHYADDR = 0x80406946 - SIOCSIFPHYS = 0x80206936 - SIOCSIFPOLLCPU = 0x8020697d - SIOCSIFTSOLEN = 0x8020697f - SIOCSLIFPHYADDR = 0x8118694a - SIOCSLOWAT = 0x80047302 - SIOCSPGRP = 0x80047308 - SOCK_CLOEXEC = 0x10000000 - SOCK_DGRAM = 0x2 - SOCK_MAXADDRLEN = 0xff - SOCK_NONBLOCK = 0x20000000 - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_ACCEPTFILTER = 0x1000 - SO_BROADCAST = 0x20 - SO_CPUHINT = 0x1030 - SO_DEBUG = 0x1 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LINGER = 0x80 - SO_NOSIGPIPE = 0x800 - SO_OOBINLINE = 0x100 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 - SO_RERROR = 0x2000 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDSPACE = 0x100a - SO_SNDTIMEO = 0x1005 - SO_TIMESTAMP = 0x400 - SO_TYPE = 0x1008 - SO_USELOOPBACK = 0x40 - S_BLKSIZE = 0x200 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDB = 0x9000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFLNK = 0xa000 - S_IFMT = 0xf000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IFWHT = 0xe000 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISTXT = 0x200 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXGRP = 0x8 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - TAB0 = 0x0 - TAB3 = 0x4 - TABDLY = 0x4 - TCIFLUSH = 0x1 - TCIOFF = 0x3 - TCIOFLUSH = 0x3 - TCION = 0x4 - TCOFLUSH = 0x2 - TCOOFF = 0x1 - TCOON = 0x2 - TCP_FASTKEEP = 0x80 - TCP_KEEPCNT = 0x400 - TCP_KEEPIDLE = 0x100 - TCP_KEEPINIT = 0x20 - TCP_KEEPINTVL = 0x200 - TCP_MAXBURST = 0x4 - TCP_MAXHLEN = 0x3c - TCP_MAXOLEN = 0x28 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_WINSHIFT = 0xe - TCP_MINMSS = 0x100 - TCP_MIN_WINSHIFT = 0x5 - TCP_MSS = 0x200 - TCP_NODELAY = 0x1 - TCP_NOOPT = 0x8 - TCP_NOPUSH = 0x4 - TCP_SIGNATURE_ENABLE = 0x10 - TCSAFLUSH = 0x2 - TIMER_ABSTIME = 0x1 - TIMER_RELTIME = 0x0 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCONS = 0x80047462 - TIOCDCDTIMESTAMP = 0x40107458 - TIOCDRAIN = 0x2000745e - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLUSH = 0x80047410 - TIOCGDRAINWAIT = 0x40047456 - TIOCGETA = 0x402c7413 - TIOCGETD = 0x4004741a - TIOCGPGRP = 0x40047477 - TIOCGSID = 0x40047463 - TIOCGWINSZ = 0x40087468 - TIOCISPTMASTER = 0x20007455 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGDTRWAIT = 0x4004745a - TIOCMGET = 0x4004746a - TIOCMODG = 0x40047403 - TIOCMODS = 0x80047404 - TIOCMSDTRWAIT = 0x8004745b - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCREMOTE = 0x80047469 - TIOCSBRK = 0x2000747b - TIOCSCTTY = 0x20007461 - TIOCSDRAINWAIT = 0x80047457 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x802c7414 - TIOCSETAF = 0x802c7416 - TIOCSETAW = 0x802c7415 - TIOCSETD = 0x8004741b - TIOCSIG = 0x2000745f - TIOCSPGRP = 0x80047476 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x20007465 - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCTIMESTAMP = 0x40107459 - TIOCUCNTL = 0x80047466 - TOSTOP = 0x400000 - UTIME_NOW = -0x1 - UTIME_OMIT = -0x2 - VCHECKPT = 0x13 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VERASE2 = 0x7 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 - VM_BCACHE_SIZE_MAX = 0x0 - VM_SWZONE_SIZE_MAX = 0x4000000000 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VTIME = 0x11 - VWERASE = 0x4 - WCONTINUED = 0x4 - WCOREFLAG = 0x80 - WEXITED = 0x10 - WLINUXCLONE = 0x80000000 - WNOHANG = 0x1 - WNOWAIT = 0x8 - WSTOPPED = 0x2 - WTRAPPED = 0x20 - WUNTRACED = 0x2 -) - -// Errors -const ( - E2BIG = syscall.Errno(0x7) - EACCES = syscall.Errno(0xd) - EADDRINUSE = syscall.Errno(0x30) - EADDRNOTAVAIL = syscall.Errno(0x31) - EAFNOSUPPORT = syscall.Errno(0x2f) - EAGAIN = syscall.Errno(0x23) - EALREADY = syscall.Errno(0x25) - EASYNC = syscall.Errno(0x63) - EAUTH = syscall.Errno(0x50) - EBADF = syscall.Errno(0x9) - EBADMSG = syscall.Errno(0x59) - EBADRPC = syscall.Errno(0x48) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x55) - ECHILD = syscall.Errno(0xa) - ECONNABORTED = syscall.Errno(0x35) - ECONNREFUSED = syscall.Errno(0x3d) - ECONNRESET = syscall.Errno(0x36) - EDEADLK = syscall.Errno(0xb) - EDESTADDRREQ = syscall.Errno(0x27) - EDOM = syscall.Errno(0x21) - EDOOFUS = syscall.Errno(0x58) - EDQUOT = syscall.Errno(0x45) - EEXIST = syscall.Errno(0x11) - EFAULT = syscall.Errno(0xe) - EFBIG = syscall.Errno(0x1b) - EFTYPE = syscall.Errno(0x4f) - EHOSTDOWN = syscall.Errno(0x40) - EHOSTUNREACH = syscall.Errno(0x41) - EIDRM = syscall.Errno(0x52) - EILSEQ = syscall.Errno(0x56) - EINPROGRESS = syscall.Errno(0x24) - EINTR = syscall.Errno(0x4) - EINVAL = syscall.Errno(0x16) - EIO = syscall.Errno(0x5) - EISCONN = syscall.Errno(0x38) - EISDIR = syscall.Errno(0x15) - ELAST = syscall.Errno(0x63) - ELOOP = syscall.Errno(0x3e) - EMFILE = syscall.Errno(0x18) - EMLINK = syscall.Errno(0x1f) - EMSGSIZE = syscall.Errno(0x28) - EMULTIHOP = syscall.Errno(0x5a) - ENAMETOOLONG = syscall.Errno(0x3f) - ENEEDAUTH = syscall.Errno(0x51) - ENETDOWN = syscall.Errno(0x32) - ENETRESET = syscall.Errno(0x34) - ENETUNREACH = syscall.Errno(0x33) - ENFILE = syscall.Errno(0x17) - ENOATTR = syscall.Errno(0x57) - ENOBUFS = syscall.Errno(0x37) - ENODEV = syscall.Errno(0x13) - ENOENT = syscall.Errno(0x2) - ENOEXEC = syscall.Errno(0x8) - ENOLCK = syscall.Errno(0x4d) - ENOLINK = syscall.Errno(0x5b) - ENOMEDIUM = syscall.Errno(0x5d) - ENOMEM = syscall.Errno(0xc) - ENOMSG = syscall.Errno(0x53) - ENOPROTOOPT = syscall.Errno(0x2a) - ENOSPC = syscall.Errno(0x1c) - ENOSYS = syscall.Errno(0x4e) - ENOTBLK = syscall.Errno(0xf) - ENOTCONN = syscall.Errno(0x39) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x42) - ENOTSOCK = syscall.Errno(0x26) - ENOTSUP = syscall.Errno(0x2d) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x2d) - EOVERFLOW = syscall.Errno(0x54) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x2e) - EPIPE = syscall.Errno(0x20) - EPROCLIM = syscall.Errno(0x43) - EPROCUNAVAIL = syscall.Errno(0x4c) - EPROGMISMATCH = syscall.Errno(0x4b) - EPROGUNAVAIL = syscall.Errno(0x4a) - EPROTO = syscall.Errno(0x5c) - EPROTONOSUPPORT = syscall.Errno(0x2b) - EPROTOTYPE = syscall.Errno(0x29) - ERANGE = syscall.Errno(0x22) - EREMOTE = syscall.Errno(0x47) - EROFS = syscall.Errno(0x1e) - ERPCMISMATCH = syscall.Errno(0x49) - ESHUTDOWN = syscall.Errno(0x3a) - ESOCKTNOSUPPORT = syscall.Errno(0x2c) - ESPIPE = syscall.Errno(0x1d) - ESRCH = syscall.Errno(0x3) - ESTALE = syscall.Errno(0x46) - ETIMEDOUT = syscall.Errno(0x3c) - ETOOMANYREFS = syscall.Errno(0x3b) - ETXTBSY = syscall.Errno(0x1a) - EUSERS = syscall.Errno(0x44) - EWOULDBLOCK = syscall.Errno(0x23) - EXDEV = syscall.Errno(0x12) -) - -// Signals -const ( - SIGABRT = syscall.Signal(0x6) - SIGALRM = syscall.Signal(0xe) - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x14) - SIGCKPT = syscall.Signal(0x21) - SIGCKPTEXIT = syscall.Signal(0x22) - SIGCONT = syscall.Signal(0x13) - SIGEMT = syscall.Signal(0x7) - SIGFPE = syscall.Signal(0x8) - SIGHUP = syscall.Signal(0x1) - SIGILL = syscall.Signal(0x4) - SIGINFO = syscall.Signal(0x1d) - SIGINT = syscall.Signal(0x2) - SIGIO = syscall.Signal(0x17) - SIGIOT = syscall.Signal(0x6) - SIGKILL = syscall.Signal(0x9) - SIGPIPE = syscall.Signal(0xd) - SIGPROF = syscall.Signal(0x1b) - SIGQUIT = syscall.Signal(0x3) - SIGSEGV = syscall.Signal(0xb) - SIGSTOP = syscall.Signal(0x11) - SIGSYS = syscall.Signal(0xc) - SIGTERM = syscall.Signal(0xf) - SIGTHR = syscall.Signal(0x20) - SIGTRAP = syscall.Signal(0x5) - SIGTSTP = syscall.Signal(0x12) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x10) - SIGUSR1 = syscall.Signal(0x1e) - SIGUSR2 = syscall.Signal(0x1f) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "device not configured"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EDEADLK", "resource deadlock avoided"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "cross-device link"}, - {19, "ENODEV", "operation not supported by device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "result too large"}, - {35, "EWOULDBLOCK", "resource temporarily unavailable"}, - {36, "EINPROGRESS", "operation now in progress"}, - {37, "EALREADY", "operation already in progress"}, - {38, "ENOTSOCK", "socket operation on non-socket"}, - {39, "EDESTADDRREQ", "destination address required"}, - {40, "EMSGSIZE", "message too long"}, - {41, "EPROTOTYPE", "protocol wrong type for socket"}, - {42, "ENOPROTOOPT", "protocol not available"}, - {43, "EPROTONOSUPPORT", "protocol not supported"}, - {44, "ESOCKTNOSUPPORT", "socket type not supported"}, - {45, "EOPNOTSUPP", "operation not supported"}, - {46, "EPFNOSUPPORT", "protocol family not supported"}, - {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, - {48, "EADDRINUSE", "address already in use"}, - {49, "EADDRNOTAVAIL", "can't assign requested address"}, - {50, "ENETDOWN", "network is down"}, - {51, "ENETUNREACH", "network is unreachable"}, - {52, "ENETRESET", "network dropped connection on reset"}, - {53, "ECONNABORTED", "software caused connection abort"}, - {54, "ECONNRESET", "connection reset by peer"}, - {55, "ENOBUFS", "no buffer space available"}, - {56, "EISCONN", "socket is already connected"}, - {57, "ENOTCONN", "socket is not connected"}, - {58, "ESHUTDOWN", "can't send after socket shutdown"}, - {59, "ETOOMANYREFS", "too many references: can't splice"}, - {60, "ETIMEDOUT", "operation timed out"}, - {61, "ECONNREFUSED", "connection refused"}, - {62, "ELOOP", "too many levels of symbolic links"}, - {63, "ENAMETOOLONG", "file name too long"}, - {64, "EHOSTDOWN", "host is down"}, - {65, "EHOSTUNREACH", "no route to host"}, - {66, "ENOTEMPTY", "directory not empty"}, - {67, "EPROCLIM", "too many processes"}, - {68, "EUSERS", "too many users"}, - {69, "EDQUOT", "disc quota exceeded"}, - {70, "ESTALE", "stale NFS file handle"}, - {71, "EREMOTE", "too many levels of remote in path"}, - {72, "EBADRPC", "RPC struct is bad"}, - {73, "ERPCMISMATCH", "RPC version wrong"}, - {74, "EPROGUNAVAIL", "RPC prog. not avail"}, - {75, "EPROGMISMATCH", "program version wrong"}, - {76, "EPROCUNAVAIL", "bad procedure for program"}, - {77, "ENOLCK", "no locks available"}, - {78, "ENOSYS", "function not implemented"}, - {79, "EFTYPE", "inappropriate file type or format"}, - {80, "EAUTH", "authentication error"}, - {81, "ENEEDAUTH", "need authenticator"}, - {82, "EIDRM", "identifier removed"}, - {83, "ENOMSG", "no message of desired type"}, - {84, "EOVERFLOW", "value too large to be stored in data type"}, - {85, "ECANCELED", "operation canceled"}, - {86, "EILSEQ", "illegal byte sequence"}, - {87, "ENOATTR", "attribute not found"}, - {88, "EDOOFUS", "programming error"}, - {89, "EBADMSG", "bad message"}, - {90, "EMULTIHOP", "multihop attempted"}, - {91, "ENOLINK", "link has been severed"}, - {92, "EPROTO", "protocol error"}, - {93, "ENOMEDIUM", "no medium found"}, - {99, "EASYNC", "unknown error: 99"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, - {6, "SIGIOT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGURG", "urgent I/O condition"}, - {17, "SIGSTOP", "suspended (signal)"}, - {18, "SIGTSTP", "suspended"}, - {19, "SIGCONT", "continued"}, - {20, "SIGCHLD", "child exited"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGIO", "I/O possible"}, - {24, "SIGXCPU", "cputime limit exceeded"}, - {25, "SIGXFSZ", "filesize limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window size changes"}, - {29, "SIGINFO", "information request"}, - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, - {32, "SIGTHR", "thread Scheduler"}, - {33, "SIGCKPT", "checkPoint"}, - {34, "SIGCKPTEXIT", "checkPointExit"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go deleted file mode 100644 index f8c2c51..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go +++ /dev/null @@ -1,2043 +0,0 @@ -// mkerrors.sh -m32 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build 386 && freebsd -// +build 386,freebsd - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -m32 _const.go - -package unix - -import "syscall" - -const ( - AF_APPLETALK = 0x10 - AF_ARP = 0x23 - AF_ATM = 0x1e - AF_BLUETOOTH = 0x24 - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1a - AF_ECMA = 0x8 - AF_HYLINK = 0xf - AF_IEEE80211 = 0x25 - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x1c - AF_INET6_SDP = 0x2a - AF_INET_SDP = 0x28 - AF_IPX = 0x17 - AF_ISDN = 0x1a - AF_ISO = 0x7 - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x2a - AF_NATM = 0x1d - AF_NETBIOS = 0x6 - AF_NETGRAPH = 0x20 - AF_OSI = 0x7 - AF_PUP = 0x4 - AF_ROUTE = 0x11 - AF_SCLUSTER = 0x22 - AF_SIP = 0x18 - AF_SLOW = 0x21 - AF_SNA = 0xb - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - AF_VENDOR00 = 0x27 - AF_VENDOR01 = 0x29 - AF_VENDOR02 = 0x2b - AF_VENDOR03 = 0x2d - AF_VENDOR04 = 0x2f - AF_VENDOR05 = 0x31 - AF_VENDOR06 = 0x33 - AF_VENDOR07 = 0x35 - AF_VENDOR08 = 0x37 - AF_VENDOR09 = 0x39 - AF_VENDOR10 = 0x3b - AF_VENDOR11 = 0x3d - AF_VENDOR12 = 0x3f - AF_VENDOR13 = 0x41 - AF_VENDOR14 = 0x43 - AF_VENDOR15 = 0x45 - AF_VENDOR16 = 0x47 - AF_VENDOR17 = 0x49 - AF_VENDOR18 = 0x4b - AF_VENDOR19 = 0x4d - AF_VENDOR20 = 0x4f - AF_VENDOR21 = 0x51 - AF_VENDOR22 = 0x53 - AF_VENDOR23 = 0x55 - AF_VENDOR24 = 0x57 - AF_VENDOR25 = 0x59 - AF_VENDOR26 = 0x5b - AF_VENDOR27 = 0x5d - AF_VENDOR28 = 0x5f - AF_VENDOR29 = 0x61 - AF_VENDOR30 = 0x63 - AF_VENDOR31 = 0x65 - AF_VENDOR32 = 0x67 - AF_VENDOR33 = 0x69 - AF_VENDOR34 = 0x6b - AF_VENDOR35 = 0x6d - AF_VENDOR36 = 0x6f - AF_VENDOR37 = 0x71 - AF_VENDOR38 = 0x73 - AF_VENDOR39 = 0x75 - AF_VENDOR40 = 0x77 - AF_VENDOR41 = 0x79 - AF_VENDOR42 = 0x7b - AF_VENDOR43 = 0x7d - AF_VENDOR44 = 0x7f - AF_VENDOR45 = 0x81 - AF_VENDOR46 = 0x83 - AF_VENDOR47 = 0x85 - ALTWERASE = 0x200 - B0 = 0x0 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B230400 = 0x38400 - B2400 = 0x960 - B28800 = 0x7080 - B300 = 0x12c - B38400 = 0x9600 - B460800 = 0x70800 - B4800 = 0x12c0 - B50 = 0x32 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B921600 = 0xe1000 - B9600 = 0x2580 - BIOCFEEDBACK = 0x8004427c - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDIRECTION = 0x40044276 - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc0084279 - BIOCGETBUFMODE = 0x4004427d - BIOCGETIF = 0x4020426b - BIOCGETZMAX = 0x4004427f - BIOCGHDRCMPLT = 0x40044274 - BIOCGRSIG = 0x40044272 - BIOCGRTIMEOUT = 0x4008426e - BIOCGSEESENT = 0x40044276 - BIOCGSTATS = 0x4008426f - BIOCGTSTAMP = 0x40044283 - BIOCIMMEDIATE = 0x80044270 - BIOCLOCK = 0x2000427a - BIOCPROMISC = 0x20004269 - BIOCROTZBUF = 0x400c4280 - BIOCSBLEN = 0xc0044266 - BIOCSDIRECTION = 0x80044277 - BIOCSDLT = 0x80044278 - BIOCSETBUFMODE = 0x8004427e - BIOCSETF = 0x80084267 - BIOCSETFNR = 0x80084282 - BIOCSETIF = 0x8020426c - BIOCSETVLANPCP = 0x80044285 - BIOCSETWF = 0x8008427b - BIOCSETZBUF = 0x800c4281 - BIOCSHDRCMPLT = 0x80044275 - BIOCSRSIG = 0x80044273 - BIOCSRTIMEOUT = 0x8008426d - BIOCSSEESENT = 0x80044277 - BIOCSTSTAMP = 0x80044284 - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x4 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_BUFMODE_BUFFER = 0x1 - BPF_BUFMODE_ZBUF = 0x2 - BPF_DIV = 0x30 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x80000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MOD = 0x90 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_T_BINTIME = 0x2 - BPF_T_BINTIME_FAST = 0x102 - BPF_T_BINTIME_MONOTONIC = 0x202 - BPF_T_BINTIME_MONOTONIC_FAST = 0x302 - BPF_T_FAST = 0x100 - BPF_T_FLAG_MASK = 0x300 - BPF_T_FORMAT_MASK = 0x3 - BPF_T_MICROTIME = 0x0 - BPF_T_MICROTIME_FAST = 0x100 - BPF_T_MICROTIME_MONOTONIC = 0x200 - BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 - BPF_T_MONOTONIC = 0x200 - BPF_T_MONOTONIC_FAST = 0x300 - BPF_T_NANOTIME = 0x1 - BPF_T_NANOTIME_FAST = 0x101 - BPF_T_NANOTIME_MONOTONIC = 0x201 - BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 - BPF_T_NONE = 0x3 - BPF_T_NORMAL = 0x0 - BPF_W = 0x0 - BPF_X = 0x8 - BPF_XOR = 0xa0 - BRKINT = 0x2 - CAP_ACCEPT = 0x200000020000000 - CAP_ACL_CHECK = 0x400000000010000 - CAP_ACL_DELETE = 0x400000000020000 - CAP_ACL_GET = 0x400000000040000 - CAP_ACL_SET = 0x400000000080000 - CAP_ALL0 = 0x20007ffffffffff - CAP_ALL1 = 0x4000000001fffff - CAP_BIND = 0x200000040000000 - CAP_BINDAT = 0x200008000000400 - CAP_CHFLAGSAT = 0x200000000001400 - CAP_CONNECT = 0x200000080000000 - CAP_CONNECTAT = 0x200010000000400 - CAP_CREATE = 0x200000000000040 - CAP_EVENT = 0x400000000000020 - CAP_EXTATTR_DELETE = 0x400000000001000 - CAP_EXTATTR_GET = 0x400000000002000 - CAP_EXTATTR_LIST = 0x400000000004000 - CAP_EXTATTR_SET = 0x400000000008000 - CAP_FCHDIR = 0x200000000000800 - CAP_FCHFLAGS = 0x200000000001000 - CAP_FCHMOD = 0x200000000002000 - CAP_FCHMODAT = 0x200000000002400 - CAP_FCHOWN = 0x200000000004000 - CAP_FCHOWNAT = 0x200000000004400 - CAP_FCNTL = 0x200000000008000 - CAP_FCNTL_ALL = 0x78 - CAP_FCNTL_GETFL = 0x8 - CAP_FCNTL_GETOWN = 0x20 - CAP_FCNTL_SETFL = 0x10 - CAP_FCNTL_SETOWN = 0x40 - CAP_FEXECVE = 0x200000000000080 - CAP_FLOCK = 0x200000000010000 - CAP_FPATHCONF = 0x200000000020000 - CAP_FSCK = 0x200000000040000 - CAP_FSTAT = 0x200000000080000 - CAP_FSTATAT = 0x200000000080400 - CAP_FSTATFS = 0x200000000100000 - CAP_FSYNC = 0x200000000000100 - CAP_FTRUNCATE = 0x200000000000200 - CAP_FUTIMES = 0x200000000200000 - CAP_FUTIMESAT = 0x200000000200400 - CAP_GETPEERNAME = 0x200000100000000 - CAP_GETSOCKNAME = 0x200000200000000 - CAP_GETSOCKOPT = 0x200000400000000 - CAP_IOCTL = 0x400000000000080 - CAP_IOCTLS_ALL = 0x7fffffff - CAP_KQUEUE = 0x400000000100040 - CAP_KQUEUE_CHANGE = 0x400000000100000 - CAP_KQUEUE_EVENT = 0x400000000000040 - CAP_LINKAT_SOURCE = 0x200020000000400 - CAP_LINKAT_TARGET = 0x200000000400400 - CAP_LISTEN = 0x200000800000000 - CAP_LOOKUP = 0x200000000000400 - CAP_MAC_GET = 0x400000000000001 - CAP_MAC_SET = 0x400000000000002 - CAP_MKDIRAT = 0x200000000800400 - CAP_MKFIFOAT = 0x200000001000400 - CAP_MKNODAT = 0x200000002000400 - CAP_MMAP = 0x200000000000010 - CAP_MMAP_R = 0x20000000000001d - CAP_MMAP_RW = 0x20000000000001f - CAP_MMAP_RWX = 0x20000000000003f - CAP_MMAP_RX = 0x20000000000003d - CAP_MMAP_W = 0x20000000000001e - CAP_MMAP_WX = 0x20000000000003e - CAP_MMAP_X = 0x20000000000003c - CAP_PDGETPID = 0x400000000000200 - CAP_PDKILL = 0x400000000000800 - CAP_PDWAIT = 0x400000000000400 - CAP_PEELOFF = 0x200001000000000 - CAP_POLL_EVENT = 0x400000000000020 - CAP_PREAD = 0x20000000000000d - CAP_PWRITE = 0x20000000000000e - CAP_READ = 0x200000000000001 - CAP_RECV = 0x200000000000001 - CAP_RENAMEAT_SOURCE = 0x200000004000400 - CAP_RENAMEAT_TARGET = 0x200040000000400 - CAP_RIGHTS_VERSION = 0x0 - CAP_RIGHTS_VERSION_00 = 0x0 - CAP_SEEK = 0x20000000000000c - CAP_SEEK_TELL = 0x200000000000004 - CAP_SEM_GETVALUE = 0x400000000000004 - CAP_SEM_POST = 0x400000000000008 - CAP_SEM_WAIT = 0x400000000000010 - CAP_SEND = 0x200000000000002 - CAP_SETSOCKOPT = 0x200002000000000 - CAP_SHUTDOWN = 0x200004000000000 - CAP_SOCK_CLIENT = 0x200007780000003 - CAP_SOCK_SERVER = 0x200007f60000003 - CAP_SYMLINKAT = 0x200000008000400 - CAP_TTYHOOK = 0x400000000000100 - CAP_UNLINKAT = 0x200000010000400 - CAP_UNUSED0_44 = 0x200080000000000 - CAP_UNUSED0_57 = 0x300000000000000 - CAP_UNUSED1_22 = 0x400000000200000 - CAP_UNUSED1_57 = 0x500000000000000 - CAP_WRITE = 0x200000000000002 - CFLUSH = 0xf - CLOCAL = 0x8000 - CLOCK_MONOTONIC = 0x4 - CLOCK_MONOTONIC_FAST = 0xc - CLOCK_MONOTONIC_PRECISE = 0xb - CLOCK_PROCESS_CPUTIME_ID = 0xf - CLOCK_PROF = 0x2 - CLOCK_REALTIME = 0x0 - CLOCK_REALTIME_FAST = 0xa - CLOCK_REALTIME_PRECISE = 0x9 - CLOCK_SECOND = 0xd - CLOCK_THREAD_CPUTIME_ID = 0xe - CLOCK_UPTIME = 0x5 - CLOCK_UPTIME_FAST = 0x8 - CLOCK_UPTIME_PRECISE = 0x7 - CLOCK_VIRTUAL = 0x1 - CPUSTATES = 0x5 - CP_IDLE = 0x4 - CP_INTR = 0x3 - CP_NICE = 0x1 - CP_SYS = 0x2 - CP_USER = 0x0 - CREAD = 0x800 - CRTSCTS = 0x30000 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0x14 - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTL_HW = 0x6 - CTL_KERN = 0x1 - CTL_MAXNAME = 0x18 - CTL_NET = 0x4 - DIOCGATTR = 0xc144648e - DIOCGDELETE = 0x80106488 - DIOCGFLUSH = 0x20006487 - DIOCGFRONTSTUFF = 0x40086486 - DIOCGFWHEADS = 0x40046483 - DIOCGFWSECTORS = 0x40046482 - DIOCGIDENT = 0x41006489 - DIOCGMEDIASIZE = 0x40086481 - DIOCGPHYSPATH = 0x4400648d - DIOCGPROVIDERNAME = 0x4400648a - DIOCGSECTORSIZE = 0x40046480 - DIOCGSTRIPEOFFSET = 0x4008648c - DIOCGSTRIPESIZE = 0x4008648b - DIOCSKERNELDUMP = 0x804c6490 - DIOCSKERNELDUMP_FREEBSD11 = 0x80046485 - DIOCZONECMD = 0xc06c648f - DLT_A429 = 0xb8 - DLT_A653_ICM = 0xb9 - DLT_AIRONET_HEADER = 0x78 - DLT_AOS = 0xde - DLT_APPLE_IP_OVER_IEEE1394 = 0x8a - DLT_ARCNET = 0x7 - DLT_ARCNET_LINUX = 0x81 - DLT_ATM_CLIP = 0x13 - DLT_ATM_RFC1483 = 0xb - DLT_AURORA = 0x7e - DLT_AX25 = 0x3 - DLT_AX25_KISS = 0xca - DLT_BACNET_MS_TP = 0xa5 - DLT_BLUETOOTH_BREDR_BB = 0xff - DLT_BLUETOOTH_HCI_H4 = 0xbb - DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 - DLT_BLUETOOTH_LE_LL = 0xfb - DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 - DLT_BLUETOOTH_LINUX_MONITOR = 0xfe - DLT_CAN20B = 0xbe - DLT_CAN_SOCKETCAN = 0xe3 - DLT_CHAOS = 0x5 - DLT_CHDLC = 0x68 - DLT_CISCO_IOS = 0x76 - DLT_CLASS_NETBSD_RAWAF = 0x2240000 - DLT_C_HDLC = 0x68 - DLT_C_HDLC_WITH_DIR = 0xcd - DLT_DBUS = 0xe7 - DLT_DECT = 0xdd - DLT_DISPLAYPORT_AUX = 0x113 - DLT_DOCSIS = 0x8f - DLT_DOCSIS31_XRA31 = 0x111 - DLT_DVB_CI = 0xeb - DLT_ECONET = 0x73 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0x6d - DLT_EPON = 0x103 - DLT_ERF = 0xc5 - DLT_ERF_ETH = 0xaf - DLT_ERF_POS = 0xb0 - DLT_ETHERNET_MPACKET = 0x112 - DLT_FC_2 = 0xe0 - DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 - DLT_FDDI = 0xa - DLT_FLEXRAY = 0xd2 - DLT_FRELAY = 0x6b - DLT_FRELAY_WITH_DIR = 0xce - DLT_GCOM_SERIAL = 0xad - DLT_GCOM_T1E1 = 0xac - DLT_GPF_F = 0xab - DLT_GPF_T = 0xaa - DLT_GPRS_LLC = 0xa9 - DLT_GSMTAP_ABIS = 0xda - DLT_GSMTAP_UM = 0xd9 - DLT_IBM_SN = 0x92 - DLT_IBM_SP = 0x91 - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_IEEE802_11_RADIO_AVS = 0xa3 - DLT_IEEE802_15_4 = 0xc3 - DLT_IEEE802_15_4_LINUX = 0xbf - DLT_IEEE802_15_4_NOFCS = 0xe6 - DLT_IEEE802_15_4_NONASK_PHY = 0xd7 - DLT_IEEE802_16_MAC_CPS = 0xbc - DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 - DLT_INFINIBAND = 0xf7 - DLT_IPFILTER = 0x74 - DLT_IPMB_KONTRON = 0xc7 - DLT_IPMB_LINUX = 0xd1 - DLT_IPMI_HPM_2 = 0x104 - DLT_IPNET = 0xe2 - DLT_IPOIB = 0xf2 - DLT_IPV4 = 0xe4 - DLT_IPV6 = 0xe5 - DLT_IP_OVER_FC = 0x7a - DLT_ISO_14443 = 0x108 - DLT_JUNIPER_ATM1 = 0x89 - DLT_JUNIPER_ATM2 = 0x87 - DLT_JUNIPER_ATM_CEMIC = 0xee - DLT_JUNIPER_CHDLC = 0xb5 - DLT_JUNIPER_ES = 0x84 - DLT_JUNIPER_ETHER = 0xb2 - DLT_JUNIPER_FIBRECHANNEL = 0xea - DLT_JUNIPER_FRELAY = 0xb4 - DLT_JUNIPER_GGSN = 0x85 - DLT_JUNIPER_ISM = 0xc2 - DLT_JUNIPER_MFR = 0x86 - DLT_JUNIPER_MLFR = 0x83 - DLT_JUNIPER_MLPPP = 0x82 - DLT_JUNIPER_MONITOR = 0xa4 - DLT_JUNIPER_PIC_PEER = 0xae - DLT_JUNIPER_PPP = 0xb3 - DLT_JUNIPER_PPPOE = 0xa7 - DLT_JUNIPER_PPPOE_ATM = 0xa8 - DLT_JUNIPER_SERVICES = 0x88 - DLT_JUNIPER_SRX_E2E = 0xe9 - DLT_JUNIPER_ST = 0xc8 - DLT_JUNIPER_VP = 0xb7 - DLT_JUNIPER_VS = 0xe8 - DLT_LAPB_WITH_DIR = 0xcf - DLT_LAPD = 0xcb - DLT_LIN = 0xd4 - DLT_LINUX_EVDEV = 0xd8 - DLT_LINUX_IRDA = 0x90 - DLT_LINUX_LAPD = 0xb1 - DLT_LINUX_PPP_WITHDIRECTION = 0xa6 - DLT_LINUX_SLL = 0x71 - DLT_LINUX_SLL2 = 0x114 - DLT_LOOP = 0x6c - DLT_LORATAP = 0x10e - DLT_LTALK = 0x72 - DLT_MATCHING_MAX = 0x114 - DLT_MATCHING_MIN = 0x68 - DLT_MFR = 0xb6 - DLT_MOST = 0xd3 - DLT_MPEG_2_TS = 0xf3 - DLT_MPLS = 0xdb - DLT_MTP2 = 0x8c - DLT_MTP2_WITH_PHDR = 0x8b - DLT_MTP3 = 0x8d - DLT_MUX27010 = 0xec - DLT_NETANALYZER = 0xf0 - DLT_NETANALYZER_TRANSPARENT = 0xf1 - DLT_NETLINK = 0xfd - DLT_NFC_LLCP = 0xf5 - DLT_NFLOG = 0xef - DLT_NG40 = 0xf4 - DLT_NORDIC_BLE = 0x110 - DLT_NULL = 0x0 - DLT_OPENFLOW = 0x10b - DLT_PCI_EXP = 0x7d - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x79 - DLT_PKTAP = 0x102 - DLT_PPI = 0xc0 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0xe - DLT_PPP_ETHER = 0x33 - DLT_PPP_PPPD = 0xa6 - DLT_PPP_SERIAL = 0x32 - DLT_PPP_WITH_DIR = 0xcc - DLT_PPP_WITH_DIRECTION = 0xa6 - DLT_PRISM_HEADER = 0x77 - DLT_PROFIBUS_DL = 0x101 - DLT_PRONET = 0x4 - DLT_RAIF1 = 0xc6 - DLT_RAW = 0xc - DLT_RDS = 0x109 - DLT_REDBACK_SMARTEDGE = 0x20 - DLT_RIO = 0x7c - DLT_RTAC_SERIAL = 0xfa - DLT_SCCP = 0x8e - DLT_SCTP = 0xf8 - DLT_SDLC = 0x10c - DLT_SITA = 0xc4 - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xd - DLT_STANAG_5066_D_PDU = 0xed - DLT_SUNATM = 0x7b - DLT_SYMANTEC_FIREWALL = 0x63 - DLT_TI_LLN_SNIFFER = 0x10d - DLT_TZSP = 0x80 - DLT_USB = 0xba - DLT_USBPCAP = 0xf9 - DLT_USB_DARWIN = 0x10a - DLT_USB_FREEBSD = 0xba - DLT_USB_LINUX = 0xbd - DLT_USB_LINUX_MMAPPED = 0xdc - DLT_USER0 = 0x93 - DLT_USER1 = 0x94 - DLT_USER10 = 0x9d - DLT_USER11 = 0x9e - DLT_USER12 = 0x9f - DLT_USER13 = 0xa0 - DLT_USER14 = 0xa1 - DLT_USER15 = 0xa2 - DLT_USER2 = 0x95 - DLT_USER3 = 0x96 - DLT_USER4 = 0x97 - DLT_USER5 = 0x98 - DLT_USER6 = 0x99 - DLT_USER7 = 0x9a - DLT_USER8 = 0x9b - DLT_USER9 = 0x9c - DLT_VSOCK = 0x10f - DLT_WATTSTOPPER_DLM = 0x107 - DLT_WIHART = 0xdf - DLT_WIRESHARK_UPPER_PDU = 0xfc - DLT_X2E_SERIAL = 0xd5 - DLT_X2E_XORAYA = 0xd6 - DLT_ZWAVE_R1_R2 = 0x105 - DLT_ZWAVE_R3 = 0x106 - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - DT_WHT = 0xe - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EVFILT_AIO = -0x3 - EVFILT_EMPTY = -0xd - EVFILT_FS = -0x9 - EVFILT_LIO = -0xa - EVFILT_PROC = -0x5 - EVFILT_PROCDESC = -0x8 - EVFILT_READ = -0x1 - EVFILT_SENDFILE = -0xc - EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0xd - EVFILT_TIMER = -0x7 - EVFILT_USER = -0xb - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 - EVNAMEMAP_NAME_SIZE = 0x40 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_DISPATCH = 0x80 - EV_DROP = 0x1000 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG1 = 0x2000 - EV_FLAG2 = 0x4000 - EV_FORCEONESHOT = 0x100 - EV_ONESHOT = 0x10 - EV_RECEIPT = 0x40 - EV_SYSFLAGS = 0xf000 - EXTA = 0x4b00 - EXTATTR_MAXNAMELEN = 0xff - EXTATTR_NAMESPACE_EMPTY = 0x0 - EXTATTR_NAMESPACE_SYSTEM = 0x2 - EXTATTR_NAMESPACE_USER = 0x1 - EXTB = 0x9600 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x400 - FLUSHO = 0x800000 - F_CANCEL = 0x5 - F_DUP2FD = 0xa - F_DUP2FD_CLOEXEC = 0x12 - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0x11 - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0xb - F_GETOWN = 0x5 - F_OGETLK = 0x7 - F_OK = 0x0 - F_OSETLK = 0x8 - F_OSETLKW = 0x9 - F_RDAHEAD = 0x10 - F_RDLCK = 0x1 - F_READAHEAD = 0xf - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0xc - F_SETLKW = 0xd - F_SETLK_REMOTE = 0xe - F_SETOWN = 0x6 - F_UNLCK = 0x2 - F_UNLCKSYS = 0x4 - F_WRLCK = 0x3 - HUPCL = 0x4000 - HW_MACHINE = 0x1 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFAN_ARRIVAL = 0x0 - IFAN_DEPARTURE = 0x1 - IFCAP_WOL_MAGIC = 0x2000 - IFF_ALLMULTI = 0x200 - IFF_ALTPHYS = 0x4000 - IFF_BROADCAST = 0x2 - IFF_CANTCHANGE = 0x218f52 - IFF_CANTCONFIG = 0x10000 - IFF_DEBUG = 0x4 - IFF_DRV_OACTIVE = 0x400 - IFF_DRV_RUNNING = 0x40 - IFF_DYING = 0x200000 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MONITOR = 0x40000 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_NOGROUP = 0x800000 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PPROMISC = 0x20000 - IFF_PROMISC = 0x100 - IFF_RENAMING = 0x400000 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_STATICARP = 0x80000 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_BRIDGE = 0xd1 - IFT_CARP = 0xf8 - IFT_IEEE1394 = 0x90 - IFT_INFINIBAND = 0xc7 - IFT_L2VLAN = 0x87 - IFT_L3IPVLAN = 0x88 - IFT_PPP = 0x17 - IFT_PROPVIRTUAL = 0x35 - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LOOPBACKNET = 0x7f - IN_RFC3021_MASK = 0xfffffffe - IPPROTO_3PC = 0x22 - IPPROTO_ADFS = 0x44 - IPPROTO_AH = 0x33 - IPPROTO_AHIP = 0x3d - IPPROTO_APES = 0x63 - IPPROTO_ARGUS = 0xd - IPPROTO_AX25 = 0x5d - IPPROTO_BHA = 0x31 - IPPROTO_BLT = 0x1e - IPPROTO_BRSATMON = 0x4c - IPPROTO_CARP = 0x70 - IPPROTO_CFTP = 0x3e - IPPROTO_CHAOS = 0x10 - IPPROTO_CMTP = 0x26 - IPPROTO_CPHB = 0x49 - IPPROTO_CPNX = 0x48 - IPPROTO_DCCP = 0x21 - IPPROTO_DDP = 0x25 - IPPROTO_DGP = 0x56 - IPPROTO_DIVERT = 0x102 - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_EMCON = 0xe - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GMTP = 0x64 - IPPROTO_GRE = 0x2f - IPPROTO_HELLO = 0x3f - IPPROTO_HIP = 0x8b - IPPROTO_HMP = 0x14 - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IDPR = 0x23 - IPPROTO_IDRP = 0x2d - IPPROTO_IGMP = 0x2 - IPPROTO_IGP = 0x55 - IPPROTO_IGRP = 0x58 - IPPROTO_IL = 0x28 - IPPROTO_INLSP = 0x34 - IPPROTO_INP = 0x20 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPCV = 0x47 - IPPROTO_IPEIP = 0x5e - IPPROTO_IPIP = 0x4 - IPPROTO_IPPC = 0x43 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_IRTP = 0x1c - IPPROTO_KRYPTOLAN = 0x41 - IPPROTO_LARP = 0x5b - IPPROTO_LEAF1 = 0x19 - IPPROTO_LEAF2 = 0x1a - IPPROTO_MAX = 0x100 - IPPROTO_MEAS = 0x13 - IPPROTO_MH = 0x87 - IPPROTO_MHRP = 0x30 - IPPROTO_MICP = 0x5f - IPPROTO_MOBILE = 0x37 - IPPROTO_MPLS = 0x89 - IPPROTO_MTP = 0x5c - IPPROTO_MUX = 0x12 - IPPROTO_ND = 0x4d - IPPROTO_NHRP = 0x36 - IPPROTO_NONE = 0x3b - IPPROTO_NSP = 0x1f - IPPROTO_NVPII = 0xb - IPPROTO_OLD_DIVERT = 0xfe - IPPROTO_OSPFIGP = 0x59 - IPPROTO_PFSYNC = 0xf0 - IPPROTO_PGM = 0x71 - IPPROTO_PIGP = 0x9 - IPPROTO_PIM = 0x67 - IPPROTO_PRM = 0x15 - IPPROTO_PUP = 0xc - IPPROTO_PVP = 0x4b - IPPROTO_RAW = 0xff - IPPROTO_RCCMON = 0xa - IPPROTO_RDP = 0x1b - IPPROTO_RESERVED_253 = 0xfd - IPPROTO_RESERVED_254 = 0xfe - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_RVD = 0x42 - IPPROTO_SATEXPAK = 0x40 - IPPROTO_SATMON = 0x45 - IPPROTO_SCCSP = 0x60 - IPPROTO_SCTP = 0x84 - IPPROTO_SDRP = 0x2a - IPPROTO_SEND = 0x103 - IPPROTO_SHIM6 = 0x8c - IPPROTO_SKIP = 0x39 - IPPROTO_SPACER = 0x7fff - IPPROTO_SRPC = 0x5a - IPPROTO_ST = 0x7 - IPPROTO_SVMTP = 0x52 - IPPROTO_SWIPE = 0x35 - IPPROTO_TCF = 0x57 - IPPROTO_TCP = 0x6 - IPPROTO_TLSP = 0x38 - IPPROTO_TP = 0x1d - IPPROTO_TPXX = 0x27 - IPPROTO_TRUNK1 = 0x17 - IPPROTO_TRUNK2 = 0x18 - IPPROTO_TTP = 0x54 - IPPROTO_UDP = 0x11 - IPPROTO_UDPLITE = 0x88 - IPPROTO_VINES = 0x53 - IPPROTO_VISA = 0x46 - IPPROTO_VMTP = 0x51 - IPPROTO_WBEXPAK = 0x4f - IPPROTO_WBMON = 0x4e - IPPROTO_WSN = 0x4a - IPPROTO_XNET = 0xf - IPPROTO_XTP = 0x24 - IPV6_AUTOFLOWLABEL = 0x3b - IPV6_BINDANY = 0x40 - IPV6_BINDMULTI = 0x41 - IPV6_BINDV6ONLY = 0x1b - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_DONTFRAG = 0x3e - IPV6_DSTOPTS = 0x32 - IPV6_FLOWID = 0x43 - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_LEN = 0x14 - IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FLOWTYPE = 0x44 - IPV6_FRAGTTL = 0x78 - IPV6_FW_ADD = 0x1e - IPV6_FW_DEL = 0x1f - IPV6_FW_FLUSH = 0x20 - IPV6_FW_GET = 0x22 - IPV6_FW_ZERO = 0x21 - IPV6_HLIMDEC = 0x1 - IPV6_HOPLIMIT = 0x2f - IPV6_HOPOPTS = 0x31 - IPV6_IPSEC_POLICY = 0x1c - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXOPTHDR = 0x800 - IPV6_MAXPACKET = 0xffff - IPV6_MAX_GROUP_SRC_FILTER = 0x200 - IPV6_MAX_MEMBERSHIPS = 0xfff - IPV6_MAX_SOCK_SRC_FILTER = 0x80 - IPV6_MMTU = 0x500 - IPV6_MSFILTER = 0x4a - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_ORIGDSTADDR = 0x48 - IPV6_PATHMTU = 0x2c - IPV6_PKTINFO = 0x2e - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_PREFER_TEMPADDR = 0x3f - IPV6_RECVDSTOPTS = 0x28 - IPV6_RECVFLOWID = 0x46 - IPV6_RECVHOPLIMIT = 0x25 - IPV6_RECVHOPOPTS = 0x27 - IPV6_RECVORIGDSTADDR = 0x48 - IPV6_RECVPATHMTU = 0x2b - IPV6_RECVPKTINFO = 0x24 - IPV6_RECVRSSBUCKETID = 0x47 - IPV6_RECVRTHDR = 0x26 - IPV6_RECVTCLASS = 0x39 - IPV6_RSSBUCKETID = 0x45 - IPV6_RSS_LISTEN_BUCKET = 0x42 - IPV6_RTHDR = 0x33 - IPV6_RTHDRDSTOPTS = 0x23 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x3d - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2a - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IPV6_VLAN_PCP = 0x4b - IP_ADD_MEMBERSHIP = 0xc - IP_ADD_SOURCE_MEMBERSHIP = 0x46 - IP_BINDANY = 0x18 - IP_BINDMULTI = 0x19 - IP_BLOCK_SOURCE = 0x48 - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DONTFRAG = 0x43 - IP_DROP_MEMBERSHIP = 0xd - IP_DROP_SOURCE_MEMBERSHIP = 0x47 - IP_DUMMYNET3 = 0x31 - IP_DUMMYNET_CONFIGURE = 0x3c - IP_DUMMYNET_DEL = 0x3d - IP_DUMMYNET_FLUSH = 0x3e - IP_DUMMYNET_GET = 0x40 - IP_FLOWID = 0x5a - IP_FLOWTYPE = 0x5b - IP_FW3 = 0x30 - IP_FW_ADD = 0x32 - IP_FW_DEL = 0x33 - IP_FW_FLUSH = 0x34 - IP_FW_GET = 0x36 - IP_FW_NAT_CFG = 0x38 - IP_FW_NAT_DEL = 0x39 - IP_FW_NAT_GET_CONFIG = 0x3a - IP_FW_NAT_GET_LOG = 0x3b - IP_FW_RESETLOG = 0x37 - IP_FW_TABLE_ADD = 0x28 - IP_FW_TABLE_DEL = 0x29 - IP_FW_TABLE_FLUSH = 0x2a - IP_FW_TABLE_GETSIZE = 0x2b - IP_FW_TABLE_LIST = 0x2c - IP_FW_ZERO = 0x35 - IP_HDRINCL = 0x2 - IP_IPSEC_POLICY = 0x15 - IP_MAXPACKET = 0xffff - IP_MAX_GROUP_SRC_FILTER = 0x200 - IP_MAX_MEMBERSHIPS = 0xfff - IP_MAX_SOCK_MUTE_FILTER = 0x80 - IP_MAX_SOCK_SRC_FILTER = 0x80 - IP_MF = 0x2000 - IP_MINTTL = 0x42 - IP_MSFILTER = 0x4a - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_MULTICAST_VIF = 0xe - IP_OFFMASK = 0x1fff - IP_ONESBCAST = 0x17 - IP_OPTIONS = 0x1 - IP_ORIGDSTADDR = 0x1b - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVFLOWID = 0x5d - IP_RECVIF = 0x14 - IP_RECVOPTS = 0x5 - IP_RECVORIGDSTADDR = 0x1b - IP_RECVRETOPTS = 0x6 - IP_RECVRSSBUCKETID = 0x5e - IP_RECVTOS = 0x44 - IP_RECVTTL = 0x41 - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_RSSBUCKETID = 0x5c - IP_RSS_LISTEN_BUCKET = 0x1a - IP_RSVP_OFF = 0x10 - IP_RSVP_ON = 0xf - IP_RSVP_VIF_OFF = 0x12 - IP_RSVP_VIF_ON = 0x11 - IP_SENDSRCADDR = 0x7 - IP_TOS = 0x3 - IP_TTL = 0x4 - IP_UNBLOCK_SOURCE = 0x49 - IP_VLAN_PCP = 0x4b - ISIG = 0x80 - ISTRIP = 0x20 - ITIMER_PROF = 0x2 - ITIMER_REAL = 0x0 - ITIMER_VIRTUAL = 0x1 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - KERN_HOSTNAME = 0xa - KERN_OSRELEASE = 0x2 - KERN_OSTYPE = 0x1 - KERN_VERSION = 0x4 - LOCAL_CONNWAIT = 0x4 - LOCAL_CREDS = 0x2 - LOCAL_PEERCRED = 0x1 - LOCAL_VENDOR = 0x80000000 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_AUTOSYNC = 0x7 - MADV_CORE = 0x9 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x5 - MADV_NOCORE = 0x8 - MADV_NORMAL = 0x0 - MADV_NOSYNC = 0x6 - MADV_PROTECT = 0xa - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_WILLNEED = 0x3 - MAP_ALIGNED_SUPER = 0x1000000 - MAP_ALIGNMENT_MASK = -0x1000000 - MAP_ALIGNMENT_SHIFT = 0x18 - MAP_ANON = 0x1000 - MAP_ANONYMOUS = 0x1000 - MAP_COPY = 0x2 - MAP_EXCL = 0x4000 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_GUARD = 0x2000 - MAP_HASSEMAPHORE = 0x200 - MAP_NOCORE = 0x20000 - MAP_NOSYNC = 0x800 - MAP_PREFAULT_READ = 0x40000 - MAP_PRIVATE = 0x2 - MAP_RESERVED0020 = 0x20 - MAP_RESERVED0040 = 0x40 - MAP_RESERVED0080 = 0x80 - MAP_RESERVED0100 = 0x100 - MAP_SHARED = 0x1 - MAP_STACK = 0x400 - MCAST_BLOCK_SOURCE = 0x54 - MCAST_EXCLUDE = 0x2 - MCAST_INCLUDE = 0x1 - MCAST_JOIN_GROUP = 0x50 - MCAST_JOIN_SOURCE_GROUP = 0x52 - MCAST_LEAVE_GROUP = 0x51 - MCAST_LEAVE_SOURCE_GROUP = 0x53 - MCAST_UNBLOCK_SOURCE = 0x55 - MCAST_UNDEFINED = 0x0 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MNT_ACLS = 0x8000000 - MNT_ASYNC = 0x40 - MNT_AUTOMOUNTED = 0x200000000 - MNT_BYFSID = 0x8000000 - MNT_CMDFLAGS = 0xd0f0000 - MNT_DEFEXPORTED = 0x200 - MNT_DELEXPORT = 0x20000 - MNT_EXKERB = 0x800 - MNT_EXPORTANON = 0x400 - MNT_EXPORTED = 0x100 - MNT_EXPUBLIC = 0x20000000 - MNT_EXRDONLY = 0x80 - MNT_FORCE = 0x80000 - MNT_GJOURNAL = 0x2000000 - MNT_IGNORE = 0x800000 - MNT_LAZY = 0x3 - MNT_LOCAL = 0x1000 - MNT_MULTILABEL = 0x4000000 - MNT_NFS4ACLS = 0x10 - MNT_NOATIME = 0x10000000 - MNT_NOCLUSTERR = 0x40000000 - MNT_NOCLUSTERW = 0x80000000 - MNT_NOEXEC = 0x4 - MNT_NONBUSY = 0x4000000 - MNT_NOSUID = 0x8 - MNT_NOSYMFOLLOW = 0x400000 - MNT_NOWAIT = 0x2 - MNT_QUOTA = 0x2000 - MNT_RDONLY = 0x1 - MNT_RELOAD = 0x40000 - MNT_ROOTFS = 0x4000 - MNT_SNAPSHOT = 0x1000000 - MNT_SOFTDEP = 0x200000 - MNT_SUIDDIR = 0x100000 - MNT_SUJ = 0x100000000 - MNT_SUSPEND = 0x4 - MNT_SYNCHRONOUS = 0x2 - MNT_UNION = 0x20 - MNT_UNTRUSTED = 0x800000000 - MNT_UPDATE = 0x10000 - MNT_UPDATEMASK = 0xad8d0807e - MNT_USER = 0x8000 - MNT_VERIFIED = 0x400000000 - MNT_VISFLAGMASK = 0xffef0ffff - MNT_WAIT = 0x1 - MSG_CMSG_CLOEXEC = 0x40000 - MSG_COMPAT = 0x8000 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOF = 0x100 - MSG_EOR = 0x8 - MSG_NBIO = 0x4000 - MSG_NOSIGNAL = 0x20000 - MSG_NOTIFICATION = 0x2000 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 - MSG_WAITFORONE = 0x80000 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x2 - MS_SYNC = 0x0 - NAME_MAX = 0xff - NET_RT_DUMP = 0x1 - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x3 - NET_RT_IFLISTL = 0x5 - NET_RT_IFMALIST = 0x4 - NFDBITS = 0x20 - NOFLSH = 0x80000000 - NOKERNINFO = 0x2000000 - NOTE_ABSTIME = 0x10 - NOTE_ATTRIB = 0x8 - NOTE_CHILD = 0x4 - NOTE_CLOSE = 0x100 - NOTE_CLOSE_WRITE = 0x200 - NOTE_DELETE = 0x1 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXTEND = 0x4 - NOTE_FFAND = 0x40000000 - NOTE_FFCOPY = 0xc0000000 - NOTE_FFCTRLMASK = 0xc0000000 - NOTE_FFLAGSMASK = 0xffffff - NOTE_FFNOP = 0x0 - NOTE_FFOR = 0x80000000 - NOTE_FILE_POLL = 0x2 - NOTE_FORK = 0x40000000 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_MSECONDS = 0x2 - NOTE_NSECONDS = 0x8 - NOTE_OPEN = 0x80 - NOTE_PCTRLMASK = 0xf0000000 - NOTE_PDATAMASK = 0xfffff - NOTE_READ = 0x400 - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_SECONDS = 0x1 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_TRIGGER = 0x1000000 - NOTE_USECONDS = 0x4 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - ONLCR = 0x2 - ONLRET = 0x40 - ONOCR = 0x20 - ONOEOT = 0x8 - OPOST = 0x1 - OXTABS = 0x4 - O_ACCMODE = 0x3 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x100000 - O_CREAT = 0x200 - O_DIRECT = 0x10000 - O_DIRECTORY = 0x20000 - O_EXCL = 0x800 - O_EXEC = 0x40000 - O_EXLOCK = 0x20 - O_FSYNC = 0x80 - O_NDELAY = 0x4 - O_NOCTTY = 0x8000 - O_NOFOLLOW = 0x100 - O_NONBLOCK = 0x4 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_RESOLVE_BENEATH = 0x800000 - O_SEARCH = 0x40000 - O_SHLOCK = 0x10 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_TTY_INIT = 0x80000 - O_VERIFY = 0x200000 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PIOD_READ_D = 0x1 - PIOD_READ_I = 0x3 - PIOD_WRITE_D = 0x2 - PIOD_WRITE_I = 0x4 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - PTRACE_DEFAULT = 0x1 - PTRACE_EXEC = 0x1 - PTRACE_FORK = 0x8 - PTRACE_LWP = 0x10 - PTRACE_SCE = 0x2 - PTRACE_SCX = 0x4 - PTRACE_SYSCALL = 0x6 - PTRACE_VFORK = 0x20 - PT_ATTACH = 0xa - PT_CLEARSTEP = 0x10 - PT_CONTINUE = 0x7 - PT_DETACH = 0xb - PT_FIRSTMACH = 0x40 - PT_FOLLOW_FORK = 0x17 - PT_GETDBREGS = 0x25 - PT_GETFPREGS = 0x23 - PT_GETFSBASE = 0x47 - PT_GETGSBASE = 0x49 - PT_GETLWPLIST = 0xf - PT_GETNUMLWPS = 0xe - PT_GETREGS = 0x21 - PT_GETXMMREGS = 0x40 - PT_GETXSTATE = 0x45 - PT_GETXSTATE_INFO = 0x44 - PT_GET_EVENT_MASK = 0x19 - PT_GET_SC_ARGS = 0x1b - PT_GET_SC_RET = 0x1c - PT_IO = 0xc - PT_KILL = 0x8 - PT_LWPINFO = 0xd - PT_LWP_EVENTS = 0x18 - PT_READ_D = 0x2 - PT_READ_I = 0x1 - PT_RESUME = 0x13 - PT_SETDBREGS = 0x26 - PT_SETFPREGS = 0x24 - PT_SETFSBASE = 0x48 - PT_SETGSBASE = 0x4a - PT_SETREGS = 0x22 - PT_SETSTEP = 0x11 - PT_SETXMMREGS = 0x41 - PT_SETXSTATE = 0x46 - PT_SET_EVENT_MASK = 0x1a - PT_STEP = 0x9 - PT_SUSPEND = 0x12 - PT_SYSCALL = 0x16 - PT_TO_SCE = 0x14 - PT_TO_SCX = 0x15 - PT_TRACE_ME = 0x0 - PT_VM_ENTRY = 0x29 - PT_VM_TIMESTAMP = 0x28 - PT_WRITE_D = 0x5 - PT_WRITE_I = 0x4 - P_ZONEID = 0xc - RLIMIT_AS = 0xa - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_MEMLOCK = 0x6 - RLIMIT_NOFILE = 0x8 - RLIMIT_NPROC = 0x7 - RLIMIT_RSS = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_MAX = 0x8 - RTAX_NETMASK = 0x2 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_NETMASK = 0x4 - RTF_BLACKHOLE = 0x1000 - RTF_BROADCAST = 0x400000 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_FIXEDMTU = 0x80000 - RTF_FMASK = 0x1004d808 - RTF_GATEWAY = 0x2 - RTF_GWFLAG_COMPAT = 0x80000000 - RTF_HOST = 0x4 - RTF_LLDATA = 0x400 - RTF_LLINFO = 0x400 - RTF_LOCAL = 0x200000 - RTF_MODIFIED = 0x20 - RTF_MULTICAST = 0x800000 - RTF_PINNED = 0x100000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_PROTO3 = 0x40000 - RTF_REJECT = 0x8 - RTF_RNH_LOCKED = 0x40000000 - RTF_STATIC = 0x800 - RTF_STICKY = 0x10000000 - RTF_UP = 0x1 - RTF_XRESOLVE = 0x200 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_DELMADDR = 0x10 - RTM_GET = 0x4 - RTM_IEEE80211 = 0x12 - RTM_IFANNOUNCE = 0x11 - RTM_IFINFO = 0xe - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_NEWMADDR = 0xf - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RTV_WEIGHT = 0x100 - RT_ALL_FIBS = -0x1 - RT_BLACKHOLE = 0x40 - RT_DEFAULT_FIB = 0x0 - RT_HAS_GW = 0x80 - RT_HAS_HEADER = 0x10 - RT_HAS_HEADER_BIT = 0x4 - RT_L2_ME = 0x4 - RT_L2_ME_BIT = 0x2 - RT_LLE_CACHE = 0x100 - RT_MAY_LOOP = 0x8 - RT_MAY_LOOP_BIT = 0x3 - RT_REJECT = 0x20 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - RUSAGE_THREAD = 0x1 - SCM_BINTIME = 0x4 - SCM_CREDS = 0x3 - SCM_MONOTONIC = 0x6 - SCM_REALTIME = 0x5 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x2 - SCM_TIME_INFO = 0x7 - SEEK_CUR = 0x1 - SEEK_DATA = 0x3 - SEEK_END = 0x2 - SEEK_HOLE = 0x4 - SEEK_SET = 0x0 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80206931 - SIOCAIFADDR = 0x8040691a - SIOCAIFGROUP = 0x80246987 - SIOCATMARK = 0x40047307 - SIOCDELMULTI = 0x80206932 - SIOCDIFADDR = 0x80206919 - SIOCDIFGROUP = 0x80246989 - SIOCDIFPHYADDR = 0x80206949 - SIOCGDRVSPEC = 0xc01c697b - SIOCGETSGCNT = 0xc0147210 - SIOCGETVIFCNT = 0xc014720f - SIOCGHIWAT = 0x40047301 - SIOCGHWADDR = 0xc020693e - SIOCGI2C = 0xc020693d - SIOCGIFADDR = 0xc0206921 - SIOCGIFALIAS = 0xc044692d - SIOCGIFBRDADDR = 0xc0206923 - SIOCGIFCAP = 0xc020691f - SIOCGIFCONF = 0xc0086924 - SIOCGIFDESCR = 0xc020692a - SIOCGIFDOWNREASON = 0xc058699a - SIOCGIFDSTADDR = 0xc0206922 - SIOCGIFFIB = 0xc020695c - SIOCGIFFLAGS = 0xc0206911 - SIOCGIFGENERIC = 0xc020693a - SIOCGIFGMEMB = 0xc024698a - SIOCGIFGROUP = 0xc0246988 - SIOCGIFINDEX = 0xc0206920 - SIOCGIFMAC = 0xc0206926 - SIOCGIFMEDIA = 0xc0286938 - SIOCGIFMETRIC = 0xc0206917 - SIOCGIFMTU = 0xc0206933 - SIOCGIFNETMASK = 0xc0206925 - SIOCGIFPDSTADDR = 0xc0206948 - SIOCGIFPHYS = 0xc0206935 - SIOCGIFPSRCADDR = 0xc0206947 - SIOCGIFRSSHASH = 0xc0186997 - SIOCGIFRSSKEY = 0xc0946996 - SIOCGIFSTATUS = 0xc331693b - SIOCGIFXMEDIA = 0xc028698b - SIOCGLANPCP = 0xc0206998 - SIOCGLOWAT = 0x40047303 - SIOCGPGRP = 0x40047309 - SIOCGPRIVATE_0 = 0xc0206950 - SIOCGPRIVATE_1 = 0xc0206951 - SIOCGTUNFIB = 0xc020695e - SIOCIFCREATE = 0xc020697a - SIOCIFCREATE2 = 0xc020697c - SIOCIFDESTROY = 0x80206979 - SIOCIFGCLONERS = 0xc00c6978 - SIOCSDRVSPEC = 0x801c697b - SIOCSHIWAT = 0x80047300 - SIOCSIFADDR = 0x8020690c - SIOCSIFBRDADDR = 0x80206913 - SIOCSIFCAP = 0x8020691e - SIOCSIFDESCR = 0x80206929 - SIOCSIFDSTADDR = 0x8020690e - SIOCSIFFIB = 0x8020695d - SIOCSIFFLAGS = 0x80206910 - SIOCSIFGENERIC = 0x80206939 - SIOCSIFLLADDR = 0x8020693c - SIOCSIFMAC = 0x80206927 - SIOCSIFMEDIA = 0xc0206937 - SIOCSIFMETRIC = 0x80206918 - SIOCSIFMTU = 0x80206934 - SIOCSIFNAME = 0x80206928 - SIOCSIFNETMASK = 0x80206916 - SIOCSIFPHYADDR = 0x80406946 - SIOCSIFPHYS = 0x80206936 - SIOCSIFRVNET = 0xc020695b - SIOCSIFVNET = 0xc020695a - SIOCSLANPCP = 0x80206999 - SIOCSLOWAT = 0x80047302 - SIOCSPGRP = 0x80047308 - SIOCSTUNFIB = 0x8020695f - SOCK_CLOEXEC = 0x10000000 - SOCK_DGRAM = 0x2 - SOCK_MAXADDRLEN = 0xff - SOCK_NONBLOCK = 0x20000000 - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_LOCAL = 0x0 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_ACCEPTFILTER = 0x1000 - SO_BINTIME = 0x2000 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 - SO_DOMAIN = 0x1019 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LABEL = 0x1009 - SO_LINGER = 0x80 - SO_LISTENINCQLEN = 0x1013 - SO_LISTENQLEN = 0x1012 - SO_LISTENQLIMIT = 0x1011 - SO_MAX_PACING_RATE = 0x1018 - SO_NOSIGPIPE = 0x800 - SO_NO_DDP = 0x8000 - SO_NO_OFFLOAD = 0x4000 - SO_OOBINLINE = 0x100 - SO_PEERLABEL = 0x1010 - SO_PROTOCOL = 0x1016 - SO_PROTOTYPE = 0x1016 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 - SO_RERROR = 0x20000 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_REUSEPORT_LB = 0x10000 - SO_SETFIB = 0x1014 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_TIMESTAMP = 0x400 - SO_TS_BINTIME = 0x1 - SO_TS_CLOCK = 0x1017 - SO_TS_CLOCK_MAX = 0x3 - SO_TS_DEFAULT = 0x0 - SO_TS_MONOTONIC = 0x3 - SO_TS_REALTIME = 0x2 - SO_TS_REALTIME_MICRO = 0x0 - SO_TYPE = 0x1008 - SO_USELOOPBACK = 0x40 - SO_USER_COOKIE = 0x1015 - SO_VENDOR = 0x80000000 - S_BLKSIZE = 0x200 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFLNK = 0xa000 - S_IFMT = 0xf000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IFWHT = 0xe000 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISTXT = 0x200 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXGRP = 0x8 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - TAB0 = 0x0 - TAB3 = 0x4 - TABDLY = 0x4 - TCIFLUSH = 0x1 - TCIOFF = 0x3 - TCIOFLUSH = 0x3 - TCION = 0x4 - TCOFLUSH = 0x2 - TCOOFF = 0x1 - TCOON = 0x2 - TCPOPT_EOL = 0x0 - TCPOPT_FAST_OPEN = 0x22 - TCPOPT_MAXSEG = 0x2 - TCPOPT_NOP = 0x1 - TCPOPT_PAD = 0x0 - TCPOPT_SACK = 0x5 - TCPOPT_SACK_PERMITTED = 0x4 - TCPOPT_SIGNATURE = 0x13 - TCPOPT_TIMESTAMP = 0x8 - TCPOPT_WINDOW = 0x3 - TCP_BBR_ACK_COMP_ALG = 0x448 - TCP_BBR_ALGORITHM = 0x43b - TCP_BBR_DRAIN_INC_EXTRA = 0x43c - TCP_BBR_DRAIN_PG = 0x42e - TCP_BBR_EXTRA_GAIN = 0x449 - TCP_BBR_EXTRA_STATE = 0x453 - TCP_BBR_FLOOR_MIN_TSO = 0x454 - TCP_BBR_HDWR_PACE = 0x451 - TCP_BBR_HOLD_TARGET = 0x436 - TCP_BBR_IWINTSO = 0x42b - TCP_BBR_LOWGAIN_FD = 0x436 - TCP_BBR_LOWGAIN_HALF = 0x435 - TCP_BBR_LOWGAIN_THRESH = 0x434 - TCP_BBR_MAX_RTO = 0x439 - TCP_BBR_MIN_RTO = 0x438 - TCP_BBR_MIN_TOPACEOUT = 0x455 - TCP_BBR_ONE_RETRAN = 0x431 - TCP_BBR_PACE_CROSS = 0x442 - TCP_BBR_PACE_DEL_TAR = 0x43f - TCP_BBR_PACE_OH = 0x435 - TCP_BBR_PACE_PER_SEC = 0x43e - TCP_BBR_PACE_SEG_MAX = 0x440 - TCP_BBR_PACE_SEG_MIN = 0x441 - TCP_BBR_POLICER_DETECT = 0x457 - TCP_BBR_PROBE_RTT_GAIN = 0x44d - TCP_BBR_PROBE_RTT_INT = 0x430 - TCP_BBR_PROBE_RTT_LEN = 0x44e - TCP_BBR_RACK_RTT_USE = 0x44a - TCP_BBR_RECFORCE = 0x42c - TCP_BBR_REC_OVER_HPTS = 0x43a - TCP_BBR_RETRAN_WTSO = 0x44b - TCP_BBR_RWND_IS_APP = 0x42f - TCP_BBR_SEND_IWND_IN_TSO = 0x44f - TCP_BBR_STARTUP_EXIT_EPOCH = 0x43d - TCP_BBR_STARTUP_LOSS_EXIT = 0x432 - TCP_BBR_STARTUP_PG = 0x42d - TCP_BBR_TMR_PACE_OH = 0x448 - TCP_BBR_TSLIMITS = 0x434 - TCP_BBR_TSTMP_RAISES = 0x456 - TCP_BBR_UNLIMITED = 0x43b - TCP_BBR_USEDEL_RATE = 0x437 - TCP_BBR_USE_LOWGAIN = 0x433 - TCP_BBR_USE_RACK_CHEAT = 0x450 - TCP_BBR_UTTER_MAX_TSO = 0x452 - TCP_CA_NAME_MAX = 0x10 - TCP_CCALGOOPT = 0x41 - TCP_CONGESTION = 0x40 - TCP_DATA_AFTER_CLOSE = 0x44c - TCP_DELACK = 0x48 - TCP_FASTOPEN = 0x401 - TCP_FASTOPEN_MAX_COOKIE_LEN = 0x10 - TCP_FASTOPEN_MIN_COOKIE_LEN = 0x4 - TCP_FASTOPEN_PSK_LEN = 0x10 - TCP_FUNCTION_BLK = 0x2000 - TCP_FUNCTION_NAME_LEN_MAX = 0x20 - TCP_INFO = 0x20 - TCP_KEEPCNT = 0x400 - TCP_KEEPIDLE = 0x100 - TCP_KEEPINIT = 0x80 - TCP_KEEPINTVL = 0x200 - TCP_LOG = 0x22 - TCP_LOGBUF = 0x23 - TCP_LOGDUMP = 0x25 - TCP_LOGDUMPID = 0x26 - TCP_LOGID = 0x24 - TCP_LOG_ID_LEN = 0x40 - TCP_MAXBURST = 0x4 - TCP_MAXHLEN = 0x3c - TCP_MAXOLEN = 0x28 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x4 - TCP_MAX_WINSHIFT = 0xe - TCP_MD5SIG = 0x10 - TCP_MINMSS = 0xd8 - TCP_MSS = 0x218 - TCP_NODELAY = 0x1 - TCP_NOOPT = 0x8 - TCP_NOPUSH = 0x4 - TCP_PCAP_IN = 0x1000 - TCP_PCAP_OUT = 0x800 - TCP_RACK_EARLY_RECOV = 0x423 - TCP_RACK_EARLY_SEG = 0x424 - TCP_RACK_GP_INCREASE = 0x446 - TCP_RACK_IDLE_REDUCE_HIGH = 0x444 - TCP_RACK_MIN_PACE = 0x445 - TCP_RACK_MIN_PACE_SEG = 0x446 - TCP_RACK_MIN_TO = 0x422 - TCP_RACK_PACE_ALWAYS = 0x41f - TCP_RACK_PACE_MAX_SEG = 0x41e - TCP_RACK_PACE_REDUCE = 0x41d - TCP_RACK_PKT_DELAY = 0x428 - TCP_RACK_PROP = 0x41b - TCP_RACK_PROP_RATE = 0x420 - TCP_RACK_PRR_SENDALOT = 0x421 - TCP_RACK_REORD_FADE = 0x426 - TCP_RACK_REORD_THRESH = 0x425 - TCP_RACK_TLP_INC_VAR = 0x429 - TCP_RACK_TLP_REDUCE = 0x41c - TCP_RACK_TLP_THRESH = 0x427 - TCP_RACK_TLP_USE = 0x447 - TCP_VENDOR = 0x80000000 - TCSAFLUSH = 0x2 - TIMER_ABSTIME = 0x1 - TIMER_RELTIME = 0x0 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCONS = 0x80047462 - TIOCDRAIN = 0x2000745e - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLUSH = 0x80047410 - TIOCGDRAINWAIT = 0x40047456 - TIOCGETA = 0x402c7413 - TIOCGETD = 0x4004741a - TIOCGPGRP = 0x40047477 - TIOCGPTN = 0x4004740f - TIOCGSID = 0x40047463 - TIOCGWINSZ = 0x40087468 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGDTRWAIT = 0x4004745a - TIOCMGET = 0x4004746a - TIOCMSDTRWAIT = 0x8004745b - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DCD = 0x40 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCPTMASTER = 0x2000741c - TIOCSBRK = 0x2000747b - TIOCSCTTY = 0x20007461 - TIOCSDRAINWAIT = 0x80047457 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x802c7414 - TIOCSETAF = 0x802c7416 - TIOCSETAW = 0x802c7415 - TIOCSETD = 0x8004741b - TIOCSIG = 0x2004745f - TIOCSPGRP = 0x80047476 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x20007465 - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCTIMESTAMP = 0x40087459 - TIOCUCNTL = 0x80047466 - TOSTOP = 0x400000 - UTIME_NOW = -0x1 - UTIME_OMIT = -0x2 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VERASE2 = 0x7 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 - VM_BCACHE_SIZE_MAX = 0x70e0000 - VM_SWZONE_SIZE_MAX = 0x2280000 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VTIME = 0x11 - VWERASE = 0x4 - WCONTINUED = 0x4 - WCOREFLAG = 0x80 - WEXITED = 0x10 - WLINUXCLONE = 0x80000000 - WNOHANG = 0x1 - WNOWAIT = 0x8 - WSTOPPED = 0x2 - WTRAPPED = 0x20 - WUNTRACED = 0x2 -) - -// Errors -const ( - E2BIG = syscall.Errno(0x7) - EACCES = syscall.Errno(0xd) - EADDRINUSE = syscall.Errno(0x30) - EADDRNOTAVAIL = syscall.Errno(0x31) - EAFNOSUPPORT = syscall.Errno(0x2f) - EAGAIN = syscall.Errno(0x23) - EALREADY = syscall.Errno(0x25) - EAUTH = syscall.Errno(0x50) - EBADF = syscall.Errno(0x9) - EBADMSG = syscall.Errno(0x59) - EBADRPC = syscall.Errno(0x48) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x55) - ECAPMODE = syscall.Errno(0x5e) - ECHILD = syscall.Errno(0xa) - ECONNABORTED = syscall.Errno(0x35) - ECONNREFUSED = syscall.Errno(0x3d) - ECONNRESET = syscall.Errno(0x36) - EDEADLK = syscall.Errno(0xb) - EDESTADDRREQ = syscall.Errno(0x27) - EDOM = syscall.Errno(0x21) - EDOOFUS = syscall.Errno(0x58) - EDQUOT = syscall.Errno(0x45) - EEXIST = syscall.Errno(0x11) - EFAULT = syscall.Errno(0xe) - EFBIG = syscall.Errno(0x1b) - EFTYPE = syscall.Errno(0x4f) - EHOSTDOWN = syscall.Errno(0x40) - EHOSTUNREACH = syscall.Errno(0x41) - EIDRM = syscall.Errno(0x52) - EILSEQ = syscall.Errno(0x56) - EINPROGRESS = syscall.Errno(0x24) - EINTEGRITY = syscall.Errno(0x61) - EINTR = syscall.Errno(0x4) - EINVAL = syscall.Errno(0x16) - EIO = syscall.Errno(0x5) - EISCONN = syscall.Errno(0x38) - EISDIR = syscall.Errno(0x15) - ELAST = syscall.Errno(0x61) - ELOOP = syscall.Errno(0x3e) - EMFILE = syscall.Errno(0x18) - EMLINK = syscall.Errno(0x1f) - EMSGSIZE = syscall.Errno(0x28) - EMULTIHOP = syscall.Errno(0x5a) - ENAMETOOLONG = syscall.Errno(0x3f) - ENEEDAUTH = syscall.Errno(0x51) - ENETDOWN = syscall.Errno(0x32) - ENETRESET = syscall.Errno(0x34) - ENETUNREACH = syscall.Errno(0x33) - ENFILE = syscall.Errno(0x17) - ENOATTR = syscall.Errno(0x57) - ENOBUFS = syscall.Errno(0x37) - ENODEV = syscall.Errno(0x13) - ENOENT = syscall.Errno(0x2) - ENOEXEC = syscall.Errno(0x8) - ENOLCK = syscall.Errno(0x4d) - ENOLINK = syscall.Errno(0x5b) - ENOMEM = syscall.Errno(0xc) - ENOMSG = syscall.Errno(0x53) - ENOPROTOOPT = syscall.Errno(0x2a) - ENOSPC = syscall.Errno(0x1c) - ENOSYS = syscall.Errno(0x4e) - ENOTBLK = syscall.Errno(0xf) - ENOTCAPABLE = syscall.Errno(0x5d) - ENOTCONN = syscall.Errno(0x39) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x42) - ENOTRECOVERABLE = syscall.Errno(0x5f) - ENOTSOCK = syscall.Errno(0x26) - ENOTSUP = syscall.Errno(0x2d) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x2d) - EOVERFLOW = syscall.Errno(0x54) - EOWNERDEAD = syscall.Errno(0x60) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x2e) - EPIPE = syscall.Errno(0x20) - EPROCLIM = syscall.Errno(0x43) - EPROCUNAVAIL = syscall.Errno(0x4c) - EPROGMISMATCH = syscall.Errno(0x4b) - EPROGUNAVAIL = syscall.Errno(0x4a) - EPROTO = syscall.Errno(0x5c) - EPROTONOSUPPORT = syscall.Errno(0x2b) - EPROTOTYPE = syscall.Errno(0x29) - ERANGE = syscall.Errno(0x22) - EREMOTE = syscall.Errno(0x47) - EROFS = syscall.Errno(0x1e) - ERPCMISMATCH = syscall.Errno(0x49) - ESHUTDOWN = syscall.Errno(0x3a) - ESOCKTNOSUPPORT = syscall.Errno(0x2c) - ESPIPE = syscall.Errno(0x1d) - ESRCH = syscall.Errno(0x3) - ESTALE = syscall.Errno(0x46) - ETIMEDOUT = syscall.Errno(0x3c) - ETOOMANYREFS = syscall.Errno(0x3b) - ETXTBSY = syscall.Errno(0x1a) - EUSERS = syscall.Errno(0x44) - EWOULDBLOCK = syscall.Errno(0x23) - EXDEV = syscall.Errno(0x12) -) - -// Signals -const ( - SIGABRT = syscall.Signal(0x6) - SIGALRM = syscall.Signal(0xe) - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x14) - SIGCONT = syscall.Signal(0x13) - SIGEMT = syscall.Signal(0x7) - SIGFPE = syscall.Signal(0x8) - SIGHUP = syscall.Signal(0x1) - SIGILL = syscall.Signal(0x4) - SIGINFO = syscall.Signal(0x1d) - SIGINT = syscall.Signal(0x2) - SIGIO = syscall.Signal(0x17) - SIGIOT = syscall.Signal(0x6) - SIGKILL = syscall.Signal(0x9) - SIGLIBRT = syscall.Signal(0x21) - SIGLWP = syscall.Signal(0x20) - SIGPIPE = syscall.Signal(0xd) - SIGPROF = syscall.Signal(0x1b) - SIGQUIT = syscall.Signal(0x3) - SIGSEGV = syscall.Signal(0xb) - SIGSTOP = syscall.Signal(0x11) - SIGSYS = syscall.Signal(0xc) - SIGTERM = syscall.Signal(0xf) - SIGTHR = syscall.Signal(0x20) - SIGTRAP = syscall.Signal(0x5) - SIGTSTP = syscall.Signal(0x12) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x10) - SIGUSR1 = syscall.Signal(0x1e) - SIGUSR2 = syscall.Signal(0x1f) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "device not configured"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EDEADLK", "resource deadlock avoided"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "cross-device link"}, - {19, "ENODEV", "operation not supported by device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "result too large"}, - {35, "EWOULDBLOCK", "resource temporarily unavailable"}, - {36, "EINPROGRESS", "operation now in progress"}, - {37, "EALREADY", "operation already in progress"}, - {38, "ENOTSOCK", "socket operation on non-socket"}, - {39, "EDESTADDRREQ", "destination address required"}, - {40, "EMSGSIZE", "message too long"}, - {41, "EPROTOTYPE", "protocol wrong type for socket"}, - {42, "ENOPROTOOPT", "protocol not available"}, - {43, "EPROTONOSUPPORT", "protocol not supported"}, - {44, "ESOCKTNOSUPPORT", "socket type not supported"}, - {45, "EOPNOTSUPP", "operation not supported"}, - {46, "EPFNOSUPPORT", "protocol family not supported"}, - {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, - {48, "EADDRINUSE", "address already in use"}, - {49, "EADDRNOTAVAIL", "can't assign requested address"}, - {50, "ENETDOWN", "network is down"}, - {51, "ENETUNREACH", "network is unreachable"}, - {52, "ENETRESET", "network dropped connection on reset"}, - {53, "ECONNABORTED", "software caused connection abort"}, - {54, "ECONNRESET", "connection reset by peer"}, - {55, "ENOBUFS", "no buffer space available"}, - {56, "EISCONN", "socket is already connected"}, - {57, "ENOTCONN", "socket is not connected"}, - {58, "ESHUTDOWN", "can't send after socket shutdown"}, - {59, "ETOOMANYREFS", "too many references: can't splice"}, - {60, "ETIMEDOUT", "operation timed out"}, - {61, "ECONNREFUSED", "connection refused"}, - {62, "ELOOP", "too many levels of symbolic links"}, - {63, "ENAMETOOLONG", "file name too long"}, - {64, "EHOSTDOWN", "host is down"}, - {65, "EHOSTUNREACH", "no route to host"}, - {66, "ENOTEMPTY", "directory not empty"}, - {67, "EPROCLIM", "too many processes"}, - {68, "EUSERS", "too many users"}, - {69, "EDQUOT", "disc quota exceeded"}, - {70, "ESTALE", "stale NFS file handle"}, - {71, "EREMOTE", "too many levels of remote in path"}, - {72, "EBADRPC", "RPC struct is bad"}, - {73, "ERPCMISMATCH", "RPC version wrong"}, - {74, "EPROGUNAVAIL", "RPC prog. not avail"}, - {75, "EPROGMISMATCH", "program version wrong"}, - {76, "EPROCUNAVAIL", "bad procedure for program"}, - {77, "ENOLCK", "no locks available"}, - {78, "ENOSYS", "function not implemented"}, - {79, "EFTYPE", "inappropriate file type or format"}, - {80, "EAUTH", "authentication error"}, - {81, "ENEEDAUTH", "need authenticator"}, - {82, "EIDRM", "identifier removed"}, - {83, "ENOMSG", "no message of desired type"}, - {84, "EOVERFLOW", "value too large to be stored in data type"}, - {85, "ECANCELED", "operation canceled"}, - {86, "EILSEQ", "illegal byte sequence"}, - {87, "ENOATTR", "attribute not found"}, - {88, "EDOOFUS", "programming error"}, - {89, "EBADMSG", "bad message"}, - {90, "EMULTIHOP", "multihop attempted"}, - {91, "ENOLINK", "link has been severed"}, - {92, "EPROTO", "protocol error"}, - {93, "ENOTCAPABLE", "capabilities insufficient"}, - {94, "ECAPMODE", "not permitted in capability mode"}, - {95, "ENOTRECOVERABLE", "state not recoverable"}, - {96, "EOWNERDEAD", "previous owner died"}, - {97, "EINTEGRITY", "integrity check failed"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, - {6, "SIGIOT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGURG", "urgent I/O condition"}, - {17, "SIGSTOP", "suspended (signal)"}, - {18, "SIGTSTP", "suspended"}, - {19, "SIGCONT", "continued"}, - {20, "SIGCHLD", "child exited"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGIO", "I/O possible"}, - {24, "SIGXCPU", "cputime limit exceeded"}, - {25, "SIGXFSZ", "filesize limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window size changes"}, - {29, "SIGINFO", "information request"}, - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, - {32, "SIGTHR", "unknown signal"}, - {33, "SIGLIBRT", "unknown signal"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go deleted file mode 100644 index 96310c3..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go +++ /dev/null @@ -1,2040 +0,0 @@ -// mkerrors.sh -m64 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build amd64 && freebsd -// +build amd64,freebsd - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -m64 _const.go - -package unix - -import "syscall" - -const ( - AF_APPLETALK = 0x10 - AF_ARP = 0x23 - AF_ATM = 0x1e - AF_BLUETOOTH = 0x24 - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1a - AF_ECMA = 0x8 - AF_HYLINK = 0xf - AF_IEEE80211 = 0x25 - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x1c - AF_INET6_SDP = 0x2a - AF_INET_SDP = 0x28 - AF_IPX = 0x17 - AF_ISDN = 0x1a - AF_ISO = 0x7 - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x2a - AF_NATM = 0x1d - AF_NETBIOS = 0x6 - AF_NETGRAPH = 0x20 - AF_OSI = 0x7 - AF_PUP = 0x4 - AF_ROUTE = 0x11 - AF_SCLUSTER = 0x22 - AF_SIP = 0x18 - AF_SLOW = 0x21 - AF_SNA = 0xb - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - AF_VENDOR00 = 0x27 - AF_VENDOR01 = 0x29 - AF_VENDOR02 = 0x2b - AF_VENDOR03 = 0x2d - AF_VENDOR04 = 0x2f - AF_VENDOR05 = 0x31 - AF_VENDOR06 = 0x33 - AF_VENDOR07 = 0x35 - AF_VENDOR08 = 0x37 - AF_VENDOR09 = 0x39 - AF_VENDOR10 = 0x3b - AF_VENDOR11 = 0x3d - AF_VENDOR12 = 0x3f - AF_VENDOR13 = 0x41 - AF_VENDOR14 = 0x43 - AF_VENDOR15 = 0x45 - AF_VENDOR16 = 0x47 - AF_VENDOR17 = 0x49 - AF_VENDOR18 = 0x4b - AF_VENDOR19 = 0x4d - AF_VENDOR20 = 0x4f - AF_VENDOR21 = 0x51 - AF_VENDOR22 = 0x53 - AF_VENDOR23 = 0x55 - AF_VENDOR24 = 0x57 - AF_VENDOR25 = 0x59 - AF_VENDOR26 = 0x5b - AF_VENDOR27 = 0x5d - AF_VENDOR28 = 0x5f - AF_VENDOR29 = 0x61 - AF_VENDOR30 = 0x63 - AF_VENDOR31 = 0x65 - AF_VENDOR32 = 0x67 - AF_VENDOR33 = 0x69 - AF_VENDOR34 = 0x6b - AF_VENDOR35 = 0x6d - AF_VENDOR36 = 0x6f - AF_VENDOR37 = 0x71 - AF_VENDOR38 = 0x73 - AF_VENDOR39 = 0x75 - AF_VENDOR40 = 0x77 - AF_VENDOR41 = 0x79 - AF_VENDOR42 = 0x7b - AF_VENDOR43 = 0x7d - AF_VENDOR44 = 0x7f - AF_VENDOR45 = 0x81 - AF_VENDOR46 = 0x83 - AF_VENDOR47 = 0x85 - ALTWERASE = 0x200 - B0 = 0x0 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B230400 = 0x38400 - B2400 = 0x960 - B28800 = 0x7080 - B300 = 0x12c - B38400 = 0x9600 - B460800 = 0x70800 - B4800 = 0x12c0 - B50 = 0x32 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B921600 = 0xe1000 - B9600 = 0x2580 - BIOCFEEDBACK = 0x8004427c - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDIRECTION = 0x40044276 - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc0104279 - BIOCGETBUFMODE = 0x4004427d - BIOCGETIF = 0x4020426b - BIOCGETZMAX = 0x4008427f - BIOCGHDRCMPLT = 0x40044274 - BIOCGRSIG = 0x40044272 - BIOCGRTIMEOUT = 0x4010426e - BIOCGSEESENT = 0x40044276 - BIOCGSTATS = 0x4008426f - BIOCGTSTAMP = 0x40044283 - BIOCIMMEDIATE = 0x80044270 - BIOCLOCK = 0x2000427a - BIOCPROMISC = 0x20004269 - BIOCROTZBUF = 0x40184280 - BIOCSBLEN = 0xc0044266 - BIOCSDIRECTION = 0x80044277 - BIOCSDLT = 0x80044278 - BIOCSETBUFMODE = 0x8004427e - BIOCSETF = 0x80104267 - BIOCSETFNR = 0x80104282 - BIOCSETIF = 0x8020426c - BIOCSETVLANPCP = 0x80044285 - BIOCSETWF = 0x8010427b - BIOCSETZBUF = 0x80184281 - BIOCSHDRCMPLT = 0x80044275 - BIOCSRSIG = 0x80044273 - BIOCSRTIMEOUT = 0x8010426d - BIOCSSEESENT = 0x80044277 - BIOCSTSTAMP = 0x80044284 - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x8 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_BUFMODE_BUFFER = 0x1 - BPF_BUFMODE_ZBUF = 0x2 - BPF_DIV = 0x30 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x80000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MOD = 0x90 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_T_BINTIME = 0x2 - BPF_T_BINTIME_FAST = 0x102 - BPF_T_BINTIME_MONOTONIC = 0x202 - BPF_T_BINTIME_MONOTONIC_FAST = 0x302 - BPF_T_FAST = 0x100 - BPF_T_FLAG_MASK = 0x300 - BPF_T_FORMAT_MASK = 0x3 - BPF_T_MICROTIME = 0x0 - BPF_T_MICROTIME_FAST = 0x100 - BPF_T_MICROTIME_MONOTONIC = 0x200 - BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 - BPF_T_MONOTONIC = 0x200 - BPF_T_MONOTONIC_FAST = 0x300 - BPF_T_NANOTIME = 0x1 - BPF_T_NANOTIME_FAST = 0x101 - BPF_T_NANOTIME_MONOTONIC = 0x201 - BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 - BPF_T_NONE = 0x3 - BPF_T_NORMAL = 0x0 - BPF_W = 0x0 - BPF_X = 0x8 - BPF_XOR = 0xa0 - BRKINT = 0x2 - CAP_ACCEPT = 0x200000020000000 - CAP_ACL_CHECK = 0x400000000010000 - CAP_ACL_DELETE = 0x400000000020000 - CAP_ACL_GET = 0x400000000040000 - CAP_ACL_SET = 0x400000000080000 - CAP_ALL0 = 0x20007ffffffffff - CAP_ALL1 = 0x4000000001fffff - CAP_BIND = 0x200000040000000 - CAP_BINDAT = 0x200008000000400 - CAP_CHFLAGSAT = 0x200000000001400 - CAP_CONNECT = 0x200000080000000 - CAP_CONNECTAT = 0x200010000000400 - CAP_CREATE = 0x200000000000040 - CAP_EVENT = 0x400000000000020 - CAP_EXTATTR_DELETE = 0x400000000001000 - CAP_EXTATTR_GET = 0x400000000002000 - CAP_EXTATTR_LIST = 0x400000000004000 - CAP_EXTATTR_SET = 0x400000000008000 - CAP_FCHDIR = 0x200000000000800 - CAP_FCHFLAGS = 0x200000000001000 - CAP_FCHMOD = 0x200000000002000 - CAP_FCHMODAT = 0x200000000002400 - CAP_FCHOWN = 0x200000000004000 - CAP_FCHOWNAT = 0x200000000004400 - CAP_FCNTL = 0x200000000008000 - CAP_FCNTL_ALL = 0x78 - CAP_FCNTL_GETFL = 0x8 - CAP_FCNTL_GETOWN = 0x20 - CAP_FCNTL_SETFL = 0x10 - CAP_FCNTL_SETOWN = 0x40 - CAP_FEXECVE = 0x200000000000080 - CAP_FLOCK = 0x200000000010000 - CAP_FPATHCONF = 0x200000000020000 - CAP_FSCK = 0x200000000040000 - CAP_FSTAT = 0x200000000080000 - CAP_FSTATAT = 0x200000000080400 - CAP_FSTATFS = 0x200000000100000 - CAP_FSYNC = 0x200000000000100 - CAP_FTRUNCATE = 0x200000000000200 - CAP_FUTIMES = 0x200000000200000 - CAP_FUTIMESAT = 0x200000000200400 - CAP_GETPEERNAME = 0x200000100000000 - CAP_GETSOCKNAME = 0x200000200000000 - CAP_GETSOCKOPT = 0x200000400000000 - CAP_IOCTL = 0x400000000000080 - CAP_IOCTLS_ALL = 0x7fffffffffffffff - CAP_KQUEUE = 0x400000000100040 - CAP_KQUEUE_CHANGE = 0x400000000100000 - CAP_KQUEUE_EVENT = 0x400000000000040 - CAP_LINKAT_SOURCE = 0x200020000000400 - CAP_LINKAT_TARGET = 0x200000000400400 - CAP_LISTEN = 0x200000800000000 - CAP_LOOKUP = 0x200000000000400 - CAP_MAC_GET = 0x400000000000001 - CAP_MAC_SET = 0x400000000000002 - CAP_MKDIRAT = 0x200000000800400 - CAP_MKFIFOAT = 0x200000001000400 - CAP_MKNODAT = 0x200000002000400 - CAP_MMAP = 0x200000000000010 - CAP_MMAP_R = 0x20000000000001d - CAP_MMAP_RW = 0x20000000000001f - CAP_MMAP_RWX = 0x20000000000003f - CAP_MMAP_RX = 0x20000000000003d - CAP_MMAP_W = 0x20000000000001e - CAP_MMAP_WX = 0x20000000000003e - CAP_MMAP_X = 0x20000000000003c - CAP_PDGETPID = 0x400000000000200 - CAP_PDKILL = 0x400000000000800 - CAP_PDWAIT = 0x400000000000400 - CAP_PEELOFF = 0x200001000000000 - CAP_POLL_EVENT = 0x400000000000020 - CAP_PREAD = 0x20000000000000d - CAP_PWRITE = 0x20000000000000e - CAP_READ = 0x200000000000001 - CAP_RECV = 0x200000000000001 - CAP_RENAMEAT_SOURCE = 0x200000004000400 - CAP_RENAMEAT_TARGET = 0x200040000000400 - CAP_RIGHTS_VERSION = 0x0 - CAP_RIGHTS_VERSION_00 = 0x0 - CAP_SEEK = 0x20000000000000c - CAP_SEEK_TELL = 0x200000000000004 - CAP_SEM_GETVALUE = 0x400000000000004 - CAP_SEM_POST = 0x400000000000008 - CAP_SEM_WAIT = 0x400000000000010 - CAP_SEND = 0x200000000000002 - CAP_SETSOCKOPT = 0x200002000000000 - CAP_SHUTDOWN = 0x200004000000000 - CAP_SOCK_CLIENT = 0x200007780000003 - CAP_SOCK_SERVER = 0x200007f60000003 - CAP_SYMLINKAT = 0x200000008000400 - CAP_TTYHOOK = 0x400000000000100 - CAP_UNLINKAT = 0x200000010000400 - CAP_UNUSED0_44 = 0x200080000000000 - CAP_UNUSED0_57 = 0x300000000000000 - CAP_UNUSED1_22 = 0x400000000200000 - CAP_UNUSED1_57 = 0x500000000000000 - CAP_WRITE = 0x200000000000002 - CFLUSH = 0xf - CLOCAL = 0x8000 - CLOCK_MONOTONIC = 0x4 - CLOCK_MONOTONIC_FAST = 0xc - CLOCK_MONOTONIC_PRECISE = 0xb - CLOCK_PROCESS_CPUTIME_ID = 0xf - CLOCK_PROF = 0x2 - CLOCK_REALTIME = 0x0 - CLOCK_REALTIME_FAST = 0xa - CLOCK_REALTIME_PRECISE = 0x9 - CLOCK_SECOND = 0xd - CLOCK_THREAD_CPUTIME_ID = 0xe - CLOCK_UPTIME = 0x5 - CLOCK_UPTIME_FAST = 0x8 - CLOCK_UPTIME_PRECISE = 0x7 - CLOCK_VIRTUAL = 0x1 - CPUSTATES = 0x5 - CP_IDLE = 0x4 - CP_INTR = 0x3 - CP_NICE = 0x1 - CP_SYS = 0x2 - CP_USER = 0x0 - CREAD = 0x800 - CRTSCTS = 0x30000 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0x14 - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTL_HW = 0x6 - CTL_KERN = 0x1 - CTL_MAXNAME = 0x18 - CTL_NET = 0x4 - DIOCGATTR = 0xc148648e - DIOCGDELETE = 0x80106488 - DIOCGFLUSH = 0x20006487 - DIOCGFRONTSTUFF = 0x40086486 - DIOCGFWHEADS = 0x40046483 - DIOCGFWSECTORS = 0x40046482 - DIOCGIDENT = 0x41006489 - DIOCGMEDIASIZE = 0x40086481 - DIOCGPHYSPATH = 0x4400648d - DIOCGPROVIDERNAME = 0x4400648a - DIOCGSECTORSIZE = 0x40046480 - DIOCGSTRIPEOFFSET = 0x4008648c - DIOCGSTRIPESIZE = 0x4008648b - DIOCSKERNELDUMP = 0x80506490 - DIOCSKERNELDUMP_FREEBSD11 = 0x80046485 - DIOCZONECMD = 0xc080648f - DLT_A429 = 0xb8 - DLT_A653_ICM = 0xb9 - DLT_AIRONET_HEADER = 0x78 - DLT_AOS = 0xde - DLT_APPLE_IP_OVER_IEEE1394 = 0x8a - DLT_ARCNET = 0x7 - DLT_ARCNET_LINUX = 0x81 - DLT_ATM_CLIP = 0x13 - DLT_ATM_RFC1483 = 0xb - DLT_AURORA = 0x7e - DLT_AX25 = 0x3 - DLT_AX25_KISS = 0xca - DLT_BACNET_MS_TP = 0xa5 - DLT_BLUETOOTH_BREDR_BB = 0xff - DLT_BLUETOOTH_HCI_H4 = 0xbb - DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 - DLT_BLUETOOTH_LE_LL = 0xfb - DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 - DLT_BLUETOOTH_LINUX_MONITOR = 0xfe - DLT_CAN20B = 0xbe - DLT_CAN_SOCKETCAN = 0xe3 - DLT_CHAOS = 0x5 - DLT_CHDLC = 0x68 - DLT_CISCO_IOS = 0x76 - DLT_CLASS_NETBSD_RAWAF = 0x2240000 - DLT_C_HDLC = 0x68 - DLT_C_HDLC_WITH_DIR = 0xcd - DLT_DBUS = 0xe7 - DLT_DECT = 0xdd - DLT_DISPLAYPORT_AUX = 0x113 - DLT_DOCSIS = 0x8f - DLT_DOCSIS31_XRA31 = 0x111 - DLT_DVB_CI = 0xeb - DLT_ECONET = 0x73 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0x6d - DLT_EPON = 0x103 - DLT_ERF = 0xc5 - DLT_ERF_ETH = 0xaf - DLT_ERF_POS = 0xb0 - DLT_ETHERNET_MPACKET = 0x112 - DLT_FC_2 = 0xe0 - DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 - DLT_FDDI = 0xa - DLT_FLEXRAY = 0xd2 - DLT_FRELAY = 0x6b - DLT_FRELAY_WITH_DIR = 0xce - DLT_GCOM_SERIAL = 0xad - DLT_GCOM_T1E1 = 0xac - DLT_GPF_F = 0xab - DLT_GPF_T = 0xaa - DLT_GPRS_LLC = 0xa9 - DLT_GSMTAP_ABIS = 0xda - DLT_GSMTAP_UM = 0xd9 - DLT_IBM_SN = 0x92 - DLT_IBM_SP = 0x91 - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_IEEE802_11_RADIO_AVS = 0xa3 - DLT_IEEE802_15_4 = 0xc3 - DLT_IEEE802_15_4_LINUX = 0xbf - DLT_IEEE802_15_4_NOFCS = 0xe6 - DLT_IEEE802_15_4_NONASK_PHY = 0xd7 - DLT_IEEE802_16_MAC_CPS = 0xbc - DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 - DLT_INFINIBAND = 0xf7 - DLT_IPFILTER = 0x74 - DLT_IPMB_KONTRON = 0xc7 - DLT_IPMB_LINUX = 0xd1 - DLT_IPMI_HPM_2 = 0x104 - DLT_IPNET = 0xe2 - DLT_IPOIB = 0xf2 - DLT_IPV4 = 0xe4 - DLT_IPV6 = 0xe5 - DLT_IP_OVER_FC = 0x7a - DLT_ISO_14443 = 0x108 - DLT_JUNIPER_ATM1 = 0x89 - DLT_JUNIPER_ATM2 = 0x87 - DLT_JUNIPER_ATM_CEMIC = 0xee - DLT_JUNIPER_CHDLC = 0xb5 - DLT_JUNIPER_ES = 0x84 - DLT_JUNIPER_ETHER = 0xb2 - DLT_JUNIPER_FIBRECHANNEL = 0xea - DLT_JUNIPER_FRELAY = 0xb4 - DLT_JUNIPER_GGSN = 0x85 - DLT_JUNIPER_ISM = 0xc2 - DLT_JUNIPER_MFR = 0x86 - DLT_JUNIPER_MLFR = 0x83 - DLT_JUNIPER_MLPPP = 0x82 - DLT_JUNIPER_MONITOR = 0xa4 - DLT_JUNIPER_PIC_PEER = 0xae - DLT_JUNIPER_PPP = 0xb3 - DLT_JUNIPER_PPPOE = 0xa7 - DLT_JUNIPER_PPPOE_ATM = 0xa8 - DLT_JUNIPER_SERVICES = 0x88 - DLT_JUNIPER_SRX_E2E = 0xe9 - DLT_JUNIPER_ST = 0xc8 - DLT_JUNIPER_VP = 0xb7 - DLT_JUNIPER_VS = 0xe8 - DLT_LAPB_WITH_DIR = 0xcf - DLT_LAPD = 0xcb - DLT_LIN = 0xd4 - DLT_LINUX_EVDEV = 0xd8 - DLT_LINUX_IRDA = 0x90 - DLT_LINUX_LAPD = 0xb1 - DLT_LINUX_PPP_WITHDIRECTION = 0xa6 - DLT_LINUX_SLL = 0x71 - DLT_LINUX_SLL2 = 0x114 - DLT_LOOP = 0x6c - DLT_LORATAP = 0x10e - DLT_LTALK = 0x72 - DLT_MATCHING_MAX = 0x114 - DLT_MATCHING_MIN = 0x68 - DLT_MFR = 0xb6 - DLT_MOST = 0xd3 - DLT_MPEG_2_TS = 0xf3 - DLT_MPLS = 0xdb - DLT_MTP2 = 0x8c - DLT_MTP2_WITH_PHDR = 0x8b - DLT_MTP3 = 0x8d - DLT_MUX27010 = 0xec - DLT_NETANALYZER = 0xf0 - DLT_NETANALYZER_TRANSPARENT = 0xf1 - DLT_NETLINK = 0xfd - DLT_NFC_LLCP = 0xf5 - DLT_NFLOG = 0xef - DLT_NG40 = 0xf4 - DLT_NORDIC_BLE = 0x110 - DLT_NULL = 0x0 - DLT_OPENFLOW = 0x10b - DLT_PCI_EXP = 0x7d - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x79 - DLT_PKTAP = 0x102 - DLT_PPI = 0xc0 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0xe - DLT_PPP_ETHER = 0x33 - DLT_PPP_PPPD = 0xa6 - DLT_PPP_SERIAL = 0x32 - DLT_PPP_WITH_DIR = 0xcc - DLT_PPP_WITH_DIRECTION = 0xa6 - DLT_PRISM_HEADER = 0x77 - DLT_PROFIBUS_DL = 0x101 - DLT_PRONET = 0x4 - DLT_RAIF1 = 0xc6 - DLT_RAW = 0xc - DLT_RDS = 0x109 - DLT_REDBACK_SMARTEDGE = 0x20 - DLT_RIO = 0x7c - DLT_RTAC_SERIAL = 0xfa - DLT_SCCP = 0x8e - DLT_SCTP = 0xf8 - DLT_SDLC = 0x10c - DLT_SITA = 0xc4 - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xd - DLT_STANAG_5066_D_PDU = 0xed - DLT_SUNATM = 0x7b - DLT_SYMANTEC_FIREWALL = 0x63 - DLT_TI_LLN_SNIFFER = 0x10d - DLT_TZSP = 0x80 - DLT_USB = 0xba - DLT_USBPCAP = 0xf9 - DLT_USB_DARWIN = 0x10a - DLT_USB_FREEBSD = 0xba - DLT_USB_LINUX = 0xbd - DLT_USB_LINUX_MMAPPED = 0xdc - DLT_USER0 = 0x93 - DLT_USER1 = 0x94 - DLT_USER10 = 0x9d - DLT_USER11 = 0x9e - DLT_USER12 = 0x9f - DLT_USER13 = 0xa0 - DLT_USER14 = 0xa1 - DLT_USER15 = 0xa2 - DLT_USER2 = 0x95 - DLT_USER3 = 0x96 - DLT_USER4 = 0x97 - DLT_USER5 = 0x98 - DLT_USER6 = 0x99 - DLT_USER7 = 0x9a - DLT_USER8 = 0x9b - DLT_USER9 = 0x9c - DLT_VSOCK = 0x10f - DLT_WATTSTOPPER_DLM = 0x107 - DLT_WIHART = 0xdf - DLT_WIRESHARK_UPPER_PDU = 0xfc - DLT_X2E_SERIAL = 0xd5 - DLT_X2E_XORAYA = 0xd6 - DLT_ZWAVE_R1_R2 = 0x105 - DLT_ZWAVE_R3 = 0x106 - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - DT_WHT = 0xe - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EVFILT_AIO = -0x3 - EVFILT_EMPTY = -0xd - EVFILT_FS = -0x9 - EVFILT_LIO = -0xa - EVFILT_PROC = -0x5 - EVFILT_PROCDESC = -0x8 - EVFILT_READ = -0x1 - EVFILT_SENDFILE = -0xc - EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0xd - EVFILT_TIMER = -0x7 - EVFILT_USER = -0xb - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 - EVNAMEMAP_NAME_SIZE = 0x40 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_DISPATCH = 0x80 - EV_DROP = 0x1000 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG1 = 0x2000 - EV_FLAG2 = 0x4000 - EV_FORCEONESHOT = 0x100 - EV_ONESHOT = 0x10 - EV_RECEIPT = 0x40 - EV_SYSFLAGS = 0xf000 - EXTA = 0x4b00 - EXTATTR_MAXNAMELEN = 0xff - EXTATTR_NAMESPACE_EMPTY = 0x0 - EXTATTR_NAMESPACE_SYSTEM = 0x2 - EXTATTR_NAMESPACE_USER = 0x1 - EXTB = 0x9600 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x400 - FLUSHO = 0x800000 - F_CANCEL = 0x5 - F_DUP2FD = 0xa - F_DUP2FD_CLOEXEC = 0x12 - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0x11 - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0xb - F_GETOWN = 0x5 - F_OGETLK = 0x7 - F_OK = 0x0 - F_OSETLK = 0x8 - F_OSETLKW = 0x9 - F_RDAHEAD = 0x10 - F_RDLCK = 0x1 - F_READAHEAD = 0xf - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0xc - F_SETLKW = 0xd - F_SETLK_REMOTE = 0xe - F_SETOWN = 0x6 - F_UNLCK = 0x2 - F_UNLCKSYS = 0x4 - F_WRLCK = 0x3 - HUPCL = 0x4000 - HW_MACHINE = 0x1 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFAN_ARRIVAL = 0x0 - IFAN_DEPARTURE = 0x1 - IFCAP_WOL_MAGIC = 0x2000 - IFF_ALLMULTI = 0x200 - IFF_ALTPHYS = 0x4000 - IFF_BROADCAST = 0x2 - IFF_CANTCHANGE = 0x218f52 - IFF_CANTCONFIG = 0x10000 - IFF_DEBUG = 0x4 - IFF_DRV_OACTIVE = 0x400 - IFF_DRV_RUNNING = 0x40 - IFF_DYING = 0x200000 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MONITOR = 0x40000 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_NOGROUP = 0x800000 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PPROMISC = 0x20000 - IFF_PROMISC = 0x100 - IFF_RENAMING = 0x400000 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_STATICARP = 0x80000 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_BRIDGE = 0xd1 - IFT_CARP = 0xf8 - IFT_IEEE1394 = 0x90 - IFT_INFINIBAND = 0xc7 - IFT_L2VLAN = 0x87 - IFT_L3IPVLAN = 0x88 - IFT_PPP = 0x17 - IFT_PROPVIRTUAL = 0x35 - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LOOPBACKNET = 0x7f - IN_RFC3021_MASK = 0xfffffffe - IPPROTO_3PC = 0x22 - IPPROTO_ADFS = 0x44 - IPPROTO_AH = 0x33 - IPPROTO_AHIP = 0x3d - IPPROTO_APES = 0x63 - IPPROTO_ARGUS = 0xd - IPPROTO_AX25 = 0x5d - IPPROTO_BHA = 0x31 - IPPROTO_BLT = 0x1e - IPPROTO_BRSATMON = 0x4c - IPPROTO_CARP = 0x70 - IPPROTO_CFTP = 0x3e - IPPROTO_CHAOS = 0x10 - IPPROTO_CMTP = 0x26 - IPPROTO_CPHB = 0x49 - IPPROTO_CPNX = 0x48 - IPPROTO_DCCP = 0x21 - IPPROTO_DDP = 0x25 - IPPROTO_DGP = 0x56 - IPPROTO_DIVERT = 0x102 - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_EMCON = 0xe - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GMTP = 0x64 - IPPROTO_GRE = 0x2f - IPPROTO_HELLO = 0x3f - IPPROTO_HIP = 0x8b - IPPROTO_HMP = 0x14 - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IDPR = 0x23 - IPPROTO_IDRP = 0x2d - IPPROTO_IGMP = 0x2 - IPPROTO_IGP = 0x55 - IPPROTO_IGRP = 0x58 - IPPROTO_IL = 0x28 - IPPROTO_INLSP = 0x34 - IPPROTO_INP = 0x20 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPCV = 0x47 - IPPROTO_IPEIP = 0x5e - IPPROTO_IPIP = 0x4 - IPPROTO_IPPC = 0x43 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_IRTP = 0x1c - IPPROTO_KRYPTOLAN = 0x41 - IPPROTO_LARP = 0x5b - IPPROTO_LEAF1 = 0x19 - IPPROTO_LEAF2 = 0x1a - IPPROTO_MAX = 0x100 - IPPROTO_MEAS = 0x13 - IPPROTO_MH = 0x87 - IPPROTO_MHRP = 0x30 - IPPROTO_MICP = 0x5f - IPPROTO_MOBILE = 0x37 - IPPROTO_MPLS = 0x89 - IPPROTO_MTP = 0x5c - IPPROTO_MUX = 0x12 - IPPROTO_ND = 0x4d - IPPROTO_NHRP = 0x36 - IPPROTO_NONE = 0x3b - IPPROTO_NSP = 0x1f - IPPROTO_NVPII = 0xb - IPPROTO_OLD_DIVERT = 0xfe - IPPROTO_OSPFIGP = 0x59 - IPPROTO_PFSYNC = 0xf0 - IPPROTO_PGM = 0x71 - IPPROTO_PIGP = 0x9 - IPPROTO_PIM = 0x67 - IPPROTO_PRM = 0x15 - IPPROTO_PUP = 0xc - IPPROTO_PVP = 0x4b - IPPROTO_RAW = 0xff - IPPROTO_RCCMON = 0xa - IPPROTO_RDP = 0x1b - IPPROTO_RESERVED_253 = 0xfd - IPPROTO_RESERVED_254 = 0xfe - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_RVD = 0x42 - IPPROTO_SATEXPAK = 0x40 - IPPROTO_SATMON = 0x45 - IPPROTO_SCCSP = 0x60 - IPPROTO_SCTP = 0x84 - IPPROTO_SDRP = 0x2a - IPPROTO_SEND = 0x103 - IPPROTO_SHIM6 = 0x8c - IPPROTO_SKIP = 0x39 - IPPROTO_SPACER = 0x7fff - IPPROTO_SRPC = 0x5a - IPPROTO_ST = 0x7 - IPPROTO_SVMTP = 0x52 - IPPROTO_SWIPE = 0x35 - IPPROTO_TCF = 0x57 - IPPROTO_TCP = 0x6 - IPPROTO_TLSP = 0x38 - IPPROTO_TP = 0x1d - IPPROTO_TPXX = 0x27 - IPPROTO_TRUNK1 = 0x17 - IPPROTO_TRUNK2 = 0x18 - IPPROTO_TTP = 0x54 - IPPROTO_UDP = 0x11 - IPPROTO_UDPLITE = 0x88 - IPPROTO_VINES = 0x53 - IPPROTO_VISA = 0x46 - IPPROTO_VMTP = 0x51 - IPPROTO_WBEXPAK = 0x4f - IPPROTO_WBMON = 0x4e - IPPROTO_WSN = 0x4a - IPPROTO_XNET = 0xf - IPPROTO_XTP = 0x24 - IPV6_AUTOFLOWLABEL = 0x3b - IPV6_BINDANY = 0x40 - IPV6_BINDMULTI = 0x41 - IPV6_BINDV6ONLY = 0x1b - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_DONTFRAG = 0x3e - IPV6_DSTOPTS = 0x32 - IPV6_FLOWID = 0x43 - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_LEN = 0x14 - IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FLOWTYPE = 0x44 - IPV6_FRAGTTL = 0x78 - IPV6_FW_ADD = 0x1e - IPV6_FW_DEL = 0x1f - IPV6_FW_FLUSH = 0x20 - IPV6_FW_GET = 0x22 - IPV6_FW_ZERO = 0x21 - IPV6_HLIMDEC = 0x1 - IPV6_HOPLIMIT = 0x2f - IPV6_HOPOPTS = 0x31 - IPV6_IPSEC_POLICY = 0x1c - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXOPTHDR = 0x800 - IPV6_MAXPACKET = 0xffff - IPV6_MAX_GROUP_SRC_FILTER = 0x200 - IPV6_MAX_MEMBERSHIPS = 0xfff - IPV6_MAX_SOCK_SRC_FILTER = 0x80 - IPV6_MMTU = 0x500 - IPV6_MSFILTER = 0x4a - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_ORIGDSTADDR = 0x48 - IPV6_PATHMTU = 0x2c - IPV6_PKTINFO = 0x2e - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_PREFER_TEMPADDR = 0x3f - IPV6_RECVDSTOPTS = 0x28 - IPV6_RECVFLOWID = 0x46 - IPV6_RECVHOPLIMIT = 0x25 - IPV6_RECVHOPOPTS = 0x27 - IPV6_RECVORIGDSTADDR = 0x48 - IPV6_RECVPATHMTU = 0x2b - IPV6_RECVPKTINFO = 0x24 - IPV6_RECVRSSBUCKETID = 0x47 - IPV6_RECVRTHDR = 0x26 - IPV6_RECVTCLASS = 0x39 - IPV6_RSSBUCKETID = 0x45 - IPV6_RSS_LISTEN_BUCKET = 0x42 - IPV6_RTHDR = 0x33 - IPV6_RTHDRDSTOPTS = 0x23 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x3d - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2a - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IPV6_VLAN_PCP = 0x4b - IP_ADD_MEMBERSHIP = 0xc - IP_ADD_SOURCE_MEMBERSHIP = 0x46 - IP_BINDANY = 0x18 - IP_BINDMULTI = 0x19 - IP_BLOCK_SOURCE = 0x48 - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DONTFRAG = 0x43 - IP_DROP_MEMBERSHIP = 0xd - IP_DROP_SOURCE_MEMBERSHIP = 0x47 - IP_DUMMYNET3 = 0x31 - IP_DUMMYNET_CONFIGURE = 0x3c - IP_DUMMYNET_DEL = 0x3d - IP_DUMMYNET_FLUSH = 0x3e - IP_DUMMYNET_GET = 0x40 - IP_FLOWID = 0x5a - IP_FLOWTYPE = 0x5b - IP_FW3 = 0x30 - IP_FW_ADD = 0x32 - IP_FW_DEL = 0x33 - IP_FW_FLUSH = 0x34 - IP_FW_GET = 0x36 - IP_FW_NAT_CFG = 0x38 - IP_FW_NAT_DEL = 0x39 - IP_FW_NAT_GET_CONFIG = 0x3a - IP_FW_NAT_GET_LOG = 0x3b - IP_FW_RESETLOG = 0x37 - IP_FW_TABLE_ADD = 0x28 - IP_FW_TABLE_DEL = 0x29 - IP_FW_TABLE_FLUSH = 0x2a - IP_FW_TABLE_GETSIZE = 0x2b - IP_FW_TABLE_LIST = 0x2c - IP_FW_ZERO = 0x35 - IP_HDRINCL = 0x2 - IP_IPSEC_POLICY = 0x15 - IP_MAXPACKET = 0xffff - IP_MAX_GROUP_SRC_FILTER = 0x200 - IP_MAX_MEMBERSHIPS = 0xfff - IP_MAX_SOCK_MUTE_FILTER = 0x80 - IP_MAX_SOCK_SRC_FILTER = 0x80 - IP_MF = 0x2000 - IP_MINTTL = 0x42 - IP_MSFILTER = 0x4a - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_MULTICAST_VIF = 0xe - IP_OFFMASK = 0x1fff - IP_ONESBCAST = 0x17 - IP_OPTIONS = 0x1 - IP_ORIGDSTADDR = 0x1b - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVFLOWID = 0x5d - IP_RECVIF = 0x14 - IP_RECVOPTS = 0x5 - IP_RECVORIGDSTADDR = 0x1b - IP_RECVRETOPTS = 0x6 - IP_RECVRSSBUCKETID = 0x5e - IP_RECVTOS = 0x44 - IP_RECVTTL = 0x41 - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_RSSBUCKETID = 0x5c - IP_RSS_LISTEN_BUCKET = 0x1a - IP_RSVP_OFF = 0x10 - IP_RSVP_ON = 0xf - IP_RSVP_VIF_OFF = 0x12 - IP_RSVP_VIF_ON = 0x11 - IP_SENDSRCADDR = 0x7 - IP_TOS = 0x3 - IP_TTL = 0x4 - IP_UNBLOCK_SOURCE = 0x49 - IP_VLAN_PCP = 0x4b - ISIG = 0x80 - ISTRIP = 0x20 - ITIMER_PROF = 0x2 - ITIMER_REAL = 0x0 - ITIMER_VIRTUAL = 0x1 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - KERN_HOSTNAME = 0xa - KERN_OSRELEASE = 0x2 - KERN_OSTYPE = 0x1 - KERN_VERSION = 0x4 - LOCAL_CONNWAIT = 0x4 - LOCAL_CREDS = 0x2 - LOCAL_PEERCRED = 0x1 - LOCAL_VENDOR = 0x80000000 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_AUTOSYNC = 0x7 - MADV_CORE = 0x9 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x5 - MADV_NOCORE = 0x8 - MADV_NORMAL = 0x0 - MADV_NOSYNC = 0x6 - MADV_PROTECT = 0xa - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_WILLNEED = 0x3 - MAP_32BIT = 0x80000 - MAP_ALIGNED_SUPER = 0x1000000 - MAP_ALIGNMENT_MASK = -0x1000000 - MAP_ALIGNMENT_SHIFT = 0x18 - MAP_ANON = 0x1000 - MAP_ANONYMOUS = 0x1000 - MAP_COPY = 0x2 - MAP_EXCL = 0x4000 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_GUARD = 0x2000 - MAP_HASSEMAPHORE = 0x200 - MAP_NOCORE = 0x20000 - MAP_NOSYNC = 0x800 - MAP_PREFAULT_READ = 0x40000 - MAP_PRIVATE = 0x2 - MAP_RESERVED0020 = 0x20 - MAP_RESERVED0040 = 0x40 - MAP_RESERVED0080 = 0x80 - MAP_RESERVED0100 = 0x100 - MAP_SHARED = 0x1 - MAP_STACK = 0x400 - MCAST_BLOCK_SOURCE = 0x54 - MCAST_EXCLUDE = 0x2 - MCAST_INCLUDE = 0x1 - MCAST_JOIN_GROUP = 0x50 - MCAST_JOIN_SOURCE_GROUP = 0x52 - MCAST_LEAVE_GROUP = 0x51 - MCAST_LEAVE_SOURCE_GROUP = 0x53 - MCAST_UNBLOCK_SOURCE = 0x55 - MCAST_UNDEFINED = 0x0 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MNT_ACLS = 0x8000000 - MNT_ASYNC = 0x40 - MNT_AUTOMOUNTED = 0x200000000 - MNT_BYFSID = 0x8000000 - MNT_CMDFLAGS = 0xd0f0000 - MNT_DEFEXPORTED = 0x200 - MNT_DELEXPORT = 0x20000 - MNT_EXKERB = 0x800 - MNT_EXPORTANON = 0x400 - MNT_EXPORTED = 0x100 - MNT_EXPUBLIC = 0x20000000 - MNT_EXRDONLY = 0x80 - MNT_FORCE = 0x80000 - MNT_GJOURNAL = 0x2000000 - MNT_IGNORE = 0x800000 - MNT_LAZY = 0x3 - MNT_LOCAL = 0x1000 - MNT_MULTILABEL = 0x4000000 - MNT_NFS4ACLS = 0x10 - MNT_NOATIME = 0x10000000 - MNT_NOCLUSTERR = 0x40000000 - MNT_NOCLUSTERW = 0x80000000 - MNT_NOEXEC = 0x4 - MNT_NONBUSY = 0x4000000 - MNT_NOSUID = 0x8 - MNT_NOSYMFOLLOW = 0x400000 - MNT_NOWAIT = 0x2 - MNT_QUOTA = 0x2000 - MNT_RDONLY = 0x1 - MNT_RELOAD = 0x40000 - MNT_ROOTFS = 0x4000 - MNT_SNAPSHOT = 0x1000000 - MNT_SOFTDEP = 0x200000 - MNT_SUIDDIR = 0x100000 - MNT_SUJ = 0x100000000 - MNT_SUSPEND = 0x4 - MNT_SYNCHRONOUS = 0x2 - MNT_UNION = 0x20 - MNT_UNTRUSTED = 0x800000000 - MNT_UPDATE = 0x10000 - MNT_UPDATEMASK = 0xad8d0807e - MNT_USER = 0x8000 - MNT_VERIFIED = 0x400000000 - MNT_VISFLAGMASK = 0xffef0ffff - MNT_WAIT = 0x1 - MSG_CMSG_CLOEXEC = 0x40000 - MSG_COMPAT = 0x8000 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOF = 0x100 - MSG_EOR = 0x8 - MSG_NBIO = 0x4000 - MSG_NOSIGNAL = 0x20000 - MSG_NOTIFICATION = 0x2000 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 - MSG_WAITFORONE = 0x80000 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x2 - MS_SYNC = 0x0 - NAME_MAX = 0xff - NET_RT_DUMP = 0x1 - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x3 - NET_RT_IFLISTL = 0x5 - NET_RT_IFMALIST = 0x4 - NFDBITS = 0x40 - NOFLSH = 0x80000000 - NOKERNINFO = 0x2000000 - NOTE_ABSTIME = 0x10 - NOTE_ATTRIB = 0x8 - NOTE_CHILD = 0x4 - NOTE_CLOSE = 0x100 - NOTE_CLOSE_WRITE = 0x200 - NOTE_DELETE = 0x1 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXTEND = 0x4 - NOTE_FFAND = 0x40000000 - NOTE_FFCOPY = 0xc0000000 - NOTE_FFCTRLMASK = 0xc0000000 - NOTE_FFLAGSMASK = 0xffffff - NOTE_FFNOP = 0x0 - NOTE_FFOR = 0x80000000 - NOTE_FILE_POLL = 0x2 - NOTE_FORK = 0x40000000 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_MSECONDS = 0x2 - NOTE_NSECONDS = 0x8 - NOTE_OPEN = 0x80 - NOTE_PCTRLMASK = 0xf0000000 - NOTE_PDATAMASK = 0xfffff - NOTE_READ = 0x400 - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_SECONDS = 0x1 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_TRIGGER = 0x1000000 - NOTE_USECONDS = 0x4 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - ONLCR = 0x2 - ONLRET = 0x40 - ONOCR = 0x20 - ONOEOT = 0x8 - OPOST = 0x1 - OXTABS = 0x4 - O_ACCMODE = 0x3 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x100000 - O_CREAT = 0x200 - O_DIRECT = 0x10000 - O_DIRECTORY = 0x20000 - O_EXCL = 0x800 - O_EXEC = 0x40000 - O_EXLOCK = 0x20 - O_FSYNC = 0x80 - O_NDELAY = 0x4 - O_NOCTTY = 0x8000 - O_NOFOLLOW = 0x100 - O_NONBLOCK = 0x4 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_RESOLVE_BENEATH = 0x800000 - O_SEARCH = 0x40000 - O_SHLOCK = 0x10 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_TTY_INIT = 0x80000 - O_VERIFY = 0x200000 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PIOD_READ_D = 0x1 - PIOD_READ_I = 0x3 - PIOD_WRITE_D = 0x2 - PIOD_WRITE_I = 0x4 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - PTRACE_DEFAULT = 0x1 - PTRACE_EXEC = 0x1 - PTRACE_FORK = 0x8 - PTRACE_LWP = 0x10 - PTRACE_SCE = 0x2 - PTRACE_SCX = 0x4 - PTRACE_SYSCALL = 0x6 - PTRACE_VFORK = 0x20 - PT_ATTACH = 0xa - PT_CLEARSTEP = 0x10 - PT_CONTINUE = 0x7 - PT_DETACH = 0xb - PT_FIRSTMACH = 0x40 - PT_FOLLOW_FORK = 0x17 - PT_GETDBREGS = 0x25 - PT_GETFPREGS = 0x23 - PT_GETFSBASE = 0x47 - PT_GETGSBASE = 0x49 - PT_GETLWPLIST = 0xf - PT_GETNUMLWPS = 0xe - PT_GETREGS = 0x21 - PT_GETXSTATE = 0x45 - PT_GETXSTATE_INFO = 0x44 - PT_GET_EVENT_MASK = 0x19 - PT_GET_SC_ARGS = 0x1b - PT_GET_SC_RET = 0x1c - PT_IO = 0xc - PT_KILL = 0x8 - PT_LWPINFO = 0xd - PT_LWP_EVENTS = 0x18 - PT_READ_D = 0x2 - PT_READ_I = 0x1 - PT_RESUME = 0x13 - PT_SETDBREGS = 0x26 - PT_SETFPREGS = 0x24 - PT_SETFSBASE = 0x48 - PT_SETGSBASE = 0x4a - PT_SETREGS = 0x22 - PT_SETSTEP = 0x11 - PT_SETXSTATE = 0x46 - PT_SET_EVENT_MASK = 0x1a - PT_STEP = 0x9 - PT_SUSPEND = 0x12 - PT_SYSCALL = 0x16 - PT_TO_SCE = 0x14 - PT_TO_SCX = 0x15 - PT_TRACE_ME = 0x0 - PT_VM_ENTRY = 0x29 - PT_VM_TIMESTAMP = 0x28 - PT_WRITE_D = 0x5 - PT_WRITE_I = 0x4 - P_ZONEID = 0xc - RLIMIT_AS = 0xa - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_MEMLOCK = 0x6 - RLIMIT_NOFILE = 0x8 - RLIMIT_NPROC = 0x7 - RLIMIT_RSS = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_MAX = 0x8 - RTAX_NETMASK = 0x2 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_NETMASK = 0x4 - RTF_BLACKHOLE = 0x1000 - RTF_BROADCAST = 0x400000 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_FIXEDMTU = 0x80000 - RTF_FMASK = 0x1004d808 - RTF_GATEWAY = 0x2 - RTF_GWFLAG_COMPAT = 0x80000000 - RTF_HOST = 0x4 - RTF_LLDATA = 0x400 - RTF_LLINFO = 0x400 - RTF_LOCAL = 0x200000 - RTF_MODIFIED = 0x20 - RTF_MULTICAST = 0x800000 - RTF_PINNED = 0x100000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_PROTO3 = 0x40000 - RTF_REJECT = 0x8 - RTF_RNH_LOCKED = 0x40000000 - RTF_STATIC = 0x800 - RTF_STICKY = 0x10000000 - RTF_UP = 0x1 - RTF_XRESOLVE = 0x200 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_DELMADDR = 0x10 - RTM_GET = 0x4 - RTM_IEEE80211 = 0x12 - RTM_IFANNOUNCE = 0x11 - RTM_IFINFO = 0xe - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_NEWMADDR = 0xf - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RTV_WEIGHT = 0x100 - RT_ALL_FIBS = -0x1 - RT_BLACKHOLE = 0x40 - RT_DEFAULT_FIB = 0x0 - RT_HAS_GW = 0x80 - RT_HAS_HEADER = 0x10 - RT_HAS_HEADER_BIT = 0x4 - RT_L2_ME = 0x4 - RT_L2_ME_BIT = 0x2 - RT_LLE_CACHE = 0x100 - RT_MAY_LOOP = 0x8 - RT_MAY_LOOP_BIT = 0x3 - RT_REJECT = 0x20 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - RUSAGE_THREAD = 0x1 - SCM_BINTIME = 0x4 - SCM_CREDS = 0x3 - SCM_MONOTONIC = 0x6 - SCM_REALTIME = 0x5 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x2 - SCM_TIME_INFO = 0x7 - SEEK_CUR = 0x1 - SEEK_DATA = 0x3 - SEEK_END = 0x2 - SEEK_HOLE = 0x4 - SEEK_SET = 0x0 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80206931 - SIOCAIFADDR = 0x8040691a - SIOCAIFGROUP = 0x80286987 - SIOCATMARK = 0x40047307 - SIOCDELMULTI = 0x80206932 - SIOCDIFADDR = 0x80206919 - SIOCDIFGROUP = 0x80286989 - SIOCDIFPHYADDR = 0x80206949 - SIOCGDRVSPEC = 0xc028697b - SIOCGETSGCNT = 0xc0207210 - SIOCGETVIFCNT = 0xc028720f - SIOCGHIWAT = 0x40047301 - SIOCGHWADDR = 0xc020693e - SIOCGI2C = 0xc020693d - SIOCGIFADDR = 0xc0206921 - SIOCGIFALIAS = 0xc044692d - SIOCGIFBRDADDR = 0xc0206923 - SIOCGIFCAP = 0xc020691f - SIOCGIFCONF = 0xc0106924 - SIOCGIFDESCR = 0xc020692a - SIOCGIFDOWNREASON = 0xc058699a - SIOCGIFDSTADDR = 0xc0206922 - SIOCGIFFIB = 0xc020695c - SIOCGIFFLAGS = 0xc0206911 - SIOCGIFGENERIC = 0xc020693a - SIOCGIFGMEMB = 0xc028698a - SIOCGIFGROUP = 0xc0286988 - SIOCGIFINDEX = 0xc0206920 - SIOCGIFMAC = 0xc0206926 - SIOCGIFMEDIA = 0xc0306938 - SIOCGIFMETRIC = 0xc0206917 - SIOCGIFMTU = 0xc0206933 - SIOCGIFNETMASK = 0xc0206925 - SIOCGIFPDSTADDR = 0xc0206948 - SIOCGIFPHYS = 0xc0206935 - SIOCGIFPSRCADDR = 0xc0206947 - SIOCGIFRSSHASH = 0xc0186997 - SIOCGIFRSSKEY = 0xc0946996 - SIOCGIFSTATUS = 0xc331693b - SIOCGIFXMEDIA = 0xc030698b - SIOCGLANPCP = 0xc0206998 - SIOCGLOWAT = 0x40047303 - SIOCGPGRP = 0x40047309 - SIOCGPRIVATE_0 = 0xc0206950 - SIOCGPRIVATE_1 = 0xc0206951 - SIOCGTUNFIB = 0xc020695e - SIOCIFCREATE = 0xc020697a - SIOCIFCREATE2 = 0xc020697c - SIOCIFDESTROY = 0x80206979 - SIOCIFGCLONERS = 0xc0106978 - SIOCSDRVSPEC = 0x8028697b - SIOCSHIWAT = 0x80047300 - SIOCSIFADDR = 0x8020690c - SIOCSIFBRDADDR = 0x80206913 - SIOCSIFCAP = 0x8020691e - SIOCSIFDESCR = 0x80206929 - SIOCSIFDSTADDR = 0x8020690e - SIOCSIFFIB = 0x8020695d - SIOCSIFFLAGS = 0x80206910 - SIOCSIFGENERIC = 0x80206939 - SIOCSIFLLADDR = 0x8020693c - SIOCSIFMAC = 0x80206927 - SIOCSIFMEDIA = 0xc0206937 - SIOCSIFMETRIC = 0x80206918 - SIOCSIFMTU = 0x80206934 - SIOCSIFNAME = 0x80206928 - SIOCSIFNETMASK = 0x80206916 - SIOCSIFPHYADDR = 0x80406946 - SIOCSIFPHYS = 0x80206936 - SIOCSIFRVNET = 0xc020695b - SIOCSIFVNET = 0xc020695a - SIOCSLANPCP = 0x80206999 - SIOCSLOWAT = 0x80047302 - SIOCSPGRP = 0x80047308 - SIOCSTUNFIB = 0x8020695f - SOCK_CLOEXEC = 0x10000000 - SOCK_DGRAM = 0x2 - SOCK_MAXADDRLEN = 0xff - SOCK_NONBLOCK = 0x20000000 - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_LOCAL = 0x0 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_ACCEPTFILTER = 0x1000 - SO_BINTIME = 0x2000 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 - SO_DOMAIN = 0x1019 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LABEL = 0x1009 - SO_LINGER = 0x80 - SO_LISTENINCQLEN = 0x1013 - SO_LISTENQLEN = 0x1012 - SO_LISTENQLIMIT = 0x1011 - SO_MAX_PACING_RATE = 0x1018 - SO_NOSIGPIPE = 0x800 - SO_NO_DDP = 0x8000 - SO_NO_OFFLOAD = 0x4000 - SO_OOBINLINE = 0x100 - SO_PEERLABEL = 0x1010 - SO_PROTOCOL = 0x1016 - SO_PROTOTYPE = 0x1016 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 - SO_RERROR = 0x20000 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_REUSEPORT_LB = 0x10000 - SO_SETFIB = 0x1014 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_TIMESTAMP = 0x400 - SO_TS_BINTIME = 0x1 - SO_TS_CLOCK = 0x1017 - SO_TS_CLOCK_MAX = 0x3 - SO_TS_DEFAULT = 0x0 - SO_TS_MONOTONIC = 0x3 - SO_TS_REALTIME = 0x2 - SO_TS_REALTIME_MICRO = 0x0 - SO_TYPE = 0x1008 - SO_USELOOPBACK = 0x40 - SO_USER_COOKIE = 0x1015 - SO_VENDOR = 0x80000000 - S_BLKSIZE = 0x200 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFLNK = 0xa000 - S_IFMT = 0xf000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IFWHT = 0xe000 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISTXT = 0x200 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXGRP = 0x8 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - TAB0 = 0x0 - TAB3 = 0x4 - TABDLY = 0x4 - TCIFLUSH = 0x1 - TCIOFF = 0x3 - TCIOFLUSH = 0x3 - TCION = 0x4 - TCOFLUSH = 0x2 - TCOOFF = 0x1 - TCOON = 0x2 - TCPOPT_EOL = 0x0 - TCPOPT_FAST_OPEN = 0x22 - TCPOPT_MAXSEG = 0x2 - TCPOPT_NOP = 0x1 - TCPOPT_PAD = 0x0 - TCPOPT_SACK = 0x5 - TCPOPT_SACK_PERMITTED = 0x4 - TCPOPT_SIGNATURE = 0x13 - TCPOPT_TIMESTAMP = 0x8 - TCPOPT_WINDOW = 0x3 - TCP_BBR_ACK_COMP_ALG = 0x448 - TCP_BBR_ALGORITHM = 0x43b - TCP_BBR_DRAIN_INC_EXTRA = 0x43c - TCP_BBR_DRAIN_PG = 0x42e - TCP_BBR_EXTRA_GAIN = 0x449 - TCP_BBR_EXTRA_STATE = 0x453 - TCP_BBR_FLOOR_MIN_TSO = 0x454 - TCP_BBR_HDWR_PACE = 0x451 - TCP_BBR_HOLD_TARGET = 0x436 - TCP_BBR_IWINTSO = 0x42b - TCP_BBR_LOWGAIN_FD = 0x436 - TCP_BBR_LOWGAIN_HALF = 0x435 - TCP_BBR_LOWGAIN_THRESH = 0x434 - TCP_BBR_MAX_RTO = 0x439 - TCP_BBR_MIN_RTO = 0x438 - TCP_BBR_MIN_TOPACEOUT = 0x455 - TCP_BBR_ONE_RETRAN = 0x431 - TCP_BBR_PACE_CROSS = 0x442 - TCP_BBR_PACE_DEL_TAR = 0x43f - TCP_BBR_PACE_OH = 0x435 - TCP_BBR_PACE_PER_SEC = 0x43e - TCP_BBR_PACE_SEG_MAX = 0x440 - TCP_BBR_PACE_SEG_MIN = 0x441 - TCP_BBR_POLICER_DETECT = 0x457 - TCP_BBR_PROBE_RTT_GAIN = 0x44d - TCP_BBR_PROBE_RTT_INT = 0x430 - TCP_BBR_PROBE_RTT_LEN = 0x44e - TCP_BBR_RACK_RTT_USE = 0x44a - TCP_BBR_RECFORCE = 0x42c - TCP_BBR_REC_OVER_HPTS = 0x43a - TCP_BBR_RETRAN_WTSO = 0x44b - TCP_BBR_RWND_IS_APP = 0x42f - TCP_BBR_SEND_IWND_IN_TSO = 0x44f - TCP_BBR_STARTUP_EXIT_EPOCH = 0x43d - TCP_BBR_STARTUP_LOSS_EXIT = 0x432 - TCP_BBR_STARTUP_PG = 0x42d - TCP_BBR_TMR_PACE_OH = 0x448 - TCP_BBR_TSLIMITS = 0x434 - TCP_BBR_TSTMP_RAISES = 0x456 - TCP_BBR_UNLIMITED = 0x43b - TCP_BBR_USEDEL_RATE = 0x437 - TCP_BBR_USE_LOWGAIN = 0x433 - TCP_BBR_USE_RACK_CHEAT = 0x450 - TCP_BBR_UTTER_MAX_TSO = 0x452 - TCP_CA_NAME_MAX = 0x10 - TCP_CCALGOOPT = 0x41 - TCP_CONGESTION = 0x40 - TCP_DATA_AFTER_CLOSE = 0x44c - TCP_DELACK = 0x48 - TCP_FASTOPEN = 0x401 - TCP_FASTOPEN_MAX_COOKIE_LEN = 0x10 - TCP_FASTOPEN_MIN_COOKIE_LEN = 0x4 - TCP_FASTOPEN_PSK_LEN = 0x10 - TCP_FUNCTION_BLK = 0x2000 - TCP_FUNCTION_NAME_LEN_MAX = 0x20 - TCP_INFO = 0x20 - TCP_KEEPCNT = 0x400 - TCP_KEEPIDLE = 0x100 - TCP_KEEPINIT = 0x80 - TCP_KEEPINTVL = 0x200 - TCP_LOG = 0x22 - TCP_LOGBUF = 0x23 - TCP_LOGDUMP = 0x25 - TCP_LOGDUMPID = 0x26 - TCP_LOGID = 0x24 - TCP_LOG_ID_LEN = 0x40 - TCP_MAXBURST = 0x4 - TCP_MAXHLEN = 0x3c - TCP_MAXOLEN = 0x28 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x4 - TCP_MAX_WINSHIFT = 0xe - TCP_MD5SIG = 0x10 - TCP_MINMSS = 0xd8 - TCP_MSS = 0x218 - TCP_NODELAY = 0x1 - TCP_NOOPT = 0x8 - TCP_NOPUSH = 0x4 - TCP_PCAP_IN = 0x1000 - TCP_PCAP_OUT = 0x800 - TCP_RACK_EARLY_RECOV = 0x423 - TCP_RACK_EARLY_SEG = 0x424 - TCP_RACK_GP_INCREASE = 0x446 - TCP_RACK_IDLE_REDUCE_HIGH = 0x444 - TCP_RACK_MIN_PACE = 0x445 - TCP_RACK_MIN_PACE_SEG = 0x446 - TCP_RACK_MIN_TO = 0x422 - TCP_RACK_PACE_ALWAYS = 0x41f - TCP_RACK_PACE_MAX_SEG = 0x41e - TCP_RACK_PACE_REDUCE = 0x41d - TCP_RACK_PKT_DELAY = 0x428 - TCP_RACK_PROP = 0x41b - TCP_RACK_PROP_RATE = 0x420 - TCP_RACK_PRR_SENDALOT = 0x421 - TCP_RACK_REORD_FADE = 0x426 - TCP_RACK_REORD_THRESH = 0x425 - TCP_RACK_TLP_INC_VAR = 0x429 - TCP_RACK_TLP_REDUCE = 0x41c - TCP_RACK_TLP_THRESH = 0x427 - TCP_RACK_TLP_USE = 0x447 - TCP_VENDOR = 0x80000000 - TCSAFLUSH = 0x2 - TIMER_ABSTIME = 0x1 - TIMER_RELTIME = 0x0 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCONS = 0x80047462 - TIOCDRAIN = 0x2000745e - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLUSH = 0x80047410 - TIOCGDRAINWAIT = 0x40047456 - TIOCGETA = 0x402c7413 - TIOCGETD = 0x4004741a - TIOCGPGRP = 0x40047477 - TIOCGPTN = 0x4004740f - TIOCGSID = 0x40047463 - TIOCGWINSZ = 0x40087468 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGDTRWAIT = 0x4004745a - TIOCMGET = 0x4004746a - TIOCMSDTRWAIT = 0x8004745b - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DCD = 0x40 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCPTMASTER = 0x2000741c - TIOCSBRK = 0x2000747b - TIOCSCTTY = 0x20007461 - TIOCSDRAINWAIT = 0x80047457 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x802c7414 - TIOCSETAF = 0x802c7416 - TIOCSETAW = 0x802c7415 - TIOCSETD = 0x8004741b - TIOCSIG = 0x2004745f - TIOCSPGRP = 0x80047476 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x20007465 - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCTIMESTAMP = 0x40107459 - TIOCUCNTL = 0x80047466 - TOSTOP = 0x400000 - UTIME_NOW = -0x1 - UTIME_OMIT = -0x2 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VERASE2 = 0x7 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VTIME = 0x11 - VWERASE = 0x4 - WCONTINUED = 0x4 - WCOREFLAG = 0x80 - WEXITED = 0x10 - WLINUXCLONE = 0x80000000 - WNOHANG = 0x1 - WNOWAIT = 0x8 - WSTOPPED = 0x2 - WTRAPPED = 0x20 - WUNTRACED = 0x2 -) - -// Errors -const ( - E2BIG = syscall.Errno(0x7) - EACCES = syscall.Errno(0xd) - EADDRINUSE = syscall.Errno(0x30) - EADDRNOTAVAIL = syscall.Errno(0x31) - EAFNOSUPPORT = syscall.Errno(0x2f) - EAGAIN = syscall.Errno(0x23) - EALREADY = syscall.Errno(0x25) - EAUTH = syscall.Errno(0x50) - EBADF = syscall.Errno(0x9) - EBADMSG = syscall.Errno(0x59) - EBADRPC = syscall.Errno(0x48) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x55) - ECAPMODE = syscall.Errno(0x5e) - ECHILD = syscall.Errno(0xa) - ECONNABORTED = syscall.Errno(0x35) - ECONNREFUSED = syscall.Errno(0x3d) - ECONNRESET = syscall.Errno(0x36) - EDEADLK = syscall.Errno(0xb) - EDESTADDRREQ = syscall.Errno(0x27) - EDOM = syscall.Errno(0x21) - EDOOFUS = syscall.Errno(0x58) - EDQUOT = syscall.Errno(0x45) - EEXIST = syscall.Errno(0x11) - EFAULT = syscall.Errno(0xe) - EFBIG = syscall.Errno(0x1b) - EFTYPE = syscall.Errno(0x4f) - EHOSTDOWN = syscall.Errno(0x40) - EHOSTUNREACH = syscall.Errno(0x41) - EIDRM = syscall.Errno(0x52) - EILSEQ = syscall.Errno(0x56) - EINPROGRESS = syscall.Errno(0x24) - EINTEGRITY = syscall.Errno(0x61) - EINTR = syscall.Errno(0x4) - EINVAL = syscall.Errno(0x16) - EIO = syscall.Errno(0x5) - EISCONN = syscall.Errno(0x38) - EISDIR = syscall.Errno(0x15) - ELAST = syscall.Errno(0x61) - ELOOP = syscall.Errno(0x3e) - EMFILE = syscall.Errno(0x18) - EMLINK = syscall.Errno(0x1f) - EMSGSIZE = syscall.Errno(0x28) - EMULTIHOP = syscall.Errno(0x5a) - ENAMETOOLONG = syscall.Errno(0x3f) - ENEEDAUTH = syscall.Errno(0x51) - ENETDOWN = syscall.Errno(0x32) - ENETRESET = syscall.Errno(0x34) - ENETUNREACH = syscall.Errno(0x33) - ENFILE = syscall.Errno(0x17) - ENOATTR = syscall.Errno(0x57) - ENOBUFS = syscall.Errno(0x37) - ENODEV = syscall.Errno(0x13) - ENOENT = syscall.Errno(0x2) - ENOEXEC = syscall.Errno(0x8) - ENOLCK = syscall.Errno(0x4d) - ENOLINK = syscall.Errno(0x5b) - ENOMEM = syscall.Errno(0xc) - ENOMSG = syscall.Errno(0x53) - ENOPROTOOPT = syscall.Errno(0x2a) - ENOSPC = syscall.Errno(0x1c) - ENOSYS = syscall.Errno(0x4e) - ENOTBLK = syscall.Errno(0xf) - ENOTCAPABLE = syscall.Errno(0x5d) - ENOTCONN = syscall.Errno(0x39) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x42) - ENOTRECOVERABLE = syscall.Errno(0x5f) - ENOTSOCK = syscall.Errno(0x26) - ENOTSUP = syscall.Errno(0x2d) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x2d) - EOVERFLOW = syscall.Errno(0x54) - EOWNERDEAD = syscall.Errno(0x60) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x2e) - EPIPE = syscall.Errno(0x20) - EPROCLIM = syscall.Errno(0x43) - EPROCUNAVAIL = syscall.Errno(0x4c) - EPROGMISMATCH = syscall.Errno(0x4b) - EPROGUNAVAIL = syscall.Errno(0x4a) - EPROTO = syscall.Errno(0x5c) - EPROTONOSUPPORT = syscall.Errno(0x2b) - EPROTOTYPE = syscall.Errno(0x29) - ERANGE = syscall.Errno(0x22) - EREMOTE = syscall.Errno(0x47) - EROFS = syscall.Errno(0x1e) - ERPCMISMATCH = syscall.Errno(0x49) - ESHUTDOWN = syscall.Errno(0x3a) - ESOCKTNOSUPPORT = syscall.Errno(0x2c) - ESPIPE = syscall.Errno(0x1d) - ESRCH = syscall.Errno(0x3) - ESTALE = syscall.Errno(0x46) - ETIMEDOUT = syscall.Errno(0x3c) - ETOOMANYREFS = syscall.Errno(0x3b) - ETXTBSY = syscall.Errno(0x1a) - EUSERS = syscall.Errno(0x44) - EWOULDBLOCK = syscall.Errno(0x23) - EXDEV = syscall.Errno(0x12) -) - -// Signals -const ( - SIGABRT = syscall.Signal(0x6) - SIGALRM = syscall.Signal(0xe) - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x14) - SIGCONT = syscall.Signal(0x13) - SIGEMT = syscall.Signal(0x7) - SIGFPE = syscall.Signal(0x8) - SIGHUP = syscall.Signal(0x1) - SIGILL = syscall.Signal(0x4) - SIGINFO = syscall.Signal(0x1d) - SIGINT = syscall.Signal(0x2) - SIGIO = syscall.Signal(0x17) - SIGIOT = syscall.Signal(0x6) - SIGKILL = syscall.Signal(0x9) - SIGLIBRT = syscall.Signal(0x21) - SIGLWP = syscall.Signal(0x20) - SIGPIPE = syscall.Signal(0xd) - SIGPROF = syscall.Signal(0x1b) - SIGQUIT = syscall.Signal(0x3) - SIGSEGV = syscall.Signal(0xb) - SIGSTOP = syscall.Signal(0x11) - SIGSYS = syscall.Signal(0xc) - SIGTERM = syscall.Signal(0xf) - SIGTHR = syscall.Signal(0x20) - SIGTRAP = syscall.Signal(0x5) - SIGTSTP = syscall.Signal(0x12) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x10) - SIGUSR1 = syscall.Signal(0x1e) - SIGUSR2 = syscall.Signal(0x1f) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "device not configured"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EDEADLK", "resource deadlock avoided"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "cross-device link"}, - {19, "ENODEV", "operation not supported by device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "result too large"}, - {35, "EWOULDBLOCK", "resource temporarily unavailable"}, - {36, "EINPROGRESS", "operation now in progress"}, - {37, "EALREADY", "operation already in progress"}, - {38, "ENOTSOCK", "socket operation on non-socket"}, - {39, "EDESTADDRREQ", "destination address required"}, - {40, "EMSGSIZE", "message too long"}, - {41, "EPROTOTYPE", "protocol wrong type for socket"}, - {42, "ENOPROTOOPT", "protocol not available"}, - {43, "EPROTONOSUPPORT", "protocol not supported"}, - {44, "ESOCKTNOSUPPORT", "socket type not supported"}, - {45, "EOPNOTSUPP", "operation not supported"}, - {46, "EPFNOSUPPORT", "protocol family not supported"}, - {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, - {48, "EADDRINUSE", "address already in use"}, - {49, "EADDRNOTAVAIL", "can't assign requested address"}, - {50, "ENETDOWN", "network is down"}, - {51, "ENETUNREACH", "network is unreachable"}, - {52, "ENETRESET", "network dropped connection on reset"}, - {53, "ECONNABORTED", "software caused connection abort"}, - {54, "ECONNRESET", "connection reset by peer"}, - {55, "ENOBUFS", "no buffer space available"}, - {56, "EISCONN", "socket is already connected"}, - {57, "ENOTCONN", "socket is not connected"}, - {58, "ESHUTDOWN", "can't send after socket shutdown"}, - {59, "ETOOMANYREFS", "too many references: can't splice"}, - {60, "ETIMEDOUT", "operation timed out"}, - {61, "ECONNREFUSED", "connection refused"}, - {62, "ELOOP", "too many levels of symbolic links"}, - {63, "ENAMETOOLONG", "file name too long"}, - {64, "EHOSTDOWN", "host is down"}, - {65, "EHOSTUNREACH", "no route to host"}, - {66, "ENOTEMPTY", "directory not empty"}, - {67, "EPROCLIM", "too many processes"}, - {68, "EUSERS", "too many users"}, - {69, "EDQUOT", "disc quota exceeded"}, - {70, "ESTALE", "stale NFS file handle"}, - {71, "EREMOTE", "too many levels of remote in path"}, - {72, "EBADRPC", "RPC struct is bad"}, - {73, "ERPCMISMATCH", "RPC version wrong"}, - {74, "EPROGUNAVAIL", "RPC prog. not avail"}, - {75, "EPROGMISMATCH", "program version wrong"}, - {76, "EPROCUNAVAIL", "bad procedure for program"}, - {77, "ENOLCK", "no locks available"}, - {78, "ENOSYS", "function not implemented"}, - {79, "EFTYPE", "inappropriate file type or format"}, - {80, "EAUTH", "authentication error"}, - {81, "ENEEDAUTH", "need authenticator"}, - {82, "EIDRM", "identifier removed"}, - {83, "ENOMSG", "no message of desired type"}, - {84, "EOVERFLOW", "value too large to be stored in data type"}, - {85, "ECANCELED", "operation canceled"}, - {86, "EILSEQ", "illegal byte sequence"}, - {87, "ENOATTR", "attribute not found"}, - {88, "EDOOFUS", "programming error"}, - {89, "EBADMSG", "bad message"}, - {90, "EMULTIHOP", "multihop attempted"}, - {91, "ENOLINK", "link has been severed"}, - {92, "EPROTO", "protocol error"}, - {93, "ENOTCAPABLE", "capabilities insufficient"}, - {94, "ECAPMODE", "not permitted in capability mode"}, - {95, "ENOTRECOVERABLE", "state not recoverable"}, - {96, "EOWNERDEAD", "previous owner died"}, - {97, "EINTEGRITY", "integrity check failed"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, - {6, "SIGIOT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGURG", "urgent I/O condition"}, - {17, "SIGSTOP", "suspended (signal)"}, - {18, "SIGTSTP", "suspended"}, - {19, "SIGCONT", "continued"}, - {20, "SIGCHLD", "child exited"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGIO", "I/O possible"}, - {24, "SIGXCPU", "cputime limit exceeded"}, - {25, "SIGXFSZ", "filesize limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window size changes"}, - {29, "SIGINFO", "information request"}, - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, - {32, "SIGTHR", "unknown signal"}, - {33, "SIGLIBRT", "unknown signal"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go deleted file mode 100644 index 777b69d..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go +++ /dev/null @@ -1,2034 +0,0 @@ -// mkerrors.sh -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm && freebsd -// +build arm,freebsd - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- _const.go - -package unix - -import "syscall" - -const ( - AF_APPLETALK = 0x10 - AF_ARP = 0x23 - AF_ATM = 0x1e - AF_BLUETOOTH = 0x24 - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1a - AF_ECMA = 0x8 - AF_HYLINK = 0xf - AF_IEEE80211 = 0x25 - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x1c - AF_INET6_SDP = 0x2a - AF_INET_SDP = 0x28 - AF_IPX = 0x17 - AF_ISDN = 0x1a - AF_ISO = 0x7 - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x2a - AF_NATM = 0x1d - AF_NETBIOS = 0x6 - AF_NETGRAPH = 0x20 - AF_OSI = 0x7 - AF_PUP = 0x4 - AF_ROUTE = 0x11 - AF_SCLUSTER = 0x22 - AF_SIP = 0x18 - AF_SLOW = 0x21 - AF_SNA = 0xb - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - AF_VENDOR00 = 0x27 - AF_VENDOR01 = 0x29 - AF_VENDOR02 = 0x2b - AF_VENDOR03 = 0x2d - AF_VENDOR04 = 0x2f - AF_VENDOR05 = 0x31 - AF_VENDOR06 = 0x33 - AF_VENDOR07 = 0x35 - AF_VENDOR08 = 0x37 - AF_VENDOR09 = 0x39 - AF_VENDOR10 = 0x3b - AF_VENDOR11 = 0x3d - AF_VENDOR12 = 0x3f - AF_VENDOR13 = 0x41 - AF_VENDOR14 = 0x43 - AF_VENDOR15 = 0x45 - AF_VENDOR16 = 0x47 - AF_VENDOR17 = 0x49 - AF_VENDOR18 = 0x4b - AF_VENDOR19 = 0x4d - AF_VENDOR20 = 0x4f - AF_VENDOR21 = 0x51 - AF_VENDOR22 = 0x53 - AF_VENDOR23 = 0x55 - AF_VENDOR24 = 0x57 - AF_VENDOR25 = 0x59 - AF_VENDOR26 = 0x5b - AF_VENDOR27 = 0x5d - AF_VENDOR28 = 0x5f - AF_VENDOR29 = 0x61 - AF_VENDOR30 = 0x63 - AF_VENDOR31 = 0x65 - AF_VENDOR32 = 0x67 - AF_VENDOR33 = 0x69 - AF_VENDOR34 = 0x6b - AF_VENDOR35 = 0x6d - AF_VENDOR36 = 0x6f - AF_VENDOR37 = 0x71 - AF_VENDOR38 = 0x73 - AF_VENDOR39 = 0x75 - AF_VENDOR40 = 0x77 - AF_VENDOR41 = 0x79 - AF_VENDOR42 = 0x7b - AF_VENDOR43 = 0x7d - AF_VENDOR44 = 0x7f - AF_VENDOR45 = 0x81 - AF_VENDOR46 = 0x83 - AF_VENDOR47 = 0x85 - ALTWERASE = 0x200 - B0 = 0x0 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B230400 = 0x38400 - B2400 = 0x960 - B28800 = 0x7080 - B300 = 0x12c - B38400 = 0x9600 - B460800 = 0x70800 - B4800 = 0x12c0 - B50 = 0x32 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B921600 = 0xe1000 - B9600 = 0x2580 - BIOCFEEDBACK = 0x8004427c - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDIRECTION = 0x40044276 - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc0084279 - BIOCGETBUFMODE = 0x4004427d - BIOCGETIF = 0x4020426b - BIOCGETZMAX = 0x4004427f - BIOCGHDRCMPLT = 0x40044274 - BIOCGRSIG = 0x40044272 - BIOCGRTIMEOUT = 0x4010426e - BIOCGSEESENT = 0x40044276 - BIOCGSTATS = 0x4008426f - BIOCGTSTAMP = 0x40044283 - BIOCIMMEDIATE = 0x80044270 - BIOCLOCK = 0x2000427a - BIOCPROMISC = 0x20004269 - BIOCROTZBUF = 0x400c4280 - BIOCSBLEN = 0xc0044266 - BIOCSDIRECTION = 0x80044277 - BIOCSDLT = 0x80044278 - BIOCSETBUFMODE = 0x8004427e - BIOCSETF = 0x80084267 - BIOCSETFNR = 0x80084282 - BIOCSETIF = 0x8020426c - BIOCSETVLANPCP = 0x80044285 - BIOCSETWF = 0x8008427b - BIOCSETZBUF = 0x800c4281 - BIOCSHDRCMPLT = 0x80044275 - BIOCSRSIG = 0x80044273 - BIOCSRTIMEOUT = 0x8010426d - BIOCSSEESENT = 0x80044277 - BIOCSTSTAMP = 0x80044284 - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x4 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_BUFMODE_BUFFER = 0x1 - BPF_BUFMODE_ZBUF = 0x2 - BPF_DIV = 0x30 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x80000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MOD = 0x90 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_T_BINTIME = 0x2 - BPF_T_BINTIME_FAST = 0x102 - BPF_T_BINTIME_MONOTONIC = 0x202 - BPF_T_BINTIME_MONOTONIC_FAST = 0x302 - BPF_T_FAST = 0x100 - BPF_T_FLAG_MASK = 0x300 - BPF_T_FORMAT_MASK = 0x3 - BPF_T_MICROTIME = 0x0 - BPF_T_MICROTIME_FAST = 0x100 - BPF_T_MICROTIME_MONOTONIC = 0x200 - BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 - BPF_T_MONOTONIC = 0x200 - BPF_T_MONOTONIC_FAST = 0x300 - BPF_T_NANOTIME = 0x1 - BPF_T_NANOTIME_FAST = 0x101 - BPF_T_NANOTIME_MONOTONIC = 0x201 - BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 - BPF_T_NONE = 0x3 - BPF_T_NORMAL = 0x0 - BPF_W = 0x0 - BPF_X = 0x8 - BPF_XOR = 0xa0 - BRKINT = 0x2 - CAP_ACCEPT = 0x200000020000000 - CAP_ACL_CHECK = 0x400000000010000 - CAP_ACL_DELETE = 0x400000000020000 - CAP_ACL_GET = 0x400000000040000 - CAP_ACL_SET = 0x400000000080000 - CAP_ALL0 = 0x20007ffffffffff - CAP_ALL1 = 0x4000000001fffff - CAP_BIND = 0x200000040000000 - CAP_BINDAT = 0x200008000000400 - CAP_CHFLAGSAT = 0x200000000001400 - CAP_CONNECT = 0x200000080000000 - CAP_CONNECTAT = 0x200010000000400 - CAP_CREATE = 0x200000000000040 - CAP_EVENT = 0x400000000000020 - CAP_EXTATTR_DELETE = 0x400000000001000 - CAP_EXTATTR_GET = 0x400000000002000 - CAP_EXTATTR_LIST = 0x400000000004000 - CAP_EXTATTR_SET = 0x400000000008000 - CAP_FCHDIR = 0x200000000000800 - CAP_FCHFLAGS = 0x200000000001000 - CAP_FCHMOD = 0x200000000002000 - CAP_FCHMODAT = 0x200000000002400 - CAP_FCHOWN = 0x200000000004000 - CAP_FCHOWNAT = 0x200000000004400 - CAP_FCNTL = 0x200000000008000 - CAP_FCNTL_ALL = 0x78 - CAP_FCNTL_GETFL = 0x8 - CAP_FCNTL_GETOWN = 0x20 - CAP_FCNTL_SETFL = 0x10 - CAP_FCNTL_SETOWN = 0x40 - CAP_FEXECVE = 0x200000000000080 - CAP_FLOCK = 0x200000000010000 - CAP_FPATHCONF = 0x200000000020000 - CAP_FSCK = 0x200000000040000 - CAP_FSTAT = 0x200000000080000 - CAP_FSTATAT = 0x200000000080400 - CAP_FSTATFS = 0x200000000100000 - CAP_FSYNC = 0x200000000000100 - CAP_FTRUNCATE = 0x200000000000200 - CAP_FUTIMES = 0x200000000200000 - CAP_FUTIMESAT = 0x200000000200400 - CAP_GETPEERNAME = 0x200000100000000 - CAP_GETSOCKNAME = 0x200000200000000 - CAP_GETSOCKOPT = 0x200000400000000 - CAP_IOCTL = 0x400000000000080 - CAP_IOCTLS_ALL = 0x7fffffff - CAP_KQUEUE = 0x400000000100040 - CAP_KQUEUE_CHANGE = 0x400000000100000 - CAP_KQUEUE_EVENT = 0x400000000000040 - CAP_LINKAT_SOURCE = 0x200020000000400 - CAP_LINKAT_TARGET = 0x200000000400400 - CAP_LISTEN = 0x200000800000000 - CAP_LOOKUP = 0x200000000000400 - CAP_MAC_GET = 0x400000000000001 - CAP_MAC_SET = 0x400000000000002 - CAP_MKDIRAT = 0x200000000800400 - CAP_MKFIFOAT = 0x200000001000400 - CAP_MKNODAT = 0x200000002000400 - CAP_MMAP = 0x200000000000010 - CAP_MMAP_R = 0x20000000000001d - CAP_MMAP_RW = 0x20000000000001f - CAP_MMAP_RWX = 0x20000000000003f - CAP_MMAP_RX = 0x20000000000003d - CAP_MMAP_W = 0x20000000000001e - CAP_MMAP_WX = 0x20000000000003e - CAP_MMAP_X = 0x20000000000003c - CAP_PDGETPID = 0x400000000000200 - CAP_PDKILL = 0x400000000000800 - CAP_PDWAIT = 0x400000000000400 - CAP_PEELOFF = 0x200001000000000 - CAP_POLL_EVENT = 0x400000000000020 - CAP_PREAD = 0x20000000000000d - CAP_PWRITE = 0x20000000000000e - CAP_READ = 0x200000000000001 - CAP_RECV = 0x200000000000001 - CAP_RENAMEAT_SOURCE = 0x200000004000400 - CAP_RENAMEAT_TARGET = 0x200040000000400 - CAP_RIGHTS_VERSION = 0x0 - CAP_RIGHTS_VERSION_00 = 0x0 - CAP_SEEK = 0x20000000000000c - CAP_SEEK_TELL = 0x200000000000004 - CAP_SEM_GETVALUE = 0x400000000000004 - CAP_SEM_POST = 0x400000000000008 - CAP_SEM_WAIT = 0x400000000000010 - CAP_SEND = 0x200000000000002 - CAP_SETSOCKOPT = 0x200002000000000 - CAP_SHUTDOWN = 0x200004000000000 - CAP_SOCK_CLIENT = 0x200007780000003 - CAP_SOCK_SERVER = 0x200007f60000003 - CAP_SYMLINKAT = 0x200000008000400 - CAP_TTYHOOK = 0x400000000000100 - CAP_UNLINKAT = 0x200000010000400 - CAP_UNUSED0_44 = 0x200080000000000 - CAP_UNUSED0_57 = 0x300000000000000 - CAP_UNUSED1_22 = 0x400000000200000 - CAP_UNUSED1_57 = 0x500000000000000 - CAP_WRITE = 0x200000000000002 - CFLUSH = 0xf - CLOCAL = 0x8000 - CLOCK_MONOTONIC = 0x4 - CLOCK_MONOTONIC_FAST = 0xc - CLOCK_MONOTONIC_PRECISE = 0xb - CLOCK_PROCESS_CPUTIME_ID = 0xf - CLOCK_PROF = 0x2 - CLOCK_REALTIME = 0x0 - CLOCK_REALTIME_FAST = 0xa - CLOCK_REALTIME_PRECISE = 0x9 - CLOCK_SECOND = 0xd - CLOCK_THREAD_CPUTIME_ID = 0xe - CLOCK_UPTIME = 0x5 - CLOCK_UPTIME_FAST = 0x8 - CLOCK_UPTIME_PRECISE = 0x7 - CLOCK_VIRTUAL = 0x1 - CPUSTATES = 0x5 - CP_IDLE = 0x4 - CP_INTR = 0x3 - CP_NICE = 0x1 - CP_SYS = 0x2 - CP_USER = 0x0 - CREAD = 0x800 - CRTSCTS = 0x30000 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0x14 - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTL_HW = 0x6 - CTL_KERN = 0x1 - CTL_MAXNAME = 0x18 - CTL_NET = 0x4 - DIOCGATTR = 0xc148648e - DIOCGDELETE = 0x80106488 - DIOCGFLUSH = 0x20006487 - DIOCGFRONTSTUFF = 0x40086486 - DIOCGFWHEADS = 0x40046483 - DIOCGFWSECTORS = 0x40046482 - DIOCGIDENT = 0x41006489 - DIOCGMEDIASIZE = 0x40086481 - DIOCGPHYSPATH = 0x4400648d - DIOCGPROVIDERNAME = 0x4400648a - DIOCGSECTORSIZE = 0x40046480 - DIOCGSTRIPEOFFSET = 0x4008648c - DIOCGSTRIPESIZE = 0x4008648b - DIOCSKERNELDUMP = 0x804c6490 - DIOCSKERNELDUMP_FREEBSD11 = 0x80046485 - DIOCZONECMD = 0xc078648f - DLT_A429 = 0xb8 - DLT_A653_ICM = 0xb9 - DLT_AIRONET_HEADER = 0x78 - DLT_AOS = 0xde - DLT_APPLE_IP_OVER_IEEE1394 = 0x8a - DLT_ARCNET = 0x7 - DLT_ARCNET_LINUX = 0x81 - DLT_ATM_CLIP = 0x13 - DLT_ATM_RFC1483 = 0xb - DLT_AURORA = 0x7e - DLT_AX25 = 0x3 - DLT_AX25_KISS = 0xca - DLT_BACNET_MS_TP = 0xa5 - DLT_BLUETOOTH_BREDR_BB = 0xff - DLT_BLUETOOTH_HCI_H4 = 0xbb - DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 - DLT_BLUETOOTH_LE_LL = 0xfb - DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 - DLT_BLUETOOTH_LINUX_MONITOR = 0xfe - DLT_CAN20B = 0xbe - DLT_CAN_SOCKETCAN = 0xe3 - DLT_CHAOS = 0x5 - DLT_CHDLC = 0x68 - DLT_CISCO_IOS = 0x76 - DLT_CLASS_NETBSD_RAWAF = 0x2240000 - DLT_C_HDLC = 0x68 - DLT_C_HDLC_WITH_DIR = 0xcd - DLT_DBUS = 0xe7 - DLT_DECT = 0xdd - DLT_DISPLAYPORT_AUX = 0x113 - DLT_DOCSIS = 0x8f - DLT_DOCSIS31_XRA31 = 0x111 - DLT_DVB_CI = 0xeb - DLT_ECONET = 0x73 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0x6d - DLT_EPON = 0x103 - DLT_ERF = 0xc5 - DLT_ERF_ETH = 0xaf - DLT_ERF_POS = 0xb0 - DLT_ETHERNET_MPACKET = 0x112 - DLT_FC_2 = 0xe0 - DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 - DLT_FDDI = 0xa - DLT_FLEXRAY = 0xd2 - DLT_FRELAY = 0x6b - DLT_FRELAY_WITH_DIR = 0xce - DLT_GCOM_SERIAL = 0xad - DLT_GCOM_T1E1 = 0xac - DLT_GPF_F = 0xab - DLT_GPF_T = 0xaa - DLT_GPRS_LLC = 0xa9 - DLT_GSMTAP_ABIS = 0xda - DLT_GSMTAP_UM = 0xd9 - DLT_IBM_SN = 0x92 - DLT_IBM_SP = 0x91 - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_IEEE802_11_RADIO_AVS = 0xa3 - DLT_IEEE802_15_4 = 0xc3 - DLT_IEEE802_15_4_LINUX = 0xbf - DLT_IEEE802_15_4_NOFCS = 0xe6 - DLT_IEEE802_15_4_NONASK_PHY = 0xd7 - DLT_IEEE802_16_MAC_CPS = 0xbc - DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 - DLT_INFINIBAND = 0xf7 - DLT_IPFILTER = 0x74 - DLT_IPMB_KONTRON = 0xc7 - DLT_IPMB_LINUX = 0xd1 - DLT_IPMI_HPM_2 = 0x104 - DLT_IPNET = 0xe2 - DLT_IPOIB = 0xf2 - DLT_IPV4 = 0xe4 - DLT_IPV6 = 0xe5 - DLT_IP_OVER_FC = 0x7a - DLT_ISO_14443 = 0x108 - DLT_JUNIPER_ATM1 = 0x89 - DLT_JUNIPER_ATM2 = 0x87 - DLT_JUNIPER_ATM_CEMIC = 0xee - DLT_JUNIPER_CHDLC = 0xb5 - DLT_JUNIPER_ES = 0x84 - DLT_JUNIPER_ETHER = 0xb2 - DLT_JUNIPER_FIBRECHANNEL = 0xea - DLT_JUNIPER_FRELAY = 0xb4 - DLT_JUNIPER_GGSN = 0x85 - DLT_JUNIPER_ISM = 0xc2 - DLT_JUNIPER_MFR = 0x86 - DLT_JUNIPER_MLFR = 0x83 - DLT_JUNIPER_MLPPP = 0x82 - DLT_JUNIPER_MONITOR = 0xa4 - DLT_JUNIPER_PIC_PEER = 0xae - DLT_JUNIPER_PPP = 0xb3 - DLT_JUNIPER_PPPOE = 0xa7 - DLT_JUNIPER_PPPOE_ATM = 0xa8 - DLT_JUNIPER_SERVICES = 0x88 - DLT_JUNIPER_SRX_E2E = 0xe9 - DLT_JUNIPER_ST = 0xc8 - DLT_JUNIPER_VP = 0xb7 - DLT_JUNIPER_VS = 0xe8 - DLT_LAPB_WITH_DIR = 0xcf - DLT_LAPD = 0xcb - DLT_LIN = 0xd4 - DLT_LINUX_EVDEV = 0xd8 - DLT_LINUX_IRDA = 0x90 - DLT_LINUX_LAPD = 0xb1 - DLT_LINUX_PPP_WITHDIRECTION = 0xa6 - DLT_LINUX_SLL = 0x71 - DLT_LINUX_SLL2 = 0x114 - DLT_LOOP = 0x6c - DLT_LORATAP = 0x10e - DLT_LTALK = 0x72 - DLT_MATCHING_MAX = 0x114 - DLT_MATCHING_MIN = 0x68 - DLT_MFR = 0xb6 - DLT_MOST = 0xd3 - DLT_MPEG_2_TS = 0xf3 - DLT_MPLS = 0xdb - DLT_MTP2 = 0x8c - DLT_MTP2_WITH_PHDR = 0x8b - DLT_MTP3 = 0x8d - DLT_MUX27010 = 0xec - DLT_NETANALYZER = 0xf0 - DLT_NETANALYZER_TRANSPARENT = 0xf1 - DLT_NETLINK = 0xfd - DLT_NFC_LLCP = 0xf5 - DLT_NFLOG = 0xef - DLT_NG40 = 0xf4 - DLT_NORDIC_BLE = 0x110 - DLT_NULL = 0x0 - DLT_OPENFLOW = 0x10b - DLT_PCI_EXP = 0x7d - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x79 - DLT_PKTAP = 0x102 - DLT_PPI = 0xc0 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0xe - DLT_PPP_ETHER = 0x33 - DLT_PPP_PPPD = 0xa6 - DLT_PPP_SERIAL = 0x32 - DLT_PPP_WITH_DIR = 0xcc - DLT_PPP_WITH_DIRECTION = 0xa6 - DLT_PRISM_HEADER = 0x77 - DLT_PROFIBUS_DL = 0x101 - DLT_PRONET = 0x4 - DLT_RAIF1 = 0xc6 - DLT_RAW = 0xc - DLT_RDS = 0x109 - DLT_REDBACK_SMARTEDGE = 0x20 - DLT_RIO = 0x7c - DLT_RTAC_SERIAL = 0xfa - DLT_SCCP = 0x8e - DLT_SCTP = 0xf8 - DLT_SDLC = 0x10c - DLT_SITA = 0xc4 - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xd - DLT_STANAG_5066_D_PDU = 0xed - DLT_SUNATM = 0x7b - DLT_SYMANTEC_FIREWALL = 0x63 - DLT_TI_LLN_SNIFFER = 0x10d - DLT_TZSP = 0x80 - DLT_USB = 0xba - DLT_USBPCAP = 0xf9 - DLT_USB_DARWIN = 0x10a - DLT_USB_FREEBSD = 0xba - DLT_USB_LINUX = 0xbd - DLT_USB_LINUX_MMAPPED = 0xdc - DLT_USER0 = 0x93 - DLT_USER1 = 0x94 - DLT_USER10 = 0x9d - DLT_USER11 = 0x9e - DLT_USER12 = 0x9f - DLT_USER13 = 0xa0 - DLT_USER14 = 0xa1 - DLT_USER15 = 0xa2 - DLT_USER2 = 0x95 - DLT_USER3 = 0x96 - DLT_USER4 = 0x97 - DLT_USER5 = 0x98 - DLT_USER6 = 0x99 - DLT_USER7 = 0x9a - DLT_USER8 = 0x9b - DLT_USER9 = 0x9c - DLT_VSOCK = 0x10f - DLT_WATTSTOPPER_DLM = 0x107 - DLT_WIHART = 0xdf - DLT_WIRESHARK_UPPER_PDU = 0xfc - DLT_X2E_SERIAL = 0xd5 - DLT_X2E_XORAYA = 0xd6 - DLT_ZWAVE_R1_R2 = 0x105 - DLT_ZWAVE_R3 = 0x106 - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - DT_WHT = 0xe - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EVFILT_AIO = -0x3 - EVFILT_EMPTY = -0xd - EVFILT_FS = -0x9 - EVFILT_LIO = -0xa - EVFILT_PROC = -0x5 - EVFILT_PROCDESC = -0x8 - EVFILT_READ = -0x1 - EVFILT_SENDFILE = -0xc - EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0xd - EVFILT_TIMER = -0x7 - EVFILT_USER = -0xb - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 - EVNAMEMAP_NAME_SIZE = 0x40 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_DISPATCH = 0x80 - EV_DROP = 0x1000 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG1 = 0x2000 - EV_FLAG2 = 0x4000 - EV_FORCEONESHOT = 0x100 - EV_ONESHOT = 0x10 - EV_RECEIPT = 0x40 - EV_SYSFLAGS = 0xf000 - EXTA = 0x4b00 - EXTATTR_MAXNAMELEN = 0xff - EXTATTR_NAMESPACE_EMPTY = 0x0 - EXTATTR_NAMESPACE_SYSTEM = 0x2 - EXTATTR_NAMESPACE_USER = 0x1 - EXTB = 0x9600 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x400 - FLUSHO = 0x800000 - F_CANCEL = 0x5 - F_DUP2FD = 0xa - F_DUP2FD_CLOEXEC = 0x12 - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0x11 - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0xb - F_GETOWN = 0x5 - F_OGETLK = 0x7 - F_OK = 0x0 - F_OSETLK = 0x8 - F_OSETLKW = 0x9 - F_RDAHEAD = 0x10 - F_RDLCK = 0x1 - F_READAHEAD = 0xf - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0xc - F_SETLKW = 0xd - F_SETLK_REMOTE = 0xe - F_SETOWN = 0x6 - F_UNLCK = 0x2 - F_UNLCKSYS = 0x4 - F_WRLCK = 0x3 - HUPCL = 0x4000 - HW_MACHINE = 0x1 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFAN_ARRIVAL = 0x0 - IFAN_DEPARTURE = 0x1 - IFCAP_WOL_MAGIC = 0x2000 - IFF_ALLMULTI = 0x200 - IFF_ALTPHYS = 0x4000 - IFF_BROADCAST = 0x2 - IFF_CANTCHANGE = 0x218f52 - IFF_CANTCONFIG = 0x10000 - IFF_DEBUG = 0x4 - IFF_DRV_OACTIVE = 0x400 - IFF_DRV_RUNNING = 0x40 - IFF_DYING = 0x200000 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MONITOR = 0x40000 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_NOGROUP = 0x800000 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PPROMISC = 0x20000 - IFF_PROMISC = 0x100 - IFF_RENAMING = 0x400000 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_STATICARP = 0x80000 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_BRIDGE = 0xd1 - IFT_CARP = 0xf8 - IFT_IEEE1394 = 0x90 - IFT_INFINIBAND = 0xc7 - IFT_L2VLAN = 0x87 - IFT_L3IPVLAN = 0x88 - IFT_PPP = 0x17 - IFT_PROPVIRTUAL = 0x35 - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LOOPBACKNET = 0x7f - IN_RFC3021_MASK = 0xfffffffe - IPPROTO_3PC = 0x22 - IPPROTO_ADFS = 0x44 - IPPROTO_AH = 0x33 - IPPROTO_AHIP = 0x3d - IPPROTO_APES = 0x63 - IPPROTO_ARGUS = 0xd - IPPROTO_AX25 = 0x5d - IPPROTO_BHA = 0x31 - IPPROTO_BLT = 0x1e - IPPROTO_BRSATMON = 0x4c - IPPROTO_CARP = 0x70 - IPPROTO_CFTP = 0x3e - IPPROTO_CHAOS = 0x10 - IPPROTO_CMTP = 0x26 - IPPROTO_CPHB = 0x49 - IPPROTO_CPNX = 0x48 - IPPROTO_DCCP = 0x21 - IPPROTO_DDP = 0x25 - IPPROTO_DGP = 0x56 - IPPROTO_DIVERT = 0x102 - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_EMCON = 0xe - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GMTP = 0x64 - IPPROTO_GRE = 0x2f - IPPROTO_HELLO = 0x3f - IPPROTO_HIP = 0x8b - IPPROTO_HMP = 0x14 - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IDPR = 0x23 - IPPROTO_IDRP = 0x2d - IPPROTO_IGMP = 0x2 - IPPROTO_IGP = 0x55 - IPPROTO_IGRP = 0x58 - IPPROTO_IL = 0x28 - IPPROTO_INLSP = 0x34 - IPPROTO_INP = 0x20 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPCV = 0x47 - IPPROTO_IPEIP = 0x5e - IPPROTO_IPIP = 0x4 - IPPROTO_IPPC = 0x43 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_IRTP = 0x1c - IPPROTO_KRYPTOLAN = 0x41 - IPPROTO_LARP = 0x5b - IPPROTO_LEAF1 = 0x19 - IPPROTO_LEAF2 = 0x1a - IPPROTO_MAX = 0x100 - IPPROTO_MEAS = 0x13 - IPPROTO_MH = 0x87 - IPPROTO_MHRP = 0x30 - IPPROTO_MICP = 0x5f - IPPROTO_MOBILE = 0x37 - IPPROTO_MPLS = 0x89 - IPPROTO_MTP = 0x5c - IPPROTO_MUX = 0x12 - IPPROTO_ND = 0x4d - IPPROTO_NHRP = 0x36 - IPPROTO_NONE = 0x3b - IPPROTO_NSP = 0x1f - IPPROTO_NVPII = 0xb - IPPROTO_OLD_DIVERT = 0xfe - IPPROTO_OSPFIGP = 0x59 - IPPROTO_PFSYNC = 0xf0 - IPPROTO_PGM = 0x71 - IPPROTO_PIGP = 0x9 - IPPROTO_PIM = 0x67 - IPPROTO_PRM = 0x15 - IPPROTO_PUP = 0xc - IPPROTO_PVP = 0x4b - IPPROTO_RAW = 0xff - IPPROTO_RCCMON = 0xa - IPPROTO_RDP = 0x1b - IPPROTO_RESERVED_253 = 0xfd - IPPROTO_RESERVED_254 = 0xfe - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_RVD = 0x42 - IPPROTO_SATEXPAK = 0x40 - IPPROTO_SATMON = 0x45 - IPPROTO_SCCSP = 0x60 - IPPROTO_SCTP = 0x84 - IPPROTO_SDRP = 0x2a - IPPROTO_SEND = 0x103 - IPPROTO_SHIM6 = 0x8c - IPPROTO_SKIP = 0x39 - IPPROTO_SPACER = 0x7fff - IPPROTO_SRPC = 0x5a - IPPROTO_ST = 0x7 - IPPROTO_SVMTP = 0x52 - IPPROTO_SWIPE = 0x35 - IPPROTO_TCF = 0x57 - IPPROTO_TCP = 0x6 - IPPROTO_TLSP = 0x38 - IPPROTO_TP = 0x1d - IPPROTO_TPXX = 0x27 - IPPROTO_TRUNK1 = 0x17 - IPPROTO_TRUNK2 = 0x18 - IPPROTO_TTP = 0x54 - IPPROTO_UDP = 0x11 - IPPROTO_UDPLITE = 0x88 - IPPROTO_VINES = 0x53 - IPPROTO_VISA = 0x46 - IPPROTO_VMTP = 0x51 - IPPROTO_WBEXPAK = 0x4f - IPPROTO_WBMON = 0x4e - IPPROTO_WSN = 0x4a - IPPROTO_XNET = 0xf - IPPROTO_XTP = 0x24 - IPV6_AUTOFLOWLABEL = 0x3b - IPV6_BINDANY = 0x40 - IPV6_BINDMULTI = 0x41 - IPV6_BINDV6ONLY = 0x1b - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_DONTFRAG = 0x3e - IPV6_DSTOPTS = 0x32 - IPV6_FLOWID = 0x43 - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_LEN = 0x14 - IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FLOWTYPE = 0x44 - IPV6_FRAGTTL = 0x78 - IPV6_FW_ADD = 0x1e - IPV6_FW_DEL = 0x1f - IPV6_FW_FLUSH = 0x20 - IPV6_FW_GET = 0x22 - IPV6_FW_ZERO = 0x21 - IPV6_HLIMDEC = 0x1 - IPV6_HOPLIMIT = 0x2f - IPV6_HOPOPTS = 0x31 - IPV6_IPSEC_POLICY = 0x1c - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXOPTHDR = 0x800 - IPV6_MAXPACKET = 0xffff - IPV6_MAX_GROUP_SRC_FILTER = 0x200 - IPV6_MAX_MEMBERSHIPS = 0xfff - IPV6_MAX_SOCK_SRC_FILTER = 0x80 - IPV6_MMTU = 0x500 - IPV6_MSFILTER = 0x4a - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_ORIGDSTADDR = 0x48 - IPV6_PATHMTU = 0x2c - IPV6_PKTINFO = 0x2e - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_PREFER_TEMPADDR = 0x3f - IPV6_RECVDSTOPTS = 0x28 - IPV6_RECVFLOWID = 0x46 - IPV6_RECVHOPLIMIT = 0x25 - IPV6_RECVHOPOPTS = 0x27 - IPV6_RECVORIGDSTADDR = 0x48 - IPV6_RECVPATHMTU = 0x2b - IPV6_RECVPKTINFO = 0x24 - IPV6_RECVRSSBUCKETID = 0x47 - IPV6_RECVRTHDR = 0x26 - IPV6_RECVTCLASS = 0x39 - IPV6_RSSBUCKETID = 0x45 - IPV6_RSS_LISTEN_BUCKET = 0x42 - IPV6_RTHDR = 0x33 - IPV6_RTHDRDSTOPTS = 0x23 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x3d - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2a - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IPV6_VLAN_PCP = 0x4b - IP_ADD_MEMBERSHIP = 0xc - IP_ADD_SOURCE_MEMBERSHIP = 0x46 - IP_BINDANY = 0x18 - IP_BINDMULTI = 0x19 - IP_BLOCK_SOURCE = 0x48 - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DONTFRAG = 0x43 - IP_DROP_MEMBERSHIP = 0xd - IP_DROP_SOURCE_MEMBERSHIP = 0x47 - IP_DUMMYNET3 = 0x31 - IP_DUMMYNET_CONFIGURE = 0x3c - IP_DUMMYNET_DEL = 0x3d - IP_DUMMYNET_FLUSH = 0x3e - IP_DUMMYNET_GET = 0x40 - IP_FLOWID = 0x5a - IP_FLOWTYPE = 0x5b - IP_FW3 = 0x30 - IP_FW_ADD = 0x32 - IP_FW_DEL = 0x33 - IP_FW_FLUSH = 0x34 - IP_FW_GET = 0x36 - IP_FW_NAT_CFG = 0x38 - IP_FW_NAT_DEL = 0x39 - IP_FW_NAT_GET_CONFIG = 0x3a - IP_FW_NAT_GET_LOG = 0x3b - IP_FW_RESETLOG = 0x37 - IP_FW_TABLE_ADD = 0x28 - IP_FW_TABLE_DEL = 0x29 - IP_FW_TABLE_FLUSH = 0x2a - IP_FW_TABLE_GETSIZE = 0x2b - IP_FW_TABLE_LIST = 0x2c - IP_FW_ZERO = 0x35 - IP_HDRINCL = 0x2 - IP_IPSEC_POLICY = 0x15 - IP_MAXPACKET = 0xffff - IP_MAX_GROUP_SRC_FILTER = 0x200 - IP_MAX_MEMBERSHIPS = 0xfff - IP_MAX_SOCK_MUTE_FILTER = 0x80 - IP_MAX_SOCK_SRC_FILTER = 0x80 - IP_MF = 0x2000 - IP_MINTTL = 0x42 - IP_MSFILTER = 0x4a - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_MULTICAST_VIF = 0xe - IP_OFFMASK = 0x1fff - IP_ONESBCAST = 0x17 - IP_OPTIONS = 0x1 - IP_ORIGDSTADDR = 0x1b - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVFLOWID = 0x5d - IP_RECVIF = 0x14 - IP_RECVOPTS = 0x5 - IP_RECVORIGDSTADDR = 0x1b - IP_RECVRETOPTS = 0x6 - IP_RECVRSSBUCKETID = 0x5e - IP_RECVTOS = 0x44 - IP_RECVTTL = 0x41 - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_RSSBUCKETID = 0x5c - IP_RSS_LISTEN_BUCKET = 0x1a - IP_RSVP_OFF = 0x10 - IP_RSVP_ON = 0xf - IP_RSVP_VIF_OFF = 0x12 - IP_RSVP_VIF_ON = 0x11 - IP_SENDSRCADDR = 0x7 - IP_TOS = 0x3 - IP_TTL = 0x4 - IP_UNBLOCK_SOURCE = 0x49 - IP_VLAN_PCP = 0x4b - ISIG = 0x80 - ISTRIP = 0x20 - ITIMER_PROF = 0x2 - ITIMER_REAL = 0x0 - ITIMER_VIRTUAL = 0x1 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - KERN_HOSTNAME = 0xa - KERN_OSRELEASE = 0x2 - KERN_OSTYPE = 0x1 - KERN_VERSION = 0x4 - LOCAL_CONNWAIT = 0x4 - LOCAL_CREDS = 0x2 - LOCAL_PEERCRED = 0x1 - LOCAL_VENDOR = 0x80000000 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_AUTOSYNC = 0x7 - MADV_CORE = 0x9 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x5 - MADV_NOCORE = 0x8 - MADV_NORMAL = 0x0 - MADV_NOSYNC = 0x6 - MADV_PROTECT = 0xa - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_WILLNEED = 0x3 - MAP_ALIGNED_SUPER = 0x1000000 - MAP_ALIGNMENT_MASK = -0x1000000 - MAP_ALIGNMENT_SHIFT = 0x18 - MAP_ANON = 0x1000 - MAP_ANONYMOUS = 0x1000 - MAP_COPY = 0x2 - MAP_EXCL = 0x4000 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_GUARD = 0x2000 - MAP_HASSEMAPHORE = 0x200 - MAP_NOCORE = 0x20000 - MAP_NOSYNC = 0x800 - MAP_PREFAULT_READ = 0x40000 - MAP_PRIVATE = 0x2 - MAP_RESERVED0020 = 0x20 - MAP_RESERVED0040 = 0x40 - MAP_RESERVED0080 = 0x80 - MAP_RESERVED0100 = 0x100 - MAP_SHARED = 0x1 - MAP_STACK = 0x400 - MCAST_BLOCK_SOURCE = 0x54 - MCAST_EXCLUDE = 0x2 - MCAST_INCLUDE = 0x1 - MCAST_JOIN_GROUP = 0x50 - MCAST_JOIN_SOURCE_GROUP = 0x52 - MCAST_LEAVE_GROUP = 0x51 - MCAST_LEAVE_SOURCE_GROUP = 0x53 - MCAST_UNBLOCK_SOURCE = 0x55 - MCAST_UNDEFINED = 0x0 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MNT_ACLS = 0x8000000 - MNT_ASYNC = 0x40 - MNT_AUTOMOUNTED = 0x200000000 - MNT_BYFSID = 0x8000000 - MNT_CMDFLAGS = 0xd0f0000 - MNT_DEFEXPORTED = 0x200 - MNT_DELEXPORT = 0x20000 - MNT_EXKERB = 0x800 - MNT_EXPORTANON = 0x400 - MNT_EXPORTED = 0x100 - MNT_EXPUBLIC = 0x20000000 - MNT_EXRDONLY = 0x80 - MNT_FORCE = 0x80000 - MNT_GJOURNAL = 0x2000000 - MNT_IGNORE = 0x800000 - MNT_LAZY = 0x3 - MNT_LOCAL = 0x1000 - MNT_MULTILABEL = 0x4000000 - MNT_NFS4ACLS = 0x10 - MNT_NOATIME = 0x10000000 - MNT_NOCLUSTERR = 0x40000000 - MNT_NOCLUSTERW = 0x80000000 - MNT_NOEXEC = 0x4 - MNT_NONBUSY = 0x4000000 - MNT_NOSUID = 0x8 - MNT_NOSYMFOLLOW = 0x400000 - MNT_NOWAIT = 0x2 - MNT_QUOTA = 0x2000 - MNT_RDONLY = 0x1 - MNT_RELOAD = 0x40000 - MNT_ROOTFS = 0x4000 - MNT_SNAPSHOT = 0x1000000 - MNT_SOFTDEP = 0x200000 - MNT_SUIDDIR = 0x100000 - MNT_SUJ = 0x100000000 - MNT_SUSPEND = 0x4 - MNT_SYNCHRONOUS = 0x2 - MNT_UNION = 0x20 - MNT_UNTRUSTED = 0x800000000 - MNT_UPDATE = 0x10000 - MNT_UPDATEMASK = 0xad8d0807e - MNT_USER = 0x8000 - MNT_VERIFIED = 0x400000000 - MNT_VISFLAGMASK = 0xffef0ffff - MNT_WAIT = 0x1 - MSG_CMSG_CLOEXEC = 0x40000 - MSG_COMPAT = 0x8000 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOF = 0x100 - MSG_EOR = 0x8 - MSG_NBIO = 0x4000 - MSG_NOSIGNAL = 0x20000 - MSG_NOTIFICATION = 0x2000 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 - MSG_WAITFORONE = 0x80000 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x2 - MS_SYNC = 0x0 - NAME_MAX = 0xff - NET_RT_DUMP = 0x1 - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x3 - NET_RT_IFLISTL = 0x5 - NET_RT_IFMALIST = 0x4 - NFDBITS = 0x20 - NOFLSH = 0x80000000 - NOKERNINFO = 0x2000000 - NOTE_ABSTIME = 0x10 - NOTE_ATTRIB = 0x8 - NOTE_CHILD = 0x4 - NOTE_CLOSE = 0x100 - NOTE_CLOSE_WRITE = 0x200 - NOTE_DELETE = 0x1 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXTEND = 0x4 - NOTE_FFAND = 0x40000000 - NOTE_FFCOPY = 0xc0000000 - NOTE_FFCTRLMASK = 0xc0000000 - NOTE_FFLAGSMASK = 0xffffff - NOTE_FFNOP = 0x0 - NOTE_FFOR = 0x80000000 - NOTE_FILE_POLL = 0x2 - NOTE_FORK = 0x40000000 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_MSECONDS = 0x2 - NOTE_NSECONDS = 0x8 - NOTE_OPEN = 0x80 - NOTE_PCTRLMASK = 0xf0000000 - NOTE_PDATAMASK = 0xfffff - NOTE_READ = 0x400 - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_SECONDS = 0x1 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_TRIGGER = 0x1000000 - NOTE_USECONDS = 0x4 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - ONLCR = 0x2 - ONLRET = 0x40 - ONOCR = 0x20 - ONOEOT = 0x8 - OPOST = 0x1 - OXTABS = 0x4 - O_ACCMODE = 0x3 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x100000 - O_CREAT = 0x200 - O_DIRECT = 0x10000 - O_DIRECTORY = 0x20000 - O_EXCL = 0x800 - O_EXEC = 0x40000 - O_EXLOCK = 0x20 - O_FSYNC = 0x80 - O_NDELAY = 0x4 - O_NOCTTY = 0x8000 - O_NOFOLLOW = 0x100 - O_NONBLOCK = 0x4 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_RESOLVE_BENEATH = 0x800000 - O_SEARCH = 0x40000 - O_SHLOCK = 0x10 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_TTY_INIT = 0x80000 - O_VERIFY = 0x200000 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PIOD_READ_D = 0x1 - PIOD_READ_I = 0x3 - PIOD_WRITE_D = 0x2 - PIOD_WRITE_I = 0x4 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - PTRACE_DEFAULT = 0x1 - PTRACE_EXEC = 0x1 - PTRACE_FORK = 0x8 - PTRACE_LWP = 0x10 - PTRACE_SCE = 0x2 - PTRACE_SCX = 0x4 - PTRACE_SYSCALL = 0x6 - PTRACE_VFORK = 0x20 - PT_ATTACH = 0xa - PT_CLEARSTEP = 0x10 - PT_CONTINUE = 0x7 - PT_DETACH = 0xb - PT_FIRSTMACH = 0x40 - PT_FOLLOW_FORK = 0x17 - PT_GETDBREGS = 0x25 - PT_GETFPREGS = 0x23 - PT_GETLWPLIST = 0xf - PT_GETNUMLWPS = 0xe - PT_GETREGS = 0x21 - PT_GETVFPREGS = 0x40 - PT_GET_EVENT_MASK = 0x19 - PT_GET_SC_ARGS = 0x1b - PT_GET_SC_RET = 0x1c - PT_IO = 0xc - PT_KILL = 0x8 - PT_LWPINFO = 0xd - PT_LWP_EVENTS = 0x18 - PT_READ_D = 0x2 - PT_READ_I = 0x1 - PT_RESUME = 0x13 - PT_SETDBREGS = 0x26 - PT_SETFPREGS = 0x24 - PT_SETREGS = 0x22 - PT_SETSTEP = 0x11 - PT_SETVFPREGS = 0x41 - PT_SET_EVENT_MASK = 0x1a - PT_STEP = 0x9 - PT_SUSPEND = 0x12 - PT_SYSCALL = 0x16 - PT_TO_SCE = 0x14 - PT_TO_SCX = 0x15 - PT_TRACE_ME = 0x0 - PT_VM_ENTRY = 0x29 - PT_VM_TIMESTAMP = 0x28 - PT_WRITE_D = 0x5 - PT_WRITE_I = 0x4 - P_ZONEID = 0xc - RLIMIT_AS = 0xa - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_MEMLOCK = 0x6 - RLIMIT_NOFILE = 0x8 - RLIMIT_NPROC = 0x7 - RLIMIT_RSS = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_MAX = 0x8 - RTAX_NETMASK = 0x2 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_NETMASK = 0x4 - RTF_BLACKHOLE = 0x1000 - RTF_BROADCAST = 0x400000 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_FIXEDMTU = 0x80000 - RTF_FMASK = 0x1004d808 - RTF_GATEWAY = 0x2 - RTF_GWFLAG_COMPAT = 0x80000000 - RTF_HOST = 0x4 - RTF_LLDATA = 0x400 - RTF_LLINFO = 0x400 - RTF_LOCAL = 0x200000 - RTF_MODIFIED = 0x20 - RTF_MULTICAST = 0x800000 - RTF_PINNED = 0x100000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_PROTO3 = 0x40000 - RTF_REJECT = 0x8 - RTF_RNH_LOCKED = 0x40000000 - RTF_STATIC = 0x800 - RTF_STICKY = 0x10000000 - RTF_UP = 0x1 - RTF_XRESOLVE = 0x200 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_DELMADDR = 0x10 - RTM_GET = 0x4 - RTM_IEEE80211 = 0x12 - RTM_IFANNOUNCE = 0x11 - RTM_IFINFO = 0xe - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_NEWMADDR = 0xf - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RTV_WEIGHT = 0x100 - RT_ALL_FIBS = -0x1 - RT_BLACKHOLE = 0x40 - RT_DEFAULT_FIB = 0x0 - RT_HAS_GW = 0x80 - RT_HAS_HEADER = 0x10 - RT_HAS_HEADER_BIT = 0x4 - RT_L2_ME = 0x4 - RT_L2_ME_BIT = 0x2 - RT_LLE_CACHE = 0x100 - RT_MAY_LOOP = 0x8 - RT_MAY_LOOP_BIT = 0x3 - RT_REJECT = 0x20 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - RUSAGE_THREAD = 0x1 - SCM_BINTIME = 0x4 - SCM_CREDS = 0x3 - SCM_MONOTONIC = 0x6 - SCM_REALTIME = 0x5 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x2 - SCM_TIME_INFO = 0x7 - SEEK_CUR = 0x1 - SEEK_DATA = 0x3 - SEEK_END = 0x2 - SEEK_HOLE = 0x4 - SEEK_SET = 0x0 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80206931 - SIOCAIFADDR = 0x8040691a - SIOCAIFGROUP = 0x80246987 - SIOCATMARK = 0x40047307 - SIOCDELMULTI = 0x80206932 - SIOCDIFADDR = 0x80206919 - SIOCDIFGROUP = 0x80246989 - SIOCDIFPHYADDR = 0x80206949 - SIOCGDRVSPEC = 0xc01c697b - SIOCGETSGCNT = 0xc0147210 - SIOCGETVIFCNT = 0xc014720f - SIOCGHIWAT = 0x40047301 - SIOCGHWADDR = 0xc020693e - SIOCGI2C = 0xc020693d - SIOCGIFADDR = 0xc0206921 - SIOCGIFALIAS = 0xc044692d - SIOCGIFBRDADDR = 0xc0206923 - SIOCGIFCAP = 0xc020691f - SIOCGIFCONF = 0xc0086924 - SIOCGIFDESCR = 0xc020692a - SIOCGIFDOWNREASON = 0xc058699a - SIOCGIFDSTADDR = 0xc0206922 - SIOCGIFFIB = 0xc020695c - SIOCGIFFLAGS = 0xc0206911 - SIOCGIFGENERIC = 0xc020693a - SIOCGIFGMEMB = 0xc024698a - SIOCGIFGROUP = 0xc0246988 - SIOCGIFINDEX = 0xc0206920 - SIOCGIFMAC = 0xc0206926 - SIOCGIFMEDIA = 0xc0286938 - SIOCGIFMETRIC = 0xc0206917 - SIOCGIFMTU = 0xc0206933 - SIOCGIFNETMASK = 0xc0206925 - SIOCGIFPDSTADDR = 0xc0206948 - SIOCGIFPHYS = 0xc0206935 - SIOCGIFPSRCADDR = 0xc0206947 - SIOCGIFRSSHASH = 0xc0186997 - SIOCGIFRSSKEY = 0xc0946996 - SIOCGIFSTATUS = 0xc331693b - SIOCGIFXMEDIA = 0xc028698b - SIOCGLANPCP = 0xc0206998 - SIOCGLOWAT = 0x40047303 - SIOCGPGRP = 0x40047309 - SIOCGPRIVATE_0 = 0xc0206950 - SIOCGPRIVATE_1 = 0xc0206951 - SIOCGTUNFIB = 0xc020695e - SIOCIFCREATE = 0xc020697a - SIOCIFCREATE2 = 0xc020697c - SIOCIFDESTROY = 0x80206979 - SIOCIFGCLONERS = 0xc00c6978 - SIOCSDRVSPEC = 0x801c697b - SIOCSHIWAT = 0x80047300 - SIOCSIFADDR = 0x8020690c - SIOCSIFBRDADDR = 0x80206913 - SIOCSIFCAP = 0x8020691e - SIOCSIFDESCR = 0x80206929 - SIOCSIFDSTADDR = 0x8020690e - SIOCSIFFIB = 0x8020695d - SIOCSIFFLAGS = 0x80206910 - SIOCSIFGENERIC = 0x80206939 - SIOCSIFLLADDR = 0x8020693c - SIOCSIFMAC = 0x80206927 - SIOCSIFMEDIA = 0xc0206937 - SIOCSIFMETRIC = 0x80206918 - SIOCSIFMTU = 0x80206934 - SIOCSIFNAME = 0x80206928 - SIOCSIFNETMASK = 0x80206916 - SIOCSIFPHYADDR = 0x80406946 - SIOCSIFPHYS = 0x80206936 - SIOCSIFRVNET = 0xc020695b - SIOCSIFVNET = 0xc020695a - SIOCSLANPCP = 0x80206999 - SIOCSLOWAT = 0x80047302 - SIOCSPGRP = 0x80047308 - SIOCSTUNFIB = 0x8020695f - SOCK_CLOEXEC = 0x10000000 - SOCK_DGRAM = 0x2 - SOCK_MAXADDRLEN = 0xff - SOCK_NONBLOCK = 0x20000000 - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_LOCAL = 0x0 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_ACCEPTFILTER = 0x1000 - SO_BINTIME = 0x2000 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 - SO_DOMAIN = 0x1019 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LABEL = 0x1009 - SO_LINGER = 0x80 - SO_LISTENINCQLEN = 0x1013 - SO_LISTENQLEN = 0x1012 - SO_LISTENQLIMIT = 0x1011 - SO_MAX_PACING_RATE = 0x1018 - SO_NOSIGPIPE = 0x800 - SO_NO_DDP = 0x8000 - SO_NO_OFFLOAD = 0x4000 - SO_OOBINLINE = 0x100 - SO_PEERLABEL = 0x1010 - SO_PROTOCOL = 0x1016 - SO_PROTOTYPE = 0x1016 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 - SO_RERROR = 0x20000 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_REUSEPORT_LB = 0x10000 - SO_SETFIB = 0x1014 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_TIMESTAMP = 0x400 - SO_TS_BINTIME = 0x1 - SO_TS_CLOCK = 0x1017 - SO_TS_CLOCK_MAX = 0x3 - SO_TS_DEFAULT = 0x0 - SO_TS_MONOTONIC = 0x3 - SO_TS_REALTIME = 0x2 - SO_TS_REALTIME_MICRO = 0x0 - SO_TYPE = 0x1008 - SO_USELOOPBACK = 0x40 - SO_USER_COOKIE = 0x1015 - SO_VENDOR = 0x80000000 - S_BLKSIZE = 0x200 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFLNK = 0xa000 - S_IFMT = 0xf000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IFWHT = 0xe000 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISTXT = 0x200 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXGRP = 0x8 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - TAB0 = 0x0 - TAB3 = 0x4 - TABDLY = 0x4 - TCIFLUSH = 0x1 - TCIOFF = 0x3 - TCIOFLUSH = 0x3 - TCION = 0x4 - TCOFLUSH = 0x2 - TCOOFF = 0x1 - TCOON = 0x2 - TCPOPT_EOL = 0x0 - TCPOPT_FAST_OPEN = 0x22 - TCPOPT_MAXSEG = 0x2 - TCPOPT_NOP = 0x1 - TCPOPT_PAD = 0x0 - TCPOPT_SACK = 0x5 - TCPOPT_SACK_PERMITTED = 0x4 - TCPOPT_SIGNATURE = 0x13 - TCPOPT_TIMESTAMP = 0x8 - TCPOPT_WINDOW = 0x3 - TCP_BBR_ACK_COMP_ALG = 0x448 - TCP_BBR_ALGORITHM = 0x43b - TCP_BBR_DRAIN_INC_EXTRA = 0x43c - TCP_BBR_DRAIN_PG = 0x42e - TCP_BBR_EXTRA_GAIN = 0x449 - TCP_BBR_EXTRA_STATE = 0x453 - TCP_BBR_FLOOR_MIN_TSO = 0x454 - TCP_BBR_HDWR_PACE = 0x451 - TCP_BBR_HOLD_TARGET = 0x436 - TCP_BBR_IWINTSO = 0x42b - TCP_BBR_LOWGAIN_FD = 0x436 - TCP_BBR_LOWGAIN_HALF = 0x435 - TCP_BBR_LOWGAIN_THRESH = 0x434 - TCP_BBR_MAX_RTO = 0x439 - TCP_BBR_MIN_RTO = 0x438 - TCP_BBR_MIN_TOPACEOUT = 0x455 - TCP_BBR_ONE_RETRAN = 0x431 - TCP_BBR_PACE_CROSS = 0x442 - TCP_BBR_PACE_DEL_TAR = 0x43f - TCP_BBR_PACE_OH = 0x435 - TCP_BBR_PACE_PER_SEC = 0x43e - TCP_BBR_PACE_SEG_MAX = 0x440 - TCP_BBR_PACE_SEG_MIN = 0x441 - TCP_BBR_POLICER_DETECT = 0x457 - TCP_BBR_PROBE_RTT_GAIN = 0x44d - TCP_BBR_PROBE_RTT_INT = 0x430 - TCP_BBR_PROBE_RTT_LEN = 0x44e - TCP_BBR_RACK_RTT_USE = 0x44a - TCP_BBR_RECFORCE = 0x42c - TCP_BBR_REC_OVER_HPTS = 0x43a - TCP_BBR_RETRAN_WTSO = 0x44b - TCP_BBR_RWND_IS_APP = 0x42f - TCP_BBR_SEND_IWND_IN_TSO = 0x44f - TCP_BBR_STARTUP_EXIT_EPOCH = 0x43d - TCP_BBR_STARTUP_LOSS_EXIT = 0x432 - TCP_BBR_STARTUP_PG = 0x42d - TCP_BBR_TMR_PACE_OH = 0x448 - TCP_BBR_TSLIMITS = 0x434 - TCP_BBR_TSTMP_RAISES = 0x456 - TCP_BBR_UNLIMITED = 0x43b - TCP_BBR_USEDEL_RATE = 0x437 - TCP_BBR_USE_LOWGAIN = 0x433 - TCP_BBR_USE_RACK_CHEAT = 0x450 - TCP_BBR_UTTER_MAX_TSO = 0x452 - TCP_CA_NAME_MAX = 0x10 - TCP_CCALGOOPT = 0x41 - TCP_CONGESTION = 0x40 - TCP_DATA_AFTER_CLOSE = 0x44c - TCP_DELACK = 0x48 - TCP_FASTOPEN = 0x401 - TCP_FASTOPEN_MAX_COOKIE_LEN = 0x10 - TCP_FASTOPEN_MIN_COOKIE_LEN = 0x4 - TCP_FASTOPEN_PSK_LEN = 0x10 - TCP_FUNCTION_BLK = 0x2000 - TCP_FUNCTION_NAME_LEN_MAX = 0x20 - TCP_INFO = 0x20 - TCP_KEEPCNT = 0x400 - TCP_KEEPIDLE = 0x100 - TCP_KEEPINIT = 0x80 - TCP_KEEPINTVL = 0x200 - TCP_LOG = 0x22 - TCP_LOGBUF = 0x23 - TCP_LOGDUMP = 0x25 - TCP_LOGDUMPID = 0x26 - TCP_LOGID = 0x24 - TCP_LOG_ID_LEN = 0x40 - TCP_MAXBURST = 0x4 - TCP_MAXHLEN = 0x3c - TCP_MAXOLEN = 0x28 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x4 - TCP_MAX_WINSHIFT = 0xe - TCP_MD5SIG = 0x10 - TCP_MINMSS = 0xd8 - TCP_MSS = 0x218 - TCP_NODELAY = 0x1 - TCP_NOOPT = 0x8 - TCP_NOPUSH = 0x4 - TCP_PCAP_IN = 0x1000 - TCP_PCAP_OUT = 0x800 - TCP_RACK_EARLY_RECOV = 0x423 - TCP_RACK_EARLY_SEG = 0x424 - TCP_RACK_GP_INCREASE = 0x446 - TCP_RACK_IDLE_REDUCE_HIGH = 0x444 - TCP_RACK_MIN_PACE = 0x445 - TCP_RACK_MIN_PACE_SEG = 0x446 - TCP_RACK_MIN_TO = 0x422 - TCP_RACK_PACE_ALWAYS = 0x41f - TCP_RACK_PACE_MAX_SEG = 0x41e - TCP_RACK_PACE_REDUCE = 0x41d - TCP_RACK_PKT_DELAY = 0x428 - TCP_RACK_PROP = 0x41b - TCP_RACK_PROP_RATE = 0x420 - TCP_RACK_PRR_SENDALOT = 0x421 - TCP_RACK_REORD_FADE = 0x426 - TCP_RACK_REORD_THRESH = 0x425 - TCP_RACK_TLP_INC_VAR = 0x429 - TCP_RACK_TLP_REDUCE = 0x41c - TCP_RACK_TLP_THRESH = 0x427 - TCP_RACK_TLP_USE = 0x447 - TCP_VENDOR = 0x80000000 - TCSAFLUSH = 0x2 - TIMER_ABSTIME = 0x1 - TIMER_RELTIME = 0x0 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCONS = 0x80047462 - TIOCDRAIN = 0x2000745e - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLUSH = 0x80047410 - TIOCGDRAINWAIT = 0x40047456 - TIOCGETA = 0x402c7413 - TIOCGETD = 0x4004741a - TIOCGPGRP = 0x40047477 - TIOCGPTN = 0x4004740f - TIOCGSID = 0x40047463 - TIOCGWINSZ = 0x40087468 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGDTRWAIT = 0x4004745a - TIOCMGET = 0x4004746a - TIOCMSDTRWAIT = 0x8004745b - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DCD = 0x40 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCPTMASTER = 0x2000741c - TIOCSBRK = 0x2000747b - TIOCSCTTY = 0x20007461 - TIOCSDRAINWAIT = 0x80047457 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x802c7414 - TIOCSETAF = 0x802c7416 - TIOCSETAW = 0x802c7415 - TIOCSETD = 0x8004741b - TIOCSIG = 0x2004745f - TIOCSPGRP = 0x80047476 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x20007465 - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCTIMESTAMP = 0x40107459 - TIOCUCNTL = 0x80047466 - TOSTOP = 0x400000 - UTIME_NOW = -0x1 - UTIME_OMIT = -0x2 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VERASE2 = 0x7 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VTIME = 0x11 - VWERASE = 0x4 - WCONTINUED = 0x4 - WCOREFLAG = 0x80 - WEXITED = 0x10 - WLINUXCLONE = 0x80000000 - WNOHANG = 0x1 - WNOWAIT = 0x8 - WSTOPPED = 0x2 - WTRAPPED = 0x20 - WUNTRACED = 0x2 -) - -// Errors -const ( - E2BIG = syscall.Errno(0x7) - EACCES = syscall.Errno(0xd) - EADDRINUSE = syscall.Errno(0x30) - EADDRNOTAVAIL = syscall.Errno(0x31) - EAFNOSUPPORT = syscall.Errno(0x2f) - EAGAIN = syscall.Errno(0x23) - EALREADY = syscall.Errno(0x25) - EAUTH = syscall.Errno(0x50) - EBADF = syscall.Errno(0x9) - EBADMSG = syscall.Errno(0x59) - EBADRPC = syscall.Errno(0x48) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x55) - ECAPMODE = syscall.Errno(0x5e) - ECHILD = syscall.Errno(0xa) - ECONNABORTED = syscall.Errno(0x35) - ECONNREFUSED = syscall.Errno(0x3d) - ECONNRESET = syscall.Errno(0x36) - EDEADLK = syscall.Errno(0xb) - EDESTADDRREQ = syscall.Errno(0x27) - EDOM = syscall.Errno(0x21) - EDOOFUS = syscall.Errno(0x58) - EDQUOT = syscall.Errno(0x45) - EEXIST = syscall.Errno(0x11) - EFAULT = syscall.Errno(0xe) - EFBIG = syscall.Errno(0x1b) - EFTYPE = syscall.Errno(0x4f) - EHOSTDOWN = syscall.Errno(0x40) - EHOSTUNREACH = syscall.Errno(0x41) - EIDRM = syscall.Errno(0x52) - EILSEQ = syscall.Errno(0x56) - EINPROGRESS = syscall.Errno(0x24) - EINTEGRITY = syscall.Errno(0x61) - EINTR = syscall.Errno(0x4) - EINVAL = syscall.Errno(0x16) - EIO = syscall.Errno(0x5) - EISCONN = syscall.Errno(0x38) - EISDIR = syscall.Errno(0x15) - ELAST = syscall.Errno(0x61) - ELOOP = syscall.Errno(0x3e) - EMFILE = syscall.Errno(0x18) - EMLINK = syscall.Errno(0x1f) - EMSGSIZE = syscall.Errno(0x28) - EMULTIHOP = syscall.Errno(0x5a) - ENAMETOOLONG = syscall.Errno(0x3f) - ENEEDAUTH = syscall.Errno(0x51) - ENETDOWN = syscall.Errno(0x32) - ENETRESET = syscall.Errno(0x34) - ENETUNREACH = syscall.Errno(0x33) - ENFILE = syscall.Errno(0x17) - ENOATTR = syscall.Errno(0x57) - ENOBUFS = syscall.Errno(0x37) - ENODEV = syscall.Errno(0x13) - ENOENT = syscall.Errno(0x2) - ENOEXEC = syscall.Errno(0x8) - ENOLCK = syscall.Errno(0x4d) - ENOLINK = syscall.Errno(0x5b) - ENOMEM = syscall.Errno(0xc) - ENOMSG = syscall.Errno(0x53) - ENOPROTOOPT = syscall.Errno(0x2a) - ENOSPC = syscall.Errno(0x1c) - ENOSYS = syscall.Errno(0x4e) - ENOTBLK = syscall.Errno(0xf) - ENOTCAPABLE = syscall.Errno(0x5d) - ENOTCONN = syscall.Errno(0x39) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x42) - ENOTRECOVERABLE = syscall.Errno(0x5f) - ENOTSOCK = syscall.Errno(0x26) - ENOTSUP = syscall.Errno(0x2d) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x2d) - EOVERFLOW = syscall.Errno(0x54) - EOWNERDEAD = syscall.Errno(0x60) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x2e) - EPIPE = syscall.Errno(0x20) - EPROCLIM = syscall.Errno(0x43) - EPROCUNAVAIL = syscall.Errno(0x4c) - EPROGMISMATCH = syscall.Errno(0x4b) - EPROGUNAVAIL = syscall.Errno(0x4a) - EPROTO = syscall.Errno(0x5c) - EPROTONOSUPPORT = syscall.Errno(0x2b) - EPROTOTYPE = syscall.Errno(0x29) - ERANGE = syscall.Errno(0x22) - EREMOTE = syscall.Errno(0x47) - EROFS = syscall.Errno(0x1e) - ERPCMISMATCH = syscall.Errno(0x49) - ESHUTDOWN = syscall.Errno(0x3a) - ESOCKTNOSUPPORT = syscall.Errno(0x2c) - ESPIPE = syscall.Errno(0x1d) - ESRCH = syscall.Errno(0x3) - ESTALE = syscall.Errno(0x46) - ETIMEDOUT = syscall.Errno(0x3c) - ETOOMANYREFS = syscall.Errno(0x3b) - ETXTBSY = syscall.Errno(0x1a) - EUSERS = syscall.Errno(0x44) - EWOULDBLOCK = syscall.Errno(0x23) - EXDEV = syscall.Errno(0x12) -) - -// Signals -const ( - SIGABRT = syscall.Signal(0x6) - SIGALRM = syscall.Signal(0xe) - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x14) - SIGCONT = syscall.Signal(0x13) - SIGEMT = syscall.Signal(0x7) - SIGFPE = syscall.Signal(0x8) - SIGHUP = syscall.Signal(0x1) - SIGILL = syscall.Signal(0x4) - SIGINFO = syscall.Signal(0x1d) - SIGINT = syscall.Signal(0x2) - SIGIO = syscall.Signal(0x17) - SIGIOT = syscall.Signal(0x6) - SIGKILL = syscall.Signal(0x9) - SIGLIBRT = syscall.Signal(0x21) - SIGLWP = syscall.Signal(0x20) - SIGPIPE = syscall.Signal(0xd) - SIGPROF = syscall.Signal(0x1b) - SIGQUIT = syscall.Signal(0x3) - SIGSEGV = syscall.Signal(0xb) - SIGSTOP = syscall.Signal(0x11) - SIGSYS = syscall.Signal(0xc) - SIGTERM = syscall.Signal(0xf) - SIGTHR = syscall.Signal(0x20) - SIGTRAP = syscall.Signal(0x5) - SIGTSTP = syscall.Signal(0x12) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x10) - SIGUSR1 = syscall.Signal(0x1e) - SIGUSR2 = syscall.Signal(0x1f) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "device not configured"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EDEADLK", "resource deadlock avoided"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "cross-device link"}, - {19, "ENODEV", "operation not supported by device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "result too large"}, - {35, "EWOULDBLOCK", "resource temporarily unavailable"}, - {36, "EINPROGRESS", "operation now in progress"}, - {37, "EALREADY", "operation already in progress"}, - {38, "ENOTSOCK", "socket operation on non-socket"}, - {39, "EDESTADDRREQ", "destination address required"}, - {40, "EMSGSIZE", "message too long"}, - {41, "EPROTOTYPE", "protocol wrong type for socket"}, - {42, "ENOPROTOOPT", "protocol not available"}, - {43, "EPROTONOSUPPORT", "protocol not supported"}, - {44, "ESOCKTNOSUPPORT", "socket type not supported"}, - {45, "EOPNOTSUPP", "operation not supported"}, - {46, "EPFNOSUPPORT", "protocol family not supported"}, - {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, - {48, "EADDRINUSE", "address already in use"}, - {49, "EADDRNOTAVAIL", "can't assign requested address"}, - {50, "ENETDOWN", "network is down"}, - {51, "ENETUNREACH", "network is unreachable"}, - {52, "ENETRESET", "network dropped connection on reset"}, - {53, "ECONNABORTED", "software caused connection abort"}, - {54, "ECONNRESET", "connection reset by peer"}, - {55, "ENOBUFS", "no buffer space available"}, - {56, "EISCONN", "socket is already connected"}, - {57, "ENOTCONN", "socket is not connected"}, - {58, "ESHUTDOWN", "can't send after socket shutdown"}, - {59, "ETOOMANYREFS", "too many references: can't splice"}, - {60, "ETIMEDOUT", "operation timed out"}, - {61, "ECONNREFUSED", "connection refused"}, - {62, "ELOOP", "too many levels of symbolic links"}, - {63, "ENAMETOOLONG", "file name too long"}, - {64, "EHOSTDOWN", "host is down"}, - {65, "EHOSTUNREACH", "no route to host"}, - {66, "ENOTEMPTY", "directory not empty"}, - {67, "EPROCLIM", "too many processes"}, - {68, "EUSERS", "too many users"}, - {69, "EDQUOT", "disc quota exceeded"}, - {70, "ESTALE", "stale NFS file handle"}, - {71, "EREMOTE", "too many levels of remote in path"}, - {72, "EBADRPC", "RPC struct is bad"}, - {73, "ERPCMISMATCH", "RPC version wrong"}, - {74, "EPROGUNAVAIL", "RPC prog. not avail"}, - {75, "EPROGMISMATCH", "program version wrong"}, - {76, "EPROCUNAVAIL", "bad procedure for program"}, - {77, "ENOLCK", "no locks available"}, - {78, "ENOSYS", "function not implemented"}, - {79, "EFTYPE", "inappropriate file type or format"}, - {80, "EAUTH", "authentication error"}, - {81, "ENEEDAUTH", "need authenticator"}, - {82, "EIDRM", "identifier removed"}, - {83, "ENOMSG", "no message of desired type"}, - {84, "EOVERFLOW", "value too large to be stored in data type"}, - {85, "ECANCELED", "operation canceled"}, - {86, "EILSEQ", "illegal byte sequence"}, - {87, "ENOATTR", "attribute not found"}, - {88, "EDOOFUS", "programming error"}, - {89, "EBADMSG", "bad message"}, - {90, "EMULTIHOP", "multihop attempted"}, - {91, "ENOLINK", "link has been severed"}, - {92, "EPROTO", "protocol error"}, - {93, "ENOTCAPABLE", "capabilities insufficient"}, - {94, "ECAPMODE", "not permitted in capability mode"}, - {95, "ENOTRECOVERABLE", "state not recoverable"}, - {96, "EOWNERDEAD", "previous owner died"}, - {97, "EINTEGRITY", "integrity check failed"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, - {6, "SIGIOT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGURG", "urgent I/O condition"}, - {17, "SIGSTOP", "suspended (signal)"}, - {18, "SIGTSTP", "suspended"}, - {19, "SIGCONT", "continued"}, - {20, "SIGCHLD", "child exited"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGIO", "I/O possible"}, - {24, "SIGXCPU", "cputime limit exceeded"}, - {25, "SIGXFSZ", "filesize limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window size changes"}, - {29, "SIGINFO", "information request"}, - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, - {32, "SIGTHR", "unknown signal"}, - {33, "SIGLIBRT", "unknown signal"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go deleted file mode 100644 index c557ac2..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go +++ /dev/null @@ -1,2034 +0,0 @@ -// mkerrors.sh -m64 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm64 && freebsd -// +build arm64,freebsd - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -m64 _const.go - -package unix - -import "syscall" - -const ( - AF_APPLETALK = 0x10 - AF_ARP = 0x23 - AF_ATM = 0x1e - AF_BLUETOOTH = 0x24 - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1a - AF_ECMA = 0x8 - AF_HYLINK = 0xf - AF_IEEE80211 = 0x25 - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x1c - AF_INET6_SDP = 0x2a - AF_INET_SDP = 0x28 - AF_IPX = 0x17 - AF_ISDN = 0x1a - AF_ISO = 0x7 - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x2a - AF_NATM = 0x1d - AF_NETBIOS = 0x6 - AF_NETGRAPH = 0x20 - AF_OSI = 0x7 - AF_PUP = 0x4 - AF_ROUTE = 0x11 - AF_SCLUSTER = 0x22 - AF_SIP = 0x18 - AF_SLOW = 0x21 - AF_SNA = 0xb - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - AF_VENDOR00 = 0x27 - AF_VENDOR01 = 0x29 - AF_VENDOR02 = 0x2b - AF_VENDOR03 = 0x2d - AF_VENDOR04 = 0x2f - AF_VENDOR05 = 0x31 - AF_VENDOR06 = 0x33 - AF_VENDOR07 = 0x35 - AF_VENDOR08 = 0x37 - AF_VENDOR09 = 0x39 - AF_VENDOR10 = 0x3b - AF_VENDOR11 = 0x3d - AF_VENDOR12 = 0x3f - AF_VENDOR13 = 0x41 - AF_VENDOR14 = 0x43 - AF_VENDOR15 = 0x45 - AF_VENDOR16 = 0x47 - AF_VENDOR17 = 0x49 - AF_VENDOR18 = 0x4b - AF_VENDOR19 = 0x4d - AF_VENDOR20 = 0x4f - AF_VENDOR21 = 0x51 - AF_VENDOR22 = 0x53 - AF_VENDOR23 = 0x55 - AF_VENDOR24 = 0x57 - AF_VENDOR25 = 0x59 - AF_VENDOR26 = 0x5b - AF_VENDOR27 = 0x5d - AF_VENDOR28 = 0x5f - AF_VENDOR29 = 0x61 - AF_VENDOR30 = 0x63 - AF_VENDOR31 = 0x65 - AF_VENDOR32 = 0x67 - AF_VENDOR33 = 0x69 - AF_VENDOR34 = 0x6b - AF_VENDOR35 = 0x6d - AF_VENDOR36 = 0x6f - AF_VENDOR37 = 0x71 - AF_VENDOR38 = 0x73 - AF_VENDOR39 = 0x75 - AF_VENDOR40 = 0x77 - AF_VENDOR41 = 0x79 - AF_VENDOR42 = 0x7b - AF_VENDOR43 = 0x7d - AF_VENDOR44 = 0x7f - AF_VENDOR45 = 0x81 - AF_VENDOR46 = 0x83 - AF_VENDOR47 = 0x85 - ALTWERASE = 0x200 - B0 = 0x0 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B230400 = 0x38400 - B2400 = 0x960 - B28800 = 0x7080 - B300 = 0x12c - B38400 = 0x9600 - B460800 = 0x70800 - B4800 = 0x12c0 - B50 = 0x32 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B921600 = 0xe1000 - B9600 = 0x2580 - BIOCFEEDBACK = 0x8004427c - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDIRECTION = 0x40044276 - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc0104279 - BIOCGETBUFMODE = 0x4004427d - BIOCGETIF = 0x4020426b - BIOCGETZMAX = 0x4008427f - BIOCGHDRCMPLT = 0x40044274 - BIOCGRSIG = 0x40044272 - BIOCGRTIMEOUT = 0x4010426e - BIOCGSEESENT = 0x40044276 - BIOCGSTATS = 0x4008426f - BIOCGTSTAMP = 0x40044283 - BIOCIMMEDIATE = 0x80044270 - BIOCLOCK = 0x2000427a - BIOCPROMISC = 0x20004269 - BIOCROTZBUF = 0x40184280 - BIOCSBLEN = 0xc0044266 - BIOCSDIRECTION = 0x80044277 - BIOCSDLT = 0x80044278 - BIOCSETBUFMODE = 0x8004427e - BIOCSETF = 0x80104267 - BIOCSETFNR = 0x80104282 - BIOCSETIF = 0x8020426c - BIOCSETVLANPCP = 0x80044285 - BIOCSETWF = 0x8010427b - BIOCSETZBUF = 0x80184281 - BIOCSHDRCMPLT = 0x80044275 - BIOCSRSIG = 0x80044273 - BIOCSRTIMEOUT = 0x8010426d - BIOCSSEESENT = 0x80044277 - BIOCSTSTAMP = 0x80044284 - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x8 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_BUFMODE_BUFFER = 0x1 - BPF_BUFMODE_ZBUF = 0x2 - BPF_DIV = 0x30 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x80000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MOD = 0x90 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_T_BINTIME = 0x2 - BPF_T_BINTIME_FAST = 0x102 - BPF_T_BINTIME_MONOTONIC = 0x202 - BPF_T_BINTIME_MONOTONIC_FAST = 0x302 - BPF_T_FAST = 0x100 - BPF_T_FLAG_MASK = 0x300 - BPF_T_FORMAT_MASK = 0x3 - BPF_T_MICROTIME = 0x0 - BPF_T_MICROTIME_FAST = 0x100 - BPF_T_MICROTIME_MONOTONIC = 0x200 - BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 - BPF_T_MONOTONIC = 0x200 - BPF_T_MONOTONIC_FAST = 0x300 - BPF_T_NANOTIME = 0x1 - BPF_T_NANOTIME_FAST = 0x101 - BPF_T_NANOTIME_MONOTONIC = 0x201 - BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 - BPF_T_NONE = 0x3 - BPF_T_NORMAL = 0x0 - BPF_W = 0x0 - BPF_X = 0x8 - BPF_XOR = 0xa0 - BRKINT = 0x2 - CAP_ACCEPT = 0x200000020000000 - CAP_ACL_CHECK = 0x400000000010000 - CAP_ACL_DELETE = 0x400000000020000 - CAP_ACL_GET = 0x400000000040000 - CAP_ACL_SET = 0x400000000080000 - CAP_ALL0 = 0x20007ffffffffff - CAP_ALL1 = 0x4000000001fffff - CAP_BIND = 0x200000040000000 - CAP_BINDAT = 0x200008000000400 - CAP_CHFLAGSAT = 0x200000000001400 - CAP_CONNECT = 0x200000080000000 - CAP_CONNECTAT = 0x200010000000400 - CAP_CREATE = 0x200000000000040 - CAP_EVENT = 0x400000000000020 - CAP_EXTATTR_DELETE = 0x400000000001000 - CAP_EXTATTR_GET = 0x400000000002000 - CAP_EXTATTR_LIST = 0x400000000004000 - CAP_EXTATTR_SET = 0x400000000008000 - CAP_FCHDIR = 0x200000000000800 - CAP_FCHFLAGS = 0x200000000001000 - CAP_FCHMOD = 0x200000000002000 - CAP_FCHMODAT = 0x200000000002400 - CAP_FCHOWN = 0x200000000004000 - CAP_FCHOWNAT = 0x200000000004400 - CAP_FCNTL = 0x200000000008000 - CAP_FCNTL_ALL = 0x78 - CAP_FCNTL_GETFL = 0x8 - CAP_FCNTL_GETOWN = 0x20 - CAP_FCNTL_SETFL = 0x10 - CAP_FCNTL_SETOWN = 0x40 - CAP_FEXECVE = 0x200000000000080 - CAP_FLOCK = 0x200000000010000 - CAP_FPATHCONF = 0x200000000020000 - CAP_FSCK = 0x200000000040000 - CAP_FSTAT = 0x200000000080000 - CAP_FSTATAT = 0x200000000080400 - CAP_FSTATFS = 0x200000000100000 - CAP_FSYNC = 0x200000000000100 - CAP_FTRUNCATE = 0x200000000000200 - CAP_FUTIMES = 0x200000000200000 - CAP_FUTIMESAT = 0x200000000200400 - CAP_GETPEERNAME = 0x200000100000000 - CAP_GETSOCKNAME = 0x200000200000000 - CAP_GETSOCKOPT = 0x200000400000000 - CAP_IOCTL = 0x400000000000080 - CAP_IOCTLS_ALL = 0x7fffffffffffffff - CAP_KQUEUE = 0x400000000100040 - CAP_KQUEUE_CHANGE = 0x400000000100000 - CAP_KQUEUE_EVENT = 0x400000000000040 - CAP_LINKAT_SOURCE = 0x200020000000400 - CAP_LINKAT_TARGET = 0x200000000400400 - CAP_LISTEN = 0x200000800000000 - CAP_LOOKUP = 0x200000000000400 - CAP_MAC_GET = 0x400000000000001 - CAP_MAC_SET = 0x400000000000002 - CAP_MKDIRAT = 0x200000000800400 - CAP_MKFIFOAT = 0x200000001000400 - CAP_MKNODAT = 0x200000002000400 - CAP_MMAP = 0x200000000000010 - CAP_MMAP_R = 0x20000000000001d - CAP_MMAP_RW = 0x20000000000001f - CAP_MMAP_RWX = 0x20000000000003f - CAP_MMAP_RX = 0x20000000000003d - CAP_MMAP_W = 0x20000000000001e - CAP_MMAP_WX = 0x20000000000003e - CAP_MMAP_X = 0x20000000000003c - CAP_PDGETPID = 0x400000000000200 - CAP_PDKILL = 0x400000000000800 - CAP_PDWAIT = 0x400000000000400 - CAP_PEELOFF = 0x200001000000000 - CAP_POLL_EVENT = 0x400000000000020 - CAP_PREAD = 0x20000000000000d - CAP_PWRITE = 0x20000000000000e - CAP_READ = 0x200000000000001 - CAP_RECV = 0x200000000000001 - CAP_RENAMEAT_SOURCE = 0x200000004000400 - CAP_RENAMEAT_TARGET = 0x200040000000400 - CAP_RIGHTS_VERSION = 0x0 - CAP_RIGHTS_VERSION_00 = 0x0 - CAP_SEEK = 0x20000000000000c - CAP_SEEK_TELL = 0x200000000000004 - CAP_SEM_GETVALUE = 0x400000000000004 - CAP_SEM_POST = 0x400000000000008 - CAP_SEM_WAIT = 0x400000000000010 - CAP_SEND = 0x200000000000002 - CAP_SETSOCKOPT = 0x200002000000000 - CAP_SHUTDOWN = 0x200004000000000 - CAP_SOCK_CLIENT = 0x200007780000003 - CAP_SOCK_SERVER = 0x200007f60000003 - CAP_SYMLINKAT = 0x200000008000400 - CAP_TTYHOOK = 0x400000000000100 - CAP_UNLINKAT = 0x200000010000400 - CAP_UNUSED0_44 = 0x200080000000000 - CAP_UNUSED0_57 = 0x300000000000000 - CAP_UNUSED1_22 = 0x400000000200000 - CAP_UNUSED1_57 = 0x500000000000000 - CAP_WRITE = 0x200000000000002 - CFLUSH = 0xf - CLOCAL = 0x8000 - CLOCK_MONOTONIC = 0x4 - CLOCK_MONOTONIC_FAST = 0xc - CLOCK_MONOTONIC_PRECISE = 0xb - CLOCK_PROCESS_CPUTIME_ID = 0xf - CLOCK_PROF = 0x2 - CLOCK_REALTIME = 0x0 - CLOCK_REALTIME_FAST = 0xa - CLOCK_REALTIME_PRECISE = 0x9 - CLOCK_SECOND = 0xd - CLOCK_THREAD_CPUTIME_ID = 0xe - CLOCK_UPTIME = 0x5 - CLOCK_UPTIME_FAST = 0x8 - CLOCK_UPTIME_PRECISE = 0x7 - CLOCK_VIRTUAL = 0x1 - CPUSTATES = 0x5 - CP_IDLE = 0x4 - CP_INTR = 0x3 - CP_NICE = 0x1 - CP_SYS = 0x2 - CP_USER = 0x0 - CREAD = 0x800 - CRTSCTS = 0x30000 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0x14 - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTL_HW = 0x6 - CTL_KERN = 0x1 - CTL_MAXNAME = 0x18 - CTL_NET = 0x4 - DIOCGATTR = 0xc148648e - DIOCGDELETE = 0x80106488 - DIOCGFLUSH = 0x20006487 - DIOCGFRONTSTUFF = 0x40086486 - DIOCGFWHEADS = 0x40046483 - DIOCGFWSECTORS = 0x40046482 - DIOCGIDENT = 0x41006489 - DIOCGMEDIASIZE = 0x40086481 - DIOCGPHYSPATH = 0x4400648d - DIOCGPROVIDERNAME = 0x4400648a - DIOCGSECTORSIZE = 0x40046480 - DIOCGSTRIPEOFFSET = 0x4008648c - DIOCGSTRIPESIZE = 0x4008648b - DIOCSKERNELDUMP = 0x80506490 - DIOCSKERNELDUMP_FREEBSD11 = 0x80046485 - DIOCZONECMD = 0xc080648f - DLT_A429 = 0xb8 - DLT_A653_ICM = 0xb9 - DLT_AIRONET_HEADER = 0x78 - DLT_AOS = 0xde - DLT_APPLE_IP_OVER_IEEE1394 = 0x8a - DLT_ARCNET = 0x7 - DLT_ARCNET_LINUX = 0x81 - DLT_ATM_CLIP = 0x13 - DLT_ATM_RFC1483 = 0xb - DLT_AURORA = 0x7e - DLT_AX25 = 0x3 - DLT_AX25_KISS = 0xca - DLT_BACNET_MS_TP = 0xa5 - DLT_BLUETOOTH_BREDR_BB = 0xff - DLT_BLUETOOTH_HCI_H4 = 0xbb - DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 - DLT_BLUETOOTH_LE_LL = 0xfb - DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 - DLT_BLUETOOTH_LINUX_MONITOR = 0xfe - DLT_CAN20B = 0xbe - DLT_CAN_SOCKETCAN = 0xe3 - DLT_CHAOS = 0x5 - DLT_CHDLC = 0x68 - DLT_CISCO_IOS = 0x76 - DLT_CLASS_NETBSD_RAWAF = 0x2240000 - DLT_C_HDLC = 0x68 - DLT_C_HDLC_WITH_DIR = 0xcd - DLT_DBUS = 0xe7 - DLT_DECT = 0xdd - DLT_DISPLAYPORT_AUX = 0x113 - DLT_DOCSIS = 0x8f - DLT_DOCSIS31_XRA31 = 0x111 - DLT_DVB_CI = 0xeb - DLT_ECONET = 0x73 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0x6d - DLT_EPON = 0x103 - DLT_ERF = 0xc5 - DLT_ERF_ETH = 0xaf - DLT_ERF_POS = 0xb0 - DLT_ETHERNET_MPACKET = 0x112 - DLT_FC_2 = 0xe0 - DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 - DLT_FDDI = 0xa - DLT_FLEXRAY = 0xd2 - DLT_FRELAY = 0x6b - DLT_FRELAY_WITH_DIR = 0xce - DLT_GCOM_SERIAL = 0xad - DLT_GCOM_T1E1 = 0xac - DLT_GPF_F = 0xab - DLT_GPF_T = 0xaa - DLT_GPRS_LLC = 0xa9 - DLT_GSMTAP_ABIS = 0xda - DLT_GSMTAP_UM = 0xd9 - DLT_IBM_SN = 0x92 - DLT_IBM_SP = 0x91 - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_IEEE802_11_RADIO_AVS = 0xa3 - DLT_IEEE802_15_4 = 0xc3 - DLT_IEEE802_15_4_LINUX = 0xbf - DLT_IEEE802_15_4_NOFCS = 0xe6 - DLT_IEEE802_15_4_NONASK_PHY = 0xd7 - DLT_IEEE802_16_MAC_CPS = 0xbc - DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 - DLT_INFINIBAND = 0xf7 - DLT_IPFILTER = 0x74 - DLT_IPMB_KONTRON = 0xc7 - DLT_IPMB_LINUX = 0xd1 - DLT_IPMI_HPM_2 = 0x104 - DLT_IPNET = 0xe2 - DLT_IPOIB = 0xf2 - DLT_IPV4 = 0xe4 - DLT_IPV6 = 0xe5 - DLT_IP_OVER_FC = 0x7a - DLT_ISO_14443 = 0x108 - DLT_JUNIPER_ATM1 = 0x89 - DLT_JUNIPER_ATM2 = 0x87 - DLT_JUNIPER_ATM_CEMIC = 0xee - DLT_JUNIPER_CHDLC = 0xb5 - DLT_JUNIPER_ES = 0x84 - DLT_JUNIPER_ETHER = 0xb2 - DLT_JUNIPER_FIBRECHANNEL = 0xea - DLT_JUNIPER_FRELAY = 0xb4 - DLT_JUNIPER_GGSN = 0x85 - DLT_JUNIPER_ISM = 0xc2 - DLT_JUNIPER_MFR = 0x86 - DLT_JUNIPER_MLFR = 0x83 - DLT_JUNIPER_MLPPP = 0x82 - DLT_JUNIPER_MONITOR = 0xa4 - DLT_JUNIPER_PIC_PEER = 0xae - DLT_JUNIPER_PPP = 0xb3 - DLT_JUNIPER_PPPOE = 0xa7 - DLT_JUNIPER_PPPOE_ATM = 0xa8 - DLT_JUNIPER_SERVICES = 0x88 - DLT_JUNIPER_SRX_E2E = 0xe9 - DLT_JUNIPER_ST = 0xc8 - DLT_JUNIPER_VP = 0xb7 - DLT_JUNIPER_VS = 0xe8 - DLT_LAPB_WITH_DIR = 0xcf - DLT_LAPD = 0xcb - DLT_LIN = 0xd4 - DLT_LINUX_EVDEV = 0xd8 - DLT_LINUX_IRDA = 0x90 - DLT_LINUX_LAPD = 0xb1 - DLT_LINUX_PPP_WITHDIRECTION = 0xa6 - DLT_LINUX_SLL = 0x71 - DLT_LINUX_SLL2 = 0x114 - DLT_LOOP = 0x6c - DLT_LORATAP = 0x10e - DLT_LTALK = 0x72 - DLT_MATCHING_MAX = 0x114 - DLT_MATCHING_MIN = 0x68 - DLT_MFR = 0xb6 - DLT_MOST = 0xd3 - DLT_MPEG_2_TS = 0xf3 - DLT_MPLS = 0xdb - DLT_MTP2 = 0x8c - DLT_MTP2_WITH_PHDR = 0x8b - DLT_MTP3 = 0x8d - DLT_MUX27010 = 0xec - DLT_NETANALYZER = 0xf0 - DLT_NETANALYZER_TRANSPARENT = 0xf1 - DLT_NETLINK = 0xfd - DLT_NFC_LLCP = 0xf5 - DLT_NFLOG = 0xef - DLT_NG40 = 0xf4 - DLT_NORDIC_BLE = 0x110 - DLT_NULL = 0x0 - DLT_OPENFLOW = 0x10b - DLT_PCI_EXP = 0x7d - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x79 - DLT_PKTAP = 0x102 - DLT_PPI = 0xc0 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0xe - DLT_PPP_ETHER = 0x33 - DLT_PPP_PPPD = 0xa6 - DLT_PPP_SERIAL = 0x32 - DLT_PPP_WITH_DIR = 0xcc - DLT_PPP_WITH_DIRECTION = 0xa6 - DLT_PRISM_HEADER = 0x77 - DLT_PROFIBUS_DL = 0x101 - DLT_PRONET = 0x4 - DLT_RAIF1 = 0xc6 - DLT_RAW = 0xc - DLT_RDS = 0x109 - DLT_REDBACK_SMARTEDGE = 0x20 - DLT_RIO = 0x7c - DLT_RTAC_SERIAL = 0xfa - DLT_SCCP = 0x8e - DLT_SCTP = 0xf8 - DLT_SDLC = 0x10c - DLT_SITA = 0xc4 - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xd - DLT_STANAG_5066_D_PDU = 0xed - DLT_SUNATM = 0x7b - DLT_SYMANTEC_FIREWALL = 0x63 - DLT_TI_LLN_SNIFFER = 0x10d - DLT_TZSP = 0x80 - DLT_USB = 0xba - DLT_USBPCAP = 0xf9 - DLT_USB_DARWIN = 0x10a - DLT_USB_FREEBSD = 0xba - DLT_USB_LINUX = 0xbd - DLT_USB_LINUX_MMAPPED = 0xdc - DLT_USER0 = 0x93 - DLT_USER1 = 0x94 - DLT_USER10 = 0x9d - DLT_USER11 = 0x9e - DLT_USER12 = 0x9f - DLT_USER13 = 0xa0 - DLT_USER14 = 0xa1 - DLT_USER15 = 0xa2 - DLT_USER2 = 0x95 - DLT_USER3 = 0x96 - DLT_USER4 = 0x97 - DLT_USER5 = 0x98 - DLT_USER6 = 0x99 - DLT_USER7 = 0x9a - DLT_USER8 = 0x9b - DLT_USER9 = 0x9c - DLT_VSOCK = 0x10f - DLT_WATTSTOPPER_DLM = 0x107 - DLT_WIHART = 0xdf - DLT_WIRESHARK_UPPER_PDU = 0xfc - DLT_X2E_SERIAL = 0xd5 - DLT_X2E_XORAYA = 0xd6 - DLT_ZWAVE_R1_R2 = 0x105 - DLT_ZWAVE_R3 = 0x106 - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - DT_WHT = 0xe - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EVFILT_AIO = -0x3 - EVFILT_EMPTY = -0xd - EVFILT_FS = -0x9 - EVFILT_LIO = -0xa - EVFILT_PROC = -0x5 - EVFILT_PROCDESC = -0x8 - EVFILT_READ = -0x1 - EVFILT_SENDFILE = -0xc - EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0xd - EVFILT_TIMER = -0x7 - EVFILT_USER = -0xb - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 - EVNAMEMAP_NAME_SIZE = 0x40 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_DISPATCH = 0x80 - EV_DROP = 0x1000 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG1 = 0x2000 - EV_FLAG2 = 0x4000 - EV_FORCEONESHOT = 0x100 - EV_ONESHOT = 0x10 - EV_RECEIPT = 0x40 - EV_SYSFLAGS = 0xf000 - EXTA = 0x4b00 - EXTATTR_MAXNAMELEN = 0xff - EXTATTR_NAMESPACE_EMPTY = 0x0 - EXTATTR_NAMESPACE_SYSTEM = 0x2 - EXTATTR_NAMESPACE_USER = 0x1 - EXTB = 0x9600 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x400 - FLUSHO = 0x800000 - F_CANCEL = 0x5 - F_DUP2FD = 0xa - F_DUP2FD_CLOEXEC = 0x12 - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0x11 - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0xb - F_GETOWN = 0x5 - F_OGETLK = 0x7 - F_OK = 0x0 - F_OSETLK = 0x8 - F_OSETLKW = 0x9 - F_RDAHEAD = 0x10 - F_RDLCK = 0x1 - F_READAHEAD = 0xf - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0xc - F_SETLKW = 0xd - F_SETLK_REMOTE = 0xe - F_SETOWN = 0x6 - F_UNLCK = 0x2 - F_UNLCKSYS = 0x4 - F_WRLCK = 0x3 - HUPCL = 0x4000 - HW_MACHINE = 0x1 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFAN_ARRIVAL = 0x0 - IFAN_DEPARTURE = 0x1 - IFCAP_WOL_MAGIC = 0x2000 - IFF_ALLMULTI = 0x200 - IFF_ALTPHYS = 0x4000 - IFF_BROADCAST = 0x2 - IFF_CANTCHANGE = 0x218f52 - IFF_CANTCONFIG = 0x10000 - IFF_DEBUG = 0x4 - IFF_DRV_OACTIVE = 0x400 - IFF_DRV_RUNNING = 0x40 - IFF_DYING = 0x200000 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MONITOR = 0x40000 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_NOGROUP = 0x800000 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PPROMISC = 0x20000 - IFF_PROMISC = 0x100 - IFF_RENAMING = 0x400000 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_STATICARP = 0x80000 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_BRIDGE = 0xd1 - IFT_CARP = 0xf8 - IFT_IEEE1394 = 0x90 - IFT_INFINIBAND = 0xc7 - IFT_L2VLAN = 0x87 - IFT_L3IPVLAN = 0x88 - IFT_PPP = 0x17 - IFT_PROPVIRTUAL = 0x35 - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LOOPBACKNET = 0x7f - IN_RFC3021_MASK = 0xfffffffe - IPPROTO_3PC = 0x22 - IPPROTO_ADFS = 0x44 - IPPROTO_AH = 0x33 - IPPROTO_AHIP = 0x3d - IPPROTO_APES = 0x63 - IPPROTO_ARGUS = 0xd - IPPROTO_AX25 = 0x5d - IPPROTO_BHA = 0x31 - IPPROTO_BLT = 0x1e - IPPROTO_BRSATMON = 0x4c - IPPROTO_CARP = 0x70 - IPPROTO_CFTP = 0x3e - IPPROTO_CHAOS = 0x10 - IPPROTO_CMTP = 0x26 - IPPROTO_CPHB = 0x49 - IPPROTO_CPNX = 0x48 - IPPROTO_DCCP = 0x21 - IPPROTO_DDP = 0x25 - IPPROTO_DGP = 0x56 - IPPROTO_DIVERT = 0x102 - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_EMCON = 0xe - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GMTP = 0x64 - IPPROTO_GRE = 0x2f - IPPROTO_HELLO = 0x3f - IPPROTO_HIP = 0x8b - IPPROTO_HMP = 0x14 - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IDPR = 0x23 - IPPROTO_IDRP = 0x2d - IPPROTO_IGMP = 0x2 - IPPROTO_IGP = 0x55 - IPPROTO_IGRP = 0x58 - IPPROTO_IL = 0x28 - IPPROTO_INLSP = 0x34 - IPPROTO_INP = 0x20 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPCV = 0x47 - IPPROTO_IPEIP = 0x5e - IPPROTO_IPIP = 0x4 - IPPROTO_IPPC = 0x43 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_IRTP = 0x1c - IPPROTO_KRYPTOLAN = 0x41 - IPPROTO_LARP = 0x5b - IPPROTO_LEAF1 = 0x19 - IPPROTO_LEAF2 = 0x1a - IPPROTO_MAX = 0x100 - IPPROTO_MEAS = 0x13 - IPPROTO_MH = 0x87 - IPPROTO_MHRP = 0x30 - IPPROTO_MICP = 0x5f - IPPROTO_MOBILE = 0x37 - IPPROTO_MPLS = 0x89 - IPPROTO_MTP = 0x5c - IPPROTO_MUX = 0x12 - IPPROTO_ND = 0x4d - IPPROTO_NHRP = 0x36 - IPPROTO_NONE = 0x3b - IPPROTO_NSP = 0x1f - IPPROTO_NVPII = 0xb - IPPROTO_OLD_DIVERT = 0xfe - IPPROTO_OSPFIGP = 0x59 - IPPROTO_PFSYNC = 0xf0 - IPPROTO_PGM = 0x71 - IPPROTO_PIGP = 0x9 - IPPROTO_PIM = 0x67 - IPPROTO_PRM = 0x15 - IPPROTO_PUP = 0xc - IPPROTO_PVP = 0x4b - IPPROTO_RAW = 0xff - IPPROTO_RCCMON = 0xa - IPPROTO_RDP = 0x1b - IPPROTO_RESERVED_253 = 0xfd - IPPROTO_RESERVED_254 = 0xfe - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_RVD = 0x42 - IPPROTO_SATEXPAK = 0x40 - IPPROTO_SATMON = 0x45 - IPPROTO_SCCSP = 0x60 - IPPROTO_SCTP = 0x84 - IPPROTO_SDRP = 0x2a - IPPROTO_SEND = 0x103 - IPPROTO_SHIM6 = 0x8c - IPPROTO_SKIP = 0x39 - IPPROTO_SPACER = 0x7fff - IPPROTO_SRPC = 0x5a - IPPROTO_ST = 0x7 - IPPROTO_SVMTP = 0x52 - IPPROTO_SWIPE = 0x35 - IPPROTO_TCF = 0x57 - IPPROTO_TCP = 0x6 - IPPROTO_TLSP = 0x38 - IPPROTO_TP = 0x1d - IPPROTO_TPXX = 0x27 - IPPROTO_TRUNK1 = 0x17 - IPPROTO_TRUNK2 = 0x18 - IPPROTO_TTP = 0x54 - IPPROTO_UDP = 0x11 - IPPROTO_UDPLITE = 0x88 - IPPROTO_VINES = 0x53 - IPPROTO_VISA = 0x46 - IPPROTO_VMTP = 0x51 - IPPROTO_WBEXPAK = 0x4f - IPPROTO_WBMON = 0x4e - IPPROTO_WSN = 0x4a - IPPROTO_XNET = 0xf - IPPROTO_XTP = 0x24 - IPV6_AUTOFLOWLABEL = 0x3b - IPV6_BINDANY = 0x40 - IPV6_BINDMULTI = 0x41 - IPV6_BINDV6ONLY = 0x1b - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_DONTFRAG = 0x3e - IPV6_DSTOPTS = 0x32 - IPV6_FLOWID = 0x43 - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_LEN = 0x14 - IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FLOWTYPE = 0x44 - IPV6_FRAGTTL = 0x78 - IPV6_FW_ADD = 0x1e - IPV6_FW_DEL = 0x1f - IPV6_FW_FLUSH = 0x20 - IPV6_FW_GET = 0x22 - IPV6_FW_ZERO = 0x21 - IPV6_HLIMDEC = 0x1 - IPV6_HOPLIMIT = 0x2f - IPV6_HOPOPTS = 0x31 - IPV6_IPSEC_POLICY = 0x1c - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXOPTHDR = 0x800 - IPV6_MAXPACKET = 0xffff - IPV6_MAX_GROUP_SRC_FILTER = 0x200 - IPV6_MAX_MEMBERSHIPS = 0xfff - IPV6_MAX_SOCK_SRC_FILTER = 0x80 - IPV6_MMTU = 0x500 - IPV6_MSFILTER = 0x4a - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_ORIGDSTADDR = 0x48 - IPV6_PATHMTU = 0x2c - IPV6_PKTINFO = 0x2e - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_PREFER_TEMPADDR = 0x3f - IPV6_RECVDSTOPTS = 0x28 - IPV6_RECVFLOWID = 0x46 - IPV6_RECVHOPLIMIT = 0x25 - IPV6_RECVHOPOPTS = 0x27 - IPV6_RECVORIGDSTADDR = 0x48 - IPV6_RECVPATHMTU = 0x2b - IPV6_RECVPKTINFO = 0x24 - IPV6_RECVRSSBUCKETID = 0x47 - IPV6_RECVRTHDR = 0x26 - IPV6_RECVTCLASS = 0x39 - IPV6_RSSBUCKETID = 0x45 - IPV6_RSS_LISTEN_BUCKET = 0x42 - IPV6_RTHDR = 0x33 - IPV6_RTHDRDSTOPTS = 0x23 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x3d - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2a - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IPV6_VLAN_PCP = 0x4b - IP_ADD_MEMBERSHIP = 0xc - IP_ADD_SOURCE_MEMBERSHIP = 0x46 - IP_BINDANY = 0x18 - IP_BINDMULTI = 0x19 - IP_BLOCK_SOURCE = 0x48 - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DONTFRAG = 0x43 - IP_DROP_MEMBERSHIP = 0xd - IP_DROP_SOURCE_MEMBERSHIP = 0x47 - IP_DUMMYNET3 = 0x31 - IP_DUMMYNET_CONFIGURE = 0x3c - IP_DUMMYNET_DEL = 0x3d - IP_DUMMYNET_FLUSH = 0x3e - IP_DUMMYNET_GET = 0x40 - IP_FLOWID = 0x5a - IP_FLOWTYPE = 0x5b - IP_FW3 = 0x30 - IP_FW_ADD = 0x32 - IP_FW_DEL = 0x33 - IP_FW_FLUSH = 0x34 - IP_FW_GET = 0x36 - IP_FW_NAT_CFG = 0x38 - IP_FW_NAT_DEL = 0x39 - IP_FW_NAT_GET_CONFIG = 0x3a - IP_FW_NAT_GET_LOG = 0x3b - IP_FW_RESETLOG = 0x37 - IP_FW_TABLE_ADD = 0x28 - IP_FW_TABLE_DEL = 0x29 - IP_FW_TABLE_FLUSH = 0x2a - IP_FW_TABLE_GETSIZE = 0x2b - IP_FW_TABLE_LIST = 0x2c - IP_FW_ZERO = 0x35 - IP_HDRINCL = 0x2 - IP_IPSEC_POLICY = 0x15 - IP_MAXPACKET = 0xffff - IP_MAX_GROUP_SRC_FILTER = 0x200 - IP_MAX_MEMBERSHIPS = 0xfff - IP_MAX_SOCK_MUTE_FILTER = 0x80 - IP_MAX_SOCK_SRC_FILTER = 0x80 - IP_MF = 0x2000 - IP_MINTTL = 0x42 - IP_MSFILTER = 0x4a - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_MULTICAST_VIF = 0xe - IP_OFFMASK = 0x1fff - IP_ONESBCAST = 0x17 - IP_OPTIONS = 0x1 - IP_ORIGDSTADDR = 0x1b - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVFLOWID = 0x5d - IP_RECVIF = 0x14 - IP_RECVOPTS = 0x5 - IP_RECVORIGDSTADDR = 0x1b - IP_RECVRETOPTS = 0x6 - IP_RECVRSSBUCKETID = 0x5e - IP_RECVTOS = 0x44 - IP_RECVTTL = 0x41 - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_RSSBUCKETID = 0x5c - IP_RSS_LISTEN_BUCKET = 0x1a - IP_RSVP_OFF = 0x10 - IP_RSVP_ON = 0xf - IP_RSVP_VIF_OFF = 0x12 - IP_RSVP_VIF_ON = 0x11 - IP_SENDSRCADDR = 0x7 - IP_TOS = 0x3 - IP_TTL = 0x4 - IP_UNBLOCK_SOURCE = 0x49 - IP_VLAN_PCP = 0x4b - ISIG = 0x80 - ISTRIP = 0x20 - ITIMER_PROF = 0x2 - ITIMER_REAL = 0x0 - ITIMER_VIRTUAL = 0x1 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - KERN_HOSTNAME = 0xa - KERN_OSRELEASE = 0x2 - KERN_OSTYPE = 0x1 - KERN_VERSION = 0x4 - LOCAL_CONNWAIT = 0x4 - LOCAL_CREDS = 0x2 - LOCAL_PEERCRED = 0x1 - LOCAL_VENDOR = 0x80000000 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_AUTOSYNC = 0x7 - MADV_CORE = 0x9 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x5 - MADV_NOCORE = 0x8 - MADV_NORMAL = 0x0 - MADV_NOSYNC = 0x6 - MADV_PROTECT = 0xa - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_WILLNEED = 0x3 - MAP_32BIT = 0x80000 - MAP_ALIGNED_SUPER = 0x1000000 - MAP_ALIGNMENT_MASK = -0x1000000 - MAP_ALIGNMENT_SHIFT = 0x18 - MAP_ANON = 0x1000 - MAP_ANONYMOUS = 0x1000 - MAP_COPY = 0x2 - MAP_EXCL = 0x4000 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_GUARD = 0x2000 - MAP_HASSEMAPHORE = 0x200 - MAP_NOCORE = 0x20000 - MAP_NOSYNC = 0x800 - MAP_PREFAULT_READ = 0x40000 - MAP_PRIVATE = 0x2 - MAP_RESERVED0020 = 0x20 - MAP_RESERVED0040 = 0x40 - MAP_RESERVED0080 = 0x80 - MAP_RESERVED0100 = 0x100 - MAP_SHARED = 0x1 - MAP_STACK = 0x400 - MCAST_BLOCK_SOURCE = 0x54 - MCAST_EXCLUDE = 0x2 - MCAST_INCLUDE = 0x1 - MCAST_JOIN_GROUP = 0x50 - MCAST_JOIN_SOURCE_GROUP = 0x52 - MCAST_LEAVE_GROUP = 0x51 - MCAST_LEAVE_SOURCE_GROUP = 0x53 - MCAST_UNBLOCK_SOURCE = 0x55 - MCAST_UNDEFINED = 0x0 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MNT_ACLS = 0x8000000 - MNT_ASYNC = 0x40 - MNT_AUTOMOUNTED = 0x200000000 - MNT_BYFSID = 0x8000000 - MNT_CMDFLAGS = 0xd0f0000 - MNT_DEFEXPORTED = 0x200 - MNT_DELEXPORT = 0x20000 - MNT_EXKERB = 0x800 - MNT_EXPORTANON = 0x400 - MNT_EXPORTED = 0x100 - MNT_EXPUBLIC = 0x20000000 - MNT_EXRDONLY = 0x80 - MNT_FORCE = 0x80000 - MNT_GJOURNAL = 0x2000000 - MNT_IGNORE = 0x800000 - MNT_LAZY = 0x3 - MNT_LOCAL = 0x1000 - MNT_MULTILABEL = 0x4000000 - MNT_NFS4ACLS = 0x10 - MNT_NOATIME = 0x10000000 - MNT_NOCLUSTERR = 0x40000000 - MNT_NOCLUSTERW = 0x80000000 - MNT_NOEXEC = 0x4 - MNT_NONBUSY = 0x4000000 - MNT_NOSUID = 0x8 - MNT_NOSYMFOLLOW = 0x400000 - MNT_NOWAIT = 0x2 - MNT_QUOTA = 0x2000 - MNT_RDONLY = 0x1 - MNT_RELOAD = 0x40000 - MNT_ROOTFS = 0x4000 - MNT_SNAPSHOT = 0x1000000 - MNT_SOFTDEP = 0x200000 - MNT_SUIDDIR = 0x100000 - MNT_SUJ = 0x100000000 - MNT_SUSPEND = 0x4 - MNT_SYNCHRONOUS = 0x2 - MNT_UNION = 0x20 - MNT_UNTRUSTED = 0x800000000 - MNT_UPDATE = 0x10000 - MNT_UPDATEMASK = 0xad8d0807e - MNT_USER = 0x8000 - MNT_VERIFIED = 0x400000000 - MNT_VISFLAGMASK = 0xffef0ffff - MNT_WAIT = 0x1 - MSG_CMSG_CLOEXEC = 0x40000 - MSG_COMPAT = 0x8000 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOF = 0x100 - MSG_EOR = 0x8 - MSG_NBIO = 0x4000 - MSG_NOSIGNAL = 0x20000 - MSG_NOTIFICATION = 0x2000 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 - MSG_WAITFORONE = 0x80000 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x2 - MS_SYNC = 0x0 - NAME_MAX = 0xff - NET_RT_DUMP = 0x1 - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x3 - NET_RT_IFLISTL = 0x5 - NET_RT_IFMALIST = 0x4 - NFDBITS = 0x40 - NOFLSH = 0x80000000 - NOKERNINFO = 0x2000000 - NOTE_ABSTIME = 0x10 - NOTE_ATTRIB = 0x8 - NOTE_CHILD = 0x4 - NOTE_CLOSE = 0x100 - NOTE_CLOSE_WRITE = 0x200 - NOTE_DELETE = 0x1 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXTEND = 0x4 - NOTE_FFAND = 0x40000000 - NOTE_FFCOPY = 0xc0000000 - NOTE_FFCTRLMASK = 0xc0000000 - NOTE_FFLAGSMASK = 0xffffff - NOTE_FFNOP = 0x0 - NOTE_FFOR = 0x80000000 - NOTE_FILE_POLL = 0x2 - NOTE_FORK = 0x40000000 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_MSECONDS = 0x2 - NOTE_NSECONDS = 0x8 - NOTE_OPEN = 0x80 - NOTE_PCTRLMASK = 0xf0000000 - NOTE_PDATAMASK = 0xfffff - NOTE_READ = 0x400 - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_SECONDS = 0x1 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_TRIGGER = 0x1000000 - NOTE_USECONDS = 0x4 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - ONLCR = 0x2 - ONLRET = 0x40 - ONOCR = 0x20 - ONOEOT = 0x8 - OPOST = 0x1 - OXTABS = 0x4 - O_ACCMODE = 0x3 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x100000 - O_CREAT = 0x200 - O_DIRECT = 0x10000 - O_DIRECTORY = 0x20000 - O_EXCL = 0x800 - O_EXEC = 0x40000 - O_EXLOCK = 0x20 - O_FSYNC = 0x80 - O_NDELAY = 0x4 - O_NOCTTY = 0x8000 - O_NOFOLLOW = 0x100 - O_NONBLOCK = 0x4 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_RESOLVE_BENEATH = 0x800000 - O_SEARCH = 0x40000 - O_SHLOCK = 0x10 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_TTY_INIT = 0x80000 - O_VERIFY = 0x200000 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PIOD_READ_D = 0x1 - PIOD_READ_I = 0x3 - PIOD_WRITE_D = 0x2 - PIOD_WRITE_I = 0x4 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - PTRACE_DEFAULT = 0x1 - PTRACE_EXEC = 0x1 - PTRACE_FORK = 0x8 - PTRACE_LWP = 0x10 - PTRACE_SCE = 0x2 - PTRACE_SCX = 0x4 - PTRACE_SYSCALL = 0x6 - PTRACE_VFORK = 0x20 - PT_ATTACH = 0xa - PT_CLEARSTEP = 0x10 - PT_CONTINUE = 0x7 - PT_DETACH = 0xb - PT_FIRSTMACH = 0x40 - PT_FOLLOW_FORK = 0x17 - PT_GETDBREGS = 0x25 - PT_GETFPREGS = 0x23 - PT_GETLWPLIST = 0xf - PT_GETNUMLWPS = 0xe - PT_GETREGS = 0x21 - PT_GET_EVENT_MASK = 0x19 - PT_GET_SC_ARGS = 0x1b - PT_GET_SC_RET = 0x1c - PT_IO = 0xc - PT_KILL = 0x8 - PT_LWPINFO = 0xd - PT_LWP_EVENTS = 0x18 - PT_READ_D = 0x2 - PT_READ_I = 0x1 - PT_RESUME = 0x13 - PT_SETDBREGS = 0x26 - PT_SETFPREGS = 0x24 - PT_SETREGS = 0x22 - PT_SETSTEP = 0x11 - PT_SET_EVENT_MASK = 0x1a - PT_STEP = 0x9 - PT_SUSPEND = 0x12 - PT_SYSCALL = 0x16 - PT_TO_SCE = 0x14 - PT_TO_SCX = 0x15 - PT_TRACE_ME = 0x0 - PT_VM_ENTRY = 0x29 - PT_VM_TIMESTAMP = 0x28 - PT_WRITE_D = 0x5 - PT_WRITE_I = 0x4 - P_ZONEID = 0xc - RLIMIT_AS = 0xa - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_MEMLOCK = 0x6 - RLIMIT_NOFILE = 0x8 - RLIMIT_NPROC = 0x7 - RLIMIT_RSS = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_MAX = 0x8 - RTAX_NETMASK = 0x2 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_NETMASK = 0x4 - RTF_BLACKHOLE = 0x1000 - RTF_BROADCAST = 0x400000 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_FIXEDMTU = 0x80000 - RTF_FMASK = 0x1004d808 - RTF_GATEWAY = 0x2 - RTF_GWFLAG_COMPAT = 0x80000000 - RTF_HOST = 0x4 - RTF_LLDATA = 0x400 - RTF_LLINFO = 0x400 - RTF_LOCAL = 0x200000 - RTF_MODIFIED = 0x20 - RTF_MULTICAST = 0x800000 - RTF_PINNED = 0x100000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_PROTO3 = 0x40000 - RTF_REJECT = 0x8 - RTF_RNH_LOCKED = 0x40000000 - RTF_STATIC = 0x800 - RTF_STICKY = 0x10000000 - RTF_UP = 0x1 - RTF_XRESOLVE = 0x200 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_DELMADDR = 0x10 - RTM_GET = 0x4 - RTM_IEEE80211 = 0x12 - RTM_IFANNOUNCE = 0x11 - RTM_IFINFO = 0xe - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_NEWMADDR = 0xf - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RTV_WEIGHT = 0x100 - RT_ALL_FIBS = -0x1 - RT_BLACKHOLE = 0x40 - RT_DEFAULT_FIB = 0x0 - RT_HAS_GW = 0x80 - RT_HAS_HEADER = 0x10 - RT_HAS_HEADER_BIT = 0x4 - RT_L2_ME = 0x4 - RT_L2_ME_BIT = 0x2 - RT_LLE_CACHE = 0x100 - RT_MAY_LOOP = 0x8 - RT_MAY_LOOP_BIT = 0x3 - RT_REJECT = 0x20 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - RUSAGE_THREAD = 0x1 - SCM_BINTIME = 0x4 - SCM_CREDS = 0x3 - SCM_MONOTONIC = 0x6 - SCM_REALTIME = 0x5 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x2 - SCM_TIME_INFO = 0x7 - SEEK_CUR = 0x1 - SEEK_DATA = 0x3 - SEEK_END = 0x2 - SEEK_HOLE = 0x4 - SEEK_SET = 0x0 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80206931 - SIOCAIFADDR = 0x8040691a - SIOCAIFGROUP = 0x80286987 - SIOCATMARK = 0x40047307 - SIOCDELMULTI = 0x80206932 - SIOCDIFADDR = 0x80206919 - SIOCDIFGROUP = 0x80286989 - SIOCDIFPHYADDR = 0x80206949 - SIOCGDRVSPEC = 0xc028697b - SIOCGETSGCNT = 0xc0207210 - SIOCGETVIFCNT = 0xc028720f - SIOCGHIWAT = 0x40047301 - SIOCGHWADDR = 0xc020693e - SIOCGI2C = 0xc020693d - SIOCGIFADDR = 0xc0206921 - SIOCGIFALIAS = 0xc044692d - SIOCGIFBRDADDR = 0xc0206923 - SIOCGIFCAP = 0xc020691f - SIOCGIFCONF = 0xc0106924 - SIOCGIFDESCR = 0xc020692a - SIOCGIFDOWNREASON = 0xc058699a - SIOCGIFDSTADDR = 0xc0206922 - SIOCGIFFIB = 0xc020695c - SIOCGIFFLAGS = 0xc0206911 - SIOCGIFGENERIC = 0xc020693a - SIOCGIFGMEMB = 0xc028698a - SIOCGIFGROUP = 0xc0286988 - SIOCGIFINDEX = 0xc0206920 - SIOCGIFMAC = 0xc0206926 - SIOCGIFMEDIA = 0xc0306938 - SIOCGIFMETRIC = 0xc0206917 - SIOCGIFMTU = 0xc0206933 - SIOCGIFNETMASK = 0xc0206925 - SIOCGIFPDSTADDR = 0xc0206948 - SIOCGIFPHYS = 0xc0206935 - SIOCGIFPSRCADDR = 0xc0206947 - SIOCGIFRSSHASH = 0xc0186997 - SIOCGIFRSSKEY = 0xc0946996 - SIOCGIFSTATUS = 0xc331693b - SIOCGIFXMEDIA = 0xc030698b - SIOCGLANPCP = 0xc0206998 - SIOCGLOWAT = 0x40047303 - SIOCGPGRP = 0x40047309 - SIOCGPRIVATE_0 = 0xc0206950 - SIOCGPRIVATE_1 = 0xc0206951 - SIOCGTUNFIB = 0xc020695e - SIOCIFCREATE = 0xc020697a - SIOCIFCREATE2 = 0xc020697c - SIOCIFDESTROY = 0x80206979 - SIOCIFGCLONERS = 0xc0106978 - SIOCSDRVSPEC = 0x8028697b - SIOCSHIWAT = 0x80047300 - SIOCSIFADDR = 0x8020690c - SIOCSIFBRDADDR = 0x80206913 - SIOCSIFCAP = 0x8020691e - SIOCSIFDESCR = 0x80206929 - SIOCSIFDSTADDR = 0x8020690e - SIOCSIFFIB = 0x8020695d - SIOCSIFFLAGS = 0x80206910 - SIOCSIFGENERIC = 0x80206939 - SIOCSIFLLADDR = 0x8020693c - SIOCSIFMAC = 0x80206927 - SIOCSIFMEDIA = 0xc0206937 - SIOCSIFMETRIC = 0x80206918 - SIOCSIFMTU = 0x80206934 - SIOCSIFNAME = 0x80206928 - SIOCSIFNETMASK = 0x80206916 - SIOCSIFPHYADDR = 0x80406946 - SIOCSIFPHYS = 0x80206936 - SIOCSIFRVNET = 0xc020695b - SIOCSIFVNET = 0xc020695a - SIOCSLANPCP = 0x80206999 - SIOCSLOWAT = 0x80047302 - SIOCSPGRP = 0x80047308 - SIOCSTUNFIB = 0x8020695f - SOCK_CLOEXEC = 0x10000000 - SOCK_DGRAM = 0x2 - SOCK_MAXADDRLEN = 0xff - SOCK_NONBLOCK = 0x20000000 - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_LOCAL = 0x0 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_ACCEPTFILTER = 0x1000 - SO_BINTIME = 0x2000 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 - SO_DOMAIN = 0x1019 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LABEL = 0x1009 - SO_LINGER = 0x80 - SO_LISTENINCQLEN = 0x1013 - SO_LISTENQLEN = 0x1012 - SO_LISTENQLIMIT = 0x1011 - SO_MAX_PACING_RATE = 0x1018 - SO_NOSIGPIPE = 0x800 - SO_NO_DDP = 0x8000 - SO_NO_OFFLOAD = 0x4000 - SO_OOBINLINE = 0x100 - SO_PEERLABEL = 0x1010 - SO_PROTOCOL = 0x1016 - SO_PROTOTYPE = 0x1016 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 - SO_RERROR = 0x20000 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_REUSEPORT_LB = 0x10000 - SO_SETFIB = 0x1014 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_TIMESTAMP = 0x400 - SO_TS_BINTIME = 0x1 - SO_TS_CLOCK = 0x1017 - SO_TS_CLOCK_MAX = 0x3 - SO_TS_DEFAULT = 0x0 - SO_TS_MONOTONIC = 0x3 - SO_TS_REALTIME = 0x2 - SO_TS_REALTIME_MICRO = 0x0 - SO_TYPE = 0x1008 - SO_USELOOPBACK = 0x40 - SO_USER_COOKIE = 0x1015 - SO_VENDOR = 0x80000000 - S_BLKSIZE = 0x200 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFLNK = 0xa000 - S_IFMT = 0xf000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IFWHT = 0xe000 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISTXT = 0x200 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXGRP = 0x8 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - TAB0 = 0x0 - TAB3 = 0x4 - TABDLY = 0x4 - TCIFLUSH = 0x1 - TCIOFF = 0x3 - TCIOFLUSH = 0x3 - TCION = 0x4 - TCOFLUSH = 0x2 - TCOOFF = 0x1 - TCOON = 0x2 - TCPOPT_EOL = 0x0 - TCPOPT_FAST_OPEN = 0x22 - TCPOPT_MAXSEG = 0x2 - TCPOPT_NOP = 0x1 - TCPOPT_PAD = 0x0 - TCPOPT_SACK = 0x5 - TCPOPT_SACK_PERMITTED = 0x4 - TCPOPT_SIGNATURE = 0x13 - TCPOPT_TIMESTAMP = 0x8 - TCPOPT_WINDOW = 0x3 - TCP_BBR_ACK_COMP_ALG = 0x448 - TCP_BBR_ALGORITHM = 0x43b - TCP_BBR_DRAIN_INC_EXTRA = 0x43c - TCP_BBR_DRAIN_PG = 0x42e - TCP_BBR_EXTRA_GAIN = 0x449 - TCP_BBR_EXTRA_STATE = 0x453 - TCP_BBR_FLOOR_MIN_TSO = 0x454 - TCP_BBR_HDWR_PACE = 0x451 - TCP_BBR_HOLD_TARGET = 0x436 - TCP_BBR_IWINTSO = 0x42b - TCP_BBR_LOWGAIN_FD = 0x436 - TCP_BBR_LOWGAIN_HALF = 0x435 - TCP_BBR_LOWGAIN_THRESH = 0x434 - TCP_BBR_MAX_RTO = 0x439 - TCP_BBR_MIN_RTO = 0x438 - TCP_BBR_MIN_TOPACEOUT = 0x455 - TCP_BBR_ONE_RETRAN = 0x431 - TCP_BBR_PACE_CROSS = 0x442 - TCP_BBR_PACE_DEL_TAR = 0x43f - TCP_BBR_PACE_OH = 0x435 - TCP_BBR_PACE_PER_SEC = 0x43e - TCP_BBR_PACE_SEG_MAX = 0x440 - TCP_BBR_PACE_SEG_MIN = 0x441 - TCP_BBR_POLICER_DETECT = 0x457 - TCP_BBR_PROBE_RTT_GAIN = 0x44d - TCP_BBR_PROBE_RTT_INT = 0x430 - TCP_BBR_PROBE_RTT_LEN = 0x44e - TCP_BBR_RACK_RTT_USE = 0x44a - TCP_BBR_RECFORCE = 0x42c - TCP_BBR_REC_OVER_HPTS = 0x43a - TCP_BBR_RETRAN_WTSO = 0x44b - TCP_BBR_RWND_IS_APP = 0x42f - TCP_BBR_SEND_IWND_IN_TSO = 0x44f - TCP_BBR_STARTUP_EXIT_EPOCH = 0x43d - TCP_BBR_STARTUP_LOSS_EXIT = 0x432 - TCP_BBR_STARTUP_PG = 0x42d - TCP_BBR_TMR_PACE_OH = 0x448 - TCP_BBR_TSLIMITS = 0x434 - TCP_BBR_TSTMP_RAISES = 0x456 - TCP_BBR_UNLIMITED = 0x43b - TCP_BBR_USEDEL_RATE = 0x437 - TCP_BBR_USE_LOWGAIN = 0x433 - TCP_BBR_USE_RACK_CHEAT = 0x450 - TCP_BBR_UTTER_MAX_TSO = 0x452 - TCP_CA_NAME_MAX = 0x10 - TCP_CCALGOOPT = 0x41 - TCP_CONGESTION = 0x40 - TCP_DATA_AFTER_CLOSE = 0x44c - TCP_DELACK = 0x48 - TCP_FASTOPEN = 0x401 - TCP_FASTOPEN_MAX_COOKIE_LEN = 0x10 - TCP_FASTOPEN_MIN_COOKIE_LEN = 0x4 - TCP_FASTOPEN_PSK_LEN = 0x10 - TCP_FUNCTION_BLK = 0x2000 - TCP_FUNCTION_NAME_LEN_MAX = 0x20 - TCP_INFO = 0x20 - TCP_KEEPCNT = 0x400 - TCP_KEEPIDLE = 0x100 - TCP_KEEPINIT = 0x80 - TCP_KEEPINTVL = 0x200 - TCP_LOG = 0x22 - TCP_LOGBUF = 0x23 - TCP_LOGDUMP = 0x25 - TCP_LOGDUMPID = 0x26 - TCP_LOGID = 0x24 - TCP_LOG_ID_LEN = 0x40 - TCP_MAXBURST = 0x4 - TCP_MAXHLEN = 0x3c - TCP_MAXOLEN = 0x28 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x4 - TCP_MAX_WINSHIFT = 0xe - TCP_MD5SIG = 0x10 - TCP_MINMSS = 0xd8 - TCP_MSS = 0x218 - TCP_NODELAY = 0x1 - TCP_NOOPT = 0x8 - TCP_NOPUSH = 0x4 - TCP_PCAP_IN = 0x1000 - TCP_PCAP_OUT = 0x800 - TCP_RACK_EARLY_RECOV = 0x423 - TCP_RACK_EARLY_SEG = 0x424 - TCP_RACK_GP_INCREASE = 0x446 - TCP_RACK_IDLE_REDUCE_HIGH = 0x444 - TCP_RACK_MIN_PACE = 0x445 - TCP_RACK_MIN_PACE_SEG = 0x446 - TCP_RACK_MIN_TO = 0x422 - TCP_RACK_PACE_ALWAYS = 0x41f - TCP_RACK_PACE_MAX_SEG = 0x41e - TCP_RACK_PACE_REDUCE = 0x41d - TCP_RACK_PKT_DELAY = 0x428 - TCP_RACK_PROP = 0x41b - TCP_RACK_PROP_RATE = 0x420 - TCP_RACK_PRR_SENDALOT = 0x421 - TCP_RACK_REORD_FADE = 0x426 - TCP_RACK_REORD_THRESH = 0x425 - TCP_RACK_TLP_INC_VAR = 0x429 - TCP_RACK_TLP_REDUCE = 0x41c - TCP_RACK_TLP_THRESH = 0x427 - TCP_RACK_TLP_USE = 0x447 - TCP_VENDOR = 0x80000000 - TCSAFLUSH = 0x2 - TIMER_ABSTIME = 0x1 - TIMER_RELTIME = 0x0 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCONS = 0x80047462 - TIOCDRAIN = 0x2000745e - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLUSH = 0x80047410 - TIOCGDRAINWAIT = 0x40047456 - TIOCGETA = 0x402c7413 - TIOCGETD = 0x4004741a - TIOCGPGRP = 0x40047477 - TIOCGPTN = 0x4004740f - TIOCGSID = 0x40047463 - TIOCGWINSZ = 0x40087468 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGDTRWAIT = 0x4004745a - TIOCMGET = 0x4004746a - TIOCMSDTRWAIT = 0x8004745b - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DCD = 0x40 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCPTMASTER = 0x2000741c - TIOCSBRK = 0x2000747b - TIOCSCTTY = 0x20007461 - TIOCSDRAINWAIT = 0x80047457 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x802c7414 - TIOCSETAF = 0x802c7416 - TIOCSETAW = 0x802c7415 - TIOCSETD = 0x8004741b - TIOCSIG = 0x2004745f - TIOCSPGRP = 0x80047476 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x20007465 - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCTIMESTAMP = 0x40107459 - TIOCUCNTL = 0x80047466 - TOSTOP = 0x400000 - UTIME_NOW = -0x1 - UTIME_OMIT = -0x2 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VERASE2 = 0x7 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 - VM_BCACHE_SIZE_MAX = 0x19000000 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VTIME = 0x11 - VWERASE = 0x4 - WCONTINUED = 0x4 - WCOREFLAG = 0x80 - WEXITED = 0x10 - WLINUXCLONE = 0x80000000 - WNOHANG = 0x1 - WNOWAIT = 0x8 - WSTOPPED = 0x2 - WTRAPPED = 0x20 - WUNTRACED = 0x2 -) - -// Errors -const ( - E2BIG = syscall.Errno(0x7) - EACCES = syscall.Errno(0xd) - EADDRINUSE = syscall.Errno(0x30) - EADDRNOTAVAIL = syscall.Errno(0x31) - EAFNOSUPPORT = syscall.Errno(0x2f) - EAGAIN = syscall.Errno(0x23) - EALREADY = syscall.Errno(0x25) - EAUTH = syscall.Errno(0x50) - EBADF = syscall.Errno(0x9) - EBADMSG = syscall.Errno(0x59) - EBADRPC = syscall.Errno(0x48) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x55) - ECAPMODE = syscall.Errno(0x5e) - ECHILD = syscall.Errno(0xa) - ECONNABORTED = syscall.Errno(0x35) - ECONNREFUSED = syscall.Errno(0x3d) - ECONNRESET = syscall.Errno(0x36) - EDEADLK = syscall.Errno(0xb) - EDESTADDRREQ = syscall.Errno(0x27) - EDOM = syscall.Errno(0x21) - EDOOFUS = syscall.Errno(0x58) - EDQUOT = syscall.Errno(0x45) - EEXIST = syscall.Errno(0x11) - EFAULT = syscall.Errno(0xe) - EFBIG = syscall.Errno(0x1b) - EFTYPE = syscall.Errno(0x4f) - EHOSTDOWN = syscall.Errno(0x40) - EHOSTUNREACH = syscall.Errno(0x41) - EIDRM = syscall.Errno(0x52) - EILSEQ = syscall.Errno(0x56) - EINPROGRESS = syscall.Errno(0x24) - EINTEGRITY = syscall.Errno(0x61) - EINTR = syscall.Errno(0x4) - EINVAL = syscall.Errno(0x16) - EIO = syscall.Errno(0x5) - EISCONN = syscall.Errno(0x38) - EISDIR = syscall.Errno(0x15) - ELAST = syscall.Errno(0x61) - ELOOP = syscall.Errno(0x3e) - EMFILE = syscall.Errno(0x18) - EMLINK = syscall.Errno(0x1f) - EMSGSIZE = syscall.Errno(0x28) - EMULTIHOP = syscall.Errno(0x5a) - ENAMETOOLONG = syscall.Errno(0x3f) - ENEEDAUTH = syscall.Errno(0x51) - ENETDOWN = syscall.Errno(0x32) - ENETRESET = syscall.Errno(0x34) - ENETUNREACH = syscall.Errno(0x33) - ENFILE = syscall.Errno(0x17) - ENOATTR = syscall.Errno(0x57) - ENOBUFS = syscall.Errno(0x37) - ENODEV = syscall.Errno(0x13) - ENOENT = syscall.Errno(0x2) - ENOEXEC = syscall.Errno(0x8) - ENOLCK = syscall.Errno(0x4d) - ENOLINK = syscall.Errno(0x5b) - ENOMEM = syscall.Errno(0xc) - ENOMSG = syscall.Errno(0x53) - ENOPROTOOPT = syscall.Errno(0x2a) - ENOSPC = syscall.Errno(0x1c) - ENOSYS = syscall.Errno(0x4e) - ENOTBLK = syscall.Errno(0xf) - ENOTCAPABLE = syscall.Errno(0x5d) - ENOTCONN = syscall.Errno(0x39) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x42) - ENOTRECOVERABLE = syscall.Errno(0x5f) - ENOTSOCK = syscall.Errno(0x26) - ENOTSUP = syscall.Errno(0x2d) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x2d) - EOVERFLOW = syscall.Errno(0x54) - EOWNERDEAD = syscall.Errno(0x60) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x2e) - EPIPE = syscall.Errno(0x20) - EPROCLIM = syscall.Errno(0x43) - EPROCUNAVAIL = syscall.Errno(0x4c) - EPROGMISMATCH = syscall.Errno(0x4b) - EPROGUNAVAIL = syscall.Errno(0x4a) - EPROTO = syscall.Errno(0x5c) - EPROTONOSUPPORT = syscall.Errno(0x2b) - EPROTOTYPE = syscall.Errno(0x29) - ERANGE = syscall.Errno(0x22) - EREMOTE = syscall.Errno(0x47) - EROFS = syscall.Errno(0x1e) - ERPCMISMATCH = syscall.Errno(0x49) - ESHUTDOWN = syscall.Errno(0x3a) - ESOCKTNOSUPPORT = syscall.Errno(0x2c) - ESPIPE = syscall.Errno(0x1d) - ESRCH = syscall.Errno(0x3) - ESTALE = syscall.Errno(0x46) - ETIMEDOUT = syscall.Errno(0x3c) - ETOOMANYREFS = syscall.Errno(0x3b) - ETXTBSY = syscall.Errno(0x1a) - EUSERS = syscall.Errno(0x44) - EWOULDBLOCK = syscall.Errno(0x23) - EXDEV = syscall.Errno(0x12) -) - -// Signals -const ( - SIGABRT = syscall.Signal(0x6) - SIGALRM = syscall.Signal(0xe) - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x14) - SIGCONT = syscall.Signal(0x13) - SIGEMT = syscall.Signal(0x7) - SIGFPE = syscall.Signal(0x8) - SIGHUP = syscall.Signal(0x1) - SIGILL = syscall.Signal(0x4) - SIGINFO = syscall.Signal(0x1d) - SIGINT = syscall.Signal(0x2) - SIGIO = syscall.Signal(0x17) - SIGIOT = syscall.Signal(0x6) - SIGKILL = syscall.Signal(0x9) - SIGLIBRT = syscall.Signal(0x21) - SIGLWP = syscall.Signal(0x20) - SIGPIPE = syscall.Signal(0xd) - SIGPROF = syscall.Signal(0x1b) - SIGQUIT = syscall.Signal(0x3) - SIGSEGV = syscall.Signal(0xb) - SIGSTOP = syscall.Signal(0x11) - SIGSYS = syscall.Signal(0xc) - SIGTERM = syscall.Signal(0xf) - SIGTHR = syscall.Signal(0x20) - SIGTRAP = syscall.Signal(0x5) - SIGTSTP = syscall.Signal(0x12) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x10) - SIGUSR1 = syscall.Signal(0x1e) - SIGUSR2 = syscall.Signal(0x1f) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "device not configured"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EDEADLK", "resource deadlock avoided"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "cross-device link"}, - {19, "ENODEV", "operation not supported by device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "result too large"}, - {35, "EWOULDBLOCK", "resource temporarily unavailable"}, - {36, "EINPROGRESS", "operation now in progress"}, - {37, "EALREADY", "operation already in progress"}, - {38, "ENOTSOCK", "socket operation on non-socket"}, - {39, "EDESTADDRREQ", "destination address required"}, - {40, "EMSGSIZE", "message too long"}, - {41, "EPROTOTYPE", "protocol wrong type for socket"}, - {42, "ENOPROTOOPT", "protocol not available"}, - {43, "EPROTONOSUPPORT", "protocol not supported"}, - {44, "ESOCKTNOSUPPORT", "socket type not supported"}, - {45, "EOPNOTSUPP", "operation not supported"}, - {46, "EPFNOSUPPORT", "protocol family not supported"}, - {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, - {48, "EADDRINUSE", "address already in use"}, - {49, "EADDRNOTAVAIL", "can't assign requested address"}, - {50, "ENETDOWN", "network is down"}, - {51, "ENETUNREACH", "network is unreachable"}, - {52, "ENETRESET", "network dropped connection on reset"}, - {53, "ECONNABORTED", "software caused connection abort"}, - {54, "ECONNRESET", "connection reset by peer"}, - {55, "ENOBUFS", "no buffer space available"}, - {56, "EISCONN", "socket is already connected"}, - {57, "ENOTCONN", "socket is not connected"}, - {58, "ESHUTDOWN", "can't send after socket shutdown"}, - {59, "ETOOMANYREFS", "too many references: can't splice"}, - {60, "ETIMEDOUT", "operation timed out"}, - {61, "ECONNREFUSED", "connection refused"}, - {62, "ELOOP", "too many levels of symbolic links"}, - {63, "ENAMETOOLONG", "file name too long"}, - {64, "EHOSTDOWN", "host is down"}, - {65, "EHOSTUNREACH", "no route to host"}, - {66, "ENOTEMPTY", "directory not empty"}, - {67, "EPROCLIM", "too many processes"}, - {68, "EUSERS", "too many users"}, - {69, "EDQUOT", "disc quota exceeded"}, - {70, "ESTALE", "stale NFS file handle"}, - {71, "EREMOTE", "too many levels of remote in path"}, - {72, "EBADRPC", "RPC struct is bad"}, - {73, "ERPCMISMATCH", "RPC version wrong"}, - {74, "EPROGUNAVAIL", "RPC prog. not avail"}, - {75, "EPROGMISMATCH", "program version wrong"}, - {76, "EPROCUNAVAIL", "bad procedure for program"}, - {77, "ENOLCK", "no locks available"}, - {78, "ENOSYS", "function not implemented"}, - {79, "EFTYPE", "inappropriate file type or format"}, - {80, "EAUTH", "authentication error"}, - {81, "ENEEDAUTH", "need authenticator"}, - {82, "EIDRM", "identifier removed"}, - {83, "ENOMSG", "no message of desired type"}, - {84, "EOVERFLOW", "value too large to be stored in data type"}, - {85, "ECANCELED", "operation canceled"}, - {86, "EILSEQ", "illegal byte sequence"}, - {87, "ENOATTR", "attribute not found"}, - {88, "EDOOFUS", "programming error"}, - {89, "EBADMSG", "bad message"}, - {90, "EMULTIHOP", "multihop attempted"}, - {91, "ENOLINK", "link has been severed"}, - {92, "EPROTO", "protocol error"}, - {93, "ENOTCAPABLE", "capabilities insufficient"}, - {94, "ECAPMODE", "not permitted in capability mode"}, - {95, "ENOTRECOVERABLE", "state not recoverable"}, - {96, "EOWNERDEAD", "previous owner died"}, - {97, "EINTEGRITY", "integrity check failed"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, - {6, "SIGIOT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGURG", "urgent I/O condition"}, - {17, "SIGSTOP", "suspended (signal)"}, - {18, "SIGTSTP", "suspended"}, - {19, "SIGCONT", "continued"}, - {20, "SIGCHLD", "child exited"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGIO", "I/O possible"}, - {24, "SIGXCPU", "cputime limit exceeded"}, - {25, "SIGXFSZ", "filesize limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window size changes"}, - {29, "SIGINFO", "information request"}, - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, - {32, "SIGTHR", "unknown signal"}, - {33, "SIGLIBRT", "unknown signal"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_riscv64.go deleted file mode 100644 index 341b4d9..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_riscv64.go +++ /dev/null @@ -1,2148 +0,0 @@ -// mkerrors.sh -m64 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build riscv64 && freebsd -// +build riscv64,freebsd - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -m64 _const.go - -package unix - -import "syscall" - -const ( - AF_APPLETALK = 0x10 - AF_ARP = 0x23 - AF_ATM = 0x1e - AF_BLUETOOTH = 0x24 - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1a - AF_ECMA = 0x8 - AF_HYLINK = 0xf - AF_HYPERV = 0x2b - AF_IEEE80211 = 0x25 - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x1c - AF_INET6_SDP = 0x2a - AF_INET_SDP = 0x28 - AF_IPX = 0x17 - AF_ISDN = 0x1a - AF_ISO = 0x7 - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x2b - AF_NATM = 0x1d - AF_NETBIOS = 0x6 - AF_NETGRAPH = 0x20 - AF_OSI = 0x7 - AF_PUP = 0x4 - AF_ROUTE = 0x11 - AF_SCLUSTER = 0x22 - AF_SIP = 0x18 - AF_SLOW = 0x21 - AF_SNA = 0xb - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - AF_VENDOR00 = 0x27 - AF_VENDOR01 = 0x29 - AF_VENDOR03 = 0x2d - AF_VENDOR04 = 0x2f - AF_VENDOR05 = 0x31 - AF_VENDOR06 = 0x33 - AF_VENDOR07 = 0x35 - AF_VENDOR08 = 0x37 - AF_VENDOR09 = 0x39 - AF_VENDOR10 = 0x3b - AF_VENDOR11 = 0x3d - AF_VENDOR12 = 0x3f - AF_VENDOR13 = 0x41 - AF_VENDOR14 = 0x43 - AF_VENDOR15 = 0x45 - AF_VENDOR16 = 0x47 - AF_VENDOR17 = 0x49 - AF_VENDOR18 = 0x4b - AF_VENDOR19 = 0x4d - AF_VENDOR20 = 0x4f - AF_VENDOR21 = 0x51 - AF_VENDOR22 = 0x53 - AF_VENDOR23 = 0x55 - AF_VENDOR24 = 0x57 - AF_VENDOR25 = 0x59 - AF_VENDOR26 = 0x5b - AF_VENDOR27 = 0x5d - AF_VENDOR28 = 0x5f - AF_VENDOR29 = 0x61 - AF_VENDOR30 = 0x63 - AF_VENDOR31 = 0x65 - AF_VENDOR32 = 0x67 - AF_VENDOR33 = 0x69 - AF_VENDOR34 = 0x6b - AF_VENDOR35 = 0x6d - AF_VENDOR36 = 0x6f - AF_VENDOR37 = 0x71 - AF_VENDOR38 = 0x73 - AF_VENDOR39 = 0x75 - AF_VENDOR40 = 0x77 - AF_VENDOR41 = 0x79 - AF_VENDOR42 = 0x7b - AF_VENDOR43 = 0x7d - AF_VENDOR44 = 0x7f - AF_VENDOR45 = 0x81 - AF_VENDOR46 = 0x83 - AF_VENDOR47 = 0x85 - ALTWERASE = 0x200 - B0 = 0x0 - B1000000 = 0xf4240 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1500000 = 0x16e360 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B2000000 = 0x1e8480 - B230400 = 0x38400 - B2400 = 0x960 - B2500000 = 0x2625a0 - B28800 = 0x7080 - B300 = 0x12c - B3000000 = 0x2dc6c0 - B3500000 = 0x3567e0 - B38400 = 0x9600 - B4000000 = 0x3d0900 - B460800 = 0x70800 - B4800 = 0x12c0 - B50 = 0x32 - B500000 = 0x7a120 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B921600 = 0xe1000 - B9600 = 0x2580 - BIOCFEEDBACK = 0x8004427c - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDIRECTION = 0x40044276 - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc0104279 - BIOCGETBUFMODE = 0x4004427d - BIOCGETIF = 0x4020426b - BIOCGETZMAX = 0x4008427f - BIOCGHDRCMPLT = 0x40044274 - BIOCGRSIG = 0x40044272 - BIOCGRTIMEOUT = 0x4010426e - BIOCGSEESENT = 0x40044276 - BIOCGSTATS = 0x4008426f - BIOCGTSTAMP = 0x40044283 - BIOCIMMEDIATE = 0x80044270 - BIOCLOCK = 0x2000427a - BIOCPROMISC = 0x20004269 - BIOCROTZBUF = 0x40184280 - BIOCSBLEN = 0xc0044266 - BIOCSDIRECTION = 0x80044277 - BIOCSDLT = 0x80044278 - BIOCSETBUFMODE = 0x8004427e - BIOCSETF = 0x80104267 - BIOCSETFNR = 0x80104282 - BIOCSETIF = 0x8020426c - BIOCSETVLANPCP = 0x80044285 - BIOCSETWF = 0x8010427b - BIOCSETZBUF = 0x80184281 - BIOCSHDRCMPLT = 0x80044275 - BIOCSRSIG = 0x80044273 - BIOCSRTIMEOUT = 0x8010426d - BIOCSSEESENT = 0x80044277 - BIOCSTSTAMP = 0x80044284 - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x8 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_BUFMODE_BUFFER = 0x1 - BPF_BUFMODE_ZBUF = 0x2 - BPF_DIV = 0x30 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x80000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MOD = 0x90 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_T_BINTIME = 0x2 - BPF_T_BINTIME_FAST = 0x102 - BPF_T_BINTIME_MONOTONIC = 0x202 - BPF_T_BINTIME_MONOTONIC_FAST = 0x302 - BPF_T_FAST = 0x100 - BPF_T_FLAG_MASK = 0x300 - BPF_T_FORMAT_MASK = 0x3 - BPF_T_MICROTIME = 0x0 - BPF_T_MICROTIME_FAST = 0x100 - BPF_T_MICROTIME_MONOTONIC = 0x200 - BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 - BPF_T_MONOTONIC = 0x200 - BPF_T_MONOTONIC_FAST = 0x300 - BPF_T_NANOTIME = 0x1 - BPF_T_NANOTIME_FAST = 0x101 - BPF_T_NANOTIME_MONOTONIC = 0x201 - BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 - BPF_T_NONE = 0x3 - BPF_T_NORMAL = 0x0 - BPF_W = 0x0 - BPF_X = 0x8 - BPF_XOR = 0xa0 - BRKINT = 0x2 - CAP_ACCEPT = 0x200000020000000 - CAP_ACL_CHECK = 0x400000000010000 - CAP_ACL_DELETE = 0x400000000020000 - CAP_ACL_GET = 0x400000000040000 - CAP_ACL_SET = 0x400000000080000 - CAP_ALL0 = 0x20007ffffffffff - CAP_ALL1 = 0x4000000001fffff - CAP_BIND = 0x200000040000000 - CAP_BINDAT = 0x200008000000400 - CAP_CHFLAGSAT = 0x200000000001400 - CAP_CONNECT = 0x200000080000000 - CAP_CONNECTAT = 0x200010000000400 - CAP_CREATE = 0x200000000000040 - CAP_EVENT = 0x400000000000020 - CAP_EXTATTR_DELETE = 0x400000000001000 - CAP_EXTATTR_GET = 0x400000000002000 - CAP_EXTATTR_LIST = 0x400000000004000 - CAP_EXTATTR_SET = 0x400000000008000 - CAP_FCHDIR = 0x200000000000800 - CAP_FCHFLAGS = 0x200000000001000 - CAP_FCHMOD = 0x200000000002000 - CAP_FCHMODAT = 0x200000000002400 - CAP_FCHOWN = 0x200000000004000 - CAP_FCHOWNAT = 0x200000000004400 - CAP_FCNTL = 0x200000000008000 - CAP_FCNTL_ALL = 0x78 - CAP_FCNTL_GETFL = 0x8 - CAP_FCNTL_GETOWN = 0x20 - CAP_FCNTL_SETFL = 0x10 - CAP_FCNTL_SETOWN = 0x40 - CAP_FEXECVE = 0x200000000000080 - CAP_FLOCK = 0x200000000010000 - CAP_FPATHCONF = 0x200000000020000 - CAP_FSCK = 0x200000000040000 - CAP_FSTAT = 0x200000000080000 - CAP_FSTATAT = 0x200000000080400 - CAP_FSTATFS = 0x200000000100000 - CAP_FSYNC = 0x200000000000100 - CAP_FTRUNCATE = 0x200000000000200 - CAP_FUTIMES = 0x200000000200000 - CAP_FUTIMESAT = 0x200000000200400 - CAP_GETPEERNAME = 0x200000100000000 - CAP_GETSOCKNAME = 0x200000200000000 - CAP_GETSOCKOPT = 0x200000400000000 - CAP_IOCTL = 0x400000000000080 - CAP_IOCTLS_ALL = 0x7fffffffffffffff - CAP_KQUEUE = 0x400000000100040 - CAP_KQUEUE_CHANGE = 0x400000000100000 - CAP_KQUEUE_EVENT = 0x400000000000040 - CAP_LINKAT_SOURCE = 0x200020000000400 - CAP_LINKAT_TARGET = 0x200000000400400 - CAP_LISTEN = 0x200000800000000 - CAP_LOOKUP = 0x200000000000400 - CAP_MAC_GET = 0x400000000000001 - CAP_MAC_SET = 0x400000000000002 - CAP_MKDIRAT = 0x200000000800400 - CAP_MKFIFOAT = 0x200000001000400 - CAP_MKNODAT = 0x200000002000400 - CAP_MMAP = 0x200000000000010 - CAP_MMAP_R = 0x20000000000001d - CAP_MMAP_RW = 0x20000000000001f - CAP_MMAP_RWX = 0x20000000000003f - CAP_MMAP_RX = 0x20000000000003d - CAP_MMAP_W = 0x20000000000001e - CAP_MMAP_WX = 0x20000000000003e - CAP_MMAP_X = 0x20000000000003c - CAP_PDGETPID = 0x400000000000200 - CAP_PDKILL = 0x400000000000800 - CAP_PDWAIT = 0x400000000000400 - CAP_PEELOFF = 0x200001000000000 - CAP_POLL_EVENT = 0x400000000000020 - CAP_PREAD = 0x20000000000000d - CAP_PWRITE = 0x20000000000000e - CAP_READ = 0x200000000000001 - CAP_RECV = 0x200000000000001 - CAP_RENAMEAT_SOURCE = 0x200000004000400 - CAP_RENAMEAT_TARGET = 0x200040000000400 - CAP_RIGHTS_VERSION = 0x0 - CAP_RIGHTS_VERSION_00 = 0x0 - CAP_SEEK = 0x20000000000000c - CAP_SEEK_TELL = 0x200000000000004 - CAP_SEM_GETVALUE = 0x400000000000004 - CAP_SEM_POST = 0x400000000000008 - CAP_SEM_WAIT = 0x400000000000010 - CAP_SEND = 0x200000000000002 - CAP_SETSOCKOPT = 0x200002000000000 - CAP_SHUTDOWN = 0x200004000000000 - CAP_SOCK_CLIENT = 0x200007780000003 - CAP_SOCK_SERVER = 0x200007f60000003 - CAP_SYMLINKAT = 0x200000008000400 - CAP_TTYHOOK = 0x400000000000100 - CAP_UNLINKAT = 0x200000010000400 - CAP_UNUSED0_44 = 0x200080000000000 - CAP_UNUSED0_57 = 0x300000000000000 - CAP_UNUSED1_22 = 0x400000000200000 - CAP_UNUSED1_57 = 0x500000000000000 - CAP_WRITE = 0x200000000000002 - CFLUSH = 0xf - CLOCAL = 0x8000 - CLOCK_BOOTTIME = 0x5 - CLOCK_MONOTONIC = 0x4 - CLOCK_MONOTONIC_COARSE = 0xc - CLOCK_MONOTONIC_FAST = 0xc - CLOCK_MONOTONIC_PRECISE = 0xb - CLOCK_PROCESS_CPUTIME_ID = 0xf - CLOCK_PROF = 0x2 - CLOCK_REALTIME = 0x0 - CLOCK_REALTIME_COARSE = 0xa - CLOCK_REALTIME_FAST = 0xa - CLOCK_REALTIME_PRECISE = 0x9 - CLOCK_SECOND = 0xd - CLOCK_THREAD_CPUTIME_ID = 0xe - CLOCK_UPTIME = 0x5 - CLOCK_UPTIME_FAST = 0x8 - CLOCK_UPTIME_PRECISE = 0x7 - CLOCK_VIRTUAL = 0x1 - CPUSTATES = 0x5 - CP_IDLE = 0x4 - CP_INTR = 0x3 - CP_NICE = 0x1 - CP_SYS = 0x2 - CP_USER = 0x0 - CREAD = 0x800 - CRTSCTS = 0x30000 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0x14 - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTL_HW = 0x6 - CTL_KERN = 0x1 - CTL_MAXNAME = 0x18 - CTL_NET = 0x4 - DIOCGATTR = 0xc148648e - DIOCGDELETE = 0x80106488 - DIOCGFLUSH = 0x20006487 - DIOCGFWHEADS = 0x40046483 - DIOCGFWSECTORS = 0x40046482 - DIOCGIDENT = 0x41006489 - DIOCGKERNELDUMP = 0xc0986492 - DIOCGMEDIASIZE = 0x40086481 - DIOCGPHYSPATH = 0x4400648d - DIOCGPROVIDERNAME = 0x4400648a - DIOCGSECTORSIZE = 0x40046480 - DIOCGSTRIPEOFFSET = 0x4008648c - DIOCGSTRIPESIZE = 0x4008648b - DIOCSKERNELDUMP = 0x80986491 - DIOCSKERNELDUMP_FREEBSD11 = 0x80046485 - DIOCSKERNELDUMP_FREEBSD12 = 0x80506490 - DIOCZONECMD = 0xc080648f - DLT_A429 = 0xb8 - DLT_A653_ICM = 0xb9 - DLT_AIRONET_HEADER = 0x78 - DLT_AOS = 0xde - DLT_APPLE_IP_OVER_IEEE1394 = 0x8a - DLT_ARCNET = 0x7 - DLT_ARCNET_LINUX = 0x81 - DLT_ATM_CLIP = 0x13 - DLT_ATM_RFC1483 = 0xb - DLT_AURORA = 0x7e - DLT_AX25 = 0x3 - DLT_AX25_KISS = 0xca - DLT_BACNET_MS_TP = 0xa5 - DLT_BLUETOOTH_BREDR_BB = 0xff - DLT_BLUETOOTH_HCI_H4 = 0xbb - DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 - DLT_BLUETOOTH_LE_LL = 0xfb - DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 - DLT_BLUETOOTH_LINUX_MONITOR = 0xfe - DLT_CAN20B = 0xbe - DLT_CAN_SOCKETCAN = 0xe3 - DLT_CHAOS = 0x5 - DLT_CHDLC = 0x68 - DLT_CISCO_IOS = 0x76 - DLT_CLASS_NETBSD_RAWAF = 0x2240000 - DLT_C_HDLC = 0x68 - DLT_C_HDLC_WITH_DIR = 0xcd - DLT_DBUS = 0xe7 - DLT_DECT = 0xdd - DLT_DISPLAYPORT_AUX = 0x113 - DLT_DOCSIS = 0x8f - DLT_DOCSIS31_XRA31 = 0x111 - DLT_DVB_CI = 0xeb - DLT_ECONET = 0x73 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0x6d - DLT_EPON = 0x103 - DLT_ERF = 0xc5 - DLT_ERF_ETH = 0xaf - DLT_ERF_POS = 0xb0 - DLT_ETHERNET_MPACKET = 0x112 - DLT_FC_2 = 0xe0 - DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 - DLT_FDDI = 0xa - DLT_FLEXRAY = 0xd2 - DLT_FRELAY = 0x6b - DLT_FRELAY_WITH_DIR = 0xce - DLT_GCOM_SERIAL = 0xad - DLT_GCOM_T1E1 = 0xac - DLT_GPF_F = 0xab - DLT_GPF_T = 0xaa - DLT_GPRS_LLC = 0xa9 - DLT_GSMTAP_ABIS = 0xda - DLT_GSMTAP_UM = 0xd9 - DLT_IBM_SN = 0x92 - DLT_IBM_SP = 0x91 - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_IEEE802_11_RADIO_AVS = 0xa3 - DLT_IEEE802_15_4 = 0xc3 - DLT_IEEE802_15_4_LINUX = 0xbf - DLT_IEEE802_15_4_NOFCS = 0xe6 - DLT_IEEE802_15_4_NONASK_PHY = 0xd7 - DLT_IEEE802_16_MAC_CPS = 0xbc - DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 - DLT_INFINIBAND = 0xf7 - DLT_IPFILTER = 0x74 - DLT_IPMB_KONTRON = 0xc7 - DLT_IPMB_LINUX = 0xd1 - DLT_IPMI_HPM_2 = 0x104 - DLT_IPNET = 0xe2 - DLT_IPOIB = 0xf2 - DLT_IPV4 = 0xe4 - DLT_IPV6 = 0xe5 - DLT_IP_OVER_FC = 0x7a - DLT_ISO_14443 = 0x108 - DLT_JUNIPER_ATM1 = 0x89 - DLT_JUNIPER_ATM2 = 0x87 - DLT_JUNIPER_ATM_CEMIC = 0xee - DLT_JUNIPER_CHDLC = 0xb5 - DLT_JUNIPER_ES = 0x84 - DLT_JUNIPER_ETHER = 0xb2 - DLT_JUNIPER_FIBRECHANNEL = 0xea - DLT_JUNIPER_FRELAY = 0xb4 - DLT_JUNIPER_GGSN = 0x85 - DLT_JUNIPER_ISM = 0xc2 - DLT_JUNIPER_MFR = 0x86 - DLT_JUNIPER_MLFR = 0x83 - DLT_JUNIPER_MLPPP = 0x82 - DLT_JUNIPER_MONITOR = 0xa4 - DLT_JUNIPER_PIC_PEER = 0xae - DLT_JUNIPER_PPP = 0xb3 - DLT_JUNIPER_PPPOE = 0xa7 - DLT_JUNIPER_PPPOE_ATM = 0xa8 - DLT_JUNIPER_SERVICES = 0x88 - DLT_JUNIPER_SRX_E2E = 0xe9 - DLT_JUNIPER_ST = 0xc8 - DLT_JUNIPER_VP = 0xb7 - DLT_JUNIPER_VS = 0xe8 - DLT_LAPB_WITH_DIR = 0xcf - DLT_LAPD = 0xcb - DLT_LIN = 0xd4 - DLT_LINUX_EVDEV = 0xd8 - DLT_LINUX_IRDA = 0x90 - DLT_LINUX_LAPD = 0xb1 - DLT_LINUX_PPP_WITHDIRECTION = 0xa6 - DLT_LINUX_SLL = 0x71 - DLT_LINUX_SLL2 = 0x114 - DLT_LOOP = 0x6c - DLT_LORATAP = 0x10e - DLT_LTALK = 0x72 - DLT_MATCHING_MAX = 0x114 - DLT_MATCHING_MIN = 0x68 - DLT_MFR = 0xb6 - DLT_MOST = 0xd3 - DLT_MPEG_2_TS = 0xf3 - DLT_MPLS = 0xdb - DLT_MTP2 = 0x8c - DLT_MTP2_WITH_PHDR = 0x8b - DLT_MTP3 = 0x8d - DLT_MUX27010 = 0xec - DLT_NETANALYZER = 0xf0 - DLT_NETANALYZER_TRANSPARENT = 0xf1 - DLT_NETLINK = 0xfd - DLT_NFC_LLCP = 0xf5 - DLT_NFLOG = 0xef - DLT_NG40 = 0xf4 - DLT_NORDIC_BLE = 0x110 - DLT_NULL = 0x0 - DLT_OPENFLOW = 0x10b - DLT_PCI_EXP = 0x7d - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x79 - DLT_PKTAP = 0x102 - DLT_PPI = 0xc0 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0xe - DLT_PPP_ETHER = 0x33 - DLT_PPP_PPPD = 0xa6 - DLT_PPP_SERIAL = 0x32 - DLT_PPP_WITH_DIR = 0xcc - DLT_PPP_WITH_DIRECTION = 0xa6 - DLT_PRISM_HEADER = 0x77 - DLT_PROFIBUS_DL = 0x101 - DLT_PRONET = 0x4 - DLT_RAIF1 = 0xc6 - DLT_RAW = 0xc - DLT_RDS = 0x109 - DLT_REDBACK_SMARTEDGE = 0x20 - DLT_RIO = 0x7c - DLT_RTAC_SERIAL = 0xfa - DLT_SCCP = 0x8e - DLT_SCTP = 0xf8 - DLT_SDLC = 0x10c - DLT_SITA = 0xc4 - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xd - DLT_STANAG_5066_D_PDU = 0xed - DLT_SUNATM = 0x7b - DLT_SYMANTEC_FIREWALL = 0x63 - DLT_TI_LLN_SNIFFER = 0x10d - DLT_TZSP = 0x80 - DLT_USB = 0xba - DLT_USBPCAP = 0xf9 - DLT_USB_DARWIN = 0x10a - DLT_USB_FREEBSD = 0xba - DLT_USB_LINUX = 0xbd - DLT_USB_LINUX_MMAPPED = 0xdc - DLT_USER0 = 0x93 - DLT_USER1 = 0x94 - DLT_USER10 = 0x9d - DLT_USER11 = 0x9e - DLT_USER12 = 0x9f - DLT_USER13 = 0xa0 - DLT_USER14 = 0xa1 - DLT_USER15 = 0xa2 - DLT_USER2 = 0x95 - DLT_USER3 = 0x96 - DLT_USER4 = 0x97 - DLT_USER5 = 0x98 - DLT_USER6 = 0x99 - DLT_USER7 = 0x9a - DLT_USER8 = 0x9b - DLT_USER9 = 0x9c - DLT_VSOCK = 0x10f - DLT_WATTSTOPPER_DLM = 0x107 - DLT_WIHART = 0xdf - DLT_WIRESHARK_UPPER_PDU = 0xfc - DLT_X2E_SERIAL = 0xd5 - DLT_X2E_XORAYA = 0xd6 - DLT_ZWAVE_R1_R2 = 0x105 - DLT_ZWAVE_R3 = 0x106 - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - DT_WHT = 0xe - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EHE_DEAD_PRIORITY = -0x1 - EVFILT_AIO = -0x3 - EVFILT_EMPTY = -0xd - EVFILT_FS = -0x9 - EVFILT_LIO = -0xa - EVFILT_PROC = -0x5 - EVFILT_PROCDESC = -0x8 - EVFILT_READ = -0x1 - EVFILT_SENDFILE = -0xc - EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0xd - EVFILT_TIMER = -0x7 - EVFILT_USER = -0xb - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 - EVNAMEMAP_NAME_SIZE = 0x40 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_DISPATCH = 0x80 - EV_DROP = 0x1000 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG1 = 0x2000 - EV_FLAG2 = 0x4000 - EV_FORCEONESHOT = 0x100 - EV_ONESHOT = 0x10 - EV_RECEIPT = 0x40 - EV_SYSFLAGS = 0xf000 - EXTA = 0x4b00 - EXTATTR_MAXNAMELEN = 0xff - EXTATTR_NAMESPACE_EMPTY = 0x0 - EXTATTR_NAMESPACE_SYSTEM = 0x2 - EXTATTR_NAMESPACE_USER = 0x1 - EXTB = 0x9600 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_NONE = -0xc8 - FD_SETSIZE = 0x400 - FLUSHO = 0x800000 - F_ADD_SEALS = 0x13 - F_CANCEL = 0x5 - F_DUP2FD = 0xa - F_DUP2FD_CLOEXEC = 0x12 - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0x11 - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0xb - F_GETOWN = 0x5 - F_GET_SEALS = 0x14 - F_ISUNIONSTACK = 0x15 - F_KINFO = 0x16 - F_OGETLK = 0x7 - F_OK = 0x0 - F_OSETLK = 0x8 - F_OSETLKW = 0x9 - F_RDAHEAD = 0x10 - F_RDLCK = 0x1 - F_READAHEAD = 0xf - F_SEAL_GROW = 0x4 - F_SEAL_SEAL = 0x1 - F_SEAL_SHRINK = 0x2 - F_SEAL_WRITE = 0x8 - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0xc - F_SETLKW = 0xd - F_SETLK_REMOTE = 0xe - F_SETOWN = 0x6 - F_UNLCK = 0x2 - F_UNLCKSYS = 0x4 - F_WRLCK = 0x3 - HUPCL = 0x4000 - HW_MACHINE = 0x1 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFAN_ARRIVAL = 0x0 - IFAN_DEPARTURE = 0x1 - IFCAP_WOL_MAGIC = 0x2000 - IFF_ALLMULTI = 0x200 - IFF_ALTPHYS = 0x4000 - IFF_BROADCAST = 0x2 - IFF_CANTCHANGE = 0x218f72 - IFF_CANTCONFIG = 0x10000 - IFF_DEBUG = 0x4 - IFF_DRV_OACTIVE = 0x400 - IFF_DRV_RUNNING = 0x40 - IFF_DYING = 0x200000 - IFF_KNOWSEPOCH = 0x20 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MONITOR = 0x40000 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_NOGROUP = 0x800000 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PPROMISC = 0x20000 - IFF_PROMISC = 0x100 - IFF_RENAMING = 0x400000 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_STATICARP = 0x80000 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_BRIDGE = 0xd1 - IFT_CARP = 0xf8 - IFT_IEEE1394 = 0x90 - IFT_INFINIBAND = 0xc7 - IFT_L2VLAN = 0x87 - IFT_L3IPVLAN = 0x88 - IFT_PPP = 0x17 - IFT_PROPVIRTUAL = 0x35 - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LOOPBACKNET = 0x7f - IN_NETMASK_DEFAULT = 0xffffff00 - IN_RFC3021_MASK = 0xfffffffe - IPPROTO_3PC = 0x22 - IPPROTO_ADFS = 0x44 - IPPROTO_AH = 0x33 - IPPROTO_AHIP = 0x3d - IPPROTO_APES = 0x63 - IPPROTO_ARGUS = 0xd - IPPROTO_AX25 = 0x5d - IPPROTO_BHA = 0x31 - IPPROTO_BLT = 0x1e - IPPROTO_BRSATMON = 0x4c - IPPROTO_CARP = 0x70 - IPPROTO_CFTP = 0x3e - IPPROTO_CHAOS = 0x10 - IPPROTO_CMTP = 0x26 - IPPROTO_CPHB = 0x49 - IPPROTO_CPNX = 0x48 - IPPROTO_DCCP = 0x21 - IPPROTO_DDP = 0x25 - IPPROTO_DGP = 0x56 - IPPROTO_DIVERT = 0x102 - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_EMCON = 0xe - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GMTP = 0x64 - IPPROTO_GRE = 0x2f - IPPROTO_HELLO = 0x3f - IPPROTO_HIP = 0x8b - IPPROTO_HMP = 0x14 - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IDPR = 0x23 - IPPROTO_IDRP = 0x2d - IPPROTO_IGMP = 0x2 - IPPROTO_IGP = 0x55 - IPPROTO_IGRP = 0x58 - IPPROTO_IL = 0x28 - IPPROTO_INLSP = 0x34 - IPPROTO_INP = 0x20 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPCV = 0x47 - IPPROTO_IPEIP = 0x5e - IPPROTO_IPIP = 0x4 - IPPROTO_IPPC = 0x43 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_IRTP = 0x1c - IPPROTO_KRYPTOLAN = 0x41 - IPPROTO_LARP = 0x5b - IPPROTO_LEAF1 = 0x19 - IPPROTO_LEAF2 = 0x1a - IPPROTO_MAX = 0x100 - IPPROTO_MEAS = 0x13 - IPPROTO_MH = 0x87 - IPPROTO_MHRP = 0x30 - IPPROTO_MICP = 0x5f - IPPROTO_MOBILE = 0x37 - IPPROTO_MPLS = 0x89 - IPPROTO_MTP = 0x5c - IPPROTO_MUX = 0x12 - IPPROTO_ND = 0x4d - IPPROTO_NHRP = 0x36 - IPPROTO_NONE = 0x3b - IPPROTO_NSP = 0x1f - IPPROTO_NVPII = 0xb - IPPROTO_OLD_DIVERT = 0xfe - IPPROTO_OSPFIGP = 0x59 - IPPROTO_PFSYNC = 0xf0 - IPPROTO_PGM = 0x71 - IPPROTO_PIGP = 0x9 - IPPROTO_PIM = 0x67 - IPPROTO_PRM = 0x15 - IPPROTO_PUP = 0xc - IPPROTO_PVP = 0x4b - IPPROTO_RAW = 0xff - IPPROTO_RCCMON = 0xa - IPPROTO_RDP = 0x1b - IPPROTO_RESERVED_253 = 0xfd - IPPROTO_RESERVED_254 = 0xfe - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_RVD = 0x42 - IPPROTO_SATEXPAK = 0x40 - IPPROTO_SATMON = 0x45 - IPPROTO_SCCSP = 0x60 - IPPROTO_SCTP = 0x84 - IPPROTO_SDRP = 0x2a - IPPROTO_SEND = 0x103 - IPPROTO_SHIM6 = 0x8c - IPPROTO_SKIP = 0x39 - IPPROTO_SPACER = 0x7fff - IPPROTO_SRPC = 0x5a - IPPROTO_ST = 0x7 - IPPROTO_SVMTP = 0x52 - IPPROTO_SWIPE = 0x35 - IPPROTO_TCF = 0x57 - IPPROTO_TCP = 0x6 - IPPROTO_TLSP = 0x38 - IPPROTO_TP = 0x1d - IPPROTO_TPXX = 0x27 - IPPROTO_TRUNK1 = 0x17 - IPPROTO_TRUNK2 = 0x18 - IPPROTO_TTP = 0x54 - IPPROTO_UDP = 0x11 - IPPROTO_UDPLITE = 0x88 - IPPROTO_VINES = 0x53 - IPPROTO_VISA = 0x46 - IPPROTO_VMTP = 0x51 - IPPROTO_WBEXPAK = 0x4f - IPPROTO_WBMON = 0x4e - IPPROTO_WSN = 0x4a - IPPROTO_XNET = 0xf - IPPROTO_XTP = 0x24 - IPV6_AUTOFLOWLABEL = 0x3b - IPV6_BINDANY = 0x40 - IPV6_BINDMULTI = 0x41 - IPV6_BINDV6ONLY = 0x1b - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_DONTFRAG = 0x3e - IPV6_DSTOPTS = 0x32 - IPV6_FLOWID = 0x43 - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_LEN = 0x14 - IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FLOWTYPE = 0x44 - IPV6_FRAGTTL = 0x78 - IPV6_FW_ADD = 0x1e - IPV6_FW_DEL = 0x1f - IPV6_FW_FLUSH = 0x20 - IPV6_FW_GET = 0x22 - IPV6_FW_ZERO = 0x21 - IPV6_HLIMDEC = 0x1 - IPV6_HOPLIMIT = 0x2f - IPV6_HOPOPTS = 0x31 - IPV6_IPSEC_POLICY = 0x1c - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXOPTHDR = 0x800 - IPV6_MAXPACKET = 0xffff - IPV6_MAX_GROUP_SRC_FILTER = 0x200 - IPV6_MAX_MEMBERSHIPS = 0xfff - IPV6_MAX_SOCK_SRC_FILTER = 0x80 - IPV6_MMTU = 0x500 - IPV6_MSFILTER = 0x4a - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_ORIGDSTADDR = 0x48 - IPV6_PATHMTU = 0x2c - IPV6_PKTINFO = 0x2e - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_PREFER_TEMPADDR = 0x3f - IPV6_RECVDSTOPTS = 0x28 - IPV6_RECVFLOWID = 0x46 - IPV6_RECVHOPLIMIT = 0x25 - IPV6_RECVHOPOPTS = 0x27 - IPV6_RECVORIGDSTADDR = 0x48 - IPV6_RECVPATHMTU = 0x2b - IPV6_RECVPKTINFO = 0x24 - IPV6_RECVRSSBUCKETID = 0x47 - IPV6_RECVRTHDR = 0x26 - IPV6_RECVTCLASS = 0x39 - IPV6_RSSBUCKETID = 0x45 - IPV6_RSS_LISTEN_BUCKET = 0x42 - IPV6_RTHDR = 0x33 - IPV6_RTHDRDSTOPTS = 0x23 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x3d - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2a - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IPV6_VLAN_PCP = 0x4b - IP_ADD_MEMBERSHIP = 0xc - IP_ADD_SOURCE_MEMBERSHIP = 0x46 - IP_BINDANY = 0x18 - IP_BINDMULTI = 0x19 - IP_BLOCK_SOURCE = 0x48 - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DONTFRAG = 0x43 - IP_DROP_MEMBERSHIP = 0xd - IP_DROP_SOURCE_MEMBERSHIP = 0x47 - IP_DUMMYNET3 = 0x31 - IP_DUMMYNET_CONFIGURE = 0x3c - IP_DUMMYNET_DEL = 0x3d - IP_DUMMYNET_FLUSH = 0x3e - IP_DUMMYNET_GET = 0x40 - IP_FLOWID = 0x5a - IP_FLOWTYPE = 0x5b - IP_FW3 = 0x30 - IP_FW_ADD = 0x32 - IP_FW_DEL = 0x33 - IP_FW_FLUSH = 0x34 - IP_FW_GET = 0x36 - IP_FW_NAT_CFG = 0x38 - IP_FW_NAT_DEL = 0x39 - IP_FW_NAT_GET_CONFIG = 0x3a - IP_FW_NAT_GET_LOG = 0x3b - IP_FW_RESETLOG = 0x37 - IP_FW_TABLE_ADD = 0x28 - IP_FW_TABLE_DEL = 0x29 - IP_FW_TABLE_FLUSH = 0x2a - IP_FW_TABLE_GETSIZE = 0x2b - IP_FW_TABLE_LIST = 0x2c - IP_FW_ZERO = 0x35 - IP_HDRINCL = 0x2 - IP_IPSEC_POLICY = 0x15 - IP_MAXPACKET = 0xffff - IP_MAX_GROUP_SRC_FILTER = 0x200 - IP_MAX_MEMBERSHIPS = 0xfff - IP_MAX_SOCK_MUTE_FILTER = 0x80 - IP_MAX_SOCK_SRC_FILTER = 0x80 - IP_MF = 0x2000 - IP_MINTTL = 0x42 - IP_MSFILTER = 0x4a - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_MULTICAST_VIF = 0xe - IP_OFFMASK = 0x1fff - IP_ONESBCAST = 0x17 - IP_OPTIONS = 0x1 - IP_ORIGDSTADDR = 0x1b - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVFLOWID = 0x5d - IP_RECVIF = 0x14 - IP_RECVOPTS = 0x5 - IP_RECVORIGDSTADDR = 0x1b - IP_RECVRETOPTS = 0x6 - IP_RECVRSSBUCKETID = 0x5e - IP_RECVTOS = 0x44 - IP_RECVTTL = 0x41 - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_RSSBUCKETID = 0x5c - IP_RSS_LISTEN_BUCKET = 0x1a - IP_RSVP_OFF = 0x10 - IP_RSVP_ON = 0xf - IP_RSVP_VIF_OFF = 0x12 - IP_RSVP_VIF_ON = 0x11 - IP_SENDSRCADDR = 0x7 - IP_TOS = 0x3 - IP_TTL = 0x4 - IP_UNBLOCK_SOURCE = 0x49 - IP_VLAN_PCP = 0x4b - ISIG = 0x80 - ISTRIP = 0x20 - ITIMER_PROF = 0x2 - ITIMER_REAL = 0x0 - ITIMER_VIRTUAL = 0x1 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - KERN_HOSTNAME = 0xa - KERN_OSRELEASE = 0x2 - KERN_OSTYPE = 0x1 - KERN_VERSION = 0x4 - LOCAL_CONNWAIT = 0x4 - LOCAL_CREDS = 0x2 - LOCAL_CREDS_PERSISTENT = 0x3 - LOCAL_PEERCRED = 0x1 - LOCAL_VENDOR = 0x80000000 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_AUTOSYNC = 0x7 - MADV_CORE = 0x9 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x5 - MADV_NOCORE = 0x8 - MADV_NORMAL = 0x0 - MADV_NOSYNC = 0x6 - MADV_PROTECT = 0xa - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_WILLNEED = 0x3 - MAP_32BIT = 0x80000 - MAP_ALIGNED_SUPER = 0x1000000 - MAP_ALIGNMENT_MASK = -0x1000000 - MAP_ALIGNMENT_SHIFT = 0x18 - MAP_ANON = 0x1000 - MAP_ANONYMOUS = 0x1000 - MAP_COPY = 0x2 - MAP_EXCL = 0x4000 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_GUARD = 0x2000 - MAP_HASSEMAPHORE = 0x200 - MAP_NOCORE = 0x20000 - MAP_NOSYNC = 0x800 - MAP_PREFAULT_READ = 0x40000 - MAP_PRIVATE = 0x2 - MAP_RESERVED0020 = 0x20 - MAP_RESERVED0040 = 0x40 - MAP_RESERVED0080 = 0x80 - MAP_RESERVED0100 = 0x100 - MAP_SHARED = 0x1 - MAP_STACK = 0x400 - MCAST_BLOCK_SOURCE = 0x54 - MCAST_EXCLUDE = 0x2 - MCAST_INCLUDE = 0x1 - MCAST_JOIN_GROUP = 0x50 - MCAST_JOIN_SOURCE_GROUP = 0x52 - MCAST_LEAVE_GROUP = 0x51 - MCAST_LEAVE_SOURCE_GROUP = 0x53 - MCAST_UNBLOCK_SOURCE = 0x55 - MCAST_UNDEFINED = 0x0 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MFD_ALLOW_SEALING = 0x2 - MFD_CLOEXEC = 0x1 - MFD_HUGETLB = 0x4 - MFD_HUGE_16GB = -0x78000000 - MFD_HUGE_16MB = 0x60000000 - MFD_HUGE_1GB = 0x78000000 - MFD_HUGE_1MB = 0x50000000 - MFD_HUGE_256MB = 0x70000000 - MFD_HUGE_2GB = 0x7c000000 - MFD_HUGE_2MB = 0x54000000 - MFD_HUGE_32MB = 0x64000000 - MFD_HUGE_512KB = 0x4c000000 - MFD_HUGE_512MB = 0x74000000 - MFD_HUGE_64KB = 0x40000000 - MFD_HUGE_8MB = 0x5c000000 - MFD_HUGE_MASK = 0xfc000000 - MFD_HUGE_SHIFT = 0x1a - MNT_ACLS = 0x8000000 - MNT_ASYNC = 0x40 - MNT_AUTOMOUNTED = 0x200000000 - MNT_BYFSID = 0x8000000 - MNT_CMDFLAGS = 0x300d0f0000 - MNT_DEFEXPORTED = 0x200 - MNT_DELEXPORT = 0x20000 - MNT_EMPTYDIR = 0x2000000000 - MNT_EXKERB = 0x800 - MNT_EXPORTANON = 0x400 - MNT_EXPORTED = 0x100 - MNT_EXPUBLIC = 0x20000000 - MNT_EXRDONLY = 0x80 - MNT_EXTLS = 0x4000000000 - MNT_EXTLSCERT = 0x8000000000 - MNT_EXTLSCERTUSER = 0x10000000000 - MNT_FORCE = 0x80000 - MNT_GJOURNAL = 0x2000000 - MNT_IGNORE = 0x800000 - MNT_LAZY = 0x3 - MNT_LOCAL = 0x1000 - MNT_MULTILABEL = 0x4000000 - MNT_NFS4ACLS = 0x10 - MNT_NOATIME = 0x10000000 - MNT_NOCLUSTERR = 0x40000000 - MNT_NOCLUSTERW = 0x80000000 - MNT_NOCOVER = 0x1000000000 - MNT_NOEXEC = 0x4 - MNT_NONBUSY = 0x4000000 - MNT_NOSUID = 0x8 - MNT_NOSYMFOLLOW = 0x400000 - MNT_NOWAIT = 0x2 - MNT_QUOTA = 0x2000 - MNT_RDONLY = 0x1 - MNT_RELOAD = 0x40000 - MNT_ROOTFS = 0x4000 - MNT_SNAPSHOT = 0x1000000 - MNT_SOFTDEP = 0x200000 - MNT_SUIDDIR = 0x100000 - MNT_SUJ = 0x100000000 - MNT_SUSPEND = 0x4 - MNT_SYNCHRONOUS = 0x2 - MNT_UNION = 0x20 - MNT_UNTRUSTED = 0x800000000 - MNT_UPDATE = 0x10000 - MNT_UPDATEMASK = 0xad8d0807e - MNT_USER = 0x8000 - MNT_VERIFIED = 0x400000000 - MNT_VISFLAGMASK = 0xffef0ffff - MNT_WAIT = 0x1 - MSG_CMSG_CLOEXEC = 0x40000 - MSG_COMPAT = 0x8000 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOF = 0x100 - MSG_EOR = 0x8 - MSG_NBIO = 0x4000 - MSG_NOSIGNAL = 0x20000 - MSG_NOTIFICATION = 0x2000 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 - MSG_WAITFORONE = 0x80000 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x2 - MS_SYNC = 0x0 - NAME_MAX = 0xff - NET_RT_DUMP = 0x1 - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x3 - NET_RT_IFLISTL = 0x5 - NET_RT_IFMALIST = 0x4 - NET_RT_NHGRP = 0x7 - NET_RT_NHOP = 0x6 - NFDBITS = 0x40 - NOFLSH = 0x80000000 - NOKERNINFO = 0x2000000 - NOTE_ABSTIME = 0x10 - NOTE_ATTRIB = 0x8 - NOTE_CHILD = 0x4 - NOTE_CLOSE = 0x100 - NOTE_CLOSE_WRITE = 0x200 - NOTE_DELETE = 0x1 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXTEND = 0x4 - NOTE_FFAND = 0x40000000 - NOTE_FFCOPY = 0xc0000000 - NOTE_FFCTRLMASK = 0xc0000000 - NOTE_FFLAGSMASK = 0xffffff - NOTE_FFNOP = 0x0 - NOTE_FFOR = 0x80000000 - NOTE_FILE_POLL = 0x2 - NOTE_FORK = 0x40000000 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_MSECONDS = 0x2 - NOTE_NSECONDS = 0x8 - NOTE_OPEN = 0x80 - NOTE_PCTRLMASK = 0xf0000000 - NOTE_PDATAMASK = 0xfffff - NOTE_READ = 0x400 - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_SECONDS = 0x1 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_TRIGGER = 0x1000000 - NOTE_USECONDS = 0x4 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - ONLCR = 0x2 - ONLRET = 0x40 - ONOCR = 0x20 - ONOEOT = 0x8 - OPOST = 0x1 - OXTABS = 0x4 - O_ACCMODE = 0x3 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x100000 - O_CREAT = 0x200 - O_DIRECT = 0x10000 - O_DIRECTORY = 0x20000 - O_DSYNC = 0x1000000 - O_EMPTY_PATH = 0x2000000 - O_EXCL = 0x800 - O_EXEC = 0x40000 - O_EXLOCK = 0x20 - O_FSYNC = 0x80 - O_NDELAY = 0x4 - O_NOCTTY = 0x8000 - O_NOFOLLOW = 0x100 - O_NONBLOCK = 0x4 - O_PATH = 0x400000 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_RESOLVE_BENEATH = 0x800000 - O_SEARCH = 0x40000 - O_SHLOCK = 0x10 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_TTY_INIT = 0x80000 - O_VERIFY = 0x200000 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PIOD_READ_D = 0x1 - PIOD_READ_I = 0x3 - PIOD_WRITE_D = 0x2 - PIOD_WRITE_I = 0x4 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - PTRACE_DEFAULT = 0x1 - PTRACE_EXEC = 0x1 - PTRACE_FORK = 0x8 - PTRACE_LWP = 0x10 - PTRACE_SCE = 0x2 - PTRACE_SCX = 0x4 - PTRACE_SYSCALL = 0x6 - PTRACE_VFORK = 0x20 - PT_ATTACH = 0xa - PT_CLEARSTEP = 0x10 - PT_CONTINUE = 0x7 - PT_COREDUMP = 0x1d - PT_DETACH = 0xb - PT_FIRSTMACH = 0x40 - PT_FOLLOW_FORK = 0x17 - PT_GETDBREGS = 0x25 - PT_GETFPREGS = 0x23 - PT_GETLWPLIST = 0xf - PT_GETNUMLWPS = 0xe - PT_GETREGS = 0x21 - PT_GET_EVENT_MASK = 0x19 - PT_GET_SC_ARGS = 0x1b - PT_GET_SC_RET = 0x1c - PT_IO = 0xc - PT_KILL = 0x8 - PT_LWPINFO = 0xd - PT_LWP_EVENTS = 0x18 - PT_READ_D = 0x2 - PT_READ_I = 0x1 - PT_RESUME = 0x13 - PT_SETDBREGS = 0x26 - PT_SETFPREGS = 0x24 - PT_SETREGS = 0x22 - PT_SETSTEP = 0x11 - PT_SET_EVENT_MASK = 0x1a - PT_STEP = 0x9 - PT_SUSPEND = 0x12 - PT_SYSCALL = 0x16 - PT_TO_SCE = 0x14 - PT_TO_SCX = 0x15 - PT_TRACE_ME = 0x0 - PT_VM_ENTRY = 0x29 - PT_VM_TIMESTAMP = 0x28 - PT_WRITE_D = 0x5 - PT_WRITE_I = 0x4 - P_ZONEID = 0xc - RLIMIT_AS = 0xa - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_MEMLOCK = 0x6 - RLIMIT_NOFILE = 0x8 - RLIMIT_NPROC = 0x7 - RLIMIT_RSS = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_MAX = 0x8 - RTAX_NETMASK = 0x2 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_NETMASK = 0x4 - RTF_BLACKHOLE = 0x1000 - RTF_BROADCAST = 0x400000 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_FIXEDMTU = 0x80000 - RTF_FMASK = 0x1004d808 - RTF_GATEWAY = 0x2 - RTF_GWFLAG_COMPAT = 0x80000000 - RTF_HOST = 0x4 - RTF_LLDATA = 0x400 - RTF_LLINFO = 0x400 - RTF_LOCAL = 0x200000 - RTF_MODIFIED = 0x20 - RTF_MULTICAST = 0x800000 - RTF_PINNED = 0x100000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_PROTO3 = 0x40000 - RTF_REJECT = 0x8 - RTF_STATIC = 0x800 - RTF_STICKY = 0x10000000 - RTF_UP = 0x1 - RTF_XRESOLVE = 0x200 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_DELMADDR = 0x10 - RTM_GET = 0x4 - RTM_IEEE80211 = 0x12 - RTM_IFANNOUNCE = 0x11 - RTM_IFINFO = 0xe - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_NEWMADDR = 0xf - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RTV_WEIGHT = 0x100 - RT_ALL_FIBS = -0x1 - RT_BLACKHOLE = 0x40 - RT_DEFAULT_FIB = 0x0 - RT_DEFAULT_WEIGHT = 0x1 - RT_HAS_GW = 0x80 - RT_HAS_HEADER = 0x10 - RT_HAS_HEADER_BIT = 0x4 - RT_L2_ME = 0x4 - RT_L2_ME_BIT = 0x2 - RT_LLE_CACHE = 0x100 - RT_MAX_WEIGHT = 0xffffff - RT_MAY_LOOP = 0x8 - RT_MAY_LOOP_BIT = 0x3 - RT_REJECT = 0x20 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - RUSAGE_THREAD = 0x1 - SCM_BINTIME = 0x4 - SCM_CREDS = 0x3 - SCM_CREDS2 = 0x8 - SCM_MONOTONIC = 0x6 - SCM_REALTIME = 0x5 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x2 - SCM_TIME_INFO = 0x7 - SEEK_CUR = 0x1 - SEEK_DATA = 0x3 - SEEK_END = 0x2 - SEEK_HOLE = 0x4 - SEEK_SET = 0x0 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80206931 - SIOCAIFADDR = 0x8040691a - SIOCAIFGROUP = 0x80286987 - SIOCATMARK = 0x40047307 - SIOCDELMULTI = 0x80206932 - SIOCDIFADDR = 0x80206919 - SIOCDIFGROUP = 0x80286989 - SIOCDIFPHYADDR = 0x80206949 - SIOCGDRVSPEC = 0xc028697b - SIOCGETSGCNT = 0xc0207210 - SIOCGETVIFCNT = 0xc028720f - SIOCGHIWAT = 0x40047301 - SIOCGHWADDR = 0xc020693e - SIOCGI2C = 0xc020693d - SIOCGIFADDR = 0xc0206921 - SIOCGIFALIAS = 0xc044692d - SIOCGIFBRDADDR = 0xc0206923 - SIOCGIFCAP = 0xc020691f - SIOCGIFCONF = 0xc0106924 - SIOCGIFDATA = 0x8020692c - SIOCGIFDESCR = 0xc020692a - SIOCGIFDOWNREASON = 0xc058699a - SIOCGIFDSTADDR = 0xc0206922 - SIOCGIFFIB = 0xc020695c - SIOCGIFFLAGS = 0xc0206911 - SIOCGIFGENERIC = 0xc020693a - SIOCGIFGMEMB = 0xc028698a - SIOCGIFGROUP = 0xc0286988 - SIOCGIFINDEX = 0xc0206920 - SIOCGIFMAC = 0xc0206926 - SIOCGIFMEDIA = 0xc0306938 - SIOCGIFMETRIC = 0xc0206917 - SIOCGIFMTU = 0xc0206933 - SIOCGIFNETMASK = 0xc0206925 - SIOCGIFPDSTADDR = 0xc0206948 - SIOCGIFPHYS = 0xc0206935 - SIOCGIFPSRCADDR = 0xc0206947 - SIOCGIFRSSHASH = 0xc0186997 - SIOCGIFRSSKEY = 0xc0946996 - SIOCGIFSTATUS = 0xc331693b - SIOCGIFXMEDIA = 0xc030698b - SIOCGLANPCP = 0xc0206998 - SIOCGLOWAT = 0x40047303 - SIOCGPGRP = 0x40047309 - SIOCGPRIVATE_0 = 0xc0206950 - SIOCGPRIVATE_1 = 0xc0206951 - SIOCGTUNFIB = 0xc020695e - SIOCIFCREATE = 0xc020697a - SIOCIFCREATE2 = 0xc020697c - SIOCIFDESTROY = 0x80206979 - SIOCIFGCLONERS = 0xc0106978 - SIOCSDRVSPEC = 0x8028697b - SIOCSHIWAT = 0x80047300 - SIOCSIFADDR = 0x8020690c - SIOCSIFBRDADDR = 0x80206913 - SIOCSIFCAP = 0x8020691e - SIOCSIFDESCR = 0x80206929 - SIOCSIFDSTADDR = 0x8020690e - SIOCSIFFIB = 0x8020695d - SIOCSIFFLAGS = 0x80206910 - SIOCSIFGENERIC = 0x80206939 - SIOCSIFLLADDR = 0x8020693c - SIOCSIFMAC = 0x80206927 - SIOCSIFMEDIA = 0xc0206937 - SIOCSIFMETRIC = 0x80206918 - SIOCSIFMTU = 0x80206934 - SIOCSIFNAME = 0x80206928 - SIOCSIFNETMASK = 0x80206916 - SIOCSIFPHYADDR = 0x80406946 - SIOCSIFPHYS = 0x80206936 - SIOCSIFRVNET = 0xc020695b - SIOCSIFVNET = 0xc020695a - SIOCSLANPCP = 0x80206999 - SIOCSLOWAT = 0x80047302 - SIOCSPGRP = 0x80047308 - SIOCSTUNFIB = 0x8020695f - SOCK_CLOEXEC = 0x10000000 - SOCK_DGRAM = 0x2 - SOCK_MAXADDRLEN = 0xff - SOCK_NONBLOCK = 0x20000000 - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_LOCAL = 0x0 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_ACCEPTFILTER = 0x1000 - SO_BINTIME = 0x2000 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 - SO_DOMAIN = 0x1019 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LABEL = 0x1009 - SO_LINGER = 0x80 - SO_LISTENINCQLEN = 0x1013 - SO_LISTENQLEN = 0x1012 - SO_LISTENQLIMIT = 0x1011 - SO_MAX_PACING_RATE = 0x1018 - SO_NOSIGPIPE = 0x800 - SO_NO_DDP = 0x8000 - SO_NO_OFFLOAD = 0x4000 - SO_OOBINLINE = 0x100 - SO_PEERLABEL = 0x1010 - SO_PROTOCOL = 0x1016 - SO_PROTOTYPE = 0x1016 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 - SO_RERROR = 0x20000 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_REUSEPORT_LB = 0x10000 - SO_SETFIB = 0x1014 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_TIMESTAMP = 0x400 - SO_TS_BINTIME = 0x1 - SO_TS_CLOCK = 0x1017 - SO_TS_CLOCK_MAX = 0x3 - SO_TS_DEFAULT = 0x0 - SO_TS_MONOTONIC = 0x3 - SO_TS_REALTIME = 0x2 - SO_TS_REALTIME_MICRO = 0x0 - SO_TYPE = 0x1008 - SO_USELOOPBACK = 0x40 - SO_USER_COOKIE = 0x1015 - SO_VENDOR = 0x80000000 - S_BLKSIZE = 0x200 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFLNK = 0xa000 - S_IFMT = 0xf000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IFWHT = 0xe000 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISTXT = 0x200 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXGRP = 0x8 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - TAB0 = 0x0 - TAB3 = 0x4 - TABDLY = 0x4 - TCIFLUSH = 0x1 - TCIOFF = 0x3 - TCIOFLUSH = 0x3 - TCION = 0x4 - TCOFLUSH = 0x2 - TCOOFF = 0x1 - TCOON = 0x2 - TCPOPT_EOL = 0x0 - TCPOPT_FAST_OPEN = 0x22 - TCPOPT_MAXSEG = 0x2 - TCPOPT_NOP = 0x1 - TCPOPT_PAD = 0x0 - TCPOPT_SACK = 0x5 - TCPOPT_SACK_PERMITTED = 0x4 - TCPOPT_SIGNATURE = 0x13 - TCPOPT_TIMESTAMP = 0x8 - TCPOPT_WINDOW = 0x3 - TCP_BBR_ACK_COMP_ALG = 0x448 - TCP_BBR_ALGORITHM = 0x43b - TCP_BBR_DRAIN_INC_EXTRA = 0x43c - TCP_BBR_DRAIN_PG = 0x42e - TCP_BBR_EXTRA_GAIN = 0x449 - TCP_BBR_EXTRA_STATE = 0x453 - TCP_BBR_FLOOR_MIN_TSO = 0x454 - TCP_BBR_HDWR_PACE = 0x451 - TCP_BBR_HOLD_TARGET = 0x436 - TCP_BBR_IWINTSO = 0x42b - TCP_BBR_LOWGAIN_FD = 0x436 - TCP_BBR_LOWGAIN_HALF = 0x435 - TCP_BBR_LOWGAIN_THRESH = 0x434 - TCP_BBR_MAX_RTO = 0x439 - TCP_BBR_MIN_RTO = 0x438 - TCP_BBR_MIN_TOPACEOUT = 0x455 - TCP_BBR_ONE_RETRAN = 0x431 - TCP_BBR_PACE_CROSS = 0x442 - TCP_BBR_PACE_DEL_TAR = 0x43f - TCP_BBR_PACE_OH = 0x435 - TCP_BBR_PACE_PER_SEC = 0x43e - TCP_BBR_PACE_SEG_MAX = 0x440 - TCP_BBR_PACE_SEG_MIN = 0x441 - TCP_BBR_POLICER_DETECT = 0x457 - TCP_BBR_PROBE_RTT_GAIN = 0x44d - TCP_BBR_PROBE_RTT_INT = 0x430 - TCP_BBR_PROBE_RTT_LEN = 0x44e - TCP_BBR_RACK_INIT_RATE = 0x458 - TCP_BBR_RACK_RTT_USE = 0x44a - TCP_BBR_RECFORCE = 0x42c - TCP_BBR_REC_OVER_HPTS = 0x43a - TCP_BBR_RETRAN_WTSO = 0x44b - TCP_BBR_RWND_IS_APP = 0x42f - TCP_BBR_SEND_IWND_IN_TSO = 0x44f - TCP_BBR_STARTUP_EXIT_EPOCH = 0x43d - TCP_BBR_STARTUP_LOSS_EXIT = 0x432 - TCP_BBR_STARTUP_PG = 0x42d - TCP_BBR_TMR_PACE_OH = 0x448 - TCP_BBR_TSLIMITS = 0x434 - TCP_BBR_TSTMP_RAISES = 0x456 - TCP_BBR_UNLIMITED = 0x43b - TCP_BBR_USEDEL_RATE = 0x437 - TCP_BBR_USE_LOWGAIN = 0x433 - TCP_BBR_USE_RACK_CHEAT = 0x450 - TCP_BBR_USE_RACK_RR = 0x450 - TCP_BBR_UTTER_MAX_TSO = 0x452 - TCP_CA_NAME_MAX = 0x10 - TCP_CCALGOOPT = 0x41 - TCP_CONGESTION = 0x40 - TCP_DATA_AFTER_CLOSE = 0x44c - TCP_DEFER_OPTIONS = 0x470 - TCP_DELACK = 0x48 - TCP_FASTOPEN = 0x401 - TCP_FASTOPEN_MAX_COOKIE_LEN = 0x10 - TCP_FASTOPEN_MIN_COOKIE_LEN = 0x4 - TCP_FASTOPEN_PSK_LEN = 0x10 - TCP_FAST_RSM_HACK = 0x471 - TCP_FIN_IS_RST = 0x49 - TCP_FUNCTION_BLK = 0x2000 - TCP_FUNCTION_NAME_LEN_MAX = 0x20 - TCP_HDWR_RATE_CAP = 0x46a - TCP_HDWR_UP_ONLY = 0x46c - TCP_IDLE_REDUCE = 0x46 - TCP_INFO = 0x20 - TCP_IWND_NB = 0x2b - TCP_IWND_NSEG = 0x2c - TCP_KEEPCNT = 0x400 - TCP_KEEPIDLE = 0x100 - TCP_KEEPINIT = 0x80 - TCP_KEEPINTVL = 0x200 - TCP_LOG = 0x22 - TCP_LOGBUF = 0x23 - TCP_LOGDUMP = 0x25 - TCP_LOGDUMPID = 0x26 - TCP_LOGID = 0x24 - TCP_LOGID_CNT = 0x2e - TCP_LOG_ID_LEN = 0x40 - TCP_LOG_LIMIT = 0x4a - TCP_LOG_TAG = 0x2f - TCP_MAXBURST = 0x4 - TCP_MAXHLEN = 0x3c - TCP_MAXOLEN = 0x28 - TCP_MAXPEAKRATE = 0x45 - TCP_MAXSEG = 0x2 - TCP_MAXUNACKTIME = 0x44 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x4 - TCP_MAX_WINSHIFT = 0xe - TCP_MD5SIG = 0x10 - TCP_MINMSS = 0xd8 - TCP_MSS = 0x218 - TCP_NODELAY = 0x1 - TCP_NOOPT = 0x8 - TCP_NOPUSH = 0x4 - TCP_NO_PRR = 0x462 - TCP_PACING_RATE_CAP = 0x46b - TCP_PCAP_IN = 0x1000 - TCP_PCAP_OUT = 0x800 - TCP_PERF_INFO = 0x4e - TCP_PROC_ACCOUNTING = 0x4c - TCP_RACK_ABC_VAL = 0x46d - TCP_RACK_CHEAT_NOT_CONF_RATE = 0x459 - TCP_RACK_DO_DETECTION = 0x449 - TCP_RACK_EARLY_RECOV = 0x423 - TCP_RACK_EARLY_SEG = 0x424 - TCP_RACK_FORCE_MSEG = 0x45d - TCP_RACK_GP_INCREASE = 0x446 - TCP_RACK_GP_INCREASE_CA = 0x45a - TCP_RACK_GP_INCREASE_REC = 0x45c - TCP_RACK_GP_INCREASE_SS = 0x45b - TCP_RACK_IDLE_REDUCE_HIGH = 0x444 - TCP_RACK_MBUF_QUEUE = 0x41a - TCP_RACK_MEASURE_CNT = 0x46f - TCP_RACK_MIN_PACE = 0x445 - TCP_RACK_MIN_PACE_SEG = 0x446 - TCP_RACK_MIN_TO = 0x422 - TCP_RACK_NONRXT_CFG_RATE = 0x463 - TCP_RACK_NO_PUSH_AT_MAX = 0x466 - TCP_RACK_PACE_ALWAYS = 0x41f - TCP_RACK_PACE_MAX_SEG = 0x41e - TCP_RACK_PACE_RATE_CA = 0x45e - TCP_RACK_PACE_RATE_REC = 0x460 - TCP_RACK_PACE_RATE_SS = 0x45f - TCP_RACK_PACE_REDUCE = 0x41d - TCP_RACK_PACE_TO_FILL = 0x467 - TCP_RACK_PACING_BETA = 0x472 - TCP_RACK_PACING_BETA_ECN = 0x473 - TCP_RACK_PKT_DELAY = 0x428 - TCP_RACK_PROFILE = 0x469 - TCP_RACK_PROP = 0x41b - TCP_RACK_PROP_RATE = 0x420 - TCP_RACK_PRR_SENDALOT = 0x421 - TCP_RACK_REORD_FADE = 0x426 - TCP_RACK_REORD_THRESH = 0x425 - TCP_RACK_RR_CONF = 0x459 - TCP_RACK_TIMER_SLOP = 0x474 - TCP_RACK_TLP_INC_VAR = 0x429 - TCP_RACK_TLP_REDUCE = 0x41c - TCP_RACK_TLP_THRESH = 0x427 - TCP_RACK_TLP_USE = 0x447 - TCP_REC_ABC_VAL = 0x46e - TCP_REMOTE_UDP_ENCAPS_PORT = 0x47 - TCP_REUSPORT_LB_NUMA = 0x402 - TCP_REUSPORT_LB_NUMA_CURDOM = -0x1 - TCP_REUSPORT_LB_NUMA_NODOM = -0x2 - TCP_RXTLS_ENABLE = 0x29 - TCP_RXTLS_MODE = 0x2a - TCP_SHARED_CWND_ALLOWED = 0x4b - TCP_SHARED_CWND_ENABLE = 0x464 - TCP_SHARED_CWND_TIME_LIMIT = 0x468 - TCP_STATS = 0x21 - TCP_TIMELY_DYN_ADJ = 0x465 - TCP_TLS_MODE_IFNET = 0x2 - TCP_TLS_MODE_NONE = 0x0 - TCP_TLS_MODE_SW = 0x1 - TCP_TLS_MODE_TOE = 0x3 - TCP_TXTLS_ENABLE = 0x27 - TCP_TXTLS_MODE = 0x28 - TCP_USER_LOG = 0x30 - TCP_USE_CMP_ACKS = 0x4d - TCP_VENDOR = 0x80000000 - TCSAFLUSH = 0x2 - TIMER_ABSTIME = 0x1 - TIMER_RELTIME = 0x0 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCONS = 0x80047462 - TIOCDRAIN = 0x2000745e - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLUSH = 0x80047410 - TIOCGDRAINWAIT = 0x40047456 - TIOCGETA = 0x402c7413 - TIOCGETD = 0x4004741a - TIOCGPGRP = 0x40047477 - TIOCGPTN = 0x4004740f - TIOCGSID = 0x40047463 - TIOCGWINSZ = 0x40087468 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGDTRWAIT = 0x4004745a - TIOCMGET = 0x4004746a - TIOCMSDTRWAIT = 0x8004745b - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DCD = 0x40 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCPTMASTER = 0x2000741c - TIOCSBRK = 0x2000747b - TIOCSCTTY = 0x20007461 - TIOCSDRAINWAIT = 0x80047457 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x802c7414 - TIOCSETAF = 0x802c7416 - TIOCSETAW = 0x802c7415 - TIOCSETD = 0x8004741b - TIOCSIG = 0x2004745f - TIOCSPGRP = 0x80047476 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x20007465 - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCTIMESTAMP = 0x40107459 - TIOCUCNTL = 0x80047466 - TOSTOP = 0x400000 - UTIME_NOW = -0x1 - UTIME_OMIT = -0x2 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VERASE2 = 0x7 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VTIME = 0x11 - VWERASE = 0x4 - WCONTINUED = 0x4 - WCOREFLAG = 0x80 - WEXITED = 0x10 - WLINUXCLONE = 0x80000000 - WNOHANG = 0x1 - WNOWAIT = 0x8 - WSTOPPED = 0x2 - WTRAPPED = 0x20 - WUNTRACED = 0x2 -) - -// Errors -const ( - E2BIG = syscall.Errno(0x7) - EACCES = syscall.Errno(0xd) - EADDRINUSE = syscall.Errno(0x30) - EADDRNOTAVAIL = syscall.Errno(0x31) - EAFNOSUPPORT = syscall.Errno(0x2f) - EAGAIN = syscall.Errno(0x23) - EALREADY = syscall.Errno(0x25) - EAUTH = syscall.Errno(0x50) - EBADF = syscall.Errno(0x9) - EBADMSG = syscall.Errno(0x59) - EBADRPC = syscall.Errno(0x48) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x55) - ECAPMODE = syscall.Errno(0x5e) - ECHILD = syscall.Errno(0xa) - ECONNABORTED = syscall.Errno(0x35) - ECONNREFUSED = syscall.Errno(0x3d) - ECONNRESET = syscall.Errno(0x36) - EDEADLK = syscall.Errno(0xb) - EDESTADDRREQ = syscall.Errno(0x27) - EDOM = syscall.Errno(0x21) - EDOOFUS = syscall.Errno(0x58) - EDQUOT = syscall.Errno(0x45) - EEXIST = syscall.Errno(0x11) - EFAULT = syscall.Errno(0xe) - EFBIG = syscall.Errno(0x1b) - EFTYPE = syscall.Errno(0x4f) - EHOSTDOWN = syscall.Errno(0x40) - EHOSTUNREACH = syscall.Errno(0x41) - EIDRM = syscall.Errno(0x52) - EILSEQ = syscall.Errno(0x56) - EINPROGRESS = syscall.Errno(0x24) - EINTEGRITY = syscall.Errno(0x61) - EINTR = syscall.Errno(0x4) - EINVAL = syscall.Errno(0x16) - EIO = syscall.Errno(0x5) - EISCONN = syscall.Errno(0x38) - EISDIR = syscall.Errno(0x15) - ELAST = syscall.Errno(0x61) - ELOOP = syscall.Errno(0x3e) - EMFILE = syscall.Errno(0x18) - EMLINK = syscall.Errno(0x1f) - EMSGSIZE = syscall.Errno(0x28) - EMULTIHOP = syscall.Errno(0x5a) - ENAMETOOLONG = syscall.Errno(0x3f) - ENEEDAUTH = syscall.Errno(0x51) - ENETDOWN = syscall.Errno(0x32) - ENETRESET = syscall.Errno(0x34) - ENETUNREACH = syscall.Errno(0x33) - ENFILE = syscall.Errno(0x17) - ENOATTR = syscall.Errno(0x57) - ENOBUFS = syscall.Errno(0x37) - ENODEV = syscall.Errno(0x13) - ENOENT = syscall.Errno(0x2) - ENOEXEC = syscall.Errno(0x8) - ENOLCK = syscall.Errno(0x4d) - ENOLINK = syscall.Errno(0x5b) - ENOMEM = syscall.Errno(0xc) - ENOMSG = syscall.Errno(0x53) - ENOPROTOOPT = syscall.Errno(0x2a) - ENOSPC = syscall.Errno(0x1c) - ENOSYS = syscall.Errno(0x4e) - ENOTBLK = syscall.Errno(0xf) - ENOTCAPABLE = syscall.Errno(0x5d) - ENOTCONN = syscall.Errno(0x39) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x42) - ENOTRECOVERABLE = syscall.Errno(0x5f) - ENOTSOCK = syscall.Errno(0x26) - ENOTSUP = syscall.Errno(0x2d) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x2d) - EOVERFLOW = syscall.Errno(0x54) - EOWNERDEAD = syscall.Errno(0x60) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x2e) - EPIPE = syscall.Errno(0x20) - EPROCLIM = syscall.Errno(0x43) - EPROCUNAVAIL = syscall.Errno(0x4c) - EPROGMISMATCH = syscall.Errno(0x4b) - EPROGUNAVAIL = syscall.Errno(0x4a) - EPROTO = syscall.Errno(0x5c) - EPROTONOSUPPORT = syscall.Errno(0x2b) - EPROTOTYPE = syscall.Errno(0x29) - ERANGE = syscall.Errno(0x22) - EREMOTE = syscall.Errno(0x47) - EROFS = syscall.Errno(0x1e) - ERPCMISMATCH = syscall.Errno(0x49) - ESHUTDOWN = syscall.Errno(0x3a) - ESOCKTNOSUPPORT = syscall.Errno(0x2c) - ESPIPE = syscall.Errno(0x1d) - ESRCH = syscall.Errno(0x3) - ESTALE = syscall.Errno(0x46) - ETIMEDOUT = syscall.Errno(0x3c) - ETOOMANYREFS = syscall.Errno(0x3b) - ETXTBSY = syscall.Errno(0x1a) - EUSERS = syscall.Errno(0x44) - EWOULDBLOCK = syscall.Errno(0x23) - EXDEV = syscall.Errno(0x12) -) - -// Signals -const ( - SIGABRT = syscall.Signal(0x6) - SIGALRM = syscall.Signal(0xe) - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x14) - SIGCONT = syscall.Signal(0x13) - SIGEMT = syscall.Signal(0x7) - SIGFPE = syscall.Signal(0x8) - SIGHUP = syscall.Signal(0x1) - SIGILL = syscall.Signal(0x4) - SIGINFO = syscall.Signal(0x1d) - SIGINT = syscall.Signal(0x2) - SIGIO = syscall.Signal(0x17) - SIGIOT = syscall.Signal(0x6) - SIGKILL = syscall.Signal(0x9) - SIGLIBRT = syscall.Signal(0x21) - SIGLWP = syscall.Signal(0x20) - SIGPIPE = syscall.Signal(0xd) - SIGPROF = syscall.Signal(0x1b) - SIGQUIT = syscall.Signal(0x3) - SIGSEGV = syscall.Signal(0xb) - SIGSTOP = syscall.Signal(0x11) - SIGSYS = syscall.Signal(0xc) - SIGTERM = syscall.Signal(0xf) - SIGTHR = syscall.Signal(0x20) - SIGTRAP = syscall.Signal(0x5) - SIGTSTP = syscall.Signal(0x12) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x10) - SIGUSR1 = syscall.Signal(0x1e) - SIGUSR2 = syscall.Signal(0x1f) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "device not configured"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EDEADLK", "resource deadlock avoided"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "cross-device link"}, - {19, "ENODEV", "operation not supported by device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "result too large"}, - {35, "EWOULDBLOCK", "resource temporarily unavailable"}, - {36, "EINPROGRESS", "operation now in progress"}, - {37, "EALREADY", "operation already in progress"}, - {38, "ENOTSOCK", "socket operation on non-socket"}, - {39, "EDESTADDRREQ", "destination address required"}, - {40, "EMSGSIZE", "message too long"}, - {41, "EPROTOTYPE", "protocol wrong type for socket"}, - {42, "ENOPROTOOPT", "protocol not available"}, - {43, "EPROTONOSUPPORT", "protocol not supported"}, - {44, "ESOCKTNOSUPPORT", "socket type not supported"}, - {45, "EOPNOTSUPP", "operation not supported"}, - {46, "EPFNOSUPPORT", "protocol family not supported"}, - {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, - {48, "EADDRINUSE", "address already in use"}, - {49, "EADDRNOTAVAIL", "can't assign requested address"}, - {50, "ENETDOWN", "network is down"}, - {51, "ENETUNREACH", "network is unreachable"}, - {52, "ENETRESET", "network dropped connection on reset"}, - {53, "ECONNABORTED", "software caused connection abort"}, - {54, "ECONNRESET", "connection reset by peer"}, - {55, "ENOBUFS", "no buffer space available"}, - {56, "EISCONN", "socket is already connected"}, - {57, "ENOTCONN", "socket is not connected"}, - {58, "ESHUTDOWN", "can't send after socket shutdown"}, - {59, "ETOOMANYREFS", "too many references: can't splice"}, - {60, "ETIMEDOUT", "operation timed out"}, - {61, "ECONNREFUSED", "connection refused"}, - {62, "ELOOP", "too many levels of symbolic links"}, - {63, "ENAMETOOLONG", "file name too long"}, - {64, "EHOSTDOWN", "host is down"}, - {65, "EHOSTUNREACH", "no route to host"}, - {66, "ENOTEMPTY", "directory not empty"}, - {67, "EPROCLIM", "too many processes"}, - {68, "EUSERS", "too many users"}, - {69, "EDQUOT", "disc quota exceeded"}, - {70, "ESTALE", "stale NFS file handle"}, - {71, "EREMOTE", "too many levels of remote in path"}, - {72, "EBADRPC", "RPC struct is bad"}, - {73, "ERPCMISMATCH", "RPC version wrong"}, - {74, "EPROGUNAVAIL", "RPC prog. not avail"}, - {75, "EPROGMISMATCH", "program version wrong"}, - {76, "EPROCUNAVAIL", "bad procedure for program"}, - {77, "ENOLCK", "no locks available"}, - {78, "ENOSYS", "function not implemented"}, - {79, "EFTYPE", "inappropriate file type or format"}, - {80, "EAUTH", "authentication error"}, - {81, "ENEEDAUTH", "need authenticator"}, - {82, "EIDRM", "identifier removed"}, - {83, "ENOMSG", "no message of desired type"}, - {84, "EOVERFLOW", "value too large to be stored in data type"}, - {85, "ECANCELED", "operation canceled"}, - {86, "EILSEQ", "illegal byte sequence"}, - {87, "ENOATTR", "attribute not found"}, - {88, "EDOOFUS", "programming error"}, - {89, "EBADMSG", "bad message"}, - {90, "EMULTIHOP", "multihop attempted"}, - {91, "ENOLINK", "link has been severed"}, - {92, "EPROTO", "protocol error"}, - {93, "ENOTCAPABLE", "capabilities insufficient"}, - {94, "ECAPMODE", "not permitted in capability mode"}, - {95, "ENOTRECOVERABLE", "state not recoverable"}, - {96, "EOWNERDEAD", "previous owner died"}, - {97, "EINTEGRITY", "integrity check failed"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, - {6, "SIGIOT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGURG", "urgent I/O condition"}, - {17, "SIGSTOP", "suspended (signal)"}, - {18, "SIGTSTP", "suspended"}, - {19, "SIGCONT", "continued"}, - {20, "SIGCHLD", "child exited"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGIO", "I/O possible"}, - {24, "SIGXCPU", "cputime limit exceeded"}, - {25, "SIGXFSZ", "filesize limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window size changes"}, - {29, "SIGINFO", "information request"}, - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, - {32, "SIGTHR", "unknown signal"}, - {33, "SIGLIBRT", "unknown signal"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go deleted file mode 100644 index 785d693..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ /dev/null @@ -1,3457 +0,0 @@ -// Code generated by mkmerge; DO NOT EDIT. - -//go:build linux -// +build linux - -package unix - -import "syscall" - -const ( - AAFS_MAGIC = 0x5a3c69f0 - ADFS_SUPER_MAGIC = 0xadf5 - AFFS_SUPER_MAGIC = 0xadff - AFS_FS_MAGIC = 0x6b414653 - AFS_SUPER_MAGIC = 0x5346414f - AF_ALG = 0x26 - AF_APPLETALK = 0x5 - AF_ASH = 0x12 - AF_ATMPVC = 0x8 - AF_ATMSVC = 0x14 - AF_AX25 = 0x3 - AF_BLUETOOTH = 0x1f - AF_BRIDGE = 0x7 - AF_CAIF = 0x25 - AF_CAN = 0x1d - AF_DECnet = 0xc - AF_ECONET = 0x13 - AF_FILE = 0x1 - AF_IB = 0x1b - AF_IEEE802154 = 0x24 - AF_INET = 0x2 - AF_INET6 = 0xa - AF_IPX = 0x4 - AF_IRDA = 0x17 - AF_ISDN = 0x22 - AF_IUCV = 0x20 - AF_KCM = 0x29 - AF_KEY = 0xf - AF_LLC = 0x1a - AF_LOCAL = 0x1 - AF_MAX = 0x2e - AF_MCTP = 0x2d - AF_MPLS = 0x1c - AF_NETBEUI = 0xd - AF_NETLINK = 0x10 - AF_NETROM = 0x6 - AF_NFC = 0x27 - AF_PACKET = 0x11 - AF_PHONET = 0x23 - AF_PPPOX = 0x18 - AF_QIPCRTR = 0x2a - AF_RDS = 0x15 - AF_ROSE = 0xb - AF_ROUTE = 0x10 - AF_RXRPC = 0x21 - AF_SECURITY = 0xe - AF_SMC = 0x2b - AF_SNA = 0x16 - AF_TIPC = 0x1e - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - AF_VSOCK = 0x28 - AF_WANPIPE = 0x19 - AF_X25 = 0x9 - AF_XDP = 0x2c - ALG_OP_DECRYPT = 0x0 - ALG_OP_ENCRYPT = 0x1 - ALG_SET_AEAD_ASSOCLEN = 0x4 - ALG_SET_AEAD_AUTHSIZE = 0x5 - ALG_SET_DRBG_ENTROPY = 0x6 - ALG_SET_IV = 0x2 - ALG_SET_KEY = 0x1 - ALG_SET_OP = 0x3 - ANON_INODE_FS_MAGIC = 0x9041934 - ARPHRD_6LOWPAN = 0x339 - ARPHRD_ADAPT = 0x108 - ARPHRD_APPLETLK = 0x8 - ARPHRD_ARCNET = 0x7 - ARPHRD_ASH = 0x30d - ARPHRD_ATM = 0x13 - ARPHRD_AX25 = 0x3 - ARPHRD_BIF = 0x307 - ARPHRD_CAIF = 0x336 - ARPHRD_CAN = 0x118 - ARPHRD_CHAOS = 0x5 - ARPHRD_CISCO = 0x201 - ARPHRD_CSLIP = 0x101 - ARPHRD_CSLIP6 = 0x103 - ARPHRD_DDCMP = 0x205 - ARPHRD_DLCI = 0xf - ARPHRD_ECONET = 0x30e - ARPHRD_EETHER = 0x2 - ARPHRD_ETHER = 0x1 - ARPHRD_EUI64 = 0x1b - ARPHRD_FCAL = 0x311 - ARPHRD_FCFABRIC = 0x313 - ARPHRD_FCPL = 0x312 - ARPHRD_FCPP = 0x310 - ARPHRD_FDDI = 0x306 - ARPHRD_FRAD = 0x302 - ARPHRD_HDLC = 0x201 - ARPHRD_HIPPI = 0x30c - ARPHRD_HWX25 = 0x110 - ARPHRD_IEEE1394 = 0x18 - ARPHRD_IEEE802 = 0x6 - ARPHRD_IEEE80211 = 0x321 - ARPHRD_IEEE80211_PRISM = 0x322 - ARPHRD_IEEE80211_RADIOTAP = 0x323 - ARPHRD_IEEE802154 = 0x324 - ARPHRD_IEEE802154_MONITOR = 0x325 - ARPHRD_IEEE802_TR = 0x320 - ARPHRD_INFINIBAND = 0x20 - ARPHRD_IP6GRE = 0x337 - ARPHRD_IPDDP = 0x309 - ARPHRD_IPGRE = 0x30a - ARPHRD_IRDA = 0x30f - ARPHRD_LAPB = 0x204 - ARPHRD_LOCALTLK = 0x305 - ARPHRD_LOOPBACK = 0x304 - ARPHRD_MCTP = 0x122 - ARPHRD_METRICOM = 0x17 - ARPHRD_NETLINK = 0x338 - ARPHRD_NETROM = 0x0 - ARPHRD_NONE = 0xfffe - ARPHRD_PHONET = 0x334 - ARPHRD_PHONET_PIPE = 0x335 - ARPHRD_PIMREG = 0x30b - ARPHRD_PPP = 0x200 - ARPHRD_PRONET = 0x4 - ARPHRD_RAWHDLC = 0x206 - ARPHRD_RAWIP = 0x207 - ARPHRD_ROSE = 0x10e - ARPHRD_RSRVD = 0x104 - ARPHRD_SIT = 0x308 - ARPHRD_SKIP = 0x303 - ARPHRD_SLIP = 0x100 - ARPHRD_SLIP6 = 0x102 - ARPHRD_TUNNEL = 0x300 - ARPHRD_TUNNEL6 = 0x301 - ARPHRD_VOID = 0xffff - ARPHRD_VSOCKMON = 0x33a - ARPHRD_X25 = 0x10f - AUDIT_ADD = 0x3eb - AUDIT_ADD_RULE = 0x3f3 - AUDIT_ALWAYS = 0x2 - AUDIT_ANOM_ABEND = 0x6a5 - AUDIT_ANOM_CREAT = 0x6a7 - AUDIT_ANOM_LINK = 0x6a6 - AUDIT_ANOM_PROMISCUOUS = 0x6a4 - AUDIT_ARCH = 0xb - AUDIT_ARCH_AARCH64 = 0xc00000b7 - AUDIT_ARCH_ALPHA = 0xc0009026 - AUDIT_ARCH_ARCOMPACT = 0x4000005d - AUDIT_ARCH_ARCOMPACTBE = 0x5d - AUDIT_ARCH_ARCV2 = 0x400000c3 - AUDIT_ARCH_ARCV2BE = 0xc3 - AUDIT_ARCH_ARM = 0x40000028 - AUDIT_ARCH_ARMEB = 0x28 - AUDIT_ARCH_C6X = 0x4000008c - AUDIT_ARCH_C6XBE = 0x8c - AUDIT_ARCH_CRIS = 0x4000004c - AUDIT_ARCH_CSKY = 0x400000fc - AUDIT_ARCH_FRV = 0x5441 - AUDIT_ARCH_H8300 = 0x2e - AUDIT_ARCH_HEXAGON = 0xa4 - AUDIT_ARCH_I386 = 0x40000003 - AUDIT_ARCH_IA64 = 0xc0000032 - AUDIT_ARCH_LOONGARCH32 = 0x40000102 - AUDIT_ARCH_LOONGARCH64 = 0xc0000102 - AUDIT_ARCH_M32R = 0x58 - AUDIT_ARCH_M68K = 0x4 - AUDIT_ARCH_MICROBLAZE = 0xbd - AUDIT_ARCH_MIPS = 0x8 - AUDIT_ARCH_MIPS64 = 0x80000008 - AUDIT_ARCH_MIPS64N32 = 0xa0000008 - AUDIT_ARCH_MIPSEL = 0x40000008 - AUDIT_ARCH_MIPSEL64 = 0xc0000008 - AUDIT_ARCH_MIPSEL64N32 = 0xe0000008 - AUDIT_ARCH_NDS32 = 0x400000a7 - AUDIT_ARCH_NDS32BE = 0xa7 - AUDIT_ARCH_NIOS2 = 0x40000071 - AUDIT_ARCH_OPENRISC = 0x5c - AUDIT_ARCH_PARISC = 0xf - AUDIT_ARCH_PARISC64 = 0x8000000f - AUDIT_ARCH_PPC = 0x14 - AUDIT_ARCH_PPC64 = 0x80000015 - AUDIT_ARCH_PPC64LE = 0xc0000015 - AUDIT_ARCH_RISCV32 = 0x400000f3 - AUDIT_ARCH_RISCV64 = 0xc00000f3 - AUDIT_ARCH_S390 = 0x16 - AUDIT_ARCH_S390X = 0x80000016 - AUDIT_ARCH_SH = 0x2a - AUDIT_ARCH_SH64 = 0x8000002a - AUDIT_ARCH_SHEL = 0x4000002a - AUDIT_ARCH_SHEL64 = 0xc000002a - AUDIT_ARCH_SPARC = 0x2 - AUDIT_ARCH_SPARC64 = 0x8000002b - AUDIT_ARCH_TILEGX = 0xc00000bf - AUDIT_ARCH_TILEGX32 = 0x400000bf - AUDIT_ARCH_TILEPRO = 0x400000bc - AUDIT_ARCH_UNICORE = 0x4000006e - AUDIT_ARCH_X86_64 = 0xc000003e - AUDIT_ARCH_XTENSA = 0x5e - AUDIT_ARG0 = 0xc8 - AUDIT_ARG1 = 0xc9 - AUDIT_ARG2 = 0xca - AUDIT_ARG3 = 0xcb - AUDIT_AVC = 0x578 - AUDIT_AVC_PATH = 0x57a - AUDIT_BITMASK_SIZE = 0x40 - AUDIT_BIT_MASK = 0x8000000 - AUDIT_BIT_TEST = 0x48000000 - AUDIT_BPF = 0x536 - AUDIT_BPRM_FCAPS = 0x529 - AUDIT_CAPSET = 0x52a - AUDIT_CLASS_CHATTR = 0x2 - AUDIT_CLASS_CHATTR_32 = 0x3 - AUDIT_CLASS_DIR_WRITE = 0x0 - AUDIT_CLASS_DIR_WRITE_32 = 0x1 - AUDIT_CLASS_READ = 0x4 - AUDIT_CLASS_READ_32 = 0x5 - AUDIT_CLASS_SIGNAL = 0x8 - AUDIT_CLASS_SIGNAL_32 = 0x9 - AUDIT_CLASS_WRITE = 0x6 - AUDIT_CLASS_WRITE_32 = 0x7 - AUDIT_COMPARE_AUID_TO_EUID = 0x10 - AUDIT_COMPARE_AUID_TO_FSUID = 0xe - AUDIT_COMPARE_AUID_TO_OBJ_UID = 0x5 - AUDIT_COMPARE_AUID_TO_SUID = 0xf - AUDIT_COMPARE_EGID_TO_FSGID = 0x17 - AUDIT_COMPARE_EGID_TO_OBJ_GID = 0x4 - AUDIT_COMPARE_EGID_TO_SGID = 0x18 - AUDIT_COMPARE_EUID_TO_FSUID = 0x12 - AUDIT_COMPARE_EUID_TO_OBJ_UID = 0x3 - AUDIT_COMPARE_EUID_TO_SUID = 0x11 - AUDIT_COMPARE_FSGID_TO_OBJ_GID = 0x9 - AUDIT_COMPARE_FSUID_TO_OBJ_UID = 0x8 - AUDIT_COMPARE_GID_TO_EGID = 0x14 - AUDIT_COMPARE_GID_TO_FSGID = 0x15 - AUDIT_COMPARE_GID_TO_OBJ_GID = 0x2 - AUDIT_COMPARE_GID_TO_SGID = 0x16 - AUDIT_COMPARE_SGID_TO_FSGID = 0x19 - AUDIT_COMPARE_SGID_TO_OBJ_GID = 0x7 - AUDIT_COMPARE_SUID_TO_FSUID = 0x13 - AUDIT_COMPARE_SUID_TO_OBJ_UID = 0x6 - AUDIT_COMPARE_UID_TO_AUID = 0xa - AUDIT_COMPARE_UID_TO_EUID = 0xb - AUDIT_COMPARE_UID_TO_FSUID = 0xc - AUDIT_COMPARE_UID_TO_OBJ_UID = 0x1 - AUDIT_COMPARE_UID_TO_SUID = 0xd - AUDIT_CONFIG_CHANGE = 0x519 - AUDIT_CWD = 0x51b - AUDIT_DAEMON_ABORT = 0x4b2 - AUDIT_DAEMON_CONFIG = 0x4b3 - AUDIT_DAEMON_END = 0x4b1 - AUDIT_DAEMON_START = 0x4b0 - AUDIT_DEL = 0x3ec - AUDIT_DEL_RULE = 0x3f4 - AUDIT_DEVMAJOR = 0x64 - AUDIT_DEVMINOR = 0x65 - AUDIT_DIR = 0x6b - AUDIT_DM_CTRL = 0x53a - AUDIT_DM_EVENT = 0x53b - AUDIT_EGID = 0x6 - AUDIT_EOE = 0x528 - AUDIT_EQUAL = 0x40000000 - AUDIT_EUID = 0x2 - AUDIT_EVENT_LISTENER = 0x537 - AUDIT_EXE = 0x70 - AUDIT_EXECVE = 0x51d - AUDIT_EXIT = 0x67 - AUDIT_FAIL_PANIC = 0x2 - AUDIT_FAIL_PRINTK = 0x1 - AUDIT_FAIL_SILENT = 0x0 - AUDIT_FANOTIFY = 0x533 - AUDIT_FD_PAIR = 0x525 - AUDIT_FEATURE_BITMAP_ALL = 0x7f - AUDIT_FEATURE_BITMAP_BACKLOG_LIMIT = 0x1 - AUDIT_FEATURE_BITMAP_BACKLOG_WAIT_TIME = 0x2 - AUDIT_FEATURE_BITMAP_EXCLUDE_EXTEND = 0x8 - AUDIT_FEATURE_BITMAP_EXECUTABLE_PATH = 0x4 - AUDIT_FEATURE_BITMAP_FILTER_FS = 0x40 - AUDIT_FEATURE_BITMAP_LOST_RESET = 0x20 - AUDIT_FEATURE_BITMAP_SESSIONID_FILTER = 0x10 - AUDIT_FEATURE_CHANGE = 0x530 - AUDIT_FEATURE_LOGINUID_IMMUTABLE = 0x1 - AUDIT_FEATURE_ONLY_UNSET_LOGINUID = 0x0 - AUDIT_FEATURE_VERSION = 0x1 - AUDIT_FIELD_COMPARE = 0x6f - AUDIT_FILETYPE = 0x6c - AUDIT_FILTERKEY = 0xd2 - AUDIT_FILTER_ENTRY = 0x2 - AUDIT_FILTER_EXCLUDE = 0x5 - AUDIT_FILTER_EXIT = 0x4 - AUDIT_FILTER_FS = 0x6 - AUDIT_FILTER_PREPEND = 0x10 - AUDIT_FILTER_TASK = 0x1 - AUDIT_FILTER_TYPE = 0x5 - AUDIT_FILTER_URING_EXIT = 0x7 - AUDIT_FILTER_USER = 0x0 - AUDIT_FILTER_WATCH = 0x3 - AUDIT_FIRST_KERN_ANOM_MSG = 0x6a4 - AUDIT_FIRST_USER_MSG = 0x44c - AUDIT_FIRST_USER_MSG2 = 0x834 - AUDIT_FSGID = 0x8 - AUDIT_FSTYPE = 0x1a - AUDIT_FSUID = 0x4 - AUDIT_GET = 0x3e8 - AUDIT_GET_FEATURE = 0x3fb - AUDIT_GID = 0x5 - AUDIT_GREATER_THAN = 0x20000000 - AUDIT_GREATER_THAN_OR_EQUAL = 0x60000000 - AUDIT_INODE = 0x66 - AUDIT_INTEGRITY_DATA = 0x708 - AUDIT_INTEGRITY_EVM_XATTR = 0x70e - AUDIT_INTEGRITY_HASH = 0x70b - AUDIT_INTEGRITY_METADATA = 0x709 - AUDIT_INTEGRITY_PCR = 0x70c - AUDIT_INTEGRITY_POLICY_RULE = 0x70f - AUDIT_INTEGRITY_RULE = 0x70d - AUDIT_INTEGRITY_STATUS = 0x70a - AUDIT_IPC = 0x517 - AUDIT_IPC_SET_PERM = 0x51f - AUDIT_KERNEL = 0x7d0 - AUDIT_KERNEL_OTHER = 0x524 - AUDIT_KERN_MODULE = 0x532 - AUDIT_LAST_FEATURE = 0x1 - AUDIT_LAST_KERN_ANOM_MSG = 0x707 - AUDIT_LAST_USER_MSG = 0x4af - AUDIT_LAST_USER_MSG2 = 0xbb7 - AUDIT_LESS_THAN = 0x10000000 - AUDIT_LESS_THAN_OR_EQUAL = 0x50000000 - AUDIT_LIST = 0x3ea - AUDIT_LIST_RULES = 0x3f5 - AUDIT_LOGIN = 0x3ee - AUDIT_LOGINUID = 0x9 - AUDIT_LOGINUID_SET = 0x18 - AUDIT_MAC_CALIPSO_ADD = 0x58a - AUDIT_MAC_CALIPSO_DEL = 0x58b - AUDIT_MAC_CIPSOV4_ADD = 0x57f - AUDIT_MAC_CIPSOV4_DEL = 0x580 - AUDIT_MAC_CONFIG_CHANGE = 0x57d - AUDIT_MAC_IPSEC_ADDSA = 0x583 - AUDIT_MAC_IPSEC_ADDSPD = 0x585 - AUDIT_MAC_IPSEC_DELSA = 0x584 - AUDIT_MAC_IPSEC_DELSPD = 0x586 - AUDIT_MAC_IPSEC_EVENT = 0x587 - AUDIT_MAC_MAP_ADD = 0x581 - AUDIT_MAC_MAP_DEL = 0x582 - AUDIT_MAC_POLICY_LOAD = 0x57b - AUDIT_MAC_STATUS = 0x57c - AUDIT_MAC_UNLBL_ALLOW = 0x57e - AUDIT_MAC_UNLBL_STCADD = 0x588 - AUDIT_MAC_UNLBL_STCDEL = 0x589 - AUDIT_MAKE_EQUIV = 0x3f7 - AUDIT_MAX_FIELDS = 0x40 - AUDIT_MAX_FIELD_COMPARE = 0x19 - AUDIT_MAX_KEY_LEN = 0x100 - AUDIT_MESSAGE_TEXT_MAX = 0x2170 - AUDIT_MMAP = 0x52b - AUDIT_MQ_GETSETATTR = 0x523 - AUDIT_MQ_NOTIFY = 0x522 - AUDIT_MQ_OPEN = 0x520 - AUDIT_MQ_SENDRECV = 0x521 - AUDIT_MSGTYPE = 0xc - AUDIT_NEGATE = 0x80000000 - AUDIT_NETFILTER_CFG = 0x52d - AUDIT_NETFILTER_PKT = 0x52c - AUDIT_NEVER = 0x0 - AUDIT_NLGRP_MAX = 0x1 - AUDIT_NOT_EQUAL = 0x30000000 - AUDIT_NR_FILTERS = 0x8 - AUDIT_OBJ_GID = 0x6e - AUDIT_OBJ_LEV_HIGH = 0x17 - AUDIT_OBJ_LEV_LOW = 0x16 - AUDIT_OBJ_PID = 0x526 - AUDIT_OBJ_ROLE = 0x14 - AUDIT_OBJ_TYPE = 0x15 - AUDIT_OBJ_UID = 0x6d - AUDIT_OBJ_USER = 0x13 - AUDIT_OPENAT2 = 0x539 - AUDIT_OPERATORS = 0x78000000 - AUDIT_PATH = 0x516 - AUDIT_PERM = 0x6a - AUDIT_PERM_ATTR = 0x8 - AUDIT_PERM_EXEC = 0x1 - AUDIT_PERM_READ = 0x4 - AUDIT_PERM_WRITE = 0x2 - AUDIT_PERS = 0xa - AUDIT_PID = 0x0 - AUDIT_POSSIBLE = 0x1 - AUDIT_PPID = 0x12 - AUDIT_PROCTITLE = 0x52f - AUDIT_REPLACE = 0x531 - AUDIT_SADDR_FAM = 0x71 - AUDIT_SECCOMP = 0x52e - AUDIT_SELINUX_ERR = 0x579 - AUDIT_SESSIONID = 0x19 - AUDIT_SET = 0x3e9 - AUDIT_SET_FEATURE = 0x3fa - AUDIT_SGID = 0x7 - AUDIT_SID_UNSET = 0xffffffff - AUDIT_SIGNAL_INFO = 0x3f2 - AUDIT_SOCKADDR = 0x51a - AUDIT_SOCKETCALL = 0x518 - AUDIT_STATUS_BACKLOG_LIMIT = 0x10 - AUDIT_STATUS_BACKLOG_WAIT_TIME = 0x20 - AUDIT_STATUS_BACKLOG_WAIT_TIME_ACTUAL = 0x80 - AUDIT_STATUS_ENABLED = 0x1 - AUDIT_STATUS_FAILURE = 0x2 - AUDIT_STATUS_LOST = 0x40 - AUDIT_STATUS_PID = 0x4 - AUDIT_STATUS_RATE_LIMIT = 0x8 - AUDIT_SUBJ_CLR = 0x11 - AUDIT_SUBJ_ROLE = 0xe - AUDIT_SUBJ_SEN = 0x10 - AUDIT_SUBJ_TYPE = 0xf - AUDIT_SUBJ_USER = 0xd - AUDIT_SUCCESS = 0x68 - AUDIT_SUID = 0x3 - AUDIT_SYSCALL = 0x514 - AUDIT_SYSCALL_CLASSES = 0x10 - AUDIT_TIME_ADJNTPVAL = 0x535 - AUDIT_TIME_INJOFFSET = 0x534 - AUDIT_TRIM = 0x3f6 - AUDIT_TTY = 0x527 - AUDIT_TTY_GET = 0x3f8 - AUDIT_TTY_SET = 0x3f9 - AUDIT_UID = 0x1 - AUDIT_UID_UNSET = 0xffffffff - AUDIT_UNUSED_BITS = 0x7fffc00 - AUDIT_URINGOP = 0x538 - AUDIT_USER = 0x3ed - AUDIT_USER_AVC = 0x453 - AUDIT_USER_TTY = 0x464 - AUDIT_VERSION_BACKLOG_LIMIT = 0x1 - AUDIT_VERSION_BACKLOG_WAIT_TIME = 0x2 - AUDIT_VERSION_LATEST = 0x7f - AUDIT_WATCH = 0x69 - AUDIT_WATCH_INS = 0x3ef - AUDIT_WATCH_LIST = 0x3f1 - AUDIT_WATCH_REM = 0x3f0 - AUTOFS_SUPER_MAGIC = 0x187 - B0 = 0x0 - B110 = 0x3 - B1200 = 0x9 - B134 = 0x4 - B150 = 0x5 - B1800 = 0xa - B19200 = 0xe - B200 = 0x6 - B2400 = 0xb - B300 = 0x7 - B38400 = 0xf - B4800 = 0xc - B50 = 0x1 - B600 = 0x8 - B75 = 0x2 - B9600 = 0xd - BALLOON_KVM_MAGIC = 0x13661366 - BDEVFS_MAGIC = 0x62646576 - BINDERFS_SUPER_MAGIC = 0x6c6f6f70 - BINFMTFS_MAGIC = 0x42494e4d - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALU = 0x4 - BPF_ALU64 = 0x7 - BPF_AND = 0x50 - BPF_ARSH = 0xc0 - BPF_ATOMIC = 0xc0 - BPF_B = 0x10 - BPF_BUILD_ID_SIZE = 0x14 - BPF_CALL = 0x80 - BPF_CMPXCHG = 0xf1 - BPF_DIV = 0x30 - BPF_DW = 0x18 - BPF_END = 0xd0 - BPF_EXIT = 0x90 - BPF_FETCH = 0x1 - BPF_FROM_BE = 0x8 - BPF_FROM_LE = 0x0 - BPF_FS_MAGIC = 0xcafe4a11 - BPF_F_ALLOW_MULTI = 0x2 - BPF_F_ALLOW_OVERRIDE = 0x1 - BPF_F_ANY_ALIGNMENT = 0x2 - BPF_F_KPROBE_MULTI_RETURN = 0x1 - BPF_F_QUERY_EFFECTIVE = 0x1 - BPF_F_REPLACE = 0x4 - BPF_F_SLEEPABLE = 0x10 - BPF_F_STRICT_ALIGNMENT = 0x1 - BPF_F_TEST_RND_HI32 = 0x4 - BPF_F_TEST_RUN_ON_CPU = 0x1 - BPF_F_TEST_STATE_FREQ = 0x8 - BPF_F_TEST_XDP_LIVE_FRAMES = 0x2 - BPF_F_XDP_HAS_FRAGS = 0x20 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JLE = 0xb0 - BPF_JLT = 0xa0 - BPF_JMP = 0x5 - BPF_JMP32 = 0x6 - BPF_JNE = 0x50 - BPF_JSET = 0x40 - BPF_JSGE = 0x70 - BPF_JSGT = 0x60 - BPF_JSLE = 0xd0 - BPF_JSLT = 0xc0 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LL_OFF = -0x200000 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXINSNS = 0x1000 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MOD = 0x90 - BPF_MOV = 0xb0 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_NET_OFF = -0x100000 - BPF_OBJ_NAME_LEN = 0x10 - BPF_OR = 0x40 - BPF_PSEUDO_BTF_ID = 0x3 - BPF_PSEUDO_CALL = 0x1 - BPF_PSEUDO_FUNC = 0x4 - BPF_PSEUDO_KFUNC_CALL = 0x2 - BPF_PSEUDO_MAP_FD = 0x1 - BPF_PSEUDO_MAP_IDX = 0x5 - BPF_PSEUDO_MAP_IDX_VALUE = 0x6 - BPF_PSEUDO_MAP_VALUE = 0x2 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAG_SIZE = 0x8 - BPF_TAX = 0x0 - BPF_TO_BE = 0x8 - BPF_TO_LE = 0x0 - BPF_TXA = 0x80 - BPF_W = 0x0 - BPF_X = 0x8 - BPF_XADD = 0xc0 - BPF_XCHG = 0xe1 - BPF_XOR = 0xa0 - BRKINT = 0x2 - BS0 = 0x0 - BTRFS_SUPER_MAGIC = 0x9123683e - BTRFS_TEST_MAGIC = 0x73727279 - BUS_BLUETOOTH = 0x5 - BUS_HIL = 0x4 - BUS_USB = 0x3 - BUS_VIRTUAL = 0x6 - CAN_BCM = 0x2 - CAN_CTRLMODE_3_SAMPLES = 0x4 - CAN_CTRLMODE_BERR_REPORTING = 0x10 - CAN_CTRLMODE_CC_LEN8_DLC = 0x100 - CAN_CTRLMODE_FD = 0x20 - CAN_CTRLMODE_FD_NON_ISO = 0x80 - CAN_CTRLMODE_LISTENONLY = 0x2 - CAN_CTRLMODE_LOOPBACK = 0x1 - CAN_CTRLMODE_ONE_SHOT = 0x8 - CAN_CTRLMODE_PRESUME_ACK = 0x40 - CAN_CTRLMODE_TDC_AUTO = 0x200 - CAN_CTRLMODE_TDC_MANUAL = 0x400 - CAN_EFF_FLAG = 0x80000000 - CAN_EFF_ID_BITS = 0x1d - CAN_EFF_MASK = 0x1fffffff - CAN_ERR_ACK = 0x20 - CAN_ERR_BUSERROR = 0x80 - CAN_ERR_BUSOFF = 0x40 - CAN_ERR_CRTL = 0x4 - CAN_ERR_CRTL_ACTIVE = 0x40 - CAN_ERR_CRTL_RX_OVERFLOW = 0x1 - CAN_ERR_CRTL_RX_PASSIVE = 0x10 - CAN_ERR_CRTL_RX_WARNING = 0x4 - CAN_ERR_CRTL_TX_OVERFLOW = 0x2 - CAN_ERR_CRTL_TX_PASSIVE = 0x20 - CAN_ERR_CRTL_TX_WARNING = 0x8 - CAN_ERR_CRTL_UNSPEC = 0x0 - CAN_ERR_DLC = 0x8 - CAN_ERR_FLAG = 0x20000000 - CAN_ERR_LOSTARB = 0x2 - CAN_ERR_LOSTARB_UNSPEC = 0x0 - CAN_ERR_MASK = 0x1fffffff - CAN_ERR_PROT = 0x8 - CAN_ERR_PROT_ACTIVE = 0x40 - CAN_ERR_PROT_BIT = 0x1 - CAN_ERR_PROT_BIT0 = 0x8 - CAN_ERR_PROT_BIT1 = 0x10 - CAN_ERR_PROT_FORM = 0x2 - CAN_ERR_PROT_LOC_ACK = 0x19 - CAN_ERR_PROT_LOC_ACK_DEL = 0x1b - CAN_ERR_PROT_LOC_CRC_DEL = 0x18 - CAN_ERR_PROT_LOC_CRC_SEQ = 0x8 - CAN_ERR_PROT_LOC_DATA = 0xa - CAN_ERR_PROT_LOC_DLC = 0xb - CAN_ERR_PROT_LOC_EOF = 0x1a - CAN_ERR_PROT_LOC_ID04_00 = 0xe - CAN_ERR_PROT_LOC_ID12_05 = 0xf - CAN_ERR_PROT_LOC_ID17_13 = 0x7 - CAN_ERR_PROT_LOC_ID20_18 = 0x6 - CAN_ERR_PROT_LOC_ID28_21 = 0x2 - CAN_ERR_PROT_LOC_IDE = 0x5 - CAN_ERR_PROT_LOC_INTERM = 0x12 - CAN_ERR_PROT_LOC_RES0 = 0x9 - CAN_ERR_PROT_LOC_RES1 = 0xd - CAN_ERR_PROT_LOC_RTR = 0xc - CAN_ERR_PROT_LOC_SOF = 0x3 - CAN_ERR_PROT_LOC_SRTR = 0x4 - CAN_ERR_PROT_LOC_UNSPEC = 0x0 - CAN_ERR_PROT_OVERLOAD = 0x20 - CAN_ERR_PROT_STUFF = 0x4 - CAN_ERR_PROT_TX = 0x80 - CAN_ERR_PROT_UNSPEC = 0x0 - CAN_ERR_RESTARTED = 0x100 - CAN_ERR_TRX = 0x10 - CAN_ERR_TRX_CANH_NO_WIRE = 0x4 - CAN_ERR_TRX_CANH_SHORT_TO_BAT = 0x5 - CAN_ERR_TRX_CANH_SHORT_TO_GND = 0x7 - CAN_ERR_TRX_CANH_SHORT_TO_VCC = 0x6 - CAN_ERR_TRX_CANL_NO_WIRE = 0x40 - CAN_ERR_TRX_CANL_SHORT_TO_BAT = 0x50 - CAN_ERR_TRX_CANL_SHORT_TO_CANH = 0x80 - CAN_ERR_TRX_CANL_SHORT_TO_GND = 0x70 - CAN_ERR_TRX_CANL_SHORT_TO_VCC = 0x60 - CAN_ERR_TRX_UNSPEC = 0x0 - CAN_ERR_TX_TIMEOUT = 0x1 - CAN_INV_FILTER = 0x20000000 - CAN_ISOTP = 0x6 - CAN_J1939 = 0x7 - CAN_MAX_DLC = 0x8 - CAN_MAX_DLEN = 0x8 - CAN_MAX_RAW_DLC = 0xf - CAN_MCNET = 0x5 - CAN_MTU = 0x10 - CAN_NPROTO = 0x8 - CAN_RAW = 0x1 - CAN_RAW_FILTER_MAX = 0x200 - CAN_RTR_FLAG = 0x40000000 - CAN_SFF_ID_BITS = 0xb - CAN_SFF_MASK = 0x7ff - CAN_TERMINATION_DISABLED = 0x0 - CAN_TP16 = 0x3 - CAN_TP20 = 0x4 - CAP_AUDIT_CONTROL = 0x1e - CAP_AUDIT_READ = 0x25 - CAP_AUDIT_WRITE = 0x1d - CAP_BLOCK_SUSPEND = 0x24 - CAP_BPF = 0x27 - CAP_CHECKPOINT_RESTORE = 0x28 - CAP_CHOWN = 0x0 - CAP_DAC_OVERRIDE = 0x1 - CAP_DAC_READ_SEARCH = 0x2 - CAP_FOWNER = 0x3 - CAP_FSETID = 0x4 - CAP_IPC_LOCK = 0xe - CAP_IPC_OWNER = 0xf - CAP_KILL = 0x5 - CAP_LAST_CAP = 0x28 - CAP_LEASE = 0x1c - CAP_LINUX_IMMUTABLE = 0x9 - CAP_MAC_ADMIN = 0x21 - CAP_MAC_OVERRIDE = 0x20 - CAP_MKNOD = 0x1b - CAP_NET_ADMIN = 0xc - CAP_NET_BIND_SERVICE = 0xa - CAP_NET_BROADCAST = 0xb - CAP_NET_RAW = 0xd - CAP_PERFMON = 0x26 - CAP_SETFCAP = 0x1f - CAP_SETGID = 0x6 - CAP_SETPCAP = 0x8 - CAP_SETUID = 0x7 - CAP_SYSLOG = 0x22 - CAP_SYS_ADMIN = 0x15 - CAP_SYS_BOOT = 0x16 - CAP_SYS_CHROOT = 0x12 - CAP_SYS_MODULE = 0x10 - CAP_SYS_NICE = 0x17 - CAP_SYS_PACCT = 0x14 - CAP_SYS_PTRACE = 0x13 - CAP_SYS_RAWIO = 0x11 - CAP_SYS_RESOURCE = 0x18 - CAP_SYS_TIME = 0x19 - CAP_SYS_TTY_CONFIG = 0x1a - CAP_WAKE_ALARM = 0x23 - CEPH_SUPER_MAGIC = 0xc36400 - CFLUSH = 0xf - CGROUP2_SUPER_MAGIC = 0x63677270 - CGROUP_SUPER_MAGIC = 0x27e0eb - CIFS_SUPER_MAGIC = 0xff534d42 - CLOCK_BOOTTIME = 0x7 - CLOCK_BOOTTIME_ALARM = 0x9 - CLOCK_DEFAULT = 0x0 - CLOCK_EXT = 0x1 - CLOCK_INT = 0x2 - CLOCK_MONOTONIC = 0x1 - CLOCK_MONOTONIC_COARSE = 0x6 - CLOCK_MONOTONIC_RAW = 0x4 - CLOCK_PROCESS_CPUTIME_ID = 0x2 - CLOCK_REALTIME = 0x0 - CLOCK_REALTIME_ALARM = 0x8 - CLOCK_REALTIME_COARSE = 0x5 - CLOCK_TAI = 0xb - CLOCK_THREAD_CPUTIME_ID = 0x3 - CLOCK_TXFROMRX = 0x4 - CLOCK_TXINT = 0x3 - CLONE_ARGS_SIZE_VER0 = 0x40 - CLONE_ARGS_SIZE_VER1 = 0x50 - CLONE_ARGS_SIZE_VER2 = 0x58 - CLONE_CHILD_CLEARTID = 0x200000 - CLONE_CHILD_SETTID = 0x1000000 - CLONE_CLEAR_SIGHAND = 0x100000000 - CLONE_DETACHED = 0x400000 - CLONE_FILES = 0x400 - CLONE_FS = 0x200 - CLONE_INTO_CGROUP = 0x200000000 - CLONE_IO = 0x80000000 - CLONE_NEWCGROUP = 0x2000000 - CLONE_NEWIPC = 0x8000000 - CLONE_NEWNET = 0x40000000 - CLONE_NEWNS = 0x20000 - CLONE_NEWPID = 0x20000000 - CLONE_NEWTIME = 0x80 - CLONE_NEWUSER = 0x10000000 - CLONE_NEWUTS = 0x4000000 - CLONE_PARENT = 0x8000 - CLONE_PARENT_SETTID = 0x100000 - CLONE_PIDFD = 0x1000 - CLONE_PTRACE = 0x2000 - CLONE_SETTLS = 0x80000 - CLONE_SIGHAND = 0x800 - CLONE_SYSVSEM = 0x40000 - CLONE_THREAD = 0x10000 - CLONE_UNTRACED = 0x800000 - CLONE_VFORK = 0x4000 - CLONE_VM = 0x100 - CMSPAR = 0x40000000 - CODA_SUPER_MAGIC = 0x73757245 - CR0 = 0x0 - CRAMFS_MAGIC = 0x28cd3d45 - CRTSCTS = 0x80000000 - CRYPTO_MAX_NAME = 0x40 - CRYPTO_MSG_MAX = 0x15 - CRYPTO_NR_MSGTYPES = 0x6 - CRYPTO_REPORT_MAXSIZE = 0x160 - CS5 = 0x0 - CSIGNAL = 0xff - CSTART = 0x11 - CSTATUS = 0x0 - CSTOP = 0x13 - CSUSP = 0x1a - DAXFS_MAGIC = 0x64646178 - DEBUGFS_MAGIC = 0x64626720 - DEVLINK_CMD_ESWITCH_MODE_GET = 0x1d - DEVLINK_CMD_ESWITCH_MODE_SET = 0x1e - DEVLINK_FLASH_OVERWRITE_IDENTIFIERS = 0x2 - DEVLINK_FLASH_OVERWRITE_SETTINGS = 0x1 - DEVLINK_GENL_MCGRP_CONFIG_NAME = "config" - DEVLINK_GENL_NAME = "devlink" - DEVLINK_GENL_VERSION = 0x1 - DEVLINK_SB_THRESHOLD_TO_ALPHA_MAX = 0x14 - DEVLINK_SUPPORTED_FLASH_OVERWRITE_SECTIONS = 0x3 - DEVMEM_MAGIC = 0x454d444d - DEVPTS_SUPER_MAGIC = 0x1cd1 - DMA_BUF_MAGIC = 0x444d4142 - DM_ACTIVE_PRESENT_FLAG = 0x20 - DM_BUFFER_FULL_FLAG = 0x100 - DM_CONTROL_NODE = "control" - DM_DATA_OUT_FLAG = 0x10000 - DM_DEFERRED_REMOVE = 0x20000 - DM_DEV_ARM_POLL = 0xc138fd10 - DM_DEV_CREATE = 0xc138fd03 - DM_DEV_REMOVE = 0xc138fd04 - DM_DEV_RENAME = 0xc138fd05 - DM_DEV_SET_GEOMETRY = 0xc138fd0f - DM_DEV_STATUS = 0xc138fd07 - DM_DEV_SUSPEND = 0xc138fd06 - DM_DEV_WAIT = 0xc138fd08 - DM_DIR = "mapper" - DM_GET_TARGET_VERSION = 0xc138fd11 - DM_IMA_MEASUREMENT_FLAG = 0x80000 - DM_INACTIVE_PRESENT_FLAG = 0x40 - DM_INTERNAL_SUSPEND_FLAG = 0x40000 - DM_IOCTL = 0xfd - DM_LIST_DEVICES = 0xc138fd02 - DM_LIST_VERSIONS = 0xc138fd0d - DM_MAX_TYPE_NAME = 0x10 - DM_NAME_LEN = 0x80 - DM_NAME_LIST_FLAG_DOESNT_HAVE_UUID = 0x2 - DM_NAME_LIST_FLAG_HAS_UUID = 0x1 - DM_NOFLUSH_FLAG = 0x800 - DM_PERSISTENT_DEV_FLAG = 0x8 - DM_QUERY_INACTIVE_TABLE_FLAG = 0x1000 - DM_READONLY_FLAG = 0x1 - DM_REMOVE_ALL = 0xc138fd01 - DM_SECURE_DATA_FLAG = 0x8000 - DM_SKIP_BDGET_FLAG = 0x200 - DM_SKIP_LOCKFS_FLAG = 0x400 - DM_STATUS_TABLE_FLAG = 0x10 - DM_SUSPEND_FLAG = 0x2 - DM_TABLE_CLEAR = 0xc138fd0a - DM_TABLE_DEPS = 0xc138fd0b - DM_TABLE_LOAD = 0xc138fd09 - DM_TABLE_STATUS = 0xc138fd0c - DM_TARGET_MSG = 0xc138fd0e - DM_UEVENT_GENERATED_FLAG = 0x2000 - DM_UUID_FLAG = 0x4000 - DM_UUID_LEN = 0x81 - DM_VERSION = 0xc138fd00 - DM_VERSION_EXTRA = "-ioctl (2022-02-22)" - DM_VERSION_MAJOR = 0x4 - DM_VERSION_MINOR = 0x2e - DM_VERSION_PATCHLEVEL = 0x0 - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - DT_WHT = 0xe - ECHO = 0x8 - ECRYPTFS_SUPER_MAGIC = 0xf15f - EFD_SEMAPHORE = 0x1 - EFIVARFS_MAGIC = 0xde5e81e4 - EFS_SUPER_MAGIC = 0x414a53 - EM_386 = 0x3 - EM_486 = 0x6 - EM_68K = 0x4 - EM_860 = 0x7 - EM_88K = 0x5 - EM_AARCH64 = 0xb7 - EM_ALPHA = 0x9026 - EM_ALTERA_NIOS2 = 0x71 - EM_ARCOMPACT = 0x5d - EM_ARCV2 = 0xc3 - EM_ARM = 0x28 - EM_BLACKFIN = 0x6a - EM_BPF = 0xf7 - EM_CRIS = 0x4c - EM_CSKY = 0xfc - EM_CYGNUS_M32R = 0x9041 - EM_CYGNUS_MN10300 = 0xbeef - EM_FRV = 0x5441 - EM_H8_300 = 0x2e - EM_HEXAGON = 0xa4 - EM_IA_64 = 0x32 - EM_LOONGARCH = 0x102 - EM_M32 = 0x1 - EM_M32R = 0x58 - EM_MICROBLAZE = 0xbd - EM_MIPS = 0x8 - EM_MIPS_RS3_LE = 0xa - EM_MIPS_RS4_BE = 0xa - EM_MN10300 = 0x59 - EM_NDS32 = 0xa7 - EM_NONE = 0x0 - EM_OPENRISC = 0x5c - EM_PARISC = 0xf - EM_PPC = 0x14 - EM_PPC64 = 0x15 - EM_RISCV = 0xf3 - EM_S390 = 0x16 - EM_S390_OLD = 0xa390 - EM_SH = 0x2a - EM_SPARC = 0x2 - EM_SPARC32PLUS = 0x12 - EM_SPARCV9 = 0x2b - EM_SPU = 0x17 - EM_TILEGX = 0xbf - EM_TILEPRO = 0xbc - EM_TI_C6000 = 0x8c - EM_UNICORE = 0x6e - EM_X86_64 = 0x3e - EM_XTENSA = 0x5e - ENCODING_DEFAULT = 0x0 - ENCODING_FM_MARK = 0x3 - ENCODING_FM_SPACE = 0x4 - ENCODING_MANCHESTER = 0x5 - ENCODING_NRZ = 0x1 - ENCODING_NRZI = 0x2 - EPOLLERR = 0x8 - EPOLLET = 0x80000000 - EPOLLEXCLUSIVE = 0x10000000 - EPOLLHUP = 0x10 - EPOLLIN = 0x1 - EPOLLMSG = 0x400 - EPOLLONESHOT = 0x40000000 - EPOLLOUT = 0x4 - EPOLLPRI = 0x2 - EPOLLRDBAND = 0x80 - EPOLLRDHUP = 0x2000 - EPOLLRDNORM = 0x40 - EPOLLWAKEUP = 0x20000000 - EPOLLWRBAND = 0x200 - EPOLLWRNORM = 0x100 - EPOLL_CTL_ADD = 0x1 - EPOLL_CTL_DEL = 0x2 - EPOLL_CTL_MOD = 0x3 - 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_FEC_AUTO = 0x2 - ETHTOOL_FEC_BASER = 0x10 - ETHTOOL_FEC_LLRS = 0x20 - ETHTOOL_FEC_NONE = 0x1 - ETHTOOL_FEC_OFF = 0x4 - ETHTOOL_FEC_RS = 0x8 - ETHTOOL_FLAG_ALL = 0x7 - ETHTOOL_FLAG_COMPACT_BITSETS = 0x1 - ETHTOOL_FLAG_OMIT_REPLY = 0x2 - ETHTOOL_FLAG_STATS = 0x4 - ETHTOOL_FLASHDEV = 0x33 - ETHTOOL_FLASH_MAX_FILENAME = 0x80 - ETHTOOL_FWVERS_LEN = 0x20 - ETHTOOL_F_COMPAT = 0x4 - ETHTOOL_F_UNSUPPORTED = 0x1 - ETHTOOL_F_WISH = 0x2 - ETHTOOL_GCHANNELS = 0x3c - ETHTOOL_GCOALESCE = 0xe - ETHTOOL_GDRVINFO = 0x3 - ETHTOOL_GEEE = 0x44 - ETHTOOL_GEEPROM = 0xb - ETHTOOL_GENL_NAME = "ethtool" - ETHTOOL_GENL_VERSION = 0x1 - ETHTOOL_GET_DUMP_DATA = 0x40 - ETHTOOL_GET_DUMP_FLAG = 0x3f - ETHTOOL_GET_TS_INFO = 0x41 - ETHTOOL_GFEATURES = 0x3a - ETHTOOL_GFECPARAM = 0x50 - ETHTOOL_GFLAGS = 0x25 - ETHTOOL_GGRO = 0x2b - ETHTOOL_GGSO = 0x23 - ETHTOOL_GLINK = 0xa - ETHTOOL_GLINKSETTINGS = 0x4c - ETHTOOL_GMODULEEEPROM = 0x43 - ETHTOOL_GMODULEINFO = 0x42 - ETHTOOL_GMSGLVL = 0x7 - ETHTOOL_GPAUSEPARAM = 0x12 - ETHTOOL_GPERMADDR = 0x20 - ETHTOOL_GPFLAGS = 0x27 - ETHTOOL_GPHYSTATS = 0x4a - ETHTOOL_GREGS = 0x4 - ETHTOOL_GRINGPARAM = 0x10 - ETHTOOL_GRSSH = 0x46 - ETHTOOL_GRXCLSRLALL = 0x30 - ETHTOOL_GRXCLSRLCNT = 0x2e - ETHTOOL_GRXCLSRULE = 0x2f - ETHTOOL_GRXCSUM = 0x14 - ETHTOOL_GRXFH = 0x29 - ETHTOOL_GRXFHINDIR = 0x38 - ETHTOOL_GRXNTUPLE = 0x36 - ETHTOOL_GRXRINGS = 0x2d - ETHTOOL_GSET = 0x1 - ETHTOOL_GSG = 0x18 - ETHTOOL_GSSET_INFO = 0x37 - ETHTOOL_GSTATS = 0x1d - ETHTOOL_GSTRINGS = 0x1b - ETHTOOL_GTSO = 0x1e - ETHTOOL_GTUNABLE = 0x48 - ETHTOOL_GTXCSUM = 0x16 - ETHTOOL_GUFO = 0x21 - ETHTOOL_GWOL = 0x5 - ETHTOOL_MCGRP_MONITOR_NAME = "monitor" - ETHTOOL_NWAY_RST = 0x9 - ETHTOOL_PERQUEUE = 0x4b - ETHTOOL_PHYS_ID = 0x1c - ETHTOOL_PHY_EDPD_DFLT_TX_MSECS = 0xffff - ETHTOOL_PHY_EDPD_DISABLE = 0x0 - ETHTOOL_PHY_EDPD_NO_TX = 0xfffe - ETHTOOL_PHY_FAST_LINK_DOWN_OFF = 0xff - ETHTOOL_PHY_FAST_LINK_DOWN_ON = 0x0 - ETHTOOL_PHY_GTUNABLE = 0x4e - ETHTOOL_PHY_STUNABLE = 0x4f - ETHTOOL_RESET = 0x34 - ETHTOOL_RXNTUPLE_ACTION_CLEAR = -0x2 - ETHTOOL_RXNTUPLE_ACTION_DROP = -0x1 - ETHTOOL_RX_FLOW_SPEC_RING = 0xffffffff - ETHTOOL_RX_FLOW_SPEC_RING_VF = 0xff00000000 - ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF = 0x20 - ETHTOOL_SCHANNELS = 0x3d - ETHTOOL_SCOALESCE = 0xf - ETHTOOL_SEEE = 0x45 - ETHTOOL_SEEPROM = 0xc - ETHTOOL_SET_DUMP = 0x3e - ETHTOOL_SFEATURES = 0x3b - ETHTOOL_SFECPARAM = 0x51 - ETHTOOL_SFLAGS = 0x26 - ETHTOOL_SGRO = 0x2c - ETHTOOL_SGSO = 0x24 - ETHTOOL_SLINKSETTINGS = 0x4d - ETHTOOL_SMSGLVL = 0x8 - ETHTOOL_SPAUSEPARAM = 0x13 - ETHTOOL_SPFLAGS = 0x28 - ETHTOOL_SRINGPARAM = 0x11 - ETHTOOL_SRSSH = 0x47 - ETHTOOL_SRXCLSRLDEL = 0x31 - ETHTOOL_SRXCLSRLINS = 0x32 - ETHTOOL_SRXCSUM = 0x15 - ETHTOOL_SRXFH = 0x2a - ETHTOOL_SRXFHINDIR = 0x39 - ETHTOOL_SRXNTUPLE = 0x35 - ETHTOOL_SSET = 0x2 - ETHTOOL_SSG = 0x19 - ETHTOOL_STSO = 0x1f - ETHTOOL_STUNABLE = 0x49 - ETHTOOL_STXCSUM = 0x17 - ETHTOOL_SUFO = 0x22 - ETHTOOL_SWOL = 0x6 - ETHTOOL_TEST = 0x1a - ETH_P_1588 = 0x88f7 - ETH_P_8021AD = 0x88a8 - ETH_P_8021AH = 0x88e7 - ETH_P_8021Q = 0x8100 - ETH_P_80221 = 0x8917 - ETH_P_802_2 = 0x4 - ETH_P_802_3 = 0x1 - ETH_P_802_3_MIN = 0x600 - ETH_P_802_EX1 = 0x88b5 - ETH_P_AARP = 0x80f3 - ETH_P_AF_IUCV = 0xfbfb - ETH_P_ALL = 0x3 - ETH_P_AOE = 0x88a2 - ETH_P_ARCNET = 0x1a - ETH_P_ARP = 0x806 - ETH_P_ATALK = 0x809b - ETH_P_ATMFATE = 0x8884 - ETH_P_ATMMPOA = 0x884c - ETH_P_AX25 = 0x2 - ETH_P_BATMAN = 0x4305 - ETH_P_BPQ = 0x8ff - ETH_P_CAIF = 0xf7 - ETH_P_CAN = 0xc - ETH_P_CANFD = 0xd - ETH_P_CFM = 0x8902 - ETH_P_CONTROL = 0x16 - ETH_P_CUST = 0x6006 - ETH_P_DDCMP = 0x6 - ETH_P_DEC = 0x6000 - ETH_P_DIAG = 0x6005 - ETH_P_DNA_DL = 0x6001 - ETH_P_DNA_RC = 0x6002 - ETH_P_DNA_RT = 0x6003 - ETH_P_DSA = 0x1b - ETH_P_DSA_8021Q = 0xdadb - ETH_P_ECONET = 0x18 - ETH_P_EDSA = 0xdada - ETH_P_ERSPAN = 0x88be - ETH_P_ERSPAN2 = 0x22eb - ETH_P_ETHERCAT = 0x88a4 - ETH_P_FCOE = 0x8906 - ETH_P_FIP = 0x8914 - ETH_P_HDLC = 0x19 - ETH_P_HSR = 0x892f - ETH_P_IBOE = 0x8915 - ETH_P_IEEE802154 = 0xf6 - ETH_P_IEEEPUP = 0xa00 - ETH_P_IEEEPUPAT = 0xa01 - ETH_P_IFE = 0xed3e - ETH_P_IP = 0x800 - ETH_P_IPV6 = 0x86dd - ETH_P_IPX = 0x8137 - ETH_P_IRDA = 0x17 - ETH_P_LAT = 0x6004 - ETH_P_LINK_CTL = 0x886c - ETH_P_LLDP = 0x88cc - ETH_P_LOCALTALK = 0x9 - ETH_P_LOOP = 0x60 - ETH_P_LOOPBACK = 0x9000 - ETH_P_MACSEC = 0x88e5 - ETH_P_MAP = 0xf9 - ETH_P_MCTP = 0xfa - ETH_P_MOBITEX = 0x15 - ETH_P_MPLS_MC = 0x8848 - ETH_P_MPLS_UC = 0x8847 - ETH_P_MRP = 0x88e3 - ETH_P_MVRP = 0x88f5 - ETH_P_NCSI = 0x88f8 - ETH_P_NSH = 0x894f - ETH_P_PAE = 0x888e - ETH_P_PAUSE = 0x8808 - ETH_P_PHONET = 0xf5 - ETH_P_PPPTALK = 0x10 - ETH_P_PPP_DISC = 0x8863 - ETH_P_PPP_MP = 0x8 - ETH_P_PPP_SES = 0x8864 - ETH_P_PREAUTH = 0x88c7 - ETH_P_PROFINET = 0x8892 - ETH_P_PRP = 0x88fb - ETH_P_PUP = 0x200 - ETH_P_PUPAT = 0x201 - ETH_P_QINQ1 = 0x9100 - ETH_P_QINQ2 = 0x9200 - ETH_P_QINQ3 = 0x9300 - ETH_P_RARP = 0x8035 - ETH_P_REALTEK = 0x8899 - ETH_P_SCA = 0x6007 - ETH_P_SLOW = 0x8809 - ETH_P_SNAP = 0x5 - ETH_P_TDLS = 0x890d - ETH_P_TEB = 0x6558 - ETH_P_TIPC = 0x88ca - ETH_P_TRAILER = 0x1c - ETH_P_TR_802_2 = 0x11 - ETH_P_TSN = 0x22f0 - ETH_P_WAN_PPP = 0x7 - ETH_P_WCCP = 0x883e - ETH_P_X25 = 0x805 - ETH_P_XDSA = 0xf8 - EV_ABS = 0x3 - EV_CNT = 0x20 - EV_FF = 0x15 - EV_FF_STATUS = 0x17 - EV_KEY = 0x1 - EV_LED = 0x11 - EV_MAX = 0x1f - EV_MSC = 0x4 - EV_PWR = 0x16 - EV_REL = 0x2 - EV_REP = 0x14 - EV_SND = 0x12 - EV_SW = 0x5 - EV_SYN = 0x0 - EV_VERSION = 0x10001 - EXABYTE_ENABLE_NEST = 0xf0 - EXFAT_SUPER_MAGIC = 0x2011bab0 - EXT2_SUPER_MAGIC = 0xef53 - EXT3_SUPER_MAGIC = 0xef53 - EXT4_SUPER_MAGIC = 0xef53 - EXTA = 0xe - EXTB = 0xf - F2FS_SUPER_MAGIC = 0xf2f52010 - FALLOC_FL_COLLAPSE_RANGE = 0x8 - FALLOC_FL_INSERT_RANGE = 0x20 - FALLOC_FL_KEEP_SIZE = 0x1 - FALLOC_FL_NO_HIDE_STALE = 0x4 - FALLOC_FL_PUNCH_HOLE = 0x2 - FALLOC_FL_UNSHARE_RANGE = 0x40 - FALLOC_FL_ZERO_RANGE = 0x10 - FANOTIFY_METADATA_VERSION = 0x3 - FAN_ACCESS = 0x1 - FAN_ACCESS_PERM = 0x20000 - FAN_ALLOW = 0x1 - FAN_ALL_CLASS_BITS = 0xc - FAN_ALL_EVENTS = 0x3b - FAN_ALL_INIT_FLAGS = 0x3f - FAN_ALL_MARK_FLAGS = 0xff - FAN_ALL_OUTGOING_EVENTS = 0x3403b - FAN_ALL_PERM_EVENTS = 0x30000 - FAN_ATTRIB = 0x4 - FAN_AUDIT = 0x10 - FAN_CLASS_CONTENT = 0x4 - FAN_CLASS_NOTIF = 0x0 - FAN_CLASS_PRE_CONTENT = 0x8 - FAN_CLOEXEC = 0x1 - FAN_CLOSE = 0x18 - FAN_CLOSE_NOWRITE = 0x10 - FAN_CLOSE_WRITE = 0x8 - FAN_CREATE = 0x100 - FAN_DELETE = 0x200 - FAN_DELETE_SELF = 0x400 - FAN_DENY = 0x2 - FAN_ENABLE_AUDIT = 0x40 - FAN_EPIDFD = -0x2 - 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_NEW_DFID_NAME = 0xc - FAN_EVENT_INFO_TYPE_OLD_DFID_NAME = 0xa - FAN_EVENT_INFO_TYPE_PIDFD = 0x4 - FAN_EVENT_METADATA_LEN = 0x18 - FAN_EVENT_ON_CHILD = 0x8000000 - FAN_FS_ERROR = 0x8000 - FAN_MARK_ADD = 0x1 - FAN_MARK_DONT_FOLLOW = 0x4 - FAN_MARK_EVICTABLE = 0x200 - FAN_MARK_FILESYSTEM = 0x100 - FAN_MARK_FLUSH = 0x80 - FAN_MARK_IGNORED_MASK = 0x20 - FAN_MARK_IGNORED_SURV_MODIFY = 0x40 - FAN_MARK_INODE = 0x0 - FAN_MARK_MOUNT = 0x10 - FAN_MARK_ONLYDIR = 0x8 - FAN_MARK_REMOVE = 0x2 - FAN_MODIFY = 0x2 - FAN_MOVE = 0xc0 - FAN_MOVED_FROM = 0x40 - FAN_MOVED_TO = 0x80 - FAN_MOVE_SELF = 0x800 - FAN_NOFD = -0x1 - FAN_NONBLOCK = 0x2 - FAN_NOPIDFD = -0x1 - FAN_ONDIR = 0x40000000 - FAN_OPEN = 0x20 - FAN_OPEN_EXEC = 0x1000 - FAN_OPEN_EXEC_PERM = 0x40000 - FAN_OPEN_PERM = 0x10000 - FAN_Q_OVERFLOW = 0x4000 - FAN_RENAME = 0x10000000 - FAN_REPORT_DFID_NAME = 0xc00 - FAN_REPORT_DFID_NAME_TARGET = 0x1e00 - FAN_REPORT_DIR_FID = 0x400 - FAN_REPORT_FID = 0x200 - FAN_REPORT_NAME = 0x800 - FAN_REPORT_PIDFD = 0x80 - FAN_REPORT_TARGET_FID = 0x1000 - FAN_REPORT_TID = 0x100 - FAN_UNLIMITED_MARKS = 0x20 - FAN_UNLIMITED_QUEUE = 0x10 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x400 - FF0 = 0x0 - FIB_RULE_DEV_DETACHED = 0x8 - FIB_RULE_FIND_SADDR = 0x10000 - FIB_RULE_IIF_DETACHED = 0x8 - FIB_RULE_INVERT = 0x2 - FIB_RULE_OIF_DETACHED = 0x10 - FIB_RULE_PERMANENT = 0x1 - FIB_RULE_UNRESOLVED = 0x4 - FIDEDUPERANGE = 0xc0189436 - FSCRYPT_KEY_DESCRIPTOR_SIZE = 0x8 - FSCRYPT_KEY_DESC_PREFIX = "fscrypt:" - FSCRYPT_KEY_DESC_PREFIX_SIZE = 0x8 - FSCRYPT_KEY_IDENTIFIER_SIZE = 0x10 - FSCRYPT_KEY_REMOVAL_STATUS_FLAG_FILES_BUSY = 0x1 - FSCRYPT_KEY_REMOVAL_STATUS_FLAG_OTHER_USERS = 0x2 - FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR = 0x1 - FSCRYPT_KEY_SPEC_TYPE_IDENTIFIER = 0x2 - FSCRYPT_KEY_STATUS_ABSENT = 0x1 - FSCRYPT_KEY_STATUS_FLAG_ADDED_BY_SELF = 0x1 - FSCRYPT_KEY_STATUS_INCOMPLETELY_REMOVED = 0x3 - FSCRYPT_KEY_STATUS_PRESENT = 0x2 - FSCRYPT_MAX_KEY_SIZE = 0x40 - FSCRYPT_MODE_ADIANTUM = 0x9 - FSCRYPT_MODE_AES_128_CBC = 0x5 - FSCRYPT_MODE_AES_128_CTS = 0x6 - FSCRYPT_MODE_AES_256_CTS = 0x4 - FSCRYPT_MODE_AES_256_XTS = 0x1 - FSCRYPT_POLICY_FLAGS_PAD_16 = 0x2 - FSCRYPT_POLICY_FLAGS_PAD_32 = 0x3 - FSCRYPT_POLICY_FLAGS_PAD_4 = 0x0 - FSCRYPT_POLICY_FLAGS_PAD_8 = 0x1 - FSCRYPT_POLICY_FLAGS_PAD_MASK = 0x3 - FSCRYPT_POLICY_FLAG_DIRECT_KEY = 0x4 - FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32 = 0x10 - FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64 = 0x8 - FSCRYPT_POLICY_V1 = 0x0 - FSCRYPT_POLICY_V2 = 0x2 - FS_ENCRYPTION_MODE_ADIANTUM = 0x9 - FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 - FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 - FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 - FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 - FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 - FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 - FS_ENCRYPTION_MODE_INVALID = 0x0 - FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8 - FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7 - FS_IOC_ADD_ENCRYPTION_KEY = 0xc0506617 - FS_IOC_GET_ENCRYPTION_KEY_STATUS = 0xc080661a - FS_IOC_GET_ENCRYPTION_POLICY_EX = 0xc0096616 - FS_IOC_MEASURE_VERITY = 0xc0046686 - FS_IOC_READ_VERITY_METADATA = 0xc0286687 - FS_IOC_REMOVE_ENCRYPTION_KEY = 0xc0406618 - FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS = 0xc0406619 - FS_KEY_DESCRIPTOR_SIZE = 0x8 - FS_KEY_DESC_PREFIX = "fscrypt:" - FS_KEY_DESC_PREFIX_SIZE = 0x8 - FS_MAX_KEY_SIZE = 0x40 - FS_POLICY_FLAGS_PAD_16 = 0x2 - FS_POLICY_FLAGS_PAD_32 = 0x3 - FS_POLICY_FLAGS_PAD_4 = 0x0 - FS_POLICY_FLAGS_PAD_8 = 0x1 - FS_POLICY_FLAGS_PAD_MASK = 0x3 - FS_POLICY_FLAGS_VALID = 0x7 - FS_VERITY_FL = 0x100000 - FS_VERITY_HASH_ALG_SHA256 = 0x1 - FS_VERITY_HASH_ALG_SHA512 = 0x2 - FS_VERITY_METADATA_TYPE_DESCRIPTOR = 0x2 - FS_VERITY_METADATA_TYPE_MERKLE_TREE = 0x1 - FS_VERITY_METADATA_TYPE_SIGNATURE = 0x3 - FUSE_SUPER_MAGIC = 0x65735546 - FUTEXFS_SUPER_MAGIC = 0xbad1dea - F_ADD_SEALS = 0x409 - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0x406 - F_EXLCK = 0x4 - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLEASE = 0x401 - F_GETOWN_EX = 0x10 - F_GETPIPE_SZ = 0x408 - F_GETSIG = 0xb - F_GET_FILE_RW_HINT = 0x40d - F_GET_RW_HINT = 0x40b - F_GET_SEALS = 0x40a - F_LOCK = 0x1 - F_NOTIFY = 0x402 - F_OFD_GETLK = 0x24 - F_OFD_SETLK = 0x25 - F_OFD_SETLKW = 0x26 - F_OK = 0x0 - F_SEAL_FUTURE_WRITE = 0x10 - F_SEAL_GROW = 0x4 - F_SEAL_SEAL = 0x1 - F_SEAL_SHRINK = 0x2 - F_SEAL_WRITE = 0x8 - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLEASE = 0x400 - F_SETOWN_EX = 0xf - F_SETPIPE_SZ = 0x407 - F_SETSIG = 0xa - F_SET_FILE_RW_HINT = 0x40e - F_SET_RW_HINT = 0x40c - F_SHLCK = 0x8 - F_TEST = 0x3 - F_TLOCK = 0x2 - F_ULOCK = 0x0 - GENL_ADMIN_PERM = 0x1 - GENL_CMD_CAP_DO = 0x2 - GENL_CMD_CAP_DUMP = 0x4 - GENL_CMD_CAP_HASPOL = 0x8 - GENL_HDRLEN = 0x4 - GENL_ID_CTRL = 0x10 - GENL_ID_PMCRAID = 0x12 - GENL_ID_VFS_DQUOT = 0x11 - GENL_MAX_ID = 0x3ff - GENL_MIN_ID = 0x10 - GENL_NAMSIZ = 0x10 - GENL_START_ALLOC = 0x13 - GENL_UNS_ADMIN_PERM = 0x10 - GRND_INSECURE = 0x4 - GRND_NONBLOCK = 0x1 - GRND_RANDOM = 0x2 - HDIO_DRIVE_CMD = 0x31f - HDIO_DRIVE_CMD_AEB = 0x31e - HDIO_DRIVE_CMD_HDR_SIZE = 0x4 - HDIO_DRIVE_HOB_HDR_SIZE = 0x8 - HDIO_DRIVE_RESET = 0x31c - HDIO_DRIVE_TASK = 0x31e - HDIO_DRIVE_TASKFILE = 0x31d - HDIO_DRIVE_TASK_HDR_SIZE = 0x8 - HDIO_GETGEO = 0x301 - HDIO_GET_32BIT = 0x309 - HDIO_GET_ACOUSTIC = 0x30f - HDIO_GET_ADDRESS = 0x310 - HDIO_GET_BUSSTATE = 0x31a - HDIO_GET_DMA = 0x30b - HDIO_GET_IDENTITY = 0x30d - HDIO_GET_KEEPSETTINGS = 0x308 - HDIO_GET_MULTCOUNT = 0x304 - HDIO_GET_NICE = 0x30c - HDIO_GET_NOWERR = 0x30a - HDIO_GET_QDMA = 0x305 - HDIO_GET_UNMASKINTR = 0x302 - HDIO_GET_WCACHE = 0x30e - HDIO_OBSOLETE_IDENTITY = 0x307 - HDIO_SCAN_HWIF = 0x328 - HDIO_SET_32BIT = 0x324 - HDIO_SET_ACOUSTIC = 0x32c - HDIO_SET_ADDRESS = 0x32f - HDIO_SET_BUSSTATE = 0x32d - HDIO_SET_DMA = 0x326 - HDIO_SET_KEEPSETTINGS = 0x323 - HDIO_SET_MULTCOUNT = 0x321 - HDIO_SET_NICE = 0x329 - HDIO_SET_NOWERR = 0x325 - HDIO_SET_PIO_MODE = 0x327 - HDIO_SET_QDMA = 0x32e - HDIO_SET_UNMASKINTR = 0x322 - HDIO_SET_WCACHE = 0x32b - HDIO_SET_XFER = 0x306 - HDIO_TRISTATE_HWIF = 0x31b - HDIO_UNREGISTER_HWIF = 0x32a - HID_MAX_DESCRIPTOR_SIZE = 0x1000 - HOSTFS_SUPER_MAGIC = 0xc0ffee - HPFS_SUPER_MAGIC = 0xf995e849 - HUGETLBFS_MAGIC = 0x958458f6 - IBSHIFT = 0x10 - ICRNL = 0x100 - IFA_F_DADFAILED = 0x8 - IFA_F_DEPRECATED = 0x20 - IFA_F_HOMEADDRESS = 0x10 - IFA_F_MANAGETEMPADDR = 0x100 - IFA_F_MCAUTOJOIN = 0x400 - IFA_F_NODAD = 0x2 - IFA_F_NOPREFIXROUTE = 0x200 - IFA_F_OPTIMISTIC = 0x4 - IFA_F_PERMANENT = 0x80 - IFA_F_SECONDARY = 0x1 - IFA_F_STABLE_PRIVACY = 0x800 - IFA_F_TEMPORARY = 0x1 - IFA_F_TENTATIVE = 0x40 - IFA_MAX = 0xb - IFF_ALLMULTI = 0x200 - IFF_ATTACH_QUEUE = 0x200 - IFF_AUTOMEDIA = 0x4000 - IFF_BROADCAST = 0x2 - IFF_DEBUG = 0x4 - IFF_DETACH_QUEUE = 0x400 - IFF_DORMANT = 0x20000 - IFF_DYNAMIC = 0x8000 - IFF_ECHO = 0x40000 - IFF_LOOPBACK = 0x8 - IFF_LOWER_UP = 0x10000 - IFF_MASTER = 0x400 - IFF_MULTICAST = 0x1000 - IFF_MULTI_QUEUE = 0x100 - IFF_NAPI = 0x10 - IFF_NAPI_FRAGS = 0x20 - IFF_NOARP = 0x80 - IFF_NOFILTER = 0x1000 - IFF_NOTRAILERS = 0x20 - IFF_NO_PI = 0x1000 - IFF_ONE_QUEUE = 0x2000 - IFF_PERSIST = 0x800 - IFF_POINTOPOINT = 0x10 - IFF_PORTSEL = 0x2000 - IFF_PROMISC = 0x100 - IFF_RUNNING = 0x40 - IFF_SLAVE = 0x800 - IFF_TAP = 0x2 - IFF_TUN = 0x1 - IFF_TUN_EXCL = 0x8000 - IFF_UP = 0x1 - IFF_VNET_HDR = 0x4000 - IFF_VOLATILE = 0x70c5a - IFNAMSIZ = 0x10 - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_ACCESS = 0x1 - IN_ALL_EVENTS = 0xfff - IN_ATTRIB = 0x4 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLOSE = 0x18 - IN_CLOSE_NOWRITE = 0x10 - IN_CLOSE_WRITE = 0x8 - IN_CREATE = 0x100 - IN_DELETE = 0x200 - IN_DELETE_SELF = 0x400 - IN_DONT_FOLLOW = 0x2000000 - IN_EXCL_UNLINK = 0x4000000 - IN_IGNORED = 0x8000 - IN_ISDIR = 0x40000000 - IN_LOOPBACKNET = 0x7f - IN_MASK_ADD = 0x20000000 - IN_MASK_CREATE = 0x10000000 - IN_MODIFY = 0x2 - IN_MOVE = 0xc0 - IN_MOVED_FROM = 0x40 - IN_MOVED_TO = 0x80 - IN_MOVE_SELF = 0x800 - IN_ONESHOT = 0x80000000 - IN_ONLYDIR = 0x1000000 - IN_OPEN = 0x20 - IN_Q_OVERFLOW = 0x4000 - IN_UNMOUNT = 0x2000 - IPPROTO_AH = 0x33 - IPPROTO_BEETPH = 0x5e - IPPROTO_COMP = 0x6c - IPPROTO_DCCP = 0x21 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_ENCAP = 0x62 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERNET = 0x8f - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GRE = 0x2f - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IGMP = 0x2 - IPPROTO_IP = 0x0 - IPPROTO_IPIP = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_L2TP = 0x73 - IPPROTO_MH = 0x87 - IPPROTO_MPLS = 0x89 - IPPROTO_MPTCP = 0x106 - IPPROTO_MTP = 0x5c - IPPROTO_NONE = 0x3b - IPPROTO_PIM = 0x67 - IPPROTO_PUP = 0xc - IPPROTO_RAW = 0xff - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_SCTP = 0x84 - IPPROTO_TCP = 0x6 - IPPROTO_TP = 0x1d - IPPROTO_UDP = 0x11 - IPPROTO_UDPLITE = 0x88 - IPV6_2292DSTOPTS = 0x4 - IPV6_2292HOPLIMIT = 0x8 - IPV6_2292HOPOPTS = 0x3 - IPV6_2292PKTINFO = 0x2 - IPV6_2292PKTOPTIONS = 0x6 - IPV6_2292RTHDR = 0x5 - IPV6_ADDRFORM = 0x1 - IPV6_ADDR_PREFERENCES = 0x48 - IPV6_ADD_MEMBERSHIP = 0x14 - IPV6_AUTHHDR = 0xa - IPV6_AUTOFLOWLABEL = 0x46 - IPV6_CHECKSUM = 0x7 - IPV6_DONTFRAG = 0x3e - IPV6_DROP_MEMBERSHIP = 0x15 - IPV6_DSTOPTS = 0x3b - IPV6_FLOW = 0x11 - IPV6_FREEBIND = 0x4e - IPV6_HDRINCL = 0x24 - IPV6_HOPLIMIT = 0x34 - IPV6_HOPOPTS = 0x36 - IPV6_IPSEC_POLICY = 0x22 - IPV6_JOIN_ANYCAST = 0x1b - IPV6_JOIN_GROUP = 0x14 - IPV6_LEAVE_ANYCAST = 0x1c - IPV6_LEAVE_GROUP = 0x15 - IPV6_MINHOPCOUNT = 0x49 - IPV6_MTU = 0x18 - IPV6_MTU_DISCOVER = 0x17 - IPV6_MULTICAST_ALL = 0x1d - IPV6_MULTICAST_HOPS = 0x12 - IPV6_MULTICAST_IF = 0x11 - IPV6_MULTICAST_LOOP = 0x13 - IPV6_NEXTHOP = 0x9 - IPV6_ORIGDSTADDR = 0x4a - IPV6_PATHMTU = 0x3d - IPV6_PKTINFO = 0x32 - IPV6_PMTUDISC_DO = 0x2 - IPV6_PMTUDISC_DONT = 0x0 - IPV6_PMTUDISC_INTERFACE = 0x4 - IPV6_PMTUDISC_OMIT = 0x5 - IPV6_PMTUDISC_PROBE = 0x3 - IPV6_PMTUDISC_WANT = 0x1 - IPV6_RECVDSTOPTS = 0x3a - IPV6_RECVERR = 0x19 - IPV6_RECVERR_RFC4884 = 0x1f - IPV6_RECVFRAGSIZE = 0x4d - IPV6_RECVHOPLIMIT = 0x33 - IPV6_RECVHOPOPTS = 0x35 - IPV6_RECVORIGDSTADDR = 0x4a - IPV6_RECVPATHMTU = 0x3c - IPV6_RECVPKTINFO = 0x31 - IPV6_RECVRTHDR = 0x38 - IPV6_RECVTCLASS = 0x42 - IPV6_ROUTER_ALERT = 0x16 - IPV6_ROUTER_ALERT_ISOLATE = 0x1e - IPV6_RTHDR = 0x39 - IPV6_RTHDRDSTOPTS = 0x37 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_RXDSTOPTS = 0x3b - IPV6_RXHOPOPTS = 0x36 - IPV6_TCLASS = 0x43 - IPV6_TRANSPARENT = 0x4b - IPV6_UNICAST_HOPS = 0x10 - IPV6_UNICAST_IF = 0x4c - IPV6_USER_FLOW = 0xe - IPV6_V6ONLY = 0x1a - IPV6_XFRM_POLICY = 0x23 - IP_ADD_MEMBERSHIP = 0x23 - IP_ADD_SOURCE_MEMBERSHIP = 0x27 - IP_BIND_ADDRESS_NO_PORT = 0x18 - IP_BLOCK_SOURCE = 0x26 - IP_CHECKSUM = 0x17 - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DROP_MEMBERSHIP = 0x24 - IP_DROP_SOURCE_MEMBERSHIP = 0x28 - IP_FREEBIND = 0xf - IP_HDRINCL = 0x3 - IP_IPSEC_POLICY = 0x10 - IP_MAXPACKET = 0xffff - IP_MAX_MEMBERSHIPS = 0x14 - IP_MF = 0x2000 - IP_MINTTL = 0x15 - IP_MSFILTER = 0x29 - IP_MSS = 0x240 - IP_MTU = 0xe - IP_MTU_DISCOVER = 0xa - IP_MULTICAST_ALL = 0x31 - IP_MULTICAST_IF = 0x20 - IP_MULTICAST_LOOP = 0x22 - IP_MULTICAST_TTL = 0x21 - IP_NODEFRAG = 0x16 - IP_OFFMASK = 0x1fff - IP_OPTIONS = 0x4 - IP_ORIGDSTADDR = 0x14 - IP_PASSSEC = 0x12 - IP_PKTINFO = 0x8 - IP_PKTOPTIONS = 0x9 - IP_PMTUDISC = 0xa - IP_PMTUDISC_DO = 0x2 - IP_PMTUDISC_DONT = 0x0 - IP_PMTUDISC_INTERFACE = 0x4 - IP_PMTUDISC_OMIT = 0x5 - IP_PMTUDISC_PROBE = 0x3 - IP_PMTUDISC_WANT = 0x1 - IP_RECVERR = 0xb - IP_RECVERR_RFC4884 = 0x1a - IP_RECVFRAGSIZE = 0x19 - IP_RECVOPTS = 0x6 - IP_RECVORIGDSTADDR = 0x14 - IP_RECVRETOPTS = 0x7 - IP_RECVTOS = 0xd - IP_RECVTTL = 0xc - IP_RETOPTS = 0x7 - IP_RF = 0x8000 - IP_ROUTER_ALERT = 0x5 - IP_TOS = 0x1 - IP_TRANSPARENT = 0x13 - 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 - ITIMER_PROF = 0x2 - ITIMER_REAL = 0x0 - ITIMER_VIRTUAL = 0x1 - IUTF8 = 0x4000 - IXANY = 0x800 - JFFS2_SUPER_MAGIC = 0x72b6 - KCMPROTO_CONNECTED = 0x0 - KCM_RECV_DISABLE = 0x1 - KEXEC_ARCH_386 = 0x30000 - KEXEC_ARCH_68K = 0x40000 - KEXEC_ARCH_AARCH64 = 0xb70000 - KEXEC_ARCH_ARM = 0x280000 - KEXEC_ARCH_DEFAULT = 0x0 - KEXEC_ARCH_IA_64 = 0x320000 - KEXEC_ARCH_LOONGARCH = 0x1020000 - KEXEC_ARCH_MASK = 0xffff0000 - KEXEC_ARCH_MIPS = 0x80000 - KEXEC_ARCH_MIPS_LE = 0xa0000 - KEXEC_ARCH_PARISC = 0xf0000 - KEXEC_ARCH_PPC = 0x140000 - KEXEC_ARCH_PPC64 = 0x150000 - KEXEC_ARCH_RISCV = 0xf30000 - KEXEC_ARCH_S390 = 0x160000 - KEXEC_ARCH_SH = 0x2a0000 - KEXEC_ARCH_X86_64 = 0x3e0000 - KEXEC_FILE_NO_INITRAMFS = 0x4 - KEXEC_FILE_ON_CRASH = 0x2 - KEXEC_FILE_UNLOAD = 0x1 - KEXEC_ON_CRASH = 0x1 - KEXEC_PRESERVE_CONTEXT = 0x2 - KEXEC_SEGMENT_MAX = 0x10 - KEYCTL_ASSUME_AUTHORITY = 0x10 - KEYCTL_CAPABILITIES = 0x1f - KEYCTL_CAPS0_BIG_KEY = 0x10 - KEYCTL_CAPS0_CAPABILITIES = 0x1 - KEYCTL_CAPS0_DIFFIE_HELLMAN = 0x4 - KEYCTL_CAPS0_INVALIDATE = 0x20 - KEYCTL_CAPS0_MOVE = 0x80 - KEYCTL_CAPS0_PERSISTENT_KEYRINGS = 0x2 - KEYCTL_CAPS0_PUBLIC_KEY = 0x8 - KEYCTL_CAPS0_RESTRICT_KEYRING = 0x40 - KEYCTL_CAPS1_NOTIFICATIONS = 0x4 - KEYCTL_CAPS1_NS_KEYRING_NAME = 0x1 - KEYCTL_CAPS1_NS_KEY_TAG = 0x2 - KEYCTL_CHOWN = 0x4 - KEYCTL_CLEAR = 0x7 - KEYCTL_DESCRIBE = 0x6 - KEYCTL_DH_COMPUTE = 0x17 - KEYCTL_GET_KEYRING_ID = 0x0 - KEYCTL_GET_PERSISTENT = 0x16 - KEYCTL_GET_SECURITY = 0x11 - KEYCTL_INSTANTIATE = 0xc - KEYCTL_INSTANTIATE_IOV = 0x14 - KEYCTL_INVALIDATE = 0x15 - KEYCTL_JOIN_SESSION_KEYRING = 0x1 - KEYCTL_LINK = 0x8 - KEYCTL_MOVE = 0x1e - KEYCTL_MOVE_EXCL = 0x1 - KEYCTL_NEGATE = 0xd - KEYCTL_PKEY_DECRYPT = 0x1a - KEYCTL_PKEY_ENCRYPT = 0x19 - KEYCTL_PKEY_QUERY = 0x18 - KEYCTL_PKEY_SIGN = 0x1b - KEYCTL_PKEY_VERIFY = 0x1c - KEYCTL_READ = 0xb - KEYCTL_REJECT = 0x13 - KEYCTL_RESTRICT_KEYRING = 0x1d - KEYCTL_REVOKE = 0x3 - KEYCTL_SEARCH = 0xa - KEYCTL_SESSION_TO_PARENT = 0x12 - KEYCTL_SETPERM = 0x5 - KEYCTL_SET_REQKEY_KEYRING = 0xe - KEYCTL_SET_TIMEOUT = 0xf - KEYCTL_SUPPORTS_DECRYPT = 0x2 - KEYCTL_SUPPORTS_ENCRYPT = 0x1 - KEYCTL_SUPPORTS_SIGN = 0x4 - KEYCTL_SUPPORTS_VERIFY = 0x8 - KEYCTL_UNLINK = 0x9 - KEYCTL_UPDATE = 0x2 - KEYCTL_WATCH_KEY = 0x20 - KEY_REQKEY_DEFL_DEFAULT = 0x0 - KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 - KEY_REQKEY_DEFL_NO_CHANGE = -0x1 - KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 - KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 - KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 - KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 - KEY_REQKEY_DEFL_USER_KEYRING = 0x4 - KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 - KEY_SPEC_GROUP_KEYRING = -0x6 - KEY_SPEC_PROCESS_KEYRING = -0x2 - KEY_SPEC_REQKEY_AUTH_KEY = -0x7 - KEY_SPEC_REQUESTOR_KEYRING = -0x8 - KEY_SPEC_SESSION_KEYRING = -0x3 - KEY_SPEC_THREAD_KEYRING = -0x1 - KEY_SPEC_USER_KEYRING = -0x4 - KEY_SPEC_USER_SESSION_KEYRING = -0x5 - LANDLOCK_ACCESS_FS_EXECUTE = 0x1 - LANDLOCK_ACCESS_FS_MAKE_BLOCK = 0x800 - LANDLOCK_ACCESS_FS_MAKE_CHAR = 0x40 - LANDLOCK_ACCESS_FS_MAKE_DIR = 0x80 - LANDLOCK_ACCESS_FS_MAKE_FIFO = 0x400 - LANDLOCK_ACCESS_FS_MAKE_REG = 0x100 - LANDLOCK_ACCESS_FS_MAKE_SOCK = 0x200 - LANDLOCK_ACCESS_FS_MAKE_SYM = 0x1000 - LANDLOCK_ACCESS_FS_READ_DIR = 0x8 - LANDLOCK_ACCESS_FS_READ_FILE = 0x4 - LANDLOCK_ACCESS_FS_REFER = 0x2000 - LANDLOCK_ACCESS_FS_REMOVE_DIR = 0x10 - LANDLOCK_ACCESS_FS_REMOVE_FILE = 0x20 - LANDLOCK_ACCESS_FS_WRITE_FILE = 0x2 - LANDLOCK_CREATE_RULESET_VERSION = 0x1 - LINUX_REBOOT_CMD_CAD_OFF = 0x0 - LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef - LINUX_REBOOT_CMD_HALT = 0xcdef0123 - LINUX_REBOOT_CMD_KEXEC = 0x45584543 - LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc - LINUX_REBOOT_CMD_RESTART = 0x1234567 - LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 - LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 - LINUX_REBOOT_MAGIC1 = 0xfee1dead - LINUX_REBOOT_MAGIC2 = 0x28121969 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - LOOP_CLR_FD = 0x4c01 - LOOP_CTL_ADD = 0x4c80 - LOOP_CTL_GET_FREE = 0x4c82 - LOOP_CTL_REMOVE = 0x4c81 - LOOP_GET_STATUS = 0x4c03 - LOOP_GET_STATUS64 = 0x4c05 - LOOP_SET_BLOCK_SIZE = 0x4c09 - LOOP_SET_CAPACITY = 0x4c07 - LOOP_SET_DIRECT_IO = 0x4c08 - LOOP_SET_FD = 0x4c00 - LOOP_SET_STATUS = 0x4c02 - LOOP_SET_STATUS64 = 0x4c04 - LOOP_SET_STATUS_CLEARABLE_FLAGS = 0x4 - LOOP_SET_STATUS_SETTABLE_FLAGS = 0xc - LO_KEY_SIZE = 0x20 - LO_NAME_SIZE = 0x40 - LWTUNNEL_IP6_MAX = 0x8 - LWTUNNEL_IP_MAX = 0x8 - LWTUNNEL_IP_OPTS_MAX = 0x3 - LWTUNNEL_IP_OPT_ERSPAN_MAX = 0x4 - LWTUNNEL_IP_OPT_GENEVE_MAX = 0x3 - LWTUNNEL_IP_OPT_VXLAN_MAX = 0x1 - MADV_COLD = 0x14 - MADV_DODUMP = 0x11 - MADV_DOFORK = 0xb - MADV_DONTDUMP = 0x10 - MADV_DONTFORK = 0xa - MADV_DONTNEED = 0x4 - MADV_FREE = 0x8 - MADV_HUGEPAGE = 0xe - MADV_HWPOISON = 0x64 - MADV_KEEPONFORK = 0x13 - MADV_MERGEABLE = 0xc - MADV_NOHUGEPAGE = 0xf - MADV_NORMAL = 0x0 - MADV_PAGEOUT = 0x15 - MADV_POPULATE_READ = 0x16 - MADV_POPULATE_WRITE = 0x17 - MADV_RANDOM = 0x1 - MADV_REMOVE = 0x9 - MADV_SEQUENTIAL = 0x2 - MADV_UNMERGEABLE = 0xd - MADV_WILLNEED = 0x3 - MADV_WIPEONFORK = 0x12 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_FIXED_NOREPLACE = 0x100000 - MAP_HUGE_MASK = 0x3f - MAP_HUGE_SHIFT = 0x1a - MAP_PRIVATE = 0x2 - MAP_SHARED = 0x1 - MAP_SHARED_VALIDATE = 0x3 - MAP_TYPE = 0xf - MCAST_BLOCK_SOURCE = 0x2b - MCAST_EXCLUDE = 0x0 - MCAST_INCLUDE = 0x1 - MCAST_JOIN_GROUP = 0x2a - MCAST_JOIN_SOURCE_GROUP = 0x2e - MCAST_LEAVE_GROUP = 0x2d - MCAST_LEAVE_SOURCE_GROUP = 0x2f - MCAST_MSFILTER = 0x30 - MCAST_UNBLOCK_SOURCE = 0x2c - MEMGETREGIONINFO = 0xc0104d08 - MEMREADOOB64 = 0xc0184d16 - MEMWRITE = 0xc0304d18 - MEMWRITEOOB64 = 0xc0184d15 - MFD_ALLOW_SEALING = 0x2 - MFD_CLOEXEC = 0x1 - MFD_HUGETLB = 0x4 - MFD_HUGE_16GB = -0x78000000 - MFD_HUGE_16MB = 0x60000000 - MFD_HUGE_1GB = 0x78000000 - MFD_HUGE_1MB = 0x50000000 - MFD_HUGE_256MB = 0x70000000 - MFD_HUGE_2GB = 0x7c000000 - MFD_HUGE_2MB = 0x54000000 - MFD_HUGE_32MB = 0x64000000 - MFD_HUGE_512KB = 0x4c000000 - MFD_HUGE_512MB = 0x74000000 - MFD_HUGE_64KB = 0x40000000 - MFD_HUGE_8MB = 0x5c000000 - MFD_HUGE_MASK = 0x3f - MFD_HUGE_SHIFT = 0x1a - MINIX2_SUPER_MAGIC = 0x2468 - MINIX2_SUPER_MAGIC2 = 0x2478 - MINIX3_SUPER_MAGIC = 0x4d5a - MINIX_SUPER_MAGIC = 0x137f - MINIX_SUPER_MAGIC2 = 0x138f - MNT_DETACH = 0x2 - MNT_EXPIRE = 0x4 - MNT_FORCE = 0x1 - MODULE_INIT_COMPRESSED_FILE = 0x4 - MODULE_INIT_IGNORE_MODVERSIONS = 0x1 - MODULE_INIT_IGNORE_VERMAGIC = 0x2 - MOUNT_ATTR_IDMAP = 0x100000 - MOUNT_ATTR_NOATIME = 0x10 - MOUNT_ATTR_NODEV = 0x4 - MOUNT_ATTR_NODIRATIME = 0x80 - MOUNT_ATTR_NOEXEC = 0x8 - MOUNT_ATTR_NOSUID = 0x2 - MOUNT_ATTR_NOSYMFOLLOW = 0x200000 - MOUNT_ATTR_RDONLY = 0x1 - MOUNT_ATTR_RELATIME = 0x0 - MOUNT_ATTR_SIZE_VER0 = 0x20 - MOUNT_ATTR_STRICTATIME = 0x20 - MOUNT_ATTR__ATIME = 0x70 - MSDOS_SUPER_MAGIC = 0x4d44 - MSG_BATCH = 0x40000 - MSG_CMSG_CLOEXEC = 0x40000000 - MSG_CONFIRM = 0x800 - MSG_CTRUNC = 0x8 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x40 - MSG_EOR = 0x80 - MSG_ERRQUEUE = 0x2000 - MSG_FASTOPEN = 0x20000000 - MSG_FIN = 0x200 - MSG_MORE = 0x8000 - MSG_NOSIGNAL = 0x4000 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_PROXY = 0x10 - MSG_RST = 0x1000 - MSG_SYN = 0x400 - MSG_TRUNC = 0x20 - MSG_TRYHARD = 0x4 - MSG_WAITALL = 0x100 - MSG_WAITFORONE = 0x10000 - MSG_ZEROCOPY = 0x4000000 - MS_ACTIVE = 0x40000000 - MS_ASYNC = 0x1 - MS_BIND = 0x1000 - MS_BORN = 0x20000000 - MS_DIRSYNC = 0x80 - MS_INVALIDATE = 0x2 - MS_I_VERSION = 0x800000 - MS_KERNMOUNT = 0x400000 - MS_LAZYTIME = 0x2000000 - MS_MANDLOCK = 0x40 - MS_MGC_MSK = 0xffff0000 - MS_MGC_VAL = 0xc0ed0000 - MS_MOVE = 0x2000 - MS_NOATIME = 0x400 - MS_NODEV = 0x4 - MS_NODIRATIME = 0x800 - MS_NOEXEC = 0x8 - MS_NOREMOTELOCK = 0x8000000 - MS_NOSEC = 0x10000000 - MS_NOSUID = 0x2 - MS_NOSYMFOLLOW = 0x100 - MS_NOUSER = -0x80000000 - MS_POSIXACL = 0x10000 - MS_PRIVATE = 0x40000 - MS_RDONLY = 0x1 - MS_REC = 0x4000 - MS_RELATIME = 0x200000 - MS_REMOUNT = 0x20 - MS_RMT_MASK = 0x2800051 - MS_SHARED = 0x100000 - MS_SILENT = 0x8000 - MS_SLAVE = 0x80000 - MS_STRICTATIME = 0x1000000 - MS_SUBMOUNT = 0x4000000 - MS_SYNC = 0x4 - MS_SYNCHRONOUS = 0x10 - MS_UNBINDABLE = 0x20000 - MS_VERBOSE = 0x8000 - MTD_ABSENT = 0x0 - MTD_BIT_WRITEABLE = 0x800 - MTD_CAP_NANDFLASH = 0x400 - MTD_CAP_NORFLASH = 0xc00 - MTD_CAP_NVRAM = 0x1c00 - MTD_CAP_RAM = 0x1c00 - MTD_CAP_ROM = 0x0 - MTD_DATAFLASH = 0x6 - MTD_INODE_FS_MAGIC = 0x11307854 - MTD_MAX_ECCPOS_ENTRIES = 0x40 - MTD_MAX_OOBFREE_ENTRIES = 0x8 - MTD_MLCNANDFLASH = 0x8 - MTD_NANDECC_AUTOPLACE = 0x2 - MTD_NANDECC_AUTOPL_USR = 0x4 - MTD_NANDECC_OFF = 0x0 - MTD_NANDECC_PLACE = 0x1 - MTD_NANDECC_PLACEONLY = 0x3 - MTD_NANDFLASH = 0x4 - MTD_NORFLASH = 0x3 - MTD_NO_ERASE = 0x1000 - MTD_OTP_FACTORY = 0x1 - MTD_OTP_OFF = 0x0 - MTD_OTP_USER = 0x2 - MTD_POWERUP_LOCK = 0x2000 - MTD_RAM = 0x1 - MTD_ROM = 0x2 - MTD_SLC_ON_MLC_EMULATION = 0x4000 - MTD_UBIVOLUME = 0x7 - MTD_WRITEABLE = 0x400 - NAME_MAX = 0xff - NCP_SUPER_MAGIC = 0x564c - NETLINK_ADD_MEMBERSHIP = 0x1 - NETLINK_AUDIT = 0x9 - NETLINK_BROADCAST_ERROR = 0x4 - NETLINK_CAP_ACK = 0xa - NETLINK_CONNECTOR = 0xb - NETLINK_CRYPTO = 0x15 - NETLINK_DNRTMSG = 0xe - NETLINK_DROP_MEMBERSHIP = 0x2 - NETLINK_ECRYPTFS = 0x13 - NETLINK_EXT_ACK = 0xb - NETLINK_FIB_LOOKUP = 0xa - NETLINK_FIREWALL = 0x3 - NETLINK_GENERIC = 0x10 - NETLINK_GET_STRICT_CHK = 0xc - NETLINK_INET_DIAG = 0x4 - NETLINK_IP6_FW = 0xd - NETLINK_ISCSI = 0x8 - NETLINK_KOBJECT_UEVENT = 0xf - NETLINK_LISTEN_ALL_NSID = 0x8 - NETLINK_LIST_MEMBERSHIPS = 0x9 - NETLINK_NETFILTER = 0xc - NETLINK_NFLOG = 0x5 - NETLINK_NO_ENOBUFS = 0x5 - NETLINK_PKTINFO = 0x3 - NETLINK_RDMA = 0x14 - NETLINK_ROUTE = 0x0 - NETLINK_RX_RING = 0x6 - NETLINK_SCSITRANSPORT = 0x12 - NETLINK_SELINUX = 0x7 - NETLINK_SMC = 0x16 - NETLINK_SOCK_DIAG = 0x4 - NETLINK_TX_RING = 0x7 - NETLINK_UNUSED = 0x1 - NETLINK_USERSOCK = 0x2 - NETLINK_XFRM = 0x6 - NETNSA_MAX = 0x5 - NETNSA_NSID_NOT_ASSIGNED = -0x1 - NFC_ATR_REQ_GB_MAXSIZE = 0x30 - NFC_ATR_REQ_MAXSIZE = 0x40 - NFC_ATR_RES_GB_MAXSIZE = 0x2f - NFC_ATR_RES_MAXSIZE = 0x40 - NFC_COMM_ACTIVE = 0x0 - NFC_COMM_PASSIVE = 0x1 - NFC_DEVICE_NAME_MAXSIZE = 0x8 - NFC_DIRECTION_RX = 0x0 - NFC_DIRECTION_TX = 0x1 - NFC_FIRMWARE_NAME_MAXSIZE = 0x20 - NFC_GB_MAXSIZE = 0x30 - NFC_GENL_MCAST_EVENT_NAME = "events" - NFC_GENL_NAME = "nfc" - NFC_GENL_VERSION = 0x1 - NFC_HEADER_SIZE = 0x1 - NFC_ISO15693_UID_MAXSIZE = 0x8 - NFC_LLCP_MAX_SERVICE_NAME = 0x3f - NFC_LLCP_MIUX = 0x1 - NFC_LLCP_REMOTE_LTO = 0x3 - NFC_LLCP_REMOTE_MIU = 0x2 - NFC_LLCP_REMOTE_RW = 0x4 - NFC_LLCP_RW = 0x0 - NFC_NFCID1_MAXSIZE = 0xa - NFC_NFCID2_MAXSIZE = 0x8 - NFC_NFCID3_MAXSIZE = 0xa - NFC_PROTO_FELICA = 0x3 - NFC_PROTO_FELICA_MASK = 0x8 - NFC_PROTO_ISO14443 = 0x4 - NFC_PROTO_ISO14443_B = 0x6 - NFC_PROTO_ISO14443_B_MASK = 0x40 - NFC_PROTO_ISO14443_MASK = 0x10 - NFC_PROTO_ISO15693 = 0x7 - NFC_PROTO_ISO15693_MASK = 0x80 - NFC_PROTO_JEWEL = 0x1 - NFC_PROTO_JEWEL_MASK = 0x2 - NFC_PROTO_MAX = 0x8 - NFC_PROTO_MIFARE = 0x2 - NFC_PROTO_MIFARE_MASK = 0x4 - NFC_PROTO_NFC_DEP = 0x5 - NFC_PROTO_NFC_DEP_MASK = 0x20 - NFC_RAW_HEADER_SIZE = 0x2 - NFC_RF_INITIATOR = 0x0 - NFC_RF_NONE = 0x2 - NFC_RF_TARGET = 0x1 - NFC_SENSB_RES_MAXSIZE = 0xc - NFC_SENSF_RES_MAXSIZE = 0x12 - NFC_SE_DISABLED = 0x0 - NFC_SE_EMBEDDED = 0x2 - NFC_SE_ENABLED = 0x1 - NFC_SE_UICC = 0x1 - NFC_SOCKPROTO_LLCP = 0x1 - NFC_SOCKPROTO_MAX = 0x2 - NFC_SOCKPROTO_RAW = 0x0 - NFNETLINK_V0 = 0x0 - NFNLGRP_ACCT_QUOTA = 0x8 - NFNLGRP_CONNTRACK_DESTROY = 0x3 - NFNLGRP_CONNTRACK_EXP_DESTROY = 0x6 - NFNLGRP_CONNTRACK_EXP_NEW = 0x4 - NFNLGRP_CONNTRACK_EXP_UPDATE = 0x5 - NFNLGRP_CONNTRACK_NEW = 0x1 - NFNLGRP_CONNTRACK_UPDATE = 0x2 - NFNLGRP_MAX = 0x9 - NFNLGRP_NFTABLES = 0x7 - NFNLGRP_NFTRACE = 0x9 - NFNLGRP_NONE = 0x0 - NFNL_BATCH_MAX = 0x1 - NFNL_MSG_BATCH_BEGIN = 0x10 - NFNL_MSG_BATCH_END = 0x11 - NFNL_NFA_NEST = 0x8000 - NFNL_SUBSYS_ACCT = 0x7 - NFNL_SUBSYS_COUNT = 0xd - NFNL_SUBSYS_CTHELPER = 0x9 - NFNL_SUBSYS_CTNETLINK = 0x1 - NFNL_SUBSYS_CTNETLINK_EXP = 0x2 - NFNL_SUBSYS_CTNETLINK_TIMEOUT = 0x8 - NFNL_SUBSYS_HOOK = 0xc - NFNL_SUBSYS_IPSET = 0x6 - NFNL_SUBSYS_NFTABLES = 0xa - NFNL_SUBSYS_NFT_COMPAT = 0xb - NFNL_SUBSYS_NONE = 0x0 - NFNL_SUBSYS_OSF = 0x5 - NFNL_SUBSYS_QUEUE = 0x3 - NFNL_SUBSYS_ULOG = 0x4 - NFS_SUPER_MAGIC = 0x6969 - NILFS_SUPER_MAGIC = 0x3434 - NL0 = 0x0 - NL1 = 0x100 - NLA_ALIGNTO = 0x4 - NLA_F_NESTED = 0x8000 - NLA_F_NET_BYTEORDER = 0x4000 - NLA_HDRLEN = 0x4 - NLMSG_ALIGNTO = 0x4 - NLMSG_DONE = 0x3 - NLMSG_ERROR = 0x2 - NLMSG_HDRLEN = 0x10 - NLMSG_MIN_TYPE = 0x10 - NLMSG_NOOP = 0x1 - NLMSG_OVERRUN = 0x4 - NLM_F_ACK = 0x4 - NLM_F_ACK_TLVS = 0x200 - NLM_F_APPEND = 0x800 - NLM_F_ATOMIC = 0x400 - NLM_F_BULK = 0x200 - NLM_F_CAPPED = 0x100 - NLM_F_CREATE = 0x400 - NLM_F_DUMP = 0x300 - NLM_F_DUMP_FILTERED = 0x20 - NLM_F_DUMP_INTR = 0x10 - NLM_F_ECHO = 0x8 - NLM_F_EXCL = 0x200 - NLM_F_MATCH = 0x200 - NLM_F_MULTI = 0x2 - NLM_F_NONREC = 0x100 - NLM_F_REPLACE = 0x100 - NLM_F_REQUEST = 0x1 - NLM_F_ROOT = 0x100 - NSFS_MAGIC = 0x6e736673 - OCFS2_SUPER_MAGIC = 0x7461636f - OCRNL = 0x8 - OFDEL = 0x80 - OFILL = 0x40 - ONLRET = 0x20 - ONOCR = 0x10 - OPENPROM_SUPER_MAGIC = 0x9fa1 - OPOST = 0x1 - OVERLAYFS_SUPER_MAGIC = 0x794c7630 - O_ACCMODE = 0x3 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_WRONLY = 0x1 - PACKET_ADD_MEMBERSHIP = 0x1 - PACKET_AUXDATA = 0x8 - PACKET_BROADCAST = 0x1 - PACKET_COPY_THRESH = 0x7 - PACKET_DROP_MEMBERSHIP = 0x2 - PACKET_FANOUT = 0x12 - PACKET_FANOUT_CBPF = 0x6 - PACKET_FANOUT_CPU = 0x2 - PACKET_FANOUT_DATA = 0x16 - PACKET_FANOUT_EBPF = 0x7 - PACKET_FANOUT_FLAG_DEFRAG = 0x8000 - PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 - PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 - PACKET_FANOUT_HASH = 0x0 - PACKET_FANOUT_LB = 0x1 - PACKET_FANOUT_QM = 0x5 - PACKET_FANOUT_RND = 0x4 - PACKET_FANOUT_ROLLOVER = 0x3 - PACKET_FASTROUTE = 0x6 - PACKET_HDRLEN = 0xb - PACKET_HOST = 0x0 - PACKET_IGNORE_OUTGOING = 0x17 - PACKET_KERNEL = 0x7 - PACKET_LOOPBACK = 0x5 - PACKET_LOSS = 0xe - PACKET_MR_ALLMULTI = 0x2 - PACKET_MR_MULTICAST = 0x0 - PACKET_MR_PROMISC = 0x1 - PACKET_MR_UNICAST = 0x3 - PACKET_MULTICAST = 0x2 - PACKET_ORIGDEV = 0x9 - PACKET_OTHERHOST = 0x3 - PACKET_OUTGOING = 0x4 - PACKET_QDISC_BYPASS = 0x14 - PACKET_RECV_OUTPUT = 0x3 - PACKET_RESERVE = 0xc - PACKET_ROLLOVER_STATS = 0x15 - PACKET_RX_RING = 0x5 - PACKET_STATISTICS = 0x6 - PACKET_TIMESTAMP = 0x11 - PACKET_TX_HAS_OFF = 0x13 - PACKET_TX_RING = 0xd - PACKET_TX_TIMESTAMP = 0x10 - PACKET_USER = 0x6 - PACKET_VERSION = 0xa - PACKET_VNET_HDR = 0xf - PARITY_CRC16_PR0 = 0x2 - PARITY_CRC16_PR0_CCITT = 0x4 - PARITY_CRC16_PR1 = 0x3 - PARITY_CRC16_PR1_CCITT = 0x5 - PARITY_CRC32_PR0_CCITT = 0x6 - PARITY_CRC32_PR1_CCITT = 0x7 - PARITY_DEFAULT = 0x0 - PARITY_NONE = 0x1 - PARMRK = 0x8 - PERF_ATTR_SIZE_VER0 = 0x40 - PERF_ATTR_SIZE_VER1 = 0x48 - PERF_ATTR_SIZE_VER2 = 0x50 - PERF_ATTR_SIZE_VER3 = 0x60 - PERF_ATTR_SIZE_VER4 = 0x68 - PERF_ATTR_SIZE_VER5 = 0x70 - PERF_ATTR_SIZE_VER6 = 0x78 - PERF_ATTR_SIZE_VER7 = 0x80 - PERF_AUX_FLAG_COLLISION = 0x8 - PERF_AUX_FLAG_CORESIGHT_FORMAT_CORESIGHT = 0x0 - PERF_AUX_FLAG_CORESIGHT_FORMAT_RAW = 0x100 - PERF_AUX_FLAG_OVERWRITE = 0x2 - PERF_AUX_FLAG_PARTIAL = 0x4 - PERF_AUX_FLAG_PMU_FORMAT_TYPE_MASK = 0xff00 - PERF_AUX_FLAG_TRUNCATED = 0x1 - PERF_FLAG_FD_CLOEXEC = 0x8 - PERF_FLAG_FD_NO_GROUP = 0x1 - PERF_FLAG_FD_OUTPUT = 0x2 - PERF_FLAG_PID_CGROUP = 0x4 - PERF_HW_EVENT_MASK = 0xffffffff - PERF_MAX_CONTEXTS_PER_STACK = 0x8 - PERF_MAX_STACK_DEPTH = 0x7f - PERF_MEM_BLK_ADDR = 0x4 - PERF_MEM_BLK_DATA = 0x2 - PERF_MEM_BLK_NA = 0x1 - PERF_MEM_BLK_SHIFT = 0x28 - PERF_MEM_HOPS_0 = 0x1 - PERF_MEM_HOPS_1 = 0x2 - PERF_MEM_HOPS_2 = 0x3 - PERF_MEM_HOPS_3 = 0x4 - PERF_MEM_HOPS_SHIFT = 0x2b - PERF_MEM_LOCK_LOCKED = 0x2 - PERF_MEM_LOCK_NA = 0x1 - PERF_MEM_LOCK_SHIFT = 0x18 - PERF_MEM_LVLNUM_ANY_CACHE = 0xb - PERF_MEM_LVLNUM_L1 = 0x1 - PERF_MEM_LVLNUM_L2 = 0x2 - PERF_MEM_LVLNUM_L3 = 0x3 - PERF_MEM_LVLNUM_L4 = 0x4 - PERF_MEM_LVLNUM_LFB = 0xc - PERF_MEM_LVLNUM_NA = 0xf - PERF_MEM_LVLNUM_PMEM = 0xe - PERF_MEM_LVLNUM_RAM = 0xd - PERF_MEM_LVLNUM_SHIFT = 0x21 - PERF_MEM_LVL_HIT = 0x2 - PERF_MEM_LVL_IO = 0x1000 - PERF_MEM_LVL_L1 = 0x8 - PERF_MEM_LVL_L2 = 0x20 - PERF_MEM_LVL_L3 = 0x40 - PERF_MEM_LVL_LFB = 0x10 - PERF_MEM_LVL_LOC_RAM = 0x80 - PERF_MEM_LVL_MISS = 0x4 - PERF_MEM_LVL_NA = 0x1 - PERF_MEM_LVL_REM_CCE1 = 0x400 - PERF_MEM_LVL_REM_CCE2 = 0x800 - PERF_MEM_LVL_REM_RAM1 = 0x100 - PERF_MEM_LVL_REM_RAM2 = 0x200 - PERF_MEM_LVL_SHIFT = 0x5 - PERF_MEM_LVL_UNC = 0x2000 - PERF_MEM_OP_EXEC = 0x10 - PERF_MEM_OP_LOAD = 0x2 - PERF_MEM_OP_NA = 0x1 - PERF_MEM_OP_PFETCH = 0x8 - PERF_MEM_OP_SHIFT = 0x0 - PERF_MEM_OP_STORE = 0x4 - PERF_MEM_REMOTE_REMOTE = 0x1 - PERF_MEM_REMOTE_SHIFT = 0x25 - PERF_MEM_SNOOPX_FWD = 0x1 - PERF_MEM_SNOOPX_SHIFT = 0x26 - PERF_MEM_SNOOP_HIT = 0x4 - PERF_MEM_SNOOP_HITM = 0x10 - PERF_MEM_SNOOP_MISS = 0x8 - PERF_MEM_SNOOP_NA = 0x1 - PERF_MEM_SNOOP_NONE = 0x2 - PERF_MEM_SNOOP_SHIFT = 0x13 - PERF_MEM_TLB_HIT = 0x2 - PERF_MEM_TLB_L1 = 0x8 - PERF_MEM_TLB_L2 = 0x10 - PERF_MEM_TLB_MISS = 0x4 - PERF_MEM_TLB_NA = 0x1 - PERF_MEM_TLB_OS = 0x40 - PERF_MEM_TLB_SHIFT = 0x1a - PERF_MEM_TLB_WK = 0x20 - PERF_PMU_TYPE_SHIFT = 0x20 - PERF_RECORD_KSYMBOL_FLAGS_UNREGISTER = 0x1 - PERF_RECORD_MISC_COMM_EXEC = 0x2000 - PERF_RECORD_MISC_CPUMODE_MASK = 0x7 - PERF_RECORD_MISC_CPUMODE_UNKNOWN = 0x0 - PERF_RECORD_MISC_EXACT_IP = 0x4000 - PERF_RECORD_MISC_EXT_RESERVED = 0x8000 - PERF_RECORD_MISC_FORK_EXEC = 0x2000 - PERF_RECORD_MISC_GUEST_KERNEL = 0x4 - PERF_RECORD_MISC_GUEST_USER = 0x5 - PERF_RECORD_MISC_HYPERVISOR = 0x3 - PERF_RECORD_MISC_KERNEL = 0x1 - PERF_RECORD_MISC_MMAP_BUILD_ID = 0x4000 - PERF_RECORD_MISC_MMAP_DATA = 0x2000 - PERF_RECORD_MISC_PROC_MAP_PARSE_TIMEOUT = 0x1000 - PERF_RECORD_MISC_SWITCH_OUT = 0x2000 - PERF_RECORD_MISC_SWITCH_OUT_PREEMPT = 0x4000 - PERF_RECORD_MISC_USER = 0x2 - PERF_SAMPLE_BRANCH_PLM_ALL = 0x7 - PERF_SAMPLE_WEIGHT_TYPE = 0x1004000 - PIPEFS_MAGIC = 0x50495045 - PPC_CMM_MAGIC = 0xc7571590 - PPPIOCGNPMODE = 0xc008744c - PPPIOCNEWUNIT = 0xc004743e - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROC_SUPER_MAGIC = 0x9fa0 - PROT_EXEC = 0x4 - PROT_GROWSDOWN = 0x1000000 - PROT_GROWSUP = 0x2000000 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - PR_CAPBSET_DROP = 0x18 - PR_CAPBSET_READ = 0x17 - PR_CAP_AMBIENT = 0x2f - PR_CAP_AMBIENT_CLEAR_ALL = 0x4 - PR_CAP_AMBIENT_IS_SET = 0x1 - PR_CAP_AMBIENT_LOWER = 0x3 - PR_CAP_AMBIENT_RAISE = 0x2 - PR_ENDIAN_BIG = 0x0 - PR_ENDIAN_LITTLE = 0x1 - PR_ENDIAN_PPC_LITTLE = 0x2 - PR_FPEMU_NOPRINT = 0x1 - PR_FPEMU_SIGFPE = 0x2 - PR_FP_EXC_ASYNC = 0x2 - PR_FP_EXC_DISABLED = 0x0 - PR_FP_EXC_DIV = 0x10000 - PR_FP_EXC_INV = 0x100000 - PR_FP_EXC_NONRECOV = 0x1 - PR_FP_EXC_OVF = 0x20000 - PR_FP_EXC_PRECISE = 0x3 - PR_FP_EXC_RES = 0x80000 - PR_FP_EXC_SW_ENABLE = 0x80 - PR_FP_EXC_UND = 0x40000 - PR_FP_MODE_FR = 0x1 - PR_FP_MODE_FRE = 0x2 - PR_GET_CHILD_SUBREAPER = 0x25 - PR_GET_DUMPABLE = 0x3 - PR_GET_ENDIAN = 0x13 - PR_GET_FPEMU = 0x9 - PR_GET_FPEXC = 0xb - PR_GET_FP_MODE = 0x2e - PR_GET_IO_FLUSHER = 0x3a - PR_GET_KEEPCAPS = 0x7 - PR_GET_NAME = 0x10 - PR_GET_NO_NEW_PRIVS = 0x27 - PR_GET_PDEATHSIG = 0x2 - PR_GET_SECCOMP = 0x15 - PR_GET_SECUREBITS = 0x1b - PR_GET_SPECULATION_CTRL = 0x34 - PR_GET_TAGGED_ADDR_CTRL = 0x38 - PR_GET_THP_DISABLE = 0x2a - PR_GET_TID_ADDRESS = 0x28 - PR_GET_TIMERSLACK = 0x1e - PR_GET_TIMING = 0xd - PR_GET_TSC = 0x19 - PR_GET_UNALIGN = 0x5 - PR_MCE_KILL = 0x21 - PR_MCE_KILL_CLEAR = 0x0 - PR_MCE_KILL_DEFAULT = 0x2 - PR_MCE_KILL_EARLY = 0x1 - PR_MCE_KILL_GET = 0x22 - PR_MCE_KILL_LATE = 0x0 - PR_MCE_KILL_SET = 0x1 - PR_MPX_DISABLE_MANAGEMENT = 0x2c - PR_MPX_ENABLE_MANAGEMENT = 0x2b - PR_MTE_TAG_MASK = 0x7fff8 - PR_MTE_TAG_SHIFT = 0x3 - PR_MTE_TCF_ASYNC = 0x4 - PR_MTE_TCF_MASK = 0x6 - PR_MTE_TCF_NONE = 0x0 - PR_MTE_TCF_SHIFT = 0x1 - PR_MTE_TCF_SYNC = 0x2 - PR_PAC_APDAKEY = 0x4 - PR_PAC_APDBKEY = 0x8 - PR_PAC_APGAKEY = 0x10 - PR_PAC_APIAKEY = 0x1 - PR_PAC_APIBKEY = 0x2 - PR_PAC_GET_ENABLED_KEYS = 0x3d - PR_PAC_RESET_KEYS = 0x36 - PR_PAC_SET_ENABLED_KEYS = 0x3c - PR_SCHED_CORE = 0x3e - PR_SCHED_CORE_CREATE = 0x1 - PR_SCHED_CORE_GET = 0x0 - PR_SCHED_CORE_MAX = 0x4 - PR_SCHED_CORE_SCOPE_PROCESS_GROUP = 0x2 - PR_SCHED_CORE_SCOPE_THREAD = 0x0 - PR_SCHED_CORE_SCOPE_THREAD_GROUP = 0x1 - PR_SCHED_CORE_SHARE_FROM = 0x3 - PR_SCHED_CORE_SHARE_TO = 0x2 - PR_SET_CHILD_SUBREAPER = 0x24 - PR_SET_DUMPABLE = 0x4 - PR_SET_ENDIAN = 0x14 - PR_SET_FPEMU = 0xa - PR_SET_FPEXC = 0xc - PR_SET_FP_MODE = 0x2d - PR_SET_IO_FLUSHER = 0x39 - PR_SET_KEEPCAPS = 0x8 - PR_SET_MM = 0x23 - PR_SET_MM_ARG_END = 0x9 - PR_SET_MM_ARG_START = 0x8 - PR_SET_MM_AUXV = 0xc - PR_SET_MM_BRK = 0x7 - PR_SET_MM_END_CODE = 0x2 - PR_SET_MM_END_DATA = 0x4 - PR_SET_MM_ENV_END = 0xb - PR_SET_MM_ENV_START = 0xa - PR_SET_MM_EXE_FILE = 0xd - PR_SET_MM_MAP = 0xe - PR_SET_MM_MAP_SIZE = 0xf - PR_SET_MM_START_BRK = 0x6 - PR_SET_MM_START_CODE = 0x1 - PR_SET_MM_START_DATA = 0x3 - PR_SET_MM_START_STACK = 0x5 - PR_SET_NAME = 0xf - PR_SET_NO_NEW_PRIVS = 0x26 - PR_SET_PDEATHSIG = 0x1 - PR_SET_PTRACER = 0x59616d61 - PR_SET_SECCOMP = 0x16 - PR_SET_SECUREBITS = 0x1c - PR_SET_SPECULATION_CTRL = 0x35 - PR_SET_SYSCALL_USER_DISPATCH = 0x3b - PR_SET_TAGGED_ADDR_CTRL = 0x37 - PR_SET_THP_DISABLE = 0x29 - PR_SET_TIMERSLACK = 0x1d - PR_SET_TIMING = 0xe - PR_SET_TSC = 0x1a - PR_SET_UNALIGN = 0x6 - PR_SET_VMA = 0x53564d41 - PR_SET_VMA_ANON_NAME = 0x0 - PR_SME_GET_VL = 0x40 - PR_SME_SET_VL = 0x3f - PR_SME_SET_VL_ONEXEC = 0x40000 - PR_SME_VL_INHERIT = 0x20000 - PR_SME_VL_LEN_MASK = 0xffff - PR_SPEC_DISABLE = 0x4 - PR_SPEC_DISABLE_NOEXEC = 0x10 - PR_SPEC_ENABLE = 0x2 - PR_SPEC_FORCE_DISABLE = 0x8 - PR_SPEC_INDIRECT_BRANCH = 0x1 - PR_SPEC_L1D_FLUSH = 0x2 - PR_SPEC_NOT_AFFECTED = 0x0 - PR_SPEC_PRCTL = 0x1 - PR_SPEC_STORE_BYPASS = 0x0 - PR_SVE_GET_VL = 0x33 - PR_SVE_SET_VL = 0x32 - PR_SVE_SET_VL_ONEXEC = 0x40000 - PR_SVE_VL_INHERIT = 0x20000 - PR_SVE_VL_LEN_MASK = 0xffff - PR_SYS_DISPATCH_OFF = 0x0 - PR_SYS_DISPATCH_ON = 0x1 - PR_TAGGED_ADDR_ENABLE = 0x1 - PR_TASK_PERF_EVENTS_DISABLE = 0x1f - PR_TASK_PERF_EVENTS_ENABLE = 0x20 - PR_TIMING_STATISTICAL = 0x0 - PR_TIMING_TIMESTAMP = 0x1 - PR_TSC_ENABLE = 0x1 - PR_TSC_SIGSEGV = 0x2 - PR_UNALIGN_NOPRINT = 0x1 - PR_UNALIGN_SIGBUS = 0x2 - PSTOREFS_MAGIC = 0x6165676c - PTRACE_ATTACH = 0x10 - PTRACE_CONT = 0x7 - PTRACE_DETACH = 0x11 - PTRACE_EVENTMSG_SYSCALL_ENTRY = 0x1 - PTRACE_EVENTMSG_SYSCALL_EXIT = 0x2 - PTRACE_EVENT_CLONE = 0x3 - PTRACE_EVENT_EXEC = 0x4 - PTRACE_EVENT_EXIT = 0x6 - PTRACE_EVENT_FORK = 0x1 - PTRACE_EVENT_SECCOMP = 0x7 - PTRACE_EVENT_STOP = 0x80 - PTRACE_EVENT_VFORK = 0x2 - PTRACE_EVENT_VFORK_DONE = 0x5 - PTRACE_GETEVENTMSG = 0x4201 - PTRACE_GETREGS = 0xc - PTRACE_GETREGSET = 0x4204 - PTRACE_GETSIGINFO = 0x4202 - PTRACE_GETSIGMASK = 0x420a - PTRACE_GET_RSEQ_CONFIGURATION = 0x420f - PTRACE_GET_SYSCALL_INFO = 0x420e - PTRACE_INTERRUPT = 0x4207 - PTRACE_KILL = 0x8 - PTRACE_LISTEN = 0x4208 - PTRACE_O_EXITKILL = 0x100000 - PTRACE_O_MASK = 0x3000ff - PTRACE_O_SUSPEND_SECCOMP = 0x200000 - PTRACE_O_TRACECLONE = 0x8 - PTRACE_O_TRACEEXEC = 0x10 - PTRACE_O_TRACEEXIT = 0x40 - PTRACE_O_TRACEFORK = 0x2 - PTRACE_O_TRACESECCOMP = 0x80 - PTRACE_O_TRACESYSGOOD = 0x1 - PTRACE_O_TRACEVFORK = 0x4 - PTRACE_O_TRACEVFORKDONE = 0x20 - PTRACE_PEEKDATA = 0x2 - PTRACE_PEEKSIGINFO = 0x4209 - PTRACE_PEEKSIGINFO_SHARED = 0x1 - PTRACE_PEEKTEXT = 0x1 - PTRACE_PEEKUSR = 0x3 - PTRACE_POKEDATA = 0x5 - PTRACE_POKETEXT = 0x4 - PTRACE_POKEUSR = 0x6 - PTRACE_SECCOMP_GET_FILTER = 0x420c - PTRACE_SECCOMP_GET_METADATA = 0x420d - PTRACE_SEIZE = 0x4206 - PTRACE_SETOPTIONS = 0x4200 - PTRACE_SETREGS = 0xd - PTRACE_SETREGSET = 0x4205 - PTRACE_SETSIGINFO = 0x4203 - PTRACE_SETSIGMASK = 0x420b - PTRACE_SINGLESTEP = 0x9 - PTRACE_SYSCALL = 0x18 - PTRACE_SYSCALL_INFO_ENTRY = 0x1 - PTRACE_SYSCALL_INFO_EXIT = 0x2 - PTRACE_SYSCALL_INFO_NONE = 0x0 - PTRACE_SYSCALL_INFO_SECCOMP = 0x3 - PTRACE_TRACEME = 0x0 - P_ALL = 0x0 - P_PGID = 0x2 - P_PID = 0x1 - P_PIDFD = 0x3 - QNX4_SUPER_MAGIC = 0x2f - QNX6_SUPER_MAGIC = 0x68191122 - RAMFS_MAGIC = 0x858458f6 - RAW_PAYLOAD_DIGITAL = 0x3 - RAW_PAYLOAD_HCI = 0x2 - RAW_PAYLOAD_LLCP = 0x0 - RAW_PAYLOAD_NCI = 0x1 - RAW_PAYLOAD_PROPRIETARY = 0x4 - RDTGROUP_SUPER_MAGIC = 0x7655821 - REISERFS_SUPER_MAGIC = 0x52654973 - RENAME_EXCHANGE = 0x2 - RENAME_NOREPLACE = 0x1 - RENAME_WHITEOUT = 0x4 - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_LOCKS = 0xa - RLIMIT_MSGQUEUE = 0xc - RLIMIT_NICE = 0xd - RLIMIT_RTPRIO = 0xe - RLIMIT_RTTIME = 0xf - RLIMIT_SIGPENDING = 0xb - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0xffffffffffffffff - RTAX_ADVMSS = 0x8 - RTAX_CC_ALGO = 0x10 - RTAX_CWND = 0x7 - RTAX_FASTOPEN_NO_COOKIE = 0x11 - RTAX_FEATURES = 0xc - RTAX_FEATURE_ALLFRAG = 0x8 - RTAX_FEATURE_ECN = 0x1 - RTAX_FEATURE_MASK = 0xf - RTAX_FEATURE_SACK = 0x2 - RTAX_FEATURE_TIMESTAMP = 0x4 - RTAX_HOPLIMIT = 0xa - RTAX_INITCWND = 0xb - RTAX_INITRWND = 0xe - RTAX_LOCK = 0x1 - RTAX_MAX = 0x11 - RTAX_MTU = 0x2 - RTAX_QUICKACK = 0xf - RTAX_REORDERING = 0x9 - RTAX_RTO_MIN = 0xd - RTAX_RTT = 0x4 - RTAX_RTTVAR = 0x5 - RTAX_SSTHRESH = 0x6 - RTAX_UNSPEC = 0x0 - RTAX_WINDOW = 0x3 - RTA_ALIGNTO = 0x4 - RTA_MAX = 0x1e - RTCF_DIRECTSRC = 0x4000000 - RTCF_DOREDIRECT = 0x1000000 - RTCF_LOG = 0x2000000 - RTCF_MASQ = 0x400000 - RTCF_NAT = 0x800000 - RTCF_VALVE = 0x200000 - RTC_AF = 0x20 - RTC_BSM_DIRECT = 0x1 - RTC_BSM_DISABLED = 0x0 - RTC_BSM_LEVEL = 0x2 - RTC_BSM_STANDBY = 0x3 - RTC_FEATURE_ALARM = 0x0 - RTC_FEATURE_ALARM_RES_2S = 0x3 - RTC_FEATURE_ALARM_RES_MINUTE = 0x1 - RTC_FEATURE_ALARM_WAKEUP_ONLY = 0x7 - RTC_FEATURE_BACKUP_SWITCH_MODE = 0x6 - RTC_FEATURE_CNT = 0x8 - RTC_FEATURE_CORRECTION = 0x5 - RTC_FEATURE_NEED_WEEK_DAY = 0x2 - RTC_FEATURE_UPDATE_INTERRUPT = 0x4 - RTC_IRQF = 0x80 - RTC_MAX_FREQ = 0x2000 - RTC_PARAM_BACKUP_SWITCH_MODE = 0x2 - RTC_PARAM_CORRECTION = 0x1 - RTC_PARAM_FEATURES = 0x0 - RTC_PF = 0x40 - RTC_UF = 0x10 - RTF_ADDRCLASSMASK = 0xf8000000 - RTF_ADDRCONF = 0x40000 - RTF_ALLONLINK = 0x20000 - RTF_BROADCAST = 0x10000000 - RTF_CACHE = 0x1000000 - RTF_DEFAULT = 0x10000 - RTF_DYNAMIC = 0x10 - RTF_FLOW = 0x2000000 - RTF_GATEWAY = 0x2 - RTF_HOST = 0x4 - RTF_INTERFACE = 0x40000000 - RTF_IRTT = 0x100 - RTF_LINKRT = 0x100000 - RTF_LOCAL = 0x80000000 - RTF_MODIFIED = 0x20 - RTF_MSS = 0x40 - RTF_MTU = 0x40 - RTF_MULTICAST = 0x20000000 - RTF_NAT = 0x8000000 - RTF_NOFORWARD = 0x1000 - RTF_NONEXTHOP = 0x200000 - RTF_NOPMTUDISC = 0x4000 - RTF_POLICY = 0x4000000 - RTF_REINSTATE = 0x8 - RTF_REJECT = 0x200 - RTF_STATIC = 0x400 - RTF_THROW = 0x2000 - RTF_UP = 0x1 - RTF_WINDOW = 0x80 - RTF_XRESOLVE = 0x800 - RTMGRP_DECnet_IFADDR = 0x1000 - RTMGRP_DECnet_ROUTE = 0x4000 - RTMGRP_IPV4_IFADDR = 0x10 - RTMGRP_IPV4_MROUTE = 0x20 - RTMGRP_IPV4_ROUTE = 0x40 - RTMGRP_IPV4_RULE = 0x80 - RTMGRP_IPV6_IFADDR = 0x100 - RTMGRP_IPV6_IFINFO = 0x800 - RTMGRP_IPV6_MROUTE = 0x200 - RTMGRP_IPV6_PREFIX = 0x20000 - RTMGRP_IPV6_ROUTE = 0x400 - RTMGRP_LINK = 0x1 - RTMGRP_NEIGH = 0x4 - RTMGRP_NOTIFY = 0x2 - RTMGRP_TC = 0x8 - RTM_BASE = 0x10 - RTM_DELACTION = 0x31 - RTM_DELADDR = 0x15 - RTM_DELADDRLABEL = 0x49 - RTM_DELCHAIN = 0x65 - RTM_DELLINK = 0x11 - RTM_DELLINKPROP = 0x6d - RTM_DELMDB = 0x55 - RTM_DELNEIGH = 0x1d - RTM_DELNETCONF = 0x51 - RTM_DELNEXTHOP = 0x69 - RTM_DELNEXTHOPBUCKET = 0x75 - RTM_DELNSID = 0x59 - RTM_DELQDISC = 0x25 - RTM_DELROUTE = 0x19 - RTM_DELRULE = 0x21 - RTM_DELTCLASS = 0x29 - RTM_DELTFILTER = 0x2d - RTM_DELTUNNEL = 0x79 - RTM_DELVLAN = 0x71 - RTM_F_CLONED = 0x200 - RTM_F_EQUALIZE = 0x400 - RTM_F_FIB_MATCH = 0x2000 - RTM_F_LOOKUP_TABLE = 0x1000 - RTM_F_NOTIFY = 0x100 - RTM_F_OFFLOAD = 0x4000 - RTM_F_OFFLOAD_FAILED = 0x20000000 - RTM_F_PREFIX = 0x800 - RTM_F_TRAP = 0x8000 - RTM_GETACTION = 0x32 - RTM_GETADDR = 0x16 - RTM_GETADDRLABEL = 0x4a - RTM_GETANYCAST = 0x3e - RTM_GETCHAIN = 0x66 - RTM_GETDCB = 0x4e - RTM_GETLINK = 0x12 - RTM_GETLINKPROP = 0x6e - RTM_GETMDB = 0x56 - RTM_GETMULTICAST = 0x3a - RTM_GETNEIGH = 0x1e - RTM_GETNEIGHTBL = 0x42 - RTM_GETNETCONF = 0x52 - RTM_GETNEXTHOP = 0x6a - RTM_GETNEXTHOPBUCKET = 0x76 - RTM_GETNSID = 0x5a - RTM_GETQDISC = 0x26 - RTM_GETROUTE = 0x1a - RTM_GETRULE = 0x22 - RTM_GETSTATS = 0x5e - RTM_GETTCLASS = 0x2a - RTM_GETTFILTER = 0x2e - RTM_GETTUNNEL = 0x7a - RTM_GETVLAN = 0x72 - RTM_MAX = 0x7b - RTM_NEWACTION = 0x30 - RTM_NEWADDR = 0x14 - RTM_NEWADDRLABEL = 0x48 - RTM_NEWCACHEREPORT = 0x60 - RTM_NEWCHAIN = 0x64 - RTM_NEWLINK = 0x10 - RTM_NEWLINKPROP = 0x6c - RTM_NEWMDB = 0x54 - RTM_NEWNDUSEROPT = 0x44 - RTM_NEWNEIGH = 0x1c - RTM_NEWNEIGHTBL = 0x40 - RTM_NEWNETCONF = 0x50 - RTM_NEWNEXTHOP = 0x68 - RTM_NEWNEXTHOPBUCKET = 0x74 - RTM_NEWNSID = 0x58 - RTM_NEWNVLAN = 0x70 - RTM_NEWPREFIX = 0x34 - RTM_NEWQDISC = 0x24 - RTM_NEWROUTE = 0x18 - RTM_NEWRULE = 0x20 - RTM_NEWSTATS = 0x5c - RTM_NEWTCLASS = 0x28 - RTM_NEWTFILTER = 0x2c - RTM_NEWTUNNEL = 0x78 - RTM_NR_FAMILIES = 0x1b - RTM_NR_MSGTYPES = 0x6c - RTM_SETDCB = 0x4f - RTM_SETLINK = 0x13 - RTM_SETNEIGHTBL = 0x43 - RTM_SETSTATS = 0x5f - RTNH_ALIGNTO = 0x4 - RTNH_COMPARE_MASK = 0x59 - RTNH_F_DEAD = 0x1 - RTNH_F_LINKDOWN = 0x10 - RTNH_F_OFFLOAD = 0x8 - RTNH_F_ONLINK = 0x4 - RTNH_F_PERVASIVE = 0x2 - RTNH_F_TRAP = 0x40 - RTNH_F_UNRESOLVED = 0x20 - RTN_MAX = 0xb - RTPROT_BABEL = 0x2a - RTPROT_BGP = 0xba - RTPROT_BIRD = 0xc - RTPROT_BOOT = 0x3 - RTPROT_DHCP = 0x10 - RTPROT_DNROUTED = 0xd - RTPROT_EIGRP = 0xc0 - RTPROT_GATED = 0x8 - RTPROT_ISIS = 0xbb - RTPROT_KEEPALIVED = 0x12 - RTPROT_KERNEL = 0x2 - RTPROT_MROUTED = 0x11 - RTPROT_MRT = 0xa - RTPROT_NTK = 0xf - RTPROT_OPENR = 0x63 - RTPROT_OSPF = 0xbc - RTPROT_RA = 0x9 - RTPROT_REDIRECT = 0x1 - RTPROT_RIP = 0xbd - RTPROT_STATIC = 0x4 - RTPROT_UNSPEC = 0x0 - RTPROT_XORP = 0xe - RTPROT_ZEBRA = 0xb - RT_CLASS_DEFAULT = 0xfd - RT_CLASS_LOCAL = 0xff - RT_CLASS_MAIN = 0xfe - RT_CLASS_MAX = 0xff - RT_CLASS_UNSPEC = 0x0 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - RUSAGE_THREAD = 0x1 - RWF_APPEND = 0x10 - RWF_DSYNC = 0x2 - RWF_HIPRI = 0x1 - RWF_NOWAIT = 0x8 - RWF_SUPPORTED = 0x1f - RWF_SYNC = 0x4 - RWF_WRITE_LIFE_NOT_SET = 0x0 - SCM_CREDENTIALS = 0x2 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x1d - SC_LOG_FLUSH = 0x100000 - SECCOMP_MODE_DISABLED = 0x0 - SECCOMP_MODE_FILTER = 0x2 - SECCOMP_MODE_STRICT = 0x1 - SECRETMEM_MAGIC = 0x5345434d - SECURITYFS_MAGIC = 0x73636673 - SEEK_CUR = 0x1 - SEEK_DATA = 0x3 - SEEK_END = 0x2 - SEEK_HOLE = 0x4 - SEEK_MAX = 0x4 - SEEK_SET = 0x0 - SELINUX_MAGIC = 0xf97cff8c - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDDLCI = 0x8980 - SIOCADDMULTI = 0x8931 - SIOCADDRT = 0x890b - SIOCBONDCHANGEACTIVE = 0x8995 - SIOCBONDENSLAVE = 0x8990 - SIOCBONDINFOQUERY = 0x8994 - SIOCBONDRELEASE = 0x8991 - SIOCBONDSETHWADDR = 0x8992 - SIOCBONDSLAVEINFOQUERY = 0x8993 - SIOCBRADDBR = 0x89a0 - SIOCBRADDIF = 0x89a2 - SIOCBRDELBR = 0x89a1 - SIOCBRDELIF = 0x89a3 - SIOCDARP = 0x8953 - SIOCDELDLCI = 0x8981 - SIOCDELMULTI = 0x8932 - SIOCDELRT = 0x890c - SIOCDEVPRIVATE = 0x89f0 - SIOCDIFADDR = 0x8936 - SIOCDRARP = 0x8960 - SIOCETHTOOL = 0x8946 - SIOCGARP = 0x8954 - SIOCGETLINKNAME = 0x89e0 - SIOCGETNODEID = 0x89e1 - SIOCGHWTSTAMP = 0x89b1 - SIOCGIFADDR = 0x8915 - SIOCGIFBR = 0x8940 - SIOCGIFBRDADDR = 0x8919 - SIOCGIFCONF = 0x8912 - SIOCGIFCOUNT = 0x8938 - SIOCGIFDSTADDR = 0x8917 - SIOCGIFENCAP = 0x8925 - SIOCGIFFLAGS = 0x8913 - SIOCGIFHWADDR = 0x8927 - SIOCGIFINDEX = 0x8933 - SIOCGIFMAP = 0x8970 - SIOCGIFMEM = 0x891f - SIOCGIFMETRIC = 0x891d - SIOCGIFMTU = 0x8921 - SIOCGIFNAME = 0x8910 - SIOCGIFNETMASK = 0x891b - SIOCGIFPFLAGS = 0x8935 - SIOCGIFSLAVE = 0x8929 - SIOCGIFTXQLEN = 0x8942 - SIOCGIFVLAN = 0x8982 - SIOCGMIIPHY = 0x8947 - SIOCGMIIREG = 0x8948 - SIOCGPPPCSTATS = 0x89f2 - SIOCGPPPSTATS = 0x89f0 - SIOCGPPPVER = 0x89f1 - SIOCGRARP = 0x8961 - SIOCGSKNS = 0x894c - SIOCGSTAMP = 0x8906 - SIOCGSTAMPNS = 0x8907 - SIOCGSTAMPNS_OLD = 0x8907 - SIOCGSTAMP_OLD = 0x8906 - SIOCKCMATTACH = 0x89e0 - SIOCKCMCLONE = 0x89e2 - SIOCKCMUNATTACH = 0x89e1 - SIOCOUTQNSD = 0x894b - SIOCPROTOPRIVATE = 0x89e0 - SIOCRTMSG = 0x890d - SIOCSARP = 0x8955 - SIOCSHWTSTAMP = 0x89b0 - SIOCSIFADDR = 0x8916 - SIOCSIFBR = 0x8941 - SIOCSIFBRDADDR = 0x891a - SIOCSIFDSTADDR = 0x8918 - SIOCSIFENCAP = 0x8926 - SIOCSIFFLAGS = 0x8914 - SIOCSIFHWADDR = 0x8924 - SIOCSIFHWBROADCAST = 0x8937 - SIOCSIFLINK = 0x8911 - SIOCSIFMAP = 0x8971 - SIOCSIFMEM = 0x8920 - SIOCSIFMETRIC = 0x891e - SIOCSIFMTU = 0x8922 - SIOCSIFNAME = 0x8923 - SIOCSIFNETMASK = 0x891c - SIOCSIFPFLAGS = 0x8934 - SIOCSIFSLAVE = 0x8930 - SIOCSIFTXQLEN = 0x8943 - SIOCSIFVLAN = 0x8983 - SIOCSMIIREG = 0x8949 - SIOCSRARP = 0x8962 - SIOCWANDEV = 0x894a - SMACK_MAGIC = 0x43415d53 - SMART_AUTOSAVE = 0xd2 - SMART_AUTO_OFFLINE = 0xdb - SMART_DISABLE = 0xd9 - SMART_ENABLE = 0xd8 - SMART_HCYL_PASS = 0xc2 - SMART_IMMEDIATE_OFFLINE = 0xd4 - SMART_LCYL_PASS = 0x4f - SMART_READ_LOG_SECTOR = 0xd5 - SMART_READ_THRESHOLDS = 0xd1 - SMART_READ_VALUES = 0xd0 - SMART_SAVE = 0xd3 - SMART_STATUS = 0xda - SMART_WRITE_LOG_SECTOR = 0xd6 - SMART_WRITE_THRESHOLDS = 0xd7 - SMB2_SUPER_MAGIC = 0xfe534d42 - SMB_SUPER_MAGIC = 0x517b - SOCKFS_MAGIC = 0x534f434b - SOCK_BUF_LOCK_MASK = 0x3 - SOCK_DCCP = 0x6 - SOCK_IOC_TYPE = 0x89 - SOCK_PACKET = 0xa - SOCK_RAW = 0x3 - SOCK_RCVBUF_LOCK = 0x2 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_SNDBUF_LOCK = 0x1 - SOCK_TXREHASH_DEFAULT = 0xff - SOCK_TXREHASH_DISABLED = 0x0 - SOCK_TXREHASH_ENABLED = 0x1 - SOL_AAL = 0x109 - SOL_ALG = 0x117 - SOL_ATM = 0x108 - SOL_CAIF = 0x116 - SOL_CAN_BASE = 0x64 - SOL_CAN_RAW = 0x65 - SOL_DCCP = 0x10d - SOL_DECNET = 0x105 - SOL_ICMPV6 = 0x3a - SOL_IP = 0x0 - SOL_IPV6 = 0x29 - SOL_IRDA = 0x10a - SOL_IUCV = 0x115 - SOL_KCM = 0x119 - SOL_LLC = 0x10c - SOL_MCTP = 0x11d - SOL_MPTCP = 0x11c - SOL_NETBEUI = 0x10b - SOL_NETLINK = 0x10e - SOL_NFC = 0x118 - SOL_PACKET = 0x107 - SOL_PNPIPE = 0x113 - SOL_PPPOL2TP = 0x111 - SOL_RAW = 0xff - SOL_RDS = 0x114 - SOL_RXRPC = 0x110 - SOL_SMC = 0x11e - SOL_TCP = 0x6 - SOL_TIPC = 0x10f - SOL_TLS = 0x11a - SOL_X25 = 0x106 - SOL_XDP = 0x11b - SOMAXCONN = 0x1000 - SO_ATTACH_FILTER = 0x1a - SO_DEBUG = 0x1 - SO_DETACH_BPF = 0x1b - SO_DETACH_FILTER = 0x1b - SO_EE_CODE_TXTIME_INVALID_PARAM = 0x1 - SO_EE_CODE_TXTIME_MISSED = 0x2 - SO_EE_CODE_ZEROCOPY_COPIED = 0x1 - SO_EE_ORIGIN_ICMP = 0x2 - SO_EE_ORIGIN_ICMP6 = 0x3 - SO_EE_ORIGIN_LOCAL = 0x1 - SO_EE_ORIGIN_NONE = 0x0 - SO_EE_ORIGIN_TIMESTAMPING = 0x4 - SO_EE_ORIGIN_TXSTATUS = 0x4 - SO_EE_ORIGIN_TXTIME = 0x6 - SO_EE_ORIGIN_ZEROCOPY = 0x5 - SO_EE_RFC4884_FLAG_INVALID = 0x1 - SO_GET_FILTER = 0x1a - SO_NO_CHECK = 0xb - SO_PEERNAME = 0x1c - SO_PRIORITY = 0xc - SO_TIMESTAMP = 0x1d - SO_TIMESTAMP_OLD = 0x1d - SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 - SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 - SO_VM_SOCKETS_BUFFER_SIZE = 0x0 - SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 - SO_VM_SOCKETS_CONNECT_TIMEOUT_NEW = 0x8 - SO_VM_SOCKETS_CONNECT_TIMEOUT_OLD = 0x6 - SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 - SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 - SO_VM_SOCKETS_TRUSTED = 0x5 - SPLICE_F_GIFT = 0x8 - SPLICE_F_MORE = 0x4 - SPLICE_F_MOVE = 0x1 - SPLICE_F_NONBLOCK = 0x2 - SQUASHFS_MAGIC = 0x73717368 - STACK_END_MAGIC = 0x57ac6e9d - STATX_ALL = 0xfff - STATX_ATIME = 0x20 - STATX_ATTR_APPEND = 0x20 - STATX_ATTR_AUTOMOUNT = 0x1000 - STATX_ATTR_COMPRESSED = 0x4 - STATX_ATTR_DAX = 0x200000 - STATX_ATTR_ENCRYPTED = 0x800 - STATX_ATTR_IMMUTABLE = 0x10 - STATX_ATTR_MOUNT_ROOT = 0x2000 - STATX_ATTR_NODUMP = 0x40 - STATX_ATTR_VERITY = 0x100000 - STATX_BASIC_STATS = 0x7ff - STATX_BLOCKS = 0x400 - STATX_BTIME = 0x800 - STATX_CTIME = 0x80 - STATX_GID = 0x10 - STATX_INO = 0x100 - STATX_MNT_ID = 0x1000 - STATX_MODE = 0x2 - STATX_MTIME = 0x40 - STATX_NLINK = 0x4 - STATX_SIZE = 0x200 - STATX_TYPE = 0x1 - STATX_UID = 0x8 - STATX__RESERVED = 0x80000000 - SYNC_FILE_RANGE_WAIT_AFTER = 0x4 - SYNC_FILE_RANGE_WAIT_BEFORE = 0x1 - SYNC_FILE_RANGE_WRITE = 0x2 - SYNC_FILE_RANGE_WRITE_AND_WAIT = 0x7 - SYSFS_MAGIC = 0x62656572 - S_BLKSIZE = 0x200 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFLNK = 0xa000 - S_IFMT = 0xf000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXGRP = 0x8 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - TAB0 = 0x0 - TASKSTATS_CMD_ATTR_MAX = 0x4 - TASKSTATS_CMD_MAX = 0x2 - TASKSTATS_GENL_NAME = "TASKSTATS" - TASKSTATS_GENL_VERSION = 0x1 - TASKSTATS_TYPE_MAX = 0x6 - TASKSTATS_VERSION = 0xd - TCIFLUSH = 0x0 - TCIOFF = 0x2 - TCIOFLUSH = 0x2 - TCION = 0x3 - TCOFLUSH = 0x1 - TCOOFF = 0x0 - TCOON = 0x1 - TCPOPT_EOL = 0x0 - TCPOPT_MAXSEG = 0x2 - TCPOPT_NOP = 0x1 - TCPOPT_SACK = 0x5 - TCPOPT_SACK_PERMITTED = 0x4 - TCPOPT_TIMESTAMP = 0x8 - TCPOPT_TSTAMP_HDR = 0x101080a - TCPOPT_WINDOW = 0x3 - TCP_CC_INFO = 0x1a - TCP_CM_INQ = 0x24 - TCP_CONGESTION = 0xd - TCP_COOKIE_IN_ALWAYS = 0x1 - TCP_COOKIE_MAX = 0x10 - TCP_COOKIE_MIN = 0x8 - TCP_COOKIE_OUT_NEVER = 0x2 - TCP_COOKIE_PAIR_SIZE = 0x20 - TCP_COOKIE_TRANSACTIONS = 0xf - TCP_CORK = 0x3 - TCP_DEFER_ACCEPT = 0x9 - TCP_FASTOPEN = 0x17 - TCP_FASTOPEN_CONNECT = 0x1e - TCP_FASTOPEN_KEY = 0x21 - TCP_FASTOPEN_NO_COOKIE = 0x22 - TCP_INFO = 0xb - TCP_INQ = 0x24 - TCP_KEEPCNT = 0x6 - TCP_KEEPIDLE = 0x4 - TCP_KEEPINTVL = 0x5 - TCP_LINGER2 = 0x8 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_WINSHIFT = 0xe - TCP_MD5SIG = 0xe - TCP_MD5SIG_EXT = 0x20 - TCP_MD5SIG_FLAG_PREFIX = 0x1 - TCP_MD5SIG_MAXKEYLEN = 0x50 - TCP_MSS = 0x200 - TCP_MSS_DEFAULT = 0x218 - TCP_MSS_DESIRED = 0x4c4 - TCP_NODELAY = 0x1 - TCP_NOTSENT_LOWAT = 0x19 - TCP_QUEUE_SEQ = 0x15 - TCP_QUICKACK = 0xc - TCP_REPAIR = 0x13 - TCP_REPAIR_OFF = 0x0 - TCP_REPAIR_OFF_NO_WP = -0x1 - TCP_REPAIR_ON = 0x1 - TCP_REPAIR_OPTIONS = 0x16 - TCP_REPAIR_QUEUE = 0x14 - TCP_REPAIR_WINDOW = 0x1d - TCP_SAVED_SYN = 0x1c - TCP_SAVE_SYN = 0x1b - TCP_SYNCNT = 0x7 - TCP_S_DATA_IN = 0x4 - TCP_S_DATA_OUT = 0x8 - TCP_THIN_DUPACK = 0x11 - TCP_THIN_LINEAR_TIMEOUTS = 0x10 - TCP_TIMESTAMP = 0x18 - 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 - TFD_TIMER_CANCEL_ON_SET = 0x2 - TIMER_ABSTIME = 0x1 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RTS = 0x4 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIPC_ADDR_ID = 0x3 - TIPC_ADDR_MCAST = 0x1 - TIPC_ADDR_NAME = 0x2 - TIPC_ADDR_NAMESEQ = 0x1 - TIPC_AEAD_ALG_NAME = 0x20 - TIPC_AEAD_KEYLEN_MAX = 0x24 - TIPC_AEAD_KEYLEN_MIN = 0x14 - TIPC_AEAD_KEY_SIZE_MAX = 0x48 - TIPC_CFG_SRV = 0x0 - TIPC_CLUSTER_BITS = 0xc - TIPC_CLUSTER_MASK = 0xfff000 - TIPC_CLUSTER_OFFSET = 0xc - TIPC_CLUSTER_SIZE = 0xfff - TIPC_CONN_SHUTDOWN = 0x5 - TIPC_CONN_TIMEOUT = 0x82 - TIPC_CRITICAL_IMPORTANCE = 0x3 - TIPC_DESTNAME = 0x3 - TIPC_DEST_DROPPABLE = 0x81 - TIPC_ERRINFO = 0x1 - TIPC_ERR_NO_NAME = 0x1 - TIPC_ERR_NO_NODE = 0x3 - TIPC_ERR_NO_PORT = 0x2 - TIPC_ERR_OVERLOAD = 0x4 - TIPC_GROUP_JOIN = 0x87 - TIPC_GROUP_LEAVE = 0x88 - TIPC_GROUP_LOOPBACK = 0x1 - TIPC_GROUP_MEMBER_EVTS = 0x2 - TIPC_HIGH_IMPORTANCE = 0x2 - TIPC_IMPORTANCE = 0x7f - TIPC_LINK_STATE = 0x2 - TIPC_LOW_IMPORTANCE = 0x0 - TIPC_MAX_BEARER_NAME = 0x20 - TIPC_MAX_IF_NAME = 0x10 - TIPC_MAX_LINK_NAME = 0x44 - TIPC_MAX_MEDIA_NAME = 0x10 - TIPC_MAX_USER_MSG_SIZE = 0x101d0 - TIPC_MCAST_BROADCAST = 0x85 - TIPC_MCAST_REPLICAST = 0x86 - TIPC_MEDIUM_IMPORTANCE = 0x1 - TIPC_NODEID_LEN = 0x10 - TIPC_NODELAY = 0x8a - TIPC_NODE_BITS = 0xc - TIPC_NODE_MASK = 0xfff - TIPC_NODE_OFFSET = 0x0 - TIPC_NODE_RECVQ_DEPTH = 0x83 - TIPC_NODE_SIZE = 0xfff - TIPC_NODE_STATE = 0x0 - TIPC_OK = 0x0 - TIPC_PUBLISHED = 0x1 - TIPC_REKEYING_NOW = 0xffffffff - TIPC_RESERVED_TYPES = 0x40 - TIPC_RETDATA = 0x2 - TIPC_SERVICE_ADDR = 0x2 - TIPC_SERVICE_RANGE = 0x1 - TIPC_SOCKET_ADDR = 0x3 - TIPC_SOCK_RECVQ_DEPTH = 0x84 - TIPC_SOCK_RECVQ_USED = 0x89 - TIPC_SRC_DROPPABLE = 0x80 - TIPC_SUBSCR_TIMEOUT = 0x3 - TIPC_SUB_CANCEL = 0x4 - TIPC_SUB_PORTS = 0x1 - TIPC_SUB_SERVICE = 0x2 - TIPC_TOP_SRV = 0x1 - TIPC_WAIT_FOREVER = 0xffffffff - TIPC_WITHDRAWN = 0x2 - TIPC_ZONE_BITS = 0x8 - TIPC_ZONE_CLUSTER_MASK = 0xfffff000 - TIPC_ZONE_MASK = 0xff000000 - TIPC_ZONE_OFFSET = 0x18 - TIPC_ZONE_SCOPE = 0x1 - TIPC_ZONE_SIZE = 0xff - TMPFS_MAGIC = 0x1021994 - TPACKET_ALIGNMENT = 0x10 - TPACKET_HDRLEN = 0x34 - TP_STATUS_AVAILABLE = 0x0 - TP_STATUS_BLK_TMO = 0x20 - TP_STATUS_COPY = 0x2 - TP_STATUS_CSUMNOTREADY = 0x8 - TP_STATUS_CSUM_VALID = 0x80 - TP_STATUS_KERNEL = 0x0 - TP_STATUS_LOSING = 0x4 - TP_STATUS_SENDING = 0x2 - TP_STATUS_SEND_REQUEST = 0x1 - TP_STATUS_TS_RAW_HARDWARE = 0x80000000 - TP_STATUS_TS_SOFTWARE = 0x20000000 - TP_STATUS_TS_SYS_HARDWARE = 0x40000000 - TP_STATUS_USER = 0x1 - TP_STATUS_VLAN_TPID_VALID = 0x40 - TP_STATUS_VLAN_VALID = 0x10 - TP_STATUS_WRONG_FORMAT = 0x4 - TRACEFS_MAGIC = 0x74726163 - TS_COMM_LEN = 0x20 - UDF_SUPER_MAGIC = 0x15013346 - UMOUNT_NOFOLLOW = 0x8 - USBDEVICE_SUPER_MAGIC = 0x9fa2 - UTIME_NOW = 0x3fffffff - UTIME_OMIT = 0x3ffffffe - V9FS_MAGIC = 0x1021997 - VERASE = 0x2 - VINTR = 0x0 - VKILL = 0x3 - VLNEXT = 0xf - VMADDR_CID_ANY = 0xffffffff - VMADDR_CID_HOST = 0x2 - VMADDR_CID_HYPERVISOR = 0x0 - VMADDR_CID_LOCAL = 0x1 - VMADDR_FLAG_TO_HOST = 0x1 - VMADDR_PORT_ANY = 0xffffffff - VM_SOCKETS_INVALID_VERSION = 0xffffffff - VQUIT = 0x1 - VT0 = 0x0 - WAKE_MAGIC = 0x20 - WALL = 0x40000000 - WCLONE = 0x80000000 - WCONTINUED = 0x8 - WDIOC_SETPRETIMEOUT = 0xc0045708 - WDIOC_SETTIMEOUT = 0xc0045706 - WDIOF_ALARMONLY = 0x400 - WDIOF_CARDRESET = 0x20 - WDIOF_EXTERN1 = 0x4 - WDIOF_EXTERN2 = 0x8 - WDIOF_FANFAULT = 0x2 - WDIOF_KEEPALIVEPING = 0x8000 - WDIOF_MAGICCLOSE = 0x100 - WDIOF_OVERHEAT = 0x1 - WDIOF_POWEROVER = 0x40 - WDIOF_POWERUNDER = 0x10 - WDIOF_PRETIMEOUT = 0x200 - WDIOF_SETTIMEOUT = 0x80 - WDIOF_UNKNOWN = -0x1 - WDIOS_DISABLECARD = 0x1 - WDIOS_ENABLECARD = 0x2 - WDIOS_TEMPPANIC = 0x4 - WDIOS_UNKNOWN = -0x1 - WEXITED = 0x4 - WGALLOWEDIP_A_MAX = 0x3 - WGDEVICE_A_MAX = 0x8 - WGPEER_A_MAX = 0xa - WG_CMD_MAX = 0x1 - WG_GENL_NAME = "wireguard" - WG_GENL_VERSION = 0x1 - WG_KEY_LEN = 0x20 - WIN_ACKMEDIACHANGE = 0xdb - WIN_CHECKPOWERMODE1 = 0xe5 - WIN_CHECKPOWERMODE2 = 0x98 - WIN_DEVICE_RESET = 0x8 - WIN_DIAGNOSE = 0x90 - WIN_DOORLOCK = 0xde - WIN_DOORUNLOCK = 0xdf - WIN_DOWNLOAD_MICROCODE = 0x92 - WIN_FLUSH_CACHE = 0xe7 - WIN_FLUSH_CACHE_EXT = 0xea - WIN_FORMAT = 0x50 - WIN_GETMEDIASTATUS = 0xda - WIN_IDENTIFY = 0xec - WIN_IDENTIFY_DMA = 0xee - WIN_IDLEIMMEDIATE = 0xe1 - WIN_INIT = 0x60 - WIN_MEDIAEJECT = 0xed - WIN_MULTREAD = 0xc4 - WIN_MULTREAD_EXT = 0x29 - WIN_MULTWRITE = 0xc5 - WIN_MULTWRITE_EXT = 0x39 - WIN_NOP = 0x0 - WIN_PACKETCMD = 0xa0 - WIN_PIDENTIFY = 0xa1 - WIN_POSTBOOT = 0xdc - WIN_PREBOOT = 0xdd - WIN_QUEUED_SERVICE = 0xa2 - WIN_READ = 0x20 - WIN_READDMA = 0xc8 - WIN_READDMA_EXT = 0x25 - WIN_READDMA_ONCE = 0xc9 - WIN_READDMA_QUEUED = 0xc7 - WIN_READDMA_QUEUED_EXT = 0x26 - WIN_READ_BUFFER = 0xe4 - WIN_READ_EXT = 0x24 - WIN_READ_LONG = 0x22 - WIN_READ_LONG_ONCE = 0x23 - WIN_READ_NATIVE_MAX = 0xf8 - WIN_READ_NATIVE_MAX_EXT = 0x27 - WIN_READ_ONCE = 0x21 - WIN_RECAL = 0x10 - WIN_RESTORE = 0x10 - WIN_SECURITY_DISABLE = 0xf6 - WIN_SECURITY_ERASE_PREPARE = 0xf3 - WIN_SECURITY_ERASE_UNIT = 0xf4 - WIN_SECURITY_FREEZE_LOCK = 0xf5 - WIN_SECURITY_SET_PASS = 0xf1 - WIN_SECURITY_UNLOCK = 0xf2 - WIN_SEEK = 0x70 - WIN_SETFEATURES = 0xef - WIN_SETIDLE1 = 0xe3 - WIN_SETIDLE2 = 0x97 - WIN_SETMULT = 0xc6 - WIN_SET_MAX = 0xf9 - WIN_SET_MAX_EXT = 0x37 - WIN_SLEEPNOW1 = 0xe6 - WIN_SLEEPNOW2 = 0x99 - WIN_SMART = 0xb0 - WIN_SPECIFY = 0x91 - WIN_SRST = 0x8 - WIN_STANDBY = 0xe2 - WIN_STANDBY2 = 0x96 - WIN_STANDBYNOW1 = 0xe0 - WIN_STANDBYNOW2 = 0x94 - WIN_VERIFY = 0x40 - WIN_VERIFY_EXT = 0x42 - WIN_VERIFY_ONCE = 0x41 - WIN_WRITE = 0x30 - WIN_WRITEDMA = 0xca - WIN_WRITEDMA_EXT = 0x35 - WIN_WRITEDMA_ONCE = 0xcb - WIN_WRITEDMA_QUEUED = 0xcc - WIN_WRITEDMA_QUEUED_EXT = 0x36 - WIN_WRITE_BUFFER = 0xe8 - WIN_WRITE_EXT = 0x34 - WIN_WRITE_LONG = 0x32 - WIN_WRITE_LONG_ONCE = 0x33 - WIN_WRITE_ONCE = 0x31 - WIN_WRITE_SAME = 0xe9 - WIN_WRITE_VERIFY = 0x3c - WNOHANG = 0x1 - WNOTHREAD = 0x20000000 - WNOWAIT = 0x1000000 - WSTOPPED = 0x2 - WUNTRACED = 0x2 - XATTR_CREATE = 0x1 - XATTR_REPLACE = 0x2 - XDP_COPY = 0x2 - XDP_FLAGS_DRV_MODE = 0x4 - XDP_FLAGS_HW_MODE = 0x8 - XDP_FLAGS_MASK = 0x1f - XDP_FLAGS_MODES = 0xe - XDP_FLAGS_REPLACE = 0x10 - XDP_FLAGS_SKB_MODE = 0x2 - XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1 - XDP_MMAP_OFFSETS = 0x1 - XDP_OPTIONS = 0x8 - XDP_OPTIONS_ZEROCOPY = 0x1 - XDP_PACKET_HEADROOM = 0x100 - XDP_PGOFF_RX_RING = 0x0 - XDP_PGOFF_TX_RING = 0x80000000 - XDP_RING_NEED_WAKEUP = 0x1 - XDP_RX_RING = 0x2 - XDP_SHARED_UMEM = 0x1 - XDP_STATISTICS = 0x7 - XDP_TX_RING = 0x3 - XDP_UMEM_COMPLETION_RING = 0x6 - XDP_UMEM_FILL_RING = 0x5 - XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000 - XDP_UMEM_PGOFF_FILL_RING = 0x100000000 - XDP_UMEM_REG = 0x4 - XDP_UMEM_UNALIGNED_CHUNK_FLAG = 0x1 - XDP_USE_NEED_WAKEUP = 0x8 - XDP_ZEROCOPY = 0x4 - XENFS_SUPER_MAGIC = 0xabba1974 - XFS_SUPER_MAGIC = 0x58465342 - Z3FOLD_MAGIC = 0x33 - ZONEFS_MAGIC = 0x5a4f4653 - ZSMALLOC_MAGIC = 0x58295829 - _HIDIOCGRAWNAME_LEN = 0x80 - _HIDIOCGRAWPHYS_LEN = 0x40 - _HIDIOCGRAWUNIQ_LEN = 0x40 -) - -// Errors -const ( - E2BIG = syscall.Errno(0x7) - EACCES = syscall.Errno(0xd) - EAGAIN = syscall.Errno(0xb) - EBADF = syscall.Errno(0x9) - EBUSY = syscall.Errno(0x10) - ECHILD = syscall.Errno(0xa) - EDOM = syscall.Errno(0x21) - EEXIST = syscall.Errno(0x11) - EFAULT = syscall.Errno(0xe) - EFBIG = syscall.Errno(0x1b) - EINTR = syscall.Errno(0x4) - EINVAL = syscall.Errno(0x16) - EIO = syscall.Errno(0x5) - EISDIR = syscall.Errno(0x15) - EMFILE = syscall.Errno(0x18) - EMLINK = syscall.Errno(0x1f) - ENFILE = syscall.Errno(0x17) - ENODEV = syscall.Errno(0x13) - ENOENT = syscall.Errno(0x2) - ENOEXEC = syscall.Errno(0x8) - ENOMEM = syscall.Errno(0xc) - ENOSPC = syscall.Errno(0x1c) - ENOTBLK = syscall.Errno(0xf) - ENOTDIR = syscall.Errno(0x14) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EPERM = syscall.Errno(0x1) - EPIPE = syscall.Errno(0x20) - ERANGE = syscall.Errno(0x22) - EROFS = syscall.Errno(0x1e) - ESPIPE = syscall.Errno(0x1d) - ESRCH = syscall.Errno(0x3) - ETXTBSY = syscall.Errno(0x1a) - EWOULDBLOCK = syscall.Errno(0xb) - EXDEV = syscall.Errno(0x12) -) - -// Signals -const ( - SIGABRT = syscall.Signal(0x6) - SIGALRM = syscall.Signal(0xe) - SIGFPE = syscall.Signal(0x8) - SIGHUP = syscall.Signal(0x1) - SIGILL = syscall.Signal(0x4) - SIGINT = syscall.Signal(0x2) - SIGIOT = syscall.Signal(0x6) - SIGKILL = syscall.Signal(0x9) - SIGPIPE = syscall.Signal(0xd) - SIGQUIT = syscall.Signal(0x3) - SIGSEGV = syscall.Signal(0xb) - SIGTERM = syscall.Signal(0xf) - SIGTRAP = syscall.Signal(0x5) -) diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go deleted file mode 100644 index 36c0dfc..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ /dev/null @@ -1,828 +0,0 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/386/include -m32 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build 386 && linux -// +build 386,linux - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/386/include -m32 _const.go - -package unix - -import "syscall" - -const ( - B1000000 = 0x1008 - B115200 = 0x1002 - B1152000 = 0x1009 - B1500000 = 0x100a - B2000000 = 0x100b - B230400 = 0x1003 - B2500000 = 0x100c - B3000000 = 0x100d - B3500000 = 0x100e - B4000000 = 0x100f - B460800 = 0x1004 - B500000 = 0x1005 - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 - BLKBSZGET = 0x80041270 - BLKBSZSET = 0x40041271 - BLKFLSBUF = 0x1261 - BLKFRAGET = 0x1265 - BLKFRASET = 0x1264 - BLKGETSIZE = 0x1260 - BLKGETSIZE64 = 0x80041272 - BLKPBSZGET = 0x127b - BLKRAGET = 0x1263 - BLKRASET = 0x1262 - BLKROGET = 0x125e - BLKROSET = 0x125d - BLKRRPART = 0x125f - BLKSECTGET = 0x1267 - BLKSECTSET = 0x1266 - BLKSSZGET = 0x1268 - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 - CBAUD = 0x100f - CBAUDEX = 0x1000 - CIBAUD = 0x100f0000 - CLOCAL = 0x800 - CR1 = 0x200 - CR2 = 0x400 - CR3 = 0x600 - CRDLY = 0x600 - CREAD = 0x80 - CS6 = 0x10 - CS7 = 0x20 - CS8 = 0x30 - CSIZE = 0x30 - CSTOPB = 0x40 - ECCGETLAYOUT = 0x81484d11 - ECCGETSTATS = 0x80104d12 - ECHOCTL = 0x200 - ECHOE = 0x10 - ECHOK = 0x20 - ECHOKE = 0x800 - ECHONL = 0x40 - ECHOPRT = 0x400 - EFD_CLOEXEC = 0x80000 - EFD_NONBLOCK = 0x800 - EPOLL_CLOEXEC = 0x80000 - EXTPROC = 0x10000 - FF1 = 0x8000 - FFDLY = 0x8000 - FICLONE = 0x40049409 - FICLONERANGE = 0x4020940d - FLUSHO = 0x1000 - FP_XSTATE_MAGIC2 = 0x46505845 - FS_IOC_ENABLE_VERITY = 0x40806685 - FS_IOC_GETFLAGS = 0x80046601 - FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b - FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 - FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 - FS_IOC_SETFLAGS = 0x40046602 - FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 - F_GETLK = 0xc - F_GETLK64 = 0xc - F_GETOWN = 0x9 - F_RDLCK = 0x0 - F_SETLK = 0xd - F_SETLK64 = 0xd - F_SETLKW = 0xe - F_SETLKW64 = 0xe - F_SETOWN = 0x8 - F_UNLCK = 0x2 - F_WRLCK = 0x1 - HIDIOCGRAWINFO = 0x80084803 - HIDIOCGRDESC = 0x90044802 - HIDIOCGRDESCSIZE = 0x80044801 - HUPCL = 0x400 - ICANON = 0x2 - IEXTEN = 0x8000 - IN_CLOEXEC = 0x80000 - IN_NONBLOCK = 0x800 - IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 - ISIG = 0x1 - IUCLC = 0x200 - IXOFF = 0x1000 - IXON = 0x400 - MAP_32BIT = 0x40 - MAP_ANON = 0x20 - MAP_ANONYMOUS = 0x20 - MAP_DENYWRITE = 0x800 - MAP_EXECUTABLE = 0x1000 - MAP_GROWSDOWN = 0x100 - MAP_HUGETLB = 0x40000 - MAP_LOCKED = 0x2000 - MAP_NONBLOCK = 0x10000 - MAP_NORESERVE = 0x4000 - MAP_POPULATE = 0x8000 - MAP_STACK = 0x20000 - MAP_SYNC = 0x80000 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MCL_ONFAULT = 0x4 - MEMERASE = 0x40084d02 - MEMERASE64 = 0x40104d14 - MEMGETBADBLOCK = 0x40084d0b - MEMGETINFO = 0x80204d01 - MEMGETOOBSEL = 0x80c84d0a - MEMGETREGIONCOUNT = 0x80044d07 - MEMISLOCKED = 0x80084d17 - MEMLOCK = 0x40084d05 - MEMREADOOB = 0xc00c4d04 - MEMSETBADBLOCK = 0x40084d0c - MEMUNLOCK = 0x40084d06 - MEMWRITEOOB = 0xc00c4d03 - MTDFILEMODE = 0x4d13 - NFDBITS = 0x20 - NLDLY = 0x100 - NOFLSH = 0x80 - NS_GET_NSTYPE = 0xb703 - NS_GET_OWNER_UID = 0xb704 - NS_GET_PARENT = 0xb702 - NS_GET_USERNS = 0xb701 - OLCUC = 0x2 - ONLCR = 0x4 - OTPERASE = 0x400c4d19 - OTPGETREGIONCOUNT = 0x40044d0e - OTPGETREGIONINFO = 0x400c4d0f - OTPLOCK = 0x800c4d10 - OTPSELECT = 0x80044d0d - O_APPEND = 0x400 - O_ASYNC = 0x2000 - O_CLOEXEC = 0x80000 - O_CREAT = 0x40 - O_DIRECT = 0x4000 - O_DIRECTORY = 0x10000 - O_DSYNC = 0x1000 - O_EXCL = 0x80 - O_FSYNC = 0x101000 - O_LARGEFILE = 0x8000 - O_NDELAY = 0x800 - O_NOATIME = 0x40000 - O_NOCTTY = 0x100 - O_NOFOLLOW = 0x20000 - O_NONBLOCK = 0x800 - O_PATH = 0x200000 - O_RSYNC = 0x101000 - O_SYNC = 0x101000 - O_TMPFILE = 0x410000 - O_TRUNC = 0x200 - PARENB = 0x100 - PARODD = 0x200 - PENDIN = 0x4000 - PERF_EVENT_IOC_DISABLE = 0x2401 - PERF_EVENT_IOC_ENABLE = 0x2400 - PERF_EVENT_IOC_ID = 0x80042407 - PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4004240b - PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 - PERF_EVENT_IOC_PERIOD = 0x40082404 - PERF_EVENT_IOC_QUERY_BPF = 0xc004240a - PERF_EVENT_IOC_REFRESH = 0x2402 - PERF_EVENT_IOC_RESET = 0x2403 - PERF_EVENT_IOC_SET_BPF = 0x40042408 - PERF_EVENT_IOC_SET_FILTER = 0x40042406 - PERF_EVENT_IOC_SET_OUTPUT = 0x2405 - PPPIOCATTACH = 0x4004743d - PPPIOCATTCHAN = 0x40047438 - PPPIOCBRIDGECHAN = 0x40047435 - PPPIOCCONNECT = 0x4004743a - PPPIOCDETACH = 0x4004743c - PPPIOCDISCONN = 0x7439 - PPPIOCGASYNCMAP = 0x80047458 - PPPIOCGCHAN = 0x80047437 - PPPIOCGDEBUG = 0x80047441 - PPPIOCGFLAGS = 0x8004745a - PPPIOCGIDLE = 0x8008743f - PPPIOCGIDLE32 = 0x8008743f - PPPIOCGIDLE64 = 0x8010743f - PPPIOCGL2TPSTATS = 0x80487436 - PPPIOCGMRU = 0x80047453 - PPPIOCGRASYNCMAP = 0x80047455 - PPPIOCGUNIT = 0x80047456 - PPPIOCGXASYNCMAP = 0x80207450 - PPPIOCSACTIVE = 0x40087446 - PPPIOCSASYNCMAP = 0x40047457 - PPPIOCSCOMPRESS = 0x400c744d - PPPIOCSDEBUG = 0x40047440 - PPPIOCSFLAGS = 0x40047459 - PPPIOCSMAXCID = 0x40047451 - PPPIOCSMRRU = 0x4004743b - PPPIOCSMRU = 0x40047452 - PPPIOCSNPMODE = 0x4008744b - PPPIOCSPASS = 0x40087447 - PPPIOCSRASYNCMAP = 0x40047454 - PPPIOCSXASYNCMAP = 0x4020744f - PPPIOCUNBRIDGECHAN = 0x7434 - PPPIOCXFERUNIT = 0x744e - PR_SET_PTRACER_ANY = 0xffffffff - PTRACE_GETFPREGS = 0xe - PTRACE_GETFPXREGS = 0x12 - PTRACE_GET_THREAD_AREA = 0x19 - PTRACE_OLDSETOPTIONS = 0x15 - PTRACE_SETFPREGS = 0xf - PTRACE_SETFPXREGS = 0x13 - PTRACE_SET_THREAD_AREA = 0x1a - PTRACE_SINGLEBLOCK = 0x21 - PTRACE_SYSEMU = 0x1f - PTRACE_SYSEMU_SINGLESTEP = 0x20 - RLIMIT_AS = 0x9 - RLIMIT_MEMLOCK = 0x8 - RLIMIT_NOFILE = 0x7 - RLIMIT_NPROC = 0x6 - RLIMIT_RSS = 0x5 - RNDADDENTROPY = 0x40085203 - RNDADDTOENTCNT = 0x40045201 - RNDCLEARPOOL = 0x5206 - RNDGETENTCNT = 0x80045200 - RNDGETPOOL = 0x80085202 - RNDRESEEDCRNG = 0x5207 - RNDZAPENTCNT = 0x5204 - RTC_AIE_OFF = 0x7002 - RTC_AIE_ON = 0x7001 - RTC_ALM_READ = 0x80247008 - RTC_ALM_SET = 0x40247007 - RTC_EPOCH_READ = 0x8004700d - RTC_EPOCH_SET = 0x4004700e - RTC_IRQP_READ = 0x8004700b - RTC_IRQP_SET = 0x4004700c - RTC_PARAM_GET = 0x40187013 - RTC_PARAM_SET = 0x40187014 - RTC_PIE_OFF = 0x7006 - RTC_PIE_ON = 0x7005 - RTC_PLL_GET = 0x801c7011 - RTC_PLL_SET = 0x401c7012 - RTC_RD_TIME = 0x80247009 - RTC_SET_TIME = 0x4024700a - RTC_UIE_OFF = 0x7004 - RTC_UIE_ON = 0x7003 - RTC_VL_CLR = 0x7014 - RTC_VL_READ = 0x80047013 - RTC_WIE_OFF = 0x7010 - RTC_WIE_ON = 0x700f - RTC_WKALM_RD = 0x80287010 - RTC_WKALM_SET = 0x4028700f - SCM_TIMESTAMPING = 0x25 - SCM_TIMESTAMPING_OPT_STATS = 0x36 - SCM_TIMESTAMPING_PKTINFO = 0x3a - SCM_TIMESTAMPNS = 0x23 - SCM_TXTIME = 0x3d - SCM_WIFI_STATUS = 0x29 - SFD_CLOEXEC = 0x80000 - SFD_NONBLOCK = 0x800 - SIOCATMARK = 0x8905 - SIOCGPGRP = 0x8904 - SIOCGSTAMPNS_NEW = 0x80108907 - SIOCGSTAMP_NEW = 0x80108906 - SIOCINQ = 0x541b - SIOCOUTQ = 0x5411 - SIOCSPGRP = 0x8902 - SOCK_CLOEXEC = 0x80000 - SOCK_DGRAM = 0x2 - SOCK_NONBLOCK = 0x800 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0x1 - SO_ACCEPTCONN = 0x1e - SO_ATTACH_BPF = 0x32 - SO_ATTACH_REUSEPORT_CBPF = 0x33 - SO_ATTACH_REUSEPORT_EBPF = 0x34 - SO_BINDTODEVICE = 0x19 - SO_BINDTOIFINDEX = 0x3e - SO_BPF_EXTENSIONS = 0x30 - SO_BROADCAST = 0x6 - SO_BSDCOMPAT = 0xe - SO_BUF_LOCK = 0x48 - SO_BUSY_POLL = 0x2e - SO_BUSY_POLL_BUDGET = 0x46 - SO_CNX_ADVICE = 0x35 - SO_COOKIE = 0x39 - SO_DETACH_REUSEPORT_BPF = 0x44 - SO_DOMAIN = 0x27 - SO_DONTROUTE = 0x5 - SO_ERROR = 0x4 - SO_INCOMING_CPU = 0x31 - SO_INCOMING_NAPI_ID = 0x38 - SO_KEEPALIVE = 0x9 - SO_LINGER = 0xd - SO_LOCK_FILTER = 0x2c - SO_MARK = 0x24 - SO_MAX_PACING_RATE = 0x2f - SO_MEMINFO = 0x37 - SO_NETNS_COOKIE = 0x47 - SO_NOFCS = 0x2b - SO_OOBINLINE = 0xa - SO_PASSCRED = 0x10 - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x11 - SO_PEERGROUPS = 0x3b - SO_PEERSEC = 0x1f - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x26 - SO_RCVBUF = 0x8 - SO_RCVBUFFORCE = 0x21 - SO_RCVLOWAT = 0x12 - SO_RCVMARK = 0x4b - SO_RCVTIMEO = 0x14 - SO_RCVTIMEO_NEW = 0x42 - SO_RCVTIMEO_OLD = 0x14 - SO_RESERVE_MEM = 0x49 - SO_REUSEADDR = 0x2 - SO_REUSEPORT = 0xf - SO_RXQ_OVFL = 0x28 - SO_SECURITY_AUTHENTICATION = 0x16 - SO_SECURITY_ENCRYPTION_NETWORK = 0x18 - SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 - SO_SELECT_ERR_QUEUE = 0x2d - SO_SNDBUF = 0x7 - SO_SNDBUFFORCE = 0x20 - SO_SNDLOWAT = 0x13 - SO_SNDTIMEO = 0x15 - SO_SNDTIMEO_NEW = 0x43 - SO_SNDTIMEO_OLD = 0x15 - SO_TIMESTAMPING = 0x25 - SO_TIMESTAMPING_NEW = 0x41 - SO_TIMESTAMPING_OLD = 0x25 - SO_TIMESTAMPNS = 0x23 - SO_TIMESTAMPNS_NEW = 0x40 - SO_TIMESTAMPNS_OLD = 0x23 - SO_TIMESTAMP_NEW = 0x3f - SO_TXREHASH = 0x4a - SO_TXTIME = 0x3d - SO_TYPE = 0x3 - SO_WIFI_STATUS = 0x29 - SO_ZEROCOPY = 0x3c - TAB1 = 0x800 - TAB2 = 0x1000 - TAB3 = 0x1800 - TABDLY = 0x1800 - TCFLSH = 0x540b - TCGETA = 0x5405 - TCGETS = 0x5401 - TCGETS2 = 0x802c542a - TCGETX = 0x5432 - TCSAFLUSH = 0x2 - TCSBRK = 0x5409 - TCSBRKP = 0x5425 - TCSETA = 0x5406 - TCSETAF = 0x5408 - TCSETAW = 0x5407 - TCSETS = 0x5402 - TCSETS2 = 0x402c542b - TCSETSF = 0x5404 - TCSETSF2 = 0x402c542d - TCSETSW = 0x5403 - TCSETSW2 = 0x402c542c - TCSETX = 0x5433 - TCSETXF = 0x5434 - TCSETXW = 0x5435 - TCXONC = 0x540a - TFD_CLOEXEC = 0x80000 - TFD_NONBLOCK = 0x800 - TIOCCBRK = 0x5428 - TIOCCONS = 0x541d - TIOCEXCL = 0x540c - TIOCGDEV = 0x80045432 - TIOCGETD = 0x5424 - TIOCGEXCL = 0x80045440 - TIOCGICOUNT = 0x545d - TIOCGISO7816 = 0x80285442 - TIOCGLCKTRMIOS = 0x5456 - TIOCGPGRP = 0x540f - TIOCGPKT = 0x80045438 - TIOCGPTLCK = 0x80045439 - TIOCGPTN = 0x80045430 - TIOCGPTPEER = 0x5441 - TIOCGRS485 = 0x542e - TIOCGSERIAL = 0x541e - TIOCGSID = 0x5429 - TIOCGSOFTCAR = 0x5419 - TIOCGWINSZ = 0x5413 - TIOCINQ = 0x541b - TIOCLINUX = 0x541c - TIOCMBIC = 0x5417 - TIOCMBIS = 0x5416 - TIOCMGET = 0x5415 - TIOCMIWAIT = 0x545c - TIOCMSET = 0x5418 - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x5422 - TIOCNXCL = 0x540d - TIOCOUTQ = 0x5411 - TIOCPKT = 0x5420 - TIOCSBRK = 0x5427 - TIOCSCTTY = 0x540e - TIOCSERCONFIG = 0x5453 - TIOCSERGETLSR = 0x5459 - TIOCSERGETMULTI = 0x545a - TIOCSERGSTRUCT = 0x5458 - TIOCSERGWILD = 0x5454 - TIOCSERSETMULTI = 0x545b - TIOCSERSWILD = 0x5455 - TIOCSER_TEMT = 0x1 - TIOCSETD = 0x5423 - TIOCSIG = 0x40045436 - TIOCSISO7816 = 0xc0285443 - TIOCSLCKTRMIOS = 0x5457 - TIOCSPGRP = 0x5410 - TIOCSPTLCK = 0x40045431 - TIOCSRS485 = 0x542f - TIOCSSERIAL = 0x541f - TIOCSSOFTCAR = 0x541a - TIOCSTI = 0x5412 - TIOCSWINSZ = 0x5414 - TIOCVHANGUP = 0x5437 - TOSTOP = 0x100 - TUNATTACHFILTER = 0x400854d5 - TUNDETACHFILTER = 0x400854d6 - TUNGETDEVNETNS = 0x54e3 - TUNGETFEATURES = 0x800454cf - TUNGETFILTER = 0x800854db - TUNGETIFF = 0x800454d2 - TUNGETSNDBUF = 0x800454d3 - TUNGETVNETBE = 0x800454df - TUNGETVNETHDRSZ = 0x800454d7 - TUNGETVNETLE = 0x800454dd - TUNSETCARRIER = 0x400454e2 - TUNSETDEBUG = 0x400454c9 - TUNSETFILTEREBPF = 0x800454e1 - TUNSETGROUP = 0x400454ce - TUNSETIFF = 0x400454ca - TUNSETIFINDEX = 0x400454da - TUNSETLINK = 0x400454cd - TUNSETNOCSUM = 0x400454c8 - TUNSETOFFLOAD = 0x400454d0 - TUNSETOWNER = 0x400454cc - TUNSETPERSIST = 0x400454cb - TUNSETQUEUE = 0x400454d9 - TUNSETSNDBUF = 0x400454d4 - TUNSETSTEERINGEBPF = 0x800454e0 - TUNSETTXFILTER = 0x400454d1 - TUNSETVNETBE = 0x400454de - TUNSETVNETHDRSZ = 0x400454d8 - TUNSETVNETLE = 0x400454dc - UBI_IOCATT = 0x40186f40 - UBI_IOCDET = 0x40046f41 - UBI_IOCEBCH = 0x40044f02 - UBI_IOCEBER = 0x40044f01 - UBI_IOCEBISMAP = 0x80044f05 - UBI_IOCEBMAP = 0x40084f03 - UBI_IOCEBUNMAP = 0x40044f04 - UBI_IOCMKVOL = 0x40986f00 - UBI_IOCRMVOL = 0x40046f01 - UBI_IOCRNVOL = 0x51106f03 - UBI_IOCRPEB = 0x40046f04 - UBI_IOCRSVOL = 0x400c6f02 - UBI_IOCSETVOLPROP = 0x40104f06 - UBI_IOCSPEB = 0x40046f05 - UBI_IOCVOLCRBLK = 0x40804f07 - UBI_IOCVOLRMBLK = 0x4f08 - UBI_IOCVOLUP = 0x40084f00 - VDISCARD = 0xd - VEOF = 0x4 - VEOL = 0xb - VEOL2 = 0x10 - VMIN = 0x6 - VREPRINT = 0xc - VSTART = 0x8 - VSTOP = 0x9 - VSUSP = 0xa - VSWTC = 0x7 - VT1 = 0x4000 - VTDLY = 0x4000 - VTIME = 0x5 - VWERASE = 0xe - WDIOC_GETBOOTSTATUS = 0x80045702 - WDIOC_GETPRETIMEOUT = 0x80045709 - WDIOC_GETSTATUS = 0x80045701 - WDIOC_GETSUPPORT = 0x80285700 - WDIOC_GETTEMP = 0x80045703 - WDIOC_GETTIMELEFT = 0x8004570a - WDIOC_GETTIMEOUT = 0x80045707 - WDIOC_KEEPALIVE = 0x80045705 - WDIOC_SETOPTIONS = 0x80045704 - WORDSIZE = 0x20 - X86_FXSR_MAGIC = 0x0 - XCASE = 0x4 - XTABS = 0x1800 - _HIDIOCGRAWNAME = 0x80804804 - _HIDIOCGRAWPHYS = 0x80404805 - _HIDIOCGRAWUNIQ = 0x80404808 -) - -// Errors -const ( - EADDRINUSE = syscall.Errno(0x62) - EADDRNOTAVAIL = syscall.Errno(0x63) - EADV = syscall.Errno(0x44) - EAFNOSUPPORT = syscall.Errno(0x61) - EALREADY = syscall.Errno(0x72) - EBADE = syscall.Errno(0x34) - EBADFD = syscall.Errno(0x4d) - EBADMSG = syscall.Errno(0x4a) - EBADR = syscall.Errno(0x35) - EBADRQC = syscall.Errno(0x38) - EBADSLT = syscall.Errno(0x39) - EBFONT = syscall.Errno(0x3b) - ECANCELED = syscall.Errno(0x7d) - ECHRNG = syscall.Errno(0x2c) - ECOMM = syscall.Errno(0x46) - ECONNABORTED = syscall.Errno(0x67) - ECONNREFUSED = syscall.Errno(0x6f) - ECONNRESET = syscall.Errno(0x68) - EDEADLK = syscall.Errno(0x23) - EDEADLOCK = syscall.Errno(0x23) - EDESTADDRREQ = syscall.Errno(0x59) - EDOTDOT = syscall.Errno(0x49) - EDQUOT = syscall.Errno(0x7a) - EHOSTDOWN = syscall.Errno(0x70) - EHOSTUNREACH = syscall.Errno(0x71) - EHWPOISON = syscall.Errno(0x85) - EIDRM = syscall.Errno(0x2b) - EILSEQ = syscall.Errno(0x54) - EINPROGRESS = syscall.Errno(0x73) - EISCONN = syscall.Errno(0x6a) - EISNAM = syscall.Errno(0x78) - EKEYEXPIRED = syscall.Errno(0x7f) - EKEYREJECTED = syscall.Errno(0x81) - EKEYREVOKED = syscall.Errno(0x80) - EL2HLT = syscall.Errno(0x33) - EL2NSYNC = syscall.Errno(0x2d) - EL3HLT = syscall.Errno(0x2e) - EL3RST = syscall.Errno(0x2f) - ELIBACC = syscall.Errno(0x4f) - ELIBBAD = syscall.Errno(0x50) - ELIBEXEC = syscall.Errno(0x53) - ELIBMAX = syscall.Errno(0x52) - ELIBSCN = syscall.Errno(0x51) - ELNRNG = syscall.Errno(0x30) - ELOOP = syscall.Errno(0x28) - EMEDIUMTYPE = syscall.Errno(0x7c) - EMSGSIZE = syscall.Errno(0x5a) - EMULTIHOP = syscall.Errno(0x48) - ENAMETOOLONG = syscall.Errno(0x24) - ENAVAIL = syscall.Errno(0x77) - ENETDOWN = syscall.Errno(0x64) - ENETRESET = syscall.Errno(0x66) - ENETUNREACH = syscall.Errno(0x65) - ENOANO = syscall.Errno(0x37) - ENOBUFS = syscall.Errno(0x69) - ENOCSI = syscall.Errno(0x32) - ENODATA = syscall.Errno(0x3d) - ENOKEY = syscall.Errno(0x7e) - ENOLCK = syscall.Errno(0x25) - ENOLINK = syscall.Errno(0x43) - ENOMEDIUM = syscall.Errno(0x7b) - ENOMSG = syscall.Errno(0x2a) - ENONET = syscall.Errno(0x40) - ENOPKG = syscall.Errno(0x41) - ENOPROTOOPT = syscall.Errno(0x5c) - ENOSR = syscall.Errno(0x3f) - ENOSTR = syscall.Errno(0x3c) - ENOSYS = syscall.Errno(0x26) - ENOTCONN = syscall.Errno(0x6b) - ENOTEMPTY = syscall.Errno(0x27) - ENOTNAM = syscall.Errno(0x76) - ENOTRECOVERABLE = syscall.Errno(0x83) - ENOTSOCK = syscall.Errno(0x58) - ENOTSUP = syscall.Errno(0x5f) - ENOTUNIQ = syscall.Errno(0x4c) - EOPNOTSUPP = syscall.Errno(0x5f) - EOVERFLOW = syscall.Errno(0x4b) - EOWNERDEAD = syscall.Errno(0x82) - EPFNOSUPPORT = syscall.Errno(0x60) - EPROTO = syscall.Errno(0x47) - EPROTONOSUPPORT = syscall.Errno(0x5d) - EPROTOTYPE = syscall.Errno(0x5b) - EREMCHG = syscall.Errno(0x4e) - EREMOTE = syscall.Errno(0x42) - EREMOTEIO = syscall.Errno(0x79) - ERESTART = syscall.Errno(0x55) - ERFKILL = syscall.Errno(0x84) - ESHUTDOWN = syscall.Errno(0x6c) - ESOCKTNOSUPPORT = syscall.Errno(0x5e) - ESRMNT = syscall.Errno(0x45) - ESTALE = syscall.Errno(0x74) - ESTRPIPE = syscall.Errno(0x56) - ETIME = syscall.Errno(0x3e) - ETIMEDOUT = syscall.Errno(0x6e) - ETOOMANYREFS = syscall.Errno(0x6d) - EUCLEAN = syscall.Errno(0x75) - EUNATCH = syscall.Errno(0x31) - EUSERS = syscall.Errno(0x57) - EXFULL = syscall.Errno(0x36) -) - -// Signals -const ( - SIGBUS = syscall.Signal(0x7) - SIGCHLD = syscall.Signal(0x11) - SIGCLD = syscall.Signal(0x11) - SIGCONT = syscall.Signal(0x12) - SIGIO = syscall.Signal(0x1d) - SIGPOLL = syscall.Signal(0x1d) - SIGPROF = syscall.Signal(0x1b) - SIGPWR = syscall.Signal(0x1e) - SIGSTKFLT = syscall.Signal(0x10) - SIGSTOP = syscall.Signal(0x13) - SIGSYS = syscall.Signal(0x1f) - SIGTSTP = syscall.Signal(0x14) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x17) - SIGUSR1 = syscall.Signal(0xa) - SIGUSR2 = syscall.Signal(0xc) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "no such device or address"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EAGAIN", "resource temporarily unavailable"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device or resource busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "invalid cross-device link"}, - {19, "ENODEV", "no such device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "numerical result out of range"}, - {35, "EDEADLK", "resource deadlock avoided"}, - {36, "ENAMETOOLONG", "file name too long"}, - {37, "ENOLCK", "no locks available"}, - {38, "ENOSYS", "function not implemented"}, - {39, "ENOTEMPTY", "directory not empty"}, - {40, "ELOOP", "too many levels of symbolic links"}, - {42, "ENOMSG", "no message of desired type"}, - {43, "EIDRM", "identifier removed"}, - {44, "ECHRNG", "channel number out of range"}, - {45, "EL2NSYNC", "level 2 not synchronized"}, - {46, "EL3HLT", "level 3 halted"}, - {47, "EL3RST", "level 3 reset"}, - {48, "ELNRNG", "link number out of range"}, - {49, "EUNATCH", "protocol driver not attached"}, - {50, "ENOCSI", "no CSI structure available"}, - {51, "EL2HLT", "level 2 halted"}, - {52, "EBADE", "invalid exchange"}, - {53, "EBADR", "invalid request descriptor"}, - {54, "EXFULL", "exchange full"}, - {55, "ENOANO", "no anode"}, - {56, "EBADRQC", "invalid request code"}, - {57, "EBADSLT", "invalid slot"}, - {59, "EBFONT", "bad font file format"}, - {60, "ENOSTR", "device not a stream"}, - {61, "ENODATA", "no data available"}, - {62, "ETIME", "timer expired"}, - {63, "ENOSR", "out of streams resources"}, - {64, "ENONET", "machine is not on the network"}, - {65, "ENOPKG", "package not installed"}, - {66, "EREMOTE", "object is remote"}, - {67, "ENOLINK", "link has been severed"}, - {68, "EADV", "advertise error"}, - {69, "ESRMNT", "srmount error"}, - {70, "ECOMM", "communication error on send"}, - {71, "EPROTO", "protocol error"}, - {72, "EMULTIHOP", "multihop attempted"}, - {73, "EDOTDOT", "RFS specific error"}, - {74, "EBADMSG", "bad message"}, - {75, "EOVERFLOW", "value too large for defined data type"}, - {76, "ENOTUNIQ", "name not unique on network"}, - {77, "EBADFD", "file descriptor in bad state"}, - {78, "EREMCHG", "remote address changed"}, - {79, "ELIBACC", "can not access a needed shared library"}, - {80, "ELIBBAD", "accessing a corrupted shared library"}, - {81, "ELIBSCN", ".lib section in a.out corrupted"}, - {82, "ELIBMAX", "attempting to link in too many shared libraries"}, - {83, "ELIBEXEC", "cannot exec a shared library directly"}, - {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, - {85, "ERESTART", "interrupted system call should be restarted"}, - {86, "ESTRPIPE", "streams pipe error"}, - {87, "EUSERS", "too many users"}, - {88, "ENOTSOCK", "socket operation on non-socket"}, - {89, "EDESTADDRREQ", "destination address required"}, - {90, "EMSGSIZE", "message too long"}, - {91, "EPROTOTYPE", "protocol wrong type for socket"}, - {92, "ENOPROTOOPT", "protocol not available"}, - {93, "EPROTONOSUPPORT", "protocol not supported"}, - {94, "ESOCKTNOSUPPORT", "socket type not supported"}, - {95, "ENOTSUP", "operation not supported"}, - {96, "EPFNOSUPPORT", "protocol family not supported"}, - {97, "EAFNOSUPPORT", "address family not supported by protocol"}, - {98, "EADDRINUSE", "address already in use"}, - {99, "EADDRNOTAVAIL", "cannot assign requested address"}, - {100, "ENETDOWN", "network is down"}, - {101, "ENETUNREACH", "network is unreachable"}, - {102, "ENETRESET", "network dropped connection on reset"}, - {103, "ECONNABORTED", "software caused connection abort"}, - {104, "ECONNRESET", "connection reset by peer"}, - {105, "ENOBUFS", "no buffer space available"}, - {106, "EISCONN", "transport endpoint is already connected"}, - {107, "ENOTCONN", "transport endpoint is not connected"}, - {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, - {109, "ETOOMANYREFS", "too many references: cannot splice"}, - {110, "ETIMEDOUT", "connection timed out"}, - {111, "ECONNREFUSED", "connection refused"}, - {112, "EHOSTDOWN", "host is down"}, - {113, "EHOSTUNREACH", "no route to host"}, - {114, "EALREADY", "operation already in progress"}, - {115, "EINPROGRESS", "operation now in progress"}, - {116, "ESTALE", "stale file handle"}, - {117, "EUCLEAN", "structure needs cleaning"}, - {118, "ENOTNAM", "not a XENIX named type file"}, - {119, "ENAVAIL", "no XENIX semaphores available"}, - {120, "EISNAM", "is a named type file"}, - {121, "EREMOTEIO", "remote I/O error"}, - {122, "EDQUOT", "disk quota exceeded"}, - {123, "ENOMEDIUM", "no medium found"}, - {124, "EMEDIUMTYPE", "wrong medium type"}, - {125, "ECANCELED", "operation canceled"}, - {126, "ENOKEY", "required key not available"}, - {127, "EKEYEXPIRED", "key has expired"}, - {128, "EKEYREVOKED", "key has been revoked"}, - {129, "EKEYREJECTED", "key was rejected by service"}, - {130, "EOWNERDEAD", "owner died"}, - {131, "ENOTRECOVERABLE", "state not recoverable"}, - {132, "ERFKILL", "operation not possible due to RF-kill"}, - {133, "EHWPOISON", "memory page has hardware error"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/breakpoint trap"}, - {6, "SIGABRT", "aborted"}, - {7, "SIGBUS", "bus error"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGUSR1", "user defined signal 1"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGUSR2", "user defined signal 2"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGSTKFLT", "stack fault"}, - {17, "SIGCHLD", "child exited"}, - {18, "SIGCONT", "continued"}, - {19, "SIGSTOP", "stopped (signal)"}, - {20, "SIGTSTP", "stopped"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGURG", "urgent I/O condition"}, - {24, "SIGXCPU", "CPU time limit exceeded"}, - {25, "SIGXFSZ", "file size limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window changed"}, - {29, "SIGIO", "I/O possible"}, - {30, "SIGPWR", "power failure"}, - {31, "SIGSYS", "bad system call"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go deleted file mode 100644 index 4ff9427..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ /dev/null @@ -1,828 +0,0 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/amd64/include -m64 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build amd64 && linux -// +build amd64,linux - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/amd64/include -m64 _const.go - -package unix - -import "syscall" - -const ( - B1000000 = 0x1008 - B115200 = 0x1002 - B1152000 = 0x1009 - B1500000 = 0x100a - B2000000 = 0x100b - B230400 = 0x1003 - B2500000 = 0x100c - B3000000 = 0x100d - B3500000 = 0x100e - B4000000 = 0x100f - B460800 = 0x1004 - B500000 = 0x1005 - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 - BLKBSZGET = 0x80081270 - BLKBSZSET = 0x40081271 - BLKFLSBUF = 0x1261 - BLKFRAGET = 0x1265 - BLKFRASET = 0x1264 - BLKGETSIZE = 0x1260 - BLKGETSIZE64 = 0x80081272 - BLKPBSZGET = 0x127b - BLKRAGET = 0x1263 - BLKRASET = 0x1262 - BLKROGET = 0x125e - BLKROSET = 0x125d - BLKRRPART = 0x125f - BLKSECTGET = 0x1267 - BLKSECTSET = 0x1266 - BLKSSZGET = 0x1268 - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 - CBAUD = 0x100f - CBAUDEX = 0x1000 - CIBAUD = 0x100f0000 - CLOCAL = 0x800 - CR1 = 0x200 - CR2 = 0x400 - CR3 = 0x600 - CRDLY = 0x600 - CREAD = 0x80 - CS6 = 0x10 - CS7 = 0x20 - CS8 = 0x30 - CSIZE = 0x30 - CSTOPB = 0x40 - ECCGETLAYOUT = 0x81484d11 - ECCGETSTATS = 0x80104d12 - ECHOCTL = 0x200 - ECHOE = 0x10 - ECHOK = 0x20 - ECHOKE = 0x800 - ECHONL = 0x40 - ECHOPRT = 0x400 - EFD_CLOEXEC = 0x80000 - EFD_NONBLOCK = 0x800 - EPOLL_CLOEXEC = 0x80000 - EXTPROC = 0x10000 - FF1 = 0x8000 - FFDLY = 0x8000 - FICLONE = 0x40049409 - FICLONERANGE = 0x4020940d - FLUSHO = 0x1000 - FP_XSTATE_MAGIC2 = 0x46505845 - FS_IOC_ENABLE_VERITY = 0x40806685 - FS_IOC_GETFLAGS = 0x80086601 - FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b - FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 - FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 - FS_IOC_SETFLAGS = 0x40086602 - FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 - F_GETLK = 0x5 - F_GETLK64 = 0x5 - F_GETOWN = 0x9 - F_RDLCK = 0x0 - F_SETLK = 0x6 - F_SETLK64 = 0x6 - F_SETLKW = 0x7 - F_SETLKW64 = 0x7 - F_SETOWN = 0x8 - F_UNLCK = 0x2 - F_WRLCK = 0x1 - HIDIOCGRAWINFO = 0x80084803 - HIDIOCGRDESC = 0x90044802 - HIDIOCGRDESCSIZE = 0x80044801 - HUPCL = 0x400 - ICANON = 0x2 - IEXTEN = 0x8000 - IN_CLOEXEC = 0x80000 - IN_NONBLOCK = 0x800 - IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 - ISIG = 0x1 - IUCLC = 0x200 - IXOFF = 0x1000 - IXON = 0x400 - MAP_32BIT = 0x40 - MAP_ANON = 0x20 - MAP_ANONYMOUS = 0x20 - MAP_DENYWRITE = 0x800 - MAP_EXECUTABLE = 0x1000 - MAP_GROWSDOWN = 0x100 - MAP_HUGETLB = 0x40000 - MAP_LOCKED = 0x2000 - MAP_NONBLOCK = 0x10000 - MAP_NORESERVE = 0x4000 - MAP_POPULATE = 0x8000 - MAP_STACK = 0x20000 - MAP_SYNC = 0x80000 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MCL_ONFAULT = 0x4 - MEMERASE = 0x40084d02 - MEMERASE64 = 0x40104d14 - MEMGETBADBLOCK = 0x40084d0b - MEMGETINFO = 0x80204d01 - MEMGETOOBSEL = 0x80c84d0a - MEMGETREGIONCOUNT = 0x80044d07 - MEMISLOCKED = 0x80084d17 - MEMLOCK = 0x40084d05 - MEMREADOOB = 0xc0104d04 - MEMSETBADBLOCK = 0x40084d0c - MEMUNLOCK = 0x40084d06 - MEMWRITEOOB = 0xc0104d03 - MTDFILEMODE = 0x4d13 - NFDBITS = 0x40 - NLDLY = 0x100 - NOFLSH = 0x80 - NS_GET_NSTYPE = 0xb703 - NS_GET_OWNER_UID = 0xb704 - NS_GET_PARENT = 0xb702 - NS_GET_USERNS = 0xb701 - OLCUC = 0x2 - ONLCR = 0x4 - OTPERASE = 0x400c4d19 - OTPGETREGIONCOUNT = 0x40044d0e - OTPGETREGIONINFO = 0x400c4d0f - OTPLOCK = 0x800c4d10 - OTPSELECT = 0x80044d0d - O_APPEND = 0x400 - O_ASYNC = 0x2000 - O_CLOEXEC = 0x80000 - O_CREAT = 0x40 - O_DIRECT = 0x4000 - O_DIRECTORY = 0x10000 - O_DSYNC = 0x1000 - O_EXCL = 0x80 - O_FSYNC = 0x101000 - O_LARGEFILE = 0x0 - O_NDELAY = 0x800 - O_NOATIME = 0x40000 - O_NOCTTY = 0x100 - O_NOFOLLOW = 0x20000 - O_NONBLOCK = 0x800 - O_PATH = 0x200000 - O_RSYNC = 0x101000 - O_SYNC = 0x101000 - O_TMPFILE = 0x410000 - O_TRUNC = 0x200 - PARENB = 0x100 - PARODD = 0x200 - PENDIN = 0x4000 - PERF_EVENT_IOC_DISABLE = 0x2401 - PERF_EVENT_IOC_ENABLE = 0x2400 - PERF_EVENT_IOC_ID = 0x80082407 - PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b - PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 - PERF_EVENT_IOC_PERIOD = 0x40082404 - PERF_EVENT_IOC_QUERY_BPF = 0xc008240a - PERF_EVENT_IOC_REFRESH = 0x2402 - PERF_EVENT_IOC_RESET = 0x2403 - PERF_EVENT_IOC_SET_BPF = 0x40042408 - PERF_EVENT_IOC_SET_FILTER = 0x40082406 - PERF_EVENT_IOC_SET_OUTPUT = 0x2405 - PPPIOCATTACH = 0x4004743d - PPPIOCATTCHAN = 0x40047438 - PPPIOCBRIDGECHAN = 0x40047435 - PPPIOCCONNECT = 0x4004743a - PPPIOCDETACH = 0x4004743c - PPPIOCDISCONN = 0x7439 - PPPIOCGASYNCMAP = 0x80047458 - PPPIOCGCHAN = 0x80047437 - PPPIOCGDEBUG = 0x80047441 - PPPIOCGFLAGS = 0x8004745a - PPPIOCGIDLE = 0x8010743f - PPPIOCGIDLE32 = 0x8008743f - PPPIOCGIDLE64 = 0x8010743f - PPPIOCGL2TPSTATS = 0x80487436 - PPPIOCGMRU = 0x80047453 - PPPIOCGRASYNCMAP = 0x80047455 - PPPIOCGUNIT = 0x80047456 - PPPIOCGXASYNCMAP = 0x80207450 - PPPIOCSACTIVE = 0x40107446 - PPPIOCSASYNCMAP = 0x40047457 - PPPIOCSCOMPRESS = 0x4010744d - PPPIOCSDEBUG = 0x40047440 - PPPIOCSFLAGS = 0x40047459 - PPPIOCSMAXCID = 0x40047451 - PPPIOCSMRRU = 0x4004743b - PPPIOCSMRU = 0x40047452 - PPPIOCSNPMODE = 0x4008744b - PPPIOCSPASS = 0x40107447 - PPPIOCSRASYNCMAP = 0x40047454 - PPPIOCSXASYNCMAP = 0x4020744f - PPPIOCUNBRIDGECHAN = 0x7434 - PPPIOCXFERUNIT = 0x744e - PR_SET_PTRACER_ANY = 0xffffffffffffffff - PTRACE_ARCH_PRCTL = 0x1e - PTRACE_GETFPREGS = 0xe - PTRACE_GETFPXREGS = 0x12 - PTRACE_GET_THREAD_AREA = 0x19 - PTRACE_OLDSETOPTIONS = 0x15 - PTRACE_SETFPREGS = 0xf - PTRACE_SETFPXREGS = 0x13 - PTRACE_SET_THREAD_AREA = 0x1a - PTRACE_SINGLEBLOCK = 0x21 - PTRACE_SYSEMU = 0x1f - PTRACE_SYSEMU_SINGLESTEP = 0x20 - RLIMIT_AS = 0x9 - RLIMIT_MEMLOCK = 0x8 - RLIMIT_NOFILE = 0x7 - RLIMIT_NPROC = 0x6 - RLIMIT_RSS = 0x5 - RNDADDENTROPY = 0x40085203 - RNDADDTOENTCNT = 0x40045201 - RNDCLEARPOOL = 0x5206 - RNDGETENTCNT = 0x80045200 - RNDGETPOOL = 0x80085202 - RNDRESEEDCRNG = 0x5207 - RNDZAPENTCNT = 0x5204 - RTC_AIE_OFF = 0x7002 - RTC_AIE_ON = 0x7001 - RTC_ALM_READ = 0x80247008 - RTC_ALM_SET = 0x40247007 - RTC_EPOCH_READ = 0x8008700d - RTC_EPOCH_SET = 0x4008700e - RTC_IRQP_READ = 0x8008700b - RTC_IRQP_SET = 0x4008700c - RTC_PARAM_GET = 0x40187013 - RTC_PARAM_SET = 0x40187014 - RTC_PIE_OFF = 0x7006 - RTC_PIE_ON = 0x7005 - RTC_PLL_GET = 0x80207011 - RTC_PLL_SET = 0x40207012 - RTC_RD_TIME = 0x80247009 - RTC_SET_TIME = 0x4024700a - RTC_UIE_OFF = 0x7004 - RTC_UIE_ON = 0x7003 - RTC_VL_CLR = 0x7014 - RTC_VL_READ = 0x80047013 - RTC_WIE_OFF = 0x7010 - RTC_WIE_ON = 0x700f - RTC_WKALM_RD = 0x80287010 - RTC_WKALM_SET = 0x4028700f - SCM_TIMESTAMPING = 0x25 - SCM_TIMESTAMPING_OPT_STATS = 0x36 - SCM_TIMESTAMPING_PKTINFO = 0x3a - SCM_TIMESTAMPNS = 0x23 - SCM_TXTIME = 0x3d - SCM_WIFI_STATUS = 0x29 - SFD_CLOEXEC = 0x80000 - SFD_NONBLOCK = 0x800 - SIOCATMARK = 0x8905 - SIOCGPGRP = 0x8904 - SIOCGSTAMPNS_NEW = 0x80108907 - SIOCGSTAMP_NEW = 0x80108906 - SIOCINQ = 0x541b - SIOCOUTQ = 0x5411 - SIOCSPGRP = 0x8902 - SOCK_CLOEXEC = 0x80000 - SOCK_DGRAM = 0x2 - SOCK_NONBLOCK = 0x800 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0x1 - SO_ACCEPTCONN = 0x1e - SO_ATTACH_BPF = 0x32 - SO_ATTACH_REUSEPORT_CBPF = 0x33 - SO_ATTACH_REUSEPORT_EBPF = 0x34 - SO_BINDTODEVICE = 0x19 - SO_BINDTOIFINDEX = 0x3e - SO_BPF_EXTENSIONS = 0x30 - SO_BROADCAST = 0x6 - SO_BSDCOMPAT = 0xe - SO_BUF_LOCK = 0x48 - SO_BUSY_POLL = 0x2e - SO_BUSY_POLL_BUDGET = 0x46 - SO_CNX_ADVICE = 0x35 - SO_COOKIE = 0x39 - SO_DETACH_REUSEPORT_BPF = 0x44 - SO_DOMAIN = 0x27 - SO_DONTROUTE = 0x5 - SO_ERROR = 0x4 - SO_INCOMING_CPU = 0x31 - SO_INCOMING_NAPI_ID = 0x38 - SO_KEEPALIVE = 0x9 - SO_LINGER = 0xd - SO_LOCK_FILTER = 0x2c - SO_MARK = 0x24 - SO_MAX_PACING_RATE = 0x2f - SO_MEMINFO = 0x37 - SO_NETNS_COOKIE = 0x47 - SO_NOFCS = 0x2b - SO_OOBINLINE = 0xa - SO_PASSCRED = 0x10 - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x11 - SO_PEERGROUPS = 0x3b - SO_PEERSEC = 0x1f - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x26 - SO_RCVBUF = 0x8 - SO_RCVBUFFORCE = 0x21 - SO_RCVLOWAT = 0x12 - SO_RCVMARK = 0x4b - SO_RCVTIMEO = 0x14 - SO_RCVTIMEO_NEW = 0x42 - SO_RCVTIMEO_OLD = 0x14 - SO_RESERVE_MEM = 0x49 - SO_REUSEADDR = 0x2 - SO_REUSEPORT = 0xf - SO_RXQ_OVFL = 0x28 - SO_SECURITY_AUTHENTICATION = 0x16 - SO_SECURITY_ENCRYPTION_NETWORK = 0x18 - SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 - SO_SELECT_ERR_QUEUE = 0x2d - SO_SNDBUF = 0x7 - SO_SNDBUFFORCE = 0x20 - SO_SNDLOWAT = 0x13 - SO_SNDTIMEO = 0x15 - SO_SNDTIMEO_NEW = 0x43 - SO_SNDTIMEO_OLD = 0x15 - SO_TIMESTAMPING = 0x25 - SO_TIMESTAMPING_NEW = 0x41 - SO_TIMESTAMPING_OLD = 0x25 - SO_TIMESTAMPNS = 0x23 - SO_TIMESTAMPNS_NEW = 0x40 - SO_TIMESTAMPNS_OLD = 0x23 - SO_TIMESTAMP_NEW = 0x3f - SO_TXREHASH = 0x4a - SO_TXTIME = 0x3d - SO_TYPE = 0x3 - SO_WIFI_STATUS = 0x29 - SO_ZEROCOPY = 0x3c - TAB1 = 0x800 - TAB2 = 0x1000 - TAB3 = 0x1800 - TABDLY = 0x1800 - TCFLSH = 0x540b - TCGETA = 0x5405 - TCGETS = 0x5401 - TCGETS2 = 0x802c542a - TCGETX = 0x5432 - TCSAFLUSH = 0x2 - TCSBRK = 0x5409 - TCSBRKP = 0x5425 - TCSETA = 0x5406 - TCSETAF = 0x5408 - TCSETAW = 0x5407 - TCSETS = 0x5402 - TCSETS2 = 0x402c542b - TCSETSF = 0x5404 - TCSETSF2 = 0x402c542d - TCSETSW = 0x5403 - TCSETSW2 = 0x402c542c - TCSETX = 0x5433 - TCSETXF = 0x5434 - TCSETXW = 0x5435 - TCXONC = 0x540a - TFD_CLOEXEC = 0x80000 - TFD_NONBLOCK = 0x800 - TIOCCBRK = 0x5428 - TIOCCONS = 0x541d - TIOCEXCL = 0x540c - TIOCGDEV = 0x80045432 - TIOCGETD = 0x5424 - TIOCGEXCL = 0x80045440 - TIOCGICOUNT = 0x545d - TIOCGISO7816 = 0x80285442 - TIOCGLCKTRMIOS = 0x5456 - TIOCGPGRP = 0x540f - TIOCGPKT = 0x80045438 - TIOCGPTLCK = 0x80045439 - TIOCGPTN = 0x80045430 - TIOCGPTPEER = 0x5441 - TIOCGRS485 = 0x542e - TIOCGSERIAL = 0x541e - TIOCGSID = 0x5429 - TIOCGSOFTCAR = 0x5419 - TIOCGWINSZ = 0x5413 - TIOCINQ = 0x541b - TIOCLINUX = 0x541c - TIOCMBIC = 0x5417 - TIOCMBIS = 0x5416 - TIOCMGET = 0x5415 - TIOCMIWAIT = 0x545c - TIOCMSET = 0x5418 - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x5422 - TIOCNXCL = 0x540d - TIOCOUTQ = 0x5411 - TIOCPKT = 0x5420 - TIOCSBRK = 0x5427 - TIOCSCTTY = 0x540e - TIOCSERCONFIG = 0x5453 - TIOCSERGETLSR = 0x5459 - TIOCSERGETMULTI = 0x545a - TIOCSERGSTRUCT = 0x5458 - TIOCSERGWILD = 0x5454 - TIOCSERSETMULTI = 0x545b - TIOCSERSWILD = 0x5455 - TIOCSER_TEMT = 0x1 - TIOCSETD = 0x5423 - TIOCSIG = 0x40045436 - TIOCSISO7816 = 0xc0285443 - TIOCSLCKTRMIOS = 0x5457 - TIOCSPGRP = 0x5410 - TIOCSPTLCK = 0x40045431 - TIOCSRS485 = 0x542f - TIOCSSERIAL = 0x541f - TIOCSSOFTCAR = 0x541a - TIOCSTI = 0x5412 - TIOCSWINSZ = 0x5414 - TIOCVHANGUP = 0x5437 - TOSTOP = 0x100 - TUNATTACHFILTER = 0x401054d5 - TUNDETACHFILTER = 0x401054d6 - TUNGETDEVNETNS = 0x54e3 - TUNGETFEATURES = 0x800454cf - TUNGETFILTER = 0x801054db - TUNGETIFF = 0x800454d2 - TUNGETSNDBUF = 0x800454d3 - TUNGETVNETBE = 0x800454df - TUNGETVNETHDRSZ = 0x800454d7 - TUNGETVNETLE = 0x800454dd - TUNSETCARRIER = 0x400454e2 - TUNSETDEBUG = 0x400454c9 - TUNSETFILTEREBPF = 0x800454e1 - TUNSETGROUP = 0x400454ce - TUNSETIFF = 0x400454ca - TUNSETIFINDEX = 0x400454da - TUNSETLINK = 0x400454cd - TUNSETNOCSUM = 0x400454c8 - TUNSETOFFLOAD = 0x400454d0 - TUNSETOWNER = 0x400454cc - TUNSETPERSIST = 0x400454cb - TUNSETQUEUE = 0x400454d9 - TUNSETSNDBUF = 0x400454d4 - TUNSETSTEERINGEBPF = 0x800454e0 - TUNSETTXFILTER = 0x400454d1 - TUNSETVNETBE = 0x400454de - TUNSETVNETHDRSZ = 0x400454d8 - TUNSETVNETLE = 0x400454dc - UBI_IOCATT = 0x40186f40 - UBI_IOCDET = 0x40046f41 - UBI_IOCEBCH = 0x40044f02 - UBI_IOCEBER = 0x40044f01 - UBI_IOCEBISMAP = 0x80044f05 - UBI_IOCEBMAP = 0x40084f03 - UBI_IOCEBUNMAP = 0x40044f04 - UBI_IOCMKVOL = 0x40986f00 - UBI_IOCRMVOL = 0x40046f01 - UBI_IOCRNVOL = 0x51106f03 - UBI_IOCRPEB = 0x40046f04 - UBI_IOCRSVOL = 0x400c6f02 - UBI_IOCSETVOLPROP = 0x40104f06 - UBI_IOCSPEB = 0x40046f05 - UBI_IOCVOLCRBLK = 0x40804f07 - UBI_IOCVOLRMBLK = 0x4f08 - UBI_IOCVOLUP = 0x40084f00 - VDISCARD = 0xd - VEOF = 0x4 - VEOL = 0xb - VEOL2 = 0x10 - VMIN = 0x6 - VREPRINT = 0xc - VSTART = 0x8 - VSTOP = 0x9 - VSUSP = 0xa - VSWTC = 0x7 - VT1 = 0x4000 - VTDLY = 0x4000 - VTIME = 0x5 - VWERASE = 0xe - WDIOC_GETBOOTSTATUS = 0x80045702 - WDIOC_GETPRETIMEOUT = 0x80045709 - WDIOC_GETSTATUS = 0x80045701 - WDIOC_GETSUPPORT = 0x80285700 - WDIOC_GETTEMP = 0x80045703 - WDIOC_GETTIMELEFT = 0x8004570a - WDIOC_GETTIMEOUT = 0x80045707 - WDIOC_KEEPALIVE = 0x80045705 - WDIOC_SETOPTIONS = 0x80045704 - WORDSIZE = 0x40 - XCASE = 0x4 - XTABS = 0x1800 - _HIDIOCGRAWNAME = 0x80804804 - _HIDIOCGRAWPHYS = 0x80404805 - _HIDIOCGRAWUNIQ = 0x80404808 -) - -// Errors -const ( - EADDRINUSE = syscall.Errno(0x62) - EADDRNOTAVAIL = syscall.Errno(0x63) - EADV = syscall.Errno(0x44) - EAFNOSUPPORT = syscall.Errno(0x61) - EALREADY = syscall.Errno(0x72) - EBADE = syscall.Errno(0x34) - EBADFD = syscall.Errno(0x4d) - EBADMSG = syscall.Errno(0x4a) - EBADR = syscall.Errno(0x35) - EBADRQC = syscall.Errno(0x38) - EBADSLT = syscall.Errno(0x39) - EBFONT = syscall.Errno(0x3b) - ECANCELED = syscall.Errno(0x7d) - ECHRNG = syscall.Errno(0x2c) - ECOMM = syscall.Errno(0x46) - ECONNABORTED = syscall.Errno(0x67) - ECONNREFUSED = syscall.Errno(0x6f) - ECONNRESET = syscall.Errno(0x68) - EDEADLK = syscall.Errno(0x23) - EDEADLOCK = syscall.Errno(0x23) - EDESTADDRREQ = syscall.Errno(0x59) - EDOTDOT = syscall.Errno(0x49) - EDQUOT = syscall.Errno(0x7a) - EHOSTDOWN = syscall.Errno(0x70) - EHOSTUNREACH = syscall.Errno(0x71) - EHWPOISON = syscall.Errno(0x85) - EIDRM = syscall.Errno(0x2b) - EILSEQ = syscall.Errno(0x54) - EINPROGRESS = syscall.Errno(0x73) - EISCONN = syscall.Errno(0x6a) - EISNAM = syscall.Errno(0x78) - EKEYEXPIRED = syscall.Errno(0x7f) - EKEYREJECTED = syscall.Errno(0x81) - EKEYREVOKED = syscall.Errno(0x80) - EL2HLT = syscall.Errno(0x33) - EL2NSYNC = syscall.Errno(0x2d) - EL3HLT = syscall.Errno(0x2e) - EL3RST = syscall.Errno(0x2f) - ELIBACC = syscall.Errno(0x4f) - ELIBBAD = syscall.Errno(0x50) - ELIBEXEC = syscall.Errno(0x53) - ELIBMAX = syscall.Errno(0x52) - ELIBSCN = syscall.Errno(0x51) - ELNRNG = syscall.Errno(0x30) - ELOOP = syscall.Errno(0x28) - EMEDIUMTYPE = syscall.Errno(0x7c) - EMSGSIZE = syscall.Errno(0x5a) - EMULTIHOP = syscall.Errno(0x48) - ENAMETOOLONG = syscall.Errno(0x24) - ENAVAIL = syscall.Errno(0x77) - ENETDOWN = syscall.Errno(0x64) - ENETRESET = syscall.Errno(0x66) - ENETUNREACH = syscall.Errno(0x65) - ENOANO = syscall.Errno(0x37) - ENOBUFS = syscall.Errno(0x69) - ENOCSI = syscall.Errno(0x32) - ENODATA = syscall.Errno(0x3d) - ENOKEY = syscall.Errno(0x7e) - ENOLCK = syscall.Errno(0x25) - ENOLINK = syscall.Errno(0x43) - ENOMEDIUM = syscall.Errno(0x7b) - ENOMSG = syscall.Errno(0x2a) - ENONET = syscall.Errno(0x40) - ENOPKG = syscall.Errno(0x41) - ENOPROTOOPT = syscall.Errno(0x5c) - ENOSR = syscall.Errno(0x3f) - ENOSTR = syscall.Errno(0x3c) - ENOSYS = syscall.Errno(0x26) - ENOTCONN = syscall.Errno(0x6b) - ENOTEMPTY = syscall.Errno(0x27) - ENOTNAM = syscall.Errno(0x76) - ENOTRECOVERABLE = syscall.Errno(0x83) - ENOTSOCK = syscall.Errno(0x58) - ENOTSUP = syscall.Errno(0x5f) - ENOTUNIQ = syscall.Errno(0x4c) - EOPNOTSUPP = syscall.Errno(0x5f) - EOVERFLOW = syscall.Errno(0x4b) - EOWNERDEAD = syscall.Errno(0x82) - EPFNOSUPPORT = syscall.Errno(0x60) - EPROTO = syscall.Errno(0x47) - EPROTONOSUPPORT = syscall.Errno(0x5d) - EPROTOTYPE = syscall.Errno(0x5b) - EREMCHG = syscall.Errno(0x4e) - EREMOTE = syscall.Errno(0x42) - EREMOTEIO = syscall.Errno(0x79) - ERESTART = syscall.Errno(0x55) - ERFKILL = syscall.Errno(0x84) - ESHUTDOWN = syscall.Errno(0x6c) - ESOCKTNOSUPPORT = syscall.Errno(0x5e) - ESRMNT = syscall.Errno(0x45) - ESTALE = syscall.Errno(0x74) - ESTRPIPE = syscall.Errno(0x56) - ETIME = syscall.Errno(0x3e) - ETIMEDOUT = syscall.Errno(0x6e) - ETOOMANYREFS = syscall.Errno(0x6d) - EUCLEAN = syscall.Errno(0x75) - EUNATCH = syscall.Errno(0x31) - EUSERS = syscall.Errno(0x57) - EXFULL = syscall.Errno(0x36) -) - -// Signals -const ( - SIGBUS = syscall.Signal(0x7) - SIGCHLD = syscall.Signal(0x11) - SIGCLD = syscall.Signal(0x11) - SIGCONT = syscall.Signal(0x12) - SIGIO = syscall.Signal(0x1d) - SIGPOLL = syscall.Signal(0x1d) - SIGPROF = syscall.Signal(0x1b) - SIGPWR = syscall.Signal(0x1e) - SIGSTKFLT = syscall.Signal(0x10) - SIGSTOP = syscall.Signal(0x13) - SIGSYS = syscall.Signal(0x1f) - SIGTSTP = syscall.Signal(0x14) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x17) - SIGUSR1 = syscall.Signal(0xa) - SIGUSR2 = syscall.Signal(0xc) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "no such device or address"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EAGAIN", "resource temporarily unavailable"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device or resource busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "invalid cross-device link"}, - {19, "ENODEV", "no such device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "numerical result out of range"}, - {35, "EDEADLK", "resource deadlock avoided"}, - {36, "ENAMETOOLONG", "file name too long"}, - {37, "ENOLCK", "no locks available"}, - {38, "ENOSYS", "function not implemented"}, - {39, "ENOTEMPTY", "directory not empty"}, - {40, "ELOOP", "too many levels of symbolic links"}, - {42, "ENOMSG", "no message of desired type"}, - {43, "EIDRM", "identifier removed"}, - {44, "ECHRNG", "channel number out of range"}, - {45, "EL2NSYNC", "level 2 not synchronized"}, - {46, "EL3HLT", "level 3 halted"}, - {47, "EL3RST", "level 3 reset"}, - {48, "ELNRNG", "link number out of range"}, - {49, "EUNATCH", "protocol driver not attached"}, - {50, "ENOCSI", "no CSI structure available"}, - {51, "EL2HLT", "level 2 halted"}, - {52, "EBADE", "invalid exchange"}, - {53, "EBADR", "invalid request descriptor"}, - {54, "EXFULL", "exchange full"}, - {55, "ENOANO", "no anode"}, - {56, "EBADRQC", "invalid request code"}, - {57, "EBADSLT", "invalid slot"}, - {59, "EBFONT", "bad font file format"}, - {60, "ENOSTR", "device not a stream"}, - {61, "ENODATA", "no data available"}, - {62, "ETIME", "timer expired"}, - {63, "ENOSR", "out of streams resources"}, - {64, "ENONET", "machine is not on the network"}, - {65, "ENOPKG", "package not installed"}, - {66, "EREMOTE", "object is remote"}, - {67, "ENOLINK", "link has been severed"}, - {68, "EADV", "advertise error"}, - {69, "ESRMNT", "srmount error"}, - {70, "ECOMM", "communication error on send"}, - {71, "EPROTO", "protocol error"}, - {72, "EMULTIHOP", "multihop attempted"}, - {73, "EDOTDOT", "RFS specific error"}, - {74, "EBADMSG", "bad message"}, - {75, "EOVERFLOW", "value too large for defined data type"}, - {76, "ENOTUNIQ", "name not unique on network"}, - {77, "EBADFD", "file descriptor in bad state"}, - {78, "EREMCHG", "remote address changed"}, - {79, "ELIBACC", "can not access a needed shared library"}, - {80, "ELIBBAD", "accessing a corrupted shared library"}, - {81, "ELIBSCN", ".lib section in a.out corrupted"}, - {82, "ELIBMAX", "attempting to link in too many shared libraries"}, - {83, "ELIBEXEC", "cannot exec a shared library directly"}, - {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, - {85, "ERESTART", "interrupted system call should be restarted"}, - {86, "ESTRPIPE", "streams pipe error"}, - {87, "EUSERS", "too many users"}, - {88, "ENOTSOCK", "socket operation on non-socket"}, - {89, "EDESTADDRREQ", "destination address required"}, - {90, "EMSGSIZE", "message too long"}, - {91, "EPROTOTYPE", "protocol wrong type for socket"}, - {92, "ENOPROTOOPT", "protocol not available"}, - {93, "EPROTONOSUPPORT", "protocol not supported"}, - {94, "ESOCKTNOSUPPORT", "socket type not supported"}, - {95, "ENOTSUP", "operation not supported"}, - {96, "EPFNOSUPPORT", "protocol family not supported"}, - {97, "EAFNOSUPPORT", "address family not supported by protocol"}, - {98, "EADDRINUSE", "address already in use"}, - {99, "EADDRNOTAVAIL", "cannot assign requested address"}, - {100, "ENETDOWN", "network is down"}, - {101, "ENETUNREACH", "network is unreachable"}, - {102, "ENETRESET", "network dropped connection on reset"}, - {103, "ECONNABORTED", "software caused connection abort"}, - {104, "ECONNRESET", "connection reset by peer"}, - {105, "ENOBUFS", "no buffer space available"}, - {106, "EISCONN", "transport endpoint is already connected"}, - {107, "ENOTCONN", "transport endpoint is not connected"}, - {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, - {109, "ETOOMANYREFS", "too many references: cannot splice"}, - {110, "ETIMEDOUT", "connection timed out"}, - {111, "ECONNREFUSED", "connection refused"}, - {112, "EHOSTDOWN", "host is down"}, - {113, "EHOSTUNREACH", "no route to host"}, - {114, "EALREADY", "operation already in progress"}, - {115, "EINPROGRESS", "operation now in progress"}, - {116, "ESTALE", "stale file handle"}, - {117, "EUCLEAN", "structure needs cleaning"}, - {118, "ENOTNAM", "not a XENIX named type file"}, - {119, "ENAVAIL", "no XENIX semaphores available"}, - {120, "EISNAM", "is a named type file"}, - {121, "EREMOTEIO", "remote I/O error"}, - {122, "EDQUOT", "disk quota exceeded"}, - {123, "ENOMEDIUM", "no medium found"}, - {124, "EMEDIUMTYPE", "wrong medium type"}, - {125, "ECANCELED", "operation canceled"}, - {126, "ENOKEY", "required key not available"}, - {127, "EKEYEXPIRED", "key has expired"}, - {128, "EKEYREVOKED", "key has been revoked"}, - {129, "EKEYREJECTED", "key was rejected by service"}, - {130, "EOWNERDEAD", "owner died"}, - {131, "ENOTRECOVERABLE", "state not recoverable"}, - {132, "ERFKILL", "operation not possible due to RF-kill"}, - {133, "EHWPOISON", "memory page has hardware error"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/breakpoint trap"}, - {6, "SIGABRT", "aborted"}, - {7, "SIGBUS", "bus error"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGUSR1", "user defined signal 1"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGUSR2", "user defined signal 2"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGSTKFLT", "stack fault"}, - {17, "SIGCHLD", "child exited"}, - {18, "SIGCONT", "continued"}, - {19, "SIGSTOP", "stopped (signal)"}, - {20, "SIGTSTP", "stopped"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGURG", "urgent I/O condition"}, - {24, "SIGXCPU", "CPU time limit exceeded"}, - {25, "SIGXFSZ", "file size limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window changed"}, - {29, "SIGIO", "I/O possible"}, - {30, "SIGPWR", "power failure"}, - {31, "SIGSYS", "bad system call"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go deleted file mode 100644 index 3eaa0fb..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ /dev/null @@ -1,834 +0,0 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/arm/include -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm && linux -// +build arm,linux - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/arm/include _const.go - -package unix - -import "syscall" - -const ( - B1000000 = 0x1008 - B115200 = 0x1002 - B1152000 = 0x1009 - B1500000 = 0x100a - B2000000 = 0x100b - B230400 = 0x1003 - B2500000 = 0x100c - B3000000 = 0x100d - B3500000 = 0x100e - B4000000 = 0x100f - B460800 = 0x1004 - B500000 = 0x1005 - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 - BLKBSZGET = 0x80041270 - BLKBSZSET = 0x40041271 - BLKFLSBUF = 0x1261 - BLKFRAGET = 0x1265 - BLKFRASET = 0x1264 - BLKGETSIZE = 0x1260 - BLKGETSIZE64 = 0x80041272 - BLKPBSZGET = 0x127b - BLKRAGET = 0x1263 - BLKRASET = 0x1262 - BLKROGET = 0x125e - BLKROSET = 0x125d - BLKRRPART = 0x125f - BLKSECTGET = 0x1267 - BLKSECTSET = 0x1266 - BLKSSZGET = 0x1268 - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 - CBAUD = 0x100f - CBAUDEX = 0x1000 - CIBAUD = 0x100f0000 - CLOCAL = 0x800 - CR1 = 0x200 - CR2 = 0x400 - CR3 = 0x600 - CRDLY = 0x600 - CREAD = 0x80 - CS6 = 0x10 - CS7 = 0x20 - CS8 = 0x30 - CSIZE = 0x30 - CSTOPB = 0x40 - ECCGETLAYOUT = 0x81484d11 - ECCGETSTATS = 0x80104d12 - ECHOCTL = 0x200 - ECHOE = 0x10 - ECHOK = 0x20 - ECHOKE = 0x800 - ECHONL = 0x40 - ECHOPRT = 0x400 - EFD_CLOEXEC = 0x80000 - EFD_NONBLOCK = 0x800 - EPOLL_CLOEXEC = 0x80000 - EXTPROC = 0x10000 - FF1 = 0x8000 - FFDLY = 0x8000 - FICLONE = 0x40049409 - FICLONERANGE = 0x4020940d - FLUSHO = 0x1000 - FS_IOC_ENABLE_VERITY = 0x40806685 - FS_IOC_GETFLAGS = 0x80046601 - FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b - FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 - FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 - FS_IOC_SETFLAGS = 0x40046602 - FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 - F_GETLK = 0xc - F_GETLK64 = 0xc - F_GETOWN = 0x9 - F_RDLCK = 0x0 - F_SETLK = 0xd - F_SETLK64 = 0xd - F_SETLKW = 0xe - F_SETLKW64 = 0xe - F_SETOWN = 0x8 - F_UNLCK = 0x2 - F_WRLCK = 0x1 - HIDIOCGRAWINFO = 0x80084803 - HIDIOCGRDESC = 0x90044802 - HIDIOCGRDESCSIZE = 0x80044801 - HUPCL = 0x400 - ICANON = 0x2 - IEXTEN = 0x8000 - IN_CLOEXEC = 0x80000 - IN_NONBLOCK = 0x800 - IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 - ISIG = 0x1 - IUCLC = 0x200 - IXOFF = 0x1000 - IXON = 0x400 - MAP_ANON = 0x20 - MAP_ANONYMOUS = 0x20 - MAP_DENYWRITE = 0x800 - MAP_EXECUTABLE = 0x1000 - MAP_GROWSDOWN = 0x100 - MAP_HUGETLB = 0x40000 - MAP_LOCKED = 0x2000 - MAP_NONBLOCK = 0x10000 - MAP_NORESERVE = 0x4000 - MAP_POPULATE = 0x8000 - MAP_STACK = 0x20000 - MAP_SYNC = 0x80000 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MCL_ONFAULT = 0x4 - MEMERASE = 0x40084d02 - MEMERASE64 = 0x40104d14 - MEMGETBADBLOCK = 0x40084d0b - MEMGETINFO = 0x80204d01 - MEMGETOOBSEL = 0x80c84d0a - MEMGETREGIONCOUNT = 0x80044d07 - MEMISLOCKED = 0x80084d17 - MEMLOCK = 0x40084d05 - MEMREADOOB = 0xc00c4d04 - MEMSETBADBLOCK = 0x40084d0c - MEMUNLOCK = 0x40084d06 - MEMWRITEOOB = 0xc00c4d03 - MTDFILEMODE = 0x4d13 - NFDBITS = 0x20 - NLDLY = 0x100 - NOFLSH = 0x80 - NS_GET_NSTYPE = 0xb703 - NS_GET_OWNER_UID = 0xb704 - NS_GET_PARENT = 0xb702 - NS_GET_USERNS = 0xb701 - OLCUC = 0x2 - ONLCR = 0x4 - OTPERASE = 0x400c4d19 - OTPGETREGIONCOUNT = 0x40044d0e - OTPGETREGIONINFO = 0x400c4d0f - OTPLOCK = 0x800c4d10 - OTPSELECT = 0x80044d0d - O_APPEND = 0x400 - O_ASYNC = 0x2000 - O_CLOEXEC = 0x80000 - O_CREAT = 0x40 - O_DIRECT = 0x10000 - O_DIRECTORY = 0x4000 - O_DSYNC = 0x1000 - O_EXCL = 0x80 - O_FSYNC = 0x101000 - O_LARGEFILE = 0x20000 - O_NDELAY = 0x800 - O_NOATIME = 0x40000 - O_NOCTTY = 0x100 - O_NOFOLLOW = 0x8000 - O_NONBLOCK = 0x800 - O_PATH = 0x200000 - O_RSYNC = 0x101000 - O_SYNC = 0x101000 - O_TMPFILE = 0x404000 - O_TRUNC = 0x200 - PARENB = 0x100 - PARODD = 0x200 - PENDIN = 0x4000 - PERF_EVENT_IOC_DISABLE = 0x2401 - PERF_EVENT_IOC_ENABLE = 0x2400 - PERF_EVENT_IOC_ID = 0x80042407 - PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4004240b - PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 - PERF_EVENT_IOC_PERIOD = 0x40082404 - PERF_EVENT_IOC_QUERY_BPF = 0xc004240a - PERF_EVENT_IOC_REFRESH = 0x2402 - PERF_EVENT_IOC_RESET = 0x2403 - PERF_EVENT_IOC_SET_BPF = 0x40042408 - PERF_EVENT_IOC_SET_FILTER = 0x40042406 - PERF_EVENT_IOC_SET_OUTPUT = 0x2405 - PPPIOCATTACH = 0x4004743d - PPPIOCATTCHAN = 0x40047438 - PPPIOCBRIDGECHAN = 0x40047435 - PPPIOCCONNECT = 0x4004743a - PPPIOCDETACH = 0x4004743c - PPPIOCDISCONN = 0x7439 - PPPIOCGASYNCMAP = 0x80047458 - PPPIOCGCHAN = 0x80047437 - PPPIOCGDEBUG = 0x80047441 - PPPIOCGFLAGS = 0x8004745a - PPPIOCGIDLE = 0x8008743f - PPPIOCGIDLE32 = 0x8008743f - PPPIOCGIDLE64 = 0x8010743f - PPPIOCGL2TPSTATS = 0x80487436 - PPPIOCGMRU = 0x80047453 - PPPIOCGRASYNCMAP = 0x80047455 - PPPIOCGUNIT = 0x80047456 - PPPIOCGXASYNCMAP = 0x80207450 - PPPIOCSACTIVE = 0x40087446 - PPPIOCSASYNCMAP = 0x40047457 - PPPIOCSCOMPRESS = 0x400c744d - PPPIOCSDEBUG = 0x40047440 - PPPIOCSFLAGS = 0x40047459 - PPPIOCSMAXCID = 0x40047451 - PPPIOCSMRRU = 0x4004743b - PPPIOCSMRU = 0x40047452 - PPPIOCSNPMODE = 0x4008744b - PPPIOCSPASS = 0x40087447 - PPPIOCSRASYNCMAP = 0x40047454 - PPPIOCSXASYNCMAP = 0x4020744f - PPPIOCUNBRIDGECHAN = 0x7434 - PPPIOCXFERUNIT = 0x744e - PR_SET_PTRACER_ANY = 0xffffffff - PTRACE_GETCRUNCHREGS = 0x19 - PTRACE_GETFDPIC = 0x1f - PTRACE_GETFDPIC_EXEC = 0x0 - PTRACE_GETFDPIC_INTERP = 0x1 - PTRACE_GETFPREGS = 0xe - PTRACE_GETHBPREGS = 0x1d - PTRACE_GETVFPREGS = 0x1b - PTRACE_GETWMMXREGS = 0x12 - PTRACE_GET_THREAD_AREA = 0x16 - PTRACE_OLDSETOPTIONS = 0x15 - PTRACE_SETCRUNCHREGS = 0x1a - PTRACE_SETFPREGS = 0xf - PTRACE_SETHBPREGS = 0x1e - PTRACE_SETVFPREGS = 0x1c - PTRACE_SETWMMXREGS = 0x13 - PTRACE_SET_SYSCALL = 0x17 - PT_DATA_ADDR = 0x10004 - PT_TEXT_ADDR = 0x10000 - PT_TEXT_END_ADDR = 0x10008 - RLIMIT_AS = 0x9 - RLIMIT_MEMLOCK = 0x8 - RLIMIT_NOFILE = 0x7 - RLIMIT_NPROC = 0x6 - RLIMIT_RSS = 0x5 - RNDADDENTROPY = 0x40085203 - RNDADDTOENTCNT = 0x40045201 - RNDCLEARPOOL = 0x5206 - RNDGETENTCNT = 0x80045200 - RNDGETPOOL = 0x80085202 - RNDRESEEDCRNG = 0x5207 - RNDZAPENTCNT = 0x5204 - RTC_AIE_OFF = 0x7002 - RTC_AIE_ON = 0x7001 - RTC_ALM_READ = 0x80247008 - RTC_ALM_SET = 0x40247007 - RTC_EPOCH_READ = 0x8004700d - RTC_EPOCH_SET = 0x4004700e - RTC_IRQP_READ = 0x8004700b - RTC_IRQP_SET = 0x4004700c - RTC_PARAM_GET = 0x40187013 - RTC_PARAM_SET = 0x40187014 - RTC_PIE_OFF = 0x7006 - RTC_PIE_ON = 0x7005 - RTC_PLL_GET = 0x801c7011 - RTC_PLL_SET = 0x401c7012 - RTC_RD_TIME = 0x80247009 - RTC_SET_TIME = 0x4024700a - RTC_UIE_OFF = 0x7004 - RTC_UIE_ON = 0x7003 - RTC_VL_CLR = 0x7014 - RTC_VL_READ = 0x80047013 - RTC_WIE_OFF = 0x7010 - RTC_WIE_ON = 0x700f - RTC_WKALM_RD = 0x80287010 - RTC_WKALM_SET = 0x4028700f - SCM_TIMESTAMPING = 0x25 - SCM_TIMESTAMPING_OPT_STATS = 0x36 - SCM_TIMESTAMPING_PKTINFO = 0x3a - SCM_TIMESTAMPNS = 0x23 - SCM_TXTIME = 0x3d - SCM_WIFI_STATUS = 0x29 - SFD_CLOEXEC = 0x80000 - SFD_NONBLOCK = 0x800 - SIOCATMARK = 0x8905 - SIOCGPGRP = 0x8904 - SIOCGSTAMPNS_NEW = 0x80108907 - SIOCGSTAMP_NEW = 0x80108906 - SIOCINQ = 0x541b - SIOCOUTQ = 0x5411 - SIOCSPGRP = 0x8902 - SOCK_CLOEXEC = 0x80000 - SOCK_DGRAM = 0x2 - SOCK_NONBLOCK = 0x800 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0x1 - SO_ACCEPTCONN = 0x1e - SO_ATTACH_BPF = 0x32 - SO_ATTACH_REUSEPORT_CBPF = 0x33 - SO_ATTACH_REUSEPORT_EBPF = 0x34 - SO_BINDTODEVICE = 0x19 - SO_BINDTOIFINDEX = 0x3e - SO_BPF_EXTENSIONS = 0x30 - SO_BROADCAST = 0x6 - SO_BSDCOMPAT = 0xe - SO_BUF_LOCK = 0x48 - SO_BUSY_POLL = 0x2e - SO_BUSY_POLL_BUDGET = 0x46 - SO_CNX_ADVICE = 0x35 - SO_COOKIE = 0x39 - SO_DETACH_REUSEPORT_BPF = 0x44 - SO_DOMAIN = 0x27 - SO_DONTROUTE = 0x5 - SO_ERROR = 0x4 - SO_INCOMING_CPU = 0x31 - SO_INCOMING_NAPI_ID = 0x38 - SO_KEEPALIVE = 0x9 - SO_LINGER = 0xd - SO_LOCK_FILTER = 0x2c - SO_MARK = 0x24 - SO_MAX_PACING_RATE = 0x2f - SO_MEMINFO = 0x37 - SO_NETNS_COOKIE = 0x47 - SO_NOFCS = 0x2b - SO_OOBINLINE = 0xa - SO_PASSCRED = 0x10 - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x11 - SO_PEERGROUPS = 0x3b - SO_PEERSEC = 0x1f - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x26 - SO_RCVBUF = 0x8 - SO_RCVBUFFORCE = 0x21 - SO_RCVLOWAT = 0x12 - SO_RCVMARK = 0x4b - SO_RCVTIMEO = 0x14 - SO_RCVTIMEO_NEW = 0x42 - SO_RCVTIMEO_OLD = 0x14 - SO_RESERVE_MEM = 0x49 - SO_REUSEADDR = 0x2 - SO_REUSEPORT = 0xf - SO_RXQ_OVFL = 0x28 - SO_SECURITY_AUTHENTICATION = 0x16 - SO_SECURITY_ENCRYPTION_NETWORK = 0x18 - SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 - SO_SELECT_ERR_QUEUE = 0x2d - SO_SNDBUF = 0x7 - SO_SNDBUFFORCE = 0x20 - SO_SNDLOWAT = 0x13 - SO_SNDTIMEO = 0x15 - SO_SNDTIMEO_NEW = 0x43 - SO_SNDTIMEO_OLD = 0x15 - SO_TIMESTAMPING = 0x25 - SO_TIMESTAMPING_NEW = 0x41 - SO_TIMESTAMPING_OLD = 0x25 - SO_TIMESTAMPNS = 0x23 - SO_TIMESTAMPNS_NEW = 0x40 - SO_TIMESTAMPNS_OLD = 0x23 - SO_TIMESTAMP_NEW = 0x3f - SO_TXREHASH = 0x4a - SO_TXTIME = 0x3d - SO_TYPE = 0x3 - SO_WIFI_STATUS = 0x29 - SO_ZEROCOPY = 0x3c - TAB1 = 0x800 - TAB2 = 0x1000 - TAB3 = 0x1800 - TABDLY = 0x1800 - TCFLSH = 0x540b - TCGETA = 0x5405 - TCGETS = 0x5401 - TCGETS2 = 0x802c542a - TCGETX = 0x5432 - TCSAFLUSH = 0x2 - TCSBRK = 0x5409 - TCSBRKP = 0x5425 - TCSETA = 0x5406 - TCSETAF = 0x5408 - TCSETAW = 0x5407 - TCSETS = 0x5402 - TCSETS2 = 0x402c542b - TCSETSF = 0x5404 - TCSETSF2 = 0x402c542d - TCSETSW = 0x5403 - TCSETSW2 = 0x402c542c - TCSETX = 0x5433 - TCSETXF = 0x5434 - TCSETXW = 0x5435 - TCXONC = 0x540a - TFD_CLOEXEC = 0x80000 - TFD_NONBLOCK = 0x800 - TIOCCBRK = 0x5428 - TIOCCONS = 0x541d - TIOCEXCL = 0x540c - TIOCGDEV = 0x80045432 - TIOCGETD = 0x5424 - TIOCGEXCL = 0x80045440 - TIOCGICOUNT = 0x545d - TIOCGISO7816 = 0x80285442 - TIOCGLCKTRMIOS = 0x5456 - TIOCGPGRP = 0x540f - TIOCGPKT = 0x80045438 - TIOCGPTLCK = 0x80045439 - TIOCGPTN = 0x80045430 - TIOCGPTPEER = 0x5441 - TIOCGRS485 = 0x542e - TIOCGSERIAL = 0x541e - TIOCGSID = 0x5429 - TIOCGSOFTCAR = 0x5419 - TIOCGWINSZ = 0x5413 - TIOCINQ = 0x541b - TIOCLINUX = 0x541c - TIOCMBIC = 0x5417 - TIOCMBIS = 0x5416 - TIOCMGET = 0x5415 - TIOCMIWAIT = 0x545c - TIOCMSET = 0x5418 - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x5422 - TIOCNXCL = 0x540d - TIOCOUTQ = 0x5411 - TIOCPKT = 0x5420 - TIOCSBRK = 0x5427 - TIOCSCTTY = 0x540e - TIOCSERCONFIG = 0x5453 - TIOCSERGETLSR = 0x5459 - TIOCSERGETMULTI = 0x545a - TIOCSERGSTRUCT = 0x5458 - TIOCSERGWILD = 0x5454 - TIOCSERSETMULTI = 0x545b - TIOCSERSWILD = 0x5455 - TIOCSER_TEMT = 0x1 - TIOCSETD = 0x5423 - TIOCSIG = 0x40045436 - TIOCSISO7816 = 0xc0285443 - TIOCSLCKTRMIOS = 0x5457 - TIOCSPGRP = 0x5410 - TIOCSPTLCK = 0x40045431 - TIOCSRS485 = 0x542f - TIOCSSERIAL = 0x541f - TIOCSSOFTCAR = 0x541a - TIOCSTI = 0x5412 - TIOCSWINSZ = 0x5414 - TIOCVHANGUP = 0x5437 - TOSTOP = 0x100 - TUNATTACHFILTER = 0x400854d5 - TUNDETACHFILTER = 0x400854d6 - TUNGETDEVNETNS = 0x54e3 - TUNGETFEATURES = 0x800454cf - TUNGETFILTER = 0x800854db - TUNGETIFF = 0x800454d2 - TUNGETSNDBUF = 0x800454d3 - TUNGETVNETBE = 0x800454df - TUNGETVNETHDRSZ = 0x800454d7 - TUNGETVNETLE = 0x800454dd - TUNSETCARRIER = 0x400454e2 - TUNSETDEBUG = 0x400454c9 - TUNSETFILTEREBPF = 0x800454e1 - TUNSETGROUP = 0x400454ce - TUNSETIFF = 0x400454ca - TUNSETIFINDEX = 0x400454da - TUNSETLINK = 0x400454cd - TUNSETNOCSUM = 0x400454c8 - TUNSETOFFLOAD = 0x400454d0 - TUNSETOWNER = 0x400454cc - TUNSETPERSIST = 0x400454cb - TUNSETQUEUE = 0x400454d9 - TUNSETSNDBUF = 0x400454d4 - TUNSETSTEERINGEBPF = 0x800454e0 - TUNSETTXFILTER = 0x400454d1 - TUNSETVNETBE = 0x400454de - TUNSETVNETHDRSZ = 0x400454d8 - TUNSETVNETLE = 0x400454dc - UBI_IOCATT = 0x40186f40 - UBI_IOCDET = 0x40046f41 - UBI_IOCEBCH = 0x40044f02 - UBI_IOCEBER = 0x40044f01 - UBI_IOCEBISMAP = 0x80044f05 - UBI_IOCEBMAP = 0x40084f03 - UBI_IOCEBUNMAP = 0x40044f04 - UBI_IOCMKVOL = 0x40986f00 - UBI_IOCRMVOL = 0x40046f01 - UBI_IOCRNVOL = 0x51106f03 - UBI_IOCRPEB = 0x40046f04 - UBI_IOCRSVOL = 0x400c6f02 - UBI_IOCSETVOLPROP = 0x40104f06 - UBI_IOCSPEB = 0x40046f05 - UBI_IOCVOLCRBLK = 0x40804f07 - UBI_IOCVOLRMBLK = 0x4f08 - UBI_IOCVOLUP = 0x40084f00 - VDISCARD = 0xd - VEOF = 0x4 - VEOL = 0xb - VEOL2 = 0x10 - VMIN = 0x6 - VREPRINT = 0xc - VSTART = 0x8 - VSTOP = 0x9 - VSUSP = 0xa - VSWTC = 0x7 - VT1 = 0x4000 - VTDLY = 0x4000 - VTIME = 0x5 - VWERASE = 0xe - WDIOC_GETBOOTSTATUS = 0x80045702 - WDIOC_GETPRETIMEOUT = 0x80045709 - WDIOC_GETSTATUS = 0x80045701 - WDIOC_GETSUPPORT = 0x80285700 - WDIOC_GETTEMP = 0x80045703 - WDIOC_GETTIMELEFT = 0x8004570a - WDIOC_GETTIMEOUT = 0x80045707 - WDIOC_KEEPALIVE = 0x80045705 - WDIOC_SETOPTIONS = 0x80045704 - WORDSIZE = 0x20 - XCASE = 0x4 - XTABS = 0x1800 - _HIDIOCGRAWNAME = 0x80804804 - _HIDIOCGRAWPHYS = 0x80404805 - _HIDIOCGRAWUNIQ = 0x80404808 -) - -// Errors -const ( - EADDRINUSE = syscall.Errno(0x62) - EADDRNOTAVAIL = syscall.Errno(0x63) - EADV = syscall.Errno(0x44) - EAFNOSUPPORT = syscall.Errno(0x61) - EALREADY = syscall.Errno(0x72) - EBADE = syscall.Errno(0x34) - EBADFD = syscall.Errno(0x4d) - EBADMSG = syscall.Errno(0x4a) - EBADR = syscall.Errno(0x35) - EBADRQC = syscall.Errno(0x38) - EBADSLT = syscall.Errno(0x39) - EBFONT = syscall.Errno(0x3b) - ECANCELED = syscall.Errno(0x7d) - ECHRNG = syscall.Errno(0x2c) - ECOMM = syscall.Errno(0x46) - ECONNABORTED = syscall.Errno(0x67) - ECONNREFUSED = syscall.Errno(0x6f) - ECONNRESET = syscall.Errno(0x68) - EDEADLK = syscall.Errno(0x23) - EDEADLOCK = syscall.Errno(0x23) - EDESTADDRREQ = syscall.Errno(0x59) - EDOTDOT = syscall.Errno(0x49) - EDQUOT = syscall.Errno(0x7a) - EHOSTDOWN = syscall.Errno(0x70) - EHOSTUNREACH = syscall.Errno(0x71) - EHWPOISON = syscall.Errno(0x85) - EIDRM = syscall.Errno(0x2b) - EILSEQ = syscall.Errno(0x54) - EINPROGRESS = syscall.Errno(0x73) - EISCONN = syscall.Errno(0x6a) - EISNAM = syscall.Errno(0x78) - EKEYEXPIRED = syscall.Errno(0x7f) - EKEYREJECTED = syscall.Errno(0x81) - EKEYREVOKED = syscall.Errno(0x80) - EL2HLT = syscall.Errno(0x33) - EL2NSYNC = syscall.Errno(0x2d) - EL3HLT = syscall.Errno(0x2e) - EL3RST = syscall.Errno(0x2f) - ELIBACC = syscall.Errno(0x4f) - ELIBBAD = syscall.Errno(0x50) - ELIBEXEC = syscall.Errno(0x53) - ELIBMAX = syscall.Errno(0x52) - ELIBSCN = syscall.Errno(0x51) - ELNRNG = syscall.Errno(0x30) - ELOOP = syscall.Errno(0x28) - EMEDIUMTYPE = syscall.Errno(0x7c) - EMSGSIZE = syscall.Errno(0x5a) - EMULTIHOP = syscall.Errno(0x48) - ENAMETOOLONG = syscall.Errno(0x24) - ENAVAIL = syscall.Errno(0x77) - ENETDOWN = syscall.Errno(0x64) - ENETRESET = syscall.Errno(0x66) - ENETUNREACH = syscall.Errno(0x65) - ENOANO = syscall.Errno(0x37) - ENOBUFS = syscall.Errno(0x69) - ENOCSI = syscall.Errno(0x32) - ENODATA = syscall.Errno(0x3d) - ENOKEY = syscall.Errno(0x7e) - ENOLCK = syscall.Errno(0x25) - ENOLINK = syscall.Errno(0x43) - ENOMEDIUM = syscall.Errno(0x7b) - ENOMSG = syscall.Errno(0x2a) - ENONET = syscall.Errno(0x40) - ENOPKG = syscall.Errno(0x41) - ENOPROTOOPT = syscall.Errno(0x5c) - ENOSR = syscall.Errno(0x3f) - ENOSTR = syscall.Errno(0x3c) - ENOSYS = syscall.Errno(0x26) - ENOTCONN = syscall.Errno(0x6b) - ENOTEMPTY = syscall.Errno(0x27) - ENOTNAM = syscall.Errno(0x76) - ENOTRECOVERABLE = syscall.Errno(0x83) - ENOTSOCK = syscall.Errno(0x58) - ENOTSUP = syscall.Errno(0x5f) - ENOTUNIQ = syscall.Errno(0x4c) - EOPNOTSUPP = syscall.Errno(0x5f) - EOVERFLOW = syscall.Errno(0x4b) - EOWNERDEAD = syscall.Errno(0x82) - EPFNOSUPPORT = syscall.Errno(0x60) - EPROTO = syscall.Errno(0x47) - EPROTONOSUPPORT = syscall.Errno(0x5d) - EPROTOTYPE = syscall.Errno(0x5b) - EREMCHG = syscall.Errno(0x4e) - EREMOTE = syscall.Errno(0x42) - EREMOTEIO = syscall.Errno(0x79) - ERESTART = syscall.Errno(0x55) - ERFKILL = syscall.Errno(0x84) - ESHUTDOWN = syscall.Errno(0x6c) - ESOCKTNOSUPPORT = syscall.Errno(0x5e) - ESRMNT = syscall.Errno(0x45) - ESTALE = syscall.Errno(0x74) - ESTRPIPE = syscall.Errno(0x56) - ETIME = syscall.Errno(0x3e) - ETIMEDOUT = syscall.Errno(0x6e) - ETOOMANYREFS = syscall.Errno(0x6d) - EUCLEAN = syscall.Errno(0x75) - EUNATCH = syscall.Errno(0x31) - EUSERS = syscall.Errno(0x57) - EXFULL = syscall.Errno(0x36) -) - -// Signals -const ( - SIGBUS = syscall.Signal(0x7) - SIGCHLD = syscall.Signal(0x11) - SIGCLD = syscall.Signal(0x11) - SIGCONT = syscall.Signal(0x12) - SIGIO = syscall.Signal(0x1d) - SIGPOLL = syscall.Signal(0x1d) - SIGPROF = syscall.Signal(0x1b) - SIGPWR = syscall.Signal(0x1e) - SIGSTKFLT = syscall.Signal(0x10) - SIGSTOP = syscall.Signal(0x13) - SIGSYS = syscall.Signal(0x1f) - SIGTSTP = syscall.Signal(0x14) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x17) - SIGUSR1 = syscall.Signal(0xa) - SIGUSR2 = syscall.Signal(0xc) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "no such device or address"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EAGAIN", "resource temporarily unavailable"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device or resource busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "invalid cross-device link"}, - {19, "ENODEV", "no such device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "numerical result out of range"}, - {35, "EDEADLK", "resource deadlock avoided"}, - {36, "ENAMETOOLONG", "file name too long"}, - {37, "ENOLCK", "no locks available"}, - {38, "ENOSYS", "function not implemented"}, - {39, "ENOTEMPTY", "directory not empty"}, - {40, "ELOOP", "too many levels of symbolic links"}, - {42, "ENOMSG", "no message of desired type"}, - {43, "EIDRM", "identifier removed"}, - {44, "ECHRNG", "channel number out of range"}, - {45, "EL2NSYNC", "level 2 not synchronized"}, - {46, "EL3HLT", "level 3 halted"}, - {47, "EL3RST", "level 3 reset"}, - {48, "ELNRNG", "link number out of range"}, - {49, "EUNATCH", "protocol driver not attached"}, - {50, "ENOCSI", "no CSI structure available"}, - {51, "EL2HLT", "level 2 halted"}, - {52, "EBADE", "invalid exchange"}, - {53, "EBADR", "invalid request descriptor"}, - {54, "EXFULL", "exchange full"}, - {55, "ENOANO", "no anode"}, - {56, "EBADRQC", "invalid request code"}, - {57, "EBADSLT", "invalid slot"}, - {59, "EBFONT", "bad font file format"}, - {60, "ENOSTR", "device not a stream"}, - {61, "ENODATA", "no data available"}, - {62, "ETIME", "timer expired"}, - {63, "ENOSR", "out of streams resources"}, - {64, "ENONET", "machine is not on the network"}, - {65, "ENOPKG", "package not installed"}, - {66, "EREMOTE", "object is remote"}, - {67, "ENOLINK", "link has been severed"}, - {68, "EADV", "advertise error"}, - {69, "ESRMNT", "srmount error"}, - {70, "ECOMM", "communication error on send"}, - {71, "EPROTO", "protocol error"}, - {72, "EMULTIHOP", "multihop attempted"}, - {73, "EDOTDOT", "RFS specific error"}, - {74, "EBADMSG", "bad message"}, - {75, "EOVERFLOW", "value too large for defined data type"}, - {76, "ENOTUNIQ", "name not unique on network"}, - {77, "EBADFD", "file descriptor in bad state"}, - {78, "EREMCHG", "remote address changed"}, - {79, "ELIBACC", "can not access a needed shared library"}, - {80, "ELIBBAD", "accessing a corrupted shared library"}, - {81, "ELIBSCN", ".lib section in a.out corrupted"}, - {82, "ELIBMAX", "attempting to link in too many shared libraries"}, - {83, "ELIBEXEC", "cannot exec a shared library directly"}, - {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, - {85, "ERESTART", "interrupted system call should be restarted"}, - {86, "ESTRPIPE", "streams pipe error"}, - {87, "EUSERS", "too many users"}, - {88, "ENOTSOCK", "socket operation on non-socket"}, - {89, "EDESTADDRREQ", "destination address required"}, - {90, "EMSGSIZE", "message too long"}, - {91, "EPROTOTYPE", "protocol wrong type for socket"}, - {92, "ENOPROTOOPT", "protocol not available"}, - {93, "EPROTONOSUPPORT", "protocol not supported"}, - {94, "ESOCKTNOSUPPORT", "socket type not supported"}, - {95, "ENOTSUP", "operation not supported"}, - {96, "EPFNOSUPPORT", "protocol family not supported"}, - {97, "EAFNOSUPPORT", "address family not supported by protocol"}, - {98, "EADDRINUSE", "address already in use"}, - {99, "EADDRNOTAVAIL", "cannot assign requested address"}, - {100, "ENETDOWN", "network is down"}, - {101, "ENETUNREACH", "network is unreachable"}, - {102, "ENETRESET", "network dropped connection on reset"}, - {103, "ECONNABORTED", "software caused connection abort"}, - {104, "ECONNRESET", "connection reset by peer"}, - {105, "ENOBUFS", "no buffer space available"}, - {106, "EISCONN", "transport endpoint is already connected"}, - {107, "ENOTCONN", "transport endpoint is not connected"}, - {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, - {109, "ETOOMANYREFS", "too many references: cannot splice"}, - {110, "ETIMEDOUT", "connection timed out"}, - {111, "ECONNREFUSED", "connection refused"}, - {112, "EHOSTDOWN", "host is down"}, - {113, "EHOSTUNREACH", "no route to host"}, - {114, "EALREADY", "operation already in progress"}, - {115, "EINPROGRESS", "operation now in progress"}, - {116, "ESTALE", "stale file handle"}, - {117, "EUCLEAN", "structure needs cleaning"}, - {118, "ENOTNAM", "not a XENIX named type file"}, - {119, "ENAVAIL", "no XENIX semaphores available"}, - {120, "EISNAM", "is a named type file"}, - {121, "EREMOTEIO", "remote I/O error"}, - {122, "EDQUOT", "disk quota exceeded"}, - {123, "ENOMEDIUM", "no medium found"}, - {124, "EMEDIUMTYPE", "wrong medium type"}, - {125, "ECANCELED", "operation canceled"}, - {126, "ENOKEY", "required key not available"}, - {127, "EKEYEXPIRED", "key has expired"}, - {128, "EKEYREVOKED", "key has been revoked"}, - {129, "EKEYREJECTED", "key was rejected by service"}, - {130, "EOWNERDEAD", "owner died"}, - {131, "ENOTRECOVERABLE", "state not recoverable"}, - {132, "ERFKILL", "operation not possible due to RF-kill"}, - {133, "EHWPOISON", "memory page has hardware error"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/breakpoint trap"}, - {6, "SIGABRT", "aborted"}, - {7, "SIGBUS", "bus error"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGUSR1", "user defined signal 1"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGUSR2", "user defined signal 2"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGSTKFLT", "stack fault"}, - {17, "SIGCHLD", "child exited"}, - {18, "SIGCONT", "continued"}, - {19, "SIGSTOP", "stopped (signal)"}, - {20, "SIGTSTP", "stopped"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGURG", "urgent I/O condition"}, - {24, "SIGXCPU", "CPU time limit exceeded"}, - {25, "SIGXFSZ", "file size limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window changed"}, - {29, "SIGIO", "I/O possible"}, - {30, "SIGPWR", "power failure"}, - {31, "SIGSYS", "bad system call"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go deleted file mode 100644 index d7995bd..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ /dev/null @@ -1,826 +0,0 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/arm64/include -fsigned-char -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm64 && linux -// +build arm64,linux - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/arm64/include -fsigned-char _const.go - -package unix - -import "syscall" - -const ( - B1000000 = 0x1008 - B115200 = 0x1002 - B1152000 = 0x1009 - B1500000 = 0x100a - B2000000 = 0x100b - B230400 = 0x1003 - B2500000 = 0x100c - B3000000 = 0x100d - B3500000 = 0x100e - B4000000 = 0x100f - B460800 = 0x1004 - B500000 = 0x1005 - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 - BLKBSZGET = 0x80081270 - BLKBSZSET = 0x40081271 - BLKFLSBUF = 0x1261 - BLKFRAGET = 0x1265 - BLKFRASET = 0x1264 - BLKGETSIZE = 0x1260 - BLKGETSIZE64 = 0x80081272 - BLKPBSZGET = 0x127b - BLKRAGET = 0x1263 - BLKRASET = 0x1262 - BLKROGET = 0x125e - BLKROSET = 0x125d - BLKRRPART = 0x125f - BLKSECTGET = 0x1267 - BLKSECTSET = 0x1266 - BLKSSZGET = 0x1268 - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 - CBAUD = 0x100f - CBAUDEX = 0x1000 - CIBAUD = 0x100f0000 - CLOCAL = 0x800 - CR1 = 0x200 - CR2 = 0x400 - CR3 = 0x600 - CRDLY = 0x600 - CREAD = 0x80 - CS6 = 0x10 - CS7 = 0x20 - CS8 = 0x30 - CSIZE = 0x30 - CSTOPB = 0x40 - ECCGETLAYOUT = 0x81484d11 - ECCGETSTATS = 0x80104d12 - ECHOCTL = 0x200 - ECHOE = 0x10 - ECHOK = 0x20 - ECHOKE = 0x800 - ECHONL = 0x40 - ECHOPRT = 0x400 - EFD_CLOEXEC = 0x80000 - EFD_NONBLOCK = 0x800 - EPOLL_CLOEXEC = 0x80000 - ESR_MAGIC = 0x45535201 - EXTPROC = 0x10000 - EXTRA_MAGIC = 0x45585401 - FF1 = 0x8000 - FFDLY = 0x8000 - FICLONE = 0x40049409 - FICLONERANGE = 0x4020940d - FLUSHO = 0x1000 - FPSIMD_MAGIC = 0x46508001 - FS_IOC_ENABLE_VERITY = 0x40806685 - FS_IOC_GETFLAGS = 0x80086601 - FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b - FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 - FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 - FS_IOC_SETFLAGS = 0x40086602 - FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 - F_GETLK = 0x5 - F_GETLK64 = 0x5 - F_GETOWN = 0x9 - F_RDLCK = 0x0 - F_SETLK = 0x6 - F_SETLK64 = 0x6 - F_SETLKW = 0x7 - F_SETLKW64 = 0x7 - F_SETOWN = 0x8 - F_UNLCK = 0x2 - F_WRLCK = 0x1 - HIDIOCGRAWINFO = 0x80084803 - HIDIOCGRDESC = 0x90044802 - HIDIOCGRDESCSIZE = 0x80044801 - HUPCL = 0x400 - ICANON = 0x2 - IEXTEN = 0x8000 - IN_CLOEXEC = 0x80000 - IN_NONBLOCK = 0x800 - IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 - ISIG = 0x1 - IUCLC = 0x200 - IXOFF = 0x1000 - IXON = 0x400 - MAP_ANON = 0x20 - MAP_ANONYMOUS = 0x20 - MAP_DENYWRITE = 0x800 - MAP_EXECUTABLE = 0x1000 - MAP_GROWSDOWN = 0x100 - MAP_HUGETLB = 0x40000 - MAP_LOCKED = 0x2000 - MAP_NONBLOCK = 0x10000 - MAP_NORESERVE = 0x4000 - MAP_POPULATE = 0x8000 - MAP_STACK = 0x20000 - MAP_SYNC = 0x80000 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MCL_ONFAULT = 0x4 - MEMERASE = 0x40084d02 - MEMERASE64 = 0x40104d14 - MEMGETBADBLOCK = 0x40084d0b - MEMGETINFO = 0x80204d01 - MEMGETOOBSEL = 0x80c84d0a - MEMGETREGIONCOUNT = 0x80044d07 - MEMISLOCKED = 0x80084d17 - MEMLOCK = 0x40084d05 - MEMREADOOB = 0xc0104d04 - MEMSETBADBLOCK = 0x40084d0c - MEMUNLOCK = 0x40084d06 - MEMWRITEOOB = 0xc0104d03 - MTDFILEMODE = 0x4d13 - NFDBITS = 0x40 - NLDLY = 0x100 - NOFLSH = 0x80 - NS_GET_NSTYPE = 0xb703 - NS_GET_OWNER_UID = 0xb704 - NS_GET_PARENT = 0xb702 - NS_GET_USERNS = 0xb701 - OLCUC = 0x2 - ONLCR = 0x4 - OTPERASE = 0x400c4d19 - OTPGETREGIONCOUNT = 0x40044d0e - OTPGETREGIONINFO = 0x400c4d0f - OTPLOCK = 0x800c4d10 - OTPSELECT = 0x80044d0d - O_APPEND = 0x400 - O_ASYNC = 0x2000 - O_CLOEXEC = 0x80000 - O_CREAT = 0x40 - O_DIRECT = 0x10000 - O_DIRECTORY = 0x4000 - O_DSYNC = 0x1000 - O_EXCL = 0x80 - O_FSYNC = 0x101000 - O_LARGEFILE = 0x0 - O_NDELAY = 0x800 - O_NOATIME = 0x40000 - O_NOCTTY = 0x100 - O_NOFOLLOW = 0x8000 - O_NONBLOCK = 0x800 - O_PATH = 0x200000 - O_RSYNC = 0x101000 - O_SYNC = 0x101000 - O_TMPFILE = 0x404000 - O_TRUNC = 0x200 - PARENB = 0x100 - PARODD = 0x200 - PENDIN = 0x4000 - PERF_EVENT_IOC_DISABLE = 0x2401 - PERF_EVENT_IOC_ENABLE = 0x2400 - PERF_EVENT_IOC_ID = 0x80082407 - PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b - PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 - PERF_EVENT_IOC_PERIOD = 0x40082404 - PERF_EVENT_IOC_QUERY_BPF = 0xc008240a - PERF_EVENT_IOC_REFRESH = 0x2402 - PERF_EVENT_IOC_RESET = 0x2403 - PERF_EVENT_IOC_SET_BPF = 0x40042408 - PERF_EVENT_IOC_SET_FILTER = 0x40082406 - PERF_EVENT_IOC_SET_OUTPUT = 0x2405 - PPPIOCATTACH = 0x4004743d - PPPIOCATTCHAN = 0x40047438 - PPPIOCBRIDGECHAN = 0x40047435 - PPPIOCCONNECT = 0x4004743a - PPPIOCDETACH = 0x4004743c - PPPIOCDISCONN = 0x7439 - PPPIOCGASYNCMAP = 0x80047458 - PPPIOCGCHAN = 0x80047437 - PPPIOCGDEBUG = 0x80047441 - PPPIOCGFLAGS = 0x8004745a - PPPIOCGIDLE = 0x8010743f - PPPIOCGIDLE32 = 0x8008743f - PPPIOCGIDLE64 = 0x8010743f - PPPIOCGL2TPSTATS = 0x80487436 - PPPIOCGMRU = 0x80047453 - PPPIOCGRASYNCMAP = 0x80047455 - PPPIOCGUNIT = 0x80047456 - PPPIOCGXASYNCMAP = 0x80207450 - PPPIOCSACTIVE = 0x40107446 - PPPIOCSASYNCMAP = 0x40047457 - PPPIOCSCOMPRESS = 0x4010744d - PPPIOCSDEBUG = 0x40047440 - PPPIOCSFLAGS = 0x40047459 - PPPIOCSMAXCID = 0x40047451 - PPPIOCSMRRU = 0x4004743b - PPPIOCSMRU = 0x40047452 - PPPIOCSNPMODE = 0x4008744b - PPPIOCSPASS = 0x40107447 - PPPIOCSRASYNCMAP = 0x40047454 - PPPIOCSXASYNCMAP = 0x4020744f - PPPIOCUNBRIDGECHAN = 0x7434 - PPPIOCXFERUNIT = 0x744e - PROT_BTI = 0x10 - PROT_MTE = 0x20 - PR_SET_PTRACER_ANY = 0xffffffffffffffff - PTRACE_PEEKMTETAGS = 0x21 - PTRACE_POKEMTETAGS = 0x22 - PTRACE_SYSEMU = 0x1f - PTRACE_SYSEMU_SINGLESTEP = 0x20 - RLIMIT_AS = 0x9 - RLIMIT_MEMLOCK = 0x8 - RLIMIT_NOFILE = 0x7 - RLIMIT_NPROC = 0x6 - RLIMIT_RSS = 0x5 - RNDADDENTROPY = 0x40085203 - RNDADDTOENTCNT = 0x40045201 - RNDCLEARPOOL = 0x5206 - RNDGETENTCNT = 0x80045200 - RNDGETPOOL = 0x80085202 - RNDRESEEDCRNG = 0x5207 - RNDZAPENTCNT = 0x5204 - RTC_AIE_OFF = 0x7002 - RTC_AIE_ON = 0x7001 - RTC_ALM_READ = 0x80247008 - RTC_ALM_SET = 0x40247007 - RTC_EPOCH_READ = 0x8008700d - RTC_EPOCH_SET = 0x4008700e - RTC_IRQP_READ = 0x8008700b - RTC_IRQP_SET = 0x4008700c - RTC_PARAM_GET = 0x40187013 - RTC_PARAM_SET = 0x40187014 - RTC_PIE_OFF = 0x7006 - RTC_PIE_ON = 0x7005 - RTC_PLL_GET = 0x80207011 - RTC_PLL_SET = 0x40207012 - RTC_RD_TIME = 0x80247009 - RTC_SET_TIME = 0x4024700a - RTC_UIE_OFF = 0x7004 - RTC_UIE_ON = 0x7003 - RTC_VL_CLR = 0x7014 - RTC_VL_READ = 0x80047013 - RTC_WIE_OFF = 0x7010 - RTC_WIE_ON = 0x700f - RTC_WKALM_RD = 0x80287010 - RTC_WKALM_SET = 0x4028700f - SCM_TIMESTAMPING = 0x25 - SCM_TIMESTAMPING_OPT_STATS = 0x36 - SCM_TIMESTAMPING_PKTINFO = 0x3a - SCM_TIMESTAMPNS = 0x23 - SCM_TXTIME = 0x3d - SCM_WIFI_STATUS = 0x29 - SFD_CLOEXEC = 0x80000 - SFD_NONBLOCK = 0x800 - SIOCATMARK = 0x8905 - SIOCGPGRP = 0x8904 - SIOCGSTAMPNS_NEW = 0x80108907 - SIOCGSTAMP_NEW = 0x80108906 - SIOCINQ = 0x541b - SIOCOUTQ = 0x5411 - SIOCSPGRP = 0x8902 - SOCK_CLOEXEC = 0x80000 - SOCK_DGRAM = 0x2 - SOCK_NONBLOCK = 0x800 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0x1 - SO_ACCEPTCONN = 0x1e - SO_ATTACH_BPF = 0x32 - SO_ATTACH_REUSEPORT_CBPF = 0x33 - SO_ATTACH_REUSEPORT_EBPF = 0x34 - SO_BINDTODEVICE = 0x19 - SO_BINDTOIFINDEX = 0x3e - SO_BPF_EXTENSIONS = 0x30 - SO_BROADCAST = 0x6 - SO_BSDCOMPAT = 0xe - SO_BUF_LOCK = 0x48 - SO_BUSY_POLL = 0x2e - SO_BUSY_POLL_BUDGET = 0x46 - SO_CNX_ADVICE = 0x35 - SO_COOKIE = 0x39 - SO_DETACH_REUSEPORT_BPF = 0x44 - SO_DOMAIN = 0x27 - SO_DONTROUTE = 0x5 - SO_ERROR = 0x4 - SO_INCOMING_CPU = 0x31 - SO_INCOMING_NAPI_ID = 0x38 - SO_KEEPALIVE = 0x9 - SO_LINGER = 0xd - SO_LOCK_FILTER = 0x2c - SO_MARK = 0x24 - SO_MAX_PACING_RATE = 0x2f - SO_MEMINFO = 0x37 - SO_NETNS_COOKIE = 0x47 - SO_NOFCS = 0x2b - SO_OOBINLINE = 0xa - SO_PASSCRED = 0x10 - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x11 - SO_PEERGROUPS = 0x3b - SO_PEERSEC = 0x1f - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x26 - SO_RCVBUF = 0x8 - SO_RCVBUFFORCE = 0x21 - SO_RCVLOWAT = 0x12 - SO_RCVMARK = 0x4b - SO_RCVTIMEO = 0x14 - SO_RCVTIMEO_NEW = 0x42 - SO_RCVTIMEO_OLD = 0x14 - SO_RESERVE_MEM = 0x49 - SO_REUSEADDR = 0x2 - SO_REUSEPORT = 0xf - SO_RXQ_OVFL = 0x28 - SO_SECURITY_AUTHENTICATION = 0x16 - SO_SECURITY_ENCRYPTION_NETWORK = 0x18 - SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 - SO_SELECT_ERR_QUEUE = 0x2d - SO_SNDBUF = 0x7 - SO_SNDBUFFORCE = 0x20 - SO_SNDLOWAT = 0x13 - SO_SNDTIMEO = 0x15 - SO_SNDTIMEO_NEW = 0x43 - SO_SNDTIMEO_OLD = 0x15 - SO_TIMESTAMPING = 0x25 - SO_TIMESTAMPING_NEW = 0x41 - SO_TIMESTAMPING_OLD = 0x25 - SO_TIMESTAMPNS = 0x23 - SO_TIMESTAMPNS_NEW = 0x40 - SO_TIMESTAMPNS_OLD = 0x23 - SO_TIMESTAMP_NEW = 0x3f - SO_TXREHASH = 0x4a - SO_TXTIME = 0x3d - SO_TYPE = 0x3 - SO_WIFI_STATUS = 0x29 - SO_ZEROCOPY = 0x3c - SVE_MAGIC = 0x53564501 - TAB1 = 0x800 - TAB2 = 0x1000 - TAB3 = 0x1800 - TABDLY = 0x1800 - TCFLSH = 0x540b - TCGETA = 0x5405 - TCGETS = 0x5401 - TCGETS2 = 0x802c542a - TCGETX = 0x5432 - TCSAFLUSH = 0x2 - TCSBRK = 0x5409 - TCSBRKP = 0x5425 - TCSETA = 0x5406 - TCSETAF = 0x5408 - TCSETAW = 0x5407 - TCSETS = 0x5402 - TCSETS2 = 0x402c542b - TCSETSF = 0x5404 - TCSETSF2 = 0x402c542d - TCSETSW = 0x5403 - TCSETSW2 = 0x402c542c - TCSETX = 0x5433 - TCSETXF = 0x5434 - TCSETXW = 0x5435 - TCXONC = 0x540a - TFD_CLOEXEC = 0x80000 - TFD_NONBLOCK = 0x800 - TIOCCBRK = 0x5428 - TIOCCONS = 0x541d - TIOCEXCL = 0x540c - TIOCGDEV = 0x80045432 - TIOCGETD = 0x5424 - TIOCGEXCL = 0x80045440 - TIOCGICOUNT = 0x545d - TIOCGISO7816 = 0x80285442 - TIOCGLCKTRMIOS = 0x5456 - TIOCGPGRP = 0x540f - TIOCGPKT = 0x80045438 - TIOCGPTLCK = 0x80045439 - TIOCGPTN = 0x80045430 - TIOCGPTPEER = 0x5441 - TIOCGRS485 = 0x542e - TIOCGSERIAL = 0x541e - TIOCGSID = 0x5429 - TIOCGSOFTCAR = 0x5419 - TIOCGWINSZ = 0x5413 - TIOCINQ = 0x541b - TIOCLINUX = 0x541c - TIOCMBIC = 0x5417 - TIOCMBIS = 0x5416 - TIOCMGET = 0x5415 - TIOCMIWAIT = 0x545c - TIOCMSET = 0x5418 - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x5422 - TIOCNXCL = 0x540d - TIOCOUTQ = 0x5411 - TIOCPKT = 0x5420 - TIOCSBRK = 0x5427 - TIOCSCTTY = 0x540e - TIOCSERCONFIG = 0x5453 - TIOCSERGETLSR = 0x5459 - TIOCSERGETMULTI = 0x545a - TIOCSERGSTRUCT = 0x5458 - TIOCSERGWILD = 0x5454 - TIOCSERSETMULTI = 0x545b - TIOCSERSWILD = 0x5455 - TIOCSER_TEMT = 0x1 - TIOCSETD = 0x5423 - TIOCSIG = 0x40045436 - TIOCSISO7816 = 0xc0285443 - TIOCSLCKTRMIOS = 0x5457 - TIOCSPGRP = 0x5410 - TIOCSPTLCK = 0x40045431 - TIOCSRS485 = 0x542f - TIOCSSERIAL = 0x541f - TIOCSSOFTCAR = 0x541a - TIOCSTI = 0x5412 - TIOCSWINSZ = 0x5414 - TIOCVHANGUP = 0x5437 - TOSTOP = 0x100 - TUNATTACHFILTER = 0x401054d5 - TUNDETACHFILTER = 0x401054d6 - TUNGETDEVNETNS = 0x54e3 - TUNGETFEATURES = 0x800454cf - TUNGETFILTER = 0x801054db - TUNGETIFF = 0x800454d2 - TUNGETSNDBUF = 0x800454d3 - TUNGETVNETBE = 0x800454df - TUNGETVNETHDRSZ = 0x800454d7 - TUNGETVNETLE = 0x800454dd - TUNSETCARRIER = 0x400454e2 - TUNSETDEBUG = 0x400454c9 - TUNSETFILTEREBPF = 0x800454e1 - TUNSETGROUP = 0x400454ce - TUNSETIFF = 0x400454ca - TUNSETIFINDEX = 0x400454da - TUNSETLINK = 0x400454cd - TUNSETNOCSUM = 0x400454c8 - TUNSETOFFLOAD = 0x400454d0 - TUNSETOWNER = 0x400454cc - TUNSETPERSIST = 0x400454cb - TUNSETQUEUE = 0x400454d9 - TUNSETSNDBUF = 0x400454d4 - TUNSETSTEERINGEBPF = 0x800454e0 - TUNSETTXFILTER = 0x400454d1 - TUNSETVNETBE = 0x400454de - TUNSETVNETHDRSZ = 0x400454d8 - TUNSETVNETLE = 0x400454dc - UBI_IOCATT = 0x40186f40 - UBI_IOCDET = 0x40046f41 - UBI_IOCEBCH = 0x40044f02 - UBI_IOCEBER = 0x40044f01 - UBI_IOCEBISMAP = 0x80044f05 - UBI_IOCEBMAP = 0x40084f03 - UBI_IOCEBUNMAP = 0x40044f04 - UBI_IOCMKVOL = 0x40986f00 - UBI_IOCRMVOL = 0x40046f01 - UBI_IOCRNVOL = 0x51106f03 - UBI_IOCRPEB = 0x40046f04 - UBI_IOCRSVOL = 0x400c6f02 - UBI_IOCSETVOLPROP = 0x40104f06 - UBI_IOCSPEB = 0x40046f05 - UBI_IOCVOLCRBLK = 0x40804f07 - UBI_IOCVOLRMBLK = 0x4f08 - UBI_IOCVOLUP = 0x40084f00 - VDISCARD = 0xd - VEOF = 0x4 - VEOL = 0xb - VEOL2 = 0x10 - VMIN = 0x6 - VREPRINT = 0xc - VSTART = 0x8 - VSTOP = 0x9 - VSUSP = 0xa - VSWTC = 0x7 - VT1 = 0x4000 - VTDLY = 0x4000 - VTIME = 0x5 - VWERASE = 0xe - WDIOC_GETBOOTSTATUS = 0x80045702 - WDIOC_GETPRETIMEOUT = 0x80045709 - WDIOC_GETSTATUS = 0x80045701 - WDIOC_GETSUPPORT = 0x80285700 - WDIOC_GETTEMP = 0x80045703 - WDIOC_GETTIMELEFT = 0x8004570a - WDIOC_GETTIMEOUT = 0x80045707 - WDIOC_KEEPALIVE = 0x80045705 - WDIOC_SETOPTIONS = 0x80045704 - WORDSIZE = 0x40 - XCASE = 0x4 - XTABS = 0x1800 - ZA_MAGIC = 0x54366345 - _HIDIOCGRAWNAME = 0x80804804 - _HIDIOCGRAWPHYS = 0x80404805 - _HIDIOCGRAWUNIQ = 0x80404808 -) - -// Errors -const ( - EADDRINUSE = syscall.Errno(0x62) - EADDRNOTAVAIL = syscall.Errno(0x63) - EADV = syscall.Errno(0x44) - EAFNOSUPPORT = syscall.Errno(0x61) - EALREADY = syscall.Errno(0x72) - EBADE = syscall.Errno(0x34) - EBADFD = syscall.Errno(0x4d) - EBADMSG = syscall.Errno(0x4a) - EBADR = syscall.Errno(0x35) - EBADRQC = syscall.Errno(0x38) - EBADSLT = syscall.Errno(0x39) - EBFONT = syscall.Errno(0x3b) - ECANCELED = syscall.Errno(0x7d) - ECHRNG = syscall.Errno(0x2c) - ECOMM = syscall.Errno(0x46) - ECONNABORTED = syscall.Errno(0x67) - ECONNREFUSED = syscall.Errno(0x6f) - ECONNRESET = syscall.Errno(0x68) - EDEADLK = syscall.Errno(0x23) - EDEADLOCK = syscall.Errno(0x23) - EDESTADDRREQ = syscall.Errno(0x59) - EDOTDOT = syscall.Errno(0x49) - EDQUOT = syscall.Errno(0x7a) - EHOSTDOWN = syscall.Errno(0x70) - EHOSTUNREACH = syscall.Errno(0x71) - EHWPOISON = syscall.Errno(0x85) - EIDRM = syscall.Errno(0x2b) - EILSEQ = syscall.Errno(0x54) - EINPROGRESS = syscall.Errno(0x73) - EISCONN = syscall.Errno(0x6a) - EISNAM = syscall.Errno(0x78) - EKEYEXPIRED = syscall.Errno(0x7f) - EKEYREJECTED = syscall.Errno(0x81) - EKEYREVOKED = syscall.Errno(0x80) - EL2HLT = syscall.Errno(0x33) - EL2NSYNC = syscall.Errno(0x2d) - EL3HLT = syscall.Errno(0x2e) - EL3RST = syscall.Errno(0x2f) - ELIBACC = syscall.Errno(0x4f) - ELIBBAD = syscall.Errno(0x50) - ELIBEXEC = syscall.Errno(0x53) - ELIBMAX = syscall.Errno(0x52) - ELIBSCN = syscall.Errno(0x51) - ELNRNG = syscall.Errno(0x30) - ELOOP = syscall.Errno(0x28) - EMEDIUMTYPE = syscall.Errno(0x7c) - EMSGSIZE = syscall.Errno(0x5a) - EMULTIHOP = syscall.Errno(0x48) - ENAMETOOLONG = syscall.Errno(0x24) - ENAVAIL = syscall.Errno(0x77) - ENETDOWN = syscall.Errno(0x64) - ENETRESET = syscall.Errno(0x66) - ENETUNREACH = syscall.Errno(0x65) - ENOANO = syscall.Errno(0x37) - ENOBUFS = syscall.Errno(0x69) - ENOCSI = syscall.Errno(0x32) - ENODATA = syscall.Errno(0x3d) - ENOKEY = syscall.Errno(0x7e) - ENOLCK = syscall.Errno(0x25) - ENOLINK = syscall.Errno(0x43) - ENOMEDIUM = syscall.Errno(0x7b) - ENOMSG = syscall.Errno(0x2a) - ENONET = syscall.Errno(0x40) - ENOPKG = syscall.Errno(0x41) - ENOPROTOOPT = syscall.Errno(0x5c) - ENOSR = syscall.Errno(0x3f) - ENOSTR = syscall.Errno(0x3c) - ENOSYS = syscall.Errno(0x26) - ENOTCONN = syscall.Errno(0x6b) - ENOTEMPTY = syscall.Errno(0x27) - ENOTNAM = syscall.Errno(0x76) - ENOTRECOVERABLE = syscall.Errno(0x83) - ENOTSOCK = syscall.Errno(0x58) - ENOTSUP = syscall.Errno(0x5f) - ENOTUNIQ = syscall.Errno(0x4c) - EOPNOTSUPP = syscall.Errno(0x5f) - EOVERFLOW = syscall.Errno(0x4b) - EOWNERDEAD = syscall.Errno(0x82) - EPFNOSUPPORT = syscall.Errno(0x60) - EPROTO = syscall.Errno(0x47) - EPROTONOSUPPORT = syscall.Errno(0x5d) - EPROTOTYPE = syscall.Errno(0x5b) - EREMCHG = syscall.Errno(0x4e) - EREMOTE = syscall.Errno(0x42) - EREMOTEIO = syscall.Errno(0x79) - ERESTART = syscall.Errno(0x55) - ERFKILL = syscall.Errno(0x84) - ESHUTDOWN = syscall.Errno(0x6c) - ESOCKTNOSUPPORT = syscall.Errno(0x5e) - ESRMNT = syscall.Errno(0x45) - ESTALE = syscall.Errno(0x74) - ESTRPIPE = syscall.Errno(0x56) - ETIME = syscall.Errno(0x3e) - ETIMEDOUT = syscall.Errno(0x6e) - ETOOMANYREFS = syscall.Errno(0x6d) - EUCLEAN = syscall.Errno(0x75) - EUNATCH = syscall.Errno(0x31) - EUSERS = syscall.Errno(0x57) - EXFULL = syscall.Errno(0x36) -) - -// Signals -const ( - SIGBUS = syscall.Signal(0x7) - SIGCHLD = syscall.Signal(0x11) - SIGCLD = syscall.Signal(0x11) - SIGCONT = syscall.Signal(0x12) - SIGIO = syscall.Signal(0x1d) - SIGPOLL = syscall.Signal(0x1d) - SIGPROF = syscall.Signal(0x1b) - SIGPWR = syscall.Signal(0x1e) - SIGSTKFLT = syscall.Signal(0x10) - SIGSTOP = syscall.Signal(0x13) - SIGSYS = syscall.Signal(0x1f) - SIGTSTP = syscall.Signal(0x14) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x17) - SIGUSR1 = syscall.Signal(0xa) - SIGUSR2 = syscall.Signal(0xc) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "no such device or address"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EAGAIN", "resource temporarily unavailable"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device or resource busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "invalid cross-device link"}, - {19, "ENODEV", "no such device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "numerical result out of range"}, - {35, "EDEADLK", "resource deadlock avoided"}, - {36, "ENAMETOOLONG", "file name too long"}, - {37, "ENOLCK", "no locks available"}, - {38, "ENOSYS", "function not implemented"}, - {39, "ENOTEMPTY", "directory not empty"}, - {40, "ELOOP", "too many levels of symbolic links"}, - {42, "ENOMSG", "no message of desired type"}, - {43, "EIDRM", "identifier removed"}, - {44, "ECHRNG", "channel number out of range"}, - {45, "EL2NSYNC", "level 2 not synchronized"}, - {46, "EL3HLT", "level 3 halted"}, - {47, "EL3RST", "level 3 reset"}, - {48, "ELNRNG", "link number out of range"}, - {49, "EUNATCH", "protocol driver not attached"}, - {50, "ENOCSI", "no CSI structure available"}, - {51, "EL2HLT", "level 2 halted"}, - {52, "EBADE", "invalid exchange"}, - {53, "EBADR", "invalid request descriptor"}, - {54, "EXFULL", "exchange full"}, - {55, "ENOANO", "no anode"}, - {56, "EBADRQC", "invalid request code"}, - {57, "EBADSLT", "invalid slot"}, - {59, "EBFONT", "bad font file format"}, - {60, "ENOSTR", "device not a stream"}, - {61, "ENODATA", "no data available"}, - {62, "ETIME", "timer expired"}, - {63, "ENOSR", "out of streams resources"}, - {64, "ENONET", "machine is not on the network"}, - {65, "ENOPKG", "package not installed"}, - {66, "EREMOTE", "object is remote"}, - {67, "ENOLINK", "link has been severed"}, - {68, "EADV", "advertise error"}, - {69, "ESRMNT", "srmount error"}, - {70, "ECOMM", "communication error on send"}, - {71, "EPROTO", "protocol error"}, - {72, "EMULTIHOP", "multihop attempted"}, - {73, "EDOTDOT", "RFS specific error"}, - {74, "EBADMSG", "bad message"}, - {75, "EOVERFLOW", "value too large for defined data type"}, - {76, "ENOTUNIQ", "name not unique on network"}, - {77, "EBADFD", "file descriptor in bad state"}, - {78, "EREMCHG", "remote address changed"}, - {79, "ELIBACC", "can not access a needed shared library"}, - {80, "ELIBBAD", "accessing a corrupted shared library"}, - {81, "ELIBSCN", ".lib section in a.out corrupted"}, - {82, "ELIBMAX", "attempting to link in too many shared libraries"}, - {83, "ELIBEXEC", "cannot exec a shared library directly"}, - {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, - {85, "ERESTART", "interrupted system call should be restarted"}, - {86, "ESTRPIPE", "streams pipe error"}, - {87, "EUSERS", "too many users"}, - {88, "ENOTSOCK", "socket operation on non-socket"}, - {89, "EDESTADDRREQ", "destination address required"}, - {90, "EMSGSIZE", "message too long"}, - {91, "EPROTOTYPE", "protocol wrong type for socket"}, - {92, "ENOPROTOOPT", "protocol not available"}, - {93, "EPROTONOSUPPORT", "protocol not supported"}, - {94, "ESOCKTNOSUPPORT", "socket type not supported"}, - {95, "ENOTSUP", "operation not supported"}, - {96, "EPFNOSUPPORT", "protocol family not supported"}, - {97, "EAFNOSUPPORT", "address family not supported by protocol"}, - {98, "EADDRINUSE", "address already in use"}, - {99, "EADDRNOTAVAIL", "cannot assign requested address"}, - {100, "ENETDOWN", "network is down"}, - {101, "ENETUNREACH", "network is unreachable"}, - {102, "ENETRESET", "network dropped connection on reset"}, - {103, "ECONNABORTED", "software caused connection abort"}, - {104, "ECONNRESET", "connection reset by peer"}, - {105, "ENOBUFS", "no buffer space available"}, - {106, "EISCONN", "transport endpoint is already connected"}, - {107, "ENOTCONN", "transport endpoint is not connected"}, - {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, - {109, "ETOOMANYREFS", "too many references: cannot splice"}, - {110, "ETIMEDOUT", "connection timed out"}, - {111, "ECONNREFUSED", "connection refused"}, - {112, "EHOSTDOWN", "host is down"}, - {113, "EHOSTUNREACH", "no route to host"}, - {114, "EALREADY", "operation already in progress"}, - {115, "EINPROGRESS", "operation now in progress"}, - {116, "ESTALE", "stale file handle"}, - {117, "EUCLEAN", "structure needs cleaning"}, - {118, "ENOTNAM", "not a XENIX named type file"}, - {119, "ENAVAIL", "no XENIX semaphores available"}, - {120, "EISNAM", "is a named type file"}, - {121, "EREMOTEIO", "remote I/O error"}, - {122, "EDQUOT", "disk quota exceeded"}, - {123, "ENOMEDIUM", "no medium found"}, - {124, "EMEDIUMTYPE", "wrong medium type"}, - {125, "ECANCELED", "operation canceled"}, - {126, "ENOKEY", "required key not available"}, - {127, "EKEYEXPIRED", "key has expired"}, - {128, "EKEYREVOKED", "key has been revoked"}, - {129, "EKEYREJECTED", "key was rejected by service"}, - {130, "EOWNERDEAD", "owner died"}, - {131, "ENOTRECOVERABLE", "state not recoverable"}, - {132, "ERFKILL", "operation not possible due to RF-kill"}, - {133, "EHWPOISON", "memory page has hardware error"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/breakpoint trap"}, - {6, "SIGABRT", "aborted"}, - {7, "SIGBUS", "bus error"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGUSR1", "user defined signal 1"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGUSR2", "user defined signal 2"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGSTKFLT", "stack fault"}, - {17, "SIGCHLD", "child exited"}, - {18, "SIGCONT", "continued"}, - {19, "SIGSTOP", "stopped (signal)"}, - {20, "SIGTSTP", "stopped"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGURG", "urgent I/O condition"}, - {24, "SIGXCPU", "CPU time limit exceeded"}, - {25, "SIGXFSZ", "file size limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window changed"}, - {29, "SIGIO", "I/O possible"}, - {30, "SIGPWR", "power failure"}, - {31, "SIGSYS", "bad system call"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go deleted file mode 100644 index 928e24c..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +++ /dev/null @@ -1,818 +0,0 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/loong64/include -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build loong64 && linux -// +build loong64,linux - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/loong64/include _const.go - -package unix - -import "syscall" - -const ( - B1000000 = 0x1008 - B115200 = 0x1002 - B1152000 = 0x1009 - B1500000 = 0x100a - B2000000 = 0x100b - B230400 = 0x1003 - B2500000 = 0x100c - B3000000 = 0x100d - B3500000 = 0x100e - B4000000 = 0x100f - B460800 = 0x1004 - B500000 = 0x1005 - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 - BLKBSZGET = 0x80081270 - BLKBSZSET = 0x40081271 - BLKFLSBUF = 0x1261 - BLKFRAGET = 0x1265 - BLKFRASET = 0x1264 - BLKGETSIZE = 0x1260 - BLKGETSIZE64 = 0x80081272 - BLKPBSZGET = 0x127b - BLKRAGET = 0x1263 - BLKRASET = 0x1262 - BLKROGET = 0x125e - BLKROSET = 0x125d - BLKRRPART = 0x125f - BLKSECTGET = 0x1267 - BLKSECTSET = 0x1266 - BLKSSZGET = 0x1268 - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 - CBAUD = 0x100f - CBAUDEX = 0x1000 - CIBAUD = 0x100f0000 - CLOCAL = 0x800 - CR1 = 0x200 - CR2 = 0x400 - CR3 = 0x600 - CRDLY = 0x600 - CREAD = 0x80 - CS6 = 0x10 - CS7 = 0x20 - CS8 = 0x30 - CSIZE = 0x30 - CSTOPB = 0x40 - ECCGETLAYOUT = 0x81484d11 - ECCGETSTATS = 0x80104d12 - ECHOCTL = 0x200 - ECHOE = 0x10 - ECHOK = 0x20 - ECHOKE = 0x800 - ECHONL = 0x40 - ECHOPRT = 0x400 - EFD_CLOEXEC = 0x80000 - EFD_NONBLOCK = 0x800 - EPOLL_CLOEXEC = 0x80000 - EXTPROC = 0x10000 - FF1 = 0x8000 - FFDLY = 0x8000 - FICLONE = 0x40049409 - FICLONERANGE = 0x4020940d - FLUSHO = 0x1000 - FPU_CTX_MAGIC = 0x46505501 - FS_IOC_ENABLE_VERITY = 0x40806685 - FS_IOC_GETFLAGS = 0x80086601 - FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b - FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 - FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 - FS_IOC_SETFLAGS = 0x40086602 - FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 - F_GETLK = 0x5 - F_GETLK64 = 0x5 - F_GETOWN = 0x9 - F_RDLCK = 0x0 - F_SETLK = 0x6 - F_SETLK64 = 0x6 - F_SETLKW = 0x7 - F_SETLKW64 = 0x7 - F_SETOWN = 0x8 - F_UNLCK = 0x2 - F_WRLCK = 0x1 - HIDIOCGRAWINFO = 0x80084803 - HIDIOCGRDESC = 0x90044802 - HIDIOCGRDESCSIZE = 0x80044801 - HUPCL = 0x400 - ICANON = 0x2 - IEXTEN = 0x8000 - IN_CLOEXEC = 0x80000 - IN_NONBLOCK = 0x800 - IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 - ISIG = 0x1 - IUCLC = 0x200 - IXOFF = 0x1000 - IXON = 0x400 - MAP_ANON = 0x20 - MAP_ANONYMOUS = 0x20 - MAP_DENYWRITE = 0x800 - MAP_EXECUTABLE = 0x1000 - MAP_GROWSDOWN = 0x100 - MAP_HUGETLB = 0x40000 - MAP_LOCKED = 0x2000 - MAP_NONBLOCK = 0x10000 - MAP_NORESERVE = 0x4000 - MAP_POPULATE = 0x8000 - MAP_STACK = 0x20000 - MAP_SYNC = 0x80000 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MCL_ONFAULT = 0x4 - MEMERASE = 0x40084d02 - MEMERASE64 = 0x40104d14 - MEMGETBADBLOCK = 0x40084d0b - MEMGETINFO = 0x80204d01 - MEMGETOOBSEL = 0x80c84d0a - MEMGETREGIONCOUNT = 0x80044d07 - MEMISLOCKED = 0x80084d17 - MEMLOCK = 0x40084d05 - MEMREADOOB = 0xc0104d04 - MEMSETBADBLOCK = 0x40084d0c - MEMUNLOCK = 0x40084d06 - MEMWRITEOOB = 0xc0104d03 - MTDFILEMODE = 0x4d13 - NFDBITS = 0x40 - NLDLY = 0x100 - NOFLSH = 0x80 - NS_GET_NSTYPE = 0xb703 - NS_GET_OWNER_UID = 0xb704 - NS_GET_PARENT = 0xb702 - NS_GET_USERNS = 0xb701 - OLCUC = 0x2 - ONLCR = 0x4 - OTPERASE = 0x400c4d19 - OTPGETREGIONCOUNT = 0x40044d0e - OTPGETREGIONINFO = 0x400c4d0f - OTPLOCK = 0x800c4d10 - OTPSELECT = 0x80044d0d - O_APPEND = 0x400 - O_ASYNC = 0x2000 - O_CLOEXEC = 0x80000 - O_CREAT = 0x40 - O_DIRECT = 0x4000 - O_DIRECTORY = 0x10000 - O_DSYNC = 0x1000 - O_EXCL = 0x80 - O_FSYNC = 0x101000 - O_LARGEFILE = 0x0 - O_NDELAY = 0x800 - O_NOATIME = 0x40000 - O_NOCTTY = 0x100 - O_NOFOLLOW = 0x20000 - O_NONBLOCK = 0x800 - O_PATH = 0x200000 - O_RSYNC = 0x101000 - O_SYNC = 0x101000 - O_TMPFILE = 0x410000 - O_TRUNC = 0x200 - PARENB = 0x100 - PARODD = 0x200 - PENDIN = 0x4000 - PERF_EVENT_IOC_DISABLE = 0x2401 - PERF_EVENT_IOC_ENABLE = 0x2400 - PERF_EVENT_IOC_ID = 0x80082407 - PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b - PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 - PERF_EVENT_IOC_PERIOD = 0x40082404 - PERF_EVENT_IOC_QUERY_BPF = 0xc008240a - PERF_EVENT_IOC_REFRESH = 0x2402 - PERF_EVENT_IOC_RESET = 0x2403 - PERF_EVENT_IOC_SET_BPF = 0x40042408 - PERF_EVENT_IOC_SET_FILTER = 0x40082406 - PERF_EVENT_IOC_SET_OUTPUT = 0x2405 - PPPIOCATTACH = 0x4004743d - PPPIOCATTCHAN = 0x40047438 - PPPIOCBRIDGECHAN = 0x40047435 - PPPIOCCONNECT = 0x4004743a - PPPIOCDETACH = 0x4004743c - PPPIOCDISCONN = 0x7439 - PPPIOCGASYNCMAP = 0x80047458 - PPPIOCGCHAN = 0x80047437 - PPPIOCGDEBUG = 0x80047441 - PPPIOCGFLAGS = 0x8004745a - PPPIOCGIDLE = 0x8010743f - PPPIOCGIDLE32 = 0x8008743f - PPPIOCGIDLE64 = 0x8010743f - PPPIOCGL2TPSTATS = 0x80487436 - PPPIOCGMRU = 0x80047453 - PPPIOCGRASYNCMAP = 0x80047455 - PPPIOCGUNIT = 0x80047456 - PPPIOCGXASYNCMAP = 0x80207450 - PPPIOCSACTIVE = 0x40107446 - PPPIOCSASYNCMAP = 0x40047457 - PPPIOCSCOMPRESS = 0x4010744d - PPPIOCSDEBUG = 0x40047440 - PPPIOCSFLAGS = 0x40047459 - PPPIOCSMAXCID = 0x40047451 - PPPIOCSMRRU = 0x4004743b - PPPIOCSMRU = 0x40047452 - PPPIOCSNPMODE = 0x4008744b - PPPIOCSPASS = 0x40107447 - PPPIOCSRASYNCMAP = 0x40047454 - PPPIOCSXASYNCMAP = 0x4020744f - PPPIOCUNBRIDGECHAN = 0x7434 - PPPIOCXFERUNIT = 0x744e - PR_SET_PTRACER_ANY = 0xffffffffffffffff - PTRACE_SYSEMU = 0x1f - PTRACE_SYSEMU_SINGLESTEP = 0x20 - RLIMIT_AS = 0x9 - RLIMIT_MEMLOCK = 0x8 - RLIMIT_NOFILE = 0x7 - RLIMIT_NPROC = 0x6 - RLIMIT_RSS = 0x5 - RNDADDENTROPY = 0x40085203 - RNDADDTOENTCNT = 0x40045201 - RNDCLEARPOOL = 0x5206 - RNDGETENTCNT = 0x80045200 - RNDGETPOOL = 0x80085202 - RNDRESEEDCRNG = 0x5207 - RNDZAPENTCNT = 0x5204 - RTC_AIE_OFF = 0x7002 - RTC_AIE_ON = 0x7001 - RTC_ALM_READ = 0x80247008 - RTC_ALM_SET = 0x40247007 - RTC_EPOCH_READ = 0x8008700d - RTC_EPOCH_SET = 0x4008700e - RTC_IRQP_READ = 0x8008700b - RTC_IRQP_SET = 0x4008700c - RTC_PARAM_GET = 0x40187013 - RTC_PARAM_SET = 0x40187014 - RTC_PIE_OFF = 0x7006 - RTC_PIE_ON = 0x7005 - RTC_PLL_GET = 0x80207011 - RTC_PLL_SET = 0x40207012 - RTC_RD_TIME = 0x80247009 - RTC_SET_TIME = 0x4024700a - RTC_UIE_OFF = 0x7004 - RTC_UIE_ON = 0x7003 - RTC_VL_CLR = 0x7014 - RTC_VL_READ = 0x80047013 - RTC_WIE_OFF = 0x7010 - RTC_WIE_ON = 0x700f - RTC_WKALM_RD = 0x80287010 - RTC_WKALM_SET = 0x4028700f - SCM_TIMESTAMPING = 0x25 - SCM_TIMESTAMPING_OPT_STATS = 0x36 - SCM_TIMESTAMPING_PKTINFO = 0x3a - SCM_TIMESTAMPNS = 0x23 - SCM_TXTIME = 0x3d - SCM_WIFI_STATUS = 0x29 - SFD_CLOEXEC = 0x80000 - SFD_NONBLOCK = 0x800 - SIOCATMARK = 0x8905 - SIOCGPGRP = 0x8904 - SIOCGSTAMPNS_NEW = 0x80108907 - SIOCGSTAMP_NEW = 0x80108906 - SIOCINQ = 0x541b - SIOCOUTQ = 0x5411 - SIOCSPGRP = 0x8902 - SOCK_CLOEXEC = 0x80000 - SOCK_DGRAM = 0x2 - SOCK_NONBLOCK = 0x800 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0x1 - SO_ACCEPTCONN = 0x1e - SO_ATTACH_BPF = 0x32 - SO_ATTACH_REUSEPORT_CBPF = 0x33 - SO_ATTACH_REUSEPORT_EBPF = 0x34 - SO_BINDTODEVICE = 0x19 - SO_BINDTOIFINDEX = 0x3e - SO_BPF_EXTENSIONS = 0x30 - SO_BROADCAST = 0x6 - SO_BSDCOMPAT = 0xe - SO_BUF_LOCK = 0x48 - SO_BUSY_POLL = 0x2e - SO_BUSY_POLL_BUDGET = 0x46 - SO_CNX_ADVICE = 0x35 - SO_COOKIE = 0x39 - SO_DETACH_REUSEPORT_BPF = 0x44 - SO_DOMAIN = 0x27 - SO_DONTROUTE = 0x5 - SO_ERROR = 0x4 - SO_INCOMING_CPU = 0x31 - SO_INCOMING_NAPI_ID = 0x38 - SO_KEEPALIVE = 0x9 - SO_LINGER = 0xd - SO_LOCK_FILTER = 0x2c - SO_MARK = 0x24 - SO_MAX_PACING_RATE = 0x2f - SO_MEMINFO = 0x37 - SO_NETNS_COOKIE = 0x47 - SO_NOFCS = 0x2b - SO_OOBINLINE = 0xa - SO_PASSCRED = 0x10 - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x11 - SO_PEERGROUPS = 0x3b - SO_PEERSEC = 0x1f - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x26 - SO_RCVBUF = 0x8 - SO_RCVBUFFORCE = 0x21 - SO_RCVLOWAT = 0x12 - SO_RCVMARK = 0x4b - SO_RCVTIMEO = 0x14 - SO_RCVTIMEO_NEW = 0x42 - SO_RCVTIMEO_OLD = 0x14 - SO_RESERVE_MEM = 0x49 - SO_REUSEADDR = 0x2 - SO_REUSEPORT = 0xf - SO_RXQ_OVFL = 0x28 - SO_SECURITY_AUTHENTICATION = 0x16 - SO_SECURITY_ENCRYPTION_NETWORK = 0x18 - SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 - SO_SELECT_ERR_QUEUE = 0x2d - SO_SNDBUF = 0x7 - SO_SNDBUFFORCE = 0x20 - SO_SNDLOWAT = 0x13 - SO_SNDTIMEO = 0x15 - SO_SNDTIMEO_NEW = 0x43 - SO_SNDTIMEO_OLD = 0x15 - SO_TIMESTAMPING = 0x25 - SO_TIMESTAMPING_NEW = 0x41 - SO_TIMESTAMPING_OLD = 0x25 - SO_TIMESTAMPNS = 0x23 - SO_TIMESTAMPNS_NEW = 0x40 - SO_TIMESTAMPNS_OLD = 0x23 - SO_TIMESTAMP_NEW = 0x3f - SO_TXREHASH = 0x4a - SO_TXTIME = 0x3d - SO_TYPE = 0x3 - SO_WIFI_STATUS = 0x29 - SO_ZEROCOPY = 0x3c - TAB1 = 0x800 - TAB2 = 0x1000 - TAB3 = 0x1800 - TABDLY = 0x1800 - TCFLSH = 0x540b - TCGETA = 0x5405 - TCGETS = 0x5401 - TCGETS2 = 0x802c542a - TCGETX = 0x5432 - TCSAFLUSH = 0x2 - TCSBRK = 0x5409 - TCSBRKP = 0x5425 - TCSETA = 0x5406 - TCSETAF = 0x5408 - TCSETAW = 0x5407 - TCSETS = 0x5402 - TCSETS2 = 0x402c542b - TCSETSF = 0x5404 - TCSETSF2 = 0x402c542d - TCSETSW = 0x5403 - TCSETSW2 = 0x402c542c - TCSETX = 0x5433 - TCSETXF = 0x5434 - TCSETXW = 0x5435 - TCXONC = 0x540a - TFD_CLOEXEC = 0x80000 - TFD_NONBLOCK = 0x800 - TIOCCBRK = 0x5428 - TIOCCONS = 0x541d - TIOCEXCL = 0x540c - TIOCGDEV = 0x80045432 - TIOCGETD = 0x5424 - TIOCGEXCL = 0x80045440 - TIOCGICOUNT = 0x545d - TIOCGISO7816 = 0x80285442 - TIOCGLCKTRMIOS = 0x5456 - TIOCGPGRP = 0x540f - TIOCGPKT = 0x80045438 - TIOCGPTLCK = 0x80045439 - TIOCGPTN = 0x80045430 - TIOCGPTPEER = 0x5441 - TIOCGRS485 = 0x542e - TIOCGSERIAL = 0x541e - TIOCGSID = 0x5429 - TIOCGSOFTCAR = 0x5419 - TIOCGWINSZ = 0x5413 - TIOCINQ = 0x541b - TIOCLINUX = 0x541c - TIOCMBIC = 0x5417 - TIOCMBIS = 0x5416 - TIOCMGET = 0x5415 - TIOCMIWAIT = 0x545c - TIOCMSET = 0x5418 - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x5422 - TIOCNXCL = 0x540d - TIOCOUTQ = 0x5411 - TIOCPKT = 0x5420 - TIOCSBRK = 0x5427 - TIOCSCTTY = 0x540e - TIOCSERCONFIG = 0x5453 - TIOCSERGETLSR = 0x5459 - TIOCSERGETMULTI = 0x545a - TIOCSERGSTRUCT = 0x5458 - TIOCSERGWILD = 0x5454 - TIOCSERSETMULTI = 0x545b - TIOCSERSWILD = 0x5455 - TIOCSER_TEMT = 0x1 - TIOCSETD = 0x5423 - TIOCSIG = 0x40045436 - TIOCSISO7816 = 0xc0285443 - TIOCSLCKTRMIOS = 0x5457 - TIOCSPGRP = 0x5410 - TIOCSPTLCK = 0x40045431 - TIOCSRS485 = 0x542f - TIOCSSERIAL = 0x541f - TIOCSSOFTCAR = 0x541a - TIOCSTI = 0x5412 - TIOCSWINSZ = 0x5414 - TIOCVHANGUP = 0x5437 - TOSTOP = 0x100 - TUNATTACHFILTER = 0x401054d5 - TUNDETACHFILTER = 0x401054d6 - TUNGETDEVNETNS = 0x54e3 - TUNGETFEATURES = 0x800454cf - TUNGETFILTER = 0x801054db - TUNGETIFF = 0x800454d2 - TUNGETSNDBUF = 0x800454d3 - TUNGETVNETBE = 0x800454df - TUNGETVNETHDRSZ = 0x800454d7 - TUNGETVNETLE = 0x800454dd - TUNSETCARRIER = 0x400454e2 - TUNSETDEBUG = 0x400454c9 - TUNSETFILTEREBPF = 0x800454e1 - TUNSETGROUP = 0x400454ce - TUNSETIFF = 0x400454ca - TUNSETIFINDEX = 0x400454da - TUNSETLINK = 0x400454cd - TUNSETNOCSUM = 0x400454c8 - TUNSETOFFLOAD = 0x400454d0 - TUNSETOWNER = 0x400454cc - TUNSETPERSIST = 0x400454cb - TUNSETQUEUE = 0x400454d9 - TUNSETSNDBUF = 0x400454d4 - TUNSETSTEERINGEBPF = 0x800454e0 - TUNSETTXFILTER = 0x400454d1 - TUNSETVNETBE = 0x400454de - TUNSETVNETHDRSZ = 0x400454d8 - TUNSETVNETLE = 0x400454dc - UBI_IOCATT = 0x40186f40 - UBI_IOCDET = 0x40046f41 - UBI_IOCEBCH = 0x40044f02 - UBI_IOCEBER = 0x40044f01 - UBI_IOCEBISMAP = 0x80044f05 - UBI_IOCEBMAP = 0x40084f03 - UBI_IOCEBUNMAP = 0x40044f04 - UBI_IOCMKVOL = 0x40986f00 - UBI_IOCRMVOL = 0x40046f01 - UBI_IOCRNVOL = 0x51106f03 - UBI_IOCRPEB = 0x40046f04 - UBI_IOCRSVOL = 0x400c6f02 - UBI_IOCSETVOLPROP = 0x40104f06 - UBI_IOCSPEB = 0x40046f05 - UBI_IOCVOLCRBLK = 0x40804f07 - UBI_IOCVOLRMBLK = 0x4f08 - UBI_IOCVOLUP = 0x40084f00 - VDISCARD = 0xd - VEOF = 0x4 - VEOL = 0xb - VEOL2 = 0x10 - VMIN = 0x6 - VREPRINT = 0xc - VSTART = 0x8 - VSTOP = 0x9 - VSUSP = 0xa - VSWTC = 0x7 - VT1 = 0x4000 - VTDLY = 0x4000 - VTIME = 0x5 - VWERASE = 0xe - WDIOC_GETBOOTSTATUS = 0x80045702 - WDIOC_GETPRETIMEOUT = 0x80045709 - WDIOC_GETSTATUS = 0x80045701 - WDIOC_GETSUPPORT = 0x80285700 - WDIOC_GETTEMP = 0x80045703 - WDIOC_GETTIMELEFT = 0x8004570a - WDIOC_GETTIMEOUT = 0x80045707 - WDIOC_KEEPALIVE = 0x80045705 - WDIOC_SETOPTIONS = 0x80045704 - WORDSIZE = 0x40 - XCASE = 0x4 - XTABS = 0x1800 - _HIDIOCGRAWNAME = 0x80804804 - _HIDIOCGRAWPHYS = 0x80404805 - _HIDIOCGRAWUNIQ = 0x80404808 -) - -// Errors -const ( - EADDRINUSE = syscall.Errno(0x62) - EADDRNOTAVAIL = syscall.Errno(0x63) - EADV = syscall.Errno(0x44) - EAFNOSUPPORT = syscall.Errno(0x61) - EALREADY = syscall.Errno(0x72) - EBADE = syscall.Errno(0x34) - EBADFD = syscall.Errno(0x4d) - EBADMSG = syscall.Errno(0x4a) - EBADR = syscall.Errno(0x35) - EBADRQC = syscall.Errno(0x38) - EBADSLT = syscall.Errno(0x39) - EBFONT = syscall.Errno(0x3b) - ECANCELED = syscall.Errno(0x7d) - ECHRNG = syscall.Errno(0x2c) - ECOMM = syscall.Errno(0x46) - ECONNABORTED = syscall.Errno(0x67) - ECONNREFUSED = syscall.Errno(0x6f) - ECONNRESET = syscall.Errno(0x68) - EDEADLK = syscall.Errno(0x23) - EDEADLOCK = syscall.Errno(0x23) - EDESTADDRREQ = syscall.Errno(0x59) - EDOTDOT = syscall.Errno(0x49) - EDQUOT = syscall.Errno(0x7a) - EHOSTDOWN = syscall.Errno(0x70) - EHOSTUNREACH = syscall.Errno(0x71) - EHWPOISON = syscall.Errno(0x85) - EIDRM = syscall.Errno(0x2b) - EILSEQ = syscall.Errno(0x54) - EINPROGRESS = syscall.Errno(0x73) - EISCONN = syscall.Errno(0x6a) - EISNAM = syscall.Errno(0x78) - EKEYEXPIRED = syscall.Errno(0x7f) - EKEYREJECTED = syscall.Errno(0x81) - EKEYREVOKED = syscall.Errno(0x80) - EL2HLT = syscall.Errno(0x33) - EL2NSYNC = syscall.Errno(0x2d) - EL3HLT = syscall.Errno(0x2e) - EL3RST = syscall.Errno(0x2f) - ELIBACC = syscall.Errno(0x4f) - ELIBBAD = syscall.Errno(0x50) - ELIBEXEC = syscall.Errno(0x53) - ELIBMAX = syscall.Errno(0x52) - ELIBSCN = syscall.Errno(0x51) - ELNRNG = syscall.Errno(0x30) - ELOOP = syscall.Errno(0x28) - EMEDIUMTYPE = syscall.Errno(0x7c) - EMSGSIZE = syscall.Errno(0x5a) - EMULTIHOP = syscall.Errno(0x48) - ENAMETOOLONG = syscall.Errno(0x24) - ENAVAIL = syscall.Errno(0x77) - ENETDOWN = syscall.Errno(0x64) - ENETRESET = syscall.Errno(0x66) - ENETUNREACH = syscall.Errno(0x65) - ENOANO = syscall.Errno(0x37) - ENOBUFS = syscall.Errno(0x69) - ENOCSI = syscall.Errno(0x32) - ENODATA = syscall.Errno(0x3d) - ENOKEY = syscall.Errno(0x7e) - ENOLCK = syscall.Errno(0x25) - ENOLINK = syscall.Errno(0x43) - ENOMEDIUM = syscall.Errno(0x7b) - ENOMSG = syscall.Errno(0x2a) - ENONET = syscall.Errno(0x40) - ENOPKG = syscall.Errno(0x41) - ENOPROTOOPT = syscall.Errno(0x5c) - ENOSR = syscall.Errno(0x3f) - ENOSTR = syscall.Errno(0x3c) - ENOSYS = syscall.Errno(0x26) - ENOTCONN = syscall.Errno(0x6b) - ENOTEMPTY = syscall.Errno(0x27) - ENOTNAM = syscall.Errno(0x76) - ENOTRECOVERABLE = syscall.Errno(0x83) - ENOTSOCK = syscall.Errno(0x58) - ENOTSUP = syscall.Errno(0x5f) - ENOTUNIQ = syscall.Errno(0x4c) - EOPNOTSUPP = syscall.Errno(0x5f) - EOVERFLOW = syscall.Errno(0x4b) - EOWNERDEAD = syscall.Errno(0x82) - EPFNOSUPPORT = syscall.Errno(0x60) - EPROTO = syscall.Errno(0x47) - EPROTONOSUPPORT = syscall.Errno(0x5d) - EPROTOTYPE = syscall.Errno(0x5b) - EREMCHG = syscall.Errno(0x4e) - EREMOTE = syscall.Errno(0x42) - EREMOTEIO = syscall.Errno(0x79) - ERESTART = syscall.Errno(0x55) - ERFKILL = syscall.Errno(0x84) - ESHUTDOWN = syscall.Errno(0x6c) - ESOCKTNOSUPPORT = syscall.Errno(0x5e) - ESRMNT = syscall.Errno(0x45) - ESTALE = syscall.Errno(0x74) - ESTRPIPE = syscall.Errno(0x56) - ETIME = syscall.Errno(0x3e) - ETIMEDOUT = syscall.Errno(0x6e) - ETOOMANYREFS = syscall.Errno(0x6d) - EUCLEAN = syscall.Errno(0x75) - EUNATCH = syscall.Errno(0x31) - EUSERS = syscall.Errno(0x57) - EXFULL = syscall.Errno(0x36) -) - -// Signals -const ( - SIGBUS = syscall.Signal(0x7) - SIGCHLD = syscall.Signal(0x11) - SIGCLD = syscall.Signal(0x11) - SIGCONT = syscall.Signal(0x12) - SIGIO = syscall.Signal(0x1d) - SIGPOLL = syscall.Signal(0x1d) - SIGPROF = syscall.Signal(0x1b) - SIGPWR = syscall.Signal(0x1e) - SIGSTKFLT = syscall.Signal(0x10) - SIGSTOP = syscall.Signal(0x13) - SIGSYS = syscall.Signal(0x1f) - SIGTSTP = syscall.Signal(0x14) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x17) - SIGUSR1 = syscall.Signal(0xa) - SIGUSR2 = syscall.Signal(0xc) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "no such device or address"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EAGAIN", "resource temporarily unavailable"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device or resource busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "invalid cross-device link"}, - {19, "ENODEV", "no such device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "numerical result out of range"}, - {35, "EDEADLK", "resource deadlock avoided"}, - {36, "ENAMETOOLONG", "file name too long"}, - {37, "ENOLCK", "no locks available"}, - {38, "ENOSYS", "function not implemented"}, - {39, "ENOTEMPTY", "directory not empty"}, - {40, "ELOOP", "too many levels of symbolic links"}, - {42, "ENOMSG", "no message of desired type"}, - {43, "EIDRM", "identifier removed"}, - {44, "ECHRNG", "channel number out of range"}, - {45, "EL2NSYNC", "level 2 not synchronized"}, - {46, "EL3HLT", "level 3 halted"}, - {47, "EL3RST", "level 3 reset"}, - {48, "ELNRNG", "link number out of range"}, - {49, "EUNATCH", "protocol driver not attached"}, - {50, "ENOCSI", "no CSI structure available"}, - {51, "EL2HLT", "level 2 halted"}, - {52, "EBADE", "invalid exchange"}, - {53, "EBADR", "invalid request descriptor"}, - {54, "EXFULL", "exchange full"}, - {55, "ENOANO", "no anode"}, - {56, "EBADRQC", "invalid request code"}, - {57, "EBADSLT", "invalid slot"}, - {59, "EBFONT", "bad font file format"}, - {60, "ENOSTR", "device not a stream"}, - {61, "ENODATA", "no data available"}, - {62, "ETIME", "timer expired"}, - {63, "ENOSR", "out of streams resources"}, - {64, "ENONET", "machine is not on the network"}, - {65, "ENOPKG", "package not installed"}, - {66, "EREMOTE", "object is remote"}, - {67, "ENOLINK", "link has been severed"}, - {68, "EADV", "advertise error"}, - {69, "ESRMNT", "srmount error"}, - {70, "ECOMM", "communication error on send"}, - {71, "EPROTO", "protocol error"}, - {72, "EMULTIHOP", "multihop attempted"}, - {73, "EDOTDOT", "RFS specific error"}, - {74, "EBADMSG", "bad message"}, - {75, "EOVERFLOW", "value too large for defined data type"}, - {76, "ENOTUNIQ", "name not unique on network"}, - {77, "EBADFD", "file descriptor in bad state"}, - {78, "EREMCHG", "remote address changed"}, - {79, "ELIBACC", "can not access a needed shared library"}, - {80, "ELIBBAD", "accessing a corrupted shared library"}, - {81, "ELIBSCN", ".lib section in a.out corrupted"}, - {82, "ELIBMAX", "attempting to link in too many shared libraries"}, - {83, "ELIBEXEC", "cannot exec a shared library directly"}, - {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, - {85, "ERESTART", "interrupted system call should be restarted"}, - {86, "ESTRPIPE", "streams pipe error"}, - {87, "EUSERS", "too many users"}, - {88, "ENOTSOCK", "socket operation on non-socket"}, - {89, "EDESTADDRREQ", "destination address required"}, - {90, "EMSGSIZE", "message too long"}, - {91, "EPROTOTYPE", "protocol wrong type for socket"}, - {92, "ENOPROTOOPT", "protocol not available"}, - {93, "EPROTONOSUPPORT", "protocol not supported"}, - {94, "ESOCKTNOSUPPORT", "socket type not supported"}, - {95, "ENOTSUP", "operation not supported"}, - {96, "EPFNOSUPPORT", "protocol family not supported"}, - {97, "EAFNOSUPPORT", "address family not supported by protocol"}, - {98, "EADDRINUSE", "address already in use"}, - {99, "EADDRNOTAVAIL", "cannot assign requested address"}, - {100, "ENETDOWN", "network is down"}, - {101, "ENETUNREACH", "network is unreachable"}, - {102, "ENETRESET", "network dropped connection on reset"}, - {103, "ECONNABORTED", "software caused connection abort"}, - {104, "ECONNRESET", "connection reset by peer"}, - {105, "ENOBUFS", "no buffer space available"}, - {106, "EISCONN", "transport endpoint is already connected"}, - {107, "ENOTCONN", "transport endpoint is not connected"}, - {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, - {109, "ETOOMANYREFS", "too many references: cannot splice"}, - {110, "ETIMEDOUT", "connection timed out"}, - {111, "ECONNREFUSED", "connection refused"}, - {112, "EHOSTDOWN", "host is down"}, - {113, "EHOSTUNREACH", "no route to host"}, - {114, "EALREADY", "operation already in progress"}, - {115, "EINPROGRESS", "operation now in progress"}, - {116, "ESTALE", "stale file handle"}, - {117, "EUCLEAN", "structure needs cleaning"}, - {118, "ENOTNAM", "not a XENIX named type file"}, - {119, "ENAVAIL", "no XENIX semaphores available"}, - {120, "EISNAM", "is a named type file"}, - {121, "EREMOTEIO", "remote I/O error"}, - {122, "EDQUOT", "disk quota exceeded"}, - {123, "ENOMEDIUM", "no medium found"}, - {124, "EMEDIUMTYPE", "wrong medium type"}, - {125, "ECANCELED", "operation canceled"}, - {126, "ENOKEY", "required key not available"}, - {127, "EKEYEXPIRED", "key has expired"}, - {128, "EKEYREVOKED", "key has been revoked"}, - {129, "EKEYREJECTED", "key was rejected by service"}, - {130, "EOWNERDEAD", "owner died"}, - {131, "ENOTRECOVERABLE", "state not recoverable"}, - {132, "ERFKILL", "operation not possible due to RF-kill"}, - {133, "EHWPOISON", "memory page has hardware error"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/breakpoint trap"}, - {6, "SIGABRT", "aborted"}, - {7, "SIGBUS", "bus error"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGUSR1", "user defined signal 1"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGUSR2", "user defined signal 2"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGSTKFLT", "stack fault"}, - {17, "SIGCHLD", "child exited"}, - {18, "SIGCONT", "continued"}, - {19, "SIGSTOP", "stopped (signal)"}, - {20, "SIGTSTP", "stopped"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGURG", "urgent I/O condition"}, - {24, "SIGXCPU", "CPU time limit exceeded"}, - {25, "SIGXFSZ", "file size limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window changed"}, - {29, "SIGIO", "I/O possible"}, - {30, "SIGPWR", "power failure"}, - {31, "SIGSYS", "bad system call"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go deleted file mode 100644 index 179bffb..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ /dev/null @@ -1,835 +0,0 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/mips/include -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build mips && linux -// +build mips,linux - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/mips/include _const.go - -package unix - -import "syscall" - -const ( - B1000000 = 0x1008 - B115200 = 0x1002 - B1152000 = 0x1009 - B1500000 = 0x100a - B2000000 = 0x100b - B230400 = 0x1003 - B2500000 = 0x100c - B3000000 = 0x100d - B3500000 = 0x100e - B4000000 = 0x100f - B460800 = 0x1004 - B500000 = 0x1005 - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 - BLKBSZGET = 0x40041270 - BLKBSZSET = 0x80041271 - BLKFLSBUF = 0x20001261 - BLKFRAGET = 0x20001265 - BLKFRASET = 0x20001264 - BLKGETSIZE = 0x20001260 - BLKGETSIZE64 = 0x40041272 - BLKPBSZGET = 0x2000127b - BLKRAGET = 0x20001263 - BLKRASET = 0x20001262 - BLKROGET = 0x2000125e - BLKROSET = 0x2000125d - BLKRRPART = 0x2000125f - BLKSECTGET = 0x20001267 - BLKSECTSET = 0x20001266 - BLKSSZGET = 0x20001268 - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 - CBAUD = 0x100f - CBAUDEX = 0x1000 - CIBAUD = 0x100f0000 - CLOCAL = 0x800 - CR1 = 0x200 - CR2 = 0x400 - CR3 = 0x600 - CRDLY = 0x600 - CREAD = 0x80 - CS6 = 0x10 - CS7 = 0x20 - CS8 = 0x30 - CSIZE = 0x30 - CSTOPB = 0x40 - ECCGETLAYOUT = 0x41484d11 - ECCGETSTATS = 0x40104d12 - ECHOCTL = 0x200 - ECHOE = 0x10 - ECHOK = 0x20 - ECHOKE = 0x800 - ECHONL = 0x40 - ECHOPRT = 0x400 - EFD_CLOEXEC = 0x80000 - EFD_NONBLOCK = 0x80 - EPOLL_CLOEXEC = 0x80000 - EXTPROC = 0x10000 - FF1 = 0x8000 - FFDLY = 0x8000 - FICLONE = 0x80049409 - FICLONERANGE = 0x8020940d - FLUSHO = 0x2000 - FS_IOC_ENABLE_VERITY = 0x80806685 - FS_IOC_GETFLAGS = 0x40046601 - FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b - FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 - FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 - FS_IOC_SETFLAGS = 0x80046602 - FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 - F_GETLK = 0x21 - F_GETLK64 = 0x21 - F_GETOWN = 0x17 - F_RDLCK = 0x0 - F_SETLK = 0x22 - F_SETLK64 = 0x22 - F_SETLKW = 0x23 - F_SETLKW64 = 0x23 - F_SETOWN = 0x18 - F_UNLCK = 0x2 - F_WRLCK = 0x1 - HIDIOCGRAWINFO = 0x40084803 - HIDIOCGRDESC = 0x50044802 - HIDIOCGRDESCSIZE = 0x40044801 - HUPCL = 0x400 - ICANON = 0x2 - IEXTEN = 0x100 - IN_CLOEXEC = 0x80000 - IN_NONBLOCK = 0x80 - IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 - ISIG = 0x1 - IUCLC = 0x200 - IXOFF = 0x1000 - IXON = 0x400 - MAP_ANON = 0x800 - MAP_ANONYMOUS = 0x800 - MAP_DENYWRITE = 0x2000 - MAP_EXECUTABLE = 0x4000 - MAP_GROWSDOWN = 0x1000 - MAP_HUGETLB = 0x80000 - MAP_LOCKED = 0x8000 - MAP_NONBLOCK = 0x20000 - MAP_NORESERVE = 0x400 - MAP_POPULATE = 0x10000 - MAP_RENAME = 0x800 - MAP_STACK = 0x40000 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MCL_ONFAULT = 0x4 - MEMERASE = 0x80084d02 - MEMERASE64 = 0x80104d14 - MEMGETBADBLOCK = 0x80084d0b - MEMGETINFO = 0x40204d01 - MEMGETOOBSEL = 0x40c84d0a - MEMGETREGIONCOUNT = 0x40044d07 - MEMISLOCKED = 0x40084d17 - MEMLOCK = 0x80084d05 - MEMREADOOB = 0xc00c4d04 - MEMSETBADBLOCK = 0x80084d0c - MEMUNLOCK = 0x80084d06 - MEMWRITEOOB = 0xc00c4d03 - MTDFILEMODE = 0x20004d13 - NFDBITS = 0x20 - NLDLY = 0x100 - NOFLSH = 0x80 - NS_GET_NSTYPE = 0x2000b703 - NS_GET_OWNER_UID = 0x2000b704 - NS_GET_PARENT = 0x2000b702 - NS_GET_USERNS = 0x2000b701 - OLCUC = 0x2 - ONLCR = 0x4 - OTPERASE = 0x800c4d19 - OTPGETREGIONCOUNT = 0x80044d0e - OTPGETREGIONINFO = 0x800c4d0f - OTPLOCK = 0x400c4d10 - OTPSELECT = 0x40044d0d - O_APPEND = 0x8 - O_ASYNC = 0x1000 - O_CLOEXEC = 0x80000 - O_CREAT = 0x100 - O_DIRECT = 0x8000 - O_DIRECTORY = 0x10000 - O_DSYNC = 0x10 - O_EXCL = 0x400 - O_FSYNC = 0x4010 - O_LARGEFILE = 0x2000 - O_NDELAY = 0x80 - O_NOATIME = 0x40000 - O_NOCTTY = 0x800 - O_NOFOLLOW = 0x20000 - O_NONBLOCK = 0x80 - O_PATH = 0x200000 - O_RSYNC = 0x4010 - O_SYNC = 0x4010 - O_TMPFILE = 0x410000 - O_TRUNC = 0x200 - PARENB = 0x100 - PARODD = 0x200 - PENDIN = 0x4000 - PERF_EVENT_IOC_DISABLE = 0x20002401 - PERF_EVENT_IOC_ENABLE = 0x20002400 - PERF_EVENT_IOC_ID = 0x40042407 - PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8004240b - PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 - PERF_EVENT_IOC_PERIOD = 0x80082404 - PERF_EVENT_IOC_QUERY_BPF = 0xc004240a - PERF_EVENT_IOC_REFRESH = 0x20002402 - PERF_EVENT_IOC_RESET = 0x20002403 - PERF_EVENT_IOC_SET_BPF = 0x80042408 - PERF_EVENT_IOC_SET_FILTER = 0x80042406 - PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 - PPPIOCATTACH = 0x8004743d - PPPIOCATTCHAN = 0x80047438 - PPPIOCBRIDGECHAN = 0x80047435 - PPPIOCCONNECT = 0x8004743a - PPPIOCDETACH = 0x8004743c - PPPIOCDISCONN = 0x20007439 - PPPIOCGASYNCMAP = 0x40047458 - PPPIOCGCHAN = 0x40047437 - PPPIOCGDEBUG = 0x40047441 - PPPIOCGFLAGS = 0x4004745a - PPPIOCGIDLE = 0x4008743f - PPPIOCGIDLE32 = 0x4008743f - PPPIOCGIDLE64 = 0x4010743f - PPPIOCGL2TPSTATS = 0x40487436 - PPPIOCGMRU = 0x40047453 - PPPIOCGRASYNCMAP = 0x40047455 - PPPIOCGUNIT = 0x40047456 - PPPIOCGXASYNCMAP = 0x40207450 - PPPIOCSACTIVE = 0x80087446 - PPPIOCSASYNCMAP = 0x80047457 - PPPIOCSCOMPRESS = 0x800c744d - PPPIOCSDEBUG = 0x80047440 - PPPIOCSFLAGS = 0x80047459 - PPPIOCSMAXCID = 0x80047451 - PPPIOCSMRRU = 0x8004743b - PPPIOCSMRU = 0x80047452 - PPPIOCSNPMODE = 0x8008744b - PPPIOCSPASS = 0x80087447 - PPPIOCSRASYNCMAP = 0x80047454 - PPPIOCSXASYNCMAP = 0x8020744f - PPPIOCUNBRIDGECHAN = 0x20007434 - PPPIOCXFERUNIT = 0x2000744e - PR_SET_PTRACER_ANY = 0xffffffff - PTRACE_GETFPREGS = 0xe - PTRACE_GET_THREAD_AREA = 0x19 - PTRACE_GET_THREAD_AREA_3264 = 0xc4 - PTRACE_GET_WATCH_REGS = 0xd0 - PTRACE_OLDSETOPTIONS = 0x15 - PTRACE_PEEKDATA_3264 = 0xc1 - PTRACE_PEEKTEXT_3264 = 0xc0 - PTRACE_POKEDATA_3264 = 0xc3 - PTRACE_POKETEXT_3264 = 0xc2 - PTRACE_SETFPREGS = 0xf - PTRACE_SET_THREAD_AREA = 0x1a - PTRACE_SET_WATCH_REGS = 0xd1 - RLIMIT_AS = 0x6 - RLIMIT_MEMLOCK = 0x9 - RLIMIT_NOFILE = 0x5 - RLIMIT_NPROC = 0x8 - RLIMIT_RSS = 0x7 - RNDADDENTROPY = 0x80085203 - RNDADDTOENTCNT = 0x80045201 - RNDCLEARPOOL = 0x20005206 - RNDGETENTCNT = 0x40045200 - RNDGETPOOL = 0x40085202 - RNDRESEEDCRNG = 0x20005207 - RNDZAPENTCNT = 0x20005204 - RTC_AIE_OFF = 0x20007002 - RTC_AIE_ON = 0x20007001 - RTC_ALM_READ = 0x40247008 - RTC_ALM_SET = 0x80247007 - RTC_EPOCH_READ = 0x4004700d - RTC_EPOCH_SET = 0x8004700e - RTC_IRQP_READ = 0x4004700b - RTC_IRQP_SET = 0x8004700c - RTC_PARAM_GET = 0x80187013 - RTC_PARAM_SET = 0x80187014 - RTC_PIE_OFF = 0x20007006 - RTC_PIE_ON = 0x20007005 - RTC_PLL_GET = 0x401c7011 - RTC_PLL_SET = 0x801c7012 - RTC_RD_TIME = 0x40247009 - RTC_SET_TIME = 0x8024700a - RTC_UIE_OFF = 0x20007004 - RTC_UIE_ON = 0x20007003 - RTC_VL_CLR = 0x20007014 - RTC_VL_READ = 0x40047013 - RTC_WIE_OFF = 0x20007010 - RTC_WIE_ON = 0x2000700f - RTC_WKALM_RD = 0x40287010 - RTC_WKALM_SET = 0x8028700f - SCM_TIMESTAMPING = 0x25 - SCM_TIMESTAMPING_OPT_STATS = 0x36 - SCM_TIMESTAMPING_PKTINFO = 0x3a - SCM_TIMESTAMPNS = 0x23 - SCM_TXTIME = 0x3d - SCM_WIFI_STATUS = 0x29 - SFD_CLOEXEC = 0x80000 - SFD_NONBLOCK = 0x80 - SIOCATMARK = 0x40047307 - SIOCGPGRP = 0x40047309 - SIOCGSTAMPNS_NEW = 0x40108907 - SIOCGSTAMP_NEW = 0x40108906 - SIOCINQ = 0x467f - SIOCOUTQ = 0x7472 - SIOCSPGRP = 0x80047308 - SOCK_CLOEXEC = 0x80000 - SOCK_DGRAM = 0x1 - SOCK_NONBLOCK = 0x80 - SOCK_STREAM = 0x2 - SOL_SOCKET = 0xffff - SO_ACCEPTCONN = 0x1009 - SO_ATTACH_BPF = 0x32 - SO_ATTACH_REUSEPORT_CBPF = 0x33 - SO_ATTACH_REUSEPORT_EBPF = 0x34 - SO_BINDTODEVICE = 0x19 - SO_BINDTOIFINDEX = 0x3e - SO_BPF_EXTENSIONS = 0x30 - SO_BROADCAST = 0x20 - SO_BSDCOMPAT = 0xe - SO_BUF_LOCK = 0x48 - SO_BUSY_POLL = 0x2e - SO_BUSY_POLL_BUDGET = 0x46 - SO_CNX_ADVICE = 0x35 - SO_COOKIE = 0x39 - SO_DETACH_REUSEPORT_BPF = 0x44 - SO_DOMAIN = 0x1029 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_INCOMING_CPU = 0x31 - SO_INCOMING_NAPI_ID = 0x38 - SO_KEEPALIVE = 0x8 - SO_LINGER = 0x80 - SO_LOCK_FILTER = 0x2c - SO_MARK = 0x24 - SO_MAX_PACING_RATE = 0x2f - SO_MEMINFO = 0x37 - SO_NETNS_COOKIE = 0x47 - SO_NOFCS = 0x2b - SO_OOBINLINE = 0x100 - SO_PASSCRED = 0x11 - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x12 - SO_PEERGROUPS = 0x3b - SO_PEERSEC = 0x1e - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x1028 - SO_RCVBUF = 0x1002 - SO_RCVBUFFORCE = 0x21 - SO_RCVLOWAT = 0x1004 - SO_RCVMARK = 0x4b - SO_RCVTIMEO = 0x1006 - SO_RCVTIMEO_NEW = 0x42 - SO_RCVTIMEO_OLD = 0x1006 - SO_RESERVE_MEM = 0x49 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_RXQ_OVFL = 0x28 - SO_SECURITY_AUTHENTICATION = 0x16 - SO_SECURITY_ENCRYPTION_NETWORK = 0x18 - SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 - SO_SELECT_ERR_QUEUE = 0x2d - SO_SNDBUF = 0x1001 - SO_SNDBUFFORCE = 0x1f - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_SNDTIMEO_NEW = 0x43 - SO_SNDTIMEO_OLD = 0x1005 - SO_STYLE = 0x1008 - SO_TIMESTAMPING = 0x25 - SO_TIMESTAMPING_NEW = 0x41 - SO_TIMESTAMPING_OLD = 0x25 - SO_TIMESTAMPNS = 0x23 - SO_TIMESTAMPNS_NEW = 0x40 - SO_TIMESTAMPNS_OLD = 0x23 - SO_TIMESTAMP_NEW = 0x3f - SO_TXREHASH = 0x4a - SO_TXTIME = 0x3d - SO_TYPE = 0x1008 - SO_WIFI_STATUS = 0x29 - SO_ZEROCOPY = 0x3c - TAB1 = 0x800 - TAB2 = 0x1000 - TAB3 = 0x1800 - TABDLY = 0x1800 - TCFLSH = 0x5407 - TCGETA = 0x5401 - TCGETS = 0x540d - TCGETS2 = 0x4030542a - TCSAFLUSH = 0x5410 - TCSBRK = 0x5405 - TCSBRKP = 0x5486 - TCSETA = 0x5402 - TCSETAF = 0x5404 - TCSETAW = 0x5403 - TCSETS = 0x540e - TCSETS2 = 0x8030542b - TCSETSF = 0x5410 - TCSETSF2 = 0x8030542d - TCSETSW = 0x540f - TCSETSW2 = 0x8030542c - TCXONC = 0x5406 - TFD_CLOEXEC = 0x80000 - TFD_NONBLOCK = 0x80 - TIOCCBRK = 0x5428 - TIOCCONS = 0x80047478 - TIOCEXCL = 0x740d - TIOCGDEV = 0x40045432 - TIOCGETD = 0x7400 - TIOCGETP = 0x7408 - TIOCGEXCL = 0x40045440 - TIOCGICOUNT = 0x5492 - TIOCGISO7816 = 0x40285442 - TIOCGLCKTRMIOS = 0x548b - TIOCGLTC = 0x7474 - TIOCGPGRP = 0x40047477 - TIOCGPKT = 0x40045438 - TIOCGPTLCK = 0x40045439 - TIOCGPTN = 0x40045430 - TIOCGPTPEER = 0x20005441 - TIOCGRS485 = 0x4020542e - TIOCGSERIAL = 0x5484 - TIOCGSID = 0x7416 - TIOCGSOFTCAR = 0x5481 - TIOCGWINSZ = 0x40087468 - TIOCINQ = 0x467f - TIOCLINUX = 0x5483 - TIOCMBIC = 0x741c - TIOCMBIS = 0x741b - TIOCMGET = 0x741d - TIOCMIWAIT = 0x5491 - TIOCMSET = 0x741a - TIOCM_CAR = 0x100 - TIOCM_CD = 0x100 - TIOCM_CTS = 0x40 - TIOCM_DSR = 0x400 - TIOCM_RI = 0x200 - TIOCM_RNG = 0x200 - TIOCM_SR = 0x20 - TIOCM_ST = 0x10 - TIOCNOTTY = 0x5471 - TIOCNXCL = 0x740e - TIOCOUTQ = 0x7472 - TIOCPKT = 0x5470 - TIOCSBRK = 0x5427 - TIOCSCTTY = 0x5480 - TIOCSERCONFIG = 0x5488 - TIOCSERGETLSR = 0x548e - TIOCSERGETMULTI = 0x548f - TIOCSERGSTRUCT = 0x548d - TIOCSERGWILD = 0x5489 - TIOCSERSETMULTI = 0x5490 - TIOCSERSWILD = 0x548a - TIOCSER_TEMT = 0x1 - TIOCSETD = 0x7401 - TIOCSETN = 0x740a - TIOCSETP = 0x7409 - TIOCSIG = 0x80045436 - TIOCSISO7816 = 0xc0285443 - TIOCSLCKTRMIOS = 0x548c - TIOCSLTC = 0x7475 - TIOCSPGRP = 0x80047476 - TIOCSPTLCK = 0x80045431 - TIOCSRS485 = 0xc020542f - TIOCSSERIAL = 0x5485 - TIOCSSOFTCAR = 0x5482 - TIOCSTI = 0x5472 - TIOCSWINSZ = 0x80087467 - TIOCVHANGUP = 0x5437 - TOSTOP = 0x8000 - TUNATTACHFILTER = 0x800854d5 - TUNDETACHFILTER = 0x800854d6 - TUNGETDEVNETNS = 0x200054e3 - TUNGETFEATURES = 0x400454cf - TUNGETFILTER = 0x400854db - TUNGETIFF = 0x400454d2 - TUNGETSNDBUF = 0x400454d3 - TUNGETVNETBE = 0x400454df - TUNGETVNETHDRSZ = 0x400454d7 - TUNGETVNETLE = 0x400454dd - TUNSETCARRIER = 0x800454e2 - TUNSETDEBUG = 0x800454c9 - TUNSETFILTEREBPF = 0x400454e1 - TUNSETGROUP = 0x800454ce - TUNSETIFF = 0x800454ca - TUNSETIFINDEX = 0x800454da - TUNSETLINK = 0x800454cd - TUNSETNOCSUM = 0x800454c8 - TUNSETOFFLOAD = 0x800454d0 - TUNSETOWNER = 0x800454cc - TUNSETPERSIST = 0x800454cb - TUNSETQUEUE = 0x800454d9 - TUNSETSNDBUF = 0x800454d4 - TUNSETSTEERINGEBPF = 0x400454e0 - TUNSETTXFILTER = 0x800454d1 - TUNSETVNETBE = 0x800454de - TUNSETVNETHDRSZ = 0x800454d8 - TUNSETVNETLE = 0x800454dc - UBI_IOCATT = 0x80186f40 - UBI_IOCDET = 0x80046f41 - UBI_IOCEBCH = 0x80044f02 - UBI_IOCEBER = 0x80044f01 - UBI_IOCEBISMAP = 0x40044f05 - UBI_IOCEBMAP = 0x80084f03 - UBI_IOCEBUNMAP = 0x80044f04 - UBI_IOCMKVOL = 0x80986f00 - UBI_IOCRMVOL = 0x80046f01 - UBI_IOCRNVOL = 0x91106f03 - UBI_IOCRPEB = 0x80046f04 - UBI_IOCRSVOL = 0x800c6f02 - UBI_IOCSETVOLPROP = 0x80104f06 - UBI_IOCSPEB = 0x80046f05 - UBI_IOCVOLCRBLK = 0x80804f07 - UBI_IOCVOLRMBLK = 0x20004f08 - UBI_IOCVOLUP = 0x80084f00 - VDISCARD = 0xd - VEOF = 0x10 - VEOL = 0x11 - VEOL2 = 0x6 - VMIN = 0x4 - VREPRINT = 0xc - VSTART = 0x8 - VSTOP = 0x9 - VSUSP = 0xa - VSWTC = 0x7 - VSWTCH = 0x7 - VT1 = 0x4000 - VTDLY = 0x4000 - VTIME = 0x5 - VWERASE = 0xe - WDIOC_GETBOOTSTATUS = 0x40045702 - WDIOC_GETPRETIMEOUT = 0x40045709 - WDIOC_GETSTATUS = 0x40045701 - WDIOC_GETSUPPORT = 0x40285700 - WDIOC_GETTEMP = 0x40045703 - WDIOC_GETTIMELEFT = 0x4004570a - WDIOC_GETTIMEOUT = 0x40045707 - WDIOC_KEEPALIVE = 0x40045705 - WDIOC_SETOPTIONS = 0x40045704 - WORDSIZE = 0x20 - XCASE = 0x4 - XTABS = 0x1800 - _HIDIOCGRAWNAME = 0x40804804 - _HIDIOCGRAWPHYS = 0x40404805 - _HIDIOCGRAWUNIQ = 0x40404808 -) - -// Errors -const ( - EADDRINUSE = syscall.Errno(0x7d) - EADDRNOTAVAIL = syscall.Errno(0x7e) - EADV = syscall.Errno(0x44) - EAFNOSUPPORT = syscall.Errno(0x7c) - EALREADY = syscall.Errno(0x95) - EBADE = syscall.Errno(0x32) - EBADFD = syscall.Errno(0x51) - EBADMSG = syscall.Errno(0x4d) - EBADR = syscall.Errno(0x33) - EBADRQC = syscall.Errno(0x36) - EBADSLT = syscall.Errno(0x37) - EBFONT = syscall.Errno(0x3b) - ECANCELED = syscall.Errno(0x9e) - ECHRNG = syscall.Errno(0x25) - ECOMM = syscall.Errno(0x46) - ECONNABORTED = syscall.Errno(0x82) - ECONNREFUSED = syscall.Errno(0x92) - ECONNRESET = syscall.Errno(0x83) - EDEADLK = syscall.Errno(0x2d) - EDEADLOCK = syscall.Errno(0x38) - EDESTADDRREQ = syscall.Errno(0x60) - EDOTDOT = syscall.Errno(0x49) - EDQUOT = syscall.Errno(0x46d) - EHOSTDOWN = syscall.Errno(0x93) - EHOSTUNREACH = syscall.Errno(0x94) - EHWPOISON = syscall.Errno(0xa8) - EIDRM = syscall.Errno(0x24) - EILSEQ = syscall.Errno(0x58) - EINIT = syscall.Errno(0x8d) - EINPROGRESS = syscall.Errno(0x96) - EISCONN = syscall.Errno(0x85) - EISNAM = syscall.Errno(0x8b) - EKEYEXPIRED = syscall.Errno(0xa2) - EKEYREJECTED = syscall.Errno(0xa4) - EKEYREVOKED = syscall.Errno(0xa3) - EL2HLT = syscall.Errno(0x2c) - EL2NSYNC = syscall.Errno(0x26) - EL3HLT = syscall.Errno(0x27) - EL3RST = syscall.Errno(0x28) - ELIBACC = syscall.Errno(0x53) - ELIBBAD = syscall.Errno(0x54) - ELIBEXEC = syscall.Errno(0x57) - ELIBMAX = syscall.Errno(0x56) - ELIBSCN = syscall.Errno(0x55) - ELNRNG = syscall.Errno(0x29) - ELOOP = syscall.Errno(0x5a) - EMEDIUMTYPE = syscall.Errno(0xa0) - EMSGSIZE = syscall.Errno(0x61) - EMULTIHOP = syscall.Errno(0x4a) - ENAMETOOLONG = syscall.Errno(0x4e) - ENAVAIL = syscall.Errno(0x8a) - ENETDOWN = syscall.Errno(0x7f) - ENETRESET = syscall.Errno(0x81) - ENETUNREACH = syscall.Errno(0x80) - ENOANO = syscall.Errno(0x35) - ENOBUFS = syscall.Errno(0x84) - ENOCSI = syscall.Errno(0x2b) - ENODATA = syscall.Errno(0x3d) - ENOKEY = syscall.Errno(0xa1) - ENOLCK = syscall.Errno(0x2e) - ENOLINK = syscall.Errno(0x43) - ENOMEDIUM = syscall.Errno(0x9f) - ENOMSG = syscall.Errno(0x23) - ENONET = syscall.Errno(0x40) - ENOPKG = syscall.Errno(0x41) - ENOPROTOOPT = syscall.Errno(0x63) - ENOSR = syscall.Errno(0x3f) - ENOSTR = syscall.Errno(0x3c) - ENOSYS = syscall.Errno(0x59) - ENOTCONN = syscall.Errno(0x86) - ENOTEMPTY = syscall.Errno(0x5d) - ENOTNAM = syscall.Errno(0x89) - ENOTRECOVERABLE = syscall.Errno(0xa6) - ENOTSOCK = syscall.Errno(0x5f) - ENOTSUP = syscall.Errno(0x7a) - ENOTUNIQ = syscall.Errno(0x50) - EOPNOTSUPP = syscall.Errno(0x7a) - EOVERFLOW = syscall.Errno(0x4f) - EOWNERDEAD = syscall.Errno(0xa5) - EPFNOSUPPORT = syscall.Errno(0x7b) - EPROTO = syscall.Errno(0x47) - EPROTONOSUPPORT = syscall.Errno(0x78) - EPROTOTYPE = syscall.Errno(0x62) - EREMCHG = syscall.Errno(0x52) - EREMDEV = syscall.Errno(0x8e) - EREMOTE = syscall.Errno(0x42) - EREMOTEIO = syscall.Errno(0x8c) - ERESTART = syscall.Errno(0x5b) - ERFKILL = syscall.Errno(0xa7) - ESHUTDOWN = syscall.Errno(0x8f) - ESOCKTNOSUPPORT = syscall.Errno(0x79) - ESRMNT = syscall.Errno(0x45) - ESTALE = syscall.Errno(0x97) - ESTRPIPE = syscall.Errno(0x5c) - ETIME = syscall.Errno(0x3e) - ETIMEDOUT = syscall.Errno(0x91) - ETOOMANYREFS = syscall.Errno(0x90) - EUCLEAN = syscall.Errno(0x87) - EUNATCH = syscall.Errno(0x2a) - EUSERS = syscall.Errno(0x5e) - EXFULL = syscall.Errno(0x34) -) - -// Signals -const ( - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x12) - SIGCLD = syscall.Signal(0x12) - SIGCONT = syscall.Signal(0x19) - SIGEMT = syscall.Signal(0x7) - SIGIO = syscall.Signal(0x16) - SIGPOLL = syscall.Signal(0x16) - SIGPROF = syscall.Signal(0x1d) - SIGPWR = syscall.Signal(0x13) - SIGSTOP = syscall.Signal(0x17) - SIGSYS = syscall.Signal(0xc) - SIGTSTP = syscall.Signal(0x18) - SIGTTIN = syscall.Signal(0x1a) - SIGTTOU = syscall.Signal(0x1b) - SIGURG = syscall.Signal(0x15) - SIGUSR1 = syscall.Signal(0x10) - SIGUSR2 = syscall.Signal(0x11) - SIGVTALRM = syscall.Signal(0x1c) - SIGWINCH = syscall.Signal(0x14) - SIGXCPU = syscall.Signal(0x1e) - SIGXFSZ = syscall.Signal(0x1f) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "no such device or address"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EAGAIN", "resource temporarily unavailable"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device or resource busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "invalid cross-device link"}, - {19, "ENODEV", "no such device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "numerical result out of range"}, - {35, "ENOMSG", "no message of desired type"}, - {36, "EIDRM", "identifier removed"}, - {37, "ECHRNG", "channel number out of range"}, - {38, "EL2NSYNC", "level 2 not synchronized"}, - {39, "EL3HLT", "level 3 halted"}, - {40, "EL3RST", "level 3 reset"}, - {41, "ELNRNG", "link number out of range"}, - {42, "EUNATCH", "protocol driver not attached"}, - {43, "ENOCSI", "no CSI structure available"}, - {44, "EL2HLT", "level 2 halted"}, - {45, "EDEADLK", "resource deadlock avoided"}, - {46, "ENOLCK", "no locks available"}, - {50, "EBADE", "invalid exchange"}, - {51, "EBADR", "invalid request descriptor"}, - {52, "EXFULL", "exchange full"}, - {53, "ENOANO", "no anode"}, - {54, "EBADRQC", "invalid request code"}, - {55, "EBADSLT", "invalid slot"}, - {56, "EDEADLOCK", "file locking deadlock error"}, - {59, "EBFONT", "bad font file format"}, - {60, "ENOSTR", "device not a stream"}, - {61, "ENODATA", "no data available"}, - {62, "ETIME", "timer expired"}, - {63, "ENOSR", "out of streams resources"}, - {64, "ENONET", "machine is not on the network"}, - {65, "ENOPKG", "package not installed"}, - {66, "EREMOTE", "object is remote"}, - {67, "ENOLINK", "link has been severed"}, - {68, "EADV", "advertise error"}, - {69, "ESRMNT", "srmount error"}, - {70, "ECOMM", "communication error on send"}, - {71, "EPROTO", "protocol error"}, - {73, "EDOTDOT", "RFS specific error"}, - {74, "EMULTIHOP", "multihop attempted"}, - {77, "EBADMSG", "bad message"}, - {78, "ENAMETOOLONG", "file name too long"}, - {79, "EOVERFLOW", "value too large for defined data type"}, - {80, "ENOTUNIQ", "name not unique on network"}, - {81, "EBADFD", "file descriptor in bad state"}, - {82, "EREMCHG", "remote address changed"}, - {83, "ELIBACC", "can not access a needed shared library"}, - {84, "ELIBBAD", "accessing a corrupted shared library"}, - {85, "ELIBSCN", ".lib section in a.out corrupted"}, - {86, "ELIBMAX", "attempting to link in too many shared libraries"}, - {87, "ELIBEXEC", "cannot exec a shared library directly"}, - {88, "EILSEQ", "invalid or incomplete multibyte or wide character"}, - {89, "ENOSYS", "function not implemented"}, - {90, "ELOOP", "too many levels of symbolic links"}, - {91, "ERESTART", "interrupted system call should be restarted"}, - {92, "ESTRPIPE", "streams pipe error"}, - {93, "ENOTEMPTY", "directory not empty"}, - {94, "EUSERS", "too many users"}, - {95, "ENOTSOCK", "socket operation on non-socket"}, - {96, "EDESTADDRREQ", "destination address required"}, - {97, "EMSGSIZE", "message too long"}, - {98, "EPROTOTYPE", "protocol wrong type for socket"}, - {99, "ENOPROTOOPT", "protocol not available"}, - {120, "EPROTONOSUPPORT", "protocol not supported"}, - {121, "ESOCKTNOSUPPORT", "socket type not supported"}, - {122, "ENOTSUP", "operation not supported"}, - {123, "EPFNOSUPPORT", "protocol family not supported"}, - {124, "EAFNOSUPPORT", "address family not supported by protocol"}, - {125, "EADDRINUSE", "address already in use"}, - {126, "EADDRNOTAVAIL", "cannot assign requested address"}, - {127, "ENETDOWN", "network is down"}, - {128, "ENETUNREACH", "network is unreachable"}, - {129, "ENETRESET", "network dropped connection on reset"}, - {130, "ECONNABORTED", "software caused connection abort"}, - {131, "ECONNRESET", "connection reset by peer"}, - {132, "ENOBUFS", "no buffer space available"}, - {133, "EISCONN", "transport endpoint is already connected"}, - {134, "ENOTCONN", "transport endpoint is not connected"}, - {135, "EUCLEAN", "structure needs cleaning"}, - {137, "ENOTNAM", "not a XENIX named type file"}, - {138, "ENAVAIL", "no XENIX semaphores available"}, - {139, "EISNAM", "is a named type file"}, - {140, "EREMOTEIO", "remote I/O error"}, - {141, "EINIT", "unknown error 141"}, - {142, "EREMDEV", "unknown error 142"}, - {143, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, - {144, "ETOOMANYREFS", "too many references: cannot splice"}, - {145, "ETIMEDOUT", "connection timed out"}, - {146, "ECONNREFUSED", "connection refused"}, - {147, "EHOSTDOWN", "host is down"}, - {148, "EHOSTUNREACH", "no route to host"}, - {149, "EALREADY", "operation already in progress"}, - {150, "EINPROGRESS", "operation now in progress"}, - {151, "ESTALE", "stale file handle"}, - {158, "ECANCELED", "operation canceled"}, - {159, "ENOMEDIUM", "no medium found"}, - {160, "EMEDIUMTYPE", "wrong medium type"}, - {161, "ENOKEY", "required key not available"}, - {162, "EKEYEXPIRED", "key has expired"}, - {163, "EKEYREVOKED", "key has been revoked"}, - {164, "EKEYREJECTED", "key was rejected by service"}, - {165, "EOWNERDEAD", "owner died"}, - {166, "ENOTRECOVERABLE", "state not recoverable"}, - {167, "ERFKILL", "operation not possible due to RF-kill"}, - {168, "EHWPOISON", "memory page has hardware error"}, - {1133, "EDQUOT", "disk quota exceeded"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/breakpoint trap"}, - {6, "SIGABRT", "aborted"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGUSR1", "user defined signal 1"}, - {17, "SIGUSR2", "user defined signal 2"}, - {18, "SIGCHLD", "child exited"}, - {19, "SIGPWR", "power failure"}, - {20, "SIGWINCH", "window changed"}, - {21, "SIGURG", "urgent I/O condition"}, - {22, "SIGIO", "I/O possible"}, - {23, "SIGSTOP", "stopped (signal)"}, - {24, "SIGTSTP", "stopped"}, - {25, "SIGCONT", "continued"}, - {26, "SIGTTIN", "stopped (tty input)"}, - {27, "SIGTTOU", "stopped (tty output)"}, - {28, "SIGVTALRM", "virtual timer expired"}, - {29, "SIGPROF", "profiling timer expired"}, - {30, "SIGXCPU", "CPU time limit exceeded"}, - {31, "SIGXFSZ", "file size limit exceeded"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go deleted file mode 100644 index 1fba17b..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ /dev/null @@ -1,835 +0,0 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/mips64/include -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build mips64 && linux -// +build mips64,linux - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/mips64/include _const.go - -package unix - -import "syscall" - -const ( - B1000000 = 0x1008 - B115200 = 0x1002 - B1152000 = 0x1009 - B1500000 = 0x100a - B2000000 = 0x100b - B230400 = 0x1003 - B2500000 = 0x100c - B3000000 = 0x100d - B3500000 = 0x100e - B4000000 = 0x100f - B460800 = 0x1004 - B500000 = 0x1005 - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 - BLKBSZGET = 0x40081270 - BLKBSZSET = 0x80081271 - BLKFLSBUF = 0x20001261 - BLKFRAGET = 0x20001265 - BLKFRASET = 0x20001264 - BLKGETSIZE = 0x20001260 - BLKGETSIZE64 = 0x40081272 - BLKPBSZGET = 0x2000127b - BLKRAGET = 0x20001263 - BLKRASET = 0x20001262 - BLKROGET = 0x2000125e - BLKROSET = 0x2000125d - BLKRRPART = 0x2000125f - BLKSECTGET = 0x20001267 - BLKSECTSET = 0x20001266 - BLKSSZGET = 0x20001268 - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 - CBAUD = 0x100f - CBAUDEX = 0x1000 - CIBAUD = 0x100f0000 - CLOCAL = 0x800 - CR1 = 0x200 - CR2 = 0x400 - CR3 = 0x600 - CRDLY = 0x600 - CREAD = 0x80 - CS6 = 0x10 - CS7 = 0x20 - CS8 = 0x30 - CSIZE = 0x30 - CSTOPB = 0x40 - ECCGETLAYOUT = 0x41484d11 - ECCGETSTATS = 0x40104d12 - ECHOCTL = 0x200 - ECHOE = 0x10 - ECHOK = 0x20 - ECHOKE = 0x800 - ECHONL = 0x40 - ECHOPRT = 0x400 - EFD_CLOEXEC = 0x80000 - EFD_NONBLOCK = 0x80 - EPOLL_CLOEXEC = 0x80000 - EXTPROC = 0x10000 - FF1 = 0x8000 - FFDLY = 0x8000 - FICLONE = 0x80049409 - FICLONERANGE = 0x8020940d - FLUSHO = 0x2000 - FS_IOC_ENABLE_VERITY = 0x80806685 - FS_IOC_GETFLAGS = 0x40086601 - FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b - FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 - FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 - FS_IOC_SETFLAGS = 0x80086602 - FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 - F_GETLK = 0xe - F_GETLK64 = 0xe - F_GETOWN = 0x17 - F_RDLCK = 0x0 - F_SETLK = 0x6 - F_SETLK64 = 0x6 - F_SETLKW = 0x7 - F_SETLKW64 = 0x7 - F_SETOWN = 0x18 - F_UNLCK = 0x2 - F_WRLCK = 0x1 - HIDIOCGRAWINFO = 0x40084803 - HIDIOCGRDESC = 0x50044802 - HIDIOCGRDESCSIZE = 0x40044801 - HUPCL = 0x400 - ICANON = 0x2 - IEXTEN = 0x100 - IN_CLOEXEC = 0x80000 - IN_NONBLOCK = 0x80 - IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 - ISIG = 0x1 - IUCLC = 0x200 - IXOFF = 0x1000 - IXON = 0x400 - MAP_ANON = 0x800 - MAP_ANONYMOUS = 0x800 - MAP_DENYWRITE = 0x2000 - MAP_EXECUTABLE = 0x4000 - MAP_GROWSDOWN = 0x1000 - MAP_HUGETLB = 0x80000 - MAP_LOCKED = 0x8000 - MAP_NONBLOCK = 0x20000 - MAP_NORESERVE = 0x400 - MAP_POPULATE = 0x10000 - MAP_RENAME = 0x800 - MAP_STACK = 0x40000 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MCL_ONFAULT = 0x4 - MEMERASE = 0x80084d02 - MEMERASE64 = 0x80104d14 - MEMGETBADBLOCK = 0x80084d0b - MEMGETINFO = 0x40204d01 - MEMGETOOBSEL = 0x40c84d0a - MEMGETREGIONCOUNT = 0x40044d07 - MEMISLOCKED = 0x40084d17 - MEMLOCK = 0x80084d05 - MEMREADOOB = 0xc0104d04 - MEMSETBADBLOCK = 0x80084d0c - MEMUNLOCK = 0x80084d06 - MEMWRITEOOB = 0xc0104d03 - MTDFILEMODE = 0x20004d13 - NFDBITS = 0x40 - NLDLY = 0x100 - NOFLSH = 0x80 - NS_GET_NSTYPE = 0x2000b703 - NS_GET_OWNER_UID = 0x2000b704 - NS_GET_PARENT = 0x2000b702 - NS_GET_USERNS = 0x2000b701 - OLCUC = 0x2 - ONLCR = 0x4 - OTPERASE = 0x800c4d19 - OTPGETREGIONCOUNT = 0x80044d0e - OTPGETREGIONINFO = 0x800c4d0f - OTPLOCK = 0x400c4d10 - OTPSELECT = 0x40044d0d - O_APPEND = 0x8 - O_ASYNC = 0x1000 - O_CLOEXEC = 0x80000 - O_CREAT = 0x100 - O_DIRECT = 0x8000 - O_DIRECTORY = 0x10000 - O_DSYNC = 0x10 - O_EXCL = 0x400 - O_FSYNC = 0x4010 - O_LARGEFILE = 0x0 - O_NDELAY = 0x80 - O_NOATIME = 0x40000 - O_NOCTTY = 0x800 - O_NOFOLLOW = 0x20000 - O_NONBLOCK = 0x80 - O_PATH = 0x200000 - O_RSYNC = 0x4010 - O_SYNC = 0x4010 - O_TMPFILE = 0x410000 - O_TRUNC = 0x200 - PARENB = 0x100 - PARODD = 0x200 - PENDIN = 0x4000 - PERF_EVENT_IOC_DISABLE = 0x20002401 - PERF_EVENT_IOC_ENABLE = 0x20002400 - PERF_EVENT_IOC_ID = 0x40082407 - PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b - PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 - PERF_EVENT_IOC_PERIOD = 0x80082404 - PERF_EVENT_IOC_QUERY_BPF = 0xc008240a - PERF_EVENT_IOC_REFRESH = 0x20002402 - PERF_EVENT_IOC_RESET = 0x20002403 - PERF_EVENT_IOC_SET_BPF = 0x80042408 - PERF_EVENT_IOC_SET_FILTER = 0x80082406 - PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 - PPPIOCATTACH = 0x8004743d - PPPIOCATTCHAN = 0x80047438 - PPPIOCBRIDGECHAN = 0x80047435 - PPPIOCCONNECT = 0x8004743a - PPPIOCDETACH = 0x8004743c - PPPIOCDISCONN = 0x20007439 - PPPIOCGASYNCMAP = 0x40047458 - PPPIOCGCHAN = 0x40047437 - PPPIOCGDEBUG = 0x40047441 - PPPIOCGFLAGS = 0x4004745a - PPPIOCGIDLE = 0x4010743f - PPPIOCGIDLE32 = 0x4008743f - PPPIOCGIDLE64 = 0x4010743f - PPPIOCGL2TPSTATS = 0x40487436 - PPPIOCGMRU = 0x40047453 - PPPIOCGRASYNCMAP = 0x40047455 - PPPIOCGUNIT = 0x40047456 - PPPIOCGXASYNCMAP = 0x40207450 - PPPIOCSACTIVE = 0x80107446 - PPPIOCSASYNCMAP = 0x80047457 - PPPIOCSCOMPRESS = 0x8010744d - PPPIOCSDEBUG = 0x80047440 - PPPIOCSFLAGS = 0x80047459 - PPPIOCSMAXCID = 0x80047451 - PPPIOCSMRRU = 0x8004743b - PPPIOCSMRU = 0x80047452 - PPPIOCSNPMODE = 0x8008744b - PPPIOCSPASS = 0x80107447 - PPPIOCSRASYNCMAP = 0x80047454 - PPPIOCSXASYNCMAP = 0x8020744f - PPPIOCUNBRIDGECHAN = 0x20007434 - PPPIOCXFERUNIT = 0x2000744e - PR_SET_PTRACER_ANY = 0xffffffffffffffff - PTRACE_GETFPREGS = 0xe - PTRACE_GET_THREAD_AREA = 0x19 - PTRACE_GET_THREAD_AREA_3264 = 0xc4 - PTRACE_GET_WATCH_REGS = 0xd0 - PTRACE_OLDSETOPTIONS = 0x15 - PTRACE_PEEKDATA_3264 = 0xc1 - PTRACE_PEEKTEXT_3264 = 0xc0 - PTRACE_POKEDATA_3264 = 0xc3 - PTRACE_POKETEXT_3264 = 0xc2 - PTRACE_SETFPREGS = 0xf - PTRACE_SET_THREAD_AREA = 0x1a - PTRACE_SET_WATCH_REGS = 0xd1 - RLIMIT_AS = 0x6 - RLIMIT_MEMLOCK = 0x9 - RLIMIT_NOFILE = 0x5 - RLIMIT_NPROC = 0x8 - RLIMIT_RSS = 0x7 - RNDADDENTROPY = 0x80085203 - RNDADDTOENTCNT = 0x80045201 - RNDCLEARPOOL = 0x20005206 - RNDGETENTCNT = 0x40045200 - RNDGETPOOL = 0x40085202 - RNDRESEEDCRNG = 0x20005207 - RNDZAPENTCNT = 0x20005204 - RTC_AIE_OFF = 0x20007002 - RTC_AIE_ON = 0x20007001 - RTC_ALM_READ = 0x40247008 - RTC_ALM_SET = 0x80247007 - RTC_EPOCH_READ = 0x4008700d - RTC_EPOCH_SET = 0x8008700e - RTC_IRQP_READ = 0x4008700b - RTC_IRQP_SET = 0x8008700c - RTC_PARAM_GET = 0x80187013 - RTC_PARAM_SET = 0x80187014 - RTC_PIE_OFF = 0x20007006 - RTC_PIE_ON = 0x20007005 - RTC_PLL_GET = 0x40207011 - RTC_PLL_SET = 0x80207012 - RTC_RD_TIME = 0x40247009 - RTC_SET_TIME = 0x8024700a - RTC_UIE_OFF = 0x20007004 - RTC_UIE_ON = 0x20007003 - RTC_VL_CLR = 0x20007014 - RTC_VL_READ = 0x40047013 - RTC_WIE_OFF = 0x20007010 - RTC_WIE_ON = 0x2000700f - RTC_WKALM_RD = 0x40287010 - RTC_WKALM_SET = 0x8028700f - SCM_TIMESTAMPING = 0x25 - SCM_TIMESTAMPING_OPT_STATS = 0x36 - SCM_TIMESTAMPING_PKTINFO = 0x3a - SCM_TIMESTAMPNS = 0x23 - SCM_TXTIME = 0x3d - SCM_WIFI_STATUS = 0x29 - SFD_CLOEXEC = 0x80000 - SFD_NONBLOCK = 0x80 - SIOCATMARK = 0x40047307 - SIOCGPGRP = 0x40047309 - SIOCGSTAMPNS_NEW = 0x40108907 - SIOCGSTAMP_NEW = 0x40108906 - SIOCINQ = 0x467f - SIOCOUTQ = 0x7472 - SIOCSPGRP = 0x80047308 - SOCK_CLOEXEC = 0x80000 - SOCK_DGRAM = 0x1 - SOCK_NONBLOCK = 0x80 - SOCK_STREAM = 0x2 - SOL_SOCKET = 0xffff - SO_ACCEPTCONN = 0x1009 - SO_ATTACH_BPF = 0x32 - SO_ATTACH_REUSEPORT_CBPF = 0x33 - SO_ATTACH_REUSEPORT_EBPF = 0x34 - SO_BINDTODEVICE = 0x19 - SO_BINDTOIFINDEX = 0x3e - SO_BPF_EXTENSIONS = 0x30 - SO_BROADCAST = 0x20 - SO_BSDCOMPAT = 0xe - SO_BUF_LOCK = 0x48 - SO_BUSY_POLL = 0x2e - SO_BUSY_POLL_BUDGET = 0x46 - SO_CNX_ADVICE = 0x35 - SO_COOKIE = 0x39 - SO_DETACH_REUSEPORT_BPF = 0x44 - SO_DOMAIN = 0x1029 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_INCOMING_CPU = 0x31 - SO_INCOMING_NAPI_ID = 0x38 - SO_KEEPALIVE = 0x8 - SO_LINGER = 0x80 - SO_LOCK_FILTER = 0x2c - SO_MARK = 0x24 - SO_MAX_PACING_RATE = 0x2f - SO_MEMINFO = 0x37 - SO_NETNS_COOKIE = 0x47 - SO_NOFCS = 0x2b - SO_OOBINLINE = 0x100 - SO_PASSCRED = 0x11 - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x12 - SO_PEERGROUPS = 0x3b - SO_PEERSEC = 0x1e - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x1028 - SO_RCVBUF = 0x1002 - SO_RCVBUFFORCE = 0x21 - SO_RCVLOWAT = 0x1004 - SO_RCVMARK = 0x4b - SO_RCVTIMEO = 0x1006 - SO_RCVTIMEO_NEW = 0x42 - SO_RCVTIMEO_OLD = 0x1006 - SO_RESERVE_MEM = 0x49 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_RXQ_OVFL = 0x28 - SO_SECURITY_AUTHENTICATION = 0x16 - SO_SECURITY_ENCRYPTION_NETWORK = 0x18 - SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 - SO_SELECT_ERR_QUEUE = 0x2d - SO_SNDBUF = 0x1001 - SO_SNDBUFFORCE = 0x1f - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_SNDTIMEO_NEW = 0x43 - SO_SNDTIMEO_OLD = 0x1005 - SO_STYLE = 0x1008 - SO_TIMESTAMPING = 0x25 - SO_TIMESTAMPING_NEW = 0x41 - SO_TIMESTAMPING_OLD = 0x25 - SO_TIMESTAMPNS = 0x23 - SO_TIMESTAMPNS_NEW = 0x40 - SO_TIMESTAMPNS_OLD = 0x23 - SO_TIMESTAMP_NEW = 0x3f - SO_TXREHASH = 0x4a - SO_TXTIME = 0x3d - SO_TYPE = 0x1008 - SO_WIFI_STATUS = 0x29 - SO_ZEROCOPY = 0x3c - TAB1 = 0x800 - TAB2 = 0x1000 - TAB3 = 0x1800 - TABDLY = 0x1800 - TCFLSH = 0x5407 - TCGETA = 0x5401 - TCGETS = 0x540d - TCGETS2 = 0x4030542a - TCSAFLUSH = 0x5410 - TCSBRK = 0x5405 - TCSBRKP = 0x5486 - TCSETA = 0x5402 - TCSETAF = 0x5404 - TCSETAW = 0x5403 - TCSETS = 0x540e - TCSETS2 = 0x8030542b - TCSETSF = 0x5410 - TCSETSF2 = 0x8030542d - TCSETSW = 0x540f - TCSETSW2 = 0x8030542c - TCXONC = 0x5406 - TFD_CLOEXEC = 0x80000 - TFD_NONBLOCK = 0x80 - TIOCCBRK = 0x5428 - TIOCCONS = 0x80047478 - TIOCEXCL = 0x740d - TIOCGDEV = 0x40045432 - TIOCGETD = 0x7400 - TIOCGETP = 0x7408 - TIOCGEXCL = 0x40045440 - TIOCGICOUNT = 0x5492 - TIOCGISO7816 = 0x40285442 - TIOCGLCKTRMIOS = 0x548b - TIOCGLTC = 0x7474 - TIOCGPGRP = 0x40047477 - TIOCGPKT = 0x40045438 - TIOCGPTLCK = 0x40045439 - TIOCGPTN = 0x40045430 - TIOCGPTPEER = 0x20005441 - TIOCGRS485 = 0x4020542e - TIOCGSERIAL = 0x5484 - TIOCGSID = 0x7416 - TIOCGSOFTCAR = 0x5481 - TIOCGWINSZ = 0x40087468 - TIOCINQ = 0x467f - TIOCLINUX = 0x5483 - TIOCMBIC = 0x741c - TIOCMBIS = 0x741b - TIOCMGET = 0x741d - TIOCMIWAIT = 0x5491 - TIOCMSET = 0x741a - TIOCM_CAR = 0x100 - TIOCM_CD = 0x100 - TIOCM_CTS = 0x40 - TIOCM_DSR = 0x400 - TIOCM_RI = 0x200 - TIOCM_RNG = 0x200 - TIOCM_SR = 0x20 - TIOCM_ST = 0x10 - TIOCNOTTY = 0x5471 - TIOCNXCL = 0x740e - TIOCOUTQ = 0x7472 - TIOCPKT = 0x5470 - TIOCSBRK = 0x5427 - TIOCSCTTY = 0x5480 - TIOCSERCONFIG = 0x5488 - TIOCSERGETLSR = 0x548e - TIOCSERGETMULTI = 0x548f - TIOCSERGSTRUCT = 0x548d - TIOCSERGWILD = 0x5489 - TIOCSERSETMULTI = 0x5490 - TIOCSERSWILD = 0x548a - TIOCSER_TEMT = 0x1 - TIOCSETD = 0x7401 - TIOCSETN = 0x740a - TIOCSETP = 0x7409 - TIOCSIG = 0x80045436 - TIOCSISO7816 = 0xc0285443 - TIOCSLCKTRMIOS = 0x548c - TIOCSLTC = 0x7475 - TIOCSPGRP = 0x80047476 - TIOCSPTLCK = 0x80045431 - TIOCSRS485 = 0xc020542f - TIOCSSERIAL = 0x5485 - TIOCSSOFTCAR = 0x5482 - TIOCSTI = 0x5472 - TIOCSWINSZ = 0x80087467 - TIOCVHANGUP = 0x5437 - TOSTOP = 0x8000 - TUNATTACHFILTER = 0x801054d5 - TUNDETACHFILTER = 0x801054d6 - TUNGETDEVNETNS = 0x200054e3 - TUNGETFEATURES = 0x400454cf - TUNGETFILTER = 0x401054db - TUNGETIFF = 0x400454d2 - TUNGETSNDBUF = 0x400454d3 - TUNGETVNETBE = 0x400454df - TUNGETVNETHDRSZ = 0x400454d7 - TUNGETVNETLE = 0x400454dd - TUNSETCARRIER = 0x800454e2 - TUNSETDEBUG = 0x800454c9 - TUNSETFILTEREBPF = 0x400454e1 - TUNSETGROUP = 0x800454ce - TUNSETIFF = 0x800454ca - TUNSETIFINDEX = 0x800454da - TUNSETLINK = 0x800454cd - TUNSETNOCSUM = 0x800454c8 - TUNSETOFFLOAD = 0x800454d0 - TUNSETOWNER = 0x800454cc - TUNSETPERSIST = 0x800454cb - TUNSETQUEUE = 0x800454d9 - TUNSETSNDBUF = 0x800454d4 - TUNSETSTEERINGEBPF = 0x400454e0 - TUNSETTXFILTER = 0x800454d1 - TUNSETVNETBE = 0x800454de - TUNSETVNETHDRSZ = 0x800454d8 - TUNSETVNETLE = 0x800454dc - UBI_IOCATT = 0x80186f40 - UBI_IOCDET = 0x80046f41 - UBI_IOCEBCH = 0x80044f02 - UBI_IOCEBER = 0x80044f01 - UBI_IOCEBISMAP = 0x40044f05 - UBI_IOCEBMAP = 0x80084f03 - UBI_IOCEBUNMAP = 0x80044f04 - UBI_IOCMKVOL = 0x80986f00 - UBI_IOCRMVOL = 0x80046f01 - UBI_IOCRNVOL = 0x91106f03 - UBI_IOCRPEB = 0x80046f04 - UBI_IOCRSVOL = 0x800c6f02 - UBI_IOCSETVOLPROP = 0x80104f06 - UBI_IOCSPEB = 0x80046f05 - UBI_IOCVOLCRBLK = 0x80804f07 - UBI_IOCVOLRMBLK = 0x20004f08 - UBI_IOCVOLUP = 0x80084f00 - VDISCARD = 0xd - VEOF = 0x10 - VEOL = 0x11 - VEOL2 = 0x6 - VMIN = 0x4 - VREPRINT = 0xc - VSTART = 0x8 - VSTOP = 0x9 - VSUSP = 0xa - VSWTC = 0x7 - VSWTCH = 0x7 - VT1 = 0x4000 - VTDLY = 0x4000 - VTIME = 0x5 - VWERASE = 0xe - WDIOC_GETBOOTSTATUS = 0x40045702 - WDIOC_GETPRETIMEOUT = 0x40045709 - WDIOC_GETSTATUS = 0x40045701 - WDIOC_GETSUPPORT = 0x40285700 - WDIOC_GETTEMP = 0x40045703 - WDIOC_GETTIMELEFT = 0x4004570a - WDIOC_GETTIMEOUT = 0x40045707 - WDIOC_KEEPALIVE = 0x40045705 - WDIOC_SETOPTIONS = 0x40045704 - WORDSIZE = 0x40 - XCASE = 0x4 - XTABS = 0x1800 - _HIDIOCGRAWNAME = 0x40804804 - _HIDIOCGRAWPHYS = 0x40404805 - _HIDIOCGRAWUNIQ = 0x40404808 -) - -// Errors -const ( - EADDRINUSE = syscall.Errno(0x7d) - EADDRNOTAVAIL = syscall.Errno(0x7e) - EADV = syscall.Errno(0x44) - EAFNOSUPPORT = syscall.Errno(0x7c) - EALREADY = syscall.Errno(0x95) - EBADE = syscall.Errno(0x32) - EBADFD = syscall.Errno(0x51) - EBADMSG = syscall.Errno(0x4d) - EBADR = syscall.Errno(0x33) - EBADRQC = syscall.Errno(0x36) - EBADSLT = syscall.Errno(0x37) - EBFONT = syscall.Errno(0x3b) - ECANCELED = syscall.Errno(0x9e) - ECHRNG = syscall.Errno(0x25) - ECOMM = syscall.Errno(0x46) - ECONNABORTED = syscall.Errno(0x82) - ECONNREFUSED = syscall.Errno(0x92) - ECONNRESET = syscall.Errno(0x83) - EDEADLK = syscall.Errno(0x2d) - EDEADLOCK = syscall.Errno(0x38) - EDESTADDRREQ = syscall.Errno(0x60) - EDOTDOT = syscall.Errno(0x49) - EDQUOT = syscall.Errno(0x46d) - EHOSTDOWN = syscall.Errno(0x93) - EHOSTUNREACH = syscall.Errno(0x94) - EHWPOISON = syscall.Errno(0xa8) - EIDRM = syscall.Errno(0x24) - EILSEQ = syscall.Errno(0x58) - EINIT = syscall.Errno(0x8d) - EINPROGRESS = syscall.Errno(0x96) - EISCONN = syscall.Errno(0x85) - EISNAM = syscall.Errno(0x8b) - EKEYEXPIRED = syscall.Errno(0xa2) - EKEYREJECTED = syscall.Errno(0xa4) - EKEYREVOKED = syscall.Errno(0xa3) - EL2HLT = syscall.Errno(0x2c) - EL2NSYNC = syscall.Errno(0x26) - EL3HLT = syscall.Errno(0x27) - EL3RST = syscall.Errno(0x28) - ELIBACC = syscall.Errno(0x53) - ELIBBAD = syscall.Errno(0x54) - ELIBEXEC = syscall.Errno(0x57) - ELIBMAX = syscall.Errno(0x56) - ELIBSCN = syscall.Errno(0x55) - ELNRNG = syscall.Errno(0x29) - ELOOP = syscall.Errno(0x5a) - EMEDIUMTYPE = syscall.Errno(0xa0) - EMSGSIZE = syscall.Errno(0x61) - EMULTIHOP = syscall.Errno(0x4a) - ENAMETOOLONG = syscall.Errno(0x4e) - ENAVAIL = syscall.Errno(0x8a) - ENETDOWN = syscall.Errno(0x7f) - ENETRESET = syscall.Errno(0x81) - ENETUNREACH = syscall.Errno(0x80) - ENOANO = syscall.Errno(0x35) - ENOBUFS = syscall.Errno(0x84) - ENOCSI = syscall.Errno(0x2b) - ENODATA = syscall.Errno(0x3d) - ENOKEY = syscall.Errno(0xa1) - ENOLCK = syscall.Errno(0x2e) - ENOLINK = syscall.Errno(0x43) - ENOMEDIUM = syscall.Errno(0x9f) - ENOMSG = syscall.Errno(0x23) - ENONET = syscall.Errno(0x40) - ENOPKG = syscall.Errno(0x41) - ENOPROTOOPT = syscall.Errno(0x63) - ENOSR = syscall.Errno(0x3f) - ENOSTR = syscall.Errno(0x3c) - ENOSYS = syscall.Errno(0x59) - ENOTCONN = syscall.Errno(0x86) - ENOTEMPTY = syscall.Errno(0x5d) - ENOTNAM = syscall.Errno(0x89) - ENOTRECOVERABLE = syscall.Errno(0xa6) - ENOTSOCK = syscall.Errno(0x5f) - ENOTSUP = syscall.Errno(0x7a) - ENOTUNIQ = syscall.Errno(0x50) - EOPNOTSUPP = syscall.Errno(0x7a) - EOVERFLOW = syscall.Errno(0x4f) - EOWNERDEAD = syscall.Errno(0xa5) - EPFNOSUPPORT = syscall.Errno(0x7b) - EPROTO = syscall.Errno(0x47) - EPROTONOSUPPORT = syscall.Errno(0x78) - EPROTOTYPE = syscall.Errno(0x62) - EREMCHG = syscall.Errno(0x52) - EREMDEV = syscall.Errno(0x8e) - EREMOTE = syscall.Errno(0x42) - EREMOTEIO = syscall.Errno(0x8c) - ERESTART = syscall.Errno(0x5b) - ERFKILL = syscall.Errno(0xa7) - ESHUTDOWN = syscall.Errno(0x8f) - ESOCKTNOSUPPORT = syscall.Errno(0x79) - ESRMNT = syscall.Errno(0x45) - ESTALE = syscall.Errno(0x97) - ESTRPIPE = syscall.Errno(0x5c) - ETIME = syscall.Errno(0x3e) - ETIMEDOUT = syscall.Errno(0x91) - ETOOMANYREFS = syscall.Errno(0x90) - EUCLEAN = syscall.Errno(0x87) - EUNATCH = syscall.Errno(0x2a) - EUSERS = syscall.Errno(0x5e) - EXFULL = syscall.Errno(0x34) -) - -// Signals -const ( - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x12) - SIGCLD = syscall.Signal(0x12) - SIGCONT = syscall.Signal(0x19) - SIGEMT = syscall.Signal(0x7) - SIGIO = syscall.Signal(0x16) - SIGPOLL = syscall.Signal(0x16) - SIGPROF = syscall.Signal(0x1d) - SIGPWR = syscall.Signal(0x13) - SIGSTOP = syscall.Signal(0x17) - SIGSYS = syscall.Signal(0xc) - SIGTSTP = syscall.Signal(0x18) - SIGTTIN = syscall.Signal(0x1a) - SIGTTOU = syscall.Signal(0x1b) - SIGURG = syscall.Signal(0x15) - SIGUSR1 = syscall.Signal(0x10) - SIGUSR2 = syscall.Signal(0x11) - SIGVTALRM = syscall.Signal(0x1c) - SIGWINCH = syscall.Signal(0x14) - SIGXCPU = syscall.Signal(0x1e) - SIGXFSZ = syscall.Signal(0x1f) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "no such device or address"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EAGAIN", "resource temporarily unavailable"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device or resource busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "invalid cross-device link"}, - {19, "ENODEV", "no such device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "numerical result out of range"}, - {35, "ENOMSG", "no message of desired type"}, - {36, "EIDRM", "identifier removed"}, - {37, "ECHRNG", "channel number out of range"}, - {38, "EL2NSYNC", "level 2 not synchronized"}, - {39, "EL3HLT", "level 3 halted"}, - {40, "EL3RST", "level 3 reset"}, - {41, "ELNRNG", "link number out of range"}, - {42, "EUNATCH", "protocol driver not attached"}, - {43, "ENOCSI", "no CSI structure available"}, - {44, "EL2HLT", "level 2 halted"}, - {45, "EDEADLK", "resource deadlock avoided"}, - {46, "ENOLCK", "no locks available"}, - {50, "EBADE", "invalid exchange"}, - {51, "EBADR", "invalid request descriptor"}, - {52, "EXFULL", "exchange full"}, - {53, "ENOANO", "no anode"}, - {54, "EBADRQC", "invalid request code"}, - {55, "EBADSLT", "invalid slot"}, - {56, "EDEADLOCK", "file locking deadlock error"}, - {59, "EBFONT", "bad font file format"}, - {60, "ENOSTR", "device not a stream"}, - {61, "ENODATA", "no data available"}, - {62, "ETIME", "timer expired"}, - {63, "ENOSR", "out of streams resources"}, - {64, "ENONET", "machine is not on the network"}, - {65, "ENOPKG", "package not installed"}, - {66, "EREMOTE", "object is remote"}, - {67, "ENOLINK", "link has been severed"}, - {68, "EADV", "advertise error"}, - {69, "ESRMNT", "srmount error"}, - {70, "ECOMM", "communication error on send"}, - {71, "EPROTO", "protocol error"}, - {73, "EDOTDOT", "RFS specific error"}, - {74, "EMULTIHOP", "multihop attempted"}, - {77, "EBADMSG", "bad message"}, - {78, "ENAMETOOLONG", "file name too long"}, - {79, "EOVERFLOW", "value too large for defined data type"}, - {80, "ENOTUNIQ", "name not unique on network"}, - {81, "EBADFD", "file descriptor in bad state"}, - {82, "EREMCHG", "remote address changed"}, - {83, "ELIBACC", "can not access a needed shared library"}, - {84, "ELIBBAD", "accessing a corrupted shared library"}, - {85, "ELIBSCN", ".lib section in a.out corrupted"}, - {86, "ELIBMAX", "attempting to link in too many shared libraries"}, - {87, "ELIBEXEC", "cannot exec a shared library directly"}, - {88, "EILSEQ", "invalid or incomplete multibyte or wide character"}, - {89, "ENOSYS", "function not implemented"}, - {90, "ELOOP", "too many levels of symbolic links"}, - {91, "ERESTART", "interrupted system call should be restarted"}, - {92, "ESTRPIPE", "streams pipe error"}, - {93, "ENOTEMPTY", "directory not empty"}, - {94, "EUSERS", "too many users"}, - {95, "ENOTSOCK", "socket operation on non-socket"}, - {96, "EDESTADDRREQ", "destination address required"}, - {97, "EMSGSIZE", "message too long"}, - {98, "EPROTOTYPE", "protocol wrong type for socket"}, - {99, "ENOPROTOOPT", "protocol not available"}, - {120, "EPROTONOSUPPORT", "protocol not supported"}, - {121, "ESOCKTNOSUPPORT", "socket type not supported"}, - {122, "ENOTSUP", "operation not supported"}, - {123, "EPFNOSUPPORT", "protocol family not supported"}, - {124, "EAFNOSUPPORT", "address family not supported by protocol"}, - {125, "EADDRINUSE", "address already in use"}, - {126, "EADDRNOTAVAIL", "cannot assign requested address"}, - {127, "ENETDOWN", "network is down"}, - {128, "ENETUNREACH", "network is unreachable"}, - {129, "ENETRESET", "network dropped connection on reset"}, - {130, "ECONNABORTED", "software caused connection abort"}, - {131, "ECONNRESET", "connection reset by peer"}, - {132, "ENOBUFS", "no buffer space available"}, - {133, "EISCONN", "transport endpoint is already connected"}, - {134, "ENOTCONN", "transport endpoint is not connected"}, - {135, "EUCLEAN", "structure needs cleaning"}, - {137, "ENOTNAM", "not a XENIX named type file"}, - {138, "ENAVAIL", "no XENIX semaphores available"}, - {139, "EISNAM", "is a named type file"}, - {140, "EREMOTEIO", "remote I/O error"}, - {141, "EINIT", "unknown error 141"}, - {142, "EREMDEV", "unknown error 142"}, - {143, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, - {144, "ETOOMANYREFS", "too many references: cannot splice"}, - {145, "ETIMEDOUT", "connection timed out"}, - {146, "ECONNREFUSED", "connection refused"}, - {147, "EHOSTDOWN", "host is down"}, - {148, "EHOSTUNREACH", "no route to host"}, - {149, "EALREADY", "operation already in progress"}, - {150, "EINPROGRESS", "operation now in progress"}, - {151, "ESTALE", "stale file handle"}, - {158, "ECANCELED", "operation canceled"}, - {159, "ENOMEDIUM", "no medium found"}, - {160, "EMEDIUMTYPE", "wrong medium type"}, - {161, "ENOKEY", "required key not available"}, - {162, "EKEYEXPIRED", "key has expired"}, - {163, "EKEYREVOKED", "key has been revoked"}, - {164, "EKEYREJECTED", "key was rejected by service"}, - {165, "EOWNERDEAD", "owner died"}, - {166, "ENOTRECOVERABLE", "state not recoverable"}, - {167, "ERFKILL", "operation not possible due to RF-kill"}, - {168, "EHWPOISON", "memory page has hardware error"}, - {1133, "EDQUOT", "disk quota exceeded"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/breakpoint trap"}, - {6, "SIGABRT", "aborted"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGUSR1", "user defined signal 1"}, - {17, "SIGUSR2", "user defined signal 2"}, - {18, "SIGCHLD", "child exited"}, - {19, "SIGPWR", "power failure"}, - {20, "SIGWINCH", "window changed"}, - {21, "SIGURG", "urgent I/O condition"}, - {22, "SIGIO", "I/O possible"}, - {23, "SIGSTOP", "stopped (signal)"}, - {24, "SIGTSTP", "stopped"}, - {25, "SIGCONT", "continued"}, - {26, "SIGTTIN", "stopped (tty input)"}, - {27, "SIGTTOU", "stopped (tty output)"}, - {28, "SIGVTALRM", "virtual timer expired"}, - {29, "SIGPROF", "profiling timer expired"}, - {30, "SIGXCPU", "CPU time limit exceeded"}, - {31, "SIGXFSZ", "file size limit exceeded"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go deleted file mode 100644 index b77dde3..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ /dev/null @@ -1,835 +0,0 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/mips64le/include -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build mips64le && linux -// +build mips64le,linux - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/mips64le/include _const.go - -package unix - -import "syscall" - -const ( - B1000000 = 0x1008 - B115200 = 0x1002 - B1152000 = 0x1009 - B1500000 = 0x100a - B2000000 = 0x100b - B230400 = 0x1003 - B2500000 = 0x100c - B3000000 = 0x100d - B3500000 = 0x100e - B4000000 = 0x100f - B460800 = 0x1004 - B500000 = 0x1005 - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 - BLKBSZGET = 0x40081270 - BLKBSZSET = 0x80081271 - BLKFLSBUF = 0x20001261 - BLKFRAGET = 0x20001265 - BLKFRASET = 0x20001264 - BLKGETSIZE = 0x20001260 - BLKGETSIZE64 = 0x40081272 - BLKPBSZGET = 0x2000127b - BLKRAGET = 0x20001263 - BLKRASET = 0x20001262 - BLKROGET = 0x2000125e - BLKROSET = 0x2000125d - BLKRRPART = 0x2000125f - BLKSECTGET = 0x20001267 - BLKSECTSET = 0x20001266 - BLKSSZGET = 0x20001268 - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 - CBAUD = 0x100f - CBAUDEX = 0x1000 - CIBAUD = 0x100f0000 - CLOCAL = 0x800 - CR1 = 0x200 - CR2 = 0x400 - CR3 = 0x600 - CRDLY = 0x600 - CREAD = 0x80 - CS6 = 0x10 - CS7 = 0x20 - CS8 = 0x30 - CSIZE = 0x30 - CSTOPB = 0x40 - ECCGETLAYOUT = 0x41484d11 - ECCGETSTATS = 0x40104d12 - ECHOCTL = 0x200 - ECHOE = 0x10 - ECHOK = 0x20 - ECHOKE = 0x800 - ECHONL = 0x40 - ECHOPRT = 0x400 - EFD_CLOEXEC = 0x80000 - EFD_NONBLOCK = 0x80 - EPOLL_CLOEXEC = 0x80000 - EXTPROC = 0x10000 - FF1 = 0x8000 - FFDLY = 0x8000 - FICLONE = 0x80049409 - FICLONERANGE = 0x8020940d - FLUSHO = 0x2000 - FS_IOC_ENABLE_VERITY = 0x80806685 - FS_IOC_GETFLAGS = 0x40086601 - FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b - FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 - FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 - FS_IOC_SETFLAGS = 0x80086602 - FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 - F_GETLK = 0xe - F_GETLK64 = 0xe - F_GETOWN = 0x17 - F_RDLCK = 0x0 - F_SETLK = 0x6 - F_SETLK64 = 0x6 - F_SETLKW = 0x7 - F_SETLKW64 = 0x7 - F_SETOWN = 0x18 - F_UNLCK = 0x2 - F_WRLCK = 0x1 - HIDIOCGRAWINFO = 0x40084803 - HIDIOCGRDESC = 0x50044802 - HIDIOCGRDESCSIZE = 0x40044801 - HUPCL = 0x400 - ICANON = 0x2 - IEXTEN = 0x100 - IN_CLOEXEC = 0x80000 - IN_NONBLOCK = 0x80 - IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 - ISIG = 0x1 - IUCLC = 0x200 - IXOFF = 0x1000 - IXON = 0x400 - MAP_ANON = 0x800 - MAP_ANONYMOUS = 0x800 - MAP_DENYWRITE = 0x2000 - MAP_EXECUTABLE = 0x4000 - MAP_GROWSDOWN = 0x1000 - MAP_HUGETLB = 0x80000 - MAP_LOCKED = 0x8000 - MAP_NONBLOCK = 0x20000 - MAP_NORESERVE = 0x400 - MAP_POPULATE = 0x10000 - MAP_RENAME = 0x800 - MAP_STACK = 0x40000 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MCL_ONFAULT = 0x4 - MEMERASE = 0x80084d02 - MEMERASE64 = 0x80104d14 - MEMGETBADBLOCK = 0x80084d0b - MEMGETINFO = 0x40204d01 - MEMGETOOBSEL = 0x40c84d0a - MEMGETREGIONCOUNT = 0x40044d07 - MEMISLOCKED = 0x40084d17 - MEMLOCK = 0x80084d05 - MEMREADOOB = 0xc0104d04 - MEMSETBADBLOCK = 0x80084d0c - MEMUNLOCK = 0x80084d06 - MEMWRITEOOB = 0xc0104d03 - MTDFILEMODE = 0x20004d13 - NFDBITS = 0x40 - NLDLY = 0x100 - NOFLSH = 0x80 - NS_GET_NSTYPE = 0x2000b703 - NS_GET_OWNER_UID = 0x2000b704 - NS_GET_PARENT = 0x2000b702 - NS_GET_USERNS = 0x2000b701 - OLCUC = 0x2 - ONLCR = 0x4 - OTPERASE = 0x800c4d19 - OTPGETREGIONCOUNT = 0x80044d0e - OTPGETREGIONINFO = 0x800c4d0f - OTPLOCK = 0x400c4d10 - OTPSELECT = 0x40044d0d - O_APPEND = 0x8 - O_ASYNC = 0x1000 - O_CLOEXEC = 0x80000 - O_CREAT = 0x100 - O_DIRECT = 0x8000 - O_DIRECTORY = 0x10000 - O_DSYNC = 0x10 - O_EXCL = 0x400 - O_FSYNC = 0x4010 - O_LARGEFILE = 0x0 - O_NDELAY = 0x80 - O_NOATIME = 0x40000 - O_NOCTTY = 0x800 - O_NOFOLLOW = 0x20000 - O_NONBLOCK = 0x80 - O_PATH = 0x200000 - O_RSYNC = 0x4010 - O_SYNC = 0x4010 - O_TMPFILE = 0x410000 - O_TRUNC = 0x200 - PARENB = 0x100 - PARODD = 0x200 - PENDIN = 0x4000 - PERF_EVENT_IOC_DISABLE = 0x20002401 - PERF_EVENT_IOC_ENABLE = 0x20002400 - PERF_EVENT_IOC_ID = 0x40082407 - PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b - PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 - PERF_EVENT_IOC_PERIOD = 0x80082404 - PERF_EVENT_IOC_QUERY_BPF = 0xc008240a - PERF_EVENT_IOC_REFRESH = 0x20002402 - PERF_EVENT_IOC_RESET = 0x20002403 - PERF_EVENT_IOC_SET_BPF = 0x80042408 - PERF_EVENT_IOC_SET_FILTER = 0x80082406 - PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 - PPPIOCATTACH = 0x8004743d - PPPIOCATTCHAN = 0x80047438 - PPPIOCBRIDGECHAN = 0x80047435 - PPPIOCCONNECT = 0x8004743a - PPPIOCDETACH = 0x8004743c - PPPIOCDISCONN = 0x20007439 - PPPIOCGASYNCMAP = 0x40047458 - PPPIOCGCHAN = 0x40047437 - PPPIOCGDEBUG = 0x40047441 - PPPIOCGFLAGS = 0x4004745a - PPPIOCGIDLE = 0x4010743f - PPPIOCGIDLE32 = 0x4008743f - PPPIOCGIDLE64 = 0x4010743f - PPPIOCGL2TPSTATS = 0x40487436 - PPPIOCGMRU = 0x40047453 - PPPIOCGRASYNCMAP = 0x40047455 - PPPIOCGUNIT = 0x40047456 - PPPIOCGXASYNCMAP = 0x40207450 - PPPIOCSACTIVE = 0x80107446 - PPPIOCSASYNCMAP = 0x80047457 - PPPIOCSCOMPRESS = 0x8010744d - PPPIOCSDEBUG = 0x80047440 - PPPIOCSFLAGS = 0x80047459 - PPPIOCSMAXCID = 0x80047451 - PPPIOCSMRRU = 0x8004743b - PPPIOCSMRU = 0x80047452 - PPPIOCSNPMODE = 0x8008744b - PPPIOCSPASS = 0x80107447 - PPPIOCSRASYNCMAP = 0x80047454 - PPPIOCSXASYNCMAP = 0x8020744f - PPPIOCUNBRIDGECHAN = 0x20007434 - PPPIOCXFERUNIT = 0x2000744e - PR_SET_PTRACER_ANY = 0xffffffffffffffff - PTRACE_GETFPREGS = 0xe - PTRACE_GET_THREAD_AREA = 0x19 - PTRACE_GET_THREAD_AREA_3264 = 0xc4 - PTRACE_GET_WATCH_REGS = 0xd0 - PTRACE_OLDSETOPTIONS = 0x15 - PTRACE_PEEKDATA_3264 = 0xc1 - PTRACE_PEEKTEXT_3264 = 0xc0 - PTRACE_POKEDATA_3264 = 0xc3 - PTRACE_POKETEXT_3264 = 0xc2 - PTRACE_SETFPREGS = 0xf - PTRACE_SET_THREAD_AREA = 0x1a - PTRACE_SET_WATCH_REGS = 0xd1 - RLIMIT_AS = 0x6 - RLIMIT_MEMLOCK = 0x9 - RLIMIT_NOFILE = 0x5 - RLIMIT_NPROC = 0x8 - RLIMIT_RSS = 0x7 - RNDADDENTROPY = 0x80085203 - RNDADDTOENTCNT = 0x80045201 - RNDCLEARPOOL = 0x20005206 - RNDGETENTCNT = 0x40045200 - RNDGETPOOL = 0x40085202 - RNDRESEEDCRNG = 0x20005207 - RNDZAPENTCNT = 0x20005204 - RTC_AIE_OFF = 0x20007002 - RTC_AIE_ON = 0x20007001 - RTC_ALM_READ = 0x40247008 - RTC_ALM_SET = 0x80247007 - RTC_EPOCH_READ = 0x4008700d - RTC_EPOCH_SET = 0x8008700e - RTC_IRQP_READ = 0x4008700b - RTC_IRQP_SET = 0x8008700c - RTC_PARAM_GET = 0x80187013 - RTC_PARAM_SET = 0x80187014 - RTC_PIE_OFF = 0x20007006 - RTC_PIE_ON = 0x20007005 - RTC_PLL_GET = 0x40207011 - RTC_PLL_SET = 0x80207012 - RTC_RD_TIME = 0x40247009 - RTC_SET_TIME = 0x8024700a - RTC_UIE_OFF = 0x20007004 - RTC_UIE_ON = 0x20007003 - RTC_VL_CLR = 0x20007014 - RTC_VL_READ = 0x40047013 - RTC_WIE_OFF = 0x20007010 - RTC_WIE_ON = 0x2000700f - RTC_WKALM_RD = 0x40287010 - RTC_WKALM_SET = 0x8028700f - SCM_TIMESTAMPING = 0x25 - SCM_TIMESTAMPING_OPT_STATS = 0x36 - SCM_TIMESTAMPING_PKTINFO = 0x3a - SCM_TIMESTAMPNS = 0x23 - SCM_TXTIME = 0x3d - SCM_WIFI_STATUS = 0x29 - SFD_CLOEXEC = 0x80000 - SFD_NONBLOCK = 0x80 - SIOCATMARK = 0x40047307 - SIOCGPGRP = 0x40047309 - SIOCGSTAMPNS_NEW = 0x40108907 - SIOCGSTAMP_NEW = 0x40108906 - SIOCINQ = 0x467f - SIOCOUTQ = 0x7472 - SIOCSPGRP = 0x80047308 - SOCK_CLOEXEC = 0x80000 - SOCK_DGRAM = 0x1 - SOCK_NONBLOCK = 0x80 - SOCK_STREAM = 0x2 - SOL_SOCKET = 0xffff - SO_ACCEPTCONN = 0x1009 - SO_ATTACH_BPF = 0x32 - SO_ATTACH_REUSEPORT_CBPF = 0x33 - SO_ATTACH_REUSEPORT_EBPF = 0x34 - SO_BINDTODEVICE = 0x19 - SO_BINDTOIFINDEX = 0x3e - SO_BPF_EXTENSIONS = 0x30 - SO_BROADCAST = 0x20 - SO_BSDCOMPAT = 0xe - SO_BUF_LOCK = 0x48 - SO_BUSY_POLL = 0x2e - SO_BUSY_POLL_BUDGET = 0x46 - SO_CNX_ADVICE = 0x35 - SO_COOKIE = 0x39 - SO_DETACH_REUSEPORT_BPF = 0x44 - SO_DOMAIN = 0x1029 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_INCOMING_CPU = 0x31 - SO_INCOMING_NAPI_ID = 0x38 - SO_KEEPALIVE = 0x8 - SO_LINGER = 0x80 - SO_LOCK_FILTER = 0x2c - SO_MARK = 0x24 - SO_MAX_PACING_RATE = 0x2f - SO_MEMINFO = 0x37 - SO_NETNS_COOKIE = 0x47 - SO_NOFCS = 0x2b - SO_OOBINLINE = 0x100 - SO_PASSCRED = 0x11 - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x12 - SO_PEERGROUPS = 0x3b - SO_PEERSEC = 0x1e - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x1028 - SO_RCVBUF = 0x1002 - SO_RCVBUFFORCE = 0x21 - SO_RCVLOWAT = 0x1004 - SO_RCVMARK = 0x4b - SO_RCVTIMEO = 0x1006 - SO_RCVTIMEO_NEW = 0x42 - SO_RCVTIMEO_OLD = 0x1006 - SO_RESERVE_MEM = 0x49 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_RXQ_OVFL = 0x28 - SO_SECURITY_AUTHENTICATION = 0x16 - SO_SECURITY_ENCRYPTION_NETWORK = 0x18 - SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 - SO_SELECT_ERR_QUEUE = 0x2d - SO_SNDBUF = 0x1001 - SO_SNDBUFFORCE = 0x1f - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_SNDTIMEO_NEW = 0x43 - SO_SNDTIMEO_OLD = 0x1005 - SO_STYLE = 0x1008 - SO_TIMESTAMPING = 0x25 - SO_TIMESTAMPING_NEW = 0x41 - SO_TIMESTAMPING_OLD = 0x25 - SO_TIMESTAMPNS = 0x23 - SO_TIMESTAMPNS_NEW = 0x40 - SO_TIMESTAMPNS_OLD = 0x23 - SO_TIMESTAMP_NEW = 0x3f - SO_TXREHASH = 0x4a - SO_TXTIME = 0x3d - SO_TYPE = 0x1008 - SO_WIFI_STATUS = 0x29 - SO_ZEROCOPY = 0x3c - TAB1 = 0x800 - TAB2 = 0x1000 - TAB3 = 0x1800 - TABDLY = 0x1800 - TCFLSH = 0x5407 - TCGETA = 0x5401 - TCGETS = 0x540d - TCGETS2 = 0x4030542a - TCSAFLUSH = 0x5410 - TCSBRK = 0x5405 - TCSBRKP = 0x5486 - TCSETA = 0x5402 - TCSETAF = 0x5404 - TCSETAW = 0x5403 - TCSETS = 0x540e - TCSETS2 = 0x8030542b - TCSETSF = 0x5410 - TCSETSF2 = 0x8030542d - TCSETSW = 0x540f - TCSETSW2 = 0x8030542c - TCXONC = 0x5406 - TFD_CLOEXEC = 0x80000 - TFD_NONBLOCK = 0x80 - TIOCCBRK = 0x5428 - TIOCCONS = 0x80047478 - TIOCEXCL = 0x740d - TIOCGDEV = 0x40045432 - TIOCGETD = 0x7400 - TIOCGETP = 0x7408 - TIOCGEXCL = 0x40045440 - TIOCGICOUNT = 0x5492 - TIOCGISO7816 = 0x40285442 - TIOCGLCKTRMIOS = 0x548b - TIOCGLTC = 0x7474 - TIOCGPGRP = 0x40047477 - TIOCGPKT = 0x40045438 - TIOCGPTLCK = 0x40045439 - TIOCGPTN = 0x40045430 - TIOCGPTPEER = 0x20005441 - TIOCGRS485 = 0x4020542e - TIOCGSERIAL = 0x5484 - TIOCGSID = 0x7416 - TIOCGSOFTCAR = 0x5481 - TIOCGWINSZ = 0x40087468 - TIOCINQ = 0x467f - TIOCLINUX = 0x5483 - TIOCMBIC = 0x741c - TIOCMBIS = 0x741b - TIOCMGET = 0x741d - TIOCMIWAIT = 0x5491 - TIOCMSET = 0x741a - TIOCM_CAR = 0x100 - TIOCM_CD = 0x100 - TIOCM_CTS = 0x40 - TIOCM_DSR = 0x400 - TIOCM_RI = 0x200 - TIOCM_RNG = 0x200 - TIOCM_SR = 0x20 - TIOCM_ST = 0x10 - TIOCNOTTY = 0x5471 - TIOCNXCL = 0x740e - TIOCOUTQ = 0x7472 - TIOCPKT = 0x5470 - TIOCSBRK = 0x5427 - TIOCSCTTY = 0x5480 - TIOCSERCONFIG = 0x5488 - TIOCSERGETLSR = 0x548e - TIOCSERGETMULTI = 0x548f - TIOCSERGSTRUCT = 0x548d - TIOCSERGWILD = 0x5489 - TIOCSERSETMULTI = 0x5490 - TIOCSERSWILD = 0x548a - TIOCSER_TEMT = 0x1 - TIOCSETD = 0x7401 - TIOCSETN = 0x740a - TIOCSETP = 0x7409 - TIOCSIG = 0x80045436 - TIOCSISO7816 = 0xc0285443 - TIOCSLCKTRMIOS = 0x548c - TIOCSLTC = 0x7475 - TIOCSPGRP = 0x80047476 - TIOCSPTLCK = 0x80045431 - TIOCSRS485 = 0xc020542f - TIOCSSERIAL = 0x5485 - TIOCSSOFTCAR = 0x5482 - TIOCSTI = 0x5472 - TIOCSWINSZ = 0x80087467 - TIOCVHANGUP = 0x5437 - TOSTOP = 0x8000 - TUNATTACHFILTER = 0x801054d5 - TUNDETACHFILTER = 0x801054d6 - TUNGETDEVNETNS = 0x200054e3 - TUNGETFEATURES = 0x400454cf - TUNGETFILTER = 0x401054db - TUNGETIFF = 0x400454d2 - TUNGETSNDBUF = 0x400454d3 - TUNGETVNETBE = 0x400454df - TUNGETVNETHDRSZ = 0x400454d7 - TUNGETVNETLE = 0x400454dd - TUNSETCARRIER = 0x800454e2 - TUNSETDEBUG = 0x800454c9 - TUNSETFILTEREBPF = 0x400454e1 - TUNSETGROUP = 0x800454ce - TUNSETIFF = 0x800454ca - TUNSETIFINDEX = 0x800454da - TUNSETLINK = 0x800454cd - TUNSETNOCSUM = 0x800454c8 - TUNSETOFFLOAD = 0x800454d0 - TUNSETOWNER = 0x800454cc - TUNSETPERSIST = 0x800454cb - TUNSETQUEUE = 0x800454d9 - TUNSETSNDBUF = 0x800454d4 - TUNSETSTEERINGEBPF = 0x400454e0 - TUNSETTXFILTER = 0x800454d1 - TUNSETVNETBE = 0x800454de - TUNSETVNETHDRSZ = 0x800454d8 - TUNSETVNETLE = 0x800454dc - UBI_IOCATT = 0x80186f40 - UBI_IOCDET = 0x80046f41 - UBI_IOCEBCH = 0x80044f02 - UBI_IOCEBER = 0x80044f01 - UBI_IOCEBISMAP = 0x40044f05 - UBI_IOCEBMAP = 0x80084f03 - UBI_IOCEBUNMAP = 0x80044f04 - UBI_IOCMKVOL = 0x80986f00 - UBI_IOCRMVOL = 0x80046f01 - UBI_IOCRNVOL = 0x91106f03 - UBI_IOCRPEB = 0x80046f04 - UBI_IOCRSVOL = 0x800c6f02 - UBI_IOCSETVOLPROP = 0x80104f06 - UBI_IOCSPEB = 0x80046f05 - UBI_IOCVOLCRBLK = 0x80804f07 - UBI_IOCVOLRMBLK = 0x20004f08 - UBI_IOCVOLUP = 0x80084f00 - VDISCARD = 0xd - VEOF = 0x10 - VEOL = 0x11 - VEOL2 = 0x6 - VMIN = 0x4 - VREPRINT = 0xc - VSTART = 0x8 - VSTOP = 0x9 - VSUSP = 0xa - VSWTC = 0x7 - VSWTCH = 0x7 - VT1 = 0x4000 - VTDLY = 0x4000 - VTIME = 0x5 - VWERASE = 0xe - WDIOC_GETBOOTSTATUS = 0x40045702 - WDIOC_GETPRETIMEOUT = 0x40045709 - WDIOC_GETSTATUS = 0x40045701 - WDIOC_GETSUPPORT = 0x40285700 - WDIOC_GETTEMP = 0x40045703 - WDIOC_GETTIMELEFT = 0x4004570a - WDIOC_GETTIMEOUT = 0x40045707 - WDIOC_KEEPALIVE = 0x40045705 - WDIOC_SETOPTIONS = 0x40045704 - WORDSIZE = 0x40 - XCASE = 0x4 - XTABS = 0x1800 - _HIDIOCGRAWNAME = 0x40804804 - _HIDIOCGRAWPHYS = 0x40404805 - _HIDIOCGRAWUNIQ = 0x40404808 -) - -// Errors -const ( - EADDRINUSE = syscall.Errno(0x7d) - EADDRNOTAVAIL = syscall.Errno(0x7e) - EADV = syscall.Errno(0x44) - EAFNOSUPPORT = syscall.Errno(0x7c) - EALREADY = syscall.Errno(0x95) - EBADE = syscall.Errno(0x32) - EBADFD = syscall.Errno(0x51) - EBADMSG = syscall.Errno(0x4d) - EBADR = syscall.Errno(0x33) - EBADRQC = syscall.Errno(0x36) - EBADSLT = syscall.Errno(0x37) - EBFONT = syscall.Errno(0x3b) - ECANCELED = syscall.Errno(0x9e) - ECHRNG = syscall.Errno(0x25) - ECOMM = syscall.Errno(0x46) - ECONNABORTED = syscall.Errno(0x82) - ECONNREFUSED = syscall.Errno(0x92) - ECONNRESET = syscall.Errno(0x83) - EDEADLK = syscall.Errno(0x2d) - EDEADLOCK = syscall.Errno(0x38) - EDESTADDRREQ = syscall.Errno(0x60) - EDOTDOT = syscall.Errno(0x49) - EDQUOT = syscall.Errno(0x46d) - EHOSTDOWN = syscall.Errno(0x93) - EHOSTUNREACH = syscall.Errno(0x94) - EHWPOISON = syscall.Errno(0xa8) - EIDRM = syscall.Errno(0x24) - EILSEQ = syscall.Errno(0x58) - EINIT = syscall.Errno(0x8d) - EINPROGRESS = syscall.Errno(0x96) - EISCONN = syscall.Errno(0x85) - EISNAM = syscall.Errno(0x8b) - EKEYEXPIRED = syscall.Errno(0xa2) - EKEYREJECTED = syscall.Errno(0xa4) - EKEYREVOKED = syscall.Errno(0xa3) - EL2HLT = syscall.Errno(0x2c) - EL2NSYNC = syscall.Errno(0x26) - EL3HLT = syscall.Errno(0x27) - EL3RST = syscall.Errno(0x28) - ELIBACC = syscall.Errno(0x53) - ELIBBAD = syscall.Errno(0x54) - ELIBEXEC = syscall.Errno(0x57) - ELIBMAX = syscall.Errno(0x56) - ELIBSCN = syscall.Errno(0x55) - ELNRNG = syscall.Errno(0x29) - ELOOP = syscall.Errno(0x5a) - EMEDIUMTYPE = syscall.Errno(0xa0) - EMSGSIZE = syscall.Errno(0x61) - EMULTIHOP = syscall.Errno(0x4a) - ENAMETOOLONG = syscall.Errno(0x4e) - ENAVAIL = syscall.Errno(0x8a) - ENETDOWN = syscall.Errno(0x7f) - ENETRESET = syscall.Errno(0x81) - ENETUNREACH = syscall.Errno(0x80) - ENOANO = syscall.Errno(0x35) - ENOBUFS = syscall.Errno(0x84) - ENOCSI = syscall.Errno(0x2b) - ENODATA = syscall.Errno(0x3d) - ENOKEY = syscall.Errno(0xa1) - ENOLCK = syscall.Errno(0x2e) - ENOLINK = syscall.Errno(0x43) - ENOMEDIUM = syscall.Errno(0x9f) - ENOMSG = syscall.Errno(0x23) - ENONET = syscall.Errno(0x40) - ENOPKG = syscall.Errno(0x41) - ENOPROTOOPT = syscall.Errno(0x63) - ENOSR = syscall.Errno(0x3f) - ENOSTR = syscall.Errno(0x3c) - ENOSYS = syscall.Errno(0x59) - ENOTCONN = syscall.Errno(0x86) - ENOTEMPTY = syscall.Errno(0x5d) - ENOTNAM = syscall.Errno(0x89) - ENOTRECOVERABLE = syscall.Errno(0xa6) - ENOTSOCK = syscall.Errno(0x5f) - ENOTSUP = syscall.Errno(0x7a) - ENOTUNIQ = syscall.Errno(0x50) - EOPNOTSUPP = syscall.Errno(0x7a) - EOVERFLOW = syscall.Errno(0x4f) - EOWNERDEAD = syscall.Errno(0xa5) - EPFNOSUPPORT = syscall.Errno(0x7b) - EPROTO = syscall.Errno(0x47) - EPROTONOSUPPORT = syscall.Errno(0x78) - EPROTOTYPE = syscall.Errno(0x62) - EREMCHG = syscall.Errno(0x52) - EREMDEV = syscall.Errno(0x8e) - EREMOTE = syscall.Errno(0x42) - EREMOTEIO = syscall.Errno(0x8c) - ERESTART = syscall.Errno(0x5b) - ERFKILL = syscall.Errno(0xa7) - ESHUTDOWN = syscall.Errno(0x8f) - ESOCKTNOSUPPORT = syscall.Errno(0x79) - ESRMNT = syscall.Errno(0x45) - ESTALE = syscall.Errno(0x97) - ESTRPIPE = syscall.Errno(0x5c) - ETIME = syscall.Errno(0x3e) - ETIMEDOUT = syscall.Errno(0x91) - ETOOMANYREFS = syscall.Errno(0x90) - EUCLEAN = syscall.Errno(0x87) - EUNATCH = syscall.Errno(0x2a) - EUSERS = syscall.Errno(0x5e) - EXFULL = syscall.Errno(0x34) -) - -// Signals -const ( - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x12) - SIGCLD = syscall.Signal(0x12) - SIGCONT = syscall.Signal(0x19) - SIGEMT = syscall.Signal(0x7) - SIGIO = syscall.Signal(0x16) - SIGPOLL = syscall.Signal(0x16) - SIGPROF = syscall.Signal(0x1d) - SIGPWR = syscall.Signal(0x13) - SIGSTOP = syscall.Signal(0x17) - SIGSYS = syscall.Signal(0xc) - SIGTSTP = syscall.Signal(0x18) - SIGTTIN = syscall.Signal(0x1a) - SIGTTOU = syscall.Signal(0x1b) - SIGURG = syscall.Signal(0x15) - SIGUSR1 = syscall.Signal(0x10) - SIGUSR2 = syscall.Signal(0x11) - SIGVTALRM = syscall.Signal(0x1c) - SIGWINCH = syscall.Signal(0x14) - SIGXCPU = syscall.Signal(0x1e) - SIGXFSZ = syscall.Signal(0x1f) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "no such device or address"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EAGAIN", "resource temporarily unavailable"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device or resource busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "invalid cross-device link"}, - {19, "ENODEV", "no such device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "numerical result out of range"}, - {35, "ENOMSG", "no message of desired type"}, - {36, "EIDRM", "identifier removed"}, - {37, "ECHRNG", "channel number out of range"}, - {38, "EL2NSYNC", "level 2 not synchronized"}, - {39, "EL3HLT", "level 3 halted"}, - {40, "EL3RST", "level 3 reset"}, - {41, "ELNRNG", "link number out of range"}, - {42, "EUNATCH", "protocol driver not attached"}, - {43, "ENOCSI", "no CSI structure available"}, - {44, "EL2HLT", "level 2 halted"}, - {45, "EDEADLK", "resource deadlock avoided"}, - {46, "ENOLCK", "no locks available"}, - {50, "EBADE", "invalid exchange"}, - {51, "EBADR", "invalid request descriptor"}, - {52, "EXFULL", "exchange full"}, - {53, "ENOANO", "no anode"}, - {54, "EBADRQC", "invalid request code"}, - {55, "EBADSLT", "invalid slot"}, - {56, "EDEADLOCK", "file locking deadlock error"}, - {59, "EBFONT", "bad font file format"}, - {60, "ENOSTR", "device not a stream"}, - {61, "ENODATA", "no data available"}, - {62, "ETIME", "timer expired"}, - {63, "ENOSR", "out of streams resources"}, - {64, "ENONET", "machine is not on the network"}, - {65, "ENOPKG", "package not installed"}, - {66, "EREMOTE", "object is remote"}, - {67, "ENOLINK", "link has been severed"}, - {68, "EADV", "advertise error"}, - {69, "ESRMNT", "srmount error"}, - {70, "ECOMM", "communication error on send"}, - {71, "EPROTO", "protocol error"}, - {73, "EDOTDOT", "RFS specific error"}, - {74, "EMULTIHOP", "multihop attempted"}, - {77, "EBADMSG", "bad message"}, - {78, "ENAMETOOLONG", "file name too long"}, - {79, "EOVERFLOW", "value too large for defined data type"}, - {80, "ENOTUNIQ", "name not unique on network"}, - {81, "EBADFD", "file descriptor in bad state"}, - {82, "EREMCHG", "remote address changed"}, - {83, "ELIBACC", "can not access a needed shared library"}, - {84, "ELIBBAD", "accessing a corrupted shared library"}, - {85, "ELIBSCN", ".lib section in a.out corrupted"}, - {86, "ELIBMAX", "attempting to link in too many shared libraries"}, - {87, "ELIBEXEC", "cannot exec a shared library directly"}, - {88, "EILSEQ", "invalid or incomplete multibyte or wide character"}, - {89, "ENOSYS", "function not implemented"}, - {90, "ELOOP", "too many levels of symbolic links"}, - {91, "ERESTART", "interrupted system call should be restarted"}, - {92, "ESTRPIPE", "streams pipe error"}, - {93, "ENOTEMPTY", "directory not empty"}, - {94, "EUSERS", "too many users"}, - {95, "ENOTSOCK", "socket operation on non-socket"}, - {96, "EDESTADDRREQ", "destination address required"}, - {97, "EMSGSIZE", "message too long"}, - {98, "EPROTOTYPE", "protocol wrong type for socket"}, - {99, "ENOPROTOOPT", "protocol not available"}, - {120, "EPROTONOSUPPORT", "protocol not supported"}, - {121, "ESOCKTNOSUPPORT", "socket type not supported"}, - {122, "ENOTSUP", "operation not supported"}, - {123, "EPFNOSUPPORT", "protocol family not supported"}, - {124, "EAFNOSUPPORT", "address family not supported by protocol"}, - {125, "EADDRINUSE", "address already in use"}, - {126, "EADDRNOTAVAIL", "cannot assign requested address"}, - {127, "ENETDOWN", "network is down"}, - {128, "ENETUNREACH", "network is unreachable"}, - {129, "ENETRESET", "network dropped connection on reset"}, - {130, "ECONNABORTED", "software caused connection abort"}, - {131, "ECONNRESET", "connection reset by peer"}, - {132, "ENOBUFS", "no buffer space available"}, - {133, "EISCONN", "transport endpoint is already connected"}, - {134, "ENOTCONN", "transport endpoint is not connected"}, - {135, "EUCLEAN", "structure needs cleaning"}, - {137, "ENOTNAM", "not a XENIX named type file"}, - {138, "ENAVAIL", "no XENIX semaphores available"}, - {139, "EISNAM", "is a named type file"}, - {140, "EREMOTEIO", "remote I/O error"}, - {141, "EINIT", "unknown error 141"}, - {142, "EREMDEV", "unknown error 142"}, - {143, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, - {144, "ETOOMANYREFS", "too many references: cannot splice"}, - {145, "ETIMEDOUT", "connection timed out"}, - {146, "ECONNREFUSED", "connection refused"}, - {147, "EHOSTDOWN", "host is down"}, - {148, "EHOSTUNREACH", "no route to host"}, - {149, "EALREADY", "operation already in progress"}, - {150, "EINPROGRESS", "operation now in progress"}, - {151, "ESTALE", "stale file handle"}, - {158, "ECANCELED", "operation canceled"}, - {159, "ENOMEDIUM", "no medium found"}, - {160, "EMEDIUMTYPE", "wrong medium type"}, - {161, "ENOKEY", "required key not available"}, - {162, "EKEYEXPIRED", "key has expired"}, - {163, "EKEYREVOKED", "key has been revoked"}, - {164, "EKEYREJECTED", "key was rejected by service"}, - {165, "EOWNERDEAD", "owner died"}, - {166, "ENOTRECOVERABLE", "state not recoverable"}, - {167, "ERFKILL", "operation not possible due to RF-kill"}, - {168, "EHWPOISON", "memory page has hardware error"}, - {1133, "EDQUOT", "disk quota exceeded"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/breakpoint trap"}, - {6, "SIGABRT", "aborted"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGUSR1", "user defined signal 1"}, - {17, "SIGUSR2", "user defined signal 2"}, - {18, "SIGCHLD", "child exited"}, - {19, "SIGPWR", "power failure"}, - {20, "SIGWINCH", "window changed"}, - {21, "SIGURG", "urgent I/O condition"}, - {22, "SIGIO", "I/O possible"}, - {23, "SIGSTOP", "stopped (signal)"}, - {24, "SIGTSTP", "stopped"}, - {25, "SIGCONT", "continued"}, - {26, "SIGTTIN", "stopped (tty input)"}, - {27, "SIGTTOU", "stopped (tty output)"}, - {28, "SIGVTALRM", "virtual timer expired"}, - {29, "SIGPROF", "profiling timer expired"}, - {30, "SIGXCPU", "CPU time limit exceeded"}, - {31, "SIGXFSZ", "file size limit exceeded"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go deleted file mode 100644 index 78c6c75..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ /dev/null @@ -1,835 +0,0 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/mipsle/include -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build mipsle && linux -// +build mipsle,linux - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/mipsle/include _const.go - -package unix - -import "syscall" - -const ( - B1000000 = 0x1008 - B115200 = 0x1002 - B1152000 = 0x1009 - B1500000 = 0x100a - B2000000 = 0x100b - B230400 = 0x1003 - B2500000 = 0x100c - B3000000 = 0x100d - B3500000 = 0x100e - B4000000 = 0x100f - B460800 = 0x1004 - B500000 = 0x1005 - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 - BLKBSZGET = 0x40041270 - BLKBSZSET = 0x80041271 - BLKFLSBUF = 0x20001261 - BLKFRAGET = 0x20001265 - BLKFRASET = 0x20001264 - BLKGETSIZE = 0x20001260 - BLKGETSIZE64 = 0x40041272 - BLKPBSZGET = 0x2000127b - BLKRAGET = 0x20001263 - BLKRASET = 0x20001262 - BLKROGET = 0x2000125e - BLKROSET = 0x2000125d - BLKRRPART = 0x2000125f - BLKSECTGET = 0x20001267 - BLKSECTSET = 0x20001266 - BLKSSZGET = 0x20001268 - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 - CBAUD = 0x100f - CBAUDEX = 0x1000 - CIBAUD = 0x100f0000 - CLOCAL = 0x800 - CR1 = 0x200 - CR2 = 0x400 - CR3 = 0x600 - CRDLY = 0x600 - CREAD = 0x80 - CS6 = 0x10 - CS7 = 0x20 - CS8 = 0x30 - CSIZE = 0x30 - CSTOPB = 0x40 - ECCGETLAYOUT = 0x41484d11 - ECCGETSTATS = 0x40104d12 - ECHOCTL = 0x200 - ECHOE = 0x10 - ECHOK = 0x20 - ECHOKE = 0x800 - ECHONL = 0x40 - ECHOPRT = 0x400 - EFD_CLOEXEC = 0x80000 - EFD_NONBLOCK = 0x80 - EPOLL_CLOEXEC = 0x80000 - EXTPROC = 0x10000 - FF1 = 0x8000 - FFDLY = 0x8000 - FICLONE = 0x80049409 - FICLONERANGE = 0x8020940d - FLUSHO = 0x2000 - FS_IOC_ENABLE_VERITY = 0x80806685 - FS_IOC_GETFLAGS = 0x40046601 - FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b - FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 - FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 - FS_IOC_SETFLAGS = 0x80046602 - FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 - F_GETLK = 0x21 - F_GETLK64 = 0x21 - F_GETOWN = 0x17 - F_RDLCK = 0x0 - F_SETLK = 0x22 - F_SETLK64 = 0x22 - F_SETLKW = 0x23 - F_SETLKW64 = 0x23 - F_SETOWN = 0x18 - F_UNLCK = 0x2 - F_WRLCK = 0x1 - HIDIOCGRAWINFO = 0x40084803 - HIDIOCGRDESC = 0x50044802 - HIDIOCGRDESCSIZE = 0x40044801 - HUPCL = 0x400 - ICANON = 0x2 - IEXTEN = 0x100 - IN_CLOEXEC = 0x80000 - IN_NONBLOCK = 0x80 - IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 - ISIG = 0x1 - IUCLC = 0x200 - IXOFF = 0x1000 - IXON = 0x400 - MAP_ANON = 0x800 - MAP_ANONYMOUS = 0x800 - MAP_DENYWRITE = 0x2000 - MAP_EXECUTABLE = 0x4000 - MAP_GROWSDOWN = 0x1000 - MAP_HUGETLB = 0x80000 - MAP_LOCKED = 0x8000 - MAP_NONBLOCK = 0x20000 - MAP_NORESERVE = 0x400 - MAP_POPULATE = 0x10000 - MAP_RENAME = 0x800 - MAP_STACK = 0x40000 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MCL_ONFAULT = 0x4 - MEMERASE = 0x80084d02 - MEMERASE64 = 0x80104d14 - MEMGETBADBLOCK = 0x80084d0b - MEMGETINFO = 0x40204d01 - MEMGETOOBSEL = 0x40c84d0a - MEMGETREGIONCOUNT = 0x40044d07 - MEMISLOCKED = 0x40084d17 - MEMLOCK = 0x80084d05 - MEMREADOOB = 0xc00c4d04 - MEMSETBADBLOCK = 0x80084d0c - MEMUNLOCK = 0x80084d06 - MEMWRITEOOB = 0xc00c4d03 - MTDFILEMODE = 0x20004d13 - NFDBITS = 0x20 - NLDLY = 0x100 - NOFLSH = 0x80 - NS_GET_NSTYPE = 0x2000b703 - NS_GET_OWNER_UID = 0x2000b704 - NS_GET_PARENT = 0x2000b702 - NS_GET_USERNS = 0x2000b701 - OLCUC = 0x2 - ONLCR = 0x4 - OTPERASE = 0x800c4d19 - OTPGETREGIONCOUNT = 0x80044d0e - OTPGETREGIONINFO = 0x800c4d0f - OTPLOCK = 0x400c4d10 - OTPSELECT = 0x40044d0d - O_APPEND = 0x8 - O_ASYNC = 0x1000 - O_CLOEXEC = 0x80000 - O_CREAT = 0x100 - O_DIRECT = 0x8000 - O_DIRECTORY = 0x10000 - O_DSYNC = 0x10 - O_EXCL = 0x400 - O_FSYNC = 0x4010 - O_LARGEFILE = 0x2000 - O_NDELAY = 0x80 - O_NOATIME = 0x40000 - O_NOCTTY = 0x800 - O_NOFOLLOW = 0x20000 - O_NONBLOCK = 0x80 - O_PATH = 0x200000 - O_RSYNC = 0x4010 - O_SYNC = 0x4010 - O_TMPFILE = 0x410000 - O_TRUNC = 0x200 - PARENB = 0x100 - PARODD = 0x200 - PENDIN = 0x4000 - PERF_EVENT_IOC_DISABLE = 0x20002401 - PERF_EVENT_IOC_ENABLE = 0x20002400 - PERF_EVENT_IOC_ID = 0x40042407 - PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8004240b - PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 - PERF_EVENT_IOC_PERIOD = 0x80082404 - PERF_EVENT_IOC_QUERY_BPF = 0xc004240a - PERF_EVENT_IOC_REFRESH = 0x20002402 - PERF_EVENT_IOC_RESET = 0x20002403 - PERF_EVENT_IOC_SET_BPF = 0x80042408 - PERF_EVENT_IOC_SET_FILTER = 0x80042406 - PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 - PPPIOCATTACH = 0x8004743d - PPPIOCATTCHAN = 0x80047438 - PPPIOCBRIDGECHAN = 0x80047435 - PPPIOCCONNECT = 0x8004743a - PPPIOCDETACH = 0x8004743c - PPPIOCDISCONN = 0x20007439 - PPPIOCGASYNCMAP = 0x40047458 - PPPIOCGCHAN = 0x40047437 - PPPIOCGDEBUG = 0x40047441 - PPPIOCGFLAGS = 0x4004745a - PPPIOCGIDLE = 0x4008743f - PPPIOCGIDLE32 = 0x4008743f - PPPIOCGIDLE64 = 0x4010743f - PPPIOCGL2TPSTATS = 0x40487436 - PPPIOCGMRU = 0x40047453 - PPPIOCGRASYNCMAP = 0x40047455 - PPPIOCGUNIT = 0x40047456 - PPPIOCGXASYNCMAP = 0x40207450 - PPPIOCSACTIVE = 0x80087446 - PPPIOCSASYNCMAP = 0x80047457 - PPPIOCSCOMPRESS = 0x800c744d - PPPIOCSDEBUG = 0x80047440 - PPPIOCSFLAGS = 0x80047459 - PPPIOCSMAXCID = 0x80047451 - PPPIOCSMRRU = 0x8004743b - PPPIOCSMRU = 0x80047452 - PPPIOCSNPMODE = 0x8008744b - PPPIOCSPASS = 0x80087447 - PPPIOCSRASYNCMAP = 0x80047454 - PPPIOCSXASYNCMAP = 0x8020744f - PPPIOCUNBRIDGECHAN = 0x20007434 - PPPIOCXFERUNIT = 0x2000744e - PR_SET_PTRACER_ANY = 0xffffffff - PTRACE_GETFPREGS = 0xe - PTRACE_GET_THREAD_AREA = 0x19 - PTRACE_GET_THREAD_AREA_3264 = 0xc4 - PTRACE_GET_WATCH_REGS = 0xd0 - PTRACE_OLDSETOPTIONS = 0x15 - PTRACE_PEEKDATA_3264 = 0xc1 - PTRACE_PEEKTEXT_3264 = 0xc0 - PTRACE_POKEDATA_3264 = 0xc3 - PTRACE_POKETEXT_3264 = 0xc2 - PTRACE_SETFPREGS = 0xf - PTRACE_SET_THREAD_AREA = 0x1a - PTRACE_SET_WATCH_REGS = 0xd1 - RLIMIT_AS = 0x6 - RLIMIT_MEMLOCK = 0x9 - RLIMIT_NOFILE = 0x5 - RLIMIT_NPROC = 0x8 - RLIMIT_RSS = 0x7 - RNDADDENTROPY = 0x80085203 - RNDADDTOENTCNT = 0x80045201 - RNDCLEARPOOL = 0x20005206 - RNDGETENTCNT = 0x40045200 - RNDGETPOOL = 0x40085202 - RNDRESEEDCRNG = 0x20005207 - RNDZAPENTCNT = 0x20005204 - RTC_AIE_OFF = 0x20007002 - RTC_AIE_ON = 0x20007001 - RTC_ALM_READ = 0x40247008 - RTC_ALM_SET = 0x80247007 - RTC_EPOCH_READ = 0x4004700d - RTC_EPOCH_SET = 0x8004700e - RTC_IRQP_READ = 0x4004700b - RTC_IRQP_SET = 0x8004700c - RTC_PARAM_GET = 0x80187013 - RTC_PARAM_SET = 0x80187014 - RTC_PIE_OFF = 0x20007006 - RTC_PIE_ON = 0x20007005 - RTC_PLL_GET = 0x401c7011 - RTC_PLL_SET = 0x801c7012 - RTC_RD_TIME = 0x40247009 - RTC_SET_TIME = 0x8024700a - RTC_UIE_OFF = 0x20007004 - RTC_UIE_ON = 0x20007003 - RTC_VL_CLR = 0x20007014 - RTC_VL_READ = 0x40047013 - RTC_WIE_OFF = 0x20007010 - RTC_WIE_ON = 0x2000700f - RTC_WKALM_RD = 0x40287010 - RTC_WKALM_SET = 0x8028700f - SCM_TIMESTAMPING = 0x25 - SCM_TIMESTAMPING_OPT_STATS = 0x36 - SCM_TIMESTAMPING_PKTINFO = 0x3a - SCM_TIMESTAMPNS = 0x23 - SCM_TXTIME = 0x3d - SCM_WIFI_STATUS = 0x29 - SFD_CLOEXEC = 0x80000 - SFD_NONBLOCK = 0x80 - SIOCATMARK = 0x40047307 - SIOCGPGRP = 0x40047309 - SIOCGSTAMPNS_NEW = 0x40108907 - SIOCGSTAMP_NEW = 0x40108906 - SIOCINQ = 0x467f - SIOCOUTQ = 0x7472 - SIOCSPGRP = 0x80047308 - SOCK_CLOEXEC = 0x80000 - SOCK_DGRAM = 0x1 - SOCK_NONBLOCK = 0x80 - SOCK_STREAM = 0x2 - SOL_SOCKET = 0xffff - SO_ACCEPTCONN = 0x1009 - SO_ATTACH_BPF = 0x32 - SO_ATTACH_REUSEPORT_CBPF = 0x33 - SO_ATTACH_REUSEPORT_EBPF = 0x34 - SO_BINDTODEVICE = 0x19 - SO_BINDTOIFINDEX = 0x3e - SO_BPF_EXTENSIONS = 0x30 - SO_BROADCAST = 0x20 - SO_BSDCOMPAT = 0xe - SO_BUF_LOCK = 0x48 - SO_BUSY_POLL = 0x2e - SO_BUSY_POLL_BUDGET = 0x46 - SO_CNX_ADVICE = 0x35 - SO_COOKIE = 0x39 - SO_DETACH_REUSEPORT_BPF = 0x44 - SO_DOMAIN = 0x1029 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_INCOMING_CPU = 0x31 - SO_INCOMING_NAPI_ID = 0x38 - SO_KEEPALIVE = 0x8 - SO_LINGER = 0x80 - SO_LOCK_FILTER = 0x2c - SO_MARK = 0x24 - SO_MAX_PACING_RATE = 0x2f - SO_MEMINFO = 0x37 - SO_NETNS_COOKIE = 0x47 - SO_NOFCS = 0x2b - SO_OOBINLINE = 0x100 - SO_PASSCRED = 0x11 - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x12 - SO_PEERGROUPS = 0x3b - SO_PEERSEC = 0x1e - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x1028 - SO_RCVBUF = 0x1002 - SO_RCVBUFFORCE = 0x21 - SO_RCVLOWAT = 0x1004 - SO_RCVMARK = 0x4b - SO_RCVTIMEO = 0x1006 - SO_RCVTIMEO_NEW = 0x42 - SO_RCVTIMEO_OLD = 0x1006 - SO_RESERVE_MEM = 0x49 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_RXQ_OVFL = 0x28 - SO_SECURITY_AUTHENTICATION = 0x16 - SO_SECURITY_ENCRYPTION_NETWORK = 0x18 - SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 - SO_SELECT_ERR_QUEUE = 0x2d - SO_SNDBUF = 0x1001 - SO_SNDBUFFORCE = 0x1f - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_SNDTIMEO_NEW = 0x43 - SO_SNDTIMEO_OLD = 0x1005 - SO_STYLE = 0x1008 - SO_TIMESTAMPING = 0x25 - SO_TIMESTAMPING_NEW = 0x41 - SO_TIMESTAMPING_OLD = 0x25 - SO_TIMESTAMPNS = 0x23 - SO_TIMESTAMPNS_NEW = 0x40 - SO_TIMESTAMPNS_OLD = 0x23 - SO_TIMESTAMP_NEW = 0x3f - SO_TXREHASH = 0x4a - SO_TXTIME = 0x3d - SO_TYPE = 0x1008 - SO_WIFI_STATUS = 0x29 - SO_ZEROCOPY = 0x3c - TAB1 = 0x800 - TAB2 = 0x1000 - TAB3 = 0x1800 - TABDLY = 0x1800 - TCFLSH = 0x5407 - TCGETA = 0x5401 - TCGETS = 0x540d - TCGETS2 = 0x4030542a - TCSAFLUSH = 0x5410 - TCSBRK = 0x5405 - TCSBRKP = 0x5486 - TCSETA = 0x5402 - TCSETAF = 0x5404 - TCSETAW = 0x5403 - TCSETS = 0x540e - TCSETS2 = 0x8030542b - TCSETSF = 0x5410 - TCSETSF2 = 0x8030542d - TCSETSW = 0x540f - TCSETSW2 = 0x8030542c - TCXONC = 0x5406 - TFD_CLOEXEC = 0x80000 - TFD_NONBLOCK = 0x80 - TIOCCBRK = 0x5428 - TIOCCONS = 0x80047478 - TIOCEXCL = 0x740d - TIOCGDEV = 0x40045432 - TIOCGETD = 0x7400 - TIOCGETP = 0x7408 - TIOCGEXCL = 0x40045440 - TIOCGICOUNT = 0x5492 - TIOCGISO7816 = 0x40285442 - TIOCGLCKTRMIOS = 0x548b - TIOCGLTC = 0x7474 - TIOCGPGRP = 0x40047477 - TIOCGPKT = 0x40045438 - TIOCGPTLCK = 0x40045439 - TIOCGPTN = 0x40045430 - TIOCGPTPEER = 0x20005441 - TIOCGRS485 = 0x4020542e - TIOCGSERIAL = 0x5484 - TIOCGSID = 0x7416 - TIOCGSOFTCAR = 0x5481 - TIOCGWINSZ = 0x40087468 - TIOCINQ = 0x467f - TIOCLINUX = 0x5483 - TIOCMBIC = 0x741c - TIOCMBIS = 0x741b - TIOCMGET = 0x741d - TIOCMIWAIT = 0x5491 - TIOCMSET = 0x741a - TIOCM_CAR = 0x100 - TIOCM_CD = 0x100 - TIOCM_CTS = 0x40 - TIOCM_DSR = 0x400 - TIOCM_RI = 0x200 - TIOCM_RNG = 0x200 - TIOCM_SR = 0x20 - TIOCM_ST = 0x10 - TIOCNOTTY = 0x5471 - TIOCNXCL = 0x740e - TIOCOUTQ = 0x7472 - TIOCPKT = 0x5470 - TIOCSBRK = 0x5427 - TIOCSCTTY = 0x5480 - TIOCSERCONFIG = 0x5488 - TIOCSERGETLSR = 0x548e - TIOCSERGETMULTI = 0x548f - TIOCSERGSTRUCT = 0x548d - TIOCSERGWILD = 0x5489 - TIOCSERSETMULTI = 0x5490 - TIOCSERSWILD = 0x548a - TIOCSER_TEMT = 0x1 - TIOCSETD = 0x7401 - TIOCSETN = 0x740a - TIOCSETP = 0x7409 - TIOCSIG = 0x80045436 - TIOCSISO7816 = 0xc0285443 - TIOCSLCKTRMIOS = 0x548c - TIOCSLTC = 0x7475 - TIOCSPGRP = 0x80047476 - TIOCSPTLCK = 0x80045431 - TIOCSRS485 = 0xc020542f - TIOCSSERIAL = 0x5485 - TIOCSSOFTCAR = 0x5482 - TIOCSTI = 0x5472 - TIOCSWINSZ = 0x80087467 - TIOCVHANGUP = 0x5437 - TOSTOP = 0x8000 - TUNATTACHFILTER = 0x800854d5 - TUNDETACHFILTER = 0x800854d6 - TUNGETDEVNETNS = 0x200054e3 - TUNGETFEATURES = 0x400454cf - TUNGETFILTER = 0x400854db - TUNGETIFF = 0x400454d2 - TUNGETSNDBUF = 0x400454d3 - TUNGETVNETBE = 0x400454df - TUNGETVNETHDRSZ = 0x400454d7 - TUNGETVNETLE = 0x400454dd - TUNSETCARRIER = 0x800454e2 - TUNSETDEBUG = 0x800454c9 - TUNSETFILTEREBPF = 0x400454e1 - TUNSETGROUP = 0x800454ce - TUNSETIFF = 0x800454ca - TUNSETIFINDEX = 0x800454da - TUNSETLINK = 0x800454cd - TUNSETNOCSUM = 0x800454c8 - TUNSETOFFLOAD = 0x800454d0 - TUNSETOWNER = 0x800454cc - TUNSETPERSIST = 0x800454cb - TUNSETQUEUE = 0x800454d9 - TUNSETSNDBUF = 0x800454d4 - TUNSETSTEERINGEBPF = 0x400454e0 - TUNSETTXFILTER = 0x800454d1 - TUNSETVNETBE = 0x800454de - TUNSETVNETHDRSZ = 0x800454d8 - TUNSETVNETLE = 0x800454dc - UBI_IOCATT = 0x80186f40 - UBI_IOCDET = 0x80046f41 - UBI_IOCEBCH = 0x80044f02 - UBI_IOCEBER = 0x80044f01 - UBI_IOCEBISMAP = 0x40044f05 - UBI_IOCEBMAP = 0x80084f03 - UBI_IOCEBUNMAP = 0x80044f04 - UBI_IOCMKVOL = 0x80986f00 - UBI_IOCRMVOL = 0x80046f01 - UBI_IOCRNVOL = 0x91106f03 - UBI_IOCRPEB = 0x80046f04 - UBI_IOCRSVOL = 0x800c6f02 - UBI_IOCSETVOLPROP = 0x80104f06 - UBI_IOCSPEB = 0x80046f05 - UBI_IOCVOLCRBLK = 0x80804f07 - UBI_IOCVOLRMBLK = 0x20004f08 - UBI_IOCVOLUP = 0x80084f00 - VDISCARD = 0xd - VEOF = 0x10 - VEOL = 0x11 - VEOL2 = 0x6 - VMIN = 0x4 - VREPRINT = 0xc - VSTART = 0x8 - VSTOP = 0x9 - VSUSP = 0xa - VSWTC = 0x7 - VSWTCH = 0x7 - VT1 = 0x4000 - VTDLY = 0x4000 - VTIME = 0x5 - VWERASE = 0xe - WDIOC_GETBOOTSTATUS = 0x40045702 - WDIOC_GETPRETIMEOUT = 0x40045709 - WDIOC_GETSTATUS = 0x40045701 - WDIOC_GETSUPPORT = 0x40285700 - WDIOC_GETTEMP = 0x40045703 - WDIOC_GETTIMELEFT = 0x4004570a - WDIOC_GETTIMEOUT = 0x40045707 - WDIOC_KEEPALIVE = 0x40045705 - WDIOC_SETOPTIONS = 0x40045704 - WORDSIZE = 0x20 - XCASE = 0x4 - XTABS = 0x1800 - _HIDIOCGRAWNAME = 0x40804804 - _HIDIOCGRAWPHYS = 0x40404805 - _HIDIOCGRAWUNIQ = 0x40404808 -) - -// Errors -const ( - EADDRINUSE = syscall.Errno(0x7d) - EADDRNOTAVAIL = syscall.Errno(0x7e) - EADV = syscall.Errno(0x44) - EAFNOSUPPORT = syscall.Errno(0x7c) - EALREADY = syscall.Errno(0x95) - EBADE = syscall.Errno(0x32) - EBADFD = syscall.Errno(0x51) - EBADMSG = syscall.Errno(0x4d) - EBADR = syscall.Errno(0x33) - EBADRQC = syscall.Errno(0x36) - EBADSLT = syscall.Errno(0x37) - EBFONT = syscall.Errno(0x3b) - ECANCELED = syscall.Errno(0x9e) - ECHRNG = syscall.Errno(0x25) - ECOMM = syscall.Errno(0x46) - ECONNABORTED = syscall.Errno(0x82) - ECONNREFUSED = syscall.Errno(0x92) - ECONNRESET = syscall.Errno(0x83) - EDEADLK = syscall.Errno(0x2d) - EDEADLOCK = syscall.Errno(0x38) - EDESTADDRREQ = syscall.Errno(0x60) - EDOTDOT = syscall.Errno(0x49) - EDQUOT = syscall.Errno(0x46d) - EHOSTDOWN = syscall.Errno(0x93) - EHOSTUNREACH = syscall.Errno(0x94) - EHWPOISON = syscall.Errno(0xa8) - EIDRM = syscall.Errno(0x24) - EILSEQ = syscall.Errno(0x58) - EINIT = syscall.Errno(0x8d) - EINPROGRESS = syscall.Errno(0x96) - EISCONN = syscall.Errno(0x85) - EISNAM = syscall.Errno(0x8b) - EKEYEXPIRED = syscall.Errno(0xa2) - EKEYREJECTED = syscall.Errno(0xa4) - EKEYREVOKED = syscall.Errno(0xa3) - EL2HLT = syscall.Errno(0x2c) - EL2NSYNC = syscall.Errno(0x26) - EL3HLT = syscall.Errno(0x27) - EL3RST = syscall.Errno(0x28) - ELIBACC = syscall.Errno(0x53) - ELIBBAD = syscall.Errno(0x54) - ELIBEXEC = syscall.Errno(0x57) - ELIBMAX = syscall.Errno(0x56) - ELIBSCN = syscall.Errno(0x55) - ELNRNG = syscall.Errno(0x29) - ELOOP = syscall.Errno(0x5a) - EMEDIUMTYPE = syscall.Errno(0xa0) - EMSGSIZE = syscall.Errno(0x61) - EMULTIHOP = syscall.Errno(0x4a) - ENAMETOOLONG = syscall.Errno(0x4e) - ENAVAIL = syscall.Errno(0x8a) - ENETDOWN = syscall.Errno(0x7f) - ENETRESET = syscall.Errno(0x81) - ENETUNREACH = syscall.Errno(0x80) - ENOANO = syscall.Errno(0x35) - ENOBUFS = syscall.Errno(0x84) - ENOCSI = syscall.Errno(0x2b) - ENODATA = syscall.Errno(0x3d) - ENOKEY = syscall.Errno(0xa1) - ENOLCK = syscall.Errno(0x2e) - ENOLINK = syscall.Errno(0x43) - ENOMEDIUM = syscall.Errno(0x9f) - ENOMSG = syscall.Errno(0x23) - ENONET = syscall.Errno(0x40) - ENOPKG = syscall.Errno(0x41) - ENOPROTOOPT = syscall.Errno(0x63) - ENOSR = syscall.Errno(0x3f) - ENOSTR = syscall.Errno(0x3c) - ENOSYS = syscall.Errno(0x59) - ENOTCONN = syscall.Errno(0x86) - ENOTEMPTY = syscall.Errno(0x5d) - ENOTNAM = syscall.Errno(0x89) - ENOTRECOVERABLE = syscall.Errno(0xa6) - ENOTSOCK = syscall.Errno(0x5f) - ENOTSUP = syscall.Errno(0x7a) - ENOTUNIQ = syscall.Errno(0x50) - EOPNOTSUPP = syscall.Errno(0x7a) - EOVERFLOW = syscall.Errno(0x4f) - EOWNERDEAD = syscall.Errno(0xa5) - EPFNOSUPPORT = syscall.Errno(0x7b) - EPROTO = syscall.Errno(0x47) - EPROTONOSUPPORT = syscall.Errno(0x78) - EPROTOTYPE = syscall.Errno(0x62) - EREMCHG = syscall.Errno(0x52) - EREMDEV = syscall.Errno(0x8e) - EREMOTE = syscall.Errno(0x42) - EREMOTEIO = syscall.Errno(0x8c) - ERESTART = syscall.Errno(0x5b) - ERFKILL = syscall.Errno(0xa7) - ESHUTDOWN = syscall.Errno(0x8f) - ESOCKTNOSUPPORT = syscall.Errno(0x79) - ESRMNT = syscall.Errno(0x45) - ESTALE = syscall.Errno(0x97) - ESTRPIPE = syscall.Errno(0x5c) - ETIME = syscall.Errno(0x3e) - ETIMEDOUT = syscall.Errno(0x91) - ETOOMANYREFS = syscall.Errno(0x90) - EUCLEAN = syscall.Errno(0x87) - EUNATCH = syscall.Errno(0x2a) - EUSERS = syscall.Errno(0x5e) - EXFULL = syscall.Errno(0x34) -) - -// Signals -const ( - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x12) - SIGCLD = syscall.Signal(0x12) - SIGCONT = syscall.Signal(0x19) - SIGEMT = syscall.Signal(0x7) - SIGIO = syscall.Signal(0x16) - SIGPOLL = syscall.Signal(0x16) - SIGPROF = syscall.Signal(0x1d) - SIGPWR = syscall.Signal(0x13) - SIGSTOP = syscall.Signal(0x17) - SIGSYS = syscall.Signal(0xc) - SIGTSTP = syscall.Signal(0x18) - SIGTTIN = syscall.Signal(0x1a) - SIGTTOU = syscall.Signal(0x1b) - SIGURG = syscall.Signal(0x15) - SIGUSR1 = syscall.Signal(0x10) - SIGUSR2 = syscall.Signal(0x11) - SIGVTALRM = syscall.Signal(0x1c) - SIGWINCH = syscall.Signal(0x14) - SIGXCPU = syscall.Signal(0x1e) - SIGXFSZ = syscall.Signal(0x1f) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "no such device or address"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EAGAIN", "resource temporarily unavailable"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device or resource busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "invalid cross-device link"}, - {19, "ENODEV", "no such device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "numerical result out of range"}, - {35, "ENOMSG", "no message of desired type"}, - {36, "EIDRM", "identifier removed"}, - {37, "ECHRNG", "channel number out of range"}, - {38, "EL2NSYNC", "level 2 not synchronized"}, - {39, "EL3HLT", "level 3 halted"}, - {40, "EL3RST", "level 3 reset"}, - {41, "ELNRNG", "link number out of range"}, - {42, "EUNATCH", "protocol driver not attached"}, - {43, "ENOCSI", "no CSI structure available"}, - {44, "EL2HLT", "level 2 halted"}, - {45, "EDEADLK", "resource deadlock avoided"}, - {46, "ENOLCK", "no locks available"}, - {50, "EBADE", "invalid exchange"}, - {51, "EBADR", "invalid request descriptor"}, - {52, "EXFULL", "exchange full"}, - {53, "ENOANO", "no anode"}, - {54, "EBADRQC", "invalid request code"}, - {55, "EBADSLT", "invalid slot"}, - {56, "EDEADLOCK", "file locking deadlock error"}, - {59, "EBFONT", "bad font file format"}, - {60, "ENOSTR", "device not a stream"}, - {61, "ENODATA", "no data available"}, - {62, "ETIME", "timer expired"}, - {63, "ENOSR", "out of streams resources"}, - {64, "ENONET", "machine is not on the network"}, - {65, "ENOPKG", "package not installed"}, - {66, "EREMOTE", "object is remote"}, - {67, "ENOLINK", "link has been severed"}, - {68, "EADV", "advertise error"}, - {69, "ESRMNT", "srmount error"}, - {70, "ECOMM", "communication error on send"}, - {71, "EPROTO", "protocol error"}, - {73, "EDOTDOT", "RFS specific error"}, - {74, "EMULTIHOP", "multihop attempted"}, - {77, "EBADMSG", "bad message"}, - {78, "ENAMETOOLONG", "file name too long"}, - {79, "EOVERFLOW", "value too large for defined data type"}, - {80, "ENOTUNIQ", "name not unique on network"}, - {81, "EBADFD", "file descriptor in bad state"}, - {82, "EREMCHG", "remote address changed"}, - {83, "ELIBACC", "can not access a needed shared library"}, - {84, "ELIBBAD", "accessing a corrupted shared library"}, - {85, "ELIBSCN", ".lib section in a.out corrupted"}, - {86, "ELIBMAX", "attempting to link in too many shared libraries"}, - {87, "ELIBEXEC", "cannot exec a shared library directly"}, - {88, "EILSEQ", "invalid or incomplete multibyte or wide character"}, - {89, "ENOSYS", "function not implemented"}, - {90, "ELOOP", "too many levels of symbolic links"}, - {91, "ERESTART", "interrupted system call should be restarted"}, - {92, "ESTRPIPE", "streams pipe error"}, - {93, "ENOTEMPTY", "directory not empty"}, - {94, "EUSERS", "too many users"}, - {95, "ENOTSOCK", "socket operation on non-socket"}, - {96, "EDESTADDRREQ", "destination address required"}, - {97, "EMSGSIZE", "message too long"}, - {98, "EPROTOTYPE", "protocol wrong type for socket"}, - {99, "ENOPROTOOPT", "protocol not available"}, - {120, "EPROTONOSUPPORT", "protocol not supported"}, - {121, "ESOCKTNOSUPPORT", "socket type not supported"}, - {122, "ENOTSUP", "operation not supported"}, - {123, "EPFNOSUPPORT", "protocol family not supported"}, - {124, "EAFNOSUPPORT", "address family not supported by protocol"}, - {125, "EADDRINUSE", "address already in use"}, - {126, "EADDRNOTAVAIL", "cannot assign requested address"}, - {127, "ENETDOWN", "network is down"}, - {128, "ENETUNREACH", "network is unreachable"}, - {129, "ENETRESET", "network dropped connection on reset"}, - {130, "ECONNABORTED", "software caused connection abort"}, - {131, "ECONNRESET", "connection reset by peer"}, - {132, "ENOBUFS", "no buffer space available"}, - {133, "EISCONN", "transport endpoint is already connected"}, - {134, "ENOTCONN", "transport endpoint is not connected"}, - {135, "EUCLEAN", "structure needs cleaning"}, - {137, "ENOTNAM", "not a XENIX named type file"}, - {138, "ENAVAIL", "no XENIX semaphores available"}, - {139, "EISNAM", "is a named type file"}, - {140, "EREMOTEIO", "remote I/O error"}, - {141, "EINIT", "unknown error 141"}, - {142, "EREMDEV", "unknown error 142"}, - {143, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, - {144, "ETOOMANYREFS", "too many references: cannot splice"}, - {145, "ETIMEDOUT", "connection timed out"}, - {146, "ECONNREFUSED", "connection refused"}, - {147, "EHOSTDOWN", "host is down"}, - {148, "EHOSTUNREACH", "no route to host"}, - {149, "EALREADY", "operation already in progress"}, - {150, "EINPROGRESS", "operation now in progress"}, - {151, "ESTALE", "stale file handle"}, - {158, "ECANCELED", "operation canceled"}, - {159, "ENOMEDIUM", "no medium found"}, - {160, "EMEDIUMTYPE", "wrong medium type"}, - {161, "ENOKEY", "required key not available"}, - {162, "EKEYEXPIRED", "key has expired"}, - {163, "EKEYREVOKED", "key has been revoked"}, - {164, "EKEYREJECTED", "key was rejected by service"}, - {165, "EOWNERDEAD", "owner died"}, - {166, "ENOTRECOVERABLE", "state not recoverable"}, - {167, "ERFKILL", "operation not possible due to RF-kill"}, - {168, "EHWPOISON", "memory page has hardware error"}, - {1133, "EDQUOT", "disk quota exceeded"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/breakpoint trap"}, - {6, "SIGABRT", "aborted"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGUSR1", "user defined signal 1"}, - {17, "SIGUSR2", "user defined signal 2"}, - {18, "SIGCHLD", "child exited"}, - {19, "SIGPWR", "power failure"}, - {20, "SIGWINCH", "window changed"}, - {21, "SIGURG", "urgent I/O condition"}, - {22, "SIGIO", "I/O possible"}, - {23, "SIGSTOP", "stopped (signal)"}, - {24, "SIGTSTP", "stopped"}, - {25, "SIGCONT", "continued"}, - {26, "SIGTTIN", "stopped (tty input)"}, - {27, "SIGTTOU", "stopped (tty output)"}, - {28, "SIGVTALRM", "virtual timer expired"}, - {29, "SIGPROF", "profiling timer expired"}, - {30, "SIGXCPU", "CPU time limit exceeded"}, - {31, "SIGXFSZ", "file size limit exceeded"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go deleted file mode 100644 index 1c0d31f..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +++ /dev/null @@ -1,887 +0,0 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/ppc/include -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build ppc && linux -// +build ppc,linux - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/ppc/include _const.go - -package unix - -import "syscall" - -const ( - B1000000 = 0x17 - B115200 = 0x11 - B1152000 = 0x18 - B1500000 = 0x19 - B2000000 = 0x1a - B230400 = 0x12 - B2500000 = 0x1b - B3000000 = 0x1c - B3500000 = 0x1d - B4000000 = 0x1e - B460800 = 0x13 - B500000 = 0x14 - B57600 = 0x10 - B576000 = 0x15 - B921600 = 0x16 - BLKBSZGET = 0x40041270 - BLKBSZSET = 0x80041271 - BLKFLSBUF = 0x20001261 - BLKFRAGET = 0x20001265 - BLKFRASET = 0x20001264 - BLKGETSIZE = 0x20001260 - BLKGETSIZE64 = 0x40041272 - BLKPBSZGET = 0x2000127b - BLKRAGET = 0x20001263 - BLKRASET = 0x20001262 - BLKROGET = 0x2000125e - BLKROSET = 0x2000125d - BLKRRPART = 0x2000125f - BLKSECTGET = 0x20001267 - BLKSECTSET = 0x20001266 - BLKSSZGET = 0x20001268 - BOTHER = 0x1f - BS1 = 0x8000 - BSDLY = 0x8000 - CBAUD = 0xff - CBAUDEX = 0x0 - CIBAUD = 0xff0000 - CLOCAL = 0x8000 - CR1 = 0x1000 - CR2 = 0x2000 - CR3 = 0x3000 - CRDLY = 0x3000 - CREAD = 0x800 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTOPB = 0x400 - ECCGETLAYOUT = 0x41484d11 - ECCGETSTATS = 0x40104d12 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EFD_CLOEXEC = 0x80000 - EFD_NONBLOCK = 0x800 - EPOLL_CLOEXEC = 0x80000 - EXTPROC = 0x10000000 - FF1 = 0x4000 - FFDLY = 0x4000 - FICLONE = 0x80049409 - FICLONERANGE = 0x8020940d - FLUSHO = 0x800000 - FS_IOC_ENABLE_VERITY = 0x80806685 - FS_IOC_GETFLAGS = 0x40046601 - FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b - FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 - FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 - FS_IOC_SETFLAGS = 0x80046602 - FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 - F_GETLK = 0xc - F_GETLK64 = 0xc - F_GETOWN = 0x9 - F_RDLCK = 0x0 - F_SETLK = 0xd - F_SETLK64 = 0xd - F_SETLKW = 0xe - F_SETLKW64 = 0xe - F_SETOWN = 0x8 - F_UNLCK = 0x2 - F_WRLCK = 0x1 - HIDIOCGRAWINFO = 0x40084803 - HIDIOCGRDESC = 0x50044802 - HIDIOCGRDESCSIZE = 0x40044801 - HUPCL = 0x4000 - ICANON = 0x100 - IEXTEN = 0x400 - IN_CLOEXEC = 0x80000 - IN_NONBLOCK = 0x800 - IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 - ISIG = 0x80 - IUCLC = 0x1000 - IXOFF = 0x400 - IXON = 0x200 - MAP_ANON = 0x20 - MAP_ANONYMOUS = 0x20 - MAP_DENYWRITE = 0x800 - MAP_EXECUTABLE = 0x1000 - MAP_GROWSDOWN = 0x100 - MAP_HUGETLB = 0x40000 - MAP_LOCKED = 0x80 - MAP_NONBLOCK = 0x10000 - MAP_NORESERVE = 0x40 - MAP_POPULATE = 0x8000 - MAP_STACK = 0x20000 - MAP_SYNC = 0x80000 - MCL_CURRENT = 0x2000 - MCL_FUTURE = 0x4000 - MCL_ONFAULT = 0x8000 - MEMERASE = 0x80084d02 - MEMERASE64 = 0x80104d14 - MEMGETBADBLOCK = 0x80084d0b - MEMGETINFO = 0x40204d01 - MEMGETOOBSEL = 0x40c84d0a - MEMGETREGIONCOUNT = 0x40044d07 - MEMISLOCKED = 0x40084d17 - MEMLOCK = 0x80084d05 - MEMREADOOB = 0xc00c4d04 - MEMSETBADBLOCK = 0x80084d0c - MEMUNLOCK = 0x80084d06 - MEMWRITEOOB = 0xc00c4d03 - MTDFILEMODE = 0x20004d13 - NFDBITS = 0x20 - NL2 = 0x200 - NL3 = 0x300 - NLDLY = 0x300 - NOFLSH = 0x80000000 - NS_GET_NSTYPE = 0x2000b703 - NS_GET_OWNER_UID = 0x2000b704 - NS_GET_PARENT = 0x2000b702 - NS_GET_USERNS = 0x2000b701 - OLCUC = 0x4 - ONLCR = 0x2 - OTPERASE = 0x800c4d19 - OTPGETREGIONCOUNT = 0x80044d0e - OTPGETREGIONINFO = 0x800c4d0f - OTPLOCK = 0x400c4d10 - OTPSELECT = 0x40044d0d - O_APPEND = 0x400 - O_ASYNC = 0x2000 - O_CLOEXEC = 0x80000 - O_CREAT = 0x40 - O_DIRECT = 0x20000 - O_DIRECTORY = 0x4000 - O_DSYNC = 0x1000 - O_EXCL = 0x80 - O_FSYNC = 0x101000 - O_LARGEFILE = 0x10000 - O_NDELAY = 0x800 - O_NOATIME = 0x40000 - O_NOCTTY = 0x100 - O_NOFOLLOW = 0x8000 - O_NONBLOCK = 0x800 - O_PATH = 0x200000 - O_RSYNC = 0x101000 - O_SYNC = 0x101000 - O_TMPFILE = 0x404000 - O_TRUNC = 0x200 - PARENB = 0x1000 - PARODD = 0x2000 - PENDIN = 0x20000000 - PERF_EVENT_IOC_DISABLE = 0x20002401 - PERF_EVENT_IOC_ENABLE = 0x20002400 - PERF_EVENT_IOC_ID = 0x40042407 - PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8004240b - PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 - PERF_EVENT_IOC_PERIOD = 0x80082404 - PERF_EVENT_IOC_QUERY_BPF = 0xc004240a - PERF_EVENT_IOC_REFRESH = 0x20002402 - PERF_EVENT_IOC_RESET = 0x20002403 - PERF_EVENT_IOC_SET_BPF = 0x80042408 - PERF_EVENT_IOC_SET_FILTER = 0x80042406 - PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 - PPPIOCATTACH = 0x8004743d - PPPIOCATTCHAN = 0x80047438 - PPPIOCBRIDGECHAN = 0x80047435 - PPPIOCCONNECT = 0x8004743a - PPPIOCDETACH = 0x8004743c - PPPIOCDISCONN = 0x20007439 - PPPIOCGASYNCMAP = 0x40047458 - PPPIOCGCHAN = 0x40047437 - PPPIOCGDEBUG = 0x40047441 - PPPIOCGFLAGS = 0x4004745a - PPPIOCGIDLE = 0x4008743f - PPPIOCGIDLE32 = 0x4008743f - PPPIOCGIDLE64 = 0x4010743f - PPPIOCGL2TPSTATS = 0x40487436 - PPPIOCGMRU = 0x40047453 - PPPIOCGRASYNCMAP = 0x40047455 - PPPIOCGUNIT = 0x40047456 - PPPIOCGXASYNCMAP = 0x40207450 - PPPIOCSACTIVE = 0x80087446 - PPPIOCSASYNCMAP = 0x80047457 - PPPIOCSCOMPRESS = 0x800c744d - PPPIOCSDEBUG = 0x80047440 - PPPIOCSFLAGS = 0x80047459 - PPPIOCSMAXCID = 0x80047451 - PPPIOCSMRRU = 0x8004743b - PPPIOCSMRU = 0x80047452 - PPPIOCSNPMODE = 0x8008744b - PPPIOCSPASS = 0x80087447 - PPPIOCSRASYNCMAP = 0x80047454 - PPPIOCSXASYNCMAP = 0x8020744f - PPPIOCUNBRIDGECHAN = 0x20007434 - PPPIOCXFERUNIT = 0x2000744e - PROT_SAO = 0x10 - PR_SET_PTRACER_ANY = 0xffffffff - PTRACE_GETEVRREGS = 0x14 - PTRACE_GETFPREGS = 0xe - PTRACE_GETREGS64 = 0x16 - PTRACE_GETVRREGS = 0x12 - PTRACE_GETVSRREGS = 0x1b - PTRACE_GET_DEBUGREG = 0x19 - PTRACE_SETEVRREGS = 0x15 - PTRACE_SETFPREGS = 0xf - PTRACE_SETREGS64 = 0x17 - PTRACE_SETVRREGS = 0x13 - PTRACE_SETVSRREGS = 0x1c - PTRACE_SET_DEBUGREG = 0x1a - PTRACE_SINGLEBLOCK = 0x100 - PTRACE_SYSEMU = 0x1d - PTRACE_SYSEMU_SINGLESTEP = 0x1e - PT_CCR = 0x26 - PT_CTR = 0x23 - PT_DAR = 0x29 - PT_DSCR = 0x2c - PT_DSISR = 0x2a - PT_FPR0 = 0x30 - PT_FPR31 = 0x6e - PT_FPSCR = 0x71 - PT_LNK = 0x24 - PT_MQ = 0x27 - PT_MSR = 0x21 - PT_NIP = 0x20 - PT_ORIG_R3 = 0x22 - PT_R0 = 0x0 - PT_R1 = 0x1 - PT_R10 = 0xa - PT_R11 = 0xb - PT_R12 = 0xc - PT_R13 = 0xd - PT_R14 = 0xe - PT_R15 = 0xf - PT_R16 = 0x10 - PT_R17 = 0x11 - PT_R18 = 0x12 - PT_R19 = 0x13 - PT_R2 = 0x2 - PT_R20 = 0x14 - PT_R21 = 0x15 - PT_R22 = 0x16 - PT_R23 = 0x17 - PT_R24 = 0x18 - PT_R25 = 0x19 - PT_R26 = 0x1a - PT_R27 = 0x1b - PT_R28 = 0x1c - PT_R29 = 0x1d - PT_R3 = 0x3 - PT_R30 = 0x1e - PT_R31 = 0x1f - PT_R4 = 0x4 - PT_R5 = 0x5 - PT_R6 = 0x6 - PT_R7 = 0x7 - PT_R8 = 0x8 - PT_R9 = 0x9 - PT_REGS_COUNT = 0x2c - PT_RESULT = 0x2b - PT_TRAP = 0x28 - PT_XER = 0x25 - RLIMIT_AS = 0x9 - RLIMIT_MEMLOCK = 0x8 - RLIMIT_NOFILE = 0x7 - RLIMIT_NPROC = 0x6 - RLIMIT_RSS = 0x5 - RNDADDENTROPY = 0x80085203 - RNDADDTOENTCNT = 0x80045201 - RNDCLEARPOOL = 0x20005206 - RNDGETENTCNT = 0x40045200 - RNDGETPOOL = 0x40085202 - RNDRESEEDCRNG = 0x20005207 - RNDZAPENTCNT = 0x20005204 - RTC_AIE_OFF = 0x20007002 - RTC_AIE_ON = 0x20007001 - RTC_ALM_READ = 0x40247008 - RTC_ALM_SET = 0x80247007 - RTC_EPOCH_READ = 0x4004700d - RTC_EPOCH_SET = 0x8004700e - RTC_IRQP_READ = 0x4004700b - RTC_IRQP_SET = 0x8004700c - RTC_PARAM_GET = 0x80187013 - RTC_PARAM_SET = 0x80187014 - RTC_PIE_OFF = 0x20007006 - RTC_PIE_ON = 0x20007005 - RTC_PLL_GET = 0x401c7011 - RTC_PLL_SET = 0x801c7012 - RTC_RD_TIME = 0x40247009 - RTC_SET_TIME = 0x8024700a - RTC_UIE_OFF = 0x20007004 - RTC_UIE_ON = 0x20007003 - RTC_VL_CLR = 0x20007014 - RTC_VL_READ = 0x40047013 - RTC_WIE_OFF = 0x20007010 - RTC_WIE_ON = 0x2000700f - RTC_WKALM_RD = 0x40287010 - RTC_WKALM_SET = 0x8028700f - SCM_TIMESTAMPING = 0x25 - SCM_TIMESTAMPING_OPT_STATS = 0x36 - SCM_TIMESTAMPING_PKTINFO = 0x3a - SCM_TIMESTAMPNS = 0x23 - SCM_TXTIME = 0x3d - SCM_WIFI_STATUS = 0x29 - SFD_CLOEXEC = 0x80000 - SFD_NONBLOCK = 0x800 - SIOCATMARK = 0x8905 - SIOCGPGRP = 0x8904 - SIOCGSTAMPNS_NEW = 0x40108907 - SIOCGSTAMP_NEW = 0x40108906 - SIOCINQ = 0x4004667f - SIOCOUTQ = 0x40047473 - SIOCSPGRP = 0x8902 - SOCK_CLOEXEC = 0x80000 - SOCK_DGRAM = 0x2 - SOCK_NONBLOCK = 0x800 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0x1 - SO_ACCEPTCONN = 0x1e - SO_ATTACH_BPF = 0x32 - SO_ATTACH_REUSEPORT_CBPF = 0x33 - SO_ATTACH_REUSEPORT_EBPF = 0x34 - SO_BINDTODEVICE = 0x19 - SO_BINDTOIFINDEX = 0x3e - SO_BPF_EXTENSIONS = 0x30 - SO_BROADCAST = 0x6 - SO_BSDCOMPAT = 0xe - SO_BUF_LOCK = 0x48 - SO_BUSY_POLL = 0x2e - SO_BUSY_POLL_BUDGET = 0x46 - SO_CNX_ADVICE = 0x35 - SO_COOKIE = 0x39 - SO_DETACH_REUSEPORT_BPF = 0x44 - SO_DOMAIN = 0x27 - SO_DONTROUTE = 0x5 - SO_ERROR = 0x4 - SO_INCOMING_CPU = 0x31 - SO_INCOMING_NAPI_ID = 0x38 - SO_KEEPALIVE = 0x9 - SO_LINGER = 0xd - SO_LOCK_FILTER = 0x2c - SO_MARK = 0x24 - SO_MAX_PACING_RATE = 0x2f - SO_MEMINFO = 0x37 - SO_NETNS_COOKIE = 0x47 - SO_NOFCS = 0x2b - SO_OOBINLINE = 0xa - SO_PASSCRED = 0x14 - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x15 - SO_PEERGROUPS = 0x3b - SO_PEERSEC = 0x1f - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x26 - SO_RCVBUF = 0x8 - SO_RCVBUFFORCE = 0x21 - SO_RCVLOWAT = 0x10 - SO_RCVMARK = 0x4b - SO_RCVTIMEO = 0x12 - SO_RCVTIMEO_NEW = 0x42 - SO_RCVTIMEO_OLD = 0x12 - SO_RESERVE_MEM = 0x49 - SO_REUSEADDR = 0x2 - SO_REUSEPORT = 0xf - SO_RXQ_OVFL = 0x28 - SO_SECURITY_AUTHENTICATION = 0x16 - SO_SECURITY_ENCRYPTION_NETWORK = 0x18 - SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 - SO_SELECT_ERR_QUEUE = 0x2d - SO_SNDBUF = 0x7 - SO_SNDBUFFORCE = 0x20 - SO_SNDLOWAT = 0x11 - SO_SNDTIMEO = 0x13 - SO_SNDTIMEO_NEW = 0x43 - SO_SNDTIMEO_OLD = 0x13 - SO_TIMESTAMPING = 0x25 - SO_TIMESTAMPING_NEW = 0x41 - SO_TIMESTAMPING_OLD = 0x25 - SO_TIMESTAMPNS = 0x23 - SO_TIMESTAMPNS_NEW = 0x40 - SO_TIMESTAMPNS_OLD = 0x23 - SO_TIMESTAMP_NEW = 0x3f - SO_TXREHASH = 0x4a - SO_TXTIME = 0x3d - SO_TYPE = 0x3 - SO_WIFI_STATUS = 0x29 - SO_ZEROCOPY = 0x3c - TAB1 = 0x400 - TAB2 = 0x800 - TAB3 = 0xc00 - TABDLY = 0xc00 - TCFLSH = 0x2000741f - TCGETA = 0x40147417 - TCGETS = 0x402c7413 - TCSAFLUSH = 0x2 - TCSBRK = 0x2000741d - TCSBRKP = 0x5425 - TCSETA = 0x80147418 - TCSETAF = 0x8014741c - TCSETAW = 0x80147419 - TCSETS = 0x802c7414 - TCSETSF = 0x802c7416 - TCSETSW = 0x802c7415 - TCXONC = 0x2000741e - TFD_CLOEXEC = 0x80000 - TFD_NONBLOCK = 0x800 - TIOCCBRK = 0x5428 - TIOCCONS = 0x541d - TIOCEXCL = 0x540c - TIOCGDEV = 0x40045432 - TIOCGETC = 0x40067412 - TIOCGETD = 0x5424 - TIOCGETP = 0x40067408 - TIOCGEXCL = 0x40045440 - TIOCGICOUNT = 0x545d - TIOCGISO7816 = 0x40285442 - TIOCGLCKTRMIOS = 0x5456 - TIOCGLTC = 0x40067474 - TIOCGPGRP = 0x40047477 - TIOCGPKT = 0x40045438 - TIOCGPTLCK = 0x40045439 - TIOCGPTN = 0x40045430 - TIOCGPTPEER = 0x20005441 - TIOCGRS485 = 0x542e - TIOCGSERIAL = 0x541e - TIOCGSID = 0x5429 - TIOCGSOFTCAR = 0x5419 - TIOCGWINSZ = 0x40087468 - TIOCINQ = 0x4004667f - TIOCLINUX = 0x541c - TIOCMBIC = 0x5417 - TIOCMBIS = 0x5416 - TIOCMGET = 0x5415 - TIOCMIWAIT = 0x545c - TIOCMSET = 0x5418 - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_LOOP = 0x8000 - TIOCM_OUT1 = 0x2000 - TIOCM_OUT2 = 0x4000 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x5422 - TIOCNXCL = 0x540d - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x5420 - TIOCSBRK = 0x5427 - TIOCSCTTY = 0x540e - TIOCSERCONFIG = 0x5453 - TIOCSERGETLSR = 0x5459 - TIOCSERGETMULTI = 0x545a - TIOCSERGSTRUCT = 0x5458 - TIOCSERGWILD = 0x5454 - TIOCSERSETMULTI = 0x545b - TIOCSERSWILD = 0x5455 - TIOCSER_TEMT = 0x1 - TIOCSETC = 0x80067411 - TIOCSETD = 0x5423 - TIOCSETN = 0x8006740a - TIOCSETP = 0x80067409 - TIOCSIG = 0x80045436 - TIOCSISO7816 = 0xc0285443 - TIOCSLCKTRMIOS = 0x5457 - TIOCSLTC = 0x80067475 - TIOCSPGRP = 0x80047476 - TIOCSPTLCK = 0x80045431 - TIOCSRS485 = 0x542f - TIOCSSERIAL = 0x541f - TIOCSSOFTCAR = 0x541a - TIOCSTART = 0x2000746e - TIOCSTI = 0x5412 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCVHANGUP = 0x5437 - TOSTOP = 0x400000 - TUNATTACHFILTER = 0x800854d5 - TUNDETACHFILTER = 0x800854d6 - TUNGETDEVNETNS = 0x200054e3 - TUNGETFEATURES = 0x400454cf - TUNGETFILTER = 0x400854db - TUNGETIFF = 0x400454d2 - TUNGETSNDBUF = 0x400454d3 - TUNGETVNETBE = 0x400454df - TUNGETVNETHDRSZ = 0x400454d7 - TUNGETVNETLE = 0x400454dd - TUNSETCARRIER = 0x800454e2 - TUNSETDEBUG = 0x800454c9 - TUNSETFILTEREBPF = 0x400454e1 - TUNSETGROUP = 0x800454ce - TUNSETIFF = 0x800454ca - TUNSETIFINDEX = 0x800454da - TUNSETLINK = 0x800454cd - TUNSETNOCSUM = 0x800454c8 - TUNSETOFFLOAD = 0x800454d0 - TUNSETOWNER = 0x800454cc - TUNSETPERSIST = 0x800454cb - TUNSETQUEUE = 0x800454d9 - TUNSETSNDBUF = 0x800454d4 - TUNSETSTEERINGEBPF = 0x400454e0 - TUNSETTXFILTER = 0x800454d1 - TUNSETVNETBE = 0x800454de - TUNSETVNETHDRSZ = 0x800454d8 - TUNSETVNETLE = 0x800454dc - UBI_IOCATT = 0x80186f40 - UBI_IOCDET = 0x80046f41 - UBI_IOCEBCH = 0x80044f02 - UBI_IOCEBER = 0x80044f01 - UBI_IOCEBISMAP = 0x40044f05 - UBI_IOCEBMAP = 0x80084f03 - UBI_IOCEBUNMAP = 0x80044f04 - UBI_IOCMKVOL = 0x80986f00 - UBI_IOCRMVOL = 0x80046f01 - UBI_IOCRNVOL = 0x91106f03 - UBI_IOCRPEB = 0x80046f04 - UBI_IOCRSVOL = 0x800c6f02 - UBI_IOCSETVOLPROP = 0x80104f06 - UBI_IOCSPEB = 0x80046f05 - UBI_IOCVOLCRBLK = 0x80804f07 - UBI_IOCVOLRMBLK = 0x20004f08 - UBI_IOCVOLUP = 0x80084f00 - VDISCARD = 0x10 - VEOF = 0x4 - VEOL = 0x6 - VEOL2 = 0x8 - VMIN = 0x5 - VREPRINT = 0xb - VSTART = 0xd - VSTOP = 0xe - VSUSP = 0xc - VSWTC = 0x9 - VT1 = 0x10000 - VTDLY = 0x10000 - VTIME = 0x7 - VWERASE = 0xa - WDIOC_GETBOOTSTATUS = 0x40045702 - WDIOC_GETPRETIMEOUT = 0x40045709 - WDIOC_GETSTATUS = 0x40045701 - WDIOC_GETSUPPORT = 0x40285700 - WDIOC_GETTEMP = 0x40045703 - WDIOC_GETTIMELEFT = 0x4004570a - WDIOC_GETTIMEOUT = 0x40045707 - WDIOC_KEEPALIVE = 0x40045705 - WDIOC_SETOPTIONS = 0x40045704 - WORDSIZE = 0x20 - XCASE = 0x4000 - XTABS = 0xc00 - _HIDIOCGRAWNAME = 0x40804804 - _HIDIOCGRAWPHYS = 0x40404805 - _HIDIOCGRAWUNIQ = 0x40404808 -) - -// Errors -const ( - EADDRINUSE = syscall.Errno(0x62) - EADDRNOTAVAIL = syscall.Errno(0x63) - EADV = syscall.Errno(0x44) - EAFNOSUPPORT = syscall.Errno(0x61) - EALREADY = syscall.Errno(0x72) - EBADE = syscall.Errno(0x34) - EBADFD = syscall.Errno(0x4d) - EBADMSG = syscall.Errno(0x4a) - EBADR = syscall.Errno(0x35) - EBADRQC = syscall.Errno(0x38) - EBADSLT = syscall.Errno(0x39) - EBFONT = syscall.Errno(0x3b) - ECANCELED = syscall.Errno(0x7d) - ECHRNG = syscall.Errno(0x2c) - ECOMM = syscall.Errno(0x46) - ECONNABORTED = syscall.Errno(0x67) - ECONNREFUSED = syscall.Errno(0x6f) - ECONNRESET = syscall.Errno(0x68) - EDEADLK = syscall.Errno(0x23) - EDEADLOCK = syscall.Errno(0x3a) - EDESTADDRREQ = syscall.Errno(0x59) - EDOTDOT = syscall.Errno(0x49) - EDQUOT = syscall.Errno(0x7a) - EHOSTDOWN = syscall.Errno(0x70) - EHOSTUNREACH = syscall.Errno(0x71) - EHWPOISON = syscall.Errno(0x85) - EIDRM = syscall.Errno(0x2b) - EILSEQ = syscall.Errno(0x54) - EINPROGRESS = syscall.Errno(0x73) - EISCONN = syscall.Errno(0x6a) - EISNAM = syscall.Errno(0x78) - EKEYEXPIRED = syscall.Errno(0x7f) - EKEYREJECTED = syscall.Errno(0x81) - EKEYREVOKED = syscall.Errno(0x80) - EL2HLT = syscall.Errno(0x33) - EL2NSYNC = syscall.Errno(0x2d) - EL3HLT = syscall.Errno(0x2e) - EL3RST = syscall.Errno(0x2f) - ELIBACC = syscall.Errno(0x4f) - ELIBBAD = syscall.Errno(0x50) - ELIBEXEC = syscall.Errno(0x53) - ELIBMAX = syscall.Errno(0x52) - ELIBSCN = syscall.Errno(0x51) - ELNRNG = syscall.Errno(0x30) - ELOOP = syscall.Errno(0x28) - EMEDIUMTYPE = syscall.Errno(0x7c) - EMSGSIZE = syscall.Errno(0x5a) - EMULTIHOP = syscall.Errno(0x48) - ENAMETOOLONG = syscall.Errno(0x24) - ENAVAIL = syscall.Errno(0x77) - ENETDOWN = syscall.Errno(0x64) - ENETRESET = syscall.Errno(0x66) - ENETUNREACH = syscall.Errno(0x65) - ENOANO = syscall.Errno(0x37) - ENOBUFS = syscall.Errno(0x69) - ENOCSI = syscall.Errno(0x32) - ENODATA = syscall.Errno(0x3d) - ENOKEY = syscall.Errno(0x7e) - ENOLCK = syscall.Errno(0x25) - ENOLINK = syscall.Errno(0x43) - ENOMEDIUM = syscall.Errno(0x7b) - ENOMSG = syscall.Errno(0x2a) - ENONET = syscall.Errno(0x40) - ENOPKG = syscall.Errno(0x41) - ENOPROTOOPT = syscall.Errno(0x5c) - ENOSR = syscall.Errno(0x3f) - ENOSTR = syscall.Errno(0x3c) - ENOSYS = syscall.Errno(0x26) - ENOTCONN = syscall.Errno(0x6b) - ENOTEMPTY = syscall.Errno(0x27) - ENOTNAM = syscall.Errno(0x76) - ENOTRECOVERABLE = syscall.Errno(0x83) - ENOTSOCK = syscall.Errno(0x58) - ENOTSUP = syscall.Errno(0x5f) - ENOTUNIQ = syscall.Errno(0x4c) - EOPNOTSUPP = syscall.Errno(0x5f) - EOVERFLOW = syscall.Errno(0x4b) - EOWNERDEAD = syscall.Errno(0x82) - EPFNOSUPPORT = syscall.Errno(0x60) - EPROTO = syscall.Errno(0x47) - EPROTONOSUPPORT = syscall.Errno(0x5d) - EPROTOTYPE = syscall.Errno(0x5b) - EREMCHG = syscall.Errno(0x4e) - EREMOTE = syscall.Errno(0x42) - EREMOTEIO = syscall.Errno(0x79) - ERESTART = syscall.Errno(0x55) - ERFKILL = syscall.Errno(0x84) - ESHUTDOWN = syscall.Errno(0x6c) - ESOCKTNOSUPPORT = syscall.Errno(0x5e) - ESRMNT = syscall.Errno(0x45) - ESTALE = syscall.Errno(0x74) - ESTRPIPE = syscall.Errno(0x56) - ETIME = syscall.Errno(0x3e) - ETIMEDOUT = syscall.Errno(0x6e) - ETOOMANYREFS = syscall.Errno(0x6d) - EUCLEAN = syscall.Errno(0x75) - EUNATCH = syscall.Errno(0x31) - EUSERS = syscall.Errno(0x57) - EXFULL = syscall.Errno(0x36) -) - -// Signals -const ( - SIGBUS = syscall.Signal(0x7) - SIGCHLD = syscall.Signal(0x11) - SIGCLD = syscall.Signal(0x11) - SIGCONT = syscall.Signal(0x12) - SIGIO = syscall.Signal(0x1d) - SIGPOLL = syscall.Signal(0x1d) - SIGPROF = syscall.Signal(0x1b) - SIGPWR = syscall.Signal(0x1e) - SIGSTKFLT = syscall.Signal(0x10) - SIGSTOP = syscall.Signal(0x13) - SIGSYS = syscall.Signal(0x1f) - SIGTSTP = syscall.Signal(0x14) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x17) - SIGUSR1 = syscall.Signal(0xa) - SIGUSR2 = syscall.Signal(0xc) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "no such device or address"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EAGAIN", "resource temporarily unavailable"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device or resource busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "invalid cross-device link"}, - {19, "ENODEV", "no such device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "numerical result out of range"}, - {35, "EDEADLK", "resource deadlock avoided"}, - {36, "ENAMETOOLONG", "file name too long"}, - {37, "ENOLCK", "no locks available"}, - {38, "ENOSYS", "function not implemented"}, - {39, "ENOTEMPTY", "directory not empty"}, - {40, "ELOOP", "too many levels of symbolic links"}, - {42, "ENOMSG", "no message of desired type"}, - {43, "EIDRM", "identifier removed"}, - {44, "ECHRNG", "channel number out of range"}, - {45, "EL2NSYNC", "level 2 not synchronized"}, - {46, "EL3HLT", "level 3 halted"}, - {47, "EL3RST", "level 3 reset"}, - {48, "ELNRNG", "link number out of range"}, - {49, "EUNATCH", "protocol driver not attached"}, - {50, "ENOCSI", "no CSI structure available"}, - {51, "EL2HLT", "level 2 halted"}, - {52, "EBADE", "invalid exchange"}, - {53, "EBADR", "invalid request descriptor"}, - {54, "EXFULL", "exchange full"}, - {55, "ENOANO", "no anode"}, - {56, "EBADRQC", "invalid request code"}, - {57, "EBADSLT", "invalid slot"}, - {58, "EDEADLOCK", "file locking deadlock error"}, - {59, "EBFONT", "bad font file format"}, - {60, "ENOSTR", "device not a stream"}, - {61, "ENODATA", "no data available"}, - {62, "ETIME", "timer expired"}, - {63, "ENOSR", "out of streams resources"}, - {64, "ENONET", "machine is not on the network"}, - {65, "ENOPKG", "package not installed"}, - {66, "EREMOTE", "object is remote"}, - {67, "ENOLINK", "link has been severed"}, - {68, "EADV", "advertise error"}, - {69, "ESRMNT", "srmount error"}, - {70, "ECOMM", "communication error on send"}, - {71, "EPROTO", "protocol error"}, - {72, "EMULTIHOP", "multihop attempted"}, - {73, "EDOTDOT", "RFS specific error"}, - {74, "EBADMSG", "bad message"}, - {75, "EOVERFLOW", "value too large for defined data type"}, - {76, "ENOTUNIQ", "name not unique on network"}, - {77, "EBADFD", "file descriptor in bad state"}, - {78, "EREMCHG", "remote address changed"}, - {79, "ELIBACC", "can not access a needed shared library"}, - {80, "ELIBBAD", "accessing a corrupted shared library"}, - {81, "ELIBSCN", ".lib section in a.out corrupted"}, - {82, "ELIBMAX", "attempting to link in too many shared libraries"}, - {83, "ELIBEXEC", "cannot exec a shared library directly"}, - {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, - {85, "ERESTART", "interrupted system call should be restarted"}, - {86, "ESTRPIPE", "streams pipe error"}, - {87, "EUSERS", "too many users"}, - {88, "ENOTSOCK", "socket operation on non-socket"}, - {89, "EDESTADDRREQ", "destination address required"}, - {90, "EMSGSIZE", "message too long"}, - {91, "EPROTOTYPE", "protocol wrong type for socket"}, - {92, "ENOPROTOOPT", "protocol not available"}, - {93, "EPROTONOSUPPORT", "protocol not supported"}, - {94, "ESOCKTNOSUPPORT", "socket type not supported"}, - {95, "ENOTSUP", "operation not supported"}, - {96, "EPFNOSUPPORT", "protocol family not supported"}, - {97, "EAFNOSUPPORT", "address family not supported by protocol"}, - {98, "EADDRINUSE", "address already in use"}, - {99, "EADDRNOTAVAIL", "cannot assign requested address"}, - {100, "ENETDOWN", "network is down"}, - {101, "ENETUNREACH", "network is unreachable"}, - {102, "ENETRESET", "network dropped connection on reset"}, - {103, "ECONNABORTED", "software caused connection abort"}, - {104, "ECONNRESET", "connection reset by peer"}, - {105, "ENOBUFS", "no buffer space available"}, - {106, "EISCONN", "transport endpoint is already connected"}, - {107, "ENOTCONN", "transport endpoint is not connected"}, - {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, - {109, "ETOOMANYREFS", "too many references: cannot splice"}, - {110, "ETIMEDOUT", "connection timed out"}, - {111, "ECONNREFUSED", "connection refused"}, - {112, "EHOSTDOWN", "host is down"}, - {113, "EHOSTUNREACH", "no route to host"}, - {114, "EALREADY", "operation already in progress"}, - {115, "EINPROGRESS", "operation now in progress"}, - {116, "ESTALE", "stale file handle"}, - {117, "EUCLEAN", "structure needs cleaning"}, - {118, "ENOTNAM", "not a XENIX named type file"}, - {119, "ENAVAIL", "no XENIX semaphores available"}, - {120, "EISNAM", "is a named type file"}, - {121, "EREMOTEIO", "remote I/O error"}, - {122, "EDQUOT", "disk quota exceeded"}, - {123, "ENOMEDIUM", "no medium found"}, - {124, "EMEDIUMTYPE", "wrong medium type"}, - {125, "ECANCELED", "operation canceled"}, - {126, "ENOKEY", "required key not available"}, - {127, "EKEYEXPIRED", "key has expired"}, - {128, "EKEYREVOKED", "key has been revoked"}, - {129, "EKEYREJECTED", "key was rejected by service"}, - {130, "EOWNERDEAD", "owner died"}, - {131, "ENOTRECOVERABLE", "state not recoverable"}, - {132, "ERFKILL", "operation not possible due to RF-kill"}, - {133, "EHWPOISON", "memory page has hardware error"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/breakpoint trap"}, - {6, "SIGABRT", "aborted"}, - {7, "SIGBUS", "bus error"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGUSR1", "user defined signal 1"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGUSR2", "user defined signal 2"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGSTKFLT", "stack fault"}, - {17, "SIGCHLD", "child exited"}, - {18, "SIGCONT", "continued"}, - {19, "SIGSTOP", "stopped (signal)"}, - {20, "SIGTSTP", "stopped"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGURG", "urgent I/O condition"}, - {24, "SIGXCPU", "CPU time limit exceeded"}, - {25, "SIGXFSZ", "file size limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window changed"}, - {29, "SIGIO", "I/O possible"}, - {30, "SIGPWR", "power failure"}, - {31, "SIGSYS", "bad system call"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go deleted file mode 100644 index 959dd9b..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ /dev/null @@ -1,891 +0,0 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/ppc64/include -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build ppc64 && linux -// +build ppc64,linux - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/ppc64/include _const.go - -package unix - -import "syscall" - -const ( - B1000000 = 0x17 - B115200 = 0x11 - B1152000 = 0x18 - B1500000 = 0x19 - B2000000 = 0x1a - B230400 = 0x12 - B2500000 = 0x1b - B3000000 = 0x1c - B3500000 = 0x1d - B4000000 = 0x1e - B460800 = 0x13 - B500000 = 0x14 - B57600 = 0x10 - B576000 = 0x15 - B921600 = 0x16 - BLKBSZGET = 0x40081270 - BLKBSZSET = 0x80081271 - BLKFLSBUF = 0x20001261 - BLKFRAGET = 0x20001265 - BLKFRASET = 0x20001264 - BLKGETSIZE = 0x20001260 - BLKGETSIZE64 = 0x40081272 - BLKPBSZGET = 0x2000127b - BLKRAGET = 0x20001263 - BLKRASET = 0x20001262 - BLKROGET = 0x2000125e - BLKROSET = 0x2000125d - BLKRRPART = 0x2000125f - BLKSECTGET = 0x20001267 - BLKSECTSET = 0x20001266 - BLKSSZGET = 0x20001268 - BOTHER = 0x1f - BS1 = 0x8000 - BSDLY = 0x8000 - CBAUD = 0xff - CBAUDEX = 0x0 - CIBAUD = 0xff0000 - CLOCAL = 0x8000 - CR1 = 0x1000 - CR2 = 0x2000 - CR3 = 0x3000 - CRDLY = 0x3000 - CREAD = 0x800 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTOPB = 0x400 - ECCGETLAYOUT = 0x41484d11 - ECCGETSTATS = 0x40104d12 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EFD_CLOEXEC = 0x80000 - EFD_NONBLOCK = 0x800 - EPOLL_CLOEXEC = 0x80000 - EXTPROC = 0x10000000 - FF1 = 0x4000 - FFDLY = 0x4000 - FICLONE = 0x80049409 - FICLONERANGE = 0x8020940d - FLUSHO = 0x800000 - FS_IOC_ENABLE_VERITY = 0x80806685 - FS_IOC_GETFLAGS = 0x40086601 - FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b - FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 - FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 - FS_IOC_SETFLAGS = 0x80086602 - FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 - F_GETLK = 0x5 - F_GETLK64 = 0xc - F_GETOWN = 0x9 - F_RDLCK = 0x0 - F_SETLK = 0x6 - F_SETLK64 = 0xd - F_SETLKW = 0x7 - F_SETLKW64 = 0xe - F_SETOWN = 0x8 - F_UNLCK = 0x2 - F_WRLCK = 0x1 - HIDIOCGRAWINFO = 0x40084803 - HIDIOCGRDESC = 0x50044802 - HIDIOCGRDESCSIZE = 0x40044801 - HUPCL = 0x4000 - ICANON = 0x100 - IEXTEN = 0x400 - IN_CLOEXEC = 0x80000 - IN_NONBLOCK = 0x800 - IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 - ISIG = 0x80 - IUCLC = 0x1000 - IXOFF = 0x400 - IXON = 0x200 - MAP_ANON = 0x20 - MAP_ANONYMOUS = 0x20 - MAP_DENYWRITE = 0x800 - MAP_EXECUTABLE = 0x1000 - MAP_GROWSDOWN = 0x100 - MAP_HUGETLB = 0x40000 - MAP_LOCKED = 0x80 - MAP_NONBLOCK = 0x10000 - MAP_NORESERVE = 0x40 - MAP_POPULATE = 0x8000 - MAP_STACK = 0x20000 - MAP_SYNC = 0x80000 - MCL_CURRENT = 0x2000 - MCL_FUTURE = 0x4000 - MCL_ONFAULT = 0x8000 - MEMERASE = 0x80084d02 - MEMERASE64 = 0x80104d14 - MEMGETBADBLOCK = 0x80084d0b - MEMGETINFO = 0x40204d01 - MEMGETOOBSEL = 0x40c84d0a - MEMGETREGIONCOUNT = 0x40044d07 - MEMISLOCKED = 0x40084d17 - MEMLOCK = 0x80084d05 - MEMREADOOB = 0xc0104d04 - MEMSETBADBLOCK = 0x80084d0c - MEMUNLOCK = 0x80084d06 - MEMWRITEOOB = 0xc0104d03 - MTDFILEMODE = 0x20004d13 - NFDBITS = 0x40 - NL2 = 0x200 - NL3 = 0x300 - NLDLY = 0x300 - NOFLSH = 0x80000000 - NS_GET_NSTYPE = 0x2000b703 - NS_GET_OWNER_UID = 0x2000b704 - NS_GET_PARENT = 0x2000b702 - NS_GET_USERNS = 0x2000b701 - OLCUC = 0x4 - ONLCR = 0x2 - OTPERASE = 0x800c4d19 - OTPGETREGIONCOUNT = 0x80044d0e - OTPGETREGIONINFO = 0x800c4d0f - OTPLOCK = 0x400c4d10 - OTPSELECT = 0x40044d0d - O_APPEND = 0x400 - O_ASYNC = 0x2000 - O_CLOEXEC = 0x80000 - O_CREAT = 0x40 - O_DIRECT = 0x20000 - O_DIRECTORY = 0x4000 - O_DSYNC = 0x1000 - O_EXCL = 0x80 - O_FSYNC = 0x101000 - O_LARGEFILE = 0x0 - O_NDELAY = 0x800 - O_NOATIME = 0x40000 - O_NOCTTY = 0x100 - O_NOFOLLOW = 0x8000 - O_NONBLOCK = 0x800 - O_PATH = 0x200000 - O_RSYNC = 0x101000 - O_SYNC = 0x101000 - O_TMPFILE = 0x404000 - O_TRUNC = 0x200 - PARENB = 0x1000 - PARODD = 0x2000 - PENDIN = 0x20000000 - PERF_EVENT_IOC_DISABLE = 0x20002401 - PERF_EVENT_IOC_ENABLE = 0x20002400 - PERF_EVENT_IOC_ID = 0x40082407 - PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b - PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 - PERF_EVENT_IOC_PERIOD = 0x80082404 - PERF_EVENT_IOC_QUERY_BPF = 0xc008240a - PERF_EVENT_IOC_REFRESH = 0x20002402 - PERF_EVENT_IOC_RESET = 0x20002403 - PERF_EVENT_IOC_SET_BPF = 0x80042408 - PERF_EVENT_IOC_SET_FILTER = 0x80082406 - PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 - PPPIOCATTACH = 0x8004743d - PPPIOCATTCHAN = 0x80047438 - PPPIOCBRIDGECHAN = 0x80047435 - PPPIOCCONNECT = 0x8004743a - PPPIOCDETACH = 0x8004743c - PPPIOCDISCONN = 0x20007439 - PPPIOCGASYNCMAP = 0x40047458 - PPPIOCGCHAN = 0x40047437 - PPPIOCGDEBUG = 0x40047441 - PPPIOCGFLAGS = 0x4004745a - PPPIOCGIDLE = 0x4010743f - PPPIOCGIDLE32 = 0x4008743f - PPPIOCGIDLE64 = 0x4010743f - PPPIOCGL2TPSTATS = 0x40487436 - PPPIOCGMRU = 0x40047453 - PPPIOCGRASYNCMAP = 0x40047455 - PPPIOCGUNIT = 0x40047456 - PPPIOCGXASYNCMAP = 0x40207450 - PPPIOCSACTIVE = 0x80107446 - PPPIOCSASYNCMAP = 0x80047457 - PPPIOCSCOMPRESS = 0x8010744d - PPPIOCSDEBUG = 0x80047440 - PPPIOCSFLAGS = 0x80047459 - PPPIOCSMAXCID = 0x80047451 - PPPIOCSMRRU = 0x8004743b - PPPIOCSMRU = 0x80047452 - PPPIOCSNPMODE = 0x8008744b - PPPIOCSPASS = 0x80107447 - PPPIOCSRASYNCMAP = 0x80047454 - PPPIOCSXASYNCMAP = 0x8020744f - PPPIOCUNBRIDGECHAN = 0x20007434 - PPPIOCXFERUNIT = 0x2000744e - PROT_SAO = 0x10 - PR_SET_PTRACER_ANY = 0xffffffffffffffff - PTRACE_GETEVRREGS = 0x14 - PTRACE_GETFPREGS = 0xe - PTRACE_GETREGS64 = 0x16 - PTRACE_GETVRREGS = 0x12 - PTRACE_GETVSRREGS = 0x1b - PTRACE_GET_DEBUGREG = 0x19 - PTRACE_SETEVRREGS = 0x15 - PTRACE_SETFPREGS = 0xf - PTRACE_SETREGS64 = 0x17 - PTRACE_SETVRREGS = 0x13 - PTRACE_SETVSRREGS = 0x1c - PTRACE_SET_DEBUGREG = 0x1a - PTRACE_SINGLEBLOCK = 0x100 - PTRACE_SYSEMU = 0x1d - PTRACE_SYSEMU_SINGLESTEP = 0x1e - PT_CCR = 0x26 - PT_CTR = 0x23 - PT_DAR = 0x29 - PT_DSCR = 0x2c - PT_DSISR = 0x2a - PT_FPR0 = 0x30 - PT_FPSCR = 0x50 - PT_LNK = 0x24 - PT_MSR = 0x21 - PT_NIP = 0x20 - PT_ORIG_R3 = 0x22 - PT_R0 = 0x0 - PT_R1 = 0x1 - PT_R10 = 0xa - PT_R11 = 0xb - PT_R12 = 0xc - PT_R13 = 0xd - PT_R14 = 0xe - PT_R15 = 0xf - PT_R16 = 0x10 - PT_R17 = 0x11 - PT_R18 = 0x12 - PT_R19 = 0x13 - PT_R2 = 0x2 - PT_R20 = 0x14 - PT_R21 = 0x15 - PT_R22 = 0x16 - PT_R23 = 0x17 - PT_R24 = 0x18 - PT_R25 = 0x19 - PT_R26 = 0x1a - PT_R27 = 0x1b - PT_R28 = 0x1c - PT_R29 = 0x1d - PT_R3 = 0x3 - PT_R30 = 0x1e - PT_R31 = 0x1f - PT_R4 = 0x4 - PT_R5 = 0x5 - PT_R6 = 0x6 - PT_R7 = 0x7 - PT_R8 = 0x8 - PT_R9 = 0x9 - PT_REGS_COUNT = 0x2c - PT_RESULT = 0x2b - PT_SOFTE = 0x27 - PT_TRAP = 0x28 - PT_VR0 = 0x52 - PT_VRSAVE = 0x94 - PT_VSCR = 0x93 - PT_VSR0 = 0x96 - PT_VSR31 = 0xd4 - PT_XER = 0x25 - RLIMIT_AS = 0x9 - RLIMIT_MEMLOCK = 0x8 - RLIMIT_NOFILE = 0x7 - RLIMIT_NPROC = 0x6 - RLIMIT_RSS = 0x5 - RNDADDENTROPY = 0x80085203 - RNDADDTOENTCNT = 0x80045201 - RNDCLEARPOOL = 0x20005206 - RNDGETENTCNT = 0x40045200 - RNDGETPOOL = 0x40085202 - RNDRESEEDCRNG = 0x20005207 - RNDZAPENTCNT = 0x20005204 - RTC_AIE_OFF = 0x20007002 - RTC_AIE_ON = 0x20007001 - RTC_ALM_READ = 0x40247008 - RTC_ALM_SET = 0x80247007 - RTC_EPOCH_READ = 0x4008700d - RTC_EPOCH_SET = 0x8008700e - RTC_IRQP_READ = 0x4008700b - RTC_IRQP_SET = 0x8008700c - RTC_PARAM_GET = 0x80187013 - RTC_PARAM_SET = 0x80187014 - RTC_PIE_OFF = 0x20007006 - RTC_PIE_ON = 0x20007005 - RTC_PLL_GET = 0x40207011 - RTC_PLL_SET = 0x80207012 - RTC_RD_TIME = 0x40247009 - RTC_SET_TIME = 0x8024700a - RTC_UIE_OFF = 0x20007004 - RTC_UIE_ON = 0x20007003 - RTC_VL_CLR = 0x20007014 - RTC_VL_READ = 0x40047013 - RTC_WIE_OFF = 0x20007010 - RTC_WIE_ON = 0x2000700f - RTC_WKALM_RD = 0x40287010 - RTC_WKALM_SET = 0x8028700f - SCM_TIMESTAMPING = 0x25 - SCM_TIMESTAMPING_OPT_STATS = 0x36 - SCM_TIMESTAMPING_PKTINFO = 0x3a - SCM_TIMESTAMPNS = 0x23 - SCM_TXTIME = 0x3d - SCM_WIFI_STATUS = 0x29 - SFD_CLOEXEC = 0x80000 - SFD_NONBLOCK = 0x800 - SIOCATMARK = 0x8905 - SIOCGPGRP = 0x8904 - SIOCGSTAMPNS_NEW = 0x40108907 - SIOCGSTAMP_NEW = 0x40108906 - SIOCINQ = 0x4004667f - SIOCOUTQ = 0x40047473 - SIOCSPGRP = 0x8902 - SOCK_CLOEXEC = 0x80000 - SOCK_DGRAM = 0x2 - SOCK_NONBLOCK = 0x800 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0x1 - SO_ACCEPTCONN = 0x1e - SO_ATTACH_BPF = 0x32 - SO_ATTACH_REUSEPORT_CBPF = 0x33 - SO_ATTACH_REUSEPORT_EBPF = 0x34 - SO_BINDTODEVICE = 0x19 - SO_BINDTOIFINDEX = 0x3e - SO_BPF_EXTENSIONS = 0x30 - SO_BROADCAST = 0x6 - SO_BSDCOMPAT = 0xe - SO_BUF_LOCK = 0x48 - SO_BUSY_POLL = 0x2e - SO_BUSY_POLL_BUDGET = 0x46 - SO_CNX_ADVICE = 0x35 - SO_COOKIE = 0x39 - SO_DETACH_REUSEPORT_BPF = 0x44 - SO_DOMAIN = 0x27 - SO_DONTROUTE = 0x5 - SO_ERROR = 0x4 - SO_INCOMING_CPU = 0x31 - SO_INCOMING_NAPI_ID = 0x38 - SO_KEEPALIVE = 0x9 - SO_LINGER = 0xd - SO_LOCK_FILTER = 0x2c - SO_MARK = 0x24 - SO_MAX_PACING_RATE = 0x2f - SO_MEMINFO = 0x37 - SO_NETNS_COOKIE = 0x47 - SO_NOFCS = 0x2b - SO_OOBINLINE = 0xa - SO_PASSCRED = 0x14 - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x15 - SO_PEERGROUPS = 0x3b - SO_PEERSEC = 0x1f - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x26 - SO_RCVBUF = 0x8 - SO_RCVBUFFORCE = 0x21 - SO_RCVLOWAT = 0x10 - SO_RCVMARK = 0x4b - SO_RCVTIMEO = 0x12 - SO_RCVTIMEO_NEW = 0x42 - SO_RCVTIMEO_OLD = 0x12 - SO_RESERVE_MEM = 0x49 - SO_REUSEADDR = 0x2 - SO_REUSEPORT = 0xf - SO_RXQ_OVFL = 0x28 - SO_SECURITY_AUTHENTICATION = 0x16 - SO_SECURITY_ENCRYPTION_NETWORK = 0x18 - SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 - SO_SELECT_ERR_QUEUE = 0x2d - SO_SNDBUF = 0x7 - SO_SNDBUFFORCE = 0x20 - SO_SNDLOWAT = 0x11 - SO_SNDTIMEO = 0x13 - SO_SNDTIMEO_NEW = 0x43 - SO_SNDTIMEO_OLD = 0x13 - SO_TIMESTAMPING = 0x25 - SO_TIMESTAMPING_NEW = 0x41 - SO_TIMESTAMPING_OLD = 0x25 - SO_TIMESTAMPNS = 0x23 - SO_TIMESTAMPNS_NEW = 0x40 - SO_TIMESTAMPNS_OLD = 0x23 - SO_TIMESTAMP_NEW = 0x3f - SO_TXREHASH = 0x4a - SO_TXTIME = 0x3d - SO_TYPE = 0x3 - SO_WIFI_STATUS = 0x29 - SO_ZEROCOPY = 0x3c - TAB1 = 0x400 - TAB2 = 0x800 - TAB3 = 0xc00 - TABDLY = 0xc00 - TCFLSH = 0x2000741f - TCGETA = 0x40147417 - TCGETS = 0x402c7413 - TCSAFLUSH = 0x2 - TCSBRK = 0x2000741d - TCSBRKP = 0x5425 - TCSETA = 0x80147418 - TCSETAF = 0x8014741c - TCSETAW = 0x80147419 - TCSETS = 0x802c7414 - TCSETSF = 0x802c7416 - TCSETSW = 0x802c7415 - TCXONC = 0x2000741e - TFD_CLOEXEC = 0x80000 - TFD_NONBLOCK = 0x800 - TIOCCBRK = 0x5428 - TIOCCONS = 0x541d - TIOCEXCL = 0x540c - TIOCGDEV = 0x40045432 - TIOCGETC = 0x40067412 - TIOCGETD = 0x5424 - TIOCGETP = 0x40067408 - TIOCGEXCL = 0x40045440 - TIOCGICOUNT = 0x545d - TIOCGISO7816 = 0x40285442 - TIOCGLCKTRMIOS = 0x5456 - TIOCGLTC = 0x40067474 - TIOCGPGRP = 0x40047477 - TIOCGPKT = 0x40045438 - TIOCGPTLCK = 0x40045439 - TIOCGPTN = 0x40045430 - TIOCGPTPEER = 0x20005441 - TIOCGRS485 = 0x542e - TIOCGSERIAL = 0x541e - TIOCGSID = 0x5429 - TIOCGSOFTCAR = 0x5419 - TIOCGWINSZ = 0x40087468 - TIOCINQ = 0x4004667f - TIOCLINUX = 0x541c - TIOCMBIC = 0x5417 - TIOCMBIS = 0x5416 - TIOCMGET = 0x5415 - TIOCMIWAIT = 0x545c - TIOCMSET = 0x5418 - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_LOOP = 0x8000 - TIOCM_OUT1 = 0x2000 - TIOCM_OUT2 = 0x4000 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x5422 - TIOCNXCL = 0x540d - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x5420 - TIOCSBRK = 0x5427 - TIOCSCTTY = 0x540e - TIOCSERCONFIG = 0x5453 - TIOCSERGETLSR = 0x5459 - TIOCSERGETMULTI = 0x545a - TIOCSERGSTRUCT = 0x5458 - TIOCSERGWILD = 0x5454 - TIOCSERSETMULTI = 0x545b - TIOCSERSWILD = 0x5455 - TIOCSER_TEMT = 0x1 - TIOCSETC = 0x80067411 - TIOCSETD = 0x5423 - TIOCSETN = 0x8006740a - TIOCSETP = 0x80067409 - TIOCSIG = 0x80045436 - TIOCSISO7816 = 0xc0285443 - TIOCSLCKTRMIOS = 0x5457 - TIOCSLTC = 0x80067475 - TIOCSPGRP = 0x80047476 - TIOCSPTLCK = 0x80045431 - TIOCSRS485 = 0x542f - TIOCSSERIAL = 0x541f - TIOCSSOFTCAR = 0x541a - TIOCSTART = 0x2000746e - TIOCSTI = 0x5412 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCVHANGUP = 0x5437 - TOSTOP = 0x400000 - TUNATTACHFILTER = 0x801054d5 - TUNDETACHFILTER = 0x801054d6 - TUNGETDEVNETNS = 0x200054e3 - TUNGETFEATURES = 0x400454cf - TUNGETFILTER = 0x401054db - TUNGETIFF = 0x400454d2 - TUNGETSNDBUF = 0x400454d3 - TUNGETVNETBE = 0x400454df - TUNGETVNETHDRSZ = 0x400454d7 - TUNGETVNETLE = 0x400454dd - TUNSETCARRIER = 0x800454e2 - TUNSETDEBUG = 0x800454c9 - TUNSETFILTEREBPF = 0x400454e1 - TUNSETGROUP = 0x800454ce - TUNSETIFF = 0x800454ca - TUNSETIFINDEX = 0x800454da - TUNSETLINK = 0x800454cd - TUNSETNOCSUM = 0x800454c8 - TUNSETOFFLOAD = 0x800454d0 - TUNSETOWNER = 0x800454cc - TUNSETPERSIST = 0x800454cb - TUNSETQUEUE = 0x800454d9 - TUNSETSNDBUF = 0x800454d4 - TUNSETSTEERINGEBPF = 0x400454e0 - TUNSETTXFILTER = 0x800454d1 - TUNSETVNETBE = 0x800454de - TUNSETVNETHDRSZ = 0x800454d8 - TUNSETVNETLE = 0x800454dc - UBI_IOCATT = 0x80186f40 - UBI_IOCDET = 0x80046f41 - UBI_IOCEBCH = 0x80044f02 - UBI_IOCEBER = 0x80044f01 - UBI_IOCEBISMAP = 0x40044f05 - UBI_IOCEBMAP = 0x80084f03 - UBI_IOCEBUNMAP = 0x80044f04 - UBI_IOCMKVOL = 0x80986f00 - UBI_IOCRMVOL = 0x80046f01 - UBI_IOCRNVOL = 0x91106f03 - UBI_IOCRPEB = 0x80046f04 - UBI_IOCRSVOL = 0x800c6f02 - UBI_IOCSETVOLPROP = 0x80104f06 - UBI_IOCSPEB = 0x80046f05 - UBI_IOCVOLCRBLK = 0x80804f07 - UBI_IOCVOLRMBLK = 0x20004f08 - UBI_IOCVOLUP = 0x80084f00 - VDISCARD = 0x10 - VEOF = 0x4 - VEOL = 0x6 - VEOL2 = 0x8 - VMIN = 0x5 - VREPRINT = 0xb - VSTART = 0xd - VSTOP = 0xe - VSUSP = 0xc - VSWTC = 0x9 - VT1 = 0x10000 - VTDLY = 0x10000 - VTIME = 0x7 - VWERASE = 0xa - WDIOC_GETBOOTSTATUS = 0x40045702 - WDIOC_GETPRETIMEOUT = 0x40045709 - WDIOC_GETSTATUS = 0x40045701 - WDIOC_GETSUPPORT = 0x40285700 - WDIOC_GETTEMP = 0x40045703 - WDIOC_GETTIMELEFT = 0x4004570a - WDIOC_GETTIMEOUT = 0x40045707 - WDIOC_KEEPALIVE = 0x40045705 - WDIOC_SETOPTIONS = 0x40045704 - WORDSIZE = 0x40 - XCASE = 0x4000 - XTABS = 0xc00 - _HIDIOCGRAWNAME = 0x40804804 - _HIDIOCGRAWPHYS = 0x40404805 - _HIDIOCGRAWUNIQ = 0x40404808 -) - -// Errors -const ( - EADDRINUSE = syscall.Errno(0x62) - EADDRNOTAVAIL = syscall.Errno(0x63) - EADV = syscall.Errno(0x44) - EAFNOSUPPORT = syscall.Errno(0x61) - EALREADY = syscall.Errno(0x72) - EBADE = syscall.Errno(0x34) - EBADFD = syscall.Errno(0x4d) - EBADMSG = syscall.Errno(0x4a) - EBADR = syscall.Errno(0x35) - EBADRQC = syscall.Errno(0x38) - EBADSLT = syscall.Errno(0x39) - EBFONT = syscall.Errno(0x3b) - ECANCELED = syscall.Errno(0x7d) - ECHRNG = syscall.Errno(0x2c) - ECOMM = syscall.Errno(0x46) - ECONNABORTED = syscall.Errno(0x67) - ECONNREFUSED = syscall.Errno(0x6f) - ECONNRESET = syscall.Errno(0x68) - EDEADLK = syscall.Errno(0x23) - EDEADLOCK = syscall.Errno(0x3a) - EDESTADDRREQ = syscall.Errno(0x59) - EDOTDOT = syscall.Errno(0x49) - EDQUOT = syscall.Errno(0x7a) - EHOSTDOWN = syscall.Errno(0x70) - EHOSTUNREACH = syscall.Errno(0x71) - EHWPOISON = syscall.Errno(0x85) - EIDRM = syscall.Errno(0x2b) - EILSEQ = syscall.Errno(0x54) - EINPROGRESS = syscall.Errno(0x73) - EISCONN = syscall.Errno(0x6a) - EISNAM = syscall.Errno(0x78) - EKEYEXPIRED = syscall.Errno(0x7f) - EKEYREJECTED = syscall.Errno(0x81) - EKEYREVOKED = syscall.Errno(0x80) - EL2HLT = syscall.Errno(0x33) - EL2NSYNC = syscall.Errno(0x2d) - EL3HLT = syscall.Errno(0x2e) - EL3RST = syscall.Errno(0x2f) - ELIBACC = syscall.Errno(0x4f) - ELIBBAD = syscall.Errno(0x50) - ELIBEXEC = syscall.Errno(0x53) - ELIBMAX = syscall.Errno(0x52) - ELIBSCN = syscall.Errno(0x51) - ELNRNG = syscall.Errno(0x30) - ELOOP = syscall.Errno(0x28) - EMEDIUMTYPE = syscall.Errno(0x7c) - EMSGSIZE = syscall.Errno(0x5a) - EMULTIHOP = syscall.Errno(0x48) - ENAMETOOLONG = syscall.Errno(0x24) - ENAVAIL = syscall.Errno(0x77) - ENETDOWN = syscall.Errno(0x64) - ENETRESET = syscall.Errno(0x66) - ENETUNREACH = syscall.Errno(0x65) - ENOANO = syscall.Errno(0x37) - ENOBUFS = syscall.Errno(0x69) - ENOCSI = syscall.Errno(0x32) - ENODATA = syscall.Errno(0x3d) - ENOKEY = syscall.Errno(0x7e) - ENOLCK = syscall.Errno(0x25) - ENOLINK = syscall.Errno(0x43) - ENOMEDIUM = syscall.Errno(0x7b) - ENOMSG = syscall.Errno(0x2a) - ENONET = syscall.Errno(0x40) - ENOPKG = syscall.Errno(0x41) - ENOPROTOOPT = syscall.Errno(0x5c) - ENOSR = syscall.Errno(0x3f) - ENOSTR = syscall.Errno(0x3c) - ENOSYS = syscall.Errno(0x26) - ENOTCONN = syscall.Errno(0x6b) - ENOTEMPTY = syscall.Errno(0x27) - ENOTNAM = syscall.Errno(0x76) - ENOTRECOVERABLE = syscall.Errno(0x83) - ENOTSOCK = syscall.Errno(0x58) - ENOTSUP = syscall.Errno(0x5f) - ENOTUNIQ = syscall.Errno(0x4c) - EOPNOTSUPP = syscall.Errno(0x5f) - EOVERFLOW = syscall.Errno(0x4b) - EOWNERDEAD = syscall.Errno(0x82) - EPFNOSUPPORT = syscall.Errno(0x60) - EPROTO = syscall.Errno(0x47) - EPROTONOSUPPORT = syscall.Errno(0x5d) - EPROTOTYPE = syscall.Errno(0x5b) - EREMCHG = syscall.Errno(0x4e) - EREMOTE = syscall.Errno(0x42) - EREMOTEIO = syscall.Errno(0x79) - ERESTART = syscall.Errno(0x55) - ERFKILL = syscall.Errno(0x84) - ESHUTDOWN = syscall.Errno(0x6c) - ESOCKTNOSUPPORT = syscall.Errno(0x5e) - ESRMNT = syscall.Errno(0x45) - ESTALE = syscall.Errno(0x74) - ESTRPIPE = syscall.Errno(0x56) - ETIME = syscall.Errno(0x3e) - ETIMEDOUT = syscall.Errno(0x6e) - ETOOMANYREFS = syscall.Errno(0x6d) - EUCLEAN = syscall.Errno(0x75) - EUNATCH = syscall.Errno(0x31) - EUSERS = syscall.Errno(0x57) - EXFULL = syscall.Errno(0x36) -) - -// Signals -const ( - SIGBUS = syscall.Signal(0x7) - SIGCHLD = syscall.Signal(0x11) - SIGCLD = syscall.Signal(0x11) - SIGCONT = syscall.Signal(0x12) - SIGIO = syscall.Signal(0x1d) - SIGPOLL = syscall.Signal(0x1d) - SIGPROF = syscall.Signal(0x1b) - SIGPWR = syscall.Signal(0x1e) - SIGSTKFLT = syscall.Signal(0x10) - SIGSTOP = syscall.Signal(0x13) - SIGSYS = syscall.Signal(0x1f) - SIGTSTP = syscall.Signal(0x14) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x17) - SIGUSR1 = syscall.Signal(0xa) - SIGUSR2 = syscall.Signal(0xc) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "no such device or address"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EAGAIN", "resource temporarily unavailable"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device or resource busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "invalid cross-device link"}, - {19, "ENODEV", "no such device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "numerical result out of range"}, - {35, "EDEADLK", "resource deadlock avoided"}, - {36, "ENAMETOOLONG", "file name too long"}, - {37, "ENOLCK", "no locks available"}, - {38, "ENOSYS", "function not implemented"}, - {39, "ENOTEMPTY", "directory not empty"}, - {40, "ELOOP", "too many levels of symbolic links"}, - {42, "ENOMSG", "no message of desired type"}, - {43, "EIDRM", "identifier removed"}, - {44, "ECHRNG", "channel number out of range"}, - {45, "EL2NSYNC", "level 2 not synchronized"}, - {46, "EL3HLT", "level 3 halted"}, - {47, "EL3RST", "level 3 reset"}, - {48, "ELNRNG", "link number out of range"}, - {49, "EUNATCH", "protocol driver not attached"}, - {50, "ENOCSI", "no CSI structure available"}, - {51, "EL2HLT", "level 2 halted"}, - {52, "EBADE", "invalid exchange"}, - {53, "EBADR", "invalid request descriptor"}, - {54, "EXFULL", "exchange full"}, - {55, "ENOANO", "no anode"}, - {56, "EBADRQC", "invalid request code"}, - {57, "EBADSLT", "invalid slot"}, - {58, "EDEADLOCK", "file locking deadlock error"}, - {59, "EBFONT", "bad font file format"}, - {60, "ENOSTR", "device not a stream"}, - {61, "ENODATA", "no data available"}, - {62, "ETIME", "timer expired"}, - {63, "ENOSR", "out of streams resources"}, - {64, "ENONET", "machine is not on the network"}, - {65, "ENOPKG", "package not installed"}, - {66, "EREMOTE", "object is remote"}, - {67, "ENOLINK", "link has been severed"}, - {68, "EADV", "advertise error"}, - {69, "ESRMNT", "srmount error"}, - {70, "ECOMM", "communication error on send"}, - {71, "EPROTO", "protocol error"}, - {72, "EMULTIHOP", "multihop attempted"}, - {73, "EDOTDOT", "RFS specific error"}, - {74, "EBADMSG", "bad message"}, - {75, "EOVERFLOW", "value too large for defined data type"}, - {76, "ENOTUNIQ", "name not unique on network"}, - {77, "EBADFD", "file descriptor in bad state"}, - {78, "EREMCHG", "remote address changed"}, - {79, "ELIBACC", "can not access a needed shared library"}, - {80, "ELIBBAD", "accessing a corrupted shared library"}, - {81, "ELIBSCN", ".lib section in a.out corrupted"}, - {82, "ELIBMAX", "attempting to link in too many shared libraries"}, - {83, "ELIBEXEC", "cannot exec a shared library directly"}, - {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, - {85, "ERESTART", "interrupted system call should be restarted"}, - {86, "ESTRPIPE", "streams pipe error"}, - {87, "EUSERS", "too many users"}, - {88, "ENOTSOCK", "socket operation on non-socket"}, - {89, "EDESTADDRREQ", "destination address required"}, - {90, "EMSGSIZE", "message too long"}, - {91, "EPROTOTYPE", "protocol wrong type for socket"}, - {92, "ENOPROTOOPT", "protocol not available"}, - {93, "EPROTONOSUPPORT", "protocol not supported"}, - {94, "ESOCKTNOSUPPORT", "socket type not supported"}, - {95, "ENOTSUP", "operation not supported"}, - {96, "EPFNOSUPPORT", "protocol family not supported"}, - {97, "EAFNOSUPPORT", "address family not supported by protocol"}, - {98, "EADDRINUSE", "address already in use"}, - {99, "EADDRNOTAVAIL", "cannot assign requested address"}, - {100, "ENETDOWN", "network is down"}, - {101, "ENETUNREACH", "network is unreachable"}, - {102, "ENETRESET", "network dropped connection on reset"}, - {103, "ECONNABORTED", "software caused connection abort"}, - {104, "ECONNRESET", "connection reset by peer"}, - {105, "ENOBUFS", "no buffer space available"}, - {106, "EISCONN", "transport endpoint is already connected"}, - {107, "ENOTCONN", "transport endpoint is not connected"}, - {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, - {109, "ETOOMANYREFS", "too many references: cannot splice"}, - {110, "ETIMEDOUT", "connection timed out"}, - {111, "ECONNREFUSED", "connection refused"}, - {112, "EHOSTDOWN", "host is down"}, - {113, "EHOSTUNREACH", "no route to host"}, - {114, "EALREADY", "operation already in progress"}, - {115, "EINPROGRESS", "operation now in progress"}, - {116, "ESTALE", "stale file handle"}, - {117, "EUCLEAN", "structure needs cleaning"}, - {118, "ENOTNAM", "not a XENIX named type file"}, - {119, "ENAVAIL", "no XENIX semaphores available"}, - {120, "EISNAM", "is a named type file"}, - {121, "EREMOTEIO", "remote I/O error"}, - {122, "EDQUOT", "disk quota exceeded"}, - {123, "ENOMEDIUM", "no medium found"}, - {124, "EMEDIUMTYPE", "wrong medium type"}, - {125, "ECANCELED", "operation canceled"}, - {126, "ENOKEY", "required key not available"}, - {127, "EKEYEXPIRED", "key has expired"}, - {128, "EKEYREVOKED", "key has been revoked"}, - {129, "EKEYREJECTED", "key was rejected by service"}, - {130, "EOWNERDEAD", "owner died"}, - {131, "ENOTRECOVERABLE", "state not recoverable"}, - {132, "ERFKILL", "operation not possible due to RF-kill"}, - {133, "EHWPOISON", "memory page has hardware error"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/breakpoint trap"}, - {6, "SIGABRT", "aborted"}, - {7, "SIGBUS", "bus error"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGUSR1", "user defined signal 1"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGUSR2", "user defined signal 2"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGSTKFLT", "stack fault"}, - {17, "SIGCHLD", "child exited"}, - {18, "SIGCONT", "continued"}, - {19, "SIGSTOP", "stopped (signal)"}, - {20, "SIGTSTP", "stopped"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGURG", "urgent I/O condition"}, - {24, "SIGXCPU", "CPU time limit exceeded"}, - {25, "SIGXFSZ", "file size limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window changed"}, - {29, "SIGIO", "I/O possible"}, - {30, "SIGPWR", "power failure"}, - {31, "SIGSYS", "bad system call"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go deleted file mode 100644 index 5a873cd..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ /dev/null @@ -1,891 +0,0 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/ppc64le/include -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build ppc64le && linux -// +build ppc64le,linux - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/ppc64le/include _const.go - -package unix - -import "syscall" - -const ( - B1000000 = 0x17 - B115200 = 0x11 - B1152000 = 0x18 - B1500000 = 0x19 - B2000000 = 0x1a - B230400 = 0x12 - B2500000 = 0x1b - B3000000 = 0x1c - B3500000 = 0x1d - B4000000 = 0x1e - B460800 = 0x13 - B500000 = 0x14 - B57600 = 0x10 - B576000 = 0x15 - B921600 = 0x16 - BLKBSZGET = 0x40081270 - BLKBSZSET = 0x80081271 - BLKFLSBUF = 0x20001261 - BLKFRAGET = 0x20001265 - BLKFRASET = 0x20001264 - BLKGETSIZE = 0x20001260 - BLKGETSIZE64 = 0x40081272 - BLKPBSZGET = 0x2000127b - BLKRAGET = 0x20001263 - BLKRASET = 0x20001262 - BLKROGET = 0x2000125e - BLKROSET = 0x2000125d - BLKRRPART = 0x2000125f - BLKSECTGET = 0x20001267 - BLKSECTSET = 0x20001266 - BLKSSZGET = 0x20001268 - BOTHER = 0x1f - BS1 = 0x8000 - BSDLY = 0x8000 - CBAUD = 0xff - CBAUDEX = 0x0 - CIBAUD = 0xff0000 - CLOCAL = 0x8000 - CR1 = 0x1000 - CR2 = 0x2000 - CR3 = 0x3000 - CRDLY = 0x3000 - CREAD = 0x800 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTOPB = 0x400 - ECCGETLAYOUT = 0x41484d11 - ECCGETSTATS = 0x40104d12 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EFD_CLOEXEC = 0x80000 - EFD_NONBLOCK = 0x800 - EPOLL_CLOEXEC = 0x80000 - EXTPROC = 0x10000000 - FF1 = 0x4000 - FFDLY = 0x4000 - FICLONE = 0x80049409 - FICLONERANGE = 0x8020940d - FLUSHO = 0x800000 - FS_IOC_ENABLE_VERITY = 0x80806685 - FS_IOC_GETFLAGS = 0x40086601 - FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b - FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 - FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 - FS_IOC_SETFLAGS = 0x80086602 - FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 - F_GETLK = 0x5 - F_GETLK64 = 0xc - F_GETOWN = 0x9 - F_RDLCK = 0x0 - F_SETLK = 0x6 - F_SETLK64 = 0xd - F_SETLKW = 0x7 - F_SETLKW64 = 0xe - F_SETOWN = 0x8 - F_UNLCK = 0x2 - F_WRLCK = 0x1 - HIDIOCGRAWINFO = 0x40084803 - HIDIOCGRDESC = 0x50044802 - HIDIOCGRDESCSIZE = 0x40044801 - HUPCL = 0x4000 - ICANON = 0x100 - IEXTEN = 0x400 - IN_CLOEXEC = 0x80000 - IN_NONBLOCK = 0x800 - IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 - ISIG = 0x80 - IUCLC = 0x1000 - IXOFF = 0x400 - IXON = 0x200 - MAP_ANON = 0x20 - MAP_ANONYMOUS = 0x20 - MAP_DENYWRITE = 0x800 - MAP_EXECUTABLE = 0x1000 - MAP_GROWSDOWN = 0x100 - MAP_HUGETLB = 0x40000 - MAP_LOCKED = 0x80 - MAP_NONBLOCK = 0x10000 - MAP_NORESERVE = 0x40 - MAP_POPULATE = 0x8000 - MAP_STACK = 0x20000 - MAP_SYNC = 0x80000 - MCL_CURRENT = 0x2000 - MCL_FUTURE = 0x4000 - MCL_ONFAULT = 0x8000 - MEMERASE = 0x80084d02 - MEMERASE64 = 0x80104d14 - MEMGETBADBLOCK = 0x80084d0b - MEMGETINFO = 0x40204d01 - MEMGETOOBSEL = 0x40c84d0a - MEMGETREGIONCOUNT = 0x40044d07 - MEMISLOCKED = 0x40084d17 - MEMLOCK = 0x80084d05 - MEMREADOOB = 0xc0104d04 - MEMSETBADBLOCK = 0x80084d0c - MEMUNLOCK = 0x80084d06 - MEMWRITEOOB = 0xc0104d03 - MTDFILEMODE = 0x20004d13 - NFDBITS = 0x40 - NL2 = 0x200 - NL3 = 0x300 - NLDLY = 0x300 - NOFLSH = 0x80000000 - NS_GET_NSTYPE = 0x2000b703 - NS_GET_OWNER_UID = 0x2000b704 - NS_GET_PARENT = 0x2000b702 - NS_GET_USERNS = 0x2000b701 - OLCUC = 0x4 - ONLCR = 0x2 - OTPERASE = 0x800c4d19 - OTPGETREGIONCOUNT = 0x80044d0e - OTPGETREGIONINFO = 0x800c4d0f - OTPLOCK = 0x400c4d10 - OTPSELECT = 0x40044d0d - O_APPEND = 0x400 - O_ASYNC = 0x2000 - O_CLOEXEC = 0x80000 - O_CREAT = 0x40 - O_DIRECT = 0x20000 - O_DIRECTORY = 0x4000 - O_DSYNC = 0x1000 - O_EXCL = 0x80 - O_FSYNC = 0x101000 - O_LARGEFILE = 0x0 - O_NDELAY = 0x800 - O_NOATIME = 0x40000 - O_NOCTTY = 0x100 - O_NOFOLLOW = 0x8000 - O_NONBLOCK = 0x800 - O_PATH = 0x200000 - O_RSYNC = 0x101000 - O_SYNC = 0x101000 - O_TMPFILE = 0x404000 - O_TRUNC = 0x200 - PARENB = 0x1000 - PARODD = 0x2000 - PENDIN = 0x20000000 - PERF_EVENT_IOC_DISABLE = 0x20002401 - PERF_EVENT_IOC_ENABLE = 0x20002400 - PERF_EVENT_IOC_ID = 0x40082407 - PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b - PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 - PERF_EVENT_IOC_PERIOD = 0x80082404 - PERF_EVENT_IOC_QUERY_BPF = 0xc008240a - PERF_EVENT_IOC_REFRESH = 0x20002402 - PERF_EVENT_IOC_RESET = 0x20002403 - PERF_EVENT_IOC_SET_BPF = 0x80042408 - PERF_EVENT_IOC_SET_FILTER = 0x80082406 - PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 - PPPIOCATTACH = 0x8004743d - PPPIOCATTCHAN = 0x80047438 - PPPIOCBRIDGECHAN = 0x80047435 - PPPIOCCONNECT = 0x8004743a - PPPIOCDETACH = 0x8004743c - PPPIOCDISCONN = 0x20007439 - PPPIOCGASYNCMAP = 0x40047458 - PPPIOCGCHAN = 0x40047437 - PPPIOCGDEBUG = 0x40047441 - PPPIOCGFLAGS = 0x4004745a - PPPIOCGIDLE = 0x4010743f - PPPIOCGIDLE32 = 0x4008743f - PPPIOCGIDLE64 = 0x4010743f - PPPIOCGL2TPSTATS = 0x40487436 - PPPIOCGMRU = 0x40047453 - PPPIOCGRASYNCMAP = 0x40047455 - PPPIOCGUNIT = 0x40047456 - PPPIOCGXASYNCMAP = 0x40207450 - PPPIOCSACTIVE = 0x80107446 - PPPIOCSASYNCMAP = 0x80047457 - PPPIOCSCOMPRESS = 0x8010744d - PPPIOCSDEBUG = 0x80047440 - PPPIOCSFLAGS = 0x80047459 - PPPIOCSMAXCID = 0x80047451 - PPPIOCSMRRU = 0x8004743b - PPPIOCSMRU = 0x80047452 - PPPIOCSNPMODE = 0x8008744b - PPPIOCSPASS = 0x80107447 - PPPIOCSRASYNCMAP = 0x80047454 - PPPIOCSXASYNCMAP = 0x8020744f - PPPIOCUNBRIDGECHAN = 0x20007434 - PPPIOCXFERUNIT = 0x2000744e - PROT_SAO = 0x10 - PR_SET_PTRACER_ANY = 0xffffffffffffffff - PTRACE_GETEVRREGS = 0x14 - PTRACE_GETFPREGS = 0xe - PTRACE_GETREGS64 = 0x16 - PTRACE_GETVRREGS = 0x12 - PTRACE_GETVSRREGS = 0x1b - PTRACE_GET_DEBUGREG = 0x19 - PTRACE_SETEVRREGS = 0x15 - PTRACE_SETFPREGS = 0xf - PTRACE_SETREGS64 = 0x17 - PTRACE_SETVRREGS = 0x13 - PTRACE_SETVSRREGS = 0x1c - PTRACE_SET_DEBUGREG = 0x1a - PTRACE_SINGLEBLOCK = 0x100 - PTRACE_SYSEMU = 0x1d - PTRACE_SYSEMU_SINGLESTEP = 0x1e - PT_CCR = 0x26 - PT_CTR = 0x23 - PT_DAR = 0x29 - PT_DSCR = 0x2c - PT_DSISR = 0x2a - PT_FPR0 = 0x30 - PT_FPSCR = 0x50 - PT_LNK = 0x24 - PT_MSR = 0x21 - PT_NIP = 0x20 - PT_ORIG_R3 = 0x22 - PT_R0 = 0x0 - PT_R1 = 0x1 - PT_R10 = 0xa - PT_R11 = 0xb - PT_R12 = 0xc - PT_R13 = 0xd - PT_R14 = 0xe - PT_R15 = 0xf - PT_R16 = 0x10 - PT_R17 = 0x11 - PT_R18 = 0x12 - PT_R19 = 0x13 - PT_R2 = 0x2 - PT_R20 = 0x14 - PT_R21 = 0x15 - PT_R22 = 0x16 - PT_R23 = 0x17 - PT_R24 = 0x18 - PT_R25 = 0x19 - PT_R26 = 0x1a - PT_R27 = 0x1b - PT_R28 = 0x1c - PT_R29 = 0x1d - PT_R3 = 0x3 - PT_R30 = 0x1e - PT_R31 = 0x1f - PT_R4 = 0x4 - PT_R5 = 0x5 - PT_R6 = 0x6 - PT_R7 = 0x7 - PT_R8 = 0x8 - PT_R9 = 0x9 - PT_REGS_COUNT = 0x2c - PT_RESULT = 0x2b - PT_SOFTE = 0x27 - PT_TRAP = 0x28 - PT_VR0 = 0x52 - PT_VRSAVE = 0x94 - PT_VSCR = 0x93 - PT_VSR0 = 0x96 - PT_VSR31 = 0xd4 - PT_XER = 0x25 - RLIMIT_AS = 0x9 - RLIMIT_MEMLOCK = 0x8 - RLIMIT_NOFILE = 0x7 - RLIMIT_NPROC = 0x6 - RLIMIT_RSS = 0x5 - RNDADDENTROPY = 0x80085203 - RNDADDTOENTCNT = 0x80045201 - RNDCLEARPOOL = 0x20005206 - RNDGETENTCNT = 0x40045200 - RNDGETPOOL = 0x40085202 - RNDRESEEDCRNG = 0x20005207 - RNDZAPENTCNT = 0x20005204 - RTC_AIE_OFF = 0x20007002 - RTC_AIE_ON = 0x20007001 - RTC_ALM_READ = 0x40247008 - RTC_ALM_SET = 0x80247007 - RTC_EPOCH_READ = 0x4008700d - RTC_EPOCH_SET = 0x8008700e - RTC_IRQP_READ = 0x4008700b - RTC_IRQP_SET = 0x8008700c - RTC_PARAM_GET = 0x80187013 - RTC_PARAM_SET = 0x80187014 - RTC_PIE_OFF = 0x20007006 - RTC_PIE_ON = 0x20007005 - RTC_PLL_GET = 0x40207011 - RTC_PLL_SET = 0x80207012 - RTC_RD_TIME = 0x40247009 - RTC_SET_TIME = 0x8024700a - RTC_UIE_OFF = 0x20007004 - RTC_UIE_ON = 0x20007003 - RTC_VL_CLR = 0x20007014 - RTC_VL_READ = 0x40047013 - RTC_WIE_OFF = 0x20007010 - RTC_WIE_ON = 0x2000700f - RTC_WKALM_RD = 0x40287010 - RTC_WKALM_SET = 0x8028700f - SCM_TIMESTAMPING = 0x25 - SCM_TIMESTAMPING_OPT_STATS = 0x36 - SCM_TIMESTAMPING_PKTINFO = 0x3a - SCM_TIMESTAMPNS = 0x23 - SCM_TXTIME = 0x3d - SCM_WIFI_STATUS = 0x29 - SFD_CLOEXEC = 0x80000 - SFD_NONBLOCK = 0x800 - SIOCATMARK = 0x8905 - SIOCGPGRP = 0x8904 - SIOCGSTAMPNS_NEW = 0x40108907 - SIOCGSTAMP_NEW = 0x40108906 - SIOCINQ = 0x4004667f - SIOCOUTQ = 0x40047473 - SIOCSPGRP = 0x8902 - SOCK_CLOEXEC = 0x80000 - SOCK_DGRAM = 0x2 - SOCK_NONBLOCK = 0x800 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0x1 - SO_ACCEPTCONN = 0x1e - SO_ATTACH_BPF = 0x32 - SO_ATTACH_REUSEPORT_CBPF = 0x33 - SO_ATTACH_REUSEPORT_EBPF = 0x34 - SO_BINDTODEVICE = 0x19 - SO_BINDTOIFINDEX = 0x3e - SO_BPF_EXTENSIONS = 0x30 - SO_BROADCAST = 0x6 - SO_BSDCOMPAT = 0xe - SO_BUF_LOCK = 0x48 - SO_BUSY_POLL = 0x2e - SO_BUSY_POLL_BUDGET = 0x46 - SO_CNX_ADVICE = 0x35 - SO_COOKIE = 0x39 - SO_DETACH_REUSEPORT_BPF = 0x44 - SO_DOMAIN = 0x27 - SO_DONTROUTE = 0x5 - SO_ERROR = 0x4 - SO_INCOMING_CPU = 0x31 - SO_INCOMING_NAPI_ID = 0x38 - SO_KEEPALIVE = 0x9 - SO_LINGER = 0xd - SO_LOCK_FILTER = 0x2c - SO_MARK = 0x24 - SO_MAX_PACING_RATE = 0x2f - SO_MEMINFO = 0x37 - SO_NETNS_COOKIE = 0x47 - SO_NOFCS = 0x2b - SO_OOBINLINE = 0xa - SO_PASSCRED = 0x14 - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x15 - SO_PEERGROUPS = 0x3b - SO_PEERSEC = 0x1f - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x26 - SO_RCVBUF = 0x8 - SO_RCVBUFFORCE = 0x21 - SO_RCVLOWAT = 0x10 - SO_RCVMARK = 0x4b - SO_RCVTIMEO = 0x12 - SO_RCVTIMEO_NEW = 0x42 - SO_RCVTIMEO_OLD = 0x12 - SO_RESERVE_MEM = 0x49 - SO_REUSEADDR = 0x2 - SO_REUSEPORT = 0xf - SO_RXQ_OVFL = 0x28 - SO_SECURITY_AUTHENTICATION = 0x16 - SO_SECURITY_ENCRYPTION_NETWORK = 0x18 - SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 - SO_SELECT_ERR_QUEUE = 0x2d - SO_SNDBUF = 0x7 - SO_SNDBUFFORCE = 0x20 - SO_SNDLOWAT = 0x11 - SO_SNDTIMEO = 0x13 - SO_SNDTIMEO_NEW = 0x43 - SO_SNDTIMEO_OLD = 0x13 - SO_TIMESTAMPING = 0x25 - SO_TIMESTAMPING_NEW = 0x41 - SO_TIMESTAMPING_OLD = 0x25 - SO_TIMESTAMPNS = 0x23 - SO_TIMESTAMPNS_NEW = 0x40 - SO_TIMESTAMPNS_OLD = 0x23 - SO_TIMESTAMP_NEW = 0x3f - SO_TXREHASH = 0x4a - SO_TXTIME = 0x3d - SO_TYPE = 0x3 - SO_WIFI_STATUS = 0x29 - SO_ZEROCOPY = 0x3c - TAB1 = 0x400 - TAB2 = 0x800 - TAB3 = 0xc00 - TABDLY = 0xc00 - TCFLSH = 0x2000741f - TCGETA = 0x40147417 - TCGETS = 0x402c7413 - TCSAFLUSH = 0x2 - TCSBRK = 0x2000741d - TCSBRKP = 0x5425 - TCSETA = 0x80147418 - TCSETAF = 0x8014741c - TCSETAW = 0x80147419 - TCSETS = 0x802c7414 - TCSETSF = 0x802c7416 - TCSETSW = 0x802c7415 - TCXONC = 0x2000741e - TFD_CLOEXEC = 0x80000 - TFD_NONBLOCK = 0x800 - TIOCCBRK = 0x5428 - TIOCCONS = 0x541d - TIOCEXCL = 0x540c - TIOCGDEV = 0x40045432 - TIOCGETC = 0x40067412 - TIOCGETD = 0x5424 - TIOCGETP = 0x40067408 - TIOCGEXCL = 0x40045440 - TIOCGICOUNT = 0x545d - TIOCGISO7816 = 0x40285442 - TIOCGLCKTRMIOS = 0x5456 - TIOCGLTC = 0x40067474 - TIOCGPGRP = 0x40047477 - TIOCGPKT = 0x40045438 - TIOCGPTLCK = 0x40045439 - TIOCGPTN = 0x40045430 - TIOCGPTPEER = 0x20005441 - TIOCGRS485 = 0x542e - TIOCGSERIAL = 0x541e - TIOCGSID = 0x5429 - TIOCGSOFTCAR = 0x5419 - TIOCGWINSZ = 0x40087468 - TIOCINQ = 0x4004667f - TIOCLINUX = 0x541c - TIOCMBIC = 0x5417 - TIOCMBIS = 0x5416 - TIOCMGET = 0x5415 - TIOCMIWAIT = 0x545c - TIOCMSET = 0x5418 - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_LOOP = 0x8000 - TIOCM_OUT1 = 0x2000 - TIOCM_OUT2 = 0x4000 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x5422 - TIOCNXCL = 0x540d - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x5420 - TIOCSBRK = 0x5427 - TIOCSCTTY = 0x540e - TIOCSERCONFIG = 0x5453 - TIOCSERGETLSR = 0x5459 - TIOCSERGETMULTI = 0x545a - TIOCSERGSTRUCT = 0x5458 - TIOCSERGWILD = 0x5454 - TIOCSERSETMULTI = 0x545b - TIOCSERSWILD = 0x5455 - TIOCSER_TEMT = 0x1 - TIOCSETC = 0x80067411 - TIOCSETD = 0x5423 - TIOCSETN = 0x8006740a - TIOCSETP = 0x80067409 - TIOCSIG = 0x80045436 - TIOCSISO7816 = 0xc0285443 - TIOCSLCKTRMIOS = 0x5457 - TIOCSLTC = 0x80067475 - TIOCSPGRP = 0x80047476 - TIOCSPTLCK = 0x80045431 - TIOCSRS485 = 0x542f - TIOCSSERIAL = 0x541f - TIOCSSOFTCAR = 0x541a - TIOCSTART = 0x2000746e - TIOCSTI = 0x5412 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCVHANGUP = 0x5437 - TOSTOP = 0x400000 - TUNATTACHFILTER = 0x801054d5 - TUNDETACHFILTER = 0x801054d6 - TUNGETDEVNETNS = 0x200054e3 - TUNGETFEATURES = 0x400454cf - TUNGETFILTER = 0x401054db - TUNGETIFF = 0x400454d2 - TUNGETSNDBUF = 0x400454d3 - TUNGETVNETBE = 0x400454df - TUNGETVNETHDRSZ = 0x400454d7 - TUNGETVNETLE = 0x400454dd - TUNSETCARRIER = 0x800454e2 - TUNSETDEBUG = 0x800454c9 - TUNSETFILTEREBPF = 0x400454e1 - TUNSETGROUP = 0x800454ce - TUNSETIFF = 0x800454ca - TUNSETIFINDEX = 0x800454da - TUNSETLINK = 0x800454cd - TUNSETNOCSUM = 0x800454c8 - TUNSETOFFLOAD = 0x800454d0 - TUNSETOWNER = 0x800454cc - TUNSETPERSIST = 0x800454cb - TUNSETQUEUE = 0x800454d9 - TUNSETSNDBUF = 0x800454d4 - TUNSETSTEERINGEBPF = 0x400454e0 - TUNSETTXFILTER = 0x800454d1 - TUNSETVNETBE = 0x800454de - TUNSETVNETHDRSZ = 0x800454d8 - TUNSETVNETLE = 0x800454dc - UBI_IOCATT = 0x80186f40 - UBI_IOCDET = 0x80046f41 - UBI_IOCEBCH = 0x80044f02 - UBI_IOCEBER = 0x80044f01 - UBI_IOCEBISMAP = 0x40044f05 - UBI_IOCEBMAP = 0x80084f03 - UBI_IOCEBUNMAP = 0x80044f04 - UBI_IOCMKVOL = 0x80986f00 - UBI_IOCRMVOL = 0x80046f01 - UBI_IOCRNVOL = 0x91106f03 - UBI_IOCRPEB = 0x80046f04 - UBI_IOCRSVOL = 0x800c6f02 - UBI_IOCSETVOLPROP = 0x80104f06 - UBI_IOCSPEB = 0x80046f05 - UBI_IOCVOLCRBLK = 0x80804f07 - UBI_IOCVOLRMBLK = 0x20004f08 - UBI_IOCVOLUP = 0x80084f00 - VDISCARD = 0x10 - VEOF = 0x4 - VEOL = 0x6 - VEOL2 = 0x8 - VMIN = 0x5 - VREPRINT = 0xb - VSTART = 0xd - VSTOP = 0xe - VSUSP = 0xc - VSWTC = 0x9 - VT1 = 0x10000 - VTDLY = 0x10000 - VTIME = 0x7 - VWERASE = 0xa - WDIOC_GETBOOTSTATUS = 0x40045702 - WDIOC_GETPRETIMEOUT = 0x40045709 - WDIOC_GETSTATUS = 0x40045701 - WDIOC_GETSUPPORT = 0x40285700 - WDIOC_GETTEMP = 0x40045703 - WDIOC_GETTIMELEFT = 0x4004570a - WDIOC_GETTIMEOUT = 0x40045707 - WDIOC_KEEPALIVE = 0x40045705 - WDIOC_SETOPTIONS = 0x40045704 - WORDSIZE = 0x40 - XCASE = 0x4000 - XTABS = 0xc00 - _HIDIOCGRAWNAME = 0x40804804 - _HIDIOCGRAWPHYS = 0x40404805 - _HIDIOCGRAWUNIQ = 0x40404808 -) - -// Errors -const ( - EADDRINUSE = syscall.Errno(0x62) - EADDRNOTAVAIL = syscall.Errno(0x63) - EADV = syscall.Errno(0x44) - EAFNOSUPPORT = syscall.Errno(0x61) - EALREADY = syscall.Errno(0x72) - EBADE = syscall.Errno(0x34) - EBADFD = syscall.Errno(0x4d) - EBADMSG = syscall.Errno(0x4a) - EBADR = syscall.Errno(0x35) - EBADRQC = syscall.Errno(0x38) - EBADSLT = syscall.Errno(0x39) - EBFONT = syscall.Errno(0x3b) - ECANCELED = syscall.Errno(0x7d) - ECHRNG = syscall.Errno(0x2c) - ECOMM = syscall.Errno(0x46) - ECONNABORTED = syscall.Errno(0x67) - ECONNREFUSED = syscall.Errno(0x6f) - ECONNRESET = syscall.Errno(0x68) - EDEADLK = syscall.Errno(0x23) - EDEADLOCK = syscall.Errno(0x3a) - EDESTADDRREQ = syscall.Errno(0x59) - EDOTDOT = syscall.Errno(0x49) - EDQUOT = syscall.Errno(0x7a) - EHOSTDOWN = syscall.Errno(0x70) - EHOSTUNREACH = syscall.Errno(0x71) - EHWPOISON = syscall.Errno(0x85) - EIDRM = syscall.Errno(0x2b) - EILSEQ = syscall.Errno(0x54) - EINPROGRESS = syscall.Errno(0x73) - EISCONN = syscall.Errno(0x6a) - EISNAM = syscall.Errno(0x78) - EKEYEXPIRED = syscall.Errno(0x7f) - EKEYREJECTED = syscall.Errno(0x81) - EKEYREVOKED = syscall.Errno(0x80) - EL2HLT = syscall.Errno(0x33) - EL2NSYNC = syscall.Errno(0x2d) - EL3HLT = syscall.Errno(0x2e) - EL3RST = syscall.Errno(0x2f) - ELIBACC = syscall.Errno(0x4f) - ELIBBAD = syscall.Errno(0x50) - ELIBEXEC = syscall.Errno(0x53) - ELIBMAX = syscall.Errno(0x52) - ELIBSCN = syscall.Errno(0x51) - ELNRNG = syscall.Errno(0x30) - ELOOP = syscall.Errno(0x28) - EMEDIUMTYPE = syscall.Errno(0x7c) - EMSGSIZE = syscall.Errno(0x5a) - EMULTIHOP = syscall.Errno(0x48) - ENAMETOOLONG = syscall.Errno(0x24) - ENAVAIL = syscall.Errno(0x77) - ENETDOWN = syscall.Errno(0x64) - ENETRESET = syscall.Errno(0x66) - ENETUNREACH = syscall.Errno(0x65) - ENOANO = syscall.Errno(0x37) - ENOBUFS = syscall.Errno(0x69) - ENOCSI = syscall.Errno(0x32) - ENODATA = syscall.Errno(0x3d) - ENOKEY = syscall.Errno(0x7e) - ENOLCK = syscall.Errno(0x25) - ENOLINK = syscall.Errno(0x43) - ENOMEDIUM = syscall.Errno(0x7b) - ENOMSG = syscall.Errno(0x2a) - ENONET = syscall.Errno(0x40) - ENOPKG = syscall.Errno(0x41) - ENOPROTOOPT = syscall.Errno(0x5c) - ENOSR = syscall.Errno(0x3f) - ENOSTR = syscall.Errno(0x3c) - ENOSYS = syscall.Errno(0x26) - ENOTCONN = syscall.Errno(0x6b) - ENOTEMPTY = syscall.Errno(0x27) - ENOTNAM = syscall.Errno(0x76) - ENOTRECOVERABLE = syscall.Errno(0x83) - ENOTSOCK = syscall.Errno(0x58) - ENOTSUP = syscall.Errno(0x5f) - ENOTUNIQ = syscall.Errno(0x4c) - EOPNOTSUPP = syscall.Errno(0x5f) - EOVERFLOW = syscall.Errno(0x4b) - EOWNERDEAD = syscall.Errno(0x82) - EPFNOSUPPORT = syscall.Errno(0x60) - EPROTO = syscall.Errno(0x47) - EPROTONOSUPPORT = syscall.Errno(0x5d) - EPROTOTYPE = syscall.Errno(0x5b) - EREMCHG = syscall.Errno(0x4e) - EREMOTE = syscall.Errno(0x42) - EREMOTEIO = syscall.Errno(0x79) - ERESTART = syscall.Errno(0x55) - ERFKILL = syscall.Errno(0x84) - ESHUTDOWN = syscall.Errno(0x6c) - ESOCKTNOSUPPORT = syscall.Errno(0x5e) - ESRMNT = syscall.Errno(0x45) - ESTALE = syscall.Errno(0x74) - ESTRPIPE = syscall.Errno(0x56) - ETIME = syscall.Errno(0x3e) - ETIMEDOUT = syscall.Errno(0x6e) - ETOOMANYREFS = syscall.Errno(0x6d) - EUCLEAN = syscall.Errno(0x75) - EUNATCH = syscall.Errno(0x31) - EUSERS = syscall.Errno(0x57) - EXFULL = syscall.Errno(0x36) -) - -// Signals -const ( - SIGBUS = syscall.Signal(0x7) - SIGCHLD = syscall.Signal(0x11) - SIGCLD = syscall.Signal(0x11) - SIGCONT = syscall.Signal(0x12) - SIGIO = syscall.Signal(0x1d) - SIGPOLL = syscall.Signal(0x1d) - SIGPROF = syscall.Signal(0x1b) - SIGPWR = syscall.Signal(0x1e) - SIGSTKFLT = syscall.Signal(0x10) - SIGSTOP = syscall.Signal(0x13) - SIGSYS = syscall.Signal(0x1f) - SIGTSTP = syscall.Signal(0x14) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x17) - SIGUSR1 = syscall.Signal(0xa) - SIGUSR2 = syscall.Signal(0xc) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "no such device or address"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EAGAIN", "resource temporarily unavailable"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device or resource busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "invalid cross-device link"}, - {19, "ENODEV", "no such device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "numerical result out of range"}, - {35, "EDEADLK", "resource deadlock avoided"}, - {36, "ENAMETOOLONG", "file name too long"}, - {37, "ENOLCK", "no locks available"}, - {38, "ENOSYS", "function not implemented"}, - {39, "ENOTEMPTY", "directory not empty"}, - {40, "ELOOP", "too many levels of symbolic links"}, - {42, "ENOMSG", "no message of desired type"}, - {43, "EIDRM", "identifier removed"}, - {44, "ECHRNG", "channel number out of range"}, - {45, "EL2NSYNC", "level 2 not synchronized"}, - {46, "EL3HLT", "level 3 halted"}, - {47, "EL3RST", "level 3 reset"}, - {48, "ELNRNG", "link number out of range"}, - {49, "EUNATCH", "protocol driver not attached"}, - {50, "ENOCSI", "no CSI structure available"}, - {51, "EL2HLT", "level 2 halted"}, - {52, "EBADE", "invalid exchange"}, - {53, "EBADR", "invalid request descriptor"}, - {54, "EXFULL", "exchange full"}, - {55, "ENOANO", "no anode"}, - {56, "EBADRQC", "invalid request code"}, - {57, "EBADSLT", "invalid slot"}, - {58, "EDEADLOCK", "file locking deadlock error"}, - {59, "EBFONT", "bad font file format"}, - {60, "ENOSTR", "device not a stream"}, - {61, "ENODATA", "no data available"}, - {62, "ETIME", "timer expired"}, - {63, "ENOSR", "out of streams resources"}, - {64, "ENONET", "machine is not on the network"}, - {65, "ENOPKG", "package not installed"}, - {66, "EREMOTE", "object is remote"}, - {67, "ENOLINK", "link has been severed"}, - {68, "EADV", "advertise error"}, - {69, "ESRMNT", "srmount error"}, - {70, "ECOMM", "communication error on send"}, - {71, "EPROTO", "protocol error"}, - {72, "EMULTIHOP", "multihop attempted"}, - {73, "EDOTDOT", "RFS specific error"}, - {74, "EBADMSG", "bad message"}, - {75, "EOVERFLOW", "value too large for defined data type"}, - {76, "ENOTUNIQ", "name not unique on network"}, - {77, "EBADFD", "file descriptor in bad state"}, - {78, "EREMCHG", "remote address changed"}, - {79, "ELIBACC", "can not access a needed shared library"}, - {80, "ELIBBAD", "accessing a corrupted shared library"}, - {81, "ELIBSCN", ".lib section in a.out corrupted"}, - {82, "ELIBMAX", "attempting to link in too many shared libraries"}, - {83, "ELIBEXEC", "cannot exec a shared library directly"}, - {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, - {85, "ERESTART", "interrupted system call should be restarted"}, - {86, "ESTRPIPE", "streams pipe error"}, - {87, "EUSERS", "too many users"}, - {88, "ENOTSOCK", "socket operation on non-socket"}, - {89, "EDESTADDRREQ", "destination address required"}, - {90, "EMSGSIZE", "message too long"}, - {91, "EPROTOTYPE", "protocol wrong type for socket"}, - {92, "ENOPROTOOPT", "protocol not available"}, - {93, "EPROTONOSUPPORT", "protocol not supported"}, - {94, "ESOCKTNOSUPPORT", "socket type not supported"}, - {95, "ENOTSUP", "operation not supported"}, - {96, "EPFNOSUPPORT", "protocol family not supported"}, - {97, "EAFNOSUPPORT", "address family not supported by protocol"}, - {98, "EADDRINUSE", "address already in use"}, - {99, "EADDRNOTAVAIL", "cannot assign requested address"}, - {100, "ENETDOWN", "network is down"}, - {101, "ENETUNREACH", "network is unreachable"}, - {102, "ENETRESET", "network dropped connection on reset"}, - {103, "ECONNABORTED", "software caused connection abort"}, - {104, "ECONNRESET", "connection reset by peer"}, - {105, "ENOBUFS", "no buffer space available"}, - {106, "EISCONN", "transport endpoint is already connected"}, - {107, "ENOTCONN", "transport endpoint is not connected"}, - {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, - {109, "ETOOMANYREFS", "too many references: cannot splice"}, - {110, "ETIMEDOUT", "connection timed out"}, - {111, "ECONNREFUSED", "connection refused"}, - {112, "EHOSTDOWN", "host is down"}, - {113, "EHOSTUNREACH", "no route to host"}, - {114, "EALREADY", "operation already in progress"}, - {115, "EINPROGRESS", "operation now in progress"}, - {116, "ESTALE", "stale file handle"}, - {117, "EUCLEAN", "structure needs cleaning"}, - {118, "ENOTNAM", "not a XENIX named type file"}, - {119, "ENAVAIL", "no XENIX semaphores available"}, - {120, "EISNAM", "is a named type file"}, - {121, "EREMOTEIO", "remote I/O error"}, - {122, "EDQUOT", "disk quota exceeded"}, - {123, "ENOMEDIUM", "no medium found"}, - {124, "EMEDIUMTYPE", "wrong medium type"}, - {125, "ECANCELED", "operation canceled"}, - {126, "ENOKEY", "required key not available"}, - {127, "EKEYEXPIRED", "key has expired"}, - {128, "EKEYREVOKED", "key has been revoked"}, - {129, "EKEYREJECTED", "key was rejected by service"}, - {130, "EOWNERDEAD", "owner died"}, - {131, "ENOTRECOVERABLE", "state not recoverable"}, - {132, "ERFKILL", "operation not possible due to RF-kill"}, - {133, "EHWPOISON", "memory page has hardware error"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/breakpoint trap"}, - {6, "SIGABRT", "aborted"}, - {7, "SIGBUS", "bus error"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGUSR1", "user defined signal 1"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGUSR2", "user defined signal 2"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGSTKFLT", "stack fault"}, - {17, "SIGCHLD", "child exited"}, - {18, "SIGCONT", "continued"}, - {19, "SIGSTOP", "stopped (signal)"}, - {20, "SIGTSTP", "stopped"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGURG", "urgent I/O condition"}, - {24, "SIGXCPU", "CPU time limit exceeded"}, - {25, "SIGXFSZ", "file size limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window changed"}, - {29, "SIGIO", "I/O possible"}, - {30, "SIGPWR", "power failure"}, - {31, "SIGSYS", "bad system call"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go deleted file mode 100644 index e336d14..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ /dev/null @@ -1,815 +0,0 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/riscv64/include -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build riscv64 && linux -// +build riscv64,linux - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/riscv64/include _const.go - -package unix - -import "syscall" - -const ( - B1000000 = 0x1008 - B115200 = 0x1002 - B1152000 = 0x1009 - B1500000 = 0x100a - B2000000 = 0x100b - B230400 = 0x1003 - B2500000 = 0x100c - B3000000 = 0x100d - B3500000 = 0x100e - B4000000 = 0x100f - B460800 = 0x1004 - B500000 = 0x1005 - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 - BLKBSZGET = 0x80081270 - BLKBSZSET = 0x40081271 - BLKFLSBUF = 0x1261 - BLKFRAGET = 0x1265 - BLKFRASET = 0x1264 - BLKGETSIZE = 0x1260 - BLKGETSIZE64 = 0x80081272 - BLKPBSZGET = 0x127b - BLKRAGET = 0x1263 - BLKRASET = 0x1262 - BLKROGET = 0x125e - BLKROSET = 0x125d - BLKRRPART = 0x125f - BLKSECTGET = 0x1267 - BLKSECTSET = 0x1266 - BLKSSZGET = 0x1268 - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 - CBAUD = 0x100f - CBAUDEX = 0x1000 - CIBAUD = 0x100f0000 - CLOCAL = 0x800 - CR1 = 0x200 - CR2 = 0x400 - CR3 = 0x600 - CRDLY = 0x600 - CREAD = 0x80 - CS6 = 0x10 - CS7 = 0x20 - CS8 = 0x30 - CSIZE = 0x30 - CSTOPB = 0x40 - ECCGETLAYOUT = 0x81484d11 - ECCGETSTATS = 0x80104d12 - ECHOCTL = 0x200 - ECHOE = 0x10 - ECHOK = 0x20 - ECHOKE = 0x800 - ECHONL = 0x40 - ECHOPRT = 0x400 - EFD_CLOEXEC = 0x80000 - EFD_NONBLOCK = 0x800 - EPOLL_CLOEXEC = 0x80000 - EXTPROC = 0x10000 - FF1 = 0x8000 - FFDLY = 0x8000 - FICLONE = 0x40049409 - FICLONERANGE = 0x4020940d - FLUSHO = 0x1000 - FS_IOC_ENABLE_VERITY = 0x40806685 - FS_IOC_GETFLAGS = 0x80086601 - FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b - FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 - FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 - FS_IOC_SETFLAGS = 0x40086602 - FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 - F_GETLK = 0x5 - F_GETLK64 = 0x5 - F_GETOWN = 0x9 - F_RDLCK = 0x0 - F_SETLK = 0x6 - F_SETLK64 = 0x6 - F_SETLKW = 0x7 - F_SETLKW64 = 0x7 - F_SETOWN = 0x8 - F_UNLCK = 0x2 - F_WRLCK = 0x1 - HIDIOCGRAWINFO = 0x80084803 - HIDIOCGRDESC = 0x90044802 - HIDIOCGRDESCSIZE = 0x80044801 - HUPCL = 0x400 - ICANON = 0x2 - IEXTEN = 0x8000 - IN_CLOEXEC = 0x80000 - IN_NONBLOCK = 0x800 - IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 - ISIG = 0x1 - IUCLC = 0x200 - IXOFF = 0x1000 - IXON = 0x400 - MAP_ANON = 0x20 - MAP_ANONYMOUS = 0x20 - MAP_DENYWRITE = 0x800 - MAP_EXECUTABLE = 0x1000 - MAP_GROWSDOWN = 0x100 - MAP_HUGETLB = 0x40000 - MAP_LOCKED = 0x2000 - MAP_NONBLOCK = 0x10000 - MAP_NORESERVE = 0x4000 - MAP_POPULATE = 0x8000 - MAP_STACK = 0x20000 - MAP_SYNC = 0x80000 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MCL_ONFAULT = 0x4 - MEMERASE = 0x40084d02 - MEMERASE64 = 0x40104d14 - MEMGETBADBLOCK = 0x40084d0b - MEMGETINFO = 0x80204d01 - MEMGETOOBSEL = 0x80c84d0a - MEMGETREGIONCOUNT = 0x80044d07 - MEMISLOCKED = 0x80084d17 - MEMLOCK = 0x40084d05 - MEMREADOOB = 0xc0104d04 - MEMSETBADBLOCK = 0x40084d0c - MEMUNLOCK = 0x40084d06 - MEMWRITEOOB = 0xc0104d03 - MTDFILEMODE = 0x4d13 - NFDBITS = 0x40 - NLDLY = 0x100 - NOFLSH = 0x80 - NS_GET_NSTYPE = 0xb703 - NS_GET_OWNER_UID = 0xb704 - NS_GET_PARENT = 0xb702 - NS_GET_USERNS = 0xb701 - OLCUC = 0x2 - ONLCR = 0x4 - OTPERASE = 0x400c4d19 - OTPGETREGIONCOUNT = 0x40044d0e - OTPGETREGIONINFO = 0x400c4d0f - OTPLOCK = 0x800c4d10 - OTPSELECT = 0x80044d0d - O_APPEND = 0x400 - O_ASYNC = 0x2000 - O_CLOEXEC = 0x80000 - O_CREAT = 0x40 - O_DIRECT = 0x4000 - O_DIRECTORY = 0x10000 - O_DSYNC = 0x1000 - O_EXCL = 0x80 - O_FSYNC = 0x101000 - O_LARGEFILE = 0x0 - O_NDELAY = 0x800 - O_NOATIME = 0x40000 - O_NOCTTY = 0x100 - O_NOFOLLOW = 0x20000 - O_NONBLOCK = 0x800 - O_PATH = 0x200000 - O_RSYNC = 0x101000 - O_SYNC = 0x101000 - O_TMPFILE = 0x410000 - O_TRUNC = 0x200 - PARENB = 0x100 - PARODD = 0x200 - PENDIN = 0x4000 - PERF_EVENT_IOC_DISABLE = 0x2401 - PERF_EVENT_IOC_ENABLE = 0x2400 - PERF_EVENT_IOC_ID = 0x80082407 - PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b - PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 - PERF_EVENT_IOC_PERIOD = 0x40082404 - PERF_EVENT_IOC_QUERY_BPF = 0xc008240a - PERF_EVENT_IOC_REFRESH = 0x2402 - PERF_EVENT_IOC_RESET = 0x2403 - PERF_EVENT_IOC_SET_BPF = 0x40042408 - PERF_EVENT_IOC_SET_FILTER = 0x40082406 - PERF_EVENT_IOC_SET_OUTPUT = 0x2405 - PPPIOCATTACH = 0x4004743d - PPPIOCATTCHAN = 0x40047438 - PPPIOCBRIDGECHAN = 0x40047435 - PPPIOCCONNECT = 0x4004743a - PPPIOCDETACH = 0x4004743c - PPPIOCDISCONN = 0x7439 - PPPIOCGASYNCMAP = 0x80047458 - PPPIOCGCHAN = 0x80047437 - PPPIOCGDEBUG = 0x80047441 - PPPIOCGFLAGS = 0x8004745a - PPPIOCGIDLE = 0x8010743f - PPPIOCGIDLE32 = 0x8008743f - PPPIOCGIDLE64 = 0x8010743f - PPPIOCGL2TPSTATS = 0x80487436 - PPPIOCGMRU = 0x80047453 - PPPIOCGRASYNCMAP = 0x80047455 - PPPIOCGUNIT = 0x80047456 - PPPIOCGXASYNCMAP = 0x80207450 - PPPIOCSACTIVE = 0x40107446 - PPPIOCSASYNCMAP = 0x40047457 - PPPIOCSCOMPRESS = 0x4010744d - PPPIOCSDEBUG = 0x40047440 - PPPIOCSFLAGS = 0x40047459 - PPPIOCSMAXCID = 0x40047451 - PPPIOCSMRRU = 0x4004743b - PPPIOCSMRU = 0x40047452 - PPPIOCSNPMODE = 0x4008744b - PPPIOCSPASS = 0x40107447 - PPPIOCSRASYNCMAP = 0x40047454 - PPPIOCSXASYNCMAP = 0x4020744f - PPPIOCUNBRIDGECHAN = 0x7434 - PPPIOCXFERUNIT = 0x744e - PR_SET_PTRACER_ANY = 0xffffffffffffffff - RLIMIT_AS = 0x9 - RLIMIT_MEMLOCK = 0x8 - RLIMIT_NOFILE = 0x7 - RLIMIT_NPROC = 0x6 - RLIMIT_RSS = 0x5 - RNDADDENTROPY = 0x40085203 - RNDADDTOENTCNT = 0x40045201 - RNDCLEARPOOL = 0x5206 - RNDGETENTCNT = 0x80045200 - RNDGETPOOL = 0x80085202 - RNDRESEEDCRNG = 0x5207 - RNDZAPENTCNT = 0x5204 - RTC_AIE_OFF = 0x7002 - RTC_AIE_ON = 0x7001 - RTC_ALM_READ = 0x80247008 - RTC_ALM_SET = 0x40247007 - RTC_EPOCH_READ = 0x8008700d - RTC_EPOCH_SET = 0x4008700e - RTC_IRQP_READ = 0x8008700b - RTC_IRQP_SET = 0x4008700c - RTC_PARAM_GET = 0x40187013 - RTC_PARAM_SET = 0x40187014 - RTC_PIE_OFF = 0x7006 - RTC_PIE_ON = 0x7005 - RTC_PLL_GET = 0x80207011 - RTC_PLL_SET = 0x40207012 - RTC_RD_TIME = 0x80247009 - RTC_SET_TIME = 0x4024700a - RTC_UIE_OFF = 0x7004 - RTC_UIE_ON = 0x7003 - RTC_VL_CLR = 0x7014 - RTC_VL_READ = 0x80047013 - RTC_WIE_OFF = 0x7010 - RTC_WIE_ON = 0x700f - RTC_WKALM_RD = 0x80287010 - RTC_WKALM_SET = 0x4028700f - SCM_TIMESTAMPING = 0x25 - SCM_TIMESTAMPING_OPT_STATS = 0x36 - SCM_TIMESTAMPING_PKTINFO = 0x3a - SCM_TIMESTAMPNS = 0x23 - SCM_TXTIME = 0x3d - SCM_WIFI_STATUS = 0x29 - SFD_CLOEXEC = 0x80000 - SFD_NONBLOCK = 0x800 - SIOCATMARK = 0x8905 - SIOCGPGRP = 0x8904 - SIOCGSTAMPNS_NEW = 0x80108907 - SIOCGSTAMP_NEW = 0x80108906 - SIOCINQ = 0x541b - SIOCOUTQ = 0x5411 - SIOCSPGRP = 0x8902 - SOCK_CLOEXEC = 0x80000 - SOCK_DGRAM = 0x2 - SOCK_NONBLOCK = 0x800 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0x1 - SO_ACCEPTCONN = 0x1e - SO_ATTACH_BPF = 0x32 - SO_ATTACH_REUSEPORT_CBPF = 0x33 - SO_ATTACH_REUSEPORT_EBPF = 0x34 - SO_BINDTODEVICE = 0x19 - SO_BINDTOIFINDEX = 0x3e - SO_BPF_EXTENSIONS = 0x30 - SO_BROADCAST = 0x6 - SO_BSDCOMPAT = 0xe - SO_BUF_LOCK = 0x48 - SO_BUSY_POLL = 0x2e - SO_BUSY_POLL_BUDGET = 0x46 - SO_CNX_ADVICE = 0x35 - SO_COOKIE = 0x39 - SO_DETACH_REUSEPORT_BPF = 0x44 - SO_DOMAIN = 0x27 - SO_DONTROUTE = 0x5 - SO_ERROR = 0x4 - SO_INCOMING_CPU = 0x31 - SO_INCOMING_NAPI_ID = 0x38 - SO_KEEPALIVE = 0x9 - SO_LINGER = 0xd - SO_LOCK_FILTER = 0x2c - SO_MARK = 0x24 - SO_MAX_PACING_RATE = 0x2f - SO_MEMINFO = 0x37 - SO_NETNS_COOKIE = 0x47 - SO_NOFCS = 0x2b - SO_OOBINLINE = 0xa - SO_PASSCRED = 0x10 - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x11 - SO_PEERGROUPS = 0x3b - SO_PEERSEC = 0x1f - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x26 - SO_RCVBUF = 0x8 - SO_RCVBUFFORCE = 0x21 - SO_RCVLOWAT = 0x12 - SO_RCVMARK = 0x4b - SO_RCVTIMEO = 0x14 - SO_RCVTIMEO_NEW = 0x42 - SO_RCVTIMEO_OLD = 0x14 - SO_RESERVE_MEM = 0x49 - SO_REUSEADDR = 0x2 - SO_REUSEPORT = 0xf - SO_RXQ_OVFL = 0x28 - SO_SECURITY_AUTHENTICATION = 0x16 - SO_SECURITY_ENCRYPTION_NETWORK = 0x18 - SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 - SO_SELECT_ERR_QUEUE = 0x2d - SO_SNDBUF = 0x7 - SO_SNDBUFFORCE = 0x20 - SO_SNDLOWAT = 0x13 - SO_SNDTIMEO = 0x15 - SO_SNDTIMEO_NEW = 0x43 - SO_SNDTIMEO_OLD = 0x15 - SO_TIMESTAMPING = 0x25 - SO_TIMESTAMPING_NEW = 0x41 - SO_TIMESTAMPING_OLD = 0x25 - SO_TIMESTAMPNS = 0x23 - SO_TIMESTAMPNS_NEW = 0x40 - SO_TIMESTAMPNS_OLD = 0x23 - SO_TIMESTAMP_NEW = 0x3f - SO_TXREHASH = 0x4a - SO_TXTIME = 0x3d - SO_TYPE = 0x3 - SO_WIFI_STATUS = 0x29 - SO_ZEROCOPY = 0x3c - TAB1 = 0x800 - TAB2 = 0x1000 - TAB3 = 0x1800 - TABDLY = 0x1800 - TCFLSH = 0x540b - TCGETA = 0x5405 - TCGETS = 0x5401 - TCGETS2 = 0x802c542a - TCGETX = 0x5432 - TCSAFLUSH = 0x2 - TCSBRK = 0x5409 - TCSBRKP = 0x5425 - TCSETA = 0x5406 - TCSETAF = 0x5408 - TCSETAW = 0x5407 - TCSETS = 0x5402 - TCSETS2 = 0x402c542b - TCSETSF = 0x5404 - TCSETSF2 = 0x402c542d - TCSETSW = 0x5403 - TCSETSW2 = 0x402c542c - TCSETX = 0x5433 - TCSETXF = 0x5434 - TCSETXW = 0x5435 - TCXONC = 0x540a - TFD_CLOEXEC = 0x80000 - TFD_NONBLOCK = 0x800 - TIOCCBRK = 0x5428 - TIOCCONS = 0x541d - TIOCEXCL = 0x540c - TIOCGDEV = 0x80045432 - TIOCGETD = 0x5424 - TIOCGEXCL = 0x80045440 - TIOCGICOUNT = 0x545d - TIOCGISO7816 = 0x80285442 - TIOCGLCKTRMIOS = 0x5456 - TIOCGPGRP = 0x540f - TIOCGPKT = 0x80045438 - TIOCGPTLCK = 0x80045439 - TIOCGPTN = 0x80045430 - TIOCGPTPEER = 0x5441 - TIOCGRS485 = 0x542e - TIOCGSERIAL = 0x541e - TIOCGSID = 0x5429 - TIOCGSOFTCAR = 0x5419 - TIOCGWINSZ = 0x5413 - TIOCINQ = 0x541b - TIOCLINUX = 0x541c - TIOCMBIC = 0x5417 - TIOCMBIS = 0x5416 - TIOCMGET = 0x5415 - TIOCMIWAIT = 0x545c - TIOCMSET = 0x5418 - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x5422 - TIOCNXCL = 0x540d - TIOCOUTQ = 0x5411 - TIOCPKT = 0x5420 - TIOCSBRK = 0x5427 - TIOCSCTTY = 0x540e - TIOCSERCONFIG = 0x5453 - TIOCSERGETLSR = 0x5459 - TIOCSERGETMULTI = 0x545a - TIOCSERGSTRUCT = 0x5458 - TIOCSERGWILD = 0x5454 - TIOCSERSETMULTI = 0x545b - TIOCSERSWILD = 0x5455 - TIOCSER_TEMT = 0x1 - TIOCSETD = 0x5423 - TIOCSIG = 0x40045436 - TIOCSISO7816 = 0xc0285443 - TIOCSLCKTRMIOS = 0x5457 - TIOCSPGRP = 0x5410 - TIOCSPTLCK = 0x40045431 - TIOCSRS485 = 0x542f - TIOCSSERIAL = 0x541f - TIOCSSOFTCAR = 0x541a - TIOCSTI = 0x5412 - TIOCSWINSZ = 0x5414 - TIOCVHANGUP = 0x5437 - TOSTOP = 0x100 - TUNATTACHFILTER = 0x401054d5 - TUNDETACHFILTER = 0x401054d6 - TUNGETDEVNETNS = 0x54e3 - TUNGETFEATURES = 0x800454cf - TUNGETFILTER = 0x801054db - TUNGETIFF = 0x800454d2 - TUNGETSNDBUF = 0x800454d3 - TUNGETVNETBE = 0x800454df - TUNGETVNETHDRSZ = 0x800454d7 - TUNGETVNETLE = 0x800454dd - TUNSETCARRIER = 0x400454e2 - TUNSETDEBUG = 0x400454c9 - TUNSETFILTEREBPF = 0x800454e1 - TUNSETGROUP = 0x400454ce - TUNSETIFF = 0x400454ca - TUNSETIFINDEX = 0x400454da - TUNSETLINK = 0x400454cd - TUNSETNOCSUM = 0x400454c8 - TUNSETOFFLOAD = 0x400454d0 - TUNSETOWNER = 0x400454cc - TUNSETPERSIST = 0x400454cb - TUNSETQUEUE = 0x400454d9 - TUNSETSNDBUF = 0x400454d4 - TUNSETSTEERINGEBPF = 0x800454e0 - TUNSETTXFILTER = 0x400454d1 - TUNSETVNETBE = 0x400454de - TUNSETVNETHDRSZ = 0x400454d8 - TUNSETVNETLE = 0x400454dc - UBI_IOCATT = 0x40186f40 - UBI_IOCDET = 0x40046f41 - UBI_IOCEBCH = 0x40044f02 - UBI_IOCEBER = 0x40044f01 - UBI_IOCEBISMAP = 0x80044f05 - UBI_IOCEBMAP = 0x40084f03 - UBI_IOCEBUNMAP = 0x40044f04 - UBI_IOCMKVOL = 0x40986f00 - UBI_IOCRMVOL = 0x40046f01 - UBI_IOCRNVOL = 0x51106f03 - UBI_IOCRPEB = 0x40046f04 - UBI_IOCRSVOL = 0x400c6f02 - UBI_IOCSETVOLPROP = 0x40104f06 - UBI_IOCSPEB = 0x40046f05 - UBI_IOCVOLCRBLK = 0x40804f07 - UBI_IOCVOLRMBLK = 0x4f08 - UBI_IOCVOLUP = 0x40084f00 - VDISCARD = 0xd - VEOF = 0x4 - VEOL = 0xb - VEOL2 = 0x10 - VMIN = 0x6 - VREPRINT = 0xc - VSTART = 0x8 - VSTOP = 0x9 - VSUSP = 0xa - VSWTC = 0x7 - VT1 = 0x4000 - VTDLY = 0x4000 - VTIME = 0x5 - VWERASE = 0xe - WDIOC_GETBOOTSTATUS = 0x80045702 - WDIOC_GETPRETIMEOUT = 0x80045709 - WDIOC_GETSTATUS = 0x80045701 - WDIOC_GETSUPPORT = 0x80285700 - WDIOC_GETTEMP = 0x80045703 - WDIOC_GETTIMELEFT = 0x8004570a - WDIOC_GETTIMEOUT = 0x80045707 - WDIOC_KEEPALIVE = 0x80045705 - WDIOC_SETOPTIONS = 0x80045704 - WORDSIZE = 0x40 - XCASE = 0x4 - XTABS = 0x1800 - _HIDIOCGRAWNAME = 0x80804804 - _HIDIOCGRAWPHYS = 0x80404805 - _HIDIOCGRAWUNIQ = 0x80404808 -) - -// Errors -const ( - EADDRINUSE = syscall.Errno(0x62) - EADDRNOTAVAIL = syscall.Errno(0x63) - EADV = syscall.Errno(0x44) - EAFNOSUPPORT = syscall.Errno(0x61) - EALREADY = syscall.Errno(0x72) - EBADE = syscall.Errno(0x34) - EBADFD = syscall.Errno(0x4d) - EBADMSG = syscall.Errno(0x4a) - EBADR = syscall.Errno(0x35) - EBADRQC = syscall.Errno(0x38) - EBADSLT = syscall.Errno(0x39) - EBFONT = syscall.Errno(0x3b) - ECANCELED = syscall.Errno(0x7d) - ECHRNG = syscall.Errno(0x2c) - ECOMM = syscall.Errno(0x46) - ECONNABORTED = syscall.Errno(0x67) - ECONNREFUSED = syscall.Errno(0x6f) - ECONNRESET = syscall.Errno(0x68) - EDEADLK = syscall.Errno(0x23) - EDEADLOCK = syscall.Errno(0x23) - EDESTADDRREQ = syscall.Errno(0x59) - EDOTDOT = syscall.Errno(0x49) - EDQUOT = syscall.Errno(0x7a) - EHOSTDOWN = syscall.Errno(0x70) - EHOSTUNREACH = syscall.Errno(0x71) - EHWPOISON = syscall.Errno(0x85) - EIDRM = syscall.Errno(0x2b) - EILSEQ = syscall.Errno(0x54) - EINPROGRESS = syscall.Errno(0x73) - EISCONN = syscall.Errno(0x6a) - EISNAM = syscall.Errno(0x78) - EKEYEXPIRED = syscall.Errno(0x7f) - EKEYREJECTED = syscall.Errno(0x81) - EKEYREVOKED = syscall.Errno(0x80) - EL2HLT = syscall.Errno(0x33) - EL2NSYNC = syscall.Errno(0x2d) - EL3HLT = syscall.Errno(0x2e) - EL3RST = syscall.Errno(0x2f) - ELIBACC = syscall.Errno(0x4f) - ELIBBAD = syscall.Errno(0x50) - ELIBEXEC = syscall.Errno(0x53) - ELIBMAX = syscall.Errno(0x52) - ELIBSCN = syscall.Errno(0x51) - ELNRNG = syscall.Errno(0x30) - ELOOP = syscall.Errno(0x28) - EMEDIUMTYPE = syscall.Errno(0x7c) - EMSGSIZE = syscall.Errno(0x5a) - EMULTIHOP = syscall.Errno(0x48) - ENAMETOOLONG = syscall.Errno(0x24) - ENAVAIL = syscall.Errno(0x77) - ENETDOWN = syscall.Errno(0x64) - ENETRESET = syscall.Errno(0x66) - ENETUNREACH = syscall.Errno(0x65) - ENOANO = syscall.Errno(0x37) - ENOBUFS = syscall.Errno(0x69) - ENOCSI = syscall.Errno(0x32) - ENODATA = syscall.Errno(0x3d) - ENOKEY = syscall.Errno(0x7e) - ENOLCK = syscall.Errno(0x25) - ENOLINK = syscall.Errno(0x43) - ENOMEDIUM = syscall.Errno(0x7b) - ENOMSG = syscall.Errno(0x2a) - ENONET = syscall.Errno(0x40) - ENOPKG = syscall.Errno(0x41) - ENOPROTOOPT = syscall.Errno(0x5c) - ENOSR = syscall.Errno(0x3f) - ENOSTR = syscall.Errno(0x3c) - ENOSYS = syscall.Errno(0x26) - ENOTCONN = syscall.Errno(0x6b) - ENOTEMPTY = syscall.Errno(0x27) - ENOTNAM = syscall.Errno(0x76) - ENOTRECOVERABLE = syscall.Errno(0x83) - ENOTSOCK = syscall.Errno(0x58) - ENOTSUP = syscall.Errno(0x5f) - ENOTUNIQ = syscall.Errno(0x4c) - EOPNOTSUPP = syscall.Errno(0x5f) - EOVERFLOW = syscall.Errno(0x4b) - EOWNERDEAD = syscall.Errno(0x82) - EPFNOSUPPORT = syscall.Errno(0x60) - EPROTO = syscall.Errno(0x47) - EPROTONOSUPPORT = syscall.Errno(0x5d) - EPROTOTYPE = syscall.Errno(0x5b) - EREMCHG = syscall.Errno(0x4e) - EREMOTE = syscall.Errno(0x42) - EREMOTEIO = syscall.Errno(0x79) - ERESTART = syscall.Errno(0x55) - ERFKILL = syscall.Errno(0x84) - ESHUTDOWN = syscall.Errno(0x6c) - ESOCKTNOSUPPORT = syscall.Errno(0x5e) - ESRMNT = syscall.Errno(0x45) - ESTALE = syscall.Errno(0x74) - ESTRPIPE = syscall.Errno(0x56) - ETIME = syscall.Errno(0x3e) - ETIMEDOUT = syscall.Errno(0x6e) - ETOOMANYREFS = syscall.Errno(0x6d) - EUCLEAN = syscall.Errno(0x75) - EUNATCH = syscall.Errno(0x31) - EUSERS = syscall.Errno(0x57) - EXFULL = syscall.Errno(0x36) -) - -// Signals -const ( - SIGBUS = syscall.Signal(0x7) - SIGCHLD = syscall.Signal(0x11) - SIGCLD = syscall.Signal(0x11) - SIGCONT = syscall.Signal(0x12) - SIGIO = syscall.Signal(0x1d) - SIGPOLL = syscall.Signal(0x1d) - SIGPROF = syscall.Signal(0x1b) - SIGPWR = syscall.Signal(0x1e) - SIGSTKFLT = syscall.Signal(0x10) - SIGSTOP = syscall.Signal(0x13) - SIGSYS = syscall.Signal(0x1f) - SIGTSTP = syscall.Signal(0x14) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x17) - SIGUSR1 = syscall.Signal(0xa) - SIGUSR2 = syscall.Signal(0xc) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "no such device or address"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EAGAIN", "resource temporarily unavailable"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device or resource busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "invalid cross-device link"}, - {19, "ENODEV", "no such device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "numerical result out of range"}, - {35, "EDEADLK", "resource deadlock avoided"}, - {36, "ENAMETOOLONG", "file name too long"}, - {37, "ENOLCK", "no locks available"}, - {38, "ENOSYS", "function not implemented"}, - {39, "ENOTEMPTY", "directory not empty"}, - {40, "ELOOP", "too many levels of symbolic links"}, - {42, "ENOMSG", "no message of desired type"}, - {43, "EIDRM", "identifier removed"}, - {44, "ECHRNG", "channel number out of range"}, - {45, "EL2NSYNC", "level 2 not synchronized"}, - {46, "EL3HLT", "level 3 halted"}, - {47, "EL3RST", "level 3 reset"}, - {48, "ELNRNG", "link number out of range"}, - {49, "EUNATCH", "protocol driver not attached"}, - {50, "ENOCSI", "no CSI structure available"}, - {51, "EL2HLT", "level 2 halted"}, - {52, "EBADE", "invalid exchange"}, - {53, "EBADR", "invalid request descriptor"}, - {54, "EXFULL", "exchange full"}, - {55, "ENOANO", "no anode"}, - {56, "EBADRQC", "invalid request code"}, - {57, "EBADSLT", "invalid slot"}, - {59, "EBFONT", "bad font file format"}, - {60, "ENOSTR", "device not a stream"}, - {61, "ENODATA", "no data available"}, - {62, "ETIME", "timer expired"}, - {63, "ENOSR", "out of streams resources"}, - {64, "ENONET", "machine is not on the network"}, - {65, "ENOPKG", "package not installed"}, - {66, "EREMOTE", "object is remote"}, - {67, "ENOLINK", "link has been severed"}, - {68, "EADV", "advertise error"}, - {69, "ESRMNT", "srmount error"}, - {70, "ECOMM", "communication error on send"}, - {71, "EPROTO", "protocol error"}, - {72, "EMULTIHOP", "multihop attempted"}, - {73, "EDOTDOT", "RFS specific error"}, - {74, "EBADMSG", "bad message"}, - {75, "EOVERFLOW", "value too large for defined data type"}, - {76, "ENOTUNIQ", "name not unique on network"}, - {77, "EBADFD", "file descriptor in bad state"}, - {78, "EREMCHG", "remote address changed"}, - {79, "ELIBACC", "can not access a needed shared library"}, - {80, "ELIBBAD", "accessing a corrupted shared library"}, - {81, "ELIBSCN", ".lib section in a.out corrupted"}, - {82, "ELIBMAX", "attempting to link in too many shared libraries"}, - {83, "ELIBEXEC", "cannot exec a shared library directly"}, - {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, - {85, "ERESTART", "interrupted system call should be restarted"}, - {86, "ESTRPIPE", "streams pipe error"}, - {87, "EUSERS", "too many users"}, - {88, "ENOTSOCK", "socket operation on non-socket"}, - {89, "EDESTADDRREQ", "destination address required"}, - {90, "EMSGSIZE", "message too long"}, - {91, "EPROTOTYPE", "protocol wrong type for socket"}, - {92, "ENOPROTOOPT", "protocol not available"}, - {93, "EPROTONOSUPPORT", "protocol not supported"}, - {94, "ESOCKTNOSUPPORT", "socket type not supported"}, - {95, "ENOTSUP", "operation not supported"}, - {96, "EPFNOSUPPORT", "protocol family not supported"}, - {97, "EAFNOSUPPORT", "address family not supported by protocol"}, - {98, "EADDRINUSE", "address already in use"}, - {99, "EADDRNOTAVAIL", "cannot assign requested address"}, - {100, "ENETDOWN", "network is down"}, - {101, "ENETUNREACH", "network is unreachable"}, - {102, "ENETRESET", "network dropped connection on reset"}, - {103, "ECONNABORTED", "software caused connection abort"}, - {104, "ECONNRESET", "connection reset by peer"}, - {105, "ENOBUFS", "no buffer space available"}, - {106, "EISCONN", "transport endpoint is already connected"}, - {107, "ENOTCONN", "transport endpoint is not connected"}, - {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, - {109, "ETOOMANYREFS", "too many references: cannot splice"}, - {110, "ETIMEDOUT", "connection timed out"}, - {111, "ECONNREFUSED", "connection refused"}, - {112, "EHOSTDOWN", "host is down"}, - {113, "EHOSTUNREACH", "no route to host"}, - {114, "EALREADY", "operation already in progress"}, - {115, "EINPROGRESS", "operation now in progress"}, - {116, "ESTALE", "stale file handle"}, - {117, "EUCLEAN", "structure needs cleaning"}, - {118, "ENOTNAM", "not a XENIX named type file"}, - {119, "ENAVAIL", "no XENIX semaphores available"}, - {120, "EISNAM", "is a named type file"}, - {121, "EREMOTEIO", "remote I/O error"}, - {122, "EDQUOT", "disk quota exceeded"}, - {123, "ENOMEDIUM", "no medium found"}, - {124, "EMEDIUMTYPE", "wrong medium type"}, - {125, "ECANCELED", "operation canceled"}, - {126, "ENOKEY", "required key not available"}, - {127, "EKEYEXPIRED", "key has expired"}, - {128, "EKEYREVOKED", "key has been revoked"}, - {129, "EKEYREJECTED", "key was rejected by service"}, - {130, "EOWNERDEAD", "owner died"}, - {131, "ENOTRECOVERABLE", "state not recoverable"}, - {132, "ERFKILL", "operation not possible due to RF-kill"}, - {133, "EHWPOISON", "memory page has hardware error"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/breakpoint trap"}, - {6, "SIGABRT", "aborted"}, - {7, "SIGBUS", "bus error"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGUSR1", "user defined signal 1"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGUSR2", "user defined signal 2"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGSTKFLT", "stack fault"}, - {17, "SIGCHLD", "child exited"}, - {18, "SIGCONT", "continued"}, - {19, "SIGSTOP", "stopped (signal)"}, - {20, "SIGTSTP", "stopped"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGURG", "urgent I/O condition"}, - {24, "SIGXCPU", "CPU time limit exceeded"}, - {25, "SIGXFSZ", "file size limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window changed"}, - {29, "SIGIO", "I/O possible"}, - {30, "SIGPWR", "power failure"}, - {31, "SIGSYS", "bad system call"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go deleted file mode 100644 index 390c01d..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ /dev/null @@ -1,890 +0,0 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/s390x/include -fsigned-char -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build s390x && linux -// +build s390x,linux - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/s390x/include -fsigned-char _const.go - -package unix - -import "syscall" - -const ( - B1000000 = 0x1008 - B115200 = 0x1002 - B1152000 = 0x1009 - B1500000 = 0x100a - B2000000 = 0x100b - B230400 = 0x1003 - B2500000 = 0x100c - B3000000 = 0x100d - B3500000 = 0x100e - B4000000 = 0x100f - B460800 = 0x1004 - B500000 = 0x1005 - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 - BLKBSZGET = 0x80081270 - BLKBSZSET = 0x40081271 - BLKFLSBUF = 0x1261 - BLKFRAGET = 0x1265 - BLKFRASET = 0x1264 - BLKGETSIZE = 0x1260 - BLKGETSIZE64 = 0x80081272 - BLKPBSZGET = 0x127b - BLKRAGET = 0x1263 - BLKRASET = 0x1262 - BLKROGET = 0x125e - BLKROSET = 0x125d - BLKRRPART = 0x125f - BLKSECTGET = 0x1267 - BLKSECTSET = 0x1266 - BLKSSZGET = 0x1268 - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 - CBAUD = 0x100f - CBAUDEX = 0x1000 - CIBAUD = 0x100f0000 - CLOCAL = 0x800 - CR1 = 0x200 - CR2 = 0x400 - CR3 = 0x600 - CRDLY = 0x600 - CREAD = 0x80 - CS6 = 0x10 - CS7 = 0x20 - CS8 = 0x30 - CSIZE = 0x30 - CSTOPB = 0x40 - ECCGETLAYOUT = 0x81484d11 - ECCGETSTATS = 0x80104d12 - ECHOCTL = 0x200 - ECHOE = 0x10 - ECHOK = 0x20 - ECHOKE = 0x800 - ECHONL = 0x40 - ECHOPRT = 0x400 - EFD_CLOEXEC = 0x80000 - EFD_NONBLOCK = 0x800 - EPOLL_CLOEXEC = 0x80000 - EXTPROC = 0x10000 - FF1 = 0x8000 - FFDLY = 0x8000 - FICLONE = 0x40049409 - FICLONERANGE = 0x4020940d - FLUSHO = 0x1000 - FS_IOC_ENABLE_VERITY = 0x40806685 - FS_IOC_GETFLAGS = 0x80086601 - FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b - FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 - FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 - FS_IOC_SETFLAGS = 0x40086602 - FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 - F_GETLK = 0x5 - F_GETLK64 = 0x5 - F_GETOWN = 0x9 - F_RDLCK = 0x0 - F_SETLK = 0x6 - F_SETLK64 = 0x6 - F_SETLKW = 0x7 - F_SETLKW64 = 0x7 - F_SETOWN = 0x8 - F_UNLCK = 0x2 - F_WRLCK = 0x1 - HIDIOCGRAWINFO = 0x80084803 - HIDIOCGRDESC = 0x90044802 - HIDIOCGRDESCSIZE = 0x80044801 - HUPCL = 0x400 - ICANON = 0x2 - IEXTEN = 0x8000 - IN_CLOEXEC = 0x80000 - IN_NONBLOCK = 0x800 - IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 - ISIG = 0x1 - IUCLC = 0x200 - IXOFF = 0x1000 - IXON = 0x400 - MAP_ANON = 0x20 - MAP_ANONYMOUS = 0x20 - MAP_DENYWRITE = 0x800 - MAP_EXECUTABLE = 0x1000 - MAP_GROWSDOWN = 0x100 - MAP_HUGETLB = 0x40000 - MAP_LOCKED = 0x2000 - MAP_NONBLOCK = 0x10000 - MAP_NORESERVE = 0x4000 - MAP_POPULATE = 0x8000 - MAP_STACK = 0x20000 - MAP_SYNC = 0x80000 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MCL_ONFAULT = 0x4 - MEMERASE = 0x40084d02 - MEMERASE64 = 0x40104d14 - MEMGETBADBLOCK = 0x40084d0b - MEMGETINFO = 0x80204d01 - MEMGETOOBSEL = 0x80c84d0a - MEMGETREGIONCOUNT = 0x80044d07 - MEMISLOCKED = 0x80084d17 - MEMLOCK = 0x40084d05 - MEMREADOOB = 0xc0104d04 - MEMSETBADBLOCK = 0x40084d0c - MEMUNLOCK = 0x40084d06 - MEMWRITEOOB = 0xc0104d03 - MTDFILEMODE = 0x4d13 - NFDBITS = 0x40 - NLDLY = 0x100 - NOFLSH = 0x80 - NS_GET_NSTYPE = 0xb703 - NS_GET_OWNER_UID = 0xb704 - NS_GET_PARENT = 0xb702 - NS_GET_USERNS = 0xb701 - OLCUC = 0x2 - ONLCR = 0x4 - OTPERASE = 0x400c4d19 - OTPGETREGIONCOUNT = 0x40044d0e - OTPGETREGIONINFO = 0x400c4d0f - OTPLOCK = 0x800c4d10 - OTPSELECT = 0x80044d0d - O_APPEND = 0x400 - O_ASYNC = 0x2000 - O_CLOEXEC = 0x80000 - O_CREAT = 0x40 - O_DIRECT = 0x4000 - O_DIRECTORY = 0x10000 - O_DSYNC = 0x1000 - O_EXCL = 0x80 - O_FSYNC = 0x101000 - O_LARGEFILE = 0x0 - O_NDELAY = 0x800 - O_NOATIME = 0x40000 - O_NOCTTY = 0x100 - O_NOFOLLOW = 0x20000 - O_NONBLOCK = 0x800 - O_PATH = 0x200000 - O_RSYNC = 0x101000 - O_SYNC = 0x101000 - O_TMPFILE = 0x410000 - O_TRUNC = 0x200 - PARENB = 0x100 - PARODD = 0x200 - PENDIN = 0x4000 - PERF_EVENT_IOC_DISABLE = 0x2401 - PERF_EVENT_IOC_ENABLE = 0x2400 - PERF_EVENT_IOC_ID = 0x80082407 - PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b - PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 - PERF_EVENT_IOC_PERIOD = 0x40082404 - PERF_EVENT_IOC_QUERY_BPF = 0xc008240a - PERF_EVENT_IOC_REFRESH = 0x2402 - PERF_EVENT_IOC_RESET = 0x2403 - PERF_EVENT_IOC_SET_BPF = 0x40042408 - PERF_EVENT_IOC_SET_FILTER = 0x40082406 - PERF_EVENT_IOC_SET_OUTPUT = 0x2405 - PPPIOCATTACH = 0x4004743d - PPPIOCATTCHAN = 0x40047438 - PPPIOCBRIDGECHAN = 0x40047435 - PPPIOCCONNECT = 0x4004743a - PPPIOCDETACH = 0x4004743c - PPPIOCDISCONN = 0x7439 - PPPIOCGASYNCMAP = 0x80047458 - PPPIOCGCHAN = 0x80047437 - PPPIOCGDEBUG = 0x80047441 - PPPIOCGFLAGS = 0x8004745a - PPPIOCGIDLE = 0x8010743f - PPPIOCGIDLE32 = 0x8008743f - PPPIOCGIDLE64 = 0x8010743f - PPPIOCGL2TPSTATS = 0x80487436 - PPPIOCGMRU = 0x80047453 - PPPIOCGRASYNCMAP = 0x80047455 - PPPIOCGUNIT = 0x80047456 - PPPIOCGXASYNCMAP = 0x80207450 - PPPIOCSACTIVE = 0x40107446 - PPPIOCSASYNCMAP = 0x40047457 - PPPIOCSCOMPRESS = 0x4010744d - PPPIOCSDEBUG = 0x40047440 - PPPIOCSFLAGS = 0x40047459 - PPPIOCSMAXCID = 0x40047451 - PPPIOCSMRRU = 0x4004743b - PPPIOCSMRU = 0x40047452 - PPPIOCSNPMODE = 0x4008744b - PPPIOCSPASS = 0x40107447 - PPPIOCSRASYNCMAP = 0x40047454 - PPPIOCSXASYNCMAP = 0x4020744f - PPPIOCUNBRIDGECHAN = 0x7434 - PPPIOCXFERUNIT = 0x744e - PR_SET_PTRACER_ANY = 0xffffffffffffffff - PTRACE_DISABLE_TE = 0x5010 - PTRACE_ENABLE_TE = 0x5009 - PTRACE_GET_LAST_BREAK = 0x5006 - PTRACE_OLDSETOPTIONS = 0x15 - PTRACE_PEEKDATA_AREA = 0x5003 - PTRACE_PEEKTEXT_AREA = 0x5002 - PTRACE_PEEKUSR_AREA = 0x5000 - PTRACE_PEEK_SYSTEM_CALL = 0x5007 - PTRACE_POKEDATA_AREA = 0x5005 - PTRACE_POKETEXT_AREA = 0x5004 - PTRACE_POKEUSR_AREA = 0x5001 - PTRACE_POKE_SYSTEM_CALL = 0x5008 - PTRACE_PROT = 0x15 - PTRACE_SINGLEBLOCK = 0xc - PTRACE_SYSEMU = 0x1f - PTRACE_SYSEMU_SINGLESTEP = 0x20 - PTRACE_TE_ABORT_RAND = 0x5011 - PT_ACR0 = 0x90 - PT_ACR1 = 0x94 - PT_ACR10 = 0xb8 - PT_ACR11 = 0xbc - PT_ACR12 = 0xc0 - PT_ACR13 = 0xc4 - PT_ACR14 = 0xc8 - PT_ACR15 = 0xcc - PT_ACR2 = 0x98 - PT_ACR3 = 0x9c - PT_ACR4 = 0xa0 - PT_ACR5 = 0xa4 - PT_ACR6 = 0xa8 - PT_ACR7 = 0xac - PT_ACR8 = 0xb0 - PT_ACR9 = 0xb4 - PT_CR_10 = 0x168 - PT_CR_11 = 0x170 - PT_CR_9 = 0x160 - PT_ENDREGS = 0x1af - PT_FPC = 0xd8 - PT_FPR0 = 0xe0 - PT_FPR1 = 0xe8 - PT_FPR10 = 0x130 - PT_FPR11 = 0x138 - PT_FPR12 = 0x140 - PT_FPR13 = 0x148 - PT_FPR14 = 0x150 - PT_FPR15 = 0x158 - PT_FPR2 = 0xf0 - PT_FPR3 = 0xf8 - PT_FPR4 = 0x100 - PT_FPR5 = 0x108 - PT_FPR6 = 0x110 - PT_FPR7 = 0x118 - PT_FPR8 = 0x120 - PT_FPR9 = 0x128 - PT_GPR0 = 0x10 - PT_GPR1 = 0x18 - PT_GPR10 = 0x60 - PT_GPR11 = 0x68 - PT_GPR12 = 0x70 - PT_GPR13 = 0x78 - PT_GPR14 = 0x80 - PT_GPR15 = 0x88 - PT_GPR2 = 0x20 - PT_GPR3 = 0x28 - PT_GPR4 = 0x30 - PT_GPR5 = 0x38 - PT_GPR6 = 0x40 - PT_GPR7 = 0x48 - PT_GPR8 = 0x50 - PT_GPR9 = 0x58 - PT_IEEE_IP = 0x1a8 - PT_LASTOFF = 0x1a8 - PT_ORIGGPR2 = 0xd0 - PT_PSWADDR = 0x8 - PT_PSWMASK = 0x0 - RLIMIT_AS = 0x9 - RLIMIT_MEMLOCK = 0x8 - RLIMIT_NOFILE = 0x7 - RLIMIT_NPROC = 0x6 - RLIMIT_RSS = 0x5 - RNDADDENTROPY = 0x40085203 - RNDADDTOENTCNT = 0x40045201 - RNDCLEARPOOL = 0x5206 - RNDGETENTCNT = 0x80045200 - RNDGETPOOL = 0x80085202 - RNDRESEEDCRNG = 0x5207 - RNDZAPENTCNT = 0x5204 - RTC_AIE_OFF = 0x7002 - RTC_AIE_ON = 0x7001 - RTC_ALM_READ = 0x80247008 - RTC_ALM_SET = 0x40247007 - RTC_EPOCH_READ = 0x8008700d - RTC_EPOCH_SET = 0x4008700e - RTC_IRQP_READ = 0x8008700b - RTC_IRQP_SET = 0x4008700c - RTC_PARAM_GET = 0x40187013 - RTC_PARAM_SET = 0x40187014 - RTC_PIE_OFF = 0x7006 - RTC_PIE_ON = 0x7005 - RTC_PLL_GET = 0x80207011 - RTC_PLL_SET = 0x40207012 - RTC_RD_TIME = 0x80247009 - RTC_SET_TIME = 0x4024700a - RTC_UIE_OFF = 0x7004 - RTC_UIE_ON = 0x7003 - RTC_VL_CLR = 0x7014 - RTC_VL_READ = 0x80047013 - RTC_WIE_OFF = 0x7010 - RTC_WIE_ON = 0x700f - RTC_WKALM_RD = 0x80287010 - RTC_WKALM_SET = 0x4028700f - SCM_TIMESTAMPING = 0x25 - SCM_TIMESTAMPING_OPT_STATS = 0x36 - SCM_TIMESTAMPING_PKTINFO = 0x3a - SCM_TIMESTAMPNS = 0x23 - SCM_TXTIME = 0x3d - SCM_WIFI_STATUS = 0x29 - SFD_CLOEXEC = 0x80000 - SFD_NONBLOCK = 0x800 - SIOCATMARK = 0x8905 - SIOCGPGRP = 0x8904 - SIOCGSTAMPNS_NEW = 0x80108907 - SIOCGSTAMP_NEW = 0x80108906 - SIOCINQ = 0x541b - SIOCOUTQ = 0x5411 - SIOCSPGRP = 0x8902 - SOCK_CLOEXEC = 0x80000 - SOCK_DGRAM = 0x2 - SOCK_NONBLOCK = 0x800 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0x1 - SO_ACCEPTCONN = 0x1e - SO_ATTACH_BPF = 0x32 - SO_ATTACH_REUSEPORT_CBPF = 0x33 - SO_ATTACH_REUSEPORT_EBPF = 0x34 - SO_BINDTODEVICE = 0x19 - SO_BINDTOIFINDEX = 0x3e - SO_BPF_EXTENSIONS = 0x30 - SO_BROADCAST = 0x6 - SO_BSDCOMPAT = 0xe - SO_BUF_LOCK = 0x48 - SO_BUSY_POLL = 0x2e - SO_BUSY_POLL_BUDGET = 0x46 - SO_CNX_ADVICE = 0x35 - SO_COOKIE = 0x39 - SO_DETACH_REUSEPORT_BPF = 0x44 - SO_DOMAIN = 0x27 - SO_DONTROUTE = 0x5 - SO_ERROR = 0x4 - SO_INCOMING_CPU = 0x31 - SO_INCOMING_NAPI_ID = 0x38 - SO_KEEPALIVE = 0x9 - SO_LINGER = 0xd - SO_LOCK_FILTER = 0x2c - SO_MARK = 0x24 - SO_MAX_PACING_RATE = 0x2f - SO_MEMINFO = 0x37 - SO_NETNS_COOKIE = 0x47 - SO_NOFCS = 0x2b - SO_OOBINLINE = 0xa - SO_PASSCRED = 0x10 - SO_PASSSEC = 0x22 - SO_PEEK_OFF = 0x2a - SO_PEERCRED = 0x11 - SO_PEERGROUPS = 0x3b - SO_PEERSEC = 0x1f - SO_PREFER_BUSY_POLL = 0x45 - SO_PROTOCOL = 0x26 - SO_RCVBUF = 0x8 - SO_RCVBUFFORCE = 0x21 - SO_RCVLOWAT = 0x12 - SO_RCVMARK = 0x4b - SO_RCVTIMEO = 0x14 - SO_RCVTIMEO_NEW = 0x42 - SO_RCVTIMEO_OLD = 0x14 - SO_RESERVE_MEM = 0x49 - SO_REUSEADDR = 0x2 - SO_REUSEPORT = 0xf - SO_RXQ_OVFL = 0x28 - SO_SECURITY_AUTHENTICATION = 0x16 - SO_SECURITY_ENCRYPTION_NETWORK = 0x18 - SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 - SO_SELECT_ERR_QUEUE = 0x2d - SO_SNDBUF = 0x7 - SO_SNDBUFFORCE = 0x20 - SO_SNDLOWAT = 0x13 - SO_SNDTIMEO = 0x15 - SO_SNDTIMEO_NEW = 0x43 - SO_SNDTIMEO_OLD = 0x15 - SO_TIMESTAMPING = 0x25 - SO_TIMESTAMPING_NEW = 0x41 - SO_TIMESTAMPING_OLD = 0x25 - SO_TIMESTAMPNS = 0x23 - SO_TIMESTAMPNS_NEW = 0x40 - SO_TIMESTAMPNS_OLD = 0x23 - SO_TIMESTAMP_NEW = 0x3f - SO_TXREHASH = 0x4a - SO_TXTIME = 0x3d - SO_TYPE = 0x3 - SO_WIFI_STATUS = 0x29 - SO_ZEROCOPY = 0x3c - TAB1 = 0x800 - TAB2 = 0x1000 - TAB3 = 0x1800 - TABDLY = 0x1800 - TCFLSH = 0x540b - TCGETA = 0x5405 - TCGETS = 0x5401 - TCGETS2 = 0x802c542a - TCGETX = 0x5432 - TCSAFLUSH = 0x2 - TCSBRK = 0x5409 - TCSBRKP = 0x5425 - TCSETA = 0x5406 - TCSETAF = 0x5408 - TCSETAW = 0x5407 - TCSETS = 0x5402 - TCSETS2 = 0x402c542b - TCSETSF = 0x5404 - TCSETSF2 = 0x402c542d - TCSETSW = 0x5403 - TCSETSW2 = 0x402c542c - TCSETX = 0x5433 - TCSETXF = 0x5434 - TCSETXW = 0x5435 - TCXONC = 0x540a - TFD_CLOEXEC = 0x80000 - TFD_NONBLOCK = 0x800 - TIOCCBRK = 0x5428 - TIOCCONS = 0x541d - TIOCEXCL = 0x540c - TIOCGDEV = 0x80045432 - TIOCGETD = 0x5424 - TIOCGEXCL = 0x80045440 - TIOCGICOUNT = 0x545d - TIOCGISO7816 = 0x80285442 - TIOCGLCKTRMIOS = 0x5456 - TIOCGPGRP = 0x540f - TIOCGPKT = 0x80045438 - TIOCGPTLCK = 0x80045439 - TIOCGPTN = 0x80045430 - TIOCGPTPEER = 0x5441 - TIOCGRS485 = 0x542e - TIOCGSERIAL = 0x541e - TIOCGSID = 0x5429 - TIOCGSOFTCAR = 0x5419 - TIOCGWINSZ = 0x5413 - TIOCINQ = 0x541b - TIOCLINUX = 0x541c - TIOCMBIC = 0x5417 - TIOCMBIS = 0x5416 - TIOCMGET = 0x5415 - TIOCMIWAIT = 0x545c - TIOCMSET = 0x5418 - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x5422 - TIOCNXCL = 0x540d - TIOCOUTQ = 0x5411 - TIOCPKT = 0x5420 - TIOCSBRK = 0x5427 - TIOCSCTTY = 0x540e - TIOCSERCONFIG = 0x5453 - TIOCSERGETLSR = 0x5459 - TIOCSERGETMULTI = 0x545a - TIOCSERGSTRUCT = 0x5458 - TIOCSERGWILD = 0x5454 - TIOCSERSETMULTI = 0x545b - TIOCSERSWILD = 0x5455 - TIOCSER_TEMT = 0x1 - TIOCSETD = 0x5423 - TIOCSIG = 0x40045436 - TIOCSISO7816 = 0xc0285443 - TIOCSLCKTRMIOS = 0x5457 - TIOCSPGRP = 0x5410 - TIOCSPTLCK = 0x40045431 - TIOCSRS485 = 0x542f - TIOCSSERIAL = 0x541f - TIOCSSOFTCAR = 0x541a - TIOCSTI = 0x5412 - TIOCSWINSZ = 0x5414 - TIOCVHANGUP = 0x5437 - TOSTOP = 0x100 - TUNATTACHFILTER = 0x401054d5 - TUNDETACHFILTER = 0x401054d6 - TUNGETDEVNETNS = 0x54e3 - TUNGETFEATURES = 0x800454cf - TUNGETFILTER = 0x801054db - TUNGETIFF = 0x800454d2 - TUNGETSNDBUF = 0x800454d3 - TUNGETVNETBE = 0x800454df - TUNGETVNETHDRSZ = 0x800454d7 - TUNGETVNETLE = 0x800454dd - TUNSETCARRIER = 0x400454e2 - TUNSETDEBUG = 0x400454c9 - TUNSETFILTEREBPF = 0x800454e1 - TUNSETGROUP = 0x400454ce - TUNSETIFF = 0x400454ca - TUNSETIFINDEX = 0x400454da - TUNSETLINK = 0x400454cd - TUNSETNOCSUM = 0x400454c8 - TUNSETOFFLOAD = 0x400454d0 - TUNSETOWNER = 0x400454cc - TUNSETPERSIST = 0x400454cb - TUNSETQUEUE = 0x400454d9 - TUNSETSNDBUF = 0x400454d4 - TUNSETSTEERINGEBPF = 0x800454e0 - TUNSETTXFILTER = 0x400454d1 - TUNSETVNETBE = 0x400454de - TUNSETVNETHDRSZ = 0x400454d8 - TUNSETVNETLE = 0x400454dc - UBI_IOCATT = 0x40186f40 - UBI_IOCDET = 0x40046f41 - UBI_IOCEBCH = 0x40044f02 - UBI_IOCEBER = 0x40044f01 - UBI_IOCEBISMAP = 0x80044f05 - UBI_IOCEBMAP = 0x40084f03 - UBI_IOCEBUNMAP = 0x40044f04 - UBI_IOCMKVOL = 0x40986f00 - UBI_IOCRMVOL = 0x40046f01 - UBI_IOCRNVOL = 0x51106f03 - UBI_IOCRPEB = 0x40046f04 - UBI_IOCRSVOL = 0x400c6f02 - UBI_IOCSETVOLPROP = 0x40104f06 - UBI_IOCSPEB = 0x40046f05 - UBI_IOCVOLCRBLK = 0x40804f07 - UBI_IOCVOLRMBLK = 0x4f08 - UBI_IOCVOLUP = 0x40084f00 - VDISCARD = 0xd - VEOF = 0x4 - VEOL = 0xb - VEOL2 = 0x10 - VMIN = 0x6 - VREPRINT = 0xc - VSTART = 0x8 - VSTOP = 0x9 - VSUSP = 0xa - VSWTC = 0x7 - VT1 = 0x4000 - VTDLY = 0x4000 - VTIME = 0x5 - VWERASE = 0xe - WDIOC_GETBOOTSTATUS = 0x80045702 - WDIOC_GETPRETIMEOUT = 0x80045709 - WDIOC_GETSTATUS = 0x80045701 - WDIOC_GETSUPPORT = 0x80285700 - WDIOC_GETTEMP = 0x80045703 - WDIOC_GETTIMELEFT = 0x8004570a - WDIOC_GETTIMEOUT = 0x80045707 - WDIOC_KEEPALIVE = 0x80045705 - WDIOC_SETOPTIONS = 0x80045704 - WORDSIZE = 0x40 - XCASE = 0x4 - XTABS = 0x1800 - _HIDIOCGRAWNAME = 0x80804804 - _HIDIOCGRAWPHYS = 0x80404805 - _HIDIOCGRAWUNIQ = 0x80404808 -) - -// Errors -const ( - EADDRINUSE = syscall.Errno(0x62) - EADDRNOTAVAIL = syscall.Errno(0x63) - EADV = syscall.Errno(0x44) - EAFNOSUPPORT = syscall.Errno(0x61) - EALREADY = syscall.Errno(0x72) - EBADE = syscall.Errno(0x34) - EBADFD = syscall.Errno(0x4d) - EBADMSG = syscall.Errno(0x4a) - EBADR = syscall.Errno(0x35) - EBADRQC = syscall.Errno(0x38) - EBADSLT = syscall.Errno(0x39) - EBFONT = syscall.Errno(0x3b) - ECANCELED = syscall.Errno(0x7d) - ECHRNG = syscall.Errno(0x2c) - ECOMM = syscall.Errno(0x46) - ECONNABORTED = syscall.Errno(0x67) - ECONNREFUSED = syscall.Errno(0x6f) - ECONNRESET = syscall.Errno(0x68) - EDEADLK = syscall.Errno(0x23) - EDEADLOCK = syscall.Errno(0x23) - EDESTADDRREQ = syscall.Errno(0x59) - EDOTDOT = syscall.Errno(0x49) - EDQUOT = syscall.Errno(0x7a) - EHOSTDOWN = syscall.Errno(0x70) - EHOSTUNREACH = syscall.Errno(0x71) - EHWPOISON = syscall.Errno(0x85) - EIDRM = syscall.Errno(0x2b) - EILSEQ = syscall.Errno(0x54) - EINPROGRESS = syscall.Errno(0x73) - EISCONN = syscall.Errno(0x6a) - EISNAM = syscall.Errno(0x78) - EKEYEXPIRED = syscall.Errno(0x7f) - EKEYREJECTED = syscall.Errno(0x81) - EKEYREVOKED = syscall.Errno(0x80) - EL2HLT = syscall.Errno(0x33) - EL2NSYNC = syscall.Errno(0x2d) - EL3HLT = syscall.Errno(0x2e) - EL3RST = syscall.Errno(0x2f) - ELIBACC = syscall.Errno(0x4f) - ELIBBAD = syscall.Errno(0x50) - ELIBEXEC = syscall.Errno(0x53) - ELIBMAX = syscall.Errno(0x52) - ELIBSCN = syscall.Errno(0x51) - ELNRNG = syscall.Errno(0x30) - ELOOP = syscall.Errno(0x28) - EMEDIUMTYPE = syscall.Errno(0x7c) - EMSGSIZE = syscall.Errno(0x5a) - EMULTIHOP = syscall.Errno(0x48) - ENAMETOOLONG = syscall.Errno(0x24) - ENAVAIL = syscall.Errno(0x77) - ENETDOWN = syscall.Errno(0x64) - ENETRESET = syscall.Errno(0x66) - ENETUNREACH = syscall.Errno(0x65) - ENOANO = syscall.Errno(0x37) - ENOBUFS = syscall.Errno(0x69) - ENOCSI = syscall.Errno(0x32) - ENODATA = syscall.Errno(0x3d) - ENOKEY = syscall.Errno(0x7e) - ENOLCK = syscall.Errno(0x25) - ENOLINK = syscall.Errno(0x43) - ENOMEDIUM = syscall.Errno(0x7b) - ENOMSG = syscall.Errno(0x2a) - ENONET = syscall.Errno(0x40) - ENOPKG = syscall.Errno(0x41) - ENOPROTOOPT = syscall.Errno(0x5c) - ENOSR = syscall.Errno(0x3f) - ENOSTR = syscall.Errno(0x3c) - ENOSYS = syscall.Errno(0x26) - ENOTCONN = syscall.Errno(0x6b) - ENOTEMPTY = syscall.Errno(0x27) - ENOTNAM = syscall.Errno(0x76) - ENOTRECOVERABLE = syscall.Errno(0x83) - ENOTSOCK = syscall.Errno(0x58) - ENOTSUP = syscall.Errno(0x5f) - ENOTUNIQ = syscall.Errno(0x4c) - EOPNOTSUPP = syscall.Errno(0x5f) - EOVERFLOW = syscall.Errno(0x4b) - EOWNERDEAD = syscall.Errno(0x82) - EPFNOSUPPORT = syscall.Errno(0x60) - EPROTO = syscall.Errno(0x47) - EPROTONOSUPPORT = syscall.Errno(0x5d) - EPROTOTYPE = syscall.Errno(0x5b) - EREMCHG = syscall.Errno(0x4e) - EREMOTE = syscall.Errno(0x42) - EREMOTEIO = syscall.Errno(0x79) - ERESTART = syscall.Errno(0x55) - ERFKILL = syscall.Errno(0x84) - ESHUTDOWN = syscall.Errno(0x6c) - ESOCKTNOSUPPORT = syscall.Errno(0x5e) - ESRMNT = syscall.Errno(0x45) - ESTALE = syscall.Errno(0x74) - ESTRPIPE = syscall.Errno(0x56) - ETIME = syscall.Errno(0x3e) - ETIMEDOUT = syscall.Errno(0x6e) - ETOOMANYREFS = syscall.Errno(0x6d) - EUCLEAN = syscall.Errno(0x75) - EUNATCH = syscall.Errno(0x31) - EUSERS = syscall.Errno(0x57) - EXFULL = syscall.Errno(0x36) -) - -// Signals -const ( - SIGBUS = syscall.Signal(0x7) - SIGCHLD = syscall.Signal(0x11) - SIGCLD = syscall.Signal(0x11) - SIGCONT = syscall.Signal(0x12) - SIGIO = syscall.Signal(0x1d) - SIGPOLL = syscall.Signal(0x1d) - SIGPROF = syscall.Signal(0x1b) - SIGPWR = syscall.Signal(0x1e) - SIGSTKFLT = syscall.Signal(0x10) - SIGSTOP = syscall.Signal(0x13) - SIGSYS = syscall.Signal(0x1f) - SIGTSTP = syscall.Signal(0x14) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x17) - SIGUSR1 = syscall.Signal(0xa) - SIGUSR2 = syscall.Signal(0xc) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "no such device or address"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EAGAIN", "resource temporarily unavailable"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device or resource busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "invalid cross-device link"}, - {19, "ENODEV", "no such device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "numerical result out of range"}, - {35, "EDEADLK", "resource deadlock avoided"}, - {36, "ENAMETOOLONG", "file name too long"}, - {37, "ENOLCK", "no locks available"}, - {38, "ENOSYS", "function not implemented"}, - {39, "ENOTEMPTY", "directory not empty"}, - {40, "ELOOP", "too many levels of symbolic links"}, - {42, "ENOMSG", "no message of desired type"}, - {43, "EIDRM", "identifier removed"}, - {44, "ECHRNG", "channel number out of range"}, - {45, "EL2NSYNC", "level 2 not synchronized"}, - {46, "EL3HLT", "level 3 halted"}, - {47, "EL3RST", "level 3 reset"}, - {48, "ELNRNG", "link number out of range"}, - {49, "EUNATCH", "protocol driver not attached"}, - {50, "ENOCSI", "no CSI structure available"}, - {51, "EL2HLT", "level 2 halted"}, - {52, "EBADE", "invalid exchange"}, - {53, "EBADR", "invalid request descriptor"}, - {54, "EXFULL", "exchange full"}, - {55, "ENOANO", "no anode"}, - {56, "EBADRQC", "invalid request code"}, - {57, "EBADSLT", "invalid slot"}, - {59, "EBFONT", "bad font file format"}, - {60, "ENOSTR", "device not a stream"}, - {61, "ENODATA", "no data available"}, - {62, "ETIME", "timer expired"}, - {63, "ENOSR", "out of streams resources"}, - {64, "ENONET", "machine is not on the network"}, - {65, "ENOPKG", "package not installed"}, - {66, "EREMOTE", "object is remote"}, - {67, "ENOLINK", "link has been severed"}, - {68, "EADV", "advertise error"}, - {69, "ESRMNT", "srmount error"}, - {70, "ECOMM", "communication error on send"}, - {71, "EPROTO", "protocol error"}, - {72, "EMULTIHOP", "multihop attempted"}, - {73, "EDOTDOT", "RFS specific error"}, - {74, "EBADMSG", "bad message"}, - {75, "EOVERFLOW", "value too large for defined data type"}, - {76, "ENOTUNIQ", "name not unique on network"}, - {77, "EBADFD", "file descriptor in bad state"}, - {78, "EREMCHG", "remote address changed"}, - {79, "ELIBACC", "can not access a needed shared library"}, - {80, "ELIBBAD", "accessing a corrupted shared library"}, - {81, "ELIBSCN", ".lib section in a.out corrupted"}, - {82, "ELIBMAX", "attempting to link in too many shared libraries"}, - {83, "ELIBEXEC", "cannot exec a shared library directly"}, - {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, - {85, "ERESTART", "interrupted system call should be restarted"}, - {86, "ESTRPIPE", "streams pipe error"}, - {87, "EUSERS", "too many users"}, - {88, "ENOTSOCK", "socket operation on non-socket"}, - {89, "EDESTADDRREQ", "destination address required"}, - {90, "EMSGSIZE", "message too long"}, - {91, "EPROTOTYPE", "protocol wrong type for socket"}, - {92, "ENOPROTOOPT", "protocol not available"}, - {93, "EPROTONOSUPPORT", "protocol not supported"}, - {94, "ESOCKTNOSUPPORT", "socket type not supported"}, - {95, "ENOTSUP", "operation not supported"}, - {96, "EPFNOSUPPORT", "protocol family not supported"}, - {97, "EAFNOSUPPORT", "address family not supported by protocol"}, - {98, "EADDRINUSE", "address already in use"}, - {99, "EADDRNOTAVAIL", "cannot assign requested address"}, - {100, "ENETDOWN", "network is down"}, - {101, "ENETUNREACH", "network is unreachable"}, - {102, "ENETRESET", "network dropped connection on reset"}, - {103, "ECONNABORTED", "software caused connection abort"}, - {104, "ECONNRESET", "connection reset by peer"}, - {105, "ENOBUFS", "no buffer space available"}, - {106, "EISCONN", "transport endpoint is already connected"}, - {107, "ENOTCONN", "transport endpoint is not connected"}, - {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, - {109, "ETOOMANYREFS", "too many references: cannot splice"}, - {110, "ETIMEDOUT", "connection timed out"}, - {111, "ECONNREFUSED", "connection refused"}, - {112, "EHOSTDOWN", "host is down"}, - {113, "EHOSTUNREACH", "no route to host"}, - {114, "EALREADY", "operation already in progress"}, - {115, "EINPROGRESS", "operation now in progress"}, - {116, "ESTALE", "stale file handle"}, - {117, "EUCLEAN", "structure needs cleaning"}, - {118, "ENOTNAM", "not a XENIX named type file"}, - {119, "ENAVAIL", "no XENIX semaphores available"}, - {120, "EISNAM", "is a named type file"}, - {121, "EREMOTEIO", "remote I/O error"}, - {122, "EDQUOT", "disk quota exceeded"}, - {123, "ENOMEDIUM", "no medium found"}, - {124, "EMEDIUMTYPE", "wrong medium type"}, - {125, "ECANCELED", "operation canceled"}, - {126, "ENOKEY", "required key not available"}, - {127, "EKEYEXPIRED", "key has expired"}, - {128, "EKEYREVOKED", "key has been revoked"}, - {129, "EKEYREJECTED", "key was rejected by service"}, - {130, "EOWNERDEAD", "owner died"}, - {131, "ENOTRECOVERABLE", "state not recoverable"}, - {132, "ERFKILL", "operation not possible due to RF-kill"}, - {133, "EHWPOISON", "memory page has hardware error"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/breakpoint trap"}, - {6, "SIGABRT", "aborted"}, - {7, "SIGBUS", "bus error"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGUSR1", "user defined signal 1"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGUSR2", "user defined signal 2"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGSTKFLT", "stack fault"}, - {17, "SIGCHLD", "child exited"}, - {18, "SIGCONT", "continued"}, - {19, "SIGSTOP", "stopped (signal)"}, - {20, "SIGTSTP", "stopped"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGURG", "urgent I/O condition"}, - {24, "SIGXCPU", "CPU time limit exceeded"}, - {25, "SIGXFSZ", "file size limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window changed"}, - {29, "SIGIO", "I/O possible"}, - {30, "SIGPWR", "power failure"}, - {31, "SIGSYS", "bad system call"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go deleted file mode 100644 index 98a6e5f..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +++ /dev/null @@ -1,885 +0,0 @@ -// mkerrors.sh -Wall -Werror -static -I/tmp/sparc64/include -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build sparc64 && linux -// +build sparc64,linux - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/sparc64/include _const.go - -package unix - -import "syscall" - -const ( - ASI_LEON_DFLUSH = 0x11 - ASI_LEON_IFLUSH = 0x10 - ASI_LEON_MMUFLUSH = 0x18 - B1000000 = 0x1008 - B115200 = 0x1002 - B1152000 = 0x1009 - B1500000 = 0x100a - B2000000 = 0x100b - B230400 = 0x1003 - B2500000 = 0x100c - B3000000 = 0x100d - B3500000 = 0x100e - B4000000 = 0x100f - B460800 = 0x1004 - B500000 = 0x1005 - B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 - BLKBSZGET = 0x40081270 - BLKBSZSET = 0x80081271 - BLKFLSBUF = 0x20001261 - BLKFRAGET = 0x20001265 - BLKFRASET = 0x20001264 - BLKGETSIZE = 0x20001260 - BLKGETSIZE64 = 0x40081272 - BLKPBSZGET = 0x2000127b - BLKRAGET = 0x20001263 - BLKRASET = 0x20001262 - BLKROGET = 0x2000125e - BLKROSET = 0x2000125d - BLKRRPART = 0x2000125f - BLKSECTGET = 0x20001267 - BLKSECTSET = 0x20001266 - BLKSSZGET = 0x20001268 - BOTHER = 0x1000 - BS1 = 0x2000 - BSDLY = 0x2000 - CBAUD = 0x100f - CBAUDEX = 0x1000 - CIBAUD = 0x100f0000 - CLOCAL = 0x800 - CR1 = 0x200 - CR2 = 0x400 - CR3 = 0x600 - CRDLY = 0x600 - CREAD = 0x80 - CS6 = 0x10 - CS7 = 0x20 - CS8 = 0x30 - CSIZE = 0x30 - CSTOPB = 0x40 - ECCGETLAYOUT = 0x41484d11 - ECCGETSTATS = 0x40104d12 - ECHOCTL = 0x200 - ECHOE = 0x10 - ECHOK = 0x20 - ECHOKE = 0x800 - ECHONL = 0x40 - ECHOPRT = 0x400 - EFD_CLOEXEC = 0x400000 - EFD_NONBLOCK = 0x4000 - EMT_TAGOVF = 0x1 - EPOLL_CLOEXEC = 0x400000 - EXTPROC = 0x10000 - FF1 = 0x8000 - FFDLY = 0x8000 - FICLONE = 0x80049409 - FICLONERANGE = 0x8020940d - FLUSHO = 0x1000 - FS_IOC_ENABLE_VERITY = 0x80806685 - FS_IOC_GETFLAGS = 0x40086601 - FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b - FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 - FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 - FS_IOC_SETFLAGS = 0x80086602 - FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 - F_GETLK = 0x7 - F_GETLK64 = 0x7 - F_GETOWN = 0x5 - F_RDLCK = 0x1 - F_SETLK = 0x8 - F_SETLK64 = 0x8 - F_SETLKW = 0x9 - F_SETLKW64 = 0x9 - F_SETOWN = 0x6 - F_UNLCK = 0x3 - F_WRLCK = 0x2 - HIDIOCGRAWINFO = 0x40084803 - HIDIOCGRDESC = 0x50044802 - HIDIOCGRDESCSIZE = 0x40044801 - HUPCL = 0x400 - ICANON = 0x2 - IEXTEN = 0x8000 - IN_CLOEXEC = 0x400000 - IN_NONBLOCK = 0x4000 - IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 - ISIG = 0x1 - IUCLC = 0x200 - IXOFF = 0x1000 - IXON = 0x400 - MAP_ANON = 0x20 - MAP_ANONYMOUS = 0x20 - MAP_DENYWRITE = 0x800 - MAP_EXECUTABLE = 0x1000 - MAP_GROWSDOWN = 0x200 - MAP_HUGETLB = 0x40000 - MAP_LOCKED = 0x100 - MAP_NONBLOCK = 0x10000 - MAP_NORESERVE = 0x40 - MAP_POPULATE = 0x8000 - MAP_RENAME = 0x20 - MAP_STACK = 0x20000 - MAP_SYNC = 0x80000 - MCL_CURRENT = 0x2000 - MCL_FUTURE = 0x4000 - MCL_ONFAULT = 0x8000 - MEMERASE = 0x80084d02 - MEMERASE64 = 0x80104d14 - MEMGETBADBLOCK = 0x80084d0b - MEMGETINFO = 0x40204d01 - MEMGETOOBSEL = 0x40c84d0a - MEMGETREGIONCOUNT = 0x40044d07 - MEMISLOCKED = 0x40084d17 - MEMLOCK = 0x80084d05 - MEMREADOOB = 0xc0104d04 - MEMSETBADBLOCK = 0x80084d0c - MEMUNLOCK = 0x80084d06 - MEMWRITEOOB = 0xc0104d03 - MTDFILEMODE = 0x20004d13 - NFDBITS = 0x40 - NLDLY = 0x100 - NOFLSH = 0x80 - NS_GET_NSTYPE = 0x2000b703 - NS_GET_OWNER_UID = 0x2000b704 - NS_GET_PARENT = 0x2000b702 - NS_GET_USERNS = 0x2000b701 - OLCUC = 0x2 - ONLCR = 0x4 - OTPERASE = 0x800c4d19 - OTPGETREGIONCOUNT = 0x80044d0e - OTPGETREGIONINFO = 0x800c4d0f - OTPLOCK = 0x400c4d10 - OTPSELECT = 0x40044d0d - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x400000 - O_CREAT = 0x200 - O_DIRECT = 0x100000 - O_DIRECTORY = 0x10000 - O_DSYNC = 0x2000 - O_EXCL = 0x800 - O_FSYNC = 0x802000 - O_LARGEFILE = 0x0 - O_NDELAY = 0x4004 - O_NOATIME = 0x200000 - O_NOCTTY = 0x8000 - O_NOFOLLOW = 0x20000 - O_NONBLOCK = 0x4000 - O_PATH = 0x1000000 - O_RSYNC = 0x802000 - O_SYNC = 0x802000 - O_TMPFILE = 0x2010000 - O_TRUNC = 0x400 - PARENB = 0x100 - PARODD = 0x200 - PENDIN = 0x4000 - PERF_EVENT_IOC_DISABLE = 0x20002401 - PERF_EVENT_IOC_ENABLE = 0x20002400 - PERF_EVENT_IOC_ID = 0x40082407 - PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b - PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 - PERF_EVENT_IOC_PERIOD = 0x80082404 - PERF_EVENT_IOC_QUERY_BPF = 0xc008240a - PERF_EVENT_IOC_REFRESH = 0x20002402 - PERF_EVENT_IOC_RESET = 0x20002403 - PERF_EVENT_IOC_SET_BPF = 0x80042408 - PERF_EVENT_IOC_SET_FILTER = 0x80082406 - PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 - PPPIOCATTACH = 0x8004743d - PPPIOCATTCHAN = 0x80047438 - PPPIOCBRIDGECHAN = 0x80047435 - PPPIOCCONNECT = 0x8004743a - PPPIOCDETACH = 0x8004743c - PPPIOCDISCONN = 0x20007439 - PPPIOCGASYNCMAP = 0x40047458 - PPPIOCGCHAN = 0x40047437 - PPPIOCGDEBUG = 0x40047441 - PPPIOCGFLAGS = 0x4004745a - PPPIOCGIDLE = 0x4010743f - PPPIOCGIDLE32 = 0x4008743f - PPPIOCGIDLE64 = 0x4010743f - PPPIOCGL2TPSTATS = 0x40487436 - PPPIOCGMRU = 0x40047453 - PPPIOCGRASYNCMAP = 0x40047455 - PPPIOCGUNIT = 0x40047456 - PPPIOCGXASYNCMAP = 0x40207450 - PPPIOCSACTIVE = 0x80107446 - PPPIOCSASYNCMAP = 0x80047457 - PPPIOCSCOMPRESS = 0x8010744d - PPPIOCSDEBUG = 0x80047440 - PPPIOCSFLAGS = 0x80047459 - PPPIOCSMAXCID = 0x80047451 - PPPIOCSMRRU = 0x8004743b - PPPIOCSMRU = 0x80047452 - PPPIOCSNPMODE = 0x8008744b - PPPIOCSPASS = 0x80107447 - PPPIOCSRASYNCMAP = 0x80047454 - PPPIOCSXASYNCMAP = 0x8020744f - PPPIOCUNBRIDGECHAN = 0x20007434 - PPPIOCXFERUNIT = 0x2000744e - PR_SET_PTRACER_ANY = 0xffffffffffffffff - PTRACE_GETFPAREGS = 0x14 - PTRACE_GETFPREGS = 0xe - PTRACE_GETFPREGS64 = 0x19 - PTRACE_GETREGS64 = 0x16 - PTRACE_READDATA = 0x10 - PTRACE_READTEXT = 0x12 - PTRACE_SETFPAREGS = 0x15 - PTRACE_SETFPREGS = 0xf - PTRACE_SETFPREGS64 = 0x1a - PTRACE_SETREGS64 = 0x17 - PTRACE_SPARC_DETACH = 0xb - PTRACE_WRITEDATA = 0x11 - PTRACE_WRITETEXT = 0x13 - PT_FP = 0x48 - PT_G0 = 0x10 - PT_G1 = 0x14 - PT_G2 = 0x18 - PT_G3 = 0x1c - PT_G4 = 0x20 - PT_G5 = 0x24 - PT_G6 = 0x28 - PT_G7 = 0x2c - PT_I0 = 0x30 - PT_I1 = 0x34 - PT_I2 = 0x38 - PT_I3 = 0x3c - PT_I4 = 0x40 - PT_I5 = 0x44 - PT_I6 = 0x48 - PT_I7 = 0x4c - PT_NPC = 0x8 - PT_PC = 0x4 - PT_PSR = 0x0 - PT_REGS_MAGIC = 0x57ac6c00 - PT_TNPC = 0x90 - PT_TPC = 0x88 - PT_TSTATE = 0x80 - PT_V9_FP = 0x70 - PT_V9_G0 = 0x0 - PT_V9_G1 = 0x8 - PT_V9_G2 = 0x10 - PT_V9_G3 = 0x18 - PT_V9_G4 = 0x20 - PT_V9_G5 = 0x28 - PT_V9_G6 = 0x30 - PT_V9_G7 = 0x38 - PT_V9_I0 = 0x40 - PT_V9_I1 = 0x48 - PT_V9_I2 = 0x50 - PT_V9_I3 = 0x58 - PT_V9_I4 = 0x60 - PT_V9_I5 = 0x68 - PT_V9_I6 = 0x70 - PT_V9_I7 = 0x78 - PT_V9_MAGIC = 0x9c - PT_V9_TNPC = 0x90 - PT_V9_TPC = 0x88 - PT_V9_TSTATE = 0x80 - PT_V9_Y = 0x98 - PT_WIM = 0x10 - PT_Y = 0xc - RLIMIT_AS = 0x9 - RLIMIT_MEMLOCK = 0x8 - RLIMIT_NOFILE = 0x6 - RLIMIT_NPROC = 0x7 - RLIMIT_RSS = 0x5 - RNDADDENTROPY = 0x80085203 - RNDADDTOENTCNT = 0x80045201 - RNDCLEARPOOL = 0x20005206 - RNDGETENTCNT = 0x40045200 - RNDGETPOOL = 0x40085202 - RNDRESEEDCRNG = 0x20005207 - RNDZAPENTCNT = 0x20005204 - RTC_AIE_OFF = 0x20007002 - RTC_AIE_ON = 0x20007001 - RTC_ALM_READ = 0x40247008 - RTC_ALM_SET = 0x80247007 - RTC_EPOCH_READ = 0x4008700d - RTC_EPOCH_SET = 0x8008700e - RTC_IRQP_READ = 0x4008700b - RTC_IRQP_SET = 0x8008700c - RTC_PARAM_GET = 0x80187013 - RTC_PARAM_SET = 0x80187014 - RTC_PIE_OFF = 0x20007006 - RTC_PIE_ON = 0x20007005 - RTC_PLL_GET = 0x40207011 - RTC_PLL_SET = 0x80207012 - RTC_RD_TIME = 0x40247009 - RTC_SET_TIME = 0x8024700a - RTC_UIE_OFF = 0x20007004 - RTC_UIE_ON = 0x20007003 - RTC_VL_CLR = 0x20007014 - RTC_VL_READ = 0x40047013 - RTC_WIE_OFF = 0x20007010 - RTC_WIE_ON = 0x2000700f - RTC_WKALM_RD = 0x40287010 - RTC_WKALM_SET = 0x8028700f - SCM_TIMESTAMPING = 0x23 - SCM_TIMESTAMPING_OPT_STATS = 0x38 - SCM_TIMESTAMPING_PKTINFO = 0x3c - SCM_TIMESTAMPNS = 0x21 - SCM_TXTIME = 0x3f - SCM_WIFI_STATUS = 0x25 - SFD_CLOEXEC = 0x400000 - SFD_NONBLOCK = 0x4000 - SIOCATMARK = 0x8905 - SIOCGPGRP = 0x8904 - SIOCGSTAMPNS_NEW = 0x40108907 - SIOCGSTAMP_NEW = 0x40108906 - SIOCINQ = 0x4004667f - SIOCOUTQ = 0x40047473 - SIOCSPGRP = 0x8902 - SOCK_CLOEXEC = 0x400000 - SOCK_DGRAM = 0x2 - SOCK_NONBLOCK = 0x4000 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0xffff - SO_ACCEPTCONN = 0x8000 - SO_ATTACH_BPF = 0x34 - SO_ATTACH_REUSEPORT_CBPF = 0x35 - SO_ATTACH_REUSEPORT_EBPF = 0x36 - SO_BINDTODEVICE = 0xd - SO_BINDTOIFINDEX = 0x41 - SO_BPF_EXTENSIONS = 0x32 - SO_BROADCAST = 0x20 - SO_BSDCOMPAT = 0x400 - SO_BUF_LOCK = 0x51 - SO_BUSY_POLL = 0x30 - SO_BUSY_POLL_BUDGET = 0x49 - SO_CNX_ADVICE = 0x37 - SO_COOKIE = 0x3b - SO_DETACH_REUSEPORT_BPF = 0x47 - SO_DOMAIN = 0x1029 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_INCOMING_CPU = 0x33 - SO_INCOMING_NAPI_ID = 0x3a - SO_KEEPALIVE = 0x8 - SO_LINGER = 0x80 - SO_LOCK_FILTER = 0x28 - SO_MARK = 0x22 - SO_MAX_PACING_RATE = 0x31 - SO_MEMINFO = 0x39 - SO_NETNS_COOKIE = 0x50 - SO_NOFCS = 0x27 - SO_OOBINLINE = 0x100 - SO_PASSCRED = 0x2 - SO_PASSSEC = 0x1f - SO_PEEK_OFF = 0x26 - SO_PEERCRED = 0x40 - SO_PEERGROUPS = 0x3d - SO_PEERSEC = 0x1e - SO_PREFER_BUSY_POLL = 0x48 - SO_PROTOCOL = 0x1028 - SO_RCVBUF = 0x1002 - SO_RCVBUFFORCE = 0x100b - SO_RCVLOWAT = 0x800 - SO_RCVMARK = 0x54 - SO_RCVTIMEO = 0x2000 - SO_RCVTIMEO_NEW = 0x44 - SO_RCVTIMEO_OLD = 0x2000 - SO_RESERVE_MEM = 0x52 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_RXQ_OVFL = 0x24 - SO_SECURITY_AUTHENTICATION = 0x5001 - SO_SECURITY_ENCRYPTION_NETWORK = 0x5004 - SO_SECURITY_ENCRYPTION_TRANSPORT = 0x5002 - SO_SELECT_ERR_QUEUE = 0x29 - SO_SNDBUF = 0x1001 - SO_SNDBUFFORCE = 0x100a - SO_SNDLOWAT = 0x1000 - SO_SNDTIMEO = 0x4000 - SO_SNDTIMEO_NEW = 0x45 - SO_SNDTIMEO_OLD = 0x4000 - SO_TIMESTAMPING = 0x23 - SO_TIMESTAMPING_NEW = 0x43 - SO_TIMESTAMPING_OLD = 0x23 - SO_TIMESTAMPNS = 0x21 - SO_TIMESTAMPNS_NEW = 0x42 - SO_TIMESTAMPNS_OLD = 0x21 - SO_TIMESTAMP_NEW = 0x46 - SO_TXREHASH = 0x53 - SO_TXTIME = 0x3f - SO_TYPE = 0x1008 - SO_WIFI_STATUS = 0x25 - SO_ZEROCOPY = 0x3e - TAB1 = 0x800 - TAB2 = 0x1000 - TAB3 = 0x1800 - TABDLY = 0x1800 - TCFLSH = 0x20005407 - TCGETA = 0x40125401 - TCGETS = 0x40245408 - TCGETS2 = 0x402c540c - TCSAFLUSH = 0x2 - TCSBRK = 0x20005405 - TCSBRKP = 0x5425 - TCSETA = 0x80125402 - TCSETAF = 0x80125404 - TCSETAW = 0x80125403 - TCSETS = 0x80245409 - TCSETS2 = 0x802c540d - TCSETSF = 0x8024540b - TCSETSF2 = 0x802c540f - TCSETSW = 0x8024540a - TCSETSW2 = 0x802c540e - TCXONC = 0x20005406 - TFD_CLOEXEC = 0x400000 - TFD_NONBLOCK = 0x4000 - TIOCCBRK = 0x2000747a - TIOCCONS = 0x20007424 - TIOCEXCL = 0x2000740d - TIOCGDEV = 0x40045432 - TIOCGETD = 0x40047400 - TIOCGEXCL = 0x40045440 - TIOCGICOUNT = 0x545d - TIOCGISO7816 = 0x40285443 - TIOCGLCKTRMIOS = 0x5456 - TIOCGPGRP = 0x40047483 - TIOCGPKT = 0x40045438 - TIOCGPTLCK = 0x40045439 - TIOCGPTN = 0x40047486 - TIOCGPTPEER = 0x20007489 - TIOCGRS485 = 0x40205441 - TIOCGSERIAL = 0x541e - TIOCGSID = 0x40047485 - TIOCGSOFTCAR = 0x40047464 - TIOCGWINSZ = 0x40087468 - TIOCINQ = 0x4004667f - TIOCLINUX = 0x541c - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGET = 0x4004746a - TIOCMIWAIT = 0x545c - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCSBRK = 0x2000747b - TIOCSCTTY = 0x20007484 - TIOCSERCONFIG = 0x5453 - TIOCSERGETLSR = 0x5459 - TIOCSERGETMULTI = 0x545a - TIOCSERGSTRUCT = 0x5458 - TIOCSERGWILD = 0x5454 - TIOCSERSETMULTI = 0x545b - TIOCSERSWILD = 0x5455 - TIOCSETD = 0x80047401 - TIOCSIG = 0x80047488 - TIOCSISO7816 = 0xc0285444 - TIOCSLCKTRMIOS = 0x5457 - TIOCSPGRP = 0x80047482 - TIOCSPTLCK = 0x80047487 - TIOCSRS485 = 0xc0205442 - TIOCSSERIAL = 0x541f - TIOCSSOFTCAR = 0x80047465 - TIOCSTART = 0x2000746e - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCVHANGUP = 0x20005437 - TOSTOP = 0x100 - TUNATTACHFILTER = 0x801054d5 - TUNDETACHFILTER = 0x801054d6 - TUNGETDEVNETNS = 0x200054e3 - TUNGETFEATURES = 0x400454cf - TUNGETFILTER = 0x401054db - TUNGETIFF = 0x400454d2 - TUNGETSNDBUF = 0x400454d3 - TUNGETVNETBE = 0x400454df - TUNGETVNETHDRSZ = 0x400454d7 - TUNGETVNETLE = 0x400454dd - TUNSETCARRIER = 0x800454e2 - TUNSETDEBUG = 0x800454c9 - TUNSETFILTEREBPF = 0x400454e1 - TUNSETGROUP = 0x800454ce - TUNSETIFF = 0x800454ca - TUNSETIFINDEX = 0x800454da - TUNSETLINK = 0x800454cd - TUNSETNOCSUM = 0x800454c8 - TUNSETOFFLOAD = 0x800454d0 - TUNSETOWNER = 0x800454cc - TUNSETPERSIST = 0x800454cb - TUNSETQUEUE = 0x800454d9 - TUNSETSNDBUF = 0x800454d4 - TUNSETSTEERINGEBPF = 0x400454e0 - TUNSETTXFILTER = 0x800454d1 - TUNSETVNETBE = 0x800454de - TUNSETVNETHDRSZ = 0x800454d8 - TUNSETVNETLE = 0x800454dc - UBI_IOCATT = 0x80186f40 - UBI_IOCDET = 0x80046f41 - UBI_IOCEBCH = 0x80044f02 - UBI_IOCEBER = 0x80044f01 - UBI_IOCEBISMAP = 0x40044f05 - UBI_IOCEBMAP = 0x80084f03 - UBI_IOCEBUNMAP = 0x80044f04 - UBI_IOCMKVOL = 0x80986f00 - UBI_IOCRMVOL = 0x80046f01 - UBI_IOCRNVOL = 0x91106f03 - UBI_IOCRPEB = 0x80046f04 - UBI_IOCRSVOL = 0x800c6f02 - UBI_IOCSETVOLPROP = 0x80104f06 - UBI_IOCSPEB = 0x80046f05 - UBI_IOCVOLCRBLK = 0x80804f07 - UBI_IOCVOLRMBLK = 0x20004f08 - UBI_IOCVOLUP = 0x80084f00 - VDISCARD = 0xd - VEOF = 0x4 - VEOL = 0xb - VEOL2 = 0x10 - VMIN = 0x6 - VREPRINT = 0xc - VSTART = 0x8 - VSTOP = 0x9 - VSUSP = 0xa - VSWTC = 0x7 - VT1 = 0x4000 - VTDLY = 0x4000 - VTIME = 0x5 - VWERASE = 0xe - WDIOC_GETBOOTSTATUS = 0x40045702 - WDIOC_GETPRETIMEOUT = 0x40045709 - WDIOC_GETSTATUS = 0x40045701 - WDIOC_GETSUPPORT = 0x40285700 - WDIOC_GETTEMP = 0x40045703 - WDIOC_GETTIMELEFT = 0x4004570a - WDIOC_GETTIMEOUT = 0x40045707 - WDIOC_KEEPALIVE = 0x40045705 - WDIOC_SETOPTIONS = 0x40045704 - WORDSIZE = 0x40 - XCASE = 0x4 - XTABS = 0x1800 - _HIDIOCGRAWNAME = 0x40804804 - _HIDIOCGRAWPHYS = 0x40404805 - _HIDIOCGRAWUNIQ = 0x40404808 - __TIOCFLUSH = 0x80047410 -) - -// Errors -const ( - EADDRINUSE = syscall.Errno(0x30) - EADDRNOTAVAIL = syscall.Errno(0x31) - EADV = syscall.Errno(0x53) - EAFNOSUPPORT = syscall.Errno(0x2f) - EALREADY = syscall.Errno(0x25) - EBADE = syscall.Errno(0x66) - EBADFD = syscall.Errno(0x5d) - EBADMSG = syscall.Errno(0x4c) - EBADR = syscall.Errno(0x67) - EBADRQC = syscall.Errno(0x6a) - EBADSLT = syscall.Errno(0x6b) - EBFONT = syscall.Errno(0x6d) - ECANCELED = syscall.Errno(0x7f) - ECHRNG = syscall.Errno(0x5e) - ECOMM = syscall.Errno(0x55) - ECONNABORTED = syscall.Errno(0x35) - ECONNREFUSED = syscall.Errno(0x3d) - ECONNRESET = syscall.Errno(0x36) - EDEADLK = syscall.Errno(0x4e) - EDEADLOCK = syscall.Errno(0x6c) - EDESTADDRREQ = syscall.Errno(0x27) - EDOTDOT = syscall.Errno(0x58) - EDQUOT = syscall.Errno(0x45) - EHOSTDOWN = syscall.Errno(0x40) - EHOSTUNREACH = syscall.Errno(0x41) - EHWPOISON = syscall.Errno(0x87) - EIDRM = syscall.Errno(0x4d) - EILSEQ = syscall.Errno(0x7a) - EINPROGRESS = syscall.Errno(0x24) - EISCONN = syscall.Errno(0x38) - EISNAM = syscall.Errno(0x78) - EKEYEXPIRED = syscall.Errno(0x81) - EKEYREJECTED = syscall.Errno(0x83) - EKEYREVOKED = syscall.Errno(0x82) - EL2HLT = syscall.Errno(0x65) - EL2NSYNC = syscall.Errno(0x5f) - EL3HLT = syscall.Errno(0x60) - EL3RST = syscall.Errno(0x61) - ELIBACC = syscall.Errno(0x72) - ELIBBAD = syscall.Errno(0x70) - ELIBEXEC = syscall.Errno(0x6e) - ELIBMAX = syscall.Errno(0x7b) - ELIBSCN = syscall.Errno(0x7c) - ELNRNG = syscall.Errno(0x62) - ELOOP = syscall.Errno(0x3e) - EMEDIUMTYPE = syscall.Errno(0x7e) - EMSGSIZE = syscall.Errno(0x28) - EMULTIHOP = syscall.Errno(0x57) - ENAMETOOLONG = syscall.Errno(0x3f) - ENAVAIL = syscall.Errno(0x77) - ENETDOWN = syscall.Errno(0x32) - ENETRESET = syscall.Errno(0x34) - ENETUNREACH = syscall.Errno(0x33) - ENOANO = syscall.Errno(0x69) - ENOBUFS = syscall.Errno(0x37) - ENOCSI = syscall.Errno(0x64) - ENODATA = syscall.Errno(0x6f) - ENOKEY = syscall.Errno(0x80) - ENOLCK = syscall.Errno(0x4f) - ENOLINK = syscall.Errno(0x52) - ENOMEDIUM = syscall.Errno(0x7d) - ENOMSG = syscall.Errno(0x4b) - ENONET = syscall.Errno(0x50) - ENOPKG = syscall.Errno(0x71) - ENOPROTOOPT = syscall.Errno(0x2a) - ENOSR = syscall.Errno(0x4a) - ENOSTR = syscall.Errno(0x48) - ENOSYS = syscall.Errno(0x5a) - ENOTCONN = syscall.Errno(0x39) - ENOTEMPTY = syscall.Errno(0x42) - ENOTNAM = syscall.Errno(0x76) - ENOTRECOVERABLE = syscall.Errno(0x85) - ENOTSOCK = syscall.Errno(0x26) - ENOTSUP = syscall.Errno(0x2d) - ENOTUNIQ = syscall.Errno(0x73) - EOPNOTSUPP = syscall.Errno(0x2d) - EOVERFLOW = syscall.Errno(0x5c) - EOWNERDEAD = syscall.Errno(0x84) - EPFNOSUPPORT = syscall.Errno(0x2e) - EPROCLIM = syscall.Errno(0x43) - EPROTO = syscall.Errno(0x56) - EPROTONOSUPPORT = syscall.Errno(0x2b) - EPROTOTYPE = syscall.Errno(0x29) - EREMCHG = syscall.Errno(0x59) - EREMOTE = syscall.Errno(0x47) - EREMOTEIO = syscall.Errno(0x79) - ERESTART = syscall.Errno(0x74) - ERFKILL = syscall.Errno(0x86) - ERREMOTE = syscall.Errno(0x51) - ESHUTDOWN = syscall.Errno(0x3a) - ESOCKTNOSUPPORT = syscall.Errno(0x2c) - ESRMNT = syscall.Errno(0x54) - ESTALE = syscall.Errno(0x46) - ESTRPIPE = syscall.Errno(0x5b) - ETIME = syscall.Errno(0x49) - ETIMEDOUT = syscall.Errno(0x3c) - ETOOMANYREFS = syscall.Errno(0x3b) - EUCLEAN = syscall.Errno(0x75) - EUNATCH = syscall.Errno(0x63) - EUSERS = syscall.Errno(0x44) - EXFULL = syscall.Errno(0x68) -) - -// Signals -const ( - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x14) - SIGCLD = syscall.Signal(0x14) - SIGCONT = syscall.Signal(0x13) - SIGEMT = syscall.Signal(0x7) - SIGIO = syscall.Signal(0x17) - SIGLOST = syscall.Signal(0x1d) - SIGPOLL = syscall.Signal(0x17) - SIGPROF = syscall.Signal(0x1b) - SIGPWR = syscall.Signal(0x1d) - SIGSTOP = syscall.Signal(0x11) - SIGSYS = syscall.Signal(0xc) - SIGTSTP = syscall.Signal(0x12) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x10) - SIGUSR1 = syscall.Signal(0x1e) - SIGUSR2 = syscall.Signal(0x1f) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "no such device or address"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EAGAIN", "resource temporarily unavailable"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device or resource busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "invalid cross-device link"}, - {19, "ENODEV", "no such device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "numerical result out of range"}, - {36, "EINPROGRESS", "operation now in progress"}, - {37, "EALREADY", "operation already in progress"}, - {38, "ENOTSOCK", "socket operation on non-socket"}, - {39, "EDESTADDRREQ", "destination address required"}, - {40, "EMSGSIZE", "message too long"}, - {41, "EPROTOTYPE", "protocol wrong type for socket"}, - {42, "ENOPROTOOPT", "protocol not available"}, - {43, "EPROTONOSUPPORT", "protocol not supported"}, - {44, "ESOCKTNOSUPPORT", "socket type not supported"}, - {45, "ENOTSUP", "operation not supported"}, - {46, "EPFNOSUPPORT", "protocol family not supported"}, - {47, "EAFNOSUPPORT", "address family not supported by protocol"}, - {48, "EADDRINUSE", "address already in use"}, - {49, "EADDRNOTAVAIL", "cannot assign requested address"}, - {50, "ENETDOWN", "network is down"}, - {51, "ENETUNREACH", "network is unreachable"}, - {52, "ENETRESET", "network dropped connection on reset"}, - {53, "ECONNABORTED", "software caused connection abort"}, - {54, "ECONNRESET", "connection reset by peer"}, - {55, "ENOBUFS", "no buffer space available"}, - {56, "EISCONN", "transport endpoint is already connected"}, - {57, "ENOTCONN", "transport endpoint is not connected"}, - {58, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, - {59, "ETOOMANYREFS", "too many references: cannot splice"}, - {60, "ETIMEDOUT", "connection timed out"}, - {61, "ECONNREFUSED", "connection refused"}, - {62, "ELOOP", "too many levels of symbolic links"}, - {63, "ENAMETOOLONG", "file name too long"}, - {64, "EHOSTDOWN", "host is down"}, - {65, "EHOSTUNREACH", "no route to host"}, - {66, "ENOTEMPTY", "directory not empty"}, - {67, "EPROCLIM", "too many processes"}, - {68, "EUSERS", "too many users"}, - {69, "EDQUOT", "disk quota exceeded"}, - {70, "ESTALE", "stale file handle"}, - {71, "EREMOTE", "object is remote"}, - {72, "ENOSTR", "device not a stream"}, - {73, "ETIME", "timer expired"}, - {74, "ENOSR", "out of streams resources"}, - {75, "ENOMSG", "no message of desired type"}, - {76, "EBADMSG", "bad message"}, - {77, "EIDRM", "identifier removed"}, - {78, "EDEADLK", "resource deadlock avoided"}, - {79, "ENOLCK", "no locks available"}, - {80, "ENONET", "machine is not on the network"}, - {81, "ERREMOTE", "unknown error 81"}, - {82, "ENOLINK", "link has been severed"}, - {83, "EADV", "advertise error"}, - {84, "ESRMNT", "srmount error"}, - {85, "ECOMM", "communication error on send"}, - {86, "EPROTO", "protocol error"}, - {87, "EMULTIHOP", "multihop attempted"}, - {88, "EDOTDOT", "RFS specific error"}, - {89, "EREMCHG", "remote address changed"}, - {90, "ENOSYS", "function not implemented"}, - {91, "ESTRPIPE", "streams pipe error"}, - {92, "EOVERFLOW", "value too large for defined data type"}, - {93, "EBADFD", "file descriptor in bad state"}, - {94, "ECHRNG", "channel number out of range"}, - {95, "EL2NSYNC", "level 2 not synchronized"}, - {96, "EL3HLT", "level 3 halted"}, - {97, "EL3RST", "level 3 reset"}, - {98, "ELNRNG", "link number out of range"}, - {99, "EUNATCH", "protocol driver not attached"}, - {100, "ENOCSI", "no CSI structure available"}, - {101, "EL2HLT", "level 2 halted"}, - {102, "EBADE", "invalid exchange"}, - {103, "EBADR", "invalid request descriptor"}, - {104, "EXFULL", "exchange full"}, - {105, "ENOANO", "no anode"}, - {106, "EBADRQC", "invalid request code"}, - {107, "EBADSLT", "invalid slot"}, - {108, "EDEADLOCK", "file locking deadlock error"}, - {109, "EBFONT", "bad font file format"}, - {110, "ELIBEXEC", "cannot exec a shared library directly"}, - {111, "ENODATA", "no data available"}, - {112, "ELIBBAD", "accessing a corrupted shared library"}, - {113, "ENOPKG", "package not installed"}, - {114, "ELIBACC", "can not access a needed shared library"}, - {115, "ENOTUNIQ", "name not unique on network"}, - {116, "ERESTART", "interrupted system call should be restarted"}, - {117, "EUCLEAN", "structure needs cleaning"}, - {118, "ENOTNAM", "not a XENIX named type file"}, - {119, "ENAVAIL", "no XENIX semaphores available"}, - {120, "EISNAM", "is a named type file"}, - {121, "EREMOTEIO", "remote I/O error"}, - {122, "EILSEQ", "invalid or incomplete multibyte or wide character"}, - {123, "ELIBMAX", "attempting to link in too many shared libraries"}, - {124, "ELIBSCN", ".lib section in a.out corrupted"}, - {125, "ENOMEDIUM", "no medium found"}, - {126, "EMEDIUMTYPE", "wrong medium type"}, - {127, "ECANCELED", "operation canceled"}, - {128, "ENOKEY", "required key not available"}, - {129, "EKEYEXPIRED", "key has expired"}, - {130, "EKEYREVOKED", "key has been revoked"}, - {131, "EKEYREJECTED", "key was rejected by service"}, - {132, "EOWNERDEAD", "owner died"}, - {133, "ENOTRECOVERABLE", "state not recoverable"}, - {134, "ERFKILL", "operation not possible due to RF-kill"}, - {135, "EHWPOISON", "memory page has hardware error"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/breakpoint trap"}, - {6, "SIGABRT", "aborted"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGURG", "urgent I/O condition"}, - {17, "SIGSTOP", "stopped (signal)"}, - {18, "SIGTSTP", "stopped"}, - {19, "SIGCONT", "continued"}, - {20, "SIGCHLD", "child exited"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGIO", "I/O possible"}, - {24, "SIGXCPU", "CPU time limit exceeded"}, - {25, "SIGXFSZ", "file size limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window changed"}, - {29, "SIGLOST", "power failure"}, - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go deleted file mode 100644 index 72f7420..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go +++ /dev/null @@ -1,1780 +0,0 @@ -// mkerrors.sh -m32 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build 386 && netbsd -// +build 386,netbsd - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -m32 _const.go - -package unix - -import "syscall" - -const ( - AF_APPLETALK = 0x10 - AF_ARP = 0x1c - AF_BLUETOOTH = 0x1f - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1a - AF_ECMA = 0x8 - AF_HYLINK = 0xf - AF_IEEE80211 = 0x20 - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x18 - AF_IPX = 0x17 - AF_ISDN = 0x1a - AF_ISO = 0x7 - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x23 - AF_MPLS = 0x21 - AF_NATM = 0x1b - AF_NS = 0x6 - AF_OROUTE = 0x11 - AF_OSI = 0x7 - AF_PUP = 0x4 - AF_ROUTE = 0x22 - AF_SNA = 0xb - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - ARPHRD_ARCNET = 0x7 - ARPHRD_ETHER = 0x1 - ARPHRD_FRELAY = 0xf - ARPHRD_IEEE1394 = 0x18 - ARPHRD_IEEE802 = 0x6 - ARPHRD_STRIP = 0x17 - B0 = 0x0 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B230400 = 0x38400 - B2400 = 0x960 - B28800 = 0x7080 - B300 = 0x12c - B38400 = 0x9600 - B460800 = 0x70800 - B4800 = 0x12c0 - B50 = 0x32 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B921600 = 0xe1000 - B9600 = 0x2580 - BIOCFEEDBACK = 0x8004427d - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc0084277 - BIOCGETIF = 0x4090426b - BIOCGFEEDBACK = 0x4004427c - BIOCGHDRCMPLT = 0x40044274 - BIOCGRTIMEOUT = 0x400c427b - BIOCGSEESENT = 0x40044278 - BIOCGSTATS = 0x4080426f - BIOCGSTATSOLD = 0x4008426f - BIOCIMMEDIATE = 0x80044270 - BIOCPROMISC = 0x20004269 - BIOCSBLEN = 0xc0044266 - BIOCSDLT = 0x80044276 - BIOCSETF = 0x80084267 - BIOCSETIF = 0x8090426c - BIOCSFEEDBACK = 0x8004427d - BIOCSHDRCMPLT = 0x80044275 - BIOCSRTIMEOUT = 0x800c427a - BIOCSSEESENT = 0x80044279 - BIOCSTCPF = 0x80084272 - BIOCSUDPF = 0x80084273 - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x4 - BPF_ALIGNMENT32 = 0x4 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_DFLTBUFSIZE = 0x100000 - BPF_DIV = 0x30 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x1000000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_W = 0x0 - BPF_X = 0x8 - BRKINT = 0x2 - CFLUSH = 0xf - CLOCAL = 0x8000 - CLONE_CSIGNAL = 0xff - CLONE_FILES = 0x400 - CLONE_FS = 0x200 - CLONE_PID = 0x1000 - CLONE_PTRACE = 0x2000 - CLONE_SIGHAND = 0x800 - CLONE_VFORK = 0x4000 - CLONE_VM = 0x100 - CPUSTATES = 0x5 - CP_IDLE = 0x4 - CP_INTR = 0x3 - CP_NICE = 0x1 - CP_SYS = 0x2 - CP_USER = 0x0 - CREAD = 0x800 - CRTSCTS = 0x10000 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0x14 - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTL_HW = 0x6 - CTL_KERN = 0x1 - CTL_MAXNAME = 0xc - CTL_NET = 0x4 - CTL_QUERY = -0x2 - DIOCBSFLUSH = 0x20006478 - DLT_A429 = 0xb8 - DLT_A653_ICM = 0xb9 - DLT_AIRONET_HEADER = 0x78 - DLT_AOS = 0xde - DLT_APPLE_IP_OVER_IEEE1394 = 0x8a - DLT_ARCNET = 0x7 - DLT_ARCNET_LINUX = 0x81 - DLT_ATM_CLIP = 0x13 - DLT_ATM_RFC1483 = 0xb - DLT_AURORA = 0x7e - DLT_AX25 = 0x3 - DLT_AX25_KISS = 0xca - DLT_BACNET_MS_TP = 0xa5 - DLT_BLUETOOTH_HCI_H4 = 0xbb - DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 - DLT_CAN20B = 0xbe - DLT_CAN_SOCKETCAN = 0xe3 - DLT_CHAOS = 0x5 - DLT_CISCO_IOS = 0x76 - DLT_C_HDLC = 0x68 - DLT_C_HDLC_WITH_DIR = 0xcd - DLT_DECT = 0xdd - DLT_DOCSIS = 0x8f - DLT_ECONET = 0x73 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0x6d - DLT_ERF = 0xc5 - DLT_ERF_ETH = 0xaf - DLT_ERF_POS = 0xb0 - DLT_FC_2 = 0xe0 - DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 - DLT_FDDI = 0xa - DLT_FLEXRAY = 0xd2 - DLT_FRELAY = 0x6b - DLT_FRELAY_WITH_DIR = 0xce - DLT_GCOM_SERIAL = 0xad - DLT_GCOM_T1E1 = 0xac - DLT_GPF_F = 0xab - DLT_GPF_T = 0xaa - DLT_GPRS_LLC = 0xa9 - DLT_GSMTAP_ABIS = 0xda - DLT_GSMTAP_UM = 0xd9 - DLT_HDLC = 0x10 - DLT_HHDLC = 0x79 - DLT_HIPPI = 0xf - DLT_IBM_SN = 0x92 - DLT_IBM_SP = 0x91 - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_IEEE802_11_RADIO_AVS = 0xa3 - DLT_IEEE802_15_4 = 0xc3 - DLT_IEEE802_15_4_LINUX = 0xbf - DLT_IEEE802_15_4_NONASK_PHY = 0xd7 - DLT_IEEE802_16_MAC_CPS = 0xbc - DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 - DLT_IPMB = 0xc7 - DLT_IPMB_LINUX = 0xd1 - DLT_IPNET = 0xe2 - DLT_IPV4 = 0xe4 - DLT_IPV6 = 0xe5 - DLT_IP_OVER_FC = 0x7a - DLT_JUNIPER_ATM1 = 0x89 - DLT_JUNIPER_ATM2 = 0x87 - DLT_JUNIPER_CHDLC = 0xb5 - DLT_JUNIPER_ES = 0x84 - DLT_JUNIPER_ETHER = 0xb2 - DLT_JUNIPER_FRELAY = 0xb4 - DLT_JUNIPER_GGSN = 0x85 - DLT_JUNIPER_ISM = 0xc2 - DLT_JUNIPER_MFR = 0x86 - DLT_JUNIPER_MLFR = 0x83 - DLT_JUNIPER_MLPPP = 0x82 - DLT_JUNIPER_MONITOR = 0xa4 - DLT_JUNIPER_PIC_PEER = 0xae - DLT_JUNIPER_PPP = 0xb3 - DLT_JUNIPER_PPPOE = 0xa7 - DLT_JUNIPER_PPPOE_ATM = 0xa8 - DLT_JUNIPER_SERVICES = 0x88 - DLT_JUNIPER_ST = 0xc8 - DLT_JUNIPER_VP = 0xb7 - DLT_LAPB_WITH_DIR = 0xcf - DLT_LAPD = 0xcb - DLT_LIN = 0xd4 - DLT_LINUX_EVDEV = 0xd8 - DLT_LINUX_IRDA = 0x90 - DLT_LINUX_LAPD = 0xb1 - DLT_LINUX_SLL = 0x71 - DLT_LOOP = 0x6c - DLT_LTALK = 0x72 - DLT_MFR = 0xb6 - DLT_MOST = 0xd3 - DLT_MPLS = 0xdb - DLT_MTP2 = 0x8c - DLT_MTP2_WITH_PHDR = 0x8b - DLT_MTP3 = 0x8d - DLT_NULL = 0x0 - DLT_PCI_EXP = 0x7d - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x12 - DLT_PPI = 0xc0 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0xe - DLT_PPP_ETHER = 0x33 - DLT_PPP_PPPD = 0xa6 - DLT_PPP_SERIAL = 0x32 - DLT_PPP_WITH_DIR = 0xcc - DLT_PRISM_HEADER = 0x77 - DLT_PRONET = 0x4 - DLT_RAIF1 = 0xc6 - DLT_RAW = 0xc - DLT_RAWAF_MASK = 0x2240000 - DLT_RIO = 0x7c - DLT_SCCP = 0x8e - DLT_SITA = 0xc4 - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xd - DLT_SUNATM = 0x7b - DLT_SYMANTEC_FIREWALL = 0x63 - DLT_TZSP = 0x80 - DLT_USB = 0xba - DLT_USB_LINUX = 0xbd - DLT_USB_LINUX_MMAPPED = 0xdc - DLT_WIHART = 0xdf - DLT_X2E_SERIAL = 0xd5 - DLT_X2E_XORAYA = 0xd6 - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - DT_WHT = 0xe - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EMUL_LINUX = 0x1 - EMUL_LINUX32 = 0x5 - EMUL_MAXID = 0x6 - EN_SW_CTL_INF = 0x1000 - EN_SW_CTL_PREC = 0x300 - EN_SW_CTL_ROUND = 0xc00 - EN_SW_DATACHAIN = 0x80 - EN_SW_DENORM = 0x2 - EN_SW_INVOP = 0x1 - EN_SW_OVERFLOW = 0x8 - EN_SW_PRECLOSS = 0x20 - EN_SW_UNDERFLOW = 0x10 - EN_SW_ZERODIV = 0x4 - ETHERCAP_JUMBO_MTU = 0x4 - ETHERCAP_VLAN_HWTAGGING = 0x2 - ETHERCAP_VLAN_MTU = 0x1 - ETHERMIN = 0x2e - ETHERMTU = 0x5dc - ETHERMTU_JUMBO = 0x2328 - ETHERTYPE_8023 = 0x4 - ETHERTYPE_AARP = 0x80f3 - ETHERTYPE_ACCTON = 0x8390 - ETHERTYPE_AEONIC = 0x8036 - ETHERTYPE_ALPHA = 0x814a - ETHERTYPE_AMBER = 0x6008 - ETHERTYPE_AMOEBA = 0x8145 - ETHERTYPE_APOLLO = 0x80f7 - ETHERTYPE_APOLLODOMAIN = 0x8019 - ETHERTYPE_APPLETALK = 0x809b - ETHERTYPE_APPLITEK = 0x80c7 - ETHERTYPE_ARGONAUT = 0x803a - ETHERTYPE_ARP = 0x806 - ETHERTYPE_AT = 0x809b - ETHERTYPE_ATALK = 0x809b - ETHERTYPE_ATOMIC = 0x86df - ETHERTYPE_ATT = 0x8069 - ETHERTYPE_ATTSTANFORD = 0x8008 - ETHERTYPE_AUTOPHON = 0x806a - ETHERTYPE_AXIS = 0x8856 - ETHERTYPE_BCLOOP = 0x9003 - ETHERTYPE_BOFL = 0x8102 - ETHERTYPE_CABLETRON = 0x7034 - ETHERTYPE_CHAOS = 0x804 - ETHERTYPE_COMDESIGN = 0x806c - ETHERTYPE_COMPUGRAPHIC = 0x806d - ETHERTYPE_COUNTERPOINT = 0x8062 - ETHERTYPE_CRONUS = 0x8004 - ETHERTYPE_CRONUSVLN = 0x8003 - ETHERTYPE_DCA = 0x1234 - ETHERTYPE_DDE = 0x807b - ETHERTYPE_DEBNI = 0xaaaa - ETHERTYPE_DECAM = 0x8048 - ETHERTYPE_DECCUST = 0x6006 - ETHERTYPE_DECDIAG = 0x6005 - ETHERTYPE_DECDNS = 0x803c - ETHERTYPE_DECDTS = 0x803e - ETHERTYPE_DECEXPER = 0x6000 - ETHERTYPE_DECLAST = 0x8041 - ETHERTYPE_DECLTM = 0x803f - ETHERTYPE_DECMUMPS = 0x6009 - ETHERTYPE_DECNETBIOS = 0x8040 - ETHERTYPE_DELTACON = 0x86de - ETHERTYPE_DIDDLE = 0x4321 - ETHERTYPE_DLOG1 = 0x660 - ETHERTYPE_DLOG2 = 0x661 - ETHERTYPE_DN = 0x6003 - ETHERTYPE_DOGFIGHT = 0x1989 - ETHERTYPE_DSMD = 0x8039 - ETHERTYPE_ECMA = 0x803 - ETHERTYPE_ENCRYPT = 0x803d - ETHERTYPE_ES = 0x805d - ETHERTYPE_EXCELAN = 0x8010 - ETHERTYPE_EXPERDATA = 0x8049 - ETHERTYPE_FLIP = 0x8146 - ETHERTYPE_FLOWCONTROL = 0x8808 - ETHERTYPE_FRARP = 0x808 - ETHERTYPE_GENDYN = 0x8068 - ETHERTYPE_HAYES = 0x8130 - ETHERTYPE_HIPPI_FP = 0x8180 - ETHERTYPE_HITACHI = 0x8820 - ETHERTYPE_HP = 0x8005 - ETHERTYPE_IEEEPUP = 0xa00 - ETHERTYPE_IEEEPUPAT = 0xa01 - ETHERTYPE_IMLBL = 0x4c42 - ETHERTYPE_IMLBLDIAG = 0x424c - ETHERTYPE_IP = 0x800 - ETHERTYPE_IPAS = 0x876c - ETHERTYPE_IPV6 = 0x86dd - ETHERTYPE_IPX = 0x8137 - ETHERTYPE_IPXNEW = 0x8037 - ETHERTYPE_KALPANA = 0x8582 - ETHERTYPE_LANBRIDGE = 0x8038 - ETHERTYPE_LANPROBE = 0x8888 - ETHERTYPE_LAT = 0x6004 - ETHERTYPE_LBACK = 0x9000 - ETHERTYPE_LITTLE = 0x8060 - ETHERTYPE_LOGICRAFT = 0x8148 - ETHERTYPE_LOOPBACK = 0x9000 - ETHERTYPE_MATRA = 0x807a - ETHERTYPE_MAX = 0xffff - ETHERTYPE_MERIT = 0x807c - ETHERTYPE_MICP = 0x873a - ETHERTYPE_MOPDL = 0x6001 - ETHERTYPE_MOPRC = 0x6002 - ETHERTYPE_MOTOROLA = 0x818d - ETHERTYPE_MPLS = 0x8847 - ETHERTYPE_MPLS_MCAST = 0x8848 - ETHERTYPE_MUMPS = 0x813f - ETHERTYPE_NBPCC = 0x3c04 - ETHERTYPE_NBPCLAIM = 0x3c09 - ETHERTYPE_NBPCLREQ = 0x3c05 - ETHERTYPE_NBPCLRSP = 0x3c06 - ETHERTYPE_NBPCREQ = 0x3c02 - ETHERTYPE_NBPCRSP = 0x3c03 - ETHERTYPE_NBPDG = 0x3c07 - ETHERTYPE_NBPDGB = 0x3c08 - ETHERTYPE_NBPDLTE = 0x3c0a - ETHERTYPE_NBPRAR = 0x3c0c - ETHERTYPE_NBPRAS = 0x3c0b - ETHERTYPE_NBPRST = 0x3c0d - ETHERTYPE_NBPSCD = 0x3c01 - ETHERTYPE_NBPVCD = 0x3c00 - ETHERTYPE_NBS = 0x802 - ETHERTYPE_NCD = 0x8149 - ETHERTYPE_NESTAR = 0x8006 - ETHERTYPE_NETBEUI = 0x8191 - ETHERTYPE_NOVELL = 0x8138 - ETHERTYPE_NS = 0x600 - ETHERTYPE_NSAT = 0x601 - ETHERTYPE_NSCOMPAT = 0x807 - ETHERTYPE_NTRAILER = 0x10 - ETHERTYPE_OS9 = 0x7007 - ETHERTYPE_OS9NET = 0x7009 - ETHERTYPE_PACER = 0x80c6 - ETHERTYPE_PAE = 0x888e - ETHERTYPE_PCS = 0x4242 - ETHERTYPE_PLANNING = 0x8044 - ETHERTYPE_PPP = 0x880b - ETHERTYPE_PPPOE = 0x8864 - ETHERTYPE_PPPOEDISC = 0x8863 - ETHERTYPE_PRIMENTS = 0x7031 - ETHERTYPE_PUP = 0x200 - ETHERTYPE_PUPAT = 0x200 - ETHERTYPE_RACAL = 0x7030 - ETHERTYPE_RATIONAL = 0x8150 - ETHERTYPE_RAWFR = 0x6559 - ETHERTYPE_RCL = 0x1995 - ETHERTYPE_RDP = 0x8739 - ETHERTYPE_RETIX = 0x80f2 - ETHERTYPE_REVARP = 0x8035 - ETHERTYPE_SCA = 0x6007 - ETHERTYPE_SECTRA = 0x86db - ETHERTYPE_SECUREDATA = 0x876d - ETHERTYPE_SGITW = 0x817e - ETHERTYPE_SG_BOUNCE = 0x8016 - ETHERTYPE_SG_DIAG = 0x8013 - ETHERTYPE_SG_NETGAMES = 0x8014 - ETHERTYPE_SG_RESV = 0x8015 - ETHERTYPE_SIMNET = 0x5208 - ETHERTYPE_SLOWPROTOCOLS = 0x8809 - ETHERTYPE_SNA = 0x80d5 - ETHERTYPE_SNMP = 0x814c - ETHERTYPE_SONIX = 0xfaf5 - ETHERTYPE_SPIDER = 0x809f - ETHERTYPE_SPRITE = 0x500 - ETHERTYPE_STP = 0x8181 - ETHERTYPE_TALARIS = 0x812b - ETHERTYPE_TALARISMC = 0x852b - ETHERTYPE_TCPCOMP = 0x876b - ETHERTYPE_TCPSM = 0x9002 - ETHERTYPE_TEC = 0x814f - ETHERTYPE_TIGAN = 0x802f - ETHERTYPE_TRAIL = 0x1000 - ETHERTYPE_TRANSETHER = 0x6558 - ETHERTYPE_TYMSHARE = 0x802e - ETHERTYPE_UBBST = 0x7005 - ETHERTYPE_UBDEBUG = 0x900 - ETHERTYPE_UBDIAGLOOP = 0x7002 - ETHERTYPE_UBDL = 0x7000 - ETHERTYPE_UBNIU = 0x7001 - ETHERTYPE_UBNMC = 0x7003 - ETHERTYPE_VALID = 0x1600 - ETHERTYPE_VARIAN = 0x80dd - ETHERTYPE_VAXELN = 0x803b - ETHERTYPE_VEECO = 0x8067 - ETHERTYPE_VEXP = 0x805b - ETHERTYPE_VGLAB = 0x8131 - ETHERTYPE_VINES = 0xbad - ETHERTYPE_VINESECHO = 0xbaf - ETHERTYPE_VINESLOOP = 0xbae - ETHERTYPE_VITAL = 0xff00 - ETHERTYPE_VLAN = 0x8100 - ETHERTYPE_VLTLMAN = 0x8080 - ETHERTYPE_VPROD = 0x805c - ETHERTYPE_VURESERVED = 0x8147 - ETHERTYPE_WATERLOO = 0x8130 - ETHERTYPE_WELLFLEET = 0x8103 - ETHERTYPE_X25 = 0x805 - ETHERTYPE_X75 = 0x801 - ETHERTYPE_XNSSM = 0x9001 - ETHERTYPE_XTP = 0x817d - ETHER_ADDR_LEN = 0x6 - ETHER_CRC_LEN = 0x4 - ETHER_CRC_POLY_BE = 0x4c11db6 - ETHER_CRC_POLY_LE = 0xedb88320 - ETHER_HDR_LEN = 0xe - ETHER_MAX_LEN = 0x5ee - ETHER_MAX_LEN_JUMBO = 0x233a - ETHER_MIN_LEN = 0x40 - ETHER_PPPOE_ENCAP_LEN = 0x8 - ETHER_TYPE_LEN = 0x2 - ETHER_VLAN_ENCAP_LEN = 0x4 - EVFILT_AIO = 0x2 - EVFILT_PROC = 0x4 - EVFILT_READ = 0x0 - EVFILT_SIGNAL = 0x5 - EVFILT_SYSCOUNT = 0x7 - EVFILT_TIMER = 0x6 - EVFILT_VNODE = 0x3 - EVFILT_WRITE = 0x1 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG1 = 0x2000 - EV_ONESHOT = 0x10 - EV_SYSFLAGS = 0xf000 - EXTA = 0x4b00 - EXTATTR_CMD_START = 0x1 - EXTATTR_CMD_STOP = 0x2 - EXTATTR_NAMESPACE_SYSTEM = 0x2 - EXTATTR_NAMESPACE_USER = 0x1 - EXTB = 0x9600 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x100 - FLUSHO = 0x800000 - F_CLOSEM = 0xa - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0xc - F_FSCTL = -0x80000000 - F_FSDIRMASK = 0x70000000 - F_FSIN = 0x10000000 - F_FSINOUT = 0x30000000 - F_FSOUT = 0x20000000 - F_FSPRIV = 0x8000 - F_FSVOID = 0x40000000 - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0x7 - F_GETNOSIGPIPE = 0xd - F_GETOWN = 0x5 - F_MAXFD = 0xb - F_OK = 0x0 - F_PARAM_MASK = 0xfff - F_PARAM_MAX = 0xfff - F_RDLCK = 0x1 - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0x8 - F_SETLKW = 0x9 - F_SETNOSIGPIPE = 0xe - F_SETOWN = 0x6 - F_UNLCK = 0x2 - F_WRLCK = 0x3 - HUPCL = 0x4000 - HW_MACHINE = 0x1 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFAN_ARRIVAL = 0x0 - IFAN_DEPARTURE = 0x1 - IFA_ROUTE = 0x1 - IFF_ALLMULTI = 0x200 - IFF_BROADCAST = 0x2 - IFF_CANTCHANGE = 0x8f52 - IFF_DEBUG = 0x4 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_NOTRAILERS = 0x20 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PROMISC = 0x100 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_1822 = 0x2 - IFT_A12MPPSWITCH = 0x82 - IFT_AAL2 = 0xbb - IFT_AAL5 = 0x31 - IFT_ADSL = 0x5e - IFT_AFLANE8023 = 0x3b - IFT_AFLANE8025 = 0x3c - IFT_ARAP = 0x58 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ASYNC = 0x54 - IFT_ATM = 0x25 - IFT_ATMDXI = 0x69 - IFT_ATMFUNI = 0x6a - IFT_ATMIMA = 0x6b - IFT_ATMLOGICAL = 0x50 - IFT_ATMRADIO = 0xbd - IFT_ATMSUBINTERFACE = 0x86 - IFT_ATMVCIENDPT = 0xc2 - IFT_ATMVIRTUAL = 0x95 - IFT_BGPPOLICYACCOUNTING = 0xa2 - IFT_BRIDGE = 0xd1 - IFT_BSC = 0x53 - IFT_CARP = 0xf8 - IFT_CCTEMUL = 0x3d - IFT_CEPT = 0x13 - IFT_CES = 0x85 - IFT_CHANNEL = 0x46 - IFT_CNR = 0x55 - IFT_COFFEE = 0x84 - IFT_COMPOSITELINK = 0x9b - IFT_DCN = 0x8d - IFT_DIGITALPOWERLINE = 0x8a - IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba - IFT_DLSW = 0x4a - IFT_DOCSCABLEDOWNSTREAM = 0x80 - IFT_DOCSCABLEMACLAYER = 0x7f - IFT_DOCSCABLEUPSTREAM = 0x81 - IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd - IFT_DS0 = 0x51 - IFT_DS0BUNDLE = 0x52 - IFT_DS1FDL = 0xaa - IFT_DS3 = 0x1e - IFT_DTM = 0x8c - IFT_DVBASILN = 0xac - IFT_DVBASIOUT = 0xad - IFT_DVBRCCDOWNSTREAM = 0x93 - IFT_DVBRCCMACLAYER = 0x92 - IFT_DVBRCCUPSTREAM = 0x94 - IFT_ECONET = 0xce - IFT_EON = 0x19 - IFT_EPLRS = 0x57 - IFT_ESCON = 0x49 - IFT_ETHER = 0x6 - IFT_FAITH = 0xf2 - IFT_FAST = 0x7d - IFT_FASTETHER = 0x3e - IFT_FASTETHERFX = 0x45 - IFT_FDDI = 0xf - IFT_FIBRECHANNEL = 0x38 - IFT_FRAMERELAYINTERCONNECT = 0x3a - IFT_FRAMERELAYMPI = 0x5c - IFT_FRDLCIENDPT = 0xc1 - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_FRF16MFRBUNDLE = 0xa3 - IFT_FRFORWARD = 0x9e - IFT_G703AT2MB = 0x43 - IFT_G703AT64K = 0x42 - IFT_GIF = 0xf0 - IFT_GIGABITETHERNET = 0x75 - IFT_GR303IDT = 0xb2 - IFT_GR303RDT = 0xb1 - IFT_H323GATEKEEPER = 0xa4 - IFT_H323PROXY = 0xa5 - IFT_HDH1822 = 0x3 - IFT_HDLC = 0x76 - IFT_HDSL2 = 0xa8 - IFT_HIPERLAN2 = 0xb7 - IFT_HIPPI = 0x2f - IFT_HIPPIINTERFACE = 0x39 - IFT_HOSTPAD = 0x5a - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IBM370PARCHAN = 0x48 - IFT_IDSL = 0x9a - IFT_IEEE1394 = 0x90 - IFT_IEEE80211 = 0x47 - IFT_IEEE80212 = 0x37 - IFT_IEEE8023ADLAG = 0xa1 - IFT_IFGSN = 0x91 - IFT_IMT = 0xbe - IFT_INFINIBAND = 0xc7 - IFT_INTERLEAVE = 0x7c - IFT_IP = 0x7e - IFT_IPFORWARD = 0x8e - IFT_IPOVERATM = 0x72 - IFT_IPOVERCDLC = 0x6d - IFT_IPOVERCLAW = 0x6e - IFT_IPSWITCH = 0x4e - IFT_ISDN = 0x3f - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISDNS = 0x4b - IFT_ISDNU = 0x4c - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88025CRFPINT = 0x62 - IFT_ISO88025DTR = 0x56 - IFT_ISO88025FIBER = 0x73 - IFT_ISO88026 = 0xa - IFT_ISUP = 0xb3 - IFT_L2VLAN = 0x87 - IFT_L3IPVLAN = 0x88 - IFT_L3IPXVLAN = 0x89 - IFT_LAPB = 0x10 - IFT_LAPD = 0x4d - IFT_LAPF = 0x77 - IFT_LINEGROUP = 0xd2 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MEDIAMAILOVERIP = 0x8b - IFT_MFSIGLINK = 0xa7 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_MPC = 0x71 - IFT_MPLS = 0xa6 - IFT_MPLSTUNNEL = 0x96 - IFT_MSDSL = 0x8f - IFT_MVL = 0xbf - IFT_MYRINET = 0x63 - IFT_NFAS = 0xaf - IFT_NSIP = 0x1b - IFT_OPTICALCHANNEL = 0xc3 - IFT_OPTICALTRANSPORT = 0xc4 - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PFLOG = 0xf5 - IFT_PFSYNC = 0xf6 - IFT_PLC = 0xae - IFT_PON155 = 0xcf - IFT_PON622 = 0xd0 - IFT_POS = 0xab - IFT_PPP = 0x17 - IFT_PPPMULTILINKBUNDLE = 0x6c - IFT_PROPATM = 0xc5 - IFT_PROPBWAP2MP = 0xb8 - IFT_PROPCNLS = 0x59 - IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 - IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 - IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 - IFT_PROPMUX = 0x36 - IFT_PROPVIRTUAL = 0x35 - IFT_PROPWIRELESSP2P = 0x9d - IFT_PTPSERIAL = 0x16 - IFT_PVC = 0xf1 - IFT_Q2931 = 0xc9 - IFT_QLLC = 0x44 - IFT_RADIOMAC = 0xbc - IFT_RADSL = 0x5f - IFT_REACHDSL = 0xc0 - IFT_RFC1483 = 0x9f - IFT_RS232 = 0x21 - IFT_RSRB = 0x4f - IFT_SDLC = 0x11 - IFT_SDSL = 0x60 - IFT_SHDSL = 0xa9 - IFT_SIP = 0x1f - IFT_SIPSIG = 0xcc - IFT_SIPTG = 0xcb - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SONET = 0x27 - IFT_SONETOVERHEADCHANNEL = 0xb9 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_SRP = 0x97 - IFT_SS7SIGLINK = 0x9c - IFT_STACKTOSTACK = 0x6f - IFT_STARLAN = 0xb - IFT_STF = 0xd7 - IFT_T1 = 0x12 - IFT_TDLC = 0x74 - IFT_TELINK = 0xc8 - IFT_TERMPAD = 0x5b - IFT_TR008 = 0xb0 - IFT_TRANSPHDLC = 0x7b - IFT_TUNNEL = 0x83 - IFT_ULTRA = 0x1d - IFT_USB = 0xa0 - IFT_V11 = 0x40 - IFT_V35 = 0x2d - IFT_V36 = 0x41 - IFT_V37 = 0x78 - IFT_VDSL = 0x61 - IFT_VIRTUALIPADDRESS = 0x70 - IFT_VIRTUALTG = 0xca - IFT_VOICEDID = 0xd5 - IFT_VOICEEM = 0x64 - IFT_VOICEEMFGD = 0xd3 - IFT_VOICEENCAP = 0x67 - IFT_VOICEFGDEANA = 0xd4 - IFT_VOICEFXO = 0x65 - IFT_VOICEFXS = 0x66 - IFT_VOICEOVERATM = 0x98 - IFT_VOICEOVERCABLE = 0xc6 - IFT_VOICEOVERFRAMERELAY = 0x99 - IFT_VOICEOVERIP = 0x68 - IFT_X213 = 0x5d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25HUNTGROUP = 0x7a - IFT_X25MLP = 0x79 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LOOPBACKNET = 0x7f - IPPROTO_AH = 0x33 - IPPROTO_CARP = 0x70 - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GRE = 0x2f - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IGMP = 0x2 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPIP = 0x4 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_IPV6_ICMP = 0x3a - IPPROTO_MAX = 0x100 - IPPROTO_MAXID = 0x34 - IPPROTO_MOBILE = 0x37 - IPPROTO_NONE = 0x3b - IPPROTO_PFSYNC = 0xf0 - IPPROTO_PIM = 0x67 - IPPROTO_PUP = 0xc - IPPROTO_RAW = 0xff - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_TCP = 0x6 - IPPROTO_TP = 0x1d - IPPROTO_UDP = 0x11 - IPPROTO_VRRP = 0x70 - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_DONTFRAG = 0x3e - IPV6_DSTOPTS = 0x32 - IPV6_FAITH = 0x1d - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FRAGTTL = 0x78 - IPV6_HLIMDEC = 0x1 - IPV6_HOPLIMIT = 0x2f - IPV6_HOPOPTS = 0x31 - IPV6_IPSEC_POLICY = 0x1c - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXPACKET = 0xffff - IPV6_MMTU = 0x500 - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_PATHMTU = 0x2c - IPV6_PKTINFO = 0x2e - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_RECVDSTOPTS = 0x28 - IPV6_RECVHOPLIMIT = 0x25 - IPV6_RECVHOPOPTS = 0x27 - IPV6_RECVPATHMTU = 0x2b - IPV6_RECVPKTINFO = 0x24 - IPV6_RECVRTHDR = 0x26 - IPV6_RECVTCLASS = 0x39 - IPV6_RTHDR = 0x33 - IPV6_RTHDRDSTOPTS = 0x23 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x3d - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2a - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IP_ADD_MEMBERSHIP = 0xc - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DROP_MEMBERSHIP = 0xd - IP_EF = 0x8000 - IP_ERRORMTU = 0x15 - IP_HDRINCL = 0x2 - IP_IPSEC_POLICY = 0x16 - IP_MAXPACKET = 0xffff - IP_MAX_MEMBERSHIPS = 0x14 - IP_MF = 0x2000 - IP_MINFRAGSIZE = 0x45 - IP_MINTTL = 0x18 - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_OFFMASK = 0x1fff - IP_OPTIONS = 0x1 - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVIF = 0x14 - IP_RECVOPTS = 0x5 - IP_RECVRETOPTS = 0x6 - IP_RECVTTL = 0x17 - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_TOS = 0x3 - IP_TTL = 0x4 - ISIG = 0x80 - ISTRIP = 0x20 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - KERN_HOSTNAME = 0xa - KERN_OSRELEASE = 0x2 - KERN_OSTYPE = 0x1 - KERN_VERSION = 0x4 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x6 - MADV_NORMAL = 0x0 - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_SPACEAVAIL = 0x5 - MADV_WILLNEED = 0x3 - MAP_ALIGNMENT_16MB = 0x18000000 - MAP_ALIGNMENT_1TB = 0x28000000 - MAP_ALIGNMENT_256TB = 0x30000000 - MAP_ALIGNMENT_4GB = 0x20000000 - MAP_ALIGNMENT_64KB = 0x10000000 - MAP_ALIGNMENT_64PB = 0x38000000 - MAP_ALIGNMENT_MASK = -0x1000000 - MAP_ALIGNMENT_SHIFT = 0x18 - MAP_ANON = 0x1000 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_HASSEMAPHORE = 0x200 - MAP_INHERIT = 0x80 - MAP_INHERIT_COPY = 0x1 - MAP_INHERIT_DEFAULT = 0x1 - MAP_INHERIT_DONATE_COPY = 0x3 - MAP_INHERIT_NONE = 0x2 - MAP_INHERIT_SHARE = 0x0 - MAP_NORESERVE = 0x40 - MAP_PRIVATE = 0x2 - MAP_RENAME = 0x20 - MAP_SHARED = 0x1 - MAP_STACK = 0x2000 - MAP_TRYFIXED = 0x400 - MAP_WIRED = 0x800 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MNT_ASYNC = 0x40 - MNT_BASIC_FLAGS = 0xe782807f - MNT_DEFEXPORTED = 0x200 - MNT_DISCARD = 0x800000 - MNT_EXKERB = 0x800 - MNT_EXNORESPORT = 0x8000000 - MNT_EXPORTANON = 0x400 - MNT_EXPORTED = 0x100 - MNT_EXPUBLIC = 0x10000000 - MNT_EXRDONLY = 0x80 - MNT_EXTATTR = 0x1000000 - MNT_FORCE = 0x80000 - MNT_GETARGS = 0x400000 - MNT_IGNORE = 0x100000 - MNT_LAZY = 0x3 - MNT_LOCAL = 0x1000 - MNT_LOG = 0x2000000 - MNT_NOATIME = 0x4000000 - MNT_NOCOREDUMP = 0x8000 - MNT_NODEV = 0x10 - MNT_NODEVMTIME = 0x40000000 - MNT_NOEXEC = 0x4 - MNT_NOSUID = 0x8 - MNT_NOWAIT = 0x2 - MNT_OP_FLAGS = 0x4d0000 - MNT_QUOTA = 0x2000 - MNT_RDONLY = 0x1 - MNT_RELATIME = 0x20000 - MNT_RELOAD = 0x40000 - MNT_ROOTFS = 0x4000 - MNT_SOFTDEP = 0x80000000 - MNT_SYMPERM = 0x20000000 - MNT_SYNCHRONOUS = 0x2 - MNT_UNION = 0x20 - MNT_UPDATE = 0x10000 - MNT_VISFLAGMASK = 0xff90ffff - MNT_WAIT = 0x1 - MSG_BCAST = 0x100 - MSG_CMSG_CLOEXEC = 0x800 - MSG_CONTROLMBUF = 0x2000000 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOR = 0x8 - MSG_IOVUSRSPACE = 0x4000000 - MSG_LENUSRSPACE = 0x8000000 - MSG_MCAST = 0x200 - MSG_NAMEMBUF = 0x1000000 - MSG_NBIO = 0x1000 - MSG_NOSIGNAL = 0x400 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_USERFLAGS = 0xffffff - MSG_WAITALL = 0x40 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x2 - MS_SYNC = 0x4 - NAME_MAX = 0x1ff - NET_RT_DUMP = 0x1 - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x5 - NET_RT_MAXID = 0x6 - NET_RT_OIFLIST = 0x4 - NET_RT_OOIFLIST = 0x3 - NFDBITS = 0x20 - NOFLSH = 0x80000000 - NOTE_ATTRIB = 0x8 - NOTE_CHILD = 0x4 - NOTE_DELETE = 0x1 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXTEND = 0x4 - NOTE_FORK = 0x40000000 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_PCTRLMASK = 0xf0000000 - NOTE_PDATAMASK = 0xfffff - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - OFIOGETBMAP = 0xc004667a - ONLCR = 0x2 - ONLRET = 0x40 - ONOCR = 0x20 - ONOEOT = 0x8 - OPOST = 0x1 - O_ACCMODE = 0x3 - O_ALT_IO = 0x40000 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x400000 - O_CREAT = 0x200 - O_DIRECT = 0x80000 - O_DIRECTORY = 0x200000 - O_DSYNC = 0x10000 - O_EXCL = 0x800 - O_EXLOCK = 0x20 - O_FSYNC = 0x80 - O_NDELAY = 0x4 - O_NOCTTY = 0x8000 - O_NOFOLLOW = 0x100 - O_NONBLOCK = 0x4 - O_NOSIGPIPE = 0x1000000 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_RSYNC = 0x20000 - O_SHLOCK = 0x10 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PRI_IOFLUSH = 0x7c - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - RLIMIT_AS = 0xa - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_MEMLOCK = 0x6 - RLIMIT_NOFILE = 0x8 - RLIMIT_NPROC = 0x7 - RLIMIT_RSS = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_MAX = 0x9 - RTAX_NETMASK = 0x2 - RTAX_TAG = 0x8 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_NETMASK = 0x4 - RTA_TAG = 0x100 - RTF_ANNOUNCE = 0x20000 - RTF_BLACKHOLE = 0x1000 - RTF_CLONED = 0x2000 - RTF_CLONING = 0x100 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_GATEWAY = 0x2 - RTF_HOST = 0x4 - RTF_LLINFO = 0x400 - RTF_MASK = 0x80 - RTF_MODIFIED = 0x20 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_REJECT = 0x8 - RTF_SRC = 0x10000 - RTF_STATIC = 0x800 - RTF_UP = 0x1 - RTF_XRESOLVE = 0x200 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_CHGADDR = 0x15 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_GET = 0x4 - RTM_IEEE80211 = 0x11 - RTM_IFANNOUNCE = 0x10 - RTM_IFINFO = 0x14 - RTM_LLINFO_UPD = 0x13 - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_OIFINFO = 0xf - RTM_OLDADD = 0x9 - RTM_OLDDEL = 0xa - RTM_OOIFINFO = 0xe - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_SETGATE = 0x12 - RTM_VERSION = 0x4 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - SCM_CREDS = 0x4 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x8 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80906931 - SIOCADDRT = 0x8030720a - SIOCAIFADDR = 0x8040691a - SIOCALIFADDR = 0x8118691c - SIOCATMARK = 0x40047307 - SIOCDELMULTI = 0x80906932 - SIOCDELRT = 0x8030720b - SIOCDIFADDR = 0x80906919 - SIOCDIFPHYADDR = 0x80906949 - SIOCDLIFADDR = 0x8118691e - SIOCGDRVSPEC = 0xc01c697b - SIOCGETPFSYNC = 0xc09069f8 - SIOCGETSGCNT = 0xc0147534 - SIOCGETVIFCNT = 0xc0147533 - SIOCGHIWAT = 0x40047301 - SIOCGIFADDR = 0xc0906921 - SIOCGIFADDRPREF = 0xc0946920 - SIOCGIFALIAS = 0xc040691b - SIOCGIFBRDADDR = 0xc0906923 - SIOCGIFCAP = 0xc0206976 - SIOCGIFCONF = 0xc0086926 - SIOCGIFDATA = 0xc0946985 - SIOCGIFDLT = 0xc0906977 - SIOCGIFDSTADDR = 0xc0906922 - SIOCGIFFLAGS = 0xc0906911 - SIOCGIFGENERIC = 0xc090693a - SIOCGIFMEDIA = 0xc0286936 - SIOCGIFMETRIC = 0xc0906917 - SIOCGIFMTU = 0xc090697e - SIOCGIFNETMASK = 0xc0906925 - SIOCGIFPDSTADDR = 0xc0906948 - SIOCGIFPSRCADDR = 0xc0906947 - SIOCGLIFADDR = 0xc118691d - SIOCGLIFPHYADDR = 0xc118694b - SIOCGLINKSTR = 0xc01c6987 - SIOCGLOWAT = 0x40047303 - SIOCGPGRP = 0x40047309 - SIOCGVH = 0xc0906983 - SIOCIFCREATE = 0x8090697a - SIOCIFDESTROY = 0x80906979 - SIOCIFGCLONERS = 0xc00c6978 - SIOCINITIFADDR = 0xc0446984 - SIOCSDRVSPEC = 0x801c697b - SIOCSETPFSYNC = 0x809069f7 - SIOCSHIWAT = 0x80047300 - SIOCSIFADDR = 0x8090690c - SIOCSIFADDRPREF = 0x8094691f - SIOCSIFBRDADDR = 0x80906913 - SIOCSIFCAP = 0x80206975 - SIOCSIFDSTADDR = 0x8090690e - SIOCSIFFLAGS = 0x80906910 - SIOCSIFGENERIC = 0x80906939 - SIOCSIFMEDIA = 0xc0906935 - SIOCSIFMETRIC = 0x80906918 - SIOCSIFMTU = 0x8090697f - SIOCSIFNETMASK = 0x80906916 - SIOCSIFPHYADDR = 0x80406946 - SIOCSLIFPHYADDR = 0x8118694a - SIOCSLINKSTR = 0x801c6988 - SIOCSLOWAT = 0x80047302 - SIOCSPGRP = 0x80047308 - SIOCSVH = 0xc0906982 - SIOCZIFDATA = 0xc0946986 - SOCK_CLOEXEC = 0x10000000 - SOCK_DGRAM = 0x2 - SOCK_FLAGS_MASK = 0xf0000000 - SOCK_NONBLOCK = 0x20000000 - SOCK_NOSIGPIPE = 0x40000000 - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_ACCEPTFILTER = 0x1000 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LINGER = 0x80 - SO_NOHEADER = 0x100a - SO_NOSIGPIPE = 0x800 - SO_OOBINLINE = 0x100 - SO_OVERFLOWED = 0x1009 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x100c - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x100b - SO_TIMESTAMP = 0x2000 - SO_TYPE = 0x1008 - SO_USELOOPBACK = 0x40 - SYSCTL_VERSION = 0x1000000 - SYSCTL_VERS_0 = 0x0 - SYSCTL_VERS_1 = 0x1000000 - SYSCTL_VERS_MASK = 0xff000000 - S_ARCH1 = 0x10000 - S_ARCH2 = 0x20000 - S_BLKSIZE = 0x200 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFLNK = 0xa000 - S_IFMT = 0xf000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IFWHT = 0xe000 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISTXT = 0x200 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXGRP = 0x8 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - S_LOGIN_SET = 0x1 - TCIFLUSH = 0x1 - TCIOFLUSH = 0x3 - TCOFLUSH = 0x2 - TCP_CONGCTL = 0x20 - TCP_KEEPCNT = 0x6 - TCP_KEEPIDLE = 0x3 - TCP_KEEPINIT = 0x7 - TCP_KEEPINTVL = 0x5 - TCP_MAXBURST = 0x4 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_WINSHIFT = 0xe - TCP_MD5SIG = 0x10 - TCP_MINMSS = 0xd8 - TCP_MSS = 0x218 - TCP_NODELAY = 0x1 - TCSAFLUSH = 0x2 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCONS = 0x80047462 - TIOCDCDTIMESTAMP = 0x400c7458 - TIOCDRAIN = 0x2000745e - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLAG_CDTRCTS = 0x10 - TIOCFLAG_CLOCAL = 0x2 - TIOCFLAG_CRTSCTS = 0x4 - TIOCFLAG_MDMBUF = 0x8 - TIOCFLAG_SOFTCAR = 0x1 - TIOCFLUSH = 0x80047410 - TIOCGETA = 0x402c7413 - TIOCGETD = 0x4004741a - TIOCGFLAGS = 0x4004745d - TIOCGLINED = 0x40207442 - TIOCGPGRP = 0x40047477 - TIOCGQSIZE = 0x40047481 - TIOCGRANTPT = 0x20007447 - TIOCGSID = 0x40047463 - TIOCGSIZE = 0x40087468 - TIOCGWINSZ = 0x40087468 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGET = 0x4004746a - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCPTMGET = 0x40287446 - TIOCPTSNAME = 0x40287448 - TIOCRCVFRAME = 0x80047445 - TIOCREMOTE = 0x80047469 - TIOCSBRK = 0x2000747b - TIOCSCTTY = 0x20007461 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x802c7414 - TIOCSETAF = 0x802c7416 - TIOCSETAW = 0x802c7415 - TIOCSETD = 0x8004741b - TIOCSFLAGS = 0x8004745c - TIOCSIG = 0x2000745f - TIOCSLINED = 0x80207443 - TIOCSPGRP = 0x80047476 - TIOCSQSIZE = 0x80047480 - TIOCSSIZE = 0x80087467 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x80047465 - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCUCNTL = 0x80047466 - TIOCXMTFRAME = 0x80047444 - TOSTOP = 0x400000 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VTIME = 0x11 - VWERASE = 0x4 - WALL = 0x8 - WALLSIG = 0x8 - WALTSIG = 0x4 - WCLONE = 0x4 - WCOREFLAG = 0x80 - WNOHANG = 0x1 - WNOWAIT = 0x10000 - WNOZOMBIE = 0x20000 - WOPTSCHECKED = 0x40000 - WSTOPPED = 0x7f - WUNTRACED = 0x2 -) - -// Errors -const ( - E2BIG = syscall.Errno(0x7) - EACCES = syscall.Errno(0xd) - EADDRINUSE = syscall.Errno(0x30) - EADDRNOTAVAIL = syscall.Errno(0x31) - EAFNOSUPPORT = syscall.Errno(0x2f) - EAGAIN = syscall.Errno(0x23) - EALREADY = syscall.Errno(0x25) - EAUTH = syscall.Errno(0x50) - EBADF = syscall.Errno(0x9) - EBADMSG = syscall.Errno(0x58) - EBADRPC = syscall.Errno(0x48) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x57) - ECHILD = syscall.Errno(0xa) - ECONNABORTED = syscall.Errno(0x35) - ECONNREFUSED = syscall.Errno(0x3d) - ECONNRESET = syscall.Errno(0x36) - EDEADLK = syscall.Errno(0xb) - EDESTADDRREQ = syscall.Errno(0x27) - EDOM = syscall.Errno(0x21) - EDQUOT = syscall.Errno(0x45) - EEXIST = syscall.Errno(0x11) - EFAULT = syscall.Errno(0xe) - EFBIG = syscall.Errno(0x1b) - EFTYPE = syscall.Errno(0x4f) - EHOSTDOWN = syscall.Errno(0x40) - EHOSTUNREACH = syscall.Errno(0x41) - EIDRM = syscall.Errno(0x52) - EILSEQ = syscall.Errno(0x55) - EINPROGRESS = syscall.Errno(0x24) - EINTR = syscall.Errno(0x4) - EINVAL = syscall.Errno(0x16) - EIO = syscall.Errno(0x5) - EISCONN = syscall.Errno(0x38) - EISDIR = syscall.Errno(0x15) - ELAST = syscall.Errno(0x60) - ELOOP = syscall.Errno(0x3e) - EMFILE = syscall.Errno(0x18) - EMLINK = syscall.Errno(0x1f) - EMSGSIZE = syscall.Errno(0x28) - EMULTIHOP = syscall.Errno(0x5e) - ENAMETOOLONG = syscall.Errno(0x3f) - ENEEDAUTH = syscall.Errno(0x51) - ENETDOWN = syscall.Errno(0x32) - ENETRESET = syscall.Errno(0x34) - ENETUNREACH = syscall.Errno(0x33) - ENFILE = syscall.Errno(0x17) - ENOATTR = syscall.Errno(0x5d) - ENOBUFS = syscall.Errno(0x37) - ENODATA = syscall.Errno(0x59) - ENODEV = syscall.Errno(0x13) - ENOENT = syscall.Errno(0x2) - ENOEXEC = syscall.Errno(0x8) - ENOLCK = syscall.Errno(0x4d) - ENOLINK = syscall.Errno(0x5f) - ENOMEM = syscall.Errno(0xc) - ENOMSG = syscall.Errno(0x53) - ENOPROTOOPT = syscall.Errno(0x2a) - ENOSPC = syscall.Errno(0x1c) - ENOSR = syscall.Errno(0x5a) - ENOSTR = syscall.Errno(0x5b) - ENOSYS = syscall.Errno(0x4e) - ENOTBLK = syscall.Errno(0xf) - ENOTCONN = syscall.Errno(0x39) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x42) - ENOTSOCK = syscall.Errno(0x26) - ENOTSUP = syscall.Errno(0x56) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x2d) - EOVERFLOW = syscall.Errno(0x54) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x2e) - EPIPE = syscall.Errno(0x20) - EPROCLIM = syscall.Errno(0x43) - EPROCUNAVAIL = syscall.Errno(0x4c) - EPROGMISMATCH = syscall.Errno(0x4b) - EPROGUNAVAIL = syscall.Errno(0x4a) - EPROTO = syscall.Errno(0x60) - EPROTONOSUPPORT = syscall.Errno(0x2b) - EPROTOTYPE = syscall.Errno(0x29) - ERANGE = syscall.Errno(0x22) - EREMOTE = syscall.Errno(0x47) - EROFS = syscall.Errno(0x1e) - ERPCMISMATCH = syscall.Errno(0x49) - ESHUTDOWN = syscall.Errno(0x3a) - ESOCKTNOSUPPORT = syscall.Errno(0x2c) - ESPIPE = syscall.Errno(0x1d) - ESRCH = syscall.Errno(0x3) - ESTALE = syscall.Errno(0x46) - ETIME = syscall.Errno(0x5c) - ETIMEDOUT = syscall.Errno(0x3c) - ETOOMANYREFS = syscall.Errno(0x3b) - ETXTBSY = syscall.Errno(0x1a) - EUSERS = syscall.Errno(0x44) - EWOULDBLOCK = syscall.Errno(0x23) - EXDEV = syscall.Errno(0x12) -) - -// Signals -const ( - SIGABRT = syscall.Signal(0x6) - SIGALRM = syscall.Signal(0xe) - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x14) - SIGCONT = syscall.Signal(0x13) - SIGEMT = syscall.Signal(0x7) - SIGFPE = syscall.Signal(0x8) - SIGHUP = syscall.Signal(0x1) - SIGILL = syscall.Signal(0x4) - SIGINFO = syscall.Signal(0x1d) - SIGINT = syscall.Signal(0x2) - SIGIO = syscall.Signal(0x17) - SIGIOT = syscall.Signal(0x6) - SIGKILL = syscall.Signal(0x9) - SIGPIPE = syscall.Signal(0xd) - SIGPROF = syscall.Signal(0x1b) - SIGPWR = syscall.Signal(0x20) - SIGQUIT = syscall.Signal(0x3) - SIGSEGV = syscall.Signal(0xb) - SIGSTOP = syscall.Signal(0x11) - SIGSYS = syscall.Signal(0xc) - SIGTERM = syscall.Signal(0xf) - SIGTRAP = syscall.Signal(0x5) - SIGTSTP = syscall.Signal(0x12) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x10) - SIGUSR1 = syscall.Signal(0x1e) - SIGUSR2 = syscall.Signal(0x1f) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "device not configured"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EDEADLK", "resource deadlock avoided"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "cross-device link"}, - {19, "ENODEV", "operation not supported by device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "result too large or too small"}, - {35, "EAGAIN", "resource temporarily unavailable"}, - {36, "EINPROGRESS", "operation now in progress"}, - {37, "EALREADY", "operation already in progress"}, - {38, "ENOTSOCK", "socket operation on non-socket"}, - {39, "EDESTADDRREQ", "destination address required"}, - {40, "EMSGSIZE", "message too long"}, - {41, "EPROTOTYPE", "protocol wrong type for socket"}, - {42, "ENOPROTOOPT", "protocol option not available"}, - {43, "EPROTONOSUPPORT", "protocol not supported"}, - {44, "ESOCKTNOSUPPORT", "socket type not supported"}, - {45, "EOPNOTSUPP", "operation not supported"}, - {46, "EPFNOSUPPORT", "protocol family not supported"}, - {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, - {48, "EADDRINUSE", "address already in use"}, - {49, "EADDRNOTAVAIL", "can't assign requested address"}, - {50, "ENETDOWN", "network is down"}, - {51, "ENETUNREACH", "network is unreachable"}, - {52, "ENETRESET", "network dropped connection on reset"}, - {53, "ECONNABORTED", "software caused connection abort"}, - {54, "ECONNRESET", "connection reset by peer"}, - {55, "ENOBUFS", "no buffer space available"}, - {56, "EISCONN", "socket is already connected"}, - {57, "ENOTCONN", "socket is not connected"}, - {58, "ESHUTDOWN", "can't send after socket shutdown"}, - {59, "ETOOMANYREFS", "too many references: can't splice"}, - {60, "ETIMEDOUT", "connection timed out"}, - {61, "ECONNREFUSED", "connection refused"}, - {62, "ELOOP", "too many levels of symbolic links"}, - {63, "ENAMETOOLONG", "file name too long"}, - {64, "EHOSTDOWN", "host is down"}, - {65, "EHOSTUNREACH", "no route to host"}, - {66, "ENOTEMPTY", "directory not empty"}, - {67, "EPROCLIM", "too many processes"}, - {68, "EUSERS", "too many users"}, - {69, "EDQUOT", "disc quota exceeded"}, - {70, "ESTALE", "stale NFS file handle"}, - {71, "EREMOTE", "too many levels of remote in path"}, - {72, "EBADRPC", "RPC struct is bad"}, - {73, "ERPCMISMATCH", "RPC version wrong"}, - {74, "EPROGUNAVAIL", "RPC prog. not avail"}, - {75, "EPROGMISMATCH", "program version wrong"}, - {76, "EPROCUNAVAIL", "bad procedure for program"}, - {77, "ENOLCK", "no locks available"}, - {78, "ENOSYS", "function not implemented"}, - {79, "EFTYPE", "inappropriate file type or format"}, - {80, "EAUTH", "authentication error"}, - {81, "ENEEDAUTH", "need authenticator"}, - {82, "EIDRM", "identifier removed"}, - {83, "ENOMSG", "no message of desired type"}, - {84, "EOVERFLOW", "value too large to be stored in data type"}, - {85, "EILSEQ", "illegal byte sequence"}, - {86, "ENOTSUP", "not supported"}, - {87, "ECANCELED", "operation Canceled"}, - {88, "EBADMSG", "bad or Corrupt message"}, - {89, "ENODATA", "no message available"}, - {90, "ENOSR", "no STREAM resources"}, - {91, "ENOSTR", "not a STREAM"}, - {92, "ETIME", "STREAM ioctl timeout"}, - {93, "ENOATTR", "attribute not found"}, - {94, "EMULTIHOP", "multihop attempted"}, - {95, "ENOLINK", "link has been severed"}, - {96, "ELAST", "protocol error"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, - {6, "SIGIOT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGURG", "urgent I/O condition"}, - {17, "SIGSTOP", "stopped (signal)"}, - {18, "SIGTSTP", "stopped"}, - {19, "SIGCONT", "continued"}, - {20, "SIGCHLD", "child exited"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGIO", "I/O possible"}, - {24, "SIGXCPU", "cputime limit exceeded"}, - {25, "SIGXFSZ", "filesize limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window size changes"}, - {29, "SIGINFO", "information request"}, - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, - {32, "SIGPWR", "power fail/restart"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go deleted file mode 100644 index 8d4eb0c..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go +++ /dev/null @@ -1,1770 +0,0 @@ -// mkerrors.sh -m64 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build amd64 && netbsd -// +build amd64,netbsd - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -m64 _const.go - -package unix - -import "syscall" - -const ( - AF_APPLETALK = 0x10 - AF_ARP = 0x1c - AF_BLUETOOTH = 0x1f - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1a - AF_ECMA = 0x8 - AF_HYLINK = 0xf - AF_IEEE80211 = 0x20 - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x18 - AF_IPX = 0x17 - AF_ISDN = 0x1a - AF_ISO = 0x7 - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x23 - AF_MPLS = 0x21 - AF_NATM = 0x1b - AF_NS = 0x6 - AF_OROUTE = 0x11 - AF_OSI = 0x7 - AF_PUP = 0x4 - AF_ROUTE = 0x22 - AF_SNA = 0xb - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - ARPHRD_ARCNET = 0x7 - ARPHRD_ETHER = 0x1 - ARPHRD_FRELAY = 0xf - ARPHRD_IEEE1394 = 0x18 - ARPHRD_IEEE802 = 0x6 - ARPHRD_STRIP = 0x17 - B0 = 0x0 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B230400 = 0x38400 - B2400 = 0x960 - B28800 = 0x7080 - B300 = 0x12c - B38400 = 0x9600 - B460800 = 0x70800 - B4800 = 0x12c0 - B50 = 0x32 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B921600 = 0xe1000 - B9600 = 0x2580 - BIOCFEEDBACK = 0x8004427d - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc0104277 - BIOCGETIF = 0x4090426b - BIOCGFEEDBACK = 0x4004427c - BIOCGHDRCMPLT = 0x40044274 - BIOCGRTIMEOUT = 0x4010427b - BIOCGSEESENT = 0x40044278 - BIOCGSTATS = 0x4080426f - BIOCGSTATSOLD = 0x4008426f - BIOCIMMEDIATE = 0x80044270 - BIOCPROMISC = 0x20004269 - BIOCSBLEN = 0xc0044266 - BIOCSDLT = 0x80044276 - BIOCSETF = 0x80104267 - BIOCSETIF = 0x8090426c - BIOCSFEEDBACK = 0x8004427d - BIOCSHDRCMPLT = 0x80044275 - BIOCSRTIMEOUT = 0x8010427a - BIOCSSEESENT = 0x80044279 - BIOCSTCPF = 0x80104272 - BIOCSUDPF = 0x80104273 - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x8 - BPF_ALIGNMENT32 = 0x4 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_DFLTBUFSIZE = 0x100000 - BPF_DIV = 0x30 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x1000000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_W = 0x0 - BPF_X = 0x8 - BRKINT = 0x2 - CFLUSH = 0xf - CLOCAL = 0x8000 - CLONE_CSIGNAL = 0xff - CLONE_FILES = 0x400 - CLONE_FS = 0x200 - CLONE_PID = 0x1000 - CLONE_PTRACE = 0x2000 - CLONE_SIGHAND = 0x800 - CLONE_VFORK = 0x4000 - CLONE_VM = 0x100 - CPUSTATES = 0x5 - CP_IDLE = 0x4 - CP_INTR = 0x3 - CP_NICE = 0x1 - CP_SYS = 0x2 - CP_USER = 0x0 - CREAD = 0x800 - CRTSCTS = 0x10000 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0x14 - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTL_HW = 0x6 - CTL_KERN = 0x1 - CTL_MAXNAME = 0xc - CTL_NET = 0x4 - CTL_QUERY = -0x2 - DIOCBSFLUSH = 0x20006478 - DLT_A429 = 0xb8 - DLT_A653_ICM = 0xb9 - DLT_AIRONET_HEADER = 0x78 - DLT_AOS = 0xde - DLT_APPLE_IP_OVER_IEEE1394 = 0x8a - DLT_ARCNET = 0x7 - DLT_ARCNET_LINUX = 0x81 - DLT_ATM_CLIP = 0x13 - DLT_ATM_RFC1483 = 0xb - DLT_AURORA = 0x7e - DLT_AX25 = 0x3 - DLT_AX25_KISS = 0xca - DLT_BACNET_MS_TP = 0xa5 - DLT_BLUETOOTH_HCI_H4 = 0xbb - DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 - DLT_CAN20B = 0xbe - DLT_CAN_SOCKETCAN = 0xe3 - DLT_CHAOS = 0x5 - DLT_CISCO_IOS = 0x76 - DLT_C_HDLC = 0x68 - DLT_C_HDLC_WITH_DIR = 0xcd - DLT_DECT = 0xdd - DLT_DOCSIS = 0x8f - DLT_ECONET = 0x73 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0x6d - DLT_ERF = 0xc5 - DLT_ERF_ETH = 0xaf - DLT_ERF_POS = 0xb0 - DLT_FC_2 = 0xe0 - DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 - DLT_FDDI = 0xa - DLT_FLEXRAY = 0xd2 - DLT_FRELAY = 0x6b - DLT_FRELAY_WITH_DIR = 0xce - DLT_GCOM_SERIAL = 0xad - DLT_GCOM_T1E1 = 0xac - DLT_GPF_F = 0xab - DLT_GPF_T = 0xaa - DLT_GPRS_LLC = 0xa9 - DLT_GSMTAP_ABIS = 0xda - DLT_GSMTAP_UM = 0xd9 - DLT_HDLC = 0x10 - DLT_HHDLC = 0x79 - DLT_HIPPI = 0xf - DLT_IBM_SN = 0x92 - DLT_IBM_SP = 0x91 - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_IEEE802_11_RADIO_AVS = 0xa3 - DLT_IEEE802_15_4 = 0xc3 - DLT_IEEE802_15_4_LINUX = 0xbf - DLT_IEEE802_15_4_NONASK_PHY = 0xd7 - DLT_IEEE802_16_MAC_CPS = 0xbc - DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 - DLT_IPMB = 0xc7 - DLT_IPMB_LINUX = 0xd1 - DLT_IPNET = 0xe2 - DLT_IPV4 = 0xe4 - DLT_IPV6 = 0xe5 - DLT_IP_OVER_FC = 0x7a - DLT_JUNIPER_ATM1 = 0x89 - DLT_JUNIPER_ATM2 = 0x87 - DLT_JUNIPER_CHDLC = 0xb5 - DLT_JUNIPER_ES = 0x84 - DLT_JUNIPER_ETHER = 0xb2 - DLT_JUNIPER_FRELAY = 0xb4 - DLT_JUNIPER_GGSN = 0x85 - DLT_JUNIPER_ISM = 0xc2 - DLT_JUNIPER_MFR = 0x86 - DLT_JUNIPER_MLFR = 0x83 - DLT_JUNIPER_MLPPP = 0x82 - DLT_JUNIPER_MONITOR = 0xa4 - DLT_JUNIPER_PIC_PEER = 0xae - DLT_JUNIPER_PPP = 0xb3 - DLT_JUNIPER_PPPOE = 0xa7 - DLT_JUNIPER_PPPOE_ATM = 0xa8 - DLT_JUNIPER_SERVICES = 0x88 - DLT_JUNIPER_ST = 0xc8 - DLT_JUNIPER_VP = 0xb7 - DLT_LAPB_WITH_DIR = 0xcf - DLT_LAPD = 0xcb - DLT_LIN = 0xd4 - DLT_LINUX_EVDEV = 0xd8 - DLT_LINUX_IRDA = 0x90 - DLT_LINUX_LAPD = 0xb1 - DLT_LINUX_SLL = 0x71 - DLT_LOOP = 0x6c - DLT_LTALK = 0x72 - DLT_MFR = 0xb6 - DLT_MOST = 0xd3 - DLT_MPLS = 0xdb - DLT_MTP2 = 0x8c - DLT_MTP2_WITH_PHDR = 0x8b - DLT_MTP3 = 0x8d - DLT_NULL = 0x0 - DLT_PCI_EXP = 0x7d - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x12 - DLT_PPI = 0xc0 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0xe - DLT_PPP_ETHER = 0x33 - DLT_PPP_PPPD = 0xa6 - DLT_PPP_SERIAL = 0x32 - DLT_PPP_WITH_DIR = 0xcc - DLT_PRISM_HEADER = 0x77 - DLT_PRONET = 0x4 - DLT_RAIF1 = 0xc6 - DLT_RAW = 0xc - DLT_RAWAF_MASK = 0x2240000 - DLT_RIO = 0x7c - DLT_SCCP = 0x8e - DLT_SITA = 0xc4 - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xd - DLT_SUNATM = 0x7b - DLT_SYMANTEC_FIREWALL = 0x63 - DLT_TZSP = 0x80 - DLT_USB = 0xba - DLT_USB_LINUX = 0xbd - DLT_USB_LINUX_MMAPPED = 0xdc - DLT_WIHART = 0xdf - DLT_X2E_SERIAL = 0xd5 - DLT_X2E_XORAYA = 0xd6 - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - DT_WHT = 0xe - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EMUL_LINUX = 0x1 - EMUL_LINUX32 = 0x5 - EMUL_MAXID = 0x6 - ETHERCAP_JUMBO_MTU = 0x4 - ETHERCAP_VLAN_HWTAGGING = 0x2 - ETHERCAP_VLAN_MTU = 0x1 - ETHERMIN = 0x2e - ETHERMTU = 0x5dc - ETHERMTU_JUMBO = 0x2328 - ETHERTYPE_8023 = 0x4 - ETHERTYPE_AARP = 0x80f3 - ETHERTYPE_ACCTON = 0x8390 - ETHERTYPE_AEONIC = 0x8036 - ETHERTYPE_ALPHA = 0x814a - ETHERTYPE_AMBER = 0x6008 - ETHERTYPE_AMOEBA = 0x8145 - ETHERTYPE_APOLLO = 0x80f7 - ETHERTYPE_APOLLODOMAIN = 0x8019 - ETHERTYPE_APPLETALK = 0x809b - ETHERTYPE_APPLITEK = 0x80c7 - ETHERTYPE_ARGONAUT = 0x803a - ETHERTYPE_ARP = 0x806 - ETHERTYPE_AT = 0x809b - ETHERTYPE_ATALK = 0x809b - ETHERTYPE_ATOMIC = 0x86df - ETHERTYPE_ATT = 0x8069 - ETHERTYPE_ATTSTANFORD = 0x8008 - ETHERTYPE_AUTOPHON = 0x806a - ETHERTYPE_AXIS = 0x8856 - ETHERTYPE_BCLOOP = 0x9003 - ETHERTYPE_BOFL = 0x8102 - ETHERTYPE_CABLETRON = 0x7034 - ETHERTYPE_CHAOS = 0x804 - ETHERTYPE_COMDESIGN = 0x806c - ETHERTYPE_COMPUGRAPHIC = 0x806d - ETHERTYPE_COUNTERPOINT = 0x8062 - ETHERTYPE_CRONUS = 0x8004 - ETHERTYPE_CRONUSVLN = 0x8003 - ETHERTYPE_DCA = 0x1234 - ETHERTYPE_DDE = 0x807b - ETHERTYPE_DEBNI = 0xaaaa - ETHERTYPE_DECAM = 0x8048 - ETHERTYPE_DECCUST = 0x6006 - ETHERTYPE_DECDIAG = 0x6005 - ETHERTYPE_DECDNS = 0x803c - ETHERTYPE_DECDTS = 0x803e - ETHERTYPE_DECEXPER = 0x6000 - ETHERTYPE_DECLAST = 0x8041 - ETHERTYPE_DECLTM = 0x803f - ETHERTYPE_DECMUMPS = 0x6009 - ETHERTYPE_DECNETBIOS = 0x8040 - ETHERTYPE_DELTACON = 0x86de - ETHERTYPE_DIDDLE = 0x4321 - ETHERTYPE_DLOG1 = 0x660 - ETHERTYPE_DLOG2 = 0x661 - ETHERTYPE_DN = 0x6003 - ETHERTYPE_DOGFIGHT = 0x1989 - ETHERTYPE_DSMD = 0x8039 - ETHERTYPE_ECMA = 0x803 - ETHERTYPE_ENCRYPT = 0x803d - ETHERTYPE_ES = 0x805d - ETHERTYPE_EXCELAN = 0x8010 - ETHERTYPE_EXPERDATA = 0x8049 - ETHERTYPE_FLIP = 0x8146 - ETHERTYPE_FLOWCONTROL = 0x8808 - ETHERTYPE_FRARP = 0x808 - ETHERTYPE_GENDYN = 0x8068 - ETHERTYPE_HAYES = 0x8130 - ETHERTYPE_HIPPI_FP = 0x8180 - ETHERTYPE_HITACHI = 0x8820 - ETHERTYPE_HP = 0x8005 - ETHERTYPE_IEEEPUP = 0xa00 - ETHERTYPE_IEEEPUPAT = 0xa01 - ETHERTYPE_IMLBL = 0x4c42 - ETHERTYPE_IMLBLDIAG = 0x424c - ETHERTYPE_IP = 0x800 - ETHERTYPE_IPAS = 0x876c - ETHERTYPE_IPV6 = 0x86dd - ETHERTYPE_IPX = 0x8137 - ETHERTYPE_IPXNEW = 0x8037 - ETHERTYPE_KALPANA = 0x8582 - ETHERTYPE_LANBRIDGE = 0x8038 - ETHERTYPE_LANPROBE = 0x8888 - ETHERTYPE_LAT = 0x6004 - ETHERTYPE_LBACK = 0x9000 - ETHERTYPE_LITTLE = 0x8060 - ETHERTYPE_LOGICRAFT = 0x8148 - ETHERTYPE_LOOPBACK = 0x9000 - ETHERTYPE_MATRA = 0x807a - ETHERTYPE_MAX = 0xffff - ETHERTYPE_MERIT = 0x807c - ETHERTYPE_MICP = 0x873a - ETHERTYPE_MOPDL = 0x6001 - ETHERTYPE_MOPRC = 0x6002 - ETHERTYPE_MOTOROLA = 0x818d - ETHERTYPE_MPLS = 0x8847 - ETHERTYPE_MPLS_MCAST = 0x8848 - ETHERTYPE_MUMPS = 0x813f - ETHERTYPE_NBPCC = 0x3c04 - ETHERTYPE_NBPCLAIM = 0x3c09 - ETHERTYPE_NBPCLREQ = 0x3c05 - ETHERTYPE_NBPCLRSP = 0x3c06 - ETHERTYPE_NBPCREQ = 0x3c02 - ETHERTYPE_NBPCRSP = 0x3c03 - ETHERTYPE_NBPDG = 0x3c07 - ETHERTYPE_NBPDGB = 0x3c08 - ETHERTYPE_NBPDLTE = 0x3c0a - ETHERTYPE_NBPRAR = 0x3c0c - ETHERTYPE_NBPRAS = 0x3c0b - ETHERTYPE_NBPRST = 0x3c0d - ETHERTYPE_NBPSCD = 0x3c01 - ETHERTYPE_NBPVCD = 0x3c00 - ETHERTYPE_NBS = 0x802 - ETHERTYPE_NCD = 0x8149 - ETHERTYPE_NESTAR = 0x8006 - ETHERTYPE_NETBEUI = 0x8191 - ETHERTYPE_NOVELL = 0x8138 - ETHERTYPE_NS = 0x600 - ETHERTYPE_NSAT = 0x601 - ETHERTYPE_NSCOMPAT = 0x807 - ETHERTYPE_NTRAILER = 0x10 - ETHERTYPE_OS9 = 0x7007 - ETHERTYPE_OS9NET = 0x7009 - ETHERTYPE_PACER = 0x80c6 - ETHERTYPE_PAE = 0x888e - ETHERTYPE_PCS = 0x4242 - ETHERTYPE_PLANNING = 0x8044 - ETHERTYPE_PPP = 0x880b - ETHERTYPE_PPPOE = 0x8864 - ETHERTYPE_PPPOEDISC = 0x8863 - ETHERTYPE_PRIMENTS = 0x7031 - ETHERTYPE_PUP = 0x200 - ETHERTYPE_PUPAT = 0x200 - ETHERTYPE_RACAL = 0x7030 - ETHERTYPE_RATIONAL = 0x8150 - ETHERTYPE_RAWFR = 0x6559 - ETHERTYPE_RCL = 0x1995 - ETHERTYPE_RDP = 0x8739 - ETHERTYPE_RETIX = 0x80f2 - ETHERTYPE_REVARP = 0x8035 - ETHERTYPE_SCA = 0x6007 - ETHERTYPE_SECTRA = 0x86db - ETHERTYPE_SECUREDATA = 0x876d - ETHERTYPE_SGITW = 0x817e - ETHERTYPE_SG_BOUNCE = 0x8016 - ETHERTYPE_SG_DIAG = 0x8013 - ETHERTYPE_SG_NETGAMES = 0x8014 - ETHERTYPE_SG_RESV = 0x8015 - ETHERTYPE_SIMNET = 0x5208 - ETHERTYPE_SLOWPROTOCOLS = 0x8809 - ETHERTYPE_SNA = 0x80d5 - ETHERTYPE_SNMP = 0x814c - ETHERTYPE_SONIX = 0xfaf5 - ETHERTYPE_SPIDER = 0x809f - ETHERTYPE_SPRITE = 0x500 - ETHERTYPE_STP = 0x8181 - ETHERTYPE_TALARIS = 0x812b - ETHERTYPE_TALARISMC = 0x852b - ETHERTYPE_TCPCOMP = 0x876b - ETHERTYPE_TCPSM = 0x9002 - ETHERTYPE_TEC = 0x814f - ETHERTYPE_TIGAN = 0x802f - ETHERTYPE_TRAIL = 0x1000 - ETHERTYPE_TRANSETHER = 0x6558 - ETHERTYPE_TYMSHARE = 0x802e - ETHERTYPE_UBBST = 0x7005 - ETHERTYPE_UBDEBUG = 0x900 - ETHERTYPE_UBDIAGLOOP = 0x7002 - ETHERTYPE_UBDL = 0x7000 - ETHERTYPE_UBNIU = 0x7001 - ETHERTYPE_UBNMC = 0x7003 - ETHERTYPE_VALID = 0x1600 - ETHERTYPE_VARIAN = 0x80dd - ETHERTYPE_VAXELN = 0x803b - ETHERTYPE_VEECO = 0x8067 - ETHERTYPE_VEXP = 0x805b - ETHERTYPE_VGLAB = 0x8131 - ETHERTYPE_VINES = 0xbad - ETHERTYPE_VINESECHO = 0xbaf - ETHERTYPE_VINESLOOP = 0xbae - ETHERTYPE_VITAL = 0xff00 - ETHERTYPE_VLAN = 0x8100 - ETHERTYPE_VLTLMAN = 0x8080 - ETHERTYPE_VPROD = 0x805c - ETHERTYPE_VURESERVED = 0x8147 - ETHERTYPE_WATERLOO = 0x8130 - ETHERTYPE_WELLFLEET = 0x8103 - ETHERTYPE_X25 = 0x805 - ETHERTYPE_X75 = 0x801 - ETHERTYPE_XNSSM = 0x9001 - ETHERTYPE_XTP = 0x817d - ETHER_ADDR_LEN = 0x6 - ETHER_CRC_LEN = 0x4 - ETHER_CRC_POLY_BE = 0x4c11db6 - ETHER_CRC_POLY_LE = 0xedb88320 - ETHER_HDR_LEN = 0xe - ETHER_MAX_LEN = 0x5ee - ETHER_MAX_LEN_JUMBO = 0x233a - ETHER_MIN_LEN = 0x40 - ETHER_PPPOE_ENCAP_LEN = 0x8 - ETHER_TYPE_LEN = 0x2 - ETHER_VLAN_ENCAP_LEN = 0x4 - EVFILT_AIO = 0x2 - EVFILT_PROC = 0x4 - EVFILT_READ = 0x0 - EVFILT_SIGNAL = 0x5 - EVFILT_SYSCOUNT = 0x7 - EVFILT_TIMER = 0x6 - EVFILT_VNODE = 0x3 - EVFILT_WRITE = 0x1 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG1 = 0x2000 - EV_ONESHOT = 0x10 - EV_SYSFLAGS = 0xf000 - EXTA = 0x4b00 - EXTATTR_CMD_START = 0x1 - EXTATTR_CMD_STOP = 0x2 - EXTATTR_NAMESPACE_SYSTEM = 0x2 - EXTATTR_NAMESPACE_USER = 0x1 - EXTB = 0x9600 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x100 - FLUSHO = 0x800000 - F_CLOSEM = 0xa - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0xc - F_FSCTL = -0x80000000 - F_FSDIRMASK = 0x70000000 - F_FSIN = 0x10000000 - F_FSINOUT = 0x30000000 - F_FSOUT = 0x20000000 - F_FSPRIV = 0x8000 - F_FSVOID = 0x40000000 - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0x7 - F_GETNOSIGPIPE = 0xd - F_GETOWN = 0x5 - F_MAXFD = 0xb - F_OK = 0x0 - F_PARAM_MASK = 0xfff - F_PARAM_MAX = 0xfff - F_RDLCK = 0x1 - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0x8 - F_SETLKW = 0x9 - F_SETNOSIGPIPE = 0xe - F_SETOWN = 0x6 - F_UNLCK = 0x2 - F_WRLCK = 0x3 - HUPCL = 0x4000 - HW_MACHINE = 0x1 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFAN_ARRIVAL = 0x0 - IFAN_DEPARTURE = 0x1 - IFA_ROUTE = 0x1 - IFF_ALLMULTI = 0x200 - IFF_BROADCAST = 0x2 - IFF_CANTCHANGE = 0x8f52 - IFF_DEBUG = 0x4 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_NOTRAILERS = 0x20 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PROMISC = 0x100 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_1822 = 0x2 - IFT_A12MPPSWITCH = 0x82 - IFT_AAL2 = 0xbb - IFT_AAL5 = 0x31 - IFT_ADSL = 0x5e - IFT_AFLANE8023 = 0x3b - IFT_AFLANE8025 = 0x3c - IFT_ARAP = 0x58 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ASYNC = 0x54 - IFT_ATM = 0x25 - IFT_ATMDXI = 0x69 - IFT_ATMFUNI = 0x6a - IFT_ATMIMA = 0x6b - IFT_ATMLOGICAL = 0x50 - IFT_ATMRADIO = 0xbd - IFT_ATMSUBINTERFACE = 0x86 - IFT_ATMVCIENDPT = 0xc2 - IFT_ATMVIRTUAL = 0x95 - IFT_BGPPOLICYACCOUNTING = 0xa2 - IFT_BRIDGE = 0xd1 - IFT_BSC = 0x53 - IFT_CARP = 0xf8 - IFT_CCTEMUL = 0x3d - IFT_CEPT = 0x13 - IFT_CES = 0x85 - IFT_CHANNEL = 0x46 - IFT_CNR = 0x55 - IFT_COFFEE = 0x84 - IFT_COMPOSITELINK = 0x9b - IFT_DCN = 0x8d - IFT_DIGITALPOWERLINE = 0x8a - IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba - IFT_DLSW = 0x4a - IFT_DOCSCABLEDOWNSTREAM = 0x80 - IFT_DOCSCABLEMACLAYER = 0x7f - IFT_DOCSCABLEUPSTREAM = 0x81 - IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd - IFT_DS0 = 0x51 - IFT_DS0BUNDLE = 0x52 - IFT_DS1FDL = 0xaa - IFT_DS3 = 0x1e - IFT_DTM = 0x8c - IFT_DVBASILN = 0xac - IFT_DVBASIOUT = 0xad - IFT_DVBRCCDOWNSTREAM = 0x93 - IFT_DVBRCCMACLAYER = 0x92 - IFT_DVBRCCUPSTREAM = 0x94 - IFT_ECONET = 0xce - IFT_EON = 0x19 - IFT_EPLRS = 0x57 - IFT_ESCON = 0x49 - IFT_ETHER = 0x6 - IFT_FAITH = 0xf2 - IFT_FAST = 0x7d - IFT_FASTETHER = 0x3e - IFT_FASTETHERFX = 0x45 - IFT_FDDI = 0xf - IFT_FIBRECHANNEL = 0x38 - IFT_FRAMERELAYINTERCONNECT = 0x3a - IFT_FRAMERELAYMPI = 0x5c - IFT_FRDLCIENDPT = 0xc1 - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_FRF16MFRBUNDLE = 0xa3 - IFT_FRFORWARD = 0x9e - IFT_G703AT2MB = 0x43 - IFT_G703AT64K = 0x42 - IFT_GIF = 0xf0 - IFT_GIGABITETHERNET = 0x75 - IFT_GR303IDT = 0xb2 - IFT_GR303RDT = 0xb1 - IFT_H323GATEKEEPER = 0xa4 - IFT_H323PROXY = 0xa5 - IFT_HDH1822 = 0x3 - IFT_HDLC = 0x76 - IFT_HDSL2 = 0xa8 - IFT_HIPERLAN2 = 0xb7 - IFT_HIPPI = 0x2f - IFT_HIPPIINTERFACE = 0x39 - IFT_HOSTPAD = 0x5a - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IBM370PARCHAN = 0x48 - IFT_IDSL = 0x9a - IFT_IEEE1394 = 0x90 - IFT_IEEE80211 = 0x47 - IFT_IEEE80212 = 0x37 - IFT_IEEE8023ADLAG = 0xa1 - IFT_IFGSN = 0x91 - IFT_IMT = 0xbe - IFT_INFINIBAND = 0xc7 - IFT_INTERLEAVE = 0x7c - IFT_IP = 0x7e - IFT_IPFORWARD = 0x8e - IFT_IPOVERATM = 0x72 - IFT_IPOVERCDLC = 0x6d - IFT_IPOVERCLAW = 0x6e - IFT_IPSWITCH = 0x4e - IFT_ISDN = 0x3f - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISDNS = 0x4b - IFT_ISDNU = 0x4c - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88025CRFPINT = 0x62 - IFT_ISO88025DTR = 0x56 - IFT_ISO88025FIBER = 0x73 - IFT_ISO88026 = 0xa - IFT_ISUP = 0xb3 - IFT_L2VLAN = 0x87 - IFT_L3IPVLAN = 0x88 - IFT_L3IPXVLAN = 0x89 - IFT_LAPB = 0x10 - IFT_LAPD = 0x4d - IFT_LAPF = 0x77 - IFT_LINEGROUP = 0xd2 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MEDIAMAILOVERIP = 0x8b - IFT_MFSIGLINK = 0xa7 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_MPC = 0x71 - IFT_MPLS = 0xa6 - IFT_MPLSTUNNEL = 0x96 - IFT_MSDSL = 0x8f - IFT_MVL = 0xbf - IFT_MYRINET = 0x63 - IFT_NFAS = 0xaf - IFT_NSIP = 0x1b - IFT_OPTICALCHANNEL = 0xc3 - IFT_OPTICALTRANSPORT = 0xc4 - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PFLOG = 0xf5 - IFT_PFSYNC = 0xf6 - IFT_PLC = 0xae - IFT_PON155 = 0xcf - IFT_PON622 = 0xd0 - IFT_POS = 0xab - IFT_PPP = 0x17 - IFT_PPPMULTILINKBUNDLE = 0x6c - IFT_PROPATM = 0xc5 - IFT_PROPBWAP2MP = 0xb8 - IFT_PROPCNLS = 0x59 - IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 - IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 - IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 - IFT_PROPMUX = 0x36 - IFT_PROPVIRTUAL = 0x35 - IFT_PROPWIRELESSP2P = 0x9d - IFT_PTPSERIAL = 0x16 - IFT_PVC = 0xf1 - IFT_Q2931 = 0xc9 - IFT_QLLC = 0x44 - IFT_RADIOMAC = 0xbc - IFT_RADSL = 0x5f - IFT_REACHDSL = 0xc0 - IFT_RFC1483 = 0x9f - IFT_RS232 = 0x21 - IFT_RSRB = 0x4f - IFT_SDLC = 0x11 - IFT_SDSL = 0x60 - IFT_SHDSL = 0xa9 - IFT_SIP = 0x1f - IFT_SIPSIG = 0xcc - IFT_SIPTG = 0xcb - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SONET = 0x27 - IFT_SONETOVERHEADCHANNEL = 0xb9 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_SRP = 0x97 - IFT_SS7SIGLINK = 0x9c - IFT_STACKTOSTACK = 0x6f - IFT_STARLAN = 0xb - IFT_STF = 0xd7 - IFT_T1 = 0x12 - IFT_TDLC = 0x74 - IFT_TELINK = 0xc8 - IFT_TERMPAD = 0x5b - IFT_TR008 = 0xb0 - IFT_TRANSPHDLC = 0x7b - IFT_TUNNEL = 0x83 - IFT_ULTRA = 0x1d - IFT_USB = 0xa0 - IFT_V11 = 0x40 - IFT_V35 = 0x2d - IFT_V36 = 0x41 - IFT_V37 = 0x78 - IFT_VDSL = 0x61 - IFT_VIRTUALIPADDRESS = 0x70 - IFT_VIRTUALTG = 0xca - IFT_VOICEDID = 0xd5 - IFT_VOICEEM = 0x64 - IFT_VOICEEMFGD = 0xd3 - IFT_VOICEENCAP = 0x67 - IFT_VOICEFGDEANA = 0xd4 - IFT_VOICEFXO = 0x65 - IFT_VOICEFXS = 0x66 - IFT_VOICEOVERATM = 0x98 - IFT_VOICEOVERCABLE = 0xc6 - IFT_VOICEOVERFRAMERELAY = 0x99 - IFT_VOICEOVERIP = 0x68 - IFT_X213 = 0x5d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25HUNTGROUP = 0x7a - IFT_X25MLP = 0x79 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LOOPBACKNET = 0x7f - IPPROTO_AH = 0x33 - IPPROTO_CARP = 0x70 - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GRE = 0x2f - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IGMP = 0x2 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPIP = 0x4 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_IPV6_ICMP = 0x3a - IPPROTO_MAX = 0x100 - IPPROTO_MAXID = 0x34 - IPPROTO_MOBILE = 0x37 - IPPROTO_NONE = 0x3b - IPPROTO_PFSYNC = 0xf0 - IPPROTO_PIM = 0x67 - IPPROTO_PUP = 0xc - IPPROTO_RAW = 0xff - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_TCP = 0x6 - IPPROTO_TP = 0x1d - IPPROTO_UDP = 0x11 - IPPROTO_VRRP = 0x70 - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_DONTFRAG = 0x3e - IPV6_DSTOPTS = 0x32 - IPV6_FAITH = 0x1d - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FRAGTTL = 0x78 - IPV6_HLIMDEC = 0x1 - IPV6_HOPLIMIT = 0x2f - IPV6_HOPOPTS = 0x31 - IPV6_IPSEC_POLICY = 0x1c - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXPACKET = 0xffff - IPV6_MMTU = 0x500 - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_PATHMTU = 0x2c - IPV6_PKTINFO = 0x2e - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_RECVDSTOPTS = 0x28 - IPV6_RECVHOPLIMIT = 0x25 - IPV6_RECVHOPOPTS = 0x27 - IPV6_RECVPATHMTU = 0x2b - IPV6_RECVPKTINFO = 0x24 - IPV6_RECVRTHDR = 0x26 - IPV6_RECVTCLASS = 0x39 - IPV6_RTHDR = 0x33 - IPV6_RTHDRDSTOPTS = 0x23 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x3d - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2a - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IP_ADD_MEMBERSHIP = 0xc - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DROP_MEMBERSHIP = 0xd - IP_EF = 0x8000 - IP_ERRORMTU = 0x15 - IP_HDRINCL = 0x2 - IP_IPSEC_POLICY = 0x16 - IP_MAXPACKET = 0xffff - IP_MAX_MEMBERSHIPS = 0x14 - IP_MF = 0x2000 - IP_MINFRAGSIZE = 0x45 - IP_MINTTL = 0x18 - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_OFFMASK = 0x1fff - IP_OPTIONS = 0x1 - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVIF = 0x14 - IP_RECVOPTS = 0x5 - IP_RECVRETOPTS = 0x6 - IP_RECVTTL = 0x17 - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_TOS = 0x3 - IP_TTL = 0x4 - ISIG = 0x80 - ISTRIP = 0x20 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - KERN_HOSTNAME = 0xa - KERN_OSRELEASE = 0x2 - KERN_OSTYPE = 0x1 - KERN_VERSION = 0x4 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x6 - MADV_NORMAL = 0x0 - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_SPACEAVAIL = 0x5 - MADV_WILLNEED = 0x3 - MAP_ALIGNMENT_16MB = 0x18000000 - MAP_ALIGNMENT_1TB = 0x28000000 - MAP_ALIGNMENT_256TB = 0x30000000 - MAP_ALIGNMENT_4GB = 0x20000000 - MAP_ALIGNMENT_64KB = 0x10000000 - MAP_ALIGNMENT_64PB = 0x38000000 - MAP_ALIGNMENT_MASK = -0x1000000 - MAP_ALIGNMENT_SHIFT = 0x18 - MAP_ANON = 0x1000 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_HASSEMAPHORE = 0x200 - MAP_INHERIT = 0x80 - MAP_INHERIT_COPY = 0x1 - MAP_INHERIT_DEFAULT = 0x1 - MAP_INHERIT_DONATE_COPY = 0x3 - MAP_INHERIT_NONE = 0x2 - MAP_INHERIT_SHARE = 0x0 - MAP_NORESERVE = 0x40 - MAP_PRIVATE = 0x2 - MAP_RENAME = 0x20 - MAP_SHARED = 0x1 - MAP_STACK = 0x2000 - MAP_TRYFIXED = 0x400 - MAP_WIRED = 0x800 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MNT_ASYNC = 0x40 - MNT_BASIC_FLAGS = 0xe782807f - MNT_DEFEXPORTED = 0x200 - MNT_DISCARD = 0x800000 - MNT_EXKERB = 0x800 - MNT_EXNORESPORT = 0x8000000 - MNT_EXPORTANON = 0x400 - MNT_EXPORTED = 0x100 - MNT_EXPUBLIC = 0x10000000 - MNT_EXRDONLY = 0x80 - MNT_EXTATTR = 0x1000000 - MNT_FORCE = 0x80000 - MNT_GETARGS = 0x400000 - MNT_IGNORE = 0x100000 - MNT_LAZY = 0x3 - MNT_LOCAL = 0x1000 - MNT_LOG = 0x2000000 - MNT_NOATIME = 0x4000000 - MNT_NOCOREDUMP = 0x8000 - MNT_NODEV = 0x10 - MNT_NODEVMTIME = 0x40000000 - MNT_NOEXEC = 0x4 - MNT_NOSUID = 0x8 - MNT_NOWAIT = 0x2 - MNT_OP_FLAGS = 0x4d0000 - MNT_QUOTA = 0x2000 - MNT_RDONLY = 0x1 - MNT_RELATIME = 0x20000 - MNT_RELOAD = 0x40000 - MNT_ROOTFS = 0x4000 - MNT_SOFTDEP = 0x80000000 - MNT_SYMPERM = 0x20000000 - MNT_SYNCHRONOUS = 0x2 - MNT_UNION = 0x20 - MNT_UPDATE = 0x10000 - MNT_VISFLAGMASK = 0xff90ffff - MNT_WAIT = 0x1 - MSG_BCAST = 0x100 - MSG_CMSG_CLOEXEC = 0x800 - MSG_CONTROLMBUF = 0x2000000 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOR = 0x8 - MSG_IOVUSRSPACE = 0x4000000 - MSG_LENUSRSPACE = 0x8000000 - MSG_MCAST = 0x200 - MSG_NAMEMBUF = 0x1000000 - MSG_NBIO = 0x1000 - MSG_NOSIGNAL = 0x400 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_USERFLAGS = 0xffffff - MSG_WAITALL = 0x40 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x2 - MS_SYNC = 0x4 - NAME_MAX = 0x1ff - NET_RT_DUMP = 0x1 - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x5 - NET_RT_MAXID = 0x6 - NET_RT_OIFLIST = 0x4 - NET_RT_OOIFLIST = 0x3 - NFDBITS = 0x20 - NOFLSH = 0x80000000 - NOTE_ATTRIB = 0x8 - NOTE_CHILD = 0x4 - NOTE_DELETE = 0x1 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXTEND = 0x4 - NOTE_FORK = 0x40000000 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_PCTRLMASK = 0xf0000000 - NOTE_PDATAMASK = 0xfffff - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - OFIOGETBMAP = 0xc004667a - ONLCR = 0x2 - ONLRET = 0x40 - ONOCR = 0x20 - ONOEOT = 0x8 - OPOST = 0x1 - O_ACCMODE = 0x3 - O_ALT_IO = 0x40000 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x400000 - O_CREAT = 0x200 - O_DIRECT = 0x80000 - O_DIRECTORY = 0x200000 - O_DSYNC = 0x10000 - O_EXCL = 0x800 - O_EXLOCK = 0x20 - O_FSYNC = 0x80 - O_NDELAY = 0x4 - O_NOCTTY = 0x8000 - O_NOFOLLOW = 0x100 - O_NONBLOCK = 0x4 - O_NOSIGPIPE = 0x1000000 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_RSYNC = 0x20000 - O_SHLOCK = 0x10 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PRI_IOFLUSH = 0x7c - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - RLIMIT_AS = 0xa - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_MEMLOCK = 0x6 - RLIMIT_NOFILE = 0x8 - RLIMIT_NPROC = 0x7 - RLIMIT_RSS = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_MAX = 0x9 - RTAX_NETMASK = 0x2 - RTAX_TAG = 0x8 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_NETMASK = 0x4 - RTA_TAG = 0x100 - RTF_ANNOUNCE = 0x20000 - RTF_BLACKHOLE = 0x1000 - RTF_CLONED = 0x2000 - RTF_CLONING = 0x100 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_GATEWAY = 0x2 - RTF_HOST = 0x4 - RTF_LLINFO = 0x400 - RTF_MASK = 0x80 - RTF_MODIFIED = 0x20 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_REJECT = 0x8 - RTF_SRC = 0x10000 - RTF_STATIC = 0x800 - RTF_UP = 0x1 - RTF_XRESOLVE = 0x200 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_CHGADDR = 0x15 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_GET = 0x4 - RTM_IEEE80211 = 0x11 - RTM_IFANNOUNCE = 0x10 - RTM_IFINFO = 0x14 - RTM_LLINFO_UPD = 0x13 - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_OIFINFO = 0xf - RTM_OLDADD = 0x9 - RTM_OLDDEL = 0xa - RTM_OOIFINFO = 0xe - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_SETGATE = 0x12 - RTM_VERSION = 0x4 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - SCM_CREDS = 0x4 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x8 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80906931 - SIOCADDRT = 0x8038720a - SIOCAIFADDR = 0x8040691a - SIOCALIFADDR = 0x8118691c - SIOCATMARK = 0x40047307 - SIOCDELMULTI = 0x80906932 - SIOCDELRT = 0x8038720b - SIOCDIFADDR = 0x80906919 - SIOCDIFPHYADDR = 0x80906949 - SIOCDLIFADDR = 0x8118691e - SIOCGDRVSPEC = 0xc028697b - SIOCGETPFSYNC = 0xc09069f8 - SIOCGETSGCNT = 0xc0207534 - SIOCGETVIFCNT = 0xc0287533 - SIOCGHIWAT = 0x40047301 - SIOCGIFADDR = 0xc0906921 - SIOCGIFADDRPREF = 0xc0986920 - SIOCGIFALIAS = 0xc040691b - SIOCGIFBRDADDR = 0xc0906923 - SIOCGIFCAP = 0xc0206976 - SIOCGIFCONF = 0xc0106926 - SIOCGIFDATA = 0xc0986985 - SIOCGIFDLT = 0xc0906977 - SIOCGIFDSTADDR = 0xc0906922 - SIOCGIFFLAGS = 0xc0906911 - SIOCGIFGENERIC = 0xc090693a - SIOCGIFMEDIA = 0xc0306936 - SIOCGIFMETRIC = 0xc0906917 - SIOCGIFMTU = 0xc090697e - SIOCGIFNETMASK = 0xc0906925 - SIOCGIFPDSTADDR = 0xc0906948 - SIOCGIFPSRCADDR = 0xc0906947 - SIOCGLIFADDR = 0xc118691d - SIOCGLIFPHYADDR = 0xc118694b - SIOCGLINKSTR = 0xc0286987 - SIOCGLOWAT = 0x40047303 - SIOCGPGRP = 0x40047309 - SIOCGVH = 0xc0906983 - SIOCIFCREATE = 0x8090697a - SIOCIFDESTROY = 0x80906979 - SIOCIFGCLONERS = 0xc0106978 - SIOCINITIFADDR = 0xc0706984 - SIOCSDRVSPEC = 0x8028697b - SIOCSETPFSYNC = 0x809069f7 - SIOCSHIWAT = 0x80047300 - SIOCSIFADDR = 0x8090690c - SIOCSIFADDRPREF = 0x8098691f - SIOCSIFBRDADDR = 0x80906913 - SIOCSIFCAP = 0x80206975 - SIOCSIFDSTADDR = 0x8090690e - SIOCSIFFLAGS = 0x80906910 - SIOCSIFGENERIC = 0x80906939 - SIOCSIFMEDIA = 0xc0906935 - SIOCSIFMETRIC = 0x80906918 - SIOCSIFMTU = 0x8090697f - SIOCSIFNETMASK = 0x80906916 - SIOCSIFPHYADDR = 0x80406946 - SIOCSLIFPHYADDR = 0x8118694a - SIOCSLINKSTR = 0x80286988 - SIOCSLOWAT = 0x80047302 - SIOCSPGRP = 0x80047308 - SIOCSVH = 0xc0906982 - SIOCZIFDATA = 0xc0986986 - SOCK_CLOEXEC = 0x10000000 - SOCK_DGRAM = 0x2 - SOCK_FLAGS_MASK = 0xf0000000 - SOCK_NONBLOCK = 0x20000000 - SOCK_NOSIGPIPE = 0x40000000 - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_ACCEPTFILTER = 0x1000 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LINGER = 0x80 - SO_NOHEADER = 0x100a - SO_NOSIGPIPE = 0x800 - SO_OOBINLINE = 0x100 - SO_OVERFLOWED = 0x1009 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x100c - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x100b - SO_TIMESTAMP = 0x2000 - SO_TYPE = 0x1008 - SO_USELOOPBACK = 0x40 - SYSCTL_VERSION = 0x1000000 - SYSCTL_VERS_0 = 0x0 - SYSCTL_VERS_1 = 0x1000000 - SYSCTL_VERS_MASK = 0xff000000 - S_ARCH1 = 0x10000 - S_ARCH2 = 0x20000 - S_BLKSIZE = 0x200 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFLNK = 0xa000 - S_IFMT = 0xf000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IFWHT = 0xe000 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISTXT = 0x200 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXGRP = 0x8 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - S_LOGIN_SET = 0x1 - TCIFLUSH = 0x1 - TCIOFLUSH = 0x3 - TCOFLUSH = 0x2 - TCP_CONGCTL = 0x20 - TCP_KEEPCNT = 0x6 - TCP_KEEPIDLE = 0x3 - TCP_KEEPINIT = 0x7 - TCP_KEEPINTVL = 0x5 - TCP_MAXBURST = 0x4 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_WINSHIFT = 0xe - TCP_MD5SIG = 0x10 - TCP_MINMSS = 0xd8 - TCP_MSS = 0x218 - TCP_NODELAY = 0x1 - TCSAFLUSH = 0x2 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCONS = 0x80047462 - TIOCDCDTIMESTAMP = 0x40107458 - TIOCDRAIN = 0x2000745e - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLAG_CDTRCTS = 0x10 - TIOCFLAG_CLOCAL = 0x2 - TIOCFLAG_CRTSCTS = 0x4 - TIOCFLAG_MDMBUF = 0x8 - TIOCFLAG_SOFTCAR = 0x1 - TIOCFLUSH = 0x80047410 - TIOCGETA = 0x402c7413 - TIOCGETD = 0x4004741a - TIOCGFLAGS = 0x4004745d - TIOCGLINED = 0x40207442 - TIOCGPGRP = 0x40047477 - TIOCGQSIZE = 0x40047481 - TIOCGRANTPT = 0x20007447 - TIOCGSID = 0x40047463 - TIOCGSIZE = 0x40087468 - TIOCGWINSZ = 0x40087468 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGET = 0x4004746a - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCPTMGET = 0x40287446 - TIOCPTSNAME = 0x40287448 - TIOCRCVFRAME = 0x80087445 - TIOCREMOTE = 0x80047469 - TIOCSBRK = 0x2000747b - TIOCSCTTY = 0x20007461 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x802c7414 - TIOCSETAF = 0x802c7416 - TIOCSETAW = 0x802c7415 - TIOCSETD = 0x8004741b - TIOCSFLAGS = 0x8004745c - TIOCSIG = 0x2000745f - TIOCSLINED = 0x80207443 - TIOCSPGRP = 0x80047476 - TIOCSQSIZE = 0x80047480 - TIOCSSIZE = 0x80087467 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x80047465 - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCUCNTL = 0x80047466 - TIOCXMTFRAME = 0x80087444 - TOSTOP = 0x400000 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VTIME = 0x11 - VWERASE = 0x4 - WALL = 0x8 - WALLSIG = 0x8 - WALTSIG = 0x4 - WCLONE = 0x4 - WCOREFLAG = 0x80 - WNOHANG = 0x1 - WNOWAIT = 0x10000 - WNOZOMBIE = 0x20000 - WOPTSCHECKED = 0x40000 - WSTOPPED = 0x7f - WUNTRACED = 0x2 -) - -// Errors -const ( - E2BIG = syscall.Errno(0x7) - EACCES = syscall.Errno(0xd) - EADDRINUSE = syscall.Errno(0x30) - EADDRNOTAVAIL = syscall.Errno(0x31) - EAFNOSUPPORT = syscall.Errno(0x2f) - EAGAIN = syscall.Errno(0x23) - EALREADY = syscall.Errno(0x25) - EAUTH = syscall.Errno(0x50) - EBADF = syscall.Errno(0x9) - EBADMSG = syscall.Errno(0x58) - EBADRPC = syscall.Errno(0x48) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x57) - ECHILD = syscall.Errno(0xa) - ECONNABORTED = syscall.Errno(0x35) - ECONNREFUSED = syscall.Errno(0x3d) - ECONNRESET = syscall.Errno(0x36) - EDEADLK = syscall.Errno(0xb) - EDESTADDRREQ = syscall.Errno(0x27) - EDOM = syscall.Errno(0x21) - EDQUOT = syscall.Errno(0x45) - EEXIST = syscall.Errno(0x11) - EFAULT = syscall.Errno(0xe) - EFBIG = syscall.Errno(0x1b) - EFTYPE = syscall.Errno(0x4f) - EHOSTDOWN = syscall.Errno(0x40) - EHOSTUNREACH = syscall.Errno(0x41) - EIDRM = syscall.Errno(0x52) - EILSEQ = syscall.Errno(0x55) - EINPROGRESS = syscall.Errno(0x24) - EINTR = syscall.Errno(0x4) - EINVAL = syscall.Errno(0x16) - EIO = syscall.Errno(0x5) - EISCONN = syscall.Errno(0x38) - EISDIR = syscall.Errno(0x15) - ELAST = syscall.Errno(0x60) - ELOOP = syscall.Errno(0x3e) - EMFILE = syscall.Errno(0x18) - EMLINK = syscall.Errno(0x1f) - EMSGSIZE = syscall.Errno(0x28) - EMULTIHOP = syscall.Errno(0x5e) - ENAMETOOLONG = syscall.Errno(0x3f) - ENEEDAUTH = syscall.Errno(0x51) - ENETDOWN = syscall.Errno(0x32) - ENETRESET = syscall.Errno(0x34) - ENETUNREACH = syscall.Errno(0x33) - ENFILE = syscall.Errno(0x17) - ENOATTR = syscall.Errno(0x5d) - ENOBUFS = syscall.Errno(0x37) - ENODATA = syscall.Errno(0x59) - ENODEV = syscall.Errno(0x13) - ENOENT = syscall.Errno(0x2) - ENOEXEC = syscall.Errno(0x8) - ENOLCK = syscall.Errno(0x4d) - ENOLINK = syscall.Errno(0x5f) - ENOMEM = syscall.Errno(0xc) - ENOMSG = syscall.Errno(0x53) - ENOPROTOOPT = syscall.Errno(0x2a) - ENOSPC = syscall.Errno(0x1c) - ENOSR = syscall.Errno(0x5a) - ENOSTR = syscall.Errno(0x5b) - ENOSYS = syscall.Errno(0x4e) - ENOTBLK = syscall.Errno(0xf) - ENOTCONN = syscall.Errno(0x39) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x42) - ENOTSOCK = syscall.Errno(0x26) - ENOTSUP = syscall.Errno(0x56) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x2d) - EOVERFLOW = syscall.Errno(0x54) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x2e) - EPIPE = syscall.Errno(0x20) - EPROCLIM = syscall.Errno(0x43) - EPROCUNAVAIL = syscall.Errno(0x4c) - EPROGMISMATCH = syscall.Errno(0x4b) - EPROGUNAVAIL = syscall.Errno(0x4a) - EPROTO = syscall.Errno(0x60) - EPROTONOSUPPORT = syscall.Errno(0x2b) - EPROTOTYPE = syscall.Errno(0x29) - ERANGE = syscall.Errno(0x22) - EREMOTE = syscall.Errno(0x47) - EROFS = syscall.Errno(0x1e) - ERPCMISMATCH = syscall.Errno(0x49) - ESHUTDOWN = syscall.Errno(0x3a) - ESOCKTNOSUPPORT = syscall.Errno(0x2c) - ESPIPE = syscall.Errno(0x1d) - ESRCH = syscall.Errno(0x3) - ESTALE = syscall.Errno(0x46) - ETIME = syscall.Errno(0x5c) - ETIMEDOUT = syscall.Errno(0x3c) - ETOOMANYREFS = syscall.Errno(0x3b) - ETXTBSY = syscall.Errno(0x1a) - EUSERS = syscall.Errno(0x44) - EWOULDBLOCK = syscall.Errno(0x23) - EXDEV = syscall.Errno(0x12) -) - -// Signals -const ( - SIGABRT = syscall.Signal(0x6) - SIGALRM = syscall.Signal(0xe) - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x14) - SIGCONT = syscall.Signal(0x13) - SIGEMT = syscall.Signal(0x7) - SIGFPE = syscall.Signal(0x8) - SIGHUP = syscall.Signal(0x1) - SIGILL = syscall.Signal(0x4) - SIGINFO = syscall.Signal(0x1d) - SIGINT = syscall.Signal(0x2) - SIGIO = syscall.Signal(0x17) - SIGIOT = syscall.Signal(0x6) - SIGKILL = syscall.Signal(0x9) - SIGPIPE = syscall.Signal(0xd) - SIGPROF = syscall.Signal(0x1b) - SIGPWR = syscall.Signal(0x20) - SIGQUIT = syscall.Signal(0x3) - SIGSEGV = syscall.Signal(0xb) - SIGSTOP = syscall.Signal(0x11) - SIGSYS = syscall.Signal(0xc) - SIGTERM = syscall.Signal(0xf) - SIGTRAP = syscall.Signal(0x5) - SIGTSTP = syscall.Signal(0x12) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x10) - SIGUSR1 = syscall.Signal(0x1e) - SIGUSR2 = syscall.Signal(0x1f) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "device not configured"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EDEADLK", "resource deadlock avoided"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "cross-device link"}, - {19, "ENODEV", "operation not supported by device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "result too large or too small"}, - {35, "EAGAIN", "resource temporarily unavailable"}, - {36, "EINPROGRESS", "operation now in progress"}, - {37, "EALREADY", "operation already in progress"}, - {38, "ENOTSOCK", "socket operation on non-socket"}, - {39, "EDESTADDRREQ", "destination address required"}, - {40, "EMSGSIZE", "message too long"}, - {41, "EPROTOTYPE", "protocol wrong type for socket"}, - {42, "ENOPROTOOPT", "protocol option not available"}, - {43, "EPROTONOSUPPORT", "protocol not supported"}, - {44, "ESOCKTNOSUPPORT", "socket type not supported"}, - {45, "EOPNOTSUPP", "operation not supported"}, - {46, "EPFNOSUPPORT", "protocol family not supported"}, - {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, - {48, "EADDRINUSE", "address already in use"}, - {49, "EADDRNOTAVAIL", "can't assign requested address"}, - {50, "ENETDOWN", "network is down"}, - {51, "ENETUNREACH", "network is unreachable"}, - {52, "ENETRESET", "network dropped connection on reset"}, - {53, "ECONNABORTED", "software caused connection abort"}, - {54, "ECONNRESET", "connection reset by peer"}, - {55, "ENOBUFS", "no buffer space available"}, - {56, "EISCONN", "socket is already connected"}, - {57, "ENOTCONN", "socket is not connected"}, - {58, "ESHUTDOWN", "can't send after socket shutdown"}, - {59, "ETOOMANYREFS", "too many references: can't splice"}, - {60, "ETIMEDOUT", "connection timed out"}, - {61, "ECONNREFUSED", "connection refused"}, - {62, "ELOOP", "too many levels of symbolic links"}, - {63, "ENAMETOOLONG", "file name too long"}, - {64, "EHOSTDOWN", "host is down"}, - {65, "EHOSTUNREACH", "no route to host"}, - {66, "ENOTEMPTY", "directory not empty"}, - {67, "EPROCLIM", "too many processes"}, - {68, "EUSERS", "too many users"}, - {69, "EDQUOT", "disc quota exceeded"}, - {70, "ESTALE", "stale NFS file handle"}, - {71, "EREMOTE", "too many levels of remote in path"}, - {72, "EBADRPC", "RPC struct is bad"}, - {73, "ERPCMISMATCH", "RPC version wrong"}, - {74, "EPROGUNAVAIL", "RPC prog. not avail"}, - {75, "EPROGMISMATCH", "program version wrong"}, - {76, "EPROCUNAVAIL", "bad procedure for program"}, - {77, "ENOLCK", "no locks available"}, - {78, "ENOSYS", "function not implemented"}, - {79, "EFTYPE", "inappropriate file type or format"}, - {80, "EAUTH", "authentication error"}, - {81, "ENEEDAUTH", "need authenticator"}, - {82, "EIDRM", "identifier removed"}, - {83, "ENOMSG", "no message of desired type"}, - {84, "EOVERFLOW", "value too large to be stored in data type"}, - {85, "EILSEQ", "illegal byte sequence"}, - {86, "ENOTSUP", "not supported"}, - {87, "ECANCELED", "operation Canceled"}, - {88, "EBADMSG", "bad or Corrupt message"}, - {89, "ENODATA", "no message available"}, - {90, "ENOSR", "no STREAM resources"}, - {91, "ENOSTR", "not a STREAM"}, - {92, "ETIME", "STREAM ioctl timeout"}, - {93, "ENOATTR", "attribute not found"}, - {94, "EMULTIHOP", "multihop attempted"}, - {95, "ENOLINK", "link has been severed"}, - {96, "ELAST", "protocol error"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, - {6, "SIGIOT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGURG", "urgent I/O condition"}, - {17, "SIGSTOP", "stopped (signal)"}, - {18, "SIGTSTP", "stopped"}, - {19, "SIGCONT", "continued"}, - {20, "SIGCHLD", "child exited"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGIO", "I/O possible"}, - {24, "SIGXCPU", "cputime limit exceeded"}, - {25, "SIGXFSZ", "filesize limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window size changes"}, - {29, "SIGINFO", "information request"}, - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, - {32, "SIGPWR", "power fail/restart"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go deleted file mode 100644 index 9eef974..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go +++ /dev/null @@ -1,1759 +0,0 @@ -// mkerrors.sh -marm -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm && netbsd -// +build arm,netbsd - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -marm _const.go - -package unix - -import "syscall" - -const ( - AF_APPLETALK = 0x10 - AF_ARP = 0x1c - AF_BLUETOOTH = 0x1f - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1a - AF_ECMA = 0x8 - AF_HYLINK = 0xf - AF_IEEE80211 = 0x20 - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x18 - AF_IPX = 0x17 - AF_ISDN = 0x1a - AF_ISO = 0x7 - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x23 - AF_MPLS = 0x21 - AF_NATM = 0x1b - AF_NS = 0x6 - AF_OROUTE = 0x11 - AF_OSI = 0x7 - AF_PUP = 0x4 - AF_ROUTE = 0x22 - AF_SNA = 0xb - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - ARPHRD_ARCNET = 0x7 - ARPHRD_ETHER = 0x1 - ARPHRD_FRELAY = 0xf - ARPHRD_IEEE1394 = 0x18 - ARPHRD_IEEE802 = 0x6 - ARPHRD_STRIP = 0x17 - B0 = 0x0 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B230400 = 0x38400 - B2400 = 0x960 - B28800 = 0x7080 - B300 = 0x12c - B38400 = 0x9600 - B460800 = 0x70800 - B4800 = 0x12c0 - B50 = 0x32 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B921600 = 0xe1000 - B9600 = 0x2580 - BIOCFEEDBACK = 0x8004427d - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc0084277 - BIOCGETIF = 0x4090426b - BIOCGFEEDBACK = 0x4004427c - BIOCGHDRCMPLT = 0x40044274 - BIOCGRTIMEOUT = 0x400c427b - BIOCGSEESENT = 0x40044278 - BIOCGSTATS = 0x4080426f - BIOCGSTATSOLD = 0x4008426f - BIOCIMMEDIATE = 0x80044270 - BIOCPROMISC = 0x20004269 - BIOCSBLEN = 0xc0044266 - BIOCSDLT = 0x80044276 - BIOCSETF = 0x80084267 - BIOCSETIF = 0x8090426c - BIOCSFEEDBACK = 0x8004427d - BIOCSHDRCMPLT = 0x80044275 - BIOCSRTIMEOUT = 0x800c427a - BIOCSSEESENT = 0x80044279 - BIOCSTCPF = 0x80084272 - BIOCSUDPF = 0x80084273 - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x4 - BPF_ALIGNMENT32 = 0x4 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_DFLTBUFSIZE = 0x100000 - BPF_DIV = 0x30 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x1000000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_W = 0x0 - BPF_X = 0x8 - BRKINT = 0x2 - CFLUSH = 0xf - CLOCAL = 0x8000 - CPUSTATES = 0x5 - CP_IDLE = 0x4 - CP_INTR = 0x3 - CP_NICE = 0x1 - CP_SYS = 0x2 - CP_USER = 0x0 - CREAD = 0x800 - CRTSCTS = 0x10000 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0x14 - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTL_HW = 0x6 - CTL_KERN = 0x1 - CTL_MAXNAME = 0xc - CTL_NET = 0x4 - CTL_QUERY = -0x2 - DIOCBSFLUSH = 0x20006478 - DLT_A429 = 0xb8 - DLT_A653_ICM = 0xb9 - DLT_AIRONET_HEADER = 0x78 - DLT_AOS = 0xde - DLT_APPLE_IP_OVER_IEEE1394 = 0x8a - DLT_ARCNET = 0x7 - DLT_ARCNET_LINUX = 0x81 - DLT_ATM_CLIP = 0x13 - DLT_ATM_RFC1483 = 0xb - DLT_AURORA = 0x7e - DLT_AX25 = 0x3 - DLT_AX25_KISS = 0xca - DLT_BACNET_MS_TP = 0xa5 - DLT_BLUETOOTH_HCI_H4 = 0xbb - DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 - DLT_CAN20B = 0xbe - DLT_CAN_SOCKETCAN = 0xe3 - DLT_CHAOS = 0x5 - DLT_CISCO_IOS = 0x76 - DLT_C_HDLC = 0x68 - DLT_C_HDLC_WITH_DIR = 0xcd - DLT_DECT = 0xdd - DLT_DOCSIS = 0x8f - DLT_ECONET = 0x73 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0x6d - DLT_ERF = 0xc5 - DLT_ERF_ETH = 0xaf - DLT_ERF_POS = 0xb0 - DLT_FC_2 = 0xe0 - DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 - DLT_FDDI = 0xa - DLT_FLEXRAY = 0xd2 - DLT_FRELAY = 0x6b - DLT_FRELAY_WITH_DIR = 0xce - DLT_GCOM_SERIAL = 0xad - DLT_GCOM_T1E1 = 0xac - DLT_GPF_F = 0xab - DLT_GPF_T = 0xaa - DLT_GPRS_LLC = 0xa9 - DLT_GSMTAP_ABIS = 0xda - DLT_GSMTAP_UM = 0xd9 - DLT_HDLC = 0x10 - DLT_HHDLC = 0x79 - DLT_HIPPI = 0xf - DLT_IBM_SN = 0x92 - DLT_IBM_SP = 0x91 - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_IEEE802_11_RADIO_AVS = 0xa3 - DLT_IEEE802_15_4 = 0xc3 - DLT_IEEE802_15_4_LINUX = 0xbf - DLT_IEEE802_15_4_NONASK_PHY = 0xd7 - DLT_IEEE802_16_MAC_CPS = 0xbc - DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 - DLT_IPMB = 0xc7 - DLT_IPMB_LINUX = 0xd1 - DLT_IPNET = 0xe2 - DLT_IPV4 = 0xe4 - DLT_IPV6 = 0xe5 - DLT_IP_OVER_FC = 0x7a - DLT_JUNIPER_ATM1 = 0x89 - DLT_JUNIPER_ATM2 = 0x87 - DLT_JUNIPER_CHDLC = 0xb5 - DLT_JUNIPER_ES = 0x84 - DLT_JUNIPER_ETHER = 0xb2 - DLT_JUNIPER_FRELAY = 0xb4 - DLT_JUNIPER_GGSN = 0x85 - DLT_JUNIPER_ISM = 0xc2 - DLT_JUNIPER_MFR = 0x86 - DLT_JUNIPER_MLFR = 0x83 - DLT_JUNIPER_MLPPP = 0x82 - DLT_JUNIPER_MONITOR = 0xa4 - DLT_JUNIPER_PIC_PEER = 0xae - DLT_JUNIPER_PPP = 0xb3 - DLT_JUNIPER_PPPOE = 0xa7 - DLT_JUNIPER_PPPOE_ATM = 0xa8 - DLT_JUNIPER_SERVICES = 0x88 - DLT_JUNIPER_ST = 0xc8 - DLT_JUNIPER_VP = 0xb7 - DLT_LAPB_WITH_DIR = 0xcf - DLT_LAPD = 0xcb - DLT_LIN = 0xd4 - DLT_LINUX_EVDEV = 0xd8 - DLT_LINUX_IRDA = 0x90 - DLT_LINUX_LAPD = 0xb1 - DLT_LINUX_SLL = 0x71 - DLT_LOOP = 0x6c - DLT_LTALK = 0x72 - DLT_MFR = 0xb6 - DLT_MOST = 0xd3 - DLT_MPLS = 0xdb - DLT_MTP2 = 0x8c - DLT_MTP2_WITH_PHDR = 0x8b - DLT_MTP3 = 0x8d - DLT_NULL = 0x0 - DLT_PCI_EXP = 0x7d - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x12 - DLT_PPI = 0xc0 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0xe - DLT_PPP_ETHER = 0x33 - DLT_PPP_PPPD = 0xa6 - DLT_PPP_SERIAL = 0x32 - DLT_PPP_WITH_DIR = 0xcc - DLT_PRISM_HEADER = 0x77 - DLT_PRONET = 0x4 - DLT_RAIF1 = 0xc6 - DLT_RAW = 0xc - DLT_RAWAF_MASK = 0x2240000 - DLT_RIO = 0x7c - DLT_SCCP = 0x8e - DLT_SITA = 0xc4 - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xd - DLT_SUNATM = 0x7b - DLT_SYMANTEC_FIREWALL = 0x63 - DLT_TZSP = 0x80 - DLT_USB = 0xba - DLT_USB_LINUX = 0xbd - DLT_USB_LINUX_MMAPPED = 0xdc - DLT_WIHART = 0xdf - DLT_X2E_SERIAL = 0xd5 - DLT_X2E_XORAYA = 0xd6 - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - DT_WHT = 0xe - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EMUL_LINUX = 0x1 - EMUL_LINUX32 = 0x5 - EMUL_MAXID = 0x6 - ETHERCAP_JUMBO_MTU = 0x4 - ETHERCAP_VLAN_HWTAGGING = 0x2 - ETHERCAP_VLAN_MTU = 0x1 - ETHERMIN = 0x2e - ETHERMTU = 0x5dc - ETHERMTU_JUMBO = 0x2328 - ETHERTYPE_8023 = 0x4 - ETHERTYPE_AARP = 0x80f3 - ETHERTYPE_ACCTON = 0x8390 - ETHERTYPE_AEONIC = 0x8036 - ETHERTYPE_ALPHA = 0x814a - ETHERTYPE_AMBER = 0x6008 - ETHERTYPE_AMOEBA = 0x8145 - ETHERTYPE_APOLLO = 0x80f7 - ETHERTYPE_APOLLODOMAIN = 0x8019 - ETHERTYPE_APPLETALK = 0x809b - ETHERTYPE_APPLITEK = 0x80c7 - ETHERTYPE_ARGONAUT = 0x803a - ETHERTYPE_ARP = 0x806 - ETHERTYPE_AT = 0x809b - ETHERTYPE_ATALK = 0x809b - ETHERTYPE_ATOMIC = 0x86df - ETHERTYPE_ATT = 0x8069 - ETHERTYPE_ATTSTANFORD = 0x8008 - ETHERTYPE_AUTOPHON = 0x806a - ETHERTYPE_AXIS = 0x8856 - ETHERTYPE_BCLOOP = 0x9003 - ETHERTYPE_BOFL = 0x8102 - ETHERTYPE_CABLETRON = 0x7034 - ETHERTYPE_CHAOS = 0x804 - ETHERTYPE_COMDESIGN = 0x806c - ETHERTYPE_COMPUGRAPHIC = 0x806d - ETHERTYPE_COUNTERPOINT = 0x8062 - ETHERTYPE_CRONUS = 0x8004 - ETHERTYPE_CRONUSVLN = 0x8003 - ETHERTYPE_DCA = 0x1234 - ETHERTYPE_DDE = 0x807b - ETHERTYPE_DEBNI = 0xaaaa - ETHERTYPE_DECAM = 0x8048 - ETHERTYPE_DECCUST = 0x6006 - ETHERTYPE_DECDIAG = 0x6005 - ETHERTYPE_DECDNS = 0x803c - ETHERTYPE_DECDTS = 0x803e - ETHERTYPE_DECEXPER = 0x6000 - ETHERTYPE_DECLAST = 0x8041 - ETHERTYPE_DECLTM = 0x803f - ETHERTYPE_DECMUMPS = 0x6009 - ETHERTYPE_DECNETBIOS = 0x8040 - ETHERTYPE_DELTACON = 0x86de - ETHERTYPE_DIDDLE = 0x4321 - ETHERTYPE_DLOG1 = 0x660 - ETHERTYPE_DLOG2 = 0x661 - ETHERTYPE_DN = 0x6003 - ETHERTYPE_DOGFIGHT = 0x1989 - ETHERTYPE_DSMD = 0x8039 - ETHERTYPE_ECMA = 0x803 - ETHERTYPE_ENCRYPT = 0x803d - ETHERTYPE_ES = 0x805d - ETHERTYPE_EXCELAN = 0x8010 - ETHERTYPE_EXPERDATA = 0x8049 - ETHERTYPE_FLIP = 0x8146 - ETHERTYPE_FLOWCONTROL = 0x8808 - ETHERTYPE_FRARP = 0x808 - ETHERTYPE_GENDYN = 0x8068 - ETHERTYPE_HAYES = 0x8130 - ETHERTYPE_HIPPI_FP = 0x8180 - ETHERTYPE_HITACHI = 0x8820 - ETHERTYPE_HP = 0x8005 - ETHERTYPE_IEEEPUP = 0xa00 - ETHERTYPE_IEEEPUPAT = 0xa01 - ETHERTYPE_IMLBL = 0x4c42 - ETHERTYPE_IMLBLDIAG = 0x424c - ETHERTYPE_IP = 0x800 - ETHERTYPE_IPAS = 0x876c - ETHERTYPE_IPV6 = 0x86dd - ETHERTYPE_IPX = 0x8137 - ETHERTYPE_IPXNEW = 0x8037 - ETHERTYPE_KALPANA = 0x8582 - ETHERTYPE_LANBRIDGE = 0x8038 - ETHERTYPE_LANPROBE = 0x8888 - ETHERTYPE_LAT = 0x6004 - ETHERTYPE_LBACK = 0x9000 - ETHERTYPE_LITTLE = 0x8060 - ETHERTYPE_LOGICRAFT = 0x8148 - ETHERTYPE_LOOPBACK = 0x9000 - ETHERTYPE_MATRA = 0x807a - ETHERTYPE_MAX = 0xffff - ETHERTYPE_MERIT = 0x807c - ETHERTYPE_MICP = 0x873a - ETHERTYPE_MOPDL = 0x6001 - ETHERTYPE_MOPRC = 0x6002 - ETHERTYPE_MOTOROLA = 0x818d - ETHERTYPE_MPLS = 0x8847 - ETHERTYPE_MPLS_MCAST = 0x8848 - ETHERTYPE_MUMPS = 0x813f - ETHERTYPE_NBPCC = 0x3c04 - ETHERTYPE_NBPCLAIM = 0x3c09 - ETHERTYPE_NBPCLREQ = 0x3c05 - ETHERTYPE_NBPCLRSP = 0x3c06 - ETHERTYPE_NBPCREQ = 0x3c02 - ETHERTYPE_NBPCRSP = 0x3c03 - ETHERTYPE_NBPDG = 0x3c07 - ETHERTYPE_NBPDGB = 0x3c08 - ETHERTYPE_NBPDLTE = 0x3c0a - ETHERTYPE_NBPRAR = 0x3c0c - ETHERTYPE_NBPRAS = 0x3c0b - ETHERTYPE_NBPRST = 0x3c0d - ETHERTYPE_NBPSCD = 0x3c01 - ETHERTYPE_NBPVCD = 0x3c00 - ETHERTYPE_NBS = 0x802 - ETHERTYPE_NCD = 0x8149 - ETHERTYPE_NESTAR = 0x8006 - ETHERTYPE_NETBEUI = 0x8191 - ETHERTYPE_NOVELL = 0x8138 - ETHERTYPE_NS = 0x600 - ETHERTYPE_NSAT = 0x601 - ETHERTYPE_NSCOMPAT = 0x807 - ETHERTYPE_NTRAILER = 0x10 - ETHERTYPE_OS9 = 0x7007 - ETHERTYPE_OS9NET = 0x7009 - ETHERTYPE_PACER = 0x80c6 - ETHERTYPE_PAE = 0x888e - ETHERTYPE_PCS = 0x4242 - ETHERTYPE_PLANNING = 0x8044 - ETHERTYPE_PPP = 0x880b - ETHERTYPE_PPPOE = 0x8864 - ETHERTYPE_PPPOEDISC = 0x8863 - ETHERTYPE_PRIMENTS = 0x7031 - ETHERTYPE_PUP = 0x200 - ETHERTYPE_PUPAT = 0x200 - ETHERTYPE_RACAL = 0x7030 - ETHERTYPE_RATIONAL = 0x8150 - ETHERTYPE_RAWFR = 0x6559 - ETHERTYPE_RCL = 0x1995 - ETHERTYPE_RDP = 0x8739 - ETHERTYPE_RETIX = 0x80f2 - ETHERTYPE_REVARP = 0x8035 - ETHERTYPE_SCA = 0x6007 - ETHERTYPE_SECTRA = 0x86db - ETHERTYPE_SECUREDATA = 0x876d - ETHERTYPE_SGITW = 0x817e - ETHERTYPE_SG_BOUNCE = 0x8016 - ETHERTYPE_SG_DIAG = 0x8013 - ETHERTYPE_SG_NETGAMES = 0x8014 - ETHERTYPE_SG_RESV = 0x8015 - ETHERTYPE_SIMNET = 0x5208 - ETHERTYPE_SLOWPROTOCOLS = 0x8809 - ETHERTYPE_SNA = 0x80d5 - ETHERTYPE_SNMP = 0x814c - ETHERTYPE_SONIX = 0xfaf5 - ETHERTYPE_SPIDER = 0x809f - ETHERTYPE_SPRITE = 0x500 - ETHERTYPE_STP = 0x8181 - ETHERTYPE_TALARIS = 0x812b - ETHERTYPE_TALARISMC = 0x852b - ETHERTYPE_TCPCOMP = 0x876b - ETHERTYPE_TCPSM = 0x9002 - ETHERTYPE_TEC = 0x814f - ETHERTYPE_TIGAN = 0x802f - ETHERTYPE_TRAIL = 0x1000 - ETHERTYPE_TRANSETHER = 0x6558 - ETHERTYPE_TYMSHARE = 0x802e - ETHERTYPE_UBBST = 0x7005 - ETHERTYPE_UBDEBUG = 0x900 - ETHERTYPE_UBDIAGLOOP = 0x7002 - ETHERTYPE_UBDL = 0x7000 - ETHERTYPE_UBNIU = 0x7001 - ETHERTYPE_UBNMC = 0x7003 - ETHERTYPE_VALID = 0x1600 - ETHERTYPE_VARIAN = 0x80dd - ETHERTYPE_VAXELN = 0x803b - ETHERTYPE_VEECO = 0x8067 - ETHERTYPE_VEXP = 0x805b - ETHERTYPE_VGLAB = 0x8131 - ETHERTYPE_VINES = 0xbad - ETHERTYPE_VINESECHO = 0xbaf - ETHERTYPE_VINESLOOP = 0xbae - ETHERTYPE_VITAL = 0xff00 - ETHERTYPE_VLAN = 0x8100 - ETHERTYPE_VLTLMAN = 0x8080 - ETHERTYPE_VPROD = 0x805c - ETHERTYPE_VURESERVED = 0x8147 - ETHERTYPE_WATERLOO = 0x8130 - ETHERTYPE_WELLFLEET = 0x8103 - ETHERTYPE_X25 = 0x805 - ETHERTYPE_X75 = 0x801 - ETHERTYPE_XNSSM = 0x9001 - ETHERTYPE_XTP = 0x817d - ETHER_ADDR_LEN = 0x6 - ETHER_CRC_LEN = 0x4 - ETHER_CRC_POLY_BE = 0x4c11db6 - ETHER_CRC_POLY_LE = 0xedb88320 - ETHER_HDR_LEN = 0xe - ETHER_MAX_LEN = 0x5ee - ETHER_MAX_LEN_JUMBO = 0x233a - ETHER_MIN_LEN = 0x40 - ETHER_PPPOE_ENCAP_LEN = 0x8 - ETHER_TYPE_LEN = 0x2 - ETHER_VLAN_ENCAP_LEN = 0x4 - EVFILT_AIO = 0x2 - EVFILT_PROC = 0x4 - EVFILT_READ = 0x0 - EVFILT_SIGNAL = 0x5 - EVFILT_SYSCOUNT = 0x7 - EVFILT_TIMER = 0x6 - EVFILT_VNODE = 0x3 - EVFILT_WRITE = 0x1 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG1 = 0x2000 - EV_ONESHOT = 0x10 - EV_SYSFLAGS = 0xf000 - EXTA = 0x4b00 - EXTATTR_CMD_START = 0x1 - EXTATTR_CMD_STOP = 0x2 - EXTATTR_NAMESPACE_SYSTEM = 0x2 - EXTATTR_NAMESPACE_USER = 0x1 - EXTB = 0x9600 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x100 - FLUSHO = 0x800000 - F_CLOSEM = 0xa - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0xc - F_FSCTL = -0x80000000 - F_FSDIRMASK = 0x70000000 - F_FSIN = 0x10000000 - F_FSINOUT = 0x30000000 - F_FSOUT = 0x20000000 - F_FSPRIV = 0x8000 - F_FSVOID = 0x40000000 - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0x7 - F_GETNOSIGPIPE = 0xd - F_GETOWN = 0x5 - F_MAXFD = 0xb - F_OK = 0x0 - F_PARAM_MASK = 0xfff - F_PARAM_MAX = 0xfff - F_RDLCK = 0x1 - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0x8 - F_SETLKW = 0x9 - F_SETNOSIGPIPE = 0xe - F_SETOWN = 0x6 - F_UNLCK = 0x2 - F_WRLCK = 0x3 - HUPCL = 0x4000 - HW_MACHINE = 0x1 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFAN_ARRIVAL = 0x0 - IFAN_DEPARTURE = 0x1 - IFA_ROUTE = 0x1 - IFF_ALLMULTI = 0x200 - IFF_BROADCAST = 0x2 - IFF_CANTCHANGE = 0x8f52 - IFF_DEBUG = 0x4 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_NOTRAILERS = 0x20 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PROMISC = 0x100 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_1822 = 0x2 - IFT_A12MPPSWITCH = 0x82 - IFT_AAL2 = 0xbb - IFT_AAL5 = 0x31 - IFT_ADSL = 0x5e - IFT_AFLANE8023 = 0x3b - IFT_AFLANE8025 = 0x3c - IFT_ARAP = 0x58 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ASYNC = 0x54 - IFT_ATM = 0x25 - IFT_ATMDXI = 0x69 - IFT_ATMFUNI = 0x6a - IFT_ATMIMA = 0x6b - IFT_ATMLOGICAL = 0x50 - IFT_ATMRADIO = 0xbd - IFT_ATMSUBINTERFACE = 0x86 - IFT_ATMVCIENDPT = 0xc2 - IFT_ATMVIRTUAL = 0x95 - IFT_BGPPOLICYACCOUNTING = 0xa2 - IFT_BRIDGE = 0xd1 - IFT_BSC = 0x53 - IFT_CARP = 0xf8 - IFT_CCTEMUL = 0x3d - IFT_CEPT = 0x13 - IFT_CES = 0x85 - IFT_CHANNEL = 0x46 - IFT_CNR = 0x55 - IFT_COFFEE = 0x84 - IFT_COMPOSITELINK = 0x9b - IFT_DCN = 0x8d - IFT_DIGITALPOWERLINE = 0x8a - IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba - IFT_DLSW = 0x4a - IFT_DOCSCABLEDOWNSTREAM = 0x80 - IFT_DOCSCABLEMACLAYER = 0x7f - IFT_DOCSCABLEUPSTREAM = 0x81 - IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd - IFT_DS0 = 0x51 - IFT_DS0BUNDLE = 0x52 - IFT_DS1FDL = 0xaa - IFT_DS3 = 0x1e - IFT_DTM = 0x8c - IFT_DVBASILN = 0xac - IFT_DVBASIOUT = 0xad - IFT_DVBRCCDOWNSTREAM = 0x93 - IFT_DVBRCCMACLAYER = 0x92 - IFT_DVBRCCUPSTREAM = 0x94 - IFT_ECONET = 0xce - IFT_EON = 0x19 - IFT_EPLRS = 0x57 - IFT_ESCON = 0x49 - IFT_ETHER = 0x6 - IFT_FAITH = 0xf2 - IFT_FAST = 0x7d - IFT_FASTETHER = 0x3e - IFT_FASTETHERFX = 0x45 - IFT_FDDI = 0xf - IFT_FIBRECHANNEL = 0x38 - IFT_FRAMERELAYINTERCONNECT = 0x3a - IFT_FRAMERELAYMPI = 0x5c - IFT_FRDLCIENDPT = 0xc1 - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_FRF16MFRBUNDLE = 0xa3 - IFT_FRFORWARD = 0x9e - IFT_G703AT2MB = 0x43 - IFT_G703AT64K = 0x42 - IFT_GIF = 0xf0 - IFT_GIGABITETHERNET = 0x75 - IFT_GR303IDT = 0xb2 - IFT_GR303RDT = 0xb1 - IFT_H323GATEKEEPER = 0xa4 - IFT_H323PROXY = 0xa5 - IFT_HDH1822 = 0x3 - IFT_HDLC = 0x76 - IFT_HDSL2 = 0xa8 - IFT_HIPERLAN2 = 0xb7 - IFT_HIPPI = 0x2f - IFT_HIPPIINTERFACE = 0x39 - IFT_HOSTPAD = 0x5a - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IBM370PARCHAN = 0x48 - IFT_IDSL = 0x9a - IFT_IEEE1394 = 0x90 - IFT_IEEE80211 = 0x47 - IFT_IEEE80212 = 0x37 - IFT_IEEE8023ADLAG = 0xa1 - IFT_IFGSN = 0x91 - IFT_IMT = 0xbe - IFT_INFINIBAND = 0xc7 - IFT_INTERLEAVE = 0x7c - IFT_IP = 0x7e - IFT_IPFORWARD = 0x8e - IFT_IPOVERATM = 0x72 - IFT_IPOVERCDLC = 0x6d - IFT_IPOVERCLAW = 0x6e - IFT_IPSWITCH = 0x4e - IFT_ISDN = 0x3f - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISDNS = 0x4b - IFT_ISDNU = 0x4c - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88025CRFPINT = 0x62 - IFT_ISO88025DTR = 0x56 - IFT_ISO88025FIBER = 0x73 - IFT_ISO88026 = 0xa - IFT_ISUP = 0xb3 - IFT_L2VLAN = 0x87 - IFT_L3IPVLAN = 0x88 - IFT_L3IPXVLAN = 0x89 - IFT_LAPB = 0x10 - IFT_LAPD = 0x4d - IFT_LAPF = 0x77 - IFT_LINEGROUP = 0xd2 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MEDIAMAILOVERIP = 0x8b - IFT_MFSIGLINK = 0xa7 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_MPC = 0x71 - IFT_MPLS = 0xa6 - IFT_MPLSTUNNEL = 0x96 - IFT_MSDSL = 0x8f - IFT_MVL = 0xbf - IFT_MYRINET = 0x63 - IFT_NFAS = 0xaf - IFT_NSIP = 0x1b - IFT_OPTICALCHANNEL = 0xc3 - IFT_OPTICALTRANSPORT = 0xc4 - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PFLOG = 0xf5 - IFT_PFSYNC = 0xf6 - IFT_PLC = 0xae - IFT_PON155 = 0xcf - IFT_PON622 = 0xd0 - IFT_POS = 0xab - IFT_PPP = 0x17 - IFT_PPPMULTILINKBUNDLE = 0x6c - IFT_PROPATM = 0xc5 - IFT_PROPBWAP2MP = 0xb8 - IFT_PROPCNLS = 0x59 - IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 - IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 - IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 - IFT_PROPMUX = 0x36 - IFT_PROPVIRTUAL = 0x35 - IFT_PROPWIRELESSP2P = 0x9d - IFT_PTPSERIAL = 0x16 - IFT_PVC = 0xf1 - IFT_Q2931 = 0xc9 - IFT_QLLC = 0x44 - IFT_RADIOMAC = 0xbc - IFT_RADSL = 0x5f - IFT_REACHDSL = 0xc0 - IFT_RFC1483 = 0x9f - IFT_RS232 = 0x21 - IFT_RSRB = 0x4f - IFT_SDLC = 0x11 - IFT_SDSL = 0x60 - IFT_SHDSL = 0xa9 - IFT_SIP = 0x1f - IFT_SIPSIG = 0xcc - IFT_SIPTG = 0xcb - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SONET = 0x27 - IFT_SONETOVERHEADCHANNEL = 0xb9 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_SRP = 0x97 - IFT_SS7SIGLINK = 0x9c - IFT_STACKTOSTACK = 0x6f - IFT_STARLAN = 0xb - IFT_STF = 0xd7 - IFT_T1 = 0x12 - IFT_TDLC = 0x74 - IFT_TELINK = 0xc8 - IFT_TERMPAD = 0x5b - IFT_TR008 = 0xb0 - IFT_TRANSPHDLC = 0x7b - IFT_TUNNEL = 0x83 - IFT_ULTRA = 0x1d - IFT_USB = 0xa0 - IFT_V11 = 0x40 - IFT_V35 = 0x2d - IFT_V36 = 0x41 - IFT_V37 = 0x78 - IFT_VDSL = 0x61 - IFT_VIRTUALIPADDRESS = 0x70 - IFT_VIRTUALTG = 0xca - IFT_VOICEDID = 0xd5 - IFT_VOICEEM = 0x64 - IFT_VOICEEMFGD = 0xd3 - IFT_VOICEENCAP = 0x67 - IFT_VOICEFGDEANA = 0xd4 - IFT_VOICEFXO = 0x65 - IFT_VOICEFXS = 0x66 - IFT_VOICEOVERATM = 0x98 - IFT_VOICEOVERCABLE = 0xc6 - IFT_VOICEOVERFRAMERELAY = 0x99 - IFT_VOICEOVERIP = 0x68 - IFT_X213 = 0x5d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25HUNTGROUP = 0x7a - IFT_X25MLP = 0x79 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LOOPBACKNET = 0x7f - IPPROTO_AH = 0x33 - IPPROTO_CARP = 0x70 - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GRE = 0x2f - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IGMP = 0x2 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPIP = 0x4 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_IPV6_ICMP = 0x3a - IPPROTO_MAX = 0x100 - IPPROTO_MAXID = 0x34 - IPPROTO_MOBILE = 0x37 - IPPROTO_NONE = 0x3b - IPPROTO_PFSYNC = 0xf0 - IPPROTO_PIM = 0x67 - IPPROTO_PUP = 0xc - IPPROTO_RAW = 0xff - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_TCP = 0x6 - IPPROTO_TP = 0x1d - IPPROTO_UDP = 0x11 - IPPROTO_VRRP = 0x70 - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_DONTFRAG = 0x3e - IPV6_DSTOPTS = 0x32 - IPV6_FAITH = 0x1d - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FRAGTTL = 0x78 - IPV6_HLIMDEC = 0x1 - IPV6_HOPLIMIT = 0x2f - IPV6_HOPOPTS = 0x31 - IPV6_IPSEC_POLICY = 0x1c - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXPACKET = 0xffff - IPV6_MMTU = 0x500 - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_PATHMTU = 0x2c - IPV6_PKTINFO = 0x2e - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_RECVDSTOPTS = 0x28 - IPV6_RECVHOPLIMIT = 0x25 - IPV6_RECVHOPOPTS = 0x27 - IPV6_RECVPATHMTU = 0x2b - IPV6_RECVPKTINFO = 0x24 - IPV6_RECVRTHDR = 0x26 - IPV6_RECVTCLASS = 0x39 - IPV6_RTHDR = 0x33 - IPV6_RTHDRDSTOPTS = 0x23 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x3d - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2a - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IP_ADD_MEMBERSHIP = 0xc - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DROP_MEMBERSHIP = 0xd - IP_EF = 0x8000 - IP_ERRORMTU = 0x15 - IP_HDRINCL = 0x2 - IP_IPSEC_POLICY = 0x16 - IP_MAXPACKET = 0xffff - IP_MAX_MEMBERSHIPS = 0x14 - IP_MF = 0x2000 - IP_MINFRAGSIZE = 0x45 - IP_MINTTL = 0x18 - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_OFFMASK = 0x1fff - IP_OPTIONS = 0x1 - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVIF = 0x14 - IP_RECVOPTS = 0x5 - IP_RECVRETOPTS = 0x6 - IP_RECVTTL = 0x17 - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_TOS = 0x3 - IP_TTL = 0x4 - ISIG = 0x80 - ISTRIP = 0x20 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - KERN_HOSTNAME = 0xa - KERN_OSRELEASE = 0x2 - KERN_OSTYPE = 0x1 - KERN_VERSION = 0x4 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x6 - MADV_NORMAL = 0x0 - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_SPACEAVAIL = 0x5 - MADV_WILLNEED = 0x3 - MAP_ALIGNMENT_16MB = 0x18000000 - MAP_ALIGNMENT_1TB = 0x28000000 - MAP_ALIGNMENT_256TB = 0x30000000 - MAP_ALIGNMENT_4GB = 0x20000000 - MAP_ALIGNMENT_64KB = 0x10000000 - MAP_ALIGNMENT_64PB = 0x38000000 - MAP_ALIGNMENT_MASK = -0x1000000 - MAP_ALIGNMENT_SHIFT = 0x18 - MAP_ANON = 0x1000 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_HASSEMAPHORE = 0x200 - MAP_INHERIT = 0x80 - MAP_INHERIT_COPY = 0x1 - MAP_INHERIT_DEFAULT = 0x1 - MAP_INHERIT_DONATE_COPY = 0x3 - MAP_INHERIT_NONE = 0x2 - MAP_INHERIT_SHARE = 0x0 - MAP_NORESERVE = 0x40 - MAP_PRIVATE = 0x2 - MAP_RENAME = 0x20 - MAP_SHARED = 0x1 - MAP_STACK = 0x2000 - MAP_TRYFIXED = 0x400 - MAP_WIRED = 0x800 - MNT_ASYNC = 0x40 - MNT_BASIC_FLAGS = 0xe782807f - MNT_DEFEXPORTED = 0x200 - MNT_DISCARD = 0x800000 - MNT_EXKERB = 0x800 - MNT_EXNORESPORT = 0x8000000 - MNT_EXPORTANON = 0x400 - MNT_EXPORTED = 0x100 - MNT_EXPUBLIC = 0x10000000 - MNT_EXRDONLY = 0x80 - MNT_EXTATTR = 0x1000000 - MNT_FORCE = 0x80000 - MNT_GETARGS = 0x400000 - MNT_IGNORE = 0x100000 - MNT_LAZY = 0x3 - MNT_LOCAL = 0x1000 - MNT_LOG = 0x2000000 - MNT_NOATIME = 0x4000000 - MNT_NOCOREDUMP = 0x8000 - MNT_NODEV = 0x10 - MNT_NODEVMTIME = 0x40000000 - MNT_NOEXEC = 0x4 - MNT_NOSUID = 0x8 - MNT_NOWAIT = 0x2 - MNT_OP_FLAGS = 0x4d0000 - MNT_QUOTA = 0x2000 - MNT_RDONLY = 0x1 - MNT_RELATIME = 0x20000 - MNT_RELOAD = 0x40000 - MNT_ROOTFS = 0x4000 - MNT_SOFTDEP = 0x80000000 - MNT_SYMPERM = 0x20000000 - MNT_SYNCHRONOUS = 0x2 - MNT_UNION = 0x20 - MNT_UPDATE = 0x10000 - MNT_VISFLAGMASK = 0xff90ffff - MNT_WAIT = 0x1 - MSG_BCAST = 0x100 - MSG_CMSG_CLOEXEC = 0x800 - MSG_CONTROLMBUF = 0x2000000 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOR = 0x8 - MSG_IOVUSRSPACE = 0x4000000 - MSG_LENUSRSPACE = 0x8000000 - MSG_MCAST = 0x200 - MSG_NAMEMBUF = 0x1000000 - MSG_NBIO = 0x1000 - MSG_NOSIGNAL = 0x400 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_USERFLAGS = 0xffffff - MSG_WAITALL = 0x40 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x2 - MS_SYNC = 0x4 - NAME_MAX = 0x1ff - NET_RT_DUMP = 0x1 - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x5 - NET_RT_MAXID = 0x6 - NET_RT_OIFLIST = 0x4 - NET_RT_OOIFLIST = 0x3 - NFDBITS = 0x20 - NOFLSH = 0x80000000 - NOTE_ATTRIB = 0x8 - NOTE_CHILD = 0x4 - NOTE_DELETE = 0x1 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXTEND = 0x4 - NOTE_FORK = 0x40000000 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_PCTRLMASK = 0xf0000000 - NOTE_PDATAMASK = 0xfffff - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - OFIOGETBMAP = 0xc004667a - ONLCR = 0x2 - ONLRET = 0x40 - ONOCR = 0x20 - ONOEOT = 0x8 - OPOST = 0x1 - O_ACCMODE = 0x3 - O_ALT_IO = 0x40000 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x400000 - O_CREAT = 0x200 - O_DIRECT = 0x80000 - O_DIRECTORY = 0x200000 - O_DSYNC = 0x10000 - O_EXCL = 0x800 - O_EXLOCK = 0x20 - O_FSYNC = 0x80 - O_NDELAY = 0x4 - O_NOCTTY = 0x8000 - O_NOFOLLOW = 0x100 - O_NONBLOCK = 0x4 - O_NOSIGPIPE = 0x1000000 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_RSYNC = 0x20000 - O_SHLOCK = 0x10 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - PRI_IOFLUSH = 0x7c - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - RLIMIT_AS = 0xa - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_MEMLOCK = 0x6 - RLIMIT_NOFILE = 0x8 - RLIMIT_NPROC = 0x7 - RLIMIT_RSS = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_MAX = 0x9 - RTAX_NETMASK = 0x2 - RTAX_TAG = 0x8 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_NETMASK = 0x4 - RTA_TAG = 0x100 - RTF_ANNOUNCE = 0x20000 - RTF_BLACKHOLE = 0x1000 - RTF_CLONED = 0x2000 - RTF_CLONING = 0x100 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_GATEWAY = 0x2 - RTF_HOST = 0x4 - RTF_LLINFO = 0x400 - RTF_MASK = 0x80 - RTF_MODIFIED = 0x20 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_REJECT = 0x8 - RTF_SRC = 0x10000 - RTF_STATIC = 0x800 - RTF_UP = 0x1 - RTF_XRESOLVE = 0x200 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_CHGADDR = 0x15 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_GET = 0x4 - RTM_IEEE80211 = 0x11 - RTM_IFANNOUNCE = 0x10 - RTM_IFINFO = 0x14 - RTM_LLINFO_UPD = 0x13 - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_OIFINFO = 0xf - RTM_OLDADD = 0x9 - RTM_OLDDEL = 0xa - RTM_OOIFINFO = 0xe - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_SETGATE = 0x12 - RTM_VERSION = 0x4 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - SCM_CREDS = 0x4 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x8 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80906931 - SIOCADDRT = 0x8030720a - SIOCAIFADDR = 0x8040691a - SIOCALIFADDR = 0x8118691c - SIOCATMARK = 0x40047307 - SIOCDELMULTI = 0x80906932 - SIOCDELRT = 0x8030720b - SIOCDIFADDR = 0x80906919 - SIOCDIFPHYADDR = 0x80906949 - SIOCDLIFADDR = 0x8118691e - SIOCGDRVSPEC = 0xc01c697b - SIOCGETPFSYNC = 0xc09069f8 - SIOCGETSGCNT = 0xc0147534 - SIOCGETVIFCNT = 0xc0147533 - SIOCGHIWAT = 0x40047301 - SIOCGIFADDR = 0xc0906921 - SIOCGIFADDRPREF = 0xc0946920 - SIOCGIFALIAS = 0xc040691b - SIOCGIFBRDADDR = 0xc0906923 - SIOCGIFCAP = 0xc0206976 - SIOCGIFCONF = 0xc0086926 - SIOCGIFDATA = 0xc0946985 - SIOCGIFDLT = 0xc0906977 - SIOCGIFDSTADDR = 0xc0906922 - SIOCGIFFLAGS = 0xc0906911 - SIOCGIFGENERIC = 0xc090693a - SIOCGIFMEDIA = 0xc0286936 - SIOCGIFMETRIC = 0xc0906917 - SIOCGIFMTU = 0xc090697e - SIOCGIFNETMASK = 0xc0906925 - SIOCGIFPDSTADDR = 0xc0906948 - SIOCGIFPSRCADDR = 0xc0906947 - SIOCGLIFADDR = 0xc118691d - SIOCGLIFPHYADDR = 0xc118694b - SIOCGLINKSTR = 0xc01c6987 - SIOCGLOWAT = 0x40047303 - SIOCGPGRP = 0x40047309 - SIOCGVH = 0xc0906983 - SIOCIFCREATE = 0x8090697a - SIOCIFDESTROY = 0x80906979 - SIOCIFGCLONERS = 0xc00c6978 - SIOCINITIFADDR = 0xc0446984 - SIOCSDRVSPEC = 0x801c697b - SIOCSETPFSYNC = 0x809069f7 - SIOCSHIWAT = 0x80047300 - SIOCSIFADDR = 0x8090690c - SIOCSIFADDRPREF = 0x8094691f - SIOCSIFBRDADDR = 0x80906913 - SIOCSIFCAP = 0x80206975 - SIOCSIFDSTADDR = 0x8090690e - SIOCSIFFLAGS = 0x80906910 - SIOCSIFGENERIC = 0x80906939 - SIOCSIFMEDIA = 0xc0906935 - SIOCSIFMETRIC = 0x80906918 - SIOCSIFMTU = 0x8090697f - SIOCSIFNETMASK = 0x80906916 - SIOCSIFPHYADDR = 0x80406946 - SIOCSLIFPHYADDR = 0x8118694a - SIOCSLINKSTR = 0x801c6988 - SIOCSLOWAT = 0x80047302 - SIOCSPGRP = 0x80047308 - SIOCSVH = 0xc0906982 - SIOCZIFDATA = 0xc0946986 - SOCK_CLOEXEC = 0x10000000 - SOCK_DGRAM = 0x2 - SOCK_FLAGS_MASK = 0xf0000000 - SOCK_NONBLOCK = 0x20000000 - SOCK_NOSIGPIPE = 0x40000000 - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_ACCEPTFILTER = 0x1000 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LINGER = 0x80 - SO_NOHEADER = 0x100a - SO_NOSIGPIPE = 0x800 - SO_OOBINLINE = 0x100 - SO_OVERFLOWED = 0x1009 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x100c - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x100b - SO_TIMESTAMP = 0x2000 - SO_TYPE = 0x1008 - SO_USELOOPBACK = 0x40 - SYSCTL_VERSION = 0x1000000 - SYSCTL_VERS_0 = 0x0 - SYSCTL_VERS_1 = 0x1000000 - SYSCTL_VERS_MASK = 0xff000000 - S_ARCH1 = 0x10000 - S_ARCH2 = 0x20000 - S_BLKSIZE = 0x200 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFLNK = 0xa000 - S_IFMT = 0xf000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IFWHT = 0xe000 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISTXT = 0x200 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXGRP = 0x8 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - TCIFLUSH = 0x1 - TCIOFLUSH = 0x3 - TCOFLUSH = 0x2 - TCP_CONGCTL = 0x20 - TCP_KEEPCNT = 0x6 - TCP_KEEPIDLE = 0x3 - TCP_KEEPINIT = 0x7 - TCP_KEEPINTVL = 0x5 - TCP_MAXBURST = 0x4 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_WINSHIFT = 0xe - TCP_MD5SIG = 0x10 - TCP_MINMSS = 0xd8 - TCP_MSS = 0x218 - TCP_NODELAY = 0x1 - TCSAFLUSH = 0x2 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCONS = 0x80047462 - TIOCDCDTIMESTAMP = 0x400c7458 - TIOCDRAIN = 0x2000745e - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLAG_CDTRCTS = 0x10 - TIOCFLAG_CLOCAL = 0x2 - TIOCFLAG_CRTSCTS = 0x4 - TIOCFLAG_MDMBUF = 0x8 - TIOCFLAG_SOFTCAR = 0x1 - TIOCFLUSH = 0x80047410 - TIOCGETA = 0x402c7413 - TIOCGETD = 0x4004741a - TIOCGFLAGS = 0x4004745d - TIOCGLINED = 0x40207442 - TIOCGPGRP = 0x40047477 - TIOCGQSIZE = 0x40047481 - TIOCGRANTPT = 0x20007447 - TIOCGSID = 0x40047463 - TIOCGSIZE = 0x40087468 - TIOCGWINSZ = 0x40087468 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGET = 0x4004746a - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCPTMGET = 0x48087446 - TIOCPTSNAME = 0x48087448 - TIOCRCVFRAME = 0x80047445 - TIOCREMOTE = 0x80047469 - TIOCSBRK = 0x2000747b - TIOCSCTTY = 0x20007461 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x802c7414 - TIOCSETAF = 0x802c7416 - TIOCSETAW = 0x802c7415 - TIOCSETD = 0x8004741b - TIOCSFLAGS = 0x8004745c - TIOCSIG = 0x2000745f - TIOCSLINED = 0x80207443 - TIOCSPGRP = 0x80047476 - TIOCSQSIZE = 0x80047480 - TIOCSSIZE = 0x80087467 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x80047465 - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCUCNTL = 0x80047466 - TIOCXMTFRAME = 0x80047444 - TOSTOP = 0x400000 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VTIME = 0x11 - VWERASE = 0x4 - WALL = 0x8 - WALLSIG = 0x8 - WALTSIG = 0x4 - WCLONE = 0x4 - WCOREFLAG = 0x80 - WNOHANG = 0x1 - WNOWAIT = 0x10000 - WNOZOMBIE = 0x20000 - WOPTSCHECKED = 0x40000 - WSTOPPED = 0x7f - WUNTRACED = 0x2 -) - -// Errors -const ( - E2BIG = syscall.Errno(0x7) - EACCES = syscall.Errno(0xd) - EADDRINUSE = syscall.Errno(0x30) - EADDRNOTAVAIL = syscall.Errno(0x31) - EAFNOSUPPORT = syscall.Errno(0x2f) - EAGAIN = syscall.Errno(0x23) - EALREADY = syscall.Errno(0x25) - EAUTH = syscall.Errno(0x50) - EBADF = syscall.Errno(0x9) - EBADMSG = syscall.Errno(0x58) - EBADRPC = syscall.Errno(0x48) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x57) - ECHILD = syscall.Errno(0xa) - ECONNABORTED = syscall.Errno(0x35) - ECONNREFUSED = syscall.Errno(0x3d) - ECONNRESET = syscall.Errno(0x36) - EDEADLK = syscall.Errno(0xb) - EDESTADDRREQ = syscall.Errno(0x27) - EDOM = syscall.Errno(0x21) - EDQUOT = syscall.Errno(0x45) - EEXIST = syscall.Errno(0x11) - EFAULT = syscall.Errno(0xe) - EFBIG = syscall.Errno(0x1b) - EFTYPE = syscall.Errno(0x4f) - EHOSTDOWN = syscall.Errno(0x40) - EHOSTUNREACH = syscall.Errno(0x41) - EIDRM = syscall.Errno(0x52) - EILSEQ = syscall.Errno(0x55) - EINPROGRESS = syscall.Errno(0x24) - EINTR = syscall.Errno(0x4) - EINVAL = syscall.Errno(0x16) - EIO = syscall.Errno(0x5) - EISCONN = syscall.Errno(0x38) - EISDIR = syscall.Errno(0x15) - ELAST = syscall.Errno(0x60) - ELOOP = syscall.Errno(0x3e) - EMFILE = syscall.Errno(0x18) - EMLINK = syscall.Errno(0x1f) - EMSGSIZE = syscall.Errno(0x28) - EMULTIHOP = syscall.Errno(0x5e) - ENAMETOOLONG = syscall.Errno(0x3f) - ENEEDAUTH = syscall.Errno(0x51) - ENETDOWN = syscall.Errno(0x32) - ENETRESET = syscall.Errno(0x34) - ENETUNREACH = syscall.Errno(0x33) - ENFILE = syscall.Errno(0x17) - ENOATTR = syscall.Errno(0x5d) - ENOBUFS = syscall.Errno(0x37) - ENODATA = syscall.Errno(0x59) - ENODEV = syscall.Errno(0x13) - ENOENT = syscall.Errno(0x2) - ENOEXEC = syscall.Errno(0x8) - ENOLCK = syscall.Errno(0x4d) - ENOLINK = syscall.Errno(0x5f) - ENOMEM = syscall.Errno(0xc) - ENOMSG = syscall.Errno(0x53) - ENOPROTOOPT = syscall.Errno(0x2a) - ENOSPC = syscall.Errno(0x1c) - ENOSR = syscall.Errno(0x5a) - ENOSTR = syscall.Errno(0x5b) - ENOSYS = syscall.Errno(0x4e) - ENOTBLK = syscall.Errno(0xf) - ENOTCONN = syscall.Errno(0x39) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x42) - ENOTSOCK = syscall.Errno(0x26) - ENOTSUP = syscall.Errno(0x56) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x2d) - EOVERFLOW = syscall.Errno(0x54) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x2e) - EPIPE = syscall.Errno(0x20) - EPROCLIM = syscall.Errno(0x43) - EPROCUNAVAIL = syscall.Errno(0x4c) - EPROGMISMATCH = syscall.Errno(0x4b) - EPROGUNAVAIL = syscall.Errno(0x4a) - EPROTO = syscall.Errno(0x60) - EPROTONOSUPPORT = syscall.Errno(0x2b) - EPROTOTYPE = syscall.Errno(0x29) - ERANGE = syscall.Errno(0x22) - EREMOTE = syscall.Errno(0x47) - EROFS = syscall.Errno(0x1e) - ERPCMISMATCH = syscall.Errno(0x49) - ESHUTDOWN = syscall.Errno(0x3a) - ESOCKTNOSUPPORT = syscall.Errno(0x2c) - ESPIPE = syscall.Errno(0x1d) - ESRCH = syscall.Errno(0x3) - ESTALE = syscall.Errno(0x46) - ETIME = syscall.Errno(0x5c) - ETIMEDOUT = syscall.Errno(0x3c) - ETOOMANYREFS = syscall.Errno(0x3b) - ETXTBSY = syscall.Errno(0x1a) - EUSERS = syscall.Errno(0x44) - EWOULDBLOCK = syscall.Errno(0x23) - EXDEV = syscall.Errno(0x12) -) - -// Signals -const ( - SIGABRT = syscall.Signal(0x6) - SIGALRM = syscall.Signal(0xe) - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x14) - SIGCONT = syscall.Signal(0x13) - SIGEMT = syscall.Signal(0x7) - SIGFPE = syscall.Signal(0x8) - SIGHUP = syscall.Signal(0x1) - SIGILL = syscall.Signal(0x4) - SIGINFO = syscall.Signal(0x1d) - SIGINT = syscall.Signal(0x2) - SIGIO = syscall.Signal(0x17) - SIGIOT = syscall.Signal(0x6) - SIGKILL = syscall.Signal(0x9) - SIGPIPE = syscall.Signal(0xd) - SIGPROF = syscall.Signal(0x1b) - SIGPWR = syscall.Signal(0x20) - SIGQUIT = syscall.Signal(0x3) - SIGSEGV = syscall.Signal(0xb) - SIGSTOP = syscall.Signal(0x11) - SIGSYS = syscall.Signal(0xc) - SIGTERM = syscall.Signal(0xf) - SIGTRAP = syscall.Signal(0x5) - SIGTSTP = syscall.Signal(0x12) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x10) - SIGUSR1 = syscall.Signal(0x1e) - SIGUSR2 = syscall.Signal(0x1f) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "device not configured"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EDEADLK", "resource deadlock avoided"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "cross-device link"}, - {19, "ENODEV", "operation not supported by device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "result too large or too small"}, - {35, "EAGAIN", "resource temporarily unavailable"}, - {36, "EINPROGRESS", "operation now in progress"}, - {37, "EALREADY", "operation already in progress"}, - {38, "ENOTSOCK", "socket operation on non-socket"}, - {39, "EDESTADDRREQ", "destination address required"}, - {40, "EMSGSIZE", "message too long"}, - {41, "EPROTOTYPE", "protocol wrong type for socket"}, - {42, "ENOPROTOOPT", "protocol option not available"}, - {43, "EPROTONOSUPPORT", "protocol not supported"}, - {44, "ESOCKTNOSUPPORT", "socket type not supported"}, - {45, "EOPNOTSUPP", "operation not supported"}, - {46, "EPFNOSUPPORT", "protocol family not supported"}, - {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, - {48, "EADDRINUSE", "address already in use"}, - {49, "EADDRNOTAVAIL", "can't assign requested address"}, - {50, "ENETDOWN", "network is down"}, - {51, "ENETUNREACH", "network is unreachable"}, - {52, "ENETRESET", "network dropped connection on reset"}, - {53, "ECONNABORTED", "software caused connection abort"}, - {54, "ECONNRESET", "connection reset by peer"}, - {55, "ENOBUFS", "no buffer space available"}, - {56, "EISCONN", "socket is already connected"}, - {57, "ENOTCONN", "socket is not connected"}, - {58, "ESHUTDOWN", "can't send after socket shutdown"}, - {59, "ETOOMANYREFS", "too many references: can't splice"}, - {60, "ETIMEDOUT", "connection timed out"}, - {61, "ECONNREFUSED", "connection refused"}, - {62, "ELOOP", "too many levels of symbolic links"}, - {63, "ENAMETOOLONG", "file name too long"}, - {64, "EHOSTDOWN", "host is down"}, - {65, "EHOSTUNREACH", "no route to host"}, - {66, "ENOTEMPTY", "directory not empty"}, - {67, "EPROCLIM", "too many processes"}, - {68, "EUSERS", "too many users"}, - {69, "EDQUOT", "disc quota exceeded"}, - {70, "ESTALE", "stale NFS file handle"}, - {71, "EREMOTE", "too many levels of remote in path"}, - {72, "EBADRPC", "RPC struct is bad"}, - {73, "ERPCMISMATCH", "RPC version wrong"}, - {74, "EPROGUNAVAIL", "RPC prog. not avail"}, - {75, "EPROGMISMATCH", "program version wrong"}, - {76, "EPROCUNAVAIL", "bad procedure for program"}, - {77, "ENOLCK", "no locks available"}, - {78, "ENOSYS", "function not implemented"}, - {79, "EFTYPE", "inappropriate file type or format"}, - {80, "EAUTH", "authentication error"}, - {81, "ENEEDAUTH", "need authenticator"}, - {82, "EIDRM", "identifier removed"}, - {83, "ENOMSG", "no message of desired type"}, - {84, "EOVERFLOW", "value too large to be stored in data type"}, - {85, "EILSEQ", "illegal byte sequence"}, - {86, "ENOTSUP", "not supported"}, - {87, "ECANCELED", "operation Canceled"}, - {88, "EBADMSG", "bad or Corrupt message"}, - {89, "ENODATA", "no message available"}, - {90, "ENOSR", "no STREAM resources"}, - {91, "ENOSTR", "not a STREAM"}, - {92, "ETIME", "STREAM ioctl timeout"}, - {93, "ENOATTR", "attribute not found"}, - {94, "EMULTIHOP", "multihop attempted"}, - {95, "ENOLINK", "link has been severed"}, - {96, "ELAST", "protocol error"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, - {6, "SIGIOT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGURG", "urgent I/O condition"}, - {17, "SIGSTOP", "stopped (signal)"}, - {18, "SIGTSTP", "stopped"}, - {19, "SIGCONT", "continued"}, - {20, "SIGCHLD", "child exited"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGIO", "I/O possible"}, - {24, "SIGXCPU", "cputime limit exceeded"}, - {25, "SIGXFSZ", "filesize limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window size changes"}, - {29, "SIGINFO", "information request"}, - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, - {32, "SIGPWR", "power fail/restart"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go deleted file mode 100644 index 3b62ba1..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go +++ /dev/null @@ -1,1770 +0,0 @@ -// mkerrors.sh -m64 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm64 && netbsd -// +build arm64,netbsd - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -m64 _const.go - -package unix - -import "syscall" - -const ( - AF_APPLETALK = 0x10 - AF_ARP = 0x1c - AF_BLUETOOTH = 0x1f - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1a - AF_ECMA = 0x8 - AF_HYLINK = 0xf - AF_IEEE80211 = 0x20 - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x18 - AF_IPX = 0x17 - AF_ISDN = 0x1a - AF_ISO = 0x7 - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x23 - AF_MPLS = 0x21 - AF_NATM = 0x1b - AF_NS = 0x6 - AF_OROUTE = 0x11 - AF_OSI = 0x7 - AF_PUP = 0x4 - AF_ROUTE = 0x22 - AF_SNA = 0xb - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - ARPHRD_ARCNET = 0x7 - ARPHRD_ETHER = 0x1 - ARPHRD_FRELAY = 0xf - ARPHRD_IEEE1394 = 0x18 - ARPHRD_IEEE802 = 0x6 - ARPHRD_STRIP = 0x17 - B0 = 0x0 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B230400 = 0x38400 - B2400 = 0x960 - B28800 = 0x7080 - B300 = 0x12c - B38400 = 0x9600 - B460800 = 0x70800 - B4800 = 0x12c0 - B50 = 0x32 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B921600 = 0xe1000 - B9600 = 0x2580 - BIOCFEEDBACK = 0x8004427d - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc0104277 - BIOCGETIF = 0x4090426b - BIOCGFEEDBACK = 0x4004427c - BIOCGHDRCMPLT = 0x40044274 - BIOCGRTIMEOUT = 0x4010427b - BIOCGSEESENT = 0x40044278 - BIOCGSTATS = 0x4080426f - BIOCGSTATSOLD = 0x4008426f - BIOCIMMEDIATE = 0x80044270 - BIOCPROMISC = 0x20004269 - BIOCSBLEN = 0xc0044266 - BIOCSDLT = 0x80044276 - BIOCSETF = 0x80104267 - BIOCSETIF = 0x8090426c - BIOCSFEEDBACK = 0x8004427d - BIOCSHDRCMPLT = 0x80044275 - BIOCSRTIMEOUT = 0x8010427a - BIOCSSEESENT = 0x80044279 - BIOCSTCPF = 0x80104272 - BIOCSUDPF = 0x80104273 - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x8 - BPF_ALIGNMENT32 = 0x4 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_DFLTBUFSIZE = 0x100000 - BPF_DIV = 0x30 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x1000000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_W = 0x0 - BPF_X = 0x8 - BRKINT = 0x2 - CFLUSH = 0xf - CLOCAL = 0x8000 - CLONE_CSIGNAL = 0xff - CLONE_FILES = 0x400 - CLONE_FS = 0x200 - CLONE_PID = 0x1000 - CLONE_PTRACE = 0x2000 - CLONE_SIGHAND = 0x800 - CLONE_VFORK = 0x4000 - CLONE_VM = 0x100 - CPUSTATES = 0x5 - CP_IDLE = 0x4 - CP_INTR = 0x3 - CP_NICE = 0x1 - CP_SYS = 0x2 - CP_USER = 0x0 - CREAD = 0x800 - CRTSCTS = 0x10000 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0x14 - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTL_HW = 0x6 - CTL_KERN = 0x1 - CTL_MAXNAME = 0xc - CTL_NET = 0x4 - CTL_QUERY = -0x2 - DIOCBSFLUSH = 0x20006478 - DLT_A429 = 0xb8 - DLT_A653_ICM = 0xb9 - DLT_AIRONET_HEADER = 0x78 - DLT_AOS = 0xde - DLT_APPLE_IP_OVER_IEEE1394 = 0x8a - DLT_ARCNET = 0x7 - DLT_ARCNET_LINUX = 0x81 - DLT_ATM_CLIP = 0x13 - DLT_ATM_RFC1483 = 0xb - DLT_AURORA = 0x7e - DLT_AX25 = 0x3 - DLT_AX25_KISS = 0xca - DLT_BACNET_MS_TP = 0xa5 - DLT_BLUETOOTH_HCI_H4 = 0xbb - DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 - DLT_CAN20B = 0xbe - DLT_CAN_SOCKETCAN = 0xe3 - DLT_CHAOS = 0x5 - DLT_CISCO_IOS = 0x76 - DLT_C_HDLC = 0x68 - DLT_C_HDLC_WITH_DIR = 0xcd - DLT_DECT = 0xdd - DLT_DOCSIS = 0x8f - DLT_ECONET = 0x73 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0x6d - DLT_ERF = 0xc5 - DLT_ERF_ETH = 0xaf - DLT_ERF_POS = 0xb0 - DLT_FC_2 = 0xe0 - DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 - DLT_FDDI = 0xa - DLT_FLEXRAY = 0xd2 - DLT_FRELAY = 0x6b - DLT_FRELAY_WITH_DIR = 0xce - DLT_GCOM_SERIAL = 0xad - DLT_GCOM_T1E1 = 0xac - DLT_GPF_F = 0xab - DLT_GPF_T = 0xaa - DLT_GPRS_LLC = 0xa9 - DLT_GSMTAP_ABIS = 0xda - DLT_GSMTAP_UM = 0xd9 - DLT_HDLC = 0x10 - DLT_HHDLC = 0x79 - DLT_HIPPI = 0xf - DLT_IBM_SN = 0x92 - DLT_IBM_SP = 0x91 - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_IEEE802_11_RADIO_AVS = 0xa3 - DLT_IEEE802_15_4 = 0xc3 - DLT_IEEE802_15_4_LINUX = 0xbf - DLT_IEEE802_15_4_NONASK_PHY = 0xd7 - DLT_IEEE802_16_MAC_CPS = 0xbc - DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 - DLT_IPMB = 0xc7 - DLT_IPMB_LINUX = 0xd1 - DLT_IPNET = 0xe2 - DLT_IPV4 = 0xe4 - DLT_IPV6 = 0xe5 - DLT_IP_OVER_FC = 0x7a - DLT_JUNIPER_ATM1 = 0x89 - DLT_JUNIPER_ATM2 = 0x87 - DLT_JUNIPER_CHDLC = 0xb5 - DLT_JUNIPER_ES = 0x84 - DLT_JUNIPER_ETHER = 0xb2 - DLT_JUNIPER_FRELAY = 0xb4 - DLT_JUNIPER_GGSN = 0x85 - DLT_JUNIPER_ISM = 0xc2 - DLT_JUNIPER_MFR = 0x86 - DLT_JUNIPER_MLFR = 0x83 - DLT_JUNIPER_MLPPP = 0x82 - DLT_JUNIPER_MONITOR = 0xa4 - DLT_JUNIPER_PIC_PEER = 0xae - DLT_JUNIPER_PPP = 0xb3 - DLT_JUNIPER_PPPOE = 0xa7 - DLT_JUNIPER_PPPOE_ATM = 0xa8 - DLT_JUNIPER_SERVICES = 0x88 - DLT_JUNIPER_ST = 0xc8 - DLT_JUNIPER_VP = 0xb7 - DLT_LAPB_WITH_DIR = 0xcf - DLT_LAPD = 0xcb - DLT_LIN = 0xd4 - DLT_LINUX_EVDEV = 0xd8 - DLT_LINUX_IRDA = 0x90 - DLT_LINUX_LAPD = 0xb1 - DLT_LINUX_SLL = 0x71 - DLT_LOOP = 0x6c - DLT_LTALK = 0x72 - DLT_MFR = 0xb6 - DLT_MOST = 0xd3 - DLT_MPLS = 0xdb - DLT_MTP2 = 0x8c - DLT_MTP2_WITH_PHDR = 0x8b - DLT_MTP3 = 0x8d - DLT_NULL = 0x0 - DLT_PCI_EXP = 0x7d - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x12 - DLT_PPI = 0xc0 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0xe - DLT_PPP_ETHER = 0x33 - DLT_PPP_PPPD = 0xa6 - DLT_PPP_SERIAL = 0x32 - DLT_PPP_WITH_DIR = 0xcc - DLT_PRISM_HEADER = 0x77 - DLT_PRONET = 0x4 - DLT_RAIF1 = 0xc6 - DLT_RAW = 0xc - DLT_RAWAF_MASK = 0x2240000 - DLT_RIO = 0x7c - DLT_SCCP = 0x8e - DLT_SITA = 0xc4 - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xd - DLT_SUNATM = 0x7b - DLT_SYMANTEC_FIREWALL = 0x63 - DLT_TZSP = 0x80 - DLT_USB = 0xba - DLT_USB_LINUX = 0xbd - DLT_USB_LINUX_MMAPPED = 0xdc - DLT_WIHART = 0xdf - DLT_X2E_SERIAL = 0xd5 - DLT_X2E_XORAYA = 0xd6 - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - DT_WHT = 0xe - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EMUL_LINUX = 0x1 - EMUL_LINUX32 = 0x5 - EMUL_MAXID = 0x6 - ETHERCAP_JUMBO_MTU = 0x4 - ETHERCAP_VLAN_HWTAGGING = 0x2 - ETHERCAP_VLAN_MTU = 0x1 - ETHERMIN = 0x2e - ETHERMTU = 0x5dc - ETHERMTU_JUMBO = 0x2328 - ETHERTYPE_8023 = 0x4 - ETHERTYPE_AARP = 0x80f3 - ETHERTYPE_ACCTON = 0x8390 - ETHERTYPE_AEONIC = 0x8036 - ETHERTYPE_ALPHA = 0x814a - ETHERTYPE_AMBER = 0x6008 - ETHERTYPE_AMOEBA = 0x8145 - ETHERTYPE_APOLLO = 0x80f7 - ETHERTYPE_APOLLODOMAIN = 0x8019 - ETHERTYPE_APPLETALK = 0x809b - ETHERTYPE_APPLITEK = 0x80c7 - ETHERTYPE_ARGONAUT = 0x803a - ETHERTYPE_ARP = 0x806 - ETHERTYPE_AT = 0x809b - ETHERTYPE_ATALK = 0x809b - ETHERTYPE_ATOMIC = 0x86df - ETHERTYPE_ATT = 0x8069 - ETHERTYPE_ATTSTANFORD = 0x8008 - ETHERTYPE_AUTOPHON = 0x806a - ETHERTYPE_AXIS = 0x8856 - ETHERTYPE_BCLOOP = 0x9003 - ETHERTYPE_BOFL = 0x8102 - ETHERTYPE_CABLETRON = 0x7034 - ETHERTYPE_CHAOS = 0x804 - ETHERTYPE_COMDESIGN = 0x806c - ETHERTYPE_COMPUGRAPHIC = 0x806d - ETHERTYPE_COUNTERPOINT = 0x8062 - ETHERTYPE_CRONUS = 0x8004 - ETHERTYPE_CRONUSVLN = 0x8003 - ETHERTYPE_DCA = 0x1234 - ETHERTYPE_DDE = 0x807b - ETHERTYPE_DEBNI = 0xaaaa - ETHERTYPE_DECAM = 0x8048 - ETHERTYPE_DECCUST = 0x6006 - ETHERTYPE_DECDIAG = 0x6005 - ETHERTYPE_DECDNS = 0x803c - ETHERTYPE_DECDTS = 0x803e - ETHERTYPE_DECEXPER = 0x6000 - ETHERTYPE_DECLAST = 0x8041 - ETHERTYPE_DECLTM = 0x803f - ETHERTYPE_DECMUMPS = 0x6009 - ETHERTYPE_DECNETBIOS = 0x8040 - ETHERTYPE_DELTACON = 0x86de - ETHERTYPE_DIDDLE = 0x4321 - ETHERTYPE_DLOG1 = 0x660 - ETHERTYPE_DLOG2 = 0x661 - ETHERTYPE_DN = 0x6003 - ETHERTYPE_DOGFIGHT = 0x1989 - ETHERTYPE_DSMD = 0x8039 - ETHERTYPE_ECMA = 0x803 - ETHERTYPE_ENCRYPT = 0x803d - ETHERTYPE_ES = 0x805d - ETHERTYPE_EXCELAN = 0x8010 - ETHERTYPE_EXPERDATA = 0x8049 - ETHERTYPE_FLIP = 0x8146 - ETHERTYPE_FLOWCONTROL = 0x8808 - ETHERTYPE_FRARP = 0x808 - ETHERTYPE_GENDYN = 0x8068 - ETHERTYPE_HAYES = 0x8130 - ETHERTYPE_HIPPI_FP = 0x8180 - ETHERTYPE_HITACHI = 0x8820 - ETHERTYPE_HP = 0x8005 - ETHERTYPE_IEEEPUP = 0xa00 - ETHERTYPE_IEEEPUPAT = 0xa01 - ETHERTYPE_IMLBL = 0x4c42 - ETHERTYPE_IMLBLDIAG = 0x424c - ETHERTYPE_IP = 0x800 - ETHERTYPE_IPAS = 0x876c - ETHERTYPE_IPV6 = 0x86dd - ETHERTYPE_IPX = 0x8137 - ETHERTYPE_IPXNEW = 0x8037 - ETHERTYPE_KALPANA = 0x8582 - ETHERTYPE_LANBRIDGE = 0x8038 - ETHERTYPE_LANPROBE = 0x8888 - ETHERTYPE_LAT = 0x6004 - ETHERTYPE_LBACK = 0x9000 - ETHERTYPE_LITTLE = 0x8060 - ETHERTYPE_LOGICRAFT = 0x8148 - ETHERTYPE_LOOPBACK = 0x9000 - ETHERTYPE_MATRA = 0x807a - ETHERTYPE_MAX = 0xffff - ETHERTYPE_MERIT = 0x807c - ETHERTYPE_MICP = 0x873a - ETHERTYPE_MOPDL = 0x6001 - ETHERTYPE_MOPRC = 0x6002 - ETHERTYPE_MOTOROLA = 0x818d - ETHERTYPE_MPLS = 0x8847 - ETHERTYPE_MPLS_MCAST = 0x8848 - ETHERTYPE_MUMPS = 0x813f - ETHERTYPE_NBPCC = 0x3c04 - ETHERTYPE_NBPCLAIM = 0x3c09 - ETHERTYPE_NBPCLREQ = 0x3c05 - ETHERTYPE_NBPCLRSP = 0x3c06 - ETHERTYPE_NBPCREQ = 0x3c02 - ETHERTYPE_NBPCRSP = 0x3c03 - ETHERTYPE_NBPDG = 0x3c07 - ETHERTYPE_NBPDGB = 0x3c08 - ETHERTYPE_NBPDLTE = 0x3c0a - ETHERTYPE_NBPRAR = 0x3c0c - ETHERTYPE_NBPRAS = 0x3c0b - ETHERTYPE_NBPRST = 0x3c0d - ETHERTYPE_NBPSCD = 0x3c01 - ETHERTYPE_NBPVCD = 0x3c00 - ETHERTYPE_NBS = 0x802 - ETHERTYPE_NCD = 0x8149 - ETHERTYPE_NESTAR = 0x8006 - ETHERTYPE_NETBEUI = 0x8191 - ETHERTYPE_NOVELL = 0x8138 - ETHERTYPE_NS = 0x600 - ETHERTYPE_NSAT = 0x601 - ETHERTYPE_NSCOMPAT = 0x807 - ETHERTYPE_NTRAILER = 0x10 - ETHERTYPE_OS9 = 0x7007 - ETHERTYPE_OS9NET = 0x7009 - ETHERTYPE_PACER = 0x80c6 - ETHERTYPE_PAE = 0x888e - ETHERTYPE_PCS = 0x4242 - ETHERTYPE_PLANNING = 0x8044 - ETHERTYPE_PPP = 0x880b - ETHERTYPE_PPPOE = 0x8864 - ETHERTYPE_PPPOEDISC = 0x8863 - ETHERTYPE_PRIMENTS = 0x7031 - ETHERTYPE_PUP = 0x200 - ETHERTYPE_PUPAT = 0x200 - ETHERTYPE_RACAL = 0x7030 - ETHERTYPE_RATIONAL = 0x8150 - ETHERTYPE_RAWFR = 0x6559 - ETHERTYPE_RCL = 0x1995 - ETHERTYPE_RDP = 0x8739 - ETHERTYPE_RETIX = 0x80f2 - ETHERTYPE_REVARP = 0x8035 - ETHERTYPE_SCA = 0x6007 - ETHERTYPE_SECTRA = 0x86db - ETHERTYPE_SECUREDATA = 0x876d - ETHERTYPE_SGITW = 0x817e - ETHERTYPE_SG_BOUNCE = 0x8016 - ETHERTYPE_SG_DIAG = 0x8013 - ETHERTYPE_SG_NETGAMES = 0x8014 - ETHERTYPE_SG_RESV = 0x8015 - ETHERTYPE_SIMNET = 0x5208 - ETHERTYPE_SLOWPROTOCOLS = 0x8809 - ETHERTYPE_SNA = 0x80d5 - ETHERTYPE_SNMP = 0x814c - ETHERTYPE_SONIX = 0xfaf5 - ETHERTYPE_SPIDER = 0x809f - ETHERTYPE_SPRITE = 0x500 - ETHERTYPE_STP = 0x8181 - ETHERTYPE_TALARIS = 0x812b - ETHERTYPE_TALARISMC = 0x852b - ETHERTYPE_TCPCOMP = 0x876b - ETHERTYPE_TCPSM = 0x9002 - ETHERTYPE_TEC = 0x814f - ETHERTYPE_TIGAN = 0x802f - ETHERTYPE_TRAIL = 0x1000 - ETHERTYPE_TRANSETHER = 0x6558 - ETHERTYPE_TYMSHARE = 0x802e - ETHERTYPE_UBBST = 0x7005 - ETHERTYPE_UBDEBUG = 0x900 - ETHERTYPE_UBDIAGLOOP = 0x7002 - ETHERTYPE_UBDL = 0x7000 - ETHERTYPE_UBNIU = 0x7001 - ETHERTYPE_UBNMC = 0x7003 - ETHERTYPE_VALID = 0x1600 - ETHERTYPE_VARIAN = 0x80dd - ETHERTYPE_VAXELN = 0x803b - ETHERTYPE_VEECO = 0x8067 - ETHERTYPE_VEXP = 0x805b - ETHERTYPE_VGLAB = 0x8131 - ETHERTYPE_VINES = 0xbad - ETHERTYPE_VINESECHO = 0xbaf - ETHERTYPE_VINESLOOP = 0xbae - ETHERTYPE_VITAL = 0xff00 - ETHERTYPE_VLAN = 0x8100 - ETHERTYPE_VLTLMAN = 0x8080 - ETHERTYPE_VPROD = 0x805c - ETHERTYPE_VURESERVED = 0x8147 - ETHERTYPE_WATERLOO = 0x8130 - ETHERTYPE_WELLFLEET = 0x8103 - ETHERTYPE_X25 = 0x805 - ETHERTYPE_X75 = 0x801 - ETHERTYPE_XNSSM = 0x9001 - ETHERTYPE_XTP = 0x817d - ETHER_ADDR_LEN = 0x6 - ETHER_CRC_LEN = 0x4 - ETHER_CRC_POLY_BE = 0x4c11db6 - ETHER_CRC_POLY_LE = 0xedb88320 - ETHER_HDR_LEN = 0xe - ETHER_MAX_LEN = 0x5ee - ETHER_MAX_LEN_JUMBO = 0x233a - ETHER_MIN_LEN = 0x40 - ETHER_PPPOE_ENCAP_LEN = 0x8 - ETHER_TYPE_LEN = 0x2 - ETHER_VLAN_ENCAP_LEN = 0x4 - EVFILT_AIO = 0x2 - EVFILT_PROC = 0x4 - EVFILT_READ = 0x0 - EVFILT_SIGNAL = 0x5 - EVFILT_SYSCOUNT = 0x7 - EVFILT_TIMER = 0x6 - EVFILT_VNODE = 0x3 - EVFILT_WRITE = 0x1 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG1 = 0x2000 - EV_ONESHOT = 0x10 - EV_SYSFLAGS = 0xf000 - EXTA = 0x4b00 - EXTATTR_CMD_START = 0x1 - EXTATTR_CMD_STOP = 0x2 - EXTATTR_NAMESPACE_SYSTEM = 0x2 - EXTATTR_NAMESPACE_USER = 0x1 - EXTB = 0x9600 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x100 - FLUSHO = 0x800000 - F_CLOSEM = 0xa - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0xc - F_FSCTL = -0x80000000 - F_FSDIRMASK = 0x70000000 - F_FSIN = 0x10000000 - F_FSINOUT = 0x30000000 - F_FSOUT = 0x20000000 - F_FSPRIV = 0x8000 - F_FSVOID = 0x40000000 - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0x7 - F_GETNOSIGPIPE = 0xd - F_GETOWN = 0x5 - F_MAXFD = 0xb - F_OK = 0x0 - F_PARAM_MASK = 0xfff - F_PARAM_MAX = 0xfff - F_RDLCK = 0x1 - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0x8 - F_SETLKW = 0x9 - F_SETNOSIGPIPE = 0xe - F_SETOWN = 0x6 - F_UNLCK = 0x2 - F_WRLCK = 0x3 - HUPCL = 0x4000 - HW_MACHINE = 0x1 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFAN_ARRIVAL = 0x0 - IFAN_DEPARTURE = 0x1 - IFA_ROUTE = 0x1 - IFF_ALLMULTI = 0x200 - IFF_BROADCAST = 0x2 - IFF_CANTCHANGE = 0x8f52 - IFF_DEBUG = 0x4 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_NOTRAILERS = 0x20 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PROMISC = 0x100 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_1822 = 0x2 - IFT_A12MPPSWITCH = 0x82 - IFT_AAL2 = 0xbb - IFT_AAL5 = 0x31 - IFT_ADSL = 0x5e - IFT_AFLANE8023 = 0x3b - IFT_AFLANE8025 = 0x3c - IFT_ARAP = 0x58 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ASYNC = 0x54 - IFT_ATM = 0x25 - IFT_ATMDXI = 0x69 - IFT_ATMFUNI = 0x6a - IFT_ATMIMA = 0x6b - IFT_ATMLOGICAL = 0x50 - IFT_ATMRADIO = 0xbd - IFT_ATMSUBINTERFACE = 0x86 - IFT_ATMVCIENDPT = 0xc2 - IFT_ATMVIRTUAL = 0x95 - IFT_BGPPOLICYACCOUNTING = 0xa2 - IFT_BRIDGE = 0xd1 - IFT_BSC = 0x53 - IFT_CARP = 0xf8 - IFT_CCTEMUL = 0x3d - IFT_CEPT = 0x13 - IFT_CES = 0x85 - IFT_CHANNEL = 0x46 - IFT_CNR = 0x55 - IFT_COFFEE = 0x84 - IFT_COMPOSITELINK = 0x9b - IFT_DCN = 0x8d - IFT_DIGITALPOWERLINE = 0x8a - IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba - IFT_DLSW = 0x4a - IFT_DOCSCABLEDOWNSTREAM = 0x80 - IFT_DOCSCABLEMACLAYER = 0x7f - IFT_DOCSCABLEUPSTREAM = 0x81 - IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd - IFT_DS0 = 0x51 - IFT_DS0BUNDLE = 0x52 - IFT_DS1FDL = 0xaa - IFT_DS3 = 0x1e - IFT_DTM = 0x8c - IFT_DVBASILN = 0xac - IFT_DVBASIOUT = 0xad - IFT_DVBRCCDOWNSTREAM = 0x93 - IFT_DVBRCCMACLAYER = 0x92 - IFT_DVBRCCUPSTREAM = 0x94 - IFT_ECONET = 0xce - IFT_EON = 0x19 - IFT_EPLRS = 0x57 - IFT_ESCON = 0x49 - IFT_ETHER = 0x6 - IFT_FAITH = 0xf2 - IFT_FAST = 0x7d - IFT_FASTETHER = 0x3e - IFT_FASTETHERFX = 0x45 - IFT_FDDI = 0xf - IFT_FIBRECHANNEL = 0x38 - IFT_FRAMERELAYINTERCONNECT = 0x3a - IFT_FRAMERELAYMPI = 0x5c - IFT_FRDLCIENDPT = 0xc1 - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_FRF16MFRBUNDLE = 0xa3 - IFT_FRFORWARD = 0x9e - IFT_G703AT2MB = 0x43 - IFT_G703AT64K = 0x42 - IFT_GIF = 0xf0 - IFT_GIGABITETHERNET = 0x75 - IFT_GR303IDT = 0xb2 - IFT_GR303RDT = 0xb1 - IFT_H323GATEKEEPER = 0xa4 - IFT_H323PROXY = 0xa5 - IFT_HDH1822 = 0x3 - IFT_HDLC = 0x76 - IFT_HDSL2 = 0xa8 - IFT_HIPERLAN2 = 0xb7 - IFT_HIPPI = 0x2f - IFT_HIPPIINTERFACE = 0x39 - IFT_HOSTPAD = 0x5a - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IBM370PARCHAN = 0x48 - IFT_IDSL = 0x9a - IFT_IEEE1394 = 0x90 - IFT_IEEE80211 = 0x47 - IFT_IEEE80212 = 0x37 - IFT_IEEE8023ADLAG = 0xa1 - IFT_IFGSN = 0x91 - IFT_IMT = 0xbe - IFT_INFINIBAND = 0xc7 - IFT_INTERLEAVE = 0x7c - IFT_IP = 0x7e - IFT_IPFORWARD = 0x8e - IFT_IPOVERATM = 0x72 - IFT_IPOVERCDLC = 0x6d - IFT_IPOVERCLAW = 0x6e - IFT_IPSWITCH = 0x4e - IFT_ISDN = 0x3f - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISDNS = 0x4b - IFT_ISDNU = 0x4c - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88025CRFPINT = 0x62 - IFT_ISO88025DTR = 0x56 - IFT_ISO88025FIBER = 0x73 - IFT_ISO88026 = 0xa - IFT_ISUP = 0xb3 - IFT_L2VLAN = 0x87 - IFT_L3IPVLAN = 0x88 - IFT_L3IPXVLAN = 0x89 - IFT_LAPB = 0x10 - IFT_LAPD = 0x4d - IFT_LAPF = 0x77 - IFT_LINEGROUP = 0xd2 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MEDIAMAILOVERIP = 0x8b - IFT_MFSIGLINK = 0xa7 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_MPC = 0x71 - IFT_MPLS = 0xa6 - IFT_MPLSTUNNEL = 0x96 - IFT_MSDSL = 0x8f - IFT_MVL = 0xbf - IFT_MYRINET = 0x63 - IFT_NFAS = 0xaf - IFT_NSIP = 0x1b - IFT_OPTICALCHANNEL = 0xc3 - IFT_OPTICALTRANSPORT = 0xc4 - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PFLOG = 0xf5 - IFT_PFSYNC = 0xf6 - IFT_PLC = 0xae - IFT_PON155 = 0xcf - IFT_PON622 = 0xd0 - IFT_POS = 0xab - IFT_PPP = 0x17 - IFT_PPPMULTILINKBUNDLE = 0x6c - IFT_PROPATM = 0xc5 - IFT_PROPBWAP2MP = 0xb8 - IFT_PROPCNLS = 0x59 - IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 - IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 - IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 - IFT_PROPMUX = 0x36 - IFT_PROPVIRTUAL = 0x35 - IFT_PROPWIRELESSP2P = 0x9d - IFT_PTPSERIAL = 0x16 - IFT_PVC = 0xf1 - IFT_Q2931 = 0xc9 - IFT_QLLC = 0x44 - IFT_RADIOMAC = 0xbc - IFT_RADSL = 0x5f - IFT_REACHDSL = 0xc0 - IFT_RFC1483 = 0x9f - IFT_RS232 = 0x21 - IFT_RSRB = 0x4f - IFT_SDLC = 0x11 - IFT_SDSL = 0x60 - IFT_SHDSL = 0xa9 - IFT_SIP = 0x1f - IFT_SIPSIG = 0xcc - IFT_SIPTG = 0xcb - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SONET = 0x27 - IFT_SONETOVERHEADCHANNEL = 0xb9 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_SRP = 0x97 - IFT_SS7SIGLINK = 0x9c - IFT_STACKTOSTACK = 0x6f - IFT_STARLAN = 0xb - IFT_STF = 0xd7 - IFT_T1 = 0x12 - IFT_TDLC = 0x74 - IFT_TELINK = 0xc8 - IFT_TERMPAD = 0x5b - IFT_TR008 = 0xb0 - IFT_TRANSPHDLC = 0x7b - IFT_TUNNEL = 0x83 - IFT_ULTRA = 0x1d - IFT_USB = 0xa0 - IFT_V11 = 0x40 - IFT_V35 = 0x2d - IFT_V36 = 0x41 - IFT_V37 = 0x78 - IFT_VDSL = 0x61 - IFT_VIRTUALIPADDRESS = 0x70 - IFT_VIRTUALTG = 0xca - IFT_VOICEDID = 0xd5 - IFT_VOICEEM = 0x64 - IFT_VOICEEMFGD = 0xd3 - IFT_VOICEENCAP = 0x67 - IFT_VOICEFGDEANA = 0xd4 - IFT_VOICEFXO = 0x65 - IFT_VOICEFXS = 0x66 - IFT_VOICEOVERATM = 0x98 - IFT_VOICEOVERCABLE = 0xc6 - IFT_VOICEOVERFRAMERELAY = 0x99 - IFT_VOICEOVERIP = 0x68 - IFT_X213 = 0x5d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25HUNTGROUP = 0x7a - IFT_X25MLP = 0x79 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LOOPBACKNET = 0x7f - IPPROTO_AH = 0x33 - IPPROTO_CARP = 0x70 - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GRE = 0x2f - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IGMP = 0x2 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPIP = 0x4 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_IPV6_ICMP = 0x3a - IPPROTO_MAX = 0x100 - IPPROTO_MAXID = 0x34 - IPPROTO_MOBILE = 0x37 - IPPROTO_NONE = 0x3b - IPPROTO_PFSYNC = 0xf0 - IPPROTO_PIM = 0x67 - IPPROTO_PUP = 0xc - IPPROTO_RAW = 0xff - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_TCP = 0x6 - IPPROTO_TP = 0x1d - IPPROTO_UDP = 0x11 - IPPROTO_VRRP = 0x70 - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_DONTFRAG = 0x3e - IPV6_DSTOPTS = 0x32 - IPV6_FAITH = 0x1d - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FRAGTTL = 0x78 - IPV6_HLIMDEC = 0x1 - IPV6_HOPLIMIT = 0x2f - IPV6_HOPOPTS = 0x31 - IPV6_IPSEC_POLICY = 0x1c - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXPACKET = 0xffff - IPV6_MMTU = 0x500 - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_PATHMTU = 0x2c - IPV6_PKTINFO = 0x2e - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_RECVDSTOPTS = 0x28 - IPV6_RECVHOPLIMIT = 0x25 - IPV6_RECVHOPOPTS = 0x27 - IPV6_RECVPATHMTU = 0x2b - IPV6_RECVPKTINFO = 0x24 - IPV6_RECVRTHDR = 0x26 - IPV6_RECVTCLASS = 0x39 - IPV6_RTHDR = 0x33 - IPV6_RTHDRDSTOPTS = 0x23 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x3d - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2a - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IP_ADD_MEMBERSHIP = 0xc - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DROP_MEMBERSHIP = 0xd - IP_EF = 0x8000 - IP_ERRORMTU = 0x15 - IP_HDRINCL = 0x2 - IP_IPSEC_POLICY = 0x16 - IP_MAXPACKET = 0xffff - IP_MAX_MEMBERSHIPS = 0x14 - IP_MF = 0x2000 - IP_MINFRAGSIZE = 0x45 - IP_MINTTL = 0x18 - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_OFFMASK = 0x1fff - IP_OPTIONS = 0x1 - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVIF = 0x14 - IP_RECVOPTS = 0x5 - IP_RECVRETOPTS = 0x6 - IP_RECVTTL = 0x17 - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_TOS = 0x3 - IP_TTL = 0x4 - ISIG = 0x80 - ISTRIP = 0x20 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - KERN_HOSTNAME = 0xa - KERN_OSRELEASE = 0x2 - KERN_OSTYPE = 0x1 - KERN_VERSION = 0x4 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x6 - MADV_NORMAL = 0x0 - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_SPACEAVAIL = 0x5 - MADV_WILLNEED = 0x3 - MAP_ALIGNMENT_16MB = 0x18000000 - MAP_ALIGNMENT_1TB = 0x28000000 - MAP_ALIGNMENT_256TB = 0x30000000 - MAP_ALIGNMENT_4GB = 0x20000000 - MAP_ALIGNMENT_64KB = 0x10000000 - MAP_ALIGNMENT_64PB = 0x38000000 - MAP_ALIGNMENT_MASK = -0x1000000 - MAP_ALIGNMENT_SHIFT = 0x18 - MAP_ANON = 0x1000 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_HASSEMAPHORE = 0x200 - MAP_INHERIT = 0x80 - MAP_INHERIT_COPY = 0x1 - MAP_INHERIT_DEFAULT = 0x1 - MAP_INHERIT_DONATE_COPY = 0x3 - MAP_INHERIT_NONE = 0x2 - MAP_INHERIT_SHARE = 0x0 - MAP_NORESERVE = 0x40 - MAP_PRIVATE = 0x2 - MAP_RENAME = 0x20 - MAP_SHARED = 0x1 - MAP_STACK = 0x2000 - MAP_TRYFIXED = 0x400 - MAP_WIRED = 0x800 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MNT_ASYNC = 0x40 - MNT_BASIC_FLAGS = 0xe782807f - MNT_DEFEXPORTED = 0x200 - MNT_DISCARD = 0x800000 - MNT_EXKERB = 0x800 - MNT_EXNORESPORT = 0x8000000 - MNT_EXPORTANON = 0x400 - MNT_EXPORTED = 0x100 - MNT_EXPUBLIC = 0x10000000 - MNT_EXRDONLY = 0x80 - MNT_EXTATTR = 0x1000000 - MNT_FORCE = 0x80000 - MNT_GETARGS = 0x400000 - MNT_IGNORE = 0x100000 - MNT_LAZY = 0x3 - MNT_LOCAL = 0x1000 - MNT_LOG = 0x2000000 - MNT_NOATIME = 0x4000000 - MNT_NOCOREDUMP = 0x8000 - MNT_NODEV = 0x10 - MNT_NODEVMTIME = 0x40000000 - MNT_NOEXEC = 0x4 - MNT_NOSUID = 0x8 - MNT_NOWAIT = 0x2 - MNT_OP_FLAGS = 0x4d0000 - MNT_QUOTA = 0x2000 - MNT_RDONLY = 0x1 - MNT_RELATIME = 0x20000 - MNT_RELOAD = 0x40000 - MNT_ROOTFS = 0x4000 - MNT_SOFTDEP = 0x80000000 - MNT_SYMPERM = 0x20000000 - MNT_SYNCHRONOUS = 0x2 - MNT_UNION = 0x20 - MNT_UPDATE = 0x10000 - MNT_VISFLAGMASK = 0xff90ffff - MNT_WAIT = 0x1 - MSG_BCAST = 0x100 - MSG_CMSG_CLOEXEC = 0x800 - MSG_CONTROLMBUF = 0x2000000 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOR = 0x8 - MSG_IOVUSRSPACE = 0x4000000 - MSG_LENUSRSPACE = 0x8000000 - MSG_MCAST = 0x200 - MSG_NAMEMBUF = 0x1000000 - MSG_NBIO = 0x1000 - MSG_NOSIGNAL = 0x400 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_USERFLAGS = 0xffffff - MSG_WAITALL = 0x40 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x2 - MS_SYNC = 0x4 - NAME_MAX = 0x1ff - NET_RT_DUMP = 0x1 - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x5 - NET_RT_MAXID = 0x6 - NET_RT_OIFLIST = 0x4 - NET_RT_OOIFLIST = 0x3 - NFDBITS = 0x20 - NOFLSH = 0x80000000 - NOTE_ATTRIB = 0x8 - NOTE_CHILD = 0x4 - NOTE_DELETE = 0x1 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXTEND = 0x4 - NOTE_FORK = 0x40000000 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_PCTRLMASK = 0xf0000000 - NOTE_PDATAMASK = 0xfffff - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - OFIOGETBMAP = 0xc004667a - ONLCR = 0x2 - ONLRET = 0x40 - ONOCR = 0x20 - ONOEOT = 0x8 - OPOST = 0x1 - O_ACCMODE = 0x3 - O_ALT_IO = 0x40000 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x400000 - O_CREAT = 0x200 - O_DIRECT = 0x80000 - O_DIRECTORY = 0x200000 - O_DSYNC = 0x10000 - O_EXCL = 0x800 - O_EXLOCK = 0x20 - O_FSYNC = 0x80 - O_NDELAY = 0x4 - O_NOCTTY = 0x8000 - O_NOFOLLOW = 0x100 - O_NONBLOCK = 0x4 - O_NOSIGPIPE = 0x1000000 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_RSYNC = 0x20000 - O_SHLOCK = 0x10 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PRI_IOFLUSH = 0x7c - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - RLIMIT_AS = 0xa - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_MEMLOCK = 0x6 - RLIMIT_NOFILE = 0x8 - RLIMIT_NPROC = 0x7 - RLIMIT_RSS = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_MAX = 0x9 - RTAX_NETMASK = 0x2 - RTAX_TAG = 0x8 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_NETMASK = 0x4 - RTA_TAG = 0x100 - RTF_ANNOUNCE = 0x20000 - RTF_BLACKHOLE = 0x1000 - RTF_CLONED = 0x2000 - RTF_CLONING = 0x100 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_GATEWAY = 0x2 - RTF_HOST = 0x4 - RTF_LLINFO = 0x400 - RTF_MASK = 0x80 - RTF_MODIFIED = 0x20 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_REJECT = 0x8 - RTF_SRC = 0x10000 - RTF_STATIC = 0x800 - RTF_UP = 0x1 - RTF_XRESOLVE = 0x200 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_CHGADDR = 0x15 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_GET = 0x4 - RTM_IEEE80211 = 0x11 - RTM_IFANNOUNCE = 0x10 - RTM_IFINFO = 0x14 - RTM_LLINFO_UPD = 0x13 - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_OIFINFO = 0xf - RTM_OLDADD = 0x9 - RTM_OLDDEL = 0xa - RTM_OOIFINFO = 0xe - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_SETGATE = 0x12 - RTM_VERSION = 0x4 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - SCM_CREDS = 0x4 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x8 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80906931 - SIOCADDRT = 0x8038720a - SIOCAIFADDR = 0x8040691a - SIOCALIFADDR = 0x8118691c - SIOCATMARK = 0x40047307 - SIOCDELMULTI = 0x80906932 - SIOCDELRT = 0x8038720b - SIOCDIFADDR = 0x80906919 - SIOCDIFPHYADDR = 0x80906949 - SIOCDLIFADDR = 0x8118691e - SIOCGDRVSPEC = 0xc028697b - SIOCGETPFSYNC = 0xc09069f8 - SIOCGETSGCNT = 0xc0207534 - SIOCGETVIFCNT = 0xc0287533 - SIOCGHIWAT = 0x40047301 - SIOCGIFADDR = 0xc0906921 - SIOCGIFADDRPREF = 0xc0986920 - SIOCGIFALIAS = 0xc040691b - SIOCGIFBRDADDR = 0xc0906923 - SIOCGIFCAP = 0xc0206976 - SIOCGIFCONF = 0xc0106926 - SIOCGIFDATA = 0xc0986985 - SIOCGIFDLT = 0xc0906977 - SIOCGIFDSTADDR = 0xc0906922 - SIOCGIFFLAGS = 0xc0906911 - SIOCGIFGENERIC = 0xc090693a - SIOCGIFMEDIA = 0xc0306936 - SIOCGIFMETRIC = 0xc0906917 - SIOCGIFMTU = 0xc090697e - SIOCGIFNETMASK = 0xc0906925 - SIOCGIFPDSTADDR = 0xc0906948 - SIOCGIFPSRCADDR = 0xc0906947 - SIOCGLIFADDR = 0xc118691d - SIOCGLIFPHYADDR = 0xc118694b - SIOCGLINKSTR = 0xc0286987 - SIOCGLOWAT = 0x40047303 - SIOCGPGRP = 0x40047309 - SIOCGVH = 0xc0906983 - SIOCIFCREATE = 0x8090697a - SIOCIFDESTROY = 0x80906979 - SIOCIFGCLONERS = 0xc0106978 - SIOCINITIFADDR = 0xc0706984 - SIOCSDRVSPEC = 0x8028697b - SIOCSETPFSYNC = 0x809069f7 - SIOCSHIWAT = 0x80047300 - SIOCSIFADDR = 0x8090690c - SIOCSIFADDRPREF = 0x8098691f - SIOCSIFBRDADDR = 0x80906913 - SIOCSIFCAP = 0x80206975 - SIOCSIFDSTADDR = 0x8090690e - SIOCSIFFLAGS = 0x80906910 - SIOCSIFGENERIC = 0x80906939 - SIOCSIFMEDIA = 0xc0906935 - SIOCSIFMETRIC = 0x80906918 - SIOCSIFMTU = 0x8090697f - SIOCSIFNETMASK = 0x80906916 - SIOCSIFPHYADDR = 0x80406946 - SIOCSLIFPHYADDR = 0x8118694a - SIOCSLINKSTR = 0x80286988 - SIOCSLOWAT = 0x80047302 - SIOCSPGRP = 0x80047308 - SIOCSVH = 0xc0906982 - SIOCZIFDATA = 0xc0986986 - SOCK_CLOEXEC = 0x10000000 - SOCK_DGRAM = 0x2 - SOCK_FLAGS_MASK = 0xf0000000 - SOCK_NONBLOCK = 0x20000000 - SOCK_NOSIGPIPE = 0x40000000 - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_ACCEPTFILTER = 0x1000 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LINGER = 0x80 - SO_NOHEADER = 0x100a - SO_NOSIGPIPE = 0x800 - SO_OOBINLINE = 0x100 - SO_OVERFLOWED = 0x1009 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x100c - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x100b - SO_TIMESTAMP = 0x2000 - SO_TYPE = 0x1008 - SO_USELOOPBACK = 0x40 - SYSCTL_VERSION = 0x1000000 - SYSCTL_VERS_0 = 0x0 - SYSCTL_VERS_1 = 0x1000000 - SYSCTL_VERS_MASK = 0xff000000 - S_ARCH1 = 0x10000 - S_ARCH2 = 0x20000 - S_BLKSIZE = 0x200 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFLNK = 0xa000 - S_IFMT = 0xf000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IFWHT = 0xe000 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISTXT = 0x200 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXGRP = 0x8 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - S_LOGIN_SET = 0x1 - TCIFLUSH = 0x1 - TCIOFLUSH = 0x3 - TCOFLUSH = 0x2 - TCP_CONGCTL = 0x20 - TCP_KEEPCNT = 0x6 - TCP_KEEPIDLE = 0x3 - TCP_KEEPINIT = 0x7 - TCP_KEEPINTVL = 0x5 - TCP_MAXBURST = 0x4 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_WINSHIFT = 0xe - TCP_MD5SIG = 0x10 - TCP_MINMSS = 0xd8 - TCP_MSS = 0x218 - TCP_NODELAY = 0x1 - TCSAFLUSH = 0x2 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCONS = 0x80047462 - TIOCDCDTIMESTAMP = 0x40107458 - TIOCDRAIN = 0x2000745e - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLAG_CDTRCTS = 0x10 - TIOCFLAG_CLOCAL = 0x2 - TIOCFLAG_CRTSCTS = 0x4 - TIOCFLAG_MDMBUF = 0x8 - TIOCFLAG_SOFTCAR = 0x1 - TIOCFLUSH = 0x80047410 - TIOCGETA = 0x402c7413 - TIOCGETD = 0x4004741a - TIOCGFLAGS = 0x4004745d - TIOCGLINED = 0x40207442 - TIOCGPGRP = 0x40047477 - TIOCGQSIZE = 0x40047481 - TIOCGRANTPT = 0x20007447 - TIOCGSID = 0x40047463 - TIOCGSIZE = 0x40087468 - TIOCGWINSZ = 0x40087468 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGET = 0x4004746a - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCPTMGET = 0x40287446 - TIOCPTSNAME = 0x40287448 - TIOCRCVFRAME = 0x80087445 - TIOCREMOTE = 0x80047469 - TIOCSBRK = 0x2000747b - TIOCSCTTY = 0x20007461 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x802c7414 - TIOCSETAF = 0x802c7416 - TIOCSETAW = 0x802c7415 - TIOCSETD = 0x8004741b - TIOCSFLAGS = 0x8004745c - TIOCSIG = 0x2000745f - TIOCSLINED = 0x80207443 - TIOCSPGRP = 0x80047476 - TIOCSQSIZE = 0x80047480 - TIOCSSIZE = 0x80087467 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x80047465 - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCUCNTL = 0x80047466 - TIOCXMTFRAME = 0x80087444 - TOSTOP = 0x400000 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VTIME = 0x11 - VWERASE = 0x4 - WALL = 0x8 - WALLSIG = 0x8 - WALTSIG = 0x4 - WCLONE = 0x4 - WCOREFLAG = 0x80 - WNOHANG = 0x1 - WNOWAIT = 0x10000 - WNOZOMBIE = 0x20000 - WOPTSCHECKED = 0x40000 - WSTOPPED = 0x7f - WUNTRACED = 0x2 -) - -// Errors -const ( - E2BIG = syscall.Errno(0x7) - EACCES = syscall.Errno(0xd) - EADDRINUSE = syscall.Errno(0x30) - EADDRNOTAVAIL = syscall.Errno(0x31) - EAFNOSUPPORT = syscall.Errno(0x2f) - EAGAIN = syscall.Errno(0x23) - EALREADY = syscall.Errno(0x25) - EAUTH = syscall.Errno(0x50) - EBADF = syscall.Errno(0x9) - EBADMSG = syscall.Errno(0x58) - EBADRPC = syscall.Errno(0x48) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x57) - ECHILD = syscall.Errno(0xa) - ECONNABORTED = syscall.Errno(0x35) - ECONNREFUSED = syscall.Errno(0x3d) - ECONNRESET = syscall.Errno(0x36) - EDEADLK = syscall.Errno(0xb) - EDESTADDRREQ = syscall.Errno(0x27) - EDOM = syscall.Errno(0x21) - EDQUOT = syscall.Errno(0x45) - EEXIST = syscall.Errno(0x11) - EFAULT = syscall.Errno(0xe) - EFBIG = syscall.Errno(0x1b) - EFTYPE = syscall.Errno(0x4f) - EHOSTDOWN = syscall.Errno(0x40) - EHOSTUNREACH = syscall.Errno(0x41) - EIDRM = syscall.Errno(0x52) - EILSEQ = syscall.Errno(0x55) - EINPROGRESS = syscall.Errno(0x24) - EINTR = syscall.Errno(0x4) - EINVAL = syscall.Errno(0x16) - EIO = syscall.Errno(0x5) - EISCONN = syscall.Errno(0x38) - EISDIR = syscall.Errno(0x15) - ELAST = syscall.Errno(0x60) - ELOOP = syscall.Errno(0x3e) - EMFILE = syscall.Errno(0x18) - EMLINK = syscall.Errno(0x1f) - EMSGSIZE = syscall.Errno(0x28) - EMULTIHOP = syscall.Errno(0x5e) - ENAMETOOLONG = syscall.Errno(0x3f) - ENEEDAUTH = syscall.Errno(0x51) - ENETDOWN = syscall.Errno(0x32) - ENETRESET = syscall.Errno(0x34) - ENETUNREACH = syscall.Errno(0x33) - ENFILE = syscall.Errno(0x17) - ENOATTR = syscall.Errno(0x5d) - ENOBUFS = syscall.Errno(0x37) - ENODATA = syscall.Errno(0x59) - ENODEV = syscall.Errno(0x13) - ENOENT = syscall.Errno(0x2) - ENOEXEC = syscall.Errno(0x8) - ENOLCK = syscall.Errno(0x4d) - ENOLINK = syscall.Errno(0x5f) - ENOMEM = syscall.Errno(0xc) - ENOMSG = syscall.Errno(0x53) - ENOPROTOOPT = syscall.Errno(0x2a) - ENOSPC = syscall.Errno(0x1c) - ENOSR = syscall.Errno(0x5a) - ENOSTR = syscall.Errno(0x5b) - ENOSYS = syscall.Errno(0x4e) - ENOTBLK = syscall.Errno(0xf) - ENOTCONN = syscall.Errno(0x39) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x42) - ENOTSOCK = syscall.Errno(0x26) - ENOTSUP = syscall.Errno(0x56) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x2d) - EOVERFLOW = syscall.Errno(0x54) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x2e) - EPIPE = syscall.Errno(0x20) - EPROCLIM = syscall.Errno(0x43) - EPROCUNAVAIL = syscall.Errno(0x4c) - EPROGMISMATCH = syscall.Errno(0x4b) - EPROGUNAVAIL = syscall.Errno(0x4a) - EPROTO = syscall.Errno(0x60) - EPROTONOSUPPORT = syscall.Errno(0x2b) - EPROTOTYPE = syscall.Errno(0x29) - ERANGE = syscall.Errno(0x22) - EREMOTE = syscall.Errno(0x47) - EROFS = syscall.Errno(0x1e) - ERPCMISMATCH = syscall.Errno(0x49) - ESHUTDOWN = syscall.Errno(0x3a) - ESOCKTNOSUPPORT = syscall.Errno(0x2c) - ESPIPE = syscall.Errno(0x1d) - ESRCH = syscall.Errno(0x3) - ESTALE = syscall.Errno(0x46) - ETIME = syscall.Errno(0x5c) - ETIMEDOUT = syscall.Errno(0x3c) - ETOOMANYREFS = syscall.Errno(0x3b) - ETXTBSY = syscall.Errno(0x1a) - EUSERS = syscall.Errno(0x44) - EWOULDBLOCK = syscall.Errno(0x23) - EXDEV = syscall.Errno(0x12) -) - -// Signals -const ( - SIGABRT = syscall.Signal(0x6) - SIGALRM = syscall.Signal(0xe) - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x14) - SIGCONT = syscall.Signal(0x13) - SIGEMT = syscall.Signal(0x7) - SIGFPE = syscall.Signal(0x8) - SIGHUP = syscall.Signal(0x1) - SIGILL = syscall.Signal(0x4) - SIGINFO = syscall.Signal(0x1d) - SIGINT = syscall.Signal(0x2) - SIGIO = syscall.Signal(0x17) - SIGIOT = syscall.Signal(0x6) - SIGKILL = syscall.Signal(0x9) - SIGPIPE = syscall.Signal(0xd) - SIGPROF = syscall.Signal(0x1b) - SIGPWR = syscall.Signal(0x20) - SIGQUIT = syscall.Signal(0x3) - SIGSEGV = syscall.Signal(0xb) - SIGSTOP = syscall.Signal(0x11) - SIGSYS = syscall.Signal(0xc) - SIGTERM = syscall.Signal(0xf) - SIGTRAP = syscall.Signal(0x5) - SIGTSTP = syscall.Signal(0x12) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x10) - SIGUSR1 = syscall.Signal(0x1e) - SIGUSR2 = syscall.Signal(0x1f) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "device not configured"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EDEADLK", "resource deadlock avoided"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "cross-device link"}, - {19, "ENODEV", "operation not supported by device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "result too large or too small"}, - {35, "EAGAIN", "resource temporarily unavailable"}, - {36, "EINPROGRESS", "operation now in progress"}, - {37, "EALREADY", "operation already in progress"}, - {38, "ENOTSOCK", "socket operation on non-socket"}, - {39, "EDESTADDRREQ", "destination address required"}, - {40, "EMSGSIZE", "message too long"}, - {41, "EPROTOTYPE", "protocol wrong type for socket"}, - {42, "ENOPROTOOPT", "protocol option not available"}, - {43, "EPROTONOSUPPORT", "protocol not supported"}, - {44, "ESOCKTNOSUPPORT", "socket type not supported"}, - {45, "EOPNOTSUPP", "operation not supported"}, - {46, "EPFNOSUPPORT", "protocol family not supported"}, - {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, - {48, "EADDRINUSE", "address already in use"}, - {49, "EADDRNOTAVAIL", "can't assign requested address"}, - {50, "ENETDOWN", "network is down"}, - {51, "ENETUNREACH", "network is unreachable"}, - {52, "ENETRESET", "network dropped connection on reset"}, - {53, "ECONNABORTED", "software caused connection abort"}, - {54, "ECONNRESET", "connection reset by peer"}, - {55, "ENOBUFS", "no buffer space available"}, - {56, "EISCONN", "socket is already connected"}, - {57, "ENOTCONN", "socket is not connected"}, - {58, "ESHUTDOWN", "can't send after socket shutdown"}, - {59, "ETOOMANYREFS", "too many references: can't splice"}, - {60, "ETIMEDOUT", "connection timed out"}, - {61, "ECONNREFUSED", "connection refused"}, - {62, "ELOOP", "too many levels of symbolic links"}, - {63, "ENAMETOOLONG", "file name too long"}, - {64, "EHOSTDOWN", "host is down"}, - {65, "EHOSTUNREACH", "no route to host"}, - {66, "ENOTEMPTY", "directory not empty"}, - {67, "EPROCLIM", "too many processes"}, - {68, "EUSERS", "too many users"}, - {69, "EDQUOT", "disc quota exceeded"}, - {70, "ESTALE", "stale NFS file handle"}, - {71, "EREMOTE", "too many levels of remote in path"}, - {72, "EBADRPC", "RPC struct is bad"}, - {73, "ERPCMISMATCH", "RPC version wrong"}, - {74, "EPROGUNAVAIL", "RPC prog. not avail"}, - {75, "EPROGMISMATCH", "program version wrong"}, - {76, "EPROCUNAVAIL", "bad procedure for program"}, - {77, "ENOLCK", "no locks available"}, - {78, "ENOSYS", "function not implemented"}, - {79, "EFTYPE", "inappropriate file type or format"}, - {80, "EAUTH", "authentication error"}, - {81, "ENEEDAUTH", "need authenticator"}, - {82, "EIDRM", "identifier removed"}, - {83, "ENOMSG", "no message of desired type"}, - {84, "EOVERFLOW", "value too large to be stored in data type"}, - {85, "EILSEQ", "illegal byte sequence"}, - {86, "ENOTSUP", "not supported"}, - {87, "ECANCELED", "operation Canceled"}, - {88, "EBADMSG", "bad or Corrupt message"}, - {89, "ENODATA", "no message available"}, - {90, "ENOSR", "no STREAM resources"}, - {91, "ENOSTR", "not a STREAM"}, - {92, "ETIME", "STREAM ioctl timeout"}, - {93, "ENOATTR", "attribute not found"}, - {94, "EMULTIHOP", "multihop attempted"}, - {95, "ENOLINK", "link has been severed"}, - {96, "ELAST", "protocol error"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, - {6, "SIGIOT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGURG", "urgent I/O condition"}, - {17, "SIGSTOP", "stopped (signal)"}, - {18, "SIGTSTP", "stopped"}, - {19, "SIGCONT", "continued"}, - {20, "SIGCHLD", "child exited"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGIO", "I/O possible"}, - {24, "SIGXCPU", "cputime limit exceeded"}, - {25, "SIGXFSZ", "filesize limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window size changes"}, - {29, "SIGINFO", "information request"}, - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, - {32, "SIGPWR", "power fail/restart"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go deleted file mode 100644 index 6d56edc..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go +++ /dev/null @@ -1,1668 +0,0 @@ -// mkerrors.sh -m32 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build 386 && openbsd -// +build 386,openbsd - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -m32 _const.go - -package unix - -import "syscall" - -const ( - AF_APPLETALK = 0x10 - AF_BLUETOOTH = 0x20 - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1a - AF_ECMA = 0x8 - AF_ENCAP = 0x1c - AF_HYLINK = 0xf - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x18 - AF_IPX = 0x17 - AF_ISDN = 0x1a - AF_ISO = 0x7 - AF_KEY = 0x1e - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x24 - AF_MPLS = 0x21 - AF_NATM = 0x1b - AF_NS = 0x6 - AF_OSI = 0x7 - AF_PUP = 0x4 - AF_ROUTE = 0x11 - AF_SIP = 0x1d - AF_SNA = 0xb - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - ARPHRD_ETHER = 0x1 - ARPHRD_FRELAY = 0xf - ARPHRD_IEEE1394 = 0x18 - ARPHRD_IEEE802 = 0x6 - B0 = 0x0 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B230400 = 0x38400 - B2400 = 0x960 - B28800 = 0x7080 - B300 = 0x12c - B38400 = 0x9600 - B4800 = 0x12c0 - B50 = 0x32 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B9600 = 0x2580 - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDIRFILT = 0x4004427c - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc008427b - BIOCGETIF = 0x4020426b - BIOCGFILDROP = 0x40044278 - BIOCGHDRCMPLT = 0x40044274 - BIOCGRSIG = 0x40044273 - BIOCGRTIMEOUT = 0x400c426e - BIOCGSTATS = 0x4008426f - BIOCIMMEDIATE = 0x80044270 - BIOCLOCK = 0x20004276 - BIOCPROMISC = 0x20004269 - BIOCSBLEN = 0xc0044266 - BIOCSDIRFILT = 0x8004427d - BIOCSDLT = 0x8004427a - BIOCSETF = 0x80084267 - BIOCSETIF = 0x8020426c - BIOCSETWF = 0x80084277 - BIOCSFILDROP = 0x80044279 - BIOCSHDRCMPLT = 0x80044275 - BIOCSRSIG = 0x80044272 - BIOCSRTIMEOUT = 0x800c426d - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x4 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_DIRECTION_IN = 0x1 - BPF_DIRECTION_OUT = 0x2 - BPF_DIV = 0x30 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x200000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_W = 0x0 - BPF_X = 0x8 - BRKINT = 0x2 - CFLUSH = 0xf - CLOCAL = 0x8000 - CPUSTATES = 0x6 - CP_IDLE = 0x5 - CP_INTR = 0x4 - CP_NICE = 0x1 - CP_SPIN = 0x3 - CP_SYS = 0x2 - CP_USER = 0x0 - CREAD = 0x800 - CRTSCTS = 0x10000 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0xff - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTL_HW = 0x6 - CTL_KERN = 0x1 - CTL_MAXNAME = 0xc - CTL_NET = 0x4 - DIOCOSFPFLUSH = 0x2000444e - DLT_ARCNET = 0x7 - DLT_ATM_RFC1483 = 0xb - DLT_AX25 = 0x3 - DLT_CHAOS = 0x5 - DLT_C_HDLC = 0x68 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0xd - DLT_FDDI = 0xa - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_LOOP = 0xc - DLT_MPLS = 0xdb - DLT_NULL = 0x0 - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x12 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0x10 - DLT_PPP_ETHER = 0x33 - DLT_PPP_SERIAL = 0x32 - DLT_PRONET = 0x4 - DLT_RAW = 0xe - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xf - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EMT_TAGOVF = 0x1 - EMUL_ENABLED = 0x1 - EMUL_NATIVE = 0x2 - ENDRUNDISC = 0x9 - ETHERMIN = 0x2e - ETHERMTU = 0x5dc - ETHERTYPE_8023 = 0x4 - ETHERTYPE_AARP = 0x80f3 - ETHERTYPE_ACCTON = 0x8390 - ETHERTYPE_AEONIC = 0x8036 - ETHERTYPE_ALPHA = 0x814a - ETHERTYPE_AMBER = 0x6008 - ETHERTYPE_AMOEBA = 0x8145 - ETHERTYPE_AOE = 0x88a2 - ETHERTYPE_APOLLO = 0x80f7 - ETHERTYPE_APOLLODOMAIN = 0x8019 - ETHERTYPE_APPLETALK = 0x809b - ETHERTYPE_APPLITEK = 0x80c7 - ETHERTYPE_ARGONAUT = 0x803a - ETHERTYPE_ARP = 0x806 - ETHERTYPE_AT = 0x809b - ETHERTYPE_ATALK = 0x809b - ETHERTYPE_ATOMIC = 0x86df - ETHERTYPE_ATT = 0x8069 - ETHERTYPE_ATTSTANFORD = 0x8008 - ETHERTYPE_AUTOPHON = 0x806a - ETHERTYPE_AXIS = 0x8856 - ETHERTYPE_BCLOOP = 0x9003 - ETHERTYPE_BOFL = 0x8102 - ETHERTYPE_CABLETRON = 0x7034 - ETHERTYPE_CHAOS = 0x804 - ETHERTYPE_COMDESIGN = 0x806c - ETHERTYPE_COMPUGRAPHIC = 0x806d - ETHERTYPE_COUNTERPOINT = 0x8062 - ETHERTYPE_CRONUS = 0x8004 - ETHERTYPE_CRONUSVLN = 0x8003 - ETHERTYPE_DCA = 0x1234 - ETHERTYPE_DDE = 0x807b - ETHERTYPE_DEBNI = 0xaaaa - ETHERTYPE_DECAM = 0x8048 - ETHERTYPE_DECCUST = 0x6006 - ETHERTYPE_DECDIAG = 0x6005 - ETHERTYPE_DECDNS = 0x803c - ETHERTYPE_DECDTS = 0x803e - ETHERTYPE_DECEXPER = 0x6000 - ETHERTYPE_DECLAST = 0x8041 - ETHERTYPE_DECLTM = 0x803f - ETHERTYPE_DECMUMPS = 0x6009 - ETHERTYPE_DECNETBIOS = 0x8040 - ETHERTYPE_DELTACON = 0x86de - ETHERTYPE_DIDDLE = 0x4321 - ETHERTYPE_DLOG1 = 0x660 - ETHERTYPE_DLOG2 = 0x661 - ETHERTYPE_DN = 0x6003 - ETHERTYPE_DOGFIGHT = 0x1989 - ETHERTYPE_DSMD = 0x8039 - ETHERTYPE_ECMA = 0x803 - ETHERTYPE_ENCRYPT = 0x803d - ETHERTYPE_ES = 0x805d - ETHERTYPE_EXCELAN = 0x8010 - ETHERTYPE_EXPERDATA = 0x8049 - ETHERTYPE_FLIP = 0x8146 - ETHERTYPE_FLOWCONTROL = 0x8808 - ETHERTYPE_FRARP = 0x808 - ETHERTYPE_GENDYN = 0x8068 - ETHERTYPE_HAYES = 0x8130 - ETHERTYPE_HIPPI_FP = 0x8180 - ETHERTYPE_HITACHI = 0x8820 - ETHERTYPE_HP = 0x8005 - ETHERTYPE_IEEEPUP = 0xa00 - ETHERTYPE_IEEEPUPAT = 0xa01 - ETHERTYPE_IMLBL = 0x4c42 - ETHERTYPE_IMLBLDIAG = 0x424c - ETHERTYPE_IP = 0x800 - ETHERTYPE_IPAS = 0x876c - ETHERTYPE_IPV6 = 0x86dd - ETHERTYPE_IPX = 0x8137 - ETHERTYPE_IPXNEW = 0x8037 - ETHERTYPE_KALPANA = 0x8582 - ETHERTYPE_LANBRIDGE = 0x8038 - ETHERTYPE_LANPROBE = 0x8888 - ETHERTYPE_LAT = 0x6004 - ETHERTYPE_LBACK = 0x9000 - ETHERTYPE_LITTLE = 0x8060 - ETHERTYPE_LLDP = 0x88cc - ETHERTYPE_LOGICRAFT = 0x8148 - ETHERTYPE_LOOPBACK = 0x9000 - ETHERTYPE_MATRA = 0x807a - ETHERTYPE_MAX = 0xffff - ETHERTYPE_MERIT = 0x807c - ETHERTYPE_MICP = 0x873a - ETHERTYPE_MOPDL = 0x6001 - ETHERTYPE_MOPRC = 0x6002 - ETHERTYPE_MOTOROLA = 0x818d - ETHERTYPE_MPLS = 0x8847 - ETHERTYPE_MPLS_MCAST = 0x8848 - ETHERTYPE_MUMPS = 0x813f - ETHERTYPE_NBPCC = 0x3c04 - ETHERTYPE_NBPCLAIM = 0x3c09 - ETHERTYPE_NBPCLREQ = 0x3c05 - ETHERTYPE_NBPCLRSP = 0x3c06 - ETHERTYPE_NBPCREQ = 0x3c02 - ETHERTYPE_NBPCRSP = 0x3c03 - ETHERTYPE_NBPDG = 0x3c07 - ETHERTYPE_NBPDGB = 0x3c08 - ETHERTYPE_NBPDLTE = 0x3c0a - ETHERTYPE_NBPRAR = 0x3c0c - ETHERTYPE_NBPRAS = 0x3c0b - ETHERTYPE_NBPRST = 0x3c0d - ETHERTYPE_NBPSCD = 0x3c01 - ETHERTYPE_NBPVCD = 0x3c00 - ETHERTYPE_NBS = 0x802 - ETHERTYPE_NCD = 0x8149 - ETHERTYPE_NESTAR = 0x8006 - ETHERTYPE_NETBEUI = 0x8191 - ETHERTYPE_NOVELL = 0x8138 - ETHERTYPE_NS = 0x600 - ETHERTYPE_NSAT = 0x601 - ETHERTYPE_NSCOMPAT = 0x807 - ETHERTYPE_NTRAILER = 0x10 - ETHERTYPE_OS9 = 0x7007 - ETHERTYPE_OS9NET = 0x7009 - ETHERTYPE_PACER = 0x80c6 - ETHERTYPE_PAE = 0x888e - ETHERTYPE_PCS = 0x4242 - ETHERTYPE_PLANNING = 0x8044 - ETHERTYPE_PPP = 0x880b - ETHERTYPE_PPPOE = 0x8864 - ETHERTYPE_PPPOEDISC = 0x8863 - ETHERTYPE_PRIMENTS = 0x7031 - ETHERTYPE_PUP = 0x200 - ETHERTYPE_PUPAT = 0x200 - ETHERTYPE_QINQ = 0x88a8 - ETHERTYPE_RACAL = 0x7030 - ETHERTYPE_RATIONAL = 0x8150 - ETHERTYPE_RAWFR = 0x6559 - ETHERTYPE_RCL = 0x1995 - ETHERTYPE_RDP = 0x8739 - ETHERTYPE_RETIX = 0x80f2 - ETHERTYPE_REVARP = 0x8035 - ETHERTYPE_SCA = 0x6007 - ETHERTYPE_SECTRA = 0x86db - ETHERTYPE_SECUREDATA = 0x876d - ETHERTYPE_SGITW = 0x817e - ETHERTYPE_SG_BOUNCE = 0x8016 - ETHERTYPE_SG_DIAG = 0x8013 - ETHERTYPE_SG_NETGAMES = 0x8014 - ETHERTYPE_SG_RESV = 0x8015 - ETHERTYPE_SIMNET = 0x5208 - ETHERTYPE_SLOW = 0x8809 - ETHERTYPE_SNA = 0x80d5 - ETHERTYPE_SNMP = 0x814c - ETHERTYPE_SONIX = 0xfaf5 - ETHERTYPE_SPIDER = 0x809f - ETHERTYPE_SPRITE = 0x500 - ETHERTYPE_STP = 0x8181 - ETHERTYPE_TALARIS = 0x812b - ETHERTYPE_TALARISMC = 0x852b - ETHERTYPE_TCPCOMP = 0x876b - ETHERTYPE_TCPSM = 0x9002 - ETHERTYPE_TEC = 0x814f - ETHERTYPE_TIGAN = 0x802f - ETHERTYPE_TRAIL = 0x1000 - ETHERTYPE_TRANSETHER = 0x6558 - ETHERTYPE_TYMSHARE = 0x802e - ETHERTYPE_UBBST = 0x7005 - ETHERTYPE_UBDEBUG = 0x900 - ETHERTYPE_UBDIAGLOOP = 0x7002 - ETHERTYPE_UBDL = 0x7000 - ETHERTYPE_UBNIU = 0x7001 - ETHERTYPE_UBNMC = 0x7003 - ETHERTYPE_VALID = 0x1600 - ETHERTYPE_VARIAN = 0x80dd - ETHERTYPE_VAXELN = 0x803b - ETHERTYPE_VEECO = 0x8067 - ETHERTYPE_VEXP = 0x805b - ETHERTYPE_VGLAB = 0x8131 - ETHERTYPE_VINES = 0xbad - ETHERTYPE_VINESECHO = 0xbaf - ETHERTYPE_VINESLOOP = 0xbae - ETHERTYPE_VITAL = 0xff00 - ETHERTYPE_VLAN = 0x8100 - ETHERTYPE_VLTLMAN = 0x8080 - ETHERTYPE_VPROD = 0x805c - ETHERTYPE_VURESERVED = 0x8147 - ETHERTYPE_WATERLOO = 0x8130 - ETHERTYPE_WELLFLEET = 0x8103 - ETHERTYPE_X25 = 0x805 - ETHERTYPE_X75 = 0x801 - ETHERTYPE_XNSSM = 0x9001 - ETHERTYPE_XTP = 0x817d - ETHER_ADDR_LEN = 0x6 - ETHER_ALIGN = 0x2 - ETHER_CRC_LEN = 0x4 - ETHER_CRC_POLY_BE = 0x4c11db6 - ETHER_CRC_POLY_LE = 0xedb88320 - ETHER_HDR_LEN = 0xe - ETHER_MAX_DIX_LEN = 0x600 - ETHER_MAX_LEN = 0x5ee - ETHER_MIN_LEN = 0x40 - ETHER_TYPE_LEN = 0x2 - ETHER_VLAN_ENCAP_LEN = 0x4 - EVFILT_AIO = -0x3 - EVFILT_PROC = -0x5 - EVFILT_READ = -0x1 - EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0x7 - EVFILT_TIMER = -0x7 - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG1 = 0x2000 - EV_ONESHOT = 0x10 - EV_SYSFLAGS = 0xf000 - EXTA = 0x4b00 - EXTB = 0x9600 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x400 - FLUSHO = 0x800000 - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0xa - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0x7 - F_GETOWN = 0x5 - F_OK = 0x0 - F_RDLCK = 0x1 - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0x8 - F_SETLKW = 0x9 - F_SETOWN = 0x6 - F_UNLCK = 0x2 - F_WRLCK = 0x3 - HUPCL = 0x4000 - HW_MACHINE = 0x1 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFAN_ARRIVAL = 0x0 - IFAN_DEPARTURE = 0x1 - IFA_ROUTE = 0x1 - IFF_ALLMULTI = 0x200 - IFF_BROADCAST = 0x2 - IFF_CANTCHANGE = 0x8e52 - IFF_DEBUG = 0x4 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_NOTRAILERS = 0x20 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PROMISC = 0x100 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_1822 = 0x2 - IFT_A12MPPSWITCH = 0x82 - IFT_AAL2 = 0xbb - IFT_AAL5 = 0x31 - IFT_ADSL = 0x5e - IFT_AFLANE8023 = 0x3b - IFT_AFLANE8025 = 0x3c - IFT_ARAP = 0x58 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ASYNC = 0x54 - IFT_ATM = 0x25 - IFT_ATMDXI = 0x69 - IFT_ATMFUNI = 0x6a - IFT_ATMIMA = 0x6b - IFT_ATMLOGICAL = 0x50 - IFT_ATMRADIO = 0xbd - IFT_ATMSUBINTERFACE = 0x86 - IFT_ATMVCIENDPT = 0xc2 - IFT_ATMVIRTUAL = 0x95 - IFT_BGPPOLICYACCOUNTING = 0xa2 - IFT_BLUETOOTH = 0xf8 - IFT_BRIDGE = 0xd1 - IFT_BSC = 0x53 - IFT_CARP = 0xf7 - IFT_CCTEMUL = 0x3d - IFT_CEPT = 0x13 - IFT_CES = 0x85 - IFT_CHANNEL = 0x46 - IFT_CNR = 0x55 - IFT_COFFEE = 0x84 - IFT_COMPOSITELINK = 0x9b - IFT_DCN = 0x8d - IFT_DIGITALPOWERLINE = 0x8a - IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba - IFT_DLSW = 0x4a - IFT_DOCSCABLEDOWNSTREAM = 0x80 - IFT_DOCSCABLEMACLAYER = 0x7f - IFT_DOCSCABLEUPSTREAM = 0x81 - IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd - IFT_DS0 = 0x51 - IFT_DS0BUNDLE = 0x52 - IFT_DS1FDL = 0xaa - IFT_DS3 = 0x1e - IFT_DTM = 0x8c - IFT_DUMMY = 0xf1 - IFT_DVBASILN = 0xac - IFT_DVBASIOUT = 0xad - IFT_DVBRCCDOWNSTREAM = 0x93 - IFT_DVBRCCMACLAYER = 0x92 - IFT_DVBRCCUPSTREAM = 0x94 - IFT_ECONET = 0xce - IFT_ENC = 0xf4 - IFT_EON = 0x19 - IFT_EPLRS = 0x57 - IFT_ESCON = 0x49 - IFT_ETHER = 0x6 - IFT_FAITH = 0xf3 - IFT_FAST = 0x7d - IFT_FASTETHER = 0x3e - IFT_FASTETHERFX = 0x45 - IFT_FDDI = 0xf - IFT_FIBRECHANNEL = 0x38 - IFT_FRAMERELAYINTERCONNECT = 0x3a - IFT_FRAMERELAYMPI = 0x5c - IFT_FRDLCIENDPT = 0xc1 - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_FRF16MFRBUNDLE = 0xa3 - IFT_FRFORWARD = 0x9e - IFT_G703AT2MB = 0x43 - IFT_G703AT64K = 0x42 - IFT_GIF = 0xf0 - IFT_GIGABITETHERNET = 0x75 - IFT_GR303IDT = 0xb2 - IFT_GR303RDT = 0xb1 - IFT_H323GATEKEEPER = 0xa4 - IFT_H323PROXY = 0xa5 - IFT_HDH1822 = 0x3 - IFT_HDLC = 0x76 - IFT_HDSL2 = 0xa8 - IFT_HIPERLAN2 = 0xb7 - IFT_HIPPI = 0x2f - IFT_HIPPIINTERFACE = 0x39 - IFT_HOSTPAD = 0x5a - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IBM370PARCHAN = 0x48 - IFT_IDSL = 0x9a - IFT_IEEE1394 = 0x90 - IFT_IEEE80211 = 0x47 - IFT_IEEE80212 = 0x37 - IFT_IEEE8023ADLAG = 0xa1 - IFT_IFGSN = 0x91 - IFT_IMT = 0xbe - IFT_INFINIBAND = 0xc7 - IFT_INTERLEAVE = 0x7c - IFT_IP = 0x7e - IFT_IPFORWARD = 0x8e - IFT_IPOVERATM = 0x72 - IFT_IPOVERCDLC = 0x6d - IFT_IPOVERCLAW = 0x6e - IFT_IPSWITCH = 0x4e - IFT_ISDN = 0x3f - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISDNS = 0x4b - IFT_ISDNU = 0x4c - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88025CRFPINT = 0x62 - IFT_ISO88025DTR = 0x56 - IFT_ISO88025FIBER = 0x73 - IFT_ISO88026 = 0xa - IFT_ISUP = 0xb3 - IFT_L2VLAN = 0x87 - IFT_L3IPVLAN = 0x88 - IFT_L3IPXVLAN = 0x89 - IFT_LAPB = 0x10 - IFT_LAPD = 0x4d - IFT_LAPF = 0x77 - IFT_LINEGROUP = 0xd2 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MEDIAMAILOVERIP = 0x8b - IFT_MFSIGLINK = 0xa7 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_MPC = 0x71 - IFT_MPLS = 0xa6 - IFT_MPLSTUNNEL = 0x96 - IFT_MSDSL = 0x8f - IFT_MVL = 0xbf - IFT_MYRINET = 0x63 - IFT_NFAS = 0xaf - IFT_NSIP = 0x1b - IFT_OPTICALCHANNEL = 0xc3 - IFT_OPTICALTRANSPORT = 0xc4 - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PFLOG = 0xf5 - IFT_PFLOW = 0xf9 - IFT_PFSYNC = 0xf6 - IFT_PLC = 0xae - IFT_PON155 = 0xcf - IFT_PON622 = 0xd0 - IFT_POS = 0xab - IFT_PPP = 0x17 - IFT_PPPMULTILINKBUNDLE = 0x6c - IFT_PROPATM = 0xc5 - IFT_PROPBWAP2MP = 0xb8 - IFT_PROPCNLS = 0x59 - IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 - IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 - IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 - IFT_PROPMUX = 0x36 - IFT_PROPVIRTUAL = 0x35 - IFT_PROPWIRELESSP2P = 0x9d - IFT_PTPSERIAL = 0x16 - IFT_PVC = 0xf2 - IFT_Q2931 = 0xc9 - IFT_QLLC = 0x44 - IFT_RADIOMAC = 0xbc - IFT_RADSL = 0x5f - IFT_REACHDSL = 0xc0 - IFT_RFC1483 = 0x9f - IFT_RS232 = 0x21 - IFT_RSRB = 0x4f - IFT_SDLC = 0x11 - IFT_SDSL = 0x60 - IFT_SHDSL = 0xa9 - IFT_SIP = 0x1f - IFT_SIPSIG = 0xcc - IFT_SIPTG = 0xcb - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SONET = 0x27 - IFT_SONETOVERHEADCHANNEL = 0xb9 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_SRP = 0x97 - IFT_SS7SIGLINK = 0x9c - IFT_STACKTOSTACK = 0x6f - IFT_STARLAN = 0xb - IFT_T1 = 0x12 - IFT_TDLC = 0x74 - IFT_TELINK = 0xc8 - IFT_TERMPAD = 0x5b - IFT_TR008 = 0xb0 - IFT_TRANSPHDLC = 0x7b - IFT_TUNNEL = 0x83 - IFT_ULTRA = 0x1d - IFT_USB = 0xa0 - IFT_V11 = 0x40 - IFT_V35 = 0x2d - IFT_V36 = 0x41 - IFT_V37 = 0x78 - IFT_VDSL = 0x61 - IFT_VIRTUALIPADDRESS = 0x70 - IFT_VIRTUALTG = 0xca - IFT_VOICEDID = 0xd5 - IFT_VOICEEM = 0x64 - IFT_VOICEEMFGD = 0xd3 - IFT_VOICEENCAP = 0x67 - IFT_VOICEFGDEANA = 0xd4 - IFT_VOICEFXO = 0x65 - IFT_VOICEFXS = 0x66 - IFT_VOICEOVERATM = 0x98 - IFT_VOICEOVERCABLE = 0xc6 - IFT_VOICEOVERFRAMERELAY = 0x99 - IFT_VOICEOVERIP = 0x68 - IFT_X213 = 0x5d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25HUNTGROUP = 0x7a - IFT_X25MLP = 0x79 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LOOPBACKNET = 0x7f - IN_RFC3021_HOST = 0x1 - IN_RFC3021_NET = 0xfffffffe - IN_RFC3021_NSHIFT = 0x1f - IPPROTO_AH = 0x33 - IPPROTO_CARP = 0x70 - IPPROTO_DIVERT = 0x102 - IPPROTO_DIVERT_INIT = 0x2 - IPPROTO_DIVERT_RESP = 0x1 - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GRE = 0x2f - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IGMP = 0x2 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPIP = 0x4 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_MAX = 0x100 - IPPROTO_MAXID = 0x103 - IPPROTO_MOBILE = 0x37 - IPPROTO_MPLS = 0x89 - IPPROTO_NONE = 0x3b - IPPROTO_PFSYNC = 0xf0 - IPPROTO_PIM = 0x67 - IPPROTO_PUP = 0xc - IPPROTO_RAW = 0xff - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_TCP = 0x6 - IPPROTO_TP = 0x1d - IPPROTO_UDP = 0x11 - IPV6_AUTH_LEVEL = 0x35 - IPV6_AUTOFLOWLABEL = 0x3b - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_DONTFRAG = 0x3e - IPV6_DSTOPTS = 0x32 - IPV6_ESP_NETWORK_LEVEL = 0x37 - IPV6_ESP_TRANS_LEVEL = 0x36 - IPV6_FAITH = 0x1d - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FRAGTTL = 0x78 - IPV6_HLIMDEC = 0x1 - IPV6_HOPLIMIT = 0x2f - IPV6_HOPOPTS = 0x31 - IPV6_IPCOMP_LEVEL = 0x3c - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXPACKET = 0xffff - IPV6_MMTU = 0x500 - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_OPTIONS = 0x1 - IPV6_PATHMTU = 0x2c - IPV6_PIPEX = 0x3f - IPV6_PKTINFO = 0x2e - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_RECVDSTOPTS = 0x28 - IPV6_RECVDSTPORT = 0x40 - IPV6_RECVHOPLIMIT = 0x25 - IPV6_RECVHOPOPTS = 0x27 - IPV6_RECVPATHMTU = 0x2b - IPV6_RECVPKTINFO = 0x24 - IPV6_RECVRTHDR = 0x26 - IPV6_RECVTCLASS = 0x39 - IPV6_RTABLE = 0x1021 - IPV6_RTHDR = 0x33 - IPV6_RTHDRDSTOPTS = 0x23 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x3d - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2a - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IP_ADD_MEMBERSHIP = 0xc - IP_AUTH_LEVEL = 0x14 - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DIVERTFL = 0x1022 - IP_DROP_MEMBERSHIP = 0xd - IP_ESP_NETWORK_LEVEL = 0x16 - IP_ESP_TRANS_LEVEL = 0x15 - IP_HDRINCL = 0x2 - IP_IPCOMP_LEVEL = 0x1d - IP_IPSECFLOWINFO = 0x24 - IP_IPSEC_LOCAL_AUTH = 0x1b - IP_IPSEC_LOCAL_CRED = 0x19 - IP_IPSEC_LOCAL_ID = 0x17 - IP_IPSEC_REMOTE_AUTH = 0x1c - IP_IPSEC_REMOTE_CRED = 0x1a - IP_IPSEC_REMOTE_ID = 0x18 - IP_MAXPACKET = 0xffff - IP_MAX_MEMBERSHIPS = 0xfff - IP_MF = 0x2000 - IP_MINTTL = 0x20 - IP_MIN_MEMBERSHIPS = 0xf - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_OFFMASK = 0x1fff - IP_OPTIONS = 0x1 - IP_PIPEX = 0x22 - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVDSTPORT = 0x21 - IP_RECVIF = 0x1e - IP_RECVOPTS = 0x5 - IP_RECVRETOPTS = 0x6 - IP_RECVRTABLE = 0x23 - IP_RECVTTL = 0x1f - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_RTABLE = 0x1021 - IP_TOS = 0x3 - IP_TTL = 0x4 - ISIG = 0x80 - ISTRIP = 0x20 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - KERN_HOSTNAME = 0xa - KERN_OSRELEASE = 0x2 - KERN_OSTYPE = 0x1 - KERN_VERSION = 0x4 - LCNT_OVERLOAD_FLUSH = 0x6 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x6 - MADV_NORMAL = 0x0 - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_SPACEAVAIL = 0x5 - MADV_WILLNEED = 0x3 - MAP_ANON = 0x1000 - MAP_ANONYMOUS = 0x1000 - MAP_CONCEAL = 0x8000 - MAP_COPY = 0x2 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_FLAGMASK = 0xfff7 - MAP_HASSEMAPHORE = 0x0 - MAP_INHERIT = 0x0 - MAP_INHERIT_COPY = 0x1 - MAP_INHERIT_NONE = 0x2 - MAP_INHERIT_SHARE = 0x0 - MAP_NOEXTEND = 0x100 - MAP_NORESERVE = 0x40 - MAP_PRIVATE = 0x2 - MAP_RENAME = 0x20 - MAP_SHARED = 0x1 - MAP_STACK = 0x4000 - MAP_TRYFIXED = 0x0 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MNT_ASYNC = 0x40 - MNT_DEFEXPORTED = 0x200 - MNT_DELEXPORT = 0x20000 - MNT_DOOMED = 0x8000000 - MNT_EXPORTANON = 0x400 - MNT_EXPORTED = 0x100 - MNT_EXRDONLY = 0x80 - MNT_FORCE = 0x80000 - MNT_LAZY = 0x3 - MNT_LOCAL = 0x1000 - MNT_NOATIME = 0x8000 - MNT_NODEV = 0x10 - MNT_NOEXEC = 0x4 - MNT_NOSUID = 0x8 - MNT_NOWAIT = 0x2 - MNT_QUOTA = 0x2000 - MNT_RDONLY = 0x1 - MNT_RELOAD = 0x40000 - MNT_ROOTFS = 0x4000 - MNT_SOFTDEP = 0x4000000 - MNT_SYNCHRONOUS = 0x2 - MNT_UPDATE = 0x10000 - MNT_VISFLAGMASK = 0x400ffff - MNT_WAIT = 0x1 - MNT_WANTRDWR = 0x2000000 - MNT_WXALLOWED = 0x800 - MSG_BCAST = 0x100 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOR = 0x8 - MSG_MCAST = 0x200 - MSG_NOSIGNAL = 0x400 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x4 - MS_SYNC = 0x2 - NAME_MAX = 0xff - NET_RT_DUMP = 0x1 - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x3 - NET_RT_MAXID = 0x6 - NET_RT_STATS = 0x4 - NET_RT_TABLE = 0x5 - NFDBITS = 0x20 - NOFLSH = 0x80000000 - NOTE_ATTRIB = 0x8 - NOTE_CHILD = 0x4 - NOTE_DELETE = 0x1 - NOTE_EOF = 0x2 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXTEND = 0x4 - NOTE_FORK = 0x40000000 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_PCTRLMASK = 0xf0000000 - NOTE_PDATAMASK = 0xfffff - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_TRUNCATE = 0x80 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - ONLCR = 0x2 - ONLRET = 0x80 - ONOCR = 0x40 - ONOEOT = 0x8 - OPOST = 0x1 - O_ACCMODE = 0x3 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x10000 - O_CREAT = 0x200 - O_DIRECTORY = 0x20000 - O_DSYNC = 0x80 - O_EXCL = 0x800 - O_EXLOCK = 0x20 - O_FSYNC = 0x80 - O_NDELAY = 0x4 - O_NOCTTY = 0x8000 - O_NOFOLLOW = 0x100 - O_NONBLOCK = 0x4 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_RSYNC = 0x80 - O_SHLOCK = 0x10 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PF_FLUSH = 0x1 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - PT_MASK = 0x3ff000 - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_MEMLOCK = 0x6 - RLIMIT_NOFILE = 0x8 - RLIMIT_NPROC = 0x7 - RLIMIT_RSS = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_LABEL = 0xa - RTAX_MAX = 0xb - RTAX_NETMASK = 0x2 - RTAX_SRC = 0x8 - RTAX_SRCMASK = 0x9 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_LABEL = 0x400 - RTA_NETMASK = 0x4 - RTA_SRC = 0x100 - RTA_SRCMASK = 0x200 - RTF_ANNOUNCE = 0x4000 - RTF_BLACKHOLE = 0x1000 - RTF_CLONED = 0x10000 - RTF_CLONING = 0x100 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_FMASK = 0x10f808 - RTF_GATEWAY = 0x2 - RTF_HOST = 0x4 - RTF_LLINFO = 0x400 - RTF_MASK = 0x80 - RTF_MODIFIED = 0x20 - RTF_MPATH = 0x40000 - RTF_MPLS = 0x100000 - RTF_PERMANENT_ARP = 0x2000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_PROTO3 = 0x2000 - RTF_REJECT = 0x8 - RTF_SOURCE = 0x20000 - RTF_STATIC = 0x800 - RTF_TUNNEL = 0x100000 - RTF_UP = 0x1 - RTF_USETRAILERS = 0x8000 - RTF_XRESOLVE = 0x200 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_DESYNC = 0x10 - RTM_GET = 0x4 - RTM_IFANNOUNCE = 0xf - RTM_IFINFO = 0xe - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MAXSIZE = 0x800 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RT_TABLEID_MAX = 0xff - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - RUSAGE_THREAD = 0x1 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x4 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80206931 - SIOCAIFADDR = 0x8040691a - SIOCAIFGROUP = 0x80246987 - SIOCALIFADDR = 0x8218691c - SIOCATMARK = 0x40047307 - SIOCBRDGADD = 0x8054693c - SIOCBRDGADDS = 0x80546941 - SIOCBRDGARL = 0x806e694d - SIOCBRDGDADDR = 0x81286947 - SIOCBRDGDEL = 0x8054693d - SIOCBRDGDELS = 0x80546942 - SIOCBRDGFLUSH = 0x80546948 - SIOCBRDGFRL = 0x806e694e - SIOCBRDGGCACHE = 0xc0146941 - SIOCBRDGGFD = 0xc0146952 - SIOCBRDGGHT = 0xc0146951 - SIOCBRDGGIFFLGS = 0xc054693e - SIOCBRDGGMA = 0xc0146953 - SIOCBRDGGPARAM = 0xc03c6958 - SIOCBRDGGPRI = 0xc0146950 - SIOCBRDGGRL = 0xc028694f - SIOCBRDGGSIFS = 0xc054693c - SIOCBRDGGTO = 0xc0146946 - SIOCBRDGIFS = 0xc0546942 - SIOCBRDGRTS = 0xc0186943 - SIOCBRDGSADDR = 0xc1286944 - SIOCBRDGSCACHE = 0x80146940 - SIOCBRDGSFD = 0x80146952 - SIOCBRDGSHT = 0x80146951 - SIOCBRDGSIFCOST = 0x80546955 - SIOCBRDGSIFFLGS = 0x8054693f - SIOCBRDGSIFPRIO = 0x80546954 - SIOCBRDGSMA = 0x80146953 - SIOCBRDGSPRI = 0x80146950 - SIOCBRDGSPROTO = 0x8014695a - SIOCBRDGSTO = 0x80146945 - SIOCBRDGSTXHC = 0x80146959 - SIOCDELMULTI = 0x80206932 - SIOCDIFADDR = 0x80206919 - SIOCDIFGROUP = 0x80246989 - SIOCDIFPHYADDR = 0x80206949 - SIOCDLIFADDR = 0x8218691e - SIOCGETKALIVE = 0xc01869a4 - SIOCGETLABEL = 0x8020699a - SIOCGETPFLOW = 0xc02069fe - SIOCGETPFSYNC = 0xc02069f8 - SIOCGETSGCNT = 0xc0147534 - SIOCGETVIFCNT = 0xc0147533 - SIOCGETVLAN = 0xc0206990 - SIOCGHIWAT = 0x40047301 - SIOCGIFADDR = 0xc0206921 - SIOCGIFASYNCMAP = 0xc020697c - SIOCGIFBRDADDR = 0xc0206923 - SIOCGIFCONF = 0xc0086924 - SIOCGIFDATA = 0xc020691b - SIOCGIFDESCR = 0xc0206981 - SIOCGIFDSTADDR = 0xc0206922 - SIOCGIFFLAGS = 0xc0206911 - SIOCGIFGATTR = 0xc024698b - SIOCGIFGENERIC = 0xc020693a - SIOCGIFGMEMB = 0xc024698a - SIOCGIFGROUP = 0xc0246988 - SIOCGIFHARDMTU = 0xc02069a5 - SIOCGIFMEDIA = 0xc0286936 - SIOCGIFMETRIC = 0xc0206917 - SIOCGIFMTU = 0xc020697e - SIOCGIFNETMASK = 0xc0206925 - SIOCGIFPDSTADDR = 0xc0206948 - SIOCGIFPRIORITY = 0xc020699c - SIOCGIFPSRCADDR = 0xc0206947 - SIOCGIFRDOMAIN = 0xc02069a0 - SIOCGIFRTLABEL = 0xc0206983 - SIOCGIFTIMESLOT = 0xc0206986 - SIOCGIFXFLAGS = 0xc020699e - SIOCGLIFADDR = 0xc218691d - SIOCGLIFPHYADDR = 0xc218694b - SIOCGLIFPHYRTABLE = 0xc02069a2 - SIOCGLIFPHYTTL = 0xc02069a9 - SIOCGLOWAT = 0x40047303 - SIOCGPGRP = 0x40047309 - SIOCGSPPPPARAMS = 0xc0206994 - SIOCGVH = 0xc02069f6 - SIOCGVNETID = 0xc02069a7 - SIOCIFCREATE = 0x8020697a - SIOCIFDESTROY = 0x80206979 - SIOCIFGCLONERS = 0xc00c6978 - SIOCSETKALIVE = 0x801869a3 - SIOCSETLABEL = 0x80206999 - SIOCSETPFLOW = 0x802069fd - SIOCSETPFSYNC = 0x802069f7 - SIOCSETVLAN = 0x8020698f - SIOCSHIWAT = 0x80047300 - SIOCSIFADDR = 0x8020690c - SIOCSIFASYNCMAP = 0x8020697d - SIOCSIFBRDADDR = 0x80206913 - SIOCSIFDESCR = 0x80206980 - SIOCSIFDSTADDR = 0x8020690e - SIOCSIFFLAGS = 0x80206910 - SIOCSIFGATTR = 0x8024698c - SIOCSIFGENERIC = 0x80206939 - SIOCSIFLLADDR = 0x8020691f - SIOCSIFMEDIA = 0xc0206935 - SIOCSIFMETRIC = 0x80206918 - SIOCSIFMTU = 0x8020697f - SIOCSIFNETMASK = 0x80206916 - SIOCSIFPHYADDR = 0x80406946 - SIOCSIFPRIORITY = 0x8020699b - SIOCSIFRDOMAIN = 0x8020699f - SIOCSIFRTLABEL = 0x80206982 - SIOCSIFTIMESLOT = 0x80206985 - SIOCSIFXFLAGS = 0x8020699d - SIOCSLIFPHYADDR = 0x8218694a - SIOCSLIFPHYRTABLE = 0x802069a1 - SIOCSLIFPHYTTL = 0x802069a8 - SIOCSLOWAT = 0x80047302 - SIOCSPGRP = 0x80047308 - SIOCSSPPPPARAMS = 0x80206993 - SIOCSVH = 0xc02069f5 - SIOCSVNETID = 0x802069a6 - SOCK_DGRAM = 0x2 - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_BINDANY = 0x1000 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LINGER = 0x80 - SO_NETPROC = 0x1020 - SO_OOBINLINE = 0x100 - SO_PEERCRED = 0x1022 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_RTABLE = 0x1021 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_SPLICE = 0x1023 - SO_TIMESTAMP = 0x800 - SO_TYPE = 0x1008 - SO_USELOOPBACK = 0x40 - S_BLKSIZE = 0x200 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFLNK = 0xa000 - S_IFMT = 0xf000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISTXT = 0x200 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXGRP = 0x8 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - TCIFLUSH = 0x1 - TCIOFLUSH = 0x3 - TCOFLUSH = 0x2 - TCP_MAXBURST = 0x4 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x3 - TCP_MAX_WINSHIFT = 0xe - TCP_MD5SIG = 0x4 - TCP_MSS = 0x200 - TCP_NODELAY = 0x1 - TCP_NOPUSH = 0x10 - TCP_NSTATES = 0xb - TCP_SACK_ENABLE = 0x8 - TCSAFLUSH = 0x2 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCONS = 0x80047462 - TIOCDRAIN = 0x2000745e - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLAG_CLOCAL = 0x2 - TIOCFLAG_CRTSCTS = 0x4 - TIOCFLAG_MDMBUF = 0x8 - TIOCFLAG_PPS = 0x10 - TIOCFLAG_SOFTCAR = 0x1 - TIOCFLUSH = 0x80047410 - TIOCGETA = 0x402c7413 - TIOCGETD = 0x4004741a - TIOCGFLAGS = 0x4004745d - TIOCGPGRP = 0x40047477 - TIOCGSID = 0x40047463 - TIOCGTSTAMP = 0x400c745b - TIOCGWINSZ = 0x40087468 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGET = 0x4004746a - TIOCMODG = 0x4004746a - TIOCMODS = 0x8004746d - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCREMOTE = 0x80047469 - TIOCSBRK = 0x2000747b - TIOCSCTTY = 0x20007461 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x802c7414 - TIOCSETAF = 0x802c7416 - TIOCSETAW = 0x802c7415 - TIOCSETD = 0x8004741b - TIOCSFLAGS = 0x8004745c - TIOCSIG = 0x8004745f - TIOCSPGRP = 0x80047476 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x80047465 - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSTSTAMP = 0x8008745a - TIOCSWINSZ = 0x80087467 - TIOCUCNTL = 0x80047466 - TOSTOP = 0x400000 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VTIME = 0x11 - VWERASE = 0x4 - WALTSIG = 0x4 - WCONTINUED = 0x8 - WCOREFLAG = 0x80 - WNOHANG = 0x1 - WSTOPPED = 0x7f - WUNTRACED = 0x2 -) - -// Errors -const ( - E2BIG = syscall.Errno(0x7) - EACCES = syscall.Errno(0xd) - EADDRINUSE = syscall.Errno(0x30) - EADDRNOTAVAIL = syscall.Errno(0x31) - EAFNOSUPPORT = syscall.Errno(0x2f) - EAGAIN = syscall.Errno(0x23) - EALREADY = syscall.Errno(0x25) - EAUTH = syscall.Errno(0x50) - EBADF = syscall.Errno(0x9) - EBADRPC = syscall.Errno(0x48) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x58) - ECHILD = syscall.Errno(0xa) - ECONNABORTED = syscall.Errno(0x35) - ECONNREFUSED = syscall.Errno(0x3d) - ECONNRESET = syscall.Errno(0x36) - EDEADLK = syscall.Errno(0xb) - EDESTADDRREQ = syscall.Errno(0x27) - EDOM = syscall.Errno(0x21) - EDQUOT = syscall.Errno(0x45) - EEXIST = syscall.Errno(0x11) - EFAULT = syscall.Errno(0xe) - EFBIG = syscall.Errno(0x1b) - EFTYPE = syscall.Errno(0x4f) - EHOSTDOWN = syscall.Errno(0x40) - EHOSTUNREACH = syscall.Errno(0x41) - EIDRM = syscall.Errno(0x59) - EILSEQ = syscall.Errno(0x54) - EINPROGRESS = syscall.Errno(0x24) - EINTR = syscall.Errno(0x4) - EINVAL = syscall.Errno(0x16) - EIO = syscall.Errno(0x5) - EIPSEC = syscall.Errno(0x52) - EISCONN = syscall.Errno(0x38) - EISDIR = syscall.Errno(0x15) - ELAST = syscall.Errno(0x5b) - ELOOP = syscall.Errno(0x3e) - EMEDIUMTYPE = syscall.Errno(0x56) - EMFILE = syscall.Errno(0x18) - EMLINK = syscall.Errno(0x1f) - EMSGSIZE = syscall.Errno(0x28) - ENAMETOOLONG = syscall.Errno(0x3f) - ENEEDAUTH = syscall.Errno(0x51) - ENETDOWN = syscall.Errno(0x32) - ENETRESET = syscall.Errno(0x34) - ENETUNREACH = syscall.Errno(0x33) - ENFILE = syscall.Errno(0x17) - ENOATTR = syscall.Errno(0x53) - ENOBUFS = syscall.Errno(0x37) - ENODEV = syscall.Errno(0x13) - ENOENT = syscall.Errno(0x2) - ENOEXEC = syscall.Errno(0x8) - ENOLCK = syscall.Errno(0x4d) - ENOMEDIUM = syscall.Errno(0x55) - ENOMEM = syscall.Errno(0xc) - ENOMSG = syscall.Errno(0x5a) - ENOPROTOOPT = syscall.Errno(0x2a) - ENOSPC = syscall.Errno(0x1c) - ENOSYS = syscall.Errno(0x4e) - ENOTBLK = syscall.Errno(0xf) - ENOTCONN = syscall.Errno(0x39) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x42) - ENOTSOCK = syscall.Errno(0x26) - ENOTSUP = syscall.Errno(0x5b) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x2d) - EOVERFLOW = syscall.Errno(0x57) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x2e) - EPIPE = syscall.Errno(0x20) - EPROCLIM = syscall.Errno(0x43) - EPROCUNAVAIL = syscall.Errno(0x4c) - EPROGMISMATCH = syscall.Errno(0x4b) - EPROGUNAVAIL = syscall.Errno(0x4a) - EPROTONOSUPPORT = syscall.Errno(0x2b) - EPROTOTYPE = syscall.Errno(0x29) - ERANGE = syscall.Errno(0x22) - EREMOTE = syscall.Errno(0x47) - EROFS = syscall.Errno(0x1e) - ERPCMISMATCH = syscall.Errno(0x49) - ESHUTDOWN = syscall.Errno(0x3a) - ESOCKTNOSUPPORT = syscall.Errno(0x2c) - ESPIPE = syscall.Errno(0x1d) - ESRCH = syscall.Errno(0x3) - ESTALE = syscall.Errno(0x46) - ETIMEDOUT = syscall.Errno(0x3c) - ETOOMANYREFS = syscall.Errno(0x3b) - ETXTBSY = syscall.Errno(0x1a) - EUSERS = syscall.Errno(0x44) - EWOULDBLOCK = syscall.Errno(0x23) - EXDEV = syscall.Errno(0x12) -) - -// Signals -const ( - SIGABRT = syscall.Signal(0x6) - SIGALRM = syscall.Signal(0xe) - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x14) - SIGCONT = syscall.Signal(0x13) - SIGEMT = syscall.Signal(0x7) - SIGFPE = syscall.Signal(0x8) - SIGHUP = syscall.Signal(0x1) - SIGILL = syscall.Signal(0x4) - SIGINFO = syscall.Signal(0x1d) - SIGINT = syscall.Signal(0x2) - SIGIO = syscall.Signal(0x17) - SIGIOT = syscall.Signal(0x6) - SIGKILL = syscall.Signal(0x9) - SIGPIPE = syscall.Signal(0xd) - SIGPROF = syscall.Signal(0x1b) - SIGQUIT = syscall.Signal(0x3) - SIGSEGV = syscall.Signal(0xb) - SIGSTOP = syscall.Signal(0x11) - SIGSYS = syscall.Signal(0xc) - SIGTERM = syscall.Signal(0xf) - SIGTHR = syscall.Signal(0x20) - SIGTRAP = syscall.Signal(0x5) - SIGTSTP = syscall.Signal(0x12) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x10) - SIGUSR1 = syscall.Signal(0x1e) - SIGUSR2 = syscall.Signal(0x1f) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "device not configured"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EDEADLK", "resource deadlock avoided"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "cross-device link"}, - {19, "ENODEV", "operation not supported by device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "result too large"}, - {35, "EWOULDBLOCK", "resource temporarily unavailable"}, - {36, "EINPROGRESS", "operation now in progress"}, - {37, "EALREADY", "operation already in progress"}, - {38, "ENOTSOCK", "socket operation on non-socket"}, - {39, "EDESTADDRREQ", "destination address required"}, - {40, "EMSGSIZE", "message too long"}, - {41, "EPROTOTYPE", "protocol wrong type for socket"}, - {42, "ENOPROTOOPT", "protocol not available"}, - {43, "EPROTONOSUPPORT", "protocol not supported"}, - {44, "ESOCKTNOSUPPORT", "socket type not supported"}, - {45, "EOPNOTSUPP", "operation not supported"}, - {46, "EPFNOSUPPORT", "protocol family not supported"}, - {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, - {48, "EADDRINUSE", "address already in use"}, - {49, "EADDRNOTAVAIL", "can't assign requested address"}, - {50, "ENETDOWN", "network is down"}, - {51, "ENETUNREACH", "network is unreachable"}, - {52, "ENETRESET", "network dropped connection on reset"}, - {53, "ECONNABORTED", "software caused connection abort"}, - {54, "ECONNRESET", "connection reset by peer"}, - {55, "ENOBUFS", "no buffer space available"}, - {56, "EISCONN", "socket is already connected"}, - {57, "ENOTCONN", "socket is not connected"}, - {58, "ESHUTDOWN", "can't send after socket shutdown"}, - {59, "ETOOMANYREFS", "too many references: can't splice"}, - {60, "ETIMEDOUT", "operation timed out"}, - {61, "ECONNREFUSED", "connection refused"}, - {62, "ELOOP", "too many levels of symbolic links"}, - {63, "ENAMETOOLONG", "file name too long"}, - {64, "EHOSTDOWN", "host is down"}, - {65, "EHOSTUNREACH", "no route to host"}, - {66, "ENOTEMPTY", "directory not empty"}, - {67, "EPROCLIM", "too many processes"}, - {68, "EUSERS", "too many users"}, - {69, "EDQUOT", "disk quota exceeded"}, - {70, "ESTALE", "stale NFS file handle"}, - {71, "EREMOTE", "too many levels of remote in path"}, - {72, "EBADRPC", "RPC struct is bad"}, - {73, "ERPCMISMATCH", "RPC version wrong"}, - {74, "EPROGUNAVAIL", "RPC program not available"}, - {75, "EPROGMISMATCH", "program version wrong"}, - {76, "EPROCUNAVAIL", "bad procedure for program"}, - {77, "ENOLCK", "no locks available"}, - {78, "ENOSYS", "function not implemented"}, - {79, "EFTYPE", "inappropriate file type or format"}, - {80, "EAUTH", "authentication error"}, - {81, "ENEEDAUTH", "need authenticator"}, - {82, "EIPSEC", "IPsec processing failure"}, - {83, "ENOATTR", "attribute not found"}, - {84, "EILSEQ", "illegal byte sequence"}, - {85, "ENOMEDIUM", "no medium found"}, - {86, "EMEDIUMTYPE", "wrong medium type"}, - {87, "EOVERFLOW", "value too large to be stored in data type"}, - {88, "ECANCELED", "operation canceled"}, - {89, "EIDRM", "identifier removed"}, - {90, "ENOMSG", "no message of desired type"}, - {91, "ELAST", "not supported"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, - {6, "SIGABRT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGURG", "urgent I/O condition"}, - {17, "SIGSTOP", "suspended (signal)"}, - {18, "SIGTSTP", "suspended"}, - {19, "SIGCONT", "continued"}, - {20, "SIGCHLD", "child exited"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGIO", "I/O possible"}, - {24, "SIGXCPU", "cputime limit exceeded"}, - {25, "SIGXFSZ", "filesize limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window size changes"}, - {29, "SIGINFO", "information request"}, - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, - {32, "SIGTHR", "thread AST"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go deleted file mode 100644 index 25cb609..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go +++ /dev/null @@ -1,1775 +0,0 @@ -// mkerrors.sh -m64 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build amd64 && openbsd -// +build amd64,openbsd - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -m64 _const.go - -package unix - -import "syscall" - -const ( - AF_APPLETALK = 0x10 - AF_BLUETOOTH = 0x20 - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1a - AF_ECMA = 0x8 - AF_ENCAP = 0x1c - AF_HYLINK = 0xf - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x18 - AF_IPX = 0x17 - AF_ISDN = 0x1a - AF_ISO = 0x7 - AF_KEY = 0x1e - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x24 - AF_MPLS = 0x21 - AF_NATM = 0x1b - AF_NS = 0x6 - AF_OSI = 0x7 - AF_PUP = 0x4 - AF_ROUTE = 0x11 - AF_SIP = 0x1d - AF_SNA = 0xb - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - ALTWERASE = 0x200 - ARPHRD_ETHER = 0x1 - ARPHRD_FRELAY = 0xf - ARPHRD_IEEE1394 = 0x18 - ARPHRD_IEEE802 = 0x6 - B0 = 0x0 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B230400 = 0x38400 - B2400 = 0x960 - B28800 = 0x7080 - B300 = 0x12c - B38400 = 0x9600 - B4800 = 0x12c0 - B50 = 0x32 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B9600 = 0x2580 - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDIRFILT = 0x4004427c - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc010427b - BIOCGETIF = 0x4020426b - BIOCGFILDROP = 0x40044278 - BIOCGHDRCMPLT = 0x40044274 - BIOCGRSIG = 0x40044273 - BIOCGRTIMEOUT = 0x4010426e - BIOCGSTATS = 0x4008426f - BIOCIMMEDIATE = 0x80044270 - BIOCLOCK = 0x20004276 - BIOCPROMISC = 0x20004269 - BIOCSBLEN = 0xc0044266 - BIOCSDIRFILT = 0x8004427d - BIOCSDLT = 0x8004427a - BIOCSETF = 0x80104267 - BIOCSETIF = 0x8020426c - BIOCSETWF = 0x80104277 - BIOCSFILDROP = 0x80044279 - BIOCSHDRCMPLT = 0x80044275 - BIOCSRSIG = 0x80044272 - BIOCSRTIMEOUT = 0x8010426d - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x4 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_DIRECTION_IN = 0x1 - BPF_DIRECTION_OUT = 0x2 - BPF_DIV = 0x30 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x200000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_W = 0x0 - BPF_X = 0x8 - BRKINT = 0x2 - CFLUSH = 0xf - CLOCAL = 0x8000 - CLOCK_BOOTTIME = 0x6 - CLOCK_MONOTONIC = 0x3 - CLOCK_PROCESS_CPUTIME_ID = 0x2 - CLOCK_REALTIME = 0x0 - CLOCK_THREAD_CPUTIME_ID = 0x4 - CLOCK_UPTIME = 0x5 - CPUSTATES = 0x6 - CP_IDLE = 0x5 - CP_INTR = 0x4 - CP_NICE = 0x1 - CP_SPIN = 0x3 - CP_SYS = 0x2 - CP_USER = 0x0 - CREAD = 0x800 - CRTSCTS = 0x10000 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0xff - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTL_HW = 0x6 - CTL_KERN = 0x1 - CTL_MAXNAME = 0xc - CTL_NET = 0x4 - DIOCOSFPFLUSH = 0x2000444e - DLT_ARCNET = 0x7 - DLT_ATM_RFC1483 = 0xb - DLT_AX25 = 0x3 - DLT_CHAOS = 0x5 - DLT_C_HDLC = 0x68 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0xd - DLT_FDDI = 0xa - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_LOOP = 0xc - DLT_MPLS = 0xdb - DLT_NULL = 0x0 - DLT_OPENFLOW = 0x10b - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x12 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0x10 - DLT_PPP_ETHER = 0x33 - DLT_PPP_SERIAL = 0x32 - DLT_PRONET = 0x4 - DLT_RAW = 0xe - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xf - DLT_USBPCAP = 0xf9 - DLT_USER0 = 0x93 - DLT_USER1 = 0x94 - DLT_USER10 = 0x9d - DLT_USER11 = 0x9e - DLT_USER12 = 0x9f - DLT_USER13 = 0xa0 - DLT_USER14 = 0xa1 - DLT_USER15 = 0xa2 - DLT_USER2 = 0x95 - DLT_USER3 = 0x96 - DLT_USER4 = 0x97 - DLT_USER5 = 0x98 - DLT_USER6 = 0x99 - DLT_USER7 = 0x9a - DLT_USER8 = 0x9b - DLT_USER9 = 0x9c - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EMT_TAGOVF = 0x1 - EMUL_ENABLED = 0x1 - EMUL_NATIVE = 0x2 - ENDRUNDISC = 0x9 - ETHERMIN = 0x2e - ETHERMTU = 0x5dc - ETHERTYPE_8023 = 0x4 - ETHERTYPE_AARP = 0x80f3 - ETHERTYPE_ACCTON = 0x8390 - ETHERTYPE_AEONIC = 0x8036 - ETHERTYPE_ALPHA = 0x814a - ETHERTYPE_AMBER = 0x6008 - ETHERTYPE_AMOEBA = 0x8145 - ETHERTYPE_AOE = 0x88a2 - ETHERTYPE_APOLLO = 0x80f7 - ETHERTYPE_APOLLODOMAIN = 0x8019 - ETHERTYPE_APPLETALK = 0x809b - ETHERTYPE_APPLITEK = 0x80c7 - ETHERTYPE_ARGONAUT = 0x803a - ETHERTYPE_ARP = 0x806 - ETHERTYPE_AT = 0x809b - ETHERTYPE_ATALK = 0x809b - ETHERTYPE_ATOMIC = 0x86df - ETHERTYPE_ATT = 0x8069 - ETHERTYPE_ATTSTANFORD = 0x8008 - ETHERTYPE_AUTOPHON = 0x806a - ETHERTYPE_AXIS = 0x8856 - ETHERTYPE_BCLOOP = 0x9003 - ETHERTYPE_BOFL = 0x8102 - ETHERTYPE_CABLETRON = 0x7034 - ETHERTYPE_CHAOS = 0x804 - ETHERTYPE_COMDESIGN = 0x806c - ETHERTYPE_COMPUGRAPHIC = 0x806d - ETHERTYPE_COUNTERPOINT = 0x8062 - ETHERTYPE_CRONUS = 0x8004 - ETHERTYPE_CRONUSVLN = 0x8003 - ETHERTYPE_DCA = 0x1234 - ETHERTYPE_DDE = 0x807b - ETHERTYPE_DEBNI = 0xaaaa - ETHERTYPE_DECAM = 0x8048 - ETHERTYPE_DECCUST = 0x6006 - ETHERTYPE_DECDIAG = 0x6005 - ETHERTYPE_DECDNS = 0x803c - ETHERTYPE_DECDTS = 0x803e - ETHERTYPE_DECEXPER = 0x6000 - ETHERTYPE_DECLAST = 0x8041 - ETHERTYPE_DECLTM = 0x803f - ETHERTYPE_DECMUMPS = 0x6009 - ETHERTYPE_DECNETBIOS = 0x8040 - ETHERTYPE_DELTACON = 0x86de - ETHERTYPE_DIDDLE = 0x4321 - ETHERTYPE_DLOG1 = 0x660 - ETHERTYPE_DLOG2 = 0x661 - ETHERTYPE_DN = 0x6003 - ETHERTYPE_DOGFIGHT = 0x1989 - ETHERTYPE_DSMD = 0x8039 - ETHERTYPE_ECMA = 0x803 - ETHERTYPE_ENCRYPT = 0x803d - ETHERTYPE_ES = 0x805d - ETHERTYPE_EXCELAN = 0x8010 - ETHERTYPE_EXPERDATA = 0x8049 - ETHERTYPE_FLIP = 0x8146 - ETHERTYPE_FLOWCONTROL = 0x8808 - ETHERTYPE_FRARP = 0x808 - ETHERTYPE_GENDYN = 0x8068 - ETHERTYPE_HAYES = 0x8130 - ETHERTYPE_HIPPI_FP = 0x8180 - ETHERTYPE_HITACHI = 0x8820 - ETHERTYPE_HP = 0x8005 - ETHERTYPE_IEEEPUP = 0xa00 - ETHERTYPE_IEEEPUPAT = 0xa01 - ETHERTYPE_IMLBL = 0x4c42 - ETHERTYPE_IMLBLDIAG = 0x424c - ETHERTYPE_IP = 0x800 - ETHERTYPE_IPAS = 0x876c - ETHERTYPE_IPV6 = 0x86dd - ETHERTYPE_IPX = 0x8137 - ETHERTYPE_IPXNEW = 0x8037 - ETHERTYPE_KALPANA = 0x8582 - ETHERTYPE_LANBRIDGE = 0x8038 - ETHERTYPE_LANPROBE = 0x8888 - ETHERTYPE_LAT = 0x6004 - ETHERTYPE_LBACK = 0x9000 - ETHERTYPE_LITTLE = 0x8060 - ETHERTYPE_LLDP = 0x88cc - ETHERTYPE_LOGICRAFT = 0x8148 - ETHERTYPE_LOOPBACK = 0x9000 - ETHERTYPE_MATRA = 0x807a - ETHERTYPE_MAX = 0xffff - ETHERTYPE_MERIT = 0x807c - ETHERTYPE_MICP = 0x873a - ETHERTYPE_MOPDL = 0x6001 - ETHERTYPE_MOPRC = 0x6002 - ETHERTYPE_MOTOROLA = 0x818d - ETHERTYPE_MPLS = 0x8847 - ETHERTYPE_MPLS_MCAST = 0x8848 - ETHERTYPE_MUMPS = 0x813f - ETHERTYPE_NBPCC = 0x3c04 - ETHERTYPE_NBPCLAIM = 0x3c09 - ETHERTYPE_NBPCLREQ = 0x3c05 - ETHERTYPE_NBPCLRSP = 0x3c06 - ETHERTYPE_NBPCREQ = 0x3c02 - ETHERTYPE_NBPCRSP = 0x3c03 - ETHERTYPE_NBPDG = 0x3c07 - ETHERTYPE_NBPDGB = 0x3c08 - ETHERTYPE_NBPDLTE = 0x3c0a - ETHERTYPE_NBPRAR = 0x3c0c - ETHERTYPE_NBPRAS = 0x3c0b - ETHERTYPE_NBPRST = 0x3c0d - ETHERTYPE_NBPSCD = 0x3c01 - ETHERTYPE_NBPVCD = 0x3c00 - ETHERTYPE_NBS = 0x802 - ETHERTYPE_NCD = 0x8149 - ETHERTYPE_NESTAR = 0x8006 - ETHERTYPE_NETBEUI = 0x8191 - ETHERTYPE_NOVELL = 0x8138 - ETHERTYPE_NS = 0x600 - ETHERTYPE_NSAT = 0x601 - ETHERTYPE_NSCOMPAT = 0x807 - ETHERTYPE_NTRAILER = 0x10 - ETHERTYPE_OS9 = 0x7007 - ETHERTYPE_OS9NET = 0x7009 - ETHERTYPE_PACER = 0x80c6 - ETHERTYPE_PAE = 0x888e - ETHERTYPE_PCS = 0x4242 - ETHERTYPE_PLANNING = 0x8044 - ETHERTYPE_PPP = 0x880b - ETHERTYPE_PPPOE = 0x8864 - ETHERTYPE_PPPOEDISC = 0x8863 - ETHERTYPE_PRIMENTS = 0x7031 - ETHERTYPE_PUP = 0x200 - ETHERTYPE_PUPAT = 0x200 - ETHERTYPE_QINQ = 0x88a8 - ETHERTYPE_RACAL = 0x7030 - ETHERTYPE_RATIONAL = 0x8150 - ETHERTYPE_RAWFR = 0x6559 - ETHERTYPE_RCL = 0x1995 - ETHERTYPE_RDP = 0x8739 - ETHERTYPE_RETIX = 0x80f2 - ETHERTYPE_REVARP = 0x8035 - ETHERTYPE_SCA = 0x6007 - ETHERTYPE_SECTRA = 0x86db - ETHERTYPE_SECUREDATA = 0x876d - ETHERTYPE_SGITW = 0x817e - ETHERTYPE_SG_BOUNCE = 0x8016 - ETHERTYPE_SG_DIAG = 0x8013 - ETHERTYPE_SG_NETGAMES = 0x8014 - ETHERTYPE_SG_RESV = 0x8015 - ETHERTYPE_SIMNET = 0x5208 - ETHERTYPE_SLOW = 0x8809 - ETHERTYPE_SNA = 0x80d5 - ETHERTYPE_SNMP = 0x814c - ETHERTYPE_SONIX = 0xfaf5 - ETHERTYPE_SPIDER = 0x809f - ETHERTYPE_SPRITE = 0x500 - ETHERTYPE_STP = 0x8181 - ETHERTYPE_TALARIS = 0x812b - ETHERTYPE_TALARISMC = 0x852b - ETHERTYPE_TCPCOMP = 0x876b - ETHERTYPE_TCPSM = 0x9002 - ETHERTYPE_TEC = 0x814f - ETHERTYPE_TIGAN = 0x802f - ETHERTYPE_TRAIL = 0x1000 - ETHERTYPE_TRANSETHER = 0x6558 - ETHERTYPE_TYMSHARE = 0x802e - ETHERTYPE_UBBST = 0x7005 - ETHERTYPE_UBDEBUG = 0x900 - ETHERTYPE_UBDIAGLOOP = 0x7002 - ETHERTYPE_UBDL = 0x7000 - ETHERTYPE_UBNIU = 0x7001 - ETHERTYPE_UBNMC = 0x7003 - ETHERTYPE_VALID = 0x1600 - ETHERTYPE_VARIAN = 0x80dd - ETHERTYPE_VAXELN = 0x803b - ETHERTYPE_VEECO = 0x8067 - ETHERTYPE_VEXP = 0x805b - ETHERTYPE_VGLAB = 0x8131 - ETHERTYPE_VINES = 0xbad - ETHERTYPE_VINESECHO = 0xbaf - ETHERTYPE_VINESLOOP = 0xbae - ETHERTYPE_VITAL = 0xff00 - ETHERTYPE_VLAN = 0x8100 - ETHERTYPE_VLTLMAN = 0x8080 - ETHERTYPE_VPROD = 0x805c - ETHERTYPE_VURESERVED = 0x8147 - ETHERTYPE_WATERLOO = 0x8130 - ETHERTYPE_WELLFLEET = 0x8103 - ETHERTYPE_X25 = 0x805 - ETHERTYPE_X75 = 0x801 - ETHERTYPE_XNSSM = 0x9001 - ETHERTYPE_XTP = 0x817d - ETHER_ADDR_LEN = 0x6 - ETHER_ALIGN = 0x2 - ETHER_CRC_LEN = 0x4 - ETHER_CRC_POLY_BE = 0x4c11db6 - ETHER_CRC_POLY_LE = 0xedb88320 - ETHER_HDR_LEN = 0xe - ETHER_MAX_DIX_LEN = 0x600 - ETHER_MAX_HARDMTU_LEN = 0xff9b - ETHER_MAX_LEN = 0x5ee - ETHER_MIN_LEN = 0x40 - ETHER_TYPE_LEN = 0x2 - ETHER_VLAN_ENCAP_LEN = 0x4 - EVFILT_AIO = -0x3 - EVFILT_DEVICE = -0x8 - EVFILT_PROC = -0x5 - EVFILT_READ = -0x1 - EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0x8 - EVFILT_TIMER = -0x7 - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 - EVL_ENCAPLEN = 0x4 - EVL_PRIO_BITS = 0xd - EVL_PRIO_MAX = 0x7 - EVL_VLID_MASK = 0xfff - EVL_VLID_MAX = 0xffe - EVL_VLID_MIN = 0x1 - EVL_VLID_NULL = 0x0 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_DISPATCH = 0x80 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG1 = 0x2000 - EV_ONESHOT = 0x10 - EV_RECEIPT = 0x40 - EV_SYSFLAGS = 0xf000 - EXTA = 0x4b00 - EXTB = 0x9600 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x400 - FLUSHO = 0x800000 - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0xa - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0x7 - F_GETOWN = 0x5 - F_ISATTY = 0xb - F_OK = 0x0 - F_RDLCK = 0x1 - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0x8 - F_SETLKW = 0x9 - F_SETOWN = 0x6 - F_UNLCK = 0x2 - F_WRLCK = 0x3 - HUPCL = 0x4000 - HW_MACHINE = 0x1 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFAN_ARRIVAL = 0x0 - IFAN_DEPARTURE = 0x1 - IFF_ALLMULTI = 0x200 - IFF_BROADCAST = 0x2 - IFF_CANTCHANGE = 0x8e52 - IFF_DEBUG = 0x4 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PROMISC = 0x100 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_STATICARP = 0x20 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_1822 = 0x2 - IFT_A12MPPSWITCH = 0x82 - IFT_AAL2 = 0xbb - IFT_AAL5 = 0x31 - IFT_ADSL = 0x5e - IFT_AFLANE8023 = 0x3b - IFT_AFLANE8025 = 0x3c - IFT_ARAP = 0x58 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ASYNC = 0x54 - IFT_ATM = 0x25 - IFT_ATMDXI = 0x69 - IFT_ATMFUNI = 0x6a - IFT_ATMIMA = 0x6b - IFT_ATMLOGICAL = 0x50 - IFT_ATMRADIO = 0xbd - IFT_ATMSUBINTERFACE = 0x86 - IFT_ATMVCIENDPT = 0xc2 - IFT_ATMVIRTUAL = 0x95 - IFT_BGPPOLICYACCOUNTING = 0xa2 - IFT_BLUETOOTH = 0xf8 - IFT_BRIDGE = 0xd1 - IFT_BSC = 0x53 - IFT_CARP = 0xf7 - IFT_CCTEMUL = 0x3d - IFT_CEPT = 0x13 - IFT_CES = 0x85 - IFT_CHANNEL = 0x46 - IFT_CNR = 0x55 - IFT_COFFEE = 0x84 - IFT_COMPOSITELINK = 0x9b - IFT_DCN = 0x8d - IFT_DIGITALPOWERLINE = 0x8a - IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba - IFT_DLSW = 0x4a - IFT_DOCSCABLEDOWNSTREAM = 0x80 - IFT_DOCSCABLEMACLAYER = 0x7f - IFT_DOCSCABLEUPSTREAM = 0x81 - IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd - IFT_DS0 = 0x51 - IFT_DS0BUNDLE = 0x52 - IFT_DS1FDL = 0xaa - IFT_DS3 = 0x1e - IFT_DTM = 0x8c - IFT_DUMMY = 0xf1 - IFT_DVBASILN = 0xac - IFT_DVBASIOUT = 0xad - IFT_DVBRCCDOWNSTREAM = 0x93 - IFT_DVBRCCMACLAYER = 0x92 - IFT_DVBRCCUPSTREAM = 0x94 - IFT_ECONET = 0xce - IFT_ENC = 0xf4 - IFT_EON = 0x19 - IFT_EPLRS = 0x57 - IFT_ESCON = 0x49 - IFT_ETHER = 0x6 - IFT_FAITH = 0xf3 - IFT_FAST = 0x7d - IFT_FASTETHER = 0x3e - IFT_FASTETHERFX = 0x45 - IFT_FDDI = 0xf - IFT_FIBRECHANNEL = 0x38 - IFT_FRAMERELAYINTERCONNECT = 0x3a - IFT_FRAMERELAYMPI = 0x5c - IFT_FRDLCIENDPT = 0xc1 - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_FRF16MFRBUNDLE = 0xa3 - IFT_FRFORWARD = 0x9e - IFT_G703AT2MB = 0x43 - IFT_G703AT64K = 0x42 - IFT_GIF = 0xf0 - IFT_GIGABITETHERNET = 0x75 - IFT_GR303IDT = 0xb2 - IFT_GR303RDT = 0xb1 - IFT_H323GATEKEEPER = 0xa4 - IFT_H323PROXY = 0xa5 - IFT_HDH1822 = 0x3 - IFT_HDLC = 0x76 - IFT_HDSL2 = 0xa8 - IFT_HIPERLAN2 = 0xb7 - IFT_HIPPI = 0x2f - IFT_HIPPIINTERFACE = 0x39 - IFT_HOSTPAD = 0x5a - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IBM370PARCHAN = 0x48 - IFT_IDSL = 0x9a - IFT_IEEE1394 = 0x90 - IFT_IEEE80211 = 0x47 - IFT_IEEE80212 = 0x37 - IFT_IEEE8023ADLAG = 0xa1 - IFT_IFGSN = 0x91 - IFT_IMT = 0xbe - IFT_INFINIBAND = 0xc7 - IFT_INTERLEAVE = 0x7c - IFT_IP = 0x7e - IFT_IPFORWARD = 0x8e - IFT_IPOVERATM = 0x72 - IFT_IPOVERCDLC = 0x6d - IFT_IPOVERCLAW = 0x6e - IFT_IPSWITCH = 0x4e - IFT_ISDN = 0x3f - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISDNS = 0x4b - IFT_ISDNU = 0x4c - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88025CRFPINT = 0x62 - IFT_ISO88025DTR = 0x56 - IFT_ISO88025FIBER = 0x73 - IFT_ISO88026 = 0xa - IFT_ISUP = 0xb3 - IFT_L2VLAN = 0x87 - IFT_L3IPVLAN = 0x88 - IFT_L3IPXVLAN = 0x89 - IFT_LAPB = 0x10 - IFT_LAPD = 0x4d - IFT_LAPF = 0x77 - IFT_LINEGROUP = 0xd2 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MBIM = 0xfa - IFT_MEDIAMAILOVERIP = 0x8b - IFT_MFSIGLINK = 0xa7 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_MPC = 0x71 - IFT_MPLS = 0xa6 - IFT_MPLSTUNNEL = 0x96 - IFT_MSDSL = 0x8f - IFT_MVL = 0xbf - IFT_MYRINET = 0x63 - IFT_NFAS = 0xaf - IFT_NSIP = 0x1b - IFT_OPTICALCHANNEL = 0xc3 - IFT_OPTICALTRANSPORT = 0xc4 - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PFLOG = 0xf5 - IFT_PFLOW = 0xf9 - IFT_PFSYNC = 0xf6 - IFT_PLC = 0xae - IFT_PON155 = 0xcf - IFT_PON622 = 0xd0 - IFT_POS = 0xab - IFT_PPP = 0x17 - IFT_PPPMULTILINKBUNDLE = 0x6c - IFT_PROPATM = 0xc5 - IFT_PROPBWAP2MP = 0xb8 - IFT_PROPCNLS = 0x59 - IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 - IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 - IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 - IFT_PROPMUX = 0x36 - IFT_PROPVIRTUAL = 0x35 - IFT_PROPWIRELESSP2P = 0x9d - IFT_PTPSERIAL = 0x16 - IFT_PVC = 0xf2 - IFT_Q2931 = 0xc9 - IFT_QLLC = 0x44 - IFT_RADIOMAC = 0xbc - IFT_RADSL = 0x5f - IFT_REACHDSL = 0xc0 - IFT_RFC1483 = 0x9f - IFT_RS232 = 0x21 - IFT_RSRB = 0x4f - IFT_SDLC = 0x11 - IFT_SDSL = 0x60 - IFT_SHDSL = 0xa9 - IFT_SIP = 0x1f - IFT_SIPSIG = 0xcc - IFT_SIPTG = 0xcb - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SONET = 0x27 - IFT_SONETOVERHEADCHANNEL = 0xb9 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_SRP = 0x97 - IFT_SS7SIGLINK = 0x9c - IFT_STACKTOSTACK = 0x6f - IFT_STARLAN = 0xb - IFT_T1 = 0x12 - IFT_TDLC = 0x74 - IFT_TELINK = 0xc8 - IFT_TERMPAD = 0x5b - IFT_TR008 = 0xb0 - IFT_TRANSPHDLC = 0x7b - IFT_TUNNEL = 0x83 - IFT_ULTRA = 0x1d - IFT_USB = 0xa0 - IFT_V11 = 0x40 - IFT_V35 = 0x2d - IFT_V36 = 0x41 - IFT_V37 = 0x78 - IFT_VDSL = 0x61 - IFT_VIRTUALIPADDRESS = 0x70 - IFT_VIRTUALTG = 0xca - IFT_VOICEDID = 0xd5 - IFT_VOICEEM = 0x64 - IFT_VOICEEMFGD = 0xd3 - IFT_VOICEENCAP = 0x67 - IFT_VOICEFGDEANA = 0xd4 - IFT_VOICEFXO = 0x65 - IFT_VOICEFXS = 0x66 - IFT_VOICEOVERATM = 0x98 - IFT_VOICEOVERCABLE = 0xc6 - IFT_VOICEOVERFRAMERELAY = 0x99 - IFT_VOICEOVERIP = 0x68 - IFT_X213 = 0x5d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25HUNTGROUP = 0x7a - IFT_X25MLP = 0x79 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LOOPBACKNET = 0x7f - IN_RFC3021_HOST = 0x1 - IN_RFC3021_NET = 0xfffffffe - IN_RFC3021_NSHIFT = 0x1f - IPPROTO_AH = 0x33 - IPPROTO_CARP = 0x70 - IPPROTO_DIVERT = 0x102 - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GRE = 0x2f - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IGMP = 0x2 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPIP = 0x4 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_MAX = 0x100 - IPPROTO_MAXID = 0x103 - IPPROTO_MOBILE = 0x37 - IPPROTO_MPLS = 0x89 - IPPROTO_NONE = 0x3b - IPPROTO_PFSYNC = 0xf0 - IPPROTO_PIM = 0x67 - IPPROTO_PUP = 0xc - IPPROTO_RAW = 0xff - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_TCP = 0x6 - IPPROTO_TP = 0x1d - IPPROTO_UDP = 0x11 - IPV6_AUTH_LEVEL = 0x35 - IPV6_AUTOFLOWLABEL = 0x3b - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_DONTFRAG = 0x3e - IPV6_DSTOPTS = 0x32 - IPV6_ESP_NETWORK_LEVEL = 0x37 - IPV6_ESP_TRANS_LEVEL = 0x36 - IPV6_FAITH = 0x1d - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FRAGTTL = 0x78 - IPV6_HLIMDEC = 0x1 - IPV6_HOPLIMIT = 0x2f - IPV6_HOPOPTS = 0x31 - IPV6_IPCOMP_LEVEL = 0x3c - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXPACKET = 0xffff - IPV6_MINHOPCOUNT = 0x41 - IPV6_MMTU = 0x500 - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_OPTIONS = 0x1 - IPV6_PATHMTU = 0x2c - IPV6_PIPEX = 0x3f - IPV6_PKTINFO = 0x2e - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_RECVDSTOPTS = 0x28 - IPV6_RECVDSTPORT = 0x40 - IPV6_RECVHOPLIMIT = 0x25 - IPV6_RECVHOPOPTS = 0x27 - IPV6_RECVPATHMTU = 0x2b - IPV6_RECVPKTINFO = 0x24 - IPV6_RECVRTHDR = 0x26 - IPV6_RECVTCLASS = 0x39 - IPV6_RTABLE = 0x1021 - IPV6_RTHDR = 0x33 - IPV6_RTHDRDSTOPTS = 0x23 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x3d - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2a - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IP_ADD_MEMBERSHIP = 0xc - IP_AUTH_LEVEL = 0x14 - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DROP_MEMBERSHIP = 0xd - IP_ESP_NETWORK_LEVEL = 0x16 - IP_ESP_TRANS_LEVEL = 0x15 - IP_HDRINCL = 0x2 - IP_IPCOMP_LEVEL = 0x1d - IP_IPDEFTTL = 0x25 - IP_IPSECFLOWINFO = 0x24 - IP_IPSEC_LOCAL_AUTH = 0x1b - IP_IPSEC_LOCAL_CRED = 0x19 - IP_IPSEC_LOCAL_ID = 0x17 - IP_IPSEC_REMOTE_AUTH = 0x1c - IP_IPSEC_REMOTE_CRED = 0x1a - IP_IPSEC_REMOTE_ID = 0x18 - IP_MAXPACKET = 0xffff - IP_MAX_MEMBERSHIPS = 0xfff - IP_MF = 0x2000 - IP_MINTTL = 0x20 - IP_MIN_MEMBERSHIPS = 0xf - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_OFFMASK = 0x1fff - IP_OPTIONS = 0x1 - IP_PIPEX = 0x22 - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVDSTPORT = 0x21 - IP_RECVIF = 0x1e - IP_RECVOPTS = 0x5 - IP_RECVRETOPTS = 0x6 - IP_RECVRTABLE = 0x23 - IP_RECVTTL = 0x1f - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_RTABLE = 0x1021 - IP_SENDSRCADDR = 0x7 - IP_TOS = 0x3 - IP_TTL = 0x4 - ISIG = 0x80 - ISTRIP = 0x20 - IUCLC = 0x1000 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - KERN_HOSTNAME = 0xa - KERN_OSRELEASE = 0x2 - KERN_OSTYPE = 0x1 - KERN_VERSION = 0x4 - LCNT_OVERLOAD_FLUSH = 0x6 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x6 - MADV_NORMAL = 0x0 - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_SPACEAVAIL = 0x5 - MADV_WILLNEED = 0x3 - MAP_ANON = 0x1000 - MAP_ANONYMOUS = 0x1000 - MAP_CONCEAL = 0x8000 - MAP_COPY = 0x2 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_FLAGMASK = 0xfff7 - MAP_HASSEMAPHORE = 0x0 - MAP_INHERIT = 0x0 - MAP_INHERIT_COPY = 0x1 - MAP_INHERIT_NONE = 0x2 - MAP_INHERIT_SHARE = 0x0 - MAP_INHERIT_ZERO = 0x3 - MAP_NOEXTEND = 0x0 - MAP_NORESERVE = 0x0 - MAP_PRIVATE = 0x2 - MAP_RENAME = 0x0 - MAP_SHARED = 0x1 - MAP_STACK = 0x4000 - MAP_TRYFIXED = 0x0 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MNT_ASYNC = 0x40 - MNT_DEFEXPORTED = 0x200 - MNT_DELEXPORT = 0x20000 - MNT_DOOMED = 0x8000000 - MNT_EXPORTANON = 0x400 - MNT_EXPORTED = 0x100 - MNT_EXRDONLY = 0x80 - MNT_FORCE = 0x80000 - MNT_LAZY = 0x3 - MNT_LOCAL = 0x1000 - MNT_NOATIME = 0x8000 - MNT_NODEV = 0x10 - MNT_NOEXEC = 0x4 - MNT_NOPERM = 0x20 - MNT_NOSUID = 0x8 - MNT_NOWAIT = 0x2 - MNT_QUOTA = 0x2000 - MNT_RDONLY = 0x1 - MNT_RELOAD = 0x40000 - MNT_ROOTFS = 0x4000 - MNT_SOFTDEP = 0x4000000 - MNT_STALLED = 0x100000 - MNT_SYNCHRONOUS = 0x2 - MNT_UPDATE = 0x10000 - MNT_VISFLAGMASK = 0x400ffff - MNT_WAIT = 0x1 - MNT_WANTRDWR = 0x2000000 - MNT_WXALLOWED = 0x800 - MSG_BCAST = 0x100 - MSG_CMSG_CLOEXEC = 0x800 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOR = 0x8 - MSG_MCAST = 0x200 - MSG_NOSIGNAL = 0x400 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x4 - MS_SYNC = 0x2 - NAME_MAX = 0xff - NET_RT_DUMP = 0x1 - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x3 - NET_RT_IFNAMES = 0x6 - NET_RT_MAXID = 0x7 - NET_RT_STATS = 0x4 - NET_RT_TABLE = 0x5 - NFDBITS = 0x20 - NOFLSH = 0x80000000 - NOKERNINFO = 0x2000000 - NOTE_ATTRIB = 0x8 - NOTE_CHANGE = 0x1 - NOTE_CHILD = 0x4 - NOTE_DELETE = 0x1 - NOTE_EOF = 0x2 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXTEND = 0x4 - NOTE_FORK = 0x40000000 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_PCTRLMASK = 0xf0000000 - NOTE_PDATAMASK = 0xfffff - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_TRUNCATE = 0x80 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - OLCUC = 0x20 - ONLCR = 0x2 - ONLRET = 0x80 - ONOCR = 0x40 - ONOEOT = 0x8 - OPOST = 0x1 - OXTABS = 0x4 - O_ACCMODE = 0x3 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x10000 - O_CREAT = 0x200 - O_DIRECTORY = 0x20000 - O_DSYNC = 0x80 - O_EXCL = 0x800 - O_EXLOCK = 0x20 - O_FSYNC = 0x80 - O_NDELAY = 0x4 - O_NOCTTY = 0x8000 - O_NOFOLLOW = 0x100 - O_NONBLOCK = 0x4 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_RSYNC = 0x80 - O_SHLOCK = 0x10 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PF_FLUSH = 0x1 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_MEMLOCK = 0x6 - RLIMIT_NOFILE = 0x8 - RLIMIT_NPROC = 0x7 - RLIMIT_RSS = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BFD = 0xb - RTAX_BRD = 0x7 - RTAX_DNS = 0xc - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_LABEL = 0xa - RTAX_MAX = 0xf - RTAX_NETMASK = 0x2 - RTAX_SEARCH = 0xe - RTAX_SRC = 0x8 - RTAX_SRCMASK = 0x9 - RTAX_STATIC = 0xd - RTA_AUTHOR = 0x40 - RTA_BFD = 0x800 - RTA_BRD = 0x80 - RTA_DNS = 0x1000 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_LABEL = 0x400 - RTA_NETMASK = 0x4 - RTA_SEARCH = 0x4000 - RTA_SRC = 0x100 - RTA_SRCMASK = 0x200 - RTA_STATIC = 0x2000 - RTF_ANNOUNCE = 0x4000 - RTF_BFD = 0x1000000 - RTF_BLACKHOLE = 0x1000 - RTF_BROADCAST = 0x400000 - RTF_CACHED = 0x20000 - RTF_CLONED = 0x10000 - RTF_CLONING = 0x100 - RTF_CONNECTED = 0x800000 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_FMASK = 0x110fc08 - RTF_GATEWAY = 0x2 - RTF_HOST = 0x4 - RTF_LLINFO = 0x400 - RTF_LOCAL = 0x200000 - RTF_MODIFIED = 0x20 - RTF_MPATH = 0x40000 - RTF_MPLS = 0x100000 - RTF_MULTICAST = 0x200 - RTF_PERMANENT_ARP = 0x2000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_PROTO3 = 0x2000 - RTF_REJECT = 0x8 - RTF_STATIC = 0x800 - RTF_UP = 0x1 - RTF_USETRAILERS = 0x8000 - RTM_ADD = 0x1 - RTM_BFD = 0x12 - RTM_CHANGE = 0x3 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_DESYNC = 0x10 - RTM_GET = 0x4 - RTM_IFANNOUNCE = 0xf - RTM_IFINFO = 0xe - RTM_INVALIDATE = 0x11 - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MAXSIZE = 0x800 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_PROPOSAL = 0x13 - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RT_TABLEID_BITS = 0x8 - RT_TABLEID_MASK = 0xff - RT_TABLEID_MAX = 0xff - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - RUSAGE_THREAD = 0x1 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x4 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80206931 - SIOCAIFADDR = 0x8040691a - SIOCAIFGROUP = 0x80286987 - SIOCATMARK = 0x40047307 - SIOCBRDGADD = 0x8060693c - SIOCBRDGADDL = 0x80606949 - SIOCBRDGADDS = 0x80606941 - SIOCBRDGARL = 0x808c694d - SIOCBRDGDADDR = 0x81286947 - SIOCBRDGDEL = 0x8060693d - SIOCBRDGDELS = 0x80606942 - SIOCBRDGFLUSH = 0x80606948 - SIOCBRDGFRL = 0x808c694e - SIOCBRDGGCACHE = 0xc0186941 - SIOCBRDGGFD = 0xc0186952 - SIOCBRDGGHT = 0xc0186951 - SIOCBRDGGIFFLGS = 0xc060693e - SIOCBRDGGMA = 0xc0186953 - SIOCBRDGGPARAM = 0xc0406958 - SIOCBRDGGPRI = 0xc0186950 - SIOCBRDGGRL = 0xc030694f - SIOCBRDGGTO = 0xc0186946 - SIOCBRDGIFS = 0xc0606942 - SIOCBRDGRTS = 0xc0206943 - SIOCBRDGSADDR = 0xc1286944 - SIOCBRDGSCACHE = 0x80186940 - SIOCBRDGSFD = 0x80186952 - SIOCBRDGSHT = 0x80186951 - SIOCBRDGSIFCOST = 0x80606955 - SIOCBRDGSIFFLGS = 0x8060693f - SIOCBRDGSIFPRIO = 0x80606954 - SIOCBRDGSIFPROT = 0x8060694a - SIOCBRDGSMA = 0x80186953 - SIOCBRDGSPRI = 0x80186950 - SIOCBRDGSPROTO = 0x8018695a - SIOCBRDGSTO = 0x80186945 - SIOCBRDGSTXHC = 0x80186959 - SIOCDELMULTI = 0x80206932 - SIOCDIFADDR = 0x80206919 - SIOCDIFGROUP = 0x80286989 - SIOCDIFPARENT = 0x802069b4 - SIOCDIFPHYADDR = 0x80206949 - SIOCDVNETID = 0x802069af - SIOCGETKALIVE = 0xc01869a4 - SIOCGETLABEL = 0x8020699a - SIOCGETMPWCFG = 0xc02069ae - SIOCGETPFLOW = 0xc02069fe - SIOCGETPFSYNC = 0xc02069f8 - SIOCGETSGCNT = 0xc0207534 - SIOCGETVIFCNT = 0xc0287533 - SIOCGETVLAN = 0xc0206990 - SIOCGIFADDR = 0xc0206921 - SIOCGIFBRDADDR = 0xc0206923 - SIOCGIFCONF = 0xc0106924 - SIOCGIFDATA = 0xc020691b - SIOCGIFDESCR = 0xc0206981 - SIOCGIFDSTADDR = 0xc0206922 - SIOCGIFFLAGS = 0xc0206911 - SIOCGIFGATTR = 0xc028698b - SIOCGIFGENERIC = 0xc020693a - SIOCGIFGMEMB = 0xc028698a - SIOCGIFGROUP = 0xc0286988 - SIOCGIFHARDMTU = 0xc02069a5 - SIOCGIFLLPRIO = 0xc02069b6 - SIOCGIFMEDIA = 0xc0406938 - SIOCGIFMETRIC = 0xc0206917 - SIOCGIFMTU = 0xc020697e - SIOCGIFNETMASK = 0xc0206925 - SIOCGIFPAIR = 0xc02069b1 - SIOCGIFPARENT = 0xc02069b3 - SIOCGIFPRIORITY = 0xc020699c - SIOCGIFRDOMAIN = 0xc02069a0 - SIOCGIFRTLABEL = 0xc0206983 - SIOCGIFRXR = 0x802069aa - SIOCGIFXFLAGS = 0xc020699e - SIOCGLIFPHYADDR = 0xc218694b - SIOCGLIFPHYDF = 0xc02069c2 - SIOCGLIFPHYRTABLE = 0xc02069a2 - SIOCGLIFPHYTTL = 0xc02069a9 - SIOCGPGRP = 0x40047309 - SIOCGSPPPPARAMS = 0xc0206994 - SIOCGUMBINFO = 0xc02069be - SIOCGUMBPARAM = 0xc02069c0 - SIOCGVH = 0xc02069f6 - SIOCGVNETFLOWID = 0xc02069c4 - SIOCGVNETID = 0xc02069a7 - SIOCIFAFATTACH = 0x801169ab - SIOCIFAFDETACH = 0x801169ac - SIOCIFCREATE = 0x8020697a - SIOCIFDESTROY = 0x80206979 - SIOCIFGCLONERS = 0xc0106978 - SIOCSETKALIVE = 0x801869a3 - SIOCSETLABEL = 0x80206999 - SIOCSETMPWCFG = 0x802069ad - SIOCSETPFLOW = 0x802069fd - SIOCSETPFSYNC = 0x802069f7 - SIOCSETVLAN = 0x8020698f - SIOCSIFADDR = 0x8020690c - SIOCSIFBRDADDR = 0x80206913 - SIOCSIFDESCR = 0x80206980 - SIOCSIFDSTADDR = 0x8020690e - SIOCSIFFLAGS = 0x80206910 - SIOCSIFGATTR = 0x8028698c - SIOCSIFGENERIC = 0x80206939 - SIOCSIFLLADDR = 0x8020691f - SIOCSIFLLPRIO = 0x802069b5 - SIOCSIFMEDIA = 0xc0206937 - SIOCSIFMETRIC = 0x80206918 - SIOCSIFMTU = 0x8020697f - SIOCSIFNETMASK = 0x80206916 - SIOCSIFPAIR = 0x802069b0 - SIOCSIFPARENT = 0x802069b2 - SIOCSIFPRIORITY = 0x8020699b - SIOCSIFRDOMAIN = 0x8020699f - SIOCSIFRTLABEL = 0x80206982 - SIOCSIFXFLAGS = 0x8020699d - SIOCSLIFPHYADDR = 0x8218694a - SIOCSLIFPHYDF = 0x802069c1 - SIOCSLIFPHYRTABLE = 0x802069a1 - SIOCSLIFPHYTTL = 0x802069a8 - SIOCSPGRP = 0x80047308 - SIOCSSPPPPARAMS = 0x80206993 - SIOCSUMBPARAM = 0x802069bf - SIOCSVH = 0xc02069f5 - SIOCSVNETFLOWID = 0x802069c3 - SIOCSVNETID = 0x802069a6 - SIOCSWGDPID = 0xc018695b - SIOCSWGMAXFLOW = 0xc0186960 - SIOCSWGMAXGROUP = 0xc018695d - SIOCSWSDPID = 0x8018695c - SIOCSWSPORTNO = 0xc060695f - SOCK_CLOEXEC = 0x8000 - SOCK_DGRAM = 0x2 - SOCK_DNS = 0x1000 - SOCK_NONBLOCK = 0x4000 - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_BINDANY = 0x1000 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LINGER = 0x80 - SO_NETPROC = 0x1020 - SO_OOBINLINE = 0x100 - SO_PEERCRED = 0x1022 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_RTABLE = 0x1021 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_SPLICE = 0x1023 - SO_TIMESTAMP = 0x800 - SO_TYPE = 0x1008 - SO_USELOOPBACK = 0x40 - SO_ZEROIZE = 0x2000 - S_BLKSIZE = 0x200 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFLNK = 0xa000 - S_IFMT = 0xf000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISTXT = 0x200 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXGRP = 0x8 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - TCIFLUSH = 0x1 - TCIOFF = 0x3 - TCIOFLUSH = 0x3 - TCION = 0x4 - TCOFLUSH = 0x2 - TCOOFF = 0x1 - TCOON = 0x2 - TCP_MAXBURST = 0x4 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x3 - TCP_MAX_WINSHIFT = 0xe - TCP_MD5SIG = 0x4 - TCP_MSS = 0x200 - TCP_NODELAY = 0x1 - TCP_NOPUSH = 0x10 - TCP_SACK_ENABLE = 0x8 - TCSAFLUSH = 0x2 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCHKVERAUTH = 0x2000741e - TIOCCLRVERAUTH = 0x2000741d - TIOCCONS = 0x80047462 - TIOCDRAIN = 0x2000745e - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLAG_CLOCAL = 0x2 - TIOCFLAG_CRTSCTS = 0x4 - TIOCFLAG_MDMBUF = 0x8 - TIOCFLAG_PPS = 0x10 - TIOCFLAG_SOFTCAR = 0x1 - TIOCFLUSH = 0x80047410 - TIOCGETA = 0x402c7413 - TIOCGETD = 0x4004741a - TIOCGFLAGS = 0x4004745d - TIOCGPGRP = 0x40047477 - TIOCGSID = 0x40047463 - TIOCGTSTAMP = 0x4010745b - TIOCGWINSZ = 0x40087468 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGET = 0x4004746a - TIOCMODG = 0x4004746a - TIOCMODS = 0x8004746d - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCREMOTE = 0x80047469 - TIOCSBRK = 0x2000747b - TIOCSCTTY = 0x20007461 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x802c7414 - TIOCSETAF = 0x802c7416 - TIOCSETAW = 0x802c7415 - TIOCSETD = 0x8004741b - TIOCSETVERAUTH = 0x8004741c - TIOCSFLAGS = 0x8004745c - TIOCSIG = 0x8004745f - TIOCSPGRP = 0x80047476 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x20007465 - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSTSTAMP = 0x8008745a - TIOCSWINSZ = 0x80087467 - TIOCUCNTL = 0x80047466 - TIOCUCNTL_CBRK = 0x7a - TIOCUCNTL_SBRK = 0x7b - TOSTOP = 0x400000 - UTIME_NOW = -0x2 - UTIME_OMIT = -0x1 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 - VM_ANONMIN = 0x7 - VM_LOADAVG = 0x2 - VM_MAXID = 0xc - VM_MAXSLP = 0xa - VM_METER = 0x1 - VM_NKMEMPAGES = 0x6 - VM_PSSTRINGS = 0x3 - VM_SWAPENCRYPT = 0x5 - VM_USPACE = 0xb - VM_UVMEXP = 0x4 - VM_VNODEMIN = 0x9 - VM_VTEXTMIN = 0x8 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VTIME = 0x11 - VWERASE = 0x4 - WALTSIG = 0x4 - WCONTINUED = 0x8 - WCOREFLAG = 0x80 - WNOHANG = 0x1 - WUNTRACED = 0x2 - XCASE = 0x1000000 -) - -// Errors -const ( - E2BIG = syscall.Errno(0x7) - EACCES = syscall.Errno(0xd) - EADDRINUSE = syscall.Errno(0x30) - EADDRNOTAVAIL = syscall.Errno(0x31) - EAFNOSUPPORT = syscall.Errno(0x2f) - EAGAIN = syscall.Errno(0x23) - EALREADY = syscall.Errno(0x25) - EAUTH = syscall.Errno(0x50) - EBADF = syscall.Errno(0x9) - EBADMSG = syscall.Errno(0x5c) - EBADRPC = syscall.Errno(0x48) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x58) - ECHILD = syscall.Errno(0xa) - ECONNABORTED = syscall.Errno(0x35) - ECONNREFUSED = syscall.Errno(0x3d) - ECONNRESET = syscall.Errno(0x36) - EDEADLK = syscall.Errno(0xb) - EDESTADDRREQ = syscall.Errno(0x27) - EDOM = syscall.Errno(0x21) - EDQUOT = syscall.Errno(0x45) - EEXIST = syscall.Errno(0x11) - EFAULT = syscall.Errno(0xe) - EFBIG = syscall.Errno(0x1b) - EFTYPE = syscall.Errno(0x4f) - EHOSTDOWN = syscall.Errno(0x40) - EHOSTUNREACH = syscall.Errno(0x41) - EIDRM = syscall.Errno(0x59) - EILSEQ = syscall.Errno(0x54) - EINPROGRESS = syscall.Errno(0x24) - EINTR = syscall.Errno(0x4) - EINVAL = syscall.Errno(0x16) - EIO = syscall.Errno(0x5) - EIPSEC = syscall.Errno(0x52) - EISCONN = syscall.Errno(0x38) - EISDIR = syscall.Errno(0x15) - ELAST = syscall.Errno(0x5f) - ELOOP = syscall.Errno(0x3e) - EMEDIUMTYPE = syscall.Errno(0x56) - EMFILE = syscall.Errno(0x18) - EMLINK = syscall.Errno(0x1f) - EMSGSIZE = syscall.Errno(0x28) - ENAMETOOLONG = syscall.Errno(0x3f) - ENEEDAUTH = syscall.Errno(0x51) - ENETDOWN = syscall.Errno(0x32) - ENETRESET = syscall.Errno(0x34) - ENETUNREACH = syscall.Errno(0x33) - ENFILE = syscall.Errno(0x17) - ENOATTR = syscall.Errno(0x53) - ENOBUFS = syscall.Errno(0x37) - ENODEV = syscall.Errno(0x13) - ENOENT = syscall.Errno(0x2) - ENOEXEC = syscall.Errno(0x8) - ENOLCK = syscall.Errno(0x4d) - ENOMEDIUM = syscall.Errno(0x55) - ENOMEM = syscall.Errno(0xc) - ENOMSG = syscall.Errno(0x5a) - ENOPROTOOPT = syscall.Errno(0x2a) - ENOSPC = syscall.Errno(0x1c) - ENOSYS = syscall.Errno(0x4e) - ENOTBLK = syscall.Errno(0xf) - ENOTCONN = syscall.Errno(0x39) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x42) - ENOTRECOVERABLE = syscall.Errno(0x5d) - ENOTSOCK = syscall.Errno(0x26) - ENOTSUP = syscall.Errno(0x5b) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x2d) - EOVERFLOW = syscall.Errno(0x57) - EOWNERDEAD = syscall.Errno(0x5e) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x2e) - EPIPE = syscall.Errno(0x20) - EPROCLIM = syscall.Errno(0x43) - EPROCUNAVAIL = syscall.Errno(0x4c) - EPROGMISMATCH = syscall.Errno(0x4b) - EPROGUNAVAIL = syscall.Errno(0x4a) - EPROTO = syscall.Errno(0x5f) - EPROTONOSUPPORT = syscall.Errno(0x2b) - EPROTOTYPE = syscall.Errno(0x29) - ERANGE = syscall.Errno(0x22) - EREMOTE = syscall.Errno(0x47) - EROFS = syscall.Errno(0x1e) - ERPCMISMATCH = syscall.Errno(0x49) - ESHUTDOWN = syscall.Errno(0x3a) - ESOCKTNOSUPPORT = syscall.Errno(0x2c) - ESPIPE = syscall.Errno(0x1d) - ESRCH = syscall.Errno(0x3) - ESTALE = syscall.Errno(0x46) - ETIMEDOUT = syscall.Errno(0x3c) - ETOOMANYREFS = syscall.Errno(0x3b) - ETXTBSY = syscall.Errno(0x1a) - EUSERS = syscall.Errno(0x44) - EWOULDBLOCK = syscall.Errno(0x23) - EXDEV = syscall.Errno(0x12) -) - -// Signals -const ( - SIGABRT = syscall.Signal(0x6) - SIGALRM = syscall.Signal(0xe) - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x14) - SIGCONT = syscall.Signal(0x13) - SIGEMT = syscall.Signal(0x7) - SIGFPE = syscall.Signal(0x8) - SIGHUP = syscall.Signal(0x1) - SIGILL = syscall.Signal(0x4) - SIGINFO = syscall.Signal(0x1d) - SIGINT = syscall.Signal(0x2) - SIGIO = syscall.Signal(0x17) - SIGIOT = syscall.Signal(0x6) - SIGKILL = syscall.Signal(0x9) - SIGPIPE = syscall.Signal(0xd) - SIGPROF = syscall.Signal(0x1b) - SIGQUIT = syscall.Signal(0x3) - SIGSEGV = syscall.Signal(0xb) - SIGSTOP = syscall.Signal(0x11) - SIGSYS = syscall.Signal(0xc) - SIGTERM = syscall.Signal(0xf) - SIGTHR = syscall.Signal(0x20) - SIGTRAP = syscall.Signal(0x5) - SIGTSTP = syscall.Signal(0x12) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x10) - SIGUSR1 = syscall.Signal(0x1e) - SIGUSR2 = syscall.Signal(0x1f) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "device not configured"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EDEADLK", "resource deadlock avoided"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "cross-device link"}, - {19, "ENODEV", "operation not supported by device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "result too large"}, - {35, "EAGAIN", "resource temporarily unavailable"}, - {36, "EINPROGRESS", "operation now in progress"}, - {37, "EALREADY", "operation already in progress"}, - {38, "ENOTSOCK", "socket operation on non-socket"}, - {39, "EDESTADDRREQ", "destination address required"}, - {40, "EMSGSIZE", "message too long"}, - {41, "EPROTOTYPE", "protocol wrong type for socket"}, - {42, "ENOPROTOOPT", "protocol not available"}, - {43, "EPROTONOSUPPORT", "protocol not supported"}, - {44, "ESOCKTNOSUPPORT", "socket type not supported"}, - {45, "EOPNOTSUPP", "operation not supported"}, - {46, "EPFNOSUPPORT", "protocol family not supported"}, - {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, - {48, "EADDRINUSE", "address already in use"}, - {49, "EADDRNOTAVAIL", "can't assign requested address"}, - {50, "ENETDOWN", "network is down"}, - {51, "ENETUNREACH", "network is unreachable"}, - {52, "ENETRESET", "network dropped connection on reset"}, - {53, "ECONNABORTED", "software caused connection abort"}, - {54, "ECONNRESET", "connection reset by peer"}, - {55, "ENOBUFS", "no buffer space available"}, - {56, "EISCONN", "socket is already connected"}, - {57, "ENOTCONN", "socket is not connected"}, - {58, "ESHUTDOWN", "can't send after socket shutdown"}, - {59, "ETOOMANYREFS", "too many references: can't splice"}, - {60, "ETIMEDOUT", "operation timed out"}, - {61, "ECONNREFUSED", "connection refused"}, - {62, "ELOOP", "too many levels of symbolic links"}, - {63, "ENAMETOOLONG", "file name too long"}, - {64, "EHOSTDOWN", "host is down"}, - {65, "EHOSTUNREACH", "no route to host"}, - {66, "ENOTEMPTY", "directory not empty"}, - {67, "EPROCLIM", "too many processes"}, - {68, "EUSERS", "too many users"}, - {69, "EDQUOT", "disk quota exceeded"}, - {70, "ESTALE", "stale NFS file handle"}, - {71, "EREMOTE", "too many levels of remote in path"}, - {72, "EBADRPC", "RPC struct is bad"}, - {73, "ERPCMISMATCH", "RPC version wrong"}, - {74, "EPROGUNAVAIL", "RPC program not available"}, - {75, "EPROGMISMATCH", "program version wrong"}, - {76, "EPROCUNAVAIL", "bad procedure for program"}, - {77, "ENOLCK", "no locks available"}, - {78, "ENOSYS", "function not implemented"}, - {79, "EFTYPE", "inappropriate file type or format"}, - {80, "EAUTH", "authentication error"}, - {81, "ENEEDAUTH", "need authenticator"}, - {82, "EIPSEC", "IPsec processing failure"}, - {83, "ENOATTR", "attribute not found"}, - {84, "EILSEQ", "illegal byte sequence"}, - {85, "ENOMEDIUM", "no medium found"}, - {86, "EMEDIUMTYPE", "wrong medium type"}, - {87, "EOVERFLOW", "value too large to be stored in data type"}, - {88, "ECANCELED", "operation canceled"}, - {89, "EIDRM", "identifier removed"}, - {90, "ENOMSG", "no message of desired type"}, - {91, "ENOTSUP", "not supported"}, - {92, "EBADMSG", "bad message"}, - {93, "ENOTRECOVERABLE", "state not recoverable"}, - {94, "EOWNERDEAD", "previous owner died"}, - {95, "ELAST", "protocol error"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, - {6, "SIGABRT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGURG", "urgent I/O condition"}, - {17, "SIGSTOP", "suspended (signal)"}, - {18, "SIGTSTP", "suspended"}, - {19, "SIGCONT", "continued"}, - {20, "SIGCHLD", "child exited"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGIO", "I/O possible"}, - {24, "SIGXCPU", "cputime limit exceeded"}, - {25, "SIGXFSZ", "filesize limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window size changes"}, - {29, "SIGINFO", "information request"}, - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, - {32, "SIGTHR", "thread AST"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go deleted file mode 100644 index aef6c08..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go +++ /dev/null @@ -1,1670 +0,0 @@ -// mkerrors.sh -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm && openbsd -// +build arm,openbsd - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- _const.go - -package unix - -import "syscall" - -const ( - AF_APPLETALK = 0x10 - AF_BLUETOOTH = 0x20 - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1a - AF_ECMA = 0x8 - AF_ENCAP = 0x1c - AF_HYLINK = 0xf - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x18 - AF_IPX = 0x17 - AF_ISDN = 0x1a - AF_ISO = 0x7 - AF_KEY = 0x1e - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x24 - AF_MPLS = 0x21 - AF_NATM = 0x1b - AF_NS = 0x6 - AF_OSI = 0x7 - AF_PUP = 0x4 - AF_ROUTE = 0x11 - AF_SIP = 0x1d - AF_SNA = 0xb - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - ARPHRD_ETHER = 0x1 - ARPHRD_FRELAY = 0xf - ARPHRD_IEEE1394 = 0x18 - ARPHRD_IEEE802 = 0x6 - B0 = 0x0 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B230400 = 0x38400 - B2400 = 0x960 - B28800 = 0x7080 - B300 = 0x12c - B38400 = 0x9600 - B4800 = 0x12c0 - B50 = 0x32 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B9600 = 0x2580 - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDIRFILT = 0x4004427c - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc008427b - BIOCGETIF = 0x4020426b - BIOCGFILDROP = 0x40044278 - BIOCGHDRCMPLT = 0x40044274 - BIOCGRSIG = 0x40044273 - BIOCGRTIMEOUT = 0x400c426e - BIOCGSTATS = 0x4008426f - BIOCIMMEDIATE = 0x80044270 - BIOCLOCK = 0x20004276 - BIOCPROMISC = 0x20004269 - BIOCSBLEN = 0xc0044266 - BIOCSDIRFILT = 0x8004427d - BIOCSDLT = 0x8004427a - BIOCSETF = 0x80084267 - BIOCSETIF = 0x8020426c - BIOCSETWF = 0x80084277 - BIOCSFILDROP = 0x80044279 - BIOCSHDRCMPLT = 0x80044275 - BIOCSRSIG = 0x80044272 - BIOCSRTIMEOUT = 0x800c426d - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x4 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_DIRECTION_IN = 0x1 - BPF_DIRECTION_OUT = 0x2 - BPF_DIV = 0x30 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x200000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_W = 0x0 - BPF_X = 0x8 - BRKINT = 0x2 - CFLUSH = 0xf - CLOCAL = 0x8000 - CPUSTATES = 0x6 - CP_IDLE = 0x5 - CP_INTR = 0x4 - CP_NICE = 0x1 - CP_SPIN = 0x3 - CP_SYS = 0x2 - CP_USER = 0x0 - CREAD = 0x800 - CRTSCTS = 0x10000 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0xff - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTL_HW = 0x6 - CTL_KERN = 0x1 - CTL_MAXNAME = 0xc - CTL_NET = 0x4 - DIOCOSFPFLUSH = 0x2000444e - DLT_ARCNET = 0x7 - DLT_ATM_RFC1483 = 0xb - DLT_AX25 = 0x3 - DLT_CHAOS = 0x5 - DLT_C_HDLC = 0x68 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0xd - DLT_FDDI = 0xa - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_LOOP = 0xc - DLT_MPLS = 0xdb - DLT_NULL = 0x0 - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x12 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0x10 - DLT_PPP_ETHER = 0x33 - DLT_PPP_SERIAL = 0x32 - DLT_PRONET = 0x4 - DLT_RAW = 0xe - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xf - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EMT_TAGOVF = 0x1 - EMUL_ENABLED = 0x1 - EMUL_NATIVE = 0x2 - ENDRUNDISC = 0x9 - ETHERMIN = 0x2e - ETHERMTU = 0x5dc - ETHERTYPE_8023 = 0x4 - ETHERTYPE_AARP = 0x80f3 - ETHERTYPE_ACCTON = 0x8390 - ETHERTYPE_AEONIC = 0x8036 - ETHERTYPE_ALPHA = 0x814a - ETHERTYPE_AMBER = 0x6008 - ETHERTYPE_AMOEBA = 0x8145 - ETHERTYPE_AOE = 0x88a2 - ETHERTYPE_APOLLO = 0x80f7 - ETHERTYPE_APOLLODOMAIN = 0x8019 - ETHERTYPE_APPLETALK = 0x809b - ETHERTYPE_APPLITEK = 0x80c7 - ETHERTYPE_ARGONAUT = 0x803a - ETHERTYPE_ARP = 0x806 - ETHERTYPE_AT = 0x809b - ETHERTYPE_ATALK = 0x809b - ETHERTYPE_ATOMIC = 0x86df - ETHERTYPE_ATT = 0x8069 - ETHERTYPE_ATTSTANFORD = 0x8008 - ETHERTYPE_AUTOPHON = 0x806a - ETHERTYPE_AXIS = 0x8856 - ETHERTYPE_BCLOOP = 0x9003 - ETHERTYPE_BOFL = 0x8102 - ETHERTYPE_CABLETRON = 0x7034 - ETHERTYPE_CHAOS = 0x804 - ETHERTYPE_COMDESIGN = 0x806c - ETHERTYPE_COMPUGRAPHIC = 0x806d - ETHERTYPE_COUNTERPOINT = 0x8062 - ETHERTYPE_CRONUS = 0x8004 - ETHERTYPE_CRONUSVLN = 0x8003 - ETHERTYPE_DCA = 0x1234 - ETHERTYPE_DDE = 0x807b - ETHERTYPE_DEBNI = 0xaaaa - ETHERTYPE_DECAM = 0x8048 - ETHERTYPE_DECCUST = 0x6006 - ETHERTYPE_DECDIAG = 0x6005 - ETHERTYPE_DECDNS = 0x803c - ETHERTYPE_DECDTS = 0x803e - ETHERTYPE_DECEXPER = 0x6000 - ETHERTYPE_DECLAST = 0x8041 - ETHERTYPE_DECLTM = 0x803f - ETHERTYPE_DECMUMPS = 0x6009 - ETHERTYPE_DECNETBIOS = 0x8040 - ETHERTYPE_DELTACON = 0x86de - ETHERTYPE_DIDDLE = 0x4321 - ETHERTYPE_DLOG1 = 0x660 - ETHERTYPE_DLOG2 = 0x661 - ETHERTYPE_DN = 0x6003 - ETHERTYPE_DOGFIGHT = 0x1989 - ETHERTYPE_DSMD = 0x8039 - ETHERTYPE_ECMA = 0x803 - ETHERTYPE_ENCRYPT = 0x803d - ETHERTYPE_ES = 0x805d - ETHERTYPE_EXCELAN = 0x8010 - ETHERTYPE_EXPERDATA = 0x8049 - ETHERTYPE_FLIP = 0x8146 - ETHERTYPE_FLOWCONTROL = 0x8808 - ETHERTYPE_FRARP = 0x808 - ETHERTYPE_GENDYN = 0x8068 - ETHERTYPE_HAYES = 0x8130 - ETHERTYPE_HIPPI_FP = 0x8180 - ETHERTYPE_HITACHI = 0x8820 - ETHERTYPE_HP = 0x8005 - ETHERTYPE_IEEEPUP = 0xa00 - ETHERTYPE_IEEEPUPAT = 0xa01 - ETHERTYPE_IMLBL = 0x4c42 - ETHERTYPE_IMLBLDIAG = 0x424c - ETHERTYPE_IP = 0x800 - ETHERTYPE_IPAS = 0x876c - ETHERTYPE_IPV6 = 0x86dd - ETHERTYPE_IPX = 0x8137 - ETHERTYPE_IPXNEW = 0x8037 - ETHERTYPE_KALPANA = 0x8582 - ETHERTYPE_LANBRIDGE = 0x8038 - ETHERTYPE_LANPROBE = 0x8888 - ETHERTYPE_LAT = 0x6004 - ETHERTYPE_LBACK = 0x9000 - ETHERTYPE_LITTLE = 0x8060 - ETHERTYPE_LLDP = 0x88cc - ETHERTYPE_LOGICRAFT = 0x8148 - ETHERTYPE_LOOPBACK = 0x9000 - ETHERTYPE_MATRA = 0x807a - ETHERTYPE_MAX = 0xffff - ETHERTYPE_MERIT = 0x807c - ETHERTYPE_MICP = 0x873a - ETHERTYPE_MOPDL = 0x6001 - ETHERTYPE_MOPRC = 0x6002 - ETHERTYPE_MOTOROLA = 0x818d - ETHERTYPE_MPLS = 0x8847 - ETHERTYPE_MPLS_MCAST = 0x8848 - ETHERTYPE_MUMPS = 0x813f - ETHERTYPE_NBPCC = 0x3c04 - ETHERTYPE_NBPCLAIM = 0x3c09 - ETHERTYPE_NBPCLREQ = 0x3c05 - ETHERTYPE_NBPCLRSP = 0x3c06 - ETHERTYPE_NBPCREQ = 0x3c02 - ETHERTYPE_NBPCRSP = 0x3c03 - ETHERTYPE_NBPDG = 0x3c07 - ETHERTYPE_NBPDGB = 0x3c08 - ETHERTYPE_NBPDLTE = 0x3c0a - ETHERTYPE_NBPRAR = 0x3c0c - ETHERTYPE_NBPRAS = 0x3c0b - ETHERTYPE_NBPRST = 0x3c0d - ETHERTYPE_NBPSCD = 0x3c01 - ETHERTYPE_NBPVCD = 0x3c00 - ETHERTYPE_NBS = 0x802 - ETHERTYPE_NCD = 0x8149 - ETHERTYPE_NESTAR = 0x8006 - ETHERTYPE_NETBEUI = 0x8191 - ETHERTYPE_NOVELL = 0x8138 - ETHERTYPE_NS = 0x600 - ETHERTYPE_NSAT = 0x601 - ETHERTYPE_NSCOMPAT = 0x807 - ETHERTYPE_NTRAILER = 0x10 - ETHERTYPE_OS9 = 0x7007 - ETHERTYPE_OS9NET = 0x7009 - ETHERTYPE_PACER = 0x80c6 - ETHERTYPE_PAE = 0x888e - ETHERTYPE_PCS = 0x4242 - ETHERTYPE_PLANNING = 0x8044 - ETHERTYPE_PPP = 0x880b - ETHERTYPE_PPPOE = 0x8864 - ETHERTYPE_PPPOEDISC = 0x8863 - ETHERTYPE_PRIMENTS = 0x7031 - ETHERTYPE_PUP = 0x200 - ETHERTYPE_PUPAT = 0x200 - ETHERTYPE_QINQ = 0x88a8 - ETHERTYPE_RACAL = 0x7030 - ETHERTYPE_RATIONAL = 0x8150 - ETHERTYPE_RAWFR = 0x6559 - ETHERTYPE_RCL = 0x1995 - ETHERTYPE_RDP = 0x8739 - ETHERTYPE_RETIX = 0x80f2 - ETHERTYPE_REVARP = 0x8035 - ETHERTYPE_SCA = 0x6007 - ETHERTYPE_SECTRA = 0x86db - ETHERTYPE_SECUREDATA = 0x876d - ETHERTYPE_SGITW = 0x817e - ETHERTYPE_SG_BOUNCE = 0x8016 - ETHERTYPE_SG_DIAG = 0x8013 - ETHERTYPE_SG_NETGAMES = 0x8014 - ETHERTYPE_SG_RESV = 0x8015 - ETHERTYPE_SIMNET = 0x5208 - ETHERTYPE_SLOW = 0x8809 - ETHERTYPE_SNA = 0x80d5 - ETHERTYPE_SNMP = 0x814c - ETHERTYPE_SONIX = 0xfaf5 - ETHERTYPE_SPIDER = 0x809f - ETHERTYPE_SPRITE = 0x500 - ETHERTYPE_STP = 0x8181 - ETHERTYPE_TALARIS = 0x812b - ETHERTYPE_TALARISMC = 0x852b - ETHERTYPE_TCPCOMP = 0x876b - ETHERTYPE_TCPSM = 0x9002 - ETHERTYPE_TEC = 0x814f - ETHERTYPE_TIGAN = 0x802f - ETHERTYPE_TRAIL = 0x1000 - ETHERTYPE_TRANSETHER = 0x6558 - ETHERTYPE_TYMSHARE = 0x802e - ETHERTYPE_UBBST = 0x7005 - ETHERTYPE_UBDEBUG = 0x900 - ETHERTYPE_UBDIAGLOOP = 0x7002 - ETHERTYPE_UBDL = 0x7000 - ETHERTYPE_UBNIU = 0x7001 - ETHERTYPE_UBNMC = 0x7003 - ETHERTYPE_VALID = 0x1600 - ETHERTYPE_VARIAN = 0x80dd - ETHERTYPE_VAXELN = 0x803b - ETHERTYPE_VEECO = 0x8067 - ETHERTYPE_VEXP = 0x805b - ETHERTYPE_VGLAB = 0x8131 - ETHERTYPE_VINES = 0xbad - ETHERTYPE_VINESECHO = 0xbaf - ETHERTYPE_VINESLOOP = 0xbae - ETHERTYPE_VITAL = 0xff00 - ETHERTYPE_VLAN = 0x8100 - ETHERTYPE_VLTLMAN = 0x8080 - ETHERTYPE_VPROD = 0x805c - ETHERTYPE_VURESERVED = 0x8147 - ETHERTYPE_WATERLOO = 0x8130 - ETHERTYPE_WELLFLEET = 0x8103 - ETHERTYPE_X25 = 0x805 - ETHERTYPE_X75 = 0x801 - ETHERTYPE_XNSSM = 0x9001 - ETHERTYPE_XTP = 0x817d - ETHER_ADDR_LEN = 0x6 - ETHER_ALIGN = 0x2 - ETHER_CRC_LEN = 0x4 - ETHER_CRC_POLY_BE = 0x4c11db6 - ETHER_CRC_POLY_LE = 0xedb88320 - ETHER_HDR_LEN = 0xe - ETHER_MAX_DIX_LEN = 0x600 - ETHER_MAX_LEN = 0x5ee - ETHER_MIN_LEN = 0x40 - ETHER_TYPE_LEN = 0x2 - ETHER_VLAN_ENCAP_LEN = 0x4 - EVFILT_AIO = -0x3 - EVFILT_PROC = -0x5 - EVFILT_READ = -0x1 - EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0x7 - EVFILT_TIMER = -0x7 - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG1 = 0x2000 - EV_ONESHOT = 0x10 - EV_SYSFLAGS = 0xf000 - EXTA = 0x4b00 - EXTB = 0x9600 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x400 - FLUSHO = 0x800000 - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0xa - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0x7 - F_GETOWN = 0x5 - F_RDLCK = 0x1 - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0x8 - F_SETLKW = 0x9 - F_SETOWN = 0x6 - F_UNLCK = 0x2 - F_WRLCK = 0x3 - HUPCL = 0x4000 - HW_MACHINE = 0x1 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFAN_ARRIVAL = 0x0 - IFAN_DEPARTURE = 0x1 - IFA_ROUTE = 0x1 - IFF_ALLMULTI = 0x200 - IFF_BROADCAST = 0x2 - IFF_CANTCHANGE = 0x8e52 - IFF_DEBUG = 0x4 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_NOTRAILERS = 0x20 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PROMISC = 0x100 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_1822 = 0x2 - IFT_A12MPPSWITCH = 0x82 - IFT_AAL2 = 0xbb - IFT_AAL5 = 0x31 - IFT_ADSL = 0x5e - IFT_AFLANE8023 = 0x3b - IFT_AFLANE8025 = 0x3c - IFT_ARAP = 0x58 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ASYNC = 0x54 - IFT_ATM = 0x25 - IFT_ATMDXI = 0x69 - IFT_ATMFUNI = 0x6a - IFT_ATMIMA = 0x6b - IFT_ATMLOGICAL = 0x50 - IFT_ATMRADIO = 0xbd - IFT_ATMSUBINTERFACE = 0x86 - IFT_ATMVCIENDPT = 0xc2 - IFT_ATMVIRTUAL = 0x95 - IFT_BGPPOLICYACCOUNTING = 0xa2 - IFT_BLUETOOTH = 0xf8 - IFT_BRIDGE = 0xd1 - IFT_BSC = 0x53 - IFT_CARP = 0xf7 - IFT_CCTEMUL = 0x3d - IFT_CEPT = 0x13 - IFT_CES = 0x85 - IFT_CHANNEL = 0x46 - IFT_CNR = 0x55 - IFT_COFFEE = 0x84 - IFT_COMPOSITELINK = 0x9b - IFT_DCN = 0x8d - IFT_DIGITALPOWERLINE = 0x8a - IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba - IFT_DLSW = 0x4a - IFT_DOCSCABLEDOWNSTREAM = 0x80 - IFT_DOCSCABLEMACLAYER = 0x7f - IFT_DOCSCABLEUPSTREAM = 0x81 - IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd - IFT_DS0 = 0x51 - IFT_DS0BUNDLE = 0x52 - IFT_DS1FDL = 0xaa - IFT_DS3 = 0x1e - IFT_DTM = 0x8c - IFT_DUMMY = 0xf1 - IFT_DVBASILN = 0xac - IFT_DVBASIOUT = 0xad - IFT_DVBRCCDOWNSTREAM = 0x93 - IFT_DVBRCCMACLAYER = 0x92 - IFT_DVBRCCUPSTREAM = 0x94 - IFT_ECONET = 0xce - IFT_ENC = 0xf4 - IFT_EON = 0x19 - IFT_EPLRS = 0x57 - IFT_ESCON = 0x49 - IFT_ETHER = 0x6 - IFT_FAITH = 0xf3 - IFT_FAST = 0x7d - IFT_FASTETHER = 0x3e - IFT_FASTETHERFX = 0x45 - IFT_FDDI = 0xf - IFT_FIBRECHANNEL = 0x38 - IFT_FRAMERELAYINTERCONNECT = 0x3a - IFT_FRAMERELAYMPI = 0x5c - IFT_FRDLCIENDPT = 0xc1 - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_FRF16MFRBUNDLE = 0xa3 - IFT_FRFORWARD = 0x9e - IFT_G703AT2MB = 0x43 - IFT_G703AT64K = 0x42 - IFT_GIF = 0xf0 - IFT_GIGABITETHERNET = 0x75 - IFT_GR303IDT = 0xb2 - IFT_GR303RDT = 0xb1 - IFT_H323GATEKEEPER = 0xa4 - IFT_H323PROXY = 0xa5 - IFT_HDH1822 = 0x3 - IFT_HDLC = 0x76 - IFT_HDSL2 = 0xa8 - IFT_HIPERLAN2 = 0xb7 - IFT_HIPPI = 0x2f - IFT_HIPPIINTERFACE = 0x39 - IFT_HOSTPAD = 0x5a - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IBM370PARCHAN = 0x48 - IFT_IDSL = 0x9a - IFT_IEEE1394 = 0x90 - IFT_IEEE80211 = 0x47 - IFT_IEEE80212 = 0x37 - IFT_IEEE8023ADLAG = 0xa1 - IFT_IFGSN = 0x91 - IFT_IMT = 0xbe - IFT_INFINIBAND = 0xc7 - IFT_INTERLEAVE = 0x7c - IFT_IP = 0x7e - IFT_IPFORWARD = 0x8e - IFT_IPOVERATM = 0x72 - IFT_IPOVERCDLC = 0x6d - IFT_IPOVERCLAW = 0x6e - IFT_IPSWITCH = 0x4e - IFT_ISDN = 0x3f - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISDNS = 0x4b - IFT_ISDNU = 0x4c - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88025CRFPINT = 0x62 - IFT_ISO88025DTR = 0x56 - IFT_ISO88025FIBER = 0x73 - IFT_ISO88026 = 0xa - IFT_ISUP = 0xb3 - IFT_L2VLAN = 0x87 - IFT_L3IPVLAN = 0x88 - IFT_L3IPXVLAN = 0x89 - IFT_LAPB = 0x10 - IFT_LAPD = 0x4d - IFT_LAPF = 0x77 - IFT_LINEGROUP = 0xd2 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MEDIAMAILOVERIP = 0x8b - IFT_MFSIGLINK = 0xa7 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_MPC = 0x71 - IFT_MPLS = 0xa6 - IFT_MPLSTUNNEL = 0x96 - IFT_MSDSL = 0x8f - IFT_MVL = 0xbf - IFT_MYRINET = 0x63 - IFT_NFAS = 0xaf - IFT_NSIP = 0x1b - IFT_OPTICALCHANNEL = 0xc3 - IFT_OPTICALTRANSPORT = 0xc4 - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PFLOG = 0xf5 - IFT_PFLOW = 0xf9 - IFT_PFSYNC = 0xf6 - IFT_PLC = 0xae - IFT_PON155 = 0xcf - IFT_PON622 = 0xd0 - IFT_POS = 0xab - IFT_PPP = 0x17 - IFT_PPPMULTILINKBUNDLE = 0x6c - IFT_PROPATM = 0xc5 - IFT_PROPBWAP2MP = 0xb8 - IFT_PROPCNLS = 0x59 - IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 - IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 - IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 - IFT_PROPMUX = 0x36 - IFT_PROPVIRTUAL = 0x35 - IFT_PROPWIRELESSP2P = 0x9d - IFT_PTPSERIAL = 0x16 - IFT_PVC = 0xf2 - IFT_Q2931 = 0xc9 - IFT_QLLC = 0x44 - IFT_RADIOMAC = 0xbc - IFT_RADSL = 0x5f - IFT_REACHDSL = 0xc0 - IFT_RFC1483 = 0x9f - IFT_RS232 = 0x21 - IFT_RSRB = 0x4f - IFT_SDLC = 0x11 - IFT_SDSL = 0x60 - IFT_SHDSL = 0xa9 - IFT_SIP = 0x1f - IFT_SIPSIG = 0xcc - IFT_SIPTG = 0xcb - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SONET = 0x27 - IFT_SONETOVERHEADCHANNEL = 0xb9 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_SRP = 0x97 - IFT_SS7SIGLINK = 0x9c - IFT_STACKTOSTACK = 0x6f - IFT_STARLAN = 0xb - IFT_T1 = 0x12 - IFT_TDLC = 0x74 - IFT_TELINK = 0xc8 - IFT_TERMPAD = 0x5b - IFT_TR008 = 0xb0 - IFT_TRANSPHDLC = 0x7b - IFT_TUNNEL = 0x83 - IFT_ULTRA = 0x1d - IFT_USB = 0xa0 - IFT_V11 = 0x40 - IFT_V35 = 0x2d - IFT_V36 = 0x41 - IFT_V37 = 0x78 - IFT_VDSL = 0x61 - IFT_VIRTUALIPADDRESS = 0x70 - IFT_VIRTUALTG = 0xca - IFT_VOICEDID = 0xd5 - IFT_VOICEEM = 0x64 - IFT_VOICEEMFGD = 0xd3 - IFT_VOICEENCAP = 0x67 - IFT_VOICEFGDEANA = 0xd4 - IFT_VOICEFXO = 0x65 - IFT_VOICEFXS = 0x66 - IFT_VOICEOVERATM = 0x98 - IFT_VOICEOVERCABLE = 0xc6 - IFT_VOICEOVERFRAMERELAY = 0x99 - IFT_VOICEOVERIP = 0x68 - IFT_X213 = 0x5d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25HUNTGROUP = 0x7a - IFT_X25MLP = 0x79 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LOOPBACKNET = 0x7f - IN_RFC3021_HOST = 0x1 - IN_RFC3021_NET = 0xfffffffe - IN_RFC3021_NSHIFT = 0x1f - IPPROTO_AH = 0x33 - IPPROTO_CARP = 0x70 - IPPROTO_DIVERT = 0x102 - IPPROTO_DIVERT_INIT = 0x2 - IPPROTO_DIVERT_RESP = 0x1 - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GRE = 0x2f - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IGMP = 0x2 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPIP = 0x4 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_MAX = 0x100 - IPPROTO_MAXID = 0x103 - IPPROTO_MOBILE = 0x37 - IPPROTO_MPLS = 0x89 - IPPROTO_NONE = 0x3b - IPPROTO_PFSYNC = 0xf0 - IPPROTO_PIM = 0x67 - IPPROTO_PUP = 0xc - IPPROTO_RAW = 0xff - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_TCP = 0x6 - IPPROTO_TP = 0x1d - IPPROTO_UDP = 0x11 - IPV6_AUTH_LEVEL = 0x35 - IPV6_AUTOFLOWLABEL = 0x3b - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_DONTFRAG = 0x3e - IPV6_DSTOPTS = 0x32 - IPV6_ESP_NETWORK_LEVEL = 0x37 - IPV6_ESP_TRANS_LEVEL = 0x36 - IPV6_FAITH = 0x1d - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FRAGTTL = 0x78 - IPV6_HLIMDEC = 0x1 - IPV6_HOPLIMIT = 0x2f - IPV6_HOPOPTS = 0x31 - IPV6_IPCOMP_LEVEL = 0x3c - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXPACKET = 0xffff - IPV6_MMTU = 0x500 - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_OPTIONS = 0x1 - IPV6_PATHMTU = 0x2c - IPV6_PIPEX = 0x3f - IPV6_PKTINFO = 0x2e - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_RECVDSTOPTS = 0x28 - IPV6_RECVDSTPORT = 0x40 - IPV6_RECVHOPLIMIT = 0x25 - IPV6_RECVHOPOPTS = 0x27 - IPV6_RECVPATHMTU = 0x2b - IPV6_RECVPKTINFO = 0x24 - IPV6_RECVRTHDR = 0x26 - IPV6_RECVTCLASS = 0x39 - IPV6_RTABLE = 0x1021 - IPV6_RTHDR = 0x33 - IPV6_RTHDRDSTOPTS = 0x23 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x3d - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2a - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IP_ADD_MEMBERSHIP = 0xc - IP_AUTH_LEVEL = 0x14 - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DIVERTFL = 0x1022 - IP_DROP_MEMBERSHIP = 0xd - IP_ESP_NETWORK_LEVEL = 0x16 - IP_ESP_TRANS_LEVEL = 0x15 - IP_HDRINCL = 0x2 - IP_IPCOMP_LEVEL = 0x1d - IP_IPSECFLOWINFO = 0x24 - IP_IPSEC_LOCAL_AUTH = 0x1b - IP_IPSEC_LOCAL_CRED = 0x19 - IP_IPSEC_LOCAL_ID = 0x17 - IP_IPSEC_REMOTE_AUTH = 0x1c - IP_IPSEC_REMOTE_CRED = 0x1a - IP_IPSEC_REMOTE_ID = 0x18 - IP_MAXPACKET = 0xffff - IP_MAX_MEMBERSHIPS = 0xfff - IP_MF = 0x2000 - IP_MINTTL = 0x20 - IP_MIN_MEMBERSHIPS = 0xf - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_OFFMASK = 0x1fff - IP_OPTIONS = 0x1 - IP_PIPEX = 0x22 - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVDSTPORT = 0x21 - IP_RECVIF = 0x1e - IP_RECVOPTS = 0x5 - IP_RECVRETOPTS = 0x6 - IP_RECVRTABLE = 0x23 - IP_RECVTTL = 0x1f - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_RTABLE = 0x1021 - IP_TOS = 0x3 - IP_TTL = 0x4 - ISIG = 0x80 - ISTRIP = 0x20 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - KERN_HOSTNAME = 0xa - KERN_OSRELEASE = 0x2 - KERN_OSTYPE = 0x1 - KERN_VERSION = 0x4 - LCNT_OVERLOAD_FLUSH = 0x6 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x6 - MADV_NORMAL = 0x0 - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_SPACEAVAIL = 0x5 - MADV_WILLNEED = 0x3 - MAP_ANON = 0x1000 - MAP_ANONYMOUS = 0x1000 - MAP_CONCEAL = 0x8000 - MAP_COPY = 0x2 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_FLAGMASK = 0xfff7 - MAP_HASSEMAPHORE = 0x0 - MAP_INHERIT = 0x0 - MAP_INHERIT_COPY = 0x1 - MAP_INHERIT_NONE = 0x2 - MAP_INHERIT_SHARE = 0x0 - MAP_INHERIT_ZERO = 0x3 - MAP_NOEXTEND = 0x0 - MAP_NORESERVE = 0x0 - MAP_PRIVATE = 0x2 - MAP_RENAME = 0x0 - MAP_SHARED = 0x1 - MAP_STACK = 0x4000 - MAP_TRYFIXED = 0x0 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MNT_ASYNC = 0x40 - MNT_DEFEXPORTED = 0x200 - MNT_DELEXPORT = 0x20000 - MNT_DOOMED = 0x8000000 - MNT_EXPORTANON = 0x400 - MNT_EXPORTED = 0x100 - MNT_EXRDONLY = 0x80 - MNT_FORCE = 0x80000 - MNT_LAZY = 0x3 - MNT_LOCAL = 0x1000 - MNT_NOATIME = 0x8000 - MNT_NODEV = 0x10 - MNT_NOEXEC = 0x4 - MNT_NOSUID = 0x8 - MNT_NOWAIT = 0x2 - MNT_QUOTA = 0x2000 - MNT_RDONLY = 0x1 - MNT_RELOAD = 0x40000 - MNT_ROOTFS = 0x4000 - MNT_SOFTDEP = 0x4000000 - MNT_SYNCHRONOUS = 0x2 - MNT_UPDATE = 0x10000 - MNT_VISFLAGMASK = 0x400ffff - MNT_WAIT = 0x1 - MNT_WANTRDWR = 0x2000000 - MNT_WXALLOWED = 0x800 - MSG_BCAST = 0x100 - MSG_CMSG_CLOEXEC = 0x800 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOR = 0x8 - MSG_MCAST = 0x200 - MSG_NOSIGNAL = 0x400 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x4 - MS_SYNC = 0x2 - NAME_MAX = 0xff - NET_RT_DUMP = 0x1 - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x3 - NET_RT_MAXID = 0x6 - NET_RT_STATS = 0x4 - NET_RT_TABLE = 0x5 - NFDBITS = 0x20 - NOFLSH = 0x80000000 - NOTE_ATTRIB = 0x8 - NOTE_CHILD = 0x4 - NOTE_DELETE = 0x1 - NOTE_EOF = 0x2 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXTEND = 0x4 - NOTE_FORK = 0x40000000 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_PCTRLMASK = 0xf0000000 - NOTE_PDATAMASK = 0xfffff - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_TRUNCATE = 0x80 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - ONLCR = 0x2 - ONLRET = 0x80 - ONOCR = 0x40 - ONOEOT = 0x8 - OPOST = 0x1 - O_ACCMODE = 0x3 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x10000 - O_CREAT = 0x200 - O_DIRECTORY = 0x20000 - O_DSYNC = 0x80 - O_EXCL = 0x800 - O_EXLOCK = 0x20 - O_FSYNC = 0x80 - O_NDELAY = 0x4 - O_NOCTTY = 0x8000 - O_NOFOLLOW = 0x100 - O_NONBLOCK = 0x4 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_RSYNC = 0x80 - O_SHLOCK = 0x10 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PF_FLUSH = 0x1 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_MEMLOCK = 0x6 - RLIMIT_NOFILE = 0x8 - RLIMIT_NPROC = 0x7 - RLIMIT_RSS = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_LABEL = 0xa - RTAX_MAX = 0xb - RTAX_NETMASK = 0x2 - RTAX_SRC = 0x8 - RTAX_SRCMASK = 0x9 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_LABEL = 0x400 - RTA_NETMASK = 0x4 - RTA_SRC = 0x100 - RTA_SRCMASK = 0x200 - RTF_ANNOUNCE = 0x4000 - RTF_BLACKHOLE = 0x1000 - RTF_BROADCAST = 0x400000 - RTF_CLONED = 0x10000 - RTF_CLONING = 0x100 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_FMASK = 0x70f808 - RTF_GATEWAY = 0x2 - RTF_HOST = 0x4 - RTF_LLINFO = 0x400 - RTF_LOCAL = 0x200000 - RTF_MASK = 0x80 - RTF_MODIFIED = 0x20 - RTF_MPATH = 0x40000 - RTF_MPLS = 0x100000 - RTF_PERMANENT_ARP = 0x2000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_PROTO3 = 0x2000 - RTF_REJECT = 0x8 - RTF_STATIC = 0x800 - RTF_UP = 0x1 - RTF_USETRAILERS = 0x8000 - RTF_XRESOLVE = 0x200 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_DESYNC = 0x10 - RTM_GET = 0x4 - RTM_IFANNOUNCE = 0xf - RTM_IFINFO = 0xe - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MAXSIZE = 0x800 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RT_TABLEID_MAX = 0xff - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - RUSAGE_THREAD = 0x1 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x4 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80206931 - SIOCAIFADDR = 0x8040691a - SIOCAIFGROUP = 0x80246987 - SIOCALIFADDR = 0x8218691c - SIOCATMARK = 0x40047307 - SIOCBRDGADD = 0x8054693c - SIOCBRDGADDS = 0x80546941 - SIOCBRDGARL = 0x806e694d - SIOCBRDGDADDR = 0x81286947 - SIOCBRDGDEL = 0x8054693d - SIOCBRDGDELS = 0x80546942 - SIOCBRDGFLUSH = 0x80546948 - SIOCBRDGFRL = 0x806e694e - SIOCBRDGGCACHE = 0xc0146941 - SIOCBRDGGFD = 0xc0146952 - SIOCBRDGGHT = 0xc0146951 - SIOCBRDGGIFFLGS = 0xc054693e - SIOCBRDGGMA = 0xc0146953 - SIOCBRDGGPARAM = 0xc03c6958 - SIOCBRDGGPRI = 0xc0146950 - SIOCBRDGGRL = 0xc028694f - SIOCBRDGGSIFS = 0xc054693c - SIOCBRDGGTO = 0xc0146946 - SIOCBRDGIFS = 0xc0546942 - SIOCBRDGRTS = 0xc0186943 - SIOCBRDGSADDR = 0xc1286944 - SIOCBRDGSCACHE = 0x80146940 - SIOCBRDGSFD = 0x80146952 - SIOCBRDGSHT = 0x80146951 - SIOCBRDGSIFCOST = 0x80546955 - SIOCBRDGSIFFLGS = 0x8054693f - SIOCBRDGSIFPRIO = 0x80546954 - SIOCBRDGSMA = 0x80146953 - SIOCBRDGSPRI = 0x80146950 - SIOCBRDGSPROTO = 0x8014695a - SIOCBRDGSTO = 0x80146945 - SIOCBRDGSTXHC = 0x80146959 - SIOCDELMULTI = 0x80206932 - SIOCDIFADDR = 0x80206919 - SIOCDIFGROUP = 0x80246989 - SIOCDIFPHYADDR = 0x80206949 - SIOCDLIFADDR = 0x8218691e - SIOCGETKALIVE = 0xc01869a4 - SIOCGETLABEL = 0x8020699a - SIOCGETPFLOW = 0xc02069fe - SIOCGETPFSYNC = 0xc02069f8 - SIOCGETSGCNT = 0xc0147534 - SIOCGETVIFCNT = 0xc0147533 - SIOCGETVLAN = 0xc0206990 - SIOCGHIWAT = 0x40047301 - SIOCGIFADDR = 0xc0206921 - SIOCGIFASYNCMAP = 0xc020697c - SIOCGIFBRDADDR = 0xc0206923 - SIOCGIFCONF = 0xc0086924 - SIOCGIFDATA = 0xc020691b - SIOCGIFDESCR = 0xc0206981 - SIOCGIFDSTADDR = 0xc0206922 - SIOCGIFFLAGS = 0xc0206911 - SIOCGIFGATTR = 0xc024698b - SIOCGIFGENERIC = 0xc020693a - SIOCGIFGMEMB = 0xc024698a - SIOCGIFGROUP = 0xc0246988 - SIOCGIFHARDMTU = 0xc02069a5 - SIOCGIFMEDIA = 0xc0286936 - SIOCGIFMETRIC = 0xc0206917 - SIOCGIFMTU = 0xc020697e - SIOCGIFNETMASK = 0xc0206925 - SIOCGIFPDSTADDR = 0xc0206948 - SIOCGIFPRIORITY = 0xc020699c - SIOCGIFPSRCADDR = 0xc0206947 - SIOCGIFRDOMAIN = 0xc02069a0 - SIOCGIFRTLABEL = 0xc0206983 - SIOCGIFRXR = 0x802069aa - SIOCGIFTIMESLOT = 0xc0206986 - SIOCGIFXFLAGS = 0xc020699e - SIOCGLIFADDR = 0xc218691d - SIOCGLIFPHYADDR = 0xc218694b - SIOCGLIFPHYRTABLE = 0xc02069a2 - SIOCGLIFPHYTTL = 0xc02069a9 - SIOCGLOWAT = 0x40047303 - SIOCGPGRP = 0x40047309 - SIOCGSPPPPARAMS = 0xc0206994 - SIOCGVH = 0xc02069f6 - SIOCGVNETID = 0xc02069a7 - SIOCIFCREATE = 0x8020697a - SIOCIFDESTROY = 0x80206979 - SIOCIFGCLONERS = 0xc00c6978 - SIOCSETKALIVE = 0x801869a3 - SIOCSETLABEL = 0x80206999 - SIOCSETPFLOW = 0x802069fd - SIOCSETPFSYNC = 0x802069f7 - SIOCSETVLAN = 0x8020698f - SIOCSHIWAT = 0x80047300 - SIOCSIFADDR = 0x8020690c - SIOCSIFASYNCMAP = 0x8020697d - SIOCSIFBRDADDR = 0x80206913 - SIOCSIFDESCR = 0x80206980 - SIOCSIFDSTADDR = 0x8020690e - SIOCSIFFLAGS = 0x80206910 - SIOCSIFGATTR = 0x8024698c - SIOCSIFGENERIC = 0x80206939 - SIOCSIFLLADDR = 0x8020691f - SIOCSIFMEDIA = 0xc0206935 - SIOCSIFMETRIC = 0x80206918 - SIOCSIFMTU = 0x8020697f - SIOCSIFNETMASK = 0x80206916 - SIOCSIFPHYADDR = 0x80406946 - SIOCSIFPRIORITY = 0x8020699b - SIOCSIFRDOMAIN = 0x8020699f - SIOCSIFRTLABEL = 0x80206982 - SIOCSIFTIMESLOT = 0x80206985 - SIOCSIFXFLAGS = 0x8020699d - SIOCSLIFPHYADDR = 0x8218694a - SIOCSLIFPHYRTABLE = 0x802069a1 - SIOCSLIFPHYTTL = 0x802069a8 - SIOCSLOWAT = 0x80047302 - SIOCSPGRP = 0x80047308 - SIOCSSPPPPARAMS = 0x80206993 - SIOCSVH = 0xc02069f5 - SIOCSVNETID = 0x802069a6 - SOCK_CLOEXEC = 0x8000 - SOCK_DGRAM = 0x2 - SOCK_NONBLOCK = 0x4000 - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_BINDANY = 0x1000 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LINGER = 0x80 - SO_NETPROC = 0x1020 - SO_OOBINLINE = 0x100 - SO_PEERCRED = 0x1022 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_RTABLE = 0x1021 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_SPLICE = 0x1023 - SO_TIMESTAMP = 0x800 - SO_TYPE = 0x1008 - SO_USELOOPBACK = 0x40 - S_BLKSIZE = 0x200 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFLNK = 0xa000 - S_IFMT = 0xf000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISTXT = 0x200 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXGRP = 0x8 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - TCIFLUSH = 0x1 - TCIOFLUSH = 0x3 - TCOFLUSH = 0x2 - TCP_MAXBURST = 0x4 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x3 - TCP_MAX_WINSHIFT = 0xe - TCP_MD5SIG = 0x4 - TCP_MSS = 0x200 - TCP_NODELAY = 0x1 - TCP_NOPUSH = 0x10 - TCP_NSTATES = 0xb - TCP_SACK_ENABLE = 0x8 - TCSAFLUSH = 0x2 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCONS = 0x80047462 - TIOCDRAIN = 0x2000745e - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLAG_CLOCAL = 0x2 - TIOCFLAG_CRTSCTS = 0x4 - TIOCFLAG_MDMBUF = 0x8 - TIOCFLAG_PPS = 0x10 - TIOCFLAG_SOFTCAR = 0x1 - TIOCFLUSH = 0x80047410 - TIOCGETA = 0x402c7413 - TIOCGETD = 0x4004741a - TIOCGFLAGS = 0x4004745d - TIOCGPGRP = 0x40047477 - TIOCGSID = 0x40047463 - TIOCGTSTAMP = 0x400c745b - TIOCGWINSZ = 0x40087468 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGET = 0x4004746a - TIOCMODG = 0x4004746a - TIOCMODS = 0x8004746d - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCREMOTE = 0x80047469 - TIOCSBRK = 0x2000747b - TIOCSCTTY = 0x20007461 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x802c7414 - TIOCSETAF = 0x802c7416 - TIOCSETAW = 0x802c7415 - TIOCSETD = 0x8004741b - TIOCSFLAGS = 0x8004745c - TIOCSIG = 0x8004745f - TIOCSPGRP = 0x80047476 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x80047465 - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSTSTAMP = 0x8008745a - TIOCSWINSZ = 0x80087467 - TIOCUCNTL = 0x80047466 - TOSTOP = 0x400000 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VTIME = 0x11 - VWERASE = 0x4 - WALTSIG = 0x4 - WCONTINUED = 0x8 - WCOREFLAG = 0x80 - WNOHANG = 0x1 - WUNTRACED = 0x2 -) - -// Errors -const ( - E2BIG = syscall.Errno(0x7) - EACCES = syscall.Errno(0xd) - EADDRINUSE = syscall.Errno(0x30) - EADDRNOTAVAIL = syscall.Errno(0x31) - EAFNOSUPPORT = syscall.Errno(0x2f) - EAGAIN = syscall.Errno(0x23) - EALREADY = syscall.Errno(0x25) - EAUTH = syscall.Errno(0x50) - EBADF = syscall.Errno(0x9) - EBADRPC = syscall.Errno(0x48) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x58) - ECHILD = syscall.Errno(0xa) - ECONNABORTED = syscall.Errno(0x35) - ECONNREFUSED = syscall.Errno(0x3d) - ECONNRESET = syscall.Errno(0x36) - EDEADLK = syscall.Errno(0xb) - EDESTADDRREQ = syscall.Errno(0x27) - EDOM = syscall.Errno(0x21) - EDQUOT = syscall.Errno(0x45) - EEXIST = syscall.Errno(0x11) - EFAULT = syscall.Errno(0xe) - EFBIG = syscall.Errno(0x1b) - EFTYPE = syscall.Errno(0x4f) - EHOSTDOWN = syscall.Errno(0x40) - EHOSTUNREACH = syscall.Errno(0x41) - EIDRM = syscall.Errno(0x59) - EILSEQ = syscall.Errno(0x54) - EINPROGRESS = syscall.Errno(0x24) - EINTR = syscall.Errno(0x4) - EINVAL = syscall.Errno(0x16) - EIO = syscall.Errno(0x5) - EIPSEC = syscall.Errno(0x52) - EISCONN = syscall.Errno(0x38) - EISDIR = syscall.Errno(0x15) - ELAST = syscall.Errno(0x5b) - ELOOP = syscall.Errno(0x3e) - EMEDIUMTYPE = syscall.Errno(0x56) - EMFILE = syscall.Errno(0x18) - EMLINK = syscall.Errno(0x1f) - EMSGSIZE = syscall.Errno(0x28) - ENAMETOOLONG = syscall.Errno(0x3f) - ENEEDAUTH = syscall.Errno(0x51) - ENETDOWN = syscall.Errno(0x32) - ENETRESET = syscall.Errno(0x34) - ENETUNREACH = syscall.Errno(0x33) - ENFILE = syscall.Errno(0x17) - ENOATTR = syscall.Errno(0x53) - ENOBUFS = syscall.Errno(0x37) - ENODEV = syscall.Errno(0x13) - ENOENT = syscall.Errno(0x2) - ENOEXEC = syscall.Errno(0x8) - ENOLCK = syscall.Errno(0x4d) - ENOMEDIUM = syscall.Errno(0x55) - ENOMEM = syscall.Errno(0xc) - ENOMSG = syscall.Errno(0x5a) - ENOPROTOOPT = syscall.Errno(0x2a) - ENOSPC = syscall.Errno(0x1c) - ENOSYS = syscall.Errno(0x4e) - ENOTBLK = syscall.Errno(0xf) - ENOTCONN = syscall.Errno(0x39) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x42) - ENOTSOCK = syscall.Errno(0x26) - ENOTSUP = syscall.Errno(0x5b) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x2d) - EOVERFLOW = syscall.Errno(0x57) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x2e) - EPIPE = syscall.Errno(0x20) - EPROCLIM = syscall.Errno(0x43) - EPROCUNAVAIL = syscall.Errno(0x4c) - EPROGMISMATCH = syscall.Errno(0x4b) - EPROGUNAVAIL = syscall.Errno(0x4a) - EPROTONOSUPPORT = syscall.Errno(0x2b) - EPROTOTYPE = syscall.Errno(0x29) - ERANGE = syscall.Errno(0x22) - EREMOTE = syscall.Errno(0x47) - EROFS = syscall.Errno(0x1e) - ERPCMISMATCH = syscall.Errno(0x49) - ESHUTDOWN = syscall.Errno(0x3a) - ESOCKTNOSUPPORT = syscall.Errno(0x2c) - ESPIPE = syscall.Errno(0x1d) - ESRCH = syscall.Errno(0x3) - ESTALE = syscall.Errno(0x46) - ETIMEDOUT = syscall.Errno(0x3c) - ETOOMANYREFS = syscall.Errno(0x3b) - ETXTBSY = syscall.Errno(0x1a) - EUSERS = syscall.Errno(0x44) - EWOULDBLOCK = syscall.Errno(0x23) - EXDEV = syscall.Errno(0x12) -) - -// Signals -const ( - SIGABRT = syscall.Signal(0x6) - SIGALRM = syscall.Signal(0xe) - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x14) - SIGCONT = syscall.Signal(0x13) - SIGEMT = syscall.Signal(0x7) - SIGFPE = syscall.Signal(0x8) - SIGHUP = syscall.Signal(0x1) - SIGILL = syscall.Signal(0x4) - SIGINFO = syscall.Signal(0x1d) - SIGINT = syscall.Signal(0x2) - SIGIO = syscall.Signal(0x17) - SIGIOT = syscall.Signal(0x6) - SIGKILL = syscall.Signal(0x9) - SIGPIPE = syscall.Signal(0xd) - SIGPROF = syscall.Signal(0x1b) - SIGQUIT = syscall.Signal(0x3) - SIGSEGV = syscall.Signal(0xb) - SIGSTOP = syscall.Signal(0x11) - SIGSYS = syscall.Signal(0xc) - SIGTERM = syscall.Signal(0xf) - SIGTHR = syscall.Signal(0x20) - SIGTRAP = syscall.Signal(0x5) - SIGTSTP = syscall.Signal(0x12) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x10) - SIGUSR1 = syscall.Signal(0x1e) - SIGUSR2 = syscall.Signal(0x1f) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "device not configured"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EDEADLK", "resource deadlock avoided"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "cross-device link"}, - {19, "ENODEV", "operation not supported by device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "result too large"}, - {35, "EWOULDBLOCK", "resource temporarily unavailable"}, - {36, "EINPROGRESS", "operation now in progress"}, - {37, "EALREADY", "operation already in progress"}, - {38, "ENOTSOCK", "socket operation on non-socket"}, - {39, "EDESTADDRREQ", "destination address required"}, - {40, "EMSGSIZE", "message too long"}, - {41, "EPROTOTYPE", "protocol wrong type for socket"}, - {42, "ENOPROTOOPT", "protocol not available"}, - {43, "EPROTONOSUPPORT", "protocol not supported"}, - {44, "ESOCKTNOSUPPORT", "socket type not supported"}, - {45, "EOPNOTSUPP", "operation not supported"}, - {46, "EPFNOSUPPORT", "protocol family not supported"}, - {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, - {48, "EADDRINUSE", "address already in use"}, - {49, "EADDRNOTAVAIL", "can't assign requested address"}, - {50, "ENETDOWN", "network is down"}, - {51, "ENETUNREACH", "network is unreachable"}, - {52, "ENETRESET", "network dropped connection on reset"}, - {53, "ECONNABORTED", "software caused connection abort"}, - {54, "ECONNRESET", "connection reset by peer"}, - {55, "ENOBUFS", "no buffer space available"}, - {56, "EISCONN", "socket is already connected"}, - {57, "ENOTCONN", "socket is not connected"}, - {58, "ESHUTDOWN", "can't send after socket shutdown"}, - {59, "ETOOMANYREFS", "too many references: can't splice"}, - {60, "ETIMEDOUT", "operation timed out"}, - {61, "ECONNREFUSED", "connection refused"}, - {62, "ELOOP", "too many levels of symbolic links"}, - {63, "ENAMETOOLONG", "file name too long"}, - {64, "EHOSTDOWN", "host is down"}, - {65, "EHOSTUNREACH", "no route to host"}, - {66, "ENOTEMPTY", "directory not empty"}, - {67, "EPROCLIM", "too many processes"}, - {68, "EUSERS", "too many users"}, - {69, "EDQUOT", "disk quota exceeded"}, - {70, "ESTALE", "stale NFS file handle"}, - {71, "EREMOTE", "too many levels of remote in path"}, - {72, "EBADRPC", "RPC struct is bad"}, - {73, "ERPCMISMATCH", "RPC version wrong"}, - {74, "EPROGUNAVAIL", "RPC program not available"}, - {75, "EPROGMISMATCH", "program version wrong"}, - {76, "EPROCUNAVAIL", "bad procedure for program"}, - {77, "ENOLCK", "no locks available"}, - {78, "ENOSYS", "function not implemented"}, - {79, "EFTYPE", "inappropriate file type or format"}, - {80, "EAUTH", "authentication error"}, - {81, "ENEEDAUTH", "need authenticator"}, - {82, "EIPSEC", "IPsec processing failure"}, - {83, "ENOATTR", "attribute not found"}, - {84, "EILSEQ", "illegal byte sequence"}, - {85, "ENOMEDIUM", "no medium found"}, - {86, "EMEDIUMTYPE", "wrong medium type"}, - {87, "EOVERFLOW", "value too large to be stored in data type"}, - {88, "ECANCELED", "operation canceled"}, - {89, "EIDRM", "identifier removed"}, - {90, "ENOMSG", "no message of desired type"}, - {91, "ELAST", "not supported"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, - {6, "SIGABRT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGURG", "urgent I/O condition"}, - {17, "SIGSTOP", "suspended (signal)"}, - {18, "SIGTSTP", "suspended"}, - {19, "SIGCONT", "continued"}, - {20, "SIGCHLD", "child exited"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGIO", "I/O possible"}, - {24, "SIGXCPU", "cputime limit exceeded"}, - {25, "SIGXFSZ", "filesize limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window size changes"}, - {29, "SIGINFO", "information request"}, - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, - {32, "SIGTHR", "thread AST"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go deleted file mode 100644 index 90de7df..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go +++ /dev/null @@ -1,1798 +0,0 @@ -// mkerrors.sh -m64 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm64 && openbsd -// +build arm64,openbsd - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -m64 _const.go - -package unix - -import "syscall" - -const ( - AF_APPLETALK = 0x10 - AF_BLUETOOTH = 0x20 - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1a - AF_ECMA = 0x8 - AF_ENCAP = 0x1c - AF_HYLINK = 0xf - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x18 - AF_IPX = 0x17 - AF_ISDN = 0x1a - AF_ISO = 0x7 - AF_KEY = 0x1e - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x24 - AF_MPLS = 0x21 - AF_NATM = 0x1b - AF_NS = 0x6 - AF_OSI = 0x7 - AF_PUP = 0x4 - AF_ROUTE = 0x11 - AF_SIP = 0x1d - AF_SNA = 0xb - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - ALTWERASE = 0x200 - ARPHRD_ETHER = 0x1 - ARPHRD_FRELAY = 0xf - ARPHRD_IEEE1394 = 0x18 - ARPHRD_IEEE802 = 0x6 - B0 = 0x0 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B230400 = 0x38400 - B2400 = 0x960 - B28800 = 0x7080 - B300 = 0x12c - B38400 = 0x9600 - B4800 = 0x12c0 - B50 = 0x32 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B9600 = 0x2580 - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDIRFILT = 0x4004427c - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc010427b - BIOCGETIF = 0x4020426b - BIOCGFILDROP = 0x40044278 - BIOCGHDRCMPLT = 0x40044274 - BIOCGRSIG = 0x40044273 - BIOCGRTIMEOUT = 0x4010426e - BIOCGSTATS = 0x4008426f - BIOCIMMEDIATE = 0x80044270 - BIOCLOCK = 0x20004276 - BIOCPROMISC = 0x20004269 - BIOCSBLEN = 0xc0044266 - BIOCSDIRFILT = 0x8004427d - BIOCSDLT = 0x8004427a - BIOCSETF = 0x80104267 - BIOCSETIF = 0x8020426c - BIOCSETWF = 0x80104277 - BIOCSFILDROP = 0x80044279 - BIOCSHDRCMPLT = 0x80044275 - BIOCSRSIG = 0x80044272 - BIOCSRTIMEOUT = 0x8010426d - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x4 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_DIRECTION_IN = 0x1 - BPF_DIRECTION_OUT = 0x2 - BPF_DIV = 0x30 - BPF_FILDROP_CAPTURE = 0x1 - BPF_FILDROP_DROP = 0x2 - BPF_FILDROP_PASS = 0x0 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x200000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_W = 0x0 - BPF_X = 0x8 - BRKINT = 0x2 - CFLUSH = 0xf - CLOCAL = 0x8000 - CLOCK_BOOTTIME = 0x6 - CLOCK_MONOTONIC = 0x3 - CLOCK_PROCESS_CPUTIME_ID = 0x2 - CLOCK_REALTIME = 0x0 - CLOCK_THREAD_CPUTIME_ID = 0x4 - CLOCK_UPTIME = 0x5 - CPUSTATES = 0x6 - CP_IDLE = 0x5 - CP_INTR = 0x4 - CP_NICE = 0x1 - CP_SPIN = 0x3 - CP_SYS = 0x2 - CP_USER = 0x0 - CREAD = 0x800 - CRTSCTS = 0x10000 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0xff - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTL_HW = 0x6 - CTL_KERN = 0x1 - CTL_MAXNAME = 0xc - CTL_NET = 0x4 - DIOCOSFPFLUSH = 0x2000444e - DLT_ARCNET = 0x7 - DLT_ATM_RFC1483 = 0xb - DLT_AX25 = 0x3 - DLT_CHAOS = 0x5 - DLT_C_HDLC = 0x68 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0xd - DLT_FDDI = 0xa - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_LOOP = 0xc - DLT_MPLS = 0xdb - DLT_NULL = 0x0 - DLT_OPENFLOW = 0x10b - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x12 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0x10 - DLT_PPP_ETHER = 0x33 - DLT_PPP_SERIAL = 0x32 - DLT_PRONET = 0x4 - DLT_RAW = 0xe - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xf - DLT_USBPCAP = 0xf9 - DLT_USER0 = 0x93 - DLT_USER1 = 0x94 - DLT_USER10 = 0x9d - DLT_USER11 = 0x9e - DLT_USER12 = 0x9f - DLT_USER13 = 0xa0 - DLT_USER14 = 0xa1 - DLT_USER15 = 0xa2 - DLT_USER2 = 0x95 - DLT_USER3 = 0x96 - DLT_USER4 = 0x97 - DLT_USER5 = 0x98 - DLT_USER6 = 0x99 - DLT_USER7 = 0x9a - DLT_USER8 = 0x9b - DLT_USER9 = 0x9c - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EMT_TAGOVF = 0x1 - EMUL_ENABLED = 0x1 - EMUL_NATIVE = 0x2 - ENDRUNDISC = 0x9 - ETHERMIN = 0x2e - ETHERMTU = 0x5dc - ETHERTYPE_8023 = 0x4 - ETHERTYPE_AARP = 0x80f3 - ETHERTYPE_ACCTON = 0x8390 - ETHERTYPE_AEONIC = 0x8036 - ETHERTYPE_ALPHA = 0x814a - ETHERTYPE_AMBER = 0x6008 - ETHERTYPE_AMOEBA = 0x8145 - ETHERTYPE_AOE = 0x88a2 - ETHERTYPE_APOLLO = 0x80f7 - ETHERTYPE_APOLLODOMAIN = 0x8019 - ETHERTYPE_APPLETALK = 0x809b - ETHERTYPE_APPLITEK = 0x80c7 - ETHERTYPE_ARGONAUT = 0x803a - ETHERTYPE_ARP = 0x806 - ETHERTYPE_AT = 0x809b - ETHERTYPE_ATALK = 0x809b - ETHERTYPE_ATOMIC = 0x86df - ETHERTYPE_ATT = 0x8069 - ETHERTYPE_ATTSTANFORD = 0x8008 - ETHERTYPE_AUTOPHON = 0x806a - ETHERTYPE_AXIS = 0x8856 - ETHERTYPE_BCLOOP = 0x9003 - ETHERTYPE_BOFL = 0x8102 - ETHERTYPE_CABLETRON = 0x7034 - ETHERTYPE_CHAOS = 0x804 - ETHERTYPE_COMDESIGN = 0x806c - ETHERTYPE_COMPUGRAPHIC = 0x806d - ETHERTYPE_COUNTERPOINT = 0x8062 - ETHERTYPE_CRONUS = 0x8004 - ETHERTYPE_CRONUSVLN = 0x8003 - ETHERTYPE_DCA = 0x1234 - ETHERTYPE_DDE = 0x807b - ETHERTYPE_DEBNI = 0xaaaa - ETHERTYPE_DECAM = 0x8048 - ETHERTYPE_DECCUST = 0x6006 - ETHERTYPE_DECDIAG = 0x6005 - ETHERTYPE_DECDNS = 0x803c - ETHERTYPE_DECDTS = 0x803e - ETHERTYPE_DECEXPER = 0x6000 - ETHERTYPE_DECLAST = 0x8041 - ETHERTYPE_DECLTM = 0x803f - ETHERTYPE_DECMUMPS = 0x6009 - ETHERTYPE_DECNETBIOS = 0x8040 - ETHERTYPE_DELTACON = 0x86de - ETHERTYPE_DIDDLE = 0x4321 - ETHERTYPE_DLOG1 = 0x660 - ETHERTYPE_DLOG2 = 0x661 - ETHERTYPE_DN = 0x6003 - ETHERTYPE_DOGFIGHT = 0x1989 - ETHERTYPE_DSMD = 0x8039 - ETHERTYPE_ECMA = 0x803 - ETHERTYPE_ENCRYPT = 0x803d - ETHERTYPE_ES = 0x805d - ETHERTYPE_EXCELAN = 0x8010 - ETHERTYPE_EXPERDATA = 0x8049 - ETHERTYPE_FLIP = 0x8146 - ETHERTYPE_FLOWCONTROL = 0x8808 - ETHERTYPE_FRARP = 0x808 - ETHERTYPE_GENDYN = 0x8068 - ETHERTYPE_HAYES = 0x8130 - ETHERTYPE_HIPPI_FP = 0x8180 - ETHERTYPE_HITACHI = 0x8820 - ETHERTYPE_HP = 0x8005 - ETHERTYPE_IEEEPUP = 0xa00 - ETHERTYPE_IEEEPUPAT = 0xa01 - ETHERTYPE_IMLBL = 0x4c42 - ETHERTYPE_IMLBLDIAG = 0x424c - ETHERTYPE_IP = 0x800 - ETHERTYPE_IPAS = 0x876c - ETHERTYPE_IPV6 = 0x86dd - ETHERTYPE_IPX = 0x8137 - ETHERTYPE_IPXNEW = 0x8037 - ETHERTYPE_KALPANA = 0x8582 - ETHERTYPE_LANBRIDGE = 0x8038 - ETHERTYPE_LANPROBE = 0x8888 - ETHERTYPE_LAT = 0x6004 - ETHERTYPE_LBACK = 0x9000 - ETHERTYPE_LITTLE = 0x8060 - ETHERTYPE_LLDP = 0x88cc - ETHERTYPE_LOGICRAFT = 0x8148 - ETHERTYPE_LOOPBACK = 0x9000 - ETHERTYPE_MATRA = 0x807a - ETHERTYPE_MAX = 0xffff - ETHERTYPE_MERIT = 0x807c - ETHERTYPE_MICP = 0x873a - ETHERTYPE_MOPDL = 0x6001 - ETHERTYPE_MOPRC = 0x6002 - ETHERTYPE_MOTOROLA = 0x818d - ETHERTYPE_MPLS = 0x8847 - ETHERTYPE_MPLS_MCAST = 0x8848 - ETHERTYPE_MUMPS = 0x813f - ETHERTYPE_NBPCC = 0x3c04 - ETHERTYPE_NBPCLAIM = 0x3c09 - ETHERTYPE_NBPCLREQ = 0x3c05 - ETHERTYPE_NBPCLRSP = 0x3c06 - ETHERTYPE_NBPCREQ = 0x3c02 - ETHERTYPE_NBPCRSP = 0x3c03 - ETHERTYPE_NBPDG = 0x3c07 - ETHERTYPE_NBPDGB = 0x3c08 - ETHERTYPE_NBPDLTE = 0x3c0a - ETHERTYPE_NBPRAR = 0x3c0c - ETHERTYPE_NBPRAS = 0x3c0b - ETHERTYPE_NBPRST = 0x3c0d - ETHERTYPE_NBPSCD = 0x3c01 - ETHERTYPE_NBPVCD = 0x3c00 - ETHERTYPE_NBS = 0x802 - ETHERTYPE_NCD = 0x8149 - ETHERTYPE_NESTAR = 0x8006 - ETHERTYPE_NETBEUI = 0x8191 - ETHERTYPE_NOVELL = 0x8138 - ETHERTYPE_NS = 0x600 - ETHERTYPE_NSAT = 0x601 - ETHERTYPE_NSCOMPAT = 0x807 - ETHERTYPE_NTRAILER = 0x10 - ETHERTYPE_OS9 = 0x7007 - ETHERTYPE_OS9NET = 0x7009 - ETHERTYPE_PACER = 0x80c6 - ETHERTYPE_PAE = 0x888e - ETHERTYPE_PBB = 0x88e7 - ETHERTYPE_PCS = 0x4242 - ETHERTYPE_PLANNING = 0x8044 - ETHERTYPE_PPP = 0x880b - ETHERTYPE_PPPOE = 0x8864 - ETHERTYPE_PPPOEDISC = 0x8863 - ETHERTYPE_PRIMENTS = 0x7031 - ETHERTYPE_PUP = 0x200 - ETHERTYPE_PUPAT = 0x200 - ETHERTYPE_QINQ = 0x88a8 - ETHERTYPE_RACAL = 0x7030 - ETHERTYPE_RATIONAL = 0x8150 - ETHERTYPE_RAWFR = 0x6559 - ETHERTYPE_RCL = 0x1995 - ETHERTYPE_RDP = 0x8739 - ETHERTYPE_RETIX = 0x80f2 - ETHERTYPE_REVARP = 0x8035 - ETHERTYPE_SCA = 0x6007 - ETHERTYPE_SECTRA = 0x86db - ETHERTYPE_SECUREDATA = 0x876d - ETHERTYPE_SGITW = 0x817e - ETHERTYPE_SG_BOUNCE = 0x8016 - ETHERTYPE_SG_DIAG = 0x8013 - ETHERTYPE_SG_NETGAMES = 0x8014 - ETHERTYPE_SG_RESV = 0x8015 - ETHERTYPE_SIMNET = 0x5208 - ETHERTYPE_SLOW = 0x8809 - ETHERTYPE_SNA = 0x80d5 - ETHERTYPE_SNMP = 0x814c - ETHERTYPE_SONIX = 0xfaf5 - ETHERTYPE_SPIDER = 0x809f - ETHERTYPE_SPRITE = 0x500 - ETHERTYPE_STP = 0x8181 - ETHERTYPE_TALARIS = 0x812b - ETHERTYPE_TALARISMC = 0x852b - ETHERTYPE_TCPCOMP = 0x876b - ETHERTYPE_TCPSM = 0x9002 - ETHERTYPE_TEC = 0x814f - ETHERTYPE_TIGAN = 0x802f - ETHERTYPE_TRAIL = 0x1000 - ETHERTYPE_TRANSETHER = 0x6558 - ETHERTYPE_TYMSHARE = 0x802e - ETHERTYPE_UBBST = 0x7005 - ETHERTYPE_UBDEBUG = 0x900 - ETHERTYPE_UBDIAGLOOP = 0x7002 - ETHERTYPE_UBDL = 0x7000 - ETHERTYPE_UBNIU = 0x7001 - ETHERTYPE_UBNMC = 0x7003 - ETHERTYPE_VALID = 0x1600 - ETHERTYPE_VARIAN = 0x80dd - ETHERTYPE_VAXELN = 0x803b - ETHERTYPE_VEECO = 0x8067 - ETHERTYPE_VEXP = 0x805b - ETHERTYPE_VGLAB = 0x8131 - ETHERTYPE_VINES = 0xbad - ETHERTYPE_VINESECHO = 0xbaf - ETHERTYPE_VINESLOOP = 0xbae - ETHERTYPE_VITAL = 0xff00 - ETHERTYPE_VLAN = 0x8100 - ETHERTYPE_VLTLMAN = 0x8080 - ETHERTYPE_VPROD = 0x805c - ETHERTYPE_VURESERVED = 0x8147 - ETHERTYPE_WATERLOO = 0x8130 - ETHERTYPE_WELLFLEET = 0x8103 - ETHERTYPE_X25 = 0x805 - ETHERTYPE_X75 = 0x801 - ETHERTYPE_XNSSM = 0x9001 - ETHERTYPE_XTP = 0x817d - ETHER_ADDR_LEN = 0x6 - ETHER_ALIGN = 0x2 - ETHER_CRC_LEN = 0x4 - ETHER_CRC_POLY_BE = 0x4c11db6 - ETHER_CRC_POLY_LE = 0xedb88320 - ETHER_HDR_LEN = 0xe - ETHER_MAX_DIX_LEN = 0x600 - ETHER_MAX_HARDMTU_LEN = 0xff9b - ETHER_MAX_LEN = 0x5ee - ETHER_MIN_LEN = 0x40 - ETHER_TYPE_LEN = 0x2 - ETHER_VLAN_ENCAP_LEN = 0x4 - EVFILT_AIO = -0x3 - EVFILT_DEVICE = -0x8 - EVFILT_PROC = -0x5 - EVFILT_READ = -0x1 - EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0x8 - EVFILT_TIMER = -0x7 - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 - EVL_ENCAPLEN = 0x4 - EVL_PRIO_BITS = 0xd - EVL_PRIO_MAX = 0x7 - EVL_VLID_MASK = 0xfff - EVL_VLID_MAX = 0xffe - EVL_VLID_MIN = 0x1 - EVL_VLID_NULL = 0x0 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_DISPATCH = 0x80 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG1 = 0x2000 - EV_ONESHOT = 0x10 - EV_RECEIPT = 0x40 - EV_SYSFLAGS = 0xf000 - EXTA = 0x4b00 - EXTB = 0x9600 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x400 - FLUSHO = 0x800000 - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0xa - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0x7 - F_GETOWN = 0x5 - F_ISATTY = 0xb - F_OK = 0x0 - F_RDLCK = 0x1 - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0x8 - F_SETLKW = 0x9 - F_SETOWN = 0x6 - F_UNLCK = 0x2 - F_WRLCK = 0x3 - HUPCL = 0x4000 - HW_MACHINE = 0x1 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFAN_ARRIVAL = 0x0 - IFAN_DEPARTURE = 0x1 - IFF_ALLMULTI = 0x200 - IFF_BROADCAST = 0x2 - IFF_CANTCHANGE = 0x8e52 - IFF_DEBUG = 0x4 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PROMISC = 0x100 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_STATICARP = 0x20 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_1822 = 0x2 - IFT_A12MPPSWITCH = 0x82 - IFT_AAL2 = 0xbb - IFT_AAL5 = 0x31 - IFT_ADSL = 0x5e - IFT_AFLANE8023 = 0x3b - IFT_AFLANE8025 = 0x3c - IFT_ARAP = 0x58 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ASYNC = 0x54 - IFT_ATM = 0x25 - IFT_ATMDXI = 0x69 - IFT_ATMFUNI = 0x6a - IFT_ATMIMA = 0x6b - IFT_ATMLOGICAL = 0x50 - IFT_ATMRADIO = 0xbd - IFT_ATMSUBINTERFACE = 0x86 - IFT_ATMVCIENDPT = 0xc2 - IFT_ATMVIRTUAL = 0x95 - IFT_BGPPOLICYACCOUNTING = 0xa2 - IFT_BLUETOOTH = 0xf8 - IFT_BRIDGE = 0xd1 - IFT_BSC = 0x53 - IFT_CARP = 0xf7 - IFT_CCTEMUL = 0x3d - IFT_CEPT = 0x13 - IFT_CES = 0x85 - IFT_CHANNEL = 0x46 - IFT_CNR = 0x55 - IFT_COFFEE = 0x84 - IFT_COMPOSITELINK = 0x9b - IFT_DCN = 0x8d - IFT_DIGITALPOWERLINE = 0x8a - IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba - IFT_DLSW = 0x4a - IFT_DOCSCABLEDOWNSTREAM = 0x80 - IFT_DOCSCABLEMACLAYER = 0x7f - IFT_DOCSCABLEUPSTREAM = 0x81 - IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd - IFT_DS0 = 0x51 - IFT_DS0BUNDLE = 0x52 - IFT_DS1FDL = 0xaa - IFT_DS3 = 0x1e - IFT_DTM = 0x8c - IFT_DUMMY = 0xf1 - IFT_DVBASILN = 0xac - IFT_DVBASIOUT = 0xad - IFT_DVBRCCDOWNSTREAM = 0x93 - IFT_DVBRCCMACLAYER = 0x92 - IFT_DVBRCCUPSTREAM = 0x94 - IFT_ECONET = 0xce - IFT_ENC = 0xf4 - IFT_EON = 0x19 - IFT_EPLRS = 0x57 - IFT_ESCON = 0x49 - IFT_ETHER = 0x6 - IFT_FAITH = 0xf3 - IFT_FAST = 0x7d - IFT_FASTETHER = 0x3e - IFT_FASTETHERFX = 0x45 - IFT_FDDI = 0xf - IFT_FIBRECHANNEL = 0x38 - IFT_FRAMERELAYINTERCONNECT = 0x3a - IFT_FRAMERELAYMPI = 0x5c - IFT_FRDLCIENDPT = 0xc1 - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_FRF16MFRBUNDLE = 0xa3 - IFT_FRFORWARD = 0x9e - IFT_G703AT2MB = 0x43 - IFT_G703AT64K = 0x42 - IFT_GIF = 0xf0 - IFT_GIGABITETHERNET = 0x75 - IFT_GR303IDT = 0xb2 - IFT_GR303RDT = 0xb1 - IFT_H323GATEKEEPER = 0xa4 - IFT_H323PROXY = 0xa5 - IFT_HDH1822 = 0x3 - IFT_HDLC = 0x76 - IFT_HDSL2 = 0xa8 - IFT_HIPERLAN2 = 0xb7 - IFT_HIPPI = 0x2f - IFT_HIPPIINTERFACE = 0x39 - IFT_HOSTPAD = 0x5a - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IBM370PARCHAN = 0x48 - IFT_IDSL = 0x9a - IFT_IEEE1394 = 0x90 - IFT_IEEE80211 = 0x47 - IFT_IEEE80212 = 0x37 - IFT_IEEE8023ADLAG = 0xa1 - IFT_IFGSN = 0x91 - IFT_IMT = 0xbe - IFT_INFINIBAND = 0xc7 - IFT_INTERLEAVE = 0x7c - IFT_IP = 0x7e - IFT_IPFORWARD = 0x8e - IFT_IPOVERATM = 0x72 - IFT_IPOVERCDLC = 0x6d - IFT_IPOVERCLAW = 0x6e - IFT_IPSWITCH = 0x4e - IFT_ISDN = 0x3f - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISDNS = 0x4b - IFT_ISDNU = 0x4c - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88025CRFPINT = 0x62 - IFT_ISO88025DTR = 0x56 - IFT_ISO88025FIBER = 0x73 - IFT_ISO88026 = 0xa - IFT_ISUP = 0xb3 - IFT_L2VLAN = 0x87 - IFT_L3IPVLAN = 0x88 - IFT_L3IPXVLAN = 0x89 - IFT_LAPB = 0x10 - IFT_LAPD = 0x4d - IFT_LAPF = 0x77 - IFT_LINEGROUP = 0xd2 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MBIM = 0xfa - IFT_MEDIAMAILOVERIP = 0x8b - IFT_MFSIGLINK = 0xa7 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_MPC = 0x71 - IFT_MPLS = 0xa6 - IFT_MPLSTUNNEL = 0x96 - IFT_MSDSL = 0x8f - IFT_MVL = 0xbf - IFT_MYRINET = 0x63 - IFT_NFAS = 0xaf - IFT_NSIP = 0x1b - IFT_OPTICALCHANNEL = 0xc3 - IFT_OPTICALTRANSPORT = 0xc4 - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PFLOG = 0xf5 - IFT_PFLOW = 0xf9 - IFT_PFSYNC = 0xf6 - IFT_PLC = 0xae - IFT_PON155 = 0xcf - IFT_PON622 = 0xd0 - IFT_POS = 0xab - IFT_PPP = 0x17 - IFT_PPPMULTILINKBUNDLE = 0x6c - IFT_PROPATM = 0xc5 - IFT_PROPBWAP2MP = 0xb8 - IFT_PROPCNLS = 0x59 - IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 - IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 - IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 - IFT_PROPMUX = 0x36 - IFT_PROPVIRTUAL = 0x35 - IFT_PROPWIRELESSP2P = 0x9d - IFT_PTPSERIAL = 0x16 - IFT_PVC = 0xf2 - IFT_Q2931 = 0xc9 - IFT_QLLC = 0x44 - IFT_RADIOMAC = 0xbc - IFT_RADSL = 0x5f - IFT_REACHDSL = 0xc0 - IFT_RFC1483 = 0x9f - IFT_RS232 = 0x21 - IFT_RSRB = 0x4f - IFT_SDLC = 0x11 - IFT_SDSL = 0x60 - IFT_SHDSL = 0xa9 - IFT_SIP = 0x1f - IFT_SIPSIG = 0xcc - IFT_SIPTG = 0xcb - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SONET = 0x27 - IFT_SONETOVERHEADCHANNEL = 0xb9 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_SRP = 0x97 - IFT_SS7SIGLINK = 0x9c - IFT_STACKTOSTACK = 0x6f - IFT_STARLAN = 0xb - IFT_T1 = 0x12 - IFT_TDLC = 0x74 - IFT_TELINK = 0xc8 - IFT_TERMPAD = 0x5b - IFT_TR008 = 0xb0 - IFT_TRANSPHDLC = 0x7b - IFT_TUNNEL = 0x83 - IFT_ULTRA = 0x1d - IFT_USB = 0xa0 - IFT_V11 = 0x40 - IFT_V35 = 0x2d - IFT_V36 = 0x41 - IFT_V37 = 0x78 - IFT_VDSL = 0x61 - IFT_VIRTUALIPADDRESS = 0x70 - IFT_VIRTUALTG = 0xca - IFT_VOICEDID = 0xd5 - IFT_VOICEEM = 0x64 - IFT_VOICEEMFGD = 0xd3 - IFT_VOICEENCAP = 0x67 - IFT_VOICEFGDEANA = 0xd4 - IFT_VOICEFXO = 0x65 - IFT_VOICEFXS = 0x66 - IFT_VOICEOVERATM = 0x98 - IFT_VOICEOVERCABLE = 0xc6 - IFT_VOICEOVERFRAMERELAY = 0x99 - IFT_VOICEOVERIP = 0x68 - IFT_X213 = 0x5d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25HUNTGROUP = 0x7a - IFT_X25MLP = 0x79 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LOOPBACKNET = 0x7f - IN_RFC3021_HOST = 0x1 - IN_RFC3021_NET = 0xfffffffe - IN_RFC3021_NSHIFT = 0x1f - IPPROTO_AH = 0x33 - IPPROTO_CARP = 0x70 - IPPROTO_DIVERT = 0x102 - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GRE = 0x2f - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IGMP = 0x2 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPIP = 0x4 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_MAX = 0x100 - IPPROTO_MAXID = 0x103 - IPPROTO_MOBILE = 0x37 - IPPROTO_MPLS = 0x89 - IPPROTO_NONE = 0x3b - IPPROTO_PFSYNC = 0xf0 - IPPROTO_PIM = 0x67 - IPPROTO_PUP = 0xc - IPPROTO_RAW = 0xff - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_TCP = 0x6 - IPPROTO_TP = 0x1d - IPPROTO_UDP = 0x11 - IPV6_AUTH_LEVEL = 0x35 - IPV6_AUTOFLOWLABEL = 0x3b - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_DONTFRAG = 0x3e - IPV6_DSTOPTS = 0x32 - IPV6_ESP_NETWORK_LEVEL = 0x37 - IPV6_ESP_TRANS_LEVEL = 0x36 - IPV6_FAITH = 0x1d - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FRAGTTL = 0x78 - IPV6_HLIMDEC = 0x1 - IPV6_HOPLIMIT = 0x2f - IPV6_HOPOPTS = 0x31 - IPV6_IPCOMP_LEVEL = 0x3c - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXPACKET = 0xffff - IPV6_MINHOPCOUNT = 0x41 - IPV6_MMTU = 0x500 - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_OPTIONS = 0x1 - IPV6_PATHMTU = 0x2c - IPV6_PIPEX = 0x3f - IPV6_PKTINFO = 0x2e - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_RECVDSTOPTS = 0x28 - IPV6_RECVDSTPORT = 0x40 - IPV6_RECVHOPLIMIT = 0x25 - IPV6_RECVHOPOPTS = 0x27 - IPV6_RECVPATHMTU = 0x2b - IPV6_RECVPKTINFO = 0x24 - IPV6_RECVRTHDR = 0x26 - IPV6_RECVTCLASS = 0x39 - IPV6_RTABLE = 0x1021 - IPV6_RTHDR = 0x33 - IPV6_RTHDRDSTOPTS = 0x23 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x3d - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2a - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IP_ADD_MEMBERSHIP = 0xc - IP_AUTH_LEVEL = 0x14 - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DROP_MEMBERSHIP = 0xd - IP_ESP_NETWORK_LEVEL = 0x16 - IP_ESP_TRANS_LEVEL = 0x15 - IP_HDRINCL = 0x2 - IP_IPCOMP_LEVEL = 0x1d - IP_IPDEFTTL = 0x25 - IP_IPSECFLOWINFO = 0x24 - IP_IPSEC_LOCAL_AUTH = 0x1b - IP_IPSEC_LOCAL_CRED = 0x19 - IP_IPSEC_LOCAL_ID = 0x17 - IP_IPSEC_REMOTE_AUTH = 0x1c - IP_IPSEC_REMOTE_CRED = 0x1a - IP_IPSEC_REMOTE_ID = 0x18 - IP_MAXPACKET = 0xffff - IP_MAX_MEMBERSHIPS = 0xfff - IP_MF = 0x2000 - IP_MINTTL = 0x20 - IP_MIN_MEMBERSHIPS = 0xf - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_OFFMASK = 0x1fff - IP_OPTIONS = 0x1 - IP_PIPEX = 0x22 - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVDSTPORT = 0x21 - IP_RECVIF = 0x1e - IP_RECVOPTS = 0x5 - IP_RECVRETOPTS = 0x6 - IP_RECVRTABLE = 0x23 - IP_RECVTTL = 0x1f - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_RTABLE = 0x1021 - IP_SENDSRCADDR = 0x7 - IP_TOS = 0x3 - IP_TTL = 0x4 - ISIG = 0x80 - ISTRIP = 0x20 - IUCLC = 0x1000 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - KERN_HOSTNAME = 0xa - KERN_OSRELEASE = 0x2 - KERN_OSTYPE = 0x1 - KERN_VERSION = 0x4 - LCNT_OVERLOAD_FLUSH = 0x6 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x6 - MADV_NORMAL = 0x0 - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_SPACEAVAIL = 0x5 - MADV_WILLNEED = 0x3 - MAP_ANON = 0x1000 - MAP_ANONYMOUS = 0x1000 - MAP_CONCEAL = 0x8000 - MAP_COPY = 0x2 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_FLAGMASK = 0xfff7 - MAP_HASSEMAPHORE = 0x0 - MAP_INHERIT = 0x0 - MAP_INHERIT_COPY = 0x1 - MAP_INHERIT_NONE = 0x2 - MAP_INHERIT_SHARE = 0x0 - MAP_INHERIT_ZERO = 0x3 - MAP_NOEXTEND = 0x0 - MAP_NORESERVE = 0x0 - MAP_PRIVATE = 0x2 - MAP_RENAME = 0x0 - MAP_SHARED = 0x1 - MAP_STACK = 0x4000 - MAP_TRYFIXED = 0x0 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MNT_ASYNC = 0x40 - MNT_DEFEXPORTED = 0x200 - MNT_DELEXPORT = 0x20000 - MNT_DOOMED = 0x8000000 - MNT_EXPORTANON = 0x400 - MNT_EXPORTED = 0x100 - MNT_EXRDONLY = 0x80 - MNT_FORCE = 0x80000 - MNT_LAZY = 0x3 - MNT_LOCAL = 0x1000 - MNT_NOATIME = 0x8000 - MNT_NODEV = 0x10 - MNT_NOEXEC = 0x4 - MNT_NOPERM = 0x20 - MNT_NOSUID = 0x8 - MNT_NOWAIT = 0x2 - MNT_QUOTA = 0x2000 - MNT_RDONLY = 0x1 - MNT_RELOAD = 0x40000 - MNT_ROOTFS = 0x4000 - MNT_SOFTDEP = 0x4000000 - MNT_STALLED = 0x100000 - MNT_SWAPPABLE = 0x200000 - MNT_SYNCHRONOUS = 0x2 - MNT_UPDATE = 0x10000 - MNT_VISFLAGMASK = 0x400ffff - MNT_WAIT = 0x1 - MNT_WANTRDWR = 0x2000000 - MNT_WXALLOWED = 0x800 - MSG_BCAST = 0x100 - MSG_CMSG_CLOEXEC = 0x800 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOR = 0x8 - MSG_MCAST = 0x200 - MSG_NOSIGNAL = 0x400 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x4 - MS_SYNC = 0x2 - NAME_MAX = 0xff - NET_RT_DUMP = 0x1 - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x3 - NET_RT_IFNAMES = 0x6 - NET_RT_MAXID = 0x7 - NET_RT_STATS = 0x4 - NET_RT_TABLE = 0x5 - NFDBITS = 0x20 - NOFLSH = 0x80000000 - NOKERNINFO = 0x2000000 - NOTE_ATTRIB = 0x8 - NOTE_CHANGE = 0x1 - NOTE_CHILD = 0x4 - NOTE_DELETE = 0x1 - NOTE_EOF = 0x2 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXTEND = 0x4 - NOTE_FORK = 0x40000000 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_PCTRLMASK = 0xf0000000 - NOTE_PDATAMASK = 0xfffff - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_TRUNCATE = 0x80 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - OLCUC = 0x20 - ONLCR = 0x2 - ONLRET = 0x80 - ONOCR = 0x40 - ONOEOT = 0x8 - OPOST = 0x1 - OXTABS = 0x4 - O_ACCMODE = 0x3 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x10000 - O_CREAT = 0x200 - O_DIRECTORY = 0x20000 - O_DSYNC = 0x80 - O_EXCL = 0x800 - O_EXLOCK = 0x20 - O_FSYNC = 0x80 - O_NDELAY = 0x4 - O_NOCTTY = 0x8000 - O_NOFOLLOW = 0x100 - O_NONBLOCK = 0x4 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_RSYNC = 0x80 - O_SHLOCK = 0x10 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PF_FLUSH = 0x1 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_MEMLOCK = 0x6 - RLIMIT_NOFILE = 0x8 - RLIMIT_NPROC = 0x7 - RLIMIT_RSS = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BFD = 0xb - RTAX_BRD = 0x7 - RTAX_DNS = 0xc - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_LABEL = 0xa - RTAX_MAX = 0xf - RTAX_NETMASK = 0x2 - RTAX_SEARCH = 0xe - RTAX_SRC = 0x8 - RTAX_SRCMASK = 0x9 - RTAX_STATIC = 0xd - RTA_AUTHOR = 0x40 - RTA_BFD = 0x800 - RTA_BRD = 0x80 - RTA_DNS = 0x1000 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_LABEL = 0x400 - RTA_NETMASK = 0x4 - RTA_SEARCH = 0x4000 - RTA_SRC = 0x100 - RTA_SRCMASK = 0x200 - RTA_STATIC = 0x2000 - RTF_ANNOUNCE = 0x4000 - RTF_BFD = 0x1000000 - RTF_BLACKHOLE = 0x1000 - RTF_BROADCAST = 0x400000 - RTF_CACHED = 0x20000 - RTF_CLONED = 0x10000 - RTF_CLONING = 0x100 - RTF_CONNECTED = 0x800000 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_FMASK = 0x110fc08 - RTF_GATEWAY = 0x2 - RTF_HOST = 0x4 - RTF_LLINFO = 0x400 - RTF_LOCAL = 0x200000 - RTF_MODIFIED = 0x20 - RTF_MPATH = 0x40000 - RTF_MPLS = 0x100000 - RTF_MULTICAST = 0x200 - RTF_PERMANENT_ARP = 0x2000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_PROTO3 = 0x2000 - RTF_REJECT = 0x8 - RTF_STATIC = 0x800 - RTF_UP = 0x1 - RTF_USETRAILERS = 0x8000 - RTM_80211INFO = 0x15 - RTM_ADD = 0x1 - RTM_BFD = 0x12 - RTM_CHANGE = 0x3 - RTM_CHGADDRATTR = 0x14 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_DESYNC = 0x10 - RTM_GET = 0x4 - RTM_IFANNOUNCE = 0xf - RTM_IFINFO = 0xe - RTM_INVALIDATE = 0x11 - RTM_LOSING = 0x5 - RTM_MAXSIZE = 0x800 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_PROPOSAL = 0x13 - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RT_TABLEID_BITS = 0x8 - RT_TABLEID_MASK = 0xff - RT_TABLEID_MAX = 0xff - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - RUSAGE_THREAD = 0x1 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x4 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80206931 - SIOCAIFADDR = 0x8040691a - SIOCAIFGROUP = 0x80286987 - SIOCATMARK = 0x40047307 - SIOCBRDGADD = 0x8060693c - SIOCBRDGADDL = 0x80606949 - SIOCBRDGADDS = 0x80606941 - SIOCBRDGARL = 0x808c694d - SIOCBRDGDADDR = 0x81286947 - SIOCBRDGDEL = 0x8060693d - SIOCBRDGDELS = 0x80606942 - SIOCBRDGFLUSH = 0x80606948 - SIOCBRDGFRL = 0x808c694e - SIOCBRDGGCACHE = 0xc0186941 - SIOCBRDGGFD = 0xc0186952 - SIOCBRDGGHT = 0xc0186951 - SIOCBRDGGIFFLGS = 0xc060693e - SIOCBRDGGMA = 0xc0186953 - SIOCBRDGGPARAM = 0xc0406958 - SIOCBRDGGPRI = 0xc0186950 - SIOCBRDGGRL = 0xc030694f - SIOCBRDGGTO = 0xc0186946 - SIOCBRDGIFS = 0xc0606942 - SIOCBRDGRTS = 0xc0206943 - SIOCBRDGSADDR = 0xc1286944 - SIOCBRDGSCACHE = 0x80186940 - SIOCBRDGSFD = 0x80186952 - SIOCBRDGSHT = 0x80186951 - SIOCBRDGSIFCOST = 0x80606955 - SIOCBRDGSIFFLGS = 0x8060693f - SIOCBRDGSIFPRIO = 0x80606954 - SIOCBRDGSIFPROT = 0x8060694a - SIOCBRDGSMA = 0x80186953 - SIOCBRDGSPRI = 0x80186950 - SIOCBRDGSPROTO = 0x8018695a - SIOCBRDGSTO = 0x80186945 - SIOCBRDGSTXHC = 0x80186959 - SIOCDELLABEL = 0x80206997 - SIOCDELMULTI = 0x80206932 - SIOCDIFADDR = 0x80206919 - SIOCDIFGROUP = 0x80286989 - SIOCDIFPARENT = 0x802069b4 - SIOCDIFPHYADDR = 0x80206949 - SIOCDPWE3NEIGHBOR = 0x802069de - SIOCDVNETID = 0x802069af - SIOCGETKALIVE = 0xc01869a4 - SIOCGETLABEL = 0x8020699a - SIOCGETMPWCFG = 0xc02069ae - SIOCGETPFLOW = 0xc02069fe - SIOCGETPFSYNC = 0xc02069f8 - SIOCGETSGCNT = 0xc0207534 - SIOCGETVIFCNT = 0xc0287533 - SIOCGETVLAN = 0xc0206990 - SIOCGIFADDR = 0xc0206921 - SIOCGIFBRDADDR = 0xc0206923 - SIOCGIFCONF = 0xc0106924 - SIOCGIFDATA = 0xc020691b - SIOCGIFDESCR = 0xc0206981 - SIOCGIFDSTADDR = 0xc0206922 - SIOCGIFFLAGS = 0xc0206911 - SIOCGIFGATTR = 0xc028698b - SIOCGIFGENERIC = 0xc020693a - SIOCGIFGLIST = 0xc028698d - SIOCGIFGMEMB = 0xc028698a - SIOCGIFGROUP = 0xc0286988 - SIOCGIFHARDMTU = 0xc02069a5 - SIOCGIFLLPRIO = 0xc02069b6 - SIOCGIFMEDIA = 0xc0406938 - SIOCGIFMETRIC = 0xc0206917 - SIOCGIFMTU = 0xc020697e - SIOCGIFNETMASK = 0xc0206925 - SIOCGIFPAIR = 0xc02069b1 - SIOCGIFPARENT = 0xc02069b3 - SIOCGIFPRIORITY = 0xc020699c - SIOCGIFRDOMAIN = 0xc02069a0 - SIOCGIFRTLABEL = 0xc0206983 - SIOCGIFRXR = 0x802069aa - SIOCGIFSFFPAGE = 0xc1126939 - SIOCGIFXFLAGS = 0xc020699e - SIOCGLIFPHYADDR = 0xc218694b - SIOCGLIFPHYDF = 0xc02069c2 - SIOCGLIFPHYECN = 0xc02069c8 - SIOCGLIFPHYRTABLE = 0xc02069a2 - SIOCGLIFPHYTTL = 0xc02069a9 - SIOCGPGRP = 0x40047309 - SIOCGPWE3 = 0xc0206998 - SIOCGPWE3CTRLWORD = 0xc02069dc - SIOCGPWE3FAT = 0xc02069dd - SIOCGPWE3NEIGHBOR = 0xc21869de - SIOCGSPPPPARAMS = 0xc0206994 - SIOCGTXHPRIO = 0xc02069c6 - SIOCGUMBINFO = 0xc02069be - SIOCGUMBPARAM = 0xc02069c0 - SIOCGVH = 0xc02069f6 - SIOCGVNETFLOWID = 0xc02069c4 - SIOCGVNETID = 0xc02069a7 - SIOCIFAFATTACH = 0x801169ab - SIOCIFAFDETACH = 0x801169ac - SIOCIFCREATE = 0x8020697a - SIOCIFDESTROY = 0x80206979 - SIOCIFGCLONERS = 0xc0106978 - SIOCSETKALIVE = 0x801869a3 - SIOCSETLABEL = 0x80206999 - SIOCSETMPWCFG = 0x802069ad - SIOCSETPFLOW = 0x802069fd - SIOCSETPFSYNC = 0x802069f7 - SIOCSETVLAN = 0x8020698f - SIOCSIFADDR = 0x8020690c - SIOCSIFBRDADDR = 0x80206913 - SIOCSIFDESCR = 0x80206980 - SIOCSIFDSTADDR = 0x8020690e - SIOCSIFFLAGS = 0x80206910 - SIOCSIFGATTR = 0x8028698c - SIOCSIFGENERIC = 0x80206939 - SIOCSIFLLADDR = 0x8020691f - SIOCSIFLLPRIO = 0x802069b5 - SIOCSIFMEDIA = 0xc0206937 - SIOCSIFMETRIC = 0x80206918 - SIOCSIFMTU = 0x8020697f - SIOCSIFNETMASK = 0x80206916 - SIOCSIFPAIR = 0x802069b0 - SIOCSIFPARENT = 0x802069b2 - SIOCSIFPRIORITY = 0x8020699b - SIOCSIFRDOMAIN = 0x8020699f - SIOCSIFRTLABEL = 0x80206982 - SIOCSIFXFLAGS = 0x8020699d - SIOCSLIFPHYADDR = 0x8218694a - SIOCSLIFPHYDF = 0x802069c1 - SIOCSLIFPHYECN = 0x802069c7 - SIOCSLIFPHYRTABLE = 0x802069a1 - SIOCSLIFPHYTTL = 0x802069a8 - SIOCSPGRP = 0x80047308 - SIOCSPWE3CTRLWORD = 0x802069dc - SIOCSPWE3FAT = 0x802069dd - SIOCSPWE3NEIGHBOR = 0x821869de - SIOCSSPPPPARAMS = 0x80206993 - SIOCSTXHPRIO = 0x802069c5 - SIOCSUMBPARAM = 0x802069bf - SIOCSVH = 0xc02069f5 - SIOCSVNETFLOWID = 0x802069c3 - SIOCSVNETID = 0x802069a6 - SIOCSWGDPID = 0xc018695b - SIOCSWGMAXFLOW = 0xc0186960 - SIOCSWGMAXGROUP = 0xc018695d - SIOCSWSDPID = 0x8018695c - SIOCSWSPORTNO = 0xc060695f - SOCK_CLOEXEC = 0x8000 - SOCK_DGRAM = 0x2 - SOCK_DNS = 0x1000 - SOCK_NONBLOCK = 0x4000 - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_BINDANY = 0x1000 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LINGER = 0x80 - SO_NETPROC = 0x1020 - SO_OOBINLINE = 0x100 - SO_PEERCRED = 0x1022 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_RTABLE = 0x1021 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_SPLICE = 0x1023 - SO_TIMESTAMP = 0x800 - SO_TYPE = 0x1008 - SO_USELOOPBACK = 0x40 - SO_ZEROIZE = 0x2000 - S_BLKSIZE = 0x200 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFLNK = 0xa000 - S_IFMT = 0xf000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISTXT = 0x200 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXGRP = 0x8 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - TCIFLUSH = 0x1 - TCIOFF = 0x3 - TCIOFLUSH = 0x3 - TCION = 0x4 - TCOFLUSH = 0x2 - TCOOFF = 0x1 - TCOON = 0x2 - TCP_MAXBURST = 0x4 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x3 - TCP_MAX_WINSHIFT = 0xe - TCP_MD5SIG = 0x4 - TCP_MSS = 0x200 - TCP_NODELAY = 0x1 - TCP_NOPUSH = 0x10 - TCP_SACK_ENABLE = 0x8 - TCSAFLUSH = 0x2 - TIMER_ABSTIME = 0x1 - TIMER_RELTIME = 0x0 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCHKVERAUTH = 0x2000741e - TIOCCLRVERAUTH = 0x2000741d - TIOCCONS = 0x80047462 - TIOCDRAIN = 0x2000745e - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLAG_CLOCAL = 0x2 - TIOCFLAG_CRTSCTS = 0x4 - TIOCFLAG_MDMBUF = 0x8 - TIOCFLAG_PPS = 0x10 - TIOCFLAG_SOFTCAR = 0x1 - TIOCFLUSH = 0x80047410 - TIOCGETA = 0x402c7413 - TIOCGETD = 0x4004741a - TIOCGFLAGS = 0x4004745d - TIOCGPGRP = 0x40047477 - TIOCGSID = 0x40047463 - TIOCGTSTAMP = 0x4010745b - TIOCGWINSZ = 0x40087468 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGET = 0x4004746a - TIOCMODG = 0x4004746a - TIOCMODS = 0x8004746d - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCREMOTE = 0x80047469 - TIOCSBRK = 0x2000747b - TIOCSCTTY = 0x20007461 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x802c7414 - TIOCSETAF = 0x802c7416 - TIOCSETAW = 0x802c7415 - TIOCSETD = 0x8004741b - TIOCSETVERAUTH = 0x8004741c - TIOCSFLAGS = 0x8004745c - TIOCSIG = 0x8004745f - TIOCSPGRP = 0x80047476 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x20007465 - TIOCSTOP = 0x2000746f - TIOCSTSTAMP = 0x8008745a - TIOCSWINSZ = 0x80087467 - TIOCUCNTL = 0x80047466 - TIOCUCNTL_CBRK = 0x7a - TIOCUCNTL_SBRK = 0x7b - TOSTOP = 0x400000 - UTIME_NOW = -0x2 - UTIME_OMIT = -0x1 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 - VM_ANONMIN = 0x7 - VM_LOADAVG = 0x2 - VM_MALLOC_CONF = 0xc - VM_MAXID = 0xd - VM_MAXSLP = 0xa - VM_METER = 0x1 - VM_NKMEMPAGES = 0x6 - VM_PSSTRINGS = 0x3 - VM_SWAPENCRYPT = 0x5 - VM_USPACE = 0xb - VM_UVMEXP = 0x4 - VM_VNODEMIN = 0x9 - VM_VTEXTMIN = 0x8 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VTIME = 0x11 - VWERASE = 0x4 - WALTSIG = 0x4 - WCONTINUED = 0x8 - WCOREFLAG = 0x80 - WNOHANG = 0x1 - WUNTRACED = 0x2 - XCASE = 0x1000000 -) - -// Errors -const ( - E2BIG = syscall.Errno(0x7) - EACCES = syscall.Errno(0xd) - EADDRINUSE = syscall.Errno(0x30) - EADDRNOTAVAIL = syscall.Errno(0x31) - EAFNOSUPPORT = syscall.Errno(0x2f) - EAGAIN = syscall.Errno(0x23) - EALREADY = syscall.Errno(0x25) - EAUTH = syscall.Errno(0x50) - EBADF = syscall.Errno(0x9) - EBADMSG = syscall.Errno(0x5c) - EBADRPC = syscall.Errno(0x48) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x58) - ECHILD = syscall.Errno(0xa) - ECONNABORTED = syscall.Errno(0x35) - ECONNREFUSED = syscall.Errno(0x3d) - ECONNRESET = syscall.Errno(0x36) - EDEADLK = syscall.Errno(0xb) - EDESTADDRREQ = syscall.Errno(0x27) - EDOM = syscall.Errno(0x21) - EDQUOT = syscall.Errno(0x45) - EEXIST = syscall.Errno(0x11) - EFAULT = syscall.Errno(0xe) - EFBIG = syscall.Errno(0x1b) - EFTYPE = syscall.Errno(0x4f) - EHOSTDOWN = syscall.Errno(0x40) - EHOSTUNREACH = syscall.Errno(0x41) - EIDRM = syscall.Errno(0x59) - EILSEQ = syscall.Errno(0x54) - EINPROGRESS = syscall.Errno(0x24) - EINTR = syscall.Errno(0x4) - EINVAL = syscall.Errno(0x16) - EIO = syscall.Errno(0x5) - EIPSEC = syscall.Errno(0x52) - EISCONN = syscall.Errno(0x38) - EISDIR = syscall.Errno(0x15) - ELAST = syscall.Errno(0x5f) - ELOOP = syscall.Errno(0x3e) - EMEDIUMTYPE = syscall.Errno(0x56) - EMFILE = syscall.Errno(0x18) - EMLINK = syscall.Errno(0x1f) - EMSGSIZE = syscall.Errno(0x28) - ENAMETOOLONG = syscall.Errno(0x3f) - ENEEDAUTH = syscall.Errno(0x51) - ENETDOWN = syscall.Errno(0x32) - ENETRESET = syscall.Errno(0x34) - ENETUNREACH = syscall.Errno(0x33) - ENFILE = syscall.Errno(0x17) - ENOATTR = syscall.Errno(0x53) - ENOBUFS = syscall.Errno(0x37) - ENODEV = syscall.Errno(0x13) - ENOENT = syscall.Errno(0x2) - ENOEXEC = syscall.Errno(0x8) - ENOLCK = syscall.Errno(0x4d) - ENOMEDIUM = syscall.Errno(0x55) - ENOMEM = syscall.Errno(0xc) - ENOMSG = syscall.Errno(0x5a) - ENOPROTOOPT = syscall.Errno(0x2a) - ENOSPC = syscall.Errno(0x1c) - ENOSYS = syscall.Errno(0x4e) - ENOTBLK = syscall.Errno(0xf) - ENOTCONN = syscall.Errno(0x39) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x42) - ENOTRECOVERABLE = syscall.Errno(0x5d) - ENOTSOCK = syscall.Errno(0x26) - ENOTSUP = syscall.Errno(0x5b) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x2d) - EOVERFLOW = syscall.Errno(0x57) - EOWNERDEAD = syscall.Errno(0x5e) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x2e) - EPIPE = syscall.Errno(0x20) - EPROCLIM = syscall.Errno(0x43) - EPROCUNAVAIL = syscall.Errno(0x4c) - EPROGMISMATCH = syscall.Errno(0x4b) - EPROGUNAVAIL = syscall.Errno(0x4a) - EPROTO = syscall.Errno(0x5f) - EPROTONOSUPPORT = syscall.Errno(0x2b) - EPROTOTYPE = syscall.Errno(0x29) - ERANGE = syscall.Errno(0x22) - EREMOTE = syscall.Errno(0x47) - EROFS = syscall.Errno(0x1e) - ERPCMISMATCH = syscall.Errno(0x49) - ESHUTDOWN = syscall.Errno(0x3a) - ESOCKTNOSUPPORT = syscall.Errno(0x2c) - ESPIPE = syscall.Errno(0x1d) - ESRCH = syscall.Errno(0x3) - ESTALE = syscall.Errno(0x46) - ETIMEDOUT = syscall.Errno(0x3c) - ETOOMANYREFS = syscall.Errno(0x3b) - ETXTBSY = syscall.Errno(0x1a) - EUSERS = syscall.Errno(0x44) - EWOULDBLOCK = syscall.Errno(0x23) - EXDEV = syscall.Errno(0x12) -) - -// Signals -const ( - SIGABRT = syscall.Signal(0x6) - SIGALRM = syscall.Signal(0xe) - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x14) - SIGCONT = syscall.Signal(0x13) - SIGEMT = syscall.Signal(0x7) - SIGFPE = syscall.Signal(0x8) - SIGHUP = syscall.Signal(0x1) - SIGILL = syscall.Signal(0x4) - SIGINFO = syscall.Signal(0x1d) - SIGINT = syscall.Signal(0x2) - SIGIO = syscall.Signal(0x17) - SIGIOT = syscall.Signal(0x6) - SIGKILL = syscall.Signal(0x9) - SIGPIPE = syscall.Signal(0xd) - SIGPROF = syscall.Signal(0x1b) - SIGQUIT = syscall.Signal(0x3) - SIGSEGV = syscall.Signal(0xb) - SIGSTOP = syscall.Signal(0x11) - SIGSYS = syscall.Signal(0xc) - SIGTERM = syscall.Signal(0xf) - SIGTHR = syscall.Signal(0x20) - SIGTRAP = syscall.Signal(0x5) - SIGTSTP = syscall.Signal(0x12) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x10) - SIGUSR1 = syscall.Signal(0x1e) - SIGUSR2 = syscall.Signal(0x1f) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "device not configured"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EDEADLK", "resource deadlock avoided"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "cross-device link"}, - {19, "ENODEV", "operation not supported by device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "result too large"}, - {35, "EAGAIN", "resource temporarily unavailable"}, - {36, "EINPROGRESS", "operation now in progress"}, - {37, "EALREADY", "operation already in progress"}, - {38, "ENOTSOCK", "socket operation on non-socket"}, - {39, "EDESTADDRREQ", "destination address required"}, - {40, "EMSGSIZE", "message too long"}, - {41, "EPROTOTYPE", "protocol wrong type for socket"}, - {42, "ENOPROTOOPT", "protocol not available"}, - {43, "EPROTONOSUPPORT", "protocol not supported"}, - {44, "ESOCKTNOSUPPORT", "socket type not supported"}, - {45, "EOPNOTSUPP", "operation not supported"}, - {46, "EPFNOSUPPORT", "protocol family not supported"}, - {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, - {48, "EADDRINUSE", "address already in use"}, - {49, "EADDRNOTAVAIL", "can't assign requested address"}, - {50, "ENETDOWN", "network is down"}, - {51, "ENETUNREACH", "network is unreachable"}, - {52, "ENETRESET", "network dropped connection on reset"}, - {53, "ECONNABORTED", "software caused connection abort"}, - {54, "ECONNRESET", "connection reset by peer"}, - {55, "ENOBUFS", "no buffer space available"}, - {56, "EISCONN", "socket is already connected"}, - {57, "ENOTCONN", "socket is not connected"}, - {58, "ESHUTDOWN", "can't send after socket shutdown"}, - {59, "ETOOMANYREFS", "too many references: can't splice"}, - {60, "ETIMEDOUT", "operation timed out"}, - {61, "ECONNREFUSED", "connection refused"}, - {62, "ELOOP", "too many levels of symbolic links"}, - {63, "ENAMETOOLONG", "file name too long"}, - {64, "EHOSTDOWN", "host is down"}, - {65, "EHOSTUNREACH", "no route to host"}, - {66, "ENOTEMPTY", "directory not empty"}, - {67, "EPROCLIM", "too many processes"}, - {68, "EUSERS", "too many users"}, - {69, "EDQUOT", "disk quota exceeded"}, - {70, "ESTALE", "stale NFS file handle"}, - {71, "EREMOTE", "too many levels of remote in path"}, - {72, "EBADRPC", "RPC struct is bad"}, - {73, "ERPCMISMATCH", "RPC version wrong"}, - {74, "EPROGUNAVAIL", "RPC program not available"}, - {75, "EPROGMISMATCH", "program version wrong"}, - {76, "EPROCUNAVAIL", "bad procedure for program"}, - {77, "ENOLCK", "no locks available"}, - {78, "ENOSYS", "function not implemented"}, - {79, "EFTYPE", "inappropriate file type or format"}, - {80, "EAUTH", "authentication error"}, - {81, "ENEEDAUTH", "need authenticator"}, - {82, "EIPSEC", "IPsec processing failure"}, - {83, "ENOATTR", "attribute not found"}, - {84, "EILSEQ", "illegal byte sequence"}, - {85, "ENOMEDIUM", "no medium found"}, - {86, "EMEDIUMTYPE", "wrong medium type"}, - {87, "EOVERFLOW", "value too large to be stored in data type"}, - {88, "ECANCELED", "operation canceled"}, - {89, "EIDRM", "identifier removed"}, - {90, "ENOMSG", "no message of desired type"}, - {91, "ENOTSUP", "not supported"}, - {92, "EBADMSG", "bad message"}, - {93, "ENOTRECOVERABLE", "state not recoverable"}, - {94, "EOWNERDEAD", "previous owner died"}, - {95, "ELAST", "protocol error"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, - {6, "SIGABRT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGURG", "urgent I/O condition"}, - {17, "SIGSTOP", "suspended (signal)"}, - {18, "SIGTSTP", "suspended"}, - {19, "SIGCONT", "continued"}, - {20, "SIGCHLD", "child exited"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGIO", "I/O possible"}, - {24, "SIGXCPU", "cputime limit exceeded"}, - {25, "SIGXFSZ", "filesize limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window size changes"}, - {29, "SIGINFO", "information request"}, - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, - {32, "SIGTHR", "thread AST"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go deleted file mode 100644 index f1154ff..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go +++ /dev/null @@ -1,1863 +0,0 @@ -// mkerrors.sh -m64 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build mips64 && openbsd -// +build mips64,openbsd - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -m64 _const.go - -package unix - -import "syscall" - -const ( - AF_APPLETALK = 0x10 - AF_BLUETOOTH = 0x20 - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1a - AF_ECMA = 0x8 - AF_ENCAP = 0x1c - AF_HYLINK = 0xf - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x18 - AF_IPX = 0x17 - AF_ISDN = 0x1a - AF_ISO = 0x7 - AF_KEY = 0x1e - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x24 - AF_MPLS = 0x21 - AF_NATM = 0x1b - AF_NS = 0x6 - AF_OSI = 0x7 - AF_PUP = 0x4 - AF_ROUTE = 0x11 - AF_SIP = 0x1d - AF_SNA = 0xb - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - ALTWERASE = 0x200 - ARPHRD_ETHER = 0x1 - ARPHRD_FRELAY = 0xf - ARPHRD_IEEE1394 = 0x18 - ARPHRD_IEEE802 = 0x6 - B0 = 0x0 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B230400 = 0x38400 - B2400 = 0x960 - B28800 = 0x7080 - B300 = 0x12c - B38400 = 0x9600 - B4800 = 0x12c0 - B50 = 0x32 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B9600 = 0x2580 - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDIRFILT = 0x4004427c - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc010427b - BIOCGETIF = 0x4020426b - BIOCGFILDROP = 0x40044278 - BIOCGHDRCMPLT = 0x40044274 - BIOCGRSIG = 0x40044273 - BIOCGRTIMEOUT = 0x4010426e - BIOCGSTATS = 0x4008426f - BIOCIMMEDIATE = 0x80044270 - BIOCLOCK = 0x20004276 - BIOCPROMISC = 0x20004269 - BIOCSBLEN = 0xc0044266 - BIOCSDIRFILT = 0x8004427d - BIOCSDLT = 0x8004427a - BIOCSETF = 0x80104267 - BIOCSETIF = 0x8020426c - BIOCSETWF = 0x80104277 - BIOCSFILDROP = 0x80044279 - BIOCSHDRCMPLT = 0x80044275 - BIOCSRSIG = 0x80044272 - BIOCSRTIMEOUT = 0x8010426d - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x4 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_DIRECTION_IN = 0x1 - BPF_DIRECTION_OUT = 0x2 - BPF_DIV = 0x30 - BPF_FILDROP_CAPTURE = 0x1 - BPF_FILDROP_DROP = 0x2 - BPF_FILDROP_PASS = 0x0 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x200000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_W = 0x0 - BPF_X = 0x8 - BRKINT = 0x2 - CFLUSH = 0xf - CLOCAL = 0x8000 - CLOCK_BOOTTIME = 0x6 - CLOCK_MONOTONIC = 0x3 - CLOCK_PROCESS_CPUTIME_ID = 0x2 - CLOCK_REALTIME = 0x0 - CLOCK_THREAD_CPUTIME_ID = 0x4 - CLOCK_UPTIME = 0x5 - CPUSTATES = 0x6 - CP_IDLE = 0x5 - CP_INTR = 0x4 - CP_NICE = 0x1 - CP_SPIN = 0x3 - CP_SYS = 0x2 - CP_USER = 0x0 - CREAD = 0x800 - CRTSCTS = 0x10000 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0xff - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTL_HW = 0x6 - CTL_KERN = 0x1 - CTL_MAXNAME = 0xc - CTL_NET = 0x4 - DIOCADDQUEUE = 0xc110445d - DIOCADDRULE = 0xcd604404 - DIOCADDSTATE = 0xc1084425 - DIOCCHANGERULE = 0xcd60441a - DIOCCLRIFFLAG = 0xc028445a - DIOCCLRSRCNODES = 0x20004455 - DIOCCLRSTATES = 0xc0e04412 - DIOCCLRSTATUS = 0xc0284416 - DIOCGETLIMIT = 0xc0084427 - DIOCGETQSTATS = 0xc1204460 - DIOCGETQUEUE = 0xc110445f - DIOCGETQUEUES = 0xc110445e - DIOCGETRULE = 0xcd604407 - DIOCGETRULES = 0xcd604406 - DIOCGETRULESET = 0xc444443b - DIOCGETRULESETS = 0xc444443a - DIOCGETSRCNODES = 0xc0104454 - DIOCGETSTATE = 0xc1084413 - DIOCGETSTATES = 0xc0104419 - DIOCGETSTATUS = 0xc1e84415 - DIOCGETSYNFLWATS = 0xc0084463 - DIOCGETTIMEOUT = 0xc008441e - DIOCIGETIFACES = 0xc0284457 - DIOCKILLSRCNODES = 0xc080445b - DIOCKILLSTATES = 0xc0e04429 - DIOCNATLOOK = 0xc0504417 - DIOCOSFPADD = 0xc088444f - DIOCOSFPFLUSH = 0x2000444e - DIOCOSFPGET = 0xc0884450 - DIOCRADDADDRS = 0xc4504443 - DIOCRADDTABLES = 0xc450443d - DIOCRCLRADDRS = 0xc4504442 - DIOCRCLRASTATS = 0xc4504448 - DIOCRCLRTABLES = 0xc450443c - DIOCRCLRTSTATS = 0xc4504441 - DIOCRDELADDRS = 0xc4504444 - DIOCRDELTABLES = 0xc450443e - DIOCRGETADDRS = 0xc4504446 - DIOCRGETASTATS = 0xc4504447 - DIOCRGETTABLES = 0xc450443f - DIOCRGETTSTATS = 0xc4504440 - DIOCRINADEFINE = 0xc450444d - DIOCRSETADDRS = 0xc4504445 - DIOCRSETTFLAGS = 0xc450444a - DIOCRTSTADDRS = 0xc4504449 - DIOCSETDEBUG = 0xc0044418 - DIOCSETHOSTID = 0xc0044456 - DIOCSETIFFLAG = 0xc0284459 - DIOCSETLIMIT = 0xc0084428 - DIOCSETREASS = 0xc004445c - DIOCSETSTATUSIF = 0xc0284414 - DIOCSETSYNCOOKIES = 0xc0014462 - DIOCSETSYNFLWATS = 0xc0084461 - DIOCSETTIMEOUT = 0xc008441d - DIOCSTART = 0x20004401 - DIOCSTOP = 0x20004402 - DIOCXBEGIN = 0xc0104451 - DIOCXCOMMIT = 0xc0104452 - DIOCXROLLBACK = 0xc0104453 - DLT_ARCNET = 0x7 - DLT_ATM_RFC1483 = 0xb - DLT_AX25 = 0x3 - DLT_CHAOS = 0x5 - DLT_C_HDLC = 0x68 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0xd - DLT_FDDI = 0xa - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_LOOP = 0xc - DLT_MPLS = 0xdb - DLT_NULL = 0x0 - DLT_OPENFLOW = 0x10b - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x12 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0x10 - DLT_PPP_ETHER = 0x33 - DLT_PPP_SERIAL = 0x32 - DLT_PRONET = 0x4 - DLT_RAW = 0xe - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xf - DLT_USBPCAP = 0xf9 - DLT_USER0 = 0x93 - DLT_USER1 = 0x94 - DLT_USER10 = 0x9d - DLT_USER11 = 0x9e - DLT_USER12 = 0x9f - DLT_USER13 = 0xa0 - DLT_USER14 = 0xa1 - DLT_USER15 = 0xa2 - DLT_USER2 = 0x95 - DLT_USER3 = 0x96 - DLT_USER4 = 0x97 - DLT_USER5 = 0x98 - DLT_USER6 = 0x99 - DLT_USER7 = 0x9a - DLT_USER8 = 0x9b - DLT_USER9 = 0x9c - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EMT_TAGOVF = 0x1 - EMUL_ENABLED = 0x1 - EMUL_NATIVE = 0x2 - ENDRUNDISC = 0x9 - ETHERMIN = 0x2e - ETHERMTU = 0x5dc - ETHERTYPE_8023 = 0x4 - ETHERTYPE_AARP = 0x80f3 - ETHERTYPE_ACCTON = 0x8390 - ETHERTYPE_AEONIC = 0x8036 - ETHERTYPE_ALPHA = 0x814a - ETHERTYPE_AMBER = 0x6008 - ETHERTYPE_AMOEBA = 0x8145 - ETHERTYPE_AOE = 0x88a2 - ETHERTYPE_APOLLO = 0x80f7 - ETHERTYPE_APOLLODOMAIN = 0x8019 - ETHERTYPE_APPLETALK = 0x809b - ETHERTYPE_APPLITEK = 0x80c7 - ETHERTYPE_ARGONAUT = 0x803a - ETHERTYPE_ARP = 0x806 - ETHERTYPE_AT = 0x809b - ETHERTYPE_ATALK = 0x809b - ETHERTYPE_ATOMIC = 0x86df - ETHERTYPE_ATT = 0x8069 - ETHERTYPE_ATTSTANFORD = 0x8008 - ETHERTYPE_AUTOPHON = 0x806a - ETHERTYPE_AXIS = 0x8856 - ETHERTYPE_BCLOOP = 0x9003 - ETHERTYPE_BOFL = 0x8102 - ETHERTYPE_CABLETRON = 0x7034 - ETHERTYPE_CHAOS = 0x804 - ETHERTYPE_COMDESIGN = 0x806c - ETHERTYPE_COMPUGRAPHIC = 0x806d - ETHERTYPE_COUNTERPOINT = 0x8062 - ETHERTYPE_CRONUS = 0x8004 - ETHERTYPE_CRONUSVLN = 0x8003 - ETHERTYPE_DCA = 0x1234 - ETHERTYPE_DDE = 0x807b - ETHERTYPE_DEBNI = 0xaaaa - ETHERTYPE_DECAM = 0x8048 - ETHERTYPE_DECCUST = 0x6006 - ETHERTYPE_DECDIAG = 0x6005 - ETHERTYPE_DECDNS = 0x803c - ETHERTYPE_DECDTS = 0x803e - ETHERTYPE_DECEXPER = 0x6000 - ETHERTYPE_DECLAST = 0x8041 - ETHERTYPE_DECLTM = 0x803f - ETHERTYPE_DECMUMPS = 0x6009 - ETHERTYPE_DECNETBIOS = 0x8040 - ETHERTYPE_DELTACON = 0x86de - ETHERTYPE_DIDDLE = 0x4321 - ETHERTYPE_DLOG1 = 0x660 - ETHERTYPE_DLOG2 = 0x661 - ETHERTYPE_DN = 0x6003 - ETHERTYPE_DOGFIGHT = 0x1989 - ETHERTYPE_DSMD = 0x8039 - ETHERTYPE_ECMA = 0x803 - ETHERTYPE_ENCRYPT = 0x803d - ETHERTYPE_ES = 0x805d - ETHERTYPE_EXCELAN = 0x8010 - ETHERTYPE_EXPERDATA = 0x8049 - ETHERTYPE_FLIP = 0x8146 - ETHERTYPE_FLOWCONTROL = 0x8808 - ETHERTYPE_FRARP = 0x808 - ETHERTYPE_GENDYN = 0x8068 - ETHERTYPE_HAYES = 0x8130 - ETHERTYPE_HIPPI_FP = 0x8180 - ETHERTYPE_HITACHI = 0x8820 - ETHERTYPE_HP = 0x8005 - ETHERTYPE_IEEEPUP = 0xa00 - ETHERTYPE_IEEEPUPAT = 0xa01 - ETHERTYPE_IMLBL = 0x4c42 - ETHERTYPE_IMLBLDIAG = 0x424c - ETHERTYPE_IP = 0x800 - ETHERTYPE_IPAS = 0x876c - ETHERTYPE_IPV6 = 0x86dd - ETHERTYPE_IPX = 0x8137 - ETHERTYPE_IPXNEW = 0x8037 - ETHERTYPE_KALPANA = 0x8582 - ETHERTYPE_LANBRIDGE = 0x8038 - ETHERTYPE_LANPROBE = 0x8888 - ETHERTYPE_LAT = 0x6004 - ETHERTYPE_LBACK = 0x9000 - ETHERTYPE_LITTLE = 0x8060 - ETHERTYPE_LLDP = 0x88cc - ETHERTYPE_LOGICRAFT = 0x8148 - ETHERTYPE_LOOPBACK = 0x9000 - ETHERTYPE_MACSEC = 0x88e5 - ETHERTYPE_MATRA = 0x807a - ETHERTYPE_MAX = 0xffff - ETHERTYPE_MERIT = 0x807c - ETHERTYPE_MICP = 0x873a - ETHERTYPE_MOPDL = 0x6001 - ETHERTYPE_MOPRC = 0x6002 - ETHERTYPE_MOTOROLA = 0x818d - ETHERTYPE_MPLS = 0x8847 - ETHERTYPE_MPLS_MCAST = 0x8848 - ETHERTYPE_MUMPS = 0x813f - ETHERTYPE_NBPCC = 0x3c04 - ETHERTYPE_NBPCLAIM = 0x3c09 - ETHERTYPE_NBPCLREQ = 0x3c05 - ETHERTYPE_NBPCLRSP = 0x3c06 - ETHERTYPE_NBPCREQ = 0x3c02 - ETHERTYPE_NBPCRSP = 0x3c03 - ETHERTYPE_NBPDG = 0x3c07 - ETHERTYPE_NBPDGB = 0x3c08 - ETHERTYPE_NBPDLTE = 0x3c0a - ETHERTYPE_NBPRAR = 0x3c0c - ETHERTYPE_NBPRAS = 0x3c0b - ETHERTYPE_NBPRST = 0x3c0d - ETHERTYPE_NBPSCD = 0x3c01 - ETHERTYPE_NBPVCD = 0x3c00 - ETHERTYPE_NBS = 0x802 - ETHERTYPE_NCD = 0x8149 - ETHERTYPE_NESTAR = 0x8006 - ETHERTYPE_NETBEUI = 0x8191 - ETHERTYPE_NOVELL = 0x8138 - ETHERTYPE_NS = 0x600 - ETHERTYPE_NSAT = 0x601 - ETHERTYPE_NSCOMPAT = 0x807 - ETHERTYPE_NTRAILER = 0x10 - ETHERTYPE_OS9 = 0x7007 - ETHERTYPE_OS9NET = 0x7009 - ETHERTYPE_PACER = 0x80c6 - ETHERTYPE_PAE = 0x888e - ETHERTYPE_PBB = 0x88e7 - ETHERTYPE_PCS = 0x4242 - ETHERTYPE_PLANNING = 0x8044 - ETHERTYPE_PPP = 0x880b - ETHERTYPE_PPPOE = 0x8864 - ETHERTYPE_PPPOEDISC = 0x8863 - ETHERTYPE_PRIMENTS = 0x7031 - ETHERTYPE_PUP = 0x200 - ETHERTYPE_PUPAT = 0x200 - ETHERTYPE_QINQ = 0x88a8 - ETHERTYPE_RACAL = 0x7030 - ETHERTYPE_RATIONAL = 0x8150 - ETHERTYPE_RAWFR = 0x6559 - ETHERTYPE_RCL = 0x1995 - ETHERTYPE_RDP = 0x8739 - ETHERTYPE_RETIX = 0x80f2 - ETHERTYPE_REVARP = 0x8035 - ETHERTYPE_SCA = 0x6007 - ETHERTYPE_SECTRA = 0x86db - ETHERTYPE_SECUREDATA = 0x876d - ETHERTYPE_SGITW = 0x817e - ETHERTYPE_SG_BOUNCE = 0x8016 - ETHERTYPE_SG_DIAG = 0x8013 - ETHERTYPE_SG_NETGAMES = 0x8014 - ETHERTYPE_SG_RESV = 0x8015 - ETHERTYPE_SIMNET = 0x5208 - ETHERTYPE_SLOW = 0x8809 - ETHERTYPE_SNA = 0x80d5 - ETHERTYPE_SNMP = 0x814c - ETHERTYPE_SONIX = 0xfaf5 - ETHERTYPE_SPIDER = 0x809f - ETHERTYPE_SPRITE = 0x500 - ETHERTYPE_STP = 0x8181 - ETHERTYPE_TALARIS = 0x812b - ETHERTYPE_TALARISMC = 0x852b - ETHERTYPE_TCPCOMP = 0x876b - ETHERTYPE_TCPSM = 0x9002 - ETHERTYPE_TEC = 0x814f - ETHERTYPE_TIGAN = 0x802f - ETHERTYPE_TRAIL = 0x1000 - ETHERTYPE_TRANSETHER = 0x6558 - ETHERTYPE_TYMSHARE = 0x802e - ETHERTYPE_UBBST = 0x7005 - ETHERTYPE_UBDEBUG = 0x900 - ETHERTYPE_UBDIAGLOOP = 0x7002 - ETHERTYPE_UBDL = 0x7000 - ETHERTYPE_UBNIU = 0x7001 - ETHERTYPE_UBNMC = 0x7003 - ETHERTYPE_VALID = 0x1600 - ETHERTYPE_VARIAN = 0x80dd - ETHERTYPE_VAXELN = 0x803b - ETHERTYPE_VEECO = 0x8067 - ETHERTYPE_VEXP = 0x805b - ETHERTYPE_VGLAB = 0x8131 - ETHERTYPE_VINES = 0xbad - ETHERTYPE_VINESECHO = 0xbaf - ETHERTYPE_VINESLOOP = 0xbae - ETHERTYPE_VITAL = 0xff00 - ETHERTYPE_VLAN = 0x8100 - ETHERTYPE_VLTLMAN = 0x8080 - ETHERTYPE_VPROD = 0x805c - ETHERTYPE_VURESERVED = 0x8147 - ETHERTYPE_WATERLOO = 0x8130 - ETHERTYPE_WELLFLEET = 0x8103 - ETHERTYPE_X25 = 0x805 - ETHERTYPE_X75 = 0x801 - ETHERTYPE_XNSSM = 0x9001 - ETHERTYPE_XTP = 0x817d - ETHER_ADDR_LEN = 0x6 - ETHER_ALIGN = 0x2 - ETHER_CRC_LEN = 0x4 - ETHER_CRC_POLY_BE = 0x4c11db6 - ETHER_CRC_POLY_LE = 0xedb88320 - ETHER_HDR_LEN = 0xe - ETHER_MAX_DIX_LEN = 0x600 - ETHER_MAX_HARDMTU_LEN = 0xff9b - ETHER_MAX_LEN = 0x5ee - ETHER_MIN_LEN = 0x40 - ETHER_TYPE_LEN = 0x2 - ETHER_VLAN_ENCAP_LEN = 0x4 - EVFILT_AIO = -0x3 - EVFILT_DEVICE = -0x8 - EVFILT_PROC = -0x5 - EVFILT_READ = -0x1 - EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0x8 - EVFILT_TIMER = -0x7 - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 - EVL_ENCAPLEN = 0x4 - EVL_PRIO_BITS = 0xd - EVL_PRIO_MAX = 0x7 - EVL_VLID_MASK = 0xfff - EVL_VLID_MAX = 0xffe - EVL_VLID_MIN = 0x1 - EVL_VLID_NULL = 0x0 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_DISPATCH = 0x80 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG1 = 0x2000 - EV_ONESHOT = 0x10 - EV_RECEIPT = 0x40 - EV_SYSFLAGS = 0xf000 - EXTA = 0x4b00 - EXTB = 0x9600 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x400 - FLUSHO = 0x800000 - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0xa - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0x7 - F_GETOWN = 0x5 - F_ISATTY = 0xb - F_OK = 0x0 - F_RDLCK = 0x1 - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0x8 - F_SETLKW = 0x9 - F_SETOWN = 0x6 - F_UNLCK = 0x2 - F_WRLCK = 0x3 - HUPCL = 0x4000 - HW_MACHINE = 0x1 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFAN_ARRIVAL = 0x0 - IFAN_DEPARTURE = 0x1 - IFF_ALLMULTI = 0x200 - IFF_BROADCAST = 0x2 - IFF_CANTCHANGE = 0x8e52 - IFF_DEBUG = 0x4 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PROMISC = 0x100 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_STATICARP = 0x20 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_1822 = 0x2 - IFT_A12MPPSWITCH = 0x82 - IFT_AAL2 = 0xbb - IFT_AAL5 = 0x31 - IFT_ADSL = 0x5e - IFT_AFLANE8023 = 0x3b - IFT_AFLANE8025 = 0x3c - IFT_ARAP = 0x58 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ASYNC = 0x54 - IFT_ATM = 0x25 - IFT_ATMDXI = 0x69 - IFT_ATMFUNI = 0x6a - IFT_ATMIMA = 0x6b - IFT_ATMLOGICAL = 0x50 - IFT_ATMRADIO = 0xbd - IFT_ATMSUBINTERFACE = 0x86 - IFT_ATMVCIENDPT = 0xc2 - IFT_ATMVIRTUAL = 0x95 - IFT_BGPPOLICYACCOUNTING = 0xa2 - IFT_BLUETOOTH = 0xf8 - IFT_BRIDGE = 0xd1 - IFT_BSC = 0x53 - IFT_CARP = 0xf7 - IFT_CCTEMUL = 0x3d - IFT_CEPT = 0x13 - IFT_CES = 0x85 - IFT_CHANNEL = 0x46 - IFT_CNR = 0x55 - IFT_COFFEE = 0x84 - IFT_COMPOSITELINK = 0x9b - IFT_DCN = 0x8d - IFT_DIGITALPOWERLINE = 0x8a - IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba - IFT_DLSW = 0x4a - IFT_DOCSCABLEDOWNSTREAM = 0x80 - IFT_DOCSCABLEMACLAYER = 0x7f - IFT_DOCSCABLEUPSTREAM = 0x81 - IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd - IFT_DS0 = 0x51 - IFT_DS0BUNDLE = 0x52 - IFT_DS1FDL = 0xaa - IFT_DS3 = 0x1e - IFT_DTM = 0x8c - IFT_DUMMY = 0xf1 - IFT_DVBASILN = 0xac - IFT_DVBASIOUT = 0xad - IFT_DVBRCCDOWNSTREAM = 0x93 - IFT_DVBRCCMACLAYER = 0x92 - IFT_DVBRCCUPSTREAM = 0x94 - IFT_ECONET = 0xce - IFT_ENC = 0xf4 - IFT_EON = 0x19 - IFT_EPLRS = 0x57 - IFT_ESCON = 0x49 - IFT_ETHER = 0x6 - IFT_FAITH = 0xf3 - IFT_FAST = 0x7d - IFT_FASTETHER = 0x3e - IFT_FASTETHERFX = 0x45 - IFT_FDDI = 0xf - IFT_FIBRECHANNEL = 0x38 - IFT_FRAMERELAYINTERCONNECT = 0x3a - IFT_FRAMERELAYMPI = 0x5c - IFT_FRDLCIENDPT = 0xc1 - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_FRF16MFRBUNDLE = 0xa3 - IFT_FRFORWARD = 0x9e - IFT_G703AT2MB = 0x43 - IFT_G703AT64K = 0x42 - IFT_GIF = 0xf0 - IFT_GIGABITETHERNET = 0x75 - IFT_GR303IDT = 0xb2 - IFT_GR303RDT = 0xb1 - IFT_H323GATEKEEPER = 0xa4 - IFT_H323PROXY = 0xa5 - IFT_HDH1822 = 0x3 - IFT_HDLC = 0x76 - IFT_HDSL2 = 0xa8 - IFT_HIPERLAN2 = 0xb7 - IFT_HIPPI = 0x2f - IFT_HIPPIINTERFACE = 0x39 - IFT_HOSTPAD = 0x5a - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IBM370PARCHAN = 0x48 - IFT_IDSL = 0x9a - IFT_IEEE1394 = 0x90 - IFT_IEEE80211 = 0x47 - IFT_IEEE80212 = 0x37 - IFT_IEEE8023ADLAG = 0xa1 - IFT_IFGSN = 0x91 - IFT_IMT = 0xbe - IFT_INFINIBAND = 0xc7 - IFT_INTERLEAVE = 0x7c - IFT_IP = 0x7e - IFT_IPFORWARD = 0x8e - IFT_IPOVERATM = 0x72 - IFT_IPOVERCDLC = 0x6d - IFT_IPOVERCLAW = 0x6e - IFT_IPSWITCH = 0x4e - IFT_ISDN = 0x3f - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISDNS = 0x4b - IFT_ISDNU = 0x4c - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88025CRFPINT = 0x62 - IFT_ISO88025DTR = 0x56 - IFT_ISO88025FIBER = 0x73 - IFT_ISO88026 = 0xa - IFT_ISUP = 0xb3 - IFT_L2VLAN = 0x87 - IFT_L3IPVLAN = 0x88 - IFT_L3IPXVLAN = 0x89 - IFT_LAPB = 0x10 - IFT_LAPD = 0x4d - IFT_LAPF = 0x77 - IFT_LINEGROUP = 0xd2 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MBIM = 0xfa - IFT_MEDIAMAILOVERIP = 0x8b - IFT_MFSIGLINK = 0xa7 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_MPC = 0x71 - IFT_MPLS = 0xa6 - IFT_MPLSTUNNEL = 0x96 - IFT_MSDSL = 0x8f - IFT_MVL = 0xbf - IFT_MYRINET = 0x63 - IFT_NFAS = 0xaf - IFT_NSIP = 0x1b - IFT_OPTICALCHANNEL = 0xc3 - IFT_OPTICALTRANSPORT = 0xc4 - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PFLOG = 0xf5 - IFT_PFLOW = 0xf9 - IFT_PFSYNC = 0xf6 - IFT_PLC = 0xae - IFT_PON155 = 0xcf - IFT_PON622 = 0xd0 - IFT_POS = 0xab - IFT_PPP = 0x17 - IFT_PPPMULTILINKBUNDLE = 0x6c - IFT_PROPATM = 0xc5 - IFT_PROPBWAP2MP = 0xb8 - IFT_PROPCNLS = 0x59 - IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 - IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 - IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 - IFT_PROPMUX = 0x36 - IFT_PROPVIRTUAL = 0x35 - IFT_PROPWIRELESSP2P = 0x9d - IFT_PTPSERIAL = 0x16 - IFT_PVC = 0xf2 - IFT_Q2931 = 0xc9 - IFT_QLLC = 0x44 - IFT_RADIOMAC = 0xbc - IFT_RADSL = 0x5f - IFT_REACHDSL = 0xc0 - IFT_RFC1483 = 0x9f - IFT_RS232 = 0x21 - IFT_RSRB = 0x4f - IFT_SDLC = 0x11 - IFT_SDSL = 0x60 - IFT_SHDSL = 0xa9 - IFT_SIP = 0x1f - IFT_SIPSIG = 0xcc - IFT_SIPTG = 0xcb - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SONET = 0x27 - IFT_SONETOVERHEADCHANNEL = 0xb9 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_SRP = 0x97 - IFT_SS7SIGLINK = 0x9c - IFT_STACKTOSTACK = 0x6f - IFT_STARLAN = 0xb - IFT_T1 = 0x12 - IFT_TDLC = 0x74 - IFT_TELINK = 0xc8 - IFT_TERMPAD = 0x5b - IFT_TR008 = 0xb0 - IFT_TRANSPHDLC = 0x7b - IFT_TUNNEL = 0x83 - IFT_ULTRA = 0x1d - IFT_USB = 0xa0 - IFT_V11 = 0x40 - IFT_V35 = 0x2d - IFT_V36 = 0x41 - IFT_V37 = 0x78 - IFT_VDSL = 0x61 - IFT_VIRTUALIPADDRESS = 0x70 - IFT_VIRTUALTG = 0xca - IFT_VOICEDID = 0xd5 - IFT_VOICEEM = 0x64 - IFT_VOICEEMFGD = 0xd3 - IFT_VOICEENCAP = 0x67 - IFT_VOICEFGDEANA = 0xd4 - IFT_VOICEFXO = 0x65 - IFT_VOICEFXS = 0x66 - IFT_VOICEOVERATM = 0x98 - IFT_VOICEOVERCABLE = 0xc6 - IFT_VOICEOVERFRAMERELAY = 0x99 - IFT_VOICEOVERIP = 0x68 - IFT_X213 = 0x5d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25HUNTGROUP = 0x7a - IFT_X25MLP = 0x79 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LOOPBACKNET = 0x7f - IN_RFC3021_HOST = 0x1 - IN_RFC3021_NET = 0xfffffffe - IN_RFC3021_NSHIFT = 0x1f - IPPROTO_AH = 0x33 - IPPROTO_CARP = 0x70 - IPPROTO_DIVERT = 0x102 - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GRE = 0x2f - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IGMP = 0x2 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPIP = 0x4 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_MAX = 0x100 - IPPROTO_MAXID = 0x103 - IPPROTO_MOBILE = 0x37 - IPPROTO_MPLS = 0x89 - IPPROTO_NONE = 0x3b - IPPROTO_PFSYNC = 0xf0 - IPPROTO_PIM = 0x67 - IPPROTO_PUP = 0xc - IPPROTO_RAW = 0xff - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_TCP = 0x6 - IPPROTO_TP = 0x1d - IPPROTO_UDP = 0x11 - IPPROTO_UDPLITE = 0x88 - IPV6_AUTH_LEVEL = 0x35 - IPV6_AUTOFLOWLABEL = 0x3b - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_DONTFRAG = 0x3e - IPV6_DSTOPTS = 0x32 - IPV6_ESP_NETWORK_LEVEL = 0x37 - IPV6_ESP_TRANS_LEVEL = 0x36 - IPV6_FAITH = 0x1d - IPV6_FLOWINFO_MASK = 0xfffffff - IPV6_FLOWLABEL_MASK = 0xfffff - IPV6_FRAGTTL = 0x78 - IPV6_HLIMDEC = 0x1 - IPV6_HOPLIMIT = 0x2f - IPV6_HOPOPTS = 0x31 - IPV6_IPCOMP_LEVEL = 0x3c - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXPACKET = 0xffff - IPV6_MINHOPCOUNT = 0x41 - IPV6_MMTU = 0x500 - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_OPTIONS = 0x1 - IPV6_PATHMTU = 0x2c - IPV6_PIPEX = 0x3f - IPV6_PKTINFO = 0x2e - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_RECVDSTOPTS = 0x28 - IPV6_RECVDSTPORT = 0x40 - IPV6_RECVHOPLIMIT = 0x25 - IPV6_RECVHOPOPTS = 0x27 - IPV6_RECVPATHMTU = 0x2b - IPV6_RECVPKTINFO = 0x24 - IPV6_RECVRTHDR = 0x26 - IPV6_RECVTCLASS = 0x39 - IPV6_RTABLE = 0x1021 - IPV6_RTHDR = 0x33 - IPV6_RTHDRDSTOPTS = 0x23 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x3d - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2a - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IP_ADD_MEMBERSHIP = 0xc - IP_AUTH_LEVEL = 0x14 - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DROP_MEMBERSHIP = 0xd - IP_ESP_NETWORK_LEVEL = 0x16 - IP_ESP_TRANS_LEVEL = 0x15 - IP_HDRINCL = 0x2 - IP_IPCOMP_LEVEL = 0x1d - IP_IPDEFTTL = 0x25 - IP_IPSECFLOWINFO = 0x24 - IP_IPSEC_LOCAL_AUTH = 0x1b - IP_IPSEC_LOCAL_CRED = 0x19 - IP_IPSEC_LOCAL_ID = 0x17 - IP_IPSEC_REMOTE_AUTH = 0x1c - IP_IPSEC_REMOTE_CRED = 0x1a - IP_IPSEC_REMOTE_ID = 0x18 - IP_MAXPACKET = 0xffff - IP_MAX_MEMBERSHIPS = 0xfff - IP_MF = 0x2000 - IP_MINTTL = 0x20 - IP_MIN_MEMBERSHIPS = 0xf - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_OFFMASK = 0x1fff - IP_OPTIONS = 0x1 - IP_PIPEX = 0x22 - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVDSTPORT = 0x21 - IP_RECVIF = 0x1e - IP_RECVOPTS = 0x5 - IP_RECVRETOPTS = 0x6 - IP_RECVRTABLE = 0x23 - IP_RECVTTL = 0x1f - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_RTABLE = 0x1021 - IP_SENDSRCADDR = 0x7 - IP_TOS = 0x3 - IP_TTL = 0x4 - ISIG = 0x80 - ISTRIP = 0x20 - IUCLC = 0x1000 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - KERN_HOSTNAME = 0xa - KERN_OSRELEASE = 0x2 - KERN_OSTYPE = 0x1 - KERN_VERSION = 0x4 - LCNT_OVERLOAD_FLUSH = 0x6 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x6 - MADV_NORMAL = 0x0 - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_SPACEAVAIL = 0x5 - MADV_WILLNEED = 0x3 - MAP_ANON = 0x1000 - MAP_ANONYMOUS = 0x1000 - MAP_CONCEAL = 0x8000 - MAP_COPY = 0x2 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_FLAGMASK = 0xfff7 - MAP_HASSEMAPHORE = 0x0 - MAP_INHERIT = 0x0 - MAP_INHERIT_COPY = 0x1 - MAP_INHERIT_NONE = 0x2 - MAP_INHERIT_SHARE = 0x0 - MAP_INHERIT_ZERO = 0x3 - MAP_NOEXTEND = 0x0 - MAP_NORESERVE = 0x0 - MAP_PRIVATE = 0x2 - MAP_RENAME = 0x0 - MAP_SHARED = 0x1 - MAP_STACK = 0x4000 - MAP_TRYFIXED = 0x0 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MNT_ASYNC = 0x40 - MNT_DEFEXPORTED = 0x200 - MNT_DELEXPORT = 0x20000 - MNT_DOOMED = 0x8000000 - MNT_EXPORTANON = 0x400 - MNT_EXPORTED = 0x100 - MNT_EXRDONLY = 0x80 - MNT_FORCE = 0x80000 - MNT_LAZY = 0x3 - MNT_LOCAL = 0x1000 - MNT_NOATIME = 0x8000 - MNT_NODEV = 0x10 - MNT_NOEXEC = 0x4 - MNT_NOPERM = 0x20 - MNT_NOSUID = 0x8 - MNT_NOWAIT = 0x2 - MNT_QUOTA = 0x2000 - MNT_RDONLY = 0x1 - MNT_RELOAD = 0x40000 - MNT_ROOTFS = 0x4000 - MNT_SOFTDEP = 0x4000000 - MNT_STALLED = 0x100000 - MNT_SWAPPABLE = 0x200000 - MNT_SYNCHRONOUS = 0x2 - MNT_UPDATE = 0x10000 - MNT_VISFLAGMASK = 0x400ffff - MNT_WAIT = 0x1 - MNT_WANTRDWR = 0x2000000 - MNT_WXALLOWED = 0x800 - MSG_BCAST = 0x100 - MSG_CMSG_CLOEXEC = 0x800 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOR = 0x8 - MSG_MCAST = 0x200 - MSG_NOSIGNAL = 0x400 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x4 - MS_SYNC = 0x2 - NAME_MAX = 0xff - NET_RT_DUMP = 0x1 - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x3 - NET_RT_IFNAMES = 0x6 - NET_RT_MAXID = 0x7 - NET_RT_STATS = 0x4 - NET_RT_TABLE = 0x5 - NFDBITS = 0x20 - NOFLSH = 0x80000000 - NOKERNINFO = 0x2000000 - NOTE_ATTRIB = 0x8 - NOTE_CHANGE = 0x1 - NOTE_CHILD = 0x4 - NOTE_DELETE = 0x1 - NOTE_EOF = 0x2 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXTEND = 0x4 - NOTE_FORK = 0x40000000 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_PCTRLMASK = 0xf0000000 - NOTE_PDATAMASK = 0xfffff - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_TRUNCATE = 0x80 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - OLCUC = 0x20 - ONLCR = 0x2 - ONLRET = 0x80 - ONOCR = 0x40 - ONOEOT = 0x8 - OPOST = 0x1 - OXTABS = 0x4 - O_ACCMODE = 0x3 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x10000 - O_CREAT = 0x200 - O_DIRECTORY = 0x20000 - O_DSYNC = 0x80 - O_EXCL = 0x800 - O_EXLOCK = 0x20 - O_FSYNC = 0x80 - O_NDELAY = 0x4 - O_NOCTTY = 0x8000 - O_NOFOLLOW = 0x100 - O_NONBLOCK = 0x4 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_RSYNC = 0x80 - O_SHLOCK = 0x10 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PF_FLUSH = 0x1 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_MEMLOCK = 0x6 - RLIMIT_NOFILE = 0x8 - RLIMIT_NPROC = 0x7 - RLIMIT_RSS = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BFD = 0xb - RTAX_BRD = 0x7 - RTAX_DNS = 0xc - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_LABEL = 0xa - RTAX_MAX = 0xf - RTAX_NETMASK = 0x2 - RTAX_SEARCH = 0xe - RTAX_SRC = 0x8 - RTAX_SRCMASK = 0x9 - RTAX_STATIC = 0xd - RTA_AUTHOR = 0x40 - RTA_BFD = 0x800 - RTA_BRD = 0x80 - RTA_DNS = 0x1000 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_LABEL = 0x400 - RTA_NETMASK = 0x4 - RTA_SEARCH = 0x4000 - RTA_SRC = 0x100 - RTA_SRCMASK = 0x200 - RTA_STATIC = 0x2000 - RTF_ANNOUNCE = 0x4000 - RTF_BFD = 0x1000000 - RTF_BLACKHOLE = 0x1000 - RTF_BROADCAST = 0x400000 - RTF_CACHED = 0x20000 - RTF_CLONED = 0x10000 - RTF_CLONING = 0x100 - RTF_CONNECTED = 0x800000 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_FMASK = 0x110fc08 - RTF_GATEWAY = 0x2 - RTF_HOST = 0x4 - RTF_LLINFO = 0x400 - RTF_LOCAL = 0x200000 - RTF_MODIFIED = 0x20 - RTF_MPATH = 0x40000 - RTF_MPLS = 0x100000 - RTF_MULTICAST = 0x200 - RTF_PERMANENT_ARP = 0x2000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_PROTO3 = 0x2000 - RTF_REJECT = 0x8 - RTF_STATIC = 0x800 - RTF_UP = 0x1 - RTF_USETRAILERS = 0x8000 - RTM_80211INFO = 0x15 - RTM_ADD = 0x1 - RTM_BFD = 0x12 - RTM_CHANGE = 0x3 - RTM_CHGADDRATTR = 0x14 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_DESYNC = 0x10 - RTM_GET = 0x4 - RTM_IFANNOUNCE = 0xf - RTM_IFINFO = 0xe - RTM_INVALIDATE = 0x11 - RTM_LOSING = 0x5 - RTM_MAXSIZE = 0x800 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_PROPOSAL = 0x13 - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RT_TABLEID_BITS = 0x8 - RT_TABLEID_MASK = 0xff - RT_TABLEID_MAX = 0xff - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - RUSAGE_THREAD = 0x1 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x4 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80206931 - SIOCAIFADDR = 0x8040691a - SIOCAIFGROUP = 0x80286987 - SIOCATMARK = 0x40047307 - SIOCBRDGADD = 0x8060693c - SIOCBRDGADDL = 0x80606949 - SIOCBRDGADDS = 0x80606941 - SIOCBRDGARL = 0x808c694d - SIOCBRDGDADDR = 0x81286947 - SIOCBRDGDEL = 0x8060693d - SIOCBRDGDELS = 0x80606942 - SIOCBRDGFLUSH = 0x80606948 - SIOCBRDGFRL = 0x808c694e - SIOCBRDGGCACHE = 0xc0186941 - SIOCBRDGGFD = 0xc0186952 - SIOCBRDGGHT = 0xc0186951 - SIOCBRDGGIFFLGS = 0xc060693e - SIOCBRDGGMA = 0xc0186953 - SIOCBRDGGPARAM = 0xc0406958 - SIOCBRDGGPRI = 0xc0186950 - SIOCBRDGGRL = 0xc030694f - SIOCBRDGGTO = 0xc0186946 - SIOCBRDGIFS = 0xc0606942 - SIOCBRDGRTS = 0xc0206943 - SIOCBRDGSADDR = 0xc1286944 - SIOCBRDGSCACHE = 0x80186940 - SIOCBRDGSFD = 0x80186952 - SIOCBRDGSHT = 0x80186951 - SIOCBRDGSIFCOST = 0x80606955 - SIOCBRDGSIFFLGS = 0x8060693f - SIOCBRDGSIFPRIO = 0x80606954 - SIOCBRDGSIFPROT = 0x8060694a - SIOCBRDGSMA = 0x80186953 - SIOCBRDGSPRI = 0x80186950 - SIOCBRDGSPROTO = 0x8018695a - SIOCBRDGSTO = 0x80186945 - SIOCBRDGSTXHC = 0x80186959 - SIOCDELLABEL = 0x80206997 - SIOCDELMULTI = 0x80206932 - SIOCDIFADDR = 0x80206919 - SIOCDIFGROUP = 0x80286989 - SIOCDIFPARENT = 0x802069b4 - SIOCDIFPHYADDR = 0x80206949 - SIOCDPWE3NEIGHBOR = 0x802069de - SIOCDVNETID = 0x802069af - SIOCGETKALIVE = 0xc01869a4 - SIOCGETLABEL = 0x8020699a - SIOCGETMPWCFG = 0xc02069ae - SIOCGETPFLOW = 0xc02069fe - SIOCGETPFSYNC = 0xc02069f8 - SIOCGETSGCNT = 0xc0207534 - SIOCGETVIFCNT = 0xc0287533 - SIOCGETVLAN = 0xc0206990 - SIOCGIFADDR = 0xc0206921 - SIOCGIFBRDADDR = 0xc0206923 - SIOCGIFCONF = 0xc0106924 - SIOCGIFDATA = 0xc020691b - SIOCGIFDESCR = 0xc0206981 - SIOCGIFDSTADDR = 0xc0206922 - SIOCGIFFLAGS = 0xc0206911 - SIOCGIFGATTR = 0xc028698b - SIOCGIFGENERIC = 0xc020693a - SIOCGIFGLIST = 0xc028698d - SIOCGIFGMEMB = 0xc028698a - SIOCGIFGROUP = 0xc0286988 - SIOCGIFHARDMTU = 0xc02069a5 - SIOCGIFLLPRIO = 0xc02069b6 - SIOCGIFMEDIA = 0xc0406938 - SIOCGIFMETRIC = 0xc0206917 - SIOCGIFMTU = 0xc020697e - SIOCGIFNETMASK = 0xc0206925 - SIOCGIFPAIR = 0xc02069b1 - SIOCGIFPARENT = 0xc02069b3 - SIOCGIFPRIORITY = 0xc020699c - SIOCGIFRDOMAIN = 0xc02069a0 - SIOCGIFRTLABEL = 0xc0206983 - SIOCGIFRXR = 0x802069aa - SIOCGIFSFFPAGE = 0xc1126939 - SIOCGIFXFLAGS = 0xc020699e - SIOCGLIFPHYADDR = 0xc218694b - SIOCGLIFPHYDF = 0xc02069c2 - SIOCGLIFPHYECN = 0xc02069c8 - SIOCGLIFPHYRTABLE = 0xc02069a2 - SIOCGLIFPHYTTL = 0xc02069a9 - SIOCGPGRP = 0x40047309 - SIOCGPWE3 = 0xc0206998 - SIOCGPWE3CTRLWORD = 0xc02069dc - SIOCGPWE3FAT = 0xc02069dd - SIOCGPWE3NEIGHBOR = 0xc21869de - SIOCGRXHPRIO = 0xc02069db - SIOCGSPPPPARAMS = 0xc0206994 - SIOCGTXHPRIO = 0xc02069c6 - SIOCGUMBINFO = 0xc02069be - SIOCGUMBPARAM = 0xc02069c0 - SIOCGVH = 0xc02069f6 - SIOCGVNETFLOWID = 0xc02069c4 - SIOCGVNETID = 0xc02069a7 - SIOCIFAFATTACH = 0x801169ab - SIOCIFAFDETACH = 0x801169ac - SIOCIFCREATE = 0x8020697a - SIOCIFDESTROY = 0x80206979 - SIOCIFGCLONERS = 0xc0106978 - SIOCSETKALIVE = 0x801869a3 - SIOCSETLABEL = 0x80206999 - SIOCSETMPWCFG = 0x802069ad - SIOCSETPFLOW = 0x802069fd - SIOCSETPFSYNC = 0x802069f7 - SIOCSETVLAN = 0x8020698f - SIOCSIFADDR = 0x8020690c - SIOCSIFBRDADDR = 0x80206913 - SIOCSIFDESCR = 0x80206980 - SIOCSIFDSTADDR = 0x8020690e - SIOCSIFFLAGS = 0x80206910 - SIOCSIFGATTR = 0x8028698c - SIOCSIFGENERIC = 0x80206939 - SIOCSIFLLADDR = 0x8020691f - SIOCSIFLLPRIO = 0x802069b5 - SIOCSIFMEDIA = 0xc0206937 - SIOCSIFMETRIC = 0x80206918 - SIOCSIFMTU = 0x8020697f - SIOCSIFNETMASK = 0x80206916 - SIOCSIFPAIR = 0x802069b0 - SIOCSIFPARENT = 0x802069b2 - SIOCSIFPRIORITY = 0x8020699b - SIOCSIFRDOMAIN = 0x8020699f - SIOCSIFRTLABEL = 0x80206982 - SIOCSIFXFLAGS = 0x8020699d - SIOCSLIFPHYADDR = 0x8218694a - SIOCSLIFPHYDF = 0x802069c1 - SIOCSLIFPHYECN = 0x802069c7 - SIOCSLIFPHYRTABLE = 0x802069a1 - SIOCSLIFPHYTTL = 0x802069a8 - SIOCSPGRP = 0x80047308 - SIOCSPWE3CTRLWORD = 0x802069dc - SIOCSPWE3FAT = 0x802069dd - SIOCSPWE3NEIGHBOR = 0x821869de - SIOCSRXHPRIO = 0x802069db - SIOCSSPPPPARAMS = 0x80206993 - SIOCSTXHPRIO = 0x802069c5 - SIOCSUMBPARAM = 0x802069bf - SIOCSVH = 0xc02069f5 - SIOCSVNETFLOWID = 0x802069c3 - SIOCSVNETID = 0x802069a6 - SIOCSWGDPID = 0xc018695b - SIOCSWGMAXFLOW = 0xc0186960 - SIOCSWGMAXGROUP = 0xc018695d - SIOCSWSDPID = 0x8018695c - SIOCSWSPORTNO = 0xc060695f - SOCK_CLOEXEC = 0x8000 - SOCK_DGRAM = 0x2 - SOCK_DNS = 0x1000 - SOCK_NONBLOCK = 0x4000 - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_BINDANY = 0x1000 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 - SO_DOMAIN = 0x1024 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LINGER = 0x80 - SO_NETPROC = 0x1020 - SO_OOBINLINE = 0x100 - SO_PEERCRED = 0x1022 - SO_PROTOCOL = 0x1025 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_RTABLE = 0x1021 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_SPLICE = 0x1023 - SO_TIMESTAMP = 0x800 - SO_TYPE = 0x1008 - SO_USELOOPBACK = 0x40 - SO_ZEROIZE = 0x2000 - S_BLKSIZE = 0x200 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFLNK = 0xa000 - S_IFMT = 0xf000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISTXT = 0x200 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXGRP = 0x8 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - TCIFLUSH = 0x1 - TCIOFF = 0x3 - TCIOFLUSH = 0x3 - TCION = 0x4 - TCOFLUSH = 0x2 - TCOOFF = 0x1 - TCOON = 0x2 - TCP_MAXBURST = 0x4 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x3 - TCP_MAX_WINSHIFT = 0xe - TCP_MD5SIG = 0x4 - TCP_MSS = 0x200 - TCP_NODELAY = 0x1 - TCP_NOPUSH = 0x10 - TCP_SACKHOLE_LIMIT = 0x80 - TCP_SACK_ENABLE = 0x8 - TCSAFLUSH = 0x2 - TIMER_ABSTIME = 0x1 - TIMER_RELTIME = 0x0 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCHKVERAUTH = 0x2000741e - TIOCCLRVERAUTH = 0x2000741d - TIOCCONS = 0x80047462 - TIOCDRAIN = 0x2000745e - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLAG_CLOCAL = 0x2 - TIOCFLAG_CRTSCTS = 0x4 - TIOCFLAG_MDMBUF = 0x8 - TIOCFLAG_PPS = 0x10 - TIOCFLAG_SOFTCAR = 0x1 - TIOCFLUSH = 0x80047410 - TIOCGETA = 0x402c7413 - TIOCGETD = 0x4004741a - TIOCGFLAGS = 0x4004745d - TIOCGPGRP = 0x40047477 - TIOCGSID = 0x40047463 - TIOCGTSTAMP = 0x4010745b - TIOCGWINSZ = 0x40087468 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGET = 0x4004746a - TIOCMODG = 0x4004746a - TIOCMODS = 0x8004746d - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCREMOTE = 0x80047469 - TIOCSBRK = 0x2000747b - TIOCSCTTY = 0x20007461 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x802c7414 - TIOCSETAF = 0x802c7416 - TIOCSETAW = 0x802c7415 - TIOCSETD = 0x8004741b - TIOCSETVERAUTH = 0x8004741c - TIOCSFLAGS = 0x8004745c - TIOCSIG = 0x8004745f - TIOCSPGRP = 0x80047476 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x20007465 - TIOCSTOP = 0x2000746f - TIOCSTSTAMP = 0x8008745a - TIOCSWINSZ = 0x80087467 - TIOCUCNTL = 0x80047466 - TIOCUCNTL_CBRK = 0x7a - TIOCUCNTL_SBRK = 0x7b - TOSTOP = 0x400000 - UTIME_NOW = -0x2 - UTIME_OMIT = -0x1 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 - VM_ANONMIN = 0x7 - VM_LOADAVG = 0x2 - VM_MALLOC_CONF = 0xc - VM_MAXID = 0xd - VM_MAXSLP = 0xa - VM_METER = 0x1 - VM_NKMEMPAGES = 0x6 - VM_PSSTRINGS = 0x3 - VM_SWAPENCRYPT = 0x5 - VM_USPACE = 0xb - VM_UVMEXP = 0x4 - VM_VNODEMIN = 0x9 - VM_VTEXTMIN = 0x8 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VTIME = 0x11 - VWERASE = 0x4 - WALTSIG = 0x4 - WCONTINUED = 0x8 - WCOREFLAG = 0x80 - WNOHANG = 0x1 - WUNTRACED = 0x2 - XCASE = 0x1000000 -) - -// Errors -const ( - E2BIG = syscall.Errno(0x7) - EACCES = syscall.Errno(0xd) - EADDRINUSE = syscall.Errno(0x30) - EADDRNOTAVAIL = syscall.Errno(0x31) - EAFNOSUPPORT = syscall.Errno(0x2f) - EAGAIN = syscall.Errno(0x23) - EALREADY = syscall.Errno(0x25) - EAUTH = syscall.Errno(0x50) - EBADF = syscall.Errno(0x9) - EBADMSG = syscall.Errno(0x5c) - EBADRPC = syscall.Errno(0x48) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x58) - ECHILD = syscall.Errno(0xa) - ECONNABORTED = syscall.Errno(0x35) - ECONNREFUSED = syscall.Errno(0x3d) - ECONNRESET = syscall.Errno(0x36) - EDEADLK = syscall.Errno(0xb) - EDESTADDRREQ = syscall.Errno(0x27) - EDOM = syscall.Errno(0x21) - EDQUOT = syscall.Errno(0x45) - EEXIST = syscall.Errno(0x11) - EFAULT = syscall.Errno(0xe) - EFBIG = syscall.Errno(0x1b) - EFTYPE = syscall.Errno(0x4f) - EHOSTDOWN = syscall.Errno(0x40) - EHOSTUNREACH = syscall.Errno(0x41) - EIDRM = syscall.Errno(0x59) - EILSEQ = syscall.Errno(0x54) - EINPROGRESS = syscall.Errno(0x24) - EINTR = syscall.Errno(0x4) - EINVAL = syscall.Errno(0x16) - EIO = syscall.Errno(0x5) - EIPSEC = syscall.Errno(0x52) - EISCONN = syscall.Errno(0x38) - EISDIR = syscall.Errno(0x15) - ELAST = syscall.Errno(0x5f) - ELOOP = syscall.Errno(0x3e) - EMEDIUMTYPE = syscall.Errno(0x56) - EMFILE = syscall.Errno(0x18) - EMLINK = syscall.Errno(0x1f) - EMSGSIZE = syscall.Errno(0x28) - ENAMETOOLONG = syscall.Errno(0x3f) - ENEEDAUTH = syscall.Errno(0x51) - ENETDOWN = syscall.Errno(0x32) - ENETRESET = syscall.Errno(0x34) - ENETUNREACH = syscall.Errno(0x33) - ENFILE = syscall.Errno(0x17) - ENOATTR = syscall.Errno(0x53) - ENOBUFS = syscall.Errno(0x37) - ENODEV = syscall.Errno(0x13) - ENOENT = syscall.Errno(0x2) - ENOEXEC = syscall.Errno(0x8) - ENOLCK = syscall.Errno(0x4d) - ENOMEDIUM = syscall.Errno(0x55) - ENOMEM = syscall.Errno(0xc) - ENOMSG = syscall.Errno(0x5a) - ENOPROTOOPT = syscall.Errno(0x2a) - ENOSPC = syscall.Errno(0x1c) - ENOSYS = syscall.Errno(0x4e) - ENOTBLK = syscall.Errno(0xf) - ENOTCONN = syscall.Errno(0x39) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x42) - ENOTRECOVERABLE = syscall.Errno(0x5d) - ENOTSOCK = syscall.Errno(0x26) - ENOTSUP = syscall.Errno(0x5b) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x2d) - EOVERFLOW = syscall.Errno(0x57) - EOWNERDEAD = syscall.Errno(0x5e) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x2e) - EPIPE = syscall.Errno(0x20) - EPROCLIM = syscall.Errno(0x43) - EPROCUNAVAIL = syscall.Errno(0x4c) - EPROGMISMATCH = syscall.Errno(0x4b) - EPROGUNAVAIL = syscall.Errno(0x4a) - EPROTO = syscall.Errno(0x5f) - EPROTONOSUPPORT = syscall.Errno(0x2b) - EPROTOTYPE = syscall.Errno(0x29) - ERANGE = syscall.Errno(0x22) - EREMOTE = syscall.Errno(0x47) - EROFS = syscall.Errno(0x1e) - ERPCMISMATCH = syscall.Errno(0x49) - ESHUTDOWN = syscall.Errno(0x3a) - ESOCKTNOSUPPORT = syscall.Errno(0x2c) - ESPIPE = syscall.Errno(0x1d) - ESRCH = syscall.Errno(0x3) - ESTALE = syscall.Errno(0x46) - ETIMEDOUT = syscall.Errno(0x3c) - ETOOMANYREFS = syscall.Errno(0x3b) - ETXTBSY = syscall.Errno(0x1a) - EUSERS = syscall.Errno(0x44) - EWOULDBLOCK = syscall.Errno(0x23) - EXDEV = syscall.Errno(0x12) -) - -// Signals -const ( - SIGABRT = syscall.Signal(0x6) - SIGALRM = syscall.Signal(0xe) - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x14) - SIGCONT = syscall.Signal(0x13) - SIGEMT = syscall.Signal(0x7) - SIGFPE = syscall.Signal(0x8) - SIGHUP = syscall.Signal(0x1) - SIGILL = syscall.Signal(0x4) - SIGINFO = syscall.Signal(0x1d) - SIGINT = syscall.Signal(0x2) - SIGIO = syscall.Signal(0x17) - SIGIOT = syscall.Signal(0x6) - SIGKILL = syscall.Signal(0x9) - SIGPIPE = syscall.Signal(0xd) - SIGPROF = syscall.Signal(0x1b) - SIGQUIT = syscall.Signal(0x3) - SIGSEGV = syscall.Signal(0xb) - SIGSTOP = syscall.Signal(0x11) - SIGSYS = syscall.Signal(0xc) - SIGTERM = syscall.Signal(0xf) - SIGTHR = syscall.Signal(0x20) - SIGTRAP = syscall.Signal(0x5) - SIGTSTP = syscall.Signal(0x12) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x10) - SIGUSR1 = syscall.Signal(0x1e) - SIGUSR2 = syscall.Signal(0x1f) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "device not configured"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EDEADLK", "resource deadlock avoided"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "cross-device link"}, - {19, "ENODEV", "operation not supported by device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "result too large"}, - {35, "EAGAIN", "resource temporarily unavailable"}, - {36, "EINPROGRESS", "operation now in progress"}, - {37, "EALREADY", "operation already in progress"}, - {38, "ENOTSOCK", "socket operation on non-socket"}, - {39, "EDESTADDRREQ", "destination address required"}, - {40, "EMSGSIZE", "message too long"}, - {41, "EPROTOTYPE", "protocol wrong type for socket"}, - {42, "ENOPROTOOPT", "protocol not available"}, - {43, "EPROTONOSUPPORT", "protocol not supported"}, - {44, "ESOCKTNOSUPPORT", "socket type not supported"}, - {45, "EOPNOTSUPP", "operation not supported"}, - {46, "EPFNOSUPPORT", "protocol family not supported"}, - {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, - {48, "EADDRINUSE", "address already in use"}, - {49, "EADDRNOTAVAIL", "can't assign requested address"}, - {50, "ENETDOWN", "network is down"}, - {51, "ENETUNREACH", "network is unreachable"}, - {52, "ENETRESET", "network dropped connection on reset"}, - {53, "ECONNABORTED", "software caused connection abort"}, - {54, "ECONNRESET", "connection reset by peer"}, - {55, "ENOBUFS", "no buffer space available"}, - {56, "EISCONN", "socket is already connected"}, - {57, "ENOTCONN", "socket is not connected"}, - {58, "ESHUTDOWN", "can't send after socket shutdown"}, - {59, "ETOOMANYREFS", "too many references: can't splice"}, - {60, "ETIMEDOUT", "operation timed out"}, - {61, "ECONNREFUSED", "connection refused"}, - {62, "ELOOP", "too many levels of symbolic links"}, - {63, "ENAMETOOLONG", "file name too long"}, - {64, "EHOSTDOWN", "host is down"}, - {65, "EHOSTUNREACH", "no route to host"}, - {66, "ENOTEMPTY", "directory not empty"}, - {67, "EPROCLIM", "too many processes"}, - {68, "EUSERS", "too many users"}, - {69, "EDQUOT", "disk quota exceeded"}, - {70, "ESTALE", "stale NFS file handle"}, - {71, "EREMOTE", "too many levels of remote in path"}, - {72, "EBADRPC", "RPC struct is bad"}, - {73, "ERPCMISMATCH", "RPC version wrong"}, - {74, "EPROGUNAVAIL", "RPC program not available"}, - {75, "EPROGMISMATCH", "program version wrong"}, - {76, "EPROCUNAVAIL", "bad procedure for program"}, - {77, "ENOLCK", "no locks available"}, - {78, "ENOSYS", "function not implemented"}, - {79, "EFTYPE", "inappropriate file type or format"}, - {80, "EAUTH", "authentication error"}, - {81, "ENEEDAUTH", "need authenticator"}, - {82, "EIPSEC", "IPsec processing failure"}, - {83, "ENOATTR", "attribute not found"}, - {84, "EILSEQ", "illegal byte sequence"}, - {85, "ENOMEDIUM", "no medium found"}, - {86, "EMEDIUMTYPE", "wrong medium type"}, - {87, "EOVERFLOW", "value too large to be stored in data type"}, - {88, "ECANCELED", "operation canceled"}, - {89, "EIDRM", "identifier removed"}, - {90, "ENOMSG", "no message of desired type"}, - {91, "ENOTSUP", "not supported"}, - {92, "EBADMSG", "bad message"}, - {93, "ENOTRECOVERABLE", "state not recoverable"}, - {94, "EOWNERDEAD", "previous owner died"}, - {95, "ELAST", "protocol error"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, - {6, "SIGABRT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGURG", "urgent I/O condition"}, - {17, "SIGSTOP", "suspended (signal)"}, - {18, "SIGTSTP", "suspended"}, - {19, "SIGCONT", "continued"}, - {20, "SIGCHLD", "child exited"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGIO", "I/O possible"}, - {24, "SIGXCPU", "cputime limit exceeded"}, - {25, "SIGXFSZ", "filesize limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window size changes"}, - {29, "SIGINFO", "information request"}, - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, - {32, "SIGTHR", "thread AST"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go deleted file mode 100644 index 1afee6a..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go +++ /dev/null @@ -1,1557 +0,0 @@ -// mkerrors.sh -m64 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build amd64 && solaris -// +build amd64,solaris - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -m64 _const.go - -package unix - -import "syscall" - -const ( - AF_802 = 0x12 - AF_APPLETALK = 0x10 - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_ECMA = 0x8 - AF_FILE = 0x1 - AF_GOSIP = 0x16 - AF_HYLINK = 0xf - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x1a - AF_INET_OFFLOAD = 0x1e - AF_IPX = 0x17 - AF_KEY = 0x1b - AF_LAT = 0xe - AF_LINK = 0x19 - AF_LOCAL = 0x1 - AF_MAX = 0x20 - AF_NBS = 0x7 - AF_NCA = 0x1c - AF_NIT = 0x11 - AF_NS = 0x6 - AF_OSI = 0x13 - AF_OSINET = 0x15 - AF_PACKET = 0x20 - AF_POLICY = 0x1d - AF_PUP = 0x4 - AF_ROUTE = 0x18 - AF_SNA = 0xb - AF_TRILL = 0x1f - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - AF_X25 = 0x14 - ARPHRD_ARCNET = 0x7 - ARPHRD_ATM = 0x10 - ARPHRD_AX25 = 0x3 - ARPHRD_CHAOS = 0x5 - ARPHRD_EETHER = 0x2 - ARPHRD_ETHER = 0x1 - ARPHRD_FC = 0x12 - ARPHRD_FRAME = 0xf - ARPHRD_HDLC = 0x11 - ARPHRD_IB = 0x20 - ARPHRD_IEEE802 = 0x6 - ARPHRD_IPATM = 0x13 - ARPHRD_METRICOM = 0x17 - ARPHRD_TUNNEL = 0x1f - B0 = 0x0 - B110 = 0x3 - B115200 = 0x12 - B1200 = 0x9 - B134 = 0x4 - B150 = 0x5 - B153600 = 0x13 - B1800 = 0xa - B19200 = 0xe - B200 = 0x6 - B230400 = 0x14 - B2400 = 0xb - B300 = 0x7 - B307200 = 0x15 - B38400 = 0xf - B460800 = 0x16 - B4800 = 0xc - B50 = 0x1 - B57600 = 0x10 - B600 = 0x8 - B75 = 0x2 - B76800 = 0x11 - B921600 = 0x17 - B9600 = 0xd - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = -0x3fefbd89 - BIOCGDLTLIST32 = -0x3ff7bd89 - BIOCGETIF = 0x4020426b - BIOCGETLIF = 0x4078426b - BIOCGHDRCMPLT = 0x40044274 - BIOCGRTIMEOUT = 0x4010427b - BIOCGRTIMEOUT32 = 0x4008427b - BIOCGSEESENT = 0x40044278 - BIOCGSTATS = 0x4080426f - BIOCGSTATSOLD = 0x4008426f - BIOCIMMEDIATE = -0x7ffbbd90 - BIOCPROMISC = 0x20004269 - BIOCSBLEN = -0x3ffbbd9a - BIOCSDLT = -0x7ffbbd8a - BIOCSETF = -0x7fefbd99 - BIOCSETF32 = -0x7ff7bd99 - BIOCSETIF = -0x7fdfbd94 - BIOCSETLIF = -0x7f87bd94 - BIOCSHDRCMPLT = -0x7ffbbd8b - BIOCSRTIMEOUT = -0x7fefbd86 - BIOCSRTIMEOUT32 = -0x7ff7bd86 - BIOCSSEESENT = -0x7ffbbd87 - BIOCSTCPF = -0x7fefbd8e - BIOCSUDPF = -0x7fefbd8d - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x4 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_DFLTBUFSIZE = 0x100000 - BPF_DIV = 0x30 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x1000000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_W = 0x0 - BPF_X = 0x8 - BRKINT = 0x2 - BS0 = 0x0 - BS1 = 0x2000 - BSDLY = 0x2000 - CBAUD = 0xf - CFLUSH = 0xf - CIBAUD = 0xf0000 - CLOCAL = 0x800 - CLOCK_HIGHRES = 0x4 - CLOCK_LEVEL = 0xa - CLOCK_MONOTONIC = 0x4 - CLOCK_PROCESS_CPUTIME_ID = 0x5 - CLOCK_PROF = 0x2 - CLOCK_REALTIME = 0x3 - CLOCK_THREAD_CPUTIME_ID = 0x2 - CLOCK_VIRTUAL = 0x1 - CR0 = 0x0 - CR1 = 0x200 - CR2 = 0x400 - CR3 = 0x600 - CRDLY = 0x600 - CREAD = 0x80 - CRTSCTS = 0x80000000 - CS5 = 0x0 - CS6 = 0x10 - CS7 = 0x20 - CS8 = 0x30 - CSIZE = 0x30 - CSTART = 0x11 - CSTATUS = 0x14 - CSTOP = 0x13 - CSTOPB = 0x40 - CSUSP = 0x1a - CSWTCH = 0x1a - DIOC = 0x6400 - DIOCGETB = 0x6402 - DIOCGETC = 0x6401 - DIOCGETP = 0x6408 - DIOCSETE = 0x6403 - DIOCSETP = 0x6409 - DLT_AIRONET_HEADER = 0x78 - DLT_APPLE_IP_OVER_IEEE1394 = 0x8a - DLT_ARCNET = 0x7 - DLT_ARCNET_LINUX = 0x81 - DLT_ATM_CLIP = 0x13 - DLT_ATM_RFC1483 = 0xb - DLT_AURORA = 0x7e - DLT_AX25 = 0x3 - DLT_BACNET_MS_TP = 0xa5 - DLT_CHAOS = 0x5 - DLT_CISCO_IOS = 0x76 - DLT_C_HDLC = 0x68 - DLT_DOCSIS = 0x8f - DLT_ECONET = 0x73 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0x6d - DLT_ERF_ETH = 0xaf - DLT_ERF_POS = 0xb0 - DLT_FDDI = 0xa - DLT_FRELAY = 0x6b - DLT_GCOM_SERIAL = 0xad - DLT_GCOM_T1E1 = 0xac - DLT_GPF_F = 0xab - DLT_GPF_T = 0xaa - DLT_GPRS_LLC = 0xa9 - DLT_HDLC = 0x10 - DLT_HHDLC = 0x79 - DLT_HIPPI = 0xf - DLT_IBM_SN = 0x92 - DLT_IBM_SP = 0x91 - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_IEEE802_11_RADIO_AVS = 0xa3 - DLT_IPNET = 0xe2 - DLT_IPOIB = 0xa2 - DLT_IP_OVER_FC = 0x7a - DLT_JUNIPER_ATM1 = 0x89 - DLT_JUNIPER_ATM2 = 0x87 - DLT_JUNIPER_CHDLC = 0xb5 - DLT_JUNIPER_ES = 0x84 - DLT_JUNIPER_ETHER = 0xb2 - DLT_JUNIPER_FRELAY = 0xb4 - DLT_JUNIPER_GGSN = 0x85 - DLT_JUNIPER_MFR = 0x86 - DLT_JUNIPER_MLFR = 0x83 - DLT_JUNIPER_MLPPP = 0x82 - DLT_JUNIPER_MONITOR = 0xa4 - DLT_JUNIPER_PIC_PEER = 0xae - DLT_JUNIPER_PPP = 0xb3 - DLT_JUNIPER_PPPOE = 0xa7 - DLT_JUNIPER_PPPOE_ATM = 0xa8 - DLT_JUNIPER_SERVICES = 0x88 - DLT_LINUX_IRDA = 0x90 - DLT_LINUX_LAPD = 0xb1 - DLT_LINUX_SLL = 0x71 - DLT_LOOP = 0x6c - DLT_LTALK = 0x72 - DLT_MTP2 = 0x8c - DLT_MTP2_WITH_PHDR = 0x8b - DLT_MTP3 = 0x8d - DLT_NULL = 0x0 - DLT_PCI_EXP = 0x7d - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x12 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0xe - DLT_PPP_PPPD = 0xa6 - DLT_PRISM_HEADER = 0x77 - DLT_PRONET = 0x4 - DLT_RAW = 0xc - DLT_RAWAF_MASK = 0x2240000 - DLT_RIO = 0x7c - DLT_SCCP = 0x8e - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xd - DLT_SUNATM = 0x7b - DLT_SYMANTEC_FIREWALL = 0x63 - DLT_TZSP = 0x80 - ECHO = 0x8 - ECHOCTL = 0x200 - ECHOE = 0x10 - ECHOK = 0x20 - ECHOKE = 0x800 - ECHONL = 0x40 - ECHOPRT = 0x400 - EMPTY_SET = 0x0 - EMT_CPCOVF = 0x1 - EQUALITY_CHECK = 0x0 - EXTA = 0xe - EXTB = 0xf - FD_CLOEXEC = 0x1 - FD_NFDBITS = 0x40 - FD_SETSIZE = 0x10000 - FF0 = 0x0 - FF1 = 0x8000 - FFDLY = 0x8000 - FIORDCHK = 0x6603 - FLUSHALL = 0x1 - FLUSHDATA = 0x0 - FLUSHO = 0x2000 - F_ALLOCSP = 0xa - F_ALLOCSP64 = 0xa - F_BADFD = 0x2e - F_BLKSIZE = 0x13 - F_BLOCKS = 0x12 - F_CHKFL = 0x8 - F_COMPAT = 0x8 - F_DUP2FD = 0x9 - F_DUP2FD_CLOEXEC = 0x24 - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0x25 - F_FLOCK = 0x35 - F_FLOCK64 = 0x35 - F_FLOCKW = 0x36 - F_FLOCKW64 = 0x36 - F_FREESP = 0xb - F_FREESP64 = 0xb - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0xe - F_GETLK64 = 0xe - F_GETOWN = 0x17 - F_GETXFL = 0x2d - F_HASREMOTELOCKS = 0x1a - F_ISSTREAM = 0xd - F_MANDDNY = 0x10 - F_MDACC = 0x20 - F_NODNY = 0x0 - F_NPRIV = 0x10 - F_OFD_GETLK = 0x2f - F_OFD_GETLK64 = 0x2f - F_OFD_SETLK = 0x30 - F_OFD_SETLK64 = 0x30 - F_OFD_SETLKW = 0x31 - F_OFD_SETLKW64 = 0x31 - F_PRIV = 0xf - F_QUOTACTL = 0x11 - F_RDACC = 0x1 - F_RDDNY = 0x1 - F_RDLCK = 0x1 - F_REVOKE = 0x19 - F_RMACC = 0x4 - F_RMDNY = 0x4 - F_RWACC = 0x3 - F_RWDNY = 0x3 - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0x6 - F_SETLK64 = 0x6 - F_SETLK64_NBMAND = 0x2a - F_SETLKW = 0x7 - F_SETLKW64 = 0x7 - F_SETLK_NBMAND = 0x2a - F_SETOWN = 0x18 - F_SHARE = 0x28 - F_SHARE_NBMAND = 0x2b - F_UNLCK = 0x3 - F_UNLKSYS = 0x4 - F_UNSHARE = 0x29 - F_WRACC = 0x2 - F_WRDNY = 0x2 - F_WRLCK = 0x2 - HUPCL = 0x400 - IBSHIFT = 0x10 - ICANON = 0x2 - ICMP6_FILTER = 0x1 - ICRNL = 0x100 - IEXTEN = 0x8000 - IFF_ADDRCONF = 0x80000 - IFF_ALLMULTI = 0x200 - IFF_ANYCAST = 0x400000 - IFF_BROADCAST = 0x2 - IFF_CANTCHANGE = 0x7f203003b5a - IFF_COS_ENABLED = 0x200000000 - IFF_DEBUG = 0x4 - IFF_DEPRECATED = 0x40000 - IFF_DHCPRUNNING = 0x4000 - IFF_DUPLICATE = 0x4000000000 - IFF_FAILED = 0x10000000 - IFF_FIXEDMTU = 0x1000000000 - IFF_INACTIVE = 0x40000000 - IFF_INTELLIGENT = 0x400 - IFF_IPMP = 0x8000000000 - IFF_IPMP_CANTCHANGE = 0x10000000 - IFF_IPMP_INVALID = 0x1ec200080 - IFF_IPV4 = 0x1000000 - IFF_IPV6 = 0x2000000 - IFF_L3PROTECT = 0x40000000000 - IFF_LOOPBACK = 0x8 - IFF_MULTICAST = 0x800 - IFF_MULTI_BCAST = 0x1000 - IFF_NOACCEPT = 0x4000000 - IFF_NOARP = 0x80 - IFF_NOFAILOVER = 0x8000000 - IFF_NOLINKLOCAL = 0x20000000000 - IFF_NOLOCAL = 0x20000 - IFF_NONUD = 0x200000 - IFF_NORTEXCH = 0x800000 - IFF_NOTRAILERS = 0x20 - IFF_NOXMIT = 0x10000 - IFF_OFFLINE = 0x80000000 - IFF_POINTOPOINT = 0x10 - IFF_PREFERRED = 0x400000000 - IFF_PRIVATE = 0x8000 - IFF_PROMISC = 0x100 - IFF_ROUTER = 0x100000 - IFF_RUNNING = 0x40 - IFF_STANDBY = 0x20000000 - IFF_TEMPORARY = 0x800000000 - IFF_UNNUMBERED = 0x2000 - IFF_UP = 0x1 - IFF_VIRTUAL = 0x2000000000 - IFF_VRRP = 0x10000000000 - IFF_XRESOLV = 0x100000000 - IFNAMSIZ = 0x10 - IFT_1822 = 0x2 - IFT_6TO4 = 0xca - IFT_AAL5 = 0x31 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ATM = 0x25 - IFT_CEPT = 0x13 - IFT_DS3 = 0x1e - IFT_EON = 0x19 - IFT_ETHER = 0x6 - IFT_FDDI = 0xf - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_HDH1822 = 0x3 - IFT_HIPPI = 0x2f - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IB = 0xc7 - IFT_IPV4 = 0xc8 - IFT_IPV6 = 0xc9 - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88026 = 0xa - IFT_LAPB = 0x10 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_NSIP = 0x1b - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PPP = 0x17 - IFT_PROPMUX = 0x36 - IFT_PROPVIRTUAL = 0x35 - IFT_PTPSERIAL = 0x16 - IFT_RS232 = 0x21 - IFT_SDLC = 0x11 - IFT_SIP = 0x1f - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SONET = 0x27 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_STARLAN = 0xb - IFT_T1 = 0x12 - IFT_ULTRA = 0x1d - IFT_V35 = 0x2d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_AUTOCONF_MASK = 0xffff0000 - IN_AUTOCONF_NET = 0xa9fe0000 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_CLASSE_NET = 0xffffffff - IN_LOOPBACKNET = 0x7f - IN_PRIVATE12_MASK = 0xfff00000 - IN_PRIVATE12_NET = 0xac100000 - IN_PRIVATE16_MASK = 0xffff0000 - IN_PRIVATE16_NET = 0xc0a80000 - IN_PRIVATE8_MASK = 0xff000000 - IN_PRIVATE8_NET = 0xa000000 - IPPROTO_AH = 0x33 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_ENCAP = 0x4 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_HELLO = 0x3f - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IGMP = 0x2 - IPPROTO_IP = 0x0 - IPPROTO_IPV6 = 0x29 - IPPROTO_MAX = 0x100 - IPPROTO_ND = 0x4d - IPPROTO_NONE = 0x3b - IPPROTO_OSPF = 0x59 - IPPROTO_PIM = 0x67 - IPPROTO_PUP = 0xc - IPPROTO_RAW = 0xff - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_SCTP = 0x84 - IPPROTO_TCP = 0x6 - IPPROTO_UDP = 0x11 - IPV6_ADD_MEMBERSHIP = 0x9 - IPV6_BOUND_IF = 0x41 - IPV6_CHECKSUM = 0x18 - IPV6_DONTFRAG = 0x21 - IPV6_DROP_MEMBERSHIP = 0xa - IPV6_DSTOPTS = 0xf - IPV6_FLOWINFO_FLOWLABEL = 0xffff0f00 - IPV6_FLOWINFO_TCLASS = 0xf00f - IPV6_HOPLIMIT = 0xc - IPV6_HOPOPTS = 0xe - IPV6_JOIN_GROUP = 0x9 - IPV6_LEAVE_GROUP = 0xa - IPV6_MULTICAST_HOPS = 0x7 - IPV6_MULTICAST_IF = 0x6 - IPV6_MULTICAST_LOOP = 0x8 - IPV6_NEXTHOP = 0xd - IPV6_PAD1_OPT = 0x0 - IPV6_PATHMTU = 0x25 - IPV6_PKTINFO = 0xb - IPV6_PREFER_SRC_CGA = 0x20 - IPV6_PREFER_SRC_CGADEFAULT = 0x10 - IPV6_PREFER_SRC_CGAMASK = 0x30 - IPV6_PREFER_SRC_COA = 0x2 - IPV6_PREFER_SRC_DEFAULT = 0x15 - IPV6_PREFER_SRC_HOME = 0x1 - IPV6_PREFER_SRC_MASK = 0x3f - IPV6_PREFER_SRC_MIPDEFAULT = 0x1 - IPV6_PREFER_SRC_MIPMASK = 0x3 - IPV6_PREFER_SRC_NONCGA = 0x10 - IPV6_PREFER_SRC_PUBLIC = 0x4 - IPV6_PREFER_SRC_TMP = 0x8 - IPV6_PREFER_SRC_TMPDEFAULT = 0x4 - IPV6_PREFER_SRC_TMPMASK = 0xc - IPV6_RECVDSTOPTS = 0x28 - IPV6_RECVHOPLIMIT = 0x13 - IPV6_RECVHOPOPTS = 0x14 - IPV6_RECVPATHMTU = 0x24 - IPV6_RECVPKTINFO = 0x12 - IPV6_RECVRTHDR = 0x16 - IPV6_RECVRTHDRDSTOPTS = 0x17 - IPV6_RECVTCLASS = 0x19 - IPV6_RTHDR = 0x10 - IPV6_RTHDRDSTOPTS = 0x11 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SEC_OPT = 0x22 - IPV6_SRC_PREFERENCES = 0x23 - IPV6_TCLASS = 0x26 - IPV6_UNICAST_HOPS = 0x5 - IPV6_UNSPEC_SRC = 0x42 - IPV6_USE_MIN_MTU = 0x20 - IPV6_V6ONLY = 0x27 - IP_ADD_MEMBERSHIP = 0x13 - IP_ADD_SOURCE_MEMBERSHIP = 0x17 - IP_BLOCK_SOURCE = 0x15 - IP_BOUND_IF = 0x41 - IP_BROADCAST = 0x106 - IP_BROADCAST_TTL = 0x43 - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DHCPINIT_IF = 0x45 - IP_DONTFRAG = 0x1b - IP_DONTROUTE = 0x105 - IP_DROP_MEMBERSHIP = 0x14 - IP_DROP_SOURCE_MEMBERSHIP = 0x18 - IP_HDRINCL = 0x2 - IP_MAXPACKET = 0xffff - IP_MF = 0x2000 - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x10 - IP_MULTICAST_LOOP = 0x12 - IP_MULTICAST_TTL = 0x11 - IP_NEXTHOP = 0x19 - IP_OPTIONS = 0x1 - IP_PKTINFO = 0x1a - IP_RECVDSTADDR = 0x7 - IP_RECVIF = 0x9 - IP_RECVOPTS = 0x5 - IP_RECVPKTINFO = 0x1a - IP_RECVRETOPTS = 0x6 - IP_RECVSLLA = 0xa - IP_RECVTOS = 0xc - IP_RECVTTL = 0xb - IP_RETOPTS = 0x8 - IP_REUSEADDR = 0x104 - IP_SEC_OPT = 0x22 - IP_TOS = 0x3 - IP_TTL = 0x4 - IP_UNBLOCK_SOURCE = 0x16 - IP_UNSPEC_SRC = 0x42 - ISIG = 0x1 - ISTRIP = 0x20 - IUCLC = 0x200 - IXANY = 0x800 - IXOFF = 0x1000 - IXON = 0x400 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_ACCESS_DEFAULT = 0x6 - MADV_ACCESS_LWP = 0x7 - MADV_ACCESS_MANY = 0x8 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x5 - MADV_NORMAL = 0x0 - MADV_PURGE = 0x9 - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_WILLNEED = 0x3 - MAP_32BIT = 0x80 - MAP_ALIGN = 0x200 - MAP_ANON = 0x100 - MAP_ANONYMOUS = 0x100 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_INITDATA = 0x800 - MAP_NORESERVE = 0x40 - MAP_PRIVATE = 0x2 - MAP_RENAME = 0x20 - MAP_SHARED = 0x1 - MAP_TEXT = 0x400 - MAP_TYPE = 0xf - MCAST_BLOCK_SOURCE = 0x2b - MCAST_EXCLUDE = 0x2 - MCAST_INCLUDE = 0x1 - MCAST_JOIN_GROUP = 0x29 - MCAST_JOIN_SOURCE_GROUP = 0x2d - MCAST_LEAVE_GROUP = 0x2a - MCAST_LEAVE_SOURCE_GROUP = 0x2e - MCAST_UNBLOCK_SOURCE = 0x2c - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MSG_CTRUNC = 0x10 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_DUPCTRL = 0x800 - MSG_EOR = 0x8 - MSG_MAXIOVLEN = 0x10 - MSG_NOSIGNAL = 0x200 - MSG_NOTIFICATION = 0x100 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_TRUNC = 0x20 - MSG_WAITALL = 0x40 - MSG_XPG4_2 = 0x8000 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x2 - MS_OLDSYNC = 0x0 - MS_SYNC = 0x4 - M_FLUSH = 0x86 - NAME_MAX = 0xff - NEWDEV = 0x1 - NFDBITS = 0x40 - NL0 = 0x0 - NL1 = 0x100 - NLDLY = 0x100 - NOFLSH = 0x80 - OCRNL = 0x8 - OFDEL = 0x80 - OFILL = 0x40 - OLCUC = 0x2 - OLDDEV = 0x0 - ONBITSMAJOR = 0x7 - ONBITSMINOR = 0x8 - ONLCR = 0x4 - ONLRET = 0x20 - ONOCR = 0x10 - OPENFAIL = -0x1 - OPOST = 0x1 - O_ACCMODE = 0x600003 - O_APPEND = 0x8 - O_CLOEXEC = 0x800000 - O_CREAT = 0x100 - O_DIRECT = 0x2000000 - O_DIRECTORY = 0x1000000 - O_DSYNC = 0x40 - O_EXCL = 0x400 - O_EXEC = 0x400000 - O_LARGEFILE = 0x2000 - O_NDELAY = 0x4 - O_NOCTTY = 0x800 - O_NOFOLLOW = 0x20000 - O_NOLINKS = 0x40000 - O_NONBLOCK = 0x80 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_RSYNC = 0x8000 - O_SEARCH = 0x200000 - O_SIOCGIFCONF = -0x3ff796ec - O_SIOCGLIFCONF = -0x3fef9688 - O_SYNC = 0x10 - O_TRUNC = 0x200 - O_WRONLY = 0x1 - O_XATTR = 0x4000 - PARENB = 0x100 - PAREXT = 0x100000 - PARMRK = 0x8 - PARODD = 0x200 - PENDIN = 0x4000 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - RLIMIT_AS = 0x6 - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_NOFILE = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0xfffffffffffffffd - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_MAX = 0x9 - RTAX_NETMASK = 0x2 - RTAX_SRC = 0x8 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_NETMASK = 0x4 - RTA_NUMBITS = 0x9 - RTA_SRC = 0x100 - RTF_BLACKHOLE = 0x1000 - RTF_CLONING = 0x100 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_GATEWAY = 0x2 - RTF_HOST = 0x4 - RTF_INDIRECT = 0x40000 - RTF_KERNEL = 0x80000 - RTF_LLINFO = 0x400 - RTF_MASK = 0x80 - RTF_MODIFIED = 0x20 - RTF_MULTIRT = 0x10000 - RTF_PRIVATE = 0x2000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_REJECT = 0x8 - RTF_SETSRC = 0x20000 - RTF_STATIC = 0x800 - RTF_UP = 0x1 - RTF_XRESOLVE = 0x200 - RTF_ZONE = 0x100000 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_CHGADDR = 0xf - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_FREEADDR = 0x10 - RTM_GET = 0x4 - RTM_IFINFO = 0xe - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_OLDADD = 0x9 - RTM_OLDDEL = 0xa - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_VERSION = 0x3 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RT_AWARE = 0x1 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - SCM_RIGHTS = 0x1010 - SCM_TIMESTAMP = 0x1013 - SCM_UCRED = 0x1012 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIG2STR_MAX = 0x20 - SIOCADDMULTI = -0x7fdf96cf - SIOCADDRT = -0x7fcf8df6 - SIOCATMARK = 0x40047307 - SIOCDARP = -0x7fdb96e0 - SIOCDELMULTI = -0x7fdf96ce - SIOCDELRT = -0x7fcf8df5 - SIOCDXARP = -0x7fff9658 - SIOCGARP = -0x3fdb96e1 - SIOCGDSTINFO = -0x3fff965c - SIOCGENADDR = -0x3fdf96ab - SIOCGENPSTATS = -0x3fdf96c7 - SIOCGETLSGCNT = -0x3fef8deb - SIOCGETNAME = 0x40107334 - SIOCGETPEER = 0x40107335 - SIOCGETPROP = -0x3fff8f44 - SIOCGETSGCNT = -0x3feb8deb - SIOCGETSYNC = -0x3fdf96d3 - SIOCGETVIFCNT = -0x3feb8dec - SIOCGHIWAT = 0x40047301 - SIOCGIFADDR = -0x3fdf96f3 - SIOCGIFBRDADDR = -0x3fdf96e9 - SIOCGIFCONF = -0x3ff796a4 - SIOCGIFDSTADDR = -0x3fdf96f1 - SIOCGIFFLAGS = -0x3fdf96ef - SIOCGIFHWADDR = -0x3fdf9647 - SIOCGIFINDEX = -0x3fdf96a6 - SIOCGIFMEM = -0x3fdf96ed - SIOCGIFMETRIC = -0x3fdf96e5 - SIOCGIFMTU = -0x3fdf96ea - SIOCGIFMUXID = -0x3fdf96a8 - SIOCGIFNETMASK = -0x3fdf96e7 - SIOCGIFNUM = 0x40046957 - SIOCGIP6ADDRPOLICY = -0x3fff965e - SIOCGIPMSFILTER = -0x3ffb964c - SIOCGLIFADDR = -0x3f87968f - SIOCGLIFBINDING = -0x3f879666 - SIOCGLIFBRDADDR = -0x3f879685 - SIOCGLIFCONF = -0x3fef965b - SIOCGLIFDADSTATE = -0x3f879642 - SIOCGLIFDSTADDR = -0x3f87968d - SIOCGLIFFLAGS = -0x3f87968b - SIOCGLIFGROUPINFO = -0x3f4b9663 - SIOCGLIFGROUPNAME = -0x3f879664 - SIOCGLIFHWADDR = -0x3f879640 - SIOCGLIFINDEX = -0x3f87967b - SIOCGLIFLNKINFO = -0x3f879674 - SIOCGLIFMETRIC = -0x3f879681 - SIOCGLIFMTU = -0x3f879686 - SIOCGLIFMUXID = -0x3f87967d - SIOCGLIFNETMASK = -0x3f879683 - SIOCGLIFNUM = -0x3ff3967e - SIOCGLIFSRCOF = -0x3fef964f - SIOCGLIFSUBNET = -0x3f879676 - SIOCGLIFTOKEN = -0x3f879678 - SIOCGLIFUSESRC = -0x3f879651 - SIOCGLIFZONE = -0x3f879656 - SIOCGLOWAT = 0x40047303 - SIOCGMSFILTER = -0x3ffb964e - SIOCGPGRP = 0x40047309 - SIOCGSTAMP = -0x3fef9646 - SIOCGXARP = -0x3fff9659 - SIOCIFDETACH = -0x7fdf96c8 - SIOCILB = -0x3ffb9645 - SIOCLIFADDIF = -0x3f879691 - SIOCLIFDELND = -0x7f879673 - SIOCLIFGETND = -0x3f879672 - SIOCLIFREMOVEIF = -0x7f879692 - SIOCLIFSETND = -0x7f879671 - SIOCLOWER = -0x7fdf96d7 - SIOCSARP = -0x7fdb96e2 - SIOCSCTPGOPT = -0x3fef9653 - SIOCSCTPPEELOFF = -0x3ffb9652 - SIOCSCTPSOPT = -0x7fef9654 - SIOCSENABLESDP = -0x3ffb9649 - SIOCSETPROP = -0x7ffb8f43 - SIOCSETSYNC = -0x7fdf96d4 - SIOCSHIWAT = -0x7ffb8d00 - SIOCSIFADDR = -0x7fdf96f4 - SIOCSIFBRDADDR = -0x7fdf96e8 - SIOCSIFDSTADDR = -0x7fdf96f2 - SIOCSIFFLAGS = -0x7fdf96f0 - SIOCSIFINDEX = -0x7fdf96a5 - SIOCSIFMEM = -0x7fdf96ee - SIOCSIFMETRIC = -0x7fdf96e4 - SIOCSIFMTU = -0x7fdf96eb - SIOCSIFMUXID = -0x7fdf96a7 - SIOCSIFNAME = -0x7fdf96b7 - SIOCSIFNETMASK = -0x7fdf96e6 - SIOCSIP6ADDRPOLICY = -0x7fff965d - SIOCSIPMSFILTER = -0x7ffb964b - SIOCSLGETREQ = -0x3fdf96b9 - SIOCSLIFADDR = -0x7f879690 - SIOCSLIFBRDADDR = -0x7f879684 - SIOCSLIFDSTADDR = -0x7f87968e - SIOCSLIFFLAGS = -0x7f87968c - SIOCSLIFGROUPNAME = -0x7f879665 - SIOCSLIFINDEX = -0x7f87967a - SIOCSLIFLNKINFO = -0x7f879675 - SIOCSLIFMETRIC = -0x7f879680 - SIOCSLIFMTU = -0x7f879687 - SIOCSLIFMUXID = -0x7f87967c - SIOCSLIFNAME = -0x3f87967f - SIOCSLIFNETMASK = -0x7f879682 - SIOCSLIFPREFIX = -0x3f879641 - SIOCSLIFSUBNET = -0x7f879677 - SIOCSLIFTOKEN = -0x7f879679 - SIOCSLIFUSESRC = -0x7f879650 - SIOCSLIFZONE = -0x7f879655 - SIOCSLOWAT = -0x7ffb8cfe - SIOCSLSTAT = -0x7fdf96b8 - SIOCSMSFILTER = -0x7ffb964d - SIOCSPGRP = -0x7ffb8cf8 - SIOCSPROMISC = -0x7ffb96d0 - SIOCSQPTR = -0x3ffb9648 - SIOCSSDSTATS = -0x3fdf96d2 - SIOCSSESTATS = -0x3fdf96d1 - SIOCSXARP = -0x7fff965a - SIOCTMYADDR = -0x3ff79670 - SIOCTMYSITE = -0x3ff7966e - SIOCTONLINK = -0x3ff7966f - SIOCUPPER = -0x7fdf96d8 - SIOCX25RCV = -0x3fdf96c4 - SIOCX25TBL = -0x3fdf96c3 - SIOCX25XMT = -0x3fdf96c5 - SIOCXPROTO = 0x20007337 - SOCK_CLOEXEC = 0x80000 - SOCK_DGRAM = 0x1 - SOCK_NDELAY = 0x200000 - SOCK_NONBLOCK = 0x100000 - SOCK_RAW = 0x4 - SOCK_RDM = 0x5 - SOCK_SEQPACKET = 0x6 - SOCK_STREAM = 0x2 - SOCK_TYPE_MASK = 0xffff - SOL_FILTER = 0xfffc - SOL_PACKET = 0xfffd - SOL_ROUTE = 0xfffe - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_ALL = 0x3f - SO_ALLZONES = 0x1014 - SO_ANON_MLP = 0x100a - SO_ATTACH_FILTER = 0x40000001 - SO_BAND = 0x4000 - SO_BROADCAST = 0x20 - SO_COPYOPT = 0x80000 - SO_DEBUG = 0x1 - SO_DELIM = 0x8000 - SO_DETACH_FILTER = 0x40000002 - SO_DGRAM_ERRIND = 0x200 - SO_DOMAIN = 0x100c - SO_DONTLINGER = -0x81 - SO_DONTROUTE = 0x10 - SO_ERROPT = 0x40000 - SO_ERROR = 0x1007 - SO_EXCLBIND = 0x1015 - SO_HIWAT = 0x10 - SO_ISNTTY = 0x800 - SO_ISTTY = 0x400 - SO_KEEPALIVE = 0x8 - SO_LINGER = 0x80 - SO_LOWAT = 0x20 - SO_MAC_EXEMPT = 0x100b - SO_MAC_IMPLICIT = 0x1016 - SO_MAXBLK = 0x100000 - SO_MAXPSZ = 0x8 - SO_MINPSZ = 0x4 - SO_MREADOFF = 0x80 - SO_MREADON = 0x40 - SO_NDELOFF = 0x200 - SO_NDELON = 0x100 - SO_NODELIM = 0x10000 - SO_OOBINLINE = 0x100 - SO_PROTOTYPE = 0x1009 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVPSH = 0x100d - SO_RCVTIMEO = 0x1006 - SO_READOPT = 0x1 - SO_RECVUCRED = 0x400 - SO_REUSEADDR = 0x4 - SO_SECATTR = 0x1011 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_STRHOLD = 0x20000 - SO_TAIL = 0x200000 - SO_TIMESTAMP = 0x1013 - SO_TONSTOP = 0x2000 - SO_TOSTOP = 0x1000 - SO_TYPE = 0x1008 - SO_USELOOPBACK = 0x40 - SO_VRRP = 0x1017 - SO_WROFF = 0x2 - S_ENFMT = 0x400 - S_IAMB = 0x1ff - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFDOOR = 0xd000 - S_IFIFO = 0x1000 - S_IFLNK = 0xa000 - S_IFMT = 0xf000 - S_IFNAM = 0x5000 - S_IFPORT = 0xe000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_INSEM = 0x1 - S_INSHD = 0x2 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXGRP = 0x8 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - TAB0 = 0x0 - TAB1 = 0x800 - TAB2 = 0x1000 - TAB3 = 0x1800 - TABDLY = 0x1800 - TCFLSH = 0x5407 - TCGETA = 0x5401 - TCGETS = 0x540d - TCIFLUSH = 0x0 - TCIOFF = 0x2 - TCIOFLUSH = 0x2 - TCION = 0x3 - TCOFLUSH = 0x1 - TCOOFF = 0x0 - TCOON = 0x1 - TCP_ABORT_THRESHOLD = 0x11 - TCP_ANONPRIVBIND = 0x20 - TCP_CONGESTION = 0x25 - TCP_CONN_ABORT_THRESHOLD = 0x13 - TCP_CONN_NOTIFY_THRESHOLD = 0x12 - TCP_CORK = 0x18 - TCP_EXCLBIND = 0x21 - TCP_INIT_CWND = 0x15 - TCP_KEEPALIVE = 0x8 - TCP_KEEPALIVE_ABORT_THRESHOLD = 0x17 - TCP_KEEPALIVE_THRESHOLD = 0x16 - TCP_KEEPCNT = 0x23 - TCP_KEEPIDLE = 0x22 - TCP_KEEPINTVL = 0x24 - TCP_LINGER2 = 0x1c - TCP_MAXSEG = 0x2 - TCP_MSS = 0x218 - TCP_NODELAY = 0x1 - TCP_NOTIFY_THRESHOLD = 0x10 - TCP_RECVDSTADDR = 0x14 - TCP_RTO_INITIAL = 0x19 - TCP_RTO_MAX = 0x1b - TCP_RTO_MIN = 0x1a - TCSAFLUSH = 0x5410 - TCSBRK = 0x5405 - TCSETA = 0x5402 - TCSETAF = 0x5404 - TCSETAW = 0x5403 - TCSETS = 0x540e - TCSETSF = 0x5410 - TCSETSW = 0x540f - TCXONC = 0x5406 - TIMER_ABSTIME = 0x1 - TIMER_RELTIME = 0x0 - TIOC = 0x5400 - TIOCCBRK = 0x747a - TIOCCDTR = 0x7478 - TIOCCILOOP = 0x746c - TIOCEXCL = 0x740d - TIOCFLUSH = 0x7410 - TIOCGETC = 0x7412 - TIOCGETD = 0x7400 - TIOCGETP = 0x7408 - TIOCGLTC = 0x7474 - TIOCGPGRP = 0x7414 - TIOCGPPS = 0x547d - TIOCGPPSEV = 0x547f - TIOCGSID = 0x7416 - TIOCGSOFTCAR = 0x5469 - TIOCGWINSZ = 0x5468 - TIOCHPCL = 0x7402 - TIOCKBOF = 0x5409 - TIOCKBON = 0x5408 - TIOCLBIC = 0x747e - TIOCLBIS = 0x747f - TIOCLGET = 0x747c - TIOCLSET = 0x747d - TIOCMBIC = 0x741c - TIOCMBIS = 0x741b - TIOCMGET = 0x741d - TIOCMSET = 0x741a - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x7471 - TIOCNXCL = 0x740e - TIOCOUTQ = 0x7473 - TIOCREMOTE = 0x741e - TIOCSBRK = 0x747b - TIOCSCTTY = 0x7484 - TIOCSDTR = 0x7479 - TIOCSETC = 0x7411 - TIOCSETD = 0x7401 - TIOCSETN = 0x740a - TIOCSETP = 0x7409 - TIOCSIGNAL = 0x741f - TIOCSILOOP = 0x746d - TIOCSLTC = 0x7475 - TIOCSPGRP = 0x7415 - TIOCSPPS = 0x547e - TIOCSSOFTCAR = 0x546a - TIOCSTART = 0x746e - TIOCSTI = 0x7417 - TIOCSTOP = 0x746f - TIOCSWINSZ = 0x5467 - TOSTOP = 0x100 - UTIME_NOW = -0x1 - UTIME_OMIT = -0x2 - VCEOF = 0x8 - VCEOL = 0x9 - VDISCARD = 0xd - VDSUSP = 0xb - VEOF = 0x4 - VEOL = 0x5 - VEOL2 = 0x6 - VERASE = 0x2 - VERASE2 = 0x11 - VINTR = 0x0 - VKILL = 0x3 - VLNEXT = 0xf - VMIN = 0x4 - VQUIT = 0x1 - VREPRINT = 0xc - VSTART = 0x8 - VSTATUS = 0x10 - VSTOP = 0x9 - VSUSP = 0xa - VSWTCH = 0x7 - VT0 = 0x0 - VT1 = 0x4000 - VTDLY = 0x4000 - VTIME = 0x5 - VWERASE = 0xe - WCONTFLG = 0xffff - WCONTINUED = 0x8 - WCOREFLG = 0x80 - WEXITED = 0x1 - WNOHANG = 0x40 - WNOWAIT = 0x80 - WOPTMASK = 0xcf - WRAP = 0x20000 - WSIGMASK = 0x7f - WSTOPFLG = 0x7f - WSTOPPED = 0x4 - WTRAPPED = 0x2 - WUNTRACED = 0x4 - XCASE = 0x4 - XTABS = 0x1800 -) - -// Errors -const ( - E2BIG = syscall.Errno(0x7) - EACCES = syscall.Errno(0xd) - EADDRINUSE = syscall.Errno(0x7d) - EADDRNOTAVAIL = syscall.Errno(0x7e) - EADV = syscall.Errno(0x44) - EAFNOSUPPORT = syscall.Errno(0x7c) - EAGAIN = syscall.Errno(0xb) - EALREADY = syscall.Errno(0x95) - EBADE = syscall.Errno(0x32) - EBADF = syscall.Errno(0x9) - EBADFD = syscall.Errno(0x51) - EBADMSG = syscall.Errno(0x4d) - EBADR = syscall.Errno(0x33) - EBADRQC = syscall.Errno(0x36) - EBADSLT = syscall.Errno(0x37) - EBFONT = syscall.Errno(0x39) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x2f) - ECHILD = syscall.Errno(0xa) - ECHRNG = syscall.Errno(0x25) - ECOMM = syscall.Errno(0x46) - ECONNABORTED = syscall.Errno(0x82) - ECONNREFUSED = syscall.Errno(0x92) - ECONNRESET = syscall.Errno(0x83) - EDEADLK = syscall.Errno(0x2d) - EDEADLOCK = syscall.Errno(0x38) - EDESTADDRREQ = syscall.Errno(0x60) - EDOM = syscall.Errno(0x21) - EDQUOT = syscall.Errno(0x31) - EEXIST = syscall.Errno(0x11) - EFAULT = syscall.Errno(0xe) - EFBIG = syscall.Errno(0x1b) - EHOSTDOWN = syscall.Errno(0x93) - EHOSTUNREACH = syscall.Errno(0x94) - EIDRM = syscall.Errno(0x24) - EILSEQ = syscall.Errno(0x58) - EINPROGRESS = syscall.Errno(0x96) - EINTR = syscall.Errno(0x4) - EINVAL = syscall.Errno(0x16) - EIO = syscall.Errno(0x5) - EISCONN = syscall.Errno(0x85) - EISDIR = syscall.Errno(0x15) - EL2HLT = syscall.Errno(0x2c) - EL2NSYNC = syscall.Errno(0x26) - EL3HLT = syscall.Errno(0x27) - EL3RST = syscall.Errno(0x28) - ELIBACC = syscall.Errno(0x53) - ELIBBAD = syscall.Errno(0x54) - ELIBEXEC = syscall.Errno(0x57) - ELIBMAX = syscall.Errno(0x56) - ELIBSCN = syscall.Errno(0x55) - ELNRNG = syscall.Errno(0x29) - ELOCKUNMAPPED = syscall.Errno(0x48) - ELOOP = syscall.Errno(0x5a) - EMFILE = syscall.Errno(0x18) - EMLINK = syscall.Errno(0x1f) - EMSGSIZE = syscall.Errno(0x61) - EMULTIHOP = syscall.Errno(0x4a) - ENAMETOOLONG = syscall.Errno(0x4e) - ENETDOWN = syscall.Errno(0x7f) - ENETRESET = syscall.Errno(0x81) - ENETUNREACH = syscall.Errno(0x80) - ENFILE = syscall.Errno(0x17) - ENOANO = syscall.Errno(0x35) - ENOBUFS = syscall.Errno(0x84) - ENOCSI = syscall.Errno(0x2b) - ENODATA = syscall.Errno(0x3d) - ENODEV = syscall.Errno(0x13) - ENOENT = syscall.Errno(0x2) - ENOEXEC = syscall.Errno(0x8) - ENOLCK = syscall.Errno(0x2e) - ENOLINK = syscall.Errno(0x43) - ENOMEM = syscall.Errno(0xc) - ENOMSG = syscall.Errno(0x23) - ENONET = syscall.Errno(0x40) - ENOPKG = syscall.Errno(0x41) - ENOPROTOOPT = syscall.Errno(0x63) - ENOSPC = syscall.Errno(0x1c) - ENOSR = syscall.Errno(0x3f) - ENOSTR = syscall.Errno(0x3c) - ENOSYS = syscall.Errno(0x59) - ENOTACTIVE = syscall.Errno(0x49) - ENOTBLK = syscall.Errno(0xf) - ENOTCONN = syscall.Errno(0x86) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x5d) - ENOTRECOVERABLE = syscall.Errno(0x3b) - ENOTSOCK = syscall.Errno(0x5f) - ENOTSUP = syscall.Errno(0x30) - ENOTTY = syscall.Errno(0x19) - ENOTUNIQ = syscall.Errno(0x50) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x7a) - EOVERFLOW = syscall.Errno(0x4f) - EOWNERDEAD = syscall.Errno(0x3a) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x7b) - EPIPE = syscall.Errno(0x20) - EPROTO = syscall.Errno(0x47) - EPROTONOSUPPORT = syscall.Errno(0x78) - EPROTOTYPE = syscall.Errno(0x62) - ERANGE = syscall.Errno(0x22) - EREMCHG = syscall.Errno(0x52) - EREMOTE = syscall.Errno(0x42) - ERESTART = syscall.Errno(0x5b) - EROFS = syscall.Errno(0x1e) - ESHUTDOWN = syscall.Errno(0x8f) - ESOCKTNOSUPPORT = syscall.Errno(0x79) - ESPIPE = syscall.Errno(0x1d) - ESRCH = syscall.Errno(0x3) - ESRMNT = syscall.Errno(0x45) - ESTALE = syscall.Errno(0x97) - ESTRPIPE = syscall.Errno(0x5c) - ETIME = syscall.Errno(0x3e) - ETIMEDOUT = syscall.Errno(0x91) - ETOOMANYREFS = syscall.Errno(0x90) - ETXTBSY = syscall.Errno(0x1a) - EUNATCH = syscall.Errno(0x2a) - EUSERS = syscall.Errno(0x5e) - EWOULDBLOCK = syscall.Errno(0xb) - EXDEV = syscall.Errno(0x12) - EXFULL = syscall.Errno(0x34) -) - -// Signals -const ( - SIGABRT = syscall.Signal(0x6) - SIGALRM = syscall.Signal(0xe) - SIGBUS = syscall.Signal(0xa) - SIGCANCEL = syscall.Signal(0x24) - SIGCHLD = syscall.Signal(0x12) - SIGCLD = syscall.Signal(0x12) - SIGCONT = syscall.Signal(0x19) - SIGEMT = syscall.Signal(0x7) - SIGFPE = syscall.Signal(0x8) - SIGFREEZE = syscall.Signal(0x22) - SIGHUP = syscall.Signal(0x1) - SIGILL = syscall.Signal(0x4) - SIGINFO = syscall.Signal(0x29) - SIGINT = syscall.Signal(0x2) - SIGIO = syscall.Signal(0x16) - SIGIOT = syscall.Signal(0x6) - SIGJVM1 = syscall.Signal(0x27) - SIGJVM2 = syscall.Signal(0x28) - SIGKILL = syscall.Signal(0x9) - SIGLOST = syscall.Signal(0x25) - SIGLWP = syscall.Signal(0x21) - SIGPIPE = syscall.Signal(0xd) - SIGPOLL = syscall.Signal(0x16) - SIGPROF = syscall.Signal(0x1d) - SIGPWR = syscall.Signal(0x13) - SIGQUIT = syscall.Signal(0x3) - SIGSEGV = syscall.Signal(0xb) - SIGSTOP = syscall.Signal(0x17) - SIGSYS = syscall.Signal(0xc) - SIGTERM = syscall.Signal(0xf) - SIGTHAW = syscall.Signal(0x23) - SIGTRAP = syscall.Signal(0x5) - SIGTSTP = syscall.Signal(0x18) - SIGTTIN = syscall.Signal(0x1a) - SIGTTOU = syscall.Signal(0x1b) - SIGURG = syscall.Signal(0x15) - SIGUSR1 = syscall.Signal(0x10) - SIGUSR2 = syscall.Signal(0x11) - SIGVTALRM = syscall.Signal(0x1c) - SIGWAITING = syscall.Signal(0x20) - SIGWINCH = syscall.Signal(0x14) - SIGXCPU = syscall.Signal(0x1e) - SIGXFSZ = syscall.Signal(0x1f) - SIGXRES = syscall.Signal(0x26) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "not owner"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "I/O error"}, - {6, "ENXIO", "no such device or address"}, - {7, "E2BIG", "arg list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file number"}, - {10, "ECHILD", "no child processes"}, - {11, "EAGAIN", "resource temporarily unavailable"}, - {12, "ENOMEM", "not enough space"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "device busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "cross-device link"}, - {19, "ENODEV", "no such device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "file table overflow"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "argument out of domain"}, - {34, "ERANGE", "result too large"}, - {35, "ENOMSG", "no message of desired type"}, - {36, "EIDRM", "identifier removed"}, - {37, "ECHRNG", "channel number out of range"}, - {38, "EL2NSYNC", "level 2 not synchronized"}, - {39, "EL3HLT", "level 3 halted"}, - {40, "EL3RST", "level 3 reset"}, - {41, "ELNRNG", "link number out of range"}, - {42, "EUNATCH", "protocol driver not attached"}, - {43, "ENOCSI", "no CSI structure available"}, - {44, "EL2HLT", "level 2 halted"}, - {45, "EDEADLK", "deadlock situation detected/avoided"}, - {46, "ENOLCK", "no record locks available"}, - {47, "ECANCELED", "operation canceled"}, - {48, "ENOTSUP", "operation not supported"}, - {49, "EDQUOT", "disc quota exceeded"}, - {50, "EBADE", "bad exchange descriptor"}, - {51, "EBADR", "bad request descriptor"}, - {52, "EXFULL", "message tables full"}, - {53, "ENOANO", "anode table overflow"}, - {54, "EBADRQC", "bad request code"}, - {55, "EBADSLT", "invalid slot"}, - {56, "EDEADLOCK", "file locking deadlock"}, - {57, "EBFONT", "bad font file format"}, - {58, "EOWNERDEAD", "owner of the lock died"}, - {59, "ENOTRECOVERABLE", "lock is not recoverable"}, - {60, "ENOSTR", "not a stream device"}, - {61, "ENODATA", "no data available"}, - {62, "ETIME", "timer expired"}, - {63, "ENOSR", "out of stream resources"}, - {64, "ENONET", "machine is not on the network"}, - {65, "ENOPKG", "package not installed"}, - {66, "EREMOTE", "object is remote"}, - {67, "ENOLINK", "link has been severed"}, - {68, "EADV", "advertise error"}, - {69, "ESRMNT", "srmount error"}, - {70, "ECOMM", "communication error on send"}, - {71, "EPROTO", "protocol error"}, - {72, "ELOCKUNMAPPED", "locked lock was unmapped "}, - {73, "ENOTACTIVE", "facility is not active"}, - {74, "EMULTIHOP", "multihop attempted"}, - {77, "EBADMSG", "not a data message"}, - {78, "ENAMETOOLONG", "file name too long"}, - {79, "EOVERFLOW", "value too large for defined data type"}, - {80, "ENOTUNIQ", "name not unique on network"}, - {81, "EBADFD", "file descriptor in bad state"}, - {82, "EREMCHG", "remote address changed"}, - {83, "ELIBACC", "can not access a needed shared library"}, - {84, "ELIBBAD", "accessing a corrupted shared library"}, - {85, "ELIBSCN", ".lib section in a.out corrupted"}, - {86, "ELIBMAX", "attempting to link in more shared libraries than system limit"}, - {87, "ELIBEXEC", "can not exec a shared library directly"}, - {88, "EILSEQ", "illegal byte sequence"}, - {89, "ENOSYS", "operation not applicable"}, - {90, "ELOOP", "number of symbolic links encountered during path name traversal exceeds MAXSYMLINKS"}, - {91, "ERESTART", "error 91"}, - {92, "ESTRPIPE", "error 92"}, - {93, "ENOTEMPTY", "directory not empty"}, - {94, "EUSERS", "too many users"}, - {95, "ENOTSOCK", "socket operation on non-socket"}, - {96, "EDESTADDRREQ", "destination address required"}, - {97, "EMSGSIZE", "message too long"}, - {98, "EPROTOTYPE", "protocol wrong type for socket"}, - {99, "ENOPROTOOPT", "option not supported by protocol"}, - {120, "EPROTONOSUPPORT", "protocol not supported"}, - {121, "ESOCKTNOSUPPORT", "socket type not supported"}, - {122, "EOPNOTSUPP", "operation not supported on transport endpoint"}, - {123, "EPFNOSUPPORT", "protocol family not supported"}, - {124, "EAFNOSUPPORT", "address family not supported by protocol family"}, - {125, "EADDRINUSE", "address already in use"}, - {126, "EADDRNOTAVAIL", "cannot assign requested address"}, - {127, "ENETDOWN", "network is down"}, - {128, "ENETUNREACH", "network is unreachable"}, - {129, "ENETRESET", "network dropped connection because of reset"}, - {130, "ECONNABORTED", "software caused connection abort"}, - {131, "ECONNRESET", "connection reset by peer"}, - {132, "ENOBUFS", "no buffer space available"}, - {133, "EISCONN", "transport endpoint is already connected"}, - {134, "ENOTCONN", "transport endpoint is not connected"}, - {143, "ESHUTDOWN", "cannot send after socket shutdown"}, - {144, "ETOOMANYREFS", "too many references: cannot splice"}, - {145, "ETIMEDOUT", "connection timed out"}, - {146, "ECONNREFUSED", "connection refused"}, - {147, "EHOSTDOWN", "host is down"}, - {148, "EHOSTUNREACH", "no route to host"}, - {149, "EALREADY", "operation already in progress"}, - {150, "EINPROGRESS", "operation now in progress"}, - {151, "ESTALE", "stale NFS file handle"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal Instruction"}, - {5, "SIGTRAP", "trace/Breakpoint Trap"}, - {6, "SIGABRT", "abort"}, - {7, "SIGEMT", "emulation Trap"}, - {8, "SIGFPE", "arithmetic Exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus Error"}, - {11, "SIGSEGV", "segmentation Fault"}, - {12, "SIGSYS", "bad System Call"}, - {13, "SIGPIPE", "broken Pipe"}, - {14, "SIGALRM", "alarm Clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGUSR1", "user Signal 1"}, - {17, "SIGUSR2", "user Signal 2"}, - {18, "SIGCHLD", "child Status Changed"}, - {19, "SIGPWR", "power-Fail/Restart"}, - {20, "SIGWINCH", "window Size Change"}, - {21, "SIGURG", "urgent Socket Condition"}, - {22, "SIGIO", "pollable Event"}, - {23, "SIGSTOP", "stopped (signal)"}, - {24, "SIGTSTP", "stopped (user)"}, - {25, "SIGCONT", "continued"}, - {26, "SIGTTIN", "stopped (tty input)"}, - {27, "SIGTTOU", "stopped (tty output)"}, - {28, "SIGVTALRM", "virtual Timer Expired"}, - {29, "SIGPROF", "profiling Timer Expired"}, - {30, "SIGXCPU", "cpu Limit Exceeded"}, - {31, "SIGXFSZ", "file Size Limit Exceeded"}, - {32, "SIGWAITING", "no runnable lwp"}, - {33, "SIGLWP", "inter-lwp signal"}, - {34, "SIGFREEZE", "checkpoint Freeze"}, - {35, "SIGTHAW", "checkpoint Thaw"}, - {36, "SIGCANCEL", "thread Cancellation"}, - {37, "SIGLOST", "resource Lost"}, - {38, "SIGXRES", "resource Control Exceeded"}, - {39, "SIGJVM1", "reserved for JVM 1"}, - {40, "SIGJVM2", "reserved for JVM 2"}, - {41, "SIGINFO", "information Request"}, -} diff --git a/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go deleted file mode 100644 index fc7d050..0000000 --- a/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go +++ /dev/null @@ -1,860 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build zos && s390x -// +build zos,s390x - -// Hand edited based on zerrors_linux_s390x.go -// TODO: auto-generate. - -package unix - -const ( - BRKINT = 0x0001 - CLOCK_MONOTONIC = 0x1 - CLOCK_PROCESS_CPUTIME_ID = 0x2 - CLOCK_REALTIME = 0x0 - CLOCK_THREAD_CPUTIME_ID = 0x3 - CS8 = 0x0030 - CSIZE = 0x0030 - ECHO = 0x00000008 - ECHONL = 0x00000001 - FD_CLOEXEC = 0x01 - FD_CLOFORK = 0x02 - FNDELAY = 0x04 - F_CLOSFD = 9 - F_CONTROL_CVT = 13 - F_DUPFD = 0 - F_DUPFD2 = 8 - F_GETFD = 1 - F_GETFL = 259 - F_GETLK = 5 - F_GETOWN = 10 - F_OK = 0x0 - F_RDLCK = 1 - F_SETFD = 2 - F_SETFL = 4 - F_SETLK = 6 - F_SETLKW = 7 - F_SETOWN = 11 - F_SETTAG = 12 - F_UNLCK = 3 - F_WRLCK = 2 - FSTYPE_ZFS = 0xe9 //"Z" - FSTYPE_HFS = 0xc8 //"H" - FSTYPE_NFS = 0xd5 //"N" - FSTYPE_TFS = 0xe3 //"T" - FSTYPE_AUTOMOUNT = 0xc1 //"A" - IP6F_MORE_FRAG = 0x0001 - IP6F_OFF_MASK = 0xfff8 - IP6F_RESERVED_MASK = 0x0006 - IP6OPT_JUMBO = 0xc2 - IP6OPT_JUMBO_LEN = 6 - IP6OPT_MUTABLE = 0x20 - IP6OPT_NSAP_ADDR = 0xc3 - IP6OPT_PAD1 = 0x00 - IP6OPT_PADN = 0x01 - IP6OPT_ROUTER_ALERT = 0x05 - IP6OPT_TUNNEL_LIMIT = 0x04 - IP6OPT_TYPE_DISCARD = 0x40 - IP6OPT_TYPE_FORCEICMP = 0x80 - IP6OPT_TYPE_ICMP = 0xc0 - IP6OPT_TYPE_SKIP = 0x00 - IP6_ALERT_AN = 0x0002 - IP6_ALERT_MLD = 0x0000 - IP6_ALERT_RSVP = 0x0001 - IPPORT_RESERVED = 1024 - IPPORT_USERRESERVED = 5000 - IPPROTO_AH = 51 - SOL_AH = 51 - IPPROTO_DSTOPTS = 60 - SOL_DSTOPTS = 60 - IPPROTO_EGP = 8 - SOL_EGP = 8 - IPPROTO_ESP = 50 - SOL_ESP = 50 - IPPROTO_FRAGMENT = 44 - SOL_FRAGMENT = 44 - IPPROTO_GGP = 2 - SOL_GGP = 2 - IPPROTO_HOPOPTS = 0 - SOL_HOPOPTS = 0 - IPPROTO_ICMP = 1 - SOL_ICMP = 1 - IPPROTO_ICMPV6 = 58 - SOL_ICMPV6 = 58 - IPPROTO_IDP = 22 - SOL_IDP = 22 - IPPROTO_IP = 0 - SOL_IP = 0 - IPPROTO_IPV6 = 41 - SOL_IPV6 = 41 - IPPROTO_MAX = 256 - SOL_MAX = 256 - IPPROTO_NONE = 59 - SOL_NONE = 59 - IPPROTO_PUP = 12 - SOL_PUP = 12 - IPPROTO_RAW = 255 - SOL_RAW = 255 - IPPROTO_ROUTING = 43 - SOL_ROUTING = 43 - IPPROTO_TCP = 6 - SOL_TCP = 6 - IPPROTO_UDP = 17 - SOL_UDP = 17 - IPV6_ADDR_PREFERENCES = 32 - IPV6_CHECKSUM = 19 - IPV6_DONTFRAG = 29 - IPV6_DSTOPTS = 23 - IPV6_HOPLIMIT = 11 - IPV6_HOPOPTS = 22 - IPV6_JOIN_GROUP = 5 - IPV6_LEAVE_GROUP = 6 - IPV6_MULTICAST_HOPS = 9 - IPV6_MULTICAST_IF = 7 - IPV6_MULTICAST_LOOP = 4 - IPV6_NEXTHOP = 20 - IPV6_PATHMTU = 12 - IPV6_PKTINFO = 13 - IPV6_PREFER_SRC_CGA = 0x10 - IPV6_PREFER_SRC_COA = 0x02 - IPV6_PREFER_SRC_HOME = 0x01 - IPV6_PREFER_SRC_NONCGA = 0x20 - IPV6_PREFER_SRC_PUBLIC = 0x08 - IPV6_PREFER_SRC_TMP = 0x04 - IPV6_RECVDSTOPTS = 28 - IPV6_RECVHOPLIMIT = 14 - IPV6_RECVHOPOPTS = 26 - IPV6_RECVPATHMTU = 16 - IPV6_RECVPKTINFO = 15 - IPV6_RECVRTHDR = 25 - IPV6_RECVTCLASS = 31 - IPV6_RTHDR = 21 - IPV6_RTHDRDSTOPTS = 24 - IPV6_RTHDR_TYPE_0 = 0 - IPV6_TCLASS = 30 - IPV6_UNICAST_HOPS = 3 - IPV6_USE_MIN_MTU = 18 - IPV6_V6ONLY = 10 - IP_ADD_MEMBERSHIP = 5 - IP_ADD_SOURCE_MEMBERSHIP = 12 - IP_BLOCK_SOURCE = 10 - IP_DEFAULT_MULTICAST_LOOP = 1 - IP_DEFAULT_MULTICAST_TTL = 1 - IP_DROP_MEMBERSHIP = 6 - IP_DROP_SOURCE_MEMBERSHIP = 13 - IP_MAX_MEMBERSHIPS = 20 - IP_MULTICAST_IF = 7 - IP_MULTICAST_LOOP = 4 - IP_MULTICAST_TTL = 3 - IP_OPTIONS = 1 - IP_PKTINFO = 101 - IP_RECVPKTINFO = 102 - IP_TOS = 2 - IP_TTL = 3 - IP_UNBLOCK_SOURCE = 11 - ICANON = 0x0010 - ICMP6_FILTER = 0x26 - ICRNL = 0x0002 - IEXTEN = 0x0020 - IGNBRK = 0x0004 - IGNCR = 0x0008 - INLCR = 0x0020 - ISIG = 0x0040 - ISTRIP = 0x0080 - IXON = 0x0200 - IXOFF = 0x0100 - LOCK_SH = 0x1 // Not exist on zOS - LOCK_EX = 0x2 // Not exist on zOS - LOCK_NB = 0x4 // Not exist on zOS - LOCK_UN = 0x8 // Not exist on zOS - POLLIN = 0x0003 - POLLOUT = 0x0004 - POLLPRI = 0x0010 - POLLERR = 0x0020 - POLLHUP = 0x0040 - POLLNVAL = 0x0080 - PROT_READ = 0x1 // mmap - page can be read - PROT_WRITE = 0x2 // page can be written - PROT_NONE = 0x4 // can't be accessed - PROT_EXEC = 0x8 // can be executed - MAP_PRIVATE = 0x1 // changes are private - MAP_SHARED = 0x2 // changes are shared - MAP_FIXED = 0x4 // place exactly - MCAST_JOIN_GROUP = 40 - MCAST_LEAVE_GROUP = 41 - MCAST_JOIN_SOURCE_GROUP = 42 - MCAST_LEAVE_SOURCE_GROUP = 43 - MCAST_BLOCK_SOURCE = 44 - MCAST_UNBLOCK_SOURCE = 45 - MS_SYNC = 0x1 // msync - synchronous writes - MS_ASYNC = 0x2 // asynchronous writes - MS_INVALIDATE = 0x4 // invalidate mappings - MTM_RDONLY = 0x80000000 - MTM_RDWR = 0x40000000 - MTM_UMOUNT = 0x10000000 - MTM_IMMED = 0x08000000 - MTM_FORCE = 0x04000000 - MTM_DRAIN = 0x02000000 - MTM_RESET = 0x01000000 - MTM_SAMEMODE = 0x00100000 - MTM_UNQSEFORCE = 0x00040000 - MTM_NOSUID = 0x00000400 - MTM_SYNCHONLY = 0x00000200 - MTM_REMOUNT = 0x00000100 - MTM_NOSECURITY = 0x00000080 - NFDBITS = 0x20 - O_ACCMODE = 0x03 - O_APPEND = 0x08 - O_ASYNCSIG = 0x0200 - O_CREAT = 0x80 - O_EXCL = 0x40 - O_GETFL = 0x0F - O_LARGEFILE = 0x0400 - O_NONBLOCK = 0x04 - O_RDONLY = 0x02 - O_RDWR = 0x03 - O_SYNC = 0x0100 - O_TRUNC = 0x10 - O_WRONLY = 0x01 - O_NOCTTY = 0x20 - OPOST = 0x0001 - ONLCR = 0x0004 - PARENB = 0x0200 - PARMRK = 0x0400 - QUERYCVT = 3 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 // RUSAGE_THREAD unsupported on z/OS - SEEK_CUR = 1 - SEEK_END = 2 - SEEK_SET = 0 - SETAUTOCVTALL = 5 - SETAUTOCVTON = 2 - SETCVTALL = 4 - SETCVTOFF = 0 - SETCVTON = 1 - AF_APPLETALK = 16 - AF_CCITT = 10 - AF_CHAOS = 5 - AF_DATAKIT = 9 - AF_DLI = 13 - AF_ECMA = 8 - AF_HYLINK = 15 - AF_IMPLINK = 3 - AF_INET = 2 - AF_INET6 = 19 - AF_INTF = 20 - AF_IUCV = 17 - AF_LAT = 14 - AF_LINK = 18 - AF_MAX = 30 - AF_NBS = 7 - AF_NDD = 23 - AF_NETWARE = 22 - AF_NS = 6 - AF_PUP = 4 - AF_RIF = 21 - AF_ROUTE = 20 - AF_SNA = 11 - AF_UNIX = 1 - AF_UNSPEC = 0 - IBMTCP_IMAGE = 1 - MSG_ACK_EXPECTED = 0x10 - MSG_ACK_GEN = 0x40 - MSG_ACK_TIMEOUT = 0x20 - MSG_CONNTERM = 0x80 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_EOF = 0x8000 - MSG_EOR = 0x8 - MSG_MAXIOVLEN = 16 - MSG_NONBLOCK = 0x4000 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 - PRIO_PROCESS = 1 - PRIO_PGRP = 2 - PRIO_USER = 3 - RLIMIT_CPU = 0 - RLIMIT_FSIZE = 1 - RLIMIT_DATA = 2 - RLIMIT_STACK = 3 - RLIMIT_CORE = 4 - RLIMIT_AS = 5 - RLIMIT_NOFILE = 6 - RLIMIT_MEMLIMIT = 7 - RLIM_INFINITY = 2147483647 - SCM_RIGHTS = 0x01 - SF_CLOSE = 0x00000002 - SF_REUSE = 0x00000001 - SHUT_RD = 0 - SHUT_RDWR = 2 - SHUT_WR = 1 - SOCK_CONN_DGRAM = 6 - SOCK_DGRAM = 2 - SOCK_RAW = 3 - SOCK_RDM = 4 - SOCK_SEQPACKET = 5 - SOCK_STREAM = 1 - SOL_SOCKET = 0xffff - SOMAXCONN = 10 - SO_ACCEPTCONN = 0x0002 - SO_ACCEPTECONNABORTED = 0x0006 - SO_ACKNOW = 0x7700 - SO_BROADCAST = 0x0020 - SO_BULKMODE = 0x8000 - SO_CKSUMRECV = 0x0800 - SO_CLOSE = 0x01 - SO_CLUSTERCONNTYPE = 0x00004001 - SO_CLUSTERCONNTYPE_INTERNAL = 8 - SO_CLUSTERCONNTYPE_NOCONN = 0 - SO_CLUSTERCONNTYPE_NONE = 1 - SO_CLUSTERCONNTYPE_SAME_CLUSTER = 2 - SO_CLUSTERCONNTYPE_SAME_IMAGE = 4 - SO_DEBUG = 0x0001 - SO_DONTROUTE = 0x0010 - SO_ERROR = 0x1007 - SO_IGNOREINCOMINGPUSH = 0x1 - SO_IGNORESOURCEVIPA = 0x0002 - SO_KEEPALIVE = 0x0008 - SO_LINGER = 0x0080 - SO_NONBLOCKLOCAL = 0x8001 - SO_NOREUSEADDR = 0x1000 - SO_OOBINLINE = 0x0100 - SO_OPTACK = 0x8004 - SO_OPTMSS = 0x8003 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 - SO_REUSEADDR = 0x0004 - SO_REUSEPORT = 0x0200 - SO_SECINFO = 0x00004002 - SO_SET = 0x0200 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_TYPE = 0x1008 - SO_UNSET = 0x0400 - SO_USELOOPBACK = 0x0040 - SO_USE_IFBUFS = 0x0400 - S_ISUID = 0x0800 - S_ISGID = 0x0400 - S_ISVTX = 0x0200 - S_IRUSR = 0x0100 - S_IWUSR = 0x0080 - S_IXUSR = 0x0040 - S_IRWXU = 0x01C0 - S_IRGRP = 0x0020 - S_IWGRP = 0x0010 - S_IXGRP = 0x0008 - S_IRWXG = 0x0038 - S_IROTH = 0x0004 - S_IWOTH = 0x0002 - S_IXOTH = 0x0001 - S_IRWXO = 0x0007 - S_IREAD = S_IRUSR - S_IWRITE = S_IWUSR - S_IEXEC = S_IXUSR - S_IFDIR = 0x01000000 - S_IFCHR = 0x02000000 - S_IFREG = 0x03000000 - S_IFFIFO = 0x04000000 - S_IFIFO = 0x04000000 - S_IFLNK = 0x05000000 - S_IFBLK = 0x06000000 - S_IFSOCK = 0x07000000 - S_IFVMEXTL = 0xFE000000 - S_IFVMEXTL_EXEC = 0x00010000 - S_IFVMEXTL_DATA = 0x00020000 - S_IFVMEXTL_MEL = 0x00030000 - S_IFEXTL = 0x00000001 - S_IFPROGCTL = 0x00000002 - S_IFAPFCTL = 0x00000004 - S_IFNOSHARE = 0x00000008 - S_IFSHARELIB = 0x00000010 - S_IFMT = 0xFF000000 - S_IFMST = 0x00FF0000 - TCP_KEEPALIVE = 0x8 - TCP_NODELAY = 0x1 - TCP_INFO = 0xb - TCP_USER_TIMEOUT = 0x1 - TIOCGWINSZ = 0x4008a368 - TIOCSWINSZ = 0x8008a367 - TIOCSBRK = 0x2000a77b - TIOCCBRK = 0x2000a77a - TIOCSTI = 0x8001a772 - TIOCGPGRP = 0x4004a777 // _IOR(167, 119, int) - TCSANOW = 0 - TCSETS = 0 // equivalent to TCSANOW for tcsetattr - TCSADRAIN = 1 - TCSETSW = 1 // equivalent to TCSADRAIN for tcsetattr - TCSAFLUSH = 2 - TCSETSF = 2 // equivalent to TCSAFLUSH for tcsetattr - TCGETS = 3 // not defined in ioctl.h -- zos golang only - TCIFLUSH = 0 - TCOFLUSH = 1 - TCIOFLUSH = 2 - TCOOFF = 0 - TCOON = 1 - TCIOFF = 2 - TCION = 3 - TIOCSPGRP = 0x8004a776 - TIOCNOTTY = 0x2000a771 - TIOCEXCL = 0x2000a70d - TIOCNXCL = 0x2000a70e - TIOCGETD = 0x4004a700 - TIOCSETD = 0x8004a701 - TIOCPKT = 0x8004a770 - TIOCSTOP = 0x2000a76f - TIOCSTART = 0x2000a76e - TIOCUCNTL = 0x8004a766 - TIOCREMOTE = 0x8004a769 - TIOCMGET = 0x4004a76a - TIOCMSET = 0x8004a76d - TIOCMBIC = 0x8004a76b - TIOCMBIS = 0x8004a76c - VINTR = 0 - VQUIT = 1 - VERASE = 2 - VKILL = 3 - VEOF = 4 - VEOL = 5 - VMIN = 6 - VSTART = 7 - VSTOP = 8 - VSUSP = 9 - VTIME = 10 - WCONTINUED = 0x4 - WNOHANG = 0x1 - WUNTRACED = 0x2 - _BPX_SWAP = 1 - _BPX_NONSWAP = 2 - MCL_CURRENT = 1 // for Linux compatibility -- no zos semantics - MCL_FUTURE = 2 // for Linux compatibility -- no zos semantics - MCL_ONFAULT = 3 // for Linux compatibility -- no zos semantics - MADV_NORMAL = 0 // for Linux compatibility -- no zos semantics - MADV_RANDOM = 1 // for Linux compatibility -- no zos semantics - MADV_SEQUENTIAL = 2 // for Linux compatibility -- no zos semantics - MADV_WILLNEED = 3 // for Linux compatibility -- no zos semantics - MADV_REMOVE = 4 // for Linux compatibility -- no zos semantics - MADV_DONTFORK = 5 // for Linux compatibility -- no zos semantics - MADV_DOFORK = 6 // for Linux compatibility -- no zos semantics - MADV_HWPOISON = 7 // for Linux compatibility -- no zos semantics - MADV_MERGEABLE = 8 // for Linux compatibility -- no zos semantics - MADV_UNMERGEABLE = 9 // for Linux compatibility -- no zos semantics - MADV_SOFT_OFFLINE = 10 // for Linux compatibility -- no zos semantics - MADV_HUGEPAGE = 11 // for Linux compatibility -- no zos semantics - MADV_NOHUGEPAGE = 12 // for Linux compatibility -- no zos semantics - MADV_DONTDUMP = 13 // for Linux compatibility -- no zos semantics - MADV_DODUMP = 14 // for Linux compatibility -- no zos semantics - MADV_FREE = 15 // for Linux compatibility -- no zos semantics - MADV_WIPEONFORK = 16 // for Linux compatibility -- no zos semantics - MADV_KEEPONFORK = 17 // for Linux compatibility -- no zos semantics - AT_SYMLINK_NOFOLLOW = 1 // for Unix compatibility -- no zos semantics - AT_FDCWD = 2 // for Unix compatibility -- no zos semantics -) - -const ( - EDOM = Errno(1) - ERANGE = Errno(2) - EACCES = Errno(111) - EAGAIN = Errno(112) - EBADF = Errno(113) - EBUSY = Errno(114) - ECHILD = Errno(115) - EDEADLK = Errno(116) - EEXIST = Errno(117) - EFAULT = Errno(118) - EFBIG = Errno(119) - EINTR = Errno(120) - EINVAL = Errno(121) - EIO = Errno(122) - EISDIR = Errno(123) - EMFILE = Errno(124) - EMLINK = Errno(125) - ENAMETOOLONG = Errno(126) - ENFILE = Errno(127) - ENODEV = Errno(128) - ENOENT = Errno(129) - ENOEXEC = Errno(130) - ENOLCK = Errno(131) - ENOMEM = Errno(132) - ENOSPC = Errno(133) - ENOSYS = Errno(134) - ENOTDIR = Errno(135) - ENOTEMPTY = Errno(136) - ENOTTY = Errno(137) - ENXIO = Errno(138) - EPERM = Errno(139) - EPIPE = Errno(140) - EROFS = Errno(141) - ESPIPE = Errno(142) - ESRCH = Errno(143) - EXDEV = Errno(144) - E2BIG = Errno(145) - ELOOP = Errno(146) - EILSEQ = Errno(147) - ENODATA = Errno(148) - EOVERFLOW = Errno(149) - EMVSNOTUP = Errno(150) - ECMSSTORAGE = Errno(151) - EMVSDYNALC = Errno(151) - EMVSCVAF = Errno(152) - EMVSCATLG = Errno(153) - ECMSINITIAL = Errno(156) - EMVSINITIAL = Errno(156) - ECMSERR = Errno(157) - EMVSERR = Errno(157) - EMVSPARM = Errno(158) - ECMSPFSFILE = Errno(159) - EMVSPFSFILE = Errno(159) - EMVSBADCHAR = Errno(160) - ECMSPFSPERM = Errno(162) - EMVSPFSPERM = Errno(162) - EMVSSAFEXTRERR = Errno(163) - EMVSSAF2ERR = Errno(164) - EMVSTODNOTSET = Errno(165) - EMVSPATHOPTS = Errno(166) - EMVSNORTL = Errno(167) - EMVSEXPIRE = Errno(168) - EMVSPASSWORD = Errno(169) - EMVSWLMERROR = Errno(170) - EMVSCPLERROR = Errno(171) - EMVSARMERROR = Errno(172) - ELENOFORK = Errno(200) - ELEMSGERR = Errno(201) - EFPMASKINV = Errno(202) - EFPMODEINV = Errno(203) - EBUFLEN = Errno(227) - EEXTLINK = Errno(228) - ENODD = Errno(229) - ECMSESMERR = Errno(230) - ECPERR = Errno(231) - ELEMULTITHREAD = Errno(232) - ELEFENCE = Errno(244) - EBADDATA = Errno(245) - EUNKNOWN = Errno(246) - ENOTSUP = Errno(247) - EBADNAME = Errno(248) - ENOTSAFE = Errno(249) - ELEMULTITHREADFORK = Errno(257) - ECUNNOENV = Errno(258) - ECUNNOCONV = Errno(259) - ECUNNOTALIGNED = Errno(260) - ECUNERR = Errno(262) - EIBMBADCALL = Errno(1000) - EIBMBADPARM = Errno(1001) - EIBMSOCKOUTOFRANGE = Errno(1002) - EIBMSOCKINUSE = Errno(1003) - EIBMIUCVERR = Errno(1004) - EOFFLOADboxERROR = Errno(1005) - EOFFLOADboxRESTART = Errno(1006) - EOFFLOADboxDOWN = Errno(1007) - EIBMCONFLICT = Errno(1008) - EIBMCANCELLED = Errno(1009) - EIBMBADTCPNAME = Errno(1011) - ENOTBLK = Errno(1100) - ETXTBSY = Errno(1101) - EWOULDBLOCK = Errno(1102) - EINPROGRESS = Errno(1103) - EALREADY = Errno(1104) - ENOTSOCK = Errno(1105) - EDESTADDRREQ = Errno(1106) - EMSGSIZE = Errno(1107) - EPROTOTYPE = Errno(1108) - ENOPROTOOPT = Errno(1109) - EPROTONOSUPPORT = Errno(1110) - ESOCKTNOSUPPORT = Errno(1111) - EOPNOTSUPP = Errno(1112) - EPFNOSUPPORT = Errno(1113) - EAFNOSUPPORT = Errno(1114) - EADDRINUSE = Errno(1115) - EADDRNOTAVAIL = Errno(1116) - ENETDOWN = Errno(1117) - ENETUNREACH = Errno(1118) - ENETRESET = Errno(1119) - ECONNABORTED = Errno(1120) - ECONNRESET = Errno(1121) - ENOBUFS = Errno(1122) - EISCONN = Errno(1123) - ENOTCONN = Errno(1124) - ESHUTDOWN = Errno(1125) - ETOOMANYREFS = Errno(1126) - ETIMEDOUT = Errno(1127) - ECONNREFUSED = Errno(1128) - EHOSTDOWN = Errno(1129) - EHOSTUNREACH = Errno(1130) - EPROCLIM = Errno(1131) - EUSERS = Errno(1132) - EDQUOT = Errno(1133) - ESTALE = Errno(1134) - EREMOTE = Errno(1135) - ENOSTR = Errno(1136) - ETIME = Errno(1137) - ENOSR = Errno(1138) - ENOMSG = Errno(1139) - EBADMSG = Errno(1140) - EIDRM = Errno(1141) - ENONET = Errno(1142) - ERREMOTE = Errno(1143) - ENOLINK = Errno(1144) - EADV = Errno(1145) - ESRMNT = Errno(1146) - ECOMM = Errno(1147) - EPROTO = Errno(1148) - EMULTIHOP = Errno(1149) - EDOTDOT = Errno(1150) - EREMCHG = Errno(1151) - ECANCELED = Errno(1152) - EINTRNODATA = Errno(1159) - ENOREUSE = Errno(1160) - ENOMOVE = Errno(1161) -) - -// Signals -const ( - SIGHUP = Signal(1) - SIGINT = Signal(2) - SIGABRT = Signal(3) - SIGILL = Signal(4) - SIGPOLL = Signal(5) - SIGURG = Signal(6) - SIGSTOP = Signal(7) - SIGFPE = Signal(8) - SIGKILL = Signal(9) - SIGBUS = Signal(10) - SIGSEGV = Signal(11) - SIGSYS = Signal(12) - SIGPIPE = Signal(13) - SIGALRM = Signal(14) - SIGTERM = Signal(15) - SIGUSR1 = Signal(16) - SIGUSR2 = Signal(17) - SIGABND = Signal(18) - SIGCONT = Signal(19) - SIGCHLD = Signal(20) - SIGTTIN = Signal(21) - SIGTTOU = Signal(22) - SIGIO = Signal(23) - SIGQUIT = Signal(24) - SIGTSTP = Signal(25) - SIGTRAP = Signal(26) - SIGIOERR = Signal(27) - SIGWINCH = Signal(28) - SIGXCPU = Signal(29) - SIGXFSZ = Signal(30) - SIGVTALRM = Signal(31) - SIGPROF = Signal(32) - SIGDANGER = Signal(33) - SIGTHSTOP = Signal(34) - SIGTHCONT = Signal(35) - SIGTRACE = Signal(37) - SIGDCE = Signal(38) - SIGDUMP = Signal(39) -) - -// Error table -var errorList = [...]struct { - num Errno - name string - desc string -}{ - {1, "EDC5001I", "A domain error occurred."}, - {2, "EDC5002I", "A range error occurred."}, - {111, "EDC5111I", "Permission denied."}, - {112, "EDC5112I", "Resource temporarily unavailable."}, - {113, "EDC5113I", "Bad file descriptor."}, - {114, "EDC5114I", "Resource busy."}, - {115, "EDC5115I", "No child processes."}, - {116, "EDC5116I", "Resource deadlock avoided."}, - {117, "EDC5117I", "File exists."}, - {118, "EDC5118I", "Incorrect address."}, - {119, "EDC5119I", "File too large."}, - {120, "EDC5120I", "Interrupted function call."}, - {121, "EDC5121I", "Invalid argument."}, - {122, "EDC5122I", "Input/output error."}, - {123, "EDC5123I", "Is a directory."}, - {124, "EDC5124I", "Too many open files."}, - {125, "EDC5125I", "Too many links."}, - {126, "EDC5126I", "Filename too long."}, - {127, "EDC5127I", "Too many open files in system."}, - {128, "EDC5128I", "No such device."}, - {129, "EDC5129I", "No such file or directory."}, - {130, "EDC5130I", "Exec format error."}, - {131, "EDC5131I", "No locks available."}, - {132, "EDC5132I", "Not enough memory."}, - {133, "EDC5133I", "No space left on device."}, - {134, "EDC5134I", "Function not implemented."}, - {135, "EDC5135I", "Not a directory."}, - {136, "EDC5136I", "Directory not empty."}, - {137, "EDC5137I", "Inappropriate I/O control operation."}, - {138, "EDC5138I", "No such device or address."}, - {139, "EDC5139I", "Operation not permitted."}, - {140, "EDC5140I", "Broken pipe."}, - {141, "EDC5141I", "Read-only file system."}, - {142, "EDC5142I", "Invalid seek."}, - {143, "EDC5143I", "No such process."}, - {144, "EDC5144I", "Improper link."}, - {145, "EDC5145I", "The parameter list is too long, or the message to receive was too large for the buffer."}, - {146, "EDC5146I", "Too many levels of symbolic links."}, - {147, "EDC5147I", "Illegal byte sequence."}, - {148, "", ""}, - {149, "EDC5149I", "Value Overflow Error."}, - {150, "EDC5150I", "UNIX System Services is not active."}, - {151, "EDC5151I", "Dynamic allocation error."}, - {152, "EDC5152I", "Common VTOC access facility (CVAF) error."}, - {153, "EDC5153I", "Catalog obtain error."}, - {156, "EDC5156I", "Process initialization error."}, - {157, "EDC5157I", "An internal error has occurred."}, - {158, "EDC5158I", "Bad parameters were passed to the service."}, - {159, "EDC5159I", "The Physical File System encountered a permanent file error."}, - {160, "EDC5160I", "Bad character in environment variable name."}, - {162, "EDC5162I", "The Physical File System encountered a system error."}, - {163, "EDC5163I", "SAF/RACF extract error."}, - {164, "EDC5164I", "SAF/RACF error."}, - {165, "EDC5165I", "System TOD clock not set."}, - {166, "EDC5166I", "Access mode argument on function call conflicts with PATHOPTS parameter on JCL DD statement."}, - {167, "EDC5167I", "Access to the UNIX System Services version of the C RTL is denied."}, - {168, "EDC5168I", "Password has expired."}, - {169, "EDC5169I", "Password is invalid."}, - {170, "EDC5170I", "An error was encountered with WLM."}, - {171, "EDC5171I", "An error was encountered with CPL."}, - {172, "EDC5172I", "An error was encountered with Application Response Measurement (ARM) component."}, - {200, "EDC5200I", "The application contains a Language Environment member language that cannot tolerate a fork()."}, - {201, "EDC5201I", "The Language Environment message file was not found in the hierarchical file system."}, - {202, "EDC5202E", "DLL facilities are not supported under SPC environment."}, - {203, "EDC5203E", "DLL facilities are not supported under POSIX environment."}, - {227, "EDC5227I", "Buffer is not long enough to contain a path definition"}, - {228, "EDC5228I", "The file referred to is an external link"}, - {229, "EDC5229I", "No path definition for ddname in effect"}, - {230, "EDC5230I", "ESM error."}, - {231, "EDC5231I", "CP or the external security manager had an error"}, - {232, "EDC5232I", "The function failed because it was invoked from a multithread environment."}, - {244, "EDC5244I", "The program, module or DLL is not supported in this environment."}, - {245, "EDC5245I", "Data is not valid."}, - {246, "EDC5246I", "Unknown system state."}, - {247, "EDC5247I", "Operation not supported."}, - {248, "EDC5248I", "The object name specified is not correct."}, - {249, "EDC5249I", "The function is not allowed."}, - {257, "EDC5257I", "Function cannot be called in the child process of a fork() from a multithreaded process until exec() is called."}, - {258, "EDC5258I", "A CUN_RS_NO_UNI_ENV error was issued by Unicode Services."}, - {259, "EDC5259I", "A CUN_RS_NO_CONVERSION error was issued by Unicode Services."}, - {260, "EDC5260I", "A CUN_RS_TABLE_NOT_ALIGNED error was issued by Unicode Services."}, - {262, "EDC5262I", "An iconv() function encountered an unexpected error while using Unicode Services."}, - {1000, "EDC8000I", "A bad socket-call constant was found in the IUCV header."}, - {1001, "EDC8001I", "An error was found in the IUCV header."}, - {1002, "EDC8002I", "A socket descriptor is out of range."}, - {1003, "EDC8003I", "A socket descriptor is in use."}, - {1004, "EDC8004I", "Request failed because of an IUCV error."}, - {1005, "EDC8005I", "Offload box error."}, - {1006, "EDC8006I", "Offload box restarted."}, - {1007, "EDC8007I", "Offload box down."}, - {1008, "EDC8008I", "Already a conflicting call outstanding on socket."}, - {1009, "EDC8009I", "Request cancelled using a SOCKcallCANCEL request."}, - {1011, "EDC8011I", "A name of a PFS was specified that either is not configured or is not a Sockets PFS."}, - {1100, "EDC8100I", "Block device required."}, - {1101, "EDC8101I", "Text file busy."}, - {1102, "EDC8102I", "Operation would block."}, - {1103, "EDC8103I", "Operation now in progress."}, - {1104, "EDC8104I", "Connection already in progress."}, - {1105, "EDC8105I", "Socket operation on non-socket."}, - {1106, "EDC8106I", "Destination address required."}, - {1107, "EDC8107I", "Message too long."}, - {1108, "EDC8108I", "Protocol wrong type for socket."}, - {1109, "EDC8109I", "Protocol not available."}, - {1110, "EDC8110I", "Protocol not supported."}, - {1111, "EDC8111I", "Socket type not supported."}, - {1112, "EDC8112I", "Operation not supported on socket."}, - {1113, "EDC8113I", "Protocol family not supported."}, - {1114, "EDC8114I", "Address family not supported."}, - {1115, "EDC8115I", "Address already in use."}, - {1116, "EDC8116I", "Address not available."}, - {1117, "EDC8117I", "Network is down."}, - {1118, "EDC8118I", "Network is unreachable."}, - {1119, "EDC8119I", "Network dropped connection on reset."}, - {1120, "EDC8120I", "Connection ended abnormally."}, - {1121, "EDC8121I", "Connection reset."}, - {1122, "EDC8122I", "No buffer space available."}, - {1123, "EDC8123I", "Socket already connected."}, - {1124, "EDC8124I", "Socket not connected."}, - {1125, "EDC8125I", "Can't send after socket shutdown."}, - {1126, "EDC8126I", "Too many references; can't splice."}, - {1127, "EDC8127I", "Connection timed out."}, - {1128, "EDC8128I", "Connection refused."}, - {1129, "EDC8129I", "Host is not available."}, - {1130, "EDC8130I", "Host cannot be reached."}, - {1131, "EDC8131I", "Too many processes."}, - {1132, "EDC8132I", "Too many users."}, - {1133, "EDC8133I", "Disk quota exceeded."}, - {1134, "EDC8134I", "Stale file handle."}, - {1135, "", ""}, - {1136, "EDC8136I", "File is not a STREAM."}, - {1137, "EDC8137I", "STREAMS ioctl() timeout."}, - {1138, "EDC8138I", "No STREAMS resources."}, - {1139, "EDC8139I", "The message identified by set_id and msg_id is not in the message catalog."}, - {1140, "EDC8140I", "Bad message."}, - {1141, "EDC8141I", "Identifier removed."}, - {1142, "", ""}, - {1143, "", ""}, - {1144, "EDC8144I", "The link has been severed."}, - {1145, "", ""}, - {1146, "", ""}, - {1147, "", ""}, - {1148, "EDC8148I", "Protocol error."}, - {1149, "EDC8149I", "Multihop not allowed."}, - {1150, "", ""}, - {1151, "", ""}, - {1152, "EDC8152I", "The asynchronous I/O request has been canceled."}, - {1159, "EDC8159I", "Function call was interrupted before any data was received."}, - {1160, "EDC8160I", "Socket reuse is not supported."}, - {1161, "EDC8161I", "The file system cannot currently be moved."}, -} - -// Signal table -var signalList = [...]struct { - num Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGABT", "aborted"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGPOLL", "pollable event"}, - {6, "SIGURG", "urgent I/O condition"}, - {7, "SIGSTOP", "stop process"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad argument to routine"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGUSR1", "user defined signal 1"}, - {17, "SIGUSR2", "user defined signal 2"}, - {18, "SIGABND", "abend"}, - {19, "SIGCONT", "continued"}, - {20, "SIGCHLD", "child exited"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGIO", "I/O possible"}, - {24, "SIGQUIT", "quit"}, - {25, "SIGTSTP", "stopped"}, - {26, "SIGTRAP", "trace/breakpoint trap"}, - {27, "SIGIOER", "I/O error"}, - {28, "SIGWINCH", "window changed"}, - {29, "SIGXCPU", "CPU time limit exceeded"}, - {30, "SIGXFSZ", "file size limit exceeded"}, - {31, "SIGVTALRM", "virtual timer expired"}, - {32, "SIGPROF", "profiling timer expired"}, - {33, "SIGDANGER", "danger"}, - {34, "SIGTHSTOP", "stop thread"}, - {35, "SIGTHCONT", "continue thread"}, - {37, "SIGTRACE", "trace"}, - {38, "", "DCE"}, - {39, "SIGDUMP", "dump"}, -} diff --git a/vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go b/vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go deleted file mode 100644 index bd001a6..0000000 --- a/vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go +++ /dev/null @@ -1,42 +0,0 @@ -// Code generated by linux/mkall.go generatePtracePair("arm", "arm64"). DO NOT EDIT. - -//go:build linux && (arm || arm64) -// +build linux -// +build arm arm64 - -package unix - -import "unsafe" - -// PtraceRegsArm is the registers used by arm binaries. -type PtraceRegsArm struct { - Uregs [18]uint32 -} - -// PtraceGetRegsArm fetches the registers used by arm binaries. -func PtraceGetRegsArm(pid int, regsout *PtraceRegsArm) error { - return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) -} - -// PtraceSetRegsArm sets the registers used by arm binaries. -func PtraceSetRegsArm(pid int, regs *PtraceRegsArm) error { - return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) -} - -// PtraceRegsArm64 is the registers used by arm64 binaries. -type PtraceRegsArm64 struct { - Regs [31]uint64 - Sp uint64 - Pc uint64 - Pstate uint64 -} - -// PtraceGetRegsArm64 fetches the registers used by arm64 binaries. -func PtraceGetRegsArm64(pid int, regsout *PtraceRegsArm64) error { - return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) -} - -// PtraceSetRegsArm64 sets the registers used by arm64 binaries. -func PtraceSetRegsArm64(pid int, regs *PtraceRegsArm64) error { - return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) -} diff --git a/vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go b/vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go deleted file mode 100644 index 6cb6d68..0000000 --- a/vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go +++ /dev/null @@ -1,17 +0,0 @@ -// Code generated by linux/mkall.go generatePtraceRegSet("arm64"). DO NOT EDIT. - -package unix - -import "unsafe" - -// PtraceGetRegSetArm64 fetches the registers used by arm64 binaries. -func PtraceGetRegSetArm64(pid, addr int, regsout *PtraceRegsArm64) error { - iovec := Iovec{(*byte)(unsafe.Pointer(regsout)), uint64(unsafe.Sizeof(*regsout))} - return ptrace(PTRACE_GETREGSET, pid, uintptr(addr), uintptr(unsafe.Pointer(&iovec))) -} - -// PtraceSetRegSetArm64 sets the registers used by arm64 binaries. -func PtraceSetRegSetArm64(pid, addr int, regs *PtraceRegsArm64) error { - iovec := Iovec{(*byte)(unsafe.Pointer(regs)), uint64(unsafe.Sizeof(*regs))} - return ptrace(PTRACE_SETREGSET, pid, uintptr(addr), uintptr(unsafe.Pointer(&iovec))) -} diff --git a/vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go b/vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go deleted file mode 100644 index c34d063..0000000 --- a/vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go +++ /dev/null @@ -1,51 +0,0 @@ -// Code generated by linux/mkall.go generatePtracePair("mips", "mips64"). DO NOT EDIT. - -//go:build linux && (mips || mips64) -// +build linux -// +build mips mips64 - -package unix - -import "unsafe" - -// PtraceRegsMips is the registers used by mips binaries. -type PtraceRegsMips struct { - Regs [32]uint64 - Lo uint64 - Hi uint64 - Epc uint64 - Badvaddr uint64 - Status uint64 - Cause uint64 -} - -// PtraceGetRegsMips fetches the registers used by mips binaries. -func PtraceGetRegsMips(pid int, regsout *PtraceRegsMips) error { - return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) -} - -// PtraceSetRegsMips sets the registers used by mips binaries. -func PtraceSetRegsMips(pid int, regs *PtraceRegsMips) error { - return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) -} - -// PtraceRegsMips64 is the registers used by mips64 binaries. -type PtraceRegsMips64 struct { - Regs [32]uint64 - Lo uint64 - Hi uint64 - Epc uint64 - Badvaddr uint64 - Status uint64 - Cause uint64 -} - -// PtraceGetRegsMips64 fetches the registers used by mips64 binaries. -func PtraceGetRegsMips64(pid int, regsout *PtraceRegsMips64) error { - return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) -} - -// PtraceSetRegsMips64 sets the registers used by mips64 binaries. -func PtraceSetRegsMips64(pid int, regs *PtraceRegsMips64) error { - return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) -} diff --git a/vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go b/vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go deleted file mode 100644 index 3ccf0c0..0000000 --- a/vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go +++ /dev/null @@ -1,51 +0,0 @@ -// Code generated by linux/mkall.go generatePtracePair("mipsle", "mips64le"). DO NOT EDIT. - -//go:build linux && (mipsle || mips64le) -// +build linux -// +build mipsle mips64le - -package unix - -import "unsafe" - -// PtraceRegsMipsle is the registers used by mipsle binaries. -type PtraceRegsMipsle struct { - Regs [32]uint64 - Lo uint64 - Hi uint64 - Epc uint64 - Badvaddr uint64 - Status uint64 - Cause uint64 -} - -// PtraceGetRegsMipsle fetches the registers used by mipsle binaries. -func PtraceGetRegsMipsle(pid int, regsout *PtraceRegsMipsle) error { - return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) -} - -// PtraceSetRegsMipsle sets the registers used by mipsle binaries. -func PtraceSetRegsMipsle(pid int, regs *PtraceRegsMipsle) error { - return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) -} - -// PtraceRegsMips64le is the registers used by mips64le binaries. -type PtraceRegsMips64le struct { - Regs [32]uint64 - Lo uint64 - Hi uint64 - Epc uint64 - Badvaddr uint64 - Status uint64 - Cause uint64 -} - -// PtraceGetRegsMips64le fetches the registers used by mips64le binaries. -func PtraceGetRegsMips64le(pid int, regsout *PtraceRegsMips64le) error { - return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) -} - -// PtraceSetRegsMips64le sets the registers used by mips64le binaries. -func PtraceSetRegsMips64le(pid int, regs *PtraceRegsMips64le) error { - return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) -} diff --git a/vendor/golang.org/x/sys/unix/zptrace_x86_linux.go b/vendor/golang.org/x/sys/unix/zptrace_x86_linux.go deleted file mode 100644 index 7d65857..0000000 --- a/vendor/golang.org/x/sys/unix/zptrace_x86_linux.go +++ /dev/null @@ -1,81 +0,0 @@ -// Code generated by linux/mkall.go generatePtracePair("386", "amd64"). DO NOT EDIT. - -//go:build linux && (386 || amd64) -// +build linux -// +build 386 amd64 - -package unix - -import "unsafe" - -// PtraceRegs386 is the registers used by 386 binaries. -type PtraceRegs386 struct { - Ebx int32 - Ecx int32 - Edx int32 - Esi int32 - Edi int32 - Ebp int32 - Eax int32 - Xds int32 - Xes int32 - Xfs int32 - Xgs int32 - Orig_eax int32 - Eip int32 - Xcs int32 - Eflags int32 - Esp int32 - Xss int32 -} - -// PtraceGetRegs386 fetches the registers used by 386 binaries. -func PtraceGetRegs386(pid int, regsout *PtraceRegs386) error { - return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) -} - -// PtraceSetRegs386 sets the registers used by 386 binaries. -func PtraceSetRegs386(pid int, regs *PtraceRegs386) error { - return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) -} - -// PtraceRegsAmd64 is the registers used by amd64 binaries. -type PtraceRegsAmd64 struct { - R15 uint64 - R14 uint64 - R13 uint64 - R12 uint64 - Rbp uint64 - Rbx uint64 - R11 uint64 - R10 uint64 - R9 uint64 - R8 uint64 - Rax uint64 - Rcx uint64 - Rdx uint64 - Rsi uint64 - Rdi uint64 - Orig_rax uint64 - Rip uint64 - Cs uint64 - Eflags uint64 - Rsp uint64 - Ss uint64 - Fs_base uint64 - Gs_base uint64 - Ds uint64 - Es uint64 - Fs uint64 - Gs uint64 -} - -// PtraceGetRegsAmd64 fetches the registers used by amd64 binaries. -func PtraceGetRegsAmd64(pid int, regsout *PtraceRegsAmd64) error { - return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) -} - -// PtraceSetRegsAmd64 sets the registers used by amd64 binaries. -func PtraceSetRegsAmd64(pid int, regs *PtraceRegsAmd64) error { - return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go deleted file mode 100644 index 870215d..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go +++ /dev/null @@ -1,1485 +0,0 @@ -// go run mksyscall_aix_ppc.go -aix -tags aix,ppc syscall_aix.go syscall_aix_ppc.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build aix && ppc -// +build aix,ppc - -package unix - -/* -#include -#include -int utimes(uintptr_t, uintptr_t); -int utimensat(int, uintptr_t, uintptr_t, int); -int getcwd(uintptr_t, size_t); -int accept(int, uintptr_t, uintptr_t); -int getdirent(int, uintptr_t, size_t); -int wait4(int, uintptr_t, int, uintptr_t); -int ioctl(int, int, uintptr_t); -int fcntl(uintptr_t, int, uintptr_t); -int fsync_range(int, int, long long, long long); -int acct(uintptr_t); -int chdir(uintptr_t); -int chroot(uintptr_t); -int close(int); -int dup(int); -void exit(int); -int faccessat(int, uintptr_t, unsigned int, int); -int fchdir(int); -int fchmod(int, unsigned int); -int fchmodat(int, uintptr_t, unsigned int, int); -int fchownat(int, uintptr_t, int, int, int); -int fdatasync(int); -int getpgid(int); -int getpgrp(); -int getpid(); -int getppid(); -int getpriority(int, int); -int getrusage(int, uintptr_t); -int getsid(int); -int kill(int, int); -int syslog(int, uintptr_t, size_t); -int mkdir(int, uintptr_t, unsigned int); -int mkdirat(int, uintptr_t, unsigned int); -int mkfifo(uintptr_t, unsigned int); -int mknod(uintptr_t, unsigned int, int); -int mknodat(int, uintptr_t, unsigned int, int); -int nanosleep(uintptr_t, uintptr_t); -int open64(uintptr_t, int, unsigned int); -int openat(int, uintptr_t, int, unsigned int); -int read(int, uintptr_t, size_t); -int readlink(uintptr_t, uintptr_t, size_t); -int renameat(int, uintptr_t, int, uintptr_t); -int setdomainname(uintptr_t, size_t); -int sethostname(uintptr_t, size_t); -int setpgid(int, int); -int setsid(); -int settimeofday(uintptr_t); -int setuid(int); -int setgid(int); -int setpriority(int, int, int); -int statx(int, uintptr_t, int, int, uintptr_t); -int sync(); -uintptr_t times(uintptr_t); -int umask(int); -int uname(uintptr_t); -int unlink(uintptr_t); -int unlinkat(int, uintptr_t, int); -int ustat(int, uintptr_t); -int write(int, uintptr_t, size_t); -int dup2(int, int); -int posix_fadvise64(int, long long, long long, int); -int fchown(int, int, int); -int fstat(int, uintptr_t); -int fstatat(int, uintptr_t, uintptr_t, int); -int fstatfs(int, uintptr_t); -int ftruncate(int, long long); -int getegid(); -int geteuid(); -int getgid(); -int getuid(); -int lchown(uintptr_t, int, int); -int listen(int, int); -int lstat(uintptr_t, uintptr_t); -int pause(); -int pread64(int, uintptr_t, size_t, long long); -int pwrite64(int, uintptr_t, size_t, long long); -#define c_select select -int select(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t); -int pselect(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t); -int setregid(int, int); -int setreuid(int, int); -int shutdown(int, int); -long long splice(int, uintptr_t, int, uintptr_t, int, int); -int stat(uintptr_t, uintptr_t); -int statfs(uintptr_t, uintptr_t); -int truncate(uintptr_t, long long); -int bind(int, uintptr_t, uintptr_t); -int connect(int, uintptr_t, uintptr_t); -int getgroups(int, uintptr_t); -int setgroups(int, uintptr_t); -int getsockopt(int, int, int, uintptr_t, uintptr_t); -int setsockopt(int, int, int, uintptr_t, uintptr_t); -int socket(int, int, int); -int socketpair(int, int, int, uintptr_t); -int getpeername(int, uintptr_t, uintptr_t); -int getsockname(int, uintptr_t, uintptr_t); -int recvfrom(int, uintptr_t, size_t, int, uintptr_t, uintptr_t); -int sendto(int, uintptr_t, size_t, int, uintptr_t, uintptr_t); -int nrecvmsg(int, uintptr_t, int); -int nsendmsg(int, uintptr_t, int); -int munmap(uintptr_t, uintptr_t); -int madvise(uintptr_t, size_t, int); -int mprotect(uintptr_t, size_t, int); -int mlock(uintptr_t, size_t); -int mlockall(int); -int msync(uintptr_t, size_t, int); -int munlock(uintptr_t, size_t); -int munlockall(); -int pipe(uintptr_t); -int poll(uintptr_t, int, int); -int gettimeofday(uintptr_t, uintptr_t); -int time(uintptr_t); -int utime(uintptr_t, uintptr_t); -unsigned long long getsystemcfg(int); -int umount(uintptr_t); -int getrlimit64(int, uintptr_t); -int setrlimit64(int, uintptr_t); -long long lseek64(int, long long, int); -uintptr_t mmap(uintptr_t, uintptr_t, int, int, int, long long); - -*/ -import "C" -import ( - "unsafe" -) - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, times *[2]Timeval) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.utimes(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(times)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.utimensat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(times))), C.int(flag)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getcwd(buf []byte) (err error) { - var _p0 *byte - if len(buf) > 0 { - _p0 = &buf[0] - } - var _p1 int - _p1 = len(buf) - r0, er := C.getcwd(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, er := C.accept(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen)))) - fd = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getdirent(fd int, buf []byte) (n int, err error) { - var _p0 *byte - if len(buf) > 0 { - _p0 = &buf[0] - } - var _p1 int - _p1 = len(buf) - r0, er := C.getdirent(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) - n = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error) { - r0, er := C.wait4(C.int(pid), C.uintptr_t(uintptr(unsafe.Pointer(status))), C.int(options), C.uintptr_t(uintptr(unsafe.Pointer(rusage)))) - wpid = Pid_t(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctl(fd int, req uint, arg uintptr) (err error) { - r0, er := C.ioctl(C.int(fd), C.int(req), C.uintptr_t(arg)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func FcntlInt(fd uintptr, cmd int, arg int) (r int, err error) { - r0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg)) - r = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) { - r0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(uintptr(unsafe.Pointer(lk)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fcntl(fd int, cmd int, arg int) (val int, err error) { - r0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg)) - val = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fsyncRange(fd int, how int, start int64, length int64) (err error) { - r0, er := C.fsync_range(C.int(fd), C.int(how), C.longlong(start), C.longlong(length)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Acct(path string) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.acct(C.uintptr_t(_p0)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.chdir(C.uintptr_t(_p0)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.chroot(C.uintptr_t(_p0)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - r0, er := C.close(C.int(fd)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(oldfd int) (fd int, err error) { - r0, er := C.dup(C.int(oldfd)) - fd = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - C.exit(C.int(code)) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.faccessat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - r0, er := C.fchdir(C.int(fd)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - r0, er := C.fchmod(C.int(fd), C.uint(mode)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.fchmodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.fchownat(C.int(dirfd), C.uintptr_t(_p0), C.int(uid), C.int(gid), C.int(flags)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fdatasync(fd int) (err error) { - r0, er := C.fdatasync(C.int(fd)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, er := C.getpgid(C.int(pid)) - pgid = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgrp() (pid int) { - r0, _ := C.getpgrp() - pid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _ := C.getpid() - pid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (ppid int) { - r0, _ := C.getppid() - ppid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (prio int, err error) { - r0, er := C.getpriority(C.int(which), C.int(who)) - prio = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrusage(who int, rusage *Rusage) (err error) { - r0, er := C.getrusage(C.int(who), C.uintptr_t(uintptr(unsafe.Pointer(rusage)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, er := C.getsid(C.int(pid)) - sid = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kill(pid int, sig Signal) (err error) { - r0, er := C.kill(C.int(pid), C.int(sig)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Klogctl(typ int, buf []byte) (n int, err error) { - var _p0 *byte - if len(buf) > 0 { - _p0 = &buf[0] - } - var _p1 int - _p1 = len(buf) - r0, er := C.syslog(C.int(typ), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) - n = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdir(dirfd int, path string, mode uint32) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.mkdir(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdirat(dirfd int, path string, mode uint32) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.mkdirat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifo(path string, mode uint32) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.mkfifo(C.uintptr_t(_p0), C.uint(mode)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknod(path string, mode uint32, dev int) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.mknod(C.uintptr_t(_p0), C.uint(mode), C.int(dev)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.mknodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(dev)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - r0, er := C.nanosleep(C.uintptr_t(uintptr(unsafe.Pointer(time))), C.uintptr_t(uintptr(unsafe.Pointer(leftover)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Open(path string, mode int, perm uint32) (fd int, err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.open64(C.uintptr_t(_p0), C.int(mode), C.uint(perm)) - fd = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.openat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.uint(mode)) - fd = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 *byte - if len(p) > 0 { - _p0 = &p[0] - } - var _p1 int - _p1 = len(p) - r0, er := C.read(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) - n = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlink(path string, buf []byte) (n int, err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - var _p1 *byte - if len(buf) > 0 { - _p1 = &buf[0] - } - var _p2 int - _p2 = len(buf) - r0, er := C.readlink(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(_p1))), C.size_t(_p2)) - n = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(oldpath))) - _p1 := uintptr(unsafe.Pointer(C.CString(newpath))) - r0, er := C.renameat(C.int(olddirfd), C.uintptr_t(_p0), C.int(newdirfd), C.uintptr_t(_p1)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setdomainname(p []byte) (err error) { - var _p0 *byte - if len(p) > 0 { - _p0 = &p[0] - } - var _p1 int - _p1 = len(p) - r0, er := C.setdomainname(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sethostname(p []byte) (err error) { - var _p0 *byte - if len(p) > 0 { - _p0 = &p[0] - } - var _p1 int - _p1 = len(p) - r0, er := C.sethostname(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - r0, er := C.setpgid(C.int(pid), C.int(pgid)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, er := C.setsid() - pid = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Settimeofday(tv *Timeval) (err error) { - r0, er := C.settimeofday(C.uintptr_t(uintptr(unsafe.Pointer(tv)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setuid(uid int) (err error) { - r0, er := C.setuid(C.int(uid)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setgid(uid int) (err error) { - r0, er := C.setgid(C.int(uid)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - r0, er := C.setpriority(C.int(which), C.int(who), C.int(prio)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.statx(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.int(mask), C.uintptr_t(uintptr(unsafe.Pointer(stat)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() { - C.sync() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Times(tms *Tms) (ticks uintptr, err error) { - r0, er := C.times(C.uintptr_t(uintptr(unsafe.Pointer(tms)))) - ticks = uintptr(r0) - if uintptr(r0) == ^uintptr(0) && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(mask int) (oldmask int) { - r0, _ := C.umask(C.int(mask)) - oldmask = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Uname(buf *Utsname) (err error) { - r0, er := C.uname(C.uintptr_t(uintptr(unsafe.Pointer(buf)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlink(path string) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.unlink(C.uintptr_t(_p0)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlinkat(dirfd int, path string, flags int) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.unlinkat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ustat(dev int, ubuf *Ustat_t) (err error) { - r0, er := C.ustat(C.int(dev), C.uintptr_t(uintptr(unsafe.Pointer(ubuf)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 *byte - if len(p) > 0 { - _p0 = &p[0] - } - var _p1 int - _p1 = len(p) - r0, er := C.write(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) - n = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readlen(fd int, p *byte, np int) (n int, err error) { - r0, er := C.read(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(p))), C.size_t(np)) - n = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writelen(fd int, p *byte, np int) (n int, err error) { - r0, er := C.write(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(p))), C.size_t(np)) - n = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup2(oldfd int, newfd int) (err error) { - r0, er := C.dup2(C.int(oldfd), C.int(newfd)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - r0, er := C.posix_fadvise64(C.int(fd), C.longlong(offset), C.longlong(length), C.int(advice)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - r0, er := C.fchown(C.int(fd), C.int(uid), C.int(gid)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fstat(fd int, stat *Stat_t) (err error) { - r0, er := C.fstat(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(stat)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.fstatat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(stat))), C.int(flags)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, buf *Statfs_t) (err error) { - r0, er := C.fstatfs(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(buf)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - r0, er := C.ftruncate(C.int(fd), C.longlong(length)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _ := C.getegid() - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (euid int) { - r0, _ := C.geteuid() - euid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _ := C.getgid() - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _ := C.getuid() - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.lchown(C.uintptr_t(_p0), C.int(uid), C.int(gid)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, n int) (err error) { - r0, er := C.listen(C.int(s), C.int(n)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func lstat(path string, stat *Stat_t) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.lstat(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(stat)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pause() (err error) { - r0, er := C.pause() - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 *byte - if len(p) > 0 { - _p0 = &p[0] - } - var _p1 int - _p1 = len(p) - r0, er := C.pread64(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.longlong(offset)) - n = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 *byte - if len(p) > 0 { - _p0 = &p[0] - } - var _p1 int - _p1 = len(p) - r0, er := C.pwrite64(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.longlong(offset)) - n = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, er := C.c_select(C.int(nfd), C.uintptr_t(uintptr(unsafe.Pointer(r))), C.uintptr_t(uintptr(unsafe.Pointer(w))), C.uintptr_t(uintptr(unsafe.Pointer(e))), C.uintptr_t(uintptr(unsafe.Pointer(timeout)))) - n = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { - r0, er := C.pselect(C.int(nfd), C.uintptr_t(uintptr(unsafe.Pointer(r))), C.uintptr_t(uintptr(unsafe.Pointer(w))), C.uintptr_t(uintptr(unsafe.Pointer(e))), C.uintptr_t(uintptr(unsafe.Pointer(timeout))), C.uintptr_t(uintptr(unsafe.Pointer(sigmask)))) - n = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setregid(rgid int, egid int) (err error) { - r0, er := C.setregid(C.int(rgid), C.int(egid)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - r0, er := C.setreuid(C.int(ruid), C.int(euid)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(fd int, how int) (err error) { - r0, er := C.shutdown(C.int(fd), C.int(how)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { - r0, er := C.splice(C.int(rfd), C.uintptr_t(uintptr(unsafe.Pointer(roff))), C.int(wfd), C.uintptr_t(uintptr(unsafe.Pointer(woff))), C.int(len), C.int(flags)) - n = int64(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func stat(path string, statptr *Stat_t) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.stat(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(statptr)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, buf *Statfs_t) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.statfs(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(buf)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.truncate(C.uintptr_t(_p0), C.longlong(length)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - r0, er := C.bind(C.int(s), C.uintptr_t(uintptr(addr)), C.uintptr_t(uintptr(addrlen))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - r0, er := C.connect(C.int(s), C.uintptr_t(uintptr(addr)), C.uintptr_t(uintptr(addrlen))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(n int, list *_Gid_t) (nn int, err error) { - r0, er := C.getgroups(C.int(n), C.uintptr_t(uintptr(unsafe.Pointer(list)))) - nn = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(n int, list *_Gid_t) (err error) { - r0, er := C.setgroups(C.int(n), C.uintptr_t(uintptr(unsafe.Pointer(list)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - r0, er := C.getsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(uintptr(val)), C.uintptr_t(uintptr(unsafe.Pointer(vallen)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - r0, er := C.setsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(uintptr(val)), C.uintptr_t(vallen)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, er := C.socket(C.int(domain), C.int(typ), C.int(proto)) - fd = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - r0, er := C.socketpair(C.int(domain), C.int(typ), C.int(proto), C.uintptr_t(uintptr(unsafe.Pointer(fd)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - r0, er := C.getpeername(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - r0, er := C.getsockname(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 *byte - if len(p) > 0 { - _p0 = &p[0] - } - var _p1 int - _p1 = len(p) - r0, er := C.recvfrom(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(flags), C.uintptr_t(uintptr(unsafe.Pointer(from))), C.uintptr_t(uintptr(unsafe.Pointer(fromlen)))) - n = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 *byte - if len(buf) > 0 { - _p0 = &buf[0] - } - var _p1 int - _p1 = len(buf) - r0, er := C.sendto(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(flags), C.uintptr_t(uintptr(to)), C.uintptr_t(uintptr(addrlen))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, er := C.nrecvmsg(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(msg))), C.int(flags)) - n = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, er := C.nsendmsg(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(msg))), C.int(flags)) - n = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - r0, er := C.munmap(C.uintptr_t(addr), C.uintptr_t(length)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Madvise(b []byte, advice int) (err error) { - var _p0 *byte - if len(b) > 0 { - _p0 = &b[0] - } - var _p1 int - _p1 = len(b) - r0, er := C.madvise(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(advice)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 *byte - if len(b) > 0 { - _p0 = &b[0] - } - var _p1 int - _p1 = len(b) - r0, er := C.mprotect(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(prot)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 *byte - if len(b) > 0 { - _p0 = &b[0] - } - var _p1 int - _p1 = len(b) - r0, er := C.mlock(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - r0, er := C.mlockall(C.int(flags)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 *byte - if len(b) > 0 { - _p0 = &b[0] - } - var _p1 int - _p1 = len(b) - r0, er := C.msync(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(flags)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 *byte - if len(b) > 0 { - _p0 = &b[0] - } - var _p1 int - _p1 = len(b) - r0, er := C.munlock(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - r0, er := C.munlockall() - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe(p *[2]_C_int) (err error) { - r0, er := C.pipe(C.uintptr_t(uintptr(unsafe.Pointer(p)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, er := C.poll(C.uintptr_t(uintptr(unsafe.Pointer(fds))), C.int(nfds), C.int(timeout)) - n = int(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func gettimeofday(tv *Timeval, tzp *Timezone) (err error) { - r0, er := C.gettimeofday(C.uintptr_t(uintptr(unsafe.Pointer(tv))), C.uintptr_t(uintptr(unsafe.Pointer(tzp)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Time(t *Time_t) (tt Time_t, err error) { - r0, er := C.time(C.uintptr_t(uintptr(unsafe.Pointer(t)))) - tt = Time_t(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Utime(path string, buf *Utimbuf) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(path))) - r0, er := C.utime(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(buf)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsystemcfg(label int) (n uint64) { - r0, _ := C.getsystemcfg(C.int(label)) - n = uint64(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func umount(target string) (err error) { - _p0 := uintptr(unsafe.Pointer(C.CString(target))) - r0, er := C.umount(C.uintptr_t(_p0)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(resource int, rlim *Rlimit) (err error) { - r0, er := C.getrlimit64(C.int(resource), C.uintptr_t(uintptr(unsafe.Pointer(rlim)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(resource int, rlim *Rlimit) (err error) { - r0, er := C.setrlimit64(C.int(resource), C.uintptr_t(uintptr(unsafe.Pointer(rlim)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (off int64, err error) { - r0, er := C.lseek64(C.int(fd), C.longlong(offset), C.int(whence)) - off = int64(r0) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { - r0, er := C.mmap(C.uintptr_t(addr), C.uintptr_t(length), C.int(prot), C.int(flags), C.int(fd), C.longlong(offset)) - xaddr = uintptr(r0) - if uintptr(r0) == ^uintptr(0) && er != nil { - err = er - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go deleted file mode 100644 index a89b0bf..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go +++ /dev/null @@ -1,1443 +0,0 @@ -// go run mksyscall_aix_ppc64.go -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build aix && ppc64 -// +build aix,ppc64 - -package unix - -import ( - "unsafe" -) - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, e1 := callutimes(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, e1 := callutimensat(dirfd, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), flag) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getcwd(buf []byte) (err error) { - var _p0 *byte - if len(buf) > 0 { - _p0 = &buf[0] - } - _, e1 := callgetcwd(uintptr(unsafe.Pointer(_p0)), len(buf)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, e1 := callaccept(s, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getdirent(fd int, buf []byte) (n int, err error) { - var _p0 *byte - if len(buf) > 0 { - _p0 = &buf[0] - } - r0, e1 := callgetdirent(fd, uintptr(unsafe.Pointer(_p0)), len(buf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error) { - r0, e1 := callwait4(int(pid), uintptr(unsafe.Pointer(status)), options, uintptr(unsafe.Pointer(rusage))) - wpid = Pid_t(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, e1 := callioctl(fd, int(req), arg) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func FcntlInt(fd uintptr, cmd int, arg int) (r int, err error) { - r0, e1 := callfcntl(fd, cmd, uintptr(arg)) - r = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) { - _, e1 := callfcntl(fd, cmd, uintptr(unsafe.Pointer(lk))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fcntl(fd int, cmd int, arg int) (val int, err error) { - r0, e1 := callfcntl(uintptr(fd), cmd, uintptr(arg)) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fsyncRange(fd int, how int, start int64, length int64) (err error) { - _, e1 := callfsync_range(fd, how, start, length) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Acct(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, e1 := callacct(uintptr(unsafe.Pointer(_p0))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, e1 := callchdir(uintptr(unsafe.Pointer(_p0))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, e1 := callchroot(uintptr(unsafe.Pointer(_p0))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - _, e1 := callclose(fd) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(oldfd int) (fd int, err error) { - r0, e1 := calldup(oldfd) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - callexit(code) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, e1 := callfaccessat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, flags) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - _, e1 := callfchdir(fd) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - _, e1 := callfchmod(fd, mode) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, e1 := callfchmodat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, flags) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, e1 := callfchownat(dirfd, uintptr(unsafe.Pointer(_p0)), uid, gid, flags) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fdatasync(fd int) (err error) { - _, e1 := callfdatasync(fd) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, e1 := callgetpgid(pid) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgrp() (pid int) { - r0, _ := callgetpgrp() - pid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _ := callgetpid() - pid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (ppid int) { - r0, _ := callgetppid() - ppid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (prio int, err error) { - r0, e1 := callgetpriority(which, who) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrusage(who int, rusage *Rusage) (err error) { - _, e1 := callgetrusage(who, uintptr(unsafe.Pointer(rusage))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, e1 := callgetsid(pid) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kill(pid int, sig Signal) (err error) { - _, e1 := callkill(pid, int(sig)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Klogctl(typ int, buf []byte) (n int, err error) { - var _p0 *byte - if len(buf) > 0 { - _p0 = &buf[0] - } - r0, e1 := callsyslog(typ, uintptr(unsafe.Pointer(_p0)), len(buf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdir(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, e1 := callmkdir(dirfd, uintptr(unsafe.Pointer(_p0)), mode) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdirat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, e1 := callmkdirat(dirfd, uintptr(unsafe.Pointer(_p0)), mode) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifo(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, e1 := callmkfifo(uintptr(unsafe.Pointer(_p0)), mode) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknod(path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, e1 := callmknod(uintptr(unsafe.Pointer(_p0)), mode, dev) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, e1 := callmknodat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, dev) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, e1 := callnanosleep(uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Open(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, e1 := callopen64(uintptr(unsafe.Pointer(_p0)), mode, perm) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, e1 := callopenat(dirfd, uintptr(unsafe.Pointer(_p0)), flags, mode) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 *byte - if len(p) > 0 { - _p0 = &p[0] - } - r0, e1 := callread(fd, uintptr(unsafe.Pointer(_p0)), len(p)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlink(path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - if len(buf) > 0 { - _p1 = &buf[0] - } - r0, e1 := callreadlink(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), len(buf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, e1 := callrenameat(olddirfd, uintptr(unsafe.Pointer(_p0)), newdirfd, uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setdomainname(p []byte) (err error) { - var _p0 *byte - if len(p) > 0 { - _p0 = &p[0] - } - _, e1 := callsetdomainname(uintptr(unsafe.Pointer(_p0)), len(p)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sethostname(p []byte) (err error) { - var _p0 *byte - if len(p) > 0 { - _p0 = &p[0] - } - _, e1 := callsethostname(uintptr(unsafe.Pointer(_p0)), len(p)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - _, e1 := callsetpgid(pid, pgid) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, e1 := callsetsid() - pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Settimeofday(tv *Timeval) (err error) { - _, e1 := callsettimeofday(uintptr(unsafe.Pointer(tv))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setuid(uid int) (err error) { - _, e1 := callsetuid(uid) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setgid(uid int) (err error) { - _, e1 := callsetgid(uid) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - _, e1 := callsetpriority(which, who, prio) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, e1 := callstatx(dirfd, uintptr(unsafe.Pointer(_p0)), flags, mask, uintptr(unsafe.Pointer(stat))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() { - callsync() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Times(tms *Tms) (ticks uintptr, err error) { - r0, e1 := calltimes(uintptr(unsafe.Pointer(tms))) - ticks = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(mask int) (oldmask int) { - r0, _ := callumask(mask) - oldmask = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Uname(buf *Utsname) (err error) { - _, e1 := calluname(uintptr(unsafe.Pointer(buf))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlink(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, e1 := callunlink(uintptr(unsafe.Pointer(_p0))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlinkat(dirfd int, path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, e1 := callunlinkat(dirfd, uintptr(unsafe.Pointer(_p0)), flags) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ustat(dev int, ubuf *Ustat_t) (err error) { - _, e1 := callustat(dev, uintptr(unsafe.Pointer(ubuf))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 *byte - if len(p) > 0 { - _p0 = &p[0] - } - r0, e1 := callwrite(fd, uintptr(unsafe.Pointer(_p0)), len(p)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readlen(fd int, p *byte, np int) (n int, err error) { - r0, e1 := callread(fd, uintptr(unsafe.Pointer(p)), np) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writelen(fd int, p *byte, np int) (n int, err error) { - r0, e1 := callwrite(fd, uintptr(unsafe.Pointer(p)), np) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup2(oldfd int, newfd int) (err error) { - _, e1 := calldup2(oldfd, newfd) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, e1 := callposix_fadvise64(fd, offset, length, advice) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, e1 := callfchown(fd, uid, gid) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fstat(fd int, stat *Stat_t) (err error) { - _, e1 := callfstat(fd, uintptr(unsafe.Pointer(stat))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, e1 := callfstatat(dirfd, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), flags) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, buf *Statfs_t) (err error) { - _, e1 := callfstatfs(fd, uintptr(unsafe.Pointer(buf))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, e1 := callftruncate(fd, length) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _ := callgetegid() - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (euid int) { - r0, _ := callgeteuid() - euid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _ := callgetgid() - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _ := callgetuid() - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, e1 := calllchown(uintptr(unsafe.Pointer(_p0)), uid, gid) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, n int) (err error) { - _, e1 := calllisten(s, n) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, e1 := calllstat(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pause() (err error) { - _, e1 := callpause() - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 *byte - if len(p) > 0 { - _p0 = &p[0] - } - r0, e1 := callpread64(fd, uintptr(unsafe.Pointer(_p0)), len(p), offset) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 *byte - if len(p) > 0 { - _p0 = &p[0] - } - r0, e1 := callpwrite64(fd, uintptr(unsafe.Pointer(_p0)), len(p), offset) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, e1 := callselect(nfd, uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { - r0, e1 := callpselect(nfd, uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setregid(rgid int, egid int) (err error) { - _, e1 := callsetregid(rgid, egid) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, e1 := callsetreuid(ruid, euid) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(fd int, how int) (err error) { - _, e1 := callshutdown(fd, how) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { - r0, e1 := callsplice(rfd, uintptr(unsafe.Pointer(roff)), wfd, uintptr(unsafe.Pointer(woff)), len, flags) - n = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func stat(path string, statptr *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, e1 := callstat(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(statptr))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, buf *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, e1 := callstatfs(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, e1 := calltruncate(uintptr(unsafe.Pointer(_p0)), length) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, e1 := callbind(s, uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, e1 := callconnect(s, uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(n int, list *_Gid_t) (nn int, err error) { - r0, e1 := callgetgroups(n, uintptr(unsafe.Pointer(list))) - nn = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(n int, list *_Gid_t) (err error) { - _, e1 := callsetgroups(n, uintptr(unsafe.Pointer(list))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, e1 := callgetsockopt(s, level, name, uintptr(val), uintptr(unsafe.Pointer(vallen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, e1 := callsetsockopt(s, level, name, uintptr(val), vallen) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, e1 := callsocket(domain, typ, proto) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, e1 := callsocketpair(domain, typ, proto, uintptr(unsafe.Pointer(fd))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, e1 := callgetpeername(fd, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, e1 := callgetsockname(fd, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 *byte - if len(p) > 0 { - _p0 = &p[0] - } - r0, e1 := callrecvfrom(fd, uintptr(unsafe.Pointer(_p0)), len(p), flags, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 *byte - if len(buf) > 0 { - _p0 = &buf[0] - } - _, e1 := callsendto(s, uintptr(unsafe.Pointer(_p0)), len(buf), flags, uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, e1 := callnrecvmsg(s, uintptr(unsafe.Pointer(msg)), flags) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, e1 := callnsendmsg(s, uintptr(unsafe.Pointer(msg)), flags) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - _, e1 := callmunmap(addr, length) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Madvise(b []byte, advice int) (err error) { - var _p0 *byte - if len(b) > 0 { - _p0 = &b[0] - } - _, e1 := callmadvise(uintptr(unsafe.Pointer(_p0)), len(b), advice) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 *byte - if len(b) > 0 { - _p0 = &b[0] - } - _, e1 := callmprotect(uintptr(unsafe.Pointer(_p0)), len(b), prot) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 *byte - if len(b) > 0 { - _p0 = &b[0] - } - _, e1 := callmlock(uintptr(unsafe.Pointer(_p0)), len(b)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, e1 := callmlockall(flags) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 *byte - if len(b) > 0 { - _p0 = &b[0] - } - _, e1 := callmsync(uintptr(unsafe.Pointer(_p0)), len(b), flags) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 *byte - if len(b) > 0 { - _p0 = &b[0] - } - _, e1 := callmunlock(uintptr(unsafe.Pointer(_p0)), len(b)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, e1 := callmunlockall() - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe(p *[2]_C_int) (err error) { - _, e1 := callpipe(uintptr(unsafe.Pointer(p))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, e1 := callpoll(uintptr(unsafe.Pointer(fds)), nfds, timeout) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func gettimeofday(tv *Timeval, tzp *Timezone) (err error) { - _, e1 := callgettimeofday(uintptr(unsafe.Pointer(tv)), uintptr(unsafe.Pointer(tzp))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Time(t *Time_t) (tt Time_t, err error) { - r0, e1 := calltime(uintptr(unsafe.Pointer(t))) - tt = Time_t(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Utime(path string, buf *Utimbuf) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, e1 := callutime(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsystemcfg(label int) (n uint64) { - r0, _ := callgetsystemcfg(label) - n = uint64(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func umount(target string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(target) - if err != nil { - return - } - _, e1 := callumount(uintptr(unsafe.Pointer(_p0))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(resource int, rlim *Rlimit) (err error) { - _, e1 := callgetrlimit(resource, uintptr(unsafe.Pointer(rlim))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, e1 := callsetrlimit(resource, uintptr(unsafe.Pointer(rlim))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (off int64, err error) { - r0, e1 := calllseek(fd, offset, whence) - off = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { - r0, e1 := callmmap64(addr, length, prot, flags, fd, offset) - xaddr = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go deleted file mode 100644 index 2caa5ad..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go +++ /dev/null @@ -1,1192 +0,0 @@ -// go run mksyscall_aix_ppc64.go -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build aix && ppc64 && gc -// +build aix,ppc64,gc - -package unix - -import ( - "unsafe" -) - -//go:cgo_import_dynamic libc_utimes utimes "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_utimensat utimensat "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_getcwd getcwd "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_accept accept "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_getdirent getdirent "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_wait4 wait4 "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_ioctl ioctl "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_fcntl fcntl "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_fsync_range fsync_range "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_acct acct "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_chdir chdir "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_chroot chroot "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_close close "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_dup dup "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_exit exit "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_faccessat faccessat "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_fchdir fchdir "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_fchmod fchmod "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_fchownat fchownat "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_fdatasync fdatasync "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_getpgid getpgid "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_getpid getpid "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_getppid getppid "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_getpriority getpriority "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_getrusage getrusage "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_getsid getsid "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_kill kill "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_syslog syslog "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_mkdir mkdir "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_mknod mknod "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_mknodat mknodat "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_open64 open64 "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_openat openat "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_read read "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_readlink readlink "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_renameat renameat "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_setdomainname setdomainname "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_sethostname sethostname "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_setpgid setpgid "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_setsid setsid "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_settimeofday settimeofday "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_setuid setuid "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_setgid setgid "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_setpriority setpriority "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_statx statx "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_sync sync "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_times times "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_umask umask "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_uname uname "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_unlink unlink "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_ustat ustat "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_write write "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_dup2 dup2 "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_posix_fadvise64 posix_fadvise64 "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_fchown fchown "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_fstat fstat "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_fstatat fstatat "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_fstatfs fstatfs "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_getegid getegid "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_geteuid geteuid "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_getgid getgid "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_getuid getuid "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_lchown lchown "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_listen listen "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_lstat lstat "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_pause pause "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_pread64 pread64 "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_pwrite64 pwrite64 "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_select select "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_pselect pselect "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_setregid setregid "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_setreuid setreuid "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_shutdown shutdown "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_splice splice "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_stat stat "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_statfs statfs "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_truncate truncate "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_bind bind "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_connect connect "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_getgroups getgroups "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_setgroups setgroups "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_getsockopt getsockopt "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_setsockopt setsockopt "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_socket socket "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_socketpair socketpair "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_getpeername getpeername "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_getsockname getsockname "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_recvfrom recvfrom "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_sendto sendto "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_nrecvmsg nrecvmsg "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_nsendmsg nsendmsg "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_munmap munmap "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_madvise madvise "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_mprotect mprotect "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_mlock mlock "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_mlockall mlockall "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_msync msync "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_munlock munlock "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_munlockall munlockall "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_pipe pipe "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_poll poll "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_time time "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_utime utime "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_getsystemcfg getsystemcfg "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_umount umount "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_lseek lseek "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_mmap64 mmap64 "libc.a/shr_64.o" - -//go:linkname libc_utimes libc_utimes -//go:linkname libc_utimensat libc_utimensat -//go:linkname libc_getcwd libc_getcwd -//go:linkname libc_accept libc_accept -//go:linkname libc_getdirent libc_getdirent -//go:linkname libc_wait4 libc_wait4 -//go:linkname libc_ioctl libc_ioctl -//go:linkname libc_fcntl libc_fcntl -//go:linkname libc_fsync_range libc_fsync_range -//go:linkname libc_acct libc_acct -//go:linkname libc_chdir libc_chdir -//go:linkname libc_chroot libc_chroot -//go:linkname libc_close libc_close -//go:linkname libc_dup libc_dup -//go:linkname libc_exit libc_exit -//go:linkname libc_faccessat libc_faccessat -//go:linkname libc_fchdir libc_fchdir -//go:linkname libc_fchmod libc_fchmod -//go:linkname libc_fchmodat libc_fchmodat -//go:linkname libc_fchownat libc_fchownat -//go:linkname libc_fdatasync libc_fdatasync -//go:linkname libc_getpgid libc_getpgid -//go:linkname libc_getpgrp libc_getpgrp -//go:linkname libc_getpid libc_getpid -//go:linkname libc_getppid libc_getppid -//go:linkname libc_getpriority libc_getpriority -//go:linkname libc_getrusage libc_getrusage -//go:linkname libc_getsid libc_getsid -//go:linkname libc_kill libc_kill -//go:linkname libc_syslog libc_syslog -//go:linkname libc_mkdir libc_mkdir -//go:linkname libc_mkdirat libc_mkdirat -//go:linkname libc_mkfifo libc_mkfifo -//go:linkname libc_mknod libc_mknod -//go:linkname libc_mknodat libc_mknodat -//go:linkname libc_nanosleep libc_nanosleep -//go:linkname libc_open64 libc_open64 -//go:linkname libc_openat libc_openat -//go:linkname libc_read libc_read -//go:linkname libc_readlink libc_readlink -//go:linkname libc_renameat libc_renameat -//go:linkname libc_setdomainname libc_setdomainname -//go:linkname libc_sethostname libc_sethostname -//go:linkname libc_setpgid libc_setpgid -//go:linkname libc_setsid libc_setsid -//go:linkname libc_settimeofday libc_settimeofday -//go:linkname libc_setuid libc_setuid -//go:linkname libc_setgid libc_setgid -//go:linkname libc_setpriority libc_setpriority -//go:linkname libc_statx libc_statx -//go:linkname libc_sync libc_sync -//go:linkname libc_times libc_times -//go:linkname libc_umask libc_umask -//go:linkname libc_uname libc_uname -//go:linkname libc_unlink libc_unlink -//go:linkname libc_unlinkat libc_unlinkat -//go:linkname libc_ustat libc_ustat -//go:linkname libc_write libc_write -//go:linkname libc_dup2 libc_dup2 -//go:linkname libc_posix_fadvise64 libc_posix_fadvise64 -//go:linkname libc_fchown libc_fchown -//go:linkname libc_fstat libc_fstat -//go:linkname libc_fstatat libc_fstatat -//go:linkname libc_fstatfs libc_fstatfs -//go:linkname libc_ftruncate libc_ftruncate -//go:linkname libc_getegid libc_getegid -//go:linkname libc_geteuid libc_geteuid -//go:linkname libc_getgid libc_getgid -//go:linkname libc_getuid libc_getuid -//go:linkname libc_lchown libc_lchown -//go:linkname libc_listen libc_listen -//go:linkname libc_lstat libc_lstat -//go:linkname libc_pause libc_pause -//go:linkname libc_pread64 libc_pread64 -//go:linkname libc_pwrite64 libc_pwrite64 -//go:linkname libc_select libc_select -//go:linkname libc_pselect libc_pselect -//go:linkname libc_setregid libc_setregid -//go:linkname libc_setreuid libc_setreuid -//go:linkname libc_shutdown libc_shutdown -//go:linkname libc_splice libc_splice -//go:linkname libc_stat libc_stat -//go:linkname libc_statfs libc_statfs -//go:linkname libc_truncate libc_truncate -//go:linkname libc_bind libc_bind -//go:linkname libc_connect libc_connect -//go:linkname libc_getgroups libc_getgroups -//go:linkname libc_setgroups libc_setgroups -//go:linkname libc_getsockopt libc_getsockopt -//go:linkname libc_setsockopt libc_setsockopt -//go:linkname libc_socket libc_socket -//go:linkname libc_socketpair libc_socketpair -//go:linkname libc_getpeername libc_getpeername -//go:linkname libc_getsockname libc_getsockname -//go:linkname libc_recvfrom libc_recvfrom -//go:linkname libc_sendto libc_sendto -//go:linkname libc_nrecvmsg libc_nrecvmsg -//go:linkname libc_nsendmsg libc_nsendmsg -//go:linkname libc_munmap libc_munmap -//go:linkname libc_madvise libc_madvise -//go:linkname libc_mprotect libc_mprotect -//go:linkname libc_mlock libc_mlock -//go:linkname libc_mlockall libc_mlockall -//go:linkname libc_msync libc_msync -//go:linkname libc_munlock libc_munlock -//go:linkname libc_munlockall libc_munlockall -//go:linkname libc_pipe libc_pipe -//go:linkname libc_poll libc_poll -//go:linkname libc_gettimeofday libc_gettimeofday -//go:linkname libc_time libc_time -//go:linkname libc_utime libc_utime -//go:linkname libc_getsystemcfg libc_getsystemcfg -//go:linkname libc_umount libc_umount -//go:linkname libc_getrlimit libc_getrlimit -//go:linkname libc_setrlimit libc_setrlimit -//go:linkname libc_lseek libc_lseek -//go:linkname libc_mmap64 libc_mmap64 - -type syscallFunc uintptr - -var ( - libc_utimes, - libc_utimensat, - libc_getcwd, - libc_accept, - libc_getdirent, - libc_wait4, - libc_ioctl, - libc_fcntl, - libc_fsync_range, - libc_acct, - libc_chdir, - libc_chroot, - libc_close, - libc_dup, - libc_exit, - libc_faccessat, - libc_fchdir, - libc_fchmod, - libc_fchmodat, - libc_fchownat, - libc_fdatasync, - libc_getpgid, - libc_getpgrp, - libc_getpid, - libc_getppid, - libc_getpriority, - libc_getrusage, - libc_getsid, - libc_kill, - libc_syslog, - libc_mkdir, - libc_mkdirat, - libc_mkfifo, - libc_mknod, - libc_mknodat, - libc_nanosleep, - libc_open64, - libc_openat, - libc_read, - libc_readlink, - libc_renameat, - libc_setdomainname, - libc_sethostname, - libc_setpgid, - libc_setsid, - libc_settimeofday, - libc_setuid, - libc_setgid, - libc_setpriority, - libc_statx, - libc_sync, - libc_times, - libc_umask, - libc_uname, - libc_unlink, - libc_unlinkat, - libc_ustat, - libc_write, - libc_dup2, - libc_posix_fadvise64, - libc_fchown, - libc_fstat, - libc_fstatat, - libc_fstatfs, - libc_ftruncate, - libc_getegid, - libc_geteuid, - libc_getgid, - libc_getuid, - libc_lchown, - libc_listen, - libc_lstat, - libc_pause, - libc_pread64, - libc_pwrite64, - libc_select, - libc_pselect, - libc_setregid, - libc_setreuid, - libc_shutdown, - libc_splice, - libc_stat, - libc_statfs, - libc_truncate, - libc_bind, - libc_connect, - libc_getgroups, - libc_setgroups, - libc_getsockopt, - libc_setsockopt, - libc_socket, - libc_socketpair, - libc_getpeername, - libc_getsockname, - libc_recvfrom, - libc_sendto, - libc_nrecvmsg, - libc_nsendmsg, - libc_munmap, - libc_madvise, - libc_mprotect, - libc_mlock, - libc_mlockall, - libc_msync, - libc_munlock, - libc_munlockall, - libc_pipe, - libc_poll, - libc_gettimeofday, - libc_time, - libc_utime, - libc_getsystemcfg, - libc_umount, - libc_getrlimit, - libc_setrlimit, - libc_lseek, - libc_mmap64 syscallFunc -) - -// Implemented in runtime/syscall_aix.go. -func rawSyscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) -func syscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callutimes(_p0 uintptr, times uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utimes)), 2, _p0, times, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callutimensat(dirfd int, _p0 uintptr, times uintptr, flag int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utimensat)), 4, uintptr(dirfd), _p0, times, uintptr(flag), 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetcwd(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getcwd)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callaccept(s int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_accept)), 3, uintptr(s), rsa, addrlen, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetdirent(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getdirent)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callwait4(pid int, status uintptr, options int, rusage uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_wait4)), 4, uintptr(pid), status, uintptr(options), rusage, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callioctl(fd int, req int, arg uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ioctl)), 3, uintptr(fd), uintptr(req), arg, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fcntl)), 3, fd, uintptr(cmd), arg, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfsync_range(fd int, how int, start int64, length int64) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fsync_range)), 4, uintptr(fd), uintptr(how), uintptr(start), uintptr(length), 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callacct(_p0 uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_acct)), 1, _p0, 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callchdir(_p0 uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_chdir)), 1, _p0, 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callchroot(_p0 uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_chroot)), 1, _p0, 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callclose(fd int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_close)), 1, uintptr(fd), 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func calldup(oldfd int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_dup)), 1, uintptr(oldfd), 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callexit(code int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_exit)), 1, uintptr(code), 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfaccessat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_faccessat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(flags), 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfchdir(fd int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchdir)), 1, uintptr(fd), 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfchmod(fd int, mode uint32) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchmod)), 2, uintptr(fd), uintptr(mode), 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfchmodat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchmodat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(flags), 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfchownat(dirfd int, _p0 uintptr, uid int, gid int, flags int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchownat)), 5, uintptr(dirfd), _p0, uintptr(uid), uintptr(gid), uintptr(flags), 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfdatasync(fd int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetpgid(pid int) (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetpgrp() (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getpgrp)), 0, 0, 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetpid() (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpid)), 0, 0, 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetppid() (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getppid)), 0, 0, 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetpriority(which int, who int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getpriority)), 2, uintptr(which), uintptr(who), 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetrusage(who int, rusage uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getrusage)), 2, uintptr(who), rusage, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetsid(pid int) (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getsid)), 1, uintptr(pid), 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callkill(pid int, sig int) (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_kill)), 2, uintptr(pid), uintptr(sig), 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsyslog(typ int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_syslog)), 3, uintptr(typ), _p0, uintptr(_lenp0), 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmkdir(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkdir)), 3, uintptr(dirfd), _p0, uintptr(mode), 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmkdirat(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkdirat)), 3, uintptr(dirfd), _p0, uintptr(mode), 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmkfifo(_p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkfifo)), 2, _p0, uintptr(mode), 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmknod(_p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mknod)), 3, _p0, uintptr(mode), uintptr(dev), 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmknodat(dirfd int, _p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mknodat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(dev), 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callnanosleep(time uintptr, leftover uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nanosleep)), 2, time, leftover, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callopen64(_p0 uintptr, mode int, perm uint32) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_open64)), 3, _p0, uintptr(mode), uintptr(perm), 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callopenat(dirfd int, _p0 uintptr, flags int, mode uint32) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_openat)), 4, uintptr(dirfd), _p0, uintptr(flags), uintptr(mode), 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callread(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_read)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callreadlink(_p0 uintptr, _p1 uintptr, _lenp1 int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_readlink)), 3, _p0, _p1, uintptr(_lenp1), 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callrenameat(olddirfd int, _p0 uintptr, newdirfd int, _p1 uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_renameat)), 4, uintptr(olddirfd), _p0, uintptr(newdirfd), _p1, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsetdomainname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setdomainname)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsethostname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sethostname)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsetpgid(pid int, pgid int) (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsetsid() (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setsid)), 0, 0, 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsettimeofday(tv uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_settimeofday)), 1, tv, 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsetuid(uid int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setuid)), 1, uintptr(uid), 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsetgid(uid int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setgid)), 1, uintptr(uid), 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsetpriority(which int, who int, prio int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setpriority)), 3, uintptr(which), uintptr(who), uintptr(prio), 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callstatx(dirfd int, _p0 uintptr, flags int, mask int, stat uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_statx)), 5, uintptr(dirfd), _p0, uintptr(flags), uintptr(mask), stat, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsync() (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sync)), 0, 0, 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func calltimes(tms uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_times)), 1, tms, 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callumask(mask int) (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_umask)), 1, uintptr(mask), 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func calluname(buf uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_uname)), 1, buf, 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callunlink(_p0 uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_unlink)), 1, _p0, 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callunlinkat(dirfd int, _p0 uintptr, flags int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_unlinkat)), 3, uintptr(dirfd), _p0, uintptr(flags), 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callustat(dev int, ubuf uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ustat)), 2, uintptr(dev), ubuf, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callwrite(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_write)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func calldup2(oldfd int, newfd int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_dup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callposix_fadvise64(fd int, offset int64, length int64, advice int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_posix_fadvise64)), 4, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfchown(fd int, uid int, gid int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfstat(fd int, stat uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstat)), 2, uintptr(fd), stat, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfstatat(dirfd int, _p0 uintptr, stat uintptr, flags int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstatat)), 4, uintptr(dirfd), _p0, stat, uintptr(flags), 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfstatfs(fd int, buf uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstatfs)), 2, uintptr(fd), buf, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callftruncate(fd int, length int64) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ftruncate)), 2, uintptr(fd), uintptr(length), 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetegid() (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getegid)), 0, 0, 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgeteuid() (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_geteuid)), 0, 0, 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetgid() (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getgid)), 0, 0, 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetuid() (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getuid)), 0, 0, 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func calllchown(_p0 uintptr, uid int, gid int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lchown)), 3, _p0, uintptr(uid), uintptr(gid), 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func calllisten(s int, n int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_listen)), 2, uintptr(s), uintptr(n), 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func calllstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lstat)), 2, _p0, stat, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callpause() (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pause)), 0, 0, 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callpread64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pread64)), 4, uintptr(fd), _p0, uintptr(_lenp0), uintptr(offset), 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callpwrite64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pwrite64)), 4, uintptr(fd), _p0, uintptr(_lenp0), uintptr(offset), 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_select)), 5, uintptr(nfd), r, w, e, timeout, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callpselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr, sigmask uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pselect)), 6, uintptr(nfd), r, w, e, timeout, sigmask) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsetregid(rgid int, egid int) (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setregid)), 2, uintptr(rgid), uintptr(egid), 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsetreuid(ruid int, euid int) (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setreuid)), 2, uintptr(ruid), uintptr(euid), 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callshutdown(fd int, how int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_shutdown)), 2, uintptr(fd), uintptr(how), 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsplice(rfd int, roff uintptr, wfd int, woff uintptr, len int, flags int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_splice)), 6, uintptr(rfd), roff, uintptr(wfd), woff, uintptr(len), uintptr(flags)) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callstat(_p0 uintptr, statptr uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_stat)), 2, _p0, statptr, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callstatfs(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_statfs)), 2, _p0, buf, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func calltruncate(_p0 uintptr, length int64) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_truncate)), 2, _p0, uintptr(length), 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callbind(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_bind)), 3, uintptr(s), addr, addrlen, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callconnect(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_connect)), 3, uintptr(s), addr, addrlen, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getgroups)), 2, uintptr(n), list, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setgroups)), 2, uintptr(n), list, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), val, vallen, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), val, vallen, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsocket(domain int, typ int, proto int) (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_socket)), 3, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsocketpair(domain int, typ int, proto int, fd uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_socketpair)), 4, uintptr(domain), uintptr(typ), uintptr(proto), fd, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetpeername(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpeername)), 3, uintptr(fd), rsa, addrlen, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetsockname(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getsockname)), 3, uintptr(fd), rsa, addrlen, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callrecvfrom(fd int, _p0 uintptr, _lenp0 int, flags int, from uintptr, fromlen uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_recvfrom)), 6, uintptr(fd), _p0, uintptr(_lenp0), uintptr(flags), from, fromlen) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsendto(s int, _p0 uintptr, _lenp0 int, flags int, to uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sendto)), 6, uintptr(s), _p0, uintptr(_lenp0), uintptr(flags), to, addrlen) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callnrecvmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nrecvmsg)), 3, uintptr(s), msg, uintptr(flags), 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callnsendmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nsendmsg)), 3, uintptr(s), msg, uintptr(flags), 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmunmap(addr uintptr, length uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munmap)), 2, addr, length, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmadvise(_p0 uintptr, _lenp0 int, advice int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_madvise)), 3, _p0, uintptr(_lenp0), uintptr(advice), 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmprotect(_p0 uintptr, _lenp0 int, prot int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mprotect)), 3, _p0, uintptr(_lenp0), uintptr(prot), 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mlock)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmlockall(flags int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmsync(_p0 uintptr, _lenp0 int, flags int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_msync)), 3, _p0, uintptr(_lenp0), uintptr(flags), 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmunlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munlock)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmunlockall() (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munlockall)), 0, 0, 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callpipe(p uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_pipe)), 1, p, 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callpoll(fds uintptr, nfds int, timeout int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_poll)), 3, fds, uintptr(nfds), uintptr(timeout), 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgettimeofday(tv uintptr, tzp uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_gettimeofday)), 2, tv, tzp, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func calltime(t uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_time)), 1, t, 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callutime(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utime)), 2, _p0, buf, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetsystemcfg(label int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getsystemcfg)), 1, uintptr(label), 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callumount(_p0 uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_umount)), 1, _p0, 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getrlimit)), 2, uintptr(resource), rlim, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setrlimit)), 2, uintptr(resource), rlim, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmmap64(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mmap64)), 6, addr, length, uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go deleted file mode 100644 index 944a714..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go +++ /dev/null @@ -1,1070 +0,0 @@ -// go run mksyscall_aix_ppc64.go -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build aix && ppc64 && gccgo -// +build aix,ppc64,gccgo - -package unix - -/* -#include -int utimes(uintptr_t, uintptr_t); -int utimensat(int, uintptr_t, uintptr_t, int); -int getcwd(uintptr_t, size_t); -int accept(int, uintptr_t, uintptr_t); -int getdirent(int, uintptr_t, size_t); -int wait4(int, uintptr_t, int, uintptr_t); -int ioctl(int, int, uintptr_t); -int fcntl(uintptr_t, int, uintptr_t); -int fsync_range(int, int, long long, long long); -int acct(uintptr_t); -int chdir(uintptr_t); -int chroot(uintptr_t); -int close(int); -int dup(int); -void exit(int); -int faccessat(int, uintptr_t, unsigned int, int); -int fchdir(int); -int fchmod(int, unsigned int); -int fchmodat(int, uintptr_t, unsigned int, int); -int fchownat(int, uintptr_t, int, int, int); -int fdatasync(int); -int getpgid(int); -int getpgrp(); -int getpid(); -int getppid(); -int getpriority(int, int); -int getrusage(int, uintptr_t); -int getsid(int); -int kill(int, int); -int syslog(int, uintptr_t, size_t); -int mkdir(int, uintptr_t, unsigned int); -int mkdirat(int, uintptr_t, unsigned int); -int mkfifo(uintptr_t, unsigned int); -int mknod(uintptr_t, unsigned int, int); -int mknodat(int, uintptr_t, unsigned int, int); -int nanosleep(uintptr_t, uintptr_t); -int open64(uintptr_t, int, unsigned int); -int openat(int, uintptr_t, int, unsigned int); -int read(int, uintptr_t, size_t); -int readlink(uintptr_t, uintptr_t, size_t); -int renameat(int, uintptr_t, int, uintptr_t); -int setdomainname(uintptr_t, size_t); -int sethostname(uintptr_t, size_t); -int setpgid(int, int); -int setsid(); -int settimeofday(uintptr_t); -int setuid(int); -int setgid(int); -int setpriority(int, int, int); -int statx(int, uintptr_t, int, int, uintptr_t); -int sync(); -uintptr_t times(uintptr_t); -int umask(int); -int uname(uintptr_t); -int unlink(uintptr_t); -int unlinkat(int, uintptr_t, int); -int ustat(int, uintptr_t); -int write(int, uintptr_t, size_t); -int dup2(int, int); -int posix_fadvise64(int, long long, long long, int); -int fchown(int, int, int); -int fstat(int, uintptr_t); -int fstatat(int, uintptr_t, uintptr_t, int); -int fstatfs(int, uintptr_t); -int ftruncate(int, long long); -int getegid(); -int geteuid(); -int getgid(); -int getuid(); -int lchown(uintptr_t, int, int); -int listen(int, int); -int lstat(uintptr_t, uintptr_t); -int pause(); -int pread64(int, uintptr_t, size_t, long long); -int pwrite64(int, uintptr_t, size_t, long long); -#define c_select select -int select(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t); -int pselect(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t); -int setregid(int, int); -int setreuid(int, int); -int shutdown(int, int); -long long splice(int, uintptr_t, int, uintptr_t, int, int); -int stat(uintptr_t, uintptr_t); -int statfs(uintptr_t, uintptr_t); -int truncate(uintptr_t, long long); -int bind(int, uintptr_t, uintptr_t); -int connect(int, uintptr_t, uintptr_t); -int getgroups(int, uintptr_t); -int setgroups(int, uintptr_t); -int getsockopt(int, int, int, uintptr_t, uintptr_t); -int setsockopt(int, int, int, uintptr_t, uintptr_t); -int socket(int, int, int); -int socketpair(int, int, int, uintptr_t); -int getpeername(int, uintptr_t, uintptr_t); -int getsockname(int, uintptr_t, uintptr_t); -int recvfrom(int, uintptr_t, size_t, int, uintptr_t, uintptr_t); -int sendto(int, uintptr_t, size_t, int, uintptr_t, uintptr_t); -int nrecvmsg(int, uintptr_t, int); -int nsendmsg(int, uintptr_t, int); -int munmap(uintptr_t, uintptr_t); -int madvise(uintptr_t, size_t, int); -int mprotect(uintptr_t, size_t, int); -int mlock(uintptr_t, size_t); -int mlockall(int); -int msync(uintptr_t, size_t, int); -int munlock(uintptr_t, size_t); -int munlockall(); -int pipe(uintptr_t); -int poll(uintptr_t, int, int); -int gettimeofday(uintptr_t, uintptr_t); -int time(uintptr_t); -int utime(uintptr_t, uintptr_t); -unsigned long long getsystemcfg(int); -int umount(uintptr_t); -int getrlimit(int, uintptr_t); -int setrlimit(int, uintptr_t); -long long lseek(int, long long, int); -uintptr_t mmap64(uintptr_t, uintptr_t, int, int, int, long long); - -*/ -import "C" -import ( - "syscall" -) - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callutimes(_p0 uintptr, times uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.utimes(C.uintptr_t(_p0), C.uintptr_t(times))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callutimensat(dirfd int, _p0 uintptr, times uintptr, flag int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.utimensat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(times), C.int(flag))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetcwd(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.getcwd(C.uintptr_t(_p0), C.size_t(_lenp0))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callaccept(s int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.accept(C.int(s), C.uintptr_t(rsa), C.uintptr_t(addrlen))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetdirent(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.getdirent(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callwait4(pid int, status uintptr, options int, rusage uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.wait4(C.int(pid), C.uintptr_t(status), C.int(options), C.uintptr_t(rusage))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callioctl(fd int, req int, arg uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.ioctl(C.int(fd), C.int(req), C.uintptr_t(arg))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfsync_range(fd int, how int, start int64, length int64) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.fsync_range(C.int(fd), C.int(how), C.longlong(start), C.longlong(length))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callacct(_p0 uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.acct(C.uintptr_t(_p0))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callchdir(_p0 uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.chdir(C.uintptr_t(_p0))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callchroot(_p0 uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.chroot(C.uintptr_t(_p0))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callclose(fd int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.close(C.int(fd))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func calldup(oldfd int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.dup(C.int(oldfd))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callexit(code int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.exit(C.int(code))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfaccessat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.faccessat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfchdir(fd int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.fchdir(C.int(fd))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfchmod(fd int, mode uint32) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.fchmod(C.int(fd), C.uint(mode))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfchmodat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.fchmodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfchownat(dirfd int, _p0 uintptr, uid int, gid int, flags int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.fchownat(C.int(dirfd), C.uintptr_t(_p0), C.int(uid), C.int(gid), C.int(flags))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfdatasync(fd int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.fdatasync(C.int(fd))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetpgid(pid int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.getpgid(C.int(pid))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetpgrp() (r1 uintptr, e1 Errno) { - r1 = uintptr(C.getpgrp()) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetpid() (r1 uintptr, e1 Errno) { - r1 = uintptr(C.getpid()) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetppid() (r1 uintptr, e1 Errno) { - r1 = uintptr(C.getppid()) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetpriority(which int, who int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.getpriority(C.int(which), C.int(who))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetrusage(who int, rusage uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.getrusage(C.int(who), C.uintptr_t(rusage))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetsid(pid int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.getsid(C.int(pid))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callkill(pid int, sig int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.kill(C.int(pid), C.int(sig))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsyslog(typ int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.syslog(C.int(typ), C.uintptr_t(_p0), C.size_t(_lenp0))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmkdir(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.mkdir(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmkdirat(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.mkdirat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmkfifo(_p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.mkfifo(C.uintptr_t(_p0), C.uint(mode))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmknod(_p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.mknod(C.uintptr_t(_p0), C.uint(mode), C.int(dev))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmknodat(dirfd int, _p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.mknodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(dev))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callnanosleep(time uintptr, leftover uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.nanosleep(C.uintptr_t(time), C.uintptr_t(leftover))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callopen64(_p0 uintptr, mode int, perm uint32) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.open64(C.uintptr_t(_p0), C.int(mode), C.uint(perm))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callopenat(dirfd int, _p0 uintptr, flags int, mode uint32) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.openat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.uint(mode))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callread(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.read(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callreadlink(_p0 uintptr, _p1 uintptr, _lenp1 int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.readlink(C.uintptr_t(_p0), C.uintptr_t(_p1), C.size_t(_lenp1))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callrenameat(olddirfd int, _p0 uintptr, newdirfd int, _p1 uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.renameat(C.int(olddirfd), C.uintptr_t(_p0), C.int(newdirfd), C.uintptr_t(_p1))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsetdomainname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.setdomainname(C.uintptr_t(_p0), C.size_t(_lenp0))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsethostname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.sethostname(C.uintptr_t(_p0), C.size_t(_lenp0))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsetpgid(pid int, pgid int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.setpgid(C.int(pid), C.int(pgid))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsetsid() (r1 uintptr, e1 Errno) { - r1 = uintptr(C.setsid()) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsettimeofday(tv uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.settimeofday(C.uintptr_t(tv))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsetuid(uid int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.setuid(C.int(uid))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsetgid(uid int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.setgid(C.int(uid))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsetpriority(which int, who int, prio int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.setpriority(C.int(which), C.int(who), C.int(prio))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callstatx(dirfd int, _p0 uintptr, flags int, mask int, stat uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.statx(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.int(mask), C.uintptr_t(stat))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsync() (r1 uintptr, e1 Errno) { - r1 = uintptr(C.sync()) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func calltimes(tms uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.times(C.uintptr_t(tms))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callumask(mask int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.umask(C.int(mask))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func calluname(buf uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.uname(C.uintptr_t(buf))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callunlink(_p0 uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.unlink(C.uintptr_t(_p0))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callunlinkat(dirfd int, _p0 uintptr, flags int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.unlinkat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callustat(dev int, ubuf uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.ustat(C.int(dev), C.uintptr_t(ubuf))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callwrite(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.write(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func calldup2(oldfd int, newfd int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.dup2(C.int(oldfd), C.int(newfd))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callposix_fadvise64(fd int, offset int64, length int64, advice int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.posix_fadvise64(C.int(fd), C.longlong(offset), C.longlong(length), C.int(advice))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfchown(fd int, uid int, gid int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.fchown(C.int(fd), C.int(uid), C.int(gid))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfstat(fd int, stat uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.fstat(C.int(fd), C.uintptr_t(stat))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfstatat(dirfd int, _p0 uintptr, stat uintptr, flags int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.fstatat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(stat), C.int(flags))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callfstatfs(fd int, buf uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.fstatfs(C.int(fd), C.uintptr_t(buf))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callftruncate(fd int, length int64) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.ftruncate(C.int(fd), C.longlong(length))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetegid() (r1 uintptr, e1 Errno) { - r1 = uintptr(C.getegid()) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgeteuid() (r1 uintptr, e1 Errno) { - r1 = uintptr(C.geteuid()) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetgid() (r1 uintptr, e1 Errno) { - r1 = uintptr(C.getgid()) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetuid() (r1 uintptr, e1 Errno) { - r1 = uintptr(C.getuid()) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func calllchown(_p0 uintptr, uid int, gid int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.lchown(C.uintptr_t(_p0), C.int(uid), C.int(gid))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func calllisten(s int, n int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.listen(C.int(s), C.int(n))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func calllstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.lstat(C.uintptr_t(_p0), C.uintptr_t(stat))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callpause() (r1 uintptr, e1 Errno) { - r1 = uintptr(C.pause()) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callpread64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.pread64(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.longlong(offset))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callpwrite64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.pwrite64(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.longlong(offset))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.c_select(C.int(nfd), C.uintptr_t(r), C.uintptr_t(w), C.uintptr_t(e), C.uintptr_t(timeout))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callpselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr, sigmask uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.pselect(C.int(nfd), C.uintptr_t(r), C.uintptr_t(w), C.uintptr_t(e), C.uintptr_t(timeout), C.uintptr_t(sigmask))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsetregid(rgid int, egid int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.setregid(C.int(rgid), C.int(egid))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsetreuid(ruid int, euid int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.setreuid(C.int(ruid), C.int(euid))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callshutdown(fd int, how int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.shutdown(C.int(fd), C.int(how))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsplice(rfd int, roff uintptr, wfd int, woff uintptr, len int, flags int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.splice(C.int(rfd), C.uintptr_t(roff), C.int(wfd), C.uintptr_t(woff), C.int(len), C.int(flags))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callstat(_p0 uintptr, statptr uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.stat(C.uintptr_t(_p0), C.uintptr_t(statptr))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callstatfs(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.statfs(C.uintptr_t(_p0), C.uintptr_t(buf))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func calltruncate(_p0 uintptr, length int64) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.truncate(C.uintptr_t(_p0), C.longlong(length))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callbind(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.bind(C.int(s), C.uintptr_t(addr), C.uintptr_t(addrlen))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callconnect(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.connect(C.int(s), C.uintptr_t(addr), C.uintptr_t(addrlen))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.getgroups(C.int(n), C.uintptr_t(list))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.setgroups(C.int(n), C.uintptr_t(list))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.getsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(val), C.uintptr_t(vallen))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.setsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(val), C.uintptr_t(vallen))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsocket(domain int, typ int, proto int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.socket(C.int(domain), C.int(typ), C.int(proto))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsocketpair(domain int, typ int, proto int, fd uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.socketpair(C.int(domain), C.int(typ), C.int(proto), C.uintptr_t(fd))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetpeername(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.getpeername(C.int(fd), C.uintptr_t(rsa), C.uintptr_t(addrlen))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetsockname(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.getsockname(C.int(fd), C.uintptr_t(rsa), C.uintptr_t(addrlen))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callrecvfrom(fd int, _p0 uintptr, _lenp0 int, flags int, from uintptr, fromlen uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.recvfrom(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.int(flags), C.uintptr_t(from), C.uintptr_t(fromlen))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsendto(s int, _p0 uintptr, _lenp0 int, flags int, to uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.sendto(C.int(s), C.uintptr_t(_p0), C.size_t(_lenp0), C.int(flags), C.uintptr_t(to), C.uintptr_t(addrlen))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callnrecvmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.nrecvmsg(C.int(s), C.uintptr_t(msg), C.int(flags))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callnsendmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.nsendmsg(C.int(s), C.uintptr_t(msg), C.int(flags))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmunmap(addr uintptr, length uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.munmap(C.uintptr_t(addr), C.uintptr_t(length))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmadvise(_p0 uintptr, _lenp0 int, advice int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.madvise(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(advice))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmprotect(_p0 uintptr, _lenp0 int, prot int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.mprotect(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(prot))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.mlock(C.uintptr_t(_p0), C.size_t(_lenp0))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmlockall(flags int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.mlockall(C.int(flags))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmsync(_p0 uintptr, _lenp0 int, flags int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.msync(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(flags))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmunlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.munlock(C.uintptr_t(_p0), C.size_t(_lenp0))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmunlockall() (r1 uintptr, e1 Errno) { - r1 = uintptr(C.munlockall()) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callpipe(p uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.pipe(C.uintptr_t(p))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callpoll(fds uintptr, nfds int, timeout int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.poll(C.uintptr_t(fds), C.int(nfds), C.int(timeout))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgettimeofday(tv uintptr, tzp uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.gettimeofday(C.uintptr_t(tv), C.uintptr_t(tzp))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func calltime(t uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.time(C.uintptr_t(t))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callutime(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.utime(C.uintptr_t(_p0), C.uintptr_t(buf))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetsystemcfg(label int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.getsystemcfg(C.int(label))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callumount(_p0 uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.umount(C.uintptr_t(_p0))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.getrlimit(C.int(resource), C.uintptr_t(rlim))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callsetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.setrlimit(C.int(resource), C.uintptr_t(rlim))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.lseek(C.int(fd), C.longlong(offset), C.int(whence))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func callmmap64(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.mmap64(C.uintptr_t(addr), C.uintptr_t(length), C.int(prot), C.int(flags), C.int(fd), C.longlong(offset))) - e1 = syscall.GetErrno() - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go deleted file mode 100644 index c2461c4..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +++ /dev/null @@ -1,2545 +0,0 @@ -// go run mksyscall.go -tags darwin,amd64 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build darwin && amd64 -// +build darwin,amd64 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getgroups_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getgroups getgroups "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setgroups_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setgroups setgroups "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) - wpid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_wait4_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_wait4 wait4 "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_accept_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_accept accept "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_bind_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_bind bind "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_connect_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_connect connect "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_socket_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_socket socket "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getsockopt_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getsockopt getsockopt "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setsockopt_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setsockopt setsockopt "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getpeername_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpeername getpeername "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getsockname_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getsockname getsockname "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(s int, how int) (err error) { - _, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_shutdown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_shutdown shutdown "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_socketpair_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_socketpair socketpair "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_recvfrom_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_recvfrom recvfrom "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sendto_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sendto sendto "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_recvmsg_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_recvmsg recvmsg "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sendmsg_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sendmsg sendmsg "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_kevent_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_kevent kevent "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, timeval *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_utimes_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_utimes utimes "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_futimes_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_futimes futimes "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_poll_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_poll poll "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Madvise(b []byte, behav int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_madvise_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_madvise madvise "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mlock_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mlock mlock "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mlockall_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mlockall mlockall "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mprotect_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mprotect mprotect "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_msync_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_msync msync "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_munlock_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_munlock munlock "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_munlockall_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_munlockall munlockall "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func closedir(dir uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_closedir_trampoline_addr, uintptr(dir), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_closedir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) { - r0, _, _ := syscall_syscall(libc_readdir_r_trampoline_addr, uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result))) - res = Errno(r0) - return -} - -var libc_readdir_r_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe(p *[2]int32) (err error) { - _, _, e1 := syscall_rawSyscall(libc_pipe_trampoline_addr, uintptr(unsafe.Pointer(p)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pipe_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pipe pipe "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attr) - if err != nil { - return - } - r0, _, e1 := syscall_syscall6(libc_getxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) - sz = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getxattr_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getxattr getxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attr) - if err != nil { - return - } - r0, _, e1 := syscall_syscall6(libc_fgetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) - sz = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fgetxattr_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fgetxattr fgetxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attr) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_setxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setxattr_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setxattr setxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attr) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_fsetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fsetxattr_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fsetxattr fsetxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func removexattr(path string, attr string, options int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attr) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_removexattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_removexattr_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_removexattr removexattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fremovexattr(fd int, attr string, options int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attr) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_fremovexattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fremovexattr_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fremovexattr fremovexattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func listxattr(path string, dest *byte, size int, options int) (sz int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall6(libc_listxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) - sz = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_listxattr_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_listxattr listxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) { - r0, _, e1 := syscall_syscall6(libc_flistxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) - sz = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_flistxattr_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_flistxattr flistxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_utimensat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_utimensat utimensat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fcntl(fd int, cmd int, arg int) (val int, err error) { - r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fcntl_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fcntl fcntl "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kill(pid int, signum int, posix int) (err error) { - _, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), uintptr(posix)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_kill_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_kill kill "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_ioctl_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_ioctl ioctl "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { - _p0 = unsafe.Pointer(&mib[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sysctl_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sysctl sysctl "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) { - _, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sendfile_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func shmat(id int, addr uintptr, flag int) (ret uintptr, err error) { - r0, _, e1 := syscall_syscall(libc_shmat_trampoline_addr, uintptr(id), uintptr(addr), uintptr(flag)) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_shmat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_shmat shmat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) { - r0, _, e1 := syscall_syscall(libc_shmctl_trampoline_addr, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf))) - result = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_shmctl_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_shmctl shmctl "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func shmdt(addr uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_shmdt_trampoline_addr, uintptr(addr), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_shmdt_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_shmdt shmdt "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func shmget(key int, size int, flag int) (id int, err error) { - r0, _, e1 := syscall_syscall(libc_shmget_trampoline_addr, uintptr(key), uintptr(size), uintptr(flag)) - id = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_shmget_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_shmget shmget "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_access_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_access access "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_adjtime_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_adjtime adjtime "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chdir chdir "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chflags(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chflags_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chflags chflags "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chmod(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chmod_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chmod chmod "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chown chown "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chroot_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chroot chroot "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ClockGettime(clockid int32, time *Timespec) (err error) { - _, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_clock_gettime_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_clock_gettime clock_gettime "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_close_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Clonefile(src string, dst string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(src) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(dst) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_clonefile_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_clonefile_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_clonefile clonefile "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Clonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(src) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(dst) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_clonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_clonefileat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_clonefileat clonefileat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(fd int) (nfd int, err error) { - r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_dup_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_dup dup "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup2(from int, to int) (err error) { - _, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_dup2_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_dup2 dup2 "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exchangedata(path1 string, path2 string, options int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path1) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(path2) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_exchangedata_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_exchangedata_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_exchangedata exchangedata "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0) - return -} - -var libc_exit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_exit exit "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_faccessat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_faccessat faccessat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchdir fchdir "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchflags(fd int, flags int) (err error) { - _, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchflags_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchflags fchflags "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchmod_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchmod fchmod "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchmodat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchmodat fchmodat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchown fchown "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchownat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchownat fchownat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(dst) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_fclonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fclonefileat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fclonefileat fclonefileat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Flock(fd int, how int) (err error) { - _, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_flock_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_flock flock "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fpathconf_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fpathconf fpathconf "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsync(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fsync_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fsync fsync "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_ftruncate_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_ftruncate ftruncate "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getcwd(buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getcwd_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getcwd getcwd "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getdtablesize() (size int) { - r0, _, _ := syscall_syscall(libc_getdtablesize_trampoline_addr, 0, 0, 0) - size = int(r0) - return -} - -var libc_getdtablesize_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getdtablesize getdtablesize "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0) - egid = int(r0) - return -} - -var libc_getegid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getegid getegid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (uid int) { - r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0) - uid = int(r0) - return -} - -var libc_geteuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_geteuid geteuid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0) - gid = int(r0) - return -} - -var libc_getgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getgid getgid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getpgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpgid getpgid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgrp() (pgrp int) { - r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0) - pgrp = int(r0) - return -} - -var libc_getpgrp_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpgrp getpgrp "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0) - pid = int(r0) - return -} - -var libc_getpid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpid getpid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (ppid int) { - r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0) - ppid = int(r0) - return -} - -var libc_getppid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getppid getppid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getpriority_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpriority getpriority "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getrlimit getrlimit "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getrusage_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getrusage getrusage "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getsid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getsid getsid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tp *Timeval) (err error) { - _, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_gettimeofday_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0) - uid = int(r0) - return -} - -var libc_getuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getuid getuid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Issetugid() (tainted bool) { - r0, _, _ := syscall_rawSyscall(libc_issetugid_trampoline_addr, 0, 0, 0) - tainted = bool(r0 != 0) - return -} - -var libc_issetugid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_issetugid issetugid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kqueue() (fd int, err error) { - r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_kqueue_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_kqueue kqueue "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_lchown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_lchown lchown "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Link(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_link_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_link link "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_linkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_linkat linkat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, backlog int) (err error) { - _, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_listen_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_listen listen "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdir(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mkdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mkdir mkdir "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdirat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mkdirat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mkdirat mkdirat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifo(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mkfifo_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mkfifo mkfifo "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknod(path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mknod_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mknod mknod "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(fsType) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(dir) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mount_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mount mount "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Open(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_open_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_open open "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_openat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pathconf(path string, name int) (val int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pathconf_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pathconf pathconf "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pread_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pread pread "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pwrite_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pwrite pwrite "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_read_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlink(path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_readlink_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_readlink readlink "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_readlinkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_readlinkat readlinkat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rename(from string, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_rename_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_rename rename "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(fromfd int, from string, tofd int, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_renameat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_renameat renameat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Revoke(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_revoke_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_revoke revoke "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rmdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_rmdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_rmdir rmdir "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence)) - newoffset = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_lseek_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_lseek lseek "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_select_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_select select "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setegid(egid int) (err error) { - _, _, e1 := syscall_syscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setegid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setegid setegid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seteuid(euid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_seteuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_seteuid seteuid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setgid(gid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setgid setgid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setlogin(name string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(name) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setlogin_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setlogin setlogin "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setpgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setpgid setpgid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setpriority_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setpriority setpriority "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setprivexec(flag int) (err error) { - _, _, e1 := syscall_syscall(libc_setprivexec_trampoline_addr, uintptr(flag), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setprivexec_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setprivexec setprivexec "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setregid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setregid setregid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setreuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setreuid setreuid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0) - pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setsid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setsid setsid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_settimeofday_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_settimeofday settimeofday "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setuid(uid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setuid setuid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlink(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_symlink_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_symlink symlink "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_symlinkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_symlinkat symlinkat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() (err error) { - _, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sync_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sync sync "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_truncate_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_truncate truncate "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(newmask int) (oldmask int) { - r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0) - oldmask = int(r0) - return -} - -var libc_umask_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_umask umask "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Undelete(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_undelete_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_undelete_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_undelete undelete "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlink(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_unlink_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_unlink unlink "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlinkat(dirfd int, path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_unlinkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_unlinkat unlinkat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unmount(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_unmount_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_unmount unmount "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_write_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_write write "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mmap_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mmap mmap "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_munmap_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_munmap munmap "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// 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 { - err = errnoErr(e1) - } - return -} - -var libc_fstat64_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fstat64 fstat64 "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_fstatat64_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fstatat64_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fstatat64 fstatat64 "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, stat *Statfs_t) (err error) { - _, _, e1 := syscall_syscall(libc_fstatfs64_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fstatfs64_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fstatfs64 fstatfs64 "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_getfsstat64_trampoline_addr, uintptr(buf), uintptr(size), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getfsstat64_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getfsstat64 getfsstat64 "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_lstat64_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_lstat64_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_lstat64 lstat64 "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) { - _, _, e1 := syscall_syscall6(libc_ptrace_trampoline_addr, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_ptrace_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_ptrace ptrace "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_stat64_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_stat64_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_stat64 stat64 "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, stat *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_statfs64_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_statfs64_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_statfs64 statfs64 "/usr/lib/libSystem.B.dylib" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s deleted file mode 100644 index 95fe4c0..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +++ /dev/null @@ -1,904 +0,0 @@ -// go run mkasm.go darwin amd64 -// Code generated by the command above; DO NOT EDIT. - -#include "textflag.h" - -TEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fdopendir(SB) - -GLOBL ·libc_fdopendir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB) - -TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgroups(SB) - -GLOBL ·libc_getgroups_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB) - -TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgroups(SB) - -GLOBL ·libc_setgroups_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB) - -TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_wait4(SB) - -GLOBL ·libc_wait4_trampoline_addr(SB), RODATA, $8 -DATA ·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB) - -TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_accept(SB) - -GLOBL ·libc_accept_trampoline_addr(SB), RODATA, $8 -DATA ·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB) - -TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_bind(SB) - -GLOBL ·libc_bind_trampoline_addr(SB), RODATA, $8 -DATA ·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB) - -TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_connect(SB) - -GLOBL ·libc_connect_trampoline_addr(SB), RODATA, $8 -DATA ·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB) - -TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socket(SB) - -GLOBL ·libc_socket_trampoline_addr(SB), RODATA, $8 -DATA ·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB) - -TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockopt(SB) - -GLOBL ·libc_getsockopt_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB) - -TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsockopt(SB) - -GLOBL ·libc_setsockopt_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB) - -TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpeername(SB) - -GLOBL ·libc_getpeername_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB) - -TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockname(SB) - -GLOBL ·libc_getsockname_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB) - -TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shutdown(SB) - -GLOBL ·libc_shutdown_trampoline_addr(SB), RODATA, $8 -DATA ·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB) - -TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socketpair(SB) - -GLOBL ·libc_socketpair_trampoline_addr(SB), RODATA, $8 -DATA ·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB) - -TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvfrom(SB) - -GLOBL ·libc_recvfrom_trampoline_addr(SB), RODATA, $8 -DATA ·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB) - -TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendto(SB) - -GLOBL ·libc_sendto_trampoline_addr(SB), RODATA, $8 -DATA ·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB) - -TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvmsg(SB) - -GLOBL ·libc_recvmsg_trampoline_addr(SB), RODATA, $8 -DATA ·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB) - -TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendmsg(SB) - -GLOBL ·libc_sendmsg_trampoline_addr(SB), RODATA, $8 -DATA ·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB) - -TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kevent(SB) - -GLOBL ·libc_kevent_trampoline_addr(SB), RODATA, $8 -DATA ·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB) - -TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimes(SB) - -GLOBL ·libc_utimes_trampoline_addr(SB), RODATA, $8 -DATA ·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB) - -TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_futimes(SB) - -GLOBL ·libc_futimes_trampoline_addr(SB), RODATA, $8 -DATA ·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB) - -TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_poll(SB) - -GLOBL ·libc_poll_trampoline_addr(SB), RODATA, $8 -DATA ·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB) - -TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_madvise(SB) - -GLOBL ·libc_madvise_trampoline_addr(SB), RODATA, $8 -DATA ·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB) - -TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlock(SB) - -GLOBL ·libc_mlock_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB) - -TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlockall(SB) - -GLOBL ·libc_mlockall_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB) - -TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mprotect(SB) - -GLOBL ·libc_mprotect_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB) - -TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_msync(SB) - -GLOBL ·libc_msync_trampoline_addr(SB), RODATA, $8 -DATA ·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB) - -TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlock(SB) - -GLOBL ·libc_munlock_trampoline_addr(SB), RODATA, $8 -DATA ·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB) - -TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlockall(SB) - -GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $8 -DATA ·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB) - -TEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_closedir(SB) - -GLOBL ·libc_closedir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB) - -TEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readdir_r(SB) - -GLOBL ·libc_readdir_r_trampoline_addr(SB), RODATA, $8 -DATA ·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB) - -TEXT libc_pipe_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pipe(SB) - -GLOBL ·libc_pipe_trampoline_addr(SB), RODATA, $8 -DATA ·libc_pipe_trampoline_addr(SB)/8, $libc_pipe_trampoline<>(SB) - -TEXT libc_getxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getxattr(SB) - -GLOBL ·libc_getxattr_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getxattr_trampoline_addr(SB)/8, $libc_getxattr_trampoline<>(SB) - -TEXT libc_fgetxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fgetxattr(SB) - -GLOBL ·libc_fgetxattr_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fgetxattr_trampoline_addr(SB)/8, $libc_fgetxattr_trampoline<>(SB) - -TEXT libc_setxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setxattr(SB) - -GLOBL ·libc_setxattr_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setxattr_trampoline_addr(SB)/8, $libc_setxattr_trampoline<>(SB) - -TEXT libc_fsetxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fsetxattr(SB) - -GLOBL ·libc_fsetxattr_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fsetxattr_trampoline_addr(SB)/8, $libc_fsetxattr_trampoline<>(SB) - -TEXT libc_removexattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_removexattr(SB) - -GLOBL ·libc_removexattr_trampoline_addr(SB), RODATA, $8 -DATA ·libc_removexattr_trampoline_addr(SB)/8, $libc_removexattr_trampoline<>(SB) - -TEXT libc_fremovexattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fremovexattr(SB) - -GLOBL ·libc_fremovexattr_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fremovexattr_trampoline_addr(SB)/8, $libc_fremovexattr_trampoline<>(SB) - -TEXT libc_listxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_listxattr(SB) - -GLOBL ·libc_listxattr_trampoline_addr(SB), RODATA, $8 -DATA ·libc_listxattr_trampoline_addr(SB)/8, $libc_listxattr_trampoline<>(SB) - -TEXT libc_flistxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_flistxattr(SB) - -GLOBL ·libc_flistxattr_trampoline_addr(SB), RODATA, $8 -DATA ·libc_flistxattr_trampoline_addr(SB)/8, $libc_flistxattr_trampoline<>(SB) - -TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimensat(SB) - -GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB) - -TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fcntl(SB) - -GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB) - -TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kill(SB) - -GLOBL ·libc_kill_trampoline_addr(SB), RODATA, $8 -DATA ·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB) - -TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ioctl(SB) - -GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 -DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB) - -TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sysctl(SB) - -GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 -DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) - -TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendfile(SB) - -GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8 -DATA ·libc_sendfile_trampoline_addr(SB)/8, $libc_sendfile_trampoline<>(SB) - -TEXT libc_shmat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shmat(SB) - -GLOBL ·libc_shmat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_shmat_trampoline_addr(SB)/8, $libc_shmat_trampoline<>(SB) - -TEXT libc_shmctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shmctl(SB) - -GLOBL ·libc_shmctl_trampoline_addr(SB), RODATA, $8 -DATA ·libc_shmctl_trampoline_addr(SB)/8, $libc_shmctl_trampoline<>(SB) - -TEXT libc_shmdt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shmdt(SB) - -GLOBL ·libc_shmdt_trampoline_addr(SB), RODATA, $8 -DATA ·libc_shmdt_trampoline_addr(SB)/8, $libc_shmdt_trampoline<>(SB) - -TEXT libc_shmget_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shmget(SB) - -GLOBL ·libc_shmget_trampoline_addr(SB), RODATA, $8 -DATA ·libc_shmget_trampoline_addr(SB)/8, $libc_shmget_trampoline<>(SB) - -TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_access(SB) - -GLOBL ·libc_access_trampoline_addr(SB), RODATA, $8 -DATA ·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB) - -TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_adjtime(SB) - -GLOBL ·libc_adjtime_trampoline_addr(SB), RODATA, $8 -DATA ·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB) - -TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chdir(SB) - -GLOBL ·libc_chdir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB) - -TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chflags(SB) - -GLOBL ·libc_chflags_trampoline_addr(SB), RODATA, $8 -DATA ·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB) - -TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chmod(SB) - -GLOBL ·libc_chmod_trampoline_addr(SB), RODATA, $8 -DATA ·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB) - -TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chown(SB) - -GLOBL ·libc_chown_trampoline_addr(SB), RODATA, $8 -DATA ·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB) - -TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chroot(SB) - -GLOBL ·libc_chroot_trampoline_addr(SB), RODATA, $8 -DATA ·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB) - -TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_clock_gettime(SB) - -GLOBL ·libc_clock_gettime_trampoline_addr(SB), RODATA, $8 -DATA ·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB) - -TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_close(SB) - -GLOBL ·libc_close_trampoline_addr(SB), RODATA, $8 -DATA ·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB) - -TEXT libc_clonefile_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_clonefile(SB) - -GLOBL ·libc_clonefile_trampoline_addr(SB), RODATA, $8 -DATA ·libc_clonefile_trampoline_addr(SB)/8, $libc_clonefile_trampoline<>(SB) - -TEXT libc_clonefileat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_clonefileat(SB) - -GLOBL ·libc_clonefileat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_clonefileat_trampoline_addr(SB)/8, $libc_clonefileat_trampoline<>(SB) - -TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup(SB) - -GLOBL ·libc_dup_trampoline_addr(SB), RODATA, $8 -DATA ·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB) - -TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup2(SB) - -GLOBL ·libc_dup2_trampoline_addr(SB), RODATA, $8 -DATA ·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB) - -TEXT libc_exchangedata_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_exchangedata(SB) - -GLOBL ·libc_exchangedata_trampoline_addr(SB), RODATA, $8 -DATA ·libc_exchangedata_trampoline_addr(SB)/8, $libc_exchangedata_trampoline<>(SB) - -TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_exit(SB) - -GLOBL ·libc_exit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB) - -TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_faccessat(SB) - -GLOBL ·libc_faccessat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB) - -TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchdir(SB) - -GLOBL ·libc_fchdir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB) - -TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchflags(SB) - -GLOBL ·libc_fchflags_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB) - -TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmod(SB) - -GLOBL ·libc_fchmod_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB) - -TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmodat(SB) - -GLOBL ·libc_fchmodat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB) - -TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchown(SB) - -GLOBL ·libc_fchown_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB) - -TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchownat(SB) - -GLOBL ·libc_fchownat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB) - -TEXT libc_fclonefileat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fclonefileat(SB) - -GLOBL ·libc_fclonefileat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fclonefileat_trampoline_addr(SB)/8, $libc_fclonefileat_trampoline<>(SB) - -TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_flock(SB) - -GLOBL ·libc_flock_trampoline_addr(SB), RODATA, $8 -DATA ·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB) - -TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fpathconf(SB) - -GLOBL ·libc_fpathconf_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB) - -TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fsync(SB) - -GLOBL ·libc_fsync_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB) - -TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ftruncate(SB) - -GLOBL ·libc_ftruncate_trampoline_addr(SB), RODATA, $8 -DATA ·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB) - -TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getcwd(SB) - -GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB) - -TEXT libc_getdtablesize_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getdtablesize(SB) - -GLOBL ·libc_getdtablesize_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getdtablesize_trampoline_addr(SB)/8, $libc_getdtablesize_trampoline<>(SB) - -TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getegid(SB) - -GLOBL ·libc_getegid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB) - -TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_geteuid(SB) - -GLOBL ·libc_geteuid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB) - -TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgid(SB) - -GLOBL ·libc_getgid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB) - -TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgid(SB) - -GLOBL ·libc_getpgid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB) - -TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgrp(SB) - -GLOBL ·libc_getpgrp_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB) - -TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpid(SB) - -GLOBL ·libc_getpid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB) - -TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getppid(SB) - -GLOBL ·libc_getppid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB) - -TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpriority(SB) - -GLOBL ·libc_getpriority_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB) - -TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrlimit(SB) - -GLOBL ·libc_getrlimit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB) - -TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrusage(SB) - -GLOBL ·libc_getrusage_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB) - -TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsid(SB) - -GLOBL ·libc_getsid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB) - -TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_gettimeofday(SB) - -GLOBL ·libc_gettimeofday_trampoline_addr(SB), RODATA, $8 -DATA ·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB) - -TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getuid(SB) - -GLOBL ·libc_getuid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB) - -TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_issetugid(SB) - -GLOBL ·libc_issetugid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB) - -TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kqueue(SB) - -GLOBL ·libc_kqueue_trampoline_addr(SB), RODATA, $8 -DATA ·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB) - -TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lchown(SB) - -GLOBL ·libc_lchown_trampoline_addr(SB), RODATA, $8 -DATA ·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB) - -TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_link(SB) - -GLOBL ·libc_link_trampoline_addr(SB), RODATA, $8 -DATA ·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB) - -TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_linkat(SB) - -GLOBL ·libc_linkat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB) - -TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_listen(SB) - -GLOBL ·libc_listen_trampoline_addr(SB), RODATA, $8 -DATA ·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB) - -TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdir(SB) - -GLOBL ·libc_mkdir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB) - -TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdirat(SB) - -GLOBL ·libc_mkdirat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB) - -TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkfifo(SB) - -GLOBL ·libc_mkfifo_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB) - -TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mknod(SB) - -GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB) - -TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mount(SB) - -GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) - -TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_open(SB) - -GLOBL ·libc_open_trampoline_addr(SB), RODATA, $8 -DATA ·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB) - -TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_openat(SB) - -GLOBL ·libc_openat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB) - -TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pathconf(SB) - -GLOBL ·libc_pathconf_trampoline_addr(SB), RODATA, $8 -DATA ·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB) - -TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pread(SB) - -GLOBL ·libc_pread_trampoline_addr(SB), RODATA, $8 -DATA ·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB) - -TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pwrite(SB) - -GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8 -DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB) - -TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_read(SB) - -GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8 -DATA ·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB) - -TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlink(SB) - -GLOBL ·libc_readlink_trampoline_addr(SB), RODATA, $8 -DATA ·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB) - -TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlinkat(SB) - -GLOBL ·libc_readlinkat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB) - -TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rename(SB) - -GLOBL ·libc_rename_trampoline_addr(SB), RODATA, $8 -DATA ·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB) - -TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_renameat(SB) - -GLOBL ·libc_renameat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB) - -TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_revoke(SB) - -GLOBL ·libc_revoke_trampoline_addr(SB), RODATA, $8 -DATA ·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB) - -TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rmdir(SB) - -GLOBL ·libc_rmdir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB) - -TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lseek(SB) - -GLOBL ·libc_lseek_trampoline_addr(SB), RODATA, $8 -DATA ·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB) - -TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_select(SB) - -GLOBL ·libc_select_trampoline_addr(SB), RODATA, $8 -DATA ·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB) - -TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setegid(SB) - -GLOBL ·libc_setegid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB) - -TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_seteuid(SB) - -GLOBL ·libc_seteuid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB) - -TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgid(SB) - -GLOBL ·libc_setgid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB) - -TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setlogin(SB) - -GLOBL ·libc_setlogin_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB) - -TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpgid(SB) - -GLOBL ·libc_setpgid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB) - -TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpriority(SB) - -GLOBL ·libc_setpriority_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB) - -TEXT libc_setprivexec_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setprivexec(SB) - -GLOBL ·libc_setprivexec_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setprivexec_trampoline_addr(SB)/8, $libc_setprivexec_trampoline<>(SB) - -TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setregid(SB) - -GLOBL ·libc_setregid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB) - -TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setreuid(SB) - -GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB) - -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) - -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) - -TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsid(SB) - -GLOBL ·libc_setsid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB) - -TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_settimeofday(SB) - -GLOBL ·libc_settimeofday_trampoline_addr(SB), RODATA, $8 -DATA ·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB) - -TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setuid(SB) - -GLOBL ·libc_setuid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB) - -TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlink(SB) - -GLOBL ·libc_symlink_trampoline_addr(SB), RODATA, $8 -DATA ·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB) - -TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlinkat(SB) - -GLOBL ·libc_symlinkat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB) - -TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sync(SB) - -GLOBL ·libc_sync_trampoline_addr(SB), RODATA, $8 -DATA ·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB) - -TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_truncate(SB) - -GLOBL ·libc_truncate_trampoline_addr(SB), RODATA, $8 -DATA ·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB) - -TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_umask(SB) - -GLOBL ·libc_umask_trampoline_addr(SB), RODATA, $8 -DATA ·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB) - -TEXT libc_undelete_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_undelete(SB) - -GLOBL ·libc_undelete_trampoline_addr(SB), RODATA, $8 -DATA ·libc_undelete_trampoline_addr(SB)/8, $libc_undelete_trampoline<>(SB) - -TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlink(SB) - -GLOBL ·libc_unlink_trampoline_addr(SB), RODATA, $8 -DATA ·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB) - -TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlinkat(SB) - -GLOBL ·libc_unlinkat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB) - -TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unmount(SB) - -GLOBL ·libc_unmount_trampoline_addr(SB), RODATA, $8 -DATA ·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB) - -TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_write(SB) - -GLOBL ·libc_write_trampoline_addr(SB), RODATA, $8 -DATA ·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB) - -TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mmap(SB) - -GLOBL ·libc_mmap_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB) - -TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munmap(SB) - -GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 -DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) - -TEXT libc_fstat64_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstat64(SB) - -GLOBL ·libc_fstat64_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fstat64_trampoline_addr(SB)/8, $libc_fstat64_trampoline<>(SB) - -TEXT libc_fstatat64_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatat64(SB) - -GLOBL ·libc_fstatat64_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fstatat64_trampoline_addr(SB)/8, $libc_fstatat64_trampoline<>(SB) - -TEXT libc_fstatfs64_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatfs64(SB) - -GLOBL ·libc_fstatfs64_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fstatfs64_trampoline_addr(SB)/8, $libc_fstatfs64_trampoline<>(SB) - -TEXT libc_getfsstat64_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getfsstat64(SB) - -GLOBL ·libc_getfsstat64_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getfsstat64_trampoline_addr(SB)/8, $libc_getfsstat64_trampoline<>(SB) - -TEXT libc_lstat64_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lstat64(SB) - -GLOBL ·libc_lstat64_trampoline_addr(SB), RODATA, $8 -DATA ·libc_lstat64_trampoline_addr(SB)/8, $libc_lstat64_trampoline<>(SB) - -TEXT libc_ptrace_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ptrace(SB) - -GLOBL ·libc_ptrace_trampoline_addr(SB), RODATA, $8 -DATA ·libc_ptrace_trampoline_addr(SB)/8, $libc_ptrace_trampoline<>(SB) - -TEXT libc_stat64_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_stat64(SB) - -GLOBL ·libc_stat64_trampoline_addr(SB), RODATA, $8 -DATA ·libc_stat64_trampoline_addr(SB)/8, $libc_stat64_trampoline<>(SB) - -TEXT libc_statfs64_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_statfs64(SB) - -GLOBL ·libc_statfs64_trampoline_addr(SB), RODATA, $8 -DATA ·libc_statfs64_trampoline_addr(SB)/8, $libc_statfs64_trampoline<>(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go deleted file mode 100644 index 26a0fdc..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +++ /dev/null @@ -1,2545 +0,0 @@ -// go run mksyscall.go -tags darwin,arm64 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build darwin && arm64 -// +build darwin,arm64 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getgroups_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getgroups getgroups "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setgroups_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setgroups setgroups "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) - wpid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_wait4_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_wait4 wait4 "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_accept_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_accept accept "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_bind_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_bind bind "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_connect_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_connect connect "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_socket_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_socket socket "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getsockopt_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getsockopt getsockopt "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setsockopt_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setsockopt setsockopt "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getpeername_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpeername getpeername "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getsockname_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getsockname getsockname "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(s int, how int) (err error) { - _, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_shutdown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_shutdown shutdown "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_socketpair_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_socketpair socketpair "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_recvfrom_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_recvfrom recvfrom "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sendto_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sendto sendto "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_recvmsg_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_recvmsg recvmsg "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sendmsg_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sendmsg sendmsg "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_kevent_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_kevent kevent "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, timeval *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_utimes_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_utimes utimes "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_futimes_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_futimes futimes "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_poll_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_poll poll "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Madvise(b []byte, behav int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_madvise_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_madvise madvise "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mlock_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mlock mlock "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mlockall_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mlockall mlockall "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mprotect_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mprotect mprotect "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_msync_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_msync msync "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_munlock_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_munlock munlock "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_munlockall_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_munlockall munlockall "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func closedir(dir uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_closedir_trampoline_addr, uintptr(dir), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_closedir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) { - r0, _, _ := syscall_syscall(libc_readdir_r_trampoline_addr, uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result))) - res = Errno(r0) - return -} - -var libc_readdir_r_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe(p *[2]int32) (err error) { - _, _, e1 := syscall_rawSyscall(libc_pipe_trampoline_addr, uintptr(unsafe.Pointer(p)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pipe_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pipe pipe "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attr) - if err != nil { - return - } - r0, _, e1 := syscall_syscall6(libc_getxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) - sz = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getxattr_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getxattr getxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attr) - if err != nil { - return - } - r0, _, e1 := syscall_syscall6(libc_fgetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) - sz = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fgetxattr_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fgetxattr fgetxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attr) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_setxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setxattr_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setxattr setxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attr) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_fsetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fsetxattr_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fsetxattr fsetxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func removexattr(path string, attr string, options int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attr) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_removexattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_removexattr_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_removexattr removexattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fremovexattr(fd int, attr string, options int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attr) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_fremovexattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fremovexattr_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fremovexattr fremovexattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func listxattr(path string, dest *byte, size int, options int) (sz int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall6(libc_listxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) - sz = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_listxattr_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_listxattr listxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) { - r0, _, e1 := syscall_syscall6(libc_flistxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) - sz = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_flistxattr_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_flistxattr flistxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_utimensat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_utimensat utimensat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fcntl(fd int, cmd int, arg int) (val int, err error) { - r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fcntl_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fcntl fcntl "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kill(pid int, signum int, posix int) (err error) { - _, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), uintptr(posix)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_kill_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_kill kill "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_ioctl_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_ioctl ioctl "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { - _p0 = unsafe.Pointer(&mib[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sysctl_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sysctl sysctl "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) { - _, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sendfile_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func shmat(id int, addr uintptr, flag int) (ret uintptr, err error) { - r0, _, e1 := syscall_syscall(libc_shmat_trampoline_addr, uintptr(id), uintptr(addr), uintptr(flag)) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_shmat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_shmat shmat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) { - r0, _, e1 := syscall_syscall(libc_shmctl_trampoline_addr, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf))) - result = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_shmctl_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_shmctl shmctl "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func shmdt(addr uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_shmdt_trampoline_addr, uintptr(addr), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_shmdt_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_shmdt shmdt "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func shmget(key int, size int, flag int) (id int, err error) { - r0, _, e1 := syscall_syscall(libc_shmget_trampoline_addr, uintptr(key), uintptr(size), uintptr(flag)) - id = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_shmget_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_shmget shmget "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_access_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_access access "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_adjtime_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_adjtime adjtime "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chdir chdir "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chflags(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chflags_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chflags chflags "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chmod(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chmod_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chmod chmod "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chown chown "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chroot_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chroot chroot "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ClockGettime(clockid int32, time *Timespec) (err error) { - _, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_clock_gettime_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_clock_gettime clock_gettime "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_close_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Clonefile(src string, dst string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(src) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(dst) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_clonefile_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_clonefile_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_clonefile clonefile "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Clonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(src) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(dst) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_clonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_clonefileat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_clonefileat clonefileat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(fd int) (nfd int, err error) { - r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_dup_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_dup dup "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup2(from int, to int) (err error) { - _, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_dup2_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_dup2 dup2 "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exchangedata(path1 string, path2 string, options int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path1) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(path2) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_exchangedata_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_exchangedata_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_exchangedata exchangedata "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0) - return -} - -var libc_exit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_exit exit "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_faccessat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_faccessat faccessat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchdir fchdir "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchflags(fd int, flags int) (err error) { - _, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchflags_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchflags fchflags "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchmod_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchmod fchmod "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchmodat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchmodat fchmodat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchown fchown "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchownat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchownat fchownat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(dst) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_fclonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fclonefileat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fclonefileat fclonefileat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Flock(fd int, how int) (err error) { - _, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_flock_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_flock flock "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fpathconf_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fpathconf fpathconf "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsync(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fsync_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fsync fsync "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_ftruncate_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_ftruncate ftruncate "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getcwd(buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getcwd_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getcwd getcwd "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getdtablesize() (size int) { - r0, _, _ := syscall_syscall(libc_getdtablesize_trampoline_addr, 0, 0, 0) - size = int(r0) - return -} - -var libc_getdtablesize_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getdtablesize getdtablesize "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0) - egid = int(r0) - return -} - -var libc_getegid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getegid getegid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (uid int) { - r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0) - uid = int(r0) - return -} - -var libc_geteuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_geteuid geteuid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0) - gid = int(r0) - return -} - -var libc_getgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getgid getgid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getpgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpgid getpgid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgrp() (pgrp int) { - r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0) - pgrp = int(r0) - return -} - -var libc_getpgrp_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpgrp getpgrp "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0) - pid = int(r0) - return -} - -var libc_getpid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpid getpid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (ppid int) { - r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0) - ppid = int(r0) - return -} - -var libc_getppid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getppid getppid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getpriority_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpriority getpriority "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getrlimit getrlimit "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getrusage_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getrusage getrusage "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getsid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getsid getsid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tp *Timeval) (err error) { - _, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_gettimeofday_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0) - uid = int(r0) - return -} - -var libc_getuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getuid getuid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Issetugid() (tainted bool) { - r0, _, _ := syscall_rawSyscall(libc_issetugid_trampoline_addr, 0, 0, 0) - tainted = bool(r0 != 0) - return -} - -var libc_issetugid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_issetugid issetugid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kqueue() (fd int, err error) { - r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_kqueue_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_kqueue kqueue "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_lchown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_lchown lchown "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Link(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_link_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_link link "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_linkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_linkat linkat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, backlog int) (err error) { - _, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_listen_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_listen listen "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdir(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mkdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mkdir mkdir "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdirat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mkdirat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mkdirat mkdirat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifo(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mkfifo_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mkfifo mkfifo "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknod(path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mknod_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mknod mknod "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(fsType) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(dir) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mount_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mount mount "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Open(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_open_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_open open "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_openat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pathconf(path string, name int) (val int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pathconf_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pathconf pathconf "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pread_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pread pread "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pwrite_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pwrite pwrite "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_read_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlink(path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_readlink_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_readlink readlink "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_readlinkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_readlinkat readlinkat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rename(from string, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_rename_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_rename rename "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(fromfd int, from string, tofd int, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_renameat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_renameat renameat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Revoke(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_revoke_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_revoke revoke "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rmdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_rmdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_rmdir rmdir "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence)) - newoffset = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_lseek_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_lseek lseek "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_select_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_select select "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setegid(egid int) (err error) { - _, _, e1 := syscall_syscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setegid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setegid setegid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seteuid(euid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_seteuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_seteuid seteuid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setgid(gid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setgid setgid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setlogin(name string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(name) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setlogin_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setlogin setlogin "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setpgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setpgid setpgid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setpriority_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setpriority setpriority "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setprivexec(flag int) (err error) { - _, _, e1 := syscall_syscall(libc_setprivexec_trampoline_addr, uintptr(flag), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setprivexec_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setprivexec setprivexec "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setregid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setregid setregid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setreuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setreuid setreuid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0) - pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setsid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setsid setsid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_settimeofday_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_settimeofday settimeofday "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setuid(uid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setuid setuid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlink(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_symlink_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_symlink symlink "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_symlinkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_symlinkat symlinkat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() (err error) { - _, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sync_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sync sync "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_truncate_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_truncate truncate "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(newmask int) (oldmask int) { - r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0) - oldmask = int(r0) - return -} - -var libc_umask_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_umask umask "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Undelete(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_undelete_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_undelete_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_undelete undelete "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlink(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_unlink_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_unlink unlink "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlinkat(dirfd int, path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_unlinkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_unlinkat unlinkat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unmount(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_unmount_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_unmount unmount "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_write_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_write write "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mmap_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mmap mmap "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_munmap_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_munmap munmap "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// 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 { - err = errnoErr(e1) - } - return -} - -var libc_fstat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fstat fstat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fstatat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fstatat fstatat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, stat *Statfs_t) (err error) { - _, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fstatfs_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fstatfs fstatfs "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(buf), uintptr(size), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getfsstat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getfsstat getfsstat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_lstat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_lstat lstat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) { - _, _, e1 := syscall_syscall6(libc_ptrace_trampoline_addr, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_ptrace_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_ptrace ptrace "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_stat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_stat stat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, stat *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_statfs_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_statfs statfs "/usr/lib/libSystem.B.dylib" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s deleted file mode 100644 index efa5b4c..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +++ /dev/null @@ -1,904 +0,0 @@ -// go run mkasm.go darwin arm64 -// Code generated by the command above; DO NOT EDIT. - -#include "textflag.h" - -TEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fdopendir(SB) - -GLOBL ·libc_fdopendir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB) - -TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgroups(SB) - -GLOBL ·libc_getgroups_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB) - -TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgroups(SB) - -GLOBL ·libc_setgroups_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB) - -TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_wait4(SB) - -GLOBL ·libc_wait4_trampoline_addr(SB), RODATA, $8 -DATA ·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB) - -TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_accept(SB) - -GLOBL ·libc_accept_trampoline_addr(SB), RODATA, $8 -DATA ·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB) - -TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_bind(SB) - -GLOBL ·libc_bind_trampoline_addr(SB), RODATA, $8 -DATA ·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB) - -TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_connect(SB) - -GLOBL ·libc_connect_trampoline_addr(SB), RODATA, $8 -DATA ·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB) - -TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socket(SB) - -GLOBL ·libc_socket_trampoline_addr(SB), RODATA, $8 -DATA ·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB) - -TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockopt(SB) - -GLOBL ·libc_getsockopt_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB) - -TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsockopt(SB) - -GLOBL ·libc_setsockopt_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB) - -TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpeername(SB) - -GLOBL ·libc_getpeername_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB) - -TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockname(SB) - -GLOBL ·libc_getsockname_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB) - -TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shutdown(SB) - -GLOBL ·libc_shutdown_trampoline_addr(SB), RODATA, $8 -DATA ·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB) - -TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socketpair(SB) - -GLOBL ·libc_socketpair_trampoline_addr(SB), RODATA, $8 -DATA ·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB) - -TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvfrom(SB) - -GLOBL ·libc_recvfrom_trampoline_addr(SB), RODATA, $8 -DATA ·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB) - -TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendto(SB) - -GLOBL ·libc_sendto_trampoline_addr(SB), RODATA, $8 -DATA ·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB) - -TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvmsg(SB) - -GLOBL ·libc_recvmsg_trampoline_addr(SB), RODATA, $8 -DATA ·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB) - -TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendmsg(SB) - -GLOBL ·libc_sendmsg_trampoline_addr(SB), RODATA, $8 -DATA ·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB) - -TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kevent(SB) - -GLOBL ·libc_kevent_trampoline_addr(SB), RODATA, $8 -DATA ·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB) - -TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimes(SB) - -GLOBL ·libc_utimes_trampoline_addr(SB), RODATA, $8 -DATA ·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB) - -TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_futimes(SB) - -GLOBL ·libc_futimes_trampoline_addr(SB), RODATA, $8 -DATA ·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB) - -TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_poll(SB) - -GLOBL ·libc_poll_trampoline_addr(SB), RODATA, $8 -DATA ·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB) - -TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_madvise(SB) - -GLOBL ·libc_madvise_trampoline_addr(SB), RODATA, $8 -DATA ·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB) - -TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlock(SB) - -GLOBL ·libc_mlock_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB) - -TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlockall(SB) - -GLOBL ·libc_mlockall_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB) - -TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mprotect(SB) - -GLOBL ·libc_mprotect_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB) - -TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_msync(SB) - -GLOBL ·libc_msync_trampoline_addr(SB), RODATA, $8 -DATA ·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB) - -TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlock(SB) - -GLOBL ·libc_munlock_trampoline_addr(SB), RODATA, $8 -DATA ·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB) - -TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlockall(SB) - -GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $8 -DATA ·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB) - -TEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_closedir(SB) - -GLOBL ·libc_closedir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB) - -TEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readdir_r(SB) - -GLOBL ·libc_readdir_r_trampoline_addr(SB), RODATA, $8 -DATA ·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB) - -TEXT libc_pipe_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pipe(SB) - -GLOBL ·libc_pipe_trampoline_addr(SB), RODATA, $8 -DATA ·libc_pipe_trampoline_addr(SB)/8, $libc_pipe_trampoline<>(SB) - -TEXT libc_getxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getxattr(SB) - -GLOBL ·libc_getxattr_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getxattr_trampoline_addr(SB)/8, $libc_getxattr_trampoline<>(SB) - -TEXT libc_fgetxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fgetxattr(SB) - -GLOBL ·libc_fgetxattr_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fgetxattr_trampoline_addr(SB)/8, $libc_fgetxattr_trampoline<>(SB) - -TEXT libc_setxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setxattr(SB) - -GLOBL ·libc_setxattr_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setxattr_trampoline_addr(SB)/8, $libc_setxattr_trampoline<>(SB) - -TEXT libc_fsetxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fsetxattr(SB) - -GLOBL ·libc_fsetxattr_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fsetxattr_trampoline_addr(SB)/8, $libc_fsetxattr_trampoline<>(SB) - -TEXT libc_removexattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_removexattr(SB) - -GLOBL ·libc_removexattr_trampoline_addr(SB), RODATA, $8 -DATA ·libc_removexattr_trampoline_addr(SB)/8, $libc_removexattr_trampoline<>(SB) - -TEXT libc_fremovexattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fremovexattr(SB) - -GLOBL ·libc_fremovexattr_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fremovexattr_trampoline_addr(SB)/8, $libc_fremovexattr_trampoline<>(SB) - -TEXT libc_listxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_listxattr(SB) - -GLOBL ·libc_listxattr_trampoline_addr(SB), RODATA, $8 -DATA ·libc_listxattr_trampoline_addr(SB)/8, $libc_listxattr_trampoline<>(SB) - -TEXT libc_flistxattr_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_flistxattr(SB) - -GLOBL ·libc_flistxattr_trampoline_addr(SB), RODATA, $8 -DATA ·libc_flistxattr_trampoline_addr(SB)/8, $libc_flistxattr_trampoline<>(SB) - -TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimensat(SB) - -GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB) - -TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fcntl(SB) - -GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB) - -TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kill(SB) - -GLOBL ·libc_kill_trampoline_addr(SB), RODATA, $8 -DATA ·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB) - -TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ioctl(SB) - -GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 -DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB) - -TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sysctl(SB) - -GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 -DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) - -TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendfile(SB) - -GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8 -DATA ·libc_sendfile_trampoline_addr(SB)/8, $libc_sendfile_trampoline<>(SB) - -TEXT libc_shmat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shmat(SB) - -GLOBL ·libc_shmat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_shmat_trampoline_addr(SB)/8, $libc_shmat_trampoline<>(SB) - -TEXT libc_shmctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shmctl(SB) - -GLOBL ·libc_shmctl_trampoline_addr(SB), RODATA, $8 -DATA ·libc_shmctl_trampoline_addr(SB)/8, $libc_shmctl_trampoline<>(SB) - -TEXT libc_shmdt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shmdt(SB) - -GLOBL ·libc_shmdt_trampoline_addr(SB), RODATA, $8 -DATA ·libc_shmdt_trampoline_addr(SB)/8, $libc_shmdt_trampoline<>(SB) - -TEXT libc_shmget_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shmget(SB) - -GLOBL ·libc_shmget_trampoline_addr(SB), RODATA, $8 -DATA ·libc_shmget_trampoline_addr(SB)/8, $libc_shmget_trampoline<>(SB) - -TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_access(SB) - -GLOBL ·libc_access_trampoline_addr(SB), RODATA, $8 -DATA ·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB) - -TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_adjtime(SB) - -GLOBL ·libc_adjtime_trampoline_addr(SB), RODATA, $8 -DATA ·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB) - -TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chdir(SB) - -GLOBL ·libc_chdir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB) - -TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chflags(SB) - -GLOBL ·libc_chflags_trampoline_addr(SB), RODATA, $8 -DATA ·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB) - -TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chmod(SB) - -GLOBL ·libc_chmod_trampoline_addr(SB), RODATA, $8 -DATA ·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB) - -TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chown(SB) - -GLOBL ·libc_chown_trampoline_addr(SB), RODATA, $8 -DATA ·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB) - -TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chroot(SB) - -GLOBL ·libc_chroot_trampoline_addr(SB), RODATA, $8 -DATA ·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB) - -TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_clock_gettime(SB) - -GLOBL ·libc_clock_gettime_trampoline_addr(SB), RODATA, $8 -DATA ·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB) - -TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_close(SB) - -GLOBL ·libc_close_trampoline_addr(SB), RODATA, $8 -DATA ·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB) - -TEXT libc_clonefile_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_clonefile(SB) - -GLOBL ·libc_clonefile_trampoline_addr(SB), RODATA, $8 -DATA ·libc_clonefile_trampoline_addr(SB)/8, $libc_clonefile_trampoline<>(SB) - -TEXT libc_clonefileat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_clonefileat(SB) - -GLOBL ·libc_clonefileat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_clonefileat_trampoline_addr(SB)/8, $libc_clonefileat_trampoline<>(SB) - -TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup(SB) - -GLOBL ·libc_dup_trampoline_addr(SB), RODATA, $8 -DATA ·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB) - -TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup2(SB) - -GLOBL ·libc_dup2_trampoline_addr(SB), RODATA, $8 -DATA ·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB) - -TEXT libc_exchangedata_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_exchangedata(SB) - -GLOBL ·libc_exchangedata_trampoline_addr(SB), RODATA, $8 -DATA ·libc_exchangedata_trampoline_addr(SB)/8, $libc_exchangedata_trampoline<>(SB) - -TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_exit(SB) - -GLOBL ·libc_exit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB) - -TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_faccessat(SB) - -GLOBL ·libc_faccessat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB) - -TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchdir(SB) - -GLOBL ·libc_fchdir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB) - -TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchflags(SB) - -GLOBL ·libc_fchflags_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB) - -TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmod(SB) - -GLOBL ·libc_fchmod_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB) - -TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmodat(SB) - -GLOBL ·libc_fchmodat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB) - -TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchown(SB) - -GLOBL ·libc_fchown_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB) - -TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchownat(SB) - -GLOBL ·libc_fchownat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB) - -TEXT libc_fclonefileat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fclonefileat(SB) - -GLOBL ·libc_fclonefileat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fclonefileat_trampoline_addr(SB)/8, $libc_fclonefileat_trampoline<>(SB) - -TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_flock(SB) - -GLOBL ·libc_flock_trampoline_addr(SB), RODATA, $8 -DATA ·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB) - -TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fpathconf(SB) - -GLOBL ·libc_fpathconf_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB) - -TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fsync(SB) - -GLOBL ·libc_fsync_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB) - -TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ftruncate(SB) - -GLOBL ·libc_ftruncate_trampoline_addr(SB), RODATA, $8 -DATA ·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB) - -TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getcwd(SB) - -GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB) - -TEXT libc_getdtablesize_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getdtablesize(SB) - -GLOBL ·libc_getdtablesize_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getdtablesize_trampoline_addr(SB)/8, $libc_getdtablesize_trampoline<>(SB) - -TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getegid(SB) - -GLOBL ·libc_getegid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB) - -TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_geteuid(SB) - -GLOBL ·libc_geteuid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB) - -TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgid(SB) - -GLOBL ·libc_getgid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB) - -TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgid(SB) - -GLOBL ·libc_getpgid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB) - -TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgrp(SB) - -GLOBL ·libc_getpgrp_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB) - -TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpid(SB) - -GLOBL ·libc_getpid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB) - -TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getppid(SB) - -GLOBL ·libc_getppid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB) - -TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpriority(SB) - -GLOBL ·libc_getpriority_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB) - -TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrlimit(SB) - -GLOBL ·libc_getrlimit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB) - -TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrusage(SB) - -GLOBL ·libc_getrusage_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB) - -TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsid(SB) - -GLOBL ·libc_getsid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB) - -TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_gettimeofday(SB) - -GLOBL ·libc_gettimeofday_trampoline_addr(SB), RODATA, $8 -DATA ·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB) - -TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getuid(SB) - -GLOBL ·libc_getuid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB) - -TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_issetugid(SB) - -GLOBL ·libc_issetugid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB) - -TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kqueue(SB) - -GLOBL ·libc_kqueue_trampoline_addr(SB), RODATA, $8 -DATA ·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB) - -TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lchown(SB) - -GLOBL ·libc_lchown_trampoline_addr(SB), RODATA, $8 -DATA ·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB) - -TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_link(SB) - -GLOBL ·libc_link_trampoline_addr(SB), RODATA, $8 -DATA ·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB) - -TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_linkat(SB) - -GLOBL ·libc_linkat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB) - -TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_listen(SB) - -GLOBL ·libc_listen_trampoline_addr(SB), RODATA, $8 -DATA ·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB) - -TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdir(SB) - -GLOBL ·libc_mkdir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB) - -TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdirat(SB) - -GLOBL ·libc_mkdirat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB) - -TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkfifo(SB) - -GLOBL ·libc_mkfifo_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB) - -TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mknod(SB) - -GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB) - -TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mount(SB) - -GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) - -TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_open(SB) - -GLOBL ·libc_open_trampoline_addr(SB), RODATA, $8 -DATA ·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB) - -TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_openat(SB) - -GLOBL ·libc_openat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB) - -TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pathconf(SB) - -GLOBL ·libc_pathconf_trampoline_addr(SB), RODATA, $8 -DATA ·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB) - -TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pread(SB) - -GLOBL ·libc_pread_trampoline_addr(SB), RODATA, $8 -DATA ·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB) - -TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pwrite(SB) - -GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8 -DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB) - -TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_read(SB) - -GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8 -DATA ·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB) - -TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlink(SB) - -GLOBL ·libc_readlink_trampoline_addr(SB), RODATA, $8 -DATA ·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB) - -TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlinkat(SB) - -GLOBL ·libc_readlinkat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB) - -TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rename(SB) - -GLOBL ·libc_rename_trampoline_addr(SB), RODATA, $8 -DATA ·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB) - -TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_renameat(SB) - -GLOBL ·libc_renameat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB) - -TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_revoke(SB) - -GLOBL ·libc_revoke_trampoline_addr(SB), RODATA, $8 -DATA ·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB) - -TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rmdir(SB) - -GLOBL ·libc_rmdir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB) - -TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lseek(SB) - -GLOBL ·libc_lseek_trampoline_addr(SB), RODATA, $8 -DATA ·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB) - -TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_select(SB) - -GLOBL ·libc_select_trampoline_addr(SB), RODATA, $8 -DATA ·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB) - -TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setegid(SB) - -GLOBL ·libc_setegid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB) - -TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_seteuid(SB) - -GLOBL ·libc_seteuid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB) - -TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgid(SB) - -GLOBL ·libc_setgid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB) - -TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setlogin(SB) - -GLOBL ·libc_setlogin_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB) - -TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpgid(SB) - -GLOBL ·libc_setpgid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB) - -TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpriority(SB) - -GLOBL ·libc_setpriority_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB) - -TEXT libc_setprivexec_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setprivexec(SB) - -GLOBL ·libc_setprivexec_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setprivexec_trampoline_addr(SB)/8, $libc_setprivexec_trampoline<>(SB) - -TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setregid(SB) - -GLOBL ·libc_setregid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB) - -TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setreuid(SB) - -GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB) - -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) - -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) - -TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsid(SB) - -GLOBL ·libc_setsid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB) - -TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_settimeofday(SB) - -GLOBL ·libc_settimeofday_trampoline_addr(SB), RODATA, $8 -DATA ·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB) - -TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setuid(SB) - -GLOBL ·libc_setuid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB) - -TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlink(SB) - -GLOBL ·libc_symlink_trampoline_addr(SB), RODATA, $8 -DATA ·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB) - -TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlinkat(SB) - -GLOBL ·libc_symlinkat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB) - -TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sync(SB) - -GLOBL ·libc_sync_trampoline_addr(SB), RODATA, $8 -DATA ·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB) - -TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_truncate(SB) - -GLOBL ·libc_truncate_trampoline_addr(SB), RODATA, $8 -DATA ·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB) - -TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_umask(SB) - -GLOBL ·libc_umask_trampoline_addr(SB), RODATA, $8 -DATA ·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB) - -TEXT libc_undelete_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_undelete(SB) - -GLOBL ·libc_undelete_trampoline_addr(SB), RODATA, $8 -DATA ·libc_undelete_trampoline_addr(SB)/8, $libc_undelete_trampoline<>(SB) - -TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlink(SB) - -GLOBL ·libc_unlink_trampoline_addr(SB), RODATA, $8 -DATA ·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB) - -TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlinkat(SB) - -GLOBL ·libc_unlinkat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB) - -TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unmount(SB) - -GLOBL ·libc_unmount_trampoline_addr(SB), RODATA, $8 -DATA ·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB) - -TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_write(SB) - -GLOBL ·libc_write_trampoline_addr(SB), RODATA, $8 -DATA ·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB) - -TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mmap(SB) - -GLOBL ·libc_mmap_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB) - -TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munmap(SB) - -GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 -DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) - -TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstat(SB) - -GLOBL ·libc_fstat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB) - -TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatat(SB) - -GLOBL ·libc_fstatat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB) - -TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatfs(SB) - -GLOBL ·libc_fstatfs_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB) - -TEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getfsstat(SB) - -GLOBL ·libc_getfsstat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getfsstat_trampoline_addr(SB)/8, $libc_getfsstat_trampoline<>(SB) - -TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lstat(SB) - -GLOBL ·libc_lstat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB) - -TEXT libc_ptrace_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ptrace(SB) - -GLOBL ·libc_ptrace_trampoline_addr(SB), RODATA, $8 -DATA ·libc_ptrace_trampoline_addr(SB)/8, $libc_ptrace_trampoline<>(SB) - -TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_stat(SB) - -GLOBL ·libc_stat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB) - -TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_statfs(SB) - -GLOBL ·libc_statfs_trampoline_addr(SB), RODATA, $8 -DATA ·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go deleted file mode 100644 index 1b6eedf..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go +++ /dev/null @@ -1,1679 +0,0 @@ -// go run mksyscall.go -dragonfly -tags dragonfly,amd64 syscall_bsd.go syscall_dragonfly.go syscall_dragonfly_amd64.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build dragonfly && amd64 -// +build dragonfly,amd64 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) - wpid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(s int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, timeval *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Madvise(b []byte, behav int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe() (r int, w int, err error) { - r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) - r = int(r0) - w = int(r1) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe2(p *[2]_C_int, flags int) (r int, w int, err error) { - r0, r1, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) - r = int(r0) - w = int(r1) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func extpread(fd int, p []byte, flags int, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EXTPREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(offset), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EXTPWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(offset), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getcwd(buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { - _p0 = unsafe.Pointer(&mib[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chflags(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chmod(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(fd int) (nfd int, err error) { - r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup2(from int, to int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - Syscall(SYS_EXIT, uintptr(code), 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchflags(fd int, flags int) (err error) { - _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Flock(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, stat *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsync(fd int) (err error) { - _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getdents(fd int, buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getdtablesize() (size int) { - r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) - size = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgrp() (pgrp int) { - r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) - pgrp = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) - pid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) - ppid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Issetugid() (tainted bool) { - r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) - tainted = bool(r0 != 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kill(pid int, signum syscall.Signal) (err error) { - _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kqueue() (fd int, err error) { - r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Link(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, backlog int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdir(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdirat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifo(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknod(path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknodat(fd int, path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Open(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pathconf(path string, name int) (val int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlink(path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rename(from string, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(fromfd int, from string, tofd int, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Revoke(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rmdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) - newoffset = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setegid(egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seteuid(euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setgid(gid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setlogin(name string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(name) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) - pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setuid(uid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, stat *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlink(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() (err error) { - _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(newmask int) (oldmask int) { - r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) - oldmask = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Undelete(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlink(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlinkat(dirfd int, path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unmount(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go deleted file mode 100644 index 039c4aa..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go +++ /dev/null @@ -1,1889 +0,0 @@ -// go run mksyscall.go -l32 -tags freebsd,386 syscall_bsd.go syscall_freebsd.go syscall_freebsd_386.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build freebsd && 386 -// +build freebsd,386 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) - wpid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(s int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, timeval *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Madvise(b []byte, behav int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe2(p *[2]_C_int, flags int) (err error) { - _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getcwd(buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { - _p0 = unsafe.Pointer(&mib[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ptrace(request int, pid int, addr uintptr, data int) (err error) { - _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func CapEnter() (err error) { - _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func capRightsGet(version int, fd int, rightsp *CapRights) (err error) { - _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func capRightsLimit(fd int, rightsp *CapRights) (err error) { - _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chflags(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chmod(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(fd int) (nfd int, err error) { - r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup2(from int, to int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - Syscall(SYS_EXIT, uintptr(code), 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchflags(fd int, flags int) (err error) { - _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Flock(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, stat *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsync(fd int) (err error) { - _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getdtablesize() (size int) { - r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) - size = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgrp() (pgrp int) { - r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) - pgrp = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) - pid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) - ppid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Issetugid() (tainted bool) { - r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) - tainted = bool(r0 != 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kill(pid int, signum syscall.Signal) (err error) { - _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kqueue() (fd int, err error) { - r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Link(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, backlog int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdir(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdirat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifo(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknodat(fd int, path string, mode uint32, dev uint64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), uintptr(dev>>32), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Open(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pathconf(path string, name int) (val int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlink(path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rename(from string, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(fromfd int, from string, tofd int, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Revoke(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rmdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0) - newoffset = int64(int64(r1)<<32 | int64(r0)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setegid(egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seteuid(euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setgid(gid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setlogin(name string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(name) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) - pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setuid(uid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, stat *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlink(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() (err error) { - _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(newmask int) (oldmask int) { - r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) - oldmask = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Undelete(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlink(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlinkat(dirfd int, path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unmount(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go deleted file mode 100644 index 0535d3c..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go +++ /dev/null @@ -1,1889 +0,0 @@ -// go run mksyscall.go -tags freebsd,amd64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_amd64.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build freebsd && amd64 -// +build freebsd,amd64 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) - wpid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(s int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, timeval *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Madvise(b []byte, behav int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe2(p *[2]_C_int, flags int) (err error) { - _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getcwd(buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { - _p0 = unsafe.Pointer(&mib[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ptrace(request int, pid int, addr uintptr, data int) (err error) { - _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func CapEnter() (err error) { - _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func capRightsGet(version int, fd int, rightsp *CapRights) (err error) { - _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func capRightsLimit(fd int, rightsp *CapRights) (err error) { - _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chflags(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chmod(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(fd int) (nfd int, err error) { - r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup2(from int, to int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - Syscall(SYS_EXIT, uintptr(code), 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchflags(fd int, flags int) (err error) { - _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Flock(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, stat *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsync(fd int) (err error) { - _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getdtablesize() (size int) { - r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) - size = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgrp() (pgrp int) { - r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) - pgrp = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) - pid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) - ppid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Issetugid() (tainted bool) { - r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) - tainted = bool(r0 != 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kill(pid int, signum syscall.Signal) (err error) { - _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kqueue() (fd int, err error) { - r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Link(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, backlog int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdir(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdirat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifo(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknodat(fd int, path string, mode uint32, dev uint64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Open(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pathconf(path string, name int) (val int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlink(path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rename(from string, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(fromfd int, from string, tofd int, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Revoke(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rmdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) - newoffset = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setegid(egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seteuid(euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setgid(gid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setlogin(name string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(name) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) - pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setuid(uid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, stat *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlink(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() (err error) { - _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(newmask int) (oldmask int) { - r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) - oldmask = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Undelete(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlink(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlinkat(dirfd int, path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unmount(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go deleted file mode 100644 index 1018b52..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go +++ /dev/null @@ -1,1889 +0,0 @@ -// go run mksyscall.go -l32 -arm -tags freebsd,arm syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build freebsd && arm -// +build freebsd,arm - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) - wpid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(s int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, timeval *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Madvise(b []byte, behav int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe2(p *[2]_C_int, flags int) (err error) { - _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getcwd(buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { - _p0 = unsafe.Pointer(&mib[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ptrace(request int, pid int, addr uintptr, data int) (err error) { - _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func CapEnter() (err error) { - _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func capRightsGet(version int, fd int, rightsp *CapRights) (err error) { - _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func capRightsLimit(fd int, rightsp *CapRights) (err error) { - _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chflags(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chmod(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(fd int) (nfd int, err error) { - r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup2(from int, to int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - Syscall(SYS_EXIT, uintptr(code), 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchflags(fd int, flags int) (err error) { - _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Flock(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, stat *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsync(fd int) (err error) { - _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getdtablesize() (size int) { - r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) - size = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgrp() (pgrp int) { - r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) - pgrp = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) - pid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) - ppid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Issetugid() (tainted bool) { - r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) - tainted = bool(r0 != 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kill(pid int, signum syscall.Signal) (err error) { - _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kqueue() (fd int, err error) { - r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Link(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, backlog int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdir(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdirat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifo(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknodat(fd int, path string, mode uint32, dev uint64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, uintptr(dev), uintptr(dev>>32)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Open(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pathconf(path string, name int) (val int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlink(path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rename(from string, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(fromfd int, from string, tofd int, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Revoke(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rmdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) - newoffset = int64(int64(r1)<<32 | int64(r0)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setegid(egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seteuid(euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setgid(gid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setlogin(name string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(name) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) - pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setuid(uid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, stat *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlink(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() (err error) { - _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(newmask int) (oldmask int) { - r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) - oldmask = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Undelete(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlink(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlinkat(dirfd int, path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unmount(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go deleted file mode 100644 index 3802f4b..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go +++ /dev/null @@ -1,1889 +0,0 @@ -// go run mksyscall.go -tags freebsd,arm64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm64.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build freebsd && arm64 -// +build freebsd,arm64 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) - wpid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(s int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, timeval *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Madvise(b []byte, behav int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe2(p *[2]_C_int, flags int) (err error) { - _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getcwd(buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { - _p0 = unsafe.Pointer(&mib[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ptrace(request int, pid int, addr uintptr, data int) (err error) { - _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func CapEnter() (err error) { - _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func capRightsGet(version int, fd int, rightsp *CapRights) (err error) { - _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func capRightsLimit(fd int, rightsp *CapRights) (err error) { - _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chflags(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chmod(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(fd int) (nfd int, err error) { - r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup2(from int, to int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - Syscall(SYS_EXIT, uintptr(code), 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchflags(fd int, flags int) (err error) { - _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Flock(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, stat *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsync(fd int) (err error) { - _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getdtablesize() (size int) { - r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) - size = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgrp() (pgrp int) { - r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) - pgrp = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) - pid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) - ppid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Issetugid() (tainted bool) { - r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) - tainted = bool(r0 != 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kill(pid int, signum syscall.Signal) (err error) { - _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kqueue() (fd int, err error) { - r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Link(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, backlog int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdir(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdirat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifo(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknodat(fd int, path string, mode uint32, dev uint64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Open(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pathconf(path string, name int) (val int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlink(path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rename(from string, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(fromfd int, from string, tofd int, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Revoke(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rmdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) - newoffset = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setegid(egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seteuid(euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setgid(gid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setlogin(name string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(name) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) - pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setuid(uid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, stat *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlink(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() (err error) { - _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(newmask int) (oldmask int) { - r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) - oldmask = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Undelete(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlink(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlinkat(dirfd int, path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unmount(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go deleted file mode 100644 index 8a2db7d..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go +++ /dev/null @@ -1,1889 +0,0 @@ -// go run mksyscall.go -tags freebsd,riscv64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_riscv64.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build freebsd && riscv64 -// +build freebsd,riscv64 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) - wpid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(s int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, timeval *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Madvise(b []byte, behav int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe2(p *[2]_C_int, flags int) (err error) { - _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getcwd(buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { - _p0 = unsafe.Pointer(&mib[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ptrace(request int, pid int, addr uintptr, data int) (err error) { - _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func CapEnter() (err error) { - _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func capRightsGet(version int, fd int, rightsp *CapRights) (err error) { - _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func capRightsLimit(fd int, rightsp *CapRights) (err error) { - _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chflags(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chmod(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(fd int) (nfd int, err error) { - r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup2(from int, to int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - Syscall(SYS_EXIT, uintptr(code), 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchflags(fd int, flags int) (err error) { - _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Flock(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, stat *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsync(fd int) (err error) { - _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getdtablesize() (size int) { - r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) - size = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgrp() (pgrp int) { - r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) - pgrp = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) - pid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) - ppid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Issetugid() (tainted bool) { - r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) - tainted = bool(r0 != 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kill(pid int, signum syscall.Signal) (err error) { - _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kqueue() (fd int, err error) { - r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Link(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, backlog int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdir(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdirat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifo(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknodat(fd int, path string, mode uint32, dev uint64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Open(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pathconf(path string, name int) (val int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlink(path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rename(from string, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(fromfd int, from string, tofd int, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Revoke(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rmdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) - newoffset = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setegid(egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seteuid(euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setgid(gid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setlogin(name string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(name) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) - pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setuid(uid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, stat *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlink(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() (err error) { - _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(newmask int) (oldmask int) { - r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) - oldmask = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Undelete(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlink(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlinkat(dirfd int, path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unmount(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go deleted file mode 100644 index af5cb06..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go +++ /dev/null @@ -1,128 +0,0 @@ -// go run mksyscall_solaris.go -illumos -tags illumos,amd64 syscall_illumos.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build illumos && amd64 -// +build illumos,amd64 - -package unix - -import ( - "unsafe" -) - -//go:cgo_import_dynamic libc_readv readv "libc.so" -//go:cgo_import_dynamic libc_preadv preadv "libc.so" -//go:cgo_import_dynamic libc_writev writev "libc.so" -//go:cgo_import_dynamic libc_pwritev pwritev "libc.so" -//go:cgo_import_dynamic libc_accept4 accept4 "libsocket.so" -//go:cgo_import_dynamic libc_putmsg putmsg "libc.so" -//go:cgo_import_dynamic libc_getmsg getmsg "libc.so" - -//go:linkname procreadv libc_readv -//go:linkname procpreadv libc_preadv -//go:linkname procwritev libc_writev -//go:linkname procpwritev libc_pwritev -//go:linkname procaccept4 libc_accept4 -//go:linkname procputmsg libc_putmsg -//go:linkname procgetmsg libc_getmsg - -var ( - procreadv, - procpreadv, - procwritev, - procpwritev, - procaccept4, - procputmsg, - procgetmsg syscallFunc -) - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readv(fd int, iovs []Iovec) (n int, err error) { - var _p0 *Iovec - if len(iovs) > 0 { - _p0 = &iovs[0] - } - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procreadv)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), 0, 0, 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func preadv(fd int, iovs []Iovec, off int64) (n int, err error) { - var _p0 *Iovec - if len(iovs) > 0 { - _p0 = &iovs[0] - } - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpreadv)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), uintptr(off), 0, 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writev(fd int, iovs []Iovec) (n int, err error) { - var _p0 *Iovec - if len(iovs) > 0 { - _p0 = &iovs[0] - } - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwritev)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), 0, 0, 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwritev(fd int, iovs []Iovec, off int64) (n int, err error) { - var _p0 *Iovec - if len(iovs) > 0 { - _p0 = &iovs[0] - } - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpwritev)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), uintptr(off), 0, 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procaccept4)), 4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - fd = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func putmsg(fd int, clptr *strbuf, dataptr *strbuf, flags int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procputmsg)), 4, uintptr(fd), uintptr(unsafe.Pointer(clptr)), uintptr(unsafe.Pointer(dataptr)), uintptr(flags), 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getmsg(fd int, clptr *strbuf, dataptr *strbuf, flags *int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetmsg)), 4, uintptr(fd), uintptr(unsafe.Pointer(clptr)), uintptr(unsafe.Pointer(dataptr)), uintptr(unsafe.Pointer(flags)), 0, 0) - if e1 != 0 { - err = e1 - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/vendor/golang.org/x/sys/unix/zsyscall_linux.go deleted file mode 100644 index bc4a275..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux.go +++ /dev/null @@ -1,2153 +0,0 @@ -// Code generated by mkmerge; DO NOT EDIT. - -//go:build linux -// +build linux - -package unix - -import ( - "syscall" - "unsafe" -) - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) { - r0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fchmodat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { - _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func openat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_OPENAT2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(open_how)), uintptr(size), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe2(p *[2]_C_int, flags int) (err error) { - _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { - r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlinkat(dirfd int, path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getcwd(buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) - wpid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Waitid(idType int, id int, info *Siginfo, options int, rusage *Rusage) (err error) { - _, _, e1 := Syscall6(SYS_WAITID, uintptr(idType), uintptr(id), uintptr(unsafe.Pointer(info)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { - r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func keyctlJoin(cmd int, arg2 string) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(arg2) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(arg3) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(arg4) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { - var _p0 unsafe.Pointer - if len(payload) > 0 { - _p0 = unsafe.Pointer(&payload[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func keyctlRestrictKeyringByType(cmd int, arg2 int, keyType string, restriction string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(keyType) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(restriction) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func keyctlRestrictKeyring(cmd int, arg2 int) (err error) { - _, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { - _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(arg) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(source) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(target) - if err != nil { - return - } - var _p2 *byte - _p2, err = BytePtrFromString(fstype) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mountSetattr(dirfd int, pathname string, flags uint, attr *MountAttr, size uintptr) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(pathname) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_MOUNT_SETATTR, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(unsafe.Pointer(attr)), uintptr(size), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Acct(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(keyType) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(description) - if err != nil { - return - } - var _p2 unsafe.Pointer - if len(payload) > 0 { - _p2 = unsafe.Pointer(&payload[0]) - } else { - _p2 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) - id = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Adjtimex(buf *Timex) (state int, err error) { - r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) - state = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Capget(hdr *CapUserHeader, data *CapUserData) (err error) { - _, _, e1 := RawSyscall(SYS_CAPGET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Capset(hdr *CapUserHeader, data *CapUserData) (err error) { - _, _, e1 := RawSyscall(SYS_CAPSET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ClockGetres(clockid int32, res *Timespec) (err error) { - _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ClockGettime(clockid int32, time *Timespec) (err error) { - _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) { - _, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func CloseRange(first uint, last uint, flags uint) (err error) { - _, _, e1 := Syscall(SYS_CLOSE_RANGE, uintptr(first), uintptr(last), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { - r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func DeleteModule(name string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(name) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(oldfd int) (fd int, err error) { - r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup3(oldfd int, newfd int, flags int) (err error) { - _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollCreate1(flag int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { - _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Eventfd(initval uint, flags int) (fd int, err error) { - r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fdatasync(fd int) (err error) { - _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attr) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(dest) > 0 { - _p1 = unsafe.Pointer(&dest[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0) - sz = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func FinitModule(fd int, params string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(params) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Flistxattr(fd int, dest []byte) (sz int, err error) { - var _p0 unsafe.Pointer - if len(dest) > 0 { - _p0 = unsafe.Pointer(&dest[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest))) - sz = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Flock(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fremovexattr(fd int, attr string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attr) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attr) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(dest) > 0 { - _p1 = unsafe.Pointer(&dest[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsync(fd int) (err error) { - _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsmount(fd int, flags int, mountAttrs int) (fsfd int, err error) { - r0, _, e1 := Syscall(SYS_FSMOUNT, uintptr(fd), uintptr(flags), uintptr(mountAttrs)) - fsfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsopen(fsName string, flags int) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(fsName) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_FSOPEN, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fspick(dirfd int, pathName string, flags int) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(pathName) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_FSPICK, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getdents(fd int, buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) - pid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (ppid int) { - r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) - ppid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrandom(buf []byte, flags int) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettid() (tid int) { - r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) - tid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getxattr(path string, attr string, dest []byte) (sz int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attr) - if err != nil { - return - } - var _p2 unsafe.Pointer - if len(dest) > 0 { - _p2 = unsafe.Pointer(&dest[0]) - } else { - _p2 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) - sz = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func InitModule(moduleImage []byte, params string) (err error) { - var _p0 unsafe.Pointer - if len(moduleImage) > 0 { - _p0 = unsafe.Pointer(&moduleImage[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - var _p1 *byte - _p1, err = BytePtrFromString(params) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(pathname) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) - watchdesc = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func InotifyInit1(flags int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { - r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) - success = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kill(pid int, sig syscall.Signal) (err error) { - _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Klogctl(typ int, buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attr) - if err != nil { - return - } - var _p2 unsafe.Pointer - if len(dest) > 0 { - _p2 = unsafe.Pointer(&dest[0]) - } else { - _p2 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) - sz = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listxattr(path string, dest []byte) (sz int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(dest) > 0 { - _p1 = unsafe.Pointer(&dest[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) - sz = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Llistxattr(path string, dest []byte) (sz int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(dest) > 0 { - _p1 = unsafe.Pointer(&dest[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) - sz = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lremovexattr(path string, attr string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attr) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attr) - if err != nil { - return - } - var _p2 unsafe.Pointer - if len(data) > 0 { - _p2 = unsafe.Pointer(&data[0]) - } else { - _p2 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func MemfdCreate(name string, flags int) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(name) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdirat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func MoveMount(fromDirfd int, fromPathName string, toDirfd int, toPathName string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(fromPathName) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(toPathName) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_MOVE_MOUNT, uintptr(fromDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(toDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func OpenTree(dfd int, fileName string, flags uint) (r int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(fileName) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_OPEN_TREE, uintptr(dfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - r = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) { - r0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func PivotRoot(newroot string, putold string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(newroot) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(putold) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { - _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { - _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { - r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Removexattr(path string, attr string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attr) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(keyType) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(description) - if err != nil { - return - } - var _p2 *byte - _p2, err = BytePtrFromString(callback) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) - id = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setdomainname(p []byte) (err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sethostname(p []byte) (err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) - pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Settimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setns(fd int, nstype int) (err error) { - _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setxattr(path string, attr string, data []byte, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attr) - if err != nil { - return - } - var _p2 unsafe.Pointer - if len(data) > 0 { - _p2 = unsafe.Pointer(&data[0]) - } else { - _p2 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) { - r0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0) - newfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() { - SyscallNoError(SYS_SYNC, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Syncfs(fd int) (err error) { - _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sysinfo(info *Sysinfo_t) (err error) { - _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func TimerfdCreate(clockid int, flags int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_TIMERFD_CREATE, uintptr(clockid), uintptr(flags), 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func TimerfdGettime(fd int, currValue *ItimerSpec) (err error) { - _, _, e1 := RawSyscall(SYS_TIMERFD_GETTIME, uintptr(fd), uintptr(unsafe.Pointer(currValue)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func TimerfdSettime(fd int, flags int, newValue *ItimerSpec, oldValue *ItimerSpec) (err error) { - _, _, e1 := RawSyscall6(SYS_TIMERFD_SETTIME, uintptr(fd), uintptr(flags), uintptr(unsafe.Pointer(newValue)), uintptr(unsafe.Pointer(oldValue)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { - _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Times(tms *Tms) (ticks uintptr, err error) { - r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) - ticks = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(mask int) (oldmask int) { - r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) - oldmask = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Uname(buf *Utsname) (err error) { - _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unmount(target string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(target) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unshare(flags int) (err error) { - _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func exitThread(code int) (err error) { - _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readlen(fd int, p *byte, np int) (n int, err error) { - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writelen(fd int, p *byte, np int) (n int, err error) { - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readv(fd int, iovs []Iovec) (n int, err error) { - var _p0 unsafe.Pointer - if len(iovs) > 0 { - _p0 = unsafe.Pointer(&iovs[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READV, uintptr(fd), uintptr(_p0), uintptr(len(iovs))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writev(fd int, iovs []Iovec) (n int, err error) { - var _p0 unsafe.Pointer - if len(iovs) > 0 { - _p0 = unsafe.Pointer(&iovs[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_WRITEV, uintptr(fd), uintptr(_p0), uintptr(len(iovs))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func preadv(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) { - var _p0 unsafe.Pointer - if len(iovs) > 0 { - _p0 = unsafe.Pointer(&iovs[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREADV, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwritev(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) { - var _p0 unsafe.Pointer - if len(iovs) > 0 { - _p0 = unsafe.Pointer(&iovs[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITEV, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func preadv2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) { - var _p0 unsafe.Pointer - if len(iovs) > 0 { - _p0 = unsafe.Pointer(&iovs[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREADV2, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwritev2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) { - var _p0 unsafe.Pointer - if len(iovs) > 0 { - _p0 = unsafe.Pointer(&iovs[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITEV2, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Madvise(b []byte, advice int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func faccessat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Faccessat2(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FACCESSAT2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(pathname) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) { - r0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ProcessVMReadv(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) { - var _p0 unsafe.Pointer - if len(localIov) > 0 { - _p0 = unsafe.Pointer(&localIov[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - var _p1 unsafe.Pointer - if len(remoteIov) > 0 { - _p1 = unsafe.Pointer(&remoteIov[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PROCESS_VM_READV, uintptr(pid), uintptr(_p0), uintptr(len(localIov)), uintptr(_p1), uintptr(len(remoteIov)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ProcessVMWritev(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) { - var _p0 unsafe.Pointer - if len(localIov) > 0 { - _p0 = unsafe.Pointer(&localIov[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - var _p1 unsafe.Pointer - if len(remoteIov) > 0 { - _p1 = unsafe.Pointer(&remoteIov[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PROCESS_VM_WRITEV, uintptr(pid), uintptr(_p0), uintptr(len(localIov)), uintptr(_p1), uintptr(len(remoteIov)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func PidfdOpen(pid int, flags int) (fd int, err error) { - r0, _, e1 := Syscall(SYS_PIDFD_OPEN, uintptr(pid), uintptr(flags), 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func PidfdGetfd(pidfd int, targetfd int, flags int) (fd int, err error) { - r0, _, e1 := Syscall(SYS_PIDFD_GETFD, uintptr(pidfd), uintptr(targetfd), uintptr(flags)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func PidfdSendSignal(pidfd int, sig Signal, info *Siginfo, flags int) (err error) { - _, _, e1 := Syscall6(SYS_PIDFD_SEND_SIGNAL, uintptr(pidfd), uintptr(sig), uintptr(unsafe.Pointer(info)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func shmat(id int, addr uintptr, flag int) (ret uintptr, err error) { - r0, _, e1 := Syscall(SYS_SHMAT, uintptr(id), uintptr(addr), uintptr(flag)) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) { - r0, _, e1 := Syscall(SYS_SHMCTL, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf))) - result = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func shmdt(addr uintptr) (err error) { - _, _, e1 := Syscall(SYS_SHMDT, uintptr(addr), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func shmget(key int, size int, flag int) (id int, err error) { - r0, _, e1 := Syscall(SYS_SHMGET, uintptr(key), uintptr(size), uintptr(flag)) - id = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getitimer(which int, currValue *Itimerval) (err error) { - _, _, e1 := Syscall(SYS_GETITIMER, uintptr(which), uintptr(unsafe.Pointer(currValue)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setitimer(which int, newValue *Itimerval, oldValue *Itimerval) (err error) { - _, _, e1 := Syscall(SYS_SETITIMER, uintptr(which), uintptr(unsafe.Pointer(newValue)), uintptr(unsafe.Pointer(oldValue))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go deleted file mode 100644 index c81b0ad..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go +++ /dev/null @@ -1,497 +0,0 @@ -// go run mksyscall.go -l32 -tags linux,386 syscall_linux.go syscall_linux_386.go syscall_linux_alarm.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build linux && 386 -// +build linux,386 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { - _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { - _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { - r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) - n = int64(int64(r1)<<32 | int64(r0)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall6(SYS_FADVISE64_64, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall(SYS_FTRUNCATE64, uintptr(fd), uintptr(length), uintptr(length>>32)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _ := RawSyscallNoError(SYS_GETEGID32, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (euid int) { - r0, _ := RawSyscallNoError(SYS_GETEUID32, 0, 0, 0) - euid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _ := RawSyscallNoError(SYS_GETGID32, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _ := RawSyscallNoError(SYS_GETUID32, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ioperm(from int, num int, on int) (err error) { - _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Iopl(level int) (err error) { - _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LCHOWN32, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) - written = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsgid(gid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsuid(uid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { - _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ustat(dev int, ubuf *Ustat_t) (err error) { - _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(n int, list *_Gid_t) (nn int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - nn = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(n int, list *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { - r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) - xaddr = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pause() (err error) { - _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getrlimit(resource int, rlim *rlimit32) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setrlimit(resource int, rlim *rlimit32) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Time(t *Time_t) (tt Time_t, err error) { - r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) - tt = Time_t(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Utime(path string, buf *Utimbuf) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Alarm(seconds uint) (remaining uint, err error) { - r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) - remaining = uint(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go deleted file mode 100644 index 2206bce..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go +++ /dev/null @@ -1,664 +0,0 @@ -// go run mksyscall.go -tags linux,amd64 syscall_linux.go syscall_linux_amd64.go syscall_linux_alarm.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build linux && amd64 -// +build linux,amd64 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { - _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { - _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { - r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) - n = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, buf *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (euid int) { - r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) - euid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ioperm(from int, num int, on int) (err error) { - _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Iopl(level int) (err error) { - _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, n int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func MemfdSecret(flags int) (fd int, err error) { - r0, _, e1 := Syscall(SYS_MEMFD_SECRET, uintptr(flags), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pause() (err error) { - _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (off int64, err error) { - r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) - off = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) - written = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsgid(gid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsuid(uid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { - r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) - n = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, buf *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { - _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ustat(dev int, ubuf *Ustat_t) (err error) { - _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(n int, list *_Gid_t) (nn int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - nn = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(n int, list *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { - r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) - xaddr = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Utime(path string, buf *Utimbuf) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(cmdline) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Alarm(seconds uint) (remaining uint, err error) { - r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) - remaining = uint(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go deleted file mode 100644 index edf6b39..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go +++ /dev/null @@ -1,612 +0,0 @@ -// go run mksyscall.go -l32 -arm -tags linux,arm syscall_linux.go syscall_linux_arm.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build linux && arm -// +build linux,arm - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { - _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { - _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { - r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) - n = int64(int64(r1)<<32 | int64(r0)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(n int, list *_Gid_t) (nn int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - nn = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(n int, list *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _ := RawSyscallNoError(SYS_GETEGID32, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (euid int) { - r0, _ := RawSyscallNoError(SYS_GETEUID32, 0, 0, 0) - euid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _ := RawSyscallNoError(SYS_GETGID32, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _ := RawSyscallNoError(SYS_GETUID32, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LCHOWN32, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, n int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pause() (err error) { - _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) - written = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsgid(gid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsuid(uid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ustat(dev int, ubuf *Ustat_t) (err error) { - _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { - r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) - xaddr = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getrlimit(resource int, rlim *rlimit32) (err error) { - _, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setrlimit(resource int, rlim *rlimit32) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func armSyncFileRange(fd int, flags int, off int64, n int64) (err error) { - _, _, e1 := Syscall6(SYS_ARM_SYNC_FILE_RANGE, uintptr(fd), uintptr(flags), uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(cmdline) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go deleted file mode 100644 index 190609f..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go +++ /dev/null @@ -1,563 +0,0 @@ -// go run mksyscall.go -tags linux,arm64 syscall_linux.go syscall_linux_arm64.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build linux && arm64 -// +build linux,arm64 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { - _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { - _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { - r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) - n = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, buf *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (euid int) { - r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) - euid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, n int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func MemfdSecret(flags int) (fd int, err error) { - r0, _, e1 := Syscall(SYS_MEMFD_SECRET, uintptr(flags), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (off int64, err error) { - r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) - off = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) - written = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsgid(gid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsuid(uid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { - r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) - n = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, buf *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { - _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(n int, list *_Gid_t) (nn int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - nn = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(n int, list *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { - r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) - xaddr = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(cmdline) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go deleted file mode 100644 index 806ffd1..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go +++ /dev/null @@ -1,487 +0,0 @@ -// go run mksyscall.go -tags linux,loong64 syscall_linux.go syscall_linux_loong64.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build linux && loong64 -// +build linux,loong64 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { - _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { - _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { - r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) - n = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, buf *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (euid int) { - r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) - euid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, n int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (off int64, err error) { - r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) - off = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) - written = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsgid(gid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsuid(uid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { - r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) - n = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, buf *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { - _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(n int, list *_Gid_t) (nn int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - nn = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(n int, list *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { - r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) - xaddr = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(cmdline) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go deleted file mode 100644 index 5f984cb..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go +++ /dev/null @@ -1,664 +0,0 @@ -// go run mksyscall.go -b32 -arm -tags linux,mips syscall_linux.go syscall_linux_mipsx.go syscall_linux_alarm.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build linux && mips -// +build linux,mips - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { - _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask>>32), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { - _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off>>32), uintptr(off), uintptr(len>>32), uintptr(len)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { - r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) - n = int64(int64(r0)<<32 | int64(r1)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset>>32), uintptr(offset), uintptr(length>>32), uintptr(length), uintptr(advice), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length>>32), uintptr(length), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (euid int) { - r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) - euid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, n int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset>>32), uintptr(offset)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset>>32), uintptr(offset)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) - written = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsgid(gid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsuid(uid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { - _, _, e1 := Syscall9(SYS_SYNC_FILE_RANGE, uintptr(fd), 0, uintptr(off>>32), uintptr(off), uintptr(n>>32), uintptr(n), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length>>32), uintptr(length), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ustat(dev int, ubuf *Ustat_t) (err error) { - _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(n int, list *_Gid_t) (nn int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - nn = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(n int, list *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ioperm(from int, num int, on int) (err error) { - _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Iopl(level int) (err error) { - _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Time(t *Time_t) (tt Time_t, err error) { - r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) - tt = Time_t(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Utime(path string, buf *Utimbuf) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pause() (err error) { - _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { - r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) - xaddr = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getrlimit(resource int, rlim *rlimit32) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setrlimit(resource int, rlim *rlimit32) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Alarm(seconds uint) (remaining uint, err error) { - r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) - remaining = uint(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go deleted file mode 100644 index 46fc380..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go +++ /dev/null @@ -1,658 +0,0 @@ -// go run mksyscall.go -tags linux,mips64 syscall_linux.go syscall_linux_mips64x.go syscall_linux_alarm.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build linux && mips64 -// +build linux,mips64 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { - _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { - _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { - r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) - n = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, buf *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (euid int) { - r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) - euid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, n int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pause() (err error) { - _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (off int64, err error) { - r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) - off = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) - written = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsgid(gid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsuid(uid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { - r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) - n = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, buf *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { - _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ustat(dev int, ubuf *Ustat_t) (err error) { - _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(n int, list *_Gid_t) (nn int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - nn = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(n int, list *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { - r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) - xaddr = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Utime(path string, buf *Utimbuf) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fstat(fd int, st *stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(st)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fstatat(dirfd int, path string, st *stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func lstat(path string, st *stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func stat(path string, st *stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Alarm(seconds uint) (remaining uint, err error) { - r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) - remaining = uint(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go deleted file mode 100644 index cbd0d4d..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go +++ /dev/null @@ -1,647 +0,0 @@ -// go run mksyscall.go -tags linux,mips64le syscall_linux.go syscall_linux_mips64x.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build linux && mips64le -// +build linux,mips64le - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { - _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { - _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { - r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) - n = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, buf *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (euid int) { - r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) - euid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, n int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pause() (err error) { - _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (off int64, err error) { - r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) - off = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) - written = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsgid(gid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsuid(uid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { - r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) - n = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, buf *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { - _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ustat(dev int, ubuf *Ustat_t) (err error) { - _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(n int, list *_Gid_t) (nn int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - nn = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(n int, list *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { - r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) - xaddr = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Utime(path string, buf *Utimbuf) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fstat(fd int, st *stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(st)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fstatat(dirfd int, path string, st *stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func lstat(path string, st *stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func stat(path string, st *stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go deleted file mode 100644 index 0c13d15..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go +++ /dev/null @@ -1,664 +0,0 @@ -// go run mksyscall.go -l32 -arm -tags linux,mipsle syscall_linux.go syscall_linux_mipsx.go syscall_linux_alarm.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build linux && mipsle -// +build linux,mipsle - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { - _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { - _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { - r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) - n = int64(int64(r1)<<32 | int64(r0)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (euid int) { - r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) - euid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, n int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) - written = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsgid(gid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsuid(uid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { - _, _, e1 := Syscall9(SYS_SYNC_FILE_RANGE, uintptr(fd), 0, uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ustat(dev int, ubuf *Ustat_t) (err error) { - _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(n int, list *_Gid_t) (nn int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - nn = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(n int, list *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ioperm(from int, num int, on int) (err error) { - _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Iopl(level int) (err error) { - _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Time(t *Time_t) (tt Time_t, err error) { - r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) - tt = Time_t(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Utime(path string, buf *Utimbuf) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pause() (err error) { - _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { - r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) - xaddr = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getrlimit(resource int, rlim *rlimit32) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setrlimit(resource int, rlim *rlimit32) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Alarm(seconds uint) (remaining uint, err error) { - r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) - remaining = uint(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go deleted file mode 100644 index e01432a..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go +++ /dev/null @@ -1,669 +0,0 @@ -// go run mksyscall.go -b32 -tags linux,ppc syscall_linux.go syscall_linux_ppc.go syscall_linux_alarm.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build linux && ppc -// +build linux,ppc - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { - _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask>>32), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { - _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off>>32), uintptr(off), uintptr(len>>32), uintptr(len)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { - r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) - n = int64(int64(r0)<<32 | int64(r1)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall(SYS_FTRUNCATE64, uintptr(fd), uintptr(length>>32), uintptr(length)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (euid int) { - r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) - euid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ioperm(from int, num int, on int) (err error) { - _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Iopl(level int) (err error) { - _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, n int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pause() (err error) { - _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset>>32), uintptr(offset), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset>>32), uintptr(offset), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) - written = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsgid(gid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsuid(uid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), uintptr(length>>32), uintptr(length)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ustat(dev int, ubuf *Ustat_t) (err error) { - _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(n int, list *_Gid_t) (nn int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - nn = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(n int, list *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Time(t *Time_t) (tt Time_t, err error) { - r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) - tt = Time_t(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Utime(path string, buf *Utimbuf) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { - r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) - xaddr = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getrlimit(resource int, rlim *rlimit32) (err error) { - _, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setrlimit(resource int, rlim *rlimit32) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func syncFileRange2(fd int, flags int, off int64, n int64) (err error) { - _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off>>32), uintptr(off), uintptr(n>>32), uintptr(n)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(cmdline) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Alarm(seconds uint) (remaining uint, err error) { - r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) - remaining = uint(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go deleted file mode 100644 index 13c7ee7..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go +++ /dev/null @@ -1,715 +0,0 @@ -// go run mksyscall.go -tags linux,ppc64 syscall_linux.go syscall_linux_ppc64x.go syscall_linux_alarm.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build linux && ppc64 -// +build linux,ppc64 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { - _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { - _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { - r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) - n = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, buf *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (euid int) { - r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) - euid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ioperm(from int, num int, on int) (err error) { - _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Iopl(level int) (err error) { - _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, n int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pause() (err error) { - _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (off int64, err error) { - r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) - off = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) - written = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsgid(gid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsuid(uid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { - r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) - n = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, buf *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ustat(dev int, ubuf *Ustat_t) (err error) { - _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(n int, list *_Gid_t) (nn int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - nn = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(n int, list *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { - r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) - xaddr = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Time(t *Time_t) (tt Time_t, err error) { - r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) - tt = Time_t(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Utime(path string, buf *Utimbuf) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func syncFileRange2(fd int, flags int, off int64, n int64) (err error) { - _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off), uintptr(n), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(cmdline) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Alarm(seconds uint) (remaining uint, err error) { - r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) - remaining = uint(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go deleted file mode 100644 index 02d0c0f..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go +++ /dev/null @@ -1,715 +0,0 @@ -// go run mksyscall.go -tags linux,ppc64le syscall_linux.go syscall_linux_ppc64x.go syscall_linux_alarm.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build linux && ppc64le -// +build linux,ppc64le - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { - _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { - _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { - r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) - n = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, buf *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (euid int) { - r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) - euid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ioperm(from int, num int, on int) (err error) { - _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Iopl(level int) (err error) { - _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, n int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pause() (err error) { - _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (off int64, err error) { - r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) - off = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) - written = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsgid(gid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsuid(uid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { - r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) - n = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, buf *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ustat(dev int, ubuf *Ustat_t) (err error) { - _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(n int, list *_Gid_t) (nn int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - nn = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(n int, list *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { - r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) - xaddr = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Time(t *Time_t) (tt Time_t, err error) { - r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) - tt = Time_t(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Utime(path string, buf *Utimbuf) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func syncFileRange2(fd int, flags int, off int64, n int64) (err error) { - _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off), uintptr(n), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(cmdline) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Alarm(seconds uint) (remaining uint, err error) { - r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) - remaining = uint(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go deleted file mode 100644 index 9fee3b1..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go +++ /dev/null @@ -1,543 +0,0 @@ -// go run mksyscall.go -tags linux,riscv64 syscall_linux.go syscall_linux_riscv64.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build linux && riscv64 -// +build linux,riscv64 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { - _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { - _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { - r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) - n = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, buf *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (euid int) { - r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) - euid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, n int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func MemfdSecret(flags int) (fd int, err error) { - r0, _, e1 := Syscall(SYS_MEMFD_SECRET, uintptr(flags), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (off int64, err error) { - r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) - off = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) - written = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsgid(gid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsuid(uid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { - r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) - n = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, buf *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { - _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(n int, list *_Gid_t) (nn int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - nn = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(n int, list *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { - r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) - xaddr = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(cmdline) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go deleted file mode 100644 index 647bbfe..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go +++ /dev/null @@ -1,506 +0,0 @@ -// go run mksyscall.go -tags linux,s390x syscall_linux.go syscall_linux_s390x.go syscall_linux_alarm.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build linux && s390x -// +build linux,s390x - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { - _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { - _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { - r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) - n = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, buf *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (euid int) { - r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) - euid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pause() (err error) { - _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (off int64, err error) { - r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) - off = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) - written = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsgid(gid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsuid(uid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { - r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) - n = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, buf *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { - _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ustat(dev int, ubuf *Ustat_t) (err error) { - _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(n int, list *_Gid_t) (nn int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - nn = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(n int, list *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Utime(path string, buf *Utimbuf) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(cmdline) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Alarm(seconds uint) (remaining uint, err error) { - r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) - remaining = uint(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go deleted file mode 100644 index ada057f..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go +++ /dev/null @@ -1,659 +0,0 @@ -// go run mksyscall.go -tags linux,sparc64 syscall_linux.go syscall_linux_sparc64.go syscall_linux_alarm.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build linux && sparc64 -// +build linux,sparc64 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { - _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { - _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { - r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) - n = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, buf *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (euid int) { - r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) - euid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, n int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pause() (err error) { - _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (off int64, err error) { - r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) - off = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) - written = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsgid(gid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setfsuid(uid int) (prev int, err error) { - r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) - prev = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { - r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) - n = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, buf *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { - _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { - r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(n int, list *_Gid_t) (nn int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - nn = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(n int, list *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { - r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) - xaddr = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Utime(path string, buf *Utimbuf) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Alarm(seconds uint) (remaining uint, err error) { - r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) - remaining = uint(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go deleted file mode 100644 index 4af561a..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go +++ /dev/null @@ -1,1850 +0,0 @@ -// go run mksyscall.go -l32 -netbsd -tags netbsd,386 syscall_bsd.go syscall_netbsd.go syscall_netbsd_386.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build netbsd && 386 -// +build netbsd,386 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) - wpid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(s int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, timeval *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Madvise(b []byte, behav int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe2(p *[2]_C_int, flags int) (err error) { - _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getdents(fd int, buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getcwd(buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { - _p0 = unsafe.Pointer(&mib[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chflags(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chmod(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(fd int) (nfd int, err error) { - r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup2(from int, to int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup3(from int, to int, flags int) (err error) { - _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - Syscall(SYS_EXIT, uintptr(code), 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), 0, uintptr(length), uintptr(length>>32), uintptr(advice), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchflags(fd int, flags int) (err error) { - _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Flock(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) { - _, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsync(fd int) (err error) { - _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgrp() (pgrp int) { - r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) - pgrp = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) - pid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) - ppid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Issetugid() (tainted bool) { - r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) - tainted = bool(r0 != 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kill(pid int, signum syscall.Signal) (err error) { - _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kqueue() (fd int, err error) { - r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Link(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, backlog int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdir(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdirat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifo(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifoat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknod(path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Open(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pathconf(path string, name int) (val int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlink(path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rename(from string, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(fromfd int, from string, tofd int, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Revoke(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rmdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) - newoffset = int64(int64(r1)<<32 | int64(r0)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setegid(egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seteuid(euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setgid(gid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) - pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setuid(uid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statvfs1(path string, buf *Statvfs_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlink(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() (err error) { - _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(newmask int) (oldmask int) { - r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) - oldmask = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlink(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlinkat(dirfd int, path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unmount(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go deleted file mode 100644 index 3b90e94..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go +++ /dev/null @@ -1,1850 +0,0 @@ -// go run mksyscall.go -netbsd -tags netbsd,amd64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_amd64.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build netbsd && amd64 -// +build netbsd,amd64 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) - wpid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(s int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, timeval *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Madvise(b []byte, behav int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe2(p *[2]_C_int, flags int) (err error) { - _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getdents(fd int, buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getcwd(buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { - _p0 = unsafe.Pointer(&mib[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chflags(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chmod(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(fd int) (nfd int, err error) { - r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup2(from int, to int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup3(from int, to int, flags int) (err error) { - _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - Syscall(SYS_EXIT, uintptr(code), 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), 0, uintptr(length), uintptr(advice)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchflags(fd int, flags int) (err error) { - _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Flock(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) { - _, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsync(fd int) (err error) { - _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgrp() (pgrp int) { - r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) - pgrp = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) - pid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) - ppid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Issetugid() (tainted bool) { - r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) - tainted = bool(r0 != 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kill(pid int, signum syscall.Signal) (err error) { - _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kqueue() (fd int, err error) { - r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Link(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, backlog int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdir(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdirat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifo(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifoat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknod(path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Open(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pathconf(path string, name int) (val int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlink(path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rename(from string, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(fromfd int, from string, tofd int, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Revoke(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rmdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) - newoffset = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setegid(egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seteuid(euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setgid(gid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) - pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setuid(uid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statvfs1(path string, buf *Statvfs_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlink(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() (err error) { - _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(newmask int) (oldmask int) { - r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) - oldmask = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlink(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlinkat(dirfd int, path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unmount(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go deleted file mode 100644 index 890f4cc..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go +++ /dev/null @@ -1,1850 +0,0 @@ -// go run mksyscall.go -l32 -netbsd -arm -tags netbsd,arm syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build netbsd && arm -// +build netbsd,arm - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) - wpid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(s int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, timeval *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Madvise(b []byte, behav int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe2(p *[2]_C_int, flags int) (err error) { - _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getdents(fd int, buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getcwd(buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { - _p0 = unsafe.Pointer(&mib[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chflags(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chmod(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(fd int) (nfd int, err error) { - r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup2(from int, to int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup3(from int, to int, flags int) (err error) { - _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - Syscall(SYS_EXIT, uintptr(code), 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), 0, uintptr(length), uintptr(length>>32), uintptr(advice), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchflags(fd int, flags int) (err error) { - _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Flock(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) { - _, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsync(fd int) (err error) { - _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgrp() (pgrp int) { - r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) - pgrp = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) - pid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) - ppid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Issetugid() (tainted bool) { - r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) - tainted = bool(r0 != 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kill(pid int, signum syscall.Signal) (err error) { - _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kqueue() (fd int, err error) { - r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Link(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, backlog int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdir(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdirat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifo(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifoat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknod(path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Open(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pathconf(path string, name int) (val int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlink(path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rename(from string, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(fromfd int, from string, tofd int, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Revoke(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rmdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) - newoffset = int64(int64(r1)<<32 | int64(r0)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setegid(egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seteuid(euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setgid(gid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) - pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setuid(uid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statvfs1(path string, buf *Statvfs_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlink(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() (err error) { - _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(newmask int) (oldmask int) { - r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) - oldmask = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlink(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlinkat(dirfd int, path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unmount(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go deleted file mode 100644 index c79f071..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go +++ /dev/null @@ -1,1850 +0,0 @@ -// go run mksyscall.go -netbsd -tags netbsd,arm64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm64.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build netbsd && arm64 -// +build netbsd,arm64 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) - wpid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(s int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, timeval *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Madvise(b []byte, behav int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe2(p *[2]_C_int, flags int) (err error) { - _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getdents(fd int, buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getcwd(buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { - _p0 = unsafe.Pointer(&mib[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chflags(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chmod(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(fd int) (nfd int, err error) { - r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup2(from int, to int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup3(from int, to int, flags int) (err error) { - _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - Syscall(SYS_EXIT, uintptr(code), 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(file) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attrname) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(link) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fadvise(fd int, offset int64, length int64, advice int) (err error) { - _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), 0, uintptr(length), uintptr(advice)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchflags(fd int, flags int) (err error) { - _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Flock(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) { - _, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsync(fd int) (err error) { - _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgrp() (pgrp int) { - r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) - pgrp = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) - pid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) - ppid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Issetugid() (tainted bool) { - r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) - tainted = bool(r0 != 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kill(pid int, signum syscall.Signal) (err error) { - _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kqueue() (fd int, err error) { - r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Link(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, backlog int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdir(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdirat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifo(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifoat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknod(path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Open(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pathconf(path string, name int) (val int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlink(path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rename(from string, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(fromfd int, from string, tofd int, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Revoke(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rmdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) - newoffset = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setegid(egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seteuid(euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setgid(gid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) - pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setuid(uid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statvfs1(path string, buf *Statvfs_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlink(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() (err error) { - _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(newmask int) (oldmask int) { - r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) - oldmask = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlink(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlinkat(dirfd int, path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unmount(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go deleted file mode 100644 index 2925fe0..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go +++ /dev/null @@ -1,2221 +0,0 @@ -// go run mksyscall.go -l32 -openbsd -libc -tags openbsd,386 syscall_bsd.go syscall_openbsd.go syscall_openbsd_386.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build openbsd && 386 -// +build openbsd,386 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getgroups_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getgroups getgroups "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setgroups_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setgroups setgroups "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) - wpid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_wait4_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_wait4 wait4 "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_accept_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_accept accept "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_bind_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_bind bind "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_connect_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_connect connect "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_socket_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_socket socket "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getsockopt_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getsockopt getsockopt "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setsockopt_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setsockopt setsockopt "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getpeername_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpeername getpeername "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getsockname_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getsockname getsockname "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(s int, how int) (err error) { - _, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_shutdown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_shutdown shutdown "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_socketpair_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_socketpair socketpair "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_recvfrom_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_recvfrom recvfrom "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sendto_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sendto sendto "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_recvmsg_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_recvmsg recvmsg "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sendmsg_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sendmsg sendmsg "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_kevent_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_kevent kevent "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, timeval *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_utimes_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_utimes utimes "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_futimes_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_futimes futimes "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_poll_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_poll poll "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Madvise(b []byte, behav int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_madvise_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_madvise madvise "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mlock_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mlock mlock "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mlockall_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mlockall mlockall "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mprotect_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mprotect mprotect "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_msync_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_msync msync "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_munlock_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_munlock munlock "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_munlockall_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_munlockall munlockall "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe2(p *[2]_C_int, flags int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pipe2_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getdents(fd int, buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getdents_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getdents getdents "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getcwd(buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getcwd_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getcwd getcwd "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_ioctl_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_ioctl ioctl "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { - _p0 = unsafe.Pointer(&mib[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sysctl_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sysctl sysctl "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { - r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_ppoll_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_ppoll ppoll "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_access_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_access access "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_adjtime_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_adjtime adjtime "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chdir chdir "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chflags(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chflags_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chflags chflags "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chmod(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chmod_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chmod chmod "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chown chown "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chroot_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chroot chroot "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_close_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_close close "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(fd int) (nfd int, err error) { - r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_dup_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_dup dup "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup2(from int, to int) (err error) { - _, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_dup2_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_dup2 dup2 "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup3(from int, to int, flags int) (err error) { - _, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_dup3_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_dup3 dup3 "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0) - return -} - -var libc_exit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_exit exit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_faccessat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_faccessat faccessat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchdir fchdir "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchflags(fd int, flags int) (err error) { - _, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchflags_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchflags fchflags "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchmod_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchmod fchmod "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchmodat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchown fchown "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchownat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchownat fchownat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Flock(fd int, how int) (err error) { - _, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_flock_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_flock flock "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fpathconf_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so" - -// 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 { - err = errnoErr(e1) - } - return -} - -var libc_fstat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fstat fstat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fstatat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fstatat fstatat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, stat *Statfs_t) (err error) { - _, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fstatfs_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fstatfs fstatfs "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsync(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fsync_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fsync fsync "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), uintptr(length>>32)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_ftruncate_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0) - egid = int(r0) - return -} - -var libc_getegid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getegid getegid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (uid int) { - r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0) - uid = int(r0) - return -} - -var libc_geteuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_geteuid geteuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0) - gid = int(r0) - return -} - -var libc_getgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getgid getgid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getpgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpgid getpgid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgrp() (pgrp int) { - r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0) - pgrp = int(r0) - return -} - -var libc_getpgrp_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0) - pid = int(r0) - return -} - -var libc_getpid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpid getpid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (ppid int) { - r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0) - ppid = int(r0) - return -} - -var libc_getppid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getppid getppid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getpriority_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpriority getpriority "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrtable() (rtable int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0) - rtable = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getrtable_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getrtable getrtable "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getrusage_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getrusage getrusage "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getsid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getsid getsid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_gettimeofday_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0) - uid = int(r0) - return -} - -var libc_getuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getuid getuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Issetugid() (tainted bool) { - r0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0) - tainted = bool(r0 != 0) - return -} - -var libc_issetugid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_issetugid issetugid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kill(pid int, signum syscall.Signal) (err error) { - _, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_kill_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_kill kill "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kqueue() (fd int, err error) { - r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_kqueue_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_kqueue kqueue "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_lchown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_lchown lchown "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Link(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_link_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_link link "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_linkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_linkat linkat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, backlog int) (err error) { - _, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_listen_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_listen listen "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_lstat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_lstat lstat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdir(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mkdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mkdir mkdir "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdirat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mkdirat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifo(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mkfifo_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifoat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mkfifoat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknod(path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mknod_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mknod mknod "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mknodat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mknodat mknodat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_nanosleep_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Open(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_open_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_open open "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_openat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_openat openat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pathconf(path string, name int) (val int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pathconf_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pathconf pathconf "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pread_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pread pread "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pwrite_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pwrite pwrite "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_read_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_read read "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlink(path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_readlink_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_readlink readlink "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_readlinkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_readlinkat readlinkat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rename(from string, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_rename_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_rename rename "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(fromfd int, from string, tofd int, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_renameat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_renameat renameat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Revoke(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_revoke_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_revoke revoke "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rmdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_rmdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_rmdir rmdir "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, r1, e1 := syscall_syscall6(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0) - newoffset = int64(int64(r1)<<32 | int64(r0)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_lseek_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_lseek lseek "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_select_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_select select "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setegid(egid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setegid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setegid setegid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seteuid(euid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_seteuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_seteuid seteuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setgid(gid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setgid setgid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setlogin(name string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(name) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setlogin_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setlogin setlogin "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setpgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setpgid setpgid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setpriority_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setpriority setpriority "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setregid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setregid setregid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setreuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setreuid setreuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setresgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setresgid setresgid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setresuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setresuid setresuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrtable(rtable int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrtable_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrtable setrtable "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0) - pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setsid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setsid setsid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_settimeofday_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_settimeofday settimeofday "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setuid(uid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setuid setuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_stat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_stat stat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, stat *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_statfs_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_statfs statfs "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlink(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_symlink_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_symlink symlink "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_symlinkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_symlinkat symlinkat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() (err error) { - _, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sync_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sync sync "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_truncate_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_truncate truncate "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(newmask int) (oldmask int) { - r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0) - oldmask = int(r0) - return -} - -var libc_umask_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_umask umask "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlink(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_unlink_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_unlink unlink "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlinkat(dirfd int, path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_unlinkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unmount(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_unmount_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_unmount unmount "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_write_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_write write "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := syscall_syscall9(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mmap_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mmap mmap "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_munmap_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_munmap munmap "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_utimensat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_utimensat utimensat "libc.so" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s deleted file mode 100644 index 75eb2f5..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s +++ /dev/null @@ -1,796 +0,0 @@ -// go run mkasm.go openbsd 386 -// Code generated by the command above; DO NOT EDIT. - -#include "textflag.h" - -TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgroups(SB) - -GLOBL ·libc_getgroups_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getgroups_trampoline_addr(SB)/4, $libc_getgroups_trampoline<>(SB) - -TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgroups(SB) - -GLOBL ·libc_setgroups_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setgroups_trampoline_addr(SB)/4, $libc_setgroups_trampoline<>(SB) - -TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_wait4(SB) - -GLOBL ·libc_wait4_trampoline_addr(SB), RODATA, $4 -DATA ·libc_wait4_trampoline_addr(SB)/4, $libc_wait4_trampoline<>(SB) - -TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_accept(SB) - -GLOBL ·libc_accept_trampoline_addr(SB), RODATA, $4 -DATA ·libc_accept_trampoline_addr(SB)/4, $libc_accept_trampoline<>(SB) - -TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_bind(SB) - -GLOBL ·libc_bind_trampoline_addr(SB), RODATA, $4 -DATA ·libc_bind_trampoline_addr(SB)/4, $libc_bind_trampoline<>(SB) - -TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_connect(SB) - -GLOBL ·libc_connect_trampoline_addr(SB), RODATA, $4 -DATA ·libc_connect_trampoline_addr(SB)/4, $libc_connect_trampoline<>(SB) - -TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socket(SB) - -GLOBL ·libc_socket_trampoline_addr(SB), RODATA, $4 -DATA ·libc_socket_trampoline_addr(SB)/4, $libc_socket_trampoline<>(SB) - -TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockopt(SB) - -GLOBL ·libc_getsockopt_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getsockopt_trampoline_addr(SB)/4, $libc_getsockopt_trampoline<>(SB) - -TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsockopt(SB) - -GLOBL ·libc_setsockopt_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setsockopt_trampoline_addr(SB)/4, $libc_setsockopt_trampoline<>(SB) - -TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpeername(SB) - -GLOBL ·libc_getpeername_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getpeername_trampoline_addr(SB)/4, $libc_getpeername_trampoline<>(SB) - -TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockname(SB) - -GLOBL ·libc_getsockname_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getsockname_trampoline_addr(SB)/4, $libc_getsockname_trampoline<>(SB) - -TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shutdown(SB) - -GLOBL ·libc_shutdown_trampoline_addr(SB), RODATA, $4 -DATA ·libc_shutdown_trampoline_addr(SB)/4, $libc_shutdown_trampoline<>(SB) - -TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socketpair(SB) - -GLOBL ·libc_socketpair_trampoline_addr(SB), RODATA, $4 -DATA ·libc_socketpair_trampoline_addr(SB)/4, $libc_socketpair_trampoline<>(SB) - -TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvfrom(SB) - -GLOBL ·libc_recvfrom_trampoline_addr(SB), RODATA, $4 -DATA ·libc_recvfrom_trampoline_addr(SB)/4, $libc_recvfrom_trampoline<>(SB) - -TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendto(SB) - -GLOBL ·libc_sendto_trampoline_addr(SB), RODATA, $4 -DATA ·libc_sendto_trampoline_addr(SB)/4, $libc_sendto_trampoline<>(SB) - -TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvmsg(SB) - -GLOBL ·libc_recvmsg_trampoline_addr(SB), RODATA, $4 -DATA ·libc_recvmsg_trampoline_addr(SB)/4, $libc_recvmsg_trampoline<>(SB) - -TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendmsg(SB) - -GLOBL ·libc_sendmsg_trampoline_addr(SB), RODATA, $4 -DATA ·libc_sendmsg_trampoline_addr(SB)/4, $libc_sendmsg_trampoline<>(SB) - -TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kevent(SB) - -GLOBL ·libc_kevent_trampoline_addr(SB), RODATA, $4 -DATA ·libc_kevent_trampoline_addr(SB)/4, $libc_kevent_trampoline<>(SB) - -TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimes(SB) - -GLOBL ·libc_utimes_trampoline_addr(SB), RODATA, $4 -DATA ·libc_utimes_trampoline_addr(SB)/4, $libc_utimes_trampoline<>(SB) - -TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_futimes(SB) - -GLOBL ·libc_futimes_trampoline_addr(SB), RODATA, $4 -DATA ·libc_futimes_trampoline_addr(SB)/4, $libc_futimes_trampoline<>(SB) - -TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_poll(SB) - -GLOBL ·libc_poll_trampoline_addr(SB), RODATA, $4 -DATA ·libc_poll_trampoline_addr(SB)/4, $libc_poll_trampoline<>(SB) - -TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_madvise(SB) - -GLOBL ·libc_madvise_trampoline_addr(SB), RODATA, $4 -DATA ·libc_madvise_trampoline_addr(SB)/4, $libc_madvise_trampoline<>(SB) - -TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlock(SB) - -GLOBL ·libc_mlock_trampoline_addr(SB), RODATA, $4 -DATA ·libc_mlock_trampoline_addr(SB)/4, $libc_mlock_trampoline<>(SB) - -TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlockall(SB) - -GLOBL ·libc_mlockall_trampoline_addr(SB), RODATA, $4 -DATA ·libc_mlockall_trampoline_addr(SB)/4, $libc_mlockall_trampoline<>(SB) - -TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mprotect(SB) - -GLOBL ·libc_mprotect_trampoline_addr(SB), RODATA, $4 -DATA ·libc_mprotect_trampoline_addr(SB)/4, $libc_mprotect_trampoline<>(SB) - -TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_msync(SB) - -GLOBL ·libc_msync_trampoline_addr(SB), RODATA, $4 -DATA ·libc_msync_trampoline_addr(SB)/4, $libc_msync_trampoline<>(SB) - -TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlock(SB) - -GLOBL ·libc_munlock_trampoline_addr(SB), RODATA, $4 -DATA ·libc_munlock_trampoline_addr(SB)/4, $libc_munlock_trampoline<>(SB) - -TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlockall(SB) - -GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $4 -DATA ·libc_munlockall_trampoline_addr(SB)/4, $libc_munlockall_trampoline<>(SB) - -TEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pipe2(SB) - -GLOBL ·libc_pipe2_trampoline_addr(SB), RODATA, $4 -DATA ·libc_pipe2_trampoline_addr(SB)/4, $libc_pipe2_trampoline<>(SB) - -TEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getdents(SB) - -GLOBL ·libc_getdents_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getdents_trampoline_addr(SB)/4, $libc_getdents_trampoline<>(SB) - -TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getcwd(SB) - -GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getcwd_trampoline_addr(SB)/4, $libc_getcwd_trampoline<>(SB) - -TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ioctl(SB) - -GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $4 -DATA ·libc_ioctl_trampoline_addr(SB)/4, $libc_ioctl_trampoline<>(SB) - -TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sysctl(SB) - -GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $4 -DATA ·libc_sysctl_trampoline_addr(SB)/4, $libc_sysctl_trampoline<>(SB) - -TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ppoll(SB) - -GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $4 -DATA ·libc_ppoll_trampoline_addr(SB)/4, $libc_ppoll_trampoline<>(SB) - -TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_access(SB) - -GLOBL ·libc_access_trampoline_addr(SB), RODATA, $4 -DATA ·libc_access_trampoline_addr(SB)/4, $libc_access_trampoline<>(SB) - -TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_adjtime(SB) - -GLOBL ·libc_adjtime_trampoline_addr(SB), RODATA, $4 -DATA ·libc_adjtime_trampoline_addr(SB)/4, $libc_adjtime_trampoline<>(SB) - -TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chdir(SB) - -GLOBL ·libc_chdir_trampoline_addr(SB), RODATA, $4 -DATA ·libc_chdir_trampoline_addr(SB)/4, $libc_chdir_trampoline<>(SB) - -TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chflags(SB) - -GLOBL ·libc_chflags_trampoline_addr(SB), RODATA, $4 -DATA ·libc_chflags_trampoline_addr(SB)/4, $libc_chflags_trampoline<>(SB) - -TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chmod(SB) - -GLOBL ·libc_chmod_trampoline_addr(SB), RODATA, $4 -DATA ·libc_chmod_trampoline_addr(SB)/4, $libc_chmod_trampoline<>(SB) - -TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chown(SB) - -GLOBL ·libc_chown_trampoline_addr(SB), RODATA, $4 -DATA ·libc_chown_trampoline_addr(SB)/4, $libc_chown_trampoline<>(SB) - -TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chroot(SB) - -GLOBL ·libc_chroot_trampoline_addr(SB), RODATA, $4 -DATA ·libc_chroot_trampoline_addr(SB)/4, $libc_chroot_trampoline<>(SB) - -TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_close(SB) - -GLOBL ·libc_close_trampoline_addr(SB), RODATA, $4 -DATA ·libc_close_trampoline_addr(SB)/4, $libc_close_trampoline<>(SB) - -TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup(SB) - -GLOBL ·libc_dup_trampoline_addr(SB), RODATA, $4 -DATA ·libc_dup_trampoline_addr(SB)/4, $libc_dup_trampoline<>(SB) - -TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup2(SB) - -GLOBL ·libc_dup2_trampoline_addr(SB), RODATA, $4 -DATA ·libc_dup2_trampoline_addr(SB)/4, $libc_dup2_trampoline<>(SB) - -TEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup3(SB) - -GLOBL ·libc_dup3_trampoline_addr(SB), RODATA, $4 -DATA ·libc_dup3_trampoline_addr(SB)/4, $libc_dup3_trampoline<>(SB) - -TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_exit(SB) - -GLOBL ·libc_exit_trampoline_addr(SB), RODATA, $4 -DATA ·libc_exit_trampoline_addr(SB)/4, $libc_exit_trampoline<>(SB) - -TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_faccessat(SB) - -GLOBL ·libc_faccessat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_faccessat_trampoline_addr(SB)/4, $libc_faccessat_trampoline<>(SB) - -TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchdir(SB) - -GLOBL ·libc_fchdir_trampoline_addr(SB), RODATA, $4 -DATA ·libc_fchdir_trampoline_addr(SB)/4, $libc_fchdir_trampoline<>(SB) - -TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchflags(SB) - -GLOBL ·libc_fchflags_trampoline_addr(SB), RODATA, $4 -DATA ·libc_fchflags_trampoline_addr(SB)/4, $libc_fchflags_trampoline<>(SB) - -TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmod(SB) - -GLOBL ·libc_fchmod_trampoline_addr(SB), RODATA, $4 -DATA ·libc_fchmod_trampoline_addr(SB)/4, $libc_fchmod_trampoline<>(SB) - -TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmodat(SB) - -GLOBL ·libc_fchmodat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_fchmodat_trampoline_addr(SB)/4, $libc_fchmodat_trampoline<>(SB) - -TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchown(SB) - -GLOBL ·libc_fchown_trampoline_addr(SB), RODATA, $4 -DATA ·libc_fchown_trampoline_addr(SB)/4, $libc_fchown_trampoline<>(SB) - -TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchownat(SB) - -GLOBL ·libc_fchownat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_fchownat_trampoline_addr(SB)/4, $libc_fchownat_trampoline<>(SB) - -TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_flock(SB) - -GLOBL ·libc_flock_trampoline_addr(SB), RODATA, $4 -DATA ·libc_flock_trampoline_addr(SB)/4, $libc_flock_trampoline<>(SB) - -TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fpathconf(SB) - -GLOBL ·libc_fpathconf_trampoline_addr(SB), RODATA, $4 -DATA ·libc_fpathconf_trampoline_addr(SB)/4, $libc_fpathconf_trampoline<>(SB) - -TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstat(SB) - -GLOBL ·libc_fstat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_fstat_trampoline_addr(SB)/4, $libc_fstat_trampoline<>(SB) - -TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatat(SB) - -GLOBL ·libc_fstatat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_fstatat_trampoline_addr(SB)/4, $libc_fstatat_trampoline<>(SB) - -TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatfs(SB) - -GLOBL ·libc_fstatfs_trampoline_addr(SB), RODATA, $4 -DATA ·libc_fstatfs_trampoline_addr(SB)/4, $libc_fstatfs_trampoline<>(SB) - -TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fsync(SB) - -GLOBL ·libc_fsync_trampoline_addr(SB), RODATA, $4 -DATA ·libc_fsync_trampoline_addr(SB)/4, $libc_fsync_trampoline<>(SB) - -TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ftruncate(SB) - -GLOBL ·libc_ftruncate_trampoline_addr(SB), RODATA, $4 -DATA ·libc_ftruncate_trampoline_addr(SB)/4, $libc_ftruncate_trampoline<>(SB) - -TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getegid(SB) - -GLOBL ·libc_getegid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getegid_trampoline_addr(SB)/4, $libc_getegid_trampoline<>(SB) - -TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_geteuid(SB) - -GLOBL ·libc_geteuid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_geteuid_trampoline_addr(SB)/4, $libc_geteuid_trampoline<>(SB) - -TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgid(SB) - -GLOBL ·libc_getgid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getgid_trampoline_addr(SB)/4, $libc_getgid_trampoline<>(SB) - -TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgid(SB) - -GLOBL ·libc_getpgid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getpgid_trampoline_addr(SB)/4, $libc_getpgid_trampoline<>(SB) - -TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgrp(SB) - -GLOBL ·libc_getpgrp_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getpgrp_trampoline_addr(SB)/4, $libc_getpgrp_trampoline<>(SB) - -TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpid(SB) - -GLOBL ·libc_getpid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getpid_trampoline_addr(SB)/4, $libc_getpid_trampoline<>(SB) - -TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getppid(SB) - -GLOBL ·libc_getppid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getppid_trampoline_addr(SB)/4, $libc_getppid_trampoline<>(SB) - -TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpriority(SB) - -GLOBL ·libc_getpriority_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getpriority_trampoline_addr(SB)/4, $libc_getpriority_trampoline<>(SB) - -TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrlimit(SB) - -GLOBL ·libc_getrlimit_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getrlimit_trampoline_addr(SB)/4, $libc_getrlimit_trampoline<>(SB) - -TEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrtable(SB) - -GLOBL ·libc_getrtable_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getrtable_trampoline_addr(SB)/4, $libc_getrtable_trampoline<>(SB) - -TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrusage(SB) - -GLOBL ·libc_getrusage_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getrusage_trampoline_addr(SB)/4, $libc_getrusage_trampoline<>(SB) - -TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsid(SB) - -GLOBL ·libc_getsid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getsid_trampoline_addr(SB)/4, $libc_getsid_trampoline<>(SB) - -TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_gettimeofday(SB) - -GLOBL ·libc_gettimeofday_trampoline_addr(SB), RODATA, $4 -DATA ·libc_gettimeofday_trampoline_addr(SB)/4, $libc_gettimeofday_trampoline<>(SB) - -TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getuid(SB) - -GLOBL ·libc_getuid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getuid_trampoline_addr(SB)/4, $libc_getuid_trampoline<>(SB) - -TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_issetugid(SB) - -GLOBL ·libc_issetugid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_issetugid_trampoline_addr(SB)/4, $libc_issetugid_trampoline<>(SB) - -TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kill(SB) - -GLOBL ·libc_kill_trampoline_addr(SB), RODATA, $4 -DATA ·libc_kill_trampoline_addr(SB)/4, $libc_kill_trampoline<>(SB) - -TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kqueue(SB) - -GLOBL ·libc_kqueue_trampoline_addr(SB), RODATA, $4 -DATA ·libc_kqueue_trampoline_addr(SB)/4, $libc_kqueue_trampoline<>(SB) - -TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lchown(SB) - -GLOBL ·libc_lchown_trampoline_addr(SB), RODATA, $4 -DATA ·libc_lchown_trampoline_addr(SB)/4, $libc_lchown_trampoline<>(SB) - -TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_link(SB) - -GLOBL ·libc_link_trampoline_addr(SB), RODATA, $4 -DATA ·libc_link_trampoline_addr(SB)/4, $libc_link_trampoline<>(SB) - -TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_linkat(SB) - -GLOBL ·libc_linkat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_linkat_trampoline_addr(SB)/4, $libc_linkat_trampoline<>(SB) - -TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_listen(SB) - -GLOBL ·libc_listen_trampoline_addr(SB), RODATA, $4 -DATA ·libc_listen_trampoline_addr(SB)/4, $libc_listen_trampoline<>(SB) - -TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lstat(SB) - -GLOBL ·libc_lstat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_lstat_trampoline_addr(SB)/4, $libc_lstat_trampoline<>(SB) - -TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdir(SB) - -GLOBL ·libc_mkdir_trampoline_addr(SB), RODATA, $4 -DATA ·libc_mkdir_trampoline_addr(SB)/4, $libc_mkdir_trampoline<>(SB) - -TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdirat(SB) - -GLOBL ·libc_mkdirat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_mkdirat_trampoline_addr(SB)/4, $libc_mkdirat_trampoline<>(SB) - -TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkfifo(SB) - -GLOBL ·libc_mkfifo_trampoline_addr(SB), RODATA, $4 -DATA ·libc_mkfifo_trampoline_addr(SB)/4, $libc_mkfifo_trampoline<>(SB) - -TEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkfifoat(SB) - -GLOBL ·libc_mkfifoat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_mkfifoat_trampoline_addr(SB)/4, $libc_mkfifoat_trampoline<>(SB) - -TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mknod(SB) - -GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $4 -DATA ·libc_mknod_trampoline_addr(SB)/4, $libc_mknod_trampoline<>(SB) - -TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mknodat(SB) - -GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_mknodat_trampoline_addr(SB)/4, $libc_mknodat_trampoline<>(SB) - -TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_nanosleep(SB) - -GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $4 -DATA ·libc_nanosleep_trampoline_addr(SB)/4, $libc_nanosleep_trampoline<>(SB) - -TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_open(SB) - -GLOBL ·libc_open_trampoline_addr(SB), RODATA, $4 -DATA ·libc_open_trampoline_addr(SB)/4, $libc_open_trampoline<>(SB) - -TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_openat(SB) - -GLOBL ·libc_openat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_openat_trampoline_addr(SB)/4, $libc_openat_trampoline<>(SB) - -TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pathconf(SB) - -GLOBL ·libc_pathconf_trampoline_addr(SB), RODATA, $4 -DATA ·libc_pathconf_trampoline_addr(SB)/4, $libc_pathconf_trampoline<>(SB) - -TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pread(SB) - -GLOBL ·libc_pread_trampoline_addr(SB), RODATA, $4 -DATA ·libc_pread_trampoline_addr(SB)/4, $libc_pread_trampoline<>(SB) - -TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pwrite(SB) - -GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $4 -DATA ·libc_pwrite_trampoline_addr(SB)/4, $libc_pwrite_trampoline<>(SB) - -TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_read(SB) - -GLOBL ·libc_read_trampoline_addr(SB), RODATA, $4 -DATA ·libc_read_trampoline_addr(SB)/4, $libc_read_trampoline<>(SB) - -TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlink(SB) - -GLOBL ·libc_readlink_trampoline_addr(SB), RODATA, $4 -DATA ·libc_readlink_trampoline_addr(SB)/4, $libc_readlink_trampoline<>(SB) - -TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlinkat(SB) - -GLOBL ·libc_readlinkat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_readlinkat_trampoline_addr(SB)/4, $libc_readlinkat_trampoline<>(SB) - -TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rename(SB) - -GLOBL ·libc_rename_trampoline_addr(SB), RODATA, $4 -DATA ·libc_rename_trampoline_addr(SB)/4, $libc_rename_trampoline<>(SB) - -TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_renameat(SB) - -GLOBL ·libc_renameat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_renameat_trampoline_addr(SB)/4, $libc_renameat_trampoline<>(SB) - -TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_revoke(SB) - -GLOBL ·libc_revoke_trampoline_addr(SB), RODATA, $4 -DATA ·libc_revoke_trampoline_addr(SB)/4, $libc_revoke_trampoline<>(SB) - -TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rmdir(SB) - -GLOBL ·libc_rmdir_trampoline_addr(SB), RODATA, $4 -DATA ·libc_rmdir_trampoline_addr(SB)/4, $libc_rmdir_trampoline<>(SB) - -TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lseek(SB) - -GLOBL ·libc_lseek_trampoline_addr(SB), RODATA, $4 -DATA ·libc_lseek_trampoline_addr(SB)/4, $libc_lseek_trampoline<>(SB) - -TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_select(SB) - -GLOBL ·libc_select_trampoline_addr(SB), RODATA, $4 -DATA ·libc_select_trampoline_addr(SB)/4, $libc_select_trampoline<>(SB) - -TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setegid(SB) - -GLOBL ·libc_setegid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setegid_trampoline_addr(SB)/4, $libc_setegid_trampoline<>(SB) - -TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_seteuid(SB) - -GLOBL ·libc_seteuid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_seteuid_trampoline_addr(SB)/4, $libc_seteuid_trampoline<>(SB) - -TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgid(SB) - -GLOBL ·libc_setgid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setgid_trampoline_addr(SB)/4, $libc_setgid_trampoline<>(SB) - -TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setlogin(SB) - -GLOBL ·libc_setlogin_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setlogin_trampoline_addr(SB)/4, $libc_setlogin_trampoline<>(SB) - -TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpgid(SB) - -GLOBL ·libc_setpgid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setpgid_trampoline_addr(SB)/4, $libc_setpgid_trampoline<>(SB) - -TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpriority(SB) - -GLOBL ·libc_setpriority_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setpriority_trampoline_addr(SB)/4, $libc_setpriority_trampoline<>(SB) - -TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setregid(SB) - -GLOBL ·libc_setregid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setregid_trampoline_addr(SB)/4, $libc_setregid_trampoline<>(SB) - -TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setreuid(SB) - -GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setreuid_trampoline_addr(SB)/4, $libc_setreuid_trampoline<>(SB) - -TEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setresgid(SB) - -GLOBL ·libc_setresgid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setresgid_trampoline_addr(SB)/4, $libc_setresgid_trampoline<>(SB) - -TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setresuid(SB) - -GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setresuid_trampoline_addr(SB)/4, $libc_setresuid_trampoline<>(SB) - -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) - -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setrlimit_trampoline_addr(SB)/4, $libc_setrlimit_trampoline<>(SB) - -TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrtable(SB) - -GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setrtable_trampoline_addr(SB)/4, $libc_setrtable_trampoline<>(SB) - -TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsid(SB) - -GLOBL ·libc_setsid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setsid_trampoline_addr(SB)/4, $libc_setsid_trampoline<>(SB) - -TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_settimeofday(SB) - -GLOBL ·libc_settimeofday_trampoline_addr(SB), RODATA, $4 -DATA ·libc_settimeofday_trampoline_addr(SB)/4, $libc_settimeofday_trampoline<>(SB) - -TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setuid(SB) - -GLOBL ·libc_setuid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setuid_trampoline_addr(SB)/4, $libc_setuid_trampoline<>(SB) - -TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_stat(SB) - -GLOBL ·libc_stat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_stat_trampoline_addr(SB)/4, $libc_stat_trampoline<>(SB) - -TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_statfs(SB) - -GLOBL ·libc_statfs_trampoline_addr(SB), RODATA, $4 -DATA ·libc_statfs_trampoline_addr(SB)/4, $libc_statfs_trampoline<>(SB) - -TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlink(SB) - -GLOBL ·libc_symlink_trampoline_addr(SB), RODATA, $4 -DATA ·libc_symlink_trampoline_addr(SB)/4, $libc_symlink_trampoline<>(SB) - -TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlinkat(SB) - -GLOBL ·libc_symlinkat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_symlinkat_trampoline_addr(SB)/4, $libc_symlinkat_trampoline<>(SB) - -TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sync(SB) - -GLOBL ·libc_sync_trampoline_addr(SB), RODATA, $4 -DATA ·libc_sync_trampoline_addr(SB)/4, $libc_sync_trampoline<>(SB) - -TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_truncate(SB) - -GLOBL ·libc_truncate_trampoline_addr(SB), RODATA, $4 -DATA ·libc_truncate_trampoline_addr(SB)/4, $libc_truncate_trampoline<>(SB) - -TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_umask(SB) - -GLOBL ·libc_umask_trampoline_addr(SB), RODATA, $4 -DATA ·libc_umask_trampoline_addr(SB)/4, $libc_umask_trampoline<>(SB) - -TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlink(SB) - -GLOBL ·libc_unlink_trampoline_addr(SB), RODATA, $4 -DATA ·libc_unlink_trampoline_addr(SB)/4, $libc_unlink_trampoline<>(SB) - -TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlinkat(SB) - -GLOBL ·libc_unlinkat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_unlinkat_trampoline_addr(SB)/4, $libc_unlinkat_trampoline<>(SB) - -TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unmount(SB) - -GLOBL ·libc_unmount_trampoline_addr(SB), RODATA, $4 -DATA ·libc_unmount_trampoline_addr(SB)/4, $libc_unmount_trampoline<>(SB) - -TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_write(SB) - -GLOBL ·libc_write_trampoline_addr(SB), RODATA, $4 -DATA ·libc_write_trampoline_addr(SB)/4, $libc_write_trampoline<>(SB) - -TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mmap(SB) - -GLOBL ·libc_mmap_trampoline_addr(SB), RODATA, $4 -DATA ·libc_mmap_trampoline_addr(SB)/4, $libc_mmap_trampoline<>(SB) - -TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munmap(SB) - -GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $4 -DATA ·libc_munmap_trampoline_addr(SB)/4, $libc_munmap_trampoline<>(SB) - -TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimensat(SB) - -GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_utimensat_trampoline_addr(SB)/4, $libc_utimensat_trampoline<>(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go deleted file mode 100644 index 98446d2..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go +++ /dev/null @@ -1,2221 +0,0 @@ -// go run mksyscall.go -openbsd -libc -tags openbsd,amd64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_amd64.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build openbsd && amd64 -// +build openbsd,amd64 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getgroups_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getgroups getgroups "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setgroups_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setgroups setgroups "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) - wpid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_wait4_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_wait4 wait4 "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_accept_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_accept accept "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_bind_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_bind bind "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_connect_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_connect connect "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_socket_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_socket socket "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getsockopt_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getsockopt getsockopt "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setsockopt_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setsockopt setsockopt "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getpeername_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpeername getpeername "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getsockname_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getsockname getsockname "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(s int, how int) (err error) { - _, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_shutdown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_shutdown shutdown "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_socketpair_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_socketpair socketpair "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_recvfrom_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_recvfrom recvfrom "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sendto_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sendto sendto "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_recvmsg_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_recvmsg recvmsg "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sendmsg_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sendmsg sendmsg "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_kevent_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_kevent kevent "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, timeval *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_utimes_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_utimes utimes "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_futimes_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_futimes futimes "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_poll_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_poll poll "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Madvise(b []byte, behav int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_madvise_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_madvise madvise "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mlock_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mlock mlock "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mlockall_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mlockall mlockall "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mprotect_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mprotect mprotect "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_msync_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_msync msync "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_munlock_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_munlock munlock "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_munlockall_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_munlockall munlockall "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe2(p *[2]_C_int, flags int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pipe2_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getdents(fd int, buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getdents_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getdents getdents "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getcwd(buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getcwd_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getcwd getcwd "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_ioctl_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_ioctl ioctl "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { - _p0 = unsafe.Pointer(&mib[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sysctl_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sysctl sysctl "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { - r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_ppoll_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_ppoll ppoll "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_access_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_access access "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_adjtime_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_adjtime adjtime "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chdir chdir "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chflags(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chflags_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chflags chflags "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chmod(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chmod_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chmod chmod "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chown chown "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chroot_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chroot chroot "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_close_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_close close "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(fd int) (nfd int, err error) { - r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_dup_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_dup dup "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup2(from int, to int) (err error) { - _, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_dup2_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_dup2 dup2 "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup3(from int, to int, flags int) (err error) { - _, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_dup3_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_dup3 dup3 "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0) - return -} - -var libc_exit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_exit exit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_faccessat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_faccessat faccessat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchdir fchdir "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchflags(fd int, flags int) (err error) { - _, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchflags_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchflags fchflags "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchmod_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchmod fchmod "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchmodat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchown fchown "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchownat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchownat fchownat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Flock(fd int, how int) (err error) { - _, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_flock_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_flock flock "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fpathconf_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so" - -// 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 { - err = errnoErr(e1) - } - return -} - -var libc_fstat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fstat fstat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fstatat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fstatat fstatat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, stat *Statfs_t) (err error) { - _, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fstatfs_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fstatfs fstatfs "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsync(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fsync_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fsync fsync "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_ftruncate_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0) - egid = int(r0) - return -} - -var libc_getegid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getegid getegid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (uid int) { - r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0) - uid = int(r0) - return -} - -var libc_geteuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_geteuid geteuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0) - gid = int(r0) - return -} - -var libc_getgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getgid getgid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getpgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpgid getpgid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgrp() (pgrp int) { - r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0) - pgrp = int(r0) - return -} - -var libc_getpgrp_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0) - pid = int(r0) - return -} - -var libc_getpid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpid getpid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (ppid int) { - r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0) - ppid = int(r0) - return -} - -var libc_getppid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getppid getppid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getpriority_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpriority getpriority "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrtable() (rtable int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0) - rtable = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getrtable_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getrtable getrtable "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getrusage_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getrusage getrusage "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getsid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getsid getsid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_gettimeofday_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0) - uid = int(r0) - return -} - -var libc_getuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getuid getuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Issetugid() (tainted bool) { - r0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0) - tainted = bool(r0 != 0) - return -} - -var libc_issetugid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_issetugid issetugid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kill(pid int, signum syscall.Signal) (err error) { - _, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_kill_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_kill kill "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kqueue() (fd int, err error) { - r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_kqueue_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_kqueue kqueue "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_lchown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_lchown lchown "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Link(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_link_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_link link "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_linkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_linkat linkat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, backlog int) (err error) { - _, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_listen_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_listen listen "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_lstat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_lstat lstat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdir(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mkdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mkdir mkdir "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdirat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mkdirat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifo(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mkfifo_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifoat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mkfifoat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknod(path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mknod_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mknod mknod "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mknodat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mknodat mknodat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_nanosleep_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Open(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_open_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_open open "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_openat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_openat openat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pathconf(path string, name int) (val int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pathconf_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pathconf pathconf "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pread_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pread pread "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pwrite_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pwrite pwrite "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_read_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_read read "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlink(path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_readlink_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_readlink readlink "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_readlinkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_readlinkat readlinkat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rename(from string, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_rename_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_rename rename "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(fromfd int, from string, tofd int, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_renameat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_renameat renameat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Revoke(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_revoke_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_revoke revoke "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rmdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_rmdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_rmdir rmdir "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence)) - newoffset = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_lseek_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_lseek lseek "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_select_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_select select "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setegid(egid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setegid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setegid setegid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seteuid(euid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_seteuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_seteuid seteuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setgid(gid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setgid setgid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setlogin(name string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(name) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setlogin_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setlogin setlogin "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setpgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setpgid setpgid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setpriority_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setpriority setpriority "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setregid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setregid setregid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setreuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setreuid setreuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setresgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setresgid setresgid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setresuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setresuid setresuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrtable(rtable int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrtable_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrtable setrtable "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0) - pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setsid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setsid setsid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_settimeofday_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_settimeofday settimeofday "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setuid(uid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setuid setuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_stat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_stat stat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, stat *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_statfs_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_statfs statfs "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlink(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_symlink_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_symlink symlink "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_symlinkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_symlinkat symlinkat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() (err error) { - _, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sync_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sync sync "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_truncate_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_truncate truncate "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(newmask int) (oldmask int) { - r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0) - oldmask = int(r0) - return -} - -var libc_umask_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_umask umask "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlink(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_unlink_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_unlink unlink "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlinkat(dirfd int, path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_unlinkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unmount(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_unmount_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_unmount unmount "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_write_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_write write "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mmap_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mmap mmap "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_munmap_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_munmap munmap "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_utimensat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_utimensat utimensat "libc.so" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s deleted file mode 100644 index 243a666..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s +++ /dev/null @@ -1,796 +0,0 @@ -// go run mkasm.go openbsd amd64 -// Code generated by the command above; DO NOT EDIT. - -#include "textflag.h" - -TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgroups(SB) - -GLOBL ·libc_getgroups_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB) - -TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgroups(SB) - -GLOBL ·libc_setgroups_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB) - -TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_wait4(SB) - -GLOBL ·libc_wait4_trampoline_addr(SB), RODATA, $8 -DATA ·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB) - -TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_accept(SB) - -GLOBL ·libc_accept_trampoline_addr(SB), RODATA, $8 -DATA ·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB) - -TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_bind(SB) - -GLOBL ·libc_bind_trampoline_addr(SB), RODATA, $8 -DATA ·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB) - -TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_connect(SB) - -GLOBL ·libc_connect_trampoline_addr(SB), RODATA, $8 -DATA ·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB) - -TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socket(SB) - -GLOBL ·libc_socket_trampoline_addr(SB), RODATA, $8 -DATA ·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB) - -TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockopt(SB) - -GLOBL ·libc_getsockopt_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB) - -TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsockopt(SB) - -GLOBL ·libc_setsockopt_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB) - -TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpeername(SB) - -GLOBL ·libc_getpeername_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB) - -TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockname(SB) - -GLOBL ·libc_getsockname_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB) - -TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shutdown(SB) - -GLOBL ·libc_shutdown_trampoline_addr(SB), RODATA, $8 -DATA ·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB) - -TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socketpair(SB) - -GLOBL ·libc_socketpair_trampoline_addr(SB), RODATA, $8 -DATA ·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB) - -TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvfrom(SB) - -GLOBL ·libc_recvfrom_trampoline_addr(SB), RODATA, $8 -DATA ·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB) - -TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendto(SB) - -GLOBL ·libc_sendto_trampoline_addr(SB), RODATA, $8 -DATA ·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB) - -TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvmsg(SB) - -GLOBL ·libc_recvmsg_trampoline_addr(SB), RODATA, $8 -DATA ·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB) - -TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendmsg(SB) - -GLOBL ·libc_sendmsg_trampoline_addr(SB), RODATA, $8 -DATA ·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB) - -TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kevent(SB) - -GLOBL ·libc_kevent_trampoline_addr(SB), RODATA, $8 -DATA ·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB) - -TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimes(SB) - -GLOBL ·libc_utimes_trampoline_addr(SB), RODATA, $8 -DATA ·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB) - -TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_futimes(SB) - -GLOBL ·libc_futimes_trampoline_addr(SB), RODATA, $8 -DATA ·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB) - -TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_poll(SB) - -GLOBL ·libc_poll_trampoline_addr(SB), RODATA, $8 -DATA ·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB) - -TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_madvise(SB) - -GLOBL ·libc_madvise_trampoline_addr(SB), RODATA, $8 -DATA ·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB) - -TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlock(SB) - -GLOBL ·libc_mlock_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB) - -TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlockall(SB) - -GLOBL ·libc_mlockall_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB) - -TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mprotect(SB) - -GLOBL ·libc_mprotect_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB) - -TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_msync(SB) - -GLOBL ·libc_msync_trampoline_addr(SB), RODATA, $8 -DATA ·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB) - -TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlock(SB) - -GLOBL ·libc_munlock_trampoline_addr(SB), RODATA, $8 -DATA ·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB) - -TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlockall(SB) - -GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $8 -DATA ·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB) - -TEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pipe2(SB) - -GLOBL ·libc_pipe2_trampoline_addr(SB), RODATA, $8 -DATA ·libc_pipe2_trampoline_addr(SB)/8, $libc_pipe2_trampoline<>(SB) - -TEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getdents(SB) - -GLOBL ·libc_getdents_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getdents_trampoline_addr(SB)/8, $libc_getdents_trampoline<>(SB) - -TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getcwd(SB) - -GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB) - -TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ioctl(SB) - -GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 -DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB) - -TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sysctl(SB) - -GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 -DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) - -TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ppoll(SB) - -GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8 -DATA ·libc_ppoll_trampoline_addr(SB)/8, $libc_ppoll_trampoline<>(SB) - -TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_access(SB) - -GLOBL ·libc_access_trampoline_addr(SB), RODATA, $8 -DATA ·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB) - -TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_adjtime(SB) - -GLOBL ·libc_adjtime_trampoline_addr(SB), RODATA, $8 -DATA ·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB) - -TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chdir(SB) - -GLOBL ·libc_chdir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB) - -TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chflags(SB) - -GLOBL ·libc_chflags_trampoline_addr(SB), RODATA, $8 -DATA ·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB) - -TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chmod(SB) - -GLOBL ·libc_chmod_trampoline_addr(SB), RODATA, $8 -DATA ·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB) - -TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chown(SB) - -GLOBL ·libc_chown_trampoline_addr(SB), RODATA, $8 -DATA ·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB) - -TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chroot(SB) - -GLOBL ·libc_chroot_trampoline_addr(SB), RODATA, $8 -DATA ·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB) - -TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_close(SB) - -GLOBL ·libc_close_trampoline_addr(SB), RODATA, $8 -DATA ·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB) - -TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup(SB) - -GLOBL ·libc_dup_trampoline_addr(SB), RODATA, $8 -DATA ·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB) - -TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup2(SB) - -GLOBL ·libc_dup2_trampoline_addr(SB), RODATA, $8 -DATA ·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB) - -TEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup3(SB) - -GLOBL ·libc_dup3_trampoline_addr(SB), RODATA, $8 -DATA ·libc_dup3_trampoline_addr(SB)/8, $libc_dup3_trampoline<>(SB) - -TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_exit(SB) - -GLOBL ·libc_exit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB) - -TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_faccessat(SB) - -GLOBL ·libc_faccessat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB) - -TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchdir(SB) - -GLOBL ·libc_fchdir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB) - -TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchflags(SB) - -GLOBL ·libc_fchflags_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB) - -TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmod(SB) - -GLOBL ·libc_fchmod_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB) - -TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmodat(SB) - -GLOBL ·libc_fchmodat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB) - -TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchown(SB) - -GLOBL ·libc_fchown_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB) - -TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchownat(SB) - -GLOBL ·libc_fchownat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB) - -TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_flock(SB) - -GLOBL ·libc_flock_trampoline_addr(SB), RODATA, $8 -DATA ·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB) - -TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fpathconf(SB) - -GLOBL ·libc_fpathconf_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB) - -TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstat(SB) - -GLOBL ·libc_fstat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB) - -TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatat(SB) - -GLOBL ·libc_fstatat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB) - -TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatfs(SB) - -GLOBL ·libc_fstatfs_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB) - -TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fsync(SB) - -GLOBL ·libc_fsync_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB) - -TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ftruncate(SB) - -GLOBL ·libc_ftruncate_trampoline_addr(SB), RODATA, $8 -DATA ·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB) - -TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getegid(SB) - -GLOBL ·libc_getegid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB) - -TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_geteuid(SB) - -GLOBL ·libc_geteuid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB) - -TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgid(SB) - -GLOBL ·libc_getgid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB) - -TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgid(SB) - -GLOBL ·libc_getpgid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB) - -TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgrp(SB) - -GLOBL ·libc_getpgrp_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB) - -TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpid(SB) - -GLOBL ·libc_getpid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB) - -TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getppid(SB) - -GLOBL ·libc_getppid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB) - -TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpriority(SB) - -GLOBL ·libc_getpriority_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB) - -TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrlimit(SB) - -GLOBL ·libc_getrlimit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB) - -TEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrtable(SB) - -GLOBL ·libc_getrtable_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getrtable_trampoline_addr(SB)/8, $libc_getrtable_trampoline<>(SB) - -TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrusage(SB) - -GLOBL ·libc_getrusage_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB) - -TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsid(SB) - -GLOBL ·libc_getsid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB) - -TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_gettimeofday(SB) - -GLOBL ·libc_gettimeofday_trampoline_addr(SB), RODATA, $8 -DATA ·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB) - -TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getuid(SB) - -GLOBL ·libc_getuid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB) - -TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_issetugid(SB) - -GLOBL ·libc_issetugid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB) - -TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kill(SB) - -GLOBL ·libc_kill_trampoline_addr(SB), RODATA, $8 -DATA ·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB) - -TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kqueue(SB) - -GLOBL ·libc_kqueue_trampoline_addr(SB), RODATA, $8 -DATA ·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB) - -TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lchown(SB) - -GLOBL ·libc_lchown_trampoline_addr(SB), RODATA, $8 -DATA ·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB) - -TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_link(SB) - -GLOBL ·libc_link_trampoline_addr(SB), RODATA, $8 -DATA ·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB) - -TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_linkat(SB) - -GLOBL ·libc_linkat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB) - -TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_listen(SB) - -GLOBL ·libc_listen_trampoline_addr(SB), RODATA, $8 -DATA ·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB) - -TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lstat(SB) - -GLOBL ·libc_lstat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB) - -TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdir(SB) - -GLOBL ·libc_mkdir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB) - -TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdirat(SB) - -GLOBL ·libc_mkdirat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB) - -TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkfifo(SB) - -GLOBL ·libc_mkfifo_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB) - -TEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkfifoat(SB) - -GLOBL ·libc_mkfifoat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mkfifoat_trampoline_addr(SB)/8, $libc_mkfifoat_trampoline<>(SB) - -TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mknod(SB) - -GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB) - -TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mknodat(SB) - -GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB) - -TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_nanosleep(SB) - -GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $8 -DATA ·libc_nanosleep_trampoline_addr(SB)/8, $libc_nanosleep_trampoline<>(SB) - -TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_open(SB) - -GLOBL ·libc_open_trampoline_addr(SB), RODATA, $8 -DATA ·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB) - -TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_openat(SB) - -GLOBL ·libc_openat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB) - -TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pathconf(SB) - -GLOBL ·libc_pathconf_trampoline_addr(SB), RODATA, $8 -DATA ·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB) - -TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pread(SB) - -GLOBL ·libc_pread_trampoline_addr(SB), RODATA, $8 -DATA ·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB) - -TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pwrite(SB) - -GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8 -DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB) - -TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_read(SB) - -GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8 -DATA ·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB) - -TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlink(SB) - -GLOBL ·libc_readlink_trampoline_addr(SB), RODATA, $8 -DATA ·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB) - -TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlinkat(SB) - -GLOBL ·libc_readlinkat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB) - -TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rename(SB) - -GLOBL ·libc_rename_trampoline_addr(SB), RODATA, $8 -DATA ·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB) - -TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_renameat(SB) - -GLOBL ·libc_renameat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB) - -TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_revoke(SB) - -GLOBL ·libc_revoke_trampoline_addr(SB), RODATA, $8 -DATA ·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB) - -TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rmdir(SB) - -GLOBL ·libc_rmdir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB) - -TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lseek(SB) - -GLOBL ·libc_lseek_trampoline_addr(SB), RODATA, $8 -DATA ·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB) - -TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_select(SB) - -GLOBL ·libc_select_trampoline_addr(SB), RODATA, $8 -DATA ·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB) - -TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setegid(SB) - -GLOBL ·libc_setegid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB) - -TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_seteuid(SB) - -GLOBL ·libc_seteuid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB) - -TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgid(SB) - -GLOBL ·libc_setgid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB) - -TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setlogin(SB) - -GLOBL ·libc_setlogin_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB) - -TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpgid(SB) - -GLOBL ·libc_setpgid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB) - -TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpriority(SB) - -GLOBL ·libc_setpriority_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB) - -TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setregid(SB) - -GLOBL ·libc_setregid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB) - -TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setreuid(SB) - -GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB) - -TEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setresgid(SB) - -GLOBL ·libc_setresgid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setresgid_trampoline_addr(SB)/8, $libc_setresgid_trampoline<>(SB) - -TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setresuid(SB) - -GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB) - -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) - -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) - -TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrtable(SB) - -GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setrtable_trampoline_addr(SB)/8, $libc_setrtable_trampoline<>(SB) - -TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsid(SB) - -GLOBL ·libc_setsid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB) - -TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_settimeofday(SB) - -GLOBL ·libc_settimeofday_trampoline_addr(SB), RODATA, $8 -DATA ·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB) - -TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setuid(SB) - -GLOBL ·libc_setuid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB) - -TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_stat(SB) - -GLOBL ·libc_stat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB) - -TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_statfs(SB) - -GLOBL ·libc_statfs_trampoline_addr(SB), RODATA, $8 -DATA ·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB) - -TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlink(SB) - -GLOBL ·libc_symlink_trampoline_addr(SB), RODATA, $8 -DATA ·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB) - -TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlinkat(SB) - -GLOBL ·libc_symlinkat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB) - -TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sync(SB) - -GLOBL ·libc_sync_trampoline_addr(SB), RODATA, $8 -DATA ·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB) - -TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_truncate(SB) - -GLOBL ·libc_truncate_trampoline_addr(SB), RODATA, $8 -DATA ·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB) - -TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_umask(SB) - -GLOBL ·libc_umask_trampoline_addr(SB), RODATA, $8 -DATA ·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB) - -TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlink(SB) - -GLOBL ·libc_unlink_trampoline_addr(SB), RODATA, $8 -DATA ·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB) - -TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlinkat(SB) - -GLOBL ·libc_unlinkat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB) - -TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unmount(SB) - -GLOBL ·libc_unmount_trampoline_addr(SB), RODATA, $8 -DATA ·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB) - -TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_write(SB) - -GLOBL ·libc_write_trampoline_addr(SB), RODATA, $8 -DATA ·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB) - -TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mmap(SB) - -GLOBL ·libc_mmap_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB) - -TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munmap(SB) - -GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 -DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) - -TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimensat(SB) - -GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go deleted file mode 100644 index 8da6791..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go +++ /dev/null @@ -1,2221 +0,0 @@ -// go run mksyscall.go -l32 -openbsd -arm -libc -tags openbsd,arm syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build openbsd && arm -// +build openbsd,arm - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getgroups_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getgroups getgroups "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setgroups_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setgroups setgroups "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) - wpid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_wait4_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_wait4 wait4 "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_accept_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_accept accept "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_bind_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_bind bind "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_connect_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_connect connect "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_socket_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_socket socket "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getsockopt_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getsockopt getsockopt "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setsockopt_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setsockopt setsockopt "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getpeername_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpeername getpeername "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getsockname_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getsockname getsockname "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(s int, how int) (err error) { - _, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_shutdown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_shutdown shutdown "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_socketpair_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_socketpair socketpair "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_recvfrom_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_recvfrom recvfrom "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sendto_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sendto sendto "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_recvmsg_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_recvmsg recvmsg "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sendmsg_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sendmsg sendmsg "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_kevent_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_kevent kevent "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, timeval *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_utimes_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_utimes utimes "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_futimes_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_futimes futimes "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_poll_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_poll poll "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Madvise(b []byte, behav int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_madvise_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_madvise madvise "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mlock_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mlock mlock "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mlockall_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mlockall mlockall "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mprotect_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mprotect mprotect "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_msync_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_msync msync "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_munlock_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_munlock munlock "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_munlockall_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_munlockall munlockall "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe2(p *[2]_C_int, flags int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pipe2_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getdents(fd int, buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getdents_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getdents getdents "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getcwd(buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getcwd_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getcwd getcwd "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_ioctl_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_ioctl ioctl "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { - _p0 = unsafe.Pointer(&mib[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sysctl_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sysctl sysctl "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { - r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_ppoll_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_ppoll ppoll "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_access_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_access access "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_adjtime_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_adjtime adjtime "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chdir chdir "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chflags(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chflags_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chflags chflags "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chmod(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chmod_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chmod chmod "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chown chown "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chroot_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chroot chroot "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_close_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_close close "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(fd int) (nfd int, err error) { - r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_dup_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_dup dup "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup2(from int, to int) (err error) { - _, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_dup2_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_dup2 dup2 "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup3(from int, to int, flags int) (err error) { - _, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_dup3_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_dup3 dup3 "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0) - return -} - -var libc_exit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_exit exit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_faccessat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_faccessat faccessat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchdir fchdir "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchflags(fd int, flags int) (err error) { - _, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchflags_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchflags fchflags "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchmod_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchmod fchmod "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchmodat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchown fchown "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchownat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchownat fchownat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Flock(fd int, how int) (err error) { - _, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_flock_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_flock flock "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fpathconf_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so" - -// 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 { - err = errnoErr(e1) - } - return -} - -var libc_fstat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fstat fstat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fstatat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fstatat fstatat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, stat *Statfs_t) (err error) { - _, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fstatfs_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fstatfs fstatfs "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsync(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fsync_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fsync fsync "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := syscall_syscall6(libc_ftruncate_trampoline_addr, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_ftruncate_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0) - egid = int(r0) - return -} - -var libc_getegid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getegid getegid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (uid int) { - r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0) - uid = int(r0) - return -} - -var libc_geteuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_geteuid geteuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0) - gid = int(r0) - return -} - -var libc_getgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getgid getgid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getpgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpgid getpgid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgrp() (pgrp int) { - r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0) - pgrp = int(r0) - return -} - -var libc_getpgrp_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0) - pid = int(r0) - return -} - -var libc_getpid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpid getpid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (ppid int) { - r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0) - ppid = int(r0) - return -} - -var libc_getppid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getppid getppid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getpriority_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpriority getpriority "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrtable() (rtable int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0) - rtable = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getrtable_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getrtable getrtable "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getrusage_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getrusage getrusage "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getsid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getsid getsid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_gettimeofday_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0) - uid = int(r0) - return -} - -var libc_getuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getuid getuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Issetugid() (tainted bool) { - r0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0) - tainted = bool(r0 != 0) - return -} - -var libc_issetugid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_issetugid issetugid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kill(pid int, signum syscall.Signal) (err error) { - _, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_kill_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_kill kill "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kqueue() (fd int, err error) { - r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_kqueue_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_kqueue kqueue "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_lchown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_lchown lchown "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Link(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_link_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_link link "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_linkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_linkat linkat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, backlog int) (err error) { - _, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_listen_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_listen listen "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_lstat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_lstat lstat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdir(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mkdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mkdir mkdir "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdirat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mkdirat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifo(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mkfifo_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifoat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mkfifoat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknod(path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mknod_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mknod mknod "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mknodat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mknodat mknodat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_nanosleep_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Open(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_open_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_open open "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_openat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_openat openat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pathconf(path string, name int) (val int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pathconf_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pathconf pathconf "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pread_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pread pread "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pwrite_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pwrite pwrite "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_read_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_read read "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlink(path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_readlink_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_readlink readlink "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_readlinkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_readlinkat readlinkat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rename(from string, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_rename_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_rename rename "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(fromfd int, from string, tofd int, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_renameat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_renameat renameat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Revoke(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_revoke_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_revoke revoke "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rmdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_rmdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_rmdir rmdir "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, r1, e1 := syscall_syscall6(libc_lseek_trampoline_addr, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) - newoffset = int64(int64(r1)<<32 | int64(r0)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_lseek_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_lseek lseek "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_select_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_select select "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setegid(egid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setegid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setegid setegid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seteuid(euid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_seteuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_seteuid seteuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setgid(gid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setgid setgid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setlogin(name string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(name) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setlogin_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setlogin setlogin "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setpgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setpgid setpgid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setpriority_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setpriority setpriority "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setregid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setregid setregid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setreuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setreuid setreuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setresgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setresgid setresgid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setresuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setresuid setresuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrtable(rtable int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrtable_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrtable setrtable "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0) - pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setsid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setsid setsid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_settimeofday_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_settimeofday settimeofday "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setuid(uid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setuid setuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_stat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_stat stat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, stat *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_statfs_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_statfs statfs "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlink(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_symlink_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_symlink symlink "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_symlinkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_symlinkat symlinkat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() (err error) { - _, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sync_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sync sync "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_truncate_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_truncate truncate "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(newmask int) (oldmask int) { - r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0) - oldmask = int(r0) - return -} - -var libc_umask_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_umask umask "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlink(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_unlink_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_unlink unlink "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlinkat(dirfd int, path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_unlinkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unmount(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_unmount_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_unmount unmount "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_write_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_write write "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := syscall_syscall9(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mmap_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mmap mmap "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_munmap_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_munmap munmap "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_utimensat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_utimensat utimensat "libc.so" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s deleted file mode 100644 index 9ad116d..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s +++ /dev/null @@ -1,796 +0,0 @@ -// go run mkasm.go openbsd arm -// Code generated by the command above; DO NOT EDIT. - -#include "textflag.h" - -TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgroups(SB) - -GLOBL ·libc_getgroups_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getgroups_trampoline_addr(SB)/4, $libc_getgroups_trampoline<>(SB) - -TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgroups(SB) - -GLOBL ·libc_setgroups_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setgroups_trampoline_addr(SB)/4, $libc_setgroups_trampoline<>(SB) - -TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_wait4(SB) - -GLOBL ·libc_wait4_trampoline_addr(SB), RODATA, $4 -DATA ·libc_wait4_trampoline_addr(SB)/4, $libc_wait4_trampoline<>(SB) - -TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_accept(SB) - -GLOBL ·libc_accept_trampoline_addr(SB), RODATA, $4 -DATA ·libc_accept_trampoline_addr(SB)/4, $libc_accept_trampoline<>(SB) - -TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_bind(SB) - -GLOBL ·libc_bind_trampoline_addr(SB), RODATA, $4 -DATA ·libc_bind_trampoline_addr(SB)/4, $libc_bind_trampoline<>(SB) - -TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_connect(SB) - -GLOBL ·libc_connect_trampoline_addr(SB), RODATA, $4 -DATA ·libc_connect_trampoline_addr(SB)/4, $libc_connect_trampoline<>(SB) - -TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socket(SB) - -GLOBL ·libc_socket_trampoline_addr(SB), RODATA, $4 -DATA ·libc_socket_trampoline_addr(SB)/4, $libc_socket_trampoline<>(SB) - -TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockopt(SB) - -GLOBL ·libc_getsockopt_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getsockopt_trampoline_addr(SB)/4, $libc_getsockopt_trampoline<>(SB) - -TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsockopt(SB) - -GLOBL ·libc_setsockopt_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setsockopt_trampoline_addr(SB)/4, $libc_setsockopt_trampoline<>(SB) - -TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpeername(SB) - -GLOBL ·libc_getpeername_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getpeername_trampoline_addr(SB)/4, $libc_getpeername_trampoline<>(SB) - -TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockname(SB) - -GLOBL ·libc_getsockname_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getsockname_trampoline_addr(SB)/4, $libc_getsockname_trampoline<>(SB) - -TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shutdown(SB) - -GLOBL ·libc_shutdown_trampoline_addr(SB), RODATA, $4 -DATA ·libc_shutdown_trampoline_addr(SB)/4, $libc_shutdown_trampoline<>(SB) - -TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socketpair(SB) - -GLOBL ·libc_socketpair_trampoline_addr(SB), RODATA, $4 -DATA ·libc_socketpair_trampoline_addr(SB)/4, $libc_socketpair_trampoline<>(SB) - -TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvfrom(SB) - -GLOBL ·libc_recvfrom_trampoline_addr(SB), RODATA, $4 -DATA ·libc_recvfrom_trampoline_addr(SB)/4, $libc_recvfrom_trampoline<>(SB) - -TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendto(SB) - -GLOBL ·libc_sendto_trampoline_addr(SB), RODATA, $4 -DATA ·libc_sendto_trampoline_addr(SB)/4, $libc_sendto_trampoline<>(SB) - -TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvmsg(SB) - -GLOBL ·libc_recvmsg_trampoline_addr(SB), RODATA, $4 -DATA ·libc_recvmsg_trampoline_addr(SB)/4, $libc_recvmsg_trampoline<>(SB) - -TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendmsg(SB) - -GLOBL ·libc_sendmsg_trampoline_addr(SB), RODATA, $4 -DATA ·libc_sendmsg_trampoline_addr(SB)/4, $libc_sendmsg_trampoline<>(SB) - -TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kevent(SB) - -GLOBL ·libc_kevent_trampoline_addr(SB), RODATA, $4 -DATA ·libc_kevent_trampoline_addr(SB)/4, $libc_kevent_trampoline<>(SB) - -TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimes(SB) - -GLOBL ·libc_utimes_trampoline_addr(SB), RODATA, $4 -DATA ·libc_utimes_trampoline_addr(SB)/4, $libc_utimes_trampoline<>(SB) - -TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_futimes(SB) - -GLOBL ·libc_futimes_trampoline_addr(SB), RODATA, $4 -DATA ·libc_futimes_trampoline_addr(SB)/4, $libc_futimes_trampoline<>(SB) - -TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_poll(SB) - -GLOBL ·libc_poll_trampoline_addr(SB), RODATA, $4 -DATA ·libc_poll_trampoline_addr(SB)/4, $libc_poll_trampoline<>(SB) - -TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_madvise(SB) - -GLOBL ·libc_madvise_trampoline_addr(SB), RODATA, $4 -DATA ·libc_madvise_trampoline_addr(SB)/4, $libc_madvise_trampoline<>(SB) - -TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlock(SB) - -GLOBL ·libc_mlock_trampoline_addr(SB), RODATA, $4 -DATA ·libc_mlock_trampoline_addr(SB)/4, $libc_mlock_trampoline<>(SB) - -TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlockall(SB) - -GLOBL ·libc_mlockall_trampoline_addr(SB), RODATA, $4 -DATA ·libc_mlockall_trampoline_addr(SB)/4, $libc_mlockall_trampoline<>(SB) - -TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mprotect(SB) - -GLOBL ·libc_mprotect_trampoline_addr(SB), RODATA, $4 -DATA ·libc_mprotect_trampoline_addr(SB)/4, $libc_mprotect_trampoline<>(SB) - -TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_msync(SB) - -GLOBL ·libc_msync_trampoline_addr(SB), RODATA, $4 -DATA ·libc_msync_trampoline_addr(SB)/4, $libc_msync_trampoline<>(SB) - -TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlock(SB) - -GLOBL ·libc_munlock_trampoline_addr(SB), RODATA, $4 -DATA ·libc_munlock_trampoline_addr(SB)/4, $libc_munlock_trampoline<>(SB) - -TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlockall(SB) - -GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $4 -DATA ·libc_munlockall_trampoline_addr(SB)/4, $libc_munlockall_trampoline<>(SB) - -TEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pipe2(SB) - -GLOBL ·libc_pipe2_trampoline_addr(SB), RODATA, $4 -DATA ·libc_pipe2_trampoline_addr(SB)/4, $libc_pipe2_trampoline<>(SB) - -TEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getdents(SB) - -GLOBL ·libc_getdents_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getdents_trampoline_addr(SB)/4, $libc_getdents_trampoline<>(SB) - -TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getcwd(SB) - -GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getcwd_trampoline_addr(SB)/4, $libc_getcwd_trampoline<>(SB) - -TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ioctl(SB) - -GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $4 -DATA ·libc_ioctl_trampoline_addr(SB)/4, $libc_ioctl_trampoline<>(SB) - -TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sysctl(SB) - -GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $4 -DATA ·libc_sysctl_trampoline_addr(SB)/4, $libc_sysctl_trampoline<>(SB) - -TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ppoll(SB) - -GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $4 -DATA ·libc_ppoll_trampoline_addr(SB)/4, $libc_ppoll_trampoline<>(SB) - -TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_access(SB) - -GLOBL ·libc_access_trampoline_addr(SB), RODATA, $4 -DATA ·libc_access_trampoline_addr(SB)/4, $libc_access_trampoline<>(SB) - -TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_adjtime(SB) - -GLOBL ·libc_adjtime_trampoline_addr(SB), RODATA, $4 -DATA ·libc_adjtime_trampoline_addr(SB)/4, $libc_adjtime_trampoline<>(SB) - -TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chdir(SB) - -GLOBL ·libc_chdir_trampoline_addr(SB), RODATA, $4 -DATA ·libc_chdir_trampoline_addr(SB)/4, $libc_chdir_trampoline<>(SB) - -TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chflags(SB) - -GLOBL ·libc_chflags_trampoline_addr(SB), RODATA, $4 -DATA ·libc_chflags_trampoline_addr(SB)/4, $libc_chflags_trampoline<>(SB) - -TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chmod(SB) - -GLOBL ·libc_chmod_trampoline_addr(SB), RODATA, $4 -DATA ·libc_chmod_trampoline_addr(SB)/4, $libc_chmod_trampoline<>(SB) - -TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chown(SB) - -GLOBL ·libc_chown_trampoline_addr(SB), RODATA, $4 -DATA ·libc_chown_trampoline_addr(SB)/4, $libc_chown_trampoline<>(SB) - -TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chroot(SB) - -GLOBL ·libc_chroot_trampoline_addr(SB), RODATA, $4 -DATA ·libc_chroot_trampoline_addr(SB)/4, $libc_chroot_trampoline<>(SB) - -TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_close(SB) - -GLOBL ·libc_close_trampoline_addr(SB), RODATA, $4 -DATA ·libc_close_trampoline_addr(SB)/4, $libc_close_trampoline<>(SB) - -TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup(SB) - -GLOBL ·libc_dup_trampoline_addr(SB), RODATA, $4 -DATA ·libc_dup_trampoline_addr(SB)/4, $libc_dup_trampoline<>(SB) - -TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup2(SB) - -GLOBL ·libc_dup2_trampoline_addr(SB), RODATA, $4 -DATA ·libc_dup2_trampoline_addr(SB)/4, $libc_dup2_trampoline<>(SB) - -TEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup3(SB) - -GLOBL ·libc_dup3_trampoline_addr(SB), RODATA, $4 -DATA ·libc_dup3_trampoline_addr(SB)/4, $libc_dup3_trampoline<>(SB) - -TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_exit(SB) - -GLOBL ·libc_exit_trampoline_addr(SB), RODATA, $4 -DATA ·libc_exit_trampoline_addr(SB)/4, $libc_exit_trampoline<>(SB) - -TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_faccessat(SB) - -GLOBL ·libc_faccessat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_faccessat_trampoline_addr(SB)/4, $libc_faccessat_trampoline<>(SB) - -TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchdir(SB) - -GLOBL ·libc_fchdir_trampoline_addr(SB), RODATA, $4 -DATA ·libc_fchdir_trampoline_addr(SB)/4, $libc_fchdir_trampoline<>(SB) - -TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchflags(SB) - -GLOBL ·libc_fchflags_trampoline_addr(SB), RODATA, $4 -DATA ·libc_fchflags_trampoline_addr(SB)/4, $libc_fchflags_trampoline<>(SB) - -TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmod(SB) - -GLOBL ·libc_fchmod_trampoline_addr(SB), RODATA, $4 -DATA ·libc_fchmod_trampoline_addr(SB)/4, $libc_fchmod_trampoline<>(SB) - -TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmodat(SB) - -GLOBL ·libc_fchmodat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_fchmodat_trampoline_addr(SB)/4, $libc_fchmodat_trampoline<>(SB) - -TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchown(SB) - -GLOBL ·libc_fchown_trampoline_addr(SB), RODATA, $4 -DATA ·libc_fchown_trampoline_addr(SB)/4, $libc_fchown_trampoline<>(SB) - -TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchownat(SB) - -GLOBL ·libc_fchownat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_fchownat_trampoline_addr(SB)/4, $libc_fchownat_trampoline<>(SB) - -TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_flock(SB) - -GLOBL ·libc_flock_trampoline_addr(SB), RODATA, $4 -DATA ·libc_flock_trampoline_addr(SB)/4, $libc_flock_trampoline<>(SB) - -TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fpathconf(SB) - -GLOBL ·libc_fpathconf_trampoline_addr(SB), RODATA, $4 -DATA ·libc_fpathconf_trampoline_addr(SB)/4, $libc_fpathconf_trampoline<>(SB) - -TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstat(SB) - -GLOBL ·libc_fstat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_fstat_trampoline_addr(SB)/4, $libc_fstat_trampoline<>(SB) - -TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatat(SB) - -GLOBL ·libc_fstatat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_fstatat_trampoline_addr(SB)/4, $libc_fstatat_trampoline<>(SB) - -TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatfs(SB) - -GLOBL ·libc_fstatfs_trampoline_addr(SB), RODATA, $4 -DATA ·libc_fstatfs_trampoline_addr(SB)/4, $libc_fstatfs_trampoline<>(SB) - -TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fsync(SB) - -GLOBL ·libc_fsync_trampoline_addr(SB), RODATA, $4 -DATA ·libc_fsync_trampoline_addr(SB)/4, $libc_fsync_trampoline<>(SB) - -TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ftruncate(SB) - -GLOBL ·libc_ftruncate_trampoline_addr(SB), RODATA, $4 -DATA ·libc_ftruncate_trampoline_addr(SB)/4, $libc_ftruncate_trampoline<>(SB) - -TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getegid(SB) - -GLOBL ·libc_getegid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getegid_trampoline_addr(SB)/4, $libc_getegid_trampoline<>(SB) - -TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_geteuid(SB) - -GLOBL ·libc_geteuid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_geteuid_trampoline_addr(SB)/4, $libc_geteuid_trampoline<>(SB) - -TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgid(SB) - -GLOBL ·libc_getgid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getgid_trampoline_addr(SB)/4, $libc_getgid_trampoline<>(SB) - -TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgid(SB) - -GLOBL ·libc_getpgid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getpgid_trampoline_addr(SB)/4, $libc_getpgid_trampoline<>(SB) - -TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgrp(SB) - -GLOBL ·libc_getpgrp_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getpgrp_trampoline_addr(SB)/4, $libc_getpgrp_trampoline<>(SB) - -TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpid(SB) - -GLOBL ·libc_getpid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getpid_trampoline_addr(SB)/4, $libc_getpid_trampoline<>(SB) - -TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getppid(SB) - -GLOBL ·libc_getppid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getppid_trampoline_addr(SB)/4, $libc_getppid_trampoline<>(SB) - -TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpriority(SB) - -GLOBL ·libc_getpriority_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getpriority_trampoline_addr(SB)/4, $libc_getpriority_trampoline<>(SB) - -TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrlimit(SB) - -GLOBL ·libc_getrlimit_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getrlimit_trampoline_addr(SB)/4, $libc_getrlimit_trampoline<>(SB) - -TEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrtable(SB) - -GLOBL ·libc_getrtable_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getrtable_trampoline_addr(SB)/4, $libc_getrtable_trampoline<>(SB) - -TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrusage(SB) - -GLOBL ·libc_getrusage_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getrusage_trampoline_addr(SB)/4, $libc_getrusage_trampoline<>(SB) - -TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsid(SB) - -GLOBL ·libc_getsid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getsid_trampoline_addr(SB)/4, $libc_getsid_trampoline<>(SB) - -TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_gettimeofday(SB) - -GLOBL ·libc_gettimeofday_trampoline_addr(SB), RODATA, $4 -DATA ·libc_gettimeofday_trampoline_addr(SB)/4, $libc_gettimeofday_trampoline<>(SB) - -TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getuid(SB) - -GLOBL ·libc_getuid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_getuid_trampoline_addr(SB)/4, $libc_getuid_trampoline<>(SB) - -TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_issetugid(SB) - -GLOBL ·libc_issetugid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_issetugid_trampoline_addr(SB)/4, $libc_issetugid_trampoline<>(SB) - -TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kill(SB) - -GLOBL ·libc_kill_trampoline_addr(SB), RODATA, $4 -DATA ·libc_kill_trampoline_addr(SB)/4, $libc_kill_trampoline<>(SB) - -TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kqueue(SB) - -GLOBL ·libc_kqueue_trampoline_addr(SB), RODATA, $4 -DATA ·libc_kqueue_trampoline_addr(SB)/4, $libc_kqueue_trampoline<>(SB) - -TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lchown(SB) - -GLOBL ·libc_lchown_trampoline_addr(SB), RODATA, $4 -DATA ·libc_lchown_trampoline_addr(SB)/4, $libc_lchown_trampoline<>(SB) - -TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_link(SB) - -GLOBL ·libc_link_trampoline_addr(SB), RODATA, $4 -DATA ·libc_link_trampoline_addr(SB)/4, $libc_link_trampoline<>(SB) - -TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_linkat(SB) - -GLOBL ·libc_linkat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_linkat_trampoline_addr(SB)/4, $libc_linkat_trampoline<>(SB) - -TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_listen(SB) - -GLOBL ·libc_listen_trampoline_addr(SB), RODATA, $4 -DATA ·libc_listen_trampoline_addr(SB)/4, $libc_listen_trampoline<>(SB) - -TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lstat(SB) - -GLOBL ·libc_lstat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_lstat_trampoline_addr(SB)/4, $libc_lstat_trampoline<>(SB) - -TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdir(SB) - -GLOBL ·libc_mkdir_trampoline_addr(SB), RODATA, $4 -DATA ·libc_mkdir_trampoline_addr(SB)/4, $libc_mkdir_trampoline<>(SB) - -TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdirat(SB) - -GLOBL ·libc_mkdirat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_mkdirat_trampoline_addr(SB)/4, $libc_mkdirat_trampoline<>(SB) - -TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkfifo(SB) - -GLOBL ·libc_mkfifo_trampoline_addr(SB), RODATA, $4 -DATA ·libc_mkfifo_trampoline_addr(SB)/4, $libc_mkfifo_trampoline<>(SB) - -TEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkfifoat(SB) - -GLOBL ·libc_mkfifoat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_mkfifoat_trampoline_addr(SB)/4, $libc_mkfifoat_trampoline<>(SB) - -TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mknod(SB) - -GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $4 -DATA ·libc_mknod_trampoline_addr(SB)/4, $libc_mknod_trampoline<>(SB) - -TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mknodat(SB) - -GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_mknodat_trampoline_addr(SB)/4, $libc_mknodat_trampoline<>(SB) - -TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_nanosleep(SB) - -GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $4 -DATA ·libc_nanosleep_trampoline_addr(SB)/4, $libc_nanosleep_trampoline<>(SB) - -TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_open(SB) - -GLOBL ·libc_open_trampoline_addr(SB), RODATA, $4 -DATA ·libc_open_trampoline_addr(SB)/4, $libc_open_trampoline<>(SB) - -TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_openat(SB) - -GLOBL ·libc_openat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_openat_trampoline_addr(SB)/4, $libc_openat_trampoline<>(SB) - -TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pathconf(SB) - -GLOBL ·libc_pathconf_trampoline_addr(SB), RODATA, $4 -DATA ·libc_pathconf_trampoline_addr(SB)/4, $libc_pathconf_trampoline<>(SB) - -TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pread(SB) - -GLOBL ·libc_pread_trampoline_addr(SB), RODATA, $4 -DATA ·libc_pread_trampoline_addr(SB)/4, $libc_pread_trampoline<>(SB) - -TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pwrite(SB) - -GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $4 -DATA ·libc_pwrite_trampoline_addr(SB)/4, $libc_pwrite_trampoline<>(SB) - -TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_read(SB) - -GLOBL ·libc_read_trampoline_addr(SB), RODATA, $4 -DATA ·libc_read_trampoline_addr(SB)/4, $libc_read_trampoline<>(SB) - -TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlink(SB) - -GLOBL ·libc_readlink_trampoline_addr(SB), RODATA, $4 -DATA ·libc_readlink_trampoline_addr(SB)/4, $libc_readlink_trampoline<>(SB) - -TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlinkat(SB) - -GLOBL ·libc_readlinkat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_readlinkat_trampoline_addr(SB)/4, $libc_readlinkat_trampoline<>(SB) - -TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rename(SB) - -GLOBL ·libc_rename_trampoline_addr(SB), RODATA, $4 -DATA ·libc_rename_trampoline_addr(SB)/4, $libc_rename_trampoline<>(SB) - -TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_renameat(SB) - -GLOBL ·libc_renameat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_renameat_trampoline_addr(SB)/4, $libc_renameat_trampoline<>(SB) - -TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_revoke(SB) - -GLOBL ·libc_revoke_trampoline_addr(SB), RODATA, $4 -DATA ·libc_revoke_trampoline_addr(SB)/4, $libc_revoke_trampoline<>(SB) - -TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rmdir(SB) - -GLOBL ·libc_rmdir_trampoline_addr(SB), RODATA, $4 -DATA ·libc_rmdir_trampoline_addr(SB)/4, $libc_rmdir_trampoline<>(SB) - -TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lseek(SB) - -GLOBL ·libc_lseek_trampoline_addr(SB), RODATA, $4 -DATA ·libc_lseek_trampoline_addr(SB)/4, $libc_lseek_trampoline<>(SB) - -TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_select(SB) - -GLOBL ·libc_select_trampoline_addr(SB), RODATA, $4 -DATA ·libc_select_trampoline_addr(SB)/4, $libc_select_trampoline<>(SB) - -TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setegid(SB) - -GLOBL ·libc_setegid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setegid_trampoline_addr(SB)/4, $libc_setegid_trampoline<>(SB) - -TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_seteuid(SB) - -GLOBL ·libc_seteuid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_seteuid_trampoline_addr(SB)/4, $libc_seteuid_trampoline<>(SB) - -TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgid(SB) - -GLOBL ·libc_setgid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setgid_trampoline_addr(SB)/4, $libc_setgid_trampoline<>(SB) - -TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setlogin(SB) - -GLOBL ·libc_setlogin_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setlogin_trampoline_addr(SB)/4, $libc_setlogin_trampoline<>(SB) - -TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpgid(SB) - -GLOBL ·libc_setpgid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setpgid_trampoline_addr(SB)/4, $libc_setpgid_trampoline<>(SB) - -TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpriority(SB) - -GLOBL ·libc_setpriority_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setpriority_trampoline_addr(SB)/4, $libc_setpriority_trampoline<>(SB) - -TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setregid(SB) - -GLOBL ·libc_setregid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setregid_trampoline_addr(SB)/4, $libc_setregid_trampoline<>(SB) - -TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setreuid(SB) - -GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setreuid_trampoline_addr(SB)/4, $libc_setreuid_trampoline<>(SB) - -TEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setresgid(SB) - -GLOBL ·libc_setresgid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setresgid_trampoline_addr(SB)/4, $libc_setresgid_trampoline<>(SB) - -TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setresuid(SB) - -GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setresuid_trampoline_addr(SB)/4, $libc_setresuid_trampoline<>(SB) - -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) - -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setrlimit_trampoline_addr(SB)/4, $libc_setrlimit_trampoline<>(SB) - -TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrtable(SB) - -GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setrtable_trampoline_addr(SB)/4, $libc_setrtable_trampoline<>(SB) - -TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsid(SB) - -GLOBL ·libc_setsid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setsid_trampoline_addr(SB)/4, $libc_setsid_trampoline<>(SB) - -TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_settimeofday(SB) - -GLOBL ·libc_settimeofday_trampoline_addr(SB), RODATA, $4 -DATA ·libc_settimeofday_trampoline_addr(SB)/4, $libc_settimeofday_trampoline<>(SB) - -TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setuid(SB) - -GLOBL ·libc_setuid_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setuid_trampoline_addr(SB)/4, $libc_setuid_trampoline<>(SB) - -TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_stat(SB) - -GLOBL ·libc_stat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_stat_trampoline_addr(SB)/4, $libc_stat_trampoline<>(SB) - -TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_statfs(SB) - -GLOBL ·libc_statfs_trampoline_addr(SB), RODATA, $4 -DATA ·libc_statfs_trampoline_addr(SB)/4, $libc_statfs_trampoline<>(SB) - -TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlink(SB) - -GLOBL ·libc_symlink_trampoline_addr(SB), RODATA, $4 -DATA ·libc_symlink_trampoline_addr(SB)/4, $libc_symlink_trampoline<>(SB) - -TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlinkat(SB) - -GLOBL ·libc_symlinkat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_symlinkat_trampoline_addr(SB)/4, $libc_symlinkat_trampoline<>(SB) - -TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sync(SB) - -GLOBL ·libc_sync_trampoline_addr(SB), RODATA, $4 -DATA ·libc_sync_trampoline_addr(SB)/4, $libc_sync_trampoline<>(SB) - -TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_truncate(SB) - -GLOBL ·libc_truncate_trampoline_addr(SB), RODATA, $4 -DATA ·libc_truncate_trampoline_addr(SB)/4, $libc_truncate_trampoline<>(SB) - -TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_umask(SB) - -GLOBL ·libc_umask_trampoline_addr(SB), RODATA, $4 -DATA ·libc_umask_trampoline_addr(SB)/4, $libc_umask_trampoline<>(SB) - -TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlink(SB) - -GLOBL ·libc_unlink_trampoline_addr(SB), RODATA, $4 -DATA ·libc_unlink_trampoline_addr(SB)/4, $libc_unlink_trampoline<>(SB) - -TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlinkat(SB) - -GLOBL ·libc_unlinkat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_unlinkat_trampoline_addr(SB)/4, $libc_unlinkat_trampoline<>(SB) - -TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unmount(SB) - -GLOBL ·libc_unmount_trampoline_addr(SB), RODATA, $4 -DATA ·libc_unmount_trampoline_addr(SB)/4, $libc_unmount_trampoline<>(SB) - -TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_write(SB) - -GLOBL ·libc_write_trampoline_addr(SB), RODATA, $4 -DATA ·libc_write_trampoline_addr(SB)/4, $libc_write_trampoline<>(SB) - -TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mmap(SB) - -GLOBL ·libc_mmap_trampoline_addr(SB), RODATA, $4 -DATA ·libc_mmap_trampoline_addr(SB)/4, $libc_mmap_trampoline<>(SB) - -TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munmap(SB) - -GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $4 -DATA ·libc_munmap_trampoline_addr(SB)/4, $libc_munmap_trampoline<>(SB) - -TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimensat(SB) - -GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $4 -DATA ·libc_utimensat_trampoline_addr(SB)/4, $libc_utimensat_trampoline<>(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go deleted file mode 100644 index 800aab6..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go +++ /dev/null @@ -1,2221 +0,0 @@ -// go run mksyscall.go -openbsd -libc -tags openbsd,arm64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm64.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build openbsd && arm64 -// +build openbsd,arm64 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getgroups_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getgroups getgroups "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setgroups_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setgroups setgroups "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) - wpid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_wait4_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_wait4 wait4 "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_accept_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_accept accept "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_bind_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_bind bind "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_connect_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_connect connect "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_socket_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_socket socket "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getsockopt_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getsockopt getsockopt "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setsockopt_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setsockopt setsockopt "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getpeername_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpeername getpeername "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getsockname_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getsockname getsockname "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(s int, how int) (err error) { - _, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_shutdown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_shutdown shutdown "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_socketpair_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_socketpair socketpair "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_recvfrom_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_recvfrom recvfrom "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sendto_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sendto sendto "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_recvmsg_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_recvmsg recvmsg "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sendmsg_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sendmsg sendmsg "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_kevent_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_kevent kevent "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, timeval *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_utimes_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_utimes utimes "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_futimes_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_futimes futimes "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_poll_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_poll poll "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Madvise(b []byte, behav int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_madvise_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_madvise madvise "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mlock_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mlock mlock "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mlockall_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mlockall mlockall "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mprotect_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mprotect mprotect "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_msync_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_msync msync "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_munlock_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_munlock munlock "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_munlockall_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_munlockall munlockall "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe2(p *[2]_C_int, flags int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pipe2_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getdents(fd int, buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getdents_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getdents getdents "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getcwd(buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getcwd_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getcwd getcwd "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_ioctl_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_ioctl ioctl "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { - _p0 = unsafe.Pointer(&mib[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sysctl_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sysctl sysctl "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { - r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_ppoll_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_ppoll ppoll "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_access_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_access access "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_adjtime_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_adjtime adjtime "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chdir chdir "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chflags(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chflags_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chflags chflags "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chmod(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chmod_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chmod chmod "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chown chown "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_chroot_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_chroot chroot "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_close_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_close close "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(fd int) (nfd int, err error) { - r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_dup_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_dup dup "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup2(from int, to int) (err error) { - _, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_dup2_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_dup2 dup2 "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup3(from int, to int, flags int) (err error) { - _, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_dup3_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_dup3 dup3 "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0) - return -} - -var libc_exit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_exit exit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_faccessat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_faccessat faccessat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchdir fchdir "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchflags(fd int, flags int) (err error) { - _, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchflags_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchflags fchflags "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchmod_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchmod fchmod "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchmodat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchown fchown "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fchownat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fchownat fchownat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Flock(fd int, how int) (err error) { - _, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_flock_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_flock flock "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fpathconf_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so" - -// 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 { - err = errnoErr(e1) - } - return -} - -var libc_fstat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fstat fstat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fstatat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fstatat fstatat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, stat *Statfs_t) (err error) { - _, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fstatfs_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fstatfs fstatfs "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsync(fd int) (err error) { - _, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_fsync_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_fsync fsync "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_ftruncate_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0) - egid = int(r0) - return -} - -var libc_getegid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getegid getegid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (uid int) { - r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0) - uid = int(r0) - return -} - -var libc_geteuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_geteuid geteuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0) - gid = int(r0) - return -} - -var libc_getgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getgid getgid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getpgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpgid getpgid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgrp() (pgrp int) { - r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0) - pgrp = int(r0) - return -} - -var libc_getpgrp_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0) - pid = int(r0) - return -} - -var libc_getpid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpid getpid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (ppid int) { - r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0) - ppid = int(r0) - return -} - -var libc_getppid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getppid getppid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getpriority_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getpriority getpriority "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrtable() (rtable int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0) - rtable = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getrtable_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getrtable getrtable "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getrusage_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getrusage getrusage "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_getsid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getsid getsid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_gettimeofday_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0) - uid = int(r0) - return -} - -var libc_getuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_getuid getuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Issetugid() (tainted bool) { - r0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0) - tainted = bool(r0 != 0) - return -} - -var libc_issetugid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_issetugid issetugid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kill(pid int, signum syscall.Signal) (err error) { - _, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_kill_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_kill kill "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kqueue() (fd int, err error) { - r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_kqueue_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_kqueue kqueue "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_lchown_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_lchown lchown "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Link(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_link_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_link link "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_linkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_linkat linkat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, backlog int) (err error) { - _, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_listen_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_listen listen "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_lstat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_lstat lstat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdir(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mkdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mkdir mkdir "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdirat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mkdirat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifo(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mkfifo_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifoat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mkfifoat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknod(path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mknod_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mknod mknod "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mknodat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mknodat mknodat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_nanosleep_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Open(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_open_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_open open "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_openat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_openat openat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pathconf(path string, name int) (val int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pathconf_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pathconf pathconf "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pread_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pread pread "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_pwrite_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_pwrite pwrite "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_read_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_read read "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlink(path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_readlink_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_readlink readlink "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_readlinkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_readlinkat readlinkat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rename(from string, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_rename_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_rename rename "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(fromfd int, from string, tofd int, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_renameat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_renameat renameat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Revoke(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_revoke_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_revoke revoke "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rmdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_rmdir_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_rmdir rmdir "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence)) - newoffset = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_lseek_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_lseek lseek "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_select_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_select select "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setegid(egid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setegid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setegid setegid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seteuid(euid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_seteuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_seteuid seteuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setgid(gid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setgid setgid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setlogin(name string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(name) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setlogin_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setlogin setlogin "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setpgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setpgid setpgid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setpriority_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setpriority setpriority "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setregid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setregid setregid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setreuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setreuid setreuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setresgid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setresgid setresgid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setresuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setresuid setresuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrtable(rtable int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrtable_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrtable setrtable "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0) - pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setsid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setsid setsid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_settimeofday_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_settimeofday settimeofday "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setuid(uid int) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setuid_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setuid setuid "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_stat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_stat stat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, stat *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_statfs_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_statfs statfs "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlink(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_symlink_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_symlink symlink "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_symlinkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_symlinkat symlinkat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() (err error) { - _, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_sync_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_sync sync "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_truncate_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_truncate truncate "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(newmask int) (oldmask int) { - r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0) - oldmask = int(r0) - return -} - -var libc_umask_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_umask umask "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlink(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_unlink_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_unlink unlink "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlinkat(dirfd int, path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_unlinkat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unmount(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_unmount_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_unmount unmount "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_write_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_write write "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_mmap_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_mmap mmap "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_munmap_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_munmap munmap "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_utimensat_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_utimensat utimensat "libc.so" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s deleted file mode 100644 index 4efeff9..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s +++ /dev/null @@ -1,796 +0,0 @@ -// go run mkasm.go openbsd arm64 -// Code generated by the command above; DO NOT EDIT. - -#include "textflag.h" - -TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgroups(SB) - -GLOBL ·libc_getgroups_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB) - -TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgroups(SB) - -GLOBL ·libc_setgroups_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB) - -TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_wait4(SB) - -GLOBL ·libc_wait4_trampoline_addr(SB), RODATA, $8 -DATA ·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB) - -TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_accept(SB) - -GLOBL ·libc_accept_trampoline_addr(SB), RODATA, $8 -DATA ·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB) - -TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_bind(SB) - -GLOBL ·libc_bind_trampoline_addr(SB), RODATA, $8 -DATA ·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB) - -TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_connect(SB) - -GLOBL ·libc_connect_trampoline_addr(SB), RODATA, $8 -DATA ·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB) - -TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socket(SB) - -GLOBL ·libc_socket_trampoline_addr(SB), RODATA, $8 -DATA ·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB) - -TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockopt(SB) - -GLOBL ·libc_getsockopt_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB) - -TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsockopt(SB) - -GLOBL ·libc_setsockopt_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB) - -TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpeername(SB) - -GLOBL ·libc_getpeername_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB) - -TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsockname(SB) - -GLOBL ·libc_getsockname_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB) - -TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_shutdown(SB) - -GLOBL ·libc_shutdown_trampoline_addr(SB), RODATA, $8 -DATA ·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB) - -TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_socketpair(SB) - -GLOBL ·libc_socketpair_trampoline_addr(SB), RODATA, $8 -DATA ·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB) - -TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvfrom(SB) - -GLOBL ·libc_recvfrom_trampoline_addr(SB), RODATA, $8 -DATA ·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB) - -TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendto(SB) - -GLOBL ·libc_sendto_trampoline_addr(SB), RODATA, $8 -DATA ·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB) - -TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_recvmsg(SB) - -GLOBL ·libc_recvmsg_trampoline_addr(SB), RODATA, $8 -DATA ·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB) - -TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sendmsg(SB) - -GLOBL ·libc_sendmsg_trampoline_addr(SB), RODATA, $8 -DATA ·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB) - -TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kevent(SB) - -GLOBL ·libc_kevent_trampoline_addr(SB), RODATA, $8 -DATA ·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB) - -TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimes(SB) - -GLOBL ·libc_utimes_trampoline_addr(SB), RODATA, $8 -DATA ·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB) - -TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_futimes(SB) - -GLOBL ·libc_futimes_trampoline_addr(SB), RODATA, $8 -DATA ·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB) - -TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_poll(SB) - -GLOBL ·libc_poll_trampoline_addr(SB), RODATA, $8 -DATA ·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB) - -TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_madvise(SB) - -GLOBL ·libc_madvise_trampoline_addr(SB), RODATA, $8 -DATA ·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB) - -TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlock(SB) - -GLOBL ·libc_mlock_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB) - -TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mlockall(SB) - -GLOBL ·libc_mlockall_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB) - -TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mprotect(SB) - -GLOBL ·libc_mprotect_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB) - -TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_msync(SB) - -GLOBL ·libc_msync_trampoline_addr(SB), RODATA, $8 -DATA ·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB) - -TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlock(SB) - -GLOBL ·libc_munlock_trampoline_addr(SB), RODATA, $8 -DATA ·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB) - -TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munlockall(SB) - -GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $8 -DATA ·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB) - -TEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pipe2(SB) - -GLOBL ·libc_pipe2_trampoline_addr(SB), RODATA, $8 -DATA ·libc_pipe2_trampoline_addr(SB)/8, $libc_pipe2_trampoline<>(SB) - -TEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getdents(SB) - -GLOBL ·libc_getdents_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getdents_trampoline_addr(SB)/8, $libc_getdents_trampoline<>(SB) - -TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getcwd(SB) - -GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB) - -TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ioctl(SB) - -GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 -DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB) - -TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sysctl(SB) - -GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 -DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) - -TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ppoll(SB) - -GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8 -DATA ·libc_ppoll_trampoline_addr(SB)/8, $libc_ppoll_trampoline<>(SB) - -TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_access(SB) - -GLOBL ·libc_access_trampoline_addr(SB), RODATA, $8 -DATA ·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB) - -TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_adjtime(SB) - -GLOBL ·libc_adjtime_trampoline_addr(SB), RODATA, $8 -DATA ·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB) - -TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chdir(SB) - -GLOBL ·libc_chdir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB) - -TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chflags(SB) - -GLOBL ·libc_chflags_trampoline_addr(SB), RODATA, $8 -DATA ·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB) - -TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chmod(SB) - -GLOBL ·libc_chmod_trampoline_addr(SB), RODATA, $8 -DATA ·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB) - -TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chown(SB) - -GLOBL ·libc_chown_trampoline_addr(SB), RODATA, $8 -DATA ·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB) - -TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_chroot(SB) - -GLOBL ·libc_chroot_trampoline_addr(SB), RODATA, $8 -DATA ·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB) - -TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_close(SB) - -GLOBL ·libc_close_trampoline_addr(SB), RODATA, $8 -DATA ·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB) - -TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup(SB) - -GLOBL ·libc_dup_trampoline_addr(SB), RODATA, $8 -DATA ·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB) - -TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup2(SB) - -GLOBL ·libc_dup2_trampoline_addr(SB), RODATA, $8 -DATA ·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB) - -TEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_dup3(SB) - -GLOBL ·libc_dup3_trampoline_addr(SB), RODATA, $8 -DATA ·libc_dup3_trampoline_addr(SB)/8, $libc_dup3_trampoline<>(SB) - -TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_exit(SB) - -GLOBL ·libc_exit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB) - -TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_faccessat(SB) - -GLOBL ·libc_faccessat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB) - -TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchdir(SB) - -GLOBL ·libc_fchdir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB) - -TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchflags(SB) - -GLOBL ·libc_fchflags_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB) - -TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmod(SB) - -GLOBL ·libc_fchmod_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB) - -TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchmodat(SB) - -GLOBL ·libc_fchmodat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB) - -TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchown(SB) - -GLOBL ·libc_fchown_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB) - -TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fchownat(SB) - -GLOBL ·libc_fchownat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB) - -TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_flock(SB) - -GLOBL ·libc_flock_trampoline_addr(SB), RODATA, $8 -DATA ·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB) - -TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fpathconf(SB) - -GLOBL ·libc_fpathconf_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB) - -TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstat(SB) - -GLOBL ·libc_fstat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB) - -TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatat(SB) - -GLOBL ·libc_fstatat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB) - -TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fstatfs(SB) - -GLOBL ·libc_fstatfs_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB) - -TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_fsync(SB) - -GLOBL ·libc_fsync_trampoline_addr(SB), RODATA, $8 -DATA ·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB) - -TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_ftruncate(SB) - -GLOBL ·libc_ftruncate_trampoline_addr(SB), RODATA, $8 -DATA ·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB) - -TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getegid(SB) - -GLOBL ·libc_getegid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB) - -TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_geteuid(SB) - -GLOBL ·libc_geteuid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB) - -TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getgid(SB) - -GLOBL ·libc_getgid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB) - -TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgid(SB) - -GLOBL ·libc_getpgid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB) - -TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpgrp(SB) - -GLOBL ·libc_getpgrp_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB) - -TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpid(SB) - -GLOBL ·libc_getpid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB) - -TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getppid(SB) - -GLOBL ·libc_getppid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB) - -TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getpriority(SB) - -GLOBL ·libc_getpriority_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB) - -TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrlimit(SB) - -GLOBL ·libc_getrlimit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB) - -TEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrtable(SB) - -GLOBL ·libc_getrtable_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getrtable_trampoline_addr(SB)/8, $libc_getrtable_trampoline<>(SB) - -TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getrusage(SB) - -GLOBL ·libc_getrusage_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB) - -TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getsid(SB) - -GLOBL ·libc_getsid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB) - -TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_gettimeofday(SB) - -GLOBL ·libc_gettimeofday_trampoline_addr(SB), RODATA, $8 -DATA ·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB) - -TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_getuid(SB) - -GLOBL ·libc_getuid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB) - -TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_issetugid(SB) - -GLOBL ·libc_issetugid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB) - -TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kill(SB) - -GLOBL ·libc_kill_trampoline_addr(SB), RODATA, $8 -DATA ·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB) - -TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_kqueue(SB) - -GLOBL ·libc_kqueue_trampoline_addr(SB), RODATA, $8 -DATA ·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB) - -TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lchown(SB) - -GLOBL ·libc_lchown_trampoline_addr(SB), RODATA, $8 -DATA ·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB) - -TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_link(SB) - -GLOBL ·libc_link_trampoline_addr(SB), RODATA, $8 -DATA ·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB) - -TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_linkat(SB) - -GLOBL ·libc_linkat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB) - -TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_listen(SB) - -GLOBL ·libc_listen_trampoline_addr(SB), RODATA, $8 -DATA ·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB) - -TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lstat(SB) - -GLOBL ·libc_lstat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB) - -TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdir(SB) - -GLOBL ·libc_mkdir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB) - -TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkdirat(SB) - -GLOBL ·libc_mkdirat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB) - -TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkfifo(SB) - -GLOBL ·libc_mkfifo_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB) - -TEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mkfifoat(SB) - -GLOBL ·libc_mkfifoat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mkfifoat_trampoline_addr(SB)/8, $libc_mkfifoat_trampoline<>(SB) - -TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mknod(SB) - -GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB) - -TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mknodat(SB) - -GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB) - -TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_nanosleep(SB) - -GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $8 -DATA ·libc_nanosleep_trampoline_addr(SB)/8, $libc_nanosleep_trampoline<>(SB) - -TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_open(SB) - -GLOBL ·libc_open_trampoline_addr(SB), RODATA, $8 -DATA ·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB) - -TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_openat(SB) - -GLOBL ·libc_openat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB) - -TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pathconf(SB) - -GLOBL ·libc_pathconf_trampoline_addr(SB), RODATA, $8 -DATA ·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB) - -TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pread(SB) - -GLOBL ·libc_pread_trampoline_addr(SB), RODATA, $8 -DATA ·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB) - -TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_pwrite(SB) - -GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8 -DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB) - -TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_read(SB) - -GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8 -DATA ·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB) - -TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlink(SB) - -GLOBL ·libc_readlink_trampoline_addr(SB), RODATA, $8 -DATA ·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB) - -TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_readlinkat(SB) - -GLOBL ·libc_readlinkat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB) - -TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rename(SB) - -GLOBL ·libc_rename_trampoline_addr(SB), RODATA, $8 -DATA ·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB) - -TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_renameat(SB) - -GLOBL ·libc_renameat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB) - -TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_revoke(SB) - -GLOBL ·libc_revoke_trampoline_addr(SB), RODATA, $8 -DATA ·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB) - -TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_rmdir(SB) - -GLOBL ·libc_rmdir_trampoline_addr(SB), RODATA, $8 -DATA ·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB) - -TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_lseek(SB) - -GLOBL ·libc_lseek_trampoline_addr(SB), RODATA, $8 -DATA ·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB) - -TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_select(SB) - -GLOBL ·libc_select_trampoline_addr(SB), RODATA, $8 -DATA ·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB) - -TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setegid(SB) - -GLOBL ·libc_setegid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB) - -TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_seteuid(SB) - -GLOBL ·libc_seteuid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB) - -TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setgid(SB) - -GLOBL ·libc_setgid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB) - -TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setlogin(SB) - -GLOBL ·libc_setlogin_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB) - -TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpgid(SB) - -GLOBL ·libc_setpgid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB) - -TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setpriority(SB) - -GLOBL ·libc_setpriority_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB) - -TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setregid(SB) - -GLOBL ·libc_setregid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB) - -TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setreuid(SB) - -GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB) - -TEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setresgid(SB) - -GLOBL ·libc_setresgid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setresgid_trampoline_addr(SB)/8, $libc_setresgid_trampoline<>(SB) - -TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setresuid(SB) - -GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB) - -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) - -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) - -TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrtable(SB) - -GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setrtable_trampoline_addr(SB)/8, $libc_setrtable_trampoline<>(SB) - -TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setsid(SB) - -GLOBL ·libc_setsid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB) - -TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_settimeofday(SB) - -GLOBL ·libc_settimeofday_trampoline_addr(SB), RODATA, $8 -DATA ·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB) - -TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setuid(SB) - -GLOBL ·libc_setuid_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB) - -TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_stat(SB) - -GLOBL ·libc_stat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB) - -TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_statfs(SB) - -GLOBL ·libc_statfs_trampoline_addr(SB), RODATA, $8 -DATA ·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB) - -TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlink(SB) - -GLOBL ·libc_symlink_trampoline_addr(SB), RODATA, $8 -DATA ·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB) - -TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_symlinkat(SB) - -GLOBL ·libc_symlinkat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB) - -TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_sync(SB) - -GLOBL ·libc_sync_trampoline_addr(SB), RODATA, $8 -DATA ·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB) - -TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_truncate(SB) - -GLOBL ·libc_truncate_trampoline_addr(SB), RODATA, $8 -DATA ·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB) - -TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_umask(SB) - -GLOBL ·libc_umask_trampoline_addr(SB), RODATA, $8 -DATA ·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB) - -TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlink(SB) - -GLOBL ·libc_unlink_trampoline_addr(SB), RODATA, $8 -DATA ·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB) - -TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unlinkat(SB) - -GLOBL ·libc_unlinkat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB) - -TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_unmount(SB) - -GLOBL ·libc_unmount_trampoline_addr(SB), RODATA, $8 -DATA ·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB) - -TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_write(SB) - -GLOBL ·libc_write_trampoline_addr(SB), RODATA, $8 -DATA ·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB) - -TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_mmap(SB) - -GLOBL ·libc_mmap_trampoline_addr(SB), RODATA, $8 -DATA ·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB) - -TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_munmap(SB) - -GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 -DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) - -TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimensat(SB) - -GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go deleted file mode 100644 index 016d959..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go +++ /dev/null @@ -1,1693 +0,0 @@ -// go run mksyscall.go -openbsd -tags openbsd,mips64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_mips64.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build openbsd && mips64 -// +build openbsd,mips64 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) - wpid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(s int, how int) (err error) { - _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, timeval *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Madvise(b []byte, behav int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe2(p *[2]_C_int, flags int) (err error) { - _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getdents(fd int, buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getcwd(buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { - _p0 = unsafe.Pointer(&mib[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { - r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chflags(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chmod(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(fd int) (nfd int, err error) { - r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup2(from int, to int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup3(from int, to int, flags int) (err error) { - _, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - Syscall(SYS_EXIT, uintptr(code), 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchflags(fd int, flags int) (err error) { - _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Flock(fd int, how int) (err error) { - _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, stat *Statfs_t) (err error) { - _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsync(fd int) (err error) { - _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgrp() (pgrp int) { - r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) - pgrp = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) - pid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) - ppid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrtable() (rtable int, err error) { - r0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0) - rtable = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Issetugid() (tainted bool) { - r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) - tainted = bool(r0 != 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kill(pid int, signum syscall.Signal) (err error) { - _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kqueue() (fd int, err error) { - r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Link(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, backlog int) (err error) { - _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdir(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdirat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifo(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifoat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknod(path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Open(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pathconf(path string, name int) (val int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlink(path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rename(from string, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(fromfd int, from string, tofd int, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Revoke(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rmdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) - newoffset = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setegid(egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seteuid(euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setgid(gid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setlogin(name string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(name) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresgid(rgid int, egid int, sgid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setresuid(ruid int, euid int, suid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrtable(rtable int) (err error) { - _, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) - pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setuid(uid int) (err error) { - _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, stat *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlink(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() (err error) { - _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(newmask int) (oldmask int) { - r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) - oldmask = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlink(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlinkat(dirfd int, path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unmount(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go deleted file mode 100644 index fdf53f8..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go +++ /dev/null @@ -1,2067 +0,0 @@ -// go run mksyscall_solaris.go -tags solaris,amd64 syscall_solaris.go syscall_solaris_amd64.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build solaris && amd64 -// +build solaris,amd64 - -package unix - -import ( - "syscall" - "unsafe" -) - -//go:cgo_import_dynamic libc_pipe pipe "libc.so" -//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so" -//go:cgo_import_dynamic libc_getsockname getsockname "libsocket.so" -//go:cgo_import_dynamic libc_getcwd getcwd "libc.so" -//go:cgo_import_dynamic libc_getgroups getgroups "libc.so" -//go:cgo_import_dynamic libc_setgroups setgroups "libc.so" -//go:cgo_import_dynamic libc_wait4 wait4 "libc.so" -//go:cgo_import_dynamic libc_gethostname gethostname "libc.so" -//go:cgo_import_dynamic libc_utimes utimes "libc.so" -//go:cgo_import_dynamic libc_utimensat utimensat "libc.so" -//go:cgo_import_dynamic libc_fcntl fcntl "libc.so" -//go:cgo_import_dynamic libc_futimesat futimesat "libc.so" -//go:cgo_import_dynamic libc_accept accept "libsocket.so" -//go:cgo_import_dynamic libc___xnet_recvmsg __xnet_recvmsg "libsocket.so" -//go:cgo_import_dynamic libc___xnet_sendmsg __xnet_sendmsg "libsocket.so" -//go:cgo_import_dynamic libc_acct acct "libc.so" -//go:cgo_import_dynamic libc___makedev __makedev "libc.so" -//go:cgo_import_dynamic libc___major __major "libc.so" -//go:cgo_import_dynamic libc___minor __minor "libc.so" -//go:cgo_import_dynamic libc_ioctl ioctl "libc.so" -//go:cgo_import_dynamic libc_poll poll "libc.so" -//go:cgo_import_dynamic libc_access access "libc.so" -//go:cgo_import_dynamic libc_adjtime adjtime "libc.so" -//go:cgo_import_dynamic libc_chdir chdir "libc.so" -//go:cgo_import_dynamic libc_chmod chmod "libc.so" -//go:cgo_import_dynamic libc_chown chown "libc.so" -//go:cgo_import_dynamic libc_chroot chroot "libc.so" -//go:cgo_import_dynamic libc_close close "libc.so" -//go:cgo_import_dynamic libc_creat creat "libc.so" -//go:cgo_import_dynamic libc_dup dup "libc.so" -//go:cgo_import_dynamic libc_dup2 dup2 "libc.so" -//go:cgo_import_dynamic libc_exit exit "libc.so" -//go:cgo_import_dynamic libc_faccessat faccessat "libc.so" -//go:cgo_import_dynamic libc_fchdir fchdir "libc.so" -//go:cgo_import_dynamic libc_fchmod fchmod "libc.so" -//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so" -//go:cgo_import_dynamic libc_fchown fchown "libc.so" -//go:cgo_import_dynamic libc_fchownat fchownat "libc.so" -//go:cgo_import_dynamic libc_fdatasync fdatasync "libc.so" -//go:cgo_import_dynamic libc_flock flock "libc.so" -//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so" -//go:cgo_import_dynamic libc_fstat fstat "libc.so" -//go:cgo_import_dynamic libc_fstatat fstatat "libc.so" -//go:cgo_import_dynamic libc_fstatvfs fstatvfs "libc.so" -//go:cgo_import_dynamic libc_getdents getdents "libc.so" -//go:cgo_import_dynamic libc_getgid getgid "libc.so" -//go:cgo_import_dynamic libc_getpid getpid "libc.so" -//go:cgo_import_dynamic libc_getpgid getpgid "libc.so" -//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so" -//go:cgo_import_dynamic libc_geteuid geteuid "libc.so" -//go:cgo_import_dynamic libc_getegid getegid "libc.so" -//go:cgo_import_dynamic libc_getppid getppid "libc.so" -//go:cgo_import_dynamic libc_getpriority getpriority "libc.so" -//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so" -//go:cgo_import_dynamic libc_getrusage getrusage "libc.so" -//go:cgo_import_dynamic libc_getsid getsid "libc.so" -//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so" -//go:cgo_import_dynamic libc_getuid getuid "libc.so" -//go:cgo_import_dynamic libc_kill kill "libc.so" -//go:cgo_import_dynamic libc_lchown lchown "libc.so" -//go:cgo_import_dynamic libc_link link "libc.so" -//go:cgo_import_dynamic libc___xnet_llisten __xnet_llisten "libsocket.so" -//go:cgo_import_dynamic libc_lstat lstat "libc.so" -//go:cgo_import_dynamic libc_madvise madvise "libc.so" -//go:cgo_import_dynamic libc_mkdir mkdir "libc.so" -//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so" -//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so" -//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so" -//go:cgo_import_dynamic libc_mknod mknod "libc.so" -//go:cgo_import_dynamic libc_mknodat mknodat "libc.so" -//go:cgo_import_dynamic libc_mlock mlock "libc.so" -//go:cgo_import_dynamic libc_mlockall mlockall "libc.so" -//go:cgo_import_dynamic libc_mprotect mprotect "libc.so" -//go:cgo_import_dynamic libc_msync msync "libc.so" -//go:cgo_import_dynamic libc_munlock munlock "libc.so" -//go:cgo_import_dynamic libc_munlockall munlockall "libc.so" -//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so" -//go:cgo_import_dynamic libc_open open "libc.so" -//go:cgo_import_dynamic libc_openat openat "libc.so" -//go:cgo_import_dynamic libc_pathconf pathconf "libc.so" -//go:cgo_import_dynamic libc_pause pause "libc.so" -//go:cgo_import_dynamic libc_pread pread "libc.so" -//go:cgo_import_dynamic libc_pwrite pwrite "libc.so" -//go:cgo_import_dynamic libc_read read "libc.so" -//go:cgo_import_dynamic libc_readlink readlink "libc.so" -//go:cgo_import_dynamic libc_rename rename "libc.so" -//go:cgo_import_dynamic libc_renameat renameat "libc.so" -//go:cgo_import_dynamic libc_rmdir rmdir "libc.so" -//go:cgo_import_dynamic libc_lseek lseek "libc.so" -//go:cgo_import_dynamic libc_select select "libc.so" -//go:cgo_import_dynamic libc_setegid setegid "libc.so" -//go:cgo_import_dynamic libc_seteuid seteuid "libc.so" -//go:cgo_import_dynamic libc_setgid setgid "libc.so" -//go:cgo_import_dynamic libc_sethostname sethostname "libc.so" -//go:cgo_import_dynamic libc_setpgid setpgid "libc.so" -//go:cgo_import_dynamic libc_setpriority setpriority "libc.so" -//go:cgo_import_dynamic libc_setregid setregid "libc.so" -//go:cgo_import_dynamic libc_setreuid setreuid "libc.so" -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" -//go:cgo_import_dynamic libc_setsid setsid "libc.so" -//go:cgo_import_dynamic libc_setuid setuid "libc.so" -//go:cgo_import_dynamic libc_shutdown shutdown "libsocket.so" -//go:cgo_import_dynamic libc_stat stat "libc.so" -//go:cgo_import_dynamic libc_statvfs statvfs "libc.so" -//go:cgo_import_dynamic libc_symlink symlink "libc.so" -//go:cgo_import_dynamic libc_sync sync "libc.so" -//go:cgo_import_dynamic libc_sysconf sysconf "libc.so" -//go:cgo_import_dynamic libc_times times "libc.so" -//go:cgo_import_dynamic libc_truncate truncate "libc.so" -//go:cgo_import_dynamic libc_fsync fsync "libc.so" -//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so" -//go:cgo_import_dynamic libc_umask umask "libc.so" -//go:cgo_import_dynamic libc_uname uname "libc.so" -//go:cgo_import_dynamic libc_umount umount "libc.so" -//go:cgo_import_dynamic libc_unlink unlink "libc.so" -//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so" -//go:cgo_import_dynamic libc_ustat ustat "libc.so" -//go:cgo_import_dynamic libc_utime utime "libc.so" -//go:cgo_import_dynamic libc___xnet_bind __xnet_bind "libsocket.so" -//go:cgo_import_dynamic libc___xnet_connect __xnet_connect "libsocket.so" -//go:cgo_import_dynamic libc_mmap mmap "libc.so" -//go:cgo_import_dynamic libc_munmap munmap "libc.so" -//go:cgo_import_dynamic libc_sendfile sendfile "libsendfile.so" -//go:cgo_import_dynamic libc___xnet_sendto __xnet_sendto "libsocket.so" -//go:cgo_import_dynamic libc___xnet_socket __xnet_socket "libsocket.so" -//go:cgo_import_dynamic libc___xnet_socketpair __xnet_socketpair "libsocket.so" -//go:cgo_import_dynamic libc_write write "libc.so" -//go:cgo_import_dynamic libc___xnet_getsockopt __xnet_getsockopt "libsocket.so" -//go:cgo_import_dynamic libc_getpeername getpeername "libsocket.so" -//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so" -//go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so" -//go:cgo_import_dynamic libc_port_create port_create "libc.so" -//go:cgo_import_dynamic libc_port_associate port_associate "libc.so" -//go:cgo_import_dynamic libc_port_dissociate port_dissociate "libc.so" -//go:cgo_import_dynamic libc_port_get port_get "libc.so" -//go:cgo_import_dynamic libc_port_getn port_getn "libc.so" - -//go:linkname procpipe libc_pipe -//go:linkname procpipe2 libc_pipe2 -//go:linkname procgetsockname libc_getsockname -//go:linkname procGetcwd libc_getcwd -//go:linkname procgetgroups libc_getgroups -//go:linkname procsetgroups libc_setgroups -//go:linkname procwait4 libc_wait4 -//go:linkname procgethostname libc_gethostname -//go:linkname procutimes libc_utimes -//go:linkname procutimensat libc_utimensat -//go:linkname procfcntl libc_fcntl -//go:linkname procfutimesat libc_futimesat -//go:linkname procaccept libc_accept -//go:linkname proc__xnet_recvmsg libc___xnet_recvmsg -//go:linkname proc__xnet_sendmsg libc___xnet_sendmsg -//go:linkname procacct libc_acct -//go:linkname proc__makedev libc___makedev -//go:linkname proc__major libc___major -//go:linkname proc__minor libc___minor -//go:linkname procioctl libc_ioctl -//go:linkname procpoll libc_poll -//go:linkname procAccess libc_access -//go:linkname procAdjtime libc_adjtime -//go:linkname procChdir libc_chdir -//go:linkname procChmod libc_chmod -//go:linkname procChown libc_chown -//go:linkname procChroot libc_chroot -//go:linkname procClose libc_close -//go:linkname procCreat libc_creat -//go:linkname procDup libc_dup -//go:linkname procDup2 libc_dup2 -//go:linkname procExit libc_exit -//go:linkname procFaccessat libc_faccessat -//go:linkname procFchdir libc_fchdir -//go:linkname procFchmod libc_fchmod -//go:linkname procFchmodat libc_fchmodat -//go:linkname procFchown libc_fchown -//go:linkname procFchownat libc_fchownat -//go:linkname procFdatasync libc_fdatasync -//go:linkname procFlock libc_flock -//go:linkname procFpathconf libc_fpathconf -//go:linkname procFstat libc_fstat -//go:linkname procFstatat libc_fstatat -//go:linkname procFstatvfs libc_fstatvfs -//go:linkname procGetdents libc_getdents -//go:linkname procGetgid libc_getgid -//go:linkname procGetpid libc_getpid -//go:linkname procGetpgid libc_getpgid -//go:linkname procGetpgrp libc_getpgrp -//go:linkname procGeteuid libc_geteuid -//go:linkname procGetegid libc_getegid -//go:linkname procGetppid libc_getppid -//go:linkname procGetpriority libc_getpriority -//go:linkname procGetrlimit libc_getrlimit -//go:linkname procGetrusage libc_getrusage -//go:linkname procGetsid libc_getsid -//go:linkname procGettimeofday libc_gettimeofday -//go:linkname procGetuid libc_getuid -//go:linkname procKill libc_kill -//go:linkname procLchown libc_lchown -//go:linkname procLink libc_link -//go:linkname proc__xnet_llisten libc___xnet_llisten -//go:linkname procLstat libc_lstat -//go:linkname procMadvise libc_madvise -//go:linkname procMkdir libc_mkdir -//go:linkname procMkdirat libc_mkdirat -//go:linkname procMkfifo libc_mkfifo -//go:linkname procMkfifoat libc_mkfifoat -//go:linkname procMknod libc_mknod -//go:linkname procMknodat libc_mknodat -//go:linkname procMlock libc_mlock -//go:linkname procMlockall libc_mlockall -//go:linkname procMprotect libc_mprotect -//go:linkname procMsync libc_msync -//go:linkname procMunlock libc_munlock -//go:linkname procMunlockall libc_munlockall -//go:linkname procNanosleep libc_nanosleep -//go:linkname procOpen libc_open -//go:linkname procOpenat libc_openat -//go:linkname procPathconf libc_pathconf -//go:linkname procPause libc_pause -//go:linkname procpread libc_pread -//go:linkname procpwrite libc_pwrite -//go:linkname procread libc_read -//go:linkname procReadlink libc_readlink -//go:linkname procRename libc_rename -//go:linkname procRenameat libc_renameat -//go:linkname procRmdir libc_rmdir -//go:linkname proclseek libc_lseek -//go:linkname procSelect libc_select -//go:linkname procSetegid libc_setegid -//go:linkname procSeteuid libc_seteuid -//go:linkname procSetgid libc_setgid -//go:linkname procSethostname libc_sethostname -//go:linkname procSetpgid libc_setpgid -//go:linkname procSetpriority libc_setpriority -//go:linkname procSetregid libc_setregid -//go:linkname procSetreuid libc_setreuid -//go:linkname procSetrlimit libc_setrlimit -//go:linkname procSetsid libc_setsid -//go:linkname procSetuid libc_setuid -//go:linkname procshutdown libc_shutdown -//go:linkname procStat libc_stat -//go:linkname procStatvfs libc_statvfs -//go:linkname procSymlink libc_symlink -//go:linkname procSync libc_sync -//go:linkname procSysconf libc_sysconf -//go:linkname procTimes libc_times -//go:linkname procTruncate libc_truncate -//go:linkname procFsync libc_fsync -//go:linkname procFtruncate libc_ftruncate -//go:linkname procUmask libc_umask -//go:linkname procUname libc_uname -//go:linkname procumount libc_umount -//go:linkname procUnlink libc_unlink -//go:linkname procUnlinkat libc_unlinkat -//go:linkname procUstat libc_ustat -//go:linkname procUtime libc_utime -//go:linkname proc__xnet_bind libc___xnet_bind -//go:linkname proc__xnet_connect libc___xnet_connect -//go:linkname procmmap libc_mmap -//go:linkname procmunmap libc_munmap -//go:linkname procsendfile libc_sendfile -//go:linkname proc__xnet_sendto libc___xnet_sendto -//go:linkname proc__xnet_socket libc___xnet_socket -//go:linkname proc__xnet_socketpair libc___xnet_socketpair -//go:linkname procwrite libc_write -//go:linkname proc__xnet_getsockopt libc___xnet_getsockopt -//go:linkname procgetpeername libc_getpeername -//go:linkname procsetsockopt libc_setsockopt -//go:linkname procrecvfrom libc_recvfrom -//go:linkname procport_create libc_port_create -//go:linkname procport_associate libc_port_associate -//go:linkname procport_dissociate libc_port_dissociate -//go:linkname procport_get libc_port_get -//go:linkname procport_getn libc_port_getn - -var ( - procpipe, - procpipe2, - procgetsockname, - procGetcwd, - procgetgroups, - procsetgroups, - procwait4, - procgethostname, - procutimes, - procutimensat, - procfcntl, - procfutimesat, - procaccept, - proc__xnet_recvmsg, - proc__xnet_sendmsg, - procacct, - proc__makedev, - proc__major, - proc__minor, - procioctl, - procpoll, - procAccess, - procAdjtime, - procChdir, - procChmod, - procChown, - procChroot, - procClose, - procCreat, - procDup, - procDup2, - procExit, - procFaccessat, - procFchdir, - procFchmod, - procFchmodat, - procFchown, - procFchownat, - procFdatasync, - procFlock, - procFpathconf, - procFstat, - procFstatat, - procFstatvfs, - procGetdents, - procGetgid, - procGetpid, - procGetpgid, - procGetpgrp, - procGeteuid, - procGetegid, - procGetppid, - procGetpriority, - procGetrlimit, - procGetrusage, - procGetsid, - procGettimeofday, - procGetuid, - procKill, - procLchown, - procLink, - proc__xnet_llisten, - procLstat, - procMadvise, - procMkdir, - procMkdirat, - procMkfifo, - procMkfifoat, - procMknod, - procMknodat, - procMlock, - procMlockall, - procMprotect, - procMsync, - procMunlock, - procMunlockall, - procNanosleep, - procOpen, - procOpenat, - procPathconf, - procPause, - procpread, - procpwrite, - procread, - procReadlink, - procRename, - procRenameat, - procRmdir, - proclseek, - procSelect, - procSetegid, - procSeteuid, - procSetgid, - procSethostname, - procSetpgid, - procSetpriority, - procSetregid, - procSetreuid, - procSetrlimit, - procSetsid, - procSetuid, - procshutdown, - procStat, - procStatvfs, - procSymlink, - procSync, - procSysconf, - procTimes, - procTruncate, - procFsync, - procFtruncate, - procUmask, - procUname, - procumount, - procUnlink, - procUnlinkat, - procUstat, - procUtime, - proc__xnet_bind, - proc__xnet_connect, - procmmap, - procmunmap, - procsendfile, - proc__xnet_sendto, - proc__xnet_socket, - proc__xnet_socketpair, - procwrite, - proc__xnet_getsockopt, - procgetpeername, - procsetsockopt, - procrecvfrom, - procport_create, - procport_associate, - procport_dissociate, - procport_get, - procport_getn syscallFunc -) - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe(p *[2]_C_int) (n int, err error) { - r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procpipe)), 1, uintptr(unsafe.Pointer(p)), 0, 0, 0, 0, 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe2(p *[2]_C_int, flags int) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procpipe2)), 2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetsockname)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getcwd(buf []byte) (n int, err error) { - var _p0 *byte - if len(buf) > 0 { - _p0 = &buf[0] - } - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetcwd)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procsetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwait4)), 4, uintptr(pid), uintptr(unsafe.Pointer(statusp)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) - wpid = int32(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func gethostname(buf []byte) (n int, err error) { - var _p0 *byte - if len(buf) > 0 { - _p0 = &buf[0] - } - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, times *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimes)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimensat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flag), 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fcntl(fd int, cmd int, arg int) (val int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0) - val = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimesat(fildes int, path *byte, times *[2]Timeval) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfutimesat)), 3, uintptr(fildes), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)), 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procaccept)), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_recvmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_sendmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func acct(path *byte) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procacct)), 1, uintptr(unsafe.Pointer(path)), 0, 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func __makedev(version int, major uint, minor uint) (val uint64) { - r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__makedev)), 3, uintptr(version), uintptr(major), uintptr(minor), 0, 0, 0) - val = uint64(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func __major(version int, dev uint64) (val uint) { - r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__major)), 2, uintptr(version), uintptr(dev), 0, 0, 0, 0) - val = uint(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func __minor(version int, dev uint64) (val uint) { - r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__minor)), 2, uintptr(version), uintptr(dev), 0, 0, 0, 0) - val = uint(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctlRet(fd int, req uint, arg uintptr) (ret int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0) - ret = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpoll)), 3, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout), 0, 0, 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAccess)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAdjtime)), 2, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chmod(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChmod)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChroot)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procClose)), 1, uintptr(fd), 0, 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Creat(path string, mode uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procCreat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(fd int) (nfd int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup)), 1, uintptr(fd), 0, 0, 0, 0, 0) - nfd = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup2(oldfd int, newfd int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - sysvicall6(uintptr(unsafe.Pointer(&procExit)), 1, uintptr(code), 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFaccessat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchdir)), 1, uintptr(fd), 0, 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmod)), 2, uintptr(fd), uintptr(mode), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchownat)), 5, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fdatasync(fd int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Flock(fd int, how int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFlock)), 2, uintptr(fd), uintptr(how), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFpathconf)), 2, uintptr(fd), uintptr(name), 0, 0, 0, 0) - val = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstat)), 2, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatvfs(fd int, vfsstat *Statvfs_t) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatvfs)), 2, uintptr(fd), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getdents(fd int, buf []byte, basep *uintptr) (n int, err error) { - var _p0 *byte - if len(buf) > 0 { - _p0 = &buf[0] - } - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetdents)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetgid)), 0, 0, 0, 0, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpid)), 0, 0, 0, 0, 0, 0, 0) - pid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0) - pgid = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgrp() (pgid int, err error) { - r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgrp)), 0, 0, 0, 0, 0, 0, 0) - pgid = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (euid int) { - r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGeteuid)), 0, 0, 0, 0, 0, 0, 0) - euid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetegid)), 0, 0, 0, 0, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (ppid int) { - r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetppid)), 0, 0, 0, 0, 0, 0, 0) - ppid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetpriority)), 2, uintptr(which), uintptr(who), 0, 0, 0, 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrusage)), 2, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetsid)), 1, uintptr(pid), 0, 0, 0, 0, 0) - sid = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tv *Timeval) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGettimeofday)), 1, uintptr(unsafe.Pointer(tv)), 0, 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetuid)), 0, 0, 0, 0, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kill(pid int, signum syscall.Signal) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procKill)), 2, uintptr(pid), uintptr(signum), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLchown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Link(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, backlog int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_llisten)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLstat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Madvise(b []byte, advice int) (err error) { - var _p0 *byte - if len(b) > 0 { - _p0 = &b[0] - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMadvise)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(advice), 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdir(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdir)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdirat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdirat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifo(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifo)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifoat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifoat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknod(path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknod)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 *byte - if len(b) > 0 { - _p0 = &b[0] - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 *byte - if len(b) > 0 { - _p0 = &b[0] - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMprotect)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(prot), 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 *byte - if len(b) > 0 { - _p0 = &b[0] - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMsync)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(flags), 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 *byte - if len(b) > 0 { - _p0 = &b[0] - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlockall)), 0, 0, 0, 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procNanosleep)), 2, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Open(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpen)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpenat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) - fd = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pathconf(path string, name int) (val int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPathconf)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0, 0, 0, 0) - val = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pause() (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPause)), 0, 0, 0, 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 *byte - if len(p) > 0 { - _p0 = &p[0] - } - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpread)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 *byte - if len(p) > 0 { - _p0 = &p[0] - } - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpwrite)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 *byte - if len(p) > 0 { - _p0 = &p[0] - } - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procread)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlink(path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - if len(buf) > 0 { - _p1 = &buf[0] - } - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procReadlink)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(len(buf)), 0, 0, 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rename(from string, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRename)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRenameat)), 4, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rmdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRmdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proclseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0) - newoffset = int64(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSelect)), 5, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setegid(egid int) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetegid)), 1, uintptr(egid), 0, 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seteuid(euid int) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSeteuid)), 1, uintptr(euid), 0, 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setgid(gid int) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetgid)), 1, uintptr(gid), 0, 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sethostname(p []byte) (err error) { - var _p0 *byte - if len(p) > 0 { - _p0 = &p[0] - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSetpriority)), 3, uintptr(which), uintptr(who), uintptr(prio), 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetregid)), 2, uintptr(rgid), uintptr(egid), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetreuid)), 2, uintptr(ruid), uintptr(euid), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetsid)), 0, 0, 0, 0, 0, 0, 0) - pid = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setuid(uid int) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetuid)), 1, uintptr(uid), 0, 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(s int, how int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procshutdown)), 2, uintptr(s), uintptr(how), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statvfs(path string, vfsstat *Statvfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStatvfs)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlink(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSymlink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSync)), 0, 0, 0, 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sysconf(which int) (n int64, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSysconf)), 1, uintptr(which), 0, 0, 0, 0, 0) - n = int64(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Times(tms *Tms) (ticks uintptr, err error) { - r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procTimes)), 1, uintptr(unsafe.Pointer(tms)), 0, 0, 0, 0, 0) - ticks = uintptr(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procTruncate)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsync(fd int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFsync)), 1, uintptr(fd), 0, 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFtruncate)), 2, uintptr(fd), uintptr(length), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(mask int) (oldmask int) { - r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procUmask)), 1, uintptr(mask), 0, 0, 0, 0, 0) - oldmask = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Uname(buf *Utsname) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procUname)), 1, uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unmount(target string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(target) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procumount)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlink(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlink)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlinkat(dirfd int, path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlinkat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ustat(dev int, ubuf *Ustat_t) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUstat)), 2, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Utime(path string, buf *Utimbuf) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUtime)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_bind)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_connect)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmmap)), 6, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) - ret = uintptr(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmunmap)), 2, uintptr(addr), uintptr(length), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsendfile)), 4, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) - written = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 *byte - if len(buf) > 0 { - _p0 = &buf[0] - } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_sendto)), 6, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socket)), 3, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socketpair)), 4, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 *byte - if len(p) > 0 { - _p0 = &p[0] - } - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwrite)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_getsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetpeername)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsetsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 *byte - if len(p) > 0 { - _p0 = &p[0] - } - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procrecvfrom)), 6, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func port_create() (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_create)), 0, 0, 0, 0, 0, 0, 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func port_associate(port int, source int, object uintptr, events int, user *byte) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_associate)), 5, uintptr(port), uintptr(source), uintptr(object), uintptr(events), uintptr(unsafe.Pointer(user)), 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func port_dissociate(port int, source int, object uintptr) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_dissociate)), 3, uintptr(port), uintptr(source), uintptr(object), 0, 0, 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func port_get(port int, pe *portEvent, timeout *Timespec) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_get)), 3, uintptr(port), uintptr(unsafe.Pointer(pe)), uintptr(unsafe.Pointer(timeout)), 0, 0, 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func port_getn(port int, pe *portEvent, max uint32, nget *uint32, timeout *Timespec) (n int, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_getn)), 5, uintptr(port), uintptr(unsafe.Pointer(pe)), uintptr(max), uintptr(unsafe.Pointer(nget)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = e1 - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go deleted file mode 100644 index f207945..0000000 --- a/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go +++ /dev/null @@ -1,1255 +0,0 @@ -// go run mksyscall.go -tags zos,s390x syscall_zos_s390x.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build zos && s390x -// +build zos,s390x - -package unix - -import ( - "unsafe" -) - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fcntl(fd int, cmd int, arg int) (val int, err error) { - r0, _, e1 := syscall_syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := syscall_syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := syscall_syscall(SYS___ACCEPT_A, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(SYS___BIND_A, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(SYS___CONNECT_A, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(n int, list *_Gid_t) (nn int, err error) { - r0, _, e1 := syscall_rawsyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - nn = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(n int, list *_Gid_t) (err error) { - _, _, e1 := syscall_rawsyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := syscall_syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := syscall_syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := syscall_rawsyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := syscall_rawsyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawsyscall(SYS___GETPEERNAME_A, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawsyscall(SYS___GETSOCKNAME_A, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(SYS___RECVFROM_A, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall6(SYS___SENDTO_A, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(SYS___RECVMSG_A, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(SYS___SENDMSG_A, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := syscall_syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := syscall_syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := syscall_syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___ACCESS_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___CHDIR_A, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___CHOWN_A, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chmod(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___CHMOD_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Creat(path string, mode uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall(SYS___CREAT_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(oldfd int) (fd int, err error) { - r0, _, e1 := syscall_syscall(SYS_DUP, uintptr(oldfd), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup2(oldfd int, newfd int) (err error) { - _, _, e1 := syscall_syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Errno2() (er2 int) { - uer2, _, _ := syscall_syscall(SYS___ERRNO2, 0, 0, 0) - er2 = int(uer2) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Err2ad() (eadd *int) { - ueadd, _, _ := syscall_syscall(SYS___ERR2AD, 0, 0, 0) - eadd = (*int)(unsafe.Pointer(ueadd)) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - syscall_syscall(SYS_EXIT, uintptr(code), 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - _, _, e1 := syscall_syscall(SYS_FCHDIR, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := syscall_syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := syscall_syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func FcntlInt(fd uintptr, cmd int, arg int) (retval int, err error) { - r0, _, e1 := syscall_syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) - retval = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fstat(fd int, stat *Stat_LE_t) (err error) { - _, _, e1 := syscall_syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatvfs(fd int, stat *Statvfs_t) (err error) { - _, _, e1 := syscall_syscall(SYS_FSTATVFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsync(fd int) (err error) { - _, _, e1 := syscall_syscall(SYS_FSYNC, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := syscall_syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpagesize() (pgsize int) { - r0, _, _ := syscall_syscall(SYS_GETPAGESIZE, 0, 0, 0) - pgsize = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Poll(fds []PollFd, timeout int) (n int, err error) { - var _p0 unsafe.Pointer - if len(fds) > 0 { - _p0 = unsafe.Pointer(&fds[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(SYS_POLL, uintptr(_p0), uintptr(len(fds)), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Times(tms *Tms) (ticks uintptr, err error) { - r0, _, e1 := syscall_syscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) - ticks = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func W_Getmntent(buff *byte, size int) (lastsys int, err error) { - r0, _, e1 := syscall_syscall(SYS_W_GETMNTENT, uintptr(unsafe.Pointer(buff)), uintptr(size), 0) - lastsys = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func W_Getmntent_A(buff *byte, size int) (lastsys int, err error) { - r0, _, e1 := syscall_syscall(SYS___W_GETMNTENT_A, uintptr(unsafe.Pointer(buff)), uintptr(size), 0) - lastsys = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mount_LE(path string, filesystem string, fstype string, mtm uint32, parmlen int32, parm string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(filesystem) - if err != nil { - return - } - var _p2 *byte - _p2, err = BytePtrFromString(fstype) - if err != nil { - return - } - var _p3 *byte - _p3, err = BytePtrFromString(parm) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(SYS___MOUNT_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(mtm), uintptr(parmlen), uintptr(unsafe.Pointer(_p3))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func unmount(filesystem string, mtm int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(filesystem) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___UMOUNT_A, uintptr(unsafe.Pointer(_p0)), uintptr(mtm), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___CHROOT_A, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Uname(buf *Utsname) (err error) { - _, _, e1 := syscall_rawsyscall(SYS___UNAME_A, uintptr(unsafe.Pointer(buf)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gethostname(buf []byte) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(SYS___GETHOSTNAME_A, uintptr(_p0), uintptr(len(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _, _ := syscall_rawsyscall(SYS_GETEGID, 0, 0, 0) - egid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (uid int) { - r0, _, _ := syscall_rawsyscall(SYS_GETEUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _, _ := syscall_rawsyscall(SYS_GETGID, 0, 0, 0) - gid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _, _ := syscall_rawsyscall(SYS_GETPID, 0, 0, 0) - pid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := syscall_rawsyscall(SYS_GETPGID, uintptr(pid), 0, 0) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (pid int) { - r0, _, _ := syscall_rawsyscall(SYS_GETPPID, 0, 0, 0) - pid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := syscall_syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := syscall_rawsyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getrusage(who int, rusage *rusage_zos) (err error) { - _, _, e1 := syscall_rawsyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, _, e1 := syscall_rawsyscall(SYS_GETSID, uintptr(pid), 0, 0) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _, _ := syscall_rawsyscall(SYS_GETUID, 0, 0, 0) - uid = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kill(pid int, sig Signal) (err error) { - _, _, e1 := syscall_rawsyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___LCHOWN_A, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Link(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___LINK_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, n int) (err error) { - _, _, e1 := syscall_syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func lstat(path string, stat *Stat_LE_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___LSTAT_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdir(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___MKDIR_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifo(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___MKFIFO_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknod(path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___MKNOD_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlink(path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(SYS___READLINK_A, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rename(from string, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___RENAME_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rmdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___RMDIR_A, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (off int64, err error) { - r0, _, e1 := syscall_syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) - off = int64(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := syscall_syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := syscall_rawsyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(resource int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawsyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := syscall_rawsyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := syscall_rawsyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, _, e1 := syscall_rawsyscall(SYS_SETSID, 0, 0, 0) - pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setuid(uid int) (err error) { - _, _, e1 := syscall_syscall(SYS_SETUID, uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setgid(uid int) (err error) { - _, _, e1 := syscall_syscall(SYS_SETGID, uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(fd int, how int) (err error) { - _, _, e1 := syscall_syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func stat(path string, statLE *Stat_LE_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___STAT_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(statLE)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlink(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___SYMLINK_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() { - syscall_syscall(SYS_SYNC, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___TRUNCATE_A, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Tcgetattr(fildes int, termptr *Termios) (err error) { - _, _, e1 := syscall_syscall(SYS_TCGETATTR, uintptr(fildes), uintptr(unsafe.Pointer(termptr)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Tcsetattr(fildes int, when int, termptr *Termios) (err error) { - _, _, e1 := syscall_syscall(SYS_TCSETATTR, uintptr(fildes), uintptr(when), uintptr(unsafe.Pointer(termptr))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(mask int) (oldmask int) { - r0, _, _ := syscall_syscall(SYS_UMASK, uintptr(mask), 0, 0) - oldmask = int(r0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlink(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___UNLINK_A, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Utime(path string, utim *Utimbuf) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___UTIME_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(utim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func open(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall(SYS___OPEN_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func remove(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS_REMOVE, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func waitpid(pid int, wstatus *_C_int, options int) (wpid int, err error) { - r0, _, e1 := syscall_syscall(SYS_WAITPID, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options)) - wpid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func gettimeofday(tv *timeval_zos) (err error) { - _, _, e1 := syscall_rawsyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe(p *[2]_C_int) (err error) { - _, _, e1 := syscall_rawsyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, timeval *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___UTIMES_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nmsgsfds int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (ret int, err error) { - r0, _, e1 := syscall_syscall6(SYS_SELECT, uintptr(nmsgsfds), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go deleted file mode 100644 index 9e9d0b2..0000000 --- a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go +++ /dev/null @@ -1,274 +0,0 @@ -// go run mksysctl_openbsd.go -// Code generated by the command above; DO NOT EDIT. - -//go:build 386 && openbsd -// +build 386,openbsd - -package unix - -type mibentry struct { - ctlname string - ctloid []_C_int -} - -var sysctlMib = []mibentry{ - {"ddb.console", []_C_int{9, 6}}, - {"ddb.log", []_C_int{9, 7}}, - {"ddb.max_line", []_C_int{9, 3}}, - {"ddb.max_width", []_C_int{9, 2}}, - {"ddb.panic", []_C_int{9, 5}}, - {"ddb.radix", []_C_int{9, 1}}, - {"ddb.tab_stop_width", []_C_int{9, 4}}, - {"ddb.trigger", []_C_int{9, 8}}, - {"fs.posix.setuid", []_C_int{3, 1, 1}}, - {"hw.allowpowerdown", []_C_int{6, 22}}, - {"hw.byteorder", []_C_int{6, 4}}, - {"hw.cpuspeed", []_C_int{6, 12}}, - {"hw.diskcount", []_C_int{6, 10}}, - {"hw.disknames", []_C_int{6, 8}}, - {"hw.diskstats", []_C_int{6, 9}}, - {"hw.machine", []_C_int{6, 1}}, - {"hw.model", []_C_int{6, 2}}, - {"hw.ncpu", []_C_int{6, 3}}, - {"hw.ncpufound", []_C_int{6, 21}}, - {"hw.ncpuonline", []_C_int{6, 25}}, - {"hw.pagesize", []_C_int{6, 7}}, - {"hw.physmem", []_C_int{6, 19}}, - {"hw.product", []_C_int{6, 15}}, - {"hw.serialno", []_C_int{6, 17}}, - {"hw.setperf", []_C_int{6, 13}}, - {"hw.usermem", []_C_int{6, 20}}, - {"hw.uuid", []_C_int{6, 18}}, - {"hw.vendor", []_C_int{6, 14}}, - {"hw.version", []_C_int{6, 16}}, - {"kern.arandom", []_C_int{1, 37}}, - {"kern.argmax", []_C_int{1, 8}}, - {"kern.boottime", []_C_int{1, 21}}, - {"kern.bufcachepercent", []_C_int{1, 72}}, - {"kern.ccpu", []_C_int{1, 45}}, - {"kern.clockrate", []_C_int{1, 12}}, - {"kern.consdev", []_C_int{1, 75}}, - {"kern.cp_time", []_C_int{1, 40}}, - {"kern.cp_time2", []_C_int{1, 71}}, - {"kern.cryptodevallowsoft", []_C_int{1, 53}}, - {"kern.domainname", []_C_int{1, 22}}, - {"kern.file", []_C_int{1, 73}}, - {"kern.forkstat", []_C_int{1, 42}}, - {"kern.fscale", []_C_int{1, 46}}, - {"kern.fsync", []_C_int{1, 33}}, - {"kern.hostid", []_C_int{1, 11}}, - {"kern.hostname", []_C_int{1, 10}}, - {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}}, - {"kern.job_control", []_C_int{1, 19}}, - {"kern.malloc.buckets", []_C_int{1, 39, 1}}, - {"kern.malloc.kmemnames", []_C_int{1, 39, 3}}, - {"kern.maxclusters", []_C_int{1, 67}}, - {"kern.maxfiles", []_C_int{1, 7}}, - {"kern.maxlocksperuid", []_C_int{1, 70}}, - {"kern.maxpartitions", []_C_int{1, 23}}, - {"kern.maxproc", []_C_int{1, 6}}, - {"kern.maxthread", []_C_int{1, 25}}, - {"kern.maxvnodes", []_C_int{1, 5}}, - {"kern.mbstat", []_C_int{1, 59}}, - {"kern.msgbuf", []_C_int{1, 48}}, - {"kern.msgbufsize", []_C_int{1, 38}}, - {"kern.nchstats", []_C_int{1, 41}}, - {"kern.netlivelocks", []_C_int{1, 76}}, - {"kern.nfiles", []_C_int{1, 56}}, - {"kern.ngroups", []_C_int{1, 18}}, - {"kern.nosuidcoredump", []_C_int{1, 32}}, - {"kern.nprocs", []_C_int{1, 47}}, - {"kern.nselcoll", []_C_int{1, 43}}, - {"kern.nthreads", []_C_int{1, 26}}, - {"kern.numvnodes", []_C_int{1, 58}}, - {"kern.osrelease", []_C_int{1, 2}}, - {"kern.osrevision", []_C_int{1, 3}}, - {"kern.ostype", []_C_int{1, 1}}, - {"kern.osversion", []_C_int{1, 27}}, - {"kern.pool_debug", []_C_int{1, 77}}, - {"kern.posix1version", []_C_int{1, 17}}, - {"kern.proc", []_C_int{1, 66}}, - {"kern.random", []_C_int{1, 31}}, - {"kern.rawpartition", []_C_int{1, 24}}, - {"kern.saved_ids", []_C_int{1, 20}}, - {"kern.securelevel", []_C_int{1, 9}}, - {"kern.seminfo", []_C_int{1, 61}}, - {"kern.shminfo", []_C_int{1, 62}}, - {"kern.somaxconn", []_C_int{1, 28}}, - {"kern.sominconn", []_C_int{1, 29}}, - {"kern.splassert", []_C_int{1, 54}}, - {"kern.stackgap_random", []_C_int{1, 50}}, - {"kern.sysvipc_info", []_C_int{1, 51}}, - {"kern.sysvmsg", []_C_int{1, 34}}, - {"kern.sysvsem", []_C_int{1, 35}}, - {"kern.sysvshm", []_C_int{1, 36}}, - {"kern.timecounter.choice", []_C_int{1, 69, 4}}, - {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, - {"kern.timecounter.tick", []_C_int{1, 69, 1}}, - {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, - {"kern.tty.maxptys", []_C_int{1, 44, 6}}, - {"kern.tty.nptys", []_C_int{1, 44, 7}}, - {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, - {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, - {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, - {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, - {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, - {"kern.ttycount", []_C_int{1, 57}}, - {"kern.userasymcrypto", []_C_int{1, 60}}, - {"kern.usercrypto", []_C_int{1, 52}}, - {"kern.usermount", []_C_int{1, 30}}, - {"kern.version", []_C_int{1, 4}}, - {"kern.vnode", []_C_int{1, 13}}, - {"kern.watchdog.auto", []_C_int{1, 64, 2}}, - {"kern.watchdog.period", []_C_int{1, 64, 1}}, - {"net.bpf.bufsize", []_C_int{4, 31, 1}}, - {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, - {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}}, - {"net.inet.ah.stats", []_C_int{4, 2, 51, 2}}, - {"net.inet.carp.allow", []_C_int{4, 2, 112, 1}}, - {"net.inet.carp.log", []_C_int{4, 2, 112, 3}}, - {"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}}, - {"net.inet.carp.stats", []_C_int{4, 2, 112, 4}}, - {"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}}, - {"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}}, - {"net.inet.divert.stats", []_C_int{4, 2, 258, 3}}, - {"net.inet.esp.enable", []_C_int{4, 2, 50, 1}}, - {"net.inet.esp.stats", []_C_int{4, 2, 50, 4}}, - {"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}}, - {"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}}, - {"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}}, - {"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}}, - {"net.inet.gre.allow", []_C_int{4, 2, 47, 1}}, - {"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}}, - {"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}}, - {"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}}, - {"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}}, - {"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}}, - {"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}}, - {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}}, - {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}}, - {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}}, - {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}}, - {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}}, - {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}}, - {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}}, - {"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}}, - {"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}}, - {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}}, - {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}}, - {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}}, - {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}}, - {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}}, - {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}}, - {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}}, - {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}}, - {"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}}, - {"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}}, - {"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}}, - {"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}}, - {"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}}, - {"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}}, - {"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}}, - {"net.inet.ip.stats", []_C_int{4, 2, 0, 33}}, - {"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}}, - {"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}}, - {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, - {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, - {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, - {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}}, - {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, - {"net.inet.pim.stats", []_C_int{4, 2, 103, 1}}, - {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, - {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, - {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}}, - {"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}}, - {"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}}, - {"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}}, - {"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}}, - {"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}}, - {"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}}, - {"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}}, - {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}}, - {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}}, - {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}}, - {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}}, - {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}}, - {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}}, - {"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}}, - {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}}, - {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}}, - {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}}, - {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}}, - {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}}, - {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}}, - {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}}, - {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}}, - {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}}, - {"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}}, - {"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}}, - {"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}}, - {"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}}, - {"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}}, - {"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}}, - {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}}, - {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}}, - {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}}, - {"net.inet6.icmp6.nd6_prune", []_C_int{4, 24, 30, 6}}, - {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}}, - {"net.inet6.icmp6.nd6_useloopback", []_C_int{4, 24, 30, 11}}, - {"net.inet6.icmp6.nodeinfo", []_C_int{4, 24, 30, 13}}, - {"net.inet6.icmp6.rediraccept", []_C_int{4, 24, 30, 2}}, - {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}}, - {"net.inet6.ip6.accept_rtadv", []_C_int{4, 24, 17, 12}}, - {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}}, - {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}}, - {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}}, - {"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}}, - {"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}}, - {"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}}, - {"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}}, - {"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}}, - {"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}}, - {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}}, - {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}}, - {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}}, - {"net.inet6.ip6.maxifdefrouters", []_C_int{4, 24, 17, 47}}, - {"net.inet6.ip6.maxifprefixes", []_C_int{4, 24, 17, 46}}, - {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}}, - {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}}, - {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}}, - {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}}, - {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}}, - {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}}, - {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}}, - {"net.inet6.ip6.rr_prune", []_C_int{4, 24, 17, 22}}, - {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}}, - {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}}, - {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}}, - {"net.inet6.ip6.v6only", []_C_int{4, 24, 17, 24}}, - {"net.key.sadb_dump", []_C_int{4, 30, 1}}, - {"net.key.spd_dump", []_C_int{4, 30, 2}}, - {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}}, - {"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}}, - {"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}}, - {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, - {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, - {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, - {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}}, - {"net.mpls.ttl", []_C_int{4, 33, 2}}, - {"net.pflow.stats", []_C_int{4, 34, 1}}, - {"net.pipex.enable", []_C_int{4, 35, 1}}, - {"vm.anonmin", []_C_int{2, 7}}, - {"vm.loadavg", []_C_int{2, 2}}, - {"vm.maxslp", []_C_int{2, 10}}, - {"vm.nkmempages", []_C_int{2, 6}}, - {"vm.psstrings", []_C_int{2, 3}}, - {"vm.swapencrypt.enable", []_C_int{2, 5, 0}}, - {"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}}, - {"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}}, - {"vm.uspace", []_C_int{2, 11}}, - {"vm.uvmexp", []_C_int{2, 4}}, - {"vm.vmmeter", []_C_int{2, 1}}, - {"vm.vnodemin", []_C_int{2, 9}}, - {"vm.vtextmin", []_C_int{2, 8}}, -} diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go deleted file mode 100644 index adecd09..0000000 --- a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go +++ /dev/null @@ -1,272 +0,0 @@ -// go run mksysctl_openbsd.go -// Code generated by the command above; DO NOT EDIT. - -//go:build amd64 && openbsd -// +build amd64,openbsd - -package unix - -type mibentry struct { - ctlname string - ctloid []_C_int -} - -var sysctlMib = []mibentry{ - {"ddb.console", []_C_int{9, 6}}, - {"ddb.log", []_C_int{9, 7}}, - {"ddb.max_line", []_C_int{9, 3}}, - {"ddb.max_width", []_C_int{9, 2}}, - {"ddb.panic", []_C_int{9, 5}}, - {"ddb.profile", []_C_int{9, 9}}, - {"ddb.radix", []_C_int{9, 1}}, - {"ddb.tab_stop_width", []_C_int{9, 4}}, - {"ddb.trigger", []_C_int{9, 8}}, - {"fs.posix.setuid", []_C_int{3, 1, 1}}, - {"hw.allowpowerdown", []_C_int{6, 22}}, - {"hw.byteorder", []_C_int{6, 4}}, - {"hw.cpuspeed", []_C_int{6, 12}}, - {"hw.diskcount", []_C_int{6, 10}}, - {"hw.disknames", []_C_int{6, 8}}, - {"hw.diskstats", []_C_int{6, 9}}, - {"hw.machine", []_C_int{6, 1}}, - {"hw.model", []_C_int{6, 2}}, - {"hw.ncpu", []_C_int{6, 3}}, - {"hw.ncpufound", []_C_int{6, 21}}, - {"hw.ncpuonline", []_C_int{6, 25}}, - {"hw.pagesize", []_C_int{6, 7}}, - {"hw.perfpolicy", []_C_int{6, 23}}, - {"hw.physmem", []_C_int{6, 19}}, - {"hw.product", []_C_int{6, 15}}, - {"hw.serialno", []_C_int{6, 17}}, - {"hw.setperf", []_C_int{6, 13}}, - {"hw.usermem", []_C_int{6, 20}}, - {"hw.uuid", []_C_int{6, 18}}, - {"hw.vendor", []_C_int{6, 14}}, - {"hw.version", []_C_int{6, 16}}, - {"kern.allowkmem", []_C_int{1, 52}}, - {"kern.argmax", []_C_int{1, 8}}, - {"kern.boottime", []_C_int{1, 21}}, - {"kern.bufcachepercent", []_C_int{1, 72}}, - {"kern.ccpu", []_C_int{1, 45}}, - {"kern.clockrate", []_C_int{1, 12}}, - {"kern.consdev", []_C_int{1, 75}}, - {"kern.cp_time", []_C_int{1, 40}}, - {"kern.cp_time2", []_C_int{1, 71}}, - {"kern.dnsjackport", []_C_int{1, 13}}, - {"kern.domainname", []_C_int{1, 22}}, - {"kern.file", []_C_int{1, 73}}, - {"kern.forkstat", []_C_int{1, 42}}, - {"kern.fscale", []_C_int{1, 46}}, - {"kern.fsync", []_C_int{1, 33}}, - {"kern.global_ptrace", []_C_int{1, 81}}, - {"kern.hostid", []_C_int{1, 11}}, - {"kern.hostname", []_C_int{1, 10}}, - {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}}, - {"kern.job_control", []_C_int{1, 19}}, - {"kern.malloc.buckets", []_C_int{1, 39, 1}}, - {"kern.malloc.kmemnames", []_C_int{1, 39, 3}}, - {"kern.maxclusters", []_C_int{1, 67}}, - {"kern.maxfiles", []_C_int{1, 7}}, - {"kern.maxlocksperuid", []_C_int{1, 70}}, - {"kern.maxpartitions", []_C_int{1, 23}}, - {"kern.maxproc", []_C_int{1, 6}}, - {"kern.maxthread", []_C_int{1, 25}}, - {"kern.maxvnodes", []_C_int{1, 5}}, - {"kern.mbstat", []_C_int{1, 59}}, - {"kern.msgbuf", []_C_int{1, 48}}, - {"kern.msgbufsize", []_C_int{1, 38}}, - {"kern.nchstats", []_C_int{1, 41}}, - {"kern.netlivelocks", []_C_int{1, 76}}, - {"kern.nfiles", []_C_int{1, 56}}, - {"kern.ngroups", []_C_int{1, 18}}, - {"kern.nosuidcoredump", []_C_int{1, 32}}, - {"kern.nprocs", []_C_int{1, 47}}, - {"kern.nselcoll", []_C_int{1, 43}}, - {"kern.nthreads", []_C_int{1, 26}}, - {"kern.numvnodes", []_C_int{1, 58}}, - {"kern.osrelease", []_C_int{1, 2}}, - {"kern.osrevision", []_C_int{1, 3}}, - {"kern.ostype", []_C_int{1, 1}}, - {"kern.osversion", []_C_int{1, 27}}, - {"kern.pool_debug", []_C_int{1, 77}}, - {"kern.posix1version", []_C_int{1, 17}}, - {"kern.proc", []_C_int{1, 66}}, - {"kern.rawpartition", []_C_int{1, 24}}, - {"kern.saved_ids", []_C_int{1, 20}}, - {"kern.securelevel", []_C_int{1, 9}}, - {"kern.seminfo", []_C_int{1, 61}}, - {"kern.shminfo", []_C_int{1, 62}}, - {"kern.somaxconn", []_C_int{1, 28}}, - {"kern.sominconn", []_C_int{1, 29}}, - {"kern.splassert", []_C_int{1, 54}}, - {"kern.stackgap_random", []_C_int{1, 50}}, - {"kern.sysvipc_info", []_C_int{1, 51}}, - {"kern.sysvmsg", []_C_int{1, 34}}, - {"kern.sysvsem", []_C_int{1, 35}}, - {"kern.sysvshm", []_C_int{1, 36}}, - {"kern.timecounter.choice", []_C_int{1, 69, 4}}, - {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, - {"kern.timecounter.tick", []_C_int{1, 69, 1}}, - {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, - {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, - {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, - {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, - {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, - {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, - {"kern.ttycount", []_C_int{1, 57}}, - {"kern.version", []_C_int{1, 4}}, - {"kern.watchdog.auto", []_C_int{1, 64, 2}}, - {"kern.watchdog.period", []_C_int{1, 64, 1}}, - {"kern.wxabort", []_C_int{1, 74}}, - {"net.bpf.bufsize", []_C_int{4, 31, 1}}, - {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, - {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}}, - {"net.inet.ah.stats", []_C_int{4, 2, 51, 2}}, - {"net.inet.carp.allow", []_C_int{4, 2, 112, 1}}, - {"net.inet.carp.log", []_C_int{4, 2, 112, 3}}, - {"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}}, - {"net.inet.carp.stats", []_C_int{4, 2, 112, 4}}, - {"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}}, - {"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}}, - {"net.inet.divert.stats", []_C_int{4, 2, 258, 3}}, - {"net.inet.esp.enable", []_C_int{4, 2, 50, 1}}, - {"net.inet.esp.stats", []_C_int{4, 2, 50, 4}}, - {"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}}, - {"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}}, - {"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}}, - {"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}}, - {"net.inet.gre.allow", []_C_int{4, 2, 47, 1}}, - {"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}}, - {"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}}, - {"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}}, - {"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}}, - {"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}}, - {"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}}, - {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}}, - {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}}, - {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}}, - {"net.inet.ip.arpdown", []_C_int{4, 2, 0, 40}}, - {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}}, - {"net.inet.ip.arptimeout", []_C_int{4, 2, 0, 39}}, - {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}}, - {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}}, - {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}}, - {"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}}, - {"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}}, - {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}}, - {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}}, - {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}}, - {"net.inet.ip.mrtmfc", []_C_int{4, 2, 0, 37}}, - {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}}, - {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}}, - {"net.inet.ip.mrtvif", []_C_int{4, 2, 0, 38}}, - {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}}, - {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}}, - {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}}, - {"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}}, - {"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}}, - {"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}}, - {"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}}, - {"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}}, - {"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}}, - {"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}}, - {"net.inet.ip.stats", []_C_int{4, 2, 0, 33}}, - {"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}}, - {"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}}, - {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, - {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, - {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, - {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}}, - {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, - {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, - {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, - {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}}, - {"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}}, - {"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}}, - {"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}}, - {"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}}, - {"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}}, - {"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}}, - {"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}}, - {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}}, - {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}}, - {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}}, - {"net.inet.tcp.rootonly", []_C_int{4, 2, 6, 24}}, - {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}}, - {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}}, - {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}}, - {"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}}, - {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}}, - {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}}, - {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}}, - {"net.inet.tcp.synhashsize", []_C_int{4, 2, 6, 25}}, - {"net.inet.tcp.synuselimit", []_C_int{4, 2, 6, 23}}, - {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}}, - {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}}, - {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}}, - {"net.inet.udp.rootonly", []_C_int{4, 2, 17, 6}}, - {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}}, - {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}}, - {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}}, - {"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}}, - {"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}}, - {"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}}, - {"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}}, - {"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}}, - {"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}}, - {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}}, - {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}}, - {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}}, - {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}}, - {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}}, - {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}}, - {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}}, - {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}}, - {"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}}, - {"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}}, - {"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}}, - {"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}}, - {"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}}, - {"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}}, - {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}}, - {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}}, - {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}}, - {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}}, - {"net.inet6.ip6.mrtmfc", []_C_int{4, 24, 17, 53}}, - {"net.inet6.ip6.mrtmif", []_C_int{4, 24, 17, 52}}, - {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}}, - {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}}, - {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}}, - {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}}, - {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}}, - {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}}, - {"net.inet6.ip6.soiikey", []_C_int{4, 24, 17, 54}}, - {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}}, - {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}}, - {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}}, - {"net.key.sadb_dump", []_C_int{4, 30, 1}}, - {"net.key.spd_dump", []_C_int{4, 30, 2}}, - {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}}, - {"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}}, - {"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}}, - {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, - {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, - {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, - {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}}, - {"net.mpls.ttl", []_C_int{4, 33, 2}}, - {"net.pflow.stats", []_C_int{4, 34, 1}}, - {"net.pipex.enable", []_C_int{4, 35, 1}}, - {"vm.anonmin", []_C_int{2, 7}}, - {"vm.loadavg", []_C_int{2, 2}}, - {"vm.maxslp", []_C_int{2, 10}}, - {"vm.nkmempages", []_C_int{2, 6}}, - {"vm.psstrings", []_C_int{2, 3}}, - {"vm.swapencrypt.enable", []_C_int{2, 5, 0}}, - {"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}}, - {"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}}, - {"vm.uspace", []_C_int{2, 11}}, - {"vm.uvmexp", []_C_int{2, 4}}, - {"vm.vmmeter", []_C_int{2, 1}}, - {"vm.vnodemin", []_C_int{2, 9}}, - {"vm.vtextmin", []_C_int{2, 8}}, -} diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go deleted file mode 100644 index 8ea52a4..0000000 --- a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go +++ /dev/null @@ -1,274 +0,0 @@ -// go run mksysctl_openbsd.go -// Code generated by the command above; DO NOT EDIT. - -//go:build arm && openbsd -// +build arm,openbsd - -package unix - -type mibentry struct { - ctlname string - ctloid []_C_int -} - -var sysctlMib = []mibentry{ - {"ddb.console", []_C_int{9, 6}}, - {"ddb.log", []_C_int{9, 7}}, - {"ddb.max_line", []_C_int{9, 3}}, - {"ddb.max_width", []_C_int{9, 2}}, - {"ddb.panic", []_C_int{9, 5}}, - {"ddb.radix", []_C_int{9, 1}}, - {"ddb.tab_stop_width", []_C_int{9, 4}}, - {"ddb.trigger", []_C_int{9, 8}}, - {"fs.posix.setuid", []_C_int{3, 1, 1}}, - {"hw.allowpowerdown", []_C_int{6, 22}}, - {"hw.byteorder", []_C_int{6, 4}}, - {"hw.cpuspeed", []_C_int{6, 12}}, - {"hw.diskcount", []_C_int{6, 10}}, - {"hw.disknames", []_C_int{6, 8}}, - {"hw.diskstats", []_C_int{6, 9}}, - {"hw.machine", []_C_int{6, 1}}, - {"hw.model", []_C_int{6, 2}}, - {"hw.ncpu", []_C_int{6, 3}}, - {"hw.ncpufound", []_C_int{6, 21}}, - {"hw.ncpuonline", []_C_int{6, 25}}, - {"hw.pagesize", []_C_int{6, 7}}, - {"hw.physmem", []_C_int{6, 19}}, - {"hw.product", []_C_int{6, 15}}, - {"hw.serialno", []_C_int{6, 17}}, - {"hw.setperf", []_C_int{6, 13}}, - {"hw.usermem", []_C_int{6, 20}}, - {"hw.uuid", []_C_int{6, 18}}, - {"hw.vendor", []_C_int{6, 14}}, - {"hw.version", []_C_int{6, 16}}, - {"kern.arandom", []_C_int{1, 37}}, - {"kern.argmax", []_C_int{1, 8}}, - {"kern.boottime", []_C_int{1, 21}}, - {"kern.bufcachepercent", []_C_int{1, 72}}, - {"kern.ccpu", []_C_int{1, 45}}, - {"kern.clockrate", []_C_int{1, 12}}, - {"kern.consdev", []_C_int{1, 75}}, - {"kern.cp_time", []_C_int{1, 40}}, - {"kern.cp_time2", []_C_int{1, 71}}, - {"kern.cryptodevallowsoft", []_C_int{1, 53}}, - {"kern.domainname", []_C_int{1, 22}}, - {"kern.file", []_C_int{1, 73}}, - {"kern.forkstat", []_C_int{1, 42}}, - {"kern.fscale", []_C_int{1, 46}}, - {"kern.fsync", []_C_int{1, 33}}, - {"kern.hostid", []_C_int{1, 11}}, - {"kern.hostname", []_C_int{1, 10}}, - {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}}, - {"kern.job_control", []_C_int{1, 19}}, - {"kern.malloc.buckets", []_C_int{1, 39, 1}}, - {"kern.malloc.kmemnames", []_C_int{1, 39, 3}}, - {"kern.maxclusters", []_C_int{1, 67}}, - {"kern.maxfiles", []_C_int{1, 7}}, - {"kern.maxlocksperuid", []_C_int{1, 70}}, - {"kern.maxpartitions", []_C_int{1, 23}}, - {"kern.maxproc", []_C_int{1, 6}}, - {"kern.maxthread", []_C_int{1, 25}}, - {"kern.maxvnodes", []_C_int{1, 5}}, - {"kern.mbstat", []_C_int{1, 59}}, - {"kern.msgbuf", []_C_int{1, 48}}, - {"kern.msgbufsize", []_C_int{1, 38}}, - {"kern.nchstats", []_C_int{1, 41}}, - {"kern.netlivelocks", []_C_int{1, 76}}, - {"kern.nfiles", []_C_int{1, 56}}, - {"kern.ngroups", []_C_int{1, 18}}, - {"kern.nosuidcoredump", []_C_int{1, 32}}, - {"kern.nprocs", []_C_int{1, 47}}, - {"kern.nselcoll", []_C_int{1, 43}}, - {"kern.nthreads", []_C_int{1, 26}}, - {"kern.numvnodes", []_C_int{1, 58}}, - {"kern.osrelease", []_C_int{1, 2}}, - {"kern.osrevision", []_C_int{1, 3}}, - {"kern.ostype", []_C_int{1, 1}}, - {"kern.osversion", []_C_int{1, 27}}, - {"kern.pool_debug", []_C_int{1, 77}}, - {"kern.posix1version", []_C_int{1, 17}}, - {"kern.proc", []_C_int{1, 66}}, - {"kern.random", []_C_int{1, 31}}, - {"kern.rawpartition", []_C_int{1, 24}}, - {"kern.saved_ids", []_C_int{1, 20}}, - {"kern.securelevel", []_C_int{1, 9}}, - {"kern.seminfo", []_C_int{1, 61}}, - {"kern.shminfo", []_C_int{1, 62}}, - {"kern.somaxconn", []_C_int{1, 28}}, - {"kern.sominconn", []_C_int{1, 29}}, - {"kern.splassert", []_C_int{1, 54}}, - {"kern.stackgap_random", []_C_int{1, 50}}, - {"kern.sysvipc_info", []_C_int{1, 51}}, - {"kern.sysvmsg", []_C_int{1, 34}}, - {"kern.sysvsem", []_C_int{1, 35}}, - {"kern.sysvshm", []_C_int{1, 36}}, - {"kern.timecounter.choice", []_C_int{1, 69, 4}}, - {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, - {"kern.timecounter.tick", []_C_int{1, 69, 1}}, - {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, - {"kern.tty.maxptys", []_C_int{1, 44, 6}}, - {"kern.tty.nptys", []_C_int{1, 44, 7}}, - {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, - {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, - {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, - {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, - {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, - {"kern.ttycount", []_C_int{1, 57}}, - {"kern.userasymcrypto", []_C_int{1, 60}}, - {"kern.usercrypto", []_C_int{1, 52}}, - {"kern.usermount", []_C_int{1, 30}}, - {"kern.version", []_C_int{1, 4}}, - {"kern.vnode", []_C_int{1, 13}}, - {"kern.watchdog.auto", []_C_int{1, 64, 2}}, - {"kern.watchdog.period", []_C_int{1, 64, 1}}, - {"net.bpf.bufsize", []_C_int{4, 31, 1}}, - {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, - {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}}, - {"net.inet.ah.stats", []_C_int{4, 2, 51, 2}}, - {"net.inet.carp.allow", []_C_int{4, 2, 112, 1}}, - {"net.inet.carp.log", []_C_int{4, 2, 112, 3}}, - {"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}}, - {"net.inet.carp.stats", []_C_int{4, 2, 112, 4}}, - {"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}}, - {"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}}, - {"net.inet.divert.stats", []_C_int{4, 2, 258, 3}}, - {"net.inet.esp.enable", []_C_int{4, 2, 50, 1}}, - {"net.inet.esp.stats", []_C_int{4, 2, 50, 4}}, - {"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}}, - {"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}}, - {"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}}, - {"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}}, - {"net.inet.gre.allow", []_C_int{4, 2, 47, 1}}, - {"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}}, - {"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}}, - {"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}}, - {"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}}, - {"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}}, - {"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}}, - {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}}, - {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}}, - {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}}, - {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}}, - {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}}, - {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}}, - {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}}, - {"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}}, - {"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}}, - {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}}, - {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}}, - {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}}, - {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}}, - {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}}, - {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}}, - {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}}, - {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}}, - {"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}}, - {"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}}, - {"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}}, - {"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}}, - {"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}}, - {"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}}, - {"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}}, - {"net.inet.ip.stats", []_C_int{4, 2, 0, 33}}, - {"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}}, - {"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}}, - {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, - {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, - {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, - {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}}, - {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, - {"net.inet.pim.stats", []_C_int{4, 2, 103, 1}}, - {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, - {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, - {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}}, - {"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}}, - {"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}}, - {"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}}, - {"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}}, - {"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}}, - {"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}}, - {"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}}, - {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}}, - {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}}, - {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}}, - {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}}, - {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}}, - {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}}, - {"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}}, - {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}}, - {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}}, - {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}}, - {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}}, - {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}}, - {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}}, - {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}}, - {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}}, - {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}}, - {"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}}, - {"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}}, - {"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}}, - {"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}}, - {"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}}, - {"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}}, - {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}}, - {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}}, - {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}}, - {"net.inet6.icmp6.nd6_prune", []_C_int{4, 24, 30, 6}}, - {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}}, - {"net.inet6.icmp6.nd6_useloopback", []_C_int{4, 24, 30, 11}}, - {"net.inet6.icmp6.nodeinfo", []_C_int{4, 24, 30, 13}}, - {"net.inet6.icmp6.rediraccept", []_C_int{4, 24, 30, 2}}, - {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}}, - {"net.inet6.ip6.accept_rtadv", []_C_int{4, 24, 17, 12}}, - {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}}, - {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}}, - {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}}, - {"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}}, - {"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}}, - {"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}}, - {"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}}, - {"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}}, - {"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}}, - {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}}, - {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}}, - {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}}, - {"net.inet6.ip6.maxifdefrouters", []_C_int{4, 24, 17, 47}}, - {"net.inet6.ip6.maxifprefixes", []_C_int{4, 24, 17, 46}}, - {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}}, - {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}}, - {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}}, - {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}}, - {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}}, - {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}}, - {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}}, - {"net.inet6.ip6.rr_prune", []_C_int{4, 24, 17, 22}}, - {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}}, - {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}}, - {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}}, - {"net.inet6.ip6.v6only", []_C_int{4, 24, 17, 24}}, - {"net.key.sadb_dump", []_C_int{4, 30, 1}}, - {"net.key.spd_dump", []_C_int{4, 30, 2}}, - {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}}, - {"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}}, - {"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}}, - {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, - {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, - {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, - {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}}, - {"net.mpls.ttl", []_C_int{4, 33, 2}}, - {"net.pflow.stats", []_C_int{4, 34, 1}}, - {"net.pipex.enable", []_C_int{4, 35, 1}}, - {"vm.anonmin", []_C_int{2, 7}}, - {"vm.loadavg", []_C_int{2, 2}}, - {"vm.maxslp", []_C_int{2, 10}}, - {"vm.nkmempages", []_C_int{2, 6}}, - {"vm.psstrings", []_C_int{2, 3}}, - {"vm.swapencrypt.enable", []_C_int{2, 5, 0}}, - {"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}}, - {"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}}, - {"vm.uspace", []_C_int{2, 11}}, - {"vm.uvmexp", []_C_int{2, 4}}, - {"vm.vmmeter", []_C_int{2, 1}}, - {"vm.vnodemin", []_C_int{2, 9}}, - {"vm.vtextmin", []_C_int{2, 8}}, -} diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go deleted file mode 100644 index 154b57a..0000000 --- a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go +++ /dev/null @@ -1,276 +0,0 @@ -// go run mksysctl_openbsd.go -// Code generated by the command above; DO NOT EDIT. - -//go:build arm64 && openbsd -// +build arm64,openbsd - -package unix - -type mibentry struct { - ctlname string - ctloid []_C_int -} - -var sysctlMib = []mibentry{ - {"ddb.console", []_C_int{9, 6}}, - {"ddb.log", []_C_int{9, 7}}, - {"ddb.max_line", []_C_int{9, 3}}, - {"ddb.max_width", []_C_int{9, 2}}, - {"ddb.panic", []_C_int{9, 5}}, - {"ddb.profile", []_C_int{9, 9}}, - {"ddb.radix", []_C_int{9, 1}}, - {"ddb.tab_stop_width", []_C_int{9, 4}}, - {"ddb.trigger", []_C_int{9, 8}}, - {"fs.posix.setuid", []_C_int{3, 1, 1}}, - {"hw.allowpowerdown", []_C_int{6, 22}}, - {"hw.byteorder", []_C_int{6, 4}}, - {"hw.cpuspeed", []_C_int{6, 12}}, - {"hw.diskcount", []_C_int{6, 10}}, - {"hw.disknames", []_C_int{6, 8}}, - {"hw.diskstats", []_C_int{6, 9}}, - {"hw.machine", []_C_int{6, 1}}, - {"hw.model", []_C_int{6, 2}}, - {"hw.ncpu", []_C_int{6, 3}}, - {"hw.ncpufound", []_C_int{6, 21}}, - {"hw.ncpuonline", []_C_int{6, 25}}, - {"hw.pagesize", []_C_int{6, 7}}, - {"hw.perfpolicy", []_C_int{6, 23}}, - {"hw.physmem", []_C_int{6, 19}}, - {"hw.product", []_C_int{6, 15}}, - {"hw.serialno", []_C_int{6, 17}}, - {"hw.setperf", []_C_int{6, 13}}, - {"hw.smt", []_C_int{6, 24}}, - {"hw.usermem", []_C_int{6, 20}}, - {"hw.uuid", []_C_int{6, 18}}, - {"hw.vendor", []_C_int{6, 14}}, - {"hw.version", []_C_int{6, 16}}, - {"kern.allowkmem", []_C_int{1, 52}}, - {"kern.argmax", []_C_int{1, 8}}, - {"kern.audio", []_C_int{1, 84}}, - {"kern.boottime", []_C_int{1, 21}}, - {"kern.bufcachepercent", []_C_int{1, 72}}, - {"kern.ccpu", []_C_int{1, 45}}, - {"kern.clockrate", []_C_int{1, 12}}, - {"kern.consdev", []_C_int{1, 75}}, - {"kern.cp_time", []_C_int{1, 40}}, - {"kern.cp_time2", []_C_int{1, 71}}, - {"kern.cpustats", []_C_int{1, 85}}, - {"kern.domainname", []_C_int{1, 22}}, - {"kern.file", []_C_int{1, 73}}, - {"kern.forkstat", []_C_int{1, 42}}, - {"kern.fscale", []_C_int{1, 46}}, - {"kern.fsync", []_C_int{1, 33}}, - {"kern.global_ptrace", []_C_int{1, 81}}, - {"kern.hostid", []_C_int{1, 11}}, - {"kern.hostname", []_C_int{1, 10}}, - {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}}, - {"kern.job_control", []_C_int{1, 19}}, - {"kern.malloc.buckets", []_C_int{1, 39, 1}}, - {"kern.malloc.kmemnames", []_C_int{1, 39, 3}}, - {"kern.maxclusters", []_C_int{1, 67}}, - {"kern.maxfiles", []_C_int{1, 7}}, - {"kern.maxlocksperuid", []_C_int{1, 70}}, - {"kern.maxpartitions", []_C_int{1, 23}}, - {"kern.maxproc", []_C_int{1, 6}}, - {"kern.maxthread", []_C_int{1, 25}}, - {"kern.maxvnodes", []_C_int{1, 5}}, - {"kern.mbstat", []_C_int{1, 59}}, - {"kern.msgbuf", []_C_int{1, 48}}, - {"kern.msgbufsize", []_C_int{1, 38}}, - {"kern.nchstats", []_C_int{1, 41}}, - {"kern.netlivelocks", []_C_int{1, 76}}, - {"kern.nfiles", []_C_int{1, 56}}, - {"kern.ngroups", []_C_int{1, 18}}, - {"kern.nosuidcoredump", []_C_int{1, 32}}, - {"kern.nprocs", []_C_int{1, 47}}, - {"kern.nselcoll", []_C_int{1, 43}}, - {"kern.nthreads", []_C_int{1, 26}}, - {"kern.numvnodes", []_C_int{1, 58}}, - {"kern.osrelease", []_C_int{1, 2}}, - {"kern.osrevision", []_C_int{1, 3}}, - {"kern.ostype", []_C_int{1, 1}}, - {"kern.osversion", []_C_int{1, 27}}, - {"kern.pool_debug", []_C_int{1, 77}}, - {"kern.posix1version", []_C_int{1, 17}}, - {"kern.proc", []_C_int{1, 66}}, - {"kern.rawpartition", []_C_int{1, 24}}, - {"kern.saved_ids", []_C_int{1, 20}}, - {"kern.securelevel", []_C_int{1, 9}}, - {"kern.seminfo", []_C_int{1, 61}}, - {"kern.shminfo", []_C_int{1, 62}}, - {"kern.somaxconn", []_C_int{1, 28}}, - {"kern.sominconn", []_C_int{1, 29}}, - {"kern.splassert", []_C_int{1, 54}}, - {"kern.stackgap_random", []_C_int{1, 50}}, - {"kern.sysvipc_info", []_C_int{1, 51}}, - {"kern.sysvmsg", []_C_int{1, 34}}, - {"kern.sysvsem", []_C_int{1, 35}}, - {"kern.sysvshm", []_C_int{1, 36}}, - {"kern.timecounter.choice", []_C_int{1, 69, 4}}, - {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, - {"kern.timecounter.tick", []_C_int{1, 69, 1}}, - {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, - {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, - {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, - {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, - {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, - {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, - {"kern.ttycount", []_C_int{1, 57}}, - {"kern.version", []_C_int{1, 4}}, - {"kern.watchdog.auto", []_C_int{1, 64, 2}}, - {"kern.watchdog.period", []_C_int{1, 64, 1}}, - {"kern.witnesswatch", []_C_int{1, 53}}, - {"kern.wxabort", []_C_int{1, 74}}, - {"net.bpf.bufsize", []_C_int{4, 31, 1}}, - {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, - {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}}, - {"net.inet.ah.stats", []_C_int{4, 2, 51, 2}}, - {"net.inet.carp.allow", []_C_int{4, 2, 112, 1}}, - {"net.inet.carp.log", []_C_int{4, 2, 112, 3}}, - {"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}}, - {"net.inet.carp.stats", []_C_int{4, 2, 112, 4}}, - {"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}}, - {"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}}, - {"net.inet.divert.stats", []_C_int{4, 2, 258, 3}}, - {"net.inet.esp.enable", []_C_int{4, 2, 50, 1}}, - {"net.inet.esp.stats", []_C_int{4, 2, 50, 4}}, - {"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}}, - {"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}}, - {"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}}, - {"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}}, - {"net.inet.gre.allow", []_C_int{4, 2, 47, 1}}, - {"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}}, - {"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}}, - {"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}}, - {"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}}, - {"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}}, - {"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}}, - {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}}, - {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}}, - {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}}, - {"net.inet.ip.arpdown", []_C_int{4, 2, 0, 40}}, - {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}}, - {"net.inet.ip.arptimeout", []_C_int{4, 2, 0, 39}}, - {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}}, - {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}}, - {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}}, - {"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}}, - {"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}}, - {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}}, - {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}}, - {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}}, - {"net.inet.ip.mrtmfc", []_C_int{4, 2, 0, 37}}, - {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}}, - {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}}, - {"net.inet.ip.mrtvif", []_C_int{4, 2, 0, 38}}, - {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}}, - {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}}, - {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}}, - {"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}}, - {"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}}, - {"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}}, - {"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}}, - {"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}}, - {"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}}, - {"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}}, - {"net.inet.ip.stats", []_C_int{4, 2, 0, 33}}, - {"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}}, - {"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}}, - {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, - {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, - {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, - {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}}, - {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, - {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, - {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, - {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}}, - {"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}}, - {"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}}, - {"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}}, - {"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}}, - {"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}}, - {"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}}, - {"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}}, - {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}}, - {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}}, - {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}}, - {"net.inet.tcp.rootonly", []_C_int{4, 2, 6, 24}}, - {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}}, - {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}}, - {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}}, - {"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}}, - {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}}, - {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}}, - {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}}, - {"net.inet.tcp.synhashsize", []_C_int{4, 2, 6, 25}}, - {"net.inet.tcp.synuselimit", []_C_int{4, 2, 6, 23}}, - {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}}, - {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}}, - {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}}, - {"net.inet.udp.rootonly", []_C_int{4, 2, 17, 6}}, - {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}}, - {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}}, - {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}}, - {"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}}, - {"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}}, - {"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}}, - {"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}}, - {"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}}, - {"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}}, - {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}}, - {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}}, - {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}}, - {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}}, - {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}}, - {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}}, - {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}}, - {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}}, - {"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}}, - {"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}}, - {"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}}, - {"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}}, - {"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}}, - {"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}}, - {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}}, - {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}}, - {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}}, - {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}}, - {"net.inet6.ip6.mrtmfc", []_C_int{4, 24, 17, 53}}, - {"net.inet6.ip6.mrtmif", []_C_int{4, 24, 17, 52}}, - {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}}, - {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}}, - {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}}, - {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}}, - {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}}, - {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}}, - {"net.inet6.ip6.soiikey", []_C_int{4, 24, 17, 54}}, - {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}}, - {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}}, - {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}}, - {"net.key.sadb_dump", []_C_int{4, 30, 1}}, - {"net.key.spd_dump", []_C_int{4, 30, 2}}, - {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}}, - {"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}}, - {"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}}, - {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, - {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, - {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, - {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}}, - {"net.mpls.ttl", []_C_int{4, 33, 2}}, - {"net.pflow.stats", []_C_int{4, 34, 1}}, - {"net.pipex.enable", []_C_int{4, 35, 1}}, - {"vm.anonmin", []_C_int{2, 7}}, - {"vm.loadavg", []_C_int{2, 2}}, - {"vm.malloc_conf", []_C_int{2, 12}}, - {"vm.maxslp", []_C_int{2, 10}}, - {"vm.nkmempages", []_C_int{2, 6}}, - {"vm.psstrings", []_C_int{2, 3}}, - {"vm.swapencrypt.enable", []_C_int{2, 5, 0}}, - {"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}}, - {"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}}, - {"vm.uspace", []_C_int{2, 11}}, - {"vm.uvmexp", []_C_int{2, 4}}, - {"vm.vmmeter", []_C_int{2, 1}}, - {"vm.vnodemin", []_C_int{2, 9}}, - {"vm.vtextmin", []_C_int{2, 8}}, -} diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go deleted file mode 100644 index d96bb2b..0000000 --- a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go +++ /dev/null @@ -1,280 +0,0 @@ -// go run mksysctl_openbsd.go -// Code generated by the command above; DO NOT EDIT. - -//go:build mips64 && openbsd -// +build mips64,openbsd - -package unix - -type mibentry struct { - ctlname string - ctloid []_C_int -} - -var sysctlMib = []mibentry{ - {"ddb.console", []_C_int{9, 6}}, - {"ddb.log", []_C_int{9, 7}}, - {"ddb.max_line", []_C_int{9, 3}}, - {"ddb.max_width", []_C_int{9, 2}}, - {"ddb.panic", []_C_int{9, 5}}, - {"ddb.profile", []_C_int{9, 9}}, - {"ddb.radix", []_C_int{9, 1}}, - {"ddb.tab_stop_width", []_C_int{9, 4}}, - {"ddb.trigger", []_C_int{9, 8}}, - {"fs.posix.setuid", []_C_int{3, 1, 1}}, - {"hw.allowpowerdown", []_C_int{6, 22}}, - {"hw.byteorder", []_C_int{6, 4}}, - {"hw.cpuspeed", []_C_int{6, 12}}, - {"hw.diskcount", []_C_int{6, 10}}, - {"hw.disknames", []_C_int{6, 8}}, - {"hw.diskstats", []_C_int{6, 9}}, - {"hw.machine", []_C_int{6, 1}}, - {"hw.model", []_C_int{6, 2}}, - {"hw.ncpu", []_C_int{6, 3}}, - {"hw.ncpufound", []_C_int{6, 21}}, - {"hw.ncpuonline", []_C_int{6, 25}}, - {"hw.pagesize", []_C_int{6, 7}}, - {"hw.perfpolicy", []_C_int{6, 23}}, - {"hw.physmem", []_C_int{6, 19}}, - {"hw.product", []_C_int{6, 15}}, - {"hw.serialno", []_C_int{6, 17}}, - {"hw.setperf", []_C_int{6, 13}}, - {"hw.smt", []_C_int{6, 24}}, - {"hw.usermem", []_C_int{6, 20}}, - {"hw.uuid", []_C_int{6, 18}}, - {"hw.vendor", []_C_int{6, 14}}, - {"hw.version", []_C_int{6, 16}}, - {"kern.allowdt", []_C_int{1, 65}}, - {"kern.allowkmem", []_C_int{1, 52}}, - {"kern.argmax", []_C_int{1, 8}}, - {"kern.audio", []_C_int{1, 84}}, - {"kern.boottime", []_C_int{1, 21}}, - {"kern.bufcachepercent", []_C_int{1, 72}}, - {"kern.ccpu", []_C_int{1, 45}}, - {"kern.clockrate", []_C_int{1, 12}}, - {"kern.consbuf", []_C_int{1, 83}}, - {"kern.consbufsize", []_C_int{1, 82}}, - {"kern.consdev", []_C_int{1, 75}}, - {"kern.cp_time", []_C_int{1, 40}}, - {"kern.cp_time2", []_C_int{1, 71}}, - {"kern.cpustats", []_C_int{1, 85}}, - {"kern.domainname", []_C_int{1, 22}}, - {"kern.file", []_C_int{1, 73}}, - {"kern.forkstat", []_C_int{1, 42}}, - {"kern.fscale", []_C_int{1, 46}}, - {"kern.fsync", []_C_int{1, 33}}, - {"kern.global_ptrace", []_C_int{1, 81}}, - {"kern.hostid", []_C_int{1, 11}}, - {"kern.hostname", []_C_int{1, 10}}, - {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}}, - {"kern.job_control", []_C_int{1, 19}}, - {"kern.malloc.buckets", []_C_int{1, 39, 1}}, - {"kern.malloc.kmemnames", []_C_int{1, 39, 3}}, - {"kern.maxclusters", []_C_int{1, 67}}, - {"kern.maxfiles", []_C_int{1, 7}}, - {"kern.maxlocksperuid", []_C_int{1, 70}}, - {"kern.maxpartitions", []_C_int{1, 23}}, - {"kern.maxproc", []_C_int{1, 6}}, - {"kern.maxthread", []_C_int{1, 25}}, - {"kern.maxvnodes", []_C_int{1, 5}}, - {"kern.mbstat", []_C_int{1, 59}}, - {"kern.msgbuf", []_C_int{1, 48}}, - {"kern.msgbufsize", []_C_int{1, 38}}, - {"kern.nchstats", []_C_int{1, 41}}, - {"kern.netlivelocks", []_C_int{1, 76}}, - {"kern.nfiles", []_C_int{1, 56}}, - {"kern.ngroups", []_C_int{1, 18}}, - {"kern.nosuidcoredump", []_C_int{1, 32}}, - {"kern.nprocs", []_C_int{1, 47}}, - {"kern.nselcoll", []_C_int{1, 43}}, - {"kern.nthreads", []_C_int{1, 26}}, - {"kern.numvnodes", []_C_int{1, 58}}, - {"kern.osrelease", []_C_int{1, 2}}, - {"kern.osrevision", []_C_int{1, 3}}, - {"kern.ostype", []_C_int{1, 1}}, - {"kern.osversion", []_C_int{1, 27}}, - {"kern.pfstatus", []_C_int{1, 86}}, - {"kern.pool_debug", []_C_int{1, 77}}, - {"kern.posix1version", []_C_int{1, 17}}, - {"kern.proc", []_C_int{1, 66}}, - {"kern.rawpartition", []_C_int{1, 24}}, - {"kern.saved_ids", []_C_int{1, 20}}, - {"kern.securelevel", []_C_int{1, 9}}, - {"kern.seminfo", []_C_int{1, 61}}, - {"kern.shminfo", []_C_int{1, 62}}, - {"kern.somaxconn", []_C_int{1, 28}}, - {"kern.sominconn", []_C_int{1, 29}}, - {"kern.splassert", []_C_int{1, 54}}, - {"kern.stackgap_random", []_C_int{1, 50}}, - {"kern.sysvipc_info", []_C_int{1, 51}}, - {"kern.sysvmsg", []_C_int{1, 34}}, - {"kern.sysvsem", []_C_int{1, 35}}, - {"kern.sysvshm", []_C_int{1, 36}}, - {"kern.timecounter.choice", []_C_int{1, 69, 4}}, - {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, - {"kern.timecounter.tick", []_C_int{1, 69, 1}}, - {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, - {"kern.timeout_stats", []_C_int{1, 87}}, - {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, - {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, - {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, - {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, - {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, - {"kern.ttycount", []_C_int{1, 57}}, - {"kern.utc_offset", []_C_int{1, 88}}, - {"kern.version", []_C_int{1, 4}}, - {"kern.watchdog.auto", []_C_int{1, 64, 2}}, - {"kern.watchdog.period", []_C_int{1, 64, 1}}, - {"kern.witnesswatch", []_C_int{1, 53}}, - {"kern.wxabort", []_C_int{1, 74}}, - {"net.bpf.bufsize", []_C_int{4, 31, 1}}, - {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, - {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}}, - {"net.inet.ah.stats", []_C_int{4, 2, 51, 2}}, - {"net.inet.carp.allow", []_C_int{4, 2, 112, 1}}, - {"net.inet.carp.log", []_C_int{4, 2, 112, 3}}, - {"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}}, - {"net.inet.carp.stats", []_C_int{4, 2, 112, 4}}, - {"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}}, - {"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}}, - {"net.inet.divert.stats", []_C_int{4, 2, 258, 3}}, - {"net.inet.esp.enable", []_C_int{4, 2, 50, 1}}, - {"net.inet.esp.stats", []_C_int{4, 2, 50, 4}}, - {"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}}, - {"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}}, - {"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}}, - {"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}}, - {"net.inet.gre.allow", []_C_int{4, 2, 47, 1}}, - {"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}}, - {"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}}, - {"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}}, - {"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}}, - {"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}}, - {"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}}, - {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}}, - {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}}, - {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}}, - {"net.inet.ip.arpdown", []_C_int{4, 2, 0, 40}}, - {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}}, - {"net.inet.ip.arptimeout", []_C_int{4, 2, 0, 39}}, - {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}}, - {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}}, - {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}}, - {"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}}, - {"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}}, - {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}}, - {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}}, - {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}}, - {"net.inet.ip.mrtmfc", []_C_int{4, 2, 0, 37}}, - {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}}, - {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}}, - {"net.inet.ip.mrtvif", []_C_int{4, 2, 0, 38}}, - {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}}, - {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}}, - {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}}, - {"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}}, - {"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}}, - {"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}}, - {"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}}, - {"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}}, - {"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}}, - {"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}}, - {"net.inet.ip.stats", []_C_int{4, 2, 0, 33}}, - {"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}}, - {"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}}, - {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, - {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, - {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, - {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, - {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, - {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, - {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}}, - {"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}}, - {"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}}, - {"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}}, - {"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}}, - {"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}}, - {"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}}, - {"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}}, - {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}}, - {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}}, - {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}}, - {"net.inet.tcp.rootonly", []_C_int{4, 2, 6, 24}}, - {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}}, - {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}}, - {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}}, - {"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}}, - {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}}, - {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}}, - {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}}, - {"net.inet.tcp.synhashsize", []_C_int{4, 2, 6, 25}}, - {"net.inet.tcp.synuselimit", []_C_int{4, 2, 6, 23}}, - {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}}, - {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}}, - {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}}, - {"net.inet.udp.rootonly", []_C_int{4, 2, 17, 6}}, - {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}}, - {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}}, - {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}}, - {"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}}, - {"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}}, - {"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}}, - {"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}}, - {"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}}, - {"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}}, - {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}}, - {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}}, - {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}}, - {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}}, - {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}}, - {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}}, - {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}}, - {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}}, - {"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}}, - {"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}}, - {"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}}, - {"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}}, - {"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}}, - {"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}}, - {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}}, - {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}}, - {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}}, - {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}}, - {"net.inet6.ip6.mrtmfc", []_C_int{4, 24, 17, 53}}, - {"net.inet6.ip6.mrtmif", []_C_int{4, 24, 17, 52}}, - {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}}, - {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}}, - {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}}, - {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}}, - {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}}, - {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}}, - {"net.inet6.ip6.soiikey", []_C_int{4, 24, 17, 54}}, - {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}}, - {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}}, - {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}}, - {"net.key.sadb_dump", []_C_int{4, 30, 1}}, - {"net.key.spd_dump", []_C_int{4, 30, 2}}, - {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}}, - {"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}}, - {"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}}, - {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, - {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, - {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, - {"net.mpls.ttl", []_C_int{4, 33, 2}}, - {"net.pflow.stats", []_C_int{4, 34, 1}}, - {"net.pipex.enable", []_C_int{4, 35, 1}}, - {"vm.anonmin", []_C_int{2, 7}}, - {"vm.loadavg", []_C_int{2, 2}}, - {"vm.malloc_conf", []_C_int{2, 12}}, - {"vm.maxslp", []_C_int{2, 10}}, - {"vm.nkmempages", []_C_int{2, 6}}, - {"vm.psstrings", []_C_int{2, 3}}, - {"vm.swapencrypt.enable", []_C_int{2, 5, 0}}, - {"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}}, - {"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}}, - {"vm.uspace", []_C_int{2, 11}}, - {"vm.uvmexp", []_C_int{2, 4}}, - {"vm.vmmeter", []_C_int{2, 1}}, - {"vm.vnodemin", []_C_int{2, 9}}, - {"vm.vtextmin", []_C_int{2, 8}}, -} diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go deleted file mode 100644 index f8298ff..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go +++ /dev/null @@ -1,440 +0,0 @@ -// go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/sys/syscall.h -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build amd64 && darwin -// +build amd64,darwin - -package unix - -// Deprecated: Use libSystem wrappers instead of direct syscalls. -const ( - SYS_SYSCALL = 0 - SYS_EXIT = 1 - SYS_FORK = 2 - SYS_READ = 3 - SYS_WRITE = 4 - SYS_OPEN = 5 - SYS_CLOSE = 6 - SYS_WAIT4 = 7 - SYS_LINK = 9 - SYS_UNLINK = 10 - SYS_CHDIR = 12 - SYS_FCHDIR = 13 - SYS_MKNOD = 14 - SYS_CHMOD = 15 - SYS_CHOWN = 16 - SYS_GETFSSTAT = 18 - SYS_GETPID = 20 - SYS_SETUID = 23 - SYS_GETUID = 24 - SYS_GETEUID = 25 - SYS_PTRACE = 26 - SYS_RECVMSG = 27 - SYS_SENDMSG = 28 - SYS_RECVFROM = 29 - SYS_ACCEPT = 30 - SYS_GETPEERNAME = 31 - SYS_GETSOCKNAME = 32 - SYS_ACCESS = 33 - SYS_CHFLAGS = 34 - SYS_FCHFLAGS = 35 - SYS_SYNC = 36 - SYS_KILL = 37 - SYS_GETPPID = 39 - SYS_DUP = 41 - SYS_PIPE = 42 - SYS_GETEGID = 43 - SYS_SIGACTION = 46 - SYS_GETGID = 47 - SYS_SIGPROCMASK = 48 - SYS_GETLOGIN = 49 - SYS_SETLOGIN = 50 - SYS_ACCT = 51 - SYS_SIGPENDING = 52 - SYS_SIGALTSTACK = 53 - SYS_IOCTL = 54 - SYS_REBOOT = 55 - SYS_REVOKE = 56 - SYS_SYMLINK = 57 - SYS_READLINK = 58 - SYS_EXECVE = 59 - SYS_UMASK = 60 - SYS_CHROOT = 61 - SYS_MSYNC = 65 - SYS_VFORK = 66 - SYS_MUNMAP = 73 - SYS_MPROTECT = 74 - SYS_MADVISE = 75 - SYS_MINCORE = 78 - SYS_GETGROUPS = 79 - SYS_SETGROUPS = 80 - SYS_GETPGRP = 81 - SYS_SETPGID = 82 - SYS_SETITIMER = 83 - SYS_SWAPON = 85 - SYS_GETITIMER = 86 - SYS_GETDTABLESIZE = 89 - SYS_DUP2 = 90 - SYS_FCNTL = 92 - SYS_SELECT = 93 - SYS_FSYNC = 95 - SYS_SETPRIORITY = 96 - SYS_SOCKET = 97 - SYS_CONNECT = 98 - SYS_GETPRIORITY = 100 - SYS_BIND = 104 - SYS_SETSOCKOPT = 105 - SYS_LISTEN = 106 - SYS_SIGSUSPEND = 111 - SYS_GETTIMEOFDAY = 116 - SYS_GETRUSAGE = 117 - SYS_GETSOCKOPT = 118 - SYS_READV = 120 - SYS_WRITEV = 121 - SYS_SETTIMEOFDAY = 122 - SYS_FCHOWN = 123 - SYS_FCHMOD = 124 - SYS_SETREUID = 126 - SYS_SETREGID = 127 - SYS_RENAME = 128 - SYS_FLOCK = 131 - SYS_MKFIFO = 132 - SYS_SENDTO = 133 - SYS_SHUTDOWN = 134 - SYS_SOCKETPAIR = 135 - SYS_MKDIR = 136 - SYS_RMDIR = 137 - SYS_UTIMES = 138 - SYS_FUTIMES = 139 - SYS_ADJTIME = 140 - SYS_GETHOSTUUID = 142 - SYS_SETSID = 147 - SYS_GETPGID = 151 - SYS_SETPRIVEXEC = 152 - SYS_PREAD = 153 - SYS_PWRITE = 154 - SYS_NFSSVC = 155 - SYS_STATFS = 157 - SYS_FSTATFS = 158 - SYS_UNMOUNT = 159 - SYS_GETFH = 161 - SYS_QUOTACTL = 165 - SYS_MOUNT = 167 - SYS_CSOPS = 169 - SYS_CSOPS_AUDITTOKEN = 170 - SYS_WAITID = 173 - SYS_KDEBUG_TYPEFILTER = 177 - SYS_KDEBUG_TRACE_STRING = 178 - SYS_KDEBUG_TRACE64 = 179 - SYS_KDEBUG_TRACE = 180 - SYS_SETGID = 181 - SYS_SETEGID = 182 - SYS_SETEUID = 183 - SYS_SIGRETURN = 184 - SYS_THREAD_SELFCOUNTS = 186 - SYS_FDATASYNC = 187 - SYS_STAT = 188 - SYS_FSTAT = 189 - SYS_LSTAT = 190 - SYS_PATHCONF = 191 - SYS_FPATHCONF = 192 - SYS_GETRLIMIT = 194 - SYS_SETRLIMIT = 195 - SYS_GETDIRENTRIES = 196 - SYS_MMAP = 197 - SYS_LSEEK = 199 - SYS_TRUNCATE = 200 - SYS_FTRUNCATE = 201 - SYS_SYSCTL = 202 - SYS_MLOCK = 203 - SYS_MUNLOCK = 204 - SYS_UNDELETE = 205 - SYS_OPEN_DPROTECTED_NP = 216 - SYS_GETATTRLIST = 220 - SYS_SETATTRLIST = 221 - SYS_GETDIRENTRIESATTR = 222 - SYS_EXCHANGEDATA = 223 - SYS_SEARCHFS = 225 - SYS_DELETE = 226 - SYS_COPYFILE = 227 - SYS_FGETATTRLIST = 228 - SYS_FSETATTRLIST = 229 - SYS_POLL = 230 - SYS_WATCHEVENT = 231 - SYS_WAITEVENT = 232 - SYS_MODWATCH = 233 - SYS_GETXATTR = 234 - SYS_FGETXATTR = 235 - SYS_SETXATTR = 236 - SYS_FSETXATTR = 237 - SYS_REMOVEXATTR = 238 - SYS_FREMOVEXATTR = 239 - SYS_LISTXATTR = 240 - SYS_FLISTXATTR = 241 - SYS_FSCTL = 242 - SYS_INITGROUPS = 243 - SYS_POSIX_SPAWN = 244 - SYS_FFSCTL = 245 - SYS_NFSCLNT = 247 - SYS_FHOPEN = 248 - SYS_MINHERIT = 250 - SYS_SEMSYS = 251 - SYS_MSGSYS = 252 - SYS_SHMSYS = 253 - SYS_SEMCTL = 254 - SYS_SEMGET = 255 - SYS_SEMOP = 256 - SYS_MSGCTL = 258 - SYS_MSGGET = 259 - SYS_MSGSND = 260 - SYS_MSGRCV = 261 - SYS_SHMAT = 262 - SYS_SHMCTL = 263 - SYS_SHMDT = 264 - SYS_SHMGET = 265 - SYS_SHM_OPEN = 266 - SYS_SHM_UNLINK = 267 - SYS_SEM_OPEN = 268 - SYS_SEM_CLOSE = 269 - SYS_SEM_UNLINK = 270 - SYS_SEM_WAIT = 271 - SYS_SEM_TRYWAIT = 272 - SYS_SEM_POST = 273 - SYS_SYSCTLBYNAME = 274 - SYS_OPEN_EXTENDED = 277 - SYS_UMASK_EXTENDED = 278 - SYS_STAT_EXTENDED = 279 - SYS_LSTAT_EXTENDED = 280 - SYS_FSTAT_EXTENDED = 281 - SYS_CHMOD_EXTENDED = 282 - SYS_FCHMOD_EXTENDED = 283 - SYS_ACCESS_EXTENDED = 284 - SYS_SETTID = 285 - SYS_GETTID = 286 - SYS_SETSGROUPS = 287 - SYS_GETSGROUPS = 288 - SYS_SETWGROUPS = 289 - SYS_GETWGROUPS = 290 - SYS_MKFIFO_EXTENDED = 291 - SYS_MKDIR_EXTENDED = 292 - SYS_IDENTITYSVC = 293 - SYS_SHARED_REGION_CHECK_NP = 294 - SYS_VM_PRESSURE_MONITOR = 296 - SYS_PSYNCH_RW_LONGRDLOCK = 297 - SYS_PSYNCH_RW_YIELDWRLOCK = 298 - SYS_PSYNCH_RW_DOWNGRADE = 299 - SYS_PSYNCH_RW_UPGRADE = 300 - SYS_PSYNCH_MUTEXWAIT = 301 - SYS_PSYNCH_MUTEXDROP = 302 - SYS_PSYNCH_CVBROAD = 303 - SYS_PSYNCH_CVSIGNAL = 304 - SYS_PSYNCH_CVWAIT = 305 - SYS_PSYNCH_RW_RDLOCK = 306 - SYS_PSYNCH_RW_WRLOCK = 307 - SYS_PSYNCH_RW_UNLOCK = 308 - SYS_PSYNCH_RW_UNLOCK2 = 309 - SYS_GETSID = 310 - SYS_SETTID_WITH_PID = 311 - SYS_PSYNCH_CVCLRPREPOST = 312 - SYS_AIO_FSYNC = 313 - SYS_AIO_RETURN = 314 - SYS_AIO_SUSPEND = 315 - SYS_AIO_CANCEL = 316 - SYS_AIO_ERROR = 317 - SYS_AIO_READ = 318 - SYS_AIO_WRITE = 319 - SYS_LIO_LISTIO = 320 - SYS_IOPOLICYSYS = 322 - SYS_PROCESS_POLICY = 323 - SYS_MLOCKALL = 324 - SYS_MUNLOCKALL = 325 - SYS_ISSETUGID = 327 - SYS___PTHREAD_KILL = 328 - SYS___PTHREAD_SIGMASK = 329 - SYS___SIGWAIT = 330 - SYS___DISABLE_THREADSIGNAL = 331 - SYS___PTHREAD_MARKCANCEL = 332 - SYS___PTHREAD_CANCELED = 333 - SYS___SEMWAIT_SIGNAL = 334 - SYS_PROC_INFO = 336 - SYS_SENDFILE = 337 - SYS_STAT64 = 338 - SYS_FSTAT64 = 339 - SYS_LSTAT64 = 340 - SYS_STAT64_EXTENDED = 341 - SYS_LSTAT64_EXTENDED = 342 - SYS_FSTAT64_EXTENDED = 343 - SYS_GETDIRENTRIES64 = 344 - SYS_STATFS64 = 345 - SYS_FSTATFS64 = 346 - SYS_GETFSSTAT64 = 347 - SYS___PTHREAD_CHDIR = 348 - SYS___PTHREAD_FCHDIR = 349 - SYS_AUDIT = 350 - SYS_AUDITON = 351 - SYS_GETAUID = 353 - SYS_SETAUID = 354 - SYS_GETAUDIT_ADDR = 357 - SYS_SETAUDIT_ADDR = 358 - SYS_AUDITCTL = 359 - SYS_BSDTHREAD_CREATE = 360 - SYS_BSDTHREAD_TERMINATE = 361 - SYS_KQUEUE = 362 - SYS_KEVENT = 363 - SYS_LCHOWN = 364 - SYS_BSDTHREAD_REGISTER = 366 - SYS_WORKQ_OPEN = 367 - SYS_WORKQ_KERNRETURN = 368 - SYS_KEVENT64 = 369 - SYS___OLD_SEMWAIT_SIGNAL = 370 - SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 - SYS_THREAD_SELFID = 372 - SYS_LEDGER = 373 - SYS_KEVENT_QOS = 374 - SYS_KEVENT_ID = 375 - SYS___MAC_EXECVE = 380 - SYS___MAC_SYSCALL = 381 - SYS___MAC_GET_FILE = 382 - SYS___MAC_SET_FILE = 383 - SYS___MAC_GET_LINK = 384 - SYS___MAC_SET_LINK = 385 - SYS___MAC_GET_PROC = 386 - SYS___MAC_SET_PROC = 387 - SYS___MAC_GET_FD = 388 - SYS___MAC_SET_FD = 389 - SYS___MAC_GET_PID = 390 - SYS_PSELECT = 394 - SYS_PSELECT_NOCANCEL = 395 - SYS_READ_NOCANCEL = 396 - SYS_WRITE_NOCANCEL = 397 - SYS_OPEN_NOCANCEL = 398 - SYS_CLOSE_NOCANCEL = 399 - SYS_WAIT4_NOCANCEL = 400 - SYS_RECVMSG_NOCANCEL = 401 - SYS_SENDMSG_NOCANCEL = 402 - SYS_RECVFROM_NOCANCEL = 403 - SYS_ACCEPT_NOCANCEL = 404 - SYS_MSYNC_NOCANCEL = 405 - SYS_FCNTL_NOCANCEL = 406 - SYS_SELECT_NOCANCEL = 407 - SYS_FSYNC_NOCANCEL = 408 - SYS_CONNECT_NOCANCEL = 409 - SYS_SIGSUSPEND_NOCANCEL = 410 - SYS_READV_NOCANCEL = 411 - SYS_WRITEV_NOCANCEL = 412 - SYS_SENDTO_NOCANCEL = 413 - SYS_PREAD_NOCANCEL = 414 - SYS_PWRITE_NOCANCEL = 415 - SYS_WAITID_NOCANCEL = 416 - SYS_POLL_NOCANCEL = 417 - SYS_MSGSND_NOCANCEL = 418 - SYS_MSGRCV_NOCANCEL = 419 - SYS_SEM_WAIT_NOCANCEL = 420 - SYS_AIO_SUSPEND_NOCANCEL = 421 - SYS___SIGWAIT_NOCANCEL = 422 - SYS___SEMWAIT_SIGNAL_NOCANCEL = 423 - SYS___MAC_MOUNT = 424 - SYS___MAC_GET_MOUNT = 425 - SYS___MAC_GETFSSTAT = 426 - SYS_FSGETPATH = 427 - SYS_AUDIT_SESSION_SELF = 428 - SYS_AUDIT_SESSION_JOIN = 429 - SYS_FILEPORT_MAKEPORT = 430 - SYS_FILEPORT_MAKEFD = 431 - SYS_AUDIT_SESSION_PORT = 432 - SYS_PID_SUSPEND = 433 - SYS_PID_RESUME = 434 - SYS_PID_HIBERNATE = 435 - SYS_PID_SHUTDOWN_SOCKETS = 436 - SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438 - SYS_KAS_INFO = 439 - SYS_MEMORYSTATUS_CONTROL = 440 - SYS_GUARDED_OPEN_NP = 441 - SYS_GUARDED_CLOSE_NP = 442 - SYS_GUARDED_KQUEUE_NP = 443 - SYS_CHANGE_FDGUARD_NP = 444 - SYS_USRCTL = 445 - SYS_PROC_RLIMIT_CONTROL = 446 - SYS_CONNECTX = 447 - SYS_DISCONNECTX = 448 - SYS_PEELOFF = 449 - SYS_SOCKET_DELEGATE = 450 - SYS_TELEMETRY = 451 - SYS_PROC_UUID_POLICY = 452 - SYS_MEMORYSTATUS_GET_LEVEL = 453 - SYS_SYSTEM_OVERRIDE = 454 - SYS_VFS_PURGE = 455 - SYS_SFI_CTL = 456 - SYS_SFI_PIDCTL = 457 - SYS_COALITION = 458 - SYS_COALITION_INFO = 459 - SYS_NECP_MATCH_POLICY = 460 - SYS_GETATTRLISTBULK = 461 - SYS_CLONEFILEAT = 462 - SYS_OPENAT = 463 - SYS_OPENAT_NOCANCEL = 464 - SYS_RENAMEAT = 465 - SYS_FACCESSAT = 466 - SYS_FCHMODAT = 467 - SYS_FCHOWNAT = 468 - SYS_FSTATAT = 469 - SYS_FSTATAT64 = 470 - SYS_LINKAT = 471 - SYS_UNLINKAT = 472 - SYS_READLINKAT = 473 - SYS_SYMLINKAT = 474 - SYS_MKDIRAT = 475 - SYS_GETATTRLISTAT = 476 - SYS_PROC_TRACE_LOG = 477 - SYS_BSDTHREAD_CTL = 478 - SYS_OPENBYID_NP = 479 - SYS_RECVMSG_X = 480 - SYS_SENDMSG_X = 481 - SYS_THREAD_SELFUSAGE = 482 - SYS_CSRCTL = 483 - SYS_GUARDED_OPEN_DPROTECTED_NP = 484 - SYS_GUARDED_WRITE_NP = 485 - SYS_GUARDED_PWRITE_NP = 486 - SYS_GUARDED_WRITEV_NP = 487 - SYS_RENAMEATX_NP = 488 - SYS_MREMAP_ENCRYPTED = 489 - SYS_NETAGENT_TRIGGER = 490 - SYS_STACK_SNAPSHOT_WITH_CONFIG = 491 - SYS_MICROSTACKSHOT = 492 - SYS_GRAB_PGO_DATA = 493 - SYS_PERSONA = 494 - SYS_WORK_INTERVAL_CTL = 499 - SYS_GETENTROPY = 500 - SYS_NECP_OPEN = 501 - SYS_NECP_CLIENT_ACTION = 502 - SYS___NEXUS_OPEN = 503 - SYS___NEXUS_REGISTER = 504 - SYS___NEXUS_DEREGISTER = 505 - SYS___NEXUS_CREATE = 506 - SYS___NEXUS_DESTROY = 507 - SYS___NEXUS_GET_OPT = 508 - SYS___NEXUS_SET_OPT = 509 - SYS___CHANNEL_OPEN = 510 - SYS___CHANNEL_GET_INFO = 511 - SYS___CHANNEL_SYNC = 512 - SYS___CHANNEL_GET_OPT = 513 - SYS___CHANNEL_SET_OPT = 514 - SYS_ULOCK_WAIT = 515 - SYS_ULOCK_WAKE = 516 - SYS_FCLONEFILEAT = 517 - SYS_FS_SNAPSHOT = 518 - SYS_TERMINATE_WITH_PAYLOAD = 520 - SYS_ABORT_WITH_PAYLOAD = 521 - SYS_NECP_SESSION_OPEN = 522 - SYS_NECP_SESSION_ACTION = 523 - SYS_SETATTRLISTAT = 524 - SYS_NET_QOS_GUIDELINE = 525 - SYS_FMOUNT = 526 - SYS_NTP_ADJTIME = 527 - SYS_NTP_GETTIME = 528 - SYS_OS_FAULT_WITH_PAYLOAD = 529 - SYS_KQUEUE_WORKLOOP_CTL = 530 - SYS___MACH_BRIDGE_REMOTE_TIME = 531 - SYS_MAXSYSCALL = 532 - SYS_INVALID = 63 -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go deleted file mode 100644 index 5eb433b..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go +++ /dev/null @@ -1,438 +0,0 @@ -// go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.1.sdk/usr/include/sys/syscall.h -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm64 && darwin -// +build arm64,darwin - -package unix - -// Deprecated: Use libSystem wrappers instead of direct syscalls. -const ( - SYS_SYSCALL = 0 - SYS_EXIT = 1 - SYS_FORK = 2 - SYS_READ = 3 - SYS_WRITE = 4 - SYS_OPEN = 5 - SYS_CLOSE = 6 - SYS_WAIT4 = 7 - SYS_LINK = 9 - SYS_UNLINK = 10 - SYS_CHDIR = 12 - SYS_FCHDIR = 13 - SYS_MKNOD = 14 - SYS_CHMOD = 15 - SYS_CHOWN = 16 - SYS_GETFSSTAT = 18 - SYS_GETPID = 20 - SYS_SETUID = 23 - SYS_GETUID = 24 - SYS_GETEUID = 25 - SYS_PTRACE = 26 - SYS_RECVMSG = 27 - SYS_SENDMSG = 28 - SYS_RECVFROM = 29 - SYS_ACCEPT = 30 - SYS_GETPEERNAME = 31 - SYS_GETSOCKNAME = 32 - SYS_ACCESS = 33 - SYS_CHFLAGS = 34 - SYS_FCHFLAGS = 35 - SYS_SYNC = 36 - SYS_KILL = 37 - SYS_GETPPID = 39 - SYS_DUP = 41 - SYS_PIPE = 42 - SYS_GETEGID = 43 - SYS_SIGACTION = 46 - SYS_GETGID = 47 - SYS_SIGPROCMASK = 48 - SYS_GETLOGIN = 49 - SYS_SETLOGIN = 50 - SYS_ACCT = 51 - SYS_SIGPENDING = 52 - SYS_SIGALTSTACK = 53 - SYS_IOCTL = 54 - SYS_REBOOT = 55 - SYS_REVOKE = 56 - SYS_SYMLINK = 57 - SYS_READLINK = 58 - SYS_EXECVE = 59 - SYS_UMASK = 60 - SYS_CHROOT = 61 - SYS_MSYNC = 65 - SYS_VFORK = 66 - SYS_MUNMAP = 73 - SYS_MPROTECT = 74 - SYS_MADVISE = 75 - SYS_MINCORE = 78 - SYS_GETGROUPS = 79 - SYS_SETGROUPS = 80 - SYS_GETPGRP = 81 - SYS_SETPGID = 82 - SYS_SETITIMER = 83 - SYS_SWAPON = 85 - SYS_GETITIMER = 86 - SYS_GETDTABLESIZE = 89 - SYS_DUP2 = 90 - SYS_FCNTL = 92 - SYS_SELECT = 93 - SYS_FSYNC = 95 - SYS_SETPRIORITY = 96 - SYS_SOCKET = 97 - SYS_CONNECT = 98 - SYS_GETPRIORITY = 100 - SYS_BIND = 104 - SYS_SETSOCKOPT = 105 - SYS_LISTEN = 106 - SYS_SIGSUSPEND = 111 - SYS_GETTIMEOFDAY = 116 - SYS_GETRUSAGE = 117 - SYS_GETSOCKOPT = 118 - SYS_READV = 120 - SYS_WRITEV = 121 - SYS_SETTIMEOFDAY = 122 - SYS_FCHOWN = 123 - SYS_FCHMOD = 124 - SYS_SETREUID = 126 - SYS_SETREGID = 127 - SYS_RENAME = 128 - SYS_FLOCK = 131 - SYS_MKFIFO = 132 - SYS_SENDTO = 133 - SYS_SHUTDOWN = 134 - SYS_SOCKETPAIR = 135 - SYS_MKDIR = 136 - SYS_RMDIR = 137 - SYS_UTIMES = 138 - SYS_FUTIMES = 139 - SYS_ADJTIME = 140 - SYS_GETHOSTUUID = 142 - SYS_SETSID = 147 - SYS_GETPGID = 151 - SYS_SETPRIVEXEC = 152 - SYS_PREAD = 153 - SYS_PWRITE = 154 - SYS_NFSSVC = 155 - SYS_STATFS = 157 - SYS_FSTATFS = 158 - SYS_UNMOUNT = 159 - SYS_GETFH = 161 - SYS_QUOTACTL = 165 - SYS_MOUNT = 167 - SYS_CSOPS = 169 - SYS_CSOPS_AUDITTOKEN = 170 - SYS_WAITID = 173 - SYS_KDEBUG_TYPEFILTER = 177 - SYS_KDEBUG_TRACE_STRING = 178 - SYS_KDEBUG_TRACE64 = 179 - SYS_KDEBUG_TRACE = 180 - SYS_SETGID = 181 - SYS_SETEGID = 182 - SYS_SETEUID = 183 - SYS_SIGRETURN = 184 - SYS_THREAD_SELFCOUNTS = 186 - SYS_FDATASYNC = 187 - SYS_STAT = 188 - SYS_FSTAT = 189 - SYS_LSTAT = 190 - SYS_PATHCONF = 191 - SYS_FPATHCONF = 192 - SYS_GETRLIMIT = 194 - SYS_SETRLIMIT = 195 - SYS_GETDIRENTRIES = 196 - SYS_MMAP = 197 - SYS_LSEEK = 199 - SYS_TRUNCATE = 200 - SYS_FTRUNCATE = 201 - SYS_SYSCTL = 202 - SYS_MLOCK = 203 - SYS_MUNLOCK = 204 - SYS_UNDELETE = 205 - SYS_OPEN_DPROTECTED_NP = 216 - SYS_GETATTRLIST = 220 - SYS_SETATTRLIST = 221 - SYS_GETDIRENTRIESATTR = 222 - SYS_EXCHANGEDATA = 223 - SYS_SEARCHFS = 225 - SYS_DELETE = 226 - SYS_COPYFILE = 227 - SYS_FGETATTRLIST = 228 - SYS_FSETATTRLIST = 229 - SYS_POLL = 230 - SYS_WATCHEVENT = 231 - SYS_WAITEVENT = 232 - SYS_MODWATCH = 233 - SYS_GETXATTR = 234 - SYS_FGETXATTR = 235 - SYS_SETXATTR = 236 - SYS_FSETXATTR = 237 - SYS_REMOVEXATTR = 238 - SYS_FREMOVEXATTR = 239 - SYS_LISTXATTR = 240 - SYS_FLISTXATTR = 241 - SYS_FSCTL = 242 - SYS_INITGROUPS = 243 - SYS_POSIX_SPAWN = 244 - SYS_FFSCTL = 245 - SYS_NFSCLNT = 247 - SYS_FHOPEN = 248 - SYS_MINHERIT = 250 - SYS_SEMSYS = 251 - SYS_MSGSYS = 252 - SYS_SHMSYS = 253 - SYS_SEMCTL = 254 - SYS_SEMGET = 255 - SYS_SEMOP = 256 - SYS_MSGCTL = 258 - SYS_MSGGET = 259 - SYS_MSGSND = 260 - SYS_MSGRCV = 261 - SYS_SHMAT = 262 - SYS_SHMCTL = 263 - SYS_SHMDT = 264 - SYS_SHMGET = 265 - SYS_SHM_OPEN = 266 - SYS_SHM_UNLINK = 267 - SYS_SEM_OPEN = 268 - SYS_SEM_CLOSE = 269 - SYS_SEM_UNLINK = 270 - SYS_SEM_WAIT = 271 - SYS_SEM_TRYWAIT = 272 - SYS_SEM_POST = 273 - SYS_SYSCTLBYNAME = 274 - SYS_OPEN_EXTENDED = 277 - SYS_UMASK_EXTENDED = 278 - SYS_STAT_EXTENDED = 279 - SYS_LSTAT_EXTENDED = 280 - SYS_FSTAT_EXTENDED = 281 - SYS_CHMOD_EXTENDED = 282 - SYS_FCHMOD_EXTENDED = 283 - SYS_ACCESS_EXTENDED = 284 - SYS_SETTID = 285 - SYS_GETTID = 286 - SYS_SETSGROUPS = 287 - SYS_GETSGROUPS = 288 - SYS_SETWGROUPS = 289 - SYS_GETWGROUPS = 290 - SYS_MKFIFO_EXTENDED = 291 - SYS_MKDIR_EXTENDED = 292 - SYS_IDENTITYSVC = 293 - SYS_SHARED_REGION_CHECK_NP = 294 - SYS_VM_PRESSURE_MONITOR = 296 - SYS_PSYNCH_RW_LONGRDLOCK = 297 - SYS_PSYNCH_RW_YIELDWRLOCK = 298 - SYS_PSYNCH_RW_DOWNGRADE = 299 - SYS_PSYNCH_RW_UPGRADE = 300 - SYS_PSYNCH_MUTEXWAIT = 301 - SYS_PSYNCH_MUTEXDROP = 302 - SYS_PSYNCH_CVBROAD = 303 - SYS_PSYNCH_CVSIGNAL = 304 - SYS_PSYNCH_CVWAIT = 305 - SYS_PSYNCH_RW_RDLOCK = 306 - SYS_PSYNCH_RW_WRLOCK = 307 - SYS_PSYNCH_RW_UNLOCK = 308 - SYS_PSYNCH_RW_UNLOCK2 = 309 - SYS_GETSID = 310 - SYS_SETTID_WITH_PID = 311 - SYS_PSYNCH_CVCLRPREPOST = 312 - SYS_AIO_FSYNC = 313 - SYS_AIO_RETURN = 314 - SYS_AIO_SUSPEND = 315 - SYS_AIO_CANCEL = 316 - SYS_AIO_ERROR = 317 - SYS_AIO_READ = 318 - SYS_AIO_WRITE = 319 - SYS_LIO_LISTIO = 320 - SYS_IOPOLICYSYS = 322 - SYS_PROCESS_POLICY = 323 - SYS_MLOCKALL = 324 - SYS_MUNLOCKALL = 325 - SYS_ISSETUGID = 327 - SYS___PTHREAD_KILL = 328 - SYS___PTHREAD_SIGMASK = 329 - SYS___SIGWAIT = 330 - SYS___DISABLE_THREADSIGNAL = 331 - SYS___PTHREAD_MARKCANCEL = 332 - SYS___PTHREAD_CANCELED = 333 - SYS___SEMWAIT_SIGNAL = 334 - SYS_PROC_INFO = 336 - SYS_SENDFILE = 337 - SYS_STAT64 = 338 - SYS_FSTAT64 = 339 - SYS_LSTAT64 = 340 - SYS_STAT64_EXTENDED = 341 - SYS_LSTAT64_EXTENDED = 342 - SYS_FSTAT64_EXTENDED = 343 - SYS_GETDIRENTRIES64 = 344 - SYS_STATFS64 = 345 - SYS_FSTATFS64 = 346 - SYS_GETFSSTAT64 = 347 - SYS___PTHREAD_CHDIR = 348 - SYS___PTHREAD_FCHDIR = 349 - SYS_AUDIT = 350 - SYS_AUDITON = 351 - SYS_GETAUID = 353 - SYS_SETAUID = 354 - SYS_GETAUDIT_ADDR = 357 - SYS_SETAUDIT_ADDR = 358 - SYS_AUDITCTL = 359 - SYS_BSDTHREAD_CREATE = 360 - SYS_BSDTHREAD_TERMINATE = 361 - SYS_KQUEUE = 362 - SYS_KEVENT = 363 - SYS_LCHOWN = 364 - SYS_BSDTHREAD_REGISTER = 366 - SYS_WORKQ_OPEN = 367 - SYS_WORKQ_KERNRETURN = 368 - SYS_KEVENT64 = 369 - SYS___OLD_SEMWAIT_SIGNAL = 370 - SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 - SYS_THREAD_SELFID = 372 - SYS_LEDGER = 373 - SYS_KEVENT_QOS = 374 - SYS_KEVENT_ID = 375 - SYS___MAC_EXECVE = 380 - SYS___MAC_SYSCALL = 381 - SYS___MAC_GET_FILE = 382 - SYS___MAC_SET_FILE = 383 - SYS___MAC_GET_LINK = 384 - SYS___MAC_SET_LINK = 385 - SYS___MAC_GET_PROC = 386 - SYS___MAC_SET_PROC = 387 - SYS___MAC_GET_FD = 388 - SYS___MAC_SET_FD = 389 - SYS___MAC_GET_PID = 390 - SYS_PSELECT = 394 - SYS_PSELECT_NOCANCEL = 395 - SYS_READ_NOCANCEL = 396 - SYS_WRITE_NOCANCEL = 397 - SYS_OPEN_NOCANCEL = 398 - SYS_CLOSE_NOCANCEL = 399 - SYS_WAIT4_NOCANCEL = 400 - SYS_RECVMSG_NOCANCEL = 401 - SYS_SENDMSG_NOCANCEL = 402 - SYS_RECVFROM_NOCANCEL = 403 - SYS_ACCEPT_NOCANCEL = 404 - SYS_MSYNC_NOCANCEL = 405 - SYS_FCNTL_NOCANCEL = 406 - SYS_SELECT_NOCANCEL = 407 - SYS_FSYNC_NOCANCEL = 408 - SYS_CONNECT_NOCANCEL = 409 - SYS_SIGSUSPEND_NOCANCEL = 410 - SYS_READV_NOCANCEL = 411 - SYS_WRITEV_NOCANCEL = 412 - SYS_SENDTO_NOCANCEL = 413 - SYS_PREAD_NOCANCEL = 414 - SYS_PWRITE_NOCANCEL = 415 - SYS_WAITID_NOCANCEL = 416 - SYS_POLL_NOCANCEL = 417 - SYS_MSGSND_NOCANCEL = 418 - SYS_MSGRCV_NOCANCEL = 419 - SYS_SEM_WAIT_NOCANCEL = 420 - SYS_AIO_SUSPEND_NOCANCEL = 421 - SYS___SIGWAIT_NOCANCEL = 422 - SYS___SEMWAIT_SIGNAL_NOCANCEL = 423 - SYS___MAC_MOUNT = 424 - SYS___MAC_GET_MOUNT = 425 - SYS___MAC_GETFSSTAT = 426 - SYS_FSGETPATH = 427 - SYS_AUDIT_SESSION_SELF = 428 - SYS_AUDIT_SESSION_JOIN = 429 - SYS_FILEPORT_MAKEPORT = 430 - SYS_FILEPORT_MAKEFD = 431 - SYS_AUDIT_SESSION_PORT = 432 - SYS_PID_SUSPEND = 433 - SYS_PID_RESUME = 434 - SYS_PID_HIBERNATE = 435 - SYS_PID_SHUTDOWN_SOCKETS = 436 - SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438 - SYS_KAS_INFO = 439 - SYS_MEMORYSTATUS_CONTROL = 440 - SYS_GUARDED_OPEN_NP = 441 - SYS_GUARDED_CLOSE_NP = 442 - SYS_GUARDED_KQUEUE_NP = 443 - SYS_CHANGE_FDGUARD_NP = 444 - SYS_USRCTL = 445 - SYS_PROC_RLIMIT_CONTROL = 446 - SYS_CONNECTX = 447 - SYS_DISCONNECTX = 448 - SYS_PEELOFF = 449 - SYS_SOCKET_DELEGATE = 450 - SYS_TELEMETRY = 451 - SYS_PROC_UUID_POLICY = 452 - SYS_MEMORYSTATUS_GET_LEVEL = 453 - SYS_SYSTEM_OVERRIDE = 454 - SYS_VFS_PURGE = 455 - SYS_SFI_CTL = 456 - SYS_SFI_PIDCTL = 457 - SYS_COALITION = 458 - SYS_COALITION_INFO = 459 - SYS_NECP_MATCH_POLICY = 460 - SYS_GETATTRLISTBULK = 461 - SYS_CLONEFILEAT = 462 - SYS_OPENAT = 463 - SYS_OPENAT_NOCANCEL = 464 - SYS_RENAMEAT = 465 - SYS_FACCESSAT = 466 - SYS_FCHMODAT = 467 - SYS_FCHOWNAT = 468 - SYS_FSTATAT = 469 - SYS_FSTATAT64 = 470 - SYS_LINKAT = 471 - SYS_UNLINKAT = 472 - SYS_READLINKAT = 473 - SYS_SYMLINKAT = 474 - SYS_MKDIRAT = 475 - SYS_GETATTRLISTAT = 476 - SYS_PROC_TRACE_LOG = 477 - SYS_BSDTHREAD_CTL = 478 - SYS_OPENBYID_NP = 479 - SYS_RECVMSG_X = 480 - SYS_SENDMSG_X = 481 - SYS_THREAD_SELFUSAGE = 482 - SYS_CSRCTL = 483 - SYS_GUARDED_OPEN_DPROTECTED_NP = 484 - SYS_GUARDED_WRITE_NP = 485 - SYS_GUARDED_PWRITE_NP = 486 - SYS_GUARDED_WRITEV_NP = 487 - SYS_RENAMEATX_NP = 488 - SYS_MREMAP_ENCRYPTED = 489 - SYS_NETAGENT_TRIGGER = 490 - SYS_STACK_SNAPSHOT_WITH_CONFIG = 491 - SYS_MICROSTACKSHOT = 492 - SYS_GRAB_PGO_DATA = 493 - SYS_PERSONA = 494 - SYS_WORK_INTERVAL_CTL = 499 - SYS_GETENTROPY = 500 - SYS_NECP_OPEN = 501 - SYS_NECP_CLIENT_ACTION = 502 - SYS___NEXUS_OPEN = 503 - SYS___NEXUS_REGISTER = 504 - SYS___NEXUS_DEREGISTER = 505 - SYS___NEXUS_CREATE = 506 - SYS___NEXUS_DESTROY = 507 - SYS___NEXUS_GET_OPT = 508 - SYS___NEXUS_SET_OPT = 509 - SYS___CHANNEL_OPEN = 510 - SYS___CHANNEL_GET_INFO = 511 - SYS___CHANNEL_SYNC = 512 - SYS___CHANNEL_GET_OPT = 513 - SYS___CHANNEL_SET_OPT = 514 - SYS_ULOCK_WAIT = 515 - SYS_ULOCK_WAKE = 516 - SYS_FCLONEFILEAT = 517 - SYS_FS_SNAPSHOT = 518 - SYS_TERMINATE_WITH_PAYLOAD = 520 - SYS_ABORT_WITH_PAYLOAD = 521 - SYS_NECP_SESSION_OPEN = 522 - SYS_NECP_SESSION_ACTION = 523 - SYS_SETATTRLISTAT = 524 - SYS_NET_QOS_GUIDELINE = 525 - SYS_FMOUNT = 526 - SYS_NTP_ADJTIME = 527 - SYS_NTP_GETTIME = 528 - SYS_OS_FAULT_WITH_PAYLOAD = 529 - SYS_MAXSYSCALL = 530 - SYS_INVALID = 63 -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go deleted file mode 100644 index 703675c..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go +++ /dev/null @@ -1,317 +0,0 @@ -// go run mksysnum.go https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build amd64 && dragonfly -// +build amd64,dragonfly - -package unix - -const ( - SYS_EXIT = 1 // { void exit(int rval); } - SYS_FORK = 2 // { int fork(void); } - SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); } - SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); } - SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } - SYS_CLOSE = 6 // { int close(int fd); } - SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); } wait4 wait_args int - // SYS_NOSYS = 8; // { int nosys(void); } __nosys nosys_args int - SYS_LINK = 9 // { int link(char *path, char *link); } - SYS_UNLINK = 10 // { int unlink(char *path); } - SYS_CHDIR = 12 // { int chdir(char *path); } - SYS_FCHDIR = 13 // { int fchdir(int fd); } - SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } - SYS_CHMOD = 15 // { int chmod(char *path, int mode); } - SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } - SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int - SYS_GETFSSTAT = 18 // { int getfsstat(struct statfs *buf, long bufsize, int flags); } - SYS_GETPID = 20 // { pid_t getpid(void); } - SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); } - SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } - SYS_SETUID = 23 // { int setuid(uid_t uid); } - SYS_GETUID = 24 // { uid_t getuid(void); } - SYS_GETEUID = 25 // { uid_t geteuid(void); } - SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, int data); } - SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); } - SYS_SENDMSG = 28 // { int sendmsg(int s, caddr_t msg, int flags); } - SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, int flags, caddr_t from, int *fromlenaddr); } - SYS_ACCEPT = 30 // { int accept(int s, caddr_t name, int *anamelen); } - SYS_GETPEERNAME = 31 // { int getpeername(int fdes, caddr_t asa, int *alen); } - SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, caddr_t asa, int *alen); } - SYS_ACCESS = 33 // { int access(char *path, int flags); } - SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } - SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } - SYS_SYNC = 36 // { int sync(void); } - SYS_KILL = 37 // { int kill(int pid, int signum); } - SYS_GETPPID = 39 // { pid_t getppid(void); } - SYS_DUP = 41 // { int dup(int fd); } - SYS_PIPE = 42 // { int pipe(void); } - SYS_GETEGID = 43 // { gid_t getegid(void); } - SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, u_long offset, u_int scale); } - SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); } - SYS_GETGID = 47 // { gid_t getgid(void); } - SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, size_t namelen); } - SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } - SYS_ACCT = 51 // { int acct(char *path); } - SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); } - SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); } - SYS_REBOOT = 55 // { int reboot(int opt); } - SYS_REVOKE = 56 // { int revoke(char *path); } - SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } - SYS_READLINK = 58 // { int readlink(char *path, char *buf, int count); } - SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); } - SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args int - SYS_CHROOT = 61 // { int chroot(char *path); } - SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); } - SYS_VFORK = 66 // { pid_t vfork(void); } - SYS_SBRK = 69 // { caddr_t sbrk(size_t incr); } - SYS_SSTK = 70 // { int sstk(size_t incr); } - SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } - SYS_MPROTECT = 74 // { int mprotect(void *addr, size_t len, int prot); } - SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); } - SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); } - SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); } - SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); } - SYS_GETPGRP = 81 // { int getpgrp(void); } - SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } - SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); } - SYS_SWAPON = 85 // { int swapon(char *name); } - SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); } - SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } - SYS_DUP2 = 90 // { int dup2(int from, int to); } - SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } - SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } - SYS_FSYNC = 95 // { int fsync(int fd); } - SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); } - SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); } - SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); } - SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } - SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); } - SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); } - SYS_LISTEN = 106 // { int listen(int s, int backlog); } - SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); } - SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); } - SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); } - SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); } - SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); } - SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); } - SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } - SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } - SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } - SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } - SYS_RENAME = 128 // { int rename(char *from, char *to); } - SYS_FLOCK = 131 // { int flock(int fd, int how); } - SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } - SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); } - SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } - SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); } - SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } - SYS_RMDIR = 137 // { int rmdir(char *path); } - SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); } - SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); } - SYS_SETSID = 147 // { int setsid(void); } - SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); } - SYS_STATFS = 157 // { int statfs(char *path, struct statfs *buf); } - SYS_FSTATFS = 158 // { int fstatfs(int fd, struct statfs *buf); } - SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); } - SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } - SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); } - SYS_EXTPREAD = 173 // { ssize_t extpread(int fd, void *buf, size_t nbyte, int flags, off_t offset); } - SYS_EXTPWRITE = 174 // { ssize_t extpwrite(int fd, const void *buf, size_t nbyte, int flags, off_t offset); } - SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } - SYS_SETGID = 181 // { int setgid(gid_t gid); } - SYS_SETEGID = 182 // { int setegid(gid_t egid); } - SYS_SETEUID = 183 // { int seteuid(uid_t euid); } - SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } - SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } - SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int - SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int - SYS_MMAP = 197 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, int pad, off_t pos); } - SYS_LSEEK = 199 // { off_t lseek(int fd, int pad, off_t offset, int whence); } - SYS_TRUNCATE = 200 // { int truncate(char *path, int pad, off_t length); } - SYS_FTRUNCATE = 201 // { int ftruncate(int fd, int pad, off_t length); } - SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int - SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } - SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } - SYS_UNDELETE = 205 // { int undelete(char *path); } - SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } - SYS_GETPGID = 207 // { int getpgid(pid_t pid); } - SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); } - SYS___SEMCTL = 220 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); } - SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); } - SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, u_int nsops); } - SYS_MSGCTL = 224 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); } - SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); } - SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } - SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } - SYS_SHMAT = 228 // { caddr_t shmat(int shmid, const void *shmaddr, int shmflg); } - SYS_SHMCTL = 229 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); } - SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); } - SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); } - SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); } - SYS_CLOCK_SETTIME = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); } - SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); } - SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } - SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); } - SYS_RFORK = 251 // { int rfork(int flags); } - SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); } - SYS_ISSETUGID = 253 // { int issetugid(void); } - SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } - SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } - SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); } - SYS_EXTPREADV = 289 // { ssize_t extpreadv(int fd, const struct iovec *iovp, int iovcnt, int flags, off_t offset); } - SYS_EXTPWRITEV = 290 // { ssize_t extpwritev(int fd, const struct iovec *iovp, int iovcnt, int flags, off_t offset); } - SYS_FHSTATFS = 297 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } - SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); } - SYS_MODNEXT = 300 // { int modnext(int modid); } - SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat* stat); } - SYS_MODFNEXT = 302 // { int modfnext(int modid); } - SYS_MODFIND = 303 // { int modfind(const char *name); } - SYS_KLDLOAD = 304 // { int kldload(const char *file); } - SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } - SYS_KLDFIND = 306 // { int kldfind(const char *file); } - SYS_KLDNEXT = 307 // { int kldnext(int fileid); } - SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); } - SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } - SYS_GETSID = 310 // { int getsid(pid_t pid); } - SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); } - SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); } - SYS_AIO_RETURN = 314 // { int aio_return(struct aiocb *aiocbp); } - SYS_AIO_SUSPEND = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } - SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); } - SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); } - SYS_AIO_READ = 318 // { int aio_read(struct aiocb *aiocbp); } - SYS_AIO_WRITE = 319 // { int aio_write(struct aiocb *aiocbp); } - SYS_LIO_LISTIO = 320 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); } - SYS_YIELD = 321 // { int yield(void); } - SYS_MLOCKALL = 324 // { int mlockall(int how); } - SYS_MUNLOCKALL = 325 // { int munlockall(void); } - SYS___GETCWD = 326 // { int __getcwd(u_char *buf, u_int buflen); } - SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); } - SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); } - SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); } - SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } - SYS_SCHED_YIELD = 331 // { int sched_yield (void); } - SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } - SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } - SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); } - SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } - SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); } - SYS_JAIL = 338 // { int jail(struct jail *jail); } - SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); } - SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } - SYS_SIGACTION = 342 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); } - SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } - SYS_SIGRETURN = 344 // { int sigreturn(ucontext_t *sigcntxp); } - SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set,siginfo_t *info, const struct timespec *timeout); } - SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set,siginfo_t *info); } - SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); } - SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); } - SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, acl_type_t type); } - SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); } - SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); } - SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } - SYS_EXTATTR_SET_FILE = 356 // { int extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_FILE = 357 // { int extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } - SYS_AIO_WAITCOMPLETE = 359 // { int aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); } - SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } - SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } - SYS_KQUEUE = 362 // { int kqueue(void); } - SYS_KEVENT = 363 // { int kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } - SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); } - SYS_LCHFLAGS = 391 // { int lchflags(const char *path, u_long flags); } - SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); } - SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); } - SYS_VARSYM_SET = 450 // { int varsym_set(int level, const char *name, const char *data); } - SYS_VARSYM_GET = 451 // { int varsym_get(int mask, const char *wild, char *buf, int bufsize); } - SYS_VARSYM_LIST = 452 // { int varsym_list(int level, char *buf, int maxsize, int *marker); } - SYS_EXEC_SYS_REGISTER = 465 // { int exec_sys_register(void *entry); } - SYS_EXEC_SYS_UNREGISTER = 466 // { int exec_sys_unregister(int id); } - SYS_SYS_CHECKPOINT = 467 // { int sys_checkpoint(int type, int fd, pid_t pid, int retval); } - SYS_MOUNTCTL = 468 // { int mountctl(const char *path, int op, int fd, const void *ctl, int ctllen, void *buf, int buflen); } - SYS_UMTX_SLEEP = 469 // { int umtx_sleep(volatile const int *ptr, int value, int timeout); } - SYS_UMTX_WAKEUP = 470 // { int umtx_wakeup(volatile const int *ptr, int count); } - SYS_JAIL_ATTACH = 471 // { int jail_attach(int jid); } - SYS_SET_TLS_AREA = 472 // { int set_tls_area(int which, struct tls_info *info, size_t infosize); } - SYS_GET_TLS_AREA = 473 // { int get_tls_area(int which, struct tls_info *info, size_t infosize); } - SYS_CLOSEFROM = 474 // { int closefrom(int fd); } - SYS_STAT = 475 // { int stat(const char *path, struct stat *ub); } - SYS_FSTAT = 476 // { int fstat(int fd, struct stat *sb); } - SYS_LSTAT = 477 // { int lstat(const char *path, struct stat *ub); } - SYS_FHSTAT = 478 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } - SYS_GETDIRENTRIES = 479 // { int getdirentries(int fd, char *buf, u_int count, long *basep); } - SYS_GETDENTS = 480 // { int getdents(int fd, char *buf, size_t count); } - SYS_USCHED_SET = 481 // { int usched_set(pid_t pid, int cmd, void *data, int bytes); } - SYS_EXTACCEPT = 482 // { int extaccept(int s, int flags, caddr_t name, int *anamelen); } - SYS_EXTCONNECT = 483 // { int extconnect(int s, int flags, caddr_t name, int namelen); } - SYS_MCONTROL = 485 // { int mcontrol(void *addr, size_t len, int behav, off_t value); } - SYS_VMSPACE_CREATE = 486 // { int vmspace_create(void *id, int type, void *data); } - SYS_VMSPACE_DESTROY = 487 // { int vmspace_destroy(void *id); } - SYS_VMSPACE_CTL = 488 // { int vmspace_ctl(void *id, int cmd, struct trapframe *tframe, struct vextframe *vframe); } - SYS_VMSPACE_MMAP = 489 // { int vmspace_mmap(void *id, void *addr, size_t len, int prot, int flags, int fd, off_t offset); } - SYS_VMSPACE_MUNMAP = 490 // { int vmspace_munmap(void *id, void *addr, size_t len); } - SYS_VMSPACE_MCONTROL = 491 // { int vmspace_mcontrol(void *id, void *addr, size_t len, int behav, off_t value); } - SYS_VMSPACE_PREAD = 492 // { ssize_t vmspace_pread(void *id, void *buf, size_t nbyte, int flags, off_t offset); } - SYS_VMSPACE_PWRITE = 493 // { ssize_t vmspace_pwrite(void *id, const void *buf, size_t nbyte, int flags, off_t offset); } - SYS_EXTEXIT = 494 // { void extexit(int how, int status, void *addr); } - SYS_LWP_CREATE = 495 // { int lwp_create(struct lwp_params *params); } - SYS_LWP_GETTID = 496 // { lwpid_t lwp_gettid(void); } - SYS_LWP_KILL = 497 // { int lwp_kill(pid_t pid, lwpid_t tid, int signum); } - SYS_LWP_RTPRIO = 498 // { int lwp_rtprio(int function, pid_t pid, lwpid_t tid, struct rtprio *rtp); } - SYS_PSELECT = 499 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sigmask); } - SYS_STATVFS = 500 // { int statvfs(const char *path, struct statvfs *buf); } - SYS_FSTATVFS = 501 // { int fstatvfs(int fd, struct statvfs *buf); } - SYS_FHSTATVFS = 502 // { int fhstatvfs(const struct fhandle *u_fhp, struct statvfs *buf); } - SYS_GETVFSSTAT = 503 // { int getvfsstat(struct statfs *buf, struct statvfs *vbuf, long vbufsize, int flags); } - SYS_OPENAT = 504 // { int openat(int fd, char *path, int flags, int mode); } - SYS_FSTATAT = 505 // { int fstatat(int fd, char *path, struct stat *sb, int flags); } - SYS_FCHMODAT = 506 // { int fchmodat(int fd, char *path, int mode, int flags); } - SYS_FCHOWNAT = 507 // { int fchownat(int fd, char *path, int uid, int gid, int flags); } - SYS_UNLINKAT = 508 // { int unlinkat(int fd, char *path, int flags); } - SYS_FACCESSAT = 509 // { int faccessat(int fd, char *path, int amode, int flags); } - SYS_MQ_OPEN = 510 // { mqd_t mq_open(const char * name, int oflag, mode_t mode, struct mq_attr *attr); } - SYS_MQ_CLOSE = 511 // { int mq_close(mqd_t mqdes); } - SYS_MQ_UNLINK = 512 // { int mq_unlink(const char *name); } - SYS_MQ_GETATTR = 513 // { int mq_getattr(mqd_t mqdes, struct mq_attr *mqstat); } - SYS_MQ_SETATTR = 514 // { int mq_setattr(mqd_t mqdes, const struct mq_attr *mqstat, struct mq_attr *omqstat); } - SYS_MQ_NOTIFY = 515 // { int mq_notify(mqd_t mqdes, const struct sigevent *notification); } - SYS_MQ_SEND = 516 // { int mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio); } - SYS_MQ_RECEIVE = 517 // { ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio); } - SYS_MQ_TIMEDSEND = 518 // { int mq_timedsend(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); } - SYS_MQ_TIMEDRECEIVE = 519 // { ssize_t mq_timedreceive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); } - SYS_IOPRIO_SET = 520 // { int ioprio_set(int which, int who, int prio); } - SYS_IOPRIO_GET = 521 // { int ioprio_get(int which, int who); } - SYS_CHROOT_KERNEL = 522 // { int chroot_kernel(char *path); } - SYS_RENAMEAT = 523 // { int renameat(int oldfd, char *old, int newfd, char *new); } - SYS_MKDIRAT = 524 // { int mkdirat(int fd, char *path, mode_t mode); } - SYS_MKFIFOAT = 525 // { int mkfifoat(int fd, char *path, mode_t mode); } - SYS_MKNODAT = 526 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); } - SYS_READLINKAT = 527 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); } - SYS_SYMLINKAT = 528 // { int symlinkat(char *path1, int fd, char *path2); } - SYS_SWAPOFF = 529 // { int swapoff(char *name); } - SYS_VQUOTACTL = 530 // { int vquotactl(const char *path, struct plistref *pref); } - SYS_LINKAT = 531 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flags); } - SYS_EACCESS = 532 // { int eaccess(char *path, int flags); } - SYS_LPATHCONF = 533 // { int lpathconf(char *path, int name); } - SYS_VMM_GUEST_CTL = 534 // { int vmm_guest_ctl(int op, struct vmm_guest_options *options); } - SYS_VMM_GUEST_SYNC_ADDR = 535 // { int vmm_guest_sync_addr(long *dstaddr, long *srcaddr); } - SYS_PROCCTL = 536 // { int procctl(idtype_t idtype, id_t id, int cmd, void *data); } - SYS_CHFLAGSAT = 537 // { int chflagsat(int fd, const char *path, u_long flags, int atflags);} - SYS_PIPE2 = 538 // { int pipe2(int *fildes, int flags); } - SYS_UTIMENSAT = 539 // { int utimensat(int fd, const char *path, const struct timespec *ts, int flags); } - SYS_FUTIMENS = 540 // { int futimens(int fd, const struct timespec *ts); } - SYS_ACCEPT4 = 541 // { int accept4(int s, caddr_t name, int *anamelen, int flags); } - SYS_LWP_SETNAME = 542 // { int lwp_setname(lwpid_t tid, const char *name); } - SYS_PPOLL = 543 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *sigmask); } - SYS_LWP_SETAFFINITY = 544 // { int lwp_setaffinity(pid_t pid, lwpid_t tid, const cpumask_t *mask); } - SYS_LWP_GETAFFINITY = 545 // { int lwp_getaffinity(pid_t pid, lwpid_t tid, cpumask_t *mask); } - SYS_LWP_CREATE2 = 546 // { int lwp_create2(struct lwp_params *params, const cpumask_t *mask); } - SYS_GETCPUCLOCKID = 547 // { int getcpuclockid(pid_t pid, lwpid_t lwp_id, clockid_t *clock_id); } - SYS_WAIT6 = 548 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); } - SYS_LWP_GETNAME = 549 // { int lwp_getname(lwpid_t tid, char *name, size_t len); } - SYS_GETRANDOM = 550 // { ssize_t getrandom(void *buf, size_t len, unsigned flags); } - SYS___REALPATH = 551 // { ssize_t __realpath(const char *path, char *buf, size_t len); } -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go deleted file mode 100644 index 4e0d961..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go +++ /dev/null @@ -1,394 +0,0 @@ -// go run mksysnum.go https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build 386 && freebsd -// +build 386,freebsd - -package unix - -const ( - // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int - SYS_EXIT = 1 // { void sys_exit(int rval); } exit sys_exit_args void - SYS_FORK = 2 // { int fork(void); } - SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); } - SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); } - SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } - SYS_CLOSE = 6 // { int close(int fd); } - SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); } - SYS_LINK = 9 // { int link(char *path, char *link); } - SYS_UNLINK = 10 // { int unlink(char *path); } - SYS_CHDIR = 12 // { int chdir(char *path); } - SYS_FCHDIR = 13 // { int fchdir(int fd); } - SYS_CHMOD = 15 // { int chmod(char *path, int mode); } - SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } - SYS_BREAK = 17 // { caddr_t break(char *nsize); } - SYS_GETPID = 20 // { pid_t getpid(void); } - SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); } - SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } - SYS_SETUID = 23 // { int setuid(uid_t uid); } - SYS_GETUID = 24 // { uid_t getuid(void); } - SYS_GETEUID = 25 // { uid_t geteuid(void); } - SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, int data); } - SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); } - SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, int flags); } - SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); } - SYS_ACCEPT = 30 // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); } - SYS_GETPEERNAME = 31 // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); } - SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); } - SYS_ACCESS = 33 // { int access(char *path, int amode); } - SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } - SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } - SYS_SYNC = 36 // { int sync(void); } - SYS_KILL = 37 // { int kill(int pid, int signum); } - SYS_GETPPID = 39 // { pid_t getppid(void); } - SYS_DUP = 41 // { int dup(u_int fd); } - SYS_GETEGID = 43 // { gid_t getegid(void); } - SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); } - SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); } - SYS_GETGID = 47 // { gid_t getgid(void); } - SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); } - SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } - SYS_ACCT = 51 // { int acct(char *path); } - SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); } - SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); } - SYS_REBOOT = 55 // { int reboot(int opt); } - SYS_REVOKE = 56 // { int revoke(char *path); } - SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } - SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, size_t count); } - SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); } - SYS_UMASK = 60 // { int umask(int newmask); } - SYS_CHROOT = 61 // { int chroot(char *path); } - SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); } - SYS_VFORK = 66 // { int vfork(void); } - SYS_SBRK = 69 // { int sbrk(int incr); } - SYS_SSTK = 70 // { int sstk(int incr); } - SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } - SYS_MPROTECT = 74 // { int mprotect(void *addr, size_t len, int prot); } - SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); } - SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); } - SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); } - SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); } - SYS_GETPGRP = 81 // { int getpgrp(void); } - SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } - SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); } - SYS_SWAPON = 85 // { int swapon(char *name); } - SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); } - SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } - SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } - SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } - SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } - SYS_FSYNC = 95 // { int fsync(int fd); } - SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); } - SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); } - SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); } - SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } - SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); } - SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); } - SYS_LISTEN = 106 // { int listen(int s, int backlog); } - SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); } - SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); } - SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); } - SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); } - SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); } - SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); } - SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } - SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } - SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } - SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } - SYS_RENAME = 128 // { int rename(char *from, char *to); } - SYS_FLOCK = 131 // { int flock(int fd, int how); } - SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } - SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); } - SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } - SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); } - SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } - SYS_RMDIR = 137 // { int rmdir(char *path); } - SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); } - SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); } - SYS_SETSID = 147 // { int setsid(void); } - SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); } - SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); } - SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); } - SYS_LGETFH = 160 // { int lgetfh(char *fname, struct fhandle *fhp); } - SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); } - SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } - SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); } - SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); } - SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); } - SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, int a4); } - SYS_SETFIB = 175 // { int setfib(int fibnum); } - SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } - SYS_SETGID = 181 // { int setgid(gid_t gid); } - SYS_SETEGID = 182 // { int setegid(gid_t egid); } - SYS_SETEUID = 183 // { int seteuid(uid_t euid); } - SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } - SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } - SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int - SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int - SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int - SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } - SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } - SYS_UNDELETE = 205 // { int undelete(char *path); } - SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } - SYS_GETPGID = 207 // { int getpgid(pid_t pid); } - SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); } - SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); } - SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); } - SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); } - SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } - SYS_MSGRCV = 227 // { ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } - SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); } - SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); } - SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); } - SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); } - SYS_CLOCK_SETTIME = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); } - SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); } - SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); } - SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } - SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } - SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); } - SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } - SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } - SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } - SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate(struct ffclock_estimate *cest); } - SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate(struct ffclock_estimate *cest); } - SYS_CLOCK_NANOSLEEP = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); } - SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id, int which, clockid_t *clock_id); } - SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } - SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); } - SYS_RFORK = 251 // { int rfork(int flags); } - SYS_ISSETUGID = 253 // { int issetugid(void); } - SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } - SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); } - SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); } - SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb* const *acb_list, int nent, struct sigevent *sig); } - SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } - SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); } - SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } - SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } - SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); } - SYS_MODNEXT = 300 // { int modnext(int modid); } - SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat* stat); } - SYS_MODFNEXT = 302 // { int modfnext(int modid); } - SYS_MODFIND = 303 // { int modfind(const char *name); } - SYS_KLDLOAD = 304 // { int kldload(const char *file); } - SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } - SYS_KLDFIND = 306 // { int kldfind(const char *file); } - SYS_KLDNEXT = 307 // { int kldnext(int fileid); } - SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat *stat); } - SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } - SYS_GETSID = 310 // { int getsid(pid_t pid); } - SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); } - SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); } - SYS_AIO_RETURN = 314 // { ssize_t aio_return(struct aiocb *aiocbp); } - SYS_AIO_SUSPEND = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } - SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); } - SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); } - SYS_YIELD = 321 // { int yield(void); } - SYS_MLOCKALL = 324 // { int mlockall(int how); } - SYS_MUNLOCKALL = 325 // { int munlockall(void); } - SYS___GETCWD = 326 // { int __getcwd(char *buf, size_t buflen); } - SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); } - SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); } - SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); } - SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } - SYS_SCHED_YIELD = 331 // { int sched_yield (void); } - SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } - SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } - SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); } - SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } - SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); } - SYS_JAIL = 338 // { int jail(struct jail *jail); } - SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); } - SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } - SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } - SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); } - SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); } - SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); } - SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); } - SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, acl_type_t type); } - SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); } - SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); } - SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } - SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } - SYS_AIO_WAITCOMPLETE = 359 // { ssize_t aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); } - SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } - SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } - SYS_KQUEUE = 362 // { int kqueue(void); } - SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } - SYS___SETUGID = 374 // { int __setugid(int flag); } - SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } - SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); } - SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } - SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } - SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); } - SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); } - SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); } - SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); } - SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); } - SYS_LCHFLAGS = 391 // { int lchflags(const char *path, u_long flags); } - SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); } - SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); } - SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, int call, void *arg); } - SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); } - SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); } - SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); } - SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); } - SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, unsigned int value); } - SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); } - SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); } - SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); } - SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); } - SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); } - SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); } - SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); } - SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } - SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); } - SYS_SIGACTION = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); } - SYS_SIGRETURN = 417 // { int sigreturn(const struct __ucontext *sigcntxp); } - SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } - SYS_SETCONTEXT = 422 // { int setcontext(const struct __ucontext *ucp); } - SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); } - SYS_SWAPOFF = 424 // { int swapoff(const char *name); } - SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, acl_type_t type); } - SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); } - SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, int *sig); } - SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); } - SYS_THR_EXIT = 431 // { void thr_exit(long *state); } - SYS_THR_SELF = 432 // { int thr_self(long *id); } - SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } - SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } - SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } - SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); } - SYS_THR_SUSPEND = 442 // { int thr_suspend(const struct timespec *timeout); } - SYS_THR_WAKE = 443 // { int thr_wake(long id); } - SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } - SYS_AUDIT = 445 // { int audit(const void *record, u_int length); } - SYS_AUDITON = 446 // { int auditon(int cmd, void *data, u_int length); } - SYS_GETAUID = 447 // { int getauid(uid_t *auid); } - SYS_SETAUID = 448 // { int setauid(uid_t *auid); } - SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } - SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } - SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); } - SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); } - SYS_AUDITCTL = 453 // { int auditctl(char *path); } - SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); } - SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, int param_size); } - SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } - SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); } - SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); } - SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); } - SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); } - SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); } - SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); } - SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } - SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } - SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); } - SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); } - SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } - SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } - SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } - SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr *from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); } - SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); } - SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); } - SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); } - SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, int whence); } - SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } - SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } - SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } - SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, mode_t mode); } - SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } - SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } - SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); } - SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); } - SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); } - SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); } - SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, int flag); } - SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); } - SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); } - SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, char **envv); } - SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, struct timeval *times); } - SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); } - SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } - SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } - SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, mode_t mode); } - SYS_READLINKAT = 500 // { ssize_t readlinkat(int fd, char *path, char *buf, size_t bufsize); } - SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); } - SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, char *path2); } - SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } - SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } - SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); } - SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); } - SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); } - SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } - SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } - SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); } - SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); } - SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); } - SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } - SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); } - SYS_CAP_ENTER = 516 // { int cap_enter(void); } - SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } - SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } - SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } - SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } - SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); } - SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, size_t namelen); } - SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } - SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); } - SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); } - SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); } - SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); } - SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); } - SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); } - SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); } - SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); } - SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); } - SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); } - SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); } - SYS_ACCEPT4 = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); } - SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } - SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); } - SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); } - SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); } - SYS_FUTIMENS = 546 // { int futimens(int fd, struct timespec *times); } - SYS_UTIMENSAT = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); } - SYS_FDATASYNC = 550 // { int fdatasync(int fd); } - SYS_FSTAT = 551 // { int fstat(int fd, struct stat *sb); } - SYS_FSTATAT = 552 // { int fstatat(int fd, char *path, struct stat *buf, int flag); } - SYS_FHSTAT = 553 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } - SYS_GETDIRENTRIES = 554 // { ssize_t getdirentries(int fd, char *buf, size_t count, off_t *basep); } - SYS_STATFS = 555 // { int statfs(char *path, struct statfs *buf); } - SYS_FSTATFS = 556 // { int fstatfs(int fd, struct statfs *buf); } - SYS_GETFSSTAT = 557 // { int getfsstat(struct statfs *buf, long bufsize, int mode); } - SYS_FHSTATFS = 558 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } - SYS_MKNODAT = 559 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); } - SYS_KEVENT = 560 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } - SYS_CPUSET_GETDOMAIN = 561 // { int cpuset_getdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int *policy); } - SYS_CPUSET_SETDOMAIN = 562 // { int cpuset_setdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int policy); } - SYS_GETRANDOM = 563 // { int getrandom(void *buf, size_t buflen, unsigned int flags); } - SYS_GETFHAT = 564 // { int getfhat(int fd, char *path, struct fhandle *fhp, int flags); } - SYS_FHLINK = 565 // { int fhlink(struct fhandle *fhp, const char *to); } - SYS_FHLINKAT = 566 // { int fhlinkat(struct fhandle *fhp, int tofd, const char *to,); } - SYS_FHREADLINK = 567 // { int fhreadlink(struct fhandle *fhp, char *buf, size_t bufsize); } - SYS___SYSCTLBYNAME = 570 // { int __sysctlbyname(const char *name, size_t namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } - SYS_CLOSE_RANGE = 575 // { int close_range(u_int lowfd, u_int highfd, int flags); } -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go deleted file mode 100644 index 01636b8..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go +++ /dev/null @@ -1,394 +0,0 @@ -// go run mksysnum.go https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build amd64 && freebsd -// +build amd64,freebsd - -package unix - -const ( - // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int - SYS_EXIT = 1 // { void sys_exit(int rval); } exit sys_exit_args void - SYS_FORK = 2 // { int fork(void); } - SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); } - SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); } - SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } - SYS_CLOSE = 6 // { int close(int fd); } - SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); } - SYS_LINK = 9 // { int link(char *path, char *link); } - SYS_UNLINK = 10 // { int unlink(char *path); } - SYS_CHDIR = 12 // { int chdir(char *path); } - SYS_FCHDIR = 13 // { int fchdir(int fd); } - SYS_CHMOD = 15 // { int chmod(char *path, int mode); } - SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } - SYS_BREAK = 17 // { caddr_t break(char *nsize); } - SYS_GETPID = 20 // { pid_t getpid(void); } - SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); } - SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } - SYS_SETUID = 23 // { int setuid(uid_t uid); } - SYS_GETUID = 24 // { uid_t getuid(void); } - SYS_GETEUID = 25 // { uid_t geteuid(void); } - SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, int data); } - SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); } - SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, int flags); } - SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); } - SYS_ACCEPT = 30 // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); } - SYS_GETPEERNAME = 31 // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); } - SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); } - SYS_ACCESS = 33 // { int access(char *path, int amode); } - SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } - SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } - SYS_SYNC = 36 // { int sync(void); } - SYS_KILL = 37 // { int kill(int pid, int signum); } - SYS_GETPPID = 39 // { pid_t getppid(void); } - SYS_DUP = 41 // { int dup(u_int fd); } - SYS_GETEGID = 43 // { gid_t getegid(void); } - SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); } - SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); } - SYS_GETGID = 47 // { gid_t getgid(void); } - SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); } - SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } - SYS_ACCT = 51 // { int acct(char *path); } - SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); } - SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); } - SYS_REBOOT = 55 // { int reboot(int opt); } - SYS_REVOKE = 56 // { int revoke(char *path); } - SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } - SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, size_t count); } - SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); } - SYS_UMASK = 60 // { int umask(int newmask); } - SYS_CHROOT = 61 // { int chroot(char *path); } - SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); } - SYS_VFORK = 66 // { int vfork(void); } - SYS_SBRK = 69 // { int sbrk(int incr); } - SYS_SSTK = 70 // { int sstk(int incr); } - SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } - SYS_MPROTECT = 74 // { int mprotect(void *addr, size_t len, int prot); } - SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); } - SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); } - SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); } - SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); } - SYS_GETPGRP = 81 // { int getpgrp(void); } - SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } - SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); } - SYS_SWAPON = 85 // { int swapon(char *name); } - SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); } - SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } - SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } - SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } - SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } - SYS_FSYNC = 95 // { int fsync(int fd); } - SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); } - SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); } - SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); } - SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } - SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); } - SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); } - SYS_LISTEN = 106 // { int listen(int s, int backlog); } - SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); } - SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); } - SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); } - SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); } - SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); } - SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); } - SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } - SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } - SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } - SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } - SYS_RENAME = 128 // { int rename(char *from, char *to); } - SYS_FLOCK = 131 // { int flock(int fd, int how); } - SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } - SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); } - SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } - SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); } - SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } - SYS_RMDIR = 137 // { int rmdir(char *path); } - SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); } - SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); } - SYS_SETSID = 147 // { int setsid(void); } - SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); } - SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); } - SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); } - SYS_LGETFH = 160 // { int lgetfh(char *fname, struct fhandle *fhp); } - SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); } - SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } - SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); } - SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); } - SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); } - SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, int a4); } - SYS_SETFIB = 175 // { int setfib(int fibnum); } - SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } - SYS_SETGID = 181 // { int setgid(gid_t gid); } - SYS_SETEGID = 182 // { int setegid(gid_t egid); } - SYS_SETEUID = 183 // { int seteuid(uid_t euid); } - SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } - SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } - SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int - SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int - SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int - SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } - SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } - SYS_UNDELETE = 205 // { int undelete(char *path); } - SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } - SYS_GETPGID = 207 // { int getpgid(pid_t pid); } - SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); } - SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); } - SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); } - SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); } - SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } - SYS_MSGRCV = 227 // { ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } - SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); } - SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); } - SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); } - SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); } - SYS_CLOCK_SETTIME = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); } - SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); } - SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); } - SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } - SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } - SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); } - SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } - SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } - SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } - SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate(struct ffclock_estimate *cest); } - SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate(struct ffclock_estimate *cest); } - SYS_CLOCK_NANOSLEEP = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); } - SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id, int which, clockid_t *clock_id); } - SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } - SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); } - SYS_RFORK = 251 // { int rfork(int flags); } - SYS_ISSETUGID = 253 // { int issetugid(void); } - SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } - SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); } - SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); } - SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb* const *acb_list, int nent, struct sigevent *sig); } - SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } - SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); } - SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } - SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } - SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); } - SYS_MODNEXT = 300 // { int modnext(int modid); } - SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat* stat); } - SYS_MODFNEXT = 302 // { int modfnext(int modid); } - SYS_MODFIND = 303 // { int modfind(const char *name); } - SYS_KLDLOAD = 304 // { int kldload(const char *file); } - SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } - SYS_KLDFIND = 306 // { int kldfind(const char *file); } - SYS_KLDNEXT = 307 // { int kldnext(int fileid); } - SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat *stat); } - SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } - SYS_GETSID = 310 // { int getsid(pid_t pid); } - SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); } - SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); } - SYS_AIO_RETURN = 314 // { ssize_t aio_return(struct aiocb *aiocbp); } - SYS_AIO_SUSPEND = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } - SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); } - SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); } - SYS_YIELD = 321 // { int yield(void); } - SYS_MLOCKALL = 324 // { int mlockall(int how); } - SYS_MUNLOCKALL = 325 // { int munlockall(void); } - SYS___GETCWD = 326 // { int __getcwd(char *buf, size_t buflen); } - SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); } - SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); } - SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); } - SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } - SYS_SCHED_YIELD = 331 // { int sched_yield (void); } - SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } - SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } - SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); } - SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } - SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); } - SYS_JAIL = 338 // { int jail(struct jail *jail); } - SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); } - SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } - SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } - SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); } - SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); } - SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); } - SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); } - SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, acl_type_t type); } - SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); } - SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); } - SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } - SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } - SYS_AIO_WAITCOMPLETE = 359 // { ssize_t aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); } - SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } - SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } - SYS_KQUEUE = 362 // { int kqueue(void); } - SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } - SYS___SETUGID = 374 // { int __setugid(int flag); } - SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } - SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); } - SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } - SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } - SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); } - SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); } - SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); } - SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); } - SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); } - SYS_LCHFLAGS = 391 // { int lchflags(const char *path, u_long flags); } - SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); } - SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); } - SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, int call, void *arg); } - SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); } - SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); } - SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); } - SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); } - SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, unsigned int value); } - SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); } - SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); } - SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); } - SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); } - SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); } - SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); } - SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); } - SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } - SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); } - SYS_SIGACTION = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); } - SYS_SIGRETURN = 417 // { int sigreturn(const struct __ucontext *sigcntxp); } - SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } - SYS_SETCONTEXT = 422 // { int setcontext(const struct __ucontext *ucp); } - SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); } - SYS_SWAPOFF = 424 // { int swapoff(const char *name); } - SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, acl_type_t type); } - SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); } - SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, int *sig); } - SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); } - SYS_THR_EXIT = 431 // { void thr_exit(long *state); } - SYS_THR_SELF = 432 // { int thr_self(long *id); } - SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } - SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } - SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } - SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); } - SYS_THR_SUSPEND = 442 // { int thr_suspend(const struct timespec *timeout); } - SYS_THR_WAKE = 443 // { int thr_wake(long id); } - SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } - SYS_AUDIT = 445 // { int audit(const void *record, u_int length); } - SYS_AUDITON = 446 // { int auditon(int cmd, void *data, u_int length); } - SYS_GETAUID = 447 // { int getauid(uid_t *auid); } - SYS_SETAUID = 448 // { int setauid(uid_t *auid); } - SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } - SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } - SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); } - SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); } - SYS_AUDITCTL = 453 // { int auditctl(char *path); } - SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); } - SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, int param_size); } - SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } - SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); } - SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); } - SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); } - SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); } - SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); } - SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); } - SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } - SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } - SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); } - SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); } - SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } - SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } - SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } - SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr *from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); } - SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); } - SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); } - SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); } - SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, int whence); } - SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } - SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } - SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } - SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, mode_t mode); } - SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } - SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } - SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); } - SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); } - SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); } - SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); } - SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, int flag); } - SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); } - SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); } - SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, char **envv); } - SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, struct timeval *times); } - SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); } - SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } - SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } - SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, mode_t mode); } - SYS_READLINKAT = 500 // { ssize_t readlinkat(int fd, char *path, char *buf, size_t bufsize); } - SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); } - SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, char *path2); } - SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } - SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } - SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); } - SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); } - SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); } - SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } - SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } - SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); } - SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); } - SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); } - SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } - SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); } - SYS_CAP_ENTER = 516 // { int cap_enter(void); } - SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } - SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } - SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } - SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } - SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); } - SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, size_t namelen); } - SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } - SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); } - SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); } - SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); } - SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); } - SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); } - SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); } - SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); } - SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); } - SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); } - SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); } - SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); } - SYS_ACCEPT4 = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); } - SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } - SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); } - SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); } - SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); } - SYS_FUTIMENS = 546 // { int futimens(int fd, struct timespec *times); } - SYS_UTIMENSAT = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); } - SYS_FDATASYNC = 550 // { int fdatasync(int fd); } - SYS_FSTAT = 551 // { int fstat(int fd, struct stat *sb); } - SYS_FSTATAT = 552 // { int fstatat(int fd, char *path, struct stat *buf, int flag); } - SYS_FHSTAT = 553 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } - SYS_GETDIRENTRIES = 554 // { ssize_t getdirentries(int fd, char *buf, size_t count, off_t *basep); } - SYS_STATFS = 555 // { int statfs(char *path, struct statfs *buf); } - SYS_FSTATFS = 556 // { int fstatfs(int fd, struct statfs *buf); } - SYS_GETFSSTAT = 557 // { int getfsstat(struct statfs *buf, long bufsize, int mode); } - SYS_FHSTATFS = 558 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } - SYS_MKNODAT = 559 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); } - SYS_KEVENT = 560 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } - SYS_CPUSET_GETDOMAIN = 561 // { int cpuset_getdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int *policy); } - SYS_CPUSET_SETDOMAIN = 562 // { int cpuset_setdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int policy); } - SYS_GETRANDOM = 563 // { int getrandom(void *buf, size_t buflen, unsigned int flags); } - SYS_GETFHAT = 564 // { int getfhat(int fd, char *path, struct fhandle *fhp, int flags); } - SYS_FHLINK = 565 // { int fhlink(struct fhandle *fhp, const char *to); } - SYS_FHLINKAT = 566 // { int fhlinkat(struct fhandle *fhp, int tofd, const char *to,); } - SYS_FHREADLINK = 567 // { int fhreadlink(struct fhandle *fhp, char *buf, size_t bufsize); } - SYS___SYSCTLBYNAME = 570 // { int __sysctlbyname(const char *name, size_t namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } - SYS_CLOSE_RANGE = 575 // { int close_range(u_int lowfd, u_int highfd, int flags); } -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go deleted file mode 100644 index ad99bc1..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go +++ /dev/null @@ -1,394 +0,0 @@ -// go run mksysnum.go https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm && freebsd -// +build arm,freebsd - -package unix - -const ( - // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int - SYS_EXIT = 1 // { void sys_exit(int rval); } exit sys_exit_args void - SYS_FORK = 2 // { int fork(void); } - SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); } - SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); } - SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } - SYS_CLOSE = 6 // { int close(int fd); } - SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); } - SYS_LINK = 9 // { int link(char *path, char *link); } - SYS_UNLINK = 10 // { int unlink(char *path); } - SYS_CHDIR = 12 // { int chdir(char *path); } - SYS_FCHDIR = 13 // { int fchdir(int fd); } - SYS_CHMOD = 15 // { int chmod(char *path, int mode); } - SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } - SYS_BREAK = 17 // { caddr_t break(char *nsize); } - SYS_GETPID = 20 // { pid_t getpid(void); } - SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); } - SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } - SYS_SETUID = 23 // { int setuid(uid_t uid); } - SYS_GETUID = 24 // { uid_t getuid(void); } - SYS_GETEUID = 25 // { uid_t geteuid(void); } - SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, int data); } - SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); } - SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, int flags); } - SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); } - SYS_ACCEPT = 30 // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); } - SYS_GETPEERNAME = 31 // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); } - SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); } - SYS_ACCESS = 33 // { int access(char *path, int amode); } - SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } - SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } - SYS_SYNC = 36 // { int sync(void); } - SYS_KILL = 37 // { int kill(int pid, int signum); } - SYS_GETPPID = 39 // { pid_t getppid(void); } - SYS_DUP = 41 // { int dup(u_int fd); } - SYS_GETEGID = 43 // { gid_t getegid(void); } - SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); } - SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); } - SYS_GETGID = 47 // { gid_t getgid(void); } - SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); } - SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } - SYS_ACCT = 51 // { int acct(char *path); } - SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); } - SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); } - SYS_REBOOT = 55 // { int reboot(int opt); } - SYS_REVOKE = 56 // { int revoke(char *path); } - SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } - SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, size_t count); } - SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); } - SYS_UMASK = 60 // { int umask(int newmask); } - SYS_CHROOT = 61 // { int chroot(char *path); } - SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); } - SYS_VFORK = 66 // { int vfork(void); } - SYS_SBRK = 69 // { int sbrk(int incr); } - SYS_SSTK = 70 // { int sstk(int incr); } - SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } - SYS_MPROTECT = 74 // { int mprotect(void *addr, size_t len, int prot); } - SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); } - SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); } - SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); } - SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); } - SYS_GETPGRP = 81 // { int getpgrp(void); } - SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } - SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); } - SYS_SWAPON = 85 // { int swapon(char *name); } - SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); } - SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } - SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } - SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } - SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } - SYS_FSYNC = 95 // { int fsync(int fd); } - SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); } - SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); } - SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); } - SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } - SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); } - SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); } - SYS_LISTEN = 106 // { int listen(int s, int backlog); } - SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); } - SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); } - SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); } - SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); } - SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); } - SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); } - SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } - SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } - SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } - SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } - SYS_RENAME = 128 // { int rename(char *from, char *to); } - SYS_FLOCK = 131 // { int flock(int fd, int how); } - SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } - SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); } - SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } - SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); } - SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } - SYS_RMDIR = 137 // { int rmdir(char *path); } - SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); } - SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); } - SYS_SETSID = 147 // { int setsid(void); } - SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); } - SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); } - SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); } - SYS_LGETFH = 160 // { int lgetfh(char *fname, struct fhandle *fhp); } - SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); } - SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } - SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); } - SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); } - SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); } - SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, int a4); } - SYS_SETFIB = 175 // { int setfib(int fibnum); } - SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } - SYS_SETGID = 181 // { int setgid(gid_t gid); } - SYS_SETEGID = 182 // { int setegid(gid_t egid); } - SYS_SETEUID = 183 // { int seteuid(uid_t euid); } - SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } - SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } - SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int - SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int - SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int - SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } - SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } - SYS_UNDELETE = 205 // { int undelete(char *path); } - SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } - SYS_GETPGID = 207 // { int getpgid(pid_t pid); } - SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); } - SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); } - SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); } - SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); } - SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } - SYS_MSGRCV = 227 // { ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } - SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); } - SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); } - SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); } - SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); } - SYS_CLOCK_SETTIME = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); } - SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); } - SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); } - SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } - SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } - SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); } - SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } - SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } - SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } - SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate(struct ffclock_estimate *cest); } - SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate(struct ffclock_estimate *cest); } - SYS_CLOCK_NANOSLEEP = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); } - SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id, int which, clockid_t *clock_id); } - SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } - SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); } - SYS_RFORK = 251 // { int rfork(int flags); } - SYS_ISSETUGID = 253 // { int issetugid(void); } - SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } - SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); } - SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); } - SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb* const *acb_list, int nent, struct sigevent *sig); } - SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } - SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); } - SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } - SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } - SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); } - SYS_MODNEXT = 300 // { int modnext(int modid); } - SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat* stat); } - SYS_MODFNEXT = 302 // { int modfnext(int modid); } - SYS_MODFIND = 303 // { int modfind(const char *name); } - SYS_KLDLOAD = 304 // { int kldload(const char *file); } - SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } - SYS_KLDFIND = 306 // { int kldfind(const char *file); } - SYS_KLDNEXT = 307 // { int kldnext(int fileid); } - SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat *stat); } - SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } - SYS_GETSID = 310 // { int getsid(pid_t pid); } - SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); } - SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); } - SYS_AIO_RETURN = 314 // { ssize_t aio_return(struct aiocb *aiocbp); } - SYS_AIO_SUSPEND = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } - SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); } - SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); } - SYS_YIELD = 321 // { int yield(void); } - SYS_MLOCKALL = 324 // { int mlockall(int how); } - SYS_MUNLOCKALL = 325 // { int munlockall(void); } - SYS___GETCWD = 326 // { int __getcwd(char *buf, size_t buflen); } - SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); } - SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); } - SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); } - SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } - SYS_SCHED_YIELD = 331 // { int sched_yield (void); } - SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } - SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } - SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); } - SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } - SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); } - SYS_JAIL = 338 // { int jail(struct jail *jail); } - SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); } - SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } - SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } - SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); } - SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); } - SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); } - SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); } - SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, acl_type_t type); } - SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); } - SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); } - SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } - SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } - SYS_AIO_WAITCOMPLETE = 359 // { ssize_t aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); } - SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } - SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } - SYS_KQUEUE = 362 // { int kqueue(void); } - SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } - SYS___SETUGID = 374 // { int __setugid(int flag); } - SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } - SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); } - SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } - SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } - SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); } - SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); } - SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); } - SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); } - SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); } - SYS_LCHFLAGS = 391 // { int lchflags(const char *path, u_long flags); } - SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); } - SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); } - SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, int call, void *arg); } - SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); } - SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); } - SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); } - SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); } - SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, unsigned int value); } - SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); } - SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); } - SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); } - SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); } - SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); } - SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); } - SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); } - SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } - SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); } - SYS_SIGACTION = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); } - SYS_SIGRETURN = 417 // { int sigreturn(const struct __ucontext *sigcntxp); } - SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } - SYS_SETCONTEXT = 422 // { int setcontext(const struct __ucontext *ucp); } - SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); } - SYS_SWAPOFF = 424 // { int swapoff(const char *name); } - SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, acl_type_t type); } - SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); } - SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, int *sig); } - SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); } - SYS_THR_EXIT = 431 // { void thr_exit(long *state); } - SYS_THR_SELF = 432 // { int thr_self(long *id); } - SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } - SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } - SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } - SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); } - SYS_THR_SUSPEND = 442 // { int thr_suspend(const struct timespec *timeout); } - SYS_THR_WAKE = 443 // { int thr_wake(long id); } - SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } - SYS_AUDIT = 445 // { int audit(const void *record, u_int length); } - SYS_AUDITON = 446 // { int auditon(int cmd, void *data, u_int length); } - SYS_GETAUID = 447 // { int getauid(uid_t *auid); } - SYS_SETAUID = 448 // { int setauid(uid_t *auid); } - SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } - SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } - SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); } - SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); } - SYS_AUDITCTL = 453 // { int auditctl(char *path); } - SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); } - SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, int param_size); } - SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } - SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); } - SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); } - SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); } - SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); } - SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); } - SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); } - SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } - SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } - SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); } - SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); } - SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } - SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } - SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } - SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr *from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); } - SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); } - SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); } - SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); } - SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, int whence); } - SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } - SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } - SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } - SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, mode_t mode); } - SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } - SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } - SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); } - SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); } - SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); } - SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); } - SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, int flag); } - SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); } - SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); } - SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, char **envv); } - SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, struct timeval *times); } - SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); } - SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } - SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } - SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, mode_t mode); } - SYS_READLINKAT = 500 // { ssize_t readlinkat(int fd, char *path, char *buf, size_t bufsize); } - SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); } - SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, char *path2); } - SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } - SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } - SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); } - SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); } - SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); } - SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } - SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } - SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); } - SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); } - SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); } - SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } - SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); } - SYS_CAP_ENTER = 516 // { int cap_enter(void); } - SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } - SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } - SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } - SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } - SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); } - SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, size_t namelen); } - SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } - SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); } - SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); } - SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); } - SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); } - SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); } - SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); } - SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); } - SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); } - SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); } - SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); } - SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); } - SYS_ACCEPT4 = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); } - SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } - SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); } - SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); } - SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); } - SYS_FUTIMENS = 546 // { int futimens(int fd, struct timespec *times); } - SYS_UTIMENSAT = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); } - SYS_FDATASYNC = 550 // { int fdatasync(int fd); } - SYS_FSTAT = 551 // { int fstat(int fd, struct stat *sb); } - SYS_FSTATAT = 552 // { int fstatat(int fd, char *path, struct stat *buf, int flag); } - SYS_FHSTAT = 553 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } - SYS_GETDIRENTRIES = 554 // { ssize_t getdirentries(int fd, char *buf, size_t count, off_t *basep); } - SYS_STATFS = 555 // { int statfs(char *path, struct statfs *buf); } - SYS_FSTATFS = 556 // { int fstatfs(int fd, struct statfs *buf); } - SYS_GETFSSTAT = 557 // { int getfsstat(struct statfs *buf, long bufsize, int mode); } - SYS_FHSTATFS = 558 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } - SYS_MKNODAT = 559 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); } - SYS_KEVENT = 560 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } - SYS_CPUSET_GETDOMAIN = 561 // { int cpuset_getdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int *policy); } - SYS_CPUSET_SETDOMAIN = 562 // { int cpuset_setdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int policy); } - SYS_GETRANDOM = 563 // { int getrandom(void *buf, size_t buflen, unsigned int flags); } - SYS_GETFHAT = 564 // { int getfhat(int fd, char *path, struct fhandle *fhp, int flags); } - SYS_FHLINK = 565 // { int fhlink(struct fhandle *fhp, const char *to); } - SYS_FHLINKAT = 566 // { int fhlinkat(struct fhandle *fhp, int tofd, const char *to,); } - SYS_FHREADLINK = 567 // { int fhreadlink(struct fhandle *fhp, char *buf, size_t bufsize); } - SYS___SYSCTLBYNAME = 570 // { int __sysctlbyname(const char *name, size_t namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } - SYS_CLOSE_RANGE = 575 // { int close_range(u_int lowfd, u_int highfd, int flags); } -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go deleted file mode 100644 index 89dcc42..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go +++ /dev/null @@ -1,394 +0,0 @@ -// go run mksysnum.go https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm64 && freebsd -// +build arm64,freebsd - -package unix - -const ( - // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int - SYS_EXIT = 1 // { void sys_exit(int rval); } exit sys_exit_args void - SYS_FORK = 2 // { int fork(void); } - SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); } - SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); } - SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } - SYS_CLOSE = 6 // { int close(int fd); } - SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); } - SYS_LINK = 9 // { int link(char *path, char *link); } - SYS_UNLINK = 10 // { int unlink(char *path); } - SYS_CHDIR = 12 // { int chdir(char *path); } - SYS_FCHDIR = 13 // { int fchdir(int fd); } - SYS_CHMOD = 15 // { int chmod(char *path, int mode); } - SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } - SYS_BREAK = 17 // { caddr_t break(char *nsize); } - SYS_GETPID = 20 // { pid_t getpid(void); } - SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); } - SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } - SYS_SETUID = 23 // { int setuid(uid_t uid); } - SYS_GETUID = 24 // { uid_t getuid(void); } - SYS_GETEUID = 25 // { uid_t geteuid(void); } - SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, int data); } - SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); } - SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, int flags); } - SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); } - SYS_ACCEPT = 30 // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); } - SYS_GETPEERNAME = 31 // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); } - SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); } - SYS_ACCESS = 33 // { int access(char *path, int amode); } - SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } - SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } - SYS_SYNC = 36 // { int sync(void); } - SYS_KILL = 37 // { int kill(int pid, int signum); } - SYS_GETPPID = 39 // { pid_t getppid(void); } - SYS_DUP = 41 // { int dup(u_int fd); } - SYS_GETEGID = 43 // { gid_t getegid(void); } - SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); } - SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); } - SYS_GETGID = 47 // { gid_t getgid(void); } - SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); } - SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } - SYS_ACCT = 51 // { int acct(char *path); } - SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); } - SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); } - SYS_REBOOT = 55 // { int reboot(int opt); } - SYS_REVOKE = 56 // { int revoke(char *path); } - SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } - SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, size_t count); } - SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); } - SYS_UMASK = 60 // { int umask(int newmask); } - SYS_CHROOT = 61 // { int chroot(char *path); } - SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); } - SYS_VFORK = 66 // { int vfork(void); } - SYS_SBRK = 69 // { int sbrk(int incr); } - SYS_SSTK = 70 // { int sstk(int incr); } - SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } - SYS_MPROTECT = 74 // { int mprotect(void *addr, size_t len, int prot); } - SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); } - SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); } - SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); } - SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); } - SYS_GETPGRP = 81 // { int getpgrp(void); } - SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } - SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); } - SYS_SWAPON = 85 // { int swapon(char *name); } - SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); } - SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } - SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } - SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } - SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } - SYS_FSYNC = 95 // { int fsync(int fd); } - SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); } - SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); } - SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); } - SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } - SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); } - SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); } - SYS_LISTEN = 106 // { int listen(int s, int backlog); } - SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); } - SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); } - SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); } - SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); } - SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); } - SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); } - SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } - SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } - SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } - SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } - SYS_RENAME = 128 // { int rename(char *from, char *to); } - SYS_FLOCK = 131 // { int flock(int fd, int how); } - SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } - SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); } - SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } - SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); } - SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } - SYS_RMDIR = 137 // { int rmdir(char *path); } - SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); } - SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); } - SYS_SETSID = 147 // { int setsid(void); } - SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); } - SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); } - SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); } - SYS_LGETFH = 160 // { int lgetfh(char *fname, struct fhandle *fhp); } - SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); } - SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } - SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); } - SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); } - SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); } - SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, int a4); } - SYS_SETFIB = 175 // { int setfib(int fibnum); } - SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } - SYS_SETGID = 181 // { int setgid(gid_t gid); } - SYS_SETEGID = 182 // { int setegid(gid_t egid); } - SYS_SETEUID = 183 // { int seteuid(uid_t euid); } - SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } - SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } - SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int - SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int - SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int - SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } - SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } - SYS_UNDELETE = 205 // { int undelete(char *path); } - SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } - SYS_GETPGID = 207 // { int getpgid(pid_t pid); } - SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); } - SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); } - SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); } - SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); } - SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } - SYS_MSGRCV = 227 // { ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } - SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); } - SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); } - SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); } - SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); } - SYS_CLOCK_SETTIME = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); } - SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); } - SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); } - SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } - SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } - SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); } - SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } - SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } - SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } - SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate(struct ffclock_estimate *cest); } - SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate(struct ffclock_estimate *cest); } - SYS_CLOCK_NANOSLEEP = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); } - SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id, int which, clockid_t *clock_id); } - SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } - SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); } - SYS_RFORK = 251 // { int rfork(int flags); } - SYS_ISSETUGID = 253 // { int issetugid(void); } - SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } - SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); } - SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); } - SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb* const *acb_list, int nent, struct sigevent *sig); } - SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } - SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); } - SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } - SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } - SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); } - SYS_MODNEXT = 300 // { int modnext(int modid); } - SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat* stat); } - SYS_MODFNEXT = 302 // { int modfnext(int modid); } - SYS_MODFIND = 303 // { int modfind(const char *name); } - SYS_KLDLOAD = 304 // { int kldload(const char *file); } - SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } - SYS_KLDFIND = 306 // { int kldfind(const char *file); } - SYS_KLDNEXT = 307 // { int kldnext(int fileid); } - SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat *stat); } - SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } - SYS_GETSID = 310 // { int getsid(pid_t pid); } - SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); } - SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); } - SYS_AIO_RETURN = 314 // { ssize_t aio_return(struct aiocb *aiocbp); } - SYS_AIO_SUSPEND = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } - SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); } - SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); } - SYS_YIELD = 321 // { int yield(void); } - SYS_MLOCKALL = 324 // { int mlockall(int how); } - SYS_MUNLOCKALL = 325 // { int munlockall(void); } - SYS___GETCWD = 326 // { int __getcwd(char *buf, size_t buflen); } - SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); } - SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); } - SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); } - SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } - SYS_SCHED_YIELD = 331 // { int sched_yield (void); } - SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } - SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } - SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); } - SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } - SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); } - SYS_JAIL = 338 // { int jail(struct jail *jail); } - SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); } - SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } - SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } - SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); } - SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); } - SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); } - SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); } - SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, acl_type_t type); } - SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); } - SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); } - SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } - SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } - SYS_AIO_WAITCOMPLETE = 359 // { ssize_t aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); } - SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } - SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } - SYS_KQUEUE = 362 // { int kqueue(void); } - SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } - SYS___SETUGID = 374 // { int __setugid(int flag); } - SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } - SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); } - SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } - SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } - SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); } - SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); } - SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); } - SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); } - SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); } - SYS_LCHFLAGS = 391 // { int lchflags(const char *path, u_long flags); } - SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); } - SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); } - SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, int call, void *arg); } - SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); } - SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); } - SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); } - SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); } - SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, unsigned int value); } - SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); } - SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); } - SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); } - SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); } - SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); } - SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); } - SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); } - SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } - SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); } - SYS_SIGACTION = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); } - SYS_SIGRETURN = 417 // { int sigreturn(const struct __ucontext *sigcntxp); } - SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } - SYS_SETCONTEXT = 422 // { int setcontext(const struct __ucontext *ucp); } - SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); } - SYS_SWAPOFF = 424 // { int swapoff(const char *name); } - SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, acl_type_t type); } - SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); } - SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, int *sig); } - SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); } - SYS_THR_EXIT = 431 // { void thr_exit(long *state); } - SYS_THR_SELF = 432 // { int thr_self(long *id); } - SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } - SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } - SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } - SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); } - SYS_THR_SUSPEND = 442 // { int thr_suspend(const struct timespec *timeout); } - SYS_THR_WAKE = 443 // { int thr_wake(long id); } - SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } - SYS_AUDIT = 445 // { int audit(const void *record, u_int length); } - SYS_AUDITON = 446 // { int auditon(int cmd, void *data, u_int length); } - SYS_GETAUID = 447 // { int getauid(uid_t *auid); } - SYS_SETAUID = 448 // { int setauid(uid_t *auid); } - SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } - SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } - SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); } - SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); } - SYS_AUDITCTL = 453 // { int auditctl(char *path); } - SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); } - SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, int param_size); } - SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } - SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); } - SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); } - SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); } - SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); } - SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); } - SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); } - SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } - SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } - SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); } - SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); } - SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } - SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } - SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } - SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr *from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); } - SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); } - SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); } - SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); } - SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, int whence); } - SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } - SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } - SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } - SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, mode_t mode); } - SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } - SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } - SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); } - SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); } - SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); } - SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); } - SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, int flag); } - SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); } - SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); } - SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, char **envv); } - SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, struct timeval *times); } - SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); } - SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } - SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } - SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, mode_t mode); } - SYS_READLINKAT = 500 // { ssize_t readlinkat(int fd, char *path, char *buf, size_t bufsize); } - SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); } - SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, char *path2); } - SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } - SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } - SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); } - SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); } - SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); } - SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } - SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } - SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); } - SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); } - SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); } - SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } - SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); } - SYS_CAP_ENTER = 516 // { int cap_enter(void); } - SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } - SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } - SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } - SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } - SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); } - SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, size_t namelen); } - SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } - SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); } - SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); } - SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); } - SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); } - SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); } - SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); } - SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); } - SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); } - SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); } - SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); } - SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); } - SYS_ACCEPT4 = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); } - SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } - SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); } - SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); } - SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); } - SYS_FUTIMENS = 546 // { int futimens(int fd, struct timespec *times); } - SYS_UTIMENSAT = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); } - SYS_FDATASYNC = 550 // { int fdatasync(int fd); } - SYS_FSTAT = 551 // { int fstat(int fd, struct stat *sb); } - SYS_FSTATAT = 552 // { int fstatat(int fd, char *path, struct stat *buf, int flag); } - SYS_FHSTAT = 553 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } - SYS_GETDIRENTRIES = 554 // { ssize_t getdirentries(int fd, char *buf, size_t count, off_t *basep); } - SYS_STATFS = 555 // { int statfs(char *path, struct statfs *buf); } - SYS_FSTATFS = 556 // { int fstatfs(int fd, struct statfs *buf); } - SYS_GETFSSTAT = 557 // { int getfsstat(struct statfs *buf, long bufsize, int mode); } - SYS_FHSTATFS = 558 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } - SYS_MKNODAT = 559 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); } - SYS_KEVENT = 560 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } - SYS_CPUSET_GETDOMAIN = 561 // { int cpuset_getdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int *policy); } - SYS_CPUSET_SETDOMAIN = 562 // { int cpuset_setdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int policy); } - SYS_GETRANDOM = 563 // { int getrandom(void *buf, size_t buflen, unsigned int flags); } - SYS_GETFHAT = 564 // { int getfhat(int fd, char *path, struct fhandle *fhp, int flags); } - SYS_FHLINK = 565 // { int fhlink(struct fhandle *fhp, const char *to); } - SYS_FHLINKAT = 566 // { int fhlinkat(struct fhandle *fhp, int tofd, const char *to,); } - SYS_FHREADLINK = 567 // { int fhreadlink(struct fhandle *fhp, char *buf, size_t bufsize); } - SYS___SYSCTLBYNAME = 570 // { int __sysctlbyname(const char *name, size_t namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } - SYS_CLOSE_RANGE = 575 // { int close_range(u_int lowfd, u_int highfd, int flags); } -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_riscv64.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_riscv64.go deleted file mode 100644 index ee37aaa..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_riscv64.go +++ /dev/null @@ -1,394 +0,0 @@ -// go run mksysnum.go https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build riscv64 && freebsd -// +build riscv64,freebsd - -package unix - -const ( - // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int - SYS_EXIT = 1 // { void sys_exit(int rval); } exit sys_exit_args void - SYS_FORK = 2 // { int fork(void); } - SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); } - SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); } - SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } - SYS_CLOSE = 6 // { int close(int fd); } - SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); } - SYS_LINK = 9 // { int link(char *path, char *link); } - SYS_UNLINK = 10 // { int unlink(char *path); } - SYS_CHDIR = 12 // { int chdir(char *path); } - SYS_FCHDIR = 13 // { int fchdir(int fd); } - SYS_CHMOD = 15 // { int chmod(char *path, int mode); } - SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } - SYS_BREAK = 17 // { caddr_t break(char *nsize); } - SYS_GETPID = 20 // { pid_t getpid(void); } - SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); } - SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } - SYS_SETUID = 23 // { int setuid(uid_t uid); } - SYS_GETUID = 24 // { uid_t getuid(void); } - SYS_GETEUID = 25 // { uid_t geteuid(void); } - SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, int data); } - SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); } - SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, int flags); } - SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); } - SYS_ACCEPT = 30 // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); } - SYS_GETPEERNAME = 31 // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); } - SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); } - SYS_ACCESS = 33 // { int access(char *path, int amode); } - SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } - SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } - SYS_SYNC = 36 // { int sync(void); } - SYS_KILL = 37 // { int kill(int pid, int signum); } - SYS_GETPPID = 39 // { pid_t getppid(void); } - SYS_DUP = 41 // { int dup(u_int fd); } - SYS_GETEGID = 43 // { gid_t getegid(void); } - SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); } - SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); } - SYS_GETGID = 47 // { gid_t getgid(void); } - SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); } - SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } - SYS_ACCT = 51 // { int acct(char *path); } - SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); } - SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); } - SYS_REBOOT = 55 // { int reboot(int opt); } - SYS_REVOKE = 56 // { int revoke(char *path); } - SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } - SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, size_t count); } - SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); } - SYS_UMASK = 60 // { int umask(int newmask); } - SYS_CHROOT = 61 // { int chroot(char *path); } - SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); } - SYS_VFORK = 66 // { int vfork(void); } - SYS_SBRK = 69 // { int sbrk(int incr); } - SYS_SSTK = 70 // { int sstk(int incr); } - SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } - SYS_MPROTECT = 74 // { int mprotect(void *addr, size_t len, int prot); } - SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); } - SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); } - SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); } - SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); } - SYS_GETPGRP = 81 // { int getpgrp(void); } - SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } - SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); } - SYS_SWAPON = 85 // { int swapon(char *name); } - SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); } - SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } - SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } - SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } - SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } - SYS_FSYNC = 95 // { int fsync(int fd); } - SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); } - SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); } - SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); } - SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } - SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); } - SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); } - SYS_LISTEN = 106 // { int listen(int s, int backlog); } - SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); } - SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); } - SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); } - SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); } - SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); } - SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); } - SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } - SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } - SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } - SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } - SYS_RENAME = 128 // { int rename(char *from, char *to); } - SYS_FLOCK = 131 // { int flock(int fd, int how); } - SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } - SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); } - SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } - SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); } - SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } - SYS_RMDIR = 137 // { int rmdir(char *path); } - SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); } - SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); } - SYS_SETSID = 147 // { int setsid(void); } - SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); } - SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); } - SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); } - SYS_LGETFH = 160 // { int lgetfh(char *fname, struct fhandle *fhp); } - SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); } - SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } - SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); } - SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); } - SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); } - SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, int a4); } - SYS_SETFIB = 175 // { int setfib(int fibnum); } - SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } - SYS_SETGID = 181 // { int setgid(gid_t gid); } - SYS_SETEGID = 182 // { int setegid(gid_t egid); } - SYS_SETEUID = 183 // { int seteuid(uid_t euid); } - SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } - SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } - SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int - SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int - SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int - SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } - SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } - SYS_UNDELETE = 205 // { int undelete(char *path); } - SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } - SYS_GETPGID = 207 // { int getpgid(pid_t pid); } - SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); } - SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); } - SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); } - SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); } - SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } - SYS_MSGRCV = 227 // { ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } - SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); } - SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); } - SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); } - SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); } - SYS_CLOCK_SETTIME = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); } - SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); } - SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); } - SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } - SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } - SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); } - SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } - SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } - SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } - SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate(struct ffclock_estimate *cest); } - SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate(struct ffclock_estimate *cest); } - SYS_CLOCK_NANOSLEEP = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); } - SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id, int which, clockid_t *clock_id); } - SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } - SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); } - SYS_RFORK = 251 // { int rfork(int flags); } - SYS_ISSETUGID = 253 // { int issetugid(void); } - SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } - SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); } - SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); } - SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb* const *acb_list, int nent, struct sigevent *sig); } - SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } - SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); } - SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } - SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); } - SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); } - SYS_MODNEXT = 300 // { int modnext(int modid); } - SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat* stat); } - SYS_MODFNEXT = 302 // { int modfnext(int modid); } - SYS_MODFIND = 303 // { int modfind(const char *name); } - SYS_KLDLOAD = 304 // { int kldload(const char *file); } - SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } - SYS_KLDFIND = 306 // { int kldfind(const char *file); } - SYS_KLDNEXT = 307 // { int kldnext(int fileid); } - SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat *stat); } - SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } - SYS_GETSID = 310 // { int getsid(pid_t pid); } - SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); } - SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); } - SYS_AIO_RETURN = 314 // { ssize_t aio_return(struct aiocb *aiocbp); } - SYS_AIO_SUSPEND = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } - SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); } - SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); } - SYS_YIELD = 321 // { int yield(void); } - SYS_MLOCKALL = 324 // { int mlockall(int how); } - SYS_MUNLOCKALL = 325 // { int munlockall(void); } - SYS___GETCWD = 326 // { int __getcwd(char *buf, size_t buflen); } - SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); } - SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); } - SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); } - SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } - SYS_SCHED_YIELD = 331 // { int sched_yield (void); } - SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } - SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } - SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); } - SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } - SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); } - SYS_JAIL = 338 // { int jail(struct jail *jail); } - SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); } - SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } - SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } - SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); } - SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); } - SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); } - SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); } - SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, acl_type_t type); } - SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); } - SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); } - SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } - SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } - SYS_AIO_WAITCOMPLETE = 359 // { ssize_t aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); } - SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } - SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } - SYS_KQUEUE = 362 // { int kqueue(void); } - SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } - SYS___SETUGID = 374 // { int __setugid(int flag); } - SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } - SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); } - SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } - SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } - SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); } - SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); } - SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); } - SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); } - SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); } - SYS_LCHFLAGS = 391 // { int lchflags(const char *path, u_long flags); } - SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); } - SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); } - SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, int call, void *arg); } - SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); } - SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); } - SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); } - SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); } - SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, unsigned int value); } - SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); } - SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); } - SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); } - SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); } - SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); } - SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); } - SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); } - SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } - SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); } - SYS_SIGACTION = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); } - SYS_SIGRETURN = 417 // { int sigreturn(const struct __ucontext *sigcntxp); } - SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } - SYS_SETCONTEXT = 422 // { int setcontext(const struct __ucontext *ucp); } - SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); } - SYS_SWAPOFF = 424 // { int swapoff(const char *name); } - SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); } - SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, acl_type_t type); } - SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); } - SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, int *sig); } - SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); } - SYS_THR_EXIT = 431 // { void thr_exit(long *state); } - SYS_THR_SELF = 432 // { int thr_self(long *id); } - SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } - SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } - SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } - SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); } - SYS_THR_SUSPEND = 442 // { int thr_suspend(const struct timespec *timeout); } - SYS_THR_WAKE = 443 // { int thr_wake(long id); } - SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } - SYS_AUDIT = 445 // { int audit(const void *record, u_int length); } - SYS_AUDITON = 446 // { int auditon(int cmd, void *data, u_int length); } - SYS_GETAUID = 447 // { int getauid(uid_t *auid); } - SYS_SETAUID = 448 // { int setauid(uid_t *auid); } - SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } - SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } - SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); } - SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); } - SYS_AUDITCTL = 453 // { int auditctl(char *path); } - SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); } - SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, int param_size); } - SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } - SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); } - SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); } - SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); } - SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); } - SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); } - SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); } - SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } - SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } - SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); } - SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); } - SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } - SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } - SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); } - SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr *from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); } - SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); } - SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); } - SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); } - SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, int whence); } - SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } - SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } - SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } - SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, mode_t mode); } - SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } - SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } - SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); } - SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); } - SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); } - SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); } - SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, int flag); } - SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); } - SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); } - SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, char **envv); } - SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, struct timeval *times); } - SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); } - SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } - SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } - SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, mode_t mode); } - SYS_READLINKAT = 500 // { ssize_t readlinkat(int fd, char *path, char *buf, size_t bufsize); } - SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); } - SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, char *path2); } - SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } - SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } - SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); } - SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); } - SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); } - SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } - SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } - SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); } - SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); } - SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); } - SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } - SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); } - SYS_CAP_ENTER = 516 // { int cap_enter(void); } - SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } - SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } - SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } - SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } - SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); } - SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, size_t namelen); } - SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } - SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); } - SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); } - SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); } - SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); } - SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); } - SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); } - SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); } - SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); } - SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); } - SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); } - SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); } - SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); } - SYS_ACCEPT4 = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); } - SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } - SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); } - SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); } - SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); } - SYS_FUTIMENS = 546 // { int futimens(int fd, struct timespec *times); } - SYS_UTIMENSAT = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); } - SYS_FDATASYNC = 550 // { int fdatasync(int fd); } - SYS_FSTAT = 551 // { int fstat(int fd, struct stat *sb); } - SYS_FSTATAT = 552 // { int fstatat(int fd, char *path, struct stat *buf, int flag); } - SYS_FHSTAT = 553 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } - SYS_GETDIRENTRIES = 554 // { ssize_t getdirentries(int fd, char *buf, size_t count, off_t *basep); } - SYS_STATFS = 555 // { int statfs(char *path, struct statfs *buf); } - SYS_FSTATFS = 556 // { int fstatfs(int fd, struct statfs *buf); } - SYS_GETFSSTAT = 557 // { int getfsstat(struct statfs *buf, long bufsize, int mode); } - SYS_FHSTATFS = 558 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } - SYS_MKNODAT = 559 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); } - SYS_KEVENT = 560 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } - SYS_CPUSET_GETDOMAIN = 561 // { int cpuset_getdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int *policy); } - SYS_CPUSET_SETDOMAIN = 562 // { int cpuset_setdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int policy); } - SYS_GETRANDOM = 563 // { int getrandom(void *buf, size_t buflen, unsigned int flags); } - SYS_GETFHAT = 564 // { int getfhat(int fd, char *path, struct fhandle *fhp, int flags); } - SYS_FHLINK = 565 // { int fhlink(struct fhandle *fhp, const char *to); } - SYS_FHLINKAT = 566 // { int fhlinkat(struct fhandle *fhp, int tofd, const char *to,); } - SYS_FHREADLINK = 567 // { int fhreadlink(struct fhandle *fhp, char *buf, size_t bufsize); } - SYS___SYSCTLBYNAME = 570 // { int __sysctlbyname(const char *name, size_t namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } - SYS_CLOSE_RANGE = 575 // { int close_range(u_int lowfd, u_int highfd, int flags); } -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go deleted file mode 100644 index c9c4ad0..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go +++ /dev/null @@ -1,450 +0,0 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/386/include -m32 /tmp/386/include/asm/unistd.h -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build 386 && linux -// +build 386,linux - -package unix - -const ( - SYS_RESTART_SYSCALL = 0 - SYS_EXIT = 1 - SYS_FORK = 2 - SYS_READ = 3 - SYS_WRITE = 4 - SYS_OPEN = 5 - SYS_CLOSE = 6 - SYS_WAITPID = 7 - SYS_CREAT = 8 - SYS_LINK = 9 - SYS_UNLINK = 10 - SYS_EXECVE = 11 - SYS_CHDIR = 12 - SYS_TIME = 13 - SYS_MKNOD = 14 - SYS_CHMOD = 15 - SYS_LCHOWN = 16 - SYS_BREAK = 17 - SYS_OLDSTAT = 18 - SYS_LSEEK = 19 - SYS_GETPID = 20 - SYS_MOUNT = 21 - SYS_UMOUNT = 22 - SYS_SETUID = 23 - SYS_GETUID = 24 - SYS_STIME = 25 - SYS_PTRACE = 26 - SYS_ALARM = 27 - SYS_OLDFSTAT = 28 - SYS_PAUSE = 29 - SYS_UTIME = 30 - SYS_STTY = 31 - SYS_GTTY = 32 - SYS_ACCESS = 33 - SYS_NICE = 34 - SYS_FTIME = 35 - SYS_SYNC = 36 - SYS_KILL = 37 - SYS_RENAME = 38 - SYS_MKDIR = 39 - SYS_RMDIR = 40 - SYS_DUP = 41 - SYS_PIPE = 42 - SYS_TIMES = 43 - SYS_PROF = 44 - SYS_BRK = 45 - SYS_SETGID = 46 - SYS_GETGID = 47 - SYS_SIGNAL = 48 - SYS_GETEUID = 49 - SYS_GETEGID = 50 - SYS_ACCT = 51 - SYS_UMOUNT2 = 52 - SYS_LOCK = 53 - SYS_IOCTL = 54 - SYS_FCNTL = 55 - SYS_MPX = 56 - SYS_SETPGID = 57 - SYS_ULIMIT = 58 - SYS_OLDOLDUNAME = 59 - SYS_UMASK = 60 - SYS_CHROOT = 61 - SYS_USTAT = 62 - SYS_DUP2 = 63 - SYS_GETPPID = 64 - SYS_GETPGRP = 65 - SYS_SETSID = 66 - SYS_SIGACTION = 67 - SYS_SGETMASK = 68 - SYS_SSETMASK = 69 - SYS_SETREUID = 70 - SYS_SETREGID = 71 - SYS_SIGSUSPEND = 72 - SYS_SIGPENDING = 73 - SYS_SETHOSTNAME = 74 - SYS_SETRLIMIT = 75 - SYS_GETRLIMIT = 76 - SYS_GETRUSAGE = 77 - SYS_GETTIMEOFDAY = 78 - SYS_SETTIMEOFDAY = 79 - SYS_GETGROUPS = 80 - SYS_SETGROUPS = 81 - SYS_SELECT = 82 - SYS_SYMLINK = 83 - SYS_OLDLSTAT = 84 - SYS_READLINK = 85 - SYS_USELIB = 86 - SYS_SWAPON = 87 - SYS_REBOOT = 88 - SYS_READDIR = 89 - SYS_MMAP = 90 - SYS_MUNMAP = 91 - SYS_TRUNCATE = 92 - SYS_FTRUNCATE = 93 - SYS_FCHMOD = 94 - SYS_FCHOWN = 95 - SYS_GETPRIORITY = 96 - SYS_SETPRIORITY = 97 - SYS_PROFIL = 98 - SYS_STATFS = 99 - SYS_FSTATFS = 100 - SYS_IOPERM = 101 - SYS_SOCKETCALL = 102 - SYS_SYSLOG = 103 - SYS_SETITIMER = 104 - SYS_GETITIMER = 105 - SYS_STAT = 106 - SYS_LSTAT = 107 - SYS_FSTAT = 108 - SYS_OLDUNAME = 109 - SYS_IOPL = 110 - SYS_VHANGUP = 111 - SYS_IDLE = 112 - SYS_VM86OLD = 113 - SYS_WAIT4 = 114 - SYS_SWAPOFF = 115 - SYS_SYSINFO = 116 - SYS_IPC = 117 - SYS_FSYNC = 118 - SYS_SIGRETURN = 119 - SYS_CLONE = 120 - SYS_SETDOMAINNAME = 121 - SYS_UNAME = 122 - SYS_MODIFY_LDT = 123 - SYS_ADJTIMEX = 124 - SYS_MPROTECT = 125 - SYS_SIGPROCMASK = 126 - SYS_CREATE_MODULE = 127 - SYS_INIT_MODULE = 128 - SYS_DELETE_MODULE = 129 - SYS_GET_KERNEL_SYMS = 130 - SYS_QUOTACTL = 131 - SYS_GETPGID = 132 - SYS_FCHDIR = 133 - SYS_BDFLUSH = 134 - SYS_SYSFS = 135 - SYS_PERSONALITY = 136 - SYS_AFS_SYSCALL = 137 - SYS_SETFSUID = 138 - SYS_SETFSGID = 139 - SYS__LLSEEK = 140 - SYS_GETDENTS = 141 - SYS__NEWSELECT = 142 - SYS_FLOCK = 143 - SYS_MSYNC = 144 - SYS_READV = 145 - SYS_WRITEV = 146 - SYS_GETSID = 147 - SYS_FDATASYNC = 148 - SYS__SYSCTL = 149 - SYS_MLOCK = 150 - SYS_MUNLOCK = 151 - SYS_MLOCKALL = 152 - SYS_MUNLOCKALL = 153 - SYS_SCHED_SETPARAM = 154 - SYS_SCHED_GETPARAM = 155 - SYS_SCHED_SETSCHEDULER = 156 - SYS_SCHED_GETSCHEDULER = 157 - SYS_SCHED_YIELD = 158 - SYS_SCHED_GET_PRIORITY_MAX = 159 - SYS_SCHED_GET_PRIORITY_MIN = 160 - SYS_SCHED_RR_GET_INTERVAL = 161 - SYS_NANOSLEEP = 162 - SYS_MREMAP = 163 - SYS_SETRESUID = 164 - SYS_GETRESUID = 165 - SYS_VM86 = 166 - SYS_QUERY_MODULE = 167 - SYS_POLL = 168 - SYS_NFSSERVCTL = 169 - SYS_SETRESGID = 170 - SYS_GETRESGID = 171 - SYS_PRCTL = 172 - SYS_RT_SIGRETURN = 173 - SYS_RT_SIGACTION = 174 - SYS_RT_SIGPROCMASK = 175 - SYS_RT_SIGPENDING = 176 - SYS_RT_SIGTIMEDWAIT = 177 - SYS_RT_SIGQUEUEINFO = 178 - SYS_RT_SIGSUSPEND = 179 - SYS_PREAD64 = 180 - SYS_PWRITE64 = 181 - SYS_CHOWN = 182 - SYS_GETCWD = 183 - SYS_CAPGET = 184 - SYS_CAPSET = 185 - SYS_SIGALTSTACK = 186 - SYS_SENDFILE = 187 - SYS_GETPMSG = 188 - SYS_PUTPMSG = 189 - SYS_VFORK = 190 - SYS_UGETRLIMIT = 191 - SYS_MMAP2 = 192 - SYS_TRUNCATE64 = 193 - SYS_FTRUNCATE64 = 194 - SYS_STAT64 = 195 - SYS_LSTAT64 = 196 - SYS_FSTAT64 = 197 - SYS_LCHOWN32 = 198 - SYS_GETUID32 = 199 - SYS_GETGID32 = 200 - SYS_GETEUID32 = 201 - SYS_GETEGID32 = 202 - SYS_SETREUID32 = 203 - SYS_SETREGID32 = 204 - SYS_GETGROUPS32 = 205 - SYS_SETGROUPS32 = 206 - SYS_FCHOWN32 = 207 - SYS_SETRESUID32 = 208 - SYS_GETRESUID32 = 209 - SYS_SETRESGID32 = 210 - SYS_GETRESGID32 = 211 - SYS_CHOWN32 = 212 - SYS_SETUID32 = 213 - SYS_SETGID32 = 214 - SYS_SETFSUID32 = 215 - SYS_SETFSGID32 = 216 - SYS_PIVOT_ROOT = 217 - SYS_MINCORE = 218 - SYS_MADVISE = 219 - SYS_GETDENTS64 = 220 - SYS_FCNTL64 = 221 - SYS_GETTID = 224 - SYS_READAHEAD = 225 - SYS_SETXATTR = 226 - SYS_LSETXATTR = 227 - SYS_FSETXATTR = 228 - SYS_GETXATTR = 229 - SYS_LGETXATTR = 230 - SYS_FGETXATTR = 231 - SYS_LISTXATTR = 232 - SYS_LLISTXATTR = 233 - SYS_FLISTXATTR = 234 - SYS_REMOVEXATTR = 235 - SYS_LREMOVEXATTR = 236 - SYS_FREMOVEXATTR = 237 - SYS_TKILL = 238 - SYS_SENDFILE64 = 239 - SYS_FUTEX = 240 - SYS_SCHED_SETAFFINITY = 241 - SYS_SCHED_GETAFFINITY = 242 - SYS_SET_THREAD_AREA = 243 - SYS_GET_THREAD_AREA = 244 - SYS_IO_SETUP = 245 - SYS_IO_DESTROY = 246 - SYS_IO_GETEVENTS = 247 - SYS_IO_SUBMIT = 248 - SYS_IO_CANCEL = 249 - SYS_FADVISE64 = 250 - SYS_EXIT_GROUP = 252 - SYS_LOOKUP_DCOOKIE = 253 - SYS_EPOLL_CREATE = 254 - SYS_EPOLL_CTL = 255 - SYS_EPOLL_WAIT = 256 - SYS_REMAP_FILE_PAGES = 257 - SYS_SET_TID_ADDRESS = 258 - SYS_TIMER_CREATE = 259 - SYS_TIMER_SETTIME = 260 - SYS_TIMER_GETTIME = 261 - SYS_TIMER_GETOVERRUN = 262 - SYS_TIMER_DELETE = 263 - SYS_CLOCK_SETTIME = 264 - SYS_CLOCK_GETTIME = 265 - SYS_CLOCK_GETRES = 266 - SYS_CLOCK_NANOSLEEP = 267 - SYS_STATFS64 = 268 - SYS_FSTATFS64 = 269 - SYS_TGKILL = 270 - SYS_UTIMES = 271 - SYS_FADVISE64_64 = 272 - SYS_VSERVER = 273 - SYS_MBIND = 274 - SYS_GET_MEMPOLICY = 275 - SYS_SET_MEMPOLICY = 276 - SYS_MQ_OPEN = 277 - SYS_MQ_UNLINK = 278 - SYS_MQ_TIMEDSEND = 279 - SYS_MQ_TIMEDRECEIVE = 280 - SYS_MQ_NOTIFY = 281 - SYS_MQ_GETSETATTR = 282 - SYS_KEXEC_LOAD = 283 - SYS_WAITID = 284 - SYS_ADD_KEY = 286 - SYS_REQUEST_KEY = 287 - SYS_KEYCTL = 288 - SYS_IOPRIO_SET = 289 - SYS_IOPRIO_GET = 290 - SYS_INOTIFY_INIT = 291 - SYS_INOTIFY_ADD_WATCH = 292 - SYS_INOTIFY_RM_WATCH = 293 - SYS_MIGRATE_PAGES = 294 - SYS_OPENAT = 295 - SYS_MKDIRAT = 296 - SYS_MKNODAT = 297 - SYS_FCHOWNAT = 298 - SYS_FUTIMESAT = 299 - SYS_FSTATAT64 = 300 - SYS_UNLINKAT = 301 - SYS_RENAMEAT = 302 - SYS_LINKAT = 303 - SYS_SYMLINKAT = 304 - SYS_READLINKAT = 305 - SYS_FCHMODAT = 306 - SYS_FACCESSAT = 307 - SYS_PSELECT6 = 308 - SYS_PPOLL = 309 - SYS_UNSHARE = 310 - SYS_SET_ROBUST_LIST = 311 - SYS_GET_ROBUST_LIST = 312 - SYS_SPLICE = 313 - SYS_SYNC_FILE_RANGE = 314 - SYS_TEE = 315 - SYS_VMSPLICE = 316 - SYS_MOVE_PAGES = 317 - SYS_GETCPU = 318 - SYS_EPOLL_PWAIT = 319 - SYS_UTIMENSAT = 320 - SYS_SIGNALFD = 321 - SYS_TIMERFD_CREATE = 322 - SYS_EVENTFD = 323 - SYS_FALLOCATE = 324 - SYS_TIMERFD_SETTIME = 325 - SYS_TIMERFD_GETTIME = 326 - SYS_SIGNALFD4 = 327 - SYS_EVENTFD2 = 328 - SYS_EPOLL_CREATE1 = 329 - SYS_DUP3 = 330 - SYS_PIPE2 = 331 - SYS_INOTIFY_INIT1 = 332 - SYS_PREADV = 333 - SYS_PWRITEV = 334 - SYS_RT_TGSIGQUEUEINFO = 335 - SYS_PERF_EVENT_OPEN = 336 - SYS_RECVMMSG = 337 - SYS_FANOTIFY_INIT = 338 - SYS_FANOTIFY_MARK = 339 - SYS_PRLIMIT64 = 340 - SYS_NAME_TO_HANDLE_AT = 341 - SYS_OPEN_BY_HANDLE_AT = 342 - SYS_CLOCK_ADJTIME = 343 - SYS_SYNCFS = 344 - SYS_SENDMMSG = 345 - SYS_SETNS = 346 - SYS_PROCESS_VM_READV = 347 - SYS_PROCESS_VM_WRITEV = 348 - SYS_KCMP = 349 - SYS_FINIT_MODULE = 350 - SYS_SCHED_SETATTR = 351 - SYS_SCHED_GETATTR = 352 - SYS_RENAMEAT2 = 353 - SYS_SECCOMP = 354 - SYS_GETRANDOM = 355 - SYS_MEMFD_CREATE = 356 - SYS_BPF = 357 - SYS_EXECVEAT = 358 - SYS_SOCKET = 359 - SYS_SOCKETPAIR = 360 - SYS_BIND = 361 - SYS_CONNECT = 362 - SYS_LISTEN = 363 - SYS_ACCEPT4 = 364 - SYS_GETSOCKOPT = 365 - SYS_SETSOCKOPT = 366 - SYS_GETSOCKNAME = 367 - SYS_GETPEERNAME = 368 - SYS_SENDTO = 369 - SYS_SENDMSG = 370 - SYS_RECVFROM = 371 - SYS_RECVMSG = 372 - SYS_SHUTDOWN = 373 - SYS_USERFAULTFD = 374 - SYS_MEMBARRIER = 375 - SYS_MLOCK2 = 376 - SYS_COPY_FILE_RANGE = 377 - SYS_PREADV2 = 378 - SYS_PWRITEV2 = 379 - SYS_PKEY_MPROTECT = 380 - SYS_PKEY_ALLOC = 381 - SYS_PKEY_FREE = 382 - SYS_STATX = 383 - SYS_ARCH_PRCTL = 384 - SYS_IO_PGETEVENTS = 385 - SYS_RSEQ = 386 - SYS_SEMGET = 393 - SYS_SEMCTL = 394 - SYS_SHMGET = 395 - SYS_SHMCTL = 396 - SYS_SHMAT = 397 - SYS_SHMDT = 398 - SYS_MSGGET = 399 - SYS_MSGSND = 400 - SYS_MSGRCV = 401 - SYS_MSGCTL = 402 - SYS_CLOCK_GETTIME64 = 403 - SYS_CLOCK_SETTIME64 = 404 - SYS_CLOCK_ADJTIME64 = 405 - SYS_CLOCK_GETRES_TIME64 = 406 - SYS_CLOCK_NANOSLEEP_TIME64 = 407 - SYS_TIMER_GETTIME64 = 408 - SYS_TIMER_SETTIME64 = 409 - SYS_TIMERFD_GETTIME64 = 410 - SYS_TIMERFD_SETTIME64 = 411 - SYS_UTIMENSAT_TIME64 = 412 - SYS_PSELECT6_TIME64 = 413 - SYS_PPOLL_TIME64 = 414 - SYS_IO_PGETEVENTS_TIME64 = 416 - SYS_RECVMMSG_TIME64 = 417 - SYS_MQ_TIMEDSEND_TIME64 = 418 - SYS_MQ_TIMEDRECEIVE_TIME64 = 419 - SYS_SEMTIMEDOP_TIME64 = 420 - SYS_RT_SIGTIMEDWAIT_TIME64 = 421 - SYS_FUTEX_TIME64 = 422 - SYS_SCHED_RR_GET_INTERVAL_TIME64 = 423 - SYS_PIDFD_SEND_SIGNAL = 424 - SYS_IO_URING_SETUP = 425 - SYS_IO_URING_ENTER = 426 - SYS_IO_URING_REGISTER = 427 - SYS_OPEN_TREE = 428 - SYS_MOVE_MOUNT = 429 - SYS_FSOPEN = 430 - SYS_FSCONFIG = 431 - SYS_FSMOUNT = 432 - SYS_FSPICK = 433 - SYS_PIDFD_OPEN = 434 - SYS_CLONE3 = 435 - SYS_CLOSE_RANGE = 436 - SYS_OPENAT2 = 437 - SYS_PIDFD_GETFD = 438 - SYS_FACCESSAT2 = 439 - SYS_PROCESS_MADVISE = 440 - SYS_EPOLL_PWAIT2 = 441 - SYS_MOUNT_SETATTR = 442 - SYS_QUOTACTL_FD = 443 - SYS_LANDLOCK_CREATE_RULESET = 444 - SYS_LANDLOCK_ADD_RULE = 445 - SYS_LANDLOCK_RESTRICT_SELF = 446 - SYS_MEMFD_SECRET = 447 - SYS_PROCESS_MRELEASE = 448 - SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go deleted file mode 100644 index 12ff341..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +++ /dev/null @@ -1,372 +0,0 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/amd64/include -m64 /tmp/amd64/include/asm/unistd.h -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build amd64 && linux -// +build amd64,linux - -package unix - -const ( - SYS_READ = 0 - SYS_WRITE = 1 - SYS_OPEN = 2 - SYS_CLOSE = 3 - SYS_STAT = 4 - SYS_FSTAT = 5 - SYS_LSTAT = 6 - SYS_POLL = 7 - SYS_LSEEK = 8 - SYS_MMAP = 9 - SYS_MPROTECT = 10 - SYS_MUNMAP = 11 - SYS_BRK = 12 - SYS_RT_SIGACTION = 13 - SYS_RT_SIGPROCMASK = 14 - SYS_RT_SIGRETURN = 15 - SYS_IOCTL = 16 - SYS_PREAD64 = 17 - SYS_PWRITE64 = 18 - SYS_READV = 19 - SYS_WRITEV = 20 - SYS_ACCESS = 21 - SYS_PIPE = 22 - SYS_SELECT = 23 - SYS_SCHED_YIELD = 24 - SYS_MREMAP = 25 - SYS_MSYNC = 26 - SYS_MINCORE = 27 - SYS_MADVISE = 28 - SYS_SHMGET = 29 - SYS_SHMAT = 30 - SYS_SHMCTL = 31 - SYS_DUP = 32 - SYS_DUP2 = 33 - SYS_PAUSE = 34 - SYS_NANOSLEEP = 35 - SYS_GETITIMER = 36 - SYS_ALARM = 37 - SYS_SETITIMER = 38 - SYS_GETPID = 39 - SYS_SENDFILE = 40 - SYS_SOCKET = 41 - SYS_CONNECT = 42 - SYS_ACCEPT = 43 - SYS_SENDTO = 44 - SYS_RECVFROM = 45 - SYS_SENDMSG = 46 - SYS_RECVMSG = 47 - SYS_SHUTDOWN = 48 - SYS_BIND = 49 - SYS_LISTEN = 50 - SYS_GETSOCKNAME = 51 - SYS_GETPEERNAME = 52 - SYS_SOCKETPAIR = 53 - SYS_SETSOCKOPT = 54 - SYS_GETSOCKOPT = 55 - SYS_CLONE = 56 - SYS_FORK = 57 - SYS_VFORK = 58 - SYS_EXECVE = 59 - SYS_EXIT = 60 - SYS_WAIT4 = 61 - SYS_KILL = 62 - SYS_UNAME = 63 - SYS_SEMGET = 64 - SYS_SEMOP = 65 - SYS_SEMCTL = 66 - SYS_SHMDT = 67 - SYS_MSGGET = 68 - SYS_MSGSND = 69 - SYS_MSGRCV = 70 - SYS_MSGCTL = 71 - SYS_FCNTL = 72 - SYS_FLOCK = 73 - SYS_FSYNC = 74 - SYS_FDATASYNC = 75 - SYS_TRUNCATE = 76 - SYS_FTRUNCATE = 77 - SYS_GETDENTS = 78 - SYS_GETCWD = 79 - SYS_CHDIR = 80 - SYS_FCHDIR = 81 - SYS_RENAME = 82 - SYS_MKDIR = 83 - SYS_RMDIR = 84 - SYS_CREAT = 85 - SYS_LINK = 86 - SYS_UNLINK = 87 - SYS_SYMLINK = 88 - SYS_READLINK = 89 - SYS_CHMOD = 90 - SYS_FCHMOD = 91 - SYS_CHOWN = 92 - SYS_FCHOWN = 93 - SYS_LCHOWN = 94 - SYS_UMASK = 95 - SYS_GETTIMEOFDAY = 96 - SYS_GETRLIMIT = 97 - SYS_GETRUSAGE = 98 - SYS_SYSINFO = 99 - SYS_TIMES = 100 - SYS_PTRACE = 101 - SYS_GETUID = 102 - SYS_SYSLOG = 103 - SYS_GETGID = 104 - SYS_SETUID = 105 - SYS_SETGID = 106 - SYS_GETEUID = 107 - SYS_GETEGID = 108 - SYS_SETPGID = 109 - SYS_GETPPID = 110 - SYS_GETPGRP = 111 - SYS_SETSID = 112 - SYS_SETREUID = 113 - SYS_SETREGID = 114 - SYS_GETGROUPS = 115 - SYS_SETGROUPS = 116 - SYS_SETRESUID = 117 - SYS_GETRESUID = 118 - SYS_SETRESGID = 119 - SYS_GETRESGID = 120 - SYS_GETPGID = 121 - SYS_SETFSUID = 122 - SYS_SETFSGID = 123 - SYS_GETSID = 124 - SYS_CAPGET = 125 - SYS_CAPSET = 126 - SYS_RT_SIGPENDING = 127 - SYS_RT_SIGTIMEDWAIT = 128 - SYS_RT_SIGQUEUEINFO = 129 - SYS_RT_SIGSUSPEND = 130 - SYS_SIGALTSTACK = 131 - SYS_UTIME = 132 - SYS_MKNOD = 133 - SYS_USELIB = 134 - SYS_PERSONALITY = 135 - SYS_USTAT = 136 - SYS_STATFS = 137 - SYS_FSTATFS = 138 - SYS_SYSFS = 139 - SYS_GETPRIORITY = 140 - SYS_SETPRIORITY = 141 - SYS_SCHED_SETPARAM = 142 - SYS_SCHED_GETPARAM = 143 - SYS_SCHED_SETSCHEDULER = 144 - SYS_SCHED_GETSCHEDULER = 145 - SYS_SCHED_GET_PRIORITY_MAX = 146 - SYS_SCHED_GET_PRIORITY_MIN = 147 - SYS_SCHED_RR_GET_INTERVAL = 148 - SYS_MLOCK = 149 - SYS_MUNLOCK = 150 - SYS_MLOCKALL = 151 - SYS_MUNLOCKALL = 152 - SYS_VHANGUP = 153 - SYS_MODIFY_LDT = 154 - SYS_PIVOT_ROOT = 155 - SYS__SYSCTL = 156 - SYS_PRCTL = 157 - SYS_ARCH_PRCTL = 158 - SYS_ADJTIMEX = 159 - SYS_SETRLIMIT = 160 - SYS_CHROOT = 161 - SYS_SYNC = 162 - SYS_ACCT = 163 - SYS_SETTIMEOFDAY = 164 - SYS_MOUNT = 165 - SYS_UMOUNT2 = 166 - SYS_SWAPON = 167 - SYS_SWAPOFF = 168 - SYS_REBOOT = 169 - SYS_SETHOSTNAME = 170 - SYS_SETDOMAINNAME = 171 - SYS_IOPL = 172 - SYS_IOPERM = 173 - SYS_CREATE_MODULE = 174 - SYS_INIT_MODULE = 175 - SYS_DELETE_MODULE = 176 - SYS_GET_KERNEL_SYMS = 177 - SYS_QUERY_MODULE = 178 - SYS_QUOTACTL = 179 - SYS_NFSSERVCTL = 180 - SYS_GETPMSG = 181 - SYS_PUTPMSG = 182 - SYS_AFS_SYSCALL = 183 - SYS_TUXCALL = 184 - SYS_SECURITY = 185 - SYS_GETTID = 186 - SYS_READAHEAD = 187 - SYS_SETXATTR = 188 - SYS_LSETXATTR = 189 - SYS_FSETXATTR = 190 - SYS_GETXATTR = 191 - SYS_LGETXATTR = 192 - SYS_FGETXATTR = 193 - SYS_LISTXATTR = 194 - SYS_LLISTXATTR = 195 - SYS_FLISTXATTR = 196 - SYS_REMOVEXATTR = 197 - SYS_LREMOVEXATTR = 198 - SYS_FREMOVEXATTR = 199 - SYS_TKILL = 200 - SYS_TIME = 201 - SYS_FUTEX = 202 - SYS_SCHED_SETAFFINITY = 203 - SYS_SCHED_GETAFFINITY = 204 - SYS_SET_THREAD_AREA = 205 - SYS_IO_SETUP = 206 - SYS_IO_DESTROY = 207 - SYS_IO_GETEVENTS = 208 - SYS_IO_SUBMIT = 209 - SYS_IO_CANCEL = 210 - SYS_GET_THREAD_AREA = 211 - SYS_LOOKUP_DCOOKIE = 212 - SYS_EPOLL_CREATE = 213 - SYS_EPOLL_CTL_OLD = 214 - SYS_EPOLL_WAIT_OLD = 215 - SYS_REMAP_FILE_PAGES = 216 - SYS_GETDENTS64 = 217 - SYS_SET_TID_ADDRESS = 218 - SYS_RESTART_SYSCALL = 219 - SYS_SEMTIMEDOP = 220 - SYS_FADVISE64 = 221 - SYS_TIMER_CREATE = 222 - SYS_TIMER_SETTIME = 223 - SYS_TIMER_GETTIME = 224 - SYS_TIMER_GETOVERRUN = 225 - SYS_TIMER_DELETE = 226 - SYS_CLOCK_SETTIME = 227 - SYS_CLOCK_GETTIME = 228 - SYS_CLOCK_GETRES = 229 - SYS_CLOCK_NANOSLEEP = 230 - SYS_EXIT_GROUP = 231 - SYS_EPOLL_WAIT = 232 - SYS_EPOLL_CTL = 233 - SYS_TGKILL = 234 - SYS_UTIMES = 235 - SYS_VSERVER = 236 - SYS_MBIND = 237 - SYS_SET_MEMPOLICY = 238 - SYS_GET_MEMPOLICY = 239 - SYS_MQ_OPEN = 240 - SYS_MQ_UNLINK = 241 - SYS_MQ_TIMEDSEND = 242 - SYS_MQ_TIMEDRECEIVE = 243 - SYS_MQ_NOTIFY = 244 - SYS_MQ_GETSETATTR = 245 - SYS_KEXEC_LOAD = 246 - SYS_WAITID = 247 - SYS_ADD_KEY = 248 - SYS_REQUEST_KEY = 249 - SYS_KEYCTL = 250 - SYS_IOPRIO_SET = 251 - SYS_IOPRIO_GET = 252 - SYS_INOTIFY_INIT = 253 - SYS_INOTIFY_ADD_WATCH = 254 - SYS_INOTIFY_RM_WATCH = 255 - SYS_MIGRATE_PAGES = 256 - SYS_OPENAT = 257 - SYS_MKDIRAT = 258 - SYS_MKNODAT = 259 - SYS_FCHOWNAT = 260 - SYS_FUTIMESAT = 261 - SYS_NEWFSTATAT = 262 - SYS_UNLINKAT = 263 - SYS_RENAMEAT = 264 - SYS_LINKAT = 265 - SYS_SYMLINKAT = 266 - SYS_READLINKAT = 267 - SYS_FCHMODAT = 268 - SYS_FACCESSAT = 269 - SYS_PSELECT6 = 270 - SYS_PPOLL = 271 - SYS_UNSHARE = 272 - SYS_SET_ROBUST_LIST = 273 - SYS_GET_ROBUST_LIST = 274 - SYS_SPLICE = 275 - SYS_TEE = 276 - SYS_SYNC_FILE_RANGE = 277 - SYS_VMSPLICE = 278 - SYS_MOVE_PAGES = 279 - SYS_UTIMENSAT = 280 - SYS_EPOLL_PWAIT = 281 - SYS_SIGNALFD = 282 - SYS_TIMERFD_CREATE = 283 - SYS_EVENTFD = 284 - SYS_FALLOCATE = 285 - SYS_TIMERFD_SETTIME = 286 - SYS_TIMERFD_GETTIME = 287 - SYS_ACCEPT4 = 288 - SYS_SIGNALFD4 = 289 - SYS_EVENTFD2 = 290 - SYS_EPOLL_CREATE1 = 291 - SYS_DUP3 = 292 - SYS_PIPE2 = 293 - SYS_INOTIFY_INIT1 = 294 - SYS_PREADV = 295 - SYS_PWRITEV = 296 - SYS_RT_TGSIGQUEUEINFO = 297 - SYS_PERF_EVENT_OPEN = 298 - SYS_RECVMMSG = 299 - SYS_FANOTIFY_INIT = 300 - SYS_FANOTIFY_MARK = 301 - SYS_PRLIMIT64 = 302 - SYS_NAME_TO_HANDLE_AT = 303 - SYS_OPEN_BY_HANDLE_AT = 304 - SYS_CLOCK_ADJTIME = 305 - SYS_SYNCFS = 306 - SYS_SENDMMSG = 307 - SYS_SETNS = 308 - SYS_GETCPU = 309 - SYS_PROCESS_VM_READV = 310 - SYS_PROCESS_VM_WRITEV = 311 - SYS_KCMP = 312 - SYS_FINIT_MODULE = 313 - SYS_SCHED_SETATTR = 314 - SYS_SCHED_GETATTR = 315 - SYS_RENAMEAT2 = 316 - SYS_SECCOMP = 317 - SYS_GETRANDOM = 318 - SYS_MEMFD_CREATE = 319 - SYS_KEXEC_FILE_LOAD = 320 - SYS_BPF = 321 - SYS_EXECVEAT = 322 - SYS_USERFAULTFD = 323 - SYS_MEMBARRIER = 324 - SYS_MLOCK2 = 325 - SYS_COPY_FILE_RANGE = 326 - SYS_PREADV2 = 327 - SYS_PWRITEV2 = 328 - SYS_PKEY_MPROTECT = 329 - SYS_PKEY_ALLOC = 330 - SYS_PKEY_FREE = 331 - SYS_STATX = 332 - SYS_IO_PGETEVENTS = 333 - SYS_RSEQ = 334 - SYS_PIDFD_SEND_SIGNAL = 424 - SYS_IO_URING_SETUP = 425 - SYS_IO_URING_ENTER = 426 - SYS_IO_URING_REGISTER = 427 - SYS_OPEN_TREE = 428 - SYS_MOVE_MOUNT = 429 - SYS_FSOPEN = 430 - SYS_FSCONFIG = 431 - SYS_FSMOUNT = 432 - SYS_FSPICK = 433 - SYS_PIDFD_OPEN = 434 - SYS_CLONE3 = 435 - SYS_CLOSE_RANGE = 436 - SYS_OPENAT2 = 437 - SYS_PIDFD_GETFD = 438 - SYS_FACCESSAT2 = 439 - SYS_PROCESS_MADVISE = 440 - SYS_EPOLL_PWAIT2 = 441 - SYS_MOUNT_SETATTR = 442 - SYS_QUOTACTL_FD = 443 - SYS_LANDLOCK_CREATE_RULESET = 444 - SYS_LANDLOCK_ADD_RULE = 445 - SYS_LANDLOCK_RESTRICT_SELF = 446 - SYS_MEMFD_SECRET = 447 - SYS_PROCESS_MRELEASE = 448 - SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go deleted file mode 100644 index c3fb5e7..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +++ /dev/null @@ -1,414 +0,0 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/arm/include /tmp/arm/include/asm/unistd.h -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm && linux -// +build arm,linux - -package unix - -const ( - SYS_SYSCALL_MASK = 0 - SYS_RESTART_SYSCALL = 0 - SYS_EXIT = 1 - SYS_FORK = 2 - SYS_READ = 3 - SYS_WRITE = 4 - SYS_OPEN = 5 - SYS_CLOSE = 6 - SYS_CREAT = 8 - SYS_LINK = 9 - SYS_UNLINK = 10 - SYS_EXECVE = 11 - SYS_CHDIR = 12 - SYS_MKNOD = 14 - SYS_CHMOD = 15 - SYS_LCHOWN = 16 - SYS_LSEEK = 19 - SYS_GETPID = 20 - SYS_MOUNT = 21 - SYS_SETUID = 23 - SYS_GETUID = 24 - SYS_PTRACE = 26 - SYS_PAUSE = 29 - SYS_ACCESS = 33 - SYS_NICE = 34 - SYS_SYNC = 36 - SYS_KILL = 37 - SYS_RENAME = 38 - SYS_MKDIR = 39 - SYS_RMDIR = 40 - SYS_DUP = 41 - SYS_PIPE = 42 - SYS_TIMES = 43 - SYS_BRK = 45 - SYS_SETGID = 46 - SYS_GETGID = 47 - SYS_GETEUID = 49 - SYS_GETEGID = 50 - SYS_ACCT = 51 - SYS_UMOUNT2 = 52 - SYS_IOCTL = 54 - SYS_FCNTL = 55 - SYS_SETPGID = 57 - SYS_UMASK = 60 - SYS_CHROOT = 61 - SYS_USTAT = 62 - SYS_DUP2 = 63 - SYS_GETPPID = 64 - SYS_GETPGRP = 65 - SYS_SETSID = 66 - SYS_SIGACTION = 67 - SYS_SETREUID = 70 - SYS_SETREGID = 71 - SYS_SIGSUSPEND = 72 - SYS_SIGPENDING = 73 - SYS_SETHOSTNAME = 74 - SYS_SETRLIMIT = 75 - SYS_GETRUSAGE = 77 - SYS_GETTIMEOFDAY = 78 - SYS_SETTIMEOFDAY = 79 - SYS_GETGROUPS = 80 - SYS_SETGROUPS = 81 - SYS_SYMLINK = 83 - SYS_READLINK = 85 - SYS_USELIB = 86 - SYS_SWAPON = 87 - SYS_REBOOT = 88 - SYS_MUNMAP = 91 - SYS_TRUNCATE = 92 - SYS_FTRUNCATE = 93 - SYS_FCHMOD = 94 - SYS_FCHOWN = 95 - SYS_GETPRIORITY = 96 - SYS_SETPRIORITY = 97 - SYS_STATFS = 99 - SYS_FSTATFS = 100 - SYS_SYSLOG = 103 - SYS_SETITIMER = 104 - SYS_GETITIMER = 105 - SYS_STAT = 106 - SYS_LSTAT = 107 - SYS_FSTAT = 108 - SYS_VHANGUP = 111 - SYS_WAIT4 = 114 - SYS_SWAPOFF = 115 - SYS_SYSINFO = 116 - SYS_FSYNC = 118 - SYS_SIGRETURN = 119 - SYS_CLONE = 120 - SYS_SETDOMAINNAME = 121 - SYS_UNAME = 122 - SYS_ADJTIMEX = 124 - SYS_MPROTECT = 125 - SYS_SIGPROCMASK = 126 - SYS_INIT_MODULE = 128 - SYS_DELETE_MODULE = 129 - SYS_QUOTACTL = 131 - SYS_GETPGID = 132 - SYS_FCHDIR = 133 - SYS_BDFLUSH = 134 - SYS_SYSFS = 135 - SYS_PERSONALITY = 136 - SYS_SETFSUID = 138 - SYS_SETFSGID = 139 - SYS__LLSEEK = 140 - SYS_GETDENTS = 141 - SYS__NEWSELECT = 142 - SYS_FLOCK = 143 - SYS_MSYNC = 144 - SYS_READV = 145 - SYS_WRITEV = 146 - SYS_GETSID = 147 - SYS_FDATASYNC = 148 - SYS__SYSCTL = 149 - SYS_MLOCK = 150 - SYS_MUNLOCK = 151 - SYS_MLOCKALL = 152 - SYS_MUNLOCKALL = 153 - SYS_SCHED_SETPARAM = 154 - SYS_SCHED_GETPARAM = 155 - SYS_SCHED_SETSCHEDULER = 156 - SYS_SCHED_GETSCHEDULER = 157 - SYS_SCHED_YIELD = 158 - SYS_SCHED_GET_PRIORITY_MAX = 159 - SYS_SCHED_GET_PRIORITY_MIN = 160 - SYS_SCHED_RR_GET_INTERVAL = 161 - SYS_NANOSLEEP = 162 - SYS_MREMAP = 163 - SYS_SETRESUID = 164 - SYS_GETRESUID = 165 - SYS_POLL = 168 - SYS_NFSSERVCTL = 169 - SYS_SETRESGID = 170 - SYS_GETRESGID = 171 - SYS_PRCTL = 172 - SYS_RT_SIGRETURN = 173 - SYS_RT_SIGACTION = 174 - SYS_RT_SIGPROCMASK = 175 - SYS_RT_SIGPENDING = 176 - SYS_RT_SIGTIMEDWAIT = 177 - SYS_RT_SIGQUEUEINFO = 178 - SYS_RT_SIGSUSPEND = 179 - SYS_PREAD64 = 180 - SYS_PWRITE64 = 181 - SYS_CHOWN = 182 - SYS_GETCWD = 183 - SYS_CAPGET = 184 - SYS_CAPSET = 185 - SYS_SIGALTSTACK = 186 - SYS_SENDFILE = 187 - SYS_VFORK = 190 - SYS_UGETRLIMIT = 191 - SYS_MMAP2 = 192 - SYS_TRUNCATE64 = 193 - SYS_FTRUNCATE64 = 194 - SYS_STAT64 = 195 - SYS_LSTAT64 = 196 - SYS_FSTAT64 = 197 - SYS_LCHOWN32 = 198 - SYS_GETUID32 = 199 - SYS_GETGID32 = 200 - SYS_GETEUID32 = 201 - SYS_GETEGID32 = 202 - SYS_SETREUID32 = 203 - SYS_SETREGID32 = 204 - SYS_GETGROUPS32 = 205 - SYS_SETGROUPS32 = 206 - SYS_FCHOWN32 = 207 - SYS_SETRESUID32 = 208 - SYS_GETRESUID32 = 209 - SYS_SETRESGID32 = 210 - SYS_GETRESGID32 = 211 - SYS_CHOWN32 = 212 - SYS_SETUID32 = 213 - SYS_SETGID32 = 214 - SYS_SETFSUID32 = 215 - SYS_SETFSGID32 = 216 - SYS_GETDENTS64 = 217 - SYS_PIVOT_ROOT = 218 - SYS_MINCORE = 219 - SYS_MADVISE = 220 - SYS_FCNTL64 = 221 - SYS_GETTID = 224 - SYS_READAHEAD = 225 - SYS_SETXATTR = 226 - SYS_LSETXATTR = 227 - SYS_FSETXATTR = 228 - SYS_GETXATTR = 229 - SYS_LGETXATTR = 230 - SYS_FGETXATTR = 231 - SYS_LISTXATTR = 232 - SYS_LLISTXATTR = 233 - SYS_FLISTXATTR = 234 - SYS_REMOVEXATTR = 235 - SYS_LREMOVEXATTR = 236 - SYS_FREMOVEXATTR = 237 - SYS_TKILL = 238 - SYS_SENDFILE64 = 239 - SYS_FUTEX = 240 - SYS_SCHED_SETAFFINITY = 241 - SYS_SCHED_GETAFFINITY = 242 - SYS_IO_SETUP = 243 - SYS_IO_DESTROY = 244 - SYS_IO_GETEVENTS = 245 - SYS_IO_SUBMIT = 246 - SYS_IO_CANCEL = 247 - SYS_EXIT_GROUP = 248 - SYS_LOOKUP_DCOOKIE = 249 - SYS_EPOLL_CREATE = 250 - SYS_EPOLL_CTL = 251 - SYS_EPOLL_WAIT = 252 - SYS_REMAP_FILE_PAGES = 253 - SYS_SET_TID_ADDRESS = 256 - SYS_TIMER_CREATE = 257 - SYS_TIMER_SETTIME = 258 - SYS_TIMER_GETTIME = 259 - SYS_TIMER_GETOVERRUN = 260 - SYS_TIMER_DELETE = 261 - SYS_CLOCK_SETTIME = 262 - SYS_CLOCK_GETTIME = 263 - SYS_CLOCK_GETRES = 264 - SYS_CLOCK_NANOSLEEP = 265 - SYS_STATFS64 = 266 - SYS_FSTATFS64 = 267 - SYS_TGKILL = 268 - SYS_UTIMES = 269 - SYS_ARM_FADVISE64_64 = 270 - SYS_PCICONFIG_IOBASE = 271 - SYS_PCICONFIG_READ = 272 - SYS_PCICONFIG_WRITE = 273 - SYS_MQ_OPEN = 274 - SYS_MQ_UNLINK = 275 - SYS_MQ_TIMEDSEND = 276 - SYS_MQ_TIMEDRECEIVE = 277 - SYS_MQ_NOTIFY = 278 - SYS_MQ_GETSETATTR = 279 - SYS_WAITID = 280 - SYS_SOCKET = 281 - SYS_BIND = 282 - SYS_CONNECT = 283 - SYS_LISTEN = 284 - SYS_ACCEPT = 285 - SYS_GETSOCKNAME = 286 - SYS_GETPEERNAME = 287 - SYS_SOCKETPAIR = 288 - SYS_SEND = 289 - SYS_SENDTO = 290 - SYS_RECV = 291 - SYS_RECVFROM = 292 - SYS_SHUTDOWN = 293 - SYS_SETSOCKOPT = 294 - SYS_GETSOCKOPT = 295 - SYS_SENDMSG = 296 - SYS_RECVMSG = 297 - SYS_SEMOP = 298 - SYS_SEMGET = 299 - SYS_SEMCTL = 300 - SYS_MSGSND = 301 - SYS_MSGRCV = 302 - SYS_MSGGET = 303 - SYS_MSGCTL = 304 - SYS_SHMAT = 305 - SYS_SHMDT = 306 - SYS_SHMGET = 307 - SYS_SHMCTL = 308 - SYS_ADD_KEY = 309 - SYS_REQUEST_KEY = 310 - SYS_KEYCTL = 311 - SYS_SEMTIMEDOP = 312 - SYS_VSERVER = 313 - SYS_IOPRIO_SET = 314 - SYS_IOPRIO_GET = 315 - SYS_INOTIFY_INIT = 316 - SYS_INOTIFY_ADD_WATCH = 317 - SYS_INOTIFY_RM_WATCH = 318 - SYS_MBIND = 319 - SYS_GET_MEMPOLICY = 320 - SYS_SET_MEMPOLICY = 321 - SYS_OPENAT = 322 - SYS_MKDIRAT = 323 - SYS_MKNODAT = 324 - SYS_FCHOWNAT = 325 - SYS_FUTIMESAT = 326 - SYS_FSTATAT64 = 327 - SYS_UNLINKAT = 328 - SYS_RENAMEAT = 329 - SYS_LINKAT = 330 - SYS_SYMLINKAT = 331 - SYS_READLINKAT = 332 - SYS_FCHMODAT = 333 - SYS_FACCESSAT = 334 - SYS_PSELECT6 = 335 - SYS_PPOLL = 336 - SYS_UNSHARE = 337 - SYS_SET_ROBUST_LIST = 338 - SYS_GET_ROBUST_LIST = 339 - SYS_SPLICE = 340 - SYS_ARM_SYNC_FILE_RANGE = 341 - SYS_TEE = 342 - SYS_VMSPLICE = 343 - SYS_MOVE_PAGES = 344 - SYS_GETCPU = 345 - SYS_EPOLL_PWAIT = 346 - SYS_KEXEC_LOAD = 347 - SYS_UTIMENSAT = 348 - SYS_SIGNALFD = 349 - SYS_TIMERFD_CREATE = 350 - SYS_EVENTFD = 351 - SYS_FALLOCATE = 352 - SYS_TIMERFD_SETTIME = 353 - SYS_TIMERFD_GETTIME = 354 - SYS_SIGNALFD4 = 355 - SYS_EVENTFD2 = 356 - SYS_EPOLL_CREATE1 = 357 - SYS_DUP3 = 358 - SYS_PIPE2 = 359 - SYS_INOTIFY_INIT1 = 360 - SYS_PREADV = 361 - SYS_PWRITEV = 362 - SYS_RT_TGSIGQUEUEINFO = 363 - SYS_PERF_EVENT_OPEN = 364 - SYS_RECVMMSG = 365 - SYS_ACCEPT4 = 366 - SYS_FANOTIFY_INIT = 367 - SYS_FANOTIFY_MARK = 368 - SYS_PRLIMIT64 = 369 - SYS_NAME_TO_HANDLE_AT = 370 - SYS_OPEN_BY_HANDLE_AT = 371 - SYS_CLOCK_ADJTIME = 372 - SYS_SYNCFS = 373 - SYS_SENDMMSG = 374 - SYS_SETNS = 375 - SYS_PROCESS_VM_READV = 376 - SYS_PROCESS_VM_WRITEV = 377 - SYS_KCMP = 378 - SYS_FINIT_MODULE = 379 - SYS_SCHED_SETATTR = 380 - SYS_SCHED_GETATTR = 381 - SYS_RENAMEAT2 = 382 - SYS_SECCOMP = 383 - SYS_GETRANDOM = 384 - SYS_MEMFD_CREATE = 385 - SYS_BPF = 386 - SYS_EXECVEAT = 387 - SYS_USERFAULTFD = 388 - SYS_MEMBARRIER = 389 - SYS_MLOCK2 = 390 - SYS_COPY_FILE_RANGE = 391 - SYS_PREADV2 = 392 - SYS_PWRITEV2 = 393 - SYS_PKEY_MPROTECT = 394 - SYS_PKEY_ALLOC = 395 - SYS_PKEY_FREE = 396 - SYS_STATX = 397 - SYS_RSEQ = 398 - SYS_IO_PGETEVENTS = 399 - SYS_MIGRATE_PAGES = 400 - SYS_KEXEC_FILE_LOAD = 401 - SYS_CLOCK_GETTIME64 = 403 - SYS_CLOCK_SETTIME64 = 404 - SYS_CLOCK_ADJTIME64 = 405 - SYS_CLOCK_GETRES_TIME64 = 406 - SYS_CLOCK_NANOSLEEP_TIME64 = 407 - SYS_TIMER_GETTIME64 = 408 - SYS_TIMER_SETTIME64 = 409 - SYS_TIMERFD_GETTIME64 = 410 - SYS_TIMERFD_SETTIME64 = 411 - SYS_UTIMENSAT_TIME64 = 412 - SYS_PSELECT6_TIME64 = 413 - SYS_PPOLL_TIME64 = 414 - SYS_IO_PGETEVENTS_TIME64 = 416 - SYS_RECVMMSG_TIME64 = 417 - SYS_MQ_TIMEDSEND_TIME64 = 418 - SYS_MQ_TIMEDRECEIVE_TIME64 = 419 - SYS_SEMTIMEDOP_TIME64 = 420 - SYS_RT_SIGTIMEDWAIT_TIME64 = 421 - SYS_FUTEX_TIME64 = 422 - SYS_SCHED_RR_GET_INTERVAL_TIME64 = 423 - SYS_PIDFD_SEND_SIGNAL = 424 - SYS_IO_URING_SETUP = 425 - SYS_IO_URING_ENTER = 426 - SYS_IO_URING_REGISTER = 427 - SYS_OPEN_TREE = 428 - SYS_MOVE_MOUNT = 429 - SYS_FSOPEN = 430 - SYS_FSCONFIG = 431 - SYS_FSMOUNT = 432 - SYS_FSPICK = 433 - SYS_PIDFD_OPEN = 434 - SYS_CLONE3 = 435 - SYS_CLOSE_RANGE = 436 - SYS_OPENAT2 = 437 - SYS_PIDFD_GETFD = 438 - SYS_FACCESSAT2 = 439 - SYS_PROCESS_MADVISE = 440 - SYS_EPOLL_PWAIT2 = 441 - SYS_MOUNT_SETATTR = 442 - SYS_QUOTACTL_FD = 443 - SYS_LANDLOCK_CREATE_RULESET = 444 - SYS_LANDLOCK_ADD_RULE = 445 - SYS_LANDLOCK_RESTRICT_SELF = 446 - SYS_PROCESS_MRELEASE = 448 - SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go deleted file mode 100644 index 358c847..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +++ /dev/null @@ -1,317 +0,0 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/arm64/include -fsigned-char /tmp/arm64/include/asm/unistd.h -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm64 && linux -// +build arm64,linux - -package unix - -const ( - SYS_IO_SETUP = 0 - SYS_IO_DESTROY = 1 - SYS_IO_SUBMIT = 2 - SYS_IO_CANCEL = 3 - SYS_IO_GETEVENTS = 4 - SYS_SETXATTR = 5 - SYS_LSETXATTR = 6 - SYS_FSETXATTR = 7 - SYS_GETXATTR = 8 - SYS_LGETXATTR = 9 - SYS_FGETXATTR = 10 - SYS_LISTXATTR = 11 - SYS_LLISTXATTR = 12 - SYS_FLISTXATTR = 13 - SYS_REMOVEXATTR = 14 - SYS_LREMOVEXATTR = 15 - SYS_FREMOVEXATTR = 16 - SYS_GETCWD = 17 - SYS_LOOKUP_DCOOKIE = 18 - SYS_EVENTFD2 = 19 - SYS_EPOLL_CREATE1 = 20 - SYS_EPOLL_CTL = 21 - SYS_EPOLL_PWAIT = 22 - SYS_DUP = 23 - SYS_DUP3 = 24 - SYS_FCNTL = 25 - SYS_INOTIFY_INIT1 = 26 - SYS_INOTIFY_ADD_WATCH = 27 - SYS_INOTIFY_RM_WATCH = 28 - SYS_IOCTL = 29 - SYS_IOPRIO_SET = 30 - SYS_IOPRIO_GET = 31 - SYS_FLOCK = 32 - SYS_MKNODAT = 33 - SYS_MKDIRAT = 34 - SYS_UNLINKAT = 35 - SYS_SYMLINKAT = 36 - SYS_LINKAT = 37 - SYS_RENAMEAT = 38 - SYS_UMOUNT2 = 39 - SYS_MOUNT = 40 - SYS_PIVOT_ROOT = 41 - SYS_NFSSERVCTL = 42 - SYS_STATFS = 43 - SYS_FSTATFS = 44 - SYS_TRUNCATE = 45 - SYS_FTRUNCATE = 46 - SYS_FALLOCATE = 47 - SYS_FACCESSAT = 48 - SYS_CHDIR = 49 - SYS_FCHDIR = 50 - SYS_CHROOT = 51 - SYS_FCHMOD = 52 - SYS_FCHMODAT = 53 - SYS_FCHOWNAT = 54 - SYS_FCHOWN = 55 - SYS_OPENAT = 56 - SYS_CLOSE = 57 - SYS_VHANGUP = 58 - SYS_PIPE2 = 59 - SYS_QUOTACTL = 60 - SYS_GETDENTS64 = 61 - SYS_LSEEK = 62 - SYS_READ = 63 - SYS_WRITE = 64 - SYS_READV = 65 - SYS_WRITEV = 66 - SYS_PREAD64 = 67 - SYS_PWRITE64 = 68 - SYS_PREADV = 69 - SYS_PWRITEV = 70 - SYS_SENDFILE = 71 - SYS_PSELECT6 = 72 - SYS_PPOLL = 73 - SYS_SIGNALFD4 = 74 - SYS_VMSPLICE = 75 - SYS_SPLICE = 76 - SYS_TEE = 77 - SYS_READLINKAT = 78 - SYS_FSTATAT = 79 - SYS_FSTAT = 80 - SYS_SYNC = 81 - SYS_FSYNC = 82 - SYS_FDATASYNC = 83 - SYS_SYNC_FILE_RANGE = 84 - SYS_TIMERFD_CREATE = 85 - SYS_TIMERFD_SETTIME = 86 - SYS_TIMERFD_GETTIME = 87 - SYS_UTIMENSAT = 88 - SYS_ACCT = 89 - SYS_CAPGET = 90 - SYS_CAPSET = 91 - SYS_PERSONALITY = 92 - SYS_EXIT = 93 - SYS_EXIT_GROUP = 94 - SYS_WAITID = 95 - SYS_SET_TID_ADDRESS = 96 - SYS_UNSHARE = 97 - SYS_FUTEX = 98 - SYS_SET_ROBUST_LIST = 99 - SYS_GET_ROBUST_LIST = 100 - SYS_NANOSLEEP = 101 - SYS_GETITIMER = 102 - SYS_SETITIMER = 103 - SYS_KEXEC_LOAD = 104 - SYS_INIT_MODULE = 105 - SYS_DELETE_MODULE = 106 - SYS_TIMER_CREATE = 107 - SYS_TIMER_GETTIME = 108 - SYS_TIMER_GETOVERRUN = 109 - SYS_TIMER_SETTIME = 110 - SYS_TIMER_DELETE = 111 - SYS_CLOCK_SETTIME = 112 - SYS_CLOCK_GETTIME = 113 - SYS_CLOCK_GETRES = 114 - SYS_CLOCK_NANOSLEEP = 115 - SYS_SYSLOG = 116 - SYS_PTRACE = 117 - SYS_SCHED_SETPARAM = 118 - SYS_SCHED_SETSCHEDULER = 119 - SYS_SCHED_GETSCHEDULER = 120 - SYS_SCHED_GETPARAM = 121 - SYS_SCHED_SETAFFINITY = 122 - SYS_SCHED_GETAFFINITY = 123 - SYS_SCHED_YIELD = 124 - SYS_SCHED_GET_PRIORITY_MAX = 125 - SYS_SCHED_GET_PRIORITY_MIN = 126 - SYS_SCHED_RR_GET_INTERVAL = 127 - SYS_RESTART_SYSCALL = 128 - SYS_KILL = 129 - SYS_TKILL = 130 - SYS_TGKILL = 131 - SYS_SIGALTSTACK = 132 - SYS_RT_SIGSUSPEND = 133 - SYS_RT_SIGACTION = 134 - SYS_RT_SIGPROCMASK = 135 - SYS_RT_SIGPENDING = 136 - SYS_RT_SIGTIMEDWAIT = 137 - SYS_RT_SIGQUEUEINFO = 138 - SYS_RT_SIGRETURN = 139 - SYS_SETPRIORITY = 140 - SYS_GETPRIORITY = 141 - SYS_REBOOT = 142 - SYS_SETREGID = 143 - SYS_SETGID = 144 - SYS_SETREUID = 145 - SYS_SETUID = 146 - SYS_SETRESUID = 147 - SYS_GETRESUID = 148 - SYS_SETRESGID = 149 - SYS_GETRESGID = 150 - SYS_SETFSUID = 151 - SYS_SETFSGID = 152 - SYS_TIMES = 153 - SYS_SETPGID = 154 - SYS_GETPGID = 155 - SYS_GETSID = 156 - SYS_SETSID = 157 - SYS_GETGROUPS = 158 - SYS_SETGROUPS = 159 - SYS_UNAME = 160 - SYS_SETHOSTNAME = 161 - SYS_SETDOMAINNAME = 162 - SYS_GETRLIMIT = 163 - SYS_SETRLIMIT = 164 - SYS_GETRUSAGE = 165 - SYS_UMASK = 166 - SYS_PRCTL = 167 - SYS_GETCPU = 168 - SYS_GETTIMEOFDAY = 169 - SYS_SETTIMEOFDAY = 170 - SYS_ADJTIMEX = 171 - SYS_GETPID = 172 - SYS_GETPPID = 173 - SYS_GETUID = 174 - SYS_GETEUID = 175 - SYS_GETGID = 176 - SYS_GETEGID = 177 - SYS_GETTID = 178 - SYS_SYSINFO = 179 - SYS_MQ_OPEN = 180 - SYS_MQ_UNLINK = 181 - SYS_MQ_TIMEDSEND = 182 - SYS_MQ_TIMEDRECEIVE = 183 - SYS_MQ_NOTIFY = 184 - SYS_MQ_GETSETATTR = 185 - SYS_MSGGET = 186 - SYS_MSGCTL = 187 - SYS_MSGRCV = 188 - SYS_MSGSND = 189 - SYS_SEMGET = 190 - SYS_SEMCTL = 191 - SYS_SEMTIMEDOP = 192 - SYS_SEMOP = 193 - SYS_SHMGET = 194 - SYS_SHMCTL = 195 - SYS_SHMAT = 196 - SYS_SHMDT = 197 - SYS_SOCKET = 198 - SYS_SOCKETPAIR = 199 - SYS_BIND = 200 - SYS_LISTEN = 201 - SYS_ACCEPT = 202 - SYS_CONNECT = 203 - SYS_GETSOCKNAME = 204 - SYS_GETPEERNAME = 205 - SYS_SENDTO = 206 - SYS_RECVFROM = 207 - SYS_SETSOCKOPT = 208 - SYS_GETSOCKOPT = 209 - SYS_SHUTDOWN = 210 - SYS_SENDMSG = 211 - SYS_RECVMSG = 212 - SYS_READAHEAD = 213 - SYS_BRK = 214 - SYS_MUNMAP = 215 - SYS_MREMAP = 216 - SYS_ADD_KEY = 217 - SYS_REQUEST_KEY = 218 - SYS_KEYCTL = 219 - SYS_CLONE = 220 - SYS_EXECVE = 221 - SYS_MMAP = 222 - SYS_FADVISE64 = 223 - SYS_SWAPON = 224 - SYS_SWAPOFF = 225 - SYS_MPROTECT = 226 - SYS_MSYNC = 227 - SYS_MLOCK = 228 - SYS_MUNLOCK = 229 - SYS_MLOCKALL = 230 - SYS_MUNLOCKALL = 231 - SYS_MINCORE = 232 - SYS_MADVISE = 233 - SYS_REMAP_FILE_PAGES = 234 - SYS_MBIND = 235 - SYS_GET_MEMPOLICY = 236 - SYS_SET_MEMPOLICY = 237 - SYS_MIGRATE_PAGES = 238 - SYS_MOVE_PAGES = 239 - SYS_RT_TGSIGQUEUEINFO = 240 - SYS_PERF_EVENT_OPEN = 241 - SYS_ACCEPT4 = 242 - SYS_RECVMMSG = 243 - SYS_ARCH_SPECIFIC_SYSCALL = 244 - SYS_WAIT4 = 260 - SYS_PRLIMIT64 = 261 - SYS_FANOTIFY_INIT = 262 - SYS_FANOTIFY_MARK = 263 - SYS_NAME_TO_HANDLE_AT = 264 - SYS_OPEN_BY_HANDLE_AT = 265 - SYS_CLOCK_ADJTIME = 266 - SYS_SYNCFS = 267 - SYS_SETNS = 268 - SYS_SENDMMSG = 269 - SYS_PROCESS_VM_READV = 270 - SYS_PROCESS_VM_WRITEV = 271 - SYS_KCMP = 272 - SYS_FINIT_MODULE = 273 - SYS_SCHED_SETATTR = 274 - SYS_SCHED_GETATTR = 275 - SYS_RENAMEAT2 = 276 - SYS_SECCOMP = 277 - SYS_GETRANDOM = 278 - SYS_MEMFD_CREATE = 279 - SYS_BPF = 280 - SYS_EXECVEAT = 281 - SYS_USERFAULTFD = 282 - SYS_MEMBARRIER = 283 - SYS_MLOCK2 = 284 - SYS_COPY_FILE_RANGE = 285 - SYS_PREADV2 = 286 - SYS_PWRITEV2 = 287 - SYS_PKEY_MPROTECT = 288 - SYS_PKEY_ALLOC = 289 - SYS_PKEY_FREE = 290 - SYS_STATX = 291 - SYS_IO_PGETEVENTS = 292 - SYS_RSEQ = 293 - SYS_KEXEC_FILE_LOAD = 294 - SYS_PIDFD_SEND_SIGNAL = 424 - SYS_IO_URING_SETUP = 425 - SYS_IO_URING_ENTER = 426 - SYS_IO_URING_REGISTER = 427 - SYS_OPEN_TREE = 428 - SYS_MOVE_MOUNT = 429 - SYS_FSOPEN = 430 - SYS_FSCONFIG = 431 - SYS_FSMOUNT = 432 - SYS_FSPICK = 433 - SYS_PIDFD_OPEN = 434 - SYS_CLONE3 = 435 - SYS_CLOSE_RANGE = 436 - SYS_OPENAT2 = 437 - SYS_PIDFD_GETFD = 438 - SYS_FACCESSAT2 = 439 - SYS_PROCESS_MADVISE = 440 - SYS_EPOLL_PWAIT2 = 441 - SYS_MOUNT_SETATTR = 442 - SYS_QUOTACTL_FD = 443 - SYS_LANDLOCK_CREATE_RULESET = 444 - SYS_LANDLOCK_ADD_RULE = 445 - SYS_LANDLOCK_RESTRICT_SELF = 446 - SYS_MEMFD_SECRET = 447 - SYS_PROCESS_MRELEASE = 448 - SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go deleted file mode 100644 index 81c4849..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go +++ /dev/null @@ -1,311 +0,0 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/loong64/include /tmp/loong64/include/asm/unistd.h -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build loong64 && linux -// +build loong64,linux - -package unix - -const ( - SYS_IO_SETUP = 0 - SYS_IO_DESTROY = 1 - SYS_IO_SUBMIT = 2 - SYS_IO_CANCEL = 3 - SYS_IO_GETEVENTS = 4 - SYS_SETXATTR = 5 - SYS_LSETXATTR = 6 - SYS_FSETXATTR = 7 - SYS_GETXATTR = 8 - SYS_LGETXATTR = 9 - SYS_FGETXATTR = 10 - SYS_LISTXATTR = 11 - SYS_LLISTXATTR = 12 - SYS_FLISTXATTR = 13 - SYS_REMOVEXATTR = 14 - SYS_LREMOVEXATTR = 15 - SYS_FREMOVEXATTR = 16 - SYS_GETCWD = 17 - SYS_LOOKUP_DCOOKIE = 18 - SYS_EVENTFD2 = 19 - SYS_EPOLL_CREATE1 = 20 - SYS_EPOLL_CTL = 21 - SYS_EPOLL_PWAIT = 22 - SYS_DUP = 23 - SYS_DUP3 = 24 - SYS_FCNTL = 25 - SYS_INOTIFY_INIT1 = 26 - SYS_INOTIFY_ADD_WATCH = 27 - SYS_INOTIFY_RM_WATCH = 28 - SYS_IOCTL = 29 - SYS_IOPRIO_SET = 30 - SYS_IOPRIO_GET = 31 - SYS_FLOCK = 32 - SYS_MKNODAT = 33 - SYS_MKDIRAT = 34 - SYS_UNLINKAT = 35 - SYS_SYMLINKAT = 36 - SYS_LINKAT = 37 - SYS_UMOUNT2 = 39 - SYS_MOUNT = 40 - SYS_PIVOT_ROOT = 41 - SYS_NFSSERVCTL = 42 - SYS_STATFS = 43 - SYS_FSTATFS = 44 - SYS_TRUNCATE = 45 - SYS_FTRUNCATE = 46 - SYS_FALLOCATE = 47 - SYS_FACCESSAT = 48 - SYS_CHDIR = 49 - SYS_FCHDIR = 50 - SYS_CHROOT = 51 - SYS_FCHMOD = 52 - SYS_FCHMODAT = 53 - SYS_FCHOWNAT = 54 - SYS_FCHOWN = 55 - SYS_OPENAT = 56 - SYS_CLOSE = 57 - SYS_VHANGUP = 58 - SYS_PIPE2 = 59 - SYS_QUOTACTL = 60 - SYS_GETDENTS64 = 61 - SYS_LSEEK = 62 - SYS_READ = 63 - SYS_WRITE = 64 - SYS_READV = 65 - SYS_WRITEV = 66 - SYS_PREAD64 = 67 - SYS_PWRITE64 = 68 - SYS_PREADV = 69 - SYS_PWRITEV = 70 - SYS_SENDFILE = 71 - SYS_PSELECT6 = 72 - SYS_PPOLL = 73 - SYS_SIGNALFD4 = 74 - SYS_VMSPLICE = 75 - SYS_SPLICE = 76 - SYS_TEE = 77 - SYS_READLINKAT = 78 - SYS_SYNC = 81 - SYS_FSYNC = 82 - SYS_FDATASYNC = 83 - SYS_SYNC_FILE_RANGE = 84 - SYS_TIMERFD_CREATE = 85 - SYS_TIMERFD_SETTIME = 86 - SYS_TIMERFD_GETTIME = 87 - SYS_UTIMENSAT = 88 - SYS_ACCT = 89 - SYS_CAPGET = 90 - SYS_CAPSET = 91 - SYS_PERSONALITY = 92 - SYS_EXIT = 93 - SYS_EXIT_GROUP = 94 - SYS_WAITID = 95 - SYS_SET_TID_ADDRESS = 96 - SYS_UNSHARE = 97 - SYS_FUTEX = 98 - SYS_SET_ROBUST_LIST = 99 - SYS_GET_ROBUST_LIST = 100 - SYS_NANOSLEEP = 101 - SYS_GETITIMER = 102 - SYS_SETITIMER = 103 - SYS_KEXEC_LOAD = 104 - SYS_INIT_MODULE = 105 - SYS_DELETE_MODULE = 106 - SYS_TIMER_CREATE = 107 - SYS_TIMER_GETTIME = 108 - SYS_TIMER_GETOVERRUN = 109 - SYS_TIMER_SETTIME = 110 - SYS_TIMER_DELETE = 111 - SYS_CLOCK_SETTIME = 112 - SYS_CLOCK_GETTIME = 113 - SYS_CLOCK_GETRES = 114 - SYS_CLOCK_NANOSLEEP = 115 - SYS_SYSLOG = 116 - SYS_PTRACE = 117 - SYS_SCHED_SETPARAM = 118 - SYS_SCHED_SETSCHEDULER = 119 - SYS_SCHED_GETSCHEDULER = 120 - SYS_SCHED_GETPARAM = 121 - SYS_SCHED_SETAFFINITY = 122 - SYS_SCHED_GETAFFINITY = 123 - SYS_SCHED_YIELD = 124 - SYS_SCHED_GET_PRIORITY_MAX = 125 - SYS_SCHED_GET_PRIORITY_MIN = 126 - SYS_SCHED_RR_GET_INTERVAL = 127 - SYS_RESTART_SYSCALL = 128 - SYS_KILL = 129 - SYS_TKILL = 130 - SYS_TGKILL = 131 - SYS_SIGALTSTACK = 132 - SYS_RT_SIGSUSPEND = 133 - SYS_RT_SIGACTION = 134 - SYS_RT_SIGPROCMASK = 135 - SYS_RT_SIGPENDING = 136 - SYS_RT_SIGTIMEDWAIT = 137 - SYS_RT_SIGQUEUEINFO = 138 - SYS_RT_SIGRETURN = 139 - SYS_SETPRIORITY = 140 - SYS_GETPRIORITY = 141 - SYS_REBOOT = 142 - SYS_SETREGID = 143 - SYS_SETGID = 144 - SYS_SETREUID = 145 - SYS_SETUID = 146 - SYS_SETRESUID = 147 - SYS_GETRESUID = 148 - SYS_SETRESGID = 149 - SYS_GETRESGID = 150 - SYS_SETFSUID = 151 - SYS_SETFSGID = 152 - SYS_TIMES = 153 - SYS_SETPGID = 154 - SYS_GETPGID = 155 - SYS_GETSID = 156 - SYS_SETSID = 157 - SYS_GETGROUPS = 158 - SYS_SETGROUPS = 159 - SYS_UNAME = 160 - SYS_SETHOSTNAME = 161 - SYS_SETDOMAINNAME = 162 - SYS_GETRUSAGE = 165 - SYS_UMASK = 166 - SYS_PRCTL = 167 - SYS_GETCPU = 168 - SYS_GETTIMEOFDAY = 169 - SYS_SETTIMEOFDAY = 170 - SYS_ADJTIMEX = 171 - SYS_GETPID = 172 - SYS_GETPPID = 173 - SYS_GETUID = 174 - SYS_GETEUID = 175 - SYS_GETGID = 176 - SYS_GETEGID = 177 - SYS_GETTID = 178 - SYS_SYSINFO = 179 - SYS_MQ_OPEN = 180 - SYS_MQ_UNLINK = 181 - SYS_MQ_TIMEDSEND = 182 - SYS_MQ_TIMEDRECEIVE = 183 - SYS_MQ_NOTIFY = 184 - SYS_MQ_GETSETATTR = 185 - SYS_MSGGET = 186 - SYS_MSGCTL = 187 - SYS_MSGRCV = 188 - SYS_MSGSND = 189 - SYS_SEMGET = 190 - SYS_SEMCTL = 191 - SYS_SEMTIMEDOP = 192 - SYS_SEMOP = 193 - SYS_SHMGET = 194 - SYS_SHMCTL = 195 - SYS_SHMAT = 196 - SYS_SHMDT = 197 - SYS_SOCKET = 198 - SYS_SOCKETPAIR = 199 - SYS_BIND = 200 - SYS_LISTEN = 201 - SYS_ACCEPT = 202 - SYS_CONNECT = 203 - SYS_GETSOCKNAME = 204 - SYS_GETPEERNAME = 205 - SYS_SENDTO = 206 - SYS_RECVFROM = 207 - SYS_SETSOCKOPT = 208 - SYS_GETSOCKOPT = 209 - SYS_SHUTDOWN = 210 - SYS_SENDMSG = 211 - SYS_RECVMSG = 212 - SYS_READAHEAD = 213 - SYS_BRK = 214 - SYS_MUNMAP = 215 - SYS_MREMAP = 216 - SYS_ADD_KEY = 217 - SYS_REQUEST_KEY = 218 - SYS_KEYCTL = 219 - SYS_CLONE = 220 - SYS_EXECVE = 221 - SYS_MMAP = 222 - SYS_FADVISE64 = 223 - SYS_SWAPON = 224 - SYS_SWAPOFF = 225 - SYS_MPROTECT = 226 - SYS_MSYNC = 227 - SYS_MLOCK = 228 - SYS_MUNLOCK = 229 - SYS_MLOCKALL = 230 - SYS_MUNLOCKALL = 231 - SYS_MINCORE = 232 - SYS_MADVISE = 233 - SYS_REMAP_FILE_PAGES = 234 - SYS_MBIND = 235 - SYS_GET_MEMPOLICY = 236 - SYS_SET_MEMPOLICY = 237 - SYS_MIGRATE_PAGES = 238 - SYS_MOVE_PAGES = 239 - SYS_RT_TGSIGQUEUEINFO = 240 - SYS_PERF_EVENT_OPEN = 241 - SYS_ACCEPT4 = 242 - SYS_RECVMMSG = 243 - SYS_ARCH_SPECIFIC_SYSCALL = 244 - SYS_WAIT4 = 260 - SYS_PRLIMIT64 = 261 - SYS_FANOTIFY_INIT = 262 - SYS_FANOTIFY_MARK = 263 - SYS_NAME_TO_HANDLE_AT = 264 - SYS_OPEN_BY_HANDLE_AT = 265 - SYS_CLOCK_ADJTIME = 266 - SYS_SYNCFS = 267 - SYS_SETNS = 268 - SYS_SENDMMSG = 269 - SYS_PROCESS_VM_READV = 270 - SYS_PROCESS_VM_WRITEV = 271 - SYS_KCMP = 272 - SYS_FINIT_MODULE = 273 - SYS_SCHED_SETATTR = 274 - SYS_SCHED_GETATTR = 275 - SYS_RENAMEAT2 = 276 - SYS_SECCOMP = 277 - SYS_GETRANDOM = 278 - SYS_MEMFD_CREATE = 279 - SYS_BPF = 280 - SYS_EXECVEAT = 281 - SYS_USERFAULTFD = 282 - SYS_MEMBARRIER = 283 - SYS_MLOCK2 = 284 - SYS_COPY_FILE_RANGE = 285 - SYS_PREADV2 = 286 - SYS_PWRITEV2 = 287 - SYS_PKEY_MPROTECT = 288 - SYS_PKEY_ALLOC = 289 - SYS_PKEY_FREE = 290 - SYS_STATX = 291 - SYS_IO_PGETEVENTS = 292 - SYS_RSEQ = 293 - SYS_KEXEC_FILE_LOAD = 294 - SYS_PIDFD_SEND_SIGNAL = 424 - SYS_IO_URING_SETUP = 425 - SYS_IO_URING_ENTER = 426 - SYS_IO_URING_REGISTER = 427 - SYS_OPEN_TREE = 428 - SYS_MOVE_MOUNT = 429 - SYS_FSOPEN = 430 - SYS_FSCONFIG = 431 - SYS_FSMOUNT = 432 - SYS_FSPICK = 433 - SYS_PIDFD_OPEN = 434 - SYS_CLONE3 = 435 - SYS_CLOSE_RANGE = 436 - SYS_OPENAT2 = 437 - SYS_PIDFD_GETFD = 438 - SYS_FACCESSAT2 = 439 - SYS_PROCESS_MADVISE = 440 - SYS_EPOLL_PWAIT2 = 441 - SYS_MOUNT_SETATTR = 442 - SYS_QUOTACTL_FD = 443 - SYS_LANDLOCK_CREATE_RULESET = 444 - SYS_LANDLOCK_ADD_RULE = 445 - SYS_LANDLOCK_RESTRICT_SELF = 446 - SYS_PROCESS_MRELEASE = 448 - SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go deleted file mode 100644 index 202a57e..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +++ /dev/null @@ -1,434 +0,0 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/mips/include /tmp/mips/include/asm/unistd.h -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build mips && linux -// +build mips,linux - -package unix - -const ( - SYS_SYSCALL = 4000 - SYS_EXIT = 4001 - SYS_FORK = 4002 - SYS_READ = 4003 - SYS_WRITE = 4004 - SYS_OPEN = 4005 - SYS_CLOSE = 4006 - SYS_WAITPID = 4007 - SYS_CREAT = 4008 - SYS_LINK = 4009 - SYS_UNLINK = 4010 - SYS_EXECVE = 4011 - SYS_CHDIR = 4012 - SYS_TIME = 4013 - SYS_MKNOD = 4014 - SYS_CHMOD = 4015 - SYS_LCHOWN = 4016 - SYS_BREAK = 4017 - SYS_UNUSED18 = 4018 - SYS_LSEEK = 4019 - SYS_GETPID = 4020 - SYS_MOUNT = 4021 - SYS_UMOUNT = 4022 - SYS_SETUID = 4023 - SYS_GETUID = 4024 - SYS_STIME = 4025 - SYS_PTRACE = 4026 - SYS_ALARM = 4027 - SYS_UNUSED28 = 4028 - SYS_PAUSE = 4029 - SYS_UTIME = 4030 - SYS_STTY = 4031 - SYS_GTTY = 4032 - SYS_ACCESS = 4033 - SYS_NICE = 4034 - SYS_FTIME = 4035 - SYS_SYNC = 4036 - SYS_KILL = 4037 - SYS_RENAME = 4038 - SYS_MKDIR = 4039 - SYS_RMDIR = 4040 - SYS_DUP = 4041 - SYS_PIPE = 4042 - SYS_TIMES = 4043 - SYS_PROF = 4044 - SYS_BRK = 4045 - SYS_SETGID = 4046 - SYS_GETGID = 4047 - SYS_SIGNAL = 4048 - SYS_GETEUID = 4049 - SYS_GETEGID = 4050 - SYS_ACCT = 4051 - SYS_UMOUNT2 = 4052 - SYS_LOCK = 4053 - SYS_IOCTL = 4054 - SYS_FCNTL = 4055 - SYS_MPX = 4056 - SYS_SETPGID = 4057 - SYS_ULIMIT = 4058 - SYS_UNUSED59 = 4059 - SYS_UMASK = 4060 - SYS_CHROOT = 4061 - SYS_USTAT = 4062 - SYS_DUP2 = 4063 - SYS_GETPPID = 4064 - SYS_GETPGRP = 4065 - SYS_SETSID = 4066 - SYS_SIGACTION = 4067 - SYS_SGETMASK = 4068 - SYS_SSETMASK = 4069 - SYS_SETREUID = 4070 - SYS_SETREGID = 4071 - SYS_SIGSUSPEND = 4072 - SYS_SIGPENDING = 4073 - SYS_SETHOSTNAME = 4074 - SYS_SETRLIMIT = 4075 - SYS_GETRLIMIT = 4076 - SYS_GETRUSAGE = 4077 - SYS_GETTIMEOFDAY = 4078 - SYS_SETTIMEOFDAY = 4079 - SYS_GETGROUPS = 4080 - SYS_SETGROUPS = 4081 - SYS_RESERVED82 = 4082 - SYS_SYMLINK = 4083 - SYS_UNUSED84 = 4084 - SYS_READLINK = 4085 - SYS_USELIB = 4086 - SYS_SWAPON = 4087 - SYS_REBOOT = 4088 - SYS_READDIR = 4089 - SYS_MMAP = 4090 - SYS_MUNMAP = 4091 - SYS_TRUNCATE = 4092 - SYS_FTRUNCATE = 4093 - SYS_FCHMOD = 4094 - SYS_FCHOWN = 4095 - SYS_GETPRIORITY = 4096 - SYS_SETPRIORITY = 4097 - SYS_PROFIL = 4098 - SYS_STATFS = 4099 - SYS_FSTATFS = 4100 - SYS_IOPERM = 4101 - SYS_SOCKETCALL = 4102 - SYS_SYSLOG = 4103 - SYS_SETITIMER = 4104 - SYS_GETITIMER = 4105 - SYS_STAT = 4106 - SYS_LSTAT = 4107 - SYS_FSTAT = 4108 - SYS_UNUSED109 = 4109 - SYS_IOPL = 4110 - SYS_VHANGUP = 4111 - SYS_IDLE = 4112 - SYS_VM86 = 4113 - SYS_WAIT4 = 4114 - SYS_SWAPOFF = 4115 - SYS_SYSINFO = 4116 - SYS_IPC = 4117 - SYS_FSYNC = 4118 - SYS_SIGRETURN = 4119 - SYS_CLONE = 4120 - SYS_SETDOMAINNAME = 4121 - SYS_UNAME = 4122 - SYS_MODIFY_LDT = 4123 - SYS_ADJTIMEX = 4124 - SYS_MPROTECT = 4125 - SYS_SIGPROCMASK = 4126 - SYS_CREATE_MODULE = 4127 - SYS_INIT_MODULE = 4128 - SYS_DELETE_MODULE = 4129 - SYS_GET_KERNEL_SYMS = 4130 - SYS_QUOTACTL = 4131 - SYS_GETPGID = 4132 - SYS_FCHDIR = 4133 - SYS_BDFLUSH = 4134 - SYS_SYSFS = 4135 - SYS_PERSONALITY = 4136 - SYS_AFS_SYSCALL = 4137 - SYS_SETFSUID = 4138 - SYS_SETFSGID = 4139 - SYS__LLSEEK = 4140 - SYS_GETDENTS = 4141 - SYS__NEWSELECT = 4142 - SYS_FLOCK = 4143 - SYS_MSYNC = 4144 - SYS_READV = 4145 - SYS_WRITEV = 4146 - SYS_CACHEFLUSH = 4147 - SYS_CACHECTL = 4148 - SYS_SYSMIPS = 4149 - SYS_UNUSED150 = 4150 - SYS_GETSID = 4151 - SYS_FDATASYNC = 4152 - SYS__SYSCTL = 4153 - SYS_MLOCK = 4154 - SYS_MUNLOCK = 4155 - SYS_MLOCKALL = 4156 - SYS_MUNLOCKALL = 4157 - SYS_SCHED_SETPARAM = 4158 - SYS_SCHED_GETPARAM = 4159 - SYS_SCHED_SETSCHEDULER = 4160 - SYS_SCHED_GETSCHEDULER = 4161 - SYS_SCHED_YIELD = 4162 - SYS_SCHED_GET_PRIORITY_MAX = 4163 - SYS_SCHED_GET_PRIORITY_MIN = 4164 - SYS_SCHED_RR_GET_INTERVAL = 4165 - SYS_NANOSLEEP = 4166 - SYS_MREMAP = 4167 - SYS_ACCEPT = 4168 - SYS_BIND = 4169 - SYS_CONNECT = 4170 - SYS_GETPEERNAME = 4171 - SYS_GETSOCKNAME = 4172 - SYS_GETSOCKOPT = 4173 - SYS_LISTEN = 4174 - SYS_RECV = 4175 - SYS_RECVFROM = 4176 - SYS_RECVMSG = 4177 - SYS_SEND = 4178 - SYS_SENDMSG = 4179 - SYS_SENDTO = 4180 - SYS_SETSOCKOPT = 4181 - SYS_SHUTDOWN = 4182 - SYS_SOCKET = 4183 - SYS_SOCKETPAIR = 4184 - SYS_SETRESUID = 4185 - SYS_GETRESUID = 4186 - SYS_QUERY_MODULE = 4187 - SYS_POLL = 4188 - SYS_NFSSERVCTL = 4189 - SYS_SETRESGID = 4190 - SYS_GETRESGID = 4191 - SYS_PRCTL = 4192 - SYS_RT_SIGRETURN = 4193 - SYS_RT_SIGACTION = 4194 - SYS_RT_SIGPROCMASK = 4195 - SYS_RT_SIGPENDING = 4196 - SYS_RT_SIGTIMEDWAIT = 4197 - SYS_RT_SIGQUEUEINFO = 4198 - SYS_RT_SIGSUSPEND = 4199 - SYS_PREAD64 = 4200 - SYS_PWRITE64 = 4201 - SYS_CHOWN = 4202 - SYS_GETCWD = 4203 - SYS_CAPGET = 4204 - SYS_CAPSET = 4205 - SYS_SIGALTSTACK = 4206 - SYS_SENDFILE = 4207 - SYS_GETPMSG = 4208 - SYS_PUTPMSG = 4209 - SYS_MMAP2 = 4210 - SYS_TRUNCATE64 = 4211 - SYS_FTRUNCATE64 = 4212 - SYS_STAT64 = 4213 - SYS_LSTAT64 = 4214 - SYS_FSTAT64 = 4215 - SYS_PIVOT_ROOT = 4216 - SYS_MINCORE = 4217 - SYS_MADVISE = 4218 - SYS_GETDENTS64 = 4219 - SYS_FCNTL64 = 4220 - SYS_RESERVED221 = 4221 - SYS_GETTID = 4222 - SYS_READAHEAD = 4223 - SYS_SETXATTR = 4224 - SYS_LSETXATTR = 4225 - SYS_FSETXATTR = 4226 - SYS_GETXATTR = 4227 - SYS_LGETXATTR = 4228 - SYS_FGETXATTR = 4229 - SYS_LISTXATTR = 4230 - SYS_LLISTXATTR = 4231 - SYS_FLISTXATTR = 4232 - SYS_REMOVEXATTR = 4233 - SYS_LREMOVEXATTR = 4234 - SYS_FREMOVEXATTR = 4235 - SYS_TKILL = 4236 - SYS_SENDFILE64 = 4237 - SYS_FUTEX = 4238 - SYS_SCHED_SETAFFINITY = 4239 - SYS_SCHED_GETAFFINITY = 4240 - SYS_IO_SETUP = 4241 - SYS_IO_DESTROY = 4242 - SYS_IO_GETEVENTS = 4243 - SYS_IO_SUBMIT = 4244 - SYS_IO_CANCEL = 4245 - SYS_EXIT_GROUP = 4246 - SYS_LOOKUP_DCOOKIE = 4247 - SYS_EPOLL_CREATE = 4248 - SYS_EPOLL_CTL = 4249 - SYS_EPOLL_WAIT = 4250 - SYS_REMAP_FILE_PAGES = 4251 - SYS_SET_TID_ADDRESS = 4252 - SYS_RESTART_SYSCALL = 4253 - SYS_FADVISE64 = 4254 - SYS_STATFS64 = 4255 - SYS_FSTATFS64 = 4256 - SYS_TIMER_CREATE = 4257 - SYS_TIMER_SETTIME = 4258 - SYS_TIMER_GETTIME = 4259 - SYS_TIMER_GETOVERRUN = 4260 - SYS_TIMER_DELETE = 4261 - SYS_CLOCK_SETTIME = 4262 - SYS_CLOCK_GETTIME = 4263 - SYS_CLOCK_GETRES = 4264 - SYS_CLOCK_NANOSLEEP = 4265 - SYS_TGKILL = 4266 - SYS_UTIMES = 4267 - SYS_MBIND = 4268 - SYS_GET_MEMPOLICY = 4269 - SYS_SET_MEMPOLICY = 4270 - SYS_MQ_OPEN = 4271 - SYS_MQ_UNLINK = 4272 - SYS_MQ_TIMEDSEND = 4273 - SYS_MQ_TIMEDRECEIVE = 4274 - SYS_MQ_NOTIFY = 4275 - SYS_MQ_GETSETATTR = 4276 - SYS_VSERVER = 4277 - SYS_WAITID = 4278 - SYS_ADD_KEY = 4280 - SYS_REQUEST_KEY = 4281 - SYS_KEYCTL = 4282 - SYS_SET_THREAD_AREA = 4283 - SYS_INOTIFY_INIT = 4284 - SYS_INOTIFY_ADD_WATCH = 4285 - SYS_INOTIFY_RM_WATCH = 4286 - SYS_MIGRATE_PAGES = 4287 - SYS_OPENAT = 4288 - SYS_MKDIRAT = 4289 - SYS_MKNODAT = 4290 - SYS_FCHOWNAT = 4291 - SYS_FUTIMESAT = 4292 - SYS_FSTATAT64 = 4293 - SYS_UNLINKAT = 4294 - SYS_RENAMEAT = 4295 - SYS_LINKAT = 4296 - SYS_SYMLINKAT = 4297 - SYS_READLINKAT = 4298 - SYS_FCHMODAT = 4299 - SYS_FACCESSAT = 4300 - SYS_PSELECT6 = 4301 - SYS_PPOLL = 4302 - SYS_UNSHARE = 4303 - SYS_SPLICE = 4304 - SYS_SYNC_FILE_RANGE = 4305 - SYS_TEE = 4306 - SYS_VMSPLICE = 4307 - SYS_MOVE_PAGES = 4308 - SYS_SET_ROBUST_LIST = 4309 - SYS_GET_ROBUST_LIST = 4310 - SYS_KEXEC_LOAD = 4311 - SYS_GETCPU = 4312 - SYS_EPOLL_PWAIT = 4313 - SYS_IOPRIO_SET = 4314 - SYS_IOPRIO_GET = 4315 - SYS_UTIMENSAT = 4316 - SYS_SIGNALFD = 4317 - SYS_TIMERFD = 4318 - SYS_EVENTFD = 4319 - SYS_FALLOCATE = 4320 - SYS_TIMERFD_CREATE = 4321 - SYS_TIMERFD_GETTIME = 4322 - SYS_TIMERFD_SETTIME = 4323 - SYS_SIGNALFD4 = 4324 - SYS_EVENTFD2 = 4325 - SYS_EPOLL_CREATE1 = 4326 - SYS_DUP3 = 4327 - SYS_PIPE2 = 4328 - SYS_INOTIFY_INIT1 = 4329 - SYS_PREADV = 4330 - SYS_PWRITEV = 4331 - SYS_RT_TGSIGQUEUEINFO = 4332 - SYS_PERF_EVENT_OPEN = 4333 - SYS_ACCEPT4 = 4334 - SYS_RECVMMSG = 4335 - SYS_FANOTIFY_INIT = 4336 - SYS_FANOTIFY_MARK = 4337 - SYS_PRLIMIT64 = 4338 - SYS_NAME_TO_HANDLE_AT = 4339 - SYS_OPEN_BY_HANDLE_AT = 4340 - SYS_CLOCK_ADJTIME = 4341 - SYS_SYNCFS = 4342 - SYS_SENDMMSG = 4343 - SYS_SETNS = 4344 - SYS_PROCESS_VM_READV = 4345 - SYS_PROCESS_VM_WRITEV = 4346 - SYS_KCMP = 4347 - SYS_FINIT_MODULE = 4348 - SYS_SCHED_SETATTR = 4349 - SYS_SCHED_GETATTR = 4350 - SYS_RENAMEAT2 = 4351 - SYS_SECCOMP = 4352 - SYS_GETRANDOM = 4353 - SYS_MEMFD_CREATE = 4354 - SYS_BPF = 4355 - SYS_EXECVEAT = 4356 - SYS_USERFAULTFD = 4357 - SYS_MEMBARRIER = 4358 - SYS_MLOCK2 = 4359 - SYS_COPY_FILE_RANGE = 4360 - SYS_PREADV2 = 4361 - SYS_PWRITEV2 = 4362 - SYS_PKEY_MPROTECT = 4363 - SYS_PKEY_ALLOC = 4364 - SYS_PKEY_FREE = 4365 - SYS_STATX = 4366 - SYS_RSEQ = 4367 - SYS_IO_PGETEVENTS = 4368 - SYS_SEMGET = 4393 - SYS_SEMCTL = 4394 - SYS_SHMGET = 4395 - SYS_SHMCTL = 4396 - SYS_SHMAT = 4397 - SYS_SHMDT = 4398 - SYS_MSGGET = 4399 - SYS_MSGSND = 4400 - SYS_MSGRCV = 4401 - SYS_MSGCTL = 4402 - SYS_CLOCK_GETTIME64 = 4403 - SYS_CLOCK_SETTIME64 = 4404 - SYS_CLOCK_ADJTIME64 = 4405 - SYS_CLOCK_GETRES_TIME64 = 4406 - SYS_CLOCK_NANOSLEEP_TIME64 = 4407 - SYS_TIMER_GETTIME64 = 4408 - SYS_TIMER_SETTIME64 = 4409 - SYS_TIMERFD_GETTIME64 = 4410 - SYS_TIMERFD_SETTIME64 = 4411 - SYS_UTIMENSAT_TIME64 = 4412 - SYS_PSELECT6_TIME64 = 4413 - SYS_PPOLL_TIME64 = 4414 - SYS_IO_PGETEVENTS_TIME64 = 4416 - SYS_RECVMMSG_TIME64 = 4417 - SYS_MQ_TIMEDSEND_TIME64 = 4418 - SYS_MQ_TIMEDRECEIVE_TIME64 = 4419 - SYS_SEMTIMEDOP_TIME64 = 4420 - SYS_RT_SIGTIMEDWAIT_TIME64 = 4421 - SYS_FUTEX_TIME64 = 4422 - SYS_SCHED_RR_GET_INTERVAL_TIME64 = 4423 - SYS_PIDFD_SEND_SIGNAL = 4424 - SYS_IO_URING_SETUP = 4425 - SYS_IO_URING_ENTER = 4426 - SYS_IO_URING_REGISTER = 4427 - SYS_OPEN_TREE = 4428 - SYS_MOVE_MOUNT = 4429 - SYS_FSOPEN = 4430 - SYS_FSCONFIG = 4431 - SYS_FSMOUNT = 4432 - SYS_FSPICK = 4433 - SYS_PIDFD_OPEN = 4434 - SYS_CLONE3 = 4435 - SYS_CLOSE_RANGE = 4436 - SYS_OPENAT2 = 4437 - SYS_PIDFD_GETFD = 4438 - SYS_FACCESSAT2 = 4439 - SYS_PROCESS_MADVISE = 4440 - SYS_EPOLL_PWAIT2 = 4441 - SYS_MOUNT_SETATTR = 4442 - SYS_QUOTACTL_FD = 4443 - SYS_LANDLOCK_CREATE_RULESET = 4444 - SYS_LANDLOCK_ADD_RULE = 4445 - SYS_LANDLOCK_RESTRICT_SELF = 4446 - SYS_PROCESS_MRELEASE = 4448 - SYS_FUTEX_WAITV = 4449 - SYS_SET_MEMPOLICY_HOME_NODE = 4450 -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go deleted file mode 100644 index 1fbceb5..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +++ /dev/null @@ -1,364 +0,0 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/mips64/include /tmp/mips64/include/asm/unistd.h -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build mips64 && linux -// +build mips64,linux - -package unix - -const ( - SYS_READ = 5000 - SYS_WRITE = 5001 - SYS_OPEN = 5002 - SYS_CLOSE = 5003 - SYS_STAT = 5004 - SYS_FSTAT = 5005 - SYS_LSTAT = 5006 - SYS_POLL = 5007 - SYS_LSEEK = 5008 - SYS_MMAP = 5009 - SYS_MPROTECT = 5010 - SYS_MUNMAP = 5011 - SYS_BRK = 5012 - SYS_RT_SIGACTION = 5013 - SYS_RT_SIGPROCMASK = 5014 - SYS_IOCTL = 5015 - SYS_PREAD64 = 5016 - SYS_PWRITE64 = 5017 - SYS_READV = 5018 - SYS_WRITEV = 5019 - SYS_ACCESS = 5020 - SYS_PIPE = 5021 - SYS__NEWSELECT = 5022 - SYS_SCHED_YIELD = 5023 - SYS_MREMAP = 5024 - SYS_MSYNC = 5025 - SYS_MINCORE = 5026 - SYS_MADVISE = 5027 - SYS_SHMGET = 5028 - SYS_SHMAT = 5029 - SYS_SHMCTL = 5030 - SYS_DUP = 5031 - SYS_DUP2 = 5032 - SYS_PAUSE = 5033 - SYS_NANOSLEEP = 5034 - SYS_GETITIMER = 5035 - SYS_SETITIMER = 5036 - SYS_ALARM = 5037 - SYS_GETPID = 5038 - SYS_SENDFILE = 5039 - SYS_SOCKET = 5040 - SYS_CONNECT = 5041 - SYS_ACCEPT = 5042 - SYS_SENDTO = 5043 - SYS_RECVFROM = 5044 - SYS_SENDMSG = 5045 - SYS_RECVMSG = 5046 - SYS_SHUTDOWN = 5047 - SYS_BIND = 5048 - SYS_LISTEN = 5049 - SYS_GETSOCKNAME = 5050 - SYS_GETPEERNAME = 5051 - SYS_SOCKETPAIR = 5052 - SYS_SETSOCKOPT = 5053 - SYS_GETSOCKOPT = 5054 - SYS_CLONE = 5055 - SYS_FORK = 5056 - SYS_EXECVE = 5057 - SYS_EXIT = 5058 - SYS_WAIT4 = 5059 - SYS_KILL = 5060 - SYS_UNAME = 5061 - SYS_SEMGET = 5062 - SYS_SEMOP = 5063 - SYS_SEMCTL = 5064 - SYS_SHMDT = 5065 - SYS_MSGGET = 5066 - SYS_MSGSND = 5067 - SYS_MSGRCV = 5068 - SYS_MSGCTL = 5069 - SYS_FCNTL = 5070 - SYS_FLOCK = 5071 - SYS_FSYNC = 5072 - SYS_FDATASYNC = 5073 - SYS_TRUNCATE = 5074 - SYS_FTRUNCATE = 5075 - SYS_GETDENTS = 5076 - SYS_GETCWD = 5077 - SYS_CHDIR = 5078 - SYS_FCHDIR = 5079 - SYS_RENAME = 5080 - SYS_MKDIR = 5081 - SYS_RMDIR = 5082 - SYS_CREAT = 5083 - SYS_LINK = 5084 - SYS_UNLINK = 5085 - SYS_SYMLINK = 5086 - SYS_READLINK = 5087 - SYS_CHMOD = 5088 - SYS_FCHMOD = 5089 - SYS_CHOWN = 5090 - SYS_FCHOWN = 5091 - SYS_LCHOWN = 5092 - SYS_UMASK = 5093 - SYS_GETTIMEOFDAY = 5094 - SYS_GETRLIMIT = 5095 - SYS_GETRUSAGE = 5096 - SYS_SYSINFO = 5097 - SYS_TIMES = 5098 - SYS_PTRACE = 5099 - SYS_GETUID = 5100 - SYS_SYSLOG = 5101 - SYS_GETGID = 5102 - SYS_SETUID = 5103 - SYS_SETGID = 5104 - SYS_GETEUID = 5105 - SYS_GETEGID = 5106 - SYS_SETPGID = 5107 - SYS_GETPPID = 5108 - SYS_GETPGRP = 5109 - SYS_SETSID = 5110 - SYS_SETREUID = 5111 - SYS_SETREGID = 5112 - SYS_GETGROUPS = 5113 - SYS_SETGROUPS = 5114 - SYS_SETRESUID = 5115 - SYS_GETRESUID = 5116 - SYS_SETRESGID = 5117 - SYS_GETRESGID = 5118 - SYS_GETPGID = 5119 - SYS_SETFSUID = 5120 - SYS_SETFSGID = 5121 - SYS_GETSID = 5122 - SYS_CAPGET = 5123 - SYS_CAPSET = 5124 - SYS_RT_SIGPENDING = 5125 - SYS_RT_SIGTIMEDWAIT = 5126 - SYS_RT_SIGQUEUEINFO = 5127 - SYS_RT_SIGSUSPEND = 5128 - SYS_SIGALTSTACK = 5129 - SYS_UTIME = 5130 - SYS_MKNOD = 5131 - SYS_PERSONALITY = 5132 - SYS_USTAT = 5133 - SYS_STATFS = 5134 - SYS_FSTATFS = 5135 - SYS_SYSFS = 5136 - SYS_GETPRIORITY = 5137 - SYS_SETPRIORITY = 5138 - SYS_SCHED_SETPARAM = 5139 - SYS_SCHED_GETPARAM = 5140 - SYS_SCHED_SETSCHEDULER = 5141 - SYS_SCHED_GETSCHEDULER = 5142 - SYS_SCHED_GET_PRIORITY_MAX = 5143 - SYS_SCHED_GET_PRIORITY_MIN = 5144 - SYS_SCHED_RR_GET_INTERVAL = 5145 - SYS_MLOCK = 5146 - SYS_MUNLOCK = 5147 - SYS_MLOCKALL = 5148 - SYS_MUNLOCKALL = 5149 - SYS_VHANGUP = 5150 - SYS_PIVOT_ROOT = 5151 - SYS__SYSCTL = 5152 - SYS_PRCTL = 5153 - SYS_ADJTIMEX = 5154 - SYS_SETRLIMIT = 5155 - SYS_CHROOT = 5156 - SYS_SYNC = 5157 - SYS_ACCT = 5158 - SYS_SETTIMEOFDAY = 5159 - SYS_MOUNT = 5160 - SYS_UMOUNT2 = 5161 - SYS_SWAPON = 5162 - SYS_SWAPOFF = 5163 - SYS_REBOOT = 5164 - SYS_SETHOSTNAME = 5165 - SYS_SETDOMAINNAME = 5166 - SYS_CREATE_MODULE = 5167 - SYS_INIT_MODULE = 5168 - SYS_DELETE_MODULE = 5169 - SYS_GET_KERNEL_SYMS = 5170 - SYS_QUERY_MODULE = 5171 - SYS_QUOTACTL = 5172 - SYS_NFSSERVCTL = 5173 - SYS_GETPMSG = 5174 - SYS_PUTPMSG = 5175 - SYS_AFS_SYSCALL = 5176 - SYS_RESERVED177 = 5177 - SYS_GETTID = 5178 - SYS_READAHEAD = 5179 - SYS_SETXATTR = 5180 - SYS_LSETXATTR = 5181 - SYS_FSETXATTR = 5182 - SYS_GETXATTR = 5183 - SYS_LGETXATTR = 5184 - SYS_FGETXATTR = 5185 - SYS_LISTXATTR = 5186 - SYS_LLISTXATTR = 5187 - SYS_FLISTXATTR = 5188 - SYS_REMOVEXATTR = 5189 - SYS_LREMOVEXATTR = 5190 - SYS_FREMOVEXATTR = 5191 - SYS_TKILL = 5192 - SYS_RESERVED193 = 5193 - SYS_FUTEX = 5194 - SYS_SCHED_SETAFFINITY = 5195 - SYS_SCHED_GETAFFINITY = 5196 - SYS_CACHEFLUSH = 5197 - SYS_CACHECTL = 5198 - SYS_SYSMIPS = 5199 - SYS_IO_SETUP = 5200 - SYS_IO_DESTROY = 5201 - SYS_IO_GETEVENTS = 5202 - SYS_IO_SUBMIT = 5203 - SYS_IO_CANCEL = 5204 - SYS_EXIT_GROUP = 5205 - SYS_LOOKUP_DCOOKIE = 5206 - SYS_EPOLL_CREATE = 5207 - SYS_EPOLL_CTL = 5208 - SYS_EPOLL_WAIT = 5209 - SYS_REMAP_FILE_PAGES = 5210 - SYS_RT_SIGRETURN = 5211 - SYS_SET_TID_ADDRESS = 5212 - SYS_RESTART_SYSCALL = 5213 - SYS_SEMTIMEDOP = 5214 - SYS_FADVISE64 = 5215 - SYS_TIMER_CREATE = 5216 - SYS_TIMER_SETTIME = 5217 - SYS_TIMER_GETTIME = 5218 - SYS_TIMER_GETOVERRUN = 5219 - SYS_TIMER_DELETE = 5220 - SYS_CLOCK_SETTIME = 5221 - SYS_CLOCK_GETTIME = 5222 - SYS_CLOCK_GETRES = 5223 - SYS_CLOCK_NANOSLEEP = 5224 - SYS_TGKILL = 5225 - SYS_UTIMES = 5226 - SYS_MBIND = 5227 - SYS_GET_MEMPOLICY = 5228 - SYS_SET_MEMPOLICY = 5229 - SYS_MQ_OPEN = 5230 - SYS_MQ_UNLINK = 5231 - SYS_MQ_TIMEDSEND = 5232 - SYS_MQ_TIMEDRECEIVE = 5233 - SYS_MQ_NOTIFY = 5234 - SYS_MQ_GETSETATTR = 5235 - SYS_VSERVER = 5236 - SYS_WAITID = 5237 - SYS_ADD_KEY = 5239 - SYS_REQUEST_KEY = 5240 - SYS_KEYCTL = 5241 - SYS_SET_THREAD_AREA = 5242 - SYS_INOTIFY_INIT = 5243 - SYS_INOTIFY_ADD_WATCH = 5244 - SYS_INOTIFY_RM_WATCH = 5245 - SYS_MIGRATE_PAGES = 5246 - SYS_OPENAT = 5247 - SYS_MKDIRAT = 5248 - SYS_MKNODAT = 5249 - SYS_FCHOWNAT = 5250 - SYS_FUTIMESAT = 5251 - SYS_NEWFSTATAT = 5252 - SYS_UNLINKAT = 5253 - SYS_RENAMEAT = 5254 - SYS_LINKAT = 5255 - SYS_SYMLINKAT = 5256 - SYS_READLINKAT = 5257 - SYS_FCHMODAT = 5258 - SYS_FACCESSAT = 5259 - SYS_PSELECT6 = 5260 - SYS_PPOLL = 5261 - SYS_UNSHARE = 5262 - SYS_SPLICE = 5263 - SYS_SYNC_FILE_RANGE = 5264 - SYS_TEE = 5265 - SYS_VMSPLICE = 5266 - SYS_MOVE_PAGES = 5267 - SYS_SET_ROBUST_LIST = 5268 - SYS_GET_ROBUST_LIST = 5269 - SYS_KEXEC_LOAD = 5270 - SYS_GETCPU = 5271 - SYS_EPOLL_PWAIT = 5272 - SYS_IOPRIO_SET = 5273 - SYS_IOPRIO_GET = 5274 - SYS_UTIMENSAT = 5275 - SYS_SIGNALFD = 5276 - SYS_TIMERFD = 5277 - SYS_EVENTFD = 5278 - SYS_FALLOCATE = 5279 - SYS_TIMERFD_CREATE = 5280 - SYS_TIMERFD_GETTIME = 5281 - SYS_TIMERFD_SETTIME = 5282 - SYS_SIGNALFD4 = 5283 - SYS_EVENTFD2 = 5284 - SYS_EPOLL_CREATE1 = 5285 - SYS_DUP3 = 5286 - SYS_PIPE2 = 5287 - SYS_INOTIFY_INIT1 = 5288 - SYS_PREADV = 5289 - SYS_PWRITEV = 5290 - SYS_RT_TGSIGQUEUEINFO = 5291 - SYS_PERF_EVENT_OPEN = 5292 - SYS_ACCEPT4 = 5293 - SYS_RECVMMSG = 5294 - SYS_FANOTIFY_INIT = 5295 - SYS_FANOTIFY_MARK = 5296 - SYS_PRLIMIT64 = 5297 - SYS_NAME_TO_HANDLE_AT = 5298 - SYS_OPEN_BY_HANDLE_AT = 5299 - SYS_CLOCK_ADJTIME = 5300 - SYS_SYNCFS = 5301 - SYS_SENDMMSG = 5302 - SYS_SETNS = 5303 - SYS_PROCESS_VM_READV = 5304 - SYS_PROCESS_VM_WRITEV = 5305 - SYS_KCMP = 5306 - SYS_FINIT_MODULE = 5307 - SYS_GETDENTS64 = 5308 - SYS_SCHED_SETATTR = 5309 - SYS_SCHED_GETATTR = 5310 - SYS_RENAMEAT2 = 5311 - SYS_SECCOMP = 5312 - SYS_GETRANDOM = 5313 - SYS_MEMFD_CREATE = 5314 - SYS_BPF = 5315 - SYS_EXECVEAT = 5316 - SYS_USERFAULTFD = 5317 - SYS_MEMBARRIER = 5318 - SYS_MLOCK2 = 5319 - SYS_COPY_FILE_RANGE = 5320 - SYS_PREADV2 = 5321 - SYS_PWRITEV2 = 5322 - SYS_PKEY_MPROTECT = 5323 - SYS_PKEY_ALLOC = 5324 - SYS_PKEY_FREE = 5325 - SYS_STATX = 5326 - SYS_RSEQ = 5327 - SYS_IO_PGETEVENTS = 5328 - SYS_PIDFD_SEND_SIGNAL = 5424 - SYS_IO_URING_SETUP = 5425 - SYS_IO_URING_ENTER = 5426 - SYS_IO_URING_REGISTER = 5427 - SYS_OPEN_TREE = 5428 - SYS_MOVE_MOUNT = 5429 - SYS_FSOPEN = 5430 - SYS_FSCONFIG = 5431 - SYS_FSMOUNT = 5432 - SYS_FSPICK = 5433 - SYS_PIDFD_OPEN = 5434 - SYS_CLONE3 = 5435 - SYS_CLOSE_RANGE = 5436 - SYS_OPENAT2 = 5437 - SYS_PIDFD_GETFD = 5438 - SYS_FACCESSAT2 = 5439 - SYS_PROCESS_MADVISE = 5440 - SYS_EPOLL_PWAIT2 = 5441 - SYS_MOUNT_SETATTR = 5442 - SYS_QUOTACTL_FD = 5443 - SYS_LANDLOCK_CREATE_RULESET = 5444 - SYS_LANDLOCK_ADD_RULE = 5445 - SYS_LANDLOCK_RESTRICT_SELF = 5446 - SYS_PROCESS_MRELEASE = 5448 - SYS_FUTEX_WAITV = 5449 - SYS_SET_MEMPOLICY_HOME_NODE = 5450 -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go deleted file mode 100644 index b4ffb7a..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +++ /dev/null @@ -1,364 +0,0 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/mips64le/include /tmp/mips64le/include/asm/unistd.h -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build mips64le && linux -// +build mips64le,linux - -package unix - -const ( - SYS_READ = 5000 - SYS_WRITE = 5001 - SYS_OPEN = 5002 - SYS_CLOSE = 5003 - SYS_STAT = 5004 - SYS_FSTAT = 5005 - SYS_LSTAT = 5006 - SYS_POLL = 5007 - SYS_LSEEK = 5008 - SYS_MMAP = 5009 - SYS_MPROTECT = 5010 - SYS_MUNMAP = 5011 - SYS_BRK = 5012 - SYS_RT_SIGACTION = 5013 - SYS_RT_SIGPROCMASK = 5014 - SYS_IOCTL = 5015 - SYS_PREAD64 = 5016 - SYS_PWRITE64 = 5017 - SYS_READV = 5018 - SYS_WRITEV = 5019 - SYS_ACCESS = 5020 - SYS_PIPE = 5021 - SYS__NEWSELECT = 5022 - SYS_SCHED_YIELD = 5023 - SYS_MREMAP = 5024 - SYS_MSYNC = 5025 - SYS_MINCORE = 5026 - SYS_MADVISE = 5027 - SYS_SHMGET = 5028 - SYS_SHMAT = 5029 - SYS_SHMCTL = 5030 - SYS_DUP = 5031 - SYS_DUP2 = 5032 - SYS_PAUSE = 5033 - SYS_NANOSLEEP = 5034 - SYS_GETITIMER = 5035 - SYS_SETITIMER = 5036 - SYS_ALARM = 5037 - SYS_GETPID = 5038 - SYS_SENDFILE = 5039 - SYS_SOCKET = 5040 - SYS_CONNECT = 5041 - SYS_ACCEPT = 5042 - SYS_SENDTO = 5043 - SYS_RECVFROM = 5044 - SYS_SENDMSG = 5045 - SYS_RECVMSG = 5046 - SYS_SHUTDOWN = 5047 - SYS_BIND = 5048 - SYS_LISTEN = 5049 - SYS_GETSOCKNAME = 5050 - SYS_GETPEERNAME = 5051 - SYS_SOCKETPAIR = 5052 - SYS_SETSOCKOPT = 5053 - SYS_GETSOCKOPT = 5054 - SYS_CLONE = 5055 - SYS_FORK = 5056 - SYS_EXECVE = 5057 - SYS_EXIT = 5058 - SYS_WAIT4 = 5059 - SYS_KILL = 5060 - SYS_UNAME = 5061 - SYS_SEMGET = 5062 - SYS_SEMOP = 5063 - SYS_SEMCTL = 5064 - SYS_SHMDT = 5065 - SYS_MSGGET = 5066 - SYS_MSGSND = 5067 - SYS_MSGRCV = 5068 - SYS_MSGCTL = 5069 - SYS_FCNTL = 5070 - SYS_FLOCK = 5071 - SYS_FSYNC = 5072 - SYS_FDATASYNC = 5073 - SYS_TRUNCATE = 5074 - SYS_FTRUNCATE = 5075 - SYS_GETDENTS = 5076 - SYS_GETCWD = 5077 - SYS_CHDIR = 5078 - SYS_FCHDIR = 5079 - SYS_RENAME = 5080 - SYS_MKDIR = 5081 - SYS_RMDIR = 5082 - SYS_CREAT = 5083 - SYS_LINK = 5084 - SYS_UNLINK = 5085 - SYS_SYMLINK = 5086 - SYS_READLINK = 5087 - SYS_CHMOD = 5088 - SYS_FCHMOD = 5089 - SYS_CHOWN = 5090 - SYS_FCHOWN = 5091 - SYS_LCHOWN = 5092 - SYS_UMASK = 5093 - SYS_GETTIMEOFDAY = 5094 - SYS_GETRLIMIT = 5095 - SYS_GETRUSAGE = 5096 - SYS_SYSINFO = 5097 - SYS_TIMES = 5098 - SYS_PTRACE = 5099 - SYS_GETUID = 5100 - SYS_SYSLOG = 5101 - SYS_GETGID = 5102 - SYS_SETUID = 5103 - SYS_SETGID = 5104 - SYS_GETEUID = 5105 - SYS_GETEGID = 5106 - SYS_SETPGID = 5107 - SYS_GETPPID = 5108 - SYS_GETPGRP = 5109 - SYS_SETSID = 5110 - SYS_SETREUID = 5111 - SYS_SETREGID = 5112 - SYS_GETGROUPS = 5113 - SYS_SETGROUPS = 5114 - SYS_SETRESUID = 5115 - SYS_GETRESUID = 5116 - SYS_SETRESGID = 5117 - SYS_GETRESGID = 5118 - SYS_GETPGID = 5119 - SYS_SETFSUID = 5120 - SYS_SETFSGID = 5121 - SYS_GETSID = 5122 - SYS_CAPGET = 5123 - SYS_CAPSET = 5124 - SYS_RT_SIGPENDING = 5125 - SYS_RT_SIGTIMEDWAIT = 5126 - SYS_RT_SIGQUEUEINFO = 5127 - SYS_RT_SIGSUSPEND = 5128 - SYS_SIGALTSTACK = 5129 - SYS_UTIME = 5130 - SYS_MKNOD = 5131 - SYS_PERSONALITY = 5132 - SYS_USTAT = 5133 - SYS_STATFS = 5134 - SYS_FSTATFS = 5135 - SYS_SYSFS = 5136 - SYS_GETPRIORITY = 5137 - SYS_SETPRIORITY = 5138 - SYS_SCHED_SETPARAM = 5139 - SYS_SCHED_GETPARAM = 5140 - SYS_SCHED_SETSCHEDULER = 5141 - SYS_SCHED_GETSCHEDULER = 5142 - SYS_SCHED_GET_PRIORITY_MAX = 5143 - SYS_SCHED_GET_PRIORITY_MIN = 5144 - SYS_SCHED_RR_GET_INTERVAL = 5145 - SYS_MLOCK = 5146 - SYS_MUNLOCK = 5147 - SYS_MLOCKALL = 5148 - SYS_MUNLOCKALL = 5149 - SYS_VHANGUP = 5150 - SYS_PIVOT_ROOT = 5151 - SYS__SYSCTL = 5152 - SYS_PRCTL = 5153 - SYS_ADJTIMEX = 5154 - SYS_SETRLIMIT = 5155 - SYS_CHROOT = 5156 - SYS_SYNC = 5157 - SYS_ACCT = 5158 - SYS_SETTIMEOFDAY = 5159 - SYS_MOUNT = 5160 - SYS_UMOUNT2 = 5161 - SYS_SWAPON = 5162 - SYS_SWAPOFF = 5163 - SYS_REBOOT = 5164 - SYS_SETHOSTNAME = 5165 - SYS_SETDOMAINNAME = 5166 - SYS_CREATE_MODULE = 5167 - SYS_INIT_MODULE = 5168 - SYS_DELETE_MODULE = 5169 - SYS_GET_KERNEL_SYMS = 5170 - SYS_QUERY_MODULE = 5171 - SYS_QUOTACTL = 5172 - SYS_NFSSERVCTL = 5173 - SYS_GETPMSG = 5174 - SYS_PUTPMSG = 5175 - SYS_AFS_SYSCALL = 5176 - SYS_RESERVED177 = 5177 - SYS_GETTID = 5178 - SYS_READAHEAD = 5179 - SYS_SETXATTR = 5180 - SYS_LSETXATTR = 5181 - SYS_FSETXATTR = 5182 - SYS_GETXATTR = 5183 - SYS_LGETXATTR = 5184 - SYS_FGETXATTR = 5185 - SYS_LISTXATTR = 5186 - SYS_LLISTXATTR = 5187 - SYS_FLISTXATTR = 5188 - SYS_REMOVEXATTR = 5189 - SYS_LREMOVEXATTR = 5190 - SYS_FREMOVEXATTR = 5191 - SYS_TKILL = 5192 - SYS_RESERVED193 = 5193 - SYS_FUTEX = 5194 - SYS_SCHED_SETAFFINITY = 5195 - SYS_SCHED_GETAFFINITY = 5196 - SYS_CACHEFLUSH = 5197 - SYS_CACHECTL = 5198 - SYS_SYSMIPS = 5199 - SYS_IO_SETUP = 5200 - SYS_IO_DESTROY = 5201 - SYS_IO_GETEVENTS = 5202 - SYS_IO_SUBMIT = 5203 - SYS_IO_CANCEL = 5204 - SYS_EXIT_GROUP = 5205 - SYS_LOOKUP_DCOOKIE = 5206 - SYS_EPOLL_CREATE = 5207 - SYS_EPOLL_CTL = 5208 - SYS_EPOLL_WAIT = 5209 - SYS_REMAP_FILE_PAGES = 5210 - SYS_RT_SIGRETURN = 5211 - SYS_SET_TID_ADDRESS = 5212 - SYS_RESTART_SYSCALL = 5213 - SYS_SEMTIMEDOP = 5214 - SYS_FADVISE64 = 5215 - SYS_TIMER_CREATE = 5216 - SYS_TIMER_SETTIME = 5217 - SYS_TIMER_GETTIME = 5218 - SYS_TIMER_GETOVERRUN = 5219 - SYS_TIMER_DELETE = 5220 - SYS_CLOCK_SETTIME = 5221 - SYS_CLOCK_GETTIME = 5222 - SYS_CLOCK_GETRES = 5223 - SYS_CLOCK_NANOSLEEP = 5224 - SYS_TGKILL = 5225 - SYS_UTIMES = 5226 - SYS_MBIND = 5227 - SYS_GET_MEMPOLICY = 5228 - SYS_SET_MEMPOLICY = 5229 - SYS_MQ_OPEN = 5230 - SYS_MQ_UNLINK = 5231 - SYS_MQ_TIMEDSEND = 5232 - SYS_MQ_TIMEDRECEIVE = 5233 - SYS_MQ_NOTIFY = 5234 - SYS_MQ_GETSETATTR = 5235 - SYS_VSERVER = 5236 - SYS_WAITID = 5237 - SYS_ADD_KEY = 5239 - SYS_REQUEST_KEY = 5240 - SYS_KEYCTL = 5241 - SYS_SET_THREAD_AREA = 5242 - SYS_INOTIFY_INIT = 5243 - SYS_INOTIFY_ADD_WATCH = 5244 - SYS_INOTIFY_RM_WATCH = 5245 - SYS_MIGRATE_PAGES = 5246 - SYS_OPENAT = 5247 - SYS_MKDIRAT = 5248 - SYS_MKNODAT = 5249 - SYS_FCHOWNAT = 5250 - SYS_FUTIMESAT = 5251 - SYS_NEWFSTATAT = 5252 - SYS_UNLINKAT = 5253 - SYS_RENAMEAT = 5254 - SYS_LINKAT = 5255 - SYS_SYMLINKAT = 5256 - SYS_READLINKAT = 5257 - SYS_FCHMODAT = 5258 - SYS_FACCESSAT = 5259 - SYS_PSELECT6 = 5260 - SYS_PPOLL = 5261 - SYS_UNSHARE = 5262 - SYS_SPLICE = 5263 - SYS_SYNC_FILE_RANGE = 5264 - SYS_TEE = 5265 - SYS_VMSPLICE = 5266 - SYS_MOVE_PAGES = 5267 - SYS_SET_ROBUST_LIST = 5268 - SYS_GET_ROBUST_LIST = 5269 - SYS_KEXEC_LOAD = 5270 - SYS_GETCPU = 5271 - SYS_EPOLL_PWAIT = 5272 - SYS_IOPRIO_SET = 5273 - SYS_IOPRIO_GET = 5274 - SYS_UTIMENSAT = 5275 - SYS_SIGNALFD = 5276 - SYS_TIMERFD = 5277 - SYS_EVENTFD = 5278 - SYS_FALLOCATE = 5279 - SYS_TIMERFD_CREATE = 5280 - SYS_TIMERFD_GETTIME = 5281 - SYS_TIMERFD_SETTIME = 5282 - SYS_SIGNALFD4 = 5283 - SYS_EVENTFD2 = 5284 - SYS_EPOLL_CREATE1 = 5285 - SYS_DUP3 = 5286 - SYS_PIPE2 = 5287 - SYS_INOTIFY_INIT1 = 5288 - SYS_PREADV = 5289 - SYS_PWRITEV = 5290 - SYS_RT_TGSIGQUEUEINFO = 5291 - SYS_PERF_EVENT_OPEN = 5292 - SYS_ACCEPT4 = 5293 - SYS_RECVMMSG = 5294 - SYS_FANOTIFY_INIT = 5295 - SYS_FANOTIFY_MARK = 5296 - SYS_PRLIMIT64 = 5297 - SYS_NAME_TO_HANDLE_AT = 5298 - SYS_OPEN_BY_HANDLE_AT = 5299 - SYS_CLOCK_ADJTIME = 5300 - SYS_SYNCFS = 5301 - SYS_SENDMMSG = 5302 - SYS_SETNS = 5303 - SYS_PROCESS_VM_READV = 5304 - SYS_PROCESS_VM_WRITEV = 5305 - SYS_KCMP = 5306 - SYS_FINIT_MODULE = 5307 - SYS_GETDENTS64 = 5308 - SYS_SCHED_SETATTR = 5309 - SYS_SCHED_GETATTR = 5310 - SYS_RENAMEAT2 = 5311 - SYS_SECCOMP = 5312 - SYS_GETRANDOM = 5313 - SYS_MEMFD_CREATE = 5314 - SYS_BPF = 5315 - SYS_EXECVEAT = 5316 - SYS_USERFAULTFD = 5317 - SYS_MEMBARRIER = 5318 - SYS_MLOCK2 = 5319 - SYS_COPY_FILE_RANGE = 5320 - SYS_PREADV2 = 5321 - SYS_PWRITEV2 = 5322 - SYS_PKEY_MPROTECT = 5323 - SYS_PKEY_ALLOC = 5324 - SYS_PKEY_FREE = 5325 - SYS_STATX = 5326 - SYS_RSEQ = 5327 - SYS_IO_PGETEVENTS = 5328 - SYS_PIDFD_SEND_SIGNAL = 5424 - SYS_IO_URING_SETUP = 5425 - SYS_IO_URING_ENTER = 5426 - SYS_IO_URING_REGISTER = 5427 - SYS_OPEN_TREE = 5428 - SYS_MOVE_MOUNT = 5429 - SYS_FSOPEN = 5430 - SYS_FSCONFIG = 5431 - SYS_FSMOUNT = 5432 - SYS_FSPICK = 5433 - SYS_PIDFD_OPEN = 5434 - SYS_CLONE3 = 5435 - SYS_CLOSE_RANGE = 5436 - SYS_OPENAT2 = 5437 - SYS_PIDFD_GETFD = 5438 - SYS_FACCESSAT2 = 5439 - SYS_PROCESS_MADVISE = 5440 - SYS_EPOLL_PWAIT2 = 5441 - SYS_MOUNT_SETATTR = 5442 - SYS_QUOTACTL_FD = 5443 - SYS_LANDLOCK_CREATE_RULESET = 5444 - SYS_LANDLOCK_ADD_RULE = 5445 - SYS_LANDLOCK_RESTRICT_SELF = 5446 - SYS_PROCESS_MRELEASE = 5448 - SYS_FUTEX_WAITV = 5449 - SYS_SET_MEMPOLICY_HOME_NODE = 5450 -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go deleted file mode 100644 index 867985f..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +++ /dev/null @@ -1,434 +0,0 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/mipsle/include /tmp/mipsle/include/asm/unistd.h -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build mipsle && linux -// +build mipsle,linux - -package unix - -const ( - SYS_SYSCALL = 4000 - SYS_EXIT = 4001 - SYS_FORK = 4002 - SYS_READ = 4003 - SYS_WRITE = 4004 - SYS_OPEN = 4005 - SYS_CLOSE = 4006 - SYS_WAITPID = 4007 - SYS_CREAT = 4008 - SYS_LINK = 4009 - SYS_UNLINK = 4010 - SYS_EXECVE = 4011 - SYS_CHDIR = 4012 - SYS_TIME = 4013 - SYS_MKNOD = 4014 - SYS_CHMOD = 4015 - SYS_LCHOWN = 4016 - SYS_BREAK = 4017 - SYS_UNUSED18 = 4018 - SYS_LSEEK = 4019 - SYS_GETPID = 4020 - SYS_MOUNT = 4021 - SYS_UMOUNT = 4022 - SYS_SETUID = 4023 - SYS_GETUID = 4024 - SYS_STIME = 4025 - SYS_PTRACE = 4026 - SYS_ALARM = 4027 - SYS_UNUSED28 = 4028 - SYS_PAUSE = 4029 - SYS_UTIME = 4030 - SYS_STTY = 4031 - SYS_GTTY = 4032 - SYS_ACCESS = 4033 - SYS_NICE = 4034 - SYS_FTIME = 4035 - SYS_SYNC = 4036 - SYS_KILL = 4037 - SYS_RENAME = 4038 - SYS_MKDIR = 4039 - SYS_RMDIR = 4040 - SYS_DUP = 4041 - SYS_PIPE = 4042 - SYS_TIMES = 4043 - SYS_PROF = 4044 - SYS_BRK = 4045 - SYS_SETGID = 4046 - SYS_GETGID = 4047 - SYS_SIGNAL = 4048 - SYS_GETEUID = 4049 - SYS_GETEGID = 4050 - SYS_ACCT = 4051 - SYS_UMOUNT2 = 4052 - SYS_LOCK = 4053 - SYS_IOCTL = 4054 - SYS_FCNTL = 4055 - SYS_MPX = 4056 - SYS_SETPGID = 4057 - SYS_ULIMIT = 4058 - SYS_UNUSED59 = 4059 - SYS_UMASK = 4060 - SYS_CHROOT = 4061 - SYS_USTAT = 4062 - SYS_DUP2 = 4063 - SYS_GETPPID = 4064 - SYS_GETPGRP = 4065 - SYS_SETSID = 4066 - SYS_SIGACTION = 4067 - SYS_SGETMASK = 4068 - SYS_SSETMASK = 4069 - SYS_SETREUID = 4070 - SYS_SETREGID = 4071 - SYS_SIGSUSPEND = 4072 - SYS_SIGPENDING = 4073 - SYS_SETHOSTNAME = 4074 - SYS_SETRLIMIT = 4075 - SYS_GETRLIMIT = 4076 - SYS_GETRUSAGE = 4077 - SYS_GETTIMEOFDAY = 4078 - SYS_SETTIMEOFDAY = 4079 - SYS_GETGROUPS = 4080 - SYS_SETGROUPS = 4081 - SYS_RESERVED82 = 4082 - SYS_SYMLINK = 4083 - SYS_UNUSED84 = 4084 - SYS_READLINK = 4085 - SYS_USELIB = 4086 - SYS_SWAPON = 4087 - SYS_REBOOT = 4088 - SYS_READDIR = 4089 - SYS_MMAP = 4090 - SYS_MUNMAP = 4091 - SYS_TRUNCATE = 4092 - SYS_FTRUNCATE = 4093 - SYS_FCHMOD = 4094 - SYS_FCHOWN = 4095 - SYS_GETPRIORITY = 4096 - SYS_SETPRIORITY = 4097 - SYS_PROFIL = 4098 - SYS_STATFS = 4099 - SYS_FSTATFS = 4100 - SYS_IOPERM = 4101 - SYS_SOCKETCALL = 4102 - SYS_SYSLOG = 4103 - SYS_SETITIMER = 4104 - SYS_GETITIMER = 4105 - SYS_STAT = 4106 - SYS_LSTAT = 4107 - SYS_FSTAT = 4108 - SYS_UNUSED109 = 4109 - SYS_IOPL = 4110 - SYS_VHANGUP = 4111 - SYS_IDLE = 4112 - SYS_VM86 = 4113 - SYS_WAIT4 = 4114 - SYS_SWAPOFF = 4115 - SYS_SYSINFO = 4116 - SYS_IPC = 4117 - SYS_FSYNC = 4118 - SYS_SIGRETURN = 4119 - SYS_CLONE = 4120 - SYS_SETDOMAINNAME = 4121 - SYS_UNAME = 4122 - SYS_MODIFY_LDT = 4123 - SYS_ADJTIMEX = 4124 - SYS_MPROTECT = 4125 - SYS_SIGPROCMASK = 4126 - SYS_CREATE_MODULE = 4127 - SYS_INIT_MODULE = 4128 - SYS_DELETE_MODULE = 4129 - SYS_GET_KERNEL_SYMS = 4130 - SYS_QUOTACTL = 4131 - SYS_GETPGID = 4132 - SYS_FCHDIR = 4133 - SYS_BDFLUSH = 4134 - SYS_SYSFS = 4135 - SYS_PERSONALITY = 4136 - SYS_AFS_SYSCALL = 4137 - SYS_SETFSUID = 4138 - SYS_SETFSGID = 4139 - SYS__LLSEEK = 4140 - SYS_GETDENTS = 4141 - SYS__NEWSELECT = 4142 - SYS_FLOCK = 4143 - SYS_MSYNC = 4144 - SYS_READV = 4145 - SYS_WRITEV = 4146 - SYS_CACHEFLUSH = 4147 - SYS_CACHECTL = 4148 - SYS_SYSMIPS = 4149 - SYS_UNUSED150 = 4150 - SYS_GETSID = 4151 - SYS_FDATASYNC = 4152 - SYS__SYSCTL = 4153 - SYS_MLOCK = 4154 - SYS_MUNLOCK = 4155 - SYS_MLOCKALL = 4156 - SYS_MUNLOCKALL = 4157 - SYS_SCHED_SETPARAM = 4158 - SYS_SCHED_GETPARAM = 4159 - SYS_SCHED_SETSCHEDULER = 4160 - SYS_SCHED_GETSCHEDULER = 4161 - SYS_SCHED_YIELD = 4162 - SYS_SCHED_GET_PRIORITY_MAX = 4163 - SYS_SCHED_GET_PRIORITY_MIN = 4164 - SYS_SCHED_RR_GET_INTERVAL = 4165 - SYS_NANOSLEEP = 4166 - SYS_MREMAP = 4167 - SYS_ACCEPT = 4168 - SYS_BIND = 4169 - SYS_CONNECT = 4170 - SYS_GETPEERNAME = 4171 - SYS_GETSOCKNAME = 4172 - SYS_GETSOCKOPT = 4173 - SYS_LISTEN = 4174 - SYS_RECV = 4175 - SYS_RECVFROM = 4176 - SYS_RECVMSG = 4177 - SYS_SEND = 4178 - SYS_SENDMSG = 4179 - SYS_SENDTO = 4180 - SYS_SETSOCKOPT = 4181 - SYS_SHUTDOWN = 4182 - SYS_SOCKET = 4183 - SYS_SOCKETPAIR = 4184 - SYS_SETRESUID = 4185 - SYS_GETRESUID = 4186 - SYS_QUERY_MODULE = 4187 - SYS_POLL = 4188 - SYS_NFSSERVCTL = 4189 - SYS_SETRESGID = 4190 - SYS_GETRESGID = 4191 - SYS_PRCTL = 4192 - SYS_RT_SIGRETURN = 4193 - SYS_RT_SIGACTION = 4194 - SYS_RT_SIGPROCMASK = 4195 - SYS_RT_SIGPENDING = 4196 - SYS_RT_SIGTIMEDWAIT = 4197 - SYS_RT_SIGQUEUEINFO = 4198 - SYS_RT_SIGSUSPEND = 4199 - SYS_PREAD64 = 4200 - SYS_PWRITE64 = 4201 - SYS_CHOWN = 4202 - SYS_GETCWD = 4203 - SYS_CAPGET = 4204 - SYS_CAPSET = 4205 - SYS_SIGALTSTACK = 4206 - SYS_SENDFILE = 4207 - SYS_GETPMSG = 4208 - SYS_PUTPMSG = 4209 - SYS_MMAP2 = 4210 - SYS_TRUNCATE64 = 4211 - SYS_FTRUNCATE64 = 4212 - SYS_STAT64 = 4213 - SYS_LSTAT64 = 4214 - SYS_FSTAT64 = 4215 - SYS_PIVOT_ROOT = 4216 - SYS_MINCORE = 4217 - SYS_MADVISE = 4218 - SYS_GETDENTS64 = 4219 - SYS_FCNTL64 = 4220 - SYS_RESERVED221 = 4221 - SYS_GETTID = 4222 - SYS_READAHEAD = 4223 - SYS_SETXATTR = 4224 - SYS_LSETXATTR = 4225 - SYS_FSETXATTR = 4226 - SYS_GETXATTR = 4227 - SYS_LGETXATTR = 4228 - SYS_FGETXATTR = 4229 - SYS_LISTXATTR = 4230 - SYS_LLISTXATTR = 4231 - SYS_FLISTXATTR = 4232 - SYS_REMOVEXATTR = 4233 - SYS_LREMOVEXATTR = 4234 - SYS_FREMOVEXATTR = 4235 - SYS_TKILL = 4236 - SYS_SENDFILE64 = 4237 - SYS_FUTEX = 4238 - SYS_SCHED_SETAFFINITY = 4239 - SYS_SCHED_GETAFFINITY = 4240 - SYS_IO_SETUP = 4241 - SYS_IO_DESTROY = 4242 - SYS_IO_GETEVENTS = 4243 - SYS_IO_SUBMIT = 4244 - SYS_IO_CANCEL = 4245 - SYS_EXIT_GROUP = 4246 - SYS_LOOKUP_DCOOKIE = 4247 - SYS_EPOLL_CREATE = 4248 - SYS_EPOLL_CTL = 4249 - SYS_EPOLL_WAIT = 4250 - SYS_REMAP_FILE_PAGES = 4251 - SYS_SET_TID_ADDRESS = 4252 - SYS_RESTART_SYSCALL = 4253 - SYS_FADVISE64 = 4254 - SYS_STATFS64 = 4255 - SYS_FSTATFS64 = 4256 - SYS_TIMER_CREATE = 4257 - SYS_TIMER_SETTIME = 4258 - SYS_TIMER_GETTIME = 4259 - SYS_TIMER_GETOVERRUN = 4260 - SYS_TIMER_DELETE = 4261 - SYS_CLOCK_SETTIME = 4262 - SYS_CLOCK_GETTIME = 4263 - SYS_CLOCK_GETRES = 4264 - SYS_CLOCK_NANOSLEEP = 4265 - SYS_TGKILL = 4266 - SYS_UTIMES = 4267 - SYS_MBIND = 4268 - SYS_GET_MEMPOLICY = 4269 - SYS_SET_MEMPOLICY = 4270 - SYS_MQ_OPEN = 4271 - SYS_MQ_UNLINK = 4272 - SYS_MQ_TIMEDSEND = 4273 - SYS_MQ_TIMEDRECEIVE = 4274 - SYS_MQ_NOTIFY = 4275 - SYS_MQ_GETSETATTR = 4276 - SYS_VSERVER = 4277 - SYS_WAITID = 4278 - SYS_ADD_KEY = 4280 - SYS_REQUEST_KEY = 4281 - SYS_KEYCTL = 4282 - SYS_SET_THREAD_AREA = 4283 - SYS_INOTIFY_INIT = 4284 - SYS_INOTIFY_ADD_WATCH = 4285 - SYS_INOTIFY_RM_WATCH = 4286 - SYS_MIGRATE_PAGES = 4287 - SYS_OPENAT = 4288 - SYS_MKDIRAT = 4289 - SYS_MKNODAT = 4290 - SYS_FCHOWNAT = 4291 - SYS_FUTIMESAT = 4292 - SYS_FSTATAT64 = 4293 - SYS_UNLINKAT = 4294 - SYS_RENAMEAT = 4295 - SYS_LINKAT = 4296 - SYS_SYMLINKAT = 4297 - SYS_READLINKAT = 4298 - SYS_FCHMODAT = 4299 - SYS_FACCESSAT = 4300 - SYS_PSELECT6 = 4301 - SYS_PPOLL = 4302 - SYS_UNSHARE = 4303 - SYS_SPLICE = 4304 - SYS_SYNC_FILE_RANGE = 4305 - SYS_TEE = 4306 - SYS_VMSPLICE = 4307 - SYS_MOVE_PAGES = 4308 - SYS_SET_ROBUST_LIST = 4309 - SYS_GET_ROBUST_LIST = 4310 - SYS_KEXEC_LOAD = 4311 - SYS_GETCPU = 4312 - SYS_EPOLL_PWAIT = 4313 - SYS_IOPRIO_SET = 4314 - SYS_IOPRIO_GET = 4315 - SYS_UTIMENSAT = 4316 - SYS_SIGNALFD = 4317 - SYS_TIMERFD = 4318 - SYS_EVENTFD = 4319 - SYS_FALLOCATE = 4320 - SYS_TIMERFD_CREATE = 4321 - SYS_TIMERFD_GETTIME = 4322 - SYS_TIMERFD_SETTIME = 4323 - SYS_SIGNALFD4 = 4324 - SYS_EVENTFD2 = 4325 - SYS_EPOLL_CREATE1 = 4326 - SYS_DUP3 = 4327 - SYS_PIPE2 = 4328 - SYS_INOTIFY_INIT1 = 4329 - SYS_PREADV = 4330 - SYS_PWRITEV = 4331 - SYS_RT_TGSIGQUEUEINFO = 4332 - SYS_PERF_EVENT_OPEN = 4333 - SYS_ACCEPT4 = 4334 - SYS_RECVMMSG = 4335 - SYS_FANOTIFY_INIT = 4336 - SYS_FANOTIFY_MARK = 4337 - SYS_PRLIMIT64 = 4338 - SYS_NAME_TO_HANDLE_AT = 4339 - SYS_OPEN_BY_HANDLE_AT = 4340 - SYS_CLOCK_ADJTIME = 4341 - SYS_SYNCFS = 4342 - SYS_SENDMMSG = 4343 - SYS_SETNS = 4344 - SYS_PROCESS_VM_READV = 4345 - SYS_PROCESS_VM_WRITEV = 4346 - SYS_KCMP = 4347 - SYS_FINIT_MODULE = 4348 - SYS_SCHED_SETATTR = 4349 - SYS_SCHED_GETATTR = 4350 - SYS_RENAMEAT2 = 4351 - SYS_SECCOMP = 4352 - SYS_GETRANDOM = 4353 - SYS_MEMFD_CREATE = 4354 - SYS_BPF = 4355 - SYS_EXECVEAT = 4356 - SYS_USERFAULTFD = 4357 - SYS_MEMBARRIER = 4358 - SYS_MLOCK2 = 4359 - SYS_COPY_FILE_RANGE = 4360 - SYS_PREADV2 = 4361 - SYS_PWRITEV2 = 4362 - SYS_PKEY_MPROTECT = 4363 - SYS_PKEY_ALLOC = 4364 - SYS_PKEY_FREE = 4365 - SYS_STATX = 4366 - SYS_RSEQ = 4367 - SYS_IO_PGETEVENTS = 4368 - SYS_SEMGET = 4393 - SYS_SEMCTL = 4394 - SYS_SHMGET = 4395 - SYS_SHMCTL = 4396 - SYS_SHMAT = 4397 - SYS_SHMDT = 4398 - SYS_MSGGET = 4399 - SYS_MSGSND = 4400 - SYS_MSGRCV = 4401 - SYS_MSGCTL = 4402 - SYS_CLOCK_GETTIME64 = 4403 - SYS_CLOCK_SETTIME64 = 4404 - SYS_CLOCK_ADJTIME64 = 4405 - SYS_CLOCK_GETRES_TIME64 = 4406 - SYS_CLOCK_NANOSLEEP_TIME64 = 4407 - SYS_TIMER_GETTIME64 = 4408 - SYS_TIMER_SETTIME64 = 4409 - SYS_TIMERFD_GETTIME64 = 4410 - SYS_TIMERFD_SETTIME64 = 4411 - SYS_UTIMENSAT_TIME64 = 4412 - SYS_PSELECT6_TIME64 = 4413 - SYS_PPOLL_TIME64 = 4414 - SYS_IO_PGETEVENTS_TIME64 = 4416 - SYS_RECVMMSG_TIME64 = 4417 - SYS_MQ_TIMEDSEND_TIME64 = 4418 - SYS_MQ_TIMEDRECEIVE_TIME64 = 4419 - SYS_SEMTIMEDOP_TIME64 = 4420 - SYS_RT_SIGTIMEDWAIT_TIME64 = 4421 - SYS_FUTEX_TIME64 = 4422 - SYS_SCHED_RR_GET_INTERVAL_TIME64 = 4423 - SYS_PIDFD_SEND_SIGNAL = 4424 - SYS_IO_URING_SETUP = 4425 - SYS_IO_URING_ENTER = 4426 - SYS_IO_URING_REGISTER = 4427 - SYS_OPEN_TREE = 4428 - SYS_MOVE_MOUNT = 4429 - SYS_FSOPEN = 4430 - SYS_FSCONFIG = 4431 - SYS_FSMOUNT = 4432 - SYS_FSPICK = 4433 - SYS_PIDFD_OPEN = 4434 - SYS_CLONE3 = 4435 - SYS_CLOSE_RANGE = 4436 - SYS_OPENAT2 = 4437 - SYS_PIDFD_GETFD = 4438 - SYS_FACCESSAT2 = 4439 - SYS_PROCESS_MADVISE = 4440 - SYS_EPOLL_PWAIT2 = 4441 - SYS_MOUNT_SETATTR = 4442 - SYS_QUOTACTL_FD = 4443 - SYS_LANDLOCK_CREATE_RULESET = 4444 - SYS_LANDLOCK_ADD_RULE = 4445 - SYS_LANDLOCK_RESTRICT_SELF = 4446 - SYS_PROCESS_MRELEASE = 4448 - SYS_FUTEX_WAITV = 4449 - SYS_SET_MEMPOLICY_HOME_NODE = 4450 -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go deleted file mode 100644 index a8cce69..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +++ /dev/null @@ -1,441 +0,0 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/ppc/include /tmp/ppc/include/asm/unistd.h -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build ppc && linux -// +build ppc,linux - -package unix - -const ( - SYS_RESTART_SYSCALL = 0 - SYS_EXIT = 1 - SYS_FORK = 2 - SYS_READ = 3 - SYS_WRITE = 4 - SYS_OPEN = 5 - SYS_CLOSE = 6 - SYS_WAITPID = 7 - SYS_CREAT = 8 - SYS_LINK = 9 - SYS_UNLINK = 10 - SYS_EXECVE = 11 - SYS_CHDIR = 12 - SYS_TIME = 13 - SYS_MKNOD = 14 - SYS_CHMOD = 15 - SYS_LCHOWN = 16 - SYS_BREAK = 17 - SYS_OLDSTAT = 18 - SYS_LSEEK = 19 - SYS_GETPID = 20 - SYS_MOUNT = 21 - SYS_UMOUNT = 22 - SYS_SETUID = 23 - SYS_GETUID = 24 - SYS_STIME = 25 - SYS_PTRACE = 26 - SYS_ALARM = 27 - SYS_OLDFSTAT = 28 - SYS_PAUSE = 29 - SYS_UTIME = 30 - SYS_STTY = 31 - SYS_GTTY = 32 - SYS_ACCESS = 33 - SYS_NICE = 34 - SYS_FTIME = 35 - SYS_SYNC = 36 - SYS_KILL = 37 - SYS_RENAME = 38 - SYS_MKDIR = 39 - SYS_RMDIR = 40 - SYS_DUP = 41 - SYS_PIPE = 42 - SYS_TIMES = 43 - SYS_PROF = 44 - SYS_BRK = 45 - SYS_SETGID = 46 - SYS_GETGID = 47 - SYS_SIGNAL = 48 - SYS_GETEUID = 49 - SYS_GETEGID = 50 - SYS_ACCT = 51 - SYS_UMOUNT2 = 52 - SYS_LOCK = 53 - SYS_IOCTL = 54 - SYS_FCNTL = 55 - SYS_MPX = 56 - SYS_SETPGID = 57 - SYS_ULIMIT = 58 - SYS_OLDOLDUNAME = 59 - SYS_UMASK = 60 - SYS_CHROOT = 61 - SYS_USTAT = 62 - SYS_DUP2 = 63 - SYS_GETPPID = 64 - SYS_GETPGRP = 65 - SYS_SETSID = 66 - SYS_SIGACTION = 67 - SYS_SGETMASK = 68 - SYS_SSETMASK = 69 - SYS_SETREUID = 70 - SYS_SETREGID = 71 - SYS_SIGSUSPEND = 72 - SYS_SIGPENDING = 73 - SYS_SETHOSTNAME = 74 - SYS_SETRLIMIT = 75 - SYS_GETRLIMIT = 76 - SYS_GETRUSAGE = 77 - SYS_GETTIMEOFDAY = 78 - SYS_SETTIMEOFDAY = 79 - SYS_GETGROUPS = 80 - SYS_SETGROUPS = 81 - SYS_SELECT = 82 - SYS_SYMLINK = 83 - SYS_OLDLSTAT = 84 - SYS_READLINK = 85 - SYS_USELIB = 86 - SYS_SWAPON = 87 - SYS_REBOOT = 88 - SYS_READDIR = 89 - SYS_MMAP = 90 - SYS_MUNMAP = 91 - SYS_TRUNCATE = 92 - SYS_FTRUNCATE = 93 - SYS_FCHMOD = 94 - SYS_FCHOWN = 95 - SYS_GETPRIORITY = 96 - SYS_SETPRIORITY = 97 - SYS_PROFIL = 98 - SYS_STATFS = 99 - SYS_FSTATFS = 100 - SYS_IOPERM = 101 - SYS_SOCKETCALL = 102 - SYS_SYSLOG = 103 - SYS_SETITIMER = 104 - SYS_GETITIMER = 105 - SYS_STAT = 106 - SYS_LSTAT = 107 - SYS_FSTAT = 108 - SYS_OLDUNAME = 109 - SYS_IOPL = 110 - SYS_VHANGUP = 111 - SYS_IDLE = 112 - SYS_VM86 = 113 - SYS_WAIT4 = 114 - SYS_SWAPOFF = 115 - SYS_SYSINFO = 116 - SYS_IPC = 117 - SYS_FSYNC = 118 - SYS_SIGRETURN = 119 - SYS_CLONE = 120 - SYS_SETDOMAINNAME = 121 - SYS_UNAME = 122 - SYS_MODIFY_LDT = 123 - SYS_ADJTIMEX = 124 - SYS_MPROTECT = 125 - SYS_SIGPROCMASK = 126 - SYS_CREATE_MODULE = 127 - SYS_INIT_MODULE = 128 - SYS_DELETE_MODULE = 129 - SYS_GET_KERNEL_SYMS = 130 - SYS_QUOTACTL = 131 - SYS_GETPGID = 132 - SYS_FCHDIR = 133 - SYS_BDFLUSH = 134 - SYS_SYSFS = 135 - SYS_PERSONALITY = 136 - SYS_AFS_SYSCALL = 137 - SYS_SETFSUID = 138 - SYS_SETFSGID = 139 - SYS__LLSEEK = 140 - SYS_GETDENTS = 141 - SYS__NEWSELECT = 142 - SYS_FLOCK = 143 - SYS_MSYNC = 144 - SYS_READV = 145 - SYS_WRITEV = 146 - SYS_GETSID = 147 - SYS_FDATASYNC = 148 - SYS__SYSCTL = 149 - SYS_MLOCK = 150 - SYS_MUNLOCK = 151 - SYS_MLOCKALL = 152 - SYS_MUNLOCKALL = 153 - SYS_SCHED_SETPARAM = 154 - SYS_SCHED_GETPARAM = 155 - SYS_SCHED_SETSCHEDULER = 156 - SYS_SCHED_GETSCHEDULER = 157 - SYS_SCHED_YIELD = 158 - SYS_SCHED_GET_PRIORITY_MAX = 159 - SYS_SCHED_GET_PRIORITY_MIN = 160 - SYS_SCHED_RR_GET_INTERVAL = 161 - SYS_NANOSLEEP = 162 - SYS_MREMAP = 163 - SYS_SETRESUID = 164 - SYS_GETRESUID = 165 - SYS_QUERY_MODULE = 166 - SYS_POLL = 167 - SYS_NFSSERVCTL = 168 - SYS_SETRESGID = 169 - SYS_GETRESGID = 170 - SYS_PRCTL = 171 - SYS_RT_SIGRETURN = 172 - SYS_RT_SIGACTION = 173 - SYS_RT_SIGPROCMASK = 174 - SYS_RT_SIGPENDING = 175 - SYS_RT_SIGTIMEDWAIT = 176 - SYS_RT_SIGQUEUEINFO = 177 - SYS_RT_SIGSUSPEND = 178 - SYS_PREAD64 = 179 - SYS_PWRITE64 = 180 - SYS_CHOWN = 181 - SYS_GETCWD = 182 - SYS_CAPGET = 183 - SYS_CAPSET = 184 - SYS_SIGALTSTACK = 185 - SYS_SENDFILE = 186 - SYS_GETPMSG = 187 - SYS_PUTPMSG = 188 - SYS_VFORK = 189 - SYS_UGETRLIMIT = 190 - SYS_READAHEAD = 191 - SYS_MMAP2 = 192 - SYS_TRUNCATE64 = 193 - SYS_FTRUNCATE64 = 194 - SYS_STAT64 = 195 - SYS_LSTAT64 = 196 - SYS_FSTAT64 = 197 - SYS_PCICONFIG_READ = 198 - SYS_PCICONFIG_WRITE = 199 - SYS_PCICONFIG_IOBASE = 200 - SYS_MULTIPLEXER = 201 - SYS_GETDENTS64 = 202 - SYS_PIVOT_ROOT = 203 - SYS_FCNTL64 = 204 - SYS_MADVISE = 205 - SYS_MINCORE = 206 - SYS_GETTID = 207 - SYS_TKILL = 208 - SYS_SETXATTR = 209 - SYS_LSETXATTR = 210 - SYS_FSETXATTR = 211 - SYS_GETXATTR = 212 - SYS_LGETXATTR = 213 - SYS_FGETXATTR = 214 - SYS_LISTXATTR = 215 - SYS_LLISTXATTR = 216 - SYS_FLISTXATTR = 217 - SYS_REMOVEXATTR = 218 - SYS_LREMOVEXATTR = 219 - SYS_FREMOVEXATTR = 220 - SYS_FUTEX = 221 - SYS_SCHED_SETAFFINITY = 222 - SYS_SCHED_GETAFFINITY = 223 - SYS_TUXCALL = 225 - SYS_SENDFILE64 = 226 - SYS_IO_SETUP = 227 - SYS_IO_DESTROY = 228 - SYS_IO_GETEVENTS = 229 - SYS_IO_SUBMIT = 230 - SYS_IO_CANCEL = 231 - SYS_SET_TID_ADDRESS = 232 - SYS_FADVISE64 = 233 - SYS_EXIT_GROUP = 234 - SYS_LOOKUP_DCOOKIE = 235 - SYS_EPOLL_CREATE = 236 - SYS_EPOLL_CTL = 237 - SYS_EPOLL_WAIT = 238 - SYS_REMAP_FILE_PAGES = 239 - SYS_TIMER_CREATE = 240 - SYS_TIMER_SETTIME = 241 - SYS_TIMER_GETTIME = 242 - SYS_TIMER_GETOVERRUN = 243 - SYS_TIMER_DELETE = 244 - SYS_CLOCK_SETTIME = 245 - SYS_CLOCK_GETTIME = 246 - SYS_CLOCK_GETRES = 247 - SYS_CLOCK_NANOSLEEP = 248 - SYS_SWAPCONTEXT = 249 - SYS_TGKILL = 250 - SYS_UTIMES = 251 - SYS_STATFS64 = 252 - SYS_FSTATFS64 = 253 - SYS_FADVISE64_64 = 254 - SYS_RTAS = 255 - SYS_SYS_DEBUG_SETCONTEXT = 256 - SYS_MIGRATE_PAGES = 258 - SYS_MBIND = 259 - SYS_GET_MEMPOLICY = 260 - SYS_SET_MEMPOLICY = 261 - SYS_MQ_OPEN = 262 - SYS_MQ_UNLINK = 263 - SYS_MQ_TIMEDSEND = 264 - SYS_MQ_TIMEDRECEIVE = 265 - SYS_MQ_NOTIFY = 266 - SYS_MQ_GETSETATTR = 267 - SYS_KEXEC_LOAD = 268 - SYS_ADD_KEY = 269 - SYS_REQUEST_KEY = 270 - SYS_KEYCTL = 271 - SYS_WAITID = 272 - SYS_IOPRIO_SET = 273 - SYS_IOPRIO_GET = 274 - SYS_INOTIFY_INIT = 275 - SYS_INOTIFY_ADD_WATCH = 276 - SYS_INOTIFY_RM_WATCH = 277 - SYS_SPU_RUN = 278 - SYS_SPU_CREATE = 279 - SYS_PSELECT6 = 280 - SYS_PPOLL = 281 - SYS_UNSHARE = 282 - SYS_SPLICE = 283 - SYS_TEE = 284 - SYS_VMSPLICE = 285 - SYS_OPENAT = 286 - SYS_MKDIRAT = 287 - SYS_MKNODAT = 288 - SYS_FCHOWNAT = 289 - SYS_FUTIMESAT = 290 - SYS_FSTATAT64 = 291 - SYS_UNLINKAT = 292 - SYS_RENAMEAT = 293 - SYS_LINKAT = 294 - SYS_SYMLINKAT = 295 - SYS_READLINKAT = 296 - SYS_FCHMODAT = 297 - SYS_FACCESSAT = 298 - SYS_GET_ROBUST_LIST = 299 - SYS_SET_ROBUST_LIST = 300 - SYS_MOVE_PAGES = 301 - SYS_GETCPU = 302 - SYS_EPOLL_PWAIT = 303 - SYS_UTIMENSAT = 304 - SYS_SIGNALFD = 305 - SYS_TIMERFD_CREATE = 306 - SYS_EVENTFD = 307 - SYS_SYNC_FILE_RANGE2 = 308 - SYS_FALLOCATE = 309 - SYS_SUBPAGE_PROT = 310 - SYS_TIMERFD_SETTIME = 311 - SYS_TIMERFD_GETTIME = 312 - SYS_SIGNALFD4 = 313 - SYS_EVENTFD2 = 314 - SYS_EPOLL_CREATE1 = 315 - SYS_DUP3 = 316 - SYS_PIPE2 = 317 - SYS_INOTIFY_INIT1 = 318 - SYS_PERF_EVENT_OPEN = 319 - SYS_PREADV = 320 - SYS_PWRITEV = 321 - SYS_RT_TGSIGQUEUEINFO = 322 - SYS_FANOTIFY_INIT = 323 - SYS_FANOTIFY_MARK = 324 - SYS_PRLIMIT64 = 325 - SYS_SOCKET = 326 - SYS_BIND = 327 - SYS_CONNECT = 328 - SYS_LISTEN = 329 - SYS_ACCEPT = 330 - SYS_GETSOCKNAME = 331 - SYS_GETPEERNAME = 332 - SYS_SOCKETPAIR = 333 - SYS_SEND = 334 - SYS_SENDTO = 335 - SYS_RECV = 336 - SYS_RECVFROM = 337 - SYS_SHUTDOWN = 338 - SYS_SETSOCKOPT = 339 - SYS_GETSOCKOPT = 340 - SYS_SENDMSG = 341 - SYS_RECVMSG = 342 - SYS_RECVMMSG = 343 - SYS_ACCEPT4 = 344 - SYS_NAME_TO_HANDLE_AT = 345 - SYS_OPEN_BY_HANDLE_AT = 346 - SYS_CLOCK_ADJTIME = 347 - SYS_SYNCFS = 348 - SYS_SENDMMSG = 349 - SYS_SETNS = 350 - SYS_PROCESS_VM_READV = 351 - SYS_PROCESS_VM_WRITEV = 352 - SYS_FINIT_MODULE = 353 - SYS_KCMP = 354 - SYS_SCHED_SETATTR = 355 - SYS_SCHED_GETATTR = 356 - SYS_RENAMEAT2 = 357 - SYS_SECCOMP = 358 - SYS_GETRANDOM = 359 - SYS_MEMFD_CREATE = 360 - SYS_BPF = 361 - SYS_EXECVEAT = 362 - SYS_SWITCH_ENDIAN = 363 - SYS_USERFAULTFD = 364 - SYS_MEMBARRIER = 365 - SYS_MLOCK2 = 378 - SYS_COPY_FILE_RANGE = 379 - SYS_PREADV2 = 380 - SYS_PWRITEV2 = 381 - SYS_KEXEC_FILE_LOAD = 382 - SYS_STATX = 383 - SYS_PKEY_ALLOC = 384 - SYS_PKEY_FREE = 385 - SYS_PKEY_MPROTECT = 386 - SYS_RSEQ = 387 - SYS_IO_PGETEVENTS = 388 - SYS_SEMGET = 393 - SYS_SEMCTL = 394 - SYS_SHMGET = 395 - SYS_SHMCTL = 396 - SYS_SHMAT = 397 - SYS_SHMDT = 398 - SYS_MSGGET = 399 - SYS_MSGSND = 400 - SYS_MSGRCV = 401 - SYS_MSGCTL = 402 - SYS_CLOCK_GETTIME64 = 403 - SYS_CLOCK_SETTIME64 = 404 - SYS_CLOCK_ADJTIME64 = 405 - SYS_CLOCK_GETRES_TIME64 = 406 - SYS_CLOCK_NANOSLEEP_TIME64 = 407 - SYS_TIMER_GETTIME64 = 408 - SYS_TIMER_SETTIME64 = 409 - SYS_TIMERFD_GETTIME64 = 410 - SYS_TIMERFD_SETTIME64 = 411 - SYS_UTIMENSAT_TIME64 = 412 - SYS_PSELECT6_TIME64 = 413 - SYS_PPOLL_TIME64 = 414 - SYS_IO_PGETEVENTS_TIME64 = 416 - SYS_RECVMMSG_TIME64 = 417 - SYS_MQ_TIMEDSEND_TIME64 = 418 - SYS_MQ_TIMEDRECEIVE_TIME64 = 419 - SYS_SEMTIMEDOP_TIME64 = 420 - SYS_RT_SIGTIMEDWAIT_TIME64 = 421 - SYS_FUTEX_TIME64 = 422 - SYS_SCHED_RR_GET_INTERVAL_TIME64 = 423 - SYS_PIDFD_SEND_SIGNAL = 424 - SYS_IO_URING_SETUP = 425 - SYS_IO_URING_ENTER = 426 - SYS_IO_URING_REGISTER = 427 - SYS_OPEN_TREE = 428 - SYS_MOVE_MOUNT = 429 - SYS_FSOPEN = 430 - SYS_FSCONFIG = 431 - SYS_FSMOUNT = 432 - SYS_FSPICK = 433 - SYS_PIDFD_OPEN = 434 - SYS_CLONE3 = 435 - SYS_CLOSE_RANGE = 436 - SYS_OPENAT2 = 437 - SYS_PIDFD_GETFD = 438 - SYS_FACCESSAT2 = 439 - SYS_PROCESS_MADVISE = 440 - SYS_EPOLL_PWAIT2 = 441 - SYS_MOUNT_SETATTR = 442 - SYS_QUOTACTL_FD = 443 - SYS_LANDLOCK_CREATE_RULESET = 444 - SYS_LANDLOCK_ADD_RULE = 445 - SYS_LANDLOCK_RESTRICT_SELF = 446 - SYS_PROCESS_MRELEASE = 448 - SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go deleted file mode 100644 index d44c5b3..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +++ /dev/null @@ -1,413 +0,0 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/ppc64/include /tmp/ppc64/include/asm/unistd.h -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build ppc64 && linux -// +build ppc64,linux - -package unix - -const ( - SYS_RESTART_SYSCALL = 0 - SYS_EXIT = 1 - SYS_FORK = 2 - SYS_READ = 3 - SYS_WRITE = 4 - SYS_OPEN = 5 - SYS_CLOSE = 6 - SYS_WAITPID = 7 - SYS_CREAT = 8 - SYS_LINK = 9 - SYS_UNLINK = 10 - SYS_EXECVE = 11 - SYS_CHDIR = 12 - SYS_TIME = 13 - SYS_MKNOD = 14 - SYS_CHMOD = 15 - SYS_LCHOWN = 16 - SYS_BREAK = 17 - SYS_OLDSTAT = 18 - SYS_LSEEK = 19 - SYS_GETPID = 20 - SYS_MOUNT = 21 - SYS_UMOUNT = 22 - SYS_SETUID = 23 - SYS_GETUID = 24 - SYS_STIME = 25 - SYS_PTRACE = 26 - SYS_ALARM = 27 - SYS_OLDFSTAT = 28 - SYS_PAUSE = 29 - SYS_UTIME = 30 - SYS_STTY = 31 - SYS_GTTY = 32 - SYS_ACCESS = 33 - SYS_NICE = 34 - SYS_FTIME = 35 - SYS_SYNC = 36 - SYS_KILL = 37 - SYS_RENAME = 38 - SYS_MKDIR = 39 - SYS_RMDIR = 40 - SYS_DUP = 41 - SYS_PIPE = 42 - SYS_TIMES = 43 - SYS_PROF = 44 - SYS_BRK = 45 - SYS_SETGID = 46 - SYS_GETGID = 47 - SYS_SIGNAL = 48 - SYS_GETEUID = 49 - SYS_GETEGID = 50 - SYS_ACCT = 51 - SYS_UMOUNT2 = 52 - SYS_LOCK = 53 - SYS_IOCTL = 54 - SYS_FCNTL = 55 - SYS_MPX = 56 - SYS_SETPGID = 57 - SYS_ULIMIT = 58 - SYS_OLDOLDUNAME = 59 - SYS_UMASK = 60 - SYS_CHROOT = 61 - SYS_USTAT = 62 - SYS_DUP2 = 63 - SYS_GETPPID = 64 - SYS_GETPGRP = 65 - SYS_SETSID = 66 - SYS_SIGACTION = 67 - SYS_SGETMASK = 68 - SYS_SSETMASK = 69 - SYS_SETREUID = 70 - SYS_SETREGID = 71 - SYS_SIGSUSPEND = 72 - SYS_SIGPENDING = 73 - SYS_SETHOSTNAME = 74 - SYS_SETRLIMIT = 75 - SYS_GETRLIMIT = 76 - SYS_GETRUSAGE = 77 - SYS_GETTIMEOFDAY = 78 - SYS_SETTIMEOFDAY = 79 - SYS_GETGROUPS = 80 - SYS_SETGROUPS = 81 - SYS_SELECT = 82 - SYS_SYMLINK = 83 - SYS_OLDLSTAT = 84 - SYS_READLINK = 85 - SYS_USELIB = 86 - SYS_SWAPON = 87 - SYS_REBOOT = 88 - SYS_READDIR = 89 - SYS_MMAP = 90 - SYS_MUNMAP = 91 - SYS_TRUNCATE = 92 - SYS_FTRUNCATE = 93 - SYS_FCHMOD = 94 - SYS_FCHOWN = 95 - SYS_GETPRIORITY = 96 - SYS_SETPRIORITY = 97 - SYS_PROFIL = 98 - SYS_STATFS = 99 - SYS_FSTATFS = 100 - SYS_IOPERM = 101 - SYS_SOCKETCALL = 102 - SYS_SYSLOG = 103 - SYS_SETITIMER = 104 - SYS_GETITIMER = 105 - SYS_STAT = 106 - SYS_LSTAT = 107 - SYS_FSTAT = 108 - SYS_OLDUNAME = 109 - SYS_IOPL = 110 - SYS_VHANGUP = 111 - SYS_IDLE = 112 - SYS_VM86 = 113 - SYS_WAIT4 = 114 - SYS_SWAPOFF = 115 - SYS_SYSINFO = 116 - SYS_IPC = 117 - SYS_FSYNC = 118 - SYS_SIGRETURN = 119 - SYS_CLONE = 120 - SYS_SETDOMAINNAME = 121 - SYS_UNAME = 122 - SYS_MODIFY_LDT = 123 - SYS_ADJTIMEX = 124 - SYS_MPROTECT = 125 - SYS_SIGPROCMASK = 126 - SYS_CREATE_MODULE = 127 - SYS_INIT_MODULE = 128 - SYS_DELETE_MODULE = 129 - SYS_GET_KERNEL_SYMS = 130 - SYS_QUOTACTL = 131 - SYS_GETPGID = 132 - SYS_FCHDIR = 133 - SYS_BDFLUSH = 134 - SYS_SYSFS = 135 - SYS_PERSONALITY = 136 - SYS_AFS_SYSCALL = 137 - SYS_SETFSUID = 138 - SYS_SETFSGID = 139 - SYS__LLSEEK = 140 - SYS_GETDENTS = 141 - SYS__NEWSELECT = 142 - SYS_FLOCK = 143 - SYS_MSYNC = 144 - SYS_READV = 145 - SYS_WRITEV = 146 - SYS_GETSID = 147 - SYS_FDATASYNC = 148 - SYS__SYSCTL = 149 - SYS_MLOCK = 150 - SYS_MUNLOCK = 151 - SYS_MLOCKALL = 152 - SYS_MUNLOCKALL = 153 - SYS_SCHED_SETPARAM = 154 - SYS_SCHED_GETPARAM = 155 - SYS_SCHED_SETSCHEDULER = 156 - SYS_SCHED_GETSCHEDULER = 157 - SYS_SCHED_YIELD = 158 - SYS_SCHED_GET_PRIORITY_MAX = 159 - SYS_SCHED_GET_PRIORITY_MIN = 160 - SYS_SCHED_RR_GET_INTERVAL = 161 - SYS_NANOSLEEP = 162 - SYS_MREMAP = 163 - SYS_SETRESUID = 164 - SYS_GETRESUID = 165 - SYS_QUERY_MODULE = 166 - SYS_POLL = 167 - SYS_NFSSERVCTL = 168 - SYS_SETRESGID = 169 - SYS_GETRESGID = 170 - SYS_PRCTL = 171 - SYS_RT_SIGRETURN = 172 - SYS_RT_SIGACTION = 173 - SYS_RT_SIGPROCMASK = 174 - SYS_RT_SIGPENDING = 175 - SYS_RT_SIGTIMEDWAIT = 176 - SYS_RT_SIGQUEUEINFO = 177 - SYS_RT_SIGSUSPEND = 178 - SYS_PREAD64 = 179 - SYS_PWRITE64 = 180 - SYS_CHOWN = 181 - SYS_GETCWD = 182 - SYS_CAPGET = 183 - SYS_CAPSET = 184 - SYS_SIGALTSTACK = 185 - SYS_SENDFILE = 186 - SYS_GETPMSG = 187 - SYS_PUTPMSG = 188 - SYS_VFORK = 189 - SYS_UGETRLIMIT = 190 - SYS_READAHEAD = 191 - SYS_PCICONFIG_READ = 198 - SYS_PCICONFIG_WRITE = 199 - SYS_PCICONFIG_IOBASE = 200 - SYS_MULTIPLEXER = 201 - SYS_GETDENTS64 = 202 - SYS_PIVOT_ROOT = 203 - SYS_MADVISE = 205 - SYS_MINCORE = 206 - SYS_GETTID = 207 - SYS_TKILL = 208 - SYS_SETXATTR = 209 - SYS_LSETXATTR = 210 - SYS_FSETXATTR = 211 - SYS_GETXATTR = 212 - SYS_LGETXATTR = 213 - SYS_FGETXATTR = 214 - SYS_LISTXATTR = 215 - SYS_LLISTXATTR = 216 - SYS_FLISTXATTR = 217 - SYS_REMOVEXATTR = 218 - SYS_LREMOVEXATTR = 219 - SYS_FREMOVEXATTR = 220 - SYS_FUTEX = 221 - SYS_SCHED_SETAFFINITY = 222 - SYS_SCHED_GETAFFINITY = 223 - SYS_TUXCALL = 225 - SYS_IO_SETUP = 227 - SYS_IO_DESTROY = 228 - SYS_IO_GETEVENTS = 229 - SYS_IO_SUBMIT = 230 - SYS_IO_CANCEL = 231 - SYS_SET_TID_ADDRESS = 232 - SYS_FADVISE64 = 233 - SYS_EXIT_GROUP = 234 - SYS_LOOKUP_DCOOKIE = 235 - SYS_EPOLL_CREATE = 236 - SYS_EPOLL_CTL = 237 - SYS_EPOLL_WAIT = 238 - SYS_REMAP_FILE_PAGES = 239 - SYS_TIMER_CREATE = 240 - SYS_TIMER_SETTIME = 241 - SYS_TIMER_GETTIME = 242 - SYS_TIMER_GETOVERRUN = 243 - SYS_TIMER_DELETE = 244 - SYS_CLOCK_SETTIME = 245 - SYS_CLOCK_GETTIME = 246 - SYS_CLOCK_GETRES = 247 - SYS_CLOCK_NANOSLEEP = 248 - SYS_SWAPCONTEXT = 249 - SYS_TGKILL = 250 - SYS_UTIMES = 251 - SYS_STATFS64 = 252 - SYS_FSTATFS64 = 253 - SYS_RTAS = 255 - SYS_SYS_DEBUG_SETCONTEXT = 256 - SYS_MIGRATE_PAGES = 258 - SYS_MBIND = 259 - SYS_GET_MEMPOLICY = 260 - SYS_SET_MEMPOLICY = 261 - SYS_MQ_OPEN = 262 - SYS_MQ_UNLINK = 263 - SYS_MQ_TIMEDSEND = 264 - SYS_MQ_TIMEDRECEIVE = 265 - SYS_MQ_NOTIFY = 266 - SYS_MQ_GETSETATTR = 267 - SYS_KEXEC_LOAD = 268 - SYS_ADD_KEY = 269 - SYS_REQUEST_KEY = 270 - SYS_KEYCTL = 271 - SYS_WAITID = 272 - SYS_IOPRIO_SET = 273 - SYS_IOPRIO_GET = 274 - SYS_INOTIFY_INIT = 275 - SYS_INOTIFY_ADD_WATCH = 276 - SYS_INOTIFY_RM_WATCH = 277 - SYS_SPU_RUN = 278 - SYS_SPU_CREATE = 279 - SYS_PSELECT6 = 280 - SYS_PPOLL = 281 - SYS_UNSHARE = 282 - SYS_SPLICE = 283 - SYS_TEE = 284 - SYS_VMSPLICE = 285 - SYS_OPENAT = 286 - SYS_MKDIRAT = 287 - SYS_MKNODAT = 288 - SYS_FCHOWNAT = 289 - SYS_FUTIMESAT = 290 - SYS_NEWFSTATAT = 291 - SYS_UNLINKAT = 292 - SYS_RENAMEAT = 293 - SYS_LINKAT = 294 - SYS_SYMLINKAT = 295 - SYS_READLINKAT = 296 - SYS_FCHMODAT = 297 - SYS_FACCESSAT = 298 - SYS_GET_ROBUST_LIST = 299 - SYS_SET_ROBUST_LIST = 300 - SYS_MOVE_PAGES = 301 - SYS_GETCPU = 302 - SYS_EPOLL_PWAIT = 303 - SYS_UTIMENSAT = 304 - SYS_SIGNALFD = 305 - SYS_TIMERFD_CREATE = 306 - SYS_EVENTFD = 307 - SYS_SYNC_FILE_RANGE2 = 308 - SYS_FALLOCATE = 309 - SYS_SUBPAGE_PROT = 310 - SYS_TIMERFD_SETTIME = 311 - SYS_TIMERFD_GETTIME = 312 - SYS_SIGNALFD4 = 313 - SYS_EVENTFD2 = 314 - SYS_EPOLL_CREATE1 = 315 - SYS_DUP3 = 316 - SYS_PIPE2 = 317 - SYS_INOTIFY_INIT1 = 318 - SYS_PERF_EVENT_OPEN = 319 - SYS_PREADV = 320 - SYS_PWRITEV = 321 - SYS_RT_TGSIGQUEUEINFO = 322 - SYS_FANOTIFY_INIT = 323 - SYS_FANOTIFY_MARK = 324 - SYS_PRLIMIT64 = 325 - SYS_SOCKET = 326 - SYS_BIND = 327 - SYS_CONNECT = 328 - SYS_LISTEN = 329 - SYS_ACCEPT = 330 - SYS_GETSOCKNAME = 331 - SYS_GETPEERNAME = 332 - SYS_SOCKETPAIR = 333 - SYS_SEND = 334 - SYS_SENDTO = 335 - SYS_RECV = 336 - SYS_RECVFROM = 337 - SYS_SHUTDOWN = 338 - SYS_SETSOCKOPT = 339 - SYS_GETSOCKOPT = 340 - SYS_SENDMSG = 341 - SYS_RECVMSG = 342 - SYS_RECVMMSG = 343 - SYS_ACCEPT4 = 344 - SYS_NAME_TO_HANDLE_AT = 345 - SYS_OPEN_BY_HANDLE_AT = 346 - SYS_CLOCK_ADJTIME = 347 - SYS_SYNCFS = 348 - SYS_SENDMMSG = 349 - SYS_SETNS = 350 - SYS_PROCESS_VM_READV = 351 - SYS_PROCESS_VM_WRITEV = 352 - SYS_FINIT_MODULE = 353 - SYS_KCMP = 354 - SYS_SCHED_SETATTR = 355 - SYS_SCHED_GETATTR = 356 - SYS_RENAMEAT2 = 357 - SYS_SECCOMP = 358 - SYS_GETRANDOM = 359 - SYS_MEMFD_CREATE = 360 - SYS_BPF = 361 - SYS_EXECVEAT = 362 - SYS_SWITCH_ENDIAN = 363 - SYS_USERFAULTFD = 364 - SYS_MEMBARRIER = 365 - SYS_MLOCK2 = 378 - SYS_COPY_FILE_RANGE = 379 - SYS_PREADV2 = 380 - SYS_PWRITEV2 = 381 - SYS_KEXEC_FILE_LOAD = 382 - SYS_STATX = 383 - SYS_PKEY_ALLOC = 384 - SYS_PKEY_FREE = 385 - SYS_PKEY_MPROTECT = 386 - SYS_RSEQ = 387 - SYS_IO_PGETEVENTS = 388 - SYS_SEMTIMEDOP = 392 - SYS_SEMGET = 393 - SYS_SEMCTL = 394 - SYS_SHMGET = 395 - SYS_SHMCTL = 396 - SYS_SHMAT = 397 - SYS_SHMDT = 398 - SYS_MSGGET = 399 - SYS_MSGSND = 400 - SYS_MSGRCV = 401 - SYS_MSGCTL = 402 - SYS_PIDFD_SEND_SIGNAL = 424 - SYS_IO_URING_SETUP = 425 - SYS_IO_URING_ENTER = 426 - SYS_IO_URING_REGISTER = 427 - SYS_OPEN_TREE = 428 - SYS_MOVE_MOUNT = 429 - SYS_FSOPEN = 430 - SYS_FSCONFIG = 431 - SYS_FSMOUNT = 432 - SYS_FSPICK = 433 - SYS_PIDFD_OPEN = 434 - SYS_CLONE3 = 435 - SYS_CLOSE_RANGE = 436 - SYS_OPENAT2 = 437 - SYS_PIDFD_GETFD = 438 - SYS_FACCESSAT2 = 439 - SYS_PROCESS_MADVISE = 440 - SYS_EPOLL_PWAIT2 = 441 - SYS_MOUNT_SETATTR = 442 - SYS_QUOTACTL_FD = 443 - SYS_LANDLOCK_CREATE_RULESET = 444 - SYS_LANDLOCK_ADD_RULE = 445 - SYS_LANDLOCK_RESTRICT_SELF = 446 - SYS_PROCESS_MRELEASE = 448 - SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go deleted file mode 100644 index 4214dd9..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +++ /dev/null @@ -1,413 +0,0 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/ppc64le/include /tmp/ppc64le/include/asm/unistd.h -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build ppc64le && linux -// +build ppc64le,linux - -package unix - -const ( - SYS_RESTART_SYSCALL = 0 - SYS_EXIT = 1 - SYS_FORK = 2 - SYS_READ = 3 - SYS_WRITE = 4 - SYS_OPEN = 5 - SYS_CLOSE = 6 - SYS_WAITPID = 7 - SYS_CREAT = 8 - SYS_LINK = 9 - SYS_UNLINK = 10 - SYS_EXECVE = 11 - SYS_CHDIR = 12 - SYS_TIME = 13 - SYS_MKNOD = 14 - SYS_CHMOD = 15 - SYS_LCHOWN = 16 - SYS_BREAK = 17 - SYS_OLDSTAT = 18 - SYS_LSEEK = 19 - SYS_GETPID = 20 - SYS_MOUNT = 21 - SYS_UMOUNT = 22 - SYS_SETUID = 23 - SYS_GETUID = 24 - SYS_STIME = 25 - SYS_PTRACE = 26 - SYS_ALARM = 27 - SYS_OLDFSTAT = 28 - SYS_PAUSE = 29 - SYS_UTIME = 30 - SYS_STTY = 31 - SYS_GTTY = 32 - SYS_ACCESS = 33 - SYS_NICE = 34 - SYS_FTIME = 35 - SYS_SYNC = 36 - SYS_KILL = 37 - SYS_RENAME = 38 - SYS_MKDIR = 39 - SYS_RMDIR = 40 - SYS_DUP = 41 - SYS_PIPE = 42 - SYS_TIMES = 43 - SYS_PROF = 44 - SYS_BRK = 45 - SYS_SETGID = 46 - SYS_GETGID = 47 - SYS_SIGNAL = 48 - SYS_GETEUID = 49 - SYS_GETEGID = 50 - SYS_ACCT = 51 - SYS_UMOUNT2 = 52 - SYS_LOCK = 53 - SYS_IOCTL = 54 - SYS_FCNTL = 55 - SYS_MPX = 56 - SYS_SETPGID = 57 - SYS_ULIMIT = 58 - SYS_OLDOLDUNAME = 59 - SYS_UMASK = 60 - SYS_CHROOT = 61 - SYS_USTAT = 62 - SYS_DUP2 = 63 - SYS_GETPPID = 64 - SYS_GETPGRP = 65 - SYS_SETSID = 66 - SYS_SIGACTION = 67 - SYS_SGETMASK = 68 - SYS_SSETMASK = 69 - SYS_SETREUID = 70 - SYS_SETREGID = 71 - SYS_SIGSUSPEND = 72 - SYS_SIGPENDING = 73 - SYS_SETHOSTNAME = 74 - SYS_SETRLIMIT = 75 - SYS_GETRLIMIT = 76 - SYS_GETRUSAGE = 77 - SYS_GETTIMEOFDAY = 78 - SYS_SETTIMEOFDAY = 79 - SYS_GETGROUPS = 80 - SYS_SETGROUPS = 81 - SYS_SELECT = 82 - SYS_SYMLINK = 83 - SYS_OLDLSTAT = 84 - SYS_READLINK = 85 - SYS_USELIB = 86 - SYS_SWAPON = 87 - SYS_REBOOT = 88 - SYS_READDIR = 89 - SYS_MMAP = 90 - SYS_MUNMAP = 91 - SYS_TRUNCATE = 92 - SYS_FTRUNCATE = 93 - SYS_FCHMOD = 94 - SYS_FCHOWN = 95 - SYS_GETPRIORITY = 96 - SYS_SETPRIORITY = 97 - SYS_PROFIL = 98 - SYS_STATFS = 99 - SYS_FSTATFS = 100 - SYS_IOPERM = 101 - SYS_SOCKETCALL = 102 - SYS_SYSLOG = 103 - SYS_SETITIMER = 104 - SYS_GETITIMER = 105 - SYS_STAT = 106 - SYS_LSTAT = 107 - SYS_FSTAT = 108 - SYS_OLDUNAME = 109 - SYS_IOPL = 110 - SYS_VHANGUP = 111 - SYS_IDLE = 112 - SYS_VM86 = 113 - SYS_WAIT4 = 114 - SYS_SWAPOFF = 115 - SYS_SYSINFO = 116 - SYS_IPC = 117 - SYS_FSYNC = 118 - SYS_SIGRETURN = 119 - SYS_CLONE = 120 - SYS_SETDOMAINNAME = 121 - SYS_UNAME = 122 - SYS_MODIFY_LDT = 123 - SYS_ADJTIMEX = 124 - SYS_MPROTECT = 125 - SYS_SIGPROCMASK = 126 - SYS_CREATE_MODULE = 127 - SYS_INIT_MODULE = 128 - SYS_DELETE_MODULE = 129 - SYS_GET_KERNEL_SYMS = 130 - SYS_QUOTACTL = 131 - SYS_GETPGID = 132 - SYS_FCHDIR = 133 - SYS_BDFLUSH = 134 - SYS_SYSFS = 135 - SYS_PERSONALITY = 136 - SYS_AFS_SYSCALL = 137 - SYS_SETFSUID = 138 - SYS_SETFSGID = 139 - SYS__LLSEEK = 140 - SYS_GETDENTS = 141 - SYS__NEWSELECT = 142 - SYS_FLOCK = 143 - SYS_MSYNC = 144 - SYS_READV = 145 - SYS_WRITEV = 146 - SYS_GETSID = 147 - SYS_FDATASYNC = 148 - SYS__SYSCTL = 149 - SYS_MLOCK = 150 - SYS_MUNLOCK = 151 - SYS_MLOCKALL = 152 - SYS_MUNLOCKALL = 153 - SYS_SCHED_SETPARAM = 154 - SYS_SCHED_GETPARAM = 155 - SYS_SCHED_SETSCHEDULER = 156 - SYS_SCHED_GETSCHEDULER = 157 - SYS_SCHED_YIELD = 158 - SYS_SCHED_GET_PRIORITY_MAX = 159 - SYS_SCHED_GET_PRIORITY_MIN = 160 - SYS_SCHED_RR_GET_INTERVAL = 161 - SYS_NANOSLEEP = 162 - SYS_MREMAP = 163 - SYS_SETRESUID = 164 - SYS_GETRESUID = 165 - SYS_QUERY_MODULE = 166 - SYS_POLL = 167 - SYS_NFSSERVCTL = 168 - SYS_SETRESGID = 169 - SYS_GETRESGID = 170 - SYS_PRCTL = 171 - SYS_RT_SIGRETURN = 172 - SYS_RT_SIGACTION = 173 - SYS_RT_SIGPROCMASK = 174 - SYS_RT_SIGPENDING = 175 - SYS_RT_SIGTIMEDWAIT = 176 - SYS_RT_SIGQUEUEINFO = 177 - SYS_RT_SIGSUSPEND = 178 - SYS_PREAD64 = 179 - SYS_PWRITE64 = 180 - SYS_CHOWN = 181 - SYS_GETCWD = 182 - SYS_CAPGET = 183 - SYS_CAPSET = 184 - SYS_SIGALTSTACK = 185 - SYS_SENDFILE = 186 - SYS_GETPMSG = 187 - SYS_PUTPMSG = 188 - SYS_VFORK = 189 - SYS_UGETRLIMIT = 190 - SYS_READAHEAD = 191 - SYS_PCICONFIG_READ = 198 - SYS_PCICONFIG_WRITE = 199 - SYS_PCICONFIG_IOBASE = 200 - SYS_MULTIPLEXER = 201 - SYS_GETDENTS64 = 202 - SYS_PIVOT_ROOT = 203 - SYS_MADVISE = 205 - SYS_MINCORE = 206 - SYS_GETTID = 207 - SYS_TKILL = 208 - SYS_SETXATTR = 209 - SYS_LSETXATTR = 210 - SYS_FSETXATTR = 211 - SYS_GETXATTR = 212 - SYS_LGETXATTR = 213 - SYS_FGETXATTR = 214 - SYS_LISTXATTR = 215 - SYS_LLISTXATTR = 216 - SYS_FLISTXATTR = 217 - SYS_REMOVEXATTR = 218 - SYS_LREMOVEXATTR = 219 - SYS_FREMOVEXATTR = 220 - SYS_FUTEX = 221 - SYS_SCHED_SETAFFINITY = 222 - SYS_SCHED_GETAFFINITY = 223 - SYS_TUXCALL = 225 - SYS_IO_SETUP = 227 - SYS_IO_DESTROY = 228 - SYS_IO_GETEVENTS = 229 - SYS_IO_SUBMIT = 230 - SYS_IO_CANCEL = 231 - SYS_SET_TID_ADDRESS = 232 - SYS_FADVISE64 = 233 - SYS_EXIT_GROUP = 234 - SYS_LOOKUP_DCOOKIE = 235 - SYS_EPOLL_CREATE = 236 - SYS_EPOLL_CTL = 237 - SYS_EPOLL_WAIT = 238 - SYS_REMAP_FILE_PAGES = 239 - SYS_TIMER_CREATE = 240 - SYS_TIMER_SETTIME = 241 - SYS_TIMER_GETTIME = 242 - SYS_TIMER_GETOVERRUN = 243 - SYS_TIMER_DELETE = 244 - SYS_CLOCK_SETTIME = 245 - SYS_CLOCK_GETTIME = 246 - SYS_CLOCK_GETRES = 247 - SYS_CLOCK_NANOSLEEP = 248 - SYS_SWAPCONTEXT = 249 - SYS_TGKILL = 250 - SYS_UTIMES = 251 - SYS_STATFS64 = 252 - SYS_FSTATFS64 = 253 - SYS_RTAS = 255 - SYS_SYS_DEBUG_SETCONTEXT = 256 - SYS_MIGRATE_PAGES = 258 - SYS_MBIND = 259 - SYS_GET_MEMPOLICY = 260 - SYS_SET_MEMPOLICY = 261 - SYS_MQ_OPEN = 262 - SYS_MQ_UNLINK = 263 - SYS_MQ_TIMEDSEND = 264 - SYS_MQ_TIMEDRECEIVE = 265 - SYS_MQ_NOTIFY = 266 - SYS_MQ_GETSETATTR = 267 - SYS_KEXEC_LOAD = 268 - SYS_ADD_KEY = 269 - SYS_REQUEST_KEY = 270 - SYS_KEYCTL = 271 - SYS_WAITID = 272 - SYS_IOPRIO_SET = 273 - SYS_IOPRIO_GET = 274 - SYS_INOTIFY_INIT = 275 - SYS_INOTIFY_ADD_WATCH = 276 - SYS_INOTIFY_RM_WATCH = 277 - SYS_SPU_RUN = 278 - SYS_SPU_CREATE = 279 - SYS_PSELECT6 = 280 - SYS_PPOLL = 281 - SYS_UNSHARE = 282 - SYS_SPLICE = 283 - SYS_TEE = 284 - SYS_VMSPLICE = 285 - SYS_OPENAT = 286 - SYS_MKDIRAT = 287 - SYS_MKNODAT = 288 - SYS_FCHOWNAT = 289 - SYS_FUTIMESAT = 290 - SYS_NEWFSTATAT = 291 - SYS_UNLINKAT = 292 - SYS_RENAMEAT = 293 - SYS_LINKAT = 294 - SYS_SYMLINKAT = 295 - SYS_READLINKAT = 296 - SYS_FCHMODAT = 297 - SYS_FACCESSAT = 298 - SYS_GET_ROBUST_LIST = 299 - SYS_SET_ROBUST_LIST = 300 - SYS_MOVE_PAGES = 301 - SYS_GETCPU = 302 - SYS_EPOLL_PWAIT = 303 - SYS_UTIMENSAT = 304 - SYS_SIGNALFD = 305 - SYS_TIMERFD_CREATE = 306 - SYS_EVENTFD = 307 - SYS_SYNC_FILE_RANGE2 = 308 - SYS_FALLOCATE = 309 - SYS_SUBPAGE_PROT = 310 - SYS_TIMERFD_SETTIME = 311 - SYS_TIMERFD_GETTIME = 312 - SYS_SIGNALFD4 = 313 - SYS_EVENTFD2 = 314 - SYS_EPOLL_CREATE1 = 315 - SYS_DUP3 = 316 - SYS_PIPE2 = 317 - SYS_INOTIFY_INIT1 = 318 - SYS_PERF_EVENT_OPEN = 319 - SYS_PREADV = 320 - SYS_PWRITEV = 321 - SYS_RT_TGSIGQUEUEINFO = 322 - SYS_FANOTIFY_INIT = 323 - SYS_FANOTIFY_MARK = 324 - SYS_PRLIMIT64 = 325 - SYS_SOCKET = 326 - SYS_BIND = 327 - SYS_CONNECT = 328 - SYS_LISTEN = 329 - SYS_ACCEPT = 330 - SYS_GETSOCKNAME = 331 - SYS_GETPEERNAME = 332 - SYS_SOCKETPAIR = 333 - SYS_SEND = 334 - SYS_SENDTO = 335 - SYS_RECV = 336 - SYS_RECVFROM = 337 - SYS_SHUTDOWN = 338 - SYS_SETSOCKOPT = 339 - SYS_GETSOCKOPT = 340 - SYS_SENDMSG = 341 - SYS_RECVMSG = 342 - SYS_RECVMMSG = 343 - SYS_ACCEPT4 = 344 - SYS_NAME_TO_HANDLE_AT = 345 - SYS_OPEN_BY_HANDLE_AT = 346 - SYS_CLOCK_ADJTIME = 347 - SYS_SYNCFS = 348 - SYS_SENDMMSG = 349 - SYS_SETNS = 350 - SYS_PROCESS_VM_READV = 351 - SYS_PROCESS_VM_WRITEV = 352 - SYS_FINIT_MODULE = 353 - SYS_KCMP = 354 - SYS_SCHED_SETATTR = 355 - SYS_SCHED_GETATTR = 356 - SYS_RENAMEAT2 = 357 - SYS_SECCOMP = 358 - SYS_GETRANDOM = 359 - SYS_MEMFD_CREATE = 360 - SYS_BPF = 361 - SYS_EXECVEAT = 362 - SYS_SWITCH_ENDIAN = 363 - SYS_USERFAULTFD = 364 - SYS_MEMBARRIER = 365 - SYS_MLOCK2 = 378 - SYS_COPY_FILE_RANGE = 379 - SYS_PREADV2 = 380 - SYS_PWRITEV2 = 381 - SYS_KEXEC_FILE_LOAD = 382 - SYS_STATX = 383 - SYS_PKEY_ALLOC = 384 - SYS_PKEY_FREE = 385 - SYS_PKEY_MPROTECT = 386 - SYS_RSEQ = 387 - SYS_IO_PGETEVENTS = 388 - SYS_SEMTIMEDOP = 392 - SYS_SEMGET = 393 - SYS_SEMCTL = 394 - SYS_SHMGET = 395 - SYS_SHMCTL = 396 - SYS_SHMAT = 397 - SYS_SHMDT = 398 - SYS_MSGGET = 399 - SYS_MSGSND = 400 - SYS_MSGRCV = 401 - SYS_MSGCTL = 402 - SYS_PIDFD_SEND_SIGNAL = 424 - SYS_IO_URING_SETUP = 425 - SYS_IO_URING_ENTER = 426 - SYS_IO_URING_REGISTER = 427 - SYS_OPEN_TREE = 428 - SYS_MOVE_MOUNT = 429 - SYS_FSOPEN = 430 - SYS_FSCONFIG = 431 - SYS_FSMOUNT = 432 - SYS_FSPICK = 433 - SYS_PIDFD_OPEN = 434 - SYS_CLONE3 = 435 - SYS_CLOSE_RANGE = 436 - SYS_OPENAT2 = 437 - SYS_PIDFD_GETFD = 438 - SYS_FACCESSAT2 = 439 - SYS_PROCESS_MADVISE = 440 - SYS_EPOLL_PWAIT2 = 441 - SYS_MOUNT_SETATTR = 442 - SYS_QUOTACTL_FD = 443 - SYS_LANDLOCK_CREATE_RULESET = 444 - SYS_LANDLOCK_ADD_RULE = 445 - SYS_LANDLOCK_RESTRICT_SELF = 446 - SYS_PROCESS_MRELEASE = 448 - SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go deleted file mode 100644 index 3e594a8..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +++ /dev/null @@ -1,316 +0,0 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/riscv64/include /tmp/riscv64/include/asm/unistd.h -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build riscv64 && linux -// +build riscv64,linux - -package unix - -const ( - SYS_IO_SETUP = 0 - SYS_IO_DESTROY = 1 - SYS_IO_SUBMIT = 2 - SYS_IO_CANCEL = 3 - SYS_IO_GETEVENTS = 4 - SYS_SETXATTR = 5 - SYS_LSETXATTR = 6 - SYS_FSETXATTR = 7 - SYS_GETXATTR = 8 - SYS_LGETXATTR = 9 - SYS_FGETXATTR = 10 - SYS_LISTXATTR = 11 - SYS_LLISTXATTR = 12 - SYS_FLISTXATTR = 13 - SYS_REMOVEXATTR = 14 - SYS_LREMOVEXATTR = 15 - SYS_FREMOVEXATTR = 16 - SYS_GETCWD = 17 - SYS_LOOKUP_DCOOKIE = 18 - SYS_EVENTFD2 = 19 - SYS_EPOLL_CREATE1 = 20 - SYS_EPOLL_CTL = 21 - SYS_EPOLL_PWAIT = 22 - SYS_DUP = 23 - SYS_DUP3 = 24 - SYS_FCNTL = 25 - SYS_INOTIFY_INIT1 = 26 - SYS_INOTIFY_ADD_WATCH = 27 - SYS_INOTIFY_RM_WATCH = 28 - SYS_IOCTL = 29 - SYS_IOPRIO_SET = 30 - SYS_IOPRIO_GET = 31 - SYS_FLOCK = 32 - SYS_MKNODAT = 33 - SYS_MKDIRAT = 34 - SYS_UNLINKAT = 35 - SYS_SYMLINKAT = 36 - SYS_LINKAT = 37 - SYS_UMOUNT2 = 39 - SYS_MOUNT = 40 - SYS_PIVOT_ROOT = 41 - SYS_NFSSERVCTL = 42 - SYS_STATFS = 43 - SYS_FSTATFS = 44 - SYS_TRUNCATE = 45 - SYS_FTRUNCATE = 46 - SYS_FALLOCATE = 47 - SYS_FACCESSAT = 48 - SYS_CHDIR = 49 - SYS_FCHDIR = 50 - SYS_CHROOT = 51 - SYS_FCHMOD = 52 - SYS_FCHMODAT = 53 - SYS_FCHOWNAT = 54 - SYS_FCHOWN = 55 - SYS_OPENAT = 56 - SYS_CLOSE = 57 - SYS_VHANGUP = 58 - SYS_PIPE2 = 59 - SYS_QUOTACTL = 60 - SYS_GETDENTS64 = 61 - SYS_LSEEK = 62 - SYS_READ = 63 - SYS_WRITE = 64 - SYS_READV = 65 - SYS_WRITEV = 66 - SYS_PREAD64 = 67 - SYS_PWRITE64 = 68 - SYS_PREADV = 69 - SYS_PWRITEV = 70 - SYS_SENDFILE = 71 - SYS_PSELECT6 = 72 - SYS_PPOLL = 73 - SYS_SIGNALFD4 = 74 - SYS_VMSPLICE = 75 - SYS_SPLICE = 76 - SYS_TEE = 77 - SYS_READLINKAT = 78 - SYS_FSTATAT = 79 - SYS_FSTAT = 80 - SYS_SYNC = 81 - SYS_FSYNC = 82 - SYS_FDATASYNC = 83 - SYS_SYNC_FILE_RANGE = 84 - SYS_TIMERFD_CREATE = 85 - SYS_TIMERFD_SETTIME = 86 - SYS_TIMERFD_GETTIME = 87 - SYS_UTIMENSAT = 88 - SYS_ACCT = 89 - SYS_CAPGET = 90 - SYS_CAPSET = 91 - SYS_PERSONALITY = 92 - SYS_EXIT = 93 - SYS_EXIT_GROUP = 94 - SYS_WAITID = 95 - SYS_SET_TID_ADDRESS = 96 - SYS_UNSHARE = 97 - SYS_FUTEX = 98 - SYS_SET_ROBUST_LIST = 99 - SYS_GET_ROBUST_LIST = 100 - SYS_NANOSLEEP = 101 - SYS_GETITIMER = 102 - SYS_SETITIMER = 103 - SYS_KEXEC_LOAD = 104 - SYS_INIT_MODULE = 105 - SYS_DELETE_MODULE = 106 - SYS_TIMER_CREATE = 107 - SYS_TIMER_GETTIME = 108 - SYS_TIMER_GETOVERRUN = 109 - SYS_TIMER_SETTIME = 110 - SYS_TIMER_DELETE = 111 - SYS_CLOCK_SETTIME = 112 - SYS_CLOCK_GETTIME = 113 - SYS_CLOCK_GETRES = 114 - SYS_CLOCK_NANOSLEEP = 115 - SYS_SYSLOG = 116 - SYS_PTRACE = 117 - SYS_SCHED_SETPARAM = 118 - SYS_SCHED_SETSCHEDULER = 119 - SYS_SCHED_GETSCHEDULER = 120 - SYS_SCHED_GETPARAM = 121 - SYS_SCHED_SETAFFINITY = 122 - SYS_SCHED_GETAFFINITY = 123 - SYS_SCHED_YIELD = 124 - SYS_SCHED_GET_PRIORITY_MAX = 125 - SYS_SCHED_GET_PRIORITY_MIN = 126 - SYS_SCHED_RR_GET_INTERVAL = 127 - SYS_RESTART_SYSCALL = 128 - SYS_KILL = 129 - SYS_TKILL = 130 - SYS_TGKILL = 131 - SYS_SIGALTSTACK = 132 - SYS_RT_SIGSUSPEND = 133 - SYS_RT_SIGACTION = 134 - SYS_RT_SIGPROCMASK = 135 - SYS_RT_SIGPENDING = 136 - SYS_RT_SIGTIMEDWAIT = 137 - SYS_RT_SIGQUEUEINFO = 138 - SYS_RT_SIGRETURN = 139 - SYS_SETPRIORITY = 140 - SYS_GETPRIORITY = 141 - SYS_REBOOT = 142 - SYS_SETREGID = 143 - SYS_SETGID = 144 - SYS_SETREUID = 145 - SYS_SETUID = 146 - SYS_SETRESUID = 147 - SYS_GETRESUID = 148 - SYS_SETRESGID = 149 - SYS_GETRESGID = 150 - SYS_SETFSUID = 151 - SYS_SETFSGID = 152 - SYS_TIMES = 153 - SYS_SETPGID = 154 - SYS_GETPGID = 155 - SYS_GETSID = 156 - SYS_SETSID = 157 - SYS_GETGROUPS = 158 - SYS_SETGROUPS = 159 - SYS_UNAME = 160 - SYS_SETHOSTNAME = 161 - SYS_SETDOMAINNAME = 162 - SYS_GETRLIMIT = 163 - SYS_SETRLIMIT = 164 - SYS_GETRUSAGE = 165 - SYS_UMASK = 166 - SYS_PRCTL = 167 - SYS_GETCPU = 168 - SYS_GETTIMEOFDAY = 169 - SYS_SETTIMEOFDAY = 170 - SYS_ADJTIMEX = 171 - SYS_GETPID = 172 - SYS_GETPPID = 173 - SYS_GETUID = 174 - SYS_GETEUID = 175 - SYS_GETGID = 176 - SYS_GETEGID = 177 - SYS_GETTID = 178 - SYS_SYSINFO = 179 - SYS_MQ_OPEN = 180 - SYS_MQ_UNLINK = 181 - SYS_MQ_TIMEDSEND = 182 - SYS_MQ_TIMEDRECEIVE = 183 - SYS_MQ_NOTIFY = 184 - SYS_MQ_GETSETATTR = 185 - SYS_MSGGET = 186 - SYS_MSGCTL = 187 - SYS_MSGRCV = 188 - SYS_MSGSND = 189 - SYS_SEMGET = 190 - SYS_SEMCTL = 191 - SYS_SEMTIMEDOP = 192 - SYS_SEMOP = 193 - SYS_SHMGET = 194 - SYS_SHMCTL = 195 - SYS_SHMAT = 196 - SYS_SHMDT = 197 - SYS_SOCKET = 198 - SYS_SOCKETPAIR = 199 - SYS_BIND = 200 - SYS_LISTEN = 201 - SYS_ACCEPT = 202 - SYS_CONNECT = 203 - SYS_GETSOCKNAME = 204 - SYS_GETPEERNAME = 205 - SYS_SENDTO = 206 - SYS_RECVFROM = 207 - SYS_SETSOCKOPT = 208 - SYS_GETSOCKOPT = 209 - SYS_SHUTDOWN = 210 - SYS_SENDMSG = 211 - SYS_RECVMSG = 212 - SYS_READAHEAD = 213 - SYS_BRK = 214 - SYS_MUNMAP = 215 - SYS_MREMAP = 216 - SYS_ADD_KEY = 217 - SYS_REQUEST_KEY = 218 - SYS_KEYCTL = 219 - SYS_CLONE = 220 - SYS_EXECVE = 221 - SYS_MMAP = 222 - SYS_FADVISE64 = 223 - SYS_SWAPON = 224 - SYS_SWAPOFF = 225 - SYS_MPROTECT = 226 - SYS_MSYNC = 227 - SYS_MLOCK = 228 - SYS_MUNLOCK = 229 - SYS_MLOCKALL = 230 - SYS_MUNLOCKALL = 231 - SYS_MINCORE = 232 - SYS_MADVISE = 233 - SYS_REMAP_FILE_PAGES = 234 - SYS_MBIND = 235 - SYS_GET_MEMPOLICY = 236 - SYS_SET_MEMPOLICY = 237 - SYS_MIGRATE_PAGES = 238 - SYS_MOVE_PAGES = 239 - SYS_RT_TGSIGQUEUEINFO = 240 - SYS_PERF_EVENT_OPEN = 241 - SYS_ACCEPT4 = 242 - SYS_RECVMMSG = 243 - SYS_ARCH_SPECIFIC_SYSCALL = 244 - SYS_WAIT4 = 260 - SYS_PRLIMIT64 = 261 - SYS_FANOTIFY_INIT = 262 - SYS_FANOTIFY_MARK = 263 - SYS_NAME_TO_HANDLE_AT = 264 - SYS_OPEN_BY_HANDLE_AT = 265 - SYS_CLOCK_ADJTIME = 266 - SYS_SYNCFS = 267 - SYS_SETNS = 268 - SYS_SENDMMSG = 269 - SYS_PROCESS_VM_READV = 270 - SYS_PROCESS_VM_WRITEV = 271 - SYS_KCMP = 272 - SYS_FINIT_MODULE = 273 - SYS_SCHED_SETATTR = 274 - SYS_SCHED_GETATTR = 275 - SYS_RENAMEAT2 = 276 - SYS_SECCOMP = 277 - SYS_GETRANDOM = 278 - SYS_MEMFD_CREATE = 279 - SYS_BPF = 280 - SYS_EXECVEAT = 281 - SYS_USERFAULTFD = 282 - SYS_MEMBARRIER = 283 - SYS_MLOCK2 = 284 - SYS_COPY_FILE_RANGE = 285 - SYS_PREADV2 = 286 - SYS_PWRITEV2 = 287 - SYS_PKEY_MPROTECT = 288 - SYS_PKEY_ALLOC = 289 - SYS_PKEY_FREE = 290 - SYS_STATX = 291 - SYS_IO_PGETEVENTS = 292 - SYS_RSEQ = 293 - SYS_KEXEC_FILE_LOAD = 294 - SYS_PIDFD_SEND_SIGNAL = 424 - SYS_IO_URING_SETUP = 425 - SYS_IO_URING_ENTER = 426 - SYS_IO_URING_REGISTER = 427 - SYS_OPEN_TREE = 428 - SYS_MOVE_MOUNT = 429 - SYS_FSOPEN = 430 - SYS_FSCONFIG = 431 - SYS_FSMOUNT = 432 - SYS_FSPICK = 433 - SYS_PIDFD_OPEN = 434 - SYS_CLONE3 = 435 - SYS_CLOSE_RANGE = 436 - SYS_OPENAT2 = 437 - SYS_PIDFD_GETFD = 438 - SYS_FACCESSAT2 = 439 - SYS_PROCESS_MADVISE = 440 - SYS_EPOLL_PWAIT2 = 441 - SYS_MOUNT_SETATTR = 442 - SYS_QUOTACTL_FD = 443 - SYS_LANDLOCK_CREATE_RULESET = 444 - SYS_LANDLOCK_ADD_RULE = 445 - SYS_LANDLOCK_RESTRICT_SELF = 446 - SYS_MEMFD_SECRET = 447 - SYS_PROCESS_MRELEASE = 448 - SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go deleted file mode 100644 index 7ea4652..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +++ /dev/null @@ -1,378 +0,0 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/s390x/include -fsigned-char /tmp/s390x/include/asm/unistd.h -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build s390x && linux -// +build s390x,linux - -package unix - -const ( - SYS_EXIT = 1 - SYS_FORK = 2 - SYS_READ = 3 - SYS_WRITE = 4 - SYS_OPEN = 5 - SYS_CLOSE = 6 - SYS_RESTART_SYSCALL = 7 - SYS_CREAT = 8 - SYS_LINK = 9 - SYS_UNLINK = 10 - SYS_EXECVE = 11 - SYS_CHDIR = 12 - SYS_MKNOD = 14 - SYS_CHMOD = 15 - SYS_LSEEK = 19 - SYS_GETPID = 20 - SYS_MOUNT = 21 - SYS_UMOUNT = 22 - SYS_PTRACE = 26 - SYS_ALARM = 27 - SYS_PAUSE = 29 - SYS_UTIME = 30 - SYS_ACCESS = 33 - SYS_NICE = 34 - SYS_SYNC = 36 - SYS_KILL = 37 - SYS_RENAME = 38 - SYS_MKDIR = 39 - SYS_RMDIR = 40 - SYS_DUP = 41 - SYS_PIPE = 42 - SYS_TIMES = 43 - SYS_BRK = 45 - SYS_SIGNAL = 48 - SYS_ACCT = 51 - SYS_UMOUNT2 = 52 - SYS_IOCTL = 54 - SYS_FCNTL = 55 - SYS_SETPGID = 57 - SYS_UMASK = 60 - SYS_CHROOT = 61 - SYS_USTAT = 62 - SYS_DUP2 = 63 - SYS_GETPPID = 64 - SYS_GETPGRP = 65 - SYS_SETSID = 66 - SYS_SIGACTION = 67 - SYS_SIGSUSPEND = 72 - SYS_SIGPENDING = 73 - SYS_SETHOSTNAME = 74 - SYS_SETRLIMIT = 75 - SYS_GETRUSAGE = 77 - SYS_GETTIMEOFDAY = 78 - SYS_SETTIMEOFDAY = 79 - SYS_SYMLINK = 83 - SYS_READLINK = 85 - SYS_USELIB = 86 - SYS_SWAPON = 87 - SYS_REBOOT = 88 - SYS_READDIR = 89 - SYS_MMAP = 90 - SYS_MUNMAP = 91 - SYS_TRUNCATE = 92 - SYS_FTRUNCATE = 93 - SYS_FCHMOD = 94 - SYS_GETPRIORITY = 96 - SYS_SETPRIORITY = 97 - SYS_STATFS = 99 - SYS_FSTATFS = 100 - SYS_SOCKETCALL = 102 - SYS_SYSLOG = 103 - SYS_SETITIMER = 104 - SYS_GETITIMER = 105 - SYS_STAT = 106 - SYS_LSTAT = 107 - SYS_FSTAT = 108 - SYS_LOOKUP_DCOOKIE = 110 - SYS_VHANGUP = 111 - SYS_IDLE = 112 - SYS_WAIT4 = 114 - SYS_SWAPOFF = 115 - SYS_SYSINFO = 116 - SYS_IPC = 117 - SYS_FSYNC = 118 - SYS_SIGRETURN = 119 - SYS_CLONE = 120 - SYS_SETDOMAINNAME = 121 - SYS_UNAME = 122 - SYS_ADJTIMEX = 124 - SYS_MPROTECT = 125 - SYS_SIGPROCMASK = 126 - SYS_CREATE_MODULE = 127 - SYS_INIT_MODULE = 128 - SYS_DELETE_MODULE = 129 - SYS_GET_KERNEL_SYMS = 130 - SYS_QUOTACTL = 131 - SYS_GETPGID = 132 - SYS_FCHDIR = 133 - SYS_BDFLUSH = 134 - SYS_SYSFS = 135 - SYS_PERSONALITY = 136 - SYS_AFS_SYSCALL = 137 - SYS_GETDENTS = 141 - SYS_SELECT = 142 - SYS_FLOCK = 143 - SYS_MSYNC = 144 - SYS_READV = 145 - SYS_WRITEV = 146 - SYS_GETSID = 147 - SYS_FDATASYNC = 148 - SYS__SYSCTL = 149 - SYS_MLOCK = 150 - SYS_MUNLOCK = 151 - SYS_MLOCKALL = 152 - SYS_MUNLOCKALL = 153 - SYS_SCHED_SETPARAM = 154 - SYS_SCHED_GETPARAM = 155 - SYS_SCHED_SETSCHEDULER = 156 - SYS_SCHED_GETSCHEDULER = 157 - SYS_SCHED_YIELD = 158 - SYS_SCHED_GET_PRIORITY_MAX = 159 - SYS_SCHED_GET_PRIORITY_MIN = 160 - SYS_SCHED_RR_GET_INTERVAL = 161 - SYS_NANOSLEEP = 162 - SYS_MREMAP = 163 - SYS_QUERY_MODULE = 167 - SYS_POLL = 168 - SYS_NFSSERVCTL = 169 - SYS_PRCTL = 172 - SYS_RT_SIGRETURN = 173 - SYS_RT_SIGACTION = 174 - SYS_RT_SIGPROCMASK = 175 - SYS_RT_SIGPENDING = 176 - SYS_RT_SIGTIMEDWAIT = 177 - SYS_RT_SIGQUEUEINFO = 178 - SYS_RT_SIGSUSPEND = 179 - SYS_PREAD64 = 180 - SYS_PWRITE64 = 181 - SYS_GETCWD = 183 - SYS_CAPGET = 184 - SYS_CAPSET = 185 - SYS_SIGALTSTACK = 186 - SYS_SENDFILE = 187 - SYS_GETPMSG = 188 - SYS_PUTPMSG = 189 - SYS_VFORK = 190 - SYS_GETRLIMIT = 191 - SYS_LCHOWN = 198 - SYS_GETUID = 199 - SYS_GETGID = 200 - SYS_GETEUID = 201 - SYS_GETEGID = 202 - SYS_SETREUID = 203 - SYS_SETREGID = 204 - SYS_GETGROUPS = 205 - SYS_SETGROUPS = 206 - SYS_FCHOWN = 207 - SYS_SETRESUID = 208 - SYS_GETRESUID = 209 - SYS_SETRESGID = 210 - SYS_GETRESGID = 211 - SYS_CHOWN = 212 - SYS_SETUID = 213 - SYS_SETGID = 214 - SYS_SETFSUID = 215 - SYS_SETFSGID = 216 - SYS_PIVOT_ROOT = 217 - SYS_MINCORE = 218 - SYS_MADVISE = 219 - SYS_GETDENTS64 = 220 - SYS_READAHEAD = 222 - SYS_SETXATTR = 224 - SYS_LSETXATTR = 225 - SYS_FSETXATTR = 226 - SYS_GETXATTR = 227 - SYS_LGETXATTR = 228 - SYS_FGETXATTR = 229 - SYS_LISTXATTR = 230 - SYS_LLISTXATTR = 231 - SYS_FLISTXATTR = 232 - SYS_REMOVEXATTR = 233 - SYS_LREMOVEXATTR = 234 - SYS_FREMOVEXATTR = 235 - SYS_GETTID = 236 - SYS_TKILL = 237 - SYS_FUTEX = 238 - SYS_SCHED_SETAFFINITY = 239 - SYS_SCHED_GETAFFINITY = 240 - SYS_TGKILL = 241 - SYS_IO_SETUP = 243 - SYS_IO_DESTROY = 244 - SYS_IO_GETEVENTS = 245 - SYS_IO_SUBMIT = 246 - SYS_IO_CANCEL = 247 - SYS_EXIT_GROUP = 248 - SYS_EPOLL_CREATE = 249 - SYS_EPOLL_CTL = 250 - SYS_EPOLL_WAIT = 251 - SYS_SET_TID_ADDRESS = 252 - SYS_FADVISE64 = 253 - SYS_TIMER_CREATE = 254 - SYS_TIMER_SETTIME = 255 - SYS_TIMER_GETTIME = 256 - SYS_TIMER_GETOVERRUN = 257 - SYS_TIMER_DELETE = 258 - SYS_CLOCK_SETTIME = 259 - SYS_CLOCK_GETTIME = 260 - SYS_CLOCK_GETRES = 261 - SYS_CLOCK_NANOSLEEP = 262 - SYS_STATFS64 = 265 - SYS_FSTATFS64 = 266 - SYS_REMAP_FILE_PAGES = 267 - SYS_MBIND = 268 - SYS_GET_MEMPOLICY = 269 - SYS_SET_MEMPOLICY = 270 - SYS_MQ_OPEN = 271 - SYS_MQ_UNLINK = 272 - SYS_MQ_TIMEDSEND = 273 - SYS_MQ_TIMEDRECEIVE = 274 - SYS_MQ_NOTIFY = 275 - SYS_MQ_GETSETATTR = 276 - SYS_KEXEC_LOAD = 277 - SYS_ADD_KEY = 278 - SYS_REQUEST_KEY = 279 - SYS_KEYCTL = 280 - SYS_WAITID = 281 - SYS_IOPRIO_SET = 282 - SYS_IOPRIO_GET = 283 - SYS_INOTIFY_INIT = 284 - SYS_INOTIFY_ADD_WATCH = 285 - SYS_INOTIFY_RM_WATCH = 286 - SYS_MIGRATE_PAGES = 287 - SYS_OPENAT = 288 - SYS_MKDIRAT = 289 - SYS_MKNODAT = 290 - SYS_FCHOWNAT = 291 - SYS_FUTIMESAT = 292 - SYS_NEWFSTATAT = 293 - SYS_UNLINKAT = 294 - SYS_RENAMEAT = 295 - SYS_LINKAT = 296 - SYS_SYMLINKAT = 297 - SYS_READLINKAT = 298 - SYS_FCHMODAT = 299 - SYS_FACCESSAT = 300 - SYS_PSELECT6 = 301 - SYS_PPOLL = 302 - SYS_UNSHARE = 303 - SYS_SET_ROBUST_LIST = 304 - SYS_GET_ROBUST_LIST = 305 - SYS_SPLICE = 306 - SYS_SYNC_FILE_RANGE = 307 - SYS_TEE = 308 - SYS_VMSPLICE = 309 - SYS_MOVE_PAGES = 310 - SYS_GETCPU = 311 - SYS_EPOLL_PWAIT = 312 - SYS_UTIMES = 313 - SYS_FALLOCATE = 314 - SYS_UTIMENSAT = 315 - SYS_SIGNALFD = 316 - SYS_TIMERFD = 317 - SYS_EVENTFD = 318 - SYS_TIMERFD_CREATE = 319 - SYS_TIMERFD_SETTIME = 320 - SYS_TIMERFD_GETTIME = 321 - SYS_SIGNALFD4 = 322 - SYS_EVENTFD2 = 323 - SYS_INOTIFY_INIT1 = 324 - SYS_PIPE2 = 325 - SYS_DUP3 = 326 - SYS_EPOLL_CREATE1 = 327 - SYS_PREADV = 328 - SYS_PWRITEV = 329 - SYS_RT_TGSIGQUEUEINFO = 330 - SYS_PERF_EVENT_OPEN = 331 - SYS_FANOTIFY_INIT = 332 - SYS_FANOTIFY_MARK = 333 - SYS_PRLIMIT64 = 334 - SYS_NAME_TO_HANDLE_AT = 335 - SYS_OPEN_BY_HANDLE_AT = 336 - SYS_CLOCK_ADJTIME = 337 - SYS_SYNCFS = 338 - SYS_SETNS = 339 - SYS_PROCESS_VM_READV = 340 - SYS_PROCESS_VM_WRITEV = 341 - SYS_S390_RUNTIME_INSTR = 342 - SYS_KCMP = 343 - SYS_FINIT_MODULE = 344 - SYS_SCHED_SETATTR = 345 - SYS_SCHED_GETATTR = 346 - SYS_RENAMEAT2 = 347 - SYS_SECCOMP = 348 - SYS_GETRANDOM = 349 - SYS_MEMFD_CREATE = 350 - SYS_BPF = 351 - SYS_S390_PCI_MMIO_WRITE = 352 - SYS_S390_PCI_MMIO_READ = 353 - SYS_EXECVEAT = 354 - SYS_USERFAULTFD = 355 - SYS_MEMBARRIER = 356 - SYS_RECVMMSG = 357 - SYS_SENDMMSG = 358 - SYS_SOCKET = 359 - SYS_SOCKETPAIR = 360 - SYS_BIND = 361 - SYS_CONNECT = 362 - SYS_LISTEN = 363 - SYS_ACCEPT4 = 364 - SYS_GETSOCKOPT = 365 - SYS_SETSOCKOPT = 366 - SYS_GETSOCKNAME = 367 - SYS_GETPEERNAME = 368 - SYS_SENDTO = 369 - SYS_SENDMSG = 370 - SYS_RECVFROM = 371 - SYS_RECVMSG = 372 - SYS_SHUTDOWN = 373 - SYS_MLOCK2 = 374 - SYS_COPY_FILE_RANGE = 375 - SYS_PREADV2 = 376 - SYS_PWRITEV2 = 377 - SYS_S390_GUARDED_STORAGE = 378 - SYS_STATX = 379 - SYS_S390_STHYI = 380 - SYS_KEXEC_FILE_LOAD = 381 - SYS_IO_PGETEVENTS = 382 - SYS_RSEQ = 383 - SYS_PKEY_MPROTECT = 384 - SYS_PKEY_ALLOC = 385 - SYS_PKEY_FREE = 386 - SYS_SEMTIMEDOP = 392 - SYS_SEMGET = 393 - SYS_SEMCTL = 394 - SYS_SHMGET = 395 - SYS_SHMCTL = 396 - SYS_SHMAT = 397 - SYS_SHMDT = 398 - SYS_MSGGET = 399 - SYS_MSGSND = 400 - SYS_MSGRCV = 401 - SYS_MSGCTL = 402 - SYS_PIDFD_SEND_SIGNAL = 424 - SYS_IO_URING_SETUP = 425 - SYS_IO_URING_ENTER = 426 - SYS_IO_URING_REGISTER = 427 - SYS_OPEN_TREE = 428 - SYS_MOVE_MOUNT = 429 - SYS_FSOPEN = 430 - SYS_FSCONFIG = 431 - SYS_FSMOUNT = 432 - SYS_FSPICK = 433 - SYS_PIDFD_OPEN = 434 - SYS_CLONE3 = 435 - SYS_CLOSE_RANGE = 436 - SYS_OPENAT2 = 437 - SYS_PIDFD_GETFD = 438 - SYS_FACCESSAT2 = 439 - SYS_PROCESS_MADVISE = 440 - SYS_EPOLL_PWAIT2 = 441 - SYS_MOUNT_SETATTR = 442 - SYS_QUOTACTL_FD = 443 - SYS_LANDLOCK_CREATE_RULESET = 444 - SYS_LANDLOCK_ADD_RULE = 445 - SYS_LANDLOCK_RESTRICT_SELF = 446 - SYS_PROCESS_MRELEASE = 448 - SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go deleted file mode 100644 index 92f628e..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +++ /dev/null @@ -1,392 +0,0 @@ -// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/sparc64/include /tmp/sparc64/include/asm/unistd.h -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build sparc64 && linux -// +build sparc64,linux - -package unix - -const ( - SYS_RESTART_SYSCALL = 0 - SYS_EXIT = 1 - SYS_FORK = 2 - SYS_READ = 3 - SYS_WRITE = 4 - SYS_OPEN = 5 - SYS_CLOSE = 6 - SYS_WAIT4 = 7 - SYS_CREAT = 8 - SYS_LINK = 9 - SYS_UNLINK = 10 - SYS_EXECV = 11 - SYS_CHDIR = 12 - SYS_CHOWN = 13 - SYS_MKNOD = 14 - SYS_CHMOD = 15 - SYS_LCHOWN = 16 - SYS_BRK = 17 - SYS_PERFCTR = 18 - SYS_LSEEK = 19 - SYS_GETPID = 20 - SYS_CAPGET = 21 - SYS_CAPSET = 22 - SYS_SETUID = 23 - SYS_GETUID = 24 - SYS_VMSPLICE = 25 - SYS_PTRACE = 26 - SYS_ALARM = 27 - SYS_SIGALTSTACK = 28 - SYS_PAUSE = 29 - SYS_UTIME = 30 - SYS_ACCESS = 33 - SYS_NICE = 34 - SYS_SYNC = 36 - SYS_KILL = 37 - SYS_STAT = 38 - SYS_SENDFILE = 39 - SYS_LSTAT = 40 - SYS_DUP = 41 - SYS_PIPE = 42 - SYS_TIMES = 43 - SYS_UMOUNT2 = 45 - SYS_SETGID = 46 - SYS_GETGID = 47 - SYS_SIGNAL = 48 - SYS_GETEUID = 49 - SYS_GETEGID = 50 - SYS_ACCT = 51 - SYS_MEMORY_ORDERING = 52 - SYS_IOCTL = 54 - SYS_REBOOT = 55 - SYS_SYMLINK = 57 - SYS_READLINK = 58 - SYS_EXECVE = 59 - SYS_UMASK = 60 - SYS_CHROOT = 61 - SYS_FSTAT = 62 - SYS_FSTAT64 = 63 - SYS_GETPAGESIZE = 64 - SYS_MSYNC = 65 - SYS_VFORK = 66 - SYS_PREAD64 = 67 - SYS_PWRITE64 = 68 - SYS_MMAP = 71 - SYS_MUNMAP = 73 - SYS_MPROTECT = 74 - SYS_MADVISE = 75 - SYS_VHANGUP = 76 - SYS_MINCORE = 78 - SYS_GETGROUPS = 79 - SYS_SETGROUPS = 80 - SYS_GETPGRP = 81 - SYS_SETITIMER = 83 - SYS_SWAPON = 85 - SYS_GETITIMER = 86 - SYS_SETHOSTNAME = 88 - SYS_DUP2 = 90 - SYS_FCNTL = 92 - SYS_SELECT = 93 - SYS_FSYNC = 95 - SYS_SETPRIORITY = 96 - SYS_SOCKET = 97 - SYS_CONNECT = 98 - SYS_ACCEPT = 99 - SYS_GETPRIORITY = 100 - SYS_RT_SIGRETURN = 101 - SYS_RT_SIGACTION = 102 - SYS_RT_SIGPROCMASK = 103 - SYS_RT_SIGPENDING = 104 - SYS_RT_SIGTIMEDWAIT = 105 - SYS_RT_SIGQUEUEINFO = 106 - SYS_RT_SIGSUSPEND = 107 - SYS_SETRESUID = 108 - SYS_GETRESUID = 109 - SYS_SETRESGID = 110 - SYS_GETRESGID = 111 - SYS_RECVMSG = 113 - SYS_SENDMSG = 114 - SYS_GETTIMEOFDAY = 116 - SYS_GETRUSAGE = 117 - SYS_GETSOCKOPT = 118 - SYS_GETCWD = 119 - SYS_READV = 120 - SYS_WRITEV = 121 - SYS_SETTIMEOFDAY = 122 - SYS_FCHOWN = 123 - SYS_FCHMOD = 124 - SYS_RECVFROM = 125 - SYS_SETREUID = 126 - SYS_SETREGID = 127 - SYS_RENAME = 128 - SYS_TRUNCATE = 129 - SYS_FTRUNCATE = 130 - SYS_FLOCK = 131 - SYS_LSTAT64 = 132 - SYS_SENDTO = 133 - SYS_SHUTDOWN = 134 - SYS_SOCKETPAIR = 135 - SYS_MKDIR = 136 - SYS_RMDIR = 137 - SYS_UTIMES = 138 - SYS_STAT64 = 139 - SYS_SENDFILE64 = 140 - SYS_GETPEERNAME = 141 - SYS_FUTEX = 142 - SYS_GETTID = 143 - SYS_GETRLIMIT = 144 - SYS_SETRLIMIT = 145 - SYS_PIVOT_ROOT = 146 - SYS_PRCTL = 147 - SYS_PCICONFIG_READ = 148 - SYS_PCICONFIG_WRITE = 149 - SYS_GETSOCKNAME = 150 - SYS_INOTIFY_INIT = 151 - SYS_INOTIFY_ADD_WATCH = 152 - SYS_POLL = 153 - SYS_GETDENTS64 = 154 - SYS_INOTIFY_RM_WATCH = 156 - SYS_STATFS = 157 - SYS_FSTATFS = 158 - SYS_UMOUNT = 159 - SYS_SCHED_SET_AFFINITY = 160 - SYS_SCHED_GET_AFFINITY = 161 - SYS_GETDOMAINNAME = 162 - SYS_SETDOMAINNAME = 163 - SYS_UTRAP_INSTALL = 164 - SYS_QUOTACTL = 165 - SYS_SET_TID_ADDRESS = 166 - SYS_MOUNT = 167 - SYS_USTAT = 168 - SYS_SETXATTR = 169 - SYS_LSETXATTR = 170 - SYS_FSETXATTR = 171 - SYS_GETXATTR = 172 - SYS_LGETXATTR = 173 - SYS_GETDENTS = 174 - SYS_SETSID = 175 - SYS_FCHDIR = 176 - SYS_FGETXATTR = 177 - SYS_LISTXATTR = 178 - SYS_LLISTXATTR = 179 - SYS_FLISTXATTR = 180 - SYS_REMOVEXATTR = 181 - SYS_LREMOVEXATTR = 182 - SYS_SIGPENDING = 183 - SYS_QUERY_MODULE = 184 - SYS_SETPGID = 185 - SYS_FREMOVEXATTR = 186 - SYS_TKILL = 187 - SYS_EXIT_GROUP = 188 - SYS_UNAME = 189 - SYS_INIT_MODULE = 190 - SYS_PERSONALITY = 191 - SYS_REMAP_FILE_PAGES = 192 - SYS_EPOLL_CREATE = 193 - SYS_EPOLL_CTL = 194 - SYS_EPOLL_WAIT = 195 - SYS_IOPRIO_SET = 196 - SYS_GETPPID = 197 - SYS_SIGACTION = 198 - SYS_SGETMASK = 199 - SYS_SSETMASK = 200 - SYS_SIGSUSPEND = 201 - SYS_OLDLSTAT = 202 - SYS_USELIB = 203 - SYS_READDIR = 204 - SYS_READAHEAD = 205 - SYS_SOCKETCALL = 206 - SYS_SYSLOG = 207 - SYS_LOOKUP_DCOOKIE = 208 - SYS_FADVISE64 = 209 - SYS_FADVISE64_64 = 210 - SYS_TGKILL = 211 - SYS_WAITPID = 212 - SYS_SWAPOFF = 213 - SYS_SYSINFO = 214 - SYS_IPC = 215 - SYS_SIGRETURN = 216 - SYS_CLONE = 217 - SYS_IOPRIO_GET = 218 - SYS_ADJTIMEX = 219 - SYS_SIGPROCMASK = 220 - SYS_CREATE_MODULE = 221 - SYS_DELETE_MODULE = 222 - SYS_GET_KERNEL_SYMS = 223 - SYS_GETPGID = 224 - SYS_BDFLUSH = 225 - SYS_SYSFS = 226 - SYS_AFS_SYSCALL = 227 - SYS_SETFSUID = 228 - SYS_SETFSGID = 229 - SYS__NEWSELECT = 230 - SYS_SPLICE = 232 - SYS_STIME = 233 - SYS_STATFS64 = 234 - SYS_FSTATFS64 = 235 - SYS__LLSEEK = 236 - SYS_MLOCK = 237 - SYS_MUNLOCK = 238 - SYS_MLOCKALL = 239 - SYS_MUNLOCKALL = 240 - SYS_SCHED_SETPARAM = 241 - SYS_SCHED_GETPARAM = 242 - SYS_SCHED_SETSCHEDULER = 243 - SYS_SCHED_GETSCHEDULER = 244 - SYS_SCHED_YIELD = 245 - SYS_SCHED_GET_PRIORITY_MAX = 246 - SYS_SCHED_GET_PRIORITY_MIN = 247 - SYS_SCHED_RR_GET_INTERVAL = 248 - SYS_NANOSLEEP = 249 - SYS_MREMAP = 250 - SYS__SYSCTL = 251 - SYS_GETSID = 252 - SYS_FDATASYNC = 253 - SYS_NFSSERVCTL = 254 - SYS_SYNC_FILE_RANGE = 255 - SYS_CLOCK_SETTIME = 256 - SYS_CLOCK_GETTIME = 257 - SYS_CLOCK_GETRES = 258 - SYS_CLOCK_NANOSLEEP = 259 - SYS_SCHED_GETAFFINITY = 260 - SYS_SCHED_SETAFFINITY = 261 - SYS_TIMER_SETTIME = 262 - SYS_TIMER_GETTIME = 263 - SYS_TIMER_GETOVERRUN = 264 - SYS_TIMER_DELETE = 265 - SYS_TIMER_CREATE = 266 - SYS_VSERVER = 267 - SYS_IO_SETUP = 268 - SYS_IO_DESTROY = 269 - SYS_IO_SUBMIT = 270 - SYS_IO_CANCEL = 271 - SYS_IO_GETEVENTS = 272 - SYS_MQ_OPEN = 273 - SYS_MQ_UNLINK = 274 - SYS_MQ_TIMEDSEND = 275 - SYS_MQ_TIMEDRECEIVE = 276 - SYS_MQ_NOTIFY = 277 - SYS_MQ_GETSETATTR = 278 - SYS_WAITID = 279 - SYS_TEE = 280 - SYS_ADD_KEY = 281 - SYS_REQUEST_KEY = 282 - SYS_KEYCTL = 283 - SYS_OPENAT = 284 - SYS_MKDIRAT = 285 - SYS_MKNODAT = 286 - SYS_FCHOWNAT = 287 - SYS_FUTIMESAT = 288 - SYS_FSTATAT64 = 289 - SYS_UNLINKAT = 290 - SYS_RENAMEAT = 291 - SYS_LINKAT = 292 - SYS_SYMLINKAT = 293 - SYS_READLINKAT = 294 - SYS_FCHMODAT = 295 - SYS_FACCESSAT = 296 - SYS_PSELECT6 = 297 - SYS_PPOLL = 298 - SYS_UNSHARE = 299 - SYS_SET_ROBUST_LIST = 300 - SYS_GET_ROBUST_LIST = 301 - SYS_MIGRATE_PAGES = 302 - SYS_MBIND = 303 - SYS_GET_MEMPOLICY = 304 - SYS_SET_MEMPOLICY = 305 - SYS_KEXEC_LOAD = 306 - SYS_MOVE_PAGES = 307 - SYS_GETCPU = 308 - SYS_EPOLL_PWAIT = 309 - SYS_UTIMENSAT = 310 - SYS_SIGNALFD = 311 - SYS_TIMERFD_CREATE = 312 - SYS_EVENTFD = 313 - SYS_FALLOCATE = 314 - SYS_TIMERFD_SETTIME = 315 - SYS_TIMERFD_GETTIME = 316 - SYS_SIGNALFD4 = 317 - SYS_EVENTFD2 = 318 - SYS_EPOLL_CREATE1 = 319 - SYS_DUP3 = 320 - SYS_PIPE2 = 321 - SYS_INOTIFY_INIT1 = 322 - SYS_ACCEPT4 = 323 - SYS_PREADV = 324 - SYS_PWRITEV = 325 - SYS_RT_TGSIGQUEUEINFO = 326 - SYS_PERF_EVENT_OPEN = 327 - SYS_RECVMMSG = 328 - SYS_FANOTIFY_INIT = 329 - SYS_FANOTIFY_MARK = 330 - SYS_PRLIMIT64 = 331 - SYS_NAME_TO_HANDLE_AT = 332 - SYS_OPEN_BY_HANDLE_AT = 333 - SYS_CLOCK_ADJTIME = 334 - SYS_SYNCFS = 335 - SYS_SENDMMSG = 336 - SYS_SETNS = 337 - SYS_PROCESS_VM_READV = 338 - SYS_PROCESS_VM_WRITEV = 339 - SYS_KERN_FEATURES = 340 - SYS_KCMP = 341 - SYS_FINIT_MODULE = 342 - SYS_SCHED_SETATTR = 343 - SYS_SCHED_GETATTR = 344 - SYS_RENAMEAT2 = 345 - SYS_SECCOMP = 346 - SYS_GETRANDOM = 347 - SYS_MEMFD_CREATE = 348 - SYS_BPF = 349 - SYS_EXECVEAT = 350 - SYS_MEMBARRIER = 351 - SYS_USERFAULTFD = 352 - SYS_BIND = 353 - SYS_LISTEN = 354 - SYS_SETSOCKOPT = 355 - SYS_MLOCK2 = 356 - SYS_COPY_FILE_RANGE = 357 - SYS_PREADV2 = 358 - SYS_PWRITEV2 = 359 - SYS_STATX = 360 - SYS_IO_PGETEVENTS = 361 - SYS_PKEY_MPROTECT = 362 - SYS_PKEY_ALLOC = 363 - SYS_PKEY_FREE = 364 - SYS_RSEQ = 365 - SYS_SEMTIMEDOP = 392 - SYS_SEMGET = 393 - SYS_SEMCTL = 394 - SYS_SHMGET = 395 - SYS_SHMCTL = 396 - SYS_SHMAT = 397 - SYS_SHMDT = 398 - SYS_MSGGET = 399 - SYS_MSGSND = 400 - SYS_MSGRCV = 401 - SYS_MSGCTL = 402 - SYS_PIDFD_SEND_SIGNAL = 424 - SYS_IO_URING_SETUP = 425 - SYS_IO_URING_ENTER = 426 - SYS_IO_URING_REGISTER = 427 - SYS_OPEN_TREE = 428 - SYS_MOVE_MOUNT = 429 - SYS_FSOPEN = 430 - SYS_FSCONFIG = 431 - SYS_FSMOUNT = 432 - SYS_FSPICK = 433 - SYS_PIDFD_OPEN = 434 - SYS_CLOSE_RANGE = 436 - SYS_OPENAT2 = 437 - SYS_PIDFD_GETFD = 438 - SYS_FACCESSAT2 = 439 - SYS_PROCESS_MADVISE = 440 - SYS_EPOLL_PWAIT2 = 441 - SYS_MOUNT_SETATTR = 442 - SYS_QUOTACTL_FD = 443 - SYS_LANDLOCK_CREATE_RULESET = 444 - SYS_LANDLOCK_ADD_RULE = 445 - SYS_LANDLOCK_RESTRICT_SELF = 446 - SYS_PROCESS_MRELEASE = 448 - SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go deleted file mode 100644 index 3a6699e..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go +++ /dev/null @@ -1,275 +0,0 @@ -// go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build 386 && netbsd -// +build 386,netbsd - -package unix - -const ( - SYS_EXIT = 1 // { void|sys||exit(int rval); } - SYS_FORK = 2 // { int|sys||fork(void); } - SYS_READ = 3 // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); } - SYS_WRITE = 4 // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); } - SYS_OPEN = 5 // { int|sys||open(const char *path, int flags, ... mode_t mode); } - SYS_CLOSE = 6 // { int|sys||close(int fd); } - SYS_LINK = 9 // { int|sys||link(const char *path, const char *link); } - SYS_UNLINK = 10 // { int|sys||unlink(const char *path); } - SYS_CHDIR = 12 // { int|sys||chdir(const char *path); } - SYS_FCHDIR = 13 // { int|sys||fchdir(int fd); } - SYS_CHMOD = 15 // { int|sys||chmod(const char *path, mode_t mode); } - SYS_CHOWN = 16 // { int|sys||chown(const char *path, uid_t uid, gid_t gid); } - SYS_BREAK = 17 // { int|sys||obreak(char *nsize); } - SYS_GETPID = 20 // { pid_t|sys||getpid_with_ppid(void); } - SYS_UNMOUNT = 22 // { int|sys||unmount(const char *path, int flags); } - SYS_SETUID = 23 // { int|sys||setuid(uid_t uid); } - SYS_GETUID = 24 // { uid_t|sys||getuid_with_euid(void); } - SYS_GETEUID = 25 // { uid_t|sys||geteuid(void); } - SYS_PTRACE = 26 // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); } - SYS_RECVMSG = 27 // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); } - SYS_SENDMSG = 28 // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); } - SYS_RECVFROM = 29 // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } - SYS_ACCEPT = 30 // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); } - SYS_GETPEERNAME = 31 // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } - SYS_GETSOCKNAME = 32 // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } - SYS_ACCESS = 33 // { int|sys||access(const char *path, int flags); } - SYS_CHFLAGS = 34 // { int|sys||chflags(const char *path, u_long flags); } - SYS_FCHFLAGS = 35 // { int|sys||fchflags(int fd, u_long flags); } - SYS_SYNC = 36 // { void|sys||sync(void); } - SYS_KILL = 37 // { int|sys||kill(pid_t pid, int signum); } - SYS_GETPPID = 39 // { pid_t|sys||getppid(void); } - SYS_DUP = 41 // { int|sys||dup(int fd); } - SYS_PIPE = 42 // { int|sys||pipe(void); } - SYS_GETEGID = 43 // { gid_t|sys||getegid(void); } - SYS_PROFIL = 44 // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); } - SYS_KTRACE = 45 // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); } - SYS_GETGID = 47 // { gid_t|sys||getgid_with_egid(void); } - SYS___GETLOGIN = 49 // { int|sys||__getlogin(char *namebuf, size_t namelen); } - SYS___SETLOGIN = 50 // { int|sys||__setlogin(const char *namebuf); } - SYS_ACCT = 51 // { int|sys||acct(const char *path); } - SYS_IOCTL = 54 // { int|sys||ioctl(int fd, u_long com, ... void *data); } - SYS_REVOKE = 56 // { int|sys||revoke(const char *path); } - SYS_SYMLINK = 57 // { int|sys||symlink(const char *path, const char *link); } - SYS_READLINK = 58 // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); } - SYS_EXECVE = 59 // { int|sys||execve(const char *path, char * const *argp, char * const *envp); } - SYS_UMASK = 60 // { mode_t|sys||umask(mode_t newmask); } - SYS_CHROOT = 61 // { int|sys||chroot(const char *path); } - SYS_VFORK = 66 // { int|sys||vfork(void); } - SYS_SBRK = 69 // { int|sys||sbrk(intptr_t incr); } - SYS_SSTK = 70 // { int|sys||sstk(int incr); } - SYS_VADVISE = 72 // { int|sys||ovadvise(int anom); } - SYS_MUNMAP = 73 // { int|sys||munmap(void *addr, size_t len); } - SYS_MPROTECT = 74 // { int|sys||mprotect(void *addr, size_t len, int prot); } - SYS_MADVISE = 75 // { int|sys||madvise(void *addr, size_t len, int behav); } - SYS_MINCORE = 78 // { int|sys||mincore(void *addr, size_t len, char *vec); } - SYS_GETGROUPS = 79 // { int|sys||getgroups(int gidsetsize, gid_t *gidset); } - SYS_SETGROUPS = 80 // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); } - SYS_GETPGRP = 81 // { int|sys||getpgrp(void); } - SYS_SETPGID = 82 // { int|sys||setpgid(pid_t pid, pid_t pgid); } - SYS_DUP2 = 90 // { int|sys||dup2(int from, int to); } - SYS_FCNTL = 92 // { int|sys||fcntl(int fd, int cmd, ... void *arg); } - SYS_FSYNC = 95 // { int|sys||fsync(int fd); } - SYS_SETPRIORITY = 96 // { int|sys||setpriority(int which, id_t who, int prio); } - SYS_CONNECT = 98 // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); } - SYS_GETPRIORITY = 100 // { int|sys||getpriority(int which, id_t who); } - SYS_BIND = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); } - SYS_SETSOCKOPT = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } - SYS_LISTEN = 106 // { int|sys||listen(int s, int backlog); } - SYS_GETSOCKOPT = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } - SYS_READV = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); } - SYS_WRITEV = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); } - SYS_FCHOWN = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); } - SYS_FCHMOD = 124 // { int|sys||fchmod(int fd, mode_t mode); } - SYS_SETREUID = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); } - SYS_SETREGID = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); } - SYS_RENAME = 128 // { int|sys||rename(const char *from, const char *to); } - SYS_FLOCK = 131 // { int|sys||flock(int fd, int how); } - SYS_MKFIFO = 132 // { int|sys||mkfifo(const char *path, mode_t mode); } - SYS_SENDTO = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } - SYS_SHUTDOWN = 134 // { int|sys||shutdown(int s, int how); } - SYS_SOCKETPAIR = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); } - SYS_MKDIR = 136 // { int|sys||mkdir(const char *path, mode_t mode); } - SYS_RMDIR = 137 // { int|sys||rmdir(const char *path); } - SYS_SETSID = 147 // { int|sys||setsid(void); } - SYS_SYSARCH = 165 // { int|sys||sysarch(int op, void *parms); } - SYS_PREAD = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); } - SYS_PWRITE = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); } - SYS_NTP_ADJTIME = 176 // { int|sys||ntp_adjtime(struct timex *tp); } - SYS_SETGID = 181 // { int|sys||setgid(gid_t gid); } - SYS_SETEGID = 182 // { int|sys||setegid(gid_t egid); } - SYS_SETEUID = 183 // { int|sys||seteuid(uid_t euid); } - SYS_PATHCONF = 191 // { long|sys||pathconf(const char *path, int name); } - SYS_FPATHCONF = 192 // { long|sys||fpathconf(int fd, int name); } - SYS_GETRLIMIT = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); } - SYS_SETRLIMIT = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); } - SYS_MMAP = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); } - SYS_LSEEK = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); } - SYS_TRUNCATE = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); } - SYS_FTRUNCATE = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); } - SYS___SYSCTL = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); } - SYS_MLOCK = 203 // { int|sys||mlock(const void *addr, size_t len); } - SYS_MUNLOCK = 204 // { int|sys||munlock(const void *addr, size_t len); } - SYS_UNDELETE = 205 // { int|sys||undelete(const char *path); } - SYS_GETPGID = 207 // { pid_t|sys||getpgid(pid_t pid); } - SYS_REBOOT = 208 // { int|sys||reboot(int opt, char *bootstr); } - SYS_POLL = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); } - SYS_SEMGET = 221 // { int|sys||semget(key_t key, int nsems, int semflg); } - SYS_SEMOP = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); } - SYS_SEMCONFIG = 223 // { int|sys||semconfig(int flag); } - SYS_MSGGET = 225 // { int|sys||msgget(key_t key, int msgflg); } - SYS_MSGSND = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } - SYS_MSGRCV = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } - SYS_SHMAT = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); } - SYS_SHMDT = 230 // { int|sys||shmdt(const void *shmaddr); } - SYS_SHMGET = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); } - SYS_TIMER_CREATE = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); } - SYS_TIMER_DELETE = 236 // { int|sys||timer_delete(timer_t timerid); } - SYS_TIMER_GETOVERRUN = 239 // { int|sys||timer_getoverrun(timer_t timerid); } - SYS_FDATASYNC = 241 // { int|sys||fdatasync(int fd); } - SYS_MLOCKALL = 242 // { int|sys||mlockall(int flags); } - SYS_MUNLOCKALL = 243 // { int|sys||munlockall(void); } - SYS_SIGQUEUEINFO = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); } - SYS_MODCTL = 246 // { int|sys||modctl(int cmd, void *arg); } - SYS___POSIX_RENAME = 270 // { int|sys||__posix_rename(const char *from, const char *to); } - SYS_SWAPCTL = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); } - SYS_MINHERIT = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); } - SYS_LCHMOD = 274 // { int|sys||lchmod(const char *path, mode_t mode); } - SYS_LCHOWN = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); } - SYS_MSYNC = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); } - SYS___POSIX_CHOWN = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); } - SYS___POSIX_FCHOWN = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); } - SYS___POSIX_LCHOWN = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); } - SYS_GETSID = 286 // { pid_t|sys||getsid(pid_t pid); } - SYS___CLONE = 287 // { pid_t|sys||__clone(int flags, void *stack); } - SYS_FKTRACE = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); } - SYS_PREADV = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } - SYS_PWRITEV = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } - SYS___GETCWD = 296 // { int|sys||__getcwd(char *bufp, size_t length); } - SYS_FCHROOT = 297 // { int|sys||fchroot(int fd); } - SYS_LCHFLAGS = 304 // { int|sys||lchflags(const char *path, u_long flags); } - SYS_ISSETUGID = 305 // { int|sys||issetugid(void); } - SYS_UTRACE = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); } - SYS_GETCONTEXT = 307 // { int|sys||getcontext(struct __ucontext *ucp); } - SYS_SETCONTEXT = 308 // { int|sys||setcontext(const struct __ucontext *ucp); } - SYS__LWP_CREATE = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); } - SYS__LWP_EXIT = 310 // { int|sys||_lwp_exit(void); } - SYS__LWP_SELF = 311 // { lwpid_t|sys||_lwp_self(void); } - SYS__LWP_WAIT = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); } - SYS__LWP_SUSPEND = 313 // { int|sys||_lwp_suspend(lwpid_t target); } - SYS__LWP_CONTINUE = 314 // { int|sys||_lwp_continue(lwpid_t target); } - SYS__LWP_WAKEUP = 315 // { int|sys||_lwp_wakeup(lwpid_t target); } - SYS__LWP_GETPRIVATE = 316 // { void *|sys||_lwp_getprivate(void); } - SYS__LWP_SETPRIVATE = 317 // { void|sys||_lwp_setprivate(void *ptr); } - SYS__LWP_KILL = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); } - SYS__LWP_DETACH = 319 // { int|sys||_lwp_detach(lwpid_t target); } - SYS__LWP_UNPARK = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); } - SYS__LWP_UNPARK_ALL = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); } - SYS__LWP_SETNAME = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); } - SYS__LWP_GETNAME = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); } - SYS__LWP_CTL = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); } - SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); } - SYS_PMC_GET_INFO = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); } - SYS_PMC_CONTROL = 342 // { int|sys||pmc_control(int ctr, int op, void *args); } - SYS_RASCTL = 343 // { int|sys||rasctl(void *addr, size_t len, int op); } - SYS_KQUEUE = 344 // { int|sys||kqueue(void); } - SYS__SCHED_SETPARAM = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); } - SYS__SCHED_GETPARAM = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); } - SYS__SCHED_SETAFFINITY = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); } - SYS__SCHED_GETAFFINITY = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); } - SYS_SCHED_YIELD = 350 // { int|sys||sched_yield(void); } - SYS_FSYNC_RANGE = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); } - SYS_UUIDGEN = 355 // { int|sys||uuidgen(struct uuid *store, int count); } - SYS_GETVFSSTAT = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); } - SYS_STATVFS1 = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); } - SYS_FSTATVFS1 = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); } - SYS_EXTATTRCTL = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } - SYS_EXTATTR_SET_FILE = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } - SYS_EXTATTR_GET_FILE = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_FILE = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } - SYS_EXTATTR_SET_FD = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } - SYS_EXTATTR_GET_FD = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_FD = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } - SYS_EXTATTR_SET_LINK = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } - SYS_EXTATTR_GET_LINK = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_LINK = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } - SYS_EXTATTR_LIST_FD = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_FILE = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_LINK = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } - SYS_SETXATTR = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); } - SYS_LSETXATTR = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); } - SYS_FSETXATTR = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); } - SYS_GETXATTR = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); } - SYS_LGETXATTR = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); } - SYS_FGETXATTR = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); } - SYS_LISTXATTR = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); } - SYS_LLISTXATTR = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); } - SYS_FLISTXATTR = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); } - SYS_REMOVEXATTR = 384 // { int|sys||removexattr(const char *path, const char *name); } - SYS_LREMOVEXATTR = 385 // { int|sys||lremovexattr(const char *path, const char *name); } - SYS_FREMOVEXATTR = 386 // { int|sys||fremovexattr(int fd, const char *name); } - SYS_GETDENTS = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); } - SYS_SOCKET = 394 // { int|sys|30|socket(int domain, int type, int protocol); } - SYS_GETFH = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); } - SYS_MOUNT = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); } - SYS_MREMAP = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); } - SYS_PSET_CREATE = 412 // { int|sys||pset_create(psetid_t *psid); } - SYS_PSET_DESTROY = 413 // { int|sys||pset_destroy(psetid_t psid); } - SYS_PSET_ASSIGN = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); } - SYS__PSET_BIND = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); } - SYS_POSIX_FADVISE = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); } - SYS_SELECT = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } - SYS_GETTIMEOFDAY = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); } - SYS_SETTIMEOFDAY = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); } - SYS_UTIMES = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); } - SYS_ADJTIME = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); } - SYS_FUTIMES = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); } - SYS_LUTIMES = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); } - SYS_SETITIMER = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } - SYS_GETITIMER = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); } - SYS_CLOCK_GETTIME = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); } - SYS_CLOCK_SETTIME = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); } - SYS_CLOCK_GETRES = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); } - SYS_NANOSLEEP = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } - SYS___SIGTIMEDWAIT = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); } - SYS__LWP_PARK = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); } - SYS_KEVENT = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); } - SYS_PSELECT = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } - SYS_POLLTS = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } - SYS_STAT = 439 // { int|sys|50|stat(const char *path, struct stat *ub); } - SYS_FSTAT = 440 // { int|sys|50|fstat(int fd, struct stat *sb); } - SYS_LSTAT = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); } - SYS___SEMCTL = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); } - SYS_SHMCTL = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); } - SYS_MSGCTL = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); } - SYS_GETRUSAGE = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); } - SYS_TIMER_SETTIME = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } - SYS_TIMER_GETTIME = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); } - SYS_NTP_GETTIME = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); } - SYS_WAIT4 = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); } - SYS_MKNOD = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); } - SYS_FHSTAT = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); } - SYS_PIPE2 = 453 // { int|sys||pipe2(int *fildes, int flags); } - SYS_DUP3 = 454 // { int|sys||dup3(int from, int to, int flags); } - SYS_KQUEUE1 = 455 // { int|sys||kqueue1(int flags); } - SYS_PACCEPT = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); } - SYS_LINKAT = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); } - SYS_RENAMEAT = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); } - SYS_MKFIFOAT = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); } - SYS_MKNODAT = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); } - SYS_MKDIRAT = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); } - SYS_FACCESSAT = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); } - SYS_FCHMODAT = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); } - SYS_FCHOWNAT = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); } - SYS_FEXECVE = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); } - SYS_FSTATAT = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); } - SYS_UTIMENSAT = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); } - SYS_OPENAT = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); } - SYS_READLINKAT = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); } - SYS_SYMLINKAT = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); } - SYS_UNLINKAT = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); } - SYS_FUTIMENS = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); } - SYS___QUOTACTL = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); } - SYS_POSIX_SPAWN = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); } - SYS_RECVMMSG = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); } - SYS_SENDMMSG = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); } -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go deleted file mode 100644 index 5677cd4..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go +++ /dev/null @@ -1,275 +0,0 @@ -// go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build amd64 && netbsd -// +build amd64,netbsd - -package unix - -const ( - SYS_EXIT = 1 // { void|sys||exit(int rval); } - SYS_FORK = 2 // { int|sys||fork(void); } - SYS_READ = 3 // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); } - SYS_WRITE = 4 // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); } - SYS_OPEN = 5 // { int|sys||open(const char *path, int flags, ... mode_t mode); } - SYS_CLOSE = 6 // { int|sys||close(int fd); } - SYS_LINK = 9 // { int|sys||link(const char *path, const char *link); } - SYS_UNLINK = 10 // { int|sys||unlink(const char *path); } - SYS_CHDIR = 12 // { int|sys||chdir(const char *path); } - SYS_FCHDIR = 13 // { int|sys||fchdir(int fd); } - SYS_CHMOD = 15 // { int|sys||chmod(const char *path, mode_t mode); } - SYS_CHOWN = 16 // { int|sys||chown(const char *path, uid_t uid, gid_t gid); } - SYS_BREAK = 17 // { int|sys||obreak(char *nsize); } - SYS_GETPID = 20 // { pid_t|sys||getpid_with_ppid(void); } - SYS_UNMOUNT = 22 // { int|sys||unmount(const char *path, int flags); } - SYS_SETUID = 23 // { int|sys||setuid(uid_t uid); } - SYS_GETUID = 24 // { uid_t|sys||getuid_with_euid(void); } - SYS_GETEUID = 25 // { uid_t|sys||geteuid(void); } - SYS_PTRACE = 26 // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); } - SYS_RECVMSG = 27 // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); } - SYS_SENDMSG = 28 // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); } - SYS_RECVFROM = 29 // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } - SYS_ACCEPT = 30 // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); } - SYS_GETPEERNAME = 31 // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } - SYS_GETSOCKNAME = 32 // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } - SYS_ACCESS = 33 // { int|sys||access(const char *path, int flags); } - SYS_CHFLAGS = 34 // { int|sys||chflags(const char *path, u_long flags); } - SYS_FCHFLAGS = 35 // { int|sys||fchflags(int fd, u_long flags); } - SYS_SYNC = 36 // { void|sys||sync(void); } - SYS_KILL = 37 // { int|sys||kill(pid_t pid, int signum); } - SYS_GETPPID = 39 // { pid_t|sys||getppid(void); } - SYS_DUP = 41 // { int|sys||dup(int fd); } - SYS_PIPE = 42 // { int|sys||pipe(void); } - SYS_GETEGID = 43 // { gid_t|sys||getegid(void); } - SYS_PROFIL = 44 // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); } - SYS_KTRACE = 45 // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); } - SYS_GETGID = 47 // { gid_t|sys||getgid_with_egid(void); } - SYS___GETLOGIN = 49 // { int|sys||__getlogin(char *namebuf, size_t namelen); } - SYS___SETLOGIN = 50 // { int|sys||__setlogin(const char *namebuf); } - SYS_ACCT = 51 // { int|sys||acct(const char *path); } - SYS_IOCTL = 54 // { int|sys||ioctl(int fd, u_long com, ... void *data); } - SYS_REVOKE = 56 // { int|sys||revoke(const char *path); } - SYS_SYMLINK = 57 // { int|sys||symlink(const char *path, const char *link); } - SYS_READLINK = 58 // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); } - SYS_EXECVE = 59 // { int|sys||execve(const char *path, char * const *argp, char * const *envp); } - SYS_UMASK = 60 // { mode_t|sys||umask(mode_t newmask); } - SYS_CHROOT = 61 // { int|sys||chroot(const char *path); } - SYS_VFORK = 66 // { int|sys||vfork(void); } - SYS_SBRK = 69 // { int|sys||sbrk(intptr_t incr); } - SYS_SSTK = 70 // { int|sys||sstk(int incr); } - SYS_VADVISE = 72 // { int|sys||ovadvise(int anom); } - SYS_MUNMAP = 73 // { int|sys||munmap(void *addr, size_t len); } - SYS_MPROTECT = 74 // { int|sys||mprotect(void *addr, size_t len, int prot); } - SYS_MADVISE = 75 // { int|sys||madvise(void *addr, size_t len, int behav); } - SYS_MINCORE = 78 // { int|sys||mincore(void *addr, size_t len, char *vec); } - SYS_GETGROUPS = 79 // { int|sys||getgroups(int gidsetsize, gid_t *gidset); } - SYS_SETGROUPS = 80 // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); } - SYS_GETPGRP = 81 // { int|sys||getpgrp(void); } - SYS_SETPGID = 82 // { int|sys||setpgid(pid_t pid, pid_t pgid); } - SYS_DUP2 = 90 // { int|sys||dup2(int from, int to); } - SYS_FCNTL = 92 // { int|sys||fcntl(int fd, int cmd, ... void *arg); } - SYS_FSYNC = 95 // { int|sys||fsync(int fd); } - SYS_SETPRIORITY = 96 // { int|sys||setpriority(int which, id_t who, int prio); } - SYS_CONNECT = 98 // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); } - SYS_GETPRIORITY = 100 // { int|sys||getpriority(int which, id_t who); } - SYS_BIND = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); } - SYS_SETSOCKOPT = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } - SYS_LISTEN = 106 // { int|sys||listen(int s, int backlog); } - SYS_GETSOCKOPT = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } - SYS_READV = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); } - SYS_WRITEV = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); } - SYS_FCHOWN = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); } - SYS_FCHMOD = 124 // { int|sys||fchmod(int fd, mode_t mode); } - SYS_SETREUID = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); } - SYS_SETREGID = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); } - SYS_RENAME = 128 // { int|sys||rename(const char *from, const char *to); } - SYS_FLOCK = 131 // { int|sys||flock(int fd, int how); } - SYS_MKFIFO = 132 // { int|sys||mkfifo(const char *path, mode_t mode); } - SYS_SENDTO = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } - SYS_SHUTDOWN = 134 // { int|sys||shutdown(int s, int how); } - SYS_SOCKETPAIR = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); } - SYS_MKDIR = 136 // { int|sys||mkdir(const char *path, mode_t mode); } - SYS_RMDIR = 137 // { int|sys||rmdir(const char *path); } - SYS_SETSID = 147 // { int|sys||setsid(void); } - SYS_SYSARCH = 165 // { int|sys||sysarch(int op, void *parms); } - SYS_PREAD = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); } - SYS_PWRITE = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); } - SYS_NTP_ADJTIME = 176 // { int|sys||ntp_adjtime(struct timex *tp); } - SYS_SETGID = 181 // { int|sys||setgid(gid_t gid); } - SYS_SETEGID = 182 // { int|sys||setegid(gid_t egid); } - SYS_SETEUID = 183 // { int|sys||seteuid(uid_t euid); } - SYS_PATHCONF = 191 // { long|sys||pathconf(const char *path, int name); } - SYS_FPATHCONF = 192 // { long|sys||fpathconf(int fd, int name); } - SYS_GETRLIMIT = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); } - SYS_SETRLIMIT = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); } - SYS_MMAP = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); } - SYS_LSEEK = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); } - SYS_TRUNCATE = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); } - SYS_FTRUNCATE = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); } - SYS___SYSCTL = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); } - SYS_MLOCK = 203 // { int|sys||mlock(const void *addr, size_t len); } - SYS_MUNLOCK = 204 // { int|sys||munlock(const void *addr, size_t len); } - SYS_UNDELETE = 205 // { int|sys||undelete(const char *path); } - SYS_GETPGID = 207 // { pid_t|sys||getpgid(pid_t pid); } - SYS_REBOOT = 208 // { int|sys||reboot(int opt, char *bootstr); } - SYS_POLL = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); } - SYS_SEMGET = 221 // { int|sys||semget(key_t key, int nsems, int semflg); } - SYS_SEMOP = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); } - SYS_SEMCONFIG = 223 // { int|sys||semconfig(int flag); } - SYS_MSGGET = 225 // { int|sys||msgget(key_t key, int msgflg); } - SYS_MSGSND = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } - SYS_MSGRCV = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } - SYS_SHMAT = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); } - SYS_SHMDT = 230 // { int|sys||shmdt(const void *shmaddr); } - SYS_SHMGET = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); } - SYS_TIMER_CREATE = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); } - SYS_TIMER_DELETE = 236 // { int|sys||timer_delete(timer_t timerid); } - SYS_TIMER_GETOVERRUN = 239 // { int|sys||timer_getoverrun(timer_t timerid); } - SYS_FDATASYNC = 241 // { int|sys||fdatasync(int fd); } - SYS_MLOCKALL = 242 // { int|sys||mlockall(int flags); } - SYS_MUNLOCKALL = 243 // { int|sys||munlockall(void); } - SYS_SIGQUEUEINFO = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); } - SYS_MODCTL = 246 // { int|sys||modctl(int cmd, void *arg); } - SYS___POSIX_RENAME = 270 // { int|sys||__posix_rename(const char *from, const char *to); } - SYS_SWAPCTL = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); } - SYS_MINHERIT = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); } - SYS_LCHMOD = 274 // { int|sys||lchmod(const char *path, mode_t mode); } - SYS_LCHOWN = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); } - SYS_MSYNC = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); } - SYS___POSIX_CHOWN = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); } - SYS___POSIX_FCHOWN = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); } - SYS___POSIX_LCHOWN = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); } - SYS_GETSID = 286 // { pid_t|sys||getsid(pid_t pid); } - SYS___CLONE = 287 // { pid_t|sys||__clone(int flags, void *stack); } - SYS_FKTRACE = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); } - SYS_PREADV = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } - SYS_PWRITEV = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } - SYS___GETCWD = 296 // { int|sys||__getcwd(char *bufp, size_t length); } - SYS_FCHROOT = 297 // { int|sys||fchroot(int fd); } - SYS_LCHFLAGS = 304 // { int|sys||lchflags(const char *path, u_long flags); } - SYS_ISSETUGID = 305 // { int|sys||issetugid(void); } - SYS_UTRACE = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); } - SYS_GETCONTEXT = 307 // { int|sys||getcontext(struct __ucontext *ucp); } - SYS_SETCONTEXT = 308 // { int|sys||setcontext(const struct __ucontext *ucp); } - SYS__LWP_CREATE = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); } - SYS__LWP_EXIT = 310 // { int|sys||_lwp_exit(void); } - SYS__LWP_SELF = 311 // { lwpid_t|sys||_lwp_self(void); } - SYS__LWP_WAIT = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); } - SYS__LWP_SUSPEND = 313 // { int|sys||_lwp_suspend(lwpid_t target); } - SYS__LWP_CONTINUE = 314 // { int|sys||_lwp_continue(lwpid_t target); } - SYS__LWP_WAKEUP = 315 // { int|sys||_lwp_wakeup(lwpid_t target); } - SYS__LWP_GETPRIVATE = 316 // { void *|sys||_lwp_getprivate(void); } - SYS__LWP_SETPRIVATE = 317 // { void|sys||_lwp_setprivate(void *ptr); } - SYS__LWP_KILL = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); } - SYS__LWP_DETACH = 319 // { int|sys||_lwp_detach(lwpid_t target); } - SYS__LWP_UNPARK = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); } - SYS__LWP_UNPARK_ALL = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); } - SYS__LWP_SETNAME = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); } - SYS__LWP_GETNAME = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); } - SYS__LWP_CTL = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); } - SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); } - SYS_PMC_GET_INFO = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); } - SYS_PMC_CONTROL = 342 // { int|sys||pmc_control(int ctr, int op, void *args); } - SYS_RASCTL = 343 // { int|sys||rasctl(void *addr, size_t len, int op); } - SYS_KQUEUE = 344 // { int|sys||kqueue(void); } - SYS__SCHED_SETPARAM = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); } - SYS__SCHED_GETPARAM = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); } - SYS__SCHED_SETAFFINITY = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); } - SYS__SCHED_GETAFFINITY = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); } - SYS_SCHED_YIELD = 350 // { int|sys||sched_yield(void); } - SYS_FSYNC_RANGE = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); } - SYS_UUIDGEN = 355 // { int|sys||uuidgen(struct uuid *store, int count); } - SYS_GETVFSSTAT = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); } - SYS_STATVFS1 = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); } - SYS_FSTATVFS1 = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); } - SYS_EXTATTRCTL = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } - SYS_EXTATTR_SET_FILE = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } - SYS_EXTATTR_GET_FILE = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_FILE = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } - SYS_EXTATTR_SET_FD = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } - SYS_EXTATTR_GET_FD = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_FD = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } - SYS_EXTATTR_SET_LINK = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } - SYS_EXTATTR_GET_LINK = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_LINK = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } - SYS_EXTATTR_LIST_FD = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_FILE = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_LINK = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } - SYS_SETXATTR = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); } - SYS_LSETXATTR = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); } - SYS_FSETXATTR = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); } - SYS_GETXATTR = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); } - SYS_LGETXATTR = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); } - SYS_FGETXATTR = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); } - SYS_LISTXATTR = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); } - SYS_LLISTXATTR = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); } - SYS_FLISTXATTR = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); } - SYS_REMOVEXATTR = 384 // { int|sys||removexattr(const char *path, const char *name); } - SYS_LREMOVEXATTR = 385 // { int|sys||lremovexattr(const char *path, const char *name); } - SYS_FREMOVEXATTR = 386 // { int|sys||fremovexattr(int fd, const char *name); } - SYS_GETDENTS = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); } - SYS_SOCKET = 394 // { int|sys|30|socket(int domain, int type, int protocol); } - SYS_GETFH = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); } - SYS_MOUNT = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); } - SYS_MREMAP = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); } - SYS_PSET_CREATE = 412 // { int|sys||pset_create(psetid_t *psid); } - SYS_PSET_DESTROY = 413 // { int|sys||pset_destroy(psetid_t psid); } - SYS_PSET_ASSIGN = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); } - SYS__PSET_BIND = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); } - SYS_POSIX_FADVISE = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); } - SYS_SELECT = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } - SYS_GETTIMEOFDAY = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); } - SYS_SETTIMEOFDAY = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); } - SYS_UTIMES = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); } - SYS_ADJTIME = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); } - SYS_FUTIMES = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); } - SYS_LUTIMES = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); } - SYS_SETITIMER = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } - SYS_GETITIMER = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); } - SYS_CLOCK_GETTIME = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); } - SYS_CLOCK_SETTIME = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); } - SYS_CLOCK_GETRES = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); } - SYS_NANOSLEEP = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } - SYS___SIGTIMEDWAIT = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); } - SYS__LWP_PARK = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); } - SYS_KEVENT = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); } - SYS_PSELECT = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } - SYS_POLLTS = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } - SYS_STAT = 439 // { int|sys|50|stat(const char *path, struct stat *ub); } - SYS_FSTAT = 440 // { int|sys|50|fstat(int fd, struct stat *sb); } - SYS_LSTAT = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); } - SYS___SEMCTL = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); } - SYS_SHMCTL = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); } - SYS_MSGCTL = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); } - SYS_GETRUSAGE = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); } - SYS_TIMER_SETTIME = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } - SYS_TIMER_GETTIME = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); } - SYS_NTP_GETTIME = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); } - SYS_WAIT4 = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); } - SYS_MKNOD = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); } - SYS_FHSTAT = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); } - SYS_PIPE2 = 453 // { int|sys||pipe2(int *fildes, int flags); } - SYS_DUP3 = 454 // { int|sys||dup3(int from, int to, int flags); } - SYS_KQUEUE1 = 455 // { int|sys||kqueue1(int flags); } - SYS_PACCEPT = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); } - SYS_LINKAT = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); } - SYS_RENAMEAT = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); } - SYS_MKFIFOAT = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); } - SYS_MKNODAT = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); } - SYS_MKDIRAT = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); } - SYS_FACCESSAT = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); } - SYS_FCHMODAT = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); } - SYS_FCHOWNAT = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); } - SYS_FEXECVE = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); } - SYS_FSTATAT = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); } - SYS_UTIMENSAT = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); } - SYS_OPENAT = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); } - SYS_READLINKAT = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); } - SYS_SYMLINKAT = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); } - SYS_UNLINKAT = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); } - SYS_FUTIMENS = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); } - SYS___QUOTACTL = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); } - SYS_POSIX_SPAWN = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); } - SYS_RECVMMSG = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); } - SYS_SENDMMSG = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); } -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go deleted file mode 100644 index e784cb6..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go +++ /dev/null @@ -1,275 +0,0 @@ -// go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm && netbsd -// +build arm,netbsd - -package unix - -const ( - SYS_EXIT = 1 // { void|sys||exit(int rval); } - SYS_FORK = 2 // { int|sys||fork(void); } - SYS_READ = 3 // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); } - SYS_WRITE = 4 // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); } - SYS_OPEN = 5 // { int|sys||open(const char *path, int flags, ... mode_t mode); } - SYS_CLOSE = 6 // { int|sys||close(int fd); } - SYS_LINK = 9 // { int|sys||link(const char *path, const char *link); } - SYS_UNLINK = 10 // { int|sys||unlink(const char *path); } - SYS_CHDIR = 12 // { int|sys||chdir(const char *path); } - SYS_FCHDIR = 13 // { int|sys||fchdir(int fd); } - SYS_CHMOD = 15 // { int|sys||chmod(const char *path, mode_t mode); } - SYS_CHOWN = 16 // { int|sys||chown(const char *path, uid_t uid, gid_t gid); } - SYS_BREAK = 17 // { int|sys||obreak(char *nsize); } - SYS_GETPID = 20 // { pid_t|sys||getpid_with_ppid(void); } - SYS_UNMOUNT = 22 // { int|sys||unmount(const char *path, int flags); } - SYS_SETUID = 23 // { int|sys||setuid(uid_t uid); } - SYS_GETUID = 24 // { uid_t|sys||getuid_with_euid(void); } - SYS_GETEUID = 25 // { uid_t|sys||geteuid(void); } - SYS_PTRACE = 26 // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); } - SYS_RECVMSG = 27 // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); } - SYS_SENDMSG = 28 // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); } - SYS_RECVFROM = 29 // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } - SYS_ACCEPT = 30 // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); } - SYS_GETPEERNAME = 31 // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } - SYS_GETSOCKNAME = 32 // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } - SYS_ACCESS = 33 // { int|sys||access(const char *path, int flags); } - SYS_CHFLAGS = 34 // { int|sys||chflags(const char *path, u_long flags); } - SYS_FCHFLAGS = 35 // { int|sys||fchflags(int fd, u_long flags); } - SYS_SYNC = 36 // { void|sys||sync(void); } - SYS_KILL = 37 // { int|sys||kill(pid_t pid, int signum); } - SYS_GETPPID = 39 // { pid_t|sys||getppid(void); } - SYS_DUP = 41 // { int|sys||dup(int fd); } - SYS_PIPE = 42 // { int|sys||pipe(void); } - SYS_GETEGID = 43 // { gid_t|sys||getegid(void); } - SYS_PROFIL = 44 // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); } - SYS_KTRACE = 45 // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); } - SYS_GETGID = 47 // { gid_t|sys||getgid_with_egid(void); } - SYS___GETLOGIN = 49 // { int|sys||__getlogin(char *namebuf, size_t namelen); } - SYS___SETLOGIN = 50 // { int|sys||__setlogin(const char *namebuf); } - SYS_ACCT = 51 // { int|sys||acct(const char *path); } - SYS_IOCTL = 54 // { int|sys||ioctl(int fd, u_long com, ... void *data); } - SYS_REVOKE = 56 // { int|sys||revoke(const char *path); } - SYS_SYMLINK = 57 // { int|sys||symlink(const char *path, const char *link); } - SYS_READLINK = 58 // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); } - SYS_EXECVE = 59 // { int|sys||execve(const char *path, char * const *argp, char * const *envp); } - SYS_UMASK = 60 // { mode_t|sys||umask(mode_t newmask); } - SYS_CHROOT = 61 // { int|sys||chroot(const char *path); } - SYS_VFORK = 66 // { int|sys||vfork(void); } - SYS_SBRK = 69 // { int|sys||sbrk(intptr_t incr); } - SYS_SSTK = 70 // { int|sys||sstk(int incr); } - SYS_VADVISE = 72 // { int|sys||ovadvise(int anom); } - SYS_MUNMAP = 73 // { int|sys||munmap(void *addr, size_t len); } - SYS_MPROTECT = 74 // { int|sys||mprotect(void *addr, size_t len, int prot); } - SYS_MADVISE = 75 // { int|sys||madvise(void *addr, size_t len, int behav); } - SYS_MINCORE = 78 // { int|sys||mincore(void *addr, size_t len, char *vec); } - SYS_GETGROUPS = 79 // { int|sys||getgroups(int gidsetsize, gid_t *gidset); } - SYS_SETGROUPS = 80 // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); } - SYS_GETPGRP = 81 // { int|sys||getpgrp(void); } - SYS_SETPGID = 82 // { int|sys||setpgid(pid_t pid, pid_t pgid); } - SYS_DUP2 = 90 // { int|sys||dup2(int from, int to); } - SYS_FCNTL = 92 // { int|sys||fcntl(int fd, int cmd, ... void *arg); } - SYS_FSYNC = 95 // { int|sys||fsync(int fd); } - SYS_SETPRIORITY = 96 // { int|sys||setpriority(int which, id_t who, int prio); } - SYS_CONNECT = 98 // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); } - SYS_GETPRIORITY = 100 // { int|sys||getpriority(int which, id_t who); } - SYS_BIND = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); } - SYS_SETSOCKOPT = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } - SYS_LISTEN = 106 // { int|sys||listen(int s, int backlog); } - SYS_GETSOCKOPT = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } - SYS_READV = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); } - SYS_WRITEV = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); } - SYS_FCHOWN = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); } - SYS_FCHMOD = 124 // { int|sys||fchmod(int fd, mode_t mode); } - SYS_SETREUID = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); } - SYS_SETREGID = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); } - SYS_RENAME = 128 // { int|sys||rename(const char *from, const char *to); } - SYS_FLOCK = 131 // { int|sys||flock(int fd, int how); } - SYS_MKFIFO = 132 // { int|sys||mkfifo(const char *path, mode_t mode); } - SYS_SENDTO = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } - SYS_SHUTDOWN = 134 // { int|sys||shutdown(int s, int how); } - SYS_SOCKETPAIR = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); } - SYS_MKDIR = 136 // { int|sys||mkdir(const char *path, mode_t mode); } - SYS_RMDIR = 137 // { int|sys||rmdir(const char *path); } - SYS_SETSID = 147 // { int|sys||setsid(void); } - SYS_SYSARCH = 165 // { int|sys||sysarch(int op, void *parms); } - SYS_PREAD = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); } - SYS_PWRITE = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); } - SYS_NTP_ADJTIME = 176 // { int|sys||ntp_adjtime(struct timex *tp); } - SYS_SETGID = 181 // { int|sys||setgid(gid_t gid); } - SYS_SETEGID = 182 // { int|sys||setegid(gid_t egid); } - SYS_SETEUID = 183 // { int|sys||seteuid(uid_t euid); } - SYS_PATHCONF = 191 // { long|sys||pathconf(const char *path, int name); } - SYS_FPATHCONF = 192 // { long|sys||fpathconf(int fd, int name); } - SYS_GETRLIMIT = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); } - SYS_SETRLIMIT = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); } - SYS_MMAP = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); } - SYS_LSEEK = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); } - SYS_TRUNCATE = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); } - SYS_FTRUNCATE = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); } - SYS___SYSCTL = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); } - SYS_MLOCK = 203 // { int|sys||mlock(const void *addr, size_t len); } - SYS_MUNLOCK = 204 // { int|sys||munlock(const void *addr, size_t len); } - SYS_UNDELETE = 205 // { int|sys||undelete(const char *path); } - SYS_GETPGID = 207 // { pid_t|sys||getpgid(pid_t pid); } - SYS_REBOOT = 208 // { int|sys||reboot(int opt, char *bootstr); } - SYS_POLL = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); } - SYS_SEMGET = 221 // { int|sys||semget(key_t key, int nsems, int semflg); } - SYS_SEMOP = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); } - SYS_SEMCONFIG = 223 // { int|sys||semconfig(int flag); } - SYS_MSGGET = 225 // { int|sys||msgget(key_t key, int msgflg); } - SYS_MSGSND = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } - SYS_MSGRCV = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } - SYS_SHMAT = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); } - SYS_SHMDT = 230 // { int|sys||shmdt(const void *shmaddr); } - SYS_SHMGET = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); } - SYS_TIMER_CREATE = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); } - SYS_TIMER_DELETE = 236 // { int|sys||timer_delete(timer_t timerid); } - SYS_TIMER_GETOVERRUN = 239 // { int|sys||timer_getoverrun(timer_t timerid); } - SYS_FDATASYNC = 241 // { int|sys||fdatasync(int fd); } - SYS_MLOCKALL = 242 // { int|sys||mlockall(int flags); } - SYS_MUNLOCKALL = 243 // { int|sys||munlockall(void); } - SYS_SIGQUEUEINFO = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); } - SYS_MODCTL = 246 // { int|sys||modctl(int cmd, void *arg); } - SYS___POSIX_RENAME = 270 // { int|sys||__posix_rename(const char *from, const char *to); } - SYS_SWAPCTL = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); } - SYS_MINHERIT = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); } - SYS_LCHMOD = 274 // { int|sys||lchmod(const char *path, mode_t mode); } - SYS_LCHOWN = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); } - SYS_MSYNC = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); } - SYS___POSIX_CHOWN = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); } - SYS___POSIX_FCHOWN = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); } - SYS___POSIX_LCHOWN = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); } - SYS_GETSID = 286 // { pid_t|sys||getsid(pid_t pid); } - SYS___CLONE = 287 // { pid_t|sys||__clone(int flags, void *stack); } - SYS_FKTRACE = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); } - SYS_PREADV = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } - SYS_PWRITEV = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } - SYS___GETCWD = 296 // { int|sys||__getcwd(char *bufp, size_t length); } - SYS_FCHROOT = 297 // { int|sys||fchroot(int fd); } - SYS_LCHFLAGS = 304 // { int|sys||lchflags(const char *path, u_long flags); } - SYS_ISSETUGID = 305 // { int|sys||issetugid(void); } - SYS_UTRACE = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); } - SYS_GETCONTEXT = 307 // { int|sys||getcontext(struct __ucontext *ucp); } - SYS_SETCONTEXT = 308 // { int|sys||setcontext(const struct __ucontext *ucp); } - SYS__LWP_CREATE = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); } - SYS__LWP_EXIT = 310 // { int|sys||_lwp_exit(void); } - SYS__LWP_SELF = 311 // { lwpid_t|sys||_lwp_self(void); } - SYS__LWP_WAIT = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); } - SYS__LWP_SUSPEND = 313 // { int|sys||_lwp_suspend(lwpid_t target); } - SYS__LWP_CONTINUE = 314 // { int|sys||_lwp_continue(lwpid_t target); } - SYS__LWP_WAKEUP = 315 // { int|sys||_lwp_wakeup(lwpid_t target); } - SYS__LWP_GETPRIVATE = 316 // { void *|sys||_lwp_getprivate(void); } - SYS__LWP_SETPRIVATE = 317 // { void|sys||_lwp_setprivate(void *ptr); } - SYS__LWP_KILL = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); } - SYS__LWP_DETACH = 319 // { int|sys||_lwp_detach(lwpid_t target); } - SYS__LWP_UNPARK = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); } - SYS__LWP_UNPARK_ALL = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); } - SYS__LWP_SETNAME = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); } - SYS__LWP_GETNAME = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); } - SYS__LWP_CTL = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); } - SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); } - SYS_PMC_GET_INFO = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); } - SYS_PMC_CONTROL = 342 // { int|sys||pmc_control(int ctr, int op, void *args); } - SYS_RASCTL = 343 // { int|sys||rasctl(void *addr, size_t len, int op); } - SYS_KQUEUE = 344 // { int|sys||kqueue(void); } - SYS__SCHED_SETPARAM = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); } - SYS__SCHED_GETPARAM = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); } - SYS__SCHED_SETAFFINITY = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); } - SYS__SCHED_GETAFFINITY = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); } - SYS_SCHED_YIELD = 350 // { int|sys||sched_yield(void); } - SYS_FSYNC_RANGE = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); } - SYS_UUIDGEN = 355 // { int|sys||uuidgen(struct uuid *store, int count); } - SYS_GETVFSSTAT = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); } - SYS_STATVFS1 = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); } - SYS_FSTATVFS1 = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); } - SYS_EXTATTRCTL = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } - SYS_EXTATTR_SET_FILE = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } - SYS_EXTATTR_GET_FILE = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_FILE = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } - SYS_EXTATTR_SET_FD = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } - SYS_EXTATTR_GET_FD = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_FD = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } - SYS_EXTATTR_SET_LINK = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } - SYS_EXTATTR_GET_LINK = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_LINK = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } - SYS_EXTATTR_LIST_FD = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_FILE = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_LINK = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } - SYS_SETXATTR = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); } - SYS_LSETXATTR = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); } - SYS_FSETXATTR = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); } - SYS_GETXATTR = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); } - SYS_LGETXATTR = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); } - SYS_FGETXATTR = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); } - SYS_LISTXATTR = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); } - SYS_LLISTXATTR = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); } - SYS_FLISTXATTR = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); } - SYS_REMOVEXATTR = 384 // { int|sys||removexattr(const char *path, const char *name); } - SYS_LREMOVEXATTR = 385 // { int|sys||lremovexattr(const char *path, const char *name); } - SYS_FREMOVEXATTR = 386 // { int|sys||fremovexattr(int fd, const char *name); } - SYS_GETDENTS = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); } - SYS_SOCKET = 394 // { int|sys|30|socket(int domain, int type, int protocol); } - SYS_GETFH = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); } - SYS_MOUNT = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); } - SYS_MREMAP = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); } - SYS_PSET_CREATE = 412 // { int|sys||pset_create(psetid_t *psid); } - SYS_PSET_DESTROY = 413 // { int|sys||pset_destroy(psetid_t psid); } - SYS_PSET_ASSIGN = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); } - SYS__PSET_BIND = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); } - SYS_POSIX_FADVISE = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); } - SYS_SELECT = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } - SYS_GETTIMEOFDAY = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); } - SYS_SETTIMEOFDAY = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); } - SYS_UTIMES = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); } - SYS_ADJTIME = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); } - SYS_FUTIMES = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); } - SYS_LUTIMES = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); } - SYS_SETITIMER = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } - SYS_GETITIMER = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); } - SYS_CLOCK_GETTIME = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); } - SYS_CLOCK_SETTIME = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); } - SYS_CLOCK_GETRES = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); } - SYS_NANOSLEEP = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } - SYS___SIGTIMEDWAIT = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); } - SYS__LWP_PARK = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); } - SYS_KEVENT = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); } - SYS_PSELECT = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } - SYS_POLLTS = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } - SYS_STAT = 439 // { int|sys|50|stat(const char *path, struct stat *ub); } - SYS_FSTAT = 440 // { int|sys|50|fstat(int fd, struct stat *sb); } - SYS_LSTAT = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); } - SYS___SEMCTL = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); } - SYS_SHMCTL = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); } - SYS_MSGCTL = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); } - SYS_GETRUSAGE = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); } - SYS_TIMER_SETTIME = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } - SYS_TIMER_GETTIME = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); } - SYS_NTP_GETTIME = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); } - SYS_WAIT4 = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); } - SYS_MKNOD = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); } - SYS_FHSTAT = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); } - SYS_PIPE2 = 453 // { int|sys||pipe2(int *fildes, int flags); } - SYS_DUP3 = 454 // { int|sys||dup3(int from, int to, int flags); } - SYS_KQUEUE1 = 455 // { int|sys||kqueue1(int flags); } - SYS_PACCEPT = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); } - SYS_LINKAT = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); } - SYS_RENAMEAT = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); } - SYS_MKFIFOAT = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); } - SYS_MKNODAT = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); } - SYS_MKDIRAT = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); } - SYS_FACCESSAT = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); } - SYS_FCHMODAT = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); } - SYS_FCHOWNAT = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); } - SYS_FEXECVE = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); } - SYS_FSTATAT = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); } - SYS_UTIMENSAT = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); } - SYS_OPENAT = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); } - SYS_READLINKAT = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); } - SYS_SYMLINKAT = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); } - SYS_UNLINKAT = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); } - SYS_FUTIMENS = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); } - SYS___QUOTACTL = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); } - SYS_POSIX_SPAWN = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); } - SYS_RECVMMSG = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); } - SYS_SENDMMSG = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); } -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go deleted file mode 100644 index bd4952e..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go +++ /dev/null @@ -1,275 +0,0 @@ -// go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master -// Code generated by the command above; DO NOT EDIT. - -//go:build arm64 && netbsd -// +build arm64,netbsd - -package unix - -const ( - SYS_EXIT = 1 // { void|sys||exit(int rval); } - SYS_FORK = 2 // { int|sys||fork(void); } - SYS_READ = 3 // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); } - SYS_WRITE = 4 // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); } - SYS_OPEN = 5 // { int|sys||open(const char *path, int flags, ... mode_t mode); } - SYS_CLOSE = 6 // { int|sys||close(int fd); } - SYS_LINK = 9 // { int|sys||link(const char *path, const char *link); } - SYS_UNLINK = 10 // { int|sys||unlink(const char *path); } - SYS_CHDIR = 12 // { int|sys||chdir(const char *path); } - SYS_FCHDIR = 13 // { int|sys||fchdir(int fd); } - SYS_CHMOD = 15 // { int|sys||chmod(const char *path, mode_t mode); } - SYS_CHOWN = 16 // { int|sys||chown(const char *path, uid_t uid, gid_t gid); } - SYS_BREAK = 17 // { int|sys||obreak(char *nsize); } - SYS_GETPID = 20 // { pid_t|sys||getpid_with_ppid(void); } - SYS_UNMOUNT = 22 // { int|sys||unmount(const char *path, int flags); } - SYS_SETUID = 23 // { int|sys||setuid(uid_t uid); } - SYS_GETUID = 24 // { uid_t|sys||getuid_with_euid(void); } - SYS_GETEUID = 25 // { uid_t|sys||geteuid(void); } - SYS_PTRACE = 26 // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); } - SYS_RECVMSG = 27 // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); } - SYS_SENDMSG = 28 // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); } - SYS_RECVFROM = 29 // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } - SYS_ACCEPT = 30 // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); } - SYS_GETPEERNAME = 31 // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } - SYS_GETSOCKNAME = 32 // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } - SYS_ACCESS = 33 // { int|sys||access(const char *path, int flags); } - SYS_CHFLAGS = 34 // { int|sys||chflags(const char *path, u_long flags); } - SYS_FCHFLAGS = 35 // { int|sys||fchflags(int fd, u_long flags); } - SYS_SYNC = 36 // { void|sys||sync(void); } - SYS_KILL = 37 // { int|sys||kill(pid_t pid, int signum); } - SYS_GETPPID = 39 // { pid_t|sys||getppid(void); } - SYS_DUP = 41 // { int|sys||dup(int fd); } - SYS_PIPE = 42 // { int|sys||pipe(void); } - SYS_GETEGID = 43 // { gid_t|sys||getegid(void); } - SYS_PROFIL = 44 // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); } - SYS_KTRACE = 45 // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); } - SYS_GETGID = 47 // { gid_t|sys||getgid_with_egid(void); } - SYS___GETLOGIN = 49 // { int|sys||__getlogin(char *namebuf, size_t namelen); } - SYS___SETLOGIN = 50 // { int|sys||__setlogin(const char *namebuf); } - SYS_ACCT = 51 // { int|sys||acct(const char *path); } - SYS_IOCTL = 54 // { int|sys||ioctl(int fd, u_long com, ... void *data); } - SYS_REVOKE = 56 // { int|sys||revoke(const char *path); } - SYS_SYMLINK = 57 // { int|sys||symlink(const char *path, const char *link); } - SYS_READLINK = 58 // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); } - SYS_EXECVE = 59 // { int|sys||execve(const char *path, char * const *argp, char * const *envp); } - SYS_UMASK = 60 // { mode_t|sys||umask(mode_t newmask); } - SYS_CHROOT = 61 // { int|sys||chroot(const char *path); } - SYS_VFORK = 66 // { int|sys||vfork(void); } - SYS_SBRK = 69 // { int|sys||sbrk(intptr_t incr); } - SYS_SSTK = 70 // { int|sys||sstk(int incr); } - SYS_VADVISE = 72 // { int|sys||ovadvise(int anom); } - SYS_MUNMAP = 73 // { int|sys||munmap(void *addr, size_t len); } - SYS_MPROTECT = 74 // { int|sys||mprotect(void *addr, size_t len, int prot); } - SYS_MADVISE = 75 // { int|sys||madvise(void *addr, size_t len, int behav); } - SYS_MINCORE = 78 // { int|sys||mincore(void *addr, size_t len, char *vec); } - SYS_GETGROUPS = 79 // { int|sys||getgroups(int gidsetsize, gid_t *gidset); } - SYS_SETGROUPS = 80 // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); } - SYS_GETPGRP = 81 // { int|sys||getpgrp(void); } - SYS_SETPGID = 82 // { int|sys||setpgid(pid_t pid, pid_t pgid); } - SYS_DUP2 = 90 // { int|sys||dup2(int from, int to); } - SYS_FCNTL = 92 // { int|sys||fcntl(int fd, int cmd, ... void *arg); } - SYS_FSYNC = 95 // { int|sys||fsync(int fd); } - SYS_SETPRIORITY = 96 // { int|sys||setpriority(int which, id_t who, int prio); } - SYS_CONNECT = 98 // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); } - SYS_GETPRIORITY = 100 // { int|sys||getpriority(int which, id_t who); } - SYS_BIND = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); } - SYS_SETSOCKOPT = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } - SYS_LISTEN = 106 // { int|sys||listen(int s, int backlog); } - SYS_GETSOCKOPT = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } - SYS_READV = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); } - SYS_WRITEV = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); } - SYS_FCHOWN = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); } - SYS_FCHMOD = 124 // { int|sys||fchmod(int fd, mode_t mode); } - SYS_SETREUID = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); } - SYS_SETREGID = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); } - SYS_RENAME = 128 // { int|sys||rename(const char *from, const char *to); } - SYS_FLOCK = 131 // { int|sys||flock(int fd, int how); } - SYS_MKFIFO = 132 // { int|sys||mkfifo(const char *path, mode_t mode); } - SYS_SENDTO = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } - SYS_SHUTDOWN = 134 // { int|sys||shutdown(int s, int how); } - SYS_SOCKETPAIR = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); } - SYS_MKDIR = 136 // { int|sys||mkdir(const char *path, mode_t mode); } - SYS_RMDIR = 137 // { int|sys||rmdir(const char *path); } - SYS_SETSID = 147 // { int|sys||setsid(void); } - SYS_SYSARCH = 165 // { int|sys||sysarch(int op, void *parms); } - SYS_PREAD = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); } - SYS_PWRITE = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); } - SYS_NTP_ADJTIME = 176 // { int|sys||ntp_adjtime(struct timex *tp); } - SYS_SETGID = 181 // { int|sys||setgid(gid_t gid); } - SYS_SETEGID = 182 // { int|sys||setegid(gid_t egid); } - SYS_SETEUID = 183 // { int|sys||seteuid(uid_t euid); } - SYS_PATHCONF = 191 // { long|sys||pathconf(const char *path, int name); } - SYS_FPATHCONF = 192 // { long|sys||fpathconf(int fd, int name); } - SYS_GETRLIMIT = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); } - SYS_SETRLIMIT = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); } - SYS_MMAP = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); } - SYS_LSEEK = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); } - SYS_TRUNCATE = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); } - SYS_FTRUNCATE = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); } - SYS___SYSCTL = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); } - SYS_MLOCK = 203 // { int|sys||mlock(const void *addr, size_t len); } - SYS_MUNLOCK = 204 // { int|sys||munlock(const void *addr, size_t len); } - SYS_UNDELETE = 205 // { int|sys||undelete(const char *path); } - SYS_GETPGID = 207 // { pid_t|sys||getpgid(pid_t pid); } - SYS_REBOOT = 208 // { int|sys||reboot(int opt, char *bootstr); } - SYS_POLL = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); } - SYS_SEMGET = 221 // { int|sys||semget(key_t key, int nsems, int semflg); } - SYS_SEMOP = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); } - SYS_SEMCONFIG = 223 // { int|sys||semconfig(int flag); } - SYS_MSGGET = 225 // { int|sys||msgget(key_t key, int msgflg); } - SYS_MSGSND = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } - SYS_MSGRCV = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } - SYS_SHMAT = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); } - SYS_SHMDT = 230 // { int|sys||shmdt(const void *shmaddr); } - SYS_SHMGET = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); } - SYS_TIMER_CREATE = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); } - SYS_TIMER_DELETE = 236 // { int|sys||timer_delete(timer_t timerid); } - SYS_TIMER_GETOVERRUN = 239 // { int|sys||timer_getoverrun(timer_t timerid); } - SYS_FDATASYNC = 241 // { int|sys||fdatasync(int fd); } - SYS_MLOCKALL = 242 // { int|sys||mlockall(int flags); } - SYS_MUNLOCKALL = 243 // { int|sys||munlockall(void); } - SYS_SIGQUEUEINFO = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); } - SYS_MODCTL = 246 // { int|sys||modctl(int cmd, void *arg); } - SYS___POSIX_RENAME = 270 // { int|sys||__posix_rename(const char *from, const char *to); } - SYS_SWAPCTL = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); } - SYS_MINHERIT = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); } - SYS_LCHMOD = 274 // { int|sys||lchmod(const char *path, mode_t mode); } - SYS_LCHOWN = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); } - SYS_MSYNC = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); } - SYS___POSIX_CHOWN = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); } - SYS___POSIX_FCHOWN = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); } - SYS___POSIX_LCHOWN = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); } - SYS_GETSID = 286 // { pid_t|sys||getsid(pid_t pid); } - SYS___CLONE = 287 // { pid_t|sys||__clone(int flags, void *stack); } - SYS_FKTRACE = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); } - SYS_PREADV = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } - SYS_PWRITEV = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } - SYS___GETCWD = 296 // { int|sys||__getcwd(char *bufp, size_t length); } - SYS_FCHROOT = 297 // { int|sys||fchroot(int fd); } - SYS_LCHFLAGS = 304 // { int|sys||lchflags(const char *path, u_long flags); } - SYS_ISSETUGID = 305 // { int|sys||issetugid(void); } - SYS_UTRACE = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); } - SYS_GETCONTEXT = 307 // { int|sys||getcontext(struct __ucontext *ucp); } - SYS_SETCONTEXT = 308 // { int|sys||setcontext(const struct __ucontext *ucp); } - SYS__LWP_CREATE = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); } - SYS__LWP_EXIT = 310 // { int|sys||_lwp_exit(void); } - SYS__LWP_SELF = 311 // { lwpid_t|sys||_lwp_self(void); } - SYS__LWP_WAIT = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); } - SYS__LWP_SUSPEND = 313 // { int|sys||_lwp_suspend(lwpid_t target); } - SYS__LWP_CONTINUE = 314 // { int|sys||_lwp_continue(lwpid_t target); } - SYS__LWP_WAKEUP = 315 // { int|sys||_lwp_wakeup(lwpid_t target); } - SYS__LWP_GETPRIVATE = 316 // { void *|sys||_lwp_getprivate(void); } - SYS__LWP_SETPRIVATE = 317 // { void|sys||_lwp_setprivate(void *ptr); } - SYS__LWP_KILL = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); } - SYS__LWP_DETACH = 319 // { int|sys||_lwp_detach(lwpid_t target); } - SYS__LWP_UNPARK = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); } - SYS__LWP_UNPARK_ALL = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); } - SYS__LWP_SETNAME = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); } - SYS__LWP_GETNAME = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); } - SYS__LWP_CTL = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); } - SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); } - SYS_PMC_GET_INFO = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); } - SYS_PMC_CONTROL = 342 // { int|sys||pmc_control(int ctr, int op, void *args); } - SYS_RASCTL = 343 // { int|sys||rasctl(void *addr, size_t len, int op); } - SYS_KQUEUE = 344 // { int|sys||kqueue(void); } - SYS__SCHED_SETPARAM = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); } - SYS__SCHED_GETPARAM = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); } - SYS__SCHED_SETAFFINITY = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); } - SYS__SCHED_GETAFFINITY = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); } - SYS_SCHED_YIELD = 350 // { int|sys||sched_yield(void); } - SYS_FSYNC_RANGE = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); } - SYS_UUIDGEN = 355 // { int|sys||uuidgen(struct uuid *store, int count); } - SYS_GETVFSSTAT = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); } - SYS_STATVFS1 = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); } - SYS_FSTATVFS1 = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); } - SYS_EXTATTRCTL = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } - SYS_EXTATTR_SET_FILE = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } - SYS_EXTATTR_GET_FILE = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_FILE = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } - SYS_EXTATTR_SET_FD = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } - SYS_EXTATTR_GET_FD = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_FD = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } - SYS_EXTATTR_SET_LINK = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } - SYS_EXTATTR_GET_LINK = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } - SYS_EXTATTR_DELETE_LINK = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } - SYS_EXTATTR_LIST_FD = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_FILE = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } - SYS_EXTATTR_LIST_LINK = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } - SYS_SETXATTR = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); } - SYS_LSETXATTR = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); } - SYS_FSETXATTR = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); } - SYS_GETXATTR = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); } - SYS_LGETXATTR = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); } - SYS_FGETXATTR = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); } - SYS_LISTXATTR = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); } - SYS_LLISTXATTR = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); } - SYS_FLISTXATTR = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); } - SYS_REMOVEXATTR = 384 // { int|sys||removexattr(const char *path, const char *name); } - SYS_LREMOVEXATTR = 385 // { int|sys||lremovexattr(const char *path, const char *name); } - SYS_FREMOVEXATTR = 386 // { int|sys||fremovexattr(int fd, const char *name); } - SYS_GETDENTS = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); } - SYS_SOCKET = 394 // { int|sys|30|socket(int domain, int type, int protocol); } - SYS_GETFH = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); } - SYS_MOUNT = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); } - SYS_MREMAP = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); } - SYS_PSET_CREATE = 412 // { int|sys||pset_create(psetid_t *psid); } - SYS_PSET_DESTROY = 413 // { int|sys||pset_destroy(psetid_t psid); } - SYS_PSET_ASSIGN = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); } - SYS__PSET_BIND = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); } - SYS_POSIX_FADVISE = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); } - SYS_SELECT = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } - SYS_GETTIMEOFDAY = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); } - SYS_SETTIMEOFDAY = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); } - SYS_UTIMES = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); } - SYS_ADJTIME = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); } - SYS_FUTIMES = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); } - SYS_LUTIMES = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); } - SYS_SETITIMER = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } - SYS_GETITIMER = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); } - SYS_CLOCK_GETTIME = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); } - SYS_CLOCK_SETTIME = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); } - SYS_CLOCK_GETRES = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); } - SYS_NANOSLEEP = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } - SYS___SIGTIMEDWAIT = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); } - SYS__LWP_PARK = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); } - SYS_KEVENT = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); } - SYS_PSELECT = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } - SYS_POLLTS = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } - SYS_STAT = 439 // { int|sys|50|stat(const char *path, struct stat *ub); } - SYS_FSTAT = 440 // { int|sys|50|fstat(int fd, struct stat *sb); } - SYS_LSTAT = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); } - SYS___SEMCTL = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); } - SYS_SHMCTL = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); } - SYS_MSGCTL = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); } - SYS_GETRUSAGE = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); } - SYS_TIMER_SETTIME = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } - SYS_TIMER_GETTIME = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); } - SYS_NTP_GETTIME = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); } - SYS_WAIT4 = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); } - SYS_MKNOD = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); } - SYS_FHSTAT = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); } - SYS_PIPE2 = 453 // { int|sys||pipe2(int *fildes, int flags); } - SYS_DUP3 = 454 // { int|sys||dup3(int from, int to, int flags); } - SYS_KQUEUE1 = 455 // { int|sys||kqueue1(int flags); } - SYS_PACCEPT = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); } - SYS_LINKAT = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); } - SYS_RENAMEAT = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); } - SYS_MKFIFOAT = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); } - SYS_MKNODAT = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); } - SYS_MKDIRAT = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); } - SYS_FACCESSAT = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); } - SYS_FCHMODAT = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); } - SYS_FCHOWNAT = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); } - SYS_FEXECVE = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); } - SYS_FSTATAT = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); } - SYS_UTIMENSAT = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); } - SYS_OPENAT = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); } - SYS_READLINKAT = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); } - SYS_SYMLINKAT = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); } - SYS_UNLINKAT = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); } - SYS_FUTIMENS = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); } - SYS___QUOTACTL = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); } - SYS_POSIX_SPAWN = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); } - SYS_RECVMMSG = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); } - SYS_SENDMMSG = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); } -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go deleted file mode 100644 index 5977338..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go +++ /dev/null @@ -1,220 +0,0 @@ -// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build 386 && openbsd -// +build 386,openbsd - -package unix - -// Deprecated: Use libc wrappers instead of direct syscalls. -const ( - SYS_EXIT = 1 // { void sys_exit(int rval); } - SYS_FORK = 2 // { int sys_fork(void); } - SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); } - SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); } - SYS_OPEN = 5 // { int sys_open(const char *path, int flags, ... mode_t mode); } - SYS_CLOSE = 6 // { int sys_close(int fd); } - SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); } - SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, size_t psize); } - SYS_LINK = 9 // { int sys_link(const char *path, const char *link); } - SYS_UNLINK = 10 // { int sys_unlink(const char *path); } - SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); } - SYS_CHDIR = 12 // { int sys_chdir(const char *path); } - SYS_FCHDIR = 13 // { int sys_fchdir(int fd); } - SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, dev_t dev); } - SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); } - SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, gid_t gid); } - SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break - SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); } - SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, struct rusage *rusage); } - SYS_GETPID = 20 // { pid_t sys_getpid(void); } - SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, int flags, void *data); } - SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); } - SYS_SETUID = 23 // { int sys_setuid(uid_t uid); } - SYS_GETUID = 24 // { uid_t sys_getuid(void); } - SYS_GETEUID = 25 // { uid_t sys_geteuid(void); } - SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); } - SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); } - SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); } - SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } - SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); } - SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } - SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } - SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); } - SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); } - SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); } - SYS_SYNC = 36 // { void sys_sync(void); } - SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); } - SYS_GETPPID = 39 // { pid_t sys_getppid(void); } - SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); } - SYS_DUP = 41 // { int sys_dup(int fd); } - SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); } - SYS_GETEGID = 43 // { gid_t sys_getegid(void); } - SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); } - SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); } - SYS_SIGACTION = 46 // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); } - SYS_GETGID = 47 // { gid_t sys_getgid(void); } - SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); } - SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); } - SYS_ACCT = 51 // { int sys_acct(const char *path); } - SYS_SIGPENDING = 52 // { int sys_sigpending(void); } - SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); } - SYS_IOCTL = 54 // { int sys_ioctl(int fd, u_long com, ... void *data); } - SYS_REBOOT = 55 // { int sys_reboot(int opt); } - SYS_REVOKE = 56 // { int sys_revoke(const char *path); } - SYS_SYMLINK = 57 // { int sys_symlink(const char *path, const char *link); } - SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, char *buf, size_t count); } - SYS_EXECVE = 59 // { int sys_execve(const char *path, char * const *argp, char * const *envp); } - SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); } - SYS_CHROOT = 61 // { int sys_chroot(const char *path); } - SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); } - SYS_STATFS = 63 // { int sys_statfs(const char *path, struct statfs *buf); } - SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); } - SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); } - SYS_VFORK = 66 // { int sys_vfork(void); } - SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); } - SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); } - SYS_SETITIMER = 69 // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } - SYS_GETITIMER = 70 // { int sys_getitimer(int which, struct itimerval *itv); } - SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } - SYS_KEVENT = 72 // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } - SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); } - SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, int prot); } - SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, int behav); } - SYS_UTIMES = 76 // { int sys_utimes(const char *path, const struct timeval *tptr); } - SYS_FUTIMES = 77 // { int sys_futimes(int fd, const struct timeval *tptr); } - SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, char *vec); } - SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, gid_t *gidset); } - SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, const gid_t *gidset); } - SYS_GETPGRP = 81 // { int sys_getpgrp(void); } - SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); } - SYS_FUTEX = 83 // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); } - SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); } - SYS_FUTIMENS = 85 // { int sys_futimens(int fd, const struct timespec *times); } - SYS_KBIND = 86 // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); } - SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); } - SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); } - SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); } - SYS_DUP2 = 90 // { int sys_dup2(int from, int to); } - SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } - SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); } - SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); } - SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); } - SYS_FSYNC = 95 // { int sys_fsync(int fd); } - SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); } - SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); } - SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); } - SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); } - SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); } - SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); } - SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); } - SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); } - SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); } - SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } - SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); } - SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); } - SYS_PLEDGE = 108 // { int sys_pledge(const char *promises, const char *execpromises); } - SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } - SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } - SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); } - SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); } - SYS_UNVEIL = 114 // { int sys_unveil(const char *path, const char *permissions); } - SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } - SYS_THRKILL = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); } - SYS_READV = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); } - SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); } - SYS_KILL = 122 // { int sys_kill(int pid, int signum); } - SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); } - SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); } - SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); } - SYS_SETREGID = 127 // { int sys_setregid(gid_t rgid, gid_t egid); } - SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); } - SYS_FLOCK = 131 // { int sys_flock(int fd, int how); } - SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); } - SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } - SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); } - SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); } - SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); } - SYS_RMDIR = 137 // { int sys_rmdir(const char *path); } - SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); } - SYS_GETLOGIN_R = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); } - SYS_SETSID = 147 // { int sys_setsid(void); } - SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); } - SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); } - SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); } - SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); } - SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); } - SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); } - SYS_SETGID = 181 // { int sys_setgid(gid_t gid); } - SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); } - SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); } - SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); } - SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); } - SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); } - SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); } - SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); } - SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); } - SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); } - SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, off_t length); } - SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); } - SYS_SYSCTL = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } - SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); } - SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); } - SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); } - SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); } - SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); } - SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); } - SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } - SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } - SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); } - SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); } - SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, int inherit); } - SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); } - SYS_ISSETUGID = 253 // { int sys_issetugid(void); } - SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); } - SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); } - SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); } - SYS_PIPE = 263 // { int sys_pipe(int *fdp); } - SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); } - SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); } - SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); } - SYS_KQUEUE = 269 // { int sys_kqueue(void); } - SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); } - SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); } - SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } - SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); } - SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } - SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); } - SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); } - SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); } - SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); } - SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); } - SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); } - SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); } - SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); } - SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); } - SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); } - SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); } - SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); } - SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, int n); } - SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); } - SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); } - SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); } - SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); } - SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); } - SYS_GETRTABLE = 311 // { int sys_getrtable(void); } - SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); } - SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); } - SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); } - SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); } - SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); } - SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); } - SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); } - SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); } - SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); } - SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); } - SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); } - SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, int flag); } - SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); } - SYS___GET_TCB = 330 // { void *sys___get_tcb(void); } -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go deleted file mode 100644 index 16af291..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go +++ /dev/null @@ -1,220 +0,0 @@ -// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build amd64 && openbsd -// +build amd64,openbsd - -package unix - -// Deprecated: Use libc wrappers instead of direct syscalls. -const ( - SYS_EXIT = 1 // { void sys_exit(int rval); } - SYS_FORK = 2 // { int sys_fork(void); } - SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); } - SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); } - SYS_OPEN = 5 // { int sys_open(const char *path, int flags, ... mode_t mode); } - SYS_CLOSE = 6 // { int sys_close(int fd); } - SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); } - SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, size_t psize); } - SYS_LINK = 9 // { int sys_link(const char *path, const char *link); } - SYS_UNLINK = 10 // { int sys_unlink(const char *path); } - SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); } - SYS_CHDIR = 12 // { int sys_chdir(const char *path); } - SYS_FCHDIR = 13 // { int sys_fchdir(int fd); } - SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, dev_t dev); } - SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); } - SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, gid_t gid); } - SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break - SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); } - SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, struct rusage *rusage); } - SYS_GETPID = 20 // { pid_t sys_getpid(void); } - SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, int flags, void *data); } - SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); } - SYS_SETUID = 23 // { int sys_setuid(uid_t uid); } - SYS_GETUID = 24 // { uid_t sys_getuid(void); } - SYS_GETEUID = 25 // { uid_t sys_geteuid(void); } - SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); } - SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); } - SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); } - SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } - SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); } - SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } - SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } - SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); } - SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); } - SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); } - SYS_SYNC = 36 // { void sys_sync(void); } - SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); } - SYS_GETPPID = 39 // { pid_t sys_getppid(void); } - SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); } - SYS_DUP = 41 // { int sys_dup(int fd); } - SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); } - SYS_GETEGID = 43 // { gid_t sys_getegid(void); } - SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); } - SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); } - SYS_SIGACTION = 46 // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); } - SYS_GETGID = 47 // { gid_t sys_getgid(void); } - SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); } - SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); } - SYS_ACCT = 51 // { int sys_acct(const char *path); } - SYS_SIGPENDING = 52 // { int sys_sigpending(void); } - SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); } - SYS_IOCTL = 54 // { int sys_ioctl(int fd, u_long com, ... void *data); } - SYS_REBOOT = 55 // { int sys_reboot(int opt); } - SYS_REVOKE = 56 // { int sys_revoke(const char *path); } - SYS_SYMLINK = 57 // { int sys_symlink(const char *path, const char *link); } - SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, char *buf, size_t count); } - SYS_EXECVE = 59 // { int sys_execve(const char *path, char * const *argp, char * const *envp); } - SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); } - SYS_CHROOT = 61 // { int sys_chroot(const char *path); } - SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); } - SYS_STATFS = 63 // { int sys_statfs(const char *path, struct statfs *buf); } - SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); } - SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); } - SYS_VFORK = 66 // { int sys_vfork(void); } - SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); } - SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); } - SYS_SETITIMER = 69 // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } - SYS_GETITIMER = 70 // { int sys_getitimer(int which, struct itimerval *itv); } - SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } - SYS_KEVENT = 72 // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } - SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); } - SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, int prot); } - SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, int behav); } - SYS_UTIMES = 76 // { int sys_utimes(const char *path, const struct timeval *tptr); } - SYS_FUTIMES = 77 // { int sys_futimes(int fd, const struct timeval *tptr); } - SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, char *vec); } - SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, gid_t *gidset); } - SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, const gid_t *gidset); } - SYS_GETPGRP = 81 // { int sys_getpgrp(void); } - SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); } - SYS_FUTEX = 83 // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); } - SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); } - SYS_FUTIMENS = 85 // { int sys_futimens(int fd, const struct timespec *times); } - SYS_KBIND = 86 // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); } - SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); } - SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); } - SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); } - SYS_DUP2 = 90 // { int sys_dup2(int from, int to); } - SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } - SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); } - SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); } - SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); } - SYS_FSYNC = 95 // { int sys_fsync(int fd); } - SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); } - SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); } - SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); } - SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); } - SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); } - SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); } - SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); } - SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); } - SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); } - SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } - SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); } - SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); } - SYS_PLEDGE = 108 // { int sys_pledge(const char *promises, const char *execpromises); } - SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } - SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } - SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); } - SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); } - SYS_UNVEIL = 114 // { int sys_unveil(const char *path, const char *permissions); } - SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } - SYS_THRKILL = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); } - SYS_READV = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); } - SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); } - SYS_KILL = 122 // { int sys_kill(int pid, int signum); } - SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); } - SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); } - SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); } - SYS_SETREGID = 127 // { int sys_setregid(gid_t rgid, gid_t egid); } - SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); } - SYS_FLOCK = 131 // { int sys_flock(int fd, int how); } - SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); } - SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } - SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); } - SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); } - SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); } - SYS_RMDIR = 137 // { int sys_rmdir(const char *path); } - SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); } - SYS_GETLOGIN_R = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); } - SYS_SETSID = 147 // { int sys_setsid(void); } - SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); } - SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); } - SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); } - SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); } - SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); } - SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); } - SYS_SETGID = 181 // { int sys_setgid(gid_t gid); } - SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); } - SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); } - SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); } - SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); } - SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); } - SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); } - SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); } - SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); } - SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); } - SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, off_t length); } - SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); } - SYS_SYSCTL = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } - SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); } - SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); } - SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); } - SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); } - SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); } - SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); } - SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } - SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } - SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); } - SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); } - SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, int inherit); } - SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); } - SYS_ISSETUGID = 253 // { int sys_issetugid(void); } - SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); } - SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); } - SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); } - SYS_PIPE = 263 // { int sys_pipe(int *fdp); } - SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); } - SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); } - SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); } - SYS_KQUEUE = 269 // { int sys_kqueue(void); } - SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); } - SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); } - SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } - SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); } - SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } - SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); } - SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); } - SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); } - SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); } - SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); } - SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); } - SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); } - SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); } - SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); } - SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); } - SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); } - SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); } - SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, int n); } - SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); } - SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); } - SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); } - SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); } - SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); } - SYS_GETRTABLE = 311 // { int sys_getrtable(void); } - SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); } - SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); } - SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); } - SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); } - SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); } - SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); } - SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); } - SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); } - SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); } - SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); } - SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); } - SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, int flag); } - SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); } - SYS___GET_TCB = 330 // { void *sys___get_tcb(void); } -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go deleted file mode 100644 index f59b18a..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go +++ /dev/null @@ -1,220 +0,0 @@ -// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm && openbsd -// +build arm,openbsd - -package unix - -// Deprecated: Use libc wrappers instead of direct syscalls. -const ( - SYS_EXIT = 1 // { void sys_exit(int rval); } - SYS_FORK = 2 // { int sys_fork(void); } - SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); } - SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); } - SYS_OPEN = 5 // { int sys_open(const char *path, int flags, ... mode_t mode); } - SYS_CLOSE = 6 // { int sys_close(int fd); } - SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); } - SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, size_t psize); } - SYS_LINK = 9 // { int sys_link(const char *path, const char *link); } - SYS_UNLINK = 10 // { int sys_unlink(const char *path); } - SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); } - SYS_CHDIR = 12 // { int sys_chdir(const char *path); } - SYS_FCHDIR = 13 // { int sys_fchdir(int fd); } - SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, dev_t dev); } - SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); } - SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, gid_t gid); } - SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break - SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); } - SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, struct rusage *rusage); } - SYS_GETPID = 20 // { pid_t sys_getpid(void); } - SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, int flags, void *data); } - SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); } - SYS_SETUID = 23 // { int sys_setuid(uid_t uid); } - SYS_GETUID = 24 // { uid_t sys_getuid(void); } - SYS_GETEUID = 25 // { uid_t sys_geteuid(void); } - SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); } - SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); } - SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); } - SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } - SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); } - SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } - SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } - SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); } - SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); } - SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); } - SYS_SYNC = 36 // { void sys_sync(void); } - SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); } - SYS_GETPPID = 39 // { pid_t sys_getppid(void); } - SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); } - SYS_DUP = 41 // { int sys_dup(int fd); } - SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); } - SYS_GETEGID = 43 // { gid_t sys_getegid(void); } - SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); } - SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); } - SYS_SIGACTION = 46 // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); } - SYS_GETGID = 47 // { gid_t sys_getgid(void); } - SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); } - SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); } - SYS_ACCT = 51 // { int sys_acct(const char *path); } - SYS_SIGPENDING = 52 // { int sys_sigpending(void); } - SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); } - SYS_IOCTL = 54 // { int sys_ioctl(int fd, u_long com, ... void *data); } - SYS_REBOOT = 55 // { int sys_reboot(int opt); } - SYS_REVOKE = 56 // { int sys_revoke(const char *path); } - SYS_SYMLINK = 57 // { int sys_symlink(const char *path, const char *link); } - SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, char *buf, size_t count); } - SYS_EXECVE = 59 // { int sys_execve(const char *path, char * const *argp, char * const *envp); } - SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); } - SYS_CHROOT = 61 // { int sys_chroot(const char *path); } - SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); } - SYS_STATFS = 63 // { int sys_statfs(const char *path, struct statfs *buf); } - SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); } - SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); } - SYS_VFORK = 66 // { int sys_vfork(void); } - SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); } - SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); } - SYS_SETITIMER = 69 // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } - SYS_GETITIMER = 70 // { int sys_getitimer(int which, struct itimerval *itv); } - SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } - SYS_KEVENT = 72 // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } - SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); } - SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, int prot); } - SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, int behav); } - SYS_UTIMES = 76 // { int sys_utimes(const char *path, const struct timeval *tptr); } - SYS_FUTIMES = 77 // { int sys_futimes(int fd, const struct timeval *tptr); } - SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, char *vec); } - SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, gid_t *gidset); } - SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, const gid_t *gidset); } - SYS_GETPGRP = 81 // { int sys_getpgrp(void); } - SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); } - SYS_FUTEX = 83 // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); } - SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); } - SYS_FUTIMENS = 85 // { int sys_futimens(int fd, const struct timespec *times); } - SYS_KBIND = 86 // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); } - SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); } - SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); } - SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); } - SYS_DUP2 = 90 // { int sys_dup2(int from, int to); } - SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } - SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); } - SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); } - SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); } - SYS_FSYNC = 95 // { int sys_fsync(int fd); } - SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); } - SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); } - SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); } - SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); } - SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); } - SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); } - SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); } - SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); } - SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); } - SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } - SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); } - SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); } - SYS_PLEDGE = 108 // { int sys_pledge(const char *promises, const char *execpromises); } - SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } - SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } - SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); } - SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); } - SYS_UNVEIL = 114 // { int sys_unveil(const char *path, const char *permissions); } - SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } - SYS_THRKILL = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); } - SYS_READV = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); } - SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); } - SYS_KILL = 122 // { int sys_kill(int pid, int signum); } - SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); } - SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); } - SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); } - SYS_SETREGID = 127 // { int sys_setregid(gid_t rgid, gid_t egid); } - SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); } - SYS_FLOCK = 131 // { int sys_flock(int fd, int how); } - SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); } - SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } - SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); } - SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); } - SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); } - SYS_RMDIR = 137 // { int sys_rmdir(const char *path); } - SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); } - SYS_GETLOGIN_R = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); } - SYS_SETSID = 147 // { int sys_setsid(void); } - SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); } - SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); } - SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); } - SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); } - SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); } - SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); } - SYS_SETGID = 181 // { int sys_setgid(gid_t gid); } - SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); } - SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); } - SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); } - SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); } - SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); } - SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); } - SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); } - SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); } - SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); } - SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, off_t length); } - SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); } - SYS_SYSCTL = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } - SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); } - SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); } - SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); } - SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); } - SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); } - SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); } - SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } - SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } - SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); } - SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); } - SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, int inherit); } - SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); } - SYS_ISSETUGID = 253 // { int sys_issetugid(void); } - SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); } - SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); } - SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); } - SYS_PIPE = 263 // { int sys_pipe(int *fdp); } - SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); } - SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); } - SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); } - SYS_KQUEUE = 269 // { int sys_kqueue(void); } - SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); } - SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); } - SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } - SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); } - SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } - SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); } - SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); } - SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); } - SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); } - SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); } - SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); } - SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); } - SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); } - SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); } - SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); } - SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); } - SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); } - SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, int n); } - SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); } - SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); } - SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); } - SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); } - SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); } - SYS_GETRTABLE = 311 // { int sys_getrtable(void); } - SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); } - SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); } - SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); } - SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); } - SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); } - SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); } - SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); } - SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); } - SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); } - SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); } - SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); } - SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, int flag); } - SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); } - SYS___GET_TCB = 330 // { void *sys___get_tcb(void); } -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go deleted file mode 100644 index 721ef59..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go +++ /dev/null @@ -1,219 +0,0 @@ -// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm64 && openbsd -// +build arm64,openbsd - -package unix - -// Deprecated: Use libc wrappers instead of direct syscalls. -const ( - SYS_EXIT = 1 // { void sys_exit(int rval); } - SYS_FORK = 2 // { int sys_fork(void); } - SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); } - SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); } - SYS_OPEN = 5 // { int sys_open(const char *path, int flags, ... mode_t mode); } - SYS_CLOSE = 6 // { int sys_close(int fd); } - SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); } - SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, size_t psize); } - SYS_LINK = 9 // { int sys_link(const char *path, const char *link); } - SYS_UNLINK = 10 // { int sys_unlink(const char *path); } - SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); } - SYS_CHDIR = 12 // { int sys_chdir(const char *path); } - SYS_FCHDIR = 13 // { int sys_fchdir(int fd); } - SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, dev_t dev); } - SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); } - SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, gid_t gid); } - SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break - SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); } - SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, struct rusage *rusage); } - SYS_GETPID = 20 // { pid_t sys_getpid(void); } - SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, int flags, void *data); } - SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); } - SYS_SETUID = 23 // { int sys_setuid(uid_t uid); } - SYS_GETUID = 24 // { uid_t sys_getuid(void); } - SYS_GETEUID = 25 // { uid_t sys_geteuid(void); } - SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); } - SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); } - SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); } - SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } - SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); } - SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } - SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } - SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); } - SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); } - SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); } - SYS_SYNC = 36 // { void sys_sync(void); } - SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); } - SYS_GETPPID = 39 // { pid_t sys_getppid(void); } - SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); } - SYS_DUP = 41 // { int sys_dup(int fd); } - SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); } - SYS_GETEGID = 43 // { gid_t sys_getegid(void); } - SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); } - SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); } - SYS_SIGACTION = 46 // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); } - SYS_GETGID = 47 // { gid_t sys_getgid(void); } - SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); } - SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); } - SYS_ACCT = 51 // { int sys_acct(const char *path); } - SYS_SIGPENDING = 52 // { int sys_sigpending(void); } - SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); } - SYS_IOCTL = 54 // { int sys_ioctl(int fd, u_long com, ... void *data); } - SYS_REBOOT = 55 // { int sys_reboot(int opt); } - SYS_REVOKE = 56 // { int sys_revoke(const char *path); } - SYS_SYMLINK = 57 // { int sys_symlink(const char *path, const char *link); } - SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, char *buf, size_t count); } - SYS_EXECVE = 59 // { int sys_execve(const char *path, char * const *argp, char * const *envp); } - SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); } - SYS_CHROOT = 61 // { int sys_chroot(const char *path); } - SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); } - SYS_STATFS = 63 // { int sys_statfs(const char *path, struct statfs *buf); } - SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); } - SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); } - SYS_VFORK = 66 // { int sys_vfork(void); } - SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); } - SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); } - SYS_SETITIMER = 69 // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } - SYS_GETITIMER = 70 // { int sys_getitimer(int which, struct itimerval *itv); } - SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } - SYS_KEVENT = 72 // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } - SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); } - SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, int prot); } - SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, int behav); } - SYS_UTIMES = 76 // { int sys_utimes(const char *path, const struct timeval *tptr); } - SYS_FUTIMES = 77 // { int sys_futimes(int fd, const struct timeval *tptr); } - SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, gid_t *gidset); } - SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, const gid_t *gidset); } - SYS_GETPGRP = 81 // { int sys_getpgrp(void); } - SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); } - SYS_FUTEX = 83 // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); } - SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); } - SYS_FUTIMENS = 85 // { int sys_futimens(int fd, const struct timespec *times); } - SYS_KBIND = 86 // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); } - SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); } - SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); } - SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); } - SYS_DUP2 = 90 // { int sys_dup2(int from, int to); } - SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } - SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); } - SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); } - SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); } - SYS_FSYNC = 95 // { int sys_fsync(int fd); } - SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); } - SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); } - SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); } - SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); } - SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); } - SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); } - SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); } - SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); } - SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); } - SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } - SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); } - SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); } - SYS_PLEDGE = 108 // { int sys_pledge(const char *promises, const char *execpromises); } - SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } - SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } - SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); } - SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); } - SYS_UNVEIL = 114 // { int sys_unveil(const char *path, const char *permissions); } - SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } - SYS_THRKILL = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); } - SYS_READV = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); } - SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); } - SYS_KILL = 122 // { int sys_kill(int pid, int signum); } - SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); } - SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); } - SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); } - SYS_SETREGID = 127 // { int sys_setregid(gid_t rgid, gid_t egid); } - SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); } - SYS_FLOCK = 131 // { int sys_flock(int fd, int how); } - SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); } - SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } - SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); } - SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); } - SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); } - SYS_RMDIR = 137 // { int sys_rmdir(const char *path); } - SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); } - SYS_GETLOGIN_R = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); } - SYS_SETSID = 147 // { int sys_setsid(void); } - SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); } - SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); } - SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); } - SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); } - SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); } - SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); } - SYS_SETGID = 181 // { int sys_setgid(gid_t gid); } - SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); } - SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); } - SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); } - SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); } - SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); } - SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); } - SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); } - SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); } - SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); } - SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, off_t length); } - SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); } - SYS_SYSCTL = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } - SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); } - SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); } - SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); } - SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); } - SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); } - SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); } - SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } - SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } - SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); } - SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); } - SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, int inherit); } - SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); } - SYS_ISSETUGID = 253 // { int sys_issetugid(void); } - SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); } - SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); } - SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); } - SYS_PIPE = 263 // { int sys_pipe(int *fdp); } - SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); } - SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); } - SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); } - SYS_KQUEUE = 269 // { int sys_kqueue(void); } - SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); } - SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); } - SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } - SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); } - SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } - SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); } - SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); } - SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); } - SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); } - SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); } - SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); } - SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); } - SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); } - SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); } - SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); } - SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); } - SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); } - SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, int n); } - SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); } - SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); } - SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); } - SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); } - SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); } - SYS_GETRTABLE = 311 // { int sys_getrtable(void); } - SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); } - SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); } - SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); } - SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); } - SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); } - SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); } - SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); } - SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); } - SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); } - SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); } - SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); } - SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, int flag); } - SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); } - SYS___GET_TCB = 330 // { void *sys___get_tcb(void); } -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go deleted file mode 100644 index a37f773..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go +++ /dev/null @@ -1,221 +0,0 @@ -// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build mips64 && openbsd -// +build mips64,openbsd - -package unix - -const ( - SYS_EXIT = 1 // { void sys_exit(int rval); } - SYS_FORK = 2 // { int sys_fork(void); } - SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); } - SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); } - SYS_OPEN = 5 // { int sys_open(const char *path, int flags, ... mode_t mode); } - SYS_CLOSE = 6 // { int sys_close(int fd); } - SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); } - SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, size_t psize); } - SYS_LINK = 9 // { int sys_link(const char *path, const char *link); } - SYS_UNLINK = 10 // { int sys_unlink(const char *path); } - SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); } - SYS_CHDIR = 12 // { int sys_chdir(const char *path); } - SYS_FCHDIR = 13 // { int sys_fchdir(int fd); } - SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, dev_t dev); } - SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); } - SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, gid_t gid); } - SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break - SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); } - SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, struct rusage *rusage); } - SYS_GETPID = 20 // { pid_t sys_getpid(void); } - SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, int flags, void *data); } - SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); } - SYS_SETUID = 23 // { int sys_setuid(uid_t uid); } - SYS_GETUID = 24 // { uid_t sys_getuid(void); } - SYS_GETEUID = 25 // { uid_t sys_geteuid(void); } - SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); } - SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); } - SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); } - SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } - SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); } - SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } - SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } - SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); } - SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); } - SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); } - SYS_SYNC = 36 // { void sys_sync(void); } - SYS_MSYSCALL = 37 // { int sys_msyscall(void *addr, size_t len); } - SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); } - SYS_GETPPID = 39 // { pid_t sys_getppid(void); } - SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); } - SYS_DUP = 41 // { int sys_dup(int fd); } - SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); } - SYS_GETEGID = 43 // { gid_t sys_getegid(void); } - SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); } - SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); } - SYS_SIGACTION = 46 // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); } - SYS_GETGID = 47 // { gid_t sys_getgid(void); } - SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); } - SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); } - SYS_ACCT = 51 // { int sys_acct(const char *path); } - SYS_SIGPENDING = 52 // { int sys_sigpending(void); } - SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); } - SYS_IOCTL = 54 // { int sys_ioctl(int fd, u_long com, ... void *data); } - SYS_REBOOT = 55 // { int sys_reboot(int opt); } - SYS_REVOKE = 56 // { int sys_revoke(const char *path); } - SYS_SYMLINK = 57 // { int sys_symlink(const char *path, const char *link); } - SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, char *buf, size_t count); } - SYS_EXECVE = 59 // { int sys_execve(const char *path, char * const *argp, char * const *envp); } - SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); } - SYS_CHROOT = 61 // { int sys_chroot(const char *path); } - SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); } - SYS_STATFS = 63 // { int sys_statfs(const char *path, struct statfs *buf); } - SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); } - SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); } - SYS_VFORK = 66 // { int sys_vfork(void); } - SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); } - SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); } - SYS_SETITIMER = 69 // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } - SYS_GETITIMER = 70 // { int sys_getitimer(int which, struct itimerval *itv); } - SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } - SYS_KEVENT = 72 // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } - SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); } - SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, int prot); } - SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, int behav); } - SYS_UTIMES = 76 // { int sys_utimes(const char *path, const struct timeval *tptr); } - SYS_FUTIMES = 77 // { int sys_futimes(int fd, const struct timeval *tptr); } - SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, gid_t *gidset); } - SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, const gid_t *gidset); } - SYS_GETPGRP = 81 // { int sys_getpgrp(void); } - SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); } - SYS_FUTEX = 83 // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); } - SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); } - SYS_FUTIMENS = 85 // { int sys_futimens(int fd, const struct timespec *times); } - SYS_KBIND = 86 // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); } - SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); } - SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); } - SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); } - SYS_DUP2 = 90 // { int sys_dup2(int from, int to); } - SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } - SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); } - SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); } - SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); } - SYS_FSYNC = 95 // { int sys_fsync(int fd); } - SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); } - SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); } - SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); } - SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); } - SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); } - SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); } - SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); } - SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); } - SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); } - SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } - SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); } - SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); } - SYS_PLEDGE = 108 // { int sys_pledge(const char *promises, const char *execpromises); } - SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } - SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } - SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); } - SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); } - SYS_UNVEIL = 114 // { int sys_unveil(const char *path, const char *permissions); } - SYS___REALPATH = 115 // { int sys___realpath(const char *pathname, char *resolved); } - SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } - SYS_THRKILL = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); } - SYS_READV = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); } - SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); } - SYS_KILL = 122 // { int sys_kill(int pid, int signum); } - SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); } - SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); } - SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); } - SYS_SETREGID = 127 // { int sys_setregid(gid_t rgid, gid_t egid); } - SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); } - SYS_FLOCK = 131 // { int sys_flock(int fd, int how); } - SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); } - SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } - SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); } - SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); } - SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); } - SYS_RMDIR = 137 // { int sys_rmdir(const char *path); } - SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); } - SYS_GETLOGIN_R = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); } - SYS_SETSID = 147 // { int sys_setsid(void); } - SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); } - SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); } - SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); } - SYS___TMPFD = 164 // { int sys___tmpfd(int flags); } - SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); } - SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); } - SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); } - SYS_SETGID = 181 // { int sys_setgid(gid_t gid); } - SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); } - SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); } - SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); } - SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); } - SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); } - SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); } - SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); } - SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); } - SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); } - SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, off_t length); } - SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); } - SYS_SYSCTL = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } - SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); } - SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); } - SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); } - SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); } - SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); } - SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); } - SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } - SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } - SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); } - SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); } - SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, int inherit); } - SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); } - SYS_ISSETUGID = 253 // { int sys_issetugid(void); } - SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); } - SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); } - SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); } - SYS_PIPE = 263 // { int sys_pipe(int *fdp); } - SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); } - SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); } - SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); } - SYS_KQUEUE = 269 // { int sys_kqueue(void); } - SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); } - SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); } - SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } - SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); } - SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } - SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); } - SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); } - SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); } - SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); } - SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); } - SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); } - SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); } - SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); } - SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); } - SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); } - SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); } - SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); } - SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, int n); } - SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); } - SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); } - SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); } - SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); } - SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); } - SYS_GETRTABLE = 311 // { int sys_getrtable(void); } - SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); } - SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); } - SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); } - SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); } - SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); } - SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); } - SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); } - SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); } - SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); } - SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); } - SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); } - SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, int flag); } - SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); } - SYS___GET_TCB = 330 // { void *sys___get_tcb(void); } -) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go deleted file mode 100644 index 073daad..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go +++ /dev/null @@ -1,2670 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build zos && s390x -// +build zos,s390x - -package unix - -// TODO: auto-generate. - -const ( - SYS_ACOSD128 = 0xB80 - SYS_ACOSD32 = 0xB7E - SYS_ACOSD64 = 0xB7F - SYS_ACOSHD128 = 0xB83 - SYS_ACOSHD32 = 0xB81 - SYS_ACOSHD64 = 0xB82 - SYS_AIO_FSYNC = 0xC69 - SYS_ASCTIME = 0x0AE - SYS_ASCTIME64 = 0xCD7 - SYS_ASCTIME64_R = 0xCD8 - SYS_ASIND128 = 0xB86 - SYS_ASIND32 = 0xB84 - SYS_ASIND64 = 0xB85 - SYS_ASINHD128 = 0xB89 - SYS_ASINHD32 = 0xB87 - SYS_ASINHD64 = 0xB88 - SYS_ATAN2D128 = 0xB8F - SYS_ATAN2D32 = 0xB8D - SYS_ATAN2D64 = 0xB8E - SYS_ATAND128 = 0xB8C - SYS_ATAND32 = 0xB8A - SYS_ATAND64 = 0xB8B - SYS_ATANHD128 = 0xB92 - SYS_ATANHD32 = 0xB90 - SYS_ATANHD64 = 0xB91 - SYS_BIND2ADDRSEL = 0xD59 - SYS_C16RTOMB = 0xD40 - SYS_C32RTOMB = 0xD41 - SYS_CBRTD128 = 0xB95 - SYS_CBRTD32 = 0xB93 - SYS_CBRTD64 = 0xB94 - SYS_CEILD128 = 0xB98 - SYS_CEILD32 = 0xB96 - SYS_CEILD64 = 0xB97 - SYS_CLEARENV = 0x0C9 - SYS_CLEARERR_UNLOCKED = 0xCA1 - SYS_CLOCK = 0x0AA - SYS_CLOGL = 0xA00 - SYS_CLRMEMF = 0x0BD - SYS_CONJ = 0xA03 - SYS_CONJF = 0xA06 - SYS_CONJL = 0xA09 - SYS_COPYSIGND128 = 0xB9E - SYS_COPYSIGND32 = 0xB9C - SYS_COPYSIGND64 = 0xB9D - SYS_COSD128 = 0xBA1 - SYS_COSD32 = 0xB9F - SYS_COSD64 = 0xBA0 - SYS_COSHD128 = 0xBA4 - SYS_COSHD32 = 0xBA2 - SYS_COSHD64 = 0xBA3 - SYS_CPOW = 0xA0C - SYS_CPOWF = 0xA0F - SYS_CPOWL = 0xA12 - SYS_CPROJ = 0xA15 - SYS_CPROJF = 0xA18 - SYS_CPROJL = 0xA1B - SYS_CREAL = 0xA1E - SYS_CREALF = 0xA21 - SYS_CREALL = 0xA24 - SYS_CSIN = 0xA27 - SYS_CSINF = 0xA2A - SYS_CSINH = 0xA30 - SYS_CSINHF = 0xA33 - SYS_CSINHL = 0xA36 - SYS_CSINL = 0xA2D - SYS_CSNAP = 0x0C5 - SYS_CSQRT = 0xA39 - SYS_CSQRTF = 0xA3C - SYS_CSQRTL = 0xA3F - SYS_CTAN = 0xA42 - SYS_CTANF = 0xA45 - SYS_CTANH = 0xA4B - SYS_CTANHF = 0xA4E - SYS_CTANHL = 0xA51 - SYS_CTANL = 0xA48 - SYS_CTIME = 0x0AB - SYS_CTIME64 = 0xCD9 - SYS_CTIME64_R = 0xCDA - SYS_CTRACE = 0x0C6 - SYS_DIFFTIME = 0x0A7 - SYS_DIFFTIME64 = 0xCDB - SYS_DLADDR = 0xC82 - SYS_DYNALLOC = 0x0C3 - SYS_DYNFREE = 0x0C2 - SYS_ERFCD128 = 0xBAA - SYS_ERFCD32 = 0xBA8 - SYS_ERFCD64 = 0xBA9 - SYS_ERFD128 = 0xBA7 - SYS_ERFD32 = 0xBA5 - SYS_ERFD64 = 0xBA6 - SYS_EXP2D128 = 0xBB0 - SYS_EXP2D32 = 0xBAE - SYS_EXP2D64 = 0xBAF - SYS_EXPD128 = 0xBAD - SYS_EXPD32 = 0xBAB - SYS_EXPD64 = 0xBAC - SYS_EXPM1D128 = 0xBB3 - SYS_EXPM1D32 = 0xBB1 - SYS_EXPM1D64 = 0xBB2 - SYS_FABSD128 = 0xBB6 - SYS_FABSD32 = 0xBB4 - SYS_FABSD64 = 0xBB5 - SYS_FDELREC_UNLOCKED = 0xCA2 - SYS_FDIMD128 = 0xBB9 - SYS_FDIMD32 = 0xBB7 - SYS_FDIMD64 = 0xBB8 - SYS_FDOPEN_UNLOCKED = 0xCFC - SYS_FECLEAREXCEPT = 0xAEA - SYS_FEGETENV = 0xAEB - SYS_FEGETEXCEPTFLAG = 0xAEC - SYS_FEGETROUND = 0xAED - SYS_FEHOLDEXCEPT = 0xAEE - SYS_FEOF_UNLOCKED = 0xCA3 - SYS_FERAISEEXCEPT = 0xAEF - SYS_FERROR_UNLOCKED = 0xCA4 - SYS_FESETENV = 0xAF0 - SYS_FESETEXCEPTFLAG = 0xAF1 - SYS_FESETROUND = 0xAF2 - SYS_FETCHEP = 0x0BF - SYS_FETESTEXCEPT = 0xAF3 - SYS_FEUPDATEENV = 0xAF4 - SYS_FE_DEC_GETROUND = 0xBBA - SYS_FE_DEC_SETROUND = 0xBBB - SYS_FFLUSH_UNLOCKED = 0xCA5 - SYS_FGETC_UNLOCKED = 0xC80 - SYS_FGETPOS64 = 0xCEE - SYS_FGETPOS64_UNLOCKED = 0xCF4 - SYS_FGETPOS_UNLOCKED = 0xCA6 - SYS_FGETS_UNLOCKED = 0xC7C - SYS_FGETWC_UNLOCKED = 0xCA7 - SYS_FGETWS_UNLOCKED = 0xCA8 - SYS_FILENO_UNLOCKED = 0xCA9 - SYS_FLDATA = 0x0C1 - SYS_FLDATA_UNLOCKED = 0xCAA - SYS_FLOCATE_UNLOCKED = 0xCAB - SYS_FLOORD128 = 0xBBE - SYS_FLOORD32 = 0xBBC - SYS_FLOORD64 = 0xBBD - SYS_FMA = 0xA63 - SYS_FMAD128 = 0xBC1 - SYS_FMAD32 = 0xBBF - SYS_FMAD64 = 0xBC0 - SYS_FMAF = 0xA66 - SYS_FMAL = 0xA69 - SYS_FMAX = 0xA6C - SYS_FMAXD128 = 0xBC4 - SYS_FMAXD32 = 0xBC2 - SYS_FMAXD64 = 0xBC3 - SYS_FMAXF = 0xA6F - SYS_FMAXL = 0xA72 - SYS_FMIN = 0xA75 - SYS_FMIND128 = 0xBC7 - SYS_FMIND32 = 0xBC5 - SYS_FMIND64 = 0xBC6 - SYS_FMINF = 0xA78 - SYS_FMINL = 0xA7B - SYS_FMODD128 = 0xBCA - SYS_FMODD32 = 0xBC8 - SYS_FMODD64 = 0xBC9 - SYS_FOPEN64 = 0xD49 - SYS_FOPEN64_UNLOCKED = 0xD4A - SYS_FOPEN_UNLOCKED = 0xCFA - SYS_FPRINTF_UNLOCKED = 0xCAC - SYS_FPUTC_UNLOCKED = 0xC81 - SYS_FPUTS_UNLOCKED = 0xC7E - SYS_FPUTWC_UNLOCKED = 0xCAD - SYS_FPUTWS_UNLOCKED = 0xCAE - SYS_FREAD_NOUPDATE = 0xCEC - SYS_FREAD_NOUPDATE_UNLOCKED = 0xCED - SYS_FREAD_UNLOCKED = 0xC7B - SYS_FREEIFADDRS = 0xCE6 - SYS_FREOPEN64 = 0xD4B - SYS_FREOPEN64_UNLOCKED = 0xD4C - SYS_FREOPEN_UNLOCKED = 0xCFB - SYS_FREXPD128 = 0xBCE - SYS_FREXPD32 = 0xBCC - SYS_FREXPD64 = 0xBCD - SYS_FSCANF_UNLOCKED = 0xCAF - SYS_FSEEK64 = 0xCEF - SYS_FSEEK64_UNLOCKED = 0xCF5 - SYS_FSEEKO64 = 0xCF0 - SYS_FSEEKO64_UNLOCKED = 0xCF6 - SYS_FSEEKO_UNLOCKED = 0xCB1 - SYS_FSEEK_UNLOCKED = 0xCB0 - SYS_FSETPOS64 = 0xCF1 - SYS_FSETPOS64_UNLOCKED = 0xCF7 - SYS_FSETPOS_UNLOCKED = 0xCB3 - SYS_FTELL64 = 0xCF2 - SYS_FTELL64_UNLOCKED = 0xCF8 - SYS_FTELLO64 = 0xCF3 - SYS_FTELLO64_UNLOCKED = 0xCF9 - SYS_FTELLO_UNLOCKED = 0xCB5 - SYS_FTELL_UNLOCKED = 0xCB4 - SYS_FUPDATE = 0x0B5 - SYS_FUPDATE_UNLOCKED = 0xCB7 - SYS_FWIDE_UNLOCKED = 0xCB8 - SYS_FWPRINTF_UNLOCKED = 0xCB9 - SYS_FWRITE_UNLOCKED = 0xC7A - SYS_FWSCANF_UNLOCKED = 0xCBA - SYS_GETDATE64 = 0xD4F - SYS_GETIFADDRS = 0xCE7 - SYS_GETIPV4SOURCEFILTER = 0xC77 - SYS_GETSOURCEFILTER = 0xC79 - SYS_GETSYNTX = 0x0FD - SYS_GETS_UNLOCKED = 0xC7D - SYS_GETTIMEOFDAY64 = 0xD50 - SYS_GETWCHAR_UNLOCKED = 0xCBC - SYS_GETWC_UNLOCKED = 0xCBB - SYS_GMTIME = 0x0B0 - SYS_GMTIME64 = 0xCDC - SYS_GMTIME64_R = 0xCDD - SYS_HYPOTD128 = 0xBD1 - SYS_HYPOTD32 = 0xBCF - SYS_HYPOTD64 = 0xBD0 - SYS_ILOGBD128 = 0xBD4 - SYS_ILOGBD32 = 0xBD2 - SYS_ILOGBD64 = 0xBD3 - SYS_ILOGBF = 0xA7E - SYS_ILOGBL = 0xA81 - SYS_INET6_IS_SRCADDR = 0xD5A - SYS_ISBLANK = 0x0FE - SYS_ISWALNUM = 0x0FF - SYS_LDEXPD128 = 0xBD7 - SYS_LDEXPD32 = 0xBD5 - SYS_LDEXPD64 = 0xBD6 - SYS_LGAMMAD128 = 0xBDA - SYS_LGAMMAD32 = 0xBD8 - SYS_LGAMMAD64 = 0xBD9 - SYS_LIO_LISTIO = 0xC6A - SYS_LLRINT = 0xA84 - SYS_LLRINTD128 = 0xBDD - SYS_LLRINTD32 = 0xBDB - SYS_LLRINTD64 = 0xBDC - SYS_LLRINTF = 0xA87 - SYS_LLRINTL = 0xA8A - SYS_LLROUND = 0xA8D - SYS_LLROUNDD128 = 0xBE0 - SYS_LLROUNDD32 = 0xBDE - SYS_LLROUNDD64 = 0xBDF - SYS_LLROUNDF = 0xA90 - SYS_LLROUNDL = 0xA93 - SYS_LOCALTIM = 0x0B1 - SYS_LOCALTIME = 0x0B1 - SYS_LOCALTIME64 = 0xCDE - SYS_LOCALTIME64_R = 0xCDF - SYS_LOG10D128 = 0xBE6 - SYS_LOG10D32 = 0xBE4 - SYS_LOG10D64 = 0xBE5 - SYS_LOG1PD128 = 0xBE9 - SYS_LOG1PD32 = 0xBE7 - SYS_LOG1PD64 = 0xBE8 - SYS_LOG2D128 = 0xBEC - SYS_LOG2D32 = 0xBEA - SYS_LOG2D64 = 0xBEB - SYS_LOGBD128 = 0xBEF - SYS_LOGBD32 = 0xBED - SYS_LOGBD64 = 0xBEE - SYS_LOGBF = 0xA96 - SYS_LOGBL = 0xA99 - SYS_LOGD128 = 0xBE3 - SYS_LOGD32 = 0xBE1 - SYS_LOGD64 = 0xBE2 - SYS_LRINT = 0xA9C - SYS_LRINTD128 = 0xBF2 - SYS_LRINTD32 = 0xBF0 - SYS_LRINTD64 = 0xBF1 - SYS_LRINTF = 0xA9F - SYS_LRINTL = 0xAA2 - SYS_LROUNDD128 = 0xBF5 - SYS_LROUNDD32 = 0xBF3 - SYS_LROUNDD64 = 0xBF4 - SYS_LROUNDL = 0xAA5 - SYS_MBLEN = 0x0AF - SYS_MBRTOC16 = 0xD42 - SYS_MBRTOC32 = 0xD43 - SYS_MEMSET = 0x0A3 - SYS_MKTIME = 0x0AC - SYS_MKTIME64 = 0xCE0 - SYS_MODFD128 = 0xBF8 - SYS_MODFD32 = 0xBF6 - SYS_MODFD64 = 0xBF7 - SYS_NAN = 0xAA8 - SYS_NAND128 = 0xBFB - SYS_NAND32 = 0xBF9 - SYS_NAND64 = 0xBFA - SYS_NANF = 0xAAA - SYS_NANL = 0xAAC - SYS_NEARBYINT = 0xAAE - SYS_NEARBYINTD128 = 0xBFE - SYS_NEARBYINTD32 = 0xBFC - SYS_NEARBYINTD64 = 0xBFD - SYS_NEARBYINTF = 0xAB1 - SYS_NEARBYINTL = 0xAB4 - SYS_NEXTAFTERD128 = 0xC01 - SYS_NEXTAFTERD32 = 0xBFF - SYS_NEXTAFTERD64 = 0xC00 - SYS_NEXTAFTERF = 0xAB7 - SYS_NEXTAFTERL = 0xABA - SYS_NEXTTOWARD = 0xABD - SYS_NEXTTOWARDD128 = 0xC04 - SYS_NEXTTOWARDD32 = 0xC02 - SYS_NEXTTOWARDD64 = 0xC03 - SYS_NEXTTOWARDF = 0xAC0 - SYS_NEXTTOWARDL = 0xAC3 - SYS_NL_LANGINFO = 0x0FC - SYS_PERROR_UNLOCKED = 0xCBD - SYS_POSIX_FALLOCATE = 0xCE8 - SYS_POSIX_MEMALIGN = 0xCE9 - SYS_POSIX_OPENPT = 0xC66 - SYS_POWD128 = 0xC07 - SYS_POWD32 = 0xC05 - SYS_POWD64 = 0xC06 - SYS_PRINTF_UNLOCKED = 0xCBE - SYS_PSELECT = 0xC67 - SYS_PTHREAD_ATTR_GETSTACK = 0xB3E - SYS_PTHREAD_ATTR_SETSTACK = 0xB3F - SYS_PTHREAD_SECURITY_APPLID_NP = 0xCE4 - SYS_PUTS_UNLOCKED = 0xC7F - SYS_PUTWCHAR_UNLOCKED = 0xCC0 - SYS_PUTWC_UNLOCKED = 0xCBF - SYS_QUANTEXPD128 = 0xD46 - SYS_QUANTEXPD32 = 0xD44 - SYS_QUANTEXPD64 = 0xD45 - SYS_QUANTIZED128 = 0xC0A - SYS_QUANTIZED32 = 0xC08 - SYS_QUANTIZED64 = 0xC09 - SYS_REMAINDERD128 = 0xC0D - SYS_REMAINDERD32 = 0xC0B - SYS_REMAINDERD64 = 0xC0C - SYS_RESIZE_ALLOC = 0xCEB - SYS_REWIND_UNLOCKED = 0xCC1 - SYS_RINTD128 = 0xC13 - SYS_RINTD32 = 0xC11 - SYS_RINTD64 = 0xC12 - SYS_RINTF = 0xACB - SYS_RINTL = 0xACD - SYS_ROUND = 0xACF - SYS_ROUNDD128 = 0xC16 - SYS_ROUNDD32 = 0xC14 - SYS_ROUNDD64 = 0xC15 - SYS_ROUNDF = 0xAD2 - SYS_ROUNDL = 0xAD5 - SYS_SAMEQUANTUMD128 = 0xC19 - SYS_SAMEQUANTUMD32 = 0xC17 - SYS_SAMEQUANTUMD64 = 0xC18 - SYS_SCALBLN = 0xAD8 - SYS_SCALBLND128 = 0xC1C - SYS_SCALBLND32 = 0xC1A - SYS_SCALBLND64 = 0xC1B - SYS_SCALBLNF = 0xADB - SYS_SCALBLNL = 0xADE - SYS_SCALBND128 = 0xC1F - SYS_SCALBND32 = 0xC1D - SYS_SCALBND64 = 0xC1E - SYS_SCALBNF = 0xAE3 - SYS_SCALBNL = 0xAE6 - SYS_SCANF_UNLOCKED = 0xCC2 - SYS_SCHED_YIELD = 0xB32 - SYS_SETENV = 0x0C8 - SYS_SETIPV4SOURCEFILTER = 0xC76 - SYS_SETSOURCEFILTER = 0xC78 - SYS_SHM_OPEN = 0xC8C - SYS_SHM_UNLINK = 0xC8D - SYS_SIND128 = 0xC22 - SYS_SIND32 = 0xC20 - SYS_SIND64 = 0xC21 - SYS_SINHD128 = 0xC25 - SYS_SINHD32 = 0xC23 - SYS_SINHD64 = 0xC24 - SYS_SIZEOF_ALLOC = 0xCEA - SYS_SOCKATMARK = 0xC68 - SYS_SQRTD128 = 0xC28 - SYS_SQRTD32 = 0xC26 - SYS_SQRTD64 = 0xC27 - SYS_STRCHR = 0x0A0 - SYS_STRCSPN = 0x0A1 - SYS_STRERROR = 0x0A8 - SYS_STRERROR_R = 0xB33 - SYS_STRFTIME = 0x0B2 - SYS_STRLEN = 0x0A9 - SYS_STRPBRK = 0x0A2 - SYS_STRSPN = 0x0A4 - SYS_STRSTR = 0x0A5 - SYS_STRTOD128 = 0xC2B - SYS_STRTOD32 = 0xC29 - SYS_STRTOD64 = 0xC2A - SYS_STRTOK = 0x0A6 - SYS_TAND128 = 0xC2E - SYS_TAND32 = 0xC2C - SYS_TAND64 = 0xC2D - SYS_TANHD128 = 0xC31 - SYS_TANHD32 = 0xC2F - SYS_TANHD64 = 0xC30 - SYS_TGAMMAD128 = 0xC34 - SYS_TGAMMAD32 = 0xC32 - SYS_TGAMMAD64 = 0xC33 - SYS_TIME = 0x0AD - SYS_TIME64 = 0xCE1 - SYS_TMPFILE64 = 0xD4D - SYS_TMPFILE64_UNLOCKED = 0xD4E - SYS_TMPFILE_UNLOCKED = 0xCFD - SYS_TRUNCD128 = 0xC40 - SYS_TRUNCD32 = 0xC3E - SYS_TRUNCD64 = 0xC3F - SYS_UNGETC_UNLOCKED = 0xCC3 - SYS_UNGETWC_UNLOCKED = 0xCC4 - SYS_UNSETENV = 0xB34 - SYS_VFPRINTF_UNLOCKED = 0xCC5 - SYS_VFSCANF_UNLOCKED = 0xCC7 - SYS_VFWPRINTF_UNLOCKED = 0xCC9 - SYS_VFWSCANF_UNLOCKED = 0xCCB - SYS_VPRINTF_UNLOCKED = 0xCCD - SYS_VSCANF_UNLOCKED = 0xCCF - SYS_VWPRINTF_UNLOCKED = 0xCD1 - SYS_VWSCANF_UNLOCKED = 0xCD3 - SYS_WCSTOD128 = 0xC43 - SYS_WCSTOD32 = 0xC41 - SYS_WCSTOD64 = 0xC42 - SYS_WPRINTF_UNLOCKED = 0xCD5 - SYS_WSCANF_UNLOCKED = 0xCD6 - SYS__FLUSHLBF = 0xD68 - SYS__FLUSHLBF_UNLOCKED = 0xD6F - SYS___ACOSHF_H = 0xA54 - SYS___ACOSHL_H = 0xA55 - SYS___ASINHF_H = 0xA56 - SYS___ASINHL_H = 0xA57 - SYS___ATANPID128 = 0xC6D - SYS___ATANPID32 = 0xC6B - SYS___ATANPID64 = 0xC6C - SYS___CBRTF_H = 0xA58 - SYS___CBRTL_H = 0xA59 - SYS___CDUMP = 0x0C4 - SYS___CLASS = 0xAFA - SYS___CLASS2 = 0xB99 - SYS___CLASS2D128 = 0xC99 - SYS___CLASS2D32 = 0xC97 - SYS___CLASS2D64 = 0xC98 - SYS___CLASS2F = 0xC91 - SYS___CLASS2F_B = 0xC93 - SYS___CLASS2F_H = 0xC94 - SYS___CLASS2L = 0xC92 - SYS___CLASS2L_B = 0xC95 - SYS___CLASS2L_H = 0xC96 - SYS___CLASS2_B = 0xB9A - SYS___CLASS2_H = 0xB9B - SYS___CLASS_B = 0xAFB - SYS___CLASS_H = 0xAFC - SYS___CLOGL_B = 0xA01 - SYS___CLOGL_H = 0xA02 - SYS___CLRENV = 0x0C9 - SYS___CLRMF = 0x0BD - SYS___CODEPAGE_INFO = 0xC64 - SYS___CONJF_B = 0xA07 - SYS___CONJF_H = 0xA08 - SYS___CONJL_B = 0xA0A - SYS___CONJL_H = 0xA0B - SYS___CONJ_B = 0xA04 - SYS___CONJ_H = 0xA05 - SYS___COPYSIGN_B = 0xA5A - SYS___COPYSIGN_H = 0xAF5 - SYS___COSPID128 = 0xC70 - SYS___COSPID32 = 0xC6E - SYS___COSPID64 = 0xC6F - SYS___CPOWF_B = 0xA10 - SYS___CPOWF_H = 0xA11 - SYS___CPOWL_B = 0xA13 - SYS___CPOWL_H = 0xA14 - SYS___CPOW_B = 0xA0D - SYS___CPOW_H = 0xA0E - SYS___CPROJF_B = 0xA19 - SYS___CPROJF_H = 0xA1A - SYS___CPROJL_B = 0xA1C - SYS___CPROJL_H = 0xA1D - SYS___CPROJ_B = 0xA16 - SYS___CPROJ_H = 0xA17 - SYS___CREALF_B = 0xA22 - SYS___CREALF_H = 0xA23 - SYS___CREALL_B = 0xA25 - SYS___CREALL_H = 0xA26 - SYS___CREAL_B = 0xA1F - SYS___CREAL_H = 0xA20 - SYS___CSINF_B = 0xA2B - SYS___CSINF_H = 0xA2C - SYS___CSINHF_B = 0xA34 - SYS___CSINHF_H = 0xA35 - SYS___CSINHL_B = 0xA37 - SYS___CSINHL_H = 0xA38 - SYS___CSINH_B = 0xA31 - SYS___CSINH_H = 0xA32 - SYS___CSINL_B = 0xA2E - SYS___CSINL_H = 0xA2F - SYS___CSIN_B = 0xA28 - SYS___CSIN_H = 0xA29 - SYS___CSNAP = 0x0C5 - SYS___CSQRTF_B = 0xA3D - SYS___CSQRTF_H = 0xA3E - SYS___CSQRTL_B = 0xA40 - SYS___CSQRTL_H = 0xA41 - SYS___CSQRT_B = 0xA3A - SYS___CSQRT_H = 0xA3B - SYS___CTANF_B = 0xA46 - SYS___CTANF_H = 0xA47 - SYS___CTANHF_B = 0xA4F - SYS___CTANHF_H = 0xA50 - SYS___CTANHL_B = 0xA52 - SYS___CTANHL_H = 0xA53 - SYS___CTANH_B = 0xA4C - SYS___CTANH_H = 0xA4D - SYS___CTANL_B = 0xA49 - SYS___CTANL_H = 0xA4A - SYS___CTAN_B = 0xA43 - SYS___CTAN_H = 0xA44 - SYS___CTEST = 0x0C7 - SYS___CTRACE = 0x0C6 - SYS___D1TOP = 0xC9B - SYS___D2TOP = 0xC9C - SYS___D4TOP = 0xC9D - SYS___DYNALL = 0x0C3 - SYS___DYNFRE = 0x0C2 - SYS___EXP2F_H = 0xA5E - SYS___EXP2L_H = 0xA5F - SYS___EXP2_H = 0xA5D - SYS___EXPM1F_H = 0xA5B - SYS___EXPM1L_H = 0xA5C - SYS___FBUFSIZE = 0xD60 - SYS___FLBF = 0xD62 - SYS___FLDATA = 0x0C1 - SYS___FMAF_B = 0xA67 - SYS___FMAF_H = 0xA68 - SYS___FMAL_B = 0xA6A - SYS___FMAL_H = 0xA6B - SYS___FMAXF_B = 0xA70 - SYS___FMAXF_H = 0xA71 - SYS___FMAXL_B = 0xA73 - SYS___FMAXL_H = 0xA74 - SYS___FMAX_B = 0xA6D - SYS___FMAX_H = 0xA6E - SYS___FMA_B = 0xA64 - SYS___FMA_H = 0xA65 - SYS___FMINF_B = 0xA79 - SYS___FMINF_H = 0xA7A - SYS___FMINL_B = 0xA7C - SYS___FMINL_H = 0xA7D - SYS___FMIN_B = 0xA76 - SYS___FMIN_H = 0xA77 - SYS___FPENDING = 0xD61 - SYS___FPENDING_UNLOCKED = 0xD6C - SYS___FPURGE = 0xD69 - SYS___FPURGE_UNLOCKED = 0xD70 - SYS___FP_CAST_D = 0xBCB - SYS___FREADABLE = 0xD63 - SYS___FREADAHEAD = 0xD6A - SYS___FREADAHEAD_UNLOCKED = 0xD71 - SYS___FREADING = 0xD65 - SYS___FREADING_UNLOCKED = 0xD6D - SYS___FSEEK2 = 0xB3C - SYS___FSETERR = 0xD6B - SYS___FSETLOCKING = 0xD67 - SYS___FTCHEP = 0x0BF - SYS___FTELL2 = 0xB3B - SYS___FUPDT = 0x0B5 - SYS___FWRITABLE = 0xD64 - SYS___FWRITING = 0xD66 - SYS___FWRITING_UNLOCKED = 0xD6E - SYS___GETCB = 0x0B4 - SYS___GETGRGID1 = 0xD5B - SYS___GETGRNAM1 = 0xD5C - SYS___GETTHENT = 0xCE5 - SYS___GETTOD = 0xD3E - SYS___HYPOTF_H = 0xAF6 - SYS___HYPOTL_H = 0xAF7 - SYS___ILOGBF_B = 0xA7F - SYS___ILOGBF_H = 0xA80 - SYS___ILOGBL_B = 0xA82 - SYS___ILOGBL_H = 0xA83 - SYS___ISBLANK_A = 0xB2E - SYS___ISBLNK = 0x0FE - SYS___ISWBLANK_A = 0xB2F - SYS___LE_CEEGTJS = 0xD72 - SYS___LE_TRACEBACK = 0xB7A - SYS___LGAMMAL_H = 0xA62 - SYS___LGAMMA_B_C99 = 0xB39 - SYS___LGAMMA_H_C99 = 0xB38 - SYS___LGAMMA_R_C99 = 0xB3A - SYS___LLRINTF_B = 0xA88 - SYS___LLRINTF_H = 0xA89 - SYS___LLRINTL_B = 0xA8B - SYS___LLRINTL_H = 0xA8C - SYS___LLRINT_B = 0xA85 - SYS___LLRINT_H = 0xA86 - SYS___LLROUNDF_B = 0xA91 - SYS___LLROUNDF_H = 0xA92 - SYS___LLROUNDL_B = 0xA94 - SYS___LLROUNDL_H = 0xA95 - SYS___LLROUND_B = 0xA8E - SYS___LLROUND_H = 0xA8F - SYS___LOCALE_CTL = 0xD47 - SYS___LOG1PF_H = 0xA60 - SYS___LOG1PL_H = 0xA61 - SYS___LOGBF_B = 0xA97 - SYS___LOGBF_H = 0xA98 - SYS___LOGBL_B = 0xA9A - SYS___LOGBL_H = 0xA9B - SYS___LOGIN_APPLID = 0xCE2 - SYS___LRINTF_B = 0xAA0 - SYS___LRINTF_H = 0xAA1 - SYS___LRINTL_B = 0xAA3 - SYS___LRINTL_H = 0xAA4 - SYS___LRINT_B = 0xA9D - SYS___LRINT_H = 0xA9E - SYS___LROUNDF_FIXUP = 0xB31 - SYS___LROUNDL_B = 0xAA6 - SYS___LROUNDL_H = 0xAA7 - SYS___LROUND_FIXUP = 0xB30 - SYS___MOSERVICES = 0xD3D - SYS___MUST_STAY_CLEAN = 0xB7C - SYS___NANF_B = 0xAAB - SYS___NANL_B = 0xAAD - SYS___NAN_B = 0xAA9 - SYS___NEARBYINTF_B = 0xAB2 - SYS___NEARBYINTF_H = 0xAB3 - SYS___NEARBYINTL_B = 0xAB5 - SYS___NEARBYINTL_H = 0xAB6 - SYS___NEARBYINT_B = 0xAAF - SYS___NEARBYINT_H = 0xAB0 - SYS___NEXTAFTERF_B = 0xAB8 - SYS___NEXTAFTERF_H = 0xAB9 - SYS___NEXTAFTERL_B = 0xABB - SYS___NEXTAFTERL_H = 0xABC - SYS___NEXTTOWARDF_B = 0xAC1 - SYS___NEXTTOWARDF_H = 0xAC2 - SYS___NEXTTOWARDL_B = 0xAC4 - SYS___NEXTTOWARDL_H = 0xAC5 - SYS___NEXTTOWARD_B = 0xABE - SYS___NEXTTOWARD_H = 0xABF - SYS___O_ENV = 0xB7D - SYS___PASSWD_APPLID = 0xCE3 - SYS___PTOD1 = 0xC9E - SYS___PTOD2 = 0xC9F - SYS___PTOD4 = 0xCA0 - SYS___REGCOMP_STD = 0x0EA - SYS___REMAINDERF_H = 0xAC6 - SYS___REMAINDERL_H = 0xAC7 - SYS___REMQUOD128 = 0xC10 - SYS___REMQUOD32 = 0xC0E - SYS___REMQUOD64 = 0xC0F - SYS___REMQUOF_H = 0xAC9 - SYS___REMQUOL_H = 0xACA - SYS___REMQUO_H = 0xAC8 - SYS___RINTF_B = 0xACC - SYS___RINTL_B = 0xACE - SYS___ROUNDF_B = 0xAD3 - SYS___ROUNDF_H = 0xAD4 - SYS___ROUNDL_B = 0xAD6 - SYS___ROUNDL_H = 0xAD7 - SYS___ROUND_B = 0xAD0 - SYS___ROUND_H = 0xAD1 - SYS___SCALBLNF_B = 0xADC - SYS___SCALBLNF_H = 0xADD - SYS___SCALBLNL_B = 0xADF - SYS___SCALBLNL_H = 0xAE0 - SYS___SCALBLN_B = 0xAD9 - SYS___SCALBLN_H = 0xADA - SYS___SCALBNF_B = 0xAE4 - SYS___SCALBNF_H = 0xAE5 - SYS___SCALBNL_B = 0xAE7 - SYS___SCALBNL_H = 0xAE8 - SYS___SCALBN_B = 0xAE1 - SYS___SCALBN_H = 0xAE2 - SYS___SETENV = 0x0C8 - SYS___SINPID128 = 0xC73 - SYS___SINPID32 = 0xC71 - SYS___SINPID64 = 0xC72 - SYS___SMF_RECORD2 = 0xD48 - SYS___STATIC_REINIT = 0xB3D - SYS___TGAMMAF_H_C99 = 0xB79 - SYS___TGAMMAL_H = 0xAE9 - SYS___TGAMMA_H_C99 = 0xB78 - SYS___TOCSNAME2 = 0xC9A - SYS_CEIL = 0x01F - SYS_CHAUDIT = 0x1E0 - SYS_EXP = 0x01A - SYS_FCHAUDIT = 0x1E1 - SYS_FREXP = 0x01D - SYS_GETGROUPSBYNAME = 0x1E2 - SYS_GETPWUID = 0x1A0 - SYS_GETUID = 0x1A1 - SYS_ISATTY = 0x1A3 - SYS_KILL = 0x1A4 - SYS_LDEXP = 0x01E - SYS_LINK = 0x1A5 - SYS_LOG10 = 0x01C - SYS_LSEEK = 0x1A6 - SYS_LSTAT = 0x1A7 - SYS_MKDIR = 0x1A8 - SYS_MKFIFO = 0x1A9 - SYS_MKNOD = 0x1AA - SYS_MODF = 0x01B - SYS_MOUNT = 0x1AB - SYS_OPEN = 0x1AC - SYS_OPENDIR = 0x1AD - SYS_PATHCONF = 0x1AE - SYS_PAUSE = 0x1AF - SYS_PIPE = 0x1B0 - SYS_PTHREAD_ATTR_DESTROY = 0x1E7 - SYS_PTHREAD_ATTR_GETDETACHSTATE = 0x1EB - SYS_PTHREAD_ATTR_GETSTACKSIZE = 0x1E9 - SYS_PTHREAD_ATTR_GETWEIGHT_NP = 0x1ED - SYS_PTHREAD_ATTR_INIT = 0x1E6 - SYS_PTHREAD_ATTR_SETDETACHSTATE = 0x1EA - SYS_PTHREAD_ATTR_SETSTACKSIZE = 0x1E8 - SYS_PTHREAD_ATTR_SETWEIGHT_NP = 0x1EC - SYS_PTHREAD_CANCEL = 0x1EE - SYS_PTHREAD_CLEANUP_POP = 0x1F0 - SYS_PTHREAD_CLEANUP_PUSH = 0x1EF - SYS_PTHREAD_CONDATTR_DESTROY = 0x1F2 - SYS_PTHREAD_CONDATTR_INIT = 0x1F1 - SYS_PTHREAD_COND_BROADCAST = 0x1F6 - SYS_PTHREAD_COND_DESTROY = 0x1F4 - SYS_PTHREAD_COND_INIT = 0x1F3 - SYS_PTHREAD_COND_SIGNAL = 0x1F5 - SYS_PTHREAD_COND_TIMEDWAIT = 0x1F8 - SYS_PTHREAD_COND_WAIT = 0x1F7 - SYS_PTHREAD_CREATE = 0x1F9 - SYS_PTHREAD_DETACH = 0x1FA - SYS_PTHREAD_EQUAL = 0x1FB - SYS_PTHREAD_EXIT = 0x1E4 - SYS_PTHREAD_GETSPECIFIC = 0x1FC - SYS_PTHREAD_JOIN = 0x1FD - SYS_PTHREAD_KEY_CREATE = 0x1FE - SYS_PTHREAD_KILL = 0x1E5 - SYS_PTHREAD_MUTEXATTR_INIT = 0x1FF - SYS_READ = 0x1B2 - SYS_READDIR = 0x1B3 - SYS_READLINK = 0x1B4 - SYS_REWINDDIR = 0x1B5 - SYS_RMDIR = 0x1B6 - SYS_SETEGID = 0x1B7 - SYS_SETEUID = 0x1B8 - SYS_SETGID = 0x1B9 - SYS_SETPGID = 0x1BA - SYS_SETSID = 0x1BB - SYS_SETUID = 0x1BC - SYS_SIGACTION = 0x1BD - SYS_SIGADDSET = 0x1BE - SYS_SIGDELSET = 0x1BF - SYS_SIGEMPTYSET = 0x1C0 - SYS_SIGFILLSET = 0x1C1 - SYS_SIGISMEMBER = 0x1C2 - SYS_SIGLONGJMP = 0x1C3 - SYS_SIGPENDING = 0x1C4 - SYS_SIGPROCMASK = 0x1C5 - SYS_SIGSETJMP = 0x1C6 - SYS_SIGSUSPEND = 0x1C7 - SYS_SIGWAIT = 0x1E3 - SYS_SLEEP = 0x1C8 - SYS_STAT = 0x1C9 - SYS_SYMLINK = 0x1CB - SYS_SYSCONF = 0x1CC - SYS_TCDRAIN = 0x1CD - SYS_TCFLOW = 0x1CE - SYS_TCFLUSH = 0x1CF - SYS_TCGETATTR = 0x1D0 - SYS_TCGETPGRP = 0x1D1 - SYS_TCSENDBREAK = 0x1D2 - SYS_TCSETATTR = 0x1D3 - SYS_TCSETPGRP = 0x1D4 - SYS_TIMES = 0x1D5 - SYS_TTYNAME = 0x1D6 - SYS_TZSET = 0x1D7 - SYS_UMASK = 0x1D8 - SYS_UMOUNT = 0x1D9 - SYS_UNAME = 0x1DA - SYS_UNLINK = 0x1DB - SYS_UTIME = 0x1DC - SYS_WAIT = 0x1DD - SYS_WAITPID = 0x1DE - SYS_WRITE = 0x1DF - SYS_W_GETPSENT = 0x1B1 - SYS_W_IOCTL = 0x1A2 - SYS_W_STATFS = 0x1CA - SYS_A64L = 0x2EF - SYS_BCMP = 0x2B9 - SYS_BCOPY = 0x2BA - SYS_BZERO = 0x2BB - SYS_CATCLOSE = 0x2B6 - SYS_CATGETS = 0x2B7 - SYS_CATOPEN = 0x2B8 - SYS_CRYPT = 0x2AC - SYS_DBM_CLEARERR = 0x2F7 - SYS_DBM_CLOSE = 0x2F8 - SYS_DBM_DELETE = 0x2F9 - SYS_DBM_ERROR = 0x2FA - SYS_DBM_FETCH = 0x2FB - SYS_DBM_FIRSTKEY = 0x2FC - SYS_DBM_NEXTKEY = 0x2FD - SYS_DBM_OPEN = 0x2FE - SYS_DBM_STORE = 0x2FF - SYS_DRAND48 = 0x2B2 - SYS_ENCRYPT = 0x2AD - SYS_ENDUTXENT = 0x2E1 - SYS_ERAND48 = 0x2B3 - SYS_ERF = 0x02C - SYS_ERFC = 0x02D - SYS_FCHDIR = 0x2D9 - SYS_FFS = 0x2BC - SYS_FMTMSG = 0x2E5 - SYS_FSTATVFS = 0x2B4 - SYS_FTIME = 0x2F5 - SYS_GAMMA = 0x02E - SYS_GETDATE = 0x2A6 - SYS_GETPAGESIZE = 0x2D8 - SYS_GETTIMEOFDAY = 0x2F6 - SYS_GETUTXENT = 0x2E0 - SYS_GETUTXID = 0x2E2 - SYS_GETUTXLINE = 0x2E3 - SYS_HCREATE = 0x2C6 - SYS_HDESTROY = 0x2C7 - SYS_HSEARCH = 0x2C8 - SYS_HYPOT = 0x02B - SYS_INDEX = 0x2BD - SYS_INITSTATE = 0x2C2 - SYS_INSQUE = 0x2CF - SYS_ISASCII = 0x2ED - SYS_JRAND48 = 0x2E6 - SYS_L64A = 0x2F0 - SYS_LCONG48 = 0x2EA - SYS_LFIND = 0x2C9 - SYS_LRAND48 = 0x2E7 - SYS_LSEARCH = 0x2CA - SYS_MEMCCPY = 0x2D4 - SYS_MRAND48 = 0x2E8 - SYS_NRAND48 = 0x2E9 - SYS_PCLOSE = 0x2D2 - SYS_POPEN = 0x2D1 - SYS_PUTUTXLINE = 0x2E4 - SYS_RANDOM = 0x2C4 - SYS_REMQUE = 0x2D0 - SYS_RINDEX = 0x2BE - SYS_SEED48 = 0x2EC - SYS_SETKEY = 0x2AE - SYS_SETSTATE = 0x2C3 - SYS_SETUTXENT = 0x2DF - SYS_SRAND48 = 0x2EB - SYS_SRANDOM = 0x2C5 - SYS_STATVFS = 0x2B5 - SYS_STRCASECMP = 0x2BF - SYS_STRDUP = 0x2C0 - SYS_STRNCASECMP = 0x2C1 - SYS_SWAB = 0x2D3 - SYS_TDELETE = 0x2CB - SYS_TFIND = 0x2CC - SYS_TOASCII = 0x2EE - SYS_TSEARCH = 0x2CD - SYS_TWALK = 0x2CE - SYS_UALARM = 0x2F1 - SYS_USLEEP = 0x2F2 - SYS_WAIT3 = 0x2A7 - SYS_WAITID = 0x2A8 - SYS_Y1 = 0x02A - SYS___ATOE = 0x2DB - SYS___ATOE_L = 0x2DC - SYS___CATTRM = 0x2A9 - SYS___CNVBLK = 0x2AF - SYS___CRYTRM = 0x2B0 - SYS___DLGHT = 0x2A1 - SYS___ECRTRM = 0x2B1 - SYS___ETOA = 0x2DD - SYS___ETOA_L = 0x2DE - SYS___GDTRM = 0x2AA - SYS___OCLCK = 0x2DA - SYS___OPARGF = 0x2A2 - SYS___OPERRF = 0x2A5 - SYS___OPINDF = 0x2A4 - SYS___OPOPTF = 0x2A3 - SYS___RNDTRM = 0x2AB - SYS___SRCTRM = 0x2F4 - SYS___TZONE = 0x2A0 - SYS___UTXTRM = 0x2F3 - SYS_ASIN = 0x03E - SYS_ISXDIGIT = 0x03B - SYS_SETLOCAL = 0x03A - SYS_SETLOCALE = 0x03A - SYS_SIN = 0x03F - SYS_TOLOWER = 0x03C - SYS_TOUPPER = 0x03D - SYS_ACCEPT_AND_RECV = 0x4F7 - SYS_ATOL = 0x04E - SYS_CHECKSCH = 0x4BC - SYS_CHECKSCHENV = 0x4BC - SYS_CLEARERR = 0x04C - SYS_CONNECTS = 0x4B5 - SYS_CONNECTSERVER = 0x4B5 - SYS_CONNECTW = 0x4B4 - SYS_CONNECTWORKMGR = 0x4B4 - SYS_CONTINUE = 0x4B3 - SYS_CONTINUEWORKUNIT = 0x4B3 - SYS_COPYSIGN = 0x4C2 - SYS_CREATEWO = 0x4B2 - SYS_CREATEWORKUNIT = 0x4B2 - SYS_DELETEWO = 0x4B9 - SYS_DELETEWORKUNIT = 0x4B9 - SYS_DISCONNE = 0x4B6 - SYS_DISCONNECTSERVER = 0x4B6 - SYS_FEOF = 0x04D - SYS_FERROR = 0x04A - SYS_FINITE = 0x4C8 - SYS_GAMMA_R = 0x4E2 - SYS_JOINWORK = 0x4B7 - SYS_JOINWORKUNIT = 0x4B7 - SYS_LEAVEWOR = 0x4B8 - SYS_LEAVEWORKUNIT = 0x4B8 - SYS_LGAMMA_R = 0x4EB - SYS_MATHERR = 0x4D0 - SYS_PERROR = 0x04F - SYS_QUERYMET = 0x4BA - SYS_QUERYMETRICS = 0x4BA - SYS_QUERYSCH = 0x4BB - SYS_QUERYSCHENV = 0x4BB - SYS_REWIND = 0x04B - SYS_SCALBN = 0x4D4 - SYS_SIGNIFIC = 0x4D5 - SYS_SIGNIFICAND = 0x4D5 - SYS___ACOSH_B = 0x4DA - SYS___ACOS_B = 0x4D9 - SYS___ASINH_B = 0x4BE - SYS___ASIN_B = 0x4DB - SYS___ATAN2_B = 0x4DC - SYS___ATANH_B = 0x4DD - SYS___ATAN_B = 0x4BF - SYS___CBRT_B = 0x4C0 - SYS___CEIL_B = 0x4C1 - SYS___COSH_B = 0x4DE - SYS___COS_B = 0x4C3 - SYS___DGHT = 0x4A8 - SYS___ENVN = 0x4B0 - SYS___ERFC_B = 0x4C5 - SYS___ERF_B = 0x4C4 - SYS___EXPM1_B = 0x4C6 - SYS___EXP_B = 0x4DF - SYS___FABS_B = 0x4C7 - SYS___FLOOR_B = 0x4C9 - SYS___FMOD_B = 0x4E0 - SYS___FP_SETMODE = 0x4F8 - SYS___FREXP_B = 0x4CA - SYS___GAMMA_B = 0x4E1 - SYS___GDRR = 0x4A1 - SYS___HRRNO = 0x4A2 - SYS___HYPOT_B = 0x4E3 - SYS___ILOGB_B = 0x4CB - SYS___ISNAN_B = 0x4CC - SYS___J0_B = 0x4E4 - SYS___J1_B = 0x4E6 - SYS___JN_B = 0x4E8 - SYS___LDEXP_B = 0x4CD - SYS___LGAMMA_B = 0x4EA - SYS___LOG10_B = 0x4ED - SYS___LOG1P_B = 0x4CE - SYS___LOGB_B = 0x4CF - SYS___LOGIN = 0x4F5 - SYS___LOG_B = 0x4EC - SYS___MLOCKALL = 0x4B1 - SYS___MODF_B = 0x4D1 - SYS___NEXTAFTER_B = 0x4D2 - SYS___OPENDIR2 = 0x4F3 - SYS___OPEN_STAT = 0x4F6 - SYS___OPND = 0x4A5 - SYS___OPPT = 0x4A6 - SYS___OPRG = 0x4A3 - SYS___OPRR = 0x4A4 - SYS___PID_AFFINITY = 0x4BD - SYS___POW_B = 0x4EE - SYS___READDIR2 = 0x4F4 - SYS___REMAINDER_B = 0x4EF - SYS___RINT_B = 0x4D3 - SYS___SCALB_B = 0x4F0 - SYS___SIGACTIONSET = 0x4FB - SYS___SIGGM = 0x4A7 - SYS___SINH_B = 0x4F1 - SYS___SIN_B = 0x4D6 - SYS___SQRT_B = 0x4F2 - SYS___TANH_B = 0x4D8 - SYS___TAN_B = 0x4D7 - SYS___TRRNO = 0x4AF - SYS___TZNE = 0x4A9 - SYS___TZZN = 0x4AA - SYS___UCREATE = 0x4FC - SYS___UFREE = 0x4FE - SYS___UHEAPREPORT = 0x4FF - SYS___UMALLOC = 0x4FD - SYS___Y0_B = 0x4E5 - SYS___Y1_B = 0x4E7 - SYS___YN_B = 0x4E9 - SYS_ABORT = 0x05C - SYS_ASCTIME_R = 0x5E0 - SYS_ATEXIT = 0x05D - SYS_CONNECTE = 0x5AE - SYS_CONNECTEXPORTIMPORT = 0x5AE - SYS_CTIME_R = 0x5E1 - SYS_DN_COMP = 0x5DF - SYS_DN_EXPAND = 0x5DD - SYS_DN_SKIPNAME = 0x5DE - SYS_EXIT = 0x05A - SYS_EXPORTWO = 0x5A1 - SYS_EXPORTWORKUNIT = 0x5A1 - SYS_EXTRACTW = 0x5A5 - SYS_EXTRACTWORKUNIT = 0x5A5 - SYS_FSEEKO = 0x5C9 - SYS_FTELLO = 0x5C8 - SYS_GETGRGID_R = 0x5E7 - SYS_GETGRNAM_R = 0x5E8 - SYS_GETLOGIN_R = 0x5E9 - SYS_GETPWNAM_R = 0x5EA - SYS_GETPWUID_R = 0x5EB - SYS_GMTIME_R = 0x5E2 - SYS_IMPORTWO = 0x5A3 - SYS_IMPORTWORKUNIT = 0x5A3 - SYS_INET_NTOP = 0x5D3 - SYS_INET_PTON = 0x5D4 - SYS_LLABS = 0x5CE - SYS_LLDIV = 0x5CB - SYS_LOCALTIME_R = 0x5E3 - SYS_PTHREAD_ATFORK = 0x5ED - SYS_PTHREAD_ATTR_GETDETACHSTATE_U98 = 0x5FB - SYS_PTHREAD_ATTR_GETGUARDSIZE = 0x5EE - SYS_PTHREAD_ATTR_GETSCHEDPARAM = 0x5F9 - SYS_PTHREAD_ATTR_GETSTACKADDR = 0x5EF - SYS_PTHREAD_ATTR_SETDETACHSTATE_U98 = 0x5FC - SYS_PTHREAD_ATTR_SETGUARDSIZE = 0x5F0 - SYS_PTHREAD_ATTR_SETSCHEDPARAM = 0x5FA - SYS_PTHREAD_ATTR_SETSTACKADDR = 0x5F1 - SYS_PTHREAD_CONDATTR_GETPSHARED = 0x5F2 - SYS_PTHREAD_CONDATTR_SETPSHARED = 0x5F3 - SYS_PTHREAD_DETACH_U98 = 0x5FD - SYS_PTHREAD_GETCONCURRENCY = 0x5F4 - SYS_PTHREAD_GETSPECIFIC_U98 = 0x5FE - SYS_PTHREAD_KEY_DELETE = 0x5F5 - SYS_PTHREAD_SETCANCELSTATE = 0x5FF - SYS_PTHREAD_SETCONCURRENCY = 0x5F6 - SYS_PTHREAD_SIGMASK = 0x5F7 - SYS_QUERYENC = 0x5AD - SYS_QUERYWORKUNITCLASSIFICATION = 0x5AD - SYS_RAISE = 0x05E - SYS_RAND_R = 0x5E4 - SYS_READDIR_R = 0x5E6 - SYS_REALLOC = 0x05B - SYS_RES_INIT = 0x5D8 - SYS_RES_MKQUERY = 0x5D7 - SYS_RES_QUERY = 0x5D9 - SYS_RES_QUERYDOMAIN = 0x5DC - SYS_RES_SEARCH = 0x5DA - SYS_RES_SEND = 0x5DB - SYS_SETJMP = 0x05F - SYS_SIGQUEUE = 0x5A9 - SYS_STRTOK_R = 0x5E5 - SYS_STRTOLL = 0x5B0 - SYS_STRTOULL = 0x5B1 - SYS_TTYNAME_R = 0x5EC - SYS_UNDOEXPO = 0x5A2 - SYS_UNDOEXPORTWORKUNIT = 0x5A2 - SYS_UNDOIMPO = 0x5A4 - SYS_UNDOIMPORTWORKUNIT = 0x5A4 - SYS_WCSTOLL = 0x5CC - SYS_WCSTOULL = 0x5CD - SYS___ABORT = 0x05C - SYS___CONSOLE2 = 0x5D2 - SYS___CPL = 0x5A6 - SYS___DISCARDDATA = 0x5F8 - SYS___DSA_PREV = 0x5B2 - SYS___EP_FIND = 0x5B3 - SYS___FP_SWAPMODE = 0x5AF - SYS___GETUSERID = 0x5AB - SYS___GET_CPUID = 0x5B9 - SYS___GET_SYSTEM_SETTINGS = 0x5BA - SYS___IPDOMAINNAME = 0x5AC - SYS___MAP_INIT = 0x5A7 - SYS___MAP_SERVICE = 0x5A8 - SYS___MOUNT = 0x5AA - SYS___MSGRCV_TIMED = 0x5B7 - SYS___RES = 0x5D6 - SYS___SEMOP_TIMED = 0x5B8 - SYS___SERVER_THREADS_QUERY = 0x5B4 - SYS_FPRINTF = 0x06D - SYS_FSCANF = 0x06A - SYS_PRINTF = 0x06F - SYS_SETBUF = 0x06B - SYS_SETVBUF = 0x06C - SYS_SSCANF = 0x06E - SYS___CATGETS_A = 0x6C0 - SYS___CHAUDIT_A = 0x6F4 - SYS___CHMOD_A = 0x6E8 - SYS___COLLATE_INIT_A = 0x6AC - SYS___CREAT_A = 0x6F6 - SYS___CTYPE_INIT_A = 0x6AF - SYS___DLLLOAD_A = 0x6DF - SYS___DLLQUERYFN_A = 0x6E0 - SYS___DLLQUERYVAR_A = 0x6E1 - SYS___E2A_L = 0x6E3 - SYS___EXECLE_A = 0x6A0 - SYS___EXECLP_A = 0x6A4 - SYS___EXECVE_A = 0x6C1 - SYS___EXECVP_A = 0x6C2 - SYS___EXECV_A = 0x6B1 - SYS___FPRINTF_A = 0x6FA - SYS___GETADDRINFO_A = 0x6BF - SYS___GETNAMEINFO_A = 0x6C4 - SYS___GET_WCTYPE_STD_A = 0x6AE - SYS___ICONV_OPEN_A = 0x6DE - SYS___IF_INDEXTONAME_A = 0x6DC - SYS___IF_NAMETOINDEX_A = 0x6DB - SYS___ISWCTYPE_A = 0x6B0 - SYS___IS_WCTYPE_STD_A = 0x6B2 - SYS___LOCALECONV_A = 0x6B8 - SYS___LOCALECONV_STD_A = 0x6B9 - SYS___LOCALE_INIT_A = 0x6B7 - SYS___LSTAT_A = 0x6EE - SYS___LSTAT_O_A = 0x6EF - SYS___MKDIR_A = 0x6E9 - SYS___MKFIFO_A = 0x6EC - SYS___MKNOD_A = 0x6F0 - SYS___MONETARY_INIT_A = 0x6BC - SYS___MOUNT_A = 0x6F1 - SYS___NL_CSINFO_A = 0x6D6 - SYS___NL_LANGINFO_A = 0x6BA - SYS___NL_LNAGINFO_STD_A = 0x6BB - SYS___NL_MONINFO_A = 0x6D7 - SYS___NL_NUMINFO_A = 0x6D8 - SYS___NL_RESPINFO_A = 0x6D9 - SYS___NL_TIMINFO_A = 0x6DA - SYS___NUMERIC_INIT_A = 0x6C6 - SYS___OPEN_A = 0x6F7 - SYS___PRINTF_A = 0x6DD - SYS___RESP_INIT_A = 0x6C7 - SYS___RPMATCH_A = 0x6C8 - SYS___RPMATCH_C_A = 0x6C9 - SYS___RPMATCH_STD_A = 0x6CA - SYS___SETLOCALE_A = 0x6F9 - SYS___SPAWNP_A = 0x6C5 - SYS___SPAWN_A = 0x6C3 - SYS___SPRINTF_A = 0x6FB - SYS___STAT_A = 0x6EA - SYS___STAT_O_A = 0x6EB - SYS___STRCOLL_STD_A = 0x6A1 - SYS___STRFMON_A = 0x6BD - SYS___STRFMON_STD_A = 0x6BE - SYS___STRFTIME_A = 0x6CC - SYS___STRFTIME_STD_A = 0x6CD - SYS___STRPTIME_A = 0x6CE - SYS___STRPTIME_STD_A = 0x6CF - SYS___STRXFRM_A = 0x6A2 - SYS___STRXFRM_C_A = 0x6A3 - SYS___STRXFRM_STD_A = 0x6A5 - SYS___SYNTAX_INIT_A = 0x6D4 - SYS___TIME_INIT_A = 0x6CB - SYS___TOD_INIT_A = 0x6D5 - SYS___TOWLOWER_A = 0x6B3 - SYS___TOWLOWER_STD_A = 0x6B4 - SYS___TOWUPPER_A = 0x6B5 - SYS___TOWUPPER_STD_A = 0x6B6 - SYS___UMOUNT_A = 0x6F2 - SYS___VFPRINTF_A = 0x6FC - SYS___VPRINTF_A = 0x6FD - SYS___VSPRINTF_A = 0x6FE - SYS___VSWPRINTF_A = 0x6FF - SYS___WCSCOLL_A = 0x6A6 - SYS___WCSCOLL_C_A = 0x6A7 - SYS___WCSCOLL_STD_A = 0x6A8 - SYS___WCSFTIME_A = 0x6D0 - SYS___WCSFTIME_STD_A = 0x6D1 - SYS___WCSXFRM_A = 0x6A9 - SYS___WCSXFRM_C_A = 0x6AA - SYS___WCSXFRM_STD_A = 0x6AB - SYS___WCTYPE_A = 0x6AD - SYS___W_GETMNTENT_A = 0x6F5 - SYS_____CCSIDTYPE_A = 0x6E6 - SYS_____CHATTR_A = 0x6E2 - SYS_____CSNAMETYPE_A = 0x6E7 - SYS_____OPEN_STAT_A = 0x6ED - SYS_____SPAWN2_A = 0x6D2 - SYS_____SPAWNP2_A = 0x6D3 - SYS_____TOCCSID_A = 0x6E4 - SYS_____TOCSNAME_A = 0x6E5 - SYS_ACL_FREE = 0x7FF - SYS_ACL_INIT = 0x7FE - SYS_FWIDE = 0x7DF - SYS_FWPRINTF = 0x7D1 - SYS_FWRITE = 0x07E - SYS_FWSCANF = 0x7D5 - SYS_GETCHAR = 0x07B - SYS_GETS = 0x07C - SYS_M_CREATE_LAYOUT = 0x7C9 - SYS_M_DESTROY_LAYOUT = 0x7CA - SYS_M_GETVALUES_LAYOUT = 0x7CB - SYS_M_SETVALUES_LAYOUT = 0x7CC - SYS_M_TRANSFORM_LAYOUT = 0x7CD - SYS_M_WTRANSFORM_LAYOUT = 0x7CE - SYS_PREAD = 0x7C7 - SYS_PUTC = 0x07D - SYS_PUTCHAR = 0x07A - SYS_PUTS = 0x07F - SYS_PWRITE = 0x7C8 - SYS_TOWCTRAN = 0x7D8 - SYS_TOWCTRANS = 0x7D8 - SYS_UNATEXIT = 0x7B5 - SYS_VFWPRINT = 0x7D3 - SYS_VFWPRINTF = 0x7D3 - SYS_VWPRINTF = 0x7D4 - SYS_WCTRANS = 0x7D7 - SYS_WPRINTF = 0x7D2 - SYS_WSCANF = 0x7D6 - SYS___ASCTIME_R_A = 0x7A1 - SYS___BASENAME_A = 0x7DC - SYS___BTOWC_A = 0x7E4 - SYS___CDUMP_A = 0x7B7 - SYS___CEE3DMP_A = 0x7B6 - SYS___CEILF_H = 0x7F4 - SYS___CEILL_H = 0x7F5 - SYS___CEIL_H = 0x7EA - SYS___CRYPT_A = 0x7BE - SYS___CSNAP_A = 0x7B8 - SYS___CTEST_A = 0x7B9 - SYS___CTIME_R_A = 0x7A2 - SYS___CTRACE_A = 0x7BA - SYS___DBM_OPEN_A = 0x7E6 - SYS___DIRNAME_A = 0x7DD - SYS___FABSF_H = 0x7FA - SYS___FABSL_H = 0x7FB - SYS___FABS_H = 0x7ED - SYS___FGETWC_A = 0x7AA - SYS___FGETWS_A = 0x7AD - SYS___FLOORF_H = 0x7F6 - SYS___FLOORL_H = 0x7F7 - SYS___FLOOR_H = 0x7EB - SYS___FPUTWC_A = 0x7A5 - SYS___FPUTWS_A = 0x7A8 - SYS___GETTIMEOFDAY_A = 0x7AE - SYS___GETWCHAR_A = 0x7AC - SYS___GETWC_A = 0x7AB - SYS___GLOB_A = 0x7DE - SYS___GMTIME_A = 0x7AF - SYS___GMTIME_R_A = 0x7B0 - SYS___INET_PTON_A = 0x7BC - SYS___J0_H = 0x7EE - SYS___J1_H = 0x7EF - SYS___JN_H = 0x7F0 - SYS___LOCALTIME_A = 0x7B1 - SYS___LOCALTIME_R_A = 0x7B2 - SYS___MALLOC24 = 0x7FC - SYS___MALLOC31 = 0x7FD - SYS___MKTIME_A = 0x7B3 - SYS___MODFF_H = 0x7F8 - SYS___MODFL_H = 0x7F9 - SYS___MODF_H = 0x7EC - SYS___OPENDIR_A = 0x7C2 - SYS___OSNAME = 0x7E0 - SYS___PUTWCHAR_A = 0x7A7 - SYS___PUTWC_A = 0x7A6 - SYS___READDIR_A = 0x7C3 - SYS___STRTOLL_A = 0x7A3 - SYS___STRTOULL_A = 0x7A4 - SYS___SYSLOG_A = 0x7BD - SYS___TZZNA = 0x7B4 - SYS___UNGETWC_A = 0x7A9 - SYS___UTIME_A = 0x7A0 - SYS___VFPRINTF2_A = 0x7E7 - SYS___VPRINTF2_A = 0x7E8 - SYS___VSPRINTF2_A = 0x7E9 - SYS___VSWPRNTF2_A = 0x7BB - SYS___WCSTOD_A = 0x7D9 - SYS___WCSTOL_A = 0x7DA - SYS___WCSTOUL_A = 0x7DB - SYS___WCTOB_A = 0x7E5 - SYS___Y0_H = 0x7F1 - SYS___Y1_H = 0x7F2 - SYS___YN_H = 0x7F3 - SYS_____OPENDIR2_A = 0x7BF - SYS_____OSNAME_A = 0x7E1 - SYS_____READDIR2_A = 0x7C0 - SYS_DLCLOSE = 0x8DF - SYS_DLERROR = 0x8E0 - SYS_DLOPEN = 0x8DD - SYS_DLSYM = 0x8DE - SYS_FLOCKFILE = 0x8D3 - SYS_FTRYLOCKFILE = 0x8D4 - SYS_FUNLOCKFILE = 0x8D5 - SYS_GETCHAR_UNLOCKED = 0x8D7 - SYS_GETC_UNLOCKED = 0x8D6 - SYS_PUTCHAR_UNLOCKED = 0x8D9 - SYS_PUTC_UNLOCKED = 0x8D8 - SYS_SNPRINTF = 0x8DA - SYS_VSNPRINTF = 0x8DB - SYS_WCSCSPN = 0x08B - SYS_WCSLEN = 0x08C - SYS_WCSNCAT = 0x08D - SYS_WCSNCMP = 0x08A - SYS_WCSNCPY = 0x08F - SYS_WCSSPN = 0x08E - SYS___ABSF_H = 0x8E7 - SYS___ABSL_H = 0x8E8 - SYS___ABS_H = 0x8E6 - SYS___ACOSF_H = 0x8EA - SYS___ACOSH_H = 0x8EC - SYS___ACOSL_H = 0x8EB - SYS___ACOS_H = 0x8E9 - SYS___ASINF_H = 0x8EE - SYS___ASINH_H = 0x8F0 - SYS___ASINL_H = 0x8EF - SYS___ASIN_H = 0x8ED - SYS___ATAN2F_H = 0x8F8 - SYS___ATAN2L_H = 0x8F9 - SYS___ATAN2_H = 0x8F7 - SYS___ATANF_H = 0x8F2 - SYS___ATANHF_H = 0x8F5 - SYS___ATANHL_H = 0x8F6 - SYS___ATANH_H = 0x8F4 - SYS___ATANL_H = 0x8F3 - SYS___ATAN_H = 0x8F1 - SYS___CBRT_H = 0x8FA - SYS___COPYSIGNF_H = 0x8FB - SYS___COPYSIGNL_H = 0x8FC - SYS___COSF_H = 0x8FE - SYS___COSL_H = 0x8FF - SYS___COS_H = 0x8FD - SYS___DLERROR_A = 0x8D2 - SYS___DLOPEN_A = 0x8D0 - SYS___DLSYM_A = 0x8D1 - SYS___GETUTXENT_A = 0x8C6 - SYS___GETUTXID_A = 0x8C7 - SYS___GETUTXLINE_A = 0x8C8 - SYS___ITOA = 0x8AA - SYS___ITOA_A = 0x8B0 - SYS___LE_CONDITION_TOKEN_BUILD = 0x8A5 - SYS___LE_MSG_ADD_INSERT = 0x8A6 - SYS___LE_MSG_GET = 0x8A7 - SYS___LE_MSG_GET_AND_WRITE = 0x8A8 - SYS___LE_MSG_WRITE = 0x8A9 - SYS___LLTOA = 0x8AE - SYS___LLTOA_A = 0x8B4 - SYS___LTOA = 0x8AC - SYS___LTOA_A = 0x8B2 - SYS___PUTCHAR_UNLOCKED_A = 0x8CC - SYS___PUTC_UNLOCKED_A = 0x8CB - SYS___PUTUTXLINE_A = 0x8C9 - SYS___RESET_EXCEPTION_HANDLER = 0x8E3 - SYS___REXEC_A = 0x8C4 - SYS___REXEC_AF_A = 0x8C5 - SYS___SET_EXCEPTION_HANDLER = 0x8E2 - SYS___SNPRINTF_A = 0x8CD - SYS___SUPERKILL = 0x8A4 - SYS___TCGETATTR_A = 0x8A1 - SYS___TCSETATTR_A = 0x8A2 - SYS___ULLTOA = 0x8AF - SYS___ULLTOA_A = 0x8B5 - SYS___ULTOA = 0x8AD - SYS___ULTOA_A = 0x8B3 - SYS___UTOA = 0x8AB - SYS___UTOA_A = 0x8B1 - SYS___VHM_EVENT = 0x8E4 - SYS___VSNPRINTF_A = 0x8CE - SYS_____GETENV_A = 0x8C3 - SYS_____UTMPXNAME_A = 0x8CA - SYS_CACOSH = 0x9A0 - SYS_CACOSHF = 0x9A3 - SYS_CACOSHL = 0x9A6 - SYS_CARG = 0x9A9 - SYS_CARGF = 0x9AC - SYS_CARGL = 0x9AF - SYS_CASIN = 0x9B2 - SYS_CASINF = 0x9B5 - SYS_CASINH = 0x9BB - SYS_CASINHF = 0x9BE - SYS_CASINHL = 0x9C1 - SYS_CASINL = 0x9B8 - SYS_CATAN = 0x9C4 - SYS_CATANF = 0x9C7 - SYS_CATANH = 0x9CD - SYS_CATANHF = 0x9D0 - SYS_CATANHL = 0x9D3 - SYS_CATANL = 0x9CA - SYS_CCOS = 0x9D6 - SYS_CCOSF = 0x9D9 - SYS_CCOSH = 0x9DF - SYS_CCOSHF = 0x9E2 - SYS_CCOSHL = 0x9E5 - SYS_CCOSL = 0x9DC - SYS_CEXP = 0x9E8 - SYS_CEXPF = 0x9EB - SYS_CEXPL = 0x9EE - SYS_CIMAG = 0x9F1 - SYS_CIMAGF = 0x9F4 - SYS_CIMAGL = 0x9F7 - SYS_CLOGF = 0x9FD - SYS_MEMCHR = 0x09B - SYS_MEMCMP = 0x09A - SYS_STRCOLL = 0x09C - SYS_STRNCMP = 0x09D - SYS_STRRCHR = 0x09F - SYS_STRXFRM = 0x09E - SYS___CACOSHF_B = 0x9A4 - SYS___CACOSHF_H = 0x9A5 - SYS___CACOSHL_B = 0x9A7 - SYS___CACOSHL_H = 0x9A8 - SYS___CACOSH_B = 0x9A1 - SYS___CACOSH_H = 0x9A2 - SYS___CARGF_B = 0x9AD - SYS___CARGF_H = 0x9AE - SYS___CARGL_B = 0x9B0 - SYS___CARGL_H = 0x9B1 - SYS___CARG_B = 0x9AA - SYS___CARG_H = 0x9AB - SYS___CASINF_B = 0x9B6 - SYS___CASINF_H = 0x9B7 - SYS___CASINHF_B = 0x9BF - SYS___CASINHF_H = 0x9C0 - SYS___CASINHL_B = 0x9C2 - SYS___CASINHL_H = 0x9C3 - SYS___CASINH_B = 0x9BC - SYS___CASINH_H = 0x9BD - SYS___CASINL_B = 0x9B9 - SYS___CASINL_H = 0x9BA - SYS___CASIN_B = 0x9B3 - SYS___CASIN_H = 0x9B4 - SYS___CATANF_B = 0x9C8 - SYS___CATANF_H = 0x9C9 - SYS___CATANHF_B = 0x9D1 - SYS___CATANHF_H = 0x9D2 - SYS___CATANHL_B = 0x9D4 - SYS___CATANHL_H = 0x9D5 - SYS___CATANH_B = 0x9CE - SYS___CATANH_H = 0x9CF - SYS___CATANL_B = 0x9CB - SYS___CATANL_H = 0x9CC - SYS___CATAN_B = 0x9C5 - SYS___CATAN_H = 0x9C6 - SYS___CCOSF_B = 0x9DA - SYS___CCOSF_H = 0x9DB - SYS___CCOSHF_B = 0x9E3 - SYS___CCOSHF_H = 0x9E4 - SYS___CCOSHL_B = 0x9E6 - SYS___CCOSHL_H = 0x9E7 - SYS___CCOSH_B = 0x9E0 - SYS___CCOSH_H = 0x9E1 - SYS___CCOSL_B = 0x9DD - SYS___CCOSL_H = 0x9DE - SYS___CCOS_B = 0x9D7 - SYS___CCOS_H = 0x9D8 - SYS___CEXPF_B = 0x9EC - SYS___CEXPF_H = 0x9ED - SYS___CEXPL_B = 0x9EF - SYS___CEXPL_H = 0x9F0 - SYS___CEXP_B = 0x9E9 - SYS___CEXP_H = 0x9EA - SYS___CIMAGF_B = 0x9F5 - SYS___CIMAGF_H = 0x9F6 - SYS___CIMAGL_B = 0x9F8 - SYS___CIMAGL_H = 0x9F9 - SYS___CIMAG_B = 0x9F2 - SYS___CIMAG_H = 0x9F3 - SYS___CLOG = 0x9FA - SYS___CLOGF_B = 0x9FE - SYS___CLOGF_H = 0x9FF - SYS___CLOG_B = 0x9FB - SYS___CLOG_H = 0x9FC - SYS_ISWCTYPE = 0x10C - SYS_ISWXDIGI = 0x10A - SYS_ISWXDIGIT = 0x10A - SYS_MBSINIT = 0x10F - SYS_TOWLOWER = 0x10D - SYS_TOWUPPER = 0x10E - SYS_WCTYPE = 0x10B - SYS_WCSSTR = 0x11B - SYS___RPMTCH = 0x11A - SYS_WCSTOD = 0x12E - SYS_WCSTOK = 0x12C - SYS_WCSTOL = 0x12D - SYS_WCSTOUL = 0x12F - SYS_FGETWC = 0x13C - SYS_FGETWS = 0x13D - SYS_FPUTWC = 0x13E - SYS_FPUTWS = 0x13F - SYS_REGERROR = 0x13B - SYS_REGFREE = 0x13A - SYS_COLLEQUIV = 0x14F - SYS_COLLTOSTR = 0x14E - SYS_ISMCCOLLEL = 0x14C - SYS_STRTOCOLL = 0x14D - SYS_DLLFREE = 0x16F - SYS_DLLQUERYFN = 0x16D - SYS_DLLQUERYVAR = 0x16E - SYS_GETMCCOLL = 0x16A - SYS_GETWMCCOLL = 0x16B - SYS___ERR2AD = 0x16C - SYS_CFSETOSPEED = 0x17A - SYS_CHDIR = 0x17B - SYS_CHMOD = 0x17C - SYS_CHOWN = 0x17D - SYS_CLOSE = 0x17E - SYS_CLOSEDIR = 0x17F - SYS_LOG = 0x017 - SYS_COSH = 0x018 - SYS_FCHMOD = 0x18A - SYS_FCHOWN = 0x18B - SYS_FCNTL = 0x18C - SYS_FILENO = 0x18D - SYS_FORK = 0x18E - SYS_FPATHCONF = 0x18F - SYS_GETLOGIN = 0x19A - SYS_GETPGRP = 0x19C - SYS_GETPID = 0x19D - SYS_GETPPID = 0x19E - SYS_GETPWNAM = 0x19F - SYS_TANH = 0x019 - SYS_W_GETMNTENT = 0x19B - SYS_POW = 0x020 - SYS_PTHREAD_SELF = 0x20A - SYS_PTHREAD_SETINTR = 0x20B - SYS_PTHREAD_SETINTRTYPE = 0x20C - SYS_PTHREAD_SETSPECIFIC = 0x20D - SYS_PTHREAD_TESTINTR = 0x20E - SYS_PTHREAD_YIELD = 0x20F - SYS_SQRT = 0x021 - SYS_FLOOR = 0x022 - SYS_J1 = 0x023 - SYS_WCSPBRK = 0x23F - SYS_BSEARCH = 0x24C - SYS_FABS = 0x024 - SYS_GETENV = 0x24A - SYS_LDIV = 0x24D - SYS_SYSTEM = 0x24B - SYS_FMOD = 0x025 - SYS___RETHROW = 0x25F - SYS___THROW = 0x25E - SYS_J0 = 0x026 - SYS_PUTENV = 0x26A - SYS___GETENV = 0x26F - SYS_SEMCTL = 0x27A - SYS_SEMGET = 0x27B - SYS_SEMOP = 0x27C - SYS_SHMAT = 0x27D - SYS_SHMCTL = 0x27E - SYS_SHMDT = 0x27F - SYS_YN = 0x027 - SYS_JN = 0x028 - SYS_SIGALTSTACK = 0x28A - SYS_SIGHOLD = 0x28B - SYS_SIGIGNORE = 0x28C - SYS_SIGINTERRUPT = 0x28D - SYS_SIGPAUSE = 0x28E - SYS_SIGRELSE = 0x28F - SYS_GETOPT = 0x29A - SYS_GETSUBOPT = 0x29D - SYS_LCHOWN = 0x29B - SYS_SETPGRP = 0x29E - SYS_TRUNCATE = 0x29C - SYS_Y0 = 0x029 - SYS___GDERR = 0x29F - SYS_ISALPHA = 0x030 - SYS_VFORK = 0x30F - SYS__LONGJMP = 0x30D - SYS__SETJMP = 0x30E - SYS_GLOB = 0x31A - SYS_GLOBFREE = 0x31B - SYS_ISALNUM = 0x031 - SYS_PUTW = 0x31C - SYS_SEEKDIR = 0x31D - SYS_TELLDIR = 0x31E - SYS_TEMPNAM = 0x31F - SYS_GETTIMEOFDAY_R = 0x32E - SYS_ISLOWER = 0x032 - SYS_LGAMMA = 0x32C - SYS_REMAINDER = 0x32A - SYS_SCALB = 0x32B - SYS_SYNC = 0x32F - SYS_TTYSLOT = 0x32D - SYS_ENDPROTOENT = 0x33A - SYS_ENDSERVENT = 0x33B - SYS_GETHOSTBYADDR = 0x33D - SYS_GETHOSTBYADDR_R = 0x33C - SYS_GETHOSTBYNAME = 0x33F - SYS_GETHOSTBYNAME_R = 0x33E - SYS_ISCNTRL = 0x033 - SYS_GETSERVBYNAME = 0x34A - SYS_GETSERVBYPORT = 0x34B - SYS_GETSERVENT = 0x34C - SYS_GETSOCKNAME = 0x34D - SYS_GETSOCKOPT = 0x34E - SYS_INET_ADDR = 0x34F - SYS_ISDIGIT = 0x034 - SYS_ISGRAPH = 0x035 - SYS_SELECT = 0x35B - SYS_SELECTEX = 0x35C - SYS_SEND = 0x35D - SYS_SENDTO = 0x35F - SYS_CHROOT = 0x36A - SYS_ISNAN = 0x36D - SYS_ISUPPER = 0x036 - SYS_ULIMIT = 0x36C - SYS_UTIMES = 0x36E - SYS_W_STATVFS = 0x36B - SYS___H_ERRNO = 0x36F - SYS_GRANTPT = 0x37A - SYS_ISPRINT = 0x037 - SYS_TCGETSID = 0x37C - SYS_UNLOCKPT = 0x37B - SYS___TCGETCP = 0x37D - SYS___TCSETCP = 0x37E - SYS___TCSETTABLES = 0x37F - SYS_ISPUNCT = 0x038 - SYS_NLIST = 0x38C - SYS___IPDBCS = 0x38D - SYS___IPDSPX = 0x38E - SYS___IPMSGC = 0x38F - SYS___STHOSTENT = 0x38B - SYS___STSERVENT = 0x38A - SYS_ISSPACE = 0x039 - SYS_COS = 0x040 - SYS_T_ALLOC = 0x40A - SYS_T_BIND = 0x40B - SYS_T_CLOSE = 0x40C - SYS_T_CONNECT = 0x40D - SYS_T_ERROR = 0x40E - SYS_T_FREE = 0x40F - SYS_TAN = 0x041 - SYS_T_RCVREL = 0x41A - SYS_T_RCVUDATA = 0x41B - SYS_T_RCVUDERR = 0x41C - SYS_T_SND = 0x41D - SYS_T_SNDDIS = 0x41E - SYS_T_SNDREL = 0x41F - SYS_GETPMSG = 0x42A - SYS_ISASTREAM = 0x42B - SYS_PUTMSG = 0x42C - SYS_PUTPMSG = 0x42D - SYS_SINH = 0x042 - SYS___ISPOSIXON = 0x42E - SYS___OPENMVSREL = 0x42F - SYS_ACOS = 0x043 - SYS_ATAN = 0x044 - SYS_ATAN2 = 0x045 - SYS_FTELL = 0x046 - SYS_FGETPOS = 0x047 - SYS_SOCK_DEBUG = 0x47A - SYS_SOCK_DO_TESTSTOR = 0x47D - SYS_TAKESOCKET = 0x47E - SYS___SERVER_INIT = 0x47F - SYS_FSEEK = 0x048 - SYS___IPHOST = 0x48B - SYS___IPNODE = 0x48C - SYS___SERVER_CLASSIFY_CREATE = 0x48D - SYS___SERVER_CLASSIFY_DESTROY = 0x48E - SYS___SERVER_CLASSIFY_RESET = 0x48F - SYS___SMF_RECORD = 0x48A - SYS_FSETPOS = 0x049 - SYS___FNWSA = 0x49B - SYS___SPAWN2 = 0x49D - SYS___SPAWNP2 = 0x49E - SYS_ATOF = 0x050 - SYS_PTHREAD_MUTEXATTR_GETPSHARED = 0x50A - SYS_PTHREAD_MUTEXATTR_SETPSHARED = 0x50B - SYS_PTHREAD_RWLOCK_DESTROY = 0x50C - SYS_PTHREAD_RWLOCK_INIT = 0x50D - SYS_PTHREAD_RWLOCK_RDLOCK = 0x50E - SYS_PTHREAD_RWLOCK_TRYRDLOCK = 0x50F - SYS_ATOI = 0x051 - SYS___FP_CLASS = 0x51D - SYS___FP_CLR_FLAG = 0x51A - SYS___FP_FINITE = 0x51E - SYS___FP_ISNAN = 0x51F - SYS___FP_RAISE_XCP = 0x51C - SYS___FP_READ_FLAG = 0x51B - SYS_RAND = 0x052 - SYS_SIGTIMEDWAIT = 0x52D - SYS_SIGWAITINFO = 0x52E - SYS___CHKBFP = 0x52F - SYS___FPC_RS = 0x52C - SYS___FPC_RW = 0x52A - SYS___FPC_SM = 0x52B - SYS_STRTOD = 0x053 - SYS_STRTOL = 0x054 - SYS_STRTOUL = 0x055 - SYS_MALLOC = 0x056 - SYS_SRAND = 0x057 - SYS_CALLOC = 0x058 - SYS_FREE = 0x059 - SYS___OSENV = 0x59F - SYS___W_PIOCTL = 0x59E - SYS_LONGJMP = 0x060 - SYS___FLOORF_B = 0x60A - SYS___FLOORL_B = 0x60B - SYS___FREXPF_B = 0x60C - SYS___FREXPL_B = 0x60D - SYS___LDEXPF_B = 0x60E - SYS___LDEXPL_B = 0x60F - SYS_SIGNAL = 0x061 - SYS___ATAN2F_B = 0x61A - SYS___ATAN2L_B = 0x61B - SYS___COSHF_B = 0x61C - SYS___COSHL_B = 0x61D - SYS___EXPF_B = 0x61E - SYS___EXPL_B = 0x61F - SYS_TMPNAM = 0x062 - SYS___ABSF_B = 0x62A - SYS___ABSL_B = 0x62C - SYS___ABS_B = 0x62B - SYS___FMODF_B = 0x62D - SYS___FMODL_B = 0x62E - SYS___MODFF_B = 0x62F - SYS_ATANL = 0x63A - SYS_CEILF = 0x63B - SYS_CEILL = 0x63C - SYS_COSF = 0x63D - SYS_COSHF = 0x63F - SYS_COSL = 0x63E - SYS_REMOVE = 0x063 - SYS_POWL = 0x64A - SYS_RENAME = 0x064 - SYS_SINF = 0x64B - SYS_SINHF = 0x64F - SYS_SINL = 0x64C - SYS_SQRTF = 0x64D - SYS_SQRTL = 0x64E - SYS_BTOWC = 0x65F - SYS_FREXPL = 0x65A - SYS_LDEXPF = 0x65B - SYS_LDEXPL = 0x65C - SYS_MODFF = 0x65D - SYS_MODFL = 0x65E - SYS_TMPFILE = 0x065 - SYS_FREOPEN = 0x066 - SYS___CHARMAP_INIT_A = 0x66E - SYS___GETHOSTBYADDR_R_A = 0x66C - SYS___GETHOSTBYNAME_A = 0x66A - SYS___GETHOSTBYNAME_R_A = 0x66D - SYS___MBLEN_A = 0x66F - SYS___RES_INIT_A = 0x66B - SYS_FCLOSE = 0x067 - SYS___GETGRGID_R_A = 0x67D - SYS___WCSTOMBS_A = 0x67A - SYS___WCSTOMBS_STD_A = 0x67B - SYS___WCSWIDTH_A = 0x67C - SYS___WCSWIDTH_ASIA = 0x67F - SYS___WCSWIDTH_STD_A = 0x67E - SYS_FFLUSH = 0x068 - SYS___GETLOGIN_R_A = 0x68E - SYS___GETPWNAM_R_A = 0x68C - SYS___GETPWUID_R_A = 0x68D - SYS___TTYNAME_R_A = 0x68F - SYS___WCWIDTH_ASIA = 0x68B - SYS___WCWIDTH_STD_A = 0x68A - SYS_FOPEN = 0x069 - SYS___REGEXEC_A = 0x69A - SYS___REGEXEC_STD_A = 0x69B - SYS___REGFREE_A = 0x69C - SYS___REGFREE_STD_A = 0x69D - SYS___STRCOLL_A = 0x69E - SYS___STRCOLL_C_A = 0x69F - SYS_SCANF = 0x070 - SYS___A64L_A = 0x70C - SYS___ECVT_A = 0x70D - SYS___FCVT_A = 0x70E - SYS___GCVT_A = 0x70F - SYS___STRTOUL_A = 0x70A - SYS_____AE_CORRESTBL_QUERY_A = 0x70B - SYS_SPRINTF = 0x071 - SYS___ACCESS_A = 0x71F - SYS___CATOPEN_A = 0x71E - SYS___GETOPT_A = 0x71D - SYS___REALPATH_A = 0x71A - SYS___SETENV_A = 0x71B - SYS___SYSTEM_A = 0x71C - SYS_FGETC = 0x072 - SYS___GAI_STRERROR_A = 0x72F - SYS___RMDIR_A = 0x72A - SYS___STATVFS_A = 0x72B - SYS___SYMLINK_A = 0x72C - SYS___TRUNCATE_A = 0x72D - SYS___UNLINK_A = 0x72E - SYS_VFPRINTF = 0x073 - SYS___ISSPACE_A = 0x73A - SYS___ISUPPER_A = 0x73B - SYS___ISWALNUM_A = 0x73F - SYS___ISXDIGIT_A = 0x73C - SYS___TOLOWER_A = 0x73D - SYS___TOUPPER_A = 0x73E - SYS_VPRINTF = 0x074 - SYS___CONFSTR_A = 0x74B - SYS___FDOPEN_A = 0x74E - SYS___FLDATA_A = 0x74F - SYS___FTOK_A = 0x74C - SYS___ISWXDIGIT_A = 0x74A - SYS___MKTEMP_A = 0x74D - SYS_VSPRINTF = 0x075 - SYS___GETGRGID_A = 0x75A - SYS___GETGRNAM_A = 0x75B - SYS___GETGROUPSBYNAME_A = 0x75C - SYS___GETHOSTENT_A = 0x75D - SYS___GETHOSTNAME_A = 0x75E - SYS___GETLOGIN_A = 0x75F - SYS_GETC = 0x076 - SYS___CREATEWORKUNIT_A = 0x76A - SYS___CTERMID_A = 0x76B - SYS___FMTMSG_A = 0x76C - SYS___INITGROUPS_A = 0x76D - SYS___MSGRCV_A = 0x76F - SYS_____LOGIN_A = 0x76E - SYS_FGETS = 0x077 - SYS___STRCASECMP_A = 0x77B - SYS___STRNCASECMP_A = 0x77C - SYS___TTYNAME_A = 0x77D - SYS___UNAME_A = 0x77E - SYS___UTIMES_A = 0x77F - SYS_____SERVER_PWU_A = 0x77A - SYS_FPUTC = 0x078 - SYS___CREAT_O_A = 0x78E - SYS___ENVNA = 0x78F - SYS___FREAD_A = 0x78A - SYS___FWRITE_A = 0x78B - SYS___ISASCII = 0x78D - SYS___OPEN_O_A = 0x78C - SYS_FPUTS = 0x079 - SYS___ASCTIME_A = 0x79C - SYS___CTIME_A = 0x79D - SYS___GETDATE_A = 0x79E - SYS___GETSERVBYPORT_A = 0x79A - SYS___GETSERVENT_A = 0x79B - SYS___TZSET_A = 0x79F - SYS_ACL_FROM_TEXT = 0x80C - SYS_ACL_SET_FD = 0x80A - SYS_ACL_SET_FILE = 0x80B - SYS_ACL_SORT = 0x80E - SYS_ACL_TO_TEXT = 0x80D - SYS_UNGETC = 0x080 - SYS___SHUTDOWN_REGISTRATION = 0x80F - SYS_FREAD = 0x081 - SYS_FREEADDRINFO = 0x81A - SYS_GAI_STRERROR = 0x81B - SYS_REXEC_AF = 0x81C - SYS___DYNALLOC_A = 0x81F - SYS___POE = 0x81D - SYS_WCSTOMBS = 0x082 - SYS___INET_ADDR_A = 0x82F - SYS___NLIST_A = 0x82A - SYS_____TCGETCP_A = 0x82B - SYS_____TCSETCP_A = 0x82C - SYS_____W_PIOCTL_A = 0x82E - SYS_MBTOWC = 0x083 - SYS___CABEND = 0x83D - SYS___LE_CIB_GET = 0x83E - SYS___RECVMSG_A = 0x83B - SYS___SENDMSG_A = 0x83A - SYS___SET_LAA_FOR_JIT = 0x83F - SYS_____LCHATTR_A = 0x83C - SYS_WCTOMB = 0x084 - SYS___CBRTL_B = 0x84A - SYS___COPYSIGNF_B = 0x84B - SYS___COPYSIGNL_B = 0x84C - SYS___COTANF_B = 0x84D - SYS___COTANL_B = 0x84F - SYS___COTAN_B = 0x84E - SYS_MBSTOWCS = 0x085 - SYS___LOG1PL_B = 0x85A - SYS___LOG2F_B = 0x85B - SYS___LOG2L_B = 0x85D - SYS___LOG2_B = 0x85C - SYS___REMAINDERF_B = 0x85E - SYS___REMAINDERL_B = 0x85F - SYS_ACOSHF = 0x86E - SYS_ACOSHL = 0x86F - SYS_WCSCPY = 0x086 - SYS___ERFCF_B = 0x86D - SYS___ERFF_B = 0x86C - SYS___LROUNDF_B = 0x86A - SYS___LROUND_B = 0x86B - SYS_COTANL = 0x87A - SYS_EXP2F = 0x87B - SYS_EXP2L = 0x87C - SYS_EXPM1F = 0x87D - SYS_EXPM1L = 0x87E - SYS_FDIMF = 0x87F - SYS_WCSCAT = 0x087 - SYS___COTANL = 0x87A - SYS_REMAINDERF = 0x88A - SYS_REMAINDERL = 0x88B - SYS_REMAINDF = 0x88A - SYS_REMAINDL = 0x88B - SYS_REMQUO = 0x88D - SYS_REMQUOF = 0x88C - SYS_REMQUOL = 0x88E - SYS_TGAMMAF = 0x88F - SYS_WCSCHR = 0x088 - SYS_ERFCF = 0x89B - SYS_ERFCL = 0x89C - SYS_ERFL = 0x89A - SYS_EXP2 = 0x89E - SYS_WCSCMP = 0x089 - SYS___EXP2_B = 0x89D - SYS___FAR_JUMP = 0x89F - SYS_ABS = 0x090 - SYS___ERFCL_H = 0x90A - SYS___EXPF_H = 0x90C - SYS___EXPL_H = 0x90D - SYS___EXPM1_H = 0x90E - SYS___EXP_H = 0x90B - SYS___FDIM_H = 0x90F - SYS_DIV = 0x091 - SYS___LOG2F_H = 0x91F - SYS___LOG2_H = 0x91E - SYS___LOGB_H = 0x91D - SYS___LOGF_H = 0x91B - SYS___LOGL_H = 0x91C - SYS___LOG_H = 0x91A - SYS_LABS = 0x092 - SYS___POWL_H = 0x92A - SYS___REMAINDER_H = 0x92B - SYS___RINT_H = 0x92C - SYS___SCALB_H = 0x92D - SYS___SINF_H = 0x92F - SYS___SIN_H = 0x92E - SYS_STRNCPY = 0x093 - SYS___TANHF_H = 0x93B - SYS___TANHL_H = 0x93C - SYS___TANH_H = 0x93A - SYS___TGAMMAF_H = 0x93E - SYS___TGAMMA_H = 0x93D - SYS___TRUNC_H = 0x93F - SYS_MEMCPY = 0x094 - SYS_VFWSCANF = 0x94A - SYS_VSWSCANF = 0x94E - SYS_VWSCANF = 0x94C - SYS_INET6_RTH_ADD = 0x95D - SYS_INET6_RTH_INIT = 0x95C - SYS_INET6_RTH_REVERSE = 0x95E - SYS_INET6_RTH_SEGMENTS = 0x95F - SYS_INET6_RTH_SPACE = 0x95B - SYS_MEMMOVE = 0x095 - SYS_WCSTOLD = 0x95A - SYS_STRCPY = 0x096 - SYS_STRCMP = 0x097 - SYS_CABS = 0x98E - SYS_STRCAT = 0x098 - SYS___CABS_B = 0x98F - SYS___POW_II = 0x98A - SYS___POW_II_B = 0x98B - SYS___POW_II_H = 0x98C - SYS_CACOSF = 0x99A - SYS_CACOSL = 0x99D - SYS_STRNCAT = 0x099 - SYS___CACOSF_B = 0x99B - SYS___CACOSF_H = 0x99C - SYS___CACOSL_B = 0x99E - SYS___CACOSL_H = 0x99F - SYS_ISWALPHA = 0x100 - SYS_ISWBLANK = 0x101 - SYS___ISWBLK = 0x101 - SYS_ISWCNTRL = 0x102 - SYS_ISWDIGIT = 0x103 - SYS_ISWGRAPH = 0x104 - SYS_ISWLOWER = 0x105 - SYS_ISWPRINT = 0x106 - SYS_ISWPUNCT = 0x107 - SYS_ISWSPACE = 0x108 - SYS_ISWUPPER = 0x109 - SYS_WCTOB = 0x110 - SYS_MBRLEN = 0x111 - SYS_MBRTOWC = 0x112 - SYS_MBSRTOWC = 0x113 - SYS_MBSRTOWCS = 0x113 - SYS_WCRTOMB = 0x114 - SYS_WCSRTOMB = 0x115 - SYS_WCSRTOMBS = 0x115 - SYS___CSID = 0x116 - SYS___WCSID = 0x117 - SYS_STRPTIME = 0x118 - SYS___STRPTM = 0x118 - SYS_STRFMON = 0x119 - SYS_WCSCOLL = 0x130 - SYS_WCSXFRM = 0x131 - SYS_WCSWIDTH = 0x132 - SYS_WCWIDTH = 0x133 - SYS_WCSFTIME = 0x134 - SYS_SWPRINTF = 0x135 - SYS_VSWPRINT = 0x136 - SYS_VSWPRINTF = 0x136 - SYS_SWSCANF = 0x137 - SYS_REGCOMP = 0x138 - SYS_REGEXEC = 0x139 - SYS_GETWC = 0x140 - SYS_GETWCHAR = 0x141 - SYS_PUTWC = 0x142 - SYS_PUTWCHAR = 0x143 - SYS_UNGETWC = 0x144 - SYS_ICONV_OPEN = 0x145 - SYS_ICONV = 0x146 - SYS_ICONV_CLOSE = 0x147 - SYS_COLLRANGE = 0x150 - SYS_CCLASS = 0x151 - SYS_COLLORDER = 0x152 - SYS___DEMANGLE = 0x154 - SYS_FDOPEN = 0x155 - SYS___ERRNO = 0x156 - SYS___ERRNO2 = 0x157 - SYS___TERROR = 0x158 - SYS_MAXCOLL = 0x169 - SYS_DLLLOAD = 0x170 - SYS__EXIT = 0x174 - SYS_ACCESS = 0x175 - SYS_ALARM = 0x176 - SYS_CFGETISPEED = 0x177 - SYS_CFGETOSPEED = 0x178 - SYS_CFSETISPEED = 0x179 - SYS_CREAT = 0x180 - SYS_CTERMID = 0x181 - SYS_DUP = 0x182 - SYS_DUP2 = 0x183 - SYS_EXECL = 0x184 - SYS_EXECLE = 0x185 - SYS_EXECLP = 0x186 - SYS_EXECV = 0x187 - SYS_EXECVE = 0x188 - SYS_EXECVP = 0x189 - SYS_FSTAT = 0x190 - SYS_FSYNC = 0x191 - SYS_FTRUNCATE = 0x192 - SYS_GETCWD = 0x193 - SYS_GETEGID = 0x194 - SYS_GETEUID = 0x195 - SYS_GETGID = 0x196 - SYS_GETGRGID = 0x197 - SYS_GETGRNAM = 0x198 - SYS_GETGROUPS = 0x199 - SYS_PTHREAD_MUTEXATTR_DESTROY = 0x200 - SYS_PTHREAD_MUTEXATTR_SETKIND_NP = 0x201 - SYS_PTHREAD_MUTEXATTR_GETKIND_NP = 0x202 - SYS_PTHREAD_MUTEX_INIT = 0x203 - SYS_PTHREAD_MUTEX_DESTROY = 0x204 - SYS_PTHREAD_MUTEX_LOCK = 0x205 - SYS_PTHREAD_MUTEX_TRYLOCK = 0x206 - SYS_PTHREAD_MUTEX_UNLOCK = 0x207 - SYS_PTHREAD_ONCE = 0x209 - SYS_TW_OPEN = 0x210 - SYS_TW_FCNTL = 0x211 - SYS_PTHREAD_JOIN_D4_NP = 0x212 - SYS_PTHREAD_CONDATTR_SETKIND_NP = 0x213 - SYS_PTHREAD_CONDATTR_GETKIND_NP = 0x214 - SYS_EXTLINK_NP = 0x215 - SYS___PASSWD = 0x216 - SYS_SETGROUPS = 0x217 - SYS_INITGROUPS = 0x218 - SYS_WCSRCHR = 0x240 - SYS_SVC99 = 0x241 - SYS___SVC99 = 0x241 - SYS_WCSWCS = 0x242 - SYS_LOCALECO = 0x243 - SYS_LOCALECONV = 0x243 - SYS___LIBREL = 0x244 - SYS_RELEASE = 0x245 - SYS___RLSE = 0x245 - SYS_FLOCATE = 0x246 - SYS___FLOCT = 0x246 - SYS_FDELREC = 0x247 - SYS___FDLREC = 0x247 - SYS_FETCH = 0x248 - SYS___FETCH = 0x248 - SYS_QSORT = 0x249 - SYS___CLEANUPCATCH = 0x260 - SYS___CATCHMATCH = 0x261 - SYS___CLEAN2UPCATCH = 0x262 - SYS_GETPRIORITY = 0x270 - SYS_NICE = 0x271 - SYS_SETPRIORITY = 0x272 - SYS_GETITIMER = 0x273 - SYS_SETITIMER = 0x274 - SYS_MSGCTL = 0x275 - SYS_MSGGET = 0x276 - SYS_MSGRCV = 0x277 - SYS_MSGSND = 0x278 - SYS_MSGXRCV = 0x279 - SYS___MSGXR = 0x279 - SYS_SHMGET = 0x280 - SYS___GETIPC = 0x281 - SYS_SETGRENT = 0x282 - SYS_GETGRENT = 0x283 - SYS_ENDGRENT = 0x284 - SYS_SETPWENT = 0x285 - SYS_GETPWENT = 0x286 - SYS_ENDPWENT = 0x287 - SYS_BSD_SIGNAL = 0x288 - SYS_KILLPG = 0x289 - SYS_SIGSET = 0x290 - SYS_SIGSTACK = 0x291 - SYS_GETRLIMIT = 0x292 - SYS_SETRLIMIT = 0x293 - SYS_GETRUSAGE = 0x294 - SYS_MMAP = 0x295 - SYS_MPROTECT = 0x296 - SYS_MSYNC = 0x297 - SYS_MUNMAP = 0x298 - SYS_CONFSTR = 0x299 - SYS___NDMTRM = 0x300 - SYS_FTOK = 0x301 - SYS_BASENAME = 0x302 - SYS_DIRNAME = 0x303 - SYS_GETDTABLESIZE = 0x304 - SYS_MKSTEMP = 0x305 - SYS_MKTEMP = 0x306 - SYS_NFTW = 0x307 - SYS_GETWD = 0x308 - SYS_LOCKF = 0x309 - SYS_WORDEXP = 0x310 - SYS_WORDFREE = 0x311 - SYS_GETPGID = 0x312 - SYS_GETSID = 0x313 - SYS___UTMPXNAME = 0x314 - SYS_CUSERID = 0x315 - SYS_GETPASS = 0x316 - SYS_FNMATCH = 0x317 - SYS_FTW = 0x318 - SYS_GETW = 0x319 - SYS_ACOSH = 0x320 - SYS_ASINH = 0x321 - SYS_ATANH = 0x322 - SYS_CBRT = 0x323 - SYS_EXPM1 = 0x324 - SYS_ILOGB = 0x325 - SYS_LOGB = 0x326 - SYS_LOG1P = 0x327 - SYS_NEXTAFTER = 0x328 - SYS_RINT = 0x329 - SYS_SPAWN = 0x330 - SYS_SPAWNP = 0x331 - SYS_GETLOGIN_UU = 0x332 - SYS_ECVT = 0x333 - SYS_FCVT = 0x334 - SYS_GCVT = 0x335 - SYS_ACCEPT = 0x336 - SYS_BIND = 0x337 - SYS_CONNECT = 0x338 - SYS_ENDHOSTENT = 0x339 - SYS_GETHOSTENT = 0x340 - SYS_GETHOSTID = 0x341 - SYS_GETHOSTNAME = 0x342 - SYS_GETNETBYADDR = 0x343 - SYS_GETNETBYNAME = 0x344 - SYS_GETNETENT = 0x345 - SYS_GETPEERNAME = 0x346 - SYS_GETPROTOBYNAME = 0x347 - SYS_GETPROTOBYNUMBER = 0x348 - SYS_GETPROTOENT = 0x349 - SYS_INET_LNAOF = 0x350 - SYS_INET_MAKEADDR = 0x351 - SYS_INET_NETOF = 0x352 - SYS_INET_NETWORK = 0x353 - SYS_INET_NTOA = 0x354 - SYS_IOCTL = 0x355 - SYS_LISTEN = 0x356 - SYS_READV = 0x357 - SYS_RECV = 0x358 - SYS_RECVFROM = 0x359 - SYS_SETHOSTENT = 0x360 - SYS_SETNETENT = 0x361 - SYS_SETPEER = 0x362 - SYS_SETPROTOENT = 0x363 - SYS_SETSERVENT = 0x364 - SYS_SETSOCKOPT = 0x365 - SYS_SHUTDOWN = 0x366 - SYS_SOCKET = 0x367 - SYS_SOCKETPAIR = 0x368 - SYS_WRITEV = 0x369 - SYS_ENDNETENT = 0x370 - SYS_CLOSELOG = 0x371 - SYS_OPENLOG = 0x372 - SYS_SETLOGMASK = 0x373 - SYS_SYSLOG = 0x374 - SYS_PTSNAME = 0x375 - SYS_SETREUID = 0x376 - SYS_SETREGID = 0x377 - SYS_REALPATH = 0x378 - SYS___SIGNGAM = 0x379 - SYS_POLL = 0x380 - SYS_REXEC = 0x381 - SYS___ISASCII2 = 0x382 - SYS___TOASCII2 = 0x383 - SYS_CHPRIORITY = 0x384 - SYS_PTHREAD_ATTR_SETSYNCTYPE_NP = 0x385 - SYS_PTHREAD_ATTR_GETSYNCTYPE_NP = 0x386 - SYS_PTHREAD_SET_LIMIT_NP = 0x387 - SYS___STNETENT = 0x388 - SYS___STPROTOENT = 0x389 - SYS___SELECT1 = 0x390 - SYS_PTHREAD_SECURITY_NP = 0x391 - SYS___CHECK_RESOURCE_AUTH_NP = 0x392 - SYS___CONVERT_ID_NP = 0x393 - SYS___OPENVMREL = 0x394 - SYS_WMEMCHR = 0x395 - SYS_WMEMCMP = 0x396 - SYS_WMEMCPY = 0x397 - SYS_WMEMMOVE = 0x398 - SYS_WMEMSET = 0x399 - SYS___FPUTWC = 0x400 - SYS___PUTWC = 0x401 - SYS___PWCHAR = 0x402 - SYS___WCSFTM = 0x403 - SYS___WCSTOK = 0x404 - SYS___WCWDTH = 0x405 - SYS_T_ACCEPT = 0x409 - SYS_T_GETINFO = 0x410 - SYS_T_GETPROTADDR = 0x411 - SYS_T_GETSTATE = 0x412 - SYS_T_LISTEN = 0x413 - SYS_T_LOOK = 0x414 - SYS_T_OPEN = 0x415 - SYS_T_OPTMGMT = 0x416 - SYS_T_RCV = 0x417 - SYS_T_RCVCONNECT = 0x418 - SYS_T_RCVDIS = 0x419 - SYS_T_SNDUDATA = 0x420 - SYS_T_STRERROR = 0x421 - SYS_T_SYNC = 0x422 - SYS_T_UNBIND = 0x423 - SYS___T_ERRNO = 0x424 - SYS___RECVMSG2 = 0x425 - SYS___SENDMSG2 = 0x426 - SYS_FATTACH = 0x427 - SYS_FDETACH = 0x428 - SYS_GETMSG = 0x429 - SYS_GETCONTEXT = 0x430 - SYS_SETCONTEXT = 0x431 - SYS_MAKECONTEXT = 0x432 - SYS_SWAPCONTEXT = 0x433 - SYS_PTHREAD_GETSPECIFIC_D8_NP = 0x434 - SYS_GETCLIENTID = 0x470 - SYS___GETCLIENTID = 0x471 - SYS_GETSTABLESIZE = 0x472 - SYS_GETIBMOPT = 0x473 - SYS_GETIBMSOCKOPT = 0x474 - SYS_GIVESOCKET = 0x475 - SYS_IBMSFLUSH = 0x476 - SYS_MAXDESC = 0x477 - SYS_SETIBMOPT = 0x478 - SYS_SETIBMSOCKOPT = 0x479 - SYS___SERVER_PWU = 0x480 - SYS_PTHREAD_TAG_NP = 0x481 - SYS___CONSOLE = 0x482 - SYS___WSINIT = 0x483 - SYS___IPTCPN = 0x489 - SYS___SERVER_CLASSIFY = 0x490 - SYS___HEAPRPT = 0x496 - SYS___ISBFP = 0x500 - SYS___FP_CAST = 0x501 - SYS___CERTIFICATE = 0x502 - SYS_SEND_FILE = 0x503 - SYS_AIO_CANCEL = 0x504 - SYS_AIO_ERROR = 0x505 - SYS_AIO_READ = 0x506 - SYS_AIO_RETURN = 0x507 - SYS_AIO_SUSPEND = 0x508 - SYS_AIO_WRITE = 0x509 - SYS_PTHREAD_RWLOCK_TRYWRLOCK = 0x510 - SYS_PTHREAD_RWLOCK_UNLOCK = 0x511 - SYS_PTHREAD_RWLOCK_WRLOCK = 0x512 - SYS_PTHREAD_RWLOCKATTR_GETPSHARED = 0x513 - SYS_PTHREAD_RWLOCKATTR_SETPSHARED = 0x514 - SYS_PTHREAD_RWLOCKATTR_INIT = 0x515 - SYS_PTHREAD_RWLOCKATTR_DESTROY = 0x516 - SYS___CTTBL = 0x517 - SYS_PTHREAD_MUTEXATTR_SETTYPE = 0x518 - SYS_PTHREAD_MUTEXATTR_GETTYPE = 0x519 - SYS___FP_UNORDERED = 0x520 - SYS___FP_READ_RND = 0x521 - SYS___FP_READ_RND_B = 0x522 - SYS___FP_SWAP_RND = 0x523 - SYS___FP_SWAP_RND_B = 0x524 - SYS___FP_LEVEL = 0x525 - SYS___FP_BTOH = 0x526 - SYS___FP_HTOB = 0x527 - SYS___FPC_RD = 0x528 - SYS___FPC_WR = 0x529 - SYS_PTHREAD_SETCANCELTYPE = 0x600 - SYS_PTHREAD_TESTCANCEL = 0x601 - SYS___ATANF_B = 0x602 - SYS___ATANL_B = 0x603 - SYS___CEILF_B = 0x604 - SYS___CEILL_B = 0x605 - SYS___COSF_B = 0x606 - SYS___COSL_B = 0x607 - SYS___FABSF_B = 0x608 - SYS___FABSL_B = 0x609 - SYS___SINF_B = 0x610 - SYS___SINL_B = 0x611 - SYS___TANF_B = 0x612 - SYS___TANL_B = 0x613 - SYS___TANHF_B = 0x614 - SYS___TANHL_B = 0x615 - SYS___ACOSF_B = 0x616 - SYS___ACOSL_B = 0x617 - SYS___ASINF_B = 0x618 - SYS___ASINL_B = 0x619 - SYS___LOGF_B = 0x620 - SYS___LOGL_B = 0x621 - SYS___LOG10F_B = 0x622 - SYS___LOG10L_B = 0x623 - SYS___POWF_B = 0x624 - SYS___POWL_B = 0x625 - SYS___SINHF_B = 0x626 - SYS___SINHL_B = 0x627 - SYS___SQRTF_B = 0x628 - SYS___SQRTL_B = 0x629 - SYS___MODFL_B = 0x630 - SYS_ABSF = 0x631 - SYS_ABSL = 0x632 - SYS_ACOSF = 0x633 - SYS_ACOSL = 0x634 - SYS_ASINF = 0x635 - SYS_ASINL = 0x636 - SYS_ATAN2F = 0x637 - SYS_ATAN2L = 0x638 - SYS_ATANF = 0x639 - SYS_COSHL = 0x640 - SYS_EXPF = 0x641 - SYS_EXPL = 0x642 - SYS_TANHF = 0x643 - SYS_TANHL = 0x644 - SYS_LOG10F = 0x645 - SYS_LOG10L = 0x646 - SYS_LOGF = 0x647 - SYS_LOGL = 0x648 - SYS_POWF = 0x649 - SYS_SINHL = 0x650 - SYS_TANF = 0x651 - SYS_TANL = 0x652 - SYS_FABSF = 0x653 - SYS_FABSL = 0x654 - SYS_FLOORF = 0x655 - SYS_FLOORL = 0x656 - SYS_FMODF = 0x657 - SYS_FMODL = 0x658 - SYS_FREXPF = 0x659 - SYS___CHATTR = 0x660 - SYS___FCHATTR = 0x661 - SYS___TOCCSID = 0x662 - SYS___CSNAMETYPE = 0x663 - SYS___TOCSNAME = 0x664 - SYS___CCSIDTYPE = 0x665 - SYS___AE_CORRESTBL_QUERY = 0x666 - SYS___AE_AUTOCONVERT_STATE = 0x667 - SYS_DN_FIND = 0x668 - SYS___GETHOSTBYADDR_A = 0x669 - SYS___MBLEN_SB_A = 0x670 - SYS___MBLEN_STD_A = 0x671 - SYS___MBLEN_UTF = 0x672 - SYS___MBSTOWCS_A = 0x673 - SYS___MBSTOWCS_STD_A = 0x674 - SYS___MBTOWC_A = 0x675 - SYS___MBTOWC_ISO1 = 0x676 - SYS___MBTOWC_SBCS = 0x677 - SYS___MBTOWC_MBCS = 0x678 - SYS___MBTOWC_UTF = 0x679 - SYS___CSID_A = 0x680 - SYS___CSID_STD_A = 0x681 - SYS___WCSID_A = 0x682 - SYS___WCSID_STD_A = 0x683 - SYS___WCTOMB_A = 0x684 - SYS___WCTOMB_ISO1 = 0x685 - SYS___WCTOMB_STD_A = 0x686 - SYS___WCTOMB_UTF = 0x687 - SYS___WCWIDTH_A = 0x688 - SYS___GETGRNAM_R_A = 0x689 - SYS___READDIR_R_A = 0x690 - SYS___E2A_S = 0x691 - SYS___FNMATCH_A = 0x692 - SYS___FNMATCH_C_A = 0x693 - SYS___EXECL_A = 0x694 - SYS___FNMATCH_STD_A = 0x695 - SYS___REGCOMP_A = 0x696 - SYS___REGCOMP_STD_A = 0x697 - SYS___REGERROR_A = 0x698 - SYS___REGERROR_STD_A = 0x699 - SYS___SWPRINTF_A = 0x700 - SYS___FSCANF_A = 0x701 - SYS___SCANF_A = 0x702 - SYS___SSCANF_A = 0x703 - SYS___SWSCANF_A = 0x704 - SYS___ATOF_A = 0x705 - SYS___ATOI_A = 0x706 - SYS___ATOL_A = 0x707 - SYS___STRTOD_A = 0x708 - SYS___STRTOL_A = 0x709 - SYS___L64A_A = 0x710 - SYS___STRERROR_A = 0x711 - SYS___PERROR_A = 0x712 - SYS___FETCH_A = 0x713 - SYS___GETENV_A = 0x714 - SYS___MKSTEMP_A = 0x717 - SYS___PTSNAME_A = 0x718 - SYS___PUTENV_A = 0x719 - SYS___CHDIR_A = 0x720 - SYS___CHOWN_A = 0x721 - SYS___CHROOT_A = 0x722 - SYS___GETCWD_A = 0x723 - SYS___GETWD_A = 0x724 - SYS___LCHOWN_A = 0x725 - SYS___LINK_A = 0x726 - SYS___PATHCONF_A = 0x727 - SYS___IF_NAMEINDEX_A = 0x728 - SYS___READLINK_A = 0x729 - SYS___EXTLINK_NP_A = 0x730 - SYS___ISALNUM_A = 0x731 - SYS___ISALPHA_A = 0x732 - SYS___A2E_S = 0x733 - SYS___ISCNTRL_A = 0x734 - SYS___ISDIGIT_A = 0x735 - SYS___ISGRAPH_A = 0x736 - SYS___ISLOWER_A = 0x737 - SYS___ISPRINT_A = 0x738 - SYS___ISPUNCT_A = 0x739 - SYS___ISWALPHA_A = 0x740 - SYS___A2E_L = 0x741 - SYS___ISWCNTRL_A = 0x742 - SYS___ISWDIGIT_A = 0x743 - SYS___ISWGRAPH_A = 0x744 - SYS___ISWLOWER_A = 0x745 - SYS___ISWPRINT_A = 0x746 - SYS___ISWPUNCT_A = 0x747 - SYS___ISWSPACE_A = 0x748 - SYS___ISWUPPER_A = 0x749 - SYS___REMOVE_A = 0x750 - SYS___RENAME_A = 0x751 - SYS___TMPNAM_A = 0x752 - SYS___FOPEN_A = 0x753 - SYS___FREOPEN_A = 0x754 - SYS___CUSERID_A = 0x755 - SYS___POPEN_A = 0x756 - SYS___TEMPNAM_A = 0x757 - SYS___FTW_A = 0x758 - SYS___GETGRENT_A = 0x759 - SYS___INET_NTOP_A = 0x760 - SYS___GETPASS_A = 0x761 - SYS___GETPWENT_A = 0x762 - SYS___GETPWNAM_A = 0x763 - SYS___GETPWUID_A = 0x764 - SYS_____CHECK_RESOURCE_AUTH_NP_A = 0x765 - SYS___CHECKSCHENV_A = 0x766 - SYS___CONNECTSERVER_A = 0x767 - SYS___CONNECTWORKMGR_A = 0x768 - SYS_____CONSOLE_A = 0x769 - SYS___MSGSND_A = 0x770 - SYS___MSGXRCV_A = 0x771 - SYS___NFTW_A = 0x772 - SYS_____PASSWD_A = 0x773 - SYS___PTHREAD_SECURITY_NP_A = 0x774 - SYS___QUERYMETRICS_A = 0x775 - SYS___QUERYSCHENV = 0x776 - SYS___READV_A = 0x777 - SYS_____SERVER_CLASSIFY_A = 0x778 - SYS_____SERVER_INIT_A = 0x779 - SYS___W_GETPSENT_A = 0x780 - SYS___WRITEV_A = 0x781 - SYS___W_STATFS_A = 0x782 - SYS___W_STATVFS_A = 0x783 - SYS___FPUTC_A = 0x784 - SYS___PUTCHAR_A = 0x785 - SYS___PUTS_A = 0x786 - SYS___FGETS_A = 0x787 - SYS___GETS_A = 0x788 - SYS___FPUTS_A = 0x789 - SYS___PUTC_A = 0x790 - SYS___AE_THREAD_SETMODE = 0x791 - SYS___AE_THREAD_SWAPMODE = 0x792 - SYS___GETNETBYADDR_A = 0x793 - SYS___GETNETBYNAME_A = 0x794 - SYS___GETNETENT_A = 0x795 - SYS___GETPROTOBYNAME_A = 0x796 - SYS___GETPROTOBYNUMBER_A = 0x797 - SYS___GETPROTOENT_A = 0x798 - SYS___GETSERVBYNAME_A = 0x799 - SYS_ACL_FIRST_ENTRY = 0x800 - SYS_ACL_GET_ENTRY = 0x801 - SYS_ACL_VALID = 0x802 - SYS_ACL_CREATE_ENTRY = 0x803 - SYS_ACL_DELETE_ENTRY = 0x804 - SYS_ACL_UPDATE_ENTRY = 0x805 - SYS_ACL_DELETE_FD = 0x806 - SYS_ACL_DELETE_FILE = 0x807 - SYS_ACL_GET_FD = 0x808 - SYS_ACL_GET_FILE = 0x809 - SYS___ERFL_B = 0x810 - SYS___ERFCL_B = 0x811 - SYS___LGAMMAL_B = 0x812 - SYS___SETHOOKEVENTS = 0x813 - SYS_IF_NAMETOINDEX = 0x814 - SYS_IF_INDEXTONAME = 0x815 - SYS_IF_NAMEINDEX = 0x816 - SYS_IF_FREENAMEINDEX = 0x817 - SYS_GETADDRINFO = 0x818 - SYS_GETNAMEINFO = 0x819 - SYS___DYNFREE_A = 0x820 - SYS___RES_QUERY_A = 0x821 - SYS___RES_SEARCH_A = 0x822 - SYS___RES_QUERYDOMAIN_A = 0x823 - SYS___RES_MKQUERY_A = 0x824 - SYS___RES_SEND_A = 0x825 - SYS___DN_EXPAND_A = 0x826 - SYS___DN_SKIPNAME_A = 0x827 - SYS___DN_COMP_A = 0x828 - SYS___DN_FIND_A = 0x829 - SYS___INET_NTOA_A = 0x830 - SYS___INET_NETWORK_A = 0x831 - SYS___ACCEPT_A = 0x832 - SYS___ACCEPT_AND_RECV_A = 0x833 - SYS___BIND_A = 0x834 - SYS___CONNECT_A = 0x835 - SYS___GETPEERNAME_A = 0x836 - SYS___GETSOCKNAME_A = 0x837 - SYS___RECVFROM_A = 0x838 - SYS___SENDTO_A = 0x839 - SYS___LCHATTR = 0x840 - SYS___WRITEDOWN = 0x841 - SYS_PTHREAD_MUTEX_INIT2 = 0x842 - SYS___ACOSHF_B = 0x843 - SYS___ACOSHL_B = 0x844 - SYS___ASINHF_B = 0x845 - SYS___ASINHL_B = 0x846 - SYS___ATANHF_B = 0x847 - SYS___ATANHL_B = 0x848 - SYS___CBRTF_B = 0x849 - SYS___EXP2F_B = 0x850 - SYS___EXP2L_B = 0x851 - SYS___EXPM1F_B = 0x852 - SYS___EXPM1L_B = 0x853 - SYS___FDIMF_B = 0x854 - SYS___FDIM_B = 0x855 - SYS___FDIML_B = 0x856 - SYS___HYPOTF_B = 0x857 - SYS___HYPOTL_B = 0x858 - SYS___LOG1PF_B = 0x859 - SYS___REMQUOF_B = 0x860 - SYS___REMQUO_B = 0x861 - SYS___REMQUOL_B = 0x862 - SYS___TGAMMAF_B = 0x863 - SYS___TGAMMA_B = 0x864 - SYS___TGAMMAL_B = 0x865 - SYS___TRUNCF_B = 0x866 - SYS___TRUNC_B = 0x867 - SYS___TRUNCL_B = 0x868 - SYS___LGAMMAF_B = 0x869 - SYS_ASINHF = 0x870 - SYS_ASINHL = 0x871 - SYS_ATANHF = 0x872 - SYS_ATANHL = 0x873 - SYS_CBRTF = 0x874 - SYS_CBRTL = 0x875 - SYS_COPYSIGNF = 0x876 - SYS_CPYSIGNF = 0x876 - SYS_COPYSIGNL = 0x877 - SYS_CPYSIGNL = 0x877 - SYS_COTANF = 0x878 - SYS___COTANF = 0x878 - SYS_COTAN = 0x879 - SYS___COTAN = 0x879 - SYS_FDIM = 0x881 - SYS_FDIML = 0x882 - SYS_HYPOTF = 0x883 - SYS_HYPOTL = 0x884 - SYS_LOG1PF = 0x885 - SYS_LOG1PL = 0x886 - SYS_LOG2F = 0x887 - SYS_LOG2 = 0x888 - SYS_LOG2L = 0x889 - SYS_TGAMMA = 0x890 - SYS_TGAMMAL = 0x891 - SYS_TRUNCF = 0x892 - SYS_TRUNC = 0x893 - SYS_TRUNCL = 0x894 - SYS_LGAMMAF = 0x895 - SYS_LGAMMAL = 0x896 - SYS_LROUNDF = 0x897 - SYS_LROUND = 0x898 - SYS_ERFF = 0x899 - SYS___COSHF_H = 0x900 - SYS___COSHL_H = 0x901 - SYS___COTAN_H = 0x902 - SYS___COTANF_H = 0x903 - SYS___COTANL_H = 0x904 - SYS___ERF_H = 0x905 - SYS___ERFF_H = 0x906 - SYS___ERFL_H = 0x907 - SYS___ERFC_H = 0x908 - SYS___ERFCF_H = 0x909 - SYS___FDIMF_H = 0x910 - SYS___FDIML_H = 0x911 - SYS___FMOD_H = 0x912 - SYS___FMODF_H = 0x913 - SYS___FMODL_H = 0x914 - SYS___GAMMA_H = 0x915 - SYS___HYPOT_H = 0x916 - SYS___ILOGB_H = 0x917 - SYS___LGAMMA_H = 0x918 - SYS___LGAMMAF_H = 0x919 - SYS___LOG2L_H = 0x920 - SYS___LOG1P_H = 0x921 - SYS___LOG10_H = 0x922 - SYS___LOG10F_H = 0x923 - SYS___LOG10L_H = 0x924 - SYS___LROUND_H = 0x925 - SYS___LROUNDF_H = 0x926 - SYS___NEXTAFTER_H = 0x927 - SYS___POW_H = 0x928 - SYS___POWF_H = 0x929 - SYS___SINL_H = 0x930 - SYS___SINH_H = 0x931 - SYS___SINHF_H = 0x932 - SYS___SINHL_H = 0x933 - SYS___SQRT_H = 0x934 - SYS___SQRTF_H = 0x935 - SYS___SQRTL_H = 0x936 - SYS___TAN_H = 0x937 - SYS___TANF_H = 0x938 - SYS___TANL_H = 0x939 - SYS___TRUNCF_H = 0x940 - SYS___TRUNCL_H = 0x941 - SYS___COSH_H = 0x942 - SYS___LE_DEBUG_SET_RESUME_MCH = 0x943 - SYS_VFSCANF = 0x944 - SYS_VSCANF = 0x946 - SYS_VSSCANF = 0x948 - SYS_IMAXABS = 0x950 - SYS_IMAXDIV = 0x951 - SYS_STRTOIMAX = 0x952 - SYS_STRTOUMAX = 0x953 - SYS_WCSTOIMAX = 0x954 - SYS_WCSTOUMAX = 0x955 - SYS_ATOLL = 0x956 - SYS_STRTOF = 0x957 - SYS_STRTOLD = 0x958 - SYS_WCSTOF = 0x959 - SYS_INET6_RTH_GETADDR = 0x960 - SYS_INET6_OPT_INIT = 0x961 - SYS_INET6_OPT_APPEND = 0x962 - SYS_INET6_OPT_FINISH = 0x963 - SYS_INET6_OPT_SET_VAL = 0x964 - SYS_INET6_OPT_NEXT = 0x965 - SYS_INET6_OPT_FIND = 0x966 - SYS_INET6_OPT_GET_VAL = 0x967 - SYS___POW_I = 0x987 - SYS___POW_I_B = 0x988 - SYS___POW_I_H = 0x989 - SYS___CABS_H = 0x990 - SYS_CABSF = 0x991 - SYS___CABSF_B = 0x992 - SYS___CABSF_H = 0x993 - SYS_CABSL = 0x994 - SYS___CABSL_B = 0x995 - SYS___CABSL_H = 0x996 - SYS_CACOS = 0x997 - SYS___CACOS_B = 0x998 - SYS___CACOS_H = 0x999 -) diff --git a/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go b/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go deleted file mode 100644 index 7a8161c..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go +++ /dev/null @@ -1,354 +0,0 @@ -// cgo -godefs types_aix.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build ppc && aix -// +build ppc,aix - -package unix - -const ( - SizeofPtr = 0x4 - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLong = 0x4 - SizeofLongLong = 0x8 - PathMax = 0x3ff -) - -type ( - _C_short int16 - _C_int int32 - _C_long int32 - _C_long_long int64 -) - -type off64 int64 -type off int32 -type Mode_t uint32 - -type Timespec struct { - Sec int32 - Nsec int32 -} - -type Timeval struct { - Sec int32 - Usec int32 -} - -type Timeval32 struct { - Sec int32 - Usec int32 -} - -type Timex struct{} - -type Time_t int32 - -type Tms struct{} - -type Utimbuf struct { - Actime int32 - Modtime int32 -} - -type Timezone struct { - Minuteswest int32 - Dsttime int32 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int32 - Ixrss int32 - Idrss int32 - Isrss int32 - Minflt int32 - Majflt int32 - Nswap int32 - Inblock int32 - Oublock int32 - Msgsnd int32 - Msgrcv int32 - Nsignals int32 - Nvcsw int32 - Nivcsw int32 -} - -type Rlimit struct { - Cur uint64 - Max uint64 -} - -type Pid_t int32 - -type _Gid_t uint32 - -type dev_t uint32 - -type Stat_t struct { - Dev uint32 - Ino uint32 - Mode uint32 - Nlink int16 - Flag uint16 - Uid uint32 - Gid uint32 - Rdev uint32 - Size int32 - Atim Timespec - Mtim Timespec - Ctim Timespec - Blksize int32 - Blocks int32 - Vfstype int32 - Vfs uint32 - Type uint32 - Gen uint32 - Reserved [9]uint32 -} - -type StatxTimestamp struct{} - -type Statx_t struct{} - -type Dirent struct { - Offset uint32 - Ino uint32 - Reclen uint16 - Namlen uint16 - Name [256]uint8 -} - -type RawSockaddrInet4 struct { - Len uint8 - Family uint8 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]uint8 -} - -type RawSockaddrInet6 struct { - Len uint8 - Family uint8 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 -} - -type RawSockaddrUnix struct { - Len uint8 - Family uint8 - Path [1023]uint8 -} - -type RawSockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [120]uint8 -} - -type RawSockaddr struct { - Len uint8 - Family uint8 - Data [14]uint8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [1012]uint8 -} - -type _Socklen uint32 - -type Cmsghdr struct { - Len uint32 - Level int32 - Type int32 -} - -type ICMPv6Filter struct { - Filt [8]uint32 -} - -type Iovec struct { - Base *byte - Len uint32 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type Linger struct { - Onoff int32 - Linger int32 -} - -type Msghdr struct { - Name *byte - Namelen uint32 - Iov *Iovec - Iovlen int32 - Control *byte - Controllen uint32 - Flags int32 -} - -const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x404 - SizeofSockaddrUnix = 0x401 - SizeofSockaddrDatalink = 0x80 - SizeofLinger = 0x8 - SizeofIovec = 0x8 - SizeofIPMreq = 0x8 - SizeofIPv6Mreq = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofMsghdr = 0x1c - SizeofCmsghdr = 0xc - SizeofICMPv6Filter = 0x20 -) - -const ( - SizeofIfMsghdr = 0x10 -) - -type IfMsgHdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Addrlen uint8 - _ [1]byte -} - -type FdSet struct { - Bits [2048]int32 -} - -type Utsname struct { - Sysname [32]byte - Nodename [32]byte - Release [32]byte - Version [32]byte - Machine [32]byte -} - -type Ustat_t struct{} - -type Sigset_t struct { - Losigs uint32 - Hisigs uint32 -} - -const ( - AT_FDCWD = -0x2 - AT_REMOVEDIR = 0x1 - AT_SYMLINK_NOFOLLOW = 0x1 -) - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [16]uint8 -} - -type Termio struct { - Iflag uint16 - Oflag uint16 - Cflag uint16 - Lflag uint16 - Line uint8 - Cc [8]uint8 - _ [1]byte -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -type PollFd struct { - Fd int32 - Events uint16 - Revents uint16 -} - -const ( - POLLERR = 0x4000 - POLLHUP = 0x2000 - POLLIN = 0x1 - POLLNVAL = 0x8000 - POLLOUT = 0x2 - POLLPRI = 0x4 - POLLRDBAND = 0x20 - POLLRDNORM = 0x10 - POLLWRBAND = 0x40 - POLLWRNORM = 0x2 -) - -type Flock_t struct { - Type int16 - Whence int16 - Sysid uint32 - Pid int32 - Vfs int32 - Start int64 - Len int64 -} - -type Fsid_t struct { - Val [2]uint32 -} -type Fsid64_t struct { - Val [2]uint64 -} - -type Statfs_t struct { - Version int32 - Type int32 - Bsize uint32 - Blocks uint32 - Bfree uint32 - Bavail uint32 - Files uint32 - Ffree uint32 - Fsid Fsid_t - Vfstype int32 - Fsize uint32 - Vfsnumber int32 - Vfsoff int32 - Vfslen int32 - Vfsvers int32 - Fname [32]uint8 - Fpack [32]uint8 - Name_max int32 -} - -const RNDGETENTCNT = 0x80045200 diff --git a/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go deleted file mode 100644 index 07ed733..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go +++ /dev/null @@ -1,358 +0,0 @@ -// cgo -godefs types_aix.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build ppc64 && aix -// +build ppc64,aix - -package unix - -const ( - SizeofPtr = 0x8 - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLong = 0x8 - SizeofLongLong = 0x8 - PathMax = 0x3ff -) - -type ( - _C_short int16 - _C_int int32 - _C_long int64 - _C_long_long int64 -) - -type off64 int64 -type off int64 -type Mode_t uint32 - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int32 - _ [4]byte -} - -type Timeval32 struct { - Sec int32 - Usec int32 -} - -type Timex struct{} - -type Time_t int64 - -type Tms struct{} - -type Utimbuf struct { - Actime int64 - Modtime int64 -} - -type Timezone struct { - Minuteswest int32 - Dsttime int32 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Rlimit struct { - Cur uint64 - Max uint64 -} - -type Pid_t int32 - -type _Gid_t uint32 - -type dev_t uint64 - -type Stat_t struct { - Dev uint64 - Ino uint64 - Mode uint32 - Nlink int16 - Flag uint16 - Uid uint32 - Gid uint32 - Rdev uint64 - Ssize int32 - Atim Timespec - Mtim Timespec - Ctim Timespec - Blksize int64 - Blocks int64 - Vfstype int32 - Vfs uint32 - Type uint32 - Gen uint32 - Reserved [9]uint32 - Padto_ll uint32 - Size int64 -} - -type StatxTimestamp struct{} - -type Statx_t struct{} - -type Dirent struct { - Offset uint64 - Ino uint64 - Reclen uint16 - Namlen uint16 - Name [256]uint8 - _ [4]byte -} - -type RawSockaddrInet4 struct { - Len uint8 - Family uint8 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]uint8 -} - -type RawSockaddrInet6 struct { - Len uint8 - Family uint8 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 -} - -type RawSockaddrUnix struct { - Len uint8 - Family uint8 - Path [1023]uint8 -} - -type RawSockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [120]uint8 -} - -type RawSockaddr struct { - Len uint8 - Family uint8 - Data [14]uint8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [1012]uint8 -} - -type _Socklen uint32 - -type Cmsghdr struct { - Len uint32 - Level int32 - Type int32 -} - -type ICMPv6Filter struct { - Filt [8]uint32 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type Linger struct { - Onoff int32 - Linger int32 -} - -type Msghdr struct { - Name *byte - Namelen uint32 - Iov *Iovec - Iovlen int32 - Control *byte - Controllen uint32 - Flags int32 -} - -const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x404 - SizeofSockaddrUnix = 0x401 - SizeofSockaddrDatalink = 0x80 - SizeofLinger = 0x8 - SizeofIovec = 0x10 - SizeofIPMreq = 0x8 - SizeofIPv6Mreq = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofMsghdr = 0x30 - SizeofCmsghdr = 0xc - SizeofICMPv6Filter = 0x20 -) - -const ( - SizeofIfMsghdr = 0x10 -) - -type IfMsgHdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Addrlen uint8 - _ [1]byte -} - -type FdSet struct { - Bits [1024]int64 -} - -type Utsname struct { - Sysname [32]byte - Nodename [32]byte - Release [32]byte - Version [32]byte - Machine [32]byte -} - -type Ustat_t struct{} - -type Sigset_t struct { - Set [4]uint64 -} - -const ( - AT_FDCWD = -0x2 - AT_REMOVEDIR = 0x1 - AT_SYMLINK_NOFOLLOW = 0x1 -) - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [16]uint8 -} - -type Termio struct { - Iflag uint16 - Oflag uint16 - Cflag uint16 - Lflag uint16 - Line uint8 - Cc [8]uint8 - _ [1]byte -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -type PollFd struct { - Fd int32 - Events uint16 - Revents uint16 -} - -const ( - POLLERR = 0x4000 - POLLHUP = 0x2000 - POLLIN = 0x1 - POLLNVAL = 0x8000 - POLLOUT = 0x2 - POLLPRI = 0x4 - POLLRDBAND = 0x20 - POLLRDNORM = 0x10 - POLLWRBAND = 0x40 - POLLWRNORM = 0x2 -) - -type Flock_t struct { - Type int16 - Whence int16 - Sysid uint32 - Pid int32 - Vfs int32 - Start int64 - Len int64 -} - -type Fsid_t struct { - Val [2]uint32 -} -type Fsid64_t struct { - Val [2]uint64 -} - -type Statfs_t struct { - Version int32 - Type int32 - Bsize uint64 - Blocks uint64 - Bfree uint64 - Bavail uint64 - Files uint64 - Ffree uint64 - Fsid Fsid64_t - Vfstype int32 - Fsize uint64 - Vfsnumber int32 - Vfsoff int32 - Vfslen int32 - Vfsvers int32 - Fname [32]uint8 - Fpack [32]uint8 - Name_max int32 - _ [4]byte -} - -const RNDGETENTCNT = 0x80045200 diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go deleted file mode 100644 index e2a64f0..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go +++ /dev/null @@ -1,795 +0,0 @@ -// cgo -godefs types_darwin.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build amd64 && darwin -// +build amd64,darwin - -package unix - -const ( - SizeofPtr = 0x8 - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLong = 0x8 - SizeofLongLong = 0x8 -) - -type ( - _C_short int16 - _C_int int32 - _C_long int64 - _C_long_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int32 - _ [4]byte -} - -type Timeval32 struct { - Sec int32 - Usec int32 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Rlimit struct { - Cur uint64 - Max uint64 -} - -type _Gid_t uint32 - -type Stat_t struct { - Dev int32 - Mode uint16 - Nlink uint16 - Ino uint64 - Uid uint32 - Gid uint32 - Rdev int32 - Atim Timespec - Mtim Timespec - Ctim Timespec - Btim Timespec - Size int64 - Blocks int64 - Blksize int32 - Flags uint32 - Gen uint32 - Lspare int32 - Qspare [2]int64 -} - -type Statfs_t struct { - Bsize uint32 - Iosize int32 - Blocks uint64 - Bfree uint64 - Bavail uint64 - Files uint64 - Ffree uint64 - Fsid Fsid - Owner uint32 - Type uint32 - Flags uint32 - Fssubtype uint32 - Fstypename [16]byte - Mntonname [1024]byte - Mntfromname [1024]byte - Flags_ext uint32 - Reserved [7]uint32 -} - -type Flock_t struct { - Start int64 - Len int64 - Pid int32 - Type int16 - Whence int16 -} - -type Fstore_t struct { - Flags uint32 - Posmode int32 - Offset int64 - Length int64 - Bytesalloc int64 -} - -type Radvisory_t struct { - Offset int64 - Count int32 - _ [4]byte -} - -type Fbootstraptransfer_t struct { - Offset int64 - Length uint64 - Buffer *byte -} - -type Log2phys_t struct { - Flags uint32 - _ [16]byte -} - -type Fsid struct { - Val [2]int32 -} - -type Dirent struct { - Ino uint64 - Seekoff uint64 - Reclen uint16 - Namlen uint16 - Type uint8 - Name [1024]int8 - _ [3]byte -} - -const ( - PathMax = 0x400 -) - -type RawSockaddrInet4 struct { - Len uint8 - Family uint8 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]int8 -} - -type RawSockaddrInet6 struct { - Len uint8 - Family uint8 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 -} - -type RawSockaddrUnix struct { - Len uint8 - Family uint8 - Path [104]int8 -} - -type RawSockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [12]int8 -} - -type RawSockaddr struct { - Len uint8 - Family uint8 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [92]int8 -} - -type RawSockaddrCtl struct { - Sc_len uint8 - Sc_family uint8 - Ss_sysaddr uint16 - Sc_id uint32 - Sc_unit uint32 - Sc_reserved [5]uint32 -} - -type RawSockaddrVM struct { - Len uint8 - Family uint8 - Reserved1 uint16 - Port uint32 - Cid uint32 -} - -type XVSockPCB struct { - Xv_len uint32 - Xv_vsockpp uint64 - Xvp_local_cid uint32 - Xvp_local_port uint32 - Xvp_remote_cid uint32 - Xvp_remote_port uint32 - Xvp_rxcnt uint32 - Xvp_txcnt uint32 - Xvp_peer_rxhiwat uint32 - Xvp_peer_rxcnt uint32 - Xvp_last_pid int32 - Xvp_gencnt uint64 - Xv_socket XSocket - _ [4]byte -} - -type XSocket struct { - Xso_len uint32 - Xso_so uint32 - So_type int16 - So_options int16 - So_linger int16 - So_state int16 - So_pcb uint32 - Xso_protocol int32 - Xso_family int32 - So_qlen int16 - So_incqlen int16 - So_qlimit int16 - So_timeo int16 - So_error uint16 - So_pgid int32 - So_oobmark uint32 - So_rcv XSockbuf - So_snd XSockbuf - So_uid uint32 -} - -type XSocket64 struct { - Xso_len uint32 - _ [8]byte - So_type int16 - So_options int16 - So_linger int16 - So_state int16 - _ [8]byte - Xso_protocol int32 - Xso_family int32 - So_qlen int16 - So_incqlen int16 - So_qlimit int16 - So_timeo int16 - So_error uint16 - So_pgid int32 - So_oobmark uint32 - So_rcv XSockbuf - So_snd XSockbuf - So_uid uint32 -} - -type XSockbuf struct { - Cc uint32 - Hiwat uint32 - Mbcnt uint32 - Mbmax uint32 - Lowat int32 - Flags int16 - Timeo int16 -} - -type XVSockPgen struct { - Len uint32 - Count uint64 - Gen uint64 - Sogen uint64 -} - -type _Socklen uint32 - -type Xucred struct { - Version uint32 - Uid uint32 - Ngroups int16 - Groups [16]uint32 -} - -type Linger struct { - Onoff int32 - Linger int32 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPMreqn struct { - Multiaddr [4]byte /* in_addr */ - Address [4]byte /* in_addr */ - Ifindex int32 -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface 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 -} - -type Inet4Pktinfo struct { - Ifindex uint32 - Spec_dst [4]byte /* in_addr */ - Addr [4]byte /* in_addr */ -} - -type Inet6Pktinfo struct { - Addr [16]byte /* in6_addr */ - Ifindex uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type ICMPv6Filter struct { - Filt [8]uint32 -} - -type TCPConnectionInfo struct { - State uint8 - Snd_wscale uint8 - Rcv_wscale uint8 - _ uint8 - Options uint32 - Flags uint32 - Rto uint32 - Maxseg uint32 - Snd_ssthresh uint32 - Snd_cwnd uint32 - Snd_wnd uint32 - Snd_sbbytes uint32 - Rcv_wnd uint32 - Rttcur uint32 - Srtt uint32 - Rttvar uint32 - Txpackets uint64 - Txbytes uint64 - Txretransmitbytes uint64 - Rxpackets uint64 - Rxbytes uint64 - Rxoutoforderbytes uint64 - Txretransmitpackets uint64 -} - -const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x6c - SizeofSockaddrUnix = 0x6a - SizeofSockaddrDatalink = 0x14 - SizeofSockaddrCtl = 0x20 - SizeofSockaddrVM = 0xc - SizeofXvsockpcb = 0xa8 - SizeofXSocket = 0x64 - SizeofXSockbuf = 0x18 - SizeofXVSockPgen = 0x20 - SizeofXucred = 0x4c - SizeofLinger = 0x8 - SizeofIovec = 0x10 - SizeofIPMreq = 0x8 - SizeofIPMreqn = 0xc - SizeofIPv6Mreq = 0x14 - SizeofMsghdr = 0x30 - SizeofCmsghdr = 0xc - SizeofInet4Pktinfo = 0xc - SizeofInet6Pktinfo = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofICMPv6Filter = 0x20 - SizeofTCPConnectionInfo = 0x70 -) - -const ( - PTRACE_TRACEME = 0x0 - PTRACE_CONT = 0x7 - PTRACE_KILL = 0x8 -) - -type Kevent_t struct { - Ident uint64 - Filter int16 - Flags uint16 - Fflags uint32 - Data int64 - Udata *byte -} - -type FdSet struct { - Bits [32]int32 -} - -const ( - SizeofIfMsghdr = 0x70 - SizeofIfData = 0x60 - SizeofIfaMsghdr = 0x14 - SizeofIfmaMsghdr = 0x10 - SizeofIfmaMsghdr2 = 0x14 - SizeofRtMsghdr = 0x5c - SizeofRtMetrics = 0x38 -) - -type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Data IfData -} - -type IfData struct { - Type uint8 - Typelen uint8 - Physical uint8 - Addrlen uint8 - Hdrlen uint8 - Recvquota uint8 - Xmitquota uint8 - Unused1 uint8 - Mtu uint32 - Metric uint32 - Baudrate uint32 - Ipackets uint32 - Ierrors uint32 - Opackets uint32 - Oerrors uint32 - Collisions uint32 - Ibytes uint32 - Obytes uint32 - Imcasts uint32 - Omcasts uint32 - Iqdrops uint32 - Noproto uint32 - Recvtiming uint32 - Xmittiming uint32 - Lastchange Timeval32 - Unused2 uint32 - Hwassist uint32 - Reserved1 uint32 - Reserved2 uint32 -} - -type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Metric int32 -} - -type IfmaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - _ [2]byte -} - -type IfmaMsghdr2 struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Refcount int32 -} - -type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Flags int32 - Addrs int32 - Pid int32 - Seq int32 - Errno int32 - Use int32 - Inits uint32 - Rmx RtMetrics -} - -type RtMetrics struct { - Locks uint32 - Mtu uint32 - Hopcount uint32 - Expire int32 - Recvpipe uint32 - Sendpipe uint32 - Ssthresh uint32 - Rtt uint32 - Rttvar uint32 - Pksent uint32 - State uint32 - Filler [3]uint32 -} - -const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x8 - SizeofBpfProgram = 0x10 - SizeofBpfInsn = 0x8 - SizeofBpfHdr = 0x14 -) - -type BpfVersion struct { - Major uint16 - Minor uint16 -} - -type BpfStat struct { - Recv uint32 - Drop uint32 -} - -type BpfProgram struct { - Len uint32 - Insns *BpfInsn -} - -type BpfInsn struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} - -type BpfHdr struct { - Tstamp Timeval32 - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - _ [2]byte -} - -type Termios struct { - Iflag uint64 - Oflag uint64 - Cflag uint64 - Lflag uint64 - Cc [20]uint8 - Ispeed uint64 - Ospeed uint64 -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -const ( - AT_FDCWD = -0x2 - AT_REMOVEDIR = 0x80 - AT_SYMLINK_FOLLOW = 0x40 - AT_SYMLINK_NOFOLLOW = 0x20 -) - -type PollFd struct { - Fd int32 - Events int16 - Revents int16 -} - -const ( - POLLERR = 0x8 - POLLHUP = 0x10 - POLLIN = 0x1 - POLLNVAL = 0x20 - POLLOUT = 0x4 - POLLPRI = 0x2 - POLLRDBAND = 0x80 - POLLRDNORM = 0x40 - POLLWRBAND = 0x100 - POLLWRNORM = 0x4 -) - -type Utsname struct { - Sysname [256]byte - Nodename [256]byte - Release [256]byte - Version [256]byte - Machine [256]byte -} - -const SizeofClockinfo = 0x14 - -type Clockinfo struct { - Hz int32 - Tick int32 - Tickadj int32 - Stathz int32 - Profhz int32 -} - -type CtlInfo struct { - Id uint32 - Name [96]byte -} - -const SizeofKinfoProc = 0x288 - -type Eproc struct { - Paddr uintptr - Sess uintptr - Pcred Pcred - Ucred Ucred - Vm Vmspace - Ppid int32 - Pgid int32 - Jobc int16 - Tdev int32 - Tpgid int32 - Tsess uintptr - Wmesg [8]byte - Xsize int32 - Xrssize int16 - Xccount int16 - Xswrss int16 - Flag int32 - Login [12]byte - Spare [4]int32 - _ [4]byte -} - -type ExternProc struct { - P_starttime Timeval - P_vmspace *Vmspace - P_sigacts uintptr - P_flag int32 - P_stat int8 - P_pid int32 - P_oppid int32 - P_dupfd int32 - User_stack *int8 - Exit_thread *byte - P_debugger int32 - Sigwait int32 - P_estcpu uint32 - P_cpticks int32 - P_pctcpu uint32 - P_wchan *byte - P_wmesg *int8 - P_swtime uint32 - P_slptime uint32 - P_realtimer Itimerval - P_rtime Timeval - P_uticks uint64 - P_sticks uint64 - P_iticks uint64 - P_traceflag int32 - P_tracep uintptr - P_siglist int32 - P_textvp uintptr - P_holdcnt int32 - P_sigmask uint32 - P_sigignore uint32 - P_sigcatch uint32 - P_priority uint8 - P_usrpri uint8 - P_nice int8 - P_comm [17]byte - P_pgrp uintptr - P_addr uintptr - P_xstat uint16 - P_acflag uint16 - P_ru *Rusage -} - -type Itimerval struct { - Interval Timeval - Value Timeval -} - -type KinfoProc struct { - Proc ExternProc - Eproc Eproc -} - -type Vmspace struct { - Dummy int32 - Dummy2 *int8 - Dummy3 [5]int32 - Dummy4 [3]*int8 -} - -type Pcred struct { - Pc_lock [72]int8 - Pc_ucred uintptr - P_ruid uint32 - P_svuid uint32 - P_rgid uint32 - P_svgid uint32 - P_refcnt int32 - _ [4]byte -} - -type Ucred struct { - Ref int32 - Uid uint32 - Ngroups int16 - Groups [16]uint32 -} - -type SysvIpcPerm struct { - Uid uint32 - Gid uint32 - Cuid uint32 - Cgid uint32 - Mode uint16 - _ uint16 - _ int32 -} -type SysvShmDesc struct { - Perm SysvIpcPerm - Segsz uint64 - Lpid int32 - Cpid int32 - Nattch uint16 - _ [34]byte -} - -const ( - IPC_CREAT = 0x200 - IPC_EXCL = 0x400 - IPC_NOWAIT = 0x800 - IPC_PRIVATE = 0x0 -) - -const ( - IPC_RMID = 0x0 - IPC_SET = 0x1 - IPC_STAT = 0x2 -) - -const ( - SHM_RDONLY = 0x1000 - SHM_RND = 0x2000 -) diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go deleted file mode 100644 index 34aa775..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go +++ /dev/null @@ -1,795 +0,0 @@ -// cgo -godefs types_darwin.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm64 && darwin -// +build arm64,darwin - -package unix - -const ( - SizeofPtr = 0x8 - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLong = 0x8 - SizeofLongLong = 0x8 -) - -type ( - _C_short int16 - _C_int int32 - _C_long int64 - _C_long_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int32 - _ [4]byte -} - -type Timeval32 struct { - Sec int32 - Usec int32 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Rlimit struct { - Cur uint64 - Max uint64 -} - -type _Gid_t uint32 - -type Stat_t struct { - Dev int32 - Mode uint16 - Nlink uint16 - Ino uint64 - Uid uint32 - Gid uint32 - Rdev int32 - Atim Timespec - Mtim Timespec - Ctim Timespec - Btim Timespec - Size int64 - Blocks int64 - Blksize int32 - Flags uint32 - Gen uint32 - Lspare int32 - Qspare [2]int64 -} - -type Statfs_t struct { - Bsize uint32 - Iosize int32 - Blocks uint64 - Bfree uint64 - Bavail uint64 - Files uint64 - Ffree uint64 - Fsid Fsid - Owner uint32 - Type uint32 - Flags uint32 - Fssubtype uint32 - Fstypename [16]byte - Mntonname [1024]byte - Mntfromname [1024]byte - Flags_ext uint32 - Reserved [7]uint32 -} - -type Flock_t struct { - Start int64 - Len int64 - Pid int32 - Type int16 - Whence int16 -} - -type Fstore_t struct { - Flags uint32 - Posmode int32 - Offset int64 - Length int64 - Bytesalloc int64 -} - -type Radvisory_t struct { - Offset int64 - Count int32 - _ [4]byte -} - -type Fbootstraptransfer_t struct { - Offset int64 - Length uint64 - Buffer *byte -} - -type Log2phys_t struct { - Flags uint32 - _ [16]byte -} - -type Fsid struct { - Val [2]int32 -} - -type Dirent struct { - Ino uint64 - Seekoff uint64 - Reclen uint16 - Namlen uint16 - Type uint8 - Name [1024]int8 - _ [3]byte -} - -const ( - PathMax = 0x400 -) - -type RawSockaddrInet4 struct { - Len uint8 - Family uint8 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]int8 -} - -type RawSockaddrInet6 struct { - Len uint8 - Family uint8 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 -} - -type RawSockaddrUnix struct { - Len uint8 - Family uint8 - Path [104]int8 -} - -type RawSockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [12]int8 -} - -type RawSockaddr struct { - Len uint8 - Family uint8 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [92]int8 -} - -type RawSockaddrCtl struct { - Sc_len uint8 - Sc_family uint8 - Ss_sysaddr uint16 - Sc_id uint32 - Sc_unit uint32 - Sc_reserved [5]uint32 -} - -type RawSockaddrVM struct { - Len uint8 - Family uint8 - Reserved1 uint16 - Port uint32 - Cid uint32 -} - -type XVSockPCB struct { - Xv_len uint32 - Xv_vsockpp uint64 - Xvp_local_cid uint32 - Xvp_local_port uint32 - Xvp_remote_cid uint32 - Xvp_remote_port uint32 - Xvp_rxcnt uint32 - Xvp_txcnt uint32 - Xvp_peer_rxhiwat uint32 - Xvp_peer_rxcnt uint32 - Xvp_last_pid int32 - Xvp_gencnt uint64 - Xv_socket XSocket - _ [4]byte -} - -type XSocket struct { - Xso_len uint32 - Xso_so uint32 - So_type int16 - So_options int16 - So_linger int16 - So_state int16 - So_pcb uint32 - Xso_protocol int32 - Xso_family int32 - So_qlen int16 - So_incqlen int16 - So_qlimit int16 - So_timeo int16 - So_error uint16 - So_pgid int32 - So_oobmark uint32 - So_rcv XSockbuf - So_snd XSockbuf - So_uid uint32 -} - -type XSocket64 struct { - Xso_len uint32 - _ [8]byte - So_type int16 - So_options int16 - So_linger int16 - So_state int16 - _ [8]byte - Xso_protocol int32 - Xso_family int32 - So_qlen int16 - So_incqlen int16 - So_qlimit int16 - So_timeo int16 - So_error uint16 - So_pgid int32 - So_oobmark uint32 - So_rcv XSockbuf - So_snd XSockbuf - So_uid uint32 -} - -type XSockbuf struct { - Cc uint32 - Hiwat uint32 - Mbcnt uint32 - Mbmax uint32 - Lowat int32 - Flags int16 - Timeo int16 -} - -type XVSockPgen struct { - Len uint32 - Count uint64 - Gen uint64 - Sogen uint64 -} - -type _Socklen uint32 - -type Xucred struct { - Version uint32 - Uid uint32 - Ngroups int16 - Groups [16]uint32 -} - -type Linger struct { - Onoff int32 - Linger int32 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPMreqn struct { - Multiaddr [4]byte /* in_addr */ - Address [4]byte /* in_addr */ - Ifindex int32 -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface 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 -} - -type Inet4Pktinfo struct { - Ifindex uint32 - Spec_dst [4]byte /* in_addr */ - Addr [4]byte /* in_addr */ -} - -type Inet6Pktinfo struct { - Addr [16]byte /* in6_addr */ - Ifindex uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type ICMPv6Filter struct { - Filt [8]uint32 -} - -type TCPConnectionInfo struct { - State uint8 - Snd_wscale uint8 - Rcv_wscale uint8 - _ uint8 - Options uint32 - Flags uint32 - Rto uint32 - Maxseg uint32 - Snd_ssthresh uint32 - Snd_cwnd uint32 - Snd_wnd uint32 - Snd_sbbytes uint32 - Rcv_wnd uint32 - Rttcur uint32 - Srtt uint32 - Rttvar uint32 - Txpackets uint64 - Txbytes uint64 - Txretransmitbytes uint64 - Rxpackets uint64 - Rxbytes uint64 - Rxoutoforderbytes uint64 - Txretransmitpackets uint64 -} - -const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x6c - SizeofSockaddrUnix = 0x6a - SizeofSockaddrDatalink = 0x14 - SizeofSockaddrCtl = 0x20 - SizeofSockaddrVM = 0xc - SizeofXvsockpcb = 0xa8 - SizeofXSocket = 0x64 - SizeofXSockbuf = 0x18 - SizeofXVSockPgen = 0x20 - SizeofXucred = 0x4c - SizeofLinger = 0x8 - SizeofIovec = 0x10 - SizeofIPMreq = 0x8 - SizeofIPMreqn = 0xc - SizeofIPv6Mreq = 0x14 - SizeofMsghdr = 0x30 - SizeofCmsghdr = 0xc - SizeofInet4Pktinfo = 0xc - SizeofInet6Pktinfo = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofICMPv6Filter = 0x20 - SizeofTCPConnectionInfo = 0x70 -) - -const ( - PTRACE_TRACEME = 0x0 - PTRACE_CONT = 0x7 - PTRACE_KILL = 0x8 -) - -type Kevent_t struct { - Ident uint64 - Filter int16 - Flags uint16 - Fflags uint32 - Data int64 - Udata *byte -} - -type FdSet struct { - Bits [32]int32 -} - -const ( - SizeofIfMsghdr = 0x70 - SizeofIfData = 0x60 - SizeofIfaMsghdr = 0x14 - SizeofIfmaMsghdr = 0x10 - SizeofIfmaMsghdr2 = 0x14 - SizeofRtMsghdr = 0x5c - SizeofRtMetrics = 0x38 -) - -type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Data IfData -} - -type IfData struct { - Type uint8 - Typelen uint8 - Physical uint8 - Addrlen uint8 - Hdrlen uint8 - Recvquota uint8 - Xmitquota uint8 - Unused1 uint8 - Mtu uint32 - Metric uint32 - Baudrate uint32 - Ipackets uint32 - Ierrors uint32 - Opackets uint32 - Oerrors uint32 - Collisions uint32 - Ibytes uint32 - Obytes uint32 - Imcasts uint32 - Omcasts uint32 - Iqdrops uint32 - Noproto uint32 - Recvtiming uint32 - Xmittiming uint32 - Lastchange Timeval32 - Unused2 uint32 - Hwassist uint32 - Reserved1 uint32 - Reserved2 uint32 -} - -type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Metric int32 -} - -type IfmaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - _ [2]byte -} - -type IfmaMsghdr2 struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Refcount int32 -} - -type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Flags int32 - Addrs int32 - Pid int32 - Seq int32 - Errno int32 - Use int32 - Inits uint32 - Rmx RtMetrics -} - -type RtMetrics struct { - Locks uint32 - Mtu uint32 - Hopcount uint32 - Expire int32 - Recvpipe uint32 - Sendpipe uint32 - Ssthresh uint32 - Rtt uint32 - Rttvar uint32 - Pksent uint32 - State uint32 - Filler [3]uint32 -} - -const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x8 - SizeofBpfProgram = 0x10 - SizeofBpfInsn = 0x8 - SizeofBpfHdr = 0x14 -) - -type BpfVersion struct { - Major uint16 - Minor uint16 -} - -type BpfStat struct { - Recv uint32 - Drop uint32 -} - -type BpfProgram struct { - Len uint32 - Insns *BpfInsn -} - -type BpfInsn struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} - -type BpfHdr struct { - Tstamp Timeval32 - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - _ [2]byte -} - -type Termios struct { - Iflag uint64 - Oflag uint64 - Cflag uint64 - Lflag uint64 - Cc [20]uint8 - Ispeed uint64 - Ospeed uint64 -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -const ( - AT_FDCWD = -0x2 - AT_REMOVEDIR = 0x80 - AT_SYMLINK_FOLLOW = 0x40 - AT_SYMLINK_NOFOLLOW = 0x20 -) - -type PollFd struct { - Fd int32 - Events int16 - Revents int16 -} - -const ( - POLLERR = 0x8 - POLLHUP = 0x10 - POLLIN = 0x1 - POLLNVAL = 0x20 - POLLOUT = 0x4 - POLLPRI = 0x2 - POLLRDBAND = 0x80 - POLLRDNORM = 0x40 - POLLWRBAND = 0x100 - POLLWRNORM = 0x4 -) - -type Utsname struct { - Sysname [256]byte - Nodename [256]byte - Release [256]byte - Version [256]byte - Machine [256]byte -} - -const SizeofClockinfo = 0x14 - -type Clockinfo struct { - Hz int32 - Tick int32 - Tickadj int32 - Stathz int32 - Profhz int32 -} - -type CtlInfo struct { - Id uint32 - Name [96]byte -} - -const SizeofKinfoProc = 0x288 - -type Eproc struct { - Paddr uintptr - Sess uintptr - Pcred Pcred - Ucred Ucred - Vm Vmspace - Ppid int32 - Pgid int32 - Jobc int16 - Tdev int32 - Tpgid int32 - Tsess uintptr - Wmesg [8]byte - Xsize int32 - Xrssize int16 - Xccount int16 - Xswrss int16 - Flag int32 - Login [12]byte - Spare [4]int32 - _ [4]byte -} - -type ExternProc struct { - P_starttime Timeval - P_vmspace *Vmspace - P_sigacts uintptr - P_flag int32 - P_stat int8 - P_pid int32 - P_oppid int32 - P_dupfd int32 - User_stack *int8 - Exit_thread *byte - P_debugger int32 - Sigwait int32 - P_estcpu uint32 - P_cpticks int32 - P_pctcpu uint32 - P_wchan *byte - P_wmesg *int8 - P_swtime uint32 - P_slptime uint32 - P_realtimer Itimerval - P_rtime Timeval - P_uticks uint64 - P_sticks uint64 - P_iticks uint64 - P_traceflag int32 - P_tracep uintptr - P_siglist int32 - P_textvp uintptr - P_holdcnt int32 - P_sigmask uint32 - P_sigignore uint32 - P_sigcatch uint32 - P_priority uint8 - P_usrpri uint8 - P_nice int8 - P_comm [17]byte - P_pgrp uintptr - P_addr uintptr - P_xstat uint16 - P_acflag uint16 - P_ru *Rusage -} - -type Itimerval struct { - Interval Timeval - Value Timeval -} - -type KinfoProc struct { - Proc ExternProc - Eproc Eproc -} - -type Vmspace struct { - Dummy int32 - Dummy2 *int8 - Dummy3 [5]int32 - Dummy4 [3]*int8 -} - -type Pcred struct { - Pc_lock [72]int8 - Pc_ucred uintptr - P_ruid uint32 - P_svuid uint32 - P_rgid uint32 - P_svgid uint32 - P_refcnt int32 - _ [4]byte -} - -type Ucred struct { - Ref int32 - Uid uint32 - Ngroups int16 - Groups [16]uint32 -} - -type SysvIpcPerm struct { - Uid uint32 - Gid uint32 - Cuid uint32 - Cgid uint32 - Mode uint16 - _ uint16 - _ int32 -} -type SysvShmDesc struct { - Perm SysvIpcPerm - Segsz uint64 - Lpid int32 - Cpid int32 - Nattch uint16 - _ [34]byte -} - -const ( - IPC_CREAT = 0x200 - IPC_EXCL = 0x400 - IPC_NOWAIT = 0x800 - IPC_PRIVATE = 0x0 -) - -const ( - IPC_RMID = 0x0 - IPC_SET = 0x1 - IPC_STAT = 0x2 -) - -const ( - SHM_RDONLY = 0x1000 - SHM_RND = 0x2000 -) diff --git a/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go deleted file mode 100644 index d0ba8e9..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go +++ /dev/null @@ -1,474 +0,0 @@ -// cgo -godefs types_dragonfly.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build amd64 && dragonfly -// +build amd64,dragonfly - -package unix - -const ( - SizeofPtr = 0x8 - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLong = 0x8 - SizeofLongLong = 0x8 -) - -type ( - _C_short int16 - _C_int int32 - _C_long int64 - _C_long_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int64 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Rlimit struct { - Cur int64 - Max int64 -} - -type _Gid_t uint32 - -type Stat_t struct { - Ino uint64 - Nlink uint32 - Dev uint32 - Mode uint16 - _1 uint16 - Uid uint32 - Gid uint32 - Rdev uint32 - Atim Timespec - Mtim Timespec - Ctim Timespec - Size int64 - Blocks int64 - _ uint32 - Flags uint32 - Gen uint32 - Lspare int32 - Blksize int64 - Qspare2 int64 -} - -type Statfs_t struct { - Spare2 int64 - Bsize int64 - Iosize int64 - Blocks int64 - Bfree int64 - Bavail int64 - Files int64 - Ffree int64 - Fsid Fsid - Owner uint32 - Type int32 - Flags int32 - Syncwrites int64 - Asyncwrites int64 - Fstypename [16]byte - Mntonname [80]byte - Syncreads int64 - Asyncreads int64 - Spares1 int16 - Mntfromname [80]byte - Spares2 int16 - Spare [2]int64 -} - -type Flock_t struct { - Start int64 - Len int64 - Pid int32 - Type int16 - Whence int16 -} - -type Dirent struct { - Fileno uint64 - Namlen uint16 - Type uint8 - Unused1 uint8 - Unused2 uint32 - Name [256]int8 -} - -type Fsid struct { - Val [2]int32 -} - -const ( - PathMax = 0x400 -) - -type RawSockaddrInet4 struct { - Len uint8 - Family uint8 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]int8 -} - -type RawSockaddrInet6 struct { - Len uint8 - Family uint8 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 -} - -type RawSockaddrUnix struct { - Len uint8 - Family uint8 - Path [104]int8 -} - -type RawSockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [12]int8 - Rcf uint16 - Route [16]uint16 -} - -type RawSockaddr struct { - Len uint8 - Family uint8 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [92]int8 -} - -type _Socklen uint32 - -type Linger struct { - Onoff int32 - Linger int32 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface 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 -} - -type Inet6Pktinfo struct { - Addr [16]byte /* in6_addr */ - Ifindex uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type ICMPv6Filter struct { - Filt [8]uint32 -} - -const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x6c - SizeofSockaddrUnix = 0x6a - SizeofSockaddrDatalink = 0x36 - SizeofLinger = 0x8 - SizeofIovec = 0x10 - SizeofIPMreq = 0x8 - SizeofIPv6Mreq = 0x14 - SizeofMsghdr = 0x30 - SizeofCmsghdr = 0xc - SizeofInet6Pktinfo = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofICMPv6Filter = 0x20 -) - -const ( - PTRACE_TRACEME = 0x0 - PTRACE_CONT = 0x7 - PTRACE_KILL = 0x8 -) - -type Kevent_t struct { - Ident uint64 - Filter int16 - Flags uint16 - Fflags uint32 - Data int64 - Udata *byte -} - -type FdSet struct { - Bits [16]uint64 -} - -const ( - SizeofIfMsghdr = 0xb0 - SizeofIfData = 0xa0 - SizeofIfaMsghdr = 0x18 - SizeofIfmaMsghdr = 0x10 - SizeofIfAnnounceMsghdr = 0x18 - SizeofRtMsghdr = 0x98 - SizeofRtMetrics = 0x70 -) - -type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Flags int32 - Addrs int32 - Data IfData -} - -type IfData struct { - Type uint8 - Physical uint8 - Addrlen uint8 - Hdrlen uint8 - Recvquota uint8 - Xmitquota uint8 - Mtu uint64 - Metric uint64 - Link_state uint64 - Baudrate uint64 - Ipackets uint64 - Ierrors uint64 - Opackets uint64 - Oerrors uint64 - Collisions uint64 - Ibytes uint64 - Obytes uint64 - Imcasts uint64 - Omcasts uint64 - Iqdrops uint64 - Noproto uint64 - Hwassist uint64 - Oqdrops uint64 - Lastchange Timeval -} - -type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Flags int32 - Addrs int32 - Addrflags int32 - Metric int32 -} - -type IfmaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Flags int32 - Addrs int32 -} - -type IfAnnounceMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Name [16]int8 - What uint16 -} - -type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Flags int32 - Addrs int32 - Pid int32 - Seq int32 - Errno int32 - Use int32 - Inits uint64 - Rmx RtMetrics -} - -type RtMetrics struct { - Locks uint64 - Mtu uint64 - Pksent uint64 - Expire uint64 - Sendpipe uint64 - Ssthresh uint64 - Rtt uint64 - Rttvar uint64 - Recvpipe uint64 - Hopcount uint64 - Mssopt uint16 - Pad uint16 - Msl uint64 - Iwmaxsegs uint64 - Iwcapsegs uint64 -} - -const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x8 - SizeofBpfProgram = 0x10 - SizeofBpfInsn = 0x8 - SizeofBpfHdr = 0x20 -) - -type BpfVersion struct { - Major uint16 - Minor uint16 -} - -type BpfStat struct { - Recv uint32 - Drop uint32 -} - -type BpfProgram struct { - Len uint32 - Insns *BpfInsn -} - -type BpfInsn struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} - -type BpfHdr struct { - Tstamp Timeval - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - _ [6]byte -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [20]uint8 - Ispeed uint32 - Ospeed uint32 -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -const ( - AT_FDCWD = 0xfffafdcd - AT_SYMLINK_NOFOLLOW = 0x1 - AT_REMOVEDIR = 0x2 - AT_EACCESS = 0x4 - AT_SYMLINK_FOLLOW = 0x8 -) - -type PollFd struct { - Fd int32 - Events int16 - Revents int16 -} - -const ( - POLLERR = 0x8 - POLLHUP = 0x10 - POLLIN = 0x1 - POLLNVAL = 0x20 - POLLOUT = 0x4 - POLLPRI = 0x2 - POLLRDBAND = 0x80 - POLLRDNORM = 0x40 - POLLWRBAND = 0x100 - POLLWRNORM = 0x4 -) - -type Utsname struct { - Sysname [32]byte - Nodename [32]byte - Release [32]byte - Version [32]byte - Machine [32]byte -} - -const SizeofClockinfo = 0x14 - -type Clockinfo struct { - Hz int32 - Tick int32 - Tickadj int32 - Stathz int32 - Profhz int32 -} diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go deleted file mode 100644 index d9c78cd..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go +++ /dev/null @@ -1,651 +0,0 @@ -// cgo -godefs types_freebsd.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build 386 && freebsd -// +build 386,freebsd - -package unix - -const ( - SizeofPtr = 0x4 - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLong = 0x4 - SizeofLongLong = 0x8 -) - -type ( - _C_short int16 - _C_int int32 - _C_long int32 - _C_long_long int64 -) - -type Timespec struct { - Sec int32 - Nsec int32 -} - -type Timeval struct { - Sec int32 - Usec int32 -} - -type Time_t int32 - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int32 - Ixrss int32 - Idrss int32 - Isrss int32 - Minflt int32 - Majflt int32 - Nswap int32 - Inblock int32 - Oublock int32 - Msgsnd int32 - Msgrcv int32 - Nsignals int32 - Nvcsw int32 - Nivcsw int32 -} - -type Rlimit struct { - Cur int64 - Max int64 -} - -type _Gid_t uint32 - -const ( - _statfsVersion = 0x20140518 - _dirblksiz = 0x400 -) - -type Stat_t struct { - Dev uint64 - Ino uint64 - Nlink uint64 - Mode uint16 - _0 int16 - Uid uint32 - Gid uint32 - _1 int32 - Rdev uint64 - _ int32 - Atim Timespec - _ int32 - Mtim Timespec - _ int32 - Ctim Timespec - _ int32 - Btim Timespec - Size int64 - Blocks int64 - Blksize int32 - Flags uint32 - Gen uint64 - Spare [10]uint64 -} - -type Statfs_t struct { - Version uint32 - Type uint32 - Flags uint64 - Bsize uint64 - Iosize uint64 - Blocks uint64 - Bfree uint64 - Bavail int64 - Files uint64 - Ffree int64 - Syncwrites uint64 - Asyncwrites uint64 - Syncreads uint64 - Asyncreads uint64 - Spare [10]uint64 - Namemax uint32 - Owner uint32 - Fsid Fsid - Charspare [80]int8 - Fstypename [16]byte - Mntfromname [1024]byte - Mntonname [1024]byte -} - -type Flock_t struct { - Start int64 - Len int64 - Pid int32 - Type int16 - Whence int16 - Sysid int32 -} - -type Dirent struct { - Fileno uint64 - Off int64 - Reclen uint16 - Type uint8 - Pad0 uint8 - Namlen uint16 - Pad1 uint16 - Name [256]int8 -} - -type Fsid struct { - Val [2]int32 -} - -const ( - PathMax = 0x400 -) - -const ( - FADV_NORMAL = 0x0 - FADV_RANDOM = 0x1 - FADV_SEQUENTIAL = 0x2 - FADV_WILLNEED = 0x3 - FADV_DONTNEED = 0x4 - FADV_NOREUSE = 0x5 -) - -type RawSockaddrInet4 struct { - Len uint8 - Family uint8 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]int8 -} - -type RawSockaddrInet6 struct { - Len uint8 - Family uint8 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 -} - -type RawSockaddrUnix struct { - Len uint8 - Family uint8 - Path [104]int8 -} - -type RawSockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [46]int8 -} - -type RawSockaddr struct { - Len uint8 - Family uint8 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [92]int8 -} - -type _Socklen uint32 - -type Xucred struct { - Version uint32 - Uid uint32 - Ngroups int16 - Groups [16]uint32 - _ *byte -} - -type Linger struct { - Onoff int32 - Linger int32 -} - -type Iovec struct { - Base *byte - Len uint32 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPMreqn struct { - Multiaddr [4]byte /* in_addr */ - Address [4]byte /* in_addr */ - Ifindex int32 -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface 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 -} - -type Inet6Pktinfo struct { - Addr [16]byte /* in6_addr */ - Ifindex uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type ICMPv6Filter struct { - Filt [8]uint32 -} - -const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x6c - SizeofSockaddrUnix = 0x6a - SizeofSockaddrDatalink = 0x36 - SizeofXucred = 0x50 - SizeofLinger = 0x8 - SizeofIovec = 0x8 - SizeofIPMreq = 0x8 - SizeofIPMreqn = 0xc - SizeofIPv6Mreq = 0x14 - SizeofMsghdr = 0x1c - SizeofCmsghdr = 0xc - SizeofInet6Pktinfo = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofICMPv6Filter = 0x20 -) - -const ( - PTRACE_TRACEME = 0x0 - PTRACE_CONT = 0x7 - PTRACE_KILL = 0x8 -) - -type PtraceLwpInfoStruct struct { - Lwpid int32 - Event int32 - Flags int32 - Sigmask Sigset_t - Siglist Sigset_t - Siginfo __PtraceSiginfo - Tdname [20]int8 - Child_pid int32 - Syscall_code uint32 - Syscall_narg uint32 -} - -type __Siginfo struct { - Signo int32 - Errno int32 - Code int32 - Pid int32 - Uid uint32 - Status int32 - Addr *byte - Value [4]byte - _ [32]byte -} -type __PtraceSiginfo struct { - Signo int32 - Errno int32 - Code int32 - Pid int32 - Uid uint32 - Status int32 - Addr uintptr - Value [4]byte - _ [32]byte -} - -type Sigset_t struct { - Val [4]uint32 -} - -type Reg struct { - Fs uint32 - Es uint32 - Ds uint32 - Edi uint32 - Esi uint32 - Ebp uint32 - Isp uint32 - Ebx uint32 - Edx uint32 - Ecx uint32 - Eax uint32 - Trapno uint32 - Err uint32 - Eip uint32 - Cs uint32 - Eflags uint32 - Esp uint32 - Ss uint32 - Gs uint32 -} - -type FpReg struct { - Env [7]uint32 - Acc [8][10]uint8 - Ex_sw uint32 - Pad [64]uint8 -} - -type FpExtendedPrecision struct{} - -type PtraceIoDesc struct { - Op int32 - Offs uintptr - Addr uintptr - Len uint32 -} - -type Kevent_t struct { - Ident uint32 - Filter int16 - Flags uint16 - Fflags uint32 - Data int64 - Udata *byte - Ext [4]uint64 -} - -type FdSet struct { - Bits [32]uint32 -} - -const ( - sizeofIfMsghdr = 0xa8 - SizeofIfMsghdr = 0x60 - sizeofIfData = 0x98 - SizeofIfData = 0x50 - SizeofIfaMsghdr = 0x14 - SizeofIfmaMsghdr = 0x10 - SizeofIfAnnounceMsghdr = 0x18 - SizeofRtMsghdr = 0x5c - SizeofRtMetrics = 0x38 -) - -type ifMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - _ uint16 - Data ifData -} - -type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Data IfData -} - -type ifData struct { - Type uint8 - Physical uint8 - Addrlen uint8 - Hdrlen uint8 - Link_state uint8 - Vhid uint8 - Datalen uint16 - Mtu uint32 - Metric uint32 - Baudrate uint64 - Ipackets uint64 - Ierrors uint64 - Opackets uint64 - Oerrors uint64 - Collisions uint64 - Ibytes uint64 - Obytes uint64 - Imcasts uint64 - Omcasts uint64 - Iqdrops uint64 - Oqdrops uint64 - Noproto uint64 - Hwassist uint64 - _ [8]byte - _ [16]byte -} - -type IfData struct { - Type uint8 - Physical uint8 - Addrlen uint8 - Hdrlen uint8 - Link_state uint8 - Spare_char1 uint8 - Spare_char2 uint8 - Datalen uint8 - Mtu uint32 - Metric uint32 - Baudrate uint32 - Ipackets uint32 - Ierrors uint32 - Opackets uint32 - Oerrors uint32 - Collisions uint32 - Ibytes uint32 - Obytes uint32 - Imcasts uint32 - Omcasts uint32 - Iqdrops uint32 - Noproto uint32 - Hwassist uint32 - Epoch int32 - Lastchange Timeval -} - -type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - _ uint16 - Metric int32 -} - -type IfmaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - _ uint16 -} - -type IfAnnounceMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Name [16]int8 - What uint16 -} - -type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - _ uint16 - Flags int32 - Addrs int32 - Pid int32 - Seq int32 - Errno int32 - Fmask int32 - Inits uint32 - Rmx RtMetrics -} - -type RtMetrics struct { - Locks uint32 - Mtu uint32 - Hopcount uint32 - Expire uint32 - Recvpipe uint32 - Sendpipe uint32 - Ssthresh uint32 - Rtt uint32 - Rttvar uint32 - Pksent uint32 - Weight uint32 - Filler [3]uint32 -} - -const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x8 - SizeofBpfZbuf = 0xc - SizeofBpfProgram = 0x8 - SizeofBpfInsn = 0x8 - SizeofBpfHdr = 0x14 - SizeofBpfZbufHeader = 0x20 -) - -type BpfVersion struct { - Major uint16 - Minor uint16 -} - -type BpfStat struct { - Recv uint32 - Drop uint32 -} - -type BpfZbuf struct { - Bufa *byte - Bufb *byte - Buflen uint32 -} - -type BpfProgram struct { - Len uint32 - Insns *BpfInsn -} - -type BpfInsn struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} - -type BpfHdr struct { - Tstamp Timeval - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - _ [2]byte -} - -type BpfZbufHeader struct { - Kernel_gen uint32 - Kernel_len uint32 - User_gen uint32 - _ [5]uint32 -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [20]uint8 - Ispeed uint32 - Ospeed uint32 -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -const ( - AT_FDCWD = -0x64 - AT_EACCESS = 0x100 - AT_SYMLINK_NOFOLLOW = 0x200 - AT_SYMLINK_FOLLOW = 0x400 - AT_REMOVEDIR = 0x800 -) - -type PollFd struct { - Fd int32 - Events int16 - Revents int16 -} - -const ( - POLLERR = 0x8 - POLLHUP = 0x10 - POLLIN = 0x1 - POLLINIGNEOF = 0x2000 - POLLNVAL = 0x20 - POLLOUT = 0x4 - POLLPRI = 0x2 - POLLRDBAND = 0x80 - POLLRDNORM = 0x40 - POLLWRBAND = 0x100 - POLLWRNORM = 0x4 -) - -type CapRights struct { - Rights [2]uint64 -} - -type Utsname struct { - Sysname [256]byte - Nodename [256]byte - Release [256]byte - Version [256]byte - Machine [256]byte -} - -const SizeofClockinfo = 0x14 - -type Clockinfo struct { - Hz int32 - Tick int32 - Spare int32 - Stathz int32 - Profhz int32 -} diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go deleted file mode 100644 index 26991b1..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go +++ /dev/null @@ -1,656 +0,0 @@ -// cgo -godefs types_freebsd.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build amd64 && freebsd -// +build amd64,freebsd - -package unix - -const ( - SizeofPtr = 0x8 - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLong = 0x8 - SizeofLongLong = 0x8 -) - -type ( - _C_short int16 - _C_int int32 - _C_long int64 - _C_long_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int64 -} - -type Time_t int64 - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Rlimit struct { - Cur int64 - Max int64 -} - -type _Gid_t uint32 - -const ( - _statfsVersion = 0x20140518 - _dirblksiz = 0x400 -) - -type Stat_t struct { - Dev uint64 - Ino uint64 - Nlink uint64 - Mode uint16 - _0 int16 - Uid uint32 - Gid uint32 - _1 int32 - Rdev uint64 - Atim Timespec - Mtim Timespec - Ctim Timespec - Btim Timespec - Size int64 - Blocks int64 - Blksize int32 - Flags uint32 - Gen uint64 - Spare [10]uint64 -} - -type Statfs_t struct { - Version uint32 - Type uint32 - Flags uint64 - Bsize uint64 - Iosize uint64 - Blocks uint64 - Bfree uint64 - Bavail int64 - Files uint64 - Ffree int64 - Syncwrites uint64 - Asyncwrites uint64 - Syncreads uint64 - Asyncreads uint64 - Spare [10]uint64 - Namemax uint32 - Owner uint32 - Fsid Fsid - Charspare [80]int8 - Fstypename [16]byte - Mntfromname [1024]byte - Mntonname [1024]byte -} - -type Flock_t struct { - Start int64 - Len int64 - Pid int32 - Type int16 - Whence int16 - Sysid int32 - _ [4]byte -} - -type Dirent struct { - Fileno uint64 - Off int64 - Reclen uint16 - Type uint8 - Pad0 uint8 - Namlen uint16 - Pad1 uint16 - Name [256]int8 -} - -type Fsid struct { - Val [2]int32 -} - -const ( - PathMax = 0x400 -) - -const ( - FADV_NORMAL = 0x0 - FADV_RANDOM = 0x1 - FADV_SEQUENTIAL = 0x2 - FADV_WILLNEED = 0x3 - FADV_DONTNEED = 0x4 - FADV_NOREUSE = 0x5 -) - -type RawSockaddrInet4 struct { - Len uint8 - Family uint8 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]int8 -} - -type RawSockaddrInet6 struct { - Len uint8 - Family uint8 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 -} - -type RawSockaddrUnix struct { - Len uint8 - Family uint8 - Path [104]int8 -} - -type RawSockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [46]int8 -} - -type RawSockaddr struct { - Len uint8 - Family uint8 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [92]int8 -} - -type _Socklen uint32 - -type Xucred struct { - Version uint32 - Uid uint32 - Ngroups int16 - Groups [16]uint32 - _ *byte -} - -type Linger struct { - Onoff int32 - Linger int32 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPMreqn struct { - Multiaddr [4]byte /* in_addr */ - Address [4]byte /* in_addr */ - Ifindex int32 -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface 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 -} - -type Inet6Pktinfo struct { - Addr [16]byte /* in6_addr */ - Ifindex uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type ICMPv6Filter struct { - Filt [8]uint32 -} - -const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x6c - SizeofSockaddrUnix = 0x6a - SizeofSockaddrDatalink = 0x36 - SizeofXucred = 0x58 - SizeofLinger = 0x8 - SizeofIovec = 0x10 - SizeofIPMreq = 0x8 - SizeofIPMreqn = 0xc - SizeofIPv6Mreq = 0x14 - SizeofMsghdr = 0x30 - SizeofCmsghdr = 0xc - SizeofInet6Pktinfo = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofICMPv6Filter = 0x20 -) - -const ( - PTRACE_TRACEME = 0x0 - PTRACE_CONT = 0x7 - PTRACE_KILL = 0x8 -) - -type PtraceLwpInfoStruct struct { - Lwpid int32 - Event int32 - Flags int32 - Sigmask Sigset_t - Siglist Sigset_t - Siginfo __PtraceSiginfo - Tdname [20]int8 - Child_pid int32 - Syscall_code uint32 - Syscall_narg uint32 -} - -type __Siginfo struct { - Signo int32 - Errno int32 - Code int32 - Pid int32 - Uid uint32 - Status int32 - Addr *byte - Value [8]byte - _ [40]byte -} - -type __PtraceSiginfo struct { - Signo int32 - Errno int32 - Code int32 - Pid int32 - Uid uint32 - Status int32 - Addr uintptr - Value [8]byte - _ [40]byte -} - -type Sigset_t struct { - Val [4]uint32 -} - -type Reg struct { - R15 int64 - R14 int64 - R13 int64 - R12 int64 - R11 int64 - R10 int64 - R9 int64 - R8 int64 - Rdi int64 - Rsi int64 - Rbp int64 - Rbx int64 - Rdx int64 - Rcx int64 - Rax int64 - Trapno uint32 - Fs uint16 - Gs uint16 - Err uint32 - Es uint16 - Ds uint16 - Rip int64 - Cs int64 - Rflags int64 - Rsp int64 - Ss int64 -} - -type FpReg struct { - Env [4]uint64 - Acc [8][16]uint8 - Xacc [16][16]uint8 - Spare [12]uint64 -} - -type FpExtendedPrecision struct{} - -type PtraceIoDesc struct { - Op int32 - Offs uintptr - Addr uintptr - Len uint64 -} - -type Kevent_t struct { - Ident uint64 - Filter int16 - Flags uint16 - Fflags uint32 - Data int64 - Udata *byte - Ext [4]uint64 -} - -type FdSet struct { - Bits [16]uint64 -} - -const ( - sizeofIfMsghdr = 0xa8 - SizeofIfMsghdr = 0xa8 - sizeofIfData = 0x98 - SizeofIfData = 0x98 - SizeofIfaMsghdr = 0x14 - SizeofIfmaMsghdr = 0x10 - SizeofIfAnnounceMsghdr = 0x18 - SizeofRtMsghdr = 0x98 - SizeofRtMetrics = 0x70 -) - -type ifMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - _ uint16 - Data ifData -} - -type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Data IfData -} - -type ifData struct { - Type uint8 - Physical uint8 - Addrlen uint8 - Hdrlen uint8 - Link_state uint8 - Vhid uint8 - Datalen uint16 - Mtu uint32 - Metric uint32 - Baudrate uint64 - Ipackets uint64 - Ierrors uint64 - Opackets uint64 - Oerrors uint64 - Collisions uint64 - Ibytes uint64 - Obytes uint64 - Imcasts uint64 - Omcasts uint64 - Iqdrops uint64 - Oqdrops uint64 - Noproto uint64 - Hwassist uint64 - _ [8]byte - _ [16]byte -} - -type IfData struct { - Type uint8 - Physical uint8 - Addrlen uint8 - Hdrlen uint8 - Link_state uint8 - Spare_char1 uint8 - Spare_char2 uint8 - Datalen uint8 - Mtu uint64 - Metric uint64 - Baudrate uint64 - Ipackets uint64 - Ierrors uint64 - Opackets uint64 - Oerrors uint64 - Collisions uint64 - Ibytes uint64 - Obytes uint64 - Imcasts uint64 - Omcasts uint64 - Iqdrops uint64 - Noproto uint64 - Hwassist uint64 - Epoch int64 - Lastchange Timeval -} - -type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - _ uint16 - Metric int32 -} - -type IfmaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - _ uint16 -} - -type IfAnnounceMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Name [16]int8 - What uint16 -} - -type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - _ uint16 - Flags int32 - Addrs int32 - Pid int32 - Seq int32 - Errno int32 - Fmask int32 - Inits uint64 - Rmx RtMetrics -} - -type RtMetrics struct { - Locks uint64 - Mtu uint64 - Hopcount uint64 - Expire uint64 - Recvpipe uint64 - Sendpipe uint64 - Ssthresh uint64 - Rtt uint64 - Rttvar uint64 - Pksent uint64 - Weight uint64 - Filler [3]uint64 -} - -const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x8 - SizeofBpfZbuf = 0x18 - SizeofBpfProgram = 0x10 - SizeofBpfInsn = 0x8 - SizeofBpfHdr = 0x20 - SizeofBpfZbufHeader = 0x20 -) - -type BpfVersion struct { - Major uint16 - Minor uint16 -} - -type BpfStat struct { - Recv uint32 - Drop uint32 -} - -type BpfZbuf struct { - Bufa *byte - Bufb *byte - Buflen uint64 -} - -type BpfProgram struct { - Len uint32 - Insns *BpfInsn -} - -type BpfInsn struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} - -type BpfHdr struct { - Tstamp Timeval - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - _ [6]byte -} - -type BpfZbufHeader struct { - Kernel_gen uint32 - Kernel_len uint32 - User_gen uint32 - _ [5]uint32 -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [20]uint8 - Ispeed uint32 - Ospeed uint32 -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -const ( - AT_FDCWD = -0x64 - AT_EACCESS = 0x100 - AT_SYMLINK_NOFOLLOW = 0x200 - AT_SYMLINK_FOLLOW = 0x400 - AT_REMOVEDIR = 0x800 -) - -type PollFd struct { - Fd int32 - Events int16 - Revents int16 -} - -const ( - POLLERR = 0x8 - POLLHUP = 0x10 - POLLIN = 0x1 - POLLINIGNEOF = 0x2000 - POLLNVAL = 0x20 - POLLOUT = 0x4 - POLLPRI = 0x2 - POLLRDBAND = 0x80 - POLLRDNORM = 0x40 - POLLWRBAND = 0x100 - POLLWRNORM = 0x4 -) - -type CapRights struct { - Rights [2]uint64 -} - -type Utsname struct { - Sysname [256]byte - Nodename [256]byte - Release [256]byte - Version [256]byte - Machine [256]byte -} - -const SizeofClockinfo = 0x14 - -type Clockinfo struct { - Hz int32 - Tick int32 - Spare int32 - Stathz int32 - Profhz int32 -} diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go deleted file mode 100644 index f8324e7..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go +++ /dev/null @@ -1,642 +0,0 @@ -// cgo -godefs -- -fsigned-char types_freebsd.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm && freebsd -// +build arm,freebsd - -package unix - -const ( - SizeofPtr = 0x4 - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLong = 0x4 - SizeofLongLong = 0x8 -) - -type ( - _C_short int16 - _C_int int32 - _C_long int32 - _C_long_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int32 - _ [4]byte -} - -type Timeval struct { - Sec int64 - Usec int32 - _ [4]byte -} - -type Time_t int64 - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int32 - Ixrss int32 - Idrss int32 - Isrss int32 - Minflt int32 - Majflt int32 - Nswap int32 - Inblock int32 - Oublock int32 - Msgsnd int32 - Msgrcv int32 - Nsignals int32 - Nvcsw int32 - Nivcsw int32 -} - -type Rlimit struct { - Cur int64 - Max int64 -} - -type _Gid_t uint32 - -const ( - _statfsVersion = 0x20140518 - _dirblksiz = 0x400 -) - -type Stat_t struct { - Dev uint64 - Ino uint64 - Nlink uint64 - Mode uint16 - _0 int16 - Uid uint32 - Gid uint32 - _1 int32 - Rdev uint64 - Atim Timespec - Mtim Timespec - Ctim Timespec - Btim Timespec - Size int64 - Blocks int64 - Blksize int32 - Flags uint32 - Gen uint64 - Spare [10]uint64 -} - -type Statfs_t struct { - Version uint32 - Type uint32 - Flags uint64 - Bsize uint64 - Iosize uint64 - Blocks uint64 - Bfree uint64 - Bavail int64 - Files uint64 - Ffree int64 - Syncwrites uint64 - Asyncwrites uint64 - Syncreads uint64 - Asyncreads uint64 - Spare [10]uint64 - Namemax uint32 - Owner uint32 - Fsid Fsid - Charspare [80]int8 - Fstypename [16]byte - Mntfromname [1024]byte - Mntonname [1024]byte -} - -type Flock_t struct { - Start int64 - Len int64 - Pid int32 - Type int16 - Whence int16 - Sysid int32 - _ [4]byte -} - -type Dirent struct { - Fileno uint64 - Off int64 - Reclen uint16 - Type uint8 - Pad0 uint8 - Namlen uint16 - Pad1 uint16 - Name [256]int8 -} - -type Fsid struct { - Val [2]int32 -} - -const ( - PathMax = 0x400 -) - -const ( - FADV_NORMAL = 0x0 - FADV_RANDOM = 0x1 - FADV_SEQUENTIAL = 0x2 - FADV_WILLNEED = 0x3 - FADV_DONTNEED = 0x4 - FADV_NOREUSE = 0x5 -) - -type RawSockaddrInet4 struct { - Len uint8 - Family uint8 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]int8 -} - -type RawSockaddrInet6 struct { - Len uint8 - Family uint8 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 -} - -type RawSockaddrUnix struct { - Len uint8 - Family uint8 - Path [104]int8 -} - -type RawSockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [46]int8 -} - -type RawSockaddr struct { - Len uint8 - Family uint8 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [92]int8 -} - -type _Socklen uint32 - -type Xucred struct { - Version uint32 - Uid uint32 - Ngroups int16 - Groups [16]uint32 - _ *byte -} - -type Linger struct { - Onoff int32 - Linger int32 -} - -type Iovec struct { - Base *byte - Len uint32 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPMreqn struct { - Multiaddr [4]byte /* in_addr */ - Address [4]byte /* in_addr */ - Ifindex int32 -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface 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 -} - -type Inet6Pktinfo struct { - Addr [16]byte /* in6_addr */ - Ifindex uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type ICMPv6Filter struct { - Filt [8]uint32 -} - -const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x6c - SizeofSockaddrUnix = 0x6a - SizeofSockaddrDatalink = 0x36 - SizeofXucred = 0x50 - SizeofLinger = 0x8 - SizeofIovec = 0x8 - SizeofIPMreq = 0x8 - SizeofIPMreqn = 0xc - SizeofIPv6Mreq = 0x14 - SizeofMsghdr = 0x1c - SizeofCmsghdr = 0xc - SizeofInet6Pktinfo = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofICMPv6Filter = 0x20 -) - -const ( - PTRACE_TRACEME = 0x0 - PTRACE_CONT = 0x7 - PTRACE_KILL = 0x8 -) - -type PtraceLwpInfoStruct struct { - Lwpid int32 - Event int32 - Flags int32 - Sigmask Sigset_t - Siglist Sigset_t - Siginfo __PtraceSiginfo - Tdname [20]int8 - Child_pid int32 - Syscall_code uint32 - Syscall_narg uint32 -} - -type __Siginfo struct { - Signo int32 - Errno int32 - Code int32 - Pid int32 - Uid uint32 - Status int32 - Addr *byte - Value [4]byte - _ [32]byte -} - -type __PtraceSiginfo struct { - Signo int32 - Errno int32 - Code int32 - Pid int32 - Uid uint32 - Status int32 - Addr uintptr - Value [4]byte - _ [32]byte -} - -type Sigset_t struct { - Val [4]uint32 -} - -type Reg struct { - R [13]uint32 - Sp uint32 - Lr uint32 - Pc uint32 - Cpsr uint32 -} - -type FpReg struct { - Fpsr uint32 - Fpr [8]FpExtendedPrecision -} - -type FpExtendedPrecision struct { - Exponent uint32 - Mantissa_hi uint32 - Mantissa_lo uint32 -} - -type PtraceIoDesc struct { - Op int32 - Offs uintptr - Addr uintptr - Len uint32 -} - -type Kevent_t struct { - Ident uint32 - Filter int16 - Flags uint16 - Fflags uint32 - _ [4]byte - Data int64 - Udata *byte - _ [4]byte - Ext [4]uint64 -} - -type FdSet struct { - Bits [32]uint32 -} - -const ( - sizeofIfMsghdr = 0xa8 - SizeofIfMsghdr = 0x70 - sizeofIfData = 0x98 - SizeofIfData = 0x60 - SizeofIfaMsghdr = 0x14 - SizeofIfmaMsghdr = 0x10 - SizeofIfAnnounceMsghdr = 0x18 - SizeofRtMsghdr = 0x5c - SizeofRtMetrics = 0x38 -) - -type ifMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - _ uint16 - Data ifData -} - -type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Data IfData -} - -type ifData struct { - Type uint8 - Physical uint8 - Addrlen uint8 - Hdrlen uint8 - Link_state uint8 - Vhid uint8 - Datalen uint16 - Mtu uint32 - Metric uint32 - Baudrate uint64 - Ipackets uint64 - Ierrors uint64 - Opackets uint64 - Oerrors uint64 - Collisions uint64 - Ibytes uint64 - Obytes uint64 - Imcasts uint64 - Omcasts uint64 - Iqdrops uint64 - Oqdrops uint64 - Noproto uint64 - Hwassist uint64 - _ [8]byte - _ [16]byte -} - -type IfData struct { - Type uint8 - Physical uint8 - Addrlen uint8 - Hdrlen uint8 - Link_state uint8 - Spare_char1 uint8 - Spare_char2 uint8 - Datalen uint8 - Mtu uint32 - Metric uint32 - Baudrate uint32 - Ipackets uint32 - Ierrors uint32 - Opackets uint32 - Oerrors uint32 - Collisions uint32 - Ibytes uint32 - Obytes uint32 - Imcasts uint32 - Omcasts uint32 - Iqdrops uint32 - Noproto uint32 - Hwassist uint32 - _ [4]byte - Epoch int64 - Lastchange Timeval -} - -type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - _ uint16 - Metric int32 -} - -type IfmaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - _ uint16 -} - -type IfAnnounceMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Name [16]int8 - What uint16 -} - -type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - _ uint16 - Flags int32 - Addrs int32 - Pid int32 - Seq int32 - Errno int32 - Fmask int32 - Inits uint32 - Rmx RtMetrics -} - -type RtMetrics struct { - Locks uint32 - Mtu uint32 - Hopcount uint32 - Expire uint32 - Recvpipe uint32 - Sendpipe uint32 - Ssthresh uint32 - Rtt uint32 - Rttvar uint32 - Pksent uint32 - Weight uint32 - Filler [3]uint32 -} - -const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x8 - SizeofBpfZbuf = 0xc - SizeofBpfProgram = 0x8 - SizeofBpfInsn = 0x8 - SizeofBpfHdr = 0x20 - SizeofBpfZbufHeader = 0x20 -) - -type BpfVersion struct { - Major uint16 - Minor uint16 -} - -type BpfStat struct { - Recv uint32 - Drop uint32 -} - -type BpfZbuf struct { - Bufa *byte - Bufb *byte - Buflen uint32 -} - -type BpfProgram struct { - Len uint32 - Insns *BpfInsn -} - -type BpfInsn struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} - -type BpfHdr struct { - Tstamp Timeval - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - _ [6]byte -} - -type BpfZbufHeader struct { - Kernel_gen uint32 - Kernel_len uint32 - User_gen uint32 - _ [5]uint32 -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [20]uint8 - Ispeed uint32 - Ospeed uint32 -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -const ( - AT_FDCWD = -0x64 - AT_EACCESS = 0x100 - AT_SYMLINK_NOFOLLOW = 0x200 - AT_SYMLINK_FOLLOW = 0x400 - AT_REMOVEDIR = 0x800 -) - -type PollFd struct { - Fd int32 - Events int16 - Revents int16 -} - -const ( - POLLERR = 0x8 - POLLHUP = 0x10 - POLLIN = 0x1 - POLLINIGNEOF = 0x2000 - POLLNVAL = 0x20 - POLLOUT = 0x4 - POLLPRI = 0x2 - POLLRDBAND = 0x80 - POLLRDNORM = 0x40 - POLLWRBAND = 0x100 - POLLWRNORM = 0x4 -) - -type CapRights struct { - Rights [2]uint64 -} - -type Utsname struct { - Sysname [256]byte - Nodename [256]byte - Release [256]byte - Version [256]byte - Machine [256]byte -} - -const SizeofClockinfo = 0x14 - -type Clockinfo struct { - Hz int32 - Tick int32 - Spare int32 - Stathz int32 - Profhz int32 -} diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go deleted file mode 100644 index 4220411..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go +++ /dev/null @@ -1,636 +0,0 @@ -// cgo -godefs -- -fsigned-char types_freebsd.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm64 && freebsd -// +build arm64,freebsd - -package unix - -const ( - SizeofPtr = 0x8 - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLong = 0x8 - SizeofLongLong = 0x8 -) - -type ( - _C_short int16 - _C_int int32 - _C_long int64 - _C_long_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int64 -} - -type Time_t int64 - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Rlimit struct { - Cur int64 - Max int64 -} - -type _Gid_t uint32 - -const ( - _statfsVersion = 0x20140518 - _dirblksiz = 0x400 -) - -type Stat_t struct { - Dev uint64 - Ino uint64 - Nlink uint64 - Mode uint16 - _0 int16 - Uid uint32 - Gid uint32 - _1 int32 - Rdev uint64 - Atim Timespec - Mtim Timespec - Ctim Timespec - Btim Timespec - Size int64 - Blocks int64 - Blksize int32 - Flags uint32 - Gen uint64 - Spare [10]uint64 -} - -type Statfs_t struct { - Version uint32 - Type uint32 - Flags uint64 - Bsize uint64 - Iosize uint64 - Blocks uint64 - Bfree uint64 - Bavail int64 - Files uint64 - Ffree int64 - Syncwrites uint64 - Asyncwrites uint64 - Syncreads uint64 - Asyncreads uint64 - Spare [10]uint64 - Namemax uint32 - Owner uint32 - Fsid Fsid - Charspare [80]int8 - Fstypename [16]byte - Mntfromname [1024]byte - Mntonname [1024]byte -} - -type Flock_t struct { - Start int64 - Len int64 - Pid int32 - Type int16 - Whence int16 - Sysid int32 - _ [4]byte -} - -type Dirent struct { - Fileno uint64 - Off int64 - Reclen uint16 - Type uint8 - Pad0 uint8 - Namlen uint16 - Pad1 uint16 - Name [256]int8 -} - -type Fsid struct { - Val [2]int32 -} - -const ( - PathMax = 0x400 -) - -const ( - FADV_NORMAL = 0x0 - FADV_RANDOM = 0x1 - FADV_SEQUENTIAL = 0x2 - FADV_WILLNEED = 0x3 - FADV_DONTNEED = 0x4 - FADV_NOREUSE = 0x5 -) - -type RawSockaddrInet4 struct { - Len uint8 - Family uint8 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]int8 -} - -type RawSockaddrInet6 struct { - Len uint8 - Family uint8 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 -} - -type RawSockaddrUnix struct { - Len uint8 - Family uint8 - Path [104]int8 -} - -type RawSockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [46]int8 -} - -type RawSockaddr struct { - Len uint8 - Family uint8 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [92]int8 -} - -type _Socklen uint32 - -type Xucred struct { - Version uint32 - Uid uint32 - Ngroups int16 - Groups [16]uint32 - _ *byte -} - -type Linger struct { - Onoff int32 - Linger int32 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPMreqn struct { - Multiaddr [4]byte /* in_addr */ - Address [4]byte /* in_addr */ - Ifindex int32 -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface 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 -} - -type Inet6Pktinfo struct { - Addr [16]byte /* in6_addr */ - Ifindex uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type ICMPv6Filter struct { - Filt [8]uint32 -} - -const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x6c - SizeofSockaddrUnix = 0x6a - SizeofSockaddrDatalink = 0x36 - SizeofXucred = 0x58 - SizeofLinger = 0x8 - SizeofIovec = 0x10 - SizeofIPMreq = 0x8 - SizeofIPMreqn = 0xc - SizeofIPv6Mreq = 0x14 - SizeofMsghdr = 0x30 - SizeofCmsghdr = 0xc - SizeofInet6Pktinfo = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofICMPv6Filter = 0x20 -) - -const ( - PTRACE_TRACEME = 0x0 - PTRACE_CONT = 0x7 - PTRACE_KILL = 0x8 -) - -type PtraceLwpInfoStruct struct { - Lwpid int32 - Event int32 - Flags int32 - Sigmask Sigset_t - Siglist Sigset_t - Siginfo __PtraceSiginfo - Tdname [20]int8 - Child_pid int32 - Syscall_code uint32 - Syscall_narg uint32 -} - -type __Siginfo struct { - Signo int32 - Errno int32 - Code int32 - Pid int32 - Uid uint32 - Status int32 - Addr *byte - Value [8]byte - _ [40]byte -} - -type __PtraceSiginfo struct { - Signo int32 - Errno int32 - Code int32 - Pid int32 - Uid uint32 - Status int32 - Addr uintptr - Value [8]byte - _ [40]byte -} - -type Sigset_t struct { - Val [4]uint32 -} - -type Reg struct { - X [30]uint64 - Lr uint64 - Sp uint64 - Elr uint64 - Spsr uint32 - _ [4]byte -} - -type FpReg struct { - Q [32][16]uint8 - Sr uint32 - Cr uint32 - _ [8]byte -} - -type FpExtendedPrecision struct{} - -type PtraceIoDesc struct { - Op int32 - Offs uintptr - Addr uintptr - Len uint64 -} - -type Kevent_t struct { - Ident uint64 - Filter int16 - Flags uint16 - Fflags uint32 - Data int64 - Udata *byte - Ext [4]uint64 -} - -type FdSet struct { - Bits [16]uint64 -} - -const ( - sizeofIfMsghdr = 0xa8 - SizeofIfMsghdr = 0xa8 - sizeofIfData = 0x98 - SizeofIfData = 0x98 - SizeofIfaMsghdr = 0x14 - SizeofIfmaMsghdr = 0x10 - SizeofIfAnnounceMsghdr = 0x18 - SizeofRtMsghdr = 0x98 - SizeofRtMetrics = 0x70 -) - -type ifMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - _ uint16 - Data ifData -} - -type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Data IfData -} - -type ifData struct { - Type uint8 - Physical uint8 - Addrlen uint8 - Hdrlen uint8 - Link_state uint8 - Vhid uint8 - Datalen uint16 - Mtu uint32 - Metric uint32 - Baudrate uint64 - Ipackets uint64 - Ierrors uint64 - Opackets uint64 - Oerrors uint64 - Collisions uint64 - Ibytes uint64 - Obytes uint64 - Imcasts uint64 - Omcasts uint64 - Iqdrops uint64 - Oqdrops uint64 - Noproto uint64 - Hwassist uint64 - _ [8]byte - _ [16]byte -} - -type IfData struct { - Type uint8 - Physical uint8 - Addrlen uint8 - Hdrlen uint8 - Link_state uint8 - Spare_char1 uint8 - Spare_char2 uint8 - Datalen uint8 - Mtu uint64 - Metric uint64 - Baudrate uint64 - Ipackets uint64 - Ierrors uint64 - Opackets uint64 - Oerrors uint64 - Collisions uint64 - Ibytes uint64 - Obytes uint64 - Imcasts uint64 - Omcasts uint64 - Iqdrops uint64 - Noproto uint64 - Hwassist uint64 - Epoch int64 - Lastchange Timeval -} - -type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - _ uint16 - Metric int32 -} - -type IfmaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - _ uint16 -} - -type IfAnnounceMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Name [16]int8 - What uint16 -} - -type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - _ uint16 - Flags int32 - Addrs int32 - Pid int32 - Seq int32 - Errno int32 - Fmask int32 - Inits uint64 - Rmx RtMetrics -} - -type RtMetrics struct { - Locks uint64 - Mtu uint64 - Hopcount uint64 - Expire uint64 - Recvpipe uint64 - Sendpipe uint64 - Ssthresh uint64 - Rtt uint64 - Rttvar uint64 - Pksent uint64 - Weight uint64 - Filler [3]uint64 -} - -const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x8 - SizeofBpfZbuf = 0x18 - SizeofBpfProgram = 0x10 - SizeofBpfInsn = 0x8 - SizeofBpfHdr = 0x20 - SizeofBpfZbufHeader = 0x20 -) - -type BpfVersion struct { - Major uint16 - Minor uint16 -} - -type BpfStat struct { - Recv uint32 - Drop uint32 -} - -type BpfZbuf struct { - Bufa *byte - Bufb *byte - Buflen uint64 -} - -type BpfProgram struct { - Len uint32 - Insns *BpfInsn -} - -type BpfInsn struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} - -type BpfHdr struct { - Tstamp Timeval - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - _ [6]byte -} - -type BpfZbufHeader struct { - Kernel_gen uint32 - Kernel_len uint32 - User_gen uint32 - _ [5]uint32 -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [20]uint8 - Ispeed uint32 - Ospeed uint32 -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -const ( - AT_FDCWD = -0x64 - AT_EACCESS = 0x100 - AT_SYMLINK_NOFOLLOW = 0x200 - AT_SYMLINK_FOLLOW = 0x400 - AT_REMOVEDIR = 0x800 -) - -type PollFd struct { - Fd int32 - Events int16 - Revents int16 -} - -const ( - POLLERR = 0x8 - POLLHUP = 0x10 - POLLIN = 0x1 - POLLINIGNEOF = 0x2000 - POLLNVAL = 0x20 - POLLOUT = 0x4 - POLLPRI = 0x2 - POLLRDBAND = 0x80 - POLLRDNORM = 0x40 - POLLWRBAND = 0x100 - POLLWRNORM = 0x4 -) - -type CapRights struct { - Rights [2]uint64 -} - -type Utsname struct { - Sysname [256]byte - Nodename [256]byte - Release [256]byte - Version [256]byte - Machine [256]byte -} - -const SizeofClockinfo = 0x14 - -type Clockinfo struct { - Hz int32 - Tick int32 - Spare int32 - Stathz int32 - Profhz int32 -} diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go deleted file mode 100644 index 0660fd4..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go +++ /dev/null @@ -1,638 +0,0 @@ -// cgo -godefs -- -fsigned-char types_freebsd.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build riscv64 && freebsd -// +build riscv64,freebsd - -package unix - -const ( - SizeofPtr = 0x8 - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLong = 0x8 - SizeofLongLong = 0x8 -) - -type ( - _C_short int16 - _C_int int32 - _C_long int64 - _C_long_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int64 -} - -type Time_t int64 - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Rlimit struct { - Cur int64 - Max int64 -} - -type _Gid_t uint32 - -const ( - _statfsVersion = 0x20140518 - _dirblksiz = 0x400 -) - -type Stat_t struct { - Dev uint64 - Ino uint64 - Nlink uint64 - Mode uint16 - _0 int16 - Uid uint32 - Gid uint32 - _1 int32 - Rdev uint64 - Atim Timespec - Mtim Timespec - Ctim Timespec - Btim Timespec - Size int64 - Blocks int64 - Blksize int32 - Flags uint32 - Gen uint64 - Spare [10]uint64 -} - -type Statfs_t struct { - Version uint32 - Type uint32 - Flags uint64 - Bsize uint64 - Iosize uint64 - Blocks uint64 - Bfree uint64 - Bavail int64 - Files uint64 - Ffree int64 - Syncwrites uint64 - Asyncwrites uint64 - Syncreads uint64 - Asyncreads uint64 - Spare [10]uint64 - Namemax uint32 - Owner uint32 - Fsid Fsid - Charspare [80]int8 - Fstypename [16]byte - Mntfromname [1024]byte - Mntonname [1024]byte -} - -type Flock_t struct { - Start int64 - Len int64 - Pid int32 - Type int16 - Whence int16 - Sysid int32 - _ [4]byte -} - -type Dirent struct { - Fileno uint64 - Off int64 - Reclen uint16 - Type uint8 - Pad0 uint8 - Namlen uint16 - Pad1 uint16 - Name [256]int8 -} - -type Fsid struct { - Val [2]int32 -} - -const ( - PathMax = 0x400 -) - -const ( - FADV_NORMAL = 0x0 - FADV_RANDOM = 0x1 - FADV_SEQUENTIAL = 0x2 - FADV_WILLNEED = 0x3 - FADV_DONTNEED = 0x4 - FADV_NOREUSE = 0x5 -) - -type RawSockaddrInet4 struct { - Len uint8 - Family uint8 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]int8 -} - -type RawSockaddrInet6 struct { - Len uint8 - Family uint8 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 -} - -type RawSockaddrUnix struct { - Len uint8 - Family uint8 - Path [104]int8 -} - -type RawSockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [46]int8 -} - -type RawSockaddr struct { - Len uint8 - Family uint8 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [92]int8 -} - -type _Socklen uint32 - -type Xucred struct { - Version uint32 - Uid uint32 - Ngroups int16 - Groups [16]uint32 - _ *byte -} - -type Linger struct { - Onoff int32 - Linger int32 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPMreqn struct { - Multiaddr [4]byte /* in_addr */ - Address [4]byte /* in_addr */ - Ifindex int32 -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface 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 -} - -type Inet6Pktinfo struct { - Addr [16]byte /* in6_addr */ - Ifindex uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type ICMPv6Filter struct { - Filt [8]uint32 -} - -const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x6c - SizeofSockaddrUnix = 0x6a - SizeofSockaddrDatalink = 0x36 - SizeofXucred = 0x58 - SizeofLinger = 0x8 - SizeofIovec = 0x10 - SizeofIPMreq = 0x8 - SizeofIPMreqn = 0xc - SizeofIPv6Mreq = 0x14 - SizeofMsghdr = 0x30 - SizeofCmsghdr = 0xc - SizeofInet6Pktinfo = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofICMPv6Filter = 0x20 -) - -const ( - PTRACE_TRACEME = 0x0 - PTRACE_CONT = 0x7 - PTRACE_KILL = 0x8 -) - -type PtraceLwpInfoStruct struct { - Lwpid int32 - Event int32 - Flags int32 - Sigmask Sigset_t - Siglist Sigset_t - Siginfo __PtraceSiginfo - Tdname [20]int8 - Child_pid int32 - Syscall_code uint32 - Syscall_narg uint32 -} - -type __Siginfo struct { - Signo int32 - Errno int32 - Code int32 - Pid int32 - Uid uint32 - Status int32 - Addr *byte - Value [8]byte - _ [40]byte -} - -type __PtraceSiginfo struct { - Signo int32 - Errno int32 - Code int32 - Pid int32 - Uid uint32 - Status int32 - Addr uintptr - Value [8]byte - _ [40]byte -} - -type Sigset_t struct { - Val [4]uint32 -} - -type Reg struct { - Ra uint64 - Sp uint64 - Gp uint64 - Tp uint64 - T [7]uint64 - S [12]uint64 - A [8]uint64 - Sepc uint64 - Sstatus uint64 -} - -type FpReg struct { - X [32][2]uint64 - Fcsr uint64 -} - -type FpExtendedPrecision struct{} - -type PtraceIoDesc struct { - Op int32 - Offs uintptr - Addr uintptr - Len uint64 -} - -type Kevent_t struct { - Ident uint64 - Filter int16 - Flags uint16 - Fflags uint32 - Data int64 - Udata *byte - Ext [4]uint64 -} - -type FdSet struct { - Bits [16]uint64 -} - -const ( - sizeofIfMsghdr = 0xa8 - SizeofIfMsghdr = 0xa8 - sizeofIfData = 0x98 - SizeofIfData = 0x98 - SizeofIfaMsghdr = 0x14 - SizeofIfmaMsghdr = 0x10 - SizeofIfAnnounceMsghdr = 0x18 - SizeofRtMsghdr = 0x98 - SizeofRtMetrics = 0x70 -) - -type ifMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - _ uint16 - Data ifData -} - -type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Data IfData -} - -type ifData struct { - Type uint8 - Physical uint8 - Addrlen uint8 - Hdrlen uint8 - Link_state uint8 - Vhid uint8 - Datalen uint16 - Mtu uint32 - Metric uint32 - Baudrate uint64 - Ipackets uint64 - Ierrors uint64 - Opackets uint64 - Oerrors uint64 - Collisions uint64 - Ibytes uint64 - Obytes uint64 - Imcasts uint64 - Omcasts uint64 - Iqdrops uint64 - Oqdrops uint64 - Noproto uint64 - Hwassist uint64 - _ [8]byte - _ [16]byte -} - -type IfData struct { - Type uint8 - Physical uint8 - Addrlen uint8 - Hdrlen uint8 - Link_state uint8 - Spare_char1 uint8 - Spare_char2 uint8 - Datalen uint8 - Mtu uint64 - Metric uint64 - Baudrate uint64 - Ipackets uint64 - Ierrors uint64 - Opackets uint64 - Oerrors uint64 - Collisions uint64 - Ibytes uint64 - Obytes uint64 - Imcasts uint64 - Omcasts uint64 - Iqdrops uint64 - Noproto uint64 - Hwassist uint64 - Epoch int64 - Lastchange Timeval -} - -type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - _ uint16 - Metric int32 -} - -type IfmaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - _ uint16 -} - -type IfAnnounceMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Name [16]int8 - What uint16 -} - -type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - _ uint16 - Flags int32 - Addrs int32 - Pid int32 - Seq int32 - Errno int32 - Fmask int32 - Inits uint64 - Rmx RtMetrics -} - -type RtMetrics struct { - Locks uint64 - Mtu uint64 - Hopcount uint64 - Expire uint64 - Recvpipe uint64 - Sendpipe uint64 - Ssthresh uint64 - Rtt uint64 - Rttvar uint64 - Pksent uint64 - Weight uint64 - Nhidx uint64 - Filler [2]uint64 -} - -const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x8 - SizeofBpfZbuf = 0x18 - SizeofBpfProgram = 0x10 - SizeofBpfInsn = 0x8 - SizeofBpfHdr = 0x20 - SizeofBpfZbufHeader = 0x20 -) - -type BpfVersion struct { - Major uint16 - Minor uint16 -} - -type BpfStat struct { - Recv uint32 - Drop uint32 -} - -type BpfZbuf struct { - Bufa *byte - Bufb *byte - Buflen uint64 -} - -type BpfProgram struct { - Len uint32 - Insns *BpfInsn -} - -type BpfInsn struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} - -type BpfHdr struct { - Tstamp Timeval - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - _ [6]byte -} - -type BpfZbufHeader struct { - Kernel_gen uint32 - Kernel_len uint32 - User_gen uint32 - _ [5]uint32 -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [20]uint8 - Ispeed uint32 - Ospeed uint32 -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -const ( - AT_FDCWD = -0x64 - AT_EACCESS = 0x100 - AT_SYMLINK_NOFOLLOW = 0x200 - AT_SYMLINK_FOLLOW = 0x400 - AT_REMOVEDIR = 0x800 -) - -type PollFd struct { - Fd int32 - Events int16 - Revents int16 -} - -const ( - POLLERR = 0x8 - POLLHUP = 0x10 - POLLIN = 0x1 - POLLINIGNEOF = 0x2000 - POLLNVAL = 0x20 - POLLOUT = 0x4 - POLLPRI = 0x2 - POLLRDBAND = 0x80 - POLLRDNORM = 0x40 - POLLWRBAND = 0x100 - POLLWRNORM = 0x4 -) - -type CapRights struct { - Rights [2]uint64 -} - -type Utsname struct { - Sysname [256]byte - Nodename [256]byte - Release [256]byte - Version [256]byte - Machine [256]byte -} - -const SizeofClockinfo = 0x14 - -type Clockinfo struct { - Hz int32 - Tick int32 - Spare int32 - Stathz int32 - Profhz int32 -} diff --git a/vendor/golang.org/x/sys/unix/ztypes_illumos_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_illumos_amd64.go deleted file mode 100644 index 4c48526..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_illumos_amd64.go +++ /dev/null @@ -1,42 +0,0 @@ -// cgo -godefs types_illumos.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build amd64 && illumos -// +build amd64,illumos - -package unix - -const ( - TUNNEWPPA = 0x540001 - TUNSETPPA = 0x540002 - - I_STR = 0x5308 - I_POP = 0x5303 - I_PUSH = 0x5302 - I_LINK = 0x530c - I_UNLINK = 0x530d - I_PLINK = 0x5316 - I_PUNLINK = 0x5317 - - IF_UNITSEL = -0x7ffb8cca -) - -type strbuf struct { - Maxlen int32 - Len int32 - Buf *int8 -} - -type Strioctl struct { - Cmd int32 - Timout int32 - Len int32 - Dp *int8 -} - -type Lifreq struct { - Name [32]int8 - Lifru1 [4]byte - Type uint32 - Lifru [336]byte -} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go deleted file mode 100644 index ff68811..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ /dev/null @@ -1,5609 +0,0 @@ -// Code generated by mkmerge; DO NOT EDIT. - -//go:build linux -// +build linux - -package unix - -const ( - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLongLong = 0x8 - PathMax = 0x1000 -) - -type ( - _C_short int16 - _C_int int32 - - _C_long_long int64 -) - -type ItimerSpec struct { - Interval Timespec - Value Timespec -} - -type Itimerval struct { - Interval Timeval - Value Timeval -} - -const ( - TIME_OK = 0x0 - TIME_INS = 0x1 - TIME_DEL = 0x2 - TIME_OOP = 0x3 - TIME_WAIT = 0x4 - TIME_ERROR = 0x5 - TIME_BAD = 0x5 -) - -type Rlimit struct { - Cur uint64 - Max uint64 -} - -type _Gid_t uint32 - -type StatxTimestamp struct { - Sec int64 - Nsec uint32 - _ int32 -} - -type Statx_t struct { - Mask uint32 - Blksize uint32 - Attributes uint64 - Nlink uint32 - Uid uint32 - Gid uint32 - Mode uint16 - _ [1]uint16 - Ino uint64 - Size uint64 - Blocks uint64 - Attributes_mask uint64 - Atime StatxTimestamp - Btime StatxTimestamp - Ctime StatxTimestamp - Mtime StatxTimestamp - Rdev_major uint32 - Rdev_minor uint32 - Dev_major uint32 - Dev_minor uint32 - Mnt_id uint64 - _ uint64 - _ [12]uint64 -} - -type Fsid struct { - Val [2]int32 -} - -type FileCloneRange struct { - Src_fd int64 - Src_offset uint64 - Src_length uint64 - Dest_offset uint64 -} - -type RawFileDedupeRange struct { - Src_offset uint64 - Src_length uint64 - Dest_count uint16 - Reserved1 uint16 - Reserved2 uint32 -} - -type RawFileDedupeRangeInfo struct { - Dest_fd int64 - Dest_offset uint64 - Bytes_deduped uint64 - Status int32 - Reserved uint32 -} - -const ( - SizeofRawFileDedupeRange = 0x18 - SizeofRawFileDedupeRangeInfo = 0x20 - FILE_DEDUPE_RANGE_SAME = 0x0 - FILE_DEDUPE_RANGE_DIFFERS = 0x1 -) - -type FscryptPolicy struct { - Version uint8 - Contents_encryption_mode uint8 - Filenames_encryption_mode uint8 - Flags uint8 - Master_key_descriptor [8]uint8 -} - -type FscryptKey struct { - Mode uint32 - Raw [64]uint8 - Size uint32 -} - -type FscryptPolicyV1 struct { - Version uint8 - Contents_encryption_mode uint8 - Filenames_encryption_mode uint8 - Flags uint8 - Master_key_descriptor [8]uint8 -} - -type FscryptPolicyV2 struct { - Version uint8 - Contents_encryption_mode uint8 - Filenames_encryption_mode uint8 - Flags uint8 - _ [4]uint8 - Master_key_identifier [16]uint8 -} - -type FscryptGetPolicyExArg struct { - Size uint64 - Policy [24]byte -} - -type FscryptKeySpecifier struct { - Type uint32 - _ uint32 - U [32]byte -} - -type FscryptAddKeyArg struct { - Key_spec FscryptKeySpecifier - Raw_size uint32 - Key_id uint32 - _ [8]uint32 -} - -type FscryptRemoveKeyArg struct { - Key_spec FscryptKeySpecifier - Removal_status_flags uint32 - _ [5]uint32 -} - -type FscryptGetKeyStatusArg struct { - Key_spec FscryptKeySpecifier - _ [6]uint32 - Status uint32 - Status_flags uint32 - User_count uint32 - _ [13]uint32 -} - -type DmIoctl struct { - Version [3]uint32 - Data_size uint32 - Data_start uint32 - Target_count uint32 - Open_count int32 - Flags uint32 - Event_nr uint32 - _ uint32 - Dev uint64 - Name [128]byte - Uuid [129]byte - Data [7]byte -} - -type DmTargetSpec struct { - Sector_start uint64 - Length uint64 - Status int32 - Next uint32 - Target_type [16]byte -} - -type DmTargetDeps struct { - Count uint32 - _ uint32 -} - -type DmTargetVersions struct { - Next uint32 - Version [3]uint32 -} - -type DmTargetMsg struct { - Sector uint64 -} - -const ( - SizeofDmIoctl = 0x138 - SizeofDmTargetSpec = 0x28 -) - -type KeyctlDHParams struct { - Private int32 - Prime int32 - Base int32 -} - -const ( - FADV_NORMAL = 0x0 - FADV_RANDOM = 0x1 - FADV_SEQUENTIAL = 0x2 - FADV_WILLNEED = 0x3 -) - -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 RawSockaddrUnix struct { - Family uint16 - Path [108]int8 -} - -type RawSockaddrLinklayer struct { - Family uint16 - Protocol uint16 - Ifindex int32 - Hatype uint16 - Pkttype uint8 - Halen uint8 - Addr [8]uint8 -} - -type RawSockaddrNetlink struct { - Family uint16 - Pad uint16 - Pid uint32 - Groups uint32 -} - -type RawSockaddrHCI struct { - Family uint16 - Dev uint16 - Channel uint16 -} - -type RawSockaddrL2 struct { - Family uint16 - Psm uint16 - Bdaddr [6]uint8 - Cid uint16 - Bdaddr_type uint8 - _ [1]byte -} - -type RawSockaddrRFCOMM struct { - Family uint16 - Bdaddr [6]uint8 - Channel uint8 - _ [1]byte -} - -type RawSockaddrCAN struct { - Family uint16 - Ifindex int32 - Addr [16]byte -} - -type RawSockaddrALG struct { - Family uint16 - Type [14]uint8 - Feat uint32 - Mask uint32 - Name [64]uint8 -} - -type RawSockaddrVM struct { - Family uint16 - Reserved1 uint16 - Port uint32 - Cid uint32 - Flags uint8 - Zero [3]uint8 -} - -type RawSockaddrXDP struct { - Family uint16 - Flags uint16 - Ifindex uint32 - Queue_id uint32 - Shared_umem_fd uint32 -} - -type RawSockaddrPPPoX [0x1e]byte - -type RawSockaddrTIPC struct { - Family uint16 - Addrtype uint8 - Scope int8 - Addr [12]byte -} - -type RawSockaddrL2TPIP struct { - Family uint16 - Unused uint16 - Addr [4]byte /* in_addr */ - Conn_id uint32 - _ [4]uint8 -} - -type RawSockaddrL2TPIP6 struct { - Family uint16 - Unused uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 - Conn_id uint32 -} - -type RawSockaddrIUCV struct { - Family uint16 - Port uint16 - Addr uint32 - Nodeid [8]int8 - User_id [8]int8 - Name [8]int8 -} - -type RawSockaddrNFC struct { - Sa_family uint16 - Dev_idx uint32 - Target_idx uint32 - Nfc_protocol uint32 -} - -type _Socklen uint32 - -type Linger struct { - Onoff int32 - Linger int32 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPMreqn struct { - Multiaddr [4]byte /* in_addr */ - Address [4]byte /* in_addr */ - Ifindex int32 -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface uint32 -} - -type PacketMreq struct { - Ifindex int32 - Type uint16 - Alen uint16 - Address [8]uint8 -} - -type Inet4Pktinfo struct { - Ifindex int32 - Spec_dst [4]byte /* in_addr */ - Addr [4]byte /* in_addr */ -} - -type Inet6Pktinfo struct { - Addr [16]byte /* in6_addr */ - Ifindex uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type ICMPv6Filter struct { - Data [8]uint32 -} - -type Ucred struct { - Pid int32 - Uid uint32 - Gid uint32 -} - -type TCPInfo struct { - State uint8 - Ca_state uint8 - Retransmits uint8 - Probes uint8 - Backoff uint8 - Options uint8 - Rto uint32 - Ato uint32 - Snd_mss uint32 - Rcv_mss uint32 - Unacked uint32 - Sacked uint32 - Lost uint32 - Retrans uint32 - Fackets uint32 - Last_data_sent uint32 - Last_ack_sent uint32 - Last_data_recv uint32 - Last_ack_recv uint32 - Pmtu uint32 - Rcv_ssthresh uint32 - Rtt uint32 - Rttvar uint32 - Snd_ssthresh uint32 - Snd_cwnd uint32 - Advmss uint32 - Reordering uint32 - Rcv_rtt uint32 - Rcv_space uint32 - Total_retrans uint32 -} - -type CanFilter struct { - Id uint32 - Mask uint32 -} - -type TCPRepairOpt struct { - Code uint32 - Val uint32 -} - -const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x70 - SizeofSockaddrUnix = 0x6e - SizeofSockaddrLinklayer = 0x14 - SizeofSockaddrNetlink = 0xc - SizeofSockaddrHCI = 0x6 - SizeofSockaddrL2 = 0xe - SizeofSockaddrRFCOMM = 0xa - SizeofSockaddrCAN = 0x18 - SizeofSockaddrALG = 0x58 - SizeofSockaddrVM = 0x10 - SizeofSockaddrXDP = 0x10 - SizeofSockaddrPPPoX = 0x1e - SizeofSockaddrTIPC = 0x10 - SizeofSockaddrL2TPIP = 0x10 - SizeofSockaddrL2TPIP6 = 0x20 - SizeofSockaddrIUCV = 0x20 - SizeofSockaddrNFC = 0x10 - SizeofLinger = 0x8 - SizeofIPMreq = 0x8 - SizeofIPMreqn = 0xc - SizeofIPv6Mreq = 0x14 - SizeofPacketMreq = 0x10 - SizeofInet4Pktinfo = 0xc - SizeofInet6Pktinfo = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofICMPv6Filter = 0x20 - SizeofUcred = 0xc - SizeofTCPInfo = 0x68 - SizeofCanFilter = 0x8 - SizeofTCPRepairOpt = 0x8 -) - -const ( - NDA_UNSPEC = 0x0 - NDA_DST = 0x1 - NDA_LLADDR = 0x2 - NDA_CACHEINFO = 0x3 - NDA_PROBES = 0x4 - NDA_VLAN = 0x5 - NDA_PORT = 0x6 - NDA_VNI = 0x7 - NDA_IFINDEX = 0x8 - NDA_MASTER = 0x9 - NDA_LINK_NETNSID = 0xa - NDA_SRC_VNI = 0xb - NTF_USE = 0x1 - NTF_SELF = 0x2 - NTF_MASTER = 0x4 - NTF_PROXY = 0x8 - NTF_EXT_LEARNED = 0x10 - NTF_OFFLOADED = 0x20 - NTF_ROUTER = 0x80 - NUD_INCOMPLETE = 0x1 - NUD_REACHABLE = 0x2 - NUD_STALE = 0x4 - NUD_DELAY = 0x8 - NUD_PROBE = 0x10 - NUD_FAILED = 0x20 - NUD_NOARP = 0x40 - NUD_PERMANENT = 0x80 - NUD_NONE = 0x0 - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFA_FLAGS = 0x8 - IFA_RT_PRIORITY = 0x9 - IFA_TARGET_NETNSID = 0xa - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTA_MARK = 0x10 - RTA_MFC_STATS = 0x11 - RTA_VIA = 0x12 - RTA_NEWDST = 0x13 - RTA_PREF = 0x14 - RTA_ENCAP_TYPE = 0x15 - RTA_ENCAP = 0x16 - RTA_EXPIRES = 0x17 - RTA_PAD = 0x18 - RTA_UID = 0x19 - RTA_TTL_PROPAGATE = 0x1a - RTA_IP_PROTO = 0x1b - RTA_SPORT = 0x1c - RTA_DPORT = 0x1d - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofIfaCacheinfo = 0x10 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 - SizeofNdUseroptmsg = 0x10 - SizeofNdMsg = 0xc -) - -type NlMsghdr struct { - Len uint32 - Type uint16 - Flags uint16 - Seq uint32 - Pid uint32 -} - -type NlMsgerr struct { - Error int32 - Msg NlMsghdr -} - -type RtGenmsg struct { - Family uint8 -} - -type NlAttr struct { - Len uint16 - Type uint16 -} - -type RtAttr struct { - Len uint16 - Type uint16 -} - -type IfInfomsg struct { - Family uint8 - _ uint8 - Type uint16 - Index int32 - Flags uint32 - Change uint32 -} - -type IfAddrmsg struct { - Family uint8 - Prefixlen uint8 - Flags uint8 - Scope uint8 - Index uint32 -} - -type IfaCacheinfo struct { - Prefered uint32 - Valid uint32 - Cstamp uint32 - Tstamp uint32 -} - -type RtMsg struct { - Family uint8 - Dst_len uint8 - Src_len uint8 - Tos uint8 - Table uint8 - Protocol uint8 - Scope uint8 - Type uint8 - Flags uint32 -} - -type RtNexthop struct { - Len uint16 - Flags uint8 - Hops uint8 - Ifindex int32 -} - -type NdUseroptmsg struct { - Family uint8 - Pad1 uint8 - Opts_len uint16 - Ifindex int32 - Icmp_type uint8 - Icmp_code uint8 - Pad2 uint16 - Pad3 uint32 -} - -type NdMsg struct { - Family uint8 - Pad1 uint8 - Pad2 uint16 - Ifindex int32 - State uint16 - Flags uint8 - Type uint8 -} - -const ( - ICMP_FILTER = 0x1 - - ICMPV6_FILTER = 0x1 - ICMPV6_FILTER_BLOCK = 0x1 - ICMPV6_FILTER_BLOCKOTHERS = 0x3 - ICMPV6_FILTER_PASS = 0x2 - ICMPV6_FILTER_PASSONLY = 0x4 -) - -const ( - SizeofSockFilter = 0x8 -) - -type SockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} - -type SockFprog struct { - Len uint16 - Filter *SockFilter -} - -type InotifyEvent struct { - Wd int32 - Mask uint32 - Cookie uint32 - Len uint32 -} - -const SizeofInotifyEvent = 0x10 - -const SI_LOAD_SHIFT = 0x10 - -type Utsname struct { - Sysname [65]byte - Nodename [65]byte - Release [65]byte - Version [65]byte - Machine [65]byte - Domainname [65]byte -} - -const ( - AT_EMPTY_PATH = 0x1000 - AT_FDCWD = -0x64 - AT_NO_AUTOMOUNT = 0x800 - AT_REMOVEDIR = 0x200 - - AT_STATX_SYNC_AS_STAT = 0x0 - AT_STATX_FORCE_SYNC = 0x2000 - AT_STATX_DONT_SYNC = 0x4000 - - AT_RECURSIVE = 0x8000 - - AT_SYMLINK_FOLLOW = 0x400 - AT_SYMLINK_NOFOLLOW = 0x100 - - AT_EACCESS = 0x200 - - OPEN_TREE_CLONE = 0x1 - - MOVE_MOUNT_F_SYMLINKS = 0x1 - MOVE_MOUNT_F_AUTOMOUNTS = 0x2 - MOVE_MOUNT_F_EMPTY_PATH = 0x4 - MOVE_MOUNT_T_SYMLINKS = 0x10 - MOVE_MOUNT_T_AUTOMOUNTS = 0x20 - MOVE_MOUNT_T_EMPTY_PATH = 0x40 - MOVE_MOUNT_SET_GROUP = 0x100 - - FSOPEN_CLOEXEC = 0x1 - - FSPICK_CLOEXEC = 0x1 - FSPICK_SYMLINK_NOFOLLOW = 0x2 - FSPICK_NO_AUTOMOUNT = 0x4 - FSPICK_EMPTY_PATH = 0x8 - - FSMOUNT_CLOEXEC = 0x1 -) - -type OpenHow struct { - Flags uint64 - Mode uint64 - Resolve uint64 -} - -const SizeofOpenHow = 0x18 - -const ( - RESOLVE_BENEATH = 0x8 - RESOLVE_IN_ROOT = 0x10 - RESOLVE_NO_MAGICLINKS = 0x2 - RESOLVE_NO_SYMLINKS = 0x4 - RESOLVE_NO_XDEV = 0x1 -) - -type PollFd struct { - Fd int32 - Events int16 - Revents int16 -} - -const ( - POLLIN = 0x1 - POLLPRI = 0x2 - POLLOUT = 0x4 - POLLERR = 0x8 - POLLHUP = 0x10 - POLLNVAL = 0x20 -) - -type SignalfdSiginfo struct { - Signo uint32 - Errno int32 - Code int32 - Pid uint32 - Uid uint32 - Fd int32 - Tid uint32 - Band uint32 - Overrun uint32 - Trapno uint32 - Status int32 - Int int32 - Ptr uint64 - Utime uint64 - Stime uint64 - Addr uint64 - Addr_lsb uint16 - _ uint16 - Syscall int32 - Call_addr uint64 - Arch uint32 - _ [28]uint8 -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -const ( - TASKSTATS_CMD_UNSPEC = 0x0 - TASKSTATS_CMD_GET = 0x1 - TASKSTATS_CMD_NEW = 0x2 - TASKSTATS_TYPE_UNSPEC = 0x0 - TASKSTATS_TYPE_PID = 0x1 - TASKSTATS_TYPE_TGID = 0x2 - TASKSTATS_TYPE_STATS = 0x3 - TASKSTATS_TYPE_AGGR_PID = 0x4 - TASKSTATS_TYPE_AGGR_TGID = 0x5 - TASKSTATS_TYPE_NULL = 0x6 - TASKSTATS_CMD_ATTR_UNSPEC = 0x0 - TASKSTATS_CMD_ATTR_PID = 0x1 - TASKSTATS_CMD_ATTR_TGID = 0x2 - TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 - TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 -) - -type CGroupStats struct { - Sleeping uint64 - Running uint64 - Stopped uint64 - Uninterruptible uint64 - Io_wait uint64 -} - -const ( - CGROUPSTATS_CMD_UNSPEC = 0x3 - CGROUPSTATS_CMD_GET = 0x4 - CGROUPSTATS_CMD_NEW = 0x5 - CGROUPSTATS_TYPE_UNSPEC = 0x0 - CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 - CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 - CGROUPSTATS_CMD_ATTR_FD = 0x1 -) - -type Genlmsghdr struct { - Cmd uint8 - Version uint8 - Reserved uint16 -} - -const ( - CTRL_CMD_UNSPEC = 0x0 - CTRL_CMD_NEWFAMILY = 0x1 - CTRL_CMD_DELFAMILY = 0x2 - CTRL_CMD_GETFAMILY = 0x3 - CTRL_CMD_NEWOPS = 0x4 - CTRL_CMD_DELOPS = 0x5 - CTRL_CMD_GETOPS = 0x6 - CTRL_CMD_NEWMCAST_GRP = 0x7 - CTRL_CMD_DELMCAST_GRP = 0x8 - CTRL_CMD_GETMCAST_GRP = 0x9 - CTRL_CMD_GETPOLICY = 0xa - CTRL_ATTR_UNSPEC = 0x0 - CTRL_ATTR_FAMILY_ID = 0x1 - CTRL_ATTR_FAMILY_NAME = 0x2 - CTRL_ATTR_VERSION = 0x3 - CTRL_ATTR_HDRSIZE = 0x4 - CTRL_ATTR_MAXATTR = 0x5 - CTRL_ATTR_OPS = 0x6 - CTRL_ATTR_MCAST_GROUPS = 0x7 - CTRL_ATTR_POLICY = 0x8 - CTRL_ATTR_OP_POLICY = 0x9 - CTRL_ATTR_OP = 0xa - CTRL_ATTR_OP_UNSPEC = 0x0 - CTRL_ATTR_OP_ID = 0x1 - CTRL_ATTR_OP_FLAGS = 0x2 - CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 - CTRL_ATTR_MCAST_GRP_NAME = 0x1 - CTRL_ATTR_MCAST_GRP_ID = 0x2 - CTRL_ATTR_POLICY_UNSPEC = 0x0 - CTRL_ATTR_POLICY_DO = 0x1 - CTRL_ATTR_POLICY_DUMP = 0x2 - CTRL_ATTR_POLICY_DUMP_MAX = 0x2 -) - -const ( - _CPU_SETSIZE = 0x400 -) - -const ( - BDADDR_BREDR = 0x0 - BDADDR_LE_PUBLIC = 0x1 - BDADDR_LE_RANDOM = 0x2 -) - -type PerfEventAttr struct { - Type uint32 - Size uint32 - Config uint64 - Sample uint64 - Sample_type uint64 - Read_format uint64 - Bits uint64 - Wakeup uint32 - Bp_type uint32 - Ext1 uint64 - Ext2 uint64 - Branch_sample_type uint64 - Sample_regs_user uint64 - Sample_stack_user uint32 - Clockid int32 - Sample_regs_intr uint64 - Aux_watermark uint32 - Sample_max_stack uint16 - _ uint16 - Aux_sample_size uint32 - _ uint32 - Sig_data uint64 -} - -type PerfEventMmapPage struct { - Version uint32 - Compat_version uint32 - Lock uint32 - Index uint32 - Offset int64 - Time_enabled uint64 - Time_running uint64 - Capabilities uint64 - Pmc_width uint16 - Time_shift uint16 - Time_mult uint32 - Time_offset uint64 - Time_zero uint64 - Size uint32 - _ uint32 - Time_cycles uint64 - Time_mask uint64 - _ [928]uint8 - Data_head uint64 - Data_tail uint64 - Data_offset uint64 - Data_size uint64 - Aux_head uint64 - Aux_tail uint64 - Aux_offset uint64 - Aux_size uint64 -} - -const ( - PerfBitDisabled uint64 = CBitFieldMaskBit0 - PerfBitInherit = CBitFieldMaskBit1 - PerfBitPinned = CBitFieldMaskBit2 - PerfBitExclusive = CBitFieldMaskBit3 - PerfBitExcludeUser = CBitFieldMaskBit4 - PerfBitExcludeKernel = CBitFieldMaskBit5 - PerfBitExcludeHv = CBitFieldMaskBit6 - PerfBitExcludeIdle = CBitFieldMaskBit7 - PerfBitMmap = CBitFieldMaskBit8 - PerfBitComm = CBitFieldMaskBit9 - PerfBitFreq = CBitFieldMaskBit10 - PerfBitInheritStat = CBitFieldMaskBit11 - PerfBitEnableOnExec = CBitFieldMaskBit12 - PerfBitTask = CBitFieldMaskBit13 - PerfBitWatermark = CBitFieldMaskBit14 - PerfBitPreciseIPBit1 = CBitFieldMaskBit15 - PerfBitPreciseIPBit2 = CBitFieldMaskBit16 - PerfBitMmapData = CBitFieldMaskBit17 - PerfBitSampleIDAll = CBitFieldMaskBit18 - PerfBitExcludeHost = CBitFieldMaskBit19 - PerfBitExcludeGuest = CBitFieldMaskBit20 - PerfBitExcludeCallchainKernel = CBitFieldMaskBit21 - PerfBitExcludeCallchainUser = CBitFieldMaskBit22 - PerfBitMmap2 = CBitFieldMaskBit23 - PerfBitCommExec = CBitFieldMaskBit24 - PerfBitUseClockID = CBitFieldMaskBit25 - PerfBitContextSwitch = CBitFieldMaskBit26 -) - -const ( - PERF_TYPE_HARDWARE = 0x0 - PERF_TYPE_SOFTWARE = 0x1 - PERF_TYPE_TRACEPOINT = 0x2 - PERF_TYPE_HW_CACHE = 0x3 - PERF_TYPE_RAW = 0x4 - PERF_TYPE_BREAKPOINT = 0x5 - PERF_TYPE_MAX = 0x6 - PERF_COUNT_HW_CPU_CYCLES = 0x0 - PERF_COUNT_HW_INSTRUCTIONS = 0x1 - PERF_COUNT_HW_CACHE_REFERENCES = 0x2 - PERF_COUNT_HW_CACHE_MISSES = 0x3 - PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 0x4 - PERF_COUNT_HW_BRANCH_MISSES = 0x5 - PERF_COUNT_HW_BUS_CYCLES = 0x6 - PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7 - PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 0x8 - PERF_COUNT_HW_REF_CPU_CYCLES = 0x9 - PERF_COUNT_HW_MAX = 0xa - PERF_COUNT_HW_CACHE_L1D = 0x0 - PERF_COUNT_HW_CACHE_L1I = 0x1 - PERF_COUNT_HW_CACHE_LL = 0x2 - PERF_COUNT_HW_CACHE_DTLB = 0x3 - PERF_COUNT_HW_CACHE_ITLB = 0x4 - PERF_COUNT_HW_CACHE_BPU = 0x5 - PERF_COUNT_HW_CACHE_NODE = 0x6 - PERF_COUNT_HW_CACHE_MAX = 0x7 - PERF_COUNT_HW_CACHE_OP_READ = 0x0 - PERF_COUNT_HW_CACHE_OP_WRITE = 0x1 - PERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2 - PERF_COUNT_HW_CACHE_OP_MAX = 0x3 - PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0 - PERF_COUNT_HW_CACHE_RESULT_MISS = 0x1 - PERF_COUNT_HW_CACHE_RESULT_MAX = 0x2 - PERF_COUNT_SW_CPU_CLOCK = 0x0 - PERF_COUNT_SW_TASK_CLOCK = 0x1 - PERF_COUNT_SW_PAGE_FAULTS = 0x2 - PERF_COUNT_SW_CONTEXT_SWITCHES = 0x3 - PERF_COUNT_SW_CPU_MIGRATIONS = 0x4 - PERF_COUNT_SW_PAGE_FAULTS_MIN = 0x5 - PERF_COUNT_SW_PAGE_FAULTS_MAJ = 0x6 - PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 - PERF_COUNT_SW_EMULATION_FAULTS = 0x8 - PERF_COUNT_SW_DUMMY = 0x9 - PERF_COUNT_SW_BPF_OUTPUT = 0xa - PERF_COUNT_SW_MAX = 0xc - PERF_SAMPLE_IP = 0x1 - PERF_SAMPLE_TID = 0x2 - PERF_SAMPLE_TIME = 0x4 - PERF_SAMPLE_ADDR = 0x8 - PERF_SAMPLE_READ = 0x10 - PERF_SAMPLE_CALLCHAIN = 0x20 - PERF_SAMPLE_ID = 0x40 - PERF_SAMPLE_CPU = 0x80 - PERF_SAMPLE_PERIOD = 0x100 - PERF_SAMPLE_STREAM_ID = 0x200 - PERF_SAMPLE_RAW = 0x400 - PERF_SAMPLE_BRANCH_STACK = 0x800 - PERF_SAMPLE_REGS_USER = 0x1000 - PERF_SAMPLE_STACK_USER = 0x2000 - PERF_SAMPLE_WEIGHT = 0x4000 - PERF_SAMPLE_DATA_SRC = 0x8000 - PERF_SAMPLE_IDENTIFIER = 0x10000 - PERF_SAMPLE_TRANSACTION = 0x20000 - PERF_SAMPLE_REGS_INTR = 0x40000 - PERF_SAMPLE_PHYS_ADDR = 0x80000 - PERF_SAMPLE_AUX = 0x100000 - PERF_SAMPLE_CGROUP = 0x200000 - PERF_SAMPLE_DATA_PAGE_SIZE = 0x400000 - PERF_SAMPLE_CODE_PAGE_SIZE = 0x800000 - PERF_SAMPLE_WEIGHT_STRUCT = 0x1000000 - PERF_SAMPLE_MAX = 0x2000000 - PERF_SAMPLE_BRANCH_USER_SHIFT = 0x0 - PERF_SAMPLE_BRANCH_KERNEL_SHIFT = 0x1 - PERF_SAMPLE_BRANCH_HV_SHIFT = 0x2 - PERF_SAMPLE_BRANCH_ANY_SHIFT = 0x3 - PERF_SAMPLE_BRANCH_ANY_CALL_SHIFT = 0x4 - PERF_SAMPLE_BRANCH_ANY_RETURN_SHIFT = 0x5 - PERF_SAMPLE_BRANCH_IND_CALL_SHIFT = 0x6 - PERF_SAMPLE_BRANCH_ABORT_TX_SHIFT = 0x7 - PERF_SAMPLE_BRANCH_IN_TX_SHIFT = 0x8 - PERF_SAMPLE_BRANCH_NO_TX_SHIFT = 0x9 - PERF_SAMPLE_BRANCH_COND_SHIFT = 0xa - PERF_SAMPLE_BRANCH_CALL_STACK_SHIFT = 0xb - PERF_SAMPLE_BRANCH_IND_JUMP_SHIFT = 0xc - PERF_SAMPLE_BRANCH_CALL_SHIFT = 0xd - PERF_SAMPLE_BRANCH_NO_FLAGS_SHIFT = 0xe - PERF_SAMPLE_BRANCH_NO_CYCLES_SHIFT = 0xf - PERF_SAMPLE_BRANCH_TYPE_SAVE_SHIFT = 0x10 - PERF_SAMPLE_BRANCH_HW_INDEX_SHIFT = 0x11 - PERF_SAMPLE_BRANCH_MAX_SHIFT = 0x12 - PERF_SAMPLE_BRANCH_USER = 0x1 - PERF_SAMPLE_BRANCH_KERNEL = 0x2 - PERF_SAMPLE_BRANCH_HV = 0x4 - PERF_SAMPLE_BRANCH_ANY = 0x8 - PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 - PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 - PERF_SAMPLE_BRANCH_IND_CALL = 0x40 - PERF_SAMPLE_BRANCH_ABORT_TX = 0x80 - PERF_SAMPLE_BRANCH_IN_TX = 0x100 - PERF_SAMPLE_BRANCH_NO_TX = 0x200 - PERF_SAMPLE_BRANCH_COND = 0x400 - PERF_SAMPLE_BRANCH_CALL_STACK = 0x800 - PERF_SAMPLE_BRANCH_IND_JUMP = 0x1000 - PERF_SAMPLE_BRANCH_CALL = 0x2000 - PERF_SAMPLE_BRANCH_NO_FLAGS = 0x4000 - PERF_SAMPLE_BRANCH_NO_CYCLES = 0x8000 - PERF_SAMPLE_BRANCH_TYPE_SAVE = 0x10000 - PERF_SAMPLE_BRANCH_HW_INDEX = 0x20000 - PERF_SAMPLE_BRANCH_MAX = 0x40000 - PERF_BR_UNKNOWN = 0x0 - PERF_BR_COND = 0x1 - PERF_BR_UNCOND = 0x2 - PERF_BR_IND = 0x3 - PERF_BR_CALL = 0x4 - PERF_BR_IND_CALL = 0x5 - PERF_BR_RET = 0x6 - PERF_BR_SYSCALL = 0x7 - PERF_BR_SYSRET = 0x8 - PERF_BR_COND_CALL = 0x9 - PERF_BR_COND_RET = 0xa - PERF_BR_ERET = 0xb - PERF_BR_IRQ = 0xc - PERF_BR_MAX = 0xd - PERF_SAMPLE_REGS_ABI_NONE = 0x0 - PERF_SAMPLE_REGS_ABI_32 = 0x1 - PERF_SAMPLE_REGS_ABI_64 = 0x2 - PERF_TXN_ELISION = 0x1 - PERF_TXN_TRANSACTION = 0x2 - PERF_TXN_SYNC = 0x4 - PERF_TXN_ASYNC = 0x8 - PERF_TXN_RETRY = 0x10 - PERF_TXN_CONFLICT = 0x20 - PERF_TXN_CAPACITY_WRITE = 0x40 - PERF_TXN_CAPACITY_READ = 0x80 - PERF_TXN_MAX = 0x100 - PERF_TXN_ABORT_MASK = -0x100000000 - PERF_TXN_ABORT_SHIFT = 0x20 - PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 - PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 - PERF_FORMAT_ID = 0x4 - PERF_FORMAT_GROUP = 0x8 - PERF_FORMAT_MAX = 0x10 - PERF_IOC_FLAG_GROUP = 0x1 - PERF_RECORD_MMAP = 0x1 - PERF_RECORD_LOST = 0x2 - PERF_RECORD_COMM = 0x3 - PERF_RECORD_EXIT = 0x4 - PERF_RECORD_THROTTLE = 0x5 - PERF_RECORD_UNTHROTTLE = 0x6 - PERF_RECORD_FORK = 0x7 - PERF_RECORD_READ = 0x8 - PERF_RECORD_SAMPLE = 0x9 - PERF_RECORD_MMAP2 = 0xa - PERF_RECORD_AUX = 0xb - PERF_RECORD_ITRACE_START = 0xc - PERF_RECORD_LOST_SAMPLES = 0xd - PERF_RECORD_SWITCH = 0xe - PERF_RECORD_SWITCH_CPU_WIDE = 0xf - PERF_RECORD_NAMESPACES = 0x10 - PERF_RECORD_KSYMBOL = 0x11 - PERF_RECORD_BPF_EVENT = 0x12 - PERF_RECORD_CGROUP = 0x13 - PERF_RECORD_TEXT_POKE = 0x14 - PERF_RECORD_AUX_OUTPUT_HW_ID = 0x15 - PERF_RECORD_MAX = 0x16 - PERF_RECORD_KSYMBOL_TYPE_UNKNOWN = 0x0 - PERF_RECORD_KSYMBOL_TYPE_BPF = 0x1 - PERF_RECORD_KSYMBOL_TYPE_OOL = 0x2 - PERF_RECORD_KSYMBOL_TYPE_MAX = 0x3 - PERF_BPF_EVENT_UNKNOWN = 0x0 - PERF_BPF_EVENT_PROG_LOAD = 0x1 - PERF_BPF_EVENT_PROG_UNLOAD = 0x2 - PERF_BPF_EVENT_MAX = 0x3 - PERF_CONTEXT_HV = -0x20 - PERF_CONTEXT_KERNEL = -0x80 - PERF_CONTEXT_USER = -0x200 - PERF_CONTEXT_GUEST = -0x800 - PERF_CONTEXT_GUEST_KERNEL = -0x880 - PERF_CONTEXT_GUEST_USER = -0xa00 - PERF_CONTEXT_MAX = -0xfff -) - -type TCPMD5Sig struct { - Addr SockaddrStorage - Flags uint8 - Prefixlen uint8 - Keylen uint16 - _ uint32 - Key [80]uint8 -} - -type HDDriveCmdHdr struct { - Command uint8 - Number uint8 - Feature uint8 - Count uint8 -} - -type HDDriveID struct { - Config uint16 - Cyls uint16 - Reserved2 uint16 - Heads uint16 - Track_bytes uint16 - Sector_bytes uint16 - Sectors uint16 - Vendor0 uint16 - Vendor1 uint16 - Vendor2 uint16 - Serial_no [20]uint8 - Buf_type uint16 - Buf_size uint16 - Ecc_bytes uint16 - Fw_rev [8]uint8 - Model [40]uint8 - Max_multsect uint8 - Vendor3 uint8 - Dword_io uint16 - Vendor4 uint8 - Capability uint8 - Reserved50 uint16 - Vendor5 uint8 - TPIO uint8 - Vendor6 uint8 - TDMA uint8 - Field_valid uint16 - Cur_cyls uint16 - Cur_heads uint16 - Cur_sectors uint16 - Cur_capacity0 uint16 - Cur_capacity1 uint16 - Multsect uint8 - Multsect_valid uint8 - Lba_capacity uint32 - Dma_1word uint16 - Dma_mword uint16 - Eide_pio_modes uint16 - Eide_dma_min uint16 - Eide_dma_time uint16 - Eide_pio uint16 - Eide_pio_iordy uint16 - Words69_70 [2]uint16 - Words71_74 [4]uint16 - Queue_depth uint16 - Words76_79 [4]uint16 - Major_rev_num uint16 - Minor_rev_num uint16 - Command_set_1 uint16 - Command_set_2 uint16 - Cfsse uint16 - Cfs_enable_1 uint16 - Cfs_enable_2 uint16 - Csf_default uint16 - Dma_ultra uint16 - Trseuc uint16 - TrsEuc uint16 - CurAPMvalues uint16 - Mprc uint16 - Hw_config uint16 - Acoustic uint16 - Msrqs uint16 - Sxfert uint16 - Sal uint16 - Spg uint32 - Lba_capacity_2 uint64 - Words104_125 [22]uint16 - Last_lun uint16 - Word127 uint16 - Dlf uint16 - Csfo uint16 - Words130_155 [26]uint16 - Word156 uint16 - Words157_159 [3]uint16 - Cfa_power uint16 - Words161_175 [15]uint16 - Words176_205 [30]uint16 - Words206_254 [49]uint16 - Integrity_word uint16 -} - -const ( - ST_MANDLOCK = 0x40 - ST_NOATIME = 0x400 - ST_NODEV = 0x4 - ST_NODIRATIME = 0x800 - ST_NOEXEC = 0x8 - ST_NOSUID = 0x2 - ST_RDONLY = 0x1 - ST_RELATIME = 0x1000 - ST_SYNCHRONOUS = 0x10 -) - -type Tpacket2Hdr struct { - Status uint32 - Len uint32 - Snaplen uint32 - Mac uint16 - Net uint16 - Sec uint32 - Nsec uint32 - Vlan_tci uint16 - Vlan_tpid uint16 - _ [4]uint8 -} - -type Tpacket3Hdr struct { - Next_offset uint32 - Sec uint32 - Nsec uint32 - Snaplen uint32 - Len uint32 - Status uint32 - Mac uint16 - Net uint16 - Hv1 TpacketHdrVariant1 - _ [8]uint8 -} - -type TpacketHdrVariant1 struct { - Rxhash uint32 - Vlan_tci uint32 - Vlan_tpid uint16 - _ uint16 -} - -type TpacketBlockDesc struct { - Version uint32 - To_priv uint32 - Hdr [40]byte -} - -type TpacketBDTS struct { - Sec uint32 - Usec uint32 -} - -type TpacketHdrV1 struct { - Block_status uint32 - Num_pkts uint32 - Offset_to_first_pkt uint32 - Blk_len uint32 - Seq_num uint64 - Ts_first_pkt TpacketBDTS - Ts_last_pkt TpacketBDTS -} - -type TpacketReq struct { - Block_size uint32 - Block_nr uint32 - Frame_size uint32 - Frame_nr uint32 -} - -type TpacketReq3 struct { - Block_size uint32 - Block_nr uint32 - Frame_size uint32 - Frame_nr uint32 - Retire_blk_tov uint32 - Sizeof_priv uint32 - Feature_req_word uint32 -} - -type TpacketStats struct { - Packets uint32 - Drops uint32 -} - -type TpacketStatsV3 struct { - Packets uint32 - Drops uint32 - Freeze_q_cnt uint32 -} - -type TpacketAuxdata struct { - Status uint32 - Len uint32 - Snaplen uint32 - Mac uint16 - Net uint16 - Vlan_tci uint16 - Vlan_tpid uint16 -} - -const ( - TPACKET_V1 = 0x0 - TPACKET_V2 = 0x1 - TPACKET_V3 = 0x2 -) - -const ( - SizeofTpacket2Hdr = 0x20 - SizeofTpacket3Hdr = 0x30 - - SizeofTpacketStats = 0x8 - SizeofTpacketStatsV3 = 0xc -) - -const ( - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_NUM_VF = 0x15 - IFLA_VFINFO_LIST = 0x16 - IFLA_STATS64 = 0x17 - IFLA_VF_PORTS = 0x18 - IFLA_PORT_SELF = 0x19 - IFLA_AF_SPEC = 0x1a - IFLA_GROUP = 0x1b - IFLA_NET_NS_FD = 0x1c - IFLA_EXT_MASK = 0x1d - IFLA_PROMISCUITY = 0x1e - IFLA_NUM_TX_QUEUES = 0x1f - IFLA_NUM_RX_QUEUES = 0x20 - IFLA_CARRIER = 0x21 - IFLA_PHYS_PORT_ID = 0x22 - IFLA_CARRIER_CHANGES = 0x23 - IFLA_PHYS_SWITCH_ID = 0x24 - IFLA_LINK_NETNSID = 0x25 - IFLA_PHYS_PORT_NAME = 0x26 - IFLA_PROTO_DOWN = 0x27 - IFLA_GSO_MAX_SEGS = 0x28 - IFLA_GSO_MAX_SIZE = 0x29 - IFLA_PAD = 0x2a - IFLA_XDP = 0x2b - IFLA_EVENT = 0x2c - IFLA_NEW_NETNSID = 0x2d - IFLA_IF_NETNSID = 0x2e - IFLA_TARGET_NETNSID = 0x2e - IFLA_CARRIER_UP_COUNT = 0x2f - IFLA_CARRIER_DOWN_COUNT = 0x30 - IFLA_NEW_IFINDEX = 0x31 - IFLA_MIN_MTU = 0x32 - IFLA_MAX_MTU = 0x33 - IFLA_PROP_LIST = 0x34 - IFLA_ALT_IFNAME = 0x35 - IFLA_PERM_ADDRESS = 0x36 - IFLA_PROTO_DOWN_REASON = 0x37 - IFLA_PARENT_DEV_NAME = 0x38 - IFLA_PARENT_DEV_BUS_NAME = 0x39 - IFLA_GRO_MAX_SIZE = 0x3a - IFLA_TSO_MAX_SIZE = 0x3b - IFLA_TSO_MAX_SEGS = 0x3c - IFLA_PROTO_DOWN_REASON_UNSPEC = 0x0 - IFLA_PROTO_DOWN_REASON_MASK = 0x1 - IFLA_PROTO_DOWN_REASON_VALUE = 0x2 - IFLA_PROTO_DOWN_REASON_MAX = 0x2 - IFLA_INET_UNSPEC = 0x0 - IFLA_INET_CONF = 0x1 - IFLA_INET6_UNSPEC = 0x0 - IFLA_INET6_FLAGS = 0x1 - IFLA_INET6_CONF = 0x2 - IFLA_INET6_STATS = 0x3 - IFLA_INET6_MCAST = 0x4 - IFLA_INET6_CACHEINFO = 0x5 - IFLA_INET6_ICMP6STATS = 0x6 - IFLA_INET6_TOKEN = 0x7 - IFLA_INET6_ADDR_GEN_MODE = 0x8 - IFLA_BR_UNSPEC = 0x0 - IFLA_BR_FORWARD_DELAY = 0x1 - IFLA_BR_HELLO_TIME = 0x2 - IFLA_BR_MAX_AGE = 0x3 - IFLA_BR_AGEING_TIME = 0x4 - IFLA_BR_STP_STATE = 0x5 - IFLA_BR_PRIORITY = 0x6 - IFLA_BR_VLAN_FILTERING = 0x7 - IFLA_BR_VLAN_PROTOCOL = 0x8 - IFLA_BR_GROUP_FWD_MASK = 0x9 - IFLA_BR_ROOT_ID = 0xa - IFLA_BR_BRIDGE_ID = 0xb - IFLA_BR_ROOT_PORT = 0xc - IFLA_BR_ROOT_PATH_COST = 0xd - IFLA_BR_TOPOLOGY_CHANGE = 0xe - IFLA_BR_TOPOLOGY_CHANGE_DETECTED = 0xf - IFLA_BR_HELLO_TIMER = 0x10 - IFLA_BR_TCN_TIMER = 0x11 - IFLA_BR_TOPOLOGY_CHANGE_TIMER = 0x12 - IFLA_BR_GC_TIMER = 0x13 - IFLA_BR_GROUP_ADDR = 0x14 - IFLA_BR_FDB_FLUSH = 0x15 - IFLA_BR_MCAST_ROUTER = 0x16 - IFLA_BR_MCAST_SNOOPING = 0x17 - IFLA_BR_MCAST_QUERY_USE_IFADDR = 0x18 - IFLA_BR_MCAST_QUERIER = 0x19 - IFLA_BR_MCAST_HASH_ELASTICITY = 0x1a - IFLA_BR_MCAST_HASH_MAX = 0x1b - IFLA_BR_MCAST_LAST_MEMBER_CNT = 0x1c - IFLA_BR_MCAST_STARTUP_QUERY_CNT = 0x1d - IFLA_BR_MCAST_LAST_MEMBER_INTVL = 0x1e - IFLA_BR_MCAST_MEMBERSHIP_INTVL = 0x1f - IFLA_BR_MCAST_QUERIER_INTVL = 0x20 - IFLA_BR_MCAST_QUERY_INTVL = 0x21 - IFLA_BR_MCAST_QUERY_RESPONSE_INTVL = 0x22 - IFLA_BR_MCAST_STARTUP_QUERY_INTVL = 0x23 - IFLA_BR_NF_CALL_IPTABLES = 0x24 - IFLA_BR_NF_CALL_IP6TABLES = 0x25 - IFLA_BR_NF_CALL_ARPTABLES = 0x26 - IFLA_BR_VLAN_DEFAULT_PVID = 0x27 - IFLA_BR_PAD = 0x28 - IFLA_BR_VLAN_STATS_ENABLED = 0x29 - IFLA_BR_MCAST_STATS_ENABLED = 0x2a - IFLA_BR_MCAST_IGMP_VERSION = 0x2b - IFLA_BR_MCAST_MLD_VERSION = 0x2c - IFLA_BR_VLAN_STATS_PER_PORT = 0x2d - IFLA_BR_MULTI_BOOLOPT = 0x2e - IFLA_BRPORT_UNSPEC = 0x0 - IFLA_BRPORT_STATE = 0x1 - IFLA_BRPORT_PRIORITY = 0x2 - IFLA_BRPORT_COST = 0x3 - IFLA_BRPORT_MODE = 0x4 - IFLA_BRPORT_GUARD = 0x5 - IFLA_BRPORT_PROTECT = 0x6 - IFLA_BRPORT_FAST_LEAVE = 0x7 - IFLA_BRPORT_LEARNING = 0x8 - IFLA_BRPORT_UNICAST_FLOOD = 0x9 - IFLA_BRPORT_PROXYARP = 0xa - IFLA_BRPORT_LEARNING_SYNC = 0xb - IFLA_BRPORT_PROXYARP_WIFI = 0xc - IFLA_BRPORT_ROOT_ID = 0xd - IFLA_BRPORT_BRIDGE_ID = 0xe - IFLA_BRPORT_DESIGNATED_PORT = 0xf - IFLA_BRPORT_DESIGNATED_COST = 0x10 - IFLA_BRPORT_ID = 0x11 - IFLA_BRPORT_NO = 0x12 - IFLA_BRPORT_TOPOLOGY_CHANGE_ACK = 0x13 - IFLA_BRPORT_CONFIG_PENDING = 0x14 - IFLA_BRPORT_MESSAGE_AGE_TIMER = 0x15 - IFLA_BRPORT_FORWARD_DELAY_TIMER = 0x16 - IFLA_BRPORT_HOLD_TIMER = 0x17 - IFLA_BRPORT_FLUSH = 0x18 - IFLA_BRPORT_MULTICAST_ROUTER = 0x19 - IFLA_BRPORT_PAD = 0x1a - IFLA_BRPORT_MCAST_FLOOD = 0x1b - IFLA_BRPORT_MCAST_TO_UCAST = 0x1c - IFLA_BRPORT_VLAN_TUNNEL = 0x1d - IFLA_BRPORT_BCAST_FLOOD = 0x1e - IFLA_BRPORT_GROUP_FWD_MASK = 0x1f - IFLA_BRPORT_NEIGH_SUPPRESS = 0x20 - IFLA_BRPORT_ISOLATED = 0x21 - IFLA_BRPORT_BACKUP_PORT = 0x22 - IFLA_BRPORT_MRP_RING_OPEN = 0x23 - IFLA_BRPORT_MRP_IN_OPEN = 0x24 - IFLA_INFO_UNSPEC = 0x0 - IFLA_INFO_KIND = 0x1 - IFLA_INFO_DATA = 0x2 - IFLA_INFO_XSTATS = 0x3 - IFLA_INFO_SLAVE_KIND = 0x4 - IFLA_INFO_SLAVE_DATA = 0x5 - IFLA_VLAN_UNSPEC = 0x0 - IFLA_VLAN_ID = 0x1 - IFLA_VLAN_FLAGS = 0x2 - IFLA_VLAN_EGRESS_QOS = 0x3 - IFLA_VLAN_INGRESS_QOS = 0x4 - IFLA_VLAN_PROTOCOL = 0x5 - IFLA_VLAN_QOS_UNSPEC = 0x0 - IFLA_VLAN_QOS_MAPPING = 0x1 - IFLA_MACVLAN_UNSPEC = 0x0 - IFLA_MACVLAN_MODE = 0x1 - IFLA_MACVLAN_FLAGS = 0x2 - IFLA_MACVLAN_MACADDR_MODE = 0x3 - IFLA_MACVLAN_MACADDR = 0x4 - IFLA_MACVLAN_MACADDR_DATA = 0x5 - IFLA_MACVLAN_MACADDR_COUNT = 0x6 - IFLA_VRF_UNSPEC = 0x0 - IFLA_VRF_TABLE = 0x1 - IFLA_VRF_PORT_UNSPEC = 0x0 - IFLA_VRF_PORT_TABLE = 0x1 - IFLA_MACSEC_UNSPEC = 0x0 - IFLA_MACSEC_SCI = 0x1 - IFLA_MACSEC_PORT = 0x2 - IFLA_MACSEC_ICV_LEN = 0x3 - IFLA_MACSEC_CIPHER_SUITE = 0x4 - IFLA_MACSEC_WINDOW = 0x5 - IFLA_MACSEC_ENCODING_SA = 0x6 - IFLA_MACSEC_ENCRYPT = 0x7 - IFLA_MACSEC_PROTECT = 0x8 - IFLA_MACSEC_INC_SCI = 0x9 - IFLA_MACSEC_ES = 0xa - IFLA_MACSEC_SCB = 0xb - IFLA_MACSEC_REPLAY_PROTECT = 0xc - IFLA_MACSEC_VALIDATION = 0xd - IFLA_MACSEC_PAD = 0xe - IFLA_MACSEC_OFFLOAD = 0xf - IFLA_XFRM_UNSPEC = 0x0 - IFLA_XFRM_LINK = 0x1 - IFLA_XFRM_IF_ID = 0x2 - IFLA_IPVLAN_UNSPEC = 0x0 - IFLA_IPVLAN_MODE = 0x1 - IFLA_IPVLAN_FLAGS = 0x2 - IFLA_VXLAN_UNSPEC = 0x0 - IFLA_VXLAN_ID = 0x1 - IFLA_VXLAN_GROUP = 0x2 - IFLA_VXLAN_LINK = 0x3 - IFLA_VXLAN_LOCAL = 0x4 - IFLA_VXLAN_TTL = 0x5 - IFLA_VXLAN_TOS = 0x6 - IFLA_VXLAN_LEARNING = 0x7 - IFLA_VXLAN_AGEING = 0x8 - IFLA_VXLAN_LIMIT = 0x9 - IFLA_VXLAN_PORT_RANGE = 0xa - IFLA_VXLAN_PROXY = 0xb - IFLA_VXLAN_RSC = 0xc - IFLA_VXLAN_L2MISS = 0xd - IFLA_VXLAN_L3MISS = 0xe - IFLA_VXLAN_PORT = 0xf - IFLA_VXLAN_GROUP6 = 0x10 - IFLA_VXLAN_LOCAL6 = 0x11 - IFLA_VXLAN_UDP_CSUM = 0x12 - IFLA_VXLAN_UDP_ZERO_CSUM6_TX = 0x13 - IFLA_VXLAN_UDP_ZERO_CSUM6_RX = 0x14 - IFLA_VXLAN_REMCSUM_TX = 0x15 - IFLA_VXLAN_REMCSUM_RX = 0x16 - IFLA_VXLAN_GBP = 0x17 - IFLA_VXLAN_REMCSUM_NOPARTIAL = 0x18 - IFLA_VXLAN_COLLECT_METADATA = 0x19 - IFLA_VXLAN_LABEL = 0x1a - IFLA_VXLAN_GPE = 0x1b - IFLA_VXLAN_TTL_INHERIT = 0x1c - IFLA_VXLAN_DF = 0x1d - IFLA_GENEVE_UNSPEC = 0x0 - IFLA_GENEVE_ID = 0x1 - IFLA_GENEVE_REMOTE = 0x2 - IFLA_GENEVE_TTL = 0x3 - IFLA_GENEVE_TOS = 0x4 - IFLA_GENEVE_PORT = 0x5 - IFLA_GENEVE_COLLECT_METADATA = 0x6 - IFLA_GENEVE_REMOTE6 = 0x7 - IFLA_GENEVE_UDP_CSUM = 0x8 - IFLA_GENEVE_UDP_ZERO_CSUM6_TX = 0x9 - IFLA_GENEVE_UDP_ZERO_CSUM6_RX = 0xa - IFLA_GENEVE_LABEL = 0xb - IFLA_GENEVE_TTL_INHERIT = 0xc - IFLA_GENEVE_DF = 0xd - IFLA_BAREUDP_UNSPEC = 0x0 - IFLA_BAREUDP_PORT = 0x1 - IFLA_BAREUDP_ETHERTYPE = 0x2 - IFLA_BAREUDP_SRCPORT_MIN = 0x3 - IFLA_BAREUDP_MULTIPROTO_MODE = 0x4 - IFLA_PPP_UNSPEC = 0x0 - IFLA_PPP_DEV_FD = 0x1 - IFLA_GTP_UNSPEC = 0x0 - IFLA_GTP_FD0 = 0x1 - IFLA_GTP_FD1 = 0x2 - IFLA_GTP_PDP_HASHSIZE = 0x3 - IFLA_GTP_ROLE = 0x4 - IFLA_BOND_UNSPEC = 0x0 - IFLA_BOND_MODE = 0x1 - IFLA_BOND_ACTIVE_SLAVE = 0x2 - IFLA_BOND_MIIMON = 0x3 - IFLA_BOND_UPDELAY = 0x4 - IFLA_BOND_DOWNDELAY = 0x5 - IFLA_BOND_USE_CARRIER = 0x6 - IFLA_BOND_ARP_INTERVAL = 0x7 - IFLA_BOND_ARP_IP_TARGET = 0x8 - IFLA_BOND_ARP_VALIDATE = 0x9 - IFLA_BOND_ARP_ALL_TARGETS = 0xa - IFLA_BOND_PRIMARY = 0xb - IFLA_BOND_PRIMARY_RESELECT = 0xc - IFLA_BOND_FAIL_OVER_MAC = 0xd - IFLA_BOND_XMIT_HASH_POLICY = 0xe - IFLA_BOND_RESEND_IGMP = 0xf - IFLA_BOND_NUM_PEER_NOTIF = 0x10 - IFLA_BOND_ALL_SLAVES_ACTIVE = 0x11 - IFLA_BOND_MIN_LINKS = 0x12 - IFLA_BOND_LP_INTERVAL = 0x13 - IFLA_BOND_PACKETS_PER_SLAVE = 0x14 - IFLA_BOND_AD_LACP_RATE = 0x15 - IFLA_BOND_AD_SELECT = 0x16 - IFLA_BOND_AD_INFO = 0x17 - IFLA_BOND_AD_ACTOR_SYS_PRIO = 0x18 - IFLA_BOND_AD_USER_PORT_KEY = 0x19 - IFLA_BOND_AD_ACTOR_SYSTEM = 0x1a - IFLA_BOND_TLB_DYNAMIC_LB = 0x1b - IFLA_BOND_PEER_NOTIF_DELAY = 0x1c - IFLA_BOND_AD_INFO_UNSPEC = 0x0 - IFLA_BOND_AD_INFO_AGGREGATOR = 0x1 - IFLA_BOND_AD_INFO_NUM_PORTS = 0x2 - IFLA_BOND_AD_INFO_ACTOR_KEY = 0x3 - IFLA_BOND_AD_INFO_PARTNER_KEY = 0x4 - IFLA_BOND_AD_INFO_PARTNER_MAC = 0x5 - IFLA_BOND_SLAVE_UNSPEC = 0x0 - IFLA_BOND_SLAVE_STATE = 0x1 - IFLA_BOND_SLAVE_MII_STATUS = 0x2 - IFLA_BOND_SLAVE_LINK_FAILURE_COUNT = 0x3 - IFLA_BOND_SLAVE_PERM_HWADDR = 0x4 - IFLA_BOND_SLAVE_QUEUE_ID = 0x5 - IFLA_BOND_SLAVE_AD_AGGREGATOR_ID = 0x6 - IFLA_BOND_SLAVE_AD_ACTOR_OPER_PORT_STATE = 0x7 - IFLA_BOND_SLAVE_AD_PARTNER_OPER_PORT_STATE = 0x8 - IFLA_VF_INFO_UNSPEC = 0x0 - IFLA_VF_INFO = 0x1 - IFLA_VF_UNSPEC = 0x0 - IFLA_VF_MAC = 0x1 - IFLA_VF_VLAN = 0x2 - IFLA_VF_TX_RATE = 0x3 - IFLA_VF_SPOOFCHK = 0x4 - IFLA_VF_LINK_STATE = 0x5 - IFLA_VF_RATE = 0x6 - IFLA_VF_RSS_QUERY_EN = 0x7 - IFLA_VF_STATS = 0x8 - IFLA_VF_TRUST = 0x9 - IFLA_VF_IB_NODE_GUID = 0xa - IFLA_VF_IB_PORT_GUID = 0xb - IFLA_VF_VLAN_LIST = 0xc - IFLA_VF_BROADCAST = 0xd - IFLA_VF_VLAN_INFO_UNSPEC = 0x0 - IFLA_VF_VLAN_INFO = 0x1 - IFLA_VF_LINK_STATE_AUTO = 0x0 - IFLA_VF_LINK_STATE_ENABLE = 0x1 - IFLA_VF_LINK_STATE_DISABLE = 0x2 - IFLA_VF_STATS_RX_PACKETS = 0x0 - IFLA_VF_STATS_TX_PACKETS = 0x1 - IFLA_VF_STATS_RX_BYTES = 0x2 - IFLA_VF_STATS_TX_BYTES = 0x3 - IFLA_VF_STATS_BROADCAST = 0x4 - IFLA_VF_STATS_MULTICAST = 0x5 - IFLA_VF_STATS_PAD = 0x6 - IFLA_VF_STATS_RX_DROPPED = 0x7 - IFLA_VF_STATS_TX_DROPPED = 0x8 - IFLA_VF_PORT_UNSPEC = 0x0 - IFLA_VF_PORT = 0x1 - IFLA_PORT_UNSPEC = 0x0 - IFLA_PORT_VF = 0x1 - IFLA_PORT_PROFILE = 0x2 - IFLA_PORT_VSI_TYPE = 0x3 - IFLA_PORT_INSTANCE_UUID = 0x4 - IFLA_PORT_HOST_UUID = 0x5 - IFLA_PORT_REQUEST = 0x6 - IFLA_PORT_RESPONSE = 0x7 - IFLA_IPOIB_UNSPEC = 0x0 - IFLA_IPOIB_PKEY = 0x1 - IFLA_IPOIB_MODE = 0x2 - IFLA_IPOIB_UMCAST = 0x3 - IFLA_HSR_UNSPEC = 0x0 - IFLA_HSR_SLAVE1 = 0x1 - IFLA_HSR_SLAVE2 = 0x2 - IFLA_HSR_MULTICAST_SPEC = 0x3 - IFLA_HSR_SUPERVISION_ADDR = 0x4 - IFLA_HSR_SEQ_NR = 0x5 - IFLA_HSR_VERSION = 0x6 - IFLA_HSR_PROTOCOL = 0x7 - IFLA_STATS_UNSPEC = 0x0 - IFLA_STATS_LINK_64 = 0x1 - IFLA_STATS_LINK_XSTATS = 0x2 - IFLA_STATS_LINK_XSTATS_SLAVE = 0x3 - IFLA_STATS_LINK_OFFLOAD_XSTATS = 0x4 - IFLA_STATS_AF_SPEC = 0x5 - IFLA_OFFLOAD_XSTATS_UNSPEC = 0x0 - IFLA_OFFLOAD_XSTATS_CPU_HIT = 0x1 - IFLA_XDP_UNSPEC = 0x0 - IFLA_XDP_FD = 0x1 - IFLA_XDP_ATTACHED = 0x2 - IFLA_XDP_FLAGS = 0x3 - IFLA_XDP_PROG_ID = 0x4 - IFLA_XDP_DRV_PROG_ID = 0x5 - IFLA_XDP_SKB_PROG_ID = 0x6 - IFLA_XDP_HW_PROG_ID = 0x7 - IFLA_XDP_EXPECTED_FD = 0x8 - IFLA_EVENT_NONE = 0x0 - IFLA_EVENT_REBOOT = 0x1 - IFLA_EVENT_FEATURES = 0x2 - IFLA_EVENT_BONDING_FAILOVER = 0x3 - IFLA_EVENT_NOTIFY_PEERS = 0x4 - IFLA_EVENT_IGMP_RESEND = 0x5 - IFLA_EVENT_BONDING_OPTIONS = 0x6 - IFLA_TUN_UNSPEC = 0x0 - IFLA_TUN_OWNER = 0x1 - IFLA_TUN_GROUP = 0x2 - IFLA_TUN_TYPE = 0x3 - IFLA_TUN_PI = 0x4 - IFLA_TUN_VNET_HDR = 0x5 - IFLA_TUN_PERSIST = 0x6 - IFLA_TUN_MULTI_QUEUE = 0x7 - IFLA_TUN_NUM_QUEUES = 0x8 - IFLA_TUN_NUM_DISABLED_QUEUES = 0x9 - IFLA_RMNET_UNSPEC = 0x0 - IFLA_RMNET_MUX_ID = 0x1 - IFLA_RMNET_FLAGS = 0x2 -) - -const ( - NF_INET_PRE_ROUTING = 0x0 - NF_INET_LOCAL_IN = 0x1 - NF_INET_FORWARD = 0x2 - NF_INET_LOCAL_OUT = 0x3 - NF_INET_POST_ROUTING = 0x4 - NF_INET_NUMHOOKS = 0x5 -) - -const ( - NF_NETDEV_INGRESS = 0x0 - NF_NETDEV_EGRESS = 0x1 - NF_NETDEV_NUMHOOKS = 0x2 -) - -const ( - NFPROTO_UNSPEC = 0x0 - NFPROTO_INET = 0x1 - NFPROTO_IPV4 = 0x2 - NFPROTO_ARP = 0x3 - NFPROTO_NETDEV = 0x5 - NFPROTO_BRIDGE = 0x7 - NFPROTO_IPV6 = 0xa - NFPROTO_DECNET = 0xc - NFPROTO_NUMPROTO = 0xd -) - -const SO_ORIGINAL_DST = 0x50 - -type Nfgenmsg struct { - Nfgen_family uint8 - Version uint8 - Res_id uint16 -} - -const ( - NFNL_BATCH_UNSPEC = 0x0 - NFNL_BATCH_GENID = 0x1 -) - -const ( - NFT_REG_VERDICT = 0x0 - NFT_REG_1 = 0x1 - NFT_REG_2 = 0x2 - NFT_REG_3 = 0x3 - NFT_REG_4 = 0x4 - NFT_REG32_00 = 0x8 - NFT_REG32_01 = 0x9 - NFT_REG32_02 = 0xa - NFT_REG32_03 = 0xb - NFT_REG32_04 = 0xc - NFT_REG32_05 = 0xd - NFT_REG32_06 = 0xe - NFT_REG32_07 = 0xf - NFT_REG32_08 = 0x10 - NFT_REG32_09 = 0x11 - NFT_REG32_10 = 0x12 - NFT_REG32_11 = 0x13 - NFT_REG32_12 = 0x14 - NFT_REG32_13 = 0x15 - NFT_REG32_14 = 0x16 - NFT_REG32_15 = 0x17 - NFT_CONTINUE = -0x1 - NFT_BREAK = -0x2 - NFT_JUMP = -0x3 - NFT_GOTO = -0x4 - NFT_RETURN = -0x5 - NFT_MSG_NEWTABLE = 0x0 - NFT_MSG_GETTABLE = 0x1 - NFT_MSG_DELTABLE = 0x2 - NFT_MSG_NEWCHAIN = 0x3 - NFT_MSG_GETCHAIN = 0x4 - NFT_MSG_DELCHAIN = 0x5 - NFT_MSG_NEWRULE = 0x6 - NFT_MSG_GETRULE = 0x7 - NFT_MSG_DELRULE = 0x8 - NFT_MSG_NEWSET = 0x9 - NFT_MSG_GETSET = 0xa - NFT_MSG_DELSET = 0xb - NFT_MSG_NEWSETELEM = 0xc - NFT_MSG_GETSETELEM = 0xd - NFT_MSG_DELSETELEM = 0xe - NFT_MSG_NEWGEN = 0xf - NFT_MSG_GETGEN = 0x10 - NFT_MSG_TRACE = 0x11 - NFT_MSG_NEWOBJ = 0x12 - NFT_MSG_GETOBJ = 0x13 - NFT_MSG_DELOBJ = 0x14 - NFT_MSG_GETOBJ_RESET = 0x15 - NFT_MSG_MAX = 0x19 - NFTA_LIST_UNSPEC = 0x0 - NFTA_LIST_ELEM = 0x1 - NFTA_HOOK_UNSPEC = 0x0 - NFTA_HOOK_HOOKNUM = 0x1 - NFTA_HOOK_PRIORITY = 0x2 - NFTA_HOOK_DEV = 0x3 - NFT_TABLE_F_DORMANT = 0x1 - NFTA_TABLE_UNSPEC = 0x0 - NFTA_TABLE_NAME = 0x1 - NFTA_TABLE_FLAGS = 0x2 - NFTA_TABLE_USE = 0x3 - NFTA_CHAIN_UNSPEC = 0x0 - NFTA_CHAIN_TABLE = 0x1 - NFTA_CHAIN_HANDLE = 0x2 - NFTA_CHAIN_NAME = 0x3 - NFTA_CHAIN_HOOK = 0x4 - NFTA_CHAIN_POLICY = 0x5 - NFTA_CHAIN_USE = 0x6 - NFTA_CHAIN_TYPE = 0x7 - NFTA_CHAIN_COUNTERS = 0x8 - NFTA_CHAIN_PAD = 0x9 - NFTA_RULE_UNSPEC = 0x0 - NFTA_RULE_TABLE = 0x1 - NFTA_RULE_CHAIN = 0x2 - NFTA_RULE_HANDLE = 0x3 - NFTA_RULE_EXPRESSIONS = 0x4 - NFTA_RULE_COMPAT = 0x5 - NFTA_RULE_POSITION = 0x6 - NFTA_RULE_USERDATA = 0x7 - NFTA_RULE_PAD = 0x8 - NFTA_RULE_ID = 0x9 - NFT_RULE_COMPAT_F_INV = 0x2 - NFT_RULE_COMPAT_F_MASK = 0x2 - NFTA_RULE_COMPAT_UNSPEC = 0x0 - NFTA_RULE_COMPAT_PROTO = 0x1 - NFTA_RULE_COMPAT_FLAGS = 0x2 - NFT_SET_ANONYMOUS = 0x1 - NFT_SET_CONSTANT = 0x2 - NFT_SET_INTERVAL = 0x4 - NFT_SET_MAP = 0x8 - NFT_SET_TIMEOUT = 0x10 - NFT_SET_EVAL = 0x20 - NFT_SET_OBJECT = 0x40 - NFT_SET_POL_PERFORMANCE = 0x0 - NFT_SET_POL_MEMORY = 0x1 - NFTA_SET_DESC_UNSPEC = 0x0 - NFTA_SET_DESC_SIZE = 0x1 - NFTA_SET_UNSPEC = 0x0 - NFTA_SET_TABLE = 0x1 - NFTA_SET_NAME = 0x2 - NFTA_SET_FLAGS = 0x3 - NFTA_SET_KEY_TYPE = 0x4 - NFTA_SET_KEY_LEN = 0x5 - NFTA_SET_DATA_TYPE = 0x6 - NFTA_SET_DATA_LEN = 0x7 - NFTA_SET_POLICY = 0x8 - NFTA_SET_DESC = 0x9 - NFTA_SET_ID = 0xa - NFTA_SET_TIMEOUT = 0xb - NFTA_SET_GC_INTERVAL = 0xc - NFTA_SET_USERDATA = 0xd - NFTA_SET_PAD = 0xe - NFTA_SET_OBJ_TYPE = 0xf - NFT_SET_ELEM_INTERVAL_END = 0x1 - NFTA_SET_ELEM_UNSPEC = 0x0 - NFTA_SET_ELEM_KEY = 0x1 - NFTA_SET_ELEM_DATA = 0x2 - NFTA_SET_ELEM_FLAGS = 0x3 - NFTA_SET_ELEM_TIMEOUT = 0x4 - NFTA_SET_ELEM_EXPIRATION = 0x5 - NFTA_SET_ELEM_USERDATA = 0x6 - NFTA_SET_ELEM_EXPR = 0x7 - NFTA_SET_ELEM_PAD = 0x8 - NFTA_SET_ELEM_OBJREF = 0x9 - NFTA_SET_ELEM_LIST_UNSPEC = 0x0 - NFTA_SET_ELEM_LIST_TABLE = 0x1 - NFTA_SET_ELEM_LIST_SET = 0x2 - NFTA_SET_ELEM_LIST_ELEMENTS = 0x3 - NFTA_SET_ELEM_LIST_SET_ID = 0x4 - NFT_DATA_VALUE = 0x0 - NFT_DATA_VERDICT = 0xffffff00 - NFTA_DATA_UNSPEC = 0x0 - NFTA_DATA_VALUE = 0x1 - NFTA_DATA_VERDICT = 0x2 - NFTA_VERDICT_UNSPEC = 0x0 - NFTA_VERDICT_CODE = 0x1 - NFTA_VERDICT_CHAIN = 0x2 - NFTA_EXPR_UNSPEC = 0x0 - NFTA_EXPR_NAME = 0x1 - NFTA_EXPR_DATA = 0x2 - NFTA_IMMEDIATE_UNSPEC = 0x0 - NFTA_IMMEDIATE_DREG = 0x1 - NFTA_IMMEDIATE_DATA = 0x2 - NFTA_BITWISE_UNSPEC = 0x0 - NFTA_BITWISE_SREG = 0x1 - NFTA_BITWISE_DREG = 0x2 - NFTA_BITWISE_LEN = 0x3 - NFTA_BITWISE_MASK = 0x4 - NFTA_BITWISE_XOR = 0x5 - NFT_BYTEORDER_NTOH = 0x0 - NFT_BYTEORDER_HTON = 0x1 - NFTA_BYTEORDER_UNSPEC = 0x0 - NFTA_BYTEORDER_SREG = 0x1 - NFTA_BYTEORDER_DREG = 0x2 - NFTA_BYTEORDER_OP = 0x3 - NFTA_BYTEORDER_LEN = 0x4 - NFTA_BYTEORDER_SIZE = 0x5 - NFT_CMP_EQ = 0x0 - NFT_CMP_NEQ = 0x1 - NFT_CMP_LT = 0x2 - NFT_CMP_LTE = 0x3 - NFT_CMP_GT = 0x4 - NFT_CMP_GTE = 0x5 - NFTA_CMP_UNSPEC = 0x0 - NFTA_CMP_SREG = 0x1 - NFTA_CMP_OP = 0x2 - NFTA_CMP_DATA = 0x3 - NFT_RANGE_EQ = 0x0 - NFT_RANGE_NEQ = 0x1 - NFTA_RANGE_UNSPEC = 0x0 - NFTA_RANGE_SREG = 0x1 - NFTA_RANGE_OP = 0x2 - NFTA_RANGE_FROM_DATA = 0x3 - NFTA_RANGE_TO_DATA = 0x4 - NFT_LOOKUP_F_INV = 0x1 - NFTA_LOOKUP_UNSPEC = 0x0 - NFTA_LOOKUP_SET = 0x1 - NFTA_LOOKUP_SREG = 0x2 - NFTA_LOOKUP_DREG = 0x3 - NFTA_LOOKUP_SET_ID = 0x4 - NFTA_LOOKUP_FLAGS = 0x5 - NFT_DYNSET_OP_ADD = 0x0 - NFT_DYNSET_OP_UPDATE = 0x1 - NFT_DYNSET_F_INV = 0x1 - NFTA_DYNSET_UNSPEC = 0x0 - NFTA_DYNSET_SET_NAME = 0x1 - NFTA_DYNSET_SET_ID = 0x2 - NFTA_DYNSET_OP = 0x3 - NFTA_DYNSET_SREG_KEY = 0x4 - NFTA_DYNSET_SREG_DATA = 0x5 - NFTA_DYNSET_TIMEOUT = 0x6 - NFTA_DYNSET_EXPR = 0x7 - NFTA_DYNSET_PAD = 0x8 - NFTA_DYNSET_FLAGS = 0x9 - NFT_PAYLOAD_LL_HEADER = 0x0 - NFT_PAYLOAD_NETWORK_HEADER = 0x1 - NFT_PAYLOAD_TRANSPORT_HEADER = 0x2 - NFT_PAYLOAD_CSUM_NONE = 0x0 - NFT_PAYLOAD_CSUM_INET = 0x1 - NFT_PAYLOAD_L4CSUM_PSEUDOHDR = 0x1 - NFTA_PAYLOAD_UNSPEC = 0x0 - NFTA_PAYLOAD_DREG = 0x1 - NFTA_PAYLOAD_BASE = 0x2 - NFTA_PAYLOAD_OFFSET = 0x3 - NFTA_PAYLOAD_LEN = 0x4 - NFTA_PAYLOAD_SREG = 0x5 - NFTA_PAYLOAD_CSUM_TYPE = 0x6 - NFTA_PAYLOAD_CSUM_OFFSET = 0x7 - NFTA_PAYLOAD_CSUM_FLAGS = 0x8 - NFT_EXTHDR_F_PRESENT = 0x1 - NFT_EXTHDR_OP_IPV6 = 0x0 - NFT_EXTHDR_OP_TCPOPT = 0x1 - NFTA_EXTHDR_UNSPEC = 0x0 - NFTA_EXTHDR_DREG = 0x1 - NFTA_EXTHDR_TYPE = 0x2 - NFTA_EXTHDR_OFFSET = 0x3 - NFTA_EXTHDR_LEN = 0x4 - NFTA_EXTHDR_FLAGS = 0x5 - NFTA_EXTHDR_OP = 0x6 - NFTA_EXTHDR_SREG = 0x7 - NFT_META_LEN = 0x0 - NFT_META_PROTOCOL = 0x1 - NFT_META_PRIORITY = 0x2 - NFT_META_MARK = 0x3 - NFT_META_IIF = 0x4 - NFT_META_OIF = 0x5 - NFT_META_IIFNAME = 0x6 - NFT_META_OIFNAME = 0x7 - NFT_META_IIFTYPE = 0x8 - NFT_META_OIFTYPE = 0x9 - NFT_META_SKUID = 0xa - NFT_META_SKGID = 0xb - NFT_META_NFTRACE = 0xc - NFT_META_RTCLASSID = 0xd - NFT_META_SECMARK = 0xe - NFT_META_NFPROTO = 0xf - NFT_META_L4PROTO = 0x10 - NFT_META_BRI_IIFNAME = 0x11 - NFT_META_BRI_OIFNAME = 0x12 - NFT_META_PKTTYPE = 0x13 - NFT_META_CPU = 0x14 - NFT_META_IIFGROUP = 0x15 - NFT_META_OIFGROUP = 0x16 - NFT_META_CGROUP = 0x17 - NFT_META_PRANDOM = 0x18 - NFT_RT_CLASSID = 0x0 - NFT_RT_NEXTHOP4 = 0x1 - NFT_RT_NEXTHOP6 = 0x2 - NFT_RT_TCPMSS = 0x3 - NFT_HASH_JENKINS = 0x0 - NFT_HASH_SYM = 0x1 - NFTA_HASH_UNSPEC = 0x0 - NFTA_HASH_SREG = 0x1 - NFTA_HASH_DREG = 0x2 - NFTA_HASH_LEN = 0x3 - NFTA_HASH_MODULUS = 0x4 - NFTA_HASH_SEED = 0x5 - NFTA_HASH_OFFSET = 0x6 - NFTA_HASH_TYPE = 0x7 - NFTA_META_UNSPEC = 0x0 - NFTA_META_DREG = 0x1 - NFTA_META_KEY = 0x2 - NFTA_META_SREG = 0x3 - NFTA_RT_UNSPEC = 0x0 - NFTA_RT_DREG = 0x1 - NFTA_RT_KEY = 0x2 - NFT_CT_STATE = 0x0 - NFT_CT_DIRECTION = 0x1 - NFT_CT_STATUS = 0x2 - NFT_CT_MARK = 0x3 - NFT_CT_SECMARK = 0x4 - NFT_CT_EXPIRATION = 0x5 - NFT_CT_HELPER = 0x6 - NFT_CT_L3PROTOCOL = 0x7 - NFT_CT_SRC = 0x8 - NFT_CT_DST = 0x9 - NFT_CT_PROTOCOL = 0xa - NFT_CT_PROTO_SRC = 0xb - NFT_CT_PROTO_DST = 0xc - NFT_CT_LABELS = 0xd - NFT_CT_PKTS = 0xe - NFT_CT_BYTES = 0xf - NFT_CT_AVGPKT = 0x10 - NFT_CT_ZONE = 0x11 - NFT_CT_EVENTMASK = 0x12 - NFTA_CT_UNSPEC = 0x0 - NFTA_CT_DREG = 0x1 - NFTA_CT_KEY = 0x2 - NFTA_CT_DIRECTION = 0x3 - NFTA_CT_SREG = 0x4 - NFT_LIMIT_PKTS = 0x0 - NFT_LIMIT_PKT_BYTES = 0x1 - NFT_LIMIT_F_INV = 0x1 - NFTA_LIMIT_UNSPEC = 0x0 - NFTA_LIMIT_RATE = 0x1 - NFTA_LIMIT_UNIT = 0x2 - NFTA_LIMIT_BURST = 0x3 - NFTA_LIMIT_TYPE = 0x4 - NFTA_LIMIT_FLAGS = 0x5 - NFTA_LIMIT_PAD = 0x6 - NFTA_COUNTER_UNSPEC = 0x0 - NFTA_COUNTER_BYTES = 0x1 - NFTA_COUNTER_PACKETS = 0x2 - NFTA_COUNTER_PAD = 0x3 - NFTA_LOG_UNSPEC = 0x0 - NFTA_LOG_GROUP = 0x1 - NFTA_LOG_PREFIX = 0x2 - NFTA_LOG_SNAPLEN = 0x3 - NFTA_LOG_QTHRESHOLD = 0x4 - NFTA_LOG_LEVEL = 0x5 - NFTA_LOG_FLAGS = 0x6 - NFTA_QUEUE_UNSPEC = 0x0 - NFTA_QUEUE_NUM = 0x1 - NFTA_QUEUE_TOTAL = 0x2 - NFTA_QUEUE_FLAGS = 0x3 - NFTA_QUEUE_SREG_QNUM = 0x4 - NFT_QUOTA_F_INV = 0x1 - NFT_QUOTA_F_DEPLETED = 0x2 - NFTA_QUOTA_UNSPEC = 0x0 - NFTA_QUOTA_BYTES = 0x1 - NFTA_QUOTA_FLAGS = 0x2 - NFTA_QUOTA_PAD = 0x3 - NFTA_QUOTA_CONSUMED = 0x4 - NFT_REJECT_ICMP_UNREACH = 0x0 - NFT_REJECT_TCP_RST = 0x1 - NFT_REJECT_ICMPX_UNREACH = 0x2 - NFT_REJECT_ICMPX_NO_ROUTE = 0x0 - NFT_REJECT_ICMPX_PORT_UNREACH = 0x1 - NFT_REJECT_ICMPX_HOST_UNREACH = 0x2 - NFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3 - NFTA_REJECT_UNSPEC = 0x0 - NFTA_REJECT_TYPE = 0x1 - NFTA_REJECT_ICMP_CODE = 0x2 - NFT_NAT_SNAT = 0x0 - NFT_NAT_DNAT = 0x1 - NFTA_NAT_UNSPEC = 0x0 - NFTA_NAT_TYPE = 0x1 - NFTA_NAT_FAMILY = 0x2 - NFTA_NAT_REG_ADDR_MIN = 0x3 - NFTA_NAT_REG_ADDR_MAX = 0x4 - NFTA_NAT_REG_PROTO_MIN = 0x5 - NFTA_NAT_REG_PROTO_MAX = 0x6 - NFTA_NAT_FLAGS = 0x7 - NFTA_MASQ_UNSPEC = 0x0 - NFTA_MASQ_FLAGS = 0x1 - NFTA_MASQ_REG_PROTO_MIN = 0x2 - NFTA_MASQ_REG_PROTO_MAX = 0x3 - NFTA_REDIR_UNSPEC = 0x0 - NFTA_REDIR_REG_PROTO_MIN = 0x1 - NFTA_REDIR_REG_PROTO_MAX = 0x2 - NFTA_REDIR_FLAGS = 0x3 - NFTA_DUP_UNSPEC = 0x0 - NFTA_DUP_SREG_ADDR = 0x1 - NFTA_DUP_SREG_DEV = 0x2 - NFTA_FWD_UNSPEC = 0x0 - NFTA_FWD_SREG_DEV = 0x1 - NFTA_OBJREF_UNSPEC = 0x0 - NFTA_OBJREF_IMM_TYPE = 0x1 - NFTA_OBJREF_IMM_NAME = 0x2 - NFTA_OBJREF_SET_SREG = 0x3 - NFTA_OBJREF_SET_NAME = 0x4 - NFTA_OBJREF_SET_ID = 0x5 - NFTA_GEN_UNSPEC = 0x0 - NFTA_GEN_ID = 0x1 - NFTA_GEN_PROC_PID = 0x2 - NFTA_GEN_PROC_NAME = 0x3 - NFTA_FIB_UNSPEC = 0x0 - NFTA_FIB_DREG = 0x1 - NFTA_FIB_RESULT = 0x2 - NFTA_FIB_FLAGS = 0x3 - NFT_FIB_RESULT_UNSPEC = 0x0 - NFT_FIB_RESULT_OIF = 0x1 - NFT_FIB_RESULT_OIFNAME = 0x2 - NFT_FIB_RESULT_ADDRTYPE = 0x3 - NFTA_FIB_F_SADDR = 0x1 - NFTA_FIB_F_DADDR = 0x2 - NFTA_FIB_F_MARK = 0x4 - NFTA_FIB_F_IIF = 0x8 - NFTA_FIB_F_OIF = 0x10 - NFTA_FIB_F_PRESENT = 0x20 - NFTA_CT_HELPER_UNSPEC = 0x0 - NFTA_CT_HELPER_NAME = 0x1 - NFTA_CT_HELPER_L3PROTO = 0x2 - NFTA_CT_HELPER_L4PROTO = 0x3 - NFTA_OBJ_UNSPEC = 0x0 - NFTA_OBJ_TABLE = 0x1 - NFTA_OBJ_NAME = 0x2 - NFTA_OBJ_TYPE = 0x3 - NFTA_OBJ_DATA = 0x4 - NFTA_OBJ_USE = 0x5 - NFTA_TRACE_UNSPEC = 0x0 - NFTA_TRACE_TABLE = 0x1 - NFTA_TRACE_CHAIN = 0x2 - NFTA_TRACE_RULE_HANDLE = 0x3 - NFTA_TRACE_TYPE = 0x4 - NFTA_TRACE_VERDICT = 0x5 - NFTA_TRACE_ID = 0x6 - NFTA_TRACE_LL_HEADER = 0x7 - NFTA_TRACE_NETWORK_HEADER = 0x8 - NFTA_TRACE_TRANSPORT_HEADER = 0x9 - NFTA_TRACE_IIF = 0xa - NFTA_TRACE_IIFTYPE = 0xb - NFTA_TRACE_OIF = 0xc - NFTA_TRACE_OIFTYPE = 0xd - NFTA_TRACE_MARK = 0xe - NFTA_TRACE_NFPROTO = 0xf - NFTA_TRACE_POLICY = 0x10 - NFTA_TRACE_PAD = 0x11 - NFT_TRACETYPE_UNSPEC = 0x0 - NFT_TRACETYPE_POLICY = 0x1 - NFT_TRACETYPE_RETURN = 0x2 - NFT_TRACETYPE_RULE = 0x3 - NFTA_NG_UNSPEC = 0x0 - NFTA_NG_DREG = 0x1 - NFTA_NG_MODULUS = 0x2 - NFTA_NG_TYPE = 0x3 - NFTA_NG_OFFSET = 0x4 - NFT_NG_INCREMENTAL = 0x0 - NFT_NG_RANDOM = 0x1 -) - -const ( - NFTA_TARGET_UNSPEC = 0x0 - NFTA_TARGET_NAME = 0x1 - NFTA_TARGET_REV = 0x2 - NFTA_TARGET_INFO = 0x3 - NFTA_MATCH_UNSPEC = 0x0 - NFTA_MATCH_NAME = 0x1 - NFTA_MATCH_REV = 0x2 - NFTA_MATCH_INFO = 0x3 - NFTA_COMPAT_UNSPEC = 0x0 - NFTA_COMPAT_NAME = 0x1 - NFTA_COMPAT_REV = 0x2 - NFTA_COMPAT_TYPE = 0x3 -) - -type RTCTime struct { - Sec int32 - Min int32 - Hour int32 - Mday int32 - Mon int32 - Year int32 - Wday int32 - Yday int32 - Isdst int32 -} - -type RTCWkAlrm struct { - Enabled uint8 - Pending uint8 - Time RTCTime -} - -type BlkpgIoctlArg struct { - Op int32 - Flags int32 - Datalen int32 - Data *byte -} - -const ( - BLKPG_ADD_PARTITION = 0x1 - BLKPG_DEL_PARTITION = 0x2 - BLKPG_RESIZE_PARTITION = 0x3 -) - -const ( - NETNSA_NONE = 0x0 - NETNSA_NSID = 0x1 - NETNSA_PID = 0x2 - NETNSA_FD = 0x3 - NETNSA_TARGET_NSID = 0x4 - NETNSA_CURRENT_NSID = 0x5 -) - -type XDPRingOffset struct { - Producer uint64 - Consumer uint64 - Desc uint64 - Flags uint64 -} - -type XDPMmapOffsets struct { - Rx XDPRingOffset - Tx XDPRingOffset - Fr XDPRingOffset - Cr XDPRingOffset -} - -type XDPStatistics struct { - Rx_dropped uint64 - Rx_invalid_descs uint64 - Tx_invalid_descs uint64 - Rx_ring_full uint64 - Rx_fill_ring_empty_descs uint64 - Tx_ring_empty_descs uint64 -} - -type XDPDesc struct { - Addr uint64 - Len uint32 - Options uint32 -} - -const ( - NCSI_CMD_UNSPEC = 0x0 - NCSI_CMD_PKG_INFO = 0x1 - NCSI_CMD_SET_INTERFACE = 0x2 - NCSI_CMD_CLEAR_INTERFACE = 0x3 - NCSI_ATTR_UNSPEC = 0x0 - NCSI_ATTR_IFINDEX = 0x1 - NCSI_ATTR_PACKAGE_LIST = 0x2 - NCSI_ATTR_PACKAGE_ID = 0x3 - NCSI_ATTR_CHANNEL_ID = 0x4 - NCSI_PKG_ATTR_UNSPEC = 0x0 - NCSI_PKG_ATTR = 0x1 - NCSI_PKG_ATTR_ID = 0x2 - NCSI_PKG_ATTR_FORCED = 0x3 - NCSI_PKG_ATTR_CHANNEL_LIST = 0x4 - NCSI_CHANNEL_ATTR_UNSPEC = 0x0 - NCSI_CHANNEL_ATTR = 0x1 - NCSI_CHANNEL_ATTR_ID = 0x2 - NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3 - NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4 - NCSI_CHANNEL_ATTR_VERSION_STR = 0x5 - NCSI_CHANNEL_ATTR_LINK_STATE = 0x6 - NCSI_CHANNEL_ATTR_ACTIVE = 0x7 - NCSI_CHANNEL_ATTR_FORCED = 0x8 - NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9 - NCSI_CHANNEL_ATTR_VLAN_ID = 0xa -) - -type ScmTimestamping struct { - Ts [3]Timespec -} - -const ( - SOF_TIMESTAMPING_TX_HARDWARE = 0x1 - SOF_TIMESTAMPING_TX_SOFTWARE = 0x2 - SOF_TIMESTAMPING_RX_HARDWARE = 0x4 - SOF_TIMESTAMPING_RX_SOFTWARE = 0x8 - SOF_TIMESTAMPING_SOFTWARE = 0x10 - SOF_TIMESTAMPING_SYS_HARDWARE = 0x20 - SOF_TIMESTAMPING_RAW_HARDWARE = 0x40 - SOF_TIMESTAMPING_OPT_ID = 0x80 - SOF_TIMESTAMPING_TX_SCHED = 0x100 - SOF_TIMESTAMPING_TX_ACK = 0x200 - SOF_TIMESTAMPING_OPT_CMSG = 0x400 - SOF_TIMESTAMPING_OPT_TSONLY = 0x800 - SOF_TIMESTAMPING_OPT_STATS = 0x1000 - SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000 - SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000 - - SOF_TIMESTAMPING_LAST = 0x8000 - SOF_TIMESTAMPING_MASK = 0xffff - - SCM_TSTAMP_SND = 0x0 - SCM_TSTAMP_SCHED = 0x1 - SCM_TSTAMP_ACK = 0x2 -) - -type SockExtendedErr struct { - Errno uint32 - Origin uint8 - Type uint8 - Code uint8 - Pad uint8 - Info uint32 - Data uint32 -} - -type FanotifyEventMetadata struct { - Event_len uint32 - Vers uint8 - Reserved uint8 - Metadata_len uint16 - Mask uint64 - Fd int32 - Pid int32 -} - -type FanotifyResponse struct { - Fd int32 - Response uint32 -} - -const ( - CRYPTO_MSG_BASE = 0x10 - CRYPTO_MSG_NEWALG = 0x10 - CRYPTO_MSG_DELALG = 0x11 - CRYPTO_MSG_UPDATEALG = 0x12 - CRYPTO_MSG_GETALG = 0x13 - CRYPTO_MSG_DELRNG = 0x14 - CRYPTO_MSG_GETSTAT = 0x15 -) - -const ( - CRYPTOCFGA_UNSPEC = 0x0 - CRYPTOCFGA_PRIORITY_VAL = 0x1 - CRYPTOCFGA_REPORT_LARVAL = 0x2 - CRYPTOCFGA_REPORT_HASH = 0x3 - CRYPTOCFGA_REPORT_BLKCIPHER = 0x4 - CRYPTOCFGA_REPORT_AEAD = 0x5 - CRYPTOCFGA_REPORT_COMPRESS = 0x6 - CRYPTOCFGA_REPORT_RNG = 0x7 - CRYPTOCFGA_REPORT_CIPHER = 0x8 - CRYPTOCFGA_REPORT_AKCIPHER = 0x9 - CRYPTOCFGA_REPORT_KPP = 0xa - CRYPTOCFGA_REPORT_ACOMP = 0xb - CRYPTOCFGA_STAT_LARVAL = 0xc - CRYPTOCFGA_STAT_HASH = 0xd - CRYPTOCFGA_STAT_BLKCIPHER = 0xe - CRYPTOCFGA_STAT_AEAD = 0xf - CRYPTOCFGA_STAT_COMPRESS = 0x10 - CRYPTOCFGA_STAT_RNG = 0x11 - CRYPTOCFGA_STAT_CIPHER = 0x12 - CRYPTOCFGA_STAT_AKCIPHER = 0x13 - CRYPTOCFGA_STAT_KPP = 0x14 - CRYPTOCFGA_STAT_ACOMP = 0x15 -) - -const ( - BPF_REG_0 = 0x0 - BPF_REG_1 = 0x1 - BPF_REG_2 = 0x2 - BPF_REG_3 = 0x3 - BPF_REG_4 = 0x4 - BPF_REG_5 = 0x5 - BPF_REG_6 = 0x6 - BPF_REG_7 = 0x7 - BPF_REG_8 = 0x8 - BPF_REG_9 = 0x9 - BPF_REG_10 = 0xa - BPF_MAP_CREATE = 0x0 - BPF_MAP_LOOKUP_ELEM = 0x1 - BPF_MAP_UPDATE_ELEM = 0x2 - BPF_MAP_DELETE_ELEM = 0x3 - BPF_MAP_GET_NEXT_KEY = 0x4 - BPF_PROG_LOAD = 0x5 - BPF_OBJ_PIN = 0x6 - BPF_OBJ_GET = 0x7 - BPF_PROG_ATTACH = 0x8 - BPF_PROG_DETACH = 0x9 - BPF_PROG_TEST_RUN = 0xa - BPF_PROG_GET_NEXT_ID = 0xb - BPF_MAP_GET_NEXT_ID = 0xc - BPF_PROG_GET_FD_BY_ID = 0xd - BPF_MAP_GET_FD_BY_ID = 0xe - BPF_OBJ_GET_INFO_BY_FD = 0xf - BPF_PROG_QUERY = 0x10 - BPF_RAW_TRACEPOINT_OPEN = 0x11 - BPF_BTF_LOAD = 0x12 - BPF_BTF_GET_FD_BY_ID = 0x13 - BPF_TASK_FD_QUERY = 0x14 - BPF_MAP_LOOKUP_AND_DELETE_ELEM = 0x15 - BPF_MAP_FREEZE = 0x16 - BPF_BTF_GET_NEXT_ID = 0x17 - BPF_MAP_LOOKUP_BATCH = 0x18 - BPF_MAP_LOOKUP_AND_DELETE_BATCH = 0x19 - BPF_MAP_UPDATE_BATCH = 0x1a - BPF_MAP_DELETE_BATCH = 0x1b - BPF_LINK_CREATE = 0x1c - BPF_LINK_UPDATE = 0x1d - BPF_LINK_GET_FD_BY_ID = 0x1e - BPF_LINK_GET_NEXT_ID = 0x1f - BPF_ENABLE_STATS = 0x20 - BPF_ITER_CREATE = 0x21 - BPF_LINK_DETACH = 0x22 - BPF_PROG_BIND_MAP = 0x23 - BPF_MAP_TYPE_UNSPEC = 0x0 - BPF_MAP_TYPE_HASH = 0x1 - BPF_MAP_TYPE_ARRAY = 0x2 - BPF_MAP_TYPE_PROG_ARRAY = 0x3 - BPF_MAP_TYPE_PERF_EVENT_ARRAY = 0x4 - BPF_MAP_TYPE_PERCPU_HASH = 0x5 - BPF_MAP_TYPE_PERCPU_ARRAY = 0x6 - BPF_MAP_TYPE_STACK_TRACE = 0x7 - BPF_MAP_TYPE_CGROUP_ARRAY = 0x8 - BPF_MAP_TYPE_LRU_HASH = 0x9 - BPF_MAP_TYPE_LRU_PERCPU_HASH = 0xa - BPF_MAP_TYPE_LPM_TRIE = 0xb - BPF_MAP_TYPE_ARRAY_OF_MAPS = 0xc - BPF_MAP_TYPE_HASH_OF_MAPS = 0xd - BPF_MAP_TYPE_DEVMAP = 0xe - BPF_MAP_TYPE_SOCKMAP = 0xf - BPF_MAP_TYPE_CPUMAP = 0x10 - BPF_MAP_TYPE_XSKMAP = 0x11 - BPF_MAP_TYPE_SOCKHASH = 0x12 - BPF_MAP_TYPE_CGROUP_STORAGE = 0x13 - BPF_MAP_TYPE_REUSEPORT_SOCKARRAY = 0x14 - BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE = 0x15 - BPF_MAP_TYPE_QUEUE = 0x16 - BPF_MAP_TYPE_STACK = 0x17 - BPF_MAP_TYPE_SK_STORAGE = 0x18 - BPF_MAP_TYPE_DEVMAP_HASH = 0x19 - BPF_MAP_TYPE_STRUCT_OPS = 0x1a - BPF_MAP_TYPE_RINGBUF = 0x1b - BPF_MAP_TYPE_INODE_STORAGE = 0x1c - BPF_PROG_TYPE_UNSPEC = 0x0 - BPF_PROG_TYPE_SOCKET_FILTER = 0x1 - BPF_PROG_TYPE_KPROBE = 0x2 - BPF_PROG_TYPE_SCHED_CLS = 0x3 - BPF_PROG_TYPE_SCHED_ACT = 0x4 - BPF_PROG_TYPE_TRACEPOINT = 0x5 - BPF_PROG_TYPE_XDP = 0x6 - BPF_PROG_TYPE_PERF_EVENT = 0x7 - BPF_PROG_TYPE_CGROUP_SKB = 0x8 - BPF_PROG_TYPE_CGROUP_SOCK = 0x9 - BPF_PROG_TYPE_LWT_IN = 0xa - BPF_PROG_TYPE_LWT_OUT = 0xb - BPF_PROG_TYPE_LWT_XMIT = 0xc - BPF_PROG_TYPE_SOCK_OPS = 0xd - BPF_PROG_TYPE_SK_SKB = 0xe - BPF_PROG_TYPE_CGROUP_DEVICE = 0xf - BPF_PROG_TYPE_SK_MSG = 0x10 - BPF_PROG_TYPE_RAW_TRACEPOINT = 0x11 - BPF_PROG_TYPE_CGROUP_SOCK_ADDR = 0x12 - BPF_PROG_TYPE_LWT_SEG6LOCAL = 0x13 - BPF_PROG_TYPE_LIRC_MODE2 = 0x14 - BPF_PROG_TYPE_SK_REUSEPORT = 0x15 - BPF_PROG_TYPE_FLOW_DISSECTOR = 0x16 - BPF_PROG_TYPE_CGROUP_SYSCTL = 0x17 - BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 0x18 - BPF_PROG_TYPE_CGROUP_SOCKOPT = 0x19 - BPF_PROG_TYPE_TRACING = 0x1a - BPF_PROG_TYPE_STRUCT_OPS = 0x1b - BPF_PROG_TYPE_EXT = 0x1c - BPF_PROG_TYPE_LSM = 0x1d - BPF_PROG_TYPE_SK_LOOKUP = 0x1e - BPF_CGROUP_INET_INGRESS = 0x0 - BPF_CGROUP_INET_EGRESS = 0x1 - BPF_CGROUP_INET_SOCK_CREATE = 0x2 - BPF_CGROUP_SOCK_OPS = 0x3 - BPF_SK_SKB_STREAM_PARSER = 0x4 - BPF_SK_SKB_STREAM_VERDICT = 0x5 - BPF_CGROUP_DEVICE = 0x6 - BPF_SK_MSG_VERDICT = 0x7 - BPF_CGROUP_INET4_BIND = 0x8 - BPF_CGROUP_INET6_BIND = 0x9 - BPF_CGROUP_INET4_CONNECT = 0xa - BPF_CGROUP_INET6_CONNECT = 0xb - BPF_CGROUP_INET4_POST_BIND = 0xc - BPF_CGROUP_INET6_POST_BIND = 0xd - BPF_CGROUP_UDP4_SENDMSG = 0xe - BPF_CGROUP_UDP6_SENDMSG = 0xf - BPF_LIRC_MODE2 = 0x10 - BPF_FLOW_DISSECTOR = 0x11 - BPF_CGROUP_SYSCTL = 0x12 - BPF_CGROUP_UDP4_RECVMSG = 0x13 - BPF_CGROUP_UDP6_RECVMSG = 0x14 - BPF_CGROUP_GETSOCKOPT = 0x15 - BPF_CGROUP_SETSOCKOPT = 0x16 - BPF_TRACE_RAW_TP = 0x17 - BPF_TRACE_FENTRY = 0x18 - BPF_TRACE_FEXIT = 0x19 - BPF_MODIFY_RETURN = 0x1a - BPF_LSM_MAC = 0x1b - BPF_TRACE_ITER = 0x1c - BPF_CGROUP_INET4_GETPEERNAME = 0x1d - BPF_CGROUP_INET6_GETPEERNAME = 0x1e - BPF_CGROUP_INET4_GETSOCKNAME = 0x1f - BPF_CGROUP_INET6_GETSOCKNAME = 0x20 - BPF_XDP_DEVMAP = 0x21 - BPF_CGROUP_INET_SOCK_RELEASE = 0x22 - BPF_XDP_CPUMAP = 0x23 - BPF_SK_LOOKUP = 0x24 - BPF_XDP = 0x25 - BPF_LINK_TYPE_UNSPEC = 0x0 - BPF_LINK_TYPE_RAW_TRACEPOINT = 0x1 - BPF_LINK_TYPE_TRACING = 0x2 - BPF_LINK_TYPE_CGROUP = 0x3 - BPF_LINK_TYPE_ITER = 0x4 - BPF_LINK_TYPE_NETNS = 0x5 - BPF_LINK_TYPE_XDP = 0x6 - BPF_ANY = 0x0 - BPF_NOEXIST = 0x1 - BPF_EXIST = 0x2 - BPF_F_LOCK = 0x4 - BPF_F_NO_PREALLOC = 0x1 - BPF_F_NO_COMMON_LRU = 0x2 - BPF_F_NUMA_NODE = 0x4 - BPF_F_RDONLY = 0x8 - BPF_F_WRONLY = 0x10 - BPF_F_STACK_BUILD_ID = 0x20 - BPF_F_ZERO_SEED = 0x40 - BPF_F_RDONLY_PROG = 0x80 - BPF_F_WRONLY_PROG = 0x100 - BPF_F_CLONE = 0x200 - BPF_F_MMAPABLE = 0x400 - BPF_F_PRESERVE_ELEMS = 0x800 - BPF_F_INNER_MAP = 0x1000 - BPF_STATS_RUN_TIME = 0x0 - BPF_STACK_BUILD_ID_EMPTY = 0x0 - BPF_STACK_BUILD_ID_VALID = 0x1 - BPF_STACK_BUILD_ID_IP = 0x2 - BPF_F_RECOMPUTE_CSUM = 0x1 - BPF_F_INVALIDATE_HASH = 0x2 - BPF_F_HDR_FIELD_MASK = 0xf - BPF_F_PSEUDO_HDR = 0x10 - BPF_F_MARK_MANGLED_0 = 0x20 - BPF_F_MARK_ENFORCE = 0x40 - BPF_F_INGRESS = 0x1 - BPF_F_TUNINFO_IPV6 = 0x1 - BPF_F_SKIP_FIELD_MASK = 0xff - BPF_F_USER_STACK = 0x100 - BPF_F_FAST_STACK_CMP = 0x200 - BPF_F_REUSE_STACKID = 0x400 - BPF_F_USER_BUILD_ID = 0x800 - BPF_F_ZERO_CSUM_TX = 0x2 - BPF_F_DONT_FRAGMENT = 0x4 - BPF_F_SEQ_NUMBER = 0x8 - BPF_F_INDEX_MASK = 0xffffffff - BPF_F_CURRENT_CPU = 0xffffffff - BPF_F_CTXLEN_MASK = 0xfffff00000000 - BPF_F_CURRENT_NETNS = -0x1 - BPF_CSUM_LEVEL_QUERY = 0x0 - BPF_CSUM_LEVEL_INC = 0x1 - BPF_CSUM_LEVEL_DEC = 0x2 - BPF_CSUM_LEVEL_RESET = 0x3 - BPF_F_ADJ_ROOM_FIXED_GSO = 0x1 - BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 0x2 - BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 0x4 - BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 0x8 - BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10 - BPF_F_ADJ_ROOM_NO_CSUM_RESET = 0x20 - BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff - BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38 - BPF_F_SYSCTL_BASE_NAME = 0x1 - BPF_LOCAL_STORAGE_GET_F_CREATE = 0x1 - BPF_SK_STORAGE_GET_F_CREATE = 0x1 - BPF_F_GET_BRANCH_RECORDS_SIZE = 0x1 - BPF_RB_NO_WAKEUP = 0x1 - BPF_RB_FORCE_WAKEUP = 0x2 - BPF_RB_AVAIL_DATA = 0x0 - BPF_RB_RING_SIZE = 0x1 - BPF_RB_CONS_POS = 0x2 - BPF_RB_PROD_POS = 0x3 - BPF_RINGBUF_BUSY_BIT = 0x80000000 - BPF_RINGBUF_DISCARD_BIT = 0x40000000 - BPF_RINGBUF_HDR_SZ = 0x8 - BPF_SK_LOOKUP_F_REPLACE = 0x1 - BPF_SK_LOOKUP_F_NO_REUSEPORT = 0x2 - BPF_ADJ_ROOM_NET = 0x0 - BPF_ADJ_ROOM_MAC = 0x1 - BPF_HDR_START_MAC = 0x0 - BPF_HDR_START_NET = 0x1 - BPF_LWT_ENCAP_SEG6 = 0x0 - BPF_LWT_ENCAP_SEG6_INLINE = 0x1 - BPF_LWT_ENCAP_IP = 0x2 - BPF_OK = 0x0 - BPF_DROP = 0x2 - BPF_REDIRECT = 0x7 - BPF_LWT_REROUTE = 0x80 - BPF_SOCK_OPS_RTO_CB_FLAG = 0x1 - BPF_SOCK_OPS_RETRANS_CB_FLAG = 0x2 - BPF_SOCK_OPS_STATE_CB_FLAG = 0x4 - BPF_SOCK_OPS_RTT_CB_FLAG = 0x8 - BPF_SOCK_OPS_PARSE_ALL_HDR_OPT_CB_FLAG = 0x10 - BPF_SOCK_OPS_PARSE_UNKNOWN_HDR_OPT_CB_FLAG = 0x20 - BPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG = 0x40 - BPF_SOCK_OPS_ALL_CB_FLAGS = 0x7f - BPF_SOCK_OPS_VOID = 0x0 - BPF_SOCK_OPS_TIMEOUT_INIT = 0x1 - BPF_SOCK_OPS_RWND_INIT = 0x2 - BPF_SOCK_OPS_TCP_CONNECT_CB = 0x3 - BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB = 0x4 - BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 0x5 - BPF_SOCK_OPS_NEEDS_ECN = 0x6 - BPF_SOCK_OPS_BASE_RTT = 0x7 - BPF_SOCK_OPS_RTO_CB = 0x8 - BPF_SOCK_OPS_RETRANS_CB = 0x9 - BPF_SOCK_OPS_STATE_CB = 0xa - BPF_SOCK_OPS_TCP_LISTEN_CB = 0xb - BPF_SOCK_OPS_RTT_CB = 0xc - BPF_SOCK_OPS_PARSE_HDR_OPT_CB = 0xd - BPF_SOCK_OPS_HDR_OPT_LEN_CB = 0xe - BPF_SOCK_OPS_WRITE_HDR_OPT_CB = 0xf - BPF_TCP_ESTABLISHED = 0x1 - BPF_TCP_SYN_SENT = 0x2 - BPF_TCP_SYN_RECV = 0x3 - BPF_TCP_FIN_WAIT1 = 0x4 - BPF_TCP_FIN_WAIT2 = 0x5 - BPF_TCP_TIME_WAIT = 0x6 - BPF_TCP_CLOSE = 0x7 - BPF_TCP_CLOSE_WAIT = 0x8 - BPF_TCP_LAST_ACK = 0x9 - BPF_TCP_LISTEN = 0xa - BPF_TCP_CLOSING = 0xb - BPF_TCP_NEW_SYN_RECV = 0xc - BPF_TCP_MAX_STATES = 0xd - TCP_BPF_IW = 0x3e9 - TCP_BPF_SNDCWND_CLAMP = 0x3ea - TCP_BPF_DELACK_MAX = 0x3eb - TCP_BPF_RTO_MIN = 0x3ec - TCP_BPF_SYN = 0x3ed - TCP_BPF_SYN_IP = 0x3ee - TCP_BPF_SYN_MAC = 0x3ef - BPF_LOAD_HDR_OPT_TCP_SYN = 0x1 - BPF_WRITE_HDR_TCP_CURRENT_MSS = 0x1 - BPF_WRITE_HDR_TCP_SYNACK_COOKIE = 0x2 - BPF_DEVCG_ACC_MKNOD = 0x1 - BPF_DEVCG_ACC_READ = 0x2 - BPF_DEVCG_ACC_WRITE = 0x4 - BPF_DEVCG_DEV_BLOCK = 0x1 - BPF_DEVCG_DEV_CHAR = 0x2 - BPF_FIB_LOOKUP_DIRECT = 0x1 - BPF_FIB_LOOKUP_OUTPUT = 0x2 - BPF_FIB_LKUP_RET_SUCCESS = 0x0 - BPF_FIB_LKUP_RET_BLACKHOLE = 0x1 - BPF_FIB_LKUP_RET_UNREACHABLE = 0x2 - BPF_FIB_LKUP_RET_PROHIBIT = 0x3 - BPF_FIB_LKUP_RET_NOT_FWDED = 0x4 - BPF_FIB_LKUP_RET_FWD_DISABLED = 0x5 - BPF_FIB_LKUP_RET_UNSUPP_LWT = 0x6 - BPF_FIB_LKUP_RET_NO_NEIGH = 0x7 - BPF_FIB_LKUP_RET_FRAG_NEEDED = 0x8 - BPF_FD_TYPE_RAW_TRACEPOINT = 0x0 - BPF_FD_TYPE_TRACEPOINT = 0x1 - BPF_FD_TYPE_KPROBE = 0x2 - BPF_FD_TYPE_KRETPROBE = 0x3 - BPF_FD_TYPE_UPROBE = 0x4 - BPF_FD_TYPE_URETPROBE = 0x5 - BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG = 0x1 - BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL = 0x2 - BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP = 0x4 -) - -const ( - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_DECnet_IFADDR = 0xd - RTNLGRP_NOP2 = 0xe - RTNLGRP_DECnet_ROUTE = 0xf - RTNLGRP_DECnet_RULE = 0x10 - RTNLGRP_NOP4 = 0x11 - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - RTNLGRP_PHONET_IFADDR = 0x15 - RTNLGRP_PHONET_ROUTE = 0x16 - RTNLGRP_DCB = 0x17 - RTNLGRP_IPV4_NETCONF = 0x18 - RTNLGRP_IPV6_NETCONF = 0x19 - RTNLGRP_MDB = 0x1a - RTNLGRP_MPLS_ROUTE = 0x1b - RTNLGRP_NSID = 0x1c - RTNLGRP_MPLS_NETCONF = 0x1d - RTNLGRP_IPV4_MROUTE_R = 0x1e - RTNLGRP_IPV6_MROUTE_R = 0x1f - RTNLGRP_NEXTHOP = 0x20 - RTNLGRP_BRVLAN = 0x21 -) - -type CapUserHeader struct { - Version uint32 - Pid int32 -} - -type CapUserData struct { - Effective uint32 - Permitted uint32 - Inheritable uint32 -} - -const ( - LINUX_CAPABILITY_VERSION_1 = 0x19980330 - LINUX_CAPABILITY_VERSION_2 = 0x20071026 - LINUX_CAPABILITY_VERSION_3 = 0x20080522 -) - -const ( - LO_FLAGS_READ_ONLY = 0x1 - LO_FLAGS_AUTOCLEAR = 0x4 - LO_FLAGS_PARTSCAN = 0x8 - LO_FLAGS_DIRECT_IO = 0x10 -) - -type LoopInfo64 struct { - Device uint64 - Inode uint64 - Rdevice uint64 - Offset uint64 - Sizelimit uint64 - Number uint32 - Encrypt_type uint32 - Encrypt_key_size uint32 - Flags uint32 - File_name [64]uint8 - Crypt_name [64]uint8 - Encrypt_key [32]uint8 - Init [2]uint64 -} - -type TIPCSocketAddr struct { - Ref uint32 - Node uint32 -} - -type TIPCServiceRange struct { - Type uint32 - Lower uint32 - Upper uint32 -} - -type TIPCServiceName struct { - Type uint32 - Instance uint32 - Domain uint32 -} - -type TIPCEvent struct { - Event uint32 - Lower uint32 - Upper uint32 - Port TIPCSocketAddr - S TIPCSubscr -} - -type TIPCGroupReq struct { - Type uint32 - Instance uint32 - Scope uint32 - Flags uint32 -} - -const ( - TIPC_CLUSTER_SCOPE = 0x2 - TIPC_NODE_SCOPE = 0x3 -) - -const ( - SYSLOG_ACTION_CLOSE = 0 - SYSLOG_ACTION_OPEN = 1 - SYSLOG_ACTION_READ = 2 - SYSLOG_ACTION_READ_ALL = 3 - SYSLOG_ACTION_READ_CLEAR = 4 - SYSLOG_ACTION_CLEAR = 5 - SYSLOG_ACTION_CONSOLE_OFF = 6 - SYSLOG_ACTION_CONSOLE_ON = 7 - SYSLOG_ACTION_CONSOLE_LEVEL = 8 - SYSLOG_ACTION_SIZE_UNREAD = 9 - SYSLOG_ACTION_SIZE_BUFFER = 10 -) - -const ( - DEVLINK_CMD_UNSPEC = 0x0 - DEVLINK_CMD_GET = 0x1 - DEVLINK_CMD_SET = 0x2 - DEVLINK_CMD_NEW = 0x3 - DEVLINK_CMD_DEL = 0x4 - DEVLINK_CMD_PORT_GET = 0x5 - DEVLINK_CMD_PORT_SET = 0x6 - DEVLINK_CMD_PORT_NEW = 0x7 - DEVLINK_CMD_PORT_DEL = 0x8 - DEVLINK_CMD_PORT_SPLIT = 0x9 - DEVLINK_CMD_PORT_UNSPLIT = 0xa - DEVLINK_CMD_SB_GET = 0xb - DEVLINK_CMD_SB_SET = 0xc - DEVLINK_CMD_SB_NEW = 0xd - DEVLINK_CMD_SB_DEL = 0xe - DEVLINK_CMD_SB_POOL_GET = 0xf - DEVLINK_CMD_SB_POOL_SET = 0x10 - DEVLINK_CMD_SB_POOL_NEW = 0x11 - DEVLINK_CMD_SB_POOL_DEL = 0x12 - DEVLINK_CMD_SB_PORT_POOL_GET = 0x13 - DEVLINK_CMD_SB_PORT_POOL_SET = 0x14 - DEVLINK_CMD_SB_PORT_POOL_NEW = 0x15 - DEVLINK_CMD_SB_PORT_POOL_DEL = 0x16 - DEVLINK_CMD_SB_TC_POOL_BIND_GET = 0x17 - DEVLINK_CMD_SB_TC_POOL_BIND_SET = 0x18 - DEVLINK_CMD_SB_TC_POOL_BIND_NEW = 0x19 - DEVLINK_CMD_SB_TC_POOL_BIND_DEL = 0x1a - DEVLINK_CMD_SB_OCC_SNAPSHOT = 0x1b - DEVLINK_CMD_SB_OCC_MAX_CLEAR = 0x1c - DEVLINK_CMD_ESWITCH_GET = 0x1d - DEVLINK_CMD_ESWITCH_SET = 0x1e - DEVLINK_CMD_DPIPE_TABLE_GET = 0x1f - DEVLINK_CMD_DPIPE_ENTRIES_GET = 0x20 - DEVLINK_CMD_DPIPE_HEADERS_GET = 0x21 - DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET = 0x22 - DEVLINK_CMD_RESOURCE_SET = 0x23 - DEVLINK_CMD_RESOURCE_DUMP = 0x24 - DEVLINK_CMD_RELOAD = 0x25 - DEVLINK_CMD_PARAM_GET = 0x26 - DEVLINK_CMD_PARAM_SET = 0x27 - DEVLINK_CMD_PARAM_NEW = 0x28 - DEVLINK_CMD_PARAM_DEL = 0x29 - DEVLINK_CMD_REGION_GET = 0x2a - DEVLINK_CMD_REGION_SET = 0x2b - DEVLINK_CMD_REGION_NEW = 0x2c - DEVLINK_CMD_REGION_DEL = 0x2d - DEVLINK_CMD_REGION_READ = 0x2e - DEVLINK_CMD_PORT_PARAM_GET = 0x2f - DEVLINK_CMD_PORT_PARAM_SET = 0x30 - DEVLINK_CMD_PORT_PARAM_NEW = 0x31 - DEVLINK_CMD_PORT_PARAM_DEL = 0x32 - DEVLINK_CMD_INFO_GET = 0x33 - DEVLINK_CMD_HEALTH_REPORTER_GET = 0x34 - DEVLINK_CMD_HEALTH_REPORTER_SET = 0x35 - DEVLINK_CMD_HEALTH_REPORTER_RECOVER = 0x36 - DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE = 0x37 - DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET = 0x38 - DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR = 0x39 - DEVLINK_CMD_FLASH_UPDATE = 0x3a - DEVLINK_CMD_FLASH_UPDATE_END = 0x3b - DEVLINK_CMD_FLASH_UPDATE_STATUS = 0x3c - DEVLINK_CMD_TRAP_GET = 0x3d - DEVLINK_CMD_TRAP_SET = 0x3e - DEVLINK_CMD_TRAP_NEW = 0x3f - DEVLINK_CMD_TRAP_DEL = 0x40 - DEVLINK_CMD_TRAP_GROUP_GET = 0x41 - DEVLINK_CMD_TRAP_GROUP_SET = 0x42 - DEVLINK_CMD_TRAP_GROUP_NEW = 0x43 - DEVLINK_CMD_TRAP_GROUP_DEL = 0x44 - DEVLINK_CMD_TRAP_POLICER_GET = 0x45 - DEVLINK_CMD_TRAP_POLICER_SET = 0x46 - DEVLINK_CMD_TRAP_POLICER_NEW = 0x47 - DEVLINK_CMD_TRAP_POLICER_DEL = 0x48 - DEVLINK_CMD_HEALTH_REPORTER_TEST = 0x49 - DEVLINK_CMD_MAX = 0x51 - DEVLINK_PORT_TYPE_NOTSET = 0x0 - DEVLINK_PORT_TYPE_AUTO = 0x1 - DEVLINK_PORT_TYPE_ETH = 0x2 - DEVLINK_PORT_TYPE_IB = 0x3 - DEVLINK_SB_POOL_TYPE_INGRESS = 0x0 - DEVLINK_SB_POOL_TYPE_EGRESS = 0x1 - DEVLINK_SB_THRESHOLD_TYPE_STATIC = 0x0 - DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC = 0x1 - DEVLINK_ESWITCH_MODE_LEGACY = 0x0 - DEVLINK_ESWITCH_MODE_SWITCHDEV = 0x1 - DEVLINK_ESWITCH_INLINE_MODE_NONE = 0x0 - DEVLINK_ESWITCH_INLINE_MODE_LINK = 0x1 - DEVLINK_ESWITCH_INLINE_MODE_NETWORK = 0x2 - DEVLINK_ESWITCH_INLINE_MODE_TRANSPORT = 0x3 - DEVLINK_ESWITCH_ENCAP_MODE_NONE = 0x0 - DEVLINK_ESWITCH_ENCAP_MODE_BASIC = 0x1 - DEVLINK_PORT_FLAVOUR_PHYSICAL = 0x0 - DEVLINK_PORT_FLAVOUR_CPU = 0x1 - DEVLINK_PORT_FLAVOUR_DSA = 0x2 - DEVLINK_PORT_FLAVOUR_PCI_PF = 0x3 - DEVLINK_PORT_FLAVOUR_PCI_VF = 0x4 - DEVLINK_PORT_FLAVOUR_VIRTUAL = 0x5 - DEVLINK_PORT_FLAVOUR_UNUSED = 0x6 - DEVLINK_PARAM_CMODE_RUNTIME = 0x0 - DEVLINK_PARAM_CMODE_DRIVERINIT = 0x1 - DEVLINK_PARAM_CMODE_PERMANENT = 0x2 - DEVLINK_PARAM_CMODE_MAX = 0x2 - DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DRIVER = 0x0 - DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_FLASH = 0x1 - DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DISK = 0x2 - DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_UNKNOWN = 0x3 - DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_UNKNOWN = 0x0 - DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_ALWAYS = 0x1 - DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_NEVER = 0x2 - DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_DISK = 0x3 - DEVLINK_ATTR_STATS_RX_PACKETS = 0x0 - DEVLINK_ATTR_STATS_RX_BYTES = 0x1 - DEVLINK_ATTR_STATS_RX_DROPPED = 0x2 - DEVLINK_ATTR_STATS_MAX = 0x2 - DEVLINK_FLASH_OVERWRITE_SETTINGS_BIT = 0x0 - DEVLINK_FLASH_OVERWRITE_IDENTIFIERS_BIT = 0x1 - DEVLINK_FLASH_OVERWRITE_MAX_BIT = 0x1 - DEVLINK_TRAP_ACTION_DROP = 0x0 - DEVLINK_TRAP_ACTION_TRAP = 0x1 - DEVLINK_TRAP_ACTION_MIRROR = 0x2 - DEVLINK_TRAP_TYPE_DROP = 0x0 - DEVLINK_TRAP_TYPE_EXCEPTION = 0x1 - DEVLINK_TRAP_TYPE_CONTROL = 0x2 - DEVLINK_ATTR_TRAP_METADATA_TYPE_IN_PORT = 0x0 - DEVLINK_ATTR_TRAP_METADATA_TYPE_FA_COOKIE = 0x1 - DEVLINK_RELOAD_ACTION_UNSPEC = 0x0 - DEVLINK_RELOAD_ACTION_DRIVER_REINIT = 0x1 - DEVLINK_RELOAD_ACTION_FW_ACTIVATE = 0x2 - DEVLINK_RELOAD_ACTION_MAX = 0x2 - DEVLINK_RELOAD_LIMIT_UNSPEC = 0x0 - DEVLINK_RELOAD_LIMIT_NO_RESET = 0x1 - DEVLINK_RELOAD_LIMIT_MAX = 0x1 - DEVLINK_ATTR_UNSPEC = 0x0 - DEVLINK_ATTR_BUS_NAME = 0x1 - DEVLINK_ATTR_DEV_NAME = 0x2 - DEVLINK_ATTR_PORT_INDEX = 0x3 - DEVLINK_ATTR_PORT_TYPE = 0x4 - DEVLINK_ATTR_PORT_DESIRED_TYPE = 0x5 - DEVLINK_ATTR_PORT_NETDEV_IFINDEX = 0x6 - DEVLINK_ATTR_PORT_NETDEV_NAME = 0x7 - DEVLINK_ATTR_PORT_IBDEV_NAME = 0x8 - DEVLINK_ATTR_PORT_SPLIT_COUNT = 0x9 - DEVLINK_ATTR_PORT_SPLIT_GROUP = 0xa - DEVLINK_ATTR_SB_INDEX = 0xb - DEVLINK_ATTR_SB_SIZE = 0xc - DEVLINK_ATTR_SB_INGRESS_POOL_COUNT = 0xd - DEVLINK_ATTR_SB_EGRESS_POOL_COUNT = 0xe - DEVLINK_ATTR_SB_INGRESS_TC_COUNT = 0xf - DEVLINK_ATTR_SB_EGRESS_TC_COUNT = 0x10 - DEVLINK_ATTR_SB_POOL_INDEX = 0x11 - DEVLINK_ATTR_SB_POOL_TYPE = 0x12 - DEVLINK_ATTR_SB_POOL_SIZE = 0x13 - DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE = 0x14 - DEVLINK_ATTR_SB_THRESHOLD = 0x15 - DEVLINK_ATTR_SB_TC_INDEX = 0x16 - DEVLINK_ATTR_SB_OCC_CUR = 0x17 - DEVLINK_ATTR_SB_OCC_MAX = 0x18 - DEVLINK_ATTR_ESWITCH_MODE = 0x19 - DEVLINK_ATTR_ESWITCH_INLINE_MODE = 0x1a - DEVLINK_ATTR_DPIPE_TABLES = 0x1b - DEVLINK_ATTR_DPIPE_TABLE = 0x1c - DEVLINK_ATTR_DPIPE_TABLE_NAME = 0x1d - DEVLINK_ATTR_DPIPE_TABLE_SIZE = 0x1e - DEVLINK_ATTR_DPIPE_TABLE_MATCHES = 0x1f - DEVLINK_ATTR_DPIPE_TABLE_ACTIONS = 0x20 - DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED = 0x21 - DEVLINK_ATTR_DPIPE_ENTRIES = 0x22 - DEVLINK_ATTR_DPIPE_ENTRY = 0x23 - DEVLINK_ATTR_DPIPE_ENTRY_INDEX = 0x24 - DEVLINK_ATTR_DPIPE_ENTRY_MATCH_VALUES = 0x25 - DEVLINK_ATTR_DPIPE_ENTRY_ACTION_VALUES = 0x26 - DEVLINK_ATTR_DPIPE_ENTRY_COUNTER = 0x27 - DEVLINK_ATTR_DPIPE_MATCH = 0x28 - DEVLINK_ATTR_DPIPE_MATCH_VALUE = 0x29 - DEVLINK_ATTR_DPIPE_MATCH_TYPE = 0x2a - DEVLINK_ATTR_DPIPE_ACTION = 0x2b - DEVLINK_ATTR_DPIPE_ACTION_VALUE = 0x2c - DEVLINK_ATTR_DPIPE_ACTION_TYPE = 0x2d - DEVLINK_ATTR_DPIPE_VALUE = 0x2e - DEVLINK_ATTR_DPIPE_VALUE_MASK = 0x2f - DEVLINK_ATTR_DPIPE_VALUE_MAPPING = 0x30 - DEVLINK_ATTR_DPIPE_HEADERS = 0x31 - DEVLINK_ATTR_DPIPE_HEADER = 0x32 - DEVLINK_ATTR_DPIPE_HEADER_NAME = 0x33 - DEVLINK_ATTR_DPIPE_HEADER_ID = 0x34 - DEVLINK_ATTR_DPIPE_HEADER_FIELDS = 0x35 - DEVLINK_ATTR_DPIPE_HEADER_GLOBAL = 0x36 - DEVLINK_ATTR_DPIPE_HEADER_INDEX = 0x37 - DEVLINK_ATTR_DPIPE_FIELD = 0x38 - DEVLINK_ATTR_DPIPE_FIELD_NAME = 0x39 - DEVLINK_ATTR_DPIPE_FIELD_ID = 0x3a - DEVLINK_ATTR_DPIPE_FIELD_BITWIDTH = 0x3b - DEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE = 0x3c - DEVLINK_ATTR_PAD = 0x3d - DEVLINK_ATTR_ESWITCH_ENCAP_MODE = 0x3e - DEVLINK_ATTR_RESOURCE_LIST = 0x3f - DEVLINK_ATTR_RESOURCE = 0x40 - DEVLINK_ATTR_RESOURCE_NAME = 0x41 - DEVLINK_ATTR_RESOURCE_ID = 0x42 - DEVLINK_ATTR_RESOURCE_SIZE = 0x43 - DEVLINK_ATTR_RESOURCE_SIZE_NEW = 0x44 - DEVLINK_ATTR_RESOURCE_SIZE_VALID = 0x45 - DEVLINK_ATTR_RESOURCE_SIZE_MIN = 0x46 - DEVLINK_ATTR_RESOURCE_SIZE_MAX = 0x47 - DEVLINK_ATTR_RESOURCE_SIZE_GRAN = 0x48 - DEVLINK_ATTR_RESOURCE_UNIT = 0x49 - DEVLINK_ATTR_RESOURCE_OCC = 0x4a - DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID = 0x4b - DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS = 0x4c - DEVLINK_ATTR_PORT_FLAVOUR = 0x4d - DEVLINK_ATTR_PORT_NUMBER = 0x4e - DEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER = 0x4f - DEVLINK_ATTR_PARAM = 0x50 - DEVLINK_ATTR_PARAM_NAME = 0x51 - DEVLINK_ATTR_PARAM_GENERIC = 0x52 - DEVLINK_ATTR_PARAM_TYPE = 0x53 - DEVLINK_ATTR_PARAM_VALUES_LIST = 0x54 - DEVLINK_ATTR_PARAM_VALUE = 0x55 - DEVLINK_ATTR_PARAM_VALUE_DATA = 0x56 - DEVLINK_ATTR_PARAM_VALUE_CMODE = 0x57 - DEVLINK_ATTR_REGION_NAME = 0x58 - DEVLINK_ATTR_REGION_SIZE = 0x59 - DEVLINK_ATTR_REGION_SNAPSHOTS = 0x5a - DEVLINK_ATTR_REGION_SNAPSHOT = 0x5b - DEVLINK_ATTR_REGION_SNAPSHOT_ID = 0x5c - DEVLINK_ATTR_REGION_CHUNKS = 0x5d - DEVLINK_ATTR_REGION_CHUNK = 0x5e - DEVLINK_ATTR_REGION_CHUNK_DATA = 0x5f - DEVLINK_ATTR_REGION_CHUNK_ADDR = 0x60 - DEVLINK_ATTR_REGION_CHUNK_LEN = 0x61 - DEVLINK_ATTR_INFO_DRIVER_NAME = 0x62 - DEVLINK_ATTR_INFO_SERIAL_NUMBER = 0x63 - DEVLINK_ATTR_INFO_VERSION_FIXED = 0x64 - DEVLINK_ATTR_INFO_VERSION_RUNNING = 0x65 - DEVLINK_ATTR_INFO_VERSION_STORED = 0x66 - DEVLINK_ATTR_INFO_VERSION_NAME = 0x67 - DEVLINK_ATTR_INFO_VERSION_VALUE = 0x68 - DEVLINK_ATTR_SB_POOL_CELL_SIZE = 0x69 - DEVLINK_ATTR_FMSG = 0x6a - DEVLINK_ATTR_FMSG_OBJ_NEST_START = 0x6b - DEVLINK_ATTR_FMSG_PAIR_NEST_START = 0x6c - DEVLINK_ATTR_FMSG_ARR_NEST_START = 0x6d - DEVLINK_ATTR_FMSG_NEST_END = 0x6e - DEVLINK_ATTR_FMSG_OBJ_NAME = 0x6f - DEVLINK_ATTR_FMSG_OBJ_VALUE_TYPE = 0x70 - DEVLINK_ATTR_FMSG_OBJ_VALUE_DATA = 0x71 - DEVLINK_ATTR_HEALTH_REPORTER = 0x72 - DEVLINK_ATTR_HEALTH_REPORTER_NAME = 0x73 - DEVLINK_ATTR_HEALTH_REPORTER_STATE = 0x74 - DEVLINK_ATTR_HEALTH_REPORTER_ERR_COUNT = 0x75 - DEVLINK_ATTR_HEALTH_REPORTER_RECOVER_COUNT = 0x76 - DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS = 0x77 - DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD = 0x78 - DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER = 0x79 - DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME = 0x7a - DEVLINK_ATTR_FLASH_UPDATE_COMPONENT = 0x7b - DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG = 0x7c - DEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE = 0x7d - DEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL = 0x7e - DEVLINK_ATTR_PORT_PCI_PF_NUMBER = 0x7f - DEVLINK_ATTR_PORT_PCI_VF_NUMBER = 0x80 - DEVLINK_ATTR_STATS = 0x81 - DEVLINK_ATTR_TRAP_NAME = 0x82 - DEVLINK_ATTR_TRAP_ACTION = 0x83 - DEVLINK_ATTR_TRAP_TYPE = 0x84 - DEVLINK_ATTR_TRAP_GENERIC = 0x85 - DEVLINK_ATTR_TRAP_METADATA = 0x86 - DEVLINK_ATTR_TRAP_GROUP_NAME = 0x87 - DEVLINK_ATTR_RELOAD_FAILED = 0x88 - DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS_NS = 0x89 - DEVLINK_ATTR_NETNS_FD = 0x8a - DEVLINK_ATTR_NETNS_PID = 0x8b - DEVLINK_ATTR_NETNS_ID = 0x8c - DEVLINK_ATTR_HEALTH_REPORTER_AUTO_DUMP = 0x8d - DEVLINK_ATTR_TRAP_POLICER_ID = 0x8e - DEVLINK_ATTR_TRAP_POLICER_RATE = 0x8f - DEVLINK_ATTR_TRAP_POLICER_BURST = 0x90 - DEVLINK_ATTR_PORT_FUNCTION = 0x91 - DEVLINK_ATTR_INFO_BOARD_SERIAL_NUMBER = 0x92 - DEVLINK_ATTR_PORT_LANES = 0x93 - DEVLINK_ATTR_PORT_SPLITTABLE = 0x94 - DEVLINK_ATTR_PORT_EXTERNAL = 0x95 - DEVLINK_ATTR_PORT_CONTROLLER_NUMBER = 0x96 - DEVLINK_ATTR_FLASH_UPDATE_STATUS_TIMEOUT = 0x97 - DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK = 0x98 - DEVLINK_ATTR_RELOAD_ACTION = 0x99 - DEVLINK_ATTR_RELOAD_ACTIONS_PERFORMED = 0x9a - DEVLINK_ATTR_RELOAD_LIMITS = 0x9b - DEVLINK_ATTR_DEV_STATS = 0x9c - DEVLINK_ATTR_RELOAD_STATS = 0x9d - DEVLINK_ATTR_RELOAD_STATS_ENTRY = 0x9e - DEVLINK_ATTR_RELOAD_STATS_LIMIT = 0x9f - DEVLINK_ATTR_RELOAD_STATS_VALUE = 0xa0 - DEVLINK_ATTR_REMOTE_RELOAD_STATS = 0xa1 - DEVLINK_ATTR_RELOAD_ACTION_INFO = 0xa2 - DEVLINK_ATTR_RELOAD_ACTION_STATS = 0xa3 - DEVLINK_ATTR_PORT_PCI_SF_NUMBER = 0xa4 - DEVLINK_ATTR_RATE_TYPE = 0xa5 - DEVLINK_ATTR_RATE_TX_SHARE = 0xa6 - DEVLINK_ATTR_RATE_TX_MAX = 0xa7 - DEVLINK_ATTR_RATE_NODE_NAME = 0xa8 - DEVLINK_ATTR_RATE_PARENT_NODE_NAME = 0xa9 - DEVLINK_ATTR_REGION_MAX_SNAPSHOTS = 0xaa - DEVLINK_ATTR_MAX = 0xae - DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0x0 - DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 0x1 - DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0x0 - DEVLINK_DPIPE_ACTION_TYPE_FIELD_MODIFY = 0x0 - DEVLINK_DPIPE_FIELD_ETHERNET_DST_MAC = 0x0 - DEVLINK_DPIPE_FIELD_IPV4_DST_IP = 0x0 - DEVLINK_DPIPE_FIELD_IPV6_DST_IP = 0x0 - DEVLINK_DPIPE_HEADER_ETHERNET = 0x0 - DEVLINK_DPIPE_HEADER_IPV4 = 0x1 - DEVLINK_DPIPE_HEADER_IPV6 = 0x2 - DEVLINK_RESOURCE_UNIT_ENTRY = 0x0 - DEVLINK_PORT_FUNCTION_ATTR_UNSPEC = 0x0 - DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR = 0x1 - DEVLINK_PORT_FN_ATTR_STATE = 0x2 - DEVLINK_PORT_FN_ATTR_OPSTATE = 0x3 - DEVLINK_PORT_FUNCTION_ATTR_MAX = 0x3 -) - -type FsverityDigest struct { - Algorithm uint16 - Size uint16 -} - -type FsverityEnableArg struct { - Version uint32 - Hash_algorithm uint32 - Block_size uint32 - Salt_size uint32 - Salt_ptr uint64 - Sig_size uint32 - _ uint32 - Sig_ptr uint64 - _ [11]uint64 -} - -type Nhmsg struct { - Family uint8 - Scope uint8 - Protocol uint8 - Resvd uint8 - Flags uint32 -} - -type NexthopGrp struct { - Id uint32 - Weight uint8 - Resvd1 uint8 - Resvd2 uint16 -} - -const ( - NHA_UNSPEC = 0x0 - NHA_ID = 0x1 - NHA_GROUP = 0x2 - NHA_GROUP_TYPE = 0x3 - NHA_BLACKHOLE = 0x4 - NHA_OIF = 0x5 - NHA_GATEWAY = 0x6 - NHA_ENCAP_TYPE = 0x7 - NHA_ENCAP = 0x8 - NHA_GROUPS = 0x9 - NHA_MASTER = 0xa -) - -const ( - CAN_RAW_FILTER = 0x1 - CAN_RAW_ERR_FILTER = 0x2 - CAN_RAW_LOOPBACK = 0x3 - CAN_RAW_RECV_OWN_MSGS = 0x4 - CAN_RAW_FD_FRAMES = 0x5 - CAN_RAW_JOIN_FILTERS = 0x6 -) - -type WatchdogInfo struct { - Options uint32 - Version uint32 - Identity [32]uint8 -} - -type PPSFData struct { - Info PPSKInfo - Timeout PPSKTime -} - -type PPSKParams struct { - Api_version int32 - Mode int32 - Assert_off_tu PPSKTime - Clear_off_tu PPSKTime -} - -type PPSKTime struct { - Sec int64 - Nsec int32 - Flags uint32 -} - -const ( - LWTUNNEL_ENCAP_NONE = 0x0 - LWTUNNEL_ENCAP_MPLS = 0x1 - LWTUNNEL_ENCAP_IP = 0x2 - LWTUNNEL_ENCAP_ILA = 0x3 - LWTUNNEL_ENCAP_IP6 = 0x4 - LWTUNNEL_ENCAP_SEG6 = 0x5 - LWTUNNEL_ENCAP_BPF = 0x6 - LWTUNNEL_ENCAP_SEG6_LOCAL = 0x7 - LWTUNNEL_ENCAP_RPL = 0x8 - LWTUNNEL_ENCAP_IOAM6 = 0x9 - LWTUNNEL_ENCAP_MAX = 0x9 - - MPLS_IPTUNNEL_UNSPEC = 0x0 - MPLS_IPTUNNEL_DST = 0x1 - MPLS_IPTUNNEL_TTL = 0x2 - MPLS_IPTUNNEL_MAX = 0x2 -) - -const ( - ETHTOOL_ID_UNSPEC = 0x0 - ETHTOOL_RX_COPYBREAK = 0x1 - ETHTOOL_TX_COPYBREAK = 0x2 - ETHTOOL_PFC_PREVENTION_TOUT = 0x3 - ETHTOOL_TUNABLE_UNSPEC = 0x0 - ETHTOOL_TUNABLE_U8 = 0x1 - ETHTOOL_TUNABLE_U16 = 0x2 - ETHTOOL_TUNABLE_U32 = 0x3 - ETHTOOL_TUNABLE_U64 = 0x4 - ETHTOOL_TUNABLE_STRING = 0x5 - ETHTOOL_TUNABLE_S8 = 0x6 - ETHTOOL_TUNABLE_S16 = 0x7 - ETHTOOL_TUNABLE_S32 = 0x8 - ETHTOOL_TUNABLE_S64 = 0x9 - ETHTOOL_PHY_ID_UNSPEC = 0x0 - ETHTOOL_PHY_DOWNSHIFT = 0x1 - ETHTOOL_PHY_FAST_LINK_DOWN = 0x2 - ETHTOOL_PHY_EDPD = 0x3 - ETHTOOL_LINK_EXT_STATE_AUTONEG = 0x0 - ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE = 0x1 - ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH = 0x2 - ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY = 0x3 - ETHTOOL_LINK_EXT_STATE_NO_CABLE = 0x4 - ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE = 0x5 - ETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE = 0x6 - ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE = 0x7 - ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED = 0x8 - ETHTOOL_LINK_EXT_STATE_OVERHEAT = 0x9 - ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED = 0x1 - ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED = 0x2 - ETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED = 0x3 - ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE = 0x4 - ETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE = 0x5 - ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD = 0x6 - ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED = 0x1 - ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT = 0x2 - ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY = 0x3 - ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT = 0x4 - ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK = 0x1 - ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK = 0x2 - ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS = 0x3 - ETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED = 0x4 - ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED = 0x5 - ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS = 0x1 - ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE = 0x2 - ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE = 0x1 - ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE = 0x2 - ETHTOOL_FLASH_ALL_REGIONS = 0x0 - ETHTOOL_F_UNSUPPORTED__BIT = 0x0 - ETHTOOL_F_WISH__BIT = 0x1 - ETHTOOL_F_COMPAT__BIT = 0x2 - ETHTOOL_FEC_NONE_BIT = 0x0 - ETHTOOL_FEC_AUTO_BIT = 0x1 - ETHTOOL_FEC_OFF_BIT = 0x2 - ETHTOOL_FEC_RS_BIT = 0x3 - ETHTOOL_FEC_BASER_BIT = 0x4 - ETHTOOL_FEC_LLRS_BIT = 0x5 - ETHTOOL_LINK_MODE_10baseT_Half_BIT = 0x0 - ETHTOOL_LINK_MODE_10baseT_Full_BIT = 0x1 - ETHTOOL_LINK_MODE_100baseT_Half_BIT = 0x2 - ETHTOOL_LINK_MODE_100baseT_Full_BIT = 0x3 - ETHTOOL_LINK_MODE_1000baseT_Half_BIT = 0x4 - ETHTOOL_LINK_MODE_1000baseT_Full_BIT = 0x5 - ETHTOOL_LINK_MODE_Autoneg_BIT = 0x6 - ETHTOOL_LINK_MODE_TP_BIT = 0x7 - ETHTOOL_LINK_MODE_AUI_BIT = 0x8 - ETHTOOL_LINK_MODE_MII_BIT = 0x9 - ETHTOOL_LINK_MODE_FIBRE_BIT = 0xa - ETHTOOL_LINK_MODE_BNC_BIT = 0xb - ETHTOOL_LINK_MODE_10000baseT_Full_BIT = 0xc - ETHTOOL_LINK_MODE_Pause_BIT = 0xd - ETHTOOL_LINK_MODE_Asym_Pause_BIT = 0xe - ETHTOOL_LINK_MODE_2500baseX_Full_BIT = 0xf - ETHTOOL_LINK_MODE_Backplane_BIT = 0x10 - ETHTOOL_LINK_MODE_1000baseKX_Full_BIT = 0x11 - ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT = 0x12 - ETHTOOL_LINK_MODE_10000baseKR_Full_BIT = 0x13 - ETHTOOL_LINK_MODE_10000baseR_FEC_BIT = 0x14 - ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT = 0x15 - ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT = 0x16 - ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT = 0x17 - ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT = 0x18 - ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT = 0x19 - ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT = 0x1a - ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT = 0x1b - ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT = 0x1c - ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT = 0x1d - ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT = 0x1e - ETHTOOL_LINK_MODE_25000baseCR_Full_BIT = 0x1f - ETHTOOL_LINK_MODE_25000baseKR_Full_BIT = 0x20 - ETHTOOL_LINK_MODE_25000baseSR_Full_BIT = 0x21 - ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT = 0x22 - ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT = 0x23 - ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT = 0x24 - ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT = 0x25 - ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT = 0x26 - ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT = 0x27 - ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT = 0x28 - ETHTOOL_LINK_MODE_1000baseX_Full_BIT = 0x29 - ETHTOOL_LINK_MODE_10000baseCR_Full_BIT = 0x2a - ETHTOOL_LINK_MODE_10000baseSR_Full_BIT = 0x2b - ETHTOOL_LINK_MODE_10000baseLR_Full_BIT = 0x2c - ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT = 0x2d - ETHTOOL_LINK_MODE_10000baseER_Full_BIT = 0x2e - ETHTOOL_LINK_MODE_2500baseT_Full_BIT = 0x2f - ETHTOOL_LINK_MODE_5000baseT_Full_BIT = 0x30 - ETHTOOL_LINK_MODE_FEC_NONE_BIT = 0x31 - ETHTOOL_LINK_MODE_FEC_RS_BIT = 0x32 - ETHTOOL_LINK_MODE_FEC_BASER_BIT = 0x33 - ETHTOOL_LINK_MODE_50000baseKR_Full_BIT = 0x34 - ETHTOOL_LINK_MODE_50000baseSR_Full_BIT = 0x35 - ETHTOOL_LINK_MODE_50000baseCR_Full_BIT = 0x36 - ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT = 0x37 - ETHTOOL_LINK_MODE_50000baseDR_Full_BIT = 0x38 - ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT = 0x39 - ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT = 0x3a - ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT = 0x3b - ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT = 0x3c - ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT = 0x3d - ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT = 0x3e - ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT = 0x3f - ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT = 0x40 - ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT = 0x41 - ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT = 0x42 - ETHTOOL_LINK_MODE_100baseT1_Full_BIT = 0x43 - ETHTOOL_LINK_MODE_1000baseT1_Full_BIT = 0x44 - ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT = 0x45 - ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT = 0x46 - ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT = 0x47 - ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT = 0x48 - ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT = 0x49 - ETHTOOL_LINK_MODE_FEC_LLRS_BIT = 0x4a - ETHTOOL_LINK_MODE_100000baseKR_Full_BIT = 0x4b - ETHTOOL_LINK_MODE_100000baseSR_Full_BIT = 0x4c - ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT = 0x4d - ETHTOOL_LINK_MODE_100000baseCR_Full_BIT = 0x4e - ETHTOOL_LINK_MODE_100000baseDR_Full_BIT = 0x4f - ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT = 0x50 - ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT = 0x51 - ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT = 0x52 - ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT = 0x53 - ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT = 0x54 - ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT = 0x55 - ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT = 0x56 - ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT = 0x57 - ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT = 0x58 - ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT = 0x59 - ETHTOOL_LINK_MODE_100baseFX_Half_BIT = 0x5a - ETHTOOL_LINK_MODE_100baseFX_Full_BIT = 0x5b - - ETHTOOL_MSG_USER_NONE = 0x0 - ETHTOOL_MSG_STRSET_GET = 0x1 - ETHTOOL_MSG_LINKINFO_GET = 0x2 - ETHTOOL_MSG_LINKINFO_SET = 0x3 - ETHTOOL_MSG_LINKMODES_GET = 0x4 - ETHTOOL_MSG_LINKMODES_SET = 0x5 - ETHTOOL_MSG_LINKSTATE_GET = 0x6 - ETHTOOL_MSG_DEBUG_GET = 0x7 - ETHTOOL_MSG_DEBUG_SET = 0x8 - ETHTOOL_MSG_WOL_GET = 0x9 - ETHTOOL_MSG_WOL_SET = 0xa - ETHTOOL_MSG_FEATURES_GET = 0xb - ETHTOOL_MSG_FEATURES_SET = 0xc - ETHTOOL_MSG_PRIVFLAGS_GET = 0xd - ETHTOOL_MSG_PRIVFLAGS_SET = 0xe - ETHTOOL_MSG_RINGS_GET = 0xf - ETHTOOL_MSG_RINGS_SET = 0x10 - ETHTOOL_MSG_CHANNELS_GET = 0x11 - ETHTOOL_MSG_CHANNELS_SET = 0x12 - ETHTOOL_MSG_COALESCE_GET = 0x13 - ETHTOOL_MSG_COALESCE_SET = 0x14 - ETHTOOL_MSG_PAUSE_GET = 0x15 - ETHTOOL_MSG_PAUSE_SET = 0x16 - ETHTOOL_MSG_EEE_GET = 0x17 - ETHTOOL_MSG_EEE_SET = 0x18 - ETHTOOL_MSG_TSINFO_GET = 0x19 - ETHTOOL_MSG_CABLE_TEST_ACT = 0x1a - ETHTOOL_MSG_CABLE_TEST_TDR_ACT = 0x1b - ETHTOOL_MSG_TUNNEL_INFO_GET = 0x1c - ETHTOOL_MSG_FEC_GET = 0x1d - ETHTOOL_MSG_FEC_SET = 0x1e - ETHTOOL_MSG_MODULE_EEPROM_GET = 0x1f - ETHTOOL_MSG_STATS_GET = 0x20 - ETHTOOL_MSG_PHC_VCLOCKS_GET = 0x21 - ETHTOOL_MSG_MODULE_GET = 0x22 - ETHTOOL_MSG_MODULE_SET = 0x23 - ETHTOOL_MSG_USER_MAX = 0x23 - ETHTOOL_MSG_KERNEL_NONE = 0x0 - ETHTOOL_MSG_STRSET_GET_REPLY = 0x1 - ETHTOOL_MSG_LINKINFO_GET_REPLY = 0x2 - ETHTOOL_MSG_LINKINFO_NTF = 0x3 - ETHTOOL_MSG_LINKMODES_GET_REPLY = 0x4 - ETHTOOL_MSG_LINKMODES_NTF = 0x5 - ETHTOOL_MSG_LINKSTATE_GET_REPLY = 0x6 - ETHTOOL_MSG_DEBUG_GET_REPLY = 0x7 - ETHTOOL_MSG_DEBUG_NTF = 0x8 - ETHTOOL_MSG_WOL_GET_REPLY = 0x9 - ETHTOOL_MSG_WOL_NTF = 0xa - ETHTOOL_MSG_FEATURES_GET_REPLY = 0xb - ETHTOOL_MSG_FEATURES_SET_REPLY = 0xc - ETHTOOL_MSG_FEATURES_NTF = 0xd - ETHTOOL_MSG_PRIVFLAGS_GET_REPLY = 0xe - ETHTOOL_MSG_PRIVFLAGS_NTF = 0xf - ETHTOOL_MSG_RINGS_GET_REPLY = 0x10 - ETHTOOL_MSG_RINGS_NTF = 0x11 - ETHTOOL_MSG_CHANNELS_GET_REPLY = 0x12 - ETHTOOL_MSG_CHANNELS_NTF = 0x13 - ETHTOOL_MSG_COALESCE_GET_REPLY = 0x14 - ETHTOOL_MSG_COALESCE_NTF = 0x15 - ETHTOOL_MSG_PAUSE_GET_REPLY = 0x16 - ETHTOOL_MSG_PAUSE_NTF = 0x17 - ETHTOOL_MSG_EEE_GET_REPLY = 0x18 - ETHTOOL_MSG_EEE_NTF = 0x19 - ETHTOOL_MSG_TSINFO_GET_REPLY = 0x1a - ETHTOOL_MSG_CABLE_TEST_NTF = 0x1b - ETHTOOL_MSG_CABLE_TEST_TDR_NTF = 0x1c - ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY = 0x1d - ETHTOOL_MSG_FEC_GET_REPLY = 0x1e - ETHTOOL_MSG_FEC_NTF = 0x1f - ETHTOOL_MSG_MODULE_EEPROM_GET_REPLY = 0x20 - ETHTOOL_MSG_STATS_GET_REPLY = 0x21 - ETHTOOL_MSG_PHC_VCLOCKS_GET_REPLY = 0x22 - ETHTOOL_MSG_MODULE_GET_REPLY = 0x23 - ETHTOOL_MSG_MODULE_NTF = 0x24 - ETHTOOL_MSG_KERNEL_MAX = 0x24 - ETHTOOL_A_HEADER_UNSPEC = 0x0 - ETHTOOL_A_HEADER_DEV_INDEX = 0x1 - ETHTOOL_A_HEADER_DEV_NAME = 0x2 - ETHTOOL_A_HEADER_FLAGS = 0x3 - ETHTOOL_A_HEADER_MAX = 0x3 - ETHTOOL_A_BITSET_BIT_UNSPEC = 0x0 - ETHTOOL_A_BITSET_BIT_INDEX = 0x1 - ETHTOOL_A_BITSET_BIT_NAME = 0x2 - ETHTOOL_A_BITSET_BIT_VALUE = 0x3 - ETHTOOL_A_BITSET_BIT_MAX = 0x3 - ETHTOOL_A_BITSET_BITS_UNSPEC = 0x0 - ETHTOOL_A_BITSET_BITS_BIT = 0x1 - ETHTOOL_A_BITSET_BITS_MAX = 0x1 - ETHTOOL_A_BITSET_UNSPEC = 0x0 - ETHTOOL_A_BITSET_NOMASK = 0x1 - ETHTOOL_A_BITSET_SIZE = 0x2 - ETHTOOL_A_BITSET_BITS = 0x3 - ETHTOOL_A_BITSET_VALUE = 0x4 - ETHTOOL_A_BITSET_MASK = 0x5 - ETHTOOL_A_BITSET_MAX = 0x5 - ETHTOOL_A_STRING_UNSPEC = 0x0 - ETHTOOL_A_STRING_INDEX = 0x1 - ETHTOOL_A_STRING_VALUE = 0x2 - ETHTOOL_A_STRING_MAX = 0x2 - ETHTOOL_A_STRINGS_UNSPEC = 0x0 - ETHTOOL_A_STRINGS_STRING = 0x1 - ETHTOOL_A_STRINGS_MAX = 0x1 - ETHTOOL_A_STRINGSET_UNSPEC = 0x0 - ETHTOOL_A_STRINGSET_ID = 0x1 - ETHTOOL_A_STRINGSET_COUNT = 0x2 - ETHTOOL_A_STRINGSET_STRINGS = 0x3 - ETHTOOL_A_STRINGSET_MAX = 0x3 - ETHTOOL_A_STRINGSETS_UNSPEC = 0x0 - ETHTOOL_A_STRINGSETS_STRINGSET = 0x1 - ETHTOOL_A_STRINGSETS_MAX = 0x1 - ETHTOOL_A_STRSET_UNSPEC = 0x0 - ETHTOOL_A_STRSET_HEADER = 0x1 - ETHTOOL_A_STRSET_STRINGSETS = 0x2 - ETHTOOL_A_STRSET_COUNTS_ONLY = 0x3 - ETHTOOL_A_STRSET_MAX = 0x3 - ETHTOOL_A_LINKINFO_UNSPEC = 0x0 - ETHTOOL_A_LINKINFO_HEADER = 0x1 - ETHTOOL_A_LINKINFO_PORT = 0x2 - ETHTOOL_A_LINKINFO_PHYADDR = 0x3 - ETHTOOL_A_LINKINFO_TP_MDIX = 0x4 - ETHTOOL_A_LINKINFO_TP_MDIX_CTRL = 0x5 - ETHTOOL_A_LINKINFO_TRANSCEIVER = 0x6 - ETHTOOL_A_LINKINFO_MAX = 0x6 - ETHTOOL_A_LINKMODES_UNSPEC = 0x0 - ETHTOOL_A_LINKMODES_HEADER = 0x1 - ETHTOOL_A_LINKMODES_AUTONEG = 0x2 - ETHTOOL_A_LINKMODES_OURS = 0x3 - ETHTOOL_A_LINKMODES_PEER = 0x4 - ETHTOOL_A_LINKMODES_SPEED = 0x5 - ETHTOOL_A_LINKMODES_DUPLEX = 0x6 - ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG = 0x7 - ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE = 0x8 - ETHTOOL_A_LINKMODES_LANES = 0x9 - ETHTOOL_A_LINKMODES_MAX = 0x9 - ETHTOOL_A_LINKSTATE_UNSPEC = 0x0 - ETHTOOL_A_LINKSTATE_HEADER = 0x1 - ETHTOOL_A_LINKSTATE_LINK = 0x2 - ETHTOOL_A_LINKSTATE_SQI = 0x3 - ETHTOOL_A_LINKSTATE_SQI_MAX = 0x4 - ETHTOOL_A_LINKSTATE_EXT_STATE = 0x5 - ETHTOOL_A_LINKSTATE_EXT_SUBSTATE = 0x6 - ETHTOOL_A_LINKSTATE_MAX = 0x6 - ETHTOOL_A_DEBUG_UNSPEC = 0x0 - ETHTOOL_A_DEBUG_HEADER = 0x1 - ETHTOOL_A_DEBUG_MSGMASK = 0x2 - ETHTOOL_A_DEBUG_MAX = 0x2 - ETHTOOL_A_WOL_UNSPEC = 0x0 - ETHTOOL_A_WOL_HEADER = 0x1 - ETHTOOL_A_WOL_MODES = 0x2 - ETHTOOL_A_WOL_SOPASS = 0x3 - ETHTOOL_A_WOL_MAX = 0x3 - ETHTOOL_A_FEATURES_UNSPEC = 0x0 - ETHTOOL_A_FEATURES_HEADER = 0x1 - ETHTOOL_A_FEATURES_HW = 0x2 - ETHTOOL_A_FEATURES_WANTED = 0x3 - ETHTOOL_A_FEATURES_ACTIVE = 0x4 - ETHTOOL_A_FEATURES_NOCHANGE = 0x5 - ETHTOOL_A_FEATURES_MAX = 0x5 - ETHTOOL_A_PRIVFLAGS_UNSPEC = 0x0 - ETHTOOL_A_PRIVFLAGS_HEADER = 0x1 - ETHTOOL_A_PRIVFLAGS_FLAGS = 0x2 - ETHTOOL_A_PRIVFLAGS_MAX = 0x2 - ETHTOOL_A_RINGS_UNSPEC = 0x0 - ETHTOOL_A_RINGS_HEADER = 0x1 - ETHTOOL_A_RINGS_RX_MAX = 0x2 - ETHTOOL_A_RINGS_RX_MINI_MAX = 0x3 - ETHTOOL_A_RINGS_RX_JUMBO_MAX = 0x4 - ETHTOOL_A_RINGS_TX_MAX = 0x5 - ETHTOOL_A_RINGS_RX = 0x6 - ETHTOOL_A_RINGS_RX_MINI = 0x7 - ETHTOOL_A_RINGS_RX_JUMBO = 0x8 - ETHTOOL_A_RINGS_TX = 0x9 - ETHTOOL_A_RINGS_RX_BUF_LEN = 0xa - ETHTOOL_A_RINGS_TCP_DATA_SPLIT = 0xb - ETHTOOL_A_RINGS_CQE_SIZE = 0xc - ETHTOOL_A_RINGS_TX_PUSH = 0xd - ETHTOOL_A_RINGS_MAX = 0xd - ETHTOOL_A_CHANNELS_UNSPEC = 0x0 - ETHTOOL_A_CHANNELS_HEADER = 0x1 - ETHTOOL_A_CHANNELS_RX_MAX = 0x2 - ETHTOOL_A_CHANNELS_TX_MAX = 0x3 - ETHTOOL_A_CHANNELS_OTHER_MAX = 0x4 - ETHTOOL_A_CHANNELS_COMBINED_MAX = 0x5 - ETHTOOL_A_CHANNELS_RX_COUNT = 0x6 - ETHTOOL_A_CHANNELS_TX_COUNT = 0x7 - ETHTOOL_A_CHANNELS_OTHER_COUNT = 0x8 - ETHTOOL_A_CHANNELS_COMBINED_COUNT = 0x9 - ETHTOOL_A_CHANNELS_MAX = 0x9 - ETHTOOL_A_COALESCE_UNSPEC = 0x0 - ETHTOOL_A_COALESCE_HEADER = 0x1 - ETHTOOL_A_COALESCE_RX_USECS = 0x2 - ETHTOOL_A_COALESCE_RX_MAX_FRAMES = 0x3 - ETHTOOL_A_COALESCE_RX_USECS_IRQ = 0x4 - ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ = 0x5 - ETHTOOL_A_COALESCE_TX_USECS = 0x6 - ETHTOOL_A_COALESCE_TX_MAX_FRAMES = 0x7 - ETHTOOL_A_COALESCE_TX_USECS_IRQ = 0x8 - ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ = 0x9 - ETHTOOL_A_COALESCE_STATS_BLOCK_USECS = 0xa - ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX = 0xb - ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX = 0xc - ETHTOOL_A_COALESCE_PKT_RATE_LOW = 0xd - ETHTOOL_A_COALESCE_RX_USECS_LOW = 0xe - ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW = 0xf - ETHTOOL_A_COALESCE_TX_USECS_LOW = 0x10 - ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW = 0x11 - ETHTOOL_A_COALESCE_PKT_RATE_HIGH = 0x12 - ETHTOOL_A_COALESCE_RX_USECS_HIGH = 0x13 - ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH = 0x14 - ETHTOOL_A_COALESCE_TX_USECS_HIGH = 0x15 - ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH = 0x16 - ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 0x17 - ETHTOOL_A_COALESCE_USE_CQE_MODE_TX = 0x18 - ETHTOOL_A_COALESCE_USE_CQE_MODE_RX = 0x19 - ETHTOOL_A_COALESCE_MAX = 0x19 - ETHTOOL_A_PAUSE_UNSPEC = 0x0 - ETHTOOL_A_PAUSE_HEADER = 0x1 - ETHTOOL_A_PAUSE_AUTONEG = 0x2 - ETHTOOL_A_PAUSE_RX = 0x3 - ETHTOOL_A_PAUSE_TX = 0x4 - ETHTOOL_A_PAUSE_STATS = 0x5 - ETHTOOL_A_PAUSE_MAX = 0x5 - ETHTOOL_A_PAUSE_STAT_UNSPEC = 0x0 - ETHTOOL_A_PAUSE_STAT_PAD = 0x1 - ETHTOOL_A_PAUSE_STAT_TX_FRAMES = 0x2 - ETHTOOL_A_PAUSE_STAT_RX_FRAMES = 0x3 - ETHTOOL_A_PAUSE_STAT_MAX = 0x3 - ETHTOOL_A_EEE_UNSPEC = 0x0 - ETHTOOL_A_EEE_HEADER = 0x1 - ETHTOOL_A_EEE_MODES_OURS = 0x2 - ETHTOOL_A_EEE_MODES_PEER = 0x3 - ETHTOOL_A_EEE_ACTIVE = 0x4 - ETHTOOL_A_EEE_ENABLED = 0x5 - ETHTOOL_A_EEE_TX_LPI_ENABLED = 0x6 - ETHTOOL_A_EEE_TX_LPI_TIMER = 0x7 - ETHTOOL_A_EEE_MAX = 0x7 - ETHTOOL_A_TSINFO_UNSPEC = 0x0 - ETHTOOL_A_TSINFO_HEADER = 0x1 - ETHTOOL_A_TSINFO_TIMESTAMPING = 0x2 - ETHTOOL_A_TSINFO_TX_TYPES = 0x3 - ETHTOOL_A_TSINFO_RX_FILTERS = 0x4 - ETHTOOL_A_TSINFO_PHC_INDEX = 0x5 - ETHTOOL_A_TSINFO_MAX = 0x5 - ETHTOOL_A_CABLE_TEST_UNSPEC = 0x0 - ETHTOOL_A_CABLE_TEST_HEADER = 0x1 - ETHTOOL_A_CABLE_TEST_MAX = 0x1 - ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC = 0x0 - ETHTOOL_A_CABLE_RESULT_CODE_OK = 0x1 - ETHTOOL_A_CABLE_RESULT_CODE_OPEN = 0x2 - ETHTOOL_A_CABLE_RESULT_CODE_SAME_SHORT = 0x3 - ETHTOOL_A_CABLE_RESULT_CODE_CROSS_SHORT = 0x4 - ETHTOOL_A_CABLE_PAIR_A = 0x0 - ETHTOOL_A_CABLE_PAIR_B = 0x1 - ETHTOOL_A_CABLE_PAIR_C = 0x2 - ETHTOOL_A_CABLE_PAIR_D = 0x3 - ETHTOOL_A_CABLE_RESULT_UNSPEC = 0x0 - ETHTOOL_A_CABLE_RESULT_PAIR = 0x1 - ETHTOOL_A_CABLE_RESULT_CODE = 0x2 - ETHTOOL_A_CABLE_RESULT_MAX = 0x2 - ETHTOOL_A_CABLE_FAULT_LENGTH_UNSPEC = 0x0 - ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR = 0x1 - ETHTOOL_A_CABLE_FAULT_LENGTH_CM = 0x2 - ETHTOOL_A_CABLE_FAULT_LENGTH_MAX = 0x2 - ETHTOOL_A_CABLE_TEST_NTF_STATUS_UNSPEC = 0x0 - ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED = 0x1 - ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED = 0x2 - ETHTOOL_A_CABLE_NEST_UNSPEC = 0x0 - ETHTOOL_A_CABLE_NEST_RESULT = 0x1 - ETHTOOL_A_CABLE_NEST_FAULT_LENGTH = 0x2 - ETHTOOL_A_CABLE_NEST_MAX = 0x2 - ETHTOOL_A_CABLE_TEST_NTF_UNSPEC = 0x0 - ETHTOOL_A_CABLE_TEST_NTF_HEADER = 0x1 - ETHTOOL_A_CABLE_TEST_NTF_STATUS = 0x2 - ETHTOOL_A_CABLE_TEST_NTF_NEST = 0x3 - ETHTOOL_A_CABLE_TEST_NTF_MAX = 0x3 - ETHTOOL_A_CABLE_TEST_TDR_CFG_UNSPEC = 0x0 - ETHTOOL_A_CABLE_TEST_TDR_CFG_FIRST = 0x1 - ETHTOOL_A_CABLE_TEST_TDR_CFG_LAST = 0x2 - ETHTOOL_A_CABLE_TEST_TDR_CFG_STEP = 0x3 - ETHTOOL_A_CABLE_TEST_TDR_CFG_PAIR = 0x4 - ETHTOOL_A_CABLE_TEST_TDR_CFG_MAX = 0x4 - ETHTOOL_A_CABLE_TEST_TDR_UNSPEC = 0x0 - ETHTOOL_A_CABLE_TEST_TDR_HEADER = 0x1 - ETHTOOL_A_CABLE_TEST_TDR_CFG = 0x2 - ETHTOOL_A_CABLE_TEST_TDR_MAX = 0x2 - ETHTOOL_A_CABLE_AMPLITUDE_UNSPEC = 0x0 - ETHTOOL_A_CABLE_AMPLITUDE_PAIR = 0x1 - ETHTOOL_A_CABLE_AMPLITUDE_mV = 0x2 - ETHTOOL_A_CABLE_AMPLITUDE_MAX = 0x2 - ETHTOOL_A_CABLE_PULSE_UNSPEC = 0x0 - ETHTOOL_A_CABLE_PULSE_mV = 0x1 - ETHTOOL_A_CABLE_PULSE_MAX = 0x1 - ETHTOOL_A_CABLE_STEP_UNSPEC = 0x0 - ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE = 0x1 - ETHTOOL_A_CABLE_STEP_LAST_DISTANCE = 0x2 - ETHTOOL_A_CABLE_STEP_STEP_DISTANCE = 0x3 - ETHTOOL_A_CABLE_STEP_MAX = 0x3 - ETHTOOL_A_CABLE_TDR_NEST_UNSPEC = 0x0 - ETHTOOL_A_CABLE_TDR_NEST_STEP = 0x1 - ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE = 0x2 - ETHTOOL_A_CABLE_TDR_NEST_PULSE = 0x3 - ETHTOOL_A_CABLE_TDR_NEST_MAX = 0x3 - ETHTOOL_A_CABLE_TEST_TDR_NTF_UNSPEC = 0x0 - ETHTOOL_A_CABLE_TEST_TDR_NTF_HEADER = 0x1 - ETHTOOL_A_CABLE_TEST_TDR_NTF_STATUS = 0x2 - ETHTOOL_A_CABLE_TEST_TDR_NTF_NEST = 0x3 - ETHTOOL_A_CABLE_TEST_TDR_NTF_MAX = 0x3 - ETHTOOL_UDP_TUNNEL_TYPE_VXLAN = 0x0 - ETHTOOL_UDP_TUNNEL_TYPE_GENEVE = 0x1 - ETHTOOL_UDP_TUNNEL_TYPE_VXLAN_GPE = 0x2 - ETHTOOL_A_TUNNEL_UDP_ENTRY_UNSPEC = 0x0 - ETHTOOL_A_TUNNEL_UDP_ENTRY_PORT = 0x1 - ETHTOOL_A_TUNNEL_UDP_ENTRY_TYPE = 0x2 - ETHTOOL_A_TUNNEL_UDP_ENTRY_MAX = 0x2 - ETHTOOL_A_TUNNEL_UDP_TABLE_UNSPEC = 0x0 - ETHTOOL_A_TUNNEL_UDP_TABLE_SIZE = 0x1 - ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES = 0x2 - ETHTOOL_A_TUNNEL_UDP_TABLE_ENTRY = 0x3 - ETHTOOL_A_TUNNEL_UDP_TABLE_MAX = 0x3 - ETHTOOL_A_TUNNEL_UDP_UNSPEC = 0x0 - ETHTOOL_A_TUNNEL_UDP_TABLE = 0x1 - ETHTOOL_A_TUNNEL_UDP_MAX = 0x1 - ETHTOOL_A_TUNNEL_INFO_UNSPEC = 0x0 - ETHTOOL_A_TUNNEL_INFO_HEADER = 0x1 - ETHTOOL_A_TUNNEL_INFO_UDP_PORTS = 0x2 - ETHTOOL_A_TUNNEL_INFO_MAX = 0x2 -) - -const SPEED_UNKNOWN = -0x1 - -type EthtoolDrvinfo struct { - Cmd uint32 - Driver [32]byte - Version [32]byte - Fw_version [32]byte - Bus_info [32]byte - Erom_version [32]byte - Reserved2 [12]byte - N_priv_flags uint32 - N_stats uint32 - Testinfo_len uint32 - Eedump_len uint32 - Regdump_len uint32 -} - -type ( - HIDRawReportDescriptor struct { - Size uint32 - Value [4096]uint8 - } - HIDRawDevInfo struct { - Bustype uint32 - Vendor int16 - Product int16 - } -) - -const ( - CLOSE_RANGE_UNSHARE = 0x2 - CLOSE_RANGE_CLOEXEC = 0x4 -) - -const ( - NLMSGERR_ATTR_MSG = 0x1 - NLMSGERR_ATTR_OFFS = 0x2 - NLMSGERR_ATTR_COOKIE = 0x3 -) - -type ( - EraseInfo struct { - Start uint32 - Length uint32 - } - EraseInfo64 struct { - Start uint64 - Length uint64 - } - MtdOobBuf struct { - Start uint32 - Length uint32 - Ptr *uint8 - } - MtdOobBuf64 struct { - Start uint64 - Pad uint32 - Length uint32 - Ptr uint64 - } - MtdWriteReq struct { - Start uint64 - Len uint64 - Ooblen uint64 - Data uint64 - Oob uint64 - Mode uint8 - _ [7]uint8 - } - MtdInfo struct { - Type uint8 - Flags uint32 - Size uint32 - Erasesize uint32 - Writesize uint32 - Oobsize uint32 - _ uint64 - } - RegionInfo struct { - Offset uint32 - Erasesize uint32 - Numblocks uint32 - Regionindex uint32 - } - OtpInfo struct { - Start uint32 - Length uint32 - Locked uint32 - } - NandOobinfo struct { - Useecc uint32 - Eccbytes uint32 - Oobfree [8][2]uint32 - Eccpos [32]uint32 - } - NandOobfree struct { - Offset uint32 - Length uint32 - } - NandEcclayout struct { - Eccbytes uint32 - Eccpos [64]uint32 - Oobavail uint32 - Oobfree [8]NandOobfree - } - MtdEccStats struct { - Corrected uint32 - Failed uint32 - Badblocks uint32 - Bbtblocks uint32 - } -) - -const ( - MTD_OPS_PLACE_OOB = 0x0 - MTD_OPS_AUTO_OOB = 0x1 - MTD_OPS_RAW = 0x2 -) - -const ( - MTD_FILE_MODE_NORMAL = 0x0 - MTD_FILE_MODE_OTP_FACTORY = 0x1 - MTD_FILE_MODE_OTP_USER = 0x2 - MTD_FILE_MODE_RAW = 0x3 -) - -const ( - NFC_CMD_UNSPEC = 0x0 - NFC_CMD_GET_DEVICE = 0x1 - NFC_CMD_DEV_UP = 0x2 - NFC_CMD_DEV_DOWN = 0x3 - NFC_CMD_DEP_LINK_UP = 0x4 - NFC_CMD_DEP_LINK_DOWN = 0x5 - NFC_CMD_START_POLL = 0x6 - NFC_CMD_STOP_POLL = 0x7 - NFC_CMD_GET_TARGET = 0x8 - NFC_EVENT_TARGETS_FOUND = 0x9 - NFC_EVENT_DEVICE_ADDED = 0xa - NFC_EVENT_DEVICE_REMOVED = 0xb - NFC_EVENT_TARGET_LOST = 0xc - NFC_EVENT_TM_ACTIVATED = 0xd - NFC_EVENT_TM_DEACTIVATED = 0xe - NFC_CMD_LLC_GET_PARAMS = 0xf - NFC_CMD_LLC_SET_PARAMS = 0x10 - NFC_CMD_ENABLE_SE = 0x11 - NFC_CMD_DISABLE_SE = 0x12 - NFC_CMD_LLC_SDREQ = 0x13 - NFC_EVENT_LLC_SDRES = 0x14 - NFC_CMD_FW_DOWNLOAD = 0x15 - NFC_EVENT_SE_ADDED = 0x16 - NFC_EVENT_SE_REMOVED = 0x17 - NFC_EVENT_SE_CONNECTIVITY = 0x18 - NFC_EVENT_SE_TRANSACTION = 0x19 - NFC_CMD_GET_SE = 0x1a - NFC_CMD_SE_IO = 0x1b - NFC_CMD_ACTIVATE_TARGET = 0x1c - NFC_CMD_VENDOR = 0x1d - NFC_CMD_DEACTIVATE_TARGET = 0x1e - NFC_ATTR_UNSPEC = 0x0 - NFC_ATTR_DEVICE_INDEX = 0x1 - NFC_ATTR_DEVICE_NAME = 0x2 - NFC_ATTR_PROTOCOLS = 0x3 - NFC_ATTR_TARGET_INDEX = 0x4 - NFC_ATTR_TARGET_SENS_RES = 0x5 - NFC_ATTR_TARGET_SEL_RES = 0x6 - NFC_ATTR_TARGET_NFCID1 = 0x7 - NFC_ATTR_TARGET_SENSB_RES = 0x8 - NFC_ATTR_TARGET_SENSF_RES = 0x9 - NFC_ATTR_COMM_MODE = 0xa - NFC_ATTR_RF_MODE = 0xb - NFC_ATTR_DEVICE_POWERED = 0xc - NFC_ATTR_IM_PROTOCOLS = 0xd - NFC_ATTR_TM_PROTOCOLS = 0xe - NFC_ATTR_LLC_PARAM_LTO = 0xf - NFC_ATTR_LLC_PARAM_RW = 0x10 - NFC_ATTR_LLC_PARAM_MIUX = 0x11 - NFC_ATTR_SE = 0x12 - NFC_ATTR_LLC_SDP = 0x13 - NFC_ATTR_FIRMWARE_NAME = 0x14 - NFC_ATTR_SE_INDEX = 0x15 - NFC_ATTR_SE_TYPE = 0x16 - NFC_ATTR_SE_AID = 0x17 - NFC_ATTR_FIRMWARE_DOWNLOAD_STATUS = 0x18 - NFC_ATTR_SE_APDU = 0x19 - NFC_ATTR_TARGET_ISO15693_DSFID = 0x1a - NFC_ATTR_TARGET_ISO15693_UID = 0x1b - NFC_ATTR_SE_PARAMS = 0x1c - NFC_ATTR_VENDOR_ID = 0x1d - NFC_ATTR_VENDOR_SUBCMD = 0x1e - NFC_ATTR_VENDOR_DATA = 0x1f - NFC_SDP_ATTR_UNSPEC = 0x0 - NFC_SDP_ATTR_URI = 0x1 - NFC_SDP_ATTR_SAP = 0x2 -) - -type LandlockRulesetAttr struct { - Access_fs uint64 -} - -type LandlockPathBeneathAttr struct { - Allowed_access uint64 - Parent_fd int32 -} - -const ( - LANDLOCK_RULE_PATH_BENEATH = 0x1 -) - -const ( - IPC_CREAT = 0x200 - IPC_EXCL = 0x400 - IPC_NOWAIT = 0x800 - IPC_PRIVATE = 0x0 - - ipc_64 = 0x100 -) - -const ( - IPC_RMID = 0x0 - IPC_SET = 0x1 - IPC_STAT = 0x2 -) - -const ( - SHM_RDONLY = 0x1000 - SHM_RND = 0x2000 -) - -type MountAttr struct { - Attr_set uint64 - Attr_clr uint64 - Propagation uint64 - Userns_fd uint64 -} - -const ( - WG_CMD_GET_DEVICE = 0x0 - WG_CMD_SET_DEVICE = 0x1 - WGDEVICE_F_REPLACE_PEERS = 0x1 - WGDEVICE_A_UNSPEC = 0x0 - WGDEVICE_A_IFINDEX = 0x1 - WGDEVICE_A_IFNAME = 0x2 - WGDEVICE_A_PRIVATE_KEY = 0x3 - WGDEVICE_A_PUBLIC_KEY = 0x4 - WGDEVICE_A_FLAGS = 0x5 - WGDEVICE_A_LISTEN_PORT = 0x6 - WGDEVICE_A_FWMARK = 0x7 - WGDEVICE_A_PEERS = 0x8 - WGPEER_F_REMOVE_ME = 0x1 - WGPEER_F_REPLACE_ALLOWEDIPS = 0x2 - WGPEER_F_UPDATE_ONLY = 0x4 - WGPEER_A_UNSPEC = 0x0 - WGPEER_A_PUBLIC_KEY = 0x1 - WGPEER_A_PRESHARED_KEY = 0x2 - WGPEER_A_FLAGS = 0x3 - WGPEER_A_ENDPOINT = 0x4 - WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL = 0x5 - WGPEER_A_LAST_HANDSHAKE_TIME = 0x6 - WGPEER_A_RX_BYTES = 0x7 - WGPEER_A_TX_BYTES = 0x8 - WGPEER_A_ALLOWEDIPS = 0x9 - WGPEER_A_PROTOCOL_VERSION = 0xa - WGALLOWEDIP_A_UNSPEC = 0x0 - WGALLOWEDIP_A_FAMILY = 0x1 - WGALLOWEDIP_A_IPADDR = 0x2 - WGALLOWEDIP_A_CIDR_MASK = 0x3 -) - -const ( - NL_ATTR_TYPE_INVALID = 0x0 - NL_ATTR_TYPE_FLAG = 0x1 - NL_ATTR_TYPE_U8 = 0x2 - NL_ATTR_TYPE_U16 = 0x3 - NL_ATTR_TYPE_U32 = 0x4 - NL_ATTR_TYPE_U64 = 0x5 - NL_ATTR_TYPE_S8 = 0x6 - NL_ATTR_TYPE_S16 = 0x7 - NL_ATTR_TYPE_S32 = 0x8 - NL_ATTR_TYPE_S64 = 0x9 - NL_ATTR_TYPE_BINARY = 0xa - NL_ATTR_TYPE_STRING = 0xb - NL_ATTR_TYPE_NUL_STRING = 0xc - NL_ATTR_TYPE_NESTED = 0xd - NL_ATTR_TYPE_NESTED_ARRAY = 0xe - NL_ATTR_TYPE_BITFIELD32 = 0xf - - NL_POLICY_TYPE_ATTR_UNSPEC = 0x0 - NL_POLICY_TYPE_ATTR_TYPE = 0x1 - NL_POLICY_TYPE_ATTR_MIN_VALUE_S = 0x2 - NL_POLICY_TYPE_ATTR_MAX_VALUE_S = 0x3 - NL_POLICY_TYPE_ATTR_MIN_VALUE_U = 0x4 - NL_POLICY_TYPE_ATTR_MAX_VALUE_U = 0x5 - NL_POLICY_TYPE_ATTR_MIN_LENGTH = 0x6 - NL_POLICY_TYPE_ATTR_MAX_LENGTH = 0x7 - NL_POLICY_TYPE_ATTR_POLICY_IDX = 0x8 - NL_POLICY_TYPE_ATTR_POLICY_MAXTYPE = 0x9 - NL_POLICY_TYPE_ATTR_BITFIELD32_MASK = 0xa - NL_POLICY_TYPE_ATTR_PAD = 0xb - NL_POLICY_TYPE_ATTR_MASK = 0xc - NL_POLICY_TYPE_ATTR_MAX = 0xc -) - -type CANBitTiming struct { - Bitrate uint32 - Sample_point uint32 - Tq uint32 - Prop_seg uint32 - Phase_seg1 uint32 - Phase_seg2 uint32 - Sjw uint32 - Brp uint32 -} - -type CANBitTimingConst struct { - Name [16]uint8 - Tseg1_min uint32 - Tseg1_max uint32 - Tseg2_min uint32 - Tseg2_max uint32 - Sjw_max uint32 - Brp_min uint32 - Brp_max uint32 - Brp_inc uint32 -} - -type CANClock struct { - Freq uint32 -} - -type CANBusErrorCounters struct { - Txerr uint16 - Rxerr uint16 -} - -type CANCtrlMode struct { - Mask uint32 - Flags uint32 -} - -type CANDeviceStats struct { - Bus_error uint32 - Error_warning uint32 - Error_passive uint32 - Bus_off uint32 - Arbitration_lost uint32 - Restarts uint32 -} - -const ( - CAN_STATE_ERROR_ACTIVE = 0x0 - CAN_STATE_ERROR_WARNING = 0x1 - CAN_STATE_ERROR_PASSIVE = 0x2 - CAN_STATE_BUS_OFF = 0x3 - CAN_STATE_STOPPED = 0x4 - CAN_STATE_SLEEPING = 0x5 - CAN_STATE_MAX = 0x6 -) - -const ( - IFLA_CAN_UNSPEC = 0x0 - IFLA_CAN_BITTIMING = 0x1 - IFLA_CAN_BITTIMING_CONST = 0x2 - IFLA_CAN_CLOCK = 0x3 - IFLA_CAN_STATE = 0x4 - IFLA_CAN_CTRLMODE = 0x5 - IFLA_CAN_RESTART_MS = 0x6 - IFLA_CAN_RESTART = 0x7 - IFLA_CAN_BERR_COUNTER = 0x8 - IFLA_CAN_DATA_BITTIMING = 0x9 - IFLA_CAN_DATA_BITTIMING_CONST = 0xa - IFLA_CAN_TERMINATION = 0xb - IFLA_CAN_TERMINATION_CONST = 0xc - IFLA_CAN_BITRATE_CONST = 0xd - IFLA_CAN_DATA_BITRATE_CONST = 0xe - IFLA_CAN_BITRATE_MAX = 0xf -) - -type KCMAttach struct { - Fd int32 - Bpf_fd int32 -} - -type KCMUnattach struct { - Fd int32 -} - -type KCMClone struct { - Fd int32 -} - -const ( - NL80211_AC_BE = 0x2 - NL80211_AC_BK = 0x3 - NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED = 0x0 - NL80211_ACL_POLICY_DENY_UNLESS_LISTED = 0x1 - NL80211_AC_VI = 0x1 - NL80211_AC_VO = 0x0 - NL80211_ATTR_4ADDR = 0x53 - NL80211_ATTR_ACK = 0x5c - NL80211_ATTR_ACK_SIGNAL = 0x107 - NL80211_ATTR_ACL_POLICY = 0xa5 - NL80211_ATTR_ADMITTED_TIME = 0xd4 - NL80211_ATTR_AIRTIME_WEIGHT = 0x112 - NL80211_ATTR_AKM_SUITES = 0x4c - NL80211_ATTR_AP_ISOLATE = 0x60 - NL80211_ATTR_AUTH_DATA = 0x9c - NL80211_ATTR_AUTH_TYPE = 0x35 - NL80211_ATTR_BANDS = 0xef - NL80211_ATTR_BEACON_HEAD = 0xe - NL80211_ATTR_BEACON_INTERVAL = 0xc - NL80211_ATTR_BEACON_TAIL = 0xf - NL80211_ATTR_BG_SCAN_PERIOD = 0x98 - NL80211_ATTR_BSS_BASIC_RATES = 0x24 - NL80211_ATTR_BSS = 0x2f - NL80211_ATTR_BSS_CTS_PROT = 0x1c - NL80211_ATTR_BSS_HT_OPMODE = 0x6d - NL80211_ATTR_BSSID = 0xf5 - NL80211_ATTR_BSS_SELECT = 0xe3 - NL80211_ATTR_BSS_SHORT_PREAMBLE = 0x1d - NL80211_ATTR_BSS_SHORT_SLOT_TIME = 0x1e - NL80211_ATTR_CENTER_FREQ1 = 0xa0 - NL80211_ATTR_CENTER_FREQ1_OFFSET = 0x123 - NL80211_ATTR_CENTER_FREQ2 = 0xa1 - NL80211_ATTR_CHANNEL_WIDTH = 0x9f - NL80211_ATTR_CH_SWITCH_BLOCK_TX = 0xb8 - NL80211_ATTR_CH_SWITCH_COUNT = 0xb7 - NL80211_ATTR_CIPHER_SUITE_GROUP = 0x4a - NL80211_ATTR_CIPHER_SUITES = 0x39 - NL80211_ATTR_CIPHER_SUITES_PAIRWISE = 0x49 - NL80211_ATTR_CNTDWN_OFFS_BEACON = 0xba - NL80211_ATTR_CNTDWN_OFFS_PRESP = 0xbb - NL80211_ATTR_COALESCE_RULE = 0xb6 - NL80211_ATTR_COALESCE_RULE_CONDITION = 0x2 - NL80211_ATTR_COALESCE_RULE_DELAY = 0x1 - NL80211_ATTR_COALESCE_RULE_MAX = 0x3 - NL80211_ATTR_COALESCE_RULE_PKT_PATTERN = 0x3 - NL80211_ATTR_CONN_FAILED_REASON = 0x9b - NL80211_ATTR_CONTROL_PORT = 0x44 - NL80211_ATTR_CONTROL_PORT_ETHERTYPE = 0x66 - NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT = 0x67 - NL80211_ATTR_CONTROL_PORT_NO_PREAUTH = 0x11e - NL80211_ATTR_CONTROL_PORT_OVER_NL80211 = 0x108 - NL80211_ATTR_COOKIE = 0x58 - NL80211_ATTR_CQM_BEACON_LOSS_EVENT = 0x8 - NL80211_ATTR_CQM = 0x5e - NL80211_ATTR_CQM_MAX = 0x9 - NL80211_ATTR_CQM_PKT_LOSS_EVENT = 0x4 - NL80211_ATTR_CQM_RSSI_HYST = 0x2 - NL80211_ATTR_CQM_RSSI_LEVEL = 0x9 - NL80211_ATTR_CQM_RSSI_THOLD = 0x1 - NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT = 0x3 - NL80211_ATTR_CQM_TXE_INTVL = 0x7 - NL80211_ATTR_CQM_TXE_PKTS = 0x6 - NL80211_ATTR_CQM_TXE_RATE = 0x5 - NL80211_ATTR_CRIT_PROT_ID = 0xb3 - NL80211_ATTR_CSA_C_OFF_BEACON = 0xba - NL80211_ATTR_CSA_C_OFF_PRESP = 0xbb - NL80211_ATTR_CSA_C_OFFSETS_TX = 0xcd - NL80211_ATTR_CSA_IES = 0xb9 - NL80211_ATTR_DEVICE_AP_SME = 0x8d - NL80211_ATTR_DFS_CAC_TIME = 0x7 - NL80211_ATTR_DFS_REGION = 0x92 - NL80211_ATTR_DISABLE_HE = 0x12d - NL80211_ATTR_DISABLE_HT = 0x93 - NL80211_ATTR_DISABLE_VHT = 0xaf - NL80211_ATTR_DISCONNECTED_BY_AP = 0x47 - NL80211_ATTR_DONT_WAIT_FOR_ACK = 0x8e - NL80211_ATTR_DTIM_PERIOD = 0xd - NL80211_ATTR_DURATION = 0x57 - NL80211_ATTR_EXT_CAPA = 0xa9 - NL80211_ATTR_EXT_CAPA_MASK = 0xaa - NL80211_ATTR_EXTERNAL_AUTH_ACTION = 0x104 - NL80211_ATTR_EXTERNAL_AUTH_SUPPORT = 0x105 - NL80211_ATTR_EXT_FEATURES = 0xd9 - NL80211_ATTR_FEATURE_FLAGS = 0x8f - NL80211_ATTR_FILS_CACHE_ID = 0xfd - NL80211_ATTR_FILS_DISCOVERY = 0x126 - NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM = 0xfb - NL80211_ATTR_FILS_ERP_REALM = 0xfa - NL80211_ATTR_FILS_ERP_RRK = 0xfc - NL80211_ATTR_FILS_ERP_USERNAME = 0xf9 - NL80211_ATTR_FILS_KEK = 0xf2 - NL80211_ATTR_FILS_NONCES = 0xf3 - NL80211_ATTR_FRAME = 0x33 - NL80211_ATTR_FRAME_MATCH = 0x5b - NL80211_ATTR_FRAME_TYPE = 0x65 - NL80211_ATTR_FREQ_AFTER = 0x3b - NL80211_ATTR_FREQ_BEFORE = 0x3a - NL80211_ATTR_FREQ_FIXED = 0x3c - NL80211_ATTR_FREQ_RANGE_END = 0x3 - NL80211_ATTR_FREQ_RANGE_MAX_BW = 0x4 - NL80211_ATTR_FREQ_RANGE_START = 0x2 - NL80211_ATTR_FTM_RESPONDER = 0x10e - NL80211_ATTR_FTM_RESPONDER_STATS = 0x10f - NL80211_ATTR_GENERATION = 0x2e - NL80211_ATTR_HANDLE_DFS = 0xbf - NL80211_ATTR_HE_6GHZ_CAPABILITY = 0x125 - NL80211_ATTR_HE_BSS_COLOR = 0x11b - NL80211_ATTR_HE_CAPABILITY = 0x10d - NL80211_ATTR_HE_OBSS_PD = 0x117 - NL80211_ATTR_HIDDEN_SSID = 0x7e - NL80211_ATTR_HT_CAPABILITY = 0x1f - NL80211_ATTR_HT_CAPABILITY_MASK = 0x94 - NL80211_ATTR_IE_ASSOC_RESP = 0x80 - NL80211_ATTR_IE = 0x2a - NL80211_ATTR_IE_PROBE_RESP = 0x7f - NL80211_ATTR_IE_RIC = 0xb2 - NL80211_ATTR_IFACE_SOCKET_OWNER = 0xcc - NL80211_ATTR_IFINDEX = 0x3 - NL80211_ATTR_IFNAME = 0x4 - NL80211_ATTR_IFTYPE_AKM_SUITES = 0x11c - NL80211_ATTR_IFTYPE = 0x5 - NL80211_ATTR_IFTYPE_EXT_CAPA = 0xe6 - NL80211_ATTR_INACTIVITY_TIMEOUT = 0x96 - NL80211_ATTR_INTERFACE_COMBINATIONS = 0x78 - NL80211_ATTR_KEY_CIPHER = 0x9 - NL80211_ATTR_KEY = 0x50 - NL80211_ATTR_KEY_DATA = 0x7 - NL80211_ATTR_KEY_DEFAULT = 0xb - NL80211_ATTR_KEY_DEFAULT_MGMT = 0x28 - NL80211_ATTR_KEY_DEFAULT_TYPES = 0x6e - NL80211_ATTR_KEY_IDX = 0x8 - NL80211_ATTR_KEYS = 0x51 - NL80211_ATTR_KEY_SEQ = 0xa - NL80211_ATTR_KEY_TYPE = 0x37 - NL80211_ATTR_LOCAL_MESH_POWER_MODE = 0xa4 - NL80211_ATTR_LOCAL_STATE_CHANGE = 0x5f - NL80211_ATTR_MAC_ACL_MAX = 0xa7 - NL80211_ATTR_MAC_ADDRS = 0xa6 - NL80211_ATTR_MAC = 0x6 - NL80211_ATTR_MAC_HINT = 0xc8 - NL80211_ATTR_MAC_MASK = 0xd7 - NL80211_ATTR_MAX_AP_ASSOC_STA = 0xca - NL80211_ATTR_MAX = 0x137 - NL80211_ATTR_MAX_CRIT_PROT_DURATION = 0xb4 - NL80211_ATTR_MAX_CSA_COUNTERS = 0xce - NL80211_ATTR_MAX_MATCH_SETS = 0x85 - NL80211_ATTR_MAX_NUM_PMKIDS = 0x56 - NL80211_ATTR_MAX_NUM_SCAN_SSIDS = 0x2b - NL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS = 0xde - NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS = 0x7b - NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION = 0x6f - NL80211_ATTR_MAX_SCAN_IE_LEN = 0x38 - NL80211_ATTR_MAX_SCAN_PLAN_INTERVAL = 0xdf - NL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS = 0xe0 - NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN = 0x7c - NL80211_ATTR_MCAST_RATE = 0x6b - NL80211_ATTR_MDID = 0xb1 - NL80211_ATTR_MEASUREMENT_DURATION = 0xeb - NL80211_ATTR_MEASUREMENT_DURATION_MANDATORY = 0xec - NL80211_ATTR_MESH_CONFIG = 0x23 - NL80211_ATTR_MESH_ID = 0x18 - NL80211_ATTR_MESH_PEER_AID = 0xed - NL80211_ATTR_MESH_SETUP = 0x70 - NL80211_ATTR_MGMT_SUBTYPE = 0x29 - NL80211_ATTR_MNTR_FLAGS = 0x17 - NL80211_ATTR_MPATH_INFO = 0x1b - NL80211_ATTR_MPATH_NEXT_HOP = 0x1a - NL80211_ATTR_MULTICAST_TO_UNICAST_ENABLED = 0xf4 - NL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR = 0xe8 - NL80211_ATTR_MU_MIMO_GROUP_DATA = 0xe7 - NL80211_ATTR_NAN_FUNC = 0xf0 - NL80211_ATTR_NAN_MASTER_PREF = 0xee - NL80211_ATTR_NAN_MATCH = 0xf1 - NL80211_ATTR_NETNS_FD = 0xdb - NL80211_ATTR_NOACK_MAP = 0x95 - NL80211_ATTR_NSS = 0x106 - NL80211_ATTR_OFFCHANNEL_TX_OK = 0x6c - NL80211_ATTR_OPER_CLASS = 0xd6 - NL80211_ATTR_OPMODE_NOTIF = 0xc2 - NL80211_ATTR_P2P_CTWINDOW = 0xa2 - NL80211_ATTR_P2P_OPPPS = 0xa3 - NL80211_ATTR_PAD = 0xe5 - NL80211_ATTR_PBSS = 0xe2 - NL80211_ATTR_PEER_AID = 0xb5 - NL80211_ATTR_PEER_MEASUREMENTS = 0x111 - NL80211_ATTR_PID = 0x52 - NL80211_ATTR_PMK = 0xfe - NL80211_ATTR_PMKID = 0x55 - NL80211_ATTR_PMK_LIFETIME = 0x11f - NL80211_ATTR_PMKR0_NAME = 0x102 - NL80211_ATTR_PMK_REAUTH_THRESHOLD = 0x120 - NL80211_ATTR_PMKSA_CANDIDATE = 0x86 - NL80211_ATTR_PORT_AUTHORIZED = 0x103 - NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN = 0x5 - NL80211_ATTR_POWER_RULE_MAX_EIRP = 0x6 - 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_QOS_MAP = 0xc7 - NL80211_ATTR_RADAR_EVENT = 0xa8 - NL80211_ATTR_REASON_CODE = 0x36 - NL80211_ATTR_RECEIVE_MULTICAST = 0x121 - NL80211_ATTR_RECONNECT_REQUESTED = 0x12b - NL80211_ATTR_REG_ALPHA2 = 0x21 - NL80211_ATTR_REG_INDOOR = 0xdd - NL80211_ATTR_REG_INITIATOR = 0x30 - NL80211_ATTR_REG_RULE_FLAGS = 0x1 - NL80211_ATTR_REG_RULES = 0x22 - NL80211_ATTR_REG_TYPE = 0x31 - NL80211_ATTR_REKEY_DATA = 0x7a - NL80211_ATTR_REQ_IE = 0x4d - NL80211_ATTR_RESP_IE = 0x4e - NL80211_ATTR_ROAM_SUPPORT = 0x83 - NL80211_ATTR_RX_FRAME_TYPES = 0x64 - NL80211_ATTR_RXMGMT_FLAGS = 0xbc - NL80211_ATTR_RX_SIGNAL_DBM = 0x97 - NL80211_ATTR_S1G_CAPABILITY = 0x128 - NL80211_ATTR_S1G_CAPABILITY_MASK = 0x129 - NL80211_ATTR_SAE_DATA = 0x9c - NL80211_ATTR_SAE_PASSWORD = 0x115 - NL80211_ATTR_SAE_PWE = 0x12a - NL80211_ATTR_SAR_SPEC = 0x12c - NL80211_ATTR_SCAN_FLAGS = 0x9e - NL80211_ATTR_SCAN_FREQ_KHZ = 0x124 - NL80211_ATTR_SCAN_FREQUENCIES = 0x2c - NL80211_ATTR_SCAN_GENERATION = 0x2e - NL80211_ATTR_SCAN_SSIDS = 0x2d - NL80211_ATTR_SCAN_START_TIME_TSF_BSSID = 0xea - NL80211_ATTR_SCAN_START_TIME_TSF = 0xe9 - NL80211_ATTR_SCAN_SUPP_RATES = 0x7d - NL80211_ATTR_SCHED_SCAN_DELAY = 0xdc - NL80211_ATTR_SCHED_SCAN_INTERVAL = 0x77 - NL80211_ATTR_SCHED_SCAN_MATCH = 0x84 - NL80211_ATTR_SCHED_SCAN_MATCH_SSID = 0x1 - NL80211_ATTR_SCHED_SCAN_MAX_REQS = 0x100 - NL80211_ATTR_SCHED_SCAN_MULTI = 0xff - NL80211_ATTR_SCHED_SCAN_PLANS = 0xe1 - NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI = 0xf6 - NL80211_ATTR_SCHED_SCAN_RSSI_ADJUST = 0xf7 - NL80211_ATTR_SMPS_MODE = 0xd5 - NL80211_ATTR_SOCKET_OWNER = 0xcc - NL80211_ATTR_SOFTWARE_IFTYPES = 0x79 - NL80211_ATTR_SPLIT_WIPHY_DUMP = 0xae - NL80211_ATTR_SSID = 0x34 - NL80211_ATTR_STA_AID = 0x10 - NL80211_ATTR_STA_CAPABILITY = 0xab - NL80211_ATTR_STA_EXT_CAPABILITY = 0xac - NL80211_ATTR_STA_FLAGS2 = 0x43 - NL80211_ATTR_STA_FLAGS = 0x11 - NL80211_ATTR_STA_INFO = 0x15 - NL80211_ATTR_STA_LISTEN_INTERVAL = 0x12 - NL80211_ATTR_STA_PLINK_ACTION = 0x19 - NL80211_ATTR_STA_PLINK_STATE = 0x74 - NL80211_ATTR_STA_SUPPORTED_CHANNELS = 0xbd - NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES = 0xbe - NL80211_ATTR_STA_SUPPORTED_RATES = 0x13 - NL80211_ATTR_STA_SUPPORT_P2P_PS = 0xe4 - NL80211_ATTR_STATUS_CODE = 0x48 - NL80211_ATTR_STA_TX_POWER = 0x114 - NL80211_ATTR_STA_TX_POWER_SETTING = 0x113 - NL80211_ATTR_STA_VLAN = 0x14 - NL80211_ATTR_STA_WME = 0x81 - NL80211_ATTR_SUPPORT_10_MHZ = 0xc1 - NL80211_ATTR_SUPPORT_5_MHZ = 0xc0 - NL80211_ATTR_SUPPORT_AP_UAPSD = 0x82 - NL80211_ATTR_SUPPORTED_COMMANDS = 0x32 - NL80211_ATTR_SUPPORTED_IFTYPES = 0x20 - NL80211_ATTR_SUPPORT_IBSS_RSN = 0x68 - NL80211_ATTR_SUPPORT_MESH_AUTH = 0x73 - NL80211_ATTR_SURVEY_INFO = 0x54 - NL80211_ATTR_SURVEY_RADIO_STATS = 0xda - NL80211_ATTR_TDLS_ACTION = 0x88 - NL80211_ATTR_TDLS_DIALOG_TOKEN = 0x89 - NL80211_ATTR_TDLS_EXTERNAL_SETUP = 0x8c - NL80211_ATTR_TDLS_INITIATOR = 0xcf - NL80211_ATTR_TDLS_OPERATION = 0x8a - NL80211_ATTR_TDLS_PEER_CAPABILITY = 0xcb - NL80211_ATTR_TDLS_SUPPORT = 0x8b - NL80211_ATTR_TESTDATA = 0x45 - NL80211_ATTR_TID_CONFIG = 0x11d - NL80211_ATTR_TIMED_OUT = 0x41 - NL80211_ATTR_TIMEOUT = 0x110 - NL80211_ATTR_TIMEOUT_REASON = 0xf8 - NL80211_ATTR_TSID = 0xd2 - NL80211_ATTR_TWT_RESPONDER = 0x116 - NL80211_ATTR_TX_FRAME_TYPES = 0x63 - NL80211_ATTR_TX_NO_CCK_RATE = 0x87 - NL80211_ATTR_TXQ_LIMIT = 0x10a - NL80211_ATTR_TXQ_MEMORY_LIMIT = 0x10b - NL80211_ATTR_TXQ_QUANTUM = 0x10c - NL80211_ATTR_TXQ_STATS = 0x109 - NL80211_ATTR_TX_RATES = 0x5a - NL80211_ATTR_UNSOL_BCAST_PROBE_RESP = 0x127 - NL80211_ATTR_UNSPEC = 0x0 - NL80211_ATTR_USE_MFP = 0x42 - NL80211_ATTR_USER_PRIO = 0xd3 - NL80211_ATTR_USER_REG_HINT_TYPE = 0x9a - NL80211_ATTR_USE_RRM = 0xd0 - NL80211_ATTR_VENDOR_DATA = 0xc5 - NL80211_ATTR_VENDOR_EVENTS = 0xc6 - NL80211_ATTR_VENDOR_ID = 0xc3 - NL80211_ATTR_VENDOR_SUBCMD = 0xc4 - NL80211_ATTR_VHT_CAPABILITY = 0x9d - NL80211_ATTR_VHT_CAPABILITY_MASK = 0xb0 - NL80211_ATTR_VLAN_ID = 0x11a - NL80211_ATTR_WANT_1X_4WAY_HS = 0x101 - NL80211_ATTR_WDEV = 0x99 - NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX = 0x72 - NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX = 0x71 - NL80211_ATTR_WIPHY_ANTENNA_RX = 0x6a - NL80211_ATTR_WIPHY_ANTENNA_TX = 0x69 - NL80211_ATTR_WIPHY_BANDS = 0x16 - NL80211_ATTR_WIPHY_CHANNEL_TYPE = 0x27 - NL80211_ATTR_WIPHY = 0x1 - NL80211_ATTR_WIPHY_COVERAGE_CLASS = 0x59 - NL80211_ATTR_WIPHY_DYN_ACK = 0xd1 - NL80211_ATTR_WIPHY_EDMG_BW_CONFIG = 0x119 - NL80211_ATTR_WIPHY_EDMG_CHANNELS = 0x118 - NL80211_ATTR_WIPHY_FRAG_THRESHOLD = 0x3f - NL80211_ATTR_WIPHY_FREQ = 0x26 - NL80211_ATTR_WIPHY_FREQ_HINT = 0xc9 - NL80211_ATTR_WIPHY_FREQ_OFFSET = 0x122 - NL80211_ATTR_WIPHY_NAME = 0x2 - NL80211_ATTR_WIPHY_RETRY_LONG = 0x3e - NL80211_ATTR_WIPHY_RETRY_SHORT = 0x3d - NL80211_ATTR_WIPHY_RTS_THRESHOLD = 0x40 - NL80211_ATTR_WIPHY_SELF_MANAGED_REG = 0xd8 - NL80211_ATTR_WIPHY_TX_POWER_LEVEL = 0x62 - NL80211_ATTR_WIPHY_TX_POWER_SETTING = 0x61 - NL80211_ATTR_WIPHY_TXQ_PARAMS = 0x25 - NL80211_ATTR_WOWLAN_TRIGGERS = 0x75 - NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED = 0x76 - NL80211_ATTR_WPA_VERSIONS = 0x4b - NL80211_AUTHTYPE_AUTOMATIC = 0x8 - NL80211_AUTHTYPE_FILS_PK = 0x7 - NL80211_AUTHTYPE_FILS_SK = 0x5 - NL80211_AUTHTYPE_FILS_SK_PFS = 0x6 - NL80211_AUTHTYPE_FT = 0x2 - NL80211_AUTHTYPE_MAX = 0x7 - NL80211_AUTHTYPE_NETWORK_EAP = 0x3 - NL80211_AUTHTYPE_OPEN_SYSTEM = 0x0 - NL80211_AUTHTYPE_SAE = 0x4 - NL80211_AUTHTYPE_SHARED_KEY = 0x1 - NL80211_BAND_2GHZ = 0x0 - NL80211_BAND_5GHZ = 0x1 - NL80211_BAND_60GHZ = 0x2 - NL80211_BAND_6GHZ = 0x3 - NL80211_BAND_ATTR_EDMG_BW_CONFIG = 0xb - NL80211_BAND_ATTR_EDMG_CHANNELS = 0xa - NL80211_BAND_ATTR_FREQS = 0x1 - NL80211_BAND_ATTR_HT_AMPDU_DENSITY = 0x6 - NL80211_BAND_ATTR_HT_AMPDU_FACTOR = 0x5 - NL80211_BAND_ATTR_HT_CAPA = 0x4 - NL80211_BAND_ATTR_HT_MCS_SET = 0x3 - NL80211_BAND_ATTR_IFTYPE_DATA = 0x9 - NL80211_BAND_ATTR_MAX = 0xb - NL80211_BAND_ATTR_RATES = 0x2 - NL80211_BAND_ATTR_VHT_CAPA = 0x8 - NL80211_BAND_ATTR_VHT_MCS_SET = 0x7 - NL80211_BAND_IFTYPE_ATTR_HE_6GHZ_CAPA = 0x6 - NL80211_BAND_IFTYPE_ATTR_HE_CAP_MAC = 0x2 - NL80211_BAND_IFTYPE_ATTR_HE_CAP_MCS_SET = 0x4 - NL80211_BAND_IFTYPE_ATTR_HE_CAP_PHY = 0x3 - NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE = 0x5 - NL80211_BAND_IFTYPE_ATTR_IFTYPES = 0x1 - NL80211_BAND_IFTYPE_ATTR_MAX = 0xb - NL80211_BAND_S1GHZ = 0x4 - NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE = 0x2 - NL80211_BITRATE_ATTR_MAX = 0x2 - NL80211_BITRATE_ATTR_RATE = 0x1 - NL80211_BSS_BEACON_IES = 0xb - NL80211_BSS_BEACON_INTERVAL = 0x4 - NL80211_BSS_BEACON_TSF = 0xd - NL80211_BSS_BSSID = 0x1 - NL80211_BSS_CAPABILITY = 0x5 - NL80211_BSS_CHAIN_SIGNAL = 0x13 - NL80211_BSS_CHAN_WIDTH_10 = 0x1 - NL80211_BSS_CHAN_WIDTH_1 = 0x3 - NL80211_BSS_CHAN_WIDTH_20 = 0x0 - NL80211_BSS_CHAN_WIDTH_2 = 0x4 - NL80211_BSS_CHAN_WIDTH_5 = 0x2 - NL80211_BSS_CHAN_WIDTH = 0xc - NL80211_BSS_FREQUENCY = 0x2 - NL80211_BSS_FREQUENCY_OFFSET = 0x14 - NL80211_BSS_INFORMATION_ELEMENTS = 0x6 - NL80211_BSS_LAST_SEEN_BOOTTIME = 0xf - NL80211_BSS_MAX = 0x14 - NL80211_BSS_PAD = 0x10 - NL80211_BSS_PARENT_BSSID = 0x12 - NL80211_BSS_PARENT_TSF = 0x11 - NL80211_BSS_PRESP_DATA = 0xe - NL80211_BSS_SEEN_MS_AGO = 0xa - NL80211_BSS_SELECT_ATTR_BAND_PREF = 0x2 - NL80211_BSS_SELECT_ATTR_MAX = 0x3 - NL80211_BSS_SELECT_ATTR_RSSI_ADJUST = 0x3 - NL80211_BSS_SELECT_ATTR_RSSI = 0x1 - NL80211_BSS_SIGNAL_MBM = 0x7 - NL80211_BSS_SIGNAL_UNSPEC = 0x8 - NL80211_BSS_STATUS_ASSOCIATED = 0x1 - NL80211_BSS_STATUS_AUTHENTICATED = 0x0 - NL80211_BSS_STATUS = 0x9 - NL80211_BSS_STATUS_IBSS_JOINED = 0x2 - NL80211_BSS_TSF = 0x3 - NL80211_CHAN_HT20 = 0x1 - NL80211_CHAN_HT40MINUS = 0x2 - NL80211_CHAN_HT40PLUS = 0x3 - NL80211_CHAN_NO_HT = 0x0 - NL80211_CHAN_WIDTH_10 = 0x7 - NL80211_CHAN_WIDTH_160 = 0x5 - NL80211_CHAN_WIDTH_16 = 0xc - NL80211_CHAN_WIDTH_1 = 0x8 - NL80211_CHAN_WIDTH_20 = 0x1 - NL80211_CHAN_WIDTH_20_NOHT = 0x0 - NL80211_CHAN_WIDTH_2 = 0x9 - NL80211_CHAN_WIDTH_40 = 0x2 - NL80211_CHAN_WIDTH_4 = 0xa - NL80211_CHAN_WIDTH_5 = 0x6 - NL80211_CHAN_WIDTH_80 = 0x3 - NL80211_CHAN_WIDTH_80P80 = 0x4 - NL80211_CHAN_WIDTH_8 = 0xb - NL80211_CMD_ABORT_SCAN = 0x72 - NL80211_CMD_ACTION = 0x3b - NL80211_CMD_ACTION_TX_STATUS = 0x3c - NL80211_CMD_ADD_NAN_FUNCTION = 0x75 - NL80211_CMD_ADD_TX_TS = 0x69 - NL80211_CMD_ASSOCIATE = 0x26 - NL80211_CMD_AUTHENTICATE = 0x25 - NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL = 0x38 - NL80211_CMD_CHANGE_NAN_CONFIG = 0x77 - NL80211_CMD_CHANNEL_SWITCH = 0x66 - NL80211_CMD_CH_SWITCH_NOTIFY = 0x58 - NL80211_CMD_CH_SWITCH_STARTED_NOTIFY = 0x6e - NL80211_CMD_CONNECT = 0x2e - NL80211_CMD_CONN_FAILED = 0x5b - NL80211_CMD_CONTROL_PORT_FRAME = 0x81 - NL80211_CMD_CONTROL_PORT_FRAME_TX_STATUS = 0x8b - NL80211_CMD_CRIT_PROTOCOL_START = 0x62 - NL80211_CMD_CRIT_PROTOCOL_STOP = 0x63 - NL80211_CMD_DEAUTHENTICATE = 0x27 - NL80211_CMD_DEL_BEACON = 0x10 - NL80211_CMD_DEL_INTERFACE = 0x8 - NL80211_CMD_DEL_KEY = 0xc - NL80211_CMD_DEL_MPATH = 0x18 - NL80211_CMD_DEL_NAN_FUNCTION = 0x76 - NL80211_CMD_DEL_PMK = 0x7c - NL80211_CMD_DEL_PMKSA = 0x35 - NL80211_CMD_DEL_STATION = 0x14 - NL80211_CMD_DEL_TX_TS = 0x6a - NL80211_CMD_DEL_WIPHY = 0x4 - NL80211_CMD_DISASSOCIATE = 0x28 - NL80211_CMD_DISCONNECT = 0x30 - NL80211_CMD_EXTERNAL_AUTH = 0x7f - NL80211_CMD_FLUSH_PMKSA = 0x36 - NL80211_CMD_FRAME = 0x3b - NL80211_CMD_FRAME_TX_STATUS = 0x3c - NL80211_CMD_FRAME_WAIT_CANCEL = 0x43 - NL80211_CMD_FT_EVENT = 0x61 - NL80211_CMD_GET_BEACON = 0xd - NL80211_CMD_GET_COALESCE = 0x64 - NL80211_CMD_GET_FTM_RESPONDER_STATS = 0x82 - NL80211_CMD_GET_INTERFACE = 0x5 - NL80211_CMD_GET_KEY = 0x9 - NL80211_CMD_GET_MESH_CONFIG = 0x1c - NL80211_CMD_GET_MESH_PARAMS = 0x1c - NL80211_CMD_GET_MPATH = 0x15 - NL80211_CMD_GET_MPP = 0x6b - NL80211_CMD_GET_POWER_SAVE = 0x3e - NL80211_CMD_GET_PROTOCOL_FEATURES = 0x5f - NL80211_CMD_GET_REG = 0x1f - NL80211_CMD_GET_SCAN = 0x20 - NL80211_CMD_GET_STATION = 0x11 - NL80211_CMD_GET_SURVEY = 0x32 - NL80211_CMD_GET_WIPHY = 0x1 - NL80211_CMD_GET_WOWLAN = 0x49 - NL80211_CMD_JOIN_IBSS = 0x2b - NL80211_CMD_JOIN_MESH = 0x44 - NL80211_CMD_JOIN_OCB = 0x6c - NL80211_CMD_LEAVE_IBSS = 0x2c - NL80211_CMD_LEAVE_MESH = 0x45 - NL80211_CMD_LEAVE_OCB = 0x6d - NL80211_CMD_MAX = 0x93 - NL80211_CMD_MICHAEL_MIC_FAILURE = 0x29 - NL80211_CMD_NAN_MATCH = 0x78 - NL80211_CMD_NEW_BEACON = 0xf - NL80211_CMD_NEW_INTERFACE = 0x7 - NL80211_CMD_NEW_KEY = 0xb - NL80211_CMD_NEW_MPATH = 0x17 - NL80211_CMD_NEW_PEER_CANDIDATE = 0x48 - NL80211_CMD_NEW_SCAN_RESULTS = 0x22 - NL80211_CMD_NEW_STATION = 0x13 - NL80211_CMD_NEW_SURVEY_RESULTS = 0x33 - NL80211_CMD_NEW_WIPHY = 0x3 - NL80211_CMD_NOTIFY_CQM = 0x40 - NL80211_CMD_NOTIFY_RADAR = 0x86 - NL80211_CMD_PEER_MEASUREMENT_COMPLETE = 0x85 - NL80211_CMD_PEER_MEASUREMENT_RESULT = 0x84 - NL80211_CMD_PEER_MEASUREMENT_START = 0x83 - NL80211_CMD_PMKSA_CANDIDATE = 0x50 - NL80211_CMD_PORT_AUTHORIZED = 0x7d - NL80211_CMD_PROBE_CLIENT = 0x54 - NL80211_CMD_PROBE_MESH_LINK = 0x88 - NL80211_CMD_RADAR_DETECT = 0x5e - NL80211_CMD_REG_BEACON_HINT = 0x2a - NL80211_CMD_REG_CHANGE = 0x24 - NL80211_CMD_REGISTER_ACTION = 0x3a - NL80211_CMD_REGISTER_BEACONS = 0x55 - NL80211_CMD_REGISTER_FRAME = 0x3a - NL80211_CMD_RELOAD_REGDB = 0x7e - NL80211_CMD_REMAIN_ON_CHANNEL = 0x37 - NL80211_CMD_REQ_SET_REG = 0x1b - NL80211_CMD_ROAM = 0x2f - NL80211_CMD_SCAN_ABORTED = 0x23 - NL80211_CMD_SCHED_SCAN_RESULTS = 0x4d - NL80211_CMD_SCHED_SCAN_STOPPED = 0x4e - NL80211_CMD_SET_BEACON = 0xe - NL80211_CMD_SET_BSS = 0x19 - NL80211_CMD_SET_CHANNEL = 0x41 - NL80211_CMD_SET_COALESCE = 0x65 - NL80211_CMD_SET_CQM = 0x3f - NL80211_CMD_SET_INTERFACE = 0x6 - NL80211_CMD_SET_KEY = 0xa - NL80211_CMD_SET_MAC_ACL = 0x5d - NL80211_CMD_SET_MCAST_RATE = 0x5c - NL80211_CMD_SET_MESH_CONFIG = 0x1d - NL80211_CMD_SET_MESH_PARAMS = 0x1d - NL80211_CMD_SET_MGMT_EXTRA_IE = 0x1e - NL80211_CMD_SET_MPATH = 0x16 - NL80211_CMD_SET_MULTICAST_TO_UNICAST = 0x79 - NL80211_CMD_SET_NOACK_MAP = 0x57 - NL80211_CMD_SET_PMK = 0x7b - NL80211_CMD_SET_PMKSA = 0x34 - NL80211_CMD_SET_POWER_SAVE = 0x3d - NL80211_CMD_SET_QOS_MAP = 0x68 - NL80211_CMD_SET_REG = 0x1a - NL80211_CMD_SET_REKEY_OFFLOAD = 0x4f - NL80211_CMD_SET_SAR_SPECS = 0x8c - NL80211_CMD_SET_STATION = 0x12 - NL80211_CMD_SET_TID_CONFIG = 0x89 - NL80211_CMD_SET_TX_BITRATE_MASK = 0x39 - NL80211_CMD_SET_WDS_PEER = 0x42 - NL80211_CMD_SET_WIPHY = 0x2 - NL80211_CMD_SET_WIPHY_NETNS = 0x31 - NL80211_CMD_SET_WOWLAN = 0x4a - NL80211_CMD_STA_OPMODE_CHANGED = 0x80 - NL80211_CMD_START_AP = 0xf - NL80211_CMD_START_NAN = 0x73 - NL80211_CMD_START_P2P_DEVICE = 0x59 - NL80211_CMD_START_SCHED_SCAN = 0x4b - NL80211_CMD_STOP_AP = 0x10 - NL80211_CMD_STOP_NAN = 0x74 - NL80211_CMD_STOP_P2P_DEVICE = 0x5a - NL80211_CMD_STOP_SCHED_SCAN = 0x4c - NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH = 0x70 - NL80211_CMD_TDLS_CHANNEL_SWITCH = 0x6f - NL80211_CMD_TDLS_MGMT = 0x52 - NL80211_CMD_TDLS_OPER = 0x51 - NL80211_CMD_TESTMODE = 0x2d - NL80211_CMD_TRIGGER_SCAN = 0x21 - NL80211_CMD_UNEXPECTED_4ADDR_FRAME = 0x56 - NL80211_CMD_UNEXPECTED_FRAME = 0x53 - NL80211_CMD_UNPROT_BEACON = 0x8a - NL80211_CMD_UNPROT_DEAUTHENTICATE = 0x46 - NL80211_CMD_UNPROT_DISASSOCIATE = 0x47 - NL80211_CMD_UNSPEC = 0x0 - NL80211_CMD_UPDATE_CONNECT_PARAMS = 0x7a - NL80211_CMD_UPDATE_FT_IES = 0x60 - NL80211_CMD_UPDATE_OWE_INFO = 0x87 - NL80211_CMD_VENDOR = 0x67 - NL80211_CMD_WIPHY_REG_CHANGE = 0x71 - NL80211_COALESCE_CONDITION_MATCH = 0x0 - NL80211_COALESCE_CONDITION_NO_MATCH = 0x1 - NL80211_CONN_FAIL_BLOCKED_CLIENT = 0x1 - NL80211_CONN_FAIL_MAX_CLIENTS = 0x0 - NL80211_CQM_RSSI_BEACON_LOSS_EVENT = 0x2 - NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH = 0x1 - NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW = 0x0 - NL80211_CQM_TXE_MAX_INTVL = 0x708 - NL80211_CRIT_PROTO_APIPA = 0x3 - NL80211_CRIT_PROTO_DHCP = 0x1 - NL80211_CRIT_PROTO_EAPOL = 0x2 - NL80211_CRIT_PROTO_MAX_DURATION = 0x1388 - NL80211_CRIT_PROTO_UNSPEC = 0x0 - NL80211_DFS_AVAILABLE = 0x2 - NL80211_DFS_ETSI = 0x2 - NL80211_DFS_FCC = 0x1 - NL80211_DFS_JP = 0x3 - NL80211_DFS_UNAVAILABLE = 0x1 - NL80211_DFS_UNSET = 0x0 - NL80211_DFS_USABLE = 0x0 - NL80211_EDMG_BW_CONFIG_MAX = 0xf - NL80211_EDMG_BW_CONFIG_MIN = 0x4 - NL80211_EDMG_CHANNELS_MAX = 0x3c - NL80211_EDMG_CHANNELS_MIN = 0x1 - NL80211_EXTERNAL_AUTH_ABORT = 0x1 - NL80211_EXTERNAL_AUTH_START = 0x0 - NL80211_EXT_FEATURE_4WAY_HANDSHAKE_AP_PSK = 0x32 - NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X = 0x10 - NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_PSK = 0xf - NL80211_EXT_FEATURE_ACCEPT_BCAST_PROBE_RESP = 0x12 - NL80211_EXT_FEATURE_ACK_SIGNAL_SUPPORT = 0x1b - NL80211_EXT_FEATURE_AIRTIME_FAIRNESS = 0x21 - NL80211_EXT_FEATURE_AP_PMKSA_CACHING = 0x22 - NL80211_EXT_FEATURE_AQL = 0x28 - NL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT = 0x2e - NL80211_EXT_FEATURE_BEACON_PROTECTION = 0x29 - NL80211_EXT_FEATURE_BEACON_RATE_HE = 0x36 - NL80211_EXT_FEATURE_BEACON_RATE_HT = 0x7 - NL80211_EXT_FEATURE_BEACON_RATE_LEGACY = 0x6 - NL80211_EXT_FEATURE_BEACON_RATE_VHT = 0x8 - NL80211_EXT_FEATURE_BSS_PARENT_TSF = 0x4 - NL80211_EXT_FEATURE_CAN_REPLACE_PTK0 = 0x1f - NL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH = 0x2a - NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211 = 0x1a - NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211_TX_STATUS = 0x30 - 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_OFFLOAD = 0x19 - NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER = 0x20 - NL80211_EXT_FEATURE_EXT_KEY_ID = 0x24 - NL80211_EXT_FEATURE_FILS_DISCOVERY = 0x34 - NL80211_EXT_FEATURE_FILS_MAX_CHANNEL_TIME = 0x11 - NL80211_EXT_FEATURE_FILS_SK_OFFLOAD = 0xe - NL80211_EXT_FEATURE_FILS_STA = 0x9 - NL80211_EXT_FEATURE_HIGH_ACCURACY_SCAN = 0x18 - NL80211_EXT_FEATURE_LOW_POWER_SCAN = 0x17 - NL80211_EXT_FEATURE_LOW_SPAN_SCAN = 0x16 - NL80211_EXT_FEATURE_MFP_OPTIONAL = 0x15 - NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA = 0xa - NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA_CONNECTED = 0xb - NL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS = 0x2d - NL80211_EXT_FEATURE_MU_MIMO_AIR_SNIFFER = 0x2 - 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_PROTECTED_TWT = 0x2b - NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE = 0x39 - NL80211_EXT_FEATURE_RRM = 0x1 - NL80211_EXT_FEATURE_SAE_OFFLOAD_AP = 0x33 - NL80211_EXT_FEATURE_SAE_OFFLOAD = 0x26 - NL80211_EXT_FEATURE_SCAN_FREQ_KHZ = 0x2f - NL80211_EXT_FEATURE_SCAN_MIN_PREQ_CONTENT = 0x1e - NL80211_EXT_FEATURE_SCAN_RANDOM_SN = 0x1d - NL80211_EXT_FEATURE_SCAN_START_TIME = 0x3 - 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_RTT = 0x38 - NL80211_EXT_FEATURE_SET_SCAN_DWELL = 0x5 - NL80211_EXT_FEATURE_STA_TX_PWR = 0x25 - NL80211_EXT_FEATURE_TXQS = 0x1c - NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP = 0x35 - NL80211_EXT_FEATURE_VHT_IBSS = 0x0 - NL80211_EXT_FEATURE_VLAN_OFFLOAD = 0x27 - NL80211_FEATURE_ACKTO_ESTIMATION = 0x800000 - NL80211_FEATURE_ACTIVE_MONITOR = 0x20000 - NL80211_FEATURE_ADVERTISE_CHAN_LIMITS = 0x4000 - NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE = 0x40000 - NL80211_FEATURE_AP_SCAN = 0x100 - NL80211_FEATURE_CELL_BASE_REG_HINTS = 0x8 - NL80211_FEATURE_DS_PARAM_SET_IE_IN_PROBES = 0x80000 - NL80211_FEATURE_DYNAMIC_SMPS = 0x2000000 - NL80211_FEATURE_FULL_AP_CLIENT_STATE = 0x8000 - NL80211_FEATURE_HT_IBSS = 0x2 - NL80211_FEATURE_INACTIVITY_TIMER = 0x4 - NL80211_FEATURE_LOW_PRIORITY_SCAN = 0x40 - NL80211_FEATURE_MAC_ON_CREATE = 0x8000000 - NL80211_FEATURE_ND_RANDOM_MAC_ADDR = 0x80000000 - NL80211_FEATURE_NEED_OBSS_SCAN = 0x400 - NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL = 0x10 - NL80211_FEATURE_P2P_GO_CTWIN = 0x800 - NL80211_FEATURE_P2P_GO_OPPPS = 0x1000 - NL80211_FEATURE_QUIET = 0x200000 - NL80211_FEATURE_SAE = 0x20 - NL80211_FEATURE_SCAN_FLUSH = 0x80 - NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR = 0x20000000 - NL80211_FEATURE_SCHED_SCAN_RANDOM_MAC_ADDR = 0x40000000 - NL80211_FEATURE_SK_TX_STATUS = 0x1 - NL80211_FEATURE_STATIC_SMPS = 0x1000000 - NL80211_FEATURE_SUPPORTS_WMM_ADMISSION = 0x4000000 - NL80211_FEATURE_TDLS_CHANNEL_SWITCH = 0x10000000 - NL80211_FEATURE_TX_POWER_INSERTION = 0x400000 - NL80211_FEATURE_USERSPACE_MPM = 0x10000 - NL80211_FEATURE_VIF_TXPOWER = 0x200 - NL80211_FEATURE_WFA_TPC_IE_IN_PROBES = 0x100000 - NL80211_FILS_DISCOVERY_ATTR_INT_MAX = 0x2 - NL80211_FILS_DISCOVERY_ATTR_INT_MIN = 0x1 - NL80211_FILS_DISCOVERY_ATTR_MAX = 0x3 - NL80211_FILS_DISCOVERY_ATTR_TMPL = 0x3 - NL80211_FILS_DISCOVERY_TMPL_MIN_LEN = 0x2a - NL80211_FREQUENCY_ATTR_16MHZ = 0x19 - NL80211_FREQUENCY_ATTR_1MHZ = 0x15 - NL80211_FREQUENCY_ATTR_2MHZ = 0x16 - NL80211_FREQUENCY_ATTR_4MHZ = 0x17 - NL80211_FREQUENCY_ATTR_8MHZ = 0x18 - NL80211_FREQUENCY_ATTR_DFS_CAC_TIME = 0xd - NL80211_FREQUENCY_ATTR_DFS_STATE = 0x7 - NL80211_FREQUENCY_ATTR_DFS_TIME = 0x8 - NL80211_FREQUENCY_ATTR_DISABLED = 0x2 - NL80211_FREQUENCY_ATTR_FREQ = 0x1 - NL80211_FREQUENCY_ATTR_GO_CONCURRENT = 0xf - NL80211_FREQUENCY_ATTR_INDOOR_ONLY = 0xe - NL80211_FREQUENCY_ATTR_IR_CONCURRENT = 0xf - NL80211_FREQUENCY_ATTR_MAX = 0x1b - 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_80MHZ = 0xb - NL80211_FREQUENCY_ATTR_NO_HE = 0x13 - NL80211_FREQUENCY_ATTR_NO_HT40_MINUS = 0x9 - NL80211_FREQUENCY_ATTR_NO_HT40_PLUS = 0xa - NL80211_FREQUENCY_ATTR_NO_IBSS = 0x3 - NL80211_FREQUENCY_ATTR_NO_IR = 0x3 - NL80211_FREQUENCY_ATTR_OFFSET = 0x14 - NL80211_FREQUENCY_ATTR_PASSIVE_SCAN = 0x3 - NL80211_FREQUENCY_ATTR_RADAR = 0x5 - NL80211_FREQUENCY_ATTR_WMM = 0x12 - NL80211_FTM_RESP_ATTR_CIVICLOC = 0x3 - NL80211_FTM_RESP_ATTR_ENABLED = 0x1 - NL80211_FTM_RESP_ATTR_LCI = 0x2 - NL80211_FTM_RESP_ATTR_MAX = 0x3 - NL80211_FTM_STATS_ASAP_NUM = 0x4 - NL80211_FTM_STATS_FAILED_NUM = 0x3 - NL80211_FTM_STATS_MAX = 0xa - NL80211_FTM_STATS_NON_ASAP_NUM = 0x5 - NL80211_FTM_STATS_OUT_OF_WINDOW_TRIGGERS_NUM = 0x9 - NL80211_FTM_STATS_PAD = 0xa - NL80211_FTM_STATS_PARTIAL_NUM = 0x2 - NL80211_FTM_STATS_RESCHEDULE_REQUESTS_NUM = 0x8 - NL80211_FTM_STATS_SUCCESS_NUM = 0x1 - NL80211_FTM_STATS_TOTAL_DURATION_MSEC = 0x6 - NL80211_FTM_STATS_UNKNOWN_TRIGGERS_NUM = 0x7 - NL80211_GENL_NAME = "nl80211" - NL80211_HE_BSS_COLOR_ATTR_COLOR = 0x1 - NL80211_HE_BSS_COLOR_ATTR_DISABLED = 0x2 - NL80211_HE_BSS_COLOR_ATTR_MAX = 0x3 - NL80211_HE_BSS_COLOR_ATTR_PARTIAL = 0x3 - NL80211_HE_MAX_CAPABILITY_LEN = 0x36 - NL80211_HE_MIN_CAPABILITY_LEN = 0x10 - NL80211_HE_NSS_MAX = 0x8 - NL80211_HE_OBSS_PD_ATTR_BSS_COLOR_BITMAP = 0x4 - NL80211_HE_OBSS_PD_ATTR_MAX = 0x6 - NL80211_HE_OBSS_PD_ATTR_MAX_OFFSET = 0x2 - NL80211_HE_OBSS_PD_ATTR_MIN_OFFSET = 0x1 - NL80211_HE_OBSS_PD_ATTR_NON_SRG_MAX_OFFSET = 0x3 - NL80211_HE_OBSS_PD_ATTR_PARTIAL_BSSID_BITMAP = 0x5 - NL80211_HE_OBSS_PD_ATTR_SR_CTRL = 0x6 - NL80211_HIDDEN_SSID_NOT_IN_USE = 0x0 - NL80211_HIDDEN_SSID_ZERO_CONTENTS = 0x2 - NL80211_HIDDEN_SSID_ZERO_LEN = 0x1 - NL80211_HT_CAPABILITY_LEN = 0x1a - NL80211_IFACE_COMB_BI_MIN_GCD = 0x7 - NL80211_IFACE_COMB_LIMITS = 0x1 - NL80211_IFACE_COMB_MAXNUM = 0x2 - NL80211_IFACE_COMB_NUM_CHANNELS = 0x4 - NL80211_IFACE_COMB_RADAR_DETECT_REGIONS = 0x6 - NL80211_IFACE_COMB_RADAR_DETECT_WIDTHS = 0x5 - NL80211_IFACE_COMB_STA_AP_BI_MATCH = 0x3 - NL80211_IFACE_COMB_UNSPEC = 0x0 - NL80211_IFACE_LIMIT_MAX = 0x1 - NL80211_IFACE_LIMIT_TYPES = 0x2 - NL80211_IFACE_LIMIT_UNSPEC = 0x0 - NL80211_IFTYPE_ADHOC = 0x1 - NL80211_IFTYPE_AKM_ATTR_IFTYPES = 0x1 - NL80211_IFTYPE_AKM_ATTR_MAX = 0x2 - NL80211_IFTYPE_AKM_ATTR_SUITES = 0x2 - NL80211_IFTYPE_AP = 0x3 - NL80211_IFTYPE_AP_VLAN = 0x4 - NL80211_IFTYPE_MAX = 0xc - NL80211_IFTYPE_MESH_POINT = 0x7 - NL80211_IFTYPE_MONITOR = 0x6 - NL80211_IFTYPE_NAN = 0xc - NL80211_IFTYPE_OCB = 0xb - NL80211_IFTYPE_P2P_CLIENT = 0x8 - NL80211_IFTYPE_P2P_DEVICE = 0xa - NL80211_IFTYPE_P2P_GO = 0x9 - NL80211_IFTYPE_STATION = 0x2 - NL80211_IFTYPE_UNSPECIFIED = 0x0 - NL80211_IFTYPE_WDS = 0x5 - NL80211_KCK_EXT_LEN = 0x18 - NL80211_KCK_LEN = 0x10 - NL80211_KEK_EXT_LEN = 0x20 - NL80211_KEK_LEN = 0x10 - NL80211_KEY_CIPHER = 0x3 - NL80211_KEY_DATA = 0x1 - NL80211_KEY_DEFAULT_BEACON = 0xa - NL80211_KEY_DEFAULT = 0x5 - NL80211_KEY_DEFAULT_MGMT = 0x6 - NL80211_KEY_DEFAULT_TYPE_MULTICAST = 0x2 - NL80211_KEY_DEFAULT_TYPES = 0x8 - NL80211_KEY_DEFAULT_TYPE_UNICAST = 0x1 - NL80211_KEY_IDX = 0x2 - NL80211_KEY_MAX = 0xa - NL80211_KEY_MODE = 0x9 - NL80211_KEY_NO_TX = 0x1 - NL80211_KEY_RX_TX = 0x0 - NL80211_KEY_SEQ = 0x4 - NL80211_KEY_SET_TX = 0x2 - NL80211_KEY_TYPE = 0x7 - NL80211_KEYTYPE_GROUP = 0x0 - NL80211_KEYTYPE_PAIRWISE = 0x1 - NL80211_KEYTYPE_PEERKEY = 0x2 - NL80211_MAX_NR_AKM_SUITES = 0x2 - NL80211_MAX_NR_CIPHER_SUITES = 0x5 - NL80211_MAX_SUPP_HT_RATES = 0x4d - NL80211_MAX_SUPP_RATES = 0x20 - NL80211_MAX_SUPP_REG_RULES = 0x80 - NL80211_MESHCONF_ATTR_MAX = 0x1f - NL80211_MESHCONF_AUTO_OPEN_PLINKS = 0x7 - NL80211_MESHCONF_AWAKE_WINDOW = 0x1b - NL80211_MESHCONF_CONFIRM_TIMEOUT = 0x2 - NL80211_MESHCONF_CONNECTED_TO_AS = 0x1f - NL80211_MESHCONF_CONNECTED_TO_GATE = 0x1d - NL80211_MESHCONF_ELEMENT_TTL = 0xf - NL80211_MESHCONF_FORWARDING = 0x13 - NL80211_MESHCONF_GATE_ANNOUNCEMENTS = 0x11 - NL80211_MESHCONF_HOLDING_TIMEOUT = 0x3 - NL80211_MESHCONF_HT_OPMODE = 0x16 - NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT = 0xb - NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL = 0x19 - NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES = 0x8 - NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME = 0xd - NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT = 0x17 - NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL = 0x12 - NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL = 0xc - NL80211_MESHCONF_HWMP_RANN_INTERVAL = 0x10 - NL80211_MESHCONF_HWMP_ROOT_INTERVAL = 0x18 - NL80211_MESHCONF_HWMP_ROOTMODE = 0xe - NL80211_MESHCONF_MAX_PEER_LINKS = 0x4 - NL80211_MESHCONF_MAX_RETRIES = 0x5 - NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT = 0xa - NL80211_MESHCONF_NOLEARN = 0x1e - NL80211_MESHCONF_PATH_REFRESH_TIME = 0x9 - NL80211_MESHCONF_PLINK_TIMEOUT = 0x1c - NL80211_MESHCONF_POWER_MODE = 0x1a - NL80211_MESHCONF_RETRY_TIMEOUT = 0x1 - NL80211_MESHCONF_RSSI_THRESHOLD = 0x14 - NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR = 0x15 - NL80211_MESHCONF_TTL = 0x6 - NL80211_MESH_POWER_ACTIVE = 0x1 - NL80211_MESH_POWER_DEEP_SLEEP = 0x3 - NL80211_MESH_POWER_LIGHT_SLEEP = 0x2 - NL80211_MESH_POWER_MAX = 0x3 - NL80211_MESH_POWER_UNKNOWN = 0x0 - NL80211_MESH_SETUP_ATTR_MAX = 0x8 - NL80211_MESH_SETUP_AUTH_PROTOCOL = 0x8 - NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC = 0x2 - NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL = 0x1 - NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC = 0x6 - NL80211_MESH_SETUP_IE = 0x3 - NL80211_MESH_SETUP_USERSPACE_AMPE = 0x5 - NL80211_MESH_SETUP_USERSPACE_AUTH = 0x4 - NL80211_MESH_SETUP_USERSPACE_MPM = 0x7 - NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE = 0x3 - NL80211_MFP_NO = 0x0 - NL80211_MFP_OPTIONAL = 0x2 - NL80211_MFP_REQUIRED = 0x1 - NL80211_MIN_REMAIN_ON_CHANNEL_TIME = 0xa - NL80211_MNTR_FLAG_ACTIVE = 0x6 - NL80211_MNTR_FLAG_CONTROL = 0x3 - NL80211_MNTR_FLAG_COOK_FRAMES = 0x5 - NL80211_MNTR_FLAG_FCSFAIL = 0x1 - NL80211_MNTR_FLAG_MAX = 0x6 - NL80211_MNTR_FLAG_OTHER_BSS = 0x4 - NL80211_MNTR_FLAG_PLCPFAIL = 0x2 - NL80211_MPATH_FLAG_ACTIVE = 0x1 - NL80211_MPATH_FLAG_FIXED = 0x8 - NL80211_MPATH_FLAG_RESOLVED = 0x10 - NL80211_MPATH_FLAG_RESOLVING = 0x2 - NL80211_MPATH_FLAG_SN_VALID = 0x4 - NL80211_MPATH_INFO_DISCOVERY_RETRIES = 0x7 - NL80211_MPATH_INFO_DISCOVERY_TIMEOUT = 0x6 - NL80211_MPATH_INFO_EXPTIME = 0x4 - NL80211_MPATH_INFO_FLAGS = 0x5 - NL80211_MPATH_INFO_FRAME_QLEN = 0x1 - NL80211_MPATH_INFO_HOP_COUNT = 0x8 - NL80211_MPATH_INFO_MAX = 0x9 - NL80211_MPATH_INFO_METRIC = 0x3 - NL80211_MPATH_INFO_PATH_CHANGE = 0x9 - NL80211_MPATH_INFO_SN = 0x2 - NL80211_MULTICAST_GROUP_CONFIG = "config" - NL80211_MULTICAST_GROUP_MLME = "mlme" - NL80211_MULTICAST_GROUP_NAN = "nan" - NL80211_MULTICAST_GROUP_REG = "regulatory" - NL80211_MULTICAST_GROUP_SCAN = "scan" - NL80211_MULTICAST_GROUP_TESTMODE = "testmode" - NL80211_MULTICAST_GROUP_VENDOR = "vendor" - NL80211_NAN_FUNC_ATTR_MAX = 0x10 - NL80211_NAN_FUNC_CLOSE_RANGE = 0x9 - NL80211_NAN_FUNC_FOLLOW_UP = 0x2 - NL80211_NAN_FUNC_FOLLOW_UP_DEST = 0x8 - NL80211_NAN_FUNC_FOLLOW_UP_ID = 0x6 - NL80211_NAN_FUNC_FOLLOW_UP_REQ_ID = 0x7 - NL80211_NAN_FUNC_INSTANCE_ID = 0xf - NL80211_NAN_FUNC_MAX_TYPE = 0x2 - NL80211_NAN_FUNC_PUBLISH_BCAST = 0x4 - NL80211_NAN_FUNC_PUBLISH = 0x0 - NL80211_NAN_FUNC_PUBLISH_TYPE = 0x3 - NL80211_NAN_FUNC_RX_MATCH_FILTER = 0xd - NL80211_NAN_FUNC_SERVICE_ID = 0x2 - NL80211_NAN_FUNC_SERVICE_ID_LEN = 0x6 - NL80211_NAN_FUNC_SERVICE_INFO = 0xb - NL80211_NAN_FUNC_SERVICE_SPEC_INFO_MAX_LEN = 0xff - NL80211_NAN_FUNC_SRF = 0xc - NL80211_NAN_FUNC_SRF_MAX_LEN = 0xff - NL80211_NAN_FUNC_SUBSCRIBE_ACTIVE = 0x5 - NL80211_NAN_FUNC_SUBSCRIBE = 0x1 - NL80211_NAN_FUNC_TERM_REASON = 0x10 - NL80211_NAN_FUNC_TERM_REASON_ERROR = 0x2 - NL80211_NAN_FUNC_TERM_REASON_TTL_EXPIRED = 0x1 - NL80211_NAN_FUNC_TERM_REASON_USER_REQUEST = 0x0 - NL80211_NAN_FUNC_TTL = 0xa - NL80211_NAN_FUNC_TX_MATCH_FILTER = 0xe - NL80211_NAN_FUNC_TYPE = 0x1 - NL80211_NAN_MATCH_ATTR_MAX = 0x2 - NL80211_NAN_MATCH_FUNC_LOCAL = 0x1 - NL80211_NAN_MATCH_FUNC_PEER = 0x2 - NL80211_NAN_SOLICITED_PUBLISH = 0x1 - NL80211_NAN_SRF_ATTR_MAX = 0x4 - NL80211_NAN_SRF_BF = 0x2 - NL80211_NAN_SRF_BF_IDX = 0x3 - NL80211_NAN_SRF_INCLUDE = 0x1 - NL80211_NAN_SRF_MAC_ADDRS = 0x4 - NL80211_NAN_UNSOLICITED_PUBLISH = 0x2 - NL80211_NUM_ACS = 0x4 - NL80211_P2P_PS_SUPPORTED = 0x1 - NL80211_P2P_PS_UNSUPPORTED = 0x0 - NL80211_PKTPAT_MASK = 0x1 - NL80211_PKTPAT_OFFSET = 0x3 - NL80211_PKTPAT_PATTERN = 0x2 - NL80211_PLINK_ACTION_BLOCK = 0x2 - NL80211_PLINK_ACTION_NO_ACTION = 0x0 - NL80211_PLINK_ACTION_OPEN = 0x1 - NL80211_PLINK_BLOCKED = 0x6 - NL80211_PLINK_CNF_RCVD = 0x3 - NL80211_PLINK_ESTAB = 0x4 - NL80211_PLINK_HOLDING = 0x5 - NL80211_PLINK_LISTEN = 0x0 - NL80211_PLINK_OPN_RCVD = 0x2 - NL80211_PLINK_OPN_SNT = 0x1 - NL80211_PMKSA_CANDIDATE_BSSID = 0x2 - NL80211_PMKSA_CANDIDATE_INDEX = 0x1 - NL80211_PMKSA_CANDIDATE_PREAUTH = 0x3 - NL80211_PMSR_ATTR_MAX = 0x5 - NL80211_PMSR_ATTR_MAX_PEERS = 0x1 - NL80211_PMSR_ATTR_PEERS = 0x5 - NL80211_PMSR_ATTR_RANDOMIZE_MAC_ADDR = 0x3 - NL80211_PMSR_ATTR_REPORT_AP_TSF = 0x2 - NL80211_PMSR_ATTR_TYPE_CAPA = 0x4 - NL80211_PMSR_FTM_CAPA_ATTR_ASAP = 0x1 - NL80211_PMSR_FTM_CAPA_ATTR_BANDWIDTHS = 0x6 - NL80211_PMSR_FTM_CAPA_ATTR_MAX_BURSTS_EXPONENT = 0x7 - NL80211_PMSR_FTM_CAPA_ATTR_MAX = 0xa - NL80211_PMSR_FTM_CAPA_ATTR_MAX_FTMS_PER_BURST = 0x8 - NL80211_PMSR_FTM_CAPA_ATTR_NON_ASAP = 0x2 - NL80211_PMSR_FTM_CAPA_ATTR_NON_TRIGGER_BASED = 0xa - NL80211_PMSR_FTM_CAPA_ATTR_PREAMBLES = 0x5 - NL80211_PMSR_FTM_CAPA_ATTR_REQ_CIVICLOC = 0x4 - NL80211_PMSR_FTM_CAPA_ATTR_REQ_LCI = 0x3 - NL80211_PMSR_FTM_CAPA_ATTR_TRIGGER_BASED = 0x9 - NL80211_PMSR_FTM_FAILURE_BAD_CHANGED_PARAMS = 0x7 - NL80211_PMSR_FTM_FAILURE_INVALID_TIMESTAMP = 0x5 - NL80211_PMSR_FTM_FAILURE_NO_RESPONSE = 0x1 - NL80211_PMSR_FTM_FAILURE_PEER_BUSY = 0x6 - NL80211_PMSR_FTM_FAILURE_PEER_NOT_CAPABLE = 0x4 - NL80211_PMSR_FTM_FAILURE_REJECTED = 0x2 - NL80211_PMSR_FTM_FAILURE_UNSPECIFIED = 0x0 - NL80211_PMSR_FTM_FAILURE_WRONG_CHANNEL = 0x3 - NL80211_PMSR_FTM_REQ_ATTR_ASAP = 0x1 - NL80211_PMSR_FTM_REQ_ATTR_BURST_DURATION = 0x5 - NL80211_PMSR_FTM_REQ_ATTR_BURST_PERIOD = 0x4 - NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST = 0x6 - NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK = 0xc - NL80211_PMSR_FTM_REQ_ATTR_MAX = 0xd - NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED = 0xb - NL80211_PMSR_FTM_REQ_ATTR_NUM_BURSTS_EXP = 0x3 - NL80211_PMSR_FTM_REQ_ATTR_NUM_FTMR_RETRIES = 0x7 - NL80211_PMSR_FTM_REQ_ATTR_PREAMBLE = 0x2 - NL80211_PMSR_FTM_REQ_ATTR_REQUEST_CIVICLOC = 0x9 - NL80211_PMSR_FTM_REQ_ATTR_REQUEST_LCI = 0x8 - NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED = 0xa - NL80211_PMSR_FTM_RESP_ATTR_BURST_DURATION = 0x7 - NL80211_PMSR_FTM_RESP_ATTR_BURST_INDEX = 0x2 - NL80211_PMSR_FTM_RESP_ATTR_BUSY_RETRY_TIME = 0x5 - NL80211_PMSR_FTM_RESP_ATTR_CIVICLOC = 0x14 - NL80211_PMSR_FTM_RESP_ATTR_DIST_AVG = 0x10 - NL80211_PMSR_FTM_RESP_ATTR_DIST_SPREAD = 0x12 - NL80211_PMSR_FTM_RESP_ATTR_DIST_VARIANCE = 0x11 - NL80211_PMSR_FTM_RESP_ATTR_FAIL_REASON = 0x1 - NL80211_PMSR_FTM_RESP_ATTR_FTMS_PER_BURST = 0x8 - NL80211_PMSR_FTM_RESP_ATTR_LCI = 0x13 - NL80211_PMSR_FTM_RESP_ATTR_MAX = 0x15 - NL80211_PMSR_FTM_RESP_ATTR_NUM_BURSTS_EXP = 0x6 - NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_ATTEMPTS = 0x3 - NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_SUCCESSES = 0x4 - NL80211_PMSR_FTM_RESP_ATTR_PAD = 0x15 - NL80211_PMSR_FTM_RESP_ATTR_RSSI_AVG = 0x9 - NL80211_PMSR_FTM_RESP_ATTR_RSSI_SPREAD = 0xa - NL80211_PMSR_FTM_RESP_ATTR_RTT_AVG = 0xd - NL80211_PMSR_FTM_RESP_ATTR_RTT_SPREAD = 0xf - NL80211_PMSR_FTM_RESP_ATTR_RTT_VARIANCE = 0xe - NL80211_PMSR_FTM_RESP_ATTR_RX_RATE = 0xc - NL80211_PMSR_FTM_RESP_ATTR_TX_RATE = 0xb - NL80211_PMSR_PEER_ATTR_ADDR = 0x1 - NL80211_PMSR_PEER_ATTR_CHAN = 0x2 - NL80211_PMSR_PEER_ATTR_MAX = 0x4 - NL80211_PMSR_PEER_ATTR_REQ = 0x3 - NL80211_PMSR_PEER_ATTR_RESP = 0x4 - NL80211_PMSR_REQ_ATTR_DATA = 0x1 - NL80211_PMSR_REQ_ATTR_GET_AP_TSF = 0x2 - NL80211_PMSR_REQ_ATTR_MAX = 0x2 - NL80211_PMSR_RESP_ATTR_AP_TSF = 0x4 - NL80211_PMSR_RESP_ATTR_DATA = 0x1 - NL80211_PMSR_RESP_ATTR_FINAL = 0x5 - NL80211_PMSR_RESP_ATTR_HOST_TIME = 0x3 - NL80211_PMSR_RESP_ATTR_MAX = 0x6 - NL80211_PMSR_RESP_ATTR_PAD = 0x6 - NL80211_PMSR_RESP_ATTR_STATUS = 0x2 - NL80211_PMSR_STATUS_FAILURE = 0x3 - NL80211_PMSR_STATUS_REFUSED = 0x1 - NL80211_PMSR_STATUS_SUCCESS = 0x0 - NL80211_PMSR_STATUS_TIMEOUT = 0x2 - NL80211_PMSR_TYPE_FTM = 0x1 - NL80211_PMSR_TYPE_INVALID = 0x0 - NL80211_PMSR_TYPE_MAX = 0x1 - NL80211_PREAMBLE_DMG = 0x3 - NL80211_PREAMBLE_HE = 0x4 - NL80211_PREAMBLE_HT = 0x1 - NL80211_PREAMBLE_LEGACY = 0x0 - NL80211_PREAMBLE_VHT = 0x2 - NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U = 0x8 - NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P = 0x4 - NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 = 0x2 - NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS = 0x1 - NL80211_PROTOCOL_FEATURE_SPLIT_WIPHY_DUMP = 0x1 - NL80211_PS_DISABLED = 0x0 - NL80211_PS_ENABLED = 0x1 - NL80211_RADAR_CAC_ABORTED = 0x2 - NL80211_RADAR_CAC_FINISHED = 0x1 - NL80211_RADAR_CAC_STARTED = 0x5 - NL80211_RADAR_DETECTED = 0x0 - NL80211_RADAR_NOP_FINISHED = 0x3 - NL80211_RADAR_PRE_CAC_EXPIRED = 0x4 - NL80211_RATE_INFO_10_MHZ_WIDTH = 0xb - NL80211_RATE_INFO_160_MHZ_WIDTH = 0xa - NL80211_RATE_INFO_40_MHZ_WIDTH = 0x3 - NL80211_RATE_INFO_5_MHZ_WIDTH = 0xc - NL80211_RATE_INFO_80_MHZ_WIDTH = 0x8 - NL80211_RATE_INFO_80P80_MHZ_WIDTH = 0x9 - NL80211_RATE_INFO_BITRATE32 = 0x5 - NL80211_RATE_INFO_BITRATE = 0x1 - NL80211_RATE_INFO_HE_1XLTF = 0x0 - NL80211_RATE_INFO_HE_2XLTF = 0x1 - NL80211_RATE_INFO_HE_4XLTF = 0x2 - NL80211_RATE_INFO_HE_DCM = 0x10 - NL80211_RATE_INFO_HE_GI_0_8 = 0x0 - NL80211_RATE_INFO_HE_GI_1_6 = 0x1 - NL80211_RATE_INFO_HE_GI_3_2 = 0x2 - NL80211_RATE_INFO_HE_GI = 0xf - NL80211_RATE_INFO_HE_MCS = 0xd - NL80211_RATE_INFO_HE_NSS = 0xe - NL80211_RATE_INFO_HE_RU_ALLOC_106 = 0x2 - NL80211_RATE_INFO_HE_RU_ALLOC_242 = 0x3 - NL80211_RATE_INFO_HE_RU_ALLOC_26 = 0x0 - NL80211_RATE_INFO_HE_RU_ALLOC_2x996 = 0x6 - NL80211_RATE_INFO_HE_RU_ALLOC_484 = 0x4 - NL80211_RATE_INFO_HE_RU_ALLOC_52 = 0x1 - NL80211_RATE_INFO_HE_RU_ALLOC_996 = 0x5 - NL80211_RATE_INFO_HE_RU_ALLOC = 0x11 - NL80211_RATE_INFO_MAX = 0x16 - NL80211_RATE_INFO_MCS = 0x2 - NL80211_RATE_INFO_SHORT_GI = 0x4 - NL80211_RATE_INFO_VHT_MCS = 0x6 - NL80211_RATE_INFO_VHT_NSS = 0x7 - NL80211_REGDOM_SET_BY_CORE = 0x0 - NL80211_REGDOM_SET_BY_COUNTRY_IE = 0x3 - NL80211_REGDOM_SET_BY_DRIVER = 0x2 - NL80211_REGDOM_SET_BY_USER = 0x1 - NL80211_REGDOM_TYPE_COUNTRY = 0x0 - NL80211_REGDOM_TYPE_CUSTOM_WORLD = 0x2 - NL80211_REGDOM_TYPE_INTERSECTION = 0x3 - NL80211_REGDOM_TYPE_WORLD = 0x1 - NL80211_REG_RULE_ATTR_MAX = 0x7 - NL80211_REKEY_DATA_AKM = 0x4 - NL80211_REKEY_DATA_KCK = 0x2 - NL80211_REKEY_DATA_KEK = 0x1 - NL80211_REKEY_DATA_REPLAY_CTR = 0x3 - NL80211_REPLAY_CTR_LEN = 0x8 - NL80211_RRF_AUTO_BW = 0x800 - NL80211_RRF_DFS = 0x10 - NL80211_RRF_GO_CONCURRENT = 0x1000 - NL80211_RRF_IR_CONCURRENT = 0x1000 - NL80211_RRF_NO_160MHZ = 0x10000 - NL80211_RRF_NO_80MHZ = 0x8000 - NL80211_RRF_NO_CCK = 0x2 - NL80211_RRF_NO_HE = 0x20000 - NL80211_RRF_NO_HT40 = 0x6000 - NL80211_RRF_NO_HT40MINUS = 0x2000 - NL80211_RRF_NO_HT40PLUS = 0x4000 - NL80211_RRF_NO_IBSS = 0x80 - NL80211_RRF_NO_INDOOR = 0x4 - NL80211_RRF_NO_IR_ALL = 0x180 - NL80211_RRF_NO_IR = 0x80 - NL80211_RRF_NO_OFDM = 0x1 - NL80211_RRF_NO_OUTDOOR = 0x8 - NL80211_RRF_PASSIVE_SCAN = 0x80 - NL80211_RRF_PTMP_ONLY = 0x40 - NL80211_RRF_PTP_ONLY = 0x20 - NL80211_RXMGMT_FLAG_ANSWERED = 0x1 - NL80211_RXMGMT_FLAG_EXTERNAL_AUTH = 0x2 - NL80211_SAE_PWE_BOTH = 0x3 - NL80211_SAE_PWE_HASH_TO_ELEMENT = 0x2 - NL80211_SAE_PWE_HUNT_AND_PECK = 0x1 - NL80211_SAE_PWE_UNSPECIFIED = 0x0 - NL80211_SAR_ATTR_MAX = 0x2 - NL80211_SAR_ATTR_SPECS = 0x2 - NL80211_SAR_ATTR_SPECS_END_FREQ = 0x4 - NL80211_SAR_ATTR_SPECS_MAX = 0x4 - NL80211_SAR_ATTR_SPECS_POWER = 0x1 - NL80211_SAR_ATTR_SPECS_RANGE_INDEX = 0x2 - NL80211_SAR_ATTR_SPECS_START_FREQ = 0x3 - NL80211_SAR_ATTR_TYPE = 0x1 - NL80211_SAR_TYPE_POWER = 0x0 - NL80211_SCAN_FLAG_ACCEPT_BCAST_PROBE_RESP = 0x20 - NL80211_SCAN_FLAG_AP = 0x4 - NL80211_SCAN_FLAG_COLOCATED_6GHZ = 0x4000 - NL80211_SCAN_FLAG_FILS_MAX_CHANNEL_TIME = 0x10 - NL80211_SCAN_FLAG_FLUSH = 0x2 - NL80211_SCAN_FLAG_FREQ_KHZ = 0x2000 - NL80211_SCAN_FLAG_HIGH_ACCURACY = 0x400 - NL80211_SCAN_FLAG_LOW_POWER = 0x200 - NL80211_SCAN_FLAG_LOW_PRIORITY = 0x1 - NL80211_SCAN_FLAG_LOW_SPAN = 0x100 - NL80211_SCAN_FLAG_MIN_PREQ_CONTENT = 0x1000 - NL80211_SCAN_FLAG_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION = 0x80 - NL80211_SCAN_FLAG_OCE_PROBE_REQ_HIGH_TX_RATE = 0x40 - NL80211_SCAN_FLAG_RANDOM_ADDR = 0x8 - NL80211_SCAN_FLAG_RANDOM_SN = 0x800 - NL80211_SCAN_RSSI_THOLD_OFF = -0x12c - NL80211_SCHED_SCAN_MATCH_ATTR_BSSID = 0x5 - NL80211_SCHED_SCAN_MATCH_ATTR_MAX = 0x6 - NL80211_SCHED_SCAN_MATCH_ATTR_RELATIVE_RSSI = 0x3 - NL80211_SCHED_SCAN_MATCH_ATTR_RSSI_ADJUST = 0x4 - NL80211_SCHED_SCAN_MATCH_ATTR_RSSI = 0x2 - NL80211_SCHED_SCAN_MATCH_ATTR_SSID = 0x1 - NL80211_SCHED_SCAN_MATCH_PER_BAND_RSSI = 0x6 - NL80211_SCHED_SCAN_PLAN_INTERVAL = 0x1 - NL80211_SCHED_SCAN_PLAN_ITERATIONS = 0x2 - NL80211_SCHED_SCAN_PLAN_MAX = 0x2 - NL80211_SMPS_DYNAMIC = 0x2 - NL80211_SMPS_MAX = 0x2 - NL80211_SMPS_OFF = 0x0 - NL80211_SMPS_STATIC = 0x1 - NL80211_STA_BSS_PARAM_BEACON_INTERVAL = 0x5 - NL80211_STA_BSS_PARAM_CTS_PROT = 0x1 - NL80211_STA_BSS_PARAM_DTIM_PERIOD = 0x4 - NL80211_STA_BSS_PARAM_MAX = 0x5 - NL80211_STA_BSS_PARAM_SHORT_PREAMBLE = 0x2 - NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME = 0x3 - NL80211_STA_FLAG_ASSOCIATED = 0x7 - NL80211_STA_FLAG_AUTHENTICATED = 0x5 - NL80211_STA_FLAG_AUTHORIZED = 0x1 - NL80211_STA_FLAG_MAX = 0x7 - NL80211_STA_FLAG_MAX_OLD_API = 0x6 - NL80211_STA_FLAG_MFP = 0x4 - NL80211_STA_FLAG_SHORT_PREAMBLE = 0x2 - NL80211_STA_FLAG_TDLS_PEER = 0x6 - NL80211_STA_FLAG_WME = 0x3 - NL80211_STA_INFO_ACK_SIGNAL_AVG = 0x23 - NL80211_STA_INFO_ACK_SIGNAL = 0x22 - NL80211_STA_INFO_AIRTIME_LINK_METRIC = 0x29 - NL80211_STA_INFO_AIRTIME_WEIGHT = 0x28 - NL80211_STA_INFO_ASSOC_AT_BOOTTIME = 0x2a - NL80211_STA_INFO_BEACON_LOSS = 0x12 - NL80211_STA_INFO_BEACON_RX = 0x1d - NL80211_STA_INFO_BEACON_SIGNAL_AVG = 0x1e - NL80211_STA_INFO_BSS_PARAM = 0xf - NL80211_STA_INFO_CHAIN_SIGNAL_AVG = 0x1a - NL80211_STA_INFO_CHAIN_SIGNAL = 0x19 - NL80211_STA_INFO_CONNECTED_TIME = 0x10 - NL80211_STA_INFO_CONNECTED_TO_AS = 0x2b - NL80211_STA_INFO_CONNECTED_TO_GATE = 0x26 - NL80211_STA_INFO_DATA_ACK_SIGNAL_AVG = 0x23 - NL80211_STA_INFO_EXPECTED_THROUGHPUT = 0x1b - NL80211_STA_INFO_FCS_ERROR_COUNT = 0x25 - NL80211_STA_INFO_INACTIVE_TIME = 0x1 - NL80211_STA_INFO_LLID = 0x4 - NL80211_STA_INFO_LOCAL_PM = 0x14 - NL80211_STA_INFO_MAX = 0x2b - NL80211_STA_INFO_NONPEER_PM = 0x16 - NL80211_STA_INFO_PAD = 0x21 - NL80211_STA_INFO_PEER_PM = 0x15 - NL80211_STA_INFO_PLID = 0x5 - NL80211_STA_INFO_PLINK_STATE = 0x6 - NL80211_STA_INFO_RX_BITRATE = 0xe - NL80211_STA_INFO_RX_BYTES64 = 0x17 - NL80211_STA_INFO_RX_BYTES = 0x2 - NL80211_STA_INFO_RX_DROP_MISC = 0x1c - NL80211_STA_INFO_RX_DURATION = 0x20 - NL80211_STA_INFO_RX_MPDUS = 0x24 - NL80211_STA_INFO_RX_PACKETS = 0x9 - NL80211_STA_INFO_SIGNAL_AVG = 0xd - NL80211_STA_INFO_SIGNAL = 0x7 - NL80211_STA_INFO_STA_FLAGS = 0x11 - NL80211_STA_INFO_TID_STATS = 0x1f - NL80211_STA_INFO_T_OFFSET = 0x13 - NL80211_STA_INFO_TX_BITRATE = 0x8 - NL80211_STA_INFO_TX_BYTES64 = 0x18 - NL80211_STA_INFO_TX_BYTES = 0x3 - NL80211_STA_INFO_TX_DURATION = 0x27 - NL80211_STA_INFO_TX_FAILED = 0xc - NL80211_STA_INFO_TX_PACKETS = 0xa - NL80211_STA_INFO_TX_RETRIES = 0xb - NL80211_STA_WME_MAX = 0x2 - NL80211_STA_WME_MAX_SP = 0x2 - NL80211_STA_WME_UAPSD_QUEUES = 0x1 - NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY = 0x5 - NL80211_SURVEY_INFO_CHANNEL_TIME = 0x4 - NL80211_SURVEY_INFO_CHANNEL_TIME_EXT_BUSY = 0x6 - NL80211_SURVEY_INFO_CHANNEL_TIME_RX = 0x7 - NL80211_SURVEY_INFO_CHANNEL_TIME_TX = 0x8 - NL80211_SURVEY_INFO_FREQUENCY = 0x1 - NL80211_SURVEY_INFO_FREQUENCY_OFFSET = 0xc - NL80211_SURVEY_INFO_IN_USE = 0x3 - NL80211_SURVEY_INFO_MAX = 0xc - NL80211_SURVEY_INFO_NOISE = 0x2 - NL80211_SURVEY_INFO_PAD = 0xa - NL80211_SURVEY_INFO_TIME_BSS_RX = 0xb - NL80211_SURVEY_INFO_TIME_BUSY = 0x5 - NL80211_SURVEY_INFO_TIME = 0x4 - NL80211_SURVEY_INFO_TIME_EXT_BUSY = 0x6 - NL80211_SURVEY_INFO_TIME_RX = 0x7 - NL80211_SURVEY_INFO_TIME_SCAN = 0x9 - NL80211_SURVEY_INFO_TIME_TX = 0x8 - NL80211_TDLS_DISABLE_LINK = 0x4 - NL80211_TDLS_DISCOVERY_REQ = 0x0 - NL80211_TDLS_ENABLE_LINK = 0x3 - NL80211_TDLS_PEER_HE = 0x8 - NL80211_TDLS_PEER_HT = 0x1 - NL80211_TDLS_PEER_VHT = 0x2 - NL80211_TDLS_PEER_WMM = 0x4 - NL80211_TDLS_SETUP = 0x1 - NL80211_TDLS_TEARDOWN = 0x2 - NL80211_TID_CONFIG_ATTR_AMPDU_CTRL = 0x9 - NL80211_TID_CONFIG_ATTR_AMSDU_CTRL = 0xb - NL80211_TID_CONFIG_ATTR_MAX = 0xd - NL80211_TID_CONFIG_ATTR_NOACK = 0x6 - NL80211_TID_CONFIG_ATTR_OVERRIDE = 0x4 - NL80211_TID_CONFIG_ATTR_PAD = 0x1 - NL80211_TID_CONFIG_ATTR_PEER_SUPP = 0x3 - NL80211_TID_CONFIG_ATTR_RETRY_LONG = 0x8 - NL80211_TID_CONFIG_ATTR_RETRY_SHORT = 0x7 - NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL = 0xa - NL80211_TID_CONFIG_ATTR_TIDS = 0x5 - NL80211_TID_CONFIG_ATTR_TX_RATE = 0xd - NL80211_TID_CONFIG_ATTR_TX_RATE_TYPE = 0xc - NL80211_TID_CONFIG_ATTR_VIF_SUPP = 0x2 - NL80211_TID_CONFIG_DISABLE = 0x1 - NL80211_TID_CONFIG_ENABLE = 0x0 - NL80211_TID_STATS_MAX = 0x6 - NL80211_TID_STATS_PAD = 0x5 - NL80211_TID_STATS_RX_MSDU = 0x1 - NL80211_TID_STATS_TX_MSDU = 0x2 - NL80211_TID_STATS_TX_MSDU_FAILED = 0x4 - NL80211_TID_STATS_TX_MSDU_RETRIES = 0x3 - NL80211_TID_STATS_TXQ_STATS = 0x6 - NL80211_TIMEOUT_ASSOC = 0x3 - NL80211_TIMEOUT_AUTH = 0x2 - NL80211_TIMEOUT_SCAN = 0x1 - NL80211_TIMEOUT_UNSPECIFIED = 0x0 - NL80211_TKIP_DATA_OFFSET_ENCR_KEY = 0x0 - NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY = 0x18 - NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY = 0x10 - NL80211_TX_POWER_AUTOMATIC = 0x0 - NL80211_TX_POWER_FIXED = 0x2 - NL80211_TX_POWER_LIMITED = 0x1 - NL80211_TXQ_ATTR_AC = 0x1 - NL80211_TXQ_ATTR_AIFS = 0x5 - NL80211_TXQ_ATTR_CWMAX = 0x4 - NL80211_TXQ_ATTR_CWMIN = 0x3 - NL80211_TXQ_ATTR_MAX = 0x5 - NL80211_TXQ_ATTR_QUEUE = 0x1 - NL80211_TXQ_ATTR_TXOP = 0x2 - NL80211_TXQ_Q_BE = 0x2 - NL80211_TXQ_Q_BK = 0x3 - NL80211_TXQ_Q_VI = 0x1 - NL80211_TXQ_Q_VO = 0x0 - NL80211_TXQ_STATS_BACKLOG_BYTES = 0x1 - NL80211_TXQ_STATS_BACKLOG_PACKETS = 0x2 - NL80211_TXQ_STATS_COLLISIONS = 0x8 - NL80211_TXQ_STATS_DROPS = 0x4 - NL80211_TXQ_STATS_ECN_MARKS = 0x5 - NL80211_TXQ_STATS_FLOWS = 0x3 - NL80211_TXQ_STATS_MAX = 0xb - NL80211_TXQ_STATS_MAX_FLOWS = 0xb - NL80211_TXQ_STATS_OVERLIMIT = 0x6 - NL80211_TXQ_STATS_OVERMEMORY = 0x7 - NL80211_TXQ_STATS_TX_BYTES = 0x9 - NL80211_TXQ_STATS_TX_PACKETS = 0xa - NL80211_TX_RATE_AUTOMATIC = 0x0 - NL80211_TXRATE_DEFAULT_GI = 0x0 - NL80211_TX_RATE_FIXED = 0x2 - NL80211_TXRATE_FORCE_LGI = 0x2 - NL80211_TXRATE_FORCE_SGI = 0x1 - NL80211_TXRATE_GI = 0x4 - NL80211_TXRATE_HE = 0x5 - NL80211_TXRATE_HE_GI = 0x6 - NL80211_TXRATE_HE_LTF = 0x7 - NL80211_TXRATE_HT = 0x2 - NL80211_TXRATE_LEGACY = 0x1 - NL80211_TX_RATE_LIMITED = 0x1 - NL80211_TXRATE_MAX = 0x7 - NL80211_TXRATE_MCS = 0x2 - NL80211_TXRATE_VHT = 0x3 - NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_INT = 0x1 - NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_MAX = 0x2 - NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_TMPL = 0x2 - NL80211_USER_REG_HINT_CELL_BASE = 0x1 - NL80211_USER_REG_HINT_INDOOR = 0x2 - NL80211_USER_REG_HINT_USER = 0x0 - NL80211_VENDOR_ID_IS_LINUX = 0x80000000 - NL80211_VHT_CAPABILITY_LEN = 0xc - NL80211_VHT_NSS_MAX = 0x8 - NL80211_WIPHY_NAME_MAXLEN = 0x40 - NL80211_WMMR_AIFSN = 0x3 - NL80211_WMMR_CW_MAX = 0x2 - NL80211_WMMR_CW_MIN = 0x1 - NL80211_WMMR_MAX = 0x4 - NL80211_WMMR_TXOP = 0x4 - NL80211_WOWLAN_PKTPAT_MASK = 0x1 - NL80211_WOWLAN_PKTPAT_OFFSET = 0x3 - NL80211_WOWLAN_PKTPAT_PATTERN = 0x2 - NL80211_WOWLAN_TCP_DATA_INTERVAL = 0x9 - NL80211_WOWLAN_TCP_DATA_PAYLOAD = 0x6 - NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ = 0x7 - NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN = 0x8 - NL80211_WOWLAN_TCP_DST_IPV4 = 0x2 - NL80211_WOWLAN_TCP_DST_MAC = 0x3 - NL80211_WOWLAN_TCP_DST_PORT = 0x5 - NL80211_WOWLAN_TCP_SRC_IPV4 = 0x1 - NL80211_WOWLAN_TCP_SRC_PORT = 0x4 - NL80211_WOWLAN_TCP_WAKE_MASK = 0xb - NL80211_WOWLAN_TCP_WAKE_PAYLOAD = 0xa - NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE = 0x8 - NL80211_WOWLAN_TRIG_ANY = 0x1 - NL80211_WOWLAN_TRIG_DISCONNECT = 0x2 - NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST = 0x7 - NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE = 0x6 - NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED = 0x5 - NL80211_WOWLAN_TRIG_MAGIC_PKT = 0x3 - NL80211_WOWLAN_TRIG_NET_DETECT = 0x12 - NL80211_WOWLAN_TRIG_NET_DETECT_RESULTS = 0x13 - NL80211_WOWLAN_TRIG_PKT_PATTERN = 0x4 - NL80211_WOWLAN_TRIG_RFKILL_RELEASE = 0x9 - NL80211_WOWLAN_TRIG_TCP_CONNECTION = 0xe - NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211 = 0xa - NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN = 0xb - NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023 = 0xc - NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023_LEN = 0xd - NL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST = 0x10 - NL80211_WOWLAN_TRIG_WAKEUP_TCP_MATCH = 0xf - NL80211_WOWLAN_TRIG_WAKEUP_TCP_NOMORETOKENS = 0x11 - NL80211_WPA_VERSION_1 = 0x1 - NL80211_WPA_VERSION_2 = 0x2 - NL80211_WPA_VERSION_3 = 0x4 -) - -const ( - FRA_UNSPEC = 0x0 - FRA_DST = 0x1 - FRA_SRC = 0x2 - FRA_IIFNAME = 0x3 - FRA_GOTO = 0x4 - FRA_UNUSED2 = 0x5 - FRA_PRIORITY = 0x6 - FRA_UNUSED3 = 0x7 - FRA_UNUSED4 = 0x8 - FRA_UNUSED5 = 0x9 - FRA_FWMARK = 0xa - FRA_FLOW = 0xb - FRA_TUN_ID = 0xc - FRA_SUPPRESS_IFGROUP = 0xd - FRA_SUPPRESS_PREFIXLEN = 0xe - FRA_TABLE = 0xf - FRA_FWMASK = 0x10 - FRA_OIFNAME = 0x11 - FRA_PAD = 0x12 - FRA_L3MDEV = 0x13 - FRA_UID_RANGE = 0x14 - FRA_PROTOCOL = 0x15 - FRA_IP_PROTO = 0x16 - FRA_SPORT_RANGE = 0x17 - FRA_DPORT_RANGE = 0x18 - FR_ACT_UNSPEC = 0x0 - FR_ACT_TO_TBL = 0x1 - FR_ACT_GOTO = 0x2 - FR_ACT_NOP = 0x3 - FR_ACT_RES3 = 0x4 - FR_ACT_RES4 = 0x5 - FR_ACT_BLACKHOLE = 0x6 - FR_ACT_UNREACHABLE = 0x7 - FR_ACT_PROHIBIT = 0x8 -) - -const ( - AUDIT_NLGRP_NONE = 0x0 - AUDIT_NLGRP_READLOG = 0x1 -) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go deleted file mode 100644 index 2636044..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +++ /dev/null @@ -1,690 +0,0 @@ -// cgo -godefs -objdir=/tmp/386/cgo -- -Wall -Werror -static -I/tmp/386/include -m32 linux/types.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build 386 && linux -// +build 386,linux - -package unix - -const ( - SizeofPtr = 0x4 - SizeofLong = 0x4 -) - -type ( - _C_long int32 -) - -type Timespec struct { - Sec int32 - Nsec int32 -} - -type Timeval struct { - Sec int32 - Usec int32 -} - -type Timex struct { - Modes uint32 - Offset int32 - Freq int32 - Maxerror int32 - Esterror int32 - Status int32 - Constant int32 - Precision int32 - Tolerance int32 - Time Timeval - Tick int32 - Ppsfreq int32 - Jitter int32 - Shift int32 - Stabil int32 - Jitcnt int32 - Calcnt int32 - Errcnt int32 - Stbcnt int32 - Tai int32 - _ [44]byte -} - -type Time_t int32 - -type Tms struct { - Utime int32 - Stime int32 - Cutime int32 - Cstime int32 -} - -type Utimbuf struct { - Actime int32 - Modtime int32 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int32 - Ixrss int32 - Idrss int32 - Isrss int32 - Minflt int32 - Majflt int32 - Nswap int32 - Inblock int32 - Oublock int32 - Msgsnd int32 - Msgrcv int32 - Nsignals int32 - Nvcsw int32 - Nivcsw int32 -} - -type Stat_t struct { - Dev uint64 - _ uint16 - _ uint32 - Mode uint32 - Nlink uint32 - Uid uint32 - Gid uint32 - Rdev uint64 - _ uint16 - Size int64 - Blksize int32 - Blocks int64 - Atim Timespec - Mtim Timespec - Ctim Timespec - Ino uint64 -} - -type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]int8 - _ [1]byte -} - -type Flock_t struct { - Type int16 - Whence int16 - Start int64 - Len int64 - Pid int32 -} - -type DmNameList struct { - Dev uint64 - Next uint32 -} - -const ( - FADV_DONTNEED = 0x4 - FADV_NOREUSE = 0x5 -) - -type RawSockaddrNFCLLCP struct { - Sa_family uint16 - Dev_idx uint32 - Target_idx uint32 - Nfc_protocol uint32 - Dsap uint8 - Ssap uint8 - Service_name [63]uint8 - Service_name_len uint32 -} - -type RawSockaddr struct { - Family uint16 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [96]int8 -} - -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 -} - -type ifreq struct { - Ifrn [16]byte - Ifru [16]byte -} - -const ( - SizeofSockaddrNFCLLCP = 0x58 - SizeofIovec = 0x8 - SizeofMsghdr = 0x1c - SizeofCmsghdr = 0xc -) - -const ( - SizeofSockFprog = 0x8 -) - -type PtraceRegs struct { - Ebx int32 - Ecx int32 - Edx int32 - Esi int32 - Edi int32 - Ebp int32 - Eax int32 - Xds int32 - Xes int32 - Xfs int32 - Xgs int32 - Orig_eax int32 - Eip int32 - Xcs int32 - Eflags int32 - Esp int32 - Xss int32 -} - -type FdSet struct { - Bits [32]int32 -} - -type Sysinfo_t struct { - Uptime int32 - Loads [3]uint32 - Totalram uint32 - Freeram uint32 - Sharedram uint32 - Bufferram uint32 - Totalswap uint32 - Freeswap uint32 - Procs uint16 - Pad uint16 - Totalhigh uint32 - Freehigh uint32 - Unit uint32 - _ [8]int8 -} - -type Ustat_t struct { - Tfree int32 - Tinode uint32 - Fname [6]int8 - Fpack [6]int8 -} - -type EpollEvent struct { - Events uint32 - Fd int32 - Pad int32 -} - -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - -const ( - POLLRDHUP = 0x2000 -) - -type Sigset_t struct { - Val [32]uint32 -} - -const _C__NSIG = 0x41 - -type Siginfo struct { - Signo int32 - Errno int32 - Code int32 - _ [116]byte -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Line uint8 - Cc [19]uint8 - Ispeed uint32 - Ospeed uint32 -} - -type Taskstats struct { - Version uint16 - Ac_exitcode uint32 - Ac_flag uint8 - Ac_nice uint8 - _ [4]byte - Cpu_count uint64 - Cpu_delay_total uint64 - Blkio_count uint64 - Blkio_delay_total uint64 - Swapin_count uint64 - Swapin_delay_total uint64 - Cpu_run_real_total uint64 - Cpu_run_virtual_total uint64 - Ac_comm [32]int8 - Ac_sched uint8 - Ac_pad [3]uint8 - _ [4]byte - Ac_uid uint32 - Ac_gid uint32 - Ac_pid uint32 - Ac_ppid uint32 - Ac_btime uint32 - _ [4]byte - Ac_etime uint64 - Ac_utime uint64 - Ac_stime uint64 - Ac_minflt uint64 - Ac_majflt uint64 - Coremem uint64 - Virtmem uint64 - Hiwater_rss uint64 - Hiwater_vm uint64 - Read_char uint64 - Write_char uint64 - Read_syscalls uint64 - Write_syscalls uint64 - Read_bytes uint64 - Write_bytes uint64 - Cancelled_write_bytes uint64 - Nvcsw uint64 - Nivcsw uint64 - Ac_utimescaled uint64 - Ac_stimescaled uint64 - Cpu_scaled_run_real_total uint64 - Freepages_count uint64 - Freepages_delay_total uint64 - Thrashing_count uint64 - Thrashing_delay_total uint64 - Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 - Ac_tgid uint32 - _ [4]byte - Ac_tgetime uint64 - Ac_exe_dev uint64 - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -} - -type cpuMask uint32 - -const ( - _NCPUBITS = 0x20 -) - -const ( - CBitFieldMaskBit0 = 0x1 - CBitFieldMaskBit1 = 0x2 - CBitFieldMaskBit2 = 0x4 - CBitFieldMaskBit3 = 0x8 - CBitFieldMaskBit4 = 0x10 - CBitFieldMaskBit5 = 0x20 - CBitFieldMaskBit6 = 0x40 - CBitFieldMaskBit7 = 0x80 - CBitFieldMaskBit8 = 0x100 - CBitFieldMaskBit9 = 0x200 - CBitFieldMaskBit10 = 0x400 - CBitFieldMaskBit11 = 0x800 - CBitFieldMaskBit12 = 0x1000 - CBitFieldMaskBit13 = 0x2000 - CBitFieldMaskBit14 = 0x4000 - CBitFieldMaskBit15 = 0x8000 - CBitFieldMaskBit16 = 0x10000 - CBitFieldMaskBit17 = 0x20000 - CBitFieldMaskBit18 = 0x40000 - CBitFieldMaskBit19 = 0x80000 - CBitFieldMaskBit20 = 0x100000 - CBitFieldMaskBit21 = 0x200000 - CBitFieldMaskBit22 = 0x400000 - CBitFieldMaskBit23 = 0x800000 - CBitFieldMaskBit24 = 0x1000000 - CBitFieldMaskBit25 = 0x2000000 - CBitFieldMaskBit26 = 0x4000000 - CBitFieldMaskBit27 = 0x8000000 - CBitFieldMaskBit28 = 0x10000000 - CBitFieldMaskBit29 = 0x20000000 - CBitFieldMaskBit30 = 0x40000000 - CBitFieldMaskBit31 = 0x80000000 - CBitFieldMaskBit32 = 0x100000000 - CBitFieldMaskBit33 = 0x200000000 - CBitFieldMaskBit34 = 0x400000000 - CBitFieldMaskBit35 = 0x800000000 - CBitFieldMaskBit36 = 0x1000000000 - CBitFieldMaskBit37 = 0x2000000000 - CBitFieldMaskBit38 = 0x4000000000 - CBitFieldMaskBit39 = 0x8000000000 - CBitFieldMaskBit40 = 0x10000000000 - CBitFieldMaskBit41 = 0x20000000000 - CBitFieldMaskBit42 = 0x40000000000 - CBitFieldMaskBit43 = 0x80000000000 - CBitFieldMaskBit44 = 0x100000000000 - CBitFieldMaskBit45 = 0x200000000000 - CBitFieldMaskBit46 = 0x400000000000 - CBitFieldMaskBit47 = 0x800000000000 - CBitFieldMaskBit48 = 0x1000000000000 - CBitFieldMaskBit49 = 0x2000000000000 - CBitFieldMaskBit50 = 0x4000000000000 - CBitFieldMaskBit51 = 0x8000000000000 - CBitFieldMaskBit52 = 0x10000000000000 - CBitFieldMaskBit53 = 0x20000000000000 - CBitFieldMaskBit54 = 0x40000000000000 - CBitFieldMaskBit55 = 0x80000000000000 - CBitFieldMaskBit56 = 0x100000000000000 - CBitFieldMaskBit57 = 0x200000000000000 - CBitFieldMaskBit58 = 0x400000000000000 - CBitFieldMaskBit59 = 0x800000000000000 - CBitFieldMaskBit60 = 0x1000000000000000 - CBitFieldMaskBit61 = 0x2000000000000000 - CBitFieldMaskBit62 = 0x4000000000000000 - CBitFieldMaskBit63 = 0x8000000000000000 -) - -type SockaddrStorage struct { - Family uint16 - _ [122]int8 - _ uint32 -} - -type HDGeometry struct { - Heads uint8 - Sectors uint8 - Cylinders uint16 - Start uint32 -} - -type Statfs_t struct { - Type int32 - Bsize int32 - Blocks uint64 - Bfree uint64 - Bavail uint64 - Files uint64 - Ffree uint64 - Fsid Fsid - Namelen int32 - Frsize int32 - Flags int32 - Spare [4]int32 -} - -type TpacketHdr struct { - Status uint32 - Len uint32 - Snaplen uint32 - Mac uint16 - Net uint16 - Sec uint32 - Usec uint32 -} - -const ( - SizeofTpacketHdr = 0x18 -) - -type RTCPLLInfo struct { - Ctrl int32 - Value int32 - Max int32 - Min int32 - Posmult int32 - Negmult int32 - Clock int32 -} - -type BlkpgPartition struct { - Start int64 - Length int64 - Pno int32 - Devname [64]uint8 - Volname [64]uint8 -} - -const ( - BLKPG = 0x1269 -) - -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 -} - -type CryptoUserAlg struct { - Name [64]int8 - Driver_name [64]int8 - Module_name [64]int8 - Type uint32 - Mask uint32 - Refcnt uint32 - Flags uint32 -} - -type CryptoStatAEAD struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatAKCipher struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Verify_cnt uint64 - Sign_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatCipher struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatCompress struct { - Type [64]int8 - Compress_cnt uint64 - Compress_tlen uint64 - Decompress_cnt uint64 - Decompress_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatHash struct { - Type [64]int8 - Hash_cnt uint64 - Hash_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatKPP struct { - Type [64]int8 - Setsecret_cnt uint64 - Generate_public_key_cnt uint64 - Compute_shared_secret_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatRNG struct { - Type [64]int8 - Generate_cnt uint64 - Generate_tlen uint64 - Seed_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatLarval struct { - Type [64]int8 -} - -type CryptoReportLarval struct { - Type [64]int8 -} - -type CryptoReportHash struct { - Type [64]int8 - Blocksize uint32 - Digestsize uint32 -} - -type CryptoReportCipher struct { - Type [64]int8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 -} - -type CryptoReportBlkCipher struct { - Type [64]int8 - Geniv [64]int8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 - Ivsize uint32 -} - -type CryptoReportAEAD struct { - Type [64]int8 - Geniv [64]int8 - Blocksize uint32 - Maxauthsize uint32 - Ivsize uint32 -} - -type CryptoReportComp struct { - Type [64]int8 -} - -type CryptoReportRNG struct { - Type [64]int8 - Seedsize uint32 -} - -type CryptoReportAKCipher struct { - Type [64]int8 -} - -type CryptoReportKPP struct { - Type [64]int8 -} - -type CryptoReportAcomp struct { - Type [64]int8 -} - -type LoopInfo struct { - Number int32 - Device uint16 - Inode uint32 - Rdevice uint16 - Offset int32 - Encrypt_type int32 - Encrypt_key_size int32 - Flags int32 - Name [64]int8 - Encrypt_key [32]uint8 - Init [2]uint32 - Reserved [4]int8 -} - -type TIPCSubscr struct { - Seq TIPCServiceRange - Timeout uint32 - Filter uint32 - Handle [8]int8 -} - -type TIPCSIOCLNReq struct { - Peer uint32 - Id uint32 - Linkname [68]int8 -} - -type TIPCSIOCNodeIDReq struct { - Peer uint32 - Id [16]int8 -} - -type PPSKInfo struct { - Assert_sequence uint32 - Clear_sequence uint32 - Assert_tu PPSKTime - Clear_tu PPSKTime - Current_mode int32 -} - -const ( - PPS_GETPARAMS = 0x800470a1 - PPS_SETPARAMS = 0x400470a2 - PPS_GETCAP = 0x800470a3 - PPS_FETCH = 0xc00470a4 -) - -const ( - PIDFD_NONBLOCK = 0x800 -) - -type SysvIpcPerm struct { - Key int32 - Uid uint32 - Gid uint32 - Cuid uint32 - Cgid uint32 - Mode uint16 - _ [2]uint8 - Seq uint16 - _ uint16 - _ uint32 - _ uint32 -} -type SysvShmDesc struct { - Perm SysvIpcPerm - Segsz uint32 - Atime uint32 - Atime_high uint32 - Dtime uint32 - Dtime_high uint32 - Ctime uint32 - Ctime_high uint32 - Cpid int32 - Lpid int32 - Nattch uint32 - _ uint32 - _ 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 deleted file mode 100644 index 8187489..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +++ /dev/null @@ -1,705 +0,0 @@ -// cgo -godefs -objdir=/tmp/amd64/cgo -- -Wall -Werror -static -I/tmp/amd64/include -m64 linux/types.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build amd64 && linux -// +build amd64,linux - -package unix - -const ( - SizeofPtr = 0x8 - SizeofLong = 0x8 -) - -type ( - _C_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int64 -} - -type Timex struct { - Modes uint32 - Offset int64 - Freq int64 - Maxerror int64 - Esterror int64 - Status int32 - Constant int64 - Precision int64 - Tolerance int64 - Time Timeval - Tick int64 - Ppsfreq int64 - Jitter int64 - Shift int32 - Stabil int64 - Jitcnt int64 - Calcnt int64 - Errcnt int64 - Stbcnt int64 - Tai int32 - _ [44]byte -} - -type Time_t int64 - -type Tms struct { - Utime int64 - Stime int64 - Cutime int64 - Cstime int64 -} - -type Utimbuf struct { - Actime int64 - Modtime int64 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Stat_t struct { - Dev uint64 - Ino uint64 - Nlink uint64 - Mode uint32 - Uid uint32 - Gid uint32 - _ int32 - Rdev uint64 - Size int64 - Blksize int64 - Blocks int64 - Atim Timespec - Mtim Timespec - Ctim Timespec - _ [3]int64 -} - -type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]int8 - _ [5]byte -} - -type Flock_t struct { - Type int16 - Whence int16 - Start int64 - Len int64 - Pid int32 - _ [4]byte -} - -type DmNameList struct { - Dev uint64 - Next uint32 - Name [0]byte - _ [4]byte -} - -const ( - FADV_DONTNEED = 0x4 - FADV_NOREUSE = 0x5 -) - -type RawSockaddrNFCLLCP struct { - Sa_family uint16 - Dev_idx uint32 - Target_idx uint32 - Nfc_protocol uint32 - Dsap uint8 - Ssap uint8 - Service_name [63]uint8 - Service_name_len uint64 -} - -type RawSockaddr struct { - Family uint16 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [96]int8 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type Msghdr struct { - Name *byte - Namelen uint32 - Iov *Iovec - Iovlen uint64 - Control *byte - Controllen uint64 - Flags int32 - _ [4]byte -} - -type Cmsghdr struct { - Len uint64 - Level int32 - Type int32 -} - -type ifreq struct { - Ifrn [16]byte - Ifru [24]byte -} - -const ( - SizeofSockaddrNFCLLCP = 0x60 - SizeofIovec = 0x10 - SizeofMsghdr = 0x38 - SizeofCmsghdr = 0x10 -) - -const ( - SizeofSockFprog = 0x10 -) - -type PtraceRegs struct { - R15 uint64 - R14 uint64 - R13 uint64 - R12 uint64 - Rbp uint64 - Rbx uint64 - R11 uint64 - R10 uint64 - R9 uint64 - R8 uint64 - Rax uint64 - Rcx uint64 - Rdx uint64 - Rsi uint64 - Rdi uint64 - Orig_rax uint64 - Rip uint64 - Cs uint64 - Eflags uint64 - Rsp uint64 - Ss uint64 - Fs_base uint64 - Gs_base uint64 - Ds uint64 - Es uint64 - Fs uint64 - Gs uint64 -} - -type FdSet struct { - Bits [16]int64 -} - -type Sysinfo_t struct { - Uptime int64 - Loads [3]uint64 - Totalram uint64 - Freeram uint64 - Sharedram uint64 - Bufferram uint64 - Totalswap uint64 - Freeswap uint64 - Procs uint16 - Pad uint16 - Totalhigh uint64 - Freehigh uint64 - Unit uint32 - _ [0]int8 - _ [4]byte -} - -type Ustat_t struct { - Tfree int32 - Tinode uint64 - Fname [6]int8 - Fpack [6]int8 - _ [4]byte -} - -type EpollEvent struct { - Events uint32 - Fd int32 - Pad int32 -} - -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - -const ( - POLLRDHUP = 0x2000 -) - -type Sigset_t struct { - Val [16]uint64 -} - -const _C__NSIG = 0x41 - -type Siginfo struct { - Signo int32 - Errno int32 - Code int32 - _ int32 - _ [112]byte -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Line uint8 - Cc [19]uint8 - Ispeed uint32 - Ospeed uint32 -} - -type Taskstats struct { - Version uint16 - Ac_exitcode uint32 - Ac_flag uint8 - Ac_nice uint8 - Cpu_count uint64 - Cpu_delay_total uint64 - Blkio_count uint64 - Blkio_delay_total uint64 - Swapin_count uint64 - Swapin_delay_total uint64 - Cpu_run_real_total uint64 - Cpu_run_virtual_total uint64 - Ac_comm [32]int8 - Ac_sched uint8 - Ac_pad [3]uint8 - _ [4]byte - Ac_uid uint32 - Ac_gid uint32 - Ac_pid uint32 - Ac_ppid uint32 - Ac_btime uint32 - Ac_etime uint64 - Ac_utime uint64 - Ac_stime uint64 - Ac_minflt uint64 - Ac_majflt uint64 - Coremem uint64 - Virtmem uint64 - Hiwater_rss uint64 - Hiwater_vm uint64 - Read_char uint64 - Write_char uint64 - Read_syscalls uint64 - Write_syscalls uint64 - Read_bytes uint64 - Write_bytes uint64 - Cancelled_write_bytes uint64 - Nvcsw uint64 - Nivcsw uint64 - Ac_utimescaled uint64 - Ac_stimescaled uint64 - Cpu_scaled_run_real_total uint64 - Freepages_count uint64 - Freepages_delay_total uint64 - Thrashing_count uint64 - Thrashing_delay_total uint64 - Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 - Ac_tgid uint32 - Ac_tgetime uint64 - Ac_exe_dev uint64 - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -} - -type cpuMask uint64 - -const ( - _NCPUBITS = 0x40 -) - -const ( - CBitFieldMaskBit0 = 0x1 - CBitFieldMaskBit1 = 0x2 - CBitFieldMaskBit2 = 0x4 - CBitFieldMaskBit3 = 0x8 - CBitFieldMaskBit4 = 0x10 - CBitFieldMaskBit5 = 0x20 - CBitFieldMaskBit6 = 0x40 - CBitFieldMaskBit7 = 0x80 - CBitFieldMaskBit8 = 0x100 - CBitFieldMaskBit9 = 0x200 - CBitFieldMaskBit10 = 0x400 - CBitFieldMaskBit11 = 0x800 - CBitFieldMaskBit12 = 0x1000 - CBitFieldMaskBit13 = 0x2000 - CBitFieldMaskBit14 = 0x4000 - CBitFieldMaskBit15 = 0x8000 - CBitFieldMaskBit16 = 0x10000 - CBitFieldMaskBit17 = 0x20000 - CBitFieldMaskBit18 = 0x40000 - CBitFieldMaskBit19 = 0x80000 - CBitFieldMaskBit20 = 0x100000 - CBitFieldMaskBit21 = 0x200000 - CBitFieldMaskBit22 = 0x400000 - CBitFieldMaskBit23 = 0x800000 - CBitFieldMaskBit24 = 0x1000000 - CBitFieldMaskBit25 = 0x2000000 - CBitFieldMaskBit26 = 0x4000000 - CBitFieldMaskBit27 = 0x8000000 - CBitFieldMaskBit28 = 0x10000000 - CBitFieldMaskBit29 = 0x20000000 - CBitFieldMaskBit30 = 0x40000000 - CBitFieldMaskBit31 = 0x80000000 - CBitFieldMaskBit32 = 0x100000000 - CBitFieldMaskBit33 = 0x200000000 - CBitFieldMaskBit34 = 0x400000000 - CBitFieldMaskBit35 = 0x800000000 - CBitFieldMaskBit36 = 0x1000000000 - CBitFieldMaskBit37 = 0x2000000000 - CBitFieldMaskBit38 = 0x4000000000 - CBitFieldMaskBit39 = 0x8000000000 - CBitFieldMaskBit40 = 0x10000000000 - CBitFieldMaskBit41 = 0x20000000000 - CBitFieldMaskBit42 = 0x40000000000 - CBitFieldMaskBit43 = 0x80000000000 - CBitFieldMaskBit44 = 0x100000000000 - CBitFieldMaskBit45 = 0x200000000000 - CBitFieldMaskBit46 = 0x400000000000 - CBitFieldMaskBit47 = 0x800000000000 - CBitFieldMaskBit48 = 0x1000000000000 - CBitFieldMaskBit49 = 0x2000000000000 - CBitFieldMaskBit50 = 0x4000000000000 - CBitFieldMaskBit51 = 0x8000000000000 - CBitFieldMaskBit52 = 0x10000000000000 - CBitFieldMaskBit53 = 0x20000000000000 - CBitFieldMaskBit54 = 0x40000000000000 - CBitFieldMaskBit55 = 0x80000000000000 - CBitFieldMaskBit56 = 0x100000000000000 - CBitFieldMaskBit57 = 0x200000000000000 - CBitFieldMaskBit58 = 0x400000000000000 - CBitFieldMaskBit59 = 0x800000000000000 - CBitFieldMaskBit60 = 0x1000000000000000 - CBitFieldMaskBit61 = 0x2000000000000000 - CBitFieldMaskBit62 = 0x4000000000000000 - CBitFieldMaskBit63 = 0x8000000000000000 -) - -type SockaddrStorage struct { - Family uint16 - _ [118]int8 - _ uint64 -} - -type HDGeometry struct { - Heads uint8 - Sectors uint8 - Cylinders uint16 - Start uint64 -} - -type Statfs_t struct { - Type int64 - Bsize int64 - Blocks uint64 - Bfree uint64 - Bavail uint64 - Files uint64 - Ffree uint64 - Fsid Fsid - Namelen int64 - Frsize int64 - Flags int64 - Spare [4]int64 -} - -type TpacketHdr struct { - Status uint64 - Len uint32 - Snaplen uint32 - Mac uint16 - Net uint16 - Sec uint32 - Usec uint32 - _ [4]byte -} - -const ( - SizeofTpacketHdr = 0x20 -) - -type RTCPLLInfo struct { - Ctrl int32 - Value int32 - Max int32 - Min int32 - Posmult int32 - Negmult int32 - Clock int64 -} - -type BlkpgPartition struct { - Start int64 - Length int64 - Pno int32 - Devname [64]uint8 - Volname [64]uint8 - _ [4]byte -} - -const ( - BLKPG = 0x1269 -) - -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - -type CryptoUserAlg struct { - Name [64]int8 - Driver_name [64]int8 - Module_name [64]int8 - Type uint32 - Mask uint32 - Refcnt uint32 - Flags uint32 -} - -type CryptoStatAEAD struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatAKCipher struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Verify_cnt uint64 - Sign_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatCipher struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatCompress struct { - Type [64]int8 - Compress_cnt uint64 - Compress_tlen uint64 - Decompress_cnt uint64 - Decompress_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatHash struct { - Type [64]int8 - Hash_cnt uint64 - Hash_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatKPP struct { - Type [64]int8 - Setsecret_cnt uint64 - Generate_public_key_cnt uint64 - Compute_shared_secret_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatRNG struct { - Type [64]int8 - Generate_cnt uint64 - Generate_tlen uint64 - Seed_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatLarval struct { - Type [64]int8 -} - -type CryptoReportLarval struct { - Type [64]int8 -} - -type CryptoReportHash struct { - Type [64]int8 - Blocksize uint32 - Digestsize uint32 -} - -type CryptoReportCipher struct { - Type [64]int8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 -} - -type CryptoReportBlkCipher struct { - Type [64]int8 - Geniv [64]int8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 - Ivsize uint32 -} - -type CryptoReportAEAD struct { - Type [64]int8 - Geniv [64]int8 - Blocksize uint32 - Maxauthsize uint32 - Ivsize uint32 -} - -type CryptoReportComp struct { - Type [64]int8 -} - -type CryptoReportRNG struct { - Type [64]int8 - Seedsize uint32 -} - -type CryptoReportAKCipher struct { - Type [64]int8 -} - -type CryptoReportKPP struct { - Type [64]int8 -} - -type CryptoReportAcomp struct { - Type [64]int8 -} - -type LoopInfo struct { - Number int32 - Device uint64 - Inode uint64 - Rdevice uint64 - Offset int32 - Encrypt_type int32 - Encrypt_key_size int32 - Flags int32 - Name [64]int8 - Encrypt_key [32]uint8 - Init [2]uint64 - Reserved [4]int8 - _ [4]byte -} - -type TIPCSubscr struct { - Seq TIPCServiceRange - Timeout uint32 - Filter uint32 - Handle [8]int8 -} - -type TIPCSIOCLNReq struct { - Peer uint32 - Id uint32 - Linkname [68]int8 -} - -type TIPCSIOCNodeIDReq struct { - Peer uint32 - Id [16]int8 -} - -type PPSKInfo struct { - Assert_sequence uint32 - Clear_sequence uint32 - Assert_tu PPSKTime - Clear_tu PPSKTime - Current_mode int32 - _ [4]byte -} - -const ( - PPS_GETPARAMS = 0x800870a1 - PPS_SETPARAMS = 0x400870a2 - PPS_GETCAP = 0x800870a3 - PPS_FETCH = 0xc00870a4 -) - -const ( - PIDFD_NONBLOCK = 0x800 -) - -type SysvIpcPerm struct { - Key int32 - Uid uint32 - Gid uint32 - Cuid uint32 - Cgid uint32 - Mode uint32 - _ [0]uint8 - Seq uint16 - _ uint16 - _ uint64 - _ uint64 -} -type SysvShmDesc struct { - Perm SysvIpcPerm - Segsz uint64 - Atime int64 - Dtime int64 - Ctime int64 - Cpid int32 - Lpid int32 - Nattch uint64 - _ uint64 - _ 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 deleted file mode 100644 index d161233..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +++ /dev/null @@ -1,685 +0,0 @@ -// cgo -godefs -objdir=/tmp/arm/cgo -- -Wall -Werror -static -I/tmp/arm/include linux/types.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm && linux -// +build arm,linux - -package unix - -const ( - SizeofPtr = 0x4 - SizeofLong = 0x4 -) - -type ( - _C_long int32 -) - -type Timespec struct { - Sec int32 - Nsec int32 -} - -type Timeval struct { - Sec int32 - Usec int32 -} - -type Timex struct { - Modes uint32 - Offset int32 - Freq int32 - Maxerror int32 - Esterror int32 - Status int32 - Constant int32 - Precision int32 - Tolerance int32 - Time Timeval - Tick int32 - Ppsfreq int32 - Jitter int32 - Shift int32 - Stabil int32 - Jitcnt int32 - Calcnt int32 - Errcnt int32 - Stbcnt int32 - Tai int32 - _ [44]byte -} - -type Time_t int32 - -type Tms struct { - Utime int32 - Stime int32 - Cutime int32 - Cstime int32 -} - -type Utimbuf struct { - Actime int32 - Modtime int32 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int32 - Ixrss int32 - Idrss int32 - Isrss int32 - Minflt int32 - Majflt int32 - Nswap int32 - Inblock int32 - Oublock int32 - Msgsnd int32 - Msgrcv int32 - Nsignals int32 - Nvcsw int32 - Nivcsw int32 -} - -type Stat_t struct { - Dev uint64 - _ uint16 - _ uint32 - Mode uint32 - Nlink uint32 - Uid uint32 - Gid uint32 - Rdev uint64 - _ uint16 - _ [4]byte - Size int64 - Blksize int32 - _ [4]byte - Blocks int64 - Atim Timespec - Mtim Timespec - Ctim Timespec - Ino uint64 -} - -type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]uint8 - _ [5]byte -} - -type Flock_t struct { - Type int16 - Whence int16 - _ [4]byte - Start int64 - Len int64 - Pid int32 - _ [4]byte -} - -type DmNameList struct { - Dev uint64 - Next uint32 - Name [0]byte - _ [4]byte -} - -const ( - FADV_DONTNEED = 0x4 - FADV_NOREUSE = 0x5 -) - -type RawSockaddrNFCLLCP struct { - Sa_family uint16 - Dev_idx uint32 - Target_idx uint32 - Nfc_protocol uint32 - Dsap uint8 - Ssap uint8 - Service_name [63]uint8 - Service_name_len uint32 -} - -type RawSockaddr struct { - Family uint16 - Data [14]uint8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [96]uint8 -} - -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 -} - -type ifreq struct { - Ifrn [16]byte - Ifru [16]byte -} - -const ( - SizeofSockaddrNFCLLCP = 0x58 - SizeofIovec = 0x8 - SizeofMsghdr = 0x1c - SizeofCmsghdr = 0xc -) - -const ( - SizeofSockFprog = 0x8 -) - -type PtraceRegs struct { - Uregs [18]uint32 -} - -type FdSet struct { - Bits [32]int32 -} - -type Sysinfo_t struct { - Uptime int32 - Loads [3]uint32 - Totalram uint32 - Freeram uint32 - Sharedram uint32 - Bufferram uint32 - Totalswap uint32 - Freeswap uint32 - Procs uint16 - Pad uint16 - Totalhigh uint32 - Freehigh uint32 - Unit uint32 - _ [8]uint8 -} - -type Ustat_t struct { - Tfree int32 - Tinode uint32 - Fname [6]uint8 - Fpack [6]uint8 -} - -type EpollEvent struct { - Events uint32 - PadFd int32 - Fd int32 - Pad int32 -} - -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - -const ( - POLLRDHUP = 0x2000 -) - -type Sigset_t struct { - Val [32]uint32 -} - -const _C__NSIG = 0x41 - -type Siginfo struct { - Signo int32 - Errno int32 - Code int32 - _ [116]byte -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Line uint8 - Cc [19]uint8 - Ispeed uint32 - Ospeed uint32 -} - -type Taskstats struct { - Version uint16 - Ac_exitcode uint32 - Ac_flag uint8 - Ac_nice uint8 - _ [4]byte - Cpu_count uint64 - Cpu_delay_total uint64 - Blkio_count uint64 - Blkio_delay_total uint64 - Swapin_count uint64 - Swapin_delay_total uint64 - Cpu_run_real_total uint64 - Cpu_run_virtual_total uint64 - Ac_comm [32]uint8 - Ac_sched uint8 - Ac_pad [3]uint8 - _ [4]byte - Ac_uid uint32 - Ac_gid uint32 - Ac_pid uint32 - Ac_ppid uint32 - Ac_btime uint32 - _ [4]byte - Ac_etime uint64 - Ac_utime uint64 - Ac_stime uint64 - Ac_minflt uint64 - Ac_majflt uint64 - Coremem uint64 - Virtmem uint64 - Hiwater_rss uint64 - Hiwater_vm uint64 - Read_char uint64 - Write_char uint64 - Read_syscalls uint64 - Write_syscalls uint64 - Read_bytes uint64 - Write_bytes uint64 - Cancelled_write_bytes uint64 - Nvcsw uint64 - Nivcsw uint64 - Ac_utimescaled uint64 - Ac_stimescaled uint64 - Cpu_scaled_run_real_total uint64 - Freepages_count uint64 - Freepages_delay_total uint64 - Thrashing_count uint64 - Thrashing_delay_total uint64 - Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 - Ac_tgid uint32 - _ [4]byte - Ac_tgetime uint64 - Ac_exe_dev uint64 - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -} - -type cpuMask uint32 - -const ( - _NCPUBITS = 0x20 -) - -const ( - CBitFieldMaskBit0 = 0x1 - CBitFieldMaskBit1 = 0x2 - CBitFieldMaskBit2 = 0x4 - CBitFieldMaskBit3 = 0x8 - CBitFieldMaskBit4 = 0x10 - CBitFieldMaskBit5 = 0x20 - CBitFieldMaskBit6 = 0x40 - CBitFieldMaskBit7 = 0x80 - CBitFieldMaskBit8 = 0x100 - CBitFieldMaskBit9 = 0x200 - CBitFieldMaskBit10 = 0x400 - CBitFieldMaskBit11 = 0x800 - CBitFieldMaskBit12 = 0x1000 - CBitFieldMaskBit13 = 0x2000 - CBitFieldMaskBit14 = 0x4000 - CBitFieldMaskBit15 = 0x8000 - CBitFieldMaskBit16 = 0x10000 - CBitFieldMaskBit17 = 0x20000 - CBitFieldMaskBit18 = 0x40000 - CBitFieldMaskBit19 = 0x80000 - CBitFieldMaskBit20 = 0x100000 - CBitFieldMaskBit21 = 0x200000 - CBitFieldMaskBit22 = 0x400000 - CBitFieldMaskBit23 = 0x800000 - CBitFieldMaskBit24 = 0x1000000 - CBitFieldMaskBit25 = 0x2000000 - CBitFieldMaskBit26 = 0x4000000 - CBitFieldMaskBit27 = 0x8000000 - CBitFieldMaskBit28 = 0x10000000 - CBitFieldMaskBit29 = 0x20000000 - CBitFieldMaskBit30 = 0x40000000 - CBitFieldMaskBit31 = 0x80000000 - CBitFieldMaskBit32 = 0x100000000 - CBitFieldMaskBit33 = 0x200000000 - CBitFieldMaskBit34 = 0x400000000 - CBitFieldMaskBit35 = 0x800000000 - CBitFieldMaskBit36 = 0x1000000000 - CBitFieldMaskBit37 = 0x2000000000 - CBitFieldMaskBit38 = 0x4000000000 - CBitFieldMaskBit39 = 0x8000000000 - CBitFieldMaskBit40 = 0x10000000000 - CBitFieldMaskBit41 = 0x20000000000 - CBitFieldMaskBit42 = 0x40000000000 - CBitFieldMaskBit43 = 0x80000000000 - CBitFieldMaskBit44 = 0x100000000000 - CBitFieldMaskBit45 = 0x200000000000 - CBitFieldMaskBit46 = 0x400000000000 - CBitFieldMaskBit47 = 0x800000000000 - CBitFieldMaskBit48 = 0x1000000000000 - CBitFieldMaskBit49 = 0x2000000000000 - CBitFieldMaskBit50 = 0x4000000000000 - CBitFieldMaskBit51 = 0x8000000000000 - CBitFieldMaskBit52 = 0x10000000000000 - CBitFieldMaskBit53 = 0x20000000000000 - CBitFieldMaskBit54 = 0x40000000000000 - CBitFieldMaskBit55 = 0x80000000000000 - CBitFieldMaskBit56 = 0x100000000000000 - CBitFieldMaskBit57 = 0x200000000000000 - CBitFieldMaskBit58 = 0x400000000000000 - CBitFieldMaskBit59 = 0x800000000000000 - CBitFieldMaskBit60 = 0x1000000000000000 - CBitFieldMaskBit61 = 0x2000000000000000 - CBitFieldMaskBit62 = 0x4000000000000000 - CBitFieldMaskBit63 = 0x8000000000000000 -) - -type SockaddrStorage struct { - Family uint16 - _ [122]uint8 - _ uint32 -} - -type HDGeometry struct { - Heads uint8 - Sectors uint8 - Cylinders uint16 - Start uint32 -} - -type Statfs_t struct { - Type int32 - Bsize int32 - Blocks uint64 - Bfree uint64 - Bavail uint64 - Files uint64 - Ffree uint64 - Fsid Fsid - Namelen int32 - Frsize int32 - Flags int32 - Spare [4]int32 - _ [4]byte -} - -type TpacketHdr struct { - Status uint32 - Len uint32 - Snaplen uint32 - Mac uint16 - Net uint16 - Sec uint32 - Usec uint32 -} - -const ( - SizeofTpacketHdr = 0x18 -) - -type RTCPLLInfo struct { - Ctrl int32 - Value int32 - Max int32 - Min int32 - Posmult int32 - Negmult int32 - Clock int32 -} - -type BlkpgPartition struct { - Start int64 - Length int64 - Pno int32 - Devname [64]uint8 - Volname [64]uint8 - _ [4]byte -} - -const ( - BLKPG = 0x1269 -) - -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - -type CryptoUserAlg struct { - Name [64]uint8 - Driver_name [64]uint8 - Module_name [64]uint8 - Type uint32 - Mask uint32 - Refcnt uint32 - Flags uint32 -} - -type CryptoStatAEAD struct { - Type [64]uint8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatAKCipher struct { - Type [64]uint8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Verify_cnt uint64 - Sign_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatCipher struct { - Type [64]uint8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatCompress struct { - Type [64]uint8 - Compress_cnt uint64 - Compress_tlen uint64 - Decompress_cnt uint64 - Decompress_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatHash struct { - Type [64]uint8 - Hash_cnt uint64 - Hash_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatKPP struct { - Type [64]uint8 - Setsecret_cnt uint64 - Generate_public_key_cnt uint64 - Compute_shared_secret_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatRNG struct { - Type [64]uint8 - Generate_cnt uint64 - Generate_tlen uint64 - Seed_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatLarval struct { - Type [64]uint8 -} - -type CryptoReportLarval struct { - Type [64]uint8 -} - -type CryptoReportHash struct { - Type [64]uint8 - Blocksize uint32 - Digestsize uint32 -} - -type CryptoReportCipher struct { - Type [64]uint8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 -} - -type CryptoReportBlkCipher struct { - Type [64]uint8 - Geniv [64]uint8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 - Ivsize uint32 -} - -type CryptoReportAEAD struct { - Type [64]uint8 - Geniv [64]uint8 - Blocksize uint32 - Maxauthsize uint32 - Ivsize uint32 -} - -type CryptoReportComp struct { - Type [64]uint8 -} - -type CryptoReportRNG struct { - Type [64]uint8 - Seedsize uint32 -} - -type CryptoReportAKCipher struct { - Type [64]uint8 -} - -type CryptoReportKPP struct { - Type [64]uint8 -} - -type CryptoReportAcomp struct { - Type [64]uint8 -} - -type LoopInfo struct { - Number int32 - Device uint16 - Inode uint32 - Rdevice uint16 - Offset int32 - Encrypt_type int32 - Encrypt_key_size int32 - Flags int32 - Name [64]uint8 - Encrypt_key [32]uint8 - Init [2]uint32 - Reserved [4]uint8 -} - -type TIPCSubscr struct { - Seq TIPCServiceRange - Timeout uint32 - Filter uint32 - Handle [8]uint8 -} - -type TIPCSIOCLNReq struct { - Peer uint32 - Id uint32 - Linkname [68]uint8 -} - -type TIPCSIOCNodeIDReq struct { - Peer uint32 - Id [16]uint8 -} - -type PPSKInfo struct { - Assert_sequence uint32 - Clear_sequence uint32 - Assert_tu PPSKTime - Clear_tu PPSKTime - Current_mode int32 - _ [4]byte -} - -const ( - PPS_GETPARAMS = 0x800470a1 - PPS_SETPARAMS = 0x400470a2 - PPS_GETCAP = 0x800470a3 - PPS_FETCH = 0xc00470a4 -) - -const ( - PIDFD_NONBLOCK = 0x800 -) - -type SysvIpcPerm struct { - Key int32 - Uid uint32 - Gid uint32 - Cuid uint32 - Cgid uint32 - Mode uint16 - _ [2]uint8 - Seq uint16 - _ uint16 - _ uint32 - _ uint32 -} -type SysvShmDesc struct { - Perm SysvIpcPerm - Segsz uint32 - Atime uint32 - Atime_high uint32 - Dtime uint32 - Dtime_high uint32 - Ctime uint32 - Ctime_high uint32 - Cpid int32 - Lpid int32 - Nattch uint32 - _ uint32 - _ 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 deleted file mode 100644 index c28e555..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +++ /dev/null @@ -1,684 +0,0 @@ -// cgo -godefs -objdir=/tmp/arm64/cgo -- -Wall -Werror -static -I/tmp/arm64/include -fsigned-char linux/types.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm64 && linux -// +build arm64,linux - -package unix - -const ( - SizeofPtr = 0x8 - SizeofLong = 0x8 -) - -type ( - _C_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int64 -} - -type Timex struct { - Modes uint32 - Offset int64 - Freq int64 - Maxerror int64 - Esterror int64 - Status int32 - Constant int64 - Precision int64 - Tolerance int64 - Time Timeval - Tick int64 - Ppsfreq int64 - Jitter int64 - Shift int32 - Stabil int64 - Jitcnt int64 - Calcnt int64 - Errcnt int64 - Stbcnt int64 - Tai int32 - _ [44]byte -} - -type Time_t int64 - -type Tms struct { - Utime int64 - Stime int64 - Cutime int64 - Cstime int64 -} - -type Utimbuf struct { - Actime int64 - Modtime int64 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Stat_t struct { - Dev uint64 - Ino uint64 - Mode uint32 - Nlink uint32 - Uid uint32 - Gid uint32 - Rdev uint64 - _ uint64 - Size int64 - Blksize int32 - _ int32 - Blocks int64 - Atim Timespec - Mtim Timespec - Ctim Timespec - _ [2]int32 -} - -type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]int8 - _ [5]byte -} - -type Flock_t struct { - Type int16 - Whence int16 - Start int64 - Len int64 - Pid int32 - _ [4]byte -} - -type DmNameList struct { - Dev uint64 - Next uint32 - Name [0]byte - _ [4]byte -} - -const ( - FADV_DONTNEED = 0x4 - FADV_NOREUSE = 0x5 -) - -type RawSockaddrNFCLLCP struct { - Sa_family uint16 - Dev_idx uint32 - Target_idx uint32 - Nfc_protocol uint32 - Dsap uint8 - Ssap uint8 - Service_name [63]uint8 - Service_name_len uint64 -} - -type RawSockaddr struct { - Family uint16 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [96]int8 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type Msghdr struct { - Name *byte - Namelen uint32 - Iov *Iovec - Iovlen uint64 - Control *byte - Controllen uint64 - Flags int32 - _ [4]byte -} - -type Cmsghdr struct { - Len uint64 - Level int32 - Type int32 -} - -type ifreq struct { - Ifrn [16]byte - Ifru [24]byte -} - -const ( - SizeofSockaddrNFCLLCP = 0x60 - SizeofIovec = 0x10 - SizeofMsghdr = 0x38 - SizeofCmsghdr = 0x10 -) - -const ( - SizeofSockFprog = 0x10 -) - -type PtraceRegs struct { - Regs [31]uint64 - Sp uint64 - Pc uint64 - Pstate uint64 -} - -type FdSet struct { - Bits [16]int64 -} - -type Sysinfo_t struct { - Uptime int64 - Loads [3]uint64 - Totalram uint64 - Freeram uint64 - Sharedram uint64 - Bufferram uint64 - Totalswap uint64 - Freeswap uint64 - Procs uint16 - Pad uint16 - Totalhigh uint64 - Freehigh uint64 - Unit uint32 - _ [0]int8 - _ [4]byte -} - -type Ustat_t struct { - Tfree int32 - Tinode uint64 - Fname [6]int8 - Fpack [6]int8 - _ [4]byte -} - -type EpollEvent struct { - Events uint32 - PadFd int32 - Fd int32 - Pad int32 -} - -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - -const ( - POLLRDHUP = 0x2000 -) - -type Sigset_t struct { - Val [16]uint64 -} - -const _C__NSIG = 0x41 - -type Siginfo struct { - Signo int32 - Errno int32 - Code int32 - _ int32 - _ [112]byte -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Line uint8 - Cc [19]uint8 - Ispeed uint32 - Ospeed uint32 -} - -type Taskstats struct { - Version uint16 - Ac_exitcode uint32 - Ac_flag uint8 - Ac_nice uint8 - Cpu_count uint64 - Cpu_delay_total uint64 - Blkio_count uint64 - Blkio_delay_total uint64 - Swapin_count uint64 - Swapin_delay_total uint64 - Cpu_run_real_total uint64 - Cpu_run_virtual_total uint64 - Ac_comm [32]int8 - Ac_sched uint8 - Ac_pad [3]uint8 - _ [4]byte - Ac_uid uint32 - Ac_gid uint32 - Ac_pid uint32 - Ac_ppid uint32 - Ac_btime uint32 - Ac_etime uint64 - Ac_utime uint64 - Ac_stime uint64 - Ac_minflt uint64 - Ac_majflt uint64 - Coremem uint64 - Virtmem uint64 - Hiwater_rss uint64 - Hiwater_vm uint64 - Read_char uint64 - Write_char uint64 - Read_syscalls uint64 - Write_syscalls uint64 - Read_bytes uint64 - Write_bytes uint64 - Cancelled_write_bytes uint64 - Nvcsw uint64 - Nivcsw uint64 - Ac_utimescaled uint64 - Ac_stimescaled uint64 - Cpu_scaled_run_real_total uint64 - Freepages_count uint64 - Freepages_delay_total uint64 - Thrashing_count uint64 - Thrashing_delay_total uint64 - Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 - Ac_tgid uint32 - Ac_tgetime uint64 - Ac_exe_dev uint64 - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -} - -type cpuMask uint64 - -const ( - _NCPUBITS = 0x40 -) - -const ( - CBitFieldMaskBit0 = 0x1 - CBitFieldMaskBit1 = 0x2 - CBitFieldMaskBit2 = 0x4 - CBitFieldMaskBit3 = 0x8 - CBitFieldMaskBit4 = 0x10 - CBitFieldMaskBit5 = 0x20 - CBitFieldMaskBit6 = 0x40 - CBitFieldMaskBit7 = 0x80 - CBitFieldMaskBit8 = 0x100 - CBitFieldMaskBit9 = 0x200 - CBitFieldMaskBit10 = 0x400 - CBitFieldMaskBit11 = 0x800 - CBitFieldMaskBit12 = 0x1000 - CBitFieldMaskBit13 = 0x2000 - CBitFieldMaskBit14 = 0x4000 - CBitFieldMaskBit15 = 0x8000 - CBitFieldMaskBit16 = 0x10000 - CBitFieldMaskBit17 = 0x20000 - CBitFieldMaskBit18 = 0x40000 - CBitFieldMaskBit19 = 0x80000 - CBitFieldMaskBit20 = 0x100000 - CBitFieldMaskBit21 = 0x200000 - CBitFieldMaskBit22 = 0x400000 - CBitFieldMaskBit23 = 0x800000 - CBitFieldMaskBit24 = 0x1000000 - CBitFieldMaskBit25 = 0x2000000 - CBitFieldMaskBit26 = 0x4000000 - CBitFieldMaskBit27 = 0x8000000 - CBitFieldMaskBit28 = 0x10000000 - CBitFieldMaskBit29 = 0x20000000 - CBitFieldMaskBit30 = 0x40000000 - CBitFieldMaskBit31 = 0x80000000 - CBitFieldMaskBit32 = 0x100000000 - CBitFieldMaskBit33 = 0x200000000 - CBitFieldMaskBit34 = 0x400000000 - CBitFieldMaskBit35 = 0x800000000 - CBitFieldMaskBit36 = 0x1000000000 - CBitFieldMaskBit37 = 0x2000000000 - CBitFieldMaskBit38 = 0x4000000000 - CBitFieldMaskBit39 = 0x8000000000 - CBitFieldMaskBit40 = 0x10000000000 - CBitFieldMaskBit41 = 0x20000000000 - CBitFieldMaskBit42 = 0x40000000000 - CBitFieldMaskBit43 = 0x80000000000 - CBitFieldMaskBit44 = 0x100000000000 - CBitFieldMaskBit45 = 0x200000000000 - CBitFieldMaskBit46 = 0x400000000000 - CBitFieldMaskBit47 = 0x800000000000 - CBitFieldMaskBit48 = 0x1000000000000 - CBitFieldMaskBit49 = 0x2000000000000 - CBitFieldMaskBit50 = 0x4000000000000 - CBitFieldMaskBit51 = 0x8000000000000 - CBitFieldMaskBit52 = 0x10000000000000 - CBitFieldMaskBit53 = 0x20000000000000 - CBitFieldMaskBit54 = 0x40000000000000 - CBitFieldMaskBit55 = 0x80000000000000 - CBitFieldMaskBit56 = 0x100000000000000 - CBitFieldMaskBit57 = 0x200000000000000 - CBitFieldMaskBit58 = 0x400000000000000 - CBitFieldMaskBit59 = 0x800000000000000 - CBitFieldMaskBit60 = 0x1000000000000000 - CBitFieldMaskBit61 = 0x2000000000000000 - CBitFieldMaskBit62 = 0x4000000000000000 - CBitFieldMaskBit63 = 0x8000000000000000 -) - -type SockaddrStorage struct { - Family uint16 - _ [118]int8 - _ uint64 -} - -type HDGeometry struct { - Heads uint8 - Sectors uint8 - Cylinders uint16 - Start uint64 -} - -type Statfs_t struct { - Type int64 - Bsize int64 - Blocks uint64 - Bfree uint64 - Bavail uint64 - Files uint64 - Ffree uint64 - Fsid Fsid - Namelen int64 - Frsize int64 - Flags int64 - Spare [4]int64 -} - -type TpacketHdr struct { - Status uint64 - Len uint32 - Snaplen uint32 - Mac uint16 - Net uint16 - Sec uint32 - Usec uint32 - _ [4]byte -} - -const ( - SizeofTpacketHdr = 0x20 -) - -type RTCPLLInfo struct { - Ctrl int32 - Value int32 - Max int32 - Min int32 - Posmult int32 - Negmult int32 - Clock int64 -} - -type BlkpgPartition struct { - Start int64 - Length int64 - Pno int32 - Devname [64]uint8 - Volname [64]uint8 - _ [4]byte -} - -const ( - BLKPG = 0x1269 -) - -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - -type CryptoUserAlg struct { - Name [64]int8 - Driver_name [64]int8 - Module_name [64]int8 - Type uint32 - Mask uint32 - Refcnt uint32 - Flags uint32 -} - -type CryptoStatAEAD struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatAKCipher struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Verify_cnt uint64 - Sign_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatCipher struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatCompress struct { - Type [64]int8 - Compress_cnt uint64 - Compress_tlen uint64 - Decompress_cnt uint64 - Decompress_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatHash struct { - Type [64]int8 - Hash_cnt uint64 - Hash_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatKPP struct { - Type [64]int8 - Setsecret_cnt uint64 - Generate_public_key_cnt uint64 - Compute_shared_secret_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatRNG struct { - Type [64]int8 - Generate_cnt uint64 - Generate_tlen uint64 - Seed_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatLarval struct { - Type [64]int8 -} - -type CryptoReportLarval struct { - Type [64]int8 -} - -type CryptoReportHash struct { - Type [64]int8 - Blocksize uint32 - Digestsize uint32 -} - -type CryptoReportCipher struct { - Type [64]int8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 -} - -type CryptoReportBlkCipher struct { - Type [64]int8 - Geniv [64]int8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 - Ivsize uint32 -} - -type CryptoReportAEAD struct { - Type [64]int8 - Geniv [64]int8 - Blocksize uint32 - Maxauthsize uint32 - Ivsize uint32 -} - -type CryptoReportComp struct { - Type [64]int8 -} - -type CryptoReportRNG struct { - Type [64]int8 - Seedsize uint32 -} - -type CryptoReportAKCipher struct { - Type [64]int8 -} - -type CryptoReportKPP struct { - Type [64]int8 -} - -type CryptoReportAcomp struct { - Type [64]int8 -} - -type LoopInfo struct { - Number int32 - Device uint32 - Inode uint64 - Rdevice uint32 - Offset int32 - Encrypt_type int32 - Encrypt_key_size int32 - Flags int32 - Name [64]int8 - Encrypt_key [32]uint8 - Init [2]uint64 - Reserved [4]int8 - _ [4]byte -} - -type TIPCSubscr struct { - Seq TIPCServiceRange - Timeout uint32 - Filter uint32 - Handle [8]int8 -} - -type TIPCSIOCLNReq struct { - Peer uint32 - Id uint32 - Linkname [68]int8 -} - -type TIPCSIOCNodeIDReq struct { - Peer uint32 - Id [16]int8 -} - -type PPSKInfo struct { - Assert_sequence uint32 - Clear_sequence uint32 - Assert_tu PPSKTime - Clear_tu PPSKTime - Current_mode int32 - _ [4]byte -} - -const ( - PPS_GETPARAMS = 0x800870a1 - PPS_SETPARAMS = 0x400870a2 - PPS_GETCAP = 0x800870a3 - PPS_FETCH = 0xc00870a4 -) - -const ( - PIDFD_NONBLOCK = 0x800 -) - -type SysvIpcPerm struct { - Key int32 - Uid uint32 - Gid uint32 - Cuid uint32 - Cgid uint32 - Mode uint32 - _ [0]uint8 - Seq uint16 - _ uint16 - _ uint64 - _ uint64 -} -type SysvShmDesc struct { - Perm SysvIpcPerm - Segsz uint64 - Atime int64 - Dtime int64 - Ctime int64 - Cpid int32 - Lpid int32 - Nattch uint64 - _ uint64 - _ 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 deleted file mode 100644 index 187061f..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +++ /dev/null @@ -1,685 +0,0 @@ -// cgo -godefs -objdir=/tmp/loong64/cgo -- -Wall -Werror -static -I/tmp/loong64/include linux/types.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build loong64 && linux -// +build loong64,linux - -package unix - -const ( - SizeofPtr = 0x8 - SizeofLong = 0x8 -) - -type ( - _C_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int64 -} - -type Timex struct { - Modes uint32 - Offset int64 - Freq int64 - Maxerror int64 - Esterror int64 - Status int32 - Constant int64 - Precision int64 - Tolerance int64 - Time Timeval - Tick int64 - Ppsfreq int64 - Jitter int64 - Shift int32 - Stabil int64 - Jitcnt int64 - Calcnt int64 - Errcnt int64 - Stbcnt int64 - Tai int32 - _ [44]byte -} - -type Time_t int64 - -type Tms struct { - Utime int64 - Stime int64 - Cutime int64 - Cstime int64 -} - -type Utimbuf struct { - Actime int64 - Modtime int64 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Stat_t struct { - Dev uint64 - Ino uint64 - Mode uint32 - Nlink uint32 - Uid uint32 - Gid uint32 - Rdev uint64 - _ uint64 - Size int64 - Blksize int32 - _ int32 - Blocks int64 - Atim Timespec - Mtim Timespec - Ctim Timespec - _ [2]int32 -} - -type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]int8 - _ [5]byte -} - -type Flock_t struct { - Type int16 - Whence int16 - Start int64 - Len int64 - Pid int32 - _ [4]byte -} - -type DmNameList struct { - Dev uint64 - Next uint32 - Name [0]byte - _ [4]byte -} - -const ( - FADV_DONTNEED = 0x4 - FADV_NOREUSE = 0x5 -) - -type RawSockaddrNFCLLCP struct { - Sa_family uint16 - Dev_idx uint32 - Target_idx uint32 - Nfc_protocol uint32 - Dsap uint8 - Ssap uint8 - Service_name [63]uint8 - Service_name_len uint64 -} - -type RawSockaddr struct { - Family uint16 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [96]int8 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type Msghdr struct { - Name *byte - Namelen uint32 - Iov *Iovec - Iovlen uint64 - Control *byte - Controllen uint64 - Flags int32 - _ [4]byte -} - -type Cmsghdr struct { - Len uint64 - Level int32 - Type int32 -} - -type ifreq struct { - Ifrn [16]byte - Ifru [24]byte -} - -const ( - SizeofSockaddrNFCLLCP = 0x60 - SizeofIovec = 0x10 - SizeofMsghdr = 0x38 - SizeofCmsghdr = 0x10 -) - -const ( - SizeofSockFprog = 0x10 -) - -type PtraceRegs struct { - Regs [32]uint64 - Orig_a0 uint64 - Era uint64 - Badv uint64 - Reserved [10]uint64 -} - -type FdSet struct { - Bits [16]int64 -} - -type Sysinfo_t struct { - Uptime int64 - Loads [3]uint64 - Totalram uint64 - Freeram uint64 - Sharedram uint64 - Bufferram uint64 - Totalswap uint64 - Freeswap uint64 - Procs uint16 - Pad uint16 - Totalhigh uint64 - Freehigh uint64 - Unit uint32 - _ [0]int8 - _ [4]byte -} - -type Ustat_t struct { - Tfree int32 - Tinode uint64 - Fname [6]int8 - Fpack [6]int8 - _ [4]byte -} - -type EpollEvent struct { - Events uint32 - _ int32 - Fd int32 - Pad int32 -} - -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - -const ( - POLLRDHUP = 0x2000 -) - -type Sigset_t struct { - Val [16]uint64 -} - -const _C__NSIG = 0x41 - -type Siginfo struct { - Signo int32 - Errno int32 - Code int32 - _ int32 - _ [112]byte -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Line uint8 - Cc [19]uint8 - Ispeed uint32 - Ospeed uint32 -} - -type Taskstats struct { - Version uint16 - Ac_exitcode uint32 - Ac_flag uint8 - Ac_nice uint8 - Cpu_count uint64 - Cpu_delay_total uint64 - Blkio_count uint64 - Blkio_delay_total uint64 - Swapin_count uint64 - Swapin_delay_total uint64 - Cpu_run_real_total uint64 - Cpu_run_virtual_total uint64 - Ac_comm [32]int8 - Ac_sched uint8 - Ac_pad [3]uint8 - _ [4]byte - Ac_uid uint32 - Ac_gid uint32 - Ac_pid uint32 - Ac_ppid uint32 - Ac_btime uint32 - Ac_etime uint64 - Ac_utime uint64 - Ac_stime uint64 - Ac_minflt uint64 - Ac_majflt uint64 - Coremem uint64 - Virtmem uint64 - Hiwater_rss uint64 - Hiwater_vm uint64 - Read_char uint64 - Write_char uint64 - Read_syscalls uint64 - Write_syscalls uint64 - Read_bytes uint64 - Write_bytes uint64 - Cancelled_write_bytes uint64 - Nvcsw uint64 - Nivcsw uint64 - Ac_utimescaled uint64 - Ac_stimescaled uint64 - Cpu_scaled_run_real_total uint64 - Freepages_count uint64 - Freepages_delay_total uint64 - Thrashing_count uint64 - Thrashing_delay_total uint64 - Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 - Ac_tgid uint32 - Ac_tgetime uint64 - Ac_exe_dev uint64 - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -} - -type cpuMask uint64 - -const ( - _NCPUBITS = 0x40 -) - -const ( - CBitFieldMaskBit0 = 0x1 - CBitFieldMaskBit1 = 0x2 - CBitFieldMaskBit2 = 0x4 - CBitFieldMaskBit3 = 0x8 - CBitFieldMaskBit4 = 0x10 - CBitFieldMaskBit5 = 0x20 - CBitFieldMaskBit6 = 0x40 - CBitFieldMaskBit7 = 0x80 - CBitFieldMaskBit8 = 0x100 - CBitFieldMaskBit9 = 0x200 - CBitFieldMaskBit10 = 0x400 - CBitFieldMaskBit11 = 0x800 - CBitFieldMaskBit12 = 0x1000 - CBitFieldMaskBit13 = 0x2000 - CBitFieldMaskBit14 = 0x4000 - CBitFieldMaskBit15 = 0x8000 - CBitFieldMaskBit16 = 0x10000 - CBitFieldMaskBit17 = 0x20000 - CBitFieldMaskBit18 = 0x40000 - CBitFieldMaskBit19 = 0x80000 - CBitFieldMaskBit20 = 0x100000 - CBitFieldMaskBit21 = 0x200000 - CBitFieldMaskBit22 = 0x400000 - CBitFieldMaskBit23 = 0x800000 - CBitFieldMaskBit24 = 0x1000000 - CBitFieldMaskBit25 = 0x2000000 - CBitFieldMaskBit26 = 0x4000000 - CBitFieldMaskBit27 = 0x8000000 - CBitFieldMaskBit28 = 0x10000000 - CBitFieldMaskBit29 = 0x20000000 - CBitFieldMaskBit30 = 0x40000000 - CBitFieldMaskBit31 = 0x80000000 - CBitFieldMaskBit32 = 0x100000000 - CBitFieldMaskBit33 = 0x200000000 - CBitFieldMaskBit34 = 0x400000000 - CBitFieldMaskBit35 = 0x800000000 - CBitFieldMaskBit36 = 0x1000000000 - CBitFieldMaskBit37 = 0x2000000000 - CBitFieldMaskBit38 = 0x4000000000 - CBitFieldMaskBit39 = 0x8000000000 - CBitFieldMaskBit40 = 0x10000000000 - CBitFieldMaskBit41 = 0x20000000000 - CBitFieldMaskBit42 = 0x40000000000 - CBitFieldMaskBit43 = 0x80000000000 - CBitFieldMaskBit44 = 0x100000000000 - CBitFieldMaskBit45 = 0x200000000000 - CBitFieldMaskBit46 = 0x400000000000 - CBitFieldMaskBit47 = 0x800000000000 - CBitFieldMaskBit48 = 0x1000000000000 - CBitFieldMaskBit49 = 0x2000000000000 - CBitFieldMaskBit50 = 0x4000000000000 - CBitFieldMaskBit51 = 0x8000000000000 - CBitFieldMaskBit52 = 0x10000000000000 - CBitFieldMaskBit53 = 0x20000000000000 - CBitFieldMaskBit54 = 0x40000000000000 - CBitFieldMaskBit55 = 0x80000000000000 - CBitFieldMaskBit56 = 0x100000000000000 - CBitFieldMaskBit57 = 0x200000000000000 - CBitFieldMaskBit58 = 0x400000000000000 - CBitFieldMaskBit59 = 0x800000000000000 - CBitFieldMaskBit60 = 0x1000000000000000 - CBitFieldMaskBit61 = 0x2000000000000000 - CBitFieldMaskBit62 = 0x4000000000000000 - CBitFieldMaskBit63 = 0x8000000000000000 -) - -type SockaddrStorage struct { - Family uint16 - _ [118]int8 - _ uint64 -} - -type HDGeometry struct { - Heads uint8 - Sectors uint8 - Cylinders uint16 - Start uint64 -} - -type Statfs_t struct { - Type int64 - Bsize int64 - Blocks uint64 - Bfree uint64 - Bavail uint64 - Files uint64 - Ffree uint64 - Fsid Fsid - Namelen int64 - Frsize int64 - Flags int64 - Spare [4]int64 -} - -type TpacketHdr struct { - Status uint64 - Len uint32 - Snaplen uint32 - Mac uint16 - Net uint16 - Sec uint32 - Usec uint32 - _ [4]byte -} - -const ( - SizeofTpacketHdr = 0x20 -) - -type RTCPLLInfo struct { - Ctrl int32 - Value int32 - Max int32 - Min int32 - Posmult int32 - Negmult int32 - Clock int64 -} - -type BlkpgPartition struct { - Start int64 - Length int64 - Pno int32 - Devname [64]uint8 - Volname [64]uint8 - _ [4]byte -} - -const ( - BLKPG = 0x1269 -) - -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - -type CryptoUserAlg struct { - Name [64]int8 - Driver_name [64]int8 - Module_name [64]int8 - Type uint32 - Mask uint32 - Refcnt uint32 - Flags uint32 -} - -type CryptoStatAEAD struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatAKCipher struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Verify_cnt uint64 - Sign_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatCipher struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatCompress struct { - Type [64]int8 - Compress_cnt uint64 - Compress_tlen uint64 - Decompress_cnt uint64 - Decompress_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatHash struct { - Type [64]int8 - Hash_cnt uint64 - Hash_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatKPP struct { - Type [64]int8 - Setsecret_cnt uint64 - Generate_public_key_cnt uint64 - Compute_shared_secret_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatRNG struct { - Type [64]int8 - Generate_cnt uint64 - Generate_tlen uint64 - Seed_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatLarval struct { - Type [64]int8 -} - -type CryptoReportLarval struct { - Type [64]int8 -} - -type CryptoReportHash struct { - Type [64]int8 - Blocksize uint32 - Digestsize uint32 -} - -type CryptoReportCipher struct { - Type [64]int8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 -} - -type CryptoReportBlkCipher struct { - Type [64]int8 - Geniv [64]int8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 - Ivsize uint32 -} - -type CryptoReportAEAD struct { - Type [64]int8 - Geniv [64]int8 - Blocksize uint32 - Maxauthsize uint32 - Ivsize uint32 -} - -type CryptoReportComp struct { - Type [64]int8 -} - -type CryptoReportRNG struct { - Type [64]int8 - Seedsize uint32 -} - -type CryptoReportAKCipher struct { - Type [64]int8 -} - -type CryptoReportKPP struct { - Type [64]int8 -} - -type CryptoReportAcomp struct { - Type [64]int8 -} - -type LoopInfo struct { - Number int32 - Device uint32 - Inode uint64 - Rdevice uint32 - Offset int32 - Encrypt_type int32 - Encrypt_key_size int32 - Flags int32 - Name [64]int8 - Encrypt_key [32]uint8 - Init [2]uint64 - Reserved [4]int8 - _ [4]byte -} - -type TIPCSubscr struct { - Seq TIPCServiceRange - Timeout uint32 - Filter uint32 - Handle [8]int8 -} - -type TIPCSIOCLNReq struct { - Peer uint32 - Id uint32 - Linkname [68]int8 -} - -type TIPCSIOCNodeIDReq struct { - Peer uint32 - Id [16]int8 -} - -type PPSKInfo struct { - Assert_sequence uint32 - Clear_sequence uint32 - Assert_tu PPSKTime - Clear_tu PPSKTime - Current_mode int32 - _ [4]byte -} - -const ( - PPS_GETPARAMS = 0x800870a1 - PPS_SETPARAMS = 0x400870a2 - PPS_GETCAP = 0x800870a3 - PPS_FETCH = 0xc00870a4 -) - -const ( - PIDFD_NONBLOCK = 0x800 -) - -type SysvIpcPerm struct { - Key int32 - Uid uint32 - Gid uint32 - Cuid uint32 - Cgid uint32 - Mode uint32 - _ [0]uint8 - Seq uint16 - _ uint16 - _ uint64 - _ uint64 -} -type SysvShmDesc struct { - Perm SysvIpcPerm - Segsz uint64 - Atime int64 - Dtime int64 - Ctime int64 - Cpid int32 - Lpid int32 - Nattch uint64 - _ uint64 - _ 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 deleted file mode 100644 index 3691299..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +++ /dev/null @@ -1,690 +0,0 @@ -// cgo -godefs -objdir=/tmp/mips/cgo -- -Wall -Werror -static -I/tmp/mips/include linux/types.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build mips && linux -// +build mips,linux - -package unix - -const ( - SizeofPtr = 0x4 - SizeofLong = 0x4 -) - -type ( - _C_long int32 -) - -type Timespec struct { - Sec int32 - Nsec int32 -} - -type Timeval struct { - Sec int32 - Usec int32 -} - -type Timex struct { - Modes uint32 - Offset int32 - Freq int32 - Maxerror int32 - Esterror int32 - Status int32 - Constant int32 - Precision int32 - Tolerance int32 - Time Timeval - Tick int32 - Ppsfreq int32 - Jitter int32 - Shift int32 - Stabil int32 - Jitcnt int32 - Calcnt int32 - Errcnt int32 - Stbcnt int32 - Tai int32 - _ [44]byte -} - -type Time_t int32 - -type Tms struct { - Utime int32 - Stime int32 - Cutime int32 - Cstime int32 -} - -type Utimbuf struct { - Actime int32 - Modtime int32 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int32 - Ixrss int32 - Idrss int32 - Isrss int32 - Minflt int32 - Majflt int32 - Nswap int32 - Inblock int32 - Oublock int32 - Msgsnd int32 - Msgrcv int32 - Nsignals int32 - Nvcsw int32 - Nivcsw int32 -} - -type Stat_t struct { - Dev uint32 - Pad1 [3]int32 - Ino uint64 - Mode uint32 - Nlink uint32 - Uid uint32 - Gid uint32 - Rdev uint32 - Pad2 [3]int32 - Size int64 - Atim Timespec - Mtim Timespec - Ctim Timespec - Blksize int32 - Pad4 int32 - Blocks int64 - Pad5 [14]int32 -} - -type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]int8 - _ [5]byte -} - -type Flock_t struct { - Type int16 - Whence int16 - _ [4]byte - Start int64 - Len int64 - Pid int32 - _ [4]byte -} - -type DmNameList struct { - Dev uint64 - Next uint32 - Name [0]byte - _ [4]byte -} - -const ( - FADV_DONTNEED = 0x4 - FADV_NOREUSE = 0x5 -) - -type RawSockaddrNFCLLCP struct { - Sa_family uint16 - Dev_idx uint32 - Target_idx uint32 - Nfc_protocol uint32 - Dsap uint8 - Ssap uint8 - Service_name [63]uint8 - Service_name_len uint32 -} - -type RawSockaddr struct { - Family uint16 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [96]int8 -} - -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 -} - -type ifreq struct { - Ifrn [16]byte - Ifru [16]byte -} - -const ( - SizeofSockaddrNFCLLCP = 0x58 - SizeofIovec = 0x8 - SizeofMsghdr = 0x1c - SizeofCmsghdr = 0xc -) - -const ( - SizeofSockFprog = 0x8 -) - -type PtraceRegs struct { - Regs [32]uint64 - Lo uint64 - Hi uint64 - Epc uint64 - Badvaddr uint64 - Status uint64 - Cause uint64 -} - -type FdSet struct { - Bits [32]int32 -} - -type Sysinfo_t struct { - Uptime int32 - Loads [3]uint32 - Totalram uint32 - Freeram uint32 - Sharedram uint32 - Bufferram uint32 - Totalswap uint32 - Freeswap uint32 - Procs uint16 - Pad uint16 - Totalhigh uint32 - Freehigh uint32 - Unit uint32 - _ [8]int8 -} - -type Ustat_t struct { - Tfree int32 - Tinode uint32 - Fname [6]int8 - Fpack [6]int8 -} - -type EpollEvent struct { - Events uint32 - PadFd int32 - Fd int32 - Pad int32 -} - -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - -const ( - POLLRDHUP = 0x2000 -) - -type Sigset_t struct { - Val [32]uint32 -} - -const _C__NSIG = 0x80 - -type Siginfo struct { - Signo int32 - Code int32 - Errno int32 - _ [116]byte -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Line uint8 - Cc [23]uint8 - Ispeed uint32 - Ospeed uint32 -} - -type Taskstats struct { - Version uint16 - Ac_exitcode uint32 - Ac_flag uint8 - Ac_nice uint8 - _ [4]byte - Cpu_count uint64 - Cpu_delay_total uint64 - Blkio_count uint64 - Blkio_delay_total uint64 - Swapin_count uint64 - Swapin_delay_total uint64 - Cpu_run_real_total uint64 - Cpu_run_virtual_total uint64 - Ac_comm [32]int8 - Ac_sched uint8 - Ac_pad [3]uint8 - _ [4]byte - Ac_uid uint32 - Ac_gid uint32 - Ac_pid uint32 - Ac_ppid uint32 - Ac_btime uint32 - _ [4]byte - Ac_etime uint64 - Ac_utime uint64 - Ac_stime uint64 - Ac_minflt uint64 - Ac_majflt uint64 - Coremem uint64 - Virtmem uint64 - Hiwater_rss uint64 - Hiwater_vm uint64 - Read_char uint64 - Write_char uint64 - Read_syscalls uint64 - Write_syscalls uint64 - Read_bytes uint64 - Write_bytes uint64 - Cancelled_write_bytes uint64 - Nvcsw uint64 - Nivcsw uint64 - Ac_utimescaled uint64 - Ac_stimescaled uint64 - Cpu_scaled_run_real_total uint64 - Freepages_count uint64 - Freepages_delay_total uint64 - Thrashing_count uint64 - Thrashing_delay_total uint64 - Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 - Ac_tgid uint32 - _ [4]byte - Ac_tgetime uint64 - Ac_exe_dev uint64 - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -} - -type cpuMask uint32 - -const ( - _NCPUBITS = 0x20 -) - -const ( - CBitFieldMaskBit0 = 0x8000000000000000 - CBitFieldMaskBit1 = 0x4000000000000000 - CBitFieldMaskBit2 = 0x2000000000000000 - CBitFieldMaskBit3 = 0x1000000000000000 - CBitFieldMaskBit4 = 0x800000000000000 - CBitFieldMaskBit5 = 0x400000000000000 - CBitFieldMaskBit6 = 0x200000000000000 - CBitFieldMaskBit7 = 0x100000000000000 - CBitFieldMaskBit8 = 0x80000000000000 - CBitFieldMaskBit9 = 0x40000000000000 - CBitFieldMaskBit10 = 0x20000000000000 - CBitFieldMaskBit11 = 0x10000000000000 - CBitFieldMaskBit12 = 0x8000000000000 - CBitFieldMaskBit13 = 0x4000000000000 - CBitFieldMaskBit14 = 0x2000000000000 - CBitFieldMaskBit15 = 0x1000000000000 - CBitFieldMaskBit16 = 0x800000000000 - CBitFieldMaskBit17 = 0x400000000000 - CBitFieldMaskBit18 = 0x200000000000 - CBitFieldMaskBit19 = 0x100000000000 - CBitFieldMaskBit20 = 0x80000000000 - CBitFieldMaskBit21 = 0x40000000000 - CBitFieldMaskBit22 = 0x20000000000 - CBitFieldMaskBit23 = 0x10000000000 - CBitFieldMaskBit24 = 0x8000000000 - CBitFieldMaskBit25 = 0x4000000000 - CBitFieldMaskBit26 = 0x2000000000 - CBitFieldMaskBit27 = 0x1000000000 - CBitFieldMaskBit28 = 0x800000000 - CBitFieldMaskBit29 = 0x400000000 - CBitFieldMaskBit30 = 0x200000000 - CBitFieldMaskBit31 = 0x100000000 - CBitFieldMaskBit32 = 0x80000000 - CBitFieldMaskBit33 = 0x40000000 - CBitFieldMaskBit34 = 0x20000000 - CBitFieldMaskBit35 = 0x10000000 - CBitFieldMaskBit36 = 0x8000000 - CBitFieldMaskBit37 = 0x4000000 - CBitFieldMaskBit38 = 0x2000000 - CBitFieldMaskBit39 = 0x1000000 - CBitFieldMaskBit40 = 0x800000 - CBitFieldMaskBit41 = 0x400000 - CBitFieldMaskBit42 = 0x200000 - CBitFieldMaskBit43 = 0x100000 - CBitFieldMaskBit44 = 0x80000 - CBitFieldMaskBit45 = 0x40000 - CBitFieldMaskBit46 = 0x20000 - CBitFieldMaskBit47 = 0x10000 - CBitFieldMaskBit48 = 0x8000 - CBitFieldMaskBit49 = 0x4000 - CBitFieldMaskBit50 = 0x2000 - CBitFieldMaskBit51 = 0x1000 - CBitFieldMaskBit52 = 0x800 - CBitFieldMaskBit53 = 0x400 - CBitFieldMaskBit54 = 0x200 - CBitFieldMaskBit55 = 0x100 - CBitFieldMaskBit56 = 0x80 - CBitFieldMaskBit57 = 0x40 - CBitFieldMaskBit58 = 0x20 - CBitFieldMaskBit59 = 0x10 - CBitFieldMaskBit60 = 0x8 - CBitFieldMaskBit61 = 0x4 - CBitFieldMaskBit62 = 0x2 - CBitFieldMaskBit63 = 0x1 -) - -type SockaddrStorage struct { - Family uint16 - _ [122]int8 - _ uint32 -} - -type HDGeometry struct { - Heads uint8 - Sectors uint8 - Cylinders uint16 - Start uint32 -} - -type Statfs_t struct { - Type int32 - Bsize int32 - Frsize int32 - _ [4]byte - Blocks uint64 - Bfree uint64 - Files uint64 - Ffree uint64 - Bavail uint64 - Fsid Fsid - Namelen int32 - Flags int32 - Spare [5]int32 - _ [4]byte -} - -type TpacketHdr struct { - Status uint32 - Len uint32 - Snaplen uint32 - Mac uint16 - Net uint16 - Sec uint32 - Usec uint32 -} - -const ( - SizeofTpacketHdr = 0x18 -) - -type RTCPLLInfo struct { - Ctrl int32 - Value int32 - Max int32 - Min int32 - Posmult int32 - Negmult int32 - Clock int32 -} - -type BlkpgPartition struct { - Start int64 - Length int64 - Pno int32 - Devname [64]uint8 - Volname [64]uint8 - _ [4]byte -} - -const ( - BLKPG = 0x20001269 -) - -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - -type CryptoUserAlg struct { - Name [64]int8 - Driver_name [64]int8 - Module_name [64]int8 - Type uint32 - Mask uint32 - Refcnt uint32 - Flags uint32 -} - -type CryptoStatAEAD struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatAKCipher struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Verify_cnt uint64 - Sign_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatCipher struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatCompress struct { - Type [64]int8 - Compress_cnt uint64 - Compress_tlen uint64 - Decompress_cnt uint64 - Decompress_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatHash struct { - Type [64]int8 - Hash_cnt uint64 - Hash_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatKPP struct { - Type [64]int8 - Setsecret_cnt uint64 - Generate_public_key_cnt uint64 - Compute_shared_secret_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatRNG struct { - Type [64]int8 - Generate_cnt uint64 - Generate_tlen uint64 - Seed_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatLarval struct { - Type [64]int8 -} - -type CryptoReportLarval struct { - Type [64]int8 -} - -type CryptoReportHash struct { - Type [64]int8 - Blocksize uint32 - Digestsize uint32 -} - -type CryptoReportCipher struct { - Type [64]int8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 -} - -type CryptoReportBlkCipher struct { - Type [64]int8 - Geniv [64]int8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 - Ivsize uint32 -} - -type CryptoReportAEAD struct { - Type [64]int8 - Geniv [64]int8 - Blocksize uint32 - Maxauthsize uint32 - Ivsize uint32 -} - -type CryptoReportComp struct { - Type [64]int8 -} - -type CryptoReportRNG struct { - Type [64]int8 - Seedsize uint32 -} - -type CryptoReportAKCipher struct { - Type [64]int8 -} - -type CryptoReportKPP struct { - Type [64]int8 -} - -type CryptoReportAcomp struct { - Type [64]int8 -} - -type LoopInfo struct { - Number int32 - Device uint32 - Inode uint32 - Rdevice uint32 - Offset int32 - Encrypt_type int32 - Encrypt_key_size int32 - Flags int32 - Name [64]int8 - Encrypt_key [32]uint8 - Init [2]uint32 - Reserved [4]int8 -} - -type TIPCSubscr struct { - Seq TIPCServiceRange - Timeout uint32 - Filter uint32 - Handle [8]int8 -} - -type TIPCSIOCLNReq struct { - Peer uint32 - Id uint32 - Linkname [68]int8 -} - -type TIPCSIOCNodeIDReq struct { - Peer uint32 - Id [16]int8 -} - -type PPSKInfo struct { - Assert_sequence uint32 - Clear_sequence uint32 - Assert_tu PPSKTime - Clear_tu PPSKTime - Current_mode int32 - _ [4]byte -} - -const ( - PPS_GETPARAMS = 0x400470a1 - PPS_SETPARAMS = 0x800470a2 - PPS_GETCAP = 0x400470a3 - PPS_FETCH = 0xc00470a4 -) - -const ( - PIDFD_NONBLOCK = 0x80 -) - -type SysvIpcPerm struct { - Key int32 - Uid uint32 - Gid uint32 - Cuid uint32 - Cgid uint32 - Mode uint32 - _ [0]uint8 - Seq uint16 - _ uint16 - _ uint32 - _ uint32 -} -type SysvShmDesc struct { - Perm SysvIpcPerm - Segsz uint32 - Atime uint32 - Dtime uint32 - Ctime uint32 - Cpid int32 - Lpid int32 - Nattch uint32 - Atime_high uint16 - Dtime_high uint16 - Ctime_high uint16 - _ uint16 -} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go deleted file mode 100644 index 7473468..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +++ /dev/null @@ -1,687 +0,0 @@ -// cgo -godefs -objdir=/tmp/mips64/cgo -- -Wall -Werror -static -I/tmp/mips64/include linux/types.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build mips64 && linux -// +build mips64,linux - -package unix - -const ( - SizeofPtr = 0x8 - SizeofLong = 0x8 -) - -type ( - _C_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int64 -} - -type Timex struct { - Modes uint32 - Offset int64 - Freq int64 - Maxerror int64 - Esterror int64 - Status int32 - Constant int64 - Precision int64 - Tolerance int64 - Time Timeval - Tick int64 - Ppsfreq int64 - Jitter int64 - Shift int32 - Stabil int64 - Jitcnt int64 - Calcnt int64 - Errcnt int64 - Stbcnt int64 - Tai int32 - _ [44]byte -} - -type Time_t int64 - -type Tms struct { - Utime int64 - Stime int64 - Cutime int64 - Cstime int64 -} - -type Utimbuf struct { - Actime int64 - Modtime int64 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Stat_t struct { - Dev uint32 - Pad1 [3]uint32 - Ino uint64 - Mode uint32 - Nlink uint32 - Uid uint32 - Gid uint32 - Rdev uint32 - Pad2 [3]uint32 - Size int64 - Atim Timespec - Mtim Timespec - Ctim Timespec - Blksize uint32 - Pad4 uint32 - Blocks int64 -} - -type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]int8 - _ [5]byte -} - -type Flock_t struct { - Type int16 - Whence int16 - Start int64 - Len int64 - Pid int32 - _ [4]byte -} - -type DmNameList struct { - Dev uint64 - Next uint32 - Name [0]byte - _ [4]byte -} - -const ( - FADV_DONTNEED = 0x4 - FADV_NOREUSE = 0x5 -) - -type RawSockaddrNFCLLCP struct { - Sa_family uint16 - Dev_idx uint32 - Target_idx uint32 - Nfc_protocol uint32 - Dsap uint8 - Ssap uint8 - Service_name [63]uint8 - Service_name_len uint64 -} - -type RawSockaddr struct { - Family uint16 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [96]int8 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type Msghdr struct { - Name *byte - Namelen uint32 - Iov *Iovec - Iovlen uint64 - Control *byte - Controllen uint64 - Flags int32 - _ [4]byte -} - -type Cmsghdr struct { - Len uint64 - Level int32 - Type int32 -} - -type ifreq struct { - Ifrn [16]byte - Ifru [24]byte -} - -const ( - SizeofSockaddrNFCLLCP = 0x60 - SizeofIovec = 0x10 - SizeofMsghdr = 0x38 - SizeofCmsghdr = 0x10 -) - -const ( - SizeofSockFprog = 0x10 -) - -type PtraceRegs struct { - Regs [32]uint64 - Lo uint64 - Hi uint64 - Epc uint64 - Badvaddr uint64 - Status uint64 - Cause uint64 -} - -type FdSet struct { - Bits [16]int64 -} - -type Sysinfo_t struct { - Uptime int64 - Loads [3]uint64 - Totalram uint64 - Freeram uint64 - Sharedram uint64 - Bufferram uint64 - Totalswap uint64 - Freeswap uint64 - Procs uint16 - Pad uint16 - Totalhigh uint64 - Freehigh uint64 - Unit uint32 - _ [0]int8 - _ [4]byte -} - -type Ustat_t struct { - Tfree int32 - Tinode uint64 - Fname [6]int8 - Fpack [6]int8 - _ [4]byte -} - -type EpollEvent struct { - Events uint32 - _ int32 - Fd int32 - Pad int32 -} - -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - -const ( - POLLRDHUP = 0x2000 -) - -type Sigset_t struct { - Val [16]uint64 -} - -const _C__NSIG = 0x80 - -type Siginfo struct { - Signo int32 - Code int32 - Errno int32 - _ int32 - _ [112]byte -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Line uint8 - Cc [23]uint8 - Ispeed uint32 - Ospeed uint32 -} - -type Taskstats struct { - Version uint16 - Ac_exitcode uint32 - Ac_flag uint8 - Ac_nice uint8 - Cpu_count uint64 - Cpu_delay_total uint64 - Blkio_count uint64 - Blkio_delay_total uint64 - Swapin_count uint64 - Swapin_delay_total uint64 - Cpu_run_real_total uint64 - Cpu_run_virtual_total uint64 - Ac_comm [32]int8 - Ac_sched uint8 - Ac_pad [3]uint8 - _ [4]byte - Ac_uid uint32 - Ac_gid uint32 - Ac_pid uint32 - Ac_ppid uint32 - Ac_btime uint32 - Ac_etime uint64 - Ac_utime uint64 - Ac_stime uint64 - Ac_minflt uint64 - Ac_majflt uint64 - Coremem uint64 - Virtmem uint64 - Hiwater_rss uint64 - Hiwater_vm uint64 - Read_char uint64 - Write_char uint64 - Read_syscalls uint64 - Write_syscalls uint64 - Read_bytes uint64 - Write_bytes uint64 - Cancelled_write_bytes uint64 - Nvcsw uint64 - Nivcsw uint64 - Ac_utimescaled uint64 - Ac_stimescaled uint64 - Cpu_scaled_run_real_total uint64 - Freepages_count uint64 - Freepages_delay_total uint64 - Thrashing_count uint64 - Thrashing_delay_total uint64 - Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 - Ac_tgid uint32 - Ac_tgetime uint64 - Ac_exe_dev uint64 - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -} - -type cpuMask uint64 - -const ( - _NCPUBITS = 0x40 -) - -const ( - CBitFieldMaskBit0 = 0x8000000000000000 - CBitFieldMaskBit1 = 0x4000000000000000 - CBitFieldMaskBit2 = 0x2000000000000000 - CBitFieldMaskBit3 = 0x1000000000000000 - CBitFieldMaskBit4 = 0x800000000000000 - CBitFieldMaskBit5 = 0x400000000000000 - CBitFieldMaskBit6 = 0x200000000000000 - CBitFieldMaskBit7 = 0x100000000000000 - CBitFieldMaskBit8 = 0x80000000000000 - CBitFieldMaskBit9 = 0x40000000000000 - CBitFieldMaskBit10 = 0x20000000000000 - CBitFieldMaskBit11 = 0x10000000000000 - CBitFieldMaskBit12 = 0x8000000000000 - CBitFieldMaskBit13 = 0x4000000000000 - CBitFieldMaskBit14 = 0x2000000000000 - CBitFieldMaskBit15 = 0x1000000000000 - CBitFieldMaskBit16 = 0x800000000000 - CBitFieldMaskBit17 = 0x400000000000 - CBitFieldMaskBit18 = 0x200000000000 - CBitFieldMaskBit19 = 0x100000000000 - CBitFieldMaskBit20 = 0x80000000000 - CBitFieldMaskBit21 = 0x40000000000 - CBitFieldMaskBit22 = 0x20000000000 - CBitFieldMaskBit23 = 0x10000000000 - CBitFieldMaskBit24 = 0x8000000000 - CBitFieldMaskBit25 = 0x4000000000 - CBitFieldMaskBit26 = 0x2000000000 - CBitFieldMaskBit27 = 0x1000000000 - CBitFieldMaskBit28 = 0x800000000 - CBitFieldMaskBit29 = 0x400000000 - CBitFieldMaskBit30 = 0x200000000 - CBitFieldMaskBit31 = 0x100000000 - CBitFieldMaskBit32 = 0x80000000 - CBitFieldMaskBit33 = 0x40000000 - CBitFieldMaskBit34 = 0x20000000 - CBitFieldMaskBit35 = 0x10000000 - CBitFieldMaskBit36 = 0x8000000 - CBitFieldMaskBit37 = 0x4000000 - CBitFieldMaskBit38 = 0x2000000 - CBitFieldMaskBit39 = 0x1000000 - CBitFieldMaskBit40 = 0x800000 - CBitFieldMaskBit41 = 0x400000 - CBitFieldMaskBit42 = 0x200000 - CBitFieldMaskBit43 = 0x100000 - CBitFieldMaskBit44 = 0x80000 - CBitFieldMaskBit45 = 0x40000 - CBitFieldMaskBit46 = 0x20000 - CBitFieldMaskBit47 = 0x10000 - CBitFieldMaskBit48 = 0x8000 - CBitFieldMaskBit49 = 0x4000 - CBitFieldMaskBit50 = 0x2000 - CBitFieldMaskBit51 = 0x1000 - CBitFieldMaskBit52 = 0x800 - CBitFieldMaskBit53 = 0x400 - CBitFieldMaskBit54 = 0x200 - CBitFieldMaskBit55 = 0x100 - CBitFieldMaskBit56 = 0x80 - CBitFieldMaskBit57 = 0x40 - CBitFieldMaskBit58 = 0x20 - CBitFieldMaskBit59 = 0x10 - CBitFieldMaskBit60 = 0x8 - CBitFieldMaskBit61 = 0x4 - CBitFieldMaskBit62 = 0x2 - CBitFieldMaskBit63 = 0x1 -) - -type SockaddrStorage struct { - Family uint16 - _ [118]int8 - _ uint64 -} - -type HDGeometry struct { - Heads uint8 - Sectors uint8 - Cylinders uint16 - Start uint64 -} - -type Statfs_t struct { - Type int64 - Bsize int64 - Frsize int64 - Blocks uint64 - Bfree uint64 - Files uint64 - Ffree uint64 - Bavail uint64 - Fsid Fsid - Namelen int64 - Flags int64 - Spare [5]int64 -} - -type TpacketHdr struct { - Status uint64 - Len uint32 - Snaplen uint32 - Mac uint16 - Net uint16 - Sec uint32 - Usec uint32 - _ [4]byte -} - -const ( - SizeofTpacketHdr = 0x20 -) - -type RTCPLLInfo struct { - Ctrl int32 - Value int32 - Max int32 - Min int32 - Posmult int32 - Negmult int32 - Clock int64 -} - -type BlkpgPartition struct { - Start int64 - Length int64 - Pno int32 - Devname [64]uint8 - Volname [64]uint8 - _ [4]byte -} - -const ( - BLKPG = 0x20001269 -) - -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - -type CryptoUserAlg struct { - Name [64]int8 - Driver_name [64]int8 - Module_name [64]int8 - Type uint32 - Mask uint32 - Refcnt uint32 - Flags uint32 -} - -type CryptoStatAEAD struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatAKCipher struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Verify_cnt uint64 - Sign_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatCipher struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatCompress struct { - Type [64]int8 - Compress_cnt uint64 - Compress_tlen uint64 - Decompress_cnt uint64 - Decompress_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatHash struct { - Type [64]int8 - Hash_cnt uint64 - Hash_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatKPP struct { - Type [64]int8 - Setsecret_cnt uint64 - Generate_public_key_cnt uint64 - Compute_shared_secret_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatRNG struct { - Type [64]int8 - Generate_cnt uint64 - Generate_tlen uint64 - Seed_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatLarval struct { - Type [64]int8 -} - -type CryptoReportLarval struct { - Type [64]int8 -} - -type CryptoReportHash struct { - Type [64]int8 - Blocksize uint32 - Digestsize uint32 -} - -type CryptoReportCipher struct { - Type [64]int8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 -} - -type CryptoReportBlkCipher struct { - Type [64]int8 - Geniv [64]int8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 - Ivsize uint32 -} - -type CryptoReportAEAD struct { - Type [64]int8 - Geniv [64]int8 - Blocksize uint32 - Maxauthsize uint32 - Ivsize uint32 -} - -type CryptoReportComp struct { - Type [64]int8 -} - -type CryptoReportRNG struct { - Type [64]int8 - Seedsize uint32 -} - -type CryptoReportAKCipher struct { - Type [64]int8 -} - -type CryptoReportKPP struct { - Type [64]int8 -} - -type CryptoReportAcomp struct { - Type [64]int8 -} - -type LoopInfo struct { - Number int32 - Device uint32 - Inode uint64 - Rdevice uint32 - Offset int32 - Encrypt_type int32 - Encrypt_key_size int32 - Flags int32 - Name [64]int8 - Encrypt_key [32]uint8 - Init [2]uint64 - Reserved [4]int8 - _ [4]byte -} - -type TIPCSubscr struct { - Seq TIPCServiceRange - Timeout uint32 - Filter uint32 - Handle [8]int8 -} - -type TIPCSIOCLNReq struct { - Peer uint32 - Id uint32 - Linkname [68]int8 -} - -type TIPCSIOCNodeIDReq struct { - Peer uint32 - Id [16]int8 -} - -type PPSKInfo struct { - Assert_sequence uint32 - Clear_sequence uint32 - Assert_tu PPSKTime - Clear_tu PPSKTime - Current_mode int32 - _ [4]byte -} - -const ( - PPS_GETPARAMS = 0x400870a1 - PPS_SETPARAMS = 0x800870a2 - PPS_GETCAP = 0x400870a3 - PPS_FETCH = 0xc00870a4 -) - -const ( - PIDFD_NONBLOCK = 0x80 -) - -type SysvIpcPerm struct { - Key int32 - Uid uint32 - Gid uint32 - Cuid uint32 - Cgid uint32 - Mode uint32 - _ [0]uint8 - Seq uint16 - _ uint16 - _ uint64 - _ uint64 -} -type SysvShmDesc struct { - Perm SysvIpcPerm - Segsz uint64 - Atime int64 - Dtime int64 - Ctime int64 - Cpid int32 - Lpid int32 - Nattch uint64 - _ uint64 - _ 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 deleted file mode 100644 index ed94485..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +++ /dev/null @@ -1,687 +0,0 @@ -// cgo -godefs -objdir=/tmp/mips64le/cgo -- -Wall -Werror -static -I/tmp/mips64le/include linux/types.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build mips64le && linux -// +build mips64le,linux - -package unix - -const ( - SizeofPtr = 0x8 - SizeofLong = 0x8 -) - -type ( - _C_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int64 -} - -type Timex struct { - Modes uint32 - Offset int64 - Freq int64 - Maxerror int64 - Esterror int64 - Status int32 - Constant int64 - Precision int64 - Tolerance int64 - Time Timeval - Tick int64 - Ppsfreq int64 - Jitter int64 - Shift int32 - Stabil int64 - Jitcnt int64 - Calcnt int64 - Errcnt int64 - Stbcnt int64 - Tai int32 - _ [44]byte -} - -type Time_t int64 - -type Tms struct { - Utime int64 - Stime int64 - Cutime int64 - Cstime int64 -} - -type Utimbuf struct { - Actime int64 - Modtime int64 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Stat_t struct { - Dev uint32 - Pad1 [3]uint32 - Ino uint64 - Mode uint32 - Nlink uint32 - Uid uint32 - Gid uint32 - Rdev uint32 - Pad2 [3]uint32 - Size int64 - Atim Timespec - Mtim Timespec - Ctim Timespec - Blksize uint32 - Pad4 uint32 - Blocks int64 -} - -type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]int8 - _ [5]byte -} - -type Flock_t struct { - Type int16 - Whence int16 - Start int64 - Len int64 - Pid int32 - _ [4]byte -} - -type DmNameList struct { - Dev uint64 - Next uint32 - Name [0]byte - _ [4]byte -} - -const ( - FADV_DONTNEED = 0x4 - FADV_NOREUSE = 0x5 -) - -type RawSockaddrNFCLLCP struct { - Sa_family uint16 - Dev_idx uint32 - Target_idx uint32 - Nfc_protocol uint32 - Dsap uint8 - Ssap uint8 - Service_name [63]uint8 - Service_name_len uint64 -} - -type RawSockaddr struct { - Family uint16 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [96]int8 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type Msghdr struct { - Name *byte - Namelen uint32 - Iov *Iovec - Iovlen uint64 - Control *byte - Controllen uint64 - Flags int32 - _ [4]byte -} - -type Cmsghdr struct { - Len uint64 - Level int32 - Type int32 -} - -type ifreq struct { - Ifrn [16]byte - Ifru [24]byte -} - -const ( - SizeofSockaddrNFCLLCP = 0x60 - SizeofIovec = 0x10 - SizeofMsghdr = 0x38 - SizeofCmsghdr = 0x10 -) - -const ( - SizeofSockFprog = 0x10 -) - -type PtraceRegs struct { - Regs [32]uint64 - Lo uint64 - Hi uint64 - Epc uint64 - Badvaddr uint64 - Status uint64 - Cause uint64 -} - -type FdSet struct { - Bits [16]int64 -} - -type Sysinfo_t struct { - Uptime int64 - Loads [3]uint64 - Totalram uint64 - Freeram uint64 - Sharedram uint64 - Bufferram uint64 - Totalswap uint64 - Freeswap uint64 - Procs uint16 - Pad uint16 - Totalhigh uint64 - Freehigh uint64 - Unit uint32 - _ [0]int8 - _ [4]byte -} - -type Ustat_t struct { - Tfree int32 - Tinode uint64 - Fname [6]int8 - Fpack [6]int8 - _ [4]byte -} - -type EpollEvent struct { - Events uint32 - _ int32 - Fd int32 - Pad int32 -} - -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - -const ( - POLLRDHUP = 0x2000 -) - -type Sigset_t struct { - Val [16]uint64 -} - -const _C__NSIG = 0x80 - -type Siginfo struct { - Signo int32 - Code int32 - Errno int32 - _ int32 - _ [112]byte -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Line uint8 - Cc [23]uint8 - Ispeed uint32 - Ospeed uint32 -} - -type Taskstats struct { - Version uint16 - Ac_exitcode uint32 - Ac_flag uint8 - Ac_nice uint8 - Cpu_count uint64 - Cpu_delay_total uint64 - Blkio_count uint64 - Blkio_delay_total uint64 - Swapin_count uint64 - Swapin_delay_total uint64 - Cpu_run_real_total uint64 - Cpu_run_virtual_total uint64 - Ac_comm [32]int8 - Ac_sched uint8 - Ac_pad [3]uint8 - _ [4]byte - Ac_uid uint32 - Ac_gid uint32 - Ac_pid uint32 - Ac_ppid uint32 - Ac_btime uint32 - Ac_etime uint64 - Ac_utime uint64 - Ac_stime uint64 - Ac_minflt uint64 - Ac_majflt uint64 - Coremem uint64 - Virtmem uint64 - Hiwater_rss uint64 - Hiwater_vm uint64 - Read_char uint64 - Write_char uint64 - Read_syscalls uint64 - Write_syscalls uint64 - Read_bytes uint64 - Write_bytes uint64 - Cancelled_write_bytes uint64 - Nvcsw uint64 - Nivcsw uint64 - Ac_utimescaled uint64 - Ac_stimescaled uint64 - Cpu_scaled_run_real_total uint64 - Freepages_count uint64 - Freepages_delay_total uint64 - Thrashing_count uint64 - Thrashing_delay_total uint64 - Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 - Ac_tgid uint32 - Ac_tgetime uint64 - Ac_exe_dev uint64 - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -} - -type cpuMask uint64 - -const ( - _NCPUBITS = 0x40 -) - -const ( - CBitFieldMaskBit0 = 0x1 - CBitFieldMaskBit1 = 0x2 - CBitFieldMaskBit2 = 0x4 - CBitFieldMaskBit3 = 0x8 - CBitFieldMaskBit4 = 0x10 - CBitFieldMaskBit5 = 0x20 - CBitFieldMaskBit6 = 0x40 - CBitFieldMaskBit7 = 0x80 - CBitFieldMaskBit8 = 0x100 - CBitFieldMaskBit9 = 0x200 - CBitFieldMaskBit10 = 0x400 - CBitFieldMaskBit11 = 0x800 - CBitFieldMaskBit12 = 0x1000 - CBitFieldMaskBit13 = 0x2000 - CBitFieldMaskBit14 = 0x4000 - CBitFieldMaskBit15 = 0x8000 - CBitFieldMaskBit16 = 0x10000 - CBitFieldMaskBit17 = 0x20000 - CBitFieldMaskBit18 = 0x40000 - CBitFieldMaskBit19 = 0x80000 - CBitFieldMaskBit20 = 0x100000 - CBitFieldMaskBit21 = 0x200000 - CBitFieldMaskBit22 = 0x400000 - CBitFieldMaskBit23 = 0x800000 - CBitFieldMaskBit24 = 0x1000000 - CBitFieldMaskBit25 = 0x2000000 - CBitFieldMaskBit26 = 0x4000000 - CBitFieldMaskBit27 = 0x8000000 - CBitFieldMaskBit28 = 0x10000000 - CBitFieldMaskBit29 = 0x20000000 - CBitFieldMaskBit30 = 0x40000000 - CBitFieldMaskBit31 = 0x80000000 - CBitFieldMaskBit32 = 0x100000000 - CBitFieldMaskBit33 = 0x200000000 - CBitFieldMaskBit34 = 0x400000000 - CBitFieldMaskBit35 = 0x800000000 - CBitFieldMaskBit36 = 0x1000000000 - CBitFieldMaskBit37 = 0x2000000000 - CBitFieldMaskBit38 = 0x4000000000 - CBitFieldMaskBit39 = 0x8000000000 - CBitFieldMaskBit40 = 0x10000000000 - CBitFieldMaskBit41 = 0x20000000000 - CBitFieldMaskBit42 = 0x40000000000 - CBitFieldMaskBit43 = 0x80000000000 - CBitFieldMaskBit44 = 0x100000000000 - CBitFieldMaskBit45 = 0x200000000000 - CBitFieldMaskBit46 = 0x400000000000 - CBitFieldMaskBit47 = 0x800000000000 - CBitFieldMaskBit48 = 0x1000000000000 - CBitFieldMaskBit49 = 0x2000000000000 - CBitFieldMaskBit50 = 0x4000000000000 - CBitFieldMaskBit51 = 0x8000000000000 - CBitFieldMaskBit52 = 0x10000000000000 - CBitFieldMaskBit53 = 0x20000000000000 - CBitFieldMaskBit54 = 0x40000000000000 - CBitFieldMaskBit55 = 0x80000000000000 - CBitFieldMaskBit56 = 0x100000000000000 - CBitFieldMaskBit57 = 0x200000000000000 - CBitFieldMaskBit58 = 0x400000000000000 - CBitFieldMaskBit59 = 0x800000000000000 - CBitFieldMaskBit60 = 0x1000000000000000 - CBitFieldMaskBit61 = 0x2000000000000000 - CBitFieldMaskBit62 = 0x4000000000000000 - CBitFieldMaskBit63 = 0x8000000000000000 -) - -type SockaddrStorage struct { - Family uint16 - _ [118]int8 - _ uint64 -} - -type HDGeometry struct { - Heads uint8 - Sectors uint8 - Cylinders uint16 - Start uint64 -} - -type Statfs_t struct { - Type int64 - Bsize int64 - Frsize int64 - Blocks uint64 - Bfree uint64 - Files uint64 - Ffree uint64 - Bavail uint64 - Fsid Fsid - Namelen int64 - Flags int64 - Spare [5]int64 -} - -type TpacketHdr struct { - Status uint64 - Len uint32 - Snaplen uint32 - Mac uint16 - Net uint16 - Sec uint32 - Usec uint32 - _ [4]byte -} - -const ( - SizeofTpacketHdr = 0x20 -) - -type RTCPLLInfo struct { - Ctrl int32 - Value int32 - Max int32 - Min int32 - Posmult int32 - Negmult int32 - Clock int64 -} - -type BlkpgPartition struct { - Start int64 - Length int64 - Pno int32 - Devname [64]uint8 - Volname [64]uint8 - _ [4]byte -} - -const ( - BLKPG = 0x20001269 -) - -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - -type CryptoUserAlg struct { - Name [64]int8 - Driver_name [64]int8 - Module_name [64]int8 - Type uint32 - Mask uint32 - Refcnt uint32 - Flags uint32 -} - -type CryptoStatAEAD struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatAKCipher struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Verify_cnt uint64 - Sign_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatCipher struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatCompress struct { - Type [64]int8 - Compress_cnt uint64 - Compress_tlen uint64 - Decompress_cnt uint64 - Decompress_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatHash struct { - Type [64]int8 - Hash_cnt uint64 - Hash_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatKPP struct { - Type [64]int8 - Setsecret_cnt uint64 - Generate_public_key_cnt uint64 - Compute_shared_secret_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatRNG struct { - Type [64]int8 - Generate_cnt uint64 - Generate_tlen uint64 - Seed_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatLarval struct { - Type [64]int8 -} - -type CryptoReportLarval struct { - Type [64]int8 -} - -type CryptoReportHash struct { - Type [64]int8 - Blocksize uint32 - Digestsize uint32 -} - -type CryptoReportCipher struct { - Type [64]int8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 -} - -type CryptoReportBlkCipher struct { - Type [64]int8 - Geniv [64]int8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 - Ivsize uint32 -} - -type CryptoReportAEAD struct { - Type [64]int8 - Geniv [64]int8 - Blocksize uint32 - Maxauthsize uint32 - Ivsize uint32 -} - -type CryptoReportComp struct { - Type [64]int8 -} - -type CryptoReportRNG struct { - Type [64]int8 - Seedsize uint32 -} - -type CryptoReportAKCipher struct { - Type [64]int8 -} - -type CryptoReportKPP struct { - Type [64]int8 -} - -type CryptoReportAcomp struct { - Type [64]int8 -} - -type LoopInfo struct { - Number int32 - Device uint32 - Inode uint64 - Rdevice uint32 - Offset int32 - Encrypt_type int32 - Encrypt_key_size int32 - Flags int32 - Name [64]int8 - Encrypt_key [32]uint8 - Init [2]uint64 - Reserved [4]int8 - _ [4]byte -} - -type TIPCSubscr struct { - Seq TIPCServiceRange - Timeout uint32 - Filter uint32 - Handle [8]int8 -} - -type TIPCSIOCLNReq struct { - Peer uint32 - Id uint32 - Linkname [68]int8 -} - -type TIPCSIOCNodeIDReq struct { - Peer uint32 - Id [16]int8 -} - -type PPSKInfo struct { - Assert_sequence uint32 - Clear_sequence uint32 - Assert_tu PPSKTime - Clear_tu PPSKTime - Current_mode int32 - _ [4]byte -} - -const ( - PPS_GETPARAMS = 0x400870a1 - PPS_SETPARAMS = 0x800870a2 - PPS_GETCAP = 0x400870a3 - PPS_FETCH = 0xc00870a4 -) - -const ( - PIDFD_NONBLOCK = 0x80 -) - -type SysvIpcPerm struct { - Key int32 - Uid uint32 - Gid uint32 - Cuid uint32 - Cgid uint32 - Mode uint32 - _ [0]uint8 - Seq uint16 - _ uint16 - _ uint64 - _ uint64 -} -type SysvShmDesc struct { - Perm SysvIpcPerm - Segsz uint64 - Atime int64 - Dtime int64 - Ctime int64 - Cpid int32 - Lpid int32 - Nattch uint64 - _ uint64 - _ 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 deleted file mode 100644 index 0892a73..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +++ /dev/null @@ -1,690 +0,0 @@ -// cgo -godefs -objdir=/tmp/mipsle/cgo -- -Wall -Werror -static -I/tmp/mipsle/include linux/types.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build mipsle && linux -// +build mipsle,linux - -package unix - -const ( - SizeofPtr = 0x4 - SizeofLong = 0x4 -) - -type ( - _C_long int32 -) - -type Timespec struct { - Sec int32 - Nsec int32 -} - -type Timeval struct { - Sec int32 - Usec int32 -} - -type Timex struct { - Modes uint32 - Offset int32 - Freq int32 - Maxerror int32 - Esterror int32 - Status int32 - Constant int32 - Precision int32 - Tolerance int32 - Time Timeval - Tick int32 - Ppsfreq int32 - Jitter int32 - Shift int32 - Stabil int32 - Jitcnt int32 - Calcnt int32 - Errcnt int32 - Stbcnt int32 - Tai int32 - _ [44]byte -} - -type Time_t int32 - -type Tms struct { - Utime int32 - Stime int32 - Cutime int32 - Cstime int32 -} - -type Utimbuf struct { - Actime int32 - Modtime int32 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int32 - Ixrss int32 - Idrss int32 - Isrss int32 - Minflt int32 - Majflt int32 - Nswap int32 - Inblock int32 - Oublock int32 - Msgsnd int32 - Msgrcv int32 - Nsignals int32 - Nvcsw int32 - Nivcsw int32 -} - -type Stat_t struct { - Dev uint32 - Pad1 [3]int32 - Ino uint64 - Mode uint32 - Nlink uint32 - Uid uint32 - Gid uint32 - Rdev uint32 - Pad2 [3]int32 - Size int64 - Atim Timespec - Mtim Timespec - Ctim Timespec - Blksize int32 - Pad4 int32 - Blocks int64 - Pad5 [14]int32 -} - -type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]int8 - _ [5]byte -} - -type Flock_t struct { - Type int16 - Whence int16 - _ [4]byte - Start int64 - Len int64 - Pid int32 - _ [4]byte -} - -type DmNameList struct { - Dev uint64 - Next uint32 - Name [0]byte - _ [4]byte -} - -const ( - FADV_DONTNEED = 0x4 - FADV_NOREUSE = 0x5 -) - -type RawSockaddrNFCLLCP struct { - Sa_family uint16 - Dev_idx uint32 - Target_idx uint32 - Nfc_protocol uint32 - Dsap uint8 - Ssap uint8 - Service_name [63]uint8 - Service_name_len uint32 -} - -type RawSockaddr struct { - Family uint16 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [96]int8 -} - -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 -} - -type ifreq struct { - Ifrn [16]byte - Ifru [16]byte -} - -const ( - SizeofSockaddrNFCLLCP = 0x58 - SizeofIovec = 0x8 - SizeofMsghdr = 0x1c - SizeofCmsghdr = 0xc -) - -const ( - SizeofSockFprog = 0x8 -) - -type PtraceRegs struct { - Regs [32]uint64 - Lo uint64 - Hi uint64 - Epc uint64 - Badvaddr uint64 - Status uint64 - Cause uint64 -} - -type FdSet struct { - Bits [32]int32 -} - -type Sysinfo_t struct { - Uptime int32 - Loads [3]uint32 - Totalram uint32 - Freeram uint32 - Sharedram uint32 - Bufferram uint32 - Totalswap uint32 - Freeswap uint32 - Procs uint16 - Pad uint16 - Totalhigh uint32 - Freehigh uint32 - Unit uint32 - _ [8]int8 -} - -type Ustat_t struct { - Tfree int32 - Tinode uint32 - Fname [6]int8 - Fpack [6]int8 -} - -type EpollEvent struct { - Events uint32 - PadFd int32 - Fd int32 - Pad int32 -} - -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - -const ( - POLLRDHUP = 0x2000 -) - -type Sigset_t struct { - Val [32]uint32 -} - -const _C__NSIG = 0x80 - -type Siginfo struct { - Signo int32 - Code int32 - Errno int32 - _ [116]byte -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Line uint8 - Cc [23]uint8 - Ispeed uint32 - Ospeed uint32 -} - -type Taskstats struct { - Version uint16 - Ac_exitcode uint32 - Ac_flag uint8 - Ac_nice uint8 - _ [4]byte - Cpu_count uint64 - Cpu_delay_total uint64 - Blkio_count uint64 - Blkio_delay_total uint64 - Swapin_count uint64 - Swapin_delay_total uint64 - Cpu_run_real_total uint64 - Cpu_run_virtual_total uint64 - Ac_comm [32]int8 - Ac_sched uint8 - Ac_pad [3]uint8 - _ [4]byte - Ac_uid uint32 - Ac_gid uint32 - Ac_pid uint32 - Ac_ppid uint32 - Ac_btime uint32 - _ [4]byte - Ac_etime uint64 - Ac_utime uint64 - Ac_stime uint64 - Ac_minflt uint64 - Ac_majflt uint64 - Coremem uint64 - Virtmem uint64 - Hiwater_rss uint64 - Hiwater_vm uint64 - Read_char uint64 - Write_char uint64 - Read_syscalls uint64 - Write_syscalls uint64 - Read_bytes uint64 - Write_bytes uint64 - Cancelled_write_bytes uint64 - Nvcsw uint64 - Nivcsw uint64 - Ac_utimescaled uint64 - Ac_stimescaled uint64 - Cpu_scaled_run_real_total uint64 - Freepages_count uint64 - Freepages_delay_total uint64 - Thrashing_count uint64 - Thrashing_delay_total uint64 - Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 - Ac_tgid uint32 - _ [4]byte - Ac_tgetime uint64 - Ac_exe_dev uint64 - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -} - -type cpuMask uint32 - -const ( - _NCPUBITS = 0x20 -) - -const ( - CBitFieldMaskBit0 = 0x1 - CBitFieldMaskBit1 = 0x2 - CBitFieldMaskBit2 = 0x4 - CBitFieldMaskBit3 = 0x8 - CBitFieldMaskBit4 = 0x10 - CBitFieldMaskBit5 = 0x20 - CBitFieldMaskBit6 = 0x40 - CBitFieldMaskBit7 = 0x80 - CBitFieldMaskBit8 = 0x100 - CBitFieldMaskBit9 = 0x200 - CBitFieldMaskBit10 = 0x400 - CBitFieldMaskBit11 = 0x800 - CBitFieldMaskBit12 = 0x1000 - CBitFieldMaskBit13 = 0x2000 - CBitFieldMaskBit14 = 0x4000 - CBitFieldMaskBit15 = 0x8000 - CBitFieldMaskBit16 = 0x10000 - CBitFieldMaskBit17 = 0x20000 - CBitFieldMaskBit18 = 0x40000 - CBitFieldMaskBit19 = 0x80000 - CBitFieldMaskBit20 = 0x100000 - CBitFieldMaskBit21 = 0x200000 - CBitFieldMaskBit22 = 0x400000 - CBitFieldMaskBit23 = 0x800000 - CBitFieldMaskBit24 = 0x1000000 - CBitFieldMaskBit25 = 0x2000000 - CBitFieldMaskBit26 = 0x4000000 - CBitFieldMaskBit27 = 0x8000000 - CBitFieldMaskBit28 = 0x10000000 - CBitFieldMaskBit29 = 0x20000000 - CBitFieldMaskBit30 = 0x40000000 - CBitFieldMaskBit31 = 0x80000000 - CBitFieldMaskBit32 = 0x100000000 - CBitFieldMaskBit33 = 0x200000000 - CBitFieldMaskBit34 = 0x400000000 - CBitFieldMaskBit35 = 0x800000000 - CBitFieldMaskBit36 = 0x1000000000 - CBitFieldMaskBit37 = 0x2000000000 - CBitFieldMaskBit38 = 0x4000000000 - CBitFieldMaskBit39 = 0x8000000000 - CBitFieldMaskBit40 = 0x10000000000 - CBitFieldMaskBit41 = 0x20000000000 - CBitFieldMaskBit42 = 0x40000000000 - CBitFieldMaskBit43 = 0x80000000000 - CBitFieldMaskBit44 = 0x100000000000 - CBitFieldMaskBit45 = 0x200000000000 - CBitFieldMaskBit46 = 0x400000000000 - CBitFieldMaskBit47 = 0x800000000000 - CBitFieldMaskBit48 = 0x1000000000000 - CBitFieldMaskBit49 = 0x2000000000000 - CBitFieldMaskBit50 = 0x4000000000000 - CBitFieldMaskBit51 = 0x8000000000000 - CBitFieldMaskBit52 = 0x10000000000000 - CBitFieldMaskBit53 = 0x20000000000000 - CBitFieldMaskBit54 = 0x40000000000000 - CBitFieldMaskBit55 = 0x80000000000000 - CBitFieldMaskBit56 = 0x100000000000000 - CBitFieldMaskBit57 = 0x200000000000000 - CBitFieldMaskBit58 = 0x400000000000000 - CBitFieldMaskBit59 = 0x800000000000000 - CBitFieldMaskBit60 = 0x1000000000000000 - CBitFieldMaskBit61 = 0x2000000000000000 - CBitFieldMaskBit62 = 0x4000000000000000 - CBitFieldMaskBit63 = 0x8000000000000000 -) - -type SockaddrStorage struct { - Family uint16 - _ [122]int8 - _ uint32 -} - -type HDGeometry struct { - Heads uint8 - Sectors uint8 - Cylinders uint16 - Start uint32 -} - -type Statfs_t struct { - Type int32 - Bsize int32 - Frsize int32 - _ [4]byte - Blocks uint64 - Bfree uint64 - Files uint64 - Ffree uint64 - Bavail uint64 - Fsid Fsid - Namelen int32 - Flags int32 - Spare [5]int32 - _ [4]byte -} - -type TpacketHdr struct { - Status uint32 - Len uint32 - Snaplen uint32 - Mac uint16 - Net uint16 - Sec uint32 - Usec uint32 -} - -const ( - SizeofTpacketHdr = 0x18 -) - -type RTCPLLInfo struct { - Ctrl int32 - Value int32 - Max int32 - Min int32 - Posmult int32 - Negmult int32 - Clock int32 -} - -type BlkpgPartition struct { - Start int64 - Length int64 - Pno int32 - Devname [64]uint8 - Volname [64]uint8 - _ [4]byte -} - -const ( - BLKPG = 0x20001269 -) - -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - -type CryptoUserAlg struct { - Name [64]int8 - Driver_name [64]int8 - Module_name [64]int8 - Type uint32 - Mask uint32 - Refcnt uint32 - Flags uint32 -} - -type CryptoStatAEAD struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatAKCipher struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Verify_cnt uint64 - Sign_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatCipher struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatCompress struct { - Type [64]int8 - Compress_cnt uint64 - Compress_tlen uint64 - Decompress_cnt uint64 - Decompress_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatHash struct { - Type [64]int8 - Hash_cnt uint64 - Hash_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatKPP struct { - Type [64]int8 - Setsecret_cnt uint64 - Generate_public_key_cnt uint64 - Compute_shared_secret_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatRNG struct { - Type [64]int8 - Generate_cnt uint64 - Generate_tlen uint64 - Seed_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatLarval struct { - Type [64]int8 -} - -type CryptoReportLarval struct { - Type [64]int8 -} - -type CryptoReportHash struct { - Type [64]int8 - Blocksize uint32 - Digestsize uint32 -} - -type CryptoReportCipher struct { - Type [64]int8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 -} - -type CryptoReportBlkCipher struct { - Type [64]int8 - Geniv [64]int8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 - Ivsize uint32 -} - -type CryptoReportAEAD struct { - Type [64]int8 - Geniv [64]int8 - Blocksize uint32 - Maxauthsize uint32 - Ivsize uint32 -} - -type CryptoReportComp struct { - Type [64]int8 -} - -type CryptoReportRNG struct { - Type [64]int8 - Seedsize uint32 -} - -type CryptoReportAKCipher struct { - Type [64]int8 -} - -type CryptoReportKPP struct { - Type [64]int8 -} - -type CryptoReportAcomp struct { - Type [64]int8 -} - -type LoopInfo struct { - Number int32 - Device uint32 - Inode uint32 - Rdevice uint32 - Offset int32 - Encrypt_type int32 - Encrypt_key_size int32 - Flags int32 - Name [64]int8 - Encrypt_key [32]uint8 - Init [2]uint32 - Reserved [4]int8 -} - -type TIPCSubscr struct { - Seq TIPCServiceRange - Timeout uint32 - Filter uint32 - Handle [8]int8 -} - -type TIPCSIOCLNReq struct { - Peer uint32 - Id uint32 - Linkname [68]int8 -} - -type TIPCSIOCNodeIDReq struct { - Peer uint32 - Id [16]int8 -} - -type PPSKInfo struct { - Assert_sequence uint32 - Clear_sequence uint32 - Assert_tu PPSKTime - Clear_tu PPSKTime - Current_mode int32 - _ [4]byte -} - -const ( - PPS_GETPARAMS = 0x400470a1 - PPS_SETPARAMS = 0x800470a2 - PPS_GETCAP = 0x400470a3 - PPS_FETCH = 0xc00470a4 -) - -const ( - PIDFD_NONBLOCK = 0x80 -) - -type SysvIpcPerm struct { - Key int32 - Uid uint32 - Gid uint32 - Cuid uint32 - Cgid uint32 - Mode uint32 - _ [0]uint8 - Seq uint16 - _ uint16 - _ uint32 - _ uint32 -} -type SysvShmDesc struct { - Perm SysvIpcPerm - Segsz uint32 - Atime uint32 - Dtime uint32 - Ctime uint32 - Cpid int32 - Lpid int32 - Nattch uint32 - Atime_high uint16 - Dtime_high uint16 - Ctime_high uint16 - _ uint16 -} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go deleted file mode 100644 index e1dd483..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +++ /dev/null @@ -1,698 +0,0 @@ -// cgo -godefs -objdir=/tmp/ppc/cgo -- -Wall -Werror -static -I/tmp/ppc/include linux/types.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build ppc && linux -// +build ppc,linux - -package unix - -const ( - SizeofPtr = 0x4 - SizeofLong = 0x4 -) - -type ( - _C_long int32 -) - -type Timespec struct { - Sec int32 - Nsec int32 -} - -type Timeval struct { - Sec int32 - Usec int32 -} - -type Timex struct { - Modes uint32 - Offset int32 - Freq int32 - Maxerror int32 - Esterror int32 - Status int32 - Constant int32 - Precision int32 - Tolerance int32 - Time Timeval - Tick int32 - Ppsfreq int32 - Jitter int32 - Shift int32 - Stabil int32 - Jitcnt int32 - Calcnt int32 - Errcnt int32 - Stbcnt int32 - Tai int32 - _ [44]byte -} - -type Time_t int32 - -type Tms struct { - Utime int32 - Stime int32 - Cutime int32 - Cstime int32 -} - -type Utimbuf struct { - Actime int32 - Modtime int32 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int32 - Ixrss int32 - Idrss int32 - Isrss int32 - Minflt int32 - Majflt int32 - Nswap int32 - Inblock int32 - Oublock int32 - Msgsnd int32 - Msgrcv int32 - Nsignals int32 - Nvcsw int32 - Nivcsw int32 -} - -type Stat_t struct { - Dev uint64 - Ino uint64 - Mode uint32 - Nlink uint32 - Uid uint32 - Gid uint32 - Rdev uint64 - _ uint16 - _ [4]byte - Size int64 - Blksize int32 - _ [4]byte - Blocks int64 - Atim Timespec - Mtim Timespec - Ctim Timespec - _ uint32 - _ uint32 -} - -type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]uint8 - _ [5]byte -} - -type Flock_t struct { - Type int16 - Whence int16 - _ [4]byte - Start int64 - Len int64 - Pid int32 - _ [4]byte -} - -type DmNameList struct { - Dev uint64 - Next uint32 - Name [0]byte - _ [4]byte -} - -const ( - FADV_DONTNEED = 0x4 - FADV_NOREUSE = 0x5 -) - -type RawSockaddrNFCLLCP struct { - Sa_family uint16 - Dev_idx uint32 - Target_idx uint32 - Nfc_protocol uint32 - Dsap uint8 - Ssap uint8 - Service_name [63]uint8 - Service_name_len uint32 -} - -type RawSockaddr struct { - Family uint16 - Data [14]uint8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [96]uint8 -} - -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 -} - -type ifreq struct { - Ifrn [16]byte - Ifru [16]byte -} - -const ( - SizeofSockaddrNFCLLCP = 0x58 - SizeofIovec = 0x8 - SizeofMsghdr = 0x1c - SizeofCmsghdr = 0xc -) - -const ( - SizeofSockFprog = 0x8 -) - -type PtraceRegs struct { - Gpr [32]uint32 - Nip uint32 - Msr uint32 - Orig_gpr3 uint32 - Ctr uint32 - Link uint32 - Xer uint32 - Ccr uint32 - Mq uint32 - Trap uint32 - Dar uint32 - Dsisr uint32 - Result uint32 -} - -type FdSet struct { - Bits [32]int32 -} - -type Sysinfo_t struct { - Uptime int32 - Loads [3]uint32 - Totalram uint32 - Freeram uint32 - Sharedram uint32 - Bufferram uint32 - Totalswap uint32 - Freeswap uint32 - Procs uint16 - Pad uint16 - Totalhigh uint32 - Freehigh uint32 - Unit uint32 - _ [8]uint8 -} - -type Ustat_t struct { - Tfree int32 - Tinode uint32 - Fname [6]uint8 - Fpack [6]uint8 -} - -type EpollEvent struct { - Events uint32 - _ int32 - Fd int32 - Pad int32 -} - -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - -const ( - POLLRDHUP = 0x2000 -) - -type Sigset_t struct { - Val [32]uint32 -} - -const _C__NSIG = 0x41 - -type Siginfo struct { - Signo int32 - Errno int32 - Code int32 - _ [116]byte -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [19]uint8 - Line uint8 - Ispeed uint32 - Ospeed uint32 -} - -type Taskstats struct { - Version uint16 - Ac_exitcode uint32 - Ac_flag uint8 - Ac_nice uint8 - _ [4]byte - Cpu_count uint64 - Cpu_delay_total uint64 - Blkio_count uint64 - Blkio_delay_total uint64 - Swapin_count uint64 - Swapin_delay_total uint64 - Cpu_run_real_total uint64 - Cpu_run_virtual_total uint64 - Ac_comm [32]uint8 - Ac_sched uint8 - Ac_pad [3]uint8 - _ [4]byte - Ac_uid uint32 - Ac_gid uint32 - Ac_pid uint32 - Ac_ppid uint32 - Ac_btime uint32 - _ [4]byte - Ac_etime uint64 - Ac_utime uint64 - Ac_stime uint64 - Ac_minflt uint64 - Ac_majflt uint64 - Coremem uint64 - Virtmem uint64 - Hiwater_rss uint64 - Hiwater_vm uint64 - Read_char uint64 - Write_char uint64 - Read_syscalls uint64 - Write_syscalls uint64 - Read_bytes uint64 - Write_bytes uint64 - Cancelled_write_bytes uint64 - Nvcsw uint64 - Nivcsw uint64 - Ac_utimescaled uint64 - Ac_stimescaled uint64 - Cpu_scaled_run_real_total uint64 - Freepages_count uint64 - Freepages_delay_total uint64 - Thrashing_count uint64 - Thrashing_delay_total uint64 - Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 - Ac_tgid uint32 - _ [4]byte - Ac_tgetime uint64 - Ac_exe_dev uint64 - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -} - -type cpuMask uint32 - -const ( - _NCPUBITS = 0x20 -) - -const ( - CBitFieldMaskBit0 = 0x8000000000000000 - CBitFieldMaskBit1 = 0x4000000000000000 - CBitFieldMaskBit2 = 0x2000000000000000 - CBitFieldMaskBit3 = 0x1000000000000000 - CBitFieldMaskBit4 = 0x800000000000000 - CBitFieldMaskBit5 = 0x400000000000000 - CBitFieldMaskBit6 = 0x200000000000000 - CBitFieldMaskBit7 = 0x100000000000000 - CBitFieldMaskBit8 = 0x80000000000000 - CBitFieldMaskBit9 = 0x40000000000000 - CBitFieldMaskBit10 = 0x20000000000000 - CBitFieldMaskBit11 = 0x10000000000000 - CBitFieldMaskBit12 = 0x8000000000000 - CBitFieldMaskBit13 = 0x4000000000000 - CBitFieldMaskBit14 = 0x2000000000000 - CBitFieldMaskBit15 = 0x1000000000000 - CBitFieldMaskBit16 = 0x800000000000 - CBitFieldMaskBit17 = 0x400000000000 - CBitFieldMaskBit18 = 0x200000000000 - CBitFieldMaskBit19 = 0x100000000000 - CBitFieldMaskBit20 = 0x80000000000 - CBitFieldMaskBit21 = 0x40000000000 - CBitFieldMaskBit22 = 0x20000000000 - CBitFieldMaskBit23 = 0x10000000000 - CBitFieldMaskBit24 = 0x8000000000 - CBitFieldMaskBit25 = 0x4000000000 - CBitFieldMaskBit26 = 0x2000000000 - CBitFieldMaskBit27 = 0x1000000000 - CBitFieldMaskBit28 = 0x800000000 - CBitFieldMaskBit29 = 0x400000000 - CBitFieldMaskBit30 = 0x200000000 - CBitFieldMaskBit31 = 0x100000000 - CBitFieldMaskBit32 = 0x80000000 - CBitFieldMaskBit33 = 0x40000000 - CBitFieldMaskBit34 = 0x20000000 - CBitFieldMaskBit35 = 0x10000000 - CBitFieldMaskBit36 = 0x8000000 - CBitFieldMaskBit37 = 0x4000000 - CBitFieldMaskBit38 = 0x2000000 - CBitFieldMaskBit39 = 0x1000000 - CBitFieldMaskBit40 = 0x800000 - CBitFieldMaskBit41 = 0x400000 - CBitFieldMaskBit42 = 0x200000 - CBitFieldMaskBit43 = 0x100000 - CBitFieldMaskBit44 = 0x80000 - CBitFieldMaskBit45 = 0x40000 - CBitFieldMaskBit46 = 0x20000 - CBitFieldMaskBit47 = 0x10000 - CBitFieldMaskBit48 = 0x8000 - CBitFieldMaskBit49 = 0x4000 - CBitFieldMaskBit50 = 0x2000 - CBitFieldMaskBit51 = 0x1000 - CBitFieldMaskBit52 = 0x800 - CBitFieldMaskBit53 = 0x400 - CBitFieldMaskBit54 = 0x200 - CBitFieldMaskBit55 = 0x100 - CBitFieldMaskBit56 = 0x80 - CBitFieldMaskBit57 = 0x40 - CBitFieldMaskBit58 = 0x20 - CBitFieldMaskBit59 = 0x10 - CBitFieldMaskBit60 = 0x8 - CBitFieldMaskBit61 = 0x4 - CBitFieldMaskBit62 = 0x2 - CBitFieldMaskBit63 = 0x1 -) - -type SockaddrStorage struct { - Family uint16 - _ [122]uint8 - _ uint32 -} - -type HDGeometry struct { - Heads uint8 - Sectors uint8 - Cylinders uint16 - Start uint32 -} - -type Statfs_t struct { - Type int32 - Bsize int32 - Blocks uint64 - Bfree uint64 - Bavail uint64 - Files uint64 - Ffree uint64 - Fsid Fsid - Namelen int32 - Frsize int32 - Flags int32 - Spare [4]int32 - _ [4]byte -} - -type TpacketHdr struct { - Status uint32 - Len uint32 - Snaplen uint32 - Mac uint16 - Net uint16 - Sec uint32 - Usec uint32 -} - -const ( - SizeofTpacketHdr = 0x18 -) - -type RTCPLLInfo struct { - Ctrl int32 - Value int32 - Max int32 - Min int32 - Posmult int32 - Negmult int32 - Clock int32 -} - -type BlkpgPartition struct { - Start int64 - Length int64 - Pno int32 - Devname [64]uint8 - Volname [64]uint8 - _ [4]byte -} - -const ( - BLKPG = 0x20001269 -) - -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - -type CryptoUserAlg struct { - Name [64]uint8 - Driver_name [64]uint8 - Module_name [64]uint8 - Type uint32 - Mask uint32 - Refcnt uint32 - Flags uint32 -} - -type CryptoStatAEAD struct { - Type [64]uint8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatAKCipher struct { - Type [64]uint8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Verify_cnt uint64 - Sign_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatCipher struct { - Type [64]uint8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatCompress struct { - Type [64]uint8 - Compress_cnt uint64 - Compress_tlen uint64 - Decompress_cnt uint64 - Decompress_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatHash struct { - Type [64]uint8 - Hash_cnt uint64 - Hash_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatKPP struct { - Type [64]uint8 - Setsecret_cnt uint64 - Generate_public_key_cnt uint64 - Compute_shared_secret_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatRNG struct { - Type [64]uint8 - Generate_cnt uint64 - Generate_tlen uint64 - Seed_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatLarval struct { - Type [64]uint8 -} - -type CryptoReportLarval struct { - Type [64]uint8 -} - -type CryptoReportHash struct { - Type [64]uint8 - Blocksize uint32 - Digestsize uint32 -} - -type CryptoReportCipher struct { - Type [64]uint8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 -} - -type CryptoReportBlkCipher struct { - Type [64]uint8 - Geniv [64]uint8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 - Ivsize uint32 -} - -type CryptoReportAEAD struct { - Type [64]uint8 - Geniv [64]uint8 - Blocksize uint32 - Maxauthsize uint32 - Ivsize uint32 -} - -type CryptoReportComp struct { - Type [64]uint8 -} - -type CryptoReportRNG struct { - Type [64]uint8 - Seedsize uint32 -} - -type CryptoReportAKCipher struct { - Type [64]uint8 -} - -type CryptoReportKPP struct { - Type [64]uint8 -} - -type CryptoReportAcomp struct { - Type [64]uint8 -} - -type LoopInfo struct { - Number int32 - Device uint32 - Inode uint32 - Rdevice uint32 - Offset int32 - Encrypt_type int32 - Encrypt_key_size int32 - Flags int32 - Name [64]uint8 - Encrypt_key [32]uint8 - Init [2]uint32 - Reserved [4]uint8 -} - -type TIPCSubscr struct { - Seq TIPCServiceRange - Timeout uint32 - Filter uint32 - Handle [8]uint8 -} - -type TIPCSIOCLNReq struct { - Peer uint32 - Id uint32 - Linkname [68]uint8 -} - -type TIPCSIOCNodeIDReq struct { - Peer uint32 - Id [16]uint8 -} - -type PPSKInfo struct { - Assert_sequence uint32 - Clear_sequence uint32 - Assert_tu PPSKTime - Clear_tu PPSKTime - Current_mode int32 - _ [4]byte -} - -const ( - PPS_GETPARAMS = 0x400470a1 - PPS_SETPARAMS = 0x800470a2 - PPS_GETCAP = 0x400470a3 - PPS_FETCH = 0xc00470a4 -) - -const ( - PIDFD_NONBLOCK = 0x800 -) - -type SysvIpcPerm struct { - Key int32 - Uid uint32 - Gid uint32 - Cuid uint32 - Cgid uint32 - Mode uint32 - Seq uint32 - _ uint32 - _ uint64 - _ uint64 -} -type SysvShmDesc struct { - Perm SysvIpcPerm - Atime_high uint32 - Atime uint32 - Dtime_high uint32 - Dtime uint32 - Ctime_high uint32 - Ctime uint32 - _ uint32 - Segsz uint32 - Cpid int32 - Lpid int32 - Nattch uint32 - _ uint32 - _ uint32 - _ [4]byte -} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go deleted file mode 100644 index d9f654c..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +++ /dev/null @@ -1,693 +0,0 @@ -// cgo -godefs -objdir=/tmp/ppc64/cgo -- -Wall -Werror -static -I/tmp/ppc64/include linux/types.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build ppc64 && linux -// +build ppc64,linux - -package unix - -const ( - SizeofPtr = 0x8 - SizeofLong = 0x8 -) - -type ( - _C_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int64 -} - -type Timex struct { - Modes uint32 - Offset int64 - Freq int64 - Maxerror int64 - Esterror int64 - Status int32 - Constant int64 - Precision int64 - Tolerance int64 - Time Timeval - Tick int64 - Ppsfreq int64 - Jitter int64 - Shift int32 - Stabil int64 - Jitcnt int64 - Calcnt int64 - Errcnt int64 - Stbcnt int64 - Tai int32 - _ [44]byte -} - -type Time_t int64 - -type Tms struct { - Utime int64 - Stime int64 - Cutime int64 - Cstime int64 -} - -type Utimbuf struct { - Actime int64 - Modtime int64 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Stat_t struct { - Dev uint64 - Ino uint64 - Nlink uint64 - Mode uint32 - Uid uint32 - Gid uint32 - _ int32 - Rdev uint64 - Size int64 - Blksize int64 - Blocks int64 - Atim Timespec - Mtim Timespec - Ctim Timespec - _ uint64 - _ uint64 - _ uint64 -} - -type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]uint8 - _ [5]byte -} - -type Flock_t struct { - Type int16 - Whence int16 - Start int64 - Len int64 - Pid int32 - _ [4]byte -} - -type DmNameList struct { - Dev uint64 - Next uint32 - Name [0]byte - _ [4]byte -} - -const ( - FADV_DONTNEED = 0x4 - FADV_NOREUSE = 0x5 -) - -type RawSockaddrNFCLLCP struct { - Sa_family uint16 - Dev_idx uint32 - Target_idx uint32 - Nfc_protocol uint32 - Dsap uint8 - Ssap uint8 - Service_name [63]uint8 - Service_name_len uint64 -} - -type RawSockaddr struct { - Family uint16 - Data [14]uint8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [96]uint8 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type Msghdr struct { - Name *byte - Namelen uint32 - Iov *Iovec - Iovlen uint64 - Control *byte - Controllen uint64 - Flags int32 - _ [4]byte -} - -type Cmsghdr struct { - Len uint64 - Level int32 - Type int32 -} - -type ifreq struct { - Ifrn [16]byte - Ifru [24]byte -} - -const ( - SizeofSockaddrNFCLLCP = 0x60 - SizeofIovec = 0x10 - SizeofMsghdr = 0x38 - SizeofCmsghdr = 0x10 -) - -const ( - SizeofSockFprog = 0x10 -) - -type PtraceRegs struct { - Gpr [32]uint64 - Nip uint64 - Msr uint64 - Orig_gpr3 uint64 - Ctr uint64 - Link uint64 - Xer uint64 - Ccr uint64 - Softe uint64 - Trap uint64 - Dar uint64 - Dsisr uint64 - Result uint64 -} - -type FdSet struct { - Bits [16]int64 -} - -type Sysinfo_t struct { - Uptime int64 - Loads [3]uint64 - Totalram uint64 - Freeram uint64 - Sharedram uint64 - Bufferram uint64 - Totalswap uint64 - Freeswap uint64 - Procs uint16 - Pad uint16 - Totalhigh uint64 - Freehigh uint64 - Unit uint32 - _ [0]uint8 - _ [4]byte -} - -type Ustat_t struct { - Tfree int32 - Tinode uint64 - Fname [6]uint8 - Fpack [6]uint8 - _ [4]byte -} - -type EpollEvent struct { - Events uint32 - _ int32 - Fd int32 - Pad int32 -} - -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - -const ( - POLLRDHUP = 0x2000 -) - -type Sigset_t struct { - Val [16]uint64 -} - -const _C__NSIG = 0x41 - -type Siginfo struct { - Signo int32 - Errno int32 - Code int32 - _ int32 - _ [112]byte -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [19]uint8 - Line uint8 - Ispeed uint32 - Ospeed uint32 -} - -type Taskstats struct { - Version uint16 - Ac_exitcode uint32 - Ac_flag uint8 - Ac_nice uint8 - Cpu_count uint64 - Cpu_delay_total uint64 - Blkio_count uint64 - Blkio_delay_total uint64 - Swapin_count uint64 - Swapin_delay_total uint64 - Cpu_run_real_total uint64 - Cpu_run_virtual_total uint64 - Ac_comm [32]uint8 - Ac_sched uint8 - Ac_pad [3]uint8 - _ [4]byte - Ac_uid uint32 - Ac_gid uint32 - Ac_pid uint32 - Ac_ppid uint32 - Ac_btime uint32 - Ac_etime uint64 - Ac_utime uint64 - Ac_stime uint64 - Ac_minflt uint64 - Ac_majflt uint64 - Coremem uint64 - Virtmem uint64 - Hiwater_rss uint64 - Hiwater_vm uint64 - Read_char uint64 - Write_char uint64 - Read_syscalls uint64 - Write_syscalls uint64 - Read_bytes uint64 - Write_bytes uint64 - Cancelled_write_bytes uint64 - Nvcsw uint64 - Nivcsw uint64 - Ac_utimescaled uint64 - Ac_stimescaled uint64 - Cpu_scaled_run_real_total uint64 - Freepages_count uint64 - Freepages_delay_total uint64 - Thrashing_count uint64 - Thrashing_delay_total uint64 - Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 - Ac_tgid uint32 - Ac_tgetime uint64 - Ac_exe_dev uint64 - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -} - -type cpuMask uint64 - -const ( - _NCPUBITS = 0x40 -) - -const ( - CBitFieldMaskBit0 = 0x8000000000000000 - CBitFieldMaskBit1 = 0x4000000000000000 - CBitFieldMaskBit2 = 0x2000000000000000 - CBitFieldMaskBit3 = 0x1000000000000000 - CBitFieldMaskBit4 = 0x800000000000000 - CBitFieldMaskBit5 = 0x400000000000000 - CBitFieldMaskBit6 = 0x200000000000000 - CBitFieldMaskBit7 = 0x100000000000000 - CBitFieldMaskBit8 = 0x80000000000000 - CBitFieldMaskBit9 = 0x40000000000000 - CBitFieldMaskBit10 = 0x20000000000000 - CBitFieldMaskBit11 = 0x10000000000000 - CBitFieldMaskBit12 = 0x8000000000000 - CBitFieldMaskBit13 = 0x4000000000000 - CBitFieldMaskBit14 = 0x2000000000000 - CBitFieldMaskBit15 = 0x1000000000000 - CBitFieldMaskBit16 = 0x800000000000 - CBitFieldMaskBit17 = 0x400000000000 - CBitFieldMaskBit18 = 0x200000000000 - CBitFieldMaskBit19 = 0x100000000000 - CBitFieldMaskBit20 = 0x80000000000 - CBitFieldMaskBit21 = 0x40000000000 - CBitFieldMaskBit22 = 0x20000000000 - CBitFieldMaskBit23 = 0x10000000000 - CBitFieldMaskBit24 = 0x8000000000 - CBitFieldMaskBit25 = 0x4000000000 - CBitFieldMaskBit26 = 0x2000000000 - CBitFieldMaskBit27 = 0x1000000000 - CBitFieldMaskBit28 = 0x800000000 - CBitFieldMaskBit29 = 0x400000000 - CBitFieldMaskBit30 = 0x200000000 - CBitFieldMaskBit31 = 0x100000000 - CBitFieldMaskBit32 = 0x80000000 - CBitFieldMaskBit33 = 0x40000000 - CBitFieldMaskBit34 = 0x20000000 - CBitFieldMaskBit35 = 0x10000000 - CBitFieldMaskBit36 = 0x8000000 - CBitFieldMaskBit37 = 0x4000000 - CBitFieldMaskBit38 = 0x2000000 - CBitFieldMaskBit39 = 0x1000000 - CBitFieldMaskBit40 = 0x800000 - CBitFieldMaskBit41 = 0x400000 - CBitFieldMaskBit42 = 0x200000 - CBitFieldMaskBit43 = 0x100000 - CBitFieldMaskBit44 = 0x80000 - CBitFieldMaskBit45 = 0x40000 - CBitFieldMaskBit46 = 0x20000 - CBitFieldMaskBit47 = 0x10000 - CBitFieldMaskBit48 = 0x8000 - CBitFieldMaskBit49 = 0x4000 - CBitFieldMaskBit50 = 0x2000 - CBitFieldMaskBit51 = 0x1000 - CBitFieldMaskBit52 = 0x800 - CBitFieldMaskBit53 = 0x400 - CBitFieldMaskBit54 = 0x200 - CBitFieldMaskBit55 = 0x100 - CBitFieldMaskBit56 = 0x80 - CBitFieldMaskBit57 = 0x40 - CBitFieldMaskBit58 = 0x20 - CBitFieldMaskBit59 = 0x10 - CBitFieldMaskBit60 = 0x8 - CBitFieldMaskBit61 = 0x4 - CBitFieldMaskBit62 = 0x2 - CBitFieldMaskBit63 = 0x1 -) - -type SockaddrStorage struct { - Family uint16 - _ [118]uint8 - _ uint64 -} - -type HDGeometry struct { - Heads uint8 - Sectors uint8 - Cylinders uint16 - Start uint64 -} - -type Statfs_t struct { - Type int64 - Bsize int64 - Blocks uint64 - Bfree uint64 - Bavail uint64 - Files uint64 - Ffree uint64 - Fsid Fsid - Namelen int64 - Frsize int64 - Flags int64 - Spare [4]int64 -} - -type TpacketHdr struct { - Status uint64 - Len uint32 - Snaplen uint32 - Mac uint16 - Net uint16 - Sec uint32 - Usec uint32 - _ [4]byte -} - -const ( - SizeofTpacketHdr = 0x20 -) - -type RTCPLLInfo struct { - Ctrl int32 - Value int32 - Max int32 - Min int32 - Posmult int32 - Negmult int32 - Clock int64 -} - -type BlkpgPartition struct { - Start int64 - Length int64 - Pno int32 - Devname [64]uint8 - Volname [64]uint8 - _ [4]byte -} - -const ( - BLKPG = 0x20001269 -) - -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - -type CryptoUserAlg struct { - Name [64]uint8 - Driver_name [64]uint8 - Module_name [64]uint8 - Type uint32 - Mask uint32 - Refcnt uint32 - Flags uint32 -} - -type CryptoStatAEAD struct { - Type [64]uint8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatAKCipher struct { - Type [64]uint8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Verify_cnt uint64 - Sign_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatCipher struct { - Type [64]uint8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatCompress struct { - Type [64]uint8 - Compress_cnt uint64 - Compress_tlen uint64 - Decompress_cnt uint64 - Decompress_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatHash struct { - Type [64]uint8 - Hash_cnt uint64 - Hash_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatKPP struct { - Type [64]uint8 - Setsecret_cnt uint64 - Generate_public_key_cnt uint64 - Compute_shared_secret_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatRNG struct { - Type [64]uint8 - Generate_cnt uint64 - Generate_tlen uint64 - Seed_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatLarval struct { - Type [64]uint8 -} - -type CryptoReportLarval struct { - Type [64]uint8 -} - -type CryptoReportHash struct { - Type [64]uint8 - Blocksize uint32 - Digestsize uint32 -} - -type CryptoReportCipher struct { - Type [64]uint8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 -} - -type CryptoReportBlkCipher struct { - Type [64]uint8 - Geniv [64]uint8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 - Ivsize uint32 -} - -type CryptoReportAEAD struct { - Type [64]uint8 - Geniv [64]uint8 - Blocksize uint32 - Maxauthsize uint32 - Ivsize uint32 -} - -type CryptoReportComp struct { - Type [64]uint8 -} - -type CryptoReportRNG struct { - Type [64]uint8 - Seedsize uint32 -} - -type CryptoReportAKCipher struct { - Type [64]uint8 -} - -type CryptoReportKPP struct { - Type [64]uint8 -} - -type CryptoReportAcomp struct { - Type [64]uint8 -} - -type LoopInfo struct { - Number int32 - Device uint64 - Inode uint64 - Rdevice uint64 - Offset int32 - Encrypt_type int32 - Encrypt_key_size int32 - Flags int32 - Name [64]uint8 - Encrypt_key [32]uint8 - Init [2]uint64 - Reserved [4]uint8 - _ [4]byte -} - -type TIPCSubscr struct { - Seq TIPCServiceRange - Timeout uint32 - Filter uint32 - Handle [8]uint8 -} - -type TIPCSIOCLNReq struct { - Peer uint32 - Id uint32 - Linkname [68]uint8 -} - -type TIPCSIOCNodeIDReq struct { - Peer uint32 - Id [16]uint8 -} - -type PPSKInfo struct { - Assert_sequence uint32 - Clear_sequence uint32 - Assert_tu PPSKTime - Clear_tu PPSKTime - Current_mode int32 - _ [4]byte -} - -const ( - PPS_GETPARAMS = 0x400870a1 - PPS_SETPARAMS = 0x800870a2 - PPS_GETCAP = 0x400870a3 - PPS_FETCH = 0xc00870a4 -) - -const ( - PIDFD_NONBLOCK = 0x800 -) - -type SysvIpcPerm struct { - Key int32 - Uid uint32 - Gid uint32 - Cuid uint32 - Cgid uint32 - Mode uint32 - Seq uint32 - _ uint32 - _ uint64 - _ uint64 -} -type SysvShmDesc struct { - Perm SysvIpcPerm - Atime int64 - Dtime int64 - Ctime int64 - Segsz uint64 - Cpid int32 - Lpid int32 - Nattch uint64 - _ uint64 - _ 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 deleted file mode 100644 index 74acda9..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +++ /dev/null @@ -1,693 +0,0 @@ -// cgo -godefs -objdir=/tmp/ppc64le/cgo -- -Wall -Werror -static -I/tmp/ppc64le/include linux/types.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build ppc64le && linux -// +build ppc64le,linux - -package unix - -const ( - SizeofPtr = 0x8 - SizeofLong = 0x8 -) - -type ( - _C_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int64 -} - -type Timex struct { - Modes uint32 - Offset int64 - Freq int64 - Maxerror int64 - Esterror int64 - Status int32 - Constant int64 - Precision int64 - Tolerance int64 - Time Timeval - Tick int64 - Ppsfreq int64 - Jitter int64 - Shift int32 - Stabil int64 - Jitcnt int64 - Calcnt int64 - Errcnt int64 - Stbcnt int64 - Tai int32 - _ [44]byte -} - -type Time_t int64 - -type Tms struct { - Utime int64 - Stime int64 - Cutime int64 - Cstime int64 -} - -type Utimbuf struct { - Actime int64 - Modtime int64 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Stat_t struct { - Dev uint64 - Ino uint64 - Nlink uint64 - Mode uint32 - Uid uint32 - Gid uint32 - _ int32 - Rdev uint64 - Size int64 - Blksize int64 - Blocks int64 - Atim Timespec - Mtim Timespec - Ctim Timespec - _ uint64 - _ uint64 - _ uint64 -} - -type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]uint8 - _ [5]byte -} - -type Flock_t struct { - Type int16 - Whence int16 - Start int64 - Len int64 - Pid int32 - _ [4]byte -} - -type DmNameList struct { - Dev uint64 - Next uint32 - Name [0]byte - _ [4]byte -} - -const ( - FADV_DONTNEED = 0x4 - FADV_NOREUSE = 0x5 -) - -type RawSockaddrNFCLLCP struct { - Sa_family uint16 - Dev_idx uint32 - Target_idx uint32 - Nfc_protocol uint32 - Dsap uint8 - Ssap uint8 - Service_name [63]uint8 - Service_name_len uint64 -} - -type RawSockaddr struct { - Family uint16 - Data [14]uint8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [96]uint8 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type Msghdr struct { - Name *byte - Namelen uint32 - Iov *Iovec - Iovlen uint64 - Control *byte - Controllen uint64 - Flags int32 - _ [4]byte -} - -type Cmsghdr struct { - Len uint64 - Level int32 - Type int32 -} - -type ifreq struct { - Ifrn [16]byte - Ifru [24]byte -} - -const ( - SizeofSockaddrNFCLLCP = 0x60 - SizeofIovec = 0x10 - SizeofMsghdr = 0x38 - SizeofCmsghdr = 0x10 -) - -const ( - SizeofSockFprog = 0x10 -) - -type PtraceRegs struct { - Gpr [32]uint64 - Nip uint64 - Msr uint64 - Orig_gpr3 uint64 - Ctr uint64 - Link uint64 - Xer uint64 - Ccr uint64 - Softe uint64 - Trap uint64 - Dar uint64 - Dsisr uint64 - Result uint64 -} - -type FdSet struct { - Bits [16]int64 -} - -type Sysinfo_t struct { - Uptime int64 - Loads [3]uint64 - Totalram uint64 - Freeram uint64 - Sharedram uint64 - Bufferram uint64 - Totalswap uint64 - Freeswap uint64 - Procs uint16 - Pad uint16 - Totalhigh uint64 - Freehigh uint64 - Unit uint32 - _ [0]uint8 - _ [4]byte -} - -type Ustat_t struct { - Tfree int32 - Tinode uint64 - Fname [6]uint8 - Fpack [6]uint8 - _ [4]byte -} - -type EpollEvent struct { - Events uint32 - _ int32 - Fd int32 - Pad int32 -} - -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - -const ( - POLLRDHUP = 0x2000 -) - -type Sigset_t struct { - Val [16]uint64 -} - -const _C__NSIG = 0x41 - -type Siginfo struct { - Signo int32 - Errno int32 - Code int32 - _ int32 - _ [112]byte -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [19]uint8 - Line uint8 - Ispeed uint32 - Ospeed uint32 -} - -type Taskstats struct { - Version uint16 - Ac_exitcode uint32 - Ac_flag uint8 - Ac_nice uint8 - Cpu_count uint64 - Cpu_delay_total uint64 - Blkio_count uint64 - Blkio_delay_total uint64 - Swapin_count uint64 - Swapin_delay_total uint64 - Cpu_run_real_total uint64 - Cpu_run_virtual_total uint64 - Ac_comm [32]uint8 - Ac_sched uint8 - Ac_pad [3]uint8 - _ [4]byte - Ac_uid uint32 - Ac_gid uint32 - Ac_pid uint32 - Ac_ppid uint32 - Ac_btime uint32 - Ac_etime uint64 - Ac_utime uint64 - Ac_stime uint64 - Ac_minflt uint64 - Ac_majflt uint64 - Coremem uint64 - Virtmem uint64 - Hiwater_rss uint64 - Hiwater_vm uint64 - Read_char uint64 - Write_char uint64 - Read_syscalls uint64 - Write_syscalls uint64 - Read_bytes uint64 - Write_bytes uint64 - Cancelled_write_bytes uint64 - Nvcsw uint64 - Nivcsw uint64 - Ac_utimescaled uint64 - Ac_stimescaled uint64 - Cpu_scaled_run_real_total uint64 - Freepages_count uint64 - Freepages_delay_total uint64 - Thrashing_count uint64 - Thrashing_delay_total uint64 - Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 - Ac_tgid uint32 - Ac_tgetime uint64 - Ac_exe_dev uint64 - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -} - -type cpuMask uint64 - -const ( - _NCPUBITS = 0x40 -) - -const ( - CBitFieldMaskBit0 = 0x1 - CBitFieldMaskBit1 = 0x2 - CBitFieldMaskBit2 = 0x4 - CBitFieldMaskBit3 = 0x8 - CBitFieldMaskBit4 = 0x10 - CBitFieldMaskBit5 = 0x20 - CBitFieldMaskBit6 = 0x40 - CBitFieldMaskBit7 = 0x80 - CBitFieldMaskBit8 = 0x100 - CBitFieldMaskBit9 = 0x200 - CBitFieldMaskBit10 = 0x400 - CBitFieldMaskBit11 = 0x800 - CBitFieldMaskBit12 = 0x1000 - CBitFieldMaskBit13 = 0x2000 - CBitFieldMaskBit14 = 0x4000 - CBitFieldMaskBit15 = 0x8000 - CBitFieldMaskBit16 = 0x10000 - CBitFieldMaskBit17 = 0x20000 - CBitFieldMaskBit18 = 0x40000 - CBitFieldMaskBit19 = 0x80000 - CBitFieldMaskBit20 = 0x100000 - CBitFieldMaskBit21 = 0x200000 - CBitFieldMaskBit22 = 0x400000 - CBitFieldMaskBit23 = 0x800000 - CBitFieldMaskBit24 = 0x1000000 - CBitFieldMaskBit25 = 0x2000000 - CBitFieldMaskBit26 = 0x4000000 - CBitFieldMaskBit27 = 0x8000000 - CBitFieldMaskBit28 = 0x10000000 - CBitFieldMaskBit29 = 0x20000000 - CBitFieldMaskBit30 = 0x40000000 - CBitFieldMaskBit31 = 0x80000000 - CBitFieldMaskBit32 = 0x100000000 - CBitFieldMaskBit33 = 0x200000000 - CBitFieldMaskBit34 = 0x400000000 - CBitFieldMaskBit35 = 0x800000000 - CBitFieldMaskBit36 = 0x1000000000 - CBitFieldMaskBit37 = 0x2000000000 - CBitFieldMaskBit38 = 0x4000000000 - CBitFieldMaskBit39 = 0x8000000000 - CBitFieldMaskBit40 = 0x10000000000 - CBitFieldMaskBit41 = 0x20000000000 - CBitFieldMaskBit42 = 0x40000000000 - CBitFieldMaskBit43 = 0x80000000000 - CBitFieldMaskBit44 = 0x100000000000 - CBitFieldMaskBit45 = 0x200000000000 - CBitFieldMaskBit46 = 0x400000000000 - CBitFieldMaskBit47 = 0x800000000000 - CBitFieldMaskBit48 = 0x1000000000000 - CBitFieldMaskBit49 = 0x2000000000000 - CBitFieldMaskBit50 = 0x4000000000000 - CBitFieldMaskBit51 = 0x8000000000000 - CBitFieldMaskBit52 = 0x10000000000000 - CBitFieldMaskBit53 = 0x20000000000000 - CBitFieldMaskBit54 = 0x40000000000000 - CBitFieldMaskBit55 = 0x80000000000000 - CBitFieldMaskBit56 = 0x100000000000000 - CBitFieldMaskBit57 = 0x200000000000000 - CBitFieldMaskBit58 = 0x400000000000000 - CBitFieldMaskBit59 = 0x800000000000000 - CBitFieldMaskBit60 = 0x1000000000000000 - CBitFieldMaskBit61 = 0x2000000000000000 - CBitFieldMaskBit62 = 0x4000000000000000 - CBitFieldMaskBit63 = 0x8000000000000000 -) - -type SockaddrStorage struct { - Family uint16 - _ [118]uint8 - _ uint64 -} - -type HDGeometry struct { - Heads uint8 - Sectors uint8 - Cylinders uint16 - Start uint64 -} - -type Statfs_t struct { - Type int64 - Bsize int64 - Blocks uint64 - Bfree uint64 - Bavail uint64 - Files uint64 - Ffree uint64 - Fsid Fsid - Namelen int64 - Frsize int64 - Flags int64 - Spare [4]int64 -} - -type TpacketHdr struct { - Status uint64 - Len uint32 - Snaplen uint32 - Mac uint16 - Net uint16 - Sec uint32 - Usec uint32 - _ [4]byte -} - -const ( - SizeofTpacketHdr = 0x20 -) - -type RTCPLLInfo struct { - Ctrl int32 - Value int32 - Max int32 - Min int32 - Posmult int32 - Negmult int32 - Clock int64 -} - -type BlkpgPartition struct { - Start int64 - Length int64 - Pno int32 - Devname [64]uint8 - Volname [64]uint8 - _ [4]byte -} - -const ( - BLKPG = 0x20001269 -) - -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - -type CryptoUserAlg struct { - Name [64]uint8 - Driver_name [64]uint8 - Module_name [64]uint8 - Type uint32 - Mask uint32 - Refcnt uint32 - Flags uint32 -} - -type CryptoStatAEAD struct { - Type [64]uint8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatAKCipher struct { - Type [64]uint8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Verify_cnt uint64 - Sign_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatCipher struct { - Type [64]uint8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatCompress struct { - Type [64]uint8 - Compress_cnt uint64 - Compress_tlen uint64 - Decompress_cnt uint64 - Decompress_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatHash struct { - Type [64]uint8 - Hash_cnt uint64 - Hash_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatKPP struct { - Type [64]uint8 - Setsecret_cnt uint64 - Generate_public_key_cnt uint64 - Compute_shared_secret_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatRNG struct { - Type [64]uint8 - Generate_cnt uint64 - Generate_tlen uint64 - Seed_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatLarval struct { - Type [64]uint8 -} - -type CryptoReportLarval struct { - Type [64]uint8 -} - -type CryptoReportHash struct { - Type [64]uint8 - Blocksize uint32 - Digestsize uint32 -} - -type CryptoReportCipher struct { - Type [64]uint8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 -} - -type CryptoReportBlkCipher struct { - Type [64]uint8 - Geniv [64]uint8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 - Ivsize uint32 -} - -type CryptoReportAEAD struct { - Type [64]uint8 - Geniv [64]uint8 - Blocksize uint32 - Maxauthsize uint32 - Ivsize uint32 -} - -type CryptoReportComp struct { - Type [64]uint8 -} - -type CryptoReportRNG struct { - Type [64]uint8 - Seedsize uint32 -} - -type CryptoReportAKCipher struct { - Type [64]uint8 -} - -type CryptoReportKPP struct { - Type [64]uint8 -} - -type CryptoReportAcomp struct { - Type [64]uint8 -} - -type LoopInfo struct { - Number int32 - Device uint64 - Inode uint64 - Rdevice uint64 - Offset int32 - Encrypt_type int32 - Encrypt_key_size int32 - Flags int32 - Name [64]uint8 - Encrypt_key [32]uint8 - Init [2]uint64 - Reserved [4]uint8 - _ [4]byte -} - -type TIPCSubscr struct { - Seq TIPCServiceRange - Timeout uint32 - Filter uint32 - Handle [8]uint8 -} - -type TIPCSIOCLNReq struct { - Peer uint32 - Id uint32 - Linkname [68]uint8 -} - -type TIPCSIOCNodeIDReq struct { - Peer uint32 - Id [16]uint8 -} - -type PPSKInfo struct { - Assert_sequence uint32 - Clear_sequence uint32 - Assert_tu PPSKTime - Clear_tu PPSKTime - Current_mode int32 - _ [4]byte -} - -const ( - PPS_GETPARAMS = 0x400870a1 - PPS_SETPARAMS = 0x800870a2 - PPS_GETCAP = 0x400870a3 - PPS_FETCH = 0xc00870a4 -) - -const ( - PIDFD_NONBLOCK = 0x800 -) - -type SysvIpcPerm struct { - Key int32 - Uid uint32 - Gid uint32 - Cuid uint32 - Cgid uint32 - Mode uint32 - Seq uint32 - _ uint32 - _ uint64 - _ uint64 -} -type SysvShmDesc struct { - Perm SysvIpcPerm - Atime int64 - Dtime int64 - Ctime int64 - Segsz uint64 - Cpid int32 - Lpid int32 - Nattch uint64 - _ uint64 - _ 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 deleted file mode 100644 index 50ebe69..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +++ /dev/null @@ -1,712 +0,0 @@ -// cgo -godefs -objdir=/tmp/riscv64/cgo -- -Wall -Werror -static -I/tmp/riscv64/include linux/types.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build riscv64 && linux -// +build riscv64,linux - -package unix - -const ( - SizeofPtr = 0x8 - SizeofLong = 0x8 -) - -type ( - _C_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int64 -} - -type Timex struct { - Modes uint32 - Offset int64 - Freq int64 - Maxerror int64 - Esterror int64 - Status int32 - Constant int64 - Precision int64 - Tolerance int64 - Time Timeval - Tick int64 - Ppsfreq int64 - Jitter int64 - Shift int32 - Stabil int64 - Jitcnt int64 - Calcnt int64 - Errcnt int64 - Stbcnt int64 - Tai int32 - _ [44]byte -} - -type Time_t int64 - -type Tms struct { - Utime int64 - Stime int64 - Cutime int64 - Cstime int64 -} - -type Utimbuf struct { - Actime int64 - Modtime int64 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Stat_t struct { - Dev uint64 - Ino uint64 - Mode uint32 - Nlink uint32 - Uid uint32 - Gid uint32 - Rdev uint64 - _ uint64 - Size int64 - Blksize int32 - _ int32 - Blocks int64 - Atim Timespec - Mtim Timespec - Ctim Timespec - _ [2]int32 -} - -type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]uint8 - _ [5]byte -} - -type Flock_t struct { - Type int16 - Whence int16 - Start int64 - Len int64 - Pid int32 - _ [4]byte -} - -type DmNameList struct { - Dev uint64 - Next uint32 - Name [0]byte - _ [4]byte -} - -const ( - FADV_DONTNEED = 0x4 - FADV_NOREUSE = 0x5 -) - -type RawSockaddrNFCLLCP struct { - Sa_family uint16 - Dev_idx uint32 - Target_idx uint32 - Nfc_protocol uint32 - Dsap uint8 - Ssap uint8 - Service_name [63]uint8 - Service_name_len uint64 -} - -type RawSockaddr struct { - Family uint16 - Data [14]uint8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [96]uint8 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type Msghdr struct { - Name *byte - Namelen uint32 - Iov *Iovec - Iovlen uint64 - Control *byte - Controllen uint64 - Flags int32 - _ [4]byte -} - -type Cmsghdr struct { - Len uint64 - Level int32 - Type int32 -} - -type ifreq struct { - Ifrn [16]byte - Ifru [24]byte -} - -const ( - SizeofSockaddrNFCLLCP = 0x60 - SizeofIovec = 0x10 - SizeofMsghdr = 0x38 - SizeofCmsghdr = 0x10 -) - -const ( - SizeofSockFprog = 0x10 -) - -type PtraceRegs struct { - Pc uint64 - Ra uint64 - Sp uint64 - Gp uint64 - Tp uint64 - T0 uint64 - T1 uint64 - T2 uint64 - S0 uint64 - S1 uint64 - A0 uint64 - A1 uint64 - A2 uint64 - A3 uint64 - A4 uint64 - A5 uint64 - A6 uint64 - A7 uint64 - S2 uint64 - S3 uint64 - S4 uint64 - S5 uint64 - S6 uint64 - S7 uint64 - S8 uint64 - S9 uint64 - S10 uint64 - S11 uint64 - T3 uint64 - T4 uint64 - T5 uint64 - T6 uint64 -} - -type FdSet struct { - Bits [16]int64 -} - -type Sysinfo_t struct { - Uptime int64 - Loads [3]uint64 - Totalram uint64 - Freeram uint64 - Sharedram uint64 - Bufferram uint64 - Totalswap uint64 - Freeswap uint64 - Procs uint16 - Pad uint16 - Totalhigh uint64 - Freehigh uint64 - Unit uint32 - _ [0]uint8 - _ [4]byte -} - -type Ustat_t struct { - Tfree int32 - Tinode uint64 - Fname [6]uint8 - Fpack [6]uint8 - _ [4]byte -} - -type EpollEvent struct { - Events uint32 - _ int32 - Fd int32 - Pad int32 -} - -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - -const ( - POLLRDHUP = 0x2000 -) - -type Sigset_t struct { - Val [16]uint64 -} - -const _C__NSIG = 0x41 - -type Siginfo struct { - Signo int32 - Errno int32 - Code int32 - _ int32 - _ [112]byte -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Line uint8 - Cc [19]uint8 - Ispeed uint32 - Ospeed uint32 -} - -type Taskstats struct { - Version uint16 - Ac_exitcode uint32 - Ac_flag uint8 - Ac_nice uint8 - Cpu_count uint64 - Cpu_delay_total uint64 - Blkio_count uint64 - Blkio_delay_total uint64 - Swapin_count uint64 - Swapin_delay_total uint64 - Cpu_run_real_total uint64 - Cpu_run_virtual_total uint64 - Ac_comm [32]uint8 - Ac_sched uint8 - Ac_pad [3]uint8 - _ [4]byte - Ac_uid uint32 - Ac_gid uint32 - Ac_pid uint32 - Ac_ppid uint32 - Ac_btime uint32 - Ac_etime uint64 - Ac_utime uint64 - Ac_stime uint64 - Ac_minflt uint64 - Ac_majflt uint64 - Coremem uint64 - Virtmem uint64 - Hiwater_rss uint64 - Hiwater_vm uint64 - Read_char uint64 - Write_char uint64 - Read_syscalls uint64 - Write_syscalls uint64 - Read_bytes uint64 - Write_bytes uint64 - Cancelled_write_bytes uint64 - Nvcsw uint64 - Nivcsw uint64 - Ac_utimescaled uint64 - Ac_stimescaled uint64 - Cpu_scaled_run_real_total uint64 - Freepages_count uint64 - Freepages_delay_total uint64 - Thrashing_count uint64 - Thrashing_delay_total uint64 - Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 - Ac_tgid uint32 - Ac_tgetime uint64 - Ac_exe_dev uint64 - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -} - -type cpuMask uint64 - -const ( - _NCPUBITS = 0x40 -) - -const ( - CBitFieldMaskBit0 = 0x1 - CBitFieldMaskBit1 = 0x2 - CBitFieldMaskBit2 = 0x4 - CBitFieldMaskBit3 = 0x8 - CBitFieldMaskBit4 = 0x10 - CBitFieldMaskBit5 = 0x20 - CBitFieldMaskBit6 = 0x40 - CBitFieldMaskBit7 = 0x80 - CBitFieldMaskBit8 = 0x100 - CBitFieldMaskBit9 = 0x200 - CBitFieldMaskBit10 = 0x400 - CBitFieldMaskBit11 = 0x800 - CBitFieldMaskBit12 = 0x1000 - CBitFieldMaskBit13 = 0x2000 - CBitFieldMaskBit14 = 0x4000 - CBitFieldMaskBit15 = 0x8000 - CBitFieldMaskBit16 = 0x10000 - CBitFieldMaskBit17 = 0x20000 - CBitFieldMaskBit18 = 0x40000 - CBitFieldMaskBit19 = 0x80000 - CBitFieldMaskBit20 = 0x100000 - CBitFieldMaskBit21 = 0x200000 - CBitFieldMaskBit22 = 0x400000 - CBitFieldMaskBit23 = 0x800000 - CBitFieldMaskBit24 = 0x1000000 - CBitFieldMaskBit25 = 0x2000000 - CBitFieldMaskBit26 = 0x4000000 - CBitFieldMaskBit27 = 0x8000000 - CBitFieldMaskBit28 = 0x10000000 - CBitFieldMaskBit29 = 0x20000000 - CBitFieldMaskBit30 = 0x40000000 - CBitFieldMaskBit31 = 0x80000000 - CBitFieldMaskBit32 = 0x100000000 - CBitFieldMaskBit33 = 0x200000000 - CBitFieldMaskBit34 = 0x400000000 - CBitFieldMaskBit35 = 0x800000000 - CBitFieldMaskBit36 = 0x1000000000 - CBitFieldMaskBit37 = 0x2000000000 - CBitFieldMaskBit38 = 0x4000000000 - CBitFieldMaskBit39 = 0x8000000000 - CBitFieldMaskBit40 = 0x10000000000 - CBitFieldMaskBit41 = 0x20000000000 - CBitFieldMaskBit42 = 0x40000000000 - CBitFieldMaskBit43 = 0x80000000000 - CBitFieldMaskBit44 = 0x100000000000 - CBitFieldMaskBit45 = 0x200000000000 - CBitFieldMaskBit46 = 0x400000000000 - CBitFieldMaskBit47 = 0x800000000000 - CBitFieldMaskBit48 = 0x1000000000000 - CBitFieldMaskBit49 = 0x2000000000000 - CBitFieldMaskBit50 = 0x4000000000000 - CBitFieldMaskBit51 = 0x8000000000000 - CBitFieldMaskBit52 = 0x10000000000000 - CBitFieldMaskBit53 = 0x20000000000000 - CBitFieldMaskBit54 = 0x40000000000000 - CBitFieldMaskBit55 = 0x80000000000000 - CBitFieldMaskBit56 = 0x100000000000000 - CBitFieldMaskBit57 = 0x200000000000000 - CBitFieldMaskBit58 = 0x400000000000000 - CBitFieldMaskBit59 = 0x800000000000000 - CBitFieldMaskBit60 = 0x1000000000000000 - CBitFieldMaskBit61 = 0x2000000000000000 - CBitFieldMaskBit62 = 0x4000000000000000 - CBitFieldMaskBit63 = 0x8000000000000000 -) - -type SockaddrStorage struct { - Family uint16 - _ [118]uint8 - _ uint64 -} - -type HDGeometry struct { - Heads uint8 - Sectors uint8 - Cylinders uint16 - Start uint64 -} - -type Statfs_t struct { - Type int64 - Bsize int64 - Blocks uint64 - Bfree uint64 - Bavail uint64 - Files uint64 - Ffree uint64 - Fsid Fsid - Namelen int64 - Frsize int64 - Flags int64 - Spare [4]int64 -} - -type TpacketHdr struct { - Status uint64 - Len uint32 - Snaplen uint32 - Mac uint16 - Net uint16 - Sec uint32 - Usec uint32 - _ [4]byte -} - -const ( - SizeofTpacketHdr = 0x20 -) - -type RTCPLLInfo struct { - Ctrl int32 - Value int32 - Max int32 - Min int32 - Posmult int32 - Negmult int32 - Clock int64 -} - -type BlkpgPartition struct { - Start int64 - Length int64 - Pno int32 - Devname [64]uint8 - Volname [64]uint8 - _ [4]byte -} - -const ( - BLKPG = 0x1269 -) - -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - -type CryptoUserAlg struct { - Name [64]uint8 - Driver_name [64]uint8 - Module_name [64]uint8 - Type uint32 - Mask uint32 - Refcnt uint32 - Flags uint32 -} - -type CryptoStatAEAD struct { - Type [64]uint8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatAKCipher struct { - Type [64]uint8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Verify_cnt uint64 - Sign_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatCipher struct { - Type [64]uint8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatCompress struct { - Type [64]uint8 - Compress_cnt uint64 - Compress_tlen uint64 - Decompress_cnt uint64 - Decompress_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatHash struct { - Type [64]uint8 - Hash_cnt uint64 - Hash_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatKPP struct { - Type [64]uint8 - Setsecret_cnt uint64 - Generate_public_key_cnt uint64 - Compute_shared_secret_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatRNG struct { - Type [64]uint8 - Generate_cnt uint64 - Generate_tlen uint64 - Seed_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatLarval struct { - Type [64]uint8 -} - -type CryptoReportLarval struct { - Type [64]uint8 -} - -type CryptoReportHash struct { - Type [64]uint8 - Blocksize uint32 - Digestsize uint32 -} - -type CryptoReportCipher struct { - Type [64]uint8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 -} - -type CryptoReportBlkCipher struct { - Type [64]uint8 - Geniv [64]uint8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 - Ivsize uint32 -} - -type CryptoReportAEAD struct { - Type [64]uint8 - Geniv [64]uint8 - Blocksize uint32 - Maxauthsize uint32 - Ivsize uint32 -} - -type CryptoReportComp struct { - Type [64]uint8 -} - -type CryptoReportRNG struct { - Type [64]uint8 - Seedsize uint32 -} - -type CryptoReportAKCipher struct { - Type [64]uint8 -} - -type CryptoReportKPP struct { - Type [64]uint8 -} - -type CryptoReportAcomp struct { - Type [64]uint8 -} - -type LoopInfo struct { - Number int32 - Device uint32 - Inode uint64 - Rdevice uint32 - Offset int32 - Encrypt_type int32 - Encrypt_key_size int32 - Flags int32 - Name [64]uint8 - Encrypt_key [32]uint8 - Init [2]uint64 - Reserved [4]uint8 - _ [4]byte -} - -type TIPCSubscr struct { - Seq TIPCServiceRange - Timeout uint32 - Filter uint32 - Handle [8]uint8 -} - -type TIPCSIOCLNReq struct { - Peer uint32 - Id uint32 - Linkname [68]uint8 -} - -type TIPCSIOCNodeIDReq struct { - Peer uint32 - Id [16]uint8 -} - -type PPSKInfo struct { - Assert_sequence uint32 - Clear_sequence uint32 - Assert_tu PPSKTime - Clear_tu PPSKTime - Current_mode int32 - _ [4]byte -} - -const ( - PPS_GETPARAMS = 0x800870a1 - PPS_SETPARAMS = 0x400870a2 - PPS_GETCAP = 0x800870a3 - PPS_FETCH = 0xc00870a4 -) - -const ( - PIDFD_NONBLOCK = 0x800 -) - -type SysvIpcPerm struct { - Key int32 - Uid uint32 - Gid uint32 - Cuid uint32 - Cgid uint32 - Mode uint32 - _ [0]uint8 - Seq uint16 - _ uint16 - _ uint64 - _ uint64 -} -type SysvShmDesc struct { - Perm SysvIpcPerm - Segsz uint64 - Atime int64 - Dtime int64 - Ctime int64 - Cpid int32 - Lpid int32 - Nattch uint64 - _ uint64 - _ 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 deleted file mode 100644 index 75b34c2..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +++ /dev/null @@ -1,707 +0,0 @@ -// cgo -godefs -objdir=/tmp/s390x/cgo -- -Wall -Werror -static -I/tmp/s390x/include -fsigned-char linux/types.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build s390x && linux -// +build s390x,linux - -package unix - -const ( - SizeofPtr = 0x8 - SizeofLong = 0x8 -) - -type ( - _C_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int64 -} - -type Timex struct { - Modes uint32 - Offset int64 - Freq int64 - Maxerror int64 - Esterror int64 - Status int32 - Constant int64 - Precision int64 - Tolerance int64 - Time Timeval - Tick int64 - Ppsfreq int64 - Jitter int64 - Shift int32 - Stabil int64 - Jitcnt int64 - Calcnt int64 - Errcnt int64 - Stbcnt int64 - Tai int32 - _ [44]byte -} - -type Time_t int64 - -type Tms struct { - Utime int64 - Stime int64 - Cutime int64 - Cstime int64 -} - -type Utimbuf struct { - Actime int64 - Modtime int64 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Stat_t struct { - Dev uint64 - Ino uint64 - Nlink uint64 - Mode uint32 - Uid uint32 - Gid uint32 - _ int32 - Rdev uint64 - Size int64 - Atim Timespec - Mtim Timespec - Ctim Timespec - Blksize int64 - Blocks int64 - _ [3]int64 -} - -type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]int8 - _ [5]byte -} - -type Flock_t struct { - Type int16 - Whence int16 - Start int64 - Len int64 - Pid int32 - _ [4]byte -} - -type DmNameList struct { - Dev uint64 - Next uint32 - Name [0]byte - _ [4]byte -} - -const ( - FADV_DONTNEED = 0x6 - FADV_NOREUSE = 0x7 -) - -type RawSockaddrNFCLLCP struct { - Sa_family uint16 - Dev_idx uint32 - Target_idx uint32 - Nfc_protocol uint32 - Dsap uint8 - Ssap uint8 - Service_name [63]uint8 - Service_name_len uint64 -} - -type RawSockaddr struct { - Family uint16 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [96]int8 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type Msghdr struct { - Name *byte - Namelen uint32 - Iov *Iovec - Iovlen uint64 - Control *byte - Controllen uint64 - Flags int32 - _ [4]byte -} - -type Cmsghdr struct { - Len uint64 - Level int32 - Type int32 -} - -type ifreq struct { - Ifrn [16]byte - Ifru [24]byte -} - -const ( - SizeofSockaddrNFCLLCP = 0x60 - SizeofIovec = 0x10 - SizeofMsghdr = 0x38 - SizeofCmsghdr = 0x10 -) - -const ( - SizeofSockFprog = 0x10 -) - -type PtraceRegs struct { - Psw PtracePsw - Gprs [16]uint64 - Acrs [16]uint32 - Orig_gpr2 uint64 - Fp_regs PtraceFpregs - Per_info PtracePer - Ieee_instruction_pointer uint64 -} - -type PtracePsw struct { - Mask uint64 - Addr uint64 -} - -type PtraceFpregs struct { - Fpc uint32 - Fprs [16]float64 -} - -type PtracePer struct { - Control_regs [3]uint64 - _ [8]byte - Starting_addr uint64 - Ending_addr uint64 - Perc_atmid uint16 - Address uint64 - Access_id uint8 - _ [7]byte -} - -type FdSet struct { - Bits [16]int64 -} - -type Sysinfo_t struct { - Uptime int64 - Loads [3]uint64 - Totalram uint64 - Freeram uint64 - Sharedram uint64 - Bufferram uint64 - Totalswap uint64 - Freeswap uint64 - Procs uint16 - Pad uint16 - Totalhigh uint64 - Freehigh uint64 - Unit uint32 - _ [0]int8 - _ [4]byte -} - -type Ustat_t struct { - Tfree int32 - Tinode uint64 - Fname [6]int8 - Fpack [6]int8 - _ [4]byte -} - -type EpollEvent struct { - Events uint32 - _ int32 - Fd int32 - Pad int32 -} - -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - -const ( - POLLRDHUP = 0x2000 -) - -type Sigset_t struct { - Val [16]uint64 -} - -const _C__NSIG = 0x41 - -type Siginfo struct { - Signo int32 - Errno int32 - Code int32 - _ int32 - _ [112]byte -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Line uint8 - Cc [19]uint8 - Ispeed uint32 - Ospeed uint32 -} - -type Taskstats struct { - Version uint16 - Ac_exitcode uint32 - Ac_flag uint8 - Ac_nice uint8 - Cpu_count uint64 - Cpu_delay_total uint64 - Blkio_count uint64 - Blkio_delay_total uint64 - Swapin_count uint64 - Swapin_delay_total uint64 - Cpu_run_real_total uint64 - Cpu_run_virtual_total uint64 - Ac_comm [32]int8 - Ac_sched uint8 - Ac_pad [3]uint8 - _ [4]byte - Ac_uid uint32 - Ac_gid uint32 - Ac_pid uint32 - Ac_ppid uint32 - Ac_btime uint32 - Ac_etime uint64 - Ac_utime uint64 - Ac_stime uint64 - Ac_minflt uint64 - Ac_majflt uint64 - Coremem uint64 - Virtmem uint64 - Hiwater_rss uint64 - Hiwater_vm uint64 - Read_char uint64 - Write_char uint64 - Read_syscalls uint64 - Write_syscalls uint64 - Read_bytes uint64 - Write_bytes uint64 - Cancelled_write_bytes uint64 - Nvcsw uint64 - Nivcsw uint64 - Ac_utimescaled uint64 - Ac_stimescaled uint64 - Cpu_scaled_run_real_total uint64 - Freepages_count uint64 - Freepages_delay_total uint64 - Thrashing_count uint64 - Thrashing_delay_total uint64 - Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 - Ac_tgid uint32 - Ac_tgetime uint64 - Ac_exe_dev uint64 - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -} - -type cpuMask uint64 - -const ( - _NCPUBITS = 0x40 -) - -const ( - CBitFieldMaskBit0 = 0x8000000000000000 - CBitFieldMaskBit1 = 0x4000000000000000 - CBitFieldMaskBit2 = 0x2000000000000000 - CBitFieldMaskBit3 = 0x1000000000000000 - CBitFieldMaskBit4 = 0x800000000000000 - CBitFieldMaskBit5 = 0x400000000000000 - CBitFieldMaskBit6 = 0x200000000000000 - CBitFieldMaskBit7 = 0x100000000000000 - CBitFieldMaskBit8 = 0x80000000000000 - CBitFieldMaskBit9 = 0x40000000000000 - CBitFieldMaskBit10 = 0x20000000000000 - CBitFieldMaskBit11 = 0x10000000000000 - CBitFieldMaskBit12 = 0x8000000000000 - CBitFieldMaskBit13 = 0x4000000000000 - CBitFieldMaskBit14 = 0x2000000000000 - CBitFieldMaskBit15 = 0x1000000000000 - CBitFieldMaskBit16 = 0x800000000000 - CBitFieldMaskBit17 = 0x400000000000 - CBitFieldMaskBit18 = 0x200000000000 - CBitFieldMaskBit19 = 0x100000000000 - CBitFieldMaskBit20 = 0x80000000000 - CBitFieldMaskBit21 = 0x40000000000 - CBitFieldMaskBit22 = 0x20000000000 - CBitFieldMaskBit23 = 0x10000000000 - CBitFieldMaskBit24 = 0x8000000000 - CBitFieldMaskBit25 = 0x4000000000 - CBitFieldMaskBit26 = 0x2000000000 - CBitFieldMaskBit27 = 0x1000000000 - CBitFieldMaskBit28 = 0x800000000 - CBitFieldMaskBit29 = 0x400000000 - CBitFieldMaskBit30 = 0x200000000 - CBitFieldMaskBit31 = 0x100000000 - CBitFieldMaskBit32 = 0x80000000 - CBitFieldMaskBit33 = 0x40000000 - CBitFieldMaskBit34 = 0x20000000 - CBitFieldMaskBit35 = 0x10000000 - CBitFieldMaskBit36 = 0x8000000 - CBitFieldMaskBit37 = 0x4000000 - CBitFieldMaskBit38 = 0x2000000 - CBitFieldMaskBit39 = 0x1000000 - CBitFieldMaskBit40 = 0x800000 - CBitFieldMaskBit41 = 0x400000 - CBitFieldMaskBit42 = 0x200000 - CBitFieldMaskBit43 = 0x100000 - CBitFieldMaskBit44 = 0x80000 - CBitFieldMaskBit45 = 0x40000 - CBitFieldMaskBit46 = 0x20000 - CBitFieldMaskBit47 = 0x10000 - CBitFieldMaskBit48 = 0x8000 - CBitFieldMaskBit49 = 0x4000 - CBitFieldMaskBit50 = 0x2000 - CBitFieldMaskBit51 = 0x1000 - CBitFieldMaskBit52 = 0x800 - CBitFieldMaskBit53 = 0x400 - CBitFieldMaskBit54 = 0x200 - CBitFieldMaskBit55 = 0x100 - CBitFieldMaskBit56 = 0x80 - CBitFieldMaskBit57 = 0x40 - CBitFieldMaskBit58 = 0x20 - CBitFieldMaskBit59 = 0x10 - CBitFieldMaskBit60 = 0x8 - CBitFieldMaskBit61 = 0x4 - CBitFieldMaskBit62 = 0x2 - CBitFieldMaskBit63 = 0x1 -) - -type SockaddrStorage struct { - Family uint16 - _ [118]int8 - _ uint64 -} - -type HDGeometry struct { - Heads uint8 - Sectors uint8 - Cylinders uint16 - Start uint64 -} - -type Statfs_t struct { - Type uint32 - Bsize uint32 - Blocks uint64 - Bfree uint64 - Bavail uint64 - Files uint64 - Ffree uint64 - Fsid Fsid - Namelen uint32 - Frsize uint32 - Flags uint32 - Spare [4]uint32 - _ [4]byte -} - -type TpacketHdr struct { - Status uint64 - Len uint32 - Snaplen uint32 - Mac uint16 - Net uint16 - Sec uint32 - Usec uint32 - _ [4]byte -} - -const ( - SizeofTpacketHdr = 0x20 -) - -type RTCPLLInfo struct { - Ctrl int32 - Value int32 - Max int32 - Min int32 - Posmult int32 - Negmult int32 - Clock int64 -} - -type BlkpgPartition struct { - Start int64 - Length int64 - Pno int32 - Devname [64]uint8 - Volname [64]uint8 - _ [4]byte -} - -const ( - BLKPG = 0x1269 -) - -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - -type CryptoUserAlg struct { - Name [64]int8 - Driver_name [64]int8 - Module_name [64]int8 - Type uint32 - Mask uint32 - Refcnt uint32 - Flags uint32 -} - -type CryptoStatAEAD struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatAKCipher struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Verify_cnt uint64 - Sign_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatCipher struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatCompress struct { - Type [64]int8 - Compress_cnt uint64 - Compress_tlen uint64 - Decompress_cnt uint64 - Decompress_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatHash struct { - Type [64]int8 - Hash_cnt uint64 - Hash_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatKPP struct { - Type [64]int8 - Setsecret_cnt uint64 - Generate_public_key_cnt uint64 - Compute_shared_secret_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatRNG struct { - Type [64]int8 - Generate_cnt uint64 - Generate_tlen uint64 - Seed_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatLarval struct { - Type [64]int8 -} - -type CryptoReportLarval struct { - Type [64]int8 -} - -type CryptoReportHash struct { - Type [64]int8 - Blocksize uint32 - Digestsize uint32 -} - -type CryptoReportCipher struct { - Type [64]int8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 -} - -type CryptoReportBlkCipher struct { - Type [64]int8 - Geniv [64]int8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 - Ivsize uint32 -} - -type CryptoReportAEAD struct { - Type [64]int8 - Geniv [64]int8 - Blocksize uint32 - Maxauthsize uint32 - Ivsize uint32 -} - -type CryptoReportComp struct { - Type [64]int8 -} - -type CryptoReportRNG struct { - Type [64]int8 - Seedsize uint32 -} - -type CryptoReportAKCipher struct { - Type [64]int8 -} - -type CryptoReportKPP struct { - Type [64]int8 -} - -type CryptoReportAcomp struct { - Type [64]int8 -} - -type LoopInfo struct { - Number int32 - Device uint16 - Inode uint64 - Rdevice uint16 - Offset int32 - Encrypt_type int32 - Encrypt_key_size int32 - Flags int32 - Name [64]int8 - Encrypt_key [32]uint8 - Init [2]uint64 - Reserved [4]int8 - _ [4]byte -} - -type TIPCSubscr struct { - Seq TIPCServiceRange - Timeout uint32 - Filter uint32 - Handle [8]int8 -} - -type TIPCSIOCLNReq struct { - Peer uint32 - Id uint32 - Linkname [68]int8 -} - -type TIPCSIOCNodeIDReq struct { - Peer uint32 - Id [16]int8 -} - -type PPSKInfo struct { - Assert_sequence uint32 - Clear_sequence uint32 - Assert_tu PPSKTime - Clear_tu PPSKTime - Current_mode int32 - _ [4]byte -} - -const ( - PPS_GETPARAMS = 0x800870a1 - PPS_SETPARAMS = 0x400870a2 - PPS_GETCAP = 0x800870a3 - PPS_FETCH = 0xc00870a4 -) - -const ( - PIDFD_NONBLOCK = 0x800 -) - -type SysvIpcPerm struct { - Key int32 - Uid uint32 - Gid uint32 - Cuid uint32 - Cgid uint32 - Mode uint32 - _ uint16 - Seq uint16 - _ uint64 - _ uint64 -} -type SysvShmDesc struct { - Perm SysvIpcPerm - Segsz uint64 - Atime int64 - Dtime int64 - Ctime int64 - Cpid int32 - Lpid int32 - Nattch uint64 - _ uint64 - _ 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 deleted file mode 100644 index 429c3bf..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +++ /dev/null @@ -1,688 +0,0 @@ -// cgo -godefs -objdir=/tmp/sparc64/cgo -- -Wall -Werror -static -I/tmp/sparc64/include linux/types.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build sparc64 && linux -// +build sparc64,linux - -package unix - -const ( - SizeofPtr = 0x8 - SizeofLong = 0x8 -) - -type ( - _C_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int32 - _ [4]byte -} - -type Timex struct { - Modes uint32 - Offset int64 - Freq int64 - Maxerror int64 - Esterror int64 - Status int32 - Constant int64 - Precision int64 - Tolerance int64 - Time Timeval - Tick int64 - Ppsfreq int64 - Jitter int64 - Shift int32 - Stabil int64 - Jitcnt int64 - Calcnt int64 - Errcnt int64 - Stbcnt int64 - Tai int32 - _ [44]byte -} - -type Time_t int64 - -type Tms struct { - Utime int64 - Stime int64 - Cutime int64 - Cstime int64 -} - -type Utimbuf struct { - Actime int64 - Modtime int64 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Stat_t struct { - Dev uint64 - _ uint16 - Ino uint64 - Mode uint32 - Nlink uint32 - Uid uint32 - Gid uint32 - Rdev uint64 - _ uint16 - Size int64 - Blksize int64 - Blocks int64 - Atim Timespec - Mtim Timespec - Ctim Timespec - _ uint64 - _ uint64 -} - -type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]int8 - _ [5]byte -} - -type Flock_t struct { - Type int16 - Whence int16 - Start int64 - Len int64 - Pid int32 - _ int16 - _ [2]byte -} - -type DmNameList struct { - Dev uint64 - Next uint32 - Name [0]byte - _ [4]byte -} - -const ( - FADV_DONTNEED = 0x4 - FADV_NOREUSE = 0x5 -) - -type RawSockaddrNFCLLCP struct { - Sa_family uint16 - Dev_idx uint32 - Target_idx uint32 - Nfc_protocol uint32 - Dsap uint8 - Ssap uint8 - Service_name [63]uint8 - Service_name_len uint64 -} - -type RawSockaddr struct { - Family uint16 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [96]int8 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type Msghdr struct { - Name *byte - Namelen uint32 - Iov *Iovec - Iovlen uint64 - Control *byte - Controllen uint64 - Flags int32 - _ [4]byte -} - -type Cmsghdr struct { - Len uint64 - Level int32 - Type int32 -} - -type ifreq struct { - Ifrn [16]byte - Ifru [24]byte -} - -const ( - SizeofSockaddrNFCLLCP = 0x60 - SizeofIovec = 0x10 - SizeofMsghdr = 0x38 - SizeofCmsghdr = 0x10 -) - -const ( - SizeofSockFprog = 0x10 -) - -type PtraceRegs struct { - Regs [16]uint64 - Tstate uint64 - Tpc uint64 - Tnpc uint64 - Y uint32 - Magic uint32 -} - -type FdSet struct { - Bits [16]int64 -} - -type Sysinfo_t struct { - Uptime int64 - Loads [3]uint64 - Totalram uint64 - Freeram uint64 - Sharedram uint64 - Bufferram uint64 - Totalswap uint64 - Freeswap uint64 - Procs uint16 - Pad uint16 - Totalhigh uint64 - Freehigh uint64 - Unit uint32 - _ [0]int8 - _ [4]byte -} - -type Ustat_t struct { - Tfree int32 - Tinode uint64 - Fname [6]int8 - Fpack [6]int8 - _ [4]byte -} - -type EpollEvent struct { - Events uint32 - _ int32 - Fd int32 - Pad int32 -} - -const ( - OPEN_TREE_CLOEXEC = 0x400000 -) - -const ( - POLLRDHUP = 0x800 -) - -type Sigset_t struct { - Val [16]uint64 -} - -const _C__NSIG = 0x41 - -type Siginfo struct { - Signo int32 - Errno int32 - Code int32 - _ int32 - _ [112]byte -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Line uint8 - Cc [19]uint8 - Ispeed uint32 - Ospeed uint32 -} - -type Taskstats struct { - Version uint16 - Ac_exitcode uint32 - Ac_flag uint8 - Ac_nice uint8 - Cpu_count uint64 - Cpu_delay_total uint64 - Blkio_count uint64 - Blkio_delay_total uint64 - Swapin_count uint64 - Swapin_delay_total uint64 - Cpu_run_real_total uint64 - Cpu_run_virtual_total uint64 - Ac_comm [32]int8 - Ac_sched uint8 - Ac_pad [3]uint8 - _ [4]byte - Ac_uid uint32 - Ac_gid uint32 - Ac_pid uint32 - Ac_ppid uint32 - Ac_btime uint32 - Ac_etime uint64 - Ac_utime uint64 - Ac_stime uint64 - Ac_minflt uint64 - Ac_majflt uint64 - Coremem uint64 - Virtmem uint64 - Hiwater_rss uint64 - Hiwater_vm uint64 - Read_char uint64 - Write_char uint64 - Read_syscalls uint64 - Write_syscalls uint64 - Read_bytes uint64 - Write_bytes uint64 - Cancelled_write_bytes uint64 - Nvcsw uint64 - Nivcsw uint64 - Ac_utimescaled uint64 - Ac_stimescaled uint64 - Cpu_scaled_run_real_total uint64 - Freepages_count uint64 - Freepages_delay_total uint64 - Thrashing_count uint64 - Thrashing_delay_total uint64 - Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 - Ac_tgid uint32 - Ac_tgetime uint64 - Ac_exe_dev uint64 - Ac_exe_inode uint64 - Wpcopy_count uint64 - Wpcopy_delay_total uint64 -} - -type cpuMask uint64 - -const ( - _NCPUBITS = 0x40 -) - -const ( - CBitFieldMaskBit0 = 0x8000000000000000 - CBitFieldMaskBit1 = 0x4000000000000000 - CBitFieldMaskBit2 = 0x2000000000000000 - CBitFieldMaskBit3 = 0x1000000000000000 - CBitFieldMaskBit4 = 0x800000000000000 - CBitFieldMaskBit5 = 0x400000000000000 - CBitFieldMaskBit6 = 0x200000000000000 - CBitFieldMaskBit7 = 0x100000000000000 - CBitFieldMaskBit8 = 0x80000000000000 - CBitFieldMaskBit9 = 0x40000000000000 - CBitFieldMaskBit10 = 0x20000000000000 - CBitFieldMaskBit11 = 0x10000000000000 - CBitFieldMaskBit12 = 0x8000000000000 - CBitFieldMaskBit13 = 0x4000000000000 - CBitFieldMaskBit14 = 0x2000000000000 - CBitFieldMaskBit15 = 0x1000000000000 - CBitFieldMaskBit16 = 0x800000000000 - CBitFieldMaskBit17 = 0x400000000000 - CBitFieldMaskBit18 = 0x200000000000 - CBitFieldMaskBit19 = 0x100000000000 - CBitFieldMaskBit20 = 0x80000000000 - CBitFieldMaskBit21 = 0x40000000000 - CBitFieldMaskBit22 = 0x20000000000 - CBitFieldMaskBit23 = 0x10000000000 - CBitFieldMaskBit24 = 0x8000000000 - CBitFieldMaskBit25 = 0x4000000000 - CBitFieldMaskBit26 = 0x2000000000 - CBitFieldMaskBit27 = 0x1000000000 - CBitFieldMaskBit28 = 0x800000000 - CBitFieldMaskBit29 = 0x400000000 - CBitFieldMaskBit30 = 0x200000000 - CBitFieldMaskBit31 = 0x100000000 - CBitFieldMaskBit32 = 0x80000000 - CBitFieldMaskBit33 = 0x40000000 - CBitFieldMaskBit34 = 0x20000000 - CBitFieldMaskBit35 = 0x10000000 - CBitFieldMaskBit36 = 0x8000000 - CBitFieldMaskBit37 = 0x4000000 - CBitFieldMaskBit38 = 0x2000000 - CBitFieldMaskBit39 = 0x1000000 - CBitFieldMaskBit40 = 0x800000 - CBitFieldMaskBit41 = 0x400000 - CBitFieldMaskBit42 = 0x200000 - CBitFieldMaskBit43 = 0x100000 - CBitFieldMaskBit44 = 0x80000 - CBitFieldMaskBit45 = 0x40000 - CBitFieldMaskBit46 = 0x20000 - CBitFieldMaskBit47 = 0x10000 - CBitFieldMaskBit48 = 0x8000 - CBitFieldMaskBit49 = 0x4000 - CBitFieldMaskBit50 = 0x2000 - CBitFieldMaskBit51 = 0x1000 - CBitFieldMaskBit52 = 0x800 - CBitFieldMaskBit53 = 0x400 - CBitFieldMaskBit54 = 0x200 - CBitFieldMaskBit55 = 0x100 - CBitFieldMaskBit56 = 0x80 - CBitFieldMaskBit57 = 0x40 - CBitFieldMaskBit58 = 0x20 - CBitFieldMaskBit59 = 0x10 - CBitFieldMaskBit60 = 0x8 - CBitFieldMaskBit61 = 0x4 - CBitFieldMaskBit62 = 0x2 - CBitFieldMaskBit63 = 0x1 -) - -type SockaddrStorage struct { - Family uint16 - _ [118]int8 - _ uint64 -} - -type HDGeometry struct { - Heads uint8 - Sectors uint8 - Cylinders uint16 - Start uint64 -} - -type Statfs_t struct { - Type int64 - Bsize int64 - Blocks uint64 - Bfree uint64 - Bavail uint64 - Files uint64 - Ffree uint64 - Fsid Fsid - Namelen int64 - Frsize int64 - Flags int64 - Spare [4]int64 -} - -type TpacketHdr struct { - Status uint64 - Len uint32 - Snaplen uint32 - Mac uint16 - Net uint16 - Sec uint32 - Usec uint32 - _ [4]byte -} - -const ( - SizeofTpacketHdr = 0x20 -) - -type RTCPLLInfo struct { - Ctrl int32 - Value int32 - Max int32 - Min int32 - Posmult int32 - Negmult int32 - Clock int64 -} - -type BlkpgPartition struct { - Start int64 - Length int64 - Pno int32 - Devname [64]uint8 - Volname [64]uint8 - _ [4]byte -} - -const ( - BLKPG = 0x20001269 -) - -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - -type CryptoUserAlg struct { - Name [64]int8 - Driver_name [64]int8 - Module_name [64]int8 - Type uint32 - Mask uint32 - Refcnt uint32 - Flags uint32 -} - -type CryptoStatAEAD struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatAKCipher struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Verify_cnt uint64 - Sign_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatCipher struct { - Type [64]int8 - Encrypt_cnt uint64 - Encrypt_tlen uint64 - Decrypt_cnt uint64 - Decrypt_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatCompress struct { - Type [64]int8 - Compress_cnt uint64 - Compress_tlen uint64 - Decompress_cnt uint64 - Decompress_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatHash struct { - Type [64]int8 - Hash_cnt uint64 - Hash_tlen uint64 - Err_cnt uint64 -} - -type CryptoStatKPP struct { - Type [64]int8 - Setsecret_cnt uint64 - Generate_public_key_cnt uint64 - Compute_shared_secret_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatRNG struct { - Type [64]int8 - Generate_cnt uint64 - Generate_tlen uint64 - Seed_cnt uint64 - Err_cnt uint64 -} - -type CryptoStatLarval struct { - Type [64]int8 -} - -type CryptoReportLarval struct { - Type [64]int8 -} - -type CryptoReportHash struct { - Type [64]int8 - Blocksize uint32 - Digestsize uint32 -} - -type CryptoReportCipher struct { - Type [64]int8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 -} - -type CryptoReportBlkCipher struct { - Type [64]int8 - Geniv [64]int8 - Blocksize uint32 - Min_keysize uint32 - Max_keysize uint32 - Ivsize uint32 -} - -type CryptoReportAEAD struct { - Type [64]int8 - Geniv [64]int8 - Blocksize uint32 - Maxauthsize uint32 - Ivsize uint32 -} - -type CryptoReportComp struct { - Type [64]int8 -} - -type CryptoReportRNG struct { - Type [64]int8 - Seedsize uint32 -} - -type CryptoReportAKCipher struct { - Type [64]int8 -} - -type CryptoReportKPP struct { - Type [64]int8 -} - -type CryptoReportAcomp struct { - Type [64]int8 -} - -type LoopInfo struct { - Number int32 - Device uint32 - Inode uint64 - Rdevice uint32 - Offset int32 - Encrypt_type int32 - Encrypt_key_size int32 - Flags int32 - Name [64]int8 - Encrypt_key [32]uint8 - Init [2]uint64 - Reserved [4]int8 - _ [4]byte -} - -type TIPCSubscr struct { - Seq TIPCServiceRange - Timeout uint32 - Filter uint32 - Handle [8]int8 -} - -type TIPCSIOCLNReq struct { - Peer uint32 - Id uint32 - Linkname [68]int8 -} - -type TIPCSIOCNodeIDReq struct { - Peer uint32 - Id [16]int8 -} - -type PPSKInfo struct { - Assert_sequence uint32 - Clear_sequence uint32 - Assert_tu PPSKTime - Clear_tu PPSKTime - Current_mode int32 - _ [4]byte -} - -const ( - PPS_GETPARAMS = 0x400870a1 - PPS_SETPARAMS = 0x800870a2 - PPS_GETCAP = 0x400870a3 - PPS_FETCH = 0xc00870a4 -) - -const ( - PIDFD_NONBLOCK = 0x4000 -) - -type SysvIpcPerm struct { - Key int32 - Uid uint32 - Gid uint32 - Cuid uint32 - Cgid uint32 - Mode uint32 - _ uint16 - Seq uint16 - _ uint64 - _ uint64 -} -type SysvShmDesc struct { - Perm SysvIpcPerm - Atime int64 - Dtime int64 - Ctime int64 - Segsz uint64 - Cpid int32 - Lpid int32 - Nattch uint64 - _ uint64 - _ uint64 -} diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go deleted file mode 100644 index 2fd2060..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go +++ /dev/null @@ -1,502 +0,0 @@ -// cgo -godefs types_netbsd.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build 386 && netbsd -// +build 386,netbsd - -package unix - -const ( - SizeofPtr = 0x4 - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLong = 0x4 - SizeofLongLong = 0x8 -) - -type ( - _C_short int16 - _C_int int32 - _C_long int32 - _C_long_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int32 -} - -type Timeval struct { - Sec int64 - Usec int32 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int32 - Ixrss int32 - Idrss int32 - Isrss int32 - Minflt int32 - Majflt int32 - Nswap int32 - Inblock int32 - Oublock int32 - Msgsnd int32 - Msgrcv int32 - Nsignals int32 - Nvcsw int32 - Nivcsw int32 -} - -type Rlimit struct { - Cur uint64 - Max uint64 -} - -type _Gid_t uint32 - -type Stat_t struct { - Dev uint64 - Mode uint32 - Ino uint64 - Nlink uint32 - Uid uint32 - Gid uint32 - Rdev uint64 - Atim Timespec - Mtim Timespec - Ctim Timespec - Btim Timespec - Size int64 - Blocks int64 - Blksize uint32 - Flags uint32 - Gen uint32 - Spare [2]uint32 -} - -type Statfs_t [0]byte - -type Statvfs_t struct { - Flag uint32 - Bsize uint32 - Frsize uint32 - Iosize uint32 - Blocks uint64 - Bfree uint64 - Bavail uint64 - Bresvd uint64 - Files uint64 - Ffree uint64 - Favail uint64 - Fresvd uint64 - Syncreads uint64 - Syncwrites uint64 - Asyncreads uint64 - Asyncwrites uint64 - Fsidx Fsid - Fsid uint32 - Namemax uint32 - Owner uint32 - Spare [4]uint32 - Fstypename [32]byte - Mntonname [1024]byte - Mntfromname [1024]byte -} - -type Flock_t struct { - Start int64 - Len int64 - Pid int32 - Type int16 - Whence int16 -} - -type Dirent struct { - Fileno uint64 - Reclen uint16 - Namlen uint16 - Type uint8 - Name [512]int8 - Pad_cgo_0 [3]byte -} - -type Fsid struct { - X__fsid_val [2]int32 -} - -const ( - PathMax = 0x400 -) - -const ( - ST_WAIT = 0x1 - ST_NOWAIT = 0x2 -) - -const ( - FADV_NORMAL = 0x0 - FADV_RANDOM = 0x1 - FADV_SEQUENTIAL = 0x2 - FADV_WILLNEED = 0x3 - FADV_DONTNEED = 0x4 - FADV_NOREUSE = 0x5 -) - -type RawSockaddrInet4 struct { - Len uint8 - Family uint8 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]int8 -} - -type RawSockaddrInet6 struct { - Len uint8 - Family uint8 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 -} - -type RawSockaddrUnix struct { - Len uint8 - Family uint8 - Path [104]int8 -} - -type RawSockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [12]int8 -} - -type RawSockaddr struct { - Len uint8 - Family uint8 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [92]int8 -} - -type _Socklen uint32 - -type Linger struct { - Onoff int32 - Linger int32 -} - -type Iovec struct { - Base *byte - Len uint32 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface 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 -} - -type Inet6Pktinfo struct { - Addr [16]byte /* in6_addr */ - Ifindex uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type ICMPv6Filter struct { - Filt [8]uint32 -} - -const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x6c - SizeofSockaddrUnix = 0x6a - SizeofSockaddrDatalink = 0x14 - SizeofLinger = 0x8 - SizeofIovec = 0x8 - SizeofIPMreq = 0x8 - SizeofIPv6Mreq = 0x14 - SizeofMsghdr = 0x1c - SizeofCmsghdr = 0xc - SizeofInet6Pktinfo = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofICMPv6Filter = 0x20 -) - -const ( - PTRACE_TRACEME = 0x0 - PTRACE_CONT = 0x7 - PTRACE_KILL = 0x8 -) - -type Kevent_t struct { - Ident uint32 - Filter uint32 - Flags uint32 - Fflags uint32 - Data int64 - Udata int32 -} - -type FdSet struct { - Bits [8]uint32 -} - -const ( - SizeofIfMsghdr = 0x98 - SizeofIfData = 0x84 - SizeofIfaMsghdr = 0x18 - SizeofIfAnnounceMsghdr = 0x18 - SizeofRtMsghdr = 0x78 - SizeofRtMetrics = 0x50 -) - -type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte - Data IfData - Pad_cgo_1 [4]byte -} - -type IfData struct { - Type uint8 - Addrlen uint8 - Hdrlen uint8 - Pad_cgo_0 [1]byte - Link_state int32 - Mtu uint64 - Metric uint64 - Baudrate uint64 - Ipackets uint64 - Ierrors uint64 - Opackets uint64 - Oerrors uint64 - Collisions uint64 - Ibytes uint64 - Obytes uint64 - Imcasts uint64 - Omcasts uint64 - Iqdrops uint64 - Noproto uint64 - Lastchange Timespec -} - -type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Metric int32 - Index uint16 - Pad_cgo_0 [6]byte -} - -type IfAnnounceMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Name [16]int8 - What uint16 -} - -type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Pad_cgo_0 [2]byte - Flags int32 - Addrs int32 - Pid int32 - Seq int32 - Errno int32 - Use int32 - Inits int32 - Pad_cgo_1 [4]byte - Rmx RtMetrics -} - -type RtMetrics struct { - Locks uint64 - Mtu uint64 - Hopcount uint64 - Recvpipe uint64 - Sendpipe uint64 - Ssthresh uint64 - Rtt uint64 - Rttvar uint64 - Expire int64 - Pksent int64 -} - -type Mclpool [0]byte - -const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x80 - SizeofBpfProgram = 0x8 - SizeofBpfInsn = 0x8 - SizeofBpfHdr = 0x14 -) - -type BpfVersion struct { - Major uint16 - Minor uint16 -} - -type BpfStat struct { - Recv uint64 - Drop uint64 - Capt uint64 - Padding [13]uint64 -} - -type BpfProgram struct { - Len uint32 - Insns *BpfInsn -} - -type BpfInsn struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} - -type BpfHdr struct { - Tstamp BpfTimeval - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - Pad_cgo_0 [2]byte -} - -type BpfTimeval struct { - Sec int32 - Usec int32 -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [20]uint8 - Ispeed int32 - Ospeed int32 -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -type Ptmget struct { - Cfd int32 - Sfd int32 - Cn [1024]byte - Sn [1024]byte -} - -const ( - AT_FDCWD = -0x64 - AT_EACCESS = 0x100 - AT_SYMLINK_NOFOLLOW = 0x200 - AT_SYMLINK_FOLLOW = 0x400 - AT_REMOVEDIR = 0x800 -) - -type PollFd struct { - Fd int32 - Events int16 - Revents int16 -} - -const ( - POLLERR = 0x8 - POLLHUP = 0x10 - POLLIN = 0x1 - POLLNVAL = 0x20 - POLLOUT = 0x4 - POLLPRI = 0x2 - POLLRDBAND = 0x80 - POLLRDNORM = 0x40 - POLLWRBAND = 0x100 - POLLWRNORM = 0x4 -) - -type Sysctlnode struct { - Flags uint32 - Num int32 - Name [32]int8 - Ver uint32 - X__rsvd uint32 - Un [16]byte - X_sysctl_size [8]byte - X_sysctl_func [8]byte - X_sysctl_parent [8]byte - X_sysctl_desc [8]byte -} - -type Utsname struct { - Sysname [256]byte - Nodename [256]byte - Release [256]byte - Version [256]byte - Machine [256]byte -} - -const SizeofClockinfo = 0x14 - -type Clockinfo struct { - Hz int32 - Tick int32 - Tickadj int32 - Stathz int32 - Profhz int32 -} diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go deleted file mode 100644 index 6a5a1a8..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go +++ /dev/null @@ -1,510 +0,0 @@ -// cgo -godefs types_netbsd.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build amd64 && netbsd -// +build amd64,netbsd - -package unix - -const ( - SizeofPtr = 0x8 - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLong = 0x8 - SizeofLongLong = 0x8 -) - -type ( - _C_short int16 - _C_int int32 - _C_long int64 - _C_long_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int32 - Pad_cgo_0 [4]byte -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Rlimit struct { - Cur uint64 - Max uint64 -} - -type _Gid_t uint32 - -type Stat_t struct { - Dev uint64 - Mode uint32 - _ [4]byte - Ino uint64 - Nlink uint32 - Uid uint32 - Gid uint32 - _ [4]byte - Rdev uint64 - Atim Timespec - Mtim Timespec - Ctim Timespec - Btim Timespec - Size int64 - Blocks int64 - Blksize uint32 - Flags uint32 - Gen uint32 - Spare [2]uint32 - _ [4]byte -} - -type Statfs_t [0]byte - -type Statvfs_t struct { - Flag uint64 - Bsize uint64 - Frsize uint64 - Iosize uint64 - Blocks uint64 - Bfree uint64 - Bavail uint64 - Bresvd uint64 - Files uint64 - Ffree uint64 - Favail uint64 - Fresvd uint64 - Syncreads uint64 - Syncwrites uint64 - Asyncreads uint64 - Asyncwrites uint64 - Fsidx Fsid - Fsid uint64 - Namemax uint64 - Owner uint32 - Spare [4]uint32 - Fstypename [32]byte - Mntonname [1024]byte - Mntfromname [1024]byte - _ [4]byte -} - -type Flock_t struct { - Start int64 - Len int64 - Pid int32 - Type int16 - Whence int16 -} - -type Dirent struct { - Fileno uint64 - Reclen uint16 - Namlen uint16 - Type uint8 - Name [512]int8 - Pad_cgo_0 [3]byte -} - -type Fsid struct { - X__fsid_val [2]int32 -} - -const ( - PathMax = 0x400 -) - -const ( - ST_WAIT = 0x1 - ST_NOWAIT = 0x2 -) - -const ( - FADV_NORMAL = 0x0 - FADV_RANDOM = 0x1 - FADV_SEQUENTIAL = 0x2 - FADV_WILLNEED = 0x3 - FADV_DONTNEED = 0x4 - FADV_NOREUSE = 0x5 -) - -type RawSockaddrInet4 struct { - Len uint8 - Family uint8 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]int8 -} - -type RawSockaddrInet6 struct { - Len uint8 - Family uint8 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 -} - -type RawSockaddrUnix struct { - Len uint8 - Family uint8 - Path [104]int8 -} - -type RawSockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [12]int8 -} - -type RawSockaddr struct { - Len uint8 - Family uint8 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [92]int8 -} - -type _Socklen uint32 - -type Linger struct { - Onoff int32 - Linger int32 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface uint32 -} - -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 -} - -type Inet6Pktinfo struct { - Addr [16]byte /* in6_addr */ - Ifindex uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type ICMPv6Filter struct { - Filt [8]uint32 -} - -const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x6c - SizeofSockaddrUnix = 0x6a - SizeofSockaddrDatalink = 0x14 - SizeofLinger = 0x8 - SizeofIovec = 0x10 - SizeofIPMreq = 0x8 - SizeofIPv6Mreq = 0x14 - SizeofMsghdr = 0x30 - SizeofCmsghdr = 0xc - SizeofInet6Pktinfo = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofICMPv6Filter = 0x20 -) - -const ( - PTRACE_TRACEME = 0x0 - PTRACE_CONT = 0x7 - PTRACE_KILL = 0x8 -) - -type Kevent_t struct { - Ident uint64 - Filter uint32 - Flags uint32 - Fflags uint32 - Pad_cgo_0 [4]byte - Data int64 - Udata int64 -} - -type FdSet struct { - Bits [8]uint32 -} - -const ( - SizeofIfMsghdr = 0x98 - SizeofIfData = 0x88 - SizeofIfaMsghdr = 0x18 - SizeofIfAnnounceMsghdr = 0x18 - SizeofRtMsghdr = 0x78 - SizeofRtMetrics = 0x50 -) - -type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte - Data IfData -} - -type IfData struct { - Type uint8 - Addrlen uint8 - Hdrlen uint8 - Pad_cgo_0 [1]byte - Link_state int32 - Mtu uint64 - Metric uint64 - Baudrate uint64 - Ipackets uint64 - Ierrors uint64 - Opackets uint64 - Oerrors uint64 - Collisions uint64 - Ibytes uint64 - Obytes uint64 - Imcasts uint64 - Omcasts uint64 - Iqdrops uint64 - Noproto uint64 - Lastchange Timespec -} - -type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Metric int32 - Index uint16 - Pad_cgo_0 [6]byte -} - -type IfAnnounceMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Name [16]int8 - What uint16 -} - -type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Pad_cgo_0 [2]byte - Flags int32 - Addrs int32 - Pid int32 - Seq int32 - Errno int32 - Use int32 - Inits int32 - Pad_cgo_1 [4]byte - Rmx RtMetrics -} - -type RtMetrics struct { - Locks uint64 - Mtu uint64 - Hopcount uint64 - Recvpipe uint64 - Sendpipe uint64 - Ssthresh uint64 - Rtt uint64 - Rttvar uint64 - Expire int64 - Pksent int64 -} - -type Mclpool [0]byte - -const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x80 - SizeofBpfProgram = 0x10 - SizeofBpfInsn = 0x8 - SizeofBpfHdr = 0x20 -) - -type BpfVersion struct { - Major uint16 - Minor uint16 -} - -type BpfStat struct { - Recv uint64 - Drop uint64 - Capt uint64 - Padding [13]uint64 -} - -type BpfProgram struct { - Len uint32 - Pad_cgo_0 [4]byte - Insns *BpfInsn -} - -type BpfInsn struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} - -type BpfHdr struct { - Tstamp BpfTimeval - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - Pad_cgo_0 [6]byte -} - -type BpfTimeval struct { - Sec int64 - Usec int64 -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [20]uint8 - Ispeed int32 - Ospeed int32 -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -type Ptmget struct { - Cfd int32 - Sfd int32 - Cn [1024]byte - Sn [1024]byte -} - -const ( - AT_FDCWD = -0x64 - AT_EACCESS = 0x100 - AT_SYMLINK_NOFOLLOW = 0x200 - AT_SYMLINK_FOLLOW = 0x400 - AT_REMOVEDIR = 0x800 -) - -type PollFd struct { - Fd int32 - Events int16 - Revents int16 -} - -const ( - POLLERR = 0x8 - POLLHUP = 0x10 - POLLIN = 0x1 - POLLNVAL = 0x20 - POLLOUT = 0x4 - POLLPRI = 0x2 - POLLRDBAND = 0x80 - POLLRDNORM = 0x40 - POLLWRBAND = 0x100 - POLLWRNORM = 0x4 -) - -type Sysctlnode struct { - Flags uint32 - Num int32 - Name [32]int8 - Ver uint32 - X__rsvd uint32 - Un [16]byte - X_sysctl_size [8]byte - X_sysctl_func [8]byte - X_sysctl_parent [8]byte - X_sysctl_desc [8]byte -} - -type Utsname struct { - Sysname [256]byte - Nodename [256]byte - Release [256]byte - Version [256]byte - Machine [256]byte -} - -const SizeofClockinfo = 0x14 - -type Clockinfo struct { - Hz int32 - Tick int32 - Tickadj int32 - Stathz int32 - Profhz int32 -} diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go deleted file mode 100644 index 84cc8d0..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go +++ /dev/null @@ -1,507 +0,0 @@ -// cgo -godefs types_netbsd.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm && netbsd -// +build arm,netbsd - -package unix - -const ( - SizeofPtr = 0x4 - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLong = 0x4 - SizeofLongLong = 0x8 -) - -type ( - _C_short int16 - _C_int int32 - _C_long int32 - _C_long_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int32 - Pad_cgo_0 [4]byte -} - -type Timeval struct { - Sec int64 - Usec int32 - Pad_cgo_0 [4]byte -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int32 - Ixrss int32 - Idrss int32 - Isrss int32 - Minflt int32 - Majflt int32 - Nswap int32 - Inblock int32 - Oublock int32 - Msgsnd int32 - Msgrcv int32 - Nsignals int32 - Nvcsw int32 - Nivcsw int32 -} - -type Rlimit struct { - Cur uint64 - Max uint64 -} - -type _Gid_t uint32 - -type Stat_t struct { - Dev uint64 - Mode uint32 - _ [4]byte - Ino uint64 - Nlink uint32 - Uid uint32 - Gid uint32 - _ [4]byte - Rdev uint64 - Atim Timespec - Mtim Timespec - Ctim Timespec - Btim Timespec - Size int64 - Blocks int64 - Blksize uint32 - Flags uint32 - Gen uint32 - Spare [2]uint32 - _ [4]byte -} - -type Statfs_t [0]byte - -type Statvfs_t struct { - Flag uint32 - Bsize uint32 - Frsize uint32 - Iosize uint32 - Blocks uint64 - Bfree uint64 - Bavail uint64 - Bresvd uint64 - Files uint64 - Ffree uint64 - Favail uint64 - Fresvd uint64 - Syncreads uint64 - Syncwrites uint64 - Asyncreads uint64 - Asyncwrites uint64 - Fsidx Fsid - Fsid uint32 - Namemax uint32 - Owner uint32 - Spare [4]uint32 - Fstypename [32]byte - Mntonname [1024]byte - Mntfromname [1024]byte -} - -type Flock_t struct { - Start int64 - Len int64 - Pid int32 - Type int16 - Whence int16 -} - -type Dirent struct { - Fileno uint64 - Reclen uint16 - Namlen uint16 - Type uint8 - Name [512]int8 - Pad_cgo_0 [3]byte -} - -type Fsid struct { - X__fsid_val [2]int32 -} - -const ( - PathMax = 0x400 -) - -const ( - ST_WAIT = 0x1 - ST_NOWAIT = 0x2 -) - -const ( - FADV_NORMAL = 0x0 - FADV_RANDOM = 0x1 - FADV_SEQUENTIAL = 0x2 - FADV_WILLNEED = 0x3 - FADV_DONTNEED = 0x4 - FADV_NOREUSE = 0x5 -) - -type RawSockaddrInet4 struct { - Len uint8 - Family uint8 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]int8 -} - -type RawSockaddrInet6 struct { - Len uint8 - Family uint8 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 -} - -type RawSockaddrUnix struct { - Len uint8 - Family uint8 - Path [104]int8 -} - -type RawSockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [12]int8 -} - -type RawSockaddr struct { - Len uint8 - Family uint8 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [92]int8 -} - -type _Socklen uint32 - -type Linger struct { - Onoff int32 - Linger int32 -} - -type Iovec struct { - Base *byte - Len uint32 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface 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 -} - -type Inet6Pktinfo struct { - Addr [16]byte /* in6_addr */ - Ifindex uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type ICMPv6Filter struct { - Filt [8]uint32 -} - -const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x6c - SizeofSockaddrUnix = 0x6a - SizeofSockaddrDatalink = 0x14 - SizeofLinger = 0x8 - SizeofIovec = 0x8 - SizeofIPMreq = 0x8 - SizeofIPv6Mreq = 0x14 - SizeofMsghdr = 0x1c - SizeofCmsghdr = 0xc - SizeofInet6Pktinfo = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofICMPv6Filter = 0x20 -) - -const ( - PTRACE_TRACEME = 0x0 - PTRACE_CONT = 0x7 - PTRACE_KILL = 0x8 -) - -type Kevent_t struct { - Ident uint32 - Filter uint32 - Flags uint32 - Fflags uint32 - Data int64 - Udata int32 - Pad_cgo_0 [4]byte -} - -type FdSet struct { - Bits [8]uint32 -} - -const ( - SizeofIfMsghdr = 0x98 - SizeofIfData = 0x88 - SizeofIfaMsghdr = 0x18 - SizeofIfAnnounceMsghdr = 0x18 - SizeofRtMsghdr = 0x78 - SizeofRtMetrics = 0x50 -) - -type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte - Data IfData -} - -type IfData struct { - Type uint8 - Addrlen uint8 - Hdrlen uint8 - Pad_cgo_0 [1]byte - Link_state int32 - Mtu uint64 - Metric uint64 - Baudrate uint64 - Ipackets uint64 - Ierrors uint64 - Opackets uint64 - Oerrors uint64 - Collisions uint64 - Ibytes uint64 - Obytes uint64 - Imcasts uint64 - Omcasts uint64 - Iqdrops uint64 - Noproto uint64 - Lastchange Timespec -} - -type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Metric int32 - Index uint16 - Pad_cgo_0 [6]byte -} - -type IfAnnounceMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Name [16]int8 - What uint16 -} - -type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Pad_cgo_0 [2]byte - Flags int32 - Addrs int32 - Pid int32 - Seq int32 - Errno int32 - Use int32 - Inits int32 - Pad_cgo_1 [4]byte - Rmx RtMetrics -} - -type RtMetrics struct { - Locks uint64 - Mtu uint64 - Hopcount uint64 - Recvpipe uint64 - Sendpipe uint64 - Ssthresh uint64 - Rtt uint64 - Rttvar uint64 - Expire int64 - Pksent int64 -} - -type Mclpool [0]byte - -const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x80 - SizeofBpfProgram = 0x8 - SizeofBpfInsn = 0x8 - SizeofBpfHdr = 0x14 -) - -type BpfVersion struct { - Major uint16 - Minor uint16 -} - -type BpfStat struct { - Recv uint64 - Drop uint64 - Capt uint64 - Padding [13]uint64 -} - -type BpfProgram struct { - Len uint32 - Insns *BpfInsn -} - -type BpfInsn struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} - -type BpfHdr struct { - Tstamp BpfTimeval - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - Pad_cgo_0 [2]byte -} - -type BpfTimeval struct { - Sec int32 - Usec int32 -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [20]uint8 - Ispeed int32 - Ospeed int32 -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -type Ptmget struct { - Cfd int32 - Sfd int32 - Cn [1024]byte - Sn [1024]byte -} - -const ( - AT_FDCWD = -0x64 - AT_EACCESS = 0x100 - AT_SYMLINK_NOFOLLOW = 0x200 - AT_SYMLINK_FOLLOW = 0x400 - AT_REMOVEDIR = 0x800 -) - -type PollFd struct { - Fd int32 - Events int16 - Revents int16 -} - -const ( - POLLERR = 0x8 - POLLHUP = 0x10 - POLLIN = 0x1 - POLLNVAL = 0x20 - POLLOUT = 0x4 - POLLPRI = 0x2 - POLLRDBAND = 0x80 - POLLRDNORM = 0x40 - POLLWRBAND = 0x100 - POLLWRNORM = 0x4 -) - -type Sysctlnode struct { - Flags uint32 - Num int32 - Name [32]int8 - Ver uint32 - X__rsvd uint32 - Un [16]byte - X_sysctl_size [8]byte - X_sysctl_func [8]byte - X_sysctl_parent [8]byte - X_sysctl_desc [8]byte -} - -type Utsname struct { - Sysname [256]byte - Nodename [256]byte - Release [256]byte - Version [256]byte - Machine [256]byte -} - -const SizeofClockinfo = 0x14 - -type Clockinfo struct { - Hz int32 - Tick int32 - Tickadj int32 - Stathz int32 - Profhz int32 -} diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go deleted file mode 100644 index c844e70..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go +++ /dev/null @@ -1,510 +0,0 @@ -// cgo -godefs types_netbsd.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm64 && netbsd -// +build arm64,netbsd - -package unix - -const ( - SizeofPtr = 0x8 - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLong = 0x8 - SizeofLongLong = 0x8 -) - -type ( - _C_short int16 - _C_int int32 - _C_long int64 - _C_long_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int32 - Pad_cgo_0 [4]byte -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Rlimit struct { - Cur uint64 - Max uint64 -} - -type _Gid_t uint32 - -type Stat_t struct { - Dev uint64 - Mode uint32 - _ [4]byte - Ino uint64 - Nlink uint32 - Uid uint32 - Gid uint32 - _ [4]byte - Rdev uint64 - Atim Timespec - Mtim Timespec - Ctim Timespec - Btim Timespec - Size int64 - Blocks int64 - Blksize uint32 - Flags uint32 - Gen uint32 - Spare [2]uint32 - _ [4]byte -} - -type Statfs_t [0]byte - -type Statvfs_t struct { - Flag uint64 - Bsize uint64 - Frsize uint64 - Iosize uint64 - Blocks uint64 - Bfree uint64 - Bavail uint64 - Bresvd uint64 - Files uint64 - Ffree uint64 - Favail uint64 - Fresvd uint64 - Syncreads uint64 - Syncwrites uint64 - Asyncreads uint64 - Asyncwrites uint64 - Fsidx Fsid - Fsid uint64 - Namemax uint64 - Owner uint32 - Spare [4]uint32 - Fstypename [32]byte - Mntonname [1024]byte - Mntfromname [1024]byte - _ [4]byte -} - -type Flock_t struct { - Start int64 - Len int64 - Pid int32 - Type int16 - Whence int16 -} - -type Dirent struct { - Fileno uint64 - Reclen uint16 - Namlen uint16 - Type uint8 - Name [512]int8 - Pad_cgo_0 [3]byte -} - -type Fsid struct { - X__fsid_val [2]int32 -} - -const ( - PathMax = 0x400 -) - -const ( - ST_WAIT = 0x1 - ST_NOWAIT = 0x2 -) - -const ( - FADV_NORMAL = 0x0 - FADV_RANDOM = 0x1 - FADV_SEQUENTIAL = 0x2 - FADV_WILLNEED = 0x3 - FADV_DONTNEED = 0x4 - FADV_NOREUSE = 0x5 -) - -type RawSockaddrInet4 struct { - Len uint8 - Family uint8 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]int8 -} - -type RawSockaddrInet6 struct { - Len uint8 - Family uint8 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 -} - -type RawSockaddrUnix struct { - Len uint8 - Family uint8 - Path [104]int8 -} - -type RawSockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [12]int8 -} - -type RawSockaddr struct { - Len uint8 - Family uint8 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [92]int8 -} - -type _Socklen uint32 - -type Linger struct { - Onoff int32 - Linger int32 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface uint32 -} - -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 -} - -type Inet6Pktinfo struct { - Addr [16]byte /* in6_addr */ - Ifindex uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type ICMPv6Filter struct { - Filt [8]uint32 -} - -const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x6c - SizeofSockaddrUnix = 0x6a - SizeofSockaddrDatalink = 0x14 - SizeofLinger = 0x8 - SizeofIovec = 0x10 - SizeofIPMreq = 0x8 - SizeofIPv6Mreq = 0x14 - SizeofMsghdr = 0x30 - SizeofCmsghdr = 0xc - SizeofInet6Pktinfo = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofICMPv6Filter = 0x20 -) - -const ( - PTRACE_TRACEME = 0x0 - PTRACE_CONT = 0x7 - PTRACE_KILL = 0x8 -) - -type Kevent_t struct { - Ident uint64 - Filter uint32 - Flags uint32 - Fflags uint32 - Pad_cgo_0 [4]byte - Data int64 - Udata int64 -} - -type FdSet struct { - Bits [8]uint32 -} - -const ( - SizeofIfMsghdr = 0x98 - SizeofIfData = 0x88 - SizeofIfaMsghdr = 0x18 - SizeofIfAnnounceMsghdr = 0x18 - SizeofRtMsghdr = 0x78 - SizeofRtMetrics = 0x50 -) - -type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte - Data IfData -} - -type IfData struct { - Type uint8 - Addrlen uint8 - Hdrlen uint8 - Pad_cgo_0 [1]byte - Link_state int32 - Mtu uint64 - Metric uint64 - Baudrate uint64 - Ipackets uint64 - Ierrors uint64 - Opackets uint64 - Oerrors uint64 - Collisions uint64 - Ibytes uint64 - Obytes uint64 - Imcasts uint64 - Omcasts uint64 - Iqdrops uint64 - Noproto uint64 - Lastchange Timespec -} - -type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Metric int32 - Index uint16 - Pad_cgo_0 [6]byte -} - -type IfAnnounceMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Name [16]int8 - What uint16 -} - -type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Pad_cgo_0 [2]byte - Flags int32 - Addrs int32 - Pid int32 - Seq int32 - Errno int32 - Use int32 - Inits int32 - Pad_cgo_1 [4]byte - Rmx RtMetrics -} - -type RtMetrics struct { - Locks uint64 - Mtu uint64 - Hopcount uint64 - Recvpipe uint64 - Sendpipe uint64 - Ssthresh uint64 - Rtt uint64 - Rttvar uint64 - Expire int64 - Pksent int64 -} - -type Mclpool [0]byte - -const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x80 - SizeofBpfProgram = 0x10 - SizeofBpfInsn = 0x8 - SizeofBpfHdr = 0x20 -) - -type BpfVersion struct { - Major uint16 - Minor uint16 -} - -type BpfStat struct { - Recv uint64 - Drop uint64 - Capt uint64 - Padding [13]uint64 -} - -type BpfProgram struct { - Len uint32 - Pad_cgo_0 [4]byte - Insns *BpfInsn -} - -type BpfInsn struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} - -type BpfHdr struct { - Tstamp BpfTimeval - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - Pad_cgo_0 [6]byte -} - -type BpfTimeval struct { - Sec int64 - Usec int64 -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [20]uint8 - Ispeed int32 - Ospeed int32 -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -type Ptmget struct { - Cfd int32 - Sfd int32 - Cn [1024]byte - Sn [1024]byte -} - -const ( - AT_FDCWD = -0x64 - AT_EACCESS = 0x100 - AT_SYMLINK_NOFOLLOW = 0x200 - AT_SYMLINK_FOLLOW = 0x400 - AT_REMOVEDIR = 0x800 -) - -type PollFd struct { - Fd int32 - Events int16 - Revents int16 -} - -const ( - POLLERR = 0x8 - POLLHUP = 0x10 - POLLIN = 0x1 - POLLNVAL = 0x20 - POLLOUT = 0x4 - POLLPRI = 0x2 - POLLRDBAND = 0x80 - POLLRDNORM = 0x40 - POLLWRBAND = 0x100 - POLLWRNORM = 0x4 -) - -type Sysctlnode struct { - Flags uint32 - Num int32 - Name [32]int8 - Ver uint32 - X__rsvd uint32 - Un [16]byte - X_sysctl_size [8]byte - X_sysctl_func [8]byte - X_sysctl_parent [8]byte - X_sysctl_desc [8]byte -} - -type Utsname struct { - Sysname [256]byte - Nodename [256]byte - Release [256]byte - Version [256]byte - Machine [256]byte -} - -const SizeofClockinfo = 0x14 - -type Clockinfo struct { - Hz int32 - Tick int32 - Tickadj int32 - Stathz int32 - Profhz int32 -} diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go deleted file mode 100644 index 2ed718c..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go +++ /dev/null @@ -1,574 +0,0 @@ -// cgo -godefs types_openbsd.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build 386 && openbsd -// +build 386,openbsd - -package unix - -const ( - SizeofPtr = 0x4 - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLong = 0x4 - SizeofLongLong = 0x8 -) - -type ( - _C_short int16 - _C_int int32 - _C_long int32 - _C_long_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int32 -} - -type Timeval struct { - Sec int64 - Usec int32 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int32 - Ixrss int32 - Idrss int32 - Isrss int32 - Minflt int32 - Majflt int32 - Nswap int32 - Inblock int32 - Oublock int32 - Msgsnd int32 - Msgrcv int32 - Nsignals int32 - Nvcsw int32 - Nivcsw int32 -} - -type Rlimit struct { - Cur uint64 - Max uint64 -} - -type _Gid_t uint32 - -type Stat_t struct { - Mode uint32 - Dev int32 - Ino uint64 - Nlink uint32 - Uid uint32 - Gid uint32 - Rdev int32 - Atim Timespec - Mtim Timespec - Ctim Timespec - Size int64 - Blocks int64 - Blksize uint32 - Flags uint32 - Gen uint32 - X__st_birthtim Timespec -} - -type Statfs_t struct { - F_flags uint32 - F_bsize uint32 - F_iosize uint32 - F_blocks uint64 - F_bfree uint64 - F_bavail int64 - F_files uint64 - F_ffree uint64 - F_favail int64 - F_syncwrites uint64 - F_syncreads uint64 - F_asyncwrites uint64 - F_asyncreads uint64 - F_fsid Fsid - F_namemax uint32 - F_owner uint32 - F_ctime uint64 - F_fstypename [16]byte - F_mntonname [90]byte - F_mntfromname [90]byte - F_mntfromspec [90]byte - Pad_cgo_0 [2]byte - Mount_info [160]byte -} - -type Flock_t struct { - Start int64 - Len int64 - Pid int32 - Type int16 - Whence int16 -} - -type Dirent struct { - Fileno uint64 - Off int64 - Reclen uint16 - Type uint8 - Namlen uint8 - X__d_padding [4]uint8 - Name [256]int8 -} - -type Fsid struct { - Val [2]int32 -} - -const ( - PathMax = 0x400 -) - -type RawSockaddrInet4 struct { - Len uint8 - Family uint8 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]int8 -} - -type RawSockaddrInet6 struct { - Len uint8 - Family uint8 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 -} - -type RawSockaddrUnix struct { - Len uint8 - Family uint8 - Path [104]int8 -} - -type RawSockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [24]int8 -} - -type RawSockaddr struct { - Len uint8 - Family uint8 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [92]int8 -} - -type _Socklen uint32 - -type Linger struct { - Onoff int32 - Linger int32 -} - -type Iovec struct { - Base *byte - Len uint32 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface 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 -} - -type Inet6Pktinfo struct { - Addr [16]byte /* in6_addr */ - Ifindex uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type ICMPv6Filter struct { - Filt [8]uint32 -} - -const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x6c - SizeofSockaddrUnix = 0x6a - SizeofSockaddrDatalink = 0x20 - SizeofLinger = 0x8 - SizeofIovec = 0x8 - SizeofIPMreq = 0x8 - SizeofIPv6Mreq = 0x14 - SizeofMsghdr = 0x1c - SizeofCmsghdr = 0xc - SizeofInet6Pktinfo = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofICMPv6Filter = 0x20 -) - -const ( - PTRACE_TRACEME = 0x0 - PTRACE_CONT = 0x7 - PTRACE_KILL = 0x8 -) - -type Kevent_t struct { - Ident uint32 - Filter int16 - Flags uint16 - Fflags uint32 - Data int64 - Udata *byte -} - -type FdSet struct { - Bits [32]uint32 -} - -const ( - SizeofIfMsghdr = 0xec - SizeofIfData = 0xd4 - SizeofIfaMsghdr = 0x18 - SizeofIfAnnounceMsghdr = 0x1a - SizeofRtMsghdr = 0x60 - SizeofRtMetrics = 0x38 -) - -type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Hdrlen uint16 - Index uint16 - Tableid uint16 - Pad1 uint8 - Pad2 uint8 - Addrs int32 - Flags int32 - Xflags int32 - Data IfData -} - -type IfData struct { - Type uint8 - Addrlen uint8 - Hdrlen uint8 - Link_state uint8 - Mtu uint32 - Metric uint32 - Pad uint32 - Baudrate uint64 - Ipackets uint64 - Ierrors uint64 - Opackets uint64 - Oerrors uint64 - Collisions uint64 - Ibytes uint64 - Obytes uint64 - Imcasts uint64 - Omcasts uint64 - Iqdrops uint64 - Noproto uint64 - Capabilities uint32 - Lastchange Timeval - Mclpool [7]Mclpool -} - -type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Hdrlen uint16 - Index uint16 - Tableid uint16 - Pad1 uint8 - Pad2 uint8 - Addrs int32 - Flags int32 - Metric int32 -} - -type IfAnnounceMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Hdrlen uint16 - Index uint16 - What uint16 - Name [16]int8 -} - -type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Hdrlen uint16 - Index uint16 - Tableid uint16 - Priority uint8 - Mpls uint8 - Addrs int32 - Flags int32 - Fmask int32 - Pid int32 - Seq int32 - Errno int32 - Inits uint32 - Rmx RtMetrics -} - -type RtMetrics struct { - Pksent uint64 - Expire int64 - Locks uint32 - Mtu uint32 - Refcnt uint32 - Hopcount uint32 - Recvpipe uint32 - Sendpipe uint32 - Ssthresh uint32 - Rtt uint32 - Rttvar uint32 - Pad uint32 -} - -type Mclpool struct { - Grown int32 - Alive uint16 - Hwm uint16 - Cwm uint16 - Lwm uint16 -} - -const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x8 - SizeofBpfProgram = 0x8 - SizeofBpfInsn = 0x8 - SizeofBpfHdr = 0x14 -) - -type BpfVersion struct { - Major uint16 - Minor uint16 -} - -type BpfStat struct { - Recv uint32 - Drop uint32 -} - -type BpfProgram struct { - Len uint32 - Insns *BpfInsn -} - -type BpfInsn struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} - -type BpfHdr struct { - Tstamp BpfTimeval - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - Pad_cgo_0 [2]byte -} - -type BpfTimeval struct { - Sec uint32 - Usec uint32 -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [20]uint8 - Ispeed int32 - Ospeed int32 -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -const ( - AT_FDCWD = -0x64 - AT_EACCESS = 0x1 - AT_SYMLINK_NOFOLLOW = 0x2 - AT_SYMLINK_FOLLOW = 0x4 - AT_REMOVEDIR = 0x8 -) - -type PollFd struct { - Fd int32 - Events int16 - Revents int16 -} - -const ( - POLLERR = 0x8 - POLLHUP = 0x10 - POLLIN = 0x1 - POLLNVAL = 0x20 - POLLOUT = 0x4 - POLLPRI = 0x2 - POLLRDBAND = 0x80 - POLLRDNORM = 0x40 - POLLWRBAND = 0x100 - POLLWRNORM = 0x4 -) - -type Sigset_t uint32 - -type Utsname struct { - Sysname [256]byte - Nodename [256]byte - Release [256]byte - Version [256]byte - Machine [256]byte -} - -const SizeofUvmexp = 0x158 - -type Uvmexp struct { - Pagesize int32 - Pagemask int32 - Pageshift int32 - Npages int32 - Free int32 - Active int32 - Inactive int32 - Paging int32 - Wired int32 - Zeropages int32 - Reserve_pagedaemon int32 - Reserve_kernel int32 - Anonpages int32 - Vnodepages int32 - Vtextpages int32 - Freemin int32 - Freetarg int32 - Inactarg int32 - Wiredmax int32 - Anonmin int32 - Vtextmin int32 - Vnodemin int32 - Anonminpct int32 - Vtextminpct int32 - Vnodeminpct int32 - Nswapdev int32 - Swpages int32 - Swpginuse int32 - Swpgonly int32 - Nswget int32 - Nanon int32 - Nanonneeded int32 - Nfreeanon int32 - Faults int32 - Traps int32 - Intrs int32 - Swtch int32 - Softs int32 - Syscalls int32 - Pageins int32 - Obsolete_swapins int32 - Obsolete_swapouts int32 - Pgswapin int32 - Pgswapout int32 - Forks int32 - Forks_ppwait int32 - Forks_sharevm int32 - Pga_zerohit int32 - Pga_zeromiss int32 - Zeroaborts int32 - Fltnoram int32 - Fltnoanon int32 - Fltnoamap int32 - Fltpgwait int32 - Fltpgrele int32 - Fltrelck int32 - Fltrelckok int32 - Fltanget int32 - Fltanretry int32 - Fltamcopy int32 - Fltnamap int32 - Fltnomap int32 - Fltlget int32 - Fltget int32 - Flt_anon int32 - Flt_acow int32 - Flt_obj int32 - Flt_prcopy int32 - Flt_przero int32 - Pdwoke int32 - Pdrevs int32 - Pdswout int32 - Pdfreed int32 - Pdscans int32 - Pdanscan int32 - Pdobscan int32 - Pdreact int32 - Pdbusy int32 - Pdpageouts int32 - Pdpending int32 - Pddeact int32 - Pdreanon int32 - Pdrevnode int32 - Pdrevtext int32 - Fpswtch int32 - Kmapent int32 -} - -const SizeofClockinfo = 0x10 - -type Clockinfo struct { - Hz int32 - Tick int32 - Stathz int32 - Profhz int32 -} diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go deleted file mode 100644 index b4fb97e..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go +++ /dev/null @@ -1,574 +0,0 @@ -// cgo -godefs types_openbsd.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build amd64 && openbsd -// +build amd64,openbsd - -package unix - -const ( - SizeofPtr = 0x8 - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLong = 0x8 - SizeofLongLong = 0x8 -) - -type ( - _C_short int16 - _C_int int32 - _C_long int64 - _C_long_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int64 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Rlimit struct { - Cur uint64 - Max uint64 -} - -type _Gid_t uint32 - -type Stat_t struct { - Mode uint32 - Dev int32 - Ino uint64 - Nlink uint32 - Uid uint32 - Gid uint32 - Rdev int32 - Atim Timespec - Mtim Timespec - Ctim Timespec - Size int64 - Blocks int64 - Blksize int32 - Flags uint32 - Gen uint32 - _ [4]byte - _ Timespec -} - -type Statfs_t struct { - F_flags uint32 - F_bsize uint32 - F_iosize uint32 - _ [4]byte - F_blocks uint64 - F_bfree uint64 - F_bavail int64 - F_files uint64 - F_ffree uint64 - F_favail int64 - F_syncwrites uint64 - F_syncreads uint64 - F_asyncwrites uint64 - F_asyncreads uint64 - F_fsid Fsid - F_namemax uint32 - F_owner uint32 - F_ctime uint64 - F_fstypename [16]byte - F_mntonname [90]byte - F_mntfromname [90]byte - F_mntfromspec [90]byte - _ [2]byte - Mount_info [160]byte -} - -type Flock_t struct { - Start int64 - Len int64 - Pid int32 - Type int16 - Whence int16 -} - -type Dirent struct { - Fileno uint64 - Off int64 - Reclen uint16 - Type uint8 - Namlen uint8 - _ [4]uint8 - Name [256]int8 -} - -type Fsid struct { - Val [2]int32 -} - -const ( - PathMax = 0x400 -) - -type RawSockaddrInet4 struct { - Len uint8 - Family uint8 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]int8 -} - -type RawSockaddrInet6 struct { - Len uint8 - Family uint8 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 -} - -type RawSockaddrUnix struct { - Len uint8 - Family uint8 - Path [104]int8 -} - -type RawSockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [24]int8 -} - -type RawSockaddr struct { - Len uint8 - Family uint8 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [92]int8 -} - -type _Socklen uint32 - -type Linger struct { - Onoff int32 - Linger int32 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface uint32 -} - -type Msghdr struct { - Name *byte - Namelen uint32 - _ [4]byte - Iov *Iovec - Iovlen uint32 - _ [4]byte - Control *byte - Controllen uint32 - Flags int32 -} - -type Cmsghdr struct { - Len uint32 - Level int32 - Type int32 -} - -type Inet6Pktinfo struct { - Addr [16]byte /* in6_addr */ - Ifindex uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type ICMPv6Filter struct { - Filt [8]uint32 -} - -const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x6c - SizeofSockaddrUnix = 0x6a - SizeofSockaddrDatalink = 0x20 - SizeofLinger = 0x8 - SizeofIovec = 0x10 - SizeofIPMreq = 0x8 - SizeofIPv6Mreq = 0x14 - SizeofMsghdr = 0x30 - SizeofCmsghdr = 0xc - SizeofInet6Pktinfo = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofICMPv6Filter = 0x20 -) - -const ( - PTRACE_TRACEME = 0x0 - PTRACE_CONT = 0x7 - PTRACE_KILL = 0x8 -) - -type Kevent_t struct { - Ident uint64 - Filter int16 - Flags uint16 - Fflags uint32 - Data int64 - Udata *byte -} - -type FdSet struct { - Bits [32]uint32 -} - -const ( - SizeofIfMsghdr = 0xa8 - SizeofIfData = 0x90 - SizeofIfaMsghdr = 0x18 - SizeofIfAnnounceMsghdr = 0x1a - SizeofRtMsghdr = 0x60 - SizeofRtMetrics = 0x38 -) - -type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Hdrlen uint16 - Index uint16 - Tableid uint16 - Pad1 uint8 - Pad2 uint8 - Addrs int32 - Flags int32 - Xflags int32 - Data IfData -} - -type IfData struct { - Type uint8 - Addrlen uint8 - Hdrlen uint8 - Link_state uint8 - Mtu uint32 - Metric uint32 - Rdomain uint32 - Baudrate uint64 - Ipackets uint64 - Ierrors uint64 - Opackets uint64 - Oerrors uint64 - Collisions uint64 - Ibytes uint64 - Obytes uint64 - Imcasts uint64 - Omcasts uint64 - Iqdrops uint64 - Oqdrops uint64 - Noproto uint64 - Capabilities uint32 - _ [4]byte - Lastchange Timeval -} - -type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Hdrlen uint16 - Index uint16 - Tableid uint16 - Pad1 uint8 - Pad2 uint8 - Addrs int32 - Flags int32 - Metric int32 -} - -type IfAnnounceMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Hdrlen uint16 - Index uint16 - What uint16 - Name [16]int8 -} - -type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Hdrlen uint16 - Index uint16 - Tableid uint16 - Priority uint8 - Mpls uint8 - Addrs int32 - Flags int32 - Fmask int32 - Pid int32 - Seq int32 - Errno int32 - Inits uint32 - Rmx RtMetrics -} - -type RtMetrics struct { - Pksent uint64 - Expire int64 - Locks uint32 - Mtu uint32 - Refcnt uint32 - Hopcount uint32 - Recvpipe uint32 - Sendpipe uint32 - Ssthresh uint32 - Rtt uint32 - Rttvar uint32 - Pad uint32 -} - -type Mclpool struct{} - -const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x8 - SizeofBpfProgram = 0x10 - SizeofBpfInsn = 0x8 - SizeofBpfHdr = 0x14 -) - -type BpfVersion struct { - Major uint16 - Minor uint16 -} - -type BpfStat struct { - Recv uint32 - Drop uint32 -} - -type BpfProgram struct { - Len uint32 - _ [4]byte - Insns *BpfInsn -} - -type BpfInsn struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} - -type BpfHdr struct { - Tstamp BpfTimeval - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - _ [2]byte -} - -type BpfTimeval struct { - Sec uint32 - Usec uint32 -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [20]uint8 - Ispeed int32 - Ospeed int32 -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -const ( - AT_FDCWD = -0x64 - AT_EACCESS = 0x1 - AT_SYMLINK_NOFOLLOW = 0x2 - AT_SYMLINK_FOLLOW = 0x4 - AT_REMOVEDIR = 0x8 -) - -type PollFd struct { - Fd int32 - Events int16 - Revents int16 -} - -const ( - POLLERR = 0x8 - POLLHUP = 0x10 - POLLIN = 0x1 - POLLNVAL = 0x20 - POLLOUT = 0x4 - POLLPRI = 0x2 - POLLRDBAND = 0x80 - POLLRDNORM = 0x40 - POLLWRBAND = 0x100 - POLLWRNORM = 0x4 -) - -type Sigset_t uint32 - -type Utsname struct { - Sysname [256]byte - Nodename [256]byte - Release [256]byte - Version [256]byte - Machine [256]byte -} - -const SizeofUvmexp = 0x158 - -type Uvmexp struct { - Pagesize int32 - Pagemask int32 - Pageshift int32 - Npages int32 - Free int32 - Active int32 - Inactive int32 - Paging int32 - Wired int32 - Zeropages int32 - Reserve_pagedaemon int32 - Reserve_kernel int32 - Anonpages int32 - Vnodepages int32 - Vtextpages int32 - Freemin int32 - Freetarg int32 - Inactarg int32 - Wiredmax int32 - Anonmin int32 - Vtextmin int32 - Vnodemin int32 - Anonminpct int32 - Vtextminpct int32 - Vnodeminpct int32 - Nswapdev int32 - Swpages int32 - Swpginuse int32 - Swpgonly int32 - Nswget int32 - Nanon int32 - Nanonneeded int32 - Nfreeanon int32 - Faults int32 - Traps int32 - Intrs int32 - Swtch int32 - Softs int32 - Syscalls int32 - Pageins int32 - Obsolete_swapins int32 - Obsolete_swapouts int32 - Pgswapin int32 - Pgswapout int32 - Forks int32 - Forks_ppwait int32 - Forks_sharevm int32 - Pga_zerohit int32 - Pga_zeromiss int32 - Zeroaborts int32 - Fltnoram int32 - Fltnoanon int32 - Fltnoamap int32 - Fltpgwait int32 - Fltpgrele int32 - Fltrelck int32 - Fltrelckok int32 - Fltanget int32 - Fltanretry int32 - Fltamcopy int32 - Fltnamap int32 - Fltnomap int32 - Fltlget int32 - Fltget int32 - Flt_anon int32 - Flt_acow int32 - Flt_obj int32 - Flt_prcopy int32 - Flt_przero int32 - Pdwoke int32 - Pdrevs int32 - Pdswout int32 - Pdfreed int32 - Pdscans int32 - Pdanscan int32 - Pdobscan int32 - Pdreact int32 - Pdbusy int32 - Pdpageouts int32 - Pdpending int32 - Pddeact int32 - Pdreanon int32 - Pdrevnode int32 - Pdrevtext int32 - Fpswtch int32 - Kmapent int32 -} - -const SizeofClockinfo = 0x10 - -type Clockinfo struct { - Hz int32 - Tick int32 - Stathz int32 - Profhz int32 -} diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go deleted file mode 100644 index 2c46750..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go +++ /dev/null @@ -1,575 +0,0 @@ -// cgo -godefs -- -fsigned-char types_openbsd.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm && openbsd -// +build arm,openbsd - -package unix - -const ( - SizeofPtr = 0x4 - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLong = 0x4 - SizeofLongLong = 0x8 -) - -type ( - _C_short int16 - _C_int int32 - _C_long int32 - _C_long_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int32 - _ [4]byte -} - -type Timeval struct { - Sec int64 - Usec int32 - _ [4]byte -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int32 - Ixrss int32 - Idrss int32 - Isrss int32 - Minflt int32 - Majflt int32 - Nswap int32 - Inblock int32 - Oublock int32 - Msgsnd int32 - Msgrcv int32 - Nsignals int32 - Nvcsw int32 - Nivcsw int32 -} - -type Rlimit struct { - Cur uint64 - Max uint64 -} - -type _Gid_t uint32 - -type Stat_t struct { - Mode uint32 - Dev int32 - Ino uint64 - Nlink uint32 - Uid uint32 - Gid uint32 - Rdev int32 - Atim Timespec - Mtim Timespec - Ctim Timespec - Size int64 - Blocks int64 - Blksize int32 - Flags uint32 - Gen uint32 - _ [4]byte - _ Timespec -} - -type Statfs_t struct { - F_flags uint32 - F_bsize uint32 - F_iosize uint32 - _ [4]byte - F_blocks uint64 - F_bfree uint64 - F_bavail int64 - F_files uint64 - F_ffree uint64 - F_favail int64 - F_syncwrites uint64 - F_syncreads uint64 - F_asyncwrites uint64 - F_asyncreads uint64 - F_fsid Fsid - F_namemax uint32 - F_owner uint32 - F_ctime uint64 - F_fstypename [16]byte - F_mntonname [90]byte - F_mntfromname [90]byte - F_mntfromspec [90]byte - _ [2]byte - Mount_info [160]byte -} - -type Flock_t struct { - Start int64 - Len int64 - Pid int32 - Type int16 - Whence int16 -} - -type Dirent struct { - Fileno uint64 - Off int64 - Reclen uint16 - Type uint8 - Namlen uint8 - _ [4]uint8 - Name [256]int8 -} - -type Fsid struct { - Val [2]int32 -} - -const ( - PathMax = 0x400 -) - -type RawSockaddrInet4 struct { - Len uint8 - Family uint8 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]int8 -} - -type RawSockaddrInet6 struct { - Len uint8 - Family uint8 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 -} - -type RawSockaddrUnix struct { - Len uint8 - Family uint8 - Path [104]int8 -} - -type RawSockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [24]int8 -} - -type RawSockaddr struct { - Len uint8 - Family uint8 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [92]int8 -} - -type _Socklen uint32 - -type Linger struct { - Onoff int32 - Linger int32 -} - -type Iovec struct { - Base *byte - Len uint32 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface 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 -} - -type Inet6Pktinfo struct { - Addr [16]byte /* in6_addr */ - Ifindex uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type ICMPv6Filter struct { - Filt [8]uint32 -} - -const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x6c - SizeofSockaddrUnix = 0x6a - SizeofSockaddrDatalink = 0x20 - SizeofLinger = 0x8 - SizeofIovec = 0x8 - SizeofIPMreq = 0x8 - SizeofIPv6Mreq = 0x14 - SizeofMsghdr = 0x1c - SizeofCmsghdr = 0xc - SizeofInet6Pktinfo = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofICMPv6Filter = 0x20 -) - -const ( - PTRACE_TRACEME = 0x0 - PTRACE_CONT = 0x7 - PTRACE_KILL = 0x8 -) - -type Kevent_t struct { - Ident uint32 - Filter int16 - Flags uint16 - Fflags uint32 - _ [4]byte - Data int64 - Udata *byte - _ [4]byte -} - -type FdSet struct { - Bits [32]uint32 -} - -const ( - SizeofIfMsghdr = 0xa8 - SizeofIfData = 0x90 - SizeofIfaMsghdr = 0x18 - SizeofIfAnnounceMsghdr = 0x1a - SizeofRtMsghdr = 0x60 - SizeofRtMetrics = 0x38 -) - -type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Hdrlen uint16 - Index uint16 - Tableid uint16 - Pad1 uint8 - Pad2 uint8 - Addrs int32 - Flags int32 - Xflags int32 - Data IfData -} - -type IfData struct { - Type uint8 - Addrlen uint8 - Hdrlen uint8 - Link_state uint8 - Mtu uint32 - Metric uint32 - Rdomain uint32 - Baudrate uint64 - Ipackets uint64 - Ierrors uint64 - Opackets uint64 - Oerrors uint64 - Collisions uint64 - Ibytes uint64 - Obytes uint64 - Imcasts uint64 - Omcasts uint64 - Iqdrops uint64 - Oqdrops uint64 - Noproto uint64 - Capabilities uint32 - _ [4]byte - Lastchange Timeval -} - -type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Hdrlen uint16 - Index uint16 - Tableid uint16 - Pad1 uint8 - Pad2 uint8 - Addrs int32 - Flags int32 - Metric int32 -} - -type IfAnnounceMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Hdrlen uint16 - Index uint16 - What uint16 - Name [16]int8 -} - -type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Hdrlen uint16 - Index uint16 - Tableid uint16 - Priority uint8 - Mpls uint8 - Addrs int32 - Flags int32 - Fmask int32 - Pid int32 - Seq int32 - Errno int32 - Inits uint32 - Rmx RtMetrics -} - -type RtMetrics struct { - Pksent uint64 - Expire int64 - Locks uint32 - Mtu uint32 - Refcnt uint32 - Hopcount uint32 - Recvpipe uint32 - Sendpipe uint32 - Ssthresh uint32 - Rtt uint32 - Rttvar uint32 - Pad uint32 -} - -type Mclpool struct{} - -const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x8 - SizeofBpfProgram = 0x8 - SizeofBpfInsn = 0x8 - SizeofBpfHdr = 0x14 -) - -type BpfVersion struct { - Major uint16 - Minor uint16 -} - -type BpfStat struct { - Recv uint32 - Drop uint32 -} - -type BpfProgram struct { - Len uint32 - Insns *BpfInsn -} - -type BpfInsn struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} - -type BpfHdr struct { - Tstamp BpfTimeval - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - _ [2]byte -} - -type BpfTimeval struct { - Sec uint32 - Usec uint32 -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [20]uint8 - Ispeed int32 - Ospeed int32 -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -const ( - AT_FDCWD = -0x64 - AT_EACCESS = 0x1 - AT_SYMLINK_NOFOLLOW = 0x2 - AT_SYMLINK_FOLLOW = 0x4 - AT_REMOVEDIR = 0x8 -) - -type PollFd struct { - Fd int32 - Events int16 - Revents int16 -} - -const ( - POLLERR = 0x8 - POLLHUP = 0x10 - POLLIN = 0x1 - POLLNVAL = 0x20 - POLLOUT = 0x4 - POLLPRI = 0x2 - POLLRDBAND = 0x80 - POLLRDNORM = 0x40 - POLLWRBAND = 0x100 - POLLWRNORM = 0x4 -) - -type Sigset_t uint32 - -type Utsname struct { - Sysname [256]byte - Nodename [256]byte - Release [256]byte - Version [256]byte - Machine [256]byte -} - -const SizeofUvmexp = 0x158 - -type Uvmexp struct { - Pagesize int32 - Pagemask int32 - Pageshift int32 - Npages int32 - Free int32 - Active int32 - Inactive int32 - Paging int32 - Wired int32 - Zeropages int32 - Reserve_pagedaemon int32 - Reserve_kernel int32 - Unused01 int32 - Vnodepages int32 - Vtextpages int32 - Freemin int32 - Freetarg int32 - Inactarg int32 - Wiredmax int32 - Anonmin int32 - Vtextmin int32 - Vnodemin int32 - Anonminpct int32 - Vtextminpct int32 - Vnodeminpct int32 - Nswapdev int32 - Swpages int32 - Swpginuse int32 - Swpgonly int32 - Nswget int32 - Nanon int32 - Unused05 int32 - Unused06 int32 - Faults int32 - Traps int32 - Intrs int32 - Swtch int32 - Softs int32 - Syscalls int32 - Pageins int32 - Unused07 int32 - Unused08 int32 - Pgswapin int32 - Pgswapout int32 - Forks int32 - Forks_ppwait int32 - Forks_sharevm int32 - Pga_zerohit int32 - Pga_zeromiss int32 - Unused09 int32 - Fltnoram int32 - Fltnoanon int32 - Fltnoamap int32 - Fltpgwait int32 - Fltpgrele int32 - Fltrelck int32 - Fltrelckok int32 - Fltanget int32 - Fltanretry int32 - Fltamcopy int32 - Fltnamap int32 - Fltnomap int32 - Fltlget int32 - Fltget int32 - Flt_anon int32 - Flt_acow int32 - Flt_obj int32 - Flt_prcopy int32 - Flt_przero int32 - Pdwoke int32 - Pdrevs int32 - Pdswout int32 - Pdfreed int32 - Pdscans int32 - Pdanscan int32 - Pdobscan int32 - Pdreact int32 - Pdbusy int32 - Pdpageouts int32 - Pdpending int32 - Pddeact int32 - Unused11 int32 - Unused12 int32 - Unused13 int32 - Fpswtch int32 - Kmapent int32 -} - -const SizeofClockinfo = 0x10 - -type Clockinfo struct { - Hz int32 - Tick int32 - Stathz int32 - Profhz int32 -} diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go deleted file mode 100644 index ddee045..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go +++ /dev/null @@ -1,568 +0,0 @@ -// cgo -godefs -- -fsigned-char types_openbsd.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm64 && openbsd -// +build arm64,openbsd - -package unix - -const ( - SizeofPtr = 0x8 - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLong = 0x8 - SizeofLongLong = 0x8 -) - -type ( - _C_short int16 - _C_int int32 - _C_long int64 - _C_long_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int64 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Rlimit struct { - Cur uint64 - Max uint64 -} - -type _Gid_t uint32 - -type Stat_t struct { - Mode uint32 - Dev int32 - Ino uint64 - Nlink uint32 - Uid uint32 - Gid uint32 - Rdev int32 - Atim Timespec - Mtim Timespec - Ctim Timespec - Size int64 - Blocks int64 - Blksize int32 - Flags uint32 - Gen uint32 - _ Timespec -} - -type Statfs_t struct { - F_flags uint32 - F_bsize uint32 - F_iosize uint32 - F_blocks uint64 - F_bfree uint64 - F_bavail int64 - F_files uint64 - F_ffree uint64 - F_favail int64 - F_syncwrites uint64 - F_syncreads uint64 - F_asyncwrites uint64 - F_asyncreads uint64 - F_fsid Fsid - F_namemax uint32 - F_owner uint32 - F_ctime uint64 - F_fstypename [16]byte - F_mntonname [90]byte - F_mntfromname [90]byte - F_mntfromspec [90]byte - _ [2]byte - Mount_info [160]byte -} - -type Flock_t struct { - Start int64 - Len int64 - Pid int32 - Type int16 - Whence int16 -} - -type Dirent struct { - Fileno uint64 - Off int64 - Reclen uint16 - Type uint8 - Namlen uint8 - _ [4]uint8 - Name [256]int8 -} - -type Fsid struct { - Val [2]int32 -} - -const ( - PathMax = 0x400 -) - -type RawSockaddrInet4 struct { - Len uint8 - Family uint8 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]int8 -} - -type RawSockaddrInet6 struct { - Len uint8 - Family uint8 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 -} - -type RawSockaddrUnix struct { - Len uint8 - Family uint8 - Path [104]int8 -} - -type RawSockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [24]int8 -} - -type RawSockaddr struct { - Len uint8 - Family uint8 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [92]int8 -} - -type _Socklen uint32 - -type Linger struct { - Onoff int32 - Linger int32 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface 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 -} - -type Inet6Pktinfo struct { - Addr [16]byte /* in6_addr */ - Ifindex uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type ICMPv6Filter struct { - Filt [8]uint32 -} - -const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x6c - SizeofSockaddrUnix = 0x6a - SizeofSockaddrDatalink = 0x20 - SizeofLinger = 0x8 - SizeofIovec = 0x10 - SizeofIPMreq = 0x8 - SizeofIPv6Mreq = 0x14 - SizeofMsghdr = 0x30 - SizeofCmsghdr = 0xc - SizeofInet6Pktinfo = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofICMPv6Filter = 0x20 -) - -const ( - PTRACE_TRACEME = 0x0 - PTRACE_CONT = 0x7 - PTRACE_KILL = 0x8 -) - -type Kevent_t struct { - Ident uint64 - Filter int16 - Flags uint16 - Fflags uint32 - Data int64 - Udata *byte -} - -type FdSet struct { - Bits [32]uint32 -} - -const ( - SizeofIfMsghdr = 0xa8 - SizeofIfData = 0x90 - SizeofIfaMsghdr = 0x18 - SizeofIfAnnounceMsghdr = 0x1a - SizeofRtMsghdr = 0x60 - SizeofRtMetrics = 0x38 -) - -type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Hdrlen uint16 - Index uint16 - Tableid uint16 - Pad1 uint8 - Pad2 uint8 - Addrs int32 - Flags int32 - Xflags int32 - Data IfData -} - -type IfData struct { - Type uint8 - Addrlen uint8 - Hdrlen uint8 - Link_state uint8 - Mtu uint32 - Metric uint32 - Rdomain uint32 - Baudrate uint64 - Ipackets uint64 - Ierrors uint64 - Opackets uint64 - Oerrors uint64 - Collisions uint64 - Ibytes uint64 - Obytes uint64 - Imcasts uint64 - Omcasts uint64 - Iqdrops uint64 - Oqdrops uint64 - Noproto uint64 - Capabilities uint32 - Lastchange Timeval -} - -type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Hdrlen uint16 - Index uint16 - Tableid uint16 - Pad1 uint8 - Pad2 uint8 - Addrs int32 - Flags int32 - Metric int32 -} - -type IfAnnounceMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Hdrlen uint16 - Index uint16 - What uint16 - Name [16]int8 -} - -type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Hdrlen uint16 - Index uint16 - Tableid uint16 - Priority uint8 - Mpls uint8 - Addrs int32 - Flags int32 - Fmask int32 - Pid int32 - Seq int32 - Errno int32 - Inits uint32 - Rmx RtMetrics -} - -type RtMetrics struct { - Pksent uint64 - Expire int64 - Locks uint32 - Mtu uint32 - Refcnt uint32 - Hopcount uint32 - Recvpipe uint32 - Sendpipe uint32 - Ssthresh uint32 - Rtt uint32 - Rttvar uint32 - Pad uint32 -} - -type Mclpool struct{} - -const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x8 - SizeofBpfProgram = 0x10 - SizeofBpfInsn = 0x8 - SizeofBpfHdr = 0x14 -) - -type BpfVersion struct { - Major uint16 - Minor uint16 -} - -type BpfStat struct { - Recv uint32 - Drop uint32 -} - -type BpfProgram struct { - Len uint32 - Insns *BpfInsn -} - -type BpfInsn struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} - -type BpfHdr struct { - Tstamp BpfTimeval - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - _ [2]byte -} - -type BpfTimeval struct { - Sec uint32 - Usec uint32 -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [20]uint8 - Ispeed int32 - Ospeed int32 -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -const ( - AT_FDCWD = -0x64 - AT_EACCESS = 0x1 - AT_SYMLINK_NOFOLLOW = 0x2 - AT_SYMLINK_FOLLOW = 0x4 - AT_REMOVEDIR = 0x8 -) - -type PollFd struct { - Fd int32 - Events int16 - Revents int16 -} - -const ( - POLLERR = 0x8 - POLLHUP = 0x10 - POLLIN = 0x1 - POLLNVAL = 0x20 - POLLOUT = 0x4 - POLLPRI = 0x2 - POLLRDBAND = 0x80 - POLLRDNORM = 0x40 - POLLWRBAND = 0x100 - POLLWRNORM = 0x4 -) - -type Sigset_t uint32 - -type Utsname struct { - Sysname [256]byte - Nodename [256]byte - Release [256]byte - Version [256]byte - Machine [256]byte -} - -const SizeofUvmexp = 0x158 - -type Uvmexp struct { - Pagesize int32 - Pagemask int32 - Pageshift int32 - Npages int32 - Free int32 - Active int32 - Inactive int32 - Paging int32 - Wired int32 - Zeropages int32 - Reserve_pagedaemon int32 - Reserve_kernel int32 - Unused01 int32 - Vnodepages int32 - Vtextpages int32 - Freemin int32 - Freetarg int32 - Inactarg int32 - Wiredmax int32 - Anonmin int32 - Vtextmin int32 - Vnodemin int32 - Anonminpct int32 - Vtextminpct int32 - Vnodeminpct int32 - Nswapdev int32 - Swpages int32 - Swpginuse int32 - Swpgonly int32 - Nswget int32 - Nanon int32 - Unused05 int32 - Unused06 int32 - Faults int32 - Traps int32 - Intrs int32 - Swtch int32 - Softs int32 - Syscalls int32 - Pageins int32 - Unused07 int32 - Unused08 int32 - Pgswapin int32 - Pgswapout int32 - Forks int32 - Forks_ppwait int32 - Forks_sharevm int32 - Pga_zerohit int32 - Pga_zeromiss int32 - Unused09 int32 - Fltnoram int32 - Fltnoanon int32 - Fltnoamap int32 - Fltpgwait int32 - Fltpgrele int32 - Fltrelck int32 - Fltrelckok int32 - Fltanget int32 - Fltanretry int32 - Fltamcopy int32 - Fltnamap int32 - Fltnomap int32 - Fltlget int32 - Fltget int32 - Flt_anon int32 - Flt_acow int32 - Flt_obj int32 - Flt_prcopy int32 - Flt_przero int32 - Pdwoke int32 - Pdrevs int32 - Pdswout int32 - Pdfreed int32 - Pdscans int32 - Pdanscan int32 - Pdobscan int32 - Pdreact int32 - Pdbusy int32 - Pdpageouts int32 - Pdpending int32 - Pddeact int32 - Unused11 int32 - Unused12 int32 - Unused13 int32 - Fpswtch int32 - Kmapent int32 -} - -const SizeofClockinfo = 0x10 - -type Clockinfo struct { - Hz int32 - Tick int32 - Stathz int32 - Profhz int32 -} diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go deleted file mode 100644 index eb13d4e..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go +++ /dev/null @@ -1,568 +0,0 @@ -// cgo -godefs -- -fsigned-char types_openbsd.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build mips64 && openbsd -// +build mips64,openbsd - -package unix - -const ( - SizeofPtr = 0x8 - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLong = 0x8 - SizeofLongLong = 0x8 -) - -type ( - _C_short int16 - _C_int int32 - _C_long int64 - _C_long_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int64 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Rlimit struct { - Cur uint64 - Max uint64 -} - -type _Gid_t uint32 - -type Stat_t struct { - Mode uint32 - Dev int32 - Ino uint64 - Nlink uint32 - Uid uint32 - Gid uint32 - Rdev int32 - Atim Timespec - Mtim Timespec - Ctim Timespec - Size int64 - Blocks int64 - Blksize int32 - Flags uint32 - Gen uint32 - _ Timespec -} - -type Statfs_t struct { - F_flags uint32 - F_bsize uint32 - F_iosize uint32 - F_blocks uint64 - F_bfree uint64 - F_bavail int64 - F_files uint64 - F_ffree uint64 - F_favail int64 - F_syncwrites uint64 - F_syncreads uint64 - F_asyncwrites uint64 - F_asyncreads uint64 - F_fsid Fsid - F_namemax uint32 - F_owner uint32 - F_ctime uint64 - F_fstypename [16]byte - F_mntonname [90]byte - F_mntfromname [90]byte - F_mntfromspec [90]byte - _ [2]byte - Mount_info [160]byte -} - -type Flock_t struct { - Start int64 - Len int64 - Pid int32 - Type int16 - Whence int16 -} - -type Dirent struct { - Fileno uint64 - Off int64 - Reclen uint16 - Type uint8 - Namlen uint8 - _ [4]uint8 - Name [256]int8 -} - -type Fsid struct { - Val [2]int32 -} - -const ( - PathMax = 0x400 -) - -type RawSockaddrInet4 struct { - Len uint8 - Family uint8 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]int8 -} - -type RawSockaddrInet6 struct { - Len uint8 - Family uint8 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 -} - -type RawSockaddrUnix struct { - Len uint8 - Family uint8 - Path [104]int8 -} - -type RawSockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [24]int8 -} - -type RawSockaddr struct { - Len uint8 - Family uint8 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [92]int8 -} - -type _Socklen uint32 - -type Linger struct { - Onoff int32 - Linger int32 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface 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 -} - -type Inet6Pktinfo struct { - Addr [16]byte /* in6_addr */ - Ifindex uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type ICMPv6Filter struct { - Filt [8]uint32 -} - -const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x6c - SizeofSockaddrUnix = 0x6a - SizeofSockaddrDatalink = 0x20 - SizeofLinger = 0x8 - SizeofIovec = 0x10 - SizeofIPMreq = 0x8 - SizeofIPv6Mreq = 0x14 - SizeofMsghdr = 0x30 - SizeofCmsghdr = 0xc - SizeofInet6Pktinfo = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofICMPv6Filter = 0x20 -) - -const ( - PTRACE_TRACEME = 0x0 - PTRACE_CONT = 0x7 - PTRACE_KILL = 0x8 -) - -type Kevent_t struct { - Ident uint64 - Filter int16 - Flags uint16 - Fflags uint32 - Data int64 - Udata *byte -} - -type FdSet struct { - Bits [32]uint32 -} - -const ( - SizeofIfMsghdr = 0xa8 - SizeofIfData = 0x90 - SizeofIfaMsghdr = 0x18 - SizeofIfAnnounceMsghdr = 0x1a - SizeofRtMsghdr = 0x60 - SizeofRtMetrics = 0x38 -) - -type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Hdrlen uint16 - Index uint16 - Tableid uint16 - Pad1 uint8 - Pad2 uint8 - Addrs int32 - Flags int32 - Xflags int32 - Data IfData -} - -type IfData struct { - Type uint8 - Addrlen uint8 - Hdrlen uint8 - Link_state uint8 - Mtu uint32 - Metric uint32 - Rdomain uint32 - Baudrate uint64 - Ipackets uint64 - Ierrors uint64 - Opackets uint64 - Oerrors uint64 - Collisions uint64 - Ibytes uint64 - Obytes uint64 - Imcasts uint64 - Omcasts uint64 - Iqdrops uint64 - Oqdrops uint64 - Noproto uint64 - Capabilities uint32 - Lastchange Timeval -} - -type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Hdrlen uint16 - Index uint16 - Tableid uint16 - Pad1 uint8 - Pad2 uint8 - Addrs int32 - Flags int32 - Metric int32 -} - -type IfAnnounceMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Hdrlen uint16 - Index uint16 - What uint16 - Name [16]int8 -} - -type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Hdrlen uint16 - Index uint16 - Tableid uint16 - Priority uint8 - Mpls uint8 - Addrs int32 - Flags int32 - Fmask int32 - Pid int32 - Seq int32 - Errno int32 - Inits uint32 - Rmx RtMetrics -} - -type RtMetrics struct { - Pksent uint64 - Expire int64 - Locks uint32 - Mtu uint32 - Refcnt uint32 - Hopcount uint32 - Recvpipe uint32 - Sendpipe uint32 - Ssthresh uint32 - Rtt uint32 - Rttvar uint32 - Pad uint32 -} - -type Mclpool struct{} - -const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x8 - SizeofBpfProgram = 0x10 - SizeofBpfInsn = 0x8 - SizeofBpfHdr = 0x14 -) - -type BpfVersion struct { - Major uint16 - Minor uint16 -} - -type BpfStat struct { - Recv uint32 - Drop uint32 -} - -type BpfProgram struct { - Len uint32 - Insns *BpfInsn -} - -type BpfInsn struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} - -type BpfHdr struct { - Tstamp BpfTimeval - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - _ [2]byte -} - -type BpfTimeval struct { - Sec uint32 - Usec uint32 -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [20]uint8 - Ispeed int32 - Ospeed int32 -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -const ( - AT_FDCWD = -0x64 - AT_EACCESS = 0x1 - AT_SYMLINK_NOFOLLOW = 0x2 - AT_SYMLINK_FOLLOW = 0x4 - AT_REMOVEDIR = 0x8 -) - -type PollFd struct { - Fd int32 - Events int16 - Revents int16 -} - -const ( - POLLERR = 0x8 - POLLHUP = 0x10 - POLLIN = 0x1 - POLLNVAL = 0x20 - POLLOUT = 0x4 - POLLPRI = 0x2 - POLLRDBAND = 0x80 - POLLRDNORM = 0x40 - POLLWRBAND = 0x100 - POLLWRNORM = 0x4 -) - -type Sigset_t uint32 - -type Utsname struct { - Sysname [256]byte - Nodename [256]byte - Release [256]byte - Version [256]byte - Machine [256]byte -} - -const SizeofUvmexp = 0x158 - -type Uvmexp struct { - Pagesize int32 - Pagemask int32 - Pageshift int32 - Npages int32 - Free int32 - Active int32 - Inactive int32 - Paging int32 - Wired int32 - Zeropages int32 - Reserve_pagedaemon int32 - Reserve_kernel int32 - Unused01 int32 - Vnodepages int32 - Vtextpages int32 - Freemin int32 - Freetarg int32 - Inactarg int32 - Wiredmax int32 - Anonmin int32 - Vtextmin int32 - Vnodemin int32 - Anonminpct int32 - Vtextminpct int32 - Vnodeminpct int32 - Nswapdev int32 - Swpages int32 - Swpginuse int32 - Swpgonly int32 - Nswget int32 - Nanon int32 - Unused05 int32 - Unused06 int32 - Faults int32 - Traps int32 - Intrs int32 - Swtch int32 - Softs int32 - Syscalls int32 - Pageins int32 - Unused07 int32 - Unused08 int32 - Pgswapin int32 - Pgswapout int32 - Forks int32 - Forks_ppwait int32 - Forks_sharevm int32 - Pga_zerohit int32 - Pga_zeromiss int32 - Unused09 int32 - Fltnoram int32 - Fltnoanon int32 - Fltnoamap int32 - Fltpgwait int32 - Fltpgrele int32 - Fltrelck int32 - Fltrelckok int32 - Fltanget int32 - Fltanretry int32 - Fltamcopy int32 - Fltnamap int32 - Fltnomap int32 - Fltlget int32 - Fltget int32 - Flt_anon int32 - Flt_acow int32 - Flt_obj int32 - Flt_prcopy int32 - Flt_przero int32 - Pdwoke int32 - Pdrevs int32 - Pdswout int32 - Pdfreed int32 - Pdscans int32 - Pdanscan int32 - Pdobscan int32 - Pdreact int32 - Pdbusy int32 - Pdpageouts int32 - Pdpending int32 - Pddeact int32 - Unused11 int32 - Unused12 int32 - Unused13 int32 - Fpswtch int32 - Kmapent int32 -} - -const SizeofClockinfo = 0x10 - -type Clockinfo struct { - Hz int32 - Tick int32 - Stathz int32 - Profhz int32 -} diff --git a/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go deleted file mode 100644 index c1a9b83..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go +++ /dev/null @@ -1,482 +0,0 @@ -// cgo -godefs types_solaris.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build amd64 && solaris -// +build amd64,solaris - -package unix - -const ( - SizeofPtr = 0x8 - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLong = 0x8 - SizeofLongLong = 0x8 - PathMax = 0x400 - MaxHostNameLen = 0x100 -) - -type ( - _C_short int16 - _C_int int32 - _C_long int64 - _C_long_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int64 -} - -type Timeval32 struct { - Sec int32 - Usec int32 -} - -type Tms struct { - Utime int64 - Stime int64 - Cutime int64 - Cstime int64 -} - -type Utimbuf struct { - Actime int64 - Modtime int64 -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Rlimit struct { - Cur uint64 - Max uint64 -} - -type _Gid_t uint32 - -type Stat_t struct { - Dev uint64 - Ino uint64 - Mode uint32 - Nlink uint32 - Uid uint32 - Gid uint32 - Rdev uint64 - Size int64 - Atim Timespec - Mtim Timespec - Ctim Timespec - Blksize int32 - Blocks int64 - Fstype [16]int8 -} - -type Flock_t struct { - Type int16 - Whence int16 - Start int64 - Len int64 - Sysid int32 - Pid int32 - Pad [4]int64 -} - -type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Name [1]int8 - _ [5]byte -} - -type _Fsblkcnt_t uint64 - -type Statvfs_t struct { - Bsize uint64 - Frsize uint64 - Blocks uint64 - Bfree uint64 - Bavail uint64 - Files uint64 - Ffree uint64 - Favail uint64 - Fsid uint64 - Basetype [16]int8 - Flag uint64 - Namemax uint64 - Fstr [32]int8 -} - -type RawSockaddrInet4 struct { - Family uint16 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]int8 -} - -type RawSockaddrInet6 struct { - Family uint16 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 - _ uint32 -} - -type RawSockaddrUnix struct { - Family uint16 - Path [108]int8 -} - -type RawSockaddrDatalink struct { - Family uint16 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [244]int8 -} - -type RawSockaddr struct { - Family uint16 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [236]int8 -} - -type _Socklen uint32 - -type Linger struct { - Onoff int32 - Linger int32 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface uint32 -} - -type Msghdr struct { - Name *byte - Namelen uint32 - Iov *Iovec - Iovlen int32 - Accrights *int8 - Accrightslen int32 - _ [4]byte -} - -type Cmsghdr struct { - Len uint32 - Level int32 - Type int32 -} - -type Inet4Pktinfo struct { - Ifindex uint32 - Spec_dst [4]byte /* in_addr */ - Addr [4]byte /* in_addr */ -} - -type Inet6Pktinfo struct { - Addr [16]byte /* in6_addr */ - Ifindex uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type ICMPv6Filter struct { - Filt [8]uint32 -} - -const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x20 - SizeofSockaddrAny = 0xfc - SizeofSockaddrUnix = 0x6e - SizeofSockaddrDatalink = 0xfc - SizeofLinger = 0x8 - SizeofIovec = 0x10 - SizeofIPMreq = 0x8 - SizeofIPv6Mreq = 0x14 - SizeofMsghdr = 0x30 - SizeofCmsghdr = 0xc - SizeofInet4Pktinfo = 0xc - SizeofInet6Pktinfo = 0x14 - SizeofIPv6MTUInfo = 0x24 - SizeofICMPv6Filter = 0x20 -) - -type FdSet struct { - Bits [1024]int64 -} - -type Utsname struct { - Sysname [257]byte - Nodename [257]byte - Release [257]byte - Version [257]byte - Machine [257]byte -} - -type Ustat_t struct { - Tfree int64 - Tinode uint64 - Fname [6]int8 - Fpack [6]int8 - _ [4]byte -} - -const ( - AT_FDCWD = 0xffd19553 - AT_SYMLINK_NOFOLLOW = 0x1000 - AT_SYMLINK_FOLLOW = 0x2000 - AT_REMOVEDIR = 0x1 - AT_EACCESS = 0x4 -) - -const ( - SizeofIfMsghdr = 0x54 - SizeofIfData = 0x44 - SizeofIfaMsghdr = 0x14 - SizeofRtMsghdr = 0x4c - SizeofRtMetrics = 0x28 -) - -type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Data IfData -} - -type IfData struct { - Type uint8 - Addrlen uint8 - Hdrlen uint8 - Mtu uint32 - Metric uint32 - Baudrate uint32 - Ipackets uint32 - Ierrors uint32 - Opackets uint32 - Oerrors uint32 - Collisions uint32 - Ibytes uint32 - Obytes uint32 - Imcasts uint32 - Omcasts uint32 - Iqdrops uint32 - Noproto uint32 - Lastchange Timeval32 -} - -type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Metric int32 -} - -type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Flags int32 - Addrs int32 - Pid int32 - Seq int32 - Errno int32 - Use int32 - Inits uint32 - Rmx RtMetrics -} - -type RtMetrics struct { - Locks uint32 - Mtu uint32 - Hopcount uint32 - Expire uint32 - Recvpipe uint32 - Sendpipe uint32 - Ssthresh uint32 - Rtt uint32 - Rttvar uint32 - Pksent uint32 -} - -const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x80 - SizeofBpfProgram = 0x10 - SizeofBpfInsn = 0x8 - SizeofBpfHdr = 0x14 -) - -type BpfVersion struct { - Major uint16 - Minor uint16 -} - -type BpfStat struct { - Recv uint64 - Drop uint64 - Capt uint64 - _ [13]uint64 -} - -type BpfProgram struct { - Len uint32 - Insns *BpfInsn -} - -type BpfInsn struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} - -type BpfTimeval struct { - Sec int32 - Usec int32 -} - -type BpfHdr struct { - Tstamp BpfTimeval - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - _ [2]byte -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [19]uint8 - _ [1]byte -} - -type Termio struct { - Iflag uint16 - Oflag uint16 - Cflag uint16 - Lflag uint16 - Line int8 - Cc [8]uint8 - _ [1]byte -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -type PollFd struct { - Fd int32 - Events int16 - Revents int16 -} - -const ( - POLLERR = 0x8 - POLLHUP = 0x10 - POLLIN = 0x1 - POLLNVAL = 0x20 - POLLOUT = 0x4 - POLLPRI = 0x2 - POLLRDBAND = 0x80 - POLLRDNORM = 0x40 - POLLWRBAND = 0x100 - POLLWRNORM = 0x4 -) - -type fileObj struct { - Atim Timespec - Mtim Timespec - Ctim Timespec - Pad [3]uint64 - Name *int8 -} - -type portEvent struct { - Events int32 - Source uint16 - Pad uint16 - Object uint64 - User *byte -} - -const ( - PORT_SOURCE_AIO = 0x1 - PORT_SOURCE_TIMER = 0x2 - PORT_SOURCE_USER = 0x3 - PORT_SOURCE_FD = 0x4 - PORT_SOURCE_ALERT = 0x5 - PORT_SOURCE_MQ = 0x6 - PORT_SOURCE_FILE = 0x7 - PORT_ALERT_SET = 0x1 - PORT_ALERT_UPDATE = 0x2 - PORT_ALERT_INVALID = 0x3 - FILE_ACCESS = 0x1 - FILE_MODIFIED = 0x2 - FILE_ATTRIB = 0x4 - FILE_TRUNC = 0x100000 - FILE_NOFOLLOW = 0x10000000 - FILE_DELETE = 0x10 - FILE_RENAME_TO = 0x20 - FILE_RENAME_FROM = 0x40 - UNMOUNTED = 0x20000000 - MOUNTEDOVER = 0x40000000 - FILE_EXCEPTION = 0x60000070 -) diff --git a/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go deleted file mode 100644 index 4ab638c..0000000 --- a/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go +++ /dev/null @@ -1,406 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build zos && s390x -// +build zos,s390x - -// Hand edited based on ztypes_linux_s390x.go -// TODO: auto-generate. - -package unix - -const ( - SizeofPtr = 0x8 - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLong = 0x8 - SizeofLongLong = 0x8 - PathMax = 0x1000 -) - -const ( - SizeofSockaddrAny = 128 - SizeofCmsghdr = 12 - SizeofIPMreq = 8 - SizeofIPv6Mreq = 20 - SizeofICMPv6Filter = 32 - SizeofIPv6MTUInfo = 32 - SizeofLinger = 8 - SizeofSockaddrInet4 = 16 - SizeofSockaddrInet6 = 28 - SizeofTCPInfo = 0x68 -) - -type ( - _C_short int16 - _C_int int32 - _C_long int64 - _C_long_long int64 -) - -type Timespec struct { - Sec int64 - Nsec int64 -} - -type Timeval struct { - Sec int64 - Usec int64 -} - -type timeval_zos struct { //correct (with padding and all) - Sec int64 - _ [4]byte // pad - Usec int32 -} - -type Tms struct { //clock_t is 4-byte unsigned int in zos - Utime uint32 - Stime uint32 - Cutime uint32 - Cstime uint32 -} - -type Time_t int64 - -type Utimbuf struct { - Actime int64 - Modtime int64 -} - -type Utsname struct { - Sysname [65]byte - Nodename [65]byte - Release [65]byte - Version [65]byte - Machine [65]byte - Domainname [65]byte -} - -type RawSockaddrInet4 struct { - Len uint8 - Family uint8 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]uint8 -} - -type RawSockaddrInet6 struct { - Len uint8 - Family uint8 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 -} - -type RawSockaddrUnix struct { - Len uint8 - Family uint8 - Path [108]int8 -} - -type RawSockaddr struct { - Len uint8 - Family uint8 - Data [14]uint8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - _ [112]uint8 // pad -} - -type _Socklen uint32 - -type Linger struct { - Onoff int32 - Linger int32 -} - -type Iovec struct { - Base *byte - Len uint64 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface uint32 -} - -type Msghdr struct { - Name *byte - Iov *Iovec - Control *byte - Flags int32 - Namelen int32 - Iovlen int32 - Controllen int32 -} - -type Cmsghdr struct { - Len int32 - Level int32 - Type int32 -} - -type Inet4Pktinfo struct { - Addr [4]byte /* in_addr */ - Ifindex uint32 -} - -type Inet6Pktinfo struct { - Addr [16]byte /* in6_addr */ - Ifindex uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type ICMPv6Filter struct { - Data [8]uint32 -} - -type TCPInfo struct { - State uint8 - Ca_state uint8 - Retransmits uint8 - Probes uint8 - Backoff uint8 - Options uint8 - Rto uint32 - Ato uint32 - Snd_mss uint32 - Rcv_mss uint32 - Unacked uint32 - Sacked uint32 - Lost uint32 - Retrans uint32 - Fackets uint32 - Last_data_sent uint32 - Last_ack_sent uint32 - Last_data_recv uint32 - Last_ack_recv uint32 - Pmtu uint32 - Rcv_ssthresh uint32 - Rtt uint32 - Rttvar uint32 - Snd_ssthresh uint32 - Snd_cwnd uint32 - Advmss uint32 - Reordering uint32 - Rcv_rtt uint32 - Rcv_space uint32 - Total_retrans uint32 -} - -type _Gid_t uint32 - -type rusage_zos struct { - Utime timeval_zos - Stime timeval_zos -} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int64 - Ixrss int64 - Idrss int64 - Isrss int64 - Minflt int64 - Majflt int64 - Nswap int64 - Inblock int64 - Oublock int64 - Msgsnd int64 - Msgrcv int64 - Nsignals int64 - Nvcsw int64 - Nivcsw int64 -} - -type Rlimit struct { - Cur uint64 - Max uint64 -} - -// { int, short, short } in poll.h -type PollFd struct { - Fd int32 - Events int16 - Revents int16 -} - -type Stat_t struct { //Linux Definition - Dev uint64 - Ino uint64 - Nlink uint64 - Mode uint32 - Uid uint32 - Gid uint32 - _ int32 - Rdev uint64 - Size int64 - Atim Timespec - Mtim Timespec - Ctim Timespec - Blksize int64 - Blocks int64 - _ [3]int64 -} - -type Stat_LE_t struct { - _ [4]byte // eye catcher - Length uint16 - Version uint16 - Mode int32 - Ino uint32 - Dev uint32 - Nlink int32 - Uid int32 - Gid int32 - Size int64 - Atim31 [4]byte - Mtim31 [4]byte - Ctim31 [4]byte - Rdev uint32 - Auditoraudit uint32 - Useraudit uint32 - Blksize int32 - Creatim31 [4]byte - AuditID [16]byte - _ [4]byte // rsrvd1 - File_tag struct { - Ccsid uint16 - Txtflag uint16 // aggregating Txflag:1 deferred:1 rsvflags:14 - } - CharsetID [8]byte - Blocks int64 - Genvalue uint32 - Reftim31 [4]byte - Fid [8]byte - Filefmt byte - Fspflag2 byte - _ [2]byte // rsrvd2 - Ctimemsec int32 - Seclabel [8]byte - _ [4]byte // rsrvd3 - _ [4]byte // rsrvd4 - Atim Time_t - Mtim Time_t - Ctim Time_t - Creatim Time_t - Reftim Time_t - _ [24]byte // rsrvd5 -} - -type Statvfs_t struct { - ID [4]byte - Len int32 - Bsize uint64 - Blocks uint64 - Usedspace uint64 - Bavail uint64 - Flag uint64 - Maxfilesize int64 - _ [16]byte - Frsize uint64 - Bfree uint64 - Files uint32 - Ffree uint32 - Favail uint32 - Namemax31 uint32 - Invarsec uint32 - _ [4]byte - Fsid uint64 - Namemax uint64 -} - -type Statfs_t struct { - Type uint32 - Bsize uint64 - Blocks uint64 - Bfree uint64 - Bavail uint64 - Files uint32 - Ffree uint32 - Fsid uint64 - Namelen uint64 - Frsize uint64 - Flags uint64 -} - -type Dirent struct { - Reclen uint16 - Namlen uint16 - Ino uint32 - Extra uintptr - Name [256]byte -} - -type FdSet struct { - Bits [64]int32 -} - -// This struct is packed on z/OS so it can't be used directly. -type Flock_t struct { - Type int16 - Whence int16 - Start int64 - Len int64 - Pid int32 -} - -type Termios struct { - Cflag uint32 - Iflag uint32 - Lflag uint32 - Oflag uint32 - Cc [11]uint8 -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -type W_Mnth struct { - Hid [4]byte - Size int32 - Cur1 int32 //32bit pointer - Cur2 int32 //^ - Devno uint32 - _ [4]byte -} - -type W_Mntent struct { - Fstype uint32 - Mode uint32 - Dev uint32 - Parentdev uint32 - Rootino uint32 - Status byte - Ddname [9]byte - Fstname [9]byte - Fsname [45]byte - Pathlen uint32 - Mountpoint [1024]byte - Jobname [8]byte - PID int32 - Parmoffset int32 - Parmlen int16 - Owner [8]byte - Quiesceowner [8]byte - _ [38]byte -} diff --git a/vendor/golang.org/x/sys/windows/aliases.go b/vendor/golang.org/x/sys/windows/aliases.go deleted file mode 100644 index a20ebea..0000000 --- a/vendor/golang.org/x/sys/windows/aliases.go +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build windows && go1.9 -// +build windows,go1.9 - -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 deleted file mode 100644 index 115341f..0000000 --- a/vendor/golang.org/x/sys/windows/dll_windows.go +++ /dev/null @@ -1,416 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -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 LazyDLL -// with System set to true, 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 failes. -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. -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 -} - -type errString string - -func (s errString) Error() string { return string(s) } diff --git a/vendor/golang.org/x/sys/windows/empty.s b/vendor/golang.org/x/sys/windows/empty.s deleted file mode 100644 index fdbbbcd..0000000 --- a/vendor/golang.org/x/sys/windows/empty.s +++ /dev/null @@ -1,9 +0,0 @@ -// 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 !go1.12 -// +build !go1.12 - -// This file is here to allow bodyless functions with go:linkname for Go 1.11 -// and earlier (see https://golang.org/issue/23311). diff --git a/vendor/golang.org/x/sys/windows/env_windows.go b/vendor/golang.org/x/sys/windows/env_windows.go deleted file mode 100644 index 92ac05f..0000000 --- a/vendor/golang.org/x/sys/windows/env_windows.go +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2010 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// 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) - blockp := uintptr(unsafe.Pointer(block)) - for { - entry := UTF16PtrToString((*uint16)(unsafe.Pointer(blockp))) - if len(entry) == 0 { - break - } - env = append(env, entry) - blockp += 2 * (uintptr(len(entry)) + 1) - } - 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 deleted file mode 100644 index 2cd6064..0000000 --- a/vendor/golang.org/x/sys/windows/eventlog.go +++ /dev/null @@ -1,21 +0,0 @@ -// 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 -// +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 deleted file mode 100644 index 75980fd..0000000 --- a/vendor/golang.org/x/sys/windows/exec_windows.go +++ /dev/null @@ -1,178 +0,0 @@ -// 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 - } - 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 { - var commandLine string - for i := range args { - if i > 0 { - commandLine += " " - } - commandLine += EscapeArg(args[i]) - } - return 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. -func DecomposeCommandLine(commandLine string) ([]string, error) { - if len(commandLine) == 0 { - return []string{}, nil - } - var argc int32 - argv, err := CommandLineToArgv(StringToUTF16Ptr(commandLine), &argc) - if err != nil { - return nil, err - } - defer LocalFree(Handle(unsafe.Pointer(argv))) - var args []string - for _, v := range (*argv)[:argc] { - args = append(args, UTF16ToString((*v)[:])) - } - return args, nil -} - -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 deleted file mode 100644 index 6dc0920..0000000 --- a/vendor/golang.org/x/sys/windows/memory_windows.go +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index 58e0188..0000000 --- a/vendor/golang.org/x/sys/windows/mkerrors.bash +++ /dev/null @@ -1,70 +0,0 @@ -#!/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 deleted file mode 100644 index ab8924e..0000000 --- a/vendor/golang.org/x/sys/windows/mkknownfolderids.bash +++ /dev/null @@ -1,27 +0,0 @@ -#!/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 deleted file mode 100644 index 8563f79..0000000 --- a/vendor/golang.org/x/sys/windows/mksyscall.go +++ /dev/null @@ -1,10 +0,0 @@ -// 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 -// +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 deleted file mode 100644 index 9196b08..0000000 --- a/vendor/golang.org/x/sys/windows/race.go +++ /dev/null @@ -1,31 +0,0 @@ -// 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 -// +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 deleted file mode 100644 index 7bae481..0000000 --- a/vendor/golang.org/x/sys/windows/race0.go +++ /dev/null @@ -1,26 +0,0 @@ -// 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 -// +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 deleted file mode 100644 index d414ef1..0000000 --- a/vendor/golang.org/x/sys/windows/security_windows.go +++ /dev/null @@ -1,1444 +0,0 @@ -// 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" - - "golang.org/x/sys/internal/unsafeheader" -) - -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 - -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 -} - -// 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 - -// 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 = (*SECURITY_DESCRIPTOR)(unsafe.Pointer(&make([]byte, absoluteSDSize)[0])) - } - var ( - dacl *ACL - sacl *ACL - owner *SID - group *SID - ) - if daclSize > 0 { - dacl = (*ACL)(unsafe.Pointer(&make([]byte, daclSize)[0])) - } - if saclSize > 0 { - sacl = (*ACL)(unsafe.Pointer(&make([]byte, saclSize)[0])) - } - if ownerSize > 0 { - owner = (*SID)(unsafe.Pointer(&make([]byte, ownerSize)[0])) - } - if groupSize > 0 { - group = (*SID)(unsafe.Pointer(&make([]byte, groupSize)[0])) - } - err = makeAbsoluteSD(selfRelativeSD, absoluteSD, &absoluteSDSize, - dacl, &daclSize, sacl, &saclSize, owner, &ownerSize, group, &groupSize) - 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 - } - - var src []byte - h := (*unsafeheader.Slice)(unsafe.Pointer(&src)) - h.Data = unsafe.Pointer(selfRelativeSD) - h.Len = sdLen - h.Cap = sdLen - - const psize = int(unsafe.Sizeof(uintptr(0))) - - var dst []byte - h = (*unsafeheader.Slice)(unsafe.Pointer(&dst)) - alloc := make([]uintptr, (sdLen+psize-1)/psize) - h.Data = (*unsafeheader.Slice)(unsafe.Pointer(&alloc)).Data - h.Len = sdLen - h.Cap = 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 deleted file mode 100644 index f8deca8..0000000 --- a/vendor/golang.org/x/sys/windows/service.go +++ /dev/null @@ -1,247 +0,0 @@ -// 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 -// +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 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 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? diff --git a/vendor/golang.org/x/sys/windows/setupapi_windows.go b/vendor/golang.org/x/sys/windows/setupapi_windows.go deleted file mode 100644 index f812648..0000000 --- a/vendor/golang.org/x/sys/windows/setupapi_windows.go +++ /dev/null @@ -1,1425 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -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 deleted file mode 100644 index 4fc0143..0000000 --- a/vendor/golang.org/x/sys/windows/str.go +++ /dev/null @@ -1,23 +0,0 @@ -// 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 -// +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 deleted file mode 100644 index 8732cdb..0000000 --- a/vendor/golang.org/x/sys/windows/syscall.go +++ /dev/null @@ -1,105 +0,0 @@ -// 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 -// +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 deleted file mode 100644 index 3f2cbb6..0000000 --- a/vendor/golang.org/x/sys/windows/syscall_windows.go +++ /dev/null @@ -1,1811 +0,0 @@ -// 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" - "strings" - "sync" - "syscall" - "time" - "unicode/utf16" - "unsafe" - - "golang.org/x/sys/internal/unsafeheader" -) - -type Handle uintptr -type 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) { - if strings.IndexByte(s, 0) != -1 { - return nil, syscall.EINVAL - } - return utf16.Encode([]rune(s + "\x00")), nil -} - -// 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 { - for i, v := range s { - if v == 0 { - s = s[:i] - break - } - } - return string(utf16.Decode(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 string(utf16.Decode(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 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 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 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 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 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 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) (err error) = 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 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 *[8192]*[8192]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 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 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 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 GetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) -//sys SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (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 - -// 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, 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 - -// 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) { - curoffset, e := Seek(fd, 0, 1) - if e != nil { - return e - } - defer Seek(fd, curoffset, 0) - _, e = Seek(fd, length, 0) - if e != nil { - return e - } - e = SetEndOfFile(fd) - if e != nil { - return e - } - return nil -} - -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 Close(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 Close(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 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 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 - -// 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 - // 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++ - } - bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] - sa.Name = string(bytes) - 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) { - 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 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 (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) { - var u NTUnicodeString - s16, err := UTF16PtrFromString(s) - if err != nil { - return nil, err - } - RtlInitUnicodeString(&u, s16) - return &u, nil -} - -// Slice returns a uint16 slice that aliases the data in the NTUnicodeString. -func (s *NTUnicodeString) Slice() []uint16 { - var slice []uint16 - hdr := (*unsafeheader.Slice)(unsafe.Pointer(&slice)) - hdr.Data = unsafe.Pointer(s.Buffer) - hdr.Len = int(s.Length) - hdr.Cap = int(s.MaximumLength) - return slice -} - -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 { - var slice []byte - hdr := (*unsafeheader.Slice)(unsafe.Pointer(&slice)) - hdr.Data = unsafe.Pointer(s.Buffer) - hdr.Len = int(s.Length) - hdr.Cap = int(s.MaximumLength) - return slice -} - -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 - } - h := (*unsafeheader.Slice)(unsafe.Pointer(&data)) - h.Data = unsafe.Pointer(ptr) - h.Len = int(size) - h.Cap = int(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 -} diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go deleted file mode 100644 index 0c4add9..0000000 --- a/vendor/golang.org/x/sys/windows/types_windows.go +++ /dev/null @@ -1,3260 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -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_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 -) - -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 - - // 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 - - 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 - - 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 - - SHUT_RD = 0 - SHUT_WR = 1 - SHUT_RDWR = 2 - - WSADESCRIPTION_LEN = 256 - WSASYS_STATUS_LEN = 128 -) - -type WSABuf struct { - Len uint32 - Buf *byte -} - -type WSAMsg struct { - Name *syscall.RawSockaddrAny - Namelen int32 - Buffers *WSABuf - BufferCount uint32 - Control WSABuf - Flags 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 -) - -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 -) - -const GAA_FLAG_INCLUDE_PREFIX = 0x00000010 - -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 -) - -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 -) - -// 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 -) - -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 - JobObjectAssociateCompletionPortInformation = 7 - JobObjectBasicLimitInformation = 2 - JobObjectBasicUIRestrictions = 4 - JobObjectCpuRateControlInformation = 15 - JobObjectEndOfJobTimeInformation = 6 - JobObjectExtendedLimitInformation = 9 - JobObjectGroupInformation = 11 - JobObjectGroupInformationEx = 14 - JobObjectLimitViolationInformation2 = 35 - JobObjectNetRateControlInformation = 32 - JobObjectNotificationLimitInformation = 12 - JobObjectNotificationLimitInformation2 = 34 - 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 { - 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 -) diff --git a/vendor/golang.org/x/sys/windows/types_windows_386.go b/vendor/golang.org/x/sys/windows/types_windows_386.go deleted file mode 100644 index 8bce3e2..0000000 --- a/vendor/golang.org/x/sys/windows/types_windows_386.go +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -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 deleted file mode 100644 index fdddc0c..0000000 --- a/vendor/golang.org/x/sys/windows/types_windows_amd64.go +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -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 deleted file mode 100644 index 321872c..0000000 --- a/vendor/golang.org/x/sys/windows/types_windows_arm.go +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package 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 deleted file mode 100644 index fdddc0c..0000000 --- a/vendor/golang.org/x/sys/windows/types_windows_arm64.go +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -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 deleted file mode 100644 index 0cf658f..0000000 --- a/vendor/golang.org/x/sys/windows/zerrors_windows.go +++ /dev/null @@ -1,9468 +0,0 @@ -// 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 deleted file mode 100644 index 6048ac6..0000000 --- a/vendor/golang.org/x/sys/windows/zknownfolderids_windows.go +++ /dev/null @@ -1,149 +0,0 @@ -// 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 deleted file mode 100644 index 96ba855..0000000 --- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ /dev/null @@ -1,4302 +0,0 @@ -// 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") - 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") - procEnumServicesStatusExW = modadvapi32.NewProc("EnumServicesStatusExW") - procEqualSid = modadvapi32.NewProc("EqualSid") - procFreeSid = modadvapi32.NewProc("FreeSid") - 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") - procGetAdaptersAddresses = modiphlpapi.NewProc("GetAdaptersAddresses") - procGetAdaptersInfo = modiphlpapi.NewProc("GetAdaptersInfo") - procGetBestInterfaceEx = modiphlpapi.NewProc("GetBestInterfaceEx") - procGetIfEntry = modiphlpapi.NewProc("GetIfEntry") - procAssignProcessToJobObject = modkernel32.NewProc("AssignProcessToJobObject") - procCancelIo = modkernel32.NewProc("CancelIo") - procCancelIoEx = modkernel32.NewProc("CancelIoEx") - procCloseHandle = modkernel32.NewProc("CloseHandle") - 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") - 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") - procDuplicateHandle = modkernel32.NewProc("DuplicateHandle") - 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") - procGetCommTimeouts = modkernel32.NewProc("GetCommTimeouts") - procGetCommandLineW = modkernel32.NewProc("GetCommandLineW") - procGetComputerNameExW = modkernel32.NewProc("GetComputerNameExW") - procGetComputerNameW = modkernel32.NewProc("GetComputerNameW") - procGetConsoleMode = modkernel32.NewProc("GetConsoleMode") - 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") - procGetFileType = modkernel32.NewProc("GetFileType") - procGetFinalPathNameByHandleW = modkernel32.NewProc("GetFinalPathNameByHandleW") - procGetFullPathNameW = modkernel32.NewProc("GetFullPathNameW") - 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") - procGetNamedPipeHandleStateW = modkernel32.NewProc("GetNamedPipeHandleStateW") - procGetNamedPipeInfo = modkernel32.NewProc("GetNamedPipeInfo") - 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") - 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") - procResetEvent = modkernel32.NewProc("ResetEvent") - procResumeThread = modkernel32.NewProc("ResumeThread") - procSetCommTimeouts = modkernel32.NewProc("SetCommTimeouts") - procSetConsoleCursorPosition = modkernel32.NewProc("SetConsoleCursorPosition") - procSetConsoleMode = modkernel32.NewProc("SetConsoleMode") - 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") - 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") - 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") - 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") - 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") - procGetShellWindow = moduser32.NewProc("GetShellWindow") - procGetWindowThreadProcessId = moduser32.NewProc("GetWindowThreadProcessId") - procIsWindow = moduser32.NewProc("IsWindow") - procIsWindowUnicode = moduser32.NewProc("IsWindowUnicode") - procIsWindowVisible = moduser32.NewProc("IsWindowVisible") - procMessageBoxW = moduser32.NewProc("MessageBoxW") - procCreateEnvironmentBlock = moduserenv.NewProc("CreateEnvironmentBlock") - procDestroyEnvironmentBlock = moduserenv.NewProc("DestroyEnvironmentBlock") - procGetUserProfileDirectoryW = moduserenv.NewProc("GetUserProfileDirectoryW") - procGetFileVersionInfoSizeW = modversion.NewProc("GetFileVersionInfoSizeW") - procGetFileVersionInfoW = modversion.NewProc("GetFileVersionInfoW") - procVerQueryValueW = modversion.NewProc("VerQueryValueW") - procWinVerifyTrustEx = modwintrust.NewProc("WinVerifyTrustEx") - procFreeAddrInfoW = modws2_32.NewProc("FreeAddrInfoW") - procGetAddrInfoW = modws2_32.NewProc("GetAddrInfoW") - procWSACleanup = modws2_32.NewProc("WSACleanup") - procWSAEnumProtocolsW = modws2_32.NewProc("WSAEnumProtocolsW") - procWSAGetOverlappedResult = modws2_32.NewProc("WSAGetOverlappedResult") - procWSAIoctl = modws2_32.NewProc("WSAIoctl") - 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 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 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 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 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 CloseHandle(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procCloseHandle.Addr(), 1, uintptr(handle), 0, 0) - if r1 == 0 { - err = errnoErr(e1) - } - 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 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 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 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 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 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 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 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 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 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 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) (err error) { - r1, _, e1 := syscall.Syscall(procGetStartupInfoW.Addr(), 1, uintptr(unsafe.Pointer(startupInfo)), 0, 0) - if r1 == 0 { - err = errnoErr(e1) - } - 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 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 ResetEvent(event Handle) (err error) { - r1, _, e1 := syscall.Syscall(procResetEvent.Addr(), 1, uintptr(event), 0, 0) - if r1 == 0 { - err = errnoErr(e1) - } - 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 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 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 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 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 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 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 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, bytesReturned *uint32) (err error) { - var _p0 *uint32 - if len(processIds) > 0 { - _p0 = &processIds[0] - } - r1, _, e1 := syscall.Syscall(procEnumProcesses.Addr(), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(processIds)), 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 *[8192]*[8192]uint16, err error) { - r0, _, e1 := syscall.Syscall(procCommandLineToArgvW.Addr(), 2, uintptr(unsafe.Pointer(cmd)), uintptr(unsafe.Pointer(argc)), 0) - argv = (*[8192]*[8192]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 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 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 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 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 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 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/gopkg.in/hlandau/easymetric.v1/cexp/cexp.go b/vendor/gopkg.in/hlandau/easymetric.v1/cexp/cexp.go deleted file mode 100644 index fd6d16a..0000000 --- a/vendor/gopkg.in/hlandau/easymetric.v1/cexp/cexp.go +++ /dev/null @@ -1,97 +0,0 @@ -package cexp - -import "gopkg.in/hlandau/measurable.v1" -import "sync/atomic" - -// Counter - -type Counter struct { - name string - value int64 -} - -func (c *Counter) MsName() string { - return c.name -} - -func (c *Counter) MsInt64() int64 { - return atomic.LoadInt64(&c.value) -} - -func (c *Counter) Get() int64 { - return c.MsInt64() -} - -// v must be non-negative. -func (c *Counter) Add(v int64) { - atomic.AddInt64(&c.value, v) -} - -func (c *Counter) Inc() { - c.Add(1) -} - -func (c *Counter) MsType() measurable.Type { - return measurable.CounterType -} - -func NewCounter(name string) *Counter { - c := &Counter{ - name: name, - } - - measurable.Register(c) - return c -} - -// Gauge - -type Gauge struct { - name string - value int64 -} - -func (c *Gauge) MsName() string { - return c.name -} - -func (c *Gauge) MsInt64() int64 { - return atomic.LoadInt64(&c.value) -} - -func (c *Gauge) Add(v int64) { - atomic.AddInt64(&c.value, v) -} - -func (c *Gauge) Sub(v int64) { - c.Add(-v) -} - -func (c *Gauge) Set(v int64) { - atomic.StoreInt64(&c.value, v) -} - -func (c *Gauge) Get() int64 { - return c.MsInt64() -} - -func (c *Gauge) Inc() { - c.Add(1) -} - -func (c *Gauge) Dec() { - c.Add(-1) -} - -func (c *Gauge) MsType() measurable.Type { - return measurable.GaugeType -} - -func NewGauge(name string) *Gauge { - c := &Gauge{ - name: name, - } - - measurable.Register(c) - return c -} diff --git a/vendor/gopkg.in/hlandau/measurable.v1/README.md b/vendor/gopkg.in/hlandau/measurable.v1/README.md deleted file mode 100644 index f2d582d..0000000 --- a/vendor/gopkg.in/hlandau/measurable.v1/README.md +++ /dev/null @@ -1,82 +0,0 @@ -Measurable: The useless Go metric registration package that doesn't do anything -=============================================================================== - -[![GoDoc](https://godoc.org/gopkg.in/hlandau/measurable.v1?status.svg)](https://godoc.org/gopkg.in/hlandau/measurable.v1) - -Measurable is a Go library for managing the registration of metrics such as -counters and gauges, no matter how that metric data is eventually consumed. - -The most noteworthy feature of measurable is that it doesn't do anything. It -contains no functionality for providing metric data to any external service, -and it contains no actual metric implementations. - -The purpose of measurable is to act as an [integration -nexus](https://www.devever.net/~hl/nexuses), essentially a matchmaker between -metric sources and metric consumers. This creates the important feature that -your application's metrics can be expressed completely independently of *how* -those metrics are exported. - -Measurable doesn't implement any metric or metric export logic because it -strives to be a neutral intermediary, which abstracts the interface between -metrics and metric exporters. - -**Import as:** `gopkg.in/hlandau/measurable.v1` - -Measurable ----------- - -A Measurable is an object that represents some metric. It is obliged only to -implement the following interface: - -```go -type Measurable interface { - MsName() string - MsType() Type -} -``` - -Measurable is designed around interface upgrades. If you want to actually -do anything with a Measurable, you must attempt to cast it to an interface -with the methods you need. A Measurable is not obliged to implement any -interface besides Measurable, but almost always will. - -Here are some common interfaces implemented by Measurables, in descending order -of importance: - - - `MsName() string` — get the Measurable name. - - `MsType() Type` — get the Measurable type. - - `MsInt64() int64` — get the Measurable as an int64. - - `String() string` — the standard Go `String()` interface. - -All Measurables should implement `MsName() string` and `MsType() Type`. - -Measurable-specific methods should always be prefixed by `Ms` so it is clear -they are intended for consumption by Measurable consumers. - -`MsName`, `MsType` and `MsInt64` should suffice for most consumers of Counter -and Gauge metric types. - -Metrics should be named in lowercase using dots to create a hierarchy and -dashes to separate words, e.g. `someserver.http.request-count`. These metric -names may be transmuted by consumers as necessary for some graphing systems, -such as Prometheus (which allows only underscores). - -Standard Bindings ------------------ - -For a package which makes it easy to register and consume measurables, see the -[easymetric](https://github.com/hlandau/easymetric) package. - -Of course, nothing requires you to use the easymetric package. You are free to escew it and make your own. - -Background Reading ------------------- - - - [On Nexuses](https://www.devever.net/~hl/nexuses) - - See also: [Configurable](https://github.com/hlandau/configurable) - -Licence -------- - - © 2015 Hugo Landau MIT License - diff --git a/vendor/gopkg.in/hlandau/measurable.v1/measurable.go b/vendor/gopkg.in/hlandau/measurable.v1/measurable.go deleted file mode 100644 index 4399d0a..0000000 --- a/vendor/gopkg.in/hlandau/measurable.v1/measurable.go +++ /dev/null @@ -1,189 +0,0 @@ -// Package measurable provides a functionality-free integration nexus for -// metric registration. -// -// Measurable is a Go package for connecting service metrics and metric consumers. -// -// The most noteworthy feature of measurable is that it doesn't do anything. -// It contains no functionality for defining or exporting metrics. -// -// The purpose of measurable is to act as an integration nexus -// (https://www.devever.net/~hl/nexuses), essentially a matchmaker between -// application metrics and metric consumers. This creates the important feature -// that your application's metrics can be defined completely independently of -// *how* those metrics are defined. -// -// Measurable doesn't implement any metric definition or export logic because it -// strives to be a neutral intermediary, which abstracts the interface between -// measurables and measurable consumers -// -// Pursuant to this, package measurable is this and only this: an interface -// Measurable which all metrics must implement, and a facility for registering -// Measurables and visiting them. -package measurable // import "gopkg.in/hlandau/measurable.v1" - -import "sync" -import "fmt" - -// Measurable is the interface which must be implemented by any metric item to -// be used with package measurable. In the current version, v1, it contains -// only the MsName() and MsType() methods. All other functionality must be -// obtained by interface upgrades. -type Measurable interface { - // Returns the name of the metric. Names should be in the style - // "alpha.beta.gamma-delta", for example "foo.http.requests.count". That is, - // names should be lowercase, should express a hierarchy separated by dots, - // and have words separated by dashes. - // - // Some Measurable consumers may mutate these names to satisfy naming - // restrictions applied by some graphing systems. - MsName() string - - // Return the Measurable type. You can, of course, invent your own Measurable - // types, though consumers won't necessarily know what to do with them. - MsType() Type -} - -var measurablesMutex sync.RWMutex -var measurables = map[string]Measurable{} - -// Registers a top-level Configurable. -func Register(measurable Measurable) { - measurablesMutex.Lock() - defer measurablesMutex.Unlock() - - if measurable == nil { - panic("cannot register nil measurable") - } - - name := measurable.MsName() - if name == "" { - panic("measurable cannot have empty name") - } - - _, exists := measurables[name] - if exists { - panic(fmt.Sprintf("A measurable with the same name already exists: %s", name)) - } - - measurables[name] = measurable - callRegistrationHooks(measurable, RegisterEvent) -} - -func Unregister(measurableName string) { - measurablesMutex.Lock() - defer measurablesMutex.Unlock() - - measurable, ok := measurables[measurableName] - if !ok { - return - } - - callRegistrationHooks(measurable, UnregisterEvent) - delete(measurables, measurableName) -} - -func Get(measurableName string) Measurable { - measurablesMutex.RLock() - defer measurablesMutex.RUnlock() - - return measurables[measurableName] -} - -// Visits all registered top-level Measurables. -// -// Returning a non-nil error short-circuits the iteration process and returns -// that error. -func Visit(do func(measurable Measurable) error) error { - measurablesMutex.Lock() - defer measurablesMutex.Unlock() - - for _, measurable := range measurables { - err := do(measurable) - if err != nil { - return err - } - } - - return nil -} - -// Represents a measurable type. -type Type uint32 - -const ( - // A CounterType Measurable represents a non-negative integral value - // that monotonously increases. It must implement `MsInt64() int64`. - CounterType Type = 0x436E7472 - - // A GaugeType Measurable represents an integral value that varies over - // time. It must implement `MsInt64() int64`. - GaugeType = 0x47617567 -) - -// Registration hooks. -type HookEvent int - -const ( - // This event is issued when a measurable is registered. - RegisterEvent HookEvent = iota - - // This event is issued when a registration hook is registered. It is issued - // for every measurable which has already been registered. - RegisterCatchupEvent - - // This event is issued when a measurable is unregistered. - UnregisterEvent -) - -type HookFunc func(measurable Measurable, hookEvent HookEvent) - -var hooksMutex sync.RWMutex -var hooks = map[interface{}]HookFunc{} - -// Register for notifications on metric registration. The key must be usable as -// a key in a map and identifies the hook. No other hook with the same key must -// already exist. -// -// NOTE: The hook will be called for all registrations which already exist. -// This ensures that no registrations are missed in a threadsafe manner. -// For these calls, the event will be EventRegisterCatchup. -// -// The hook must not register or unregister registration hooks or metrics. -func RegisterHook(key interface{}, hook HookFunc) { - measurablesMutex.RLock() - defer measurablesMutex.RUnlock() - - registerHook(key, hook) - - for _, m := range measurables { - hook(m, RegisterCatchupEvent) - } -} - -func registerHook(key interface{}, hook HookFunc) { - hooksMutex.Lock() - defer hooksMutex.Unlock() - - _, exists := hooks[key] - if exists { - panic(fmt.Sprintf("A metric registration hook with the same key already exists: %+v", key)) - } - - hooks[key] = hook -} - -// Unregister an existing hook. -func UnregisterHook(key interface{}) { - hooksMutex.Lock() - defer hooksMutex.Unlock() - delete(hooks, key) -} - -func callRegistrationHooks(measurable Measurable, event HookEvent) { - hooksMutex.RLock() - defer hooksMutex.RUnlock() - - for _, v := range hooks { - v(measurable, event) - } -} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/COPYING b/vendor/gopkg.in/hlandau/passlib.v1/COPYING deleted file mode 100644 index d2aa62a..0000000 --- a/vendor/gopkg.in/hlandau/passlib.v1/COPYING +++ /dev/null @@ -1,39 +0,0 @@ -passlib is a Golang password verification library strongly inspired by and -derived from Python passlib (). The BSD -license is preserved and extended to all new code. - -License for Passlib -=================== -Passlib is (c) `Assurance Technologies `_, -and is released under the `BSD license `_:: - - Passlib - Copyright (c) 2008-2012 Assurance Technologies, LLC. - All rights reserved. - - 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 Assurance Technologies, nor the names of the - 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/gopkg.in/hlandau/passlib.v1/abstract/compare.go b/vendor/gopkg.in/hlandau/passlib.v1/abstract/compare.go deleted file mode 100644 index d336f13..0000000 --- a/vendor/gopkg.in/hlandau/passlib.v1/abstract/compare.go +++ /dev/null @@ -1,11 +0,0 @@ -package abstract - -import "crypto/subtle" - -// Compares two strings (typicaly password hashes) in a secure, constant-time -// fashion. Returns true iff they are equal. -func SecureCompare(a, b string) bool { - ab := []byte(a) - bb := []byte(b) - return subtle.ConstantTimeCompare(ab, bb) == 1 -} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/abstract/errors.go b/vendor/gopkg.in/hlandau/passlib.v1/abstract/errors.go deleted file mode 100644 index 3298f82..0000000 --- a/vendor/gopkg.in/hlandau/passlib.v1/abstract/errors.go +++ /dev/null @@ -1,15 +0,0 @@ -// Package abstract contains the abstract description of the Scheme interface, -// plus supporting error definitions. -package abstract - -import "fmt" - -// Indicates that password verification failed because the provided password -// does not match the provided hash. -var ErrInvalidPassword = fmt.Errorf("invalid password") - -// Indicates that password verification is not possible because the hashing -// scheme used by the hash provided is not supported. -var ErrUnsupportedScheme = fmt.Errorf("unsupported scheme") - -// © 2014 Hugo Landau MIT License diff --git a/vendor/gopkg.in/hlandau/passlib.v1/abstract/scheme.go b/vendor/gopkg.in/hlandau/passlib.v1/abstract/scheme.go deleted file mode 100644 index 3589022..0000000 --- a/vendor/gopkg.in/hlandau/passlib.v1/abstract/scheme.go +++ /dev/null @@ -1,34 +0,0 @@ -package abstract - -// The Scheme interface provides an abstract interface to an implementation -// of a particular password hashing scheme. The Scheme generates password -// hashes from passwords, verifies passwords using password hashes, randomly -// generates new stubs and can determines whether it recognises a given -// stub or hash. It may also decide to issue upgrades. -type Scheme interface { - // Hashes a plaintext UTF-8 password using a modular crypt stub. Returns the - // hashed password in modular crypt format. - // - // A modular crypt stub is a prefix of a hash in modular crypt format which - // expresses all necessary configuration information, such as salt and - // iteration count. For example, for sha256-crypt, a valid stub would be: - // - // $5$rounds=6000$salt - // - // A full modular crypt hash may also be passed as the stub, in which case - // the hash is ignored. - Hash(password string) (string, error) - - // Verifies a plaintext UTF-8 password using a modular crypt hash. Returns - // an error if the inputs are malformed or the password does not match. - Verify(password, hash string) (err error) - - // Returns true iff this crypter supports the given stub. - SupportsStub(stub string) bool - - // Returns true iff this stub needs an update. - NeedsUpdate(stub string) bool - - // Make a stub with the configured defaults. The salt is generated randomly. - //MakeStub() (string, error) -} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/default.go b/vendor/gopkg.in/hlandau/passlib.v1/default.go deleted file mode 100644 index d778584..0000000 --- a/vendor/gopkg.in/hlandau/passlib.v1/default.go +++ /dev/null @@ -1,141 +0,0 @@ -package passlib - -import ( - "fmt" - "gopkg.in/hlandau/passlib.v1/abstract" - "gopkg.in/hlandau/passlib.v1/hash/argon2" - "gopkg.in/hlandau/passlib.v1/hash/bcrypt" - "gopkg.in/hlandau/passlib.v1/hash/bcryptsha256" - "gopkg.in/hlandau/passlib.v1/hash/pbkdf2" - "gopkg.in/hlandau/passlib.v1/hash/scrypt" - "gopkg.in/hlandau/passlib.v1/hash/sha2crypt" - "time" -) - -// This is the first and default set of defaults used by passlib. It prefers -// scrypt-sha256. It is now obsolete. -const Defaults20160922 = "20160922" - -// This is the most up-to-date set of defaults preferred by passlib. It prefers -// Argon2i. You must opt into it by calling UseDefaults at startup. -const Defaults20180601 = "20180601" - -// This value, when passed to UseDefaults, causes passlib to always use the -// very latest set of defaults. DO NOT use this unless you are sure that -// opportunistic hash upgrades will not cause breakage for your application -// when future versions of passlib are released. See func UseDefaults. -const DefaultsLatest = "latest" - -// Default schemes as of 2016-09-22. -var defaultSchemes20160922 = []abstract.Scheme{ - scrypt.SHA256Crypter, - argon2.Crypter, - sha2crypt.Crypter512, - sha2crypt.Crypter256, - bcryptsha256.Crypter, - pbkdf2.SHA512Crypter, - pbkdf2.SHA256Crypter, - bcrypt.Crypter, - pbkdf2.SHA1Crypter, -} - -// Default schemes as of 2018-06-01. -var defaultSchemes20180601 = []abstract.Scheme{ - argon2.Crypter, - scrypt.SHA256Crypter, - sha2crypt.Crypter512, - sha2crypt.Crypter256, - bcryptsha256.Crypter, - pbkdf2.SHA512Crypter, - pbkdf2.SHA256Crypter, - bcrypt.Crypter, - pbkdf2.SHA1Crypter, -} - -// The default schemes, most preferred first. The first scheme will be used to -// hash passwords, and any of the schemes may be used to verify existing -// passwords. The contents of this value may change with subsequent releases. -// -// If you want to change this, set DefaultSchemes to a slice to an -// abstract.Scheme array of your own construction, rather than mutating the -// array the slice points to. -// -// To see the default schemes used in the current release of passlib, see -// default.go. See also the UseDefaults function for more information on how -// the list of default schemes is determined. The default value of -// DefaultSchemes (the default defaults) won't change; you need to call -// UseDefaults to allow your application to upgrade to newer hashing schemes -// (or set DefaultSchemes manually, or create a custom context with its own -// schemes set). -var DefaultSchemes []abstract.Scheme - -func init() { - DefaultSchemes = defaultSchemes20160922 -} - -// It is strongly recommended that you call this function like this before using passlib: -// -// passlib.UseDefaults("YYYYMMDD") -// -// where YYYYMMDD is a date. This will be used to select the preferred scheme -// to use. If you do not call UseDefaults, the preferred scheme (the first item -// in the default schemes list) current as of 2016-09-22 will always be used, -// meaning that upgrade will not occur even though better schemes are now -// available. -// -// Note that even if you don't call this function, new schemes will still be -// added to DefaultSchemes over time as non-initial values (items not at index -// 0), so servers will always, by default, be able to validate all schemes -// which passlib supports at any given time. -// -// The reason you must call this function is as follows: If passlib is deployed -// as part of a web application in a multi-server deployment, and passlib is -// updated, and the new version of that application with the updated passlib is -// deployed, that upgrade process is unlikely to be instantaneous. Old versions -// of the web application may continue to run on some servers. If merely -// upgrading passlib caused password hashes to be upgraded to the newer scheme -// on login, the older daemons may not be able to validate these passwords and -// users may have issues logging in. Although this can be ameliorated to some -// extent by introducing a new scheme to passlib, waiting some months, and only -// then making this the default, this could still cause issued if passlib is -// only updated very occasionally. -// -// Thus, you should update your call to UseDefaults only when all servers have -// been upgraded, and it is thus guaranteed that they will all be able to -// verify the new scheme. Making this value loadable from a configuration file -// is recommended. -// -// If you are using a single-server configuration, you can use the special -// value "latest" here (or, equivalently, a date far into the future), which -// will always use the most preferred scheme. This is hazardous in a -// multi-server environment. -// -// The constants beginning 'Defaults' in this package document dates -// which are meaningful to this function. The constant values they are equal to -// will never change, so there is no need to use them instead of string -// literals, although you may if you wish; they are intended mainly as -// documentation as to the significance of various dates. -// -// Example for opting in to the latest set of defaults: -// -// passlib.UseDefaults(passlib.Defaults20180601) -// -func UseDefaults(date string) error { - if date == "latest" { - DefaultSchemes = defaultSchemes20180601 - return nil - } - - t, err := time.ParseInLocation("20060102", date, time.UTC) - if err != nil { - return fmt.Errorf("invalid time string passed to passlib.UseDefaults: %q", date) - } - - if !t.Before(time.Date(2016, 9, 22, 0, 0, 0, 0, time.UTC)) { - DefaultSchemes = defaultSchemes20180601 - return nil - } - - DefaultSchemes = defaultSchemes20160922 - return nil -} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/argon2/argon2.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/argon2/argon2.go deleted file mode 100644 index 63629ac..0000000 --- a/vendor/gopkg.in/hlandau/passlib.v1/hash/argon2/argon2.go +++ /dev/null @@ -1,115 +0,0 @@ -// Package argon2 implements the argon2 password hashing mechanism, wrapped in -// the argon2 encoded format. -package argon2 - -import ( - "crypto/rand" - "encoding/base64" - "fmt" - "strings" - - "golang.org/x/crypto/argon2" - "gopkg.in/hlandau/passlib.v1/abstract" - "gopkg.in/hlandau/passlib.v1/hash/argon2/raw" -) - -// An implementation of Scheme performing argon2 hashing. -// -// Uses the recommended values for time, memory and threads defined in raw. -var Crypter abstract.Scheme - -const saltLength = 16 - -func init() { - Crypter = New( - raw.RecommendedTime, - raw.RecommendedMemory, - raw.RecommendedThreads, - ) -} - -// Returns an implementation of Scheme implementing argon2 -// with the specified parameters. -func New(time, memory uint32, threads uint8) abstract.Scheme { - return &scheme{ - time: time, - memory: memory, - threads: threads, - } -} - -type scheme struct { - time, memory uint32 - threads uint8 -} - -func (c *scheme) SetParams(time, memory uint32, threads uint8) error { - c.time = time - c.memory = memory - c.threads = threads - return nil -} - -func (c *scheme) SupportsStub(stub string) bool { - return strings.HasPrefix(stub, "$argon2i$") -} - -func (c *scheme) Hash(password string) (string, error) { - - stub, err := c.makeStub() - if err != nil { - return "", err - } - - _, newHash, _, _, _, _, _, err := c.hash(password, stub) - return newHash, err -} - -func (c *scheme) Verify(password, hash string) (err error) { - - _, newHash, _, _, _, _, _, err := c.hash(password, hash) - if err == nil && !abstract.SecureCompare(hash, newHash) { - err = abstract.ErrInvalidPassword - } - - return -} - -func (c *scheme) NeedsUpdate(stub string) bool { - salt, _, version, time, memory, threads, err := raw.Parse(stub) - if err != nil { - return false // ... - } - - return c.needsUpdate(salt, version, time, memory, threads) -} - -func (c *scheme) needsUpdate(salt []byte, version int, time, memory uint32, threads uint8) bool { - return len(salt) < saltLength || version < argon2.Version || time < c.time || memory < c.memory || threads < c.threads -} - -func (c *scheme) hash(password, stub string) (oldHashRaw []byte, newHash string, salt []byte, version int, memory, time uint32, threads uint8, err error) { - - salt, oldHashRaw, version, time, memory, threads, err = raw.Parse(stub) - if err != nil { - return - } - - return oldHashRaw, raw.Argon2(password, salt, time, memory, threads), salt, version, memory, time, threads, nil -} - -func (c *scheme) makeStub() (string, error) { - buf := make([]byte, saltLength) - _, err := rand.Read(buf) - if err != nil { - return "", err - } - - salt := base64.RawStdEncoding.EncodeToString(buf) - - return fmt.Sprintf("$argon2i$v=%d$m=%d,t=%d,p=%d$%s$", argon2.Version, c.memory, c.time, c.threads, salt), nil -} - -func (c *scheme) String() string { - return fmt.Sprintf("argon2(%d,%d,%d,%d)", argon2.Version, c.memory, c.time, c.threads) -} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/argon2/raw/argon2.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/argon2/raw/argon2.go deleted file mode 100644 index 47a8dde..0000000 --- a/vendor/gopkg.in/hlandau/passlib.v1/hash/argon2/raw/argon2.go +++ /dev/null @@ -1,186 +0,0 @@ -// Package raw provides a raw implementation of the modular-crypt-wrapped Argon2i primitive. -package raw - -import ( - "encoding/base64" - "fmt" - "golang.org/x/crypto/argon2" - "strconv" - "strings" -) - -// The current recommended time value for interactive logins. -const RecommendedTime uint32 = 4 - -// The current recommended memory for interactive logins. -const RecommendedMemory uint32 = 32 * 1024 - -// The current recommended number of threads for interactive logins. -const RecommendedThreads uint8 = 4 - -// Wrapper for golang.org/x/crypto/argon2 implementing a sensible -// hashing interface. -// -// password should be a UTF-8 plaintext password. -// salt should be a random salt value in binary form. -// -// Time, memory, and threads are parameters to argon2. -// -// Returns an argon2 encoded hash. -func Argon2(password string, salt []byte, time, memory uint32, threads uint8) string { - passwordb := []byte(password) - - hash := argon2.Key(passwordb, salt, time, memory, threads, 32) - - hstr := base64.RawStdEncoding.EncodeToString(hash) - sstr := base64.RawStdEncoding.EncodeToString(salt) - - return fmt.Sprintf("$argon2i$v=%d$m=%d,t=%d,p=%d$%s$%s", argon2.Version, memory, time, threads, sstr, hstr) -} - -// Indicates that a password hash or stub is invalid. -var ErrInvalidStub = fmt.Errorf("invalid argon2 password stub") - -// Indicates that a key-value pair in the configuration part is malformed. -var ErrInvalidKeyValuePair = fmt.Errorf("invalid argon2 key-value pair") - -// Indicates that the version part had the wrong number of parameters. -var ErrParseVersion = fmt.Errorf("version section has wrong number of parameters") - -// Indicates that the hash config part had the wrong number of parameters. -var ErrParseConfig = fmt.Errorf("hash config section has wrong number of parameters") - -// Indicates that the version parameter ("v") was missing in the version part, -// even though it is required. -var ErrMissingVersion = fmt.Errorf("version parameter (v) is missing") - -// Indicates that the memory parameter ("m") was mossing in the hash config -// part, even though it is required. -var ErrMissingMemory = fmt.Errorf("memory parameter (m) is missing") - -// Indicates that the time parameter ("t") was mossing in the hash config part, -// even though it is required. -var ErrMissingTime = fmt.Errorf("time parameter (t) is missing") - -// Indicates that the parallelism parameter ("p") was mossing in the hash config -// part, even though it is required. -var ErrMissingParallelism = fmt.Errorf("parallelism parameter (p) is missing") - -// Parses an argon2 encoded hash. -// -// The format is as follows: -// -// $argon2i$v=version$m=memory,t=time,p=threads$salt$hash // hash -// $argon2i$v=version$m=memory,t=time,p=threads$salt // stub -// -func Parse(stub string) (salt, hash []byte, version int, time, memory uint32, parallelism uint8, err error) { - if len(stub) < 26 || !strings.HasPrefix(stub, "$argon2i$") { - err = ErrInvalidStub - return - } - - // $argon2i$ v=version$m=memory,t=time,p=threads$salt-base64$hash-base64 - parts := strings.Split(stub[9:], "$") - - // version-params$hash-config-params$salt[$hash] - if len(parts) < 3 || len(parts) > 4 { - err = ErrInvalidStub - return - } - - // Parse the first configuration part, the version parameters. - versionParams, err := parseKeyValuePair(parts[0]) - if err != nil { - return - } - - // Must be exactly one parameter in the version part. - if len(versionParams) != 1 { - err = ErrParseVersion - return - } - - // It must be "v". - val, ok := versionParams["v"] - if !ok { - err = ErrMissingVersion - return - } - - version = int(val) - - // Parse the second configuration part, the hash config parameters. - hashParams, err := parseKeyValuePair(parts[1]) - if err != nil { - return - } - - // It must have exactly three parameters. - if len(hashParams) != 3 { - err = ErrParseConfig - return - } - - // Memory parameter. - val, ok = hashParams["m"] - if !ok { - err = ErrMissingMemory - return - } - - memory = uint32(val) - - // Time parameter. - val, ok = hashParams["t"] - if !ok { - err = ErrMissingTime - return - } - - time = uint32(val) - - // Parallelism parameter. - val, ok = hashParams["p"] - if !ok { - err = ErrMissingParallelism - return - } - - parallelism = uint8(val) - - // Decode salt. - salt, err = base64.RawStdEncoding.DecodeString(parts[2]) - if err != nil { - return - } - - // Decode hash if present. - if len(parts) >= 4 { - hash, err = base64.RawStdEncoding.DecodeString(parts[3]) - } - - return -} - -func parseKeyValuePair(pairs string) (result map[string]uint64, err error) { - result = map[string]uint64{} - - parameterParts := strings.Split(pairs, ",") - - for _, parameter := range parameterParts { - parts := strings.SplitN(parameter, "=", 2) - if len(parts) != 2 { - err = ErrInvalidKeyValuePair - return - } - - parsedi, err := strconv.ParseUint(parts[1], 10, 32) - if err != nil { - return result, err - } - - result[parts[0]] = parsedi - } - - return result, nil -} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/bcrypt/bcrypt.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/bcrypt/bcrypt.go deleted file mode 100644 index fbcc38d..0000000 --- a/vendor/gopkg.in/hlandau/passlib.v1/hash/bcrypt/bcrypt.go +++ /dev/null @@ -1,72 +0,0 @@ -// Package bcrypt implements the bcrypt password hashing mechanism. -// -// Please note that bcrypt truncates passwords to 72 characters in length. Consider using -// a more modern hashing scheme such as scrypt or sha-crypt. If you must use bcrypt, -// consider using bcrypt-sha256 instead. -package bcrypt - -import "golang.org/x/crypto/bcrypt" -import "gopkg.in/hlandau/passlib.v1/abstract" -import "fmt" - -// An implementation of Scheme implementing bcrypt. -// -// Uses RecommendedCost. -var Crypter abstract.Scheme - -// The recommended cost for bcrypt. This may change with subsequent releases. -const RecommendedCost = 12 - -// bcrypt.DefaultCost is a bit low (10), so use 12 instead. - -func init() { - Crypter = New(RecommendedCost) -} - -// Create a new scheme implementing bcrypt. The recommended cost is RecommendedCost. -func New(cost int) abstract.Scheme { - return &scheme{ - Cost: cost, - } -} - -type scheme struct { - Cost int -} - -func (s *scheme) SupportsStub(stub string) bool { - return len(stub) >= 3 && stub[0] == '$' && stub[1] == '2' && - (stub[2] == '$' || (len(stub) >= 4 && stub[3] == '$' && - (stub[2] == 'a' || stub[2] == 'b' || stub[2] == 'y'))) -} - -func (s *scheme) Hash(password string) (string, error) { - h, err := bcrypt.GenerateFromPassword([]byte(password), s.Cost) - if err != nil { - return "", err - } - - return string(h), nil -} - -func (s *scheme) Verify(password, hash string) error { - err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password)) - if err == bcrypt.ErrMismatchedHashAndPassword { - err = abstract.ErrInvalidPassword - } - - return err -} - -func (s *scheme) NeedsUpdate(stub string) bool { - cost, err := bcrypt.Cost([]byte(stub)) - if err != nil { - return false - } - - return cost < s.Cost -} - -func (s *scheme) String() string { - return fmt.Sprintf("bcrypt(%d)", s.Cost) -} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/bcryptsha256/bcryptsha256.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/bcryptsha256/bcryptsha256.go deleted file mode 100644 index e11d083..0000000 --- a/vendor/gopkg.in/hlandau/passlib.v1/hash/bcryptsha256/bcryptsha256.go +++ /dev/null @@ -1,96 +0,0 @@ -// Package bcryptsha256 implements bcrypt with a SHA256 prehash in a format that is compatible with Python passlib's equivalent bcrypt-sha256 scheme. -// -// This is preferred over bcrypt because the prehash essentially renders bcrypt's password length -// limitation irrelevant; although of course it is less compatible. -package bcryptsha256 - -import "gopkg.in/hlandau/passlib.v1/abstract" -import "gopkg.in/hlandau/passlib.v1/hash/bcrypt" -import "encoding/base64" -import "crypto/sha256" -import "strings" -import "fmt" - -type scheme struct { - underlying abstract.Scheme - cost int -} - -// An implementation of Scheme implementing Python passlib's `$bcrypt-sha256$` -// bcrypt variant. This is bcrypt with a SHA256 prehash, which removes bcrypt's -// password length limitation. -var Crypter abstract.Scheme - -// The recommended cost for bcrypt-sha256. This may change with subsequent releases. -const RecommendedCost = bcrypt.RecommendedCost - -func init() { - Crypter = New(bcrypt.RecommendedCost) -} - -// Instantiates a new Scheme implementing bcrypt with the given cost. -// -// The recommended cost is RecommendedCost. -func New(cost int) abstract.Scheme { - return &scheme{ - underlying: bcrypt.New(cost), - cost: cost, - } -} - -func (s *scheme) Hash(password string) (string, error) { - p := s.prehash(password) - h, err := s.underlying.Hash(p) - if err != nil { - return "", err - } - - return mangle(h), nil -} - -func (s *scheme) Verify(password, hash string) error { - p := s.prehash(password) - return s.underlying.Verify(p, demangle(hash)) -} - -func (s *scheme) prehash(password string) string { - h := sha256.New() - h.Write([]byte(password)) - v := base64.StdEncoding.EncodeToString(h.Sum(nil)) - return v -} - -func (s *scheme) SupportsStub(stub string) bool { - return strings.HasPrefix(stub, "$bcrypt-sha256$") && s.underlying.SupportsStub(demangle(stub)) -} - -func (s *scheme) NeedsUpdate(stub string) bool { - return s.underlying.NeedsUpdate(demangle(stub)) -} - -func (s *scheme) String() string { - return fmt.Sprintf("bcrypt-sha256(%d)", s.cost) -} - -func demangle(stub string) string { - if strings.HasPrefix(stub, "$bcrypt-sha256$2") { - parts := strings.Split(stub[15:], "$") - // 0: 2a,12 - // 1: salt - // 2: hash - parts0 := strings.Split(parts[0], ",") - return "$" + parts0[0] + "$" + fmt.Sprintf("%02s", parts0[1]) + "$" + parts[1] + parts[2] - } else { - return stub - } -} - -func mangle(hash string) string { - parts := strings.Split(hash[1:], "$") - // 0: 2a - // 1: rounds - // 2: salt + hash - salt := parts[2][0:22] - h := parts[2][22:] - return "$bcrypt-sha256$" + parts[0] + "," + parts[1] + "$" + salt + "$" + h -} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/pbkdf2.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/pbkdf2.go deleted file mode 100644 index 8037bb1..0000000 --- a/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/pbkdf2.go +++ /dev/null @@ -1,94 +0,0 @@ -// Package pbkdf2 implements a modular crypt format for PBKDF2-SHA1, -// PBKDF2-SHA256 and PBKDF-SHA512. -// -// The format is the same as that used by Python's passlib and is compatible. -package pbkdf2 - -import ( - "crypto/rand" - "crypto/sha1" - "crypto/sha256" - "crypto/sha512" - "fmt" - "gopkg.in/hlandau/passlib.v1/abstract" - "gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw" - "hash" - "strings" -) - -// An implementation of Scheme implementing a number of PBKDF2 modular crypt -// formats used by Python's passlib ($pbkdf2$, $pbkdf2-sha256$, -// $pbkdf2-sha512$). -// -// Uses RecommendedRounds. -// -// WARNING: SHA1 should not be used for new applications under any -// circumstances. It should be used for legacy compatibility only. -var SHA1Crypter abstract.Scheme -var SHA256Crypter abstract.Scheme -var SHA512Crypter abstract.Scheme - -const ( - RecommendedRoundsSHA1 = 131000 - RecommendedRoundsSHA256 = 29000 - RecommendedRoundsSHA512 = 25000 -) - -const SaltLength = 16 - -func init() { - SHA1Crypter = New("$pbkdf2$", sha1.New, RecommendedRoundsSHA1) - SHA256Crypter = New("$pbkdf2-sha256$", sha256.New, RecommendedRoundsSHA256) - SHA512Crypter = New("$pbkdf2-sha512$", sha512.New, RecommendedRoundsSHA512) -} - -type scheme struct { - Ident string - HashFunc func() hash.Hash - Rounds int -} - -func New(ident string, hf func() hash.Hash, rounds int) abstract.Scheme { - return &scheme{ - Ident: ident, - HashFunc: hf, - Rounds: rounds, - } -} - -func (s *scheme) Hash(password string) (string, error) { - salt := make([]byte, SaltLength) - _, err := rand.Read(salt) - if err != nil { - return "", err - } - - hash := raw.Hash([]byte(password), salt, s.Rounds, s.HashFunc) - - newHash := fmt.Sprintf("%s%d$%s$%s", s.Ident, s.Rounds, raw.Base64Encode(salt), hash) - return newHash, nil -} - -func (s *scheme) Verify(password, stub string) (err error) { - _, rounds, salt, oldHash, err := raw.Parse(stub) - if err != nil { - return - } - - newHash := raw.Hash([]byte(password), salt, rounds, s.HashFunc) - - if len(newHash) == 0 || !abstract.SecureCompare(oldHash, newHash) { - err = abstract.ErrInvalidPassword - } - - return -} - -func (s *scheme) SupportsStub(stub string) bool { - return strings.HasPrefix(stub, s.Ident) -} - -func (s *scheme) NeedsUpdate(stub string) bool { - _, rounds, salt, _, err := raw.Parse(stub) - return err == raw.ErrInvalidRounds || rounds < s.Rounds || len(salt) < SaltLength -} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/base64.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/base64.go deleted file mode 100644 index ad57957..0000000 --- a/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/base64.go +++ /dev/null @@ -1,20 +0,0 @@ -package raw - -import ( - "encoding/base64" - "strings" -) - -var b64 = base64.RawStdEncoding - -func Base64Encode(src []byte) (dst string) { - dst = b64.EncodeToString(src) - dst = strings.Replace(dst, "+", ".", -1) - return -} - -func Base64Decode(src string) (dst []byte, err error) { - src = strings.Replace(src, ".", "+", -1) - dst, err = b64.DecodeString(src) - return -} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/parse.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/parse.go deleted file mode 100644 index 54f7108..0000000 --- a/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/parse.go +++ /dev/null @@ -1,62 +0,0 @@ -package raw - -import ( - "crypto/sha1" - "crypto/sha256" - "crypto/sha512" - "fmt" - "hash" - "strconv" - "strings" -) - -// Indicates that a password hash or stub is invalid. -var ErrInvalidStub = fmt.Errorf("invalid stub") - -// Indicates that the number of rounds specified is not in the valid range. -var ErrInvalidRounds = fmt.Errorf("invalid number of rounds") - -var hashMap = map[string]func() hash.Hash{ - "pbkdf2": sha1.New, - "pbkdf2-sha256": sha256.New, - "pbkdf2-sha512": sha512.New, -} - -func Parse(stub string) (hashFunc func() hash.Hash, rounds int, salt []byte, hash string, err error) { - // does not start with $pbkdf2 - if !strings.HasPrefix(stub, "$pbkdf2") { - err = ErrInvalidStub - return - } - - parts := strings.Split(stub, "$") - if f, ok := hashMap[parts[1]]; ok { - hashFunc = f - } else { - err = ErrInvalidStub - return - } - - roundsStr := parts[2] - var n uint64 - n, err = strconv.ParseUint(roundsStr, 10, 31) - if err != nil { - err = ErrInvalidStub - return - } - rounds = int(n) - - if rounds < MinRounds || rounds > MaxRounds { - err = ErrInvalidRounds - return - } - - salt, err = Base64Decode(parts[3]) - if err != nil { - err = fmt.Errorf("could not decode base64 salt") - return - } - hash = parts[4] - - return -} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/pbkdf2.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/pbkdf2.go deleted file mode 100644 index 8bd7922..0000000 --- a/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw/pbkdf2.go +++ /dev/null @@ -1,15 +0,0 @@ -package raw - -import ( - "golang.org/x/crypto/pbkdf2" - "hash" -) - -const ( - MinRounds = 1 - MaxRounds = 0x7fffffff // setting at 32-bit signed integer limit for now -) - -func Hash(password, salt []byte, rounds int, hf func() hash.Hash) (hash string) { - return Base64Encode(pbkdf2.Key(password, salt, rounds, hf().Size(), hf)) -} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/test.py b/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/test.py deleted file mode 100644 index f851848..0000000 --- a/vendor/gopkg.in/hlandau/passlib.v1/hash/pbkdf2/test.py +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env python3 -import passlib.hash -import base64 -def f(p): - h = passlib.hash.pbkdf2_sha256.hash(p) - print(' {"%s", "%s"},' % (p,h)) - -f('') -f('a') -f('ab') -f('abc') -f('abcd') -f('abcde') -f('abcdef') -f('abcdefg') -f('abcdefgh') -f('abcdefghi') -f('abcdefghij') -f('abcdefghijk') -f('abcdefghijkl') -f('abcdefghijklm') -f('abcdefghijklmn') -f('abcdefghijklmno') -f('abcdefghijklmnop') -f('qrstuvwxyz012345') -f('67890./') -f('ABCDEFGHIJKLMNOP') -f('QRSTUVWXYZ012345') -for i in range(70): - f(('password'*10)[0:i]) diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/scrypt/raw/scrypt.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/scrypt/raw/scrypt.go deleted file mode 100644 index d2718b2..0000000 --- a/vendor/gopkg.in/hlandau/passlib.v1/hash/scrypt/raw/scrypt.go +++ /dev/null @@ -1,95 +0,0 @@ -// Package raw provides a raw implementation of the modular-crypt-wrapped scrypt primitive. -package raw - -import "golang.org/x/crypto/scrypt" -import "encoding/base64" -import "strings" -import "strconv" -import "fmt" - -// The current recommended N value for interactive logins. -const RecommendedN = 16384 - -// The current recommended r value for interactive logins. -const Recommendedr = 8 - -// The current recommended p value for interactive logins. -const Recommendedp = 1 - -// Wrapper for golang.org/x/crypto/scrypt implementing a sensible -// modular crypt interface. -// -// password should be a UTF-8 plaintext password. -// salt should be a random salt value in binary form. -// -// N, r and p are parameters to scrypt. -// -// Returns a modular crypt hash. -func ScryptSHA256(password string, salt []byte, N, r, p int) string { - passwordb := []byte(password) - - hash, err := scrypt.Key(passwordb, salt, N, r, p, 32) - if err != nil { - panic(err) - } - - hstr := base64.StdEncoding.EncodeToString(hash) - sstr := base64.StdEncoding.EncodeToString(salt) - - return fmt.Sprintf("$s2$%d$%d$%d$%s$%s", N, r, p, sstr, hstr) -} - -// Indicates that a password hash or stub is invalid. -var ErrInvalidStub = fmt.Errorf("invalid scrypt password stub") - -// Parses an scrypt modular hash or stub string. -// -// The format is as follows: -// -// $s2$N$r$p$salt$hash // hash -// $s2$N$r$p$salt // stub -// -func Parse(stub string) (salt, hash []byte, N, r, p int, err error) { - if len(stub) < 10 || !strings.HasPrefix(stub, "$s2$") { - err = ErrInvalidStub - return - } - - // $s2$ N$r$p$salt-base64$hash-base64 - parts := strings.Split(stub[4:], "$") - - if len(parts) < 4 { - err = ErrInvalidStub - return - } - - var Ni, ri, pi uint64 - - Ni, err = strconv.ParseUint(parts[0], 10, 31) - if err != nil { - return - } - - ri, err = strconv.ParseUint(parts[1], 10, 31) - if err != nil { - return - } - - pi, err = strconv.ParseUint(parts[2], 10, 31) - if err != nil { - return - } - - N, r, p = int(Ni), int(ri), int(pi) - - salt, err = base64.StdEncoding.DecodeString(parts[3]) - if err != nil { - return - } - - if len(parts) >= 5 { - hash, err = base64.StdEncoding.DecodeString(parts[4]) - } - - return -} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/scrypt/scrypt.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/scrypt/scrypt.go deleted file mode 100644 index 039182c..0000000 --- a/vendor/gopkg.in/hlandau/passlib.v1/hash/scrypt/scrypt.go +++ /dev/null @@ -1,113 +0,0 @@ -// Package scrypt implements the scrypt password hashing mechanism, wrapped in -// the modular crypt format. -package scrypt - -import "fmt" -import "expvar" -import "strings" -import "crypto/rand" -import "encoding/base64" -import "gopkg.in/hlandau/passlib.v1/hash/scrypt/raw" -import "gopkg.in/hlandau/passlib.v1/abstract" - -var cScryptSHA256HashCalls = expvar.NewInt("passlib.scryptsha256.hashCalls") -var cScryptSHA256VerifyCalls = expvar.NewInt("passlib.scryptsha256.verifyCalls") - -// An implementation of Scheme performing scrypt-sha256. -// -// Uses the recommended values for N,r,p defined in raw. -var SHA256Crypter abstract.Scheme - -func init() { - SHA256Crypter = NewSHA256( - raw.RecommendedN, - raw.Recommendedr, - raw.Recommendedp, - ) -} - -// Returns an implementation of Scheme implementing scrypt-sha256 -// with the specified parameters. -func NewSHA256(N, r, p int) abstract.Scheme { - return &scryptSHA256Crypter{ - nN: N, - r: r, - p: p, - } -} - -type scryptSHA256Crypter struct { - nN, r, p int -} - -func (c *scryptSHA256Crypter) SetParams(N, r, p int) error { - c.nN = N - c.r = r - c.p = p - return nil -} - -func (c *scryptSHA256Crypter) SupportsStub(stub string) bool { - return strings.HasPrefix(stub, "$s2$") -} - -func (c *scryptSHA256Crypter) Hash(password string) (string, error) { - cScryptSHA256HashCalls.Add(1) - - stub, err := c.makeStub() - if err != nil { - return "", err - } - - _, newHash, _, _, _, _, err := c.hash(password, stub) - return newHash, err -} - -func (c *scryptSHA256Crypter) Verify(password, hash string) (err error) { - cScryptSHA256VerifyCalls.Add(1) - - _, newHash, _, _, _, _, err := c.hash(password, hash) - if err == nil && !abstract.SecureCompare(hash, newHash) { - err = abstract.ErrInvalidPassword - } - - return -} - -func (c *scryptSHA256Crypter) NeedsUpdate(stub string) bool { - salt, _, N, r, p, err := raw.Parse(stub) - if err != nil { - return false // ... - } - - return c.needsUpdate(salt, N, r, p) -} - -func (c *scryptSHA256Crypter) needsUpdate(salt []byte, N, r, p int) bool { - return len(salt) < 18 || N < c.nN || r < c.r || p < c.p -} - -func (c *scryptSHA256Crypter) hash(password, stub string) (oldHashRaw []byte, newHash string, salt []byte, N, r, p int, err error) { - salt, oldHashRaw, N, r, p, err = raw.Parse(stub) - if err != nil { - return - } - - return oldHashRaw, raw.ScryptSHA256(password, salt, N, r, p), salt, N, r, p, nil -} - -func (c *scryptSHA256Crypter) makeStub() (string, error) { - buf := make([]byte, 18) - _, err := rand.Read(buf) - if err != nil { - return "", err - } - - salt := base64.StdEncoding.EncodeToString(buf) - - return fmt.Sprintf("$s2$%d$%d$%d$%s", c.nN, c.r, c.p, salt), nil -} - -func (c *scryptSHA256Crypter) String() string { - return fmt.Sprintf("scrypt-sha256(%d,%d,%d)", c.nN, c.r, c.p) -} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/base64.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/base64.go deleted file mode 100644 index 2f96e6e..0000000 --- a/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/base64.go +++ /dev/null @@ -1,34 +0,0 @@ -package raw - -const bmap = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" - -// Encodes a byte string using the sha2-crypt base64 variant. -func EncodeBase64(b []byte) string { - o := make([]byte, len(b)/3*4+4) - - for i, j := 0, 0; i < len(b); { - b1 := b[i] - b2 := byte(0) - b3 := byte(0) - - if (i + 1) < len(b) { - b2 = b[i+1] - } - if (i + 2) < len(b) { - b3 = b[i+2] - } - - o[j] = bmap[(b1 & 0x3F)] - o[j+1] = bmap[((b1&0xC0)>>6)|((b2&0x0F)<<2)] - o[j+2] = bmap[((b2&0xF0)>>4)|((b3&0x03)<<4)] - o[j+3] = bmap[(b3&0xFC)>>2] - i += 3 - j += 4 - } - - s := string(o) - return s[0 : len(b)*4/3-(len(b)%4)+1] -} - -// © 2008-2012 Assurance Technologies LLC. (Python passlib) BSD License -// © 2014 Hugo Landau BSD License diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/parse.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/parse.go deleted file mode 100644 index 9e1fcfc..0000000 --- a/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/parse.go +++ /dev/null @@ -1,82 +0,0 @@ -package raw - -import "fmt" -import "strings" -import "strconv" - -// Indicates that a password hash or stub is invalid. -var ErrInvalidStub = fmt.Errorf("invalid stub") - -// Indicates that the number of rounds specified is not in the valid range. -var ErrInvalidRounds = fmt.Errorf("invalid number of rounds") - -// Scans a sha256-crypt or sha512-crypt modular crypt stub or modular crypt hash -// to determine configuration parameters. -func Parse(stub string) (isSHA512 bool, salt, hash string, rounds int, err error) { - // $5$ - if len(stub) < 3 || stub[0] != '$' || stub[2] != '$' { - err = ErrInvalidStub - return - } - - if stub[1] == '6' { - isSHA512 = true - } else if stub[1] != '5' { - err = ErrInvalidStub - return - } - - rest := stub[3:] - parts := strings.Split(rest, "$") - roundsStr := "" - - switch len(parts) { - case 1: - // $5$ - // $5$salt - salt = parts[0] - case 2: - // $5$salt$hash - // $5$rounds=1000$salt - if strings.HasPrefix(parts[0], "rounds=") { - roundsStr = parts[0] - salt = parts[1] - } else { - salt = parts[0] - hash = parts[1] - } - case 3: - // $5$rounds=1000$salt$hash - roundsStr = parts[0] - salt = parts[1] - hash = parts[2] - default: - err = ErrInvalidStub - } - - if roundsStr != "" { - if !strings.HasPrefix(roundsStr, "rounds=") { - err = ErrInvalidStub - return - } - - roundsStr = roundsStr[7:] - var n uint64 - n, err = strconv.ParseUint(roundsStr, 10, 31) - if err != nil { - err = ErrInvalidStub - return - } - - rounds = int(n) - - if rounds < MinimumRounds || rounds > MaximumRounds { - err = ErrInvalidRounds - return - } - } else { - rounds = DefaultRounds - } - - return -} diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/sha2crypt.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/sha2crypt.go deleted file mode 100644 index 4b256fd..0000000 --- a/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw/sha2crypt.go +++ /dev/null @@ -1,187 +0,0 @@ -// Package raw provides a raw implementation of the sha256-crypt and sha512-crypt primitives. -package raw - -import "io" -import "fmt" -import "hash" -import "crypto/sha256" -import "crypto/sha512" - -// The minimum number of rounds permissible for sha256-crypt and sha512-crypt. -const MinimumRounds = 1000 - -// The maximum number of rounds permissible for sha256-crypt and sha512-crypt. -// Don't use this! -const MaximumRounds = 999999999 - -// This is the 'default' number of rounds for sha256-crypt and sha512-crypt. If -// this rounds value is used the number of rounds is not explicitly specified -// in the modular crypt format, as it is the default. -const DefaultRounds = 5000 - -// This is the recommended number of rounds for sha256-crypt and sha512-crypt. -// This may change with subsequent releases of this package. It is recommended -// that you invoke sha256-crypt or sha512-crypt with this value, or a value -// proportional to it. -const RecommendedRounds = 10000 - -// Calculates sha256-crypt. The password must be in plaintext and be a UTF-8 -// string. -// -// The salt must be a valid ASCII between 0 and 16 characters in length -// inclusive. -// -// See the constants in this package for suggested values for rounds. -// -// Rounds must be in the range 1000 <= rounds <= 999999999. The function panics -// if this is not the case. -// -// The output is in modular crypt format. -func Crypt256(password, salt string, rounds int) string { - return "$5" + shaCrypt(password, salt, rounds, sha256.New, transpose256) -} - -// Calculates sha256-crypt. The password must be in plaintext and be a UTF-8 -// string. -// -// The salt must be a valid ASCII between 0 and 16 characters in length -// inclusive. -// -// See the constants in this package for suggested values for rounds. -// -// Rounds must be in the range 1000 <= rounds <= 999999999. The function panics -// if this is not the case. -// -// The output is in modular crypt format. -func Crypt512(password, salt string, rounds int) string { - return "$6" + shaCrypt(password, salt, rounds, sha512.New, transpose512) -} - -func shaCrypt(password, salt string, rounds int, newHash func() hash.Hash, transpose func(b []byte)) string { - if rounds < MinimumRounds || rounds > MaximumRounds { - panic("sha256-crypt rounds must be in 1000 <= rounds <= 999999999") - } - - passwordb := []byte(password) - saltb := []byte(salt) - if len(saltb) > 16 { - panic("salt must not exceed 16 bytes") - } - - // B - b := newHash() - b.Write(passwordb) - b.Write(saltb) - b.Write(passwordb) - bsum := b.Sum(nil) - - // A - a := newHash() - a.Write(passwordb) - a.Write(saltb) - repeat(a, bsum, len(passwordb)) - - plen := len(passwordb) - for plen != 0 { - if (plen & 1) != 0 { - a.Write(bsum) - } else { - a.Write(passwordb) - } - plen = plen >> 1 - } - - asum := a.Sum(nil) - - // DP - dp := newHash() - for i := 0; i < len(passwordb); i++ { - dp.Write(passwordb) - } - - dpsum := dp.Sum(nil) - - // P - p := make([]byte, len(passwordb)) - repeatTo(p, dpsum) - - // DS - ds := newHash() - for i := 0; i < (16 + int(asum[0])); i++ { - ds.Write(saltb) - } - - dssum := ds.Sum(nil)[0:len(saltb)] - - // S - s := make([]byte, len(saltb)) - repeatTo(s, dssum) - - // C - cur := asum[:] - for i := 0; i < rounds; i++ { - c := newHash() - if (i & 1) != 0 { - c.Write(p) - } else { - c.Write(cur) - } - if (i % 3) != 0 { - c.Write(s) - } - if (i % 7) != 0 { - c.Write(p) - } - if (i & 1) == 0 { - c.Write(p) - } else { - c.Write(cur) - } - cur = c.Sum(nil)[:] - } - - // Transposition - transpose(cur) - - // Hash - hstr := EncodeBase64(cur) - - if rounds == DefaultRounds { - return fmt.Sprintf("$%s$%s", salt, hstr) - } - - return fmt.Sprintf("$rounds=%d$%s$%s", rounds, salt, hstr) -} - -func repeat(w io.Writer, b []byte, sz int) { - var i int - for i = 0; (i + len(b)) <= sz; i += len(b) { - w.Write(b) - } - w.Write(b[0 : sz-i]) -} - -func repeatTo(out []byte, b []byte) { - if len(b) == 0 { - return - } - - var i int - for i = 0; (i + len(b)) <= len(out); i += len(b) { - copy(out[i:], b) - } - copy(out[i:], b) -} - -func transpose256(b []byte) { - b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8], b[9], b[10], b[11], b[12], b[13], b[14], b[15], b[16], b[17], b[18], b[19], b[20], b[21], b[22], b[23], b[24], b[25], b[26], b[27], b[28], b[29], b[30], b[31] = - b[20], b[10], b[0], b[11], b[1], b[21], b[2], b[22], b[12], b[23], b[13], b[3], b[14], b[4], b[24], b[5], b[25], b[15], b[26], b[16], b[6], b[17], b[7], b[27], b[8], b[28], b[18], b[29], b[19], b[9], b[30], b[31] -} - -func transpose512(b []byte) { - b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8], b[9], b[10], b[11], b[12], b[13], b[14], b[15], b[16], b[17], b[18], b[19], b[20], b[21], b[22], b[23], b[24], b[25], b[26], b[27], b[28], b[29], b[30], b[31], b[32], b[33], b[34], b[35], b[36], b[37], b[38], b[39], b[40], b[41], b[42], b[43], b[44], b[45], b[46], b[47], b[48], b[49], b[50], b[51], b[52], b[53], b[54], b[55], b[56], b[57], b[58], b[59], b[60], b[61], b[62], b[63] = - b[42], b[21], b[0], b[1], b[43], b[22], b[23], b[2], b[44], b[45], b[24], b[3], b[4], b[46], b[25], b[26], b[5], b[47], b[48], b[27], b[6], b[7], b[49], b[28], b[29], b[8], b[50], b[51], b[30], b[9], b[10], b[52], b[31], b[32], b[11], b[53], b[54], b[33], b[12], b[13], b[55], b[34], b[35], b[14], b[56], b[57], b[36], b[15], b[16], b[58], b[37], b[38], b[17], b[59], b[60], b[39], b[18], b[19], b[61], b[40], b[41], b[20], b[62], b[63] -} - -// © 2008-2012 Assurance Technologies LLC. (Python passlib) BSD License -// © 2014 Hugo Landau BSD License diff --git a/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/sha2crypt.go b/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/sha2crypt.go deleted file mode 100644 index c936469..0000000 --- a/vendor/gopkg.in/hlandau/passlib.v1/hash/sha2crypt/sha2crypt.go +++ /dev/null @@ -1,147 +0,0 @@ -// Package sha2crypt implements sha256-crypt and sha512-crypt. -package sha2crypt - -import "fmt" -import "expvar" -import "crypto/rand" -import "gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw" -import "gopkg.in/hlandau/passlib.v1/abstract" - -var cSHA2CryptHashCalls = expvar.NewInt("passlib.sha2crypt.hashCalls") -var cSHA2CryptVerifyCalls = expvar.NewInt("passlib.sha2crypt.verifyCalls") - -// An implementation of Scheme performing sha256-crypt. -// -// The number of rounds is raw.RecommendedRounds. -var Crypter256 abstract.Scheme - -// An implementation of Scheme performing sha512-crypt. -// -// The number of rounds is raw.RecommendedRounds. -var Crypter512 abstract.Scheme - -func init() { - Crypter256 = NewCrypter256(raw.RecommendedRounds) - Crypter512 = NewCrypter512(raw.RecommendedRounds) -} - -// Returns a Scheme implementing sha256-crypt using the number of rounds -// specified. -func NewCrypter256(rounds int) abstract.Scheme { - return &sha2Crypter{false, rounds} -} - -// Returns a Scheme implementing sha512-crypt using the number of rounds -// specified. -func NewCrypter512(rounds int) abstract.Scheme { - return &sha2Crypter{true, rounds} -} - -type sha2Crypter struct { - sha512 bool - rounds int -} - -// Changes the default rounds for the crypter. Be warned that this -// is a global setting. The default default value is RecommendedRounds. -func (c *sha2Crypter) SetRounds(rounds int) error { - if rounds < raw.MinimumRounds || rounds > raw.MaximumRounds { - return raw.ErrInvalidRounds - } - - c.rounds = rounds - return nil -} - -func (c *sha2Crypter) SupportsStub(stub string) bool { - if len(stub) < 3 || stub[0] != '$' || stub[2] != '$' { - return false - } - return (stub[1] == '5' && !c.sha512) || (stub[1] == '6' && c.sha512) -} - -func (c *sha2Crypter) Hash(password string) (string, error) { - cSHA2CryptHashCalls.Add(1) - - stub, err := c.makeStub() - if err != nil { - return "", err - } - - _, newHash, _, _, err := c.hash(password, stub) - return newHash, err -} - -func (c *sha2Crypter) Verify(password, hash string) (err error) { - cSHA2CryptVerifyCalls.Add(1) - - _, newHash, _, _, err := c.hash(password, hash) - if err == nil && !abstract.SecureCompare(hash, newHash) { - err = abstract.ErrInvalidPassword - } - - return -} - -func (c *sha2Crypter) NeedsUpdate(stub string) bool { - _, salt, _, rounds, err := raw.Parse(stub) - if err != nil { - return false // ... - } - - return c.needsUpdate(salt, rounds) -} - -func (c *sha2Crypter) needsUpdate(salt string, rounds int) bool { - return rounds < c.rounds || len(salt) < 16 -} - -var errInvalidStub = fmt.Errorf("invalid sha2 password stub") - -func (c *sha2Crypter) hash(password, stub string) (oldHash, newHash, salt string, rounds int, err error) { - isSHA512, salt, oldHash, rounds, err := raw.Parse(stub) - if err != nil { - return "", "", "", 0, err - } - - if isSHA512 != c.sha512 { - return "", "", "", 0, errInvalidStub - } - - if c.sha512 { - return oldHash, raw.Crypt512(password, salt, rounds), salt, rounds, nil - } - - return oldHash, raw.Crypt256(password, salt, rounds), salt, rounds, nil -} - -func (c *sha2Crypter) makeStub() (string, error) { - ch := "5" - if c.sha512 { - ch = "6" - } - - buf := make([]byte, 12) - _, err := rand.Read(buf) - if err != nil { - return "", err - } - - salt := raw.EncodeBase64(buf)[0:16] - - if c.rounds == raw.DefaultRounds { - return fmt.Sprintf("$%s$%s", ch, salt), nil - } - - return fmt.Sprintf("$%s$rounds=%d$%s", ch, c.rounds, salt), nil -} - -func (c *sha2Crypter) String() string { - if c.sha512 { - return fmt.Sprintf("sha512-crypt(%d)", c.rounds) - } else { - return fmt.Sprintf("sha256-crypt(%d)", c.rounds) - } -} - -// © 2014 Hugo Landau BSD License diff --git a/vendor/gopkg.in/hlandau/passlib.v1/passlib.go b/vendor/gopkg.in/hlandau/passlib.v1/passlib.go deleted file mode 100644 index 0d13c75..0000000 --- a/vendor/gopkg.in/hlandau/passlib.v1/passlib.go +++ /dev/null @@ -1,174 +0,0 @@ -// Package passlib provides a simple password hashing and verification -// interface abstracting multiple password hashing schemes. -// -// After initialisation, most people need concern themselves only with the -// functions Hash and Verify, which uses the default context and sensible -// defaults. -// -// Library Initialization -// -// You should initialise the library before using it with the following line. -// -// // Call this at application startup. -// passlib.UseDefaults(passlib.Defaults20180601) -// -// See func UseDefaults for details. -package passlib // import "gopkg.in/hlandau/passlib.v1" - -import ( - "gopkg.in/hlandau/easymetric.v1/cexp" - "gopkg.in/hlandau/passlib.v1/abstract" -) - -var cHashCalls = cexp.NewCounter("passlib.ctx.hashCalls") -var cVerifyCalls = cexp.NewCounter("passlib.ctx.verifyCalls") -var cSuccessfulVerifyCalls = cexp.NewCounter("passlib.ctx.successfulVerifyCalls") -var cFailedVerifyCalls = cexp.NewCounter("passlib.ctx.failedVerifyCalls") -var cSuccessfulVerifyCallsWithUpgrade = cexp.NewCounter("passlib.ctx.successfulVerifyCallsWithUpgrade") -var cSuccessfulVerifyCallsDeferringUpgrade = cexp.NewCounter("passlib.ctx.successfulVerifyCallsDeferringUpgrade") - -// A password hashing context, that uses a given set of schemes to hash and -// verify passwords. -type Context struct { - // Slice of schemes to use, most preferred first. - // - // If left uninitialized, a sensible default set of schemes will be used. - // - // An upgrade hash (see the newHash return value of the Verify method of the - // abstract.Scheme interface) will be issued whenever a password is validated - // using a scheme which is not the first scheme in this slice. - Schemes []abstract.Scheme -} - -func (ctx *Context) schemes() []abstract.Scheme { - if ctx.Schemes == nil { - return DefaultSchemes - } - - return ctx.Schemes -} - -// Hashes a UTF-8 plaintext password using the context and produces a password hash. -// -// If stub is "", one is generated automaticaly for the preferred password hashing -// scheme; you should specify stub as "" in almost all cases. -// -// The provided or randomly generated stub is used to deterministically hash -// the password. The returned hash is in modular crypt format. -// -// If the context has not been specifically configured, a sensible default policy -// is used. See the fields of Context. -func (ctx *Context) Hash(password string) (hash string, err error) { - cHashCalls.Add(1) - - return ctx.schemes()[0].Hash(password) -} - -// Verifies a UTF-8 plaintext password using a previously derived password hash -// and the default context. Returns nil err only if the password is valid. -// -// If the hash is determined to be deprecated based on the context policy, and -// the password is valid, the password is hashed using the preferred password -// hashing scheme and returned in newHash. You should use this to upgrade any -// stored password hash in your database. -// -// newHash is empty if the password was not valid or if no upgrade is required. -// -// You should treat any non-nil err as a password verification error. -func (ctx *Context) Verify(password, hash string) (newHash string, err error) { - return ctx.verify(password, hash, true) -} - -// Like Verify, but does not hash an upgrade password when upgrade is required. -func (ctx *Context) VerifyNoUpgrade(password, hash string) error { - _, err := ctx.verify(password, hash, false) - return err -} - -func (ctx *Context) verify(password, hash string, canUpgrade bool) (newHash string, err error) { - cVerifyCalls.Add(1) - - for i, scheme := range ctx.schemes() { - if !scheme.SupportsStub(hash) { - continue - } - - err = scheme.Verify(password, hash) - if err != nil { - cFailedVerifyCalls.Add(1) - return "", err - } - - cSuccessfulVerifyCalls.Add(1) - if i != 0 || scheme.NeedsUpdate(hash) { - if canUpgrade { - cSuccessfulVerifyCallsWithUpgrade.Add(1) - - // If the scheme is not the first scheme, try and rehash with the - // preferred scheme. - if newHash, err2 := ctx.Hash(password); err2 == nil { - return newHash, nil - } - } else { - cSuccessfulVerifyCallsDeferringUpgrade.Add(1) - } - } - - return "", nil - } - - return "", abstract.ErrUnsupportedScheme -} - -// Determines whether a stub or hash needs updating according to the policy of -// the context. -func (ctx *Context) NeedsUpdate(stub string) bool { - for i, scheme := range ctx.schemes() { - if scheme.SupportsStub(stub) { - return i != 0 || scheme.NeedsUpdate(stub) - } - } - - return false -} - -// The default context, which uses sensible defaults. Most users should not -// reconfigure this. The defaults may change over time, so you may wish -// to reconfigure the context or use a custom context if you want precise -// control over the hashes used. -var DefaultContext Context - -// Hashes a UTF-8 plaintext password using the default context and produces a -// password hash. Chooses the preferred password hashing scheme based on the -// configured policy. The default policy is sensible. -func Hash(password string) (hash string, err error) { - return DefaultContext.Hash(password) -} - -// Verifies a UTF-8 plaintext password using a previously derived password hash -// and the default context. Returns nil err only if the password is valid. -// -// If the hash is determined to be deprecated based on policy, and the password -// is valid, the password is hashed using the preferred password hashing scheme -// and returned in newHash. You should use this to upgrade any stored password -// hash in your database. -// -// newHash is empty if the password was invalid or no upgrade is required. -// -// You should treat any non-nil err as a password verification error. -func Verify(password, hash string) (newHash string, err error) { - return DefaultContext.Verify(password, hash) -} - -// Like Verify, but never upgrades. -func VerifyNoUpgrade(password, hash string) error { - return DefaultContext.VerifyNoUpgrade(password, hash) -} - -// Uses the default context to determine whether a stub or hash needs updating. -func NeedsUpdate(stub string) bool { - return DefaultContext.NeedsUpdate(stub) -} - -// © 2008-2012 Assurance Technologies LLC. (Python passlib) BSD License -// © 2014 Hugo Landau BSD License diff --git a/vendor/modules.txt b/vendor/modules.txt deleted file mode 100644 index 6e3ff64..0000000 --- a/vendor/modules.txt +++ /dev/null @@ -1,117 +0,0 @@ -# blitter.com/go/chacha20 v0.0.0-20200130200441-214e4085f54c -## explicit; go 1.12 -blitter.com/go/chacha20 -blitter.com/go/chacha20/internal/api -blitter.com/go/chacha20/internal/hardware -blitter.com/go/chacha20/internal/ref -# blitter.com/go/cryptmt v1.0.2 -## explicit -blitter.com/go/cryptmt -# blitter.com/go/goutmp v1.0.6 -## explicit; go 1.17 -blitter.com/go/goutmp -# blitter.com/go/groestl v0.0.0-20220410000905-c4decbf31d64 -## explicit; go 1.18 -blitter.com/go/groestl -# blitter.com/go/herradurakex v1.0.0 -## explicit -blitter.com/go/herradurakex -# blitter.com/go/hopscotch v0.0.0-20220617051533-4b42ccd4e00a -## explicit; go 1.18 -blitter.com/go/hopscotch -# blitter.com/go/kyber v0.0.0-20200130200857-6f2021cb88d9 -## explicit; go 1.12 -blitter.com/go/kyber -# blitter.com/go/mtwist v1.0.1 -## explicit -blitter.com/go/mtwist -# blitter.com/go/newhope v0.0.0-20200130200750-192fc08a8aae -## explicit; go 1.12 -blitter.com/go/newhope -# github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da -## explicit -github.com/aead/chacha20/chacha -# github.com/creack/pty v1.1.18 -## explicit; go 1.13 -github.com/creack/pty -# github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f -## explicit -github.com/jameskeane/bcrypt -# github.com/klauspost/cpuid/v2 v2.1.1 -## explicit; go 1.15 -github.com/klauspost/cpuid/v2 -# github.com/klauspost/reedsolomon v1.11.0 -## explicit; go 1.17 -github.com/klauspost/reedsolomon -# github.com/kuking/go-frodokem v1.0.2 -## explicit; go 1.14 -github.com/kuking/go-frodokem -# github.com/mattn/go-isatty v0.0.16 -## explicit; go 1.15 -github.com/mattn/go-isatty -# github.com/pkg/errors v0.9.1 -## explicit -github.com/pkg/errors -# github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 -## explicit -github.com/templexxx/cpufeat -# github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b -## explicit -github.com/templexxx/xor -# github.com/tjfoc/gmsm v1.4.1 -## explicit; go 1.14 -github.com/tjfoc/gmsm/sm4 -# github.com/xtaci/kcp-go v5.4.20+incompatible -## explicit -github.com/xtaci/kcp-go -# github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37 -## explicit; go 1.13 -# golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0 -## explicit; go 1.17 -golang.org/x/crypto/argon2 -golang.org/x/crypto/bcrypt -golang.org/x/crypto/blake2b -golang.org/x/crypto/blowfish -golang.org/x/crypto/cast5 -golang.org/x/crypto/internal/alias -golang.org/x/crypto/pbkdf2 -golang.org/x/crypto/salsa20 -golang.org/x/crypto/salsa20/salsa -golang.org/x/crypto/scrypt -golang.org/x/crypto/sha3 -golang.org/x/crypto/tea -golang.org/x/crypto/twofish -golang.org/x/crypto/xtea -# golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 -## explicit; go 1.17 -golang.org/x/net/bpf -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/sys v0.0.0-20220919091848-fb04ddd9f9c8 -## explicit; go 1.17 -golang.org/x/sys/cpu -golang.org/x/sys/internal/unsafeheader -golang.org/x/sys/unix -golang.org/x/sys/windows -# gopkg.in/hlandau/easymetric.v1 v1.0.0 -## explicit -gopkg.in/hlandau/easymetric.v1/cexp -# gopkg.in/hlandau/measurable.v1 v1.0.1 -## explicit -gopkg.in/hlandau/measurable.v1 -# gopkg.in/hlandau/passlib.v1 v1.0.11 -## explicit -gopkg.in/hlandau/passlib.v1 -gopkg.in/hlandau/passlib.v1/abstract -gopkg.in/hlandau/passlib.v1/hash/argon2 -gopkg.in/hlandau/passlib.v1/hash/argon2/raw -gopkg.in/hlandau/passlib.v1/hash/bcrypt -gopkg.in/hlandau/passlib.v1/hash/bcryptsha256 -gopkg.in/hlandau/passlib.v1/hash/pbkdf2 -gopkg.in/hlandau/passlib.v1/hash/pbkdf2/raw -gopkg.in/hlandau/passlib.v1/hash/scrypt -gopkg.in/hlandau/passlib.v1/hash/scrypt/raw -gopkg.in/hlandau/passlib.v1/hash/sha2crypt -gopkg.in/hlandau/passlib.v1/hash/sha2crypt/raw From 119c039b910db9eb0ab7ddd8350d9b2c6b887d07 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Wed, 18 Oct 2023 00:52:08 -0700 Subject: [PATCH 65/94] Fixed up mentions of old name hkexsh --- xs/mintty_wrapper.sh | 2 +- xsnet/net.go | 4 ++-- xspasswd/xspasswd.go | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/xs/mintty_wrapper.sh b/xs/mintty_wrapper.sh index 9cba8ff..dbc678a 100755 --- a/xs/mintty_wrapper.sh +++ b/xs/mintty_wrapper.sh @@ -1,7 +1,7 @@ #!/bin/bash # ## This wrapper may be used within the MSYS/mintty Windows -## shell environment to have a functioning hkexsh client with +## shell environment to have a functioning xs client with ## working 'raw' mode and hidden password entry. ## ## mintty uses named pipes and ptys to get a more POSIX-like diff --git a/xsnet/net.go b/xsnet/net.go index 9ba7cd8..ea1d912 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -9,7 +9,7 @@ package xsnet -// Implementation of HKEx-wrapped versions of the golang standard +// Implementation of key-exchange-wrapped versions of the golang standard // net package interfaces, allowing clients and servers to simply replace // 'net.Dial' and 'net.Listen' with 'hkex.Dial' and 'hkex.Listen' // (though some extra methods are implemented and must be used @@ -1084,7 +1084,7 @@ func (hl HKExListener) Close() error { return hl.l.Close() } -// Addr returns a the listener's network address. +// Addr returns the listener's network address. // // See go doc net.Listener.Addr func (hl HKExListener) Addr() net.Addr { diff --git a/xspasswd/xspasswd.go b/xspasswd/xspasswd.go index 8cb41a9..ff18083 100644 --- a/xspasswd/xspasswd.go +++ b/xspasswd/xspasswd.go @@ -1,5 +1,5 @@ // Util to generate/store passwords for users in a file akin to /etc/passwd -// suitable for the demo hkexsh server, using bcrypt. +// suitable for the xs server, using bcrypt. // // Copyright (c) 2017-2020 Russell Magee // Licensed under the terms of the MIT license (see LICENSE.mit in this From 74be6173b6705d75c12c7085debcce4f6f857722 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Fri, 3 Nov 2023 23:57:55 -0700 Subject: [PATCH 66/94] Comment cleanup --- Makefile | 2 +- xs/xs.go | 2 ++ xsd/xsd.go | 42 +++++++++++++++--------------------------- xsnet/net.go | 19 +++++++++++-------- xsnet/tun.go | 2 ++ 5 files changed, 31 insertions(+), 36 deletions(-) diff --git a/Makefile b/Makefile index 9bba711..61c2ae2 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION := 0.9.5.4 +VERSION := 0.9.5.5 .PHONY: lint vis clean common client server passwd\ subpkgs install uninstall reinstall scc diff --git a/xs/xs.go b/xs/xs.go index b30ea05..7fbdbc3 100755 --- a/xs/xs.go +++ b/xs/xs.go @@ -544,6 +544,8 @@ func doShellMode(isInteractive bool, conn *xsnet.Conn, oldState *xs.State, rec * _, outerr := func(conn *xsnet.Conn, r io.Reader) (w int64, e error) { // Copy() expects EOF so this will // exit with outerr == nil + // NOTE we use a local implementation of Copy() to allow + // for custom key sequences to trigger local actions w, e = Copy(conn, r) return w, e }(conn, os.Stdin) diff --git a/xsd/xsd.go b/xsd/xsd.go index 1fcef4f..da8df8b 100755 --- a/xsd/xsd.go +++ b/xsd/xsd.go @@ -77,12 +77,7 @@ func runClientToServerCopyAs(who, ttype string, conn *xsnet.Conn, fpath string, log.Println("uid:", uid, "gid:", gid) // Need to clear server's env and set key vars of the - // target user. This isn't perfect (TERM doesn't seem to - // work 100%; ANSI/xterm colour isn't working even - // if we set "xterm" or "ansi" here; and line count - // reported by 'stty -a' defaults to 24 regardless - // of client shell window used to run client. - // Investigate -- rlm 2018-01-26) + // target user. os.Clearenv() os.Setenv("HOME", u.HomeDir) os.Setenv("TERM", ttype) @@ -109,9 +104,10 @@ func runClientToServerCopyAs(who, ttype string, conn *xsnet.Conn, fpath string, c.Dir = destDir - //If os.Clearenv() isn't called by server above these will be seen in the - //client's session env. - //c.Env = []string{"HOME=" + u.HomeDir, "SUDO_GID=", "SUDO_UID=", "SUDO_USER=", "SUDO_COMMAND=", "MAIL=", "LOGNAME="+who} + //If os.Clearenv() isn't called by server above these will be seen + //in the client's session env. + //c.Env = []string{"HOME=" + u.HomeDir, "SUDO_GID=", "SUDO_UID=", + // "SUDO_USER=", "SUDO_COMMAND=", "MAIL=", "LOGNAME="+who} //c.Dir = u.HomeDir c.SysProcAttr = &syscall.SysProcAttr{} c.SysProcAttr.Credential = &syscall.Credential{Uid: uid, Gid: gid} @@ -182,12 +178,7 @@ func runServerToClientCopyAs(who, ttype string, conn *xsnet.Conn, srcPath string log.Println("uid:", uid, "gid:", gid) // Need to clear server's env and set key vars of the - // target user. This isn't perfect (TERM doesn't seem to - // work 100%; ANSI/xterm colour isn't working even - // if we set "xterm" or "ansi" here; and line count - // reported by 'stty -a' defaults to 24 regardless - // of client shell window used to run client. - // Investigate -- rlm 2018-01-26) + // target user. os.Clearenv() _ = os.Setenv("HOME", u.HomeDir) _ = os.Setenv("TERM", ttype) @@ -204,9 +195,10 @@ func runServerToClientCopyAs(who, ttype string, conn *xsnet.Conn, srcPath string c = exec.Command(cmdName, cmdArgs...) - //If os.Clearenv() isn't called by server above these will be seen in the - //client's session env. - //c.Env = []string{"HOME=" + u.HomeDir, "SUDO_GID=", "SUDO_UID=", "SUDO_USER=", "SUDO_COMMAND=", "MAIL=", "LOGNAME="+who} + //If os.Clearenv() isn't called by server above these will be seen + //in the client's session env. + //c.Env = []string{"HOME=" + u.HomeDir, "SUDO_GID=", "SUDO_UID=", "SUDO_USER=", + // "SUDO_COMMAND=", "MAIL=", "LOGNAME="+who} c.Dir = u.HomeDir c.SysProcAttr = &syscall.SysProcAttr{} c.SysProcAttr.Credential = &syscall.Credential{Uid: uid, Gid: gid} @@ -272,12 +264,7 @@ func runShellAs(who, hname, ttype, cmd string, interactive bool, //nolint:funlen log.Println("uid:", uid, "gid:", gid) // Need to clear server's env and set key vars of the - // target user. This isn't perfect (TERM doesn't seem to - // work 100%; ANSI/xterm colour isn't working even - // if we set "xterm" or "ansi" here; and line count - // reported by 'stty -a' defaults to 24 regardless - // of client shell window used to run client. - // Investigate -- rlm 2018-01-26) + // target user. os.Clearenv() _ = os.Setenv("HOME", u.HomeDir) _ = os.Setenv("TERM", ttype) @@ -312,9 +299,10 @@ func runShellAs(who, hname, ttype, cmd string, interactive bool, //nolint:funlen c.SysProcAttr = &syscall.SysProcAttr{} c.SysProcAttr.Credential = &syscall.Credential{Uid: uid, Gid: gid} } - //If os.Clearenv() isn't called by server above these will be seen in the - //client's session env. - //c.Env = []string{"HOME=" + u.HomeDir, "SUDO_GID=", "SUDO_UID=", "SUDO_USER=", "SUDO_COMMAND=", "MAIL=", "LOGNAME="+who} + //If os.Clearenv() isn't called by server above these will be seen + //in the client's session env. + //c.Env = []string{"HOME=" + u.HomeDir, "SUDO_GID=", "SUDO_UID=", + // "SUDO_USER=", "SUDO_COMMAND=", "MAIL=", "LOGNAME="+who} c.Dir = u.HomeDir // Start the command with a pty. diff --git a/xsnet/net.go b/xsnet/net.go index ea1d912..3dde211 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -308,9 +308,9 @@ func _new(kexAlg KEXAlg, conn *net.Conn) (hc *Conn, e error) { // applyConnExtensions processes optional Dial() negotiation // parameters. See also getkexalgnum(). // -// Currently defined extension values +// # Currently defined extension values // -// KEx algs +// # KEx algs // // KEX_HERRADURA256 KEX_HERRADURA512 KEX_HERRADURA1024 KEX_HERRADURA2048 // @@ -318,11 +318,11 @@ func _new(kexAlg KEXAlg, conn *net.Conn) (hc *Conn, e error) { // // KEX_NEWHOPE KEX_NEWHOPE_SIMPLE // -// Session (symmetric) crypto +// # Session (symmetric) crypto // // C_AES_256 C_TWOFISH_128 C_BLOWFISH_128 C_CRYPTMT1 C_CHACHA20_12 C_HOPSCOTCH // -// Session HMACs +// # Session HMACs // // H_SHA256 H_SHA512 func (hc *Conn) applyConnExtensions(extensions ...string) { @@ -882,12 +882,12 @@ func HKExAcceptSetup(c *net.Conn, hc *Conn) (err error) { // Dial as net.Dial(), but with implicit key exchange to set up secure // channel on connect // -// Can be called like net.Dial(), defaulting to C_AES_256/H_SHA256, -// or additional extensions can be passed amongst the following: +// Can be called like net.Dial(), defaulting to C_AES_256/H_SHA256, +// or additional extensions can be passed amongst the following: // -// "C_AES_256" | "C_TWOFISH_128" | ... +// "C_AES_256" | "C_TWOFISH_128" | ... // -// "H_SHA256" | "H_SHA512" | ... +// "H_SHA256" | "H_SHA512" | ... // // See go doc -u xsnet.applyConnExtensions func Dial(protocol string, ipport string, extensions ...string) (hc Conn, err error) { @@ -1423,6 +1423,9 @@ func (hc Conn) Read(b []byte) (n int, err error) { // let the server know to hang up on Dial()ed server rports. _ = binary.BigEndian.Uint16(payloadBytes[0:2]) //logger.LogDebug(fmt.Sprintf("[Server] Got CSOTunKeepAlive")) + // though CSOTunKeepAlive sends an endp (uint16), we don't use it, + // preferring to refresh *all* tunnels on the message. + // (?rlm 2023-11-04 -- TODO: verify this, it's been a while.) for _, t := range *hc.tuns { hc.Lock() t.KeepAlive = 0 diff --git a/xsnet/tun.go b/xsnet/tun.go index ac63047..ebddcae 100644 --- a/xsnet/tun.go +++ b/xsnet/tun.go @@ -37,6 +37,8 @@ type ( // client starts worker to receive/send data using lport // ... client disconnects: sends remhost [CSOTunClose:rport] // ... or server disconnects: sends client [CSOTunClose:lport] + // ... or server disconnects: due to client failing to send TunKeepAlive + // events for too long // server at any time sends [CSOTunRefused:rport] if daemon died // -- From 580053adbdc19ff2a59cdc62c3465d8a4c355300 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sun, 5 Nov 2023 14:58:24 -0800 Subject: [PATCH 67/94] Connection keepalive/disconnect --- xs/xs.go | 7 +++-- xsd/xsd.go | 72 +++++++++++++++++++++++++++++++++++++++---- xsnet/consts.go | 4 ++- xsnet/net.go | 81 +++++++++++++++++++++++++++++++++++++------------ 4 files changed, 135 insertions(+), 29 deletions(-) diff --git a/xs/xs.go b/xs/xs.go index 7fbdbc3..9ff83f9 100755 --- a/xs/xs.go +++ b/xs/xs.go @@ -1059,13 +1059,16 @@ func main() { //nolint: funlen, gocyclo fmt.Fprintln(os.Stderr, rejectUserMsg()) rec.SetStatus(GeneralProtocolErr) } else { + // === Set up connection keepalive to server + conn.StartupKeepAlive() // goroutine, returns immediately + defer conn.ShutdownKeepAlive() + // === Set up chaffing to server conn.SetupChaff(chaffFreqMin, chaffFreqMax, chaffBytesMax) // enable client->server chaffing if chaffEnabled { // #gv:s/label=\"main\$2\"/label=\"deferCloseChaff\"/ // TODO:.gv:main:2:deferCloseChaff - conn.EnableChaff() // goroutine, returns immediately - defer conn.DisableChaff() + conn.StartupChaff() // goroutine, returns immediately defer conn.ShutdownChaff() } diff --git a/xsd/xsd.go b/xsd/xsd.go index da8df8b..1c1db30 100755 --- a/xsd/xsd.go +++ b/xsd/xsd.go @@ -17,11 +17,14 @@ import ( "fmt" "io" "log" + "net/http" "os" "os/exec" "os/signal" "os/user" "path" + "runtime" + "runtime/pprof" "strings" "sync" "syscall" @@ -44,6 +47,9 @@ var ( // Log - syslog output (with no -d) Log *logger.Writer + + cpuprofile string + memprofile string ) const ( @@ -115,10 +121,13 @@ func runClientToServerCopyAs(who, ttype string, conn *xsnet.Conn, fpath string, c.Stdout = os.Stdout c.Stderr = os.Stderr + // === Set up connection keepalive to client + conn.StartupKeepAlive() // goroutine, returns immediately + defer conn.ShutdownKeepAlive() + if chaffing { - conn.EnableChaff() + conn.StartupChaff() } - defer conn.DisableChaff() defer conn.ShutdownChaff() // Start the command (no pty) @@ -212,11 +221,14 @@ func runServerToClientCopyAs(who, ttype string, conn *xsnet.Conn, srcPath string c.Stderr = stdErrBuffer //c.Stderr = nil + // === Set up connection keepalive to client + conn.StartupKeepAlive() // goroutine, returns immediately + defer conn.ShutdownKeepAlive() + if chaffing { - conn.EnableChaff() + conn.StartupChaff() } //defer conn.Close() - defer conn.DisableChaff() defer conn.ShutdownChaff() // Start the command (no pty) @@ -352,12 +364,15 @@ func runShellAs(who, hname, ttype, cmd string, interactive bool, //nolint:funlen } }() + // === Set up connection keepalive to client + conn.StartupKeepAlive() // goroutine, returns immediately + defer conn.ShutdownKeepAlive() + if chaffing { - conn.EnableChaff() + conn.StartupChaff() } // #gv:s/label=\"runShellAs\$4\"/label=\"deferChaffShutdown\"/ defer func() { - conn.DisableChaff() conn.ShutdownChaff() }() @@ -545,6 +560,9 @@ func main() { //nolint:funlen,gocyclo H_SHA256 H_SHA512`) + flag.StringVar(&cpuprofile, "cpuprofile", "", "write cpu profile to <`file`>") + flag.StringVar(&memprofile, "memprofile", "", "write memory profile to <`file`>") + flag.Parse() if vopt { @@ -559,6 +577,24 @@ func main() { //nolint:funlen,gocyclo } } + // === Profiling instrumentation + + if cpuprofile != "" { + f, err := os.Create(cpuprofile) + if err != nil { + log.Fatal("could not create CPU profile: ", err) + } + defer f.Close() + fmt.Println("StartCPUProfile()") + if err := pprof.StartCPUProfile(f); err != nil { + log.Fatal("could not start CPU profile: ", err) //nolint:gocritic + } else { + defer pprof.StopCPUProfile() + } + + go func() { http.ListenAndServe("localhost:6060", nil) }() //nolint:errcheck,gosec + } + // Enforce some sane min/max vals on chaff flags if chaffFreqMin < 2 { //nolint:gomnd chaffFreqMin = 2 @@ -611,6 +647,9 @@ func main() { //nolint:funlen,gocyclo syscall.Kill(0, syscall.SIGINT) //nolint:errcheck case "hangup": logger.LogNotice(fmt.Sprintf("[Got signal: %s - nop]", sig)) //nolint:errcheck + if cpuprofile != "" || memprofile != "" { + dumpProf() + } default: logger.LogNotice(fmt.Sprintf("[Got signal: %s - ignored]", sig)) //nolint:errcheck } @@ -632,6 +671,7 @@ func main() { //nolint:funlen,gocyclo // Wait for a connection. // Then check if client-proposed algs are allowed conn, err := l.Accept() + //logger.LogDebug(fmt.Sprintf("l.Accept()\n")) if err != nil { log.Printf("Accept() got error(%v), hanging up.\n", err) } else { @@ -864,3 +904,23 @@ func main() { //nolint:funlen,gocyclo } //endfor //logger.LogNotice(fmt.Sprintln("[Exiting]")) //nolint:errcheck } + +func dumpProf() { + if cpuprofile != "" { + pprof.StopCPUProfile() + } + + if memprofile != "" { + f, err := os.Create(memprofile) + if err != nil { + log.Fatal("could not create memory profile: ", err) + } + defer f.Close() + runtime.GC() // get up-to-date statistics + if err := pprof.WriteHeapProfile(f); err != nil { + log.Fatal("could not write memory profile: ", err) //nolint:gocritic + } + } + + //os.Exit(status) +} diff --git a/xsnet/consts.go b/xsnet/consts.go index 30833a2..a95691f 100644 --- a/xsnet/consts.go +++ b/xsnet/consts.go @@ -52,6 +52,7 @@ const ( CSEKEXAlgDenied // server rejected proposed KEX alg CSECipherAlgDenied // server rejected proposed Cipher alg CSEHMACAlgDenied // server rejected proposed HMAC alg + CSEConnDead // connection keepalives expired ) // Extended (>255 UNIX exit status) codes @@ -78,6 +79,7 @@ const ( CSOTunKeepAlive // client tunnel heartbeat CSOTunDisconn // server -> client: tunnel rport disconnected CSOTunHangup // client -> server: tunnel lport hung up + CSOKeepAlive // bidir keepalive packet to monitor main connection ) // TunEndpoint.tunCtl control values - used to control workers for client @@ -97,7 +99,7 @@ const ( // Channel status Op byte type (see CSONone, ... and CSENone, ...) type CSOType uint32 -//TODO: this should be small (max unfragmented packet size?) +// TODO: this should be small (max unfragmented packet size?) const MAX_PAYLOAD_LEN = 2*1024*1024*1024 - 1 // Session symmetric crypto algs diff --git a/xsnet/net.go b/xsnet/net.go index 3dde211..d59640b 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -64,7 +64,6 @@ type ( // see: https://en.wikipedia.org/wiki/chaff_(countermeasure) ChaffConfig struct { shutdown bool //set to inform chaffHelper to shut down - enabled bool msecsMin uint //msecs min interval msecsMax uint //msecs max interval szMax uint // max size in bytes @@ -87,8 +86,9 @@ type ( Rows uint16 Cols uint16 - chaff ChaffConfig - tuns *map[uint16](*TunEndpoint) + keepalive uint // if this reaches zero, conn is considered dead + chaff ChaffConfig + tuns *map[uint16](*TunEndpoint) closeStat *CSOType // close status (CSOExitStatus) r cipher.Stream //read cipherStream @@ -971,7 +971,7 @@ func Dial(protocol string, ipport string, extensions ...string) (hc Conn, err er // Close a hkex.Conn func (hc *Conn) Close() (err error) { - hc.DisableChaff() + hc.ShutdownChaff() s := make([]byte, 4) binary.BigEndian.PutUint32(s, uint32(*hc.closeStat)) log.Printf("** Writing closeStat %d at Close()\n", *hc.closeStat) @@ -1337,6 +1337,9 @@ func (hc Conn) Read(b []byte) (n int, err error) { case CSOChaff: // Throw away pkt if it's chaff (ie., caller to Read() won't see this data) log.Printf("[Chaff pkt, discarded (len %d)]\n", decryptN) + case CSOKeepAlive: + //log.Printf("[KeepAlive pkt, discarded (len %d)]\n", decryptN) + hc.ResetKeepAlive() case CSOTermSize: fmt.Sscanf(string(payloadBytes), "%d %d", &hc.Rows, &hc.Cols) log.Printf("[TermSize pkt: rows %v cols %v]\n", hc.Rows, hc.Cols) @@ -1568,18 +1571,12 @@ func (hc *Conn) WritePacket(b []byte, ctrlStatOp byte) (n int, err error) { return retN, err } -func (hc *Conn) EnableChaff() { +func (hc *Conn) StartupChaff() { hc.chaff.shutdown = false - hc.chaff.enabled = true log.Println("Chaffing ENABLED") hc.chaffHelper() } -func (hc *Conn) DisableChaff() { - hc.chaff.enabled = false - log.Println("Chaffing DISABLED") -} - func (hc *Conn) ShutdownChaff() { hc.chaff.shutdown = true log.Println("Chaffing SHUTDOWN") @@ -1594,9 +1591,10 @@ func (hc *Conn) SetupChaff(msecsMin uint, msecsMax uint, szMax uint) { // Helper routine to spawn a chaffing goroutine for each Conn func (hc *Conn) chaffHelper() { go func() { + var nextDuration int for { - var nextDuration int - if hc.chaff.enabled { + //logger.LogDebug(fmt.Sprintf("[chaffHelper Loop]\n")) + if !hc.chaff.shutdown { var bufTmp []byte bufTmp = make([]byte, rand.Intn(int(hc.chaff.szMax))) min := int(hc.chaff.msecsMin) @@ -1604,17 +1602,60 @@ func (hc *Conn) chaffHelper() { _, _ = rand.Read(bufTmp) _, err := hc.WritePacket(bufTmp, CSOChaff) if err != nil { - log.Println("[ *** error - chaffHelper quitting *** ]") - hc.chaff.enabled = false + log.Println("[ *** error - chaffHelper shutting down *** ]") + hc.chaff.shutdown = true break } - } - time.Sleep(time.Duration(nextDuration) * time.Millisecond) - if hc.chaff.shutdown { - log.Println("*** chaffHelper shutting down") + } else { + log.Println("[ *** chaffHelper shutting down *** ]") + break + } + time.Sleep(time.Duration(nextDuration) * time.Millisecond) + } + }() +} + +func (hc *Conn) StartupKeepAlive() { + hc.ResetKeepAlive() + log.Println("KeepAlive ENABLED") + hc.keepaliveHelper() +} + +func (hc *Conn) ShutdownKeepAlive() { + log.Println("Conn SHUTDOWN") + hc.SetStatus(CSEConnDead) + hc.Close() +} + +func (hc *Conn) ResetKeepAlive() { + hc.keepalive = 3 + log.Println("KeepAlive RESET") +} + +// Helper routine to spawn a keepalive goroutine for each Conn +func (hc *Conn) keepaliveHelper() { + go func() { + for { + nextDuration := 10000 + bufTmp := []byte{0x55, 0xaa} + _, err := hc.WritePacket(bufTmp, CSOKeepAlive) + //logger.LogDebug(fmt.Sprintf("[keepalive]\n")) + if err != nil { + logger.LogDebug(fmt.Sprintf("[ *** error - keepaliveHelper quitting *** ]\n")) + break + } + time.Sleep(time.Duration(nextDuration) * time.Millisecond) + hc.keepalive -= 1 + + if rand.Intn(32) == 0 { + hc.keepalive = 0 + } + + if hc.keepalive == 0 { + logger.LogDebug(fmt.Sprintf("*** keepaliveHelper shutting down\n")) + hc.ShutdownKeepAlive() break } - } }() } From bcea6d713fdda582696beead1480df7b37ae1e5e Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sun, 5 Nov 2023 14:58:24 -0800 Subject: [PATCH 68/94] Connection keepalive/disconnect --- xs/xs.go | 7 +++-- xsd/xsd.go | 72 +++++++++++++++++++++++++++++++++++++++---- xsnet/consts.go | 4 ++- xsnet/net.go | 81 +++++++++++++++++++++++++++++++++++++------------ 4 files changed, 135 insertions(+), 29 deletions(-) diff --git a/xs/xs.go b/xs/xs.go index 7fbdbc3..9ff83f9 100755 --- a/xs/xs.go +++ b/xs/xs.go @@ -1059,13 +1059,16 @@ func main() { //nolint: funlen, gocyclo fmt.Fprintln(os.Stderr, rejectUserMsg()) rec.SetStatus(GeneralProtocolErr) } else { + // === Set up connection keepalive to server + conn.StartupKeepAlive() // goroutine, returns immediately + defer conn.ShutdownKeepAlive() + // === Set up chaffing to server conn.SetupChaff(chaffFreqMin, chaffFreqMax, chaffBytesMax) // enable client->server chaffing if chaffEnabled { // #gv:s/label=\"main\$2\"/label=\"deferCloseChaff\"/ // TODO:.gv:main:2:deferCloseChaff - conn.EnableChaff() // goroutine, returns immediately - defer conn.DisableChaff() + conn.StartupChaff() // goroutine, returns immediately defer conn.ShutdownChaff() } diff --git a/xsd/xsd.go b/xsd/xsd.go index da8df8b..1c1db30 100755 --- a/xsd/xsd.go +++ b/xsd/xsd.go @@ -17,11 +17,14 @@ import ( "fmt" "io" "log" + "net/http" "os" "os/exec" "os/signal" "os/user" "path" + "runtime" + "runtime/pprof" "strings" "sync" "syscall" @@ -44,6 +47,9 @@ var ( // Log - syslog output (with no -d) Log *logger.Writer + + cpuprofile string + memprofile string ) const ( @@ -115,10 +121,13 @@ func runClientToServerCopyAs(who, ttype string, conn *xsnet.Conn, fpath string, c.Stdout = os.Stdout c.Stderr = os.Stderr + // === Set up connection keepalive to client + conn.StartupKeepAlive() // goroutine, returns immediately + defer conn.ShutdownKeepAlive() + if chaffing { - conn.EnableChaff() + conn.StartupChaff() } - defer conn.DisableChaff() defer conn.ShutdownChaff() // Start the command (no pty) @@ -212,11 +221,14 @@ func runServerToClientCopyAs(who, ttype string, conn *xsnet.Conn, srcPath string c.Stderr = stdErrBuffer //c.Stderr = nil + // === Set up connection keepalive to client + conn.StartupKeepAlive() // goroutine, returns immediately + defer conn.ShutdownKeepAlive() + if chaffing { - conn.EnableChaff() + conn.StartupChaff() } //defer conn.Close() - defer conn.DisableChaff() defer conn.ShutdownChaff() // Start the command (no pty) @@ -352,12 +364,15 @@ func runShellAs(who, hname, ttype, cmd string, interactive bool, //nolint:funlen } }() + // === Set up connection keepalive to client + conn.StartupKeepAlive() // goroutine, returns immediately + defer conn.ShutdownKeepAlive() + if chaffing { - conn.EnableChaff() + conn.StartupChaff() } // #gv:s/label=\"runShellAs\$4\"/label=\"deferChaffShutdown\"/ defer func() { - conn.DisableChaff() conn.ShutdownChaff() }() @@ -545,6 +560,9 @@ func main() { //nolint:funlen,gocyclo H_SHA256 H_SHA512`) + flag.StringVar(&cpuprofile, "cpuprofile", "", "write cpu profile to <`file`>") + flag.StringVar(&memprofile, "memprofile", "", "write memory profile to <`file`>") + flag.Parse() if vopt { @@ -559,6 +577,24 @@ func main() { //nolint:funlen,gocyclo } } + // === Profiling instrumentation + + if cpuprofile != "" { + f, err := os.Create(cpuprofile) + if err != nil { + log.Fatal("could not create CPU profile: ", err) + } + defer f.Close() + fmt.Println("StartCPUProfile()") + if err := pprof.StartCPUProfile(f); err != nil { + log.Fatal("could not start CPU profile: ", err) //nolint:gocritic + } else { + defer pprof.StopCPUProfile() + } + + go func() { http.ListenAndServe("localhost:6060", nil) }() //nolint:errcheck,gosec + } + // Enforce some sane min/max vals on chaff flags if chaffFreqMin < 2 { //nolint:gomnd chaffFreqMin = 2 @@ -611,6 +647,9 @@ func main() { //nolint:funlen,gocyclo syscall.Kill(0, syscall.SIGINT) //nolint:errcheck case "hangup": logger.LogNotice(fmt.Sprintf("[Got signal: %s - nop]", sig)) //nolint:errcheck + if cpuprofile != "" || memprofile != "" { + dumpProf() + } default: logger.LogNotice(fmt.Sprintf("[Got signal: %s - ignored]", sig)) //nolint:errcheck } @@ -632,6 +671,7 @@ func main() { //nolint:funlen,gocyclo // Wait for a connection. // Then check if client-proposed algs are allowed conn, err := l.Accept() + //logger.LogDebug(fmt.Sprintf("l.Accept()\n")) if err != nil { log.Printf("Accept() got error(%v), hanging up.\n", err) } else { @@ -864,3 +904,23 @@ func main() { //nolint:funlen,gocyclo } //endfor //logger.LogNotice(fmt.Sprintln("[Exiting]")) //nolint:errcheck } + +func dumpProf() { + if cpuprofile != "" { + pprof.StopCPUProfile() + } + + if memprofile != "" { + f, err := os.Create(memprofile) + if err != nil { + log.Fatal("could not create memory profile: ", err) + } + defer f.Close() + runtime.GC() // get up-to-date statistics + if err := pprof.WriteHeapProfile(f); err != nil { + log.Fatal("could not write memory profile: ", err) //nolint:gocritic + } + } + + //os.Exit(status) +} diff --git a/xsnet/consts.go b/xsnet/consts.go index 30833a2..a95691f 100644 --- a/xsnet/consts.go +++ b/xsnet/consts.go @@ -52,6 +52,7 @@ const ( CSEKEXAlgDenied // server rejected proposed KEX alg CSECipherAlgDenied // server rejected proposed Cipher alg CSEHMACAlgDenied // server rejected proposed HMAC alg + CSEConnDead // connection keepalives expired ) // Extended (>255 UNIX exit status) codes @@ -78,6 +79,7 @@ const ( CSOTunKeepAlive // client tunnel heartbeat CSOTunDisconn // server -> client: tunnel rport disconnected CSOTunHangup // client -> server: tunnel lport hung up + CSOKeepAlive // bidir keepalive packet to monitor main connection ) // TunEndpoint.tunCtl control values - used to control workers for client @@ -97,7 +99,7 @@ const ( // Channel status Op byte type (see CSONone, ... and CSENone, ...) type CSOType uint32 -//TODO: this should be small (max unfragmented packet size?) +// TODO: this should be small (max unfragmented packet size?) const MAX_PAYLOAD_LEN = 2*1024*1024*1024 - 1 // Session symmetric crypto algs diff --git a/xsnet/net.go b/xsnet/net.go index 3dde211..6a671d7 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -64,7 +64,6 @@ type ( // see: https://en.wikipedia.org/wiki/chaff_(countermeasure) ChaffConfig struct { shutdown bool //set to inform chaffHelper to shut down - enabled bool msecsMin uint //msecs min interval msecsMax uint //msecs max interval szMax uint // max size in bytes @@ -87,8 +86,9 @@ type ( Rows uint16 Cols uint16 - chaff ChaffConfig - tuns *map[uint16](*TunEndpoint) + keepalive uint // if this reaches zero, conn is considered dead + chaff ChaffConfig + tuns *map[uint16](*TunEndpoint) closeStat *CSOType // close status (CSOExitStatus) r cipher.Stream //read cipherStream @@ -971,7 +971,7 @@ func Dial(protocol string, ipport string, extensions ...string) (hc Conn, err er // Close a hkex.Conn func (hc *Conn) Close() (err error) { - hc.DisableChaff() + hc.ShutdownChaff() s := make([]byte, 4) binary.BigEndian.PutUint32(s, uint32(*hc.closeStat)) log.Printf("** Writing closeStat %d at Close()\n", *hc.closeStat) @@ -1337,6 +1337,9 @@ func (hc Conn) Read(b []byte) (n int, err error) { case CSOChaff: // Throw away pkt if it's chaff (ie., caller to Read() won't see this data) log.Printf("[Chaff pkt, discarded (len %d)]\n", decryptN) + case CSOKeepAlive: + //log.Printf("[KeepAlive pkt, discarded (len %d)]\n", decryptN) + hc.ResetKeepAlive() case CSOTermSize: fmt.Sscanf(string(payloadBytes), "%d %d", &hc.Rows, &hc.Cols) log.Printf("[TermSize pkt: rows %v cols %v]\n", hc.Rows, hc.Cols) @@ -1568,18 +1571,12 @@ func (hc *Conn) WritePacket(b []byte, ctrlStatOp byte) (n int, err error) { return retN, err } -func (hc *Conn) EnableChaff() { +func (hc *Conn) StartupChaff() { hc.chaff.shutdown = false - hc.chaff.enabled = true log.Println("Chaffing ENABLED") hc.chaffHelper() } -func (hc *Conn) DisableChaff() { - hc.chaff.enabled = false - log.Println("Chaffing DISABLED") -} - func (hc *Conn) ShutdownChaff() { hc.chaff.shutdown = true log.Println("Chaffing SHUTDOWN") @@ -1594,9 +1591,10 @@ func (hc *Conn) SetupChaff(msecsMin uint, msecsMax uint, szMax uint) { // Helper routine to spawn a chaffing goroutine for each Conn func (hc *Conn) chaffHelper() { go func() { + var nextDuration int for { - var nextDuration int - if hc.chaff.enabled { + //logger.LogDebug(fmt.Sprintf("[chaffHelper Loop]\n")) + if !hc.chaff.shutdown { var bufTmp []byte bufTmp = make([]byte, rand.Intn(int(hc.chaff.szMax))) min := int(hc.chaff.msecsMin) @@ -1604,17 +1602,60 @@ func (hc *Conn) chaffHelper() { _, _ = rand.Read(bufTmp) _, err := hc.WritePacket(bufTmp, CSOChaff) if err != nil { - log.Println("[ *** error - chaffHelper quitting *** ]") - hc.chaff.enabled = false + log.Println("[ *** error - chaffHelper shutting down *** ]") + hc.chaff.shutdown = true break } - } - time.Sleep(time.Duration(nextDuration) * time.Millisecond) - if hc.chaff.shutdown { - log.Println("*** chaffHelper shutting down") + } else { + log.Println("[ *** chaffHelper shutting down *** ]") + break + } + time.Sleep(time.Duration(nextDuration) * time.Millisecond) + } + }() +} + +func (hc *Conn) StartupKeepAlive() { + hc.ResetKeepAlive() + log.Println("KeepAlive ENABLED") + hc.keepaliveHelper() +} + +func (hc *Conn) ShutdownKeepAlive() { + log.Println("Conn SHUTDOWN") + hc.SetStatus(CSEConnDead) + hc.Close() +} + +func (hc *Conn) ResetKeepAlive() { + hc.keepalive = 3 + log.Println("KeepAlive RESET") +} + +// Helper routine to spawn a keepalive goroutine for each Conn +func (hc *Conn) keepaliveHelper() { + go func() { + for { + nextDuration := 10000 + bufTmp := []byte{0x55, 0xaa} + _, err := hc.WritePacket(bufTmp, CSOKeepAlive) + //logger.LogDebug(fmt.Sprintf("[keepalive]\n")) + if err != nil { + logger.LogDebug(fmt.Sprintf("[ *** error - keepaliveHelper quitting *** ]\n")) + break + } + time.Sleep(time.Duration(nextDuration) * time.Millisecond) + hc.keepalive -= 1 + + //if rand.Intn(32) == 0 { + // hc.keepalive = 0 + //} + + if hc.keepalive == 0 { + logger.LogDebug(fmt.Sprintf("*** keepaliveHelper shutting down\n")) + hc.ShutdownKeepAlive() break } - } }() } From d0f8751b2b6d2594fbe7fa6eda2103b6479f20d9 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sun, 5 Nov 2023 16:40:12 -0800 Subject: [PATCH 69/94] debugging --- xsnet/net.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/xsnet/net.go b/xsnet/net.go index 6a671d7..e811995 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -1338,7 +1338,8 @@ func (hc Conn) Read(b []byte) (n int, err error) { // Throw away pkt if it's chaff (ie., caller to Read() won't see this data) log.Printf("[Chaff pkt, discarded (len %d)]\n", decryptN) case CSOKeepAlive: - //log.Printf("[KeepAlive pkt, discarded (len %d)]\n", decryptN) + logger.LogDebug(fmt.Sprintf("[got keepAlive pkt, discarded (len %d)]\n", decryptN)) + _ = binary.BigEndian.Uint16(payloadBytes[0:2]) hc.ResetKeepAlive() case CSOTermSize: fmt.Sscanf(string(payloadBytes), "%d %d", &hc.Rows, &hc.Cols) @@ -1639,7 +1640,7 @@ func (hc *Conn) keepaliveHelper() { nextDuration := 10000 bufTmp := []byte{0x55, 0xaa} _, err := hc.WritePacket(bufTmp, CSOKeepAlive) - //logger.LogDebug(fmt.Sprintf("[keepalive]\n")) + logger.LogDebug(fmt.Sprintf("[keepalive]\n")) if err != nil { logger.LogDebug(fmt.Sprintf("[ *** error - keepaliveHelper quitting *** ]\n")) break From 9244cc9785ec423d7fcc83e742b86a7c3f65ed8b Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sun, 5 Nov 2023 18:48:19 -0800 Subject: [PATCH 70/94] KeepAlive WIP. TODO: check exitStatus logic for shell 'exit' clean exit --- xs/xs.go | 3 ++- xsnet/consts.go | 4 +--- xsnet/net.go | 13 +++++++------ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/xs/xs.go b/xs/xs.go index 9ff83f9..98cfb40 100755 --- a/xs/xs.go +++ b/xs/xs.go @@ -1005,7 +1005,7 @@ func main() { //nolint: funlen, gocyclo loginTimeout := time.AfterFunc(30*time.Second, func() { //nolint:gomnd restoreTermState(oldState) fmt.Printf(" .. [login timeout]\n") - exitWithStatus(xsnet.CSOLoginTimeout) + exitWithStatus(xsnet.CSELoginTimeout) }) if authCookie == "" { @@ -1152,5 +1152,6 @@ func exitWithStatus(status int) { } } + fmt.Printf("[exitStatus:%d]\n", status) os.Exit(status) } diff --git a/xsnet/consts.go b/xsnet/consts.go index a95691f..e6a47fb 100644 --- a/xsnet/consts.go +++ b/xsnet/consts.go @@ -53,6 +53,7 @@ const ( CSECipherAlgDenied // server rejected proposed Cipher alg CSEHMACAlgDenied // server rejected proposed HMAC alg CSEConnDead // connection keepalives expired + CSELoginTimeout ) // Extended (>255 UNIX exit status) codes @@ -68,9 +69,6 @@ const ( CSOExitStatus // Remote cmd exit status CSOChaff // Dummy packet, do not pass beyond decryption - // Client side errors - CSOLoginTimeout - // Tunnel setup/control/status CSOTunSetup // client -> server tunnel setup request (dstport) CSOTunSetupAck // server -> client tunnel setup ack diff --git a/xsnet/net.go b/xsnet/net.go index e811995..5f21b94 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -1196,7 +1196,7 @@ func (hl *HKExListener) Accept() (hc Conn, err error) { // packet processing. // // See go doc io.Reader -func (hc Conn) Read(b []byte) (n int, err error) { +func (hc *Conn) Read(b []byte) (n int, err error) { for { if hc.dBuf.Len() > 0 { break @@ -1214,7 +1214,8 @@ func (hc Conn) Read(b []byte) (n int, err error) { return 0, io.EOF } if strings.HasSuffix(err.Error(), "use of closed network connection") { - logger.LogDebug(fmt.Sprintln("[Client hung up]")) + logger.LogDebug(fmt.Sprintln("[Client hung up(1)]")) + //!rlm hc.SetStatus(CSENone) //FIXME: re-examine this (exit 9 w/o it - 2023-11-05) return 0, io.EOF } etxt := fmt.Sprintf("** Failed read:%s (%s) **", "ctrlStatOp", err) @@ -1237,7 +1238,7 @@ func (hc Conn) Read(b []byte) (n int, err error) { return 0, io.EOF } if strings.HasSuffix(err.Error(), "use of closed network connection") { - logger.LogDebug(fmt.Sprintln("[Client hung up]")) + logger.LogDebug(fmt.Sprintln("[Client hung up(2)]")) return 0, io.EOF } etxt := fmt.Sprintf("** Failed read:%s (%s) **", "HMAC", err) @@ -1253,7 +1254,7 @@ func (hc Conn) Read(b []byte) (n int, err error) { return 0, io.EOF } if strings.HasSuffix(err.Error(), "use of closed network connection") { - logger.LogDebug(fmt.Sprintln("[Client hung up]")) + logger.LogDebug(fmt.Sprintln("[Client hung up(3)]")) return 0, io.EOF } etxt := fmt.Sprintf("** Failed read:%s (%s) **", "payloadLen", err) @@ -1276,7 +1277,7 @@ func (hc Conn) Read(b []byte) (n int, err error) { return 0, io.EOF } if strings.HasSuffix(err.Error(), "use of closed network connection") { - logger.LogDebug(fmt.Sprintln("[Client hung up]")) + logger.LogDebug(fmt.Sprintln("[Client hung up(4)]")) return 0, io.EOF } etxt := fmt.Sprintf("** Failed read:%s (%s) **", "payloadBytes", err) @@ -1647,7 +1648,7 @@ func (hc *Conn) keepaliveHelper() { } time.Sleep(time.Duration(nextDuration) * time.Millisecond) hc.keepalive -= 1 - + logger.LogDebug(fmt.Sprintf("[keepAlive is now %d]\n", hc.keepalive)) //if rand.Intn(32) == 0 { // hc.keepalive = 0 //} From 39a8bd2f03f074451e0969a10defcef8f121d3f5 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sun, 5 Nov 2023 19:05:23 -0800 Subject: [PATCH 71/94] Bump --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 61c2ae2..cf18072 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ VERSION := 0.9.5.5 .PHONY: lint vis clean common client server passwd\ subpkgs install uninstall reinstall scc - + ## Tag version of binaries with build info wrt. ## GO111MODULE(=on) and vendor/ setup vs. $GOPATH pkg builds ############################################################ From 908a1bcda2c3d17f51e54dd9db733f0287458a17 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Mon, 6 Nov 2023 21:57:19 -0800 Subject: [PATCH 72/94] Fix for ConnDead status --- Makefile | 2 +- xs/xs.go | 2 -- xsd/xsd.go | 21 ++++++++++++++------- xsnet/net.go | 5 +++-- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index 61c2ae2..f2def6e 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION := 0.9.5.5 +VERSION := 0.9.5.6-rc .PHONY: lint vis clean common client server passwd\ subpkgs install uninstall reinstall scc diff --git a/xs/xs.go b/xs/xs.go index 98cfb40..0f7cc85 100755 --- a/xs/xs.go +++ b/xs/xs.go @@ -1151,7 +1151,5 @@ func exitWithStatus(status int) { log.Fatal("could not write memory profile: ", err) //nolint:gocritic } } - - fmt.Printf("[exitStatus:%d]\n", status) os.Exit(status) } diff --git a/xsd/xsd.go b/xsd/xsd.go index 1c1db30..6c270db 100755 --- a/xsd/xsd.go +++ b/xsd/xsd.go @@ -286,21 +286,28 @@ func runShellAs(who, hname, ttype, cmd string, interactive bool, //nolint:funlen if interactive { if useSysLogin { - // Use the server's login binary (post-auth, which - // is still done via our own bcrypt file) - // - // Note login will drop privs to the intended user for us + // Use the server's login binary (post-auth) // // Things UNIX login does, like print the 'motd', // and use the shell specified by /etc/passwd, will be done // automagically, at the cost of another external tool // dependency. // + // One drawback of using 'login' is that the remote side + // cannot give us back the shell's exit code, since it + // exits back to 'login', which usually returns its own + // 0 status back to us. + // + // Note login will drop privs to the intended user for us. + // c = exec.Command(xs.GetTool("login"), "-f", "-p", who) //nolint:gosec } else { - // Using our separate login via local passwd file + // Run shell directly (which allows nonzero exit codes back to + // the local system upon shell exit, whereas 'login' does not.) // - // Note we must drop privs ourselves for the user shell + // Note we must drop privs ourselves for the user shell since + // we aren't using 'login' on the remote end which would do it + // for us. // c = exec.Command(xs.GetTool("bash"), "-i", "-l") //nolint:gosec c.SysProcAttr = &syscall.SysProcAttr{} @@ -412,7 +419,7 @@ func runShellAs(who, hname, ttype, cmd string, interactive bool, //nolint:funlen } conn.SetStatus(xsnet.CSOType(exitStatus)) } else { - logger.LogDebug("*** Main proc has exited. ***") //nolint:errcheck + logger.LogDebug(fmt.Sprintf("*** Main proc has exited (%d) ***", c.ProcessState.ExitCode())) //nolint:errcheck // Background jobs still may be running; close the // pty anyway, so the client can return before // wg.Wait() below completes (Issue #18) diff --git a/xsnet/net.go b/xsnet/net.go index 5f21b94..3ac54d7 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -1339,7 +1339,8 @@ func (hc *Conn) Read(b []byte) (n int, err error) { // Throw away pkt if it's chaff (ie., caller to Read() won't see this data) log.Printf("[Chaff pkt, discarded (len %d)]\n", decryptN) case CSOKeepAlive: - logger.LogDebug(fmt.Sprintf("[got keepAlive pkt, discarded (len %d)]\n", decryptN)) + //logger.LogDebug(fmt.Sprintf("[got keepAlive pkt, discarded (len %d)]\n", decryptN)) + // payload of keepalive (2 bytes) is not currently used (0x55aa fixed) _ = binary.BigEndian.Uint16(payloadBytes[0:2]) hc.ResetKeepAlive() case CSOTermSize: @@ -1625,7 +1626,6 @@ func (hc *Conn) StartupKeepAlive() { func (hc *Conn) ShutdownKeepAlive() { log.Println("Conn SHUTDOWN") - hc.SetStatus(CSEConnDead) hc.Close() } @@ -1655,6 +1655,7 @@ func (hc *Conn) keepaliveHelper() { if hc.keepalive == 0 { logger.LogDebug(fmt.Sprintf("*** keepaliveHelper shutting down\n")) + hc.SetStatus(CSEConnDead) hc.ShutdownKeepAlive() break } From 871f9a200cbc5c1f259e22dfc663679556bab545 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Mon, 6 Nov 2023 23:17:13 -0800 Subject: [PATCH 73/94] Experimental dead conn process kill logic --- xsd/xsd.go | 3 +++ xsnet/net.go | 9 ++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/xsd/xsd.go b/xsd/xsd.go index 6c270db..428d434 100755 --- a/xsd/xsd.go +++ b/xsd/xsd.go @@ -346,6 +346,9 @@ func runShellAs(who, hname, ttype, cmd string, interactive bool, //nolint:funlen defer func() { goutmp.Unput_utmp(utmpx) }() goutmp.Put_lastlog_entry("xs", who, pts, hname) + conn.Pproc = c.Process.Pid + //fmt.Printf("[process %d started]\n", c.Process.Pid) + log.Printf("[%s]\n", cmd) if err != nil { log.Printf("Command finished with error: %v", err) diff --git a/xsnet/net.go b/xsnet/net.go index 3ac54d7..103086d 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -39,6 +39,7 @@ import ( "net" "strings" "sync" + "syscall" "time" hkex "blitter.com/go/herradurakex" @@ -87,6 +88,7 @@ type ( Cols uint16 keepalive uint // if this reaches zero, conn is considered dead + Pproc int // proc ID of command run on this conn chaff ChaffConfig tuns *map[uint16](*TunEndpoint) @@ -1649,7 +1651,8 @@ func (hc *Conn) keepaliveHelper() { time.Sleep(time.Duration(nextDuration) * time.Millisecond) hc.keepalive -= 1 logger.LogDebug(fmt.Sprintf("[keepAlive is now %d]\n", hc.keepalive)) - //if rand.Intn(32) == 0 { + + //if rand.Intn(8) == 0 { // hc.keepalive = 0 //} @@ -1657,6 +1660,10 @@ func (hc *Conn) keepaliveHelper() { logger.LogDebug(fmt.Sprintf("*** keepaliveHelper shutting down\n")) hc.SetStatus(CSEConnDead) hc.ShutdownKeepAlive() + if hc.Pproc != 0 { + //fmt.Printf("[pid %d needs to be killed]\n", hc.Pproc) + syscall.Kill(hc.Pproc, syscall.SIGABRT) //nolint:errcheck + } break } } From c569a5a3c9e8b76175c68080bb55d2d6f72c05dc Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Tue, 7 Nov 2023 00:38:51 -0800 Subject: [PATCH 74/94] Removed debug stmts to do with keepalive --- xsnet/net.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xsnet/net.go b/xsnet/net.go index 103086d..4460042 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -1643,14 +1643,14 @@ func (hc *Conn) keepaliveHelper() { nextDuration := 10000 bufTmp := []byte{0x55, 0xaa} _, err := hc.WritePacket(bufTmp, CSOKeepAlive) - logger.LogDebug(fmt.Sprintf("[keepalive]\n")) + //logger.LogDebug(fmt.Sprintf("[keepalive]\n")) if err != nil { logger.LogDebug(fmt.Sprintf("[ *** error - keepaliveHelper quitting *** ]\n")) break } time.Sleep(time.Duration(nextDuration) * time.Millisecond) hc.keepalive -= 1 - logger.LogDebug(fmt.Sprintf("[keepAlive is now %d]\n", hc.keepalive)) + //logger.LogDebug(fmt.Sprintf("[keepAlive is now %d]\n", hc.keepalive)) //if rand.Intn(8) == 0 { // hc.keepalive = 0 From 032baf63d62546c1b1110d5238a5119110bf9622 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Wed, 15 Nov 2023 00:32:50 -0800 Subject: [PATCH 75/94] Added rekeying (-r secs) client/server --- Makefile | 2 +- xs/xs.go | 16 ++++++++----- xsd/xsd.go | 23 +++++++++++------- xsnet/chan.go | 6 ++--- xsnet/consts.go | 1 + xsnet/net.go | 62 ++++++++++++++++++++++++++++++++++++++++--------- 6 files changed, 80 insertions(+), 30 deletions(-) diff --git a/Makefile b/Makefile index e61084f..0c7b358 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION := 0.9.5.6-rc +VERSION := 0.9.6 .PHONY: lint vis clean common client server passwd\ subpkgs install uninstall reinstall scc diff --git a/xs/xs.go b/xs/xs.go index 0f7cc85..e941b4c 100755 --- a/xs/xs.go +++ b/xs/xs.go @@ -701,11 +701,11 @@ func main() { //nolint: funlen, gocyclo port uint cmdStr string tunSpecStr string // lport1:rport1[,lport2:rport2,...] - - copySrc []byte - copyDst string - copyQuiet bool - copyLimitBPS uint + rekeySecs uint + copySrc []byte + copyDst string + copyQuiet bool + copyLimitBPS uint authCookie string chaffEnabled bool @@ -745,7 +745,8 @@ func main() { //nolint: funlen, gocyclo KEX_FRODOKEM_976AES KEX_FRODOKEM_976SHAKE`) flag.StringVar(&kcpMode, "K", "unused", "KCP `alg`, one of [KCP_NONE | KCP_AES | KCP_BLOWFISH | KCP_CAST5 | KCP_SM4 | KCP_SALSA20 | KCP_SIMPLEXOR | KCP_TEA | KCP_3DES | KCP_TWOFISH | KCP_XTEA] to use KCP (github.com/xtaci/kcp-go) reliable UDP instead of TCP") //nolint:lll - flag.UintVar(&port, "p", 2000, "``port") //nolint:gomnd,lll + flag.UintVar(&port, "p", 2000, "``port") //nolint:gomnd,lll + flag.UintVar(&rekeySecs, "r", 300, "rekey interval in `secs`") //nolint:gocritic,nolintlint // flag.StringVar(&authCookie, "a", "", "auth cookie") flag.BoolVar(&chaffEnabled, "e", true, "enable chaff pkts") flag.UintVar(&chaffFreqMin, "f", 100, "chaff pkt freq min `msecs`") //nolint:gomnd @@ -972,6 +973,9 @@ func main() { //nolint: funlen, gocyclo exitWithStatus(XSNetDialFailed) } + conn.RekeyHelper(rekeySecs) + defer conn.ShutdownRekey() + // === Shell terminal mode (Shell vs. Copy) setup // Set stdin in raw mode if it's an interactive session diff --git a/xsd/xsd.go b/xsd/xsd.go index 428d434..e7081c1 100755 --- a/xsd/xsd.go +++ b/xsd/xsd.go @@ -529,11 +529,13 @@ func main() { //nolint:funlen,gocyclo var chaffBytesMax uint var dbg bool var laddr string + var rekeySecs uint var useSystemPasswd bool flag.BoolVar(&vopt, "v", false, "show version") - flag.StringVar(&laddr, "l", ":2000", "interface[:port] to listen") + flag.UintVar(&rekeySecs, "r", 300, "rekey interval in `secs`") + flag.StringVar(&laddr, "l", ":2000", "interface[:port] to listen") //nolint:gomnd,lll flag.StringVar(&kcpMode, "K", "unused", `set to one of ["KCP_NONE","KCP_AES", "KCP_BLOWFISH", "KCP_CAST5", "KCP_SM4", "KCP_SALSA20", "KCP_SIMPLEXOR", "KCP_TEA", "KCP_3DES", "KCP_TWOFISH", "KCP_XTEA"] to use KCP (github.com/xtaci/kcp-go) reliable UDP instead of TCP`) //nolint:lll flag.BoolVar(&useSysLogin, "L", false, "use system login") flag.BoolVar(&chaffEnabled, "e", true, "enable chaff pkts") @@ -646,22 +648,22 @@ func main() { //nolint:funlen,gocyclo go func() { for { sig := <-exitCh - switch sig.String() { - case "terminated": - logger.LogNotice(fmt.Sprintf("[Got signal: %s]", sig)) //nolint:errcheck + switch sig { + case syscall.SIGTERM: //"terminated": + logger.LogNotice(fmt.Sprintf("[Got signal: %s]", sig.String())) //nolint:errcheck signal.Reset() syscall.Kill(0, syscall.SIGTERM) //nolint:errcheck - case "interrupt": - logger.LogNotice(fmt.Sprintf("[Got signal: %s]", sig)) //nolint:errcheck + case syscall.SIGINT: //"interrupt": + logger.LogNotice(fmt.Sprintf("[Got signal: %s]", sig.String())) //nolint:errcheck signal.Reset() syscall.Kill(0, syscall.SIGINT) //nolint:errcheck - case "hangup": - logger.LogNotice(fmt.Sprintf("[Got signal: %s - nop]", sig)) //nolint:errcheck + case syscall.SIGHUP: //"hangup": + logger.LogNotice(fmt.Sprintf("[Got signal: %s - nop]", sig.String())) //nolint:errcheck if cpuprofile != "" || memprofile != "" { dumpProf() } default: - logger.LogNotice(fmt.Sprintf("[Got signal: %s - ignored]", sig)) //nolint:errcheck + logger.LogNotice(fmt.Sprintf("[Got signal: %s - ignored]", sig.String())) //nolint:errcheck } } }() @@ -700,6 +702,8 @@ func main() { //nolint:funlen,gocyclo } else { log.Println("Accepted client") + conn.RekeyHelper(rekeySecs) + // Set up chaffing to client // Will only start when runShellAs() is called // after stdin/stdout are hooked up @@ -709,6 +713,7 @@ func main() { //nolint:funlen,gocyclo // The loop then returns to accepting, so that // multiple connections may be served concurrently. go func(hc *xsnet.Conn) (e error) { + defer hc.ShutdownRekey() defer hc.Close() // Start login timeout here and disconnect if user/pass phase stalls diff --git a/xsnet/chan.go b/xsnet/chan.go index 6e5a0f3..40babee 100644 --- a/xsnet/chan.go +++ b/xsnet/chan.go @@ -57,9 +57,9 @@ func expandKeyMat(keymat []byte, blocksize int) []byte { return keymat } -/* Support functionality to set up encryption after a channel has -been negotiated via xsnet.go -*/ +/* (Re-)initialize the keystream and hmac state for an xsnet.Conn, returning + a cipherStream and hash + */ func (hc *Conn) getStream(keymat []byte) (rc cipher.Stream, mc hash.Hash, err error) { var key []byte var block cipher.Block diff --git a/xsnet/consts.go b/xsnet/consts.go index e6a47fb..b491a87 100644 --- a/xsnet/consts.go +++ b/xsnet/consts.go @@ -78,6 +78,7 @@ const ( CSOTunDisconn // server -> client: tunnel rport disconnected CSOTunHangup // client -> server: tunnel lport hung up CSOKeepAlive // bidir keepalive packet to monitor main connection + CSORekey // TODO: rekey/re-select session cipher/hash algs ) // TunEndpoint.tunCtl control values - used to control workers for client diff --git a/xsnet/net.go b/xsnet/net.go index 4460042..3a6789d 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -88,6 +88,7 @@ type ( Cols uint16 keepalive uint // if this reaches zero, conn is considered dead + rekey uint // if nonzero, rekeying interval in seconds Pproc int // proc ID of command run on this conn chaff ChaffConfig tuns *map[uint16](*TunEndpoint) @@ -1345,6 +1346,12 @@ func (hc *Conn) Read(b []byte) (n int, err error) { // payload of keepalive (2 bytes) is not currently used (0x55aa fixed) _ = binary.BigEndian.Uint16(payloadBytes[0:2]) hc.ResetKeepAlive() + case CSORekey: + // rekey + //logger.LogDebug(fmt.Sprintf("[Got rekey [%02x %02x %02x ...]\n", + // payloadBytes[0], payloadBytes[1], payloadBytes[2])) + rekeyData := payloadBytes + hc.r, hc.rm, err = hc.getStream(rekeyData) case CSOTermSize: fmt.Sscanf(string(payloadBytes), "%d %d", &hc.Rows, &hc.Cols) log.Printf("[TermSize pkt: rows %v cols %v]\n", hc.Rows, hc.Cols) @@ -1461,13 +1468,18 @@ func (hc *Conn) Read(b []byte) (n int, err error) { // Write a byte slice // // See go doc io.Writer -func (hc Conn) Write(b []byte) (n int, err error) { +func (hc *Conn) Write(b []byte) (n int, err error) { + //logger.LogDebug("[+Write]") n, err = hc.WritePacket(b, CSONone) + //logger.LogDebug("[-Write]") return n, err } // Write a byte slice with specified ctrlStatOp byte func (hc *Conn) WritePacket(b []byte, ctrlStatOp byte) (n int, err error) { + hc.Lock() + defer hc.Unlock() + //log.Printf("[Encrypting...]\r\n") var hmacOut []uint8 var payloadLen uint32 @@ -1495,15 +1507,6 @@ func (hc *Conn) WritePacket(b []byte, ctrlStatOp byte) (n int, err error) { b = append([]byte{byte(padSide)}, append([]byte{byte(padLen)}, append(b, padBytes...)...)...) } - // N.B. Originally this Lock() surrounded only the - // calls to binary.Write(hc.c ..) however there appears - // to be some other unshareable state in the Conn - // struct that must be protected to serialize main and - // chaff data written to it. - // - // Would be nice to determine if the mutex scope - // could be tightened. - hc.Lock() payloadLen = uint32(len(b)) if hc.logPlainText { log.Printf(" >:ptext:\r\n%s\r\n", hex.Dump(b[0:payloadLen])) @@ -1561,7 +1564,6 @@ func (hc *Conn) WritePacket(b []byte, ctrlStatOp byte) (n int, err error) { } else { //fmt.Println("[a]WriteError!") } - hc.Unlock() if err != nil { log.Println(err) @@ -1593,6 +1595,40 @@ func (hc *Conn) SetupChaff(msecsMin uint, msecsMax uint, szMax uint) { hc.chaff.szMax = szMax } +func (hc *Conn) ShutdownRekey() { + hc.rekey = 0 +} + +func (hc *Conn) RekeyHelper(intervalSecs uint) { + go func() { + hc.rekey = intervalSecs + for { + if hc.rekey != 0 { + //logger.LogDebug(fmt.Sprintf("[rekeyHelper Loop]\n")) + time.Sleep(time.Duration(hc.rekey) * time.Second) + + // Send rekey to other end + rekeyData := make([]byte, 64) + _, err := crand.Read(rekeyData) + //logger.LogDebug(fmt.Sprintf("[rekey [%02x %02x %02x ...]\n", + // rekeyData[0], rekeyData[1], rekeyData[2])) + //logger.LogDebug("[+rekeyHelper]") + _, err = hc.WritePacket(rekeyData, CSORekey) + hc.Lock() + hc.w, hc.wm, err = hc.getStream(rekeyData) + //logger.LogDebug("[-rekeyHelper]") + hc.Unlock() + if err != nil { + log.Printf("[rekey WritePacket err! (%v) rekey dying ...]\n", err) + return + } + } else { + return + } + } + }() +} + // Helper routine to spawn a chaffing goroutine for each Conn func (hc *Conn) chaffHelper() { go func() { @@ -1605,7 +1641,9 @@ func (hc *Conn) chaffHelper() { min := int(hc.chaff.msecsMin) nextDuration = rand.Intn(int(hc.chaff.msecsMax)-min) + min _, _ = rand.Read(bufTmp) + //logger.LogDebug("[+chaffHelper]") _, err := hc.WritePacket(bufTmp, CSOChaff) + //logger.LogDebug("[-chaffHelper]") if err != nil { log.Println("[ *** error - chaffHelper shutting down *** ]") hc.chaff.shutdown = true @@ -1642,7 +1680,9 @@ func (hc *Conn) keepaliveHelper() { for { nextDuration := 10000 bufTmp := []byte{0x55, 0xaa} + //logger.LogDebug("[+keepaliveHelper]") _, err := hc.WritePacket(bufTmp, CSOKeepAlive) + //logger.LogDebug("[-keepaliveHelper]") //logger.LogDebug(fmt.Sprintf("[keepalive]\n")) if err != nil { logger.LogDebug(fmt.Sprintf("[ *** error - keepaliveHelper quitting *** ]\n")) From 32b669192b3c30155f9618ee9f6c1db5f6e382a0 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sat, 2 Dec 2023 01:58:30 -0800 Subject: [PATCH 76/94] Add optional cipher/hmac algo remodulate on rekey --- Makefile | 2 +- xs/xs.go | 12 ++++++++++-- xsd/xsd.go | 20 +++++++++++++++++++- xsnet/chan.go | 17 ++++++++++++++--- xsnet/consts.go | 14 ++++++++++++++ xsnet/net.go | 49 +++++++++++++++++++++++++++++++++++++++++++++---- 6 files changed, 103 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index 0c7b358..8f7e048 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION := 0.9.6 +VERSION := 0.9.7 .PHONY: lint vis clean common client server passwd\ subpkgs install uninstall reinstall scc diff --git a/xs/xs.go b/xs/xs.go index e941b4c..b232afc 100755 --- a/xs/xs.go +++ b/xs/xs.go @@ -702,6 +702,7 @@ func main() { //nolint: funlen, gocyclo cmdStr string tunSpecStr string // lport1:rport1[,lport2:rport2,...] rekeySecs uint + remodRequested bool // true: when rekeying, switch to random cipher/hmac alg copySrc []byte copyDst string copyQuiet bool @@ -745,8 +746,9 @@ func main() { //nolint: funlen, gocyclo KEX_FRODOKEM_976AES KEX_FRODOKEM_976SHAKE`) flag.StringVar(&kcpMode, "K", "unused", "KCP `alg`, one of [KCP_NONE | KCP_AES | KCP_BLOWFISH | KCP_CAST5 | KCP_SM4 | KCP_SALSA20 | KCP_SIMPLEXOR | KCP_TEA | KCP_3DES | KCP_TWOFISH | KCP_XTEA] to use KCP (github.com/xtaci/kcp-go) reliable UDP instead of TCP") //nolint:lll - flag.UintVar(&port, "p", 2000, "``port") //nolint:gomnd,lll + flag.UintVar(&port, "p", 2000, "``port") //nolint:gomnd,lll flag.UintVar(&rekeySecs, "r", 300, "rekey interval in `secs`") + flag.BoolVar(&remodRequested, "R", false, "Borg Countermeasures (remodulate cipher/hmac alg on each rekey)") //nolint:gocritic,nolintlint // flag.StringVar(&authCookie, "a", "", "auth cookie") flag.BoolVar(&chaffEnabled, "e", true, "enable chaff pkts") flag.UintVar(&chaffFreqMin, "f", 100, "chaff pkt freq min `msecs`") //nolint:gomnd @@ -967,7 +969,13 @@ func main() { //nolint: funlen, gocyclo if kcpMode != "unused" { proto = "kcp" } - conn, err := xsnet.Dial(proto, server, cipherAlg, hmacAlg, kexAlg, kcpMode) + + remodExtArg := "" + if remodRequested { + remodExtArg = "OPT_REMOD" + } + // Pass opt to Dial() via extensions arg + conn, err := xsnet.Dial(proto, server, cipherAlg, hmacAlg, kexAlg, kcpMode, remodExtArg) if err != nil { fmt.Println(err) exitWithStatus(XSNetDialFailed) diff --git a/xsd/xsd.go b/xsd/xsd.go index e7081c1..e90e3e3 100755 --- a/xsd/xsd.go +++ b/xsd/xsd.go @@ -530,12 +530,14 @@ func main() { //nolint:funlen,gocyclo var dbg bool var laddr string var rekeySecs uint + var remodSupported bool // true: when rekeying, switch to random cipher/hmac alg var useSystemPasswd bool flag.BoolVar(&vopt, "v", false, "show version") flag.UintVar(&rekeySecs, "r", 300, "rekey interval in `secs`") - flag.StringVar(&laddr, "l", ":2000", "interface[:port] to listen") //nolint:gomnd,lll + flag.BoolVar(&remodSupported, "R", false, "Borg Countermeasures (remodulate cipher/hmac alg on each rekey)") + flag.StringVar(&laddr, "l", ":2000", "interface[:port] to listen") //nolint:gomnd,lll flag.StringVar(&kcpMode, "K", "unused", `set to one of ["KCP_NONE","KCP_AES", "KCP_BLOWFISH", "KCP_CAST5", "KCP_SM4", "KCP_SALSA20", "KCP_SIMPLEXOR", "KCP_TEA", "KCP_3DES", "KCP_TWOFISH", "KCP_XTEA"] to use KCP (github.com/xtaci/kcp-go) reliable UDP instead of TCP`) //nolint:lll flag.BoolVar(&useSysLogin, "L", false, "use system login") flag.BoolVar(&chaffEnabled, "e", true, "enable chaff pkts") @@ -702,6 +704,22 @@ func main() { //nolint:funlen,gocyclo } else { log.Println("Accepted client") + // Only enable cipher alg changes on re-key if we were told + // to support it (launching xsd with -R), *and* the client + // proposes to use it. + if !remodSupported { + if (conn.Opts() & xsnet.CORemodulateShields) != 0 { + logger.LogDebug("[client proposed cipher/hmac remod, but we don't support it.]") + conn.Close() + continue + } + } else { + if conn.Opts()&xsnet.CORemodulateShields != 0 { + logger.LogDebug("[cipher/hmac remodulation active]") + } else { + logger.LogDebug("[cipher/hmac remodulation inactive]") + } + } conn.RekeyHelper(rekeySecs) // Set up chaffing to client diff --git a/xsnet/chan.go b/xsnet/chan.go index 40babee..4b4e82d 100644 --- a/xsnet/chan.go +++ b/xsnet/chan.go @@ -22,6 +22,7 @@ import ( "blitter.com/go/cryptmt" "blitter.com/go/hopscotch" + "blitter.com/go/xs/logger" "github.com/aead/chacha20/chacha" "golang.org/x/crypto/blowfish" "golang.org/x/crypto/twofish" @@ -57,9 +58,19 @@ func expandKeyMat(keymat []byte, blocksize int) []byte { return keymat } -/* (Re-)initialize the keystream and hmac state for an xsnet.Conn, returning - a cipherStream and hash - */ +// Choose a cipher and hmac alg from supported sets, given two uint8 values +func getNewStreamAlgs(cb uint8, hb uint8) (config uint32) { + // Get new cipher and hash algs (clamped to valid values) based on + // the input rekeying data + c := (cb % CAlgNoneDisallowed) + h := (hb % HmacNoneDisallowed) + config = uint32(h<<8) | uint32(c) + logger.LogDebug(fmt.Sprintf("[Chose new algs [%d:%d]", h, c)) + return +} + +// (Re-)initialize the keystream and hmac state for an xsnet.Conn, returning +// a cipherStream and hash func (hc *Conn) getStream(keymat []byte) (rc cipher.Stream, mc hash.Hash, err error) { var key []byte var block cipher.Block diff --git a/xsnet/consts.go b/xsnet/consts.go index b491a87..87015b3 100644 --- a/xsnet/consts.go +++ b/xsnet/consts.go @@ -122,5 +122,19 @@ const ( HmacNoneDisallowed ) +// Conn opts outside of basic kex/cipher/hmac connect config +const ( + CONone = iota + CORemodulateShields // if set, rekeying also reselects random cipher/hmac alg +) + +type COValue uint32 + // Available HMACs for hkex.Conn type CSHmacAlg uint32 + +// Some bounds-checking consts +const ( + REKEY_SECS_MIN = 1 + CHAFF_FREQ_MSECS_MIN = 1 +) diff --git a/xsnet/net.go b/xsnet/net.go index 3a6789d..f200c63 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -241,7 +241,7 @@ func (hc *Conn) SetConnOpts(copts uint32) { // // Consumers of this lib may use this for protocol-level options not part // of the KEx or encryption info used by the connection. -func (hc Conn) Opts() uint32 { +func (hc *Conn) Opts() uint32 { return hc.opts } @@ -363,6 +363,9 @@ func (hc *Conn) applyConnExtensions(extensions ...string) { log.Println("[extension arg = H_SHA512]") hc.cipheropts &= (0xFFFF00FF) hc.cipheropts |= (HmacSHA512 << 8) + case "OPT_REMOD": + log.Println("[extension arg = OPT_REMOD]") + hc.opts |= CORemodulateShields //default: // log.Printf("[Dial ext \"%s\" ignored]\n", s) } @@ -1351,6 +1354,11 @@ func (hc *Conn) Read(b []byte) (n int, err error) { //logger.LogDebug(fmt.Sprintf("[Got rekey [%02x %02x %02x ...]\n", // payloadBytes[0], payloadBytes[1], payloadBytes[2])) rekeyData := payloadBytes + if (hc.opts & CORemodulateShields) != 0 { + hc.Lock() + hc.cipheropts = getNewStreamAlgs(rekeyData[0], rekeyData[1]) + hc.Unlock() + } hc.r, hc.rm, err = hc.getStream(rekeyData) case CSOTermSize: fmt.Sscanf(string(payloadBytes), "%d %d", &hc.Rows, &hc.Cols) @@ -1585,7 +1593,9 @@ func (hc *Conn) StartupChaff() { } func (hc *Conn) ShutdownChaff() { + hc.Lock() hc.chaff.shutdown = true + hc.Unlock() log.Println("Chaffing SHUTDOWN") } @@ -1596,16 +1606,28 @@ func (hc *Conn) SetupChaff(msecsMin uint, msecsMax uint, szMax uint) { } func (hc *Conn) ShutdownRekey() { + hc.Lock() hc.rekey = 0 + hc.Unlock() } func (hc *Conn) RekeyHelper(intervalSecs uint) { + if intervalSecs < REKEY_SECS_MIN { + intervalSecs = REKEY_SECS_MIN + } + go func() { + hc.Lock() hc.rekey = intervalSecs + hc.Unlock() + for { - if hc.rekey != 0 { + hc.Lock() + rekey := hc.rekey + hc.Unlock() + if rekey != 0 { //logger.LogDebug(fmt.Sprintf("[rekeyHelper Loop]\n")) - time.Sleep(time.Duration(hc.rekey) * time.Second) + time.Sleep(time.Duration(rekey) * time.Second) // Send rekey to other end rekeyData := make([]byte, 64) @@ -1615,6 +1637,9 @@ func (hc *Conn) RekeyHelper(intervalSecs uint) { //logger.LogDebug("[+rekeyHelper]") _, err = hc.WritePacket(rekeyData, CSORekey) hc.Lock() + if (hc.opts & CORemodulateShields) != 0 { + hc.cipheropts = getNewStreamAlgs(rekeyData[0], rekeyData[1]) + } hc.w, hc.wm, err = hc.getStream(rekeyData) //logger.LogDebug("[-rekeyHelper]") hc.Unlock() @@ -1631,11 +1656,21 @@ func (hc *Conn) RekeyHelper(intervalSecs uint) { // Helper routine to spawn a chaffing goroutine for each Conn func (hc *Conn) chaffHelper() { + // Enforce bounds on chaff frequency and pkt size + hc.Lock() + if hc.chaff.msecsMin < CHAFF_FREQ_MSECS_MIN { + hc.chaff.msecsMin = CHAFF_FREQ_MSECS_MIN + } + hc.Unlock() + go func() { var nextDuration int for { //logger.LogDebug(fmt.Sprintf("[chaffHelper Loop]\n")) - if !hc.chaff.shutdown { + hc.Lock() + shutdown := hc.chaff.shutdown + hc.Unlock() + if !shutdown { var bufTmp []byte bufTmp = make([]byte, rand.Intn(int(hc.chaff.szMax))) min := int(hc.chaff.msecsMin) @@ -1646,7 +1681,9 @@ func (hc *Conn) chaffHelper() { //logger.LogDebug("[-chaffHelper]") if err != nil { log.Println("[ *** error - chaffHelper shutting down *** ]") + hc.Lock() hc.chaff.shutdown = true + hc.Unlock() break } } else { @@ -1670,7 +1707,9 @@ func (hc *Conn) ShutdownKeepAlive() { } func (hc *Conn) ResetKeepAlive() { + hc.Lock() hc.keepalive = 3 + hc.Unlock() log.Println("KeepAlive RESET") } @@ -1689,7 +1728,9 @@ func (hc *Conn) keepaliveHelper() { break } time.Sleep(time.Duration(nextDuration) * time.Millisecond) + hc.Lock() hc.keepalive -= 1 + hc.Unlock() //logger.LogDebug(fmt.Sprintf("[keepAlive is now %d]\n", hc.keepalive)) //if rand.Intn(8) == 0 { From 6212119621a8285291fe00a1cef7e4e596f16676 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sun, 3 Dec 2023 19:22:05 -0800 Subject: [PATCH 77/94] Added max bounds for chaff, rekey intervals and random jitter for rekey interval --- Makefile | 2 +- xsnet/consts.go | 2 ++ xsnet/net.go | 27 ++++++++++++++++++++------- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 8f7e048..af6e51e 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION := 0.9.7 +VERSION := 0.9.8 .PHONY: lint vis clean common client server passwd\ subpkgs install uninstall reinstall scc diff --git a/xsnet/consts.go b/xsnet/consts.go index 87015b3..5c03c15 100644 --- a/xsnet/consts.go +++ b/xsnet/consts.go @@ -136,5 +136,7 @@ type CSHmacAlg uint32 // Some bounds-checking consts const ( REKEY_SECS_MIN = 1 + REKEY_SECS_MAX = 28800 // 8 hours CHAFF_FREQ_MSECS_MIN = 1 + CHAFF_FREQ_MSECS_MAX = 300000 // 5 minutes ) diff --git a/xsnet/net.go b/xsnet/net.go index f200c63..0a576ab 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -1600,6 +1600,16 @@ func (hc *Conn) ShutdownChaff() { } func (hc *Conn) SetupChaff(msecsMin uint, msecsMax uint, szMax uint) { + // Enforce bounds on chaff frequency and pkt size + hc.Lock() + if hc.chaff.msecsMin < CHAFF_FREQ_MSECS_MIN { + hc.chaff.msecsMin = CHAFF_FREQ_MSECS_MIN + } + if hc.chaff.msecsMax > CHAFF_FREQ_MSECS_MAX { + hc.chaff.msecsMax = CHAFF_FREQ_MSECS_MAX + } + hc.Unlock() + hc.chaff.msecsMin = msecsMin //move these to params of chaffHelper() ? hc.chaff.msecsMax = msecsMax hc.chaff.szMax = szMax @@ -1615,6 +1625,9 @@ func (hc *Conn) RekeyHelper(intervalSecs uint) { if intervalSecs < REKEY_SECS_MIN { intervalSecs = REKEY_SECS_MIN } + if intervalSecs > REKEY_SECS_MAX { + intervalSecs = REKEY_SECS_MAX + } go func() { hc.Lock() @@ -1625,7 +1638,14 @@ func (hc *Conn) RekeyHelper(intervalSecs uint) { hc.Lock() rekey := hc.rekey hc.Unlock() + if rekey != 0 { + jitter := rand.Intn(int(rekey)) / 4 + rekey = rekey - uint(jitter) + if rekey < 1 { + rekey = 1 + } + //logger.LogDebug(fmt.Sprintf("[rekeyHelper Loop]\n")) time.Sleep(time.Duration(rekey) * time.Second) @@ -1656,13 +1676,6 @@ func (hc *Conn) RekeyHelper(intervalSecs uint) { // Helper routine to spawn a chaffing goroutine for each Conn func (hc *Conn) chaffHelper() { - // Enforce bounds on chaff frequency and pkt size - hc.Lock() - if hc.chaff.msecsMin < CHAFF_FREQ_MSECS_MIN { - hc.chaff.msecsMin = CHAFF_FREQ_MSECS_MIN - } - hc.Unlock() - go func() { var nextDuration int for { From 08cccb692974c15f90903251b414ec86439fa43f Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Mon, 29 Jan 2024 18:40:26 -0800 Subject: [PATCH 78/94] Moved .xs_id to ~/.config/xs --- xs/xs.go | 2 +- xsd/xsd.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/xs/xs.go b/xs/xs.go index b232afc..dde5a66 100755 --- a/xs/xs.go +++ b/xs/xs.go @@ -887,7 +887,7 @@ func main() { //nolint: funlen, gocyclo if !gopt { // See if we can log in via an auth token u, _ := user.Current() - ab, aerr := os.ReadFile(fmt.Sprintf("%s/.xs_id", u.HomeDir)) + ab, aerr := os.ReadFile(fmt.Sprintf("%s/.config/xs/.xs_id", u.HomeDir)) if aerr == nil { for _, line := range strings.Split(string(ab), "\n") { line += "\n" diff --git a/xsd/xsd.go b/xsd/xsd.go index e90e3e3..8139235 100755 --- a/xsd/xsd.go +++ b/xsd/xsd.go @@ -841,7 +841,7 @@ func main() { //nolint:funlen,gocyclo hname := goutmp.GetHost(addr.String()) logger.LogNotice(fmt.Sprintf("[Generating autologin token for [%s@%s]]\n", rec.Who(), hname)) //nolint:errcheck token := GenAuthToken(string(rec.Who()), string(rec.ConnHost())) - tokenCmd := fmt.Sprintf("echo %q | tee -a ~/.xs_id", token) + tokenCmd := fmt.Sprintf("echo %q | tee -a ~/.config/xs/.xs_id", token) cmdStatus, runErr := runShellAs(string(rec.Who()), hname, string(rec.TermType()), tokenCmd, false, hc, chaffEnabled) // Returned hopefully via an EOF or exit/logout; // Clear current op so user can enter next, or EOF From 713f44086abac21b63549d55800c1885aa1a338a Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Mon, 29 Jan 2024 18:43:24 -0800 Subject: [PATCH 79/94] Bumped version --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index af6e51e..9ec8725 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION := 0.9.8 +VERSION := 0.9.9 .PHONY: lint vis clean common client server passwd\ subpkgs install uninstall reinstall scc From 89ad0e0998313e196d76e19e5dba9927a57061d0 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Mon, 29 Jan 2024 18:56:21 -0800 Subject: [PATCH 80/94] Fixed missed authtoken file ref in auth.go --- auth.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/auth.go b/auth.go index 5f4f2ed..ecec371 100755 --- a/auth.go +++ b/auth.go @@ -154,7 +154,7 @@ func AuthUserByPasswd(ctx *AuthCtx, username string, auth string, fname string) // ------------- End xs-local passwd auth routine(s) ----------- // AuthUserByToken checks user login information against an auth token. -// Auth tokens are stored in each user's $HOME/.xs_id and are requested +// Auth tokens are stored in each user's $HOME/.config/xs/.xs_id and are requested // via the -g option. // The function also check system /etc/passwd to cross-check the user // actually exists. @@ -172,9 +172,9 @@ func AuthUserByToken(ctx *AuthCtx, username string, connhostname string, auth st return false } - b, e := ctx.reader(fmt.Sprintf("%s/.xs_id", u.HomeDir)) + b, e := ctx.reader(fmt.Sprintf("%s/.config/xs/.xs_id", u.HomeDir)) if e != nil { - log.Printf("INFO: Cannot read %s/.xs_id\n", u.HomeDir) + log.Printf("INFO: Cannot read %s/.config/xs/.xs_id\n", u.HomeDir) return false } From 17d7bc01ef30f582c89add38200b40da62e1d65b Mon Sep 17 00:00:00 2001 From: Russtopia Date: Mon, 29 Jan 2024 19:03:13 -0800 Subject: [PATCH 81/94] Update 'README.md' Updated references to .xs_id location --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 00aeb08..20f6af6 100644 --- a/README.md +++ b/README.md @@ -197,15 +197,17 @@ or is interrupted. ### Setting up an 'authtoken' for scripted (password-free) logins Use the -g option of xs to request a token from the remote server, which will return a -hostname:token string. Place this string into $HOME/.xs_id to allow logins without -entering a password (obviously, $HOME/.xs_id on both server and client for the user +hostname:token string. Place this string into $HOME/.config/xs/.xs_id to allow logins without +entering a password (obviously, $HOME/.config/xs/.xs_id on both server and client for the user should *not* be world-readable.) ``` -$ xs -g user@host.net >~/.xs_id +$ xs -g user@host.net >>~/.config/xs/.xs_id ``` -[enter password blindly, authtoken entry will be stored in ~/.xs_id] +[enter password blindly, authtoken entry will be stored in ~/.config/xs/.xs_id] +NOTE you may need to remove older entries for the same host if this is not the first time you have added +it to your .xs_id file. ### File Copying using xc From 8827d67cc6c415efbbe3208d05e254c27352ef4e Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Mon, 29 Jan 2024 21:37:07 -0800 Subject: [PATCH 82/94] unified refs to authtoken file to a const string --- auth.go | 5 +++-- xs/xs.go | 4 ++-- xsd/xsd.go | 2 +- xsnet/consts.go | 2 ++ 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/auth.go b/auth.go index ecec371..ebca33e 100755 --- a/auth.go +++ b/auth.go @@ -23,6 +23,7 @@ import ( "runtime" "strings" + "blitter.com/go/xs/xsnet" "github.com/jameskeane/bcrypt" passlib "gopkg.in/hlandau/passlib.v1" ) @@ -172,9 +173,9 @@ func AuthUserByToken(ctx *AuthCtx, username string, connhostname string, auth st return false } - b, e := ctx.reader(fmt.Sprintf("%s/.config/xs/.xs_id", u.HomeDir)) + b, e := ctx.reader(fmt.Sprintf("%s/%s", u.HomeDir, xsnet.XS_ID_AUTHTOKFILE)) if e != nil { - log.Printf("INFO: Cannot read %s/.config/xs/.xs_id\n", u.HomeDir) + log.Printf("INFO: Cannot read %s/%s\n", u.HomeDir, xsnet.XS_ID_AUTHTOKFILE) return false } diff --git a/xs/xs.go b/xs/xs.go index dde5a66..83c89c1 100755 --- a/xs/xs.go +++ b/xs/xs.go @@ -887,7 +887,7 @@ func main() { //nolint: funlen, gocyclo if !gopt { // See if we can log in via an auth token u, _ := user.Current() - ab, aerr := os.ReadFile(fmt.Sprintf("%s/.config/xs/.xs_id", u.HomeDir)) + ab, aerr := os.ReadFile(fmt.Sprintf("%s/%s", u.HomeDir, xsnet.XS_ID_AUTHTOKFILE)) if aerr == nil { for _, line := range strings.Split(string(ab), "\n") { line += "\n" @@ -905,7 +905,7 @@ func main() { //nolint: funlen, gocyclo _, _ = fmt.Fprintln(os.Stderr, "[no authtoken, use -g to request one from server]") } } else { - log.Printf("[cannot read %s/.xs_id]\n", u.HomeDir) + log.Printf("[cannot read %s/%s]\n", u.HomeDir, xsnet.XS_ID_AUTHTOKFILE) } } runtime.GC() diff --git a/xsd/xsd.go b/xsd/xsd.go index 8139235..346274b 100755 --- a/xsd/xsd.go +++ b/xsd/xsd.go @@ -841,7 +841,7 @@ func main() { //nolint:funlen,gocyclo hname := goutmp.GetHost(addr.String()) logger.LogNotice(fmt.Sprintf("[Generating autologin token for [%s@%s]]\n", rec.Who(), hname)) //nolint:errcheck token := GenAuthToken(string(rec.Who()), string(rec.ConnHost())) - tokenCmd := fmt.Sprintf("echo %q | tee -a ~/.config/xs/.xs_id", token) + tokenCmd := fmt.Sprintf("echo %q | tee -a ~/%s", token, xsnet.XS_ID_AUTHTOKFILE) cmdStatus, runErr := runShellAs(string(rec.Who()), hname, string(rec.TermType()), tokenCmd, false, hc, chaffEnabled) // Returned hopefully via an EOF or exit/logout; // Clear current op so user can enter next, or EOF diff --git a/xsnet/consts.go b/xsnet/consts.go index 5c03c15..1d7e9c8 100644 --- a/xsnet/consts.go +++ b/xsnet/consts.go @@ -140,3 +140,5 @@ const ( CHAFF_FREQ_MSECS_MIN = 1 CHAFF_FREQ_MSECS_MAX = 300000 // 5 minutes ) + +const XS_ID_AUTHTOKFILE = ".config/xs/.xs_id" From ae67ee620179dad28afd55c5e9a3a31c7f5b658e Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Mon, 29 Jan 2024 21:47:03 -0800 Subject: [PATCH 83/94] Fixed CI script --- bacillus/ci_pushbuild.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/bacillus/ci_pushbuild.sh b/bacillus/ci_pushbuild.sh index 9ecb3b6..c4a73f4 100755 --- a/bacillus/ci_pushbuild.sh +++ b/bacillus/ci_pushbuild.sh @@ -46,12 +46,12 @@ go test -v . ############ stage "Test(Authtoken)" ############ -if [ -f ~/.xs_id ]; then - echo "Clearing test user $USER ~/.xs_id file ..." - mv ~/.xs_id ~/.xs_id.bak +if [ -f ~/.config/xs/.xs_id ]; then + echo "Clearing test user $USER .xs_id file ..." + mv ~/.config/xs/.xs_id ~/.config/xs/.xs_id.bak fi -echo "Setting dummy authtoken in ~/.xs_id ..." -echo "localhost:${USER}:asdfasdfasdf" >~/.xs_id +echo "Setting dummy authtoken in .xs_id ..." +echo "localhost:${USER}:asdfasdfasdf" >~/.config/xs/.xs_id echo "Performing remote command on @localhost via authtoken login ..." tokentest=$(timeout 10 xs -x "echo -n FOO" @localhost) if [ "${tokentest}" != "FOO" ]; then @@ -91,9 +91,9 @@ stage "Test(xc C->S)" ############ echo "TODO ..." -if [ -f ~/.xs_id.bak ]; then - echo "Restoring test user $USER ~/.xs_id file ..." - mv ~/.xs_id.bak ~/.xs_id +if [ -f ~/.config/xs/.xs_id.bak ]; then + echo "Restoring test user $USER .xs_id file ..." + mv ~/.config/xs/.xs_id.bak ~/.config/xs/.xs_id fi ############ From 540cb8ff3ab7a4f7bf698c275ecf4037ba349a3f Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sun, 25 Feb 2024 21:14:00 -0800 Subject: [PATCH 84/94] gofmt --- xs/xs.go | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/xs/xs.go b/xs/xs.go index 83c89c1..c4ac922 100755 --- a/xs/xs.go +++ b/xs/xs.go @@ -689,24 +689,24 @@ func sendSessionParams(conn io.Writer /* *xsnet.Conn*/, rec *xs.Session) (e erro // TODO: reduce gocyclo func main() { //nolint: funlen, gocyclo var ( - isInteractive bool - vopt bool - gopt bool // true: login via password, asking server to generate authToken - dbg bool - shellMode bool // true: act as shell, false: file copier - cipherAlg string - hmacAlg string - kexAlg string - server string - port uint - cmdStr string - tunSpecStr string // lport1:rport1[,lport2:rport2,...] - rekeySecs uint - remodRequested bool // true: when rekeying, switch to random cipher/hmac alg - copySrc []byte - copyDst string - copyQuiet bool - copyLimitBPS uint + isInteractive bool + vopt bool + gopt bool // true: login via password, asking server to generate authToken + dbg bool + shellMode bool // true: act as shell, false: file copier + cipherAlg string + hmacAlg string + kexAlg string + server string + port uint + cmdStr string + tunSpecStr string // lport1:rport1[,lport2:rport2,...] + rekeySecs uint + remodRequested bool // true: when rekeying, switch to random cipher/hmac alg + copySrc []byte + copyDst string + copyQuiet bool + copyLimitBPS uint authCookie string chaffEnabled bool @@ -969,7 +969,7 @@ func main() { //nolint: funlen, gocyclo if kcpMode != "unused" { proto = "kcp" } - + remodExtArg := "" if remodRequested { remodExtArg = "OPT_REMOD" From 057a3c01c73ca78fd11aa37dba2cce2a9653ef06 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sun, 25 Feb 2024 21:14:20 -0800 Subject: [PATCH 85/94] Updated go.{mod,sum} --- go.mod | 24 +++++++++++------------- go.sum | 4 ---- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/go.mod b/go.mod index 0699d6f..f861aa2 100644 --- a/go.mod +++ b/go.mod @@ -3,36 +3,34 @@ module blitter.com/go/xs go 1.20 require ( - blitter.com/go/chacha20 v0.0.0-20200130200441-214e4085f54c blitter.com/go/cryptmt v1.0.2 blitter.com/go/goutmp v1.0.6 - blitter.com/go/groestl v0.0.0-20220410000905-c4decbf31d64 blitter.com/go/herradurakex v1.0.0 blitter.com/go/hopscotch v0.1.1 blitter.com/go/kyber v0.0.0-20200130200857-6f2021cb88d9 - blitter.com/go/mtwist v1.0.1 blitter.com/go/newhope v0.0.0-20200130200750-192fc08a8aae github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da github.com/creack/pty v1.1.18 github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f - github.com/klauspost/cpuid/v2 v2.2.5 - github.com/klauspost/reedsolomon v1.11.8 github.com/kuking/go-frodokem v1.0.2 github.com/mattn/go-isatty v0.0.19 - github.com/pkg/errors v0.9.1 - github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 - github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b - github.com/tjfoc/gmsm v1.4.1 github.com/xtaci/kcp-go v5.4.20+incompatible golang.org/x/crypto v0.13.0 - golang.org/x/net v0.15.0 golang.org/x/sys v0.12.0 - gopkg.in/hlandau/easymetric.v1 v1.0.0 - gopkg.in/hlandau/measurable.v1 v1.0.1 gopkg.in/hlandau/passlib.v1 v1.0.11 ) require ( + blitter.com/go/chacha20 v0.0.0-20200130200441-214e4085f54c // indirect + blitter.com/go/mtwist v1.0.1 // indirect + github.com/klauspost/cpuid/v2 v2.2.5 // indirect + github.com/klauspost/reedsolomon v1.11.8 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 // indirect + github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b // indirect + github.com/tjfoc/gmsm v1.4.1 // indirect github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37 // indirect - golang.org/x/text v0.13.0 // indirect + golang.org/x/net v0.15.0 // indirect + gopkg.in/hlandau/easymetric.v1 v1.0.0 // indirect + gopkg.in/hlandau/measurable.v1 v1.0.1 // indirect ) diff --git a/go.sum b/go.sum index a800c7a..188a92b 100644 --- a/go.sum +++ b/go.sum @@ -4,8 +4,6 @@ blitter.com/go/cryptmt v1.0.2 h1:ZcLhQk7onUssXyQwG3GdXDXctCVnNL+b7aFuvwOdKXc= blitter.com/go/cryptmt v1.0.2/go.mod h1:tdME2J3O4agaDAYIYNQzzuB28yVGnPSMmV3a/ucSU84= blitter.com/go/goutmp v1.0.6 h1:jRKRw2WalVBza4T50etAfbvT2xp9G5uykIHTvyB5r0k= blitter.com/go/goutmp v1.0.6/go.mod h1:DnK/uLBu1/1yLFiuVlmwvWErzAWVp+pDv7t6ZaQRLNc= -blitter.com/go/groestl v0.0.0-20220410000905-c4decbf31d64 h1:SH6cZ4JiOTmWGeVd5hCgt8gsMvfPPHWpEwNdxfsBugM= -blitter.com/go/groestl v0.0.0-20220410000905-c4decbf31d64/go.mod h1:YMdIR/gCtFwU/a09jyWAwUu2J9CQejUFwkfD+PyVg+4= blitter.com/go/herradurakex v1.0.0 h1:6XaxY+JLT1HUWPF0gYJnjX3pVjrw4YhYZEzZ1U0wkyc= blitter.com/go/herradurakex v1.0.0/go.mod h1:m3+vYZX+2dDjdo+n/HDnXEYJX9pwmNeQLgAfJM8mtxw= blitter.com/go/hopscotch v0.1.1 h1:hh809THr3I52J5G5QozNhDSd+qGwXWGqLh3FJBGrp+o= @@ -110,8 +108,6 @@ golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= From e42645a2b3df619667585c1f643333efe461b748 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Fri, 1 Mar 2024 23:34:14 -0800 Subject: [PATCH 86/94] Refreshed go.{mod,sum} and bumped semver in Makefile --- Makefile | 4 ++-- go.mod | 16 ++++++++-------- go.sum | 28 ++++++++++++++-------------- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/Makefile b/Makefile index 9ec8725..abbec41 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION := 0.9.9 +VERSION := 0.9.10 .PHONY: lint vis clean common client server passwd\ subpkgs install uninstall reinstall scc @@ -73,7 +73,7 @@ tools: common: $(GO) build . - go install . + go install -a . client: common diff --git a/go.mod b/go.mod index f861aa2..a47bc1d 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module blitter.com/go/xs -go 1.20 +go 1.22.0 require ( blitter.com/go/cryptmt v1.0.2 @@ -10,27 +10,27 @@ require ( blitter.com/go/kyber v0.0.0-20200130200857-6f2021cb88d9 blitter.com/go/newhope v0.0.0-20200130200750-192fc08a8aae github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da - github.com/creack/pty v1.1.18 + github.com/creack/pty v1.1.21 github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f github.com/kuking/go-frodokem v1.0.2 - github.com/mattn/go-isatty v0.0.19 + github.com/mattn/go-isatty v0.0.20 github.com/xtaci/kcp-go v5.4.20+incompatible - golang.org/x/crypto v0.13.0 - golang.org/x/sys v0.12.0 + golang.org/x/crypto v0.20.0 + golang.org/x/sys v0.17.0 gopkg.in/hlandau/passlib.v1 v1.0.11 ) require ( blitter.com/go/chacha20 v0.0.0-20200130200441-214e4085f54c // indirect blitter.com/go/mtwist v1.0.1 // indirect - github.com/klauspost/cpuid/v2 v2.2.5 // indirect - github.com/klauspost/reedsolomon v1.11.8 // indirect + github.com/klauspost/cpuid/v2 v2.2.6 // indirect + github.com/klauspost/reedsolomon v1.12.1 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 // indirect github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b // indirect github.com/tjfoc/gmsm v1.4.1 // indirect github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37 // indirect - golang.org/x/net v0.15.0 // indirect + golang.org/x/net v0.21.0 // indirect gopkg.in/hlandau/easymetric.v1 v1.0.0 // indirect gopkg.in/hlandau/measurable.v1 v1.0.1 // indirect ) diff --git a/go.sum b/go.sum index 188a92b..30048ce 100644 --- a/go.sum +++ b/go.sum @@ -21,8 +21,8 @@ github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSi github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= -github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0= +github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -45,14 +45,14 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f h1:UWGE8Vi+1Agt0lrvnd7UsmvwqWKRzb9byK9iQmsbY0Y= github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f/go.mod h1:u+9Snq0w+ZdYKi8BBoaxnEwWu0fY4Kvu9ByFpM51t1s= -github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= -github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= -github.com/klauspost/reedsolomon v1.11.8 h1:s8RpUW5TK4hjr+djiOpbZJB4ksx+TdYbRH7vHQpwPOY= -github.com/klauspost/reedsolomon v1.11.8/go.mod h1:4bXRN+cVzMdml6ti7qLouuYi32KHJ5MGv0Qd8a47h6A= +github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/48xc= +github.com/klauspost/cpuid/v2 v2.2.6/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/klauspost/reedsolomon v1.12.1 h1:NhWgum1efX1x58daOBGCFWcxtEhOhXKKl1HAPQUp03Q= +github.com/klauspost/reedsolomon v1.12.1/go.mod h1:nEi5Kjb6QqtbofI6s+cbG/j1da11c96IBYBSnVGtuBs= github.com/kuking/go-frodokem v1.0.2 h1:sxdguENCyr6WnLbJ/cjz0AYCW75H1b+E6zXY2ldZnUU= github.com/kuking/go-frodokem v1.0.2/go.mod h1:83ZX1kHOd72ouCsvbffCqJIj7Ih83MQTAjH2QbqzLZk= -github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= -github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -79,8 +79,8 @@ golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= -golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.20.0 h1:jmAMJJZXr5KiCw05dfYK9QnqaqKLYXijU23lsEdcQqg= +golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -91,8 +91,8 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= -golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -104,8 +104,8 @@ golang.org/x/sys v0.0.0-20190902133755-9109b7679e13/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= From 77c9b8654f98e98f38c2cdb1a5302d11974c684f Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sat, 2 Mar 2024 14:46:15 -0800 Subject: [PATCH 87/94] Left GOPROXY alone --- bacillus/ci_pushbuild.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bacillus/ci_pushbuild.sh b/bacillus/ci_pushbuild.sh index c4a73f4..ea20161 100755 --- a/bacillus/ci_pushbuild.sh +++ b/bacillus/ci_pushbuild.sh @@ -5,7 +5,7 @@ export GOPATH="${HOME}/go" export PATH=/usr/local/bin:/usr/bin:/usr/lib/ccache/bin:/bin:$GOPATH/bin unset GO111MODULE -export GOPROXY="direct" +#export GOPROXY="direct" #!# GOCACHE will be phased out in v1.12. [github.com/golang/go/issues/26809] #!export GOCACHE="${HOME}/.cache/go-build" From dbaa8b5b62b44bd197b7ba67a0c6ab4f5123a41a Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sat, 30 Mar 2024 00:48:46 -0700 Subject: [PATCH 88/94] Ensure auth fails if server is somehow built for unsupported platform --- auth.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/auth.go b/auth.go index ebca33e..cc3b042 100755 --- a/auth.go +++ b/auth.go @@ -53,7 +53,7 @@ func VerifyPass(ctx *AuthCtx, user, password string) (bool, error) { } else if runtime.GOOS == "freebsd" { pwFileName = "/etc/master.passwd" } else { - pwFileName = "unsupported" + return false, errors.New("Unsupported platform") } pwFileData, e := ctx.reader(pwFileName) if e != nil { From 952279a108168fc9b168020960e71e1f0c5028b9 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sat, 27 Apr 2024 22:01:43 -0700 Subject: [PATCH 89/94] Moved esc seq table out of copyBuffer to avoid redecls --- xs/xs.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/xs/xs.go b/xs/xs.go index c4ac922..4fa9b13 100755 --- a/xs/xs.go +++ b/xs/xs.go @@ -102,6 +102,14 @@ type ( escSeqs map[byte]escHandler ) +var ( + escs = escSeqs{ + 'i': func(io.Writer) { os.Stdout.Write([]byte("\x1b[s\x1b[2;1H\x1b[1;31m[HKEXSH]\x1b[39;49m\x1b[u")) }, + 't': func(io.Writer) { os.Stdout.Write([]byte("\x1b[1;32m[HKEXSH]\x1b[39;49m")) }, + 'B': func(io.Writer) { os.Stdout.Write([]byte("\x1b[1;32m" + bob + "\x1b[39;49m")) }, + } +) + // Copy copies from src to dst until either EOF is reached // on src or an error occurs. It returns the number of bytes // copied and the first error encountered while copying, if any. @@ -149,11 +157,6 @@ func copyBuffer(dst io.Writer, src io.Reader, buf []byte) (written int64, err er // or tunnel traffic indicator - note we cannot just spawn a goroutine // here, as copyBuffer() returns after each burst of data. Scope must // outlive individual copyBuffer calls). - escs := escSeqs{ - 'i': func(io.Writer) { os.Stdout.Write([]byte("\x1b[s\x1b[2;1H\x1b[1;31m[HKEXSH]\x1b[39;49m\x1b[u")) }, - 't': func(io.Writer) { os.Stdout.Write([]byte("\x1b[1;32m[HKEXSH]\x1b[39;49m")) }, - 'B': func(io.Writer) { os.Stdout.Write([]byte("\x1b[1;32m" + bob + "\x1b[39;49m")) }, - } /* // If the reader has a WriteTo method, use it to do the copy. From 91bb0778b21f134a7b349fc62ddeafbd58d18087 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Wed, 1 May 2024 23:43:24 -0700 Subject: [PATCH 90/94] Addition of WHIRLPOOL hash --- go.mod | 1 + go.sum | 2 ++ xs/xs.go | 3 ++- xsd/xsd.go | 3 ++- xsnet/chan.go | 5 ++++- xsnet/consts.go | 1 + xsnet/net.go | 6 ++++++ 7 files changed, 18 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index a47bc1d..8437ff3 100644 --- a/go.mod +++ b/go.mod @@ -23,6 +23,7 @@ require ( require ( blitter.com/go/chacha20 v0.0.0-20200130200441-214e4085f54c // indirect blitter.com/go/mtwist v1.0.1 // indirect + github.com/jzelinskie/whirlpool v0.0.0-20201016144138-0675e54bb004 // indirect github.com/klauspost/cpuid/v2 v2.2.6 // indirect github.com/klauspost/reedsolomon v1.12.1 // indirect github.com/pkg/errors v0.9.1 // indirect diff --git a/go.sum b/go.sum index 30048ce..5d44f1f 100644 --- a/go.sum +++ b/go.sum @@ -45,6 +45,8 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f h1:UWGE8Vi+1Agt0lrvnd7UsmvwqWKRzb9byK9iQmsbY0Y= github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f/go.mod h1:u+9Snq0w+ZdYKi8BBoaxnEwWu0fY4Kvu9ByFpM51t1s= +github.com/jzelinskie/whirlpool v0.0.0-20201016144138-0675e54bb004 h1:G+9t9cEtnC9jFiTxyptEKuNIAbiN5ZCQzX2a74lj3xg= +github.com/jzelinskie/whirlpool v0.0.0-20201016144138-0675e54bb004/go.mod h1:KmHnJWQrgEvbuy0vcvj00gtMqbvNn1L+3YUZLK/B92c= github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/48xc= github.com/klauspost/cpuid/v2 v2.2.6/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/klauspost/reedsolomon v1.12.1 h1:NhWgum1efX1x58daOBGCFWcxtEhOhXKKl1HAPQUp03Q= diff --git a/xs/xs.go b/xs/xs.go index 4fa9b13..018c542 100755 --- a/xs/xs.go +++ b/xs/xs.go @@ -733,7 +733,8 @@ func main() { //nolint: funlen, gocyclo C_CHACHA20_12`) flag.StringVar(&hmacAlg, "m", "H_SHA256", "session `HMAC`"+` H_SHA256 - H_SHA512`) + H_SHA512 + H_WHIRLPOOL`) flag.StringVar(&kexAlg, "k", "KEX_HERRADURA512", "KEx `alg`"+` KEX_HERRADURA256 KEX_HERRADURA512 diff --git a/xsd/xsd.go b/xsd/xsd.go index 346274b..62f9a39 100755 --- a/xsd/xsd.go +++ b/xsd/xsd.go @@ -572,7 +572,8 @@ func main() { //nolint:funlen,gocyclo flag.Var(&aHMACAlgs, "aH", "Allowed `HMAC`s (eg. '-aH HMACAlgA -aH HMACAlgB ...')"+` H_all H_SHA256 - H_SHA512`) + H_SHA512 + H_WHIRLPOOL`) flag.StringVar(&cpuprofile, "cpuprofile", "", "write cpu profile to <`file`>") flag.StringVar(&memprofile, "memprofile", "", "write memory profile to <`file`>") diff --git a/xsnet/chan.go b/xsnet/chan.go index 4b4e82d..5847372 100644 --- a/xsnet/chan.go +++ b/xsnet/chan.go @@ -26,7 +26,7 @@ import ( "github.com/aead/chacha20/chacha" "golang.org/x/crypto/blowfish" "golang.org/x/crypto/twofish" - + whirlpool "github.com/jzelinskie/whirlpool" // hash algos must be manually imported thusly: // (Would be nice if the golang pkg docs were more clear // on this...) @@ -157,6 +157,9 @@ func (hc *Conn) getStream(keymat []byte) (rc cipher.Stream, mc hash.Hash, err er if !halg.Available() { log.Fatal("hash not available!") } + case HmacWHIRLPOOL: + log.Printf("[hash HmacWHIRLPOOL (%d)]\n", hopts) + mc = whirlpool.New() default: log.Printf("[invalid hmac (%d)]\n", hopts) fmt.Printf("DOOFUS SET A VALID HMAC ALG (%d)\n", hopts) diff --git a/xsnet/consts.go b/xsnet/consts.go index 1d7e9c8..9c58d6e 100644 --- a/xsnet/consts.go +++ b/xsnet/consts.go @@ -119,6 +119,7 @@ type CSCipherAlg uint32 const ( HmacSHA256 = iota HmacSHA512 + HmacWHIRLPOOL HmacNoneDisallowed ) diff --git a/xsnet/net.go b/xsnet/net.go index 0a576ab..5bd423f 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -177,6 +177,8 @@ func (h *CSHmacAlg) String() string { return "H_SHA256" case HmacSHA512: return "H_SHA512" + case HmacWHIRLPOOL: + return "H_WHIRLPOOL" default: return "H_ERR_UNK" } @@ -363,6 +365,10 @@ func (hc *Conn) applyConnExtensions(extensions ...string) { log.Println("[extension arg = H_SHA512]") hc.cipheropts &= (0xFFFF00FF) hc.cipheropts |= (HmacSHA512 << 8) + case "H_WHIRLPOOL": + log.Println("[extension arg = H_WHIRLPOOL]") + hc.cipheropts &= (0xFFFF00FF) + hc.cipheropts |= (HmacWHIRLPOOL << 8) case "OPT_REMOD": log.Println("[extension arg = OPT_REMOD]") hc.opts |= CORemodulateShields From 7e4aeba93a882c72b57ee97826ffe772c57cac7d Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Wed, 1 May 2024 23:46:43 -0700 Subject: [PATCH 91/94] Add remote IP to net.Listener Accept logmsg --- xsnet/net.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xsnet/net.go b/xsnet/net.go index 0a576ab..75b3803 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -1115,7 +1115,7 @@ func (hl *HKExListener) Accept() (hc Conn, err error) { return Conn{}, err } - logger.LogDebug(fmt.Sprintln("[net.Listener Accepted]")) + logger.LogDebug(fmt.Sprintf("[net.Listener Accepted %v]\n", c.RemoteAddr())) } // Read KEx alg proposed by client var kexAlg KEXAlg From 136f37e209a06c3122260d3b03c7c1202da19a41 Mon Sep 17 00:00:00 2001 From: Russtopia Date: Wed, 1 May 2024 23:58:44 -0700 Subject: [PATCH 92/94] Update 'README.md' --- README.md | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 20f6af6..c7278f3 100644 --- a/README.md +++ b/README.md @@ -44,10 +44,12 @@ Currently supported session algorithms: * Blowfish-64 * CryptMTv1 (64bit) (https://eprint.iacr.org/2005/165.pdf) * ChaCha20 (https://github.com/aead/chacha20) +* HOPSCOTCH (https://gogs.blitter.com/Russtopia/hopscotch) [HMAC] * HMAC-SHA256 * HMAC-SHA512 +* WHIRLPOOL *** **A Note on 'cryptographic agility'** @@ -92,18 +94,6 @@ KYBER IND-CCA-2 KEM As of this time (Oct 2018) Kyber is one of the candidate algorithms submitted to the [NIST post-quantum cryptography project](https://csrc.nist.gov/Projects/Post-Quantum-Cryptography). The authors recommend using it in "... so-called hybrid mode in combination with established "pre-quantum" security; for example in combination with elliptic-curve Diffie-Hellman." THIS PROJECT DOES NOT DO THIS (in case you didn't notice yet, THIS PROJECT IS EXPERIMENTAL.) -### Dependencies: - -* Recent version of go (tested, at various times, with go-1.9 to go-1.12.4) -* [github.com/mattn/go-isatty](http://github.com/mattn/go-isatty) //terminal tty detection -* [github.com/kr/pty](http://github.com/kr/pty) //unix pty control (server pty connections) -* [github.com/jameskeane/bcrypt](http://github.com/jameskeane/bcrypt) //password storage/auth -* [blitter.com/go/goutmp](https://gogs.blitter.com/RLabs/goutmp) // wtmp/lastlog C bindings for user accounting -* [https://gitlab.com/yawning/kyber](https://gogs.blitter.com/RLabs/kyber) // golang Kyber KEM -* [https://gitlab.com/yawning/kyber](https://gogs.blitter.com/RLabs/newhope) // golang NEWHOPE,NEWHOPE-SIMPLE KEX -* [blitter.com/go/mtwist](https://gogs.blitter.com/RLabs/mtwist) // 64-bit Mersenne Twister PRNG -* [blitter.com/go/cryptmt](https://gogs.blitter.com/RLabs/cryptmt) // CryptMTv1 stream cipher - ### Installing From bfcd097a1476f31f8b406f9fff2769898793d2a1 Mon Sep 17 00:00:00 2001 From: Russtopia Date: Thu, 2 May 2024 00:48:50 -0700 Subject: [PATCH 93/94] Bump version to v0.9.11 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index abbec41..67eb22d 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION := 0.9.10 +VERSION := 0.9.11 .PHONY: lint vis clean common client server passwd\ subpkgs install uninstall reinstall scc From 12409319e7bca772ad68618057d0eccd9c1790c9 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Mon, 15 Jul 2024 02:06:26 -0700 Subject: [PATCH 94/94] Removed go.mod, go.sum --- bacillus/ci_pushbuild.sh | 3 + go.mod | 37 ---------- go.sum | 143 --------------------------------------- 3 files changed, 3 insertions(+), 180 deletions(-) delete mode 100644 go.mod delete mode 100644 go.sum diff --git a/bacillus/ci_pushbuild.sh b/bacillus/ci_pushbuild.sh index ea20161..8cfe45f 100755 --- a/bacillus/ci_pushbuild.sh +++ b/bacillus/ci_pushbuild.sh @@ -25,6 +25,9 @@ echo "Building most recent push on branch $branch" git checkout "$branch" ls +go mod init +go mod tidy + ############ stage "Build" ############ diff --git a/go.mod b/go.mod deleted file mode 100644 index 8437ff3..0000000 --- a/go.mod +++ /dev/null @@ -1,37 +0,0 @@ -module blitter.com/go/xs - -go 1.22.0 - -require ( - blitter.com/go/cryptmt v1.0.2 - blitter.com/go/goutmp v1.0.6 - blitter.com/go/herradurakex v1.0.0 - blitter.com/go/hopscotch v0.1.1 - blitter.com/go/kyber v0.0.0-20200130200857-6f2021cb88d9 - blitter.com/go/newhope v0.0.0-20200130200750-192fc08a8aae - github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da - github.com/creack/pty v1.1.21 - github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f - github.com/kuking/go-frodokem v1.0.2 - github.com/mattn/go-isatty v0.0.20 - github.com/xtaci/kcp-go v5.4.20+incompatible - golang.org/x/crypto v0.20.0 - golang.org/x/sys v0.17.0 - gopkg.in/hlandau/passlib.v1 v1.0.11 -) - -require ( - blitter.com/go/chacha20 v0.0.0-20200130200441-214e4085f54c // indirect - blitter.com/go/mtwist v1.0.1 // indirect - github.com/jzelinskie/whirlpool v0.0.0-20201016144138-0675e54bb004 // indirect - github.com/klauspost/cpuid/v2 v2.2.6 // indirect - github.com/klauspost/reedsolomon v1.12.1 // indirect - github.com/pkg/errors v0.9.1 // indirect - github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 // indirect - github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b // indirect - github.com/tjfoc/gmsm v1.4.1 // indirect - github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37 // indirect - golang.org/x/net v0.21.0 // indirect - gopkg.in/hlandau/easymetric.v1 v1.0.0 // indirect - gopkg.in/hlandau/measurable.v1 v1.0.1 // indirect -) diff --git a/go.sum b/go.sum deleted file mode 100644 index 5d44f1f..0000000 --- a/go.sum +++ /dev/null @@ -1,143 +0,0 @@ -blitter.com/go/chacha20 v0.0.0-20200130200441-214e4085f54c h1:LcnFFg6MCIJHf26P7eOUST45fNLHJI5erq0gWZaDLCo= -blitter.com/go/chacha20 v0.0.0-20200130200441-214e4085f54c/go.mod h1:EMJtRcf22WCtHGiXCw+NB/Sb/PYcXtUgUql6LDEwyXo= -blitter.com/go/cryptmt v1.0.2 h1:ZcLhQk7onUssXyQwG3GdXDXctCVnNL+b7aFuvwOdKXc= -blitter.com/go/cryptmt v1.0.2/go.mod h1:tdME2J3O4agaDAYIYNQzzuB28yVGnPSMmV3a/ucSU84= -blitter.com/go/goutmp v1.0.6 h1:jRKRw2WalVBza4T50etAfbvT2xp9G5uykIHTvyB5r0k= -blitter.com/go/goutmp v1.0.6/go.mod h1:DnK/uLBu1/1yLFiuVlmwvWErzAWVp+pDv7t6ZaQRLNc= -blitter.com/go/herradurakex v1.0.0 h1:6XaxY+JLT1HUWPF0gYJnjX3pVjrw4YhYZEzZ1U0wkyc= -blitter.com/go/herradurakex v1.0.0/go.mod h1:m3+vYZX+2dDjdo+n/HDnXEYJX9pwmNeQLgAfJM8mtxw= -blitter.com/go/hopscotch v0.1.1 h1:hh809THr3I52J5G5QozNhDSd+qGwXWGqLh3FJBGrp+o= -blitter.com/go/hopscotch v0.1.1/go.mod h1:hCz7oE31KjaO9M6+s2DcyVNlAA8saE/AaVYKFs7hl1I= -blitter.com/go/kyber v0.0.0-20200130200857-6f2021cb88d9 h1:D45AnrNphtvczBXRp5JQicZRTgaK/Is5bgPDDvRKhTc= -blitter.com/go/kyber v0.0.0-20200130200857-6f2021cb88d9/go.mod h1:SK6QfGG72lIfKW1Td0wH7f0wwN5nSIhV3K+wvzGNjrw= -blitter.com/go/mtwist v1.0.1 h1:PxmoWexfMpLmc8neHP/PcRc3s17ct7iz4d5W/qJVt04= -blitter.com/go/mtwist v1.0.1/go.mod h1:aU82Nx8+b1v8oZRNqImfEDzDTPim81rY0ACKAIclV18= -blitter.com/go/newhope v0.0.0-20200130200750-192fc08a8aae h1:YBBaCcdYRrI1btsmcMTv1VMPmaSXXz0RwKOTgMJYSRU= -blitter.com/go/newhope v0.0.0-20200130200750-192fc08a8aae/go.mod h1:ywoxfDBqInPsqtnxYsmS4SYMJ5D/kNcrFgpvI+Xcun0= -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY= -github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0= -github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f h1:UWGE8Vi+1Agt0lrvnd7UsmvwqWKRzb9byK9iQmsbY0Y= -github.com/jameskeane/bcrypt v0.0.0-20120420032655-c3cd44c1e20f/go.mod h1:u+9Snq0w+ZdYKi8BBoaxnEwWu0fY4Kvu9ByFpM51t1s= -github.com/jzelinskie/whirlpool v0.0.0-20201016144138-0675e54bb004 h1:G+9t9cEtnC9jFiTxyptEKuNIAbiN5ZCQzX2a74lj3xg= -github.com/jzelinskie/whirlpool v0.0.0-20201016144138-0675e54bb004/go.mod h1:KmHnJWQrgEvbuy0vcvj00gtMqbvNn1L+3YUZLK/B92c= -github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/48xc= -github.com/klauspost/cpuid/v2 v2.2.6/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= -github.com/klauspost/reedsolomon v1.12.1 h1:NhWgum1efX1x58daOBGCFWcxtEhOhXKKl1HAPQUp03Q= -github.com/klauspost/reedsolomon v1.12.1/go.mod h1:nEi5Kjb6QqtbofI6s+cbG/j1da11c96IBYBSnVGtuBs= -github.com/kuking/go-frodokem v1.0.2 h1:sxdguENCyr6WnLbJ/cjz0AYCW75H1b+E6zXY2ldZnUU= -github.com/kuking/go-frodokem v1.0.2/go.mod h1:83ZX1kHOd72ouCsvbffCqJIj7Ih83MQTAjH2QbqzLZk= -github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= -github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -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/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 h1:89CEmDvlq/F7SJEOqkIdNDGJXrQIhuIx9D2DBXjavSU= -github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161/go.mod h1:wM7WEvslTq+iOEAMDLSzhVuOt5BRZ05WirO+b09GHQU= -github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b h1:fj5tQ8acgNUr6O8LEplsxDhUIe2573iLkJc+PqnzZTI= -github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b/go.mod h1:5XA7W9S6mni3h5uvOC75dA3m9CCCaS83lltmc0ukdi4= -github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho= -github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE= -github.com/ulikunitz/xz v0.5.8 h1:ERv8V6GKqVi23rgu5cj9pVfVzJbOqAY2Ntl88O6c2nQ= -github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/xtaci/kcp-go v5.4.20+incompatible h1:TN1uey3Raw0sTz0Fg8GkfM0uH3YwzhnZWQ1bABv5xAg= -github.com/xtaci/kcp-go v5.4.20+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE= -github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37 h1:EWU6Pktpas0n8lLQwDsRyZfmkPeRbdgPtW609es+/9E= -github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37/go.mod h1:HpMP7DB2CyokmAh4lp0EQnnWhmycP/TvwBGzvuie+H0= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.20.0 h1:jmAMJJZXr5KiCw05dfYK9QnqaqKLYXijU23lsEdcQqg= -golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -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-20190902133755-9109b7679e13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -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.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/hlandau/easymetric.v1 v1.0.0 h1:ZbfbH7W3giuVDjWUoFhDOjjv20hiPr5HZ2yMV5f9IeE= -gopkg.in/hlandau/easymetric.v1 v1.0.0/go.mod h1:yh75hypuFzAxmvECh3ZKGCvFnIfapYJh2wv7ASaX2RE= -gopkg.in/hlandau/measurable.v1 v1.0.1 h1:wH5UZKCRUnRr1iD+xIZfwhtxhmr+bprRJttqA1Rklf4= -gopkg.in/hlandau/measurable.v1 v1.0.1/go.mod h1:6N+SYJGMTmetsx7wskULP+juuO+++tsHJkAgzvzsbuM= -gopkg.in/hlandau/passlib.v1 v1.0.11 h1:vKeHwGRdWBD9mm4bJ56GAAdBXpFUYvg/BYYkmphjnmA= -gopkg.in/hlandau/passlib.v1 v1.0.11/go.mod h1:wxGAv2CtQHlzWY8NJp+p045yl4WHyX7v2T6XbOcmqjM= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

    6!Hcm}ed6?|KC$k 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 !{_!+cSD1DT^`xvOeoU*W zh77iifAGHU7~wjW*Ux3wkX!XgcjuO76;&6I`18T7^09=2>gnRcUjdJ3@XInsi`tKW z>R8gGtSBf*W1|8FJBc^X4eQyB>+1~c?D7h8;e%`6s>@SG{BljJbJfu$bY`1c-Lvd9 zwCc6k-=Y7*pH!-n%N}s^giBAw<~ixff>4VcC>1(yE|@)@HMyfeAf!;_LZyNaej*i) z9Hn}^7aUoOi+Kwgho=uucL#) zhv~>FaIXN zuLkQwPHV!3rZP@1|46k(SAt(eB?73smR*fj7(|JLkrPMlD`P&BnXOV~FY~2BmCQb? z{ZzEP==-*sr&KJMJw{f-N~Hpt8$hy@il=iFEFQi|*TUqBMdm4FkMBie(SWF2r4%S- zC89*7Xn`bw@D{{iNwxP50)^ydOz*_ElP8SFwl7yJYIBjsPZExM zW4TX_>L8aWQY&75d@DX(T?_gobT00h#ve2tB+B>v30*4?qZC+U!=HTLmoLl}I_nT) zODq4|+YpF0CRxih+;;t0Z*8RCt(IbSm8D|!eW1_i!9+bKP5?c9&U9V zt#ZZ5TJXto+E?yqaRIrxj*B53JcG*137olyKNDRMoT=Y0$bQ(l$K=ZoQns0Y1bI*9 z_X&J-sqp1Y50-N+*Ybz&^u+v~g>LeszMIZxjE$iuHPOPY-4j2A@^=sK-FdzF8GqT* z+KQtP6%vBO!qAKqnG2h^6tu7$*gNLGFc#kX@Au&a?8irl=LyIobC zua|A%Lh}o2p$*pp3U$+_Kc`C#X7=L4j;J?)a8TLR6_cd?dp4AToSUAIO9BV4W8I%6 zOZ53Py)i5TWprQZ25!9hTl5$mSNAGQ71jw(P7)sZu)(ZR`v(e1v6zPqZB~3N!pp;? z3FT$p?$|E8KX!* zN14yMGBpu0vj1mp37(($mu-nag~k5w?enz?mz&7_tEVMM^9-bACX~g#rMVEJd_h!Q znTOHA|VqSF7BfDUTxLmFg3X z+ZLj$c)J|SAt~1~O~H*}8>%Tw^x()GF}zN`>!lzrX6Bud|C;0Y*>i(F(=P%$AaCb4 zPA_1vKL8#F?|Tf*sIkM>ZxVu>=#mL1FiO~$G#}EZkq1x7cW3Kg*Dr~wJJI*_bqNzC zvR?5f_@3KY4|$>3R6$S!r8*l3o(6M*8UJj%DxU2zCSQam;<+4>KXbW1wrx#%j-g&! z2@t6m8Su!~Lruq36oqyn;4j1>B44I8&bF51yw}2BUiYKRq1=11XADAfhHdx1t>!L- zfK#(D=RdQ1va;o{wzqp>rp4X#h?mR|Ea1NDu(4OS?l9-zT>F-pr`dt0$-%|#5=II| zJfAIR66RI-9moTO?F^LiS#m)ugxxS_HZ|k2716_>^3k0~f6qy=r-}?^pYhYmif4)x zILcjk9GvTN>K`fqpF=Lm{5EkhoPjkcW(Ik0w}kV#KgdmvQ<2^!+90Iinmv5%iEsD7 z5=BeXLtdOK5$5 za=N;$*SW3LxxqqhyN&B_2L=e2oY_?GBM)~wrkhYeh+BEEfRgUhPH{uLU~=Eq^51cnhiQ;Nz_Rt4`AW2+jllQaSJ%&;6Cn`2 z1zO4#PB&&zi;kWt>1OcPT-@a?d>{*oM_Q>028Sd5)Q3z$whFjUXFu*|>m8UZ6Jw_! z_gH8afg0%5cplw8*6!OVU7NCGWKPbbBgZPw?D6D*(ft39<6?ihmaH;+47GQ|g`O10@!?LBI zjVxp2euG$wngaWpE%1V?$yPKUL^GE)+@Vu67bY7^>KN6^84VP<67acs94>+F>wsVn%$9u``WH3RV~b3y|=U{NktJ8 z?5j{+8~^#l-0Ju{dfK9umax|ScCv!jmyv%zyN@+u>N>wI&ZW$nCV;6e_-~EyomWR zVs@)6kXu-`R)j|+RT}}%A<&r!-kh$+J6gSla3`X>?+0@nO8Qsy&tGyyGVal1@hxe_ zI3?TfJH2baAfn-i#3Ma<##KdTkUMSFei>;z4ZG!qd-b&k^T*6#*S2mrm~D1o8sox<@IcZmCZlOi zx~sC2%yeb5H~1Wrd)^1wwh?KosgGB-8X~&8=vuC}07HcgGJL#mN!3uOdMkOnk@n>F z#B?nG-^D1nlL?^z0b}6RRlkPHI-$Xch@{%hz*msG0|XO@4$sK{`Gfz+_G=$10H(v2 zMZ9FY4T%Xj)~zw|3E8Z0Vz|!dbNSUpw#*&37Q5<1?N$%0jh8?UJSb0OvN$APxvD;) zc^`R?2N|dq2QBs!@#vb{oLS|Hh5~PD+L*EW#V~{mr{*Xe8`7#<=1C7@jK_)`E(ODjX9?kp7u; zN?m!bMK5>S(vp}L;s5gjOfM@v{rNGR+BXfne}oDjY2yIkNvjin9XkAreUF_H@eM|z zQ9XMuN+h{$7wZ|r4HwgGtfJ+kW(cv(1HI*N8vOP%B}xKE84DJ;?}so8wn-qu%8TIo zuTPfE;xd8QexDQK-RsF=JDC)6jfBwq7-yS8>& z%^t){^j?*0Ge%ZF^YedVY8xZjnngYtND7&Sbf6{&FfpS!9ef(Bw7|_({?wayCHJ>Z zJJmm-(%jBY#4SZOfFC%O$hh5JdCmCzabtY+D|UN)ObRmS-jp@!T!hY=F1kY<8XU&1KNZqG5PcQ`H`gYf?TKqf?l(o z<*QI7#aBc4YO!6ukgwraaKhVA$=1&TJmNt|Wq!{3!>D9+x%}aGCA>8?Rug{)q zoIcph@@S8yL}Yx+Rj^0`huQnIxlzP4B6~AlA3Y^TezDKuOZvU?bc-)B8eT4w*oU{r z6p+tAKto_?OieqtHQkPJn?2hNwbs9okLexBUCrTP>P9Bmqel=LwUB`h>IB!Ce0OuC z3e*Z^;_epMBrka~24sZw^Eyr$S^df`DNgtmv~-|#Dqtd!auNAnGw|LZU&w-qHySbLv-O5dK+=#I_TWJAYy^DxBn%?b zKiW!)f1?vxkt49G1JKUt5xpzsOa^9@%chZEz zC(@Aqg6qt#_nCjr3VnMTAsU~@RNM2jy+5q*dtq$zUO3nZjIl&3S&>*>A?1xEjR57m z3S>057a7GA;i=-wEeoP`VfI>zyD~tml+(Ufu=|%}KDY*60r|)RoBZXyvTg(XP57=8 zQ!27%okZN0G&|OdoqutjGZJ#zxSh_8iY_xlxj`}tehg_N?1Zj^T$uNVhv7RTSz)3l zPs>WXgYVi8^w`_(#f{D>jU|U){|?@?+jYPM@K{-fW&yiZ5U@9+Os zcj~0|r&hOjb5Z|0ryU`rV4d!R>)rXlg%qO{XomVtR5HJV@>Qr1YTwV-c3N29u8q>w zXirZyXYsAzq-pb9-0&=dJzBv3?Rul~Q=Jjl9wZ2E%Qir%3o2{GE-dqBgWR)i*m(p= z3P3{s4-qNZ_b>H2m=?kUiDGNesz1pA>7JeL*-3B)@^iFgwuBasdJKK%oi1C!8`5!H zVfp^B?u`$$ae(x^`(k*kbB6rPg5H-3*zbR7_gpFTgaZN|XkOwNF%-r>2*ot^>^p+Pvzm*shh9LAG8jN&JFMo(^O%dUu4R|ss@$sPqG#E&dnl#w~3JDR79^x)XR10-=T zl{mVn!Xje!U-KM4lK0{6y#!f1loeF{KLp<*h*H;}(p9a04hkMQ{7BIyR9O2O?9VEt za4q93*O7!}$5to>=Fl68t6%yedz;d*4~usd8b2UcZw4|Ozs2<@RvZn%GEtgFb8To{ z#WNWGJFjQjt}O5Rvgt30&h%CpY-*wXqahVK_dr#~mHw?Ke#tAKSg}7^##t^Y94n#1 z$Qr-v9`m>}q4UjLn)e&o7A0`J$*4i7O{j?T6V_62u0P0infa*oQ_7;4CjX$*%-&U7 z^J$n|#pj&Ca5wN7?{hcLu3(%wQ%C|@X8E(cfw2lYxvw)L!Sd~Ehd>rUDX`k=cCVks zv)Vo)XU<5QI}(BG=_5OYS&?hQi-kb<3M{YSdBi0}M7n>E`JXwD9ToHcBGsFd52`c)s@7VbDr zMFJnu|G&7@*$l}$@HYe7kehj=@t529FOmmTa~VU^om<~dcMmQhtkWtbCeKOg2vh`IOsozw;a zAR8}_1+dd$*Z%3iY3Cu%>(EN_Jr8Vt&({G% z9_sD?yA0oDJi`ek1DXp#ywIxB_s%^z>d&w@OU2@W_~u0)CJCz1$knRQ%5$W!d7NxtpyE~+j?uPrG`~Cdh zzhuE$!hN1OGkf;lGY3{Yws+KMWX(TtXmzF#GA9z=^6V(o=8ro%>UL>V!T2zAm40zb zt5ARBi7V_xpJ3Rm1e8va1NzMCa8=px)@#gjmd3y%!qYHo>*LuOI(HKAh!>J+JXCRLNg9OKiVrZt@sIJMKOo7_8 zTvjDEq|zg(Ss&`N{OLUO+-yc_<_Ug7D~HRpop|=_n@k;%&01G**UeVCJJucED(lZH za8~mGG&#L_?Z)q=v~>-&zd>~hGW071B^)PV^=xX;(UP%YAf~O;Aq7wIH%rEzdMqao zlWUa_!+a~)n$l^3msdjr=Ap=XCE%(73FF#UOJGkBv?VlaXUI%Va=>FDqiik6U|65= zYq(;|(1-S5&F}V?FA2Oqf(GEOohO{F-+JDa0sG81<>SckcCz5(po{s(;E5Xag6oI1BsT_1*jaPp2c?RKpa8%a3h_jx&Y*y1Eo7Kz zD39M@eKKh%`EI-~FUyy@l;q$ibMtrbF&iyVZhd}LBM7*Gw*G%$%HcQI>-*vf+@wbL z!2^N4Su(rx0DPzOEN(`p-O!xIQ}5fiZ=Y)J5$V1aZf#cHJuuaNu;ts}BT#<}a!!%< zlXez49ITn_VD{bd}r9hlSf?6PxEX!~V8gB?1OHt>?>#Vb4Q(4Zf+r%IB|h zrwRH~ePQw0{l!KWgKVC*;BkfC>ng(idmyc$3{ZDtlf15!9Ymp zQ_AjBG!;I0Nr`zxfPX>*T@6t0T?yOF*9!7An0)bMV}HnyN*?xCg|MWHS~{&do*a3& z%%0@fU9jyBB~Fx^Q7h^46I8X)nt``vWN)2QVT{wmEikd`NXZQ0kW;4Aw2iI z=B%&C3G{+y5^mtl(Jn&U=Y91bBhByoo#zz^&C^C%pHr#@6=>-^m-S-%M)Ln7N=}tyl}0JO zM-`1@s~zM(%k8K&_N6_iriNR_t=Vgl;K7su?HkpAL>|tYn2%6RWwUk()Nk3NMwW%v zy{!1>2glbjuc*RPC7sUhB+T&;&B~-V%4<~&TVsLg>(|<2gm8c1EM^SncYr!D)!)Nw z7wuGekI^_z+W@8+BWujNpHIgb?sIMs;9whd4}f}3a@D{z;3-r2wRXkq*VQwMrd<?XMGHJixQs6vm@@~4$*aqt^_b$XL9R=>=?@zt{i=N%A%_v|UYLaBea)T;KeuH${gwmawE_n=XFE(^ql z?HbFDq7JqSD)B2O{3&A4ReIVnt3G0em8Ia|jmkU2gDc>UI*8+(H&CB=s3_)n-@N@W zjleDxm3AJLX>#f6FR*WL4au}#(Ucnza>Z8zOJz9}I8U%?}v2PB*bIjIgZ(|{a^ zzgr*JR6m9y4G#$b6W|c#_NY!9y$i)o@KR%=T1rT?iwa!lb|?{WYsh0H%)<*Bx28qA*^Q%eE|p2MIqjjqr1; zwCrO6q!v|)p4m&3CUyP|1rQH2Un*bRT--H-hmz|D&fZ|+l!oe8pfS8nkWhHWhFUuG zIXh1{ywt030g9;-|fuRb>E9z8{nGw9q5!6wT&p4FxLS2!&mbeyk>s5!L=vSVE%z z9ySayj*4P3jIQxsl-b7(b@%xhYXiBk3dowbr@JOv_uW2#hH;r6?kMg3?B?@?yC&pJ zd9s!~w%f*=RFc&a-iy(>m-QHclBGKYKNhdz(}hJ9mBxSilY(p@w5!b^mZ~!t=O<@y z)%Fw~Vs$1pd01o%h~>*KZP+^hu{S(d;97$(K*aF%Ef9MU7Bq;m77-l7e#c4DRG-64 zBrKba>_bNGDVQwI=*tEk()mBD5?VfQff8x_zb~V;e1xpme4_7}*4_v^-LsxB08*>^ zV}jcG;7YphTAS8gr!AxZJworwBZuL$9rMAO*AJ+vaQFblPe+{x@Y0H)C#`ZG;J0~t z#1U%n2Fv^laUys4cG zCxzxmc!#(5Oo>9Qq#4wq(*sE{0)8Yw$ZQeU1k5Zrp2kiz?;kh#Lzt7lQj;^#Eyb9@ zUrw1+xHnaP1sSXA`6zfG&3j2TunaUjzzRU_unvVo|M3Q?(9`u1jtv*Raj_H$&b`?V z@Ac2Qlst{FbtW+tA|z9J86i@0XCyaobml^=1RX_7xfd|0(GI{L5-_(ZWPGX%ltEzq z12vdL^AqN$;j5?#1O3tcww0lHenXQp6V1wXAg5k8_T61Kr2QBqkp@R1>VOxnEs$3B zMEi<$JFB%H4}F*%+LdSev$Ni*BTN^FVnim$S%`i74HN^^tB*=_!8M$8g19Xt+>xUn zU9zQFu25+JLI7m|Afq0@4w(0Ca2MS|WpY0fs#o&HXjbZFWHk0~0FC+_8vZGkDjI#w z#Idc~N>lZEq6%RDl+HhX?%gKh8|8dT$FvToOju7l zmv%|C%2l#e)^WOYzmY}16cmnu$-;|Uc>SejDy!xfYfv`uU5Ira?G@zKp8v9@!Oc=0 zNga!Nu-3?)e1A9E2I{IQaNamvx7bf;sfr!l2bm7n1F6DaQPbqgQ80KssaPWhSYbxJ zZ7?k$`?fwL++h$8_^cIgt|h#-kfjAEBc)^lDn6R^5EL(+HR|&;@sA^rms_4#cJ5we zriV*DYWn~O-TY~p^xa0??%6YHLwvIvI&f=V;?KqM-*9zKNlhB)D~U_KA}Qmq7nRH^ zyAjt;j9TQA%ASmNJ-)IrJRenM$B0lJ0R5mos&_P%w#K*rOEEbTy~gd&>rAVGFT;>| zRgeYS2gWPqA}qcDYc~%?&vSBH__ww`3X#GYIgk1_bS;lX89?i(9*l6<>WTx@ftjR$ z@Be~u)$<#0==NpQSpN87u`y=&_n@zgf}-UI{mo-wew3l)e*DmTiSDY62HoVlzlgpC z!GNch?T$#70@PFW(L!e}3#8-TU#S0k9jVd$^w2=2GbPZtvRCsRQYVtdK%k%lWc^m! zg5lOj6n}Mcq!<^y*&7gIM@^^+%B zkf=>Kyx8TlniI$TotbN_+mHr@Uii~r8Wo7i%iO*cjsxUhEUlglKmw8X&hG%Pc+d)j zOg>hk|1Jz($EIe(g+=4XAvi_lFj2h(p5<;stALS-w9=nkP3`w)v?npeDl1pE6lBpHB(+`=SBDLoIfD7n6bWjZ!>77!R!<9 ztGEJKO8u9|D2X!v&w&ECk!#z>)X<rW}6s(VFhmf14->y291E;M? zM;YK_TE8YY%LWUMVzY<05aLqOCwTN6F#Ok!smDSYqH8UIU&7HuZ&%sI&&{>7+yAfI zz?Ks^hwNS$aiqjhz4|k==nX9IG5vBll~VFxrbqAyb&pXxvob~C`6XBL6OwCMD|xG> zIR@7|RWMHR@3AZ2=c3!kT(I&>ryT?I@clY8{`hpI1X}In&B-W8!#B!UQ+P0{62g)y z3%WAs6Xo=8%bIj2rSn2 zF=HqJ>-%dJ1e$#>LB!J9p+KTl3WgbDk1z~uP}^bU^53+qitLI47hVl6r~$y@5nKGz z^TF#)->}d|BVdU@Rjsm^>FapKxMANbd{sIJbsQuLUa=Rff!*k`#!pM=CP-msckJA3 z2Qlz{=^d1>4L~}hS-uv4`mtuXAq4>VES#@bN$e_9_%6->w1o3mRNiSNZ-Q26_0X8T z+WQLXbvHpqk!$NXzDB5)Mq<2gCRx0;fy%lCw$}4?p7_kVh`>0Tsbrzc#zrFm;QYzTLVsX??zqRuR@CHJ zIN2&(>H6j)NAM<&VDbMo7qUPJ7&naSSq<-bk+=q47zuP-;1gsnlPZAf&RZpAct=PO z_XP#J)C3R~WW;Eoxd=$9(Rw~Y`H(x{O@a-Q!-{|UEKZSfKg4}|o{ggQbnhG9bT$TP z8#%~@KV9RZ_Cv2ded~J2Pl2TO4&bvuA?$TJVUc!KG_m}uQBM_jE^3G=NYk?X4}Hlw zalu|`o%Bj3)#Do zjnZ3Ah}?Nc`ChOWJHhF15kf_+!-lJtEk{lD)a0zJvo+#K2{8wk`#7)!E-ok*mJp_m zD7i;vj50%P4YHC(OGyL}^}A0h_#JrAn@2zXiQjWYWR@7L{I-xM9ZMyqfB<$cAq3(E z8iXxawp)%Hv+ai`B9ER(J79E%9=Sn7Vp!d_U4Ec z^>Vk1vV3)*YIz}?^$ok9fHh4V?G@v9i*VzIIeX~2NUbIH{emJgdFxs1eL=o2mlXT{ ze);DSFX*L0>IBCs+aBY`^YqSHnqjqzjJtrmSWr01^ zo-TE>6%R|0O4|uSo4Y;jPPO1T)=h$mFjXGL2zsL6D-JY9owPumL`$<#S}7;Nv3q(<$wKgiV?e!D-#|@#mXGo zecRvO7ehrWm8%+d=nGAuJO&iy9vFAtW&#iL@GY>!t2t_6I~!suhor?6142|;=uv%v zyxmSRpI9kOH~@7405nkd`}n_PGXjrgOo|CGDsBEmznRo^BpY&;84XzwAJf&`=J%5$+-a2HF zjYZ7(z+-c61}*4XH%EKi*6OjQ;V~igNBXd>{S2?uOO{4!Gio%Bi_LUDF!8$`0Zaw_@A>5%QXvP2gMqDMn5wlZ3R+d%~-4$*9Q@USPYcR3KWFY7_|g>}Xbe z7rKPdRaY<*tuqoZ$E1`*sCyIe>MuzYp0y^oP*&768ev8)iOq^zqm7`8iyN@TD@t2% zM~obCaMVprPl`JKff}v(_-v;+tJT05#lU^2_^4=hv}|M)4Lei7a5Ws8+Gf9;GL^H| zOY=A(q%5QVy;$}i?Hi)l$nbVI0c0DWfHIt~6EB7$N`8|_C*L3YZD{+D+hhVeBbsNFT6u`p9|qZ<7t>l>h)j)0Q)xHsv}Xj2B5R)8AOru;AL0Y!_IH8xamlezUL zm}RHaLO${y;RDYZl`IXILjvl+o|W~dUG9@g(6K>ZE+`mreE-w{*>rW2i8X5Z(1viB zQSw%~t379BQB2~#UFRiFF%y87@?EnhmcJRZ0li`nMX2t=2BsXc#mp~j(Bn7{3TZv& zXcLPy)IDZSelVqvhFaJgtv^+zfTD;b+b?ivLZuDTLecnxM4$pi&z+$;1!-i31Z38&~&eydM*()#7r%^Q7P<4~_4JC8ed6 zz$C?5rG5KW;d8>9s~fpw%Ff}w>cpvSb3&WIM$lOkJFcU#yGGp-t7 zXu@G2b+u16w!1vZa{>Fh{Ohy7cmH)jkn7QL`5V89g2oS3x%_azW=r3l~1PF>f)qA`|wUx)%} z24BUnw}XHaa&uWdQ*jw`H|%pN4#pV>wLey#twmkj`R=lvu&iY|nSHTf12brV*cN?; zZ~JL9RClO#&%)Jwq&Lx`tKWSxe z*a)0IR=+PHR!jQd!TjTYqze!)GWXKY-cn$JSN`+!g7>$AovbZ(9!Fy*S~j2;X*~}| zFg_j;(L8TZzd?S$f25XuE*cji70PmNUr33iier0z`CHT1XTCj0h$A&IgHW<}gN(CI z=gv-_mjP_|>`7&^Sut2CtRue-^l0FfHO;4vj?0vB^Ln}PFT^yzC#$@DeIO6q@*x{e zLtOz0kW)%Z1LI_suHL8#{5NW?C8>kIb!s&}Lg$zGZ>G=I#u8zlKUw#d!_h3ph>R&#+l2KIB7O4) ztq>OIANoyhBu+LGy>zv{ckZ22C{`q&vLr!v1Sk=>)Na4Q;Zn<*cb1G*-BvJYo%?G# z9(QHMx~~)0AFaguUNRaA@Fb<6`+1CCTCc~G$pSP)1EzLK3Nse33@f}Byo-JQ;Q{*d zTTV)zQfv79x` z5DF$h-S>ly0kaD*d*UX_`_IZ8AOhG)JhEoWAgN}`27So~&oaH?cVPcIn*EDY&lZ`` zfFxhq$Q1FrLY4`rg@W}V`k^M96^u(xn4Hlay3wu`FLrNi6W-S5g%4)b+@kGUgVlxj znOTFszPf-Jy-(ApF5h?aaz17>v<1(+qxMW0*fP5w(Q<1NjQ?1vjA4_7Mt&+3>ZG|{)uh}{{#9)9#zsC%4qJhRp?GV(1};s z{)YF6B&N(AiDlykNUqP*YY;r%`4~{WN=GYf>ob;qAn%hhjV!oai^7VH?kTl@X8*e@ zL%^McYA^g1SS!`A9?waFbcUvz40eZtnLiCc^m};G{rZ6-l3P`gx_=^MdX_6}yjZsO z%8R}hg9xaVTaM1MB;0rwnuI{}%LNh6=zFdMj1jUXVJRokW+%pAPNCw?-#@#_j1<_w#vx;?zQNquwWvhT)XE>FV~+(b>6x%~ zbbiLSa8roGs}lX<5kgezW;$)ex%tCl2alJNbJ%jj+yswYJ>FuGdiE4kTU#w+jAFYk z6xAgzlj&IaO3_Jh4k@IwZ3@Gfw)KZ*lN}v#b&{ZgwgCbRK~gV1+*Eo$j$Gpkgk&`H z#o?_NU%n^4#M-0Fk?n8hU$g3HOmPFB;Tt}mTTbCia~p!a7kU6>b<7ZkRfxrl%~1-n zCv981SNN_kwYuxY14o>Go$_Ixpr1|hQ=(Mxa9 z#a#B~5Y?Cdi~D9}S{|nqqo&F_Y)lKF>^NU1QvBe$SWh3?6lr%ARr3rXYc4`7ejnsa z+f7GnoU5|RB6+7N72f^Qe~B-MdxZi5|DZ4J3PkkSP}J{u2QR1QTXLn9TPs8;NQvxb zr>```|4PgJ?Od1p2c0JOg|nomAitsiIdZ60y$wnmqu$uHp!6TuT5wx!DeHPT0g*C< zWTLz0o8jETj|jygmGNA8elHiRzRO_y4oi-T-M_D9?ReXBKJd>sJ|Ka`qb4H-z6xnq z@D-{?;cXQxn^KpZQ~Ex=nBe)B+HPP;qsBJ7eZmx>p|?3sqx&Q&4R2W|IvvQ=+T2xVPY-(+Tbh>{TuIbZ_s~Z+WQZ@hX5lAtV7qh*mu+R$5*R{oL#4WzNwquu zB9dcFfsbble9E&z)ZPAIFg>>xm~p)-uFw|+jYqd6G1Z?3>?k>Bvol=_(F;#R3L z_Bz_vnAAM?1&HD1MOVt}>m(JcmHEpKY%hUZ^3l~20+-gx=GPp|1`$=a=EbgUA!Kn? zPyWhk2Di%P4f|_NEpgc|UT%JO_Svq(F32jqF!=lT^HG$hs@n9I4|O(DaUnPdZWlvY z2U-<=+}j8Ty9&~XoPl0_?>{>TaKGLUjoQ0&pP|Ekqi@prj{s}53gXVL%?r<{T@@$! z$F1DwiR7Aws)Cz5Bx&_A@kNWtTjAd?+^5tEMM}DlliGhqqTL;w`>zh8?Rtt6^?VUu(mK z`9P^4%rYR`H8E4z(P#Ba=OzONmwjnRK-)J>?>A!**8-{5<>xu#ggBI!SnE?-)h^o$YjfkVdYR*9Pckg&8_5HoBlG@RDiS+B z=y%*#1)`nA;TdL6)`Q`#wd#Ec8D@{ndm2|f8V?#QHr^jM`SKi>LhL4Mpv8qlnxb4Q zFz;7d1)b)v-+}x|>Q_ArrY2-+7|i)Q)?+Fk!&iHPkOKoIC*KeeeMSU#7~TB+OM0@2 zw-QwyNN6i0tuhyLcz+GAc2i7I{}2(;_>AKD&9xE%Z!NjM79uEm6D*W>k*B$EwIc6P z8)k83jkV{swlvF9EEcx;1|vXT1WuJ(P||PEar9VkIE7fAr{;`XW3&{`g+KxP&$kj+ zm?acCWHqx9=Q%rAT8tw@WV>5_PD;dNxlYDa11jGqMZ>(c7)u@$yP2p6#(wZ^GQ_ECr~Wwa-4Xu;FeaQ@5(N@Me`~ zD}7SUy^;7%H07#+?90rQrrc`KzYPC}{v9(sS&l1=x*g$QH|x{sg`EePUcJ-wJL+77 zK6ViNAj%(`9Rv-ZtJ9x?mCt5r+fLV${NJzl`U$wLy%qaf8Wo25zX(?Z5nk`$fui+5 zvj{ZE4@$B)`Qu_H(G2k_cY?pG%Q0F;bvEL&k~C?{_wY%A^E7f*tm%0CzfLY+?w?o4 zs~#+$g&qz-lgk-ME*27+_d-{k)@!X;`MoLi17&f}`!E*nOte0y`Zf=bj!tptlXs)| zIpMYNQ;6Sk(UA(f=4t6h70Auz)YPs^jk_LhDB`d^q+ELH#O)vX(IrpT3W|~#=0%PU z<%|}KXn5-uO!NLezN(Boq1xPYgFbQLZ63CUZ=+?LcH|Q-4c53Mz?$>4G=J5UTTF%$ zG1{VvfRV6m_VWhC`qWV;_O!!2rrwLWsns`z*}VnfOMd1$Q@?3H^9B2L$o|mri9x3g z$Mm2>qCE1J91e}RRc>hu?>lDt&A2kWbMOFFKAN}4tgti37TrXeFQ1agxG5~*rXr$q z6GthK^ial0S6KCt3*Fzd_!%|^o%rc@M75Re)H=d?9#`m|o!8&OV?f&s%VUX86$rA- zMy>BnRMqB*=;A;4VQ^`JwPo4sc?5>VgP|9vuaM!%goV*b4ciu%-pzPa|5K2)LjXBF zJa-A{SZJ}}0!|anku?z~cbtcF6}BEJ>sRZg*P%0)uZJ*l4W;8vtK@MCWghXO!ehMq z!rjOPc0TRYQ#QIPx0q+ncs0o1Ki&!j{a9D08EGG7#TgB50cz zz3qG5{zso%m2E|#$o1Hi=D79U?z<6rS_VgS?LPOIl} zHdF97Tp22#(+OQl&pU~x`EI1N-DT|-T@xxS%}{aoVLKNf^59N8uovs)ZO`jZ4|vLP zo-X{W#9nia%GuL;Q}|&ZqqFQVZ?}x?#Kmd;P@pmCjPUgU+dL)eP^|X1Uq$3;&Rt*b zFJ^Ais(T)^wVkaze(|B`VLb|2eQl=y)OHmHpkDExpzn|3?iEw&BbtL-=1{gVinxIZ#BZAu1?7n*+MwCPkWuS!co&lO<9#~l| zf(el^*@`U^(9kUpLt>mIo52I?rnqhtikX9Ofeb_$Jq@|cX2-_c*ih3()>na;emp^I z;W=Guy6r=wc{(*u8_S(-TwiI$E3A8Rop~7sQ{ojVNs}~xz9#)XF=_l_U0Lg4mP&wf z`)PQs{I@it;o`zk}N(RxYv4?ovRkMml?IR{B5lAKpKk zrMG-N{Wp%7^-BnpUwSsJv}m0JB~Q^V*f0R8O=*wFFK(GZzMy!}FyqRJLm{!{!&-EI znYpg-fPV0;67!zK03>GIR4EVr1Uyp{F8qo4@vj?;#!oH9F4I$Iv%3q|cbi0pSH!GX znGc%M7ZJyOcd!RPGH%66mZs$99bY_M~IXbV`?!niIvR${Ak@j2F3&TCirlJ7BOYBbN=eZj`-rf__}Ei zXq_>2RUMBHt;3pGbq^6T1c+Rtt>{$?64Uj43r|l&^>8)0km?2^-D_%ZzjVpP^${2U z(?EGNBMcp`h}F1pp*oDkU0em6ZBvq!-n(xRd8CWoA+Ev!JzwP=s9K4=Hdk6{4Q!kA z6DEB-882Z>95zTo=L4v|zq~zK-xcIh98lfu-Kf#oyv_mmio| z`fJU_xKym{_+TQL=X5_+#P)o(R^f+m4mih_B;$o*G)KLfOOChp6P3vSYmk!@g`LmrV{vr|3Pe`aMjAKT0r!+URi zEpSaFvk~T=C6bGIBnou|?f?T9fN+u-;gTuDg1CQPhT(#Zc$RRnY7q*t06o8DVCTH_ zN(xI98^U=fK-s7k>%Mv{6c(T_UA}n$(m+-0N5MYMMU!$#k;6~W+D2%;CNHw=@Mw%! z@h|WJ|M?!7;=8gaDbYY;6eP-w<#lc!#P__cwHTQxEKg$-YX%QwW|+637yUey5!K>p zGAnhdU137vr79b%e7IR?EoYI30RSr?Cx~N}JuZI0*`j9{?r6wt&sne}qrD^JrM->; zzznWyW(yt7$000(UfHYkcer2KVK^fWK{gOeG$91iF)Hn*gLRl4OrXRomzJb4r zGxnnt}_Mm8%kl$ijNqqH^W8%HpeS@EsL8V{U8jGK6neh za&WM2^+g;)t}Ic{CiF^QcEKhnL_m+T8u-noWMbzViCT4HcG9fft?b$7MOvHS@;hB` z9PwM6ql@=ZdyZJhLa*Q4NXmlEdTEh;mD3Z+vVP6u)6pN7ljZB!hpipFv*X>iD$5x( zrF0=>?S>Z_Rg}bw2<)DZpJ>CrMl&Uxlyq# ztuQX$Co*1t4S37~AG#~oZ|d-c{+V$d@$@sPo1fjFSEJuJ?5H5eB!JY;0RH%GZYWF9`;xq{A~%ysQu($PnA+zX*3e3|V(N)^h!xg`? zg`4$6ur=p%un-3y*ipFHe!vftlP1xevTSn<=$N2S}olK7?gVRHd3c<07tGo znKd!#r%K)OVTrqN+SuTg_vyKV(UZOX1Q+Aq*d;vdL=68ftaPP;zoTi0=ktQxIj(MG z+djC?{)R(>%Dy5SMb6DaPs~lTjvVwsZcij+H>YLwd;8{OEP53Y)x&zrdeuH>o0SOg zxGe6aLkq5CF{3(l7|6o;RDnaY&g!v3MJotMqct8hmh z%6_yH%_S}qmw2BB@kwgs79JY)?ejPrvG;h$r;l*+`5)l4fwogrvdO~*D0b?`wXCqJ zfTM{U=+UsuRs}Sasndb5sYfyO030_DR|X3%;9c>1 zBUuV#Dy@05eN%T}8^mi6gQ zp3+MAo|P}$x498Dz`@ta;i?qJvY2j^meLU~rOz!EAi$NcgQ?|Z9c`SBjF$r#Y6I9PW8qk8Xe&6pBarxp+YGR%SWl}Lj zLh-v3IG<0{^4Z(5F98(mS5_4J_jB8)6CrJ^&}DKHZz^j_7h*HtN!XvOXz_hi53FjJ z+RiiC)tnmO_x*M6XE7#%(8`lF>OTCpe`8GhzVkgmP&S=7C?gS*vQhrSBE~cd7N-pU z@1Oseyv{h|j^P#x7t1HNI*Kaxyx`hV4%sTB^{(8WlIE#BWB??@k`H-NKKp+l7t7k; zba!s7;xRww(My>SSDCbbv@DaF--^YqBL>>RQLgIse6x>r825fNZboMWYuCqF?;D2p z?rTjRiDh$m4>-0QHI?ey3HV{SVXjC9%Uj%Z1B#pDol!@8c@`d;AeC3fT|YY?4$k6z z-w3lf(-PY}8`wboL_d01oGcz_QEm)2)?3x)%eWVQ1>f7MimHurj6Bj&Y~S zb6=eZ2H~yVXI7pswyoK&9E*WSlfdHpo>tKOeZaI}ZDi`;k%;9+U_M7(!&)f)4hDv$ z^$OL@Y_9Ji4wUTi^Xfx;cmRIpn1Vo?%jjlGHi+|%wOP^n_G=hCJk80` ztfpx@0N{=LG^frY4twstT~*_|>{8d26@7@Ru(`X$96VVp>6gKBO8?BP0m)%L(EML+g z3^2WER{1sJFkeLyY+FlMHV=A(Sdg^?m0d}W18PWT%?Ct1*d_8JjwBxO3v)VpvXeth zCuL$PP__Y~5bJ(T2N=en!52v%j{qPNPYZAdgm45iS@Y`8Y$!1{(Zga>&9R*jAX!t& z%7#02h7<)Q1Kx%8yad$UNJ0Xs63H_l-#H%q{9rAjU=Fyr9L`_2Ppm{0ck6pdU&B1( zM_SNXr3CcM5Z*X({A0`(6%x1@SL8auo0}j|Nq@fQ2JZ`BVEJ<${n`1i496C;IZT9b z|HwTza-XYJ4Upf9wc3J{)-s09;);COA6`8_^mYkAcHAG&=McCUJqX?B7UO>H4(opJ zFb0TJo2OVvh7+C zt@z5UR=f>c&{%occLJo2XsL#?*8>H`cLlq7SW7ZQJQjqudoWv*rm&c;Se(imiD_S4 z%vmjYKs?;O>%V>&NewPFdgm`Z5r(!&Qh0PqZ(JYdAWP6f`<#KWx%Mxs12M>|uwSSm zsTk{_U(oZ*)`-7~>c?+-YCkVfx$tYpByj$n*P|hv(};Kc-pn36AS)!Zn$oqE zDI}rVi{H-owu`A=(BP;Mll9PGSuAJbp|0ZYCJ-7tW_PDGKa0r-WsB_M0~lt*B_~WU zi+y?jR1*sY#U1!(^DxYmnlu1t^RV^2-zJ|B&=b1RdtlRO z4c_bRejyH=OGBK{3g38>wYOKF`%mxP+Fu`Pmc9sZUdTh^{U8^=(Fl`Y+1_S_hHIV{jDsLvDYk(hj)Z8=@rmL>eK$X(yG zuLW7s<>A#~K|(#m5f7T^KIHW;_dQ|VFrl7B`8T~NgPC9iD@-tdJoaT3m<%Nd$kQN?(;XUS z#Nm|BW?2PKF_39lESH{zJ}-wS>rfr>)Kb6h+b<#H1lSiD!A@R7S&AfDa4MGRdyqpt zu4aGIBJYnCpJzv2r<`eK9KCFcY-cft35Gn!e_LCn1eM37)tTm*6*leDjF^1>)hp2h ztn)Ebm$0DDOH(H$AWo-?*qw`_J>9XI1Yt`T}Ra8FY+o>Ac3Ir z73v(wd8#T=3Vton{1_b}b>eu3%F<_?&B1cfIF?w-98`LiB1@CB$8+X6+vZD4y- z?9Bz85ub&QK@U*@UJ*^iL6jQ(%)4D;RoBJ}y zPd+Uzv+2Jc=3{q(uDV!AsOJ?{O{oDrkDbOK81P$WW2l9Pe^nVK^m>pmYg{!hRNVX; zd4K|x&KW5CCUbSA70>XVAk;?qzmbgyu~H39$bwo5=RuBpJ{jcPu=vp!A-39!Inu5* zk66pz`4i^P4`UU@-n&YG0NXgkw}f;Ors!qotWB*|{L2mIX|W||Fb_8yM`@eIpQk9| zfHFb=h+CYDl~o)c@t?kq%6*E6njVzHf=e4Po$2WPd(8cDO)u6tb9pOpi;6bdeFtek z_xUH?69;b9D^N0gKfy7J#?&L!N|H{a&He00Kt-Y-QKSWG*SUIR4A5O3<2PsWhXHM0 zqRapi!>e$@NPsryJ`xj{kqrb*kJ@49(Q@BArpbAVauMhQ(rG)0H#q` z81Hol$`9gju_FncPMWl+ZJ_9!mD#I)OpcH`h+Ht0C{;10vrEap-JL9XaaaD)5Aqq} zx01UzC;0nb>!6P2z5m4j4!iv9;nsNS7;jQ$1SkJzwRDL=Fx`lnk;* z`ii}L0{mQc8*U%8bc@oJ$0|IV-bv+#fR>m7M8Vpy-$pF;I{j`H!J~j)f8P|21uY^n zvOFC#eUqh%Iv@lwQbPeFsA3o;DVyEx&|#ZIp*}Apse{1`RAAMa*x$eH3zbg9R8`5P zaxsH8HXuGv{HQcW9o}$mByu{P2%s%k-nqD!x)INH-5s6{l32Z!2_zBEjTzYEymH=> zgD>O)W`GNE{L4<3tLp$4hl^~$uPA^L@9?R^X12wd)&TQNV&$Ae=*XM1Vj5t`;N$?B%9-_AL4h+U}o7&eMNY@AP&{59ec18HGQxoxeR!ZzjJs>o;{uZ~p3l`Z?HeScF1aFdX0#oh*zr`4mFA z66Znz$D0qlb2BOi(Ls%vFT+6e?syGr6@$CC?_IT&6M}nt;&Q^L@{SDx{CC4{hW>1j zd?vPwbv73EV}<<;hpTJen^SzgYigY}Ab)n@X0nmosz5ZA1U<%BWuxm&cYoea)?vY5 z*&RAh40p;aMhdx61YIq?fk8TQRBl-sPN^%Nco|mv0}1sLWLaZfo-IEa!&o zWBBLaSuG0Y4{jeSol$t>Qe_`bKV_!gQNwz>7IV{SJEKCbJ?oS2Xa6^*J_0n&S+b<9 zt81-lTG)xy3QKRO+6Lw)K4qWF|5&&um~N{7RG~%3*xxrZ@|5$?7%Z{*cPCIUpT>Dj z>0RiBD&Id_zA`;EjCohMLN3UJ&&#j`FM&(eZFt^vd9ATn3&aWc#hV#J5tc3diG+YL zh{8?8Z)B;4B|2B}h&_5W#aN11y0p8vM81m#v2OtuPXVza!`*_WO>Rg6av zVl@Z=uVf;r?MjFmv5GbK_Zr|cGUI;JOVJ}hzT~R#>Rt7Hh+ACPUStTG)qlMCRU&sW z`NE-@1Ta$-TEDCMN3P&-ao(YNwQ)gNi$^}xMw=#>no(lfF&HN$ZP+l}D*Ohui0tm` z!&jM0hG3FxbQUdJN_Z$T zs|LOA3u^A2j$S+YOEvSGiG*Gi z2O<nx$FB_}~#)SC-0A_$M7LG#su!6g{t4)mEyzKVDMMv6=@%alV z?R@C|;Y%c*!LAo;#qJLB;#tA>>0|xb^?9#bMqf!I#*{#ZeK~|RTQN0I)C}pX_0&El zWiN^`hX9eu5!&)6X#Qd{2XMb-mG1>x+g~KY}k8h}?^=$AI{Zb>DgK zN#A#ePEf2tr=d|juC`aoI*WoPKew29_D4hJakne0;Up!B z$6-qYoSg?>CKzH$@d+#9f2$2lAj59>NFAZTFmNAkpK0!BBynq+&EQAOjy0QYBebTq zrJ`YWEb}`e0eivp-APQ7w5pEzFXj_h=ZV;ugs6c_WrvDom5#=eS2d%)>kWrz;~A8% zP|w$|qWnwhig^UtqX=oo$ms8gjuzoIj(_JnySxRzlA^7=ezq1R(dNY`hb*nMx<4B~ zRoB5!ZM9%XM|`3c`O(hy4;KYR{>)zp%zyrust?oMBcW&hzu{3!0-zux1c|8@a!0qQ zXKu^knDavy;;=de{l33~+C-*xVbSkAlORqfr2IeP4*YtV@+fz&OUUV-0TFP7gBcZP z0Rt}L={9?;_OG~SkXEzW6SifRH+&nKH(CBK7ZIpnv86XHz60URQKviz0ykLNAx*rE zmngOVXRp0?M)F+ObYC5@llY3^C!%i0#1=>0CD0QqqbI4a`+TSc} zyp0dp7uJE^TC`#hN+Jhy1bC2BFZnyv9&p>Gpwx3i_aI~6CeXmo#!M}wiGec&oaRk6 zZKV?QAMFF|e?!qDfYki{L%azigH(2dkG8S1ra^Q>BkRks1}h%Dv4zltt(pAsE5zt& z9qyNnueSjk030fQ3!4oHlHi`wlY~AF3Qa3I`|SL2lkYcMg~D^^Z4L4s#)EIuXvBw1 z*`9B9a>E{4TL`Lia)ar|tWzU;I{Q)t23b3`KT-y$_Wi>>ps*N}#oG+Vko~JBe)i zlgP5ev^g=5`*xZ?vFDHb`FWGG=V|1+={ENJ%_q{cGnbMX@zYM{2*TB_ovgIkg#h6; zzmSQW;jPi4le2$yVQ-gdacQMd0UyZbKS2{Ng(d8B$)Rsje6nt@(3ZCD-aP!}Z0u|} zkUMvdx6*WkS?Ix!)qRDn+-tF>WJ!MyG$C3Ijx1&Vk0?)#(yZm03K_OG0LvRyXx(lt zNy3B^PfYDRfwB&_{`n2m_T}^{Fxw3wPET!-b6cC4o)wxuF#8ieGbR|0Z_VI`&4wp` zeH^l|{ht*@Wn*i7sKM8|I7O+JYd2;9DUwtYIEGxBw^PjLru#Z((uAV?I|jA6v9SGN zp>X~%$mr7R(pm58qP~-16j#Q-nF4m8+EJCH$WNwv5;p%IU+4EO z>^K*t>z&#VMp-P~>eMCSnZ_k~rGK54IDko-mY96Q^)YGv9p~uYW0%9LA0oSJ2>K#C z%+C>o4#fmW>ITW)z#=hpPFU8L6Zl7&viO%7I9SDH*o|@z6Hyh1J?kKMeRbc;hgIN% zID}3ro3O=ev*RXw4$rSepR!g$xD3tKPa}(@$~3x87fyaYW#T%T1Fg1qqJOu=8jJbD z;tHcqO(4M3mpZgLi?thVWf0Pv6)tQuv$1Uh{iQ0u4&7lN2raa5=bItC^bxH0pL}oN z=R@JtaMkjd`AYoOdEukb^F7O>ufVt!vC5x#1%f$9j_W_N)zZ5n^L*wm%;M}i{Gdw|QU+^~=k5xw98LzVKuq;CV z#)9f$k)K(#Ac~^!h=3mUv_SUw(Q28$v{*9SZew=(s;4O^vzQ-sn;hXn) z{+nsS+q}nKsdU&wSv=L|jiDJW?Ll;=zG`%^8-?XQ=P$F`7;VOaM(ehLBJn!QY2k@j zulWbCwE@?kQg4iH`r<9&D-`o8i(>^Kto>c{L;~&S#+!K_!Psv*BQ_kMA~y1U((-tw zg8w&wou84%^PuPYX%#B6E7S3<&EEE)iS1&A&T?ayxc}jc8zhX=*^R6#-1a&mPu=~ytKBDu@l7{+GAb-tS3`+X>-zkT{PslB!z=iS5XUp=6d4R#E$|C}Jv zRew()$4VeaScuKX4P**eivP#dUq?m#ec$6a79gl7odVJ=Af18(4Bg!zAl)5GcMK&h zDc#-D-Q68h(ha{m&)562e&4kQ#6Muo+{eA=?6dbi=h_dhGO%#5BoKyNuThj778(2t z-~Y4PBG6>6I|}Mo?24c}yP%&8l#z7I$}wznV9qiyz)bUwM^d=T_`XWc$Jc57O>#HLl4b@v;?#}cdcmA{a`OG=I}uou-K z>1fDQF8yhPETzbA=Ztx|exuK@T2cCFtG5EFeumEpaaXi@?BL-t-)%}OSdy}vryL2u zhQNmH*JE!AxA#-AfGCc2>*az0c<)A@v##GBOpWuGjh@et8IosBegQWn1kadyh*v^R zIrw~7jRx~;a<%kD(Z0?OK)^#(n8s;u?=o&P&fk3AGq{(LXDjKtrWGXuhNN1*FVpo+ zrs59pbSNJIE)NbJpMS_8VasD#$^Ej2Ax~s&j~Y}hop9An-a?fwsISs`DB{ezx5cu=OZ$7%2u+#mO1VhKPv zLGF5mGaC#S7EZyOf3_Zqm*akX03Ww{BR{aZG!NShf4whky&HxJCvqZoXUd z&e{I~{+ES$dy%8%t>DXQ48~y->TGhl*svTgOheT%w!S>RLp|+Fbs#;?D<>bc(rz4q%b{Le#eq!V>#X3V(Ep?3Lm2l>X_i z!|tJY5qBe=ZuY$3p8KL3oXGAtFR7Z_<%W$i`v<*^Y{GVPmW&CLk1>@4??aS~fEb&# zVOO|R8^5%kb9`A-GLqS!J@14(o#va_`>NrdVkmq2?Q$MNMUIT+Ukdmrnl=hBz54Ze zyb#?%zp7$B=;a@we&`K_k#46+sy8jg-nq{=YjU~0SVboc>eMHtv*7?d#H7cVIY^$^ z=-7>-U8@X^FLsJ4>#}}b8l+Y1XGax!T{0pz-SLnuX%Aj-$yEG3e_46R5hY#I;@j8T zS-jq7XbTp;3kXCRmaZrUYRq_|HBp|11i<}e1IRhtehFD_6C2c^HVSI==@l{HZOudr z6qL^|86j(ah{4&CO-z!uaij%q;Fzr(;6fGurp-;EmWR2WBPVB&>ytGG%5L8ZQIg^x z2gp0T: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

    NqvoW*nebyzB@`;~! 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į^JL8IbFU&|F3Vhrd&hLKN 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%0Dto5GWlQ^E33HGHP@5#_qmLcyj+P1 zoaj;1lR`XCCQAEbiN8X5Th$8=3~_rwA?lzF6e2K)bQcTKaz*;}MwxbVT>@3>OOqj- zgkSPH!#M)^TGNP8X%FUa$!m=RSZW`cuSVTnZhON+GLDPRLie|9Tv$?aSCWs8Tc*y( zyV(M+=(+v%hR#K(vi5K3KSg7HtgCd51LqZiJz{o=2*{QmXQ%y=R2wi zT+(}3{{17K&X?Ol=Nr5)HTpmsL*zejN(rC})Dv;lRvia=+#U{3hT#)ZPf4R0s9jp^YqqrP_ZtiK_R(c6lhPGARmuLI}(qsjFPMg+GU1XV~u7 z8+4qI?wno3M40rsa1*<1qBC;!)%IFN<3b+M1VQaJcW#a;4*f5_p7RXncQ^jAiR1`+ zgc~{^v-uy3$DpcncF{M)UY8w4!Jy} z$KQ{)BMdIZ_n-qSx_pPI8p{ zOkGERXzN5or^)}JW5BT(TDZZiYwJdizFRBP5a~3P-)@iKKYaTfA0)^cP*WER1qE}tWZvtAZ3{gLY%3j1rdfHUvaxk`;UzMen*(C%j#)5Mkd=kG zNNwE3L?keH#5uyUl3Qs%ftXJtEl3V|+*J^e`BH}l4X3VM)@`ytvmmw2^rtrAmAjn= zf-dUA*VR4U$y`9Bn84f+ah40l+fR&+`pG!sZnsTjjeN-bhSSg@p6%=_M=XzGiQl>~ zQ~5)K{{9kcZkgQF2+2z9*cf~0)b&&R@f-Q?9wu_fm(LX&Df>7rW{1S=rczrE`DS%0 zAtJD|wZrv?k)B7NWx$cYv|mmc$P&r?=;xEZG4>oJUg6B0DzhF+@i)3~$*pS^ot1D(LXdl{Mq1VI`4^0RkXqmy4n z9sJ|VJ^Glj&>58rCpS&cPs#!g=hdH7-9|nk2IdbpioX#4mEEbDq$K!dDkovtZwHV2 zcof#=hYx5|xHjK*W$*-rIVn~f)k#S{rg&yjznI=S=Xzu}=kSEA)_i~btmNYGN^@tb zCN?188vX9}{9y==!g>KKr%BiMYSr=D6nzv0(b1caArh!AquQjRsfw?m*}4ls2iF%E zC*Bb}C~Ox&bW#GjQc)0TlL9bHfi=(i{u&Y0)$Jg*b1u+h7rf8ZQI{A)b9J}%{d)zw z3qzCdx(cP;HwG93nm-OB zVJX+82CcZeLEr(CO7=WMTnpxV<&4-nH{G}n=05nIOnhFozxZ-y*qD|QKP1W=KEE=u zsUiDVVLjZZ!t81^pwhmVbq+G9kxN@vx{y9}65yT5Q#dz-xVs^UMRcs+psG%qR;%I>geezis>%yp`~T2%m2pu&Ul&C|MG5IvB&54jBt%N2yQDjp1_dOf z1ZkF*4(V7*Qo3{L?uMm#W`Fq3I3wB*gHzIW}Ur%2!3g!GlciE&Z0h}&af*#8Rl~|=@SnjSFr+PlRA+X|) z=0>rUG*z&7haP^`QtK9uZ2Y^q1vxrH6ta;#N3I@+T0=)Bg3@FrV3d8+f1&n|uOmdy z?NrKfqPc5F@&0G(oIq4+T^i}WPpX5{zTwJ5m_g86WIC@#eQ{u`fb$zHu7afM7!Y;{ zfIJ=@pzx%gxi(G+vw4z~OI7$EwjGDbiR3nW)oaAMez0;e@utB)171_0B{dujV zvEgmD7XOB|j-1NImsYq7NG7TNG4wKC-t-SX_(1%tHSeVH{6ayV0 zQjGn6XG6Bv4N1#3Mnur@XSV2g?EJRYh2g{c2k1(DTII3k@phvmu=&Yc!{|QOk-FBd zh-oSaOk4~+C^ZZVKI;6e_w6s){N@n==Ah*Fcxz`%;JDQf=rElr1w!3fn-#B0MJsN= zutM+oFMY$h`69)**cUr)4Bl1dGzgJ9g3CY}qEipsI#UkBoCiBOylNH^ZAgGSsn7HC z(urm9Hc(dca2DNqHma)e0u=vV38HVAYtMtL;xf>vo2P zKy4P5LKIF*2I|=TrgkubbpS#)J{)+?BET#K&u^_nr@xXOD^riHmcOBqjl68 zoiT`IMM18b`B>xhh>D@NfmCW^maD7OY1Wpv<8eokZhc&ro%_u%wd-dNnKLeyU3JO> zj}6Y2$9H>Y31|HzKJk-dBG=Rk6IINt{8LiQd^Wcn_g>0g?44>fDHD!_i+qN`WIe5J zDUA|d?62XK+N=ISVy8KqOt_AcNyPnoi~S6PAV}D@CAzQsGIL4YiRLkeET5T* zFVD>(6|0bk@ehUF36r6nI*)xmS0>N!po9A7{(6IOO7Fos&ilRz^69@|LWFV-NTI8} zFTMV!_n~uUfZ*FXs-xnm{?#2d)yy6B{|*$!4_R_?jpu-wFaq^kaSxh9mpy^|{ro^Bh{5F)R21G#l$Uv(=M!lbTIDhB69XpGRN zbG<>($o3dwhWyrU#k}kVwIIp04;KPaxbLx{D4N!x&xB?$UDKNY>1r^o`)=;NOQ%t1 zRr>b9E2aYS-~95)t|Gp;&>J_#C1;?6o|Gdyp zJym;Hq(yJXkuZRk9WrEFxsS3|Egn%{#-42^1;Rk z0_y4wxBF%Zaw8NUgR4uZd?^8hUACNIBLr$5_gPh+v;zm&+u5qG87CB&7c(#)pUCzK zGo$B`Pr*Z3Z^@zA)x2dk-ghT#q-UC13VsDI_rNgeFhL1xvUhImI@_H*N#JQW3lsG3 zvh@k;8&H;279O}h{v+G6#-epxDdBmnnW==|lboWNoC3`JA0{NhwUExM7D)PJ}o zofFMri#eX>I{a#8(zq@31>PFIAtq-G7u!~Csr0};S=05Q;7Coj@@EZkP*Vjv&S=7= z!hEuB4yOx^q`BGQ;$&uAV7@tg#ll+Nw`4kH;a*`*a2V!m2O4ZO&Q=&$?pN0G>Z2^! zXt(XB_J|Y>PGq+3xKNnN$mxZLDyM$~H4vU^P-E-;sx8Pqfk-tBZXs=EE|_eS_r zm%Crx_c|{1+)A6h4VbW|zoLVf_4k@TD*k^hfN$DHiS+!U{(*NF<-YgN_wJIju5;j` zqivV@&8t1k6^Yo$Q`+YT3gu=bvC9e4C4A?CZ(Yc#SCd)pT(cxdbTJzE*BqsRQ=iGu zhZ@qa#uZ6glcfc82Lx6C>I}DxY?7gjv4kl^y{WYtzs4EtQ^$D(&fdSH{VC2=j)V06I!;TQ?^})JdYRK!N5!j6&4+ zlG7@#Xo;2eCU8Kw!HFc?)ULd9&GG1xG_At0uNeX#hnMo;i*q?)o~VLC^;;}{m6vKQY!tik+LQ2 zXo*L{aVSG)s&E49`~~Ar92+bDln(3FaXPyUeMjDXw+n6pp%V)H*zsB4>)(Gd<%46S z{*!B~_jtPi;!O-myg7sT1m8nzN#|W0<`Sal*RI>K$Hrf?=~!{*!>lo}r3MX8MI}-C z;+Y*u0yaEY_h*VscSnLb{fBlD$xn3Q)wV|aMKT}<(gE3FKmy=bfz~l_9%Q(0B^9M!Cvezg*tUHvNEzoNttR$(0+kqRznCF@^k{?%W8o$XQYwZe`B150?B1 zMHauRQ=lyV;B7vnai!B|Pqa{%&nj<--q`n!XoQ^~4{#o^troowkp6yhCa8b?(la+w z80rq`Yx}}pwhK3DxNp5y`K5Na9%FZWxHG?fTVL#@4kFmNZ&MP5w+A-C{%y+H8eISC zWfq~H$7{~gMe7OuJ0bT-#s^7>-Yue5t)1|sO&IJP9`V2GFw=h`@WRAxfEKr@yf~0Ed^}2bvgbZ zkOz@wW$ew5+^mc%Z$@Fat<~K5o9W$#0V2${cDWT0pzShB@Q!~bg#p1Hrc@yN;gf=U z(>demua$gOuG=}Hg@B4L#eb#7-jEE_n!HBaHCxqNpz7(+e!Nvs^6g*DB~yTT{Zy^n z05NAAE1?flx9)JdjW#d4*}4Q87V$vy!u9`ey5gosR!Zxp0C{8O$vgVYXuXVVddqW zj;3075{=aqw29Pj6{M8g^C3OAo)*ow=tVdb6NSRHYXhDrY&&ORX~L$`z%7-OC^ zDb^aSKepDY3bARndjmWZQg+Go&rFL?a?=JAx`Q^*J%lK#OQxUsbyym%S8)PYw#_$Z zNWd@Txbo&jldY)Fxp5n-^`6Tt#RQWksu&`B|2YwR3xX`dNBE@xEt}!Mqk%M65rM{t zeeOLGbg0M^Rn;Rmq1D|1i_bS-JBNp?Ae9Jxx90h-&VGunHQ$Dtgl0SI{w&H#u42vR z`>N#`%BG*%_J7jn-6Y^@s;ZJOSNZ!!4G`MUWCQHlyk!&w$djUGxdXclO8H#=C0q9GU?S_+LEt8szH{&*GyWF@s^uc25)HG>n-{a z>2q_67m;XaP|Tnz(4uMO1VtGTxd&G|Ktocn=-tP7h!rba0SRiKpn zxE4yCD*PiGWBsup-tae-I8QrM%{Rp_C=g4sloQt)K_%q1M}JB42ZTRt8$*mC7B>h# zeBFQ_8wY|74w;!nt%$SKQ(<$8{&=?inZg~M*f?)A1b?Qyvz|g~DM^**XNbO0samN| zz4~lEC zc-Nz7bXsNmJU`^7bJ1l`2paVi>rcgxA05xWKn>3-$CU%YDVsZ);Cy@ zVfirkcL4<2sx%XaIpJ8xwPZj~OF`!U@f0=%5@0En!~yKrsZSzNhAf| znr#d3LvjOLZVAZt2&LG|YtZ~cont1yW;hMo6`;A_78MIy8O^_<{U>#&XsLba*gdQ~$1q;#XHJ?lY-iS?b$ ziNhcxD}8Rk@nLx7O4W67;eMG5u4C0U?R7z6L8QA7)z!ba!m7b*w@Ed;z(2ukJ+j*i zV%IHo(&rwu3@sKlbdIOu`!|P!^gH%=)+2g;Kb^Uppzy$y~^9XUL12 zCNp1$7rURX^xxi!&bvp?zR-=0#n&hX<*&H4FM#c5m!?~+RK*5TB%oeTs*Iy&NZpQZ z@Eef%K-}FKnVNoMKmeKydA90{btSxn-m|9k3}NI(H$$*AcP68&Jsty)$m*b5zx+ql z9TyC@puk#t?Cy1Tx)PQml6+^}Nill4)_b6K3^KZ>HCh*&Yo1RlDsK^?(y)WLADT@b zqzkOtgEm+VeRQS5*t<~y=4#((s{0)ELGkI~OL0&iCEqMS4k+tg6VIJo0fO7{onLPl zAmo_nD29d;XfZIf3IuBKsG8CNyLjcJr6n94HlLUJ%r`)gxBMg@&cg{V6QoA(zM&b+ zKNJth0|*8vltDFmUcyfEfrIdE>1;o|4y|!m+!}HBK(|IWZ4~u|YA{a+5atwClK;FB zOs#*~aN~a|#CHE+cifeyXsV@X#|#G_jO;p%QgW+geZaSOI$FDv58Ku~8ESgpRBFW- zyrazfRkLQKQccq#@xaQey-f9AeU>TvguJP`Dw$^S(vcfUc$a=0+mC~tPQ6G}Pt3y( zZT)l$5-6^q)AfQaU6Zj;L4o7m?0u5 z39xpoDG9Khli8er{v0)Pdiw@isml0Ir}?V3%fr$qrvylC&u!;g6BtWhGck~$z~;KY znaw|5oDM2^lP_(+xdneFsdO=T0vSGNNWR#L2gB&gLQV!T(<>sdnNtR=O%{tpK_jI0 z|I`}4@4hP7L}li^4Gk^Hk*t94wHmN34hz)^rx!4=Z2XLcp%DBCEa*XFfXExZ4Q1GS zBT>lay-sseZOI>mNr9w81M`xnVu8$8TpJLcKqnXSmrMaj_W>a)7x~pEEiJA3do3_& z_E?b#`y3osOkW&eg=<*FYN z09Bw9fMQ0%!=*=u7#E$<^ni&0vK3cmt;GCsXGHP`Hwo$muQN@s8JNWY@3Cm{{sQ5d zX3QfC>~u4VKz*}JxPdtlgOe8r$-s8sGbA-Ytw0)e{3Vc1qR^l^AyUSJn--uiltA}D zH=#Q^uC74}#YjB6mo_Us;Wy`_b|`rQu}T~6@GL?yhDBIp)B8~_9Rsx z)fR65NUFE?@)9{6=>RG>GmFo1xP57V#zwR%*xWi#t%F9~;E)OV* zUS$2=cc*ek6uav+EWH~P)s5Q=9W9m69E%5Clpn~x_ROSqfYf*AcHyruI;!4@IS9(7 zs`hy;2p6xe3qPZRw}r1b3YN}CGF|eD%ssT%M;Zk~_Gi!m*dJe$lyFgKRg3_M zE*>EC!wYz#$wVSB1}P&(*MKdIvG$^Gv$HTt^5=?wjBokZk0^bo7qzo~*P7gYsdxQo z03VpUsi*z3?TD;7Rtmo!jUxt%9P?+E{m-##dOQvYFYJK5bD~u$nW}0k%u$En?AqauO^2s|8n@;OCX;DHs zcpr~NPpdfxhc+};V%g7wvWHSSKDY4I=_?y264zuXK+pB(+cS$tYg=%KI6PdzW2Ta( z4NHRAKPZv#Hgr}Wv1Y^D;LvcR^A{DY35hfup^3RzK)=sg{PX~!=gP_}?5x~!gnsP(v^|K`dunlI#WZr| zSX7VVuwL2VoCE3?M-1Cw;Z~9{HENF`zrK%X=-X3_2OjuB0T|=^$ zj|4SAk628V?F*-ub4*p$#;pk%^7ZGE#?r?_oChbj7Y`p=u;^IFM$%ARl>&tIYK%PEpy#8J|9S3nAHw4HutcZnN(XYy zM0qP!8m;C%cr}|@9KdAQL8|fipnLueivx-|NuXyn4%{hfVPoTW@w@S@5TKSJwHL3X z!BN8Lg34&6{dz~=R65F&JMNpF<8XLgI(-xw^me`+)6cdM=CJge@S$|ISwvXKYKE_H zd+qc}@BwyY?^5d*c6R$!v3;L)+X1L!iJhiZKrFhxcN7L|n$-}JD#n-**|jj)W>jU55Z%uij1oy`>r;tS=h#g#oV_2sPP9LI zBzjYR7u*ct z(`CB0VI&MEmr0w~y*P>wmlkTW?PUr5*b|vQGrpsWxk|vkb43@tFBp{IiMJhw9~yUf%D{xx1;XowXbtK-8_ORTt(8Z!yd*`z@Vou9O*RptG&&;MOGo31P8PhiJ?X&U#?COB1C}GZNPWbID zd(3P0sJ?&z8IFw;ArXcBSp<~xUE6A^=fGd0C7a&au>!}MTdWu~W$F?sQ0(>y8dVVW zU%f+hyDnavJ?w(NCy(IkNy3G_kqTR0U~Oap0>wuts-86{*qr8g}yzEYWXMjcx@%#sYmrbiukjkX-{9i7h)Qc!oCsaHz2y6ZG1DHso#Kj zY&IY|dOtgk(CG)Sa9G*bMphBYzmW^kjssMm!APImn#1EjrUoy=WbZ7atc$e+U*b<4 zIW!}!%Z!8-7d;VX&k729`e-;4>%N!AExiB}Ya;x+Py8=UUH$Ho@}Fo+ zN%4HoTug4-uAMh|9(gjv{scAXuHt2*v{P>702n)mSo6!liQ$Q!8S&!k_s?pY5rov3 zt9Oy!gwc0u7sCx$Y2u1n2pOJrXDR;P%pLqEKv#Rudd&g!N!fvf*oM^xT*>SS{SsXF z@GpPO`A;t*VW#@B`}+d6p3YBm6x5s@)8SqYV9b!5r9VU$ItifT68&WMQ^R{&J2?KdWJlX7j0QrOnta` zTSdx;i1y@nJ;hGF-Z_v7i(Fq}Aj@)#5%Y`q$)JVoBDr_CgK(f-<|cg?w)T8 zF#b+C>;p6t0h^7jrH<-KHx&XY3V!MfuS&V(6&OtqIIuH@QLK zc%x6VMcb~401Poxs`iEx_!=R6d({lfKD?BAvZPwYO6sJ;k+UhmaDEe@!2OcfT%~14 z*0qR^J~*zgV|wRXs@WvmTE|253_mczOI3`@OD;_iS}JnGuy_Ipx!ge!azAg_`DKi5 zKS}6$#oi#VGPEM_C-1Ce&n!*)BT?T^!KtSGaI2fh+`hz@V>36<%jXm#kDx3?ELNv7 zE_Xe1i!pB1xBPjuj6Xy26Q~+hS0c1Xhw0nO2+pN$(%#`Fy&=wTAx;8l<2NWEc zu?06a?YWT;(v1+b%Oe#-`Jf$JV7su4a5sJ7UyOhV@qzV%;(`8$>46u}h?-o+Ud_Sz z()lmT9llcGe5W0ZaN6_Pw0nzf>rEf zo|kx!ja7tD?xrwNrP{m)H!te zfN1QE6(67Xh}-jm9&{@#T8QYC(Hmt2iXZP(6J2M@Hl3eQ`kcQ(;jVh&b@CpQQz30= zy$WA)>8375n_O1$Y`#TZNmX7m5X#K&p2F?^Q0+(lxci0zVjksknpZnw^A;tHEbdv$ zUFM>l7}DfJVgW}FOc6p)`o>zb116>w)}|8NPL3eR8HA`! z6?QMa7;NOS;tCtQy_HHCI_hqW>e^d|5!xBIOm$}~?AF@kZzh*C@1W_qZ{rJ5D2i=p zXB9Ekd*PteX**tmRAg9(1+$^%+iJcU=XTCDd;25aUX|d~-Elhojio%OEfkn6^1`E-FE6u4`!WTa(52l|Qd*O5FMvtp-W4NU9`j?bjrB}*&{l3F`YRUN z=#@^)jV#uN?zt*`J5WHYNvy#DlCZx<5#}y(XZSzexWaGI8}9qFU&vWj@cj0Dh=Tr+ zA@V|)rd<;ClSzzKROZ1{&7JPK&!toz(s@LWrq6VL`_nJb0m%|y3M?DMhqs35DNE;nnD8cJusXK?_V97R z4_EfBs||7T&?m30e#K7z7+msSqh#B;(R@&x$YJ&|d7@Gia{Ho@eR&8YV6&s-y4MA& zwc%K&adrAR)qQ1}CE`Os4^EW{%fHuWZU^Bi1;b(U=9&39q1iaN??(R+?ok>3t4%)- z3zpCPOW*}M7kbJ@|J`nirdxQQJ1Ib{tWOEF66AGHAPeBKs5sy0_i8j0>@ZOU$Kq6G z<#uo|K`6B=)$<2!P)ua=>}J|HDN_exV{Vo7Xd*htqRC0%l2$9Y(xdR3)edQd7w2n_ z;LPx}Ap=&k!|cEeplyEb5&oxV-OX%&dx(C%X3y~wwDY8-Zz|z+=+{|sNs$%JR=K9k zawkwZ@ch$t%7keC*(Ain-`}`CXu@=Po0$xzu=@u(<;Jjo$@>p3n=t1PZUF>ICi?RiE__t&1p4&} z%nNp}H*!-H4qgNNqUCu!Pgl2lrEeS_jq}D^(%Xg{L0Eip1~Xs%G3hOLvpi#Q|D z7Yh%{FL!sCvoSw>89U^+iOM`PUbJ9$Gl{UnNI??x^5g) zu>C?!QuPJOQJJ*fG?Rp4hLncDxCQW2Y1P!Afw%|=lcXc&7&d^LimKfjivYQYWZTy1 zyrCHzi9MG)BakCGp>*pqvLHiv;?f%_4hE~|jK8^^(#AN-u6xQMz+EMPuL#8L&2ZYx zE36z4xyPPhu%iY&uAEqL{8YC=cNPB3dVarzyEMwRwaBl)%QGuY@19i3iYsg5Rs`Gx z6yUNr+VrJZ8PC=KU76>kY9Jo$uUFyoZU6tZ0Qb$4#DYFd%7dvS+n*!|3knN6jLNPU zDN#+}HRLS|am25vI3jYi1Va@R$NXMT3C7HZ?@24uF+x_*Oblg+{@uNxbhT{sbf zl}`IL=A3c2^QwE=<=tOeL8L6|UI6#%P3==00v-9Y3}m;yN9-RkM@WGD8A(&C?ko#o zL4gNuy?}7&LxtQLE#6k5C12|@jr>xpdsd=xY6wxtyv6(tO+&@D{C)U~OuHy>(y544 zFQ?mohl6mDKh+p=@wdxOF!fQo*JNZZRG!+zRj1CXcQD5bA@yAzqhZa-j?;ABCB>s( zIj?iEAW~w%gd_Q)mlNw40ly!(YrF=)8oP0V^xnrm=Zco4@f;cG>ovT+b#t{jk~4AH zCF!mrB_%qS^3Ddh!)1uSHrh)MT}!o7yViqgkFWPGH1WI;dK(iMXunU}tV0b3n~WH2 zxOK}nz%DccDA9UBvn6bluF_*5y+BUH;`t!!Ew=pVO>7hNXpuR7XlSaP_=nwERZTMz z6<*vz2M`An5#`1KiDkf+c~9Aro(0OfiB_Pb|=t0lZ&3&HU{ zt1@wgHF84EhCrK-+aG49SDX;}pM2nL9vLSDI%29OkM(`-Eb`vt=w`cj+IB`|+#GO& zE}wu+4GDrV#ZiMtU9 z*}{E(V-JKbXOwTQfBIG&?SvPnS{1xCnRN2)8l57_+zi;9o@L=xoI~Kz`iH>pTs`yJ zaOToWN(g>%U+}=IZv}&ixeCV1g7f&2EE{9Phf#xEK=8<+l&?~C(}_r*e3%Vo!+_tB zs}SyOk6qcDeL4%H6vP7-dFNdNk=*7MV7KMl9lCA^I(>!@)*(-{jV@})(J+~)twgTA z+11v{gSSQNv3RAh*^p37h1jz*rZp9 zQH_R)Kf%ccdve>^gKKXw*_9uDeJP4sVTo4i=a6;=x2!r znmEFb@}%tnA#~-Aft9BF7_J9BCc_QH&wGga?)9`KzhqZhz7%&B8~uY15RnK;O~q3X zFaOd&oSJhNf?F8Kq*9&m>GUtLo|NxpVtc>S5huIXy5riJEZVpXO3f{)j@aJqw{AR8 z^rq3%alenAMyjpUo7Z!PWP| zLXQuki74mRFL!)|32p8@f7$rpLreBH#vu2eSk-&IaI)r=`jg@F=B|W3=le2xy2!Or z6Wn2f^gS+U%<0P49u^ z<^U|U(#(u^A|K97VUV?Q`+a9LljrNPCI>)|^aLlW{#cyMg=ZPvL@BlgKeAWmCaNU{ z=v;Y!^4-+>4a63x;p~UuNZlRx`S;Zsu*jA+hwOIk(^$3>NiCdXch)xX2WbTlyzOIL zErU}S-zJ?2Rqg7_L1{Q$uQ`$%LldTI(fl1wHJ7wPU|IB3LErG^DT6@6cmqmj@Dnm-)BT5g)uucN z4I8yds}Y{V*L~3Dgw9Shk;~0n5U>PfKshRSpnR_vP4YF5@Q={BWHzZzoN>EPVpdkN z$L5vsKl!|jc%|tj7M5K34!!E49e$-N@Wo7)le*o^=W3h`kUTrb`=rlESS{gp1ejF@ zYwNi`v6J@)F8fW#w)5U=x+RUb0{d6ja}r(E#pSr(vQ=|Za@O{-Fc*_+2kr@wewU9s z7=K}scLC09r+%-&r$29nA*;&)S31;lW{9-Jl&+Ib7mg z7R%$jSb^IpLMF4M;T2e|GfGc^oV-WJO+G)^PfB)9MV5AR7MKn9J0M5#zAP){CuULD zg!9cC^G7xD=GKn(cMbH}xgTXshilq%OslurUjcf{+whDuhW9JRd~fVCmiSRXu{&mr z=5JOK*d+Rw%!WT|p?88vvU1zqy|k@Avb0u>ZSU*|5+K7#7luJRaAE!&8ud52NHxPZ zwJO%++S6eamHo?*N?cR)hH9@3wB;Z&e+6z=bvNNu_;B#N`7;-y%=ou+r@|5SBss!I zFO~AqH%@3yWfx~L*6sHnJBbrPvBd+v_Y-(&n`-}cJ?OV+vSRP2qFMnvXvu+pC|}Cx zv-Bg~It&AOx!)zrVnaJgTc-?LbWquOb-Ry_H8HeMzV8+>ohMuIq?aqV_gz0C=dib< z#7+C_(=_UjIjN|g&wA`V&cKvL+FJ;VX;hi0fv7J3fD3QIOBeJr0^>@hWHVqSP><%H z0lWePyLHFa>vpVv0gwVUg>qswDh#3*ss{?-{kH_=2K$Mi(^;GhNBfS)2;F4KvM8(G zocG8-@~N8**dNiYwKPr^12siAa}wK(g1$%U0r9666$wXu;r145aKsx@u1N`pxZJr-sPEUM<-GLK0d;Nj!<6Pu-WXfwtkzoy@MyRD^GeWekB zxN}lPS=`LX!)4CS&mf4(pFB#Lb>SX2UTF4jU+Qvk`XwBb<34q`AQ(dG_&o070a)f! zDi7lewR()#?HN-xJVwUffCU)gDmL%i!v3Qtg^;uyEjz3AgkLx+ga?0D93NFR)4UF> zKWLZ>bjJ;3;za%xj6#HCI@Eaq(*b z+QS}QaP7Dp&A%To`h-6_8P(`F-`yOH*B}Sk z@)@bR&$|N$GC-hXr%|{$)=(kPqopcE?I44My=)qpGEldPpWkP)zBHfU4b)q9_BFpo zCSZ9Syvg4NMV}+*R}M2y?KVx$Nvf>-hjznX)X+~$p%NT5Q6>%8_kNd?etw{N}p6ZvrlZ7PwcMO znN}D)nK^yk>3Y??-#PyZoJ_5Q7U67Vfa$NuuqFr6(MFp@my3E1PcS=&0Yw0cSg@^O zts}+x+U9Og`(xTVBV*|hNFmT6Ey97RaZlF|C?uPEuL*=vKx~hDfREU(KXuWE2GK zLhd>ePDh%wg2;naWtgZ9-HG z1ENlZuXt>ztH14mH3_GDBBrbP?$ZvY$y6l<{mcdZi`Wk726es)ExCrv*15hkZxYpW ztpTBX*M0Y0{8?MYy!SgC3-`Zzk19$wD(tGGQt-M2S?2~raA(x=Fop?lD{t&n_UFj{ zo7FY>1jL8|?YbZ9g~0oG_!@RA? zUczG;PtqD1VVZ0Rx#;L<YAN@55`3w`bK|AsC<3Y;&AyeeGr7lia6P9WF8F$0I|N5@BRZ*XVi ze9#$*(>!$q+M$7z%ZAIV5r8!PzIk6VX|gFJ@g|G9as#2dF?rcmR{jj^@who{fv*8! zRF5NXx^j4XP0aK8+e;3kQK^?{I0oGItPZ=;+6i7OzE>*T<$N4TUHzT8cRe{~6f`@n zy@_sZ(6>$dVj!l@m{m*z^K=O`cE?V=sQ1>M-E(;tYO%0k`Zsy>-54G|B{YVw&hRDQ z74zdkEx#OY{g|p+$LET?4n|-=0C?2(t&PIJZwgw?<`cQK#5EqM4Fyvj13PJ@yGT#j z(!47IkIZgU1u1=qjo;s-Hy zO3uZ|rAmR&mX#ebd7gM1tt`I>t<9NO`91LOnWMNd0^b_bSl{p%SKgb}MEp9K6}yRY z2(k&EG>r?gk|1m6?ir`zkaQlI(Mfo?VrYU9(VL~)m|^% zm+$Tk)*;G%-&|Kk)~zK;-duenmLPhOfmx=z(=@o=)TO_cHR${3m6HYu)`AOvF7(x; zfrQ)VH%ztJZ*qXI1yfNpOrS9o?Jd~un9{ffe*yH8-DgPp4&S4tqRIq#Oc&iIvHvF@ zm<4wF09TPOvGUzkkxrRhH0*VGvjHW>22@5)E(J+M&ShHa^8f-NlcZl|)rLky_%ID& zQb$U}c7EC>qJKDNIm?1h97EtNnJ0ewq!~0Hjg61LYx`>~BbkPyWVa$VW1U3xa+sUU zwGNxAoi@#t2mEjRV}`+L`PJ~?@TWO6PMGFeFq=eq_7IhIn=@bXabGrp@nG-!h*vQ% z`Y~5fuJOxz@csk8D+yd(l(Bn`<<~Flwq}a@xE}N)ATZxy+id?g#)wW8c z83PJu%v83E6Y^sH9}BEdIr!6OyggUt$Hv08jl@*2huoiq7A+?l}|G|A` z)l2w4p&bs8+5a8ake-b)eyFA1v?DEKODNM8DY(loF#h55`cqx}0&L+pZg!fn*GMR6 zTBC|X{$b9p7afkYpwib0{T+<>*}m=syf8uT%kE@0KD-o~IRHZ_H^|4dYlFdhlX zB93GK12-z096K6^Oc&jHaN0HAb9bH&QW^(}sLSEk7acHRZk44g>f#R>o2gbJXdH>OVU%Jmb0s=M}ZJ{tIDk1CPiaiSfs@8}kpCnF1h1U*OV-K7cF|#xxEzB zn}0{YHt~pX_A7sh)j3`2VULBkfuil2982> zl)RzCiT*?}iSH(Yxki+)a4fjdZ?qKRf1uK+uI|%+kyW6WuDhQ4<4&jTcx(?7zB{?1 z>EyWX!_{Q-d}YM?lni;lGjumc}?UI8e#4?h4_QIi?K zcZFo;9z%*-6A3Yu*Hdc}2va>nJ@0RV@1>p$3qL~;{;{7=l#uNB7pD7KqNZ>r{)L!M zCz0d4XWZu3wp&6`!OvwU(l6opGkaEm5zoVk`xNxwqRHUnuaR-uinnaQF`Q%)?M-1D z2}Um;0Osaekf}WQ*&aGzybnQY!~ z)eVUckgs#fw;Q+I3rFKuHeT27c_e9K8|pmB?Mn0}EyKr+sB8?V*p<{WsrrdjVm}l< z4H}iy^?rjHgrV(1{(Ft*V~@?adpj#;kFdtm(mObPn zBToa}^benOt+J4~VJg+_SoIbuw`|!Pu@N~4kOAd<=G*z|J{R)ASr?v4U%;|=H$2`r zIed>O2g#URs(|p=(y3&3#Hf&43g)SlGN8J}gGF*1 zihczIwEGRXOiWvV>}|@X9dD)hk!_Jk!fd!qKX~^PVgpU+V1g_@%(DEmlL6K(hvIW{ zd1=7;C~fF;udn&Ou^Qk`$VBx#SpN4L^TX<~{=hPLiH~wQLJknB@b#FA3O}eP20cSb zdP&pI6y0mo8RhXE8M)xsfZ0-NL;uN51z@{Bk*FyVt+M(0^|N8^-x2XU5rA(FL-Nh1 z9{Sp*yeOc*1OQ_wK&N`Si;nyu!G~(4pdS5P>J6A)l%5D<$)Cmd{vg$f9YHSoGnO$< z#<3>(KhEaNE@H@Z$TL2E22-QGgyc605OeYd4$vOe9*9RW< zw$g86?7Y~=mO!vdQ&v(^F#6o=H&8{m{t#Q(-VL@vUNp;mLis~ZLE4VX5Z?S|ag`-h z{7bX5Whes8)yGe&ulCp8fk@jqBGu&PaSdc^o{B9rGm4)n9F!+ovegF1$0nT8v!iF~ z(JU=V?d#@%K*oSAPop2)?awusX~B_;{)NqmUx&=$pM)T*Kpvp#-2zA{XMs;={UBdo zEm@YoBJq-0pp^!rYH%v*R#r7%V{wi435Cx zXEj)w<@_(L+h#ba<~U5C2j%V&72S6_V03|r;D2B=H*$ad$@|jkB0p$aLwoy=gLq(6 z*)y)uMHs2CFdcEgcYC#gtOSXl@+;)VBv}eRefqT@a2b2z+(~8BnAQj(?$&Q4h8BRn z#v=zsJLN`S=}+vP&&fWXeVuz(ycIl;{r8_{e8pOS7m>?AY(nNLq9v7@VMJUd+w1&4 zo0!2I3>OsXm`vry3O2469Sc6wyiV!|^84F(c2yi74kBST8s zrZKE_jDUQk94XcJRSUz@a@=x`v| zeyNoJKH;VoxS3EM)R>g8%t|_cyk<^JPBe-(FS3QshRgT2tNjtqBgz7$*&Mghd#%sv zO7dz_gO}uj^S-IydzM+|w2|4j_^G$yOx(1fewM1X=>jy(qXQ_+bn4(7$X)CpfTebQ z2S%cl6lUaTF9cyr!-1H`{{LwD3ZN*w?|Uo|m2MCaQBt~FQ9v4`8>PFu1*Ai|ySr;y zLb^eOrMs8z-v8tC{r{ZN8D|&<-ro1_x#ymH?(7guUdw`-mzN5>c&0+KyWJ?x@n8#q zeQc4(^p+wesFA-_IEh`6FP4)k6$=RCyL*H0Do_)2kM;Bagt8(_Lhcj#-*%ptogozjn1%)ec42N}c9x9CBrkLAfG zI?l2lpon5AAGf-Yn6-YAx*C^!q*CLQAKcF>lkUJ9!ldzfN6v5S8-YwKX8t(VLmj20 z7^BBb7$`W%5f?W%Ol3N7jw4|G<)d42R&)XFkd?y+Dh?cWG`D3LY%!@<#_7F}J|h({ zER3)BX@PokZbd`&VvR#T&4K8M$Ye*l zi(GeLx+;~Vf-3h%_`%{vqkvA!rJ-2q+rPp3%h2DzO*)LBoh*_5QmEZHNH zw_?6O+Or52&vM`VrQGutM}Z~bZROq~mbEPmHx?*~&~JPM-bEzhjwb2mr1Qt`6{j1F z7ke#-YUu18-}z%^)fdn%3;^u{v*U7@$I1mjf?Jl~IqV2Tj=)?vSn_$jQQ(sPcl3(R z39Wl05dvQOp}zT!k?{!sGgd-nhBNY< zt>nxe=g~+tY>}axU!~lU2yUgp9u!MJj3|80C%aq{ZxaC0c;J6h1_836J&%%yp)w^U zT#--XZKXci^47d5UkITD4k_R_RkpIN&&+I@hm9te09n~}&NiD74%YXTc_n&bQi*cg zjDpB#b|YUn2%SCF#ZKX{x)o_)=!q|u8uqLI#}5Uz!ok^K9!4SsDI@|Vj%y zu>%WCIz34V!p8;C5Q-oFy-Z4Y>jpm5PA{E)>~TF$HGQ?^E~)92WJ(A6sOqE5ci;ybx>QcVJoGFHEtwewfhD{|jk;-~-J2 z&|7$%0fT=!0$~p1(Y|9EW3y|;a~wBdu^X%w@oCmLymR^ukZZK`nAcfPPH$G(b^#^D zU$aXbNKrqDmDh*=0(|;~Em9z9jL7-|!#n+_lRLH7ZI<8%6o0+I3pUS@oqL{95#=*} zl>f7%m-}$7!sT3CXi*G34MxE(6GEy0x46 z3OL%6td|8qMFB|b-z62%tH*L6KdE?biDD~SmKXVXxDq9u960M1f}@da9X0=gD2ASPa`ghXZ7#?bCp2LaaAp{9ZcZnwF_RI z=!Abv8FqXAd_m$wSceN6+y@6bXi8nB;XQeVe|6~rdV9MB1$wF6vJ#|-0iwesU6C(c zc7QhPbwRj*n0K6ogWp5ep#o^d%M!u)G=sKr@%Z*w5)gRdYL;!Rl?7+Hgt#g}$@0g= zzxV-6*#VYnBzwd{&h`+`vXdwubivhN=aY=4`{QC|MhpiU0d*4-mQ5yp5+$WvylTuW zF(4v+V>n8q8IJq_`~U=f`dL{7cRfuNm{u)4mPvL#U0dhzPu_IuPjXOVawkF9sC zG4}V)+vK0YJQq|##6|66EF@_oGtXIeG!_u^*)2sm6Gs4`csu>F%E&@~1$sf>bmR#S zlZFX-&j{Y33x!*yK_5j7jFpxHD^!6n;_t|96YoS6{{I!rQW@h1o^VR}9rHlj!@Sh) zt1-@8P)hFvn!H6tKiEa>RU3<yaS^zUfW z9XZ#Osw!;!p=6())rW05Sz=Xq8`wY)57H=M3CkC%JjaIaJ>#4vV`{*>2)w`|^LPL? zOymeOV|4%s=Re%cdsW(O-$~t0c!Z{$%|6sqYpY7+PTQW-$#t1mo}T)od`*%U_*qP5 zrlvW0c}bm};j^ruQhgLi#LQj*WA1uCu1jxW$4_Ozeg2d5(SaVb7!Z^Zo|Y^O2TI5o z-TFKIhVF<<)On5Xm4l2a;4i}gpcWyiWEe~&FyfAb>mvK;Snd~y{Gx&V&9mwGktw7R7sWh>=cR#RXH!Bo^CiDdF^$S z-j{Nf41RHSYj#rTWVS=CgFAEs&Ny#3o9D~LA07qlhaW3{(+tfsd3SMed6Bo1rIoN6 z#iFYB(-lqf)|(S76(FVkzDVwDOYp`LFeF!Eo5-8XMw-2CdLv7-MrA$IG_ZI-%w;`L zJK@BWsXEa<^oId0V=*14Rt{{gZopI%9vWJN*k>g$0eA2W*>~)#!T^}s?1_bd7&&zS z6NURJ{>^9I#rJgn*07W*2gv*bR6bP&9TlX`ywD6*tCu#uJ;*g>KQ2VU7)p?o1bp~V z_(u;4(~@ZsH7I96Q^G!bS4p<&sJ4~)C<=wpX3`)NJ%2>)s$T+MR(o)2iscm>x26m#OtmgyM&zE8 zh}-$r)|cL3ljp40?zoeX!T5EUCi|*zcX#-Adwcx&kvp_2$jP1C?eU-vGcVmhx|HX3 zVSKOL->Zp1om$t@a>1+MfzA70t5MX z!}5vU&}8QjPuY5g^v!n(Mb%joIquExZ`QnkUxmdv_~(O%CGBP^f5h0B+WiUQ;&dQ@ zU&zZzkPERvMTN!_wv5$5NW%9ku_vVq=R)XHZRvGn<%_ZC7+iu!qpgTG^pRSE{db1C zOAiIYY7`jafA-L_#|POHa9?#EVufz8S=N8?B7h#i=&sr;a{sMxUXGv(JDL(l2FN^0A_3znjU-3a|Mgiuf4=cRC@JL3snK3HyS$8x zOmB^sCgJkqjfpgiozkLxNSY%Cv#n3;%vq5oanJ7>AC1g1EJFJ+6(cFFWA2=S;fjQJDr#jWIu@S<8k0q~1u? zddJU*v_wPt@=0i7ZgX*ER_jR$iwirpt)rl{$$VukzIo`2vn;Phk&tBVz1|V@W^GC2FB`c z0O2Qr|EgFwHt!{&iGBvT4mlbx{v9Z4xy}=gLVI6#_2Ufyg!dKHI9iPHT$LmrC0W3& z$8-CHUg<0PooOzpXZ?*JSfnQnODeI*KKTNe}OAjcvPk}?&%ut1HR5?fxPKmBrH~2wG^)pxrC>_*%@ct zt!vQ5)n;7P{aN%|Fh{GT!mi0fn-5ClR>mK!~P$s6x}^C3;$k2`9+oX38?Ekqr& z1GoBj!W72mkaV;F1v_0X&^3B?N1Qk18BhYseiGD=4ww@VKr-KT0r;QxKyT3Sf{dh8{ur#)1agP=)v?j-w&migqC&Pb$<=Dn-`hOyfRRDy6(Core)QTO8L-%Wd z+3Q-Re{mZ)Li(D;dOG~)X6WYkB_!E<+MpI(EAb33u`2`X`GAf-D;Yq-0A4@A?Jlp| zS;S=;^}a#>v;tuoM+!>1TcnRK@{dY&RfsEtbeOcoq$wFjd8t;nhzcTDXYr5(nCRJg zEtmE>@TRz*w;SEtwccJzYRVi8)!PlH`>w#>X4Gs^MRIb7fo~N!$dWji;Dmo6;L?g{ zoUkfEe#6Qe)k{;1aQ379dD-dwHkGL`=I=?qxzTKqzfDLKxcfa!800h8;>}v zLLAK_8Up-0Q4@gV(e>7{x}KvnwZT6ztyuK^=haj}Gtz zbf3Fs2LU<$ryiSkqC+iFpQzJ1;t>sRx0L^a`wp~o2M;3a;rP*K2TXHFGWj@497`r+ zantK&1Lo|+cMM67KHy6R^l4@DyfFGK4cUA?M({!P^reJk$d%#zW+wW20X-AbgC-d4 z!+s#_T%Q3}OoKQt9As&Fpe9iFVB}2+77+5u`whge$%s9^Eqm8*5q!mbpZAqPPcdLv zSAT7A(GRS;cg?+Sa;>|q=t7*uROerk7Z>%zt`;M;AgKo!=5PMsjv3w!Ua{SYPZ+*r z)ZX&C1wG&^a`K}0CnKp23u>iNPz59DGa<%7CUYfJcN(-aH1k`>Yy{lSGmcQe;`$xX z#UeSH_Z=P7TdXQ0ctFRjyyc9T>~18RAGD^3cx?+1&fkvP@ehaGzX>b!RK3Zf)m;mzoCDVpHc97`)+>4*e6dm|V^u z%*goDfoLrI9<26#_+U0sXV=QwfeeZ#wV)`tXRjMrB0DTulag{yj^b~Dxfmsqj#(OcQnp@AJuxgbMfX2O)OqKa9!z{{~{{(gEjf5 zx>rHxYHuawUC>Z%G3;7w-TmI@Li7(s;%D{uavH>ulf0kwS(5{ULXNz&l;kHY`EyYu z?&gibB^aw5D@}vJ&)!{QS10AkyS63Mm|8+#6Om5u2yk$+A74Tv*z^YNS%)YAPU-_t zsmB9xn4WDyjI^G+e%}K;B`B`j?@!ob?7jXr0uPEN^@FhP*4EXFd(O$5^WD`evGmR0 ztJd`fPaIW#7nbz;0(bnZd^%cM^ev~tohW{w6dP>$V!>Q;w2+Q=ri3!XPY}(?x+O6+ zb@~Aa#ZX9le*Y~Lm1(`_35_!rbh~^DBvsjDzW?I@)j;(bvcEK|*fJSmhb7Pg8SI=nLYMj{nD>nMAyk5{~eWPJLN?Thn5QjXb7$} zLCW<0HOSw?&Yk()FS=YA1#f;RH#fgsy7=&g2BeoUua5wu*S^2{LY1FQ)2`FP+C`PA z5cV&gpw@+vlLN=C9sT)=k!s2TRihlUx?ZB|$+y=Ij)ESC?&634Wfs52hklT~D?)E# z6u4dp|2L4xZoh?>3r_OHDE6UceP(Fo#*zr3|I_YrG6E(9e$}RX{sSY0nn2oCSQx~$ zc>gZrB^Kz*D@?tp!rRqLad2Eg4%-1?-FQR25<282^3L^vqc&Li~pv+ zC^gn!gIadXN|!Y$uhOHsUchW1cqMGna;;dl<#97!znSgi@!|zy;DkPXv&6+>cAEM< z^;K(p(WmudC|ouE;*0_zz7@ZuLlBSIgLVNf7?(#I{;ab0{h zi;-RAQ#l{-6lNwiF;#0c+v5gfb#4d3@r{tTuissex1my}^=r^;zjUCPFUrc2dI){( zp%yO`78A@r3jvSKN#!O!ZnLCuzb!N>>PtE~GzMS0t+b~*9JF3}7Tc+`R?g_4 z^6&fEs8W^!pYf6OkHfs@x?Fxgp*Ob?Y(4sQrboADN#%DD$+I89sA?$TUTQJi*!Hs6 zC)q;1^>+#bPYhoC)$09z$k{^$CggcSxpa4uz`klv=5mBZmBRnXd*!anVxbySKtxaP z$%G?GUmvNHa1nhUb&=PN(!pM3Cq_=o3INhedzRP*m!B3$c+9Ud3m2XN5}b9fZk=5* zzVbX%=dYpyQI#r41;w!&?ve{l_5V}0y;ug-G>ct*qb+PZ8T4a#JS-A95GnJ4=}P-a z3~@*^tN^oXq50@^VrFqA*XyE^dmWNFICz}2UI7)fo?i9?#SD!reG@QM171H1N>*Al zUyi&E4lqZONyEE>67ejf&Ym1F3eh%EHEj3-Vn=Z!S35!UgzhuKRND4d1s$mLt=IEi z_dOR{UQ9afmppEE7uG!!PI3tcrBTT&R>(&|N1yg)=aP7g?7~|g*Fob3ksx&kE0c>0 z!uxfaf^G=5{l;@kgqH#~eEZFBF8if{}g^IO3lA(MT zRmZWhb9Xn8+Yv2?6Q#Cx7l^l)GILED0%CJV_2T3uD4SN9yj;EK`5bT32Nq)XWC;-~ z!8+Fwi>Gj*qwxzNc{SyBM4D%!3-yrR28)pmf_xvPS$uh5Q)}2lWv)Mr0O3R4diC2> zgX5fz4_y8CP8y6z9UiE96s}n-Kdfra-{@JIN&q=3-#`?1TjF_>G{ymx~G(!f^^H5-lzC-*FXuR)1bXFgzl z_}*0uH~;~S@4B#p{g#|{V-na)Sqc`c7`_DHWv}Iz>G=ZQzWHu)5F>@B6BAH3bUE-M*46zou=0HKP(PQ0ji{hGA!)9j$JIxoE4dLYkPOmJcsne%6F0Su z7RE2$TB6XzrV03+q!Wg8AzRvQ>XG%%ML}C@%pz_&#)jL+hD=Fl&a=!2(~a_kB%avZ zk(S5K^oEGra+IG7PS?zJINu4CKO}F)L#FO^c#ptM3c(AEe8_EIdR!tSFIE&i$9#Hd3Z7JYDc5| z`>*m^TRZ>KqN38Ggr0QnG=Q@o0nhEFf1wJ5IBZD->CV5w0yMAleLntRSF@!{r#eHY zalY+$rwgA7|9-;4!rjGlQ_(Ib=vp8-UpS(p`T6XTe9l+AZKyx{8w#jZ-|$V(FQh1a zoUc=DX(K0FpIKWIdH5u%_>6{m$d}*;u7sC2BdwI;n?<6{*XPAV?#sGuv8SZ7@E=Y7 zPOD>lWY69dN@GW~>|9q*|1jL4j{pT(pIcPp>8*|Zi=D5VOEPoT%V)R*_DmHvu~PTpVjYk%{ur6FilFdulOiyo9$^J~rMqdCb7`0u%A&x6fmJ^LLmUXmp0 z=-d4gx?&@S`uIoaD3-s_2djUI>_wv=Cd#tHo9P(A50a%@h&Opa6ew24SoGLz-_;wy<;r3DLZIB zD@(W~{f4j7Cg1Zj82sfgWY%Mn2}t!$m|V*>r=}@`-lTe`KuMnSST2BXD}3U)I`$fd zD)L;mPj-6vZ+tmr5ghY+?wUAwMTy)j>8XgkGkmt*WjUK*+tbtOgC~Bdps0F{Mf-fj z!cg;BD>gon^1tBa%vs=XmE@V)@PbQJ+mDU9zQ#T33&}^ zfOlaq!fhW>G-Bt zXwfbF&~O=i6W$BkyU+>KT6gXX$~1R4E$`Wu-}H}ebC&TcElD8CCNnI*^Z{S0wApam zJ#b~)9{-Azt!76Rcw%4XI8)8@2kCI#N{o04z&-Z-xfNJ3NQH|hu(8!|Mgp@+aNA;g z`IR;z3y3#&kh|;3RKRe&oI78H%08LFi(uWU8lFor_RabpCMvy-gR}>If=tMyako5U zACQ24s203 z-80ep9|z=Ya!N+2 zi;806Sd0vNiPB*?A7$nufI^$+`XPB2zuEUeEZWT4Dg4-Kw4&jubb# zHGZvTRVMW+e*N{IaSm@B*4Y)OR`8t}8xFic@*`f`bV)0iF5i?ipYdySVd zmPLc7RGM&x{Dc!;nFukgHcPWKF%d5XI)c8RP$^(4I(OD>Hgd87XZohC{Y$yHYuQ>6 zBBPXQ#9cM65SiYi6d&=>&sj-{O0V;Mc!lyU#mo-dnclYV2~N9lWsDI$FIsh9$TRP` zjgZ4dD-~N<+m`$CWb8_H%f?2hlk5Mq0P}2V=%3jul)TEa8Y%+I7n0>U*e-Tv%e#d} z7dw8VQV^>fZe;R0xX|@Wwb!E`Xqf7uJErEdQ)h$y}ro3mrBAbSn-MeGCXb#NoOzlw*&po4ID1=_L7Tc<*e+{&QB~;>!8ne>` zf7AOxz+IeHMc+H3w{j`JwqZB`bd{YvxoP;R^zU2p+t}Ofu9Xs-9ro_Q2f5}IIlA)^$CKoQ;bQE9odcVq2((!ih zHLVOjx%5w8*ksKHtqI?tl@woUi}9PwAE;qet%7X!c>YVB!)v><&gwQCae?S}M0YC( zF}&>N_gg%ix9kHG5bfs_!;gJfEVgXs*{J6_!1#c?K>4+}O9?}DaGh;kNXPQW{E0?v zMRhb{Me`n|eRZ>fxzezOwUEzrPF*}7SPI{hdkIDtQ-vSd)1a*w|KOtDd|vH!>)UYo zRQ921iS|ccTlnZV`_CVqHr*kx$0x zoAB3y!XK^Q-2FOVZDm3b=y>VKKHP$*C>VJ*?UBotFg#Kjsv`Jygd(#)dp7u>XDq-E z4~|ow+m~!smLod?@DmMCv zKP%rPBul4A(Iq4X#u>_|gwg804 z4ccW{#w=Um!*jLSFnFOg_s9ItV+BfpKljbN?$_c17epMax3pVqd-?0AEk?{`Z{4WK za5pXN#mnPF_U|B=xJwN<{JaP%K2Z7^F7-Y(eYJbaUEq&q?8UQK1Sc& z3Ry=imn7<)8;bJU+UH{*c{5uOvm>oZVyf5=JN>F$q6wTIuUP4Wq z$`fly_9i86lu)9m5Wta8GqLXL#T|#{C48+Z)=dZSs1n}&l;vybUQ(oR93{MtAQ`!h z&pWzez##&9+ZuAm-}#@-uoaaIHW%1Atz->*(i9zc#lPzuQ=l8J%V}HMd3j3^hY72G zeRITuRbxRUHmht?V}>VoA;Z9OMM!dl_rP`inRQXKtv@#5Ek)J>dNUIBRCGv3cz4F< zY}*pBr4Ioc)PkjG)yF~vTc!qriI?%7kJZc}MiuKU<_EL{B)-Z zCl_&a{Ll4pGv{Yb>Q<;BJFmdH2+z}hnYLU^4t#iy^qCAz-<++PPRPgxE2uZH7n&}J z0vnch@9yYdufMM$5|{?rZakxCxY~3Oa6o}Gq<#IJmep9KI2!P#l@dk836~j*#7x#k zw|Av87N2Y^rjG_7+@y895!ufz#?TZ&sgi6wdG&KVyqtx@Y~06e@#dF7ddtvHl{Ebu z@)IJ*5wGW=MPM0q$Tzks)x%BRd-ZC6CAec`w2JB;ua^)T%aAbYi^Hxpy|xUP9t%k& z9~})NZFbflaqUkmiDJingTs_3f$;QNl5iz&xPy8Vpf#@qW?5>yxLlpgDDhez2t;E! zZ4iQr=Wtj?MrjIxY5nXNJY0F-bSz_~LPdF>IBY7se6IE%l)=u$Q<)O_f+7hW0J+sv zSwfZuE|Wsq32Nu$f>j*IBH|MAzd&q0)q2`plb2C7uPY}-Qhx&;ioo{W2%YLLb@zw7 zd2QBz)X$A~6^=|n_$736=$%HLY*7Mi-;J9*`1&gm-Yo!{}m-XO8EYKl+N zaP@U%l{`UGeQR2NSo(6YLba-{yueZ8qozg*9{LN`b4=XD7MY%tqnGVmAL4eQ@ML#e zf{#Y*te58~CT!M(t5II-1yvTLMo?iH6L0}i?Q9957{K%+^cS)?%x78wBT#$Hi`=?OJLKD!DP4AF;)mP_H3=CL#|uaE2oTR zshMQuLc}y!$fb9?d(u6NnZU;vd_3-mjR}iut|0{wjO99@VV>FuA^J1fNm!mer|imq zYJq^%4Z{I{+jTuV4gFKfub-g;CC+g4AFiPf_A$aKpIQHogY@!6l(X1D>nKxS%4d1Y zL&od8PUp+x_dF=_sd&`T{3EM4KV_?TOa^YL(GaA}QdevJ5utq2*+krlG8|Y7o3BH) zQH5!@nE90h`khsC2&eC_4xSiuMWxuqc#EZREBwQo<1xOdT)*7~)OqWh#0 zXA>d#yFg-yw?GNf%Yo-59E|v*Nl^^v4QLn7AtSByo*y zT$q2e=mEe1xjr`@#9zMLuv%L#oLk$cy+=$V* z+!u0+Ol|HN&rFTN^Rm)gYCvhYUx=S>;q!0UV%AP_rQC+MtikK^t(POy2+`8aKFwE3 zKb94A=0H*Q>YkG&(=$de;^M_0_q#2Q8T496Ar4W@&#U2|9z9%QXXWvsKkPrV_ndIU zekvCuz2HpVQ(Z3;jXk{w0QSFrBlrdzrmXAf zt*&}s%`I6-S1jZnIrl_^h_MYoBv`Ty7ht;0n zXiInfPI+wUb&1B<0%rIeb1}(rhHseWx`1P>VgKGLD%$yleIWIyDMu*jSb)eP|3E*v zj=@^S{=<>|Gh+i0>KRu)y|az!f7rlKt+Rd@X8=I{}# zo~EoQS8O80-~X8=%Xjv~#DM?8kN8<3AMxNT@eemqI+%6zbyX%hZxk3CBe-d>i9vic%Et6NGelPa-D8#%$Ml!B~ zFgPMd3Bo{A#$a%z7DHeNyK)ZBq9`$N3g5klWD1`a`0aZ%oI?>Tw=IP^B|5$b8#>cG zUYsr{;{v4WVR2=1gWi&4x*HLaM=U!ow?6dKwY#4!p{}^d(BbjrMhEQ+&cXB}T*($M zpYzg{>1rWg$uh4Lv9!A{Mb7>zv#qyoRTmbA_76k#YaDk@d}swl3~Vm|=E19&-Afq4 zf9;4uoLW3n@n^Ycl7mpoV#%D7o+_FMsk#ehv0k>&^RtMzup%z=q>}w_F;fM}Pl*b6yRLr=_FoT(*`|R8&2y@GC09#a&a`vtmtVAr4j2xw*Q@ zo-jr|#AsVwTs(`=L2B{ze2R>WMNBO7)tHc1Yfq>fJe(Nhg1x)x_YZ00kJ(!O-dpB8 zjw=&BP<~#Dy>FbSc0y47#No@PA)e84Cc)afN%Q&YZ_V;dY;5(~C}^Me-+1N&0C|VP z_BSXvywE|~WSAlaouuV^EwvB4gX=?Ccio^5Dk)O0?6i!2&m#vxLsfX%uKJ<4Zzl|w zCioXRC1c**VTkkfJ_^miY!AkWkocD$FPp+z5(*~w$#MB{=;%`T&t_gN+@Fd8Y(2ZhCl$&LtI7D_1hL&J8)aJ4ZwdxIiyRd?Tp}+N^JQwtbFISV=-QFZSxNNI0~EYwWCBxFbxCkinR?(Ut$35 zEF_>ROE}mTIG6GKRA2t`gvPt;2L&UePfq7M?Bx14EiP}Fgb+Co@JyRl$b+DLh%YL> z=?S6$-yumWsoLp@IDw|md-kL<6=}XF@|-DuQ+x^UK9BB%?GuDh(V8rMkqvmT&%v5D zSFWnA4zy*nt7o58VlYLuTWo18`><@YMq1FaUK*kET=3ENwcJVIy|B>4Mbhe#_E1QQ zzGIimNz11pe(fV~PbxsD=farml{|7=uS3aN_?|Q%{7sz)HEtK1R#OQlU%k*RmEC4J z@b+UpOAC^M97wrJg=u)#Zew*HkZ(@ptvlWe(v z;4Z0kday=X4g&*=HbZk0#z=Ue#QtQ}W?7wCn1WMOY7R4JR;F^Ym@Lv${eUkaVVa&_ z%+-jke17~xDkW7G{l$Tzs%qQtp2l>Y$4iYm%Z;y&_%gVmRBYdEj{LeivBp|(Iz%|q`w6WJMh*o7=N+icl^8n6UtaP(ij-%m5^PxHhrNH&qM+D(uqoTh}9WAqPg*XPKyb;$Dc=>si2}=( zOWhHIp>aspix;4L0(h9>3kN_N*+oUOBR>E%8v_^ZDW~Q{mX+!U6SK{U1_9MF^v&0jjDD$9RnQ>Yrspt z*(2FNNNM&k`lYNG9Yy`MWo%t1QZAj9vCbg36LJZ?ht8(|txPH+OI5G3ytikBUa8@i zPjz;|1iI@FWOHRN^5i)fIun_Xs%%(Q>eI5WHB=tW`1DCh>%<{Kd7rG*c#KZB zdYV~Ld4Hy)uIP>dUne*u#8e<)zX9k;ljxF%`ZvPhYEZ}ba9DZvoMA@~EMhCJG{|Bi z4y#_v+snGwBsE*QJ`D}mVxG`Ls7D*SAdw8+^EAl zH2hg6~^ySs<63)0-3bg=${%yCXhCnbGJbN=Ov}A7M9}NaEbYc#~!R%^*;GxmKDu|qpkYuZpZFD>q! z?tjIWwsL)=vzpu}*|>7PdAVL}1j?0#ap2b=x)n%n#LoiewI|}H9RW94UQQ13sF^@OOBG%awOuh?QlbU@DH7tPcd#Hp z!%K>~#~1alkq;J;Y%e^q+t|Cb`Wb{hwIVjq-L$WH+*Tiv8{Ts#SN(DS`NWrq-}w0x zCPIm?frIr}!YQeMD|@8-;#K~K3+7Li`|0N+)Ad-bhuoo_?O~+azO(lyvroI~sjEJF z$p(NS3qX(Q=j4B9zizloQA)DIl>BP%n>NeDkFFRSMQL&=R?BVTrmLyp$Z(5mKD3{WG=JIK?GylA3#Cluz+3u|wYKYJs5~6}x{d`;OTZH!I zv-I0hd&iwe=DB4O%??6C6kshfvKAN7BCnvFCydgnQh%N5ZO6~c69@q)P0UAO6aNTL zc@3L+p5-eTY{(8ISf41|3c^LQlKY-)ugvAMC9S7{*|mQ@DpX*f{HJ0$rN&||LSRTF z4aUgB9s@Q$I|2iV6Mkfo=t1i+8#k@gs3A`!ON2VY8`&Ho60%YKW8HSQC^}Bd?XS)0 z`%o$VtBw*bU|X=&iT{PVPIol7jK@pl%Eep_nxaE?BP4NRYqD5I*%1(yBQ|m}YFbMc zuKJu}C-03OhG?s_SfO$#-hhfk?}I z<6xA!V3kT=!%HeI;QIStHo;W@dX-%lYaN4jr%>zQdwz`qdTSn)WhnEC3ybGRp-7uaoC@DEB>!C z+7zu!i@gjAc_-rpvY8WUHyBvY5AxWOXz96EwwXa5>N{y#D-$jLEYGgA_oGCao)-#d zrHPd_GR5oS2!UB24{AkE?>cUji5h*(X49oFhI&+EhEXtZ`19BqR@$EF_Avr9itL;JnUDVR8M4iNZwQaqS{G8z?n1llK-}RB2@?)E$%vmM_1|omi?OK*4o@CRdtsF~2p4YEN_J{IX}ORS}h3@-~RCGqJTFZs(nZ{}c(y?`=mD~v!Bf6;tuAqz2R z6yy^sDFC+C&a<`vdXOLgMj3l zmlVwOsLA_`tF`Ma4!*It;k?$eK@-GZj1Gso>F_G(T)y(g&}m8@-b+fagiYXr&;}Kx zkUg0rb@8OdW-W#x+j{r_KWQ9h7+vOKF1N&g!QHUx(5FQ=%S!GsI%HU#Rc_wnUgICG z`~;NQ;Gos*+#ep2*)>M*g-I=uoankw)?5_ztp z(i!ZTIsuVgYtQA+5)1WJL+C9E?|lFmX@}! zvx~Yx3q}|VLGt_^gi9(@=9nyM)F#CGyZIk!XF6BiaE~G`+Omafbfd#F3(>_Hxy-a! zc6EkIQeN!YOv<}mbXG?TN|z2^Wp_T`7XeTHdF^F1-N)8B;8dqi54D+DzRT0L>a7qKxySa&c`@){*Ku}A(D--0)Wcy~b!d14dMc6gkaUXIRqVgXz*!KKwKabJ2d#ZNi|#=k`%U2? zh?(AWdQR*utL4}pOF=dtE_s5K#h_v)QqW}GOoX+b|5v2>89#0=v%T1o&ME5Gf*-{~ z$_6sWXh1T1)g3*{ssWA*7a}{eBh@kmn%lt z^_2%Av$@6(uXS)agr0FZ>m}31PO)Vq{*>_Zh${T`Z`uiAI*QoOOd!S_r@Vl)++Xwq zcy@Ay|0gzYiVqEmD1@aRXWrqtI&=)MzPwYn^YpK0s$wz~T03ypT9g`$-HVE%nuKC& z*4Tm2M1I06UJ2D|RqvRBnLAQ>Ph**2X>;4UlP4!D>!&Zucu+_=wA8Ziw>{EeCJP#w zua~|Zx|N#x>Ul;(-R{-hfGasy6I^c6^O#wUPZ?*r^8BiDVe1g&V`4N@5s@%6#eDe1 zNZJHFPmL3oZ+UC1$|8cyyYNEl?Yn{_Pcnl|{Ns&$A(n%P+Fd?t!r~zr#V^cINUh;< zEM?=;txTBX{B6punef* zvx=o|0dSiw0#^DZJ!vg9s_vE3B~uo4>Nwo4(d3T6k^#+pqG-MOWZ3?#M%~7BzIOM@ z!NGQ9b6UjopU8o7!$UuMwUb$XDs2~30#Kism9@x6HG`9<;ch@dDjoCdP*%>rvT8)B z%i_4ioGhXiyw40H{o%`^`WV%0eqj82AaAc~YoLYQVg_u8341cHKELD06j&3yZ)N+2y6~9LI)HtPozW0lS9lHE?deBhhc>oze^1)USyQWw1bn>cUBa-H^p1Pg& zczV>_9hcI3i&;ZDI=Y=x`tI$LjKi<^LM_Lyx_7Z}-8~x4cI3nG7lK>s+4eV#dWRYG zJKHQZSy%W!7?Pvs7_b_((*c{J7>#nWF20ckA7%LTzA=D!Qq2uQI_?)Ji-T%|loy)I zW6lrgb6HJ09uzSS1v1o0{q?b&$#@-Ob%RNI7Kx;ee7vdXrOG$ub%Xdw5)#3v>`!6N zWY7pEbl`MI+}j>%pXPjwb()Uw}M^A*wS-l3=rq_Bb7rILYJ*XT0hYg0Su&|y!RXv9Pr8c z!TGAW&s)--TheGch1;+XSV|7xVqCo2rZ}lBgn0Yk3RzGuTU`HxPswZjifp;(YSOxM z_U&{n>lH|laj`k7>@3Ry0)>w@Xp#!4bTXT*bgp2eMu{kG?K1+Mg3uxCWKF(%`E~cg zC9X_l%pK#=#RYPNiZ((vUd98I;fCkkR10!RKTE{^K+srH?dG@z43 z(8ya4>CgjwfnQQIo|y{Ea!Wu^%=v)y!q_{j`cEARH_ICCe0InYLiew+u!i_alQ92C z;_B~GFgM{n+lCy5d@ZPBU3Ufys)QZJ6U=ds&cx^P&WY01+HI|B*ih=$m2J7^$@YJ~ z{C7*^oppiBK^JLlx-t82vnzgNS*4{}U$e^yK|kB9Y&$R`Nn7v?zz5 zk48+a4R888*AX_^w8-@Kk;s^wy|GtqpO)QMTx7{NSG2S6)H#bu2j*EXmv{gZZ{Mzv z(5+Q#19<$ngK{icig1W36kq2R6&o@+8*(*j_Vn)cjQ$^8R=twj69cE_&WA8R7;t00 z{CBT?t_ZzdFtMmOnQG(JGS`bD3|?0?sEWB^Vf~#&vS^j zz0)S+*G|y$G{DuL=^q{~)5zA0{GS$}$}P{D*@fI`!S1EgyeE?{GTNEFDu@TU$VwE% zR@_>yW%2m!T*_TC(qV+DkB}IJAT?Oa?nRt>XI-vbM)A-oD4R_S>v= zstRt7Aq|dA@JZ?3JDoHlW^P=LvI$tOdzxXR>m zS#E`mw zyK$$u@jhfZwt8|!U}$@$n^?($WhTa$*^DGz6_NqA@Z9=Hw|70`%YoHjO(j^5j)E*< zu^Xh_`M>F$9=TKE(DJ8ff*k4>zV_a#@WO_JSKv1(N@UCO#W<=gQX!FAOss}@Xh=y> zjD>Nof%3P%)mt+ZeS06~)3h`xWgHJi3a-<#Xx26ejyio+SayDrb&3SoTqWE~LEYZ+ zo##{%E#2XCI1_0Owvoj7Jz*>cfTjjbF; zn9Gc1&d@o{Dnz!t%Dk(jC&>^&Q^-`(}Q}XBeDOx#!vEoVC|pdoMP= z5E=_g2ZSeDE$+ywCK^GlxBNwu|THCrE!a15VVG}z$Y_TyVx z_mY#(r$2$mwfK8%d2Ro*X+`_DNRdDaeOUS1nz5XKA z=C()G)OV+bsH}T`GvqV=tJ2yAdyXsu}Os)#(5!sTOuW;U~IdKMJTC zoONMA9y?_)=NHl2)TX9fy1)*$1gH@G=e)`~W5usmfAQRE`)K`~Myj;Eiy&Z`)3P2b z4gyhKY?=2ntwv##*YD&(^A}_bG2#*P(m2{D^bsBH2PnPqQG z?p|@v(9{}tO?yzOh0T&8eKfe%II&$dFZQWsQvKUB%y>q&^PDel#T4nk4mt#}WC46S|LF)5+ug{0U1Wd*l%4m( zK4iZ%WV;<^QT{RIlea==i?05fA#3?X=spqKZsi#stLs#K@_Juvi$Tv`Zh|Nes?n_2?4iS((FurVWG+f|fM#?0u~QClX3 zw>D$w^>=OFmkcJ4vJ4p_LdvYVQo4y(Dhk1uE7O%SMR(4E~9%{ z`1%6eP~p})E?zc=L?4@D5+9P4+!#ns)-4bm(~03TK7FiaeUC)D)ozG;2{&{r&)S#g#ZifHDRp_fLo1?qy&{=24kaGy>kiBLS*5 zK2HFjQ6?g#vRG>G+FP!QJ-qe)eL&_g!?v8jN_F9>(~OuKIgkap{o7DH_qynat)AY- zvGF>$uHI2toD3=vDR=}T`ntiaA9Mc7dIKG0U~8^=cxkRmjKVj+D_Tk@2rvET7@0C5 z_VZPsl>jg6pD@Lrq}<^R3FYD1dd_7#{=&i=FkoKcxziMY1b1Mj(I1tdp4lA57n41q z`v2~Jm;oXQ=qiqDsr5g7ac! zqrgh{hB)+Lu^@CkS2`nW(!RL*)N1a}?;1Vh^+4x|;?;L;9b9(XXsmS`INVy+X?kqp zgUziM*X{HIsqVgAJ|YJ<>#3j5FENJ7Rry@5D^7pFB)wpkk`1hl!(IDDwhI-CVhb=h z)o)}KAWV}9f9}zh-JzY{UWft0*%>a%=XUgY`1_;*li?nf-mrUHgc-Kzz2sI0kW(56 z58OrTEB$@!Ly#$LEhELg{N0HarjUvSP12J!hEyKaJBxpIQMc#oGAeJ(SBzHmE5>gg z=oBl+DaqgsV-9oMj-|F$htO8b{*=$-B?(7A!`OcaFlFA$Cf`2)q<8OlbX62m8&y$G>E0_3k$V1g0JB|Y_UplfOqTr4DNZ4B7ce0z&k+(@Slw3*0DW~VBh>2+ zOYseH_}uoop!a7?Fid*%O9wK8%k^)Sv#!`)Z&cF3X2mh7;CF3$L~zyb9~q)v8Gn7$ zV@vd^6W48@qhi3jA@ciHa_lpA5(%dO>$=C4^$g% zPSj6FQJH54#qOUFWuQ=y`!Z(@7?=j&OvpW97*OcsW3Ha-jM@_kjF=Y-;ci7`>pOVu)*CXo7 z6AQf^1bSm6m1ug8SCmgzrKSlu?!qbNf@;$1up@Hqy{UfwG%d5#LpO=VrI@1S?hyzu zd*UR;^?aOD@qU=Bd@}Miv`UL2Gg~l?A=IyR(c&O`WCOwlP0Jjyu;bUcm)SnB9>aZXG<@J7hR#<0u!Y~1ZeF~dvzot5z2*;=RiksBPFq-96)Dz((6gK2Py zn51ol%lnU+gIDIZtF9P14u+V|=>rem;ymMZn`090@cWx7YOiTA{_Ct6G6&b%<2V-* zHCMU$7qxM5B{ZOAh8*T*$LQY)XOwiuB9)p-pS>0^rMnQ2evE~=d_mjyWkL0}HJF+_51uX4&C5D{2@`CxsmKs(42(4Dp82d}Klq~%iE!?JQjTkE*Zhm% zbEDmy?A6$b;OI#`@9|csRl3XvkTi9w3j>Fe0*1bcu+87%Ib&Z7>*aT+K0JLh@PV44 zEJPD{D8SczK7w|hUt}K$s?5jbjP|s8gYY!8pXiDo%6C11HSnZ<+-9WO{dEXp?|dnO?Qs}Z&iuYN78zeSjtFVVm!blT`9_g>pTowyRy=t%3ky#B z15A+b5t}R%44pS^p=N74xK8Ww*x-INi^?_wDiIfp?pZ`asdoo~(QmzX*KUT2G%9<} z-Cai)4&$#xQ>uaiLuyfJ^hR9Cmrd1%YVgPO7T=}h`(Iu~u0&o(Ry6Nj$_GtYz}z}k z(s8mznD;Dj3rKNlI(_qSYrnJ{$iTQt3Zofd)uIM$Agb zRDk~D)8G_UE|kvWI7gUHKMUY7UoI6g@wt7;NbI6V_RAoHuC&srW9>1UdQ�Xx} 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∨~ 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

  2. Y-SS6iReo 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 z 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

    ^6z^4KI{O$~ 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­0Y|k^{u|op%+Y8 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

NqvoW*nebyzB@`;~! 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į^JL8IbFU&|F3Vhrd&hLKN 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%0Dto5GWlQ^E33HGHP@5#_qmLcyj+P1 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�Xx} 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∨~ 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